Galassembler fuer 16V8 und 20V8 Gals. Es handelt sich hier um ein sehr altes Projekt (es entstand Anfang der 90er Jahre) -- man moege mir den "ungewoehlichen" Programmierstil nachsehen! Das Programm entstand auf einem Atari ST und wurde irgendwann Mitte der 90er nach Linux portiert. Die Syntax ist relativ einfach -- der interessierte Benutzer moege sich die Beispiele im Verzeichnis "beispiele" zu Gemuete fuehren... Verzeichnisstruktur: galasm.txt........diese Beschreibung galasm.err........Fehlermeldungen, werden mit "make install" installiert beispiele/........5 Beispiele mit Jedec- und Protokolldatei. source/...........der Quellcode Mit "make" sollte sich alles compilieren lassen, ggf. sollten zuvor die Pfade im Makefile angepasst werden. ****************************************************************************** * Programm * * GGGGG ll AA * GG G l AA A * GG aaaa l AA A sss mmm mm * GG GGGG a l AA A s m m m * GG G aaaaa l AAAAAAAA sss m m m * GG G a a l AA A s m m m * GGGGG aaaaa lll AA A sss m m m * * * der Logic-Compiler / -Assembler zur Erstellung einer * JEDEC-Datei fuer die GAL-Programmierung. * * * Programmstruktur: * * Headerdateien: * GalAsm.H Makros und Def. der Variablentypen * GalGlVar.H Deklaration der globalen Variablen * HilfFktn.H Deklaration der Hilfsfunktionen * PrtError.H Deklaration von PrintErrorText() * GetGal.H Deklaration von GetGal() * Parser.H Deklaration von Parser() * ChkArch.H Deklaration von ChkArch() * PinInSp.H Deklaration von PinInSpalte() * FuseMap.H Deklaration von FuseMap() * Protokol.H Deklaration von Protokoll() * * C-Module: GalAsm.C Hauptprogramm * GalGlVar.C Definition der globalen Variablen * HilfFktn.C Definition der Hilfsfunktionen * PrtError.C Definition von PrintErrorText() * GetGal.C Definition von GetGal() * Parser2.C Definition von Parser() * ChkArch2.C Definition von ChkArch() * PinInSp.C Definition von PinInSpalte() * FuseMap.C Definition von FuseMap() * Protokol.C Definition von Protokoll() * **************************************************************************** AA ll ii t AA A l t AA A n nn l eeee ii ttt u u n nn gggg AA A nn n l e e i t u u nn n g g AAAAAAAA n n l eeeee i t u u n n g g AA A n n l e i t u u n n ggggg AA A n n lll eeeee iii tt uuuu n n g ggggg ===================================================== Programmaufruf: -------------- GalAsm [] [Parameter] : Name der Eingabedatei (MMI-Format). Falls keine Extension angegeben wird, so haengt das Programm automatisch die Extension .EQN an den uebergebenen Dateinamen an. : Name der Ausgabedatei (optional), bekommt die Extension .Jed angehaengt. Falls kein Name angegeben wird, Name der Eingabedatei. Format der Eingabedatei: ----------------------- ASCII-Datei nach MMI. (Siehe c't 12/89 Seite 383 und folgende) 1. Zeile: GAL-Typ (bisher unterstuetzt: 16V8 und 20V8) 2.,3. und 4. Zeile: Kommentar, wird in die Ausgabedatei uebernommen. Ueblicherweise 2. Zeile: Autor und Datum 3. Zeile: Verwendungszweck 4. Zeile: Firma,Stadt,Land usw. Nun koennen die beiden Architekturkontrollbits Syn und AC0, sowie das Kontrollbyte AC1(n) angegeben werden. Form: [Syn = X] wobei X entweder 0 oder 1 ist. [AC0 = X] [AC1(n) = X,X,X,X,X,X,X,X] Das erste AC1(n)-Bit steuert die erste OLMC (Pin 19 bei Gal 16V8, Pin 23 bei Gal 20v8). Werden die Kontrollbits/-byte nicht oder nicht vollstaen- dig angegeben, so ermittelt das Programm die fehlenden Bits/Bytes nach folgenden Prioritaeten: 1. Clock und/oder OE auf Matrix fuehren -> Syn-Bit 2.a. Registered- oder Tristate-Ausgaenge -> AC0 = 1 2.b. Rueckkopplg. der aeusseren OLMCs -> AC0 = 0 2.c. Rueckkopplg. der inneren OLMCs -> AC0 = 1 2.d. AC0 = 0 falls AC0 == 1 3.a. Ausg.n == Registered-Ausg? -> AC1(n)=0 3.b. Ausg.n == Tristate m. Prod.'Freig.? -> AC1(n)=1 3.c. Ausg.n == Tristate m. OE-Freig.? -> AC1(n)=0 3.d. Sonst -> AC1(n)=1 falls AC0 == 0 3.a. Ausg.n == Niederohmig? -> AC1(n)=0 3.b. Sonst -> AC1(n)=1 Folgende Zeilen: Belegung der Anschluesse mit symbolischen Namen. Die Namen muessen durch Leerzeichen getrennt werden. Sie duerfen nur acht signifikante Zeichen fuehren. Bei negativer Logik (low-active) muss ein Nicht-Operator (/) vorangestellt werden. Die Namen werden in der Reihenfolge der zugehoerigenPinnummern, be- ginnend mit Pin 1 angegeben. Masse (Gnd) und Versorgungsspannung (Vcc) muessen angegeben werden. Anschliessend die logischen Gleichungen in folgender Form: 1. fuer normale Gatter: = 2. fuer Tri-State-Ausgaenge: IF()= 3. fuer Registerausgaenge (gelatchte Ausgaenge): := : Pin-Name, ggf. mit vorangeststelltem Nicht-Operator (/), acht signifikante Stellen. : Ein oder mehrere Namen, verknuepft mit dem Und-Operator (*). IF: Bedingtes Tri-State. Wenn das in Klammern angegebene Produkt logisch wahr ist, wird der Ausgang durchgeschaltet, ansonsten ist er hochohmig (bzw. Eingang). Fehlt eine notwendige Tri-State-Bedingung, nimmt der Assembler IF(Vcc), also logisch wahr an. : Folge von Produkten, logisch mit dem Oder-Operator (+) verknuepft. (Disjunktive Normalform). Kommentare duerfen in jeder beliebigen Zeile stehen, muessen dann aber mit einem Semikolon (;) beginnen. Der Rest der Zeile wird daraufhin ignoriert. Fuehrende Leerzeichen sowie Leerzeilen werden ignoriert! Format der Ausgabedateien: ------------------------- 1. JEDEC-Datei Die JEDEC-Datei ist eine reine ASCII-Datei. Sie enthaelt die gesamte FUSE-Map der Logik-Matrix, die Kontollbits der OLMCs, die Produktterm- freigabebits, Kommentarbits und das Security-Bit im JEDEC-Format. Die Datei kann mit allen Gal-Brennern, die das JEDEC-Format lesen koennen, in ein entsprechendes Gal gebrannt werden. Die 64 Kommentarbits (electronic signature) des Gals werden auf '1' gesetzt. Die Security-Fuse wird als nicht zu brennen markiert (G1*). Nicht benoetigte Sicherungen werden nicht gebrannt (F1*). Nicht benoetigte Produktzeilen werden ueber die Produkttermfreigabebits gesperrt. Die einzelnen Zellengruppen werden durch Kommentare erlaeutert. 2. Dokumentations- bzw. Protokolldatei In der Protokolldatei werden Pinbelegung und Konfiguration der Ein- / Ausgaenge des PLD angegeben. Es handelt sich ebenfalls um eine reine ASCII-Datei. Sie traegt den Namen der Eingabedatei mit der Extension .DOC. Hinweis: ------- Das Programm benoetigt die ASCII-Datei GalAsm.Err zur Erklaerung der Fehlermeldungen. Fuer jede Fehlernummer kann ein bis zu 10 Zeilen langer Text angegeben werden. Jeder Text wird mit #F# gekennzeichnet, wobei die zugeh. Fehlernummer darstellt. Die Fehlernummern muessen in der Fehlertextdatei nicht geordnet sein. Aenderungen sind mit jedem ASCII-Editor moeglich. Sind die Texte laenger als 10 Zeilen, werden alle Zeilen nach der zehnten ignoriert. Existiert zu einer aufgetretenen Fehlernummer kein Fehlertext, so erfolgt eine entsprechende Meldung. Gibt es zu einer Fehlermeldung mehrere Eintraege, so wird der erste Eintrag der entsprechenden Fehlernummer aus der Datei angezeigt. Auch in der Fehlertextdatei sind Kommentare zugelassen. Sie muessen hier mit einem Prozentzeichen (%) beginnen. Der Zeilenrest nach einem Kommentarzeichen wird ignoriert. Falls sich die Fehlertextdatei GalAsm.Err nicht im aktuellen Verzeichnis steht, sucht das Programm in den Verzeichnissen, die in die Environment- variable GALASM eingetragen sind (z.B. Set GALASM=c:\Gal;c:\Gal\GalAsm). Vorsicht: Die Variable muss in Grossbuchstaben geschrieben werden! Existiert diese Environmentvariable nicht, oder wird die Datei in keinem der angegebenen Verzeichnissen gefunden, so sucht das Programm in den Verzeichnissen, die in der Environmentvariablen PATH angegeben sind. Fuehrt auch diese Suche nicht zum Erfolg, so erfolgt ein entsprechender Hinweis an den/die Benutzer/in und das Programm wird fortgesetzt. Volker Bosch volker.bosch(at)z.zgs.de