Zagadka dla matematyka
Znam pewien utwór zapisany w formacie AYM. Zawiera kompletny kod, więc to nie jest YM (zrzut rejestrów). AY też nie, gdyż AYSplittr nie otwiera go, nagłówek ma całkiem inną strukturę. Próbuję znaleźć specyfikację formatu, aby znaleźć adres ładowania kodu i uruchomienia. Wyszukiwarki nie znajdują nic sensownego.
Pierwszy załącznik (png) to podgląd w hex edytorze. Od adresu +30hex (+48dec) zawarte są prawdopodobnie dane ładowania i startu. Analiza adresów JP i CALL z kodu wykazuje, że ładowany jest pod adres około 13000 (to muzyka z Amstrada).
W nagłówku podobne wartości występują i są dwie możliwości - zapisane w big lub lil endian.
AYM header
big end lil end
f133 = 13297 3300 = 13056
823d = 15746 3df1 = 15857
Sam kod zaczyna się od +44h (+68d) od LD BC, 13116
Teraz podgląd pliku w debuggerze. Żadna z liczb z nagłówka nie występuje w kodzie, ale inne są blisko.
Adres bazowy to +0. Zadaniem jest znalezienie go.
+0
ld bc, 13116
+20
ld ix, 13197
+86
ld hl, 15611
+186
call 14825
+196
ld a,0 (song number?)
ld (13385),a
ld hl, 13296
dec (hl)
+208
ld ix, 13197 (song data for channels?)
call 13776
ld ix, 13230
call 13776
ld ix, 13263
call 13776
+340
ld b, 244 ;cpc ports
out (c),d
ld bc, 62976
out (c),c
ld a, 192
out (c),a
out (c),c
ld b, 244
out (c),e
ld b, 246
add a,a
out (c),a
out (c),c
+1697
call 13496 (i inne)
+2085
ld a, (15223) (kod lub dane muzyki po długiej przerwie nop)
+2533
ld sp, 13055 (sugeruje adres, ale to dane)
defb 253
ld sp, 13025
rst 56
+2642
jp 13116
W drugim załączniku jest pełny kod zgrany od adresu bazowego (bez nagłówka)
W trzecim plik .aym, który gra dobrze w AYEmulator i tylko w nim, co znaczy że błędów nie ma. Inne playery nie rozpoznają tego formatu.