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 |