From 2fe33a05b84b2bb474f099d7ef3a928f0ee62199 Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 16 Mar 2022 19:15:58 -0700 Subject: [PATCH] move handwritten asm to src --- asm/{ => src}/code_08000E44.s | 0 asm/{ => src}/code_08000F10.s | 0 asm/{ => src}/code_08001A7C.s | 0 asm/{ => src}/code_08003FC4.s | 0 asm/{ => src}/code_080043E8.s | 0 asm/{ => src}/code_08007CAC.s | 0 asm/{ => src}/crt0.s | 8 ++-- asm/{ => src}/enemy.s | 0 asm/{ => src}/intr.s | 0 asm/{ => src}/player.s | 0 asm/{ => src}/projectileUpdate.s | 0 asm/{ => src}/script.s | 0 asm/{ => src}/veneer.s | 79 ++++++++++---------------------- linker.ld | 32 ++++++------- progress.py | 5 +- 15 files changed, 49 insertions(+), 75 deletions(-) rename asm/{ => src}/code_08000E44.s (100%) rename asm/{ => src}/code_08000F10.s (100%) rename asm/{ => src}/code_08001A7C.s (100%) rename asm/{ => src}/code_08003FC4.s (100%) rename asm/{ => src}/code_080043E8.s (100%) rename asm/{ => src}/code_08007CAC.s (100%) rename asm/{ => src}/crt0.s (83%) rename asm/{ => src}/enemy.s (100%) rename asm/{ => src}/intr.s (100%) rename asm/{ => src}/player.s (100%) rename asm/{ => src}/projectileUpdate.s (100%) rename asm/{ => src}/script.s (100%) rename asm/{ => src}/veneer.s (91%) diff --git a/asm/code_08000E44.s b/asm/src/code_08000E44.s similarity index 100% rename from asm/code_08000E44.s rename to asm/src/code_08000E44.s diff --git a/asm/code_08000F10.s b/asm/src/code_08000F10.s similarity index 100% rename from asm/code_08000F10.s rename to asm/src/code_08000F10.s diff --git a/asm/code_08001A7C.s b/asm/src/code_08001A7C.s similarity index 100% rename from asm/code_08001A7C.s rename to asm/src/code_08001A7C.s diff --git a/asm/code_08003FC4.s b/asm/src/code_08003FC4.s similarity index 100% rename from asm/code_08003FC4.s rename to asm/src/code_08003FC4.s diff --git a/asm/code_080043E8.s b/asm/src/code_080043E8.s similarity index 100% rename from asm/code_080043E8.s rename to asm/src/code_080043E8.s diff --git a/asm/code_08007CAC.s b/asm/src/code_08007CAC.s similarity index 100% rename from asm/code_08007CAC.s rename to asm/src/code_08007CAC.s diff --git a/asm/crt0.s b/asm/src/crt0.s similarity index 83% rename from asm/crt0.s rename to asm/src/crt0.s index 0359f82d..2e3609b4 100644 --- a/asm/crt0.s +++ b/asm/src/crt0.s @@ -36,14 +36,14 @@ start_vector: bx r1 _080000F0: b start_vector -sp_irq: .4byte gUnk_03007FA0 -sp_usr: .4byte gUnk_03007F00 +sp_irq: .4byte irq_stack_begin +sp_usr: .4byte usr_stack_begin INTR_VECTOR_BUF: .4byte 0x03007FFC intr_main: .4byte ram_IntrMain .ifdef EU -unk_function: .4byte sub_08000118 +unk_function: .4byte fill_rq_stack .else .ifdef DEMO_JP -unk_function: .4byte sub_08000118 +unk_function: .4byte fill_rq_stack .endif .endif diff --git a/asm/enemy.s b/asm/src/enemy.s similarity index 100% rename from asm/enemy.s rename to asm/src/enemy.s diff --git a/asm/intr.s b/asm/src/intr.s similarity index 100% rename from asm/intr.s rename to asm/src/intr.s diff --git a/asm/player.s b/asm/src/player.s similarity index 100% rename from asm/player.s rename to asm/src/player.s diff --git a/asm/projectileUpdate.s b/asm/src/projectileUpdate.s similarity index 100% rename from asm/projectileUpdate.s rename to asm/src/projectileUpdate.s diff --git a/asm/script.s b/asm/src/script.s similarity index 100% rename from asm/script.s rename to asm/src/script.s diff --git a/asm/veneer.s b/asm/src/veneer.s similarity index 91% rename from asm/veneer.s rename to asm/src/veneer.s index ea5678df..3cb55e81 100644 --- a/asm/veneer.s +++ b/asm/src/veneer.s @@ -5,77 +5,48 @@ .text -.ifdef EU - thumb_func_start sub_08000118 -sub_08000118: @ 0x08000118 - add r0, pc, #0x28 +.ifndef USA +.ifndef DEMO_USA +.ifndef JP + thumb_func_start fill_rq_stack +fill_rq_stack: // fill iqr and user stack with 'MCZ3' + adr r0, 1f ldm r0!, {r1, r2, r3} -_0800011C: +0: subs r2, #4 str r1, [r2] cmp r2, r3 - bgt _0800011C + bgt 0b bx lr - non_word_aligned_thumb_func_start sub_08000126 -sub_08000126: @ 0x08000126 - add r0, pc, #0x1C +// unused +// returns the maximum values reached by irq stack (r0) and usr stack (r1) +check_stack_threshold: + adr r0, 1f ldm r0!, {r1, r2, r3} -_0800012A: +0: ldr r0, [r3] adds r3, #4 - cmp r0, r1 - beq _0800012A + cmp r0, r1 // cmp against magic + beq 0b + subs r2, #0xa0 -_08000134: +0: ldr r0, [r2] adds r2, #4 - cmp r0, r1 - beq _08000134 + cmp r0, r1 // cmp against magic + beq 0b + subs r1, r2, #4 subs r0, r3, #4 bx lr - .align 2, 0 -_08000144EU: - .byte 0x33, 0x5A, 0x43, 0x4D - .4byte gUnk_03007FA0 - .4byte gUnk_03006C14 -.else -.ifdef DEMO_JP @ TODO deduplicate - thumb_func_start sub_08000118 -sub_08000118: @ 0x08000118 - add r0, pc, #0x28 - ldm r0!, {r1, r2, r3} -_0800011C: - subs r2, #4 - str r1, [r2] - cmp r2, r3 - bgt _0800011C - bx lr - non_word_aligned_thumb_func_start sub_08000126 -sub_08000126: @ 0x08000126 - add r0, pc, #0x1C - ldm r0!, {r1, r2, r3} -_0800012A: - ldr r0, [r3] - adds r3, #4 - cmp r0, r1 - beq _0800012A - subs r2, #0xa0 -_08000134: - ldr r0, [r2] - adds r2, #4 - cmp r0, r1 - beq _08000134 - subs r1, r2, #4 - subs r0, r3, #4 - bx lr .align 2, 0 -_08000144EU: - .byte 0x33, 0x5A, 0x43, 0x4D - .4byte gUnk_03007FA0 - .4byte gUnk_03006C14 +1: + .byte '3, 'Z, 'C, 'M // r1 + .4byte irq_stack_begin // r2 + .4byte usr_stack_top // r3 +.endif .endif .endif diff --git a/linker.ld b/linker.ld index ba05d901..b75881c9 100644 --- a/linker.ld +++ b/linker.ld @@ -255,7 +255,7 @@ SECTIONS { . = 0x00006A94; ram_0x80b2b58 = .; /* TODO 0x80b2b58 in unusedLabel_080B2AA8*/ . = 0x00006B14; ram_0x80b2bd8 = .; /* 0x80b2bd8 */ . = 0x00006B24; ram_0x80b2be8 = .; /* 0x80b2be8 */ - . = 0x00006C14; gUnk_03006C14 = .; + . = 0x00006C14; usr_stack_top = .; #else . = 0x00006580; ram_DrawDirect = .; . = 0x0000659C; ram_sub_080ADA04 = .; @@ -264,8 +264,8 @@ SECTIONS { . = 0x0000694C; ram_0x80b2bd8 = .; /* 0x80b2bd8 */ . = 0x0000695C; ram_0x80b2be8 = .; /* 0x80b2be8 */ #endif - . = 0x00007F00; gUnk_03007F00 = .; - . = 0x00007FA0; gUnk_03007FA0 = .; + . = 0x00007F00; usr_stack_begin = .; + . = 0x00007FA0; irq_stack_begin = .; . = 0x00007FFA; gUnk_03007FFA = .; . = 0x00008000; } >iwram @@ -273,27 +273,27 @@ SECTIONS { rom : ALIGN(2) { /* handwritten assembly */ - asm/crt0.o(.text); - asm/veneer.o(.text); + asm/src/crt0.o(.text); + asm/src/veneer.o(.text); data/data_08000360.o(.rodata); - asm/code_08000E44.o(.text); + asm/src/code_08000E44.o(.text); asm/lib/libgcc.o(.text); - asm/code_08000F10.o(.text); + asm/src/code_08000F10.o(.text); data/data_08000F54.o(.rodata); - asm/enemy.o(.text); + asm/src/enemy.o(.text); src/droptables.o(.rodata); - asm/code_08001A7C.o(.text); + asm/src/code_08001A7C.o(.text); data/gfx/sprite_ptrs.o(.rodata); - asm/code_08003FC4.o(.text); - asm/code_080043E8.o(.text); + asm/src/code_08003FC4.o(.text); + asm/src/code_080043E8.o(.text); data/gfx/link_animations.o(.rodata); - asm/code_08007CAC.o(.text); + asm/src/code_08007CAC.o(.text); data/data_08007DF4.o(.rodata); - asm/player.o(.text); + asm/src/player.o(.text); /* scripts */ data/scripts.o(.text); - asm/script.o(.text); - asm/projectileUpdate.o(.text); + asm/src/script.o(.text); + asm/src/projectileUpdate.o(.text); /* C source compiled with interworking */ src/interrupts.o(.text); @@ -883,7 +883,7 @@ SECTIONS { src/eeprom.o(.text); *libc.a:memcpy.o(.text); /* handwritten assembly in arm mode */ - asm/intr.o(.text); + asm/src/intr.o(.text); /* data */ data/data_080B2A70.o(.rodata); diff --git a/progress.py b/progress.py index 141fbc30..bd248d2e 100755 --- a/progress.py +++ b/progress.py @@ -48,7 +48,10 @@ def parse_map(non_matching_funcs): if dir == 'src': src += size elif dir == 'asm': - asm += size + if filepath.find("asm/src/") != -1 or filepath.find("asm/lib/") != -1: + src += size + else: + asm += size elif dir == 'data': # scripts src_data += size