2023-10-19 20:53:47 +03:00
|
|
|
|
|
|
|
|
|
|
2023-10-23 23:02:01 +03:00
|
|
|
|
#include "global.h"
|
2023-10-06 15:57:30 +03:00
|
|
|
|
|
2023-11-24 22:11:20 +03:00
|
|
|
|
SaveFile gSaveIOBuffer;
|
|
|
|
|
SaveFile sPrevSaveData;
|
2023-11-13 01:49:03 +03:00
|
|
|
|
|
2023-11-24 22:11:20 +03:00
|
|
|
|
s32 Save_ReadBlock(s32 arg0, u8* arg1) {
|
2023-11-13 01:49:03 +03:00
|
|
|
|
if (osEepromRead(&gSerialEventQueue, arg0, arg1)) {
|
2023-11-08 01:32:09 +03:00
|
|
|
|
(void) "EEPROM インターフェース回路反応なし (READ)\n";
|
2023-10-06 16:39:19 +03:00
|
|
|
|
return -1;
|
|
|
|
|
}
|
2023-11-08 01:32:09 +03:00
|
|
|
|
(void) "EEPROM READ %02X: %02X %02X %02X %02X %02X %02X %02X %02X\n";
|
|
|
|
|
return 0;
|
2023-10-06 16:39:19 +03:00
|
|
|
|
}
|
2023-10-06 15:57:30 +03:00
|
|
|
|
|
2023-11-24 22:11:20 +03:00
|
|
|
|
s32 Save_WriteBlock(s32 arg0, u8* arg1) {
|
2023-11-13 01:49:03 +03:00
|
|
|
|
if (osEepromWrite(&gSerialEventQueue, arg0, arg1)) {
|
2023-11-08 01:32:09 +03:00
|
|
|
|
(void) "EEPROM インターフェース回路反応なし (WRITE)\n";
|
2023-10-07 13:58:32 +03:00
|
|
|
|
return -1;
|
|
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
|
Timer_Wait(MSEC_TO_CYCLES(15));
|
2023-11-08 01:32:09 +03:00
|
|
|
|
(void) "EEPROM WRITE %02X: %02X %02X %02X %02X %02X %02X %02X %02X\n";
|
2023-10-07 13:58:32 +03:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
2023-10-06 15:57:30 +03:00
|
|
|
|
|
2023-11-24 22:11:20 +03:00
|
|
|
|
s32 Save_WriteEeprom(SaveFile* arg0) {
|
2023-11-08 01:32:09 +03:00
|
|
|
|
s32 var_a2;
|
|
|
|
|
s32 i;
|
|
|
|
|
s32 j;
|
|
|
|
|
|
2023-11-13 01:49:03 +03:00
|
|
|
|
if (osEepromProbe(&gSerialEventQueue) != 1) {
|
|
|
|
|
(void) "EEPROM が ありません\n";
|
2023-11-08 01:32:09 +03:00
|
|
|
|
return -1;
|
|
|
|
|
}
|
2023-11-13 01:49:03 +03:00
|
|
|
|
for (i = 0; i < EEPROM_MAXBLOCKS; i++) {
|
2023-11-08 01:32:09 +03:00
|
|
|
|
var_a2 = 0;
|
2023-11-13 01:49:03 +03:00
|
|
|
|
for (j = 0; j < EEPROM_BLOCK_SIZE; j++) {
|
2023-11-24 22:11:20 +03:00
|
|
|
|
if (((char*) &sPrevSaveData)[EEPROM_BLOCK_SIZE * i + j] != ((char*) arg0)[EEPROM_BLOCK_SIZE * i + j]) {
|
|
|
|
|
((char*) &sPrevSaveData)[EEPROM_BLOCK_SIZE * i + j] = ((char*) arg0)[EEPROM_BLOCK_SIZE * i + j];
|
2023-11-08 01:32:09 +03:00
|
|
|
|
var_a2 = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
|
if ((var_a2 == 1) && Save_WriteBlock(i, &((char*) arg0)[EEPROM_BLOCK_SIZE * i])) {
|
2023-11-08 01:32:09 +03:00
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2023-10-06 15:57:30 +03:00
|
|
|
|
|
2023-11-24 22:11:20 +03:00
|
|
|
|
s32 Save_ReadEeprom(SaveFile* arg0) {
|
2023-11-08 01:32:09 +03:00
|
|
|
|
s32 i;
|
2023-10-19 20:53:47 +03:00
|
|
|
|
|
2023-11-13 01:49:03 +03:00
|
|
|
|
if (osEepromProbe(&gSerialEventQueue) != 1) {
|
2023-11-08 01:32:09 +03:00
|
|
|
|
(void) "EEPROM が ありません\n";
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
2023-11-13 01:49:03 +03:00
|
|
|
|
for (i = 0; i < EEPROM_MAXBLOCKS; i++) {
|
2023-11-24 22:11:20 +03:00
|
|
|
|
if (Save_ReadBlock(i, &((char*) arg0)[EEPROM_BLOCK_SIZE * i]) != 0) {
|
2023-11-08 01:32:09 +03:00
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
|
sPrevSaveData = *arg0;
|
2023-11-08 01:32:09 +03:00
|
|
|
|
return 0;
|
|
|
|
|
}
|