Tervezési segédlet a Z80 (MK3880) típusú mikroprocesszor alkalmazásához

IV. rész: A Z80-SIO Áramkör
(MK3884/5/7 soros I/O egység)


Tartalom

1. Általános ismertetés
2. Felépítés
3. Aszinkron üzemmód
4. Szinkron üzemmód
5. SDLC (HDLC) üzemmód
6. A Z80-SIO programozása
7. Státusz regiszterek
8. Időzítés
9. Elektromos specifikáció


1. Általános Ismertetés

1.1. Bevezetés

A Mostek Z80-SIO (Serial Input-Output) egy kétcsatornás sokfunkciós periféria áramkör, amely a sokféle soros adatforgalmazási szolgáltatásával a Z80-as rendszerek legtöbb ilyen követelményeit kielégíti. Alapvető funkciója a soros-párhuzamos és párhuzamos-soros átalakítás és az adatforgalom vezérlése. A többféleképpen programozható működése nagyfokú alkalmazkodást biztosít a különféle soros rendszerekhez.
A Z80-SIO-val szinkron és aszinkron byte orientált adatforgalom kezelhető. Univerzális működése következtében felhasználható más soros rendszerekben is, mint pl.: kazettás magnetofon, vagy floppy diszk interface-ként.
A Z80-SIO minden szinkron üzemmódnál generálhat és ellenőrizhet CRC kódokat és programozhatóan ellenőrizhet adatokat. A SIO két csatornája alkalmas modem vezérlésre is. Abban az esetben, amikor erre nincs szükség, a modem vezérlők felhasználhatók, mint általános célú I/O egységek.

1.2. A SIO kialakítása

1.3. Főbb tulajdonságai


1.0 ábra: Z80-SIO blokkvázlat


1.1 ábra: MK3884 lábkiosztása


1.2 ábra: MK3885 lábkiosztása


1.3 ábra: MK3887 lábkiosztása

1.4. A SIO kivezetései és funkciói

D0-D7 Rendszer adatbusz (kétirányú,három állapotú). Ezen a buszon folyik minden adatátvitel a CPU és a SIO között. D0 a legkisebb helyértékű bit.
B/A
A vagy B csatorna választő bemenet (logikai 1 szint ezen a bemeneten a B csatornát választja ki). Ez a bemenet határozza meg, hogy melyik csatornával folyik az adatátvitel a SIO és a CPU között. Általában a CPU adatsínének 0. bitjét (A0) használják erre a célra.
C/D
Utasítás vagy adat választó bemenet (logikai 1 szint ezen a bemeneten vezérlést jelent).
Ez a bemenet határozza meg, hogy a CPU-tól az adatbuszon érkező byte utasítás vagy adat. Logikai 0 szint azt jelenti, hogy az érkező byte adat. Általában a CPU címsínének 1. bitjét (A1) használják erre a célra.
CE Chip engedélyező bemenet (logikai 0 szinttel engedélyez).
Ez a bemenet engedélyezi, hogy a SIO adatokat és utasításokat fogadjon el, vagy továbbítson a CPU-tól, ha az I/O írást vagy olvasást hajt végre.
órajel Rendszer óra bemenet. Egyfázisú órajel, ami a SIO belső műveleteit szinkronizálja.
M1
A CPU első gépi ciklusának a jele (bemenet, 0 szint az aktív). Amikor M1 és RD jelek aktívak, a CPU utasítást olvas ki a memóriából. Ha M1 és IORQ jelek aktívak, akkor a CPU megszakítást fogad el és a SIO kiadja a megszakítási vektorát (feltéve, ha ő a legnagyobb prioritású egység, amelyik megszakítást kért).
IORQ
A CPU I/O utasítását jelzi (bemenet, a 0 szint aktív).
A CE, RD, C/D és a B/A jelekkel együtt vezérli az adatátvitelt a CPU és a SIO között. Amikor CE, RD és IORQ jelek aktívak a SIO a B/A-nak megfelelő csatornától továbbit adatot a CPU felé. Ha CE, IORQ jelek aktívak és RD nem, akkor a CPU utasítást vagy adatot küld a SIO-nak attól függően, hogy a C/D jel milyen állapotban van. Ha az IORQ az M1-el együtt aktív, akkor a CPU megszakítást fogad el, és a SIO kiadja a megszakítási vektorát (ha ő a legnagyobb prioritású egység).
RD Olvasó ciklust jelző vonal a CPU-tól. Bemenet, 0 szint az aktív. A CE, IORQ és B/A jelekkel együtt az adatforgalmat vezérlik a CPU és a SIO között.
RESET
Bemenet, a 0 szint aktív. Logikai 0 szint, ezen a bemeneten letiltja az adást és a vételt, alapállapotba állítja TxDA és TxDB kimeneteket, a modem vezérlőket 1-be kényszeríti és letiltja a megszakítást. Reset után be kell írni a vezérlő regisztereket és csak azután kezdődhet az adás vagy a vétel.
IEI
Megszakítást engedélyező bemenet, az 1 szint aktív. A megszakítási lánc kialakítására szolgál és az 1 szint ezen a bemeneten jelzi, hogy ez az egység a legmagasabb prioritású a láncban.
IEO
Megszakítást engedélyező kimenet, 1 szint az aktív. Az IEI kivezetéssel együtt a megszakítási lánc kialakítására szolgál. Az IEO akkor van 1 szinten, ha az IEI 1 szinten van, és a CPU nincs megszakítási rutinban. Ez a jel akadályozza meg az alacsonyabb prioritású egységek megszakítás kérését, ha egy nagyobb áll kiszolgálás alatt, vagy ha egy nagyobb prioritású egység szintén megszakítást kér.
INT Megszakítás kérés kimenet (nyitott kollektoros, 0 szint aktív). A SIO ezen a vonalon kér megszakítást a CPU-tól.
W/RDYA, W/RDYB
Az A és B csatornák Wait/Ready várakozás / kész / nyitott kollektoros kimenetei. Amikor 1 szintű "várakozás" jelet ad, 0 szinttel jelzi a "kész" állapotot. Ez a vonal a "kész" üzembe programozva biztosítja a csatlakozást a DMA vezérlőhöz, wait üzemben pedig a SIO adatait szinkronizálja a CPU-hoz. RESET állapotban nyitott kollektoros.
CTSA, CTSB
Törlés küldő (Clear to Send) bemenet, a 0 szint aktív.
Logikai 0 szint ezen a bemeneten automatikus engedélyező üzemmódban engedélyezi az adást. Ha az automatikus enge-délyezés nincs programozva, általános célú bemenetként használható. Mindkét bemenet Schmitt-triggeres, amely lehetővé teszi a kis meredekségű jelek kezelését. A SIO detektálja ezeket az impulzusokat és mindkét élére megszakítást kér a CPU-tól. A Schmitt-triggeres bemenet nem biztosit előirt zajszint tartományt.
DCDA, DCDB Adatvivő detektáló bemenet, a 0 szint aktív.
Ugyanaz a funkciója, mint a CTS bemeneteknek csak a vételre vonatkozik.
RxDA, RxDB Vevő adat bemenet, 1 szint az aktív.
TxDA, TxDB Az adó kimenete, 1 szint aktív.
RxCA, RxCB
Vevő órajel bemenet. Közvetlenül meghajtható a Z80-CTC áramkörrel. Aszinkron üzemben az órajel 1x, l6x, 32x, 64-szerese lehet az adatátvitel frekvenciájának. A vevő az RxC felfutó élénél vesz mintát az adat bemenetről.
TxCA, TxCB
Adó órajel bemenet, ami közvetlenül meghajtható a Z80-CTC áramkörrel. (Bekötéséhez lásd az 1.5 pontot.) Aszinkron adásnál az órajel 1, 16, 32 és 64-szerese lehet az adatátvitel sebességének. Az adás és a vétel sebességének egyformának kell lennie. Mind a TxC és RxC bemenetek Schmitt - trigger áramkörrel készültek, hogy a lassú felfutású jeleket is kezelni tudják. (Zajmargót nem adnak meg rá.) A TxD adatkimenet a TxC órajel lefutó élénél vált.
RTSA, RTSB
Adás kérő (Request to Send) kimenet, a 0 szint aktív.
Az RTS bit 1-be írása 0 szintre állítja az kimenetet. Aszinkron üzemben törlés után akkor megy 1 szintre, ha az adó kiürült. Szinkron üzemben az RTS kimenet követi az RTS bitet. Rendszerint általános célú kimenetként használják.
DTRA, DTRB Adat kész kimenet, a 0 szint aktív. (A kivezetéshez lásd az 1.5 pontot.) A kimenet követi a programozott DTR bitet. Általános célú vezérlésre használható.
SYNCA, SYNCB
Szinkron bemenet / kimenet, 0 szint az aktív.
Aszinkron vételnél a CTS és a DCD-hez hasonló bemenet. Ebben az üzemben a bemenetre adott jel az RR0 regiszter Sync/Hunt státusz bitjét módosítja. Külső szinkron üzemben szintén bemenet és a szinkron jel vétele után két RxC ideig kell ezt a bemenetet 0 szinten tartani a szinkronizáláshoz. A külső logika rendszerint addig tartja ezt a bemenetet 0 szinten, amíg a CPU nem informálja, hogy a szinkronizálás megszűnt, vagy új adatsorozat kiadása következik. Külső szinkron üzemmódban a karakterek összeállítása a külső szinkron jel lefutó élét követő RxC felfutó élénél kezdődik.
Belső szinkronizálásnál ez a kivezetés kimenet és a szinkronjel azonosításánál egy RxC ciklusra aktív szintet vesz fel. A szinkron állapot nem tárolódik, így ez a kimenet mindig aktív, amikor az összehasonlító logika szinkron karaktert talál.

1.5. Bekötési opciók
A 40 lábas kivezetés korlátozás miatt a következő négy jelet nem lehetett mindkét csatornánál korlátozások nélkül kivezetni:

A probléma megoldására egy kompromisszumos megoldás született, ahol a B csatorna kivezetései háromféle módozatban léteznek:

2. Felépítés

2.1. Bevezetés
A Z80-SIO áramkör a következő belső egységekből áll:

Mindkét csatorna regiszterei írhatok és olvashatók a CPU számára, ami alkalmassá teszi a SIO-t, hogy modem-hez vagy más külső egységhez csatlakozzon.
A SIO irható-olvasható regiszterei a következők:

A megszakítási vektor a B csatorna egy további regiszterébe tölthető és kiolvasható mint a csatorna 2. regisztere.
A továbbiakban mindkét csatorna regiszter műveleteinél a következő rövidítéseket használjuk:

Az egyes regiszterek elnevezését és funkcióit a következő táblázat tartalmazza:

WR0 Regiszter pointer, CRC alapállapotba állítás, külön üzemmódok alapállapotba állÍtása, stb.
WR1 Adás/vétel, megszakítás és adatátviteli módok meghatározása.
WR2 Megszakítási vektor regiszter (csak a B csatornánál).
WR3 Vételi paraméterek beállítása és vezérlés.
WR4 Különféle üzemmódok és paraméterek adás/vétel üzemének beállítása.
WR5 Adó paramétereinek beállítása és vezérlés.
WR6 SDLC címszektorának szinkron karaktere.
WR7 SDLC flag szinkron karaktere.
RR0 Adás/vétel státusz, megszakítás és külső státusz.
RR1 Speciális vételi feltételek státusza.
RR2 Módosított megszakítási vektor (csak a B csatornánál).

A csatornák logikai áramkörei vételnél és adásnál egyaránt biztosítják az adatformátumot és érvényességet. A Modem vezérlő CTS és DCD bemenetelt program által vezérelhető logikai hálózat figyeli. Minden modem vezérlő funkció általános felhasználású és így más célra is felhasználhatók.
Az automatikus megszakításkérésnél a megszakítási logika meghatározza, hogy melyik csatorna milyen egysége a legmagasabb prioritású megszakítást kérő részegység. Az áramkörön belül az A csatornának van magasabb prioritása a B-hez viszonyítva. Csatornán belül a következő prioritási sorrend érvényes: vétel, adás és külső/státusz megszakítás.

