NittyGritty icon

SilentScope.ino

NittyGritty | PRO | 06/26/21 06:20:03 PM UTC | 0 ⭐ | 1255 👁️ | Never ⏰ | []
C++ |

2.22 KB

|

None

|

0 👍

/

0 👎

/*
Silent Scope 1/2 Timekeeper RAM programmer
Version 0.2
Made by Porchy, 2015
http://www.jammarcade.net
*/
 
#define WE 23
#define CE1 35
#define CE2 46
#define OE 31
#define SDCS 53
 
#include <SPI.h>
#include <SD.h>
 
File nvram;
 
int address[] = {38,36,34,32,30,28,26,24,25,27,33,29,22};
int data[] = {40,42,44,45,43,41,39,37};
 
void setup() 
{
  Serial.begin(9600);
  pinMode(WE, OUTPUT);
  pinMode(CE1, OUTPUT);
  pinMode(CE2, OUTPUT);
  pinMode(OE, OUTPUT);
  digitalWrite(WE, HIGH);
  digitalWrite(CE1, HIGH); //active low
  digitalWrite(CE2, LOW); //active high
  digitalWrite(OE, HIGH);
  
  //setup address pins
  for (int addr=0;addr<=12;addr++)
  {
    pinMode(address[addr], OUTPUT);  
  }
 
  //setup data pins
  for (int dat=0;dat<=7;dat++)
  {
    pinMode(data[dat], OUTPUT);  
  }
    
  Serial.print("Looking for SD card...");
  pinMode(SDCS, OUTPUT);
  
  if (!SD.begin(SDCS))
  {
    Serial.print("No SD card found");
    while(1); //stop
  }
   Serial.println("Found");
 
  if (!SD.exists("nvram.bin"))
  {
    Serial.println("NVRAM data not found.");
    Serial.println("File ""nvram.bin"" needs to be present in root");
    while(1); //stop
  }
  Serial.println("NVRAM data found.");
  nvram = SD.open("nvram.bin", FILE_READ);
  
  Serial.println("Type 'S' to start");
  bool start=false;
  while(!start)
  {
    char wait = Serial.read();
    if (wait=='S') start=true;
  }
}
 
void setaddr(uint16_t addr)
{
  addr = addr & 0x1fff; //trim if needed
  int Bit=0;  
  for (int setbit=0;setbit<13;setbit++)
  {
    Bit = ((addr >> setbit) & 1);
    digitalWrite(address[setbit], Bit);
  }
}
 
void writedata(uint8_t thisData)
{
  digitalWrite(WE, LOW);
  digitalWrite(CE1, LOW);
  digitalWrite(CE2, HIGH);
  
  for (int dat=0; dat<8;dat++)
  {
    int Bit = ((thisData >> dat) & 1);
    digitalWrite(data[dat], Bit);
  }
  digitalWrite(CE2, LOW);
  digitalWrite(CE1, HIGH);
  digitalWrite(WE, HIGH);
}
 
void loop() 
{
  Serial.println("Start");
  for (uint16_t addr=0;addr<0x2000;++addr)
  {
    uint8_t thisByte = nvram.read();
    setaddr(addr);
    writedata(thisByte);
  }
  nvram.close();
  
  Serial.println("Finished");
  while(1);
 
}
 

Comments