Spectrum Emulátor (ZozoSoft)
A SPECTRUM-emulátor újból színre lép!

Ez a cím biztos sokaknak ismerős (már akik olvasták az SPV-t), akiknek nem, azoknak a kedvéért lesz majd egy-két idézet az SPV-ből).
Amióta csak létezik az ENTERPRISE, azóta próbálkoznak a SPECTRUM programok futtathatóvá tételével. Erre két módszer létezik:
- A program átírása: nem túl egyszerű dolog, és nem is túl gyors, mégis idáig ez a legjobb megoldás, mert például csak így lehet lemezről is betölteni a programokat.
- Emulátor használata: léteznek software emulátorok, ezekkel az a probléma, hogy csak kevés program fut rajtuk, azok sem színhelyesen, mert a hardware a különbségeken nem segít. Létezik még az 'a STUDIO'-féle hardware emulátor, de az jó néhány software és hardware hibát tartalmaz. Hogy melyek ezek a hibák, mindjárt megnézzük, de előbb lássuk csak: miért is íródott ez a cikk? Az világos, hogy egyszerre sok program futtathatóvá tétele kevés fáradtsággal csak emulátorral lehetséges, mert az átírást viszonylag kevesen művelik, és az átiratok terjedési sebessége sem túl nagy. Pedig még mindig jónéhány SPECTRUM-os létezik, vagy azok "hagyatékaiból" (nem valószínű, hogy régi kazettáit felhasználja például az új AMIGA-jához adathordozónak) szerezhetünk igen sok ENTERPRISE-os berkekben ismeretlen, mégis elég jó programokat. Akkor tehát csináljunk egy új emulátort!
Az világos, hogy ennek az emulátornak hardware emulátornak kell lennie, erre a célra, megfelel az 'a STUDIO' féle emulátor (némi átalakítás és javítgatás után), azután már csak egy új software-t kellett írni a hardware-hez. Most pedig hasonlítsuk össze az eredeti és az átalakított emulátort:

Kezdjük a bekapcsolásnál: "...a színes ENTERPRISE felirat helyett az 'a STUDIO' SPECTRUM EMULATION felirattal jelentkezik be. Ettől kezdve már nem ENTERPRISE, hanem SPECTRUM-ként működik." (SPV) Ezzel ellentétben az átalakított emulátor látszólag semmit nem csinál, de ha kiadunk egy :HELP parancsot, akkor máris feltűnik a "ZX version 4.0" sor, ebből már mindenki (remélhetőleg) rájön arra, hogy az emulátorból már egy rendes rendszerbővítő lett. Adjuk ki tehát a :ZX parancsot, aminek következtében SPECTRUM-má butítjuk gépünket, de csak akkor ha engedelmeskedünk a felszólításnak: "Kapcsold be az emulátort!" Most biztos sokan kíváncsiak arra, hogy miért került egy kapcsoló is az emulátorra? Nos azért mert egy hardware tervezési hiba miatt (ld. lésőbb) nem lehet az emulátor minden részét bekapcsolva tartania gép normál működése mellett, mert nem valószínű, hogy amit ilyenkor írunk az 5800h-5AFFh tartományba, azt is konvertálni kell, mint egy SPECTRUM attribútum bájtot. (Gyengébbek kedvéért: ha nemcsak akkor kapcsoljuk be, amikor erre a program felszólít, akkor nagyon látványos elszállásokban gyönyörködhetünk.) Ha sikerült átjutnunk SPECTRUM módba, akkor ettől fogva a reset SPECTRUM-resetet eredményez, ellentétben az eredetivel, ahol teljes hidegindítás történt, tehát csak hosszabb-rövidebb (a memória méretétől és a használt teszt-programtól függő) memória-teszt után jutottunk újra SPECTRUM alapállapotba. De hogyan lépünk ki az emulátorból? Az eredetinél sehogyan, az átalakítottnál csak kapcsoljuk ki a kapcsolót és nyomjuk meg a reset-gombot, és máris visszajutottunk abba a programba, amelyikből meghívtuk az emulátort (az érintett program szemszögéből nézve csak egy melegindítás történt), tehát ha EPDOS-ból hívtuk, akkor EPDOS-ba tér vissza, ha BASIC-ből, akkor BASIC-be, ráadásul még a BASIC program(ok) is megmarad(nak)!!! Most már be is kellene tölteni valami programot: ..."Nagy kár, hogy az EXDOS-t nem használhatjuk, pedig milyen klassz is volna, ha a SPECTRUM programokat lemezről is töltögethetnénk!!!", írták az SPV 15. számában az eredeti EMULÁTOR-ról. Lássuk, hogyan megy ez az átalakítás után: ha kiadjuk a LOAD "" utasítást, akkor egy kis ablak jelenik meg a képernyő alján, benne a "Fájlnév:" felirattal...
...Az okosabbak már biztos kitalálták miről van szó, de a gyengébbek kedvéért eláruljuk, hogy egy teljesen szokásos EXOS fájlnév megadása segítségével, onnan tölthetjük a SPECTRUM programokat ahonnan akarjuk: magnóról, lemezről, vagy akár a soros vonalról is. (Ha nem adunk meg kiterjesztést, akkor .ZXF lesz.) Természetesen a szokásos kettőspont segítségével EXOS parancsot is kiadhatunk, de kilépésre ne használjuk ezt a lehetőséget, csak akkor ha direkt össze akarjuk kócolni az EXOS lelki világát (rendszerszegmensét). Most már csak egy kérdés maradt, nevezetesen az, hogy hogyan hozzuk át ENTERPRISE formára a SPECTRUM programokat. Be lehet pötyögni az SPV 18. számában lévő programot is, de egyszerűbb ha megnézzük, hogy mit takar a HELP lista "SCOPY version 1.0" sora (ugyanazt, csak mindig kéznél van). Aki már foglalkozott eme program használatával, már biztosan tudja, hogy például egy három fejléces fájlból álló programból hat fájl keletkezik, és már kezd rémüldözni, hogy ennyi fájlnevet kell beírni. Az emulátornak két hasznos tulajdonsága is van e probléma megoldására:

  1. Ha csak ENTER-t nyomunk, akkor az előző fájlnévben a pont utáni karaktert megnöveli eggyel, és az így kapott nevet próbálja betölteni, ez alkalmazkodik az SCOPY hoz, amely szintén hasonló formában menti ki a fájlokat:
       prg.000
       prg.1FF
       prg.200
  2. 2. Egy fájlból addig olvas, amíg a végéhez nem ér, tehát ha a programot összefűzzük egy fájlba, akkor csak egy nevet kell megadni. (Összefűzni lehet például az EPDOS LINK parancsával, de a legegyszerűbb ha az SCOPY "Egy fájlba?" kérdésére igent nyomunk. Figyelem! Az utántöltős programoknál nem biztos, hogy egy fájlba fűzve helyesen működik, általában az a jó megoldás, ha a program fő részeit fűzzük össze és a pályákat külön fájlban hagyjuk.) Ez a tulajdonság néha gondot okozhat, mert néha nem a tényleges méretet adják meg a programok. Ilyenkor helyesbíteni kell a fájl méretét, amit megtehetünk például az EPDOS FILE EDIT funkciójával, de akinek nincs EPDOS-a (vagy csak magnója van), az egyszerűen töltse be ASMON-ba a fájlt, és többet/kevesebbet mentsen ki. Hogy felfedezhessük ezt a hibát, az emulátor mikor fájlműveletet végez kiírja a státusz sorba a bájtok számát, amit csak össze kell hasonlítani a DIR-ben szereplő értékkel, de hogy a magnósok se legyenek hátrányban, ezért az SCOPY kiírja mentéskor a méretet is. (Természetesen az EXOS-on keresztüli fájlkezelés vonatkozik a SAVE, MERGE, VERIFY utasításokra is.)

