This commit is contained in:
Pecusx
2024-08-14 23:56:38 +02:00
3 changed files with 1053 additions and 0 deletions
+451
View File
@@ -0,0 +1,451 @@
/*
Player MPT 2.4
coded by Fox
07,19,25,30/07/96
original version by Jaskier/Taquart
*/
.proc mpt_player
;msx equ $5000
;lenpat equ $20
;speed equ $03
zp equ $f0 ;12 bytes on page 0
freq equ zp ;(4)
slup equ zp+4 ;(4)
ad equ zp+8 ;(2)
aud equ zp+10 ;(1)
tp equ zp+11 ;(1)
play
ldx freq
ldy freq+1
lda aud
sta $d208
sta $d218
and #$10
v10 equ *-1
beq w1
ldy numdzw+1
ldx bsfrql,y
lda bsfrqh,y
tay
w1 stx $d210
stx $d200
sty $d212
sty $d202
lda freq+2
sta $d214
sta $d204
lda freq+3
sta $d216
sta $d206
lda volume
sta $d211
sta $d201
lda volume+1
sta $d213
sta $d203
lda volume+2
sta $d215
sta $d205
lda volume+3
sta $d217
sta $d207
ldx #0
stx aud
inc licz
lda #$ff
pozptr equ *-1
l00 cmp #?lenpat
dec zegar
bcc r1
beq *+5
jmp r5
stx pozptr
p2 lda #$ff
sta ptrwsk,x
sta licspc,x
m_01c0 lda msx+$1c0,x
sta ad
m_01c4 lda msx+$1c4,x
sta ad+1
ldy #0
pozsng equ *-1
p3 lda (ad),y
iny
cmp #$fe
bcc p6
beq p4
lda (ad),y
bmi p4
asl @
tay
sta pozsng
bcc p3
p6 asl @
sta numptr,x
lda (ad),y
sta poddzw,x
p7 inx
cpx #4
bcc p2
iny
sty pozsng
bcs r5
p4 ldx #3
lda #0
fin sta volume,x
dex
bpl fin
dec pozptr
inc zegar
ret rts ;tutaj konczy player
r1 bpl r5
ldx #3
r2 dec licspc,x
bpl r4
ldy numptr,x
m_0041 lda msx+$41,y
beq r4
sta ad+1
m_0040 lda msx+$40,y
sta ad
ldy ptrwsk,x
jmp newdzw
r3 lda ilespc,x
sta licspc,x
r4 dex
bpl r2
lda #?speed-1
tempo equ *-1
sta zegar
inc pozptr
r5 ldx #3
bne r6
d0 sta volume,x
jmp r9
r8 ldy #$23
lda (ad),y
ora aud
sta aud
lda (ad),y
and filtry,x
beq r9
ldy #$28
lda (ad),y
clc
adc numdzw,x
jsr czest
sec
adc p1pom,x
sta freq+2,x
r9 dex
bmi ret
r6 lda adrinh,x
beq d0
sta ad+1
lda adrinl,x
sta ad
ldy slup,x
cpy #$20
bcs d3
lda (ad),y
adc adcvol,x
bit v10
beq d1
and #$f0
d1 sta volume,x
iny
lda (ad),y
iny
sty slup,x
sta tp
and #7
beq d4
tay
lda akce-1,y
sta akbr+1
lda tp
lsr @
lsr @
lsr @
lsr @
lsr @
ora #$28
tay
lda (ad),y
clc
akbr bcc *
ak equ *
a0 adc freq,x
a1 sta freq,x
jmp r9
a2 jsr aczest
sta freq,x
jmp r9
a4 sta freq,x
lda ndziel,x
bpl a7
a5 sta freq,x
lda #$80
bne a7
a6 sta freq,x
lda #1
a7 ora aud
sta aud
jmp r9
a8 and $d20a
sta freq,x
jmp r9
d3 iny
iny
bne *+4
ldy #$20
sty slup,x
lda volume,x
and #$0f
beq d4
ldy #$22
lda (ad),y
beq d4
dec p3lic,x
bne d4
sta p3lic,x
dec volume,x
d4 lda slup,x
and #6
lsr @
adc #$24
tay
lda (ad),y
jsr aczest
sta freq,x
ldy branch,x
sty typbr+1
ldy p2lic,x
typbr beq *
so equ *
dec p2lic,x
jmp r8
s0 lda #2
and #0
licz equ *-1
beq t2
asl @
and licz
bne t0
lda p1lsb,x
t1 sta p1pom,x
adc freq,x
sta freq,x
jmp r8
t0 lda freq,x
s1 sec
sbc p1lsb,x
sta freq,x
tya ;#0
sec
sbc p1lsb,x
t2 sta p1pom,x
jmp r8
s2 lda p1lic,x
t9 sta p1pom,x
clc
adc freq,x
t3 sta freq,x
clc
lda p1lic,x
adc p1lsb,x
sta p1lic,x
jmp r8
s3 lda numdzw,x
sec
sbc p1lic,x
t4 jsr nczest
jmp t3
s4 tya ;#0
sec
sbc p1lic,x
jmp t9
s5 lda numdzw,x
clc
adc p1lic,x
jmp t4
s6 jsr t5
jmp t1
s7 jsr t5
adc numdzw,x
jsr nczest
sta freq,x
jmp r8
t5 ldy p1lic,x
lda p1lsb,x
bmi *+4
iny
iny
dey
tya
sta p1lic,x
cmp p1lsb,x
bne t7
eor #$ff
sta p1lsb,x
lda p1lic,x
t7 clc
rts
aczest adc adcdzw,x
nczest sta numdzw,x
czest and #$3f
ora frqwsk,x
tay
m_00c0 lda msx+$c0,y
rts
nins sty tp
and #$1f
asl @
tay
m_0000 lda msx,y
sta adrinl,x
m_0001 lda msx+1,y
sta adrinh,x
ldy tp
newdzw lda #0
newavo sta adcvol,x
new iny
lda (ad),y
bpl q4
cmp #$fe
bne q0
tya
sta ptrwsk,x
jmp r3
q0 cmp #$c0
bcc q3
cmp #$e0
bcc q1
l01 lda #?lenpat
sta pozptr
bcs new
q1 cmp #$d0
bcc q2
and #$0f
sta tempo
bpl new
q2 adc #$31
bvc newavo
q3 and #$3f
sta ilespc,x
bpl new
q4 cmp #$40
bcs nins
adc poddzw,x
sta adcdzw,x
tya
sta ptrwsk,x
lda adrinh,x
beq qret
sta ad+1
lda adrinl,x
sta ad
ldy #$20
lda (ad),y
and #$0f
sta p1lsb,x
lda (ad),y
lsr @
lsr @
lsr @
lsr @
and #7
tay
lda typy,y
sta branch,x
ldy #$21
lda (ad),y
asl @
asl @
sta tp
and #$3f
sta p2lic,x
eor tp
sta frqwsk,x
iny
lda (ad),y
sta p3lic,x
lda #0
sta slup,x
sta p1lic,x
sta p1pom,x
lda adcdzw,x
* (nczest)
sta numdzw,x
and #$3f
ora frqwsk,x
tay
m_00c0_ lda msx+$c0,y
sta freq,x
qret jmp r3
akce
dta b(a1-ak),b(a0-ak),b(a2-ak)
dta b(a4-ak),b(a5-ak),b(a6-ak),b(a8-ak)
typy
dta b(s0-so),b(s1-so),b(s2-so),b(s3-so)
dta b(s4-so),b(s5-so),b(s6-so),b(s7-so)
ndziel dta $40,$00,$20,$00
filtry dta $04,$02,$00,$00
bsfrql equ *-1
dta $f2,$33,$96,$e2,$38,$8c,$00
dta $6a,$e8,$6a,$ef,$80,8,$ae,$46
dta $e6,$95,$41,$f6,$b0,$6e,$30,$f6
dta $bb,$84,$52,$22,$f4,$c8,$a0,$7a
dta $55,$34,$14,$f5,$d8,$bd,$a4,$8d
dta $77,$60,$4e,$38,$27,$15,$06,$f7
dta $e8,$db,$cf,$c3,$b8,$ac,$a2,$9a
dta $90,$88,$7f,$78,$70,$6a,$64,$5e
bsfrqh equ *-1
dta 13,13,12,11,11,10,10,9,8,8,7,7,7,6,6,5,5,5,4,4,4,4
dta 3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1
dta 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
branch dta d' '
volume dta d' '
adcvol dta d' '
frqwsk dta d' '
adcdzw dta d' '
poddzw dta d' '
adrinl dta d' '
adrinh dta d' '
numdzw dta d' '
numptr dta d' '
ptrwsk dta d' '
ilespc dta d' '
licspc dta d' '
p1lsb dta d' '
p1lic dta d' '
p1pom dta d' '
p2lic dta d' '
p3lic dta d' '
zegar dta 1
.endp
+512
View File
@@ -0,0 +1,512 @@
/*
Player MPT 2.4
coded by Fox
07,19,25,30/07/96
mads reloc by Tebe 06/03/2016
original version by Jaskier/Taquart
*/
zp equ $f0 ;12 bytes on page 0
freq equ zp ;(4)
slup equ zp+4 ;(4)
ad equ zp+8 ;(2)
aud equ zp+10 ;(1)
tp equ zp+11 ;(1)
msx equ $a000
lenpat equ $20
speed equ $03
.put[0] = mpt_player.a1-mpt_player.ak
.put[1] = mpt_player.a0-mpt_player.ak
.put[2] = mpt_player.a2-mpt_player.ak
.put[3] = mpt_player.a4-mpt_player.ak
.put[4] = mpt_player.a5-mpt_player.ak
.put[5] = mpt_player.a6-mpt_player.ak
.put[6] = mpt_player.a8-mpt_player.ak
.put[10] = mpt_player.s0-mpt_player.so
.put[11] = mpt_player.s1-mpt_player.so
.put[12] = mpt_player.s2-mpt_player.so
.put[13] = mpt_player.s3-mpt_player.so
.put[14] = mpt_player.s4-mpt_player.so
.put[15] = mpt_player.s5-mpt_player.so
.put[16] = mpt_player.s6-mpt_player.so
.put[17] = mpt_player.s7-mpt_player.so
.reloc
.proc mpt_player
jmp play
init stx zp
sty zp+1
adw zp #$1c0 m_01c0+1
adw zp #$1c4 m_01c4+1
adw zp #$41 m_0041+1
adw zp #$40 m_0040+1
lda zp
add #$c0
sta m_00c0+1
sta m_00c0_+1
lda zp+1
adc #0
sta m_00c0+2
sta m_00c0_+2
lda zp
sta m_0000+1
add #1
sta m_0001+1
lda zp+1
sta m_0000+2
adc #0
sta m_0001+2
adw zp #$1c8 _adr+1
jsr _adr
stx l00+1
stx l01+1
inw _adr+1
jsr _adr
dex
stx tempo+1
rts
_adr ldx $ffff
rts
play
ldx freq
ldy freq+1
lda aud
sta $d208
sta $d218
v10 and #$10
beq w1
ldy numdzw+1
ldx bsfrql,y
lda bsfrqh,y
tay
w1 stx $d210
stx $d200
sty $d212
sty $d202
lda freq+2
sta $d214
sta $d204
lda freq+3
sta $d216
sta $d206
lda volume
sta $d211
sta $d201
lda volume+1
sta $d213
sta $d203
lda volume+2
sta $d215
sta $d205
lda volume+3
sta $d217
sta $d207
ldx #0
stx aud
inc licz+1
pozptr lda #$ff
l00 cmp #lenpat
dec zegar
bcc r1
beq *+5
jmp r5
stx pozptr+1
p2 lda #$ff
sta ptrwsk,x
sta licspc,x
m_01c0 lda msx+$1c0,x
sta ad
m_01c4 lda msx+$1c4,x
sta ad+1
pozsng ldy #0
p3 lda (ad),y
iny
cmp #$fe
bcc p6
beq p4
lda (ad),y
bmi p4
asl @
tay
sta pozsng+1
bcc p3
p6 asl @
sta numptr,x
lda (ad),y
sta poddzw,x
p7 inx
cpx #4
bcc p2
iny
sty pozsng+1
bcs r5
p4 ldx #3
lda #0
fin sta volume,x
dex
bpl fin
dec pozptr+1
inc zegar
ret rts ;tutaj konczy player
r1 bpl r5
ldx #3
r2 dec licspc,x
bpl r4
ldy numptr,x
m_0041 lda msx+$41,y
beq r4
sta ad+1
m_0040 lda msx+$40,y
sta ad
ldy ptrwsk,x
jmp newdzw
r3 lda ilespc,x
sta licspc,x
r4 dex
bpl r2
tempo lda #speed-1
sta zegar
inc pozptr+1
r5 ldx #3
bne r6
d0 sta volume,x
jmp r9
r8 ldy #$23
lda (ad),y
ora aud
sta aud
lda (ad),y
and filtry,x
beq r9
ldy #$28
lda (ad),y
clc
adc numdzw,x
jsr czest
sec
adc p1pom,x
sta freq+2,x
r9 dex
bmi ret
r6 lda adrinh,x
beq d0
sta ad+1
lda adrinl,x
sta ad
ldy slup,x
cpy #$20
bcs d3
lda (ad),y
adc adcvol,x
bit v10+1
beq d1
and #$f0
d1 sta volume,x
iny
lda (ad),y
iny
sty slup,x
sta tp
and #7
beq d4
tay
lda akce-1,y
sta akbr+1
lda tp
lsr @
lsr @
lsr @
lsr @
lsr @
ora #$28
tay
lda (ad),y
clc
akbr bcc *
ak
a0 adc freq,x
a1 sta freq,x
jmp r9
a2 jsr aczest
sta freq,x
jmp r9
a4 sta freq,x
lda ndziel,x
bpl a7
a5 sta freq,x
lda #$80
bne a7
a6 sta freq,x
lda #1
a7 ora aud
sta aud
jmp r9
a8 and $d20a
sta freq,x
jmp r9
d3 iny
iny
bne *+4
ldy #$20
sty slup,x
lda volume,x
and #$0f
beq d4
ldy #$22
lda (ad),y
beq d4
dec p3lic,x
bne d4
sta p3lic,x
dec volume,x
d4 lda slup,x
and #6
lsr @
adc #$24
tay
lda (ad),y
jsr aczest
sta freq,x
ldy branch,x
sty typbr+1
ldy p2lic,x
typbr beq *
so
dec p2lic,x
jmp r8
s0 lda #2
licz and #0
beq t2
asl @
and licz+1
bne t0
lda p1lsb,x
t1 sta p1pom,x
adc freq,x
sta freq,x
jmp r8
t0 lda freq,x
s1 sec
sbc p1lsb,x
sta freq,x
tya ;#0
sec
sbc p1lsb,x
t2 sta p1pom,x
jmp r8
s2 lda p1lic,x
t9 sta p1pom,x
clc
adc freq,x
t3 sta freq,x
clc
lda p1lic,x
adc p1lsb,x
sta p1lic,x
jmp r8
s3 lda numdzw,x
sec
sbc p1lic,x
t4 jsr nczest
jmp t3
s4 tya ;#0
sec
sbc p1lic,x
jmp t9
s5 lda numdzw,x
clc
adc p1lic,x
jmp t4
s6 jsr t5
jmp t1
s7 jsr t5
adc numdzw,x
jsr nczest
sta freq,x
jmp r8
t5 ldy p1lic,x
lda p1lsb,x
bmi *+4
iny
iny
dey
tya
sta p1lic,x
cmp p1lsb,x
bne t7
eor #$ff
sta p1lsb,x
lda p1lic,x
t7 clc
rts
aczest adc adcdzw,x
nczest sta numdzw,x
czest and #$3f
ora frqwsk,x
tay
m_00c0 lda msx+$c0,y
rts
nins sty tp
and #$1f
asl @
tay
m_0000 lda msx,y
sta adrinl,x
m_0001 lda msx+1,y
sta adrinh,x
ldy tp
newdzw lda #0
newavo sta adcvol,x
new iny
lda (ad),y
bpl q4
cmp #$fe
bne q0
tya
sta ptrwsk,x
jmp r3
q0 cmp #$c0
bcc q3
cmp #$e0
bcc q1
l01 lda #lenpat
sta pozptr+1
bcs new
q1 cmp #$d0
bcc q2
and #$0f
sta tempo+1
bpl new
q2 adc #$31
bvc newavo
q3 and #$3f
sta ilespc,x
bpl new
q4 cmp #$40
bcs nins
adc poddzw,x
sta adcdzw,x
tya
sta ptrwsk,x
lda adrinh,x
beq qret
sta ad+1
lda adrinl,x
sta ad
ldy #$20
lda (ad),y
and #$0f
sta p1lsb,x
lda (ad),y
lsr @
lsr @
lsr @
lsr @
and #7
tay
lda typy,y
sta branch,x
ldy #$21
lda (ad),y
asl @
asl @
sta tp
and #$3f
sta p2lic,x
eor tp
sta frqwsk,x
iny
lda (ad),y
sta p3lic,x
lda #0
sta slup,x
sta p1lic,x
sta p1pom,x
lda adcdzw,x
* (nczest)
sta numdzw,x
and #$3f
ora frqwsk,x
tay
m_00c0_ lda msx+$c0,y
sta freq,x
qret jmp r3
akce .sav[0] 7
; dta b(a1-ak),b(a0-ak),b(a2-ak)
; dta b(a4-ak),b(a5-ak),b(a6-ak),b(a8-ak)
typy .sav[10] 8
; dta b(s0-so),b(s1-so),b(s2-so),b(s3-so)
; dta b(s4-so),b(s5-so),b(s6-so),b(s7-so)
ndziel dta $40,$00,$20,$00
filtry dta $04,$02,$00 ;,$00
bsfrql dta $00
dta $f2,$33,$96,$e2,$38,$8c,$00
dta $6a,$e8,$6a,$ef,$80,8,$ae,$46
dta $e6,$95,$41,$f6,$b0,$6e,$30,$f6
dta $bb,$84,$52,$22,$f4,$c8,$a0,$7a
dta $55,$34,$14,$f5,$d8,$bd,$a4,$8d
dta $77,$60,$4e,$38,$27,$15,$06,$f7
dta $e8,$db,$cf,$c3,$b8,$ac,$a2,$9a
dta $90,$88,$7f,$78,$70,$6a,$64 ;,$5e
bsfrqh dta $5e
dta 13,13,12,11,11,10,10,9,8,8,7,7,7,6,6,5,5,5,4,4,4,4
dta 3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1
dta 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
branch dta d' '
volume dta d' '
adcvol dta d' '
frqwsk dta d' '
adcdzw dta d' '
poddzw dta d' '
adrinl dta d' '
adrinh dta d' '
numdzw dta d' '
numptr dta d' '
ptrwsk dta d' '
ilespc dta d' '
licspc dta d' '
p1lsb dta d' '
p1lic dta d' '
p1pom dta d' '
p2lic dta d' '
p3lic dta d' '
zegar dta 1
.endp
+90
View File
@@ -0,0 +1,90 @@
/*
MPT Relocator
$0000..$003F - 32 adresy brzmien (LSB/MSB), bajty $00,$00 oznaczaja ze dane brzmienie jest puste
$0040..$00BF - 64 adresy patternow (LSB/MSB), bajty $00,$00 oznaczaja ze dany pattern jest pusty
$01C0..$01C3 - mlodsze bajty adresow trackow
$01C4..$01C7 - starsze bajty adresow trackow
$01C8..$01C8 - dlugosc patternow (wartosci - $10,$20,$30 lub $40)
$01C9..$01C9 - tempo utworu
Example:
mpt_relocator 'file.mpt' , new_address
*/
.macro mpt_relocator
.get :1 // wczytujemy plik do bufora MADS'a
ift (.wget[0]) <> $FFFF
ert 'Bad file format'
eif
new_add equ :2 // nowy adres dla modulu MPT
old_add equ .wget[2] // stary adres modulu MPT
.def ?length = .wget[4] - old_add + 1 // dlugosc pliku MPT bez naglowka DOS'u
.put[2] = .lo(new_add) // poprawiamy naglowek DOS'a
.put[3] = .hi(new_add) // tak aby zawieral informacje o nowym
.put[4] = .lo(new_add + ?length - 1) // adresie modulu MPT
.put[5] = .hi(new_add + ?length - 1)
ofs equ 6
.def ?lenpat = .get[ofs+$1c8]
.def ?speed = .get[ofs+$1c9]
// instruments
.rept 32
?tmp = .wget[ofs+#*2]
ift ?tmp <> 0
?hlp = ?tmp - old_add + new_add
.put[ofs+#*2] = .lo(?hlp)
.put[ofs+#*2+1] = .hi(?hlp)
eif
.endr
// patterns
.rept 64
?tmp = .wget[ofs+$40+#*2]
ift ?tmp <> 0
?hlp = ?tmp - old_add + new_add
.put[ofs+$40+#*2] = .lo(?hlp)
.put[ofs+$40+#*2+1] = .hi(?hlp)
eif
.endr
// 4 tracks
.rept 4
?tmp = .get[ofs+$1c0+#] + .get[ofs+$1c4+#]<<8
ift ?tmp <> 0
?hlp = ?tmp - old_add + new_add
.put[ofs+$1c0+#] = .lo(?hlp)
.put[ofs+$1c4+#] = .hi(?hlp)
eif
.endr
// out new file
; .sav 'test.mpt',?length + 6 // zapisujemy zawartosc bufora MADS'a do pliku
.endm