summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bg_palette_buffer.c15
-rw-r--r--src/file_system.c34
-rw-r--r--src/flash.c3
-rw-r--r--src/memory.c62
-rw-r--r--src/save.c33
-rw-r--r--src/save1.c13
-rw-r--r--src/sprite.c10
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
diff --git a/src/save.c b/src/save.c
index 575d4f1..5d39bfe 100644
--- a/src/save.c
+++ b/src/save.c
@@ -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