Moin,
ich bin fleißig weiter am üben und stolpere gerade über eine vermeintlich einfache Geschichte:
Ich möchte per Joystick einen Buchstaben über den Bildschirm laufen lasen.
Von hier habe ich mir die Joystickabfrage geklaut, im 64Wiki steht auch ähnlich drin. Am Ende kommt dabei raus, dass in zwei Speicherbereichen entweder +1 oder -1 steht.
Quelle: http://codebase64.org/doku.php…e:joystick_input_handling
Das funktioniert auch prima, auch kann ich unter die Branchinganweisungen dann den Buchstaben ändern. Jetzt würde ich den Code aber gerne in mehrere Makros aufteilen. Sowas wie
:get_joystick
und
:draw_player
Meine Frage ist jetzt: wie kann ich auf +1 bzw -1 effizient prüfen? Bei get_joystick hab ich den Wert ja noch direkt und könnte auf das Z-Flag prüfen.
Aber einem anderen Makro müsste ich den Wert erst wieder doch wieder auf den Akku laden und Dinge damit tun (z.B 255 addieren um zusehen, ob ein Overflow auftritt und dann branchen)
Mit anderen Worten, wie geht: if (xoff > 0) player_char = 'R' ?
Hier noch mein Codegestückel:
- //Kickassembler
- // draw_player gibt's noch nicht, da könnten die :mov Befehle rein
- game_loop:
- :draw_player()
- :handle_joy_input(joystick2_port)
- jmp game_loop
- .pc = * "Data"
- player_character: .byte 'p'
- xoff: .byte 0
- yoff: .byte 0
- act: .byte 0
- .macro handle_joy_input(joystick) {
- :mov #'p'; player_character
- lda joystick
- ldy #0
- ldx #0
- lsr //oben
- bcs djr0
- dey
- :mov #'u'; player_character
- jmp end
- djr0:
- lsr
- bcs djr1
- iny
- :mov #'d'; player_character
- jmp end
- djr1:
- lsr
- bcs djr2
- dex
- :mov #'l'; player_character
- jmp end
- djr2:
- lsr
- bcs djr3
- inx
- :mov #'r'; player_character
- jmp end
- djr3:
- lsr
- bcs end
- :mov #'a'; player_character
- inc act
- end:
- stx xoff
- sty yoff
- }
PS: die Lernkurve bei ASM ist echt krass.