MSC (format pliku)

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania

Format modułu muzycznego obsługiwany przez program Black Magic Composer.

Budowa pliku

Plik jest skompresowany za pomocą wariantu prostej kompresji RLE.

1. Jeśli bajt odczytany z pliku ma wartość $1B (kod ATASCII znaku ESC), wtedy kolejne dwa bajty oznaczają kolejno:

  • wartość
  • ilość powtórzeń

2. Każdy inny bajt odczytany z pliku kopiowany jest do pamięci.

Dane

offsetdługośćopis
$0000$0680Song #1.
$0680$0680Song #2.
$0D00$0680Song #3.
$1380$0680Song #4.
$1A00$1000Dane 128 sekwencji syntetycznych.
$2A00$0800Dane 64 sekwencji samplowych.
$3200$1000Dane 32 instrumentów.
$4200$005ABlok inicjalizacyjny playera.


Song

offsetdługośćopis
$0000$0080Numery sekwencji syntetycznych dla tracku #1.
$0080$0080Transpozycje nut sekwencji syntetycznych dla tracku #1.
$0100$0080Numery bazowe instrumentów sekwencji syntetycznych dla tracku #1.
$0180$0080Numery sekwencji syntetycznych dla tracku #2.
$0200$0080Transpozycje nut sekwencji syntetycznych dla tracku #2.
$0280$0080Numery bazowe instrumentów sekwencji syntetycznych dla tracku #2.
$0300$0080Numery sekwencji syntetycznych dla tracku #3.
$0380$0080Transpozycje nut sekwencji syntetycznych dla tracku #3.
$0400$0080Numery bazowe instrumentów sekwencji syntetycznych dla tracku #3.
$0480$0080Numery sekwencji syntetycznych dla tracku #4.
$0500$0080Transpozycje nut sekwencji syntetycznych dla tracku #4.
$0580$0080Numery bazowe instrumentów sekwencji syntetycznych dla tracku #4.
$0600$0080Numery sekwencji samplowych.
  • $7E - koniec songu.
  • $7F - zapętlenie songu.


Sekwencje syntetyczne

offsetdługośćopis
$0000$0020Dane sekwencji #0.
$0020$0020Dane sekwencji #1.
.........
$0FE0$0020Dane sekwencji #127.

Każda sekwencja składa się z 16 par bajtów:

  • nuta - 0=brak
  • instrument


Sekwencje samplowe

offsetdługośćopis
$0000$0020Dane sekwencji #0.
$0020$0020Dane sekwencji #1.
.........
$07E0$0020Dane sekwencji #63.

Każda sekwencja składa się z 32 bajtów oznaczających numery sampli.


Instrumenty

offsetdługośćopis
$0000$0080Dane instrumentu #0.
$0080$0080Dane instrumentu #1.
.........
$0F80$0080Dane instrumentu #31.

Każdy instrument zdefiniowany jest następująco:

offsetdługośćopis
$0000$0001Długość obwiedni.
$0001$0001Zapętlenie obwiedni.
$0002$0004Arpeggio.
$0006$0001Vibrato min-max.
$0007$0001Vibrato speed-delay.
$0008$0001Glide.
$0009$0001Detune.
$000A$000116-bit on/off.
$000B$0001Sound control.
$000C$0001Transpose off.
$000D$00F3Definicja obwiedni.

Blok inicjalizacyjny playera

offsetdługośćopis
$0000$0003JMP $7050 - inicjalizacja playera ($4C $50 $70)
$0003$0003JMP $70C4 - procedura wywoływana na VBLK ($4C $C4 $70)
$0006$0003JMP $75A4 - procedura odtwarzająca sample ($4C $A4 $75)
$0009$0001STOP - flaga zatrzymania procedury odtwarzania sampli
$000A$0004AUDCTL dla songów (opcja "15kHz" z menu "Songs")
$000E$0004Znaczniki użycia sampli dla songów (opcja "Digis" z menu "Songs")
$0012$0001Tempo
$0013$0004AUDC dla songów (wartości chwilowe do odczytu podczas działania playera)
$0017$0001Pozycja w songu dla kanałów syntetycznych (wartość chwilowa)
$0018$0001Pozycja w songu dla kanału sampli (wartość chwilowa)
$0019$0020Adresy początków sampli (LSB-MSB)
$0039$0020Adresy końców sampli (LSB-MSB)
$0059$0001TAY - pierwszy opkod procedury inicjalizującej player ($A8)

Blok inicjalizacyjny playera jest po prostu zrzutem fragmentu pamięci i w zasadzie istotne dla poprawnego odtwarzania są jedynie pozycje wytłuszczone.

Tablice adresów sampli duplikują częściowo zawartość pliku DRP.

Uwagi

  • Jeśli moduł używa sampli, wtedy stanowi on parę z plikiem zestawu sampli DRP.
  • Muzyka odtwarzana jest co ramkę, lecz należy mieć na uwadze, że tylko sekwencje samplowe odtwarzane są z zadanym tempem - sekwencje syntetyczne odtwarzane są co dwie ramki (!) tak więc faktyczne tempo ma dwukrotnie większą wartość.
  • Program lokuje dane modułu począwszy od adresu $2DF7, player zaś znajduje się zawsze w $6FF7.