ZX Spectrum
Hardware alkamlamzási segédlet
Tartalom
A ZX Spectrumhoz mellékelt kézikönyvek a mikroszámítógép hardware
felépítését nem tárgyalják. részletesen. Ez a könyv ezt a hiányt igyekszik
pótolni a Spectrum működésének részletes bemutatásával. A számítógépek
hardware felépítésében kevésbé járatosak szamara jó bevezetés lehet ez a leírás, de az elektronikával régebben foglalkozók. számára is igyekeztünk
érdekes kapcsolásokat megvalósítható ötleteket adni.
A Spectrum működési alapelveinek ismertetése után az egyes áramköri elemek leírását és ezek funkcionális kapcsolatit mutatjuk be. Részletesen tárgyaljuk. a hátsó csatlakozósáv érintkezőin megjelenő jeleket és ezek felhasználási lehetőségeit. A könyv hátralévő részében pedig olyan kapcsolásokat mutatunk be, amelyeket a kezdők is minden nehézség nélkül megépíthetnek.
A Spectrum áramköri rajzain az egyes elemeket kódolva jelöljük (például TR4). Ezeket a kódokat általában a nyomtatott áramköri lapon is megtaláljuk. Az A függelékben az elemek beültetési rajzát, míg a B függelékben a teljes logikai kapcsolási vázlatot megadjuk. (A kiegészítő kapcsolásokon szereplő áramköri elemek kódjai ezekre a rajzokra vonatkoznak.)
A hardware elemek ismertetése előtt felhívjuk a figyelmet arra, hogy a Spectrum számos drága és érzékeny áramköri elemet tartalmaz. Megfelelő elővigyázatossággal az áramkörök károsodása elkerülhető. Bármilyen külső áramkört csatlakoztatunk a Spectrumhoz, valamennyi tápfeszültségét előbb kapcsoljuk ki. Külső tápfeszültség bekapcsolása előtt vagy ezzel egyidejűleg kapcsoltjuk be a Spectrum tápfeszültségét is. A Spectrumban vagy annak hátsó csatlakozóján a méréseket óvatosan hajtsuk végre: az egyes kivezetéseket sohase zárjuk rövidre a mérőfejjel.
2. Fejezet
A SPECTRUM RENDSZER ÁTTEKINTÉSE
Ez a fejezet két részből áll: az elsőben a bináris számrendszert ismertetjük, míg a másodikban a Spectrum rendszer főbb részeit tekintjük. át.
2.1 A BINÁRIS SZÁMRENDSZER
A számítógépben két logikai állapot megkülönböztetése történhet egyszerű módon: ezt a két állapotot általában a 0 és az 1 számjegyekkel jelöljük. A legalapvetőbb megközelítésben tehát azt mondhatjuk, hogy a számítógép 1-esek és 0-ák kezelésével állítja elő az eredményt. Képzeljük el például az egyszerű összeadás műveletet: ezt egy két bemenettel (A és B összeadandók) és két kimenettel (C és D, előbbiek összege) rendelkező "fekete dobozzal" szemléltethetjük. Az összeadást a fekete dobozban elhelyezett több egyszerű tranzisztor hajthatja végre. Az összeadás bináris definíciója a következő:
A + B = D (összeg) |
és C (átvitel) |
0 + 0 = 0 |
0 |
0 + 1 = 1 |
0 |
1 + 0 = 1 |
0 |
1 + 1 = 0 |
1 |
Figyeljük meg, hogy az 1+1 eredménye nem lehet 2, mivel a bináris számrendszerben csak 0 és 1 szerepelhet. Az átvitel-bit funkciója itt hasonló, mint a decimális számrendszerben: ebben például a 8+9 eredménye 7 és 1 átvitel. A különbség a két számrendszer között az, hogy a binárisban az átvitel 2-t, a decimálisban 10-et jelent.
2.2 A SPECTRUM RENDSZER FŐBB ELEMEI
A Spectrum különböző részeinek leírásához tekintsük az 1. ábrán látható blokkvázlatot!
1. ábra: A Spectrum blokkvázlata
A központi feldolgozó egység (CPU), amint ezt a neve is jelzi, a mikroszámítógép rendszer központi eleme. A rendszer többi eleméhez az adat-, a vezérlő- és a címsínen keresztül kapcsolódik. A Spectrumban a CPU egy Z80A típusjelű áramkör (jelölése IC2). Ez 8 bites mikroprocesszor áramkör, amely azt jelenti, hogy az adatsín 8 vonalból áll. A CPU és a rendszer többi eleme között ezen a 8 bites adatsínen bonyolódik e az adatforgalom. Mivel mind a nyolc vonal egyenként logikai 0 vagy 1 állapotban lehet, így az adatsínen a decimális 0 (minden vonal értéke 0) és 255 (csupa 1 érték) közötti tetszőleges szám fordulhat elő.
De hogyan kezeli a CPU az ennél nagyobb decimális számokat vagy azokat a szavakat, amelyeket a BASIC rendszerben a billentyűzetről írunk be? Például a HELLO szót beírva nehezen képzelhető el, hogy az egy 0 és 255 közötti számértékkel megadható. A válasz egyszerű: a CPU egyidejűleg az összetett adatoknak csak egy kis részével foglalkozik. A HELLO szó értelmezésénél először a H betűvel foglalkozik (ennek kódja decimális 72), ezután az E következik (kódja decimális ó9), és így tovább (a Spectrum BASIC programozási kézikönyv A függelékében megtaláljuk az itt használt karaktereket és kódjaikat is). A nagy decimális számokat is ehhez hasonló módon kezeli a rendszert a számok tárolására a memóriában 5 byte szolgál (lásd a BASIC kézikönyv 24. fejezetét).
Mielőtt a CPU bármilyen művelet végrehajtását elkezdené, előbb megfelelő utasítással ezt közölni kell vele. A BASIC rendszer futtatására szolgáló utasítások a memóriában foglalnak helyet. A BASIC operációs rendszer programja valamennyi, a CPU számára a BASIC megértéséhez szükséges információt tartalmazza. Ezt a monitorprogramnak nevezett utasítássorozatot gépi kódban írták meg, és futtatása a Spectrum bekapcsolásakor megkezdődik. A kódolt programot a csak olvasható memória (ROM - IC5-ös chip) tartalmazza. A csak olvasható memória tartalmát a CPU nem változtathatja meg, és az a tápfeszültség kikapcsolásakor sem vész el.
A Spectrumon irt BASIC program az irható-olvasható (RAM) memóriába kerül. Szemben a ROM áramkörrel, ennek tartalmát a CPU megváltoztathatja, és a tápfeszültség kikapcsolásával a benne tárolt információt elveszítjük. Éppen ezért a megőrizni kívánt programjainkat, adatainkat- a számítógép kikapcsolása előtt kazettára kell vennünk. ellenkező esetben ezek törlődnek.
Miután a ROM-ban lévő programból a CPU megtudja, hogy mit kell tennie, a billentyűzetről vagy kazettáról bemeneti adatokat fogad el ill. a képernyőre vagy kazettára kimeneti adatokat küld. A feladatra orientált logikai hálózat (ULA) a külvilággal való kapcsolatban tehermentesíti a CPU-t. A billentyűzetről vagy a kazettáról érkező információt közvetlenül az ULA fogadja, majd a CPU-ba továbbítja. A kazettára vételt ill. a hangszóró vezérlését közvetlenül szintén az ULA végzi. A televíziós kép létrehozása már bonyolultabb módon történik. Az ULA a memória megfelelő részéből a képinformációt másodpercenként 50-szer kiolvassa és a kimeneti video áramkörbe juttatja. Így szemünk folyamatos képet érzékel. A CPU szerepe itt annyi, hogy a memória képinformációt tartalmazó részét (az ún. display file-t) a megfelelő tartalommal feltölti.
Eddig a CPU, a memória, az ULA, a billentyűzet stb. között az információ átadását magától értetődőnek vettük. De hogyan történik ez a valóságban? Az adatforgalom az adatsínen keresztül bonyolódik. Az átvitel típusát (irányát) vezérlőjelek határozzák meg. Például a CPU egy "olvasás" jelet ad ki, ha adatot olvas be az ULA-ból vagy a memóriából. Ez jelzi az ULA-nak vagy a memóriának, hogy bizonyos adatot küldjön a CPU-ba. Ha a CPU adatot tárol a memóriában, az "írás" vezérlőjelet adja ki. Ez közli s memóriával, hogy az adatsínről adatot kell tárolnia. Ehhez azonban a tárolás helvét is közölni kell vele: a CPU tehát a 16 bites címsínen egy címet is megad. A címsín így 2^16 (=65536) különböző memóriarekeszbe való adatbeírást ill. innen való kiolvasást tesz lehetővé.
A sínek egyes vonalai két érvényes logikai állapotot vehetnek fel. A gyakorlatban a 0 és az 1 állapotot feszültségszintekkel jellemezzük. Megállapodás szerint a logikai 0 állapotnak a 0 és 0,8 V közöttit míg a logikai 1 állapotnak. a 2 és 5 V közötti feszültségszint felel meg. Így biztosítható az egyes integrált áramköri elemek közötti kompatibilitás (az 5 V a logikai áramkörök szokásos maximális tápfeszültsége). Ha a feszültségszint 0,8 és 2 V közé esik, a jel a logikai 0 - 1 vagy 1 - 0 átmenet állapotában van. Az áramkörök és a rendszerek tervezése és szervezése olyan, hogy az átmeneti logikai állapotban lévő vonalak leolvasása ebben az időben kizárt.
A fenti leírásból rövid áttekintést nyerhettünk a Spectrum rendszert felépítő részegységekről. A következő fejezetekben a különböző egységek részletes ismertetését találjuk, de mindig tartsuk szem előtt az áramköri elemek teljes rendszerben elfoglalt helyét és szerepét is. A B függelékben megadott teljes logikai kapcsolási vázlat segítségünkre lehet ebben.
A számítógépek vizsgálatánál a tápegységet általában egyszerűen elintézzük: természetesnek vesszük, hogy a készüléket a hálózatra kapcsolva, az működni fog. Ha a Spectrumot saját tápegységünkkel akarjuk működtetni, ezt az áramköri egységet is meg kell vizsgálnunk. Ebben a fejezetben az eredeti tápegység részletes leírását találjuk, és emellett olyan áramköri megoldásokat is ismertetünk, amelyekkel készülékünket bővíthetjük.
A Spectrumban az 1.2 A terhelhetőségű, 9 V-ot szolgáltató tápegység képezi a tápellátás alapját. (ZX hálózati tápegység). Érdekes módon a Spectrum egyetlen áramköre sem működik 9 V-ról. A logikai áramkörök többsége +5 V-ról üzemel, míg a 16 K-s RAM áramkörök +12 V, +5 V és -5 V-os tápfeszültséggel működnek. A probléma tehát nem is olyan egyszerű: időben és értékben ennyi vonalon kell stabil tápfeszültséget szolgáltatni. A +5 V-os értéknek. 5%, a +12 és a -5 V-os értéknek pedig 10%-on belüli pontosságúnak kell lennie és akár egy mikroszekundumos tápfeszültség-kimaradás is működési zavart okozhat.
3.1 A +5 V-OS TÁPFESZÜLTSÉG
Ez a legjobban igénybe vett tápfeszültség vonal a Spectrumban (közel 1 A-es áramigény), ezért az 5 V-os stabilizátor áramkör megfelelő hűtőfelületen helyezkedik. el. A három kivezetéses 7805 típusjelű áramkör IN (bemenet) pontjára a 9 V kapcsolódik, amelyből az OUT (kimenet) ponton stabil 5 V áll rendelkezésre (lásd a 2. ábrát).
2. ábra: A +5 V-os tápegység kapcsolása
A bemeneti feszültég a +7...+25 V tartományba eshet (értéke csak a disszipált teljesítményben játszik szerepet: a bemeneti és a kimeneti teljesítménykülönbség ugyanis az alumínium hűtőfelületen hővé alakul). Például 1 A-es táplálás esetén a Spectrumban 4 W a disszipált teljesítmény, így a berendezés üzemi melegedése jórészt ebből származik.
3.2 A +12 V-OS TÁPFESZÜLTSÉG
A rendelkezésre álló 9 V-ból az 5 V-os tápfeszültség előállítása viszonylag egyszerűen megoldható; a 12 V már kissé összetettebb problémát jelent. Ezt a tápfeszültséget a 3. ábrán látható két tranzisztort (TR4 és TR5) tartalmazó kapcsolás állítja elő.
Az R43, R61, L1 és TR4 elemekből álló oszcillátor áramvisszacsatolását a TR5 biztosítja. Az áramkor működése az oszcillációs ciklusokban az L1 tekercsen indukálódó ellentétes irányú feszültségen alapul. Ez az ellentétes irányú feszültség a TR4 kollektorán a feszültséget 9 V fölé emeli (maximális értéke kb. 13 V). Ekkor a D15 diódán keresztül a C44 kondenzátor feltöltődik. Ennek kisütése (a D15 nem vezet) biztosítja az állandó 12 V-os tápfeszültséget. Ha értéke túl alacsonyra csökken, ez a TR5 tranzisztor erőteljesebb nyitását eredményezi; erre az oszcillátor-frekvencia növekszik, és a kimeneti feszültség eredeti értékére áll be.
3.3 A -5 V-OS TÁPFESZÜLTSÉG
A 3. ábrán a -5 V-ot előállító rész az R46, D11, R55, D12, R54 és C47 áramkori elemekből áll, és a "töltéspumpálás" elvén működik. Láttuk előbb, hogy a TR4 kollektora a kb. 13 V és a 0 V között oszcillál. Amikor a 13 V körüli értékre kerül, a C46 kondenzátor a D11 diódán keresztül kb. 12 V-ra töltődik. (0,7 V esik a nyitóirányban előfeszített diódán). Amikor a TR4 kollektora 0 V-ra kerül, ez a C46 negatív elektródáját -12 V-ra "húzza le". A C47 kondenzátor ekkor a D12 diódán és az R55 ellenálláson keresztül feltöltődik. A C47 feszültségét a D17 Zener-dióda -5 V-os állandó értéken tartja. A C46 a következő oszcillációs ciklusban újra töltődik, és így tovább.
3.4 ÁRAMHATÁROK
A ZX Spectrum belső tápegységei a saját készítésű kiegészítő áramkörök számara csak nagyon korlátozott tápellátást biztosítanak. A 16 K-s gépeknél az 5 V-os tápegység mintegy 300 mA-t szolgáltat erre a célra. A maximális határadat megadása elég nehéz. Általánosan elmondható, hogy minél jobban terheljük a tápegységeket, annál rosszabb lesz a szabályozás. A rossz szabályozás a rendszer gyakoribb "összeomlását" eredményezi, de ha a fenti ajánlott határértéket betartjuk, semmiféle károsodást sem okozhat. A 48 K-s gépeknél mindenképpen ajánlatos külön 5 V-os tápegységet használni a kiegészítő áramköreink számára.
3.5 A -12 V-OS TÁPFESZÜLTSÉG
Kérdés ezek után, hogy hol van a -12 V-os tápfeszültség, amely az eredeti BASIC programozási kézikönyvben a csatlakozósáv leírásánál szerepel. Az ebben a könyvben közölt kapcsolási rajzon ilyen tápfeszültség nincs feltüntetve, és valóban ez nem is létezik: a '-12 V' felirat a csatlakozósáv megfelelő pontjához tévesen került, helyette 'szabályozatlan +12 V' kellett volna, mivel ez a pont a TR4 kollektorára csatlakozik. Néhány alkatrész segítségével ebből a feszültségből könnyen előállíthatunk -12 V-ot. A 4. ábrán egy lehetséges megvalósítást adunk meg, amely felépítésében nagyon hasonlít a -5 V-os tápegységhez, és működési elve is azonos. Zener-diódára itt nincs szükség, mert a 33 mF-os kondenzátor maximálisan 12 V-ra töltődik. Az ilyen típusú kapcsolások szabályozása a terhelés növekedésével romlik. 20 ma-es terhelésnél a feszültség -10,5 V-ra csökken, így ez az ajánlott maximális terhelhetősége. Ha ezt a kapcsolást megépítjük, figyeljünk arra hogy a két kondenzátor legalább 16 V-os legyen. Ettől eltekintve a szükséges alkatrészeknél nincs kritikus paraméter.
3.6 KÜLSŐ +5 V-QS TÁPEGYSÉGEK
Ha nagyobb fogyasztású áramkörökkel egészítjük ki a számítógépet, szükség lehet külön tápegység készítésére is (a 48 K-s gépeknél szinte minden esetben, a 16 K-s gépnél pedig akkor, ha kapcsolásunk 300 mA-nél többet fogyaszt az 5 V-os tápegységből). Ekkor két választási lehetőségünk van:
3.6.1 A ZX TÁPEGYSÉGET HASZNÁLJUK
A ZX Spectrum 9 V-os hálózati tápegysége alkalmas erre, különösen akkor, ha a +12 V-os tápfeszültség nem teljes terheléssel működik. A gyakorlati tapasztalatok azt mutatják, hogy mintegy 500 mA-es tartalékkal rendelkezik a ZX tápegység. A külső járulékos 5 V-os tápegység kapcsolási rajzát az 5. ábrán adjuk meg (ebben az esetben csak a jobb oldali részt kell megépíteni).Ez az áramkor lényegében megegyezik a Spectrumban alkalmazott kapcsolással. Az ábrán a 7805 típusjelű feszültség-stabilizátor bekötését is megadjuk. A feszültség-stabilizátor hűtéséről sem szabad megfeledkeznünk. A szaggatott vonallal jelölt C1 kondenzátort is érdemes bekötni (értéke 22 mF/16 V legyen). Az erre a tápegységre kapcsolt áramkörök tápfeszültség pontjai és a föld közé érdemes 100 nF-os kondenzátorokat iktatni.
Vigyázzunk: a Spectrum +5 V-os tápfeszültség vonalát és az általunk épített tápfeszültség +5 V-os pontjait nem szabad összekötni, csak a földvonal közös!3.6.2 KÜLÖN HÁLÓZATI TÁPEGYSÉG HASZNÁLATA
Ebben az esetben az 5. ábrán látható teljes kapcsolást meg kell építeni. Ekkor a 7805-ös stabilizátor bemeneti pontjait (1-es kivezetés) nem a Spectrum 9 V-os pontjára, hanem az új 9 V-os tápfeszültség-pontra kell csatlakoztatni. Ez a rész egy 220 V - 9 V, 1 A-es hálózati transzformátorból, egy 1 A-es egyenirányító-hídból és egy 1000 mF / 25 V-os kondenzátorból (C1) áll. A transzformátort érdemes földelt fémdobozba helyezni, amelyre a 7805-ös stabilizátor is felszerelhető, és ekkor a doboz hűtőfelületként is szolgál.
Biztosítani kell, hogy a ZX tápegységet és a külön megépített hálózati tápegységet egyidejűleg kapcsoljuk a hálózatra (ezzel elkerülhetjük a logikai és egyéb áramköreink meghibásodását).
3.7 KONDENZÁTOROK
A tápfeszültség vonalak behálózzák a Spectrum egész központi nyomtatott áramköri lapját. Így ha egy tápfeszültségtől távol elhelyezkedő integrált áramkör tápáramfelvétele hirtelen megnő, helyi tápfeszültségesés következhet be. Ha a feszültségesés (akár csak egy mikroszekundum időre is) túl nagy, hatására a memóriában tárolt fontos adatok és programok törlődhetnek. Éppen ezért az áramköri kártya megfelelő pontjaira kondenzátorokat helyeztek el. Ezek kiegyenlítik az esetleges tápfeszültség ingadozásokat, mivel rövid időre nagy áramot képesek biztosítani. Így a tápfeszültség az áramköri kártya minden pontján megközelítőleg állandó lesz. Például a memóriachipeknél elhelyezett C1 ... C8 kondenzátorok is ezért kerültek beépítésre. Saját kapcsolásainknál is alkalmazzuk ezeket: egy-egy 100 nF-os kondenzátor két integrált áramköri tokhoz elegendő.
4. Fejezet
A Z80A MIKROPROCESSZOR
A Sprectrum rendszer vezérlőegysége a 40 kivezetéses tokban elhelyezett Z80A mikroprocesszor. Az A függelék kapcsolásán jelölése IC2. A mikroprocesszor főbb funkciói a következők:
A Z80A műveleteit a memóriából beolvasott utasítások határozzák meg. Ez a mikroprocesszor számos különböző utasítást képes értelmezni és végrehajtani. (A gépi kódú programozás összetett probléma, itt ezzel nem foglalkozunk, erről részletesen a "A ZX Spectrum programozása" című könyvben olvashatunk) Más számítógépekben is használnak Z80-as mikroprocesszort. A Z80A csak abban különbözik ezektől, hogy működési frekvenciája nagyobb: a Z80 maximálisan 2 MHz-es, míg a Z80A 4 MHz-es órajelfrekvenciával üzemeltethető. A legújabb Z80-as mikroprocesszor (Z80B) már maximálisan 6 MHz-en működhet.
Korábban már említettük, hogy a Z80-as család 8 bites mikroprocesszorokból áll, azaz adatforgalma 8 biten történik. Az első mikroprocesszorok 4 bitesek voltak, de újabban mar 16 illetve 32 bites eszközöket is készítenek. Ezek a 8 biteseknél sokkal gyorsabb működésűek, hiszen adott idő alatt több információt továbbíthatnak illetve fogadhatnak. Áruk és más szempontok miatt a hobby célra épített személyi számítógépekben általában még a 8 bites mikroprocesszorokat használják.
A Spectrumban a Z80A órajelfrekvenciája 3,5 MHz (kivéve a video / program-memória olvasását, lásd a 8. fejezetben). Valamennyi CPU művelet az órajelhez időzített, így az órajel 0 - 1 és 1 - 0 átmeneteinek gyorsnak kell lenni, hogy valamennyi művelet végrehajtása minden egyes ciklusban pontosan ugyanabban az időpontban kezdődhessen. Ez tette szükségessé a TR3 tranzisztor és a hozzátartozó ellenállások és dióda beépítését. Az ULA chipről érkező 3,5 MHz-es órajel 0 - 1 átmenete ugyanis nem elég gyors. Mivel a CPU belső áramkörei a 0,8 ... 2 V közötti tartományban különböző értékekre érzékenyek, ha ez az átmenet nem elég gyors (nanoszekundumos nagyságrendről van szó!), a belső áramkörök kapcsolásai időben eltolódhatnak, és ez a Z80 hibás működésére vezethet. A TR3 segítségével a megfelelő állapotváltozási sebességű órajel állítható elő.
4.1 A Z80 KIVEZETÉSEINEK LEÍRÁSA
A csillaggal jelölt vonalak az aktív alacsony logikai szintet ielentik (például RD*), vagyis ezeknél a vonalaknál az "igaz" logikai állapotot az alacsony feszültségszint képviseli. A Pozitív logikai rendszerben egyébként, a logikai 1 = "igaz".
A0 ... A15 | Címsín, háromállapotú vonalakkal (logikai 0, 1 illetve nagy- impedanciájú állapot. Utóbbinál más eszköz szolgáltatja a címet a sín vonalain.) 2^16 = 35536 különböző cím állítható elő a memória megcímzésére, míg a bemeneti / kimeneti eszközök címzésénél 2^8 = 256 eszközcím adható ki (ekkor a nyolc, kisebb helyértékű címvonal érvényes). A CPU dinamikus memóriák frissítését is elvégzi (lásd a frissítés vonalat): ilyenkor a címsín hét kisebb helyértékű vonalára az érvényes frissítési cím kerül. |
D0 ... D7 | Adatsín. Ezen a nyolc háromállapotú, kétirányú vonalon a CPU és a memória ill. a CPU és a perifériák közötti bemeneti-kimeneti adatforgalom bonyolódik. |
M1* | 1-es gépi ciklus. Az ezen a vonalon megjelenő alacsony aktív kimeneti szint azt jelenti, hogy a CPU a következő végrehajtandó utasítás műveleti kódját olvassa be a memóriából. Az IORQ* aktív állapota mellett is megjelenhet, ekkor megszakítás elfogadási ciklust jelent. |
MREQ* | Memóriakérés, háromállapotú kimenet, aktív alacsony szint. Azt jelzi a memóriának, hogy a címsín olvasási vagy írási művelethez érvényes címet tartalmaz. Ez a jel a memória- ill. a beviteli / kiviteli műveletek megkülönböztetéséhez is szükséges. Például a BASIC rendszert tartalmazó ROM áramkörből való olvasás előtt az MREQ*, az RD* és a ROMCS* jeleknek mind aktív állapotban kell lennie. |
IORQ* | Bevitel / kivitel kérés, háromállapotú kimenet, aktív alacsony szint. Azt jelzi, hogy a címsín alsó byte-ja I/O írási vagy olvasási művelethez érvényes címet tartalmaz. Ez a jel a beviteli / kiviteli ill. a memóriaműveletek megkülönböztetéséhez is szükséges. AZ IORQ* és az MREQ* egyidejűleg sohasem lehet aktív állapotban. |
RD* | Olvasás, háromállapotú kimenet, aktív alacsony szint. Azt jelzi, hogy a CPU a memóriából vagy egy I/O eszközről olvasni akar. A megcímzett eszköz ezt a jelet arra használja, hogy a megfelelő adatot a CPU adatsínére adja. |
WR* | Írás, háromállapotú kimenet, aktív alacsony szint. Azt jelzi, hogy a CPU adatsínén a megcímzett rekeszben tárolandó vagy az I/O portra küldendő adat van. A memória ennek a jelnek a segítségével az adatsínen lévő adatot tárolja. |
RFSH* | Frissítés, aktív alacsony szintű kimenet. Azt jelzi, hogy a címsín alsó hét bitje frissítési címet tartalmaz. Ezt dinamikus memóriák frissítésére használjuk. H a dinamikus memóriákat (általában) 2 ms-onként nem frissítjük, tartalmuk elveszik. Ha ez a vonal aktív, a címsín nyolc felső vonalán a CPU I regiszterének tartalma jelenik meg. Ez a tény a Spectrum hardware-ben hibához vezethet. Töltsük az I regiszterbe 64 és 127 közötti tetszőleges értéket, és ekkor a kijelzési tárterület érdekes viselkedését figyelhetjük meg. Az A15 és A14-es címvonalak ugyanis azt a 16 K-s RAM tartományt jelölik ki, amelynek kiolvasásában (normális esetben) az ULA-nak prioritása van. Ebben az esetben azonban - bár a megfelelő cím az MREQ* vonal aktív állapota mellett megjelenik - az RD* vagy WR* vonal a frissítés miatt nem lesz aktív állapotban. A jelek ilyen kombinációja mellett az ULA nem állítja le helyesen a CPU órajelét. Ezt a problémát a 8. fejezetben egy BASIC programmal is illusztráljuk. |
HALT* | Kimenet, aktív alacsony szint. Azt jelzi, hogy a CPU egy HALT utasítást hajt végre. A normál működés folytatásához egy külső eszközről érkező megszakítás-kérés szükséges. A HALT működéséről a 14. fejezetben lesz szó. |
WAIT* | Várakozás, bemenet, aktív alacsony szint. Ezt a jelet lassúbb működésű memóriák, vagy I/O eszközök használják. Jelentése: a memória vagy az I/O eszköz még nincs kész az adatforgalomra. A CPU-nak meg kell várnia, míg ezek a lassúbb eszközök készek lesznek az adatfogadásra vagy -kiadásra. |
INT* | Megszakítás-kérés, bemenet, aktív alacsony szint. Ezt a jelet külső eszközök állítják elő, és hatására a CPU a memória adott címén kezdődő speciális gépi kódú rutint hajtja végre. Ha a belső, software-rel vezérelhető megszakítás engedélyező flip-flop engedélyezett állapotban van, a CPU elfogadja megszakítás-kérést. A flip-flop a CPU belső memóriájában egy bitnek felel meg. Ennek a bitnek az állapotából határozza meg a CPU, hogy a külső eszközökről érkező megszakítás-kérést el kell-e fogadni vagy sem. A megszakításokról további ismereteket a Z80-ról szóló könyvekből szerezhetünk. A megszakítás-kérés vonal használatáról még a 14. fejezetben szó lesz. |
NMI* | Nem-maszkolható megszakítás, a jel lefutó éle hatásos. Az NMI vonalra érkező jelet a CPU aktuális utasításainak végén mindig elfogadja. Ha megszakítás történik, a CPU a decimális 102 (66 hex.) címen kezdődő rutint fogja végrehajtani. |
RESET* | Bemenet, aktív alacsony szint. Ez a jel a CPU alaphelyzetbe állítását váltja ki. A Spectrum rendszerben a tápfeszültség bekapcsolásakor a C27-es kondenzátor ezt a vonalat alacsony szinten tartja mindaddig, míg az az R31-ellenállson keresztül fel nem töltődik. Ez az idő lehetővé teszi a számítógép többi része számára, hogy a megfelelő állapotba kerüljön, mielőtt a CPU a memória 0-s címétől megkezdi a program végrehajtását. A Spectrumhoz illeszkedő RESET-kapcsoló megvalósítását a 14. fejezetben találjuk. |
BUSREQ* | Sín-kérés, aktív alacsony szint. Külső eszközök ezen a vonalon jelzik, hogy a CPU címsínét, adatsínét és háromállapotú kimeneti vezérlő vonalait akarják használni. A CPU az aktuális gépi ciklus befejezésekor adja át a vezérlést. A CPU ezt a tényt a BUSACK* vonal aktivizálásával jelzi. |
BUSACK* | Sínkérés elfogadása, kimenet, aktív alacsony szint. A CPU ezen a vonalon jelzi a külső eszköznek, hogy a sínek vezérlését átadja. |
A Z80-as mikroprocesszor néhány kivezetésének használatáról a későbbi fejezetekben még lesz szó (lásd a 8. a 12. és a 14. fejezeteket.)
5. Fejezet
A KÉPINFORMÁCIÓ ÉS A PROGRAM TÁROLÓJA
Ez a 16 Kbyte RAM mind a 16, mind a 48 K-s Spectrum változatban megtalálható. Ez tárolja a TV-képekhez szükséges valamennyi információt, a rendszerváltozókat, BASIC programjainkat,a munkaterületet, és a 16 K-s gépeknél a felhasználói karaktereket.
A 7. ábrán látható nyolc RAM áramkör (IC7 ... IC14) egyenként 2^14 = 16 Kbit információt tárolhat. Az egyes áramkörök a 8 bites adatsín egy-egy vonalát szolgálják ki. A kevesebb kivezetésszám (kisebb tok) elérése érdekében ezeknél az áramköröknél multiplex címzést alkalmaztak. Ez azt jelenti, hogy a címzésnél először az A0 ... A6 címeket kell megadni, majd az A7 ... A14 -et Ezt a két 7 bites címet a memóriaáramkör (a szükséges ideig)tárolja, és ezek segítségével választja ki a megcímzett rekeszt. A cím-multiplexelést az IC3 és IC4 áramkörök végzik, a megfelelő címcsoport kiválasztását az áramkörök 1-es kivezetésének állapota határozza meg. Az IC3 és az IC4 áramkörök kimeneteinek állapotát az ULA DRAM A0 ... DRAM A6 kivezetései "felülírhatják" (ezt a multiplexer kimeneti vonalakon sorosan elhelyezett 330 ohmos ellenállások biztosítják). Az ULA áramkörnek ez a memóriahozzáférési prioritása teszi lehetővé, hogy a TV-kép előállításához szükséges adatok a megfelelő időben rendelkezésre álljanak. Mi történik azonban, ha a CPU és az ULA egyidejűleg akar hozzáférni a memóriához? Nyilvánvaló, hogy két különböző memóriarekesz egyidejű megcímzése nem lehetséges. E probléma megoldásáról a 8. fejezetben lesz szó.
A Spectrumban dinamikus RAM áramköröket találunk. Egy 16 Kbites RAM áramkörön belül a tárolómező 128 sorból és 128 oszlopból áll. A megfelelő sor- és oszlopcím tárolását a sorcím engedélyező (RAS) és az oszlopcím engedélyező (CAS) jelek vezérlik. Ezután az így két lépésben megcímzett rekeszből már adat olvasható ki, vagy a rekeszbe adat írható. Minden sort legalább 2 ms-onként meg kell címezni, ellenkező esetben a tartalmát "elfelejti". A Spectrumban ez a frissítésnek nevezet művelet a képinformáció kiolvasása idején nem probléma, mivel a folyamatos kép érdekében a video-RAM kiolvasása is megfelelő gyakorisággal történik. A képszinkronizálási időben, amikor mintegy 5 ms-ig nincs kiolvasás, a CPU frissíti a memóriát.
Azokat az írható-olvasható memóriákat, amelyek nem igényelnek frissítést, statikus RAM áramköröknek nevezzük. Mindkét típusú RAM áramkörnél a tápfeszültség lekacsolásakor a tárolt információ elveszik.
A Spectrum kapcsolási rajzán az IC5 jelű áramkör a 16 Kbíte-os csak olvasható memória (ROM). A 28 kivezetéses tokban elhelyezett chip 14 címvonallal, 8 adatvonallal, két chipkiválasztó vonallal, egy kimenet engedélyező vonallal rendelkezik, és természetesen megtalálhatók a tápvezetékek is. Az áramkör kivezetéseinek elrendezését a 8. ábra mutatja.
Ez a ROM áramkör a Spectrum rendszer gépi kódú programját tartalmazza, amelyet a CPU hajt végre a működés során (például egy BASIC program végrehajtása során is). A program "beírása" a chip előállítása során történik, és az többé nem változtatható meg. Ha ez nem így lenne, a tápfeszültség kikapcsolásával a BASIC rendszer is elveszne, illetve a billentyűzetről (software úton) is kárt okozhatnánk benne.
A ROM-program a zérus című rekesznél kezdődik, ugyani s a CPU az alaphelyzetbe állításkor (például bekapcsoláskor) a gépi kódú végrehajtását mindig a zérus címnél kezdi.
A gép hátsó csatlakozósávján a ROMCS* vonalat közvetlenül a +5 V-os tápfeszültségre köthetjük, és így a BASIC ROM működése tiltható. Az ULA áramkör ROMCS* kimeneti vonala az R33-as ellenálláson keresztül csatlakozik erre a pontra, ezért, ha a + 5 V-os bekötés is megtörtént, a vonalat nem tudja alacsony (aktív) szintre állítani. Ez akkor hasznos, ha a BASIC ROM helyett saját ROM vagy RAM áramkört akarunk használni (így például elérhetjük, hogy a Spectrumot a BASIC nyelv helyett más nyelven programozhassuk. A BASIC ROM ilyen helyettesítésével azonban a Specrum hardware és software rendszerének alapos ismerete is szükséges. Az új chipnek a teljes operációs rendszert is tartalmaznia kell.
A Spectrum-ban található ROM áramkörrel azonos kivezetés-kiosztással EPROM (elektromosan programozható, törölhető ROM) áramkörök is kaphatók 8például a 27128 típusjelű, amely szintén 16 Kbyte kapacitású). A felhasználó szempontjából a két áramkörtípus közötti különbséget nevük is jelzi: az EPROM elektromosan programozható. Az így programozott áramkör hasonlóan a ROM-hoz, a tápfeszültség kikapcsolásakor is megőrzi tartalmát. Az EPROM viszont ultraibolya fénnyel törölhető is, és ezután újraprogramozható. A törlés végrehajtása érdekében az EPROM áramkörök tokján a chip felett az ultraibolya sugarakat áteresztő kvarcablak van. Az EPROM-okat így különböző programokkal is használhatjuk.
A billentyűzet alapvetően ötször nyolc egymást keresztező vezetékből áll, amelyek a keresztpontokban az egyes gombokkal hozhatók érintkezésbe (9. ábra).
A nyolc sor egyenkénti kiválasztása sorban a megfelelő címvonal logikai 0 állapotban vitelével történik. (a többi címvonal logikai 1 szinten marad). Az öt oszlop az RP1 ellenállás-hálózatban lévő ellenállásokon keresztül a +5 V-os tápfeszültségre kapcsolódik, vagyis általában logikai 1 szinten van. Ha egy kiválasztott sorban bármelyik gomb lenyomott állapotban van, akkor az ehhez az oszlophoz tartozó ULA bemenet a szokásos logikai 1 szint helyett logikai 0 szintre kerül. A gombot ily módom "leolvashatjuk".
Vegyük például azt az esetet, hogy a "D" gomb van lenyomva! Az IN függvényt végrehajtva arról a címről, amelyben az A9-es vonal kivételével minden logikai vonal 1 szinten van, a bemeneti byte D2-es bitje 0, míg a D0, D1, D3 és D4 bitje logikai 1 értékű lesz. A billentyűzet leolvasása másodpercenként 50-szer történik: így ellenőrzi a Spectrum, hogy lenyomtunk-e gombo(ka)t, és melyiket. A billentyűzet leolvasásának műveletét minden egyes TV-kép kijelzése utána CPU megszakításával az ULA indítja be, a leolvasást ezután a CPU hajtja végre.
Ha valamilyen okból mi is le akarjuk olvasni a billentyűzetet, akkor a következő címeket használhatjuk. (Vegyük észre, hogy ezek a számok tulajdonképpen a leolvasásban használt címvonal kivételével az összes címvonalat logikai 1 szintre állítják. Ezzel a módszerrel a billentyűzet leolvasási gyakoriságára tett megkötést (másodpercenként 50) kiküszöbölhetjük: a leolvasás adott határok között tetszőleges gyakorisággal végrehajtható.)
Az | IN 32766 |
az A15 segítségével a SPACE gombtól a B gombig terjedő félsor olvassa le. |
Az | IN 49150 |
az A14 segítségével az ENTER gombtól a H gombig terjedő félsor olvassa le. |
Az | IN 57342 |
az A13 segítségével a P gombtól az Y gombig terjedő félsor olvassa le. |
Az | IN 61438 |
az A12 segítségével a 0-ás gombtól a 6-os gombig terjedő félsor olvassa le. |
Az | IN 63486 |
az A11 segítségével az 1-ás gombtól az 5-os gombig terjedő félsor olvassa le. |
Az | IN 64510 |
az A10 segítségével a Q gombtól a T gombig terjedő félsor olvassa le. |
Az | IN 65022 |
az A9 segítségével az A gombtól a G gombig terjedő félsor olvassa le. |
Az | IN 65278 |
az A8 segítségével a SHIFT gombtól a V gombig terjedő félsor olvassa le. |
A leolvasott byte-ban a bitek kiosztása a következő:
D0 | - a KBD13 bemeneti ponton lévő logikai szint |
D1 | - a KBD12 bemeneti ponton lévő logikai szint |
D2 | - a KBD11 bemeneti ponton lévő logikai szint |
D3 | - a KBD10 bemeneti ponton lévő logikai szint |
D4 | - a KBD9 bemeneti ponton lévő logikai szint |
D5 | - nem használt |
D6 | - az EAR foglalat logikai szintje |
D7 | - nem használt |
Saját, külső billentyűzet illesztését a Spectrum hátsó csatlakozósávjára a 16. fejezetben leírtak szerint valósíthatjuk meg.
Az ULA a Sinclair cég adott feladatra készített speciális áramköre. Ez az egyetlen áramkör a korábbi számítógépekben használt sok kisebb logikai chipet helyettesíti. Funkcióját a gyártás során végérvényesen meghatározták, ennek megváltoztatása software úton nem lehetséges. Elsődleges funkciója a CPU tehermentesítése az adat be- és kivitelben. Az ULA olvassa ki a TV-képinformációt a memóriából, a beépített hangszóróba és a magnetofonba menő ill. a billentyűzetről és a magnetofonról érkező információt is ez az áramkör kezeli.
8.1 AZ ULA KIVEZETÉSEINEK LEÍRÁSA
DRAM A0 ... DRAM A6 | A memória cím-multiplexer áramköreinek (IC3 és IC4) vonalai. Ezek lehetővé teszik az ULA számára, hogy a CPU által kiválasztott címet meghatározza. Egyúttal az ULA e vonalak segítségével címzi meg a képinformációt tartalmazó memóriarészt. Amikor az ULA ezeket a vonalakat kimenetként használja, a 330 ohmos ellenállások segítségével a cím-multiplexer vonalait "felülírhatja". |
DRAM CAS* | A dinamikus RAM áramkörhöz szükséges oszlopcím engedélyező (CAS*) jelkimenet. Ezt a jelet a dinamikus RAM a cím-multiplexerről érkező oszlopcím tárolásánál használja (lásd az 5. fejezetet). |
ROMCS* | A ROM chipkiválasztó kimenet az IC5 jelű 16 Kbyte-os ROM áramkört engedélyezi, amikor a CPU ebből adatot olvas. Ezt az ULA az A14 és A15-ös címvonalak figyelésével követheti nyomon, így amikor a CPU a ROM-ból adatot olvas, ezzel egyidejűleg a képinformáció kiküldése is megtörténhet. |
IORQGE* | A Z80A IORQ* vonalához az R27-es ellenálláson keresztül csatlakozó bemenet. Ha az IORQGE* vonalat +5 V-ra kötjük, a CPU IORQ* vonalának állapota nem befolyásolja azt. Ez külső I/O eszközök alkalmazásánál hasznos (lásd a 15. fejezetet.) |
RAS* | A dinamikus RAM szükséges sorcím engedélyező jelkimenet. Ez a pont az R27-es ellenálláson (330 ohm) keresztül a Z80A frissítő kimenetére is rákapcsolódik. A dinamikus memóriák frissítését a képszinkronizálás ideje alatt, amikor az ULA mintegy 5 ms-ig nem olvassa a memóriát, így a CPU végezheti. |
KBD9 ... KBD13 | A Spectrum billentyűzetéről érkező vonalak (lásd a 7. fejezetben). |
U | Kék-sárga színkülönbségi jelkimenet. |
V | Piros-sárga színkülönbségi jelkimenet. |
Y | Összetett fényesség és szinkron kimenet a televízió számára. |
D0 ... D7 | Nyolc bites kétirányú adatsín. Ezek a vonalak közvetlenül a video/program-memória adatsínére, ill. 470 ohmos ellenállásokon keresztül a rendszer adatsínére csatlakoznak. Így aszinkron működés lehetséges: az ULA a video-RAM-hoz, míg a CPU a memória többi részéhez férhet hozzá. A számítógép gyorsabb működésű így, mintha az ULA minden ciklusban megszakítaná a működést. |
CLK | 3,5 MHz-es órajel-kimenet a Z80A CPU számára. Ezt az órajelet a video-RAM olvasásakor az ULA leállíthatja (így gátolja meg, hogy a CPU is hozzáférjen a memóriának ehhez a részéhez). |
WR* | Az ULA-nak a CPU írási műveletét jelzi. Ha az írás az ULA-ba történik, ez a jel a beérkező adatok tárolását végzi. |
RD* | Az ULA-nak a CPU olvasási műveletét jelzi. Ha az olvasás az ULA-ból történik, ez az adatokat az adatsínre küldi a CPU számára. |
MREQ* | Az ULA-nak azt jelzi, hogy a címsín érvényes címet tartalmaz egy olvasási vagy írási művelet számára. Ez a jel a memória ill. a bemeneti-kimeneti műveletek közötti megkülönböztetéshez szükséges. |
INT* | A CPU működését megszakító jel, másodpercenként 50-szer fordul elő. Hatására a CPU egy számlálót növel a memóriában, és leolvassa a billentyűzetet. |
8.2 A GÉPEK ELSŐ SOROZATÁNAK (ISSUE 1) ULA HIBÁJA
Az ULA chipek első sorozata sajnos tervezési hibát tartalmazott, amelyet csak később vettek észre. A teljes tétel "kidobása", és a javított chip legyártása súlyos anyagi veszteséget jelentett volna. Ezért az ISSUE 1 sorozatú gépekbe egy kiegészítő áramkör került, amely a 11. ábrán megadott logikai kapcsolást valósítja meg. Ezt az áramkört egy kis nyomtatott áramköri kártyával és 74LS00 logikai chippel valósították meg. (A B. függelékben ennek helyét szaggatott vonallal jelöltük.)
11. ábra: Korrekciós áramkör (ISSUE 1)
A korrekciós áramkör az IORQ* vonalból valamint az A14 és A15 címvonalakból az ULA számára az ULA14 és ULA15 új címvonalakat állítja elő. Az ULA14 vonal logikai 1, míg az ULA15 logikai 0 állapotba kerül az I/O műveletek idejére. E változás előtt az ULA akkor is megszakította a CPU működését, amikor a billentyűzetet olvasta le vagy más IN műveletet hajtott végre. Ennek eredménye az volt, hogy például az INKEY$ függvénnyel történő leolvasáskor az eredmények 50%-a elveszett.
Megjegyzés: az ULA későbbi sorozataiban ezt a hibát kiküszöbölték, így a későbbi sorozatú gépekben a korrekciós áramkörre sincs szükség.
12. ábra |
Az ULA későbbi sorozataiban viszont egy teljesen más jellegű hiba fordul elő. Ennek a problémának a megoldására számos ISSUE 2 sorozatú gépben egy külön tranzisztort is találunk (12. ábra). A kapcsolás hatására az ULA IORQGE* vonala magas szintre kerül, ha a 0-s címvonal (A0) logikai 1 állapotú. Az ULA így csak akkor lesz kiválasztva, ha mind az A0, mind a Z80 IORQ* vonala alacsony szinten van. |
8.3. A VIDEO KIMENŐJEL
A személyi számítógépek többségénél az egyik legnagyobb problémát a kép előállítása jelenti. Különösen így van ez a színes, a Spectrumban is használt nagy felbontású képeknél, ahol a video-memória adatait nagy sebességgel kell a kijelzőbe (TV) juttatni. Ez akkor okoz problémát, amikor a CPU és az ULA egyidejűleg akarja a video-memóriát olvasni. Nyilvánvaló, hogy két eszköz egyidejűleg nem címezhet meg egy memóriában két különböző rekeszt. A legtöbb számítógépnél a következő két megoldás egyikét használják a fenti probléma megoldására:
A Spectrumban nagyon egyszerűen oldották meg ezt a problémát. Tegyük fel, hogy az ULA éppen a video-memóriát olvassa. Ezzel egyidőben a CPU hozzáférhet a ROM-hoz, vagy a 32 Kbyte RAM bővítéshez (a 48 K-s gépeken) anélkül, hogy ez a síneken bármi problémát okozna. Az ULA és a video-memória cím- és adatsínének vonalait a rendszer többi részétől 330 ohmos soros ellenállások választják el. Általában tehát két különálló, egymástól független rendszer működik: az ULA a képinformációt küldi ki, míg a CPU a BASIC rendszert működteti. Előfordul azonban, hogy a CPU és az ULA által használt 16 Kbyte-os memóriatartományhoz, hiszen a képinformáción kívül ebben találhatók a BASIC rendszerváltozók is. Az ULA ezt az A14 és A15-ös címvonalak figyelésével állapítja meg, és ekkor a CPU órajelét leállítja. A Z80A ezt nem veszi észre, mivel számára az időmérés egyetlen módja az, hogy órajelbemenetét állandónak feltételezi. Az ULA ehhez a memóriarészhez a hozzáférést a CPU-nak a video jelkimenet rövid szüneteiben engedélyezi.
Kérdés ezután, hogy a Spectrumban alkalmazott megoldás hogyan érinti programjainkat. A BASIC nyelven írt programoknál semmi probléma nincs, de ha az érintett 16 Kbyte-os memóriaterületen elhelyezkedő gépi kódú programot futtatunk, a rutinok időzítése nem lesz állandó. Általában ennek nincs jelentősége, de a kritikus időzítőciklusokat tartalmazó rutinok (például a hangszórót megszólaltató rutinok) már nem fognak helyesen működni. A BASIC-ben használt BEEP utasítás viszont jól működik, mivel az ezt végrehajtó gépi kódú rutinok a ROM-ban találhatók.
8.4 A MEGSZAKÍTÁSOK
Ha gépi kódú rutinokat használunk, gyakran a vektoros megszakításokat is alkalmazni akarjuk. Amikor a CPU normál működését megszakítjuk (ezt az állapotot például külső hardware elemeink hozhatják létre), ekkor a CPU-t egy olyan rutin végrehajtására utasíthatjuk, amelynek kezdőcíme a memóriában található, és erre a helyre egy 16 bites címmutató mutat. Ezt a 16 bites címmutatót a CPU I regiszterének tartalma és a megszakító eszköz által megadott byte (8 bit) alkotja. Az I regiszter ebben az esetben az A8 ... A15 vonalakat adja meg. Tegyük fel, hogy a megszakítási rutinunk címe az ULA által is használt 16 Kbyte-os memóriatartományban van. Ekkor az I regiszter a decimális 64 és 127 közötti értéket fog tartalmazni (A15=0, A14=1). A CPU minden egyes utasításciklusa során frissítésre is sor kerül. A frissítésnél az I regiszter tartalma az A8 ... A15 címvonalakra kerül, és az MREQ* aktív állapotú lesz. A jelek ilyen kombinációja az ULA számára azt jelenti, hogy a CPU a video-memóriába írni, vagy onnan olvasni akar. Erről azonban nincs szó, az ULA működését viszont megzavarja, és bizonyos ideig a képinformáció küldése elmarad, ami "havas" képernyőt eredményez.
A fenti esetet a következő BASIC programmal illusztrálhatjuk. (Az I regiszter számára decimális 64 és 127 közötti értéket írjunk be.)
10 CLEAR 32499
20 INPUT "Ird be az I regiszter tartalmat!";v
30 POKE 32500,62: REM LD A,v
40 POKE 32501,v
50 POKE 32502,237: REM LD I,A
60 POKE 32503,71
70 POKE 32504,201: REM RET
80 LET a= USR 32500
90 GO TO 20
A 10-es sor biztosítja, hogy a BASIC rendszer a decimális 32499-es címig bezárólag használja a memóriát., A 30 ... 70-es sorok a gépi kódú programot töltik a memóriába. Az I regiszter értékét mi adjuk meg, és ezt a gépi kódú program tölti be a regiszterbe. A gépi kódú programról való visszatérés után a 90-es sor hatására a teljes BASIC program végrehajtása ismétlődik meg.
8.5 ÓRAJELEK
Az ULA (az X1 jelű kristály segítségével) előállítja saját mesterórajelét: ez az órajel 14 MHz-es. A mesterórából 2-vel való osztás útján kapjuk a 7 MHz-es videofrekvenciát. Újabb 2-vel való osztással a Z80A 3,5 MHz-es órajelét állítja elő az ULA. Ezt, mint korábban láttuk, az ULA rövid időre leállíthatja.
8.6 A BILLENTYŰZETRŐL ÉS A MAGNETOFONRÓL ÉRKEZŐ BEMENETEK
Ha a 254-es című I/O portról egy byte-ot leolvashatunk, akkor a D0 ... D4 bitek logikai szintjei az ULA KBD13 . KBD9 bemeneti pontjainak logikai állapotát fogják tartalmazni. Egy gomb megnyomásánál a megfelelő bit értéke 0, ellenkező esetben 1. A D6-os bit a magnetofonról érkező (EAR) bemeneti szintet képviseli.
8.7 A HANGSZÓRÓ, A MAGNETOFON ÉS A BORDER SZÍN KIMENETEI
A 254-es című portra kiadott byte D2, D1 és D0 bitjei a border színt határozzák meg. Ha mindhárom bit értéke logikai 1, akkor fehér, ha mindhárom logikai 0, akkor fekete színt kapunk.
Bár a magnetofon és a beépített hangszóró bemenete illetve kimenete az ULA 28-as kivezetéséhez csatlakozna (13. ábra), ezek mégis egymástól függetlenül működnek.
A 254-es című portra kiadott byte D3-as bitje a MIC csatlakozót hajtja meg, a D4-es bit pedig a hangszórót. A működési mód a következő táblázatból olvasható ki:
D4 (hangszóró) |
D3 (MIC) |
az ULA 28-as kivezetésén lévő feszültség |
0 |
0 |
0,75 V |
0 |
1 |
1,3V |
1 |
0 |
3,3 V |
A magnetofon MIC csatlakozójára kerülő 1,3V-os feszültség nem elegendő a hangszóró meghajtására, mivel a D9 és a D10 jelű diódákon 1,4V esik. Így a hangszóró nem működik a programok felvételekor vagy visszatöltéskor. Ha viszont a magnet+ofont bekapcsolva hagyjuk, amikor a beépített hangszórót működtetjük (3,3 V), ezt a hangot a magnetofon felveszi. Megtehetjük azt is, hogy a MIC (nagy impedancia) vagy az EAR (kisebb impedancia) csatlakozóra egy erősítő bemenetét csatlakoztatjuk, így a számítógép által keltett hangot felerősíthetjük.
9 Fejezet
A MEMÓRIABŐVÍTÉS LEHETŐSÉGE
Az ISSUE sorozatú 16 K-s Spectrumok memóriájának 48 Kbyte-ra való bővítéséhez a 32 Kbyte RAM-ot a központi NYÁK-on található két foglalat pontjaihoz kell csatlakoztatni. Erre a két foglalatra a cím- és az adatsín vonalait, valamint a CPU memóriavezérlő jeleit vezették ki. (14. ábra).
14. ábra: Memóriabővítő foglalatok (ISSUE 1)
A Sinclair cég ezt a bővítést 8 db 32 Kbites memóriával oldotta meg (ezek kényegében 64 Kbites chipek, de itt csak a kapacitásuk felét hasznosítjuk. Ha a könnyebben beszerezhető 4116 típusjelű 16 Kbites memóriachipeket használjuk, akkor 16 áramkör szükséges. Ezek tápigényét azonban az eredeti tápegység már nem tudja kielégíteni, így külön tápegységre is szükségünk lesz.
Megjegyzés: az ábrán is látható 16 és 14 kivezetése két bővítő foglalatot csak az első hatvanezer Spectrum számítógépnél (ISSUE 1) találjuk meg. A későbbi gépeknél (ISSUE 2 és 3) már kialakították a memóriaáramkörök foglalatait, így ezeket az áramköröket közvetlenül a központi NYÁK-on kell elhelyezni.
A 15. ábrán megadott memóriabővítő kapcsolás hasonlóképpen működik, mint az 5. fejezetben bemutatott 16 K-s alapmemória. A különbség az, hogy a sorcím engedélyező (RAS) és az oszlopcím engedélyező (CAS) vonalakt nem az ULA, hanem külön logikai áramkörök állítják elő.
Ez a kapcsolás a következő három üzemmódban működhet:
Olvasás a memóriából
Amikor a CPU ebből a 32 K-s memória tartományból akar adatot olvasni, az A15-ös címvonal logikai 1 szintű lesz, az RD* és a MREQ* vonalakat pedig aktív állapotba (alacsony szintre) állítja a Z80A. Az MREQ* vonal magasból alacsony szintre történő átmenete a RAS* vonalat alacsony szintre állítja, amely az A0 ... A7 címvonalak tárolását végzi a nyolc dinamikus RAM chipben. A cím-multiplexer az A0 ... A7 vonalak érvényes értékét mindig akkor küldi a memóriaáramkörökhöz, amikor az MREQ* jel magas szintű. Az R71 és C63 elemekből álló RC-tag biztosítja, hogy az MREQ* jelváltás megfelelő késleltetéssel érje el a cím-multiplexereket. Így a memóriaáramkörök számára elegendő idő áll rendelkezésre az A0 . A7 címvonalak tárolására, mielőtt a multiplexerek az A8 ... A14 vonalakat küldenék. Az R70 és C64 a CAS* jelet késleltetni, így a multiplexereknek biztosít időt a címvonalak beállítására. A CAS* aktív állapota a dinamikus memóriachipnek mind a 15 címvonalon elvégezték az érvényes cím tárolását, és rövid időn belül az adatsínen a CPU rendelkezésére áll a kívánt adat.
Írás a memóriába
Ha a CPU a 32 K-s memóriabővítésben akar adatot elhelyezni, az A15-ös címvonal logikai 1 szintű lesz, a WR* és az MREQ* vonalakat pedig aktív állapotba (alacsony szintre) állítja a CPU. Az írás és az olvasás között az a különbség, hogy a dinamikus memóriák WR* vonala kerül aktív szintre, nem az RD*. Ebből "tudja" a memória, hogy az adatkiadás helyett az adatsínről adatot kell tárolni.
A Spectrum video áramköre a National Semiconductor LM 1889N típusjelű integrált áramköréből és néhány kiegészítő elemből épül fel (a teljes kapcsolás a 16. ábrán látható).
Ez az integrált áramkör az ULA két színkülönbségi jeléből (U = kék-sárga, V = piros-sárga) egyetlen színkimeneti jelet állít elő. A színkülönbségi jelek használata gazdaságosabb, mint a külön piros, zöld és kék (RGB) színjelek alkalmazása, mivel a három helyett csak két áramköri egység szükséges. A színjel és a beérkező video szinkron és fényességi jel (az ULA Y jele) keveréséből kapjuk az összetett színes videojelet. A TR2-es tranzisztorból álló illesztőfokozaton keresztül ez a jel a video modulátorba kerül. Ez a fokozat lehetővé teszi, hogy a képinformáció egy szokásos otthoni televízión megjeleníthető legyen. Néhány színes monitorhoz az RGB színjelek szükségesek: mivel itt ezek nem állnak rendelkezésre, az ilyen monitorok megfelelő illesztőegység nélkül a Spectrummal nem használhatók. A televízión nyerhető viszonylag gyengébb minőségű képen tehát úgy segíthetünk, ha olyan színes monitort használunk, amelyhez az összetett videojel is megfelelő.
A VR1 és VR2 jelű állítható ellenállásokkal a piros-sárga ill. a kék-sárga jelek relatív erősítését állíthatjuk be. Ezek változtatásával színminőséget ill. a szürkeségi szintet állíthatjuk (lásd a következő fejezetben).
A video IC képes a hangjel megfelelő hozzákeverésére is, ezzel azonban csak hozzáértőknek érdemes kísérletezni.
11. Fejezet
A VIDEO ÁRAMKÖR BEÁLLÍTÁSA
11.1 A KARAKTEREK SZÉLEIN MEGJELENŐ MOZGÓ "CSÍKOZÁS" MEGSZÜNTETÉSE
Számos Spectrum gépnél előforduló hiba, hogy a karakterek szélein zavaró csíkozás jelenik meg. Ezt az ULA 14 MHz-es órajele okozza, és kiküszöbölése az ISSUE 1-es és ISSUE 2-es gépeken az órajelfrekvencia kismértékű megváltoztatásával lehetséges. Ezt a VC1 jelű változtatható kondenzátor hangolásával valósíthatjuk meg a következő módon. Írjuk tele a képernyőt, erre például egy program listája megfelelő- Ezután fordítsuk meg a számítógépet, és ha Spectrumunk az első sorozatból való, a hátoldalon egy kis lyukat, és ebben egy csavarfejet találunk. Ha ez a lyuk nincs a hátlapon, akkor a Spectrum borítását le kell vennünk (öt csavar kicsavarása), és a billentyűzetet (amíg a csatlakozókábel engedi) óvatosan fel kell emelnünk. A központi NYÁK rögzítő csavarját eltávolítva a NYÁK szabaddá válik, és megfordítható. Itt keressük meg az előbb már említett csavarfejet, és csavarhúzóval óvatosan jobbra majd balra forgassuk el. Ennek hatását figyeljük a képernyőn! Állítsuk be a legmegfelelőbb képet! A csavar teljes körülforgatásakor az eredeti beállítást valósítja meg.
Gyakran a televízió pontosabb hangolása segíthet! Figyeljünk arra is, hogy a számítógép melegedésével a kristály elhangolódik. Így a beállításokat mindig a számítógép néhány perces bemelegedése után végezzük. Ha működés közben a csíkozás újra jelentkezik, ismét állítsunk a VC1 kondenzátoron.
11.2 A SZÍNEK ILL. A SZÜRKESÉGI SZINT ÁLLÍTÁSAI
A színeket legegyszerűbben a televízió színszabályozó kezelőszerveivel állíthatjuk. Ugyanígy a szürkeségi szintet a TV fényerő és kontraszt szabályozójának változtatásával állíthatjuk be. Az alábbiakban azt írjuk le, hogyan állíthatók a színek az ISSUE 1-es és 2-es Spectrum-on belül. Itt a színek (szürkeségi szint) beállításáról lesz szó: ha a kép egyáltalán nem színes, akkor a 13. fejezetben leírtakat olvassuk el.
A színek ill. a szürkeségi szint beállításához a fejezet előző pontjában leírt módon a számítógép borítását éle kell szerelnünk. A képernyőn megjelenített képen szerepeljen minden szín! (Ezt például a BASIC Programozási Kézikönyv 16. fejezetének elején lévő program futtatásával valósíthatjuk meg.) Ezután csavarhúzóval óvatosan állítsunk a VR1 és a VR2 változtatható ellenállásokon! (Ezek pozícióját az A. függelékben megadott beültetési rajz segítségével állapíthatjuk meg.) A beállítás közben figyeljük a színeket a képernyőn: a VR1 a piros-sárga, a VR2 a kék-sárga színamplitúdót állítja. A két elem együttes állításával a zöld színt szabályozható. A végső beállítás természetesen az egyéni ízléstől is függ.
Az ISSUE 3 és ISSUE 3B sorozatú gépekben gyárilag fixen beállították ezeket az arányokat, ennek megváltoztatása összetett feladat, de erre általában nincs is szükség.
Ebben a fejezetben a Spectrum hátsó csatlakozósávjának egyes pontjain hozzáférhető jeleket vesszük sorra. Ezekkel kapcsolatban néhány felhasználási lehetőséget is megemlítünk, míg részletesebb gyakorlati tanácsokat a 14. fejezetben találunk.
A csatlakozósávon a tájékozódást a 28A és 1A pont felirata segíti: a 28B pont a 28A alatt, míg az 1B pont az 1A alatt helyezkedik el. A 17. ábra a Spectrum hátsó lapját és a csatlakozósáv elhelyezkedését mutatja. (Figyelem: a BASIC programozási kézikönyvben a csatlakozósáv fordított állású!)
17. ábra: A csatlakozósáv
A oldal | |
1A | A címsín A15-ös vonala, Ez a többi címvonallal külső eszközök kiválasztására kimenetként, ill. a BUSREQ* vonallal együtt (a CPU-tól a vezérlést átvéve) külső eszközről bemenetként használható. |
2A | A címsín A13-as vonala. |
3A | Az adatsín D7-es vonala. Ez a kétirányú, 8 bites sín az adatforgalmat bonyolítja le. |
4A | Nincs bekötve. |
5A | Az illeszkedő csatlakkozó helyes pozícióját biztosító üres rész. |
6A | Az adatsín D0-ás vonala. |
7A | Az adatsín D1-es vonala. |
8A | Az adatsín D2-es vonala. |
9A | Az adatsín D6-os vonala. |
10A | Az adatsín D5-ös vonala. |
11A | Az adatsín D3-as vonala. |
12A | Az adatsín D4-es vonala. |
13A | INT* vonal, amely a Z80A megszakítás kérés kivezetésére ill. az R26-os ellenálláson (680 ohm) keresztül az ULA INT* kivezetésére csatlakozik. Ezt a külső eszköz megszakítás kérésére használhatja, ill. a +5 V-ra kötésével meggátolhatjuk, hogy az ULA 20 ms-onként megszakítsa a CPU működését. (Gyakorlati alkalmazását lásd a 14. fejezetben!) |
14A | NMI* vonal: a Z80A nem maszkolható bemeneti vonala. Normális esetben az R28-as ellenálláson (10 kohm) keresztül +5 V-ra kapcsolódik. Ha egy külső eszköz alacsony logikai szintre állítja, a CPU a decimális 102-es (66 hex.) címen kezdődő gépi kódú rutint fogja végrehajtani. (Ez a rutin sajnálatos programozási hibakövetkeztében a Spectrumban nem működik helyesen. (Lásd a 14. fejezetben!) |
15A | A CPU HALT* kimeneti vonala: azt jelzi, hogy a CPU a HALT utasítást hajtja végre. A program végrehajtásának folytatásához a CPU egy külső eszközről érkező megszakítást vár. (Gyakorlati alkalmazását lásd a 14. fejezetben!) |
16A | A CPU MREQ* kimeneti vonala: azt jelzi, hogy a címsínen érvényes cím van jelen (a memória olvasásához, vagy írásához). Ez a vonal a memória frissítése idején is aktív állapotban van. |
17A | IORQ*, a Z80A bemenet / kimenet kérés vonalához közvetlenül csatlakozó pont. Azt jelzi, hogy a címsín alsó byte-ja érvényes I/O címet tartalmaz. A címsín felső byte-ja az IN A,n vagy az OUT n,A gépi kódú utasítás esetében ekkor a CPU A regiszterének tartalmát adja. Az 'n' érték a címsín alsó byte-ján jelenik meg. Ha regiszter-indirekt I/O művelet végrehajtása történik, a CPU C regiszterének értéke az A0 ... A7, míg a CPU B regiszterének értéke az A8 ... A15 címvonalon jelenik meg. A BASIC rendszerből teljes, 16 bites I/O cím határozható meg. Ez az IORQ* vonal aktív állapotánál az A0 ... A15 vonalakon jelenik meg. |
18A | A Z80A RD* kimeneti vonala. Azt jelzi, hogy a CPU a memóriából vagy egy I/O eszközből adatot akar olvasni. A megcímzett eszköz ennek a jelnek a segítségével a kívánt adatot juttatja az adatsínre. |
19A | A Z80A WR* kimeneti vonala. Azt jelzi, hogy a CPU adatsínén a megcímzett rekeszben tárolandó adat van. |
20A | -5 V (lásd a tápegységről szóló részt) |
21A | WAIT*, a Z80A várakozás bemenetére csatlakozó pont, amely az R29-es ellenálláson (1,5 kohm) keresztül +5 V-ra kapcsolódik. Ezt a bemenetet lassúbb eszközök használhatják annak jelzésére, hogy az adatforgalomra még nem készek. Ezt a vonalat nem szabad hosszabb ideig (1 ms-nál tovább) aktív állapotban tartani, mivel a várakozás alatt a dinamikus memóriák frissítése szünetel. |
22A | +12 V (lásd a tápegységről szóló részt) |
23A | +12 V (a Spectrum eredeti gépkönyvében hibásan -12 V szerepel) Ez a pont a TR4-es tranzisztor kollektorára csatlakozik, tehát itt szabályozatlan +12 V-ot kapunk, ami közvetlenül nem használható tápfeszültségként. (Erre a célra a 22A pont a megfelelő) A -12 V előállítására a 3. fejezetben találunk kapcsolást. |
24A | A Z80A 1-es gépi ciklusát jelző M1* vonal. Azt jelzi, hogy a CPU a következő végrehajtandó utasítás műveleti kódját hívja le a memóriából. |
25A | A Z80A memóriafrissítő jelkimenete, RFSH*. A memóriafrissítés alatt a CPU R regiszterének tartalma az A0 ... A7 vonalakon, míg a CPU I regiszterének tartalma az A8 ... A15 vonalakon jelenik meg. Érdekes eredményre vezet, ha az I regiszter tartalma decimális 64 és 127 közötti (lásd a 8. fejezetben). |
26A | A címsín A8-as vonala. |
27A | A címsín A10-es vonala. |
28A | Nincs bekötve. |
B oldal | |
1B | A címsín A14-es vonala. |
2B | A címsín A12-es vonala. |
3B | +5 V |
4B | A hálózati tápegység +9 V szabályozatlan feszültsége. |
5B | Az illeszkedő csatlakozó helyes pozícióját biztosító üres rész. |
6B | 0 V A tápegység földvezetékét két pontra is kivezették. |
7B | 0 V A túlterhelés elkerülése érdekében külső áramköröknél mindkettőt használjuk. |
8B | CLK: az ULA 3,5 MHz-es órajel kimeneti pontja. Segítségével külső eszközök és a Z80A szinkronizálása valósítható meg. Figyelem: az ULA ezt az órajelet leállíthatja, amikor a CPU a képinformációt is tartalmazó 16 K-s RAM területet használja (lásd a 8. fejezetben). |
9B | A címsín A0-ás vonala. |
10B | A címsín A1-es vonala. |
11B | A címsín A2-es vonala. |
12B | A címsín A3-as vonala. |
13B | Az ULA IORQGE* bemeneti vonalára közvetlenül csatlakozó pont. A Z80A IORQ* kimenetére az R27-es ellenálláson (680 ohm) keresztül csatlakozik. Ha az IORQGE* pontot +5 V-ra kötjük, az ULA a Z80A IORQ* jelét nem fogja elfogadni. Ez a felhasználói I/O eszközök által elérhető eszközök számának növelésénél lehet hasznos. Az A7 az IORQGE* jel tiltására használható, míg az A0 ... A6 tetszőleges kombinációjával 128 I/O eszközből választhatunk ki egyet (erre példát a 14. fejezetben találunk.) |
14B | 0 V A video-jelekhez használható földvonal. |
15B | VIDEO |
16B | Y |
17B | V |
18B | U A Spectrum video-jelei. Ezek néhány gépben nincsenek bekötve a megjelölt pontra, Ha használni akarjuk (például egy monitorhoz), akkor a bekötést nekünk kell elvégezni. |
19B | BUSRQ* A Z80A sínkérés bemenetére csatlakozó pont, amely az R30-as ellenálláson (1 kohm) keresztül +5 V-ra kapcsolódik. Ezt a vonalat külső eszközök akkor használják, ha a CPU síneinek vezérlését át akarjuk venni. A CPU az aktuális gépi ciklus befejezésekor adja át a vezérlést, amit a BUSACK* vonal aktív állapotba (alacsony szint) állításával jelez. |
20B | RESET A Z80A alaphelyzetbe állító bemeneti vonala. Erre a vonalra egy RC-tagból álló késleltetést építettek be, amely a tápfeszültség bekapcsolásakor a számítógép megfelelő helyzetbe állítását teszi lehetővé, mielőtt a CPU megkezdené a program végrehajtását. E vonal és a föld közé RESET nyomógombot iktathatunk (18. ábra). A gomb megnyomásával a CPU alaphelyzetbe állítható: ez egyszerűbb és sokkal kíméletesebb megoldás, mintha a tápfeszültség csatlakozót kihúznánk, majd újra visszadugnánk. (A RESET kapcsoló akkor is nagyon hasznos, ha a számítógépben lévő BASIC ROM áramkört más funkciót ellátó áramkörre cseréljük.) |
21B | A címsín A7-es vonala. |
22B | A címsín A6-os vonala. |
23B | A címsín A5-ös vonala. |
24B | A címsín A4-es vonala. |
25B | ROMCS* közvetlenül a ROM áramkör chipkiválasztó bemenetére, ill. az R23-as ellenálláson (680 ohm) keresztül az ULA ROMCS* kimeneti vonalára csatlakozik. Ha ezt a vonalat +5 V-ra kötjük, a 16 K-s BASIC ROM a Spectrum memóriájából "eltűnik". Természetesen ilyenkor más helyen (például külső memóriában) gondoskodni kell helyettesítő programról, különben a számítógép működésképtelen. |
26B | BUSACK* A Z80A ezen a vonalon egy külső eszköznek a sínkérés elfogadását jelzi (lásd BUSRQ*). |
27B | A címsín A9-es vonala. |
28B | A címsín A11-es vonala. |
A Spectrum bonyolult rendszer, amelyben számos hiba előfordulhat. Ezek közül a legtöbbnek nagyon egyszerű oka van: tökéletlen csatlakozás, hibás hangolás, vagy kiégett biztosíték. Ebben a fejezetben ezeknek a triviális hibáknak a behatárolásával foglalkozunk, az összetettebb hibák felderítését és javítását bízzuk szakemberre.
HIBAJELENSÉG: nincs kép a televízión
Hajtsuk végre a következő lépéseket:
HIBAJELENSÉG: a kép nem színes
(Figyelem: a Spectrum csak PAL rendszerű színes adások vételére alkalmas TV-n ad színes képet!)
Hajtsuk végre a következő lépéseket:
HIBAJELENSÉG: véletlenszerűen elhelyezkedő grafikus ábrák a képernyőn
Ennél a hibánál a tápfeszültség rákapcsolása után a képernyőn nem jelenik meg a copyright felirat, hanem véletlenszerűen elhelyezkedő különböző színű grafikus ábrákat láthatunk. Ha a Spectrumhoz nincs saját készítésű áramkörünk, csatlakoztatva, a javítást szakemberrel kell végeztetnünk. A hibát általában a nem megfelelő tápfeszültség szabályozás vagy egy integrált áramkör hibája okozza. A nem kielégítő tápfeszültséget külső áramkörünk is okozhatja, ezért ezt kapcsoljuk le a számítógépről, és ehhez használjunk külön tápforrást.
A külső áramkörök hosszúvezetékei is problémát okozhatnak. Ezeket vagy rövidítsük le, vagy alkalmazzunk meghajtó / puffer áramköröket.Ha a számítógéphez nem csatlakoztattunk külső áramkört, a hiba legvalószínűbb okozója a tápfeszültségben lesz. Erről úgy is meggyőződhetünk, hogy a tápfeszültség ráadásakor megfigyeljük, hogy a gépből hallható-e egy jalk hang. A tápfeszültség helyes működéséhez ezt hallanunk kell.
A tápfeszültség hiba elhárításával is megpróbálkozhatunk: előbb a TR4 (kisteljesítményű NPN), majd a TR5 (kisteljesítményű PNP) tranzisztorokat cseréljük ki.
14. Fejezet
A CSATLAKOZÓSÁV HASZNÁLATA - GYAKORLATI TANÁCSOK
Ebben a fejezetben a Spectrum kiegészítő áramköröket építők számára mutatunk be néhány egyszerű kapcsolást, ill. ezekhez kapcsolódó tesztprogramot. Itt felhasználhatjuk a 12. fejezetben a Spectrum hátsó csatlakozósávjának egyes kivezetéseiről leírtakat.
Áramköreink megfelelő csatlakoztatásához egy olyan 28 késes, kétoldalas 0,1 hüvelyk osztású csatlakozósávra van szükségünk, amely az 5-ös pozícióban illesztősávot tartalmaz. Áramköreinket célszerűen először egy próba NYÁK-on építsük meg. Ügyeljünk a vezetékek hosszára: ezek legyenek a lehető legrövídebbek. A példákban szereplő néhány áramköri tok meghajtása a Spectrum számára nem jelent problémát, de a több áramkört tartalmazó kapcsolásoknál már megfelelő illesztésről is gondoskodni kell.
14.1 RESET KAPCSOLÓ
A 18. ábrán látható egyszerű kapcsolásban egy nyomógombot iktattunk a csatlakozósáv RESET* és 0 V pontjai közé.
18. ábra: RESET kapcsoló
A nyomógomb zárásakor a RESET* vonal 0V-ra kerül, és ez a Z80A mikroprocesszort alaphelyzetbe állítja. A nyomógomb felengedésekor a C27 jelű kondenzátor az R31 ellenálláson keresztül feltöltődik. Amikor a RESET* pont feszültsége eléri a logikai 1 szintet, a Z80A 0-s címtől kezdve a gépi kódú program végrehajtását kezdi meg. A kapcsoló használata egyenértékű a tápfeszültség kikapcsolásával, így a memóriában tárolt program törklődik.
14.2 A HALT* VONAL
A HALT* vonal a Z80A kimenete, amely aktív (logikai 0) szintnél azt jelzi, hogy a CPU egy HALT utasítást hajt végre, és egy külső eszközről érkező megszakítást vár. A várakozásnál a CPU tulajdonképpen NOP utasításokat hajt végre, amelyek a HALT tartamától függetlenül biztosítják a memóriafrissítési műveletek végrehajtását.
19. ábra: A HALT* és az NMI* kapcsolás
Csatlakoztassuk a 19. ábrán látható fényemittáló diódából (LED) és ellenállásból álló kapcsolást, majd futtassuk a következő programot:
10 CLEAR 32499
20 POKE 32500,118: REM HALT
30 POKE 32501,201: REM RET
40 LET a=USR 32500
50 GO TO 40
A 10-es sor a két utasításból áll gépi kódú program számára biztosít helyet. A 20-as és 30-as sor ezt a gépi kódú programot írja be, amely egy HALT és a BASIC rendszerre való visszatérést biztosító RET utasításból áll (ez akkor következik be, amikor az ULA-ról megszakítás érkezik). A 40-es sor a gépi kódú program végrehajtását indítja el. A LED világítani fog, amikor a program eléri a 40-es sort, majd kialszik, amikor az ULA megszakítja a CPU működését. Ezután a RET utasítás is sorra kerül, és a BASIC program újra a 40-es sort hajtja végre, tehát a LED újra világít, és így tovább. Mivel az ULA másodpercenként 50-szer küld megszakító jelet a CPU-ba, a LED 50 Hz frekvenciával villog.
14.3 AZ NMI* VONAL
A 19. ábrán látható kapcsoláshoz csak egy nyomógomb szükséges az NMI* és a 0 V pontok közé. A nyomógomb megnyomása aktív állapotba állítja az NMI* vonalat, és ennek hatására a CPU a 66 hex. (decimális 102) címen kezdődő megszakítást kiszolgáló rutint fogja végrehajtani. Ez a rutin a Spectrumban a rendszer alaphelyzetbe állítását (System RESET, ugrás a 0-s címre) hajtja végre, ha az NMIADD rendszerváltozó zérus tartalmát nem változtatjuk meg, így hatása megegyezik a RESET gomb hatásával. (Az NMIADD rendszerváltozó a decimális 23728 és 23729 ill. 5CB0 és 5CB1 hex. Címen helyezkedik el.
14.4 AZ INT* ÉS AZ IORQGE* VONAL
A 20. ábrán látható kapcsolás szerint a megfelelő vonalakat a kapcsolókkal a +5 V-os tápfeszültséghez köthetjük, (A 100 ohmos ellenállások áramkorlátozást hajtanak végre.)
20. ábra: Az INT* és az IORQGE* kapcsolás
Írjuk be a következő programot:
10 CLS
20 PRINT AT 0,0;PEEK 23672+256*PEEK 23673
30 GO TO 20
Mindkét kapcsoló legyen nyitott állapotban. A program futtatásakor a képernyő tetején növekvő számot látunk, amely a számítógép bekapcsolósa óta a CPU megszakításainak számát adja. Zárjuk rövidre az INT kapcsolót! Az órajel leáll, és a BASIC program BREAK gombbal nem szakítható meg. Kapcsoljuk ki az INT kapcsolót: a számlálás folytatódik, és a billentyűzet is újra használható.
A tapasztalataink magyarázata a következő: a számlálás (és a billentyűzet működése) a megszakításoktól függ. Az ULA másodpercenként 50-szer aktív állapotba állítja az INT* vonalat. Ennek hatására a CPU egy olyan gépi kódú rutinra ugrik, amely a billentyűzetet olvassa le, és egy 3 byte-os számlálót eggyel növel. Amikor az INT* vonalat +5 V-ra kapcsoljuk, az ULA megszakító jele nem érheti el a CPU-t. A CPU tehát nem olvassa le a billentyűzetet, és a számlálót sem növeli mindaddig, míg megszakítás nem érkezik. Tehát a billentyűzet is hatástalan lesz, és a számlálás is leáll.
Ezután írjuk át a 10-es sort:
10 FOR t=1 TO 30: BEEP 0.01,t: NEXT t: GO TO 10
A program futtatásakor egyre magasabb hangot fogunk hallani. Zárjuk rövidre az INT kapcsolót! Ez hatástalan lesz, és a hangot továbbra is hallani fogjuk. (Az INT* csak a CPU ULA-ból származó bemenetét befolyásolja, a CPU kimenetét nem.) kapcsoljuk ki az INT kapcsolót, és kapcsoljuk be az IORQGE kapcsolót! A hang megszűnik, és a billentyűzet is hatástalanná válik, de ezúttal teljesen más okból, mint az előbb. Nézzük meg miért! Az ULA valamennyi I/O művelete azon a tényen alapul, hogy az ULA érzékelni tudja, hogy a CPU adatot küld vagy fogad. Az ULA a címvonalak, az RD*, a WR* és az IORQGE* vonalak állapotából állapítja meg a CPU üzemmódját. Amikor az IORQGE* vonalait +5 V-ra kapcsoljuk, a Z80A IORQ*vonalának aktív szintje nem hatásos az ULA-nál, így a két eszköz közötti kommunikáció megszűnik. A 3 byte-os számláló működése viszont akadálytalan, mivel az ULA továbbra is előállíthatja a másodpercenkénti 50 megszakító jelet.
14.5 128 I/O PORT CSATLAKOZTATÁSA
A Spectrumban az I/O port címek dekódolásának nagyon egyszerű formáját választották. Az A0 címvonal az ULA-t, az A1 a ZX nyomtatót, az A2, A3 és A4 pedig a Microdrive egységeket és az RS232 illesztőegységet választja ki. Egy I/O művelet idején e címvonalak közül csak egy lehet logikai 0 állapotú (ellenkező esetben egyidejűleg több eszköz kísérli meg használni az adatsínt). Az általunk készített áramkörök kiválasztására tehát az A5, A6 és A7 címvonal áll rendelkezésre (ezekkel viszont maximálisan csak például egy PIO áramkör címezhető meg - lásd a 15. fejezetben). Érdemes tehát megvizsgálni, hogyan használhatnánk az A0 ... A4 címvonalakat is.
Nézzük a 21. ábrán látható kapcsolást! A 74LS01 áramkör nyitott kollektoros kimenetekkel rendelkezik (amelyek áramnyelőként viselkednek, áramot kiadni nem képesek). Ha az A7 vonal logikai 1 szintű, az IORQ* vonal a normál állapotnak megfelelően csatlakozik az IORQGE* pontra. Ha viszont az A7 logikai 0 szintű, az IORQGE* az IORQ* állapotától függetlenül magas (logikai 1) szintű lesz.
Ebben az esetben tehát az ULA csak akkor választható ki I/O eszközként, ha A7=1 és A0=0 (vagyis az A7=0 esetben nem, amit az a normál működésnél, külső áramkör nélkül megtehető). Ha a ZX nyomtatót vagy más olyan perifériás eszközt is használni akarunk, amelynek működéséhez az IORQGE* jel helyett az IORQ* szükséges, akkor a 20. ábrán látható kapcsolást módosítani kell. Az IORQ* bemeneti jelet a hátsó csatlakozósávról kell vennünk, és a külső eszközök IORQ* bemenetére az eredeti Z80A IORQ* jele helyett ezt az IORQ*kimenetet kell kötni.
Az áramkör működését a következő program futtatásával vizsgálhatjuk meg:
100 LET a=IN 63486
110 LET b=IN (63486-128)
120 CLS: PRINT a,b
130 PAUSE 5
140 GO TO 100
Ez a program a billentyűzet 1 ... 5-ös gombjait olvassa le. Ha ezek közül valamelyik gombot megnyomjuk azt tapasztaljuk, hogy az 'a' 255-ös értéke megváltozik, de a 'b' változatlan marad. Ha ezt a programot a külső áramkör nélkül is kipróbáljuk, akkor az 1 ... 5-ös gombok megnyomására az 'a' és 'b' érték is meg fog változni. A külső áramkör csatlakoztatásakor ugyanis a 'b' értéket az ULA nem olvassa le, mivel az A7-es vonal logikai 0 szintű, ami az ULA I/O műveleteit megakadályozza.
Figyelem: ez az áramkör csak az ISSUE 1 sorozatú gépeknél használható!
15. Fejezet
A Z80A PIO ÁRAMKÖR ALKALMAZÁSA
Ez a párhuzamos bemeneti / kimeneti áramkör a Z80A CPU és a külvilág közötti kapcsolatot biztosítja. Ebben a fejezetben a PIO működését, programozását és a Spectrum hátsó csatlakozósávjához illesztését ismertetjük röviden. (Az áramkör részletes leírását egyéb szakkönyvekben találjuk, például az LSI ATSZ. ZILOG Mikroprocesszor családok I. c. kötetében)
22. ábra: A Z80A PIO kivezetései
A 18. fejezetben egy 8 csatornás analóg-digitális átalakító felépítését ismertetjük, amely jó gyakorlati példa a PIO alkalmazására. Jól alkalmazhatjuk például egy botkormány X és Y koordinátáinak leolvasásában. A PIO chip programozására nézzünk egy gyakorlati példát! Definiáljuk a PA0 és PA1 vonalakat bemenetként, míg a PA2 ... PA7 vonalakat kimenetként! Ezután azt fogjuk megvizsgálni, hogy a CPU ezeket hogyan használhatja kapcsolókból és LED-ekből álló áramkör vezérlésére. (A példában az A portot használjuk, de ugyanígy a B portba is küldhetjük a vezérlő- és az adatszavakat.) A kapcsolás a 23. ábrán látható. A 74LS05 áramkörök a LED-ek meghajtásához szükségesek, mivel a PIO kimenetei nem képesek elegendő áramot szolgáltatni. A PIO működése előtt meg kell adni, hogy mit hajtson végre. Ezt egy vezérlő szó beírásával hajthatjuk végre, amelyek alakja a következő:
Az üzemmód szó 0 és 3 közötti értéke lehet:
Mivel a vezérlési üzemmódot akarjuk használni, az üzemmód szóra 3-at kell megadni, vagyis a vezérlő szó a következő lehet:
Ezt az értéket az A port vezérlő portjára küldhetjük az OUT CA,255 BASIC utasítással. A CA érték az A port vezérlő portját jelöli ki, és ez a PIO és a címsín összekapcsolásától függ (lásd később). A PIO-nak ezután meg kell adni, hogy az A port mely vonalait használjuk bemenetként, és melyiket kimenetként. Egy újabb olyan vezérlő szót kell tehát az A portba írni, amelyben a 0-s bitek kimenetet, az 1-essek bemenetet jelentenek. Tehát a CA címre küldött következő szó esetünkben megfelelő:
Ekkor az OUT CA,3 BASIC utasítást használhatjuk. |
23. ábra: A PIO alkalmazási példája |
Mielőtt az IN vagy az OUT BASIC utasításokat ténylegesen beírnánk, definiálnunk kell a CA és a DA (ill. a B port esetében a CB és a DB) címeket. A Spectrum az A7, A6 és A5-ös címeket az I/O eszközök kijelölésénél nem használja, így ezeket használhatjuk a PIO működtetésére.
A 22. ábra kacsolása szerint az A7-es címvonal a PIO chipet választja ki (aktív 0 szint). Az A6-os címvonal a vezérlő- (A6=1) vagy az adatszó (a6=0) közötti választást adja. Az A5-ös címvonalat az A (A5=0) és a B (A5=1) port közötti választásban használhatjuk. Az A4 ... A0 vonalakat logikai 1 szinten kell hagynunk, hogy a Spectrum szokásos I/O műveleteit ne zavarjuk meg.
Kiválasztás | Bináris |
Decimális |
Kulcsszó |
A port, adat | 0 0 0 1 1 1 1 1 |
31 |
DA |
A port, vezérlés | 0 1 0 1 1 1 1 1 |
95 |
CA |
B port, adat | 0 0 1 1 1 1 1 1 |
63 |
DB |
B port, vezérlés | 0 1 1 1 1 1 1 1 |
127 |
CB |
A 23. ábrán látható kapcsolás használatánál programunk kezdődjék mindig a következő sorokkal:
10 REM az A port kivalasztasa
20 LET DA=31
30 LET CA=95
40 OUT CA,255
50 OUT CA,3
A kapcsolók különböző állásaival a bináris 00, 01, 10 és 11 (decimális 0 ... 3) számoknak megfelelő értékeket adhatjuk be. A következő programban a beállított szám jelenik meg a képernyőn:
10 REM az A port kivalasztasa
20 LET DA=31
30 LET CA=95
40 OUT CA,255
50 OUT CA,3
100 LET x=IN DA
110 PRINT "A kapcsolokon beallitott ertek ";x
120 GO TO 100
A LED-eken a bináris 0 és 63 közötti értékek jeleníthetők meg, például a következő programmal:
10 REM az A port kivalasztasa
20 LET DA=31
30 LET CA=95
40 OUT CA,255
50 OUT CA,3
100 INPUT "Szam? ";A
110 LET A=A*4
120 OUT DA,A
130 GO TO 100
Láttuk tehát, hogyan lehet a kapcsolással egyszerű beviteleket és kiviteleket végrehajtani a PIO-val. Ezután írhatunk olyan programot, amely automatikusan binárisan számlál visszafelé. Valamelyik kapcsoló átállításával a számlálás lefelé is történhet.
16. Fejezet
SAJÁT BILLENTYŰZET HASZNÁLATA
16.1 BEVEZETÉS
Ebben a fejezetben egy külső billentyűzet illesztésével foglalkozunk. Ezt a hátsó csatlakozósávra kapcsolhatjuk, és a Spectrum eredeti billentyűzetével párhuzamosan fog működni, azaz a kettő egyidejűleg használható. A 17. fejezetben ezt a billentyűzet illesztőt megfelelő botkormány csatlakoztatására fogjuk használni, de emellett más lehetőségünk is van: numerikus (például egy régi kalkulátoré), hexadecimális (gépi kódú programozáshoz) vagy egy teljes billentyűzet illesztése.
16.2 AZ ÁRAMKÖR LEÍRÁSA
A billentyűzet illesztő kapcsolás a 24. ábrán látható. Az EKBD1 ... EKBD13 vonalak a 9. ábrán látható KBD1 ... KBD13 vonalaknak felelnek meg. Az IORQGE*, A0 és RD* vonalak után következő logikai kapuáramkörök biztosítják, hogy az IC1b és az IC2a ... IC2d NOR kapuk közös bemenetein a szint csak akkor lesz alacsony, ha a fenti három jel mind logikai 0 állapotban van. Így a külső billentyűzet illesztő akkor lesz kiválasztva, amikor az ULA (254-es című port) leolvasása történik. Ha nincs megnyomott gomb, a NOR kapuk bemenetein az R2 ... R6 felhúzó ellenállásokkal magas szint lesz beállítva. A NOR kapuk kimenetein ekkor alacsony szintet kapunk, amelyek viszont az IC3 inverterek hatására a D0 ... D4 adatvonalakon magas szintet jelentenek. Mivel a hat invertert tartalmazó IC3 nyitott kollektoros kimenetekkel rendelkezik, az ULA bármelyik érintett adatvonalat logikai 0 szintre állíthatja, ha a Spectrum saját billentyűzetén valamelyik gombot megnyomjuk. Vegyök például azt az esetet, hogy a külső billentyűzeten az EKBD10 és EKBD6 vonalakat összekötjük. A 9. ábrán láthatjuk, hogy ez az F gombot jelent. Amikor az A9-es címvonal 0 szintje melletti leolvasás történik, az IC2d bemenet alacsony szintű lesz. Erre az IC2d kimenete logikai 1, a D3 vonal pedig logikai 0 állapotba kerül: vagyis a D0 ... D4 vonalak leolvasásakor a CPU az F gomb megnyomását fogja érzékelni.
16.3 A KAPCSOLÁS ALKATRÉSZLISTÁJA
Ellenállások: | |
R1 | 4,7 kohm |
R2 ... R6 | 10 kohm |
Kondenzátorok: | |
C1 | 22 mF, 6 V (elektrolit) |
C2 | 100 nF (kerámia) |
Félvezetők: | |
IC1 | 74LS02 |
IC2 | 74LS02 |
IC3 | 74LS05 |
D1 ... D8 | 1N4148 (dióda) |
Az illesztő megépítése után nyilván valamilyen billentyűzetet is csatlakoztatni akarunk (a következő fejezetben egy botkormány alkalmazását mutatjuk be). A teljes billentyűzetnél arra kell ügyelni, hogy annak huzalozása megfeleljen a 9. ábrán megadott kapcsolásnak. Például az I gomb lenyomása az EKBD4 és EKBD11 vonalak közötti kapcsolatot hozza létre, a 7-es gomb az EKBD5 és EKBD10 vonalak közöttit, stb.
17. Fejezet
BOTKORMÁNY ILLESZTÉSE
A botkormányt itt olyan kézben tartható eszköznek tekintjük, amellyel programjainkhoz különböző irányú mozgatóparancsokat adhatunk ki. A Sinclair botkormány BAL, JOBB, FEL, LE és TŰZ funkciókkal rendelkezik (öt kapcsoló). A mechanikai kivitel olyan elemekből állhat, amelyek a mozgatásnak megfelelő irányú kapcsolót működtetik, ill. a TŰZ parancsot közvetlen gombnyomásra adja ki.
A botkormány software szempontból a Spectrum billentyűzetének felső sorával egyezik meg (mind BASIC, mind a gépi kódú program szempontjából) Az 1-es botkormány a 61438 című, míg a 2-es botkormány a 63486 című bemeneti portnak felel meg. Az egyes funkciók a következő számjegygomboknak felelnek meg:
Gomb | Funkció | Gomb | Funkció | |||
1-es | BALRA | 2-es botkormány |
6-os | BALRA | 1-es botkormány |
|
2-es | JOBBRA | 7-es | JOBBRA | |||
3-as | LE | 8-as | LE | |||
4-es | FEL | 9-es | FEL | |||
5-ös | TŰZ | 0-ás | TŰZ |
A botkormány illesztőegysége a 16 fejezetben megadott kapcsolás (csak a D5 és D8-as diódák szükségesek). A két botkormány kapcsolóinak bekötését a 25. ábra mutatja.
A következő programban a 2-es botkormányt, vagy az 1 ... 5-ös gombokat használhatjuk. A játék célja egy űrhajó sima leszállítása a Holdra. Az űrhajó kezdetben adott sugarú körpályán mozog a Hold körül. A botkormány vezérli az űrhajó rakéta-hajtóműveit: ezek bekapcsolásával a Holdhoz közelebbi (LE) vagy a Holdtól távolabbi (FEL) körpályára állhatunk, ill. növelhető (JOBBRA), vagy csökkenthető (BALRA) a tangenciális sebesség. Az üzemanyag csak a rakétahajtómű bekapcsolásakor fogy. A képernyőn a még rendelkezésre álló üzemanyag, a sebesség, a Hold felszínétől számított távolság és a süllyedés aktuális értékei is megjelennek. A leszállást lassú süllyedéssel és kis sebességgel kell végrehajtani, ellenkező esetben az űrhajó összetörik. Ha az üzemanyag elfogy, az űrhajó irányíthatatlanná válik, és csak a gravitációs erő határozza meg a mozgását. A TŰZ gombot csak veszélyhelyzetben használjuk: ez a főhajtóművet kapcsolja be, és az űrhajót a Holdtól eltávolítja. Ekkor nagyon sok üzemanyag fogy, és több másodpercig használva az űrhajó örökre letér pályájáról.
Az űrhajó mozgását a gravitáció is befolyásolja: ha a pályamenti sebességet csökkentjük, alacsonyabb pályára állunk, ám ez újra növeli a sebességet. A LE gombbal a Hold felé közelíthetünk, de ekkor a pályamenti sebesség annyira megnövekedhet, hogy a centrifugális gyorsulás az űrhajót kirepítheti a pályájáról.
Az APOLLO program listája a következő:
100 REM APOLLO HOLDRASZALLAS
130 LET r1=30: LET s=0
140 REM a Hold felrajzolasa
150 CLS: CIRCLE 127,87,r1
160 CIRCLE 110,96,4
170 CIRCLE 140,100,10
180 CIRCLE 125,75,7
190 CIRCLE 145,77,5
200 CIRCLE 120,78,14
210 PRINT AT 20,0;"UZEMA SEB MAGASSAG SULLYEDES"
220 LET x=127
230 LET y=157
240 LET r=70
250 LET v=1
260 LET kt=70
270 LET p=0.095
280 LET w=1/70
290 LET am=70
300 LET p1=p/3
310 LET u=0
320 LET k=0
330 LET fu=100
340 LET fl=0.2
350 REM A BOTKORMANY LEOLVASASA
360 IF fu=0 THEN LET e=31: GO TO 380
370 LET e=IN 63486-224
380 LET f=INT (e/16): REM A TUZ GOMB
390 LET e=e-f*16
400 LET f1=INT (e/8): REM A BALRA GOMB
410 LET e=e-f1*8
420 LET f3=INT (e/4): REM A LE GOMB
430 LET e=e-f3*4
440 LET f2=INT (e/2): REM A JOBBRA GOMB
450 LET e=e-f2*2
460 LET f4=INT e: REM A FEL GOMB
470 LET f1=(1-f1)*p
480 LET f2=(1-f2)*p1
490 LET f3=(1-f3)*p
500 LET f4=(1-f4)*p1
510 IF f=0 THEN LET fu=fu-10: LET f1=5*p
520 IF f1+f2+f3+f4>0 THEN LET fu=fu-f1
530 REM A KOVETKEZO POZICIO KISZAMITASA
540 LET f=(kt/r-v*v)/r
550 LET am=am+(f2-f4)*r
560 LET u=u+(f1-f3-f)
570 LET r=r+u
580 LET v=am/r
590 LET j=v/r
600 LET k=k+j
610 REM AZ ELOZO URHAJO TORLESE
620 PLOT INVERSE 1;x,y
630 PLOT INVERSE 1;x,y+1
640 PLOT INVERSE 1;x-1,y
650 LET x=127+r*SIN k
660 LET y=87+r*COS k
670 IF x<225 AND x>=1 AND y>=0 AND y<=174 THEN GO TO 710
680 LET x=0
690 LET y=0
700 GO TO 750
710 REM AZ UJ URHAJO FELRAJZOLASA
720 PLOT x,y
730 PLOT x-1,y
740 PLOT x,y+1
750 IF fu<0 THEN GO SUB 950
760 LET h=r-r1
770 PRINT AT 21,1; INT (fu*10)/10;" ";
780 PRINT AT 21,7; INT (v*100);" ";
790 PRINT AT 21,15; INT h;" ";
800 PRINT AT 21,26; INT (u*100);
810 IF h<=0 THEN GO TO 830
820 GO TO 350
830 REM A HOLD FELSZINEN
840 IF ABS v>0.04 THEN GO TO 900
850 IF ABS u>0.15 THEN GO TO 900
860 CLS
870 PRINT AT 20,0;"SIMA LESZALLAS - GRATULALOK!"
880 FOR x=0 TO 300: NEXT x
890 GO TO 100
900 REM BECSAPODAS
910 CLS
920 PRINT AT 20,0;FLASH 1;"TUL GYORS>>>AZ URHAJO OSSZETORT!"
930 PAUSE 200
940 GO TO 100
950 PRINT AT 20,0;FLASH 1;"AZ UZEMANYAG KIFOGYOTT";
960 LET fu=0
970 RETURN
18 Fejezet
NYOLC CSATORNÁS ANALÓG-DIGITÁLIS ÁTALAKÍTÓ
18.1 BEVEZETÉS
A korábbi fejezetekben láttuk, hogy a számítógép digitális mennyiségeket kezel, azaz az információ valamennyi bitje csak 0 vagy 1 értéket vehet fel. A valóságban a mennyiségek, amelyeket például mérni szeretnénk, gyakran széles értéktartományba esnek. (Néhány példa ilyen jelenségekre: vérnyomás, hőmérséklet, fényintenzitás, hangerősség, stb.) Ezeket a paramétereket a megfelelő jelátalakítókkal változófeszültséggé alakíthatjuk. Ezután ezt a jelet egy meghatározott feszültségtartományt (például 0 ... 2,55 V) elfogadó analóg-digitális átalakítóra (ADC) vezethetjük. Ez olyan digitális jelkimenetet biztosít, amelyet a számítógép már leolvashat. Az ismertetésre kerülő kapcsolásban egy 8 bites ADC áramkört alkalmazunk, tehát kimenete 0 és 255 között változhat. Az áramkör így a fenti feszültségtartományban 0,01 V pontossággal mér.
18.2 A KAPCSOLÁS MEGVALÓSÍTÁSA
A nyolc csatornás ADC áramkört egy PIO A és B portjára csatlakoztathatjuk a 26. ábrán látható módon. Az R4 és C4 időzítő elemekkel az órajelet állíthatjuk be. Az ellenállást egy fix és egy változtatható tagból is összeállíthatjuk, és így megvalósítható a 600 kHz-es maximális frekvencia is, bár erre a BASIC rendszer lassúsága miatt általában nincs szükség. Ha frekvenciamérő vagy oszcilloszkóp nem áll rendelkezésre, leghelyesebb egy 1,8 kohmos fix ellenállást használni.
18.3 ALKATRÉSZLISTA
Ellenállások: | |
R1 | 390 ohm |
R2 | 4,7 kohm |
R3 | 82 kohm |
R4 | 1,8 kohm (vagy sorban 330 ohm fix és 2,2 kohm változtatható) |
R5 | 220 kohm |
R6 | 220 kohm |
Kondenzátorok: | |
C1 | 1 mF |
C2 | 0,1 mF |
C3 | 0,1 mF |
C4 | 330 pF |
C5 | 22 mF, 6 V |
Integrált áramkörök | |
IC1 | CD4011BE |
IC2 | ZN427E |
IC3 | CD4051BE |
Egyéb | |
VR1 VR2 |
100 kohm (botkormány X és Y tengely) |
18.4 A KAPCSOLÁS MŰKÖDÉSE
Az analóg-digitális átalakító (IC2) a V IN bemenetén fogadja az analóg feszültséget, és azt 8 bites digitális jellé alakítja. Ennek végrehajtásához egy órajel ill. több, a PIO-ról származó vezérlőjel szükséges. Az IC1 a kapcsolódó ellenállásokkal és kondenzátorokkal az órajelet állítja elő. Az órajel frekvenciája kb. 500 kHz, és kapcsolatát a PA0 vonal vezérli. Minden órajel hatására az ADC egy átalakítást végez, tehát esetünkben ez kb. 20 ms-onként történik. Az átalakítást a PA2 vonal indítja (START CONVERSION bemenet). Az átalakítás befejezésekor az IC2 vége jelét (END OF CONVERSION) a PA3 vonal fogadja. Ez a jel jelzi, hogy a kimeneti byte olvasható. A PA1 vonal a kimeneti engedélyező vonalat vezérli. A PIO B portja az ADC 8 kimeneti adatbitjét fogadja. A fejezet végén megadott rajzoló mintaprogramban a PA0, PA1 és PA2 vonalakat egyidejűleg működtetjük. A PA3 (az átalakítás vége) jelet nem használjuk, erre csak akkor lenne szükség, ha gépi kódban írt programot futtatnánk. Ekkor ugyanis előfordulhatna, hogy az adatbyte beolvasásig az átalakítás még nem fejeződött be.
Az ADC áramkör elég drága, ezért ha több forrásból akarunk analóg jelet átalakítani, érdemes ezt ugyanazzal az ADC-vel végrehajtani. Így történik ez példánkban is, ezért került a kapcsolásba a 8-ból 1-et kiválasztó analóg multiplexer (IC3). A nyolc lehetséges bemenet közül a PA4, PA5 és PA6 választja ki a közös kimenetre kerülőt. A 0-s cím esetében például a C0 bemenetre kapcsolt jel kerül a kimenetre (I/O COMMON)
A BASIC rajzoló programban a 0-s és az 1-es csatornát használjuk, ezekre kapcsolódik a botkormány X és Y tengelye. A 10 ... 90-es sorok a PIO portjait állítják be: a B port bemenetként, az A port a PA3 vonal kivételével kimenetként szerepel. A 140 ... 170-es sorok az X koordinátát olvassák le. Először az A port vonalaira 0-át állítunk be, ez kikapcsolja az órajelet, kiválasztja a multiplexer 0-ás csatornáját, és tiltja az ADC kimenetét. A 160-sor bekapcsolja az órajelet, és elindítja az analóg-digitálisátalakítást, Mire a 170-es sorban a program leolvassa a B portról az X koordinátát, az átalakítás már beejeződött.
A rajzoló program működése egyszerű: két üzemmód közül választhatunk (R és M), ezeket a megfelelő gomb megnyomásával jelölhetjük ki. Az M üzemmódban a botkormánnyal egy villogó léppontot mozgathatunk a képernyőn a megfelelő pozícióba, de rajzolás ekkor még nincs. Az R üzemmódban a mozgatás mentén vonalat kapunk. Új rajzhoz nyomjuk meg az U gombot.
10 REM RAJZOLAS BOTKORMANNYAL
30 REM A PIO BEALLITASA
40 LET DA=31: LET CA=95
50 LET DB=63: LET CB=127
60 OUT CA,BIN 11111111
70 OUT CA,BIN 00001000
80 OUT CB,BIN 11111111
90 OUT CB,BIN 11111111
100 LET A$="M"
110 LET X1=0: LET Y1=0
120 REM A KEPERNYO BEALLITASA
130 BORDER 7: PAPER 7: INK 0: CLS
140 REM X KOORDINATA
150 OUT DA,BIN 00000000
160 OUT DA,BIN 00000111
170 LET X=IN DB
180 REM Y KOORDINATA
190 OUT DA,BIN 00000000
200 OUT DA,BIN 00010111
210 LET Y=IN DB*175/255
220 REM R=RAJZOLAS, M=KURZOR MOZGATAS, U=UJ RAJZ
230 IF INKEY$="R" THEN LET A$="R"
240 IF INKEY$="M" THEN LET A$="M"
250 IF INKEY$="U" THEN GO TO 100
260 IF A$="R" THEN GO TO 350
270 REM KURZOR
280 PLOT OVER 1;X,Y
290 REM KESLELTETES
300 PAUSE 10
310 PLOT OVER 1;X,Y
320 LET X1=X
330 LET Y1=Y
340 GO TO 140
350 REM RAJZOLAS
360 PLOT X1,Y1
370 DRAW X-X1,Y-Y1
380 GO TO 320