Jump to content
IGNORED

RMT replayer 5200 and MADS OPT f+


Recommended Posts

to assemble a bin/cart image... I need to have assembling in OPT f+ mode in MADS... no problem to sort the segments into RAM/ROM ascending order... but how did you 5200 guys handled the RMT player itself with it's buffers etc?

 

or workaround is to stop Altirra by loading and then save the bin file with .filemem ?

Link to comment
Share on other sites

I always use direct assignments for the memory used by RMT instead of the "ORG *+" stuff. You have to be all little careful to actually leave enough space for the ZP parts (so it does not extended into $100+).

Link to comment
Share on other sites

RMT player uses self modifying code (variables defined as operand of LD? # instructions etc.) so it has to be in RAM. Only way is to modify the source code. I just looked into it and it seems that is uses 9 variables like LD? # operands. So you can move them somewhere in RAM, and replace the instructions.. then it will not run anyway as you need move the variables before the player, but it should be just changing some ORG.

Edited by MaPa
Link to comment
Share on other sites

and such stuff is not good for using in ROM:

 

lsr @
lsr @
sta jmx+1
jmx bcc *
jmp cmd0
nop
jmp cmd1
IFT FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd2
EIF
IFT FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd3
EIF
IFT FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd4
EIF
IFT FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd5
EIF
IFT FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd6
EIF
IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd7
EIF
EIF
ELS
IFT FEAT_FILTER||FEAT_BASS16
lda reg2
sta trackn_command,x
EIF
EIF
Link to comment
Share on other sites


v_maxtracklen equ $b7
v_speed equ $b8
v_instrspeed equ $b9
v_ainstrspeed equ $ba
v_abeat equ $bb
v_bspeed equ $bc
v_audctl equ $bd
music_patch equ $bc

TRACKS equ 4
PLAYER equ rmtplayer
;*
;* RMT FEATures definitions file
;* For optimizations of RMT player routine to concrete RMT modul only!

;* --------BEGIN--------
;* C:\jac\wudsn\Workspace\Atari800\Voxel\ars4_b000.rmt
FEAT_SFX equ 0
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
FEAT_NOSTARTINGSONGLINE equ 1
FEAT_INSTRSPEED equ 1
FEAT_CONSTANTSPEED equ 3 ;(0 times)
FEAT_COMMAND1 equ 1 ;(18 times)
FEAT_COMMAND2 equ 0 ;(0 times)
FEAT_COMMAND3 equ 0 ;(0 times)
FEAT_COMMAND4 equ 0 ;(0 times)
FEAT_COMMAND5 equ 1 ;(4 times)
FEAT_COMMAND6 equ 1 ;(10 times)
FEAT_COMMAND7SETNOTE equ 0 ;(0 times)
FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times)
FEAT_PORTAMENTO equ 1 ;(10 times)
FEAT_FILTER equ 1 ;(20 times)
FEAT_FILTERG0L equ 1 ;(20 times)
FEAT_FILTERG1L equ 0 ;(0 times)
FEAT_FILTERG0R equ 0 ;(0 times)
FEAT_FILTERG1R equ 0 ;(0 times)
FEAT_BASS16 equ 0 ;(0 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 1 ;(1 times)
FEAT_TABLEMODE equ 0 ;(0 times)
FEAT_TABLEGO equ 0 ;(0 times)
FEAT_AUDCTLMANUALSET equ 1 ;(2 times)
FEAT_VOLUMEMIN equ 0 ;(0 times)
FEAT_EFFECTVIBRATO equ 1 ;(2 times)
FEAT_EFFECTFSHIFT equ 0 ;(0 times)
;* --------END--------


;* RMT ZeroPage addresses
org 203
p_tis
p_instrstable org *+2
p_trackslbstable org *+2
p_trackshbstable org *+2
p_song org *+2
ns org *+2
nr org *+2
nt org *+2
reg1 org *+1
reg2 org *+1
reg3 org *+1
tmp org *+1
IFT FEAT_COMMAND2
frqaddcmd2 org *+1
EIF



COLBK equ $D01A
WSYNC equ $D40A

HSCROLL equ $D404
HS equ 16
BACKCOLOR equ $00


track_variables equ $220 ;PLAYER-$400+$e0
trackn_db equ track_variables+TRACKS
trackn_hb equ track_variables+2*TRACKS
trackn_idx equ track_variables+3*TRACKS
trackn_pause equ track_variables+4*TRACKS
trackn_note equ track_variables+5*TRACKS
trackn_volume equ track_variables+6*TRACKS
trackn_shiftfrq equ track_variables+7*TRACKS
IFT FEAT_PORTAMENTO
trackn_portafrqc equ track_variables+8*TRACKS
trackn_portafrqa equ track_variables+9*TRACKS
trackn_portaspeed equ track_variables+10*TRACKS
trackn_portaspeeda equ track_variables+11*TRACKS
trackn_portadepth equ track_variables+12*TRACKS
EIF
trackn_instrx2 equ track_variables+13*TRACKS
trackn_instrdb equ track_variables+14*TRACKS
trackn_instrhb equ track_variables+15*TRACKS
trackn_instridx equ track_variables+16*TRACKS
trackn_instrlen equ track_variables+17*TRACKS
trackn_instrlop equ track_variables+18*TRACKS
trackn_instrreachend equ track_variables+19*TRACKS
trackn_volumeslidedepth equ track_variables+20*TRACKS
trackn_volumeslidevalue equ track_variables+21*TRACKS
IFT FEAT_VOLUMEMIN
trackn_volumemin equ hhh; org *+TRACKS
EIF
FEAT_EFFECTS equ FEAT_EFFECTVIBRATO||FEAT_EFFECTFSHIFT
IFT FEAT_EFFECTS
trackn_effdelay equ equ track_variables+22*TRACKS
EIF
IFT FEAT_EFFECTVIBRATO
trackn_effvibratoa equ track_variables+23*TRACKS
EIF
IFT FEAT_EFFECTFSHIFT
trackn_effshift equ hhh; org *+TRACKS
EIF
trackn_tabletypespeed equ track_variables+24*TRACKS
IFT FEAT_TABLEMODE
trackn_tablemode equ hhh ;org *+TRACKS
EIF
trackn_tablenote equ track_variables+25*TRACKS
trackn_tablea equ track_variables+26*TRACKS
trackn_tableend equ track_variables+27*TRACKS
IFT FEAT_TABLEGO
trackn_tablelop equ hhh ;org *+TRACKS
EIF
trackn_tablespeeda equ track_variables+28*TRACKS
IFT FEAT_FILTER||FEAT_BASS16
trackn_command equ track_variables+29*TRACKS
EIF
IFT FEAT_BASS16
trackn_outnote equ hhh ;org *+TRACKS
EIF
IFT FEAT_FILTER
trackn_filter equ track_variables+30*TRACKS
EIF
trackn_audf equ track_variables+31*TRACKS
trackn_audc equ track_variables+32*TRACKS
IFT FEAT_AUDCTLMANUALSET
trackn_audctl equ track_variables+33*TRACKS
EIF
v_aspeed equ track_variables+34*TRACKS
track_endvariables




.if music=1
org msx
ins "ars4_b000.rmt",6
;*
;* 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
;*
org PLAYER-$100-$140-$40+2
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
IFT FEAT_EFFECTVIBRATO
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
EIF
org PLAYER-$100-$140
IFT FEAT_BASS16
frqtabbasslo
dta $F2,$33,$96,$E2,$38,$8C,$00,$6A,$E8,$6A,$EF,$80,$08,$AE,$46,$E6
dta $95,$41,$F6,$B0,$6E,$30,$F6,$BB,$84,$52,$22,$F4,$C8,$A0,$7A,$55
dta $34,$14,$F5,$D8,$BD,$A4,$8D,$77,$60,$4E,$38,$27,$15,$06,$F7,$E8
dta $DB,$CF,$C3,$B8,$AC,$A2,$9A,$90,$88,$7F,$78,$70,$6A,$64,$5E,$00
EIF
org PLAYER-$100-$100
frqtab
ERT [<frqtab]!=0 ;* frqtab must begin at the memory page bound! (i.e. $..00 address)
frqtabbass1
dta $BF,$B6,$AA,$A1,$98,$8F,$89,$80,$F2,$E6,$DA,$CE,$BF,$B6,$AA,$A1
dta $98,$8F,$89,$80,$7A,$71,$6B,$65,$5F,$5C,$56,$50,$4D,$47,$44,$3E
dta $3C,$38,$35,$32,$2F,$2D,$2A,$28,$25,$23,$21,$1F,$1D,$1C,$1A,$18
dta $17,$16,$14,$13,$12,$11,$10,$0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07
frqtabbass2
dta $FF,$F1,$E4,$D8,$CA,$C0,$B5,$AB,$A2,$99,$8E,$87,$7F,$79,$73,$70
dta $66,$61,$5A,$55,$52,$4B,$48,$43,$3F,$3C,$39,$37,$33,$30,$2D,$2A
dta $28,$25,$24,$21,$1F,$1E,$1C,$1B,$19,$17,$16,$15,$13,$12,$11,$10
dta $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
frqtabpure
dta $F3,$E6,$D9,$CC,$C1,$B5,$AD,$A2,$99,$90,$88,$80,$79,$72,$6C,$66
dta $60,$5B,$55,$51,$4C,$48,$44,$40,$3C,$39,$35,$32,$2F,$2D,$2A,$28
dta $25,$23,$21,$1F,$1D,$1C,$1A,$18,$17,$16,$14,$13,$12,$11,$10,$0F
dta $0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00,$00
IFT FEAT_BASS16
frqtabbasshi
dta $0D,$0D,$0C,$0B,$0B,$0A,$0A,$09,$08,$08,$07,$07,$07,$06,$06,$05
dta $05,$05,$04,$04,$04,$04,$03,$03,$03,$03,$03,$02,$02,$02,$02,$02
dta $02,$02,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00
dta $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
EIF
org PLAYER-$0100
volumetab
dta $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
dta $00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01
dta $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$02,$02,$02,$02
dta $00,$00,$00,$01,$01,$01,$01,$01,$02,$02,$02,$02,$02,$03,$03,$03
dta $00,$00,$01,$01,$01,$01,$02,$02,$02,$02,$03,$03,$03,$03,$04,$04
dta $00,$00,$01,$01,$01,$02,$02,$02,$03,$03,$03,$04,$04,$04,$05,$05
dta $00,$00,$01,$01,$02,$02,$02,$03,$03,$04,$04,$04,$05,$05,$06,$06
dta $00,$00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,$07
dta $00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,$07,$08
dta $00,$01,$01,$02,$02,$03,$04,$04,$05,$05,$06,$07,$07,$08,$08,$09
dta $00,$01,$01,$02,$03,$03,$04,$05,$05,$06,$07,$07,$08,$09,$09,$0A
dta $00,$01,$01,$02,$03,$04,$04,$05,$06,$07,$07,$08,$09,$0A,$0A,$0B
dta $00,$01,$02,$02,$03,$04,$05,$06,$06,$07,$08,$09,$0A,$0A,$0B,$0C
dta $00,$01,$02,$03,$03,$04,$05,$06,$07,$08,$09,$0A,$0A,$0B,$0C,$0D
dta $00,$01,$02,$03,$04,$05,$06,$07,$07,$08,$09,$0A,$0B,$0C,$0D,$0E
dta $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F

org PLAYER
;*
;* Set of RMT main vectors:
;*
jmp rmt_init
jmp rmt_play
jmp rmt_p3
jmp rmt_silence
jmp SetPokey
IFT FEAT_SFX
jmp rmt_sfx ;* A=note(0,..,60),X=channel(0,..,3 or 0,..,7),Y=instrument*2(0,2,4,..,126)
EIF
rmt_init
stx ns
sty ns+1
IFT FEAT_NOSTARTINGSONGLINE==0
pha
EIF
IFT track_endvariables-track_variables>255
ldy #0
tya
ri0 sta track_variables,y
sta track_endvariables-$100,y
iny
bne ri0
ELS
ldy #136 ;track_endvariables-track_variables
lda #0
ri0 sta track_variables-1,y
dey
bne ri0
EIF
ldy #4
lda (ns),y
sta v_maxtracklen
iny
IFT FEAT_CONSTANTSPEED==0
lda (ns),y
sta v_speed
EIF
IFT FEAT_INSTRSPEED==0
iny
lda (ns),y
sta v_instrspeed
sta v_ainstrspeed
ELI FEAT_INSTRSPEED>1
lda #FEAT_INSTRSPEED
sta v_ainstrspeed
EIF
ldy #8
ri1 lda (ns),y
sta p_tis-8,y
iny
cpy #8+8
bne ri1
IFT FEAT_NOSTARTINGSONGLINE==0
pla
pha
IFT TRACKS>4
asl @
asl @
asl @
clc
adc p_song
sta p_song
pla
php
and #$e0
asl @
rol @
rol @
rol @
ELS
asl @
asl @
clc
adc p_song
sta p_song
pla
php
and #$c0
asl @
rol @
rol @
EIF
plp
adc p_song+1
sta p_song+1
EIF
jsr GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
rmt_silence
IFT STEREOMODE>0
lda #0
sta $eb08
sta $e818
ldy #2
sty $eb0f
sty $e81f
ldy #8
si1 sta $eb00,y
sta $e810,y
dey
bpl si1
ELS
lda #0
sta $eb08
ldy #2
sty $eb0f
ldy #8
si1 sta $eb00,y
dey
bpl si1
EIF
IFT FEAT_INSTRSPEED==0
lda v_instrspeed
ELS
lda #FEAT_INSTRSPEED
EIF
rts
GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
GetSongLine
ldx #0
stx v_abeat
nn0
nn1 txa
tay
lda (p_song),y
cmp #$fe
bcs nn2
tay
lda (p_trackslbstable),y
sta trackn_db,x
lda (p_trackshbstable),y
sta trackn_hb,x
lda #0
sta trackn_idx,x
lda #1
nn1a2 sta trackn_pause,x
lda #$80
sta trackn_instrx2,x
inx
cpx #TRACKS
bne nn1
lda p_song
clc
adc #TRACKS
sta p_song
bcc GetTrackLine
inc p_song+1

jmp GetTrackLine
nn2
beq nn3

lda #0
beq nn1a2
nn3
ldy #2
lda (p_song),y
tax
iny
lda (p_song),y
sta p_song+1
stx p_song
ldx #0
beq nn0
GetTrackLine


IFT FEAT_CONSTANTSPEED==0
lda v_speed
sta v_bspeed
EIF
ldx #-1
oo1
inx
dec trackn_pause,x
bne oo1x

lda trackn_db,x
sta ns
lda trackn_hb,x
sta ns+1
oo1i
ldy trackn_idx,x
inc trackn_idx,x
lda (ns),y
sta reg1
and #$3f
cmp #61
beq oo1a
bcs oo2
sta trackn_note,x
IFT FEAT_BASS16
sta trackn_outnote,x
EIF
iny
lda (ns),y
lsr @
and #$3f*2
sta trackn_instrx2,x
oo1a
lda #1
sta trackn_pause,x
ldy trackn_idx,x
inc trackn_idx,x
lda (ns),y
lsr @
ror reg1
lsr @
ror reg1
lda reg1
IFT FEAT_GLOBALVOLUMEFADE
sec
sbc #$00
RMTGLOBALVOLUMEFADE equ *-1
bcs voig
lda #0
voig
EIF
and #$f0
sta trackn_volume,x
oo1x
cpx #TRACKS-1
bne oo1
IFT FEAT_CONSTANTSPEED==0
lda v_bspeed
sta v_speed
ELS
lda #FEAT_CONSTANTSPEED
EIF
sta v_aspeed
jmp InitOfNewSetInstrumentsOnly
oo2
cmp #63
beq oo63
lda reg1
and #$c0
beq oo62_b
asl @
rol @
rol @
sta trackn_pause,x
jmp oo1x
oo62_b
iny
lda (ns),y
sta trackn_pause,x
inc trackn_idx,x
jmp oo1x
oo63
lda reg1
IFT FEAT_CONSTANTSPEED==0
bmi oo63_1X
iny
lda (ns),y
sta v_bspeed
inc trackn_idx,x
jmp oo1i
oo63_1X
EIF
cmp #255
beq oo63_11
iny
lda (ns),y
sta trackn_idx,x
jmp oo1i
oo63_11
jmp GetSongLine
p2xrmtp3 jmp rmt_p3
p2x0 dex
bmi p2xrmtp3
InitOfNewSetInstrumentsOnly
ldy trackn_instrx2,x
bmi p2x0
IFT FEAT_SFX
jsr SetUpInstrumentY2
jmp p2x0
rmt_sfx
sta trackn_note,x
IFT FEAT_BASS16
sta trackn_outnote,x
EIF
lda #$f0 ;* sfx note volume*16
sta trackn_volume,x
EIF
SetUpInstrumentY2
lda (p_instrstable),y
sta trackn_instrdb,x
sta nt
iny
lda (p_instrstable),y
sta trackn_instrhb,x
sta nt+1
IFT FEAT_FILTER
lda #1
sta trackn_filter,x
EIF
IFT FEAT_TABLEGO
IFT FEAT_FILTER
tay
ELS
ldy #1
EIF
lda (nt),y
sta trackn_tablelop,x
iny
ELS
ldy #2
EIF
lda (nt),y
sta trackn_instrlen,x
iny
lda (nt),y
sta trackn_instrlop,x
iny
lda (nt),y
sta trackn_tabletypespeed,x
IFT FEAT_TABLETYPE||FEAT_TABLEMODE
and #$3f
EIF
sta trackn_tablespeeda,x
IFT FEAT_TABLEMODE
lda (nt),y
and #$40
sta trackn_tablemode,x
EIF
IFT FEAT_AUDCTLMANUALSET
iny
lda (nt),y
sta trackn_audctl,x
iny
ELS
ldy #6
EIF
lda (nt),y
sta trackn_volumeslidedepth,x
IFT FEAT_VOLUMEMIN
iny
lda (nt),y
sta trackn_volumemin,x
IFT FEAT_EFFECTS
iny
EIF
ELS
IFT FEAT_EFFECTS
ldy #8
EIF
EIF
IFT FEAT_EFFECTS
lda (nt),y
sta trackn_effdelay,x
IFT FEAT_EFFECTVIBRATO
iny
lda (nt),y
tay
lda vibtabbeg,y
sta trackn_effvibratoa,x
EIF
IFT FEAT_EFFECTFSHIFT
ldy #10
lda (nt),y
sta trackn_effshift,x
EIF
EIF
lda #128
sta trackn_volumeslidevalue,x
sta trackn_instrx2,x
asl @
sta trackn_instrreachend,x
sta trackn_shiftfrq,x
tay
lda (nt),y
sta trackn_tableend,x
adc #0
sta trackn_instridx,x
lda #INSTRPAR
sta trackn_tablea,x
tay
lda (nt),y
sta trackn_tablenote,x

IFT FEAT_SFX
rts
ELS
jmp p2x0
EIF
rmt_play
jsr SetPokey

IFT FEAT_INSTRSPEED==0||FEAT_INSTRSPEED>1
dec v_ainstrspeed
bne rmt_p3
EIF
IFT FEAT_INSTRSPEED==0
lda v_instrspeed
sta v_ainstrspeed
ELI FEAT_INSTRSPEED>1
lda #FEAT_INSTRSPEED
sta v_ainstrspeed
EIF

dec v_aspeed
bne rmt_p3
inc v_abeat
lda v_abeat
cmp v_maxtracklen
beq p2o3
jmp GetTrackLine
p2o3
jmp GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
go_ppnext jmp ppnext
rmt_p3
lda #>frqtab
sta nr+1
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

lda trackn_instrlop,x
pp2 sta trackn_instridx,x
lda reg1
IFT TRACKS>4
cpx #4
bcc pp2s
lsr @
lsr @
lsr @
lsr @
pp2s
EIF
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

IFT FEAT_EFFECTS
lda trackn_effdelay,x
beq ei2
cmp #1
bne ei1
lda trackn_shiftfrq,x
IFT FEAT_EFFECTFSHIFT
clc
adc trackn_effshift,x
EIF
IFT FEAT_EFFECTVIBRATO
clc
ldy trackn_effvibratoa,x
adc vib0,y
EIF
sta trackn_shiftfrq,x
IFT FEAT_EFFECTVIBRATO
lda vibtabnext,y
sta trackn_effvibratoa,x
EIF
jmp ei2
ei1
dec trackn_effdelay,x
ei2
EIF
ldy trackn_tableend,x
cpy #INSTRPAR+1
bcc ei3
lda trackn_tablespeeda,x
bpl ei2f

tya
cmp trackn_tablea,x
bne ei2c2
IFT FEAT_TABLEGO
lda trackn_tablelop,x
ELS
lda #INSTRPAR
EIF
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
IFT FEAT_TABLEMODE
ldy trackn_tablemode,x
beq ei2e
clc
adc trackn_tablenote,x
ei2e
EIF
sta trackn_tablenote,x
lda trackn_tabletypespeed,x
IFT FEAT_TABLETYPE||FEAT_TABLEMODE
and #$3f
EIF
ei2f
sec
sbc #1
sta trackn_tablespeeda,x
ei3
lda trackn_instrreachend,x
bpl ei4
lda trackn_volume,x
beq ei4
IFT FEAT_VOLUMEMIN
cmp trackn_volumemin,x
beq ei4
bcc ei4
EIF
tay
lda trackn_volumeslidevalue,x
clc
adc trackn_volumeslidedepth,x
sta trackn_volumeslidevalue,x
bcc ei4
tya
sbc #16
sta trackn_volume,x
ei4
IFT FEAT_COMMAND2
lda #0
sta frqaddcmd2
EIF
IFT FEAT_COMMAND1||FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
lda reg2
IFT FEAT_FILTER||FEAT_BASS16
sta trackn_command,x
EIF
and #$70
IFT 1==[FEAT_COMMAND1+FEAT_COMMAND2+FEAT_COMMAND3+FEAT_COMMAND4+FEAT_COMMAND5+FEAT_COMMAND6+[FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY]]
beq cmd0
ELS
lsr @
lsr @ ;*4 insert relative jump
bne @+
jmp cmd0
@
cmp #$04
bne @+
jmp cmd1
@
cmp #$08
bne @+
jmp cmd2
@
cmp #$0c
bne @+
jmp cmd3
@
cmp #$10
bne @+
jmp cmd4
@
cmp #$14
bne @+
jmp cmd5
@
cmp #$18
bne @+
jmp cmd6
@
cmp #$1c
bne @+
jmp cmd7
@
jmp cmd0

; sta jmx+1
jmx bcc *+$14+1
jmp cmd0
nop
jmp cmd1
IFT FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd2
EIF
IFT FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd3
EIF
IFT FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd4
EIF
IFT FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd5
EIF
IFT FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd6
EIF
IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
nop
jmp cmd7
EIF
EIF
ELS
IFT FEAT_FILTER||FEAT_BASS16
cmd00 lda reg2
sta trackn_command,x
EIF
EIF
cmd1
IFT FEAT_COMMAND1
lda reg3
jmp cmd0c
EIF
cmd2
IFT FEAT_COMMAND2
lda reg3
sta frqaddcmd2
lda trackn_note,x
jmp cmd0a
EIF
cmd3
IFT FEAT_COMMAND3
lda trackn_note,x
clc
adc reg3
sta trackn_note,x
jmp cmd0a
EIF
cmd4
IFT FEAT_COMMAND4
lda trackn_shiftfrq,x
clc
adc reg3
sta trackn_shiftfrq,x
lda trackn_note,x
jmp cmd0a
EIF
cmd5
IFT FEAT_COMMAND5&&FEAT_PORTAMENTO
IFT FEAT_TABLETYPE
lda trackn_tabletypespeed,x
bpl cmd5a1
ldy trackn_note,x
lda (nr),y
clc
adc trackn_tablenote,x
jmp cmd5ax
EIF
cmd5a1
lda trackn_note,x
clc
adc trackn_tablenote,x
cmp #61
bcc cmd5a2
lda #63
cmd5a2
tay
lda (nr),y
cmd5ax
sta trackn_portafrqc,x
ldy reg3
bne cmd5a
sta trackn_portafrqa,x
cmd5a
tya
lsr @
lsr @
lsr @
lsr @
sta trackn_portaspeed,x
sta trackn_portaspeeda,x
lda reg3
and #$0f
sta trackn_portadepth,x
lda trackn_note,x
jmp cmd0a
ELI FEAT_COMMAND5
lda trackn_note,x
jmp cmd0a
EIF
cmd6
IFT FEAT_COMMAND6&&FEAT_FILTER
lda reg3
clc
adc trackn_filter,x
sta trackn_filter,x
lda trackn_note,x
jmp cmd0a
ELI FEAT_COMMAND6
lda trackn_note,x
jmp cmd0a
EIF
cmd7
IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY
IFT FEAT_COMMAND7SETNOTE
lda reg3
IFT FEAT_COMMAND7VOLUMEONLY
cmp #$80
beq cmd7a
EIF
sta trackn_note,x
jmp cmd0a
EIF
IFT FEAT_COMMAND7VOLUMEONLY
cmd7a
lda trackn_audc,x
ora #$f0
sta trackn_audc,x
lda trackn_note,x
jmp cmd0a
EIF
EIF
cmd0
lda trackn_note,x
clc
adc reg3
cmd0a
IFT FEAT_TABLETYPE
ldy trackn_tabletypespeed,x
bmi cmd0b
EIF
clc
adc trackn_tablenote,x
cmp #61
bcc cmd0a1
lda #0
sta trackn_audc,x
lda #63
cmd0a1
IFT FEAT_BASS16
sta trackn_outnote,x
EIF
tay
lda (nr),y
clc
adc trackn_shiftfrq,x
IFT FEAT_COMMAND2
clc
adc frqaddcmd2
EIF
IFT FEAT_TABLETYPE
jmp cmd0c
cmd0b
cmp #61
bcc cmd0b1
lda #0
sta trackn_audc,x
lda #63
cmd0b1
tay
lda trackn_shiftfrq,x
clc
adc trackn_tablenote,x
clc
adc (nr),y
IFT FEAT_COMMAND2
clc
adc frqaddcmd2
EIF
EIF
cmd0c
sta trackn_audf,x

IFT FEAT_PORTAMENTO
lda trackn_portaspeeda,x
beq pp10
dec trackn_portaspeeda,x
bne pp10
lda trackn_portaspeed,x
sta trackn_portaspeeda,x
lda trackn_portafrqa,x
cmp trackn_portafrqc,x
beq pp10
bcs pps1
adc trackn_portadepth,x
bcs pps8
cmp trackn_portafrqc,x
bcs pps8
jmp pps9
pps1
sbc trackn_portadepth,x
bcc pps8
cmp trackn_portafrqc,x
bcs pps9
pps8
lda trackn_portafrqc,x
pps9
sta trackn_portafrqa,x
pp10
lda reg2
and #$01
beq pp11
lda trackn_portafrqa,x
clc
adc trackn_shiftfrq,x
sta trackn_audf,x
pp11
EIF
ppnext
dex
bmi rmt_p4
jmp pp1
rmt_p4
IFT FEAT_AUDCTLMANUALSET
lda trackn_audctl+0
ora trackn_audctl+1
ora trackn_audctl+2
ora trackn_audctl+3
tax
ELS
ldx #0
EIF

stx v_audctl
IFT FEAT_FILTER
IFT FEAT_FILTERG0L
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
IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2L
lda trackn_audc+2
and #$10
bne qq1a
EIF
lda #0
sta trackn_audc+2
qq1a
txa
ora #4
tax
EIF
qq2
IFT FEAT_FILTERG1L
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
IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG3L
lda trackn_audc+3
and #$10
bne qq2a
EIF
lda #0
sta trackn_audc+3
qq2a
txa
ora #2
tax
EIF
qq3
IFT FEAT_FILTERG0L||FEAT_FILTERG1L
cpx v_audctl
bne qq5
EIF
EIF
IFT FEAT_BASS16
IFT FEAT_BASS16G1L
lda trackn_command+1
and #$0e
cmp #6
bne qq4
lda trackn_audc+1
and #$0f
beq qq4
ldy trackn_outnote+1
lda frqtabbasslo,y
sta trackn_audf+0
lda frqtabbasshi,y
sta trackn_audf+1
IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG0L
lda trackn_audc+0
and #$10
bne qq3a
EIF
lda #0
sta trackn_audc+0
qq3a
txa
ora #$50
tax
EIF
qq4
IFT FEAT_BASS16G3L
lda trackn_command+3
and #$0e
cmp #6
bne qq5
lda trackn_audc+3
and #$0f
beq qq5
ldy trackn_outnote+3
lda frqtabbasslo,y
sta trackn_audf+2
lda frqtabbasshi,y
sta trackn_audf+3
IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2L
lda trackn_audc+2
and #$10
bne qq4a
EIF
lda #0
sta trackn_audc+2
qq4a
txa
ora #$28
tax
EIF
EIF
qq5
stx v_audctl
IFT TRACKS>4
IFT FEAT_AUDCTLMANUALSET
lda trackn_audctl+4
ora trackn_audctl+5
ora trackn_audctl+6
ora trackn_audctl+7
tax
ELS
ldx #0
EIF
stx v_audctl2
IFT FEAT_FILTER
IFT FEAT_FILTERG0R
lda trackn_command+0+4
bpl qs2
lda trackn_audc+0+4
and #$0f
beq qs2
lda trackn_audf+0+4
clc
adc trackn_filter+0+4
sta trackn_audf+2+4
IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2R
lda trackn_audc+2+4
and #$10
bne qs1a
EIF
lda #0
sta trackn_audc+2+4
qs1a
txa
ora #4
tax
EIF
qs2
IFT FEAT_FILTERG1R
lda trackn_command+1+4
bpl qs3
lda trackn_audc+1+4
and #$0f
beq qs3
lda trackn_audf+1+4
clc
adc trackn_filter+1+4
sta trackn_audf+3+4
IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG3R
lda trackn_audc+3+4
and #$10
bne qs2a
EIF
lda #0
sta trackn_audc+3+4
qs2a
txa
ora #2
tax
EIF
qs3
IFT FEAT_FILTERG0R||FEAT_FILTERG1R
cpx v_audctl2
bne qs5
EIF
EIF
IFT FEAT_BASS16
IFT FEAT_BASS16G1R
lda trackn_command+1+4
and #$0e
cmp #6
bne qs4
lda trackn_audc+1+4
and #$0f
beq qs4
ldy trackn_outnote+1+4
lda frqtabbasslo,y
sta trackn_audf+0+4
lda frqtabbasshi,y
sta trackn_audf+1+4
IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG0R
lda trackn_audc+0+4
and #$10
bne qs3a
EIF
lda #0
sta trackn_audc+0+4
qs3a
txa
ora #$50
tax
EIF
qs4
IFT FEAT_BASS16G3R
lda trackn_command+3+4
and #$0e
cmp #6
bne qs5
lda trackn_audc+3+4
and #$0f
beq qs5
ldy trackn_outnote+3+4
lda frqtabbasslo,y
sta trackn_audf+2+4
lda frqtabbasshi,y
sta trackn_audf+3+4
IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2R
lda trackn_audc+2+4
and #$10
bne qs4a
EIF
lda #0
sta trackn_audc+2+4
qs4a
txa
ora #$28
tax
EIF
EIF
qs5
stx v_audctl2
EIF

IFT FEAT_INSTRSPEED==0||FEAT_INSTRSPEED>1
lda v_ainstrspeed
ELS
lda #1
EIF
rts
SetPokey
IFT STEREOMODE==1 ;* L1 L2 L3 L4 R1 R2 R3 R4
ldy v_audctl2
lda trackn_audf+0+4
ldx trackn_audf+0
xstastx01 sta $e810
stx $eb00
lda trackn_audc+0+4
ldx trackn_audc+0
xstastx02 sta $e811
stx $eb01
lda trackn_audf+1+4
ldx trackn_audf+1
xstastx03 sta $e812
stx $eb02
lda trackn_audc+1+4
ldx trackn_audc+1
xstastx04 sta $e813
stx $eb03
lda trackn_audf+2+4
ldx trackn_audf+2
xstastx05 sta $e814
stx $eb04
lda trackn_audc+2+4
ldx trackn_audc+2
xstastx06 sta $e815
stx $eb05
lda trackn_audf+3+4
ldx trackn_audf+3
xstastx07 sta $e816
stx $eb06
lda trackn_audc+3+4
ldx trackn_audc+3
xstastx08 sta $e817
stx $eb07
lda v_audctl
xstysta01 sty $e818
sta $eb08
ELI STEREOMODE==0 ;* L1 L2 L3 L4
ldy v_audctl
;v_audctl equ *-1
lda trackn_audf+0
ldx trackn_audc+0
sta $eb00
stx $eb01
lda trackn_audf+1
ldx trackn_audc+1
sta $eb00+2
stx $eb01+2
lda trackn_audf+2
ldx trackn_audc+2
sta $eb00+4
stx $eb01+4
lda trackn_audf+3
ldx trackn_audc+3
sta $eb00+6
stx $eb01+6
sty $eb08
ELI STEREOMODE==2 ;* L1 R2 R3 L4
ldy v_audctl
lda trackn_audf+0
ldx trackn_audc+0
sta $eb00
stx $eb01
sta $e810
lda trackn_audf+1
ldx trackn_audc+1
sta $e810+2
stx $e811+2
lda trackn_audf+2
ldx trackn_audc+2
sta $e810+4
stx $e811+4
sta $eb00+4
lda trackn_audf+3
ldx trackn_audc+3
sta $eb00+6
stx $eb01+6
sta $e810+6
sty $e818
sty $eb08
ELI STEREOMODE==3 ;* L1 L2 R3 R4
ldy v_audctl
lda trackn_audf+0
ldx trackn_audc+0
sta $eb00
stx $eb01
lda trackn_audf+1
ldx trackn_audc+1
sta $eb00+2
stx $eb01+2
lda trackn_audf+2
ldx trackn_audc+2
sta $e810+4
stx $e811+4
sta $eb00+4
lda trackn_audf+3
ldx trackn_audc+3
sta $e810+6
stx $e811+6
sta $eb00+6
sty $e818
sty $eb08
EIF
rts
;;
.endif



org $bfe8
.byte "** HEAVEN/DESIRE ** " ;20 characters title
.byte 'xx' ;2 characters year
.word start_rom
Edited by Heaven/TQA
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...