diff --git a/demos/trogdor/Makefile b/demos/trogdor/Makefile index d6b44ef5..159fa90e 100644 --- a/demos/trogdor/Makefile +++ b/demos/trogdor/Makefile @@ -189,7 +189,7 @@ trogdor.o: trogdor.s \ zp.inc hardware.inc qload.inc \ graphics/trog00_trogdor.hgr.zx02 \ hgr_sprite_big_mask.s horiz_scroll_simple.s hgr_copy_magnify.s \ - horiz_scroll_skip.s vertical_scroll.s hgr_copy_part.s + horiz_scroll_skip.s vertical_scroll_down.s hgr_copy_part.s ca65 -o trogdor.o trogdor.s -l trogdor.lst diff --git a/demos/trogdor/trogdor.s b/demos/trogdor/trogdor.s index 81e988b0..c5db02a9 100644 --- a/demos/trogdor/trogdor.s +++ b/demos/trogdor/trogdor.s @@ -87,9 +87,6 @@ trog_no_music: ; left tall 1212 roughly 10 frames (1/2 s) ; left short 2 frames - ;====================================== - ; left flame short 2 frames - ; clear to white ldy #$7f jsr hgr_clear_screen @@ -100,10 +97,10 @@ trog_no_music: jsr hgr_page_flip - lda #0 + lda #0 ; blank bg sta FLAME_BG - lda #8 + lda #8 ; x-coords for two flames sta FLAME_L lda #24 sta FLAME_R @@ -137,9 +134,6 @@ trog_no_music: jsr hgr_clear_screen jsr hgr_page_flip -; lda #24 ; 192/8 -; sta ANIMATE_COUNT - lda #0 sta COUNT @@ -222,10 +216,26 @@ scroll_in_loop: lda #42 jsr wait_ticks + ;===================== + ; do flames + lda #1 sta FLAME_BG jsr do_flames + ;===================== + ; done flames + + ldy #$7f + jsr hgr_clear_screen + + jsr hgr_copy_left + + jsr hgr_page_flip + + lda #30 + jsr wait_ticks + ;====================================== ; dragon man @@ -274,10 +284,15 @@ scroll_in_loop: jsr wait_ticks ;========================== + ; dragon zoom lda #$60 jsr hgr_copy_magnify + ;=========================== + ; rapidly switch + + lda #12 sta ANIMATE_COUNT rapid_switch: @@ -289,6 +304,32 @@ rapid_switch: dec ANIMATE_COUNT bne rapid_switch + + ;===h======================== + ; scroll off screen + + ; switch to page1 + ldy #$7f + jsr hgr_clear_screen + jsr hgr_copy_left + jsr hgr_page_flip + + lda #0 + sta COUNT + +scroll_down_in_loop: + + jsr hgr_vertical_scroll_down_left + + lda COUNT + clc + adc #8 + sta COUNT + + cmp #200 + bne scroll_down_in_loop + + ;========================= ; clear to white screen ldy #$7f @@ -503,8 +544,8 @@ trog04_graphics: .include "irq_wait.s" -;hposn_low = $1e00 -;hposn_high = $1f00 +hposn_low = $1e00 +hposn_high = $1f00 ;.include "hgr_sprite_big_mask.s" ;.include "horiz_scroll_simple.s" @@ -513,6 +554,7 @@ trog04_graphics: ;.include "vertical_scroll.s" ;.include "hgr_copy_part.s" + .include "vertical_scroll_down.s" .include "do_flames.s" ;========================================= diff --git a/demos/trogdor/vertical_scroll_down.s b/demos/trogdor/vertical_scroll_down.s new file mode 100644 index 00000000..aa8f075d --- /dev/null +++ b/demos/trogdor/vertical_scroll_down.s @@ -0,0 +1,72 @@ + ;======================================= + ; hgr_vertical scroll_down + ;======================================= + ; scrolls from $6000 to page1 + ; jumps increments of 8 for speed + ;======================================= + +hgr_vertical_scroll_down_left: +; lda #0 +; beq hgr_vertical_scroll_down_common +hgr_vertical_scroll_down_right: +; lda #20 +hgr_vertical_scroll_down_common: +; sta vscroll_down_offset_smc+1 + +hgr_vertical_scroll_down: + + ldx #183 ; start at bottom + +outer_vscroll_down_loop: + lda hposn_low,X ; get page1 address + sta INL ; set as output + lda hposn_high,X + sta INH + + txa ; get address of X+8 + clc ; and set as output + adc #8 + tay + lda hposn_low,y + sta OUTL + lda hposn_high,Y + sta OUTH + + ldy #29 ; only scroll from 9..29 +inner_vscroll_down_loop: + lda (INL),Y + sta (OUTL),Y + dey + cpy #9 + bpl inner_vscroll_down_loop + + dex + cpx #$FF + bne outer_vscroll_down_loop + + + ;================================ + ; copy in off screen + ; for now assume all white + + + ldx #7 ; start at top + +outer_vscroll_down_loop2: + lda hposn_low,X + sta OUTL + lda hposn_high,X + sta OUTH + + ldy #39 + lda #$7f +inner_vscroll_down_loop2: + sta (OUTL),Y + dey + bpl inner_vscroll_down_loop2 + + dex + bpl outer_vscroll_down_loop2 + + rts +