Fehlertext in Puffer schreiben ($e706)
E: a: Fehlernummer im BCD-Code
y: Position im Fehlerpuffer
[Diese Routine ruft sich selbst rekursiv auf:
Zuerst wird in der Fehlermeldungstabelle die richtige Fehlernummer
gesucht. Dabei muessen die Fehlertexte, die in Bytes mit gesetztem Bit7
eingeschlossen sind, uebersprungen werden. Ist die richtige Fehlernummer
gefunden, muss das naechste Byte mit gesetztem Bit7 gesucht werden. Ab
diesem Byte werden nun die Zeichen (Bytes>=32) mit geloeschtem Bit7 in den
Fehlerpuffer geschrieben. Bytes < 32 stellen eigenstaendige Fehlertexte
dar, die durch einen erneuten Aufruf dieser Routine in den Puffer
geschrieben werden. Eine Rekursion wird beendet, wenn das naechste Byte
mit gestztem Bit7 ausgegeben worden ist.]
Einsprung von $A906, $A886:
A8AD: AA TAX
A8AE: A5 55 LDA $55 Zeiger in Fehlertabelle retten
A8B0: 48 PHA (fuer rekursiven Aufruf)
A8B1: A5 56 LDA $56
A8B3: 48 PHA
A8B4: A9 02 LDA #$02 Zeiger auf Tabelle mit Fehlermeldungen
A8B6: 85 55 STA $55 setzen ($a602)
A8B8: A9 A6 LDA #$A6
A8BA: 85 56 STA $56
A8BC: 8A TXA
A8BD: A2 00 LDX #$00
Einsprung von $A8DD:
A8BF: C1 55 CMP ($55,X) Fehlernummer mit Nummer in der Tabelle
A8C1: F0 21 BEQ $A8E4 vergleichen; gleich, ==>
A8C3: 48 PHA Fehlernummer merken
A8C4: 20 1C A9 JSR $A91C ist im Byte b7=1 (dann ist c=1): Wechsel
A8C7: 90 05 BCC $A8CE zwischen Nummern und Meldung ? nein, ==>
A8C9: 20 1C A9 JSR $A91C ja: Naechsten Wechsel suchen und damit die
A8CC: 90 FB BCC $A8C9 Fehlermeldung ueberlesen; bis b7=1 ==>
Einsprung von $A8C7:
A8CE: A5 56 LDA $56 Tabellenende erreicht ($a7ae) ?
A8D0: C9 A7 CMP #$A7
A8D2: 90 08 BCC $A8DC nein, ==>
A8D4: D0 0A BNE $A8E0 ja, ==>
A8D6: A9 AE LDA #$AE
A8D8: C5 55 CMP $55
A8DA: 90 04 BCC $A8E0 ja, ==>
Einsprung von $A8D2:
A8DC: 68 PLA nein: Fehlernummer zurueckholen
A8DD: 4C BF A8 JMP $A8BF
Einsprung von $A8D4, $A8DA:
A8E0: 68 PLA Fehlernummer vom Stack entfernen
A8E1: 4C F4 A8 JMP $A8F4 Ende ==>
Einsprung von $A8C1, $A8E7:
A8E4: 20 0E A9 JSR $A90E naechstes Byte holen
A8E7: 90 FB BCC $A8E4 b7=1: Wechsel zwischen Nummern und Text ?
Einsprung von $A8EF:
A8E9: 20 FB A8 JSR $A8FB ja, ein Zeichen / eine Meldung ausgeben
A8EC: 20 0E A9 JSR $A90E naechstes Byte holen
A8EF: 90 F8 BCC $A8E9 Text noch nicht zu Ende, ==>
A8F1: 20 FB A8 JSR $A8FB letztes Zeichen ausgeben
Einsprung von $A8E1:
A8F4: 68 PLA
A8F5: 85 56 STA $56 letzten 'Zeiger in Fehlertabelle'
A8F7: 68 PLA zurueckholen
A8F8: 85 55 STA $55
A8FA: 60 RTS
Einsprung von $A8E9, $A8F1:
A8FB: C9 20 CMP #$20 Zeichen oder Meldung ausgeben ?
A8FD: B0 0B BCS $A90A Zeichen, ==>
A8FF: AA TAX
A900: A9 20 LDA #$20 Space in Fehler-Puffer schreiben
A902: 91 CF STA ($CF),Y
A904: C8 INY
A905: 8A TXA
A906: 20 AD A8 JSR $A8AD Meldung ausgeben
A909: 60 RTS
Einsprung von $A8FD:
A90A: 91 CF STA ($CF),Y Zeichen ausgeben
A90C: C8 INY
A90D: 60 RTS
Byte aus Fehlertabelle holen
Einsprung von $A8E4, $A8EC:
A90E: E6 55 INC $55 <-- erst Zeiger erhoehen, dann Byte holen
A910: D0 02 BNE $A914
A912: E6 56 INC $56
Einsprung von $A910, $A91C:
A914: A1 55 LDA ($55,X) b7 des Zeichens ins Carry schieben
A916: 0A ASL
A917: A1 55 LDA ($55,X) Zeichen holen
A919: 29 7F AND #$7F
A91B: 60 RTS
Einsprung von $A8C4, $A8C9:
A91C: 20 14 A9 JSR $A914 <-- erst Byte holen, dann Zeiger erhoehen
A91F: E6 55 INC $55
A921: D0 02 BNE $A925
A923: E6 56 INC $56
Einsprung von $A921:
A925: 60 RTS
Previous Page / Next Page