2.2. Adat regiszterek
Az adó és vevő oldal adatkezelő egységeinek felépítését a 2.1 ábra mutatja (mindkét csatornára).

2.1 ábra: Az adó és vevő adatkezelő egységei

A vevő három 8 bites FIFO elrendezésű (3 byte késleltetésű) puffer regisztert és egy 8 bites vételi léptető regisztert tartalmaz. Az elrendezés időt biztosit a CPU-nak, hogy a nagy sebességgel érkező adatblokk elején már el tudja kezdeni a megszakítási rutinját. A vételi hibatároló regiszter (FIFO) tárolja a paritás, keret és más státuszhibákat.
A karakterhossztól függően a bejövő adat különféle adatkezelő egységeken halad át. Aszinkron üzemben a soros adat (ha a karakterhossz 7 vagy 8 bit) egy három bites puffer regiszterbe kerül. Az 5 és 6 bites karakterek a bemeneti léptető regiszterbe kerülnek. Szinkron üzemben az adatkezelő egység működése a vételi folyamat fázisától függ. A szinkron vétel a "Hunt" fázissal kezdődik, ahol a vevő a bemeneti adatfolyamban megkeresi a beprogramozott bitmintát, melyet szinkron karakternek hívnak. SDLC üzemmódban egy speciális mintát az un. flag-et keresi meg.
Ha a vevőt egyszavas szinkronizálásra programozták, akkor az összehasonlítást a WR7 regiszter tartalmához végzi el. Kétszavas szinkronizálásnál a WR6 és WR7 regiszterek tartalmával végzi el az összehasonlítást.
A bejövő adatok mindkét esetben átmennek a szinkronizáló regiszteren, ahol a WR6 és WR7 karakterekkel hasonlítják össze. Egykarakteres szinkronizálásnál a bejövő karakter és WR7 tartalmának összehasonlítása a bemeneti szinkron regiszterben történik. Kétkarakteres szinkronizálásnál a bejövő adat első karakterét a vevő léptető regisztere tárolja, míg a következő 8 bit a vételi szinkron regiszterbe kerül.
Ha a szinkronizálás megtörtént, akkor a bejövő adatok kihagyják a bemeneti szinkron regisztereket és közvetlen a három bites puffer regiszterbe kerülnek.
SDLC üzemmódban a bejövő adat először a bemeneti szinkron regisztereken halad át, ahol a SIO figyeli az adatfolyamot és ha nullát talál, továbbengedi az adatokat. Ha 5 egymásután következő 1-es érkezik, akkor a 6. bitet figyeli és ha az nulla, akkor további egye-seket keres. Ha a 6. bit is 1, akkor a 7. bitet figyeli és ha az 0, akkor flag karakter érkezett, ha nem akkor kiirtott (abort) karakter vétele történt.
Az így átformált adatok a 3 bites puffer regiszterbe, és onnan a teli léptető regiszterbe jutnak. Megjegyzendő, hogy az SDLC Üzemmód is Hunt fázissal kezdődik, ahol a Z80-SIO a bemeneti léptető regiszterben összeállított karakterben megpróbálja felismerni a WR7-be programozott bit mintát. Mihelyt az első szinkron (flag) karaktert felismerte, az adatok a hosszuktól függetlenül áthaladnak az adatkezelő egységeken.
A SIO ugyanazt a CRC ellenőrzést használja mindkét (SDLC és szinkron) adatátvitelnél, de a különböző üzemmódoknál különböző részek működnek. Kétszinkronos byte-orientált működésnél a CPU dönti el, hogy az adatkarakter bekerüljön-e a CRC számításba. A Z80-SIO ezért az adatokat 8 bittel késlelteti. SDLC üzemmódban nincs szükség késleltetésre, mert a Z80-SIO logikája meghatározza, hogy melyik byte-ot kell a CRC-be beszámítania.
Az adó oldal 8 bites adatregisztere a belső adatbuszról tölthető.
A 2o bites kimeneti léptető regisztere pedig a WR6, WR7 és az adatregiszterből tölthető. Egyszinkronos és kétszinkronos üzemmódban a WR6 és WR7 regiszterek tartalmazzák a szinkron karaktereket. SDLC üzemmódban ezek a regiszterek címet és flag karaktert tartalmaznak. Szinkron adásnál a WR6 és WR7 regiszterek tartalma az adó léptető regiszterébe kerülnek és az üzenet elején rákerülnek az adatvonalra.
Ha az üzenet alatt elfogynak az adatok a SIO kitöltő (time filer) adatokat továbbit.
A Start és Stop bitekkel kiegészített adatokat (aszinkron üzemmód) a SIO a kiválasztott órafrekvenciával, az adó léptető-regiszteréből egy multiplexeren át a kimenetre juttatja.
Szinkron üzemmódban a SIO 1x-es órával lépteti az adatokat az adó multiplexerére és a CRC generátorra.
Az SDLC/HDLC adatok a "nulla beiktató" logikán keresztül jutnak a kimenetre (a flag karakter továbbításánál ez a logika tiltva van).
Ez az áramkör a flag jelsorozatot leszámítva minden más bitsorozatnál (cím, vezérlő jel, adat, keret jel, stb.) öt egymásután következő egyesnél egy 0-át helyez az adatfolyamba. SDLC üzemmódban a CRC generátor eredménye szintén átmegy a nullát beiktató logikán.

2.3. Funkcionális leírás
A Z80-SIO funkcionális leírását két szempont szerint végezzük: a SIO egyfelől egy soros adatátviteli periféria, amely különféle formátumoknak megfelelően adatokat küld és vesz; másfelől a Z80-as családnak egy interface áramköre, ahol a közös cím és adatbuszon keresztül kommunikál a Z80-CPU rendszerrel.
A Z80-SIO felhasználását más CPU-hoz, több speciális funkciója segíti elő: vektor nélküli megszakítás, lekérdezéses üzemmód (polling) és egyszerű "handshake" adatátviteli képesség.
A SIO további ismertetésének első része a Z80-CPU és a SIO kapcsolatával foglalkozik, a második rész pedig a SIO adatátviteli tulajdonságait mutatja be.

2.3.1. A SIO I/O kapcsolata a CPU-val
A Z80-SIO lehetőséget nyújt a vektoros és a lekérdezéses (polling) üzemmódú megszakításra, valamint a blokkos adat, vezérlés és státusz átvitelre a CPU-val. A blokkos adatátvitel CPU vagy DMA vezérléssel történhet.

Lekérdezéses mód (polling). A lekérdezős üzemmódnál a megszakítási logika tiltva van. Az RR0 és RR1 státusz regiszterek tartalma minden műveletnél változik. A lekérdezéses megszakítás kiszolgálása alatt a CPU minden csatornánál megvizsgálja a státuszokat (RR0 reg.). Az RR0 két státusz bitje D0 és D2 jelzi, hogy adat kiadás vagy vétel szükséges. Az RR0 regiszter státusz hibát és más speciális feltételeket is jelez, melyeket a "Z80-SIO programozása" pontban ismertetünk.
Az RR1-ben található vételi feltételeket nem szükséges megvizsgálni, mert ezek a státusz bitek vezérlik az RR0-ban található "vevő karakter kész" státusz bitet.

Megszakításos üzemmód (vektoros). A Z80-SIO megszakítási rendszere lehetővé teszi a real-time felhasználáshoz szükséges gyors megszakításokat.
A B csatorna WR2 és RR2 regiszterei tartalmazzák a megszakítási vektort, amely kijelöli a megszakítási rutin kezdőcímét a memóriában.
A SIO az RR2-ben módosítani tudja a megszakítási vektorát, ami így nyolcféle megszakítási címet jelölhet ki és feleslegessé teszi a státuszvizsgáló rutinok írását. A módosítást a B csatorna vektormódosító státuszának (WR1/D2) beírásával, programból lehet végrehajtani. Amikor ez a bit 1, akkor a WR2 regiszterben lévő megszakítási vektor a különféle megszakítási feltételek szerint módosul (részletesebb leírás a "SIO programozása" fejezet 1. vezérlő regiszter leírásánál található).
A megszakítás forrása lehet az adás, a vétel vagy a külső/státusz kérése. Mindegyik forrás programból tiltható. A SI0-n belül az A csatornának van nagyobb prioritása, mint a B-nek és csatornán belül a következő prioritási sorrend érvényes: vétel, adás és külső/státusz megszakítás.
Adáskor engedélyezett megszakításnál az adó a puffer regiszter üres állapotánál kér megszakítást. A vételnél engedélyezett megszakítás három úton jöhet létre:

Az első típusú megszakítást tipikusan a blokkos adatátvitelnél hasz-nálják. A karakterenként történő megszakítási módnál a paritás hiba megszakítási vektora módosítható. A speciális megszakítás egy adott üzenetnél vagy karakternél jöhet létre (pl. SDLC üzemmódban a "vége" üzenetnél). A speciális feltételekhez kötött utasítás csak akkor működik, ha az előbbi két megszakítási rendszer (megszakításkérés az első vagy mindegyik karakternél) közül az egyik programozva van. Az első karakterre engedélyezett megszakításnál pl. a vételi túlcsordulás speciális feltételű megszakítás is létrejöhet. (A paritáshiba ebben az esetben nem kér megszakítást.)
A külső/státusz megszakítás fő funkciója, hogy figyeli a CTS, DCD) és SYNC bemenetek jeleit. Ebben az üzemmódban megszakítás kérhető az adás kimaradásnál, a "break" jelnél (aszinkron átvitelnél) vagy hibás karakternél (SDLC üzemmódnál). Az utóbbi megszakítás (break/ abort) az egyik speciális funkciója a Z80-SIO-nak.
A SIO-nak ez a tulajdonsága biztosítja az átvitel pontos kezdését és befejezését, valamint a külső logika megfelelő időzítését a "break/abort" szekvenciáknál.

CPU/DMA blokkos átvitel. A Z80-SIO alkalmas a Z80-DMA vezérlésének megfelelő blokkos adatátvitelre. A blokkos átvitel a WAIT/READY kimeneteket és az 1. vezérlő regiszter Wait és Ready státusz bitjeit használja. A WAIT/READY kimenet software úton vezérelhető, mint WAIT és READY vonal.
A Z80-SIO READY kimenete jelzi a DMA-nak, hogy készen áll az adat-átvitelre. A CPU felé a WAIT kimenet jelzi, hogy a SIO még nem tud adatot továbbítani és a CPU-nak várakozási állapotban kell lennie. Az 1. vezérlő regiszter 5-7 bitjei és a WAIT/READY vonal működése a vezérlő regiszterek leírásánál található.

2.3.2. Adatátviteli lehetőségek
Az előbbi pontokban a Z80-SIO és a CPU I/O kapcsolatait ismertettük. A SIO két, független teljes duplex csatornája szinkron, aszinkron és SDLC (HDLC) üzemmódokban tud működni, és ezek ismertetésével foglalkoznak a következő fejezetek.
Az egyes fejezetek függetlenségének és teljességének megőrzése érdekében egyes részek ismétlődnek.

3. Aszinkron üzemmód

3.1 Bevezetés
Az aszinkron adatátvitel megkezdése előtt a Z80-SIO következő paramétereit kell beprogramozni: karakter hosszúság, óra/adat frekvencia, stop bitek száma, paritás, megszakítási mód és vétel- vagy adás üzemmód. Az egyes paraméterek beállítása a rendszer program által tölthető regiszterek betöltésével történik. Ezek közül a WR4-et a WR1, WR3 és WR5 előtt kell feltölteni.
Ha az adatok modem-en vagy RS232C interface-n keresztül érkeznek, az adás engedélyező bitet TE (Transmit Enable) az RTS (Request to Send) és a DTR (Data Terminal Ready) jelekkel együtt kell kiadni. Az átvitel addig nem kezdődhet meg, amíg az adást engedélyező bit nincs beírva.
A SIO automatikus engedélyezése lehetővé teszi, hogy a programozó az első karaktert kiküldje anélkül, hogy a CTS jelet megvárná. Ha az automatikus engedélyező bit 1-ben van, a SIO mielőtt megkezdené az átvitelt megvárja, hogy a CTS 0-ba menjen. A CTS, DCD, SYNC jelek általános célú I/O vezérlő jelek, melyek az ismertetett funkciókon kívül más célra is felhasználhatók. Ha a CTS jelet más célra használjuk az automatikus engedélyező bitet 0-ba kell állítani.
Az aszinkron karakterek formátuma a 3.1 ábrán látható. A programozó üzemmódokat és paramétereket, valamint a WR3-WR5 regiszterek funkcióit a 3.1 táblázat ismerteti.


3.1 ábra: aszinkron karakter formátum

3.1 táblázat:

  BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
WR3 00 = Rx 5 BITS/CHAR
10 = Rx 6 BITS/CHAR
01 = Rx 7 BITS/CHAR
11 = Rx 8 BITS/CHAR
AUTO
ENABLES
0 0 0 0 Rx
ENABLE
WR4 00 = x1 CLOCK MODE
01 = x16 CLOCK MODE
10 = x32 CLOCK MODE
11 = x64 CLOCK MODE
0 0 00 = NOT USED
01 = 1 STOP BIT/CHAR
10 = 1 1/2 STOP
        BIT/CHAR
11 = 2 STOP BIT/CHAR
EVEN-ODD
PARITY
PARITY
ENABLE
WR5 DTR 00 = Tx 5 BITS (OR LESS)
        CHAR
10 = Tx 6 BITS/CHAR
01 = Tx 7 BITS/CHAR
11 = Tx 8 BITS/CHAR
SEND
BACK
Tx
ENABLE
0 RTS 0

A WR2 regiszter tartalmazza a megszakítási vektort (csak a B csatornában) és a WR1 regiszter határozza meg a megszakítási és adatátviteli módokat. Aszinkron üzemben a WR6 és WR7 regisztereket nem használják.
A 3.2 táblázat egy tipikus program szekvenciát mutat be az egyik csatornán a teljes-duplex vétel/adás működés beállítására:

Funkció   Program lépések Megjegyzések
  Regiszterek betöltése:  
Kezdeti feltételek beállítása WR0 CSATORNA TÖRLÉS Reset SIO
WR0 2. PONTER  
WR2 MEGSZAKÍTÁSI VEKTOR csak a B csatornára
WR0 4. POINTER, RESET
KÜLSÖ/STÁTUSZ MEGSZ.
 
WR4 ASZINKRON ÜZEMMÓD, PARITÁS, STOP BITEK SZÁMA, ÓRAJEL SEBESSÉG  
WR0 3. PONTER  
WR3 VÉTEL ENG. AUTOM. ENG.
VÉTELI KARAKTER HOSSZA
 
WR0 5. POINTER  
WR5 RST, ADÁS ENG., KARAKTER HOSSZÚSÁG, DTR JEL
Vétel és adás beállítva. Az automatikus engedélyezése az adónak CTS és a vevőnek DCD jelekkel történik.
WR0 1. POINTER TÖRLÉS
KÜLSŐ/STÁTUSZ MEGSZ.
 
WR1 ADÁS MEGSZ. ENG. VEKTOR MÓDOSÍTÓ STÁTUSZ, MEGSZ. MINDEN VÉTELI KARAKTERNÉL, WAIT/READY FUNKCIÓK LETILTÁSA, KÜLSŐ MEGSZAKÍTÁS ENGEDÉLYEZÉS
Adás/vétel megszakításos üzemmód kiválasztása. Külső megszakítással figyeli a CTS, DCD és SYNC bemeneteket és a "Break" szekvenciát. Vektor módisító státusz csak a B csatornára vonatkozik.
  Az első adat byte kiküldése a SIO-nak (ezt az adatot ki kell küldeni, vagy nem lesz megszakítás).
Várakozó állapot   KÜLÖNFÉLE EGYÉB PROGRAMOK VÉGREHAJTÁSA, VAGY HALT UTASÍTÁS A program vár a SIO megszakítására.
    Z80 MEGSZAKÍTÁS ELFOGADÓ CIKLUS BETÖLTI AZ RR2 REGISZTER TARTALMÁT A CPU-BA. A megszakítási vektort a következő jelek módosítják: karakter vétel, adó puffer üres, külső/státust váltás és speciális feltételek.
Vételi karakter kiszolgáló rutin   A KARAKTER TOVÁBBÍTÁSA A CPU-NAK
POINTEREK ÉS PARAMÉTEREK VISSZAÁLLÍTÁSA
RTI
 
Az adó puffer üres megszakítási rutinja   ADATKIVITEL A SIO-NAK,
POINTEREK ÉS PARAMÉTEREK VISSZAÁLLÍTÁSA,
RTI
 
Külső/státusz megszakítás kiszolgáló rutin,
speciális feltétel megszakításkiszolgáló rutinja
  RR0 BEOLVASÁSA A CPU-BA, HIBARUTIN VÉGREHAJTÁSA, RTI
RR1 REGISZTER BEOLVASÁSA A CPU-BA, A HIBÁNAK MEGFELELŐ RUTIN VÉGREHAJTÁSA,
RTI
 
Befejezés   ADÁS/VÉTELI MEGSZAKÍTÁSI MÓDOK ÚJRADEFINIÁLÁSA Ha az adás vagy vétel befejeződött
    ADÁS ÉS VÉTEL ÜZEMMÓDOK LETILTÁSA  
    MODEM KIMENETÉNEK BEÁLLÍTÁSA Adásnál az "All Sent Status" bit jelzi az üzenet végéz.

 

3.2. Aszinkron adás
Az adó kimenete (TxD) alapállapotban állandóan 1-ben van. A kimenet 0-ba állítása a "break" utasítással (WR5/D4) lehetséges.
A kiadott karakterekhez a SIO automatikusan hozzáteszi a start-, a paritás- és a megadott számú stop biteket. Ha 6 vagy 7 bit a programozott karakterhossz a SIO a nem használt biteket automatikusan figyelmen kívül hagyja. Ha a karakterhossz 5, 4 vagy annál is rövidebb, lásd a programozási leírásban az 5. vezérlő regiszter funkcióit.
A soros adatok 1/1, 1/16, 1/32 és 1/64-es órajellel (TxC) léptetődnek a TxD kimenetre. A kimeneti adat a TxC lefutó élénél jelenik meg.
A külső/státusz megszakítás engedélyezésénél a DCD, CTS és SYNC jelek kérhetnek az átvitel folyamán megszakítást. Ha ezek a jelek egy meghatározott időnél hosszabb ideig aktívak, megszakításkérés történik. Adásnál ez a tulajdonsága a SIO-nak a modem CTS jelének megfigyelésére ad lehetőséget.

3.3 Aszinkron vétel
Az aszinkron vétel a vételt engedélyező bit beállításával kezdődik. Ha automatikus engedélyezés volt programozva, akkor a kezdéshez a DCD jelnek is 0-ban kell mennie. Az adatbemeneten (RxD) lévő 0 szint a start bitet jelenti. Ha ez a 0 szint legalább másfél órajelig tart, a vétel megindul és a vevő a ciklusközepeken vett mintákból összegyűjt egy karaktert.
1x-es órajelnél a szinkronizálást kívülről kell megoldani. A vevő a TxC felfutó élénél vesz mintát a bemeneti adatból. Ha 8 bitnél rövidebb karakterhossz volt programozva, akkor a vevő 1-ekkel egészíti ki a karaktereket. Ha a paritás engedélyezve van, a paritásbitet csak a 8 bites karakterhossznál várja le a vevő. A 8 bites hossztól eltérő karaktereknél a SIO összegyűjti a programozott számú adat bitet és a paritást, a maradék helyet pedig 1-esekkel tölti fel. Például egy 5 bites karaktert a vevő a következő formában továbbit a CPU-nak: 11 P D4 D3 D2 D1 D0.
A vételi léptető regiszter után még három 8 bites követő regisztere van a vevőnek, így a CPU-nak elegendő ideje van arra, hogy a megszakítás kiszolgálásnál az adat még rendelkezésre álljon. A bejövő karakterek ellenőrző bitjei szintén egy 3 bites követő (puffer) regiszteren haladnak át a vevőben. Az ellenőrző bitek az adatokkal együtt töltődnek be.
Paritás engedélyezésénél, ha a bejövő karakter paritása nem egyezik meg a programozott paritással, a paritás hiba bit (RR1/D4) 1-be íródik.
Ha a bejövő karakter stop bit(ek) nélkül érkezik, akkor a keret (Framing) hibajelző bit (RR1/D6) 1-be íródik. Ellentétben a paritás bittel a keret hiba nem tárolódik és csak az adott karakterre érvényes. Keret (Framing) hibánál a SIO másfél bitnyi időt hozzáad a karakterhez és így a kerethiba nem lesz olyan, mint egy új start bit.
Ha a vevő több mint három karaktert kap és ezt a CPU olvasása nem követi, vételi túlcsordulás lesz és a megfelelő RR1/D5-ös bit 1-be íródik. A vevő puffer regiszterében a bejövő negyedik karakter a harmadikat felülírja, de csak a felülirt karakter túlcsordulás bitje fog jelezni. Ez a hibajel - hasonlóan a paritáshibához - csak a CPU "reset" utasításával törölhető. Mind a formátum, mind a túlcsordulás hiba különböző vektorú megszakítást tud kérni.
Tekintettel arra, hogy a paritás és túlcsordulás hibajelző biteket tárolja a SIO, a hibajelzés nemcsak az adott szóra vonatkozik, hanem az összesre, ami az utolsó "reset" utasítás után érkezett. A megfelelő kapcsolat megtartása érdekében ezért először a státusz regisztereket kell kiolvasni az adatok előtt. Ez könnyen megoldható a vektoros megszakítási móddal, mert ott egy ennek megfejelő speciális rutin megírható.
Amikor a külső/státusz megszakítás engedélyezve van, a "break" karakter érzékelése megszakítást kér és a megfelelő státusz bit (RR0/D7) aktív állapotba kerül. A break által kért megszakítást a SIO külső/státusz megszakítás törlő utasításával kell kiszolgálni. A SIO állandóan figyeli a bejövő adatokat és az adás végét jelző "break" jelnél nullázza a "break" státusz bitet és megszakítást kér a CPU-tól.
Kiszolgálásnál a CPU újra kiadja a külső/státusz törlő utasítást, hogy alapállapotba állítsa a "break" figyelő logikát. A külső/státusz figyelő logika a DCD státuszát is figyeli. Ha a DCD egy meghatározott időnél hosszabb időre inaktív állapotba kerül a DCD státusz bit 1-be állításával a SIO megszakítást kér.
Ha a státusz regisztert az adat után olvassák ki, akkor az már a következő adatra is vonatkozhat. Ha a kiolvasás elég gyors (a következő karakter még nem érkezik meg) a státusz érvényes marad. Kivételt képez, ha az első karakterre történő megszakítási mód volt kiválasztva. Ebben az esetben egy speciális megszakításnál a hibajel és az adat a hiba törlő utasításig megmarad. Ez megakadályozza, hogy a törlő utasítás előtt az adat érvényessé váljon, és lehetővé teszi, hogy hibás karakternél a DMA, vagy blokkos átvitel alatt a CPU beavatkozzon.
Karakterenként kért megszakításnál a megszakítási vektor eltérő, ha az RR1 regiszterben hiba státuszjel van. Vételi túlcsordulásnál az utolsó előtti karakter elveszik. Ezután a CPU beolvasáskor a felülirt karakterrel együtt hibajelzést és egy speciális vektorú megszakítást is kap, ha a státuszfüggő vektoros megszakítás engedélyezve volt.
Lekérdezéses üzemnél a CPU a "vételi karakter kész" (RR0/D0) bitet figyeli és ebből tudja, hogy mikor olvashat ki adatot. A vevő puffer regiszterének kiolvasásával ez a bit automatikusan törlődik.
Az adás oldali túlcsordulás megelőzésére a CPU az adó státuszát figyeli és ettől függően ír adatot az adó puffer regiszterébe. Ha az adó puffer regisztere üres, a megfelelő státusz bit 1-be íródik.

4. Szinkron üzemmód

4.1. Bevezetés
A szinkron adás-vétel leírása előtt először a háromféle szinkronizálásról (egyszinkronos, kétszinkronos és külső szinkronos) szeretnénk szólni. Ezek az üzemmódok mindig 1x-es órajelet használnak. A SIO mindig az RxC felfutó élénél vesz mintát a bemeneti adatból, és a kimenet mindig a TxC lefutó élénél vált.
A szinkronizálási üzemmódot a szinkron karakterek betöltése előtt kell kiválasztani, mert a regiszterek az üzemmódtól függően kerülnek felhasználásra. A három szinkronizálási módhoz tartozó formátumot a 4.1 ábra mutatja.


4.1 ábra: szinkron formátumok

Alapállapotba állítás (reset) után a vevő mindig "Hunt" fázisba kerül, ahol a szinkronizálási folyamat zajlik le. A folyamat csak a vevő engedélyezése után kezdődik és az adatok vétele a szinkronizálás után indul. Szinkronizálás után a WR3/D4 bit beírásával a Hunt fázis újra aktivizálható. Adásnál az adó mindig kiadja a 8 vagy 16 bites szinkronkaraktert. Egyszinkronos üzemben az adó a WR6 regiszter tartalmát adja ki, míg a vevő a WR7 tartalmához hasonlít össze.
Mindhárom szinkronizálási módnál a beindult vétel addig folytatódik, amíg törlés (reset), vagy vétel letiltó utasítás (automatikus engedélyezésnél a DCD utasítás), illetve szinkronizálás újraindító utasítás nem érkezik.
A 4.1 táblázatban a WR3-WR5 vezérlő regiszterek a szinkron vétel és adás üzembeni funkcióit mutatja:

  BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
WR3 00 = Rx 5 BITS/CHAR
10 = Rx 6 BITS/CHAR
01 = Rx 7 BITS/CHAR
11 = Rx 8 BITS/CHAR
AUTO
ENABLES
ENTER HUNT MODE Rx CRC ENABLE 0 SYNC CHAR LOAD INHIBIT Rx
ENABLE
WR4 0 0 00 = 8-BIT SYNC CHAR
01 = 16-BIT SYNC CHAR
10 = SDLC MODE
11 = EXT SYNVC MODE
0 0 EVEN/ODD
PARITY
PARITY
ENABLE
WR5 DTR 00 = Tx 5 BITS (OR LESS)
        CHAR
10 = Tx 6 BITS/CHAR
01 = Tx 7 BITS/CHAR
11 = Tx 8 BITS/CHAR
SEND
BACK
Tx
ENABLE
1
SELECTS CRT-16
RTS Tx CRC ENABLE

A WR0 regiszter különféle más regiszterekre vonatkozó utasításokat tartalmaz. A WR1 határozza meg a megszakítási módot, WR2 tartalmazza a megszakítási vektort és a WR6, WR7 regiszterek tartalmazzák a szinkron karaktereket. A 4.2 táblázat egy tipikus kétszinkronos fél-duplex adás programlépéseit mutatja be:

Funkció   Program lépések Megjegyzések
  Regiszterek betöltése:  
Kezdeti feltételek beállítása WR0 CSATORNA ÉS ADÁS CRC TÖRLÉS SIO törlése és a CRC alapállapotba állítása
WR0 2. PONTER (2. REG. TÖRLÉS BEÁLL.)  
WR2 MEGSZAKÍTÁSI VEKTOR BETÖLTÉSE csak a B csatornára
WR0 3. POINTER  
WR3 AUTOMATIKUS ENGEDÉLYEZÉS Az adás a CTS detektálása után indul
WR0 4. PONTER  
WR4 PARITÁS, SZINKRONIZÁLÁS ÉS 1x-ES ÓRA BEÁLLÍTÁSA Az adó paramétereinek beállítása
WR0 6. POINTER  
WR6 1. SZINKRON KARAKTER  
WR0 7. POINTER, KÜLSŐ/STÁTUSZ MEGSZAKÍTÁS TÖRLÉSE  
WR7 2. SZINKRON KARAKTER  
  WR0 1. POINTER, KÜLSŐ/STÁTUSZ MEGSZAKÍTÁS TÖRLÉSE  
  WR1 STÁTUSZ MÓDOSÍTÓ VEKTOR ÉS KÜLSŐ MEGSZAKÍTÁS ÉS ADÁS MEGSZAKÍTÁS ENG., VAGY WAIT/READY END. A külső megszakítási mód figyeli a CTS és DCD jeleket, valamint az AE/EOM tárolót. Adás megszakítás lesz, ha az adó puffer regisztere üres. A "wait/ready" jelek a DMA vagy a CPU blokkos átvitelnél használhatók.
  WR0 5. POINTER Státusz módosító vektor
  WR5 RTS, TE KÉTSZINKRONOS CRC, KARAKTER HOSSZ A CRC engedélyezés beállítása az első adat előtt.
    AZ ELSŐ SZINKRON BYTE KIADÁSA A SIO-NAK Az üzenet megkezdéséhez több szinkron karakter szükséges. Ezzel az adó beállítása megtörtént.
Várakozó állapot   HALT UTASÍTÁS, VAGY MÁS EGYÉB PROGRAM VÉGREHAJTÁSA Várakozás a megszakításra, vagy a "wait/ready" jelre, hogy újabb adatot küldjön a CPU
Adatátvitel és státusz figyelés   MEGSZAKÍTÁSKOR A KÖVETKEZŐ KISZOLGÁLÁS LESZ: AZ ADAT-BYTE BEVÉTELE VAGY KIHAGYÁSA A CRC-BŐL, ADAT-BYTE KIKÜLDÉSE A SIO-NAK, KARAKTER FIGYELŐ FLAG BEÁLLÍTÁSA A CPU-BAN. ER/EOM TÁROLÓ TÖRLÉSE, MEGSZAKÍTÁSI PARAMÉTEREK VISSZAÁLLÍTÁSA A CPU-BAN, RETI Megszakítás (vagy "wait/ready" aktív állapotba állítása) az első adat kiküldése után.
A "wait" biztosítja a blokkos adatátvitelt a CPU és a SIO között, a "ready" pedig a DMA és a SIO között.
Hiba vagy státusz megszakítás rutinja   RR0 BEOLVASÁSA A CPU-BA, HIBÁNAK MEGFELELŐ RUTIN LEFUTTATÁSA, RETI AE/EOM jelzi, hogy adás elmaradás történt és szinkron karakterek mentek ki az üzenet végén.
Befejezés   MODEM VEZÉRLŐ KIMENETEK BEÁLLÍTÁSA (PL. RTS LETILTÁSA)
ADÁS LETILTÁSA
A program befejezi az üzenetet

4.2. Szinkron adás üzemmód

4.2.1 Kezdeti állapot beállítása (Initialisation)
Az adás kezdeti feltételeit a következő paraméterek programozásával lehet beállítani: páros, vagy páratlan paritás, 1x-es órajel, 8 vagy 16 bites szinkron karakter, CRC polinom, adás engedélyezés, RTS (Request to Send), DTR (adat kész jel), megszakítási mód és karakter hossz. A WR4 regisztert a WR1, WR3, WR5, WR6 és WR7 regiszterek előtt kell betölteni.
Két típusú polinom CRC-16 használható a szinkron üzemben. Az első esetben (nem SDLC üzemmód) kezdésnél a CRC generátor és ellenőrző 0-ra törölve van. Az adás előkészítő fázisban a CRC generátort a WR0 CRC törlő utasítása állítja alapállapotba. Az adó és a vevő ugyanazzal a polinommal dolgozik.
Az adatátvitel az adás megszakítás, vagy a "wait/ready" engedélyezés kiválasztásával történhet. A külső/státusz megszakítás engedélyezésével a CLEAR TO SEND bemenet és az átvitel túlcsordulás/EOM tárak figyelhetők meg. Opcionálisan az automatikus engedélyezés is használható az adás engedélyezésére, ha a CTS figyelése útján a CPU tudja, hogy mikor kell kiolvasni a karaktert. Ez a bit a vevő puffer regiszterének olvasásával automatikusan törlődik. Lekérdezéses üzemmódban (polled) a felülírás elkerülésére az adó puffer re-giszter státuszát az adat kiküldése előtt ellenőrizni kell. Ez a státusz bit 1-be íródik, ha a puffer regiszter üres.
Az első adatátvitel a Z80-SIO felé a külső/státusz megszakításkéréssel kezdődhet (CTS státusz bit aktív), vagy közvetlenül az adás engedélyezéssel is lehetséges, ha az automatikus engedélyezés volt beállítva.
Törlés után a kimeneti vonal folyamatosan 1-ben marad addig, amíg az adót nem engedélyezik.
"Break" intervallum a "Send Break" programozásával generálható. Ha a beállítással megkezdődött adás közben adatkimaradás fordul elő, az adó folyamatos szinkron karaktereket továbbít.

4.2.2 Adatátvitel és státusz felügyelet
Adatátvitel megszakításokkal: Ha a WR1/D1 bit (megszakításos adás) aktív állapotban van, mindig megszakításkérés történik, amikor az adó puffer regisztere üres. A megszakításkérés kiszolgálható egy új karakter küldésével, vagy a WR0/CMD5 megszakítás törlő bit beírásával. Ha a megszakítást az utóbbi utasítással szüntettük meg és nincs írás a puffer regiszterbe, több megszakítás nem keletkezik.
Ez természetesen adat elmaradást (alácsordulást, underrun) okozhat, mellyel a "kétszinkronos adás elmaradás" fejezetben foglalkozunk.

Adatátvitel a wait/ready felhasználásával: A WAIT aktív állapota jelzi a CPU-nak, hogy a Z80-SIO nem áll készen az adat vételére és a CPU-nak meg kell hosszabbítania az I/O ciklusát. A READY jelzi a DMA vezérlőnek, hogy az adó puffer regisztere üres és fogadni tudja a következő karaktert. Ha nem érkezik újabb adat mielőtt az adó shift regisztere kiürül az adó adat (alácsordulás) elmaradás állapotba megy.

Kétszinkronos adáselmaradás (transmit underrun): A kétszinkronos protokollnál a szinkronizáció megtartására, adásszünetben kitöltő adatokat kell küldeni. A Z80-SIO kétféleképpen programozható erre a feladatra: az első, hogy szinkron karakterek adásával tölti ki a szünetet; a másik lehetőség, hogy a CRC is szinkron karaktereket küld. Ezeket a funkciókat az adás elmaradás /EOM bit vezérli, amely a WR0 regiszterben található. A kezdeti törlő (reset) utasítás után az adás elmaradás /EOM státusz bit, RR0/D6 aktív állapotban engedélyezi a szinkron karakterek küldését, amikor nincs adat. Amikor a CPU üzenet vége jelet kap, kiadhatja az adás elmaradás /EOM (a továbbiakban ezt AE/EOM-el jelöljük) megszakítást. Ez engedélyezi, hogy CRC kerüljön adásra, amikor az adatok elmaradnak. Ekkor a SIO, CRC és szinkron karakterek küldésével jelzi az üzenet végét.
Nincs megkötés arra vonatkozóan, hogy mikor lehet kiadni az AE/EOM törlő utasítását. Ha az első karakter betöltése után érkezik az AE/EOM törlő utasítás, akkor ha az adatok elmaradnak, 16 bites CRC és szinkron karakterek adása következik. Lévén, hogy az AE/EOM adás elmaradást jelez, egyúttal külső/státusz megszakítást is generál.
Szinkron jelek beiktatásánál megszakítás akkor keletkezik, amikor az első kitöltő szinkron karakter betöltődik az adó regiszterébe. A státuszban ilyenkor az AE/EOM és a TBE (Transmit Buffer Empty) bitek aktívak.
A CRC beiktatásánál a AE/EOM bit aktív és a TBE bit törölve van.
Ha a CRC kimenet a TBE státusza is aktív állapotba kerül és megszakítást kér a CPU-tól. Ez jelzi, hogy egy másik adatblokk átvitele kezdődhet (a megszakítás a CRC utáni szinkron karakter betöltésekor generálódik). Ha nincs több továbbítandó adat a programot a törlő (RTS) utasítással lehet befejezni.
Kitöltő (pad) karakterek küldhetők, ha a SIO 8 bites adásra van programozva és FF adatot töltünk az adóba, amikor a CRC éppen adásban van. Ezzel a megoldással mellékesen a szinkron karakter is újra definiálható. Ezt a következő példával szeretnénk megvilágítani:
A TBE bit aktív állapota megszakítja a Z80-CPU-t. A CPU felismeri a program státuszból, hogy az utolsó karaktert küldte ki a SIO-nak. Ahhoz, hogy a SIO-t CRC kiküldésére kényszerítse a CPU, kiadja az AE/EOM törlő utasítást és a megszakításra az adás megszakítás tör-lő utasítással válaszol (ez az utasítás megakadályozza, hogy a Z80-SIO további adatot kérjen).
Az utasítás hatására bekövetkező adat elmaradásra a Z80-SIO CRC karaktereket küld. A Z80-SIO külső/státusz megszakítást is kérhet ha az AE/EOM bit aktív. A megszakításra a CPU "pad" karaktereket küld az adó bufferébe és kiadja a külső/státusz megszakítás törlő utasítást, így a kiadott CRC karaktert "pad" karakterek fogják követni a szinkron karakterek helyett.
Megjegyzendő, hogy a Z80-SIO, miután a CRC-t kiadta és a pad karakter betöltődött a kimeneti léptető regiszterbe az adó regiszter üres állapotával megszakítást fog kérni. Ettől a ponttól a CPU küldhet további kitöltő vagy szinkron karaktereket.

Kétszinkronos CRC generálás: A CRC engedélyező bit (WR5/D0) betöltésével a CRC generálás megindul. A Z80-SIO automatikusan kiadja a két szinkron karaktert (16 bit), ajánlatos ennél többet küldeni, hogy az adatok előtt a CRC engedélyezésénél a szinkronizálás már biztosan megtörténjen a vevőnél.
Az adatforgalom alatt a CRC engedélyező bit bármikor váltható és így karakterek kihagyhatók, illetve beszámíthatók a CRC generálásba. Az engedélyező bitnek a kimeneti léptető regiszter betöltése előtt stabilnak kell lennie. Ennek biztosítására a CRC engedélyező utasítást az aktuális karakter kiküldése előtt kell kiadni a Z80-SIO-nak.

Tiszta adás (transparent )üzemmód: Ez az üzemmód egy 16 bites szinkron karakter beiktathatóságával lehetővé teszi a CRC engedélyezés bármikori beírását. Megakadályozható, hogy a DLE karakter bekerüljön a CRC számításba, ha a karakter kiküldése előtt letiltják a CRC generálást.
Ebben az üzemmódban adat elmaradásnál a SIO DLE-SYNC karaktereket küld. Ilyenkor a DLE karakter a WR6, a szinkron karakter pedig a WR7 regiszterben van.

Az adás befejezése: A Z80-SIO-nak egy speciális adásbefejező ciklusa biztosítja az adatok egységét és érvényességét. Ha az adót letiltják mialatt adatot vagy szinkron jelet küld, még kiküldi az adásban lévő karaktert, azután folyamatosan 1-et küld (marking), mielőtt a CRC és szinkron karaktereket kiadná. Letiltáskor a puffer regiszterek tartalma nem változik. Ha a CRC kiadása alatt tiltják le a SIO-t, a 16 bites átvitel befejeződik, de CRC helyett szinkron jel megy ki.
A programozott "break" azonnal érvényes, amint az a vezérlő regiszterbe kerül és a puffer, valamint a léptető regiszter tartalma elveszik.
A karakterek továbbítása minden üzemmódban a legkisebb helyértékű bittel kezdődik. A nem használt bitek állapota lényegtelen, kivéve az 5 vagy kevesebb bites üzemmódokat.
Ha a külső/státusz megszakítás engedélyezve volt, a CRC és szinkron karakterek küldése vagy a CTS váltás, különböző vektorú megszakításokat kérnek, ha a vektor módosító státusz bit is 1-ben van. Ez a megszakítási mód a blokkos átvitelnél használható.
Lekérdezéses üzemben minden megszakítási mód tiltva van.

4.3 Szinkron vétel

4.3.1 Kezdeti feltételek beállítása (Initialization)
A szinkron vétel beállításánál a következő paramétereket kell beprogramozni: páros vagy páratlan paritás, 8 vagy 16 bites szinkron karakter, 1x-es órajel CRC polinom, karakterhossz, stb. A szinkron karaktereket a WR6 és WR7 regiszterekbe kell tölteni. A vevő csak az összes paraméter beállítása után engedélyezhető. A WR4 regisztert a WR1, WR3, WR5, WR6, és WR7 regiszterek előtt kell betölteni.
A beprogramozás után a vevő "Hunt" állapotba kerül, ahol a szinkronizálás befejezéséig marad. Megjegyzendő, hogy a szinkron karakterek bejutása a puffer regiszterbe megakadályozható a tiltó bit betöltésével a WR3 regiszterbe.

4.3.2 Adatátvitel és státusz felügyelet
Szinkronizálás után az összeállított karakter az adat FIFO-ba kerül. Az adat és a hozzátartozó státusz a következő négy megszakítási móddal vihető át a CPU-ba:

A következő példa egy CRC ellenőrzést mutat be, ahol négy karakter (A, B, C, D) vétele történik:

Ha a CRC-t letiltjuk mielőtt a C karakter a pufferbe érne, a CRC nem veszi figyelembe a B karaktert.

A C karakter betöltése után a CRC/keret bit tartalmazza a komparálás eredményét az A karakterig.

Ekkor a CRC hiba bit a B karakterig mutatja az összehasonlítás eredményét.

A CRC számítás soros volta miatt még 16 ciklus szükséges (8 bit késleltetés és 8 bit léptetés), miután a második karakter bejutott a puffer regiszterbe, vagy 20 ciklus (előző 16+3 bit puffer késleltetés +1 bit bemeneti regiszter késleltetés) miután az utolsó bit az RxD bemenetre került, hogy a CRC számítás befejeződjön. Egy gyorsabb órát kapuzva erre az időre az órabemenetre, meggyorsítható a számítás.

A 4.3 táblázat egy fél-duplex, kétszinkronos vételi mód működésének tipikus programlépéseit mutatja be. Az utasítások és státuszok gyűjteménye a "Z80-SIO programozása" című fejezetben található:

Funkció   Program lépések Megjegyzések
  Regiszterek betöltése:  
Kezdeti feltételek beállítása WR0 CSATORNA ÉS VEVŐ CRC TÖRLÉS SIO törlése és a CRC ellenőrző alapállapotba állítása.
WR0 2. PONTER A 2. vezérlő regiszter kijelölése.
WR2 MEGSZAKÍTÁSI VEKTOR BETÖLTÉSE csak a B csatornára
WR0 4. POINTER A 4. vezérlő regiszter kijelölése.
WR4 PARITÁS, SZINKRON ÉS 1x-ES ÓRA BEÁLLÍTÁSA Vételi paraméterek beállítása.
WR0 5. POINTER, KÜLSŐ STÁTUSZ MEGSZ. TÖRLÉS  
WR5 KÉTSZINKRONOS CRC-16, DTR  
WR0 3. POINTER  
WR3 SZINKRON KARAKTER BETÖLTÉS TILTÁS, CRC. ENG., "HUNT" ÁLLAPOT, AUTOMATIKUS ENG., KARAKTER HOSSZ
Szinkron karaktert nem olvas be és a vétel a DCD aktív állapotánál kezdődik.
WR0 6. POINTER  
WR6 1. SZINKRON KARAKTER BETÖLTÉSE  
  WR0 7. POINTER  
  WR7 2. SZINKRON KARAKTER BETÖLTÉSE  
  WR0 1. POINTER, KÜLSŐ/STÁTUSZ MEGSZ. TÖRLÉS  
  WR1 STÁTUSZ MÓDOSÍTÓ VEKTOR, KÜLSŐ MEGSZAKÍTÁS ENG., ELSŐ KARAKTER MEGSZ. ÜZEMMÓD KIJELÖLÉSE Ebben a megszakítási módban csak az első adat karakter íródik be a CPU-ba. Az összes többi a DMA-n keresztül megy, de a speciális vételi állapotok megszakítják a CPU-t. A vektor módosító státusz csak a B csatornára vonatkozik.
  WR0 3. POINTER, MEGSZ. ENGEDÉLYEZÉS A KÖVETKEZŐ KARAKTERRE A megszakítási mód törlése.
  WR3 VÉTEL ENGEDÉLYEZÉSE, SZINKRON KARAKTER OLVASÁS TILTVA, "HUNT" ÁLLAPOT, AUTOMATIKUS ENGEDÉLYEZÉS, KARAKTER HOSSZ A vevő újraengedélyezése. A vételi CRC-t az SOH és STX karakterek után kell engedélyezni.
Várakozó állapot   HALT UTASÍTÁS, VAGY MÁS EGYÉB PROGRAM VÉGREHAJTÁSA A vételi üzem kész, és a rendszer vár az első karakteres megszakításra.
Az első karakterre történő megszakítás rutinja   ADAT BYTE ÁTVITELE A CPU-BA, KARAKTER FLAG BEÁLLÍTÁSA A CPU-BAN, AZ ADAT BESZÁMÍTÁSA VAGY KIHAGYÁSA A CRC-BE, CPU PARAMÉTEREK VISSZAÁLLÍTÁSA "WAIT/READY" ENGEDÉLYEZÉSE A DMA-NAK. DMA ENGEDÉLYEZÉS ÉS RETI A "hunt" fázisban a SIO elvégzi a szinkronizálást. A CPU beállítja a DMA üzemmódot és a karakterek a DMA-n keresztül jutnak a memóriába.
A "WAIT/READY" aktivizálását követő rutin   AZ ADAT BYTE BEVITELE A MEMÓRIÁBA, CPU MEGSZAKÍTÁS, HA A DMA SPECIÁLIS KARAKTERT KAPOTT, VAGY AZ UTOLSÓ KARAKTER ÉRKEZETT  
Az üzenet befejezése   AZ RR1 REGISZTER BEOLVASÁSA A CPU-BA, ACK/NAK FLAG BEÁLLÍTÁSA A CRC EREDMÉNYÉNEK MEGFELELŐEN, A CPU PARAMÉTEREK VISSZAÁLLÍTÁSA, RETI Hibánál a SIO megszakítást kér a CPU-tól és a hibarutin törli az üzenetet, valamint a hiba státuszt és az átvitel megismétlődik.
Befejezés   MEGSZAKÍTÁSI ÉS SZINKRONIZÁLÁSI MÓDOK ÚJRADEFINIÁLÁSA, MODEM VEZÉRLŐ BEÁLLÍTÁSA, VÉTEL LETILTÁSA  

5. SDLC (HDLC) üzemmód

5.1. Bevezetés
A Z80-SIO alkalmas a HDLC (High-level Synchronous Data Link Control) és az IBM SDLC (Synchronous Data Link Control) protokolljának megfelelő működésre. A nagyfokú hasonlóság miatt a továbbiakban csak az SDLC-re hivatkozunk.
Az SDLC erősen eltér az egyszinkronos és kétszinkronos üzemmódoktól és inkább bit, mint karakter orientáltsága következtében kezeli az átvivő (transparent) működést. Az SDLC bit orientáltsága lehetővé teszi a különféle hosszúságú és bit mintájú üzenetek átvitelét. Az SDLC működéséről az IBM GA27-3093 dokumentációban találhatunk ismertetést.

Az SDLC üzenet kerete, hasonlóan a kétszinkronos üzemhez egy-egy jelző karakterrel kezdődik és fejeződik be (5.1 ábra):


5.1 ábra: az SDLC/HDLC üzenet adás/vétel formátuma

A Z80-SIO figyeli a bejövő adatokat és felismeri a kezdő és vége karaktereket, melyek az üzenet keretét képezik. Megjegyzendő, hogy a SIO felismeri az elosztott nullás (shared-zero) flag karaktereket, de adáskor nem tudja kiadni.
Az SDLC 8 bites címrésze egy második címet is tartalmaz. A Z80-SIO rendelkezik másodlagos címfelismerő logikával, amely felismeri a második címet és ennek megfelelően veszi, vagy elhagyja az üzenetet.
A Z80-SIO-n keresztül az SDLC kerete a CPU-ba vihető át. A Z80-SIO keret ellenőrzést végez, ami egyszerűsíti a programot azzal, hogy alapállapotba állítja a CRC generátort (tiszta 1-be), vételnél törli a CRC generátort, amikor a kezdő karaktert azonosította és keret ellenőrző/jelző szekvenciát küld adásnál. A hardware is tovább egyszerűsíthető a SIO automatikus nulla beiktató és törlő logikájával.
Az 5.1 táblázat a WR3, WR4 és WR5 regiszterek tartalmát mutatja az SDLC üzemmódban:

  BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
WR3 00 = Rx 5 BITS/CHAR
10 = Rx 6 BITS/CHAR
01 = Rx 7 BITS/CHAR
11 = Rx 8 BITS/CHAR
AUTO
ENABLES
ENTER HNT. MODE (IF INCOMING DATA NOT NEEDED) Rx CRC ENABLE ADRESS SEARCH MODE 0 Rx
ENABLE
WR4 0 0 1 0 0 0 0 0
WR5 DTR 00 = Tx 5 BITS (OR LESS)
        CHAR
10 = Tx 6 BITS/CHAR
01 = Tx 7 BITS/CHAR
11 = Tx 8 BITS/CHAR
0 Tx
ENABLE
0
SELECTS
SDLC
CRC
RTS Tx CRC ENABLE

5.2. SDLC adás

5.2.1. A kezdeti feltételek beállítása
A többi üzemmódhoz hasonlóan, az SDLC adás megkezdése előtt be kell programozni a SIO paramétereit. Ezalatt meg kell határozni az SDLC üzemmódot, az SDLC polinomot, az adatkérést, az adat kész jelet, karakter hosszat, megszakítási módot, adás engedélyezést, automatikus engedélyezést és a külső/státusz megszakítást.
Kiválasztva az SDLC üzemmódot és polinomot a SIO tiszta 1-esekre állítja a CRC generátort, amit a WRO regiszter CRC generátor törlő utasításával hajt végre. A megszakítási módok megegyeznek a szink-ron működésnél leirt módokkal.
Törlés (reset) után, vagy ha az adás nincs engedélyezve a kimenet folyamatos 1-ben van (marking) és szünet jel a "break" programozásával generálható. A teljes felprogramozás után az adó folyamatos kezdő jeleket /flag/ ad a kimenetre.
Abort szekvencia a WRO/CMD utasítással küldhető. Ez legalább 8, de kevesebb, mint 14 1-es kiküldését jelenti, és ezután ismét flag jeleket küld az adó. Lehetséges, hogy egy "abort" szekvenciát (8 db l-es) a nulla beiktató logika által meghagyott 5 db 1-es követ, ami így 13 db 1-est eredményez. Az "abort" utasítás kiadásával az adásban és a pufferben lévő adatok elvesznek.
Ha az adatfolyamban 5-nél több 1-es következik egymás után, további nullák beiktatására van lehetőség. Az "abort" és "flag" szekvenciáknál ez nem érvényes.

5.2.2. Adatátvitel és státusz felügyelet
Az SDLC üzemmódban különféle kombinációjú megszakítási és "wait/ready" funkciók vannak.

A fenti szekvenciából látható, hogy a CPU-nak legkevesebb 22 és maximum 30 ciklusidő áll rendelkezésére a beavatkozásra.

Minden üzemmódban az adatátvitel a legkisebb helyértékű bittel kezdődik. Az 5 vagy ennél is rövidebb karakterekhez lásd a SIO programozásának "5. vezérlő regiszter" című pontját. Lévén, hogy a karakterek bitszáma menet közben váltható, az üzenet adatrésze bármilyen számú bittel kitölthető.
A vételi többlet (Receiver Residue) üzemben a Z80-SIO vehet változó hosszúságú adatrészt az üzenetben és azt változtatás nélkül továbbítani is tudja minden előzetes információ nélkül. A karakter bitszámának változtatása nem érinti az adásban lévő karakter bitszámát. A karakterek azzal a bitszámmal kerülnek adásra, ami a pufferből a léptető regiszterbe töltéskor programozva van.
Ha a külső/státusz megszakítás engedélyezett, akkor a következő események ill. állapotok kérhetnek különböző vektorú megszakítást (feltéve, hogy a vektor módosító státusz is engedélyezett): CRC karakter küldés, flag karakter küldés, és a CTS jel változása. Lekérdezéses üzemnél minden megszakítás tiltva van.

Az 5.2. táblázat egy fél-duplex SDLC adás tipikus program-lépéseit mutatja be:

Funkció   Program lépések Megjegyzések
  Regiszterek betöltése:  
Kezdeti feltételek beállítása WR0 CSATORNA TÖRLÉS Reset SIO
WR0 2. POINTER A 2. regiszter kijelölése
WR2 MEGSZAKÍTÁSI VEKTOR Cscak a B csatornánál
WR0 3. POINTER  
WR3 AUTOMATIKUS ENGEDÉLYEZÉS Az adás a CTS-re indul
WR0 4. PONTER, RESET KÜLSŐ MEGSZ.  
WR4 PARITÁS, SDLC ÜZEMMÓD, 1x ÓRA  
WR0 1. POINTER, RESET KÜLSŐ/STÁTUSZ MEGSZ.  
WR1 KÜLSŐ MEGSZAKÍTÁS ENG. VEKTOR MÓDOSÍTÓ STÁTUSZ, ADÁS MEGSZAKÍTÁS ENG., VAGY WAIT/READY ENG. A külső megszakítási üzemmód figyeli a CTS, DCD és AE/EOM jeleket. Az első megszakítás a CTS aktív állapotánál lesz, amikor a SIO flag jeleket továbbít. Ezután betölthető az első adat a SIO-ba.
Flag-jelek nem küldhetők a SIO-nak.
WR0 5. POINTER  
WR5 ADÁS CRC ENG. RTS, SDLC-CRC, ADÁS ENG. SZÓHOSSZ, DTR A szinkron üzemmódot a CRC generátor alapállapotba állítása előtt kell definiálni.
WR0 RESET ADÁS CRC GEN. A CRC generátor tiszta 1-esbe állítása.
Várakozó állapot   HALT UTASÍTÁS, VAGY MÁS EGYÉB PROGRAM VÉGREHAJTÁSA Várakozás a megszakításra, vagy a "wait/ready" jelre
Megszakítás kiszolgálás   SZÓHOSSZ VÁLTOZTATÁS, HA SZÜKSÉGES, ÚJ ADAT KIVITELE A SIO-BA, RESET AE/EOM TÁROLÓ Először a CTS váltás kér megszakítást, majd az újabb adatokért az üres puffer regiszter
Az utolsó karakter kiadása után a SIO a következőket teszi   CRC KIADÁSA, ZÉRÓ FLAG KIADÁSA, CPU MEGSZAKÍTÁSA A BUFFER ÜRES STÁTUSSZAL Bevált gyakorlat, hogy az AE/EOM tárat az üzenet elején törlik, hogy elkerüljék a hibás vége jel detektálását a vevőnél.
Adatátvitel és státusz felügyelet   ADÁS MEGSZAKÍTÁS FÜGGŐ RESET KIADÁSA A SIO minden megszakítására adható, "abort" utasítás, ami azonnali "abort" karakter kiadását eredményezi.
Hibamegszakítás kiszolgálás   HIBA RUTIN VÉGREHAJTÁSA, PARAMÉTEREK VISSZAÁLLÍTÁSA, RETI  
Befejezés   MEGSZAKÍTÁSI MÓDOK ÚJRADEFINIÁLÁSA, ADÁS LETILTÁSA Befejező üzenetek

5.3. DLC vétel

5.3.1 Kezdeti feltételek beállítása
Az SDLC vételi üzemmód a következő paraméterek kiválasztásával kezdődik: SDLC Üzemmód, 1x óra, SDLC polinom, szóhossz stb. A flag karaktert a WR7 regiszterbe, a második címet pedig a WR6 regiszterbe kell tölteni. A vétel engedélyezése csak a paraméterek beállítása után lehetséges. A vevő ilyenkor először a "Hunt" fázisba kerül és a szinkronizálásig ott is marad. A "Hunt" fázisból kilépve a vevő csak programból vihető vissza. A WR4 regisztert a WR1, WK3, WR5, WR6 és WR7 regiszterek előtt kell betölteni.
Programból a vevő címazonosító fázisba vihető. Ha a WR3/D2 (Address Search bit) 1-ben van, a flag jel után a SIO a WR6-ban lévő és egy fixen bekötött (csupa 1) címmel hasonlítja össze a karaktereket. Ha valamelyikkel megegyezik az SDLC keret címe, megkezdődik az adatok vétele.
A SIO csak egy címkaraktert tud összehasonlítani, a másodikat a CPU-nak kell elvégeznie. Ez úgy történik, hogy a következő címet továbbítja a CPU-nak, mintha az adat lenne. Ha ez a cím a CPU-nak nem megfelelő, akkor a CPU utasítással "Hunt" fázisba kényszeríti a SIO-t, ami így a vételt elölről kezdi. Az adatfolyam külön nullái automatikusan törlődnek és a flag jelek sem jutnak be a CPU-ba.

5.3.2. Adatátvitel és státusz felügyelet
Érvényes flag vétele után az összeállított karakterek a vevő FIFO-ba kerülnek. Ez az adat és a hozzátartozó státusz a következő négy megszakítási móddal vihető át a CPU-ba:

"Abort" szekvenciával bármelyik keret jel folyamatosan törölhető. A vevő "abort" szekvenciát detektál, ha több mint 7 db 1-es érkezik egymás után. Ha a külső/státusz megszakítás engedélyezve volt, az "abort" szekvencia detektálása megszakítást kér (Break/abort bit az RRO regiszterben). A megszakításra kiadott státusz törlés után az 1-esek törlésekor újabb megszakítás generálódik. Ezzel különböztethető meg az üzemen kívüli állapot az abort szekvenciától.
A szinkron üzemmóddal ellentétben az SDLC üzemmódban a CRC-nek nincs 8 bit késleltetése, mert a CRC előállításába minden karakter beleszámít.
A CRC számítás akkor fejeződik be, amikor a második CRC karakter is megérkezett a vevő puffer regiszterébe.

Az 5.3 táblázat egy fél-duplex SDLC vétel üzemmód tipikus programlépéseit mutatja be. A teljes utasítás készlet és a státusz bitek jelentését a következő fejezetben foglaljuk össze.

Funkció   Program lépések Megjegyzések
  Regiszterek betöltése:  
Alapállapot beállítása WR0 2. CSATORNA Reset SIO
WR0 2. POINTER A második regiszter kijrelölése. Csak a B csatornánál.
WR2 MEGSZAKÍTÁSI VEKTOR  
WR0 4. POINTER  
WR4 PARITÁS, SZINKRONIZÁLÁSI MÓD, SDLC, 1x ÓRA  
WR0 5. POINTER, KÜLSŐ/STÁTUSZ MEGSZAKÍTÁS TÖRLÉSE  
WR5 SDLC-CRC, DTR  
WR0 3. POINTER  
WR3 VÉTELI CRC ENG., HUNT FÁZIS, AUTOMATIKUS ENG. KARAKTER HOSSZ, CÍMKERESŐ ÜZEM A vevő a DCD jelre automatikusan megkezdi a vételt. A címkereső üzemmódban a SIO az üzenet címét összehasonlítja a programozott címekkel.
WR0 6. POINTER  
WR6 MÁSODIK CÍM SDLC pool üzemben ezt a címet hasonlítja össze az üzenet címével.
WR0 7. POINTER  
WR7 SDLC FLAG 01111110  
WR0 1. POINTER, KÜLSŐ/STÁTUSZ MEGSZ. TÖRLÉS Ez a megszakítás csak az első karaktert olvassa be.
WR1 VEKTOR MÓDOSÍTÓ STÁTUSZ, KÜLSŐ MEGSZAKÍTÁS ENG., MEGSZAKÍTÁS AZ ELSŐ KARAKTERNÉL Az adatok átvitele DMA-n keresztül történik.
WR0 3. POINTER, MEGSZAKÍTÁS ENGEDÉLYEZÉSE A KÖVETKEZŐ KARAKTERRE A következő lépések előkészítése.
WR3 VÉTEL ENGEDÉLYEZÉS, CRC ENGEDÉLYEZÉS, HUNT ÜZEMMÓDM AUTOMATIKUS ENGEDÉLYEZÉS, KARAKTERHOSSZ, CÍMKERESŐ ÜZEMMÓD  
Várakozó állapot   HALT UTASÍTÁS, VAGY MÁS EGYÉB PROGRAM VÉGREHAJTÁSA A SIO vár a nyitó flag és az azt követő címre, hogy megszakítsa a CPU-t.
Az első karakterre történő megsz. kiszolgálása   ADAT BYTE BEOLVASÁSA, CÍMKITERJESZTÉS DETEKTÁLÁSÁNAK VÉTELE ÉS A FLAG BEÁLLÍTÁSA, PARAMÉTEREK VISSZAÁLLÍTÁSA, DMA ENGEDÉLYEZÉSE, WAIT/READY ENGEDÉLYEZÉSE A SIO-BAN, RETI A Hunt fázisban a SIO megkeresi a programozott címet és megszakítja a CPU-t. A CPU beállítja a DMA üzemmódot.
DMA vezérlő válasza a ready jelre   AZ ADAT BYTE ÁTVITELE A MEMÓRIÁBA ÉS A POINTER BEÁLLÍTÁSA DMA működés alatt a SIO DCD jelre és "abort" szekvenciára megszakítja a CPU-t.
Adatátvitel és státusz felügyelet      

A vége jelre történt megszakítás kiszolgálása

  KILÉPÉS A DMA ÜZEMBŐL, RR1 BEOLVASÁSA A CPU-BA, CRC STÁTUSZ ÉS A MARADÉK KÓD ELLENŐRZÉSE, HIBA TÖRLÉS KIADÁSA A SIO-NAK. Az EOF (End of Frame) flag karakter vétele megszakítást kér a CPU-tól és letiltja a wait/ready működést. A maradék kód jelzi az átvitt utolsó két bytebitösszetételét.
Abort szekvencia megszakításának kiszolgálása   AZ RR0 REGISZTER BEOLVASÁSA A CPU-BA, KILÉPÉS A DMA ÜZEMBŐL, KÜLSŐ/STÁTUSZ MEGSZAKÍTÁS TÖRLÉS A SIO-NAK, VÁRAKOZÓ ÁLLAPOTBA LÉPÉS A CPU az "abort" szekvencia befejezésére vár, ami megszakítást kér.
Második abort szekvencia megszakításának kiszolgálása   KÜLSŐ/STÁTUSZ MEGSZAKÍTÁS TÖRLŐ UTASÍTÁS KIADÁSA A SIO-NAK A program megkezdi az üzenet befejezését.
Befejezés   MEGSZAKÍTÁSI MÓDOK ÚJRADEFINIÁLÁSA, VÉTEL LETILTÁSA  

6. A Z80-SIO programozása

6.1. Bevezetés
A SIO programozásánál először a főbb üzemmódokat kell beállítani és azután az üzemmódon belüli paramétereket. Aszinkron üzemmódnál pl. először az órajel, karakterhossz, start és stop bitek számát és a paritást kell beállítani és aztán a megszakítást és az adás, vagy vétel engedélyezését. A kezdeti felprogramozásnál a WR4 regisztert a többi előtt kell betölteni.
A programozás a csatornák vezérlő regisztereinek feltöltésével történik. Az egyes regiszterek betöltését a C/D és a B/A vezérlő bemenetek beállításával lehet végrehajtani (ezeket a bemeneteket rendszerint a CPU címsine vezérli):

C/D B/A Funkció
0 0 Adat az A csatornára
0 1 Adat a B csatornára
1 0 Utasítás/státusz az A csatornára
1 1 Utasítás/státusz a B csatornára

Vezérlő regiszterek
A Z80-SIO csatornánként 8 regisztert tartalmaz, melyek a csatorna üzemmódjának megfelelően külön-külön programozhatók. A vezérlő regiszterek programozása a WR0-t kivéve két byte-ot igényel. Az első byte egy három bites pointert (D0-D2) tartalmaz, ami kijelöli, hogy melyik regiszterbe töltődjön a következő byte. A második byte az aktuális vezérlő utasítás, ami betöltődik a kijelölt regiszterbe és beállítja a SIO paramétereit.
A kiválasztott regiszterbe beírni és kiolvasni is lehet attól függően, hogy a CPU író-, vagy olvasó ciklust hajt végre. A WRO regiszter közvetlenül beírható. A törlő utasítás (külső vagy belső) és minden WRO-án kívüli regiszter kiolvasás után a pointer (WR0/D0-D2) a WR0 regiszterre mutat.
Könnyítést jelent, hogy a WRO regiszter a pointeren kívül még néhány alapvető utasítást is tartalmaz, melyek közvetlenül tölthetők. Mindkét csatornának a következő, utasítással címezhető vezérlő regiszterei vannak.

6.2. A WR0 vezérlő regiszter
A WR0 regiszter funkciói a következők:

 
D7
D6
D5
D4
D3
D2
D1
D0
WR0
CRC reset
"1"
CRC reset
"0"
DMC 2
CMD 1
CMD 0
PTR 2
PTR 1
PTR 0

Pointer bitek (WR0/D0-D2): Meghatározza, hogy melyik regiszterre vonatkozik a következő byte. Törlés után az első byte mindig erre a WR0 regiszterre vonatkozik. Más regiszterek írása és olvasása után a pointer mindig a WR0 regiszterre mutat.

A WR0 regiszter D3-D5 bitjeivel a következő 7 utasítást lehet kiadni a SIO-nak:

Utasítás CMD2 CMD1 CMD0 Utasítás
0 0 0 0 NOP utasítás
1 0 0 1 Abort küldés (SDLC üzemmód)
2 0 1 0 Külső/státusz megszakítás, törlés
3 0 1 1 Csatorna törlés
4 1 0 0 Megszakítás engedélyezés a következő karakterre (vétel)
5 1 0 1 Megszakítás függő tár törlés
6 1 1 0 Hiba törlés
7 1 1 1 A csatorna RETI

CRC törlő utasítások (WR0/D6,D7):

CRC reset
1
CRC reset
2
Funkció
0 0 NOP
0 1 Vevő CEC ellenőrző törlés
1 0 Adó CRC generátor törlés
1 1 AE/EOM tároló törlése

(AE = adás elmaradás (Transmit Underrun), EOM = üzenet vége (End Of Message)).

Az adó CRC generátorának törlése általában 0-ba állítja a CRC generátort, kivéve, ha SDLC üzemmód van, amikor 1-be.

6.3. A WR1 vezérlő regiszter
A WR1 a megszakítások és a "wait/ready" üzemmódjait vezérli.

Vektor módosító státusz (D1): Ez a bit csak a B csatornára érvényes. Ha ez a bit 0, akkor a WR2-nek megfelelő fix vektoros megszakításokat kér a SIO. Ha 1-ben van, akkor az alábbi táblázatnak megfelelő különböző vektorú megszakításokat kér a SIO:

  V3 V2 V1 Feltételek
B csatorna 0 0 0 B csat. üres puffer
0 0 1 B csat. külső/státusz váltás
0 1 0 B csat. vételi karakter kész
0 1 1 B csat. speciális feltételek
A csatorna 1 0 0 A csat. üres puffer
1 0 1 A csat. külső/státusz váltás
1 1 0 A csat. vételi karakter kész
1 1 1 A csat. speciális feltételek

Speciális feltételek: paritás hiba, túlcsordulás (vételnél), keret hiba, vége üzenet (EOF SDLC-nél)

Vételi megszakítási módok: A D3-D4 bitek jelölik ki, hogy mikor kérjen a vevő megszakítást a CPU-tól. Mindhárom engedélyezett üzemmódban (lásd a következő táblázatot) speciális vételi állapottal további, módosított vektorú megszakítások keletkezhetnek.

D4 D3  
0 0 0 vételi megszakítás tiltva
0 1 1 első karakter kér megszakítást
1 0 2 megszakítás minden vételi karakterre (paritáshiba speciális vételi állapot)
1 1 3 megszakítás minden vételi karakterre (a paritáshiba nem speciális állapot)

Wait/Ready funkció választás (D5-D7):

D7 D6 D5  
0 0 0 WAIT, harmadik állapotban van
0 0 1  
0 1 0 READY, 1-ben van
0 1 1  
1 0 0 WAIT üzemmód, 0 szinten van, ha az adó puffer tele van és harmadik állapotban, ha a puffer üres.
1 0 1 WAIT üzemmód, 0 szinten van, ha a vevő puffer regisztere üres és a SIO címezve van. Harmadik állapotba megy, ha a vevő puffer regiszterébe adat érkezik.
1 1 0 READY üzemmód, 1-ben van, ha az adó puffer regisztere tele van. 0-ba megy, ha az adó puffer regisztere üres.
1 1 1 READY üzemmód, 1-ben van, ha a vevő puffer regisztere üres, 0-ba megy, ha a vevő puffer regiszterébe adat érkezik.

A WAIT az I/O kérés után tDIC(WR) idő múlva fut le, és az órajeltől számított tDH(WR) idő múlva fut fel. A ready jel az órajel felfutásától számított tDL(WR) idő múlva megy le és az IORQ lefutásától számítva tDIC(WR) idő múlva fut fel.
A READY kimenet akkor is funkcionál, amikor a SIO nincs megcímezve. A READY kimenet aktív állapotára a DMA kiadja az IORQ, C/D, és B/A jeleket és lebonyolítja az adatátvitelt. Az IORQ és CS jelek aktív állapotánál a READY azonnal passzív állapotba kerül.
Az egyik csatorna WAIT kimenete aktív állapotba mehet, amikor a másik csatornát címezték meg (mert csak együtt lehet megcímezni a két csatornát, mint SIO-t).

6.4. A WR2 vezérlő regiszter
Megszakítási vektor tároló regiszter, csak a B csatornában van. Csak a V4-V7 és a V0 bit jut vissza változatlanul a CPU-ba, mint megszakítási vektor, a V1-V3 bitek csak akkor, ha a WR1/D2 vektor módosító státusz bit 0-ban van. Ha ez a bit 1-ben van, a V1-V3 bitek az előző fejezetben leírtak szerint módosítva jutnak vissza a CPU-ba.

6.5. A WR3 vezérlő regiszter
A WR3 regiszter a vevő üzemmódját és paramétereit állítja be. A regiszter egyes bitjeinek funkciói a következő:

D7 D6  
0 0 5 bit
0 1 7 bit
1 0 6 bit
1 1 8 bit

6.6. A WR4 vezérlő regiszter
A kezdeti programozásnál ezt a regisztert a WR1, WR3, WR5, WR6 és WR7 regiszterek előtt kell betölteni.

D3 D2  
0 0 szinkron üzemmód
0 1 1 stop bit/karakter
1 0 másfél stop bit/karakter
1 1 két stop bit/karakter
D5 D4  
0 0 8 bites programozott szinkron
0 1 16 bites programozott szinkron
1 0 SDLC üzemmód (01111110)
1 1 Külső szinkronizálás
D7 D6 Óra/adat frekvencia
0 0 1/1
0 1 16/1
1 0 32/1
1 1 64/1

