#include /* DDRx - The Port x Data Direction Register - read/write PORTx - The Port x Data Register - read/write PINx - The Port x Input Pins Register - read only 2716; 18:Vcc, 19:A10, 20:/CS, 21:Vcc, addrSize:2048 TBP28S86N; 18:Vcc, 19:Vcc, 20:/CS, 21:GND, addrSize:1024 */ #define SERIALBUFSIZE 11 char serialBuffer[SERIALBUFSIZE]; byte setBufPointer = 0; #define CS 10 #define OE 11 #define DEVVCC 12 #define REC_TYPE 0 #define DELAY 1 unsigned int addrSize = 1024; //2048; unsigned int lineSize = 16; void setup() { Serial.begin(9600); PORTD = 0xFF; PORTC = 0xFF; PORTB = 0xFF; // needed for switch from tristate to output low PORTA = 0xFF; DDRD = DDRD | 0b11111100; // switch all but serial pins to output DDRC = 0x00; // input DDRB = 0xFF; // output DDRA = 0xFF; // output PORTC = 0x00; Serial.println("PromRead(2716)"); delay(100); } void loop() { int addrPoint; int lsbCount; byte highAddr; byte lowAddr; byte data; unsigned int lineCheckSum = 0; unsigned long romCheckSum = 0; unsigned long tmp; char fmtStr[7]; for (addrPoint = 0; addrPoint < addrSize; addrPoint += lineSize) { sprintf(fmtStr, ":%02X", lineSize); Serial.print(fmtStr); // header & record size lineCheckSum = lineSize; sprintf(fmtStr, "%04X00", addrPoint); highAddr = addrPoint >> 8; lowAddr = addrPoint & 0xFF; lineCheckSum += highAddr; lineCheckSum += lowAddr; PORTA = highAddr; sprintf(fmtStr, "%02X", highAddr); // address MSB Serial.print(fmtStr); sprintf(fmtStr, "%02X", lowAddr); // address LSB 1st byte Serial.print(fmtStr); Serial.print("00"); // record type for (lsbCount = 0; lsbCount < lineSize; lsbCount++) { PORTB = lsbCount + lowAddr; digitalWrite(CS, LOW); digitalWrite(OE, LOW); delay(DELAY); data = PINC; delay(DELAY); digitalWrite(OE, HIGH); digitalWrite(CS, HIGH); sprintf(fmtStr, "%02X", data); // data Serial.print(fmtStr); delay(DELAY); lineCheckSum += data; romCheckSum += data; } sprintf(fmtStr, "%02X", (0x100 - lineCheckSum) & 0xFF); Serial.println(fmtStr); // lineCheckSum lineCheckSum = 0; } Serial.println(":00000001FF"); PORTB = 0x00; PORTA = 0x00; Serial.println(); Serial.print("romCheckSum: "); sprintf(fmtStr, "%02X", romCheckSum / 0x10000); Serial.print(fmtStr); sprintf(fmtStr, "%04X", romCheckSum % 0x10000); Serial.println(fmtStr); while(1) {} // halt }