#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 */ #define SERIALBUFSIZE 11 //char serialBuffer[SERIALBUFSIZE]; //byte setBufPointer = 0; #define CS 10 #define OE 11 #define DEVVCC 12 #define REC_TYPE 0 unsigned long addrSize = 65536; void setup() { Serial.begin(115200); delay(1000); 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 Serial.println("PAL16C1 read v1.0"); Serial.println("B7, B6,B5,B4,B3,B2, B1, B0, A7, A6, A5, A4,A3,A2,A1,A0, C0"); Serial.println("IORQ,M1,D2,D1,D0,A15,A14,A13,A12,A11,A10,A9,A8,A7,A6,A5, out"); delay(100); } void loop() { int addrPoint; byte data; char fmtStr[20]; for (addrPoint = 0; addrPoint < addrSize; addrPoint++) { // sprintf(fmtStr, "%04X\n", addrPoint); // Serial.print(fmtStr); printBinary(addrPoint); setAddress(addrPoint); data = 0x01 & getData(); Serial.println(data, DEC); } while(1) {} // halt } void setAddress(int address) { byte highAddr; byte lowAddr; highAddr = address >> 8; lowAddr = address & 0xFF; PORTA = highAddr; PORTB = lowAddr; } byte getData(void) { return PINC; } void printBinary(int address) { int bit; int bitCounter; address = address & 0xFFFF; for (bitCounter = 15; bitCounter >= 0; bitCounter--) { bit = (address & (1 << bitCounter)) ? 1 : 0; Serial.print(bit, DEC); } Serial.print(" "); }