MSC (format pliku)

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 20:52, 25 maj 2015
Mono (Dyskusja | wkład)
(Blok inicjalizacyjny playera)
← Previous diff
Aktualna wersja
Mono (Dyskusja | wkład)
(Instrumenty - dlugosc obwiedni)
Linia 7: Linia 7:
Plik jest skompresowany za pomocą wariantu prostej kompresji RLE. 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:+1. Jeśli bajt odczytany z pliku ma wartość $1B (kod [[ATASCII]] znaku ESC), wtedy kolejne dwa bajty oznaczają kolejno:
* wartość * wartość
Linia 23: Linia 23:
<tr><td>$0D00</td><td>$0680</td><td>Song #3.</td></tr> <tr><td>$0D00</td><td>$0680</td><td>Song #3.</td></tr>
<tr><td>$1380</td><td>$0680</td><td>Song #4.</td></tr> <tr><td>$1380</td><td>$0680</td><td>Song #4.</td></tr>
-<tr><td>$1A00</td><td>$1000</td><td>Dane 128 patternów syntetycznych.</td></tr>+<tr><td>$1A00</td><td>$1000</td><td>Dane 128 sekwencji syntetycznych.</td></tr>
-<tr><td>$2A00</td><td>$0800</td><td>Dane 64 patternów samplowych.</td></tr>+<tr><td>$2A00</td><td>$0800</td><td>Dane 64 sekwencji samplowych.</td></tr>
<tr><td>$3200</td><td>$1000</td><td>Dane 32 instrumentów.</td></tr> <tr><td>$3200</td><td>$1000</td><td>Dane 32 instrumentów.</td></tr>
<tr><td>$4200</td><td>$005A</td><td>Blok inicjalizacyjny playera.</td></tr> <tr><td>$4200</td><td>$005A</td><td>Blok inicjalizacyjny playera.</td></tr>
Linia 58: Linia 58:
-== Patterny syntetyczne ==+== Sekwencje syntetyczne ==
<table border=1> <table border=1>
<tr><td>offset</td><td>długość</td><td>opis</td></tr> <tr><td>offset</td><td>długość</td><td>opis</td></tr>
-<tr><td>$0000</td><td>$0020</td><td>Dane patternu #0.</td></tr>+<tr><td>$0000</td><td>$0020</td><td>Dane sekwencji #0.</td></tr>
-<tr><td>$0020</td><td>$0020</td><td>Dane patternu #1.</td></tr>+<tr><td>$0020</td><td>$0020</td><td>Dane sekwencji #1.</td></tr>
<tr><td>...</td><td>...</td><td>...</td></tr> <tr><td>...</td><td>...</td><td>...</td></tr>
-<tr><td>$0FE0</td><td>$0020</td><td>Dane patternu #127.</td></tr>+<tr><td>$0FE0</td><td>$0020</td><td>Dane sekwencji #127.</td></tr>
</table> </table>
-Każdy pattern składa się z 16 par bajtów:+Każda sekwencja składa się z 16 par bajtów:
* nuta - 0=brak * nuta - 0=brak
Linia 76: Linia 76:
-== Patterny samplowe ==+== Sekwencje samplowe ==
<table border=1> <table border=1>
<tr><td>offset</td><td>długość</td><td>opis</td></tr> <tr><td>offset</td><td>długość</td><td>opis</td></tr>
-<tr><td>$0000</td><td>$0020</td><td>Dane patternu #0.</td></tr>+<tr><td>$0000</td><td>$0020</td><td>Dane sekwencji #0.</td></tr>
-<tr><td>$0020</td><td>$0020</td><td>Dane patternu #1.</td></tr>+<tr><td>$0020</td><td>$0020</td><td>Dane sekwencji #1.</td></tr>
<tr><td>...</td><td>...</td><td>...</td></tr> <tr><td>...</td><td>...</td><td>...</td></tr>
-<tr><td>$07E0</td><td>$0020</td><td>Dane patternu #63.</td></tr>+<tr><td>$07E0</td><td>$0020</td><td>Dane sekwencji #63.</td></tr>
</table> </table>
-Każdy pattern składa się z 32 bajtów oznaczających numery sampli.+Każda sekwencja składa się z 32 bajtów oznaczających numery sampli.
Linia 118: Linia 118:
<tr><td>$000B</td><td>$0001</td><td>Sound control.</td></tr> <tr><td>$000B</td><td>$0001</td><td>Sound control.</td></tr>
<tr><td>$000C</td><td>$0001</td><td>Transpose off.</td></tr> <tr><td>$000C</td><td>$0001</td><td>Transpose off.</td></tr>
-<tr><td>$000D</td><td>$00F3</td><td>Definicja obwiedni.</td></tr>+<tr><td>$000D</td><td>$0073</td><td>Definicja obwiedni.</td></tr>
</table> </table>
Linia 130: Linia 130:
<tr><td>$0003</td><td>$0003</td><td>JMP $70C4 - procedura wywoływana na VBLK ($4C $C4 $70)</td></tr> <tr><td>$0003</td><td>$0003</td><td>JMP $70C4 - procedura wywoływana na VBLK ($4C $C4 $70)</td></tr>
<tr><td>$0006</td><td>$0003</td><td>JMP $75A4 - procedura odtwarzająca sample ($4C $A4 $75)</td></tr> <tr><td>$0006</td><td>$0003</td><td>JMP $75A4 - procedura odtwarzająca sample ($4C $A4 $75)</td></tr>
-<tr><td>$0009</td><td>$0001</td><td>STOP - flaga zatrzymania odtwarzania</td></tr>+<tr><td>$0009</td><td>$0001</td><td>STOP - flaga zatrzymania procedury odtwarzania sampli</td></tr>
<tr><td>$000A</td><td>$0004</td><td><b>AUDCTL dla songów (opcja "15kHz" z menu "Songs")</b></td></tr> <tr><td>$000A</td><td>$0004</td><td><b>AUDCTL dla songów (opcja "15kHz" z menu "Songs")</b></td></tr>
<tr><td>$000E</td><td>$0004</td><td><b>Znaczniki użycia sampli dla songów (opcja "Digis" z menu "Songs")</b></td></tr> <tr><td>$000E</td><td>$0004</td><td><b>Znaczniki użycia sampli dla songów (opcja "Digis" z menu "Songs")</b></td></tr>
Linia 150: Linia 150:
* Jeśli moduł używa sampli, wtedy stanowi on parę z plikiem zestawu sampli [[DRP (format pliku)|DRP]]. * Jeśli moduł używa sampli, wtedy stanowi on parę z plikiem zestawu sampli [[DRP (format pliku)|DRP]].
-* Muzyka odtwarzana jest co ramkę, lecz należy mieć na uwadze, że tylko patterny samplowe odtwarzane są z zadanym tempem - patterny syntetyczne odtwarzane są co dwie ramki (!) tak więc faktyczne tempo ma dwukrotnie większą wartość. +* 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.
[[Kategoria: Formaty plików]] [[Kategoria: Formaty plików]]

Aktualna wersja

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

Spis treści

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$0073Definicja 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.
Personal tools