File: PSX_HC05.txt - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

/*
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()
{
}