Periféria ismertető: ZX Spectrum FLASH ROM és diagnosztikai kártya

4 csillagos Cikk értékelése: 4,91 (32 szavazatból)

Gyártó: Dylan Smith
Kiadás: 2007
Eredeti ár: nincs adat

A Dylan Smith által 2007-ben kifejlesztett eszköz alapvető célja a hibás Spectrum gépek hibakeresésének megkönnyítése, ezenfelül a kártyán található FLASH ROM IC saját célra, bármilyen más ROM program futtatásához is felhasználhatjuk. A projekt hardver és szoftver részei GNU LGPL licensz alatt kerültek kiadásra, szabadon felhasználhatóak, kibővíthetőek.

A legtöbb hibás Spectrumban a Z80 működőképes, azonban más részegységek (memória, ULA, ROM, analóg részek) hibája miatt nem indul el a gép, hagyományos IC cserélgetős módszerrel csak hosszadalmas munkával lehet megtalálni a hibás alkatrészt, mivel a legtöbb alkatrész be van forrasztva. Ebben az esetben segíthet ez a kártya behatárolni a hiba helyét. A kártyán egy 128/512Kbájt méretű FLASH ROM IC található, amelyből 16K-t foglal a teszt program, a többi szabadon felhasználható. A FLASH írása lehetséges Spectrumról. A kártya másik kulcsfontosságú része a 8 db visszajelző LED, ezeknek segítségével kapunk visszajelzést a tesztek folyamatáról akkor is, ha a képernyőn nem jelenik meg értelmezhető kép.

A kártya használata

Diagnosztikai módban a J1 jumper legyen 1-2 állásban, ez engedélyezi, hogy a kártyán lévő ROM induljon el a gép belső ROM-ja helyett. A J2 szintén 1-2 állásban, ez letiltja az M1 jel használatát, erre azért van szükség, mivel sok Spectrumban olyan Z80 van, aminek nem működik megfelelően az M1 kivezetése. Csak akkor tegyük ezt a jumpert 2-3 állásba, ha az M1 jel használatát szeretnénk tesztelni.

Bekapcsoláskor, ha a Z80 működik, akkor a LED1 (bal szélső) villogni kezd, jelezve, hogy az első teszt indul. Ha az ULA működik, akkor kék keretet látunk, fekete papír színnel.

Tesztek áttekintése

A tesztelés a memória adatmegőrző képességének tesztelésével indul, ezek a tesztek 48K-hoz készültek, a memória két részét az alsó 16K-t (videómemória) és a felső 32K-t külön teszteli. Minden teszt a teszt sorszámának megfelelő LED villogtatásával indul (LED1, LED2,stb), amikor a villogás abbamarad, akkor indul a teszt. Hiba esetén egy figyelemfelkeltő minta jelenik meg, minden második LED (LED2,4,6,8) villog, négyszer. Ezután felváltva az jelenik meg, hogy milyen mintát kellett volna az adott címről kiolvasni, és, hogy valójában mit sikerült visszaolvasni, ez lényegében azt jelenti, hogy a hibás bit(ek) villogni fognak, így könnyen beazonosítható melyik RAM IC a hibás: alsó memória esetén 5-t kell hozzáadni a LED számához, azaz ha pl a LED1 villog, akkor az IC6 a hibás. Felső memória esetén 14-et kell hozzáadni. Minden memóriateszt futtatásra kerül, függetlenül attól, hogy az egyik hibát talál.

A képernyőn eközben (ha látható kép) kék keret látszik, kezdetben fekete képpel, amit a teszt folyamán különböző fekete-fehér minták, majd véletlenszerű színes attribútumok töltenek fel a teszt során. Ha bármelyik memória teszt hibát talál, akkor a keret pirosra vált. Ez a képernyő aktivitás segít mutatni azt, hogy az ULA működőképes-e.

Ha a felső memória működőképesnek bizonyul, akkor további tesztek kerül futtatásra (ezeknek már szükségűk van RAM-ra). Ezek a tesztek megpróbálnak képet megjeleníteni, függetlenül attól, hogy az alsó RAM jó vagy rossz, ez utóbbi esetben a hibásan megjelenő kép is segíthet behatárolni a hiba jellegét.

Az első további teszt a ROM teszt, ez 16 bites ellenőrzőösszeget számol a ROM-ra (48K-s ROM esetén lesz korrekt az összeg), majd következik az ULA megszakítás generálásának tesztelése, eközben a megszakítás számláló alsó 8 bitje kerül a LED-eken, valamint a képernyők kijelzésre. Ez a teszt kb. 25 másodpercig tart. Ezután jelenik meg a tesztek befejeződtek üzenet, majd kb 10 másodperc várakozás után megpróbálja belapozni a gép ROM-ját, és elindítani azt, ha minden rendben volt akkor a jól ismert (c) 1982 Sinclair Research Ltd. üzenetet kapjuk. Reset esetén a kártya regiszterei törlődnek, ilyenkor az elejéről indul újra a tesztelés.

Tesztek részletes bemutatása

Induláskor az egész 48K RAM törlésre kerül, majd 3 különböző módszerrel kerül tesztelésre a memória, minden esetben előbb az alsó 16K, majd a felső 32K.

Test 1,2 - Bit Set and Reset
Ez egy nagyon egyszerű teszt, minden egyes bitet megpróbál 1-be állítani, majd törölni, közben folyamatosan visszaellenőrzi, az adott memória cella a megfelelő értéket tárolja-e. Ha ebben a tesztben jelentkezik hiba, az azt jelenti, hogy a hibás IC nem képes a beleírt információt megőrizni. Hibás IC-n kívül ezt okozhatja még hibás forrasztás, esetleg NYÁK vezeték sérülése is. Ha az alsó memóriában van ilyen hiba, de a felső memória jó, és a gép eljut a képernyőn is kommunikáló tesztekig, akkor függőleges vonalakat fogunk a képernyőn keresztben látni.

Test 3,4 - Inversion test
Sok hibás RAM IC túljut az előző teszten, ez a teszt olyan hiba után kutat, amikor az egyik bitbe írt adat más biteket is megváltoztat. Induláskor nullázza az ellenőrzendő területet, majd minden páros címre egyeseket ír, végül visszaellenőrzi az eredményt. Ezután újabb nullázás, és megismétli a műveletet a páratlan címekkel. Ezt követően nem nullázás, hanem 1-esekkel feltöltés jön, és ismétli a műveleteket elöbb páros majd páratlan címekre írt nullákkal. Ha az alsó memória hibázik ebben a tesztben, akkor az gyakran a képernyőn is jól látható, normál esetben fekete és fehér vízszintes vonalak váltakoznak, hiba esetén más színek is megjelenhetnek. (Előfordulhat, hogy hibázik az alsó memória, mégse látható a képernyőn, ennek oka az, hogy lehetséges hiba a képernyő területen kívül is.)

Test 5,6 - Random Fill test
Előfordulhatnak olyan hibák, amiket még ez előző teszt sem bírt kiszűrni, pl ha egy bit átírása az IC egy egészen más részén változtatja meg a tartalmat. Ezeknek a kiszűrésére ez a teszt egy 16 bites pszeudo véletlenszám generátor segítségével tölti fel a tesztelendő területet, majd a véletlenszám generátor újraindításával visszaellenőrzi a tartalmat. Ha ebben a tesztben adódik hiba, akkor azt hibás RAM IC-n kívül okozhatja hibás forrasztás a címvezetékeken, esetleg sérült NYÁK vezeték, valamint hibás cím multiplexer IC (74LS157) is.

RAM teszt után
Ha a felső memória hibátlannak bizonyult, akkor a kártya teszt ROM-ja megpróbál további teszteket futtatni a további hw elemek vizsgálatához. Ha korábban láttuk, hogy a keret kék (esetleg hiba esetén piros), miközben a képen váltakozó tartalom jelent meg, akkor az ULA - legalább részben - működik, valamint a gép analóg része is. Ha nincs kép, de a megszakítás teszt alatt látszik a LED-eken a számlálás, akkor valószínűleg működik az ULA, és a gép analóg részében van hiba. Érdemes ilyenkor a kompozit videó jelet megpróbálni használni, lehetséges, hogy a modulátor a hibás.

ROM teszt
RAM tesztelése után következik a ROM ellenőrzése, igaz ritkán fordul elő a hibás ROM chip, de mint minden, ez is elromolhat. A ROM teszteléséhez már elengedhetetlen a hibátlan felső memória, mivel a teszt programot át kell másolni a RAM-ba, ahhoz, hogy a kártya ROM-ja helyett a gép belső ROM-ját lapozzuk vissza az ellenőrzéshez. Az ellenőrző összeg kiszámítása után újra a kártya ROM-ja lesz belapozva, majd a képernyőre írva a ROM ellenőrző összege, és a várt érték (ez 48-as ROM-ra van kiszámítva). Hiba esetén szintén lehet az IC hibáján kívül forrasztási, vagy NYÁK hiba, vagy ha foglalatban van a ROM IC, akkor ott is lehet érintkezési hiba.

ULA teszt
A következő teszt az ULA megszakítás generálását ellenőrzi. Mindenegyes megszakításnál egy számlálót növel a program, amelynek az alsó 8 bitjét kiküldi a LED-ekre, ezért ott egy bináris számlálót kell látnunk, amely kb 5 másodperc alatt ér körbe. 5 komplett ciklus fog futni, minden 256. megszakításnál a képernyőre is kiírásra kerül a számláló. Ez a teszt kb 10 másodperccel az utolsó RAM teszt után indul, így ha nincs kép, de látjuk a számlálót működni, akkor jó eséllyel tudhatjuk, hogy az ULA működik. Ha a megszakítás generálás nem működik, de van kép, akkor a gép nem fog tovább lépni a bejelentkező képnél, mivel a billentyűzet olvasás a megszakítási rutinban történik. Ilyen hibás ULA-ról még nem hallottunk, valószínűbb az, hogy a CPU-hoz nem jut el a megszakítás kérő jel.

A kártya működése

A kártya két Z80-as I/O porton keresztül vezérelhető: 31 (1Fh) vezérli a ROM lapozást, a 63 (3Fh) pedig a LED-eket. Hogy megértsük mindez hardver szinten hogyan működik, kezdjük a címdekódolástól.

Hogyan vezérli a Z80 a kártyát
Amikor a Z80 pl egy OUT (63),A utasítást hajt végre, akkor a címbusz alsó 8 bitje (A0-A7) 63 (3Fh) lesz, az adatbuszra az írandó adatot (A értéke) helyezi, valamint aktív (alacsony színtű=0) lesz az /IORQ és a /WR vezeték. A kártya az OUT műveletet az U1 jelű 74HC138 IC-vel érzékeli, ez egy 3-ról 8 vonalra dekóder, 3 címbementére az A5, A6, A7 Z80-as címvezetékek vannak kötve. Ha ezen a három vezetéken 000 van, akkor a ROM lapozást vezérlejük, ha 001, akkor a LED regisztert írjuk. De az még nem elég, hogy meg van a megfelelő címkombináció, meg kell különböztetni az I/O műveleteket a memória hozzáférésektől, vagy a megszakítás elfogadástól. A 138-as IC-nek 3 engedélyező bemenete is van, amíg ezeken nincs a megfelelő bemenet, addig teljesen mindegy mi történik a címbemeneteken, a kimenet inaktív marad. Ahhoz, hogy megtudjuk mondani, hogy a Z80 I/O műveletet végez, két jelet kell figyelni: IORQ és M1, az IORQ legyen alacsony, az M1 magas. Miért is kell nézni az M1 jelet? Amikor a Z80 megszakítást fogad el, akkor egy speciális M1 ciklust hajt végre, amikor az IORQ és az M1 jel is alacsony, ilyenkor hibás címdekódolást okozhat az olyan megoldás, ami csak az IORQ jelet figyeli. Továbbá figyelünk a WR jelre is, ami megkülönbözteti az OUT utasítást az IN-től, mivel az a kártya csak I/O írásokat használ.

Mindez nagyon egyszerű lenne, ha nem szállítottak volna sok Spectrumot olyan Z80-al, amelyen hibás az M1 kivezetés. A hibás M1 jel nem okoz gondot addig, amíg a gép önmagában van használva, de megakadályozza néhány periféria használatát. Ezért került a kártyára egy jumper amivel figyelmen kívül lehet hagyni az M1 jelet, ilyenkor csak az IORQ és a WR együttes aktivitását figyeljük, ami csak OUT esetén lehetséges, megszakítás elfogadás esetén nem. Ha a jumpert az M1 engedélyező állásba tesszük, akkor egy egyszerű BASIC programmal megvizsgálhatjuk az M1 jel működőképességét:

10 OUT 63, 255
20 PAUSE 5
30 OUT 63, 0
40 PAUSE 5
50 GO TO 10

Ha az összes LED gyorsan és stabilan villog, következetes módon, akkor az M1 jel működik. Ha a villogás nem egyenletes, akkor az M1 hibás.

Összefoglalva a 74HC138 figyeli a kártyának szóló I/O utasításokat az IORQ, WR, M1 jelek által, az A5, A6, A7 címvezetékek által eldöntve, hogy a ROM lapozó vagy a LED regisztert akarjuk elérni. A 138-as megfelelő kimenete alacsony szintű lesz.

Az U5 jelű 74HC273 (octal flip-flop) tölti be memória lap regiszter szerepét. A kártyán lehet 128 vagy 512K FLASH ROM, ami jóval nagyobb mint amit a Z80 meg tud címezni, ezért ez az IC vezérli a FLASH A14-A18 címvezetékeit. Mivel ez az IC rendelkezik Reset bemenettel, ezért bekapcsoláskor vagy a reset gomb megnyomásakor nullázodik a tartalma, azaz a FLASH ROM legelső 16K-s lapja kerül kiválasztásra. A lap regiszter 5. bitje vezérli, hogy a gép belső ROM-ja, vagy a FLASH ROM kiválasztott lapja legyen elérhető, mindez a busz csatlakozó ROMCS vezetékén keresztül történik. Az ULA ROM engedélyező jele egy ellenálláson keresztül jut el magához a ROM IC-hez, az ellenállás és a ROM IC közé van bekötve ez a ROMCS vezeték, amelyet ha magas szintre húzunk, megakadályozzuk a belső ROM engedélyezését.

Ez a memória lapozási mód lehetővé teszi a kártya felhasználását általános célú ROM kártyáként.

Kapcsolási rajz és NYÁK tervek

A letölthető kapcsolási rajz (Spectrum-Diag.sch) Linuxon futó nyílt forráskódú gSchem programmal készült, amely elérhető a http://www.geda-project.org/ oldalon. A rajz PNG formában is letölthető.

Kiegészítések a rajzhoz

  • Az elvi rajzon látható 7404 helyett egy két tranzisztorból felépített inverter került alkalmazásra.
  • Nem volt az alkatrész készletben 512K FLASH IC, ezért 256K-s látható a rajzon, a plusz címvezeték bekötése megjegyzésben látható.
  • Az elvi rajzon a lábak bekötése a logikailag ideális sorrendben van, a NYÁK tervben ettől eltérően a legkönnyebben beköthető sorrendben vannak az adatvonalak.
  • A NYÁK tervben a 2x2 érintkezős jumperek helyett 1x3 érintkezős lett alkalmazva.
  • A NYÁK tervben olyan LED-ek lettek alkalmazva, amelyek beépített előtét ellenállással rendelkeznek, így a kapcsolási rajzon látható különálló ellenállások már nem szerepelnek itt.
A NYÁK terv (Spectrum-Diag.pcb) szintén Linuxon futó PCB nevű programmal készült, elérhető http://pcb.sourceforge.net/ címen.

A NYÁK bár kétoldalas, de otthoni gyártásra van optimalizálva, arra számítva, hogy nem tudsz furatgalvanizált kivitelt készíteni. Ezért minden IC-t elegendő csak alul forrasztani, csak a LED-ek anódját, FLASH IC szűrőkondenzátorát, és a tranzisztorokat kell felül forrasztani.

A NYÁK terv több féle nyomtatásra kész PostScript formában is letölthető, valamint ha esetleg NYÁK gyártó cégnél kerülne kivitelezésre, ehhez a Gerber fájlok is elérhetőek.

A ROM program

A kártyához készült szoftver csomag két részből áll, egyik a 48-as géphez készült Test ROM, amelynek a működéséről már korábban szó volt, a másik rész pedig a FLASH IC programozását Spectrumon lehetővé tevő segédprogram. Ez a program Am29F040 (512K) vagy azzal kompatibilis FLASH IC-hez készült.
Több csomag tölthető le:

  • Spectrum-Diag-Rom.zip ez a 48-as Test ROM és forráskódjai, a testrom.out közvetlenül felhasználható FLASH IC-be írásra.
  • Flash-Util.zip Spectrumon futó Flash segédprogram és forráskódjai.
  • tzxroms.zip ebben TZX magnófájl formátumban található meg a Flash segédprogram, és annak ROM-ba írható verziója, a kártyához készült 48-as Test ROM, és egy általános, nem pont ehhez a kártyához készült 128-as Test ROM, amely ezért nem is használja a LED-eket.
A Flash segédprogram lehetővé teszi a FLASH IC programozást közvetlenül a Spectrumon, így nincs szükség külön IC programozó készülékre. A következőekben ennek a programnak a használatával ismerkedünk meg, kezdve onnantól, hogy az új, még teljesen üres FLASH IC-t beüzemeljük.

FLASH IC üzembehelyezése
Ehhez szükség lesz a Flash-Util.zip-ben található TZX fájlok kazettára írt változatára, vagy pedig a Spectrumot PC-vel hangkábelen összekötni, és így átjátszani a szükséges TZX fájlokat.

Bekapcsoláskor a kártyán a Spectrum/Flash jumper legyen Spectrum állásban (2-3), így a gép normálisan indul a belső ROM-mal. Ha rossz állásban van a jumper, akkor függőleges csíkokat fogunk a képen látni, ennek az a oka, hogy a Z80 folyamatosan RST 38h utasításokat hajt végre (ennek kódja FFh, ez található egy üres, törölt FLASH IC-ben), és így a verem felülírja a kép memóriát. Ez esetben kapcsoljuk ki a gépet, és állítsuk a jumpert a megfelelő állásba.

Ha rendben elindult a gép, akkor elsőként CLEAR 32767 utasítással biztosítsuk, hogy a BASIC a továbbiakban ne írja felül az általunk használni kívánt memóriát. Ezután LOAD "" CODE utasítással töltsük be a flashutil.tzx-t, majd egy újabb LOAD "" CODE utasítással a flashutilrom.tzx-t. Az első 57344 (E000h), a második 32768 (8000h) címre töltődik be, ha minden rendben ment, RANDOMIZE USR 57344 utasítással indíthatjuk a Flash segédprogramot, ez után a következő képet kell látnunk.

Nyomjuk meg a W gombot, amire egy újabb menü jelenik meg, ahol a FLASH lapjai közül választhatunk. Mivel a Flash segédprogram a 4-es lapra lett tervezve, ezért válasszuk a 4-est.

Flash segédprogram ROM-ból futtatva
A legutóbbi lépésben a FLASH 4-es lapjára bekerült a Flash segédprogram, innentől kezdve ha bármikor szükség lesz rá, egy igen egyszerű BASIC utasítással elérhetjük:

OUT 31, 36

Ez egyaránt működik 48-as vagy 128-as BASIC-ből. Figyelem! Ez a segédprogramot a RAM-ba másolja a 57344-es címtől kezdve, felülírva bármit ami ott van! A Flash segédprogram nem működik, ha a Spectrum/Flash jumper Flash állásban van! Ilyen eset akkor fordulhat elő, ha a FLASH 0-s lapjára írt alternatív BASIC ROM-ot (pl: Gosh Wonderful ZX BASIC ROM) használunk. Ilyen esetben Spectrum állásba tett jumperrel indítsuk el a gépet, és ezután hívjuk meg a Flash segédprogramot.

Lehet, hogy furán hangzik a segédprogramot indító OUT utasítás, a szokásos RANDOMIZE USR helyett. Ime a magyarázat, hogy hogyan működik: a 31-es portra írt értékkel a a ROM lapozást állítjuk be, 36 az binárisan 00100100, mivel a bit 5 az 1, ezzel letiltjuk a belső ROM-ot, és mivel a 4-es lap lett kiválasztva a FLASH-ből, ezért a következő utasítást már onnan olvassa a Z80. Ezt az utasítást onnan olvassa, ahol eredetileg a BASIC ROM-ban az OUT utasítás végén lévő RET lenne, ez a cím 1E7Fh. Ezen a címen a 4-es lapon egy olyan rutin van, amely átmásolja a Flash segédprogramot a RAM-ba, majd elindítja. Mielőtt megkérdeznéd, ez a 31-es port nincs konfliktusban a Kempston illesztő 31-es portjával, mivel az csak az olvasásra reagál. Így ha van átmenő buszcsatlakozóval rendelkező Kempston illesztőd, lehetséges a Jetpac cartridge tartalmát a FLASH-be írva, és onnan használva joystickkal játszani! Érdekességként megjegyzem, hogy a Jetpac szintén indítható OUT 31 utasítással, csodálkozom is, hogy az Ultimate érvényes kódot tett a 1E7Fh címre, erre a nem túl gyakori esetre gondolva… Általában a ROM-ban lévő játékokat a Flash segédprogramon keresztül a legkönnyebb elindítani.

Test ROM beprogramozása
CLEAR 32767, majd LOAD "" CODE utasítással töltsük be a 48ktestrom.tzx-t, ezután OUT 31,36 utasítással indítsuk el a Flash segédprogramot. Válasszuk a W-t (Write page), majd a 0-s lapot.

További ROM programok beprogramozása: A FLASH szabad lapjaira bármilyen további ROM programot tehetünk, lehetnek alternatív BASIC ROM-ok, Interface 2 játék ROM-ok, más teszt ROM-ok, stb. A beírandó tartalmat 32768-as címre kell töltenünk, majd a már jól ismert módon indítani a Flash segédprogramot (OUT 31,36), W, és válasszuk ki melyik lapra kerüljön az új tartalom. Megjegyzés: azt, hogy hol mi van, nekünk kell észben tartani :

A beprogramozott ROM-ok közül bármelyik könnyen elindítható, csak hívjuk be a Flash segédprogramot, majd válasszuk ki a kívánt lap számát.

FLASH szektorok törlése
A FLASH nem úgy működik mint a RAM, nem lehet tetszőlegesen megváltoztatni a tartalmát, inkább hasonlít az EPROM-ra: ahhoz, hogy felülírhassuk, előbb ki kell törölni. Az alkalmazott Am29F040 típus 64K méretű szektorokra van osztva, ez a legkisebb terület amit törölni tudunk. Ez azt jelenti, hogy ha pl a 0-s lap tartalmát szeretnénk módosítani, akkor azzal együtt az 1, 2, 3 lapok is törlődni fognak. (Ezért is került a Flash segédprogram a 4-es lapra.) Szektortörlést az X gombbal érhetjük el a menüből. A szektorok listájából azt is láthatjuk mely lapok tartoznak az egyes szektorokhoz. Ha az 1-es szektort akarjuk törölni, az tartalmazza a 4-es lapot, amelyen a Flash segédprogram található. Ez esetben megkérdezi a program, hogy megőrizze-e a Flash segédprogramot, ha igent mondunk, akkor törlés előtt a 4-es lapot a RAM-ba másolja (32768 címtől), majd a törlés után visszaírja a FLASH 4-es lapjára. Ha a törlendő szektorból meg akarunk tartani egy vagy több lapot, arra szolgál a menüből y-nal elérhető opció (Copy a 16K page to RAM), amellyel a kiválasztott lapot a RAM-ba másolja 32768 címtől. Ha csak egy lapot akarunk megőrizni akkor ez elegendő: kimásoljuk, majd törlés után visszaírjuk. Azonban ha több lapot szeretnénk megőrizni, akkor szükségünk lesz tartalék üres lapokra a FLASH-ben. Kimásoljuk az első megtartandó lapot, bírjuk az első tartalék lapra, majd ugyanezt a továbbiakkal.

A 0-s lapnak speciális szerepe van, ezzel indul a gép, ha a jumper Flash állásban van a kártyán.

A szoftverek forráskódja sjasmplus fordítóval fordíthatóak, a fájlok mivel Linuxon készültek, ezért olyan szövegszerkesztővel módosíthatóak, amelyek ismerik a Unix formátumú sorvégződéseket (a Windows beépített Notepad-ja nem!). Ajánlott pl. a Programmer's Notepad: http://www.pnotepad.org/

A ZX Spectrum memória tesztelésről általában

Hogyan működik a memória
Ahhoz, hogy megértsük a memória teszt működését, át kell tekintenünk a memória működését. A dinamikus memóriák lényegében ugyanazon elv alapján működnek, akár egy 1982-es Spectrumban mint egy mai PC-ben. Természetesen vannak a Spectrum 1982-es tervezéséből adódó sajátosságok, amikre kitérünk majd.

Két fő memória típussal lehet találkozni, a dinamikus és a statikus, a Spectrum dinamikusat használ. Ugyanazt a feladatott másként valósítja meg a két típus. A statikus memória tranzisztorokból épül fel, 6 db kell bitenként. Nagyon egyszerűen kezelhető, közvetlenül a CPU címbuszára köthető, és csak néhány további vezérlő jel kell. A dinamikus memória kondenzátorokat használ az információ tárolására. Hozzáférése jóval bonyolultabb, mivel extra logikai áramkörök kellenek, amelyek a CPU-tól kapott címeket lefordítják, sor és oszlop címekre, mivel a DRAM címzése ilyen szervezésben történik. További probléma, hogy bár egy ideális világban a kondenzátorok örökre megőriznék a töltésüket - és így a beléjük írt információt- a valódi világban a kondenzátorok szivárognak, ezért van szükség DRAM esetén ciklikus memória frissítésre. Cserébe ezért az extra bonyolultságért, a DRAM jóval olcsóbb, és azonos méretben nagyobb kapacitás érhető el.

Az árkülönbség különösen nagy volt 1982-ben, ezért került a Spectrumba dinamikus memória. Ha manapság akarna valaki 48K-s gépet építeni, már érdemes inkább SRAM-ot használnia, az árkülönbség ilyen méretben elhanyagolható.

A 48-as Spectrumban kétféle RAM IC-t használtak: az alsó RAM (16384-32767) , amelyben a képernyő memória és a rendszerváltozók találhatóak, 4116 kompatibilis RAM IC-kből épül fel. A felső memória (32768-65535) pedig 4164 kompatibilis RAM IC-kből. (Mivel ezeknek a fele nincs kihasználva, így költségtakarékossági okokból legtöbb gépbe olyan eredetileg 4164-es IC-ket raktak be, amelyeknek az egyik fele hibás, és ez le van tiltva. Ezek az IC-k 4532, 3732 néven futnak. A 80K Spectrum projekt erre épül, hogy kicserélni ezeket teljesértékű 4164 IC-kre.) A legtöbb esetben, amikor nem jelenik meg (c) 1982… üzenet, akkor az alsó memória a hibás.

A RAM fizikai elrendezése
Az általános feltételezés az, hogy mivel a Spectrum 8 bites gép, ezért a RAM chipek 8 bit széles adatokat tárolnak. Nos ez egyáltalán nem igaz, ezért különösen nagy csapda a meggondolatlan RAM teszt program íróknak! Minden RAM chip a Spectrumban csak 1 bit széles adatokat tárol! Ha megnézzük a kapcsolási rajzot, láthatjuk, hogy 8 db 4116 és 8 db 4164 (kompatibilis) RAM IC van a gépben, ezek mindegyike csak egy-egy adatvonalra csatlakozik az adatbuszon. Tehát amikor a CPU 1-1 bájtot ír vagy olvas, akkor egyszerre 8 memória IC-t választ ki, és ezek mindegyike 1-1 bitet kezel a kérdéses bájtból. Ez azt jelenti, hogy pl amikor "inversion test"-et akarunk futtatni, amely az 101010101… minták tárolásából áll, nem megfelelő az olyan módszer, hogy POKE 16384, BIN 10101010 , POKE 16385, BIN 10101010 , stb mivel így minden egyes RAM IC-ben folyamatos 1-esek vagy 0-ák lesznek tárolva. A helyes módszer POKE 16384, BIN 11111111 , POKE 16385, BIN 00000000 , stb így lesz megfelelő "inversion test" a 48K Spectrum felépítéséhez.

A Spectrum 128K egy különböző jószág, egyes típusaiban 4 bites memóriákat használtak, azaz két darab van párhuzamosan kötve a 8 bites működéshez. Ezért 128K memória tesztben egy kicsit eltérően kell megvalósítani a tesztet.

Milyen RAM hibák lehetségesek?

Nemcsak két állapot létezik
A számítógépekről azt tanultuk, hogy csak 1-eseket és 0-ákat használnak, ezeket gyakran mint BE és KI kapcsolt állapotoknak neveztük. Hardver szinten ez nem teljsen igaz, mivel itt HÁROM állapot lehetséges, nem csak kettő, és a 0 nem egyenlő a KI állapottal. Hardver szinten az 1-et a +5V jelenti, a 0-t a 0V. A harmadik állapot, amit gyakran "tristated" vagy "high impedance mode"-nak neveznek jelenti a KIkapcsolt állapotot. A logikai 1 azt az állapotot jelenti, amikor a RAM IC tranzisztora a kimenetet a +5V-os vonalra kapcsolja, a logika 0 esetén egy másik tranzisztor kapcsolja a 0V-ra. A harmadik állapot az, amikor egyik tranzisztor se kapcsol sehova, ilyenkor a kimenet "lebeg", ez a valódi KIkapcsolt állapot. Ha villanykapcsolóban gondolkozunk, az csak a logikai 1 állapotot és a harmadik állapotot tudja, logika 0-t nem. Miért fontos mindez? Ezáltal tud a buszrendszer működni. A Spectrumban ugyanarra az adatbuszra csatlakozik az alsó 16K és a felső 32K. Amikor az alsó 16K-ból szeretne a CPU olvasni, akkor a 4116 RAM-ok küldik a logikai 1-esket és 0-ákat az adatbuszra. Ha eközben a 4164-es RAM-ok nincsenek harmadik állapotban, az rövidzárat okozna az adatbuszon, és nem jutna el az információ a 4116-osoktól a CPU-hoz. Amikor a 4164-esk nincsenek kiválasztva, akkor a kimeneteik harmadik állapotban vannak, azaz valóban KIkapcsolva, így eljuthat a 4116-osok kimenetéről a jel a CPU-hoz.

Ez vezet minket az első fajta RAM hibához, amely azt is megakadályozza, hogy a diagnosztikai kártyánk szoftvere elinduljon. Ha egy RAM IC (vagy bármi más ami az adat vagy címbuszra csatlakozik) nem képes a kimenetét harmadik állapotba hozni. Ez esetben hiába van a ROM kiválasztva, miközben egyetlen egy RAM sincs kiválasztva, a hibás RAM blokkolja az adat vonalat a buszon, így a CPU hibás utasításokat fog olvasni. Szerencsére ez egy nagyon ritka hiba. Ha logika 1 állapotban ragadt valami azt akár multiméterrel is könnyű megtalálni, ha logikai 0-ban, ahhoz oszcilloszkóp kell, mivel a RAM chipek kimenete nem nulla ellenállású, egy 2V közeli hullámformát fogunk látni, attól függően, ahogy más IC-k próbálják logika 1-ra húzni az adott vonalat.

Előfordulhat, hogy a hibás RAM harmadik állapotba ragad, ez esetben az ebből olvasott bitek logika 1-esnek látszanak a CPU-nak, ezt a RAM teszt programunk első része könnyedén kimutatja.

Egyszerű hibás bitek
Előfordul, hogy egy-egy bit 0-ban vagy 1-ben ragad, de az IC többi része rendben működik. A RAM teszt program első része ezt szintén kimutatja. Az alsó memóriában található ilyen hiba megakadályozza, hogy a Spectrum rendben bejelentkezzen. Sokszor az adott IC teljesen hibás, bármely címről is olvassuk, ugyanazt a hibás adatot kapjuk. Ha az alsó memóriában van ilyen hiba, az a képernyőn is jól látható, amikor a tesztek végén le lesz törölve a képernyő, függőleges vonalak láthatóak.

Szomszédos memória cellák megváltozása
Alattomos hiba, amelyet nem vesz észre a Spectrum bekapcsoláskori memória tesztje (de lefagy, vagy újraindul a gép, amikor megpróbálja a hibás területet használni), az amikor egy memória cellába írt adat egy szomszédos cella tartalmát is megváltoztatja, vagy teljesen más címre íródik be. Ezt a RAM IC belső sor vagy oszlop kiválasztó logikájának hibája okozza (pl. bármely címet választjuk ki, ugyan az a cella lesz kiválasztva). Az ilyen hibát nem tudja felderíteni az olyan teszt programi, ami ugyan azt az értéket írja be minden memória címre. Erre szolgál az inverziós teszt, amely váltakozva ellentétes értékekkel tölti fel a memóriát, majd ellenőrzi vissza, és mindezt több különböző mintával is megteszi. Például a teljes memóriát 00h-val tölti fel, majd minden második címre FFh-t ír. Emlékezzünk vissza, a memória IC-k 1 bit szélesek, ezért ez azt fogja eredményezni, hogy a memória IC-k tartalma 101010101… lesz, később megismételve ugyanez fordítva. Ezzel el lehet kapni az olyan hibákat, amikor egy bit átírása a szomszédos bitet is átírja. Ezek olyan hibák amiket a Spectrum ROM beépített tesztje nem vesz észre, és a Test ROM első tesztjén is átcsúsznak.

