ASCII-Werte aus dem Input-Puffer in HEX-Werte umwandeln
und in der Parameter-Tabelle ablegen ($cca1)
Einsprung von $8AC1:
8AD0: A9 00 LDA #$00 Zwischenspeicher loeschen fuer 3 Ziffern
8AD2: 85 40 STA $40 (ASCII-Zahl)
8AD4: 85 41 STA $41 ($42 wird spaeter sowieso ueberschrieben)
8AD6: 85 43 STA $43 Hi-Byte des Ergebnisses =0
8AD8: A2 FF LDX #$FF Zaehler fuer Wertigkeit der Ziffer
Einsprung von $8AF6:
8ADA: B9 00 02 LDA $0200,Y Zeichen aus Kommandozeile holen
8ADD: C9 40 CMP #$40 ist Zeichen eine Ziffer ?
8ADF: B0 17 BCS $8AF8 [' :;<=>? ' werden als Ziffern
8AE1: C9 30 CMP #$30 10-15 gerechnet; '2<' entspricht
8AE3: 90 13 BCC $8AF8 dem Block 32 (2*10+12)]
8AE5: 29 0F AND #$0F ja,
8AE7: 48 PHA Wert der Ziffer merken
8AE8: A5 41 LDA $41 Alte Zahl * 10
8AEA: 85 42 STA $42
8AEC: A5 40 LDA $40
8AEE: 85 41 STA $41
8AF0: 68 PLA + Ziffer
8AF1: 85 40 STA $40
8AF3: C8 INY Zeiger auf naechstes Zeichen
8AF4: C4 29 CPY $29 setzen; Zeilenende ?
8AF6: 90 E2 BCC $8ADA nein, ==>
Einsprung von $8ADF, $8AE3:
8AF8: 8C 30 02 STY $0230 Zeiger in Kommandozeile merken
ungepackte BCD-Zahl (1 Ziffer / Byte) in Binaerzahl wandeln
8AFB: 18 CLC
8AFC: A9 00 LDA #$00 Ergebnis (Lo) =0
Einsprung von $8B06:
8AFE: E8 INX naechste Ziffer nehmen
8AFF: E0 03 CPX #$03 alle 3 Stellen fertig ?
8B01: B0 0F BCS $8B12 ja, ==>
8B03: B4 40 LDY $40,X Ziffer holen; y-mal den Wert der Ziffer
Einsprung von $8B0B, $8B10:
8B05: 88 DEY zum Ergebnis addieren
8B06: 30 F6 BMI $8AFE < 0, (naechste Ziffer holen) ==>
8B08: 7D 20 8B ADC $8B20,X Wertigkeit der Ziffer addieren
8B0B: 90 F8 BCC $8B05 kein Uebertrag, ==>
8B0D: 18 CLC Uebertrag addieren
8B0E: E6 43 INC $43
8B10: D0 F3 BNE $8B05 immer ==>
Einsprung von $8B01:
8B12: 48 PHA Ergebnis in den Parameterspeicher
8B13: AE 2E 02 LDX $022E uebernehmen
8B16: A5 43 LDA $43
8B18: 9D 97 02 STA $0297,X Hi-Byte
8B1B: 68 PLA
8B1C: 9D 9C 02 STA $029C,X Lo-Byte
8B1F: 60 RTS
8B20: 01 0A 64 1,10,100 Wertigkeit der Ziffern
Previous Page / Next Page