3. KAPCSOLAT A KULVILAGGAL
3.1. USER PORT ÉS RS232-ES
A USER PORT nevd háts6 csatlakoz6ra (1. 20. ábra) kivezetett jelek els5sorban a gép funkci6inak a felhaszná16 általi b5vítésére szolgálnak (user=haszná16). Itt kaptak helyet egy 8-vonalas párhuzamos port áramkör kivezetései, valamint az RS232-es kapcsolatra alkalmas ACIA megfele15 vonalai.
Itt találhatjuk még meg:
.a gép ATN jelét (a processzor beépített port jának 2. bitje)
.a külső egységek alaphelyzetbe állítására szolgál6 jelet (BRESET)
.a tápegységből érkező 9 V-os vált6feszültség két kivezetési pontját;
.a gép tápfeszültségének (+5 V) és a róldpontnak a kivezetését.
3.1.1. A párhuzamos port
A PLUS/4-es gép és egy külső egység közötti párhuzamos adatforgalmat a gép beépített 8-bites portján keresztül val6síthatjuk meg. A kapcsolási rajzon U5-ös pozíci6számmal ellátott 6529B típusú port áramkör 8-bites, bemenetei az adat buszra, -kimenő vonalai pedig a USER PORT csatlakozóra kapcsol6dnak. Az adatforgalom irányát az l-es lábra érkező R/W jel határozza meg. Az áramkör működését a 19-es lábra érkező chip select jel engedélyezi, amelyet az FPLA állít elő az $FDI0/64784- $FDIF(64799) címek megsz6lítása esetén. A 6529B belső tárol6val is rendelkezik, tehát a címére írt adat mindaddig jelen van a kimenetén, amíg azt meg nem változtatjuk. A port olvasásakor a PO-P7-es kivezetések állapota kerül az adatbuszra.
Meg kell még említenünk a P2-es vonalat, a PLUS/4-es ezt a kazettás magn6t6l jövő CST SENSE
(magnóbillentyl1-megnyomás) vonal beolvasására használja. Ez a jel átköthető a processzor port jának 7. bit jére a J9-es jumper megszakításával és a J8-as érintkezőinek összekötésével.
3.1.2. Az RS232-es
Az RS232-es elnevezést ma már sokan és sokféleképpen használják, éppen ezért meg kell ismerkednünk az alapfogalmaival. Felhívjuk a figyelmet, hogy e fejezet megértéséhez elengedhetetlen az ACIA leírásának (1.4.) áttanulmányozása.
Az RS232C egy olyan amer~kai szabvány (eur6pai megfelelője a CCITT V.24), amely egy számít6gép
és egy adatátviteli rendszer közötti soros illesztésre vonatkozik. Ez ut6bbi általában egy MODEM
(Modulator-Demodulator) egység, amely a digitális jeleket ana16ggá alakítja át, s így az informáci6t nagyobb távolságra is átviheti. Ott a jeleket egy másik MODEM fogadja, majd visszaalakítja digitálissá az ott lév6 másik számít6gépnek, terminálnak (1. 21. ábra).
Ez a kapcsolat természetesen kétirányú lehet, a MODEM-ek közti átviteli vonal pedig a legtöbb esetben telefonvonal. A MODEM áramkörök integrált kivitelben is léteznek, ilyen pl. a Motorola MC6860-as chip-je.
A gyakorlatban az RS232C által meghatározott adatátvitelt szokták pl. két mikroszámít6gép között is alkalmazni.
Az RS232C szabvány rögzíti az adatátvitel sebességének lehetséges értékeit, amelyet bit/s mértékegység- gel jellemeznek (ez a baud-rate, 1. 7. ábra), az illesztéshez használt csatlakoz6 típusát (Canon DB25) és annak kiosztását, a soros átviteli jelformátumot, a használt jelek funkcióit és azok feszültségszintjeit (+12 V).
Mindazonáltal az RS232C lényegében egy ajánlás, amelyet az ilyen illesztőegységgel (interface) ren- delkező gépeket gyárt6 cégek legtöbbször csak rész ben vesznek figyelembe, pl. nem a szabvány szerinti csatlakozót használják, vagy pl. +5 V-os TTL-szintekkel dolgoznak a +12 helyett.
Most vissza is tértünk a PLUS/4-eshez, ez ut6bbi két megállapítás ui. rá is vonatkozik. Ebből következik tehát, hogy amennyiben a PLUS/4-est szabványos RS232C illesztőegységgel szerelt készülékhez - pl. MODEM-hez - akarjuk csatlakoztatni, mindenekelőtt a jeleit kell +12 V-osra átalakítanunk, és szabványos csatlakoz6t is be kell szereznünk.
A következő táblázat az RS232C és V.24 szabványok legfontosabb jeleit szemlélteti. Az első oszl.opban a szabvány szerinti csatlakoz6 számai, a másodikban a V.24-beli elnevezések, a harmadikban az RS232C eredeti jelnevei, a negyedikben a leginkább használatos jelelnevezések, s végül a PLUS/4-es USER PORT-jának megfelelő kivezetéseit tüntettük fel.
RS232 V.24
RS232 Funkci6 USER PORT
csatI. név név
csatI.
2 103
BA Transmitted Data (TxD) M
3 104 BB Recieved Data (RxD)
C
4 105 CA Request to Send (IifS)
D
5 106 CB Clear to Send (aTS)
-
6 107
CC Data Set Ready (DSR) 1
7 102 AB Signal Ground
1, 12, A,
N ,
8 109
CF Data Carrier Detect (DCD) H
17 115 DD Receiver Clock (RxC)
B
20 108/2 CD Data Terminal Ready (D"TR) E
Ezekután térjünk át az átviteli jelformátum és a legfontosabb adatátviteli mdveletek lezajlásának ismertetésére, amelyeknek programb61 történő irányítását, ellenőrzését az ACIA közremdködésével végezhetjük (részletesen az 1.4. alfejezetben találhat6). Meg kell jegyeznünk, hogy ebben a részben - értelemszerden - az RS232-esnek a PLUS/4-ben megval6sított változatát ismertetjük (pl. +5 V-os jelszintet tételezünk fel +12 V helyett, és O V-ot a -12 V helyett), ezenkívül az egyszerűség kedvéért feltételezzük, hogya PLUS/4-es ACIA á,ramköre egy MODEM-hez kapcsolódik. Tudnunk kell azt is, hogyastopbit, ill. az adat byte hosszúsága (tehát az átvitelkor létrejövő jelszélesség) is programozhat6.
Az RS232-es átvitel általános adatformátuma a 22. ábrán láthat6.
A soros adatvonal alapállapota l-es szintd (+5 V), ilyenkor nincs adatforgalom. Az adatátvitel kezdetét egy O-s szintd startbit jelzi. Ezután következnek az informáci6hordoz6 adatbitek, majd egy paritásbit. Ez ut6bbi csak akkor, ha a rendszerben paritásellenőrzést állítottunk be. Paritásellenőrzésre csak 5-, 6- vagy 7-bites adat by te esetén van m6d (1. ACIA parancsregisztere).
Ennek az ellenőrzési m6dnak az a lényege, hogy az ad6 ellenőrzi, hogy az adott byte-ban lévő l-es állapotú bitek száma páros-e vagy páratlan, ennek megfelelően állítja be a paritásbitet, s az ezekután átvitt byte-ot a vevő is ellenőrzi, vagyis megnézi, hogy a beérkezett byte a paritásbitnek megfelelő-e. Ha nem, akkor jelzi, hogy az átvitelben hiba történt.
Az adatátviteli vonalon az egy byte átvitelének végét a stopbit(ek) jelzi(k). Az adatbitek száma, a paritásbit és a stopbit(ek) beállítása az ACIA vezérlő- és parancsregisztereinek programozásával érhető el (1. ott).
Normál adás üzemm6dban a processzor akkor kap megszakításkérés jelet, ha az ACIA kész a következő átvitelre szánt adat by te fogadására. Ez a jel (IRQ) a start bit tel egyid5ben jelenik meg. Amikor a processzor kiolvassa a státuszregisztert, a megszakításjel megszl1nik (IRQ l-be áll). Ezután a CPU-nak- érzékelve, hogy az ad6oldali regiszter kész az újratöltésre - be kell töltenie abba a következő adatbyte-ot. A betöltésnek- feltétlen meg kell történnie a stopbit vége előtt, máskülönben az adatvonalon folyamatos
MARK jel kerül kivitelre (TxD l-es szinten marad). Ezután akkor indul el az adatátvitel - és jelenik
meg a megszakításkérés jel - újra, ha a processzor betöltött egy új adatot.
Folyamatos adatvétel
Normál vételi üzemm6dban akkor keletkezik megszakítás a processzor felé, ha az ACIA egy teljes adat byte-ot vett az RxD vonalon. A megszakításjel kb. a stop bit felénél jelenik meg. Ezután a CPU- nak ki kell olvasnia a státuszregisztert (erre törl5dik a megszakításkérés) , majd ki kell olvasnia a vevőoldali adatregisztert a következő megszakításjel előtt, máskülönben ún. túlfut ás hiba keletkezik (Overrun). Ebben az esetben a következő adat byte nem kerül át a vevőoldali sift-regiszterből a vevóoldali adatregiszterbe, hanem ehelyett a státuszregiszter "Overrun" bit je l-be állit6dik. Ekkor a vevóoldali adatregiszter a legutols6 érvényes adat byte-ot tartalmazza, az ezután következ5 adatok elvesznek.
Kerethiba eI6fordulása
A kerethibát (Framing Error) a stopbit(ek) hiánya okozhatja vétel esetén. Ilyenkor az ACIA a megszakításkéréssel egyidőben l-be állítja a státuszregiszter "Framing Error" bit jét. Az egyes bejövő adtbyte-okat külön-külön vizsgálja meg, tehát ez a státuszbit mindig az utoljára vett adat állapotának megfelelően áll be.
Az ACIA külön sajátossága a tlisszhang üzemmód (Echo Mode) beállításának lehetősége. Ilyenkor azt az adatot, amit az RxD vonalon vett, 1/2 bit jelszélességnek megfelelő késleltetéssei folyamatosan visszaküldi a TxD vonalon. Ez az üzemmód kiválóan alkalmas az átviteli vonalak épségének és az egész átviteli folyamat lezajlásának ellenőrzésére.
Az RS,232-es átvitel során természetesen más állapotváltozások is lehetségesek a fentieken kívül, de azok részletes leírása nem e könyv feladata. Az adatátvitel alapszinten való kezelését az eddigiek alapján már .meg tudjuk oldani. Ezekután a folyamatos kapcsolattartás programból való megoldására ajánlott műveletsorozatot szeretnénk ismertetni, amelyet egy-egy megszakításkor (annak kiszolgáló rutinjában) érdemes elvégezni a státuszregiszter beállása alapján.
1. A státuszregiszter kiolv8sás8
Ez a művelet automatikusan törli a 7. bitet (IRQ). A DSR és DCD vonalak közbeni szintváltozása másik megszakítást fog eredményezni. .
,
2. Az IRQ bit ellen6rzése
Ha nincs l-es állapotban, akkor az időközbeni megszakítást nem az ACIA okozta.
3. A DSR és DCD bitek ellen6rzése
Ezeket össze kell hasonlítani megelőző értékükkel, amelyet a CPU korábban eltároIt. Amennyiben értékük nulla (a MODEM on-line állapotban van, azaz "él" a kapcsolat), és nem változtak meg, csak akkor kell ellenőrizni a többi bitet is.
4. A 3. bit ellen6rzése I
Ellenőrizni kell, hogyavevőoldali adatregiszter tele van-e (3.bit=I).1
5,: Ha a vev50ldali adatregiszter tele van, csak akkor kell ellen5rizni ezeket a biteket, amelyek jelzik, hogy nem történt-e paritás-, túlfutás- vagy kerethiba.
Végezetül ismertetjük az ACIA program-reset jének hatását, amelyet a státuszregiszter címére tört'Ji6 írási művelet vált ki.
1. Az ACIA bels5 regiszterei beállnak az 1.4.2. pontban ismertetett módon. ~ 2. A DTR vonal azonnal1-be áll.
3. A vevooldali és ad60ldali megszakításkérések azonnal letiltódnak. Amennyiben az IRQ vonal
alacsony szint11 a program-~ eI5for~akor, O-ban is marad a megszakítás kiszolgálásának I
befejeztéig, kivéve ha azt a DSR vagy DCD vonalak állapotváltozása okozta. ~ 4. A DSR és DCD vonalak megszakításai letiltódnak. Ha IRQ O szint11 és azt ezek a vonalak '
okozták, akkor az IRQ 1-be megy, ezekután pedig a DSR és DCD státuszbitek be állnak a vonalak állapotának megfelel5en, nem okozva ezúttal megszakítást. 1
5. Ha az "Overrun" státusz bit értéke 1 volt, törl5dik.
'"
3.2. A SOROS BUSZ
~ A PLUS/4-es gép rendelkezik egy olyan soros kommunikációs csatornával, amelynek a legfontosabb feladata a VC 1541-es lemezegységgel vagy Commodore printerrel való kapcsolattartás, ez az ún. "soros busz" vagy más néven" soros IEC busz". Az ehhez tartozó csatlakozót a gép hátulján a "SERIAL- ~; (soros) felirattal látták el. ;"
A gép ezen kommunikációs rendszerét - amely egyezik a C 64-es gépéveI - azonban tévedés lenne I
egyszer11en csak IEC busz nak nevezni, ui. ez a soros busz csak igen távolról hasonlít arra. '
Az IEC busz eredetileg egy olyan szabványos átviteli busz, amely párhuzamos adat vonalai (DIO1...DIO8) " mellett rendelkezik még a kommunikációs folyamatot irányító vezérl5- és handshake vonalakkal is (hand- shake=kézfogás). Ez utóbbiak biztosítják az aszinkron átviteli folyamat id5zítését, és az adatáramlás megfelel5 összehangolását. Az említett szabvány az IEC (International Electrotechnical Comission) sz- , abványa, amelyet IEC 625 néven jelentetett meg, és amely gyakorlatilag megegyezik az IEEE-488, HP-IB, GPIB nev11 el5írásokkal~ I
'. Az igazi IEC busz és a Commodore soros busza között lényeges eltérések vannak. Az eredeti busz párhuzamos adatvonalakból és vezérl5vonalakból áll (16 vezeték), míg a Commodore buszon az adatok az egyetlen DATA vonalon sorosan áramlanak, a vezérl5-id5zít5 és ellen5rz5 funkciókat pedig lényegében az ATN, a DATA és a CLOCK vonalak látják el. Ebb51 adódik a két rendszer sebessége közti különbség: az IEC busz elvileg ,lehetséges maximális átviteli sebessége 1 Mbyte/s, míg a soros IEC busz másodpercenként átvitt adatmennyisége 1 kbyte alatt van. Ezeken kívül minden lehetséges dologban eltérések adódnak, lényegében csak a készülékek közti kapcsolattartás alapelve hasonló, ill. bizonyos elnevezések azonosak. Fentiek alapján nyugodtan elhagy hat juk a megtisztel5 IEC nevet, a továbbiakban I csak "soros busz"-ként nevezzük a PLUS/4-es SERIAL feliratú csatlakozóján megjelen5 jeleket, ezenfelül
a működést is ez utóbbi alapján tárgyaljuk, ámbár a logikai rendszer alapötlete és elnevezései az eredeti :c IEC szabványból származnak.
A soros buszra egyid5ben több készülék is kapcsolódhat (pl. a PLUS/4-es, egy 1541-es lemezegység és egy nyomtató). Az egyes eszközök háromféle funkciót tölthetnek bej vezérl5, beszél5 vagy hallgató funkciót.
A vezlrl6 (Controller) olyan készülék, amely kiosztja a beszll6 vagy hallgat6 szerepeket, az adatforgalmat' irányítja és beszél5, ill. hallgató funkciót is betölthet. Ez általában csak számítógép lehet (esetünkben t,:) a PLUS/4-es, a m11ködés leírásánál is ezt feltételezzük).
A beszélő (Talker) olyan egység, amely képes adatokat kitenni a buszra, egyidőben értelemszerűen csak egy aktív beszélő lehet a rendszerben.
A hallgat6 (Listener) az a készülék, amely képes a buszon érkező adatok fogadására.
Minden készüléknek saját címe (egységszáma) van, a nyomtat6é 4-es vagy 5-ös, a lemezegységé 8-as vagy
9-es. Ezenfelül megadhatunk ún. másodlagos címet is, amely pl. több lemezegység, printer használata esetén azok megkülönböztetésére val6. Az elsődleges és másodlagos címek is külön-külön O-t61 15-ig terjedhetnek, ezek megadására a BASIC parancsok közül az OPEN használhat6.
Mielőtt a tényleges adatforgalom megindulna, a vezérlőnek meg kell címeznie az egységeket. A vezérlő
tehát először az egységszámot küldi ki a buszon, ez a byte azonban még egy fontos informáci6t hordoz: meghatározza, hogyamegcímzett egység beszélő vagy hallgat6 legyen-e. Ezt a vezérlő egyszerűen végzi el: ha hallgat6nak akarja az adott egységet felcímezni, akkor az egységszámához hozzáad 32-t (LISTEN funkci6), ha beszélőnek, akkor 64-et (TALK funkci6). Ha tehát a lemezegységbe akar adatokat átküldeni, első lépésként $28(40)-et (8+32) küld ki a buszon. A hallgat6 vagy beszélő funkci6k megszüntetésére a vezérlő az ún. lecímzéskor a $3F(63) (UNLISTEN) vagy a $5F(95) értékll byte-ot külqi ki, amely egységesen minden aktív hallgat6ra vagy beszélőre vonatkozik.
A soros busz csatlakoz6ján lévő kivezetések a 27. ábrán mutatjuk be.
1: SRQIN
Eredeti funkci6ja szerint a Service Request - kiszolgáláskérés jelek fogadására szánt bemenet, a PLUS/4-esben azonban nincs bekötve (a C 64-es sem figyeli ezt a vonalat).
2:GND
A föld pont kivezetése.
3: ATN IN/OUT
Az ATN (Attention - figyelem) vonalon jelzi a vezérlő, hogy parancsm6dban vagy adatm6dban
van-e, előbbi a fel. és lecímzésekre értendő (ATN=O), ut6bbi pedig a tényleges adatátvitelre
(ATN=l).
4.: CLK IN faUT
A CLK (CLOCK) vonalon érkezik a hallgat6 számára az a jelsorozat, amelynek egy-egy impulzusa a DATA vonalon érkező adat byte bitjeinek egyenkénti érvényesítésére val6, tulajdonképpen az adatbitek szinkronizálásaként is felfoghat6.
5: DATA IN/OUT
Az adat byte-ok bitenkénti továbbítását végző vezeték, amely azonban bizonyos események jelzésére is szolgál, amint azt majd a későbbiekben látni fogjuk.
6: RESET
Ez a kivezetés való a külső egységek alapállapotba hozására, gyakorlatilag megegyezik a CPU
RESET-jével. '
Most pedig megtárgyaljuk a soros busz alapvető működési fázisait, ebben a 28. ábra lesz a segítségünkre. Az ábra a busz vonalain megjelenő jelalakokat szemlélteti parancs-, ill. adatmód esetén. A jelalakokat, vagyis a vonalak megfelő állapot változásait a ROM-ban található rutinok hozzák létre és ellenőrzik vissza, lényegében tehát ezek működését követjük most nyomon.
Mint említettük, a kommunikáci6s folyamat egy adott egység megcímzésévei kezdődik. A vezérlő az ATN és a CLOCK vonal O-ba vitelével kezdi a folyamatot, ez az általános figyelemfelhívás, amelyre minden egységnek válaszolnia kell, aki a buszon van. Válaszként minden egyes készüléknek nullába kell vinnie a saját DATA kimenetét, amelyet a vezérl6 csak abban az esetben érez meg, ha már valóban minden egység O-ba állította (az egyes egységek Open Collector-os kimenettel rendelkeznek). Az ATN levitele után 1 ms-mal a vezérlő megvizsgálja a DATA vonal állapotát, és amennyiben azt 1 szintű nek találja, "DEVICE NOT PRESENT" hibaüzenettel megszakítja a folyamatot. Ha a DATA vonal alacsony szintű, akkor a vezérlő a CLOCK-ot 1-be állítja, majd addig vár, amíg a készülékek 1-be nem állítják a DATA vonalat, és csak ezután kezdődik az egységszám-byte kivitele.
A byte egy bit jének kivitelét a CPU a következ6 módon végzi, miután a bitszámlálóba 8-at töltött és a GLOCK-ot O-ba vitte:
1. Ismételten ellenőrzi a DATA vonalat, hogy 1-ben van-e még, ha nincs, hibával leáll. Következő lépésként a kiviend6 byte-ot ROR mtlvelettel jobbra forgatva a Carry-be érkező bit 1 vagy O értékétől függően állítja be a DATA vonal szintjét. Ezután késleltet, majd a CLK vonal 1-be állításával jelzi, hogy az adat érvényes (külső egység ilyenkor olvassa be a DATA vonal állapotát). Ismét késleltetés következik, majd a CLOCK vonalat O-ba, a DATA vonalat pedig 1-be állítja. A következőkben a CPU dekrementálja a bitszámlálót, s ha van még kiviendő bit, ez az egész ciklus kezdődik elölről.
2. Ha az egységszám minden bit jének kivitele megtörtént, ismét időzítés következik, miközben a processzor figyeli a DATA vonalat, ui. az egységek annak O-ba vitelével jelzik, hogy vették az adatot. Amennyiben az időzítés letelik, és a DATA vonal még mindig nem alacsony szinttl, hibajelzés következik.
3. Amennyiben a fent leírt folyamat rendben lezajlott, ugyanilyen módon megtörténik a másodlagos cím kivitele is. Az ezután következő adat byte-okat - amelyek átvitele ATN=1 mellett történik - már csak a címzett egység veszi, a többi egység figyelmen kívül hagyja mindaddig, amíg az ATN vonal ismét O nem lesz. Az adatforgalom irányát az egységszámmal kivitt LISTEN vagy TALK kód határozza meg.
Ha a PLUS/4-es továbbít adatokat külső egységnek, elc5zőleg az ATN vonalat l-be állítja, s az adatbyte- okat a fentiekhez hason16an továbbítja. A megcímzett egység, amely az adatokat veszi (a hallgató), egyadatbyte után a DATA O-ba állításával jelzi, hogy elfogadta azt. Azután, hogya PLUS/4-es l-be állította a CLÜCK-ot, jelezvén, hogy a következő adatot kívánja adni, a hallgat6 l-be állítja aDATA-t, ezzel jelezve, hogy készen áll az adatok fogadására. Ezen ut6bbi esemény késleltetéséveI tudja a hallgat6 várakoztatni a PLUS/4-est, az addig vár a következő adatbyte küldésével, amíg a DATA l-be nem áll.
Az adatátvitel végét az jelzi a hallgat6 számára, hogy a beszélő (a PLUS/4-es), az utols6 byte után a CLÜCK l-be állítása után azt l-ben is hagyja, több mint 0,2 ms-ig. A hallgat6 válaszként a DATA vonalat O-ba viszi, ezzel nyugtázva az adatátvitel végét.