From 60f306dd5c4ed4b681b8e8d9f93fec432f115fc4 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 19 Mar 2018 16:25:36 -0400 Subject: [PATCH] mode7: have sound how we like it, but too big by like 50 bytes working on making things smaller --- asm_routines/gr_hlin_double.s | 67 +++++++++++++++++++++++++++++++++ mode7_demo/credits.s | 30 ++++++++------- mode7_demo/interrupt_handler.s | 22 +++++------ mode7_demo/mode7_demo.s | 45 +++++++++++----------- mode7_demo/out.krg | Bin 22528 -> 22528 bytes mode7_demo/starfield_demo.s | 19 ++++------ 6 files changed, 124 insertions(+), 59 deletions(-) create mode 100644 asm_routines/gr_hlin_double.s diff --git a/asm_routines/gr_hlin_double.s b/asm_routines/gr_hlin_double.s new file mode 100644 index 00000000..127dd30e --- /dev/null +++ b/asm_routines/gr_hlin_double.s @@ -0,0 +1,67 @@ +;===================================================================== +;= ROUTINES +;===================================================================== + + ;================================ + ; hlin_setup + ;================================ + ; put address in GBASL/GBASH + ; Ycoord in A, Xcoord in Y +hlin_setup: + sty TEMPY ; 3 + tay ; y=A ; 2 + lda gr_offsets,Y ; lookup low-res memory address ; 4 + clc ; 2 + adc TEMPY ; 3 + sta GBASL ; 3 + iny ; 2 + + lda gr_offsets,Y ; 4 + adc DRAW_PAGE ; add in draw page offset ; 3 + sta GBASH ; 3 + rts ; 6 + ;=========== + ; 35 + ;================================ + ; hlin_double: + ;================================ + ; HLIN Y, V2 AT A + ; Y, X, A trashed + ; start at Y, draw up to and including X +hlin_double: +;int hlin_double(int page, int x1, int x2, int at) { + + jsr hlin_setup ; 41 + + sec ; 2 + lda V2 ; 3 + sbc TEMPY ; 3 + + tax ; 2 + inx ; 2 + ;=========== + ; 53 + ; fallthrough + + ;================================= + ; hlin_double_continue: width + ;================================= + ; GBASL has correct offset for row/col + ; width in X + +hlin_double_continue: + + ldy #0 ; 2 + lda COLOR ; 3 +hlin_double_loop: + sta (GBASL),Y ; 6 + inc GBASL ; 5 + dex ; 2 + bne hlin_double_loop ; 2nt/3 + + rts ; 6 + ;============= + ; 53+5+X*16+5 + + + diff --git a/mode7_demo/credits.s b/mode7_demo/credits.s index c4a1db3e..03a66f4c 100644 --- a/mode7_demo/credits.s +++ b/mode7_demo/credits.s @@ -1,6 +1,6 @@ ; Closing Credits -NUM_CREDITS EQU 19 +NUM_CREDITS EQU 18 ;=================== ; init credits @@ -267,8 +267,8 @@ empty: ; subtract one from centering(?) credits: -.byte 12 ; 14 -.asciiz "MUSIC BASE: EA" +.byte 11 ; 17 +.asciiz "MUSIC: WAVE BY EA" .byte 11 ; 16 .asciiz "LZ4 CODE: QKUMBA" .byte 11 ; 16 @@ -276,35 +276,39 @@ credits: .byte 14 ; 9 .asciiz "FROGGYSUE" .byte 14 ; 10 -.asciiz "PIANOMAN08" -.byte 14 ; 10 .asciiz "UTOPIA BBS" .byte 10 ; 18 .asciiz "FORD PERFECT (SIC)" +.byte 14 ; 10 +.asciiz "PIANOMAN08" .byte 12 ; 13 .asciiz "THE 7HORSEMEN" .byte 9 ; 20 -.asciiz "MITHLUIN AND ROOSTER" +;.asciiz "MITHLUIN AND ROOSTER" +.asciiz "AAAAAAAAAAAAAAAAAAAA" .byte 13 ; 12 -.asciiz "TALON KARRDE" +;.asciiz "TALON KARRDE" +.asciiz "AAAAAAAAAAAA" .byte 9 ; 20 -.asciiz "WEAVE'S WORLD TALKER" +;.asciiz "WEAVE'S WORLD TALKER" +.asciiz "AAAAAAAAAAAAAAAAAAAA" .byte 12 ; 14 -.asciiz "DAISY AND JUNE" +;.asciiz "DAISY AND JUNE" +.asciiz "AAAAAAAAAAAAAA" .byte 11 ; 17 -.asciiz "TALBOT 0101B CREW" +;.asciiz "TALBOT 0101B CREW" +.asciiz "AAAAAAAAAAAAAAAAA" .byte 12 ; 13 .asciiz "STEALTH SUSIE" .byte 11 ; 16 -.asciiz "ECE GRAD BOWLING" +;.asciiz "ECE GRAD BOWLING" +.asciiz "AAAAAAAAAAAAAAAA" .byte 13 ; 11 .asciiz "CORNELL GCF" .byte 8 ; 21 .asciiz "ALL MSTIES EVERYWHERE" .byte 17 ; 3 .asciiz "..." -.byte 17 ; 3 -.asciiz "..." thankz: .asciiz "SPECIAL THANKS TO:" diff --git a/mode7_demo/interrupt_handler.s b/mode7_demo/interrupt_handler.s index d29d7d53..361f7e59 100644 --- a/mode7_demo/interrupt_handler.s +++ b/mode7_demo/interrupt_handler.s @@ -234,8 +234,6 @@ mb_load_values: lda NOISE ; 3 bpl mb_not_done ; 3/2nt - lda #1 ; set done playing ; 2 - jmp quiet_exit ; 3 ;=========== ; typ 6 @@ -270,22 +268,22 @@ increment_done: ;================================= done_interrupt: - jmp exit_interrupt +; jmp exit_interrupt quiet_exit: - sta DONE_PLAYING - jsr clear_ay_both +; sta DONE_PLAYING +; jsr clear_ay_both ;===================================== ; clear register area ;===================================== - ldx #13 ; 2 - lda #0 ; 2 -mb_clear_reg: - sta REGISTER_DUMP,X ; clear register value ; 4 - sta REGISTER_OLD,X ; clear old values ; 4 - dex ; 2 - bpl mb_clear_reg ; 2nt/3 +; ldx #13 ; 2 +; lda #0 ; 2 +;mb_clear_reg: +; sta REGISTER_DUMP,X ; clear register value ; 4 +; sta REGISTER_OLD,X ; clear old values ; 4 +; dex ; 2 +; bpl mb_clear_reg ; 2nt/3 exit_interrupt: diff --git a/mode7_demo/mode7_demo.s b/mode7_demo/mode7_demo.s index 7ad888fe..84cae94d 100644 --- a/mode7_demo/mode7_demo.s +++ b/mode7_demo/mode7_demo.s @@ -40,10 +40,23 @@ start: stx MB_DETECTED beq mockingboard_setup_done + + ;================================ + ; one-time setup + ;================================ + ; Initialize the 2kB of multiply lookup tables + jsr init_multiply_tables + + ;================================ ; Mockingboard start ;================================ + +main_loop: + mockingboard_setup: + sei ; disable interrupts just in case + jsr mockingboard_init jsr reset_ay_both jsr clear_ay_both @@ -63,8 +76,6 @@ mockingboard_setup: ; Enable 50Hz clock on 6522 ;============================ - sei ; disable interrupts just in case - lda #$40 ; Continuous interrupts, don't touch PB7 sta $C40B ; ACR register lda #$7F ; clear all interrupt flags @@ -84,7 +95,6 @@ mockingboard_setup: ; 4fe7 / 1e6 = .020s, 50Hz ; 9c40 / 1e6 = .040s, 25Hz - ;============================ ; Start Playing ;============================ @@ -101,13 +111,13 @@ mockingboard_setup: ;===================================== ; clear register area ;===================================== - ldx #13 ; 2 - lda #0 ; 2 + ldx #13 ; 2 + lda #0 ; 2 mb_setup_clear_reg: - sta REGISTER_DUMP,X ; clear register value ; 4 - sta REGISTER_OLD,X ; clear old values ; 4 - dex ; 2 - bpl mb_setup_clear_reg ; 2nt/3 + sta REGISTER_DUMP,X ; clear register value ; 4 + sta REGISTER_OLD,X ; clear old values ; 4 + dex ; 2 + bpl mb_setup_clear_reg ; 2nt/3 @@ -116,6 +126,7 @@ mb_setup_clear_reg: mockingboard_setup_done: + ;================================ ; Clear screen and setup graphics ;================================ @@ -125,14 +136,13 @@ mockingboard_setup_done: lda #$4 sta DRAW_PAGE - ; Initialize the 2kB of multiply lookup tables - jsr init_multiply_tables + ;================================ ; Main Loop ;================================ -main_loop: + jsr title_routine jsr checkerboard_demo @@ -316,12 +326,9 @@ title_routine: ;============================ .include "deater.scrolltext" .include "a2.scrolltext" -.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -.byte $A8,$55,$95,$35,$85 .include "rasterbars.s" .include "starfield_demo.s" -; next part of logo in end of starfield_demo .include "../asm_routines/mockingboard_a.s" .include "credits.s" @@ -332,7 +339,7 @@ title_routine: ;=============================================== .include "../asm_routines/gr_unrle.s" -.include "../asm_routines/gr_hlin.s" +.include "../asm_routines/gr_hlin_double.s" .include "../asm_routines/gr_setpage.s" .include "../asm_routines/gr_fast_clear.s" .include "../asm_routines/pageflip.s" @@ -343,20 +350,14 @@ title_routine: .include "../asm_routines/gr_plot.s" .include "../asm_routines/text_print.s" - .include "mode7.s" .include "mode7_demo_backgrounds.inc" - ;=============================================== ; More routines ;=============================================== - - - - .align 256 music_start: diff --git a/mode7_demo/out.krg b/mode7_demo/out.krg index 1c9e509e9516225725d8297cde9b65cbb91ce575..47c0437e4684e6d9f6454743cf186fa272d3fa0e 100644 GIT binary patch literal 22528 zcmeHPT}%{L6vhe&C<2LAO`1kqZC6VJZKTDd47j<$DdZ)+85uAe}EEcwOX~N+RC2`ar@ml%glk$l&W zIp@1)?%cV1wM|M&N^)rC(afb8VHr<8Ud_mpF!659h_BGhsTpB98=aTsC7z=3T+#hW z3HcMYYbN8(S)PG@lm&W_8aj1h_)2&LPd=!*4uIi_uK)-|JOJtp9{Tly6N#??G9KyZ z!V!5%53V8}fO6q001`#?H}fbzNEiS~1qL7&CbV4Q^{%1C{gK>bI~b>rQA71zV-^2BshINdQFaTSl?F^PwBOyc1jtNviW zale9_8J6%1GK~5!*vYVjPoH7bKmAjNCA^9r%8Sk-po;&nesw!N_V5w>m|+P&;rfG{ z--do1W7BWdpPmTWeHnE;O!N9%eo%4ic`iU2Pi}Xp0(YQ9Ve!36bhwCJNtNxMhgDS^s zYt^6sav$6Hm(|_zsso3oz=PJ6>jJ<5K%|)`AFti317NxYz@6tN9-!jA3h+*w695MQ zk-z{l9(n1)hvGFoCtc-v zZueRDhP?Ie-`wl-HW--C%!HjE81tq%{t~;r+FpWUA9SpyT;VJ%SME9^FV{~PZ!3N7 z4`*aMI$S^Q;U&-3f-Rml&lawe$8K#kbBw;=fTs@7Q^MN#5*X2l z1fWwKpgths0Kh%L;4AI|4i01(LEx#4Vh;!4L4wf%okg#~^Va+>qy03a`Xk=LG47wy zlSpHca?yKQ_Jl^~55M{KoOs%_S^o}O3|n8U3QX?`q^GCr1;|WK*72m`A#76VL6t_; zlbN0g*;LZ0s2_bK@dQTgFZWlePrUuD`lG^R`hCRL=W-vX;`q15&(QEO=7DE9en!-P zW^!^$N^0t?jLfW@cvvE@fAKF@3iWLqJ~3t6Pj&>Xi?j#sGpCAsi@zo|KxeDt?^^ri=p{} zKVJgJlTU#9(!;N@Iex}+q}d|}4KZ(=3- z`d6 zShjTO>#r@FKX2ZG7w7Yqc=92Cx|ZTlOkH7BRizhS@JHpI8v0|;?n4I;z|5^+_rvzV z_*oTxFU;%ZSD7)7L;m!iHIk?7Yz?d$Rt2ln%p93VFrVd-`B~17NB{0Ul~vU>-o5+w zA2@jEi!Z+#vQX&wx#P#Xx6h`*`!yc@y}d%=l`FpPKf52_s(*a5?&8JTfB&d`^yuifM~_~(AlgU28#ucD z=sIQhWjy*5wf;{BTh0XhH#$Z8^Z~kp4xHeZp3==$mT(siOT!Jw#2M~A=vZhzljO?`J7G3WH&Y3%7~K>aa(er;_T zxF0|Ze6~4&afLRFA22+`EBX%v0~ANmU(c)J55fI?n3sH4ulP>X*Z+63_N1>~%(1Pl zVxDhp4P%TG9mkm;7-%`$(jx9-bF-MQ0)h5+G3xsI!t;FZo!*|?nCdakF_-#655GBb g_|UFhpX2``T3%{@D?fknV*E{-zN{NBNaXeJ|5G8sz5oCK literal 22528 zcmeHNJ#X7q6b)s|GWF$ViVdXbs<=RhF15D?vcVKcQ@McK$ZeDY9nvTnJT;D&ZeH>q z@(1z{vUDoYu|S57L4HA(4uO~Sy?03Ih~!oIBFdKIdqI#_hllswd)^bt_rNF`+mNhJ zM(}XVjv~g1-k0zbGUgC`!f^&<%s(RQkr8}Emkt;wdXI65?^`ePxh<(K=5vkAXWW*c-%9|+=W z`k#4^0A!LK+rIq8*B|+hayzOfA=;oI|&p)BgVC!P~!_7`jshRDnVY=>6ZVmE}DT_#QjUeO_AcbN%z4`rF+8 z|NS@nMy!Y`pbDr0s=$Y*z|zw4@^aPMim_T)Z?xKLA6@n>3QSjE{eA5E z$Ih-BTVLOBhA8qaKEK4Y*cYSy5kgxSV6a4E~jB6}79cI$WMHu(sB2H=B4O ztvO44#jO&mkB$fZUnFC|Dv|gX^Zt;2|3x*t$GyK=wVx=duR2_YF|cH;QZcWF|n7-GJ zK8lPTtGu;JY<3NS;}`Kc2Vedy{l)qeX;