Created
September 15, 2019 07:44
-
-
Save vk2gpu/db97dc6095574f1d4733e4d27ef3cb24 to your computer and use it in GitHub Desktop.
Commander x16 Fire Demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
!src "vera.inc" | |
SCREEN_WIDTH = 80 | |
SCREEN_HEIGHT = 60 | |
; Zero page | |
LOOP_X = $00 | |
LOOP_Y = $01 | |
RAND_SEED_LO = $02 | |
RAND_SEED_HI = $03 | |
CURSOR_X_LO = $10 | |
CURSOR_X_HI = $11 | |
CURSOR_Y_LO = $12 | |
CURSOR_Y_HI = $13 | |
PIXEL_CACHE = $20 ; $21 | |
VERA_LO = $80 | |
VERA_MI = $81 | |
VERA_HI = $82 | |
TEMP_A = $8C | |
TEMP_B = $8D | |
TEMP_C = $8E | |
TEMP_D = $8F | |
*=$0801 | |
!byte $0b,$08,$01,$00,$9e,$32,$30,$36,$31,$00,$00,$00 | |
+video_init | |
; Set pointer to layer 1 registers, increment of 1 | |
lda #$14 | |
sta verahi | |
lda #$00 | |
sta veramid | |
sta veralo | |
; Setup mode 7 stuff. | |
lda #7 << 5 | 1; // mode=7, enabled=1 | |
sta veradat ; 0 | |
; ignore | |
sta veradat ; 1 | |
; ignore | |
sta veradat ; 2 | |
; ignore | |
sta veradat ; 3 | |
lda #(0 >> 2) & 0xff; // map_base | |
sta veradat; 4 | |
lda #0 >> 10; | |
sta veradat ; 5 | |
; Display composer, setup scaling. | |
lda #$41 | |
sta veralo | |
lda #16 | |
sta veradat ; hscale=8x | |
sta veradat ; vscale=8x | |
lda #00 | |
sta veradat ; bordercolor | |
; Setup pixel cache in fixed RAM | |
lda #$00 | |
sta PIXEL_CACHE | |
lda #$90 | |
sta PIXEL_CACHE+1 | |
; Palette. | |
jsr createPalette | |
; Clear screen | |
jsr clearScreen | |
mainLoop: | |
; Write fire row in place. | |
jsr writeFireRow | |
; Set row to top | |
lda #$00 | |
sta VERA_HI | |
lda #$00 | |
sta VERA_MI | |
lda #$00 | |
sta VERA_LO | |
lda #SCREEN_HEIGHT | |
sta LOOP_Y | |
_loop1_mainLoop: | |
jsr updateRow | |
jsr veraForward320 | |
dec LOOP_Y | |
bne _loop1_mainLoop: | |
jmp mainLoop | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
updateRow: | |
jsr veraForward320 | |
jsr veraSetCursor | |
ldy #SCREEN_WIDTH | |
_loop1_updateRows: | |
lda veradat | |
sta (PIXEL_CACHE),Y | |
dey | |
bne _loop1_updateRows | |
; Move back to row above and calculate new value. | |
jsr veraBackward320 | |
jsr veraSetCursor | |
; first column zero | |
lda #$00 | |
sta veradat | |
ldy #SCREEN_WIDTH | |
dey | |
dey | |
_loop2_updateRows: | |
lda (PIXEL_CACHE),Y | |
sta TEMP_A | |
iny | |
lda (PIXEL_CACHE),Y | |
sta TEMP_B | |
sta TEMP_C | |
iny | |
lda (PIXEL_CACHE),Y | |
sta TEMP_D | |
lda TEMP_A | |
adc TEMP_B | |
adc TEMP_C | |
adc TEMP_D | |
lsr | |
lsr | |
sta veradat | |
dey | |
dey | |
dey | |
bne _loop2_updateRows | |
; last column zero | |
lda #$00 | |
sta veradat | |
rts | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
writeFireRow: | |
; Set row to bottom. | |
lda #$00 | |
sta VERA_HI | |
lda #$49 | |
sta VERA_MI | |
lda #$C0 | |
sta VERA_LO | |
jsr veraSetCursor | |
lda #SCREEN_WIDTH | |
sta LOOP_X | |
_loop_writeFireRow: | |
lda RAND_SEED_LO | |
adc #$21 | |
ror | |
sta RAND_SEED_LO | |
lda RAND_SEED_HI | |
rol | |
adc #$12 | |
sta RAND_SEED_HI | |
eor RAND_SEED_LO | |
adc 1 | |
sta RAND_SEED_LO | |
lsr | |
lsr | |
clc | |
sta veradat | |
dec LOOP_X | |
bne _loop_writeFireRow | |
rts | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
createPalette: | |
lda #$14 | |
sta verahi | |
lda #$02 | |
sta veramid | |
lda #$00 | |
sta veralo | |
ldy #00 | |
_loop1_createPalette: | |
; ggggbbbb | |
tya | |
and #$f0 | |
sta veradat | |
; TEMP_B : ----rrrr | |
tya | |
lsr | |
lsr | |
sta veradat | |
iny | |
bne _loop1_createPalette | |
rts | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
clearScreen: | |
lda #$00 | |
sta VERA_HI | |
sta VERA_MI | |
sta VERA_LO | |
lda #SCREEN_HEIGHT | |
sta LOOP_Y | |
_beginRow_clearScreen: | |
lda #SCREEN_WIDTH | |
sta LOOP_X | |
; set position | |
jsr veraSetCursor | |
jsr veraForward320 | |
_beginCol_clearScreen: | |
lda #$00 | |
sta veradat | |
dec LOOP_X | |
bne _beginCol_clearScreen: | |
dec LOOP_Y | |
bne _beginRow_clearScreen: | |
rts | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
veraForward320: | |
clc | |
lda VERA_LO | |
adc #64 | |
sta VERA_LO | |
lda VERA_MI | |
adc #1 | |
sta VERA_MI | |
lda VERA_HI | |
adc #0 | |
sta VERA_HI | |
rts | |
veraBackward320: | |
sec | |
lda VERA_LO | |
sbc #64 | |
sta VERA_LO | |
lda VERA_MI | |
sbc #1 | |
sta VERA_MI | |
lda VERA_HI | |
sbc #0 | |
sta VERA_HI | |
rts | |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
veraSetCursor: | |
lda VERA_HI | |
ora #$10 | |
sta verahi | |
lda VERA_MI | |
sta veramid | |
lda VERA_LO | |
sta veralo | |
rts |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment