Hardversimogató: ZX Spectrum Flash ROM és diagnosztikai kártya | ||||||||||
45 szavazatból)
( | ||||||||||
| ||||||||||
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
Test 3,4 - Inversion test
Test 5,6 - Random Fill test
RAM teszt után
ROM teszt
ULA teszt
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
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
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.
FLASH IC üzembehelyezése
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
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
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 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
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
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
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
Szomszédos memória cellák megváltozása
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!
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 címkiválasztó logika
| ||||||||||
Kapcsolódó dokumentumok | ||||||||||
Sajnos jelenleg semmilyen dokumentummal nem rendelkezünk ehhez a hardverhez. | ||||||||||
Publikálás a portálon: 2012-11-29 00:00:00 |