From 490a0bbdb756b110cacb71353218e616ef3dc50f Mon Sep 17 00:00:00 2001 From: DameNavarro Date: Fri, 30 Oct 2026 12:31:51 -0400 Subject: [PATCH 1/3] fix(tools): skip native C in PAL object fallback Exclude native NTSC-U rows without a PAL counterpart from the PAL object fallback, preventing an invalid address conversion. Validation: python3 tests/check_repository.py passed; python3 -m unittest discover -s tests passed all 24 tests. --- tools/version_map.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/version_map.py b/tools/version_map.py index 1c331aa9..435dfea1 100644 --- a/tools/version_map.py +++ b/tools/version_map.py @@ -758,7 +758,13 @@ def apply(r, ok, diffs): apply(r, *res[r["pal"]]) # last resort for core C the checker could not reproduce in isolation (a file of several # functions in one entry, an @ps2as file's slices): the full build's own object of the file - last = [r for r in rows if r["program"] in CORE and r["state"] == "C" and r["status"] == "nomatch"] + last = [ + r for r in rows + if r["program"] in CORE + and r["pal"] != "-" + and r["state"] == "C" + and r["status"] == "nomatch" + ] if last and not a.pairs_only: import targets def obj(r): From 6b7f2e80c6c4960034c3c04b801a714ffb8e9bc8 Mon Sep 17 00:00:00 2001 From: DameNavarro Date: Fri, 30 Oct 2026 12:42:35 -0400 Subject: [PATCH 2/3] feat(frontbin): match six shared and four NTSC-U functions Integrate six shared functions in 382380.c using file-wide @ps2as settings and four native NTSC-U implementations. Update version maps, build records and progress reports; remove promoted drafts and preserve the unmatched 003B0C70 attempt. Validation: all three PAL core outputs match retail; the NTSC-U C-linked build matches all 54 targets. Repository checks and all 24 unit tests pass; staged whitespace checks pass. --- README.md | 20 +- config/frontbin/text_parts.txt | 4 +- config/us/built.tsv | 48 +- config/us/map.tsv | 96 ++- config/us/text_parts.txt | 4 + include/bytematch_names.h | 30 +- nonmatching/README.md | 7 +- nonmatching/frontbin/func_00382538.c | 10 - nonmatching/frontbin/func_003881B0.c | 27 - nonmatching/frontbin/func_00389D00.c | 14 - nonmatching/frontbin/func_00389DB0.c | 19 - nonmatching/frontbin/func_00389E28.c | 13 - nonmatching/frontbin/func_00389EA0.c | 33 - nonmatching/frontbin/func_U_003B0C70.c | 50 ++ progress/report.json | 222 +++--- progress/us/report.json | 932 +++++++++++++++---------- src/frontbin/382380.c | 78 ++- src/us/frontbin/0037D1A8.c | 24 + src/us/frontbin/003B0D18.c | 30 + src/us/frontbin/003B8EF8.c | 19 + src/us/frontbin/003EB578.c | 12 + 21 files changed, 973 insertions(+), 719 deletions(-) delete mode 100644 nonmatching/frontbin/func_00382538.c delete mode 100644 nonmatching/frontbin/func_003881B0.c delete mode 100644 nonmatching/frontbin/func_00389D00.c delete mode 100644 nonmatching/frontbin/func_00389DB0.c delete mode 100644 nonmatching/frontbin/func_00389E28.c delete mode 100644 nonmatching/frontbin/func_00389EA0.c create mode 100644 nonmatching/frontbin/func_U_003B0C70.c create mode 100644 src/us/frontbin/0037D1A8.c create mode 100644 src/us/frontbin/003B0D18.c create mode 100644 src/us/frontbin/003B8EF8.c create mode 100644 src/us/frontbin/003EB578.c diff --git a/README.md b/README.md index 1759c262..6fc971de 100644 --- a/README.md +++ b/README.md @@ -35,20 +35,20 @@ Decompilation progress is tracked live on **[openrac.dev](https://openrac.dev)** | Program | Functions | Final source | in C | ASM_FUNC | LINKER_REMNANT | INCLUDE_ASM | | --- | ---: | ---: | ---: | ---: | ---: | ---: | -| frontbin | 1667 | 1393 (83.6%) | 1034 | 138 | 221 | 274 | -| boot_elf | 1043 | 852 (81.7%) | 575 | 204 | 73 | 191 | +| frontbin | 1672 | 1399 (83.7%) | 1040 | 138 | 221 | 273 | +| boot_elf | 1038 | 847 (81.6%) | 570 | 204 | 73 | 191 | | i5bootn | 194 | 193 (99.5%) | 41 | 147 | 5 | 1 | | Shared level code | 7747 | 2758 (35.6%) | 2259 | 0 | 499 | 4989 | | Level-specific code | 5513 | 611 (11.1%) | 449 | 0 | 162 | 4902 | | | Functions (exact) | Code (exact) | Fuzzy | | --- | ---: | ---: | ---: | -| Core programs | 2,438 of 2,904 | 380,896 of 639,780 bytes (59.54%) | 59.54% | +| Core programs | 2,439 of 2,904 | 380,968 of 639,780 bytes (59.55%) | 59.55% | | Shared level code | 2,758 of 7,747 | 251,444 of 3,914,160 bytes (6.42%) | 6.42% | | Level-specific code | 611 of 5,513 | 25,440 of 2,993,008 bytes (0.85%) | 0.85% | -| **Total** | 5,807 of 16,164 | 657,780 of 7,546,948 bytes (8.72%) | 8.72% | +| **Total** | 5,808 of 16,164 | 657,852 of 7,546,948 bytes (8.72%) | 8.72% | -Each distinct function counts once: boot_elf's copy of the front end is frontbin's, and a level function counts once however many of the 49 levels have it. 204,304 bytes (2.71%) are in source files with nothing left to decompile. +Each distinct function counts once: boot_elf's copy of the front end is frontbin's, and a level function counts once however many of the 49 levels have it. 203,716 bytes (2.70%) are in source files with nothing left to decompile. **NTSC-U** (`SCUS-973.53`: 3 core programs and 51 levels, built byte-identical from assembly; [docs/versions.md](docs/versions.md)): @@ -56,18 +56,18 @@ Each distinct function counts once: boot_elf's copy of the front end is frontbin | NTSC-U program | Functions | Final source | in C | ASM_FUNC | LINKER_REMNANT | INCLUDE_ASM | | --- | ---: | ---: | ---: | ---: | ---: | ---: | -| frontbin | 1660 | 1370 (82.5%) | 1012 | 138 | 220 | 290 | -| boot_elf | 1042 | 810 (77.7%) | 539 | 204 | 67 | 232 | -| i5bootn | 191 | 183 (95.8%) | 35 | 145 | 3 | 8 | +| frontbin | 1658 | 1381 (83.3%) | 1023 | 138 | 220 | 277 | +| boot_elf | 1044 | 819 (78.4%) | 548 | 204 | 67 | 225 | +| i5bootn | 191 | 185 (96.9%) | 37 | 145 | 3 | 6 | | Shared level code | 7728 | 2715 (35.1%) | 2209 | 0 | 506 | 5013 | | Level-specific code | 5601 | 593 (10.6%) | 431 | 0 | 162 | 5008 | | | Functions (exact) | Code (exact) | Fuzzy | | --- | ---: | ---: | ---: | -| Core programs | 2,363 of 2,893 | 353,304 of 639,076 bytes (55.28%) | 61.22% | +| Core programs | 2,385 of 2,893 | 371,280 of 639,076 bytes (58.10%) | 62.79% | | Shared level code | 2,715 of 7,728 | 249,772 of 3,883,768 bytes (6.43%) | 6.46% | | Level-specific code | 593 of 5,601 | 23,928 of 2,986,136 bytes (0.80%) | 0.85% | -| **Total** | 5,671 of 16,222 | 627,004 of 7,508,980 bytes (8.35%) | 8.89% | +| **Total** | 5,693 of 16,222 | 644,980 of 7,508,980 bytes (8.59%) | 9.02% | Counted from the NTSC-U disc's own function tables; a function is final when PAL's source for the function with its code checks MATCH there (config/us/map.tsv, tools/version_map.py), and the fuzzy figure adds what the near misses and the C that does not check yet reach there (docs/versions.md). 51 levels; each distinct function counts once. diff --git a/config/frontbin/text_parts.txt b/config/frontbin/text_parts.txt index fb8c7d6e..9841578e 100644 --- a/config/frontbin/text_parts.txt +++ b/config/frontbin/text_parts.txt @@ -4,7 +4,7 @@ # @ps2as: assembled with SN's Ps2EeAs; @newas: with ee/bin/as.exe. 0x00381080 -O2 -G8 -fopt-stack -mno-check-zero-division 0x00381140 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division -0x00382380 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division +0x00382380 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division @ps2as 0x0038CA08 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division 0x0038CDB8 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division 0x0038CEA8 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division @@ -70,4 +70,4 @@ 0x003E7188 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division @ps2as 0x003E73A0 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division 0x003EA8E0 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division -mno-split-addresses -0x003F2238 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division -mno-split-addresses +0x003F2238 -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division -mno-split-addresses \ No newline at end of file diff --git a/config/us/built.tsv b/config/us/built.tsv index bb5a49f2..4a7b51f2 100644 --- a/config/us/built.tsv +++ b/config/us/built.tsv @@ -155,14 +155,14 @@ boot_elf func_00129A18 1 - boot_elf func_00129A58 1 - boot_elf func_00129AA0 1 - boot_elf func_00129AF0 1 - -boot_elf func_00129BF0 0 boot_elf: no object of the block alone checks MATCH -boot_elf func_00129E58 0 boot_elf: no object of the block alone checks MATCH -boot_elf func_00129EA0 0 boot_elf: no object of the block alone checks MATCH -boot_elf func_00129F28 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_00129BF0 1 - +boot_elf func_00129E58 1 - +boot_elf func_00129EA0 1 - +boot_elf func_00129F28 1 - boot_elf func_0012A068 1 - -boot_elf func_0012A150 0 boot_elf: no object of the block alone checks MATCH -boot_elf func_0012A5F0 0 boot_elf: no object of the block alone checks MATCH -boot_elf func_0012A7C8 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_0012A150 1 - +boot_elf func_0012A5F0 1 - +boot_elf func_0012A7C8 1 - boot_elf func_0012A948 1 - boot_elf func_0012AA78 1 - boot_elf func_0012AAE0 1 - @@ -402,7 +402,7 @@ boot_elf func_00383038 1 - boot_elf func_00383128 1 - boot_elf func_003831A8 1 - boot_elf func_003831F0 1 - -boot_elf func_00383508 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_00383508 1 - boot_elf func_00383718 1 - boot_elf func_00383760 1 - boot_elf func_003838B0 1 - @@ -611,7 +611,7 @@ boot_elf func_0039BF98 1 - boot_elf func_0039BFF0 1 - boot_elf func_0039C050 1 - boot_elf func_0039C0E8 1 - -boot_elf func_0039C1A0 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_0039C1A0 1 - boot_elf func_0039C228 1 - boot_elf func_0039C250 1 - boot_elf func_0039C270 1 - @@ -626,7 +626,7 @@ boot_elf func_0039C440 1 - boot_elf func_0039C458 1 - boot_elf func_0039C600 1 - boot_elf func_0039C6E0 1 - -boot_elf func_0039C7F0 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_0039C7F0 1 - boot_elf func_0039E9C0 1 - boot_elf func_0039EA88 1 - boot_elf func_0039EAC0 1 - @@ -643,7 +643,7 @@ boot_elf func_0039F308 1 - boot_elf func_0039F3B8 1 - boot_elf func_0039F4A8 1 - boot_elf func_0039F4E8 1 - -boot_elf func_0039F728 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_0039F728 1 - boot_elf func_0039F890 1 - boot_elf func_0039F8C8 1 - boot_elf func_0039F908 1 - @@ -662,7 +662,7 @@ boot_elf func_0039FB70 1 - boot_elf func_0039FCF8 1 - boot_elf func_0039FD58 1 - boot_elf func_0039FF28 1 - -boot_elf func_003A0180 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_003A0180 1 - boot_elf func_003A0470 1 - boot_elf func_003A1000 1 - boot_elf func_003A1090 1 - @@ -894,7 +894,7 @@ boot_elf func_003B1A38 1 - boot_elf func_003B1AB0 1 - boot_elf func_003B1C10 1 - boot_elf func_003B1D00 1 - -boot_elf func_003B1D58 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_003B1D58 1 - boot_elf func_003B1F40 1 - boot_elf func_003B2050 1 - boot_elf func_003B2360 1 - @@ -995,9 +995,9 @@ boot_elf func_003B6090 1 - boot_elf func_003B6588 1 - boot_elf func_003B6608 1 - boot_elf func_003B6620 1 - -boot_elf func_003B6638 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_003B6638 1 - boot_elf func_003B67F0 1 - -boot_elf func_003B6860 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_003B6860 1 - boot_elf func_003B68C0 1 - boot_elf func_003B68C8 1 - boot_elf func_003B6900 1 - @@ -1056,7 +1056,7 @@ boot_elf func_003BAB48 1 - boot_elf func_003BACD8 1 - boot_elf func_003BAF68 1 - boot_elf func_003BAF88 1 - -boot_elf func_003BAFA0 0 boot_elf: no object of the block alone checks MATCH +boot_elf func_003BAFA0 1 - boot_elf func_003BB090 1 - boot_elf func_003BB308 1 - boot_elf func_003BB468 1 - @@ -1602,6 +1602,7 @@ frontbin func_00382348 1 - frontbin func_00382468 1 - frontbin func_00382498 1 - frontbin func_003824E0 1 - +frontbin func_00382538 1 - frontbin func_00382580 1 - frontbin func_00382760 1 - frontbin func_00382A80 1 - @@ -1620,7 +1621,12 @@ frontbin func_00385EF0 1 - frontbin func_00386678 1 - frontbin func_00387EF0 1 - frontbin func_00388138 1 - +frontbin func_003881B0 1 - frontbin func_00388238 1 - +frontbin func_00389D00 1 - +frontbin func_00389DB0 1 - +frontbin func_00389E28 1 - +frontbin func_00389EA0 1 - frontbin func_00389F68 1 - frontbin func_0038C3B0 1 - frontbin func_0038C9B0 1 - @@ -2122,7 +2128,7 @@ frontbin func_003BA790 1 - frontbin func_003BA920 1 - frontbin func_003BABB0 1 - frontbin func_003BABD0 1 - -frontbin func_003BABE8 0 frontbin: no object of the block alone checks MATCH +frontbin func_003BABE8 1 - frontbin func_003BACD8 1 - frontbin func_003BAF50 1 - frontbin func_003BB0B0 1 - @@ -2576,18 +2582,22 @@ frontbin func_003F2380 1 - frontbin func_003F2388 1 - frontbin func_003F2390 1 - frontbin func_003F23A8 1 - +frontbin func_U_0037D1A8 1 - frontbin func_U_0037E060 1 - frontbin func_U_0038F0C0 1 - frontbin func_U_0038F3A0 1 - frontbin func_U_003906E8 1 - frontbin func_U_00391B30 1 - frontbin func_U_00391B70 1 - +frontbin func_U_003B0D18 1 - frontbin func_U_003B8700 1 - frontbin func_U_003B8EC0 1 - +frontbin func_U_003B8EF8 1 - frontbin func_U_003BA108 1 - frontbin func_U_003BB558 1 - frontbin func_U_003BBC48 1 - frontbin func_U_003E0068 1 - +frontbin func_U_003EB578 1 - frontbin func_U_003EB588 1 - frontbin func_U_003EB598 1 - i5bootn func_00800488 1 - @@ -2598,8 +2608,8 @@ i5bootn func_008010F8 1 - i5bootn func_008014A0 1 - i5bootn func_008014D8 1 - i5bootn func_00801510 1 - -i5bootn func_008015A0 0 i5bootn: no object of the block alone checks MATCH -i5bootn func_00801778 0 i5bootn: no object of the block alone checks MATCH +i5bootn func_008015A0 1 - +i5bootn func_00801778 1 - i5bootn func_00802490 1 - i5bootn func_008024B8 1 - i5bootn func_00802508 0 i5bootn: no object of the block alone checks MATCH diff --git a/config/us/map.tsv b/config/us/map.tsv index e210c85b..57c9c9b7 100644 --- a/config/us/map.tsv +++ b/config/us/map.tsv @@ -2749,32 +2749,32 @@ func_003822C8 frontbin - - 108 INCLUDE_ASM none 0.00 - func_00382338 frontbin - - 12 LINKER_REMNANT none 0.00 - func_00382348 frontbin func_0037E0B8 0037E0B8 52 C match 100.00 2dee3cf52033 func_00382380 frontbin func_0037E0F0 0037E0F0 232 INCLUDE_ASM asm 0.00 - -func_00382468 frontbin func_0037E1D8 0037E1D8 44 C match 100.00 63ae5290c6f0 -func_00382498 frontbin func_0037E208 0037E208 68 C match 100.00 63ae5290c6f0 -func_003824E0 frontbin func_0037E250 0037E250 84 C match 100.00 63ae5290c6f0 -func_00382538 frontbin func_0037E2A8 0037E2A8 72 INCLUDE_ASM asm 0.00 - -func_00382580 frontbin func_0037E2F0 0037E2F0 120 C match 100.00 63ae5290c6f0 +func_00382468 frontbin func_0037E1D8 0037E1D8 44 C match 100.00 2e5f5c8ec003 +func_00382498 frontbin func_0037E208 0037E208 68 C match 100.00 2e5f5c8ec003 +func_003824E0 frontbin func_0037E250 0037E250 84 C match 100.00 2e5f5c8ec003 +func_00382538 frontbin func_0037E2A8 0037E2A8 72 C match 100.00 2e5f5c8ec003 +func_00382580 frontbin func_0037E2F0 0037E2F0 120 C match 100.00 2e5f5c8ec003 func_003825F8 frontbin func_0037E368 0037E368 360 INCLUDE_ASM differs 0.00 - -func_00382760 frontbin func_0037E4B8 0037E4B8 144 C match 100.00 63ae5290c6f0 +func_00382760 frontbin func_0037E4B8 0037E4B8 144 C match 100.00 2e5f5c8ec003 func_003827F0 frontbin func_0037E548 0037E548 28 LINKER_REMNANT match 100.00 - func_00382810 frontbin func_0037E568 0037E568 196 INCLUDE_ASM asm 0.00 - func_003828D8 frontbin func_0037E630 0037E630 404 INCLUDE_ASM asm 0.00 - func_00382A70 frontbin func_0037E7C8 0037E7C8 12 LINKER_REMNANT match 100.00 - -func_00382A80 frontbin func_0037E7D8 0037E7D8 148 C match 100.00 63ae5290c6f0 +func_00382A80 frontbin func_0037E7D8 0037E7D8 148 C match 100.00 2e5f5c8ec003 func_00382B20 frontbin func_0037E878 0037E878 164 INCLUDE_ASM asm 0.00 - func_00382BC8 frontbin func_0037E920 0037E920 140 INCLUDE_ASM asm 0.00 - -func_00382C58 frontbin func_0037E9B0 0037E9B0 232 C match 100.00 63ae5290c6f0 +func_00382C58 frontbin func_0037E9B0 0037E9B0 232 C match 100.00 2e5f5c8ec003 func_00382D40 frontbin func_0037EA98 0037EA98 4 LINKER_REMNANT match 100.00 - -func_00382D48 frontbin func_0037EAA0 0037EAA0 120 C match 100.00 63ae5290c6f0 -func_00382DC8 frontbin func_0037EB20 0037EB20 68 C match 100.00 63ae5290c6f0 +func_00382D48 frontbin func_0037EAA0 0037EAA0 120 C match 100.00 2e5f5c8ec003 +func_00382DC8 frontbin func_0037EB20 0037EB20 68 C match 100.00 2e5f5c8ec003 func_00382E10 frontbin func_0037EB68 0037EB68 792 INCLUDE_ASM asm 0.00 - func_00383128 frontbin func_0037EE80 0037EE80 528 INCLUDE_ASM asm 0.00 - -func_00383338 frontbin func_0037F090 0037F090 68 C match 100.00 63ae5290c6f0 +func_00383338 frontbin func_0037F090 0037F090 68 C match 100.00 2e5f5c8ec003 func_00383380 frontbin func_0037F0D8 0037F0D8 336 INCLUDE_ASM asm 0.00 - func_003834D0 frontbin func_0037F228 0037F228 504 INCLUDE_ASM asm 0.00 - -func_003836C8 frontbin func_0037F420 0037F420 212 C match 100.00 63ae5290c6f0 -func_003837A0 frontbin func_0037F4F8 0037F4F8 88 C match 100.00 63ae5290c6f0 -func_003837F8 frontbin func_0037F550 0037F550 56 C match 100.00 63ae5290c6f0 +func_003836C8 frontbin func_0037F420 0037F420 212 C match 100.00 2e5f5c8ec003 +func_003837A0 frontbin func_0037F4F8 0037F4F8 88 C match 100.00 2e5f5c8ec003 +func_003837F8 frontbin func_0037F550 0037F550 56 C match 100.00 2e5f5c8ec003 func_00383830 frontbin func_0037F588 0037F588 568 INCLUDE_ASM differs 0.00 - func_00383A68 frontbin func_0037F7A8 0037F7A8 480 INCLUDE_ASM differs 0.00 - func_00383C48 frontbin func_0037F978 0037F978 1392 INCLUDE_ASM asm 0.00 - @@ -2783,34 +2783,34 @@ func_00384260 frontbin func_0037FF90 0037FF90 564 INCLUDE_ASM differs 0.00 - func_00384498 frontbin func_003801C0 003801C0 732 INCLUDE_ASM asm 0.00 - func_00384778 frontbin func_003804A0 003804A0 348 INCLUDE_ASM asm 0.00 - func_003848D8 frontbin func_00380600 00380600 484 INCLUDE_ASM asm 0.00 - -func_00384AC8 frontbin func_003807F0 003807F0 232 C match 100.00 63ae5290c6f0 -func_00384BB8 frontbin func_003808E0 003808E0 272 C match 100.00 63ae5290c6f0 -func_00384CC8 frontbin func_003809F0 003809F0 188 C match 100.00 63ae5290c6f0 +func_00384AC8 frontbin func_003807F0 003807F0 232 C match 100.00 2e5f5c8ec003 +func_00384BB8 frontbin func_003808E0 003808E0 272 C match 100.00 2e5f5c8ec003 +func_00384CC8 frontbin func_003809F0 003809F0 188 C match 100.00 2e5f5c8ec003 func_00384D88 frontbin func_00380AB0 00380AB0 624 INCLUDE_ASM asm 0.00 - func_00385000 frontbin func_00380D28 00380D28 28 LINKER_REMNANT match 100.00 - func_00385020 frontbin func_00380D48 00380D48 888 INCLUDE_ASM asm 0.00 - -func_00385398 frontbin func_003810C0 003810C0 796 C match 100.00 63ae5290c6f0 +func_00385398 frontbin func_003810C0 003810C0 796 C match 100.00 2e5f5c8ec003 func_003856B8 frontbin func_003813E0 003813E0 1636 INCLUDE_ASM differs 0.00 - func_00385D20 frontbin func_00381A48 00381A48 4 LINKER_REMNANT match 100.00 - func_00385D28 frontbin func_00381A50 00381A50 452 INCLUDE_ASM asm 0.00 - -func_00385EF0 frontbin func_00381C18 00381C18 376 C match 100.00 63ae5290c6f0 +func_00385EF0 frontbin func_00381C18 00381C18 376 C match 100.00 2e5f5c8ec003 func_00386068 frontbin func_00381D90 00381D90 60 LINKER_REMNANT match 100.00 - func_003860A8 frontbin func_00381DD0 00381DD0 320 INCLUDE_ASM asm 0.00 - func_003861E8 frontbin func_00381F10 00381F10 4 LINKER_REMNANT match 100.00 - func_003861F0 frontbin func_00381F18 00381F18 720 INCLUDE_ASM asm 0.00 - func_003864C0 frontbin func_003821E8 003821E8 224 INCLUDE_ASM asm 0.00 - func_003865A0 frontbin func_003822C8 003822C8 212 INCLUDE_ASM asm 0.00 - -func_00386678 frontbin func_003823A0 003823A0 184 C match 100.00 63ae5290c6f0 +func_00386678 frontbin func_003823A0 003823A0 184 C match 100.00 2e5f5c8ec003 func_00386730 frontbin func_00382458 00382458 2792 INCLUDE_ASM asm 0.00 - func_00387218 frontbin func_00382F40 00382F40 80 INCLUDE_ASM asm 0.00 - func_00387268 frontbin func_00382F90 00382F90 340 INCLUDE_ASM asm 0.00 - func_003873C0 frontbin func_003830E8 003830E8 1876 INCLUDE_ASM asm 0.00 - func_00387B18 frontbin func_00383840 00383840 980 INCLUDE_ASM differs 0.00 - -func_00387EF0 frontbin func_00383848 00383848 116 C match 100.00 63ae5290c6f0 +func_00387EF0 frontbin func_00383848 00383848 116 C match 100.00 2e5f5c8ec003 func_00387F68 frontbin func_003838C0 003838C0 460 INCLUDE_ASM asm 0.00 - -func_00388138 frontbin func_00383A90 00383A90 120 C match 100.00 63ae5290c6f0 -func_003881B0 frontbin func_00383B08 00383B08 136 INCLUDE_ASM asm 0.00 - -func_00388238 frontbin func_00383B90 00383B90 28 C match 100.00 63ae5290c6f0 +func_00388138 frontbin func_00383A90 00383A90 120 C match 100.00 2e5f5c8ec003 +func_003881B0 frontbin func_00383B08 00383B08 136 C match 100.00 2e5f5c8ec003 +func_00388238 frontbin func_00383B90 00383B90 28 C match 100.00 2e5f5c8ec003 func_00388258 frontbin func_00383BB0 00383BB0 1112 INCLUDE_ASM differs 0.00 - func_003886B0 frontbin func_00383FD8 00383FD8 1088 INCLUDE_ASM asm 0.00 - func_00388AF0 frontbin func_00384418 00384418 4 LINKER_REMNANT match 100.00 - @@ -2823,13 +2823,13 @@ func_00389588 frontbin func_00384EB0 00384EB0 12 LINKER_REMNANT match 100.00 - func_00389598 frontbin func_00384EC0 00384EC0 1400 INCLUDE_ASM asm 0.00 - func_00389B10 frontbin func_00385438 00385438 308 INCLUDE_ASM asm 0.00 - func_00389C48 frontbin func_00385570 00385570 184 INCLUDE_ASM asm 0.00 - -func_00389D00 frontbin func_00385628 00385628 92 INCLUDE_ASM asm 0.00 - +func_00389D00 frontbin func_00385628 00385628 92 C match 100.00 2e5f5c8ec003 func_00389D60 frontbin func_00385688 00385688 80 INCLUDE_ASM asm 0.00 - -func_00389DB0 frontbin func_003856D8 003856D8 120 INCLUDE_ASM asm 0.00 - -func_00389E28 frontbin func_00385750 00385750 120 INCLUDE_ASM asm 0.00 - -func_00389EA0 frontbin func_003857C8 003857C8 120 INCLUDE_ASM asm 0.00 - +func_00389DB0 frontbin func_003856D8 003856D8 120 C match 100.00 2e5f5c8ec003 +func_00389E28 frontbin func_00385750 00385750 120 C match 100.00 2e5f5c8ec003 +func_00389EA0 frontbin func_003857C8 003857C8 120 C match 100.00 2e5f5c8ec003 func_00389F18 frontbin func_00385840 00385840 80 INCLUDE_ASM asm 0.00 - -func_00389F68 frontbin func_00385890 00385890 120 C match 100.00 63ae5290c6f0 +func_00389F68 frontbin func_00385890 00385890 120 C match 100.00 2e5f5c8ec003 func_00389FE0 frontbin func_00385908 00385908 120 INCLUDE_ASM asm 0.00 - func_0038A058 frontbin func_00385980 00385980 480 INCLUDE_ASM asm 0.00 - func_0038A238 frontbin func_00385B60 00385B60 384 INCLUDE_ASM asm 0.00 - @@ -2851,12 +2851,12 @@ func_0038BCD8 frontbin func_003875A0 003875A0 1120 INCLUDE_ASM asm 0.00 - func_0038C138 frontbin func_00387A00 00387A00 272 INCLUDE_ASM asm 0.00 - func_0038C248 frontbin func_00387B10 00387B10 200 INCLUDE_ASM asm 0.00 - func_0038C310 frontbin func_00387BD8 00387BD8 156 INCLUDE_ASM asm 0.00 - -func_0038C3B0 frontbin func_00387C78 00387C78 316 C match 100.00 63ae5290c6f0 +func_0038C3B0 frontbin func_00387C78 00387C78 316 C match 100.00 2e5f5c8ec003 func_0038C4F0 frontbin func_00387DB8 00387DB8 12 LINKER_REMNANT match 100.00 - func_0038C500 frontbin func_00387DC8 00387DC8 580 INCLUDE_ASM asm 0.00 - func_0038C750 frontbin func_00388018 00388018 572 INCLUDE_ASM asm 0.00 - func_0038C990 frontbin func_00388258 00388258 28 LINKER_REMNANT match 100.00 - -func_0038C9B0 frontbin func_00388278 00388278 88 C match 100.00 63ae5290c6f0 +func_0038C9B0 frontbin func_00388278 00388278 88 C match 100.00 2e5f5c8ec003 func_0038CA08 frontbin func_003882D0 003882D0 16 ASM_FUNC match 100.00 - func_0038CA18 frontbin func_003882E0 003882E0 40 ASM_FUNC match 100.00 - func_0038CA40 frontbin func_00388308 00388308 16 ASM_FUNC match 100.00 - @@ -4573,17 +4573,17 @@ func_003F2178 frontbin func_003ECBB0 003ECBB0 48 C match 100.00 ebb7f28fa4f3 func_003F21A8 frontbin func_003ECBE0 003ECBE0 60 LINKER_REMNANT match 100.00 - func_003F21E8 frontbin func_003ECC20 003ECC20 28 C match 100.00 ebb7f28fa4f3 func_003F2208 frontbin func_003ECC40 003ECC40 44 C match 100.00 ebb7f28fa4f3 -func_003F2238 frontbin func_003ECC70 003ECC70 48 C match 100.00 7094c94fc14b -func_003F2268 frontbin func_003ECCA0 003ECCA0 104 C match 100.00 7094c94fc14b -func_003F22D0 frontbin func_003ECD08 003ECD08 52 C match 100.00 7094c94fc14b -func_003F2308 frontbin func_003ECD40 003ECD40 28 C match 100.00 7094c94fc14b -func_003F2328 frontbin func_003ECD60 003ECD60 44 C match 100.00 7094c94fc14b +func_003F2238 frontbin func_003ECC70 003ECC70 48 C match 100.00 f3601d7c9252 +func_003F2268 frontbin func_003ECCA0 003ECCA0 104 C match 100.00 f3601d7c9252 +func_003F22D0 frontbin func_003ECD08 003ECD08 52 C match 100.00 f3601d7c9252 +func_003F2308 frontbin func_003ECD40 003ECD40 28 C match 100.00 f3601d7c9252 +func_003F2328 frontbin func_003ECD60 003ECD60 44 C match 100.00 f3601d7c9252 func_003F2358 frontbin func_003ECD90 003ECD90 36 LINKER_REMNANT match 100.00 - -func_003F2380 frontbin func_003ECDB8 003ECDB8 8 C match 100.00 7094c94fc14b -func_003F2388 frontbin func_003ECDC0 003ECDC0 8 C match 100.00 7094c94fc14b -func_003F2390 frontbin func_003ECDC8 003ECDC8 12 C match 100.00 7094c94fc14b +func_003F2380 frontbin func_003ECDB8 003ECDB8 8 C match 100.00 f3601d7c9252 +func_003F2388 frontbin func_003ECDC0 003ECDC0 8 C match 100.00 f3601d7c9252 +func_003F2390 frontbin func_003ECDC8 003ECDC8 12 C match 100.00 f3601d7c9252 func_003F23A0 frontbin func_003ECDD8 003ECDD8 4 LINKER_REMNANT match 100.00 - -func_003F23A8 frontbin func_003ECDE0 003ECDE0 12 C match 100.00 7094c94fc14b +func_003F23A8 frontbin func_003ECDE0 003ECDE0 12 C match 100.00 f3601d7c9252 func_003F23B8 frontbin func_003ECDF0 003ECDF0 4 LINKER_REMNANT match 100.00 - func_00800008 i5bootn - - 332 ASM_FUNC none 0.00 - func_00800158 i5bootn - - 8 C none 0.00 5eae951ec288 @@ -18044,7 +18044,6 @@ func_00381F80 frontbin func_0037DF28 0037DF28 108 near near 22.22 38c5af9448d3 func_00381FF0 frontbin func_0037DF98 0037DF98 60 near near 100.00 f9e25bd05527 func_003822C8 frontbin - - 108 near none 0.00 88d9da3f0413 func_00382380 frontbin func_0037E0F0 0037E0F0 232 near near 0.00 unchecked -func_00382538 frontbin func_0037E2A8 0037E2A8 72 near near 33.33 50cf8a4c7621 func_00382810 frontbin func_0037E568 0037E568 196 near near 63.27 7950cc440405 func_003828D8 frontbin func_0037E630 0037E630 404 near near 32.67 8feec8b5d9b0 func_00382B20 frontbin func_0037E878 0037E878 164 near near 60.98 de1332778ea6 @@ -18068,19 +18067,14 @@ func_003865A0 frontbin func_003822C8 003822C8 212 near near 96.23 edcbcb6e3ea6 func_00386730 frontbin func_00382458 00382458 2792 near near 7.74 9c115ca46151 func_00387218 frontbin func_00382F40 00382F40 80 near near 5.00 bdbbccbe73fa func_00387268 frontbin func_00382F90 00382F90 340 near near 43.53 fe12dd558888 -func_00387F68 frontbin func_003838C0 003838C0 460 near near 0.00 138952d73bc7 -func_003881B0 frontbin func_00383B08 00383B08 136 near near 94.12 5ad6690028d7 +func_00387F68 frontbin func_003838C0 003838C0 460 near near 100.00 138952d73bc7 func_00388AF8 frontbin func_00384420 00384420 1828 near near 0.00 unchecked func_00389240 frontbin func_00384B68 00384B68 300 near near 2.67 8d472e129fe2 func_00389370 frontbin func_00384C98 00384C98 264 near near 1.52 e64153a85d98 func_00389598 frontbin func_00384EC0 00384EC0 1400 near near 13.43 9de26f7d0423 func_00389B10 frontbin func_00385438 00385438 308 near near 89.61 f4373807d4d8 func_00389C48 frontbin func_00385570 00385570 184 near near 2.17 7f7a0ea23e4f -func_00389D00 frontbin func_00385628 00385628 92 near near 91.30 70fa76e684d4 func_00389D60 frontbin func_00385688 00385688 80 near near 55.00 5ce5e8812263 -func_00389DB0 frontbin func_003856D8 003856D8 120 near near 73.33 6dc3e0190ece -func_00389E28 frontbin func_00385750 00385750 120 near near 20.00 68073b361ae2 -func_00389EA0 frontbin func_003857C8 003857C8 120 near near 73.33 81654f09d272 func_00389F18 frontbin func_00385840 00385840 80 near near 5.00 7ffa08c73ed5 func_00389FE0 frontbin func_00385908 00385908 120 near near 20.00 fa4c0c17ac26 func_0038A058 frontbin func_00385980 00385980 480 near near 49.17 645b0b09e8d5 @@ -18090,9 +18084,9 @@ func_0038A948 frontbin func_00386210 00386210 628 near near 24.84 11b5202ed6d3 func_0038ABC0 frontbin func_00386488 00386488 384 near near 95.83 749a61e0ed32 func_0038AD40 frontbin func_00386608 00386608 224 near near 92.86 4c46d5981ed2 func_0038AE20 frontbin func_003866E8 003866E8 268 near near 46.27 b26d4b9cf5f0 -func_0038AF30 frontbin func_003867F8 003867F8 484 near near 0.00 764a84a97528 +func_0038AF30 frontbin func_003867F8 003867F8 484 near near 100.00 764a84a97528 func_0038B120 frontbin func_003869E8 003869E8 940 near near 0.00 unchecked -func_0038B4D0 frontbin func_00386D98 00386D98 396 near near 0.00 4d55669aaec4 +func_0038B4D0 frontbin func_00386D98 00386D98 396 near near 91.92 4d55669aaec4 func_0038B670 frontbin func_00386F38 00386F38 476 near near 8.40 b3df777097e6 func_0038B850 frontbin func_00387118 00387118 480 near near 8.33 9267abd30753 func_0038BA30 frontbin func_003872F8 003872F8 676 near near 11.24 a103aa8df165 @@ -18666,17 +18660,21 @@ func_003F22E0 boot_elf func_003F2120 003F2120 544 near near 66.18 3ce2efa9156f - boot_elf func_003E3B68 003E3B68 132 C match 100.00 8d701692e2bc - boot_elf func_003E47F8 003E47F8 1924 C match 100.00 909ddf7bc4ee - boot_elf func_003E5828 003E5828 260 C match 100.00 5bfd72676b28 +- frontbin func_0037D1A8 0037D1A8 88 C match 100.00 6818d8c55458 - frontbin func_0037E060 0037E060 12 C match 100.00 1dccf10702da - frontbin func_0038F0C0 0038F0C0 44 C match 100.00 844ff418076a - frontbin func_0038F3A0 0038F3A0 84 C match 100.00 f5a6904a1c0e - frontbin func_003906E8 003906E8 72 C match 100.00 1157adad4138 - frontbin func_00391B30 00391B30 48 C match 100.00 3fa9b3f064d3 - frontbin func_00391B70 00391B70 404 C match 100.00 b464f5bdefe6 +- frontbin func_003B0D18 003B0D18 88 C match 100.00 f9485388f9dd - frontbin func_003B8700 003B8700 184 C match 100.00 31734cb33e30 - frontbin func_003B8EC0 003B8EC0 56 C match 100.00 3af79665f734 +- frontbin func_003B8EF8 003B8EF8 76 C match 100.00 05e6ba5f40d8 - frontbin func_003BA108 003BA108 376 C match 100.00 b1ddfeb700e8 - frontbin func_003BB558 003BB558 100 C match 100.00 e5b4a7a38d79 - frontbin func_003BBC48 003BBC48 296 C match 100.00 340e981b52d8 - frontbin func_003E0068 003E0068 260 C match 100.00 566454048bf5 +- frontbin func_003EB578 003EB578 12 C match 100.00 8b6d3936e32c - frontbin func_003EB588 003EB588 12 C match 100.00 7b0683072c6e - frontbin func_003EB598 003EB598 12 C match 100.00 21a02f3aa693 diff --git a/config/us/text_parts.txt b/config/us/text_parts.txt index 03ce8221..a4f628b6 100644 --- a/config/us/text_parts.txt +++ b/config/us/text_parts.txt @@ -32,3 +32,7 @@ src/us/frontbin/003BBC48.c -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero src/us/frontbin/003E0068.c -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division src/us/frontbin/003EB588.c -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division -mno-split-addresses src/us/frontbin/003EB598.c -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division -mno-split-addresses +src/us/frontbin/003B0D18.c -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division +src/us/frontbin/0037D1A8.c -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division +src/us/frontbin/003EB578.c -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division -mno-split-addresses +src/us/frontbin/003B8EF8.c -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division diff --git a/include/bytematch_names.h b/include/bytematch_names.h index 9740e1f7..fbea568a 100644 --- a/include/bytematch_names.h +++ b/include/bytematch_names.h @@ -6,7 +6,6 @@ #define func_0037D160 func_003811A0 #define func_0037D198 func_003811D8 #define func_0037D1A0 func_003811E0 -#define func_0037D1A8 func_003811E8 #define func_0037D200 func_00381250 #define func_0037DC30 func_00381C88 #define func_0037DC38 func_00381C90 @@ -52,7 +51,6 @@ #define func_0037EA98 func_00382D40 #define func_0037EAA0 func_00382D48 #define func_0037EB20 func_00382DC8 -#define func_0037EE80 func_00383128 #define func_0037F090 func_00383338 #define func_0037F420 func_003836C8 #define func_0037F4F8 func_003837A0 @@ -87,11 +85,13 @@ #define func_00382FB0 func_00382FA8 #define func_003830E8 func_003873C0 #define func_003831F8 func_003831F0 +#define func_00383510 func_00383508 #define func_00383768 func_00383760 #define func_00383840 func_00387B18 #define func_00383848 func_00387EF0 #define func_003838B8 func_003838B0 #define func_00383A90 func_00388138 +#define func_00383B08 func_003881B0 #define func_00383B90 func_00388238 #define func_00383BB0 func_00388258 #define func_00383FD8 func_003886B0 @@ -102,6 +102,10 @@ #define func_00384C90 func_00384CB8 #define func_00384DA0 func_00389478 #define func_00384EB0 func_00389588 +#define func_00385628 func_00389D00 +#define func_003856D8 func_00389DB0 +#define func_00385750 func_00389E28 +#define func_003857C8 func_00389EA0 #define func_00385890 func_00389F68 #define func_00385E40 func_0038A518 #define func_003865A8 func_003865D0 @@ -132,7 +136,6 @@ #define func_00388468 func_0038CBA0 #define func_00388490 func_0038CBC8 #define func_00388550 func_0038CC88 -#define func_00388568 func_00388590 #define func_003885F0 func_0038CD28 #define func_00388648 func_0038CD80 #define func_00388680 func_0038CDB8 @@ -191,11 +194,7 @@ #define func_00389E98 func_00389EF0 #define func_00389FB8 func_0038E7E8 #define func_00389FD0 func_0038A028 -#define func_0038A088 func_0038A0E0 #define func_0038A0E8 func_0038A140 -#define func_0038A138 func_0038A190 -#define func_0038A1B0 func_0038A208 -#define func_0038A228 func_0038A280 #define func_0038A2A0 func_0038A2F8 #define func_0038A368 func_0038A3C0 #define func_0038A3E0 func_0038A438 @@ -366,7 +365,6 @@ #define func_00396C20 func_0039BA10 #define func_00396F58 func_00397040 #define func_00396FA0 func_0039BD90 -#define func_00396FD0 func_0039BDC0 #define func_00397058 func_0039BE48 #define func_003970C8 func_L01_003ECA08 #define func_003970D0 func_0039BEC0 @@ -376,7 +374,6 @@ #define func_00397238 func_0039C028 #define func_00397288 func_0039C208 #define func_003973D0 func_003974B8 -#define func_00397490 func_0039C410 #define func_00397598 func_00397680 #define func_00397930 func_00397A18 #define func_00398040 func_00398128 @@ -407,7 +404,6 @@ #define func_00399F90 func_0039EF28 #define func_0039A040 func_0039EFD8 #define func_0039A130 func_0039F0C8 -#define func_0039A3B0 func_0039F348 #define func_0039A518 func_0039F4B0 #define func_0039A550 func_0039F4E8 #define func_0039A590 func_0039F528 @@ -429,7 +425,6 @@ #define func_0039AAF0 func_0039FA88 #define func_0039AB80 func_0039AC98 #define func_0039ABA0 func_0039FB38 -#define func_0039AE08 func_0039FDA0 #define func_0039B0A8 func_0039B1C0 #define func_0039B0E8 func_003A0080 #define func_0039B198 func_003A0130 @@ -461,6 +456,7 @@ #define func_0039BED8 func_0039BFF0 #define func_0039BFD0 func_0039C0E8 #define func_0039C020 func_003A1020 +#define func_0039C088 func_0039C1A0 #define func_0039C158 func_003A1180 #define func_0039C1C8 func_003A11F0 #define func_0039C210 func_003A1238 @@ -470,6 +466,7 @@ #define func_0039C340 func_0039C458 #define func_0039C548 func_003A15D0 #define func_0039C5C8 func_0039C6E0 +#define func_0039C6D8 func_0039C7F0 #define func_0039C710 func_003A1798 #define func_0039C7B0 func_003A1838 #define func_0039C8A8 func_003A1930 @@ -515,6 +512,7 @@ #define func_0039EEF0 func_0039F008 #define func_0039F1A0 func_0039F2B8 #define func_0039F3D0 func_0039F4E8 +#define func_0039F610 func_0039F728 #define func_0039FB08 func_003A4F28 #define func_0039FB60 func_003A4F80 #define func_0039FBD8 func_003A4FF8 @@ -523,6 +521,7 @@ #define func_0039FFC8 func_003A53E8 #define func_0039FFF0 func_003A5410 #define func_003A0010 func_003A5430 +#define func_003A0068 func_003A0180 #define func_003A00D0 func_003A54F0 #define func_003A00E8 func_003A5508 #define func_003A01F8 func_003A5618 @@ -748,7 +747,6 @@ #define func_003AC150 func_003B16F8 #define func_003AC2B0 func_003B1858 #define func_003AC3A0 func_003B1948 -#define func_003AC3F8 func_003B19A0 #define func_003AC5E0 func_003B1B88 #define func_003AC6F0 func_003B1C98 #define func_003ACA00 func_003B1FA8 @@ -872,8 +870,6 @@ #define func_003B0C40 func_003B61D0 #define func_003B0D70 func_003B6250 #define func_003B0D88 func_003B6268 -#define func_003B0DA0 func_003B6280 -#define func_003B0FC8 func_003B64A8 #define func_003B1028 func_003B6508 #define func_003B1030 func_003B6510 #define func_003B1068 func_003B6548 @@ -890,6 +886,7 @@ #define func_003B14D0 func_003B69B0 #define func_003B1518 func_003B69F8 #define func_003B15B8 func_003B6A98 +#define func_003B1BB8 func_003B1D58 #define func_003B1EB0 func_003B7390 #define func_003B2640 func_003B7B20 #define func_003B26E8 func_003B7BC8 @@ -963,6 +960,8 @@ #define func_003B6410 func_003BB8F0 #define func_003B6488 func_003BB968 #define func_003B6528 func_003BBA08 +#define func_003B6560 func_003B6638 +#define func_003B6788 func_003B6860 #define func_003B69D0 func_003B6AA8 #define func_003B6DA0 func_003B6E78 #define func_003B6E70 func_003B6F48 @@ -995,6 +994,7 @@ #define func_003B8D00 func_003BE1F8 #define func_003B8E08 func_003BE300 #define func_003B8E10 func_003BE308 +#define func_003B8EF8 func_003BE6B8 #define func_003B8F48 func_003BE440 #define func_003B8F50 func_003BE448 #define func_003B9030 func_003BE528 @@ -1637,7 +1637,7 @@ #define func_003EB500 func_003F0A88 #define func_003EB518 func_003F0AA0 #define func_003EB538 func_003F0AC0 -#define func_003EB578 func_003F0B00 +#define func_003EB578 func_003F0D38 #define func_003EB588 func_003F0D48 #define func_003EB5A8 func_003F0B70 #define func_003EB5E8 func_003F0BB0 diff --git a/nonmatching/README.md b/nonmatching/README.md index 05a04ce2..137816a9 100644 --- a/nonmatching/README.md +++ b/nonmatching/README.md @@ -240,7 +240,6 @@ with names moved to PAL addresses where the address maps are sure of them | `func_00381FF0` | frontbin | US draft of `func_0037DF98` | differs: did not build, or built to other bytes, in PAL | | `func_003822C8` | frontbin | boot_elf's C of `func_003826A8` | near miss: 1 diff with the file's flags (boot_elf's copy is C) | | `func_00382380` | frontbin | US draft of `func_0037E0F0` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00382538` | frontbin | US draft of `func_0037E2A8` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00382810` | frontbin | US draft of `func_0037E568` | differs: did not build, or built to other bytes, in PAL | | `func_003828D8` | frontbin | US draft of `func_0037E630` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00382B20` | frontbin | US draft of `func_0037E878` | near miss: 16 diff with the file's flags (was 40) | @@ -265,18 +264,13 @@ with names moved to PAL addresses where the address maps are sure of them | `func_00387218` | frontbin | US draft of `func_00382F40` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00387268` | frontbin | US draft of `func_00382F90` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00387F68` | frontbin | US draft of `func_003838C0` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_003881B0` | frontbin | US draft of `func_00383B08` | near miss: 2 diff with the file's flags (was 4) | | `func_00388AF8` | frontbin | US draft of `func_00384420` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00389240` | frontbin | US draft of `func_00384B68` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00389370` | frontbin | US draft of `func_00384C98` | flags: the US matched it with `-fno-schedule-insns` `@ps2as` (a single-function override) | | `func_00389598` | frontbin | US draft of `func_00384EC0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00389B10` | frontbin | US draft of `func_00385438` | near miss: 8 diff with the file's flags (was 55) | | `func_00389C48` | frontbin | US draft of `func_00385570` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00389D00` | frontbin | US draft of `func_00385628` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00389D60` | frontbin | US draft of `func_00385688` | near miss: 9 diff with the file's flags (the US draft: 18) | -| `func_00389DB0` | frontbin | US draft of `func_003856D8` | near miss: 7 diff with the file's flags (was 24) | -| `func_00389E28` | frontbin | US draft of `func_00385750` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00389EA0` | frontbin | US draft of `func_003857C8` | near miss: 7 diff with the file's flags (was 24) | | `func_00389F18` | frontbin | US draft of `func_00385840` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00389FE0` | frontbin | US draft of `func_00385908` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0038A058` | frontbin | US draft of `func_00385980` | near miss: 61 diff with the file's flags (the US draft: 114) | @@ -627,3 +621,4 @@ with names moved to PAL addresses where the address maps are sure of them | `func_003F1998` | frontbin | US draft of `func_003EC3D0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003F1D60` | frontbin | US draft of `func_003EC798` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003F1F28` | frontbin | US draft of `func_003EC960` | flags: the US matched it with `@ps2as` (a single-function override) | +| `func_U_003B0C70` | frontbin | NTSC-U native draft at `0x003B0C70` | 2 differences: initial `lui` and stack adjustment reversed | diff --git a/nonmatching/frontbin/func_00382538.c b/nonmatching/frontbin/func_00382538.c deleted file mode 100644 index 665bdda2..00000000 --- a/nonmatching/frontbin/func_00382538.c +++ /dev/null @@ -1,10 +0,0 @@ -/* US draft of func_00382538 (rac3-uya-decomp func_0037E2A8, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00382538 */ -extern s32 func_0013D3E0(void); -f32 func_00382538(void) { - return (f32)(func_0013D3E0() - 0x4000) * 3.1415927f * (1.0f / 16384.0f); -} -/* localdecomp:end func_00382538 */ diff --git a/nonmatching/frontbin/func_003881B0.c b/nonmatching/frontbin/func_003881B0.c deleted file mode 100644 index 4a76e687..00000000 --- a/nonmatching/frontbin/func_003881B0.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Near miss of func_003881B0 with its file's own flags: tools/check.py reports 2 diff - (the version it replaces: 4). - What differs: Only the middle word of each 64-bit constant differs: ours `dsll $a1,$a1,0x10` - vs retail `dsll $a1,$a1,0x18` (shift 16 vs 24); the surrounding `ori $a1,$zero,0x8000` and - `ori $a1,$a1,0x44` now match. -*/ - -/* US draft of func_003881B0 (rac3-uya-decomp func_00383B08, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_003881B0 */ -extern void func_00392440(s32, s32, s32, s32); -extern void func_003A9440(s32, unsigned long); -extern void func_00392868(s32, s32); -void func_003881B0(s32 a0, s32 a1) { - s32 n = a0 + a1; - if (n > 16) { - n = 16; - } - func_00392440(a0, a1, ((0x3FF000 - (4 << n)) >> 13) << 13, 1); - func_003A9440(0x47, 0x30000); - func_003A9440(0x42, 0x80000044UL); - func_00392868(0x100, 0x100); - func_003A9440(0x42, 0x80000044UL); -} -/* localdecomp:end func_003881B0 */ diff --git a/nonmatching/frontbin/func_00389D00.c b/nonmatching/frontbin/func_00389D00.c deleted file mode 100644 index f4a825e1..00000000 --- a/nonmatching/frontbin/func_00389D00.c +++ /dev/null @@ -1,14 +0,0 @@ -/* US draft of func_00389D00 (rac3-uya-decomp func_00385628, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00389D00 */ -unsigned long func_00389D00(s32 a, s32 b, s32 c, s32 d, s32 e) { - s32 w = c - 6; - if (w < 0) w = 0; - w = 1 << w; - return ((unsigned long)(a) | ((unsigned long)(w) << 14) | ((unsigned long)(e) << 20) | ((unsigned long)(c) << 26) | - ((unsigned long)(d) << 30) | ((unsigned long)(1) << 34) | ((unsigned long)(0) << 35) | ((unsigned long)(b) << 37) | - ((unsigned long)(0) << 51) | ((unsigned long)(0) << 55) | ((unsigned long)(0) << 56) | ((unsigned long)(4) << 61)); -} -/* localdecomp:end func_00389D00 */ diff --git a/nonmatching/frontbin/func_00389DB0.c b/nonmatching/frontbin/func_00389DB0.c deleted file mode 100644 index b425fa30..00000000 --- a/nonmatching/frontbin/func_00389DB0.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Near miss of func_00389DB0 with its file's own flags: tools/check.py reports 7 diff - (the version it replaces: 24). -*/ - -/* US draft of func_00389DB0 (rac3-uya-decomp func_003856D8, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - -/* Retail reaches the counter with `lui`/`lw`, not through $gp. A declared global is small data - here, so the counter is read through its address instead. */ - - -/* localdecomp:start func_00389DB0 */ -extern void (*D_00226800[])(s32); -extern s32 D_00226900[]; -void func_00389DB0(void) { - s32 i; - for (i = 0; i < *(s32 *)0x001D9C08; i++) D_00226800[i](D_00226900[i]); -} -/* localdecomp:end func_00389DB0 */ diff --git a/nonmatching/frontbin/func_00389E28.c b/nonmatching/frontbin/func_00389E28.c deleted file mode 100644 index 69aa6863..00000000 --- a/nonmatching/frontbin/func_00389E28.c +++ /dev/null @@ -1,13 +0,0 @@ -/* US draft of func_00389E28 (rac3-uya-decomp func_00385750, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00389E28 */ -extern s32 D_001D9C10_00389E28; -extern void (*D_00226C00[])(s32); -extern s32 D_00226D00[]; -void func_00389E28(void) { - s32 i; - for (i = 0; i < D_001D9C10_00389E28; i++) D_00226C00[i](D_00226D00[i]); -} -/* localdecomp:end func_00389E28 */ diff --git a/nonmatching/frontbin/func_00389EA0.c b/nonmatching/frontbin/func_00389EA0.c deleted file mode 100644 index 074699a4..00000000 --- a/nonmatching/frontbin/func_00389EA0.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Near miss of func_00389EA0 with its file's own flags: tools/check.py reports 7 diff - (the version it replaces: 24). - What differs: Best (check 3) is 7 diffs: everything matches except the prologue order. - Retail loads the counter first (`lui $v0, 0x1e` + `lw $v0, -0x63ec($v0)` before the callee- - saved stores, with `move $s0, $zero` between `sd $s1` and `sd $s2` and `sd $ra` in the blez - delay slot); gcc schedules the same load after the four `sd` stores, with `move $s0, $zero` - in the blez delay slot. Loop body, re-read of the counter in the loop, `slt`/`bnel` offsets - (-0x20) and the epilogue match byte for byte. The addressing problem is solved: retail - reaches D_001D9C14 with `lui`/`%lo` (not `$gp`), so the counter must... -*/ - -/* PAL candidate for func_00389EA0 (frontbin). - * - * Started from the US draft (rac3-uya-decomp func_003857C8, commit 13cf5c5). The US - * matched it only with @ps2as; here the file's own flags must produce the retail bytes. - * - * The counter is read through a literal address: retail reaches it with `lui`/`%lo` - * (it is not small data, so a sized `extern s32` would give gcc's `$gp` form), and a - * constant address is rematerialised at each read (`lui $v0, %hi(addr)` + `lw $v0, - * %lo(addr)($v0)`), which is exactly retail's shape. Reading it through a declared - * symbol instead (unsized array, `extern s32 D_001D9C14[];` + `D_001D9C14[0]`) gives - * gcc a computed address it hoists into a callee-saved register ($s3), which is not - * retail's shape. - */ - -/* localdecomp:start func_00389EA0 */ -extern void (*D_00226E00[])(s32); -extern s32 D_00226F00[]; -void func_00389EA0(void) { - s32 i; - for (i = 0; i < *(s32 *)0x001D9C14; i++) D_00226E00[i](D_00226F00[i]); -} -/* localdecomp:end func_00389EA0 */ diff --git a/nonmatching/frontbin/func_U_003B0C70.c b/nonmatching/frontbin/func_U_003B0C70.c new file mode 100644 index 00000000..e2289d5b --- /dev/null +++ b/nonmatching/frontbin/func_U_003B0C70.c @@ -0,0 +1,50 @@ +#include "common.h" + + +/* localdecomp:start func_U_003B0C70 */ +extern s32 D_001D5520; +extern s32 D_U_001D89E0; +extern s32 D_U_001D8A14; +extern char D_U_0037B6D0[]; +extern s32 D_001D5520_003B0C70[] __asm__("D_001D5520"); + +extern char *func_U_0037DF98(s32 id); +extern s32 func_0011B2E8(char *dest, const char *format, ...); +extern void func_U_003B0F58(void); +extern s32 func_U_003B4220( + s32 type, + const char *first, + const char *second, + const char *message, + s32 flags); +extern void func_U_003B41F8(s32 first, s32 second); + +void func_U_003B0C70(void) +{ + long mode; + char *first; + char *second; + + do { + mode = D_001D5520_003B0C70[0]; + } while (0); + + if (mode != 0) { + D_001D5520 = (mode == 0); + func_U_003B0F58(); + } else { + func_0011B2E8( + D_U_0037B6D0, + func_U_0037DF98(0x50A), + D_U_001D89E0); + + first = func_U_0037DF98(0x8E2); + second = func_U_0037DF98(0x8DF); + + func_U_003B4220(0, first, second, D_U_0037B6D0, 0); + func_U_003B41F8(0x40, 0x10); + D_U_001D8A14 = 1; + } +} + +/* localdecomp:end func_U_003B0C70 */ diff --git a/progress/report.json b/progress/report.json index 0e2f9618..5a3568e6 100644 --- a/progress/report.json +++ b/progress/report.json @@ -1,15 +1,15 @@ { "version": 2, "measures": { - "fuzzy_match_percent": 8.715841, + "fuzzy_match_percent": 8.716795, "total_code": "7546948", - "matched_code": "657780", - "matched_code_percent": 8.715841, + "matched_code": "657852", + "matched_code_percent": 8.716795, "total_functions": 16164, - "matched_functions": 5807, - "matched_functions_percent": 35.925513, - "complete_code": "204304", - "complete_code_percent": 2.707108, + "matched_functions": 5808, + "matched_functions_percent": 35.9317, + "complete_code": "203716", + "complete_code_percent": 2.699316, "total_units": 424, "complete_units": 281 }, @@ -18,15 +18,15 @@ "id": "core", "name": "Core programs", "measures": { - "fuzzy_match_percent": 59.535465, + "fuzzy_match_percent": 59.546719, "total_code": "639780", - "matched_code": "380896", - "matched_code_percent": 59.535465, + "matched_code": "380968", + "matched_code_percent": 59.546719, "total_functions": 2904, - "matched_functions": 2438, - "matched_functions_percent": 83.953168, - "complete_code": "204304", - "complete_code_percent": 31.933477, + "matched_functions": 2439, + "matched_functions_percent": 83.987603, + "complete_code": "203716", + "complete_code_percent": 31.841571, "total_units": 386, "complete_units": 281 } @@ -35,15 +35,15 @@ "id": "frontbin", "name": "frontbin (front end)", "measures": { - "fuzzy_match_percent": 51.081782, - "total_code": "383996", - "matched_code": "196152", - "matched_code_percent": 51.081782, - "total_functions": 1667, - "matched_functions": 1393, - "matched_functions_percent": 83.563287, + "fuzzy_match_percent": 51.175296, + "total_code": "384584", + "matched_code": "196812", + "matched_code_percent": 51.175296, + "total_functions": 1672, + "matched_functions": 1399, + "matched_functions_percent": 83.672249, "complete_code": "38104", - "complete_code_percent": 9.92302, + "complete_code_percent": 9.907848, "total_units": 68, "complete_units": 22 } @@ -52,15 +52,15 @@ "id": "frontbin_text", "name": "frontbin .text", "measures": { - "fuzzy_match_percent": 51.081782, - "total_code": "383996", - "matched_code": "196152", - "matched_code_percent": 51.081782, - "total_functions": 1667, - "matched_functions": 1393, - "matched_functions_percent": 83.563287, + "fuzzy_match_percent": 51.175296, + "total_code": "384584", + "matched_code": "196812", + "matched_code_percent": 51.175296, + "total_functions": 1672, + "matched_functions": 1399, + "matched_functions_percent": 83.672249, "complete_code": "38104", - "complete_code_percent": 9.92302, + "complete_code_percent": 9.907848, "total_units": 68, "complete_units": 22 } @@ -69,15 +69,15 @@ "id": "boot_elf", "name": "boot_elf (engine core + boot front end)", "measures": { - "fuzzy_match_percent": 69.904364, - "total_code": "235476", - "matched_code": "164608", - "matched_code_percent": 69.904364, - "total_functions": 1043, - "matched_functions": 852, - "matched_functions_percent": 81.68744, - "complete_code": "146064", - "complete_code_percent": 62.029251, + "fuzzy_match_percent": 69.829025, + "total_code": "234888", + "matched_code": "164020", + "matched_code_percent": 69.829025, + "total_functions": 1038, + "matched_functions": 847, + "matched_functions_percent": 81.599229, + "complete_code": "145476", + "complete_code_percent": 61.934198, "total_units": 294, "complete_units": 236 } @@ -103,15 +103,15 @@ "id": "boot_elf_text", "name": "boot_elf .text", "measures": { - "fuzzy_match_percent": 94.520274, - "total_code": "80004", - "matched_code": "75620", - "matched_code_percent": 94.520274, - "total_functions": 215, - "matched_functions": 211, - "matched_functions_percent": 98.139535, - "complete_code": "75512", - "complete_code_percent": 94.385281, + "fuzzy_match_percent": 94.479702, + "total_code": "79416", + "matched_code": "75032", + "matched_code_percent": 94.479702, + "total_functions": 210, + "matched_functions": 206, + "matched_functions_percent": 98.095238, + "complete_code": "74924", + "complete_code_percent": 94.343709, "total_units": 105, "complete_units": 102 } @@ -1249,13 +1249,13 @@ { "name": "frontbin/382380", "measures": { - "fuzzy_match_percent": 18.132308, - "total_code": "24972", - "matched_code": "4528", - "matched_code_percent": 18.132308, - "total_functions": 63, - "matched_functions": 39, - "matched_functions_percent": 61.904762, + "fuzzy_match_percent": 20.29734, + "total_code": "25560", + "matched_code": "5188", + "matched_code_percent": 20.29734, + "total_functions": 68, + "matched_functions": 45, + "matched_functions_percent": 66.176471, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -1292,7 +1292,7 @@ { "name": "func_00382538", "size": "72", - "fuzzy_match_percent": 0.0, + "fuzzy_match_percent": 100.0, "address": "208", "metadata": { "virtual_address": "3679544" @@ -1676,6 +1676,15 @@ "virtual_address": "3703096" } }, + { + "name": "func_003881B0", + "size": "136", + "fuzzy_match_percent": 100.0, + "address": "23880", + "metadata": { + "virtual_address": "3703216" + } + }, { "name": "func_00388238", "size": "28", @@ -1748,6 +1757,42 @@ "virtual_address": "3708296" } }, + { + "name": "func_00389D00", + "size": "92", + "fuzzy_match_percent": 100.0, + "address": "30872", + "metadata": { + "virtual_address": "3710208" + } + }, + { + "name": "func_00389DB0", + "size": "120", + "fuzzy_match_percent": 100.0, + "address": "31048", + "metadata": { + "virtual_address": "3710384" + } + }, + { + "name": "func_00389E28", + "size": "120", + "fuzzy_match_percent": 100.0, + "address": "31168", + "metadata": { + "virtual_address": "3710504" + } + }, + { + "name": "func_00389EA0", + "size": "120", + "fuzzy_match_percent": 100.0, + "address": "31288", + "metadata": { + "virtual_address": "3710624" + } + }, { "name": "func_00389F68", "size": "120", @@ -30599,13 +30644,13 @@ "name": "boot_elf/text/388348", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "596", - "matched_code": "596", + "total_code": "460", + "matched_code": "460", "matched_code_percent": 100.0, - "total_functions": 2, - "matched_functions": 2, + "total_functions": 1, + "matched_functions": 1, "matched_functions_percent": 100.0, - "complete_code": "596", + "complete_code": "460", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -30619,15 +30664,6 @@ "metadata": { "virtual_address": "3703624" } - }, - { - "name": "func_00388590", - "size": "136", - "fuzzy_match_percent": 100.0, - "address": "584", - "metadata": { - "virtual_address": "3704208" - } } ], "metadata": { @@ -30716,13 +30752,13 @@ "name": "boot_elf/text/389978", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "5828", - "matched_code": "5828", + "total_code": "5376", + "matched_code": "5376", "matched_code_percent": 100.0, - "total_functions": 18, - "matched_functions": 18, + "total_functions": 14, + "matched_functions": 14, "matched_functions_percent": 100.0, - "complete_code": "5828", + "complete_code": "5376", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -30755,15 +30791,6 @@ "virtual_address": "3711016" } }, - { - "name": "func_0038A0E0", - "size": "92", - "fuzzy_match_percent": 100.0, - "address": "1896", - "metadata": { - "virtual_address": "3711200" - } - }, { "name": "func_0038A140", "size": "80", @@ -30773,33 +30800,6 @@ "virtual_address": "3711296" } }, - { - "name": "func_0038A190", - "size": "120", - "fuzzy_match_percent": 100.0, - "address": "2072", - "metadata": { - "virtual_address": "3711376" - } - }, - { - "name": "func_0038A208", - "size": "120", - "fuzzy_match_percent": 100.0, - "address": "2192", - "metadata": { - "virtual_address": "3711496" - } - }, - { - "name": "func_0038A280", - "size": "120", - "fuzzy_match_percent": 100.0, - "address": "2312", - "metadata": { - "virtual_address": "3711616" - } - }, { "name": "func_0038A2F8", "size": "80", diff --git a/progress/us/report.json b/progress/us/report.json index 388b7d88..4a2df8c1 100644 --- a/progress/us/report.json +++ b/progress/us/report.json @@ -1,49 +1,49 @@ { "version": 2, "measures": { - "fuzzy_match_percent": 8.888935, + "fuzzy_match_percent": 9.022748, "total_code": "7508980", - "matched_code": "627004", - "matched_code_percent": 8.350056, + "matched_code": "644980", + "matched_code_percent": 8.589449, "total_functions": 16222, - "matched_functions": 5671, - "matched_functions_percent": 34.958698, - "complete_code": "206660", - "complete_code_percent": 2.752171, - "total_units": 397, - "complete_units": 298 + "matched_functions": 5693, + "matched_functions_percent": 35.094316, + "complete_code": "224176", + "complete_code_percent": 2.985439, + "total_units": 403, + "complete_units": 307 }, "categories": [ { "id": "core", "name": "Core programs", "measures": { - "fuzzy_match_percent": 61.21906, + "fuzzy_match_percent": 62.791329, "total_code": "639076", - "matched_code": "353304", - "matched_code_percent": 55.283566, + "matched_code": "371280", + "matched_code_percent": 58.096377, "total_functions": 2893, - "matched_functions": 2363, - "matched_functions_percent": 81.679917, - "complete_code": "206660", - "complete_code_percent": 32.337312, - "total_units": 359, - "complete_units": 298 + "matched_functions": 2385, + "matched_functions_percent": 82.440373, + "complete_code": "224176", + "complete_code_percent": 35.078144, + "total_units": 365, + "complete_units": 307 } }, { "id": "frontbin", "name": "frontbin (front end)", "measures": { - "fuzzy_match_percent": 56.010046, - "total_code": "391916", - "matched_code": "191936", - "matched_code_percent": 48.97376, - "total_functions": 1660, - "matched_functions": 1370, - "matched_functions_percent": 82.53012, + "fuzzy_match_percent": 57.405296, + "total_code": "381164", + "matched_code": "193100", + "matched_code_percent": 50.660608, + "total_functions": 1658, + "matched_functions": 1381, + "matched_functions_percent": 83.293124, "complete_code": "57412", - "complete_code_percent": 14.649057, + "complete_code_percent": 15.062283, "total_units": 68, "complete_units": 26 } @@ -52,15 +52,15 @@ "id": "frontbin_text", "name": "frontbin .text", "measures": { - "fuzzy_match_percent": 56.010046, - "total_code": "391916", - "matched_code": "191936", - "matched_code_percent": 48.97376, - "total_functions": 1660, - "matched_functions": 1370, - "matched_functions_percent": 82.53012, + "fuzzy_match_percent": 57.405296, + "total_code": "381164", + "matched_code": "193100", + "matched_code_percent": 50.660608, + "total_functions": 1658, + "matched_functions": 1381, + "matched_functions_percent": 83.293124, "complete_code": "57412", - "complete_code_percent": 14.649057, + "complete_code_percent": 15.062283, "total_units": 68, "complete_units": 26 } @@ -69,17 +69,17 @@ "id": "boot_elf", "name": "boot_elf (engine core + boot front end)", "measures": { - "fuzzy_match_percent": 67.119249, - "total_code": "226844", - "matched_code": "145848", - "matched_code_percent": 64.294405, - "total_functions": 1042, - "matched_functions": 810, - "matched_functions_percent": 77.735125, - "complete_code": "136124", - "complete_code_percent": 60.007759, - "total_units": 269, - "complete_units": 255 + "fuzzy_match_percent": 68.607211, + "total_code": "237596", + "matched_code": "158840", + "matched_code_percent": 66.852977, + "total_functions": 1044, + "matched_functions": 819, + "matched_functions_percent": 78.448276, + "complete_code": "149820", + "complete_code_percent": 63.056617, + "total_units": 275, + "complete_units": 262 } }, { @@ -88,32 +88,32 @@ "measures": { "fuzzy_match_percent": 56.19116, "total_code": "155512", - "matched_code": "81736", - "matched_code_percent": 52.559288, + "matched_code": "83976", + "matched_code_percent": 53.999691, "total_functions": 820, - "matched_functions": 597, - "matched_functions_percent": 72.804878, - "complete_code": "76072", - "complete_code_percent": 48.917125, + "matched_functions": 604, + "matched_functions_percent": 73.658537, + "complete_code": "78940", + "complete_code_percent": 50.761356, "total_units": 169, - "complete_units": 161 + "complete_units": 162 } }, { "id": "boot_elf_text", "name": "boot_elf .text", "measures": { - "fuzzy_match_percent": 90.943745, - "total_code": "71332", - "matched_code": "64112", - "matched_code_percent": 89.878315, - "total_functions": 222, - "matched_functions": 213, - "matched_functions_percent": 95.945946, - "complete_code": "60052", - "complete_code_percent": 84.18662, - "total_units": 100, - "complete_units": 94 + "fuzzy_match_percent": 92.130004, + "total_code": "82084", + "matched_code": "74864", + "matched_code_percent": 91.204132, + "total_functions": 224, + "matched_functions": 215, + "matched_functions_percent": 95.982143, + "complete_code": "70880", + "complete_code_percent": 86.350568, + "total_units": 106, + "complete_units": 100 } }, { @@ -122,15 +122,15 @@ "measures": { "fuzzy_match_percent": 95.82595, "total_code": "20316", - "matched_code": "15520", - "matched_code_percent": 76.392991, + "matched_code": "19340", + "matched_code_percent": 95.195905, "total_functions": 191, - "matched_functions": 183, - "matched_functions_percent": 95.811518, - "complete_code": "13124", - "complete_code_percent": 64.599331, + "matched_functions": 185, + "matched_functions_percent": 96.858639, + "complete_code": "16944", + "complete_code_percent": 83.402245, "total_units": 22, - "complete_units": 17 + "complete_units": 19 } }, { @@ -139,15 +139,15 @@ "measures": { "fuzzy_match_percent": 95.82595, "total_code": "20316", - "matched_code": "15520", - "matched_code_percent": 76.392991, + "matched_code": "19340", + "matched_code_percent": 95.195905, "total_functions": 191, - "matched_functions": 183, - "matched_functions_percent": 95.811518, - "complete_code": "13124", - "complete_code_percent": 64.599331, + "matched_functions": 185, + "matched_functions_percent": 96.858639, + "complete_code": "16944", + "complete_code_percent": 83.402245, "total_units": 22, - "complete_units": 17 + "complete_units": 19 } }, { @@ -835,13 +835,13 @@ { "name": "frontbin/381140", "measures": { - "fuzzy_match_percent": 17.788884, - "total_code": "3980", + "fuzzy_match_percent": 18.1911, + "total_code": "3892", "matched_code": "624", - "matched_code_percent": 15.678392, - "total_functions": 36, + "matched_code_percent": 16.032888, + "total_functions": 35, "matched_functions": 31, - "matched_functions_percent": 86.111111, + "matched_functions_percent": 88.571429, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -893,15 +893,6 @@ "virtual_address": "3658144" } }, - { - "name": "func_0037D1A8", - "size": "88", - "fuzzy_match_percent": 0.0, - "address": "168", - "metadata": { - "virtual_address": "3658152" - } - }, { "name": "func_0037D200", "size": "2608", @@ -1186,13 +1177,13 @@ { "name": "frontbin/382380", "measures": { - "fuzzy_match_percent": 33.706524, - "total_code": "19688", - "matched_code": "4532", - "matched_code_percent": 23.019098, - "total_functions": 60, - "matched_functions": 40, - "matched_functions_percent": 66.666667, + "fuzzy_match_percent": 34.556081, + "total_code": "19748", + "matched_code": "5192", + "matched_code_percent": 26.29127, + "total_functions": 64, + "matched_functions": 46, + "matched_functions_percent": 71.875, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -1229,7 +1220,7 @@ { "name": "func_0037E2A8", "size": "72", - "fuzzy_match_percent": 33.33, + "fuzzy_match_percent": 100.0, "address": "208", "metadata": { "virtual_address": "3662504" @@ -1343,15 +1334,6 @@ "virtual_address": "3664672" } }, - { - "name": "func_0037EE80", - "size": "528", - "fuzzy_match_percent": 84.85, - "address": "3240", - "metadata": { - "virtual_address": "3665536" - } - }, { "name": "func_0037F090", "size": "68", @@ -1604,6 +1586,15 @@ "virtual_address": "3685008" } }, + { + "name": "func_00383B08", + "size": "136", + "fuzzy_match_percent": 100.0, + "address": "22832", + "metadata": { + "virtual_address": "3685128" + } + }, { "name": "func_00383B90", "size": "28", @@ -1658,6 +1649,42 @@ "virtual_address": "3690160" } }, + { + "name": "func_00385628", + "size": "92", + "fuzzy_match_percent": 100.0, + "address": "29776", + "metadata": { + "virtual_address": "3692072" + } + }, + { + "name": "func_003856D8", + "size": "120", + "fuzzy_match_percent": 100.0, + "address": "29952", + "metadata": { + "virtual_address": "3692248" + } + }, + { + "name": "func_00385750", + "size": "120", + "fuzzy_match_percent": 100.0, + "address": "30072", + "metadata": { + "virtual_address": "3692368" + } + }, + { + "name": "func_003857C8", + "size": "120", + "fuzzy_match_percent": 100.0, + "address": "30192", + "metadata": { + "virtual_address": "3692488" + } + }, { "name": "func_00385890", "size": "120", @@ -3742,13 +3769,13 @@ { "name": "frontbin/39A6E0", "measures": { - "fuzzy_match_percent": 47.571759, - "total_code": "18944", + "fuzzy_match_percent": 95.238034, + "total_code": "9072", "matched_code": "8372", - "matched_code_percent": 44.193412, - "total_functions": 93, + "matched_code_percent": 92.283951, + "total_functions": 89, "matched_functions": 83, - "matched_functions_percent": 89.247312, + "matched_functions_percent": 93.258427, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -4052,15 +4079,6 @@ "virtual_address": "3764128" } }, - { - "name": "func_00396FD0", - "size": "132", - "fuzzy_match_percent": 72.73, - "address": "5856", - "metadata": { - "virtual_address": "3764176" - } - }, { "name": "func_00397058", "size": "40", @@ -4187,15 +4205,6 @@ "virtual_address": "3764896" } }, - { - "name": "func_00397490", - "size": "8652", - "fuzzy_match_percent": 0.0, - "address": "7072", - "metadata": { - "virtual_address": "3765392" - } - }, { "name": "func_00399660", "size": "168", @@ -4322,15 +4331,6 @@ "virtual_address": "3776816" } }, - { - "name": "func_0039A3B0", - "size": "356", - "fuzzy_match_percent": 17.98, - "address": "19136", - "metadata": { - "virtual_address": "3777456" - } - }, { "name": "func_0039A518", "size": "12", @@ -4547,15 +4547,6 @@ "virtual_address": "3779504" } }, - { - "name": "func_0039AE08", - "size": "732", - "fuzzy_match_percent": 28.96, - "address": "21784", - "metadata": { - "virtual_address": "3780104" - } - }, { "name": "func_0039B0E8", "size": "12", @@ -7522,13 +7513,13 @@ { "name": "frontbin/3B0FF0", "measures": { - "fuzzy_match_percent": 99.272085, - "total_code": "6044", + "fuzzy_match_percent": 99.20815, + "total_code": "5556", "matched_code": "5288", - "matched_code_percent": 87.491727, - "total_functions": 44, + "matched_code_percent": 95.176386, + "total_functions": 43, "matched_functions": 41, - "matched_functions_percent": 93.181818, + "matched_functions_percent": 95.348837, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -7697,15 +7688,6 @@ "virtual_address": "3851168" } }, - { - "name": "func_003AC3F8", - "size": "488", - "fuzzy_match_percent": 100.0, - "address": "1992", - "metadata": { - "virtual_address": "3851256" - } - }, { "name": "func_003AC5E0", "size": "268", @@ -8170,13 +8152,13 @@ { "name": "frontbin/3B3050", "measures": { - "fuzzy_match_percent": 52.520727, - "total_code": "13092", + "fuzzy_match_percent": 52.371929, + "total_code": "12564", "matched_code": "4360", - "matched_code_percent": 33.30278, - "total_functions": 84, + "matched_code_percent": 34.702324, + "total_functions": 82, "matched_functions": 65, - "matched_functions_percent": 77.380952, + "matched_functions_percent": 79.268293, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -8894,15 +8876,6 @@ "virtual_address": "3870088" } }, - { - "name": "func_003B0DA0", - "size": "436", - "fuzzy_match_percent": 46.79, - "address": "13048", - "metadata": { - "virtual_address": "3870112" - } - }, { "name": "func_003B0F58", "size": "108", @@ -8912,15 +8885,6 @@ "virtual_address": "3870552" } }, - { - "name": "func_003B0FC8", - "size": "92", - "fuzzy_match_percent": 100.0, - "address": "13600", - "metadata": { - "virtual_address": "3870664" - } - }, { "name": "func_003B1028", "size": "8", @@ -9324,11 +9288,11 @@ "measures": { "fuzzy_match_percent": 86.937583, "total_code": "5328", - "matched_code": "3464", - "matched_code_percent": 65.015015, + "matched_code": "3704", + "matched_code_percent": 69.51952, "total_functions": 32, - "matched_functions": 28, - "matched_functions_percent": 87.5, + "matched_functions": 29, + "matched_functions_percent": 90.625, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -15109,13 +15073,13 @@ { "name": "frontbin/3EA8E0", "measures": { - "fuzzy_match_percent": 75.768544, - "total_code": "25652", + "fuzzy_match_percent": 75.804005, + "total_code": "25640", "matched_code": "15672", - "matched_code_percent": 61.094651, - "total_functions": 189, + "matched_code_percent": 61.123245, + "total_functions": 188, "matched_functions": 166, - "matched_functions_percent": 87.830688, + "matched_functions_percent": 88.297872, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -16616,15 +16580,6 @@ "virtual_address": "4109624" } }, - { - "name": "func_003EB578", - "size": "12", - "fuzzy_match_percent": 0.0, - "address": "25088", - "metadata": { - "virtual_address": "4109688" - } - }, { "name": "func_003EB5A8", "size": "60", @@ -16972,24 +16927,33 @@ { "name": "frontbin/ntsc_only", "measures": { - "fuzzy_match_percent": 3.922626, - "total_code": "51904", - "matched_code": "2036", - "matched_code_percent": 3.922626, - "total_functions": 68, - "matched_functions": 17, - "matched_functions_percent": 25.0, + "fuzzy_match_percent": 4.416283, + "total_code": "52080", + "matched_code": "2300", + "matched_code_percent": 4.416283, + "total_functions": 71, + "matched_functions": 21, + "matched_functions_percent": 29.577465, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, "complete_units": 0 }, "functions": [ + { + "name": "func_0037D1A8", + "size": "88", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "3658152" + } + }, { "name": "func_0037E060", "size": "12", "fuzzy_match_percent": 100.0, - "address": "0", + "address": "3768", "metadata": { "virtual_address": "3661920" } @@ -16998,7 +16962,7 @@ "name": "func_0037E098", "size": "28", "fuzzy_match_percent": 100.0, - "address": "56", + "address": "3824", "metadata": { "virtual_address": "3661976" } @@ -17007,7 +16971,7 @@ "name": "func_0037F978", "size": "1392", "fuzzy_match_percent": 0.0, - "address": "6424", + "address": "10192", "metadata": { "virtual_address": "3668344" } @@ -17016,7 +16980,7 @@ "name": "func_003830E8", "size": "1876", "fuzzy_match_percent": 0.0, - "address": "20616", + "address": "24384", "metadata": { "virtual_address": "3682536" } @@ -17025,7 +16989,7 @@ "name": "func_00383FD8", "size": "1088", "fuzzy_match_percent": 0.0, - "address": "24440", + "address": "28208", "metadata": { "virtual_address": "3686360" } @@ -17034,7 +16998,7 @@ "name": "func_00384DA0", "size": "264", "fuzzy_match_percent": 0.0, - "address": "27968", + "address": "31736", "metadata": { "virtual_address": "3689888" } @@ -17043,7 +17007,7 @@ "name": "func_00388E38", "size": "32", "fuzzy_match_percent": 0.0, - "address": "44504", + "address": "48272", "metadata": { "virtual_address": "3706424" } @@ -17052,7 +17016,7 @@ "name": "func_00389018", "size": "192", "fuzzy_match_percent": 0.0, - "address": "44984", + "address": "48752", "metadata": { "virtual_address": "3706904" } @@ -17061,7 +17025,7 @@ "name": "func_00389FB8", "size": "2192", "fuzzy_match_percent": 0.0, - "address": "48984", + "address": "52752", "metadata": { "virtual_address": "3710904" } @@ -17070,7 +17034,7 @@ "name": "func_0038A848", "size": "2404", "fuzzy_match_percent": 0.0, - "address": "51176", + "address": "54944", "metadata": { "virtual_address": "3713096" } @@ -17079,7 +17043,7 @@ "name": "func_0038F0C0", "size": "44", "fuzzy_match_percent": 100.0, - "address": "69728", + "address": "73496", "metadata": { "virtual_address": "3731648" } @@ -17088,7 +17052,7 @@ "name": "func_0038F3A0", "size": "84", "fuzzy_match_percent": 100.0, - "address": "70464", + "address": "74232", "metadata": { "virtual_address": "3732384" } @@ -17097,7 +17061,7 @@ "name": "func_0038FDC0", "size": "2344", "fuzzy_match_percent": 0.0, - "address": "73056", + "address": "76824", "metadata": { "virtual_address": "3734976" } @@ -17106,7 +17070,7 @@ "name": "func_003906E8", "size": "72", "fuzzy_match_percent": 100.0, - "address": "75400", + "address": "79168", "metadata": { "virtual_address": "3737320" } @@ -17115,7 +17079,7 @@ "name": "func_00390C18", "size": "3528", "fuzzy_match_percent": 0.0, - "address": "76728", + "address": "80496", "metadata": { "virtual_address": "3738648" } @@ -17124,7 +17088,7 @@ "name": "func_00391B30", "size": "48", "fuzzy_match_percent": 100.0, - "address": "80592", + "address": "84360", "metadata": { "virtual_address": "3742512" } @@ -17133,7 +17097,7 @@ "name": "func_00391B70", "size": "404", "fuzzy_match_percent": 100.0, - "address": "80656", + "address": "84424", "metadata": { "virtual_address": "3742576" } @@ -17142,7 +17106,7 @@ "name": "func_003921D8", "size": "548", "fuzzy_match_percent": 0.0, - "address": "82296", + "address": "86064", "metadata": { "virtual_address": "3744216" } @@ -17151,7 +17115,7 @@ "name": "func_00393290", "size": "208", "fuzzy_match_percent": 0.0, - "address": "86576", + "address": "90344", "metadata": { "virtual_address": "3748496" } @@ -17160,7 +17124,7 @@ "name": "func_00393550", "size": "44", "fuzzy_match_percent": 100.0, - "address": "87280", + "address": "91048", "metadata": { "virtual_address": "3749200" } @@ -17169,7 +17133,7 @@ "name": "func_003936A0", "size": "4", "fuzzy_match_percent": 100.0, - "address": "87616", + "address": "91384", "metadata": { "virtual_address": "3749536" } @@ -17178,7 +17142,7 @@ "name": "func_00394368", "size": "756", "fuzzy_match_percent": 0.0, - "address": "90888", + "address": "94656", "metadata": { "virtual_address": "3752808" } @@ -17187,7 +17151,7 @@ "name": "func_00395090", "size": "708", "fuzzy_match_percent": 0.0, - "address": "94256", + "address": "98024", "metadata": { "virtual_address": "3756176" } @@ -17196,7 +17160,7 @@ "name": "func_00395FE0", "size": "16", "fuzzy_match_percent": 0.0, - "address": "98176", + "address": "101944", "metadata": { "virtual_address": "3760096" } @@ -17205,7 +17169,7 @@ "name": "func_0039C548", "size": "452", "fuzzy_match_percent": 0.0, - "address": "124136", + "address": "127904", "metadata": { "virtual_address": "3786056" } @@ -17214,7 +17178,7 @@ "name": "func_0039CAB8", "size": "228", "fuzzy_match_percent": 0.0, - "address": "125528", + "address": "129296", "metadata": { "virtual_address": "3787448" } @@ -17223,7 +17187,7 @@ "name": "func_0039DB38", "size": "2412", "fuzzy_match_percent": 0.0, - "address": "129752", + "address": "133520", "metadata": { "virtual_address": "3791672" } @@ -17232,7 +17196,7 @@ "name": "func_0039E9A0", "size": "184", "fuzzy_match_percent": 0.0, - "address": "133440", + "address": "137208", "metadata": { "virtual_address": "3795360" } @@ -17241,7 +17205,7 @@ "name": "func_003A0170", "size": "132", "fuzzy_match_percent": 0.0, - "address": "139536", + "address": "143304", "metadata": { "virtual_address": "3801456" } @@ -17250,7 +17214,7 @@ "name": "func_003A35C0", "size": "1088", "fuzzy_match_percent": 0.0, - "address": "152928", + "address": "156696", "metadata": { "virtual_address": "3814848" } @@ -17259,7 +17223,7 @@ "name": "func_003A8230", "size": "4972", "fuzzy_match_percent": 0.0, - "address": "172496", + "address": "176264", "metadata": { "virtual_address": "3834416" } @@ -17268,7 +17232,7 @@ "name": "func_003AF160", "size": "16", "fuzzy_match_percent": 0.0, - "address": "200960", + "address": "204728", "metadata": { "virtual_address": "3862880" } @@ -17277,7 +17241,7 @@ "name": "func_003B0C70", "size": "164", "fuzzy_match_percent": 0.0, - "address": "207888", + "address": "211656", "metadata": { "virtual_address": "3869808" } @@ -17285,8 +17249,8 @@ { "name": "func_003B0D18", "size": "88", - "fuzzy_match_percent": 0.0, - "address": "208056", + "fuzzy_match_percent": 100.0, + "address": "211824", "metadata": { "virtual_address": "3869976" } @@ -17295,7 +17259,7 @@ "name": "func_003B3558", "size": "2144", "fuzzy_match_percent": 0.0, - "address": "218360", + "address": "222128", "metadata": { "virtual_address": "3880280" } @@ -17304,7 +17268,7 @@ "name": "func_003B7B50", "size": "860", "fuzzy_match_percent": 0.0, - "address": "236272", + "address": "240040", "metadata": { "virtual_address": "3898192" } @@ -17313,7 +17277,7 @@ "name": "func_003B8700", "size": "184", "fuzzy_match_percent": 100.0, - "address": "239264", + "address": "243032", "metadata": { "virtual_address": "3901184" } @@ -17322,16 +17286,25 @@ "name": "func_003B8EC0", "size": "56", "fuzzy_match_percent": 100.0, - "address": "241248", + "address": "245016", "metadata": { "virtual_address": "3903168" } }, + { + "name": "func_003B8EF8", + "size": "76", + "fuzzy_match_percent": 100.0, + "address": "245072", + "metadata": { + "virtual_address": "3903224" + } + }, { "name": "func_003B9730", "size": "336", "fuzzy_match_percent": 0.0, - "address": "243408", + "address": "247176", "metadata": { "virtual_address": "3905328" } @@ -17340,7 +17313,7 @@ "name": "func_003BA108", "size": "376", "fuzzy_match_percent": 100.0, - "address": "245928", + "address": "249696", "metadata": { "virtual_address": "3907848" } @@ -17349,7 +17322,7 @@ "name": "func_003BB210", "size": "388", "fuzzy_match_percent": 0.0, - "address": "250288", + "address": "254056", "metadata": { "virtual_address": "3912208" } @@ -17358,7 +17331,7 @@ "name": "func_003BB558", "size": "100", "fuzzy_match_percent": 100.0, - "address": "251128", + "address": "254896", "metadata": { "virtual_address": "3913048" } @@ -17367,7 +17340,7 @@ "name": "func_003BBC48", "size": "296", "fuzzy_match_percent": 100.0, - "address": "252904", + "address": "256672", "metadata": { "virtual_address": "3914824" } @@ -17376,7 +17349,7 @@ "name": "func_003BBD98", "size": "488", "fuzzy_match_percent": 0.0, - "address": "253240", + "address": "257008", "metadata": { "virtual_address": "3915160" } @@ -17385,7 +17358,7 @@ "name": "func_003BFEF0", "size": "456", "fuzzy_match_percent": 0.0, - "address": "269968", + "address": "273736", "metadata": { "virtual_address": "3931888" } @@ -17394,7 +17367,7 @@ "name": "func_003C26C8", "size": "416", "fuzzy_match_percent": 0.0, - "address": "280168", + "address": "283936", "metadata": { "virtual_address": "3942088" } @@ -17403,7 +17376,7 @@ "name": "func_003C9C58", "size": "3080", "fuzzy_match_percent": 0.0, - "address": "310264", + "address": "314032", "metadata": { "virtual_address": "3972184" } @@ -17412,7 +17385,7 @@ "name": "func_003CC950", "size": "496", "fuzzy_match_percent": 0.0, - "address": "321776", + "address": "325544", "metadata": { "virtual_address": "3983696" } @@ -17421,7 +17394,7 @@ "name": "func_003CCB40", "size": "436", "fuzzy_match_percent": 0.0, - "address": "322272", + "address": "326040", "metadata": { "virtual_address": "3984192" } @@ -17430,7 +17403,7 @@ "name": "func_003CCFB0", "size": "484", "fuzzy_match_percent": 0.0, - "address": "323408", + "address": "327176", "metadata": { "virtual_address": "3985328" } @@ -17439,7 +17412,7 @@ "name": "func_003CD250", "size": "544", "fuzzy_match_percent": 0.0, - "address": "324080", + "address": "327848", "metadata": { "virtual_address": "3986000" } @@ -17448,7 +17421,7 @@ "name": "func_003CD548", "size": "80", "fuzzy_match_percent": 0.0, - "address": "324840", + "address": "328608", "metadata": { "virtual_address": "3986760" } @@ -17457,7 +17430,7 @@ "name": "func_003CDDF0", "size": "128", "fuzzy_match_percent": 0.0, - "address": "327056", + "address": "330824", "metadata": { "virtual_address": "3988976" } @@ -17466,7 +17439,7 @@ "name": "func_003D3FA0", "size": "500", "fuzzy_match_percent": 0.0, - "address": "352064", + "address": "355832", "metadata": { "virtual_address": "4013984" } @@ -17475,7 +17448,7 @@ "name": "func_003D48D8", "size": "3900", "fuzzy_match_percent": 0.0, - "address": "354424", + "address": "358192", "metadata": { "virtual_address": "4016344" } @@ -17484,7 +17457,7 @@ "name": "func_003D6130", "size": "2704", "fuzzy_match_percent": 0.0, - "address": "360656", + "address": "364424", "metadata": { "virtual_address": "4022576" } @@ -17493,7 +17466,7 @@ "name": "func_003DE430", "size": "112", "fuzzy_match_percent": 0.0, - "address": "394192", + "address": "397960", "metadata": { "virtual_address": "4056112" } @@ -17502,7 +17475,7 @@ "name": "func_003DE4A0", "size": "184", "fuzzy_match_percent": 0.0, - "address": "394304", + "address": "398072", "metadata": { "virtual_address": "4056224" } @@ -17511,7 +17484,7 @@ "name": "func_003E0068", "size": "260", "fuzzy_match_percent": 100.0, - "address": "401416", + "address": "405184", "metadata": { "virtual_address": "4063336" } @@ -17520,7 +17493,7 @@ "name": "func_003E0190", "size": "456", "fuzzy_match_percent": 0.0, - "address": "401712", + "address": "405480", "metadata": { "virtual_address": "4063632" } @@ -17529,7 +17502,7 @@ "name": "func_003E92D8", "size": "1500", "fuzzy_match_percent": 0.0, - "address": "438904", + "address": "442672", "metadata": { "virtual_address": "4100824" } @@ -17538,7 +17511,7 @@ "name": "func_003E9D78", "size": "768", "fuzzy_match_percent": 0.0, - "address": "441624", + "address": "445392", "metadata": { "virtual_address": "4103544" } @@ -17547,7 +17520,7 @@ "name": "func_003EA290", "size": "948", "fuzzy_match_percent": 0.0, - "address": "442928", + "address": "446696", "metadata": { "virtual_address": "4104848" } @@ -17556,7 +17529,7 @@ "name": "func_003EA980", "size": "48", "fuzzy_match_percent": 0.0, - "address": "444704", + "address": "448472", "metadata": { "virtual_address": "4106624" } @@ -17565,7 +17538,7 @@ "name": "func_003EAC88", "size": "1096", "fuzzy_match_percent": 0.0, - "address": "445480", + "address": "449248", "metadata": { "virtual_address": "4107400" } @@ -17574,16 +17547,25 @@ "name": "func_003EB160", "size": "32", "fuzzy_match_percent": 0.0, - "address": "446720", + "address": "450488", "metadata": { "virtual_address": "4108640" } }, + { + "name": "func_003EB578", + "size": "12", + "fuzzy_match_percent": 100.0, + "address": "451536", + "metadata": { + "virtual_address": "4109688" + } + }, { "name": "func_003EB588", "size": "12", "fuzzy_match_percent": 100.0, - "address": "447784", + "address": "451552", "metadata": { "virtual_address": "4109704" } @@ -17592,7 +17574,7 @@ "name": "func_003EB598", "size": "12", "fuzzy_match_percent": 100.0, - "address": "447800", + "address": "451568", "metadata": { "virtual_address": "4109720" } @@ -27738,15 +27720,15 @@ "measures": { "fuzzy_match_percent": 100.0, "total_code": "2868", - "matched_code": "628", - "matched_code_percent": 21.896792, + "matched_code": "2868", + "matched_code_percent": 100.0, "total_functions": 11, - "matched_functions": 4, - "matched_functions_percent": 36.363636, - "complete_code": "0", - "complete_code_percent": 0.0, + "matched_functions": 11, + "matched_functions_percent": 100.0, + "complete_code": "2868", + "complete_code_percent": 100.0, "total_units": 1, - "complete_units": 0 + "complete_units": 1 }, "functions": [ { @@ -27850,7 +27832,7 @@ } ], "metadata": { - "complete": false, + "complete": true, "source_path": "src/boot_elf/core/libgcc/frame.c", "progress_categories": [ "core", @@ -29708,13 +29690,13 @@ "name": "boot_elf/text/3831F0", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "1632", - "matched_code": "1632", + "total_code": "2160", + "matched_code": "2160", "matched_code_percent": 100.0, - "total_functions": 3, - "matched_functions": 3, + "total_functions": 4, + "matched_functions": 4, "matched_functions_percent": 100.0, - "complete_code": "1632", + "complete_code": "2160", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -29729,6 +29711,15 @@ "virtual_address": "3682808" } }, + { + "name": "func_00383510", + "size": "528", + "fuzzy_match_percent": 100.0, + "address": "792", + "metadata": { + "virtual_address": "3683600" + } + }, { "name": "func_00383768", "size": "336", @@ -29933,13 +29924,13 @@ "name": "boot_elf/text/388348", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "596", - "matched_code": "596", + "total_code": "460", + "matched_code": "460", "matched_code_percent": 100.0, - "total_functions": 2, - "matched_functions": 2, + "total_functions": 1, + "matched_functions": 1, "matched_functions_percent": 100.0, - "complete_code": "596", + "complete_code": "460", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -29953,15 +29944,6 @@ "metadata": { "virtual_address": "3703584" } - }, - { - "name": "func_00388568", - "size": "136", - "fuzzy_match_percent": 100.0, - "address": "584", - "metadata": { - "virtual_address": "3704168" - } } ], "metadata": { @@ -30050,13 +30032,13 @@ "name": "boot_elf/text/389978", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "5828", - "matched_code": "5828", + "total_code": "5376", + "matched_code": "5376", "matched_code_percent": 100.0, - "total_functions": 18, - "matched_functions": 18, + "total_functions": 14, + "matched_functions": 14, "matched_functions_percent": 100.0, - "complete_code": "5828", + "complete_code": "5376", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -30089,15 +30071,6 @@ "virtual_address": "3710928" } }, - { - "name": "func_0038A088", - "size": "92", - "fuzzy_match_percent": 100.0, - "address": "1896", - "metadata": { - "virtual_address": "3711112" - } - }, { "name": "func_0038A0E8", "size": "80", @@ -30107,33 +30080,6 @@ "virtual_address": "3711208" } }, - { - "name": "func_0038A138", - "size": "120", - "fuzzy_match_percent": 100.0, - "address": "2072", - "metadata": { - "virtual_address": "3711288" - } - }, - { - "name": "func_0038A1B0", - "size": "120", - "fuzzy_match_percent": 100.0, - "address": "2192", - "metadata": { - "virtual_address": "3711408" - } - }, - { - "name": "func_0038A228", - "size": "120", - "fuzzy_match_percent": 100.0, - "address": "2312", - "metadata": { - "virtual_address": "3711528" - } - }, { "name": "func_0038A2A0", "size": "80", @@ -31391,13 +31337,13 @@ "name": "boot_elf/text/39BE18", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "608", - "matched_code": "608", + "total_code": "740", + "matched_code": "740", "matched_code_percent": 100.0, - "total_functions": 5, - "matched_functions": 5, + "total_functions": 6, + "matched_functions": 6, "matched_functions_percent": 100.0, - "complete_code": "608", + "complete_code": "740", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -31447,6 +31393,15 @@ "metadata": { "virtual_address": "3784656" } + }, + { + "name": "func_0039C088", + "size": "132", + "fuzzy_match_percent": 100.0, + "address": "904", + "metadata": { + "virtual_address": "3784840" + } } ], "metadata": { @@ -31531,6 +31486,42 @@ ] } }, + { + "name": "boot_elf/text/39C7F0", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "8652", + "matched_code": "8652", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "8652", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0039C6D8", + "size": "8652", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "3786456" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/boot_elf/text/39C7F0.c", + "progress_categories": [ + "core", + "boot_elf", + "boot_elf_text" + ] + } + }, { "name": "boot_elf/text/39E9C0", "measures": { @@ -31675,6 +31666,78 @@ ] } }, + { + "name": "boot_elf/text/39F728", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "356", + "matched_code": "356", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "356", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0039F610", + "size": "356", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "3798544" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/boot_elf/text/39F728.c", + "progress_categories": [ + "core", + "boot_elf", + "boot_elf_text" + ] + } + }, + { + "name": "boot_elf/text/3A0180", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "732", + "matched_code": "732", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "732", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_003A0068", + "size": "732", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "3801192" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/boot_elf/text/3A0180.c", + "progress_categories": [ + "core", + "boot_elf", + "boot_elf_text" + ] + } + }, { "name": "boot_elf/text/3A0510", "measures": { @@ -32485,6 +32548,42 @@ ] } }, + { + "name": "boot_elf/text/3B1590", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "488", + "matched_code": "488", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "488", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_003B1BB8", + "size": "488", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "3873720" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/boot_elf/text/3B1590.c", + "progress_categories": [ + "core", + "boot_elf", + "boot_elf_text" + ] + } + }, { "name": "boot_elf/text/3B3610", "measures": { @@ -32557,6 +32656,78 @@ ] } }, + { + "name": "boot_elf/text/3B6638", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "436", + "matched_code": "436", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "436", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_003B6560", + "size": "436", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "3892576" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/boot_elf/text/3B6638.c", + "progress_categories": [ + "core", + "boot_elf", + "boot_elf_text" + ] + } + }, + { + "name": "boot_elf/text/3B6860", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "92", + "matched_code": "92", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "92", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_003B6788", + "size": "92", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "3893128" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/boot_elf/text/3B6860.c", + "progress_categories": [ + "core", + "boot_elf", + "boot_elf_text" + ] + } + }, { "name": "boot_elf/text/3B6AA8", "measures": { @@ -34153,13 +34324,13 @@ { "name": "boot_elf/text/ntsc_only", "measures": { - "fuzzy_match_percent": 72.088547, - "total_code": "4156", - "matched_code": "2996", - "matched_code_percent": 72.088547, - "total_functions": 8, - "matched_functions": 6, - "matched_functions_percent": 75.0, + "fuzzy_match_percent": 71.568627, + "total_code": "4080", + "matched_code": "2920", + "matched_code_percent": 71.568627, + "total_functions": 7, + "matched_functions": 5, + "matched_functions_percent": 71.428571, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -34193,15 +34364,6 @@ "virtual_address": "3920008" } }, - { - "name": "func_003BE6B8", - "size": "76", - "fuzzy_match_percent": 100.0, - "address": "223208", - "metadata": { - "virtual_address": "3925688" - } - }, { "name": "func_003C0010", "size": "244", @@ -35847,15 +36009,15 @@ "measures": { "fuzzy_match_percent": 100.0, "total_code": "472", - "matched_code": "0", - "matched_code_percent": 0.0, + "matched_code": "472", + "matched_code_percent": 100.0, "total_functions": 1, - "matched_functions": 0, - "matched_functions_percent": 0.0, - "complete_code": "0", - "complete_code_percent": 0.0, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "472", + "complete_code_percent": 100.0, "total_units": 1, - "complete_units": 0 + "complete_units": 1 }, "functions": [ { @@ -35869,7 +36031,7 @@ } ], "metadata": { - "complete": false, + "complete": true, "source_path": "src/i5bootn/8015A0.c", "progress_categories": [ "core", @@ -35883,15 +36045,15 @@ "measures": { "fuzzy_match_percent": 100.0, "total_code": "3348", - "matched_code": "0", - "matched_code_percent": 0.0, + "matched_code": "3348", + "matched_code_percent": 100.0, "total_functions": 1, - "matched_functions": 0, - "matched_functions_percent": 0.0, - "complete_code": "0", - "complete_code_percent": 0.0, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "3348", + "complete_code_percent": 100.0, "total_units": 1, - "complete_units": 0 + "complete_units": 1 }, "functions": [ { @@ -35905,7 +36067,7 @@ } ], "metadata": { - "complete": false, + "complete": true, "source_path": "src/i5bootn/801778.c", "progress_categories": [ "core", diff --git a/src/frontbin/382380.c b/src/frontbin/382380.c index b4ea028b..420665f5 100644 --- a/src/frontbin/382380.c +++ b/src/frontbin/382380.c @@ -34,7 +34,12 @@ f32 func_003824E0(f32 a, f32 b) { /* localdecomp:end func_003824E0 */ extern s32 func_0013D3E0(void); -INCLUDE_ASM("asm/nonmatchings/text", func_00382538); +/* localdecomp:start func_00382538 */ +extern s32 func_0013D3E0(void); +f32 func_00382538(void) { + return (f32)(func_0013D3E0() - 0x4000) * 3.1415927f * (1.0f / 16384.0f); +} +/* localdecomp:end func_00382538 */ /* localdecomp:start func_00382580 */ extern f32 func_00382538(void); @@ -787,6 +792,9 @@ extern s32 D_001D99A8; attribute that keeps gcc's `.extern` size hint out of the assembly. */ extern s32 D_001D9C08, D_001D9C10, D_001D9C14, D_001D9C0C, D_001D9C38, D_001D9C40; extern s32 D_001D9BDC, D_001D9BE0, D_001D9D50, D_001D99D4, D_001D99D8, D_001D99C0; +__asm__(".extern D_001D5884, 1"); +__asm__(".extern D_001D58C0, 1"); +__asm__(".extern D_001D58D0, 1"); __asm__(".extern D_001D9C08, 16"); __asm__(".extern D_001D9C10, 16"); __asm__(".extern D_001D9C14, 16"); @@ -847,7 +855,22 @@ void func_00388138(void) { extern void func_00392440(s32, s32, s32, s32); extern void func_003A9440(s32, unsigned long); extern void func_00392868(s32, s32); -INCLUDE_ASM("asm/nonmatchings/text", func_003881B0); +/* localdecomp:start func_003881B0 */ +extern void func_00392440(s32, s32, s32, s32); +extern void func_003A9440(s32, unsigned long); +extern void func_00392868(s32, s32); +void func_003881B0(s32 a0, s32 a1) { + s32 n = a0 + a1; + if (n > 16) { + n = 16; + } + func_00392440(a0, a1, ((0x3FF000 - (4 << n)) >> 13) << 13, 1); + func_003A9440(0x47, 0x30000); + func_003A9440(0x42, 0x8000000044UL); + func_00392868(0x100, 0x100); + func_003A9440(0x42, 0x8000000044UL); +} +/* localdecomp:end func_003881B0 */ /* localdecomp:start func_00388238 */ extern void func_003922B8(void); @@ -1041,7 +1064,17 @@ extern void func_0038CC88(); extern void func_003A9618(); INCLUDE_ASM("asm/nonmatchings/text", func_00389C48); -INCLUDE_ASM("asm/nonmatchings/text", func_00389D00); +/* localdecomp:start func_00389D00 */ +unsigned long func_00389D00(s32 a, s32 b, s32 c, s32 d, s32 e) { + s32 w = c - 6; + if (w < 0) w = 0; + w = 1 << w; + return ((unsigned long)(a) | ((unsigned long)(w) << 14) | ((unsigned long)(e) << 20) | ((unsigned long)(c) << 26) | + ((unsigned long)(d) << 30) | ((unsigned long)(1) << 34) | ((unsigned long)(0) << 35) | ((unsigned long)(b) << 37) | + ((unsigned long)(0) << 51) | ((unsigned long)(0) << 55) | ((unsigned long)(0) << 56) | ((unsigned long)(4) << 61)); +} +/* localdecomp:end func_00389D00 */ + extern s32 D_001D9C08_00389D60; extern s32 D_00226800_00389D60[]; @@ -1051,17 +1084,50 @@ INCLUDE_ASM("asm/nonmatchings/text", func_00389D60); extern s32 D_001D9C08_00389DB0; extern void (*D_00226800[])(s32); extern s32 D_00226900[]; -INCLUDE_ASM("asm/nonmatchings/text", func_00389DB0); +/* localdecomp:start func_00389DB0 */ +extern s32 D_001D9C08_00389DB0; +extern void (*D_00226800[])(s32); +extern s32 D_00226900[]; +void func_00389DB0(void) { + s32 i; + + for (i = 0; i < D_001D9C08_00389DB0; i++) { + D_00226800[i](D_00226900[i]); + } +} +/* localdecomp:end func_00389DB0 */ + +extern s32 D_001D9C10_00389E28; +extern void (*D_00226C00[])(s32); +extern s32 D_00226D00[]; +/* localdecomp:start func_00389E28 */ extern s32 D_001D9C10_00389E28; extern void (*D_00226C00[])(s32); extern s32 D_00226D00[]; -INCLUDE_ASM("asm/nonmatchings/text", func_00389E28); +void func_00389E28(void) { + s32 i; + for (i = 0; i < D_001D9C10_00389E28; i++) D_00226C00[i](D_00226D00[i]); +} +/* localdecomp:end func_00389E28 */ + extern s32 D_001D9C14_00389EA0; extern void (*D_00226E00[])(s32); extern s32 D_00226F00[]; -INCLUDE_ASM("asm/nonmatchings/text", func_00389EA0); +/* localdecomp:start func_00389EA0 */ +extern s32 D_001D9C14_00389EA0; +extern void (*D_00226E00[])(s32); +extern s32 D_00226F00[]; + +void func_00389EA0(void) { + s32 i; + + for (i = 0; i < D_001D9C14_00389EA0; i++) { + D_00226E00[i](D_00226F00[i]); + } +} +/* localdecomp:end func_00389EA0 */ extern s32 D_001D9C0C_00389F18; extern s32 D_00226B00[]; diff --git a/src/us/frontbin/0037D1A8.c b/src/us/frontbin/0037D1A8.c new file mode 100644 index 00000000..92086bc4 --- /dev/null +++ b/src/us/frontbin/0037D1A8.c @@ -0,0 +1,24 @@ +#include "common.h" + + +/* localdecomp:start func_U_0037D1A8 */ +typedef struct { + u8 pad[0x84]; + void *buffer; +} FrontendState_0037D1A8; + +extern FrontendState_0037D1A8 D_U_00227600; + +extern void *func_0011A264(void *dest, s32 value, u32 size); +extern void *func_U_003ECDC0(u32 size, void *buffer); +extern void *func_U_003A9B10(void *object, u32 size); + +void func_U_0037D1A8(void) +{ + void *object; + + func_0011A264(D_U_00227600.buffer, 0xCD, 0x40000); + object = func_U_003ECDC0(0x24F10, D_U_00227600.buffer); + *(void **)0x001D5C78 = func_U_003A9B10(object, 0x40000); +} +/* localdecomp:end func_U_0037D1A8 */ diff --git a/src/us/frontbin/003B0D18.c b/src/us/frontbin/003B0D18.c new file mode 100644 index 00000000..8fa2038c --- /dev/null +++ b/src/us/frontbin/003B0D18.c @@ -0,0 +1,30 @@ + +#include "common.h" + + + +/* localdecomp:start func_U_003B0D18 */ +typedef struct { + u8 pad[0xB7]; + u8 language; +} Settings_003B0D18; + +extern Settings_003B0D18 D_00143950; +extern void func_U_003B0DA0(void); + +void func_U_003B0D18(void) +{ + Settings_003B0D18 *settings = &D_00143950; + u32 current = settings->language; + + if (current == 0) { + settings->language = 2; + } else if (current == 2) { + settings->language = 4; + } else if (current == 4) { + settings->language = 0; + } + + func_U_003B0DA0(); +} +/* localdecomp:end func_U_003B0D18 */ diff --git a/src/us/frontbin/003B8EF8.c b/src/us/frontbin/003B8EF8.c new file mode 100644 index 00000000..107d6837 --- /dev/null +++ b/src/us/frontbin/003B8EF8.c @@ -0,0 +1,19 @@ +#include "common.h" + +/* localdecomp:start func_U_003B8EF8 */ +extern s32 D_U_001DA340; +__asm__(".extern D_U_001DA340, 16"); +extern s16 D_0016C5A2[]; + +extern s32 func_U_00388398(s32 *counter); +extern void func_U_003B8A68(s32 position, s32 duration, + s32 fadeIn, s32 fadeOut); + +s32 func_U_003B8EF8(void) { + s32 complete; + + complete = func_U_00388398(&D_U_001DA340) != 0; + func_U_003B8A68(D_0016C5A2[0], 300, 15, 15); + return complete; +} +/* localdecomp:end func_U_003B8EF8 */ \ No newline at end of file diff --git a/src/us/frontbin/003EB578.c b/src/us/frontbin/003EB578.c new file mode 100644 index 00000000..23e2f7aa --- /dev/null +++ b/src/us/frontbin/003EB578.c @@ -0,0 +1,12 @@ +#include "common.h" + +/* localdecomp:start func_U_003EB578 */ +typedef struct { + u8 pad[0x2C]; + u8 *data; +} Object_003EB578; + +void func_U_003EB578(Object_003EB578 *object, f32 value) { + *(f32 *)(object->data + 0x50) = value; +} +/* localdecomp:end func_U_003EB578 */ \ No newline at end of file From 3314da4a0b293e4d0894deae90b5121a7fe440f1 Mon Sep 17 00:00:00 2001 From: DameNavarro Date: Sun, 1 Nov 2026 20:16:37 -0500 Subject: [PATCH 3/3] feat(frontbin): match 20 shared functions Integrate shared implementations adapted from the NTSC decomp drafts (GPL-3.0), using existing file flags. Preserve required symbol-size hints and fixed-address global accesses. Retire 20 integrated drafts, retain four documented unfinished attempts, and refresh declarations and progress records. Verification: tools/build.py --version pal --target all reported three MATCH results; tools/asm_build.py --version us --c reported 54/54 targets matching. All 20 integrations are selected from C. tools/version_map.py --check, tests/check_repository.py, and all 24 unit tests passed. --- README.md | 18 +- config/frontbin/symbol_addrs_resolved.txt | 3 + config/us/built.tsv | 20 + config/us/map.tsv | 514 ++++++++-------- include/bytematch_names.h | 34 +- nonmatching/README.md | 28 +- nonmatching/frontbin/func_00381FF0.c | 42 +- nonmatching/frontbin/func_00385D28.c | 42 -- nonmatching/frontbin/func_003864C0.c | 39 -- nonmatching/frontbin/func_00387218.c | 18 - nonmatching/frontbin/func_00387268.c | 46 -- nonmatching/frontbin/func_00387F68.c | 39 -- nonmatching/frontbin/func_00389240.c | 63 -- nonmatching/frontbin/func_00389C48.c | 29 - nonmatching/frontbin/func_00389D60.c | 29 - nonmatching/frontbin/func_00389F18.c | 17 - nonmatching/frontbin/func_00389FE0.c | 28 - nonmatching/frontbin/func_0038A238.c | 56 -- nonmatching/frontbin/func_0038A3B8.c | 32 - nonmatching/frontbin/func_0038ABC0.c | 44 -- nonmatching/frontbin/func_0038AD40.c | 24 - nonmatching/frontbin/func_0038AE20.c | 18 - nonmatching/frontbin/func_0038B670.c | 41 -- nonmatching/frontbin/func_0038B850.c | 45 -- nonmatching/frontbin/func_0039AEF0.c | 37 -- nonmatching/frontbin/func_0039B088.c | 24 - nonmatching/frontbin/func_003AB830.c | 20 - nonmatching/frontbin/func_003B4658.c | 40 +- nonmatching/frontbin/func_003BDCB0.c | 35 +- nonmatching/frontbin/func_U_003B0C70.c | 5 + progress/report.json | 607 ++++++++----------- progress/us/report.json | 611 ++++++++----------- src/frontbin/382380.c | 699 +++++++++++++++++++++- src/frontbin/38CA08.c | 1 + src/frontbin/39A6E0.c | 22 +- src/frontbin/3AA9D8.c | 18 +- src/frontbin/3BB0D8.c | 2 +- src/frontbin/3E58A8.c | 2 +- src/us/frontbin/003B8EF8.c | 2 +- src/us/frontbin/003EB578.c | 2 +- 40 files changed, 1624 insertions(+), 1772 deletions(-) delete mode 100644 nonmatching/frontbin/func_00385D28.c delete mode 100644 nonmatching/frontbin/func_003864C0.c delete mode 100644 nonmatching/frontbin/func_00387218.c delete mode 100644 nonmatching/frontbin/func_00387268.c delete mode 100644 nonmatching/frontbin/func_00387F68.c delete mode 100644 nonmatching/frontbin/func_00389240.c delete mode 100644 nonmatching/frontbin/func_00389C48.c delete mode 100644 nonmatching/frontbin/func_00389D60.c delete mode 100644 nonmatching/frontbin/func_00389F18.c delete mode 100644 nonmatching/frontbin/func_00389FE0.c delete mode 100644 nonmatching/frontbin/func_0038A238.c delete mode 100644 nonmatching/frontbin/func_0038A3B8.c delete mode 100644 nonmatching/frontbin/func_0038ABC0.c delete mode 100644 nonmatching/frontbin/func_0038AD40.c delete mode 100644 nonmatching/frontbin/func_0038AE20.c delete mode 100644 nonmatching/frontbin/func_0038B670.c delete mode 100644 nonmatching/frontbin/func_0038B850.c delete mode 100644 nonmatching/frontbin/func_0039AEF0.c delete mode 100644 nonmatching/frontbin/func_0039B088.c delete mode 100644 nonmatching/frontbin/func_003AB830.c diff --git a/README.md b/README.md index 6fc971de..2e55ae36 100644 --- a/README.md +++ b/README.md @@ -35,20 +35,20 @@ Decompilation progress is tracked live on **[openrac.dev](https://openrac.dev)** | Program | Functions | Final source | in C | ASM_FUNC | LINKER_REMNANT | INCLUDE_ASM | | --- | ---: | ---: | ---: | ---: | ---: | ---: | -| frontbin | 1672 | 1399 (83.7%) | 1040 | 138 | 221 | 273 | -| boot_elf | 1038 | 847 (81.6%) | 570 | 204 | 73 | 191 | +| frontbin | 1690 | 1419 (84.0%) | 1060 | 138 | 221 | 271 | +| boot_elf | 1020 | 829 (81.3%) | 552 | 204 | 73 | 191 | | i5bootn | 194 | 193 (99.5%) | 41 | 147 | 5 | 1 | | Shared level code | 7747 | 2758 (35.6%) | 2259 | 0 | 499 | 4989 | | Level-specific code | 5513 | 611 (11.1%) | 449 | 0 | 162 | 4902 | | | Functions (exact) | Code (exact) | Fuzzy | | --- | ---: | ---: | ---: | -| Core programs | 2,439 of 2,904 | 380,968 of 639,780 bytes (59.55%) | 59.55% | +| Core programs | 2,441 of 2,904 | 381,516 of 639,780 bytes (59.63%) | 59.63% | | Shared level code | 2,758 of 7,747 | 251,444 of 3,914,160 bytes (6.42%) | 6.42% | | Level-specific code | 611 of 5,513 | 25,440 of 2,993,008 bytes (0.85%) | 0.85% | -| **Total** | 5,808 of 16,164 | 657,852 of 7,546,948 bytes (8.72%) | 8.72% | +| **Total** | 5,810 of 16,164 | 658,400 of 7,546,948 bytes (8.72%) | 8.72% | -Each distinct function counts once: boot_elf's copy of the front end is frontbin's, and a level function counts once however many of the 49 levels have it. 203,716 bytes (2.70%) are in source files with nothing left to decompile. +Each distinct function counts once: boot_elf's copy of the front end is frontbin's, and a level function counts once however many of the 49 levels have it. 199,208 bytes (2.64%) are in source files with nothing left to decompile. **NTSC-U** (`SCUS-973.53`: 3 core programs and 51 levels, built byte-identical from assembly; [docs/versions.md](docs/versions.md)): @@ -56,18 +56,18 @@ Each distinct function counts once: boot_elf's copy of the front end is frontbin | NTSC-U program | Functions | Final source | in C | ASM_FUNC | LINKER_REMNANT | INCLUDE_ASM | | --- | ---: | ---: | ---: | ---: | ---: | ---: | -| frontbin | 1658 | 1381 (83.3%) | 1023 | 138 | 220 | 277 | -| boot_elf | 1044 | 819 (78.4%) | 548 | 204 | 67 | 225 | +| frontbin | 1676 | 1401 (83.6%) | 1043 | 138 | 220 | 275 | +| boot_elf | 1026 | 801 (78.1%) | 530 | 204 | 67 | 225 | | i5bootn | 191 | 185 (96.9%) | 37 | 145 | 3 | 6 | | Shared level code | 7728 | 2715 (35.1%) | 2209 | 0 | 506 | 5013 | | Level-specific code | 5601 | 593 (10.6%) | 431 | 0 | 162 | 5008 | | | Functions (exact) | Code (exact) | Fuzzy | | --- | ---: | ---: | ---: | -| Core programs | 2,385 of 2,893 | 371,280 of 639,076 bytes (58.10%) | 62.79% | +| Core programs | 2,387 of 2,893 | 371,828 of 639,076 bytes (58.18%) | 62.85% | | Shared level code | 2,715 of 7,728 | 249,772 of 3,883,768 bytes (6.43%) | 6.46% | | Level-specific code | 593 of 5,601 | 23,928 of 2,986,136 bytes (0.80%) | 0.85% | -| **Total** | 5,693 of 16,222 | 644,980 of 7,508,980 bytes (8.59%) | 9.02% | +| **Total** | 5,695 of 16,222 | 645,528 of 7,508,980 bytes (8.60%) | 9.03% | Counted from the NTSC-U disc's own function tables; a function is final when PAL's source for the function with its code checks MATCH there (config/us/map.tsv, tools/version_map.py), and the fuzzy figure adds what the near misses and the C that does not check yet reach there (docs/versions.md). 51 levels; each distinct function counts once. diff --git a/config/frontbin/symbol_addrs_resolved.txt b/config/frontbin/symbol_addrs_resolved.txt index 65dd0c27..dc2958b7 100644 --- a/config/frontbin/symbol_addrs_resolved.txt +++ b/config/frontbin/symbol_addrs_resolved.txt @@ -580,6 +580,7 @@ D_001D8014_003A91D0 = 0x001D8014; D_001D81AC_003AB890 = 0x001D81AC; D_001D81B0_003AB890 = 0x001D81B0; D_001D81E8_003AB168 = 0x001D81E8; +D_001D81E8_003AB830 = 0x001D81E8; D_001D8434_003AC948 = 0x001D8434; D_001D8438_003AC948 = 0x001D8438; D_001D8880 = 0x001D8880; @@ -678,6 +679,8 @@ D_001D9C10_00388AF8 = 0x001D9C10; D_001D9C10_00389E28 = 0x001D9C10; D_001D9C14_00388AF8 = 0x001D9C14; D_001D9C14_00389EA0 = 0x001D9C14; +D_001D9C18_00389FE0 = 0x001D9C18; +D_001D9C28_00389FE0 = 0x001D9C28; D_001D9C38_00388AF8 = 0x001D9C38; D_001D9C38_00389FE0 = 0x001D9C38; D_001D9C40_0038A058 = 0x001D9C40; diff --git a/config/us/built.tsv b/config/us/built.tsv index 4a7b51f2..457bc636 100644 --- a/config/us/built.tsv +++ b/config/us/built.tsv @@ -1617,17 +1617,34 @@ frontbin func_00384AC8 1 - frontbin func_00384BB8 1 - frontbin func_00384CC8 1 - frontbin func_00385398 1 - +frontbin func_00385D28 1 - frontbin func_00385EF0 1 - +frontbin func_003864C0 1 - frontbin func_00386678 1 - +frontbin func_00387218 1 - +frontbin func_00387268 1 - frontbin func_00387EF0 1 - +frontbin func_00387F68 1 - frontbin func_00388138 1 - frontbin func_003881B0 1 - frontbin func_00388238 1 - +frontbin func_00389240 1 - +frontbin func_00389C48 1 - frontbin func_00389D00 1 - +frontbin func_00389D60 1 - frontbin func_00389DB0 1 - frontbin func_00389E28 1 - frontbin func_00389EA0 1 - +frontbin func_00389F18 1 - frontbin func_00389F68 1 - +frontbin func_00389FE0 1 - +frontbin func_0038A238 1 - +frontbin func_0038A3B8 1 - +frontbin func_0038ABC0 1 - +frontbin func_0038AD40 1 - +frontbin func_0038AE20 1 - +frontbin func_0038B670 1 - +frontbin func_0038B850 1 - frontbin func_0038C3B0 1 - frontbin func_0038C9B0 1 - frontbin func_0038CDB8 1 - @@ -1716,7 +1733,9 @@ frontbin func_0039A9B0 1 - frontbin func_0039AA38 1 - frontbin func_0039AC08 1 - frontbin func_0039ADD8 0 frontbin: starts on a 4-mod-8 address here; C starts 8-aligned +frontbin func_0039AEF0 1 - frontbin func_0039B038 1 - +frontbin func_0039B088 1 - frontbin func_0039B0B0 1 - frontbin func_0039B0D8 1 - frontbin func_0039B168 1 - @@ -1899,6 +1918,7 @@ frontbin func_003AB570 1 - frontbin func_003AB738 1 - frontbin func_003AB778 1 - frontbin func_003AB820 1 - +frontbin func_003AB830 1 - frontbin func_003AB890 1 - frontbin func_003AB988 1 - frontbin func_003AB9B8 1 - diff --git a/config/us/map.tsv b/config/us/map.tsv index 57c9c9b7..c1a68958 100644 --- a/config/us/map.tsv +++ b/config/us/map.tsv @@ -2749,32 +2749,32 @@ func_003822C8 frontbin - - 108 INCLUDE_ASM none 0.00 - func_00382338 frontbin - - 12 LINKER_REMNANT none 0.00 - func_00382348 frontbin func_0037E0B8 0037E0B8 52 C match 100.00 2dee3cf52033 func_00382380 frontbin func_0037E0F0 0037E0F0 232 INCLUDE_ASM asm 0.00 - -func_00382468 frontbin func_0037E1D8 0037E1D8 44 C match 100.00 2e5f5c8ec003 -func_00382498 frontbin func_0037E208 0037E208 68 C match 100.00 2e5f5c8ec003 -func_003824E0 frontbin func_0037E250 0037E250 84 C match 100.00 2e5f5c8ec003 -func_00382538 frontbin func_0037E2A8 0037E2A8 72 C match 100.00 2e5f5c8ec003 -func_00382580 frontbin func_0037E2F0 0037E2F0 120 C match 100.00 2e5f5c8ec003 +func_00382468 frontbin func_0037E1D8 0037E1D8 44 C match 100.00 82439e27ff53 +func_00382498 frontbin func_0037E208 0037E208 68 C match 100.00 82439e27ff53 +func_003824E0 frontbin func_0037E250 0037E250 84 C match 100.00 82439e27ff53 +func_00382538 frontbin func_0037E2A8 0037E2A8 72 C match 100.00 82439e27ff53 +func_00382580 frontbin func_0037E2F0 0037E2F0 120 C match 100.00 82439e27ff53 func_003825F8 frontbin func_0037E368 0037E368 360 INCLUDE_ASM differs 0.00 - -func_00382760 frontbin func_0037E4B8 0037E4B8 144 C match 100.00 2e5f5c8ec003 +func_00382760 frontbin func_0037E4B8 0037E4B8 144 C match 100.00 82439e27ff53 func_003827F0 frontbin func_0037E548 0037E548 28 LINKER_REMNANT match 100.00 - func_00382810 frontbin func_0037E568 0037E568 196 INCLUDE_ASM asm 0.00 - func_003828D8 frontbin func_0037E630 0037E630 404 INCLUDE_ASM asm 0.00 - func_00382A70 frontbin func_0037E7C8 0037E7C8 12 LINKER_REMNANT match 100.00 - -func_00382A80 frontbin func_0037E7D8 0037E7D8 148 C match 100.00 2e5f5c8ec003 +func_00382A80 frontbin func_0037E7D8 0037E7D8 148 C match 100.00 82439e27ff53 func_00382B20 frontbin func_0037E878 0037E878 164 INCLUDE_ASM asm 0.00 - func_00382BC8 frontbin func_0037E920 0037E920 140 INCLUDE_ASM asm 0.00 - -func_00382C58 frontbin func_0037E9B0 0037E9B0 232 C match 100.00 2e5f5c8ec003 +func_00382C58 frontbin func_0037E9B0 0037E9B0 232 C match 100.00 82439e27ff53 func_00382D40 frontbin func_0037EA98 0037EA98 4 LINKER_REMNANT match 100.00 - -func_00382D48 frontbin func_0037EAA0 0037EAA0 120 C match 100.00 2e5f5c8ec003 -func_00382DC8 frontbin func_0037EB20 0037EB20 68 C match 100.00 2e5f5c8ec003 +func_00382D48 frontbin func_0037EAA0 0037EAA0 120 C match 100.00 82439e27ff53 +func_00382DC8 frontbin func_0037EB20 0037EB20 68 C match 100.00 82439e27ff53 func_00382E10 frontbin func_0037EB68 0037EB68 792 INCLUDE_ASM asm 0.00 - func_00383128 frontbin func_0037EE80 0037EE80 528 INCLUDE_ASM asm 0.00 - -func_00383338 frontbin func_0037F090 0037F090 68 C match 100.00 2e5f5c8ec003 +func_00383338 frontbin func_0037F090 0037F090 68 C match 100.00 82439e27ff53 func_00383380 frontbin func_0037F0D8 0037F0D8 336 INCLUDE_ASM asm 0.00 - func_003834D0 frontbin func_0037F228 0037F228 504 INCLUDE_ASM asm 0.00 - -func_003836C8 frontbin func_0037F420 0037F420 212 C match 100.00 2e5f5c8ec003 -func_003837A0 frontbin func_0037F4F8 0037F4F8 88 C match 100.00 2e5f5c8ec003 -func_003837F8 frontbin func_0037F550 0037F550 56 C match 100.00 2e5f5c8ec003 +func_003836C8 frontbin func_0037F420 0037F420 212 C match 100.00 82439e27ff53 +func_003837A0 frontbin func_0037F4F8 0037F4F8 88 C match 100.00 82439e27ff53 +func_003837F8 frontbin func_0037F550 0037F550 56 C match 100.00 82439e27ff53 func_00383830 frontbin func_0037F588 0037F588 568 INCLUDE_ASM differs 0.00 - func_00383A68 frontbin func_0037F7A8 0037F7A8 480 INCLUDE_ASM differs 0.00 - func_00383C48 frontbin func_0037F978 0037F978 1392 INCLUDE_ASM asm 0.00 - @@ -2783,80 +2783,80 @@ func_00384260 frontbin func_0037FF90 0037FF90 564 INCLUDE_ASM differs 0.00 - func_00384498 frontbin func_003801C0 003801C0 732 INCLUDE_ASM asm 0.00 - func_00384778 frontbin func_003804A0 003804A0 348 INCLUDE_ASM asm 0.00 - func_003848D8 frontbin func_00380600 00380600 484 INCLUDE_ASM asm 0.00 - -func_00384AC8 frontbin func_003807F0 003807F0 232 C match 100.00 2e5f5c8ec003 -func_00384BB8 frontbin func_003808E0 003808E0 272 C match 100.00 2e5f5c8ec003 -func_00384CC8 frontbin func_003809F0 003809F0 188 C match 100.00 2e5f5c8ec003 +func_00384AC8 frontbin func_003807F0 003807F0 232 C match 100.00 82439e27ff53 +func_00384BB8 frontbin func_003808E0 003808E0 272 C match 100.00 82439e27ff53 +func_00384CC8 frontbin func_003809F0 003809F0 188 C match 100.00 82439e27ff53 func_00384D88 frontbin func_00380AB0 00380AB0 624 INCLUDE_ASM asm 0.00 - func_00385000 frontbin func_00380D28 00380D28 28 LINKER_REMNANT match 100.00 - func_00385020 frontbin func_00380D48 00380D48 888 INCLUDE_ASM asm 0.00 - -func_00385398 frontbin func_003810C0 003810C0 796 C match 100.00 2e5f5c8ec003 +func_00385398 frontbin func_003810C0 003810C0 796 C match 100.00 82439e27ff53 func_003856B8 frontbin func_003813E0 003813E0 1636 INCLUDE_ASM differs 0.00 - func_00385D20 frontbin func_00381A48 00381A48 4 LINKER_REMNANT match 100.00 - -func_00385D28 frontbin func_00381A50 00381A50 452 INCLUDE_ASM asm 0.00 - -func_00385EF0 frontbin func_00381C18 00381C18 376 C match 100.00 2e5f5c8ec003 +func_00385D28 frontbin func_00381A50 00381A50 452 C match 100.00 82439e27ff53 +func_00385EF0 frontbin func_00381C18 00381C18 376 C match 100.00 82439e27ff53 func_00386068 frontbin func_00381D90 00381D90 60 LINKER_REMNANT match 100.00 - func_003860A8 frontbin func_00381DD0 00381DD0 320 INCLUDE_ASM asm 0.00 - func_003861E8 frontbin func_00381F10 00381F10 4 LINKER_REMNANT match 100.00 - func_003861F0 frontbin func_00381F18 00381F18 720 INCLUDE_ASM asm 0.00 - -func_003864C0 frontbin func_003821E8 003821E8 224 INCLUDE_ASM asm 0.00 - +func_003864C0 frontbin func_003821E8 003821E8 224 C match 100.00 82439e27ff53 func_003865A0 frontbin func_003822C8 003822C8 212 INCLUDE_ASM asm 0.00 - -func_00386678 frontbin func_003823A0 003823A0 184 C match 100.00 2e5f5c8ec003 +func_00386678 frontbin func_003823A0 003823A0 184 C match 100.00 82439e27ff53 func_00386730 frontbin func_00382458 00382458 2792 INCLUDE_ASM asm 0.00 - -func_00387218 frontbin func_00382F40 00382F40 80 INCLUDE_ASM asm 0.00 - -func_00387268 frontbin func_00382F90 00382F90 340 INCLUDE_ASM asm 0.00 - +func_00387218 frontbin func_00382F40 00382F40 80 C match 100.00 82439e27ff53 +func_00387268 frontbin func_00382F90 00382F90 340 C match 100.00 82439e27ff53 func_003873C0 frontbin func_003830E8 003830E8 1876 INCLUDE_ASM asm 0.00 - func_00387B18 frontbin func_00383840 00383840 980 INCLUDE_ASM differs 0.00 - -func_00387EF0 frontbin func_00383848 00383848 116 C match 100.00 2e5f5c8ec003 -func_00387F68 frontbin func_003838C0 003838C0 460 INCLUDE_ASM asm 0.00 - -func_00388138 frontbin func_00383A90 00383A90 120 C match 100.00 2e5f5c8ec003 -func_003881B0 frontbin func_00383B08 00383B08 136 C match 100.00 2e5f5c8ec003 -func_00388238 frontbin func_00383B90 00383B90 28 C match 100.00 2e5f5c8ec003 +func_00387EF0 frontbin func_00383848 00383848 116 C match 100.00 82439e27ff53 +func_00387F68 frontbin func_003838C0 003838C0 460 C match 100.00 82439e27ff53 +func_00388138 frontbin func_00383A90 00383A90 120 C match 100.00 82439e27ff53 +func_003881B0 frontbin func_00383B08 00383B08 136 C match 100.00 82439e27ff53 +func_00388238 frontbin func_00383B90 00383B90 28 C match 100.00 82439e27ff53 func_00388258 frontbin func_00383BB0 00383BB0 1112 INCLUDE_ASM differs 0.00 - func_003886B0 frontbin func_00383FD8 00383FD8 1088 INCLUDE_ASM asm 0.00 - func_00388AF0 frontbin func_00384418 00384418 4 LINKER_REMNANT match 100.00 - func_00388AF8 frontbin func_00384420 00384420 1828 INCLUDE_ASM asm 0.00 - func_00389220 frontbin func_00384B48 00384B48 28 LINKER_REMNANT match 100.00 - -func_00389240 frontbin func_00384B68 00384B68 300 INCLUDE_ASM asm 0.00 - +func_00389240 frontbin func_00384B68 00384B68 300 C match 100.00 82439e27ff53 func_00389370 frontbin func_00384C98 00384C98 264 INCLUDE_ASM asm 0.00 - func_00389478 frontbin func_00384DA0 00384DA0 264 INCLUDE_ASM asm 0.00 - func_00389588 frontbin func_00384EB0 00384EB0 12 LINKER_REMNANT match 100.00 - func_00389598 frontbin func_00384EC0 00384EC0 1400 INCLUDE_ASM asm 0.00 - func_00389B10 frontbin func_00385438 00385438 308 INCLUDE_ASM asm 0.00 - -func_00389C48 frontbin func_00385570 00385570 184 INCLUDE_ASM asm 0.00 - -func_00389D00 frontbin func_00385628 00385628 92 C match 100.00 2e5f5c8ec003 -func_00389D60 frontbin func_00385688 00385688 80 INCLUDE_ASM asm 0.00 - -func_00389DB0 frontbin func_003856D8 003856D8 120 C match 100.00 2e5f5c8ec003 -func_00389E28 frontbin func_00385750 00385750 120 C match 100.00 2e5f5c8ec003 -func_00389EA0 frontbin func_003857C8 003857C8 120 C match 100.00 2e5f5c8ec003 -func_00389F18 frontbin func_00385840 00385840 80 INCLUDE_ASM asm 0.00 - -func_00389F68 frontbin func_00385890 00385890 120 C match 100.00 2e5f5c8ec003 -func_00389FE0 frontbin func_00385908 00385908 120 INCLUDE_ASM asm 0.00 - +func_00389C48 frontbin func_00385570 00385570 184 C match 100.00 82439e27ff53 +func_00389D00 frontbin func_00385628 00385628 92 C match 100.00 82439e27ff53 +func_00389D60 frontbin func_00385688 00385688 80 C match 100.00 82439e27ff53 +func_00389DB0 frontbin func_003856D8 003856D8 120 C match 100.00 82439e27ff53 +func_00389E28 frontbin func_00385750 00385750 120 C match 100.00 82439e27ff53 +func_00389EA0 frontbin func_003857C8 003857C8 120 C match 100.00 82439e27ff53 +func_00389F18 frontbin func_00385840 00385840 80 C match 100.00 82439e27ff53 +func_00389F68 frontbin func_00385890 00385890 120 C match 100.00 82439e27ff53 +func_00389FE0 frontbin func_00385908 00385908 120 C match 100.00 82439e27ff53 func_0038A058 frontbin func_00385980 00385980 480 INCLUDE_ASM asm 0.00 - -func_0038A238 frontbin func_00385B60 00385B60 384 INCLUDE_ASM asm 0.00 - -func_0038A3B8 frontbin func_00385CE0 00385CE0 352 INCLUDE_ASM asm 0.00 - +func_0038A238 frontbin func_00385B60 00385B60 384 C match 100.00 82439e27ff53 +func_0038A3B8 frontbin func_00385CE0 00385CE0 352 C match 100.00 82439e27ff53 func_0038A518 frontbin func_00385E40 00385E40 1068 INCLUDE_ASM differs 0.00 - func_0038A948 frontbin func_00386210 00386210 628 INCLUDE_ASM asm 0.00 - -func_0038ABC0 frontbin func_00386488 00386488 384 INCLUDE_ASM asm 0.00 - -func_0038AD40 frontbin func_00386608 00386608 224 INCLUDE_ASM asm 0.00 - -func_0038AE20 frontbin func_003866E8 003866E8 268 INCLUDE_ASM asm 0.00 - +func_0038ABC0 frontbin func_00386488 00386488 384 C match 100.00 82439e27ff53 +func_0038AD40 frontbin func_00386608 00386608 224 C match 100.00 82439e27ff53 +func_0038AE20 frontbin func_003866E8 003866E8 268 C match 100.00 82439e27ff53 func_0038AF30 frontbin func_003867F8 003867F8 484 INCLUDE_ASM asm 0.00 - func_0038B118 frontbin func_003869E0 003869E0 4 LINKER_REMNANT match 100.00 - func_0038B120 frontbin func_003869E8 003869E8 940 INCLUDE_ASM asm 0.00 - func_0038B4D0 frontbin func_00386D98 00386D98 396 INCLUDE_ASM asm 0.00 - func_0038B660 frontbin func_00386F28 00386F28 12 LINKER_REMNANT match 100.00 - -func_0038B670 frontbin func_00386F38 00386F38 476 INCLUDE_ASM asm 0.00 - -func_0038B850 frontbin func_00387118 00387118 480 INCLUDE_ASM asm 0.00 - +func_0038B670 frontbin func_00386F38 00386F38 476 C match 100.00 82439e27ff53 +func_0038B850 frontbin func_00387118 00387118 480 C match 100.00 82439e27ff53 func_0038BA30 frontbin func_003872F8 003872F8 676 INCLUDE_ASM asm 0.00 - func_0038BCD8 frontbin func_003875A0 003875A0 1120 INCLUDE_ASM asm 0.00 - func_0038C138 frontbin func_00387A00 00387A00 272 INCLUDE_ASM asm 0.00 - func_0038C248 frontbin func_00387B10 00387B10 200 INCLUDE_ASM asm 0.00 - func_0038C310 frontbin func_00387BD8 00387BD8 156 INCLUDE_ASM asm 0.00 - -func_0038C3B0 frontbin func_00387C78 00387C78 316 C match 100.00 2e5f5c8ec003 +func_0038C3B0 frontbin func_00387C78 00387C78 316 C match 100.00 82439e27ff53 func_0038C4F0 frontbin func_00387DB8 00387DB8 12 LINKER_REMNANT match 100.00 - func_0038C500 frontbin func_00387DC8 00387DC8 580 INCLUDE_ASM asm 0.00 - func_0038C750 frontbin func_00388018 00388018 572 INCLUDE_ASM asm 0.00 - func_0038C990 frontbin func_00388258 00388258 28 LINKER_REMNANT match 100.00 - -func_0038C9B0 frontbin func_00388278 00388278 88 C match 100.00 2e5f5c8ec003 +func_0038C9B0 frontbin func_00388278 00388278 88 C match 100.00 82439e27ff53 func_0038CA08 frontbin func_003882D0 003882D0 16 ASM_FUNC match 100.00 - func_0038CA18 frontbin func_003882E0 003882E0 40 ASM_FUNC match 100.00 - func_0038CA40 frontbin func_00388308 00388308 16 ASM_FUNC match 100.00 - @@ -3100,119 +3100,119 @@ func_0039A1E0 frontbin func_003953F0 003953F0 568 INCLUDE_ASM asm 0.00 - func_0039A418 frontbin func_00395628 00395628 28 LINKER_REMNANT match 100.00 - func_0039A438 frontbin func_00395648 00395648 596 INCLUDE_ASM asm 0.00 - func_0039A690 frontbin func_003958A0 003958A0 80 C match 100.00 6cd2bc2342b6 -func_0039A6E0 frontbin func_003958F0 003958F0 104 C match 100.00 8e33324e89df -func_0039A748 frontbin func_00395958 00395958 76 C match 100.00 8e33324e89df -func_0039A798 frontbin func_003959A8 003959A8 284 C match 100.00 8e33324e89df +func_0039A6E0 frontbin func_003958F0 003958F0 104 C match 100.00 59c30a8ca32a +func_0039A748 frontbin func_00395958 00395958 76 C match 100.00 59c30a8ca32a +func_0039A798 frontbin func_003959A8 003959A8 284 C match 100.00 59c30a8ca32a func_0039A8B8 frontbin func_00395AC8 00395AC8 244 INCLUDE_ASM asm 0.00 - -func_0039A9B0 frontbin func_00395BC0 00395BC0 132 C match 100.00 8e33324e89df -func_0039AA38 frontbin func_00395C48 00395C48 452 C match 100.00 8e33324e89df +func_0039A9B0 frontbin func_00395BC0 00395BC0 132 C match 100.00 59c30a8ca32a +func_0039AA38 frontbin func_00395C48 00395C48 452 C match 100.00 59c30a8ca32a func_0039AC00 frontbin func_00395E10 00395E10 4 LINKER_REMNANT match 100.00 - -func_0039AC08 frontbin func_00395E18 00395E18 140 C match 100.00 8e33324e89df +func_0039AC08 frontbin func_00395E18 00395E18 140 C match 100.00 59c30a8ca32a func_0039AC98 frontbin func_00395EA8 00395EA8 12 LINKER_REMNANT match 100.00 - func_0039ACA8 frontbin func_00395EB8 00395EB8 296 INCLUDE_ASM asm 0.00 - func_0039ADD0 frontbin - - 4 LINKER_REMNANT none 0.00 - -func_0039ADD8 frontbin func_0039B2DC 0039B2DC 8 C match 100.00 8e33324e89df +func_0039ADD8 frontbin func_0039B2DC 0039B2DC 8 C match 100.00 59c30a8ca32a func_0039ADE0 frontbin func_00395FF0 00395FF0 268 INCLUDE_ASM asm 0.00 - -func_0039AEF0 frontbin func_00396100 00396100 32 INCLUDE_ASM asm 0.00 - +func_0039AEF0 frontbin func_00396100 00396100 32 C match 100.00 59c30a8ca32a func_0039AF10 frontbin func_00396120 00396120 292 INCLUDE_ASM asm 0.00 - -func_0039B038 frontbin func_00396248 00396248 76 C match 100.00 8e33324e89df -func_0039B088 frontbin func_00396298 00396298 40 INCLUDE_ASM asm 0.00 - -func_0039B0B0 frontbin func_003962C0 003962C0 36 C match 100.00 8e33324e89df -func_0039B0D8 frontbin func_003962E8 003962E8 36 C match 100.00 8e33324e89df +func_0039B038 frontbin func_00396248 00396248 76 C match 100.00 59c30a8ca32a +func_0039B088 frontbin func_00396298 00396298 40 C match 100.00 59c30a8ca32a +func_0039B0B0 frontbin func_003962C0 003962C0 36 C match 100.00 59c30a8ca32a +func_0039B0D8 frontbin func_003962E8 003962E8 36 C match 100.00 59c30a8ca32a func_0039B100 frontbin func_00396310 00396310 100 INCLUDE_ASM asm 0.00 - -func_0039B168 frontbin func_00396378 00396378 76 C match 100.00 8e33324e89df -func_0039B1B8 frontbin func_003963C8 003963C8 140 C match 100.00 8e33324e89df -func_0039B248 frontbin func_00396458 00396458 44 C match 100.00 8e33324e89df +func_0039B168 frontbin func_00396378 00396378 76 C match 100.00 59c30a8ca32a +func_0039B1B8 frontbin func_003963C8 003963C8 140 C match 100.00 59c30a8ca32a +func_0039B248 frontbin func_00396458 00396458 44 C match 100.00 59c30a8ca32a func_0039B278 frontbin func_00396488 00396488 96 INCLUDE_ASM asm 0.00 - -func_0039B2D8 frontbin func_003964E8 003964E8 80 C match 100.00 8e33324e89df +func_0039B2D8 frontbin func_003964E8 003964E8 80 C match 100.00 59c30a8ca32a func_0039B328 frontbin func_00396538 00396538 88 INCLUDE_ASM asm 0.00 - -func_0039B380 frontbin func_00396590 00396590 152 C match 100.00 8e33324e89df -func_0039B418 frontbin func_00396628 00396628 88 C match 100.00 8e33324e89df -func_0039B470 frontbin func_00396680 00396680 252 C match 100.00 8e33324e89df -func_0039B570 frontbin func_00396780 00396780 60 C match 100.00 8e33324e89df -func_0039B5B0 frontbin func_003967C0 003967C0 112 C match 100.00 8e33324e89df +func_0039B380 frontbin func_00396590 00396590 152 C match 100.00 59c30a8ca32a +func_0039B418 frontbin func_00396628 00396628 88 C match 100.00 59c30a8ca32a +func_0039B470 frontbin func_00396680 00396680 252 C match 100.00 59c30a8ca32a +func_0039B570 frontbin func_00396780 00396780 60 C match 100.00 59c30a8ca32a +func_0039B5B0 frontbin func_003967C0 003967C0 112 C match 100.00 59c30a8ca32a func_0039B620 frontbin func_00396830 00396830 92 INCLUDE_ASM asm 0.00 - func_0039B680 frontbin func_00396890 00396890 104 INCLUDE_ASM asm 0.00 - -func_0039B6E8 frontbin func_003968F8 003968F8 188 C match 100.00 8e33324e89df -func_0039B7A8 frontbin func_003969B8 003969B8 112 C match 100.00 8e33324e89df -func_0039B818 frontbin func_00396A28 00396A28 184 C match 100.00 8e33324e89df -func_0039B8D0 frontbin func_00396AE0 00396AE0 36 C match 100.00 8e33324e89df -func_0039B8F8 frontbin func_00396B08 00396B08 68 C match 100.00 8e33324e89df -func_0039B940 frontbin func_00396B50 00396B50 36 C match 100.00 8e33324e89df -func_0039B968 frontbin func_00396B78 00396B78 68 C match 100.00 8e33324e89df +func_0039B6E8 frontbin func_003968F8 003968F8 188 C match 100.00 59c30a8ca32a +func_0039B7A8 frontbin func_003969B8 003969B8 112 C match 100.00 59c30a8ca32a +func_0039B818 frontbin func_00396A28 00396A28 184 C match 100.00 59c30a8ca32a +func_0039B8D0 frontbin func_00396AE0 00396AE0 36 C match 100.00 59c30a8ca32a +func_0039B8F8 frontbin func_00396B08 00396B08 68 C match 100.00 59c30a8ca32a +func_0039B940 frontbin func_00396B50 00396B50 36 C match 100.00 59c30a8ca32a +func_0039B968 frontbin func_00396B78 00396B78 68 C match 100.00 59c30a8ca32a func_0039B9B0 frontbin func_00396BC0 00396BC0 96 INCLUDE_ASM asm 0.00 - -func_0039BA10 frontbin func_00396C20 00396C20 36 C match 100.00 8e33324e89df +func_0039BA10 frontbin func_00396C20 00396C20 36 C match 100.00 59c30a8ca32a func_0039BA38 frontbin func_00396C48 00396C48 160 INCLUDE_ASM asm 0.00 - func_0039BAD8 frontbin func_00396CE8 00396CE8 132 INCLUDE_ASM asm 0.00 - func_0039BB60 frontbin func_00396D70 00396D70 84 INCLUDE_ASM asm 0.00 - -func_0039BBB8 frontbin func_00396DC8 00396DC8 84 C match 100.00 8e33324e89df +func_0039BBB8 frontbin func_00396DC8 00396DC8 84 C match 100.00 59c30a8ca32a func_0039BC10 frontbin func_00396E20 00396E20 96 INCLUDE_ASM asm 0.00 - -func_0039BC70 frontbin func_00396E80 00396E80 148 C match 100.00 8e33324e89df +func_0039BC70 frontbin func_00396E80 00396E80 148 C match 100.00 59c30a8ca32a func_0039BD08 frontbin func_00396F18 00396F18 136 INCLUDE_ASM asm 0.00 - -func_0039BD90 frontbin func_00396FA0 00396FA0 48 C match 100.00 8e33324e89df +func_0039BD90 frontbin func_00396FA0 00396FA0 48 C match 100.00 59c30a8ca32a func_0039BDC0 frontbin func_00396FD0 00396FD0 132 INCLUDE_ASM asm 0.00 - -func_0039BE48 frontbin func_00397058 00397058 40 C match 100.00 8e33324e89df -func_0039BE70 frontbin func_00397080 00397080 28 C match 100.00 8e33324e89df -func_0039BE90 frontbin func_003970A0 003970A0 20 C match 100.00 8e33324e89df -func_0039BEA8 frontbin func_003970B8 003970B8 16 C match 100.00 8e33324e89df +func_0039BE48 frontbin func_00397058 00397058 40 C match 100.00 59c30a8ca32a +func_0039BE70 frontbin func_00397080 00397080 28 C match 100.00 59c30a8ca32a +func_0039BE90 frontbin func_003970A0 003970A0 20 C match 100.00 59c30a8ca32a +func_0039BEA8 frontbin func_003970B8 003970B8 16 C match 100.00 59c30a8ca32a func_0039BEB8 frontbin func_003970C8 003970C8 4 LINKER_REMNANT match 100.00 - -func_0039BEC0 frontbin func_003970D0 003970D0 44 C match 100.00 8e33324e89df -func_0039BEF0 frontbin func_00397100 00397100 232 C match 100.00 8e33324e89df -func_0039BFD8 frontbin func_003971E8 003971E8 20 C match 100.00 8e33324e89df -func_0039BFF0 frontbin func_00397200 00397200 56 C match 100.00 8e33324e89df -func_0039C028 frontbin func_00397238 00397238 32 C match 100.00 8e33324e89df -func_0039C048 frontbin func_00397258 00397258 20 C match 100.00 8e33324e89df -func_0039C060 frontbin func_00397270 00397270 24 C match 100.00 8e33324e89df -func_0039C078 frontbin - - 400 C none 0.00 8e33324e89df +func_0039BEC0 frontbin func_003970D0 003970D0 44 C match 100.00 59c30a8ca32a +func_0039BEF0 frontbin func_00397100 00397100 232 C match 100.00 59c30a8ca32a +func_0039BFD8 frontbin func_003971E8 003971E8 20 C match 100.00 59c30a8ca32a +func_0039BFF0 frontbin func_00397200 00397200 56 C match 100.00 59c30a8ca32a +func_0039C028 frontbin func_00397238 00397238 32 C match 100.00 59c30a8ca32a +func_0039C048 frontbin func_00397258 00397258 20 C match 100.00 59c30a8ca32a +func_0039C060 frontbin func_00397270 00397270 24 C match 100.00 59c30a8ca32a +func_0039C078 frontbin - - 400 C none 0.00 59c30a8ca32a func_0039C208 frontbin func_00397288 00397288 20 LINKER_REMNANT match 100.00 - -func_0039C220 frontbin func_003972A0 003972A0 220 C match 100.00 8e33324e89df +func_0039C220 frontbin func_003972A0 003972A0 220 C match 100.00 59c30a8ca32a func_0039C300 frontbin func_00397380 00397380 268 INCLUDE_ASM asm 0.00 - func_0039C410 frontbin func_00397490 00397490 8652 INCLUDE_ASM asm 0.00 - -func_0039E5E0 frontbin func_00399660 00399660 168 C match 100.00 8e33324e89df +func_0039E5E0 frontbin func_00399660 00399660 168 C match 100.00 59c30a8ca32a func_0039E688 frontbin func_00399708 00399708 28 INCLUDE_ASM differs 0.00 - -func_0039E6A8 frontbin func_00399710 00399710 56 C match 100.00 8e33324e89df -func_0039E6E0 frontbin func_00399748 00399748 168 C match 100.00 8e33324e89df -func_0039E788 frontbin func_003997F0 003997F0 60 C match 100.00 8e33324e89df -func_0039E7C8 frontbin func_00399830 00399830 276 C match 100.00 8e33324e89df -func_0039E8E0 frontbin func_00399948 00399948 184 C match 100.00 8e33324e89df -func_0039E998 frontbin func_00399A00 00399A00 656 C match 100.00 8e33324e89df +func_0039E6A8 frontbin func_00399710 00399710 56 C match 100.00 59c30a8ca32a +func_0039E6E0 frontbin func_00399748 00399748 168 C match 100.00 59c30a8ca32a +func_0039E788 frontbin func_003997F0 003997F0 60 C match 100.00 59c30a8ca32a +func_0039E7C8 frontbin func_00399830 00399830 276 C match 100.00 59c30a8ca32a +func_0039E8E0 frontbin func_00399948 00399948 184 C match 100.00 59c30a8ca32a +func_0039E998 frontbin func_00399A00 00399A00 656 C match 100.00 59c30a8ca32a func_0039EC28 frontbin func_00399C90 00399C90 684 INCLUDE_ASM asm 0.00 - func_0039EED8 frontbin func_00399F40 00399F40 48 INCLUDE_ASM asm 0.00 - -func_0039EF08 frontbin func_00399F70 00399F70 8 C match 100.00 8e33324e89df -func_0039EF10 frontbin func_00399F78 00399F78 8 C match 100.00 8e33324e89df -func_0039EF18 frontbin func_00399F80 00399F80 12 C match 100.00 8e33324e89df -func_0039EF28 frontbin func_00399F90 00399F90 176 C match 100.00 8e33324e89df -func_0039EFD8 frontbin func_0039A040 0039A040 240 C match 100.00 8e33324e89df -func_0039F0C8 frontbin func_0039A130 0039A130 60 C match 100.00 8e33324e89df +func_0039EF08 frontbin func_00399F70 00399F70 8 C match 100.00 59c30a8ca32a +func_0039EF10 frontbin func_00399F78 00399F78 8 C match 100.00 59c30a8ca32a +func_0039EF18 frontbin func_00399F80 00399F80 12 C match 100.00 59c30a8ca32a +func_0039EF28 frontbin func_00399F90 00399F90 176 C match 100.00 59c30a8ca32a +func_0039EFD8 frontbin func_0039A040 0039A040 240 C match 100.00 59c30a8ca32a +func_0039F0C8 frontbin func_0039A130 0039A130 60 C match 100.00 59c30a8ca32a func_0039F108 frontbin func_0039A170 0039A170 576 INCLUDE_ASM asm 0.00 - func_0039F348 frontbin func_0039A3B0 0039A3B0 356 INCLUDE_ASM asm 0.00 - -func_0039F4B0 frontbin func_0039A518 0039A518 12 C match 100.00 8e33324e89df +func_0039F4B0 frontbin func_0039A518 0039A518 12 C match 100.00 59c30a8ca32a func_0039F4C0 frontbin func_0039A528 0039A528 36 LINKER_REMNANT match 100.00 - -func_0039F4E8 frontbin func_0039A550 0039A550 60 C match 100.00 8e33324e89df -func_0039F528 frontbin func_0039A590 0039A590 24 C match 100.00 8e33324e89df -func_0039F540 frontbin func_0039A5A8 0039A5A8 28 C match 100.00 8e33324e89df -func_0039F560 frontbin func_0039A5C8 0039A5C8 28 C match 100.00 8e33324e89df +func_0039F4E8 frontbin func_0039A550 0039A550 60 C match 100.00 59c30a8ca32a +func_0039F528 frontbin func_0039A590 0039A590 24 C match 100.00 59c30a8ca32a +func_0039F540 frontbin func_0039A5A8 0039A5A8 28 C match 100.00 59c30a8ca32a +func_0039F560 frontbin func_0039A5C8 0039A5C8 28 C match 100.00 59c30a8ca32a func_0039F580 frontbin func_0039A5E8 0039A5E8 52 INCLUDE_ASM asm 0.00 - -func_0039F5B8 frontbin func_0039A620 0039A620 28 C match 100.00 8e33324e89df -func_0039F5D8 frontbin func_0039A640 0039A640 160 C match 100.00 8e33324e89df -func_0039F678 frontbin func_0039A6E0 0039A6E0 64 C match 100.00 8e33324e89df -func_0039F6B8 frontbin func_0039A720 0039A720 16 C match 100.00 8e33324e89df -func_0039F6C8 frontbin func_0039A730 0039A730 16 C match 100.00 8e33324e89df -func_0039F6D8 frontbin func_0039A740 0039A740 36 C match 100.00 8e33324e89df -func_0039F700 frontbin func_0039A768 0039A768 20 C match 100.00 8e33324e89df -func_0039F718 frontbin func_0039A780 0039A780 36 C match 100.00 8e33324e89df +func_0039F5B8 frontbin func_0039A620 0039A620 28 C match 100.00 59c30a8ca32a +func_0039F5D8 frontbin func_0039A640 0039A640 160 C match 100.00 59c30a8ca32a +func_0039F678 frontbin func_0039A6E0 0039A6E0 64 C match 100.00 59c30a8ca32a +func_0039F6B8 frontbin func_0039A720 0039A720 16 C match 100.00 59c30a8ca32a +func_0039F6C8 frontbin func_0039A730 0039A730 16 C match 100.00 59c30a8ca32a +func_0039F6D8 frontbin func_0039A740 0039A740 36 C match 100.00 59c30a8ca32a +func_0039F700 frontbin func_0039A768 0039A768 20 C match 100.00 59c30a8ca32a +func_0039F718 frontbin func_0039A780 0039A780 36 C match 100.00 59c30a8ca32a func_0039F740 frontbin func_0039A7A8 0039A7A8 4 LINKER_REMNANT match 100.00 - -func_0039F748 frontbin func_0039A7B0 0039A7B0 72 C match 100.00 8e33324e89df -func_0039F790 frontbin func_0039A7F8 0039A7F8 392 C match 100.00 8e33324e89df -func_0039F918 frontbin func_0039A980 0039A980 92 C match 100.00 8e33324e89df -func_0039F978 frontbin func_0039A9E0 0039A9E0 156 C match 100.00 8e33324e89df +func_0039F748 frontbin func_0039A7B0 0039A7B0 72 C match 100.00 59c30a8ca32a +func_0039F790 frontbin func_0039A7F8 0039A7F8 392 C match 100.00 59c30a8ca32a +func_0039F918 frontbin func_0039A980 0039A980 92 C match 100.00 59c30a8ca32a +func_0039F978 frontbin func_0039A9E0 0039A9E0 156 C match 100.00 59c30a8ca32a func_0039FA18 frontbin func_0039AA80 0039AA80 108 LINKER_REMNANT match 100.00 - func_0039FA88 frontbin func_0039AAF0 0039AAF0 176 INCLUDE_ASM asm 0.00 - func_0039FB38 frontbin func_0039ABA0 0039ABA0 12 LINKER_REMNANT match 100.00 - -func_0039FB48 frontbin func_0039ABB0 0039ABB0 588 C match 100.00 8e33324e89df +func_0039FB48 frontbin func_0039ABB0 0039ABB0 588 C match 100.00 59c30a8ca32a func_0039FDA0 frontbin func_0039AE08 0039AE08 732 INCLUDE_ASM asm 0.00 - func_003A0080 frontbin func_0039B0E8 0039B0E8 12 LINKER_REMNANT match 100.00 - -func_003A0090 frontbin func_0039B0F8 0039B0F8 156 C match 100.00 8e33324e89df +func_003A0090 frontbin func_0039B0F8 0039B0F8 156 C match 100.00 59c30a8ca32a func_003A0130 frontbin func_0039B198 0039B198 48 INCLUDE_ASM differs 0.00 - func_003A0180 frontbin func_0039B200 0039B200 56 ASM_FUNC match 100.00 - func_003A01C0 frontbin func_0039B240 0039B240 152 INCLUDE_ASM asm 0.00 - @@ -3386,77 +3386,77 @@ func_003AA3C8 frontbin func_003A4E70 003A4E70 1352 INCLUDE_ASM differs 0.00 - func_003AA910 frontbin func_003A53B0 003A53B0 48 C match 100.00 b85429fe4374 func_003AA940 frontbin func_003A53E0 003A53E0 116 INCLUDE_ASM asm 0.00 - func_003AA9B8 frontbin func_003A5458 003A5458 28 LINKER_REMNANT match 100.00 - -func_003AA9D8 frontbin func_003A5478 003A5478 36 C match 100.00 54a87d85fc0e +func_003AA9D8 frontbin func_003A5478 003A5478 36 C match 100.00 44464882d719 func_003AAA00 frontbin func_003A54A0 003A54A0 360 INCLUDE_ASM asm 0.00 - -func_003AAB68 frontbin func_003A5608 003A5608 20 C match 100.00 54a87d85fc0e -func_003AAB80 frontbin func_003A5620 003A5620 48 C match 100.00 54a87d85fc0e -func_003AABB0 frontbin func_003A5650 003A5650 112 C match 100.00 54a87d85fc0e -func_003AAC20 frontbin func_003A56C0 003A56C0 144 C match 100.00 54a87d85fc0e +func_003AAB68 frontbin func_003A5608 003A5608 20 C match 100.00 44464882d719 +func_003AAB80 frontbin func_003A5620 003A5620 48 C match 100.00 44464882d719 +func_003AABB0 frontbin func_003A5650 003A5650 112 C match 100.00 44464882d719 +func_003AAC20 frontbin func_003A56C0 003A56C0 144 C match 100.00 44464882d719 func_003AACB0 frontbin func_003A5750 003A5750 12 LINKER_REMNANT match 100.00 - -func_003AACC0 frontbin func_003A5760 003A5760 60 C match 100.00 54a87d85fc0e +func_003AACC0 frontbin func_003A5760 003A5760 60 C match 100.00 44464882d719 func_003AAD00 frontbin func_003A57A0 003A57A0 12 LINKER_REMNANT match 100.00 - -func_003AAD10 frontbin func_003A57B0 003A57B0 80 C match 100.00 54a87d85fc0e -func_003AAD60 frontbin func_003A5800 003A5800 112 C match 100.00 54a87d85fc0e +func_003AAD10 frontbin func_003A57B0 003A57B0 80 C match 100.00 44464882d719 +func_003AAD60 frontbin func_003A5800 003A5800 112 C match 100.00 44464882d719 func_003AADD0 frontbin func_003A5870 003A5870 12 LINKER_REMNANT match 100.00 - -func_003AADE0 frontbin func_003A5880 003A5880 28 C match 100.00 54a87d85fc0e -func_003AAE00 frontbin func_003A58A0 003A58A0 28 C match 100.00 54a87d85fc0e -func_003AAE20 frontbin func_003A58C0 003A58C0 32 C match 100.00 54a87d85fc0e -func_003AAE40 frontbin func_003A58E0 003A58E0 32 C match 100.00 54a87d85fc0e +func_003AADE0 frontbin func_003A5880 003A5880 28 C match 100.00 44464882d719 +func_003AAE00 frontbin func_003A58A0 003A58A0 28 C match 100.00 44464882d719 +func_003AAE20 frontbin func_003A58C0 003A58C0 32 C match 100.00 44464882d719 +func_003AAE40 frontbin func_003A58E0 003A58E0 32 C match 100.00 44464882d719 func_003AAE60 frontbin - - 72 INCLUDE_ASM none 0.00 - -func_003AAEA8 frontbin func_003A5900 003A5900 8 C match 100.00 54a87d85fc0e -func_003AAEB0 frontbin func_003A5908 003A5908 8 C match 100.00 54a87d85fc0e -func_003AAEB8 frontbin func_003A5910 003A5910 8 C match 100.00 54a87d85fc0e +func_003AAEA8 frontbin func_003A5900 003A5900 8 C match 100.00 44464882d719 +func_003AAEB0 frontbin func_003A5908 003A5908 8 C match 100.00 44464882d719 +func_003AAEB8 frontbin func_003A5910 003A5910 8 C match 100.00 44464882d719 func_003AAEC0 frontbin func_003A5918 003A5918 12 LINKER_REMNANT match 100.00 - -func_003AAED0 frontbin func_003A5928 003A5928 36 C match 100.00 54a87d85fc0e +func_003AAED0 frontbin func_003A5928 003A5928 36 C match 100.00 44464882d719 func_003AAEF8 frontbin func_003A5950 003A5950 4 LINKER_REMNANT match 100.00 - -func_003AAF00 frontbin func_003A5958 003A5958 32 C match 100.00 54a87d85fc0e -func_003AAF20 frontbin func_003A5978 003A5978 100 C match 100.00 54a87d85fc0e +func_003AAF00 frontbin func_003A5958 003A5958 32 C match 100.00 44464882d719 +func_003AAF20 frontbin func_003A5978 003A5978 100 C match 100.00 44464882d719 func_003AAF88 frontbin func_003A59E0 003A59E0 4 LINKER_REMNANT match 100.00 - -func_003AAF90 frontbin func_003A59E8 003A59E8 100 C match 100.00 54a87d85fc0e -func_003AAFF8 frontbin func_003A5A50 003A5A50 36 C match 100.00 54a87d85fc0e -func_003AB020 frontbin func_003A5A78 003A5A78 20 C match 100.00 54a87d85fc0e -func_003AB038 frontbin func_003A5A90 003A5A90 292 C match 100.00 54a87d85fc0e +func_003AAF90 frontbin func_003A59E8 003A59E8 100 C match 100.00 44464882d719 +func_003AAFF8 frontbin func_003A5A50 003A5A50 36 C match 100.00 44464882d719 +func_003AB020 frontbin func_003A5A78 003A5A78 20 C match 100.00 44464882d719 +func_003AB038 frontbin func_003A5A90 003A5A90 292 C match 100.00 44464882d719 func_003AB160 frontbin func_003A5BB8 003A5BB8 4 LINKER_REMNANT match 100.00 - -func_003AB168 frontbin func_003A5BC0 003A5BC0 176 C match 100.00 54a87d85fc0e -func_003AB218 frontbin func_003A5C70 003A5C70 52 C match 100.00 54a87d85fc0e -func_003AB250 frontbin func_003A5CA8 003A5CA8 172 C match 100.00 54a87d85fc0e +func_003AB168 frontbin func_003A5BC0 003A5BC0 176 C match 100.00 44464882d719 +func_003AB218 frontbin func_003A5C70 003A5C70 52 C match 100.00 44464882d719 +func_003AB250 frontbin func_003A5CA8 003A5CA8 172 C match 100.00 44464882d719 func_003AB300 frontbin func_003A5D58 003A5D58 4 LINKER_REMNANT match 100.00 - -func_003AB308 frontbin func_003A5D60 003A5D60 120 C match 100.00 54a87d85fc0e +func_003AB308 frontbin func_003A5D60 003A5D60 120 C match 100.00 44464882d719 func_003AB380 frontbin func_003A5DD8 003A5DD8 12 LINKER_REMNANT match 100.00 - -func_003AB390 frontbin func_003A5DE8 003A5DE8 8 C match 100.00 54a87d85fc0e -func_003AB398 frontbin func_003A5DF0 003A5DF0 140 C match 100.00 54a87d85fc0e -func_003AB428 frontbin func_003A5E80 003A5E80 48 C match 100.00 54a87d85fc0e -func_003AB458 frontbin func_003A5EB0 003A5EB0 12 C match 100.00 54a87d85fc0e -func_003AB468 frontbin func_003A5EC0 003A5EC0 52 C match 100.00 54a87d85fc0e -func_003AB4A0 frontbin func_003A5EF8 003A5EF8 92 C match 100.00 54a87d85fc0e +func_003AB390 frontbin func_003A5DE8 003A5DE8 8 C match 100.00 44464882d719 +func_003AB398 frontbin func_003A5DF0 003A5DF0 140 C match 100.00 44464882d719 +func_003AB428 frontbin func_003A5E80 003A5E80 48 C match 100.00 44464882d719 +func_003AB458 frontbin func_003A5EB0 003A5EB0 12 C match 100.00 44464882d719 +func_003AB468 frontbin func_003A5EC0 003A5EC0 52 C match 100.00 44464882d719 +func_003AB4A0 frontbin func_003A5EF8 003A5EF8 92 C match 100.00 44464882d719 func_003AB500 frontbin func_003A5F58 003A5F58 4 LINKER_REMNANT match 100.00 - -func_003AB508 frontbin func_003A5F60 003A5F60 36 C match 100.00 54a87d85fc0e -func_003AB530 frontbin func_003A5F88 003A5F88 20 C match 100.00 54a87d85fc0e -func_003AB548 frontbin func_003A5FA0 003A5FA0 20 C match 100.00 54a87d85fc0e +func_003AB508 frontbin func_003A5F60 003A5F60 36 C match 100.00 44464882d719 +func_003AB530 frontbin func_003A5F88 003A5F88 20 C match 100.00 44464882d719 +func_003AB548 frontbin func_003A5FA0 003A5FA0 20 C match 100.00 44464882d719 func_003AB560 frontbin func_003A5FB8 003A5FB8 12 LINKER_REMNANT match 100.00 - -func_003AB570 frontbin func_003A5FC8 003A5FC8 456 C match 100.00 54a87d85fc0e -func_003AB738 frontbin func_003A6190 003A6190 52 C match 100.00 54a87d85fc0e +func_003AB570 frontbin func_003A5FC8 003A5FC8 456 C match 100.00 44464882d719 +func_003AB738 frontbin func_003A6190 003A6190 52 C match 100.00 44464882d719 func_003AB770 frontbin func_003A61C8 003A61C8 4 LINKER_REMNANT match 100.00 - -func_003AB778 frontbin func_003A61D0 003A61D0 164 C match 100.00 54a87d85fc0e -func_003AB820 frontbin func_003A6278 003A6278 8 C match 100.00 54a87d85fc0e +func_003AB778 frontbin func_003A61D0 003A61D0 164 C match 100.00 44464882d719 +func_003AB820 frontbin func_003A6278 003A6278 8 C match 100.00 44464882d719 func_003AB828 frontbin func_003A6280 003A6280 4 LINKER_REMNANT match 100.00 - -func_003AB830 frontbin func_003A6288 003A6288 96 INCLUDE_ASM asm 0.00 - -func_003AB890 frontbin func_003A62E8 003A62E8 248 C match 100.00 54a87d85fc0e -func_003AB988 frontbin func_003A63E0 003A63E0 44 C match 100.00 54a87d85fc0e -func_003AB9B8 frontbin func_003A6410 003A6410 52 C match 100.00 54a87d85fc0e +func_003AB830 frontbin func_003A6288 003A6288 96 C match 100.00 44464882d719 +func_003AB890 frontbin func_003A62E8 003A62E8 248 C match 100.00 44464882d719 +func_003AB988 frontbin func_003A63E0 003A63E0 44 C match 100.00 44464882d719 +func_003AB9B8 frontbin func_003A6410 003A6410 52 C match 100.00 44464882d719 func_003AB9F0 frontbin func_003A6448 003A6448 4 LINKER_REMNANT match 100.00 - func_003AB9F8 frontbin func_003A6450 003A6450 92 INCLUDE_ASM asm 0.00 - -func_003ABA58 frontbin func_003A64B0 003A64B0 36 C match 100.00 54a87d85fc0e -func_003ABA80 frontbin func_003A64D8 003A64D8 8 C match 100.00 54a87d85fc0e -func_003ABA88 frontbin func_003A64E0 003A64E0 8 C match 100.00 54a87d85fc0e -func_003ABA90 frontbin func_003A64E8 003A64E8 44 C match 100.00 54a87d85fc0e +func_003ABA58 frontbin func_003A64B0 003A64B0 36 C match 100.00 44464882d719 +func_003ABA80 frontbin func_003A64D8 003A64D8 8 C match 100.00 44464882d719 +func_003ABA88 frontbin func_003A64E0 003A64E0 8 C match 100.00 44464882d719 +func_003ABA90 frontbin func_003A64E8 003A64E8 44 C match 100.00 44464882d719 func_003ABAC0 frontbin func_003A6518 003A6518 4 LINKER_REMNANT match 100.00 - -func_003ABAC8 frontbin func_003A6520 003A6520 276 C match 100.00 54a87d85fc0e -func_003ABBE0 frontbin func_003A6638 003A6638 8 C match 100.00 54a87d85fc0e +func_003ABAC8 frontbin func_003A6520 003A6520 276 C match 100.00 44464882d719 +func_003ABBE0 frontbin func_003A6638 003A6638 8 C match 100.00 44464882d719 func_003ABBE8 frontbin func_003A6640 003A6640 296 INCLUDE_ASM asm 0.00 - -func_003ABD10 frontbin func_003A6768 003A6768 8 C match 100.00 54a87d85fc0e -func_003ABD18 frontbin func_003A6770 003A6770 24 C match 100.00 54a87d85fc0e -func_003ABD30 frontbin func_003A6788 003A6788 8 C match 100.00 54a87d85fc0e +func_003ABD10 frontbin func_003A6768 003A6768 8 C match 100.00 44464882d719 +func_003ABD18 frontbin func_003A6770 003A6770 24 C match 100.00 44464882d719 +func_003ABD30 frontbin func_003A6788 003A6788 8 C match 100.00 44464882d719 func_003ABD38 frontbin func_003A6790 003A6790 156 C match 100.00 4fb45ed91c64 func_003ABDD8 frontbin func_003A6830 003A6830 80 C match 100.00 4fb45ed91c64 func_003ABE28 frontbin func_003A6880 003A6880 8 C match 100.00 4fb45ed91c64 @@ -3776,75 +3776,75 @@ func_003BB0B0 frontbin func_003B5BD0 003B5BD0 12 C match 100.00 ea10326c0007 func_003BB0C0 frontbin func_003B5BE0 003B5BE0 8 C match 100.00 ea10326c0007 func_003BB0C8 frontbin func_003B5BE8 003B5BE8 8 C match 100.00 ea10326c0007 func_003BB0D0 frontbin func_003B5BF0 003B5BF0 4 LINKER_REMNANT match 100.00 - -func_003BB0D8 frontbin func_003B5BF8 003B5BF8 16 C match 100.00 dc2bf5f6fc47 -func_003BB0E8 frontbin func_003B5C08 003B5C08 24 C match 100.00 dc2bf5f6fc47 -func_003BB100 frontbin func_003B5C20 003B5C20 20 C match 100.00 dc2bf5f6fc47 -func_003BB118 frontbin func_003B5C38 003B5C38 40 C match 100.00 dc2bf5f6fc47 +func_003BB0D8 frontbin func_003B5BF8 003B5BF8 16 C match 100.00 84ae94fc996c +func_003BB0E8 frontbin func_003B5C08 003B5C08 24 C match 100.00 84ae94fc996c +func_003BB100 frontbin func_003B5C20 003B5C20 20 C match 100.00 84ae94fc996c +func_003BB118 frontbin func_003B5C38 003B5C38 40 C match 100.00 84ae94fc996c func_003BB140 frontbin func_003B5C60 003B5C60 4 LINKER_REMNANT match 100.00 - -func_003BB148 frontbin func_003B5C68 003B5C68 36 C match 100.00 dc2bf5f6fc47 +func_003BB148 frontbin func_003B5C68 003B5C68 36 C match 100.00 84ae94fc996c func_003BB170 frontbin func_003B5C90 003B5C90 12 LINKER_REMNANT match 100.00 - -func_003BB180 frontbin func_003B5CA0 003B5CA0 108 C match 100.00 dc2bf5f6fc47 +func_003BB180 frontbin func_003B5CA0 003B5CA0 108 C match 100.00 84ae94fc996c func_003BB1F0 frontbin func_003B5D10 003B5D10 440 INCLUDE_ASM asm 0.00 - func_003BB3A8 frontbin func_003B5EC8 003B5EC8 188 INCLUDE_ASM asm 0.00 - func_003BB468 frontbin func_003B5F88 003B5F88 200 INCLUDE_ASM asm 0.00 - func_003BB530 frontbin func_003B6050 003B6050 92 INCLUDE_ASM asm 0.00 - -func_003BB590 frontbin func_003B60B0 003B60B0 64 C match 100.00 dc2bf5f6fc47 +func_003BB590 frontbin func_003B60B0 003B60B0 64 C match 100.00 84ae94fc996c func_003BB5D0 frontbin func_003B60F0 003B60F0 156 INCLUDE_ASM asm 0.00 - func_003BB670 frontbin func_003B6190 003B6190 4 LINKER_REMNANT match 100.00 - -func_003BB678 frontbin func_003B6198 003B6198 8 C match 100.00 dc2bf5f6fc47 -func_003BB680 frontbin func_003B61A0 003B61A0 304 C match 100.00 dc2bf5f6fc47 -func_003BB7B0 frontbin func_003B62D0 003B62D0 8 C match 100.00 dc2bf5f6fc47 -func_003BB7B8 frontbin func_003B62D8 003B62D8 8 C match 100.00 dc2bf5f6fc47 -func_003BB7C0 frontbin func_003B62E0 003B62E0 8 C match 100.00 dc2bf5f6fc47 -func_003BB7C8 frontbin func_003B62E8 003B62E8 108 C match 100.00 dc2bf5f6fc47 -func_003BB838 frontbin func_003B6358 003B6358 16 C match 100.00 dc2bf5f6fc47 +func_003BB678 frontbin func_003B6198 003B6198 8 C match 100.00 84ae94fc996c +func_003BB680 frontbin func_003B61A0 003B61A0 304 C match 100.00 84ae94fc996c +func_003BB7B0 frontbin func_003B62D0 003B62D0 8 C match 100.00 84ae94fc996c +func_003BB7B8 frontbin func_003B62D8 003B62D8 8 C match 100.00 84ae94fc996c +func_003BB7C0 frontbin func_003B62E0 003B62E0 8 C match 100.00 84ae94fc996c +func_003BB7C8 frontbin func_003B62E8 003B62E8 108 C match 100.00 84ae94fc996c +func_003BB838 frontbin func_003B6358 003B6358 16 C match 100.00 84ae94fc996c func_003BB848 frontbin func_003B6368 003B6368 168 INCLUDE_ASM asm 0.00 - -func_003BB8F0 frontbin func_003B6410 003B6410 120 C match 100.00 dc2bf5f6fc47 +func_003BB8F0 frontbin func_003B6410 003B6410 120 C match 100.00 84ae94fc996c func_003BB968 frontbin func_003B6488 003B6488 156 INCLUDE_ASM asm 0.00 - func_003BBA08 frontbin func_003B6528 003B6528 2560 INCLUDE_ASM differs 0.00 - func_003BC408 frontbin func_003B6F28 003B6F28 384 INCLUDE_ASM asm 0.00 - -func_003BC588 frontbin func_003B70A8 003B70A8 232 C match 100.00 dc2bf5f6fc47 -func_003BC670 frontbin func_003B7190 003B7190 40 C match 100.00 dc2bf5f6fc47 -func_003BC698 frontbin func_003B71B8 003B71B8 204 C match 100.00 dc2bf5f6fc47 -func_003BC768 frontbin func_003B7288 003B7288 148 C match 100.00 dc2bf5f6fc47 -func_003BC800 frontbin func_003B7320 003B7320 84 C match 100.00 dc2bf5f6fc47 +func_003BC588 frontbin func_003B70A8 003B70A8 232 C match 100.00 84ae94fc996c +func_003BC670 frontbin func_003B7190 003B7190 40 C match 100.00 84ae94fc996c +func_003BC698 frontbin func_003B71B8 003B71B8 204 C match 100.00 84ae94fc996c +func_003BC768 frontbin func_003B7288 003B7288 148 C match 100.00 84ae94fc996c +func_003BC800 frontbin func_003B7320 003B7320 84 C match 100.00 84ae94fc996c func_003BC858 frontbin func_003B7378 003B7378 492 INCLUDE_ASM differs 0.00 - func_003BCA48 frontbin func_003B7568 003B7568 176 INCLUDE_ASM asm 0.00 - func_003BCAF8 frontbin func_003B7618 003B7618 600 INCLUDE_ASM asm 0.00 - -func_003BCD50 frontbin func_003B7870 003B7870 88 C match 100.00 dc2bf5f6fc47 +func_003BCD50 frontbin func_003B7870 003B7870 88 C match 100.00 84ae94fc996c func_003BCDA8 frontbin func_003B78C8 003B78C8 468 INCLUDE_ASM differs 0.00 - func_003BCF80 frontbin func_003B7AA0 003B7AA0 176 INCLUDE_ASM asm 0.00 - func_003BD030 frontbin func_003B7B50 003B7B50 860 INCLUDE_ASM asm 0.00 - func_003BD390 frontbin func_003B7EB0 003B7EB0 292 INCLUDE_ASM asm 0.00 - func_003BD4B8 frontbin func_003B7FD8 003B7FD8 400 INCLUDE_ASM asm 0.00 - -func_003BD648 frontbin func_003B8168 003B8168 280 C match 100.00 dc2bf5f6fc47 +func_003BD648 frontbin func_003B8168 003B8168 280 C match 100.00 84ae94fc996c func_003BD760 frontbin func_003B8280 003B8280 60 INCLUDE_ASM asm 0.00 - func_003BD7A0 frontbin func_003B82C0 003B82C0 408 INCLUDE_ASM differs 0.00 - func_003BD938 frontbin func_003B8440 003B8440 284 INCLUDE_ASM differs 0.00 - -func_003BDA58 frontbin func_003B8560 003B8560 412 C match 100.00 dc2bf5f6fc47 -func_003BDBF8 frontbin func_003B8700 003B8700 184 C differs 97.83 dc2bf5f6fc47 +func_003BDA58 frontbin func_003B8560 003B8560 412 C match 100.00 84ae94fc996c +func_003BDBF8 frontbin func_003B8700 003B8700 184 C differs 97.83 84ae94fc996c func_003BDCB0 frontbin func_003B87B8 003B87B8 84 INCLUDE_ASM asm 0.00 - -func_003BDD08 frontbin func_003B8810 003B8810 48 C match 100.00 dc2bf5f6fc47 +func_003BDD08 frontbin func_003B8810 003B8810 48 C match 100.00 84ae94fc996c func_003BDD38 frontbin func_003B8840 003B8840 228 INCLUDE_ASM asm 0.00 - -func_003BDE20 frontbin func_003B8928 003B8928 60 C match 100.00 dc2bf5f6fc47 -func_003BDE60 frontbin func_003B8968 003B8968 144 C match 100.00 dc2bf5f6fc47 -func_003BDEF0 frontbin func_003B89F8 003B89F8 12 C match 100.00 dc2bf5f6fc47 -func_003BDF00 frontbin func_003B8A08 003B8A08 12 C match 100.00 dc2bf5f6fc47 -func_003BDF10 frontbin func_003B8A18 003B8A18 8 C match 100.00 dc2bf5f6fc47 -func_003BDF18 frontbin func_003B8A20 003B8A20 40 C match 100.00 dc2bf5f6fc47 -func_003BDF40 frontbin func_003B8A48 003B8A48 28 C match 100.00 dc2bf5f6fc47 -func_003BDF60 frontbin func_003B8A68 003B8A68 164 C match 100.00 dc2bf5f6fc47 -func_003BE008 frontbin func_003B8B10 003B8B10 8 C match 100.00 dc2bf5f6fc47 +func_003BDE20 frontbin func_003B8928 003B8928 60 C match 100.00 84ae94fc996c +func_003BDE60 frontbin func_003B8968 003B8968 144 C match 100.00 84ae94fc996c +func_003BDEF0 frontbin func_003B89F8 003B89F8 12 C match 100.00 84ae94fc996c +func_003BDF00 frontbin func_003B8A08 003B8A08 12 C match 100.00 84ae94fc996c +func_003BDF10 frontbin func_003B8A18 003B8A18 8 C match 100.00 84ae94fc996c +func_003BDF18 frontbin func_003B8A20 003B8A20 40 C match 100.00 84ae94fc996c +func_003BDF40 frontbin func_003B8A48 003B8A48 28 C match 100.00 84ae94fc996c +func_003BDF60 frontbin func_003B8A68 003B8A68 164 C match 100.00 84ae94fc996c +func_003BE008 frontbin func_003B8B10 003B8B10 8 C match 100.00 84ae94fc996c func_003BE010 frontbin func_003B8B18 003B8B18 172 INCLUDE_ASM asm 0.00 - -func_003BE0C0 frontbin func_003B8BC8 003B8BC8 168 C match 100.00 dc2bf5f6fc47 +func_003BE0C0 frontbin func_003B8BC8 003B8BC8 168 C match 100.00 84ae94fc996c func_003BE168 frontbin func_003B8C70 003B8C70 140 INCLUDE_ASM asm 0.00 - -func_003BE1F8 frontbin func_003B8D00 003B8D00 8 C match 100.00 dc2bf5f6fc47 -func_003BE200 frontbin func_003B8D08 003B8D08 256 C match 100.00 dc2bf5f6fc47 -func_003BE300 frontbin func_003B8E08 003B8E08 8 C match 100.00 dc2bf5f6fc47 -func_003BE308 frontbin func_003B8E10 003B8E10 172 C match 100.00 dc2bf5f6fc47 -func_003BE3B8 frontbin func_003B8EC0 003B8EC0 56 C differs 85.71 dc2bf5f6fc47 +func_003BE1F8 frontbin func_003B8D00 003B8D00 8 C match 100.00 84ae94fc996c +func_003BE200 frontbin func_003B8D08 003B8D08 256 C match 100.00 84ae94fc996c +func_003BE300 frontbin func_003B8E08 003B8E08 8 C match 100.00 84ae94fc996c +func_003BE308 frontbin func_003B8E10 003B8E10 172 C match 100.00 84ae94fc996c +func_003BE3B8 frontbin func_003B8EC0 003B8EC0 56 C differs 85.71 84ae94fc996c func_003BE3F0 frontbin func_003B8EF8 003B8EF8 76 INCLUDE_ASM differs 0.00 - -func_003BE440 frontbin func_003B8F48 003B8F48 8 C match 100.00 dc2bf5f6fc47 +func_003BE440 frontbin func_003B8F48 003B8F48 8 C match 100.00 84ae94fc996c func_003BE448 frontbin func_003B8F50 003B8F50 224 INCLUDE_ASM asm 0.00 - func_003BE528 frontbin func_003B9030 003B9030 96 C match 100.00 f09cb10f26f5 func_003BE588 frontbin func_003B9090 003B9090 8 C match 100.00 f09cb10f26f5 @@ -4208,34 +4208,34 @@ func_003E55B8 frontbin func_003E0068 003E0068 260 C differs 98.46 edf33632d0e4 func_003E56C8 frontbin func_003E0178 003E0178 20 LINKER_REMNANT match 100.00 - func_003E56E0 frontbin func_003E0190 003E0190 456 INCLUDE_ASM asm 0.00 - func_003E58A8 frontbin func_003E0358 003E0358 20 LINKER_REMNANT match 100.00 - -func_003E58C0 frontbin func_003E0370 003E0370 52 C match 100.00 409b6d9378f5 -func_003E58F8 frontbin func_003E03A8 003E03A8 32 C match 100.00 409b6d9378f5 -func_003E5918 frontbin func_003E03C8 003E03C8 12 C match 100.00 409b6d9378f5 -func_003E5928 frontbin func_003E03D8 003E03D8 160 C match 100.00 409b6d9378f5 -func_003E59C8 frontbin func_003E0478 003E0478 212 C match 100.00 409b6d9378f5 -func_003E5AA0 frontbin func_003E0550 003E0550 300 C match 100.00 409b6d9378f5 -func_003E5BD0 frontbin func_003E0680 003E0680 12 C match 100.00 409b6d9378f5 +func_003E58C0 frontbin func_003E0370 003E0370 52 C match 100.00 532b1f113562 +func_003E58F8 frontbin func_003E03A8 003E03A8 32 C match 100.00 532b1f113562 +func_003E5918 frontbin func_003E03C8 003E03C8 12 C match 100.00 532b1f113562 +func_003E5928 frontbin func_003E03D8 003E03D8 160 C match 100.00 532b1f113562 +func_003E59C8 frontbin func_003E0478 003E0478 212 C match 100.00 532b1f113562 +func_003E5AA0 frontbin func_003E0550 003E0550 300 C match 100.00 532b1f113562 +func_003E5BD0 frontbin func_003E0680 003E0680 12 C match 100.00 532b1f113562 func_003E5BE0 frontbin func_003E0690 003E0690 12 LINKER_REMNANT match 100.00 - -func_003E5BF0 frontbin func_003E06A0 003E06A0 44 C match 100.00 409b6d9378f5 -func_003E5C20 frontbin func_003E06D0 003E06D0 160 C match 100.00 409b6d9378f5 -func_003E5CC0 frontbin func_003E0770 003E0770 12 C match 100.00 409b6d9378f5 -func_003E5CD0 frontbin func_003E0780 003E0780 20 C match 100.00 409b6d9378f5 +func_003E5BF0 frontbin func_003E06A0 003E06A0 44 C match 100.00 532b1f113562 +func_003E5C20 frontbin func_003E06D0 003E06D0 160 C match 100.00 532b1f113562 +func_003E5CC0 frontbin func_003E0770 003E0770 12 C match 100.00 532b1f113562 +func_003E5CD0 frontbin func_003E0780 003E0780 20 C match 100.00 532b1f113562 func_003E5CE8 frontbin func_003E0798 003E0798 216 INCLUDE_ASM asm 0.00 - -func_003E5DC0 frontbin func_003E0870 003E0870 144 C match 100.00 409b6d9378f5 -func_003E5E50 frontbin func_003E0900 003E0900 44 C match 100.00 409b6d9378f5 -func_003E5E80 frontbin func_003E0930 003E0930 168 C match 100.00 409b6d9378f5 -func_003E5F28 frontbin func_003E09D8 003E09D8 416 C match 100.00 409b6d9378f5 -func_003E60C8 frontbin func_003E0B78 003E0B78 328 C match 100.00 409b6d9378f5 -func_003E6210 frontbin func_003E0CC0 003E0CC0 180 C match 100.00 409b6d9378f5 -func_003E62C8 frontbin func_003E0D78 003E0D78 116 C match 100.00 409b6d9378f5 +func_003E5DC0 frontbin func_003E0870 003E0870 144 C match 100.00 532b1f113562 +func_003E5E50 frontbin func_003E0900 003E0900 44 C match 100.00 532b1f113562 +func_003E5E80 frontbin func_003E0930 003E0930 168 C match 100.00 532b1f113562 +func_003E5F28 frontbin func_003E09D8 003E09D8 416 C match 100.00 532b1f113562 +func_003E60C8 frontbin func_003E0B78 003E0B78 328 C match 100.00 532b1f113562 +func_003E6210 frontbin func_003E0CC0 003E0CC0 180 C match 100.00 532b1f113562 +func_003E62C8 frontbin func_003E0D78 003E0D78 116 C match 100.00 532b1f113562 func_003E6340 frontbin func_003E0DF0 003E0DF0 4 LINKER_REMNANT match 100.00 - -func_003E6348 frontbin func_003E0DF8 003E0DF8 44 C match 100.00 409b6d9378f5 -func_003E6378 frontbin func_003E0E28 003E0E28 32 C match 100.00 409b6d9378f5 -func_003E6398 frontbin func_003E0E48 003E0E48 72 C match 100.00 409b6d9378f5 +func_003E6348 frontbin func_003E0DF8 003E0DF8 44 C match 100.00 532b1f113562 +func_003E6378 frontbin func_003E0E28 003E0E28 32 C match 100.00 532b1f113562 +func_003E6398 frontbin func_003E0E48 003E0E48 72 C match 100.00 532b1f113562 func_003E63E0 frontbin func_003E0E90 003E0E90 312 INCLUDE_ASM asm 0.00 - -func_003E6518 frontbin func_003E0FC8 003E0FC8 284 C match 100.00 409b6d9378f5 -func_003E6638 frontbin func_003E10E8 003E10E8 52 C match 100.00 409b6d9378f5 -func_003E6670 frontbin func_003E1120 003E1120 48 C match 100.00 409b6d9378f5 +func_003E6518 frontbin func_003E0FC8 003E0FC8 284 C match 100.00 532b1f113562 +func_003E6638 frontbin func_003E10E8 003E10E8 52 C match 100.00 532b1f113562 +func_003E6670 frontbin func_003E1120 003E1120 48 C match 100.00 532b1f113562 func_003E66A0 frontbin func_003E1150 003E1150 128 C match 100.00 86d4b687c48b func_003E6720 frontbin func_003E11D0 003E11D0 216 C match 100.00 86d4b687c48b func_003E67F8 frontbin func_003E12A8 003E12A8 144 C match 100.00 86d4b687c48b @@ -18041,7 +18041,7 @@ func_L48_003E05D0 levels func_L48_003E0368 48:003E0368 336 INCLUDE_ASM asm 0.00 func_L53_004FFF78 levels - - 136 INCLUDE_ASM none 0.00 - func_00381D88 frontbin - - 492 near none 0.00 24280b2a29e9 func_00381F80 frontbin func_0037DF28 0037DF28 108 near near 22.22 38c5af9448d3 -func_00381FF0 frontbin func_0037DF98 0037DF98 60 near near 100.00 f9e25bd05527 +func_00381FF0 frontbin func_0037DF98 0037DF98 60 near near 86.67 7fdc5d5a1d15 func_003822C8 frontbin - - 108 near none 0.00 88d9da3f0413 func_00382380 frontbin func_0037E0F0 0037E0F0 232 near near 0.00 unchecked func_00382810 frontbin func_0037E568 0037E568 196 near near 63.27 7950cc440405 @@ -18059,36 +18059,19 @@ func_003848D8 frontbin func_00380600 00380600 484 near near 6.61 3a73f5be9bdd func_00384D88 frontbin func_00380AB0 00380AB0 624 near near 16.67 09e6211bdc85 func_00385020 frontbin func_00380D48 00380D48 888 near near 47.30 7427acef6829 func_003856B8 frontbin - - 1636 near none 0.00 b50a9f206ce9 -func_00385D28 frontbin func_00381A50 00381A50 452 near near 40.71 9d435a1ede89 func_003860A8 frontbin func_00381DD0 00381DD0 320 near near 62.50 9c2d0f74e367 func_003861F0 frontbin func_00381F18 00381F18 720 near near 0.56 2a51174d08de -func_003864C0 frontbin func_003821E8 003821E8 224 near near 17.86 b6c581a07737 func_003865A0 frontbin func_003822C8 003822C8 212 near near 96.23 edcbcb6e3ea6 func_00386730 frontbin func_00382458 00382458 2792 near near 7.74 9c115ca46151 -func_00387218 frontbin func_00382F40 00382F40 80 near near 5.00 bdbbccbe73fa -func_00387268 frontbin func_00382F90 00382F90 340 near near 43.53 fe12dd558888 -func_00387F68 frontbin func_003838C0 003838C0 460 near near 100.00 138952d73bc7 func_00388AF8 frontbin func_00384420 00384420 1828 near near 0.00 unchecked -func_00389240 frontbin func_00384B68 00384B68 300 near near 2.67 8d472e129fe2 func_00389370 frontbin func_00384C98 00384C98 264 near near 1.52 e64153a85d98 func_00389598 frontbin func_00384EC0 00384EC0 1400 near near 13.43 9de26f7d0423 func_00389B10 frontbin func_00385438 00385438 308 near near 89.61 f4373807d4d8 -func_00389C48 frontbin func_00385570 00385570 184 near near 2.17 7f7a0ea23e4f -func_00389D60 frontbin func_00385688 00385688 80 near near 55.00 5ce5e8812263 -func_00389F18 frontbin func_00385840 00385840 80 near near 5.00 7ffa08c73ed5 -func_00389FE0 frontbin func_00385908 00385908 120 near near 20.00 fa4c0c17ac26 func_0038A058 frontbin func_00385980 00385980 480 near near 49.17 645b0b09e8d5 -func_0038A238 frontbin func_00385B60 00385B60 384 near near 33.33 eb4e0ec1ff69 -func_0038A3B8 frontbin func_00385CE0 00385CE0 352 near near 2.27 ec09ad87c08e func_0038A948 frontbin func_00386210 00386210 628 near near 24.84 11b5202ed6d3 -func_0038ABC0 frontbin func_00386488 00386488 384 near near 95.83 749a61e0ed32 -func_0038AD40 frontbin func_00386608 00386608 224 near near 92.86 4c46d5981ed2 -func_0038AE20 frontbin func_003866E8 003866E8 268 near near 46.27 b26d4b9cf5f0 func_0038AF30 frontbin func_003867F8 003867F8 484 near near 100.00 764a84a97528 func_0038B120 frontbin func_003869E8 003869E8 940 near near 0.00 unchecked func_0038B4D0 frontbin func_00386D98 00386D98 396 near near 91.92 4d55669aaec4 -func_0038B670 frontbin func_00386F38 00386F38 476 near near 8.40 b3df777097e6 -func_0038B850 frontbin func_00387118 00387118 480 near near 8.33 9267abd30753 func_0038BA30 frontbin func_003872F8 003872F8 676 near near 11.24 a103aa8df165 func_0038BCD8 frontbin func_003875A0 003875A0 1120 near near 0.00 unchecked func_0038C138 frontbin func_00387A00 00387A00 272 near near 0.00 unchecked @@ -18165,9 +18148,7 @@ func_0039A438 frontbin func_00395648 00395648 596 near near 74.50 398445cba7af func_0039A8B8 frontbin func_00395AC8 00395AC8 244 near near 24.59 65d3af545739 func_0039ACA8 frontbin func_00395EB8 00395EB8 296 near near 10.81 bdbe2a733fc4 func_0039ADE0 frontbin func_00395FF0 00395FF0 268 near near 25.37 91f10bb3bd75 -func_0039AEF0 frontbin func_00396100 00396100 32 near near 37.50 24fdc9378201 func_0039AF10 frontbin func_00396120 00396120 292 near near 28.77 350c0008fa69 -func_0039B088 frontbin func_00396298 00396298 40 near near 50.00 c41bb757a240 func_0039B100 frontbin func_00396310 00396310 100 near near 88.00 a8be392416e6 func_0039B278 frontbin func_00396488 00396488 96 near near 41.67 2d1b7278d6cd func_0039B328 frontbin func_00396538 00396538 88 near near 0.00 unchecked @@ -18228,7 +18209,6 @@ func_003A9C70 frontbin func_003A4720 003A4720 52 near near 38.46 76fc9e1c3a1f func_003A9DB0 frontbin func_003A4860 003A4860 448 near near 31.25 aee6b575b1a9 func_003AA940 frontbin func_003A53E0 003A53E0 116 near near 48.28 8112f92af927 func_003AAA00 frontbin func_003A54A0 003A54A0 360 near near 61.11 8d5ea7983af8 -func_003AB830 frontbin func_003A6288 003A6288 96 near near 4.17 9bd060c0e84f func_003AB9F8 frontbin func_003A6450 003A6450 92 near near 69.57 56aaf5c46428 func_003ABBE8 frontbin func_003A6640 003A6640 296 near near 74.32 0e730fdfd7e2 func_003AC1D8 frontbin func_003A6C30 003A6C30 1120 near near 90.36 07f0586a2a70 @@ -18266,7 +18246,7 @@ func_003B3E60 frontbin func_003AE8A8 003AE8A8 1016 near near 0.39 2203d786340c func_003B42C0 frontbin func_003AED08 003AED08 56 near near 57.14 613f8cd023c2 func_003B4380 frontbin func_003AEDC8 003AEDC8 48 near near 58.33 dca57ac10166 func_003B4438 frontbin func_003AEE80 003AEE80 52 near near 84.62 872cc14cf770 -func_003B4658 frontbin func_003AF0A0 003AF0A0 40 near near 80.00 12d2d520b9c1 +func_003B4658 frontbin func_003AF0A0 003AF0A0 40 near near 80.00 c561cbf73569 func_003B4878 frontbin func_003AF2C0 003AF2C0 1112 near near 28.78 6c4f0cb400c0 func_003B4CD0 frontbin func_003AF718 003AF718 708 near near 13.56 bb5f582c5578 func_003B5220 frontbin - - 696 near none 0.00 ba3d7f1015eb @@ -18309,7 +18289,7 @@ func_003BD390 frontbin func_003B7EB0 003B7EB0 292 near near 69.86 5856623b55da func_003BD4B8 frontbin func_003B7FD8 003B7FD8 400 near near 93.00 9572a766a3dd func_003BD760 frontbin func_003B8280 003B8280 60 near near 6.67 df4b5771807f func_003BD938 frontbin - - 284 near none 0.00 8e8253514b89 -func_003BDCB0 frontbin func_003B87B8 003B87B8 84 near near 38.10 fb105b97e974 +func_003BDCB0 frontbin func_003B87B8 003B87B8 84 near near 38.10 55063a8fca6b func_003BDD38 frontbin func_003B8840 003B8840 228 near near 12.28 d5e49f077437 func_003BE010 frontbin func_003B8B18 003B8B18 172 near near 93.02 0a62dd28c131 func_003BE168 frontbin func_003B8C70 003B8C70 140 near near 85.71 a9647598ed5d @@ -18670,11 +18650,11 @@ func_003F22E0 boot_elf func_003F2120 003F2120 544 near near 66.18 3ce2efa9156f - frontbin func_003B0D18 003B0D18 88 C match 100.00 f9485388f9dd - frontbin func_003B8700 003B8700 184 C match 100.00 31734cb33e30 - frontbin func_003B8EC0 003B8EC0 56 C match 100.00 3af79665f734 -- frontbin func_003B8EF8 003B8EF8 76 C match 100.00 05e6ba5f40d8 +- frontbin func_003B8EF8 003B8EF8 76 C match 100.00 0cd60237a1d6 - frontbin func_003BA108 003BA108 376 C match 100.00 b1ddfeb700e8 - frontbin func_003BB558 003BB558 100 C match 100.00 e5b4a7a38d79 - frontbin func_003BBC48 003BBC48 296 C match 100.00 340e981b52d8 - frontbin func_003E0068 003E0068 260 C match 100.00 566454048bf5 -- frontbin func_003EB578 003EB578 12 C match 100.00 8b6d3936e32c +- frontbin func_003EB578 003EB578 12 C match 100.00 8e4fcace7d0f - frontbin func_003EB588 003EB588 12 C match 100.00 7b0683072c6e - frontbin func_003EB598 003EB598 12 C match 100.00 21a02f3aa693 diff --git a/include/bytematch_names.h b/include/bytematch_names.h index fbea568a..ea4670f6 100644 --- a/include/bytematch_names.h +++ b/include/bytematch_names.h @@ -75,6 +75,7 @@ #define func_00381D90 func_00386068 #define func_00381DD0 func_003860A8 #define func_00381F10 func_003861E8 +#define func_003821E8 func_003864C0 #define func_003823A0 func_00386678 #define func_00382458 func_00386730 #define func_003824F0 func_003824D0 @@ -82,6 +83,8 @@ #define func_00382738 func_00382338 #define func_00382780 func_00382760 #define func_00382F08 func_00382F00 +#define func_00382F40 func_00387218 +#define func_00382F90 func_00387268 #define func_00382FB0 func_00382FA8 #define func_003830E8 func_003873C0 #define func_003831F8 func_003831F0 @@ -90,6 +93,7 @@ #define func_00383840 func_00387B18 #define func_00383848 func_00387EF0 #define func_003838B8 func_003838B0 +#define func_003838C0 func_00387F68 #define func_00383A90 func_00388138 #define func_00383B08 func_003881B0 #define func_00383B90 func_00388238 @@ -99,22 +103,30 @@ #define func_00384420 func_00388AF8 #define func_00384B30 func_00384B58 #define func_00384B48 func_00389220 +#define func_00384B68 func_00389240 #define func_00384C90 func_00384CB8 #define func_00384DA0 func_00389478 #define func_00384EB0 func_00389588 +#define func_00385570 func_00389C48 #define func_00385628 func_00389D00 +#define func_00385688 func_00389D60 #define func_003856D8 func_00389DB0 #define func_00385750 func_00389E28 #define func_003857C8 func_00389EA0 +#define func_00385840 func_00389F18 #define func_00385890 func_00389F68 +#define func_00385908 func_00389FE0 +#define func_00385B60 func_0038A238 +#define func_00385CE0 func_0038A3B8 #define func_00385E40 func_0038A518 #define func_003865A8 func_003865D0 -#define func_00386878 func_003868A0 +#define func_00386608 func_0038AD40 +#define func_003866E8 func_0038AE20 #define func_00386958 func_00386980 #define func_003869E0 func_0038B118 #define func_00386F28 func_0038B660 -#define func_003875D0 func_003875F8 -#define func_00387620 func_00387648 +#define func_00386F38 func_0038B670 +#define func_00387118 func_0038B850 #define func_00387C78 func_0038C3B0 #define func_00387DB8 func_0038C4F0 #define func_00387DC8 func_0038C500 @@ -123,7 +135,6 @@ #define func_003882E0 func_0038CA18 #define func_00388308 func_0038CA40 #define func_00388318 func_0038CA50 -#define func_00388320 func_00388348 #define func_00388340 func_0038CA78 #define func_00388350 func_0038CA88 #define func_00388378 func_0038CAB0 @@ -180,7 +191,6 @@ #define func_00389410 func_0038DB48 #define func_003894A0 func_0038DBD8 #define func_003894E8 func_0038DC20 -#define func_003895C8 func_00389620 #define func_003895E0 func_0038DD18 #define func_003896F8 func_00389750 #define func_003898C0 func_0038E0A8 @@ -193,25 +203,14 @@ #define func_00389B98 func_0038E3C8 #define func_00389E98 func_00389EF0 #define func_00389FB8 func_0038E7E8 -#define func_00389FD0 func_0038A028 -#define func_0038A0E8 func_0038A140 -#define func_0038A2A0 func_0038A2F8 -#define func_0038A368 func_0038A3C0 #define func_0038A3E0 func_0038A438 -#define func_0038A5C0 func_0038A618 -#define func_0038A740 func_0038A798 #define func_0038A848 func_0038F078 #define func_0038AC70 func_0038AD28 -#define func_0038AEE8 func_0038AFA0 -#define func_0038B068 func_0038B120 -#define func_0038B148 func_0038B200 #define func_0038B1B0 func_0038F9E0 #define func_0038B258 func_0038B310 #define func_0038B448 func_0038B500 #define func_0038B7F8 func_0038B8B0 -#define func_0038B998 func_0038BA50 #define func_0038BB50 func_00390388 -#define func_0038BB78 func_0038BC30 #define func_0038BD58 func_0038BE10 #define func_0038C000 func_0038C0B8 #define func_0038C3C0 func_00390BF8 @@ -348,6 +347,8 @@ #define func_00395EA8 func_0039AC98 #define func_00395EB8 func_0039ACA8 #define func_00395FE0 func_L39_005A5000 +#define func_00396100 func_0039AEF0 +#define func_00396298 func_0039B088 #define func_003962E8 func_0039B0D8 #define func_00396378 func_0039B168 #define func_00396458 func_0039B248 @@ -432,7 +433,6 @@ #define func_0039B200 func_003A0180 #define func_0039B2DC func_003A0258 #define func_0039B2E8 func_003A02E8 -#define func_0039B350 func_0039B468 #define func_0039B3C8 func_0039B4E0 #define func_0039B4E8 func_003A04E8 #define func_0039B540 func_0039B658 diff --git a/nonmatching/README.md b/nonmatching/README.md index 137816a9..4068c306 100644 --- a/nonmatching/README.md +++ b/nonmatching/README.md @@ -237,7 +237,7 @@ with names moved to PAL addresses where the address maps are sure of them | `func_003F22E0` | boot_elf | US draft of `func_003F2120` | near miss: 46 diff with the file's flags (was 53) | | `func_00381D88` | frontbin | US draft of `func_0037DD30` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00381F80` | frontbin | US draft of `func_0037DF28` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00381FF0` | frontbin | US draft of `func_0037DF98` | differs: did not build, or built to other bytes, in PAL | +| `func_00381FF0` | frontbin | NTSC decomp draft of `func_0037DF98`, rewritten as plain C | 2 differences with existing flags: table pointer uses `$a0` instead of `$v0`; no register pins or barriers | | `func_003822C8` | frontbin | boot_elf's C of `func_003826A8` | near miss: 1 diff with the file's flags (boot_elf's copy is C) | | `func_00382380` | frontbin | US draft of `func_0037E0F0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00382810` | frontbin | US draft of `func_0037E568` | differs: did not build, or built to other bytes, in PAL | @@ -255,36 +255,19 @@ with names moved to PAL addresses where the address maps are sure of them | `func_00384D88` | frontbin | US draft of `func_00380AB0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00385020` | frontbin | US draft of `func_00380D48` | near miss: 117 diff with the file's flags (was 179) | | `func_003856B8` | frontbin | US draft of `func_003813E0` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00385D28` | frontbin | US draft of `func_00381A50` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003860A8` | frontbin | US draft of `func_00381DD0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003861F0` | frontbin | US draft of `func_00381F18` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_003864C0` | frontbin | US draft of `func_003821E8` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003865A0` | frontbin | US draft of `func_003822C8` | flags: the US matched it with `-mno-split-addresses` (a single-function override) | | `func_00386730` | frontbin | US draft of `func_00382458` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00387218` | frontbin | US draft of `func_00382F40` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00387268` | frontbin | US draft of `func_00382F90` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00387F68` | frontbin | US draft of `func_003838C0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00388AF8` | frontbin | US draft of `func_00384420` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00389240` | frontbin | US draft of `func_00384B68` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00389370` | frontbin | US draft of `func_00384C98` | flags: the US matched it with `-fno-schedule-insns` `@ps2as` (a single-function override) | | `func_00389598` | frontbin | US draft of `func_00384EC0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_00389B10` | frontbin | US draft of `func_00385438` | near miss: 8 diff with the file's flags (was 55) | -| `func_00389C48` | frontbin | US draft of `func_00385570` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00389D60` | frontbin | US draft of `func_00385688` | near miss: 9 diff with the file's flags (the US draft: 18) | -| `func_00389F18` | frontbin | US draft of `func_00385840` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_00389FE0` | frontbin | US draft of `func_00385908` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0038A058` | frontbin | US draft of `func_00385980` | near miss: 61 diff with the file's flags (the US draft: 114) | -| `func_0038A238` | frontbin | US draft of `func_00385B60` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_0038A3B8` | frontbin | US draft of `func_00385CE0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0038A948` | frontbin | US draft of `func_00386210` | near miss: 118 diff with the file's flags (was 155) | -| `func_0038ABC0` | frontbin | US draft of `func_00386488` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_0038AD40` | frontbin | US draft of `func_00386608` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_0038AE20` | frontbin | US draft of `func_003866E8` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0038AF30` | frontbin | US draft of `func_003867F8` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0038B120` | frontbin | US draft of `func_003869E8` | flags: the US matched it with `@ps2as` and without `-fopt-stack` (a single-function override) | | `func_0038B4D0` | frontbin | US draft of `func_00386D98` | flags: the US matched it with `@ps2as` and without `-fopt-stack` (a single-function override) | -| `func_0038B670` | frontbin | US draft of `func_00386F38` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_0038B850` | frontbin | US draft of `func_00387118` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0038BA30` | frontbin | US draft of `func_003872F8` | near miss: 150 diff with the file's flags (was 155) | | `func_0038BCD8` | frontbin | US draft of `func_003875A0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0038C138` | frontbin | US draft of `func_00387A00` | flags: the US matched it with `@ps2as` (a single-function override) | @@ -361,9 +344,7 @@ with names moved to PAL addresses where the address maps are sure of them | `func_0039A8B8` | frontbin | US draft of `func_00395AC8` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0039ACA8` | frontbin | US draft of `func_00395EB8` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0039ADE0` | frontbin | US draft of `func_00395FF0` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_0039AEF0` | frontbin | US draft of `func_00396100` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0039AF10` | frontbin | US draft of `func_00396120` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_0039B088` | frontbin | US draft of `func_00396298` | near miss: 5 diff with the file's flags (the US draft: 8) | | `func_0039B100` | frontbin | US draft of `func_00396310` | near miss: 3 diff with the file's flags (was 23) | | `func_0039B278` | frontbin | US draft of `func_00396488` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_0039B328` | frontbin | US draft of `func_00396538` | flags: the US matched it with `@ps2as` (a single-function override) | @@ -424,7 +405,6 @@ with names moved to PAL addresses where the address maps are sure of them | `func_003A9DB0` | frontbin | US draft of `func_003A4860` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003AA940` | frontbin | US draft of `func_003A53E0` | flags: the US matched it with `@ps2as` and without `-mno-split-addresses` (a single-function override) | | `func_003AAA00` | frontbin | US draft of `func_003A54A0` | differs: did not build, or built to other bytes, in PAL | -| `func_003AB830` | frontbin | US draft of `func_003A6288` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003AB9F8` | frontbin | US draft of `func_003A6450` | flags: the US matched it with without `-mno-split-addresses` (a single-function override) | | `func_003ABBE8` | frontbin | US draft of `func_003A6640` | differs: did not build, or built to other bytes, in PAL | | `func_003AC1D8` | frontbin | US draft of `func_003A6C30` | near miss: 27 diff with the file's flags (was 30) | @@ -462,7 +442,7 @@ with names moved to PAL addresses where the address maps are sure of them | `func_003B42C0` | frontbin | US draft of `func_003AED08` | near miss: 6 diff with the file's flags (was 8) | | `func_003B4380` | frontbin | US draft of `func_003AEDC8` | near miss: 5 diff with the file's flags (the US draft: 6) | | `func_003B4438` | frontbin | US draft of `func_003AEE80` | flags: the US matched it with `-mno-split-addresses` (a single-function override) | -| `func_003B4658` | frontbin | US draft of `func_003AF0A0` | flags: the US matched it with `-mno-split-addresses` (a single-function override) | +| `func_003B4658` | frontbin | US draft of `func_003AF0A0` | 2 differences: table store and return-pointer move reversed; four user checks without improvement (table-first forms: 5, table-last: same 2); original struct-based draft retained, attempt stopped, not integrated | | `func_003B4878` | frontbin | US draft of `func_003AF2C0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003B4CD0` | frontbin | US draft of `func_003AF718` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003B5220` | frontbin | US draft of `func_003AFC68` | flags: the US matched it with `@ps2as` (a single-function override) | @@ -505,7 +485,7 @@ with names moved to PAL addresses where the address maps are sure of them | `func_003BD4B8` | frontbin | US draft of `func_003B7FD8` | near miss: 4 diff with the file's flags (the US draft: 86) | | `func_003BD760` | frontbin | US draft of `func_003B8280` | flags: the US matched it with `-mno-split-addresses` (a single-function override) | | `func_003BD938` | frontbin | US draft of `func_003B8440` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_003BDCB0` | frontbin | US draft of `func_003B87B8` | flags: the US matched it with `-mno-split-addresses` (a single-function override) | +| `func_003BDCB0` | frontbin | US draft of `func_003B87B8` | user NTSC-U check of pointer-based do/while: 13 differences in setup/registers, size 84 bytes; for-loop revision awaiting user check with the owning file's flags | | `func_003BDD38` | frontbin | US draft of `func_003B8840` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003BE010` | frontbin | US draft of `func_003B8B18` | near miss: 3 diff with the file's flags (was 13) | | `func_003BE168` | frontbin | US draft of `func_003B8C70` | near miss: 5 diff with the file's flags (was 34) | @@ -621,4 +601,4 @@ with names moved to PAL addresses where the address maps are sure of them | `func_003F1998` | frontbin | US draft of `func_003EC3D0` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003F1D60` | frontbin | US draft of `func_003EC798` | flags: the US matched it with `@ps2as` (a single-function override) | | `func_003F1F28` | frontbin | US draft of `func_003EC960` | flags: the US matched it with `@ps2as` (a single-function override) | -| `func_U_003B0C70` | frontbin | NTSC-U native draft at `0x003B0C70` | 2 differences: initial `lui` and stack adjustment reversed | +| `func_U_003B0C70` | frontbin | NTSC-U native draft at `0x003B0C70` | 2 differences: initial `lui` and stack adjustment reversed; rechecked 2026-10-31, three C forms unchanged, literal read gives 6 differences | diff --git a/nonmatching/frontbin/func_00381FF0.c b/nonmatching/frontbin/func_00381FF0.c index 65e51f93..4c3a13d8 100644 --- a/nonmatching/frontbin/func_00381FF0.c +++ b/nonmatching/frontbin/func_00381FF0.c @@ -1,28 +1,22 @@ -/* US draft of func_00381FF0 (rac3-uya-decomp func_0037DF98, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: differs: did not build, or built to other bytes, in PAL. */ - - +/* NTSC decomp draft rewritten as plain C (GPL-3.0; THIRD_PARTY_NOTICES.md). + * Rechecked 2026-10-31 with the owning file's S/default flags: 2 differing words. + * The table pointer is loaded into a0 instead of retail's v0; the following + * addu consequently uses a0. Struct-index and integer-address forms give the + * same difference; splitting the pointer assignment gives 9 differences. + * No register pins or assembly barriers are used. Not integrated. + */ +#include "common.h" /* localdecomp:start func_00381FF0 */ -extern s32 func_00381F80(s32); - -s32 func_00381FF0(s32 id) { - register u8 *gp __asm__("gp"); - s32 index; - s32 fallback; - s32** basePtr; - - index = func_00381F80(id); - fallback = (s32)(gp - 0x7128); - - // Pattern Library Scheduling Fence: Passing both operands forces the - // compiler to completely materialize row 14 BEFORE executing the branch check. - __asm__ volatile("" : : "r"(index), "r"(fallback)); - - if (index < 0) { - return fallback; +extern s32 D_001D99A0_00381FF0[]; +extern u8 D_001D5788; +extern s32 func_00381F80(s32 id); +s32 func_00381FF0(s32 id) +{ + s32 index = func_00381F80(id); + s32 result = (s32)&D_001D5788; + if (index >= 0) { + result = *(s32 *)(index * 16 + D_001D99A0_00381FF0[0]); } - - basePtr = (s32**)0x1D9A20; // 0x001E0000 - 0x65E0 - return (*basePtr)[index * 4]; + return (s32)result; } /* localdecomp:end func_00381FF0 */ diff --git a/nonmatching/frontbin/func_00385D28.c b/nonmatching/frontbin/func_00385D28.c deleted file mode 100644 index 012e5d89..00000000 --- a/nonmatching/frontbin/func_00385D28.c +++ /dev/null @@ -1,42 +0,0 @@ -/* US draft of func_00385D28 (rac3-uya-decomp func_00381A50, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00385D28 */ -typedef struct { u8 p0[0x20]; u8 b20; } H_381A50; -typedef struct { u8 p0[0x10]; f32 f10; u8 p14[0xC]; H_381A50 *f20; u8 b24; u8 b25; u8 p26[0xA]; f32 f30, f34; u8 p38[8]; } E_381A50; -typedef struct { E_381A50 e[14]; s32 n; } T_381A50; -extern T_381A50 D_00224BC0_00385D28; -extern s32 D_001A71A4_00385D28[]; -extern s32 D_001D5B98; -extern s32 D_001D4BC0_00385D28, D_001D4BC4_00385D28, D_001D4BD0_00385D28, D_001D4BD4_00385D28; -extern void func_003856B8(void); -extern void func_003860A8(f32 *, void *); -extern void func_00385398(void *, f32, f32); -void func_00385D28(s32 a) { - f32 v[2]; - s32 i; - E_381A50 *p; - if (D_001A71A4_00385D28[0] == 0x74) { - D_00224BC0_00385D28.n = 0; - return; - } - func_003856B8(); - if (D_00224BC0_00385D28.n == 0) return; - for (i = 0; i < D_00224BC0_00385D28.n; i++) { - p = &D_00224BC0_00385D28.e[i]; - if (p->b25 != a || p->f20 == 0 || p->f20->b20 == 0xFE || p->f20->b20 == 0xFD) continue; - if (p->b24 != 0) { - func_003860A8(v, p); - v[0] = (v[0] - (f32)D_001D4BD0_00385D28) * 0.0625f; - v[1] = (v[1] - (f32)D_001D4BD4_00385D28) * 0.0625f; - } else { - v[0] = (f32)D_001D4BC0_00385D28 * p->f30; - v[1] = (f32)D_001D4BC4_00385D28 * p->f34; - } - if (D_001D5B98 != 0) p->f10 *= 0.75f; - func_00385398(p, v[0], v[1]); - } - if (D_001D5B98 == 0) D_00224BC0_00385D28.n = 0; -} -/* localdecomp:end func_00385D28 */ diff --git a/nonmatching/frontbin/func_003864C0.c b/nonmatching/frontbin/func_003864C0.c deleted file mode 100644 index f2ae1890..00000000 --- a/nonmatching/frontbin/func_003864C0.c +++ /dev/null @@ -1,39 +0,0 @@ -/* US draft of func_003864C0 (rac3-uya-decomp func_003821E8, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_003864C0 */ -typedef struct { u8 pad[0x450]; s32 f450; } E_3821E8; -extern u8 D_00222480_003864C0[]; -typedef struct { u8 p0[0x228]; f32 f228; f32 f22C; u8 p230[8]; f32 f238; f32 f23C; u8 p240[0x10]; s32 f250; s32 f254; s32 f258; } S_3821E8; -extern S_3821E8 D_00225900; -extern u8 D_001D99AC, D_001D99AD, D_001D99AE, D_001D9C44, D_001D9C45, D_001D9C46; -extern f32 D_001D99C4, D_001D99C8, D_001D99CC, D_001D99D0, D_001D9C48, D_001D9C4C, D_001D9C50, D_001D9C54; -extern s32 D_001DA5D0, D_001D9C58; -extern void func_003873C0(); -void func_003864C0(s32 a) { - s32 c; - if (((E_3821E8 *)(a * 0x460 + (s32)D_00222480_003864C0))->f450 != 0) { - D_00225900.f250 = D_001D99AC; - D_00225900.f254 = D_001D99AD; - D_00225900.f258 = D_001D99AE; - D_00225900.f228 = D_001D99C4; - D_00225900.f22C = D_001D99C8; - D_00225900.f238 = D_001D99CC; - D_00225900.f23C = D_001D99D0; - c = 0x40000; - } else { - D_00225900.f250 = D_001D9C44; - D_00225900.f254 = D_001D9C45; - D_00225900.f258 = D_001D9C46; - D_00225900.f228 = D_001D9C48; - D_00225900.f22C = D_001D9C4C; - D_00225900.f238 = D_001D9C50; - D_00225900.f23C = D_001D9C54; - c = 0x7D0000; - } - D_001DA5D0 = c; - func_003873C0(); - D_001D9C58 = 0; -} -/* localdecomp:end func_003864C0 */ diff --git a/nonmatching/frontbin/func_00387218.c b/nonmatching/frontbin/func_00387218.c deleted file mode 100644 index 8f9dcbbf..00000000 --- a/nonmatching/frontbin/func_00387218.c +++ /dev/null @@ -1,18 +0,0 @@ -/* US draft of func_00387218 (rac3-uya-decomp func_00382F40, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00387218 */ -extern s32 func_00386730(); -extern void func_0038CB78(); -extern s32 D_001D9D54; -extern s32 D_00227480[]; - -void func_00387218(void) { - if (D_001D9D54 == 0) { - func_0038CB78(D_00227480, -1, 0x80); - } else if (D_001D9D54 == 2) { - func_00386730(); - } -} -/* localdecomp:end func_00387218 */ diff --git a/nonmatching/frontbin/func_00387268.c b/nonmatching/frontbin/func_00387268.c deleted file mode 100644 index 9e7bd0fb..00000000 --- a/nonmatching/frontbin/func_00387268.c +++ /dev/null @@ -1,46 +0,0 @@ -/* US draft of func_00387268 (rac3-uya-decomp func_00382F90, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00387268 */ -typedef struct { u8 p0[0x150]; u16 f150, f152; } C_00382F90; -extern C_00382F90 D_001CFEC0_00387268; -typedef struct { - u8 p0[0xA0]; f32 fA0; f32 fA4; u8 pA8[8]; f32 fB0; - u8 pB4[0x1A0 - 0xB4]; f32 f1A0; f32 f1A4; - u8 p1A8[0x210 - 0x1A8]; f32 f210; f32 f214; f32 f218; f32 f21C; - u8 p220[8]; f32 f228; f32 f22C; u8 p230[8]; f32 f238; f32 f23C; - s32 f240; s32 f244; s32 f248; s32 f24C; u8 p250[0x18]; s32 f268; -} S_00382F90; -extern S_00382F90 D_00225900_00387268; -extern s32 D_001D4BC0_00387268, D_001D4BC4_00387268, D_001D4BC8_00387268, D_001D4BCC_00387268; -extern s32 D_001D4BD0_00387268, D_001D4BD4_00387268, D_001D4BD8_00387268, D_001D4BDC_00387268; -void func_00387268(void) { - D_001D4BC0_00387268 = (s16)D_001CFEC0_00387268.f150; - D_001D4BC4_00387268 = (s16)D_001CFEC0_00387268.f152; - D_001D4BC8_00387268 = D_001D4BC0_00387268 >> 1; - D_001D4BCC_00387268 = D_001D4BC4_00387268 >> 1; - D_001D4BD0_00387268 = (0x800 - D_001D4BC8_00387268) << 4; - D_001D4BD4_00387268 = (0x800 - D_001D4BCC_00387268) << 4; - D_001D4BD8_00387268 = (D_001D4BC8_00387268 + 0x800) << 4; - D_001D4BDC_00387268 = (D_001D4BCC_00387268 + 0x800) << 4; - D_00225900_00387268.fA0 = 32.0f; - D_00225900_00387268.fA4 = 1048576.0f; - D_00225900_00387268.fB0 = 0.62f; - D_00225900_00387268.f210 = (f32)D_001D4BC0_00387268 * 0.5f; - D_00225900_00387268.f214 = (f32)D_001D4BC4_00387268 * 0.5f; - D_00225900_00387268.f1A0 = 2048.0f; - D_00225900_00387268.f1A4 = 2048.0f; - D_00225900_00387268.f218 = D_00225900_00387268.f210 * 4.0f; - D_00225900_00387268.f21C = D_00225900_00387268.f214 * 4.0f; - D_00225900_00387268.f22C = 524288.0f; - D_00225900_00387268.f238 = 255.0f; - D_00225900_00387268.f244 = D_001D4BC0_00387268 - 1; - D_00225900_00387268.f24C = D_001D4BC4_00387268 - 1; - D_00225900_00387268.f228 = 0.0f; - D_00225900_00387268.f23C = 0.0f; - D_00225900_00387268.f240 = 0; - D_00225900_00387268.f248 = 0; - D_00225900_00387268.f268 = 0; -} -/* localdecomp:end func_00387268 */ diff --git a/nonmatching/frontbin/func_00387F68.c b/nonmatching/frontbin/func_00387F68.c deleted file mode 100644 index 150d2411..00000000 --- a/nonmatching/frontbin/func_00387F68.c +++ /dev/null @@ -1,39 +0,0 @@ -/* US draft of func_00387F68 (rac3-uya-decomp func_003838C0, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00387F68 */ -extern u32 *D_001DA050_00387F68; -__asm__(".extern D_001DA050_g, 4"); -extern u32 *D_001DA050_g; -extern u8 D_001421B0[]; -extern u8 D_00142120[]; -extern long D_001D5330_00387F68[]; -typedef struct { u8 p0[0x240]; s32 f240, f244, f248, f24C, f250, f254, f258; } S_225980_3838C0; -extern S_225980_3838C0 D_00225900_00387F68; -extern void func_0038CC88(); -extern void func_003A9440(s32, unsigned long); -void func_00387F68(void) { - D_001DA050_00387F68[0] = 0x30000013; - D_001DA050_00387F68[1] = (u32)D_001421B0; - D_001DA050_00387F68[2] = 0; - D_001DA050_00387F68[3] = 0x50000013; - D_001DA050_00387F68 += 4; - D_001DA050_00387F68[0] = 0x30000009; - D_001DA050_00387F68[1] = (u32)D_00142120; - D_001DA050_00387F68[2] = 0; - D_001DA050_00387F68[3] = 0x50000009; - D_001DA050_00387F68 += 4; - D_001DA050_00387F68[0] = 0x10000003; - D_001DA050_00387F68[1] = 0; - D_001DA050_00387F68[2] = 0; - D_001DA050_00387F68[3] = 0x50000003; - D_001D5330_00387F68[2] = (long)D_00225900_00387F68.f240 | ((long)D_00225900_00387F68.f244 << 16) | ((long)D_00225900_00387F68.f248 << 32) | ((long)D_00225900_00387F68.f24C << 48); - D_001DA050_00387F68 += 4; - D_001D5330_00387F68[4] = (long)D_00225900_00387F68.f240 | ((long)D_00225900_00387F68.f244 << 16) | ((long)D_00225900_00387F68.f248 << 32) | ((long)D_00225900_00387F68.f24C << 48); - func_0038CC88(D_001DA050_00387F68, D_001D5330_00387F68, 0x30); - D_001DA050_g = (u32 *)((u8 *)D_001DA050_00387F68 + 0x30); - func_003A9440(0x3D, (long)D_00225900_00387F68.f250 | ((long)D_00225900_00387F68.f254 << 8) | ((long)D_00225900_00387F68.f258 << 16)); - func_003A9440(0x51, 0); -} -/* localdecomp:end func_00387F68 */ diff --git a/nonmatching/frontbin/func_00389240.c b/nonmatching/frontbin/func_00389240.c deleted file mode 100644 index 620a09a9..00000000 --- a/nonmatching/frontbin/func_00389240.c +++ /dev/null @@ -1,63 +0,0 @@ -/* US draft of func_00389240 (rac3-uya-decomp func_00384B68, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00389240 */ -extern s32 D_001D9BF4_00389240; -extern s32 D_001DA050_00389240; -extern s32 D_001D9C00; -extern long D_00226000_00389240[]; -extern s32 D_001D9EA0_00389240; -extern s32 D_001D9EAC_00389240; -extern volatile s32 D_001D9EB0_00389240; -extern s32 D_001D9BFC; -extern s32 D_001D4BB4_00389240; -extern s32 D_001D4BB0_00389240; -extern unsigned long D_001D58E0, D_001D58E8; -extern s32 D_001D58F0; -extern s32 D_001A1ED0_00389240[]; -__asm__(".extern D_001D9BFC, 4"); -__asm__(".extern D_001D58E0, 8"); -__asm__(".extern D_001D58E8, 8"); -__asm__(".extern D_001D58F0, 4"); -extern void func_0038E138(void); -void func_00389240(s32 a) { - s32 n; - s32 t; - s32 u; - s32 i; - s32 c; - s32 j; - long *p; - t = D_001DA050_00389240; - D_001D9BF4_00389240 = t; - t += 0x10; - D_001DA050_00389240 = t; - u = D_001D4BB4_00389240; - n = D_001D9C00; - D_001D4BB0_00389240 = u; - D_001D9BFC = 0; - if (n > 0) { - p = D_00226000_00389240; - for (c = n; c != 0; c--) { - *p = 0; - p += 2; - } - } - D_001D58E0 = 0; - D_001D58E8 = 0; - D_001D58F0 = 0; - if (a == 0) { - for (i = 0; i < *(s32 *)(D_001D9EA0_00389240 + 0x44); i++) { - u16 *h = (u16 *)((i << 3) + D_001D9EAC_00389240 + 4); - if (*h >= (D_001A1ED0_00389240[1] >> 8)) { - *h = 0; - } - } - for (j = 0; j < *(s32 *)(D_001D9EA0_00389240 + 0x24); j++) { - *(u16 *)(D_001D9EB0_00389240 + j * 8 + 4) = 0; - } - } - func_0038E138(); -} -/* localdecomp:end func_00389240 */ diff --git a/nonmatching/frontbin/func_00389C48.c b/nonmatching/frontbin/func_00389C48.c deleted file mode 100644 index 60277662..00000000 --- a/nonmatching/frontbin/func_00389C48.c +++ /dev/null @@ -1,29 +0,0 @@ -/* US draft of func_00389C48 (rac3-uya-decomp func_00385570, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00389C48 */ -extern s32 D_001D4BB0; -extern s32 D_001DA050; -extern u8 D_003354A0[]; -extern u8 D_00335510[]; -extern void func_0038CC88(); -extern void func_003A9618(); -s32 func_00389C48(s32 a, s32 b) { - u8 *p; - s32 h = D_001D4BB0 >> 8; - if (b == 0x14) { - func_0038CC88(D_001DA050, D_003354A0, 0x70); - D_001D4BB0 = D_001D4BB0 + 0x100; - } else { - func_0038CC88(D_001DA050, D_00335510, 0x70); - D_001D4BB0 = D_001D4BB0 + 0x400; - } - p = (u8 *)D_001DA050; - *(s32 *)(p + 0x64) = a; - *(s16 *)(p + 0x24) = h; - D_001DA050 = D_001DA050 + 0x70; - func_003A9618(); - return h; -} -/* localdecomp:end func_00389C48 */ diff --git a/nonmatching/frontbin/func_00389D60.c b/nonmatching/frontbin/func_00389D60.c deleted file mode 100644 index 27af1a03..00000000 --- a/nonmatching/frontbin/func_00389D60.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Near miss of func_00389D60 with its file's own flags: tools/check.py reports 9 diff - (the US draft it started from: 18). - What differs: Remaining differences (9 diffs): (1) the counter's address form - retail uses - the non-split form (`lui $a2, %hi` + `lw $a2, %lo($a2)`, and `lui $at` + `sw` for the - store), which is what `-mno-split-addresses` or `@ps2as` produce; with this file's split- - address flags gcc always splits the high half into its own register (`lui $v0` + `lw $a2, - %lo($v0)`) and the neighbouring retail functions of the same file (0x389D00-0x38A040) all - use the non-split form, so the file's flags look wrong for this range; (2) the two arguments - are copied with 64-bit `daddu` in retail (they are 64-bit there) but... -*/ - -/* func_00389D60: push (a, b) into the pair of tables when the counter allows it. - The counter is reached through an unsized array (not small data), so it is - addressed with lui/lw instead of $gp. A second name for the same address is - used for the store, so the load and the store do not share the address. */ - -extern s32 D_001D9C08[]; -extern s32 D_001D9C08_00389D60s[]; -extern s32 D_00226800_00389D60[]; -extern s32 D_00226900[]; - -void func_00389D60(s32 a, s32 b) { - s32 i = D_001D9C08[0]; - if (i < 64) { - D_00226800_00389D60[i] = a; - D_00226900[i] = b; - D_001D9C08_00389D60s[0] = i + 1; - } -} diff --git a/nonmatching/frontbin/func_00389F18.c b/nonmatching/frontbin/func_00389F18.c deleted file mode 100644 index fa00dbd4..00000000 --- a/nonmatching/frontbin/func_00389F18.c +++ /dev/null @@ -1,17 +0,0 @@ -/* US draft of func_00389F18 (rac3-uya-decomp func_00385840, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00389F18 */ -extern s32 D_001D9C0C_00389F18; -extern s32 D_00226B00[]; -extern s32 D_00226A00_00389F18[]; -void func_00389F18(s32 a, s32 b) { - s32 n = D_001D9C0C_00389F18; - if (n < 0x40) { - D_00226A00_00389F18[n] = a; - D_00226B00[n] = b; - D_001D9C0C_00389F18 = n + 1; - } -} -/* localdecomp:end func_00389F18 */ diff --git a/nonmatching/frontbin/func_00389FE0.c b/nonmatching/frontbin/func_00389FE0.c deleted file mode 100644 index b16e4688..00000000 --- a/nonmatching/frontbin/func_00389FE0.c +++ /dev/null @@ -1,28 +0,0 @@ -/* US draft of func_00389FE0 (rac3-uya-decomp func_00385908, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_00389FE0 */ -extern int D_001D9C38_00389FE0; -extern void (*D_001D9C18[])(int); -extern int D_001D9C28[]; - -void func_00389FE0(void) { - int index; - register void (**callbacks)(int) __asm__("$17"); - register int *arguments __asm__("$18"); - - index = 0; - if (D_001D9C38_00389FE0 > 0) { - arguments = D_001D9C28; - __asm__ volatile("" : "+r"(arguments)); - callbacks = D_001D9C18; - do { - index++; - (*callbacks)(*arguments); - callbacks++; - arguments++; - } while (index < D_001D9C38_00389FE0); - } -} -/* localdecomp:end func_00389FE0 */ diff --git a/nonmatching/frontbin/func_0038A238.c b/nonmatching/frontbin/func_0038A238.c deleted file mode 100644 index cd55e89f..00000000 --- a/nonmatching/frontbin/func_0038A238.c +++ /dev/null @@ -1,56 +0,0 @@ -/* US draft of func_0038A238 (rac3-uya-decomp func_00385B60, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_0038A238 */ -extern u32 *D_001DA050_0038A238; -__asm__(".extern D_001DA050_g, 4"); -extern u32 *D_001DA050_g; -__asm__(".extern D_001D9BC8_g, 4"); -extern s32 D_001D9BC8_g; -extern s32 D_001D9BC8_0038A238; -extern u8 D_00141990[]; -extern void func_003A92F0(s32); -extern s32 func_12C908(s32); -extern void func_003A9108(void); -extern void func_003A91D0(void); -extern void func_003A9150(); -extern void func_003922B8(void); -extern void func_00392350(s32); -extern void func_003923D0(void); -extern void func_003A9440(s32, unsigned long); -void func_0038A238(s32 arg0) { - s32 i; - s32 t; - func_003A92F0(1); - i = arg0 - 1; - func_12C908(0); - D_001D9BC8_g = D_001D9BC8_0038A238 + 1; - func_003A9108(); - while (i >= 0) { - func_003922B8(); - func_00392350(1); - func_003923D0(); - func_003A9440(0x42, 0x8000000044UL); - t = (i << 7) / (i + 1); - i--; - func_003A9440(1, (long)(0x80 - t) << 24); - D_001DA050_0038A238[0] = 0x30000014; - D_001DA050_0038A238[1] = (u32)D_00141990; - D_001DA050_0038A238[2] = 0; - D_001DA050_0038A238[3] = 0x50000014; - D_001DA050_g = D_001DA050_0038A238 + 4; - func_003A92F0(1); - func_12C908(0); - D_001D9BC8_g = D_001D9BC8_0038A238 + 1; - func_003A91D0(); - func_003A9150(); - } - func_003A92F0(1); - func_12C908(0); - D_001D9BC8_g = D_001D9BC8_0038A238 + 1; - func_003A9108(); - func_003922B8(); - func_00392350(1); -} -/* localdecomp:end func_0038A238 */ diff --git a/nonmatching/frontbin/func_0038A3B8.c b/nonmatching/frontbin/func_0038A3B8.c deleted file mode 100644 index cc79d3a4..00000000 --- a/nonmatching/frontbin/func_0038A3B8.c +++ /dev/null @@ -1,32 +0,0 @@ -/* US draft of func_0038A3B8 (rac3-uya-decomp func_00385CE0, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_0038A3B8 */ -extern s32 D_001D4D40_0038A3B8; -extern s32 D_00225734_0038A3B8[]; -extern s32 D_001D55E8_0038A3B8; -extern s32 D_00143950[]; -extern f32 func_0038D098(f32); -extern void func_0038DBD8(s32, s32, f32); -extern void func_0038E150(s32); -extern s32 func_00381FF0(s32); -extern void func_0038E7E8_0038A3B8(f32, f32, f32, unsigned long, s32, s32, f32, s32, s32, unsigned long, f32, f32); -void func_0038A3B8(void) { - f32 f, y; - s32 old, n; - if (D_001D4D40_0038A3B8 == 1) { - n = ((u8 *)D_00143950)[0xAD] ? 0x30 : 0x5A; - f = (f32)(D_00225734_0038A3B8[0] % 100) / 50.0f - 1.0f; - if (f < -1.0f) f = -1.0f; - if (1.0f < f) f = 1.0f; - y = n; - f = func_0038D098(f * 3.1415927f); - n = ((s32 (*)(s32, s32, f32))func_0038DBD8)(0x7FE0E0E0, 0x5F66CCFF, (f + 1.0f) * 0.5f); - old = D_001D55E8_0038A3B8; - func_0038E150(0); - func_0038E7E8_0038A3B8(480.0f, y, 1.0f, n, func_00381FF0(0x244), -1, 1.0f, 2, 1, 0x80000000, 1.0f, 1.0f); - func_0038E150(old); - } -} -/* localdecomp:end func_0038A3B8 */ diff --git a/nonmatching/frontbin/func_0038ABC0.c b/nonmatching/frontbin/func_0038ABC0.c deleted file mode 100644 index c52e1ea4..00000000 --- a/nonmatching/frontbin/func_0038ABC0.c +++ /dev/null @@ -1,44 +0,0 @@ -/* US draft of func_0038ABC0 (rac3-uya-decomp func_00386488, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_0038ABC0 */ -typedef struct { s32 f0; u32 f4; unsigned long f8; s32 f10; u32 f14; unsigned long f18; s32 f20; u32 f24; unsigned long f28; } P_00386488; -__asm__(".extern D_001D58B8_0038ABC0, 4"); -extern P_00386488 *D_001D58B8_0038ABC0; -extern void func_003A9440(s32, unsigned long); -extern void func_0038AF30(s32, s32, s32, s32, unsigned long); -typedef struct { u8 p0[0x150]; s16 f150, f152; } C_00386488; -extern C_00386488 D_001CFEC0_0038ABC0; -void func_0038ABC0(void) { - s32 i = 0; - s32 h = D_001CFEC0_0038ABC0.f152; - s32 y; - if (D_001D58B8_0038ABC0->f8) { - func_003A9440(0x42, D_001D58B8_0038ABC0->f8 & 0xFF000000FFUL); - } - if (D_001D58B8_0038ABC0->f4 & 0xFF000000) { - func_0038AF30(0, h, 0, D_001CFEC0_0038ABC0.f150, D_001D58B8_0038ABC0->f4); - } - if (h > 0) { - do { - if (D_001D58B8_0038ABC0->f18) { - func_003A9440(0x42, D_001D58B8_0038ABC0->f18 & 0xFF000000FFUL); - } - if (D_001D58B8_0038ABC0->f14 & 0xFF000000) { - y = (i + D_001D58B8_0038ABC0->f10 >= h - 1) ? h - 1 : i + D_001D58B8_0038ABC0->f10; - func_0038AF30(i, y, 0, D_001CFEC0_0038ABC0.f150, D_001D58B8_0038ABC0->f14); - } - i += D_001D58B8_0038ABC0->f10; - if (D_001D58B8_0038ABC0->f28) { - func_003A9440(0x42, D_001D58B8_0038ABC0->f28 & 0xFF000000FFUL); - } - if (D_001D58B8_0038ABC0->f24 & 0xFF000000) { - y = (i + D_001D58B8_0038ABC0->f20 >= h - 1) ? h - 1 : i + D_001D58B8_0038ABC0->f20; - func_0038AF30(i, y, 0, D_001CFEC0_0038ABC0.f150, D_001D58B8_0038ABC0->f24); - } - i += D_001D58B8_0038ABC0->f20; - } while (i < h); - } -} -/* localdecomp:end func_0038ABC0 */ diff --git a/nonmatching/frontbin/func_0038AD40.c b/nonmatching/frontbin/func_0038AD40.c deleted file mode 100644 index 3dcec90d..00000000 --- a/nonmatching/frontbin/func_0038AD40.c +++ /dev/null @@ -1,24 +0,0 @@ -/* US draft of func_0038AD40 (rac3-uya-decomp func_00386608, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_0038AD40 */ -extern void func_003A9440(s32, unsigned long); -extern void func_0038AF30(s32, s32, s32, s32, unsigned long); -extern s32 D_001A1ED0[]; -extern s16 D_001CFEC0[]; -typedef struct { s32 f0; u32 f4; unsigned long f8; } S; -void func_0038AD40(S *a) { - if (a->f8) { - func_003A9440(0x42, a->f8 & 0xFF000000FFUL); - } - if (a->f4 & 0xFF000000) { - func_003A9440(0x4E, ((D_001A1ED0[2] >> 13) | 0x1000000) | 0x100000000UL); - func_0038AF30(0, D_001CFEC0[0xA9], 0, D_001CFEC0[0xA8], a->f4); - func_003A9440(0x4E, 0x1000000 | (D_001A1ED0[2] >> 13)); - } - if (a->f8) { - func_003A9440(0x42, 0x8000000044UL); - } -} -/* localdecomp:end func_0038AD40 */ diff --git a/nonmatching/frontbin/func_0038AE20.c b/nonmatching/frontbin/func_0038AE20.c deleted file mode 100644 index 5426bb6d..00000000 --- a/nonmatching/frontbin/func_0038AE20.c +++ /dev/null @@ -1,18 +0,0 @@ -/* US draft of func_0038AE20 (rac3-uya-decomp func_003866E8, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_0038AE20 */ -extern u32 *D_001DA050_0038AE20; -extern u8 D_00141850[]; -void func_0038AE20(s32 a0, s32 a1, s32 a2, s32 a3) { - func_003A9440(0x4E, ((D_001A1ED0[2] >> 13) | 0x31000000) | (0x8000UL << 17)); - func_003A9440(1, (long)a0 | ((long)a1 << 8) | ((long)a2 << 16) | ((long)a3 << 24)); - D_001DA050_0038AE20[0] = 0x30000014; - D_001DA050_0038AE20[1] = (u32)D_00141850; - D_001DA050_0038AE20[2] = 0; - D_001DA050_0038AE20[3] = 0x50000014; - D_001DA050_0038AE20 += 4; - func_003A9440(0x4E, 0x31000000 | (D_001A1ED0[2] >> 13)); -} -/* localdecomp:end func_0038AE20 */ diff --git a/nonmatching/frontbin/func_0038B670.c b/nonmatching/frontbin/func_0038B670.c deleted file mode 100644 index 0a907fba..00000000 --- a/nonmatching/frontbin/func_0038B670.c +++ /dev/null @@ -1,41 +0,0 @@ -/* US draft of func_0038B670 (rac3-uya-decomp func_00386F38, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_0038B670 */ -extern s32 D_001D4BD0_0038B670, D_001D4BD4_0038B670; -extern s32 D_001DA050; -s32 func_0038B670(s32 u, s32 v, s32 w, s32 h, long t0, long t1, s32 flag, f32 x, f32 y, f32 fw, f32 fh) { - s32 u1 = u + w; - s32 v1 = v + h; - s32 x0 = (s32)(x * 16.0f) + D_001D4BD0_0038B670 - 8; - s32 x1 = (s32)((x + fw) * 16.0f) + D_001D4BD0_0038B670 - 9; - s32 y0 = (s32)(y * 16.0f) + D_001D4BD4_0038B670 - 8; - s32 y1 = (s32)((y + fh) * 16.0f) + D_001D4BD4_0038B670 - 9; - s32 u4 = u << 4; - s32 uw4 = u1 << 4; - long *p; - if (x0 > 0x9000 || x1 < 0x7000 || y0 > 0x9000 || y1 < 0x7000) return 0; - if (flag) { - x0 = (x0 & 0xFFF0) + 8; - x1 = (x1 & 0xFFF0) + 8; - y0 = (y0 & 0xFFF0) + 8; - y1 = (y1 & 0xFFF0) + 8; - } - p = (long *)D_001DA050; - p[0] = t1; - p[1] = 0x154; - p[2] = 0xA | (long)u << 4 | (long)(u1 - 1) << 14 | (long)v << 24 | (long)(v1 - 1) << 34; - p[3] = t0; - p[4] = (v << 20) + u4; - p[5] = (long)x0 | (long)y0 << 16; - p[6] = (v << 20) + uw4; - p[7] = (long)x1 | (long)y0 << 16; - p[8] = (v1 << 20) + u4; - p[9] = (long)x0 | (long)y1 << 16; - p[10] = (v1 << 20) + uw4; - p[11] = (long)x1 | (long)y1 << 16; - D_001DA050 += 0x60; - return 1; -} -/* localdecomp:end func_0038B670 */ diff --git a/nonmatching/frontbin/func_0038B850.c b/nonmatching/frontbin/func_0038B850.c deleted file mode 100644 index de24dcfd..00000000 --- a/nonmatching/frontbin/func_0038B850.c +++ /dev/null @@ -1,45 +0,0 @@ -/* US draft of func_0038B850 (rac3-uya-decomp func_00387118, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_0038B850 */ -extern s32 D_001D4BD0_0038B850, D_001D4BD4_0038B850; -extern s32 D_001DA050; -s32 func_0038B850(s32 u, s32 v, s32 w, s32 h, long *c, long t1, s32 flag, f32 x, f32 y, f32 fw, f32 fh) { - s32 u1 = u + w; - s32 v1 = v + h; - s32 x0 = (s32)(x * 16.0f) + D_001D4BD0_0038B850 - 8; - s32 x1 = (s32)((x + fw) * 16.0f) + D_001D4BD0_0038B850 - 9; - s32 y0 = (s32)(y * 16.0f) + D_001D4BD4_0038B850 - 8; - s32 y1 = (s32)((y + fh) * 16.0f) + D_001D4BD4_0038B850 - 9; - s32 u4 = u << 4; - s32 uw4 = u1 << 4; - long *p; - if (x0 > 0x9000 || x1 < 0x7000 || y0 > 0x9000 || y1 < 0x7000) return 0; - if (flag) { - x0 = (x0 & 0xFFF0) + 8; - x1 = (x1 & 0xFFF0) + 8; - y0 = (y0 & 0xFFF0) + 8; - y1 = (y1 & 0xFFF0) + 8; - } - p = (long *)D_001DA050; - p[0] = t1; - p[1] = 0x154; - p[2] = 0xA | (long)u << 4 | (long)(u1 - 1) << 14 | (long)v << 24 | (long)(v1 - 1) << 34; - p[3] = c[0]; - p[4] = (v << 20) + u4; - p[5] = (long)x0 | (long)y0 << 16; - p[6] = c[1]; - p[7] = (v << 20) + uw4; - p[8] = (long)x1 | (long)y0 << 16; - p[9] = c[2]; - p[10] = (v1 << 20) + u4; - p[11] = (long)x0 | (long)y1 << 16; - p[12] = c[3]; - p[13] = (v1 << 20) + uw4; - p[14] = (long)x1 | (long)y1 << 16; - p[15] = 0; - D_001DA050 += 0x80; - return 1; -} -/* localdecomp:end func_0038B850 */ diff --git a/nonmatching/frontbin/func_0039AEF0.c b/nonmatching/frontbin/func_0039AEF0.c deleted file mode 100644 index f113f055..00000000 --- a/nonmatching/frontbin/func_0039AEF0.c +++ /dev/null @@ -1,37 +0,0 @@ -/* US draft of func_0039AEF0 (rac3-uya-decomp func_00396100, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -typedef struct { - u8 pad0[0x10]; - s32 f10; - u8 pad1[0x150]; - s32 f164; - s32 f168; - u8 pad2[0x10]; - s32 f17c; -} S_142430; -extern S_142430 D_00142430; - -extern s32 D_001D4CE8[]; -/* localdecomp:start func_0039AEF0 */ -typedef struct { - u8 pad[0x10]; - s32 f10; - u8 pad2[0x150]; - s32 f164; - s32 f168; - u8 pad3[0x10]; - s32 f17C; -} S_142430x; - -extern S_142430x D_142430; -extern s32 D_001D4CE8_g; - -void func_0039AEF0(void) { - S_142430x *p = &D_142430; - D_001D4CE8_g = 4; - p->f17C = 0; - p->f10 = 0; -} -/* localdecomp:end func_0039AEF0 */ diff --git a/nonmatching/frontbin/func_0039B088.c b/nonmatching/frontbin/func_0039B088.c deleted file mode 100644 index 47c5965c..00000000 --- a/nonmatching/frontbin/func_0039B088.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Near miss of func_0039B088 with its file's own flags: tools/check.py reports 5 diff - (the US draft it started from: 8). - What differs: Instruction shapes, immediates, branch target and delay-slot constant are all - correct (was 8 diff, now 5). What remains is only which register holds each address's high - half: gcc CSEs the shared `%hi` (both globals are 0x1D____) into one `$v1`, giving `lui $v1 - / lbu $v0, 0x4cec($v1)` and `lui $v1 / sw $v0, 0x4ce8($v1)`. Retail reuses the destination - for the load (`lui $v0 / lbu $v0, 0x4cec($v0)`) and uses `$at` as scratch for the store - (`lui $at / sw $v0, 0x4ce8($at)`), i.e. two independent address materializations with - different register conventions. Those are `-mno-split-addresses` +... -*/ - -/* localdecomp:start func_0039B088 */ -/* Retail reaches both globals with split (lui + load/store) forms rather than - $gp-relative, so both are declared unsized: an unsized array is never small - data. The names embed the address (D_001D4CEC / D_001D4CE8) so no - symbol_addrs entry is needed for the aliases. */ -extern u8 D_001D4CEC_b088[]; -extern s32 D_001D4CE8_b088[]; -void func_0039B088(void) { - if ((D_001D4CEC_b088[0] ^ 1) & 1) { - D_001D4CE8_b088[0] = 4; - } -} -/* localdecomp:end func_0039B088 */ diff --git a/nonmatching/frontbin/func_003AB830.c b/nonmatching/frontbin/func_003AB830.c deleted file mode 100644 index bc0d2472..00000000 --- a/nonmatching/frontbin/func_003AB830.c +++ /dev/null @@ -1,20 +0,0 @@ -/* US draft of func_003AB830 (rac3-uya-decomp func_003A6288, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `@ps2as` (a single-function override). */ - - -/* localdecomp:start func_003AB830 */ -extern void func_003AB168(); -extern void func_003ABF48(); -extern s32 D_001D81E8_003AB168; - -void func_003AB830(void *arg0, s32 arg1) { - s32 temp_a0; - - (*(s32 **)((u8 *)(arg0) + 0x24)) = &D_001D81E8_003AB168; - temp_a0 = (*(s32 *)((u8 *)(arg0) + 0x20)); - if ((temp_a0 != 0) && ((*(u8 *)((u8 *)(arg0) + 0x2C)) == 0)) { - func_003ABF48(temp_a0, (*(s32 *)((u8 *)(arg0) + 0x28))); - } - func_003AB168(arg0, arg1); -} -/* localdecomp:end func_003AB830 */ diff --git a/nonmatching/frontbin/func_003B4658.c b/nonmatching/frontbin/func_003B4658.c index 2d92be76..2137c143 100644 --- a/nonmatching/frontbin/func_003B4658.c +++ b/nonmatching/frontbin/func_003B4658.c @@ -1,8 +1,40 @@ -/* US draft of func_003B4658 (rac3-uya-decomp func_003AF0A0, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `-mno-split-addresses` (a single-function override). */ - +/* Draft from the NTSC decomp (commit 13cf5c5; THIRD_PARTY_NOTICES.md). + * NTSC-U frontbin: 0x003AF0A0, 40 bytes; shared PAL name: func_003B4658. + * Best user check: 2 differing words, the table store and return-pointer move + * reversed. The simpler original struct-based draft is retained below. + * Four user checks with the owning file's flags: + * field0, table, zeros: 2 differences (retained). + * table, field0, zeros: 5 differences, setup/register allocation changed. + * table, field0 from an initialized local, zeros: the same 5 differences. + * field0, zeros, table: the same 2 differences as the retained draft. + * No improvement across these checks; attempt stopped, not integrated. + * The earlier pointer-array draft needed -mno-split-addresses, which is not + * the owning file's flag set. The flags used for all four checks were: + * -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division. + * The caller initializes four objects with stride 0x14. Only field offsets and + * initial values are confirmed; the table at +4 appears to be a virtual table. + */ +#include "common.h" /* localdecomp:start func_003B4658 */ +typedef struct { + s32 field0; + u8 *table; + s32 field8; + s32 fieldC; + s32 field10; +} Object_003B4658; + extern u8 D_001D88D8[]; -void **func_003B4658(void **p) { p[0] = (void *)1; p[1] = D_001D88D8; p[2] = 0; p[3] = 0; p[4] = 0; return p; } + +void **func_003B4658(void **p) { + Object_003B4658 *object = (Object_003B4658 *)p; + + object->field0 = 1; + object->table = D_001D88D8; + object->field8 = 0; + object->fieldC = 0; + object->field10 = 0; + return p; +} /* localdecomp:end func_003B4658 */ diff --git a/nonmatching/frontbin/func_003BDCB0.c b/nonmatching/frontbin/func_003BDCB0.c index 370d511c..bf6f6610 100644 --- a/nonmatching/frontbin/func_003BDCB0.c +++ b/nonmatching/frontbin/func_003BDCB0.c @@ -1,6 +1,16 @@ -/* US draft of func_003BDCB0 (rac3-uya-decomp func_003B87B8, commit 13cf5c5), names moved to PAL addresses - where known. Not carried: flags: the US matched it with `-mno-split-addresses` (a single-function override). */ - +/* Draft from the NTSC decomp (commit 13cf5c5; THIRD_PARTY_NOTICES.md). + * NTSC-U frontbin: 0x003B87B8..0x003B880B, 84 bytes. + * Shared PAL name: func_003BDCB0; instructions agree apart from global addresses. + * First pointer-based do/while draft: user check reports 13 differences, + * with the right 84-byte size and loop shape but different setup/registers. + * This uncompiled revision uses for-loop updates to test register lifetimes. + * The earlier indexed draft needed -mno-split-addresses; this revision uses + * the owning file's flags: + * -mvu0-use-vf0-vf2 -O2 -G8 -fopt-stack -mno-check-zero-division. + * Retail always writes ten slots, even when n is negative or greater than ten; + * it saves n unchanged. The meanings of the entries, flags and v are unknown. + */ +#include "common.h" /* localdecomp:start func_003BDCB0 */ extern s32 D_001D8CFC; @@ -8,12 +18,21 @@ extern s32 D_001D8CF8; extern s32 D_001DA268[]; extern s8 D_001DA290[]; void func_003BDCB0(s32 n, s32 *p, s32 v) { - s32 i; - for (i = 0; i < 10; i++) { - if (i < n) D_001DA268[i] = p[i]; - else D_001DA268[i] = -1; - D_001DA290[i] = 0; + s32 i = 0; + s32 missing = -1; + s8 *flags = D_001DA290; + s32 *entry = D_001DA268; + + for (; i < 10; entry++, i++, p++) { + if (i < n) { + *entry = *p; + } else { + *entry = missing; } + + *(s8 *)(i + (s32)flags) = 0; + } + D_001D8CFC = v; D_001D8CF8 = n; } diff --git a/nonmatching/frontbin/func_U_003B0C70.c b/nonmatching/frontbin/func_U_003B0C70.c index e2289d5b..4a2c382a 100644 --- a/nonmatching/frontbin/func_U_003B0C70.c +++ b/nonmatching/frontbin/func_U_003B0C70.c @@ -1,3 +1,8 @@ +/* NTSC-U frontbin, 164 bytes; S/default, -O2 -G8 -fopt-stack, vf0-vf2. + * Rechecked 2026-10-31: 2 differing words, the initial lui/stack-adjust order. + * Removing the read wrapper or wrapping the branch gives the same wrong bytes; + * a literal-address read gives 6 differences in the prologue. No source integration. + */ #include "common.h" diff --git a/progress/report.json b/progress/report.json index 5a3568e6..a792b607 100644 --- a/progress/report.json +++ b/progress/report.json @@ -1,49 +1,49 @@ { "version": 2, "measures": { - "fuzzy_match_percent": 8.716795, + "fuzzy_match_percent": 8.724056, "total_code": "7546948", - "matched_code": "657852", - "matched_code_percent": 8.716795, + "matched_code": "658400", + "matched_code_percent": 8.724056, "total_functions": 16164, - "matched_functions": 5808, - "matched_functions_percent": 35.9317, - "complete_code": "203716", - "complete_code_percent": 2.699316, - "total_units": 424, - "complete_units": 281 + "matched_functions": 5810, + "matched_functions_percent": 35.944073, + "complete_code": "199208", + "complete_code_percent": 2.639584, + "total_units": 421, + "complete_units": 278 }, "categories": [ { "id": "core", "name": "Core programs", "measures": { - "fuzzy_match_percent": 59.546719, + "fuzzy_match_percent": 59.632374, "total_code": "639780", - "matched_code": "380968", - "matched_code_percent": 59.546719, + "matched_code": "381516", + "matched_code_percent": 59.632374, "total_functions": 2904, - "matched_functions": 2439, - "matched_functions_percent": 83.987603, - "complete_code": "203716", - "complete_code_percent": 31.841571, - "total_units": 386, - "complete_units": 281 + "matched_functions": 2441, + "matched_functions_percent": 84.056474, + "complete_code": "199208", + "complete_code_percent": 31.136953, + "total_units": 383, + "complete_units": 278 } }, { "id": "frontbin", "name": "frontbin (front end)", "measures": { - "fuzzy_match_percent": 51.175296, - "total_code": "384584", - "matched_code": "196812", - "matched_code_percent": 51.175296, - "total_functions": 1672, - "matched_functions": 1399, - "matched_functions_percent": 83.672249, + "fuzzy_match_percent": 51.881817, + "total_code": "389092", + "matched_code": "201868", + "matched_code_percent": 51.881817, + "total_functions": 1690, + "matched_functions": 1419, + "matched_functions_percent": 83.964497, "complete_code": "38104", - "complete_code_percent": 9.907848, + "complete_code_percent": 9.793057, "total_units": 68, "complete_units": 22 } @@ -52,15 +52,15 @@ "id": "frontbin_text", "name": "frontbin .text", "measures": { - "fuzzy_match_percent": 51.175296, - "total_code": "384584", - "matched_code": "196812", - "matched_code_percent": 51.175296, - "total_functions": 1672, - "matched_functions": 1399, - "matched_functions_percent": 83.672249, + "fuzzy_match_percent": 51.881817, + "total_code": "389092", + "matched_code": "201868", + "matched_code_percent": 51.881817, + "total_functions": 1690, + "matched_functions": 1419, + "matched_functions_percent": 83.964497, "complete_code": "38104", - "complete_code_percent": 9.907848, + "complete_code_percent": 9.793057, "total_units": 68, "complete_units": 22 } @@ -69,17 +69,17 @@ "id": "boot_elf", "name": "boot_elf (engine core + boot front end)", "measures": { - "fuzzy_match_percent": 69.829025, - "total_code": "234888", - "matched_code": "164020", - "matched_code_percent": 69.829025, - "total_functions": 1038, - "matched_functions": 847, - "matched_functions_percent": 81.599229, - "complete_code": "145476", - "complete_code_percent": 61.934198, - "total_units": 294, - "complete_units": 236 + "fuzzy_match_percent": 69.238649, + "total_code": "230380", + "matched_code": "159512", + "matched_code_percent": 69.238649, + "total_functions": 1020, + "matched_functions": 829, + "matched_functions_percent": 81.27451, + "complete_code": "140968", + "complete_code_percent": 61.189339, + "total_units": 291, + "complete_units": 233 } }, { @@ -103,17 +103,17 @@ "id": "boot_elf_text", "name": "boot_elf .text", "measures": { - "fuzzy_match_percent": 94.479702, - "total_code": "79416", - "matched_code": "75032", - "matched_code_percent": 94.479702, - "total_functions": 210, - "matched_functions": 206, - "matched_functions_percent": 98.095238, - "complete_code": "74924", - "complete_code_percent": 94.343709, - "total_units": 105, - "complete_units": 102 + "fuzzy_match_percent": 94.147488, + "total_code": "74908", + "matched_code": "70524", + "matched_code_percent": 94.147488, + "total_functions": 192, + "matched_functions": 188, + "matched_functions_percent": 97.916667, + "complete_code": "70416", + "complete_code_percent": 94.003311, + "total_units": 102, + "complete_units": 99 } }, { @@ -1249,13 +1249,13 @@ { "name": "frontbin/382380", "measures": { - "fuzzy_match_percent": 20.29734, - "total_code": "25560", - "matched_code": "5188", - "matched_code_percent": 20.29734, - "total_functions": 68, - "matched_functions": 45, - "matched_functions_percent": 66.176471, + "fuzzy_match_percent": 33.591145, + "total_code": "29996", + "matched_code": "10076", + "matched_code_percent": 33.591145, + "total_functions": 84, + "matched_functions": 62, + "matched_functions_percent": 73.809524, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -1580,7 +1580,7 @@ { "name": "func_00385D28", "size": "452", - "fuzzy_match_percent": 0.0, + "fuzzy_match_percent": 100.0, "address": "14528", "metadata": { "virtual_address": "3693864" @@ -1622,6 +1622,15 @@ "virtual_address": "3695080" } }, + { + "name": "func_003864C0", + "size": "224", + "fuzzy_match_percent": 100.0, + "address": "16472", + "metadata": { + "virtual_address": "3695808" + } + }, { "name": "func_00386678", "size": "184", @@ -1640,6 +1649,24 @@ "virtual_address": "3696432" } }, + { + "name": "func_00387218", + "size": "80", + "fuzzy_match_percent": 100.0, + "address": "19888", + "metadata": { + "virtual_address": "3699224" + } + }, + { + "name": "func_00387268", + "size": "340", + "fuzzy_match_percent": 100.0, + "address": "19968", + "metadata": { + "virtual_address": "3699304" + } + }, { "name": "func_003873C0", "size": "1876", @@ -1667,6 +1694,15 @@ "virtual_address": "3702512" } }, + { + "name": "func_00387F68", + "size": "460", + "fuzzy_match_percent": 100.0, + "address": "23296", + "metadata": { + "virtual_address": "3702632" + } + }, { "name": "func_00388138", "size": "120", @@ -1739,6 +1775,15 @@ "virtual_address": "3707424" } }, + { + "name": "func_00389240", + "size": "300", + "fuzzy_match_percent": 100.0, + "address": "28120", + "metadata": { + "virtual_address": "3707456" + } + }, { "name": "func_00389478", "size": "264", @@ -1757,6 +1802,15 @@ "virtual_address": "3708296" } }, + { + "name": "func_00389C48", + "size": "184", + "fuzzy_match_percent": 100.0, + "address": "30688", + "metadata": { + "virtual_address": "3710024" + } + }, { "name": "func_00389D00", "size": "92", @@ -1766,6 +1820,15 @@ "virtual_address": "3710208" } }, + { + "name": "func_00389D60", + "size": "80", + "fuzzy_match_percent": 100.0, + "address": "30968", + "metadata": { + "virtual_address": "3710304" + } + }, { "name": "func_00389DB0", "size": "120", @@ -1793,6 +1856,15 @@ "virtual_address": "3710624" } }, + { + "name": "func_00389F18", + "size": "80", + "fuzzy_match_percent": 100.0, + "address": "31408", + "metadata": { + "virtual_address": "3710744" + } + }, { "name": "func_00389F68", "size": "120", @@ -1802,6 +1874,33 @@ "virtual_address": "3710824" } }, + { + "name": "func_00389FE0", + "size": "120", + "fuzzy_match_percent": 100.0, + "address": "31608", + "metadata": { + "virtual_address": "3710944" + } + }, + { + "name": "func_0038A238", + "size": "384", + "fuzzy_match_percent": 100.0, + "address": "32208", + "metadata": { + "virtual_address": "3711544" + } + }, + { + "name": "func_0038A3B8", + "size": "352", + "fuzzy_match_percent": 100.0, + "address": "32592", + "metadata": { + "virtual_address": "3711928" + } + }, { "name": "func_0038A518", "size": "1068", @@ -1811,6 +1910,33 @@ "virtual_address": "3712280" } }, + { + "name": "func_0038ABC0", + "size": "384", + "fuzzy_match_percent": 100.0, + "address": "34648", + "metadata": { + "virtual_address": "3713984" + } + }, + { + "name": "func_0038AD40", + "size": "224", + "fuzzy_match_percent": 100.0, + "address": "35032", + "metadata": { + "virtual_address": "3714368" + } + }, + { + "name": "func_0038AE20", + "size": "268", + "fuzzy_match_percent": 100.0, + "address": "35256", + "metadata": { + "virtual_address": "3714592" + } + }, { "name": "func_0038B118", "size": "4", @@ -1829,6 +1955,24 @@ "virtual_address": "3716704" } }, + { + "name": "func_0038B670", + "size": "476", + "fuzzy_match_percent": 100.0, + "address": "37384", + "metadata": { + "virtual_address": "3716720" + } + }, + { + "name": "func_0038B850", + "size": "480", + "fuzzy_match_percent": 100.0, + "address": "37864", + "metadata": { + "virtual_address": "3717200" + } + }, { "name": "func_0038C3B0", "size": "316", @@ -4084,13 +4228,13 @@ { "name": "frontbin/39A6E0", "measures": { - "fuzzy_match_percent": 92.929721, - "total_code": "9448", - "matched_code": "8780", - "matched_code_percent": 92.929721, - "total_functions": 90, - "matched_functions": 85, - "matched_functions_percent": 94.444444, + "fuzzy_match_percent": 92.983193, + "total_code": "9520", + "matched_code": "8852", + "matched_code_percent": 92.983193, + "total_functions": 92, + "matched_functions": 87, + "matched_functions_percent": 94.565217, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -4196,6 +4340,15 @@ "virtual_address": "3780056" } }, + { + "name": "func_0039AEF0", + "size": "32", + "fuzzy_match_percent": 100.0, + "address": "2064", + "metadata": { + "virtual_address": "3780336" + } + }, { "name": "func_0039B038", "size": "76", @@ -4205,6 +4358,15 @@ "virtual_address": "3780664" } }, + { + "name": "func_0039B088", + "size": "40", + "fuzzy_match_percent": 100.0, + "address": "2472", + "metadata": { + "virtual_address": "3780744" + } + }, { "name": "func_0039B0B0", "size": "36", @@ -6433,13 +6595,13 @@ { "name": "frontbin/3AA9D8", "measures": { - "fuzzy_match_percent": 80.868839, + "fuzzy_match_percent": 82.873851, "total_code": "4788", - "matched_code": "3872", - "matched_code_percent": 80.868839, + "matched_code": "3968", + "matched_code_percent": 82.873851, "total_functions": 71, - "matched_functions": 66, - "matched_functions_percent": 92.957746, + "matched_functions": 67, + "matched_functions_percent": 94.366197, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -6935,7 +7097,7 @@ { "name": "func_003AB830", "size": "96", - "fuzzy_match_percent": 0.0, + "fuzzy_match_percent": 100.0, "address": "3672", "metadata": { "virtual_address": "3848240" @@ -30518,13 +30680,13 @@ "name": "boot_elf/text/3865D0", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "944", - "matched_code": "944", + "total_code": "720", + "matched_code": "720", "matched_code_percent": 100.0, - "total_functions": 2, - "matched_functions": 2, + "total_functions": 1, + "matched_functions": 1, "matched_functions_percent": 100.0, - "complete_code": "944", + "complete_code": "720", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -30538,15 +30700,6 @@ "metadata": { "virtual_address": "3696080" } - }, - { - "name": "func_003868A0", - "size": "224", - "fuzzy_match_percent": 100.0, - "address": "720", - "metadata": { - "virtual_address": "3696800" - } } ], "metadata": { @@ -30595,123 +30748,6 @@ ] } }, - { - "name": "boot_elf/text/386B10", - "measures": { - "fuzzy_match_percent": 100.0, - "total_code": "420", - "matched_code": "420", - "matched_code_percent": 100.0, - "total_functions": 2, - "matched_functions": 2, - "matched_functions_percent": 100.0, - "complete_code": "420", - "complete_code_percent": 100.0, - "total_units": 1, - "complete_units": 1 - }, - "functions": [ - { - "name": "func_003875F8", - "size": "80", - "fuzzy_match_percent": 100.0, - "address": "0", - "metadata": { - "virtual_address": "3700216" - } - }, - { - "name": "func_00387648", - "size": "340", - "fuzzy_match_percent": 100.0, - "address": "80", - "metadata": { - "virtual_address": "3700296" - } - } - ], - "metadata": { - "complete": true, - "source_path": "src/boot_elf/text/386B10.c", - "progress_categories": [ - "core", - "boot_elf", - "boot_elf_text" - ] - } - }, - { - "name": "boot_elf/text/388348", - "measures": { - "fuzzy_match_percent": 100.0, - "total_code": "460", - "matched_code": "460", - "matched_code_percent": 100.0, - "total_functions": 1, - "matched_functions": 1, - "matched_functions_percent": 100.0, - "complete_code": "460", - "complete_code_percent": 100.0, - "total_units": 1, - "complete_units": 1 - }, - "functions": [ - { - "name": "func_00388348", - "size": "460", - "fuzzy_match_percent": 100.0, - "address": "0", - "metadata": { - "virtual_address": "3703624" - } - } - ], - "metadata": { - "complete": true, - "source_path": "src/boot_elf/text/388348.c", - "progress_categories": [ - "core", - "boot_elf", - "boot_elf_text" - ] - } - }, - { - "name": "boot_elf/text/389620", - "measures": { - "fuzzy_match_percent": 100.0, - "total_code": "300", - "matched_code": "300", - "matched_code_percent": 100.0, - "total_functions": 1, - "matched_functions": 1, - "matched_functions_percent": 100.0, - "complete_code": "300", - "complete_code_percent": 100.0, - "total_units": 1, - "complete_units": 1 - }, - "functions": [ - { - "name": "func_00389620", - "size": "300", - "fuzzy_match_percent": 100.0, - "address": "0", - "metadata": { - "virtual_address": "3708448" - } - } - ], - "metadata": { - "complete": true, - "source_path": "src/boot_elf/text/389620.c", - "progress_categories": [ - "core", - "boot_elf", - "boot_elf_text" - ] - } - }, { "name": "boot_elf/text/389750", "measures": { @@ -30752,13 +30788,13 @@ "name": "boot_elf/text/389978", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "5376", - "matched_code": "5376", + "total_code": "3300", + "matched_code": "3300", "matched_code_percent": 100.0, - "total_functions": 14, - "matched_functions": 14, + "total_functions": 5, + "matched_functions": 5, "matched_functions_percent": 100.0, - "complete_code": "5376", + "complete_code": "3300", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -30782,42 +30818,6 @@ "virtual_address": "3710704" } }, - { - "name": "func_0038A028", - "size": "184", - "fuzzy_match_percent": 100.0, - "address": "1712", - "metadata": { - "virtual_address": "3711016" - } - }, - { - "name": "func_0038A140", - "size": "80", - "fuzzy_match_percent": 100.0, - "address": "1992", - "metadata": { - "virtual_address": "3711296" - } - }, - { - "name": "func_0038A2F8", - "size": "80", - "fuzzy_match_percent": 100.0, - "address": "2432", - "metadata": { - "virtual_address": "3711736" - } - }, - { - "name": "func_0038A3C0", - "size": "120", - "fuzzy_match_percent": 100.0, - "address": "2632", - "metadata": { - "virtual_address": "3711936" - } - }, { "name": "func_0038A438", "size": "480", @@ -30827,24 +30827,6 @@ "virtual_address": "3712056" } }, - { - "name": "func_0038A618", - "size": "384", - "fuzzy_match_percent": 100.0, - "address": "3232", - "metadata": { - "virtual_address": "3712536" - } - }, - { - "name": "func_0038A798", - "size": "352", - "fuzzy_match_percent": 100.0, - "address": "3616", - "metadata": { - "virtual_address": "3712920" - } - }, { "name": "func_0038AD28", "size": "628", @@ -30854,33 +30836,6 @@ "virtual_address": "3714344" } }, - { - "name": "func_0038AFA0", - "size": "384", - "fuzzy_match_percent": 100.0, - "address": "5672", - "metadata": { - "virtual_address": "3714976" - } - }, - { - "name": "func_0038B120", - "size": "224", - "fuzzy_match_percent": 100.0, - "address": "6056", - "metadata": { - "virtual_address": "3715360" - } - }, - { - "name": "func_0038B200", - "size": "268", - "fuzzy_match_percent": 100.0, - "address": "6280", - "metadata": { - "virtual_address": "3715584" - } - }, { "name": "func_0038B310", "size": "484", @@ -30950,41 +30905,23 @@ "name": "boot_elf/text/38BA50", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "3224", - "matched_code": "3224", + "total_code": "2268", + "matched_code": "2268", "matched_code_percent": 100.0, - "total_functions": 6, - "matched_functions": 6, + "total_functions": 4, + "matched_functions": 4, "matched_functions_percent": 100.0, - "complete_code": "3224", + "complete_code": "2268", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 }, "functions": [ - { - "name": "func_0038BA50", - "size": "476", - "fuzzy_match_percent": 100.0, - "address": "0", - "metadata": { - "virtual_address": "3717712" - } - }, - { - "name": "func_0038BC30", - "size": "480", - "fuzzy_match_percent": 100.0, - "address": "480", - "metadata": { - "virtual_address": "3718192" - } - }, { "name": "func_0038BE10", "size": "676", "fuzzy_match_percent": 100.0, - "address": "960", + "address": "0", "metadata": { "virtual_address": "3718672" } @@ -30993,7 +30930,7 @@ "name": "func_0038C0B8", "size": "1120", "fuzzy_match_percent": 100.0, - "address": "1640", + "address": "680", "metadata": { "virtual_address": "3719352" } @@ -31002,7 +30939,7 @@ "name": "func_0038C518", "size": "272", "fuzzy_match_percent": 100.0, - "address": "2760", + "address": "1800", "metadata": { "virtual_address": "3720472" } @@ -31011,7 +30948,7 @@ "name": "func_0038C628", "size": "200", "fuzzy_match_percent": 100.0, - "address": "3032", + "address": "2072", "metadata": { "virtual_address": "3720744" } @@ -31868,13 +31805,13 @@ "name": "boot_elf/text/39B1C0", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "1112", - "matched_code": "1112", + "total_code": "1040", + "matched_code": "1040", "matched_code_percent": 100.0, - "total_functions": 9, - "matched_functions": 9, + "total_functions": 7, + "matched_functions": 7, "matched_functions_percent": 100.0, - "complete_code": "1112", + "complete_code": "1040", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -31889,15 +31826,6 @@ "virtual_address": "3781056" } }, - { - "name": "func_0039B2D0", - "size": "32", - "fuzzy_match_percent": 100.0, - "address": "272", - "metadata": { - "virtual_address": "3781328" - } - }, { "name": "func_0039B2F0", "size": "292", @@ -31907,15 +31835,6 @@ "virtual_address": "3781360" } }, - { - "name": "func_0039B468", - "size": "40", - "fuzzy_match_percent": 100.0, - "address": "680", - "metadata": { - "virtual_address": "3781736" - } - }, { "name": "func_0039B4E0", "size": "100", diff --git a/progress/us/report.json b/progress/us/report.json index 4a2df8c1..4268453d 100644 --- a/progress/us/report.json +++ b/progress/us/report.json @@ -1,49 +1,49 @@ { "version": 2, "measures": { - "fuzzy_match_percent": 9.022748, + "fuzzy_match_percent": 9.027435, "total_code": "7508980", - "matched_code": "644980", - "matched_code_percent": 8.589449, + "matched_code": "645528", + "matched_code_percent": 8.596747, "total_functions": 16222, - "matched_functions": 5693, - "matched_functions_percent": 35.094316, - "complete_code": "224176", - "complete_code_percent": 2.985439, - "total_units": 403, - "complete_units": 307 + "matched_functions": 5695, + "matched_functions_percent": 35.106645, + "complete_code": "219668", + "complete_code_percent": 2.925404, + "total_units": 400, + "complete_units": 304 }, "categories": [ { "id": "core", "name": "Core programs", "measures": { - "fuzzy_match_percent": 62.791329, + "fuzzy_match_percent": 62.846407, "total_code": "639076", - "matched_code": "371280", - "matched_code_percent": 58.096377, + "matched_code": "371828", + "matched_code_percent": 58.182125, "total_functions": 2893, - "matched_functions": 2385, - "matched_functions_percent": 82.440373, - "complete_code": "224176", - "complete_code_percent": 35.078144, - "total_units": 365, - "complete_units": 307 + "matched_functions": 2387, + "matched_functions_percent": 82.509506, + "complete_code": "219668", + "complete_code_percent": 34.372751, + "total_units": 362, + "complete_units": 304 } }, { "id": "frontbin", "name": "frontbin (front end)", "measures": { - "fuzzy_match_percent": 57.405296, - "total_code": "381164", - "matched_code": "193100", - "matched_code_percent": 50.660608, - "total_functions": 1658, - "matched_functions": 1381, - "matched_functions_percent": 83.293124, + "fuzzy_match_percent": 57.994439, + "total_code": "385672", + "matched_code": "198156", + "matched_code_percent": 51.37941, + "total_functions": 1676, + "matched_functions": 1401, + "matched_functions_percent": 83.591885, "complete_code": "57412", - "complete_code_percent": 15.062283, + "complete_code_percent": 14.886225, "total_units": 68, "complete_units": 26 } @@ -52,15 +52,15 @@ "id": "frontbin_text", "name": "frontbin .text", "measures": { - "fuzzy_match_percent": 57.405296, - "total_code": "381164", - "matched_code": "193100", - "matched_code_percent": 50.660608, - "total_functions": 1658, - "matched_functions": 1381, - "matched_functions_percent": 83.293124, + "fuzzy_match_percent": 57.994439, + "total_code": "385672", + "matched_code": "198156", + "matched_code_percent": 51.37941, + "total_functions": 1676, + "matched_functions": 1401, + "matched_functions_percent": 83.591885, "complete_code": "57412", - "complete_code_percent": 15.062283, + "complete_code_percent": 14.886225, "total_units": 68, "complete_units": 26 } @@ -69,17 +69,17 @@ "id": "boot_elf", "name": "boot_elf (engine core + boot front end)", "measures": { - "fuzzy_match_percent": 68.607211, - "total_code": "237596", - "matched_code": "158840", - "matched_code_percent": 66.852977, - "total_functions": 1044, - "matched_functions": 819, - "matched_functions_percent": 78.448276, - "complete_code": "149820", - "complete_code_percent": 63.056617, - "total_units": 275, - "complete_units": 262 + "fuzzy_match_percent": 68.000064, + "total_code": "233088", + "matched_code": "154332", + "matched_code_percent": 66.211903, + "total_functions": 1026, + "matched_functions": 801, + "matched_functions_percent": 78.070175, + "complete_code": "145312", + "complete_code_percent": 62.34212, + "total_units": 272, + "complete_units": 259 } }, { @@ -103,17 +103,17 @@ "id": "boot_elf_text", "name": "boot_elf .text", "measures": { - "fuzzy_match_percent": 92.130004, - "total_code": "82084", - "matched_code": "74864", - "matched_code_percent": 91.204132, - "total_functions": 224, - "matched_functions": 215, - "matched_functions_percent": 95.982143, - "complete_code": "70880", - "complete_code_percent": 86.350568, - "total_units": 106, - "complete_units": 100 + "fuzzy_match_percent": 91.672672, + "total_code": "77576", + "matched_code": "70356", + "matched_code_percent": 90.692998, + "total_functions": 206, + "matched_functions": 197, + "matched_functions_percent": 95.631068, + "complete_code": "66372", + "complete_code_percent": 85.557389, + "total_units": 103, + "complete_units": 97 } }, { @@ -835,7 +835,7 @@ { "name": "frontbin/381140", "measures": { - "fuzzy_match_percent": 18.1911, + "fuzzy_match_percent": 17.985601, "total_code": "3892", "matched_code": "624", "matched_code_percent": 16.032888, @@ -1112,7 +1112,7 @@ { "name": "func_0037DF98", "size": "60", - "fuzzy_match_percent": 100.0, + "fuzzy_match_percent": 86.67, "address": "3736", "metadata": { "virtual_address": "3661720" @@ -1177,13 +1177,13 @@ { "name": "frontbin/382380", "measures": { - "fuzzy_match_percent": 34.556081, - "total_code": "19748", - "matched_code": "5192", - "matched_code_percent": 26.29127, - "total_functions": 64, - "matched_functions": 46, - "matched_functions_percent": 71.875, + "fuzzy_match_percent": 47.668399, + "total_code": "24184", + "matched_code": "10080", + "matched_code_percent": 41.68045, + "total_functions": 80, + "matched_functions": 63, + "matched_functions_percent": 78.75, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -1499,7 +1499,7 @@ { "name": "func_00381A50", "size": "452", - "fuzzy_match_percent": 40.71, + "fuzzy_match_percent": 100.0, "address": "14456", "metadata": { "virtual_address": "3676752" @@ -1541,6 +1541,15 @@ "virtual_address": "3677968" } }, + { + "name": "func_003821E8", + "size": "224", + "fuzzy_match_percent": 100.0, + "address": "16400", + "metadata": { + "virtual_address": "3678696" + } + }, { "name": "func_003823A0", "size": "184", @@ -1559,6 +1568,24 @@ "virtual_address": "3679320" } }, + { + "name": "func_00382F40", + "size": "80", + "fuzzy_match_percent": 100.0, + "address": "19816", + "metadata": { + "virtual_address": "3682112" + } + }, + { + "name": "func_00382F90", + "size": "340", + "fuzzy_match_percent": 100.0, + "address": "19896", + "metadata": { + "virtual_address": "3682192" + } + }, { "name": "func_00383840", "size": "4", @@ -1577,6 +1604,15 @@ "virtual_address": "3684424" } }, + { + "name": "func_003838C0", + "size": "460", + "fuzzy_match_percent": 100.0, + "address": "22248", + "metadata": { + "virtual_address": "3684544" + } + }, { "name": "func_00383A90", "size": "120", @@ -1640,6 +1676,15 @@ "virtual_address": "3689288" } }, + { + "name": "func_00384B68", + "size": "300", + "fuzzy_match_percent": 100.0, + "address": "27024", + "metadata": { + "virtual_address": "3689320" + } + }, { "name": "func_00384EB0", "size": "12", @@ -1649,6 +1694,15 @@ "virtual_address": "3690160" } }, + { + "name": "func_00385570", + "size": "184", + "fuzzy_match_percent": 100.0, + "address": "29592", + "metadata": { + "virtual_address": "3691888" + } + }, { "name": "func_00385628", "size": "92", @@ -1658,6 +1712,15 @@ "virtual_address": "3692072" } }, + { + "name": "func_00385688", + "size": "80", + "fuzzy_match_percent": 100.0, + "address": "29872", + "metadata": { + "virtual_address": "3692168" + } + }, { "name": "func_003856D8", "size": "120", @@ -1685,6 +1748,15 @@ "virtual_address": "3692488" } }, + { + "name": "func_00385840", + "size": "80", + "fuzzy_match_percent": 100.0, + "address": "30312", + "metadata": { + "virtual_address": "3692608" + } + }, { "name": "func_00385890", "size": "120", @@ -1694,6 +1766,33 @@ "virtual_address": "3692688" } }, + { + "name": "func_00385908", + "size": "120", + "fuzzy_match_percent": 100.0, + "address": "30512", + "metadata": { + "virtual_address": "3692808" + } + }, + { + "name": "func_00385B60", + "size": "384", + "fuzzy_match_percent": 100.0, + "address": "31112", + "metadata": { + "virtual_address": "3693408" + } + }, + { + "name": "func_00385CE0", + "size": "352", + "fuzzy_match_percent": 100.0, + "address": "31496", + "metadata": { + "virtual_address": "3693792" + } + }, { "name": "func_00385E40", "size": "972", @@ -1703,6 +1802,33 @@ "virtual_address": "3694144" } }, + { + "name": "func_00386488", + "size": "384", + "fuzzy_match_percent": 100.0, + "address": "33456", + "metadata": { + "virtual_address": "3695752" + } + }, + { + "name": "func_00386608", + "size": "224", + "fuzzy_match_percent": 100.0, + "address": "33840", + "metadata": { + "virtual_address": "3696136" + } + }, + { + "name": "func_003866E8", + "size": "268", + "fuzzy_match_percent": 100.0, + "address": "34064", + "metadata": { + "virtual_address": "3696360" + } + }, { "name": "func_003869E0", "size": "4", @@ -1721,6 +1847,24 @@ "virtual_address": "3698472" } }, + { + "name": "func_00386F38", + "size": "476", + "fuzzy_match_percent": 100.0, + "address": "36192", + "metadata": { + "virtual_address": "3698488" + } + }, + { + "name": "func_00387118", + "size": "480", + "fuzzy_match_percent": 100.0, + "address": "36672", + "metadata": { + "virtual_address": "3698968" + } + }, { "name": "func_00387C78", "size": "316", @@ -3769,13 +3913,13 @@ { "name": "frontbin/39A6E0", "measures": { - "fuzzy_match_percent": 95.238034, - "total_code": "9072", - "matched_code": "8372", - "matched_code_percent": 92.283951, - "total_functions": 89, - "matched_functions": 83, - "matched_functions_percent": 93.258427, + "fuzzy_match_percent": 95.275529, + "total_code": "9144", + "matched_code": "8444", + "matched_code_percent": 92.344707, + "total_functions": 91, + "matched_functions": 85, + "matched_functions_percent": 93.406593, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -3863,6 +4007,15 @@ "virtual_address": "3759800" } }, + { + "name": "func_00396100", + "size": "32", + "fuzzy_match_percent": 100.0, + "address": "2064", + "metadata": { + "virtual_address": "3760384" + } + }, { "name": "func_00396248", "size": "76", @@ -3872,6 +4025,15 @@ "virtual_address": "3760712" } }, + { + "name": "func_00396298", + "size": "40", + "fuzzy_match_percent": 100.0, + "address": "2472", + "metadata": { + "virtual_address": "3760792" + } + }, { "name": "func_003962C0", "size": "36", @@ -6019,13 +6181,13 @@ { "name": "frontbin/3AA9D8", "measures": { - "fuzzy_match_percent": 92.875123, + "fuzzy_match_percent": 94.825861, "total_code": "4716", - "matched_code": "3872", - "matched_code_percent": 82.103478, + "matched_code": "3968", + "matched_code_percent": 84.139101, "total_functions": 70, - "matched_functions": 66, - "matched_functions_percent": 94.285714, + "matched_functions": 67, + "matched_functions_percent": 95.714286, "complete_code": "0", "complete_code_percent": 0.0, "total_units": 1, @@ -6512,7 +6674,7 @@ { "name": "func_003A6288", "size": "96", - "fuzzy_match_percent": 4.17, + "fuzzy_match_percent": 100.0, "address": "3600", "metadata": { "virtual_address": "3826312" @@ -29798,13 +29960,13 @@ "name": "boot_elf/text/3865D0", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "944", - "matched_code": "944", + "total_code": "720", + "matched_code": "720", "matched_code_percent": 100.0, - "total_functions": 2, - "matched_functions": 2, + "total_functions": 1, + "matched_functions": 1, "matched_functions_percent": 100.0, - "complete_code": "944", + "complete_code": "720", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -29818,15 +29980,6 @@ "metadata": { "virtual_address": "3696040" } - }, - { - "name": "func_00386878", - "size": "224", - "fuzzy_match_percent": 100.0, - "address": "720", - "metadata": { - "virtual_address": "3696760" - } } ], "metadata": { @@ -29875,123 +30028,6 @@ ] } }, - { - "name": "boot_elf/text/386B10", - "measures": { - "fuzzy_match_percent": 100.0, - "total_code": "420", - "matched_code": "420", - "matched_code_percent": 100.0, - "total_functions": 2, - "matched_functions": 2, - "matched_functions_percent": 100.0, - "complete_code": "420", - "complete_code_percent": 100.0, - "total_units": 1, - "complete_units": 1 - }, - "functions": [ - { - "name": "func_003875D0", - "size": "80", - "fuzzy_match_percent": 100.0, - "address": "0", - "metadata": { - "virtual_address": "3700176" - } - }, - { - "name": "func_00387620", - "size": "340", - "fuzzy_match_percent": 100.0, - "address": "80", - "metadata": { - "virtual_address": "3700256" - } - } - ], - "metadata": { - "complete": true, - "source_path": "src/boot_elf/text/386B10.c", - "progress_categories": [ - "core", - "boot_elf", - "boot_elf_text" - ] - } - }, - { - "name": "boot_elf/text/388348", - "measures": { - "fuzzy_match_percent": 100.0, - "total_code": "460", - "matched_code": "460", - "matched_code_percent": 100.0, - "total_functions": 1, - "matched_functions": 1, - "matched_functions_percent": 100.0, - "complete_code": "460", - "complete_code_percent": 100.0, - "total_units": 1, - "complete_units": 1 - }, - "functions": [ - { - "name": "func_00388320", - "size": "460", - "fuzzy_match_percent": 100.0, - "address": "0", - "metadata": { - "virtual_address": "3703584" - } - } - ], - "metadata": { - "complete": true, - "source_path": "src/boot_elf/text/388348.c", - "progress_categories": [ - "core", - "boot_elf", - "boot_elf_text" - ] - } - }, - { - "name": "boot_elf/text/389620", - "measures": { - "fuzzy_match_percent": 100.0, - "total_code": "300", - "matched_code": "300", - "matched_code_percent": 100.0, - "total_functions": 1, - "matched_functions": 1, - "matched_functions_percent": 100.0, - "complete_code": "300", - "complete_code_percent": 100.0, - "total_units": 1, - "complete_units": 1 - }, - "functions": [ - { - "name": "func_003895C8", - "size": "300", - "fuzzy_match_percent": 100.0, - "address": "0", - "metadata": { - "virtual_address": "3708360" - } - } - ], - "metadata": { - "complete": true, - "source_path": "src/boot_elf/text/389620.c", - "progress_categories": [ - "core", - "boot_elf", - "boot_elf_text" - ] - } - }, { "name": "boot_elf/text/389750", "measures": { @@ -30032,13 +30068,13 @@ "name": "boot_elf/text/389978", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "5376", - "matched_code": "5376", + "total_code": "3300", + "matched_code": "3300", "matched_code_percent": 100.0, - "total_functions": 14, - "matched_functions": 14, + "total_functions": 5, + "matched_functions": 5, "matched_functions_percent": 100.0, - "complete_code": "5376", + "complete_code": "3300", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -30062,42 +30098,6 @@ "virtual_address": "3710616" } }, - { - "name": "func_00389FD0", - "size": "184", - "fuzzy_match_percent": 100.0, - "address": "1712", - "metadata": { - "virtual_address": "3710928" - } - }, - { - "name": "func_0038A0E8", - "size": "80", - "fuzzy_match_percent": 100.0, - "address": "1992", - "metadata": { - "virtual_address": "3711208" - } - }, - { - "name": "func_0038A2A0", - "size": "80", - "fuzzy_match_percent": 100.0, - "address": "2432", - "metadata": { - "virtual_address": "3711648" - } - }, - { - "name": "func_0038A368", - "size": "120", - "fuzzy_match_percent": 100.0, - "address": "2632", - "metadata": { - "virtual_address": "3711848" - } - }, { "name": "func_0038A3E0", "size": "480", @@ -30107,24 +30107,6 @@ "virtual_address": "3711968" } }, - { - "name": "func_0038A5C0", - "size": "384", - "fuzzy_match_percent": 100.0, - "address": "3232", - "metadata": { - "virtual_address": "3712448" - } - }, - { - "name": "func_0038A740", - "size": "352", - "fuzzy_match_percent": 100.0, - "address": "3616", - "metadata": { - "virtual_address": "3712832" - } - }, { "name": "func_0038AC70", "size": "628", @@ -30134,33 +30116,6 @@ "virtual_address": "3714160" } }, - { - "name": "func_0038AEE8", - "size": "384", - "fuzzy_match_percent": 100.0, - "address": "5576", - "metadata": { - "virtual_address": "3714792" - } - }, - { - "name": "func_0038B068", - "size": "224", - "fuzzy_match_percent": 100.0, - "address": "5960", - "metadata": { - "virtual_address": "3715176" - } - }, - { - "name": "func_0038B148", - "size": "268", - "fuzzy_match_percent": 100.0, - "address": "6184", - "metadata": { - "virtual_address": "3715400" - } - }, { "name": "func_0038B258", "size": "484", @@ -30230,41 +30185,23 @@ "name": "boot_elf/text/38BA50", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "3224", - "matched_code": "3224", + "total_code": "2268", + "matched_code": "2268", "matched_code_percent": 100.0, - "total_functions": 6, - "matched_functions": 6, + "total_functions": 4, + "matched_functions": 4, "matched_functions_percent": 100.0, - "complete_code": "3224", + "complete_code": "2268", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 }, "functions": [ - { - "name": "func_0038B998", - "size": "476", - "fuzzy_match_percent": 100.0, - "address": "0", - "metadata": { - "virtual_address": "3717528" - } - }, - { - "name": "func_0038BB78", - "size": "480", - "fuzzy_match_percent": 100.0, - "address": "480", - "metadata": { - "virtual_address": "3718008" - } - }, { "name": "func_0038BD58", "size": "676", "fuzzy_match_percent": 100.0, - "address": "960", + "address": "0", "metadata": { "virtual_address": "3718488" } @@ -30273,7 +30210,7 @@ "name": "func_0038C000", "size": "1120", "fuzzy_match_percent": 100.0, - "address": "1640", + "address": "680", "metadata": { "virtual_address": "3719168" } @@ -30282,7 +30219,7 @@ "name": "func_0038C460", "size": "272", "fuzzy_match_percent": 100.0, - "address": "2760", + "address": "1800", "metadata": { "virtual_address": "3720288" } @@ -30291,7 +30228,7 @@ "name": "func_0038C570", "size": "200", "fuzzy_match_percent": 100.0, - "address": "3032", + "address": "2072", "metadata": { "virtual_address": "3720560" } @@ -31229,13 +31166,13 @@ "name": "boot_elf/text/39B1C0", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "1112", - "matched_code": "1112", + "total_code": "1040", + "matched_code": "1040", "matched_code_percent": 100.0, - "total_functions": 9, - "matched_functions": 9, + "total_functions": 7, + "matched_functions": 7, "matched_functions_percent": 100.0, - "complete_code": "1112", + "complete_code": "1040", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -31250,15 +31187,6 @@ "virtual_address": "3780776" } }, - { - "name": "func_0039B1B8", - "size": "32", - "fuzzy_match_percent": 100.0, - "address": "272", - "metadata": { - "virtual_address": "3781048" - } - }, { "name": "func_0039B1D8", "size": "292", @@ -31268,15 +31196,6 @@ "virtual_address": "3781080" } }, - { - "name": "func_0039B350", - "size": "40", - "fuzzy_match_percent": 100.0, - "address": "680", - "metadata": { - "virtual_address": "3781456" - } - }, { "name": "func_0039B3C8", "size": "100", diff --git a/src/frontbin/382380.c b/src/frontbin/382380.c index 420665f5..d1a0ca55 100644 --- a/src/frontbin/382380.c +++ b/src/frontbin/382380.c @@ -574,16 +574,73 @@ INCLUDE_ASM("asm/nonmatchings/text", func_003856B8); LINKER_REMNANT("asm/remnants", func_00385D20); -typedef struct { u8 p0[0x20]; u8 b20; } H_381A50; -typedef struct { u8 p0[0x10]; f32 f10; u8 p14[0xC]; H_381A50 *f20; u8 b24; u8 b25; u8 p26[0xA]; f32 f30, f34; u8 p38[8]; } E_381A50; -typedef struct { E_381A50 e[14]; s32 n; } T_381A50; +/* localdecomp:start func_00385D28 */ +typedef struct { + u8 p0[0x20]; + u8 b20; +} H_381A50; + +typedef struct { + u8 p0[0x10]; + f32 f10; + u8 p14[0xC]; + H_381A50 *f20; + u8 b24; + u8 b25; + u8 p26[0xA]; + f32 f30, f34; + u8 p38[8]; +} E_381A50; + +typedef struct { + E_381A50 e[14]; + s32 n; +} T_381A50; + extern T_381A50 D_00224BC0_00385D28; extern s32 D_001A71A4_00385D28[]; extern s32 D_001D5B98; -extern s32 D_001D4BC0_00385D28, D_001D4BC4_00385D28, D_001D4BD0_00385D28, D_001D4BD4_00385D28; +extern s32 D_001D4BC0_00385D28, D_001D4BC4_00385D28; +extern s32 D_001D4BD0_00385D28, D_001D4BD4_00385D28; extern void func_003856B8(void); extern void func_003860A8(f32 *, void *); -INCLUDE_ASM("asm/nonmatchings/text", func_00385D28); +extern void func_00385398(S_3810C0 *, f32, f32); + +void func_00385D28(s32 a) { + f32 v[2]; + s32 i; + E_381A50 *p; + + if (D_001A71A4_00385D28[0] == 0x74) { + D_00224BC0_00385D28.n = 0; + return; + } + + func_003856B8(); + if (D_00224BC0_00385D28.n == 0) return; + + for (i = 0; i < D_00224BC0_00385D28.n; i++) { + p = &D_00224BC0_00385D28.e[i]; + if (p->b25 != a || p->f20 == 0 || + p->f20->b20 == 0xFE || p->f20->b20 == 0xFD) + continue; + + if (p->b24 != 0) { + func_003860A8(v, p); + v[0] = (v[0] - (f32)D_001D4BD0_00385D28) * 0.0625f; + v[1] = (v[1] - (f32)D_001D4BD4_00385D28) * 0.0625f; + } else { + v[0] = (f32)D_001D4BC0_00385D28 * p->f30; + v[1] = (f32)D_001D4BC4_00385D28 * p->f34; + } + + if (D_001D5B98 != 0) p->f10 *= 0.75f; + func_00385398((S_3810C0 *)p, v[0], v[1]); + } + + if (D_001D5B98 == 0) D_00224BC0_00385D28.n = 0; +} +/* localdecomp:end func_00385D28 */ /* PAL candidate for func_00385EF0 (frontbin). * @@ -694,15 +751,62 @@ extern void func_0038CE90(); extern void func_0038CE50_003861F0(void *, void *, f32); INCLUDE_ASM("asm/nonmatchings/text", func_003861F0); -typedef struct { u8 pad[0x450]; s32 f450; } E_3821E8; +/* localdecomp:start func_003864C0 */ +typedef struct { + u8 pad[0x450]; + s32 f450; +} E_3821E8; + +typedef struct { + u8 p0[0x228]; + f32 f228; + f32 f22C; + u8 p230[8]; + f32 f238; + f32 f23C; + u8 p240[0x10]; + s32 f250; + s32 f254; + s32 f258; +} S_3821E8; + extern u8 D_00222480_003864C0[]; -typedef struct { u8 p0[0x228]; f32 f228; f32 f22C; u8 p230[8]; f32 f238; f32 f23C; u8 p240[0x10]; s32 f250; s32 f254; s32 f258; } S_3821E8; extern S_3821E8 D_00225900; -extern u8 D_001D99AC, D_001D99AD, D_001D99AE, D_001D9C44, D_001D9C45, D_001D9C46; -extern f32 D_001D99C4, D_001D99C8, D_001D99CC, D_001D99D0, D_001D9C48, D_001D9C4C, D_001D9C50, D_001D9C54; +extern u8 D_001D99AC, D_001D99AD, D_001D99AE; +extern u8 D_001D9C44, D_001D9C45, D_001D9C46; +extern f32 D_001D99C4, D_001D99C8, D_001D99CC, D_001D99D0; +extern f32 D_001D9C48, D_001D9C4C, D_001D9C50, D_001D9C54; extern s32 D_001DA5D0, D_001D9C58; extern void func_003873C0(); -INCLUDE_ASM("asm/nonmatchings/text", func_003864C0); + +void func_003864C0(s32 a) { + s32 c; + + if (((E_3821E8 *)(a * 0x460 + (s32)D_00222480_003864C0))->f450 != 0) { + D_00225900.f250 = D_001D99AC; + D_00225900.f254 = D_001D99AD; + D_00225900.f258 = D_001D99AE; + D_00225900.f228 = D_001D99C4; + D_00225900.f22C = D_001D99C8; + D_00225900.f238 = D_001D99CC; + D_00225900.f23C = D_001D99D0; + c = 0x40000; + } else { + D_00225900.f250 = D_001D9C44; + D_00225900.f254 = D_001D9C45; + D_00225900.f258 = D_001D9C46; + D_00225900.f228 = D_001D9C48; + D_00225900.f22C = D_001D9C4C; + D_00225900.f238 = D_001D9C50; + D_00225900.f23C = D_001D9C54; + c = 0x7D0000; + } + + D_001DA5D0 = c; + func_003873C0(); + D_001D9C58 = 0; +} +/* localdecomp:end func_003864C0 */ extern u8 *D_001D9D40[]; INCLUDE_ASM("asm/nonmatchings/text", func_003865A0); @@ -753,10 +857,33 @@ extern s32 func_00386730(); extern void func_0038CB78(); extern s32 D_001D9D54; extern s32 D_00227480[]; -INCLUDE_ASM("asm/nonmatchings/text", func_00387218); +/* localdecomp:start func_00387218 */ +__asm__(".extern D_001D9D54, 16"); +extern s32 D_001D9D54; +extern s32 D_00227480[]; + +extern void func_0038CB78(void *, s32, s32); +extern s32 func_00386730(void); + +void func_00387218(void) +{ + if (D_001D9D54 == 0) { + func_0038CB78(D_00227480, -1, 0x80); + } else if (D_001D9D54 == 2) { + func_00386730(); + } +} +/* localdecomp:end func_00387218 */ + + +/* localdecomp:start func_00387268 */ +typedef struct { + u8 p0[0x150]; + u16 f150, f152; +} C_00382F90; -typedef struct { u8 p0[0x150]; u16 f150, f152; } C_00382F90; extern C_00382F90 D_001CFEC0_00387268; + typedef struct { u8 p0[0xA0]; f32 fA0; f32 fA4; u8 pA8[8]; f32 fB0; u8 pB4[0x1A0 - 0xB4]; f32 f1A0; f32 f1A4; @@ -764,10 +891,42 @@ typedef struct { u8 p220[8]; f32 f228; f32 f22C; u8 p230[8]; f32 f238; f32 f23C; s32 f240; s32 f244; s32 f248; s32 f24C; u8 p250[0x18]; s32 f268; } S_00382F90; + extern S_00382F90 D_00225900_00387268; -extern s32 D_001D4BC0_00387268, D_001D4BC4_00387268, D_001D4BC8_00387268, D_001D4BCC_00387268; -extern s32 D_001D4BD0_00387268, D_001D4BD4_00387268, D_001D4BD8_00387268, D_001D4BDC_00387268; -INCLUDE_ASM("asm/nonmatchings/text", func_00387268); +extern s32 D_001D4BC0_00387268, D_001D4BC4_00387268; +extern s32 D_001D4BC8_00387268, D_001D4BCC_00387268; +extern s32 D_001D4BD0_00387268, D_001D4BD4_00387268; +extern s32 D_001D4BD8_00387268, D_001D4BDC_00387268; + +void func_00387268(void) { + D_001D4BC0_00387268 = (s16)D_001CFEC0_00387268.f150; + D_001D4BC4_00387268 = (s16)D_001CFEC0_00387268.f152; + D_001D4BC8_00387268 = D_001D4BC0_00387268 >> 1; + D_001D4BCC_00387268 = D_001D4BC4_00387268 >> 1; + D_001D4BD0_00387268 = (0x800 - D_001D4BC8_00387268) << 4; + D_001D4BD4_00387268 = (0x800 - D_001D4BCC_00387268) << 4; + D_001D4BD8_00387268 = (D_001D4BC8_00387268 + 0x800) << 4; + D_001D4BDC_00387268 = (D_001D4BCC_00387268 + 0x800) << 4; + D_00225900_00387268.fA0 = 32.0f; + D_00225900_00387268.fA4 = 1048576.0f; + D_00225900_00387268.fB0 = 0.62f; + D_00225900_00387268.f210 = (f32)D_001D4BC0_00387268 * 0.5f; + D_00225900_00387268.f214 = (f32)D_001D4BC4_00387268 * 0.5f; + D_00225900_00387268.f1A0 = 2048.0f; + D_00225900_00387268.f1A4 = 2048.0f; + D_00225900_00387268.f218 = D_00225900_00387268.f210 * 4.0f; + D_00225900_00387268.f21C = D_00225900_00387268.f214 * 4.0f; + D_00225900_00387268.f22C = 524288.0f; + D_00225900_00387268.f238 = 255.0f; + D_00225900_00387268.f244 = D_001D4BC0_00387268 - 1; + D_00225900_00387268.f24C = D_001D4BC4_00387268 - 1; + D_00225900_00387268.f228 = 0.0f; + D_00225900_00387268.f23C = 0.0f; + D_00225900_00387268.f240 = 0; + D_00225900_00387268.f248 = 0; + D_00225900_00387268.f268 = 0; +} +/* localdecomp:end func_00387268 */ INCLUDE_ASM("asm/nonmatchings/text", func_003873C0); @@ -827,7 +986,9 @@ void func_00387EF0(void) { } /* localdecomp:end func_00387EF0 */ +/* localdecomp:start func_00387F68 */ extern u32 *D_001DA050_00387F68; +__asm__(".extern D_001DA050_g, 4"); extern u32 *D_001DA050_g; extern u8 D_001421B0[]; extern u8 D_00142120[]; @@ -836,7 +997,31 @@ typedef struct { u8 p0[0x240]; s32 f240, f244, f248, f24C, f250, f254, f258; } S extern S_225980_3838C0 D_00225900_00387F68; extern void func_0038CC88(); extern void func_003A9440(s32, unsigned long); -INCLUDE_ASM("asm/nonmatchings/text", func_00387F68); +void func_00387F68(void) { + D_001DA050_00387F68[0] = 0x30000013; + D_001DA050_00387F68[1] = (u32)D_001421B0; + D_001DA050_00387F68[2] = 0; + D_001DA050_00387F68[3] = 0x50000013; + D_001DA050_00387F68 += 4; + D_001DA050_00387F68[0] = 0x30000009; + D_001DA050_00387F68[1] = (u32)D_00142120; + D_001DA050_00387F68[2] = 0; + D_001DA050_00387F68[3] = 0x50000009; + D_001DA050_00387F68 += 4; + D_001DA050_00387F68[0] = 0x10000003; + D_001DA050_00387F68[1] = 0; + D_001DA050_00387F68[2] = 0; + D_001DA050_00387F68[3] = 0x50000003; + D_001D5330_00387F68[2] = (long)D_00225900_00387F68.f240 | ((long)D_00225900_00387F68.f244 << 16) | ((long)D_00225900_00387F68.f248 << 32) | ((long)D_00225900_00387F68.f24C << 48); + D_001DA050_00387F68 += 4; + D_001D5330_00387F68[4] = (long)D_00225900_00387F68.f240 | ((long)D_00225900_00387F68.f244 << 16) | ((long)D_00225900_00387F68.f248 << 32) | ((long)D_00225900_00387F68.f24C << 48); + func_0038CC88(D_001DA050_00387F68, D_001D5330_00387F68, 0x30); + D_001DA050_g = (u32 *)((u8 *)D_001DA050_00387F68 + 0x30); + func_003A9440(0x3D, (long)D_00225900_00387F68.f250 | ((long)D_00225900_00387F68.f254 << 8) | ((long)D_00225900_00387F68.f258 << 16)); + func_003A9440(0x51, 0); +} +/* localdecomp:end func_00387F68 */ + /* localdecomp:start func_00388138 */ extern unsigned long D_001CFEC8[]; @@ -1009,7 +1194,74 @@ extern unsigned long D_001D58E0, D_001D58E8; extern s32 D_001D58F0; extern s32 D_001A1ED0_00389240[]; extern void func_0038E138(void); -INCLUDE_ASM("asm/nonmatchings/text", func_00389240); +/* localdecomp:start func_00389240 */ +extern s32 D_001D9BF4_00389240; +extern s32 D_001DA050_00389240; +extern s32 D_001D9C00; +extern long D_00226000_00389240[]; +extern s32 D_001D9EA0_00389240; +extern s32 D_001D9EAC_00389240; +extern volatile s32 D_001D9EB0_00389240; +extern s32 D_001D9BFC; +extern s32 D_001D4BB4_00389240; +extern s32 D_001D4BB0_00389240; +extern unsigned long D_001D58E0, D_001D58E8; +extern s32 D_001D58F0; +extern s32 D_001A1ED0_00389240[]; + +__asm__(".extern D_001D9BFC, 4"); +__asm__(".extern D_001D58E0, 8"); +__asm__(".extern D_001D58E8, 8"); +__asm__(".extern D_001D58F0, 4"); + +extern void func_0038E138(void); + +void func_00389240(s32 a) { + s32 n; + s32 t; + s32 u; + s32 i; + s32 c; + s32 j; + long *p; + + t = D_001DA050_00389240; + D_001D9BF4_00389240 = t; + t += 0x10; + D_001DA050_00389240 = t; + u = D_001D4BB4_00389240; + n = D_001D9C00; + D_001D4BB0_00389240 = u; + D_001D9BFC = 0; + + if (n > 0) { + p = D_00226000_00389240; + for (c = n; c != 0; c--) { + *p = 0; + p += 2; + } + } + + D_001D58E0 = 0; + D_001D58E8 = 0; + D_001D58F0 = 0; + + if (a == 0) { + for (i = 0; i < *(s32 *)(D_001D9EA0_00389240 + 0x44); i++) { + u16 *h = (u16 *)((i << 3) + D_001D9EAC_00389240 + 4); + if (*h >= (D_001A1ED0_00389240[1] >> 8)) { + *h = 0; + } + } + + for (j = 0; j < *(s32 *)(D_001D9EA0_00389240 + 0x24); j++) { + *(u16 *)(D_001D9EB0_00389240 + j * 8 + 4) = 0; + } + } + + func_0038E138(); +} +/* localdecomp:end func_00389240 */ extern u32 *D_001DA050_00389370; extern u32 *D_001D9BF4_00389370; @@ -1062,7 +1314,34 @@ extern u8 D_003354A0[]; extern u8 D_00335510[]; extern void func_0038CC88(); extern void func_003A9618(); -INCLUDE_ASM("asm/nonmatchings/text", func_00389C48); +/* localdecomp:start func_00389C48 */ +extern s32 D_001D4BB0; +extern s32 D_001DA050; +extern u8 D_003354A0[]; +extern u8 D_00335510[]; +extern void func_0038CC88(); +extern void func_003A9618(); + +s32 func_00389C48(s32 a, s32 b) { + u8 *p; + s32 h = D_001D4BB0 >> 8; + + if (b == 0x14) { + func_0038CC88(D_001DA050, D_003354A0, 0x70); + D_001D4BB0 = D_001D4BB0 + 0x100; + } else { + func_0038CC88(D_001DA050, D_00335510, 0x70); + D_001D4BB0 = D_001D4BB0 + 0x400; + } + + p = (u8 *)D_001DA050; + *(s32 *)(p + 0x64) = a; + *(s16 *)(p + 0x24) = h; + D_001DA050 = D_001DA050 + 0x70; + func_003A9618(); + return h; +} +/* localdecomp:end func_00389C48 */ /* localdecomp:start func_00389D00 */ unsigned long func_00389D00(s32 a, s32 b, s32 c, s32 d, s32 e) { @@ -1079,7 +1358,23 @@ unsigned long func_00389D00(s32 a, s32 b, s32 c, s32 d, s32 e) { extern s32 D_001D9C08_00389D60; extern s32 D_00226800_00389D60[]; extern s32 D_00226900[]; -INCLUDE_ASM("asm/nonmatchings/text", func_00389D60); +/* localdecomp:start func_00389D60 */ +__asm__(".extern D_001D9C08_00389D60, 16"); +extern s32 D_001D9C08_00389D60; +extern void (*D_00226800[])(s32); +extern s32 D_00226900[]; + +void func_00389D60(void (*callback)(s32), s32 argument) +{ + s32 index = D_001D9C08_00389D60; + + if (index < 0x40) { + D_00226800[index] = callback; + D_00226900[index] = argument; + D_001D9C08_00389D60 = index + 1; + } +} +/* localdecomp:end func_00389D60 */ extern s32 D_001D9C08_00389DB0; extern void (*D_00226800[])(s32); @@ -1132,7 +1427,23 @@ void func_00389EA0(void) { extern s32 D_001D9C0C_00389F18; extern s32 D_00226B00[]; extern s32 D_00226A00_00389F18[]; -INCLUDE_ASM("asm/nonmatchings/text", func_00389F18); +/* localdecomp:start func_00389F18 */ +__asm__(".extern D_001D9C0C_00389F18, 16"); +extern s32 D_001D9C0C_00389F18; +extern void (*D_00226A00[])(s32); +extern s32 D_00226B00[]; + +void func_00389F18(void (*callback)(s32), s32 argument) +{ + s32 index = D_001D9C0C_00389F18; + + if (index < 0x40) { + D_00226A00[index] = callback; + D_00226B00[index] = argument; + D_001D9C0C_00389F18 = index + 1; + } +} +/* localdecomp:end func_00389F18 */ /* PAL candidate for func_00389F68 (frontbin). Retail reaches the counter global D_001D9C0C through lui/lw, not through $gp. @@ -1155,7 +1466,24 @@ void func_00389F68(void) { extern int D_001D9C38_00389FE0; extern void (*D_001D9C18[])(int); extern int D_001D9C28[]; -INCLUDE_ASM("asm/nonmatchings/text", func_00389FE0); +/* localdecomp:start func_00389FE0 */ +__asm__(".extern D_001D9C38_00389FE0, 16"); +extern s32 D_001D9C38_00389FE0; + +/* Aliases for the first entries of the two tables. */ +extern void (*D_001D9C18_00389FE0)(s32); +extern s32 D_001D9C28_00389FE0; + +void func_00389FE0(void) +{ + s32 index; + + for (index = 0; index < D_001D9C38_00389FE0; index++) { + (&D_001D9C18_00389FE0)[index]( + (&D_001D9C28_00389FE0)[index]); + } +} +/* localdecomp:end func_00389FE0 */ typedef struct { f32 x, y, z, w; } V_385980; typedef union { u128_t q; V_385980 v; } Q_385980; @@ -1182,7 +1510,64 @@ extern void func_003922B8(void); extern void func_00392350(s32); extern void func_003923D0(void); extern void func_003A9440(s32, unsigned long); -INCLUDE_ASM("asm/nonmatchings/text", func_0038A238); +/* localdecomp:start func_0038A238 */ +extern u32 *D_001DA050_0038A238; +__asm__(".extern D_001DA050_g, 4"); +extern u32 *D_001DA050_g; +__asm__(".extern D_001D9BC8_g, 4"); +extern s32 D_001D9BC8_g; +extern s32 D_001D9BC8_0038A238; +extern u8 D_00141990[]; +extern void func_003A92F0(s32); +extern s32 func_12C908(s32); +extern void func_003A9108(void); +extern void func_003A91D0(void); +extern void func_003A9150(); +extern void func_003922B8(void); +extern void func_00392350(s32); +extern void func_003923D0(void); +extern void func_003A9440(s32, unsigned long); + +void func_0038A238(s32 arg0) { + s32 i; + s32 t; + + func_003A92F0(1); + i = arg0 - 1; + func_12C908(0); + D_001D9BC8_g = D_001D9BC8_0038A238 + 1; + func_003A9108(); + + while (i >= 0) { + func_003922B8(); + func_00392350(1); + func_003923D0(); + func_003A9440(0x42, 0x8000000044UL); + t = (i << 7) / (i + 1); + i--; + func_003A9440(1, (long)(0x80 - t) << 24); + + D_001DA050_0038A238[0] = 0x30000014; + D_001DA050_0038A238[1] = (u32)D_00141990; + D_001DA050_0038A238[2] = 0; + D_001DA050_0038A238[3] = 0x50000014; + D_001DA050_g = D_001DA050_0038A238 + 4; + + func_003A92F0(1); + func_12C908(0); + D_001D9BC8_g = D_001D9BC8_0038A238 + 1; + func_003A91D0(); + func_003A9150(); + } + + func_003A92F0(1); + func_12C908(0); + D_001D9BC8_g = D_001D9BC8_0038A238 + 1; + func_003A9108(); + func_003922B8(); + func_00392350(1); +} +/* localdecomp:end func_0038A238 */ extern s32 D_001D4D40_0038A3B8; extern s32 D_00225734_0038A3B8[]; @@ -1193,7 +1578,46 @@ extern void func_0038DBD8(s32, s32, f32); extern void func_0038E150(s32); extern s32 func_00381FF0(s32); extern void func_0038E7E8_0038A3B8(f32, f32, f32, unsigned long, s32, s32, f32, s32, s32, unsigned long, f32, f32); -INCLUDE_ASM("asm/nonmatchings/text", func_0038A3B8); +/* localdecomp:start func_0038A3B8 */ +extern s32 D_001D4D40_0038A3B8; +extern s32 D_00225734_0038A3B8[]; +extern s32 D_001D55E8_0038A3B8; +extern s32 D_00143950[]; +extern f32 func_0038D098(f32); +extern void func_0038DBD8(s32, s32, f32); +extern void func_0038E150(s32); +extern s32 func_00381FF0(s32); +extern void func_0038E7E8_0038A3B8( + f32, f32, f32, unsigned long, s32, s32, + f32, s32, s32, unsigned long, f32, f32 +); + +void func_0038A3B8(void) { + f32 f, y; + s32 old, n; + + if (D_001D4D40_0038A3B8 == 1) { + n = ((u8 *)D_00143950)[0xAD] ? 0x30 : 0x5A; + f = (f32)(D_00225734_0038A3B8[0] % 100) / 50.0f - 1.0f; + if (f < -1.0f) f = -1.0f; + if (1.0f < f) f = 1.0f; + + y = n; + f = func_0038D098(f * 3.1415927f); + n = ((s32 (*)(s32, s32, f32))func_0038DBD8)( + 0x7FE0E0E0, 0x5F66CCFF, (f + 1.0f) * 0.5f + ); + + old = D_001D55E8_0038A3B8; + func_0038E150(0); + func_0038E7E8_0038A3B8( + 480.0f, y, 1.0f, n, func_00381FF0(0x244), -1, + 1.0f, 2, 1, 0x80000000, 1.0f, 1.0f + ); + func_0038E150(old); + } +} +/* localdecomp:end func_0038A3B8 */ INCLUDE_ASM("asm/nonmatchings/text", func_0038A518); @@ -1208,24 +1632,145 @@ extern u8 D_001D76A0[]; extern u8 D_001D76B0[]; INCLUDE_ASM("asm/nonmatchings/text", func_0038A948); -typedef struct { s32 f0; u32 f4; unsigned long f8; s32 f10; u32 f14; unsigned long f18; s32 f20; u32 f24; unsigned long f28; } P_00386488; +/* localdecomp:start func_0038ABC0 */ +typedef struct { + s32 f0; + u32 f4; + unsigned long f8; + s32 f10; + u32 f14; + unsigned long f18; + s32 f20; + u32 f24; + unsigned long f28; +} P_00386488; + +__asm__(".extern D_001D58B8_0038ABC0, 4"); extern P_00386488 *D_001D58B8_0038ABC0; extern void func_003A9440(s32, unsigned long); extern void func_0038AF30(s32, s32, s32, s32, unsigned long); -typedef struct { u8 p0[0x150]; s16 f150, f152; } C_00386488; + +typedef struct { + u8 p0[0x150]; + s16 f150, f152; +} C_00386488; + extern C_00386488 D_001CFEC0_0038ABC0; -INCLUDE_ASM("asm/nonmatchings/text", func_0038ABC0); + +void func_0038ABC0(void) { + s32 i = 0; + s32 h = D_001CFEC0_0038ABC0.f152; + s32 y; + + if (D_001D58B8_0038ABC0->f8) { + func_003A9440(0x42, D_001D58B8_0038ABC0->f8 & 0xFF000000FFUL); + } + if (D_001D58B8_0038ABC0->f4 & 0xFF000000) { + func_0038AF30( + 0, h, 0, D_001CFEC0_0038ABC0.f150, + D_001D58B8_0038ABC0->f4 + ); + } + + if (h > 0) { + do { + if (D_001D58B8_0038ABC0->f18) { + func_003A9440( + 0x42, D_001D58B8_0038ABC0->f18 & 0xFF000000FFUL + ); + } + if (D_001D58B8_0038ABC0->f14 & 0xFF000000) { + y = (i + D_001D58B8_0038ABC0->f10 >= h - 1) + ? h - 1 : i + D_001D58B8_0038ABC0->f10; + func_0038AF30( + i, y, 0, D_001CFEC0_0038ABC0.f150, + D_001D58B8_0038ABC0->f14 + ); + } + i += D_001D58B8_0038ABC0->f10; + + if (D_001D58B8_0038ABC0->f28) { + func_003A9440( + 0x42, D_001D58B8_0038ABC0->f28 & 0xFF000000FFUL + ); + } + if (D_001D58B8_0038ABC0->f24 & 0xFF000000) { + y = (i + D_001D58B8_0038ABC0->f20 >= h - 1) + ? h - 1 : i + D_001D58B8_0038ABC0->f20; + func_0038AF30( + i, y, 0, D_001CFEC0_0038ABC0.f150, + D_001D58B8_0038ABC0->f24 + ); + } + i += D_001D58B8_0038ABC0->f20; + } while (i < h); + } +} +/* localdecomp:end func_0038ABC0 */ extern void func_003A9440(s32, unsigned long); extern void func_0038AF30(s32, s32, s32, s32, unsigned long); extern s32 D_001A1ED0[]; extern s16 D_001CFEC0[]; -typedef struct { s32 f0; u32 f4; unsigned long f8; } S; -INCLUDE_ASM("asm/nonmatchings/text", func_0038AD40); +/* localdecomp:start func_0038AD40 */ +extern void func_003A9440(s32, unsigned long); +extern void func_0038AF30(s32, s32, s32, s32, unsigned long); +extern s32 D_001A1ED0[]; +extern s16 D_001CFEC0[]; + +typedef struct { + s32 f0; + u32 f4; + unsigned long f8; +} S; + +void func_0038AD40(S *a) { + if (a->f8) { + func_003A9440(0x42, a->f8 & 0xFF000000FFUL); + } + + if (a->f4 & 0xFF000000) { + func_003A9440( + 0x4E, + ((D_001A1ED0[2] >> 13) | 0x1000000) | 0x100000000UL + ); + func_0038AF30(0, D_001CFEC0[0xA9], 0, D_001CFEC0[0xA8], a->f4); + func_003A9440(0x4E, 0x1000000 | (D_001A1ED0[2] >> 13)); + } + + if (a->f8) { + func_003A9440(0x42, 0x8000000044UL); + } +} +/* localdecomp:end func_0038AD40 */ extern u32 *D_001DA050_0038AE20; extern u8 D_00141850[]; -INCLUDE_ASM("asm/nonmatchings/text", func_0038AE20); +/* localdecomp:start func_0038AE20 */ +extern void func_003A9440(s32, unsigned long); +extern s32 D_001A1ED0[]; +extern u32 *D_001DA050_0038AE20; +extern u8 D_00141850[]; + +void func_0038AE20(s32 a0, s32 a1, s32 a2, s32 a3) { + func_003A9440( + 0x4E, + ((D_001A1ED0[2] >> 13) | 0x31000000) | (0x8000UL << 17) + ); + func_003A9440( + 1, + (long)a0 | ((long)a1 << 8) | ((long)a2 << 16) | ((long)a3 << 24) + ); + + D_001DA050_0038AE20[0] = 0x30000014; + D_001DA050_0038AE20[1] = (u32)D_00141850; + D_001DA050_0038AE20[2] = 0; + D_001DA050_0038AE20[3] = 0x50000014; + D_001DA050_0038AE20 += 4; + + func_003A9440(0x4E, 0x31000000 | (D_001A1ED0[2] >> 13)); +} +/* localdecomp:end func_0038AE20 */ extern s32 D_001D4BD0_0038AF30; extern s32 D_001D4BD4_0038AF30; @@ -1253,11 +1798,103 @@ LINKER_REMNANT("asm/remnants", func_0038B660); extern s32 D_001D4BD0_0038B670, D_001D4BD4_0038B670; extern s32 D_001DA050; -INCLUDE_ASM("asm/nonmatchings/text", func_0038B670); +/* localdecomp:start func_0038B670 */ +extern s32 D_001D4BD0_0038B670, D_001D4BD4_0038B670; +extern s32 D_001DA050; + +s32 func_0038B670(s32 u, s32 v, s32 w, s32 h, + long t0, long t1, s32 flag, + f32 x, f32 y, f32 fw, f32 fh) { + s32 u1 = u + w; + s32 v1 = v + h; + s32 x0 = (s32)(x * 16.0f) + D_001D4BD0_0038B670 - 8; + s32 x1 = (s32)((x + fw) * 16.0f) + D_001D4BD0_0038B670 - 9; + s32 y0 = (s32)(y * 16.0f) + D_001D4BD4_0038B670 - 8; + s32 y1 = (s32)((y + fh) * 16.0f) + D_001D4BD4_0038B670 - 9; + s32 u4 = u << 4; + s32 uw4 = u1 << 4; + long *p; + + if (x0 > 0x9000 || x1 < 0x7000 || y0 > 0x9000 || y1 < 0x7000) + return 0; + + if (flag) { + x0 = (x0 & 0xFFF0) + 8; + x1 = (x1 & 0xFFF0) + 8; + y0 = (y0 & 0xFFF0) + 8; + y1 = (y1 & 0xFFF0) + 8; + } + + p = (long *)D_001DA050; + p[0] = t1; + p[1] = 0x154; + p[2] = 0xA | (long)u << 4 | (long)(u1 - 1) << 14 + | (long)v << 24 | (long)(v1 - 1) << 34; + p[3] = t0; + p[4] = (v << 20) + u4; + p[5] = (long)x0 | (long)y0 << 16; + p[6] = (v << 20) + uw4; + p[7] = (long)x1 | (long)y0 << 16; + p[8] = (v1 << 20) + u4; + p[9] = (long)x0 | (long)y1 << 16; + p[10] = (v1 << 20) + uw4; + p[11] = (long)x1 | (long)y1 << 16; + D_001DA050 += 0x60; + return 1; +} +/* localdecomp:end func_0038B670 */ extern s32 D_001D4BD0_0038B850, D_001D4BD4_0038B850; extern s32 D_001DA050; -INCLUDE_ASM("asm/nonmatchings/text", func_0038B850); +/* localdecomp:start func_0038B850 */ +extern s32 D_001D4BD0_0038B850, D_001D4BD4_0038B850; +extern s32 D_001DA050; + +s32 func_0038B850(s32 u, s32 v, s32 w, s32 h, + long *c, long t1, s32 flag, + f32 x, f32 y, f32 fw, f32 fh) { + s32 u1 = u + w; + s32 v1 = v + h; + s32 x0 = (s32)(x * 16.0f) + D_001D4BD0_0038B850 - 8; + s32 x1 = (s32)((x + fw) * 16.0f) + D_001D4BD0_0038B850 - 9; + s32 y0 = (s32)(y * 16.0f) + D_001D4BD4_0038B850 - 8; + s32 y1 = (s32)((y + fh) * 16.0f) + D_001D4BD4_0038B850 - 9; + s32 u4 = u << 4; + s32 uw4 = u1 << 4; + long *p; + + if (x0 > 0x9000 || x1 < 0x7000 || y0 > 0x9000 || y1 < 0x7000) + return 0; + + if (flag) { + x0 = (x0 & 0xFFF0) + 8; + x1 = (x1 & 0xFFF0) + 8; + y0 = (y0 & 0xFFF0) + 8; + y1 = (y1 & 0xFFF0) + 8; + } + + p = (long *)D_001DA050; + p[0] = t1; + p[1] = 0x154; + p[2] = 0xA | (long)u << 4 | (long)(u1 - 1) << 14 + | (long)v << 24 | (long)(v1 - 1) << 34; + p[3] = c[0]; + p[4] = (v << 20) + u4; + p[5] = (long)x0 | (long)y0 << 16; + p[6] = c[1]; + p[7] = (v << 20) + uw4; + p[8] = (long)x1 | (long)y0 << 16; + p[9] = c[2]; + p[10] = (v1 << 20) + u4; + p[11] = (long)x0 | (long)y1 << 16; + p[12] = c[3]; + p[13] = (v1 << 20) + uw4; + p[14] = (long)x1 | (long)y1 << 16; + p[15] = 0; + D_001DA050 += 0x80; + return 1; +} +/* localdecomp:end func_0038B850 */ extern s32 D_001D4BD0_0038BA30; extern s32 D_001D4BD4_0038BA30; diff --git a/src/frontbin/38CA08.c b/src/frontbin/38CA08.c index 53b212e7..66fe417f 100644 --- a/src/frontbin/38CA08.c +++ b/src/frontbin/38CA08.c @@ -9,6 +9,7 @@ extern void func_0038CD28(); extern void func_0038CB78(); extern void func_0038CBA0(); extern void func_0038CD50(); +extern void func_0038CB78(void *, s32, s32); extern void func_0038CC88(); extern void (*D_00226800[])(s32); extern void (*D_00226C00[])(s32); diff --git a/src/frontbin/39A6E0.c b/src/frontbin/39A6E0.c index b65a9a6d..76be0783 100644 --- a/src/frontbin/39A6E0.c +++ b/src/frontbin/39A6E0.c @@ -250,7 +250,17 @@ typedef struct { } S_142430x; extern S_142430x D_142430; extern s32 D_001D4CE8_g; -INCLUDE_ASM("asm/nonmatchings/text", func_0039AEF0); +/* localdecomp:start func_0039AEF0 */ +/* Adapted from the NTSC decomp draft (GPL-3.0; THIRD_PARTY_NOTICES.md). + * The fixed-address flag store must remain a full-address assembler macro. */ +void func_0039AEF0(void) +{ + S_142430x *p = &D_142430; + *(s32 *)0x001D4CE8 = 4; + p->f17C = 0; + p->f10 = 0; +} +/* localdecomp:end func_0039AEF0 */ typedef struct { u8 p0[8]; s32 f8; u8 pC[4]; s32 f10; u8 p14[0x168]; s32 f17C; } S_142430_00396120; extern S_142430_00396120 D_142430_0039AF10; @@ -290,7 +300,15 @@ void func_0039B038(void) { extern u8 D_001D4CEC_0039B088; extern s32 D_001D4CE8_0039B088; -INCLUDE_ASM("asm/nonmatchings/text", func_0039B088); +/* localdecomp:start func_0039B088 */ +/* Fixed addresses preserve the two independent assembler address macros. */ +void func_0039B088(void) +{ + if ((*(u8 *)0x001D4CEC ^ 1) & 1) { + *(s32 *)0x001D4CE8 = 4; + } +} +/* localdecomp:end func_0039B088 */ /* PAL candidate for func_0039B0B0 (frontbin), from the US draft of rac3-uya-decomp func_003962C0. diff --git a/src/frontbin/3AA9D8.c b/src/frontbin/3AA9D8.c index 39854d26..ec9901be 100644 --- a/src/frontbin/3AA9D8.c +++ b/src/frontbin/3AA9D8.c @@ -533,7 +533,23 @@ LINKER_REMNANT("asm/remnants", func_003AB828); extern void func_003ABF48(); extern s32 D_001D81E8_003AB168; -INCLUDE_ASM("asm/nonmatchings/text", func_003AB830); +/* localdecomp:start func_003AB830 */ +/* Adapted from the NTSC decomp draft (GPL-3.0; THIRD_PARTY_NOTICES.md). */ +extern void func_003AB168(); +extern void func_003ABF48(); +extern s32 D_001D81E8_003AB830[]; + +void func_003AB830(void *arg0, s32 arg1) { + s32 temp_a0; + + (*(s32 **)((u8 *)(arg0) + 0x24)) = D_001D81E8_003AB830; + temp_a0 = (*(s32 *)((u8 *)(arg0) + 0x20)); + if ((temp_a0 != 0) && ((*(u8 *)((u8 *)(arg0) + 0x2C)) == 0)) { + func_003ABF48(temp_a0, (*(s32 *)((u8 *)(arg0) + 0x28))); + } + func_003AB168(arg0, arg1); +} +/* localdecomp:end func_003AB830 */ /* localdecomp:start func_003AB890 */ typedef struct { f32 *p0; f32 *p4; u8 p8[4]; u32 *pC; f32 *p10; u8 p14[0x14]; f32 *p28; } S_62E8; diff --git a/src/frontbin/3BB0D8.c b/src/frontbin/3BB0D8.c index 03afca04..ce14c1c2 100644 --- a/src/frontbin/3BB0D8.c +++ b/src/frontbin/3BB0D8.c @@ -321,7 +321,7 @@ void func_003BC670(s32 a, unsigned long *out) { from a global, not gcc's split (an unsized array alias splits into two pseudos and the load lands in a different register than the lui). The global is declared sized (so gcc leaves the access to the assembler as - one `lui $at` / `%lo` macro, as for any small global), with an `.extern X, 16` hint before its first use (docs/wiki/Matching-Patterns.md). The hint tells the assembler the global is not small data, so it expands the macro with `lui`, + one `lui $at` / `%lo` macro, as for any small global), with an `.extern X, 16` hint before its first use (docs/wiki/Matching-Patterns.md). The hint tells the assembler the global is not small data, so it expands the macro with `lui`, as SN's single-pass Ps2EeAs did for a global whose size it had not seen yet. The value is read into a local so it is loaded once, like retail. See docs/wiki/Matching-Patterns.md, "Globals: gp vs lui". */ diff --git a/src/frontbin/3E58A8.c b/src/frontbin/3E58A8.c index 2660c71f..861fdd37 100644 --- a/src/frontbin/3E58A8.c +++ b/src/frontbin/3E58A8.c @@ -3,11 +3,11 @@ /* --- declarations from other files (tools/split_text.py --refresh) --- */ extern void (*D_001D9A40[2])(s32); extern void func_0038CB78(); +extern void func_0038CB78(void *, s32, s32); extern void (*D_00226800[])(s32); extern void (*D_00226C00[])(s32); extern void (*D_00226E00[])(s32); extern void (*D_00226A00[])(s32); -extern void func_0038CB78(void *, s32, s32); extern s32 *func_003E5918(s32 *); extern s32 func_003E58F8(); extern void func_003E6348(); diff --git a/src/us/frontbin/003B8EF8.c b/src/us/frontbin/003B8EF8.c index 107d6837..d7575a9d 100644 --- a/src/us/frontbin/003B8EF8.c +++ b/src/us/frontbin/003B8EF8.c @@ -16,4 +16,4 @@ s32 func_U_003B8EF8(void) { func_U_003B8A68(D_0016C5A2[0], 300, 15, 15); return complete; } -/* localdecomp:end func_U_003B8EF8 */ \ No newline at end of file +/* localdecomp:end func_U_003B8EF8 */ diff --git a/src/us/frontbin/003EB578.c b/src/us/frontbin/003EB578.c index 23e2f7aa..4760f99f 100644 --- a/src/us/frontbin/003EB578.c +++ b/src/us/frontbin/003EB578.c @@ -9,4 +9,4 @@ typedef struct { void func_U_003EB578(Object_003EB578 *object, f32 value) { *(f32 *)(object->data + 0x50) = value; } -/* localdecomp:end func_U_003EB578 */ \ No newline at end of file +/* localdecomp:end func_U_003EB578 */