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 |