minpic01.jpg

Bildschirm am Transputer-Link

Universelles `Debugging-Terminal� f�r Transputer-Netzwerke

Martin Pr�fer

Transputer-Netzwerk installiert, die Jobs ins Netz geschickt - und die geballte Rechenleistung ruht. Deadlock oder `Proze�verklemmung� macht das Debuggen echt paralleler, auf verschiedene Prozessoren verteilter Anwendungen zu einer Kunst, zumal die meisten Entwicklungsumgebungen dies nur unbefriedigend unterst�tzen. Ein Bildschirm, der sich an ein beliebiges freies Link des Transputer-Netzes anschlie�en l��t, erleichtert die Fehlersuche erheblich.

Unterthema: Logik kompakt verpackt
Unterthema: St�ckliste
Unterthema: Occam-Listing
Unterthema: Benutzung von PLACE AT

Die hier vorgestellte Interface-Hardware `Link-2-Monitor� (sprich: Link to Monitor, kurz L2M) setzt Daten von einem Transputer-Link in monochrome Bilder mit einem Video-Timing f�r `anspruchslose Monitore� um. Auf diese Art lassen sich - umwelt- und portemonnaiefreundlich - ausrangierte BAS-, TTL- oder gar TV-Monitore wieder einer sinnvollen Verwendung zuf�hren. Da bei diesem Projekt die Transputer-Links am `Geschwindigkeits-Anschlag� laufen m�ssen, mu�te f�r den verwendeten Link-Adapter-Chip ein `�berlappendes Acknowledge� entwickelt werden.

Nat�rlich sind Daten, die �ber ein Transputer-Link verschickt werden, nicht schon von sich aus Video-Daten; erst nachdem spezifische Transputer-Software die Link-Daten aufbereitet hat, bringt der L2M Text oder einfache Grafik auf den Monitor. Ein L2M-System ist folglich ein universelles Grafik-Terminal f�r Transputer, das nicht nur zum Debugging, sondern im weitesten Sinne zu einfacher Proze�visualisierung etwa in der Me�- und Regelungstechnik taugt.

Verknotet

Transputer beziehungsweise Transputer-Netze sind normalerweise als Subsysteme organisiert, die von einer Host-Maschine gesteuert werden. Da Meldungen auf eigens angelegten Kan�len (Channels) durch das Transputer-Netz zum Host weitergereicht werden, geht der direkte Kontakt zu den Netzknotenrechnern verloren. Aus dem Tritt geratene Netzknoten (Deadlock) k�nnen diesen Kommunikationskanal ebenso unterbrechen wie gest�rte Link-Verbindungen - damit bleiben dann auch die im Fehlerfall erwarteten Meldungen aus.

�ber das Link-2-Monitor-Interface kann man jeden Transputerknoten in einem Netzwerk, der einen Link-Anschlu� frei hat, einen Nebenjob als Debug-Terminal aufhalsen. Ob man dazu den L2M nun dauerhaft als Debug-Station an einem weit vom Host entfernten Transputer-Knoten laufen l��t oder nur zum `Abklappern� diverser Transputer-Knoten im Fehlerfall benutzt, steht dem Anwender frei. Auf jeden Fall kann er sich auch dann Aufschlu� �ber netzwerkinterne Zust�nde verschaffen, wenn einige oder gar alle Knoten vom Host aus nicht mehr erreichbar sind.

Problem Link-Datenrate

Die Ausgangsidee war, da� es mit der von Inmos als Standard vorgegebenen Link-Geschwindigkeit von 20 MBit/s m�glich sein m��te, ein Schwarzwei�-Videosignal mit einer Pixelrate von mindestens 5 MHz zu erzeugen. Das entspricht einer grafischen Aufl�sung von mindestens 256 � 256 Pixel auf Monitoren mit video-�hnlichen Synchronfrequenzen.

Die effektive Link-Datenrate zwischen zwei Transputern vom Typ T800 betr�gt bei hardwarem��ig eingestellten 20 MBit/s laut Inmos [1] 1,8 MByte/s. Diese hohe Netto-Datenrate wird erreicht, indem die Link-Interfaces der Prozessoren ein �berlappendes Acknowledge senden: schon beim ersten Bit eines empfangenen Datenbytes wird die Empfangsbest�tigung (Acknowledge) ausgesendet.

Kommuniziert ein Transputer jedoch mit einem Link-Adapter-Chip (wie dem IMS C011, der auf dem L2M-Board benutzt wird), sinkt die Nutzdatenrate auf weniger als 1 MByte/s (gemessen), da Link-Adapter kein Protokoll mit �berlappendem Acknowledge beherrschen. Im Hinblick auf den Overhead, den ein videogerechtes �bertragungsprotokoll erfordert, reicht diese Transferrate f�r die geplante Grafikausgabe nicht aus.

`�berraschendes� Acknowledge

Die Transferrate l��t sich aber deutlich erh�hen, indem man nicht das einfache Acknowledge des C011 benutzt, sondern mit Zusatz-Hardware ein eigenes, �berlappendes Acknowledge generiert. Die L2M-Hardware enth�lt ein Fifo (first in, first out) zum Zwischenspeichern der vom C011 empfangenen Bytes. Solange dieses Fifo leer ist, kann man die unmittelbare Abnahme eines weiteren Bytes garantieren und darf folglich ein fr�hzeitiges (�berlappendes) Acknowledge aussenden. Ist das Fifo voll, wird ein Acknowlege nach der Konvention des Link-Adapters erst dann erzeugt, wenn das Byte wirklich abgenommen wurde.

�ber diesen Umweg erreicht man 1,8 MByte/s Datentransferrate, was der optimalen Kommunikationsgeschwindigkeit zwischen zwei T800-Transputern entspricht. T414-Anwender profitieren davon �brigens ebenso: zwar kann ein T414 selbst kein �berlappendes Acknowledge erzeugen, wenn er Daten empf�ngt, jedoch sendet auch er deutlich schneller, wenn das Empf�nger-Link �berlappendes Acknowledge praktiziert.

Das verwendete Fifo bringt weiteren Gewinn: in Austastl�cken (w�hrend horizontaler oder vertikaler Synchronimpulse) wird keine Bildinformation ausgegeben, so da� in dieser Zeit das Fifo bereits auf Vorrat gef�llt werden kann.

Pixel-Protokoll

Damit die Video-Logik des L2M �bersendete Daten zu einem Monitorbild aufbereiten kann, m�ssen diese einer strengen Konvention folgen. Die Bits 0 bis 3 entsprechen jeweils vier auf dem Schirm aufeinanderfolgenden Pixeln (Bildpunkten). Vom Fifo gelangen diese Bilddaten zu einem Pixel-Multiplexer, der im Pixel-Takt das Videosignal auf den BAS-Mischer gibt, an dessen Ausgang das Videosignal mit etwa 1 Volt an 75 Ohm ansteht. Bit 4 bleibt ungenutzt, Bit 5 dient als Intensit�ts-Steuerung f�r die jeweils vier zum Paket geh�rigen Pixel.

Bit 6 signalisiert dem GAL LM2 zun�chst nur, da� die Pixel-Zeile keine weiteren darzustellenden Informationen mehr enth�lt. Hardwarem��ig wird sie jedoch noch nicht beendet, sondern erst wenn der Z�hler IC 5 (74HCT4040) seinen programmierten Endwert (siehe GAL-Listings) erreicht hat. So kann man schon Daten f�r die n�chste Zeile ans Fifo �bermitteln, w�hrend die Hardware die aktuelle Zeile zu Ende bringt; man spart so deutlich �bertragungskapazit�t.

Bit 7 schlie�lich generiert direkt einen Vertikal-Synchron-Impuls, der ein neues Bild einleitet. In Grenzen ist das Bildraster per Software programmierbar; weitergehende Ma�nahmen erfordern �nderungen an den GAL-Gleichungen. Bevor man sich aber daran wagt, sollte man das Gesamtsystem genau verstanden haben, beispielsweise um die Timing-Grenzen des Systems hinsichtlich der Link-Transferrate und des Pixel-Taktes (standardm��ig 6,6 MHz) einzuhalten.

minpic03.jpg

Ein Link-Adapter �bersetzt den seriellen Datenstrom vom Transputer `ins Parallele�. Vier Pixel, Intensit�t und die Synchron-Signale stekken in jedem Datenwort.

minpic02.jpg

Um die Link-Transferrate bei der TEK 4/8 auf 20 MBit/s erh�hen zu k�nnen, m�ssen die Anschl�sse LinkSpecial und Link123Special von Masse abgetrennt und auf Vcc gelegt werden.

minpic04.jpg

Ohne �berlappendes Acknowledge (oben) l�uft der Link-Transfer recht langsam ab: erst nach dem letzten Sende-Bit wird der Empfang quittiert.

Per Default sind Hardware und Betriebssoftware darauf eingerichtet, bei einem Pixeltakt von 6,6 MHz eine Aufl�sung von 256 � 256 Bildpunkten bei 50 Hz Bildwiederholfrequenz und 15 625 Hz Zeilenfrequenz zu liefern. Damit lassen sich vom einfachen BAS- und CGA-Monitor �ber alle fernseh-�hnlichen Monitore (diverse Home-Computer) bis hin zu Mehrnorm-Monitoren ein Menge Ger�te anschlie�en. Obwohl TTL-Monitore (MDA, Hercules) an sich 18,4 kHz Zeilenfrequenz bevorzugen, laufen auch einige direkt am L2M; andere m�ssen eventuell ein wenig `nach unten� abgeglichen werden. Maximal 320 � 290 Bildpunkte sind per Software-�nderung zu erreichen.

TEK-4/8-�nderungen

Die Transputer-Karte TEK 4/8, mit der L2M entwickelt und erprobt wurde, ist durch ihr Platinen-Layout auf eine Link-Datenrate von 10 MBit/s festgelegt. Die notwendige Datenrate von 20 MBit/s an den Links 1 bis 3 l��t sich leicht einstellen, indem man sowohl LinkSpecial (Pin A2 des Transputers) als auch Link123Special (Pin A4) auf Vcc (5 V) legt.

Als erstes trennt man die Verbindung der beiden Anschl�sse zu Masse (0 V) auf. Auf der Unterseite der TEK-4/8-Platine ist dazu die etwa 1 cm lange Leiterbahn, die Pin A2 und A4 verbindet, einmal in direkter N�he von A2 und ein zweites Mal unmittelbar an A4 zu unterbrechen (siehe Foto). Danach legt man die beiden Pins mit kurzen Dr�hten auf einen Anschlu� mit Vcc, beispielsweise Pin C2. Wenn Sie komfortabel zwischen 10 und 20 MBit/s hin- und herschalten wollen, k�nnen Sie A4 statt dessen auch auf eine Steckbr�cke (Jumper) f�hren. Ein ideales Dreier-Lochraster (Vcc, leer, Masse) daf�r findet sich zwischen dem Stecker von Link1 und Link2 (siehe Foto).

Einfach L�ten

Beim Best�cken der sehr luftig layouteten Platine gibt es nichts Besonderes zu beachten. F�r den Link-Anschlu� wurde ein Aalener Link-Stecker vorgesehen [3], so da� man L2M auch �ber l�ngere Link-Leitungen betreiben kann. Speziell bei der TEK 4/8, die nur TTL-Signale bietet, kann man dieses Interface auch �berbr�cken: IC 1 wird nicht best�ckt, sondern Pin 2 vom IC-1-Sockel wird direkt als Link-Eingang verwendet. IC 2 mu� wegen einiger Sonderaufgaben in der Schaltung bleiben; den Link-Ausgang des L2M kann man an Pin 7 von IC 2 abgreifen. notReset hingegen kann direkt mit Pin 6 des Aalener Link-Connectors verbunden werden.

LEDs zur Kontrolle

