Myślę, że to już najwyższy czas.
Zacznijmy od emulatora ZX Spectrum.
Etap 1. Komunikacja
między systemem ZX (Basic, TR-DOS i inne),
a emulatorem. Do jednego z nieużywanych portów
IN/OUT podłączone jest przesyłanie danych pomiędzy emulowanym systemem, a samym emulatorem.
To pozwala nam:
+ załadować inny plik taśmy czy dysku,
przesyłając z ZX do emulatora nazwę pliku i komendę ładowania. Czyli w tej kolejności: OUT port,string : LOAD "string". System ZX czeka na plik. Plik do otwarcia znajduje się w tym samym folderze Windows lub innego systemu.
+ załadować
plik binarny, tekstowy czy jakikolwiek w ten sam sposób, poprzez wysłanie jego nazwy i odpowiedniej komendy ładowania. Uruchomienie w systemie ZX ładowania np. LOAD "nazwa" CODE adres.
+ załadować (jeśli się zmieści)
plik konfiguracyjny emulatora, zmodyfikować go w systemie ZX i zapisać z poziomu emulatora (nadpisać lub zapisać jako nowy plik).
Żeby nie było improwizacji,
port musi być ten sam we wszystkich emu i
nie używany do innych celów.
Proponuję 77, łatwy do zapamiętania przez człowieka, a w hex jest to 4D, zawiera literę i nie pomyli się z liczbą w dec.
Etap 2.
Integracja z głównym systemem. Z poziomu systemu ZX odczytujemy ścieżkę, w której zainstalowany jest emulator i gdzie znajduje się uruchomiony plik.
To pozwala
przeglądać dyski, foldery i pliki w systemie ZX, zmieniać lokalizację plików do ładowania i zapisu.
Etap 3.
Integracja z innymi emulatorami.
W jedną stronę.
Załóżmy, ze muzyk skomponował album, w którym jeden utwór zrobiony jest na C64 czy Atari i złożył z tego obraz dysku.
ZX gra dwa utwory, po czym informuje na ekranie, że trzeci utwór zrobiony jest na C64 i
musi przejść do trybu emulacji C64.
Jeśli emulator obsługuje oba systemy, problem z głowy.
Jeśli nie, to:
Najpierw emulator ZX musi znać
ścieżkę instalacji drugiego emulatora. Jeśli emulator ją zna, to system
ZX też odczyta przez port. ZX wyświetla tekst "czekam na klawisz".
Emulator może odczytać ścieżkę z głównego systemu, ale to nie rozwiązuje sprawy.
Emulator, zarówno ZX jak i drugiego komputera
wcale nie musi być zainstalowany w głównym systemie.
Może znajdować się w dowolnym folderze, a poza tym tych samych emulatorów, tego samego komputera możemy mieć kilkanaście, skonfigurowanych dla różnych potrzeb.
Pliki programów (np. obrazy dysków) dla drugiego komputera również mogą być w dowolnym miejscu, całkiem innym niż emulator tego komputera.
Tutaj chyba pozostaje umieszczenie pliku z linkami w folderze emulatora ZX.
W ten sposób po naciśnięciu klawisza:
+ w systemie ZX, do emulatora przesyłana jest
nazwa pliku do załadowania w drugim emulatorze (bez ścieżki).
+ ekran emulatora jest minimalizowany, lub estetyczniej, zaciemniany, aby w momencie przełączania nie był widoczny np. pulpit Windows.
+ emulator do wysłanej z systemu ZX nazwy pliku dodaje ścieżki i wywołuje (przykładowo):
Dysk:\folder\emulatorC64.exe Dysk:\folder\program.d64 -fullscreen
Parametr -fullscreen także możemy przesłać w programie z systemu ZX do emulatora ZX
Emulator ZX otrzymuje informację o zamknięciu emulatora C64 i kontynuuje program.Do wielu zastosowań
absolutne ścieżki nie wchodzą w grę. Choćby kiedy mamy taki zestaw:
Włączona
gra na PC, z jej menu wybieramy sub-grę, która ma uruchomić się w emulatorze ZX na pełnym ekranie. Gra dla PC potrafi poruszać się w systemie plików w górę i w dół, czyli
relatywne ścieżki.
W podfolderze Subgames tej gry mamy
emulator ZX i gry, które chcemy uruchomić.
Z menu gry wywoływana jest instrukcja, która uruchomi emulator z grą umieszczony w polfolderze gry dla PC.
Subgames\EmuZX\emuzx.exe subgame1.tap
Najłatwiej zrobić to pisząc plik .bat z tą ścieżką umieszczony w głównym folderze gry dla PC, a z jej menu uruchamiamy tylko "subgame1.bat"
Wynika z tego, że emulatory także muszą obsługiwać relatywne ścieżki, a przynajmniej rozumieć, że ładowanie
bez podania ścieżki do gry równa się folder emulatora.
Tutaj mamy wyjaśnienie,
dlaczego zacząłem od ZX.
Dodam, że
lokalizacja gry dla PC jest też dowolna, więc nie możemy używać ścieżki instalacji jako bazy.
Pierwsze z brzegu emulatory:
C64 - Vice, Atari XE - Altirra, Atari 2600 - z26.
Wywołany z pliku .bat
każdy z nich otwiera się na pełnym ekranie i ładuje grę. Wychodzi się przez Alt+F4 lub Esc.
Emulatory ZX Spectrum:
Spin - nie potrafi otworzyć pliku znajdującego się
we własnym folderze. Niby ma instrukcję SPINDIR, ale ona nie działa. Ponadto jest konflikt trybów wyświetlania
ZesarUX - otwiera emu i grę, ale można mieć tylko
jedną instalację na całym komputerze, dlatego że plik konfiguracyjny zapisany w C:\Users !!! Poza tym, bardzo skomplikowana obsługa. Chyba tylko sam autor rozumie jego obsługę.
ACSD - otwiera emu i grę, ale
nie na pełnym ekranieEmuZWin - podobne problemy
Fuse - nie testowany
Unreal - który??? jak go skonfigurować jedną instrukcją typu "ZX128 mode".
Dla osłody dodam, że
WinApe, emulator CPC też nie potrafi otworzyć pliku znajdującego się w swoim folderze, jeśli nie ma podanej absolutnej ścieżki.
Innych emu CPC nie testowałem,
ZesarUX ma tryb emulacji CPC i potrafiłby to zrobić, gdyby zapisywał config lokalnie, a tymczasem po przestawieniu z ZX na CPC,
wszystkie instalacje ZesarUX będą uruchamiać się w trybie CPC.
Tymczasem... ja piszę o
komunikacji między emulatorami i systemem, a wystarczy jeden
emulator ZX i próba jego skonfigurowania.
Kolejna przegrana walka przy próbie uruchomienia gry w najnowszej odsłonie ZesarUX bez używania absolutnych ścieżek i bez wyświetlania menu i innych tekstów podczas startu.
Myślę, że do tego celu najlepszy będzie dobry, powtarzam dobry, emulator sprzed 10-15 lat, który
z pliku .bat uruchomi się w trybie
128k bez głupiego menu, uruchomi
na pełnym ekranie grę znajdującą się w tym samym folderze i pozwoli
wyjść przez Alt+F4Czy taki istnieje?
Obrazek przedstawia marzenia. Niestety wszystkie gry dla ZX muszę usunąć i zastąpić innymi.
Video do starszej wersji ukazuje, jak
z poziomu gry na PC można pograć sobię w klasyczną grę na
C64 czy Atarihttps://www.youtube.com/watch?v=4ir3rkxAye8