From 4fa7d38942c8c705c9134e9cbb303e770b6a8bca Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 29 Jan 2024 22:53:37 -0500 Subject: [PATCH] trogdor: more or less working? --- demos/trogdor/Makefile | 6 +- demos/trogdor/flame.s | 202 ++++++++++++++++++++++++++++++ demos/trogdor/gr_fast_clear.s | 3 +- demos/trogdor/irq_wait.s | 13 +- demos/trogdor/qload.s | 4 +- demos/trogdor/release/trogdor.dsk | Bin 0 -> 143360 bytes demos/trogdor/start.s | 8 +- demos/trogdor/trogdor.s | 12 +- 8 files changed, 235 insertions(+), 13 deletions(-) create mode 100644 demos/trogdor/flame.s create mode 100644 demos/trogdor/release/trogdor.dsk diff --git a/demos/trogdor/Makefile b/demos/trogdor/Makefile index 61341433..4b452d00 100644 --- a/demos/trogdor/Makefile +++ b/demos/trogdor/Makefile @@ -43,7 +43,7 @@ qload.o: zp.inc hardware.inc music.inc qload.s \ horiz_scroll_skip.s \ hgr_copy_magnify.s \ vertical_scroll.s \ - hgr_copy_part.s \ + hgr_copy_part.s flame.s \ gr_offsets.s vertical_scroll_down.s \ wait.s wait_a_bit.s do_flames.s \ lc_detect.s \ @@ -83,8 +83,8 @@ qload.inc: generate_common QLOAD ./generate_common -a 0x1200 -s hgr_copy_part qload.lst >> qload.inc ./generate_common -a 0x1200 -s hgr_draw_sprite_big_mask qload.lst >> qload.inc ./generate_common -a 0x1200 -s horiz_pan qload.lst >> qload.inc - ./generate_common -a 0x1200 -s hgr_vertical_scroll_right qload.lst >> qload.inc - ./generate_common -a 0x1200 -s hgr_vertical_scroll_left qload.lst >> qload.inc +# ./generate_common -a 0x1200 -s hgr_vertical_scroll_right qload.lst >> qload.inc +# ./generate_common -a 0x1200 -s hgr_vertical_scroll_left qload.lst >> qload.inc ./generate_common -a 0x1200 -s horiz_pan_skip qload.lst >> qload.inc ./generate_common -a 0x1200 -s horiz_pan_skip_short qload.lst >> qload.inc ./generate_common -a 0x1200 -s hgr_copy_magnify qload.lst >> qload.inc diff --git a/demos/trogdor/flame.s b/demos/trogdor/flame.s new file mode 100644 index 00000000..8d855f09 --- /dev/null +++ b/demos/trogdor/flame.s @@ -0,0 +1,202 @@ +; flames -- Apple II Hires + + +flames: + + ;================================================== + ; clear both graphics screens, set to display page1 + +; lda #$20 +; sta HGR_PAGE + + ;============================================= + ; setup (draw white line at bottom of screen) + + ldy #39 + lda #$f +white_line_loop: + sta $5DD0,Y + dey + bpl white_line_loop + + ;==================== + ;==================== + ; main loop + ;==================== + ;==================== + + + +fire_loop: + lda #$20 + sta DRAW_PAGE + + ;==================== + ; move fire + ;==================== +move_fire: + ldx #159 ; start at bottom of screen +burn_loop: + + ;====================== + ; input in BASL/BASH + + lda hposn_low,X + sta BASL + lda hposn_high,X + clc + adc DRAW_PAGE + sta BASH + + ;======================== + ; output in GBASL:GBASH + dex ; point to line above + stx XSAVE + + lda hposn_low,X + sta GBASL ; put the line address into input + lda hposn_high,X + clc + adc DRAW_PAGE + sta GBASH + + ldy #39 ; 39 columns across screen +burn_inner: + +random_smc: + lda $900 ; our "RANDOM" numbers +; lda $E000 ; our "RANDOM" numbers + + bpl dont_invert_dex ; is top bit random enough? + + lda dex_smc + eor #$20 + sta dex_smc + +dont_invert_dex: + +;burn_in_smc: + lda (BASL),Y + tax +; ldx $4000,Y + beq skip_if_zero + +dex_smc: ; DEX = $CA, NOP = $EA + dex + +skip_if_zero: + txa +;burn_out_smc: +; sta $4000,Y + sta (GBASL),Y + + inc random_smc+1 ; update "RNG" + bne no_oflo + inc random_smc+2 + lda random_smc+2 + cmp #$0c + bne no_oflo + lda #$09 ; wrap to "ROM" + sta random_smc+2 +no_oflo: + dey + bpl burn_inner + + ldx XSAVE ; finish early as top of screen empty + cpx #120 + bne burn_loop + + ;==================== + ; copy to visible + +copy_to_page1: + + ; X should already be 150 here +; ldx #150 ; only on bottom of screen + +copy_loop: +; txa +; jsr HPOSN ; puts addr of line in A into GBASL:GBASH + + lda hposn_low,X ; output on page1 + sta BASL + sta GBASL + lda hposn_high,X + sta BASH + clc + adc #$20 + sta GBASH + + stx XSAVE + +; lda GBASL +; sta BASL +; sta copy_inner_smc+1 +; lda GBASH +; eor #$60 ; flip to page 1 +; sta BASH +; sta copy_inner_smc+2 + + ldy #39 +copy_inner: + lda (GBASL),Y + tax + lda color_lookup,X + +; sec ; or ora $80? +ror_smc: +; ror ; ROR = $6A 0110 1010 + ; NOP = $EA 1110 1010 + +copy_inner_smc: + sta (BASL),Y + +; lda ror_smc +; eor $80 +; sta ror_smc + + dey + bpl copy_inner + + ldx XSAVE + inx + cpx #160 + bne copy_loop + + ;==================== + ; loop forever + +check_flame_keypress: + lda KEYPRESS + bmi done_flames + + jmp fire_loop ; bra + + +done_flames: + bit KEYRESET + rts + + ;===================== + + + + +color_lookup: + .byte $00 ; 1 0 00 00 00 BBBB 0 + .byte $84 ; 1 0 00 01 00 BB0B 1 + .byte $90 ; 1 0 01 00 00 BOBB 2 + .byte $81 ; 1 0 00 00 01 BBBO 3 + .byte $91 ; 1 0 01 00 01 BOBO 4 + .byte $C4 ; 1 1 00 01 00 OBOB 5 + .byte $D1 ; 1 1 01 00 01 OOBO 6 + .byte $DA ; 1 1 01 01 01 OOOO 7 + .byte $F5 ; 1 1 11 01 01 OWOO 8 + .byte $DD ; 1 1 01 11 01 WOWO 9 + .byte $FE ; 1 1 11 01 11 OWOW 10 + .byte $DF ; 1 1 01 11 11 OOWW 11 + .byte $F5 ; 1 1 11 01 01 WWOO 12 + .byte $FD ; 1 1 11 11 01 WWWO 13 + .byte $DF ; 1 1 01 11 11 WOWW 14 + .byte $ff ; 1 1 11 11 11 WWWW 15 + diff --git a/demos/trogdor/gr_fast_clear.s b/demos/trogdor/gr_fast_clear.s index 8cc8d152..9c7787c0 100644 --- a/demos/trogdor/gr_fast_clear.s +++ b/demos/trogdor/gr_fast_clear.s @@ -1,3 +1,4 @@ +.if 0 clear_screens: ;=================================== ; Clear top/bottom of page 0 @@ -18,7 +19,7 @@ clear_screens: jsr clear_bottom rts - +.endif diff --git a/demos/trogdor/irq_wait.s b/demos/trogdor/irq_wait.s index 96264c9f..f4192b53 100644 --- a/demos/trogdor/irq_wait.s +++ b/demos/trogdor/irq_wait.s @@ -1,3 +1,4 @@ +.if 0 ;============================ ; wait for music pattern ; also check for keypress @@ -58,13 +59,19 @@ done_check_pattern_done: done_check_timeout_done: sec rts - +.endif ;========================== ; busy wait A * 1 50Hz tick ;========================== wait_ticks: - sta IRQ_COUNTDOWN + ldx SOUND_STATUS + bne mockingboard_wait + + jmp wait + +mockingboard_wait: + sta IRQ_COUNTDOWN wait_tick_loop: lda IRQ_COUNTDOWN bne wait_tick_loop @@ -72,6 +79,7 @@ wait_tick_done: rts +.if 0 ;==================== ; busy wait A seconds ;==================== @@ -92,3 +100,4 @@ wait_seconds_loop: wait_seconds_done: bit KEYRESET rts +.endif diff --git a/demos/trogdor/qload.s b/demos/trogdor/qload.s index 35d242ff..10d9167b 100644 --- a/demos/trogdor/qload.s +++ b/demos/trogdor/qload.s @@ -213,7 +213,7 @@ hposn_high = $1f00 .include "horiz_scroll_simple.s" .include "horiz_scroll_skip.s" .include "hgr_copy_magnify.s" - .include "vertical_scroll.s" +; .include "vertical_scroll.s" .include "hgr_copy_part.s" .include "vertical_scroll_down.s" @@ -223,4 +223,4 @@ hposn_high = $1f00 qload_end: -.assert (>qload_end - >qload_start) < $e , error, "loader too big" +.assert (>qload_end - >qload_start) < $c , error, "loader too big" diff --git a/demos/trogdor/release/trogdor.dsk b/demos/trogdor/release/trogdor.dsk new file mode 100644 index 0000000000000000000000000000000000000000..865695aa3fbf38ab54f175df4a9678596f538f1d GIT binary patch literal 143360 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 z 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 E1v1eVDF6Tf literal 0 HcmV?d00001 diff --git a/demos/trogdor/start.s b/demos/trogdor/start.s index ae9e54d5..bb8eb6d6 100644 --- a/demos/trogdor/start.s +++ b/demos/trogdor/start.s @@ -197,11 +197,11 @@ load_trogdor: jsr move_and_print + ; do blue flames - jsr wait_until_keypress - - + bit KEYRESET + jsr flames ;=================== @@ -216,6 +216,7 @@ restart: lda #0 sta DONE_PLAYING + sta DRAW_PAGE lda #0 sta LOOP @@ -342,3 +343,4 @@ trog_message2: .include "pt3_lib_mockingboard_patch.s" .include "hardware_detect.s" +.include "flame.s" diff --git a/demos/trogdor/trogdor.s b/demos/trogdor/trogdor.s index 8ab62c2a..4e855d2f 100644 --- a/demos/trogdor/trogdor.s +++ b/demos/trogdor/trogdor.s @@ -1132,9 +1132,13 @@ finished: jsr wait_ticks wait_till_done: + lda SOUND_STATUS + beq finished_no_mb + lda DONE_PLAYING beq wait_till_done +finished_no_mb: rts @@ -1151,8 +1155,6 @@ trog04_graphics: .incbin "graphics/actual02_updown_cottage.hgr.zx02" -.include "wait_keypress.s" - peasant_data_x1: @@ -1255,3 +1257,9 @@ common_cottage: jsr wait_ticks rts + + +;.include "wait_keypress.s" + +;.include "hgr_copy_part.s" +.include "vertical_scroll.s"