Taal:
UNIFACE, Het oude verhaal
Ik ben begonnen met Uniface in de jaren 80. En het onderstaan legt uit hoe het systeem werkte.
UNIFACE, de buitenwereld aan de computer
Niets is zo leuk als het besturen van de buitenwereld met je eigen computer. Het UNIFACE systeem is geschikt om mikrocomputers te laten communiceren met de buitenwereld. Met name voor het uitvoeren van meet en regeltaken.
Computerpoorten
Iedere computer beschikt over de mogelijkheden om informatie uit te wisselen met randapparatuur. Dit gebeurt door middel van I/O poorten die het mogelijk maken data afkomstig van de processor via een interne computer-bus naar buiten over te brengen of omgekeerd, signalen van buitenaf via de computerbus naar de processor te brengen, Op deze manier staat de computer in verbinding met zijn monitor, zijn keyboard, zijn disk, zijn printer en zijn muis. Of met zijn UNIFACE systeem.
Interfacing
Het aansluiten van randapparaten op de computer noemt men interfacing. Bijna altijd is het daarbij nodig een speciale electronische schakeling te maken, die de besturingssignalen uit de computer aanpast, zodat het randapparaat die begrijpt. Omgekeerd worden hierin ook de signalen van het randapparaat vertaald zodat de computer daarmee overweg kan. Zulke aanpasschakelingen, interfaces dus, bestaan in principe altijd uit twee delen. Het ene deel vormt de signalen uit de computer om tot een gemakkelijk te hanteren tussenvorm en/of past de tussenvorm signalen aan voor het gebruik van de computer. Deze tussenvorm is vrijwel altijd uitgevoerd als acht parallelle draden, waarover een getal gaat. Het andere deel van de interface past de tussenvorm aan de vorm zoals de buitenwereld die nodig heeft. Meestal is het zo dat de tussenvorm helemaal niet van buiten af zichtbaar is. Deze bestaat alleen op de print, waarop de interface is gebouwd, of hij bestaat alleen maar binnen in een IC. Dit laatste is zo in bijvoorbeeld de moderne UART's.
Scheiding van de twee delen
UNIFACE berust op het principe van de werkelijke scheiding van de twee delen. Bij UNIFACE heb je dus altijd twee dingen nodig. Het ene ding heet het computer-deel. Het is specifiek gemaakt voor de computer waarbij hij hoort. Zo is er een computerdeel voor de Philips P2000 computer, een computerdeel voor de MSX computer, voor de Commodore 64/128 en voor de I.B.M. compatibel's. Deze computerdelen hebben verschillend gevormde connectors, want die moeten passen in de verschillende computers. Aan de andere kant van deze delen zit een connector, de UNIFACE-bus, die voor alle delen hetzelfde is. Hier vinden we in een acht bits parallelle tussenvorm, de commando's voor de buitenwereld en tevens de meldingen vanuit de buitenwereld in die vorm. Hierop kan het aanpassingsdeel voor die buitenwereld aangesloten worden. Dit kan bestaan uit simpele geschakelde spanningsversterkers, maar ook D/A en A/D-omzetters of thyristor sterkstroom-regelingen. Bij UNIFACE is het mogelijk een groot aantal van deze buiten-werelddelen tegelijkertijd aan te sluiten. Een groot voordeel van de splitsing van de twee delen is, dat het niet nodig is alles te vervangen als je ineens besluit een andere computer te gaan gebruiken. Het enigste dat dan moet worden vervangen is het computerdeel.
PC computer-deel
(Click op het plaatje)
MSX computer-deel
(Click op het plaatje)
P2000 computer-deel
(Click op het plaatje)
Opbouw
Het UNIFACE systeem bestaat primair bestaat uit een stukje electronica waarop twee I/O-poorten voorkomen. En iedere I/O poort is in staat een byte input en een byte output uit te wisselen met de buitenwereld. Het genoemde stukje electronica wordt op de computer gesloten via een cartridge (bij de P2000, MSX en commodore computers of via een insteekkaart bij de P.C. Het wordt het computerdeel of het interface van het UNIFACE systeem genoemd. Het vormt de verbinding tussen de computer-bus en de UNIFACE-bus. Beide bussen zijn groepen draden waarover door middel van elektrische spanningen informatie wordt doorgegeven en beide bussen hebben gemeenschappelijk dat een aantal draden adreslijnen zijn, andere datalijnen en controlelijnen. Er zijn ook grote verschillen tussen beide bussen. Zo is de computerbus dynamisch, d.w.z. met de frequentie van de computerklok verandert min of meer automatisch de informatie op de draden van de bus. De UNIFACE-bus is statisch. De erop voorkomende informatie in de vorm van elektrische spanningen blijft onveranderd in de tijd, totdat bewust een opdracht gegeven wordt de informatie te vervangen door andere informatie. Een ander verschil is, dat bij de computerbus signalen naar de processor toe en signalen afkomstig van de processor over dezelfde lijnen wordt getransporteerd. Controlelijnen geven dan de richting van het transport aan. Bij de UNIFACE-bus zijn de input en output lijnen aparte draden. De computerbus bestaat vaak uit een vijtigtal draden of nog meer. de UNIFACE-bus is iets bescheidener.
Vierendertig Draden
Vierendertig Draden De snelle rekenaar zal beredeneerd hebben dat de UNIFACE-bus bestaat uit tweeëndertig draden, namelijk gescheiden in- en output van twee I/O poorten betekent twee output-bytes van elk acht draden en twee input-bytes van elk eveneens acht draden. Dit is niet zo, het zijn er vierendertig, maar toch iets ingewikkelder. De twee output bytes (van elke I/O poort één) komen als zestien draden voor op de UNIFACE-bus. Ook een input-byte is volledig als acht draden aanwezig, maar van de tweede input-byte worden er maar vier gebruikt door het UNIFACE systeem en komen er maar twee voor op de UNIFACE-bus. De andere twee worden alleen gebruikt op het computerdeel (de interface). Als we dit optellen komen we op zesentwintig draden. De andere draden zijn zes keer de Aarde en twee keer de vijf Volt-spanning die in de computer aanwezig is. Deze draden worden via de connector verbonden aan een 34-aderige band-kabel. Op deze bandkabel kunnen later diverse applikatieprinten parallel bevestigt worden. Deze bandkabel is dus de UNIFACE-bus.
Hoe bedient de computer de UNIFACE-bus?
Iedere computer beschikt over instructies om I/O-poorten te bedienen, zowel in machinetaal als in hogere computertalen. Voor de Z80O, en de 8088 en aanverwante processoren zijn de instructies simpelweg in de mnemonischetaal "IN nummer" voor input via een I/O-poort en "OUT nummer" voor output via een I/O-poort. Nummer is een getal dat aan de poort wordt toegekend. In BASIC-taal zijn de instructies praktisch gelijk met respectievelijk INP(nummer) voor input en OUT nummer voor output. Voor de 65XX processor en aanverwante zijn de I/O-poorten identiek aan de geheugenplaatsen en worden dezelfde instructies gebruikt als die voor het bediening van het geheugen, bijvoorbeeld in basic-taal de wel bekende PEEK(adres) en POKE adres, getal opdrachten. Voor de normale werking gebruikt de computer een aantal I/O-poorten, maar er zijn ook een aantal poorten vrij. Van de vrij te gebruiken poorten neemt het UNIFACE-systeem er twee. Wanneer als opdracht naar een van deze poorten een getal gestuurd wordt tussen 0 en 255, dan wordt dit getal in binaire vorm door de betreffende I/O-poort naar de UNIFACE-bus gestuurd.
Op de aangesloten outputlijnen vindt men spanning op de lijn die overeen komt met een bitwaarde 1 van het binaire getal en geen spanning waar de bitwaarde in het getal 0 is. Door met een Voltmeter de spanning van de outputlijnen van de UNIFACE-bus te meten kan men de waarde van het uitgestuurde getal bepalen. Door de outputlijnen te verbinden met de inputlijnen van de UNIFACE-bus is het mogelijk de waarde van het uitgestuurd getal te bepalen door de getalswaarde met een input-instructie naar de betreffende I/O-poort in te lezen in de processor. Het is natuurlijk een onzinnige zaak om informatie naar de UNIFACE-bus te sturen en dan met dezelfde UNIFACE-bus weer in te lezen, maar uiteraard kunnen de UNIFACE-bussen ook van verschillende computers zijn en dan kan je op deze wijze informatie tussen zelfs zeer ongelijksoortige computers uitgewisseld worden, Een datafile kan overgebracht worden van een P2000 naar een PC-AT of een programma van een MSX naar een PC-XT.
Applikatieprinten.
Voorgaand beschreven gebruik van de UNIFACE-bus is geen doel, maar een toevallige neventoepassing. Het doel zijn meet en regel toepassingen en hiervoor zijn een aantal UNIFACE-applikatieprinten ontwikkeld die met behulp van connectoren met de UNIFACE-bus verbonden kunnen worden. Om met de applikatieprinten te kunnen communiceren worden aan de lijnen van de UNIFACE-bus betekenissen toegekend:
-De input en output-lijnen van I/O-poort een worden de data-lijnen.
-De output-lijnen van I/O-poort twee worden de adreslijnen en de vier inputlijnen van deze poort worden statuslijnen, waarvan er dus 2 als draden voorkomen op de UNIFACE-bus.
Programmering van de UNIFACE-bus De programmering wordt behandeld aan de hand van een voorbeeld met een applicatie bij een Personal Computer (IBM compatibel XT of AT). De door het UNIFACE-systeem gebruikte I/O-poorten zijn in dit geval de nummers 784 en 785 (decimaal) voor respectievelijk data in en output, en adressering en statussignalen. (voor andere computers, zie tabel 1 met de corresponderende nummers)
De applikatieprinten beschikken over een adresdecodering en een adresinstelling die door de gebruiker zelf bepaald wordt tussen 0 en 255. Dit is in te stellen door middel van dipswiches op de applikatieprint. Wanneer de computer een adreswaarde uitzendt over de adreslijnen van de UNIFACE-bus zullen de aangesloten applikatieprinten dit adres decoderen en bij gelijkheid met hun ingestelde eigen adres worden de datalijnen van de UNIFACE-bus doorverbonden met de geadresseerde uniface-applicatie. Via de datalijnen kan vervolgens de computer informatie naar de geadresseerde applicatie sturen of omgekeerd informatie uit de applicatie ophalen.
Programmering van de UNIFACE-bus
Computer type Databus I/O Adres- en/of statusbus
MSX 1,2,2+ en turbo-r 48 49
P2000 96 97
commodore 64/128 57088 57089
IBM-PC compatible 784 785
Op de applikatieprint wordt willekeurig het adres 100 ingesteld met schakelaars. (het getal 100 wordt hier alleen gebruikt als voorbeeld, voor de juiste waarden, zie Adressering van UNIFACE-applikatieprinten) De computer "vindt" dan de applicatie met het basicstatement: OUT 785,100. Op dat moment komt de inhoud van de UNIFACE data-output-lijnen van de applikatieprint van de computer. Zo brengt het statement OUT 784,144 de waarde 144 in de applikatieprint. Omgekeerd kan de applicatie informatie doorgeven aan de UNIFACE data-input-lijnen. Als deze lijnen doorverbonden zijn op de applikatieprint met een register waarin het getal 210 voorkomt, dan kan de computer dit getal lezen met het basic-statement A=inp(784). De variabele A krijgt hierdoor de waarden 210. Als andere applikatieprinten gelijktijdig aangesloten zijn op de UNIFACE-bus tijdens deze handelingen, zullen ze niets merken van het gebeuren mits hun ingestelde adres niet gelijk is aan 100. Stel er is een tweede applicatie op adres 200 waar het getal 88 naartoe gestuurd moet worden. Nu moeten er even opgelet worden. Als de applicatie direct geadresseerd wordt dan staat op de output-lijnen van de UNIFACE-bus nog de oude waarde 144. Actualiseren we eerst deze waarde tot 88 dan kunnen we niet voorkomen dat deze al gestuurd wordt naar de applicatie op adres 100, omdat het adres nog niet is aangepast. Dit probleem wordt opgelost door adressering van een niet bestaande applicatie op bijvoorbeeld adres 0:
OUT 785,0;     De-adressering
OUT 784,144; Waarde bestemd voor adres 100
OUT 785,100; Adressering op adres 100
OUT 785,0;     De-adressering
OUT 784,88;   Waarde voor adres 200
OUT 785,200; Adressering op adres 200
OUT 785,0;     De-adressering
Wil men dit allemaal omzeilen, dan is door het werken met sub-routines het een en ander op een zeer comfortabele wijze op te lossen. Het werken met sub-routines zal bij iedere kaart, verderop in dit verslag, afzonderlijk worden verklaard aan de hand van een programmeer voorbeeld .
De statuslijnen
De statuslijnen geven de computer informatie over het UNIFACE-systeem. Er zijn vier statuslijnen op de bits 0, 1, 6 en 7 van het status-input-byte op een van de I/O-poorten. Wanneer geen UNIFACE-systeem is aangesloten, dat wil zeggen, er is geen computerdeel (interface) , dan zijn alle statusbits hoog (op de betreffende bits in de ingelezen status-byte wordt de aanwezigheid van een 1 geconstateerd) . Wanneer wel ben interface aanwezig is, maar er is geen applikatieprint geadresseerd, dan levert de status-byte voor de bits 0 en 1 een 1 op en voor de bits 6 en 7 een 0. Bit 1 wordt 0, wanneer een applikatieprint is geadresseerd die digitale input verzorgt; bit 0 wordt 0, wanneer een applikatieprint is geadresseerd die digitale output verzorgt. Beide bits 0 en 1 worden 0 bij adressering van analoge applikatieprinten. Op deze manier is controleerbaar op een bepaalde applikatieprint door de computer bereikt wordt. Dit kan ook directer door de spanning te meten op het CONTROL-punt op de applikatieprint: bij juiste adressering wordt er op dat punt een spanning van ca. 4 Volt gemeten en bij onjuiste adressering een spanning lager dan 1 Volt. Verder uitleg over het meten op dit zogenaamde CONTROL-punt vindt u verderop bij Adressering van de UNIFACE-applikatieprinten. Zoals gezegd vindt de adressering van de UNIFACE-print plaats in een 8 bits getal, zodat 256 adressen geformuleerd kunnen worden. Alleen voor de 12 bits analoge printen ADC12 en DAC12 zijn ook alle adressen met 8 DIL-schakelaars instelbaar; voor de andere applikatieprinten is de adresruimte beperkter. Dit is gedaan om zoveel mogelijk te voorkomen, dat per ongeluk twee printen gebruikt worden met een gelijk adres, die dan gelijktijdig connectie krijgen met de UNIFACE-bus. De gevolgen van een programmeerstap zijn dan niet te overzien en zou tot schade kunnen leiden. Daarom is de beschikbare adresruimte verdeeld in 16 blokken van elk 16 adressen. Iedere UNIFACE-applicatie print heeft een eigen adresblok toegewezen gekregen, hiervan zijn 4 adressen instelbaar met een tweepolige DIL-schakelaar op de adresbits 0 en 1. Door het leggen van doorverbindingen op de bits 2 en 3 van de adressering kan een gebruiker de andere 12 adressen toepassen. Bijvoorbeeld wanneer meer dan 4 printen van gelijke soort aan de UNIFACE-bus worden gebruikt . Doorverbindingen op de adresbits 4 t/m 7 kunnen wel gelegd worden, waardoor er adressen ter beschikking komen, maar dan wordt het geadresseerd in de ruimte die voor andere applikatieprinten is bestemd. Adressering van UNIFACE-printen vindt geinverteerd plaats, d.w.z. sluiting van een adres-bit betekent dat de bitwaarde afgetrokken moet worden van 255. Geen enkele gesloten adresbit levert dan het adres 255. Voor de verschillende UNIFACE-applikatieprinten zijn de gereserveerde adressen volgens tabel 2.
Tabel 2 (met uitleg)
Het kaartnummer wordt gevormd, door de bijbehorende waarden van de schakelaars cq. eilandjes, die horizontaal verbonden zijn op de applikatieprinten, op te tellen. U kunt dit kaartnummer dus wijzigen door middel van:
-Verandering van instelling DIL-schakelaars.
-Door een andere vaste verbinding te leggen tussen de evenwijdige eilandjes.

de UNIFACE-applikatieprinten worden standaard geleverd met de volgende vaste doorverbindingen:
kaart/print kaart/nr adres invers gesloten bits instelbare adressen reserve adressen
DIGOUT 16 239 4 238/237/236 224 t/m 235
ADC8 32 223 5 222/221/220 208 t/m 219
DAC8 32 191 6 189/187/185 177 t/m 183
DIGIN 128 191 7 126/125/124 112 t/m 123
EXPIO 144 111 4 en 7 110/109/108 96 t/m 107
ADC12 - - geen 1 t/m 255 n.v.t.
DAC12 - - geen 1 t/m 255 n.v.t.
1): De ADC12 en de DDAC12 bevatten elk 8 DIL (Dual In Line) schakelaars. Ze hebben geen vaste instelling
2): Voor de sub-routine programmatuur moet het geinverteerde kaartnummer gekozen worden (zie tabel- Adres/Invers). Het geinverteerde kaartnummer kan men ook verkrijgen door het kaartnummer van het getal 255 af te trekken (255 - Kaartnummer).
Controle (Kaartnummer test)
De werking van een UNIFACE-kaart staat of valt met de instelling van het goede kaartnummer met de dil-schakelaars. Daarom kan een test hierop er nuttig zijn. Zoals u al weet,ontstaat er bij goed adresseren een bedieningssignaal op de kaart. Op de meeste kaarten is dit signaal uitgevoerd via een testpen (zie foto hieronder).
Wanneer u nu op de testpen een hoog-ohmige universeelmeter aansluit en gelijkspanning meet tegen aarde, dan kan met het volgende programma de kaartnummer instelling getest worden. Het programma doet in feite niets anders, dan de kaart met tussenpozen adresseren. De universeelmeter zal dan, als het kaartnummer goed ingesteld is, afwisselend een signaal van ongeveer 4 Volt en een signaal van ongeveer 0,2 Volt te zien geven. Geeft de universeelmeter alleen maar 0,2 Volt aan, dan is de kaartnummer instelling niet goed.
Programma kaartnummer test
Dit programma is in principe geschreven in MSX-basic. Het programma kan gemakkelijk aangepast worden voor andere computers, die op UNIFACE passen, door het adresgetal van de 'AB' variabele (=49) te veranderen. Voor de PC wordt dit getal 785 en voor P2000 wordt het 97. (zie tabel 1)
10 'Uniface kaartnummer test m.b.v. Voltmeter
20 '
30 'Geen DATAbus aansturing
40 'Aansturing Adresbus op adres 49 (AB=49)
50 '
60 '
70 AB=49: ' 49=MSX, 785=PC, 97= P2000 '
90 ' Opvragen kaartnummer plus beveiliging
100 ' Voor de MSX computer
110 CLS: INPUT" kaartnummer"; KA
120 IF KA<=0 OR KA>255 THEN CLS:PRINT"nummer Niet goed: Opnieuw": FOR N= 1TO5000:NEXT N:GOTO 110
140 'Waarschuwing
150 '
160 PRINT"De adresbus wordt nu intermitterend aangestuurd."
170 PRINT:PRINT"(Stoppen met CTRL-BREAK/STOP)"
180 '
190 ' Aansturing adresbus met geinverteerd kaartnummer
200 '
210 OUT AB,255-KA
220 FOR N=i TO 5:PLAY"a":NEXT N ' Wachtlus en geluidsignaal
230 OUT AB,O ' Aansturing adresbus met 0
240 FOR N= iTO 5:PLAY"c":NEXT N ' Wachtlus en geluidsignaal;
250 GOTO 210 ' Opnieuw
260 END
Statussignalen.
Er is nog een mogelijkheid om de goede instelling van het kaartnummer te testen. In dat geval hebt u geen Voltmeter nodig, maar wordt er gebruik gemaakt van het feit, dat de statuslijnen een terugmelding geven aan de computer bij het juist adresseren van een UNIFACE-kaart.
De bits 2,3,4 en 5 worden gemarkeerd, omdat deze per definitie '1' kunnen zijn. dit gebeurt met and 195.
Naam Status
DIGIN 1
DIGOUT-mono 2
DIGOUT-bi 2
ADC-8 0
DAC-8 DDAC-8 2
ADC-12 3
DDAC-12 2
EXPIO 0
Bandkabel.
De bandkabel is de "bus" van het UNIFACE-systeem. Deze 34-polige bus dient voor de adressering van maximaal 256 UNIFACE-applikatieprinten, voor het uitwisselen van de data met de applicaties, voor het doorgeven van de status aan de gebruikte computer, en veelal voor de voeding van de applicatie-printen met de +5 Volt afkomstig van de computer.
Aansluitingen.
pinnummer functie
1 ground
2 ground
3 t/m 10 Data-uit bit 0 t/m 7
11 statusbit 0
12 + 5 volt
13 t/m 16 Data-in bit 0 t/m 3
17 ground
18 ground
19 t/m 22 Data-in bit 4 t/m 7
23 + 5 volt
24 statusbit 1
25 t/m 32 Adres-bit 0 t/m 7
33 ground
34 ground
Het per ongeluk omkeren van de bandkabel leidt niet tot beschadigingen aan de computer of het UNIFACE printen, omdat de + 5 volt symmetrisch is uitgevoerd. Het UNIFACE-systeem functioneert dan echter niet.
---