📄 rmt.asx
字号:
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
iny
tya
cmp trackn_effvibratoend,x
bne ei1a
lda trackn_effvibratobeg,x
ei1a
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
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
lda reg2
sta trackn_command,x
and #$70
lsr @
lsr @
sta jmx+1
jmx bcc *
jmp cmd0
nop
jmp cmd1
nop
jmp cmd2
nop
jmp cmd3
nop
jmp cmd4
nop
jmp cmd5
nop
jmp cmd6
nop
jmp cmd7
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
jmp pp9
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
jmp pp9
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
pp9
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
qq1
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
rmt_p5
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 #$ff
v_audctl2 equ *-1
lda trackn_audf+0+4
ldx trackn_audf+0
xstastx01 sta $d210
stx $d200
lda trackn_audc+0+4
ldx trackn_audc+0
xstastx02 sta $d211
stx $d201
lda trackn_audf+1+4
ldx trackn_audf+1
xstastx03 sta $d212
stx $d202
lda trackn_audc+1+4
ldx trackn_audc+1
xstastx04 sta $d213
stx $d203
lda trackn_audf+2+4
ldx trackn_audf+2
xstastx05 sta $d214
stx $d204
lda trackn_audc+2+4
ldx trackn_audc+2
xstastx06 sta $d215
stx $d205
lda trackn_audf+3+4
ldx trackn_audf+3
xstastx07 sta $d216
stx $d206
lda trackn_audc+3+4
ldx trackn_audc+3
xstastx08 sta $d217
stx $d207
lda #$ff
v_audctl equ *-1
xstysta01 sty $d218
sta $d208
ELI STEREOMODE==0 ;* L1 L2 L3 L4
ldy #$ff
v_audctl equ *-1
lda trackn_audf+0
ldx trackn_audc+0
sta $d200
stx $d201
lda trackn_audf+1
ldx trackn_audc+1
sta $d200+2
stx $d201+2
lda trackn_audf+2
ldx trackn_audc+2
sta $d200+4
stx $d201+4
lda trackn_audf+3
ldx trackn_audc+3
sta $d200+6
stx $d201+6
sty $d208
ELI STEREOMODE==2 ;* L1 R2 R3 L4
ldy #$ff
v_audctl equ *-1
lda trackn_audf+0
ldx trackn_audc+0
sta $d200
stx $d201
sta $d210
lda trackn_audf+1
ldx trackn_audc+1
sta $d210+2
stx $d211+2
lda trackn_audf+2
ldx trackn_audc+2
sta $d210+4
stx $d211+4
sta $d200+4
lda trackn_audf+3
ldx trackn_audc+3
sta $d200+6
stx $d201+6
sta $d210+6
sty $d218
sty $d208
ELI STEREOMODE==3 ;* L1 L2 R3 R4
ldy #$ff
v_audctl equ *-1
lda trackn_audf+0
ldx trackn_audc+0
sta $d200
stx $d201
lda trackn_audf+1
ldx trackn_audc+1
sta $d200+2
stx $d201+2
lda trackn_audf+2
ldx trackn_audc+2
sta $d210+4
stx $d211+4
sta $d200+4
lda trackn_audf+3
ldx trackn_audc+3
sta $d210+6
stx $d211+6
sta $d200+6
sty $d218
sty $d208
EIF
rts
RMTEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -