Spectrum Emulátor

File-név: SPEMU.COM, SPEMU.ROM
Program neve: Spectrum Emulator
2014
Software-es Spectrum emulátor

Már az Enterprise hőskorában felmerült - enyhítendő a programhiányt - a Spectrum emulációjának lehetősége. A hazai forgalmazás beindulása után több honfitársunk is készített software-es Spectrum emulátort. Ezek viszonylag egyszerű programok - köszönhetően például az Ep rugalmas képernyőkezelésének. A programhiány enyhítésére azonban alkalmatlanok voltak, leginkább csak BASIC programok futtatására lehetett ezeket használni. A hazai forgalmazó akkor a hardware-es emulációt látta megoldásnak. Ez ugyan lényegesen drágább megoldás, viszont a játékprogramok kb. 85%-a futtathatóvá vált vele. Ennek ellenére az emulátor nem lett üzletileg sikeres, annak magas ára, és néhány (súlyos és kevésbé súlyos) konstrukciós hibája miatt. Ezt az emulátort javította tovább ZozoSoft, amivel a játékok kb. 95%-a futtatható.
Geco az Amstrad CPC, TVC, ZX81 Emulátor után egy újabb software-es Spectrum emulátort készített. A korábbi Spectrum emulátorok gyenge kompatibilitását figyelembe véve ez meglepő lehet, mégis nyugodtan mondhatjuk, hogy Geco emulátora új szinte emeli a "software-es emuláció" fogalmát (legalábbis Ep-n, meg úgy általában a 8-bites gépeken). Most már talán kár belemenni olyan "mi lett volna ha..." típusú okfejtésbe, hogy mi lett volna, ha egy ilyen színvonalú emulátor a gép megjelenésekor létezett volna (esetleg - szinte már pofátlan módon - a géphez adták volna - bár ez jogi problémák miatt nem lett volna lehetséges). Ezt inkább az olvasó fantáziájára bízom...

A program lényegesen többet tud, mint az Ep-re készült eddigi emulátorok. A program EXOS kompatibilis, tehát működik Ep64-en is, az emulátor futtatásához legalább 112Kbyte memória szükséges. A kor igényeinek megfelelően .SNA vagy .TAP file-okat tölthetünk be. A játékosok dolgát "könnyíti meg", hogy a játék pillanatnyi állapotát bármikor memóriába menthetjük, majd igény szerint visszatölthetjük, mindezt villámgyorsan. Akik pedig így sem boldogulnak egy játékkal, bármikor bejuttathatnak a memóriába néhány "hasznos" POKE-ot könnyítő (vagy épp nehezítő?) szándékkal.
A megfelelően módosított Spectrum ROM és a Spectrum képernyő mellett több más "trükköt" is bevet a programok futtathatóvá tételében:

A fenti módosítások végrehajtásának köszönhetően a (48K-s) Spectrum programok 50-60%-a (!) futtathatóvá válik Ep-n, bárminemű hardware beruházás nélkül! A letölthető Spectrum programcsokor néhány alapértelmezett beállításokkal futtatható játékot tartalmaz.
Nem működnek azonban pl. tömörített / titkosított programok, mivel betöltés után nincs "értelmes kód" a memóriában, így a lecserélendő részeket nem találja meg az emulátor, mivel a kód csak a titkosítás feloldása / kicsomagolás után kerül napvilágra. A keret színének állítása be lett áldozva néhány esetben, és Dave regiszter írássá lesz konvertálva, mert ugyanolyan utasításkombinációt használnak programokban keretszín állításra is, és zenerutin részeként is. Hogy a zenelejátszás lassuljon, arra nincs külön EP-s rutin, hanem egyszerűen az 0FEh port lecserélődik 0A7h portra.
Spectrum-on "nagy hagyománya van", hogy a programok megpróbálnak ROM-ba írni. Ez az igazi gépen nem okoz problémát, a RAM-ból futó emulátor viszont erre nem tartalmaz védelmet. A probléma megoldására a program minden Spectrum-reset után a Speccy ROM-ot visszamásolja egy backup RAM szegmensről. A probléma a ROM verzió esetében tárgytalan.

A program kezelése
Az emulátor indulása után az F8 megnyomásával Spectrum reset-et eszközölhetünk, az F1 megnyomásával pedig beléphetünk az emulátor menüjébe, ahonnan annak összes szolgáltatását elérhetjük:

