Po rozpracowaniu w jakichś 70% kodu zapisu muzyki w Softsynth jestem coraz bardziej pełen podziwu dla autora/autorów. W każdym razie mam już wstępną wersję listera na PC - autor tego softu zadbał, żeby najczęściej używane polecenie w stylu 1,C1 było zapisane jsk najoszczędniej. 5 bajtów na nutkę, z czego 2 bajty numeru linii, 1 bajt offsetu do następnego polecenia, skombinowanego z numerem kanału i zapalonym siódmym bitem (ten zapalony bit robi za kod tego polecenia, pozostałe mają kod na 4 bajcie plus 15 bit numeru linii), dwa pozostałe bajty to częstotliwość, pomnożona przez jakąś dziwaczną stałą, (65/11 - nie wiem skąd taka dziwna liczba) w każdym razie dźwięk A (440 Hz) =$0A28 = 2600 dec
A moduły zabezpieczone przed listowaniem mają najzwyczajniej w świecie wyzerowane wszystkie numery linii.
Początek kodu zaczyna się zawsze $168 bajtów od początku pliku. Wcześniej jest nagłówek i nazwy plików sampli/adsr użytych w module.
Rekord zapisu ma strukturę następującą (bajty liczę od 1):
bajt 1,2 (15 bitów) - numer linii (LO, HI); bit 7 bajtu HI jest bitem 9 kodu instrukcji
bajt 3:
- bit 7 - ustawiony na 1 oznacza 2-argumentową uproszczoną instrukcję grania tonu (kanał, ton)
- bity 6,5 - numer kanału dla niektórych instrukcji
- bity 0..4 - długośc rekordu w bajtach.
Dla polecenia "print" długością rekordu są bity 0..6
bajt 4: 8 młodszych bitów kodu instrukcji; jeśli bit 7 bajtu 3 =1 to bajt 4 i 5=częstotliwość*65/11
kolejne bajty, do końca rekordu: argumenty instrukcji.
Plik kończy się sekwencją $00,$80,$20,$20,$20
Zdekodowane jak dotąd polecenia (kody dec):
125 - pełne polecenie grania w składni kanał, ton,fala,obwiednia,głośność, czas, opóźnienie
257 - print ('?')
265 - speed
260..263 set 1..set 4
273 tron
274 troff
275 track
291 wait
Reszta kodów to już tylko kwestia czasu.. trzeba zacząć robić maszynę grającą na PC i sprawdzić, czy nie da się wyciągnąc tego samego kodu z plików .sap
--------------
EDIT: Kod źródłowy plików SoftSyntha daje się wyciągnąć z SAPa. Dają się też z niego wyciągnąć wszystkie użyte w module .s i .h. Właśnie wydusiłem "Wodospadem czasu" (nie miałem tego źródła) oraz brakujący w moich zasobach "beben.s", wrzuciłęm z pomocą windows commandera do obrazu dyskietki .atr, uruchomiłem pod emulatorem softsyntha - plik wczytuje się i gra.