summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xMakefile1
-rw-r--r--asm/bg_palette_buffer.s133
-rw-r--r--asm/input.s94
-rw-r--r--asm/memory.s242
-rw-r--r--asm/save.s68
-rwxr-xr-xld_script.txt3
-rw-r--r--src/bg_palette_buffer.c102
-rw-r--r--src/memory.c85
-rw-r--r--src/save.c45
-rw-r--r--sym_ewram.txt11
10 files changed, 326 insertions, 458 deletions
diff --git a/Makefile b/Makefile
index 0b86d1d..92e1edd 100755
--- a/Makefile
+++ b/Makefile
@@ -103,7 +103,6 @@ $(BUILD_DIR)/sym_%.ld: sym_%.txt
$(C_OBJECTS): $(BUILD_DIR)/%.o: %.c
@$(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i
- echo $(CC1) $(CC1FLAGS) $(BUILD_DIR)/$*.i -o $(BUILD_DIR)/$*.s
@$(CC1) $(CC1FLAGS) $(BUILD_DIR)/$*.i -o $(BUILD_DIR)/$*.s
@printf ".text\n\t.align\t2, 0\n" >> $(BUILD_DIR)/$*.s
$(AS) $(ASFLAGS) -o $@ $(BUILD_DIR)/$*.s
diff --git a/asm/bg_palette_buffer.s b/asm/bg_palette_buffer.s
index 9b42ee5..9cafb43 100644
--- a/asm/bg_palette_buffer.s
+++ b/asm/bg_palette_buffer.s
@@ -9,7 +9,7 @@
InitBGPaletteBuffer:
push {lr}
movs r2, 0
- ldr r1, _0800465C
+ ldr r1, =gBGPaletteBuffer
movs r0, 0x80
lsls r0, 2
_0800463E:
@@ -18,7 +18,7 @@ _0800463E:
subs r0, 0x1
cmp r0, 0
bne _0800463E
- ldr r1, _08004660
+ ldr r1, =gBGPaletteUsed
movs r2, 0x1
adds r0, r1, 0
adds r0, 0x1F
@@ -30,8 +30,7 @@ _08004650:
pop {r0}
bx r0
.align 2, 0
-_0800465C: .4byte gUnknown_20251F0
-_08004660: .4byte gUnknown_20251D0
+ .pool
thumb_func_end InitBGPaletteBuffer
thumb_func_start SetBGPaletteBufferColorRGB
@@ -47,7 +46,7 @@ _08004670:
ble _08004676
movs r2, 0x1F
_08004676:
- ldr r1, _080046CC
+ ldr r1, =gBGPaletteUsed
adds r0, r4, 0
cmp r4, 0
bge _08004680
@@ -59,7 +58,7 @@ _08004680:
strb r1, [r0]
cmp r3, 0
bne _080046D4
- ldr r0, _080046D0
+ ldr r0, =gBGPaletteBuffer
lsls r1, r4, 1
adds r6, r1, r0
ldrb r0, [r5, 0x2]
@@ -94,10 +93,9 @@ _080046C0:
strh r1, [r6]
b _08004722
.align 2, 0
-_080046CC: .4byte gUnknown_20251D0
-_080046D0: .4byte gUnknown_20251F0
+ .pool
_080046D4:
- ldr r1, _08004728
+ ldr r1, =gBGPaletteBuffer
lsls r0, r4, 1
adds r7, r0, r1
ldrb r0, [r5, 0x2]
@@ -144,120 +142,7 @@ _08004722:
pop {r0}
bx r0
.align 2, 0
-_08004728: .4byte gUnknown_20251F0
+ .pool
thumb_func_end SetBGPaletteBufferColorRGB
- thumb_func_start SetBGPaletteBufferColorArray
-SetBGPaletteBufferColorArray:
- push {lr}
- adds r2, r0, 0
- adds r3, r1, 0
- ldr r1, _08004764
- cmp r2, 0
- bge _0800473A
- adds r0, 0xF
-_0800473A:
- asrs r0, 4
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, _08004768
- lsls r2, 1
- adds r2, r0
- ldrb r1, [r3, 0x2]
- lsrs r1, 3
- lsls r1, 10
- ldrb r0, [r3, 0x1]
- lsrs r0, 3
- lsls r0, 5
- orrs r1, r0
- ldrb r0, [r3]
- lsrs r0, 3
- orrs r0, r1
- strh r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_08004764: .4byte gUnknown_20251D0
-_08004768: .4byte gUnknown_20251F0
- thumb_func_end SetBGPaletteBufferColorArray
-
- thumb_func_start SetBGPaletteBufferColor
-SetBGPaletteBufferColor:
- push {lr}
- adds r2, r0, 0
- adds r3, r1, 0
- ldr r1, _08004790
- cmp r2, 0
- bge _0800477A
- adds r0, 0xF
-_0800477A:
- asrs r0, 4
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r1, _08004794
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r3]
- strh r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08004790: .4byte gUnknown_20251D0
-_08004794: .4byte gUnknown_20251F0
- thumb_func_end SetBGPaletteBufferColor
-
- thumb_func_start nullsub_4
-nullsub_4:
- bx lr
- thumb_func_end nullsub_4
-
- thumb_func_start nullsub_5
-nullsub_5:
- bx lr
- thumb_func_end nullsub_5
-
- thumb_func_start nullsub_143
-nullsub_143:
- bx lr
- thumb_func_end nullsub_143
-
- thumb_func_start TransferBGPaletteBuffer
-TransferBGPaletteBuffer:
- push {r4-r6,lr}
- movs r6, 0
- movs r4, 0
- movs r5, 0xA0
- lsls r5, 19
-_080047AE:
- ldr r0, _080047DC
- adds r1, r6, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _080047CA
- movs r0, 0
- strb r0, [r1]
- lsls r1, r4, 1
- ldr r0, _080047E0
- adds r1, r0
- adds r0, r5, 0
- movs r2, 0x20
- bl CpuCopy
-_080047CA:
- adds r6, 0x1
- adds r5, 0x20
- adds r4, 0x10
- ldr r0, _080047E4
- cmp r4, r0
- ble _080047AE
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080047DC: .4byte gUnknown_20251D0
-_080047E0: .4byte gUnknown_20251F0
-_080047E4: .4byte 0x000001ff
- thumb_func_end TransferBGPaletteBuffer
-
- .align 2, 0 @ Don't pad with nop.
+.align 2, 0 @ Don't pad with nop. \ No newline at end of file
diff --git a/asm/input.s b/asm/input.s
index 7516a30..d439867 100644
--- a/asm/input.s
+++ b/asm/input.s
@@ -7,24 +7,24 @@
thumb_func_start InitInput
InitInput:
- ldr r0, _08004840
+ ldr r0, =gUnknown_20255F0
movs r3, 0
movs r2, 0
strh r2, [r0]
strh r2, [r0, 0x2]
strh r2, [r0, 0x4]
strh r2, [r0, 0x6]
- ldr r0, _08004844
+ ldr r0, =gUnknown_2025638
strh r2, [r0]
strh r2, [r0, 0x2]
strh r2, [r0, 0x4]
strh r2, [r0, 0x6]
- ldr r1, _08004848
- ldr r0, _0800484C
+ ldr r1, =gUnknown_202562C
+ ldr r0, =0x4a14c1
str r0, [r1]
- ldr r0, _08004850
+ ldr r0, =gUnknown_2025600
str r2, [r0, 0x20]
- ldr r1, _08004854
+ ldr r1, =0xffff
strh r1, [r0]
movs r1, 0x1
negs r1, r1
@@ -46,25 +46,19 @@ InitInput:
strb r3, [r1]
adds r0, 0x29
strb r3, [r0]
- ldr r0, _08004858
+ ldr r0, =gUnknown_2025668
strh r2, [r0]
strh r2, [r0, 0x2]
bx lr
.align 2, 0
-_08004840: .4byte gUnknown_20255F0
-_08004844: .4byte gUnknown_2025638
-_08004848: .4byte gUnknown_202562C
-_0800484C: .4byte 0x004a14c1
-_08004850: .4byte gUnknown_2025600
-_08004854: .4byte 0x0000ffff
-_08004858: .4byte gUnknown_2025668
+ .pool
thumb_func_end InitInput
thumb_func_start sub_800485C
sub_800485C:
push {r4,r5,lr}
- ldr r2, _080048A8
- ldr r1, _080048AC
+ ldr r2, =gUnknown_2025638
+ ldr r1, =gUnknown_20255F0
adds r0, r2, 0
ldm r0!, {r3-r5}
stm r1!, {r3-r5}
@@ -76,8 +70,8 @@ sub_800485C:
strh r0, [r2, 0x2]
strh r0, [r2, 0x4]
strh r0, [r2, 0x6]
- ldr r0, _080048B0
- ldr r1, _080048B4
+ ldr r0, =gUnknown_2025600
+ ldr r1, =0xffff
strh r1, [r0]
movs r1, 0x1
negs r1, r1
@@ -101,10 +95,7 @@ sub_800485C:
pop {r0}
bx r0
.align 2, 0
-_080048A8: .4byte gUnknown_2025638
-_080048AC: .4byte gUnknown_20255F0
-_080048B0: .4byte gUnknown_2025600
-_080048B4: .4byte 0x0000ffff
+ .pool
thumb_func_end sub_800485C
thumb_func_start sub_80048B8
@@ -145,49 +136,44 @@ sub_80048CC:
thumb_func_start sub_80048D0
sub_80048D0:
- ldr r1, _080048E8
+ ldr r1, =gUnknown_20255F0
movs r0, 0
strh r0, [r1, 0x4]
- ldr r1, _080048EC
+ ldr r1, =gUnknown_2025648
str r0, [r1, 0xC]
strh r0, [r1, 0x8]
- ldr r1, _080048F0
- ldr r0, _080048F4
+ ldr r1, =gUnknown_2025668
+ ldr r0, =0x3e7
strh r0, [r1]
strh r0, [r1, 0x2]
bx lr
.align 2, 0
-_080048E8: .4byte gUnknown_20255F0
-_080048EC: .4byte gUnknown_2025648
-_080048F0: .4byte gUnknown_2025668
-_080048F4: .4byte 0x000003e7
+ .pool
thumb_func_end sub_80048D0
thumb_func_start sub_80048F8
sub_80048F8:
- ldr r0, _08004908
+ ldr r0, =gUnknown_20255F0
movs r1, 0
strh r1, [r0, 0x2]
- ldr r0, _0800490C
+ ldr r0, =gUnknown_2025638
strh r1, [r0, 0x2]
- ldr r0, _08004910
+ ldr r0, =gUnknown_2025648
strh r1, [r0, 0x2]
bx lr
.align 2, 0
-_08004908: .4byte gUnknown_20255F0
-_0800490C: .4byte gUnknown_2025638
-_08004910: .4byte gUnknown_2025648
+ .pool
thumb_func_end sub_80048F8
thumb_func_start sub_8004914
sub_8004914:
- ldr r0, _0800494C
+ ldr r0, =gUnknown_2025600
movs r1, 0x5
str r1, [r0, 0x20]
movs r2, 0
movs r1, 0
strh r1, [r0, 0x24]
- ldr r1, _08004950
+ ldr r1, =0xffff
strh r1, [r0]
movs r1, 0x1
negs r1, r1
@@ -209,15 +195,14 @@ sub_8004914:
strb r2, [r0]
bx lr
.align 2, 0
-_0800494C: .4byte gUnknown_2025600
-_08004950: .4byte 0x0000ffff
+ .pool
thumb_func_end sub_8004914
thumb_func_start UpdateInput
UpdateInput:
push {r4-r6,lr}
- ldr r4, _08004998
- ldr r5, _0800499C
+ ldr r4, =gUnknown_2025658
+ ldr r5, =gUnknown_2025648
adds r1, r4, 0
adds r0, r5, 0
ldm r0!, {r2,r3,r6}
@@ -249,8 +234,7 @@ UpdateInput:
str r0, [r5, 0xC]
b _080049AC
.align 2, 0
-_08004998: .4byte gUnknown_2025658
-_0800499C: .4byte gUnknown_2025648
+ .pool
_080049A0:
strh r2, [r5, 0x8]
movs r0, 0x1
@@ -260,7 +244,7 @@ _080049A8:
str r0, [r5, 0xC]
strh r0, [r5, 0x8]
_080049AC:
- ldr r0, _080049C4
+ ldr r0, =gUnknown_2025648
ldr r2, [r0, 0xC]
adds r3, r0, 0
cmp r2, 0x1
@@ -273,7 +257,7 @@ _080049AC:
strh r1, [r3, 0x4]
b _080049E0
.align 2, 0
-_080049C4: .4byte gUnknown_2025648
+ .pool
_080049C8:
cmp r2, 0x30
bne _080049DC
@@ -300,7 +284,7 @@ _080049E0:
lsrs r2, r0, 16
cmp r2, 0
beq _08004A0C
- ldr r0, _08004A08
+ ldr r0, =gUnknown_2025668
ldrh r2, [r0]
movs r4, 0
ldrsh r1, [r0, r4]
@@ -311,9 +295,9 @@ _080049E0:
strh r0, [r4]
b _08004A20
.align 2, 0
-_08004A08: .4byte gUnknown_2025668
+ .pool
_08004A0C:
- ldr r1, _08004A44
+ ldr r1, =gUnknown_2025668
ldrh r0, [r1]
subs r0, 0x2
lsls r0, 16
@@ -343,7 +327,7 @@ _08004A20:
strh r0, [r4, 0x2]
b _08004A5E
.align 2, 0
-_08004A44: .4byte gUnknown_2025668
+ .pool
_08004A48:
ldrh r0, [r4, 0x2]
subs r0, 0x2
@@ -358,7 +342,7 @@ _08004A48:
_08004A5C:
strh r2, [r4, 0x2]
_08004A5E:
- ldr r2, _08004A94
+ ldr r2, =gUnknown_2025638
ldrh r0, [r2]
ldrh r1, [r3]
orrs r0, r1
@@ -375,9 +359,9 @@ _08004A5E:
ldrh r1, [r3, 0x6]
orrs r0, r1
strh r0, [r2, 0x6]
- ldr r2, _08004A98
+ ldr r2, =gUnknown_202562C
ldrh r0, [r3]
- ldr r1, _08004A9C
+ ldr r1, =0x054a1c41
orrs r0, r1
ldr r1, [r2]
muls r0, r1
@@ -386,9 +370,7 @@ _08004A5E:
pop {r0}
bx r0
.align 2, 0
-_08004A94: .4byte gUnknown_2025638
-_08004A98: .4byte gUnknown_202562C
-_08004A9C: .4byte 0x054a1c41
+ .pool
thumb_func_end UpdateInput
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/memory.s b/asm/memory.s
index e364f1b..418056c 100644
--- a/asm/memory.s
+++ b/asm/memory.s
@@ -4,177 +4,21 @@
.syntax unified
.text
-
- thumb_func_start InitHeap
-InitHeap:
- push {lr}
- bl InitHeapInternal
- pop {r0}
- bx r0
- thumb_func_end InitHeap
-
- thumb_func_start MemoryClear8
-MemoryClear8:
- push {lr}
- cmp r1, 0
- ble _08002EAA
- movs r2, 0
-_08002EA0:
- subs r1, 0x1
- strb r2, [r0]
- adds r0, 0x1
- cmp r1, 0
- bgt _08002EA0
-_08002EAA:
- pop {r0}
- bx r0
- thumb_func_end MemoryClear8
-
- thumb_func_start MemoryClear16
-MemoryClear16:
- push {lr}
- cmp r1, 0
- ble _08002EC2
- movs r2, 0
-_08002EB8:
- subs r1, 0x2
- strh r2, [r0]
- adds r0, 0x2
- cmp r1, 0
- bgt _08002EB8
-_08002EC2:
- pop {r0}
- bx r0
- thumb_func_end MemoryClear16
-
- thumb_func_start MemoryClear32
-MemoryClear32:
- push {lr}
- bl CpuClear
- pop {r0}
- bx r0
- thumb_func_end MemoryClear32
-
- thumb_func_start MemoryFill8
-MemoryFill8:
- push {lr}
- lsls r1, 24
- lsrs r1, 24
- cmp r2, 0
- ble _08002EE8
-_08002EDE:
- subs r2, 0x1
- strb r1, [r0]
- adds r0, 0x1
- cmp r2, 0
- bgt _08002EDE
-_08002EE8:
- pop {r0}
- bx r0
- thumb_func_end MemoryFill8
-
- thumb_func_start MemoryFill16
-MemoryFill16:
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- cmp r2, 0
- ble _08002F00
-_08002EF6:
- subs r2, 0x2
- strh r1, [r0]
- adds r0, 0x2
- cmp r2, 0
- bgt _08002EF6
-_08002F00:
- pop {r0}
- bx r0
- thumb_func_end MemoryFill16
-
- thumb_func_start MemoryFill32
-MemoryFill32:
- push {lr}
- cmp r2, 0
- ble _08002F12
-_08002F0A:
- subs r2, 0x4
- stm r0!, {r1}
- cmp r2, 0
- bgt _08002F0A
-_08002F12:
- pop {r0}
- bx r0
- thumb_func_end MemoryFill32
-
- thumb_func_start MemoryCopy8
-MemoryCopy8:
- push {lr}
- adds r3, r0, 0
- cmp r2, 0
- ble _08002F2E
-_08002F20:
- subs r2, 0x1
- ldrb r0, [r1]
- strb r0, [r3]
- adds r1, 0x1
- adds r3, 0x1
- cmp r2, 0
- bgt _08002F20
-_08002F2E:
- pop {r0}
- bx r0
- thumb_func_end MemoryCopy8
-
- thumb_func_start MemoryCopy16
-MemoryCopy16:
- push {lr}
- adds r3, r0, 0
- cmp r2, 0
- ble _08002F4A
-_08002F3C:
- subs r2, 0x2
- ldrh r0, [r1]
- strh r0, [r3]
- adds r1, 0x2
- adds r3, 0x2
- cmp r2, 0
- bgt _08002F3C
-_08002F4A:
- pop {r0}
- bx r0
- thumb_func_end MemoryCopy16
-
- thumb_func_start MemoryCopy32
-MemoryCopy32:
- push {lr}
- adds r3, r0, 0
- cmp r2, 0
- ble _08002F62
-_08002F58:
- subs r2, 0x4
- ldm r1!, {r0}
- stm r3!, {r0}
- cmp r2, 0
- bgt _08002F58
-_08002F62:
- pop {r0}
- bx r0
- thumb_func_end MemoryCopy32
-
+
thumb_func_start InitHeapInternal
InitHeapInternal:
push {lr}
sub sp, 0x8
- ldr r0, _08002F90
+ ldr r0, =gHeap
str r0, [sp]
movs r0, 0x90
lsls r0, 10
str r0, [sp, 0x4]
- ldr r1, _08002F94
+ ldr r1, =gUnknown_2000EA8
movs r0, 0
str r0, [r1]
- ldr r0, _08002F98
- ldr r2, _08002F9C
+ ldr r0, =gUnknown_2000EB0
+ ldr r2, =gHeapHeader
mov r1, sp
movs r3, 0x20
bl DoInitHeap
@@ -182,10 +26,7 @@ InitHeapInternal:
pop {r0}
bx r0
.align 2, 0
-_08002F90: .4byte gUnknown_20011D0
-_08002F94: .4byte gUnknown_2000EA8
-_08002F98: .4byte gUnknown_2000EB0
-_08002F9C: .4byte gUnknown_2000ED0
+ .pool
thumb_func_end InitHeapInternal
thumb_func_start DoInitHeap
@@ -201,8 +42,8 @@ DoInitHeap:
mov r5, r9
ands r5, r4
mov r9, r5
- ldr r6, _08002FFC
- ldr r4, _08003000
+ ldr r6, =gUnknown_2000E88
+ ldr r4, =gUnknown_2000EA8
mov r8, r4
ldr r5, [r4]
lsls r4, r5, 2
@@ -237,8 +78,7 @@ DoInitHeap:
pop {r0}
bx r0
.align 2, 0
-_08002FFC: .4byte gUnknown_2000E88
-_08003000: .4byte gUnknown_2000EA8
+ .pool
thumb_func_end DoInitHeap
thumb_func_start InitSubHeap
@@ -361,7 +201,7 @@ _080030C2:
_080030CC:
movs r7, 0x1
negs r7, r7
- ldr r1, _08003100
+ ldr r1, =0x24001
movs r4, 0
ldr r3, [r5, 0x8]
ldr r2, [r5, 0xC]
@@ -389,7 +229,7 @@ _080030FC:
adds r0, r7, 0
b _08003108
.align 2, 0
-_08003100: .4byte 0x00024001
+ .pool
_08003104:
movs r0, 0x1
negs r0, r0
@@ -454,7 +294,7 @@ _0800315E:
_08003168:
movs r7, 0x1
negs r7, r7
- ldr r6, _080031A4
+ ldr r6, =0x24001
ldr r0, [r4, 0xC]
subs r3, r0, 0x1
lsls r0, r3, 1
@@ -486,7 +326,7 @@ _080031A0:
adds r0, r7, 0
b _080031AC
.align 2, 0
-_080031A4: .4byte 0x00024001
+ .pool
_080031A8:
movs r0, 0x1
negs r0, r0
@@ -561,13 +401,12 @@ _08003222:
str r2, [r1, 0xC]
cmp r2, r8
ble _08003240
- ldr r0, _08003238
- ldr r1, _0800323C
+ ldr r0, =gUnknown_80B7EB8
+ ldr r1, =gUnknown_80B7EC4
mov r3, r8
bl FatalError
.align 2, 0
-_08003238: .4byte gUnknown_80B7EB8
-_0800323C: .4byte gUnknown_80B7EC4
+ .pool
_08003240:
ldr r0, [sp, 0xC]
add r0, r9
@@ -671,13 +510,12 @@ _080032F6:
str r2, [r7, 0xC]
cmp r2, r8
ble _08003314
- ldr r0, _0800330C
- ldr r1, _08003310
+ ldr r0, =gUnknown_80B7EFC
+ ldr r1, =gUnknown_80B7EC4
mov r3, r8
bl FatalError
.align 2, 0
-_0800330C: .4byte gUnknown_80B7EFC
-_08003310: .4byte gUnknown_80B7EC4
+ .pool
_08003314:
ldr r0, [r4, 0x10]
ldr r1, [sp, 0x10]
@@ -717,7 +555,7 @@ _LocateSet:
adds r6, r2, 0
cmp r5, 0
bne _0800335C
- ldr r5, _08003390
+ ldr r5, =gUnknown_2000EB0
_0800335C:
asrs r4, r6, 8
movs r0, 0x1
@@ -743,7 +581,7 @@ _0800335C:
ldr r0, [r0, 0xC]
b _080033CC
.align 2, 0
-_08003390: .4byte gUnknown_2000EB0
+ .pool
_08003394:
adds r0, r5, 0
adds r1, r4, 0
@@ -760,16 +598,15 @@ _08003394:
ldr r0, [r0, 0xC]
b _080033CC
_080033B4:
- ldr r0, _080033C4
- ldr r1, _080033C8
+ ldr r0, =gUnknown_80B7F14
+ ldr r1, =gUnknown_80B7F20
str r4, [sp]
str r6, [sp, 0x4]
adds r2, r5, 0
adds r3, r7, 0
bl FatalError
.align 2, 0
-_080033C4: .4byte gUnknown_80B7F14
-_080033C8: .4byte gUnknown_80B7F20
+ .pool
_080033CC:
add sp, 0x8
pop {r4-r7}
@@ -782,25 +619,25 @@ MemoryAlloc:
push {lr}
adds r3, r0, 0
adds r2, r1, 0
- ldr r0, _080033E8
+ ldr r0, =gUnknown_2000EB0
adds r1, r3, 0
bl DoAlloc
pop {r1}
bx r1
.align 2, 0
-_080033E8: .4byte gUnknown_2000EB0
+ .pool
thumb_func_end MemoryAlloc
thumb_func_start MemoryFree
MemoryFree:
push {lr}
adds r1, r0, 0
- ldr r0, _080033FC
+ ldr r0, =gUnknown_2000EB0
bl DoFree
pop {r0}
bx r0
.align 2, 0
-_080033FC: .4byte gUnknown_2000EB0
+ .pool
thumb_func_end MemoryFree
thumb_func_start MemoryLocate_LocalCreate
@@ -813,7 +650,7 @@ MemoryLocate_LocalCreate:
adds r6, r3, 0
cmp r4, 0
bne _08003412
- ldr r4, _0800342C
+ ldr r4, =gUnknown_2000EB0
_08003412:
adds r0, r4, 0
movs r1, 0x9
@@ -822,14 +659,12 @@ _08003412:
adds r1, r0, 0
cmp r1, 0
bge _08003438
- ldr r0, _08003430
- ldr r1, _08003434
+ ldr r0, =gUnknown_80B7F88
+ ldr r1, =gUnknown_80B7F94
adds r2, r5, 0
bl FatalError
.align 2, 0
-_0800342C: .4byte gUnknown_2000EB0
-_08003430: .4byte gUnknown_80B7F88
-_08003434: .4byte gUnknown_80B7F94
+ .pool
_08003438:
str r6, [sp]
adds r0, r4, 0
@@ -893,11 +728,11 @@ _080034A2:
movs r0, 0
mov r12, r0
movs r3, 0
- ldr r6, _080034E0
+ ldr r6, =gUnknown_2000EA8
ldr r0, [r6]
cmp r12, r0
bge _080034F2
- ldr r5, _080034E4
+ ldr r5, =gUnknown_2000E88
adds r1, r6, 0
adds r7, r5, 0
movs r2, 0
@@ -911,7 +746,7 @@ _080034BC:
str r0, [r1]
cmp r3, r0
bge _080034F8
- ldr r1, _080034E0
+ ldr r1, =gUnknown_2000EA8
adds r2, r7
_080034D2:
ldr r0, [r2, 0x4]
@@ -922,8 +757,7 @@ _080034D2:
blt _080034D2
b _080034F8
.align 2, 0
-_080034E0: .4byte gUnknown_2000EA8
-_080034E4: .4byte gUnknown_2000E88
+ .pool
_080034E8:
adds r2, 0x4
adds r3, 0x1
@@ -966,7 +800,7 @@ DoFree:
adds r4, r0, 0
cmp r4, 0
bne _0800352E
- ldr r4, _080035D4
+ ldr r4, =gUnknown_2000EB0
_0800352E:
cmp r1, 0
beq _080035E4
@@ -1056,7 +890,7 @@ _080035BA:
blt _080035BA
b _080035E4
.align 2, 0
-_080035D4: .4byte gUnknown_2000EB0
+ .pool
_080035D8:
movs r0, 0x1
add r8, r0
diff --git a/asm/save.s b/asm/save.s
index f88c219..b4e748f 100644
--- a/asm/save.s
+++ b/asm/save.s
@@ -5,74 +5,6 @@
.text
- thumb_func_start sub_8011C1C
-sub_8011C1C:
- ldr r0, _08011C24
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_08011C24: .4byte gUnknown_203B17C
- thumb_func_end sub_8011C1C
-
- thumb_func_start sub_8011C28
-sub_8011C28:
- ldr r1, _08011C30
- str r0, [r1]
- bx lr
- .align 2, 0
-_08011C30: .4byte gUnknown_203B17C
- thumb_func_end sub_8011C28
-
- thumb_func_start sub_8011C34
-sub_8011C34:
- ldr r0, _08011C3C
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_08011C3C: .4byte gUnknown_202DE28
- thumb_func_end sub_8011C34
-
- thumb_func_start sub_8011C40
-sub_8011C40:
- ldr r1, _08011C48
- str r0, [r1]
- bx lr
- .align 2, 0
-_08011C48: .4byte gUnknown_202DE28
- thumb_func_end sub_8011C40
-
- thumb_func_start sub_8011C4C
-sub_8011C4C:
- ldr r0, _08011C54
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_08011C54: .4byte gUnknown_203B180
- thumb_func_end sub_8011C4C
-
- thumb_func_start sub_8011C58
-sub_8011C58:
- push {r4,lr}
- adds r4, r0, 0
- movs r2, 0
- lsrs r1, 2
- cmp r1, 0x1
- ble _08011C72
- adds r3, r4, 0x4
- subs r1, 0x1
-_08011C68:
- ldm r3!, {r0}
- adds r2, r0
- subs r1, 0x1
- cmp r1, 0
- bne _08011C68
-_08011C72:
- str r2, [r4]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8011C58
-
thumb_func_start sub_8011C7C
sub_8011C7C:
push {r4,lr}
diff --git a/ld_script.txt b/ld_script.txt
index 3bc7a22..d1bbded 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -48,11 +48,13 @@ SECTIONS {
asm/code.o(.text);
asm/event_flag.o(.text);
asm/code_8002774.o(.text);
+ src/memory.o(.text);
asm/memory.o(.text);
asm/code_80035F0.o(.text);
src/other_random.o(.text);
src/util.o(.text);
asm/bg_palette_buffer.o(.text);
+ src/bg_palette_buffer.o(.text);
asm/input.o(.text);
asm/code_8004AA0.o(.text);
asm/sprite.o(.text);
@@ -66,6 +68,7 @@ SECTIONS {
asm/code_800B540.o(.text);
src/flash.o(.text);
asm/code_800D090.o(.text);
+ src/save.o(.text);
asm/save.o(.text);
asm/code_8012A18.o(.text);
asm/m4a.o(.text);
diff --git a/src/bg_palette_buffer.c b/src/bg_palette_buffer.c
new file mode 100644
index 0000000..5e078a0
--- /dev/null
+++ b/src/bg_palette_buffer.c
@@ -0,0 +1,102 @@
+#include "global.h"
+
+extern u16 gBGPaletteBuffer[512];
+extern bool8 gBGPaletteUsed[32];
+
+extern void CpuCopy(void* src, void* dest, u32 size);
+
+/*
+void InitBGPaletteBuffer(void)
+{
+ u16 color = 0;
+ u16* ptr;
+ u32 i;
+ bool8 paletteUsed;
+
+ u8* p;
+
+ ptr = gUnknown_20251F0;
+
+ i = 0x80;
+ i <<= 2;
+
+ do {
+ *ptr++ = color;
+ i--;
+ } while (i);
+
+ paletteUsed = TRUE;
+
+ p = gUnknown_20251D0;
+ p += 31;
+
+ do
+ *p-- = paletteUsed;
+ while ((s32) p >= (s32) &gUnknown_20251D0);
+}
+void SetBGPaletteBufferColorRGB(s32 index, u8 *RGBArray, s32 a3, u8 *a4)
+{
+ if (a3 < 0) {
+ a3 = 0;
+ }
+ if (a3 > 31) {
+ a3 = 31;
+ }
+ gBGPaletteUsed[index / 16] = 1;
+ if (!a4) {
+ gBGPaletteBuffer[index] = ((RGBArray[2] * a3 / 256 & 0x1F) << 10) | ((RGBArray[1] * a3 / 256 & 0x1F) << 5) | (RGBArray[0] * a3 / 256 & 0x1F);
+ }
+ else
+ {
+ gBGPaletteBuffer[index] = ((a4[4 * RGBArray[2] + 2] * a3 / 256 & 0x1F) << 10) | ((a4[4 * RGBArray[1] + 1] * a3 / 256 & 0x1F) << 5) | (a4[4 * RGBArray[0]] * a3 / 256 & 0x1F);
+ }
+}
+*/
+
+void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray)
+{
+ gBGPaletteUsed[index / 16] = TRUE;
+ gBGPaletteBuffer[index] = (colorArray[2] >> 3) << 10 | (colorArray[1] >> 3) << 5 | colorArray[0] >> 3;
+}
+
+void SetBGPaletteBufferColor(s32 index, u16 *color)
+{
+ gBGPaletteUsed[index / 16] = TRUE;
+ gBGPaletteBuffer[index] = *color;
+}
+
+void nullsub_4()
+{
+
+}
+void nullsub_5(void)
+{
+
+}
+void nullsub_143(void)
+{
+
+}
+
+void TransferBGPaletteBuffer(void)
+{
+ u32 i;
+ s32 paletteBufferIndex;
+ u16 *dest;
+
+ i = 0;
+ paletteBufferIndex = 0;
+ dest = (u16 *)PLTT;
+ do
+ {
+ if (gBGPaletteUsed[i])
+ {
+ gBGPaletteUsed[i] = 0;
+ CpuCopy(dest, &gBGPaletteBuffer[paletteBufferIndex], sizeof(u16) * 16);
+ }
+ ++i;
+ dest += 16;
+ paletteBufferIndex += 16;
+ }
+ while ( paletteBufferIndex < 512 );
+} \ No newline at end of file
diff --git a/src/memory.c b/src/memory.c
new file mode 100644
index 0000000..1ccbe54
--- /dev/null
+++ b/src/memory.c
@@ -0,0 +1,85 @@
+#include "global.h"
+
+extern void InitHeapInternal(void);
+extern void CpuClear(u32 *dest, s32 size);
+
+void InitHeap(void)
+{
+ InitHeapInternal();
+}
+
+void MemoryClear8(u8 *dest, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 1;
+ *dest++ = 0;
+ }
+}
+
+void MemoryClear16(u16 *dest, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 2;
+ *dest++ = 0;
+ }
+}
+void MemoryClear32(u32 *dest, s32 size)
+{
+ CpuClear(dest, size);
+}
+
+void MemoryFill8(u8 *dest, u8 value, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 1;
+ *dest++ = value;
+ }
+}
+
+void MemoryFill16(u16 *dest, u16 value, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 2;
+ *dest++ = value;
+ }
+}
+
+void MemoryFill32(u32 *dest, u32 value, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 4;
+ *dest++ = value;
+ }
+}
+
+void MemoryCopy8(u8 *dest, u8 *src, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 1;
+ *dest++ = *src++;
+ }
+}
+
+void MemoryCopy16(u16 *dest, u16 *src, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 2;
+ *dest++ = *src++;
+ }
+}
+
+void MemoryCopy32(u32 *dest, u32 *src, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 4;
+ *dest++ = *src++;
+ }
+} \ No newline at end of file
diff --git a/src/save.c b/src/save.c
new file mode 100644
index 0000000..575d4f1
--- /dev/null
+++ b/src/save.c
@@ -0,0 +1,45 @@
+#include "global.h"
+
+extern u32 gUnknown_203B17C;
+extern u32 gUnknown_203B180;
+extern u32 gUnknown_202DE28;
+
+u32 sub_8011C1C(void)
+{
+ return gUnknown_203B17C;
+}
+
+void sub_8011C28(u32 in)
+{
+ gUnknown_203B17C = in;
+}
+
+u32 sub_8011C34(void)
+{
+ return gUnknown_202DE28;
+}
+
+void sub_8011C40(u32 in)
+{
+ gUnknown_202DE28 = in;
+}
+
+u32 sub_8011C4C(void)
+{
+ return gUnknown_203B180;
+}
+
+void sub_8011C58(u32 *out, u32 len)
+{
+ u32 sum = 0;
+ s32 i = len / 4;
+ if (i > 1)
+ {
+ u32 *ptr = &out[1];
+ --i;
+ do
+ sum += *ptr++;
+ while (--i);
+ }
+ *out = sum;
+} \ No newline at end of file
diff --git a/sym_ewram.txt b/sym_ewram.txt
index f235a49..fb753c9 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -24,16 +24,16 @@ gUnknown_2000EA8 = .; /* 2000EA8 */
gUnknown_2000EB0 = .; /* 2000EB0 */
. += 0x20;
-gUnknown_2000ED0 = .; /* 2000ED0 */
+gHeapHeader = .; /* 2000ED0 */
. += 0x300;
-gUnknown_20011D0 = .; /* 20011D0 */
+gHeap = .; /* 20011D0 */
. += 0x24000;
-gUnknown_20251D0 = .; /* 20251D0 */
+gBGPaletteUsed = .; /* 20251D0 */
. += 0x20;
-gUnknown_20251F0 = .; /* 20251F0 */
+gBGPaletteBuffer = .; /* 20251F0 */
. += 0x400;
gUnknown_20255F0 = .; /* 20255F0 */
@@ -385,7 +385,8 @@ gUnknown_202DE24 = .; /* 202DE24 */
. += 0x4;
gUnknown_202DE28 = .; /* 202DE28 */
- . += 0x8;
+ . += 0x4;
+ . = ALIGN(16);
gUnknown_202DE30 = .; /* 202DE30 */
. += 0x28;