To mi wystarczyło: konkretnie 3 rzeczy:
1. Emulator Fuse (pozwala zapisać pliki w formacie .tap),
2. Tapir do łączenia i podmieniania plików,
3. Niezastąpiona, rzadko używana na realnym sprzęcie instrukcja MERGE.
Jaki był cel?
Przy ładowaniu gier w emulatorach, screen pojawia się zwykle na ułamek sekundy i od razu startuje gra. Zrobiłem więc oczekiwanie na wciśnięcie klawisza, żeby można było obejrzeć screen.
Mało mi było, wiedziałem, że w Cybernoid 2 jest muzyka na AY i na beeper, pomyślałem "dajmy ludziom wybór, czasem chce się posłuchać jak brzmi inne wykonanie". W wielu innych grach, dźwięki dla 128 i 48 są w jednym pliku gry, tutaj jest osobna gra dla 128 i 48, dlatego po wybraniu 48 cały plik z grą ładowany jest od nowa. Sprawdzałem na kilku emulatorach, załadowanie zapewne znacznie rzadziej włączanej versji 48k zajmuje około sekundy, co nie jest problemem (chyba, że ktoś ma jakiś stary emu bez instant ładowania).
Kolejna modyfikacja. Jeśli już istnieje definicja palety dla ULA+, dlaczego by jej nie dołączyć. Paleta kolorów jest z reguły tworzona dla samej gry, na screenie zwykle sie paprze. Dlatego wyboru kolorystyki dokonuje się tutaj po obejrzeniu screenu w standardowych kolorach. Tu właśnie przydało się MERGE, aby połączyć zdefiniowaną w linii 0 paletę aby wywołać ją z poziomu menu loadera przed startem gry (w systemie ZX nie ma "Zaznacz, Kopiuj i Wklej"
) .
Menu nie jest superprodukcją, np. po zmianie palety na ULA+, gdy pojawia się wybór żródła dźwięku, kolorów już nie można zmienić (chyba że wyłączy się support w emu),
dlatego pozostawiam loader jako "otwarty", bez zabezpieczeń czy oszustw w wartościach liczb.
W innych grach można pobawić się w zmianę fontu w menu (Cybernoid 2 używa standardowego z ROMu), czy włączenie muzyki podczas obsługi menu (tutaj też byłoby trochę roboty, bo gra jest ładowana i uruchomiana przez wywołanie kodu dopiero po wybraniu opcji z menu), wolałem zostawić ten plik w całości i w oryginale - nigdy nie wiadomo skąd dokąd w trakcie działania się odwołuje. Można w końcu napisać całe menu w machine code z migającymi paskami i obsługą strzałką, lecz ja postawiłem na prostotę i łatwość modyfikacji loadera (gdyby np. ktoś przerobił grę na mysz czy Turbo Sound, możnaby dodać kolejny plik).
Ok, tyle marudzenia. Teraz mam pytanie.
W dodatkach do emu Fuse (Fuse-utils) znajduje się aplikacja
snap2tzx.exe startująca z linii poleceń (cmd.exe w Windows lub jakiś dobry file manager). Czy ktoś jej używał i czy działa prawidłowo? Powinna zapisać snapshot jako taśmę tzx. Wyodrębnienie plików z pamięci to nie problem, ale co z zachowaniem wartości rejestrów procesora, zwłaszcza PC i SP?
Wypróbuję to przy okazji.