mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 15:46:18 -05:00
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:
parent
9e5147a9ad
commit
961ab7ccaf
1
Makefile
1
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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
94
asm/input.s
94
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.
|
||||
|
|
|
|||
242
asm/memory.s
242
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
|
||||
|
|
|
|||
68
asm/save.s
68
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}
|
||||
|
|
|
|||
|
|
@ -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
102
src/bg_palette_buffer.c
Normal 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
85
src/memory.c
Normal 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
45
src/save.c
Normal 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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user