
#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		GAL22V10	3
#define		GAL20RA10	4
#define		UNKNOWN		5
#define		NOT_SPECIFIED	6


#define		HW_GALER_1_0	1		/* Hardware-Versionen */
#define		HW_GALER_1_2	2
#define		HW_GALER_1_3	3


#define		EDITOR_STR_SIZE 25		/* string size for editor */

#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		IC6a		0
#define		IC6c		4
#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		INPUT_PIN	0
#define		OUTPUT_PIN	1

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

#define		LOAD		0		/* Filerequester-Typen */
#define		SAVE		1

						/*Dauer des STR-Impulses in*/
#define		_80MS		80000L		/*Mikrosekunden für pro-*/
#define		_10MS		10000L		/*grammieren, löschen*/
#define		_40MS		40000L
#define		_50MS		50000L
#define		_100MS		100000L
#define		VERIFY_TIME	5L		/*lesen*/


						/*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*/
			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*/
			BYTE HardwareVersion;   /*Hardware-Version*/
			BYTE EdWBToFront;	/*WB to front*/
			char EditorStr[EDITOR_STR_SIZE];
		      };




struct	JedecStruct { BYTE GALLogic[5808];	/*max. Größe der Fuse-Mat.*/
		      BYTE GALXOR  [10];	/*XOR-Bits*/
		      BYTE GALSig  [64];	/*Signatur*/
		      BYTE GALAC1  [8];		/*AC1-Bits*/
		      BYTE GALPT   [64];	/*Produkttermfreigabe*/
		      BYTE GALSYN;		/*SYN-Bit*/
		      BYTE GALAC0;		/*AC0-Bit*/
		      BYTE GALS1   [10];	/*S1 bits für 22V10 */
		    };
		    

					/* 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

					/* GAL22V10 */
#define NUMOFFUSES22V10 5892		/* Positionen der Bits in der */
#define XOR22V10	5808		/* Jedec-Datei */
#define SYN22V10	5809
#define SIG22V10	5828

					/* GAL20RA10 */
#define NUMOFFUSES20RA10 3274		/* Positionen der Bits in der */
#define XOR20RA10	 3200		/* Jedec-Datei */
#define SIG20RA10	 3210


#define LOGIC16_SIZE	2048		/*Anzahl der Bits für XOR usw.*/
#define LOGIC20_SIZE	2560
#define LOGIC22V10_SIZE 5808
#define LOGIC20RA10_SIZE 3200
#define ROW_SIZE_16V8	64
#define ROW_SIZE_20V8	64
#define ROW_SIZE_22V10	132
#define ROW_SIZE_20RA10	80
#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 MAX_FUSE_ADR22V10	43
#define SIG_ADR22V10		44
#define MAX_FUSE_ADR20RA10	39
#define SIG_ADR20RA10		40
#define ACW_ADR			60
#define SECURITY_ADR		61
#define ERASE_ADR		63





/*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 Clock;		/*Clock-Gleichung angegeben?*/
			  BYTE ARST;		/*ARST-Gleichung angegeben?*/
			  BYTE APRST;		/*APRST-Gleichung 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


#define	MAX_SUFFIX_SIZE	6		/* max. string length of a legal */
					/* suffix */



					/*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*/
		   };









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


/* GALer.c */
void main(void);
void ExecuteMenu(int menu, int item, int subitem);
void PAL_NTSC(void);
int  GetParPort(void);
void FreeParPort(void);
int  GetTimer(void);
void FreeTimer(void);
void OpenStuff(void);
void CloseStuff(void);
void WaitForTimer(ULONG micro);
int  InitMyGadgets(void);


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


/*GALasm .c */
int  AssembleInputFile(int OpMode);
void SetAND(int row, int pinnum, int negation);
void IsPinName(UBYTE *pinnames, int numofpins);
int  GetNextChar(void);
int  GetNextLine(void);
void AsmError(int errornum, int pinnum);
void WriteChipFile(void);
void WritePinFile(void);
void WriteFuseFile(void);
void WriteSpaces(FILE *fp, int numof);
void WriteRow(FILE *fp, int row);
int  IsOR(char);
int  IsAND(char);
int  IsNEG(char);
void Is_AR_SP(UBYTE *ptr);


/* Optimizer.c */
int Optimizer(void);
struct ActBuffer GetProdTermStart(struct ActBuffer pos);
void KillProdTerm(struct ActBuffer term);
int  OptimizeEqua(struct ActBuffer buff);
int  Resolvente(struct ActBuffer optstart, struct ActBuffer optend, struct ActBuffer alteSchicht);
int  NumOfVar(struct ActBuffer term);
int  AddResolvente(struct ActBuffer pos1, struct ActBuffer pos2, struct ActBuffer equastart, struct ActBuffer *equaend);
int  SearchVar(struct ActBuffer *, struct ActBuffer, UBYTE);
int  WriteNewSource(struct ActBuffer buff, UBYTE *equastart, UBYTE *equaend);
int  CopyEqua(struct ActBuffer from_buff, struct ActBuffer to_buff);
int  PrintEqua(struct ActBuffer buff, struct ActBuffer *filebuff);
int  GetNext(struct ActBuffer *buff);
int  GetNextEqua(struct ActBuffer *buff);
void PrintOptText(UBYTE *txt);
void  ScrollRequester(void);
int  TranslateEqua(struct ActBuffer *buff);


/* Pruefer.c */
void Pruefer(struct Gadget *gad, USHORT gadID);
void SetLevel(USHORT gadID, int level);
void CheckOutput(void);
void TogglePruefer(void);
void DrawGAL(int type);
void DrawLeftPin(long x, long y);
void DrawRightPin(long x, long y);
void PrintPinNames(void);
void ClearPinNames(void);


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


/* Sub.c */
void Schreibverhalten(void);
void JedecRequester(void);
void About(void);
int  mystrcmp(char *cptr1, char *cptr2);
int  MyFileReq(char *headtxt, char *showtxt, int showreq, int mode);
int  MyRequest(int mode, UBYTE *text);
int  AsmRequester(void);
long FileSize(UBYTE *filename);
int  ReadFile(UBYTE *filename, LONG filesize, UBYTE *filebuff);
void ErrorReq(int errornum);
void PrintText(UBYTE *text, int newline);
void PrintErrorLine(int line);
void LoadConfig(void);
void SaveConfig(void);
void SetGALType(int galtype);
int  AddByte(struct ActBuffer *buff, UBYTE code);
int  AddString(struct ActBuffer *buff, UBYTE *strnptr);
void IncPointer(struct ActBuffer *buff);
void DecPointer(struct ActBuffer *buff);
void FreeBuffer(struct Buffer *buff);
void SelectEditor(void);
void CallEditor(void);


/* Reasm.c */
int  CheckPinNames(void);
int  PinNameRequester(int galtype);
int  RowActive(int row, int galtype);
int  OLMCOutput(int olmc, int mode);
int  MakeEquation(struct ActBuffer *buff, int olmc, int colsize, int mode, int rowoffset, int numofrows);
int  Reasm(struct ActBuffer buff);
void Reassembler(void);
void ReasmError(int errornum, int pinnum);
UBYTE *PinNamePtr(int pinnum, struct Gadget *gadget);



/* Jedec.c */
void PutJedec(void);
int  FileChecksum(struct ActBuffer buff);
int  FuseChecksum(int galtype);
int  MakeJedecBuff(struct ActBuffer buff, int galtype);
void WriteJedecFile(int galtype);
int  SearchNextChar(void);
int  SearchNextAsterix(void);
int  GetJedec(UBYTE *jedecfile);
void JedecError(int errornum, int flag);


/* Localize.c */
void LocalizeText(void);


/* Help.c */
void HelpOnMainMenu(UWORD menuNumber);
void HelpOnCheckerMenu(UWORD menuNumber);
void Help(void);

