#include #include "PLA.h" // prüf ob PLA // Use Mega as it has enough digital inputs // Uses 28 pin ZIF socket wired as follows // ROM PLA Pinouts // Chip Pin Arduino | 1702A | 2704 6654 2716 2732 2764 27128 27256 27512 PLA 8316A 6830A 2102 2101 // 1 49 | -- | -- -- -- -- VPP VPP VPP A15 FE -- // 2 48 | -- | -- -- -- -- A12 A12 A12 A12 I07 -- // 3 1 47 | A02 | A07 A07 A07 A07 A07 A07 A07 A07 I06 A07 GND // 4 2 1 46 | A01 | A06 A06 A06 A06 A06 A06 A06 A06 I05 A08 D0 A03 // 5 3 2 45 | A00 | A05 A05 A05 A05 A05 A05 A05 A05 I04 A09 D1 A02 // 6 4 3 44 | D0 | A04 A04 A04 A04 A04 A04 A04 A04 I03 A10 D2 A01 // 7 5 4 1 43 | D1 | A03 A03 A03 A03 A03 A03 A03 A03 I02 A00 D3 A06 A00 // 8 6 5 2 42 | D2 | A02 A02 A02 A02 A02 A02 A02 A02 I01 A01 D4 A05 A05 // 9 7 6 3 41 | D3 | A01 A01 A01 A01 A01 A01 A01 A01 I00 A02 D5 RW A06 // 10 8 7 4 40 | D4 | A00 A00 A00 A00 A00 A00 A00 A00 F7 A03 D6 A01 A07 // 11 9 8 5 39 | D5 | D0 D0 D0 D0 D0 D0 D0 D0 F6 A04 D7 A02 GND // 12 10 9 6 38 | D6 | D1 D1 D1 D1 D1 D1 D1 D1 F5 A05 CS0 A03 DI1 // 13 11 10 7 37 | D7 | D2 D2 D2 D2 D2 D2 D2 D2 F4 A06 CS1 A04 DO1 // 14 12 11 8 36 | VCC | GND GND GND GND GND GND GND GND GND GND VCC A00 DI2 // 15 13 12 9 35 | PRM | D3 D3 D3 D3 D3 D3 D3 D3 F3 CS3 CS2 GND DO2 // 16 14 13 10 34 | !CS | D4 D4 D4 D4 D4 D4 D4 D4 F2 CS2 CS3 VCC DI3 // 17 15 14 11 33 | VBB | D5 D5 D5 D5 D5 D5 D5 D5 F1 CS1 A09 DI DO3 // 18 16 15 12 32 | VGG | D6 D6 D6 D6 D6 D6 D6 D6 F0 D7 A08 DO DI4 // 19 17 16 13 31 | A07 | D7 D7 D7 D7 D7 D7 D7 D7 !CE D6 A07 !CE DO4 // 20 18 17 14 30 | A06 | PRM PRM PRM !CE !CE !CE !CE !CE I15 D5 A06 A09 CE2 // 21 19 18 15 29 | A05 | VDD VDD A10 A10 A10 A10 A10 A10 I14 D4 A05 A08 OD // 22 20 19 16 28 | A04 | !CS !CE1 !CS !OE !OE !OE !OE !OE I13 D3 A04 A07 !CE1 // 23 21 20 27 | A03 | VBB CS VPP A11 A11 A11 A11 A11 I12 D2 A03 RW // 24 22 21 26 | VCC2 | VSS !CE2 A09 A09 A09 A09 A09 A09 I11 D1 A02 A04 // 25 23 22 25 | VCC3 | A08 A08 A08 A08 A08 A08 A08 A08 I10 D0 A01 VCC // 26 24 24 | VDD | VCC VCC VCC VCC NC A13 A13 A13 I09 VCC A00 // 27 23 | -- | -- -- -- -- !P !P A14 A14 I08 -- // 28 22 | -- | -- -- -- -- VCC VCC VCC VCC VCC -- // To read 1702A, VCC= +5 (HIGH), PRM =HIGH, !CS = LOW, VBB= HIGH, VGG = VDD = -9VDC Need RB-509D installed. // To read 2704/2708 chips, Vcc=+5, VDD=+12, VBB=-5, !CS=HIGH, PRM either HIGH or LOW, VSS = LOW. Need RB-0505D and RB-0512S installed. // TO read 2716 chips, PRM = LOW, !CS =LOW, VPP= HIGH, VCC=5 // To read other 27* chips, !OE, !CE is set to LOW, and !P (if present) is HIGH // 6654: CE1 = low, CE2 = low, CS =low // To write to 2101 SRAM, !CE1=LOW, CE2=HIGH, OD=HIGH, RW=LOW, data read from DO pins // To read from 2101 SRAM, !CE1=LOW, CE2=HIGH, OD=LOW, RW=LOW, Data sent to DI pins. // To write to 2102 SRAM, !CE=LOW, RW=LOW, Data sent to DI pin. // To read from 2102 SRAM, !CE=LOW, RW=HIGH, Read DO pin #define LEDPin 13 //#define dataOutHex 1 #define dataOutOct 1 #define EPROM6654 1 //#define EPROM1702A 1 //#define EPROM2704 1 //#define EPROM2708 1 //define EPROM2716 1 //#define EPROM2732 1 //#define EPROM2764 1 //#define EPROM27128 1 //#define EPROM27256 1 //#define EPROM27512 1 //#define PLAChip 1 //#define ROM8316 1 //#define ROM6830 1 //#define RAM2101 1 //#define RAM2102 1 #ifdef EPROM6654 #define EPROM27SERIES 1 char EPROMType[] = "2704"; word EPROMSize=511; #endif #ifdef EPROM2704 #define EPROM27SERIES 1 char EPROMType[] = "2704"; word EPROMSize=511; #endif #ifdef EPROM2708 #define EPROM27SERIES 1 char EPROMType[] = "2708"; word EPROMSize=1023; #endif #ifdef EPROM2716 #define EPROM27SERIES 1 char EPROMType[] = "2716"; word EPROMSize=2047; #endif #ifdef EPROM2732 #define EPROM27SERIES 1 char EPROMType[] = "2732"; word EPROMSize=4095; #endif #ifdef EPROM2764 #define EPROM27SERIES 1 char EPROMType[] = "2764"; word EPROMSize=8191; #endif #ifdef EPROM27128 #define EPROM27SERIES 1 char EPROMType[] = "27128"; word EPROMSize=16383; #endif #ifdef EPROM27256 #define EPROM27SERIES 1 char EPROMType[] = "27256"; word EPROMSize=32767; #endif #ifdef EPROM27512 #define EPROM27SERIES 1 char EPROMType[] = "27512"; word EPROMSize=65535; #endif #ifdef PLAChip char EPROMType[] = "PLA"; word EPROMSize=65535; #endif #ifdef RAM2101 #define RAMTest 1 char EPROMType[] = "2101"; //word EPROMSize=255; #define VCC_pin 25 #define CE1_pin 28 #define CE2_pin 30 #define OD_pin 29 #define RW_pin 27 #define GND_pin 39 #define addr_A00_pin 43 #define addr_A01_pin 44 #define addr_A02_pin 45 #define addr_A03_pin 46 #define addr_A04_pin 26 #define addr_A05_pin 42 #define addr_A06_pin 41 #define addr_A07_pin 40 #define data_DO1_pin 37 #define data_DI1_pin 38 #define data_DO2_pin 35 #define data_DI2_pin 36 #define data_DO3_pin 33 #define data_DI3_pin 34 #define data_DO4_pin 31 #define data_DI4_pin 32 #endif #ifdef RAM2102 #define RAMTest 1 char EPROMType[] = "2102"; //word EPROMSize=1023; #define VCC_pin 34 #define CE_pin 31 #define RW_pin 41 #define GND_pin 35 #define addr_A00_pin 36 #define addr_A01_pin 40 #define addr_A02_pin 39 #define addr_A03_pin 38 #define addr_A04_pin 37 #define addr_A05_pin 42 #define addr_A06_pin 43 #define addr_A07_pin 28 #define addr_A08_pin 29 #define addr_A09_pin 30 #define data_DO_pin 32 #define data_DI_pin 33 #endif #ifdef ROM8316 char EPROMType[] = "8316A"; word EPROMSize=2047; #define VCC_pin 24 #define CS1_pin 33 #define CS2_pin 34 #define CS3_pin 35 #define GND_pin 36 #define addr_A00_pin 43 #define addr_A01_pin 42 #define addr_A02_pin 41 #define addr_A03_pin 40 #define addr_A04_pin 39 #define addr_A05_pin 38 #define addr_A06_pin 37 #define addr_A07_pin 47 #define addr_A08_pin 46 #define addr_A09_pin 45 #define addr_A10_pin 44 #define data_D0_pin 25 #define data_D1_pin 26 #define data_D2_pin 27 #define data_D3_pin 28 #define data_D4_pin 29 #define data_D5_pin 30 #define data_D6_pin 31 #define data_D7_pin 32 #endif #ifdef ROM6830 char EPROMType[] = "6830A"; word EPROMSize=1023; #define VCC_pin 36 #define CS0_pin 38 #define CS1_pin 37 #define CS2_pin 35 #define CS3_pin 34 #define GND_pin 47 #define addr_A00_pin 24 #define addr_A01_pin 25 #define addr_A02_pin 26 #define addr_A03_pin 27 #define addr_A04_pin 28 #define addr_A05_pin 29 #define addr_A06_pin 30 #define addr_A07_pin 31 #define addr_A08_pin 32 #define addr_A09_pin 33 #define data_D0_pin 46 #define data_D1_pin 45 #define data_D2_pin 44 #define data_D3_pin 43 #define data_D4_pin 42 #define data_D5_pin 41 #define data_D6_pin 40 #define data_D7_pin 39 #endif #ifdef EPROM1702A char EPROMType[] = "1702A"; word EPROMSize=255; #define addr_A00_pin 45 #define addr_A01_pin 46 #define addr_A02_pin 47 #define addr_A03_pin 27 #define addr_A04_pin 28 #define addr_A05_pin 29 #define addr_A06_pin 30 #define addr_A07_pin 31 #define data_D0_pin 44 #define data_D1_pin 43 #define data_D2_pin 42 #define data_D3_pin 41 #define data_D4_pin 40 #define data_D5_pin 39 #define data_D6_pin 38 #define data_D7_pin 37 #define CS_pin 34 #define VBB_pin 33 #define PRM_pin 35 #define VCC_pin 36 #define VCC2_pin 26 #define VCC3_pin 25 #define VDD_pin 24 #define VGG_pin 32 #endif #ifdef EPROM27SERIES #define addr_A00_pin 40 #define addr_A01_pin 41 #define addr_A02_pin 42 #define addr_A03_pin 43 #define addr_A04_pin 44 #define addr_A05_pin 45 #define addr_A06_pin 46 #define addr_A07_pin 47 #define addr_A08_pin 25 #define data_D0_pin 39 #define data_D1_pin 38 #define data_D2_pin 37 #define data_D3_pin 35 #define data_D4_pin 34 #define data_D5_pin 33 #define data_D6_pin 32 #define data_D7_pin 31 #define GND_pin 36 #endif #ifdef EPROM2704 #define VCC_pin 24 #define CS_pin 28 #define PRM_pin 30 #define VBB_pin 27 #define VSS_pin 26 #define VDD_pin 29 #endif #ifdef EPROM6654 #define VCC_pin 24 #define CE1_pin 28 #define PRM_pin 30 #define CS_pin 27 #define CE2_pin 26 #define VDD_pin 29 #endif #ifdef EPROM2708 #define VCC_pin 24 #define CS_pin 28 #define PRM_pin 30 #define VBB_pin 27 #define VDD_pin 29 #define addr_A09_pin 26 #endif #ifdef EPROM2716 #define VCC_pin 24 #define CS_pin 28 #define PRM_pin 30 #define VPP_pin 27 #define addr_A09_pin 26 #define addr_A10_pin 29 #endif #ifdef EPROM2732 #define VCC_pin 24 #define OE_pin 28 #define CE_pin 30 #define addr_A09_pin 26 #define addr_A10_pin 29 #define addr_A11_pin 27 #endif #ifdef EPROM2764 #define VCC_pin 22 #define OE_pin 28 #define CE_pin 30 #define P_pin 23 #define addr_A09_pin 26 #define addr_A10_pin 29 #define addr_A11_pin 27 #define addr_A12_pin 48 #endif #ifdef EPROM27128 #define VCC_pin 22 #define OE_pin 28 #define CE_pin 30 #define P_pin 23 #define addr_A09_pin 26 #define addr_A10_pin 29 #define addr_A11_pin 27 #define addr_A12_pin 48 #define addr_A13_pin 24 #endif #ifdef EPROM27256 #define VCC_pin 22 #define OE_pin 28 #define CE_pin 30 #define P_pin 23 #define addr_A09_pin 26 #define addr_A10_pin 29 #define addr_A11_pin 27 #define addr_A12_pin 48 #define addr_A13_pin 24 #define addr_A14_pin 23 #endif #ifdef EPROM27512 #define VCC_pin 22 #define OE_pin 28 #define CE_pin 30 #define addr_A09_pin 26 #define addr_A10_pin 29 #define addr_A11_pin 27 #define addr_A12_pin 48 #define addr_A13_pin 24 #define addr_A14_pin 23 #define addr_A15_pin 49 #endif #ifdef PLAChip #define VCC_pin 22 #define GND_pin 36 #define addr_A00_pin 41 #define addr_A01_pin 42 #define addr_A02_pin 43 #define addr_A03_pin 44 #define addr_A04_pin 45 #define addr_A05_pin 46 #define addr_A06_pin 47 #define addr_A07_pin 48 #define addr_A08_pin 23 #define addr_A09_pin 24 #define addr_A10_pin 25 #define addr_A11_pin 26 #define addr_A12_pin 27 #define addr_A13_pin 28 #define addr_A14_pin 29 #define addr_A15_pin 30 #define FE_pin 49 #define data_D0_pin 32 #define data_D1_pin 33 #define data_D2_pin 34 #define data_D3_pin 35 #define data_D4_pin 37 #define data_D5_pin 38 #define data_D6_pin 39 #define data_D7_pin 40 #endif void SetChip4Read() { digitalWrite(VCC_pin, HIGH); #ifdef GND_pin digitalWrite(GND_pin, LOW); #endif #ifdef ROM8316 digitalWrite(CS1_pin, LOW); digitalWrite(CS2_pin, LOW); digitalWrite(CS3_pin, LOW); digitalWrite(VCC_pin, HIGH); #endif #ifdef ROM6830 digitalWrite(CS0_pin, HIGH); digitalWrite(CS1_pin, HIGH); digitalWrite(CS2_pin, HIGH); digitalWrite(CS3_pin, HIGH); digitalWrite(VCC_pin, HIGH); #endif #ifdef EPROM1702A // Note -9V must be applied to pins VDD and VGG (chip pins 24 & 16 respectively) digitalWrite(VCC_pin, HIGH); digitalWrite(VCC2_pin, HIGH); digitalWrite(VCC3_pin, HIGH); digitalWrite(VBB_pin, HIGH); digitalWrite(PRM_pin, HIGH); digitalWrite(CS_pin, LOW); #endif #ifdef EPROM2704 // Note +12 must be applied to VDD *AND* -5V must be applied to VBB (chip pins 19 & 21 respectively) digitalWrite(VCC_pin, HIGH); digitalWrite(CS_pin, LOW); digitalWrite(PRM_pin, LOW); digitalWrite(VSS_pin, LOW); #endif #ifdef EPROM6654 digitalWrite(CE1_pin, LOW); digitalWrite(CS_pin, LOW); digitalWrite(CE2_pin, LOW); #endif #ifdef EPROM2708 // Note +12 must be applied to VDD *AND* -5V must be applied to VBB (chip pins 19 & 21 respectively) digitalWrite(VCC_pin, HIGH); digitalWrite(CS_pin, LOW); digitalWrite(PRM_pin, LOW); #endif #ifdef EPROM2716 digitalWrite(VCC_pin, HIGH); digitalWrite(VPP_pin, HIGH); digitalWrite(CS_pin, LOW); digitalWrite(PRM_pin, LOW); #endif #ifdef EPROM2732 digitalWrite(OE_pin, LOW); digitalWrite(CE_pin, LOW); digitalWrite(VCC_pin, HIGH); #endif #ifdef EPROM2764 digitalWrite(OE_pin, LOW); digitalWrite(CE_pin, LOW); digitalWrite(P_pin, HIGH); #endif #ifdef EPROM27128 digitalWrite(OE_pin, LOW); digitalWrite(CE_pin, LOW); digitalWrite(P_pin, HIGH); #endif #ifdef EPROM27256 digitalWrite(OE_pin, LOW); digitalWrite(CE_pin, LOW); //digitalWrite(VPP_pin, HIGH); #endif #ifdef EPROM27512 digitalWrite(OE_pin, LOW); digitalWrite(CE_pin, LOW); #endif #ifdef PLAChip digitalWrite(CE_pin, LOW); digitalWrite(FE_pin, LOW); #endif } void SetAddressPins(byte HighAddress, byte LowAddress) { digitalWrite(addr_A00_pin, (LowAddress & 0b00000001)); digitalWrite(addr_A01_pin, (LowAddress & 0b00000010)); digitalWrite(addr_A02_pin, (LowAddress & 0b00000100)); digitalWrite(addr_A03_pin, (LowAddress & 0b00001000)); digitalWrite(addr_A04_pin, (LowAddress & 0b00010000)); digitalWrite(addr_A05_pin, (LowAddress & 0b00100000)); digitalWrite(addr_A06_pin, (LowAddress & 0b01000000)); digitalWrite(addr_A07_pin, (LowAddress & 0b10000000)); #ifdef addr_A08_pin digitalWrite(addr_A08_pin, (HighAddress & 0b00000001)); #endif #ifdef addr_A09_pin digitalWrite(addr_A09_pin, (HighAddress & 0b00000010)); #endif #ifdef addr_A10_pin digitalWrite(addr_A10_pin, (HighAddress & 0b00000100)); #endif #ifdef addr_A11_pin digitalWrite(addr_A11_pin, (HighAddress & 0b00001000)); #endif #ifdef addr_A12_pin digitalWrite(addr_A12_pin, (HighAddress & 0b00010000)); #endif #ifdef addr_A13_pin digitalWrite(addr_A13_pin, (HighAddress & 0b00100000)); #endif #ifdef addr_A14_pin digitalWrite(addr_A14_pin, (HighAddress & 0b01000000)); #endif #ifdef addr_A15_pin digitalWrite(addr_A15_pin, (HighAddress & 0b10000000)); #endif } void SetPinModes() { pinMode(addr_A00_pin, OUTPUT); pinMode(addr_A01_pin, OUTPUT); pinMode(addr_A02_pin, OUTPUT); pinMode(addr_A03_pin, OUTPUT); pinMode(addr_A04_pin, OUTPUT); pinMode(addr_A05_pin, OUTPUT); pinMode(addr_A06_pin, OUTPUT); pinMode(addr_A07_pin, OUTPUT); pinMode(data_D0_pin, INPUT); pinMode(data_D1_pin, INPUT); pinMode(data_D2_pin, INPUT); pinMode(data_D3_pin, INPUT); pinMode(data_D4_pin, INPUT); pinMode(data_D5_pin, INPUT); pinMode(data_D6_pin, INPUT); pinMode(data_D7_pin, INPUT); pinMode(LEDPin, OUTPUT); #ifdef addr_A08_pin pinMode(addr_A08_pin, OUTPUT); #endif #ifdef addr_A09_pin pinMode(addr_A09_pin, OUTPUT); #endif #ifdef addr_A10_pin pinMode(addr_A10_pin, OUTPUT); #endif #ifdef addr_A11_pin pinMode(addr_A11_pin, OUTPUT); #endif #ifdef addr_A12_pin pinMode(addr_A12_pin, OUTPUT); #endif #ifdef addr_A13_pin pinMode(addr_A13_pin, OUTPUT); #endif #ifdef addr_A14_pin pinMode(addr_A14_pin, OUTPUT); #endif #ifdef addr_A15_pin pinMode(addr_A15_pin, OUTPUT); #endif #ifdef CS_pin pinMode(CS_pin, OUTPUT); #endif #ifdef CS1_pin pinMode(CS1_pin, OUTPUT); #endif #ifdef CS2_pin pinMode(CS2_pin, OUTPUT); #endif #ifdef CS3_pin pinMode(CS3_pin, OUTPUT); #endif #ifdef VBB_pin pinMode(VBB_pin, OUTPUT); #endif #ifdef PRM_pin pinMode(PRM_pin, OUTPUT); #endif #ifdef VSS_pin pinMode(VSS_pin, OUTPUT); #endif #ifdef VPP_pin pinMode(VPP_pin, OUTPUT); #endif #ifdef OE_pin pinMode(OE_pin, OUTPUT); #endif #ifdef CE_pin pinMode(CE_pin, OUTPUT); #endif #ifdef P_pin pinMode(P_pin, OUTPUT); #endif #ifdef VCC_pin pinMode(VCC_pin, OUTPUT); #endif #ifdef GND_pin pinMode(GND_pin, OUTPUT); #endif #ifdef VCC2_pin pinMode(VCC2_pin, OUTPUT); #endif #ifdef VCC3_pin pinMode(VCC3_pin, OUTPUT); #endif #ifdef FE_pin pinMode(FE_pin, OUTPUT); #endif } byte ReadDataValue() { byte temp = 0; //delay(2); if (digitalRead(data_D0_pin) == HIGH) { temp = (temp | 0b00000001); } if (digitalRead(data_D1_pin) == HIGH) { temp = (temp | 0b00000010); } if (digitalRead(data_D2_pin) == HIGH) { temp = (temp | 0b00000100); } if (digitalRead(data_D3_pin) == HIGH) { temp = (temp | 0b00001000); } if (digitalRead(data_D4_pin) == HIGH) { temp = (temp | 0b00010000); } if (digitalRead(data_D5_pin) == HIGH) { temp = (temp | 0b00100000); } if (digitalRead(data_D6_pin) == HIGH) { temp = (temp | 0b01000000); } if (digitalRead(data_D7_pin) == HIGH) { temp = (temp | 0b10000000); } return temp; } void BinaryStrZeroPad(int Number,char ZeroPadding){ //ZeroPadding = nth bit, e.g for a 16 bit number nth bit = 15 signed char i=ZeroPadding; while(i>=0){ if((Number & (1< 0) Serial.write('1'); else Serial.write('0'); --i; } } void setup() { // put your setup code here, to run once: //Serial.begin(2400); //Serial.begin(115200); Serial.begin(2000000); Serial.write("EPROM Type: "); Serial.write(EPROMType); Serial.write("\n\r"); SetPinModes(); // Setup pinmodes depending on chip digitalWrite(LEDPin, HIGH); SetChip4Read(); // Setup chip select, output enable pins etc for reading digitalWrite(VCC_pin, HIGH); #ifdef GND_pin digitalWrite(GND_pin, LOW); #endif int MaxHighAddress = (EPROMSize)/256; int MaxLowAddress = 256; // int MaxHighAddress = 1; // int MaxLowAddress = 8; byte dataValue = 0; #ifndef PLAChip for(int i = 0; i <= MaxHighAddress; i++) { for(int j = 0; j < MaxLowAddress/8; j++) { // Serial.print(256*i+j*8, OCT); // Serial.print((256*i)+(j*8), HEX); // Serial.print("\t"); for(int k = 0; k < 8; k++) { SetAddressPins(byte(i), byte(j*8+k)); dataValue = ReadDataValue(); // Serial.print("\t"); #ifdef dataOutOct Serial.print(dataValue, OCT); #endif #ifdef dataOutHex Serial.print(dataValue, HEX); #endif Serial.print("\t"); } Serial.print("\n"); } } digitalWrite(LEDPin, LOW); #endif #ifdef PLAChip for(int i = 0; i <= MaxHighAddress; i++) { for(int j = 0; j < MaxLowAddress; j++) { SetAddressPins(byte(i), byte(j)); dataValue = ReadDataValue(); //Serial.print(256*i+j, BIN); //Serial.print(256*i+j, HEX); // Serial.print("\t"); BinaryStrZeroPad(i,7); BinaryStrZeroPad(j,7); Serial.print("\t"); //Serial.print(dataValue, BIN); BinaryStrZeroPad(dataValue, 7); Serial.print("r"); } } digitalWrite(LEDPin, LOW); #endif } void loop() { // put your main code here, to run repeatedly: }