Let's Emu!
From Atariki
Wersja z dnia 19:49, 29 cze 2015 KMK (Dyskusja | wkład) (→Zobacz też) ← Previous diff |
Wersja z dnia 19:57, 29 cze 2015 KMK (Dyskusja | wkład) (→Kompatybilność) Next diff → |
||
Linia 26: | Linia 26: | ||
== Kompatybilność == | == Kompatybilność == | ||
- | Program emuluje podstawowy model ZX Spectrum, tj. ZX Spectrum 48k. Procesor [https://pl.wikipedia.org/wiki/Zilog_Z80 Z80] i w ogóle cała maszyna emulowana jest dość wiernie, za wyjątkiem dwóch rzeczy: | + | Program emuluje podstawowy model ZX Spectrum, tj. ZX Spectrum 48k. Procesor [https://pl.wikipedia.org/wiki/Zilog_Z80 Z80] i w ogóle cała maszyna emulowana jest dość wiernie (na tyle, że bez zakłóceń działa Sinclair BASIC), za wyjątkiem dwóch rzeczy: |
* nie jest dokładnie emulowany rejestr R procesora | * nie jest dokładnie emulowany rejestr R procesora | ||
* czas wykonywania poszczególnych rozkazów emulowanego Z80 ma niewiele wspólnego z tymże czasem na "prawdziwym" CPU: emulator wykonuje rozkazy tak szybko, jak potrafi, ale nie zachowuje np. ich wzajemnych zależności czasowych | * czas wykonywania poszczególnych rozkazów emulowanego Z80 ma niewiele wspólnego z tymże czasem na "prawdziwym" CPU: emulator wykonuje rozkazy tak szybko, jak potrafi, ale nie zachowuje np. ich wzajemnych zależności czasowych | ||
- | To ostatnie powoduje słyszalne kłopoty w przypadku np. gier odtwarzających muzykę na beeperze, w której długości i częstotliwości nut mierzone są przez pętle opóźniające. | + | To ostatnie powoduje słyszalne kłopoty w przypadku np. gier odtwarzających muzykę na beeperze, w której długości i częstotliwości nut mierzone są przez pętle opóźniające. Z tego samego powodu trudno jest dokładnie ocenić wydajność emulacji Z80, bo emulator różne zestawy rozkazów może wykonywać z różną szybkością - ale średnio wychodzi ok. 100% oryginału przy 65C816 taktowanym na 20 MHz. |
+ | |||
+ | Pod emulatorem bardzo szybkie są rozkazy przesłań blokowych Z80 (np. LDIR), bo program używa rozkazów przesłań blokowych 65C816 (MVN i MVP), które przy zegarze 20 MHz są ok. 10x szybsze niż ich odpowiedniki z Z80. Z tego powodu istnieje przynajmniej jeden program, który pod emulatorem działa zupełnie dobrze już przy 7 MHz, a przy wyższych częstotliwościach zegara jest po prostu za szybki - jest to gra ''Jet Set Willy''. | ||
== Obsługiwane formaty plików == | == Obsługiwane formaty plików == |
Wersja z dnia 19:57, 29 cze 2015
Eksperymentalny emulator komputera Sinclair ZX Spectrum dla Atari wyposażonego w procesor 65C816. Autorem jest KMK.
Spis treści |
Wymagania sprzętowe
- procesor 65C816
- dodatkowa pamięć liniowa o rozmiarze co najmniej 448k
- DracOS (ze względu na funkcje zarządzania pamięcią liniową)
Joysticki Atari działają jako joysticki Kempston lub Sinclair. Wybór pomiędzy jednym a drugim systemem jest automatyczny, tj. pierwsze odwołanie do portu I/O joysticka Kempston wyłącza emulację joysticków Sinclair.
Zalecana konfiguracja sprzętowa
- procesor 65C816 taktowany co najmniej 7 MHz (optymalnie - 20 MHz)
- karta Rapidus
- VBXE
- Evie lub SONari
- SpartaDOS X
Program został napisany dla karty Rapidus, ale nie jest ona niezbędnie konieczna do jego działania: Let's Emu! można np. uruchomić pod emulatorem Altirra (niemniej po wykryciu karty Rapidus wykorzystywane są jej niektóre specyficzne możliwości).
Bez VBXE brak jest atrybutów koloru ZX Spectrum. Układ PSG znajdujący się w Evie lub SONari jest pod emulatorem widoczny jako przystawka z układem AY-3-8910.
SpartaDOS X pozwala zarejestrować program jako "przeglądarkę" do plików (tzw. snapszotów) zawierających programy na ZX Spectrum.
Kompatybilność
Program emuluje podstawowy model ZX Spectrum, tj. ZX Spectrum 48k. Procesor Z80 i w ogóle cała maszyna emulowana jest dość wiernie (na tyle, że bez zakłóceń działa Sinclair BASIC), za wyjątkiem dwóch rzeczy:
- nie jest dokładnie emulowany rejestr R procesora
- czas wykonywania poszczególnych rozkazów emulowanego Z80 ma niewiele wspólnego z tymże czasem na "prawdziwym" CPU: emulator wykonuje rozkazy tak szybko, jak potrafi, ale nie zachowuje np. ich wzajemnych zależności czasowych
To ostatnie powoduje słyszalne kłopoty w przypadku np. gier odtwarzających muzykę na beeperze, w której długości i częstotliwości nut mierzone są przez pętle opóźniające. Z tego samego powodu trudno jest dokładnie ocenić wydajność emulacji Z80, bo emulator różne zestawy rozkazów może wykonywać z różną szybkością - ale średnio wychodzi ok. 100% oryginału przy 65C816 taktowanym na 20 MHz.
Pod emulatorem bardzo szybkie są rozkazy przesłań blokowych Z80 (np. LDIR), bo program używa rozkazów przesłań blokowych 65C816 (MVN i MVP), które przy zegarze 20 MHz są ok. 10x szybsze niż ich odpowiedniki z Z80. Z tego powodu istnieje przynajmniej jeden program, który pod emulatorem działa zupełnie dobrze już przy 7 MHz, a przy wyższych częstotliwościach zegara jest po prostu za szybki - jest to gra Jet Set Willy.
Obsługiwane formaty plików
Emulator umie załadować programy w następujących formatach:
- plik ROM: "kartridż" o wielkości 16k zastępujący oryginalny ROM ZX Spectrum
- plik SNA: nieskompresowany zrzut 48k pamięci
- plik Z80: skompresowany zrzut 48k pamięci (obsługiwane są wersje formatu v1, v2 i v3)
Bieżącą zawartość pamięci emulatora można też zapisać do pliku w formacie Z80 (v2).
Klawiszologia
Program obsługiwany jest z menu widocznego na obrazku. Poza tym do dyspozycji są klawisze konsoli:
- START przerywa emulację i powoduje powrót do menu (lub do DOS-u, jeśli program uruchomiono w trybie "automatycznym", tzn. z parametrem /A w wierszu poleceń)
- SELECT odpowiada klawiszowi Symbol Shift na klawiaturze ZX Spectrum
- OPTION powoduje odwrócenie kolorów INK i PAPER (tylko wtedy, kiedy VBXE jest nieaktywne)
- HELP wyświetla ściągę z układem klawiatury ZX Spectrum
Ciekawostki
Program napisano na Atari, początkowo z kartą F7 (10 MHz), potem z rozszerzeniem SIMMius 4 MB (1,77 MHz), na końcu z kartą Rapidus (początkowo 16, potem 20 MHz). Wykorzystano MAE jako edytor, a kod źródłowy został zasemblowany (nieopublikowanym) asemblerem N16 autorstwa KMK. Cały proces kompilacji Let's Emu! wymaga też SpartaDOS X w wersji co najmniej 4.47.
Przykładowe gry
Snapszoty zrzucono z emulatora Altirra.
Zobacz też
Odnośniki zewnętrzne
- Film prezentujący działanie emulatora
- Let's Emu! gra (na Evie) utwór z inwitra na Wapniaka 2012 (skomponowany przez Yerzmyeya na PSG).