/*
PSX HC05 Dump program for Teensy >= 3.5
File "DUMPER.BIN" from no$cash must be present on the SD Card.
File "HC05.ROM" will be created on the SD Card.
Teensy Pin -> PSX Board
GND -> GND
0 RX1 -> TX pin 50
1 TX1 -> RX pin 51
*/
#include <SD.h>
#include <SPI.h>
byte hc05rom[0x4540];
byte dumper[512];
void LoadFile(char *file, void *buffer)
{
uint8_t *ptr = (uint8_t *)buffer;
File dataFile = SD.open(file);
if (dataFile)
{
int n;
while (n = dataFile.available())
ptr += dataFile.read(ptr, n);
dataFile.close();
}
else
Serial.println("File not found !");
}
void SaveFile(char *file, void *buffer, int size)
{
uint8_t *ptr = (uint8_t *)buffer;
File dataFile = SD.open(file, FILE_WRITE);
if (dataFile)
{
while (size)
{
int n = dataFile.write(ptr, (size > 16*1024) ? 16*1024 : size);
if (n <= 0)
break;
size -= n;
ptr += n;
}
dataFile.close();
}
}
void setup()
{
int i;
Serial.begin(9600);
while (!Serial); // Wait for Serial Console to Open on PC Side
Serial.println("SD Card Init");
if (!SD.begin(BUILTIN_SDCARD))
return;
if (SD.exists("HC05.ROM"))
SD.remove("HC05.ROM");
Serial.println("Reading DUMPER.BIN from SD Card");
LoadFile("DUMPER.BIN", dumper);
Serial.println("Hardware Serial Init");
Serial1.begin(9600, SERIAL_8N1); // 10000 if not PU-8
Serial.println("Sending DUMPER.BIN program to PSX");
for (i = 0; i < sizeof(dumper); i++)
Serial1.write(dumper[i]);
Serial.println("Retrieving HC05 ROM from PSX");
for (i = 0; i < sizeof(hc05rom); i++)
{
while (!Serial1.available());
Serial.println(i, HEX);
hc05rom[i] = Serial1.read();
}
Serial.println("Saving HC05.ROM to SD Card");
SaveFile("HC05.ROM", hc05rom, sizeof(hc05rom));
Serial.println("done...");
}
void loop()
{
}