Player Beepola (Special FX) potrzebuje dowolnych danych w ROM, aby odtwarzać perkusję jako przypadkowe bity, czyli szum.
Gdy ROM był pusty w pliku ay, to zamiast szumu z różną prędkością (różne brzmienia perkusji) były tam zera i player grał beepy. Tak jak przy szumie ładowania z kasety słychać kiedy lecą dane, a kiedy zera.
Niepotrzebne jemu natomiast jest ładowanie 243 pod adres 0 (parametr dla skoku JR), te przerwania wyglądają na nieużywane. Może autor miał w zamyśle dodanie czegoś jeszcze.
Na początku wrzucilem cały ROM48 do pliku AY lecz AYMaker odmówił załadowania pod adres 0, więc próbnie załadowałem go pod adres 00001 i zagrał prawidłowo. Wniosek z tego, że player nie korzysta z procedur w ROM, tylko z jej zawartości.
Kolejne próby to zmniejszenie objętości pliku, pierwsze 4000 bajtów załadowane pod adres 16 działa doskonale.
Próbowałem skrócić do 2000 ładując pod różne adresy (np. 16, 1000, 2000) - za każdym razem gdzieś w pliku .ay grał beepy zamiast części bębnów.
Czyli player potrzebuje pierwszych 4kB pamięci wypełnionych przypadkową zawartością, niekoniecznie zawartością ROM. Dodawanie do utworu, który ma niecałe 3kb wraz z playerem, 4kB śmieci to trochę bezsens.
Czy ktoś mógłby napisać kod, który to robi? Proszę o odpowiedź
w tym temacie. To jest fragment kodu playera, który odpowiada za generowanie szumu (perkusji). Rejestr HL jest ustawiony na adres 0, zmiana tej wartości nie da nic, w pliku .ay całe 65536 bajtów to RAM, czyli zera.
PLAY_PERC:
DEFB $21 ; LD HL,nn
PERC_PATT: DEFW $0000 ; Address of the percussion data
LD A,(HL)
INC HL
LD C,(HL)
INC HL
LD (PERC_PATT),HL ; Point PERC_PATT at next datum
AND $7F
CALL JUMP_PERC_ADDR