Fix makefile and decompile some functions.

Partial memory.c, save.c and bg_palette_buffer.c decompilation, along with some asm/ cleanup.
This commit is contained in:
nullableVoidPtr 2018-10-17 11:28:27 +08:00 committed by void
parent 9e5147a9ad
commit 961ab7ccaf
10 changed files with 326 additions and 458 deletions

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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}

View File

@ -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);

102
src/bg_palette_buffer.c Normal file
View File

@ -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 );
}

85
src/memory.c Normal file
View File

@ -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++;
}
}

45
src/save.c Normal file
View File

@ -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;
}

View File

@ -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;