From 231ceef7895727a36ab05411ed9b6c57caad7978 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 18 Mar 2018 01:19:22 -0400 Subject: [PATCH] mode7: more sound compression up to 56 seconds --- mode7_demo/interrupt_handler.s | 117 +++++++++++++++++++++++++-------- mode7_demo/out.krg | Bin 22528 -> 22528 bytes 2 files changed, 91 insertions(+), 26 deletions(-) diff --git a/mode7_demo/interrupt_handler.s b/mode7_demo/interrupt_handler.s index 83c4d038..4a514b74 100644 --- a/mode7_demo/interrupt_handler.s +++ b/mode7_demo/interrupt_handler.s @@ -3,14 +3,14 @@ ; the fields with don't-care values are packed together ; they are played at 25Hz -; FRAME0 = AFINE -; FRAME1 = BFINE -; FRAME2 = CFINE -; FRAME3 = NOISE PERIOD -; FRAME4 = ENABLE -; FRAME5 = ACOARSE/BCOARSE -; FRAME6 = CCOARSE/AAMP -; FRAME7 = BAMP/CAMP +; FRAME0 = AFINE (r0) +; FRAME1 = BFINE (r2) +; FRAME2 = CFINE (r4) +; FRAME3 = NOISE PERIOD (r6) +; FRAME4 = ENABLE (r7) +; FRAME5 = ACOARSE/BCOARSE (r1/r3) +; FRAME6 = CCOARSE/AAMP (r5/r8) +; FRAME7 = BAMP/CAMP (r9/r10) ;================================ ;================================ @@ -24,7 +24,7 @@ ; It then calculates if it is a BRK or not (which trashes A) ; Then it sets up the stack like an interrupt and calls 0x3fe -CHUNKSIZE EQU 8 ; hardcoded, based on krg file +CHUNKSIZE EQU 11 ; hardcoded, based on krg file interrupt_handler: pha ; save A ; 3 @@ -119,35 +119,100 @@ mb_reg_copy: mb_load_values: - ldx #0 ; set up reg count ; 2 ldy MB_CHUNK_OFFSET ; get chunk offset ; 3 - ;============= - ; 5 -mb_load_loop: + ; afine lda (MB_ADDRL),y ; load register value ; 5 - sta REGISTER_DUMP,X ; 4 - ;============ - ; 9 - ;==================== - ; point to next page - ;==================== - + sta A_FINE_TONE ; 3 clc ; point to next interleaved ; 2 lda MB_ADDRH ; page by adding CHUNKSIZE ; 3 adc #CHUNKSIZE ; 3 sta MB_ADDRH ; 3 + ; bfine + lda (MB_ADDRL),y ; load register value ; 5 + sta B_FINE_TONE ; 3 + clc ; point to next interleaved ; 2 + lda MB_ADDRH ; page by adding CHUNKSIZE ; 3 + adc #CHUNKSIZE ; 3 + sta MB_ADDRH ; 3 + + ; cfine + lda (MB_ADDRL),y ; load register value ; 5 + sta C_FINE_TONE ; 3 + clc ; point to next interleaved ; 2 + lda MB_ADDRH ; page by adding CHUNKSIZE ; 3 + adc #CHUNKSIZE ; 3 + sta MB_ADDRH ; 3 + + ; noise + lda (MB_ADDRL),y ; load register value ; 5 + sta NOISE ; 3 + clc ; point to next interleaved ; 2 + lda MB_ADDRH ; page by adding CHUNKSIZE ; 3 + adc #CHUNKSIZE ; 3 + sta MB_ADDRH ; 3 + + ; enable + lda (MB_ADDRL),y ; load register value ; 5 + sta ENABLE ; 3 + clc ; point to next interleaved ; 2 + lda MB_ADDRH ; page by adding CHUNKSIZE ; 3 + adc #CHUNKSIZE ; 3 + sta MB_ADDRH ; 3 + + ; acoarse/bcoarse + lda (MB_ADDRL),y ; load register value ; 5 + and #$f ; 2 + sta B_COARSE_TONE ; 3 + lda (MB_ADDRL),y ; load register value ; 5 + lsr ; 2 + lsr ; 2 + lsr ; 2 + lsr ; 2 + sta A_COARSE_TONE ; 3 + clc ; point to next interleaved ; 2 + lda MB_ADDRH ; page by adding CHUNKSIZE ; 3 + adc #CHUNKSIZE ; 3 + sta MB_ADDRH ; 3 + + ; CCOARSE/AAMP + lda (MB_ADDRL),y ; load register value ; 5 + and #$f ; 2 + sta A_VOLUME ; 3 + lda (MB_ADDRL),y ; load register value ; 5 + lsr ; 2 + lsr ; 2 + lsr ; 2 + lsr ; 2 + sta C_COARSE_TONE ; 3 + clc ; point to next interleaved ; 2 + lda MB_ADDRH ; page by adding CHUNKSIZE ; 3 + adc #CHUNKSIZE ; 3 + sta MB_ADDRH ; 3 inx ; point to next register ; 2 - cpx #11 ; if 14 we're done ; 2 - bmi mb_load_loop ; otherwise, loop ; 3/2nt - ;============ - ; 18 + + ; BAMP/CAMP + lda (MB_ADDRL),y ; load register value ; 5 + and #$f ; 2 + sta C_VOLUME ; 3 + lda (MB_ADDRL),y ; load register value ; 5 + lsr ; 2 + lsr ; 2 + lsr ; 2 + lsr ; 2 + sta B_VOLUME ; 3 + + + + + + ;========================================= - ; if A_COARSE_TONE is $ff then we are done + ; if NOISE is $ff then we are done - lda A_COARSE_TONE ; 3 + lda NOISE ; 3 bpl mb_not_done ; 3/2nt lda #1 ; set done playing ; 2 diff --git a/mode7_demo/out.krg b/mode7_demo/out.krg index 4d16338320b58a0428eedcf9eb38c8a91b358d4a..1c9e509e9516225725d8297cde9b65cbb91ce575 100644 GIT binary patch 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;ZN4Rot zl?#{t2IU63`(%<6haRRS(LC<0shOKIr*HQ?J*GR|j6u+|Hd&L5;C7E41dJ2CX~Qqc zm_zU-$7zu<|BS3bM(`OGZ81*t2IDrqYrf3qx@>tdpL1kBTo|zAXRmEK(%tvG(wp@UtEL7qg zxnD+8|4$FUJp1{})1wY}Oe3Vc;2K(fEVHhu!{hi0?T3Ur*&jKW0fc_h0Te4_+N4y*759?lg9v z?TSsq>{>8Q3495DnY&VB`oV6N5J;qvm)%c-`uYwO% zd=*^ukMF_J*ZG0uGKq491ZO7T7$ z_TO-3oXaxq%6H9|`COMRFXpo*%xBz{kNr&E=R`DHeCBgqwp zOs1W+7E>x*r`c<42WyYl);Bgc)-6|C9A1CnH5`s_lyq2wG5ve;_N4vp{X5emryozx z&M(dx?~8e`x4Rwm)`Y^fp(Iysr)~Y{F1Ss%zIrYCGshMuiT=$!)$fxWuW|6!2qQmq& z1C@&JmrC=-mW{y|d^~k<9si>%41$cB0?{>^(Lr)#dId2wv!vKLbr-vogLi0gPLp-s z3XZ)HUA?s2Gmg*ohHcSTYG!V9)RUHo0{>S5tS8HPcnYYQ6b|3(n4Vkp{7S|1ik_GE zymGm$VEEwNgvaymKK^6wo6YKPRq;iKX?Oq&1uUnr;{rC2JJ%f1?iZZ_XnLr+Ot SvGa6~+D{;9PeKJ;$N%3j$K%TY