From 1570e9b3c745d9de0483e977970e0ed8fe2d0396 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Sun, 11 May 2025 14:00:00 +0200 Subject: [PATCH] Music! --- lumber.asm | 121 ++++--- lumber.xex | Bin 24843 -> 28359 bytes msx/feat.txt | 40 +++ msx/rmtplayr_modified.asm | 642 ++++++++++++++++++++++++++++++++++++++ msx/tbm1_str.rmt | Bin 0 -> 2032 bytes 5 files changed, 751 insertions(+), 52 deletions(-) create mode 100644 msx/feat.txt create mode 100644 msx/rmtplayr_modified.asm create mode 100644 msx/tbm1_str.rmt diff --git a/lumber.asm b/lumber.asm index f0fda5b..e44f05c 100644 --- a/lumber.asm +++ b/lumber.asm @@ -88,11 +88,6 @@ display = $a000 RMT_zpvars = AutoPlay+1 ; POZOR!!! RMT vars go here ;--------------------------------------------------- org $2000 -MODUL - ;ins 'art/muzyka_stripped.rmt',+5 ; my RMT 1.28 on WINE is apparently broken. I lost some hair here (5, not 6) - ;.align $100 - ;icl 'art/rmtplayr.a65' - ;--------------------------------------------------- .align $400 PMmemory .ds $400 @@ -344,9 +339,6 @@ is_PAL jsr PowerDown wait_for_timer - - -/* bit RMT_blocked bmi SkipRMTVBL ; ------- RMT ------- @@ -354,11 +346,9 @@ wait_for_timer bmi lab2 asl @ ; * 2 tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126) - ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module) - lda #0 ;A = 0 note (0..60) - bit noSfx - smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!) - + ldx #1 ;X = 0 channel (0..3 or 0..7 for stereo module) + lda #10 ;A = 0 note (0..60) + jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!) lda #$ff sta sfx_effect ;reinit value lab2 @@ -366,23 +356,6 @@ lab2 ; ------- RMT ------- SkipRMTVBL -*/ -/* ;sfx - lda sfx_effect - bmi lab2 - asl ; * 2 - tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126) - ldx #3 ;X = 3 channel (0..3 or 0..7 for stereo module) - lda #12 ;A = 12 note (0..60) - jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!) -; - lda #$ff - sta sfx_effect ;reinit value -; -lab2 - jsr RASTERMUSICTRACKER+3 -skipSoundFrame */ - VBI_end ; key release flag lda LastKey @@ -1041,6 +1014,7 @@ No_keys jmp loop right_pressed sta LastKey + mva #sfx_ciach sfx_effect /* ; test for right lower branch lda branches_list+5 @@ -1075,6 +1049,7 @@ no_brancho_r jmp go_loop left_pressed sta LastKey + mva #sfx_ciach sfx_effect /* ; test for left lower branch lda branches_list+5 @@ -1291,7 +1266,7 @@ no_branch_l mva #%00000011 GRACTL mwa #dl_level dlptrs ;vdli IngameDLI1 - + mva #$ff RMT_blocked ;VBI mva #0 NTSCCounter @@ -1952,24 +1927,6 @@ datalines_logo=23 mva #$9f HPOSP0_d rts .endp -;-------------------------------------------------- -.proc RmtSongSelect -; starting song line 0-255 to A reg -;-------------------------------------------------- -/* - cmp #song_main_menu - beq noingame ; noMusic blocks only ingame songs - bit noMusic - spl:lda #song_silencio -noingame -*/ -/* mvx #$ff RMT_blocked - ldx #MODUL ; hi byte of RMT module to Y reg - jsr RASTERMUSICTRACKER ; Init - mva #0 RMT_blocked - */ rts -.endp ;-------------------------------- ; non ZP variables ;-------------------------------- @@ -2468,6 +2425,17 @@ KeyReleased rts .endp ;-------------------------------------------------- +.proc RmtSongSelect +; starting song line 0-255 to A reg +;-------------------------------------------------- + mvx #$ff RMT_blocked + ldx #MODUL ; hi byte of RMT module to Y reg + jsr RASTERMUSICTRACKER ; Init + mva #0 RMT_blocked + rts +.endp +;-------------------------------------------------- .proc PAL_NTSC ;-------------------------------------------------- lda PAL @@ -2640,17 +2608,66 @@ joyToKeyTable .by @kbcode._down ;0d .by @kbcode._up ;0e .by $ff ;0f + +;------------------------------------------------- +;RMT PLAYER variables +track_variables +trackn_db .ds TRACKS +trackn_hb .ds TRACKS +trackn_idx .ds TRACKS +trackn_pause .ds TRACKS +trackn_note .ds TRACKS +trackn_volume .ds TRACKS +trackn_distor .ds TRACKS +trackn_shiftfrq .ds TRACKS +trackn_instrx2 .ds TRACKS +trackn_instrdb .ds TRACKS +trackn_instrhb .ds TRACKS +trackn_instridx .ds TRACKS +trackn_instrlen .ds TRACKS +trackn_instrlop .ds TRACKS +trackn_instrreachend .ds TRACKS +trackn_volumeslidedepth .ds TRACKS +trackn_volumeslidevalue .ds TRACKS +trackn_effdelay .ds TRACKS +trackn_effvibratoa .ds TRACKS +trackn_effshift .ds TRACKS +trackn_tabletypespeed .ds TRACKS +trackn_tablenote .ds TRACKS +trackn_tablea .ds TRACKS +trackn_tableend .ds TRACKS +trackn_tablelop .ds TRACKS +trackn_tablespeeda .ds TRACKS +trackn_command .ds TRACKS +trackn_filter .ds TRACKS +trackn_audf .ds TRACKS +trackn_audc .ds TRACKS +trackn_audctl .ds TRACKS +v_aspeed .ds 1 +track_endvariables +;------------------------------------------------- +;RMT PLAYER loading shenaningans + icl 'msx/rmtplayr_modified.asm' +;------------------------------------------------- +;------------------------------------------------- +; music and sfx + org $b000 ; address of RMT module +MODUL + ; RMT module is standard Atari binary file already + ; include music RMT module: + ins "msx/tbm1_str.rmt",+6 +MODULEND + ;----------------------------------- ; names of RMT instruments (sfx) ;-------------------------------- -sfx_ping = $07 -sfx_pong = $08 +sfx_ciach = $03 ;-------------------------------- ; RMT songs (lines) ;-------------------------------- song_main_menu = $00 song_ingame = $07 -song_game_over = $12 +song_game_over = $05 RUN main diff --git a/lumber.xex b/lumber.xex index d18804651b3ac74cd083e491461370fe92c7ae55..37f2a28a93ca1f9102359fd5e492112d516b990a 100644 GIT binary patch delta 5629 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 AQvd(} delta 2538 zcmZ`*4{Q`w8sC|2cl!t1m7})Vw)SmX`jm$=<$xHn#1Sv{vu?K7s!r<6|m&K?K9m*b_pe+u8dkjyZr z%el%nJ1QS1e_uKKiC70RI)s%S%CtWz35PN6xeoRN+VOyNhL_IrXhG+XNo|HPC(q2E zh^z6W%WzW%jtkFssC`M!$i1-JaI1UpZqyu82a`9=T=f55vRNo`ZjA`jj<`bu)}w3C$87367e1f)Vk zdn+LQ!k~o%wfAz%NL6h;_cDpp&g9-EBegZI|1$Yj;tQ6L8?~j}eZ*TQa68Fw>l(Qa z$Y1MxuIo(jBAKXLz}1kFppRQi0>Ne6D*E}A9X z&!j7&U;=El^1vrhP; z8=l|7XlV?&ur`c==L{F>-61@^9fe+E*Dc%OnpRznrc^wrGAurKCsTdPRA_J~g2Y2U z<7*LI)7kjIR4%Ff9)|qT5{x2oG}N1dmNDoSyO!DAHc1_Ww9u`p-`wu#k(48vmtILo z3Pp(7P!_7N`D;um(^C+cy}>4FWsp5&6NBuInp2KaiL7D9)hNu8@_0bJHGQ&o%^e%; zX|GHTP0yj8+4i&>7-XM=z#zM$RhA=`*G@7WLMgQ;@%(Q15vZT?jebpZB=hyI#v(g)clJ&1)5chbVN{d=qq zyr*K=Z=6xAspR9wyqrqDdF=k;NSqBes~{Gg2b<&C4;vj+D;i6tyYQ_qO@klc7aLz% zvN=pEr7b*k;g{)6d=R=4s_X>oHT1K+1n*Dx4(Jp2H=#Ue;qqDK1?X|>KZ7QNd_)3>X5);f~f-?XuC)bJPLpkL`;qsva%3ehIknC^ z+XXV&k~u(7p^Isme$0ZWS@6?;tbKeg=Y$?SN_MQTa-WJOrj_d#$(!rH42hhBcW@5Q z1BbV`q}V%r=j0gH#&FVW)KHH!h9@c3C{7j_8E9b)&{9AthG*!|lcQK0WzsAFNActc z7O6+cNQ~fd&o`oyp^xCi%*9X-QQcS6?veTzE1CN1I1#llnTwK=mh3y-F>zv_x-Xey zIB7QChuq{>EqCA1785V@dz?_oe$+-OxTYP&IqYa}#9``hci_me!}uiAon$)Mal7(bTB-cB5`Bx2I|iN=Iq5Wb zB^--EgnJ;!APik>1vzs2&~q_19kOoY%+T;pv*P4Y3~rN|u(o5p@WB;fvja4YB^7H& zur!P{1xrV;b{I diff --git a/msx/feat.txt b/msx/feat.txt new file mode 100644 index 0000000..72be314 --- /dev/null +++ b/msx/feat.txt @@ -0,0 +1,40 @@ +;* --------BEGIN-------- +;* Z:\GitHub\Young-lumberjack\msx\tbm1_str.rmt +FEAT_SFX equ 1 +FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable +FEAT_NOSTARTINGSONGLINE equ 0 +FEAT_INSTRSPEED equ 1 +FEAT_CONSTANTSPEED equ 0 ;(2 times) +FEAT_COMMAND1 equ 1 ;(20 times) +FEAT_COMMAND2 equ 0 ;(0 times) +FEAT_COMMAND3 equ 0 ;(0 times) +FEAT_COMMAND4 equ 0 ;(0 times) +FEAT_COMMAND5 equ 0 ;(0 times) +FEAT_COMMAND6 equ 0 ;(0 times) +FEAT_COMMAND7SETNOTE equ 0 ;(0 times) +FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times) +FEAT_PORTAMENTO equ 0 ;(0 times) +FEAT_FILTER equ 0 ;(0 times) +FEAT_FILTERG0L equ 0 ;(0 times) +FEAT_FILTERG1L equ 0 ;(0 times) +FEAT_FILTERG0R equ 0 ;(0 times) +FEAT_FILTERG1R equ 0 ;(0 times) +FEAT_BASS16 equ 1 ;(1 times) +FEAT_BASS16G1L equ 0 ;(0 times) +FEAT_BASS16G3L equ 0 ;(0 times) +FEAT_BASS16G1R equ 0 ;(0 times) +FEAT_BASS16G3R equ 0 ;(0 times) +FEAT_VOLUMEONLYG0L equ 0 ;(0 times) +FEAT_VOLUMEONLYG2L equ 0 ;(0 times) +FEAT_VOLUMEONLYG3L equ 0 ;(0 times) +FEAT_VOLUMEONLYG0R equ 0 ;(0 times) +FEAT_VOLUMEONLYG2R equ 0 ;(0 times) +FEAT_VOLUMEONLYG3R equ 0 ;(0 times) +FEAT_TABLETYPE equ 0 ;(0 times) +FEAT_TABLEMODE equ 0 ;(0 times) +FEAT_TABLEGO equ 0 ;(0 times) +FEAT_AUDCTLMANUALSET equ 0 ;(0 times) +FEAT_VOLUMEMIN equ 0 ;(0 times) +FEAT_EFFECTVIBRATO equ 0 ;(0 times) +FEAT_EFFECTFSHIFT equ 1 ;(1 times) +;* --------END-------- diff --git a/msx/rmtplayr_modified.asm b/msx/rmtplayr_modified.asm new file mode 100644 index 0000000..0ffac7f --- /dev/null +++ b/msx/rmtplayr_modified.asm @@ -0,0 +1,642 @@ +; +; Raster Music Tracker, RMT Atari routine version 1.20090108 +; (c) Radek Sterba, Raster/C.P.U., 2002 - 2009 +; http://raster.atari.org +; +; Warnings: +; +; 1. RMT player routine needs 19 itself reserved bytes in zero page (no accessed +; from any other routines) as well as cca 1KB of memory before the "PLAYER" +; address for frequency tables and functionary variables. It's: +; a) from PLAYER-$03c0 to PLAYER for stereo RMTplayer +; b) from PLAYER-$0320 to PLAYER for mono RMTplayer +; +; 2. RMT player routine MUST (!!!) be compiled from the begin of the memory page. +; i.e. "PLAYER" address can be $..00 only! +; +; 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time. +; +; STEREOMODE equ 0..3 ;0 => compile RMTplayer for 4 tracks mono +; ;1 => compile RMTplayer for 8 tracks stereo +; ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4 +; ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4 + +TRACKS equ 4 +; RMT FEATures definitions file +; For optimizations of RMT player routine to concrete RMT modul only! + icl "feat.txt" +;FEAT_EFFECTS equ FEAT_EFFECTVIBRATO||FEAT_EFFECTFSHIFT +; +; RMT ZeroPage addresses +.zpvar p_tis .word +p_instrstable = p_tis +.zpvar p_trackslbstable .word +.zpvar p_trackshbstable .word +.zpvar p_song .word +.zpvar ns .word +.zpvar nr .word +.zpvar nt .byte +.zpvar reg1 .byte +.zpvar reg2 .byte +.zpvar reg3 .byte +.zpvar tmp .byte +.zpvar v_audctl .byte ; de-self-modification vars +.zpvar v_ainstrspeed .byte +.zpvar v_maxtracklen .byte +.zpvar v_abeat .byte +.zpvar v_bspeed .byte +.zpvar v_speed .byte +.zpvar RMTSFXVOLUME .byte + +; MOVED TO lumber.asm +; org PLAYER-$400+$e0 +;track_variables +;trackn_db .ds TRACKS +;trackn_hb .ds TRACKS +;trackn_idx .ds TRACKS +;trackn_pause .ds TRACKS +;trackn_note .ds TRACKS +;trackn_volume .ds TRACKS +;trackn_distor .ds TRACKS +;trackn_shiftfrq .ds TRACKS +;trackn_instrx2 .ds TRACKS +;trackn_instrdb .ds TRACKS +;trackn_instrhb .ds TRACKS +;trackn_instridx .ds TRACKS +;trackn_instrlen .ds TRACKS +;trackn_instrlop .ds TRACKS +;trackn_instrreachend .ds TRACKS +;trackn_volumeslidedepth .ds TRACKS +;trackn_volumeslidevalue .ds TRACKS +;trackn_effdelay .ds TRACKS +;trackn_effvibratoa .ds TRACKS +;trackn_effshift .ds TRACKS +;trackn_tabletypespeed .ds TRACKS +;trackn_tablenote .ds TRACKS +;trackn_tablea .ds TRACKS +;trackn_tableend .ds TRACKS +;trackn_tablelop .ds TRACKS +;trackn_tablespeeda .ds TRACKS +;trackn_command .ds TRACKS +;trackn_filter .ds TRACKS +;trackn_audf .ds TRACKS +;trackn_audc .ds TRACKS +;trackn_audctl .ds TRACKS +;v_aspeed .ds 1 +;track_endvariables + +INSTRPAR equ 12 +tabbeganddistor + dta frqtabpure-frqtab,$00 + dta frqtabpure-frqtab,$20 + dta frqtabpure-frqtab,$40 + dta frqtabbass1-frqtab,$c0 + dta frqtabpure-frqtab,$80 + dta frqtabpure-frqtab,$a0 + dta frqtabbass1-frqtab,$c0 + dta frqtabbass2-frqtab,$c0 +vibtabbeg dta 0,vib1-vib0,vib2-vib0,vib3-vib0 +vib0 dta 0 +vib1 dta 1,-1,-1,1 +vib2 dta 1,0,-1,-1,0,1 +vib3 dta 1,1,0,-1,-1,-1,-1,0,1,1 +vibtabnext + dta vib0-vib0+0 + dta vib1-vib0+1,vib1-vib0+2,vib1-vib0+3,vib1-vib0+0 + dta vib2-vib0+1,vib2-vib0+2,vib2-vib0+3,vib2-vib0+4,vib2-vib0+5,vib2-vib0+0 + dta vib3-vib0+1,vib3-vib0+2,vib3-vib0+3,vib3-vib0+4,vib3-vib0+5,vib3-vib0+6,vib3-vib0+7,vib3-vib0+8,vib3-vib0+9,vib3-vib0+0 + .align $100 +frqtab + ERT [frqtab + sta nr+1 +xtracks05sub1 ldx #TRACKS-1 +pp1 + lda trackn_instrhb,x + beq go_ppnext + sta ns+1 + lda trackn_instrdb,x + sta ns + ldy trackn_instridx,x + lda (ns),y + sta reg1 + iny + lda (ns),y + sta reg2 + iny + lda (ns),y + sta reg3 + iny + tya + cmp trackn_instrlen,x + bcc pp2 + beq pp2 + lda #$80 + sta trackn_instrreachend,x +pp1b + lda trackn_instrlop,x +pp2 sta trackn_instridx,x + lda reg1 + and #$0f + ora trackn_volume,x + tay + lda volumetab,y + sta tmp + lda reg2 + and #$0e + tay + lda tabbeganddistor,y + sta nr + lda tmp + ora tabbeganddistor+1,y + sta trackn_audc,x +InstrumentsEffects + lda trackn_effdelay,x + beq ei2 + cmp #1 + bne ei1 + lda trackn_shiftfrq,x + clc + adc trackn_effshift,x + clc + ldy trackn_effvibratoa,x + adc vib0,y + sta trackn_shiftfrq,x + lda vibtabnext,y + sta trackn_effvibratoa,x + jmp ei2 +ei1 + dec trackn_effdelay,x +ei2 + ldy trackn_tableend,x + cpy #INSTRPAR+1 + bcc ei3 + lda trackn_tablespeeda,x + bpl ei2f +ei2c + tya + cmp trackn_tablea,x + bne ei2c2 + lda trackn_tablelop,x + sta trackn_tablea,x + bne ei2a +ei2c2 + inc trackn_tablea,x +ei2a + lda trackn_instrdb,x + sta nt + lda trackn_instrhb,x + sta nt+1 + ldy trackn_tablea,x + lda (nt),y + sta trackn_tablenote,x + lda trackn_tabletypespeed,x +ei2f + sec + sbc #1 + sta trackn_tablespeeda,x +ei3 + lda trackn_instrreachend,x + bpl ei4 + lda trackn_volume,x + beq ei4 + tay + lda trackn_volumeslidevalue,x + clc + adc trackn_volumeslidedepth,x + sta trackn_volumeslidevalue,x + bcc ei4 + tya + sbc #16 + sta trackn_volume,x +ei4 + lda reg2 + sta trackn_command,x + and #$70 + beq cmd0 +cmd1 + lda reg3 + jmp cmd0c +cmd2 +cmd3 +cmd4 +cmd5 +cmd6 +cmd7 +cmd0 + lda trackn_note,x + clc + adc reg3 +cmd0a + clc + adc trackn_tablenote,x + cmp #61 + bcc cmd0a1 + lda #0 + sta trackn_audc,x + lda #63 +cmd0a1 + tay + lda (nr),y + clc + adc trackn_shiftfrq,x +cmd0c + sta trackn_audf,x +pp9 +ppnext + dex + bmi rmt_p4 + jmp pp1 +rmt_p4 + lda trackn_audctl+0 + ora trackn_audctl+1 + ora trackn_audctl+2 + ora trackn_audctl+3 + tax +qq1 + stx v_audctl + lda trackn_command+0 + bpl qq2 + lda trackn_audc+0 + and #$0f + beq qq2 + lda trackn_audf+0 + clc + adc trackn_filter+0 + sta trackn_audf+2 + lda #0 + sta trackn_audc+2 +qq1a + txa + ora #4 + tax +qq2 + lda trackn_command+1 + bpl qq3 + lda trackn_audc+1 + and #$0f + beq qq3 + lda trackn_audf+1 + clc + adc trackn_filter+1 + sta trackn_audf+3 + lda #0 + sta trackn_audc+3 +qq2a + txa + ora #2 + tax +qq3 +; cpx v_audctl +; bne qq5 +;qq5 + stx v_audctl +rmt_p5 +; lda v_ainstrspeed +.IF TARGET = 800 + ldx #$10 ; pseudo stereo + bne SetPokey_OffsetX ; pseudo stereo +.ELIF TARGET = 5200 + rts +.ENDIF +SetPokey + ldx #0 ; POKEY registers offset (for stereo) +SetPokey_OffsetX + lda trackn_audf+0 + sta AUDF1,x + lda trackn_audc+0 + sta AUDC1,x + lda trackn_audf+1 + sta AUDF2,x + lda trackn_audc+1 + sta AUDC2,x + lda trackn_audf+2 + sta AUDF3,x + lda trackn_audc+2 + sta AUDC3,x + lda trackn_audf+3 + sta AUDF4,x + lda trackn_audc+3 + sta AUDC4,x + lda v_audctl + sta AUDCTL,x + rts +RMTPLAYEREND diff --git a/msx/tbm1_str.rmt b/msx/tbm1_str.rmt new file mode 100644 index 0000000000000000000000000000000000000000..9db0e85c57f07a217fa6c9eec1750c82bece5b4f GIT binary patch literal 2032 zcmds1O-vI(7@e{$Q?^sOO9Lr|6B~k&q#K3v>VboaKZ!(+UOd!z@XWzvV&a8^2aSo* z81II7fL2)pF~LMF4W+b&%0VFz2||nsN4(7XW>)?wA>qd4&3tda?|nZrP3n1MWW(*h zeyjI#Fc2_CZj4+V9e1x}?q(ikUS&oz`OHe@Z^q1?&-P~@X2}Vbo6Xf-y#M;`=U?aU zJ^Q$Ldy!tabAq%pB6*&D=dbs2jg7gkdq!?{f@`>pwYL+p=}SGG4C`b_Cxbdk>tsMD zjJ38Bvh_dA$OI!pj0`f8W~7ldHxuIdu^>eza{6RWJTCnKLSe!rT~Ey5ezmr%-d815 z%ipk5eZPL!&sa;#&V_q)(xDSmmk!1{J9h$}p?S&DVsd#nxtTV$`ix+Q5j2e;F`(=2 z-lL<1go2r9v%?y0bm{< zj76h6O+Y3!QPOx(<0VZLG?CXhP*BKe4m}Wt&X*PuD^O90h@3jVP*L9Ilgg7@OR)r&5RaL{ot$fcUb!eG75ex^~g^T61uUbyyQ<6D!T3#0ZIA?Kw zt%*N2c{$F_IKSD%pPEjn*v1>%cp>g|ty>&eQ&_jeswFlo4y>wk-E!z*#hN9Mpwf;C z``N!$jX%d1SVj1fR(c>xxX?6(Q49tj)9_WOSdefi%qIzlPEj!nA3xy-T(LDz=!nc_hV4HeMea4xnW7 zSc+F{4wpG&i*Sn1*nC!{%tIyBRa;b5>bxQqD8Wz-X&@*L4lKwpxU8!}eEZXhA#9|i z+MfeuLs2=4U&9IcN|eG3vL~8QP~eDJWDg`j6C(l7tJ6IEKT_DRC&;)P4ApxgRCF66 QtWl3dW3UFSDd;!%A0#PhIRF3v literal 0 HcmV?d00001