Files
dino-game/music/mpt_relocator.mac
T
2024-08-14 16:20:56 -04:00

91 lines
1.7 KiB
Plaintext

/*
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