Wielki finał "zXEmulator-a" by Kaz 2007-12-08 03:39:26

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ć"...



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: 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!".
miker 2007-12-08 10:00:52

No brawo! Jeszcze nie testowałem wprawdzie, ale zrobię to niebawem.

No, właściwie emulator innej maszynki to już powstał, Pirx jakieś 1,5 roku temu stworzył "Chip 8 & Superchip 8 Emulator", ale ww. sprzęt był taką namiastką komputera. Tutaj jednak mamy do czynienia z próbą emulacji sprzętu nie dość, że o niebo bardziej znanego, to jeszcze szybszego na wolniejszym.

Gratulacje raz jeszcze! :)

Kaz 2007-12-08 12:48:15

A wlasnie! Dzieki Miker za info.

sikor 2007-12-08 16:22:11

Brawo, Panowie!!!
Tak, mamy już 2 oficjalne emulatory na nasz komputerek (wliczając ten Pirxa). Proponuję potestować chodzące sna i zapodać listę. I jeszcze jedno: Xxl chociaż zrobił swój emulator (lepszy czy gorszy, ale jest), a na dzień dzisiejszy Drac030 tylko brał udział w dyskusji, choć się tak odgrażał. A ja od razy mówiłem, że lepiej połączyć siły...
Czekamy na nową wersję ;)

xxl 2007-12-08 16:36:25

jest jeszcze sidPlay - jak by nie bylo emulator SIDa

pajero 2007-12-09 01:33:14

W Death Chase grałem na Spectrumnie !
Tu nawet jest ciekawiej - gra się bez stresowo ;)
A dla maruderów polecam Awin800 i klawisz F7 - i jest speed real 4Mhz Z80.
XXL - brafo i liczę na kontynuacje !

pajero 2007-12-09 01:41:15

Przypominam, najczęściej sterowanie w ZX odbywało się klawiszami 1,2,3 do 0

Dan 2007-12-13 22:07:20

Naprawdę lubię takie nowości.......

Tdc 2007-12-20 10:16:07

Super !:)
Mi się najbardziej podobają kolory !:) To takie zatarowienie spektruma !:):)

Kaz 2007-12-20 16:59:44

Proponowalem xxl-owi, zeby emulator przy uruchomieniu mial mozliwosc ustawienia dowolnych wartosci kolorow, co pozwalaloby dobrac kolory mniej wiecej odpowiadajace oryginalowi emulowanego programu. Albo odczytywanie tych wartosci z jakiegos kilkubajtowego pliku inicjacyjnego. Nie jest to trudne do zrobienia, a jeszcze zblizylo by emulacje do pierwowzoru.

czarny_faraon 2008-01-09 08:50:02

Sprawdzałem pod emulatorem grę cookie i działa, ale brak możliwości sterowania postacią uniemożliwia grę. Ponadto pojawiają się w grze błędy, między innymi: przed właściwą grą "kucharz" goni "przeszkadzajkę", tak jest na oryginalnym zxspectrum natomiast na emulatorze dzieje się rzecz dziwna w polowie ekranu "przeszkadzajka" zwalnia, "kucharz" ją wyprzedza i to on jest goniony. Ponadto ta sama przeszkadzajka pojawia się z lewej strony ekranu podczas gry i biegnie dalej poza pole gry, ale w miejscu pojawienia nadal pozostaje jej postać.
Ponadto grać się w tą grę tak naprawdę nieda ponieważ brak atrybutów kolorów ją bardzo utrudnia a tak naprawdę uniemożliwia.
A ponadto wszystko ta wersja emulatora jest jeszcze stosunkowo wolna, może dopiero ta zmakrami przyniesie oczekiwany wzrost wydajności pzrynajmniej taki jak wersja 1.02 (niewiem czy dobrze zapamiętałem wersję, może miała być 1.2), gdzie tło było zmienione na czarne...

Czarny_faraon 2008-01-09 08:52:47

Sory, z tymi atrybutami to nie w tej grze, tamtej tytuł uciekł mi z pamięci, a poza tym to wszystko pozostałe w porządku. Apropo tego sterowania to problemy powtarzająsię i w innych grach.

xxl 2008-01-11 21:46:40

zgadza sie, sa tez inne niedogodnosci ;-) ale to co mowisz zwiazane jest z przerwaniami. wielokrotnie o tym mowilem w innym watku jakies pol roku temu. w tym emulu przerwania sa ustawione 'pod jetpaca' o ile dobrze pamietam. istnieje mozliwosc zmiany ale jaki jest sens skoro i tak z powodu braku koloru grac sie nie da...