A SPECTRUM-emulátor újból színre lép!

 

Ismét az emulátorról!

 

 

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' STÚDIÓ-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 (klasszikus példa a THE TRAIN, amelyet elég sokan keresnek, mégsem írta át még senki). 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' STÚDIÓ-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 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. 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 EMULÁTOR 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 kell(ett 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

nem

nem

igen

nem

igen

nem

00

01

10

11

11

10

11

10

nem

nem

nem

nem

nem

igen

nem

igen

 

3. 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 elrontjuk, 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, akkor 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

LD IX,nnnn

LD A,x

SCF

INC D

EX AF,AF'

DEC D

CALL 0562H

(hossz)

(betöltési cím)

(x általában 255)

 

2. 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ú porton 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.

 

Zozohard

 

Enterpress IV. évfolyam 4. szám 1993. július-augusztus

 

 

Pár kép az átalakított emulátorról, látszik, hogy mit kell átvágni, átkötni. A piros-barna drót ideális esetben egy kapcsolóban végződik :-), azzal lehet ki/be kapcsolni az emulátor működését.

 

 

 

A szükséges új ROM fájl és a kapcsolási rajz fekete-fehérben és színesben.

 

Zozosoft