Wie realisiert man die Ausgabe von Integer- Zahlen in 6502 Assembler? Eigentlich ganz einfach. Die Lösung:
Man stelle sich die Frage, wie oft kann ich von, sagen wir 1934, 1000 abziehen. Einmal, ganz klar. Man wiederholt das ganze für die 100-er die 10-er und die Einer und erhält so die Ziffern der Zahl. Ich habe das ganze für Integer kleiner gleich 255 realisiert. Zur Erklährung sollten die Kommentare im Source reichen.
Für 16 Bit Integer habe ich noch keine eigene Lösung. Einen fertigen Source dafür findet man bei: http://www.atarimagazines.com/analog/issue62/boot_camp.php (ausführliche Beschreibung und weitere Tricks inklusive).
Anmerkung: Das nachstehende Programm enthält die Ziffern zur Ausgabe auf dem Bildschirm im Atari Bildschirmcode. Möchte man auf dem Atari Aschii- Zeichen direkt in in Bildschirmspeicher zur Ausgabe schreiben,so erhält man das richtige Ergebnis, indem man vom internen des Atari 32 abzieht!
* INTASC.SRC
*
* WANDELT DEN IN "ZAHL" ENTHALTENEN
* INTEGER IN BILDSCHRIMZEICHEN UM UND
* GIBT DIESE AUF DEM BILDSCHIRM AUS
*
* ZAHL KLEINER ODER GLEICH 255!
*
* B.FRITZ 6.4.2012
*************************************
BILD EQU 88 ADRESSE BILDSPEICHER
BILDH EQU 89
ORG $A800
*
* ANZAHL DER STELLEN UNSERER ZAHL
* UND ZEIGER AUF UNSERE TABELLE DER
* VIELFACHEN VON 10
LDY #0
*
* ANZAHL DER SUBTRAKTIONEN BIS DAS
* ERGEBNIS >0 WAR
*
LDX #0
*
* LOS GEHTS
*
LDA ZAHL ZAHL VORHER RETTEN
STA ZAHLB
L1 SEC
LDX #0
L2 LDA ZAHLB
SBC POW,Y
STA ZAHLB
* CARRY SETZEN!
* ANZAHL VERSUCHE=0
BCC NULL ERGEBNIS<0
INX ERGEBNIS>0 D.H.
BCS L2 WEITER
NULL LDA ZIFF,X EREBNIS<0
STA (BILD),Y ZIFFER AUSG.
LDA ZAHLB ZAHL>0 MACHEN
ADC POW,Y
STA ZAHLB
INY NAECHST NIEDR.
CPY #3 10ER, ALLE STELLEN
BNE L1 DURCH?
BRK JA!
*
* EINIGE DATEN
*
* UNSERE ZIFFERN- ZEICHEN
ZIFF ASC %0123456789%
* 10ER
POW DFB 100,10,1
* DIESE ZAHL SOLL AUSGEGEBEN WERDEN
ZAHL DFB 134
* ZWISCHENSPEICHER ZUM RECHNEN
ZAHLB DFB 0