VIC-20 Emulátor

File-név: VIC20EMU.COM
Program neve: VIC-20 Emulator
2009
Software-es Commodore VIC-20 emulátor

Az Enterprise-on többféle gép emulációja is megoldható, ezek "természetesen" mind Z80-as processzorral szerelt számítógépek (Spectrum, ZX81, Amstrad CPC, TVC), így a programok legalább "közös nyelvet beszélnek" az Enterprise Z80A processzorával, "csak" a hardware különbségeket kell eltakarni a futtatandó programok elől. Kevesen gondolnánk, hogy olyan gépet is lehetne emulálni, amiben nem Z80-as processzor dolgozik, hanem esetünkben pl. MOS 6502. Márpedig Geco így gondolta, amikor elkészítette a VIC-20 (tisztán software-es) emulátor Enterprise verzióját!
A program alapja egy SAM Coupé-ra készült emulátor. Rögtön az elején érdemes leszögezni: az emulátor sebessége töredéke az eredeti VIC-20 sebességének, így gyakorlati használhatósága erősen korlátozott, annak ellenére, hogy a tesztelt programok 60%-a futtatható. A SAM-ben alapból 6MHz-n futó Z80B dolgozik, az EP rugalmasságának köszönhetően pár sort sikerült eltüntetni a kódból, de 4 MHz-s gépen még így is lassabb valamivel. Természetesen erősen ajánlott 6MHz-es gépen futtatni az emulátort. Az emulátor sebessége - a futtatott programtól függően - eléggé változó, átlagosan 13% körül mozog, de pár játék meglepő (használható!) sebességgel fut. Összehasonító Basic teszt:

1 FOR I=1 TO 255
2 PRINT I
3 NEXT I

VIC-20 0:07
Enterprise (6MHz) 0:46
SAM Coupé 1:09
Enterprise (4MHz) 1:12
Spectrum 1:43

A VIC-20 igen elfuserált képarányt használ, az emulátorban csak fele olyan széles egy képpont. Elvileg ki lehetne nyújtani a képet, viszont ez az emulátor sebességének további csökkenéséhez vezetne. Ezért inkább fele olyan szélesben látjuk a képet, de azt legalább valós képarányban.
A VIC-20 mindössze 5KB RAM-ot tartalmaz, így szinte alapkövetelmény volt hozzá a memóriabővítés. Az emulátor választhatóan +3kB vagy +8kB bővítést emulál, így összesen 6655 Byte vagy 11755 marad felhasználható.
Összességében az emulátor leginkább talán a 2.0-és Commodore Basic (ez van a C64-ben is) rejtelmeinek tanyulmányozására (szörnyülködésére) lehet alkalmas. Rögtön áldozzunk is a strukturált programozás oltárán egy rövidke példaprogrammal:

10 REM LEGNAGYOBB KOZOS OSZTO
20 INPUT "A= ";A
30 INPUT "B= ";B
40 A=ABS(A):B=ABS(B)
50 IF B>A THEN X=A:A=B:B=X
60 IF B=0 THEN 90
70 X=A-INT(A/B)*B:A=B:B=X
80 GOTO 60
90 PRINT "LNKO: ";A

A program kezelése
A program EXOS kompatibilis, így fut memóriabővítős 64K-s gépen is. Az emulátor futtatásához 96kB szabad memória szükséges.
Az eredeti SAM-verzióban nem lehet programot betölteni, ott a forrással fordítódik be a betöltendő program. Ep-n ez sokkal kényelmesebben megoldott: A futtatni kívánt programot az F5 megnyomása után választhatjuk ki (az ENTER megnyomásával, ha meggondolnánk közben magunkat, az ESC megnyomásával kiléphetünk a file-választó menüből, a 'D' megnyomásával új directory-t kérhetünk, pl. lemezcsere után). A program betöltését és indítását ezután a RUN paranccsal végezhetjük el. Csak .PRG fájlokat támogat a program, utántöltős programok nem futtathatók.
Ha esetleg valaki játékokat kíván futtatni bizonyára hasznát fogja venni, hogy a VIC-20 botkormányt az EXT1 botkormánnyal helyettesíthetjük.
Kurzormozgató billentyűből mindössze kettő van, ezeket a beépített botkormány helyettesíti.

Bár a VIC20-ban nem találunk RESET-gombot, azonban nem árt ha mégis van: rögtön két billentyű is szolgál erre, attól függően, mekkora memóriát kívánunk emulálni:

Nem mindegy, hogy milyen programot milyen bővítéssel töltünk! A bővítés nélküli, és a +3k-s programokat csak +3k-s módban lehet elindítani, a +8k-s programokat csak +8k-s módban lehet indítani. Ez azért van, mert különböző bővítésnél különböző helyre teszi a video memóriát a VIC-20, bővítés nélkül, és +3k esetén az 1E00h-n van a karakter memória, és 9600h-n az attributm, +8k esetén 1000h a karakter memória, és 9400h az attributum.