Ahhoz, hogy egyszerre használhassuk az emulátort és az EXDOS-t, mindkét kártyát csatlakoztatni kell a gépre, erre a célra a legjobb megoldás ha veszünk egy buszbővítő kártyát Mészáros Gyulától. Így már több kártyát is csatlakoztatni tudunk gépünkhöz. Ha már ilyen jól tudunk töltögetni, akkor éppen itt az ideje, hogy játsszunk valamit: ..."Sajnos az EMULATOR használatával elesünk mind a belső, mind a külső botkormányok használatától" (SPV). Ezek után már mindenki sejti, hogy változás történt ezen a téren is:

SPECTRUM joystick
Billentyűk
ENTERPRISE joystick
bal
jobb
le
fel
tűz
CURSOR / AGF / PROTEK
5
8
6
7
0
INTERNAL + ALT
SINC. 1 / INTERFACE II. LEFT
1
2
3
4
5
EXTERNAL 1
SINC. 2. / INTERFACE II. RIGHT
6
7
8
9
0
EXTERNAL 2

(Általában ha csak annyit írnak ki, hogy SINCLAIR vagy INTERFACE II., akkor a SINCLAIR 2-nek megfelelő EXT 2 használható, de kivételek vannak.) Mivel ezek a joystick illesztők billentyűzet párhuzamosak, ezért a billentyű definiálásnál is felhasználhatjuk a joystick-okat. (Ez kevés átiratra teljesül, míg emulátoron minden programra amiben lehet billentyűket definiálni). Ha már az irányításnál tartunk, akkor íme a legjobb példa a hardware és software hibák együttesére: ..."Gyakran előfordul, hogy az alsó sor a "B" billentyűtől kezdődően "elhal". A dolog érdekessége, hogy időnként a felettük lévő billentyűk (pl. az 'M'-nél a 'K', az 'N'-nél a 'J' a 'SPACE' helyett az 'ENTER', stb.) kezdtek el jól, máskor pedig tudathasadásosan működni. Érdekes, hogy ez csak a gépi-kódú programok futtatásakor jött elő!" (SPV). A jelenség magyarázatához ismerni kellett volna) a SPECTRUM billentyűzet figyelését, amely az - ENTERPRISE-éhoz hasonlóan mátrix szervezésű, de a mátrix sorát nem egy külön OUT utasítással közöljük, hanem kihasználták a Z-80 ama tulajdonságát, hogy az IN/OUT műveletek esetén a címbusz alsó 8 bitje a periféria címet tartalmazza, míg a felső 8 bit az 'A' regiszter beolvasás előtti értéket tartalmazza (IN A,(n)), míg az IN r,(C) típusú utasításoknál a 'B' regiszter kerül hasonló helyzetbe, és ez a 8 bit szabja meg, melyik sorokat kell beolvasni (amelyikekhez tartozó bit 0 értékű), ez az egész lekérdezés a 254-s (0FEh) porton keresztül történik. És most lássuk milyen hibák voltak az emulátorban: 1. Elfelejtették rákötni az A15-öt az egyik IC-re, így a SPACE sorához tartozó bit mindig 1, innen ered az "elhalás". 2. Nem vették figyelembe az ENTERPRISE lapozásos technikájának a következményeit: az A14 (ez a bit az ENTER sora) és az A15 nem közvetlenül a Z-80-ból jön, hanem a DAVE-ből, és a belapozott szegmensektől függ. Ennek a két pontnak az eredményét vizsgálva a két érintett bitre, a következő táblázatot kapjuk:

SPACE sora
ENTER sora
Z80-ból
emulátoron
SPACE sora
ENTER sora
igen
igen
00
11
nem
nem
igen
nem
01
10
nem
igen
nem
igen
10
11
nem
nem
nem
nem
11
10
nem
igen

Ezeknek a hibáknak az eredményét nyilván a készítők is tapasztalták, de mivel nem találták ki az okot, így azt csinálták, hogy a programban egy AND 3Fh utasítással mindkét bitet nullázták, magyarul mindkét sort ha kell, ha nem beolvassa, innen ered a tudathasadás (amely nagyon előnyös" pl. a THE TRAIN című programban, mivel a tűz (ENTER) és a PAUSE (SPACE) egy billentyűre kerül...), de mivel nem minden programrészbe tették bele ezt az utasítást, így lehetséges, hogy előjön az "elhalás". Az átalakításnál helyére kerülő címvezeték és az új programban megfelelően összeválogatott szegmenseknek köszönhetően ez a hiba is eltűnt. Mellesleg helyesen kezeli billentyűzet figyelés címszó alatt az IN B, (C), IN F,(C), INI és az IND utasításokat is, aminek következtében több program, amelyik a menünél látszólag lefagyott, hajlandó elindulni.

  

Van még egy nagy közellensége az emulátoroknak: a kettes megszakítási mód (IM 2), amelyet a SPECTRUM játékok nagy része használ (SPECTRUM-on csak így tudnak saját megszakítási rutint alkalmazni, mivel az IM 1 belépési pontja (38h) a ROM-ban van), aminek következtében eszükbe sem jut az emulátoron működni... ...Természetesen az új program ezt is megoldja, így máris játszhatunk például az ACE OF ACES című programmal (amely valószínűleg a repülő szimulátorok kedvelőinek a kedvence lenne, ha átírták volna), vagy a STREET BASKETBALL-lal, MATCH DAY 1-gyel, stb.
Köztudott, hogy a SPECTRUM ULA-ja ismeri a FLASH-t (villogás), míg a NICK nem, ezért az eredeti emulátor figyelmen kívül hagyja, ha egy színnek villognia kellene: "Ez a játékoknál nem túl érdekes, de az kifejezetten kellemetlen, ha a szerkesztő-sorban elvész a kurzor!! Ha legalább inverz volna!" (SPV) Ebből már mindenki kitalálhatja, hogy a villogó attribútumok inverzek lesznek. (Lehetnének villogóak is, de az eléggé a sebesség rovására menne.)

Idáig tarlott az eredeti emulátor hibáinak kijavítása, most jönnek az "extrák": akinek a közelében akad SPECCY DOS-sal felszerelt SPECTRUM, az bizonyára ismeri a MAGIC 2.4 programot is, amelynek a lényege az, hogy mikor megnyomjuk a MAGIG gombot (NMI), akkor lementi lemezre a processzor állapotot és a teljes RAM-területet, és ezt később visszatöltve onnan folytathatjuk a játékot, ahol abbahagytuk. Az új emulátor-program képes betölteni az ilyen MAGIC-fájlt (természetesen előbb át kell rángatni EXDOS lemezre a SEC nevű programmal, de abból is egy módosított változat kell, amely képes 48 Kb-nál nagyobb fájlokat is kezelni. Ezt a szerkesztőségtől be lehet szerezni.). Ahhoz, hogy egy fájlt MAGIC-fájlnak kezeljen, betöltéskor a fájlnév első karakterének '$'-t adjunk meg (ez nem számít bele a tényleges névbe!) Ez még nem biztos, hogy mindenki számára valami nagy dolgot jelent, de a most következő biztosan: ha egy gépi kódú program közben megnyomjuk a HOLD (PAUSE)+STOP billentyű-kombinációt, akkor érdekes dolog történik: megjelenik a szokásos ablak a "Fájlnév:" kérdéssel... Itt három dolgot lehet cselekedni:
1. Megadunk egy szokásos fájlnevet, ekkor a MAGIC fájlokéhoz hasonló formában lementődik a program (ez azt jelenti, hogy a '$' segítségével be tudjuk tölteni az emulátoron, de SPECTRUM-on ne is próbálkozzunk), aztán folytatódik a futása (ellentétben a SPECTRUM MAGIC-kel, az reset-el mentés után).
2. A '$'-al betölthetünk egy MAGIC-fájlt, ez főleg bővítős gépeken jó, például egy akciójáték közben egy rázós hely előtt lementjük a programot a RAMDISK-be, azután ha elontjuk, igen gyorsan visszatölthetjük az állást, és máris lehet újra próbálkozni.
3. ALT+P-vel kezdve egy "POKE"-fájlt tölthetünk be, amellyel könnyen hasznosíthatjuk a SPECTRUM kiadványokban szereplő örökélet és egyéb POKE-k százait. Ilyen fájlt bárki könnyen tud készíteni például az ASMON-nal:

DW cím 1
DB ertek1
DW cim2
DB ertek2
...
END

vagy BASIC-ben:

10 open #1:"nev" access output
20 print #1:word$(cim1);chr$(ertek1);
30 print #1:word$(cim2);chr$(ertek2);
...
1000 close #1

Nem biztos, hogy azonnal látszik a POKE-k hatása, ezért érdemes kitartóan kísérletezni, például több helyen megpróbálni a POKE fájl betöltését: játék közben, a menüben, stb., vagy keresni egy másik POKE-t erre a játékra.
Ha egy program nem hajlandó működni, akkor általában igen egyszerűen működővé tehetjük (sokkal könnyebb rávenni egy programot az emulátoron való működésre mint átírni, mivel a legnehezebb résztől, a színek átírásától megmenekülünk.) 1. Ha a program az első egy-két fájl után megáll, akkor valószínűleg saját betöltő-rutint használ, ami közvetlenül a magnóról tölti az adatokat, mivel valószínűleg nem akarjuk a SPECTRUM magnó hangját hallgatni, ezért térítsük vissza az eredeti ROM-rutin használatához, ehhez bemutatjuk a két legelterjedtebb ROM-rutin hívást, és ha a programban valami ehhez hasonlót találunk, csak a CALL utáni cím mutat máshova, akkkor a CALL utáni cím módosításával általában már rendben fog működni a program.

LD DE,nnnn
LD IX,nnnn
LD A,x
SCF
CALL 0556H
LD DE,nnnn (hossz)
LD IX,nnnn (betöltési cím)
LD A,x (x általában 255)
SCF
I NC D
EX AF,AF'
DEC D
CALL 0562H

A legtöbben úgy tudják, hogy a SPECTRUM-on (48 Kb-oson) csak a 254-es port létezik, de ez nem egészen így van: az ULA készítői az egyszerűségre törekedtek, ezért a 254-es portnak megfelelő funkciók bármelyik páros számú portop elérhetőek, és némelyik program nem a 254-es port-ot használja, tehát ha valamelyik program betöltődik, és látszólag minden rendben van (nem lesz "maszatos" a képernyő), csak épp billentyű figyelés nincs, akkor némi ASMON, FENAS, stb. használatával nézzük meg, hogy ilyen esetről van-e szó, ha igen, akkor vegyük rá, hogy a 254-es port-ot használja. A páratlan portoknak is van szerepük: általában 255-öt lehet ezeken beolvasni, de előbb-utóbb biztos, hogy egy 56-os érték is jön (legalábbis azon a SPECTRUM-on amin én próbálkoztam), tehát az ilyen utasításokat cseréljük le LD r,56 utasításra. (Figyelem! A KEMPSTON joystick illesztő az 1Fh (31) port-ot kezeli, ezért az erre vonatkozó utasításokat hagyjuk békén!)
3. A leggonoszabb eset az, ha a program olyan ROM-belépési pontokat használ ami az emulátor ROM-jóban nem egészen ott van. Ilyenkor lehet keresgélni az elszállás okát, de nem árt ha van egy kimentett SPECTRUM ROM-unk a különbségek kiderítésére.
4. A program fut, de nagyon lelassul. Ezek általában a "zenélős" programok, amelyekben nem csak egyszerű piff-puff hangok vannak, hanem folyamatos zene. Ezekkel a programokkal csodát tehet, ha az OUT (0FEH),A utasításokat OUT (0ABh),A-ra javítjuk. Itt jegyeznénk meg, hogy igen sok "kuka" átirat van forgalomban, amelyekben így megtalálhatjuk az elveszett zenét. Az SPV egy sajtóhibájának következtében pedig több programban 0ABh helyett 0A7h szerepel, és ezért nincs hang!

Összegezve: érthetetlen, hogy a SPECTRUM-emulátor készítői miért csapták össze ennyire ezt a kiváló hardware emulátort. Talán ha még egy hónapig dolgoztak volna rajta lehet, hogy hasonló eredményre jutottak volna. (Nekünk egy hétbe sem telt). Akinek szüksége van az új Emulátor-programra, keresse fel a szerkesztőséget. Emulátorát díjmentesen átalakítjuk, és az új programot beégetjük a régi helyére.

Enterpress 93/4. - Zozohard

Átalakítási útmutató

01. Eredeti állapot, mindkét oldalról, plusz egy "térkép" a kapcsolási rajz IC számozása szerint:

    

02. Első lépés az EPROM kiforrasztása, amit a rossz minőségű nyák miatt nagyon óvatosan kell végezni, különben a képen látható módon feljönnek a vezetékek

03. EPROM foglalat átalakítása 64KB-os EPROM fogadására. A foglalat beforrasztása előtt át kell vágni a 28-as és 1-es lábakat összekötő vezetéket, a piros X-el jelölt helyen. Ezután beforrasztható a foglalat, majd ezután az EPROM (U1) 1-es lábára rá kell kötni az A15-ös címvezetéket a képen látható módon.

  

04. U9 jelű LS374-esnél nyák hiba kijavítása: 19-18-as lábak közötti vezetéket át kell vágni a képen pirossal jelölt helyen. Ezután az U9 18-as lábára rá kell kötni az A15-ös címvezetéket, célszerűen az előző pontban az U1-es lábára kötött vezetéket folytatva. Harmadik képen látható a kész drótozása az A15-nek.

    

05. Tervezési hiányosság kijavítása: a port dekódolást végző U2 engedélyezéséhez nem elegendő a gyárilag bekötött -IORQ jel, ezenkívül szükséges -RD/-WR jelek egyikének aktivitása is. Ezen jelek figyeléséhez plusz logikai kapuk kellenek egy 74LS32 és egy 74LS86 IC formájában. Ezeket "emelet ráépítés" formájában lehet bekötni. Az emulátor működéséhez nem szükséges, de kiegészíthetjük egy aktivitást jelző LED-del is. Az első képen látható a plusz alkatrészek elhelyezése, és az új alkatrészekkel kiegészített IC számozás is.
Az új U17-es jelet kapott LS32-est célszerű U15 tetejére telepíteni, mivel így a tápfeszültségen kívül a -RD és -WR jel is közvetlenül a "földszintről" elérhető. Tehát a 2-es (-RD), 7-es (GND), 12-es (-WR) és a 14-es (VCC) lábakat forraszuk össze az alatta lévő U15 azonos számú lábaival. A többi lábat hajlítsuk fel, hogy ne érintkezzen az alatta lévőkkel.
U17 1-es és 13-as lábát kössük össze, majd erre vezessük rá a -IORQ jelet, amit az U14 11-es lábától tudunk idevezetni (a képen fehér drót). U18 jelet kapott LS86-os az U11 tetejére kerül, itt csak a tápfeszültség jön a "földszintről", 7-es és 14-es lábat kell összekötni az alatta lévő U11 megfelelő lábaival, a többit fel kell hajlítani.
U17 3-as lábát össze kell kötni az U18 1-es lábával, az U17 11-es lábát az U18 2-es lábával.
Az U18 3-as lábán jön ki a kombinált engedélyező jel amit az U14 13-as lábára kell kötni.
Második-harmadik-negyedik képen látható a kész "emelet" több nézetből. Ötödik képen látható az U14-nél a vezetékek bekötése. A régi engedélyező jelet le kell vágni az U14 13-as lábáról, ennek helye van jelölve a hatodik képen pirossal.
Ha LED-et is szeretnék, akkor azt az U11 eddig nem használt 8-as lábon lévő kimenetére lehet kötni, másik pólusát egy 220 Ohmos ellenálláson keresztül a +5 Voltra. Bekötése szintén látható a képeken.

          

06. Az EPROM címzésének módosítása. Ahhoz, hogy a teljes 64KB-os terület elérhető legyen, el kell vágni az U3 12-es lábáról az U4 3-as lábára tartó jelet (-A15) el kell vágni a piros X-el jelölt helyen, majd az U4 3-4-es lábát össze kell kötni, képen világos zöld körben.
Az Emulátor ROM-ja eredetileg a 30H szegmenstől látszik. Ha olyan bővítős EXDOS kártyával együtt akarjuk használni, ami szintén tartalmaz 30H szegmensű EPROM helyet, akkor ütközés lenne. Ennek feloldására átállíthatjuk az Emulátor ROM-ját 70H kezdetűre: ehhez a kék X-el jelölt helyen vágjuk át az U3 6-os lábáról az U4 1-es lábára tartó vezetéket (-A20), majd az U3 5-ös lábát (A20) kössük össze az U4 1-es lábával (sötétzöld körrel jelölve). (Szükség esetén hasonló módon más címre is át lehet kódolni.)

07. Már csak a megfelelő ROM fájlt tartalmazó EPROM-ot kell berakni a helyére és készen is vagyunk.

Amikor utólag, 2005-ben ZozoSoft elkészítette kártya kapcsolási rajzát, akkor derült fény még egy súlyos tervezési hibára: Bár az NMI generálás szoftverből ki/bekapcsolható a kártya egyik portján keresztül, de ez a funkció nem igazán működött, ha ki is kapcsolta az ember, 1-2 másodperc múlva újra bekapcsolt... Ezért a '93-as átalakításnál (amit mostanában csak ISS2 változatnak nevezünk), egy kapcsoló került az NMI vezetékre, a ROM program felszólít induláskor a bekapcsolásra, ill. ha kikapcsoljuk, és úgy nyomunk resetet, akkor visszajutunk EP módba. A hiba ami miatt nem működött szoftveres kikapcsolás: a tervezők nem vették figyelembe a Z80 azon tulajdonságát, hogy az IORQ nem csak port IO műveletnél aktív, hanem megszakítás elfogadás során is. Tényleges IO művelethez szükség van még az RD/WR jelek egyikének aktivitására is. Mivel erre nem figyeltek, így a kártya engedélyező regisztere véletlenszerűen felülíródott, aminek jó nagy fagyások lett az eredménye, ha nem az Emulátor ROM futott éppen. A hiba pár plusz kapu beépítésével javítható. Ennek a változatnak a neve lett ISS3. Ennél már nincs szükség a kapcsolóra, mindent a szoftver tud intézni. A kapcsolási rajz már erről készült:

Íme a Spectrum Emulátor kapcsolási rajza!
Az IC-k úgy lettek beszámozva, hogy csatival felfelé nézzük, az EPROM-tól kezdve (U1) sorban balról jobbra soronként. Nagyjából így helyezkednek el a rajzon is. Az U9-nél már helyesen van bekötve a 18-as láb. A 4.0-ás ROM használatához az NMI vezetékre kell egy kapcsolót rakni, hogy fel lehessen függeszteni az Emulátor működését, mielőtt összedönti az EXOS lelkivilágát.
A lap alján az U17,U18 jelű kapuk a plusz kiegészítés, ami a port címdekódolás biztonságosá tételéhez kellett.
Az eredeti 32 KB-os Eprom le lett cserélve 64K-sra (27C512). Ehhez az U1 1-es lábát az A15-re kell kötni, eredeti emulátor átalakítása esetén 1 vágás és 1 átkötés. Kell még a címdekódolás kiterjesztése 64KB-ra, ehhez az U3 12-es lába és az U4 3-as lába közti vezetéket kell elvágni, az U4 3-as lábát összekötni a 4-es lábbal. Ez a rajz már tartalmazza ezeket a változásokat.
Opcionális kiegészítés:
1) U15 eredetileg nem használt 8-as lábára ráköthető egy LED ami jelzi, az NMI generálás engedélyezett állapotát jelzi.
2) Microteam (klón) EXDOS kártyával együtt történő használat esetén lehet egy kis probléma: ezen kártyák egy részén 10H-20H-30H szegmens tartományban vannak a bővítő Epromok. Az Emulátor Epromja is 30H-as lenne. Ilyen esetben az U3 6-os lábáról jövő vezetéket el kell vágni, és az U4 1-es lábát az U3 5-ös lábbával összekötni. Így az Emulátor Epromja a 70H-es című lesz.
Akinek 60H-20H-70H kiosztású EXDOS-a van, annak természetesen az eredeti variáció a jó. A rajzon az eredeti látható, szövegben említve az átcímzés lehetősége.

