From b79bf2fbda19b76e81bdc79dd4e8910ab3cc235c Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 21 Dec 2017 13:57:29 -0500 Subject: [PATCH] mode7: update checkerboard demo to have scrolling sky --- asm_routines/bg_scroll.s | 79 ++++++++++++++++++++++++++++++++++++++++ mode7/Makefile | 4 +- mode7/mode7.s | 31 +++++++++++++--- 3 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 asm_routines/bg_scroll.s diff --git a/asm_routines/bg_scroll.s b/asm_routines/bg_scroll.s new file mode 100644 index 00000000..64444f24 --- /dev/null +++ b/asm_routines/bg_scroll.s @@ -0,0 +1,79 @@ + ;================== + ; scroll background + ;================== + ; background already loaded + ; ANGLE 0-15 sets angle + ; CV is Y position to display at + ; 182/220... 220/16 = 13.75 + ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + ; 0 11 22 34 45 56 68 79 91 102 113 125 136 147 159 170 182 + +scroll_offsets: + .byte 0,11,22,34,45,56,68,79,91,102,113,125,136,147,159,170 + +scroll_background: + ldy ANGLE ; use angle + lda scroll_offsets,Y ; lookup in table + sta OFFSET ; calculate offset + + ldx #0 + + ldy CV ; lookup Y co-ord + lsr ; and set up self-modify code + + lda gr_offsets,Y ; get position + sta bgsm1+1 + lda gr_offsets+2,Y ; get position + sta bgsm2+1 + lda gr_offsets+4,Y ; get position + sta bgsm3+1 + lda gr_offsets+6,Y ; get position + sta bgsm4+1 + + + iny + + clc + + lda gr_offsets,Y ; get position + adc DRAW_PAGE + sta bgsm1+2 + lda gr_offsets+2,Y ; get position + adc DRAW_PAGE + sta bgsm2+2 + lda gr_offsets+4,Y ; get position + adc DRAW_PAGE + sta bgsm3+2 + lda gr_offsets+6,Y ; get position + adc DRAW_PAGE + sta bgsm4+2 + + ldy OFFSET + + +bgdraw_loop: + + lda scroll_row1,Y +bgsm1: + sta $400,X + + lda scroll_row2,Y +bgsm2: + sta $480,X + + lda scroll_row3,Y +bgsm3: + sta $500,X + + lda scroll_row4,Y +bgsm4: + sta $580,X + + iny + inx + cpx #40 + bne bgdraw_loop + + rts + + diff --git a/mode7/Makefile b/mode7/Makefile index 82f473e3..360d6ce0 100644 --- a/mode7/Makefile +++ b/mode7/Makefile @@ -45,7 +45,9 @@ mode7_checkerboard.o: mode7.s checkerboard_lookup.s \ ../asm_routines/gr_setpage.s \ ../asm_routines/keypress.s \ ../asm_routines/gr_putsprite.s \ - ../asm_routines/text_print.s + ../asm_routines/text_print.s \ + ../asm_routines/gr_scroll.s \ + ../asm_routines/bg_scroll.s ca65 -o mode7_checkerboard.o mode7.s -D CHECKERBOARD_MAP=1 -l mode7.lst MODE7_RAINBOW: mode7_rainbow.o diff --git a/mode7/mode7.s b/mode7/mode7.s index 0b00e9cc..bfed0d14 100644 --- a/mode7/mode7.s +++ b/mode7/mode7.s @@ -32,6 +32,14 @@ CONST_LOWRES_HALF_F EQU $00 ; Initialize the 2kB of multiply lookup tables jsr init_multiply_tables +.if .def(CHECKERBOARD_MAP) + lda #>sky_background + sta INH + lda #