Die rote LED zeigt das Empty-Flag (EF), die gr�ne das Full-Flag (FF) des Fifos an; die gelbe ist nur eine Betriebsanzeige. Werden aus irgendeinem Grund die Videodaten nicht rechtzeitig zur Verf�gung gestellt, leuchtet die rote LED auf, gleichzeitig gibt es eine St�rung in der Bildanzeige. Bei ordnungsgem��em Betrieb sollte die gr�ne LED (FF) immer leuchten oder blinken, die rote hingegen dunkel bleiben.

Nebenbei wurde auch ein stabilisiertes Netzteil bereits auf die Hauptplatine gesetzt, das lediglich noch einen externen Trafo (oder ein Steckernetzteil) mit 9 bis 12 V und 300 mA erfordert. Alternativ (�ber Jumper JP2 w�hlbar) kann die Stromversorgung auch �ber den 5-V-Anschlu� des Aalener Link-Steckers bezogen werden.

Software

Der L2M hat keinen eigenen Bildspeicher. Um ein stehendes Bild anzeigen zu k�nnen, mu� der Transputer die Bilddaten 50mal in der Sekunde an den L2M senden. Dies belastet einen Transputer allerdings nur unwesentlich, denn nennenswerte CPU-Zeit erfordern nur die Prozesse, die zu neuen Ausgabedaten f�hren, sei es per Kommunikation mit einem anderen Transputer, sei es zum Beispiel bei der Ermittlung eigener Statusinformationen. Das zyklische Ansto�en des Ausgabeprozesses via Link hingegen erfordert kaum CPU-Zeit, und den eigentlichen Transfer wickelt der integrierte DMA-Controller des jeweiligen Link im Hintergrund ab.

minpic05.jpg

Leider geht�s nicht allein mit Link und Logik: ein Link-Adapter, ein Fifo, ein Z�hler und vier GALs sind n�tig, um stabile Bilder zu erzeugen.

minpic06.jpg

Das gro�z�gige Layout erleichtert den Aufbau der Schaltung. Zudem pa�t die Europa-Karte in viele Standard-Geh�use.

Problematisch ist nur, wenn auf dem `Video-Transputer� hochpriorisierte Prozesse die regelm��ige Datenausgabe zu sehr behindern, wenngleich der Hardware-Z�hler zumindest die horizontale Synchronisation stabil h�lt.

Die Betriebssoftware ist durchweg in Occam geschrieben, und zwar in erster Linie f�r das preiswerte OCS-System (Vertrieb durch eMedia, Hannover). Sie wurde sowohl auf T800 als auch auf T414 getestet und l�uft mit geringen Modifikationen (im File-I/O) auch unter MTOOL oder Toolset. Die Programme nebst Demos sind allerdings so umfangreich, da� wir hier nur einige Routinen mit interessanten Occam-Aspekten wiedergeben (die vollst�ndige Software gibt�s auf Sammeldiskette beziehungsweise per Mailbox).

Der Hauptproze� (DISPLAY.L2M) auf dem `Video-Transputer� gibt entweder Grafikdaten oder mit einem (in der Software integrierten) Zeichen-Generator erzeugte Textmeldungen auf dem Bildschirm aus. Er ist seinerseits in einen High-Level- und einen Low-Level-Interpreter unterteilt. Der High-Level-Interpreter empf�ngt Befehle wie L2M.CIRCLE oder L2M.STRING und sendet seinerseits Grundbefehle wie L2M.LINE oder L2M.CHAR an den Low-Level-Interpreter. So wird sichergestellt, da� die einzelnen Befehle zur Bildmanipulation kurz sind und die kontinuierliche Bildausgabe nicht behindern.

Occam-gerecht ...

Zur Ausgabe der Daten an das Interface seien zwei grundverschiedene Strategien vorgestellt. Die erste wartet in einem PRI-ALT-Konstrukt auf den Zeitpunkt, an dem wieder mit der Ausgabe eines neuen Bildes begonnen werden mu�. Ist die Zeit noch nicht erreicht, werden Befehle vom HL-Proze� entgegengenommen und im LL-Proze� ausgef�hrt. Dies ist der in Occam vorgesehene `ordentliche� Weg.

... oder schnell

Eine riskantere, der Funktionsweise einer echten Video-Karte aber �hnlichere und vor allem schnellere Variante besteht in der gemeinsamen Nutzung eines `Bildspeichers� durch zwei parallele Prozesse, wobei der eine die Daten eintr�gt, der andere sie zur Anzeige transportiert. Das widerspricht aber v�llig Occams strengem Lokalit�tsprinzip (jeder Proze� hat nur lokale Daten, `globale Daten� m�ssen synchronisiert �ber vereinbarte Kan�le ausgetauscht werden).

Dar�ber hinaus kennt Occam kein Konstrukt wie das malloc() von C, mit dem man sich einen Speicherbereich reservieren lassen kann. So mu� man mit seinem Compiler selbst `aushandeln�, wo ein solcher Speicherbereich liegen k�nnte, den man dann auch nur durch absolute Festlegung (PLACE AT) zwei parallelen Prozessen zug�nglich machen kann. Eine solch schnelle L�sung ist zwar f�r allerlei zeitkritische Transputer-Programmierung n�tzlich, sie birgt aber diverse Gefahren: unter anderem wissen fremde Prozesse nichts von dem `mi�brauchten� Speicherbereich und k�nnten damit `heftig interferieren�. (gr)

Literatur

[1] Inmos/SGS-Thomson, The Transputer Databook, 2nd Edition 1989, Bristol

[2] M. Helzle, U. Lechner, und Heinz Ebert, Transputer-Board TEK 4/8, Transputer-PC-Steckkarte im Selbstbau, c't 10 bis 12/87

[3] H. Broer, D. Emde, G. Pogrzeba, R. Schmidt-Dannert, Transputer-B�ume werden wahr, Teil 2, c't 12/88, S. 252 ff.

[4] M. Pr�fer, J. Mundhenke, Transputer-Debugging mit Link-2-Monitor, Tagungsband TAT�91, Parallele Datenverarbeitung mit dem Transputer, R. Grebe, M. Baumann (Hrsg.), Springer Verlag, 1992

Kasten 1


Logik kompakt verpackt

Der gr��te Teil der Schaltung verbirgt sich in vier GALs. GAL LM1 (IC 7) generiert aus dem Stand des Z�hlers IC5 sowohl einen Reset f�r den Z�hler (RESET_X) als auch das H-Sync-Signal. Aus Bit 5 wird das Intensit�tssignal, aus Bit 7 das V-Sync-Signal abgeleitet. Das Q_ackn-Signal f�r den Link-Adapter wird erst dann ausgegeben, wenn das Fifo (IC 6) nicht mehr voll ist. Der C011 (IC 3) nimmt daraufhin das Q_valid selbst zur�ck.

TITLE     IC 7 = LM_1_GAL
CHIP      GAL3 PALCE20V8

;PINS
;1    2    3   4   5   6       7        8        9      10   11    12
 CLK  x4   x5  x6  x7  x8      /READ    BIT5     SER_IN QVAL Reset GND

;13   14   15  16  17  18      19       20       21     22   23    24
 /OE  /FF  nc  /H  /V  RESET_X HELL_BIT HELL_SER QACK   /WR  BIT7  VCC

EQUATIONS
MINIMIZE_ON

;Zaehlerstellung fuer Reset: Anfang der neuen Bildzeile ist erreicht
RESET_X := x8 * /x7 * x6 * /x5 * /x4

;Zaehlerstellungen, bei der H-Sync auszugeben ist
H := x8 * /x7 * /x6 * /x5 * x4

;V-Sync setzen, wenn beim Einlesen Bit7 des Datenbytes gesetzt ist,
; sonst Halten des Zustandes
V :=  READ * BIT7   +   /READ * V

;Merker, ob Pixel dieses Datenworts heller dargestellt werden sollen
; Hell_Bit setzen, wenn beim Einlesen Bit5 des Datenbytes gesetzt ist,
; sonst Halten des Zustandes
HELL_BIT :=  READ * BIT5   +   /READ * HELL_BIT

;Hell-Information ausgeben bei gesetztem Hell-Merker und
;  eingeschaltetem Pixel
HELL_SER = HELL_BIT * SER_IN

;Fifo-Steuerung
; Acknowledge fuer Link-Adapter
; Setzen, wenn Daten da (QVAL) und Fifo nicht ganz voll
; Halten, bis Linkadapter Ackn erkannt hat
; Write fuer Fifo generieren, solange Daten gueltig sind
QACK    := WR + /FF * QVAL
WR      = QVAL * QACK
GAL LM2 (IC 4) enth�lt die Ablaufsteuerung (in Form einer State-Machine) und den Videodaten-Multiplexer, der die 4 Pixel, die in einem Byte �bertragen werden, nacheinander ausgibt. Ausgangssignale sind READ (liest das n�chste Byte aus dem Fifo) und SER (serieller Pixelstrom zum Monitor).

TITLE     IC 4 = LM_2_GAL
CHIP      GAL3 PALCE16V8

;PINS
; 1    2        3      4      5      6     7     8     9    10
  CLK  RESET_X  BIT6   RESET  BIT3   BIT2  BIT1  BIT0  nc   GND

; 11   12       13     14     15     16    17    18    19   20
 /OE   SHIFT    /READ  ST0    H_BIT  SER   FF0   FF1   FF2  VCC

STATE
MOORE_MACHINE

;Transitions
; WARTE ist der allgemeine Ruhezustand
; WARTE wartet auf Reset_x, d.h., eine neue Zeile ist auszugeben

WARTE     := 2VORLESEN -> VORLESEN ; Warten, bis neue Zeile beginnt
          +->WARTE

VORLESEN  := VCC -> EINLESEN       ; Read fuer Fifo setzen
EINLESEN  := VCC -> SHIFT1         ; Daten vom Fifo uebernehmen
                                   ;  Bit 3 als Pixel ausgeben
SHIFT1    := VCC -> SHIFT2         ; Bit 2 als Pixel ausgeben
SHIFT2    := 2SHIFT3H -> SHIFT3_H  ; Read fuer Fifo ruecksetzen
          +->SHIFT3_NH             ; Bit 1 als Pixel ausgeben
                                   ;  Bei Hsync in Vor-Wartezustand gehen
                                   ;  sonst neues Byte aus Fifo lesen
SHIFT3_H  := VCC -> WARTE          ; Bit 0 als Pixel ausgeben
                                   ;  danach in Wartezust. auf neue Zeile
SHIFT3_NH := VCC -> EINLESEN       ; Bit 0 als Pixel ausgeben
                                   ;  Danach neu einlesen, Read fuer Fifo
                                   ;  ist wieder gesetzt
; State definition
; READ zugleich Lese-Signal fuer das Fifo

WARTE      = /READ * /SHIFT * /ST0
VORLESEN   =  READ * /SHIFT * /ST0
EINLESEN   =  READ *  SHIFT * /ST0
SHIFT1     =  READ *  SHIFT *  ST0
SHIFT2     = /READ *  SHIFT * /ST0
SHIFT3_H   = /READ *  SHIFT *  ST0
SHIFT3_NH  =  READ * /SHIFT *  ST0
Conditions

2VORLESEN   = RESET_X   ; Neue Zeile beginnt mit Reset_X
2SHIFT3H    = H_BIT     ; Ende der Aktivitaet, wenn in Byte H-Bit gesetzt

EQUATIONS
MINIMIZE_ON

; Schieberegister fuer Pixel-Daten
SER := READ * /SHIFT * BIT3 + SHIFT * FF2   ; Laden + Schieben
FF2 := READ * /SHIFT * BIT2 + SHIFT * FF1   ; Laden + Schieben
FF1 := READ * /SHIFT * BIT1 + SHIFT * FF0   ; Laden + Schieben
FF0 := READ * /SHIFT * BIT0                 ; Laden

; H-Sync setzen, wenn Daten gelesen werden, sonst Halten des Zustands
H_BIT :=  READ * BIT6  +  /READ * H_BIT
In LM3 (IC 8) sind zwei unabh�ngige State-Machines enthalten. Da die Syntax des verwendeten Assemblers aber nur eine State-Machine zul��t, ist die zweite in Form von Gleichungen angegeben, die vorher �bersetzt wurden. Die erste State-Machine generiert das �berlappende Acknowledge, w�hrend die zweite in einem Z�hler auf das Ende eines Bytes wartet. Das unterdr�ckt mehrere Best�tigungen f�r ein Byte.

TITLE     IC 8 = LM_3_GAL
CHIP      GAL3 PALCE16V8

;PINS
; 1    2           3     4    5   6   7   8   9      10
  CLK  LinkIn      Qack  /FF  nc  nc  nc  nc  Reset  GND

; 11   12          13    14   15  16  17  18  19     20
  /OE  LinkOutNew  ST0   nc   C0  C1  C2  C3  nc     VCC

STATE
MOORE_MACHINE
;Transitions
; WAIT ist der allgemeine Ruhezustand
; COUNTn Zustaende des Zaehlers f�r die Wartezeit bis zur Freigabe
; des vorgezogenen (ueberlappenden) Acknowledge

WAIT        := nBitsWaited  -> PRETRIGGER
            +->WAIT

PRETRIGGER  := ReadyForACK  -> ACKout
            +  Reset        -> WAIT
            +->PRETRIGGER

ACKout      := VCC          -> WAIT
DoNotUse    := VCC          -> WAIT

; State definition

WAIT       = /LinkOutNew  * /ST0
PRETRIGGER = /LinkOutNew  *  ST0
ACKout     =  LinkOutNew  *  ST0
DoNotUse   =  LinkOutNew  * /ST0

Conditions

nBitsWaited = /C3 *  C2 *  /C1 *  C0 * /Reset ;erst mal 5 Bits gewartet
ReadyForACK = /FF * /Reset

EQUATIONS
MINIMIZE_ON
;  Zaehler bis 10, der auf LinkIn startet

     C0  :=    C2 *             /C0 * /Reset
         +     C3 *       /C1 * /C0 * /Reset
         +    /C3 * /C2 * /C1 * /C0 * LinkIn
         +    /C3 *        C1 * /C0 * /Reset
     C1  :=   /C3 *        C1 * /C0 * /Reset
         +                /C1 *  C0 * /Reset
     C2  :=  /Reset *  C2 *       /C0
         +   /Reset * /C2 *  C1 *  C0
         +   /Reset *  C2 * /C1
     C3  :=  /Reset *  C2 *  C1 *  C0
         +   /Reset *  C3 * /C1
LM4 (IC 9) leitet den Pixeltakt aus dem 20-MHz-Takt-Oszillator (Q 1) ab. Es werden sowohl 6,6 (default) als auch 10 MHz erzeugt (mit JP 3 w�hlbar). Achtung: Damit l��t sich die Bildbreite ver�ndern, die Zeit f�r eine Videozeile wird davon nicht beeinflu�t. Zus�tzlich stellt LM4 den 5-MHz-Takt f�r den Link-Adapter bereit.

TITLE     IC 9 = LM_4_GAL
CHIP      GAL3 PALCE16V8

;PINS
; 1     2      3     4     5     6     7     8     9    10
 CLK   nc     nc    nc    nc    nc    nc    nc    nc   GND

; 11   12     13    14    15    16    17    18    19    20
 /OE   C0    /C1    D1    D0    nc    nc    nc    nc   VCC

STATE
MOORE_MACHINE
; Transitions

COUNT0    := VCC -> COUNT1
COUNT1    := VCC -> COUNT2
COUNT2    := VCC -> COUNT0

; State definition

COUNT0     = /C1 * /C0
COUNT1     = /C1 *  C0
COUNT2     =  C1 * /C0

Conditions
; nix

EQUATIONS
MINIMIZE_ON

D0 := /D0                      ;D steht f�r Divide
D1 :=  D0 * /D1 + /D0 *  D1
Kasten 2

St�ckliste

Halbleiter

IC1    AM26LS32, Diff.-Empf�nger
IC2    AM26LS31, Diff.-Treiber
IC3    IMSC011, Link-Adapter
IC4    GAL 16V8 (LM2)
IC5    74HCT4040, Z�hler
IC6    IDT7202, Fifo
IC7    GAL 20V8 (LM1)
IC8    GAL 16V8 (LM3)
IC9    GAL 16V8 (LM4)
UREG   7805, Spannungsregler
Q1     20-MHz-Quarz-Oszillator
TR1    BC547B (NPN)
GLEICH Br�ckengleichrichter
D1, D2 1N4148, Si-Diode
GELB   LED gelb, 3 mm
GRUEN  LED gr�n, 3 mm
ROT    LED rot, 3 mm
Kondensatoren

C1, C2, C5 1�F/35V, Tantal
C3         150pF, ker.
C4         470�F/25V
C6         100nF, ker.
Widerst�nde 0,25 W

R1, R2     1K0
R3, R13    100R
R4         10K
R5         100K
R6, R15    330R
R7, R8, R9 2K2
R10, R11   2K7
R12        8K2
R14        75R
R16        470R
Sonstiges

JP1, JP2,JP3 Steckpfosten 3polig
J1,J2        9pol Sub-D weiblich
J3           Cinch-Buchse (Printmontage)
J7           Fremdspannungsbuchse
             (DIN45323, Printmontage)
Platine Europa-Format

Kasten 3


In `sauberem� Occam benutzt man brav reine Kanalkommunikation und ein PRI-ALT-Konstrukt f�r Bearbeitung und Ausgabe des Bildinhaltes.

      WHILE TRUE
        BYTE Befehl:
        PRI ALT
          zeit ? AFTER jetzt PLUS BEFEHLS.ZEIT
            SEQ
              to.L2M ! Bildspeicher1
              zeit ? jetzt
          Command.in ? Befehl
            BYTE Char, Farbe, Richtung:
            INT  x, y, x.Ziel, y.Ziel:
            IF
              Befehl = CLEAR.SCREEN
                Clear.screen()
              Befehl = ...
                ...
                ...
              TRUE
                SKIP
Kasten 4
Schneller, aber eigentlich `nicht statthaft�: mittels PLACE AT wird ein `Bildspeicher� eingerichtet, auf den zwei parallele Prozesse gemeinsam zugreifen.

PROC l2m.sender(CHAN OF ANY to.L2M)

  #INCLUDE "L2M_VALS.INC"

  [((PIC.SIZE + VORSPANN) + NACHSPANN) + VSYNC.LAENGE] BYTE Bild:
  PLACE Bild AT BILDADRESSE:  -- diese Stelle ist nicht astrein

  WHILE TRUE
    to.L2M ! Bild
:

PROC LL.Interpreter(CHAN OF ANY Command.in, Response.out)

  #INCLUDE "L2M_VALS.INC"

  [((PIC.SIZE + VORSPANN) + NACHSPANN) + VSYNC.LAENGE] BYTE Bildspeicher:
  PLACE Bildspeicher AT BILDADRESSE:  -- diese Stelle ist nicht astrein

  WHILE TRUE
    SEQ
      Command.in ? Befehl
      IF
        Befehl = CLEAR.LINE
          SEQ
            Command.in ? y
            Clear.line(y)
        Befehl = ...
          ...
          ...
        TRUE
          SKIP
:

  PLACE to.L2M AT 1:
  PRI PAR
    l2m.sender(to.L2M)
    PAR
      user.program(from.link, to.link, hl.to.user, user.to.hl)
      HL.Interpreter(user.to.hl, hl.to.user, hl.to.ll, ll.to.hl)
      LL.Interpreter(hl.to.ll, ll.to.hl)
: