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