Ich befasse ich gerade mit asm und habe folgende zwei Fragen:
Ich habe zum Probieren mal einen Block erstellt, der bei Berührung den Coin-Counter um 01 erhöht und nach 99 wieder von 00 beginnt und ein Leben vergibt:
Code LDA $0DBF
INC
CMP #99
BCS NULL
STA $0DBF
LDA #$01
STA $1DFC
RTL
NULL:
STZ $0DBF
INC $18E4
RTL
Leider schnellt der Coin-Counter ununterbrochen nach oben (und beginnt wieder von vorne), solange Mario den Block berührt. Wie krieg ich es hin, dass der Coin-Counter sich nur um eine Münze erhöht, egal wie lange Mario den Block berührt? Erst nach Ablassen und erneutem Berühren soll der Coin-Counter um eine weitere Münze steigen.
Die zweite Frage ist vor allem an RPG Hacker gerichtet, da ich etwas aus seinem asm-Tutorial nicht verstehe:
Du schreibst, dass BCC springt, wenn die Carry Flag clear ist. Das passiert, wenn bei einer Subtraktion das Ergebnis kleiner als 00 ist, z. B.
LDA #$02
CMP #$03.
So weit, so gut. Darunter hast du einen Beispielcode aufgeführt, der Mario zu Feuermario machen soll, nur wenn er klein oder Super-Mario ist (also $19 = $00 oder $01):
CodeLDA $19 ; Lade das Powerup
CMP #$02 ; Vergleiche mit $02
BCC FeuerMario ; Kleiner $02? Dann mache Mario zu Feuer Mario
[...]
FeuerMario:
LDA #$03 ;\ Dieser Code wird immer ausgeführt
STA $19 ;/
Du schreibst: "...Benutzt ihr BCC, so wird, wenn die Bedingung erfüllt ist, der Code unter "BCC" gar nicht ausgeführt. Anders wird aber der Code unter "FeuerMario:" selbst dann ausgefüllt, wenn die Bedingung nicht erfüllt ist...."
Vielleicht bin ich etwas schwer von Begriff, aber wenn
$19 = $00 oder $01 und CMP #$02, dann ist das Ergebnis unter $00 und die Carry Flag damit clear und BCC müsste doch springen??