MoveLeft
                     clc
                     adc   StartX               ; Increment the virtual X-position
                     jsl   SetBG0XPos

                     lda   StartX
                     lsr
                     jsl   SetBG1XPos

;                     jsl   Render
                     rts

MoveRight
                     pha
                     lda   StartX
                     sec
                     sbc   1,s
                     bpl   *+5
                     lda   #0
                     jsl   SetBG0XPos

                     lda   StartX
                     lsr
                     jsl   SetBG1XPos

;                     jsl   Render
                     pla
                     rts

MoveUp
                     clc
                     adc   StartY               ; Increment the virtual Y-position
                     pha

                     lda   #240                 ; virtual play field height
                     sec
                     sbc   ScreenHeight
                     tax
                     cmp   1,s
                     bcc   *+4
                     lda   1,s
                     jsl   SetBG0YPos
                     pla

;                     lda       StartY
;                     lsr
;                     jsl       SetBG1YPos

;                     jsl   Render
                     rts

MoveDown
                     pha
                     lda   StartY
                     sec
                     sbc   1,s
                     bpl   *+5
                     lda   #0
                     jsl   SetBG0YPos

;                     lda       StartY
;                     lsr
;                     jsl       SetBG1YPos

;                     jsl   Render
                     pla
                     rts

; Very simple, scroll as fast as possible
oldOneSecondCounter  ds    2
frameCount           ds    2

Demo
                     ldal  OneSecondCounter
                     sta   oldOneSecondCounter
                     stz   frameCount

; Every 3 ticks (20 fps) cycle some colors

;                     lda       #DoColorCycle
;                     ldx       #^DoColorCycle
;                     ldy       #3
;                     jsl       AddTimer

:loop
                     jsl   DoTimers

;                     lda       #1
;                     jsr       MoveLeft
                     jsr   UpdateBG1Rotation
;                     jsr       DoColorCycle
                     jsl   Render

                     inc   frameCount

                     ldal  KBD_STROBE_REG
                     bit   #$0080
                     beq   :nokey
                     and   #$007F
                     cmp   #'s'
                     bne   :nokey

                     rts

:nokey
                     ldal  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'

; Move some colors around color (6 - 11) address 12 - 22
DoColorCycle
                     ldal  $E19E0C
                     pha
                     ldal  $E19E0E
                     pha
                     ldal  $E19E10
                     pha
                     ldal  $E19E12
                     pha
                     ldal  $E19E14
                     pha
                     ldal  $E19E16
                     stal  $E19E0C
                     pla
                     stal  $E19E16
                     pla
                     stal  $E19E14
                     pla
                     stal  $E19E12
                     pla
                     stal  $E19E10
                     pla
                     stal  $E19E0E
                     rts

; Triggered timer to sway the background
UpdateBG1Offset
                     lda   BG1OffsetIndex
                     inc
                     inc
                     cmp   #32                  ; 16 entries x 2 for indexing
                     bcc   *+5
                     sbc   #32
                     sta   BG1OffsetIndex
                     rts

AngleUp
                     lda   angle
                     inc
                     cmp   #64
                     bcc   *+5
                     sbc   #64
                     sta   angle
                     jsr   _ApplyAngle
                     jsl   Render
                     rts

AngleDown
                     lda   angle
                     dec
                     bpl   *+6
                     clc
                     adc   #64
                     sta   angle
                     jsr   _ApplyAngle
                     jsl   Render
                     rts

angle                dw    0
UpdateBG1Rotation
                     jsr   _ApplyAngle
; Increment the angle
                     lda   angle
                     inc
                     cmp   #64
                     bcc   *+5
                     lda   #0
                     sta   angle
                     rts

x_angles             EXT
y_angles             EXT
_ApplyAngle
                     lda   angle                ; debug with angle = 0
                     asl
                     tax
                     ldal  x_angles,x           ; load the address of addressed for this angle
                     tay
                     phx
                     jsl   ApplyBG1XPosAngle
                     plx

                     ldal  y_angles,x           ; load the address of addresses for this angle
                     tay
                     jsl   ApplyBG1YPosAngle

                     rts




