tests - WIP - Create 'move pixel with keypad' program
This commit is contained in:
parent
b290eb1568
commit
9f68bd3027
|
|
@ -0,0 +1,144 @@
|
|||
; Draw a pixel, and move it when a key is pressed
|
||||
; 2023-08-26
|
||||
|
||||
;; WIP - up and right should be working,
|
||||
;; but currently they're being tested with a
|
||||
;; faked keyboard input at the end of @xy2id
|
||||
;; (and down and left are still TODO)
|
||||
|
||||
#flagZ 1
|
||||
#flagN 2
|
||||
#keypad $1B ; contains latest key pressed
|
||||
|
||||
; Starting (x, y) coordinates
|
||||
#input_x 1
|
||||
#input_y 2
|
||||
|
||||
; Some handy shortcuts
|
||||
#x $FA
|
||||
#y $FB
|
||||
#px_addr $FD ; holds return value from @xy2id
|
||||
#return_addr_ptr $FE
|
||||
|
||||
; Main variables:
|
||||
; F8
|
||||
; F9 - xy2id temp
|
||||
; FA - x coord
|
||||
; FB - y coord
|
||||
; FC - xy2id temp
|
||||
; FD - xy2id return value / xy2id temp
|
||||
; FE - Return address for subroutine
|
||||
|
||||
|
||||
@setup
|
||||
LDA #input_x
|
||||
STO #x
|
||||
LDA #input_y
|
||||
STO #y
|
||||
LDA @update
|
||||
STO #return_addr_ptr
|
||||
JMP @xy2id
|
||||
|
||||
|
||||
@update
|
||||
; draw pixel
|
||||
LDA $FF
|
||||
STO (#px_addr)
|
||||
|
||||
; determine direction
|
||||
#up 2
|
||||
#right 6
|
||||
#down 8
|
||||
#left 4
|
||||
;; #key_copy $FC
|
||||
|
||||
; test up
|
||||
lda (#keypad)
|
||||
sub #up
|
||||
ftg #flagZ
|
||||
fhp #flagZ
|
||||
jmp @up
|
||||
|
||||
; test right
|
||||
lda (#keypad)
|
||||
sub #right
|
||||
ftg #flagZ
|
||||
fhp #flagZ
|
||||
jmp @right
|
||||
|
||||
; TODO: down, left
|
||||
end
|
||||
|
||||
@up
|
||||
lda (#y)
|
||||
sub 1
|
||||
ftg #flagN
|
||||
fhp #flagN
|
||||
jmp @stay_put
|
||||
sto #y
|
||||
; redundant - it's already in there:
|
||||
lda @update
|
||||
sto #return_addr_ptr
|
||||
jmp @xy2id
|
||||
|
||||
@right
|
||||
lda (#x)
|
||||
sub 4
|
||||
ftg #flagZ
|
||||
fhp #flagZ
|
||||
jmp @stay_put
|
||||
lda (#x)
|
||||
add 1
|
||||
sto #x
|
||||
; redundant - it's already in there:
|
||||
lda @update
|
||||
sto #return_addr_ptr
|
||||
jmp @xy2id
|
||||
|
||||
@stay_put
|
||||
; draw pixel
|
||||
LDA $FF
|
||||
STO (#px_addr)
|
||||
; TODO
|
||||
END
|
||||
|
||||
|
||||
;; Convert a pair of (x, y) coords
|
||||
;; to the address of a pixel on the display
|
||||
;;
|
||||
;; Call with:
|
||||
;; - x in #x
|
||||
;; - y in #y
|
||||
;; - return address in #return_addr_ptr
|
||||
;;
|
||||
;; Returns:
|
||||
;; - pixel address in #px_addr
|
||||
@xy2id
|
||||
; stash x, y...
|
||||
#xy2id_y $FC
|
||||
#xy2id_x $F9
|
||||
LDA (#y)
|
||||
STO #xy2id_y
|
||||
LDA (#x)
|
||||
STO #xy2id_x
|
||||
STO #px_addr
|
||||
|
||||
; check if this is row 0...
|
||||
LDA (#xy2id_y)
|
||||
FHP #flagZ
|
||||
JMP @xy2id_loop
|
||||
JMP (#return_addr_ptr) ; if row 0, we're done
|
||||
|
||||
@xy2id_loop
|
||||
LDA (#px_addr)
|
||||
ADD 5 ; add 5 to get to the next row
|
||||
STO #px_addr
|
||||
LDA (#xy2id_y) ; decrement y (it's acting as a loop counter) ...
|
||||
SUB 1
|
||||
STO #xy2id_y
|
||||
FHP #flagZ
|
||||
JMP @xy2id_loop
|
||||
;; JUST TO TEST: LOAD #up INTO KEYPAD MEM:
|
||||
lda #right
|
||||
sto #keypad
|
||||
JMP (#return_addr_ptr)
|
||||
Loading…
Reference in New Issue