Még alattomosabb hiba, amikor egymástól távoli területek érintettek, például a memória IC oszlop kiválasztó logikája úgy hibásodik meg, hogy nagyjából működik, de egy címbit beragad. Ez esetben a szomszédos biteket vizsgáló 1010101010… mintával nem lehet elkapni a hibát, mert az érintet bitek az IC teljesen más területén helyezkednek el. Ennek a kiszűrésére szolgál a harmadik teszt, amely pszeudo véletlenszámokkal tölti fel a memóriát, majd a véletlenszám generátort újra ugyanúgy elindítva ellenőrzi vissza a tartalmat.

További hiba lehetőségek

Ellenőrizzük a tápfeszültségeket!
Mint láthattuk, számos hiba lehetőség van a memória IC-ken belül is, de vannak olyan külső problémák is, amelyek a Spectrum memóriát sújthatják, legtöbbször az alsó 16K-t.

A felső 32K esete nagyon egyszerű, csak egyszeres tápfeszültséget használ, azaz a GND és +5V vonalakat. A tápegység +9V-ot ad le, amiből egy 7805 feszültség stabilizátor állít elő stabil 5V-os feszültséget. A 7805 nagyon masszív darab, beépített rövidzár és túlmelegedés elleni védelemmel, ezért nagyon nehéz tönkretenni (de azért pl. fordított polaritású táppal sikerülhet…). Ha Spectrum bármit csinál bekapcsoláskor, ez azt jelenti, hogy a stabilizátor működik, de természetesen nem árt multiméterrel is leellenőrizni.

Az alsó 16K-t felépítő 4116-os IC-k már sokkal bonyolultabb esetek: nem elég két vezeték a tápellátáshoz (+5V és GND), hanem összesen négy vezeték kell: +5V, -5V, +12V és GND! Az extra -5V és +12V feszültségeket egy kis kapcsolóüzemű tápegység állítja elő a Spectrum alaplapján (ebből származik az időnként a gép belsejéből hallható ciripelő hang).

Az ebben az áramkörben lévő tranzisztor gyakran kiengedi a "működtető füstöt" , és ha ez bekövetkezik, akkor a 4116-os IC-k csak a +5V-ot kapják meg, a -5V és +12V feszültségeket nem. Ilyenkor nem csak nem működnek, hanem tönkre is mehetnek! A TMS4116 adatlapja azt írja, hogy elsőnek a -5V-nak kell érkeznie, és utoljára is ennek kell maradni. Tehát ha csak +5V van, és -5V és +12V nincs, az a legrosszabb ami történhet. Ez az egyik oka annak, hogy a buszcsatlakozón bekövetkező "baleset" miért tudja tönkre tenni a gépet: ha a csatlakozón lévő +12V/-12V/-5V kivezetések egyike rövidre lesz zárva, ez tönkreteszi a belső kapcsolóüzemű tápot, ezáltal tönkremennek a 4116-os RAM IC-k, vagy legalábbis addig nem fognak működni, amíg a tápegység helyre nem lesz állítva.

Ezért azt javaslom, a hibakeresést mindig érdemes a 4116-ok tápfeszültségeinek ellenőrzésével kezdeni, ez egy könnyen, gyorsan felderíthető hiba.

Kontakthibák
Hibás forrasztások, sérült NYÁK vezetékek, esetleg foglalatba tett IC-knél hibás érintkezések szintén megakadályozhatják a Spectrum működését, különösen akkor kell figyelni ilyenekre, ha valaki előzőleg forrasztópákával felfegyverkezve belepiszkált a gépbe… Ilyen estben előfordulhat, hogy a teszt által kimutatott hibás IC kicserélése után is fennáll a hiba, ilyenkor célszerű ellenőrizni a kérdéses IC többi alkatrésszel való összekötetéseit.

Hibás címkiválasztó logika
Korábban már említésre került, hogy a DRAM memóriákhoz további kiegészítő áramkörök kellenek, amelyek a CPU által küldött címeket lefordítják a memória által használt sor és oszlop címekre. A 74LS TTL IC-k ritkán szoktak tönkremenni, de előfordulhat. Mivel az ULA is összekötetésben van az alsó 16K-t alkotó 4116 IC-kel, ráadásul foglalatban is van, ezért ha van egy tartalék működő példány, érdemes egy cserét megpróbálni. 74LS IC-ket már régen nem gyártanak, bár több helyen még kaphatóak. Érdemesebb inkább a CMOS megfelelőjüket, a 74HCT sorozatot használni. Ha ezen a részen van a hiba, akkor általában a teszt azt fogja mutatni, hogy mind a nyolc IC hibás.


Kapcsolódó dokumentumok
Sajnos jelenleg semmilyen dokumentummal nem rendelkezünk ehhez a hardverhez.

Visszalépés az előző oldalra