Port kiosztás (olvashatóak):

NMI kiadása:

Az NMI kiadásakor tárolódnak el az adat és címvezetékek a 40H-42H portokra.

A SPECTRUM Emulátor eredeti (3.5) és javított (4.0) ROM-jai.

SPECTRUM Emulátor 4.1 ROM ("Deluxe" változat)

4.1-es ROM már az ISS3 változathoz készült. Először is mivel nincs már kapcsoló, így az EP módhoz úgy lehet visszatérni, ha a STOP gomb nyomvatartása közben nyomunk egy resetet. Az új ROM segítségével futtathatóvá válnak az emulátorral a TAP és TXZ file-ok. TZX-nél természetesen adódik némi megkötés, általában csak azok a programok mennek, amik a Spectrum ROM LOAD rutinját használják, de a ROM TZX-ből kezeli a Turbo Data Block-ot, és a Pure Data-t, bár közvetlenül töltésnél nincs ennek sok jelentősége, mert ilyenre úgyis spéci loadderrel hivatkoznak. A World of Spectrom-on-on általában az eredeti mindenféle extra másolásvédett loaderes változaton kívül fent szokott lenni feltört is, és általában van TAP változat is, az a biztos... Az SCOPY-val lehetséges az ilyen fájlok szétbontása, arra az esetre ha valaki netán újabb átírat készítéséhez érezne kedvet! TAP/TZX fájlból közvetlenül töltve is konvertálva jelennek meg a betöltő képek.
Tesztelési célzattal tettem bele egy kis cheat-ot, amikor az Emulátor bekapcsolására vár, a fel+le billentyűk egyszerre lenyomásával hajlandó elindulni a HW nélkül is, persze túl sok mindenre nem használható így max. BASIC-re (lehet próbálgatni a betöltést, ezért tettem bele). Eddig egy játékra (POGO) akadtam, ami végig ROM rutinokat használ, így hajlandó elindulni. Persze attribútum konvertálás nélkül nincs benne túl sok élvezet...
A Spectrum billentyűzetet kevésbé ismerők kedvéért
   :ZX fájlnév
formában is indítható az emulátor, értelemszerűen ekkor egyből betölti a megadott programot. Így nem kell bajlódni a LOAD parancs megkeresésével. (Meg így majd bele lehet tenni az EPDOS-ba is, hogy a Spectrum progik onnan is indíthatóak legyenek.)

Vissza