6.7. A WR5 vezérlő regiszter
A WR5 regiszter tartalmazza az adó vezérlését és programozását beállító utasításokat. A WR5 regiszter egyes bitjeinek funkciói a következők:

D6 D5 Kiadott karakterek hossza
0 0 Öt vagy kevesebb, lásd a következő táblázatot.
0 1 7 bit
1 0 6 bit
1 1 8 bit

Az öt, vagy kevesebb üzemmóddal a SIO egy karakterben 1-től öt bitet tud továbbítani, de ehhez a CPU-nak a következő formátumban kell kiadni az adatokat:

D7 D6 D5 D4 D3 D2 D1 D0 Kiadott adatbitek száma
1 1 1 1 0 0 0 D 1
1 1 1 0 0 0 D D 2
1 1 0 0 0 D D D 3
1 0 0 0 D D D D 4
0 0 0 D D D D D 5

6.8. A WR6 vezérlő regiszter
Az egyszinkronos és külső szinkronos üzemmódokban, adáskor ez a regiszter tartalmazza a kiadott szinkron karaktert. A kétszinkronos adás- és vétel üzemmódoknál a 16 bites szinkronjel első byte-ját tárolja. SDLC üzemben a második címet tárolja, melyet a SIO az SDLC keret címmel hasonlítja össze.

D7 D6 D5 D4 D3 D2 D1 D0 CDU adatbitek
S7 S6 S5 S4 S3 S2 S1 S0 Szinkron byte bitek

6.9. A WR7 vezérlő regiszter
Egyszinkronos üzemben a vevő szinkron karakterét tartalmazza, két szinkronos üzemben a szinkronjel második byte-ját, vagy flag karaktert (01111110) az SDLC üzemmódban. Külső szinkronnál ez a regiszter nincs felhasználva.

D7 D6 D5 D4 D3 D2 D1 D0 CDU adatbitek
S15 S14 S13 S12 S11 S10 S9 S8 Második szinkron byte bithei

7. Státusz regiszterek

7.1. Bevezetés
A Z80-SIO három olvasható regisztert tartalmaz, amelyek a csatornák státusz információit tartalmazzák. A csatornák státusz jelein kívül innen olvashatók ki a standard interface jelek és a megszakítási vektor.
A regiszterek kiolvasásakor (kivéve RR0-t) először a WR0 regiszterbe kell írni a kiolvasandó regiszter pointerét, ugyanúgy, mint a WR regisztereknél. Ezután a CPU egy I/O olvasó ciklussal beolvassa a kiválasztott regiszter tartalmát.
Az RR0 és RR1 regiszterek státusz jeleinek összeállítása lehetővé teszi a státusz gyors feldolgozását. Pl. a speciális vételi állapot megszakításánál a megfelelő hiba bitek egy regiszterből (RR1) kiolvashatók.

7.2. Az RR0 státusz regiszter
Ez a regiszter tartalmazza az adó és a vevő státusz bitjeit, a DCD, CTS és SYNC bemenetek és az AE/EOM, valamint a Break tárolóit.

7.3 Az RR1 státusz regiszter
SDLC üzemben a regiszter tartalmazza a speciális vételi állapot státuszát és az adat maradék (Residue) kódját. A regiszter egyes bitjeinek funkciói a következők:

maradék kódok Az előző byte adatrészének hossza (bit) A kettővel ezelőtti byte adatrészének hossza (bit)
D3 D2 D1
1 0 0 0 3
0 1 0 0 4
1 1 0 0 5
0 0 1 0 6
1 0 1 0 7
0 1 1 0 8
1 1 1 1 8
0 0 0 2 8

Ha a vételi karakter nem 8 bites, az előbbihez hasonló táblázat készíthető minden karakter hosszúsághoz.
Ha a maradék nulla (az utolsó karakter hossza megegyezik az adat és a CRC hosszal) a maradék kódok a következők:

bit/karakter maradék kódok
D3 D2 D1
8 bit/karakter 0 1 1
7 bit/karakter 0 0 0
6 bit/karakter 0 1 0
5 bit/karakter 0 0 1

7.4. Az RR2 státusz regiszter (csak a B csatornánál van)
Ha a vektor módosító státusz bit 0, akkor ez a regiszter a WR2 regiszterbe írt vektort tartalmazza. Ha a módosító bit 1, akkor a módosított vektort tartalmazza. Kiolvasáskor a legnagyobb prioritású egységnek megfelelő módosított vektort adja ki. Ha nincs változtató státusz, akkor a V3=0, V2=1 és a V1=1 lesz.

7.5. Felhasználás
A Z80-SIO nagyfokú flexibilitása széleskörű felhasználást tesz lehetővé, melyek közül néhányat ebben a fejezetben szeretnénk bemutatni.
A 7.2 ábra egy CPU-CPU egyvezetékes összekapcsolását mutatja be.


7.2 ábra: Processzorok összekapcsolása telefonvonalon

A rendszerben mindkét processzor különböző protokollal és adat sebességgel tud kommunikálni a Z80-CPU-val. A kapcsolás komplexitásától függően más Z80 periféria áramkör is szükséges lehet (pl. Z80-CTC). A Z80-SIO szabad csatornái felhasználhatók más perifériák vezérlésére, vagy további processzorok összekapcsolására.
A 7.3 ábrán a Z80-SIO egy modemmel összekapcsolva mindkét csatornáját használja.


7.3 ábra: Két csatorna egy Z80-SIO-val

A modem 2+1 opcionális csatornával rendelkezik, és két ilyen modem köthető felváltva a SIO-hoz. Aszinkron modemnél egy megfelelő baud generátor (CTC) is szükséges.
A 7.4 ábrán a Z80-SIO-t egy adatkoncentrátorban használják. Az adatkoncentrátor különböző perifériáktól gyűjti be az adatokat, amit formálás és javítás után egy nagysebességű vonalon továbbit.

7.4 ábra: Adatkoncentrátor

Z80-SIO egy Z80-DMA vezérlővel nagy sebességgel és a megfelelő protokollal továbbítja az adatokat. A nagysebességű modem szolgáltatja az órajellel a csatornához, a kis sebességű vonal órajelét pedig egy Z80-CTC áramkör állítja elő.
Z80-SIO vezérli a helyi, vagy a távvezérelhető terminált. A szaggatott vonallal bekeretezett rész, egy egyszerű intelligens terminál. A terminál a Z80-SIO egy csatornájának felhasználásával kapcsolódik az adatkoncentrátorhoz. A Z80-SIO másik csatornája a sornyomtatót csatlakoztatja a terminálhoz.

8. Időzítés

8.1. Olvasó ciklus
A CPU egy I/O olvasó ciklussal olvassa ki a Z80-SIO adatait és státuszát. Az olvasás időzítését a 8.1 ábra mutatja.


8.1 ábra: Olvasó ciklus

8.2. Megszakítás elfogadó ciklus
Megszakításkor (INT=0) a Z80-CPU egy megszakítás elfogadó ciklussal válaszol (M1 és IORQ aktív). Ezalatt a prioritásos megszakítási logika meghatározza, hogy melyik a legnagyobb prioritású megszakítást kérő egység (IEI=1 és IEO=0). Azoknál az egységeknél, melyek nincsenek kiszolgálás alatt és nem kérnek megszakítást az IEO=IEI. A lánc stabilizálása érdekében az M1 alatt az egységek megszakítási státusza nem változik.
Amikor az IORQ is nullába megy, a legnagyobb prioritású egység kiadja a CPU adatbuszára a megszakítási vektorát és beírja a belső megszakítás kiszolgáló tárolóját.

8.3. Írás ciklus
A Z80-SIO vezérlő regisztereit a Z80-CPU egy I/O utasítással tölti fel. Az író utasítás időzítését a 8.2 ábra mutatja.


8.2 ábra: Író ciklus

8.4. Megszakításból visszatérő utasítás
A megszakítási rutin végén a CPU kiadja a RETI utasítást. A RETI két byte-os kódját a SIO felismeri és törli a megszakítás kiszolgáló tárolóját.
Először a SIO dekódolja az ED utasítást és az IEO kimenetét 1-be állítja (kivéve, ha megszakítás kiszolgálás alatt áll). Ha a következő műveleti kód 4D, akkor törli a kiszolgálás alatt álló egység megszakítás kiszolgáló tárolóját.
Az IEI-IEO átfutási idő a láncba kapcsolható egységek számát limitálja (az M1 és IORQ jelek megjelenése között a jelnek végig kell szaladnia a teljes megszakítási láncon). Nagyobb számú egységek sorba kapcsoláséinál átvitel előrecsatoló hálózatot, vagy a megszakítás elfogadó ciklus kiterjesztést kell megvalósítani.


8.3 ábra: Megszakítás elfogadó- és visszatérő utasítások időzítései

8.5. Megszakítási lánc kialakítása
A 8.4 ábra egy prioritásos megszakítási láncot mutat, ahol minden egység egy külön Z80 periféria lehet a felhasználó által definiált prioritási szinttel. A Z80-SIO-n belül fix megszakítási szint van az egyes csatornák és azok egységei között.


8.4 ábra: Tipikus megszakítási folyamat

Az ábrán először a B csatorna kért és kapott megszakítást, amit azután a nagyobb prioritású A csatorna szakított meg. Az A csatorna kiszolgálása után folytatódik a megszakított B csatorna kiszolgáló rutinja.

9. Elektromos specifikáció

Elektromos specifikáció 1.
Elektromos specifikáció 2.
Elektromos specifikáció 3.
Elektromos specifikáció 4.

Rendelési információk

Típus Megnevezés Tokozás Max. óra Működési hőmérséklet
MK3884N
MK3884P
MK3884J
MK3884N-10
MK3884P-10
MK3884J-10
Z80-SIO/0
Z80-SIO/0
Z80-SIO/0
Z80-SIO/0
Z80-SIO/0
Z80-SIO/0
műanyag
kerámia
CERDIP
műanyag
kerámia
CERDIP
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
0 ... +70 C
0 ... +70 C
0 ... +70 C
-40 ... +85 C
-40 ... +85 C
-40 ... +85 C
MK3884N-4
MK3884P-4
MK3884J-4
Z80A-SIO/0
Z80A-SIO/0
Z80A-SIO/0
műanyag
kerámia
CERDIP
4 MHz
4 MHz
4 MHz
0 ... +70 C
0 ... +70 C
0 ... +70 C
MK3885N
MK3885P
MK3885J
MK3885N-10
MK3885P-10
MK3885J-10
Z80-SIO/1
Z80-SIO/1
Z80-SIO/1
Z80-SIO/1
Z80-SIO/1
Z80-SIO/1
műanyag
kerámia
CERDIP
műanyag
kerámia
CERDIP
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
0 ... +70 C
0 ... +70 C
0 ... +70 C
-40 ... +85 C
-40 ... +85 C
-40 ... +85 C
MK3885N-4
MK3885P-4
MK3885J-4
Z80A-SIO/1
Z80A-SIO/1
Z80A-SIO/1
műanyag
kerámia
CERDIP
4 MHz
4 MHz
4 MHz
0 ... +70 C
0 ... +70 C
0 ... +70 C
MK3887N
MK3887P
MK3887J
MK3887N-10
MK3887P-10
MK3887J-10
Z80-SIO/2
Z80-SIO/2
Z80-SIO/2
Z80-SIO/2
Z80-SIO/2
Z80-SIO/2
műanyag
kerámia
CERDIP
műanyag
kerámia
CERDIP
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
2,5 MHz
0 ... +70 C
0 ... +70 C
0 ... +70 C
-40 ... +85 C
-40 ... +85 C
-40 ... +85 C
MK3887N-4
MK3887N-4
MK3887J-4
Z80A-SIO/2
Z80A-SIO/2
Z80A-SIO/2
műanyag
kerámia
CERDIP
4 MHz
4 MHz
4 MHz
0 ... +70 C
0 ... +70 C
0 ... +70 C

Forrás: Zilog - Mostek (1981. február)

Vissza a Spectrum könyvekhez
Vissza az Enterprise könyvekhez