01: /*
02: PSX HC05 Dump program for Teensy >= 3.5
03: File "DUMPER.BIN" from no$cash must be present on the SD Card.
04: File "HC05.ROM" will be created on the SD Card.
05: Teensy Pin -> PSX Board
06: GND -> GND
07: 0 RX1 -> TX pin 50
08: 1 TX1 -> RX pin 51
09: */
10: #include <SD.h>
11: #include <SPI.h>
12:
13: byte hc05rom[0x4540];
14: byte dumper[512];
15:
16: void LoadFile(char *file, void *buffer)
17: {
18: uint8_t *ptr = (uint8_t *)buffer;
19: File dataFile = SD.open(file);
20: if (dataFile)
21: {
22: int n;
23: while (n = dataFile.available())
24: ptr += dataFile.read(ptr, n);
25: dataFile.close();
26: }
27: else
28: Serial.println("File not found !");
29: }
30:
31: void SaveFile(char *file, void *buffer, int size)
32: {
33: uint8_t *ptr = (uint8_t *)buffer;
34: File dataFile = SD.open(file, FILE_WRITE);
35: if (dataFile)
36: {
37: while (size)
38: {
39: int n = dataFile.write(ptr, (size > 16*1024) ? 16*1024 : size);
40: if (n <= 0)
41: break;
42: size -= n;
43: ptr += n;
44: }
45: dataFile.close();
46: }
47: }
48:
49: void setup()
50: {
51: int i;
52:
53: Serial.begin(9600);
54: while (!Serial); // Wait for Serial Console to Open on PC Side
55:
56: Serial.println("SD Card Init");
57: if (!SD.begin(BUILTIN_SDCARD))
58: return;
59: if (SD.exists("HC05.ROM"))
60: SD.remove("HC05.ROM");
61:
62: Serial.println("Reading DUMPER.BIN from SD Card");
63: LoadFile("DUMPER.BIN", dumper);
64:
65: Serial.println("Hardware Serial Init");
66: Serial1.begin(9600, SERIAL_8N1); // 10000 if not PU-8
67:
68: Serial.println("Sending DUMPER.BIN program to PSX");
69: for (i = 0; i < sizeof(dumper); i++)
70: Serial1.write(dumper[i]);
71:
72: Serial.println("Retrieving HC05 ROM from PSX");
73: for (i = 0; i < sizeof(hc05rom); i++)
74: {
75: while (!Serial1.available());
76: Serial.println(i, HEX);
77: hc05rom[i] = Serial1.read();
78: }
79:
80: Serial.println("Saving HC05.ROM to SD Card");
81: SaveFile("HC05.ROM", hc05rom, sizeof(hc05rom));
82:
83: Serial.println("done...");
84: }
85:
86: void loop()
87: {
88: }
89: