Seite 1 von 1

Assembler: Inhalt einer Speicherzelle auf Bildschirm ausgeben

Verfasst: 24.10.2024 22:41
von DocSash
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.

Re: Assembler: Inhalt einer Speicherzelle auf Bildschirm ausgeben

Verfasst: 25.10.2024 01:08
von JAC!
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:

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
Für mehr als $99, braucht man eben mehr Bytes und addiert im BCD Modus mit Übertrag (Carry).

Re: Assembler: Inhalt einer Speicherzelle auf Bildschirm ausgeben

Verfasst: 25.10.2024 11:33
von Dr. Irata
hatten wir schon ;-)


viewtopic.php?f=7&t=2816

Re: Assembler: Inhalt einer Speicherzelle auf Bildschirm ausgeben

Verfasst: 25.10.2024 20:43
von DocSash
BCD heißt das Zauberwort. Hatte ich auch schon mal gelesen, aber eher überlesen, weil zu dem Zeitpunkt nicht relevant. Genial, Danke.

hatten wir schon ;-)
Ups, sorry. Aber dann ist es jetzt nochmal unter einem allgemeineren Topic zu finden. :D