/* Read ?x8 Burroughs terminal mask ROMs * * Based on ALL03 14.05.2003 by Fabio Sturman fabio.sturman@tiscali.it * */ #include #include #include #include #include #include "../include/all03.h" #include "../include/all03ft.h" #include "../include/keys.h" #include "../include/sleep.h" #include "../include/binmask.h" unsigned char buf[2048]; unsigned char ascii[17]; /* Signetics 82S191 2048x8 with three chip selects Assume the Burroughs chip selects are programmable, so they become address lines (11-13) */ /* work with socket (1-40) pins throughout */ #define PIN_A7 9 #define PIN_A6 10 #define PIN_A5 11 #define PIN_A4 12 #define PIN_A3 13 #define PIN_A2 14 #define PIN_A1 15 #define PIN_A0 16 #define PIN_D0 17 #define PIN_D1 18 #define PIN_D2 19 #define PIN_GND 20 #define PIN_D3 21 #define PIN_D4 22 #define PIN_D5 23 #define PIN_D6 24 #define PIN_D7 25 #define PIN_CE2 26 #define PIN_A10 27 #define PIN_CE1 28 #define PIN_CE0 29 /* Active High */ #define PIN_A9 30 #define PIN_A8 31 #define PIN_VCC 32 int pin_d[8]={PIN_D7, PIN_D6, PIN_D5, PIN_D4, PIN_D3, PIN_D2, PIN_D1, PIN_D0}; int pin_a[11]={PIN_A0, PIN_A1, PIN_A2, PIN_A3, PIN_A4, PIN_A5, PIN_A6, PIN_A7, PIN_A8, PIN_A9, PIN_A10}; void set_addr(unsigned int addr) { int i; /* printf("\n%04X ",addr); */ for(i=0; i<11; i++) { if ((addr & 0x01) == 0) { all03_wr_pin(pin_a[i],0); /* printf("0"); */ } else { all03_wr_pin(pin_a[i],1); /* printf("1"); */ } addr=addr>>1; } } /* main program */ int main(int argc, char *argv[]) { int i,j; char c; unsigned char b; char filename[13]; int ce[3]; FILE *fp=NULL; all03_init_h(); /* In common/all03.c : sets all pins off */ disable_ctrl_c_break(); /* printf("TESTING SPEED...\n"); if(!test_timer()) { printf("TIMER OK\n"); } else { printf("\n\007* ALL03 Error - Timing not OK!\n"); } */ if(all03_test_base_address()) { printf("\n\007* ALL03 Error - Programmer not found at base address %04x!\n",all03_get_base_address()); printf("Press \n"); wait_enter(); } all03_init_h(); printf("all03_init_h() done\n"); printf("WRM Burroughs PROM reader build of %s %s\n", __DATE__, __TIME__); printf("Setting Vcc = 5V\n"); all03_set_vcc(5.0); printf("GND to pin %i\n",PIN_GND); all03_wr_pin(PIN_GND,0); printf("VCC to pin %i\n",PIN_VCC); all03_wr_vcc_pin(PIN_VCC,1); #if 1 ce[0]=1; // Active high chip select ce[1]=0; ce[2]=0; #define FN "4220_%i%i.BIN" #endif #if 0 ce[0]=1; // Active high chip select ce[1]=1; ce[2]=0; #define FN "5221_%i%i.BIN" #endif #if 0 ce[0]=1; // Active high chip select ce[1]=0; ce[2]=1; #define FN "4254_%i%i.BIN" #endif #if 0 ce[0]=1; // Active high chip select ce[1]=1; ce[2]=1; #define FN "4262_%i%i.BIN" #endif #if 0 ce[0]=1; // Active high chip select ce[1]=0; ce[2]=0; #define FN "4226_%i%i.BIN" #endif #if 0 ce[0]=1; // Active high chip select ce[1]=1; ce[2]=0; #define FN "7824_%i%i.BIN" #endif #if 0 ce[0]=1; // Active high chip select ce[1]=0; ce[2]=1; #define FN "6228_%i%i.BIN" #endif #if 0 ce[0]=1; // Active high chip select ce[1]=1; ce[2]=1; #define FN "7230_%i%i.BIN" #endif all03_wr_pin(PIN_CE0,ce[0]); all03_wr_pin(PIN_CE1,ce[1]); all03_wr_pin(PIN_CE2,ce[2]); printf("CE2 CE1 %i %i\n", ce[2], ce[1]); sprintf(filename, FN, ce[2], ce[1]); /* This is quick and dirty code. Deal */ ascii[16]='\0'; for (i=0; i<2048; i++) { if ((i%16)==0) printf(" %s\n%04X ",ascii,i); set_addr(i); delay_ms(1); b=0; for (j=0; j<8; j++) { b = (b<<1) | all03_rd_pin(pin_d[j]); /* Read D7 first, shift left */ } printf("%02X ",b); if (isprint(b)) { ascii[i%16]=b; } else { ascii[i%16]='.'; } buf[i]=b; } fp=fopen(filename,"wb"); if (fp) { fwrite(buf, 1, 2048, fp); fclose(fp); } else { printf("fp == NULL!\n"); } /* Exit */ all03_init_h(); /* all pins off */ enable_ctrl_c_break(); return(0); }