Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Initialisierung Z80-PIO am KC85 » Themenansicht

Autor Thread - Seiten: -1-
000
03.03.2019, 17:04 Uhr
maleuma



Wer kennt sich mit der Programmierung der Z80-PIO bzw. U855 aus und kann mir zu folgendem Effekt einen Tipp geben?

CAOS 4.x initialisiert nach dem Einschalten des KC den Port A der System-PIO in dieser Reihenfolge:
1. Interruptvektor E4H zum Steuerport
2. Datenbyte 0FH zum Datenport (RAM0, IRM und ROM ein)
3. Steuerbyte 0FH zu Betriebsart Byte-Ausgabe zum Steuerport
4. DI durch Steuerbyte 03H zum Steuerport.

Beim KC85 steuert Bit 0 des PIO-A-Datenports den Schaltzustand des ROM-E, dieses Signal darf also während der Initialisierung nie "0" werden, da die Programmabarbeitung im ROM-E erfolgt.
Meines Wissens nimmt die PIO beim Einschalten einen rückgesetzten Zustand an. Dabei ist die Betriebsart Byte-Eingabe eingestellt, alle Datenbits haben einen hochohmigen Zustand. Der Signalpegel wird durch Pull-Up-Widerstände von der Hardware auf "1" gezogen. So startet der KC den Bootvorgang.
Das Ausgaberegister ist im rückgesetzten Zustand ebenfalls 0. Wenn jetzt zuerst die Betriebsart Byte-Ausgabe und danach erst das Datenbyte 0FH eingeschrieben würde, dann würde kurzzeitig "0" auf den PIO-Ausgängen anliegen und kein Zugriff mehr auf den ROM-E gelingen.

Aber warum muss als Erstes der Interruptvektor eingeschrieben werden?

Ich wollte ein paar Bytes im Code einsparen und hatte versucht, die Reihenfolge der Initialisierung so abzuändern, dass alle Bytes zum Steuerport direkt hintereinander geschickt werden:
1. Datenbyte 0FH zum Datenport (RAM0, IRM und ROM ein)
2. Interruptvektor E4H zum Steuerport
3. Steuerbyte 0FH zu Betriebsart Byte-Ausgabe zum Steuerport
4. DI durch Steuerbyte 03H zum Steuerport.
Aber so bootet der KC nicht und bleibt irgendwo hängen. Was habe ich da übersehen?

(P.S. Am JKCEMU tritt der Effekt nicht auf, hier ist die Initialisierungsreihenfolge egal. Das kann aber an der PIO-Emulation liegen)
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
04.03.2019, 07:28 Uhr
Heiko_P



Hallo Mario,

im Kieser/Meder steht genau diese Reihenfolge für die Initialisierung beschrieben, aber nicht warum das so sein muss.
- Könnte es sein, dass hier ein Interrupt "dazwischenfunkt"?
- Hast du mal eine andere PIO getestet (Z84...) ob die sich genau so verhält?

Gruß
Heiko
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
04.03.2019, 07:52 Uhr
PIC18F2550

Avatar von PIC18F2550

Es gibt nur eine Adresse zum Configurieren der Register.
Daher wird in Chip beim schreiben eines Wertes daraus festgelegt was als nächstes zu laden ist.
Sonnst müsste mann mehr Adressen verwenden oder Bits zur Adressierung verwenden.
So wie es ist ist es die Sparsamste variante.

Die Interuptfreigabe wird erst nach der initalisierung gegeben.
Sonst sind Fehler vorprogrammiert.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"

Dieser Beitrag wurde am 04.03.2019 um 07:55 Uhr von PIC18F2550 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
04.03.2019, 16:17 Uhr
kaiOr

Avatar von kaiOr

Lt. meiner Zauberdoku kann man den entsprechenden PIO-Kanal auch mit jedem anderem Steuerwort aus dem Reset-Status holen. Doch erst danach nimmt er Datenwörter entgegen.
D.h. an Steuerwort->Datenwort->Steurwort führt kein Weg vorbei.

Die Interrupt-Enable-FlipFlops sind übrigens nach Reset auch deaktiviert, damit Steuerbyte 03h eigentlich überflüssig.
Praktisch wird aber gern mal Kaltstart per Software gemacht und dann möchte man die PIO natürlich wieder weitestgehend zurückgesetzt haben und auch einen gültigen Interrupt-Vektor (hier für die Kassetten-Lade-Routine?) laden der keinen Sprung ins Chaos verursacht.

MfG
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
04.03.2019, 17:16 Uhr
ralle



Auch die von Aussen sichtbaren PIO's wollen es so. Egal ob m001 oder M008/021.
--
Gruß Ralle

Wenn Sie dazu neigen, Bedienungsanleitungen zusammen mit dem Verpackungsmaterial wegzuwerfen, sehen Sie bitte von einem derart drastischen Schritt ab!...
... Nachdem Sie das Gerät eine Weile ausprobiert haben, machen Sie es sich am besten mit dieser Anleitung und ihrem Lieblingsgetränk ein oder zwei Stunden lang in Ihrem Sessel bequem. Dieser Zeitaufwand wird Sie dann später belohnen...

aus KENWOOD-Bedienungsanleitung TM-D700
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
04.03.2019, 18:01 Uhr
maleuma




Zitat:
kaiOr schrieb
Lt. meiner Zauberdoku kann man den entsprechenden PIO-Kanal auch mit jedem anderem Steuerwort aus dem Reset-Status holen. Doch erst danach nimmt er Datenwörter entgegen.
D.h. an Steuerwort->Datenwort->Steurwort führt kein Weg vorbei.

Die Interrupt-Enable-FlipFlops sind übrigens nach Reset auch deaktiviert, damit Steuerbyte 03h eigentlich überflüssig.
Praktisch wird aber gern mal Kaltstart per Software gemacht und dann möchte man die PIO natürlich wieder weitestgehend zurückgesetzt haben und auch einen gültigen Interrupt-Vektor (hier für die Kassetten-Lade-Routine?) laden der keinen Sprung ins Chaos verursacht.

MfG


OK, Danke, das könnte eine Erklärung sein.
Kannst Du mir einmal den Auszug aus Deiner "Zauberdoku" zusenden? Ich denke, das interessiert auch Jens Müller um die PIO-Emulation dahingehend anzupassen.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
04.03.2019, 18:11 Uhr
maleuma




Zitat:
PIC18F2550 schrieb
Es gibt nur eine Adresse zum Configurieren der Register.
Daher wird in Chip beim schreiben eines Wertes daraus festgelegt was als nächstes zu laden ist.
Sonnst müsste man mehr Adressen verwenden oder Bits zur Adressierung verwenden.


Das stimmt nicht ganz: Im Falle der PIO beeinflussen schon die Bits 0-3 des Steuerwortes das Ziel-Register in der PIO. Nur bei der Betriebsart Bitbetrieb muss das nächste Steuerwort die Festlegung I/O sein und wenn im Interruptsteuerwort das Bit "Maske folgt" gesetzt ist, dann wird das nächste Datenbyte als Maske ausgewertet.
Da glaube ich eher an die Antwort von KaiOr, obwohl im "Wissensspeicher Mikrorechnerprogrammierung" von Claßen/Oeffler steht (Zitat):

Steuerwörter mit Adressenkennzeichen können jederzeit, ohne eine bestimmte Reihenfolge einhalten zu müssen, ausgegeben werden.
--
Mario.

Dieser Beitrag wurde am 04.03.2019 um 18:11 Uhr von maleuma editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
04.03.2019, 21:08 Uhr
kaiOr

Avatar von kaiOr


Zitat:
maleuma schrieb
Kannst Du mir einmal den Auszug aus Deiner "Zauberdoku" zusenden? Ich denke, das interessiert auch Jens Müller um die PIO-Emulation dahingehend anzupassen.


Naja in den englischen Dokus im Netzt steht es eigentlich so drin:
http://www.z80.info/zip/z80piomn.pdf

Auf Deutsch hab ich es jetzt auch so wiedergefunden in:
elektronika - 188 (und 204 und 224/225)
Barthold/Bäurich
Mikroprozessoren-Mikroelektrische Schaltkreise und ihre Anwendung (Teil 3)

MfG
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
05.03.2019, 18:52 Uhr
maleuma



Ich habe das Rätsel jetzt gelöst, dazu habe ich ein M001 genommen, mit dem TEMO die verschiedenen Befehlsfolgen manuell eingeschrieben und die Pegel nachgemessen.

In den Literaturquellen ist beschrieben:
- Die PIO befindet sich nach dem Einschalten im RESET-Zustand.
- Die PIO befindet sich in der Betriebsart Byte-Eingabe, die Portleitungen sind hochohmig.
- Das Ausgaberegister ist 0.
- Die PIO verlässt den RESET-Zustand durch das erste empfangene Steuerwort.
- Die Reihenfolge der adressierten Steuerworte ist beliebig.

Was aber nicht in der Literatur zu finden ist, ist die Tatsache, dass die PIO im RESET-Zustand keine Daten in das Ausgaberegister übernimmt. Demnach unterscheidet sich der RESET-Zustand von der per Steuerwort eingestellten Betriebsart Byte-Eingabe. Denn wenn ich in dieser Betriebsart ein Datenbyte ausgebe und anschließend in die Byte-Ausgabe wechsle, dann wird das Datenbyte (im Gegensatz zum RESET-Zustand) am Portausgang wirksam.

Demnach ist die Initialisierungsreihenfolge beim KC85 zwingend einzuhalten:

1. Interruptvektor senden, das öffnet gleichzeitig die Empfangsbereitschaft des Ausgaberegisters (Portausgänge sind noch hochohmig)
2. Datenbyte in Ausgaberegister einschreiben (Portausgänge sind weiterhin hochohmig)
3. Betriebsart Byte-Ausgabe einstellen (Port-Ausgang für CAOS-ROM-E wechselt von hochohmig nach High)

Danke an alle, die mir zum Verständnis beigetragen haben.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
06.03.2019, 19:54 Uhr
ralle



Ich habe heute das M001 und meine Bastelei rausgesucht. also unter BASIC muss ich initalisieren, out6,207:out6,0 also 2Mal. Erst dann kann ich mit Out 4,255 was ausgeben.
--
Gruß Ralle

Wenn Sie dazu neigen, Bedienungsanleitungen zusammen mit dem Verpackungsmaterial wegzuwerfen, sehen Sie bitte von einem derart drastischen Schritt ab!...
... Nachdem Sie das Gerät eine Weile ausprobiert haben, machen Sie es sich am besten mit dieser Anleitung und ihrem Lieblingsgetränk ein oder zwei Stunden lang in Ihrem Sessel bequem. Dieser Zeitaufwand wird Sie dann später belohnen...

aus KENWOOD-Bedienungsanleitung TM-D700
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
06.03.2019, 20:31 Uhr
maleuma




Zitat:
ralle schrieb
Ich habe heute das M001 und meine Bastelei rausgesucht. also unter BASIC muss ich initialisieren, out6,207:out6,0 also 2Mal. Erst dann kann ich mit Out 4,255 was ausgeben.


Damit initialisierst Du den Bit-Betrieb. Wenn Du nur eine Ausgabe unter BASIC machen willst, dann reicht OUT 6,15:OUT4:255

Aber das war hier nicht das Thema...
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
06.03.2019, 20:40 Uhr
ralle



Ich habe aus der D002 Anleitung. Man müsste wirklich Mal alles wichtige aufschreiben. Einmal in Assembler und einmal in BASIC. Beim BIC ist das schön beschrieben.
--
Gruß Ralle

Wenn Sie dazu neigen, Bedienungsanleitungen zusammen mit dem Verpackungsmaterial wegzuwerfen, sehen Sie bitte von einem derart drastischen Schritt ab!...
... Nachdem Sie das Gerät eine Weile ausprobiert haben, machen Sie es sich am besten mit dieser Anleitung und ihrem Lieblingsgetränk ein oder zwei Stunden lang in Ihrem Sessel bequem. Dieser Zeitaufwand wird Sie dann später belohnen...

aus KENWOOD-Bedienungsanleitung TM-D700
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
18.01.2020, 22:01 Uhr
FL



Hallo Mario,

ich glaube Du kannst doch die Bytes einsparen.
Ich habe eben auch die Initialisierung der PIO am M001 durchgespielt:
Das erste von der PIO empfangene Steuerwort, egal ob an Port A oder B gesendet,
hat den Reset-Zustand von BEIDEN PORTS aufgehoben.
Du mußt also nur Port B vor dem Port A initialisieren

Gruß
Frank.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
23.01.2020, 20:29 Uhr
maleuma



Hallo Frank,

danke für die Info, das wäre auszuprobieren.
Bleibt die Frage, ob das für alle Hersteller der Z80-PIO bzw. U855-Typen gilt.
Bei den CPU's gibt es ja auch feine Unterschiede...
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
25.01.2020, 12:29 Uhr
FL



In der "Zauberdoku" steht nur:
"Once the PlO has entered the internal reset state, it is held there until the PIO receives a control word from the CPU."
Dort steht nicht, daß jeder Port einzeln aufgeweckt werden muß.

Gruß
Frank.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
015
29.01.2020, 21:24 Uhr
maleuma



Hallo Frank,

Deine neuen Erkenntnisse habe ich jetzt erfolgreich umgesetzt.
CAOS 4.8 bootet korrekt und ich konnte wieder 2 Bytes im ROM sparen für die nächsten Erweiterungen :-)
In meinem KC steckt ein U855, aber vermutlich arbeiten alle Z80-PIO's so.

Also nochmals Danke.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek