Ola, tudo bem? Sou acadêmico de Sistemas para Internet e estou com problemas no meu código que está sendo feito no Easy 6502 (https://skilldrick.github.io/easy6502). O objetivo é fazer um ponto na tela se mexer nas direções conforme os comandos w,a,s,d; como se fosse um joystick. Entretanto, não consegui fazer funcionar e não sei o que pode estar faltando. Desde já agradeço a atenção e espero que possam me dar uma orientação.
define pontoL $10
define pontoH $11
define pontoStart $12
define PontoDirecao $02
define pontoLeitura $03
; Direcao
define cima 1
define direita 2
define baixo 4
define esquerda 8
; Movimentação
define ASCII_w $77
define ASCII_a $61
define ASCII_s $73
define ASCII_d $64
; Variaveis
define sysRandom $fe
define sysLastKey $ff
jsr inicia
jsr loop
inicia:
jsr iniciaPonto
jsr generateApplePosition
rts
iniciaPonto:
lda #direita
sta pontoDirecao
lda #$11
sta pontoL
lda #$10
sta pontoStart
lda #$0f
sta $14
lda #$04
sta pontoH
sta $13
sta $15
rts
loop:
jsr readKeys
jsr pintaPonto
jsr spinWheels
jmp loop
readKeys:
lda sysLastKey
cmp #ASCII_w
beq upKey
cmp #ASCII_d
beq rightKey
cmp #ASCII_s
beq downKey
cmp #ASCII_a
beq leftKey
rts
upKey:
lda #cima
sta pontoDirecao
rts
rightKey:
lda #direita
sta pontoDirecao
rts
downKey:
lda #baixo
sta pontoDirecao
rts
leftKey:
lda #esquerda
sta pontoDireccao
rts
updateloop:
lda pontoL,x
sta pontoStart,x
dex
bpl updateloop
lda pontoDirecao
lsr
bcs paracima
lsr
bcs paradireita
lsr
bcs parabaixo
lsr
bcs paraesquerda
paracima:
lda pontoL
sec
sbc #$20
sta pontoL
bcc cimacima
rts
cimacima:
dec pontoH
lda #$1
cmp pontoH
beq bate
rts
paradireita:
inc pontoL
lda #$1f
bit pontoL
beq bate
rts
parabaixo:
lda pontoL
clc
adc #$20
sta pontoL
bcs baixobaixo
rts
baixobaixo:
inc pontoH
lda #$6
cmp pontoH
beq bate
rts
paraesquerda:
dec pontoL
lda pontoL
and #$1f
cmp #$1f
beq bate
rts
bate:
jmp fim
pintaPonto:
ldx pontoLeitura
lda #0
sta (pontoL,x)
ldx #0
lda #1
sta (pontoL,x)
rts
spinWheels:
ldx #0
spinloop:
nop
nop
dex
bne spinloop
rts
fim: