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 d188046..37f2a28 100644 Binary files a/lumber.xex and b/lumber.xex differ 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 0000000..9db0e85 Binary files /dev/null and b/msx/tbm1_str.rmt differ