Temat emulacji jednego komputera przez inny jest fascynujący do
tego stopnia, ze pewnie niejednej osobie przychodziło do głowy, aby
napisać jakiś emulator. Wiemy z doświadczenia, ze istnieją
dziesiątki emulatorów różnych sprzętów, w tym komputerów i
procesorów. O ile przywykliśmy, ze emulowanie starych, 8-bitowych,
a nawet 16-bitowych maszynek z lat 80-tych i 90-tych jest normalne,
to każdy zdaje sobie sprawę, ze dzieje się to na współczesnych
pecetach, które porażając swoja mocą obliczeniowa w stosunku do
emulowanych maszynek, setki tysięcy razy przewyższającą komputery
domowe, z którymi mieliśmy do czynienia dwadzieścia lat temu.
Co innego jednak emulowanie słabszego i wolniejszego sprzętu na
szybszym i nowocześniejszym, a co innego "udawanie" starych
maszynek na starych maszynkach podobnej klasy. Jak słusznie
zauważył największy szperacz ciekawostek atarowskich
Artur
"Jurgi" Jurgawka, znany programista z Avalonu
Jaroslaw
Syrylak w numerze 1 z 1992 roku "Tajemnic Atari" napisał o
dwóch takich namiastkach emulacji:
"Jak widać z powyższego
BugHunter jest debuggerem, który pracuje nie na procesorze 6502,
ale na pewnym jego emulatorze, uruchomionym pod kontrolą właśnie
tego procesora. Emulator można zresztą dopasowywać do potrzeb
użytkownika, wprowadzając dodatkowe pułapki, tzw. turbo, czy też
regulować jego prędkość. Ze wszystkim tym kojarzy mi się jeszcze
jeden emulator na ATARI XL. Jeden z bardzo znanych obecnie
programistów, autor licznych gier i programów użytkowych pokazywał
mi kilka lat temu jeden ze swoich pierwszych programów dla małego
ATARI. W tekście programu ze zdumieniem zauważyłem procedury,
służące do emulacji rozkazów procesora Z-80. Dopiero po jakimś
czasie domyśliłem się powodu, dla którego zostały tam umieszczone.
Po prostu, autor programu wcześniej pisywał na Spectrum. Jak widać,
każdemu zdarza się "emulować"...
.png)
.png)
Wiadomo, ze prób emulacji było więcej, nie tylko na Atari. Na
Commodore pojawił się emulator Basica z ZX Spectrum, pojawiły się
tez pogłoski o istnieniu emulatora ZX Spectrum na Amstrada,
słyszałem też o emulatorze ZX81 na ZX Spectrum. Jak dotąd jednak, o
czym już wspominałem, na żaden komputer 8-bitowy nie pojawił się
kompletny, programowy emulator innego komputera 8-bitowego z
odmiennym procesorem. Aż do teraz. Żadne tam Commodore z
prymitywnym emulatorem języka Sinclair Basic ani nawet Amstrad,
chyba najlepsza maszynka 8-bitowa, o kilka lat młodszą niż Atari,
nam nie podskoczy :) Przyjemnie mi zaanonsować oficjalną publikację
programu, który stworzył
Krzysztof "xxl" Dudek we współpracy
z
Tomaszem "TeBe" Bielą pod nazwa
zXEmulator. Program
emuluje przede wszystkim procesor Z80, ale pozwala tez uruchamiać
niektóre programy dla ZX Spectrum 16K. Emulator został, na moja
prośbę, przygotowany w formie loadera, który wczytuje zwykle pliki
Spectrum i odpala je, działając z prędkością od kilku do
kilkudziesięciu procent szybkości oryginału. To wszystko na
"gołym", całkowicie standardowym Atari, bez żadnych rozszerzeń,
dopałek czy dodatkowych kart. Czyż nie cudowne? Nie ma 100%
emulacji, w tym dźwięku i kolorów, ale to raczej kwestia czasu,
którego nie chce poświęcać projektowi główny autor programu. Może
kiedyś to się zmieni, na razie cieszmy się tym co dostajemy.
Kiedy w połowie marca tego roku
ogłaszałem wszem i wobec, ze intelektualna i owocna "pyskówka"
w temacie pisania emulatora ZX Spectrum, jaka
urządzili
sobie na forum Atari Age
Krzysztof "xxl" Dudek i
Konrad
"Draco" Kokoszkiewicz przybrała formy bardziej konkretne, nie
spodziewałem się, ze sprawa zmierza w inna stronę, niż wszyscy
oczekiwali. Krzysztof w ekspresowym tempie, korzystając z
podpowiedzi
pr0be,
laoo i
TeBe zaczął
usprawniać swój program emulujący procesor Z80, dodając do niego
elementy, które pozwoliły
uruchamiać kolejne gry z ZX Spectrum i prawie wszyscy
spodziewali się, że kwestią chwili jest zasypanie miłośników
Atari setkami gier ze Spectrumny. Nic bardziej mylnego, sprawy
poszły w zupełnie innym kierunku. Krzysztof rzucił się w wir prac
nad kolejnym wyzwaniem,
konwersją gry ze Spectrum pod nazwą
”Jetpac” i ostatecznie wysmażył nam „Jetboy-a”, o którym
jeszcze napisze, choć to dziecko, do którego się na razie nie
przyznaję :)
Mimo moich nalegań, projekt
zXEmulatora stanął w miejscu, a
autor zaczął zwlekać z jego rozwojem i upublicznieniem. Krzysztof,
pochłonięty pracami najpierw nad "Jetboy-em", potem porzuconym na
razie projektem konwersji "Ghosts and Goblins" oraz niedawno
ukończonym "Jet Set Willy", nie miał po prostu czasu na rozwój
projektu. Ale nie ma tego złego co by na dobre nie wyszło. Po kilku
denerwujących uwagach osób nie zaznajomionych z tematem, że
emulator wcale nie istnieje, a gry są po prostu
przepisane/przeportowane na Atari, Krzysztof uległ moim naciskom i
postanowił pochwalić się światu swoim programem. I oczywiście na
atarionline.pl.
Jak sam autor skromnie stwierdza, właściwie nie ma się czym się
chwalić, bo emulator jest dziełem amatora i to początkującego w
programowaniu 6502. Ja uważam jednak inaczej - jest się czym
chwalić, tym bardziej, jeżeli nie jest się doświadczonym
programista, a udało się zrobić cos, czego inni nie zrobili. Ale
przejdźmy do rzeczy czyli technikaliów.
Emulator Z80 nie jest skończonym, pełnym programem, ponieważ na
razie nie było takiej potrzeby. Zostały zdefiniowane najczęściej
używane rozkazy, wszystkie specyficzne. Pozostałe można zdefiniować
w razie potrzeby, przez analogie do już istniejących. Dodanie
kolejnego rozkazu to przekopiowanie definicji istniejącego i zmiana
jednego rejestru. W rejestrze statusu obsługujemy tylko bit
S-znaku, Z-zero, C-przeniesienie (reszta bitów jest używana
sporadycznie). Zaimplementowana została obsługa interefejsu
Kempston, natomiast klawiatura tylko częściowo, zaś dźwięk i kolory
w ogóle. Przerwania są obsługiwane tylko w takim zakresie, jak to
jest potrzebne do gier, podobnież jak fragmenty ROM Spectrusia.
Krzysztof nie zdecydował się w tej odsłonie emulatora na dodanie
makr, które ogromnie zwiększają prędkość emulacji. Pamięć dla
emulowanego programu to obszar $4000-$BFFF, co oznacza, że można
uruchomić tylko takie programy ZX Spectrum, których licznik,
podczas zatrzymania na emulatorze tego komputerka na pececie, był w
zakresach $4000-$7FFF. Najprościej rzecz ujmując, będą działać
tylko programy dla ZX Spectrum 16K. Po przeróbce można ten zakres
rozszerzyć, ale jak na razie Krzysztof nie udostępnił takiej
opcji.
Na
dysku znajduje się loader (plik o nazwie ZXE.COM), napisany
przez nieocenionego (i niedocenianego) kąśliwca
Tomasza “TeBe”
Bielę, a także krótkie info o autorach (plik ZXE.TXT) i
rysuneczek powitalny mojego autorstwa (ZXEPIC.COM). Warto tu
wspomnieć, iż Tomek miał spory wkład w ostatniej fazie prac - nie
tylko napisał loader na prośbę moja i Krzysztofa, ale doprowadził
źródła emulatora do czytelności. Po uruchomieniu wspomnianego
loadera należy wybrać jedną z trzech opcji:
- przeglądanie katalogu dyskietki po naciśnięciu klawisza D
- ładowanie programu SNA do uruchomienia, po naciśnięciu klawisza
L (należy podać pełną nazwę pliku, łącznie z nazwa napędu, np.
D:CIRCLE2.SNA)
- wyjście z programu przez naciśnięcie E.
Na dyskietce znajdują się też programy dla ZX Spectrum, które można
uruchomić pod emulatorem albo na Spectrumnie. Pierwszy to gra
“Death Chase”, znana już nam wcześniej, a drugi to proste i krótkie
demko pod nazwa “Circle2”. Niedowiarkom, którzy wciąż sadzą, że to
specjalnie przygotowane do wykonania programy Atari, pozostaje
ściągnięcie tych plików z sieci, uruchomienie ich na pecetowym
emulatorze ZX Spectrum, zapisanie jako plik w formacie SNA i potem
uruchomienie na
zXEmulatorze.
Jak Krzysztof przyznaje, emulator nie jest skończony, aby „narobić
smaka” zainteresowanym. Nie zostały dołożone makra, ale jeżeli
będzie zapotrzebowanie to zostaną dodane. Jeśli naprawdę będzie
odpowiednie zainteresowanie to Krzysztof zapowiada uruchomienie
ROM-u ZX Spectrum i powstanie emulator ZX Spectrum 16K z Basicem
(przypominam, że obecnie jest to głównie emulator procesora Z80).
Krzysztof uważa ponadto, że dobrze by było rozpocząć dyskusje na
temat tegoż ROM-u. Można bowiem tak zmodyfikować
zXEmulator,
że ROM Spectruma będzie się ładował w adresy od $8000. Wtedy zaczną
działać np. gry tekstowe oraz Basic, ale emulator odrobinę zwolni.
W obecnej wersji, gdy jest zamapowany poniżej $4000, nie zwalnia,
ale działa tylko ta część ROM-u, która potrzebna jest do gier
(strona zerowa i stos sprzętowy 6502 zasłaniają ROM ZX
Spectrum).
Brawa dla xxl-a! Został wykonany kolejny krok w propagowaniu
niepodważalnej od 1979 roku zasady "Atari Rules!".