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%
ZIFF ASC %0123456789% * 10ER POW DFB 100,10,1 * DIESE ZAHL SOLL AUSGEGEBEN WERDEN ZAHL DFB 134 * ZWISCHENSPEICHER ZUM RECHNEN ZAHLB DFB 0
Kommentar verfassen