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