Fehlerkanal auslesen bzw M-R-Befehl ($d414)
Einsprung von $9311:
9370: 20 42 94 JSR $9442 Pufferzeiger holen
9373: C9 CF CMP #$CF = $02cf (Pufferanfang) ?
9375: D0 18 BNE $938F nein, Byte holen ==>
9377: A5 65 LDA $65
9379: C9 02 CMP #$02
937B: D0 12 BNE $938F nein, Byte holen ==>
937D: A9 0D LDA #$0D ja, CR ausgeben
937F: 85 54 STA $54
[Diese Abfrage fuehrt dazu, dass die neue Fehlermeldung bereitge stellt wird,
wenn die alte ausgegeben worden ist. Die Fehlermeldung wird aber auch dann
bereitgestellt, wenn man mit dem M-R Befehl versucht, ueber den
Fehlerpuffer-Anfang zu lesen. Dann wird der M-R einfach abgebrochen.]
Ok-Meldung bereitstellen
9381: 20 E5 81 JSR $81E5 LEDs ausschalten
9384: A9 00 LDA #$00
9386: 20 67 A8 JSR $A867 '00, OK,00,00'-Meldung bereitstellen
9389: C6 CF DEC $CF
938B: A9 80 LDA #$80 EOI setzen
938D: D0 12 BNE $93A1 immer ==>
Einsprung von $9375, $937B:
938F: 20 71 90 JSR $9071 Byte aus aktuellem Puffer holen
9392: 85 54 STA $54 und merken
9394: D0 09 BNE $939F Pufferende erreicht ?
[Leider ist das z-Flag nicht nur am Pufferende gesetzt, sondern generell,
wenn eine Seitengrenze uebersprungen wird, da das Hi-Byte der Pufferadresse
nicht beruecksichtigt wird. Dies ist bei 'normalen' Puffern auch ganz in
Ordnung. Beim M-R Befehl tritt jedoch ein Fehler auf, da bei ihm der
Ausgabepuffer auch ueber Seitengrenzen gehen kann. In einem solchen Fall
wird einfach wieder auf Fehlerausgabe umgeschaltet.]
Fehlerausgabe initialisieren
Einsprung von $897B:
9396: A9 CF LDA #$CF Fehler-Pufferzeiger auf $02cf setzen
9398: 20 22 94 JSR $9422 Pufferzeiger Lo auf $cf setzen
939B: A9 02 LDA #$02 Pufferzeiger Hi auf $02 setzen
939D: 95 BC STA $BC,X
Einsprung von $9394, $8975:
939F: A9 88 LDA #$88 b3=1: EOI-Flag loeschen
Einsprung von $938D:
93A1: 8D 3A 02 STA $023A b7=1: auf Ausgabe (Lesen) schalten
93A4: A5 54 LDA $54 Datenbyte holen
93A6: 8D 41 02 STA $0241 und in Ausgabepuffer schreiben
93A9: 60 RTS
Previous Page / Next Page