**** *** *** *** *** *** * * * * * * * * * * * * * * * * * * **** *** *** * ** * * * * * ** * ** * * * * * * * * * * * * *** ***** *** ***** *** RS-232C sarjaliitäntä IBM PC/AT:ssa ja yhteensopivissa Kirjoittanut Tomi Engdahl Päivitetty 5.11.1991 Sivu xi Sisällysluettelo Sivu Sisällysluettelo xi Esipuhe xii Johdanto xiii Standardit 1.1 PC:ssä käytetyistä piiriratkaisista 2.1 PC:ssä ja AT:ssa käytetyt liittimet 3.1 Yleisesti käytetyt liitäntäjohdot 3.3 Rekisterikuvauksista 4.1 UART-piirien rekisterien kuvaukset 4.2 BIOS rutiinit sarjaliitännän käyttöön 5.1 DOS rutiinit sarjaliitännän käyttöön 6.1 Keskeytykset ja keskeytyslinjat 7.1 X00 FOSSIL-ajurin palvelut 8.1 Esimerkki kättelystä (XON/XOFF) 9.1 Ohjelmoitiongelmista 10.1 UART piirien nastajärjestykset 11.1 Vastuuttomuusjulistus 12.1 Lähdeluettelo 13.1 Sivu xii Esipuhe Käsissäsi on nyt tietopaketti, jonka tietoja on kerätty ja päivitetty yli 2 vuoden ajan säännöllisesti. Tämän tekstin kirjoittaminen alkoi keväällä 1989 omasta tarpeesta saada yhdistettyä hajanaisesti saatavilla olevaa tieto RS-232C liitännästä PC maailmassa, eikä sillä ole ollut mitään kunnianhimoisia päämääriä. Teksti kuitenkin kasvoi tasaisesti, ja kaverien pyynnöstä laitoin sen saataville muutamaan suosittuun pääkaupunki- seudun elektroniseen postillaatikkoon. Myönteisen palautteen innostamana jatkoin tekstin täydentämistä, mitä on jatkunut koko ajan tähän hetkeen saakkaa. Haluan esittää kiitokset niille useille henkilöille, jotka ovat auttaneet minua tämän tekstin aineiston keräämisessä ja virheiden korjaamisessa. Toivon palautetta jatkossakin, jotta voin pitää tämän tekstin jatkuvasti ajantasalla. Sivu xiii Johdanto RS-232C-liitäntä on eräs yleisimmistä tietokoneissa käytetyistä liitäntästandardeista myös PC-ympäristössä. Aiheesta on olemassa paljon tekstiä, mutta kattavaa hakuteosta, varsinkaan suomenkielistä, ei löydy. Tämän tekstin tarkoitus on olla toimia kattavana hakuteoksena ja tietopakettina RS-232C-liitännästä. Tämän tekstin ei ole tarkoitus olla mikään aloittelijan oppikirja, vaan enemmänkin pidemmälle ehtineiden kattava hakuteos, josta löytyyaiheesta saatavilla oleva tieto nopeasti ja luotettavasti. Teksti sisältää paljon hyvin yksityiskohtaista tietoa, jota on vaikea sisäistää, jos ei ole asiasta jonkunlaita kokonaiskuvaa ennestään. Teksti on suurelta osin taulukoita ja kaavioita, jotta asia olisi helppo löytää eikä tekstistä tulisi liian pitkää. Tekstin termistö on hiukan erikoista sekoitusta englanninkielisiä ja suomekielisiä termijä sekä suuren määrän lyhenteitä. Englannin kielisten väännösten käyttö johtuu siitä, että kaikille asioille ei ole yleisesti vakiintunutta termiä ja käyttöön ehdotettu suomalainen termi on joko tuntematon, epätarkka tai muuten huono. Tämä teksti koostuu kahdesta selvästi toisistaa eroavasta osasta. Ensimmäisessä luvussa kerrotaan RS-232C standardista ja sen uudemmasta EIS-232D seuraajasta. Ensimmäisessä osassa selviää liitännän sähköiset ominaisuudet ja signaalit. Tekstin loppuosa keskittyy RS-232C liitännän käytön, totoutuksen ja ohjelmoinnin selittämiseen PC-ympäristössä. Sieltä löytyy myös tarpeellisten liitäntäjohtojen rakennuohjeet ja vinkkejä yleisten ongelmien selvittämiseen. Sivu 1.1 Standardeista RS-232C standardi määrittelee erään todella yleisesti käytössä oleva sarjalii- kennöimistavan. Kyseinen stanadardi määrittelee sekä synkronisen että asynkro- nisen liikennöinnin, joista useinmiten käytetään vaan jälkimmäistä. RS-232 standardin on esitetty vuonna 1962, mutta tuli julkiseksi vasta 1969. Sitä on uudistettu vuonna 1972 (RS-232C). Sen jälkeen ei muutoksia standerdiin ole tullut. Muutamat standardiin kuulumattomat ominaisuudet ovat tulleet de facto standardeiksi (D-25 liitin). Alkuperäinen RS-232C ei määritä liitti- men mallia vaan ainoastaan se nastojen numeroinnin. Muutama vuosi sitten on julkaistu uusi versio standardista nimellä EIA-232D, joka on RS-232C täydennettynä muutamalla de facto standardilla (mm. liitin) sekä testausta helpottavavilla uusilla signaaleilla. RS-232C-standardin mukaan minkä tahansa RS-232C-liitännän pinnin saa kytkeä (tai olla kytkemättä) mihin tahansa muuhun RS:n pinniin liitännän siitä rik- koutumatta. PC:n RS-liitimen linjapuskurin pitäisi kyllä kestää se, mutta en kehottaisi kenenkään kokeilevan liitännän kestävyyttä, koska valmistajakohtai- sia eroavaisuuksia suojauksissa saattaa esiintyä. RS-232 liitäntätapa on määritelty useassa standardissa. On olemassa RS-232 ja EIA-232, jotka ovat käytännössä samoja (pieniä eroja signaalien nimissä.) Amerikkalaista RS-232C standardia vastaavat euroopassa lähinnä suosituk- set CCITT:n V24 ja V28. V24 käsittää liitännän toiminnalisten osien kuvaukset. Sallittujen jännitetasojen määritykset sisältyvät suositukseen V28. PC-koneissa käytetään RS-232C-liitännässä linjavastaanottimina yleensä piirejä (esim. MC1489), jotka eivät erikseen tunnista signaalin negatiivista osaa. Näille piireille 0V on looginen ykkönen ja +3V:ia suuremmat jännitteet ovat loogisia nollia. Tästä johtuen PC:n RS-liitäntään voi kytkeä myös laitteita, joiden sarjaliitännän lähtö on TTL-tasoinen tai vain yksipuolisella jänniteläh- teellä varustettu. Tämä helpottaa joissain tapauksissa PC:n lisälaitteiden suunnittelua. Sivu 1.2 RS-232C -standardin jännitetasojen määritykset datasignaaleille: Ulostulo Sisäänmeno +25V | +15V | | | | Looginen 0 | Looginen 0 | | +5V | | +3V | Siirtymäalue | Siirtymäalue | -3V -5V | | | | Looginen 1 | Looginen 1 | | -15V | | -25V RS-232C -standardin jännitetasojen määritykset ohjaussignaaleille Dataulostulo Datasisääntulo +25V | +15V | | | | Signaali päällä | Signaali päällä | (ylhäällä) | (ylhäällä) +5V | | +3V | Siirtymäalue | Siirtymäalue | -3V -5V | | | | Signaali poissa | Signaali poissa | (alhaalla) | (alhaalla) -15V | | -25V Samat jännitetasomääritykset pätevät RS-232D standardissa. Sivu 1.3 EIA-232-D spesifikaatiot Liitin DTE DB-25 uros Liitin DCE DB-25 naaras Maksimi kaapelin pituus Kapasitanssi rajoittaa (2500pF max.) Maksimi siirtonopeus 20Kbit/s Lähettimiä 1 lähettäjä Vastaanottomia 1 vastaanottaja Linjapuskurin lähtö +-5V min. +-15V max. Puskurin kuorma 3k to 7k ohmia Ajurin nopeus (slew rate) 30V/mikrosekunti Vastaanottimen resistanssi 3k to 7k ohms Vastaanottimen siirtymäalue +-3V Vastaanottimen jännitalue +-30V Pitkillä ja häiriöisillä yhteyksillä voidaan käyttää linjapyskureissa lähtöjännitealuetta +-25V. Käytännön johdotuksissa RS-232C linjan maksimi kaapelin pituus on 20m. Sivu 1.4 Tiedonsiirtotapa asynkronisessa siirrossa Tieto siirretään sarjamuodossa seuraavan loogisia tiloja kuvaavan kaavion mukaisesti (asynkroninen siirto): Looginen tila Start D0 D1 D2 D3 D4 D5 D6 D7 Stop ___ ___ ___ ___ ___ ___ ___ ___ ___ ____ Looginen 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Looginen 0 |___|___|___|___|___|___|___|___|___| Jännitetasot vastaavasti Start D0 D1 D2 D3 D4 D5 D6 D7 Stop ___ ___ ___ ___ ___ ___ ___ ___ ___ +3..+15V | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -3..-15V ___| |___|___|___|___|___|___|___|___|____ RS-232C-linja voi olla lepotilassa (looginen 1) stop-bittien jälkeen vaikka kuinka pitkään, jos seuraavaa tavua ei ole tulossa heti. Stop-bittien määrä kertoo vähimmäisajan, jonka linjan on oltava lepotilassa (looginen 1) lähetetyn datan jäkeen. Sanan pituus (databittien määrä) on 5, 6, 7 tai 8 bittiä. Aloitusbittejä on yleensä yksi. Lopetusbittejä on joko 1, 1.5 tai 2. 1.5 lopetusbittiä käytetään yleensä 5 bitin sanojen kanssa, ja tarkoittaa, että lopetusbitin pituus on 1.5*yhden bitin aika. PC:ssä käytetyissä UART:eissa 1.5 lopetusbittiä (stop-bittiä) on mahdoliinen vain 5 bitin sanoissa. Linjalle voidaan lähettää myös BREAK-signaali, jota käytetään yleensä yhteyden katkaisemiseen sarjaliikenneyhteydessä päätteeltä. BREAK-signaali on yksinker- taisesti signaalin tila, jossa datalinja menee pitkäksi aikaa (muuhun liiken- teeseen nähden) nollaan. Tämä aika on yleensä 150-600 ms, eli reilusti niin pitkä että sitä ei voi sekoittaa muuhun linjaliikenteeseen. Sivu 1.5 Tiedonsiirtotapa synkronisessa siirrossa D0 D1 D2 D3 D4 D5 D6 D7 ___ ___ ___ ___ ___ ___ ___ ___ +15V | | | | | | | | | | | | | | | | | | Data 0v -| | | | | | | | | | | | | | | | | | -15V |___|___|___|___|___|___|___|___| _ _ _ _ _ _ _ _ +15V | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Kello 0V - | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -15V |_| |_| |_| |_| |_| |_| |_| |_ Siirrettävien bittien järjestys sama kuin asynkronisessa siirrossa. Mitään start- tai stop-bittejä ei käytetä. Kellona käytetään seuraavia signaaleja Sivu 1.6 RS-232C ja EIA-232D:n määrittelemä liitin RS-liitännässä käytetään liittimenä koneen puolella yleisesti D25-urosliit- timiä. Näiden liittimien nastajärjestys on seuraava (D-25 liitin DTE). nasta Signaalin nimi Lyhenne CCITT RS EIA Suomennos --------------------------------------------------------------------- 1 -- Chassis Gound 101 AA - Suojamaa 2 -> Transmit data TD,TxD,SOUT 103 BA BA Lähtevä data 3 <- Receive Data RD,RxD,SIN 104 BB BB Tuleva data 4 -> Request To Send RTS 105 CA CA Lähetyspyyntö 5 <- Clear To Send CTS 106 CB CB Lähetysvalmius 6 <- Data Set Ready DSR 107 CC CC Siirtolaitteen valmius 7 -- Signal Ground SG 102 AB AB Signaalimaa 8 <- Carrier Detect DCD,RLSD 109 CF CF Kantoaaltotunnistus 9 <- + Test Voltage - - Testijännite + 10 <- - Test Voltage - - Testijännite - 11 unassigned ei kyketty 12 <- Secondary DCD SDCD 122 SCF SCF/CI 13 <- Secondary CTS SCTS 121 SCB SCB 14 -> Secondary TxD STD 118 SBA SBA 15 <- * Sync TX Timing DCE TC 114 DB DB Lähetyskello DCE 16 <- Secondary RxD SRD 119 SBB SBB 17 <- * Sync RX Timing DCE RC 115 DD Vastaanottokello DCE 18 <- D Local Loopback LL LL 19 -> Secondary RTS SRTS 120 SCA SCA 20 -> Data Terminal Ready DTR 108.2 CD CD Päätelaitteen valmius 21 <- Remote Loopback RL 110 CG CG 22 <- Ring Indicate RI 125 CE CE Soiton osoitus 23 Data Signal Rate DRS 111/112 CH/CI CH/CI 24 -> * Sync TX Timing DTE XTC 113 DA DA Lähetyskello DTE 25 <- D Test Mode TM Kaukoluupin ohjaus HUOM! Nastalla 12 on joissain epästandardeissa RS-232C ratkaisuissa yllä olevasta standardiratkaisusta eroava käyttö: 12 <- High-speed Indicate 112 Nopeustunnistus * merkityt nastat käytössä vain synkronisessa siirrossa. Näitä nastoja ei ole kytketty PC-koneissa asynkronisessa kortissa. ? Signaalista ei tarvittavia tietoja saatavilla D määriteltty vasta standardissa EIA-232D, ei kytketty RS-232C:ssä -> DTE:stä CTE:hen menevä signaali (DTE:n ulostulo) <- DCE:stä DTE:hen tuleva signaali (DTE:n sisääntulo) tilanteen mukaan joko DTE:stä DCE:hen tai DCE:stä DTE:hen menevä signaali -- maajohdin Sivu 1.7 Standardimerkintäsarakkeissa (CCITT, RS, EIA) tyhjä tarkoittaa, että signaalia ei ole määritelty kyseisessä standissa. Jos kyseisessä sarakkeessa viiva, niin signaali määritelty mutta ei nimetty omalla kirjainyhdistelmällä. Lyhenne sarakkeessa kerrottu yleisesti käytössä olevat lyhenteet, jotka eivät kuitenkaan ole mitenkään suositeltuja vaan ainoastaan käytössä yleisty- neitä. Joissakin sarakkeissa on useampikin lyhenne, näistä ensimmäinen on suositeltavin käytettäväksi, jos näitä lyhenteitä yleensäkään käyttää. CCITT sarakkeessa kerrotaan standardissa V.24 käytetyt signaalien nimet. RS sarakkeessa kerrotaan alkuperäisen RS-232C määrittelyn signaalien nimet EIA sarakkeessa kerrotaan EIA-232D stanardin signaalien nimet Standardin (RS-232C ja EIA-232D) mukaan DTE:n (esim. tietokone) liitin koiras, ja tiedonsiirtolaitteen DCE (esim. modeemi) liitin naaras. Liittimien numerointi kulkee siten, että täydellinen DTE-DCE saadaan aikaan kytkemällä kaikki DTE-liitimen nastata saman numeroisiin DCE-liitimen nastoihin. D-25 uros nastanumerointi 1 13 --------------------------- | . . . . . . . . . . . . . | \ . . . . . . . . . . . . / ------------------------ 13 25 Liittimen D-25 mekaaniset ominaisuudet on määritelty standardissa ISO 2110. Sivu 1.8 Liitännän signaalit (esisijaiset) Liitännän signaalit on merkitty DTE laitteen mukaan seuravasti: Datasignaalit TD DTE:stä DCE:hen lähtevän data ulostulo RD DCE:stä DTE:hen tulevan datan sisääntulo Maajohtimet SG Signaalimaa (data- ja ohjaussignaalien nollataso) GND Laitteiden suojamaa. Yhdistetään johdon suojavaippaan ainoastaan toisen laitteen päästä. Yhdistäminen kummankin laitteen päästä johtaa helposti haitallisiin maalenkkeihin, jotka häiritsevät tiedonsiirtoa, voivat rikkoa laitteita sekä voivat olla laittomia sähköturvallisuuden osalta. Ohjaussignaalit DTR DTE:stä lähtevä signaali, joka ilmoittaa, että DTE päällä ja linjalla DSR DCE:stä lähtevä signaali, joka kertoo, että DCE päällä ja valmis aloittamaan RTS DTE asettaa RTS signaalin kysyäkseen, onko DCE valmis vastaanottamaan dataa CTS DCE asettaa vastaukseksi DTE:n lähettämälle RTS signaalille, kun DCE on valmis vastaanottamaan DTE:stä tulevaa dataa DCD DCE asettaa varoittamaan DTE:tä, että DCE:ltä on odotettavissa tulevan dataa DTE:lle millä hetkellä hyvänsä RI DCE asettaa, kun (modeemi)linjan toisen pään laite haluaa muodostaa yhteyden SQ DCE asettaa, kun se uskoo, että datan lähetys riittävän laadukasta ja virheitä ei odotettavissa. DCE laskee heti alas kun lähetyksen laatu laskee liian alas. DRS DTE tai DCE asettaa vaihtaakseen toisen laitteen nopeutta erikoistilanteissa Toissijaiset signaalit Toissijaiset (secondary) signaalit muodostavat toisen ensimmäisestä kanavasta riippumattoman datakanavan ja toimivat smoin kuin vastaavat ensisijaiset signaalit. Toissijaisten signaalien nimen edessä on S-kirjain. Sivu 1.9 RS-232C kättelyesimerkki Tapaus: Kaksi DTE laitetta kytketty yhteen kahden DCE:n välityksellä DTE1==DCE1-------DCE2==DTE2 Missä = merkitsee RS-232C yhteyttä ja - merkitsee yhteyttä modeemilinja (puhelinlinja) välityksellä Oletetaan, että DCE2 ja DTE2 on valmiita yhteydenottoon sekä DCE1:ssä virta päällä: 1. DTE1:een laitetaan virta päälle -> DTE1 nostaa DTR:n kun valmis liikennöintiin 2. DCE1 nostaa DSR:n vastaukseksi että on valmis aloittamaan kommunikaation 3. DCE2 nostaa RI-signaalin osoittakseen, että DCE1 halua aloittaa kommunikoinnin 4. DTE2 nostaa DTR:n kun valmis 5. DCE2 laskee RI-signaalin Jos full-duplex yhteys, niin DTE1:n kannalta 1. DTE1 nostaa DTR:n 2. DCE1 nostaa DSR:n 3. DTE1 nostaa RTS:n 4. DCE1 nostaa CTS:n ja DCD:n kun yhteys DCE2:een saatu Sivu 2.1 Käytetystä piiriratkaisuista PC-koneissa käytetään sarjaportin UART:ina piiriä 8250 kellotaajuudella 1.8432 MHz, joka saadaan omasta kellokiteestä. Uudemmissa PC:ssä käytetään jotain saman piirisarjan uudempaa ohjelmistoyhteensopivaa mallia (esim. 82050, 82510), jolla voidaan saavutta suurempia linjanopeuksia. AT koneissa käyte- tään yleensä UART tyyppiä 16450 tai 82450. Ne ovat yhteensopivia 8250:n kanssa ja sisältävät vähän lisäominaisuuksia. Nykyään alkaa yleistyä UART- tyyppi 16550, joka sisältää useita lisäominaisuuksia, kuten 16 merkin FIFOt. Piirin ANS 8250 ominaisuuksia: Valmistaja: National Semicondictor Ltd Databittien määrä: 5,6,7 tai 8 Pariteetti: pariton, parillinen tai ei paritteetia Stop-bitit: 1, 1 1/2 tai 2 Liikennöintinopeus: 50-19200 baudia Piirin UM 8250A ominaisuuksia: Valmistaja: United Microelectronics Corp (UMC) Muut tiedot samat kuin ANS 8250, mutta Liikennöintinopeus: 0-56000 bps Linjapuskurina käytetään yleisesti EIA-RS-232C-standardin mukaista piiriä 1488 ja vastaaottimena piiriä 1489. Linjapuskuri pystyy PC-koneissa syöttämään +/-12V, missä -12V vastaa loogista tilaa 1 ja +12V loogista tilaa 0. Vastaanottopuolella yli +3V jännitteet vastaavat loogista nolla ja 0V tai sitä pienemmät jännitteet vastaavat loogista ykköstä. Piirin MC1488 ominaisuuksia: EIA-RS-232C -standardin mukainen linjapuskuri Lähtövirran rajoitus: +/-10mA Ottojännite: TTL-tasoinen Lähtö: max. +/-15V (käyttöjännitteen mukaan) Käyttöjännite: max. +/-15V Tehonkulutus: max. 1W Piirin MC1489 ominaisuuksia: Ottoresistanssi: 3.0kOhm - 7.0kOhm Ottojännitealue: +/-30V Sisäinen hystereesi Käyttöjännite: max. 10V Tehonkulutus: max. 1W Sivu 2.2 Nykysin PC-koneissa käytössä olevia UART-piirejä 8250 Alkuperäisessä IBM PC:ssä käytetty UART-tyyppi. Käytössä edelleen PC:ssä ja joissain AT-koneissa. Alkuperäinen Nationa Semicoductorin piiri ei pystynyt kuin 19200 baudin nopeuksiin saakka ja oli väylältäänkin hidas. Nykyisin saa- tavat 8250:pysyvät hyvin AT-väylän vauhdissa mukana ja tarjoavat nopeuksia 57600 tai jopa 115200 baudiin saakka. xx450 Yleisesti käytetty UART-malli AT-koneissa ja nykyään. Kehitetty malli 8250:stä. Pinniyhteensopiva 8250:n kanssa. Ominaisuuksia paranneltu hieman kaikin puolin, mutta ei mitään havaittavan suuria muutoksi misään ominaisuudessa. Ainut ero ohjelmoinnin kannalta on yksi uusi rekisteri: Scratc Register. Se ei vaikuta itse piirin toimintaan mitenkään. Sitä voidaan käyttää ohjelmassa väliaikaisena yhden tavun tallennuspaikkana. Tunnistettavissa ohjelmallisesti Scratc-rekiste- rin avulla. Useissa mykyisin käytetyissä yhdistelmäpiireissä, joita käytetään Multi I/O korteissa huolehtimaan sekä sarja- että rinnakkaisliitännästä, UART-osa on yhteensopiva 82450:n knassa. Myös useissa PC:n korttimodeemeissa UART-osa on 82450 yhteensopiva. AT-koneissa 16450 on yleisesti käytetty malli. xx550 Edelleen kehitetty versio xx450:stä. Tämän hetken kehittyinein UART-piiri, mitä PC koneisiin saa. Lähes täysin pinniyhteensopiva 8250 ja xx450 kanssa, eroa kahden nastan käytössä. Kuitenkinvoidaan laittaa suoraan 8250:n tai xx450 paikalle, koska kyseisiä pinnejä ei käytetä tavallisesti. Suurin ero xx450:een on piirin sisäiset 16 merkin puskurit (FIFO) sekä tule- valle että lähtevälle datalle sekä DMA:n käyttömahdollisuus. Kaksi toimintati- laa, joista toinen täysin yhteensopiva xx450 kanssa ja toinen tukee uusia ominaisuuksia. FIFOt ja DMA vähentävät riskiä, että markkejä katoaisi välistä, kun niitä ei ehditä lukea riittävän nopeasti. Erityisen hyödyllinen suurilla liikennöintinopeuksilla ja moniajoympäristöissä. Yksi rekisteri lisää xx450:een verrattuna ja uusia bittejä muista rekistreistä käyttöön. Tunnistettavissa ohjelmallisesti FIFOja käsittelevien rekisterien avulla. Piiristä xx550 ollut liikkeellä virheellinen versio tyyppimerkinnällä 16550. Piirin virhe on korjattu mallissa 16550A ja uudemmissa. Virheelinen piiri on onneksi tunnisteetavissa ohjelmallisesti. Vriheellistä 16550 piiriä on käytössä joissain IBM PS/2 koneissa sekä sitä liikkuu vielä markkinoilla. Yllä olevat xx piirien nimissä kuvaavat piirityypin kahta esimmäsitä numeroa, jotka vaihtelevat valmistajakohtaisesti. Ainakin seuraavia numeroita löytyy xx paikalta: 82, 16 tai 73. Joidenkin vamistajien piirinumerointi poikkeaa vieläkin enemmän tästä kaavasta. Esimerkiksi jotkut 82C50 piirit ovat toiminnalisesti xx450 piirin kaltaisia. Joidenkin piirivalmistajien mallinimissä on joku kirjain kahden ensimmäisen numeron jälkeen. Yleensä myös piirien numeroidenkin perässä on joku kirjain. Näiden kirjainten käyttö vaihtelee valmistajakohtaisesti ja näillä kirjaimilla voidaan erottaa hieman toisistaan eroavat saman piirin eri tyypit. Perässä olevista kirjaimista voidaan mainita sen verran, että A-kirjain tarkoittaa yleensä nopeinta versiota. Yllä mainittuja piirejä läytyy nykyään todella monella kotelointivaihtoehdolla. PC koneissa käytetään tavallisesti 40 napaista DIP koteloa. Sivu 3.1 PC:ssä ja AT:ssa käytetyt liittimet D-25 -liittimen nastajärjestys Nasta Signaali 1 Suojamaa 2 TD Lähetysdata 3 RD Vastaanottodata 4 RTS Lähetyspyyntö 5 CTS Lähetysvalmius 6 DSR Siirtolaitteen valmius 7 RG Signaalimaa 8 DCD Kantoaallon tunnistus 20 DTR Päätelaitteen valmius 22 RI Soiton osoitus D-25 uros nastanumerointi koneen takaa katsottuna 1 13 --------------------------- | . . . . . . . . . . . . . | \ . . . . . . . . . . . . / ------------------------ 13 25 D-25-liittimen (uros) nastajärjestys noudattelee RS-232C suositusta. Kyseinen liitinmalli on käytössä suurimmassa osassa PC ja AT koneita. Liitäntä on käytännössä hyvin standardi, ja poikkeuksia ei suuremmin esiinny. Ainoat poikkeukset ovat yleensä joidenkin ylimääräisten nastojen lisäämisiä. Poikkeuksia Standardin mukaisten nastojen lisäksi IBM määritteli alkuperäisen PC:nsä sarjaliikennesovittimessaan muutaman nasta standardista poikkavaan käyttöön muodostamaan tarvittessa 20mA virtasilmukkaliitännän. IBM ei tiettävästi tue tätä virtasilmukkaa muussa kuin alkuoeräisessä PC:n sarjalliikennesoviitimessaan. Muut valmistajat kuin IBM aivät ole ottaneet näitä lisänastoja käyttöönsä. IBM PC:n sarjaliikennesovittimeen virtasilmukkanastat Nasta Signaali 9 +T Virtasilmukan positiivinen lähetysnasta 11 -T Virtasilmukan negatiivinen lähetysnasta 18 +R Virtasilmukan positiivinen vastaanottonasta 25 -R Virtasilmukan negatiivinen vastaanottonasta Sivu 3.2 D-9 -liittimen nastanumerointi Nasta Signaali 1 DCD Kantoaallon tunnistus 2 RD Datan vastaanottonasta 3 TD Datan lähetysnasta 4 DTR Päätelaitteen valmius 5 SG Signaalimaa 6 DSR Siirtolaitteen valmius 7 RTS Lähetyspyyntö 8 CTS Lähetysvalmius 9 RI Soiton osoitus D-9 uros nastanumerointi koneen takaa katosttuna 1 5 ----------- | . . . . . | \ . . . . / ------- 6 9 IBM otti AT konessaa käyttöön D-9-liittimen (uros) sarjaliitännän liittimenä. Tämän liittimen ottivat käyttöön myös kloonivalmistajat, koska se tilaa säästävänä mahdollisti useamman liittimen mahduttamisen koneen takaseinään. D-9 liitin on käytännössä de facto standardi, vain muutamia poikkeuksia löytyy. Poikkeukset: Eräissä kannaettavissa PC:ssä on urosliitännä sijasta naarasliitäntä ja eräissä TxD ja RxD ovat vaihtaneet paikkaa. Sivu 3.3 Yleisiä laitteiden kytkentätäpoja Tietokoneen ja lisälaitteen välille Tavallinen DTE-DCE (esimerkiksi tietokoneen ja modeemin välille) DTE (25 napainen) DCE (25 napainen) TD 2 ------------------------> 2 RD 3 <------------------------ 3 RTS 4 ------------------------> 4 CTS 5 <------------------------ 5 DSR 6 ------------------------> 6 DCD 8 ------------------------> 8 DTR 20 ------------------------> 20 SG 7 ------------------------- 7 DTE (9 napainen) DCE (9 napainen) TD 3 ------------------------> 2 RD 2 <------------------------ 3 RTS 7 ------------------------> 4 CTS 8 <------------------------ 5 DSR 6 ------------------------> 6 DCD 1 ------------------------> 8 DTR 4 ------------------------> 20 SG 5 ------------------------- 7 Yllä olevaa kahta kytkentää voidaan käyttää myös sovitinkaapeleina kun halutaan muutta 9 napainen liitn 25 napaiseksi tai päin vastoin. Kaksijohtoinen DTE-DCE DTE (25 napainen) DCE (25 napainen) TD 2 ------------------------> 2 RD 3 <------------------------ 3 RTS 4 ----, ,----- 4 CTS 5 <---' '----> 5 DSR 6 <---, ,----> 6 DCD 8 <---| |----> 8 DTR 20 ----' '----- 20 SG 7 ------------------------- 7 DTE (9 napainen) DCE (25 napainen) TD 3 ------------------------> 2 RD 2 <------------------------ 3 RTS 7 ----, ,----- 4 CTS 8 <---' '----> 5 DSR 6 <---, ,----> 6 DCD 1 <---| |----> 8 DTR 4 ----' '----- 20 SG 5 ------------------------- 7 Sivu 3.4 Kahden tietokoneen välille Ns. Nollamodeemi (null modem) DTE-DTE DTE (25 napainen) DTE (25 napainen) TD 2 ---------\ /------------- 2 RD 3 <--------/ \------------> 3 RTS 4 ---------\ /------------- 4 CTS 5 <--------/ \------------> 5 DSR 6 <---, ,----> 6 DCD 8 <---+----\ /-------+----> 8 DTR 20 ---------/ \------------- 20 SG 7 ------------------------- 7 DTE (25 napainen) DTE (9 napainen) TD 2 ---------\ /------------- 3 RD 3 <--------/ \------------> 2 RTS 4 ---------\ /------------- 7 CTS 5 <--------/ \------------> 8 DSR 6 <---, ,----> 6 DCD 8 <---+----\ /-------+----> 1 DTR 20 ---------/ \------------- 4 SG 7 ------------------------- 5 DTE (9 napainen) DTE (9 napainen) TD 2 ---------\ /------------- 2 RD 3 <--------/ \------------> 3 RTS 7 ---------\ /------------- 7 CTS 8 <--------/ \------------> 8 DSR 6 <---, ,----> 6 DCD 1 <---+----\ /-------+----> 1 DTR 4 ---------/ \------------- 4 SG 5 ------------------------- 5 HUOM! Null modem kaapelia voidaan käyttää myös DCE-DCE kaapelina. Sivu 3.5 Kaksijohtoinen DTE-DTE DTE (25 napainen) DTE (25 napainen) TD 2 ---------\ /------------- 2 RD 3 <--------/ \------------> 3 RTS 4 ----, ,----- 4 CTS 5 <---' '----> 5 DSR 6 <---, ,----> 6 DCD 8 <---| |----> 8 DTR 20 ----' '----- 20 SG 7 ------------------------- 7 DTE (25 napainen) DTE (9 napainen) TD 2 ---------\ /------------- 3 RD 3 <--------/ \------------> 2 RTS 4 ----, ,----- 7 CTS 5 <---' '----> 8 DSR 6 <---, ,----> 6 DCD 8 <---| |----> 1 DTR 20 ----' '----- 4 SG 7 ------------------------- 5 DTE (9 napainen) DTE (9 napainen) TD 3 ---------\ /------------- 3 RD 2 <--------/ \------------> 2 RTS 7 ----, ,----- 7 CTS 8 <---' '----> 8 DSR 6 <---, ,----> 6 DCD 1 <---| |----> 1 DTR 4 ----' '----- 4 SG 5 ------------------------- 5 Sivu 3.6 Loopback-liitin testaustarkoituksiin DTE (25 napainen) TD 2 --------, RD 3 <-------' RTS 4 --------, CTS 5 <-------' DSR 6 <-------, DCD 8 <-------| DTR 20 --------' DTE (9 napainen) TD 3 --------, RD 2 <-------' RTS 7 --------, CTS 8 <-------' DSR 6 <-------, DCD 1 <-------| DTR 4 --------' Loopback-liitintä käytetään testaustarkoituksiin. Tällöin kaikki TD nastasta lähetettävä data tulee takaisin RD nastaan. Tällä tavoin voidaan testata helposti terminaalin/tietokoneen lähetys- ja vastaanottopiirit. Sivu 4.1 UART-piirien rekisteriselostuksista Seuraavana tulee tietoa UART-piirien rekisteristä. Seuraavilla sivuilla on selitetty PC koneissa käytössä olevien UART-piirien rekisterit. Mukana on selitykset piireistä 8250, xx450 ja xx550. Koska mukaan on yritetty mahduttaa kaikkien piirien rekisterit, saattaa luettelo näyttää sekavalta. Rekisteriselitykset, joiden perässä ei ole mitään merkintää, toimivat kaikissa edellä mainituissa piirityypeissä. Joidenkin selitysten perässä on mainittu joku tai jotkut piirityypit. Tällöin kyseinen toiminto toimii vain kyseisissä piireissä. xx550 piirissä on kaksi toimtatilaa, jotka erotellaan tässä tekstissä. Toisessa xx550 emuloi xx450:stä ja toinen on xx550:n oma tila. Jos selityksen perässä on vain xx550 maininta, niin kyseinen toiminta toimii xx550:n kummas- sakin tilassa, mutta ei muissa UART:eissa. Jos perässä on maininta xx550 tila, niin kyseinen toiminta toimii vain xx550:ssä kyseisessä tilassa. Selostukset pytkivät kuvaamaan kyseisen rekisterin eri bittien tarkoituksen. Rekisteriselostukset eivät pyri olemaan täydelllisiä ohjelmoinnin oppaita, vaan niiden on tarkoitus olla lähinnä lähdeteos ja yhteenveto helpottamaan ohjelmointia. Selostukset on myös tarkoitettu nopeaksi lähdeteokseksi, jota voi hyödyntää valmista koodia tutkiessaan. Ohjelmoinnin perusidea on etsittävä muualta, mutta kun idean ymmärtää, niin rekisteriselostusten avulla ideasta voi väsätä toimivan rutiinin. Mallia voi ja kannattaa etsiä yleisesti saatavilla olevista lähdekoodeista. Sivu 4.2 UART-piirien rekisterit ja niiden käyttö UART-piirin I/O alkuosoitteen saa selville seuraavista muistipaikoista lukemalla 16-bittisen luvun (osoitteet heksana muodossa segmentti:siirros) COM1: 0040:0000 COM2: 0040:0002 COM3: 0040:0004 COM4: 0040:0006 HUOM! Nämä osoitteet eivät toimi OS/2:ssa käytettäessä COM??.SYS ajureita. Kutsukaamme tätä arvoa seuraavaksi nimellä os. Tällöin UART:in rekisterit ovat seuraavat: osoite nimi bittien merkitys os TD/RD Kirjoitetaan lähetettävä data/luetaan vastaanotettu data DIVLSB Jos LCR:n bitti D7=1, niin nopeudenvalintarekisterin alempi tavu os+1 IER (Interrupt Enable Register) Keskeytysten valinta DIVMSB Jos LCR:n bitti D7=1, niin nopeudenvalintarekisterin ylempi tavu os+2 IIR (Interrupt Id Register) Keskeytysten tunnistus (vain luettava rekisteri) FIFO (Fifo Control) Sisäisten linjapuskurien ohjaus ** os+3 LCR (Line Control Register) Linjaparametrit, bitti D7 (DLAB) määrää 2 ensimmäsen rekisterin käytön os+4 MCR (Modem Control Register) DTR, RTS, OUT1 ja OUT2 hallinta os+5 LSR (Line Status Register) Kontrollerin tilarekisteri os+6 MSR (Modem Status Register) Sisääntulojen tilarekisteri os+7 SCR (Scratc Register) ylimääräinen varastointirekisteri * * Toimii vain UARTeissa xx450 ja xx550. Ei toimi 8250:ssä! ** Toimii vain xx550:ssä ! Sivu 4.3 Rekisterin IER käyttö [os+1] (kirjoitettava ja luettava) -------------------------------------------------------- Reset tila: kaikki bitit nollia Bitti D0: 1 -> keskeytys, kun vastaanotettava tavu valmis (Receiver Data Available Interrupt (ERBFI)) Bitti D1: 1 -> keskeytys, kun lähetettävä data lähetetty linjalle (Transmitter Holding Register Empty Inteerupt(ETBEI)) Bitti D2: 1 -> keskeytys, kun tilarekisterissä havainto virheestä * (Receiver Line Status Interrupt (ELSI)) Bitti D3: 1 -> keskeytys, kun modeemin tilarekisterissä muutos ** (MODEM Status Interrupt (EDSSI)) Bitit D4: jätetään nollaksi (ei käytössä) Bitti D5: jätetään nollaksi (8250 ja xx450) 1 -> aktivoidaan xx550 tila (vain xx550:ssä) Bittit D6-D7: jätetään nollaksi (ei käytössä) * Tämän keskeytyksen voi aiheuttaa: Ylivuotovirhe (Overrun Error) Pariteettivirhe (Parity Error) Stop-bitti virheelinen (Framing Error) Katko (Break Interrupt) ** Tämän keskeytyksen voi aiheuttaa: Lähetysvalmiuden muutos (CTS) Siirtolaitteen valmiuden muutos (DSR) Soiton havainto (RI) Kantoaallon tunnistus/kadotus (DCD)(RLSD) Sivu 4.4 Rekisterin IIR käyttö [os+2] (vain luettava) -------------------------------------------- Reset tila: bitti D0 on ykkönen ja bitit D1-D7 nollia tavallisesti: Bitti D0: 0 -> keskeytys odottamassa, D1 ja D2 kertovat keskeytyksen 1 -> ei keskeytystä odottamassa -> D1=0 ja D2=0 Bitit D1-D2: keskeytyksen tyyppi (jos D0=0) D2 D1 Tyyppi ---------------------- 1 1 tilarekisteri (Receiver line Status) 1 0 vastaanotettava tavu valmiina (Received Data Avilable) 0 1 tavu lähetetty (Transmitter Holding Register Empty) 0 0 modeemin tila (MODEM STATUS) Bitit D3-D7: pysyvästi nollia xx550-tilassa: Bitti D0: 0 -> keskeytys odottamassa, D1 ja D2 kertovat keskeytyksen 1 -> ei keskeytystä odottamassa Bitit D1-D3: keskeytyksen tyyppi (jos D0=0) Bitti D4: 1 -> lähetin vähemmän kuin täysi ja on valmin DMA siirtoon 0 -> lähetin täysi ja ei ole valmis DMA siirtoon Bitti D5: 1 -> vastaanotin ei ole tyhjä ja on valmis DMA siirtoon 0 -> vastaanotin on tyhjä ja ei ole valmis DMA siirtoon Bitit D6 ja D7: 1 -> FIFOt laitettu päälle (D6=1 ja D7=1) 0 -> FIFOja ei ole laitettu päälle (D6=0 ja D7=0) Sivu 4.5 Piirin keskeytykset ja niiden käsittely (rekisteri IIR) D2 D1 D0 ------------------------------------------------- 0 0 1 Prioriteetti: - Keskeytystyyppi: ei keskeytystä Aiheuttaja: ei ole Keskeytyksen nollaus: - 1 1 0 Prioriteetti: korkein Keskeytystyyppi: vastaanottolinjan tila (LSR) Aiheuttaja: Ylivuoto (Overrun) tai Pariteettivirhe (Parity Error) tai Virheellinen stop-bitti (Framing Error) tai Katko (Break Interrupt) Keskeytyksen nollaus: lue tilarekisteri (LSR) 1 0 0 Prioriteetti: toinen Keskeytystyyppi: vastaanotettava data valmis Aiheuttaja: vastaanotettva data valmis Keskeytyksen nollaus: lue vastaanotettu merkki 0 1 0 Prioriteetti: kolmas Keskeytystyyppi: merkki lähetetty Aiheuttaja: lähetyspitorekisteri tyhjä Keskeytyksen nollaus: luetaan IIR (jos se aiheuttaja) tai kirjoitetaan uusi merkki lähetysrekisteriin 0 0 0 Prioriteetti: neljäs Keskeytystyyppi: modeemin tila (MODEM status) Aiheuttaja: Läheysvalmius (CTS) tai Siirtolaitteen valmius (DSR) tai Soitton tunnistus (RI) tai Kantoaallon tunnistus (DCD) Keskeytyksen nollaus: modeemin tilarekisterin lukeminen xx550 UART-piirissä xx550 tilassa FIFOt päällä on lisäksi yksi uusi keskeytys, jossa käytetään tunniskuksessa myös bittiä D3. Kaikki muut keskeytkset kuin edellä. Niissä kaikissa D3=0. D3 D2 D1 D0 ---------------------------------------------------------------- 1 1 0 0 Prioriteetti: toinen Keskeytystyyppi: Character timeout indication Aiheuttaja: Yhtään merkkiä ei ole luettu vastaanottoFIFOsta tai sen tulosta viimeisen neljän merkin aikana ja vastaanottoFIFOssa on ainakin 1 merkki Keskeytyksen nollaus: lukemalla vastaanoton puskurirekisteri Sivu 4.6 Rekisterin FIFO Control käyttö [os+2] (vain kirjoitettava) (vain xx550) ----------------------------------------------------------------------- Reset tila: kaikki bitit nollia Bitti D0: 1 -> Laittaa päälle sisäiset FIFOt 0 -> FIFOt pois päältä (xx450 tila päälle) FIFOt tyhjentyvät, kun ne laitetaan pois Bitti D1: 1 -> Tyhjennä vastaanotto (RCVR) FIFOn Nollaa vastaanotto FIFOn laskurilogiikan Bitti D2: 1 -> Tyhjennä lähetys (XMIT) FIFOn Nollaa lähetys FIFOn laskurilogiikan Bitti D3: 1 -> Laittaa DMA tilan 1 päälle (multiple DMA transfers) ** 0 -> Laittaa DMA tilan 0 päälle (single DMA transfers) ** Bitit D4-D5: lähetys (XMIT) FIFOn liipausutaso xx550 tilassa D5 D4 liipaisutaso ---------------------------- 0 0 1 tavu 0 1 4 tavua 1 0 8 tavua 1 1 14 tavua Bitit D6-D7: vastaanotto (RCVR) FIFOn liipaisutaso (trigger level) D7 D6 liipaisutaso ---------------------------- 0 0 1 tavu 0 1 4 tavua 1 0 8 tavua 1 1 14 tavua HUOM! Bittejä D1-D7 ohjelmoidessa pitää D0 olla 1 tai ohjelmointi ei onnistu * DMA siirroissa käytetään nastoja TXRDY ja RXRDY sekä IIR rekisterin bittejä D4 ja D5 Sivu 4.7 Rekisterin LCR käyttö [os+3] (kirjoitettava ja luettava) -------------------------------------------------------- Reset tila: kaikki bitit nollia Bitit D0-D1: databittien määrä D1 D0 Pituus ---------------------- 0 0 5 bittiä 0 1 6 bittiä 1 0 7 bittiä 1 1 8 bittiä Bitti D2: 0 -> 1 stop-bitti 1 -> 2 stop-bittiä (1.5 stop-bittiä jos 5 databittiä) * Bitti D3: 0 -> ei pariteettia 1 -> pariteettibitti sallittu (ks. bitti D4) * Bitti D4: 0 -> pariton (odd) pariteetti 1 -> parillinen (even) pariteetti * Bitti D5: 0 -> tavallinen paritettibitin käsittely (käytä tätä) 1 -> pariteetin käsittely siten, että pariteettibitiksi asetetaan pysyvästi joko 1 tai 0, tämän määrää LCR bitti D4 siten, että jos D4 = 1, niin pariteetti- bitiksi tulee pysyvästi 0. Bitti D6: 0 -> tavallinen lähetys 1 -> lähettää vastaanottajalle BREAK tilan. lähtö menee loogiseen nollaan ** Bitti D7: 0 -> normaalitila (DLAB=0) 1 -> nopeudenvalinta käytössä (DLAB=1) * Valmiita yhdistelmiä biteille D3-D5 yleisimpiä linjaparametreja varten Bitit D3-D5: pariteetin määritys D5 D4 D3 Pariteetti ------------------------------ x x 0 ei pariteettia 0 0 1 partion pariteetti (odd) 0 1 1 parillinen pariteetti (even) 1 0 1 merkki pariteetti (mark), pariteetti aina 1 1 1 1 väli pariteetti (space), pariteetti aina 0 ** Tällä bitillä voi haluttaessa suoraan ohjata dataulostulon tilaa. Kun mitään dataa ei lähetetä, niin linja on lepostilassa eli ykkönen. Asettamalla tämän bitin ykköseksi voi tilan muuttaa pakolla nollaksi. Näin voi lähettää mitä tahansa dataa ulos suoraan ohjelmallisesti ohjattuna. Sivu 4.8 Rekisterin MCR käyttö [os+4] (kirjoitettava ja luettava) -------------------------------------------------------- Reset tila: kaikki bitit nollia Bitti D0: 0 -> DTR=0 1 -> DTR=1 Bitti D1: 0 -> RTS=0 1 -> RTS=1 Bitti D2: OUT1 (vapaa ulostulo, ei käytössä) * Bitti D3: OUT2 0 -> keskeytykset eivät ole käytössä 1 -> keskeytyslinja kytketty ja keskeytykset mahdollisia Bitti D4: 0 -> normaali merkkien lähetys ja vastaanotto 1 -> sisäinen looppi testaustarkoituksiin (loop) ** Bitit D5-D6: pysyvästi nollia Bitti D7: pysyvästi nolla (8250 ja xx450) 1 -> xx550 tilan kello pois päältä (vain xx550 tila) (power shut down) * Jokin sisäinen modeemi voi vaatia tämän arvoon 1 toimiakseen ** Testaustilassa ulos lähetettävät merkit eivät mene ulos, vaan sisäisesti lähetetään piirin sarjasisääntuloon, jolloin lähetysrekisteriin kirjoitetut tavut siityvät sarjamuodossa vastaanottorekisteriin. Sarjaulostulo (TX) on inaktiivisessa tilassa (looginnen ykkönen). Modeeminohjausbitit MCR D0-D3 on kytketty sisäisesti modeemin tilan sisääntuloihin MSR D4-D7 (DTR->DSR, RTS->CTS, OUT1->RI, OUT2->RLSD). Modeeminohjausulostulot on kytketty inaktiiviseen tilaan (looginen ykkönnen). Sivu 4.9 Rekisterin LSR [os+5] käyttö (luettava) (kirjoitus sallittu vain testauksen) ---------------------------------------------------------------------------- Reset tila: bitit D0-D4 ja D7 nollia, bitit D5 ja D6 ykkösiä Bitti D0: 1 -> merkki valmiina luettavaksi (Data Ready) Bitti D1: 1 -> puskurin ylivuoto (Overrun Error) Bitti D2: 1 -> pariteettivirhe (Parity Error) Bitti D3: 1 -> virhellinen stop-bitti (Framing Error) Bitti D4: 1 -> katko (Break Interrupt) Bitti D5: 1 -> lähetyspitorekisteri tyhjä (THRE, Transmitter Holding Register Empty) Bitti D6: 1 -> lähetyssiirtorekisteri tyhjä (TSRE, Transmitter Shift Register Empty) Bitti D7: pysyvästi nolla (8250 ja xx450) 1 -> Virhe vastaanotto (RCVR) FIFOssa (vain xx550 tila) Rekisteri on periaatteessa vaan luettava. Rekisteriin kirjoitus on kuitenkin mahdollista. Rekisteriin kirjoitus on varattu piirin tehdastestausta varten. Kirjoittaminen muussa kuin piirin testaustarkoituksessa ei toivottua. Rekisterin MSR käyttö [os+6] (vain luettava) -------------------------------------------- Reset tila: bitit D0-D3 nollia, bitit D4-D7 sisääntulojen mukaan Bitti D0: 1 -> muutos CTS:ssä (DCTS) * Bitti D1: 1 -> muutos DTR:ssä (DDSR) * Bitti D2: 1 -> soiton ilmaisimen nouseva reuna (TERI) ** Bitti D3: 1 -> muutos kantoaallon tunnistussignaalisssa (DRLSD) * Bitti D4: 1 -> päätelaitteella CTS ylhäällä Bitti D5: 1 -> päätelaitteella DSR ylhäällä Bitti D6: 1 -> modeemi ilmoittaa puhelimen soimisesta (RI) Bitti D7: 1 -> kantoaallon tunnistus, yhteys syntynyt (DCD) * Ykkönen, jos vastaavan sisääntulon tila on muuttunut viimeisimmän rekisterin lukukerran jälkeen. ** Ykkönen, kun vastaava sisääntulo on muuttunut nollasta ykköseksi viimeisimmän rekisterin lukukerran jälkeen. Rekisterin SCR käyttö [os+7] (kirjoitettava ja luettava) (vain xx450 ja xx550) ------------------------------------------------------------------------------ Reset tila: ? Tämä rekisteri ei vaikuta itse UARTin toimintaan mitenkään. Tätä rekisteriä voidaan käyttää väliaikaisena säilytyspaikkana datalle. Tähän rekisteriin voidaan kirjoitaa jotain tietoa muistiin ja lukea se takaisin. Sivu 4.10 Linjanopeuden asetus (rekisterit DIVLSB ja DIVMSB, yhteisnimeltään DIV) (kirjoitettavia ja luettavia) ----------------------------------------------------------------------- 1. Muutetaan rekisterin LCR bitti D7 ykköseksi, jolloin saadaan nopeudenvalintarekisterit käytöön. 2. Lasketaan nopeusrekisterin tarvittava arvo kaavalla: DIV=115200/NOPEUS, missä nopeus on liikennöintinopeus baudeina. 3. Hajotetaan DIV enemmän (DIVMSB) ja vähemmän (DIVLSB) nerkitsevään tavuun. Tässä valmiita arvoja yleisimmille linjanopeuksille: (piirin kellotaajuus 1.8432 MHz) Nopeus(bps) DIV DIVMSB DIVLSB Nopeuden virhe ------------------------------------------------------- 50 2304 9 0 - 75 1536 6 0 - 110 1047 4 23 0.026 % 113.5 857 3 89 0.0258 % 150 768 3 0 - 300 384 1 128 - 600 192 0 192 - 1200 96 0 96 - 1800 64 0 64 - 2000 58 0 58 0.69 % 2400 48 0 48 - 3600 32 0 32 - 4800 24 0 24 - 7200 16 0 16 - 9600 12 0 12 - 19200 6 0 6 - * 38400 3 0 3 - * 56000 (57600) 2 0 2 2.86 % ** 115200 1 0 1 - * HUOM! Nämä suuret nopeudet eivät toimi kaikissa (vanhemmissa) piireissä. ÄLÄ KÄYTÄ SUUREMPIA LINJANOPEUKSIA KUIN KONEESI PIIRI PYSTYY KÄSITTELEMÄÄN. Datakirjat varoittavat ylittämästä suurinta nopeutta. ** Erittäin nopea linjanopeus, jota pytyvät käsittelemään vain harvat piirit. Tähän nopeuteen pystyvät jotkut 8250A:at (Harris), jotkut xx450:t ja xx550:et. Piirin alustuksen yhteydessä nopeuden ja linjaparametrien jälkeen pitää tarkis- taa tilarekisteri, koska tulevan datan rekisterissä RD saattaa olla odottamassa roskamerkki. Tilanteesta selvitään lukemalla roskamerkki ja hylkäämällä se. Toinen mahdollisuus, joskin ei suositeltava, on kirjoittaa tilarekisteriin LSR nolla, mikä on hieman epähieno temppu, koska tilarekisteriä saa periaatteessa vain lukea ! Sivu 5.1 BIOS-rutiineja RS-liitännän käyttöä varten: (PC, AT ja PS/2) BIOS-rutiinit ovat peräisin ensimmäisen IBM PC:n ajoilta ja ovat suurelta osin kömpelöitä ja aajastaan jälkeen jääneitä. BIOS-rutiinit eivät tue siirtonopeuksia kuin 9600 baudiin saakka, vaikka nykyiset koneet pystyisivät paljon parempaan. Ne eivät myöskään osaa puskurointia ja ovat muutenkin hitaita ja kömpelöitä. PS/2 koneissa on muutama lisäys tavanomaisiin BIOS-rutiineihin. PS/2 koneiden BIOS tukee uusia funktioita käytettäessä 19200 baudin nopeutta. En kuitenkaan luettele tässä PS/2 koneiden erikoisrutiineita, koska ne ovat vain harvojen käytettävissä ja eivät kuitenkaan tarjoa mitään ratkaisevaa uutta. Nämä samat toiminnot löytyvät myös FOSSIL-ajureista, jotka korvaavat BIOS- rutiinit RS-portin käytössä. Lisäksi ne tarjoavat puskuroinnin ja muita etuja. FOSSIL-ajurit sisältävät yleensä myös muita lisäfunktioita. Kun käyttää omissa ohjelmissa BIOS-rutiineja, niin samat ohjelmat saa toimimaan ilman muutoksia myös FOSSIL-ajurien kanssa. FOSSIL-ajureireiden tarjoamista palveluista löytyy tietoa vähän BIOS-rutiineiden kuvauksien jäljestä. INT 14h funktio 00h: portin initialisointi vaatii: AH=00h AL=portin parametrit D7 D6 D5 D4 D3 D2 D1 D0 nopeus pariteetti stop-bitit sananpituus 000 = 110 X0 = none 0 = 1 bitti 10 = 7 bittiä 001 = 150 01 = odd 1 = 2 bittiä 11 = 8 bittiä 010 = 300 11 = even 011 = 600 100 = 1200 101 = 2400 110 = 4800 111 = 9600 DX=portin numero (0=COM1, 1=COM2, jne.) palauttaa: AH=portin tila (merkitys, jos bitti ykkönen) D7 timed out huomattu D6 lähtyssiirtorekisteri (transmit shift register) tyhjä D5 lähetysrekisteri (transmit holding register) tyhjä D4 katko (break) huomattu D3 stop-bitti virheellinen (framing error) D2 pariteettivirhe (parity error) D1 ylivuoto (overrun error) huomattu D0 vastaanotettava data valmis AL=modeemin tila (merkitys, jos bitti ykkönen) D7 vastaanottokantoaalto huomattu D6 puhelin soi (ring indicator) D5 DSR (data-set-ready) D4 CTS (clear-to-send) D3 muutos vastaanottokantoaallon tunnistuksessa D2 nouseva reunan soimisen tunnistus (trainling edge RI) D1 muutos DSR:ssä D0 muutos CTS:ssä Sivu 5.2 INT 14h funktio 01h: merkin kirjoitus vaatii: AH=01h AL=kirjoitettava merkki DX=portin numero (0=COM1, 1=COM2, jne.) palauttaa, jos onnistui: AH bitti D7=0 AH bitit D6-D0=portin tila (jos kyseinen bitti ykkönen) D6 lähetyssiirtorekisteri (transmit shiht register) tyhjä D5 lähetysrekisteri (transmit holding register) tyhjä D4 katko (break) huomattu D3 stop-bitti virheellinen (framing error) D2 paritteettivirhe huomattu D1 ylivuoto (overrun) huomattu D0 vastaanotettava data valmis AL=lähetetty merkki muuttumattomana paluttaa, jos ei onnistunut: AH bitti D7=1 AL=lähetetty merkki muuttumattomana INT 14h funktio 02h: luetaan merkki vaatii: AH=02h DX=portin numero (0=COM1, 1=COM2, jne.) palauttaa, jos onnistui: AH bitti D7=0 AH bitit D6-D0=portin tila (jos kyseinen bitti ykkönen) D4 katko (break) huomattu D3 stop-bitti virheellinen (framing error) D2 paritteettivirhe huomattu D1 ylivuoto (overrun) huomattu AL=luettu merkki palauttaa, jos epäonnistui: AH bitti D7=1 INT 14h funktio 03h: portin tilan luku vaatii: AH=03h DX=portin numero (0=COM1, 1=COM2, jne.) palauttaa: AH=portin tila (kuten INT 14h funktio 00h:ssa) AL=modeemin tila (kuten INT 14h funktio 00h:ssa) Sivu 6.1 PC/MS-DOS sisältää myös rutiineja sarjaliitännän käyttöön INT 21h funktio 03h: lukee (odottottaa tarvittessa) merkin tavallisesta ulkoisesta laitteesta (tavallisesti COM1 tai AUX) vaatii: AH=03h palauttaa: AL=luettu merkki INT 21h funktio 04h: kirjoittaa merkin tavalliselle ulkoiselle laitteelle (tavallisesti COM1 tai AUX) vaatii: AH=04h DL=lähetettävä merkki palauttaa: ei mitään HUOM! DOS asettaa aloittessaa AUX:lle (COM1) seuraavat parametrit: 2400 bps 8 databittiä ei paritteettia 1 stop-bitti Sivu 7.1 RS-232C keskeytys- keskeytys- I/O BIOS data portti linja numero osoite osoite --------------------------------------------------------- COM1 IRQ4 INT 0Bh 3F8h 0040:0000 COM2 IRQ3 INT 0Ch 2F8h 0040:0002 COM3 IRQ4 INT 0Bh 378h 0040:0004 COM4 IRQ3 INT 0Ch 278h 0040:0006 Olen myös törmännyt seuraavia standardista poikkeavia ratkaisuja COM3 IRQ2 INT 0Bh 338h HUOM! BIOS data osoitteet eivät toimi OS/2:ssa käytettäessä COM??.SYS ajureita. HUOM! Tiedot IRQ-linjoista eivät pidä paikkaansa IBM PS/2 koneissa. Taulukossa esitetyt I/O osoitteet ovat yleisesti käytössä olevia osoitteita. Myös myös poikkeavia I/O osoitteita käytetään. Kunkin portin I/O osoiteen saa selville lukemalla taukossa esitetystä muistipaikasta 16 bittisen sanan. Muistipaikkojen osoitteet on esitetty muodossa segmentti:siirros heksadesimaa- limuodossa. COM3 ja COM4 käyttävät samoja keskeytyslinjoja (COM3:lle IRQ4 ja COM4:lle IRQ3), mikä saattaa joissain tapauksissa aiheuttaa ongelmia. Varsinkin, jos kummatkin samaa keskeytyslinjaa tarvitsevat portit käyttävät yhtä aikaa samaa keskeytyslinjaa. (esim. hiiri ja modeemi) Jotkut sarjaliikennekortit tai korttimodeemit voidaan asettaa käyttämään myös normaalista poikkeavia keskeytyslinjoja, esimerkiksi IRQ5, jolloin edellä kuvatusta ongelmasta päästään eroon. Ongelmaksi muitenkin saattaa tällöin muodostua portin toimimattomuus joidenkin ohjelmien kanssa. Yleensä 4 linjaa tai enemmän sisältävissä RS-232C sarjaliitäntäkorteissa käytetään "ylimmääräisten" linjojen hoitoon omia ratkaisuja, jopa kortilla olevaa omaa mikroprosessoria ja puskurimuistia saatetaan käyttää. Näitä erikoiskortteja käytetään vain erikoisratkaisuissa. Keskeytysohjaimen käytöstä IRQ-linjojen päälläoloa ohjataan keskeytysohjaimen maskirekisteristä portti- osoitteesta 0021h. Seuraavat bitit vaikuttavat RS-piirien keskeytyksiin (0 merkitsee, että keskeytyslinja päällä). D4 -> IRQ4 D3 -> IRQ3 Jokainen kovokeskeytys, kuten RS-linjojen aiheuttamat, on kuitattava suorite- tuiksi keskeytysohjaimelle. Muutoin keskeytysohjain ei lähetä uusia keskeytyk- siä prosessorille, mikä aiheuttaa mm. näppäimistön lukkiutumisen ja koneen kellon pysähtymisen. Keskeytyksen kuittaaminen suoritetuksi tapahtuu kirjoittamalla I/O osoittee- seen 20h arvo 20h. Tämä kannattaa tehdä keskeytysrutiinin lopussa tai kohdas- sa, jossa uusi keskeytys ei haittaa. Sivu 8.1 Lista FOSSIL-ajurin X00 tarjoamista INT 14h palveluista numero palvelu ------------------------------------------------------------------------------- 00h Linjanopeuden ja linjaparametrien asetus (Set Baud Rate) 01h Merkin lähetys (Transmit character), odottaa tilaa lähetyspuskurissa 02h Merkin vastaanotto (Receive character), odottaa kunnes merkki saatavilla 03h Tilan luku (StatusRequest) 04h Ajurin intialisointi ja päälle laitto (Initialize driver) 05h Ajuri pois päältä (Deinitialize driver) 06h DTR:n nostaminen/laskeminen (Raise/lower DRT) 07h Palauta systeemin ajastimen parametrit (Return system timer params) 08h Tyhjennä lähetyspuskuri (Flush output buffer) odottamalla, että kaikki merkit puskurista on lähetetty 09h Nollaa lähetyspuskurin heti (Purge output buffer immediately) 0Ah Nollaa lähetyspuskurin (Purge output buffer), mutta huolehtii mahdollisesta kättelystä 0Bh Merkin lähetys (Transmit character, no wait) ilman odotusta purkuriin mahtumisesta 0Ch Katsoo merkin vastaanottopuskurista ("Peek ahead" input buffer) mutta ei poista sitä 0Dh Katsoo merkin näppäimistöpuskurista ("Peek ahead" KB buffer) mutta ei poista sitä 0Eh Näppäimistön luku (Read Keyboard), odottaa jos merkkiä ei näppäimistö- puskurissa 0Fh Madollistaa/laittaa pois (Enable/disable com port flow control) kättelyt 10h Mahdollistaa/laittaa pois Ctl-C/Ctl-K tarkistuksen ja lähetyksen (Enable/disable Ctl-C/Ctl-K check, Enable/disable transmitter) 11h Aseta kursorin paikka ruudulla(Set cursor location) 12h Lue kursorin paikka ruudulla(Read cursor location) 13h Kirjoita merkki ruudulle ANSI:n kautta (Write char ANSI support) 14h Laittaa päälle/pois (Enable/disable "watchdog") boottauksen kantoaallon kadotessa 15h Kirjoita merkki ruudulle (Write char re-entrant), vapaasti kutsuttava 16h Lisää/poista toiminta kellokeskeytyksestä (Insert/delete function from timer tick) 17h Systeemin boottaus (Reboot system) 18h Lukee useamman merkin käyttäjän puskuriin (Read block) 19h Kirjoittaa useamman merkin käyttäjän puskurista (Write block) 1Ah Aloittaa/lopettaa BREAKin lähetyksen (Start/stop sending break) 1Bh Lukee ajurista tietoja käyttäjän puskuriin (Get Driver Info) 7Eh Lisää käyttäjän palveluja INT 14h:aan (Install user appendage) 7Fh Poist käyttäjän palveluja INT 14h:sta (Remove user appendage) Tämän listan on tarkoitus antaa vikkejä palveluista, joita FOSSIL-ajurit tarjoavat. Tietoa palveluiden tarkemmasta käytöstä ja muusta niihin liittyv- ästä pitää etsiä ja tarkistaa FOSSIL-ajureiden mukana tulevista dokumenteista. Tämä sivun tiedot ovat peräisin X00 FOSSIL-ajurin dokumenteista. Sivu 9.1 RS-232C-liitännän kättely modeemiyhteydessä (XON ja XOFF -merkit käytössä) Vastaanottokeskustelu DTE-laite 1: Lähetyskeskustelu DTE-laite 2: 1. DTR: Aseta DTR. Laite käynnissä 1. DTR: Aseta DTR. Laite 2 käynnissä ja valmis. ja valmis. DSR: Modeemi 1 käynnissä. DSR: Modeemi 2 käynnissä. 2. RCD: Kantoaalto tunnistettu, 2. DCD: Kantoaalto tunnistettu, vastaanottokanava OK. vastaanottokanava OK. 3. RTS: Aseta RTS. Noin kuunnella, modeemin valmistauduttava vastaanottoon. 4. CTS: Viivästä vähän RST:stä, sitten aseta CTS. 5. TxD: Lähetä tieto modeemille, kun se on valmis. Modeemi moduloi tiedon linjalle. 6. RxD: Modeemi demoduloi tiedon ja lähettää RxD linjalle. 7. TxD: Lähettää XOFF-merkin. En voi 7. RxD: Vastaanottaa XOFF-merkin. vastaanottaa lisää. Keskeytän kunnes saan XON -merkin. 8. RTS: Nollaa RTS. Modeemi älä dekoodaa. 9. RTS: aseta RTS. Modeemi, valmistaudu kuuntelemaaan. 10. CTS: Viivästä hieman RTS:stä, sitten aseta CTS. Modeemi on taas valmis. 11. TxD: Lähetä XON. Voin taas vastnanottaa. 12. RxD: XON vastaanotettu. Voin taas lähettää tietoa kun sitä on. 13. Jatka kohdasta 5, kunnes yhteys 13. Jatka kohdasta 5, kunnes yhteys päätetään. päätetään. X-on merkki on 11h X-off merkki on 13h Sivu 10.1 Mahdollisia ongelmia UART-piirin ohjelmoinnissa UART-piirin ohjelmointi ei ole ongelmatonta. Varsinkin jos haluaa tehdä sarjaliikennerutiininsa täysin keskeytyspohjaisiksi, törmää moniin ongelmiin. Osa näistä ongelmista johtuu UART-piirin 8250 hieman kehittymättömistä keskeytysominaisuuksista. Valitettavasti nämä ongelmat tulevat eteen jopa xx550 UART-piirien kanssa. Ongelmat tulevat ylleensä esille nopeassa kaksisuuntaisessa siirrossa. Mahdollisesti ongelmia aiheuttavia ominaisuuksia ja puutteita: A. UART-piiri ei tunnista alemman tason keskeytystä kun korkeamman tason keskeytystä palvellaan B. INS8250:n antamat tilarekisterin tilat eivät ole aina luotettavia. Tämä esiintyy varsinkin nopeiden koneiden kohdalla, joissa on hidas 8250 UART-piiri. INS8250 saattaa väittää lähetysrekisteriä tyhjäksi vaikka se ei olekaan tyhjä. Tästä aiheutuu helposti merkkien katomisia. Muut UART-mallit eivät yleensä valehtele tilaansa. Ongelmia voi välttää käyttämällä apuna seuraavia neuvoja keskeytysrutiinia suunnitellessaan: 1. Lähtetään keskytyksen kuittaus keskeytysohjaimelle mahdollisimman aikaisessa vaiheessa keskeytysrutiinia, mikäli tämä on vain mahdollista. 2. Keskeytysrutiinissa maskataan pois lähetyskeskeytys ja maskataan se takaisin päälle. Tämä tehdään heti ennen korkeampien prioriteetin UART- keskytyspalveluiden suoritusta (vastaanottodata valmis, linjatilakeskytys) 3. Keskeytysplavelijan lopuksi tarkistetaan LSR rekisteristä THRE ja jos se on päällä, palvellaan THRE keskeytys, vaikkei sitä olisi saatukaan. 4. Rakennetaan koko keskytyspalvelija siten, ettei se erittele eri keskeytyksiä, vaan palvelee ja nollaa kaikki mahdolliset keskytykset: a) Tarkistaa IIR rekisterin (lähetysvalmiuden nollaus). b) LSR:n mukaan ensin vastaanottaa niin kauan kuin dataa on UART:illa annettavissa (kunnes LSR D0 on nolla). (tilanmuutoskeskeytyksen nollaus, vastaanottokeskeytksen nollaus). c) Minkä jälkeen lähettää niin paljon, kuin UART kykenee ottamaan vastaan (kunnes THRE on nolla). d) Lukee MSR:n (modeemin tilanmuutoskeskeytyksen nollaus). Kohdan kaksi ratkaisu perustuu siihen, että UART aiheuttaa lähetysrekisterin tyhjyydestä ilmoittavan keskeytyksen aina kun kyseistä keskeytystä vastaava maskibitti asetetaan ja lähetysrekisteri on tyhjä. Sivu 11.1 Nasta Suunta Käyttö 8250 ja xx450 --------------------------------- 1 I/O D0 Databitti (vähiten merkitsevä) 2 I/O D1 Databitti 3 I/O D2 Databitti 4 I/O D3 Databitti 5 I/O D4 Databitti 6 I/O D5 Databitti 7 I/O D6 Databitti 8 I/O D7 Databitti (eniten merkitsevä) 9 I RCLK Vastaanottokello 10 I SIN Sarjasisäänmeno 11 O SOUT Sarjaulostulo 12 I CSO Piirin valintasignaali 13 I CS1 Piirin valintasignaali 14 I CS2 * Piirin valintasignaali 15 O BAUDOUT * Baudikellon lähtö 16 I XTAL1 Kellokidettä varten 17 O XTAL2 Kellokidettä varten 18 I DOSTR * Datan kirjoituksen liipaisupulssi 19 I DOSTR Datan kirjoituksen liipaisupulssi 20 Vss Maa 21 I DISTR * Datan luvun liipaisupulssi 22 I DISTR Datan luvun liipaisupulssi 23 O DDIS Ulkoisen ajurin kytkentä pois 24 O CSOUT Piirin valintasignaalin ulostulo 25 I ADS * Osoitteen liipaisupulssi 26 I A2 Osoitelinja I/O:ta varten 27 I A1 Osoitelinja I/O:ta varten 28 I A0 Osoitelinja I/O:ta varten 29 NC Ei kytketty 30 O INTRPT Keskeytyssignaalin lähtö 31 O OUT2 * Ohjelmoitava ulostulo (ohjaa PC:ssä 3-tilapuskuria) 32 O RTS * RTS ulostulo 33 O DTR * DTR ulostulo 34 O OUT1 * Ohjelmoitavan ulostulon lähtö 35 I MR Piirin retointi 36 I CTS * CTS sisääntulo 37 I DSR * DSR sisääntulo 38 I RLSD * RLSD sisääntulo 39 I RI * RI sisääntulo 40 Vdd Käyttöjännite Eroavat nastat xx550:ssä (ei kytketty yleensä PC:n sarjaliikennekorteissa) ------------------------ 24 O TXRDY * Lähetys DMA:ta varten 25 O RXRDY * Vastaanotto DMA:ta varten * Kyiseiset signaalit alhaalla aktiivisia. Eli niissä käänteinen logiikka. I = sisääntulo O = ulostulo Sivu 12.1 DISCLAIMER - VASTUUTTOMUUSJULISTUS Tämä teksti on kirjoitettu usean lähteen pohjalle, enkä ole käytännössä kokei- lut läheskään kaikkea tekstissä olevaa tietoa. Täten en pysty takaamaan tekstin täyttä oikeellisuutta. Olen yrittänyt tarkistaa tekstiä useaan otteeseen ja vertaillut eri lähteissä oleviin tietoihin, mutta kaikesta huolimatta siihen on saattanut eksyä virheitä. En ota mitään vastuuta tekstin sisällöstä tai siinä olevista virheistä. En katso olevani vastuussa tekstin tai tekstissä olevien tietojen mahdollisesti jollekulle tai jollekin aiheuttamasta vahingosta tai haitasta. En ole myöskään velvollinen korjaamaan tekstissä mahdollisesti olevia virheitä tai puutteellisuuksia. Sivu 13.1 Lähteet kirjallisessa muodossa: Ray Duncan, Programmer's quick reference series: IBM ROM BIOS, Microsoft Press, 1988 Archer Semiconductor Reference Guide 1988 Radio Shack, 1987 T. Leinonen Engineering, Yleiselektroniikka tuoteluettelo 1985, Yleiselektroniikka Oy, 1984 Compact 12MHz PC 286C-120 Personal Computer Users Guide, Copam, 1987 IBM Personal Computer, (suomennos) International Business Machines Corporation, 1982 UMC DATA BOOK 1988-1989: Microcomponent & Memory ICs, Dawid C. Willen, 8088 Assembler Language Programming: The IBM PC, First Edition, Second Print, Howard W. Sams & Co.,Inc, 1983 B-2010 I/O Card User's Guide Harris Product Guide '89, Harris Corporation, 1989 Silicon Systems SSI 73M550/550F datalehdet Racal-Milgon Racal-Vadic VA3200 modeemin tekniset tiedot Advanced Peripherals: Data Communications, Local Area Networks, UARTs, National Semiconductor Corporation, 1988 VIC Revealed SmartLink 2400S/2400BPS MODEM User's Manual MultiModem 224/224E Owner's Manual RED BOOK: Recommendations of the V Series, Volume VIII - Fascicle VIII.1 CCITT, 8-19 October 1984 William J. Beynda, Basic data communications, Pretence-Hall Internatinal,Inc., 1989 A Brilliant Combination 2 Serial/1 Parallel, Game Port Card Operation Manual Pentti Teppo, Siirtojärjestelmät tietoliikennetekniikassa, Gummerus 1982 Lähteenä olevat lehdet: MikroBitti 9/87 Elektor Electronics June 1989 Elektor Electronics May 1990 Prosessori 8/89 MikroPC 5/90 Radio Electronics Computer Digest November 1988 Radio Electronics June 1988 FINTRONIC KOMPONENTIT -mainoslehtinen Dr Dobb's Journal June 1991 Dr Dobb's Journal July 1991 Lähteet elektronisessa muodossa: User Supported Programming Technical Reference (PROGREF1 ja PROGREF2) The Greenleaf Comm Library lähdekoodeja TECH Help (by Flambeaux Software) X00 fossil ajurin dokumentit Viestejä elektronista postilaatikoista (mm. MITS ja Programmer's BBS) Usenetin News-alueet alt.hackers, sci.electronics ja comp.sys.ibm.pc alaryhmineen