F1
EP Load/Save Mode (OFF / ON):
Kikapcsolt állapotban (ez az alapértelmezés) az emulátor Spectrum-módban végzi a file-műveleteket, bekapcsolt állapotban EXOS file-műveletet végez. Így például egy felhasználói programban munkánk eredményét elmenthetjük EXOS-formátumban lemezre is.
A (játékállás) mentés (amit maga a játék / program végez) is csak akkor működik, ha standard ROM hívást végez, ha saját mentő kódot használ, vagy nem olyan belépési pontot a ROM SAVE rutinba, ami le van kezelve, akkor nem lesz mentés, egyébként mentésnél a beírt (vagy alapértelmezett) nevet egészíti ki TAP kiterjesztéssel. Betöltéskor előbb ki kell választani a tap file-t (ld. később).
F2 Attribute Conversion (1/3, 1/1, OFF, DEF)
Az attributum konverzió működését vezérelhetjük:
  • 1/3 - Egy megszakításban a kép 1/3 részén végzi el az attributum konverziót. 4 MHz-s gépeken ezt az opciót célszerű választani, így ez az alapértelmezett mód. Szerencsére csak kevés programnál van látható (minimális) minőségromlás ezt (a gyorsabb) módot választva.
  • 1/1 - Minden megszakításban a teljes képernyőterületen elvégzi a konvertálást. 6 MHz-s gépeken ez a javasolt opció.
  • OFF - kikapcsolja a színkonverziót.
  • DEF - A felhasználó választhatja ki a tinta és papírszínt a következő két menüpont segítségével.
F3
Set pen colour (WHT, BLK, BLU, RED, PUR, GRN, CYN, YEL)
Az aktuális tintaszínt állíthatjuk be manuálisan. Csak akkor van hatása, ha az attributum konverziót DEF-módba kapcsoltuk. A színek kijelölésére használt színkódok valószínűleg egyértelműek, ha mégsem a színkódok háttere is utal a színre.
F4 Set background colour (WHT, BLK, BLU, RED, PUR, GRN, CYN, YEL)
Az aktuális papírszínt állíthatjuk be manuálisan. Csak akkor van hatása, ha az attributum konverziót DEF-módba kapcsoltuk.
F5 Silent mode (OFF / ON)
A "néma üzemmódot" kapcsolhatjuk be, azaz OFF esetén van hang (ez az alapértelmezett mód), ON esetén nincs.
A 128K-s Spectrumot emuláló változatban bővebb beállítási lehetőségek vannak (lásd oldal alján).
F6
Load SNA
SNA file betöltése. Ha van a rendszerben FILE-rendszerbővítés, az emulátor azt használja, egyéb esetben saját file-választó ablakját. Ha egy program nem fut az emulátoron TAP formátumban (pl. trükkös betöltő miatt), memória snapshot formátumban még működhet!
F7
LOAD TAP
TAP file kiválasztása. Ha van a rendszerben FILE-rendszerbővítés, az emulátor azt használja, egyéb esetben saját file-választó ablakját. Ezután a betöltést "hagyományosan", a LOAD"" paranccsal végezhetjük el (J billentyű, majd kétszer jobb SHIFT + P). A TAP kiválasztásakor töltődik be a header (EXOS 1), és a LOAD "" -nál EXOS 6-tal olvassa a TAP-ot.
F8 Speed (NORM, FAST, SLOW)
A program futásának sebességét szabályozhatjuk a BFh (191-es) port állításával:
  • SLOW - 00h értéket küld a BFh portra. (Várakozás minden memóriahozzáférési műveletnél, kivéve a video-RAM-ot)
  • NORM - 04h értéket küld a BFh portra. (Várakozás csak az M1-nél, kivéve a video-RAM-ot)
  • FAST - 08h értéket küld a BFh portra. (Nincs várakozás.)

4 MHz-s gépen a NORM mód a javasolt, de ha egy program lassan fut, a FAST mód sokat segíthet. 6MHz-s gépen általában a SLOW módban közelít a sebesség jobban az eredetihez, de azzal is gyorsabb lesz a legtöbb program (amik nem megszakításhoz időzítettek). A zene mindenképp felgyorsul (a Spectrumban nincs külön hangchip, a processzor órajele mindenképpen befolyásolja a hangfrekvenciát).

Joy
balra-jobbra
Attr conv/keyrut (OFF, 1-255)
Mivel a színkonverzió megszakításból működik, azon programoknál, melyek letiltott megszakítás mellett működnek, elvileg színkonverzió sincs. Ezzel a menüponttal azonban megoldható, hogyha nincs megszakítás, akkor is lehessen attributum konverzió.
A billentyűzet olvasó rutinba lett elhelyezve egy attributum konvertáló rész is, ami OFF beállítás mellett természetesen nem fut, egyéb érték esetén minden n. billentyűolvasó rutinban lesz attributum konverzió is.
Pl. ha 'ATTR conv/keyrut' : 001, akkor minden billentyűolvasó rutinban lefut az attributumkonverzió az F2-vel beállított módnak megfelelően, ha az ATTR conv/keyrut' : 255, akkor minden 255. billentyűolvasó rutinban fut csak le az attributum konverzió az F2-vel beállított módnak megfelelően.
Ez sem tökéletes megoldás, mert ahol se megszakítás, se billentyűolvasás, ott attributum konverzió se lesz.
P
Enter Poke
Tetszőleges memóriacímen elhelyezhetjük a kívánt értéket (pl. örökélet reményében). A címet és az értéket is hexadecimális alakban kell megadni. A bevitel végét az ENTER megnyomásával jelezhetjük, az ERASE billentyűvel javíthatunk. Ha meggondoltuk magunkat, a STOP megnyomásával kiléphetünk a funkcióból.
S
Save Snapshot to RAM
Memória-snapshot ment a memóriába. (Pl. a játék állapotát elmenthetjük egy "húzósabb" manőver előtt). A funkció használatához legalább 160 Kbyte memória szülséges!
W Memória-snapshot mentése háttértárolóra. Az emulátor saját formátumot használ, a file név SNAPSHOT.SNP.
R A korábban elmentett memória-snapshot (SNAPSHOT.SNP) visszatöltése.
L Load Snapshot to RAM
Az előbbi funkcióval elmentet snapshot-ot tölthetjük vissza.
Joy le-fel
A menü alatt olvasható, a Spectrum és Ep billentyűzet eltéréseiről és a Spectrum billentyűk jelentéséről szóló információs lap le-fel görgetése.
ESC Exit
Kilépés a menüből, visszatérés a futó programhoz.

