diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bg_palette_buffer.c | 15 | ||||
-rw-r--r-- | src/file_system.c | 34 | ||||
-rw-r--r-- | src/flash.c | 3 | ||||
-rw-r--r-- | src/memory.c | 62 | ||||
-rw-r--r-- | src/save.c | 33 | ||||
-rw-r--r-- | src/save1.c | 13 | ||||
-rw-r--r-- | src/sprite.c | 10 |
7 files changed, 137 insertions, 33 deletions
diff --git a/src/bg_palette_buffer.c b/src/bg_palette_buffer.c index 5e078a0..6301bfa 100644 --- a/src/bg_palette_buffer.c +++ b/src/bg_palette_buffer.c @@ -1,7 +1,10 @@ #include "global.h" -extern u16 gBGPaletteBuffer[512]; -extern bool8 gBGPaletteUsed[32]; +#define BG_PALETTE_BUFFER_SIZE 512 +#define BG_PALETTE_BUFFER_CHUNK_SIZE 16 + +extern u16 gBGPaletteBuffer[BG_PALETTE_BUFFER_SIZE]; +extern bool8 gBGPaletteUsed[BG_PALETTE_BUFFER_SIZE / BG_PALETTE_BUFFER_CHUNK_SIZE]; extern void CpuCopy(void* src, void* dest, u32 size); @@ -55,13 +58,13 @@ void SetBGPaletteBufferColorRGB(s32 index, u8 *RGBArray, s32 a3, u8 *a4) void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray) { - gBGPaletteUsed[index / 16] = TRUE; + gBGPaletteUsed[index / BG_PALETTE_BUFFER_CHUNK_SIZE] = TRUE; gBGPaletteBuffer[index] = (colorArray[2] >> 3) << 10 | (colorArray[1] >> 3) << 5 | colorArray[0] >> 3; } void SetBGPaletteBufferColor(s32 index, u16 *color) { - gBGPaletteUsed[index / 16] = TRUE; + gBGPaletteUsed[index / BG_PALETTE_BUFFER_CHUNK_SIZE] = TRUE; gBGPaletteBuffer[index] = *color; } @@ -98,5 +101,5 @@ void TransferBGPaletteBuffer(void) dest += 16; paletteBufferIndex += 16; } - while ( paletteBufferIndex < 512 ); -}
\ No newline at end of file + while ( paletteBufferIndex < BG_PALETTE_BUFFER_SIZE ); +} diff --git a/src/file_system.c b/src/file_system.c index 296478d..9c069ff 100644 --- a/src/file_system.c +++ b/src/file_system.c @@ -25,9 +25,9 @@ struct SiroArchive u8 *data; }; -extern struct OpenedFile gUnknown_202D2A8[]; +extern struct OpenedFile gFileCache[64]; -extern u32 gUnknown_203B094; +extern u32 gFileCacheCursorPosition; extern u32 gUnknown_202D2A4; extern int sprintf(char *, const char *, ...); @@ -41,11 +41,11 @@ void InitFileSystem(void) for (i = 0; i < 64; i++) { - gUnknown_202D2A8[i].file = NULL; - gUnknown_202D2A8[i].data = NULL; + gFileCache[i].file = NULL; + gFileCache[i].data = NULL; } - gUnknown_203B094 = 0; + gFileCacheCursorPosition = 0; gUnknown_202D2A4 = 1; } @@ -62,8 +62,8 @@ struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc) s32 left, right; s32 cursor; s32 i; - s32 magic = 0; - s32 magicFound; + u32 magic = 0; + bool32 magicFound; struct File *entries; struct File *file; @@ -71,7 +71,7 @@ struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc) magicFound = 0; - if (!(u8)magic) + if (!(bool8)magic) magicFound = 1; if (!magicFound) @@ -108,18 +108,18 @@ struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc) return NULL; } - cursor = gUnknown_203B094; + cursor = gFileCacheCursorPosition; for (i = 0; i < 64; i++) { cursor++; if (cursor > 63) cursor = 0; - if (!gUnknown_202D2A8[cursor].file) + if (!gFileCache[cursor].file) { - gUnknown_202D2A8[cursor].file = file; - gUnknown_202D2A8[cursor].data = NULL; - return &gUnknown_202D2A8[cursor]; + gFileCache[cursor].file = file; + gFileCache[cursor].data = NULL; + return &gFileCache[cursor]; } } @@ -157,11 +157,11 @@ void CloseFile(struct OpenedFile *openedFile) for (i = 0; i < 64; i++) { - if (&gUnknown_202D2A8[i] == openedFile) + if (&gFileCache[i] == openedFile) { - gUnknown_202D2A8[i].file = NULL; - gUnknown_202D2A8[i].data = NULL; - gUnknown_203B094 = i; + gFileCache[i].file = NULL; + gFileCache[i].data = NULL; + gFileCacheCursorPosition = i; return; } } diff --git a/src/flash.c b/src/flash.c index b9ccf40..11520b4 100644 --- a/src/flash.c +++ b/src/flash.c @@ -1,12 +1,11 @@ #include "global.h" #include "gba/flash.h" #include "flash.h" +#include "memory.h" extern u8 gFlashEnabled; extern FlashIntrFunc *sub_800B6E8(s32); -extern void MemoryFill8(void *, u8, s32); -extern void MemoryCopy8(void *, void *, s32); static u8 TryProgramSector(s32, u8 *); diff --git a/src/memory.c b/src/memory.c index 1ccbe54..0d282d5 100644 --- a/src/memory.c +++ b/src/memory.c @@ -1,8 +1,16 @@ #include "global.h" +#include "memory.h" + +extern struct HeapFreeListElement gMainHeapFreeList[32]; +extern u8 gMainHeap[HEAP_SIZE]; +extern u32 gHeapCount; +extern struct HeapDescriptor gMainHeapDescriptor; +extern struct HeapDescriptor *gHeapDescriptorList[8]; -extern void InitHeapInternal(void); extern void CpuClear(u32 *dest, s32 size); +void InitHeapInternal(void); + void InitHeap(void) { InitHeapInternal(); @@ -82,4 +90,56 @@ void MemoryCopy32(u32 *dest, u32 *src, s32 size) size -= 4; *dest++ = *src++; } +} + +void InitHeapInternal(void) +{ + struct HeapSettings settings; + + settings.start = gMainHeap; + settings.size = HEAP_SIZE; + gHeapCount = 0; + DoInitHeap(&gMainHeapDescriptor, &settings, gMainHeapFreeList, sizeof(gMainHeapFreeList) / sizeof(struct HeapFreeListElement)); +} + +void DoInitHeap(struct HeapDescriptor *descriptor, struct HeapSettings *settings, struct HeapFreeListElement *freeList, u32 freeListLength) +{ + u32 aligned_size; + + aligned_size = settings->size & 0xFFFFFFFC; + + gHeapDescriptorList[gHeapCount++] = descriptor; + + descriptor->start = settings->start; + descriptor->size = aligned_size; + descriptor->unk0 = 2; + descriptor->unk4 = 0; + descriptor->freeList = freeList; + descriptor->freeCount = 1; + descriptor->freeListLength = freeListLength; + + freeList->unk_atb = 0; + freeList->atb = 0; + freeList->block.start = descriptor->start; + freeList->block.size = aligned_size; + freeList->block.allocatedSize = 0; + freeList->grp = 0; +} + +void InitSubHeap(struct HeapDescriptor *parentHeap, struct HeapFreeListElement *start, u32 freeListMax) +{ + u32 freeListSize; + u32 aligned_size; + u32 alignment; + struct HeapFreeListElement *freeList; + struct HeapSettings settings; + + freeListSize = freeListMax * 3; + alignment = ~3; + freeListSize *= 8; + aligned_size = (start->atb - freeListSize) & alignment; //possible struct misalignment? + freeList = (struct HeapFreeListElement *)start->unk_atb; + settings.start = &((u8 *)start->unk_atb)[freeListSize]; + settings.size = aligned_size; + DoInitHeap(parentHeap, &settings, freeList, freeListMax); }
\ No newline at end of file @@ -2,8 +2,10 @@ extern u32 gUnknown_203B17C; extern u32 gUnknown_203B180; +extern u32 *gUnknown_203B184; extern u32 gUnknown_202DE28; + u32 sub_8011C1C(void) { return gUnknown_203B17C; @@ -29,17 +31,34 @@ u32 sub_8011C4C(void) return gUnknown_203B180; } -void sub_8011C58(u32 *out, u32 len) +void CalculateChecksum(u8 *out, u32 size) { - u32 sum = 0; - s32 i = len / 4; + u32 checksum = 0; + s32 i = size / 4; if (i > 1) { - u32 *ptr = &out[1]; + u32 *ptr = (u32 *)&out[4]; --i; do - sum += *ptr++; + checksum += *ptr++; while (--i); } - *out = sum; -}
\ No newline at end of file + *(u32 *)out = checksum; +} + +bool8 ValidateChecksum(u8 *in, u32 size) +{ + u32 checksum = 0; + s32 i = size / 4; + if (i > 1) + { + u32 *ptr = (u32 *)&in[4]; + --i; + do + checksum += *ptr++; + while (--i); + } + if (*(u32 *)in != checksum) + return TRUE; + return FALSE; +} diff --git a/src/save1.c b/src/save1.c new file mode 100644 index 0000000..94f9c2b --- /dev/null +++ b/src/save1.c @@ -0,0 +1,13 @@ +#include "global.h" + +extern void MemoryFree(void *); + +extern u8 *gUnknown_203B194; + +void sub_80129FC() +{ + if (gUnknown_203B194) { + MemoryFree(gUnknown_203B194); + gUnknown_203B194 = NULL; + } +}
\ No newline at end of file diff --git a/src/sprite.c b/src/sprite.c new file mode 100644 index 0000000..41a2a96 --- /dev/null +++ b/src/sprite.c @@ -0,0 +1,10 @@ +#include "global.h" + +void sub_8004D8C(u32); +void SetSavingIconCoords(u32); + +void InitSprites(void) +{ + sub_8004D8C(1); + SetSavingIconCoords(0); +}
\ No newline at end of file |