    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