iigs-game-engine/src/Actions.s
2021-07-19 22:42:51 -05:00

136 lines
2.7 KiB
ArmAsm

MoveLeft
clc
adc StartX ; Increment the virtual X-position
jsr SetBG0XPos
lda StartX
lsr
jsr SetBG1XPos
jsr DoFrame
rts
MoveRight
pha
lda StartX
sec
sbc 1,s
bpl *+5
lda #0
jsr SetBG0XPos
lda StartX
lsr
jsr SetBG1XPos
jsr DoFrame
pla
rts
MoveUp
clc
adc StartY ; Increment the virtual Y-position
jsr SetBG0YPos
lda StartY
lsr
jsr SetBG1YPos
jsr DoFrame
rts
MoveDown
pha
lda StartY
sec
sbc 1,s
bpl *+5
lda #0
jsr SetBG0YPos
lda StartY
lsr
jsr SetBG1YPos
jsr DoFrame
pla
rts
; Very simple, scroll as fast as possible
oldOneSecondCounter ds 2
frameCount ds 2
Demo
lda OneSecondCounter
sta oldOneSecondCounter
stz frameCount
:loop
lda #1
jsr MoveLeft
inc frameCount
ldal KBD_STROBE_REG
bit #$0080
beq :nokey
and #$007F
cmp #'s'
bne :nokey
pla
rts
:nokey
lda OneSecondCounter
cmp oldOneSecondCounter
beq :loop
sta oldOneSecondCounter
lda ScreenWidth
cmp #150
bcs :loop
lda #FPSStr
ldx #0 ; top-left corner
ldy #$7777
jsr DrawString
lda frameCount
ldx #4*4
jsr DrawWord
stz frameCount
bra :loop
FPSStr str 'FPS'