rendered paste body/**
**/
//NEVER USE pin 0 and 1 as they are serial RX/TX and 13 as it is the attached LED that needs to be desoldered.
const int resetPin = 3;
const int clockPin = 4;
const int dataPin = 5;
const int version=0.2;
byte data1 =0;
//Define variables to hold the data
//for each shift register.
byte switch_var = 0x80; // 10000000(2)
void setup() {
Serial.begin(115200);
int pin;
pinMode (0,INPUT);
pinMode (1,OUTPUT);
for (pin=2; pin <= 9; pin++) {
pinMode (pin, INPUT);
}
//define pin modes
pinMode(resetPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
digitalWrite(clockPin,0); //initialize clock
digitalWrite(resetPin,0); //reset (clear) mode
}
void loop() {
Serial.println("WELCOME");
resetCounter();
uint32_t addr;
/** address size **/
for (addr =0;addr < 131072; addr++){
setAdress(addr);
readDigitalAndPrint();
}
Serial.println("ROM has been read.");
Serial.end();
}
void
setAdress(uint32_t address) {
uint8_t bits;
for (bits=0;bits<24;bits++) {
digitalWrite(dataPin,address & 1);
address = address >> 1;
digitalWrite(clockPin,0);
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
digitalWrite(clockPin,1);
}
}
void
readDigitalAndPrint() {
data1 = 0;
int i=0;
int pin=9;
for (i=0; i <8;i++){
if (digitalRead(pin) == HIGH) {
bitWrite(data1, (pin-2), HIGH);
}
pin--;
}
Serial.write(data1);
}
void
resetCounter() {
digitalWrite(resetPin, LOW);
/** EACH NOP is 62.5 ns **/
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
digitalWrite(resetPin, HIGH);
}