Moin,
der Anfänger mit den Noob-Fragen mal wieder: wie gebe ich am effektivsten den Inhalt einer (oder mehrerer Speicherzellen bei höheren Werten) auf dem Screen aus?
Konkret: in meinem PacMan-Klon soll PacMan ja natürlich auch mit Punkten belohnt werden. Ich speichere also die Anzahl der gefressenen Punkte (meinetwegen multipliziert mit x) in einer Speicherzelle und möchte nun die Punkte einfach dezimal an eine bestimmte Stelle auf den Screen printen. Mit einem Byte natürlich erstmal nur max. 255 Punkte, daher eher 2 Byte. Als ich das "mal eben" umsetzen wollte, fiel mir natürlich auf, dass das ja nun gar nicht so einfach ist. Ich habe 3 (oder max. 4) Bytes in einer Gr. 1 Zeile dafür vorgesehen. Am liebsten sogar in dem Format 0815, also mit vorangestellten Nullen. Ich hätte jetzt wahrscheinlich eine endlos umständliche Routine geschrieben, mit zig Branches die den Wert in die einzelnen Dezimalstellen zerhackt, aber für so eine "Standard"-Aufgabe gibt es doch garantiert elegantere Lösungen, oder?
Hatte mir da vorher keine Gedanken drüber gemacht, aber in Assembler muss man wirklich immer darauf gefasst sein, dass es keine selbstverständlichen Sachen gibt.
Assembler: Inhalt einer Speicherzelle auf Bildschirm ausgeben
Moderator: Rockford
- JAC!
- Beiträge: 177
- Registriert: 18.06.2021 23:13
- Has thanked: 134 times
- Been thanked: 177 times
- Kontaktdaten:
Re: Assembler: Inhalt einer Speicherzelle auf Bildschirm ausgeben
Der 6502 hat einen BCD - Binary Coded Decimal Mode. Dabei werden je 4 bit einen Byte als Zahl von 0..9 interpretiert (statt 0..F). Also $00 bis $99 statt $ff. Das erlaubt eine sehr einfache stelleweise Umwandlung in Dezimalzahlen:
Für mehr als $99, braucht man eben mehr Bytes und addiert im BCD Modus mit Übertrag (Carry).
Code: Alles auswählen
; Variable
.byte punkte
; Dezimal hochzählen
clc
sed ;Dezimalmodus an
lda punkte
adc #1
sta punkte
cld ;Dezimalmodus aus
;Dezimal ausgeben
lda punkte
and #$0f ;Untere 4 bit, 0...9
clc
adc #'0'
sta screen_einer
lda punkte
lsr
lsr
lsr
lsr ; Obere 4 bit, 0...9
clc
adc #'0'
sta screen_zehner
Visit https://www.wudsn.com the home of WUDSN IDE.
-
- Beiträge: 23
- Registriert: 25.08.2022 19:21
- Has thanked: 14 times
- Been thanked: 3 times
- Kontaktdaten:
Re: Assembler: Inhalt einer Speicherzelle auf Bildschirm ausgeben
BCD heißt das Zauberwort. Hatte ich auch schon mal gelesen, aber eher überlesen, weil zu dem Zeitpunkt nicht relevant. Genial, Danke.

Ups, sorry. Aber dann ist es jetzt nochmal unter einem allgemeineren Topic zu finden.hatten wir schon

Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast