mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-07 03:04:19 -05:00
158 lines
5.2 KiB
C
158 lines
5.2 KiB
C
#ifndef POKEDIAMOND_SAVE_BLOCK_2_H
|
|
#define POKEDIAMOND_SAVE_BLOCK_2_H
|
|
|
|
#include "MATH_crc.h"
|
|
|
|
struct SavArrayHeader
|
|
{
|
|
int id;
|
|
u32 size;
|
|
u32 offset;
|
|
u16 field_C;
|
|
u16 field_E;
|
|
};
|
|
|
|
struct SavArrayFooter
|
|
{
|
|
u32 magic;
|
|
u32 unk_4;
|
|
u32 unk_8;
|
|
u16 unk_C;
|
|
u16 crc;
|
|
};
|
|
|
|
struct SaveChunkFooter
|
|
{
|
|
u32 unk_0;
|
|
u32 offset;
|
|
u32 size;
|
|
u32 magic;
|
|
u8 unk_10;
|
|
u8 padding_11;
|
|
u16 crc;
|
|
};
|
|
|
|
struct SaveBlock2_Sub_20464 {
|
|
u8 unk_0;
|
|
u8 unk_1;
|
|
u8 unk_2;
|
|
u8 padding_3;
|
|
u32 offset;
|
|
u32 size;
|
|
};
|
|
|
|
struct UnkSavSub_2047C
|
|
{
|
|
int unk_0;
|
|
int unk_4;
|
|
int unk_8;
|
|
int unk_C;
|
|
int unk_10;
|
|
u32 unk_14;
|
|
u32 unk_18;
|
|
u32 unk_1C[2];
|
|
};
|
|
|
|
struct UnkStruct_0202288C
|
|
{
|
|
BOOL unk_0;
|
|
u32 offset;
|
|
u32 size;
|
|
};
|
|
|
|
struct SaveBlock2
|
|
{
|
|
/* 0x00000 */ BOOL flashOkay;
|
|
/* 0x00004 */ int unk_00004;
|
|
/* 0x00008 */ int unk_00008;
|
|
/* 0x0000C */ int largeSectorChanged;
|
|
/* 0x00010 */ int unk_00010;
|
|
/* 0x00014 */ struct MATHCRC16Table crcTable;
|
|
/* 0x00214 */ u8 dynamic_region[0x20000];
|
|
/* 0x20214 */ u32 unk_20214;
|
|
/* 0x20218 */ u32 unk_20218[2];
|
|
/* 0x20220 */ u8 unk_20220[2];
|
|
/* 0x20222 */ u8 filler_20222[2];
|
|
/* 0x20224 */ struct SavArrayHeader arrayHeaders[36];
|
|
/* 0x20464 */ struct SaveBlock2_Sub_20464 saveSlotSpecs[2];
|
|
/* 0x2047C */ struct UnkSavSub_2047C unk_2047C;
|
|
/* 0x204A0 */ u32 unk_204A0;
|
|
/* 0x204A4 */ u32 unk_204A4;
|
|
}; // size: 0x204A8
|
|
|
|
typedef u32 (*SAVSIZEFN)(void);
|
|
typedef void (*SAVINITFN)(void *);
|
|
|
|
struct SaveChunkHeader
|
|
{
|
|
int id;
|
|
int linkedId;
|
|
SAVSIZEFN sizeFunc;
|
|
SAVINITFN initFunc;
|
|
};
|
|
|
|
extern const struct SaveChunkHeader UNK_020EE6E0[];
|
|
extern const struct SaveChunkHeader UNK_020EE700[];
|
|
extern const int UNK_020EE6DC;
|
|
extern const int UNK_020EE6D8;
|
|
|
|
struct SaveBlock2 * SaveBlock2_new(void);
|
|
struct SaveBlock2 * FUN_020225F8(void);
|
|
void * SavArray_get(struct SaveBlock2 * sav2, int idx);
|
|
void * FUN_02022634(struct SaveBlock2 * sav2, int idx);
|
|
BOOL FUN_0202263C(struct SaveBlock2 * sav2);
|
|
BOOL FUN_020226FC(struct SaveBlock2 * sav2);
|
|
int FUN_02022720(struct SaveBlock2 * sav2);
|
|
void FUN_020227A0(struct SaveBlock2 * sav2, int a1);
|
|
void Sav2_InitDynamicRegion(struct SaveBlock2 * sav2);
|
|
int FUN_020227FC(struct SaveBlock2 * sav2);
|
|
int FUN_02022800(struct SaveBlock2 * sav2);
|
|
int FUN_02022804(struct SaveBlock2 * sav2);
|
|
int FUN_02022808(struct SaveBlock2 * sav2);
|
|
BOOL FUN_0202280C(struct SaveBlock2 * sav2);
|
|
int SaveGetDirtyBit(struct SaveBlock2 * sav2);
|
|
void SaveSetDirtyBit(void);
|
|
void FUN_02022840(struct SaveBlock2 * sav2, int a1);
|
|
int FUN_02022854(struct SaveBlock2 * sav2);
|
|
void FUN_0202287C(struct SaveBlock2 * sav2);
|
|
void FUN_0202288C(struct UnkStruct_0202288C * header);
|
|
u16 FUN_02022898(struct SaveBlock2 * sav2, void * data, u32 size);
|
|
u32 GetChunkOffsetFromCurrentSaveSlot(u32 slot, struct SaveBlock2_Sub_20464 * header);
|
|
struct SaveChunkFooter * FUN_020228B8(struct SaveBlock2 * sav2, u8 * offset, int idx);
|
|
BOOL FUN_020228E0(struct SaveBlock2 * sav2, void * data, int idx);
|
|
void FUN_0202293C(struct UnkStruct_0202288C * r5, struct SaveBlock2 * sav2, void * data, int idx);
|
|
void FUN_02022968(struct SaveBlock2 * sav2, void * data, int idx);
|
|
int FUN_020229B8(u32 x, u32 y);
|
|
int FUN_020229F0(struct UnkStruct_0202288C * r7, struct UnkStruct_0202288C * r6, u32 * r5, u32 * r4);
|
|
void FUN_02022AA0(struct SaveBlock2 * sav2, struct UnkStruct_0202288C * a1, struct UnkStruct_0202288C * a2, u32 a3, u32 a4);
|
|
int FUN_02022AD8(struct SaveBlock2 * sav2);
|
|
BOOL FlashLoadChunkIntoDynamicRegionFromHeader(u32 slot, struct SaveBlock2_Sub_20464 * header, u8 * dest);
|
|
BOOL Sav2_LoadDynamicRegion(struct SaveBlock2 * sav2);
|
|
int FUN_02022D54(struct SaveBlock2 * sav2, int chunk, u8 slot);
|
|
int FUN_02022D94(struct SaveBlock2 * sav2, int chunk, u8 slot);
|
|
int FUN_02022DC8(struct SaveBlock2 * sav2, int chunk, u8 slot);
|
|
void FUN_02022DFC(struct SaveBlock2 * sav2, struct UnkSavSub_2047C * a1, int a2);
|
|
int FUN_02022E78(struct SaveBlock2 * sav2, struct UnkSavSub_2047C * a1);
|
|
void FUN_02022F80(struct SaveBlock2 * sav2, struct UnkSavSub_2047C * a1, int a2);
|
|
void FUN_02022FF0(struct SaveBlock2 * sav2, struct UnkSavSub_2047C * a1);
|
|
int FUN_02023044(struct SaveBlock2 * sav2);
|
|
int FlashClobberChunkFooter(struct SaveBlock2 * sav2, int x, u32 y);
|
|
u32 SavArray_sizeof(int idx);
|
|
void SaveBlock2_InitSubstructs(struct SavArrayHeader * headers);
|
|
void FUN_02023160(struct SaveBlock2_Sub_20464 * spec, struct SavArrayHeader * headers);
|
|
void Sav2_InitDynamicRegion_Internal(u8 * dynamic_region, struct SavArrayHeader * headers);
|
|
void CreateChunkFooter(struct SaveBlock2 * sav2, u8 * data, int id, u32 size);
|
|
BOOL ValidateChunk(struct SaveBlock2 * sav2, u8 * data, int id, u32 size);
|
|
u32 FUN_020232B4(u8 * data, u32 size);
|
|
int WriteSaveFileToFlash(struct SaveBlock2 * sav2, int idx, u8 * data);
|
|
u8 * ReadSaveFileFromFlash(struct SaveBlock2 * sav2, u32 heap_id, int idx, int * ret_p);
|
|
BOOL SaveDetectFlash(void);
|
|
int FlashWriteChunk(u32 offset, u8 * data, u32 size);
|
|
BOOL FlashLoadChunk(u32 src, void * dest, u32 size);
|
|
void FlashWriteCommandCallback(void * arg);
|
|
int FlashWriteChunkInternal(u32 dest, void * src, u32 size);
|
|
BOOL WaitFlashWrite(int lock, BOOL * res);
|
|
void SaveErrorHandling(int lock, int errno);
|
|
|
|
#endif //POKEDIAMOND_SAVE_BLOCK_2_H
|