Advertisement
NittyGritty

SilentScope.ino

Jun 26th, 2021
965
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. /*
  2. Silent Scope 1/2 Timekeeper RAM programmer
  3. Version 0.2
  4. Made by Porchy, 2015
  5. http://www.jammarcade.net
  6. */
  7.  
  8. #define WE 23
  9. #define CE1 35
  10. #define CE2 46
  11. #define OE 31
  12. #define SDCS 53
  13.  
  14. #include <SPI.h>
  15. #include <SD.h>
  16.  
  17. File nvram;
  18.  
  19. int address[] = {38,36,34,32,30,28,26,24,25,27,33,29,22};
  20. int data[] = {40,42,44,45,43,41,39,37};
  21.  
  22. void setup()
  23. {
  24.   Serial.begin(9600);
  25.   pinMode(WE, OUTPUT);
  26.   pinMode(CE1, OUTPUT);
  27.   pinMode(CE2, OUTPUT);
  28.   pinMode(OE, OUTPUT);
  29.   digitalWrite(WE, HIGH);
  30.   digitalWrite(CE1, HIGH); //active low
  31.   digitalWrite(CE2, LOW); //active high
  32.   digitalWrite(OE, HIGH);
  33.  
  34.   //setup address pins
  35.   for (int addr=0;addr<=12;addr++)
  36.   {
  37.     pinMode(address[addr], OUTPUT);  
  38.   }
  39.  
  40.   //setup data pins
  41.   for (int dat=0;dat<=7;dat++)
  42.   {
  43.     pinMode(data[dat], OUTPUT);  
  44.   }
  45.    
  46.   Serial.print("Looking for SD card...");
  47.   pinMode(SDCS, OUTPUT);
  48.  
  49.   if (!SD.begin(SDCS))
  50.   {
  51.     Serial.print("No SD card found");
  52.     while(1); //stop
  53.   }
  54.    Serial.println("Found");
  55.  
  56.   if (!SD.exists("nvram.bin"))
  57.   {
  58.     Serial.println("NVRAM data not found.");
  59.     Serial.println("File ""nvram.bin"" needs to be present in root");
  60.     while(1); //stop
  61.   }
  62.   Serial.println("NVRAM data found.");
  63.   nvram = SD.open("nvram.bin", FILE_READ);
  64.  
  65.   Serial.println("Type 'S' to start");
  66.   bool start=false;
  67.   while(!start)
  68.   {
  69.     char wait = Serial.read();
  70.     if (wait=='S') start=true;
  71.   }
  72. }
  73.  
  74. void setaddr(uint16_t addr)
  75. {
  76.   addr = addr & 0x1fff; //trim if needed
  77.   int Bit=0;  
  78.   for (int setbit=0;setbit<13;setbit++)
  79.   {
  80.     Bit = ((addr >> setbit) & 1);
  81.     digitalWrite(address[setbit], Bit);
  82.   }
  83. }
  84.  
  85. void writedata(uint8_t thisData)
  86. {
  87.   digitalWrite(WE, LOW);
  88.   digitalWrite(CE1, LOW);
  89.   digitalWrite(CE2, HIGH);
  90.  
  91.   for (int dat=0; dat<8;dat++)
  92.   {
  93.     int Bit = ((thisData >> dat) & 1);
  94.     digitalWrite(data[dat], Bit);
  95.   }
  96.   digitalWrite(CE2, LOW);
  97.   digitalWrite(CE1, HIGH);
  98.   digitalWrite(WE, HIGH);
  99. }
  100.  
  101. void loop()
  102. {
  103.   Serial.println("Start");
  104.   for (uint16_t addr=0;addr<0x2000;++addr)
  105.   {
  106.     uint8_t thisByte = nvram.read();
  107.     setaddr(addr);
  108.     writedata(thisByte);
  109.   }
  110.   nvram.close();
  111.  
  112.   Serial.println("Finished");
  113.   while(1);
  114.  
  115. }
  116.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement