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. |