
#ifndef	 EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef	 __STDIO_H
#include <stdio.h>
#endif


#define		GAL16V8		1		/*GAL-Typ*/
#define		GAL20V8		2
#define		GAL16V8A	3
#define		GAL20V8A	4
#define		UNKNOWN		5
#define		NOT_SPECIFIED	6

#define		IC1		3		/*IC-Nummern*/
#define		IC2		-1		/*IC2 nur für Elektor- und*/
#define		IC3		0		/*Maxon-GAL-Brenner*/
#define		IC4		1
#define		IC5		2
#define		IC6		0
#define		IC7		1
#define		IC10		10

#define		ON		1		/*LED-Status*/
#define		OFF		0

#define		YES		1
#define		NO		0

#define		PROG		1		/*GAL-Modus*/
#define		VERIFY		0

#define		LOW		0
#define		HIGH		1
#define		EINGANG		0
#define		AUSGANG		1

#define		CONT_REQ	0		/* Requester-Typen*/
#define		INFO_REQ	1
#define		ERR_REQ		2
#define		GALTYPE_REQ	3
#define		ATYPE_REQ	4
#define		ERASE_REQ	5

						/*Dauer des STR-Impulses in*/
#define		PROG_TIME1	80000L		/*Mikrosekunden für pro-*/
#define		PROG_TIME2	10000L		/*grammieren*/
#define		PROG_TIME3	40000L
#define		PROG_TIME4	100000L
#define		VERIFY_TIME	5L		/*lesen*/
#define		BULK_TIME	100000L		/*Bulk-Erase*/


						/*Spannung*/
#define		V12_00		4		/*12.00 Volt*/
#define		V14_00		3		/*14.00 Volt*/
#define		V14_50		2		/*14.50 Volt*/
#define		V15_75		1		/*15.75 Volt*/
#define		V16_50		0		/*16.50 Volt*/



#define		COPYGAL		1		/*für ProgJedecToGAL-Routine*/
#define		PROGGAL		2

						/*Voreinstellungen*/
struct	Configuration { BYTE GALType;		/*GALType = 16V8 od. 20V8*/
			BYTE AType;		/*TRUE=A; FALSE=normal*/
			BYTE AutoAType;		/*autom. A-Typ-Erkennung*/
			BYTE GALTypeReq;	/*TRUE=Requester für GAL-Typ*/
			BYTE GenJedec;		/*Jedec-File erstellen?*/
			BYTE GenFuse;		/*Fuse-File erstellen?*/
			BYTE GenChip;		/*Chip-File erstellen?*/
			BYTE GenPin;		/*Pin-File erstellen?*/
			BYTE AutoSave;		/*automatisch sichern?*/
			BYTE AutoGAL;		/*autom. GAL eistellen?*/
			BYTE ProgEmptyTest;	/*Leertest vor Prog.GAL*/
			BYTE ProgVerify;	/*Verify nach Prog.GAL*/
			BYTE CopyEmptyTest;	/*Leertest vor Copy-GAL*/
			BYTE CopyVerify;	/*Verify nach Copy-GAL*/
			BYTE EraseEmptyTest;	/*Leertest nach GAL-Löschen*/
			BYTE JedecSecBit;	/*Security-Bit des Jedec*/
			BYTE JedecFuseChk;	/*Fuse-Checksumme des Jedec*/
			BYTE JedecFileChk;	/*File-Checksumme des Jedec*/
		      };



struct	JedecStruct { BYTE GALLogic[2560];	/*max. Größe der Fuse-Mat.*/
		      BYTE GALXOR  [8];		/*XOR-Bits*/
		      BYTE GALSig  [64];	/*Signatur*/
		      BYTE GALAC1  [8];		/*AC1-Bits*/
		      BYTE GALPT   [64];	/*Produkttermfreigabe*/
		      BYTE GALSYN;		/*SYN-Bit*/
		      BYTE GALAC0;	};	/*AC0-Bit*/


					/*GAL16V8*/
#define	LOGIC16		0		/* Positionen der Bits in der*/
#define	XOR16		2048		/* Jedec-Datei*/
#define SIG16		2056
#define AC116		2120
#define PT16		2128
#define SYN16		2192
#define AC016		2193
#define NUMOFFUSES16	2194
					/*GAL20V8*/
#define	LOGIC20		0		/* Positionen der Bits in der*/
#define	XOR20		2560		/* Jedec-Datei*/
#define SIG20		2568
#define AC120		2632
#define PT20		2640
#define SYN20		2704
#define AC020		2705
#define NUMOFFUSES20	2706

#define LOGIC16_SIZE	2048		/*Anzahl der Bits für XOR usw.*/
#define LOGIC20_SIZE	2560
#define ROW_SIZE	64
#define XOR_SIZE	8
#define SIG_SIZE	64
#define AC1_SIZE	8
#define PT_SIZE		64
#define SYN_SIZE	1
#define AC0_SIZE	1
#define ACW_SIZE	82		/*Architektur-Kontroll-Wort*/

#define	MAX_FUSE_ADR16	31		/*Adressen der GALs (für Fan-Post)*/
#define	SIG_ADR16	32
#define	MAX_FUSE_ADR20	39
#define	SIG_ADR20	40
#define ACW_ADR		60
#define SECURITY_ADR	61
#define ERASE_ADR	63

#define MAX_OR		8		/*max. Anzahl der OR-Verknüpfungen*/

/*GAL-Assembler*/


					/*Konstanten für den Assembler*/
#define	ASSEMBLER	0		/*ganzes File assemblieren->Jedec*/
#define OPTIMIZER	1		/*nur bis zu den Gleichungen assem-*/
					/*blieren (Optimizer)*/

struct	Pin		{ BYTE p_Neg;		/*Pin negiert?*/
			  BYTE p_Pin; };	/*Pinnummer*/


struct	GAL_OLMC	{ BYTE Active;		/*Ausgang negiert?*/
		  	  BYTE PinType;		/*Eingang, komb. Ausgang...*/
		  	  BYTE TriCon;		/*Tri.-Kontrolle angegeben?*/
			  BYTE FeedBack; };	/*Ausgang mit Rückkopplung?*/

#define ACTIVE_LOW	0			/*Pin High-aktiv*/
#define ACTIVE_HIGH	1			/*Pin Low-aktiv*/
					/*PinType: */
#define NOTUSED		0			/*Pin (noch) nicht verwendet*/
#define NOTCON		0			/*Pin nicht verwendet*/
#define INPUT		2			/*Eingang*/
#define COMOUT		3			/*kombinatorischer Ausgang*/
#define TRIOUT		4			/*Tristate-Ausgang*/
#define REGOUT		5			/*Register-Ausgang*/
#define COM_TRI_OUT	6			/*entweder Tri. oder komb. Ausgang*/
					/*TriCon:*/
#define NO_TRICON	0			/*kein Tri.-Kontrolle angegeben*/
#define TRICON		1			/*Tri.-Kontrolle angegeben*/
#define TRI_VCC		2			/*ständige Tristate-Freigabe*/
#define TRI_GND		3			/*ständig hochohmig*/
#define TRI_PRO		4			/*Tristate-Kontrolle über Produktterm*/


#define	NC_PIN		30

#define MODE1		1		/*Betriebsmodi (SYN,AC0)*/
#define MODE2		2
#define MODE3		3


					/*Konstanten für den Optimizer*/
#define	NEGATION	0x80		/*Bit 7 = 1 wenn '/' vor Pinnamen*/
#define EQUASKIP	0xFE		/*wird nicht beachtet*/
#define	EQUAEND		0xFF		/*Ende einer Gleichung*/
#define EQUASEND	0x00		/*Ende aller Gleichungen, bis zum*/
					/*DESCRIPTION*/

#define	ENTRY_SIZE	256		/*Anzahl der Einträge pro Puffer*/

#define SIZE_OF_EQUASTRING 80
					/*Aus der Struktur Buffer wird*/
					/*eine verkettete Liste aufgebaut,*/
					/*in deren "Entries" entsprechende*/
					/*Daten abgelegt werden*/
struct	Buffer	{ struct Buffer *Next;
		  struct Buffer *Prev;
		  UBYTE  Entries[ENTRY_SIZE]; /*hier werden z.B. die codier-*/
		};			      /*ten Gleichungen abgelegt*/
						    
					/*diese Struktur wird für Parameter*/
					/*und für Ergebnisse von Funktionen*/
					/*benötigt; sie enthält alle Infor-*/
					/*mationen über den aktuellen Puffer*/
					/*(siehe Equations-Struktur*/