Akár .SNA, akár .TAP file betöltését választottuk a file-választó képernyőn csak a megfelelő kiterjesztésű file-ok jelennek meg. Egy mappában maximum 80 file-bejegyzést jelenít meg a program, de kezeli az alkönyvtárakat is. A könyvtáraknak szintén .SNA vagy .TAP kiterjesztést kell adni, csak ezek a mappák jelennek meg. A könyvtárak úgy vannak megkülönböztetve a file-októl, hogy az első karakterük háttere kék. Könyvtárba az ENTER megnyomásával lehet belépni, az ESC megnyomásával kilépni.

A ROM verzió előnye, hogy a módosított Spectrum ROM EP-n is ROM-ban marad, így a ROM felülírós programok nem okoznak semmi kárt. Hátránya, hogy azokon a bővített EP64-eken nem fog elindulni, amiken nincs FBh szegmens.
Bármelyik ROM-slotba installálható EXOS 2.3 fölött, EXOS 2.1 alatt viszont csak az x0 slotokba (10h,20h,30,...), a második 16K-nak az első 16K mögötti slotban kell lennie.
Két funkcióval is bővült a ROM verzió. Spectrum képernyőn:

F3 - kilépés Basic-be
F4 - kilépés WP-be

Az attrubutum konverzió természetesen időt vesz el: 44 raszter sort visz el normál módban az 1/3-ados beállítás 4 MHz-en (14%), és 127 rasztert visz el az 1/1-es beállítás (40%). 3,44 MHz-es Z80 sebességnek felel meg elméletileg az 1/3-as mód, igaz vannak még lassító tényezők, pl. a billentyűzet emuláció. Az emuláció tényleges sebessége programfüggő.

Billentyűzet, irányítás

A játékokat (többnyire) botkormánnyal praktikus irányítani, így az emulátorban az EXT1 / EXT2 botkormány az INTERFACE II botkormányillesztő 1. / 2. portjainak felelnek meg. Ezenkívül a beépített botkormány a kurzormozgató billentyűknek felel meg, vagyis megfelel a CURSOR INTERFCE-nek. Így gyakorlatilag minden játékot használhatunk botkormánnyal is (annak ellenére, hogy nincs KEMPSTON emuláció). Az INTERFACE II és CURSOR illesztők ugyanis a billentyűzettel párhuzamosan működnek, így, ha a program nem is ismeri ezeket, de lehetőség van az irányító billentyűk definiálására, ezekre definiálhatjuk bármelyik botkormányt.
További kényelmi szolgáltatás, hogy az Ep billentyűzeten néhány funkció külön billentyűt kapott, amelyhez Spectrum-on több billentyű lenyomására van szükség.
Spectrum
Enterprise
CAPS SHIFT bal SHIFT
SYMBOL SHIFT jobb SHIFT
CAPS SH. + SPACE STOP
CAPS SH. + 0 ERASE


File-név: SPEMU128.COM, SPEMU128.ROM
Program neve: Spectrum Emulator
2015
Software-es Spectrum emulátor

A Spectrtum 128-at emuláló változat eltérései a 48K-s változattól:

Az F5 billentyűvel elérhető hangbeállítási opció a következőképen bővült:

F5 Sound mode (STR / MON / OFF)
Hang üzemmód:
  • STR - Sztereó, ilyenkor a beeper halk, mert a Dave 0-ás hangcsatorna frekvenciaregisztereibe küld ki 0001h és a hangerő 00h,08h,10h,18h értékeket vehet fel, attól függően, hogy a program eredetileg mit küld ki az FEh portra.
  • MON - Monó, ilyenkor a bal hangszórón szól az AY, és a DAVE D/A konverterét használva a jobb hangszórón a beeper, megfelelő hangerővel.
  • OFF - Hang kikapcsolva, emulátoron gyakorlatilag a Beeper szól nagyon halkan (0000h -ra vannak állítva a 0-ás csatorna frekvenciaregiszterei, és a fent említett módon állítódik a hangerő).

Elméletileg minden 48K-s programnak is futnia kell, ami a 48k-s SPEmuval fut, annyiban nem váltja ki a másikat, hogy annak a hangja direkt beeperre van szabva (hangerőben), és az fut bővítés nélküli EP128-on is.