Let's Emu!

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 12:39, 5 lip 2015
KMK (Dyskusja | wkład)
(Zalecana konfiguracja sprzętowa)
← Previous diff
Wersja z dnia 12:41, 5 lip 2015
KMK (Dyskusja | wkład)
(Kompatybilność - przykłady++)
Next diff →
Linia 57: Linia 57:
</td> </td>
<td>43 sek.</td><td>34 sek.</td></tr> <td>43 sek.</td><td>34 sek.</td></tr>
 +<tr><td>
 +<pre>
 +10 FOR x=1 TO 6
 +20 BEEP 10,0
 +30 NEXT x
 +</pre>
 +</td>
 +<td>60 sek.</td><td>66 sek.</td></tr>
 +
</table> </table>

Wersja z dnia 12:41, 5 lip 2015

Grafika:letsemu.png

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)
  • przynajmniej 512k pamięci liniowej (64+512, czyli razem 576k)
  • karta Rapidus
  • VBXE
  • Evie lub SONari
  • szybki twardy dysk
  • 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 (bez tego niektóre programy - np. gra Trap Door - są bezużyteczne).

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. Natomiast twardy dysk znacznie usprawnia całą zabawę: pliki snapszotów mają po kilkadziesiąt KB, sam plik wykonywalny emulatora też nie ułomek (75 KB), a z twardego dysku na PBI to wszystko ładuje się w kilka sekund.

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 np. 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 na 65C816 pracującym z częstotliwością 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. 17x szybsze niż ich odpowiedniki z Z80/3,5 MHz. 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.

Na nieco szybszy od oryginału wygląda też Sinclair BASIC (aczkolwiek do pomiarów, z braku oryginału, użyto emulatora Fuse):

Program
Fuse
Let's Emu!
(Rapidus, 20 MHz)
10 FOR x=1 TO 1000
20 PRINT AT 10,10;x
30 NEXT x
19 sek.17 sek.
10 FOR x=1 TO 10000
20 NEXT x
43 sek.34 sek.
10 FOR x=1 TO 6
20 BEEP 10,0
30 NEXT x
60 sek.66 sek.

Ogólnie, pomijając skrajności, wydajność emulacji Z80 to około 17-18% oryginału.

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.
  • Konwersja atrybutów koloru robiona jest blitterem VBXE, z tego względu w praktyce nie zajmuje czasu CPU.

Przykładowe gry

Grafika:Letsemu_3weeks1.png Grafika:Letsemu_3weeks2.png Grafika:Letsemu_boulder.png Grafika:Letsemu_crap.png Grafika:Letsemu_cyber1.png Grafika:Letsemu_elite.png Grafika:Letsemu_fairlight1.png Grafika:Letsemu_jsw.png Grafika:Letsemu_knightlore.png Grafika:Letsemu_paperboy.png Grafika:Letsemu_rick.png Grafika:Letsemu_trapdoor.png

Snapszoty zrzucono z emulatora Altirra.

Do ściągnięcia

Zobacz też

Odnośniki zewnętrzne

Personal tools