Atari800 emulátor
Bezkonkurenčně nejlepším programem pro emulaci 8bitového Atárka je emulátor s názvem
Atari800.
Do tohoto projektu jsem se zapojil na podnět Petra
Stehlíka, který mě přemluvil, abych se podílel na několika dílčích
vylepšeních. Originálním autorem emulátoru Atari800 je David Firth. V současné době na
inovacích pracuje několik desítek programátorů z celého světa, takže hranice
kompatibility se posouvají stále blíže oněm vysněným 100%. Každá nová
verze má vychytané další mouchy, zohledňuje více skutečný hardware Atárka a
běží na ní opět více programů než dříve.
Mezi hlavní úpravy, jimiž jsem přispěl já osobně, patří:
- Plná instrukční sada CPU 6502
...Některé z her na původní verzi neběžely korektně mimo jiné z důvodu
používání "neoficiálních" instrukcí procesoru 6502. Doprogramoval jsem
tedy plnou sadu instrukcí - teď fungují všechny operační kódy $00 až $FF. Jednalo
se o: ALR, ARR, ASO, AXS, DCM, INS, LSE, MKA, MKX, OAL, RLA, RRA, SAX, XAA, LAX, SKB, SKW,
CIM (samozřejmě ve všech existujících adresních módech).
- Výpočty strojových taktů pro DMA přístup grafického čipu Antic
...Velkým problémem při emulaci je přímý přístup do paměti grafického čipu
Antic. Ten totiž u každého grafického módu "ubírá" procesoru stojové
takty kvůli zobrazování. Tato problematika je velmi složitá, neboť na přesné
synchronizaci CPU a ANTICu závisí správný běh programů, obzvláště používají-li
DisplayListInterrupt nebo WSYNC (čekání na horizontální synchronizaci). Vzhledem k
tomu, že tyto možnosti využívají prakticky všechny programy, je jejich implementace
v emulátoru naprosto nezbytná.
Naemulovat správně "kradení" taktů je obtížné, protože nestačí jen
vědět, kolik DMA přístupů Antic v daném módu provádí, ale je nutné i zohlednit
jednotlivé okamžiky během vykreslování obrazového řádku - tj. část kdy je
paprsek vlevo, kdy vykresluje a kdy je již za viditelnou hranicí obrazu. Do posledních
úprav ANTICu jsem zabudoval algoritmus, pracující s výpočty založenými na reálně
naměřených hodnotách na skutečném Atari.
- Rozšířená paměť 320XE
...Naprostá většina dnešních aktivních Ataristů má u svého počítače
rozšířenou paměť na 320KB (tj. 64KB standardní RAM + 256KB rozšířené RAM). Tato
paměť je k dispozici přes tzv. banky paměti o velikosti 16KB, které se mapují do
adresového prostoru $4000 až $7FFF. Již Atari 130XE mělo 4 takové banky, a tedy
kapacitu 128KB. U 320XE je těchto bank 16 a k jejich řízení se používají dva
různé způsoby: RAMBO nebo COMPY SHOP. Zabudoval jsem tedy do emulátoru možnost
přepnutí na systém 320XE i s volbou typu ovládání rozšířené paměti.
Je nutno podotknout, že tyto moje výše uvedené úpravy byly postupem času různě
upravovány, vylepšovány či zcela nahrazovány novějšími a lepšími principy
dalších programátorů, ovšem to nic nemění na faktu, že jsem je tam kdysi před
lety implementoval já jako první. ;-)
Na dalších vylepšeních emulátoru se stále pracuje...
Emulátor Atari800 je FREEWARE, takže si jej můžete zcela zdarma ztáhnout z
Internetu. Petr Stehlík byl autorem jmenován oficiálním "koordinátorem",
takže si pro nejnovější verze zajděte na stránku http://atari800.atari.org (najdete tam i spoustu
dalších informací, kompletní zdrojové kódy emulátoru, binární verze pro
jednotlivé platformy atd.). Existuje také verze tohoto emulátoru pro OS
Windows pod názvem Atari800Win PLus.