/****************************************************************/ /* */ /* GAL-Software */ /* */ /* Soft- and Hardware copyright (c)1991 */ /* by Christian Habermann */ /* Asamstr. 17 */ /* W-8050 Freising (Germany) */ /* */ /* Dies ist Version 1.3 der GALer-Software. */ /* */ /* History: */ /* V1.0: Testversion */ /* V1.1: Intuition-Umgebung hinzugefügt */ /* V1.2: einige Fehler beseitigt */ /* V1.3: Fehler im GAL-Assembler beseitigt */ /* */ /* */ /* Compiler: Aztec 3.6a */ /* */ /* compilieren: cc GALer.c */ /* cc sub.c */ /* cc jedec.c */ /* cc pruefer.c */ /* cc GAL.c */ /* cc GALasm.c */ /* as -n -c -d port.asm */ /* linken : ln GALer sub port jedec pruefer GAL GALasm -lc */ /* */ /****************************************************************/ #include "devices/parallel.h" #include "exec/io.h" #include "exec/memory.h" #include "exec/ports.h" #include "exec/types.h" #include "intuition/intuition.h" #include "libraries/dosextens.h" #include #include "GALer.h" #define Menu_1 0 #define Menu_2 1 #define Menu_3 2 #define Menu_4 3 #define Menu_5 4 #define Menu_6 5 #define Item_1 0 #define Item_2 1 #define Item_3 2 #define Item_4 3 #define Item_5 4 #define Item_6 5 struct IORequest *CreateExtIO(); struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; struct IntuiMessage *message; struct Screen *screen; struct Window *window,*old_ReqWin; struct MsgPort *timeport, *parport; struct timerequest *timereq; struct IOExtPar *parreq; UWORD MyColors[4]={0x000,0x777,0x999,0x00A}; SHORT vector2[10] = {30,160,610,160,610,195,30,195,30,160}; SHORT vector1[10] = {0,11,639,11,639,255,0,255,0,11}; struct Border border2 = {0,0,2,3,JAM1,5,(SHORT *)vector2,NULL}; struct Border border1 = {0,0,2,3,JAM1,5,(SHORT *)vector1,&border2}; struct IntuiText MIText1a={0,1,JAM1,0,0,NULL, (UBYTE *)"Pinnamen zeigen",NULL}; struct IntuiText MIText1b={0,1,JAM1,0,0,NULL, (UBYTE *)"Pinnamen löschen",NULL}; struct IntuiText MIText1c={0,1,JAM1,0,0,NULL, (UBYTE *)"Prüfmuster",NULL}; struct IntuiText MIText3= {0,1,JAM1,0,0,NULL, (UBYTE *)"Jedec-Datei erstellen",NULL}; struct IntuiText MIText4b={0,1,JAM1,0,0,NULL, (UBYTE *)"ACW lesen",NULL}; struct IntuiText MIText4= {0,1,JAM1,0,0,NULL, (UBYTE *)"Signatur lesen",NULL}; struct IntuiText MIText5= {0,1,JAM1,0,0,NULL, (UBYTE *)"Datei assemblieren",NULL}; struct IntuiText MIText6b={0,1,JAM1,20,0,NULL, (UBYTE *)"Pin-Belegung",NULL}; struct IntuiText MIText6a={0,1,JAM1,20,0,NULL, (UBYTE *)"Chip-Diagramm",NULL}; struct IntuiText MIText6= {0,1,JAM1,20,0,NULL, (UBYTE *)"Fuse-Matrix",NULL}; struct IntuiText MIText7= {0,1,JAM1,20,0,NULL, (UBYTE *)"Jedec-Datei",NULL}; struct IntuiText MIText8= {0,1,JAM1,0,0,NULL, (UBYTE *)"setze Security-Bit",NULL}; struct IntuiText MIText9= {0,1,JAM1,0,0,NULL, (UBYTE *)"Leertest",NULL}; struct IntuiText MIText10={0,1,JAM1,0,0,NULL, (UBYTE *)"kopieren",NULL}; struct IntuiText MIText11={0,1,JAM1,0,0,NULL, (UBYTE *)"programmieren",NULL}; struct IntuiText MIText12={0,1,JAM1,0,0,NULL, (UBYTE *)"löschen",NULL}; struct IntuiText MIText13={0,1,JAM1,20,0,NULL, (UBYTE *)"GAL20V8",NULL}; struct IntuiText MIText14={0,1,JAM1,20,0,NULL, (UBYTE *)"GAL16V8",NULL}; struct IntuiText MIText15={0,1,JAM1,0,0,NULL, (UBYTE *)"Quit",NULL}; struct IntuiText MITextP ={0,1,JAM1,0,0,NULL, (UBYTE *)"Prüfer verlassen",NULL}; struct MenuItem MenuItem1c= {NULL,0,20,180,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText1c,NULL,'m',NULL,MENUNULL}; struct MenuItem MenuItem1b= {&MenuItem1c,0,10,180,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText1b,NULL,'c',NULL,MENUNULL}; struct MenuItem MenuItem1a= {&MenuItem1b,0,0,180,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText1a,NULL,'n',NULL,MENUNULL}; struct MenuItem MenuItem3 = {NULL,0,20,224,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText3,NULL,'j',NULL,MENUNULL}; struct MenuItem MenuItem2b= {&MenuItem3,0,10,224,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText4b,NULL,'w',NULL,MENUNULL}; struct MenuItem MenuItem2 = {&MenuItem2b,0,0,224,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText4,NULL,'r',NULL,MENUNULL}; struct MenuItem MenuItem7 = {NULL,0,40,200,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText5,NULL,'a',NULL,MENUNULL}; struct MenuItem MenuItem6b= {&MenuItem7,0,30,200,8, CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED, 0,(APTR)&MIText6b,NULL,NULL,NULL,MENUNULL}; struct MenuItem MenuItem6a= {&MenuItem6b,0,20,200,8, CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED, 0,(APTR)&MIText6a,NULL,NULL,NULL,MENUNULL}; struct MenuItem MenuItem6 = {&MenuItem6a,0,10,200,8, CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED, 0,(APTR)&MIText6,NULL,NULL,NULL,MENUNULL}; struct MenuItem MenuItem5 = {&MenuItem6,0,0,200,8, CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED, 0,(APTR)&MIText7,NULL,NULL,NULL,MENUNULL}; struct MenuItem MenuItem12 = {NULL,0,40,182,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText8,NULL,'s',NULL,MENUNULL}; struct MenuItem MenuItem11 = {&MenuItem12,0,30,182,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText9,NULL,'t',NULL,MENUNULL}; struct MenuItem MenuItem10 = {&MenuItem11,0,20,182,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText10,NULL,'k',NULL,MENUNULL}; struct MenuItem MenuItem9 = {&MenuItem10,0,10,182,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText11,NULL,'p',NULL,MENUNULL}; struct MenuItem MenuItem8 = {&MenuItem9,0,0,182,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText12,NULL,'l',NULL,MENUNULL}; struct MenuItem MenuItem14 = {NULL,0,10,120,8, CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0xFFFD,(APTR)&MIText13,NULL,'2',NULL,MENUNULL}; struct MenuItem MenuItem13 = {&MenuItem14,0,0,120,8, CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP+CHECKED, 0xFFFE,(APTR)&MIText14,NULL,'1',NULL,MENUNULL}; struct MenuItem MenuItem15 = {NULL,0,0,84,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MIText15,NULL,'q',NULL,MENUNULL}; struct Menu Menu6 = {NULL,438,0,87,0,MENUENABLED, "GAL-Prüfer",&MenuItem1a}; struct Menu Menu5 = {&Menu6,296,0,135,0,MENUENABLED, "GAL-Disassembler",&MenuItem2}; struct Menu Menu4 = {&Menu5,178,0,111,0,MENUENABLED, "GAL-Assembler",&MenuItem5}; struct Menu Menu3 = {&Menu4,140,0,31,0,MENUENABLED, "GAL",&MenuItem8}; struct Menu Menu2 = {&Menu3,70,0,63,0,MENUENABLED, "GAL-Typ",&MenuItem13}; struct Menu Menu1 = {&Menu2,0,0,63,0,MENUENABLED, "Projekt",&MenuItem15}; struct MenuItem MenuItemP = {NULL,0,0,175,8, ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP, 0,(APTR)&MITextP,NULL,'x',NULL,MENUNULL}; struct Menu MenuP = {NULL,0,0,87,0,MENUENABLED, "GAL-Prüfer",&MenuItemP}; SHORT BorderVectors1[] = {0,0,17,0,17,9,0,9,0,0}; struct Border Border1 = {-1,-1,2,3,JAM1,5,BorderVectors1,NULL}; struct Border Border2 = {-1,-1,3,3,JAM1,5,BorderVectors1,NULL}; struct IntuiText IText35 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget35= {NULL,382,120,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border2,NULL,&IText35,NULL,NULL,15,NULL}; struct IntuiText IText34 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL}; struct Gadget Gadget34= {&Gadget35,340,120,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText34,NULL,NULL,30,NULL}; struct IntuiText IText33 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget33= {&Gadget34,382,110,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border2,NULL,&IText33,NULL,NULL,16,NULL}; struct IntuiText IText32 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL}; struct Gadget Gadget32= {&Gadget33,340,110,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText32,NULL,NULL,31,NULL}; struct IntuiText IText31 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget31= {&Gadget32,382,100,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border2,NULL,&IText31,NULL,NULL,17,NULL}; struct IntuiText IText30 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL}; struct Gadget Gadget30= {&Gadget31,340,100,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText30,NULL,NULL,32,NULL}; struct IntuiText IText29 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget29= {&Gadget30,382,90,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border2,NULL,&IText29,NULL,NULL,18,NULL}; struct IntuiText IText28 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL}; struct Gadget Gadget28= {&Gadget29,340,90,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText28,NULL,NULL,33,NULL}; struct IntuiText IText27 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget27= {&Gadget28,382,80,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border2,NULL,&IText27,NULL,NULL,19,NULL}; struct IntuiText IText26 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL}; struct Gadget Gadget26= {&Gadget27,340,80,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText26,NULL,NULL,34,NULL}; struct IntuiText IText25 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget25= {&Gadget26,382,70,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border2,NULL,&IText25,NULL,NULL,20,NULL}; struct IntuiText IText24 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL}; struct Gadget Gadget24= {&Gadget25,340,70,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText24,NULL,NULL,35,NULL}; struct IntuiText IText23 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget23= {&Gadget24,382,60,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border2,NULL,&IText23,NULL,NULL,21,NULL}; struct IntuiText IText22 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL}; struct Gadget Gadget22= {&Gadget23,340,60,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText22,NULL,NULL,36,NULL}; struct IntuiText IText21 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget21= {&Gadget22,382,50,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border2,NULL,&IText21,NULL,NULL,22,NULL}; struct IntuiText IText20 = {2,0,JAM2,4,0,NULL,(UBYTE *)"A",NULL}; struct Gadget Gadget20= {&Gadget21,340,50,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText20,NULL,NULL,37,NULL}; struct IntuiText IText13 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget13= {&Gadget20,382,130,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText13,NULL,NULL,10,NULL}; struct IntuiText IText12 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget12= {&Gadget13,242,120,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText12,NULL,NULL,9,NULL}; struct IntuiText IText11 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget11= {&Gadget12,242,110,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText11,NULL,NULL,8,NULL}; struct IntuiText IText10 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget10= {&Gadget11,242,100,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText10,NULL,NULL,7,NULL}; struct IntuiText IText9 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget9 = {&Gadget10,242,90,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText9,NULL,NULL,6,NULL}; struct IntuiText IText8 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget8 = {&Gadget9,242,80,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText8,NULL,NULL,5,NULL}; struct IntuiText IText7 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget7 = {&Gadget8,242,70,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText7,NULL,NULL,4,NULL}; struct IntuiText IText6 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget6 = {&Gadget7,242,60,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText6,NULL,NULL,3,NULL}; struct IntuiText IText5 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget5 = {&Gadget6,242,50,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText5,NULL,NULL,2,NULL}; struct IntuiText IText4 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget4 = {&Gadget5,242,40,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText4,NULL,NULL,1,NULL}; struct IntuiText IText1c = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget1c= {NULL,382,120,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText1c,NULL,NULL,14,NULL}; struct IntuiText IText3 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget3 = {&Gadget1c,242,30,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText3,NULL,NULL,13,NULL}; struct IntuiText IText2 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget2 = {&Gadget3,382,30,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText2,NULL,NULL,12,NULL}; struct IntuiText IText1 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL}; struct Gadget Gadget1 = {&Gadget2,242,20,16,8,NULL,GADGIMMEDIATE+RELVERIFY,BOOLGADGET, (APTR)&Border1,NULL,&IText1,NULL,NULL,11,NULL}; USHORT im_GAL20Dat[] = { 0x0FF8,0x03E0,0x7F80,0x3F00,0xFC1F,0x87E3,0xF000,0x3FFE, 0x07F0,0x7F80,0xFFC3,0xFF1F,0x87EF,0xFC00,0x7C1F,0x07F0, 0x1E01,0xFFE7,0xCF8F,0x03DF,0xFE00,0xF80F,0x8FF8,0x1E01, 0xE3E7,0x878F,0x03DF,0x3E00,0xF000,0x0F78,0x1E00,0x03E7, 0x878F,0x03DF,0x3E00,0xF000,0x1E3C,0x1E00,0x03E7,0x878F, 0x03DF,0x3E00,0xF000,0x1E3C,0x1E00,0x03E7,0x8F8F,0x87DF, 0x3E00,0xF000,0x3C1E,0x1E00,0x03E7,0x9F8F,0x87DF,0xFE00, 0xF03F,0xBC1E,0x1E00,0x03E7,0xBF87,0xCF8F,0xFC00,0xF03F, 0xFC1F,0x1E00,0x07C7,0xF787,0xCF87,0xF800,0xF00F,0x7FFF, 0x1E00,0x0F87,0xE783,0xFF0F,0xFC00,0xF00F,0x7FFF,0x1E00, 0x1F07,0xC783,0xFF1F,0x3E00,0xF00F,0x780F,0x1E00,0x3E07, 0x8781,0xFE1F,0x3E00,0xF80F,0x780F,0x1E00,0x7C07,0x8781, 0xFE1F,0x3E00,0xFC1F,0x780F,0x1E00,0xF867,0x8780,0xFC1F, 0x3E00,0x7E3E,0x780F,0x1E0F,0xF1E7,0xCF80,0xFC1F,0xFE00, 0x3FFC,0xFC3F,0xFFFF,0xFFE3,0xFF00,0x780F,0xFC00,0x0FF0, 0xFC3F,0xFFFF,0xFFE0,0xFC00,0x7803,0xF000 }; USHORT im_GAL16Dat[] = { 0x0FF8,0x03E0,0x7F80,0x1F00,0x3E1F,0x87E3,0xF000,0x3FFE, 0x07F0,0x7F80,0x3F00,0xFF1F,0x87EF,0xFC00,0x7C1F,0x07F0, 0x1E01,0xFF01,0xF80F,0x03DF,0xFE00,0xF80F,0x8FF8,0x1E01, 0xFF03,0xE00F,0x03DF,0x3E00,0xF000,0x0F78,0x1E00,0x1F07, 0xC00F,0x03DF,0x3E00,0xF000,0x1E3C,0x1E00,0x1F07,0xC00F, 0x03DF,0x3E00,0xF000,0x1E3C,0x1E00,0x1F07,0xC00F,0x87DF, 0x3E00,0xF000,0x3C1E,0x1E00,0x1F07,0xC00F,0x87DF,0xFE00, 0xF03F,0xBC1E,0x1E00,0x1F07,0xFC07,0xCF8F,0xFC00,0xF03F, 0xFC1F,0x1E00,0x1F07,0xFF07,0xCF87,0xF800,0xF00F,0x7FFF, 0x1E00,0x1F07,0xFF83,0xFF0F,0xFC00,0xF00F,0x7FFF,0x1E00, 0x1F07,0xCF83,0xFF1F,0x3E00,0xF00F,0x780F,0x1E00,0x1F07, 0xCF81,0xFE1F,0x3E00,0xF80F,0x780F,0x1E00,0x1F07,0xCF81, 0xFE1F,0x3E00,0xFC1F,0x780F,0x1E00,0x1F07,0xCF80,0xFC1F, 0x3E00,0x7E3E,0x780F,0x1E0F,0x1F07,0xFF80,0xFC1F,0xFE00, 0x3FFC,0xFC3F,0xFFFF,0xFFE3,0xFF00,0x780F,0xFC00,0x0FF0, 0xFC3F,0xFFFF,0xFFE0,0xFC00,0x7803,0xF000 }; struct Image im_GAL16 = { 0, 0, 103, 18, 1, NULL, 0x0001, 0x0000, NULL }; struct Image im_GAL20 = { 0, 0, 103, 18, 1, NULL, 0x0001, 0x0000, NULL }; struct NewScreen MyScreen={ 0,0,640,256,2,2,3,HIRES,CUSTOMSCREEN,NULL, (UBYTE *)"GALer V1.3 (c)1991 by Christian Habermann", NULL,NULL} ; struct NewWindow MyWindow={ 0,11,640,245,1,2, GADGETUP|MENUPICK|REQCLEAR, ACTIVATE|BORDERLESS, NULL,NULL,NULL,NULL,NULL,0,0,0,0,CUSTOMSCREEN }; struct Process *myproc; struct RastPort *rp; struct ViewPort *vp; int pruef_mode = 0; int GenJedec = YES, GenFuse = YES, GenChip = YES, GenPin = YES; USHORT *im_ptr16, *im_ptr20; extern int GALType, MaxFuseAdr, SigAdr; main() { ULONG class; USHORT code, gadID; struct Gadget *gad; OpenStuff(); /* Libs, Windows... öffnen*/ CopyMem(&im_GAL16Dat[0], im_ptr16, (long)sizeof(im_GAL16Dat)); CopyMem(&im_GAL20Dat[0], im_ptr20, (long)sizeof(im_GAL20Dat)); im_GAL16.ImageData = im_ptr16; im_GAL20.ImageData = im_ptr20; rp=&(screen->RastPort); vp=&screen->ViewPort; LoadRGB4(vp,&MyColors,4L); DrawBorder(rp,&border1,0L,0L); /*Umrandungen,... zeichnen*/ SetAPen(rp,2L); Move(rp,0L,199L); Draw(rp,639L,199L); SetAPen(rp,1L); DrawImage(rp, &im_GAL16, 35L, 35L); DrawGAL(GAL16V8); /*IC zeichnen*/ if(GetParPort()!=0) { /*Druckerport frei?*/ puts("Parallel-Port ist belegt"); CloseStuff(); exit(1L); } if(GetTimer()!=0) { /*Timer holen*/ FreeParPort(); puts("kann Timer nicht finden"); CloseStuff; exit(1L); } InitGALer(); /*Ausgänge von IC3,4,5 auf*/ EnableOutput(); /*LOW schalten*/ SetGAL(GAL16V8); MaxFuseAdr = MAX_FUSE_ADR16; SigAdr = SIG_ADR16; for(;;) { Wait(1L<UserPort->mp_SigBit); if(message=(struct IntuiMessage *)GetMsg(window->UserPort)) { class=message->Class; code =message->Code; if (class==GADGETUP) { gad=(struct Gadget *)message->IAddress; gadID=gad->GadgetID; } ReplyMsg(message); switch(class) { case MENUPICK: { if (MENUNUM(code)!=MENUNULL) ExecuteMenu(MENUNUM(code),ITEMNUM(code)); break; } case GADGETUP: { if ((gadID<100)&(pruef_mode==ON)) Pruefer(gad,gadID); break; } } } } } /*end of main*/ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* Subroutinen */ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*aufgerufenes Menü ausführen*/ ExecuteMenu(menu,item) int menu,item; { if (pruef_mode==ON) { if ((menu==Menu_1)&(item==Item_1)) TogglePruefer(); } else { switch (menu) { case Menu_1: { /*Projekt*/ if (item == Item_1) { CloseStuff(); FreeTimer(); FreeParPort(); exit(0L); } break; } case Menu_2: { /*GAL-Typ*/ if ((item == Item_1) && (GALType != GAL16V8)) { MaxFuseAdr = MAX_FUSE_ADR16; SigAdr = SIG_ADR16; SetGAL (GAL16V8); DrawImage(rp, &im_GAL16, 35L, 35L); DrawGAL (GAL16V8); } if ((item == Item_2) && (GALType != GAL20V8)) { MaxFuseAdr = MAX_FUSE_ADR20; SigAdr = SIG_ADR20; SetGAL (GAL20V8); DrawImage(rp, &im_GAL20, 35L, 35L); DrawGAL (GAL20V8); } break; } case Menu_3: { /*GAL*/ switch (item) { case Item_1: { Loeschen(); break; } case Item_2: { ProgramGAL(); break; } case Item_3: { CopyGAL(); break; } case Item_4: { Leertest(); break; } case Item_5: { SetSecurity(); break; } } break; } case Menu_4: { /*GAL-Assembler*/ switch (item) { case Item_1: { if (GenJedec==YES) GenJedec=NO; /*Jedec-Datei erstellen*/ else GenJedec=YES; break; } case Item_2: { if (GenFuse==YES) GenFuse=NO; /*Fuse-Matrix erstellen*/ else GenFuse=YES; break; } case Item_3: { if (GenChip==YES) GenChip=NO; /*Chip-Diagramm erstellen*/ else GenChip=YES; break; } case Item_4: { if (GenPin==YES) GenPin=NO; /*Pin-Belegung erstellen*/ else GenPin=YES; break; } case Item_5: { AssembleInputFile(); /*Eingabe-Datei assemblieren*/ break; } } break; } case Menu_5: { /*GAL-Disassembler*/ switch (item) { case Item_1: { PrintSignature(); break; } case Item_2: { PrintACW(); break; } case Item_3: { PutJedec(); break; } } break; } case Menu_6: { /*GAL-Prüfer*/ switch (item) { case Item_1: { PrintPinNames(); break; } case Item_2: { ClearPinNames(); break; } case Item_3: { TogglePruefer(); break; } } } } } } GetParPort() /*Druckerport belegen*/ { int error; parport=CreatePort(0L,0L); if(parport==0) return(-1); parreq=(struct IOExtPar *) CreateExtIO(parport,(long)sizeof(struct IOExtPar)); if(parreq==0) { DeletePort(parport); return(-2); } error=OpenDevice((UBYTE *)"parallel.device",0L,parreq,0L); if(error!=0) { DeleteExtIO(parreq,(long)sizeof(struct IOExtPar)); DeletePort(parport); return(-3); } return(error); } FreeParPort() /*Druckerport wieder freigeben*/ { CloseDevice(parreq); DeleteExtIO(parreq,(long)sizeof(struct IOExtPar)); DeletePort(parport); } GetTimer() /*Timer holen*/ { int error; timeport=CreatePort(0L,0L); if(timeport==0) return(-1); timereq=(struct timerequest *)AllocMem( (long)sizeof(struct timerequest),MEMF_PUBLIC); if(timereq==0) { DeletePort(timeport); return(-2); } timereq->tr_node.io_Message.mn_Node.ln_Type=NT_MESSAGE; timereq->tr_node.io_Message.mn_Node.ln_Pri=0; timereq->tr_node.io_Message.mn_ReplyPort=timeport; error=OpenDevice(TIMERNAME,UNIT_MICROHZ,timereq,0L); if(error!=0) { FreeMem(&timereq,(long)sizeof(struct timerequest)); DeletePort(timeport); return(-3); } return(error); } FreeTimer() /*Timer wieder freigeben*/ { CloseDevice(timereq); FreeMem(timereq,(long)sizeof(struct timerequest)); DeletePort(timeport); } /*micro: microsec. to wait secs: seconds to wait */ WaitForTimer(secs,micro) ULONG secs,micro; { timereq->tr_node.io_Command=TR_ADDREQUEST; timereq->tr_time.tv_secs=secs; timereq->tr_time.tv_micro=micro; DoIO(timereq); } OpenStuff() { IntuitionBase = 0; GfxBase = 0; screen = 0; window = 0; im_ptr16 = 0; im_ptr20 = 0; if((IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L))==NULL) exit(FALSE); if((GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0L))==NULL) { CloseStuff(); exit(FALSE); } if(!(screen=(struct Screen *)OpenScreen(&MyScreen))) { CloseStuff(); exit(FALSE); } MyWindow.Screen=screen; if((window=(struct Window *)OpenWindow(&MyWindow))==NULL) { CloseStuff(); exit(FALSE); } SetMenuStrip(window,&Menu1); /*Speicher für Images holen*/ if (!(im_ptr16 = AllocMem((long)sizeof(im_GAL16Dat),MEMF_CHIP))) { puts("nicht genug freies Chip-Memory"); CloseStuff(); exit(1L); } if (!(im_ptr20 = AllocMem((long)sizeof(im_GAL20Dat),MEMF_CHIP))) { puts("nicht genug freies Chip-Memory"); CloseStuff(); exit(1L); } myproc=(struct Process *)FindTask(0L); /*Requester umleiten*/ old_ReqWin=(struct Window *)myproc->pr_WindowPtr; myproc->pr_WindowPtr=(APTR)window; } CloseStuff() { myproc->pr_WindowPtr=(APTR)old_ReqWin; /*Req. auf ursprüngliches Window*/ if(window) { ClearMenuStrip(window); CloseWindow(window); } if(screen) CloseScreen(screen); if(IntuitionBase) CloseLibrary (IntuitionBase); if(GfxBase) CloseLibrary (GfxBase); if(im_ptr16) FreeMem(im_ptr16, (long)sizeof(im_GAL16Dat)); if(im_ptr20) FreeMem(im_ptr20, (long)sizeof(im_GAL20Dat)); }