aboutsummaryrefslogtreecommitdiffhomepage
path: root/Cart_Reader/SUPRACAN.ino
diff options
context:
space:
mode:
Diffstat (limited to 'Cart_Reader/SUPRACAN.ino')
-rw-r--r--Cart_Reader/SUPRACAN.ino72
1 files changed, 27 insertions, 45 deletions
diff --git a/Cart_Reader/SUPRACAN.ino b/Cart_Reader/SUPRACAN.ino
index bad2c14..956c2fe 100644
--- a/Cart_Reader/SUPRACAN.ino
+++ b/Cart_Reader/SUPRACAN.ino
@@ -44,9 +44,7 @@ void setup_SuprAcan() {
PORTG |= (1 << 5);
dataOut_MD();
- writeWord_Acan(0xaaaa, 0xaaaa);
- writeWord_Acan(0x5555, 0x5555);
- writeWord_Acan(0xaaaa, 0x9090);
+ writeCommand_Acan(0, 0x9090);
dataIn_MD();
eepbit[0] = readWord_Acan(0x2);
@@ -145,6 +143,26 @@ void suprAcanMenu() {
wait();
}
+static void writeCommand_Acan(uint32_t offset, uint16_t command) {
+ writeWord_Acan(offset + 0xaaaa, 0xaaaa);
+ writeWord_Acan(offset + 0x5555, 0x5555);
+ writeWord_Acan(offset + 0xaaaa, command);
+}
+
+static void openFile_Acan() {
+ filePath[0] = 0;
+ sd.chdir();
+ fileBrowser(FS(FSTRING_SELECT_FILE));
+ snprintf(filePath, FILEPATH_LENGTH, "%s/%s", filePath, fileName);
+
+ display_Clear();
+
+ if (!myFile.open(filePath, O_READ)) {
+ print_Error(FS(FSTRING_FILE_DOESNT_EXIST));
+ return;
+ }
+}
+
static void readROM_Acan() {
uint32_t crc32 = 0xffffffff;
@@ -191,17 +209,7 @@ static void readSRAM_Acan() {
}
static void writeSRAM_Acan() {
- filePath[0] = 0;
- sd.chdir();
- fileBrowser(FS(FSTRING_SELECT_FILE));
- snprintf(filePath, FILEPATH_LENGTH, "%s/%s", filePath, fileName);
-
- display_Clear();
-
- if (!myFile.open(filePath, O_READ)) {
- print_Error(FS(FSTRING_FILE_DOESNT_EXIST));
- return;
- }
+ openFile_Acan();
print_Msg(F("Writing "));
print_Msg(filePath);
@@ -307,17 +315,7 @@ static void verifyUM6650() {
}
static void writeUM6650() {
- filePath[0] = 0;
- sd.chdir("/");
- fileBrowser(FS(FSTRING_SELECT_FILE));
- snprintf(filePath, FILEPATH_LENGTH, "%s/%s", filePath, fileName);
-
- display_Clear();
-
- if (!myFile.open(filePath, O_READ)) {
- print_Error(FS(FSTRING_FILE_DOESNT_EXIST));
- return;
- }
+ openFile_Acan();
uint16_t len = myFile.read(sdBuffer, 256);
myFile.close();
@@ -342,17 +340,7 @@ static void writeUM6650() {
static void flashCart_Acan() {
uint32_t *flash_size = (uint32_t *)(eepbit + 4);
- filePath[0] = 0;
- sd.chdir();
- fileBrowser(FS(FSTRING_SELECT_FILE));
- snprintf(filePath, FILEPATH_LENGTH, "%s/%s", filePath, fileName);
-
- display_Clear();
-
- if (!myFile.open(filePath, O_READ)) {
- print_Error(FS(FSTRING_FILE_DOESNT_EXIST));
- return;
- }
+ openFile_Acan();
print_Msg(F("Writing "));
print_Msg(filePath + 1);
@@ -370,12 +358,8 @@ static void flashCart_Acan() {
for (i = 0; i < file_length; i += *flash_size) {
// erase chip
dataOut_MD();
- writeWord_Acan(i + 0xaaaa, 0xaaaa);
- writeWord_Acan(i + 0x5555, 0x5555);
- writeWord_Acan(i + 0xaaaa, 0x8080);
- writeWord_Acan(i + 0xaaaa, 0xaaaa);
- writeWord_Acan(i + 0x5555, 0x5555);
- writeWord_Acan(i + 0xaaaa, 0x1010);
+ writeCommand_Acan(i, 0x8080);
+ writeCommand_Acan(i, 0x1010);
dataIn_MD();
while (readWord_Acan(i) != 0xffff)
@@ -388,9 +372,7 @@ static void flashCart_Acan() {
data = *((uint16_t *)(sdBuffer + k));
dataOut_MD();
- writeWord_Acan(i + 0xaaaa, 0xaaaa);
- writeWord_Acan(i + 0x5555, 0x5555);
- writeWord_Acan(i + 0xaaaa, 0xa0a0);
+ writeCommand_Acan(i, 0xa0a0);
writeWord_Acan(i + j + k, data);
dataIn_MD();