struct	ActBuffer  { struct Buffer *ThisBuff;  /*Zeiger auf aktuellen Puffer*/
		     UBYTE	 *Entry;       /*Zeiger in das Entries-Feld*/
		     UBYTE	 *BuffEnd;     /*Zeiger auf Pufferende*/
		   };






/* GALer.c */
void	ExecuteMenu ();
void	PAL_NTSC ();
int	GetParPort ();
void	FreeParPort ();
int	GetTimer ();
void	FreeTimer ();
void	WaitForTimer ();
void	OpenStuff ();
void	CloseStuff ();

/* Port.asm */
void	InitGALer ();
void	EnableOutput ();
void	DisableOutput ();
void	InitParPort ();
void	RestoreParPort ();
void	WriteByte ();
int	ReadByte ();
void	SetGAL ();
void	VeditOn ();
void	VeditOff ();
void	LED ();
void	EnableVcc ();
void	DisableVcc ();
void	EnableVEdit ();
void	DisableVEdit ();
void	SetRow ();
void	SDIn ();
int	SDOut ();
void	Clock ();
void	STRImpuls ();
void	EditMode ();
void	ExitEditMode ();
void	SetPV ();
void	SetVolt ();


/* GAL2.c */
void	GALInfo ();
int	ReadGALParameter ();
int	GALAType ();
UBYTE	GetByte ();


/* GAL.c */
void	ProgramGAL ();
void	CopyGAL ();
void	Leertest ();
int	CheckGAL ();
void	TestSecurity ();
void	Compare ();
void	PrintACW ();
void	PrintSignature ();
int	ProgJedecToGAL ();
void	ReadGALToJedec ();
void	SetSecurity ();
void	Loeschen ();
void	EraseIt ();


long	FileSize ();

/* GALasm.c */
int	AssembleInputFile ();
void	SetAND ();
void	IsPinName ();
int	GetNextChar ();
int	GetNextLine ();
void	AsmError ();
void	WriteChipFile ();
void	WritePinFile ();
void	WriteFuseFile ();
void	WriteSpaces ();

/* Jedec.c */
void	PutJedec ();
int	FileChecksum ();
int	FuseChecksum ();
int	MakeJedecBuff ();
void	WriteJedecFile ();
int	SearchNextChar ();
int	SearchNextAsterix ();
int	GetJedec ();
void	JedecError ();

/* Optimizer.c */
int	SearchVar ();
int	Optimizer ();
struct	ActBuffer GetProdTermStart ();
void	KillProdTerm ();
int	OptimizeEqua ();
int	Resolvente ();
int	NumOfVar ();
int	AddResolvente ();
int	IsThereAProdTerm ();
int	SearchVarProd ();
int	WriteNewSource ();
int	CopyEqua ();
int	PrintEqua ();
int	GetNext ();
int	GetNextEqua ();
void	PrintOptText ();
int	ScrollRequester ();
int	TranslateEqua ();

/* Pruefer.c */
void	Pruefer ();
void	SetPegel ();
void	CheckOutput ();
void	TogglePruefer ();
void	DrawGAL ();
void	DrawLeftPin ();
void	DrawRightPin ();
void	PrintPinNames ();
void	ClearPinNames ();

/* Sub.c */
void	Schreibverhalten ();
void	JedecRequester ();
void	About ();
int	mystrcmp ();
int	MyFileReq ();
int	CompareRequester ();
int	MyRequest ();
int	AsmRequester ();
long	FileSize ();
int	ReadFile ();
void	ErrorReq ();
void	PrintText ();
void	PrintErrorLine ();
void	LoadConfig ();
void	SaveConfig ();
void	SetGALType ();
int	AddByte ();
int	AddString ();
void	IncPointer ();
void	DecPointer ();
void	FreeBuffer ();


/* Reasm.c */
int	CheckPinNames ();
int	PinNameRequester ();
int	RowActive ();
int	OLMCOutput ();
int	MakeEquation ();
int	Reasm ();
void	Reassembler ();
void	ReasmError ();
