mirror of
https://github.com/patchzyy/wiicompiled
synced 2026-10-21 13:54:55 -04:00
drop map report generation
This commit is contained in:
@@ -7,7 +7,6 @@ translator/tests/Translator.Tests/TestAssets/**/*.bin binary
|
||||
|
||||
# Region tables reproduced by tools/region/
|
||||
projects/mkwii-ntsc-*/MAP.txt linguist-generated=true
|
||||
projects/mkwii-ntsc-*/MAP_REPORT.md linguist-generated=true
|
||||
projects/mkwii-ntsc-*/region_port.json linguist-generated=true
|
||||
projects/mkwii-ntsc-j/data_addresses.txt linguist-generated=true
|
||||
runtime/include/guest_abi/guest_address_table.inc linguist-generated=true
|
||||
|
||||
Generated
+1
-1
@@ -1,5 +1,5 @@
|
||||
# NTSC-J (RMCJ01) function map, ported from ../mkwii/MAP.txt (PAL RMCP01) by tools/region/port_map.py.
|
||||
# Every entry was validated against the RMCJ01 main.dol/StaticR.rel; see MAP_REPORT.md next to this file.
|
||||
# Every entry was validated against the RMCJ01 main.dol/StaticR.rel.
|
||||
# Verdicts: PROVEN=12202, REFERENCED=12693, PLAUSIBLE=4513, IDENTITY=15, INTERPOLATED=0, ADDED=6 (binary-proven entries no PAL entry covers); entries=29429
|
||||
800018a8 0x800018a8
|
||||
80001d50 0x80001d50
|
||||
|
||||
@@ -1,672 +0,0 @@
|
||||
# NTSC-J (RMCJ01) function map port report
|
||||
|
||||
Generated by `tools/region/port_map.py`. Deterministic; no timestamps.
|
||||
|
||||
## Summary
|
||||
|
||||
- PAL map: `projects/mkwii/MAP.txt` (29792 entries, 20193 named)
|
||||
- NTSC-J DOL: `main.dol` sha256 `1b9621ef7c5d97dada103e50e5389730e67f3c2545dda592edd4b5843655af91` entry `0x800060A4`
|
||||
- NTSC-J REL: `StaticR.rel` sha256 `88539012d357a1420724e51dc7e351192ce696da4b0045994895518a3fad6fae` load `0x8050FC60` (module 1, v3, prolog `0x80554C9C`, epilog `0x80554CE8`, unresolved `0x80554D30`)
|
||||
- Chunk table: 52 PAL->NTSC-J chunks (mkw-sp port.py, MIT); no overlaps, all deltas word-aligned
|
||||
- Output map: `projects/mkwii-ntsc-j/MAP.txt` with **29423** entries (20022 named); `projects/mkwii-ntsc-j/region_port.json` carries the chunk table.
|
||||
|
||||
### Verdict totals (all PAL entries)
|
||||
|
||||
| verdict | entries | low-mem | DOL | REL | emitted |
|
||||
|---|---|---|---|---|---|
|
||||
| PROVEN | 12202 | 0 | 6573 | 5629 | yes |
|
||||
| REFERENCED | 12693 | 0 | 3273 | 9420 | yes |
|
||||
| PLAUSIBLE | 4513 | 0 | 856 | 3657 | yes |
|
||||
| IDENTITY | 15 | 15 | 0 | 0 | yes |
|
||||
| INTERPOLATED | 0 | 0 | 0 | 0 | yes |
|
||||
| UNVERIFIED | 210 | 0 | 129 | 81 | no |
|
||||
| DROPPED | 159 | 0 | 149 | 10 | no |
|
||||
| total | 29792 | 15 | 10980 | 18797 | |
|
||||
|
||||
Emitted after deduplication: PROVEN=12202, REFERENCED=12693, PLAUSIBLE=4513, IDENTITY=15, INTERPOLATED=0; total 29423 ported entries, plus 6 binary-proven entries no PAL entry covers (section below) = **29429** lines in MAP.txt. UNVERIFIED and DROPPED entries are never written to MAP.txt.
|
||||
|
||||
### Binary-proven entries added (step H: NTSC-J entry points no ported PAL entry covers)
|
||||
|
||||
Emitted as unnamed placeholders (`hexaddr 0xhexaddr`). Strong classes are taken as proven; the pointer-referenced classes must also pass the structural check (not a conditional-branch target, terminator before, decodable first instruction) because no PAL entry vouches for them. Each address is counted once, under the first class that applies.
|
||||
|
||||
| evidence class | added |
|
||||
|---|---|
|
||||
| ctors/dtors table entry (DOL) | 0 |
|
||||
| ctors/dtors table entry (REL) | 0 |
|
||||
| REL prolog/epilog/unresolved | 0 |
|
||||
| DOL entry point | 0 |
|
||||
| bl target (DOL text) | 0 |
|
||||
| bl target (REL R_PPC_REL24 relocation into the DOL) | 0 |
|
||||
| bl target (REL text, link-resolved) | 1 |
|
||||
| extabindex function record | 0 |
|
||||
| pointer-referenced text address (DOL data word) | 0 |
|
||||
| pointer-referenced text address (REL R_PPC_ADDR32) | 5 |
|
||||
| total added | 6 |
|
||||
|
||||
Constructor/destructor tables: DOL .ctors 43 entries, 0 previously missing from the map; DOL .dtors 2 entries, 0 previously missing from the map; REL .ctors 192 entries, 0 previously missing from the map; REL .dtors 1 entries, 0 previously missing from the map.
|
||||
Not added: 61 pointer-referenced addresses that failed the structural check (jump-table targets and similar), 110021 addresses with only weak evidence (conditional/unconditional branch targets, lis/addi pairs, jump-table-like runs). Strong additions that are also a conditional-branch target: 0.
|
||||
|
||||
bl target (REL text, link-resolved) (1):
|
||||
|
||||
```text
|
||||
80600198
|
||||
```
|
||||
|
||||
pointer-referenced text address (REL R_PPC_ADDR32) (5):
|
||||
|
||||
```text
|
||||
805cba28 805fefe0 805ff184 805ff224 8063b3e4
|
||||
```
|
||||
|
||||
First-instruction quality of emitted entries (strong = typical prologue/first instruction, valid = any decodable instruction): IDENTITY/n/a=15, PLAUSIBLE/strong=4238, PLAUSIBLE/valid=275, PROVEN/strong=12010, PROVEN/valid=192, REFERENCED/strong=12621, REFERENCED/valid=72
|
||||
|
||||
### Reading the numbers
|
||||
|
||||
- 24895 of 29792 entries land on an address the NTSC-J binaries reference as code (call target, exception-table record, entry point, function-pointer table, jump table for case labels); 4513 more sit right after a function terminator (or are verified switch dispatch sites) with a decodable first instruction.
|
||||
- 210 UNVERIFIED entries are withheld: see the per-class breakdown in the Unverified section. None of the no-evidence ones lies near a chunk edge; they are surrounded by validated neighbours inside their chunk, which points at PAL-map noise (mid-function addresses, round addresses, names misplaced by one instruction) rather than at the chunk table.
|
||||
- 159 DROPPED entries: jump tables and other data symbols the PAL map carries, PAL-only code regions with no NTSC-J counterpart, and chunk-table holes with no interpolation gap.
|
||||
- The PAL project uses sda_base/sda2_base 0x8038CC00/0x8038EFA0; the NTSC-J values read below are the ones an NTSC-J project must configure.
|
||||
|
||||
### Non-function labels carried by the PAL map
|
||||
|
||||
The PAL map contains Ghidra-style labels that are not function starts: `*_caseD_N` switch case labels (validated here by a jump-table reference at the ported address), `*_switch` dispatch points (validated as `mtctr`+`bctr`), and `switchdataD_*` jump tables (data, never code). They are ported with the same rules; the verdict spread per class:
|
||||
|
||||
| class | entries | PROVEN | REFERENCED | PLAUSIBLE | IDENTITY | INTERPOLATED | UNVERIFIED | DROPPED |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| case | 2359 | 0 | 2355 | 1 | 0 | 0 | 0 | 3 |
|
||||
| switch | 197 | 1 | 0 | 195 | 0 | 0 | 0 | 1 |
|
||||
| data | 140 | 0 | 0 | 0 | 0 | 0 | 1 | 139 |
|
||||
|
||||
### Chunk-edge extent check
|
||||
|
||||
9 emitted chunk-ported entries sit at a chunk edge (their PAL successor is not ported by the same chunk). For these the PAL extent (distance to the next PAL entry) was compared with the NTSC-J extent (distance to the next emitted entry): 8 named and 0 unnamed entries differ. A difference means the function's size changed, the successor was dropped, or the chunk edge is sloppy; the address is still a verified entry point, but for named entries the name deserves a second look.
|
||||
|
||||
| PAL | name | NTSC-J | verdict | PAL extent | NTSC-J extent | PAL successor |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 80008004 | setDiscReadErrorMessage | 80008004 | PROVEN | 0xf0 | 0x4c | 0x800080f4 (PROVEN) |
|
||||
| 8000ac50 | SystemManager::Init | 8000abac | PROVEN | 0x328 | 0x2f0 | SystemManager::GetCountry (PLAUSIBLE) |
|
||||
| 805cbea4 | Pages::EndingMovie::OnInit | 805cb824 | REFERENCED | 0x204 | 0x270 | Pages::EndingMovie::OnActivate (DROPPED) |
|
||||
| 805ff6c4 | Pages::MasterOptions::OnResume | 805fefa0 | REFERENCED | 0x3c | 0x850 | Pages::MasterOptions::OnResume_switch (DROPPED) |
|
||||
| 806003e0 | Pages::MasterOptions::LoadOptionChoice | 805ffb98 | PROVEN | 0x3bc | 0x99c | Pages::MasterOptions::LoadOptionWaitingNetwork (DROPPED) |
|
||||
| 80620c5c | RKSYSRequester::Init | 806203d0 | PROVEN | 0x148 | 0x120 | RKSYSRequester::Close (PROVEN) |
|
||||
| 80637a20 | SystemBMGHolder::Init | 8063716c | PROVEN | 0x6c | 0xc | SystemBMGHolder::GetMessage (PROVEN) |
|
||||
| 8063bbe4 | Pages::TitleMovie::OnInit | 8063b2d0 | REFERENCED | 0x114 | 0x1e0 | Pages::TitleMovie::OnActivate (DROPPED) |
|
||||
|
||||
### SDA bases read from the NTSC-J `__init_registers`
|
||||
|
||||
- `__init_registers` PAL `80006210` -> NTSC-J `80006210`
|
||||
- Result: **r13=0x8038C580 (matches expectation); r2=0x8038E920 (matches expectation)**
|
||||
- All lis/ori(addi) register values materialised in the function: r1=0x80398B00, r2=0x8038E920, r13=0x8038C580
|
||||
|
||||
```text
|
||||
80006210 38000000 li r0,0
|
||||
80006214 38600000 li r3,0
|
||||
80006218 38800000 li r4,0
|
||||
8000621c 38a00000 li r5,0
|
||||
80006220 38c00000 li r6,0
|
||||
80006224 38e00000 li r7,0
|
||||
80006228 39000000 li r8,0
|
||||
8000622c 39200000 li r9,0
|
||||
80006230 39400000 li r10,0
|
||||
80006234 39600000 li r11,0
|
||||
80006238 39800000 li r12,0
|
||||
8000623c 39c00000 li r14,0
|
||||
80006240 39e00000 li r15,0
|
||||
80006244 3a000000 li r16,0
|
||||
80006248 3a200000 li r17,0
|
||||
8000624c 3a400000 li r18,0
|
||||
80006250 3a600000 li r19,0
|
||||
80006254 3a800000 li r20,0
|
||||
80006258 3aa00000 li r21,0
|
||||
8000625c 3ac00000 li r22,0
|
||||
80006260 3ae00000 li r23,0
|
||||
80006264 3b000000 li r24,0
|
||||
80006268 3b200000 li r25,0
|
||||
8000626c 3b400000 li r26,0
|
||||
80006270 3b600000 li r27,0
|
||||
80006274 3b800000 li r28,0
|
||||
80006278 3ba00000 li r29,0
|
||||
8000627c 3bc00000 li r30,0
|
||||
80006280 3be00000 li r31,0
|
||||
80006284 3c208039 lis r1,0x8039
|
||||
80006288 60218b00 ori r1,r1,0x8b00
|
||||
8000628c 3c408038 lis r2,0x8038
|
||||
80006290 6042e920 ori r2,r2,0xe920
|
||||
80006294 3da08038 lis r13,0x8038
|
||||
80006298 61adc580 ori r13,r13,0xc580
|
||||
8000629c 4e800020 blr
|
||||
```
|
||||
|
||||
### Save/restore thunk families (resolved by name in GuestSaveRestoreThunks.cs)
|
||||
|
||||
**`_save_gpr_N`** (stw rN,-off(r11)): OK - full run to r31 verified
|
||||
|
||||
| name | PAL | NTSC-J | verdict | expected | actual | decoded | ok |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| _save_gpr_14 | 8002156c | 80021490 | PROVEN | 91cbffb8 | 91cbffb8 | stw r14,-72(r11) | yes |
|
||||
| _save_gpr_15 | 80021570 | 80021494 | PROVEN | 91ebffbc | 91ebffbc | stw r15,-68(r11) | yes |
|
||||
| _save_gpr_16 | 80021574 | 80021498 | PROVEN | 920bffc0 | 920bffc0 | stw r16,-64(r11) | yes |
|
||||
| _save_gpr_17 | 80021578 | 8002149c | PROVEN | 922bffc4 | 922bffc4 | stw r17,-60(r11) | yes |
|
||||
| _save_gpr_18 | 8002157c | 800214a0 | PROVEN | 924bffc8 | 924bffc8 | stw r18,-56(r11) | yes |
|
||||
| _save_gpr_19 | 80021580 | 800214a4 | PROVEN | 926bffcc | 926bffcc | stw r19,-52(r11) | yes |
|
||||
| _save_gpr_20 | 80021584 | 800214a8 | PROVEN | 928bffd0 | 928bffd0 | stw r20,-48(r11) | yes |
|
||||
| _save_gpr_21 | 80021588 | 800214ac | PROVEN | 92abffd4 | 92abffd4 | stw r21,-44(r11) | yes |
|
||||
| _save_gpr_22 | 8002158c | 800214b0 | PROVEN | 92cbffd8 | 92cbffd8 | stw r22,-40(r11) | yes |
|
||||
| _save_gpr_23 | 80021590 | 800214b4 | PROVEN | 92ebffdc | 92ebffdc | stw r23,-36(r11) | yes |
|
||||
| _save_gpr_24 | 80021594 | 800214b8 | PROVEN | 930bffe0 | 930bffe0 | stw r24,-32(r11) | yes |
|
||||
| _save_gpr_25 | 80021598 | 800214bc | PROVEN | 932bffe4 | 932bffe4 | stw r25,-28(r11) | yes |
|
||||
| _save_gpr_26 | 8002159c | 800214c0 | PROVEN | 934bffe8 | 934bffe8 | stw r26,-24(r11) | yes |
|
||||
| _save_gpr_27 | 800215a0 | 800214c4 | PROVEN | 936bffec | 936bffec | stw r27,-20(r11) | yes |
|
||||
|
||||
**`_rest_gpr_N`** (lwz rN,-off(r11)): OK - full run to r31 verified
|
||||
|
||||
| name | PAL | NTSC-J | verdict | expected | actual | decoded | ok |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| _rest_gpr_14 | 800215b8 | 800214dc | PROVEN | 81cbffb8 | 81cbffb8 | lwz r14,-72(r11) | yes |
|
||||
| _rest_gpr_15 | 800215bc | 800214e0 | PROVEN | 81ebffbc | 81ebffbc | lwz r15,-68(r11) | yes |
|
||||
| _rest_gpr_16 | 800215c0 | 800214e4 | PROVEN | 820bffc0 | 820bffc0 | lwz r16,-64(r11) | yes |
|
||||
| _rest_gpr_17 | 800215c4 | 800214e8 | PROVEN | 822bffc4 | 822bffc4 | lwz r17,-60(r11) | yes |
|
||||
| _rest_gpr_18 | 800215c8 | 800214ec | PROVEN | 824bffc8 | 824bffc8 | lwz r18,-56(r11) | yes |
|
||||
| _rest_gpr_19 | 800215cc | 800214f0 | PROVEN | 826bffcc | 826bffcc | lwz r19,-52(r11) | yes |
|
||||
| _rest_gpr_20 | 800215d0 | 800214f4 | PROVEN | 828bffd0 | 828bffd0 | lwz r20,-48(r11) | yes |
|
||||
| _rest_gpr_21 | 800215d4 | 800214f8 | PROVEN | 82abffd4 | 82abffd4 | lwz r21,-44(r11) | yes |
|
||||
| _rest_gpr_22 | 800215d8 | 800214fc | PROVEN | 82cbffd8 | 82cbffd8 | lwz r22,-40(r11) | yes |
|
||||
| _rest_gpr_23 | 800215dc | 80021500 | PROVEN | 82ebffdc | 82ebffdc | lwz r23,-36(r11) | yes |
|
||||
| _rest_gpr_24 | 800215e0 | 80021504 | PROVEN | 830bffe0 | 830bffe0 | lwz r24,-32(r11) | yes |
|
||||
| _rest_gpr_25 | 800215e4 | 80021508 | PROVEN | 832bffe4 | 832bffe4 | lwz r25,-28(r11) | yes |
|
||||
| _rest_gpr_26 | 800215e8 | 8002150c | PROVEN | 834bffe8 | 834bffe8 | lwz r26,-24(r11) | yes |
|
||||
| _rest_gpr_27 | 800215ec | 80021510 | PROVEN | 836bffec | 836bffec | lwz r27,-20(r11) | yes |
|
||||
|
||||
**`_save_fpr_N`** (stfd rN,-off(r11)): OK - full run to r31 verified
|
||||
|
||||
| name | PAL | NTSC-J | verdict | expected | actual | decoded | ok |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| _save_fpr_23 | 800214f8 | 8002141c | PROVEN | daebffb8 | daebffb8 | stfd f23,-72(r11) | yes |
|
||||
| _save_fpr_28 | 8002150c | 80021430 | PROVEN | db8bffe0 | db8bffe0 | stfd f28,-32(r11) | yes |
|
||||
|
||||
**`_rest_fpr_N`** (lfd rN,-off(r11)): OK - full run to r31 verified
|
||||
|
||||
| name | PAL | NTSC-J | verdict | expected | actual | decoded | ok |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| _rest_fpr_23 | 80021544 | 80021468 | PROVEN | caebffb8 | caebffb8 | lfd f23,-72(r11) | yes |
|
||||
| _rest_fpr_28 | 80021558 | 8002147c | PROVEN | cb8bffe0 | cb8bffe0 | lfd f28,-32(r11) | yes |
|
||||
|
||||
## Evidence set K (NTSC-J function entry points proven by the binaries)
|
||||
|
||||
- Strong (bl target / extabindex record / entry point): **12203** addresses
|
||||
- Medium only (function-pointer word, ADDR32/ADDR16 relocation, lis/addi pair): **11603** addresses
|
||||
- Weak only (`b` target, not used for verdicts): 22593 addresses
|
||||
- Jump-table-like pointer runs (excluded from REFERENCED): 257 runs, 1748 addresses referenced only from them
|
||||
|
||||
| source | count |
|
||||
|---|---|
|
||||
| dol.text0: bl sites | 18 |
|
||||
| dol.text0: b sites | 11 |
|
||||
| dol.text0: conditional-branch targets (negative signal) | 34 |
|
||||
| dol.text0: lis/addi code-address pairs | 27 |
|
||||
| dol.text1: bl sites | 36828 |
|
||||
| dol.text1: b sites | 22752 |
|
||||
| dol.text1: conditional-branch targets (negative signal) | 47324 |
|
||||
| dol.text1: lis/addi code-address pairs | 858 |
|
||||
| rel.text: bl sites | 37494 |
|
||||
| rel.text: b sites | 25437 |
|
||||
| rel.text: conditional-branch targets (negative signal) | 64497 |
|
||||
| dol.ctors: table entries | 43 |
|
||||
| dol.dtors: table entries | 2 |
|
||||
| rel.ctors: table entries (unique targets) | 192 |
|
||||
| rel.dtors: table entries (unique targets) | 1 |
|
||||
| dol.extabindex: function records | 180 |
|
||||
| dol.extabindex: non-record words (footer/padding) | 2 |
|
||||
| rel: REL24 bl relocations | 18811 |
|
||||
| rel: REL24 b relocations | 155 |
|
||||
| rel: ADDR16_LO/HI/HA relocations into text | 2172 |
|
||||
| rel: ADDR32 relocations into text | 31286 |
|
||||
| rel: function-pointer words | 30116 |
|
||||
| rel: pointer runs classified as jump tables (words) | 1170 |
|
||||
| dol: function-pointer words | 4101 |
|
||||
| dol: pointer runs classified as jump tables (words) | 1822 |
|
||||
|
||||
REL relocation type counts (module, type): (0,1)=156, (0,4)=1686, (0,6)=1285, (0,10)=18966, (0,201)=1, (0,202)=2, (0,203)=1, (1,1)=33010, (1,4)=32000, (1,6)=27636, (1,202)=5, (1,203)=1
|
||||
|
||||
## Binary layout check (parsed headers vs vendored mkw-sp table)
|
||||
|
||||
- DOL init: 80004000-80006460 OK
|
||||
- DOL extab: 80006460-80006a20 OK
|
||||
- DOL extabindex: 80006a20-800072c0 OK
|
||||
- DOL text: 800072c0-80244d00 OK
|
||||
- DOL ctors: 80244d00-80244dc0 OK
|
||||
- DOL dtors: 80244dc0-80244de0 OK
|
||||
- DOL rodata: 80244e00-80257f20 OK
|
||||
- DOL data: 80257f20-802a39e0 OK
|
||||
- DOL sdata: 80384580-80385940 OK
|
||||
- DOL sdata2: 80386920-80388ac0 OK
|
||||
- REL text: 8050fd34-8088ea6c OK
|
||||
- REL ctors: 8088ea6c-8088ed70 OK
|
||||
- REL dtors: 8088ed70-8088ed7c OK
|
||||
- REL rodata: 8088ed80-808b1d30 OK
|
||||
- REL data: 808b1d30-808dc524 OK
|
||||
- REL bss: 809bc740-809c3ff0 OK
|
||||
|
||||
## Interpolation gaps (step C.2)
|
||||
|
||||
| PAL gap | NTSC-J gap | unported | K candidates | outcome |
|
||||
|---|---|---|---|---|
|
||||
| 80244c0c..80510468 | 80244b2c..8050fde8 | 150 | 0 | rejected: count mismatch |
|
||||
| 805cbd88..805cc3b8 | 805cb708..805cbc94 | 1 | 0 | rejected: count mismatch |
|
||||
| 805ff328..80600128 | 805fec04..805ff8e0 | 4 | 0 | rejected: count mismatch |
|
||||
| 806003e0..80600dc0 | 805ffb98..80600534 | 3 | 1 | rejected: count mismatch |
|
||||
| 8063bb08..8063c0ac | 8063b1f4..8063b718 | 1 | 0 | rejected: count mismatch |
|
||||
|
||||
## Collisions (two PAL entries porting to one NTSC-J address)
|
||||
|
||||
The named entry is kept (both PAL entries are functions, so the address is a real entry point either way; only the name is in question). Extents are the distance to the next PAL entry / next emitted NTSC-J entry: the PAL entry whose extent matches the NTSC-J extent is the likelier owner of the address.
|
||||
|
||||
None.
|
||||
|
||||
## Dropped entries (159)
|
||||
|
||||
| PAL | name | reason |
|
||||
|---|---|---|
|
||||
| 802474a0 | switchdataD_802474a0 | outside every chunk; no interpolation gap |
|
||||
| 80270e30 | switchdataD_80270e30 | outside every chunk; no interpolation gap |
|
||||
| 80271190 | switchdataD_80271190 | outside every chunk; no interpolation gap |
|
||||
| 80271270 | switchdataD_80271270 | outside every chunk; no interpolation gap |
|
||||
| 802713c0 | switchdataD_802713c0 | outside every chunk; no interpolation gap |
|
||||
| 802714a0 | switchdataD_802714a0 | outside every chunk; no interpolation gap |
|
||||
| 802714c0 | switchdataD_802714c0 | outside every chunk; no interpolation gap |
|
||||
| 802714e0 | switchdataD_802714e0 | outside every chunk; no interpolation gap |
|
||||
| 80271630 | switchdataD_80271630 | outside every chunk; no interpolation gap |
|
||||
| 80271710 | switchdataD_80271710 | outside every chunk; no interpolation gap |
|
||||
| 802718d0 | switchdataD_802718d0 | outside every chunk; no interpolation gap |
|
||||
| 80271ab8 | switchdataD_80271ab8 | outside every chunk; no interpolation gap |
|
||||
| 80271ad4 | switchdataD_80271ad4 | outside every chunk; no interpolation gap |
|
||||
| 802726a0 | rnd_3DModels(NW4R)_802726a0 | outside every chunk; no interpolation gap |
|
||||
| 802726c0 | rnd_Palettes(NW4R)_802726c0 | outside every chunk; no interpolation gap |
|
||||
| 802726e0 | rnd_Textures(NW4R)_802726e0 | outside every chunk; no interpolation gap |
|
||||
| 80272700 | rnd_AnmChr(NW4R)_80272700 | outside every chunk; no interpolation gap |
|
||||
| 80272720 | rnd_AnmVis(NW4R)_80272720 | outside every chunk; no interpolation gap |
|
||||
| 80272740 | rnd_AnmClr(NW4R)_80272740 | outside every chunk; no interpolation gap |
|
||||
| 80272760 | rnd_AnmTexPat(NW4R)_80272760 | outside every chunk; no interpolation gap |
|
||||
| 80272780 | rnd_AnmTexSrt(NW4R)_80272780 | outside every chunk; no interpolation gap |
|
||||
| 802727a0 | rnd_AnmShp(NW4R)_802727a0 | outside every chunk; no interpolation gap |
|
||||
| 802727c0 | rnd_AnmScn(NW4R)_802727c0 | outside every chunk; no interpolation gap |
|
||||
| 80272810 | switchdataD_80272810 | outside every chunk; no interpolation gap |
|
||||
| 80273088 | switchdataD_80273088 | outside every chunk; no interpolation gap |
|
||||
| 802730b0 | switchdataD_802730b0 | outside every chunk; no interpolation gap |
|
||||
| 80274520 | switchdataD_80274520 | outside every chunk; no interpolation gap |
|
||||
| 80274578 | switchdataD_80274578 | outside every chunk; no interpolation gap |
|
||||
| 80275018 | switchdataD_80275018 | outside every chunk; no interpolation gap |
|
||||
| 80275700 | switchdataD_80275700 | outside every chunk; no interpolation gap |
|
||||
| 80275a20 | switchdataD_80275a20 | outside every chunk; no interpolation gap |
|
||||
| 80275cfc | switchdataD_80275cfc | outside every chunk; no interpolation gap |
|
||||
| 80276954 | switchdataD_80276954 | outside every chunk; no interpolation gap |
|
||||
| 802775e8 | switchdataD_802775e8 | outside every chunk; no interpolation gap |
|
||||
| 80277d68 | switchdataD_80277d68 | outside every chunk; no interpolation gap |
|
||||
| 80278cf0 | switchdataD_80278cf0 | outside every chunk; no interpolation gap |
|
||||
| 80279af0 | switchdataD_80279af0 | outside every chunk; no interpolation gap |
|
||||
| 80279b10 | switchdataD_80279b10 | outside every chunk; no interpolation gap |
|
||||
| 80279b30 | switchdataD_80279b30 | outside every chunk; no interpolation gap |
|
||||
| 80279b50 | switchdataD_80279b50 | outside every chunk; no interpolation gap |
|
||||
| 80279b94 | switchdataD_80279b94 | outside every chunk; no interpolation gap |
|
||||
| 8027a200 | switchdataD_8027a200 | outside every chunk; no interpolation gap |
|
||||
| 8027a2d8 | switchdataD_8027a2d8 | outside every chunk; no interpolation gap |
|
||||
| 8027a314 | switchdataD_8027a314 | outside every chunk; no interpolation gap |
|
||||
| 8027a350 | switchdataD_8027a350 | outside every chunk; no interpolation gap |
|
||||
| 8027a624 | switchdataD_8027a624 | outside every chunk; no interpolation gap |
|
||||
| 8027b878 | switchdataD_8027b878 | outside every chunk; no interpolation gap |
|
||||
| 8027ba5c | switchdataD_8027ba5c | outside every chunk; no interpolation gap |
|
||||
| 8027bb2c | switchdataD_8027bb2c | outside every chunk; no interpolation gap |
|
||||
| 8027bc28 | switchdataD_8027bc28 | outside every chunk; no interpolation gap |
|
||||
| 8027bc44 | switchdataD_8027bc44 | outside every chunk; no interpolation gap |
|
||||
| 8027d1a8 | switchdataD_8027d1a8 | outside every chunk; no interpolation gap |
|
||||
| 8027ddf8 | switchdataD_8027ddf8 | outside every chunk; no interpolation gap |
|
||||
| 80282cb0 | switchdataD_80282cb0 | outside every chunk; no interpolation gap |
|
||||
| 80282cd8 | switchdataD_80282cd8 | outside every chunk; no interpolation gap |
|
||||
| 80282d5c | switchdataD_80282d5c | outside every chunk; no interpolation gap |
|
||||
| 80282d84 | switchdataD_80282d84 | outside every chunk; no interpolation gap |
|
||||
| 80282f08 | switchdataD_80282f08 | outside every chunk; no interpolation gap |
|
||||
| 80282f2c | switchdataD_80282f2c | outside every chunk; no interpolation gap |
|
||||
| 80283220 | switchdataD_80283220 | outside every chunk; no interpolation gap |
|
||||
| 80284d2c | switchdataD_80284d2c | outside every chunk; no interpolation gap |
|
||||
| 80284e58 | switchdataD_80284e58 | outside every chunk; no interpolation gap |
|
||||
| 80284e7c | switchdataD_80284e7c | outside every chunk; no interpolation gap |
|
||||
| 80284ee8 | switchdataD_80284ee8 | outside every chunk; no interpolation gap |
|
||||
| 80284f08 | switchdataD_80284f08 | outside every chunk; no interpolation gap |
|
||||
| 80285c30 | switchdataD_80285c30 | outside every chunk; no interpolation gap |
|
||||
| 80285cf0 | switchdataD_80285cf0 | outside every chunk; no interpolation gap |
|
||||
| 80285d94 | switchdataD_80285d94 | outside every chunk; no interpolation gap |
|
||||
| 80285e58 | switchdataD_80285e58 | outside every chunk; no interpolation gap |
|
||||
| 80285fc0 | switchdataD_80285fc0 | outside every chunk; no interpolation gap |
|
||||
| 80286054 | switchdataD_80286054 | outside every chunk; no interpolation gap |
|
||||
| 802861e8 | switchdataD_802861e8 | outside every chunk; no interpolation gap |
|
||||
| 80286274 | switchdataD_80286274 | outside every chunk; no interpolation gap |
|
||||
| 80286338 | switchdataD_80286338 | outside every chunk; no interpolation gap |
|
||||
| 802863d0 | switchdataD_802863d0 | outside every chunk; no interpolation gap |
|
||||
| 8028697c | switchdataD_8028697c | outside every chunk; no interpolation gap |
|
||||
| 80287078 | switchdataD_80287078 | outside every chunk; no interpolation gap |
|
||||
| 80287110 | switchdataD_80287110 | outside every chunk; no interpolation gap |
|
||||
| 80287190 | switchdataD_80287190 | outside every chunk; no interpolation gap |
|
||||
| 802871d8 | switchdataD_802871d8 | outside every chunk; no interpolation gap |
|
||||
| 8028725c | switchdataD_8028725c | outside every chunk; no interpolation gap |
|
||||
| 802872b4 | switchdataD_802872b4 | outside every chunk; no interpolation gap |
|
||||
| 80287388 | switchdataD_80287388 | outside every chunk; no interpolation gap |
|
||||
| 802873f0 | switchdataD_802873f0 | outside every chunk; no interpolation gap |
|
||||
| 80287488 | switchdataD_80287488 | outside every chunk; no interpolation gap |
|
||||
| 80287528 | switchdataD_80287528 | outside every chunk; no interpolation gap |
|
||||
| 8028758c | switchdataD_8028758c | outside every chunk; no interpolation gap |
|
||||
| 802875f4 | switchdataD_802875f4 | outside every chunk; no interpolation gap |
|
||||
| 802879e0 | switchdataD_802879e0 | outside every chunk; no interpolation gap |
|
||||
| 80287da8 | switchdataD_80287da8 | outside every chunk; no interpolation gap |
|
||||
| 80287e40 | switchdataD_80287e40 | outside every chunk; no interpolation gap |
|
||||
| 80287e60 | switchdataD_80287e60 | outside every chunk; no interpolation gap |
|
||||
| 80287e80 | switchdataD_80287e80 | outside every chunk; no interpolation gap |
|
||||
| 80288404 | switchdataD_80288404 | outside every chunk; no interpolation gap |
|
||||
| 802884b0 | switchdataD_802884b0 | outside every chunk; no interpolation gap |
|
||||
| 8028855c | switchdataD_8028855c | outside every chunk; no interpolation gap |
|
||||
| 80288614 | switchdataD_80288614 | outside every chunk; no interpolation gap |
|
||||
| 802886c0 | switchdataD_802886c0 | outside every chunk; no interpolation gap |
|
||||
| 80289fd0 | switchdataD_80289fd0 | outside every chunk; no interpolation gap |
|
||||
| 8028a0a0 | switchdataD_8028a0a0 | outside every chunk; no interpolation gap |
|
||||
| 8028a108 | switchdataD_8028a108 | outside every chunk; no interpolation gap |
|
||||
| 8028a14c | switchdataD_8028a14c | outside every chunk; no interpolation gap |
|
||||
| 8028a190 | switchdataD_8028a190 | outside every chunk; no interpolation gap |
|
||||
| 8028a1d4 | switchdataD_8028a1d4 | outside every chunk; no interpolation gap |
|
||||
| 8028a1f0 | switchdataD_8028a1f0 | outside every chunk; no interpolation gap |
|
||||
| 8028a378 | switchdataD_8028a378 | outside every chunk; no interpolation gap |
|
||||
| 8028a398 | switchdataD_8028a398 | outside every chunk; no interpolation gap |
|
||||
| 8028a48c | switchdataD_8028a48c | outside every chunk; no interpolation gap |
|
||||
| 8028a580 | switchdataD_8028a580 | outside every chunk; no interpolation gap |
|
||||
| 8028a658 | switchdataD_8028a658 | outside every chunk; no interpolation gap |
|
||||
| 8028a6b4 | switchdataD_8028a6b4 | outside every chunk; no interpolation gap |
|
||||
| 8028b988 | switchdataD_8028b988 | outside every chunk; no interpolation gap |
|
||||
| 8028b9b0 | switchdataD_8028b9b0 | outside every chunk; no interpolation gap |
|
||||
| 8028ee58 | switchdataD_8028ee58 | outside every chunk; no interpolation gap |
|
||||
| 8028f7dc | switchdataD_8028f7dc | outside every chunk; no interpolation gap |
|
||||
| 80290820 | switchdataD_80290820 | outside every chunk; no interpolation gap |
|
||||
| 8029c884 | switchdataD_8029c884 | outside every chunk; no interpolation gap |
|
||||
| 8029ce88 | switchdataD_8029ce88 | outside every chunk; no interpolation gap |
|
||||
| 8029da00 | switchdataD_8029da00 | outside every chunk; no interpolation gap |
|
||||
| 8029da24 | switchdataD_8029da24 | outside every chunk; no interpolation gap |
|
||||
| 8029dab0 | switchdataD_8029dab0 | outside every chunk; no interpolation gap |
|
||||
| 8029dc28 | switchdataD_8029dc28 | outside every chunk; no interpolation gap |
|
||||
| 8029dc4c | switchdataD_8029dc4c | outside every chunk; no interpolation gap |
|
||||
| 8029e530 | switchdataD_8029e530 | outside every chunk; no interpolation gap |
|
||||
| 802a010c | switchdataD_802a010c | outside every chunk; no interpolation gap |
|
||||
| 802a0870 | switchdataD_802a0870 | outside every chunk; no interpolation gap |
|
||||
| 802a0f68 | switchdataD_802a0f68 | outside every chunk; no interpolation gap |
|
||||
| 802a1870 | switchdataD_802a1870 | outside every chunk; no interpolation gap |
|
||||
| 802a18f8 | switchdataD_802a18f8 | outside every chunk; no interpolation gap |
|
||||
| 802a19dc | switchdataD_802a19dc | outside every chunk; no interpolation gap |
|
||||
| 802a2370 | switchdataD_802a2370 | outside every chunk; no interpolation gap |
|
||||
| 802a23f8 | switchdataD_802a23f8 | outside every chunk; no interpolation gap |
|
||||
| 802a2480 | switchdataD_802a2480 | outside every chunk; no interpolation gap |
|
||||
| 802a2658 | switchdataD_802a2658 | outside every chunk; no interpolation gap |
|
||||
| 802a2ba0 | switchdataD_802a2ba0 | outside every chunk; no interpolation gap |
|
||||
| 802a31d8 | switchdataD_802a31d8 | outside every chunk; no interpolation gap |
|
||||
| 802a32a0 | switchdataD_802a32a0 | outside every chunk; no interpolation gap |
|
||||
| 802a335c | switchdataD_802a335c | outside every chunk; no interpolation gap |
|
||||
| 802a3418 | switchdataD_802a3418 | outside every chunk; no interpolation gap |
|
||||
| 802a34d4 | switchdataD_802a34d4 | outside every chunk; no interpolation gap |
|
||||
| 802a3590 | switchdataD_802a3590 | outside every chunk; no interpolation gap |
|
||||
| 802a364c | switchdataD_802a364c | outside every chunk; no interpolation gap |
|
||||
| 802a3708 | switchdataD_802a3708 | outside every chunk; no interpolation gap |
|
||||
| 802a37c4 | switchdataD_802a37c4 | outside every chunk; no interpolation gap |
|
||||
| 802a3880 | switchdataD_802a3880 | outside every chunk; no interpolation gap |
|
||||
| 802a3940 | switchdataD_802a3940 | outside every chunk; no interpolation gap |
|
||||
| 802a39fc | switchdataD_802a39fc | outside every chunk; no interpolation gap |
|
||||
| 802a3b88 | switchdataD_802a3b88 | outside every chunk; no interpolation gap |
|
||||
| 802a3e30 | switchdataD_802a3e30 | outside every chunk; no interpolation gap |
|
||||
| 80510238 | RelStart | outside every chunk; no interpolation gap |
|
||||
| 805cc0a8 | Pages::EndingMovie::OnActivate | outside every chunk; no interpolation gap |
|
||||
| 805ff700 | Pages::MasterOptions::OnResume_switch | outside every chunk; no interpolation gap |
|
||||
| 805ff704 | Pages::MasterOptions::OnResume_case0 | outside every chunk; no interpolation gap |
|
||||
| 805ff8a8 | Pages::MasterOptions::OnResume_case1 | outside every chunk; no interpolation gap |
|
||||
| 805ff948 | Pages::MasterOptions::OnResume_case2 | outside every chunk; no interpolation gap |
|
||||
| 8060079c | Pages::MasterOptions::LoadOptionWaitingNetwork | outside every chunk; no interpolation gap |
|
||||
| 806008cc | Pages::MasterOptions::LoadOptionWaiting | outside every chunk; no interpolation gap |
|
||||
| 806009fc | Pages::MasterOptions::LoadOptionChoiceSaved | outside every chunk; no interpolation gap |
|
||||
| 8063bcf8 | Pages::TitleMovie::OnActivate | outside every chunk; no interpolation gap |
|
||||
|
||||
## Unverified entries (210; ported by the chunk table but not confirmed by the binary, not emitted)
|
||||
|
||||
- conditional-branch target (inside a function): 39
|
||||
- conditional-branch target that is also jump-table referenced (a case label without a label name): 37
|
||||
- jump-table referenced but named/unnamed as a function: 1
|
||||
- lands on a padding word (real function usually at +4): 25
|
||||
- no evidence, predecessor is not a terminator: 102
|
||||
- outside text (data symbols): 6
|
||||
|
||||
| PAL | name | NTSC-J | evidence | detail |
|
||||
|---|---|---|---|---|
|
||||
| 8000a000 | 0x8000a000 | 80009f5c | - | prev=93e1000c (stw r31,12(r1)) word=800d93f8 (lwz r0,-27656(r13)) |
|
||||
| 8000fb80 | 0x8000fb80 | 8000faa4 | - | prev=38000005 (li r0,5) word=9801000c (op38) |
|
||||
| 8000fbb4 | 0x8000fbb4 | 8000fad8 | ptr+bc | conditional-branch target (inside a function); prev=4800000c (b) word=380000ff (li r0,255) |
|
||||
| 80010000 | 0x80010000 | 8000ff24 | bc | conditional-branch target (inside a function); prev=41820010 (bc) word=8078000c (lwz r3,12(r24)) |
|
||||
| 80010138 | 0x80010138 | 8001005c | bc | conditional-branch target (inside a function); prev=48000358 (b) word=3b800000 (li r28,0) |
|
||||
| 80010dbc | 0x80010dbc | 80010ce0 | bc | conditional-branch target (inside a function); prev=48000844 (b) word=7de37b78 (mr r3,r15) |
|
||||
| 8001237c | 0x8001237c | 800122a0 | bc | conditional-branch target (inside a function); prev=48000be8 (b) word=281600ff (cmplwi cr0,r22,255) |
|
||||
| 80016e68 | 0x80016e68 | 80016d8c | bc | conditional-branch target (inside a function); prev=48000920 (b) word=7fc3f378 (mr r3,r30) |
|
||||
| 80020000 | 0x80020000 | 8001ff24 | - | prev=60421548 (ori r2,r2,0x1548) word=38600001 (li r3,1) |
|
||||
| 8002055c | 0x8002055c | 80020480 | - | prev=38845eb8 (addi r4,r4,24248) word=38a00001 (li r5,1) |
|
||||
| 80020800 | 0x80020800 | 80020724 | - | prev=7fe3fb78 (mr r3,r31) word=38a55eb8 (addi r5,r5,24248); next proven start at +0x2c |
|
||||
| 80021360 | 0x80021360 | 80021284 | bc | conditional-branch target (inside a function); prev=48000020 (b) word=80030000 (lwz r0,0(r3)) |
|
||||
| 8002137c | 0x8002137c | 800212a0 | b | prev=4e800421 (op19) word=806d94ac (lwz r3,-27476(r13)) |
|
||||
| 80021ba8 | 0x80021ba8 | 80021acc | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 80024870 | 0x80024870 | 80024790 | - | prev=48174915 (bl) word=3803ffe4 (addi r0,r3,-28) |
|
||||
| 800259d0 | 0x800259d0 | 800258f0 | - | prev=7fa4eb78 (mr r4,r29) word=387c0004 (addi r3,r28,4) |
|
||||
| 80046a40 | 0x80046a40 | 80046960 | - | prev=3c608004 (lis r3,0x8004) word=38636aa0 (addi r3,r3,27296) |
|
||||
| 80046a50 | 0x80046a50 | 80046970 | - | prev=38630020 (addi r3,r3,32) word=4e800020 (blr) |
|
||||
| 800495d0 | 0x800495d0 | 800494f0 | - | prev=7ee7bb78 (mr r7,r23) word=7f68db78 (mr r8,r27) |
|
||||
| 8004b3a0 | 0x8004b3a0 | 8004b2c0 | - | prev=3c608005 (lis r3,0x8005) word=3863b400 (addi r3,r3,-19456) |
|
||||
| 8004b3b0 | 0x8004b3b0 | 8004b2d0 | - | prev=38630020 (addi r3,r3,32) word=4e800020 (blr) |
|
||||
| 8004f710 | 0x8004f710 | 8004f630 | - | prev=38630018 (addi r3,r3,24) word=80a1002c (lwz r5,44(r1)) |
|
||||
| 80051c40 | 0x80051c40 | 80051b60 | - | prev=38000002 (li r0,2) word=48000010 (b) |
|
||||
| 8005ee40 | 0x8005ee40 | 8005ed60 | - | prev=e03f0008 (op56) word=39210020 (addi r9,r1,32) |
|
||||
| 8005fec0 | 0x8005fec0 | 8005fde0 | - | prev=90610008 (stw r3,8(r1)) word=40820014 (bc) |
|
||||
| 80061c90 | 0x80061c90 | 80061bb0 | - | prev=4182000c (bc) word=80030018 (lwz r0,24(r3)) |
|
||||
| 80068260 | 0x80068260 | 80068180 | - | prev=dbe10120 (stfd f31,288(r1)) word=f3e10128 (op60) |
|
||||
| 8006b7a0 | 0x8006b7a0 | 8006b6c0 | - | prev=ec4a01b2 (op59) word=ec88202a (op59) |
|
||||
| 8006d480 | 0x8006d480 | 8006d3a0 | - | prev=c1230004 (op48) word=ecc7102a (op59) |
|
||||
| 80080000 | 0x80080000 | 8007ff20 | - | prev=80010034 (lwz r0,52(r1)) word=7c0803a6 (mtlr r0); next proven start at +0x10 |
|
||||
| 80084780 | 0x80084780 | 800846a0 | - | prev=38a00001 (li r5,1) word=38c00004 (li r6,4); next proven start at +0x40 |
|
||||
| 80088920 | 0x80088920 | 80088840 | - | prev=38800100 (li r4,256) word=48118d0d (bl) |
|
||||
| 80089a00 | 0x80089a00 | 80089920 | - | prev=90810008 (stw r4,8(r1)) word=c0030040 (op48) |
|
||||
| 8008bd70 | 0x8008bd70 | 8008bc90 | - | prev=7c040214 (op31) word=7fc01a14 (op31) |
|
||||
| 8008c540 | 0x8008c540 | 8008c460 | - | prev=396100a0 (addi r11,r1,160) word=4bf95061 (bl) |
|
||||
| 8008e170 | 0x8008e170 | 8008e090 | - | prev=90e300a0 (stw r7,160(r3)) word=90e300e0 (stw r7,224(r3)) |
|
||||
| 80090000 | 0x80090000 | 8008ff20 | bc | conditional-branch target (inside a function); prev=4e800421 (op19) word=881e0037 (op34) |
|
||||
| 8009716c | 0x8009716c | 8009708c | b+jt+bc | conditional-branch target (inside a function); prev=981f0008 (op38) word=39610030 (addi r11,r1,48) |
|
||||
| 80097cf0 | 0x80097cf0 | 80097c10 | - | prev=80a30170 (lwz r5,368(r3)) word=7c042800 (op31) |
|
||||
| 800aeed0 | nw4r::snd::detail::DecodeDspAdpcm | 800aedf0 | - | prev=54806326 (op21) word=a1230024 (op40) |
|
||||
| 800aeee0 | nw4r::snd::detail::WsdPlayer::InvalidateWaveData | 800aee00 | - | prev=54e4073e (op21) word=54c7103a (op21) |
|
||||
| 800b1a00 | 0x800b1a00 | 800b1920 | - | prev=80040004 (lwz r0,4(r4)) word=90030008 (stw r0,8(r3)); next proven start at +0x20 |
|
||||
| 800b7fd8 | 0x800b7fd8 | 800b7ef8 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b80ec | 0x800b80ec | 800b800c | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b8464 | 0x800b8464 | 800b8384 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b87e4 | 0x800b87e4 | 800b8704 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b90d4 | 0x800b90d4 | 800b8ff4 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0xc |
|
||||
| 800b9384 | 0x800b9384 | 800b92a4 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b9618 | 0x800b9618 | 800b9538 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b9b7c | 0x800b9b7c | 800b9a9c | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800b9d84 | 0x800b9d84 | 800b9ca4 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b9e9c | 0x800b9e9c | 800b9dbc | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b9f48 | 0x800b9f48 | 800b9e68 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800ba18c | 0x800ba18c | 800ba0ac | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800ba814 | 0x800ba814 | 800ba734 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x1c |
|
||||
| 800ba828 | 0x800ba828 | 800ba748 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800bbae8 | 0x800bbae8 | 800bba08 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800bc138 | bootloadDB2Res_ | 800bc058 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800bed50 | 0x800bed50 | 800bec70 | - | prev=39610020 (addi r11,r1,32) word=4bf62855 (bl) |
|
||||
| 800c5550 | 0x800c5550 | 800c5470 | - | prev=38c65340 (addi r6,r6,21312) word=38a00040 (li r5,64) |
|
||||
| 800c686c | 0x800c686c | 800c678c | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800c8214 | 0x800c8214 | 800c8134 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0xc |
|
||||
| 800cbb4c | 0x800cbb4c | 800cba6c | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800cbb84 | 0x800cbb84 | 800cbaa4 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0xc |
|
||||
| 800cbde4 | 0x800cbde4 | 800cbd04 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0xc |
|
||||
| 800cbe2c | 0x800cbe2c | 800cbd4c | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800cc048 | RFL::SetToWiFiPacket | 800cbf68 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800e5644 | 0x800e5644 | 800e5564 | - | prev=90010014 (stw r0,20(r1)) word=93e1000c (stw r31,12(r1)) |
|
||||
| 800f0000 | 0x800f0000 | 800eff20 | - | prev=7c63f82e (op31) word=4bfff4e1 (bl); next proven start at +0x38 |
|
||||
| 800f6d4c | 0x800f6d4c | 800f6c6c | - | prev=7c9b2378 (mr r27,r4) word=7cbc2b78 (mr r28,r5) |
|
||||
| 800fb78c | 0x800fb78c | 800fb6ac | - | prev=93c10018 (stw r30,24(r1)) word=3bc00000 (li r30,0) |
|
||||
| 800fedbc | 0x800fedbc | 800fecdc | - | prev=8063000c (lwz r3,12(r3)) word=93e3000c (stw r31,12(r3)) |
|
||||
| 80100000 | 0x80100000 | 800fff20 | bc | conditional-branch target (inside a function); prev=4800013c (b) word=38800000 (li r4,0) |
|
||||
| 8010f4b8 | 0x8010f4b8 | 8010f3d8 | - | prev=83e1001c (lwz r31,28(r1)) word=83c10018 (lwz r30,24(r1)); next proven start at +0x14 |
|
||||
| 80128018 | 0x80128018 | 80127f38 | - | prev=7c002050 (op31) word=900d99b4 (stw r0,-26188(r13)); next proven start at +0x14 |
|
||||
| 8012e5a8 | 0x8012e5a8 | 8012e4c8 | b | prev=7c0004ac (op31) word=60000000 (ori r0,r0,0x0000); next proven start at +0x10 |
|
||||
| 80130000 | 0x80130000 | 8012ff20 | - | prev=90050000 (stw r0,0(r5)) word=48000054 (b) |
|
||||
| 80134d98 | 0x80134d98 | 80134cb8 | - | prev=93810010 (stw r28,16(r1)) word=7c7c1b78 (mr r28,r3) |
|
||||
| 80144610 | 0x80144610 | 80144530 | jt+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=38600114 (li r3,276); next proven start at +0x8 |
|
||||
| 8015581c | 0x8015581c | 8015573c | - | prev=7c0802a6 (mflr r0) word=3ce08028 (lis r7,0x8028) |
|
||||
| 8015b2bc | 0x8015b2bc | 8015b1dc | bc | conditional-branch target (inside a function); prev=48000258 (b) word=88e80000 (op34) |
|
||||
| 8015b368 | 0x8015b368 | 8015b288 | ptr+bc | conditional-branch target (inside a function); prev=4800000c (b) word=38600000 (li r3,0) |
|
||||
| 801656a4 | 0x801656a4 | 801655c4 | - | prev=7ca40214 (op31) word=806d8ce8 (lwz r3,-29464(r13)) |
|
||||
| 80165d20 | 0x80165d20 | 80165c40 | - | prev=90010014 (stw r0,20(r1)) word=38e72e60 (addi r7,r7,11872) |
|
||||
| 80166864 | 0x80166864 | 80166784 | - | prev=4cc63182 (op19) word=4803bd6d (bl) |
|
||||
| 8016d61c | 0x8016d61c | 8016d53c | bc | conditional-branch target (inside a function); prev=480001a8 (b) word=80c30000 (lwz r6,0(r3)) |
|
||||
| 8016d7bc | 0x8016d7bc | 8016d6dc | ptr+b+bc | conditional-branch target (inside a function); prev=90c50018 (stw r6,24(r5)) word=38630008 (addi r3,r3,8) |
|
||||
| 8016de1c | 0x8016de1c | 8016dd3c | bc | conditional-branch target (inside a function); prev=48000178 (b) word=80c40000 (lwz r6,0(r4)) |
|
||||
| 8016f240 | 0x8016f240 | 8016f160 | - | prev=80c29728 (lwz r6,-26840(r2)) word=3c60cc01 (lis r3,0xcc01) |
|
||||
| 80171770 | 0x80171770 | 80171690 | - | prev=98038000 (op38) word=90a38000 (stw r5,-32768(r3)); next proven start at +0x3c |
|
||||
| 8017cf40 | 0x8017cf40 | 8017ce60 | - | prev=801a0064 (lwz r0,100(r26)) word=2c000002 (cmpwi cr0,r0,2) |
|
||||
| 8017ff60 | 0x8017ff60 | 8017fe80 | bc | conditional-branch target (inside a function); prev=48000250 (b) word=801a0000 (lwz r0,0(r26)) |
|
||||
| 8017ffc4 | 0x8017ffc4 | 8017fee4 | bc | conditional-branch target (inside a function); prev=48000068 (b) word=80190000 (lwz r0,0(r25)) |
|
||||
| 80180000 | 0x80180000 | 8017ff20 | - | prev=7cc00734 (op31) word=88940001 (op34) |
|
||||
| 80192348 | 0x80192348 | 80192268 | - | prev=90a400aa (stw r5,170(r4)) word=90a400ae (stw r5,174(r4)) |
|
||||
| 8019801c | 0x8019801c | 80197f3c | - | prev=2c000000 (cmpwi cr0,r0,0) word=4082004c (bc) |
|
||||
| 8019d454 | 0x8019d454 | 8019d374 | - | prev=3ca08029 (lis r5,0x8029) word=387f0048 (addi r3,r31,72) |
|
||||
| 801a0000 | 0x801a0000 | 8019ff20 | - | prev=41820018 (bc) word=3c800001 (lis r4,0x0001) |
|
||||
| 801a0138 | 0x801a0138 | 801a0058 | - | prev=3c80801a (lis r4,0x801a) word=3ca0801a (lis r5,0x801a) |
|
||||
| 801a0404 | 0x801a0404 | 801a0324 | - | prev=7c651b78 (mr r5,r3) word=60000000 (ori r0,r0,0x0000) |
|
||||
| 801ad43c | 0x801ad43c | 801ad35c | - | prev=93c100a8 (stw r30,168(r1)) word=7cbe2b78 (mr r30,r5) |
|
||||
| 801b1c60 | 0x801b1c60 | 801b1b80 | - | prev=98010008 (op38) word=48000030 (b) |
|
||||
| 801bcc20 | 0x801bcc20 | 801bcb40 | - | prev=38210030 (addi r1,r1,48) word=4e800020 (blr); next proven start at +0x4 |
|
||||
| 801d0eb0 | 0x801d0eb0 | 801d0dd0 | - | prev=7c7d1b78 (mr r29,r3) word=7c9e2378 (mr r30,r4) |
|
||||
| 801da7e8 | 0x801da7e8 | 801da708 | bc | conditional-branch target (inside a function); prev=48000008 (b) word=3a940001 (addi r20,r20,1) |
|
||||
| 801da7ec | 0x801da7ec | 801da70c | b+bc | conditional-branch target (inside a function); prev=3a940001 (addi r20,r20,1) word=88140000 (op34) |
|
||||
| 801dab8c | 0x801dab8c | 801daaac | b+jt+bc | conditional-branch target (inside a function); prev=4180feb0 (bc) word=2c1e0000 (cmpwi cr0,r30,0) |
|
||||
| 801dcecc | 0x801dcecc | 801dcdec | b+jt+bc | conditional-branch target (inside a function); prev=900da0cc (stw r0,-24372(r13)) word=80010024 (lwz r0,36(r1)); next proven start at +0x1c |
|
||||
| 801dfb34 | 0x801dfb34 | 801dfa54 | - | prev=7c751b78 (mr r21,r3) word=41820008 (bc) |
|
||||
| 801ec214 | 0x801ec214 | 801ec134 | bc | conditional-branch target (inside a function); prev=39c00002 (li r14,2) word=4bfba399 (bl) |
|
||||
| 801f6708 | 0x801f6708 | 801f6628 | - | prev=3b400000 (li r26,0) word=48000028 (b) |
|
||||
| 801ff230 | 0x801ff230 | 801ff150 | - | prev=9421ffd0 (stwu r1,-48(r1)) word=7c0802a6 (mflr r0) |
|
||||
| 80211b40 | 0x80211b40 | 80211a60 | ptr+bc | conditional-branch target (inside a function); prev=48000010 (b) word=38800000 (li r4,0); next proven start at +0x1c |
|
||||
| 80217e1c | 0x80217e1c | 80217d3c | bc | conditional-branch target (inside a function); prev=4080022c (bc) word=7ca66050 (op31) |
|
||||
| 80218028 | 0x80218028 | 80217f48 | - | prev=80a1002c (lwz r5,44(r1)) word=d8410030 (stfd f2,48(r1)); next proven start at +0x34 |
|
||||
| 8021b790 | 0x8021b790 | 8021b6b0 | bc | conditional-branch target (inside a function); prev=3dc0802a (lis r14,0x802a) word=386100c0 (addi r3,r1,192) |
|
||||
| 8021ff0c | 0x8021ff0c | 8021fe2c | bc | conditional-branch target (inside a function); prev=c3c29cb0 (op48) word=c0580024 (op48) |
|
||||
| 80220000 | 0x80220000 | 8021ff20 | - | prev=5400043e (op21) word=900100f4 (stw r0,244(r1)) |
|
||||
| 8023152c | 0x8023152c | 8023144c | bc | conditional-branch target (inside a function); prev=480000d0 (b) word=80770000 (lwz r3,0(r23)) |
|
||||
| 80232eec | 0x80232eec | 80232e0c | ptr+bc | conditional-branch target (inside a function); prev=48000014 (b) word=38000000 (li r0,0) |
|
||||
| 8023bc00 | 0x8023bc00 | 8023bb20 | bc | conditional-branch target (inside a function); prev=480000fc (b) word=5605043e (op21) |
|
||||
| 80240000 | 0x80240000 | 8023ff20 | bc | conditional-branch target (inside a function); prev=3bc00000 (li r30,0) word=807d0004 (lwz r3,4(r29)) |
|
||||
| 80244dd4 | switchdataD_80274dd4 | 80244cf4 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 802a4080 | rkSystem | 802a3a00 | - | not in a text section (unmapped) |
|
||||
| 802a40f4 | r13_and_stacks | 802a3a74 | - | not in a text section (unmapped) |
|
||||
| 80385920 | dev/fs_fd | 803852a0 | - | not in a text section (dol.data6) |
|
||||
| 80385924 | r13_and_stacks | 803852a4 | - | not in a text section (dol.data6) |
|
||||
| 80386000 | SystemManager | 80385980 | - | not in a text section (unmapped) |
|
||||
| 80387100 | r13_and_stacks | 80386a80 | - | not in a text section (dol.data7) |
|
||||
| 80528058 | 0x80528058 | 805279d8 | - | prev=83c10018 (lwz r30,24(r1)) word=80010024 (lwz r0,36(r1)) |
|
||||
| 8052aea4 | 0x8052aea4 | 8052a824 | bc | conditional-branch target (inside a function); prev=3e808000 (lis r20,0x8000) word=7ee3bb78 (mr r3,r23) |
|
||||
| 8053bcc8 | 0x8053bcc8 | 8053b648 | bc | conditional-branch target (inside a function); prev=48000414 (b) word=566315ba (op21) |
|
||||
| 8053bcf4 | 0x8053bcf4 | 8053b674 | bc | conditional-branch target (inside a function); prev=b0010020 (op44) word=80150044 (lwz r0,68(r21)) |
|
||||
| 80540000 | 0x80540000 | 8053f980 | - | prev=38a0001c (li r5,28) word=38c0000c (li r6,12) |
|
||||
| 80550000 | 0x80550000 | 8054f980 | - | prev=5404063e (op21) word=380393f0 (addi r0,r3,-27664) |
|
||||
| 805536d8 | 0x805536d8 | 80553058 | bc | conditional-branch target (inside a function); prev=48000094 (b) word=7f03c378 (mr r3,r24) |
|
||||
| 80553730 | 0x80553730 | 805530b0 | jt+bc | conditional-branch target (inside a function); prev=48000008 (b) word=3b400008 (li r26,8) |
|
||||
| 805658f0 | 0x805658f0 | 80565270 | - | prev=1ca5000c (op7) word=c8430000 (lfd f2,0(r3)) |
|
||||
| 80565b50 | 0x80565b50 | 805654d0 | - | prev=7c0802a6 (mflr r0) word=2c030000 (cmpwi cr0,r3,0) |
|
||||
| 80565d14 | 0x80565d14 | 80565694 | - | prev=d01e0028 (op52) word=d01e002c (op52) |
|
||||
| 8058b164 | 0x8058b164 | 8058aae4 | - | prev=48000cc1 (bl) word=7fc3f378 (mr r3,r30); next proven start at +0x34 |
|
||||
| 805abea8 | 0x805abea8 | 805ab828 | b+jt+bc | conditional-branch target (inside a function); prev=4819ee29 (bl) word=807f0000 (lwz r3,0(r31)) |
|
||||
| 805b0000 | 0x805b0000 | 805af980 | - | prev=99410009 (op38) word=9921000a (op38) |
|
||||
| 805cdf28 | 0x805cdf28 | 805cd804 | b+bc | conditional-branch target (inside a function); prev=d014001c (op52) word=5660103a (op21) |
|
||||
| 805d2aa8 | 0x805d2aa8 | 805d2384 | bc | conditional-branch target (inside a function); prev=3a20ffff (li r17,-1) word=80100000 (lwz r0,0(r16)) |
|
||||
| 805f98f4 | SimpleMessageWindowControl::GetClassName | 805f91d0 | - | prev=3c600000 (lis r3,0x0000) word=38630000 (addi r3,r3,0); next proven start at +0xc |
|
||||
| 8060b73c | 0x8060b73c | 8060aeb0 | - | prev=38800037 (li r4,55) word=38a00038 (li r5,56) |
|
||||
| 8060b82c | 0x8060b82c | 8060afa0 | - | prev=386100f8 (addi r3,r1,248) word=38840000 (addi r4,r4,0) |
|
||||
| 8060ef44 | 0x8060ef44 | 8060e6b8 | ptr+b+bc | conditional-branch target (inside a function); prev=4bff3549 (bl) word=396100f0 (addi r11,r1,240); next proven start at +0x18 |
|
||||
| 806116c0 | 0x806116c0 | 80610e34 | ptr+b+bc | conditional-branch target (inside a function); prev=4800005c (b) word=38610008 (addi r3,r1,8) |
|
||||
| 8061f550 | 0x8061f550 | 8061ecc4 | b+jt+bc | conditional-branch target (inside a function); prev=48000088 (b) word=38610008 (addi r3,r1,8) |
|
||||
| 80628068 | 0x80628068 | 806277b4 | - | prev=80010014 (lwz r0,20(r1)) word=7c0803a6 (mtlr r0) |
|
||||
| 8064f7ec | 0x8064f7ec | 8064ee58 | bc | conditional-branch target (inside a function); prev=3fc00000 (lis r30,0x0000) word=5743063e (op21) |
|
||||
| 8064f988 | 0x8064f988 | 8064eff4 | ptr+b+bc | conditional-branch target (inside a function); prev=4beca361 (bl) word=38c00001 (li r6,1) |
|
||||
| 8065193c | 0x8065193c | 80650fa8 | bc | conditional-branch target (inside a function); prev=3dc00000 (lis r14,0x0000) word=807a0000 (lwz r3,0(r26)) |
|
||||
| 80651984 | 0x80651984 | 80650ff0 | bc | conditional-branch target (inside a function); prev=480001f8 (b) word=9a3601f4 (op38) |
|
||||
| 80651b1c | 0x80651b1c | 80651188 | ptr+b+bc | conditional-branch target (inside a function); prev=901601f8 (stw r0,504(r22)) word=807a0000 (lwz r3,0(r26)) |
|
||||
| 80668558 | 0x80668558 | 80667bc4 | ptr+bc | conditional-branch target (inside a function); prev=48000068 (b) word=388018a6 (li r4,6310) |
|
||||
| 8067b190 | 0x8067b190 | 8067a7fc | jt+bc | conditional-branch target (inside a function); prev=48000068 (b) word=388018a6 (li r4,6310) |
|
||||
| 80688e48 | 0x80688e48 | 806884b4 | bc | conditional-branch target (inside a function); prev=d001008c (op52) word=281a0009 (cmplwi cr0,r26,9) |
|
||||
| 80689d74 | 0x80689d74 | 806893e0 | bc | conditional-branch target (inside a function); prev=3a600001 (li r19,1) word=281b0009 (cmplwi cr0,r27,9) |
|
||||
| 8068a3b4 | 0x8068a3b4 | 80689a20 | bc | conditional-branch target (inside a function); prev=3a600001 (li r19,1) word=281b0009 (cmplwi cr0,r27,9) |
|
||||
| 8068a9fc | 0x8068a9fc | 8068a068 | bc | conditional-branch target (inside a function); prev=3a200001 (li r17,1) word=28190009 (cmplwi cr0,r25,9) |
|
||||
| 8068b15c | 0x8068b15c | 8068a7c8 | bc | conditional-branch target (inside a function); prev=3a200001 (li r17,1) word=28190009 (cmplwi cr0,r25,9) |
|
||||
| 80697c30 | 0x80697c30 | 8069729c | bc | conditional-branch target (inside a function); prev=3fc00000 (lis r30,0x0000) word=807d0164 (lwz r3,356(r29)) |
|
||||
| 806a2460 | 0x806a2460 | 806a1acc | - | prev=38ff06f4 (addi r7,r31,1780) word=391f07c8 (addi r8,r31,1992) |
|
||||
| 806afaf0 | 0x806afaf0 | 806af15c | - | prev=807e0318 (lwz r3,792(r30)) word=389f0738 (addi r4,r31,1848) |
|
||||
| 806baad4 | 0x806baad4 | 806ba140 | - | prev=8001001c (lwz r0,28(r1)) word=b01e0182 (op44) |
|
||||
| 806bd88c | 0x806bd88c | 806bcef8 | - | prev=80630028 (lwz r3,40(r3)) word=4be99dc9 (bl) |
|
||||
| 806bf208 | 0x806bf208 | 806be874 | - | prev=7c9e002e (op31) word=38840030 (addi r4,r4,48) |
|
||||
| 806bf228 | 0x806bf228 | 806be894 | - | prev=c0410020 (op48) word=60000001 (ori r0,r0,0x0001) |
|
||||
| 806c9f90 | 0x806c9f90 | 806c95fc | - | prev=7c0803a6 (mtlr r0) word=38210020 (addi r1,r1,32) |
|
||||
| 806c9fb0 | 0x806c9fb0 | 806c961c | - | prev=81830000 (lwz r12,0(r3)) word=3fc00000 (lis r30,0x0000) |
|
||||
| 806e70c4 | 0x806e70c4 | 806e6730 | - | prev=c01e001c (op48) word=d03c0120 (op52) |
|
||||
| 8070ecb4 | 0x8070ecb4 | 8070e320 | - | prev=90c30060 (stw r6,96(r3)) word=4d810020 (op19) |
|
||||
| 8070ede4 | 0x8070ede4 | 8070e450 | jt | prev=90030060 (stw r0,96(r3)) word=4e800020 (blr) |
|
||||
| 807123bc | 0x807123bc | 80711a28 | b+jt+bc | conditional-branch target (inside a function); prev=3ba00002 (li r29,2) word=2c1c0000 (cmpwi cr0,r28,0) |
|
||||
| 80726cb0 | 0x80726cb0 | 8072631c | - | prev=ec460072 (op59) word=c0010024 (op48) |
|
||||
| 80726e04 | 0x80726e04 | 80726470 | - | prev=ec6400f2 (op59) word=ec22082a (op59) |
|
||||
| 8073e1b0 | 0x8073e1b0 | 8073d81c | ptr+b+bc | conditional-branch target (inside a function); prev=7c661b78 (mr r6,r3) word=83e1000c (lwz r31,12(r1)); next proven start at +0x1c |
|
||||
| 8073eaf8 | 0x8073eaf8 | 8073e164 | ptr+b+bc | conditional-branch target (inside a function); prev=7c661b78 (mr r6,r3) word=83e1000c (lwz r31,12(r1)) |
|
||||
| 80754cd8 | 0x80754cd8 | 80754344 | b+jt+bc | conditional-branch target (inside a function); prev=418202d8 (bc) word=38610068 (addi r3,r1,104) |
|
||||
| 807604c4 | 0x807604c4 | 8075fb30 | - | prev=3400ffff (op13) word=900300c0 (stw r0,192(r3)) |
|
||||
| 8078c3e0 | 0x8078c3e0 | 8078ba4c | - | prev=ec00102a (op59) word=fc00001e (op63) |
|
||||
| 807c6b34 | 0x807c6b34 | 807c61a0 | ptr+bc | conditional-branch target (inside a function); prev=4800010c (b) word=839d0000 (lwz r28,0(r29)) |
|
||||
| 807ce31c | 0x807ce31c | 807cd988 | ptr+bc | conditional-branch target (inside a function); prev=4e800420 (bctr) word=c05d0308 (op48) |
|
||||
| 807d3358 | 0x807d3358 | 807d29c4 | ptr+b+bc | conditional-branch target (inside a function); prev=7cbc2b78 (mr r28,r5) word=2c1c0000 (cmpwi cr0,r28,0); next proven start at +0x34 |
|
||||
| 807f8084 | 0x807f8084 | 807f76f0 | - | prev=38a10008 (addi r5,r1,8) word=38c1000a (addi r6,r1,10) |
|
||||
| 807fda18 | 0x807fda18 | 807fd084 | - | prev=a804002e (op42) word=b01e013c (op44) |
|
||||
| 80800000 | 0x80800000 | 807ff66c | - | prev=7c641b78 (mr r4,r3) word=7fc3f378 (mr r3,r30) |
|
||||
| 80808080 | 0x80808080 | 808076ec | - | prev=3bde0000 (addi r30,r30,0) word=38800002 (li r4,2) |
|
||||
| 80810000 | 0x80810000 | 8080f66c | - | prev=2c1a0001 (cmpwi cr0,r26,1) word=4182004c (bc) |
|
||||
| 808148a4 | 0x808148a4 | 80813f10 | - | prev=c02a0000 (op48) word=480014c0 (b) |
|
||||
| 8082b708 | 0x8082b708 | 8082ad74 | bc | conditional-branch target (inside a function); prev=3f800000 (lis r28,0x0000) word=81980000 (lwz r12,0(r24)) |
|
||||
| 8082bd68 | 0x8082bd68 | 8082b3d4 | - | prev=80830000 (lwz r4,0(r3)) word=548005ef (op21) |
|
||||
| 80830000 | 0x80830000 | 8082f66c | bc | conditional-branch target (inside a function); prev=4bd276e5 (bl) word=38610008 (addi r3,r1,8) |
|
||||
| 80833800 | 0x80833800 | 80832e6c | ptr+bc | conditional-branch target (inside a function); prev=48000008 (b) word=3860ffff (li r3,-1); next proven start at +0x1c |
|
||||
| 8085ade8 | 0x8085ade8 | 8085a454 | jt+bc | conditional-branch target (inside a function); prev=480001fc (b) word=80031780 (lwz r0,6016(r3)) |
|
||||
| 8085bb9c | 0x8085bb9c | 8085b208 | jt+bc | conditional-branch target (inside a function); prev=48000048 (b) word=2c040016 (cmpwi cr0,r4,22) |
|
||||
| 80860350 | 0x80860350 | 8085f9bc | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=3860ffff (li r3,-1); next proven start at +0x8 |
|
||||
| 808603ac | 0x808603ac | 8085fa18 | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=3860ffff (li r3,-1); next proven start at +0x8 |
|
||||
| 8086047c | 0x8086047c | 8085fae8 | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=38600000 (li r3,0); next proven start at +0x8 |
|
||||
| 80862ab0 | 0x80862ab0 | 8086211c | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=3860ffff (li r3,-1); next proven start at +0x8 |
|
||||
| 80862e1c | 0x80862e1c | 80862488 | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=3860ffff (li r3,-1); next proven start at +0x8 |
|
||||
| 80863618 | 0x80863618 | 80862c84 | ptr+b+bc | conditional-branch target (inside a function); prev=90030000 (stw r0,0(r3)) word=2c040000 (cmpwi cr0,r4,0) |
|
||||
| 80863710 | 0x80863710 | 80862d7c | ptr+b+bc | conditional-branch target (inside a function); prev=90030000 (stw r0,0(r3)) word=2c040000 (cmpwi cr0,r4,0) |
|
||||
| 80863814 | 0x80863814 | 80862e80 | ptr+b+bc | conditional-branch target (inside a function); prev=901f0000 (stw r0,0(r31)) word=80010014 (lwz r0,20(r1)); next proven start at +0x18 |
|
||||
| 80869368 | 0x80869368 | 808689d4 | jt+bc | conditional-branch target (inside a function); prev=4e800420 (bctr) word=38000000 (li r0,0) |
|
||||
| 8086e824 | 0x8086e824 | 8086de90 | - | prev=3860007c (li r3,124) word=38840000 (addi r4,r4,0) |
|
||||
| 80877b48 | 0x80877b48 | 808771b4 | - | prev=2c030000 (cmpwi cr0,r3,0) word=41820014 (bc) |
|
||||
|
||||
## Identity (low-memory) entries (15)
|
||||
|
||||
Below 0x80004000 the PAL address is kept unchanged. These addresses are outside every DOL/REL section, so the binaries cannot vouch for them; the evidence column shows whether any NTSC-J code branches to them.
|
||||
|
||||
| address | name | binary evidence |
|
||||
|---|---|---|
|
||||
| 800018a8 | 0x800018a8 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001d50 | 0x80001d50 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001d6c | 0x80001d6c | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001d90 | 0x80001d90 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001dc0 | 0x80001dc0 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001de8 | 0x80001de8 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001dec | 0x80001dec | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001e14 | 0x80001e14 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001e30 | 0x80001e30 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001f1c | 0x80001f1c | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001f40 | 0x80001f40 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001f54 | 0x80001f54 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80002440 | 0x80002440 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 8000245c | 0x8000245c | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 8000249c | __TRKreset | low memory, binary evidence: UNVERIFIED (-) |
|
||||
@@ -5,7 +5,7 @@ workspace_root: ../..
|
||||
# the facts that differ per region: the small-data bases the DOL's __init_registers installs, the
|
||||
# StaticR.rel load address and the clean-input digests. The function map is the PAL map ported
|
||||
# through the community region table and validated against these binaries by
|
||||
# tools/region/port_map.py; MAP_REPORT.md next to it carries the numbers.
|
||||
# tools/region/port_map.py.
|
||||
project:
|
||||
id: mkwii-rmcj01
|
||||
display_name: Mario Kart Wii NTSC-J
|
||||
|
||||
Generated
+1
-1
@@ -1,5 +1,5 @@
|
||||
# NTSC-U (RMCE01) function map, ported from ../mkwii/MAP.txt (PAL RMCP01) by tools/region/port_map.py.
|
||||
# Every entry was validated against the RMCE01 main.dol/StaticR.rel; see MAP_REPORT.md next to this file.
|
||||
# Every entry was validated against the RMCE01 main.dol/StaticR.rel.
|
||||
# Verdicts: PROVEN=12178, REFERENCED=12573, PLAUSIBLE=4500, IDENTITY=15, INTERPOLATED=0, ADDED=143 (binary-proven entries no PAL entry covers); entries=29409
|
||||
800018a8 0x800018a8
|
||||
80001d50 0x80001d50
|
||||
|
||||
@@ -1,948 +0,0 @@
|
||||
# NTSC-U (RMCE01) function map port report
|
||||
|
||||
Generated by `tools/region/port_map.py`. Deterministic; no timestamps.
|
||||
|
||||
## Summary
|
||||
|
||||
- PAL map: `projects/mkwii/MAP.txt` (29792 entries, 20193 named)
|
||||
- NTSC-U DOL: `main.dol` sha256 `d2beec1b1645fcd134efe9e7e63774b546667764ed8d431029daccd725995694` entry `0x800060A4`
|
||||
- NTSC-U REL: `StaticR.rel` sha256 `1168107f8fdef27a356df76036db55afe4fbf7752606dbac991726701133a617` load `0x8050BF60` (module 1, v3, prolog `0x8054F2FC`, epilog `0x8054F348`, unresolved `0x8054F390`)
|
||||
- Chunk table: 299 PAL->NTSC-U chunks (mkw-sp port.py, MIT); no overlaps, all deltas word-aligned
|
||||
- Output map: `projects/mkwii-ntsc-u/MAP.txt` with **29266** entries (19944 named); `projects/mkwii-ntsc-u/region_port.json` carries the chunk table.
|
||||
|
||||
### Verdict totals (all PAL entries)
|
||||
|
||||
| verdict | entries | low-mem | DOL | REL | emitted |
|
||||
|---|---|---|---|---|---|
|
||||
| PROVEN | 12178 | 0 | 6572 | 5606 | yes |
|
||||
| REFERENCED | 12573 | 0 | 3273 | 9300 | yes |
|
||||
| PLAUSIBLE | 4500 | 0 | 848 | 3652 | yes |
|
||||
| IDENTITY | 15 | 15 | 0 | 0 | yes |
|
||||
| INTERPOLATED | 0 | 0 | 0 | 0 | yes |
|
||||
| UNVERIFIED | 206 | 0 | 125 | 81 | no |
|
||||
| DROPPED | 320 | 0 | 162 | 158 | no |
|
||||
| total | 29792 | 15 | 10980 | 18797 | |
|
||||
|
||||
Emitted after deduplication: PROVEN=12178, REFERENCED=12573, PLAUSIBLE=4500, IDENTITY=15, INTERPOLATED=0; total 29266 ported entries, plus 143 binary-proven entries no PAL entry covers (section below) = **29409** lines in MAP.txt. UNVERIFIED and DROPPED entries are never written to MAP.txt.
|
||||
|
||||
### Binary-proven entries added (step H: NTSC-U entry points no ported PAL entry covers)
|
||||
|
||||
Emitted as unnamed placeholders (`hexaddr 0xhexaddr`). Strong classes are taken as proven; the pointer-referenced classes must also pass the structural check (not a conditional-branch target, terminator before, decodable first instruction) because no PAL entry vouches for them. Each address is counted once, under the first class that applies.
|
||||
|
||||
| evidence class | added |
|
||||
|---|---|
|
||||
| ctors/dtors table entry (DOL) | 0 |
|
||||
| ctors/dtors table entry (REL) | 11 |
|
||||
| REL prolog/epilog/unresolved | 0 |
|
||||
| DOL entry point | 0 |
|
||||
| bl target (DOL text) | 0 |
|
||||
| bl target (REL R_PPC_REL24 relocation into the DOL) | 1 |
|
||||
| bl target (REL text, link-resolved) | 13 |
|
||||
| extabindex function record | 0 |
|
||||
| pointer-referenced text address (DOL data word) | 0 |
|
||||
| pointer-referenced text address (REL R_PPC_ADDR32) | 118 |
|
||||
| total added | 143 |
|
||||
|
||||
Constructor/destructor tables: DOL .ctors 43 entries, 0 previously missing from the map; DOL .dtors 2 entries, 0 previously missing from the map; REL .ctors 192 entries, 11 previously missing from the map; REL .dtors 1 entries, 0 previously missing from the map.
|
||||
Not added: 59 pointer-referenced addresses that failed the structural check (jump-table targets and similar), 110058 addresses with only weak evidence (conditional/unconditional branch targets, lis/addi pairs, jump-table-like runs). Strong additions that are also a conditional-branch target: 0.
|
||||
|
||||
ctors/dtors table entry (REL) (11):
|
||||
|
||||
```text
|
||||
805b69b4 8061e8d8 80623dec 80625410 807d6b6c 807df5a0 807ede74 8083a93c 8083e2ec 808425bc 808428cc
|
||||
```
|
||||
|
||||
bl target (REL R_PPC_REL24 relocation into the DOL) (1):
|
||||
|
||||
```text
|
||||
80243f18
|
||||
```
|
||||
|
||||
bl target (REL text, link-resolved) (13):
|
||||
|
||||
```text
|
||||
8054f70c 8054f734 805512e4 805b3a8c 8064c754 8065cbe0 8065cc44 8065cc98 807139a0 807dc484 807ede88 8083c2e0
|
||||
8086868c
|
||||
```
|
||||
|
||||
pointer-referenced text address (REL R_PPC_ADDR32) (118):
|
||||
|
||||
```text
|
||||
80551328 80551380 80551384 80551388 80551394 805513a0 8059eea4 805a0544 805a0584 805a05c4 805a0d20 805a2e30
|
||||
805b6984 806065fc 8060a958 80623d14 80623d20 80623d2c 80623d5c 80623d8c 80623dbc 806266f0 806c708c 806c7090
|
||||
806c7094 806d92e0 806eca4c 806eca50 8070ff20 8072297c 80723690 80723694 80724760 80724768 80726c78 80726c7c
|
||||
80726c84 80726c8c 80726c94 80726c9c 80726ca4 80726cac 80726cb4 80726cb8 80726cf8 80726d00 80726d08 80726d10
|
||||
80726d18 80726d20 80726d28 80726d70 80726da0 807276d0 807276d8 807276e0 807276e8 80727730 80727760 8073f38c
|
||||
8076005c 807600c0 807600c8 807600d0 807683b8 80775640 80775648 80775650 80777cf4 80777db0 80777e4c 80777e58
|
||||
80777e64 8077b7b4 8077ccc8 8077ccd0 8079f1a8 8079f1fc 807d4ef8 807d6b50 807dad60 807dad68 807dad70 807df580
|
||||
807df588 807df594 807df5cc 807df5d4 807df5dc 807ede0c 807ede68 807edf58 807f7e94 8081bc00 8083e2d4 8083e2e0
|
||||
8083e318 8083e320 8083e328 8083e330 808425b0 808425d0 808425dc 8084264c 80842650 80842654 80842664 808426b8
|
||||
8084276c 808427fc 80842858 80842864 808428c0 808437f4 80850178 80852418 80855178 808587e8
|
||||
```
|
||||
|
||||
First-instruction quality of emitted entries (strong = typical prologue/first instruction, valid = any decodable instruction): IDENTITY/n/a=15, PLAUSIBLE/strong=4224, PLAUSIBLE/valid=276, PROVEN/strong=11986, PROVEN/valid=192, REFERENCED/strong=12503, REFERENCED/valid=70
|
||||
|
||||
### Reading the numbers
|
||||
|
||||
- 24751 of 29792 entries land on an address the NTSC-U binaries reference as code (call target, exception-table record, entry point, function-pointer table, jump table for case labels); 4500 more sit right after a function terminator (or are verified switch dispatch sites) with a decodable first instruction.
|
||||
- 206 UNVERIFIED entries are withheld: see the per-class breakdown in the Unverified section. None of the no-evidence ones lies near a chunk edge; they are surrounded by validated neighbours inside their chunk, which points at PAL-map noise (mid-function addresses, round addresses, names misplaced by one instruction) rather than at the chunk table.
|
||||
- 320 DROPPED entries: jump tables and other data symbols the PAL map carries, PAL-only code regions with no NTSC-U counterpart, and chunk-table holes with no interpolation gap.
|
||||
- The PAL project uses sda_base/sda2_base 0x8038CC00/0x8038EFA0; the NTSC-U values read below are the ones an NTSC-U project must configure.
|
||||
|
||||
### Non-function labels carried by the PAL map
|
||||
|
||||
The PAL map contains Ghidra-style labels that are not function starts: `*_caseD_N` switch case labels (validated here by a jump-table reference at the ported address), `*_switch` dispatch points (validated as `mtctr`+`bctr`), and `switchdataD_*` jump tables (data, never code). They are ported with the same rules; the verdict spread per class:
|
||||
|
||||
| class | entries | PROVEN | REFERENCED | PLAUSIBLE | IDENTITY | INTERPOLATED | UNVERIFIED | DROPPED |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| case | 2359 | 0 | 2358 | 1 | 0 | 0 | 0 | 0 |
|
||||
| switch | 197 | 1 | 0 | 196 | 0 | 0 | 0 | 0 |
|
||||
| data | 140 | 0 | 0 | 0 | 0 | 0 | 0 | 140 |
|
||||
|
||||
### Chunk-edge extent check
|
||||
|
||||
249 emitted chunk-ported entries sit at a chunk edge (their PAL successor is not ported by the same chunk). For these the PAL extent (distance to the next PAL entry) was compared with the NTSC-U extent (distance to the next emitted entry): 48 named and 20 unnamed entries differ. A difference means the function's size changed, the successor was dropped, or the chunk edge is sloppy; the address is still a verified entry point, but for named entries the name deserves a second look.
|
||||
|
||||
| PAL | name | NTSC-U | verdict | PAL extent | NTSC-U extent | PAL successor |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 80008004 | setDiscReadErrorMessage | 80008004 | PROVEN | 0xf0 | 0xb0 | 0x800080f4 (PROVEN) |
|
||||
| 8000ac50 | SystemManager::Init | 8000ac10 | PROVEN | 0x328 | 0x2c8 | SystemManager::GetCountry (PLAUSIBLE) |
|
||||
| 8000c094 | __DBEXIWriteRam | 80021a28 | PROVEN | 0xe0 | 0xe8 | _ftell (PROVEN) |
|
||||
| 80240e0c | EGG::EGG__GlobalScreenCapture__AsRGB565 | 80244d28 | PROVEN | 0xc | 0x2c7328 | EGG::StateGX::Initialize (PROVEN) |
|
||||
| 80244d6c | nw4r::g3d::ScnRfl::IsDerivedFrom | 80243eb0 | REFERENCED | 0x68 | 0x34c | switchdataD_80274dd4 (DROPPED) |
|
||||
| 80550468 | isFastStaffGhostUnlocked | 80551204 | PROVEN | 0xe0 | 0x1a8 | 0x80550548 (PLAUSIBLE) |
|
||||
| 805556a8 | Random::NextFloatLimited | 8054f688 | PROVEN | 0x84 | 0x178 | 0x8055572c (PLAUSIBLE) |
|
||||
| 805758a4 | Kart::Zipper::End | 805b042c | PROVEN | 0x40 | 0x160 | 0x805758e4 (DROPPED) |
|
||||
| 80583b88 | Kart::Movement::UpdateStickyRoad | 8057d324 | PROVEN | 0x3a4 | 0x3e4 | 0x80583f2c (PROVEN) |
|
||||
| 8059ea3c | ScnMgrMii::LoadLights | 805b3a24 | REFERENCED | 0x68 | 0xb8 | 0x8059eaa4 (PLAUSIBLE) |
|
||||
| 805aaf64 | AutoCameraMoverRace::__ct | 8059ff34 | PROVEN | 0x610 | 0x6d0 | AutoCameraMoverRace::ResetActions (PROVEN) |
|
||||
| 805be610 | PushButton::GetRuntimeTypeInfo | 805b6978 | REFERENCED | 0xc | 0x5c | PushButton::TriggerPtmf (DROPPED) |
|
||||
| 805bf290 | Pages::MKChannelExplanation::OnBackPress | 80623ccc | REFERENCED | 0x48 | 0x13c | 0x805bf2d8 (REFERENCED) |
|
||||
| 805c576c | TriggerPtmf | 806253e0 | REFERENCED | 0x30 | 0x44 | 0x805c579c (DROPPED) |
|
||||
| 805cbea4 | Pages::EndingMovie::OnInit | 806264ec | REFERENCED | 0x204 | 0x270 | Pages::EndingMovie::OnActivate (DROPPED) |
|
||||
| 80620c5c | RKSYSRequester::Init | 805efdd0 | PROVEN | 0x148 | 0x120 | RKSYSRequester::Close (PROVEN) |
|
||||
| 80634e44 | SectionMgr::Init | 80603f90 | PROVEN | 0x15c | 0x178 | SectionMgr::GetBootSectionSceneId (PROVEN) |
|
||||
| 8063748c | SheetSelectControlScaleFade::GetArrowAnimationType | 806065f4 | REFERENCED | 0x8 | 0xb0 | SheetSelectControlScaleFade::GetRuntimeTypeInfo (REFERENCED) |
|
||||
| 80637a20 | SystemBMGHolder::Init | 8064c710 | PROVEN | 0x6c | 0x7c | SystemBMGHolder::GetMessage (DROPPED) |
|
||||
| 8063bbe4 | Pages::TitleMovie::OnInit | 8060a844 | REFERENCED | 0x114 | 0x1e0 | Pages::TitleMovie::OnActivate (DROPPED) |
|
||||
| 80651bbc | Pages::SELECTStageMgr::TriggerPtmf | 8061e8a8 | REFERENCED | 0x30 | 0x44 | CountDownTimerPage_cpp_sinit_ (PROVEN) |
|
||||
| 80665480 | RKNet::RH1Handler::ExportDefaultPacket2 | 8065cb28 | PROVEN | 0xb8 | 0x24c | 0x80665538 (PROVEN) |
|
||||
| 806d02b4 | Objects::Heyho::GetPropertiesBitfield | 806c3d28 | REFERENCED | 0x8 | 0x10 | 0x806d02bc (REFERENCED) |
|
||||
| 806d5c1c | Objects::K_car_tire::__dt | 806c704c | REFERENCED | 0x40 | 0x4c | Objects::HighwayManager::LoadClipInfo (DROPPED) |
|
||||
| 806ec7b8 | Objects::HwanwanBall::GetPropertiesBitfield | 806f1e64 | REFERENCED | 0x8 | 0x10 | Objects::HwanwanBall::__dt(thunk) (DROPPED) |
|
||||
| 806f88f4 | Audio::Handle::__dt | 806f38e4 | PLAUSIBLE | 0x40 | 0x94 | Audio::SinglePlayer::__dt (PROVEN) |
|
||||
| 806fa2ac | Audio::StreamsMgr::PrepareStreams | 806f52f0 | PROVEN | 0x150 | 0x1a4 | Audio::StreamsMgr::ChangeStreamVolume (PLAUSIBLE) |
|
||||
| 806fe1b4 | EGG::SoundHeapMgr::LoadState(using) | 806f924c | PLAUSIBLE | 0x8c | 0xe4 | EGG::SoundHeapMgr::GetCurrentLevel(using) (REFERENCED) |
|
||||
| 807179b4 | Audio::Manager::SetupMemoryArchive | 8070ff10 | REFERENCED | 0x10 | 0x9c | Audio::Manager::HoldSound (REFERENCED) |
|
||||
| 8072a88c | AI::CPUDriving::IsBattle | 80723688 | REFERENCED | 0x8 | 0x10 | 0x8072a894 (REFERENCED) |
|
||||
| 8076f2d8 | Objects::ItemDropper::OnNormalItemCollision | 8077b7b0 | REFERENCED | 0x4 | 0x8 | Objects::ItemDropper::OnImperviousItemCollision (PLAUSIBLE) |
|
||||
| 80773c08 | Objects::MiiKanban::OnStart | 8077ccbc | REFERENCED | 0xc | 0x54 | Objects::MiiKanban::GetPropertiesBitfield (DROPPED) |
|
||||
| 807a8138 | Item::ObjGesso::CreateArray | 8079f12c | REFERENCED | 0x7c | 0xec | Item::Player::UseBlooper (REFERENCED) |
|
||||
| 807a9d3c | Item::Player::UseMushroom | 807d6afc | REFERENCED | 0x54 | 0x98 | Item::ObjKinoko::InitSelf (DROPPED) |
|
||||
| 807d9b0c | DriverCalcWorldCB::ExecCallbackC | 807dacec | REFERENCED | 0x74 | 0x8c | DriverCalcWorldCB::ExecCallbackC(thunk) (DROPPED) |
|
||||
| 807dbcc4 | ToadetteHair::CalcWorldCB::__dt(thunk) | 807dc47c | REFERENCED | 0x8 | 0x90 | 0x807dbccc (PLAUSIBLE) |
|
||||
| 807e2514 | StageButton::GetRuntimeTypeInfo | 8083e2c8 | REFERENCED | 0xc | 0x74 | CtrlMenuMovieButton::GetMovieCount (DROPPED) |
|
||||
| 807e5604 | CourseButton::GetRuntimeTypeInfo | 807df574 | REFERENCED | 0xc | 0x70 | CtrlMenuCourseSelectCup::GetRuntimeTypeInfo (DROPPED) |
|
||||
| 807ee990 | CtrlRaceGhostDiffTime::__dt | 8084252c | REFERENCED | 0x84 | 0x3bc | CtrlRaceGhostDiffTime::GetRuntimeTypeInfo (REFERENCED) |
|
||||
| 807f88e8 | CtrlRaceTime::OnFocus | 807edde8 | REFERENCED | 0x24 | 0x1b0 | CtrlRaceTime::__dt (DROPPED) |
|
||||
| 807f9278 | GeoHitTableHolder::__ct | 808436b0 | PROVEN | 0xd0 | 0x1f4 | GeoHitTableHolder::__dt (DROPPED) |
|
||||
| 8080597c | Objects::bblock::UpdateModelScale | 807f7e04 | REFERENCED | 0x90 | 0xd0 | Objects::bblock::__dt (REFERENCED) |
|
||||
| 80833474 | MenuKartModelMgr::GetMenuKartModel | 8085014c | PROVEN | 0x2c | 0x6c | MenuKartModelMgr::__dt (DROPPED) |
|
||||
| 80833840 | ObjectCollisionCuboid::__ct | 8081b940 | PROVEN | 0x2c0 | 0x2c8 | ObjectCollisionCuboid::SetPositionAndScale (REFERENCED) |
|
||||
| 8083b014 | Pages::BattleKartSelect::__dt | 8085236c | REFERENCED | 0xac | 0xb8 | Pages::BattleKartSelect::GetRuntimeTypeInfo (DROPPED) |
|
||||
| 80852be0 | Pages::VSModeSelect::__dt | 80858768 | REFERENCED | 0x80 | 0x8c | Pages::VSModeSelect::GetRuntimeTypeInfo (REFERENCED) |
|
||||
| 8085c39c | TriggerPtmf | 8083a90c | REFERENCED | 0x30 | 0x44 | 0x8085c3cc (PROVEN) |
|
||||
| 80860e08 | GetMapIconPaneName | 8083c1bc | PROVEN | 0x124 | 0x534 | 0x80860f2c (PROVEN) |
|
||||
|
||||
### SDA bases read from the NTSC-U `__init_registers`
|
||||
|
||||
- `__init_registers` PAL `80006210` -> NTSC-U `80006210`
|
||||
- Result: **r13=0x80388880 (matches expectation); r2=0x8038AC20 (matches expectation)**
|
||||
- All lis/ori(addi) register values materialised in the function: r1=0x80394E00, r2=0x8038AC20, r13=0x80388880
|
||||
|
||||
```text
|
||||
80006210 38000000 li r0,0
|
||||
80006214 38600000 li r3,0
|
||||
80006218 38800000 li r4,0
|
||||
8000621c 38a00000 li r5,0
|
||||
80006220 38c00000 li r6,0
|
||||
80006224 38e00000 li r7,0
|
||||
80006228 39000000 li r8,0
|
||||
8000622c 39200000 li r9,0
|
||||
80006230 39400000 li r10,0
|
||||
80006234 39600000 li r11,0
|
||||
80006238 39800000 li r12,0
|
||||
8000623c 39c00000 li r14,0
|
||||
80006240 39e00000 li r15,0
|
||||
80006244 3a000000 li r16,0
|
||||
80006248 3a200000 li r17,0
|
||||
8000624c 3a400000 li r18,0
|
||||
80006250 3a600000 li r19,0
|
||||
80006254 3a800000 li r20,0
|
||||
80006258 3aa00000 li r21,0
|
||||
8000625c 3ac00000 li r22,0
|
||||
80006260 3ae00000 li r23,0
|
||||
80006264 3b000000 li r24,0
|
||||
80006268 3b200000 li r25,0
|
||||
8000626c 3b400000 li r26,0
|
||||
80006270 3b600000 li r27,0
|
||||
80006274 3b800000 li r28,0
|
||||
80006278 3ba00000 li r29,0
|
||||
8000627c 3bc00000 li r30,0
|
||||
80006280 3be00000 li r31,0
|
||||
80006284 3c208039 lis r1,0x8039
|
||||
80006288 60214e00 ori r1,r1,0x4e00
|
||||
8000628c 3c408038 lis r2,0x8038
|
||||
80006290 6042ac20 ori r2,r2,0xac20
|
||||
80006294 3da08038 lis r13,0x8038
|
||||
80006298 61ad8880 ori r13,r13,0x8880
|
||||
8000629c 4e800020 blr
|
||||
```
|
||||
|
||||
### Save/restore thunk families (resolved by name in GuestSaveRestoreThunks.cs)
|
||||
|
||||
**`_save_gpr_N`** (stw rN,-off(r11)): OK - full run to r31 verified
|
||||
|
||||
| name | PAL | NTSC-U | verdict | expected | actual | decoded | ok |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| _save_gpr_14 | 8002156c | 80020a0c | PROVEN | 91cbffb8 | 91cbffb8 | stw r14,-72(r11) | yes |
|
||||
| _save_gpr_15 | 80021570 | 80020a10 | PROVEN | 91ebffbc | 91ebffbc | stw r15,-68(r11) | yes |
|
||||
| _save_gpr_16 | 80021574 | 80020a14 | PROVEN | 920bffc0 | 920bffc0 | stw r16,-64(r11) | yes |
|
||||
| _save_gpr_17 | 80021578 | 80020a18 | PROVEN | 922bffc4 | 922bffc4 | stw r17,-60(r11) | yes |
|
||||
| _save_gpr_18 | 8002157c | 80020a1c | PROVEN | 924bffc8 | 924bffc8 | stw r18,-56(r11) | yes |
|
||||
| _save_gpr_19 | 80021580 | 80020a20 | PROVEN | 926bffcc | 926bffcc | stw r19,-52(r11) | yes |
|
||||
| _save_gpr_20 | 80021584 | 80020a24 | PROVEN | 928bffd0 | 928bffd0 | stw r20,-48(r11) | yes |
|
||||
| _save_gpr_21 | 80021588 | 80020a28 | PROVEN | 92abffd4 | 92abffd4 | stw r21,-44(r11) | yes |
|
||||
| _save_gpr_22 | 8002158c | 80020a2c | PROVEN | 92cbffd8 | 92cbffd8 | stw r22,-40(r11) | yes |
|
||||
| _save_gpr_23 | 80021590 | 80020a30 | PROVEN | 92ebffdc | 92ebffdc | stw r23,-36(r11) | yes |
|
||||
| _save_gpr_24 | 80021594 | 80020a34 | PROVEN | 930bffe0 | 930bffe0 | stw r24,-32(r11) | yes |
|
||||
| _save_gpr_25 | 80021598 | 80020a38 | PROVEN | 932bffe4 | 932bffe4 | stw r25,-28(r11) | yes |
|
||||
| _save_gpr_26 | 8002159c | 80020a3c | PROVEN | 934bffe8 | 934bffe8 | stw r26,-24(r11) | yes |
|
||||
| _save_gpr_27 | 800215a0 | 80020a40 | PROVEN | 936bffec | 936bffec | stw r27,-20(r11) | yes |
|
||||
|
||||
**`_rest_gpr_N`** (lwz rN,-off(r11)): OK - full run to r31 verified
|
||||
|
||||
| name | PAL | NTSC-U | verdict | expected | actual | decoded | ok |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| _rest_gpr_14 | 800215b8 | 80020a58 | PROVEN | 81cbffb8 | 81cbffb8 | lwz r14,-72(r11) | yes |
|
||||
| _rest_gpr_15 | 800215bc | 80020a5c | PROVEN | 81ebffbc | 81ebffbc | lwz r15,-68(r11) | yes |
|
||||
| _rest_gpr_16 | 800215c0 | 80020a60 | PROVEN | 820bffc0 | 820bffc0 | lwz r16,-64(r11) | yes |
|
||||
| _rest_gpr_17 | 800215c4 | 80020a64 | PROVEN | 822bffc4 | 822bffc4 | lwz r17,-60(r11) | yes |
|
||||
| _rest_gpr_18 | 800215c8 | 80020a68 | PROVEN | 824bffc8 | 824bffc8 | lwz r18,-56(r11) | yes |
|
||||
| _rest_gpr_19 | 800215cc | 80020a6c | PROVEN | 826bffcc | 826bffcc | lwz r19,-52(r11) | yes |
|
||||
| _rest_gpr_20 | 800215d0 | 80020a70 | PROVEN | 828bffd0 | 828bffd0 | lwz r20,-48(r11) | yes |
|
||||
| _rest_gpr_21 | 800215d4 | 80020a74 | PROVEN | 82abffd4 | 82abffd4 | lwz r21,-44(r11) | yes |
|
||||
| _rest_gpr_22 | 800215d8 | 80020a78 | PROVEN | 82cbffd8 | 82cbffd8 | lwz r22,-40(r11) | yes |
|
||||
| _rest_gpr_23 | 800215dc | 80020a7c | PROVEN | 82ebffdc | 82ebffdc | lwz r23,-36(r11) | yes |
|
||||
| _rest_gpr_24 | 800215e0 | 80020a80 | PROVEN | 830bffe0 | 830bffe0 | lwz r24,-32(r11) | yes |
|
||||
| _rest_gpr_25 | 800215e4 | 80020a84 | PROVEN | 832bffe4 | 832bffe4 | lwz r25,-28(r11) | yes |
|
||||
| _rest_gpr_26 | 800215e8 | 80020a88 | PROVEN | 834bffe8 | 834bffe8 | lwz r26,-24(r11) | yes |
|
||||
| _rest_gpr_27 | 800215ec | 80020a8c | PROVEN | 836bffec | 836bffec | lwz r27,-20(r11) | yes |
|
||||
|
||||
**`_save_fpr_N`** (stfd rN,-off(r11)): OK - full run to r31 verified
|
||||
|
||||
| name | PAL | NTSC-U | verdict | expected | actual | decoded | ok |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| _save_fpr_23 | 800214f8 | 80020998 | PROVEN | daebffb8 | daebffb8 | stfd f23,-72(r11) | yes |
|
||||
| _save_fpr_28 | 8002150c | 800209ac | PROVEN | db8bffe0 | db8bffe0 | stfd f28,-32(r11) | yes |
|
||||
|
||||
**`_rest_fpr_N`** (lfd rN,-off(r11)): OK - full run to r31 verified
|
||||
|
||||
| name | PAL | NTSC-U | verdict | expected | actual | decoded | ok |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| _rest_fpr_23 | 80021544 | 800209e4 | PROVEN | caebffb8 | caebffb8 | lfd f23,-72(r11) | yes |
|
||||
| _rest_fpr_28 | 80021558 | 800209f8 | PROVEN | cb8bffe0 | cb8bffe0 | lfd f28,-32(r11) | yes |
|
||||
|
||||
## Evidence set K (NTSC-U function entry points proven by the binaries)
|
||||
|
||||
- Strong (bl target / extabindex record / entry point): **12203** addresses
|
||||
- Medium only (function-pointer word, ADDR32/ADDR16 relocation, lis/addi pair): **11591** addresses
|
||||
- Weak only (`b` target, not used for verdicts): 22598 addresses
|
||||
- Jump-table-like pointer runs (excluded from REFERENCED): 260 runs, 1756 addresses referenced only from them
|
||||
|
||||
| source | count |
|
||||
|---|---|
|
||||
| dol.text0: bl sites | 18 |
|
||||
| dol.text0: b sites | 11 |
|
||||
| dol.text0: conditional-branch targets (negative signal) | 34 |
|
||||
| dol.text0: lis/addi code-address pairs | 27 |
|
||||
| dol.text1: bl sites | 36828 |
|
||||
| dol.text1: b sites | 22755 |
|
||||
| dol.text1: conditional-branch targets (negative signal) | 47327 |
|
||||
| dol.text1: lis/addi code-address pairs | 858 |
|
||||
| rel.text: bl sites | 37502 |
|
||||
| rel.text: b sites | 25447 |
|
||||
| rel.text: conditional-branch targets (negative signal) | 64515 |
|
||||
| dol.ctors: table entries | 43 |
|
||||
| dol.dtors: table entries | 2 |
|
||||
| rel.ctors: table entries (unique targets) | 192 |
|
||||
| rel.dtors: table entries (unique targets) | 1 |
|
||||
| dol.extabindex: function records | 180 |
|
||||
| dol.extabindex: non-record words (footer/padding) | 2 |
|
||||
| rel: REL24 bl relocations | 18813 |
|
||||
| rel: REL24 b relocations | 155 |
|
||||
| rel: ADDR16_LO/HI/HA relocations into text | 2172 |
|
||||
| rel: ADDR32 relocations into text | 31286 |
|
||||
| rel: function-pointer words | 30068 |
|
||||
| rel: pointer runs classified as jump tables (words) | 1218 |
|
||||
| dol: function-pointer words | 4096 |
|
||||
| dol: pointer runs classified as jump tables (words) | 1824 |
|
||||
|
||||
REL relocation type counts (module, type): (0,1)=156, (0,4)=1688, (0,6)=1287, (0,10)=18968, (0,201)=1, (0,202)=2, (0,203)=1, (1,1)=33010, (1,4)=32005, (1,6)=27641, (1,202)=5, (1,203)=1
|
||||
|
||||
## Binary layout check (parsed headers vs vendored mkw-sp table)
|
||||
|
||||
- DOL init: 80004000-80006460 OK
|
||||
- DOL extab: 80006460-80006a20 OK
|
||||
- DOL extabindex: 80006a20-800072c0 OK
|
||||
- DOL text: 800072c0-80244d40 OK
|
||||
- DOL ctors: 80244d40-80244e00 OK
|
||||
- DOL dtors: 80244e00-80244e20 OK
|
||||
- DOL rodata: 80244e40-80258260 OK
|
||||
- DOL data: 80258260-8029fd00 OK
|
||||
- DOL sdata: 80380880-80381c40 OK
|
||||
- DOL sdata2: 80382c20-80384dc0 OK
|
||||
- REL text: 8050c034-8088afd0 OK
|
||||
- REL ctors: 8088afd0-8088b2d4 OK
|
||||
- REL dtors: 8088b2d4-8088b2e0 OK
|
||||
- REL rodata: 8088b2e0-808ae520 OK
|
||||
- REL data: 808ae520-808d8c7c OK
|
||||
- REL bss: 809b8f20-809c07d0 OK
|
||||
|
||||
## Interpolation gaps (step C.2)
|
||||
|
||||
| PAL gap | NTSC-U gap | unported | K candidates | outcome |
|
||||
|---|---|---|---|---|
|
||||
| 80225f04..80226734 | 80225e64..802263b0 | 8 | 0 | rejected: count mismatch |
|
||||
| 80244c0c..80510468 | 80243d50..8050c0e8 | 154 | 0 | rejected: 8 entries from other chunks land inside the NTSC gap |
|
||||
| 8051088c..80510d7c | 8050c50c..8050c908 | 2 | 0 | rejected: count mismatch |
|
||||
| 80553788..80553b88 | 8054d830..8054db68 | 7 | 0 | rejected: count mismatch |
|
||||
| 805758a4..80575a44 | 805b042c..8056f1e0 | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 805a0550..805a0868 | 8059682c..805b3ca4 | 4 | 0 | rejected: 502 entries from other chunks land inside the NTSC gap |
|
||||
| 805a1424..805a15e0 | 805b4860..805b4a0c | 2 | 0 | rejected: count mismatch |
|
||||
| 805be430..805be66c | 805b678c..8062310c | 2 | 0 | rejected: 3323 entries from other chunks land inside the NTSC gap |
|
||||
| 805bee4c..805bfbf4 | 80623888..805b71f8 | 7 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 805c4768..805c57b0 | 806243dc..805bb800 | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 805cbd88..805cc3b8 | 806263d0..8062695c | 1 | 0 | rejected: count mismatch |
|
||||
| 805dbd94..805dc840 | 8062c308..8062cd5c | 1 | 0 | rejected: count mismatch |
|
||||
| 80637a20..80637ad0 | 8064c710..80606730 | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 8063bb08..8063c0ac | 8060a768..8060ac8c | 1 | 0 | rejected: count mismatch |
|
||||
| 8064ab08..8064aef8 | 8064e290..80617be4 | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 8065b048..8065b4e8 | 80656bc0..80656ecc | 5 | 0 | rejected: count mismatch |
|
||||
| 806c48a8..806c5354 | 806e6594..806e7024 | 1 | 0 | rejected: count mismatch |
|
||||
| 806c5de0..806c63b0 | 806e7ab0..806e8078 | 1 | 0 | rejected: count mismatch |
|
||||
| 806ce03c..806ce828 | 806e99b8..806c229c | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 806d2368..806d2908 | 806ec248..806c3d38 | 4 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 806d5700..806d5c74 | 806c6b30..806ec7e8 | 1 | 0 | rejected: 715 entries from other chunks land inside the NTSC gap |
|
||||
| 806f7610..806f7828 | 806f3188..80713adc | 4 | 0 | rejected: 834 entries from other chunks land inside the NTSC gap |
|
||||
| 806f7828..806f7aa8 | 80713adc..80713d08 | 1 | 0 | rejected: count mismatch |
|
||||
| 80700184..80700230 | 80715c24..80715c44 | 1 | 0 | rejected: count mismatch |
|
||||
| 80728088..807284d0 | 8073e0f0..8073e528 | 3 | 0 | rejected: count mismatch |
|
||||
| 807284d0..8072868c | 8073e528..8073e6e0 | 1 | 0 | rejected: count mismatch |
|
||||
| 80729218..80729350 | 8073f26c..80722144 | 3 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 8072d9d4..8072dfd0 | 807267e8..8073f394 | 18 | 0 | rejected: 612 entries from other chunks land inside the NTSC gap |
|
||||
| 8072fb7c..80730108 | 80740f40..807414b4 | 3 | 0 | rejected: count mismatch |
|
||||
| 807308dc..80730b40 | 8072752c..80741544 | 3 | 0 | rejected: 664 entries from other chunks land inside the NTSC gap |
|
||||
| 8075daec..8075db3c | 80775608..80750f60 | 3 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 80769280..80769634 | 80777b88..80777e90 | 8 | 0 | rejected: count mismatch |
|
||||
| 8076d044..8076ebe0 | 8075a95c..8077b0b8 | 1 | 0 | rejected: 665 entries from other chunks land inside the NTSC gap |
|
||||
| 80771fb0..80772704 | 8075f1c8..8077b7b8 | 1 | 0 | rejected: 627 entries from other chunks land inside the NTSC gap |
|
||||
| 80773930..80773c5c | 8077c9e4..8075f91c | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 80773d00..807743a4 | 8075f9c0..80760110 | 1 | 0 | rejected: count mismatch |
|
||||
| 8077c8f4..8077cec8 | 80767e24..8077d54c | 1 | 0 | rejected: 464 entries from other chunks land inside the NTSC gap |
|
||||
| 807a9c98..807a9ec0 | 807d6a58..8079f218 | 5 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 807d9798..807d9b98 | 807da978..807cad0c | 3 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 807dc8b8..807dcda0 | 807cc320..807cc780 | 1 | 0 | rejected: count mismatch |
|
||||
| 807e1d80..807e25a8 | 8083db34..807dc518 | 10 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 807e4f7c..807e5688 | 807deeec..807df618 | 3 | 1 | rejected: count mismatch |
|
||||
| 807e9c10..807e9cd0 | 80841b38..807e0424 | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 807edda4..807ee474 | 80841b78..80842010 | 2 | 0 | rejected: a ported entry inside the PAL gap lies outside the NTSC gap |
|
||||
| 807ef9e4..807efd18 | 807e56d4..807e56f0 | 13 | 0 | rejected: count mismatch |
|
||||
| 807f7970..807f7bd0 | 80842b6c..807ed0d0 | 2 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 807f8878..807f8974 | 807edd78..80842dac | 1 | 0 | rejected: 1583 entries from other chunks land inside the NTSC gap |
|
||||
| 807f9278..807fab58 | 808436b0..807edf98 | 5 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 807fed80..807ffb20 | 80845090..807f1fa8 | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 80833474..808334e0 | 8085014c..8081b5e0 | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 80838b18..80838e60 | 80820c20..808501b8 | 1 | 0 | rejected: 946 entries from other chunks land inside the NTSC gap |
|
||||
| 8083ad54..8083b0cc | 808520ac..80820f54 | 1 | 0 | rejected: NTSC neighbours not ascending (chunk reordering) |
|
||||
| 80841744..80842340 | 80826ce4..80852d0c | 1 | 0 | rejected: 864 entries from other chunks land inside the NTSC gap |
|
||||
| 808516bc..80851d38 | 808320a8..808578c0 | 1 | 0 | rejected: 810 entries from other chunks land inside the NTSC gap |
|
||||
| 80862d58..8086382c | 8085ed38..8085f3fc | 1 | 0 | rejected: count mismatch |
|
||||
| 8086bc1c..8086c68c | 808780bc..80878abc | 1 | 0 | rejected: count mismatch |
|
||||
| 8086c68c..8086e224 | 80878abc..8087a59c | 3 | 0 | rejected: count mismatch |
|
||||
|
||||
## Collisions (two PAL entries porting to one NTSC-U address)
|
||||
|
||||
The named entry is kept (both PAL entries are functions, so the address is a real entry point either way; only the name is in question). Extents are the distance to the next PAL entry / next emitted NTSC-U entry: the PAL entry whose extent matches the NTSC-U extent is the likelier owner of the address.
|
||||
|
||||
| NTSC-U | PAL entries | NTSC-U extent | kept |
|
||||
|---|---|---|---|
|
||||
| 80225e74 | 0x80225f14 (PAL 80225f14, chunk, extent 0x50); EGG:ExpParticleManager::__ct (PAL 802261f8, chunk, extent 0x58) | 0x58 | EGG:ExpParticleManager::__ct |
|
||||
| 8059682c | 0x805a0550 (PAL 805a0550, chunk, extent 0x50); CameraLink::__ct (PAL 805a1864, chunk, extent 0x58) | 0x58 | CameraLink::__ct |
|
||||
| 80660694 | 0x8065fa0c (PAL 8065fa0c, chunk, extent 0x40); RKNet::USERHandler::CreateInstance (PAL 80662778, chunk, extent 0x80) | 0x80 | RKNet::USERHandler::CreateInstance |
|
||||
| 806d8564 | Objects::Wanwan::__dt (PAL 806e95a8, chunk, extent 0x8); Objects::HwanwanBall::__dt(thunk) (PAL 806ec7c0, chunk, extent 0x8) | 0x8 | Objects::Wanwan::__dt |
|
||||
|
||||
## Dropped entries (320)
|
||||
|
||||
| PAL | name | reason |
|
||||
|---|---|---|
|
||||
| 80225f14 | 0x80225f14 | collision at 80225e74; kept 'EGG:ExpParticleManager::__ct' (PAL 802261f8) |
|
||||
| 80225f64 | 0x80225f64 | outside every chunk; no interpolation gap |
|
||||
| 80225fa4 | 0x80225fa4 | outside every chunk; no interpolation gap |
|
||||
| 8022600c | 0x8022600c | outside every chunk; no interpolation gap |
|
||||
| 80226060 | 0x80226060 | outside every chunk; no interpolation gap |
|
||||
| 8022609c | 0x8022609c | outside every chunk; no interpolation gap |
|
||||
| 802260f4 | 0x802260f4 | outside every chunk; no interpolation gap |
|
||||
| 802261a8 | 0x802261a8 | outside every chunk; no interpolation gap |
|
||||
| 802261ec | 0x802261ec | outside every chunk; no interpolation gap |
|
||||
| 80244dd4 | switchdataD_80274dd4 | outside every chunk; no interpolation gap |
|
||||
| 802474a0 | switchdataD_802474a0 | outside every chunk; no interpolation gap |
|
||||
| 80270e30 | switchdataD_80270e30 | outside every chunk; no interpolation gap |
|
||||
| 80271190 | switchdataD_80271190 | outside every chunk; no interpolation gap |
|
||||
| 80271270 | switchdataD_80271270 | outside every chunk; no interpolation gap |
|
||||
| 802713c0 | switchdataD_802713c0 | outside every chunk; no interpolation gap |
|
||||
| 802714a0 | switchdataD_802714a0 | outside every chunk; no interpolation gap |
|
||||
| 802714c0 | switchdataD_802714c0 | outside every chunk; no interpolation gap |
|
||||
| 802714e0 | switchdataD_802714e0 | outside every chunk; no interpolation gap |
|
||||
| 80271630 | switchdataD_80271630 | outside every chunk; no interpolation gap |
|
||||
| 80271710 | switchdataD_80271710 | outside every chunk; no interpolation gap |
|
||||
| 802718d0 | switchdataD_802718d0 | outside every chunk; no interpolation gap |
|
||||
| 80271ab8 | switchdataD_80271ab8 | outside every chunk; no interpolation gap |
|
||||
| 80271ad4 | switchdataD_80271ad4 | outside every chunk; no interpolation gap |
|
||||
| 802726a0 | rnd_3DModels(NW4R)_802726a0 | outside every chunk; no interpolation gap |
|
||||
| 802726c0 | rnd_Palettes(NW4R)_802726c0 | outside every chunk; no interpolation gap |
|
||||
| 802726e0 | rnd_Textures(NW4R)_802726e0 | outside every chunk; no interpolation gap |
|
||||
| 80272700 | rnd_AnmChr(NW4R)_80272700 | outside every chunk; no interpolation gap |
|
||||
| 80272720 | rnd_AnmVis(NW4R)_80272720 | outside every chunk; no interpolation gap |
|
||||
| 80272740 | rnd_AnmClr(NW4R)_80272740 | outside every chunk; no interpolation gap |
|
||||
| 80272760 | rnd_AnmTexPat(NW4R)_80272760 | outside every chunk; no interpolation gap |
|
||||
| 80272780 | rnd_AnmTexSrt(NW4R)_80272780 | outside every chunk; no interpolation gap |
|
||||
| 802727a0 | rnd_AnmShp(NW4R)_802727a0 | outside every chunk; no interpolation gap |
|
||||
| 802727c0 | rnd_AnmScn(NW4R)_802727c0 | outside every chunk; no interpolation gap |
|
||||
| 80272810 | switchdataD_80272810 | outside every chunk; no interpolation gap |
|
||||
| 80273088 | switchdataD_80273088 | outside every chunk; no interpolation gap |
|
||||
| 802730b0 | switchdataD_802730b0 | outside every chunk; no interpolation gap |
|
||||
| 80274520 | switchdataD_80274520 | outside every chunk; no interpolation gap |
|
||||
| 80274578 | switchdataD_80274578 | outside every chunk; no interpolation gap |
|
||||
| 80275018 | switchdataD_80275018 | outside every chunk; no interpolation gap |
|
||||
| 80275700 | switchdataD_80275700 | outside every chunk; no interpolation gap |
|
||||
| 80275a20 | switchdataD_80275a20 | outside every chunk; no interpolation gap |
|
||||
| 80275cfc | switchdataD_80275cfc | outside every chunk; no interpolation gap |
|
||||
| 80276954 | switchdataD_80276954 | outside every chunk; no interpolation gap |
|
||||
| 802775e8 | switchdataD_802775e8 | outside every chunk; no interpolation gap |
|
||||
| 80277d68 | switchdataD_80277d68 | outside every chunk; no interpolation gap |
|
||||
| 80278cf0 | switchdataD_80278cf0 | outside every chunk; no interpolation gap |
|
||||
| 80279af0 | switchdataD_80279af0 | outside every chunk; no interpolation gap |
|
||||
| 80279b10 | switchdataD_80279b10 | outside every chunk; no interpolation gap |
|
||||
| 80279b30 | switchdataD_80279b30 | outside every chunk; no interpolation gap |
|
||||
| 80279b50 | switchdataD_80279b50 | outside every chunk; no interpolation gap |
|
||||
| 80279b94 | switchdataD_80279b94 | outside every chunk; no interpolation gap |
|
||||
| 8027a200 | switchdataD_8027a200 | outside every chunk; no interpolation gap |
|
||||
| 8027a2d8 | switchdataD_8027a2d8 | outside every chunk; no interpolation gap |
|
||||
| 8027a314 | switchdataD_8027a314 | outside every chunk; no interpolation gap |
|
||||
| 8027a350 | switchdataD_8027a350 | outside every chunk; no interpolation gap |
|
||||
| 8027a624 | switchdataD_8027a624 | outside every chunk; no interpolation gap |
|
||||
| 8027b878 | switchdataD_8027b878 | outside every chunk; no interpolation gap |
|
||||
| 8027ba5c | switchdataD_8027ba5c | outside every chunk; no interpolation gap |
|
||||
| 8027bb2c | switchdataD_8027bb2c | outside every chunk; no interpolation gap |
|
||||
| 8027bc28 | switchdataD_8027bc28 | outside every chunk; no interpolation gap |
|
||||
| 8027bc44 | switchdataD_8027bc44 | outside every chunk; no interpolation gap |
|
||||
| 8027d1a8 | switchdataD_8027d1a8 | outside every chunk; no interpolation gap |
|
||||
| 8027ddf8 | switchdataD_8027ddf8 | outside every chunk; no interpolation gap |
|
||||
| 80282cb0 | switchdataD_80282cb0 | outside every chunk; no interpolation gap |
|
||||
| 80282cd8 | switchdataD_80282cd8 | outside every chunk; no interpolation gap |
|
||||
| 80282d5c | switchdataD_80282d5c | outside every chunk; no interpolation gap |
|
||||
| 80282d84 | switchdataD_80282d84 | outside every chunk; no interpolation gap |
|
||||
| 80282f08 | switchdataD_80282f08 | outside every chunk; no interpolation gap |
|
||||
| 80282f2c | switchdataD_80282f2c | outside every chunk; no interpolation gap |
|
||||
| 80283220 | switchdataD_80283220 | outside every chunk; no interpolation gap |
|
||||
| 80284d2c | switchdataD_80284d2c | outside every chunk; no interpolation gap |
|
||||
| 80284e58 | switchdataD_80284e58 | outside every chunk; no interpolation gap |
|
||||
| 80284e7c | switchdataD_80284e7c | outside every chunk; no interpolation gap |
|
||||
| 80284ee8 | switchdataD_80284ee8 | outside every chunk; no interpolation gap |
|
||||
| 80284f08 | switchdataD_80284f08 | outside every chunk; no interpolation gap |
|
||||
| 80285c30 | switchdataD_80285c30 | outside every chunk; no interpolation gap |
|
||||
| 80285cf0 | switchdataD_80285cf0 | outside every chunk; no interpolation gap |
|
||||
| 80285d94 | switchdataD_80285d94 | outside every chunk; no interpolation gap |
|
||||
| 80285e58 | switchdataD_80285e58 | outside every chunk; no interpolation gap |
|
||||
| 80285fc0 | switchdataD_80285fc0 | outside every chunk; no interpolation gap |
|
||||
| 80286054 | switchdataD_80286054 | outside every chunk; no interpolation gap |
|
||||
| 802861e8 | switchdataD_802861e8 | outside every chunk; no interpolation gap |
|
||||
| 80286274 | switchdataD_80286274 | outside every chunk; no interpolation gap |
|
||||
| 80286338 | switchdataD_80286338 | outside every chunk; no interpolation gap |
|
||||
| 802863d0 | switchdataD_802863d0 | outside every chunk; no interpolation gap |
|
||||
| 8028697c | switchdataD_8028697c | outside every chunk; no interpolation gap |
|
||||
| 80287078 | switchdataD_80287078 | outside every chunk; no interpolation gap |
|
||||
| 80287110 | switchdataD_80287110 | outside every chunk; no interpolation gap |
|
||||
| 80287190 | switchdataD_80287190 | outside every chunk; no interpolation gap |
|
||||
| 802871d8 | switchdataD_802871d8 | outside every chunk; no interpolation gap |
|
||||
| 8028725c | switchdataD_8028725c | outside every chunk; no interpolation gap |
|
||||
| 802872b4 | switchdataD_802872b4 | outside every chunk; no interpolation gap |
|
||||
| 80287388 | switchdataD_80287388 | outside every chunk; no interpolation gap |
|
||||
| 802873f0 | switchdataD_802873f0 | outside every chunk; no interpolation gap |
|
||||
| 80287488 | switchdataD_80287488 | outside every chunk; no interpolation gap |
|
||||
| 80287528 | switchdataD_80287528 | outside every chunk; no interpolation gap |
|
||||
| 8028758c | switchdataD_8028758c | outside every chunk; no interpolation gap |
|
||||
| 802875f4 | switchdataD_802875f4 | outside every chunk; no interpolation gap |
|
||||
| 802879e0 | switchdataD_802879e0 | outside every chunk; no interpolation gap |
|
||||
| 80287da8 | switchdataD_80287da8 | outside every chunk; no interpolation gap |
|
||||
| 80287e40 | switchdataD_80287e40 | outside every chunk; no interpolation gap |
|
||||
| 80287e60 | switchdataD_80287e60 | outside every chunk; no interpolation gap |
|
||||
| 80287e80 | switchdataD_80287e80 | outside every chunk; no interpolation gap |
|
||||
| 80288404 | switchdataD_80288404 | outside every chunk; no interpolation gap |
|
||||
| 802884b0 | switchdataD_802884b0 | outside every chunk; no interpolation gap |
|
||||
| 8028855c | switchdataD_8028855c | outside every chunk; no interpolation gap |
|
||||
| 80288614 | switchdataD_80288614 | outside every chunk; no interpolation gap |
|
||||
| 802886c0 | switchdataD_802886c0 | outside every chunk; no interpolation gap |
|
||||
| 80289fd0 | switchdataD_80289fd0 | outside every chunk; no interpolation gap |
|
||||
| 8028a0a0 | switchdataD_8028a0a0 | outside every chunk; no interpolation gap |
|
||||
| 8028a108 | switchdataD_8028a108 | outside every chunk; no interpolation gap |
|
||||
| 8028a14c | switchdataD_8028a14c | outside every chunk; no interpolation gap |
|
||||
| 8028a190 | switchdataD_8028a190 | outside every chunk; no interpolation gap |
|
||||
| 8028a1d4 | switchdataD_8028a1d4 | outside every chunk; no interpolation gap |
|
||||
| 8028a1f0 | switchdataD_8028a1f0 | outside every chunk; no interpolation gap |
|
||||
| 8028a378 | switchdataD_8028a378 | outside every chunk; no interpolation gap |
|
||||
| 8028a398 | switchdataD_8028a398 | outside every chunk; no interpolation gap |
|
||||
| 8028a48c | switchdataD_8028a48c | outside every chunk; no interpolation gap |
|
||||
| 8028a580 | switchdataD_8028a580 | outside every chunk; no interpolation gap |
|
||||
| 8028a658 | switchdataD_8028a658 | outside every chunk; no interpolation gap |
|
||||
| 8028a6b4 | switchdataD_8028a6b4 | outside every chunk; no interpolation gap |
|
||||
| 8028b988 | switchdataD_8028b988 | outside every chunk; no interpolation gap |
|
||||
| 8028b9b0 | switchdataD_8028b9b0 | outside every chunk; no interpolation gap |
|
||||
| 8028ee58 | switchdataD_8028ee58 | outside every chunk; no interpolation gap |
|
||||
| 8028f7dc | switchdataD_8028f7dc | outside every chunk; no interpolation gap |
|
||||
| 80290820 | switchdataD_80290820 | outside every chunk; no interpolation gap |
|
||||
| 8029c884 | switchdataD_8029c884 | outside every chunk; no interpolation gap |
|
||||
| 8029ce88 | switchdataD_8029ce88 | outside every chunk; no interpolation gap |
|
||||
| 8029da00 | switchdataD_8029da00 | outside every chunk; no interpolation gap |
|
||||
| 8029da24 | switchdataD_8029da24 | outside every chunk; no interpolation gap |
|
||||
| 8029dab0 | switchdataD_8029dab0 | outside every chunk; no interpolation gap |
|
||||
| 8029dc28 | switchdataD_8029dc28 | outside every chunk; no interpolation gap |
|
||||
| 8029dc4c | switchdataD_8029dc4c | outside every chunk; no interpolation gap |
|
||||
| 8029e530 | switchdataD_8029e530 | outside every chunk; no interpolation gap |
|
||||
| 802a010c | switchdataD_802a010c | outside every chunk; no interpolation gap |
|
||||
| 802a0870 | switchdataD_802a0870 | outside every chunk; no interpolation gap |
|
||||
| 802a0f68 | switchdataD_802a0f68 | outside every chunk; no interpolation gap |
|
||||
| 802a1870 | switchdataD_802a1870 | outside every chunk; no interpolation gap |
|
||||
| 802a18f8 | switchdataD_802a18f8 | outside every chunk; no interpolation gap |
|
||||
| 802a19dc | switchdataD_802a19dc | outside every chunk; no interpolation gap |
|
||||
| 802a2370 | switchdataD_802a2370 | outside every chunk; no interpolation gap |
|
||||
| 802a23f8 | switchdataD_802a23f8 | outside every chunk; no interpolation gap |
|
||||
| 802a2480 | switchdataD_802a2480 | outside every chunk; no interpolation gap |
|
||||
| 802a2658 | switchdataD_802a2658 | outside every chunk; no interpolation gap |
|
||||
| 802a2ba0 | switchdataD_802a2ba0 | outside every chunk; no interpolation gap |
|
||||
| 802a31d8 | switchdataD_802a31d8 | outside every chunk; no interpolation gap |
|
||||
| 802a32a0 | switchdataD_802a32a0 | outside every chunk; no interpolation gap |
|
||||
| 802a335c | switchdataD_802a335c | outside every chunk; no interpolation gap |
|
||||
| 802a3418 | switchdataD_802a3418 | outside every chunk; no interpolation gap |
|
||||
| 802a34d4 | switchdataD_802a34d4 | outside every chunk; no interpolation gap |
|
||||
| 802a3590 | switchdataD_802a3590 | outside every chunk; no interpolation gap |
|
||||
| 802a364c | switchdataD_802a364c | outside every chunk; no interpolation gap |
|
||||
| 802a3708 | switchdataD_802a3708 | outside every chunk; no interpolation gap |
|
||||
| 802a37c4 | switchdataD_802a37c4 | outside every chunk; no interpolation gap |
|
||||
| 802a3880 | switchdataD_802a3880 | outside every chunk; no interpolation gap |
|
||||
| 802a3940 | switchdataD_802a3940 | outside every chunk; no interpolation gap |
|
||||
| 802a39fc | switchdataD_802a39fc | outside every chunk; no interpolation gap |
|
||||
| 802a3b88 | switchdataD_802a3b88 | outside every chunk; no interpolation gap |
|
||||
| 802a3e30 | switchdataD_802a3e30 | outside every chunk; no interpolation gap |
|
||||
| 80385920 | dev/fs_fd | outside every chunk; no interpolation gap |
|
||||
| 80385924 | r13_and_stacks | outside every chunk; no interpolation gap |
|
||||
| 80387100 | r13_and_stacks | outside every chunk; no interpolation gap |
|
||||
| 80510238 | RelStart | outside every chunk; no interpolation gap |
|
||||
| 80510a90 | isCompetitionValid | outside every chunk; no interpolation gap |
|
||||
| 80510ab8 | 0x80510ab8 | outside every chunk; no interpolation gap |
|
||||
| 805537cc | 0x805537cc | outside every chunk; no interpolation gap |
|
||||
| 80553824 | 0x80553824 | outside every chunk; no interpolation gap |
|
||||
| 80553828 | 0x80553828 | outside every chunk; no interpolation gap |
|
||||
| 8055382c | 0x8055382c | outside every chunk; no interpolation gap |
|
||||
| 80553838 | 0x80553838 | outside every chunk; no interpolation gap |
|
||||
| 80553844 | 0x80553844 | outside every chunk; no interpolation gap |
|
||||
| 80553850 | GlobeScene::__ct | outside every chunk; no interpolation gap |
|
||||
| 805758e4 | 0x805758e4 | outside every chunk; no interpolation gap |
|
||||
| 805a0550 | 0x805a0550 | collision at 8059682c; kept 'CameraLink::__ct' (PAL 805a1864) |
|
||||
| 805a05a0 | AutoCameraMoverRace::__dt | outside every chunk; no interpolation gap |
|
||||
| 805a05e0 | CamMove::__dt | outside every chunk; no interpolation gap |
|
||||
| 805a0620 | 0x805a0620 | outside every chunk; no interpolation gap |
|
||||
| 805a0660 | AutoCameraMover::__dt | outside every chunk; no interpolation gap |
|
||||
| 805a1478 | AutoCameraMoverRace::vf_0x14 | outside every chunk; no interpolation gap |
|
||||
| 805a1480 | AutoCameraMoverRace::vf_0x18 | outside every chunk; no interpolation gap |
|
||||
| 805be61c | PushButton::TriggerPtmf | outside every chunk; no interpolation gap |
|
||||
| 805be64c | PushButton_cpp_sinit_ | outside every chunk; no interpolation gap |
|
||||
| 805bf2dc | Pages::MKChannelExplanation::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 805bf2e8 | Pages::AddMKChannel::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 805bf2f4 | Pages::MKChannelExplanation::TriggerButtonPtmf | outside every chunk; no interpolation gap |
|
||||
| 805bf324 | Pages::AddMKChannel::TriggerButtonPtmf | outside every chunk; no interpolation gap |
|
||||
| 805bf354 | Pages::MKChannelExplanation::TriggerBackPtmf | outside every chunk; no interpolation gap |
|
||||
| 805bf384 | Pages::AddMKChannel::TriggerBackPtmf | outside every chunk; no interpolation gap |
|
||||
| 805bf3b4 | AddMKChannelPage_cpp_sinit_ | outside every chunk; no interpolation gap |
|
||||
| 805c579c | 0x805c579c | outside every chunk; no interpolation gap |
|
||||
| 805cc0a8 | Pages::EndingMovie::OnActivate | outside every chunk; no interpolation gap |
|
||||
| 805dbfdc | SheetSelectControlScaleFade::__dt | outside every chunk; no interpolation gap |
|
||||
| 80637a8c | SystemBMGHolder::GetMessage | outside every chunk; no interpolation gap |
|
||||
| 8063bcf8 | Pages::TitleMovie::OnActivate | outside every chunk; no interpolation gap |
|
||||
| 8064aee4 | VRPage_cpp_sinit_ | outside every chunk; no interpolation gap |
|
||||
| 8065b354 | 0x8065b354 | outside every chunk; no interpolation gap |
|
||||
| 8065b3b8 | 0x8065b3b8 | outside every chunk; no interpolation gap |
|
||||
| 8065b40c | 0x8065b40c | outside every chunk; no interpolation gap |
|
||||
| 8065b450 | 0x8065b450 | outside every chunk; no interpolation gap |
|
||||
| 8065b490 | 0x8065b490 | outside every chunk; no interpolation gap |
|
||||
| 8065fa0c | 0x8065fa0c | collision at 80660694; kept 'RKNet::USERHandler::CreateInstance' (PAL 80662778) |
|
||||
| 806c4ed4 | ManagedObjects::RegisterObject | outside every chunk; no interpolation gap |
|
||||
| 806c63a8 | RouteController::SetPercent | outside every chunk; no interpolation gap |
|
||||
| 806ce820 | 0x806ce820 | outside every chunk; no interpolation gap |
|
||||
| 806d28f4 | Objects::MapObjSniper::LoadCollision | outside every chunk; no interpolation gap |
|
||||
| 806d28f8 | Objects::MapObjSniper::LoadRoute | outside every chunk; no interpolation gap |
|
||||
| 806d28fc | Objects::MapObjSniper::LoadModels | outside every chunk; no interpolation gap |
|
||||
| 806d2900 | Objects::MapObjSniper::GetPropertiesBitfield | outside every chunk; no interpolation gap |
|
||||
| 806d5c5c | Objects::HighwayManager::LoadClipInfo | outside every chunk; no interpolation gap |
|
||||
| 806ec7c0 | Objects::HwanwanBall::__dt(thunk) | collision at 806d8564; kept 'Objects::Wanwan::__dt' (PAL 806e95a8) |
|
||||
| 806f7698 | Audio::ItemWarning::GetPan | outside every chunk; no interpolation gap |
|
||||
| 806f772c | Audio::ItemWarning::__ct | outside every chunk; no interpolation gap |
|
||||
| 806f7740 | 0x806f7740 | outside every chunk; no interpolation gap |
|
||||
| 806f7780 | 0x806f7780 | outside every chunk; no interpolation gap |
|
||||
| 806f7a54 | 0x806f7a54 | outside every chunk; no interpolation gap |
|
||||
| 807001a4 | Audio::Manager::LoadState | outside every chunk; no interpolation gap |
|
||||
| 8072820c | 0x8072820c | outside every chunk; no interpolation gap |
|
||||
| 80728210 | 0x80728210 | outside every chunk; no interpolation gap |
|
||||
| 80728214 | AI::CPUDriving::GetCalculator | outside every chunk; no interpolation gap |
|
||||
| 807285c8 | 0x807285c8 | outside every chunk; no interpolation gap |
|
||||
| 80729338 | 0x80729338 | outside every chunk; no interpolation gap |
|
||||
| 80729340 | 0x80729340 | outside every chunk; no interpolation gap |
|
||||
| 80729348 | 0x80729348 | outside every chunk; no interpolation gap |
|
||||
| 8072de64 | 0x8072de64 | outside every chunk; no interpolation gap |
|
||||
| 8072de6c | 0x8072de6c | outside every chunk; no interpolation gap |
|
||||
| 8072de74 | 0x8072de74 | outside every chunk; no interpolation gap |
|
||||
| 8072de7c | 0x8072de7c | outside every chunk; no interpolation gap |
|
||||
| 8072de84 | 0x8072de84 | outside every chunk; no interpolation gap |
|
||||
| 8072de8c | 0x8072de8c | outside every chunk; no interpolation gap |
|
||||
| 8072de94 | 0x8072de94 | outside every chunk; no interpolation gap |
|
||||
| 8072de9c | 0x8072de9c | outside every chunk; no interpolation gap |
|
||||
| 8072dea0 | 0x8072dea0 | outside every chunk; no interpolation gap |
|
||||
| 8072dee0 | 0x8072dee0 | outside every chunk; no interpolation gap |
|
||||
| 8072dee8 | 0x8072dee8 | outside every chunk; no interpolation gap |
|
||||
| 8072def0 | 0x8072def0 | outside every chunk; no interpolation gap |
|
||||
| 8072def8 | 0x8072def8 | outside every chunk; no interpolation gap |
|
||||
| 8072df00 | 0x8072df00 | outside every chunk; no interpolation gap |
|
||||
| 8072df08 | 0x8072df08 | outside every chunk; no interpolation gap |
|
||||
| 8072df10 | 0x8072df10 | outside every chunk; no interpolation gap |
|
||||
| 8072df58 | 0x8072df58 | outside every chunk; no interpolation gap |
|
||||
| 8072df88 | 0x8072df88 | outside every chunk; no interpolation gap |
|
||||
| 8072ff60 | 0x8072ff60 | outside every chunk; no interpolation gap |
|
||||
| 8072ff68 | 0x8072ff68 | outside every chunk; no interpolation gap |
|
||||
| 8072ff70 | 0x8072ff70 | outside every chunk; no interpolation gap |
|
||||
| 80730a80 | AI::CPUDrivingAction::OnStart | outside every chunk; no interpolation gap |
|
||||
| 80730ac8 | AI::CPUDrivingAction::Update | outside every chunk; no interpolation gap |
|
||||
| 80730af8 | AI::CPUDrivingAction::OnEnd | outside every chunk; no interpolation gap |
|
||||
| 8075db24 | 0x8075db24 | outside every chunk; no interpolation gap |
|
||||
| 8075db2c | 0x8075db2c | outside every chunk; no interpolation gap |
|
||||
| 8075db34 | 0x8075db34 | outside every chunk; no interpolation gap |
|
||||
| 807693ec | 0x807693ec | outside every chunk; no interpolation gap |
|
||||
| 8076942c | 0x8076942c | outside every chunk; no interpolation gap |
|
||||
| 807694e8 | 0x807694e8 | outside every chunk; no interpolation gap |
|
||||
| 80769584 | 0x80769584 | outside every chunk; no interpolation gap |
|
||||
| 80769590 | 0x80769590 | outside every chunk; no interpolation gap |
|
||||
| 8076959c | 0x8076959c | outside every chunk; no interpolation gap |
|
||||
| 807695a4 | 0x807695a4 | outside every chunk; no interpolation gap |
|
||||
| 80769608 | 0x80769608 | outside every chunk; no interpolation gap |
|
||||
| 8076ebdc | Objects::SubObjectArray<W_Itemboxline::Box>::vf_0x14 | outside every chunk; no interpolation gap |
|
||||
| 807726c4 | 0x807726c4 | outside every chunk; no interpolation gap |
|
||||
| 80773c14 | Objects::MiiKanban::GetPropertiesBitfield | outside every chunk; no interpolation gap |
|
||||
| 8077439c | 0x8077439c | outside every chunk; no interpolation gap |
|
||||
| 8077ce88 | 0x8077ce88 | outside every chunk; no interpolation gap |
|
||||
| 807a9d90 | Item::ObjKinoko::InitSelf | outside every chunk; no interpolation gap |
|
||||
| 807a9dac | __sinit_ItemObjKinoko_cpp | outside every chunk; no interpolation gap |
|
||||
| 807a9dd4 | Item::ObjKinokoBig::CreateArray | outside every chunk; no interpolation gap |
|
||||
| 807a9e50 | Item::Player::UseMegaMushroom | outside every chunk; no interpolation gap |
|
||||
| 807a9ea4 | Item::ObjKinokoBig::InitSelf | outside every chunk; no interpolation gap |
|
||||
| 807d9b80 | DriverCalcWorldCB::ExecCallbackC(thunk) | outside every chunk; no interpolation gap |
|
||||
| 807d9b88 | DriverCalcWorldCB::ExecCallbackB(thunk) | outside every chunk; no interpolation gap |
|
||||
| 807d9b90 | DriverCalcWorldCB::__dt(thunk) | outside every chunk; no interpolation gap |
|
||||
| 807dc8c8 | 0x807dc8c8 | outside every chunk; no interpolation gap |
|
||||
| 807e2520 | CtrlMenuMovieButton::GetMovieCount | outside every chunk; no interpolation gap |
|
||||
| 807e2528 | CtrlMenuBattleStageSelectCup::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 807e2534 | CtrlMenuBattleStageSelectCupSub::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 807e2540 | CtrlMenuBattleStage_cpp_sinit_ | outside every chunk; no interpolation gap |
|
||||
| 807e256c | CtrlMenuMovieButton::OnUpdate(PushButton) | outside every chunk; no interpolation gap |
|
||||
| 807e2574 | CtrlMenuMovieButton::InitSelf(PushButton) | outside every chunk; no interpolation gap |
|
||||
| 807e257c | CtrlMenuMovieButton::OnLoad(PushButton) | outside every chunk; no interpolation gap |
|
||||
| 807e2584 | StageButton::__dt(PushButton) | outside every chunk; no interpolation gap |
|
||||
| 807e258c | StageButton::GetClassName(PushButton) | outside every chunk; no interpolation gap |
|
||||
| 807e2594 | StageButton::GetRuntimeTypeInfo(PushButton) | outside every chunk; no interpolation gap |
|
||||
| 807e5610 | CtrlMenuCourseSelectCup::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 807e561c | CtrlMenuCourseSelectCupSub::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 807e5628 | CtrlMenuCoursecpp_sinit_ | outside every chunk; no interpolation gap |
|
||||
| 807e9c44 | CtrlMenuPressStart::GetClassName | outside every chunk; no interpolation gap |
|
||||
| 807ee23c | CtrlRaceBattleSetPoint_cpp_sinit_ | outside every chunk; no interpolation gap |
|
||||
| 807ee468 | CtrlRaceCount::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 807ef9f4 | CtrlRaceLive::getClassName | outside every chunk; no interpolation gap |
|
||||
| 807efa00 | CtrlRaceLive::initLayout | outside every chunk; no interpolation gap |
|
||||
| 807efa70 | screenElement_setupPauseMovement | outside every chunk; no interpolation gap |
|
||||
| 807efa74 | 0x807efa74 | outside every chunk; no interpolation gap |
|
||||
| 807efa78 | CtrlRaceLiveMessage::getClassName | outside every chunk; no interpolation gap |
|
||||
| 807efa88 | CtrlRaceLiveMessage::initLayout | outside every chunk; no interpolation gap |
|
||||
| 807efadc | CtrlRaceLiveMessage::onInit | outside every chunk; no interpolation gap |
|
||||
| 807efb90 | CtrlRaceLiveMessage::onUpdate | outside every chunk; no interpolation gap |
|
||||
| 807efc20 | CtrlRaceLiveMessage::__dt | outside every chunk; no interpolation gap |
|
||||
| 807efc7c | CtrlRaceLiveMessage::getInstance | outside every chunk; no interpolation gap |
|
||||
| 807efc88 | CtrlRaceLive::__dt | outside every chunk; no interpolation gap |
|
||||
| 807efce4 | 0x807efce4 | outside every chunk; no interpolation gap |
|
||||
| 807efcf0 | __sinit_CtrlRaceLive_cpp | outside every chunk; no interpolation gap |
|
||||
| 807f7ba4 | CtrlRaceScore::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 807f7bb0 | CtrlRaceScore_cpp_sinit_ | outside every chunk; no interpolation gap |
|
||||
| 807f890c | CtrlRaceTime::__dt | outside every chunk; no interpolation gap |
|
||||
| 807f9348 | GeoHitTableHolder::__dt | outside every chunk; no interpolation gap |
|
||||
| 807f9388 | Objects::Airblock::__ct | outside every chunk; no interpolation gap |
|
||||
| 807f9424 | Objects::Airblock::__ct(Vec3s) | outside every chunk; no interpolation gap |
|
||||
| 807f94cc | Objects::Airblock::OnStart | outside every chunk; no interpolation gap |
|
||||
| 807f957c | ObjectCollisionPolyhedra::GetRadius | outside every chunk; no interpolation gap |
|
||||
| 807ffae0 | 0x807ffae0 | outside every chunk; no interpolation gap |
|
||||
| 808334a0 | MenuKartModelMgr::__dt | outside every chunk; no interpolation gap |
|
||||
| 80838e4c | MenuBGPage_cpp_sinit_ | outside every chunk; no interpolation gap |
|
||||
| 8083b0c0 | Pages::BattleKartSelect::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 80842334 | Pages::CupSelect::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 80851d2c | Pages::MainMenu::GetRuntimeTypeInfo | outside every chunk; no interpolation gap |
|
||||
| 80862e24 | 0x80862e24 | outside every chunk; no interpolation gap |
|
||||
| 8086c098 | Objects::WLwallGC::CalcNextPosition | outside every chunk; no interpolation gap |
|
||||
| 8086c988 | 0x8086c988 | outside every chunk; no interpolation gap |
|
||||
| 8086c98c | 0x8086c98c | outside every chunk; no interpolation gap |
|
||||
| 8086c9cc | 0x8086c9cc | outside every chunk; no interpolation gap |
|
||||
|
||||
## Unverified entries (206; ported by the chunk table but not confirmed by the binary, not emitted)
|
||||
|
||||
- conditional-branch target (inside a function): 38
|
||||
- conditional-branch target that is also jump-table referenced (a case label without a label name): 38
|
||||
- jump-table referenced but named/unnamed as a function: 1
|
||||
- lands on a padding word (real function usually at +4): 24
|
||||
- no evidence, predecessor is not a terminator: 102
|
||||
- outside text (data symbols): 3
|
||||
|
||||
| PAL | name | NTSC-U | evidence | detail |
|
||||
|---|---|---|---|---|
|
||||
| 8000a000 | 0x8000a000 | 80009fc0 | - | prev=93e1000c (stw r31,12(r1)) word=800d93f8 (lwz r0,-27656(r13)) |
|
||||
| 8000fb80 | 0x8000fb80 | 8000f020 | - | prev=38000005 (li r0,5) word=9801000c (op38) |
|
||||
| 8000fbb4 | 0x8000fbb4 | 8000f054 | ptr+bc | conditional-branch target (inside a function); prev=4800000c (b) word=380000ff (li r0,255) |
|
||||
| 80010000 | 0x80010000 | 8000f4a0 | bc | conditional-branch target (inside a function); prev=41820010 (bc) word=8078000c (lwz r3,12(r24)) |
|
||||
| 80010138 | 0x80010138 | 8000f5d8 | bc | conditional-branch target (inside a function); prev=48000358 (b) word=3b800000 (li r28,0) |
|
||||
| 80010dbc | 0x80010dbc | 8001025c | bc | conditional-branch target (inside a function); prev=48000844 (b) word=7de37b78 (mr r3,r15) |
|
||||
| 8001237c | 0x8001237c | 8001181c | bc | conditional-branch target (inside a function); prev=48000be8 (b) word=281600ff (cmplwi cr0,r22,255) |
|
||||
| 80016e68 | 0x80016e68 | 80016308 | bc | conditional-branch target (inside a function); prev=48000920 (b) word=7fc3f378 (mr r3,r30) |
|
||||
| 80020000 | 0x80020000 | 8001f4a0 | - | prev=6042d868 (ori r2,r2,0xd868) word=38600001 (li r3,1) |
|
||||
| 8002055c | 0x8002055c | 8001f9fc | - | prev=388421b8 (addi r4,r4,8632) word=38a00001 (li r5,1) |
|
||||
| 80020800 | 0x80020800 | 8001fca0 | - | prev=7fe3fb78 (mr r3,r31) word=38a521b8 (addi r5,r5,8632); next proven start at +0x2c |
|
||||
| 80021360 | 0x80021360 | 80020800 | ptr+bc | conditional-branch target (inside a function); prev=48000020 (b) word=80030000 (lwz r0,0(r3)) |
|
||||
| 8002137c | 0x8002137c | 8002081c | b | prev=4e800421 (op19) word=806d9494 (lwz r3,-27500(r13)) |
|
||||
| 80021ba8 | 0x80021ba8 | 80021b08 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 80024870 | 0x80024870 | 800247d0 | - | prev=48174915 (bl) word=3803ffe4 (addi r0,r3,-28) |
|
||||
| 800259d0 | 0x800259d0 | 80025930 | - | prev=7fa4eb78 (mr r4,r29) word=387c0004 (addi r3,r28,4) |
|
||||
| 80046a40 | 0x80046a40 | 800469a0 | - | prev=3c608004 (lis r3,0x8004) word=38636ae0 (addi r3,r3,27360) |
|
||||
| 80046a50 | 0x80046a50 | 800469b0 | - | prev=38630060 (addi r3,r3,96) word=4e800020 (blr) |
|
||||
| 800495d0 | 0x800495d0 | 80049530 | - | prev=7ee7bb78 (mr r7,r23) word=7f68db78 (mr r8,r27) |
|
||||
| 8004b3a0 | 0x8004b3a0 | 8004b300 | - | prev=3c608005 (lis r3,0x8005) word=3863b440 (addi r3,r3,-19392) |
|
||||
| 8004b3b0 | 0x8004b3b0 | 8004b310 | - | prev=38630060 (addi r3,r3,96) word=4e800020 (blr) |
|
||||
| 8004f710 | 0x8004f710 | 8004f670 | - | prev=38630018 (addi r3,r3,24) word=80a1002c (lwz r5,44(r1)) |
|
||||
| 80051c40 | 0x80051c40 | 80051ba0 | - | prev=38000002 (li r0,2) word=48000010 (b) |
|
||||
| 8005ee40 | 0x8005ee40 | 8005eda0 | - | prev=e03f0008 (op56) word=39210020 (addi r9,r1,32) |
|
||||
| 8005fec0 | 0x8005fec0 | 8005fe20 | - | prev=90610008 (stw r3,8(r1)) word=40820014 (bc) |
|
||||
| 80061c90 | 0x80061c90 | 80061bf0 | - | prev=4182000c (bc) word=80030018 (lwz r0,24(r3)) |
|
||||
| 80068260 | 0x80068260 | 800681c0 | - | prev=dbe10120 (stfd f31,288(r1)) word=f3e10128 (op60) |
|
||||
| 8006b7a0 | 0x8006b7a0 | 8006b700 | - | prev=ec4a01b2 (op59) word=ec88202a (op59) |
|
||||
| 8006d480 | 0x8006d480 | 8006d3e0 | - | prev=c1230004 (op48) word=ecc7102a (op59) |
|
||||
| 80080000 | 0x80080000 | 8007ff60 | - | prev=80010034 (lwz r0,52(r1)) word=7c0803a6 (mtlr r0); next proven start at +0x10 |
|
||||
| 80084780 | 0x80084780 | 800846e0 | - | prev=38a00001 (li r5,1) word=38c00004 (li r6,4); next proven start at +0x40 |
|
||||
| 80088920 | 0x80088920 | 80088880 | - | prev=38800100 (li r4,256) word=48118d0d (bl) |
|
||||
| 80089a00 | 0x80089a00 | 80089960 | - | prev=90810008 (stw r4,8(r1)) word=c0030040 (op48) |
|
||||
| 8008bd70 | 0x8008bd70 | 8008bcd0 | - | prev=7c040214 (op31) word=7fc01a14 (op31) |
|
||||
| 8008c540 | 0x8008c540 | 8008c4a0 | - | prev=396100a0 (addi r11,r1,160) word=4bf9459d (bl) |
|
||||
| 8008e170 | 0x8008e170 | 8008e0d0 | - | prev=90e300a0 (stw r7,160(r3)) word=90e300e0 (stw r7,224(r3)) |
|
||||
| 80090000 | 0x80090000 | 8008ff60 | bc | conditional-branch target (inside a function); prev=4e800421 (op19) word=881e0037 (op34) |
|
||||
| 8009716c | 0x8009716c | 800970cc | b+jt+bc | conditional-branch target (inside a function); prev=981f0008 (op38) word=39610030 (addi r11,r1,48) |
|
||||
| 80097cf0 | 0x80097cf0 | 80097c50 | - | prev=80a30170 (lwz r5,368(r3)) word=7c042800 (op31) |
|
||||
| 800aeed0 | nw4r::snd::detail::DecodeDspAdpcm | 800aee30 | - | prev=54806326 (op21) word=a1230024 (op40) |
|
||||
| 800aeee0 | nw4r::snd::detail::WsdPlayer::InvalidateWaveData | 800aee40 | - | prev=54e4073e (op21) word=54c7103a (op21) |
|
||||
| 800b1a00 | 0x800b1a00 | 800b1960 | - | prev=80040004 (lwz r0,4(r4)) word=90030008 (stw r0,8(r3)); next proven start at +0x20 |
|
||||
| 800b7fd8 | 0x800b7fd8 | 800b7f38 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b80ec | 0x800b80ec | 800b804c | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b8464 | 0x800b8464 | 800b83c4 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b87e4 | 0x800b87e4 | 800b8744 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b90d4 | 0x800b90d4 | 800b9034 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0xc |
|
||||
| 800b9384 | 0x800b9384 | 800b92e4 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b9618 | 0x800b9618 | 800b9578 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b9b7c | 0x800b9b7c | 800b9adc | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800b9d84 | 0x800b9d84 | 800b9ce4 | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b9e9c | 0x800b9e9c | 800b9dfc | - | prev=4e800020 (blr) word=00000000 (.long 0) |
|
||||
| 800b9f48 | 0x800b9f48 | 800b9ea8 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800ba18c | 0x800ba18c | 800ba0ec | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800ba814 | 0x800ba814 | 800ba774 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x1c |
|
||||
| 800ba828 | 0x800ba828 | 800ba788 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800bbae8 | 0x800bbae8 | 800bba48 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800bc138 | bootloadDB2Res_ | 800bc098 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800bed50 | 0x800bed50 | 800becb0 | - | prev=39610020 (addi r11,r1,32) word=4bf61d91 (bl) |
|
||||
| 800c5550 | 0x800c5550 | 800c54b0 | - | prev=38c65380 (addi r6,r6,21376) word=38a00040 (li r5,64) |
|
||||
| 800c686c | 0x800c686c | 800c67cc | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800c8214 | 0x800c8214 | 800c8174 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0xc |
|
||||
| 800cbb4c | 0x800cbb4c | 800cbaac | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800cbb84 | 0x800cbb84 | 800cbae4 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0xc |
|
||||
| 800cbde4 | 0x800cbde4 | 800cbd44 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0xc |
|
||||
| 800cbe2c | 0x800cbe2c | 800cbd8c | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x4 |
|
||||
| 800cc048 | RFL::SetToWiFiPacket | 800cbfa8 | - | prev=4e800020 (blr) word=00000000 (.long 0); next proven start at +0x8 |
|
||||
| 800e5644 | 0x800e5644 | 800e55a4 | - | prev=90010014 (stw r0,20(r1)) word=93e1000c (stw r31,12(r1)) |
|
||||
| 800f0000 | 0x800f0000 | 800eff60 | - | prev=7c63f82e (op31) word=4bfff4e1 (bl); next proven start at +0x38 |
|
||||
| 800f6d4c | 0x800f6d4c | 800f6cac | - | prev=7c9b2378 (mr r27,r4) word=7cbc2b78 (mr r28,r5) |
|
||||
| 800fb78c | 0x800fb78c | 800fb6ec | - | prev=93c10018 (stw r30,24(r1)) word=3bc00000 (li r30,0) |
|
||||
| 800fedbc | 0x800fedbc | 800fed1c | - | prev=8063000c (lwz r3,12(r3)) word=93e3000c (stw r31,12(r3)) |
|
||||
| 80100000 | 0x80100000 | 800fff60 | bc | conditional-branch target (inside a function); prev=4800013c (b) word=38800000 (li r4,0) |
|
||||
| 8010f4b8 | 0x8010f4b8 | 8010f418 | - | prev=83e1001c (lwz r31,28(r1)) word=83c10018 (lwz r30,24(r1)); next proven start at +0x14 |
|
||||
| 80128018 | 0x80128018 | 80127f78 | - | prev=7c002050 (op31) word=900d99b4 (stw r0,-26188(r13)); next proven start at +0x14 |
|
||||
| 8012e5a8 | 0x8012e5a8 | 8012e508 | b | prev=7c0004ac (op31) word=60000000 (ori r0,r0,0x0000); next proven start at +0x10 |
|
||||
| 80130000 | 0x80130000 | 8012ff60 | - | prev=90050000 (stw r0,0(r5)) word=48000054 (b) |
|
||||
| 80134d98 | 0x80134d98 | 80134cf8 | - | prev=93810010 (stw r28,16(r1)) word=7c7c1b78 (mr r28,r3) |
|
||||
| 80144610 | 0x80144610 | 80144570 | jt+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=38600114 (li r3,276); next proven start at +0x8 |
|
||||
| 8015581c | 0x8015581c | 8015577c | - | prev=7c0802a6 (mflr r0) word=3ce08028 (lis r7,0x8028) |
|
||||
| 8015b2bc | 0x8015b2bc | 8015b21c | bc | conditional-branch target (inside a function); prev=48000258 (b) word=88e80000 (op34) |
|
||||
| 8015b368 | 0x8015b368 | 8015b2c8 | ptr+bc | conditional-branch target (inside a function); prev=4800000c (b) word=38600000 (li r3,0) |
|
||||
| 801656a4 | 0x801656a4 | 80165604 | - | prev=7ca40214 (op31) word=806d8ce8 (lwz r3,-29464(r13)) |
|
||||
| 80165d20 | 0x80165d20 | 80165c80 | - | prev=90010014 (stw r0,20(r1)) word=38e7f160 (addi r7,r7,-3744) |
|
||||
| 80166864 | 0x80166864 | 801667c4 | - | prev=4cc63182 (op19) word=4803bd6d (bl) |
|
||||
| 8016d61c | 0x8016d61c | 8016d57c | bc | conditional-branch target (inside a function); prev=480001a8 (b) word=80c30000 (lwz r6,0(r3)) |
|
||||
| 8016d7bc | 0x8016d7bc | 8016d71c | ptr+b+bc | conditional-branch target (inside a function); prev=90c50018 (stw r6,24(r5)) word=38630008 (addi r3,r3,8) |
|
||||
| 8016de1c | 0x8016de1c | 8016dd7c | bc | conditional-branch target (inside a function); prev=48000178 (b) word=80c40000 (lwz r6,0(r4)) |
|
||||
| 8016f240 | 0x8016f240 | 8016f1a0 | - | prev=80c29728 (lwz r6,-26840(r2)) word=3c60cc01 (lis r3,0xcc01) |
|
||||
| 80171770 | 0x80171770 | 801716d0 | - | prev=98038000 (op38) word=90a38000 (stw r5,-32768(r3)); next proven start at +0x3c |
|
||||
| 8017cf40 | 0x8017cf40 | 8017cea0 | - | prev=801a0064 (lwz r0,100(r26)) word=2c000002 (cmpwi cr0,r0,2) |
|
||||
| 8017ff60 | 0x8017ff60 | 8017fec0 | bc | conditional-branch target (inside a function); prev=48000250 (b) word=801a0000 (lwz r0,0(r26)) |
|
||||
| 8017ffc4 | 0x8017ffc4 | 8017ff24 | bc | conditional-branch target (inside a function); prev=48000068 (b) word=80190000 (lwz r0,0(r25)) |
|
||||
| 80180000 | 0x80180000 | 8017ff60 | - | prev=7cc00734 (op31) word=88940001 (op34) |
|
||||
| 80192348 | 0x80192348 | 801922a8 | - | prev=90a400aa (stw r5,170(r4)) word=90a400ae (stw r5,174(r4)) |
|
||||
| 8019801c | 0x8019801c | 80197f7c | - | prev=2c000000 (cmpwi cr0,r0,0) word=4082004c (bc) |
|
||||
| 8019d454 | 0x8019d454 | 8019d3b4 | - | prev=3ca08029 (lis r5,0x8029) word=387f0048 (addi r3,r31,72) |
|
||||
| 801a0000 | 0x801a0000 | 8019ff60 | - | prev=41820018 (bc) word=3c800001 (lis r4,0x0001) |
|
||||
| 801a0138 | 0x801a0138 | 801a0098 | - | prev=3c80801a (lis r4,0x801a) word=3ca0801a (lis r5,0x801a) |
|
||||
| 801a0404 | 0x801a0404 | 801a0364 | - | prev=7c651b78 (mr r5,r3) word=60000000 (ori r0,r0,0x0000) |
|
||||
| 801ad43c | 0x801ad43c | 801ad39c | - | prev=93c100a8 (stw r30,168(r1)) word=7cbe2b78 (mr r30,r5) |
|
||||
| 801b1c60 | 0x801b1c60 | 801b1bc0 | - | prev=98010008 (op38) word=48000030 (b) |
|
||||
| 801bcc20 | 0x801bcc20 | 801bcb80 | - | prev=38210030 (addi r1,r1,48) word=4e800020 (blr); next proven start at +0x4 |
|
||||
| 801d0eb0 | 0x801d0eb0 | 801d0e10 | - | prev=7c7d1b78 (mr r29,r3) word=7c9e2378 (mr r30,r4) |
|
||||
| 801da7e8 | 0x801da7e8 | 801da748 | bc | conditional-branch target (inside a function); prev=48000008 (b) word=3a940001 (addi r20,r20,1) |
|
||||
| 801da7ec | 0x801da7ec | 801da74c | b+bc | conditional-branch target (inside a function); prev=3a940001 (addi r20,r20,1) word=88140000 (op34) |
|
||||
| 801dab8c | 0x801dab8c | 801daaec | b+jt+bc | conditional-branch target (inside a function); prev=4180feb0 (bc) word=2c1e0000 (cmpwi cr0,r30,0) |
|
||||
| 801dcecc | 0x801dcecc | 801dce2c | b+jt+bc | conditional-branch target (inside a function); prev=900da0cc (stw r0,-24372(r13)) word=80010024 (lwz r0,36(r1)); next proven start at +0x1c |
|
||||
| 801dfb34 | 0x801dfb34 | 801dfa94 | - | prev=7c751b78 (mr r21,r3) word=41820008 (bc) |
|
||||
| 801ec214 | 0x801ec214 | 801ec174 | bc | conditional-branch target (inside a function); prev=39c00002 (li r14,2) word=4bfba399 (bl) |
|
||||
| 801f6708 | 0x801f6708 | 801f6668 | - | prev=3b400000 (li r26,0) word=48000028 (b) |
|
||||
| 801ff230 | 0x801ff230 | 801ff190 | - | prev=9421ffd0 (stwu r1,-48(r1)) word=7c0802a6 (mflr r0) |
|
||||
| 80211b40 | 0x80211b40 | 80211aa0 | ptr+bc | conditional-branch target (inside a function); prev=48000010 (b) word=38800000 (li r4,0); next proven start at +0x1c |
|
||||
| 80217e1c | 0x80217e1c | 80217d7c | bc | conditional-branch target (inside a function); prev=4080022c (bc) word=7ca66050 (op31) |
|
||||
| 80218028 | 0x80218028 | 80217f88 | - | prev=80a1002c (lwz r5,44(r1)) word=d8410030 (stfd f2,48(r1)); next proven start at +0x34 |
|
||||
| 8021b790 | 0x8021b790 | 8021b6f0 | bc | conditional-branch target (inside a function); prev=3dc0802a (lis r14,0x802a) word=386100c0 (addi r3,r1,192) |
|
||||
| 8021ff0c | 0x8021ff0c | 8021fe6c | bc | conditional-branch target (inside a function); prev=c3c29cb0 (op48) word=c0580024 (op48) |
|
||||
| 80220000 | 0x80220000 | 8021ff60 | - | prev=5400043e (op21) word=900100f4 (stw r0,244(r1)) |
|
||||
| 8023152c | 0x8023152c | 802311a8 | bc | conditional-branch target (inside a function); prev=480000d0 (b) word=80770000 (lwz r3,0(r23)) |
|
||||
| 80232eec | 0x80232eec | 80232b68 | ptr+bc | conditional-branch target (inside a function); prev=48000014 (b) word=38000000 (li r0,0) |
|
||||
| 8023bc00 | 0x8023bc00 | 8023b87c | bc | conditional-branch target (inside a function); prev=480000fc (b) word=5605043e (op21) |
|
||||
| 80240000 | 0x80240000 | 8023fc7c | bc | conditional-branch target (inside a function); prev=3bc00000 (li r30,0) word=807d0004 (lwz r3,4(r29)) |
|
||||
| 802a4080 | rkSystem | 8029fd00 | - | not in a text section (unmapped) |
|
||||
| 802a40f4 | r13_and_stacks | 8029fd74 | - | not in a text section (unmapped) |
|
||||
| 80386000 | SystemManager | 80381c80 | - | not in a text section (unmapped) |
|
||||
| 80528058 | 0x80528058 | 80523be4 | - | prev=83c10018 (lwz r30,24(r1)) word=80010024 (lwz r0,36(r1)) |
|
||||
| 8052aea4 | 0x8052aea4 | 80526a30 | bc | conditional-branch target (inside a function); prev=3e808000 (lis r20,0x8000) word=7ee3bb78 (mr r3,r23) |
|
||||
| 8053bcc8 | 0x8053bcc8 | 80537180 | bc | conditional-branch target (inside a function); prev=48000414 (b) word=566315ba (op21) |
|
||||
| 8053bcf4 | 0x8053bcf4 | 805371ac | bc | conditional-branch target (inside a function); prev=b0010020 (op44) word=80150044 (lwz r0,68(r21)) |
|
||||
| 80540000 | 0x80540000 | 8053aac4 | - | prev=38a0001c (li r5,28) word=38c0000c (li r6,12) |
|
||||
| 80550000 | 0x80550000 | 80550d9c | - | prev=5404063e (op21) word=380393f0 (addi r0,r3,-27664) |
|
||||
| 805536d8 | 0x805536d8 | 8054d780 | bc | conditional-branch target (inside a function); prev=48000094 (b) word=7f03c378 (mr r3,r24) |
|
||||
| 80553730 | 0x80553730 | 8054d7d8 | jt+bc | conditional-branch target (inside a function); prev=48000008 (b) word=3b400008 (li r26,8) |
|
||||
| 805658f0 | 0x805658f0 | 80561570 | - | prev=1ca5000c (op7) word=c8430000 (lfd f2,0(r3)) |
|
||||
| 80565b50 | 0x80565b50 | 805617d0 | - | prev=7c0802a6 (mflr r0) word=2c030000 (cmpwi cr0,r3,0) |
|
||||
| 80565d14 | 0x80565d14 | 80561994 | - | prev=d01e0028 (op52) word=d01e002c (op52) |
|
||||
| 8058b164 | 0x8058b164 | 80584940 | - | prev=48000cc1 (bl) word=7fc3f378 (mr r3,r30); next proven start at +0x34 |
|
||||
| 805abea8 | 0x805abea8 | 805a0f40 | b+jt+bc | conditional-branch target (inside a function); prev=4819a1d9 (bl) word=807f0000 (lwz r3,0(r31)) |
|
||||
| 805b0000 | 0x805b0000 | 805a50d8 | - | prev=99410009 (op38) word=9921000a (op38) |
|
||||
| 805cdf28 | 0x805cdf28 | 805c1408 | b+bc | conditional-branch target (inside a function); prev=d014001c (op52) word=5660103a (op21) |
|
||||
| 805d2aa8 | 0x805d2aa8 | 805c598c | bc | conditional-branch target (inside a function); prev=3a20ffff (li r17,-1) word=80100000 (lwz r0,0(r16)) |
|
||||
| 805f98f4 | SimpleMessageWindowControl::GetClassName | 805d9010 | - | prev=3c600000 (lis r3,0x0000) word=38630000 (addi r3,r3,0); next proven start at +0xc |
|
||||
| 8060b73c | 0x8060b73c | 80640c5c | - | prev=38800037 (li r4,55) word=38a00038 (li r5,56) |
|
||||
| 8060b82c | 0x8060b82c | 80640d4c | - | prev=386100f8 (addi r3,r1,248) word=38840000 (addi r4,r4,0) |
|
||||
| 8060ef44 | 0x8060ef44 | 80644464 | ptr+b+bc | conditional-branch target (inside a function); prev=4bf99749 (bl) word=396100f0 (addi r11,r1,240); next proven start at +0x18 |
|
||||
| 806116c0 | 0x806116c0 | 80646be0 | ptr+b+bc | conditional-branch target (inside a function); prev=4800005c (b) word=38610008 (addi r3,r1,8) |
|
||||
| 8061f550 | 0x8061f550 | 8064c06c | b+jt+bc | conditional-branch target (inside a function); prev=48000088 (b) word=38610008 (addi r3,r1,8) |
|
||||
| 80628068 | 0x80628068 | 805f71b4 | - | prev=80010014 (lwz r0,20(r1)) word=7c0803a6 (mtlr r0) |
|
||||
| 8064f7ec | 0x8064f7ec | 8061c4d8 | bc | conditional-branch target (inside a function); prev=3fc00000 (lis r30,0x0000) word=5743063e (op21) |
|
||||
| 8064f988 | 0x8064f988 | 8061c674 | ptr+b+bc | conditional-branch target (inside a function); prev=4bef8eed (bl) word=38c00001 (li r6,1) |
|
||||
| 8065193c | 0x8065193c | 8061e628 | bc | conditional-branch target (inside a function); prev=3dc00000 (lis r14,0x0000) word=807a0000 (lwz r3,0(r26)) |
|
||||
| 80651984 | 0x80651984 | 8061e670 | bc | conditional-branch target (inside a function); prev=480001f8 (b) word=9a3601f4 (op38) |
|
||||
| 80651b1c | 0x80651b1c | 8061e808 | ptr+b+bc | conditional-branch target (inside a function); prev=901601f8 (stw r0,504(r22)) word=807a0000 (lwz r3,0(r26)) |
|
||||
| 80668558 | 0x80668558 | 806761a8 | ptr+bc | conditional-branch target (inside a function); prev=48000068 (b) word=388018a6 (li r4,6310) |
|
||||
| 8067b190 | 0x8067b190 | 80676d08 | jt+bc | conditional-branch target (inside a function); prev=48000068 (b) word=388018a6 (li r4,6310) |
|
||||
| 80688e48 | 0x80688e48 | 806849c0 | bc | conditional-branch target (inside a function); prev=d001008c (op52) word=281a0009 (cmplwi cr0,r26,9) |
|
||||
| 80689d74 | 0x80689d74 | 806858ec | bc | conditional-branch target (inside a function); prev=3a600001 (li r19,1) word=281b0009 (cmplwi cr0,r27,9) |
|
||||
| 8068a3b4 | 0x8068a3b4 | 80685f2c | bc | conditional-branch target (inside a function); prev=3a600001 (li r19,1) word=281b0009 (cmplwi cr0,r27,9) |
|
||||
| 8068a9fc | 0x8068a9fc | 80686574 | bc | conditional-branch target (inside a function); prev=3a200001 (li r17,1) word=28190009 (cmplwi cr0,r25,9) |
|
||||
| 8068b15c | 0x8068b15c | 80686cd4 | bc | conditional-branch target (inside a function); prev=3a200001 (li r17,1) word=28190009 (cmplwi cr0,r25,9) |
|
||||
| 80697c30 | 0x80697c30 | 806937a8 | bc | conditional-branch target (inside a function); prev=3fc00000 (lis r30,0x0000) word=807d0164 (lwz r3,356(r29)) |
|
||||
| 806a2460 | 0x806a2460 | 8069dfd8 | - | prev=38ff06f4 (addi r7,r31,1780) word=391f07c8 (addi r8,r31,1992) |
|
||||
| 806afaf0 | 0x806afaf0 | 806ab668 | - | prev=807e0318 (lwz r3,792(r30)) word=389f0738 (addi r4,r31,1848) |
|
||||
| 806baad4 | 0x806baad4 | 806b664c | - | prev=8001001c (lwz r0,28(r1)) word=b01e0182 (op44) |
|
||||
| 806bd88c | 0x806bd88c | 806b9404 | - | prev=80630028 (lwz r3,40(r3)) word=4be99bbd (bl) |
|
||||
| 806bf208 | 0x806bf208 | 806bad80 | - | prev=7c9e002e (op31) word=38840030 (addi r4,r4,48) |
|
||||
| 806bf228 | 0x806bf228 | 806bada0 | - | prev=c0410020 (op48) word=60000001 (ori r0,r0,0x0001) |
|
||||
| 806c9f90 | 0x806c9f90 | 806bf39c | - | prev=7c0803a6 (mtlr r0) word=38210020 (addi r1,r1,32) |
|
||||
| 806c9fb0 | 0x806c9fb0 | 806bf3bc | - | prev=81830000 (lwz r12,0(r3)) word=3fc00000 (lis r30,0x0000) |
|
||||
| 806e70c4 | 0x806e70c4 | 806d6080 | - | prev=c01e001c (op48) word=d03c0120 (op52) |
|
||||
| 8070ecb4 | 0x8070ecb4 | 80716384 | - | prev=90c30060 (stw r6,96(r3)) word=4d810020 (op19) |
|
||||
| 8070ede4 | 0x8070ede4 | 807164b4 | jt | prev=90030060 (stw r0,96(r3)) word=4e800020 (blr) |
|
||||
| 807123bc | 0x807123bc | 8070a918 | b+jt+bc | conditional-branch target (inside a function); prev=3ba00002 (li r29,2) word=2c1c0000 (cmpwi cr0,r28,0) |
|
||||
| 80726cb0 | 0x80726cb0 | 8073cd18 | - | prev=ec460072 (op59) word=c0010024 (op48) |
|
||||
| 80726e04 | 0x80726e04 | 8073ce6c | - | prev=ec6400f2 (op59) word=ec22082a (op59) |
|
||||
| 8073e1b0 | 0x8073e1b0 | 80747438 | ptr+b+bc | conditional-branch target (inside a function); prev=7c661b78 (mr r6,r3) word=83e1000c (lwz r31,12(r1)); next proven start at +0x1c |
|
||||
| 8073eaf8 | 0x8073eaf8 | 80747d80 | ptr+b+bc | conditional-branch target (inside a function); prev=7c661b78 (mr r6,r3) word=83e1000c (lwz r31,12(r1)) |
|
||||
| 80754cd8 | 0x80754cd8 | 8074d05c | b+jt+bc | conditional-branch target (inside a function); prev=418202d8 (bc) word=38610068 (addi r3,r1,104) |
|
||||
| 807604c4 | 0x807604c4 | 80753578 | - | prev=3400ffff (op13) word=900300c0 (stw r0,192(r3)) |
|
||||
| 8078c3e0 | 0x8078c3e0 | 807d4978 | - | prev=ec00102a (op59) word=fc00001e (op63) |
|
||||
| 807c6b34 | 0x807c6b34 | 807b80d4 | ptr+bc | conditional-branch target (inside a function); prev=4800010c (b) word=839d0000 (lwz r28,0(r29)) |
|
||||
| 807ce31c | 0x807ce31c | 807bf8bc | ptr+bc | conditional-branch target (inside a function); prev=4e800420 (bctr) word=c05d0308 (op48) |
|
||||
| 807d3358 | 0x807d3358 | 807c48f8 | ptr+b+bc | conditional-branch target (inside a function); prev=7cbc2b78 (mr r28,r5) word=2c1c0000 (cmpwi cr0,r28,0); next proven start at +0x34 |
|
||||
| 807f8084 | 0x807f8084 | 807ed584 | - | prev=38a10008 (addi r5,r1,8) word=38c1000a (addi r6,r1,10) |
|
||||
| 807fda18 | 0x807fda18 | 807f0e58 | - | prev=a804002e (op42) word=b01e013c (op44) |
|
||||
| 80800000 | 0x80800000 | 807f2488 | - | prev=7c641b78 (mr r4,r3) word=7fc3f378 (mr r3,r30) |
|
||||
| 80808080 | 0x80808080 | 807f8938 | - | prev=3bde0000 (addi r30,r30,0) word=38800002 (li r4,2) |
|
||||
| 80810000 | 0x80810000 | 807fefe0 | - | prev=2c1a0001 (cmpwi cr0,r26,1) word=4182004c (bc) |
|
||||
| 808148a4 | 0x808148a4 | 80801af8 | - | prev=c02a0000 (op48) word=480014c0 (b) |
|
||||
| 8082b708 | 0x8082b708 | 80817bf4 | bc | conditional-branch target (inside a function); prev=3f800000 (lis r28,0x0000) word=81980000 (lwz r12,0(r24)) |
|
||||
| 8082bd68 | 0x8082bd68 | 80818254 | - | prev=80830000 (lwz r4,0(r3)) word=548005ef (op21) |
|
||||
| 80830000 | 0x80830000 | 8084ccd8 | bc | conditional-branch target (inside a function); prev=4bd06379 (bl) word=38610008 (addi r3,r1,8) |
|
||||
| 80833800 | 0x80833800 | 8081b900 | jt+bc | conditional-branch target (inside a function); prev=48000008 (b) word=3860ffff (li r3,-1); next proven start at +0x1c |
|
||||
| 8085ade8 | 0x8085ade8 | 80839358 | jt+bc | conditional-branch target (inside a function); prev=480001fc (b) word=80031780 (lwz r0,6016(r3)) |
|
||||
| 8085bb9c | 0x8085bb9c | 8083a10c | jt+bc | conditional-branch target (inside a function); prev=48000048 (b) word=2c040016 (cmpwi cr0,r4,22) |
|
||||
| 80860350 | 0x80860350 | 8083b704 | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=3860ffff (li r3,-1); next proven start at +0x8 |
|
||||
| 808603ac | 0x808603ac | 8083b760 | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=3860ffff (li r3,-1); next proven start at +0x8 |
|
||||
| 8086047c | 0x8086047c | 8083b830 | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=38600000 (li r3,0); next proven start at +0x8 |
|
||||
| 80862ab0 | 0x80862ab0 | 8085ea90 | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=3860ffff (li r3,-1); next proven start at +0x8 |
|
||||
| 80862e1c | 0x80862e1c | 8085edfc | ptr+bc | conditional-branch target (inside a function); prev=4e800020 (blr) word=3860ffff (li r3,-1) |
|
||||
| 80863618 | 0x80863618 | 8085f1e8 | ptr+b+bc | conditional-branch target (inside a function); prev=90030000 (stw r0,0(r3)) word=2c040000 (cmpwi cr0,r4,0) |
|
||||
| 80863710 | 0x80863710 | 8085f2e0 | ptr+b+bc | conditional-branch target (inside a function); prev=90030000 (stw r0,0(r3)) word=2c040000 (cmpwi cr0,r4,0) |
|
||||
| 80863814 | 0x80863814 | 8085f3e4 | ptr+b+bc | conditional-branch target (inside a function); prev=901f0000 (stw r0,0(r31)) word=80010014 (lwz r0,20(r1)); next proven start at +0x18 |
|
||||
| 80869368 | 0x80869368 | 808648e4 | jt+bc | conditional-branch target (inside a function); prev=4e800420 (bctr) word=38000000 (li r0,0) |
|
||||
| 8086e824 | 0x8086e824 | 8087ab9c | - | prev=3860007c (li r3,124) word=38840000 (addi r4,r4,0) |
|
||||
| 80877b48 | 0x80877b48 | 8086adf0 | - | prev=2c030000 (cmpwi cr0,r3,0) word=41820014 (bc) |
|
||||
|
||||
## Identity (low-memory) entries (15)
|
||||
|
||||
Below 0x80004000 the PAL address is kept unchanged. These addresses are outside every DOL/REL section, so the binaries cannot vouch for them; the evidence column shows whether any NTSC-U code branches to them.
|
||||
|
||||
| address | name | binary evidence |
|
||||
|---|---|---|
|
||||
| 800018a8 | 0x800018a8 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001d50 | 0x80001d50 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001d6c | 0x80001d6c | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001d90 | 0x80001d90 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001dc0 | 0x80001dc0 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001de8 | 0x80001de8 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001dec | 0x80001dec | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001e14 | 0x80001e14 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001e30 | 0x80001e30 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001f1c | 0x80001f1c | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001f40 | 0x80001f40 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80001f54 | 0x80001f54 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 80002440 | 0x80002440 | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 8000245c | 0x8000245c | low memory, binary evidence: UNVERIFIED (-) |
|
||||
| 8000249c | __TRKreset | low memory, binary evidence: UNVERIFIED (-) |
|
||||
@@ -5,7 +5,7 @@ workspace_root: ../..
|
||||
# the facts that differ per region: the small-data bases the DOL's __init_registers installs, the
|
||||
# StaticR.rel load address and the clean-input digests. The function map is the PAL map ported
|
||||
# through the community region table and validated against these binaries by
|
||||
# tools/region/port_map.py; MAP_REPORT.md next to it carries the numbers.
|
||||
# tools/region/port_map.py.
|
||||
project:
|
||||
id: mkwii-rmce01
|
||||
display_name: Mario Kart Wii NTSC-U
|
||||
|
||||
+8
-483
@@ -11,7 +11,7 @@ exception-table records, function-pointer tables, or at least a terminator/prolo
|
||||
|
||||
Plain Python 3 stdlib only. Output is deterministic (no timestamps, sorted everywhere).
|
||||
|
||||
Method (see MAP_REPORT.md for the numbers of a given run):
|
||||
Method:
|
||||
A. Build the evidence set K of target function entry points proven by the binaries:
|
||||
- DOL text: `bl` targets (strong), `b` targets (weak), lis/addi(ori) pairs that
|
||||
materialise a code address (medium), the DOL entry point (strong).
|
||||
@@ -36,13 +36,11 @@ Method (see MAP_REPORT.md for the numbers of a given run):
|
||||
C. Entries the chunk table cannot port: IDENTITY below 0x80004000, else INTERPOLATED when
|
||||
the PAL gap and the target gap between the nearest PROVEN neighbours hold the same number
|
||||
of entries, else DROPPED.
|
||||
D. Verify the CodeWarrior save/restore thunk families the recompiler resolves by name.
|
||||
E. Emit MAP.txt sorted by target address, deduplicated, parseable by FunctionMap.cs.
|
||||
H. Append every target entry point K proves that no ported PAL entry covers (bl targets,
|
||||
.ctors/.dtors entries, REL prolog/epilog/unresolved, extabindex records, function-pointer
|
||||
tables) as unnamed placeholder entries, reported per evidence class.
|
||||
tables) as unnamed placeholder entries.
|
||||
F. Emit region_port.json with the vendored chunk table for other tooling.
|
||||
G. Emit MAP_REPORT.md.
|
||||
|
||||
Usage:
|
||||
port_map.py --region E --disc-root DIR # DIR/RMCE01/sys/main.dol, DIR/RMCE01/files/rel/StaticR.rel
|
||||
@@ -98,7 +96,7 @@ SDA_BASES = {"P": (0x8038CC00, 0x8038EFA0), "E": (0x80388880, 0x8038AC20),
|
||||
|
||||
# Output project directory per destination region.
|
||||
PROJECT_DIR = {"E": "mkwii-ntsc-u", "J": "mkwii-ntsc-j"}
|
||||
# Display name and game ID of each target region, for the map header and the report.
|
||||
# Display name and game ID of each target region, for the map header.
|
||||
REGION_NAME = {"E": ("NTSC-U", "RMCE01"), "J": ("NTSC-J", "RMCJ01")}
|
||||
|
||||
DOL_SECTIONS = {
|
||||
@@ -321,18 +319,7 @@ def rel_secs():
|
||||
|
||||
|
||||
LOW_MEMORY_LIMIT = 0x80004000 # below this: exception vectors / runtime-copied code
|
||||
REL_MODULE_ID = 1
|
||||
INIT_REGISTERS_SYMBOL = "__init_registers"
|
||||
INIT_REGISTERS_PAL = 0x80006210
|
||||
|
||||
# Save/restore thunk families resolved by name in GuestSaveRestoreThunks.cs:
|
||||
# (prefix, mnemonic, primary opcode, bytes per register)
|
||||
THUNK_FAMILIES = [
|
||||
("_save_gpr_", "stw", 36, 4),
|
||||
("_rest_gpr_", "lwz", 32, 4),
|
||||
("_save_fpr_", "stfd", 54, 8),
|
||||
("_rest_fpr_", "lfd", 50, 8),
|
||||
]
|
||||
|
||||
# REL relocation types
|
||||
R_PPC_NONE, R_PPC_ADDR32, R_PPC_ADDR24, R_PPC_ADDR16 = 0, 1, 2, 3
|
||||
@@ -376,8 +363,6 @@ ADDITION_CLASSES = [
|
||||
]
|
||||
|
||||
EMITTED_VERDICTS = ("PROVEN", "REFERENCED", "PLAUSIBLE", "IDENTITY", "INTERPOLATED")
|
||||
VERDICT_ORDER = ("PROVEN", "REFERENCED", "PLAUSIBLE", "IDENTITY", "INTERPOLATED",
|
||||
"UNVERIFIED", "DROPPED")
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------------------
|
||||
@@ -461,7 +446,7 @@ def first_insn_quality(w: int) -> str:
|
||||
|
||||
|
||||
def decode_simple(w: int) -> str:
|
||||
"""Tiny disassembler for the instructions the report needs to show."""
|
||||
"""Tiny disassembler for the evidence notes."""
|
||||
op = opcd(w)
|
||||
if op == 36:
|
||||
return f"stw r{reg_d(w)},{simm(w)}(r{reg_a(w)})"
|
||||
@@ -1243,105 +1228,6 @@ def finish_unported(entries: List[Entry]) -> None:
|
||||
e.note = "outside every chunk; no interpolation gap"
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------------------
|
||||
# Special checks
|
||||
# ---------------------------------------------------------------------------------------
|
||||
def thunk_expected(opcode: int, reg: int, step: int) -> int:
|
||||
return ((opcode << 26) | (reg << 21) | (11 << 16) | ((-(step * (32 - reg))) & 0xFFFF)) & 0xFFFFFFFF
|
||||
|
||||
|
||||
def check_thunks(entries: List[Entry], mem: Memory) -> List[dict]:
|
||||
by_name: Dict[str, Entry] = {}
|
||||
for e in entries:
|
||||
if e.named and e.name not in by_name:
|
||||
by_name[e.name] = e
|
||||
results = []
|
||||
for prefix, mnemonic, opcode, step in THUNK_FAMILIES:
|
||||
members = []
|
||||
for name, e in by_name.items():
|
||||
if name.startswith(prefix):
|
||||
suffix = name[len(prefix):]
|
||||
if suffix.isdigit():
|
||||
members.append((int(suffix), e))
|
||||
members.sort()
|
||||
rows = []
|
||||
family_ok = True
|
||||
for reg, e in members:
|
||||
expected = thunk_expected(opcode, reg, step)
|
||||
actual = mem.read_u32(e.ntsc) if e.ntsc is not None else None
|
||||
ok = actual == expected and e.verdict in EMITTED_VERDICTS
|
||||
family_ok &= ok
|
||||
rows.append({
|
||||
"name": e.name, "pal": e.pal, "ntsc": e.ntsc, "verdict": e.verdict,
|
||||
"expected": expected, "actual": actual,
|
||||
"decoded": decode_simple(actual) if actual is not None else "n/a", "ok": ok,
|
||||
})
|
||||
run_ok = True
|
||||
run_note = ""
|
||||
if len(members) >= 2:
|
||||
first_reg, first = members[0]
|
||||
last_reg, last = members[-1]
|
||||
if first.ntsc is not None and last.ntsc is not None:
|
||||
if last.ntsc != first.ntsc + 4 * (last_reg - first_reg):
|
||||
run_ok = False
|
||||
run_note = "family is not a four-byte-per-register run (FunctionMap.ResolveRange would throw)"
|
||||
# full run: registers first..31 must all decode as expected
|
||||
for reg in range(first_reg, 32):
|
||||
a = first.ntsc + 4 * (reg - first_reg)
|
||||
w = mem.read_u32(a)
|
||||
if w != thunk_expected(opcode, reg, step):
|
||||
run_ok = False
|
||||
run_note = f"register {reg} at {a:08x} decodes as {decode_simple(w) if w is not None else 'n/a'}"
|
||||
break
|
||||
else:
|
||||
run_ok = False
|
||||
run_note = "fewer than two named members"
|
||||
results.append({"prefix": prefix, "mnemonic": mnemonic, "rows": rows, "family_ok": family_ok and run_ok,
|
||||
"run_note": run_note})
|
||||
return results
|
||||
|
||||
|
||||
def read_sda_bases(entries: List[Entry], mem: Memory) -> dict:
|
||||
init = next((e for e in entries if e.named and e.name == INIT_REGISTERS_SYMBOL), None)
|
||||
result = {"symbol": INIT_REGISTERS_SYMBOL, "pal": None, "ntsc": None, "values": {}, "listing": [], "status": ""}
|
||||
if init is None or init.ntsc is None:
|
||||
result["status"] = "symbol not found or not ported"
|
||||
return result
|
||||
result["pal"] = init.pal
|
||||
result["ntsc"] = init.ntsc
|
||||
pending: Dict[int, int] = {}
|
||||
values: Dict[int, int] = {}
|
||||
for i in range(48):
|
||||
a = init.ntsc + 4 * i
|
||||
w = mem.read_u32(a)
|
||||
if w is None:
|
||||
break
|
||||
result["listing"].append((a, w, decode_simple(w)))
|
||||
op = opcd(w)
|
||||
if op == 15 and reg_a(w) == 0: # lis rD, hi
|
||||
pending[reg_d(w)] = uimm(w) << 16
|
||||
elif op == 24 and reg_a(w) == reg_d(w) and reg_d(w) in pending: # ori rX,rX,lo
|
||||
values[reg_a(w)] = (pending.pop(reg_a(w)) | uimm(w)) & 0xFFFFFFFF
|
||||
elif op == 14 and reg_a(w) == reg_d(w) and reg_a(w) != 0 and reg_d(w) in pending: # addi rX,rX,lo
|
||||
values[reg_a(w)] = (pending.pop(reg_a(w)) + simm(w)) & 0xFFFFFFFF
|
||||
if w == 0x4E800020:
|
||||
break
|
||||
result["values"] = {f"r{r}": v for r, v in sorted(values.items())}
|
||||
r13 = values.get(13)
|
||||
r2 = values.get(2)
|
||||
checks = []
|
||||
for reg, val in (("r13", r13), ("r2", r2)):
|
||||
exp = SDA_BASES[TARGET][0 if reg == "r13" else 1]
|
||||
if val is None:
|
||||
checks.append(f"{reg}: not found")
|
||||
elif val == exp:
|
||||
checks.append(f"{reg}=0x{val:08X} (matches expectation)")
|
||||
else:
|
||||
checks.append(f"{reg}=0x{val:08X} (EXPECTED 0x{exp:08X})")
|
||||
result["status"] = "; ".join(checks)
|
||||
return result
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------------------
|
||||
# Output
|
||||
# ---------------------------------------------------------------------------------------
|
||||
@@ -1437,7 +1323,7 @@ def write_map(path: str, kept: List[Entry], counts: Dict[str, int], pal_map: str
|
||||
os.makedirs(os.path.dirname(os.path.abspath(path)), exist_ok=True)
|
||||
lines = [
|
||||
f"# {TN} ({TI}) function map, ported from {pal_map} (PAL RMCP01) by {TOOL_ID}.",
|
||||
f"# Every entry was validated against the {TI} main.dol/StaticR.rel; see MAP_REPORT.md next to this file.",
|
||||
f"# Every entry was validated against the {TI} main.dol/StaticR.rel.",
|
||||
"# Verdicts: " + ", ".join(f"{k}={counts.get(k, 0)}" for k in EMITTED_VERDICTS)
|
||||
+ f", ADDED={counts.get('ADDED', 0)} (binary-proven entries no PAL entry covers); entries={len(kept)}",
|
||||
]
|
||||
@@ -1473,350 +1359,6 @@ def write_json(path: str, table: ChunkTable, dol: Dol, rel: Rel) -> None:
|
||||
write_if_changed(path, json.dumps(payload, indent=2) + "\n")
|
||||
|
||||
|
||||
def layout_check(dol: Dol, rel: Rel) -> List[str]:
|
||||
"""Compare the parsed target binaries with the vendored mkw-sp layout for that region."""
|
||||
notes = []
|
||||
parsed = {s.start: s for s in dol.sections}
|
||||
for name, start, end in dol_secs():
|
||||
if name in ("bss", "sbss", "sbss2"):
|
||||
continue
|
||||
s = parsed.get(start)
|
||||
if s is None:
|
||||
notes.append(f"DOL {name}: expected a section at {start:08x}, none parsed")
|
||||
elif s.end != end:
|
||||
notes.append(f"DOL {name}: parsed {s.start:08x}-{s.end:08x}, table says {start:08x}-{end:08x}")
|
||||
else:
|
||||
notes.append(f"DOL {name}: {start:08x}-{end:08x} OK")
|
||||
if dol.bss_addr != dol_secs()[8][1]:
|
||||
notes.append(f"DOL bss: header says {dol.bss_addr:08x}, table says {dol_secs()[8][1]:08x}")
|
||||
parsed_rel = {s.start: s for s in rel.sections}
|
||||
for name, start, end in rel_secs():
|
||||
s = parsed_rel.get(start)
|
||||
if s is None:
|
||||
notes.append(f"REL {name}: expected a section at {start:08x}, none parsed")
|
||||
elif s.end != end:
|
||||
notes.append(f"REL {name}: parsed {s.start:08x}-{s.end:08x}, table says {start:08x}-{end:08x}")
|
||||
else:
|
||||
notes.append(f"REL {name}: {start:08x}-{end:08x} OK")
|
||||
return notes
|
||||
|
||||
|
||||
def label_class_rows(entries: List[Entry]) -> List[List[str]]:
|
||||
classes: Dict[str, collections.Counter] = collections.OrderedDict(
|
||||
(k, collections.Counter()) for k in ("case", "switch", "data"))
|
||||
for e in entries:
|
||||
k = entry_kind(e.name)
|
||||
if k in classes:
|
||||
classes[k][e.verdict] += 1
|
||||
rows = []
|
||||
for k, c in classes.items():
|
||||
rows.append([k, sum(c.values())] + [c.get(v, 0) for v in VERDICT_ORDER])
|
||||
return rows
|
||||
|
||||
|
||||
def extent_check(entries: List[Entry], kept: List[Entry], table: ChunkTable) -> Tuple[int, List[List[str]], int]:
|
||||
"""For chunk-ported entries whose PAL successor is not ported by the same chunk (chunk tails and
|
||||
entries next to holes), compare the PAL extent (distance to the next PAL entry) with the NTSC-U
|
||||
extent (distance to the next emitted entry). Inside a chunk the two are equal by construction,
|
||||
so a mismatch here marks exactly the places where the chunk table's edges may be sloppy."""
|
||||
kept_addrs = sorted(e.ntsc for e in kept)
|
||||
rows: List[List[str]] = []
|
||||
unnamed_mismatch = checked = 0
|
||||
for i, e in enumerate(entries):
|
||||
if e.method != "chunk" or e.verdict not in EMITTED_VERDICTS or i + 1 >= len(entries):
|
||||
continue
|
||||
s = entries[i + 1]
|
||||
if s.method == "chunk" and table.find(s.pal) == table.find(e.pal):
|
||||
continue
|
||||
checked += 1
|
||||
ext_pal = s.pal - e.pal
|
||||
j = bisect.bisect_right(kept_addrs, e.ntsc)
|
||||
ext_ntsc = kept_addrs[j] - e.ntsc if j < len(kept_addrs) else None
|
||||
if ext_ntsc == ext_pal:
|
||||
continue
|
||||
if e.named:
|
||||
rows.append([hx(e.pal), e.display_name, hx(e.ntsc), e.verdict, f"{ext_pal:#x}",
|
||||
f"{ext_ntsc:#x}" if ext_ntsc is not None else "-", f"{s.display_name} ({s.verdict})"])
|
||||
else:
|
||||
unnamed_mismatch += 1
|
||||
return checked, rows, unnamed_mismatch
|
||||
|
||||
|
||||
def md_table(header: List[str], rows: List[List[str]]) -> List[str]:
|
||||
out = ["| " + " | ".join(header) + " |", "|" + "|".join("---" for _ in header) + "|"]
|
||||
for r in rows:
|
||||
out.append("| " + " | ".join(str(c).replace("|", "\\|") for c in r) + " |")
|
||||
return out
|
||||
|
||||
|
||||
def hx(a: Optional[int]) -> str:
|
||||
return "-" if a is None else f"{a:08x}"
|
||||
|
||||
|
||||
def write_report(path: str, args: argparse.Namespace, dol: Dol, rel: Rel, table: ChunkTable, ev: Evidence,
|
||||
entries: List[Entry], kept: List[Entry], collisions: List[List[Entry]], gaps: List[GapResult],
|
||||
thunks: List[dict], sda: dict, added: List[Entry], add_stats: AdditionStats) -> str:
|
||||
L: List[str] = []
|
||||
counts = collections.Counter(e.verdict for e in entries)
|
||||
per_module: Dict[str, collections.Counter] = collections.defaultdict(collections.Counter)
|
||||
for e in entries:
|
||||
per_module[e.module][e.verdict] += 1
|
||||
emitted_counts = collections.Counter(e.verdict for e in kept)
|
||||
L.append(f"# {TN} ({TI}) function map port report")
|
||||
L.append("")
|
||||
L.append(f"Generated by `{TOOL_ID}`. Deterministic; no timestamps.")
|
||||
L.append("")
|
||||
L.append("## Summary")
|
||||
L.append("")
|
||||
L.append(f"- PAL map: `{repo_relative(args.pal_map)}` ({len(entries)} entries, {sum(1 for e in entries if e.named)} named)")
|
||||
L.append(f"- {TN} DOL: `{os.path.basename(dol.path)}` sha256 `{dol.sha256}` entry `0x{dol.entry:08X}`")
|
||||
L.append(f"- {TN} REL: `{os.path.basename(rel.path)}` sha256 `{rel.sha256}` load `0x{rel.load_address:08X}` "
|
||||
f"(module {rel.module_id}, v{rel.version}, prolog `0x{rel.prolog:08X}`, epilog `0x{rel.epilog:08X}`, "
|
||||
f"unresolved `0x{rel.unresolved:08X}`)")
|
||||
L.append(f"- Chunk table: {len(table.chunks)} PAL->{TN} chunks (mkw-sp port.py, MIT)"
|
||||
+ (f"; problems: {'; '.join(table.problems)}" if table.problems else "; no overlaps, all deltas word-aligned"))
|
||||
L.append(f"- Output map: `{repo_relative(args.out_map)}` with **{len(kept)}** entries "
|
||||
f"({sum(1 for e in kept if e.named)} named); `{repo_relative(args.out_json)}` carries the chunk table.")
|
||||
L.append("")
|
||||
L.append("### Verdict totals (all PAL entries)")
|
||||
L.append("")
|
||||
rows = []
|
||||
for v in VERDICT_ORDER:
|
||||
rows.append([v, counts.get(v, 0), per_module["low"].get(v, 0), per_module["dol"].get(v, 0),
|
||||
per_module["rel"].get(v, 0), "yes" if v in EMITTED_VERDICTS else "no"])
|
||||
rows.append(["total", len(entries), sum(per_module["low"].values()), sum(per_module["dol"].values()),
|
||||
sum(per_module["rel"].values()), ""])
|
||||
L += md_table(["verdict", "entries", "low-mem", "DOL", "REL", "emitted"], rows)
|
||||
L.append("")
|
||||
L.append("Emitted after deduplication: " + ", ".join(f"{v}={emitted_counts.get(v, 0)}" for v in EMITTED_VERDICTS)
|
||||
+ f"; total {len(kept)} ported entries, plus {len(added)} binary-proven entries no PAL entry covers "
|
||||
f"(section below) = **{len(kept) + len(added)}** lines in MAP.txt. UNVERIFIED and DROPPED entries are "
|
||||
f"never written to MAP.txt.")
|
||||
L.append("")
|
||||
L.append(f"### Binary-proven entries added (step H: {TN} entry points no ported PAL entry covers)")
|
||||
L.append("")
|
||||
L.append("Emitted as unnamed placeholders (`hexaddr 0xhexaddr`). Strong classes are taken as proven; the "
|
||||
"pointer-referenced classes must also pass the structural check (not a conditional-branch target, "
|
||||
"terminator before, decodable first instruction) because no PAL entry vouches for them. Each address "
|
||||
"is counted once, under the first class that applies.")
|
||||
L.append("")
|
||||
L += md_table(["evidence class", "added"], [[k, v] for k, v in add_stats.per_class.items()]
|
||||
+ [["total added", len(added)]])
|
||||
L.append("")
|
||||
ctor_labels = {"ctor:dol": "DOL .ctors", "dtor:dol": "DOL .dtors", "ctor:rel": "REL .ctors", "dtor:rel": "REL .dtors"}
|
||||
L.append("Constructor/destructor tables: "
|
||||
+ "; ".join(f"{ctor_labels[t]} {add_stats.ctor_total.get(t, 0)} entries, "
|
||||
f"{add_stats.ctor_missing.get(t, 0)} previously missing from the map"
|
||||
for t in ("ctor:dol", "dtor:dol", "ctor:rel", "dtor:rel")) + ".")
|
||||
L.append(f"Not added: {add_stats.rejected_medium} pointer-referenced addresses that failed the structural check "
|
||||
f"(jump-table targets and similar), {add_stats.skipped_weak} addresses with only weak evidence "
|
||||
f"(conditional/unconditional branch targets, lis/addi pairs, jump-table-like runs). Strong additions "
|
||||
f"that are also a conditional-branch target: {add_stats.strong_bc_anomalies}.")
|
||||
L.append("")
|
||||
for label, addrs in add_stats.per_class_addrs.items():
|
||||
if not addrs:
|
||||
continue
|
||||
L.append(f"{label} ({len(addrs)}):")
|
||||
L.append("")
|
||||
L.append("```text")
|
||||
for i in range(0, len(addrs), 12):
|
||||
L.append(" ".join(f"{a:08x}" for a in addrs[i:i + 12]))
|
||||
L.append("```")
|
||||
L.append("")
|
||||
strong_q = collections.Counter()
|
||||
for e in kept:
|
||||
strong_q[(e.verdict, e.quality)] += 1
|
||||
L.append("First-instruction quality of emitted entries (strong = typical prologue/first instruction, "
|
||||
"valid = any decodable instruction): "
|
||||
+ ", ".join(f"{v}/{q}={n}" for (v, q), n in sorted(strong_q.items())))
|
||||
L.append("")
|
||||
dropped_n = counts.get("DROPPED", 0)
|
||||
unv_n = counts.get("UNVERIFIED", 0)
|
||||
L.append("### Reading the numbers")
|
||||
L.append("")
|
||||
L.append(f"- {counts.get('PROVEN', 0) + counts.get('REFERENCED', 0)} of {len(entries)} entries land on an address the "
|
||||
f"{TN} binaries reference as code (call target, exception-table record, entry point, function-pointer "
|
||||
f"table, jump table for case labels); {counts.get('PLAUSIBLE', 0)} more sit right after a function "
|
||||
f"terminator (or are verified switch dispatch sites) with a decodable first instruction.")
|
||||
L.append(f"- {unv_n} UNVERIFIED entries are withheld: see the per-class breakdown in the Unverified section. None of "
|
||||
f"the no-evidence ones lies near a chunk edge; they are surrounded by validated neighbours inside their "
|
||||
f"chunk, which points at PAL-map noise (mid-function addresses, round addresses, names misplaced by one "
|
||||
f"instruction) rather than at the chunk table.")
|
||||
L.append(f"- {dropped_n} DROPPED entries: jump tables and other data symbols the PAL map carries, PAL-only code "
|
||||
f"regions with no {TN} counterpart, and chunk-table holes with no interpolation gap.")
|
||||
L.append(f"- The PAL project uses sda_base/sda2_base 0x8038CC00/0x8038EFA0; the {TN} values read below are the "
|
||||
f"ones an {TN} project must configure.")
|
||||
L.append("")
|
||||
L.append("### Non-function labels carried by the PAL map")
|
||||
L.append("")
|
||||
L.append("The PAL map contains Ghidra-style labels that are not function starts: `*_caseD_N` switch case "
|
||||
"labels (validated here by a jump-table reference at the ported address), `*_switch` dispatch "
|
||||
"points (validated as `mtctr`+`bctr`), and `switchdataD_*` jump tables (data, never code). "
|
||||
"They are ported with the same rules; the verdict spread per class:")
|
||||
L.append("")
|
||||
L += md_table(["class", "entries"] + list(VERDICT_ORDER), label_class_rows(entries))
|
||||
L.append("")
|
||||
checked, ext_rows, ext_unnamed = extent_check(entries, kept, table)
|
||||
L.append("### Chunk-edge extent check")
|
||||
L.append("")
|
||||
L.append(f"{checked} emitted chunk-ported entries sit at a chunk edge (their PAL successor is not ported by the "
|
||||
f"same chunk). For these the PAL extent (distance to the next PAL entry) was compared with the "
|
||||
f"{TN} extent (distance to the next emitted entry): {len(ext_rows)} named and {ext_unnamed} unnamed "
|
||||
f"entries differ. A difference means the function's size changed, the successor was dropped, or the "
|
||||
f"chunk edge is sloppy; the address is still a verified entry point, but for named entries the name "
|
||||
f"deserves a second look.")
|
||||
L.append("")
|
||||
if ext_rows:
|
||||
L += md_table(["PAL", "name", f"{TN}", "verdict", "PAL extent", f"{TN} extent", "PAL successor"], ext_rows)
|
||||
L.append("")
|
||||
|
||||
L.append(f"### SDA bases read from the {TN} `__init_registers`")
|
||||
L.append("")
|
||||
L.append(f"- `{sda['symbol']}` PAL `{hx(sda['pal'])}` -> {TN} `{hx(sda['ntsc'])}`")
|
||||
L.append(f"- Result: **{sda['status']}**")
|
||||
if sda["values"]:
|
||||
L.append("- All lis/ori(addi) register values materialised in the function: "
|
||||
+ ", ".join(f"{r}=0x{v:08X}" for r, v in sda["values"].items()))
|
||||
L.append("")
|
||||
if sda["listing"]:
|
||||
L.append("```text")
|
||||
for a, w, d in sda["listing"]:
|
||||
L.append(f"{a:08x} {w:08x} {d}")
|
||||
L.append("```")
|
||||
L.append("")
|
||||
|
||||
L.append("### Save/restore thunk families (resolved by name in GuestSaveRestoreThunks.cs)")
|
||||
L.append("")
|
||||
for fam in thunks:
|
||||
status = "OK" if fam["family_ok"] else "PROBLEM"
|
||||
L.append(f"**`{fam['prefix']}N`** ({fam['mnemonic']} rN,-off(r11)): {status}"
|
||||
+ (f" - {fam['run_note']}" if fam["run_note"] else " - full run to r31 verified"))
|
||||
L.append("")
|
||||
L += md_table(["name", "PAL", f"{TN}", "verdict", "expected", "actual", "decoded", "ok"],
|
||||
[[r["name"], hx(r["pal"]), hx(r["ntsc"]), r["verdict"], f"{r['expected']:08x}",
|
||||
hx(r["actual"]), r["decoded"], "yes" if r["ok"] else "NO"] for r in fam["rows"]])
|
||||
L.append("")
|
||||
|
||||
L.append(f"## Evidence set K ({TN} function entry points proven by the binaries)")
|
||||
L.append("")
|
||||
strong_n = sum(1 for f in ev.flags.values() if f & STRONG)
|
||||
medium_only = sum(1 for f in ev.flags.values() if (f & MEDIUM) and not (f & STRONG))
|
||||
b_only = sum(1 for f in ev.flags.values() if f == F_B)
|
||||
jt_only = sum(1 for f in ev.flags.values() if f == F_JT)
|
||||
L.append(f"- Strong (bl target / extabindex record / entry point): **{strong_n}** addresses")
|
||||
L.append(f"- Medium only (function-pointer word, ADDR32/ADDR16 relocation, lis/addi pair): **{medium_only}** addresses")
|
||||
L.append(f"- Weak only (`b` target, not used for verdicts): {b_only} addresses")
|
||||
L.append(f"- Jump-table-like pointer runs (excluded from REFERENCED): {len(ev.jump_table_runs)} runs, "
|
||||
f"{jt_only} addresses referenced only from them")
|
||||
L.append("")
|
||||
L += md_table(["source", "count"], [[k, v] for k, v in ev.stats.items()])
|
||||
L.append("")
|
||||
L.append("REL relocation type counts (module, type): "
|
||||
+ ", ".join(f"({m},{t})={n}" for (m, t), n in sorted(rel.reloc_type_counts.items())))
|
||||
L.append("")
|
||||
|
||||
L.append("## Binary layout check (parsed headers vs vendored mkw-sp table)")
|
||||
L.append("")
|
||||
for n in layout_check(dol, rel):
|
||||
L.append(f"- {n}")
|
||||
L.append("")
|
||||
|
||||
L.append("## Interpolation gaps (step C.2)")
|
||||
L.append("")
|
||||
if gaps:
|
||||
L += md_table(["PAL gap", f"{TN} gap", "unported", "K candidates", "outcome"],
|
||||
[[f"{g.pal_lo:08x}..{g.pal_hi:08x}", f"{g.ntsc_lo:08x}..{g.ntsc_hi:08x}", g.unported,
|
||||
g.candidates, g.outcome] for g in gaps])
|
||||
else:
|
||||
L.append("No gaps needed interpolation.")
|
||||
L.append("")
|
||||
interp = [e for e in entries if e.verdict == "INTERPOLATED"]
|
||||
if interp:
|
||||
L.append("Interpolated entries:")
|
||||
L.append("")
|
||||
L += md_table(["PAL", "name", f"{TN}", "evidence", "gap"],
|
||||
[[hx(e.pal), e.display_name, hx(e.ntsc), e.evidence, e.note] for e in interp])
|
||||
L.append("")
|
||||
|
||||
L.append(f"## Collisions (two PAL entries porting to one {TN} address)")
|
||||
L.append("")
|
||||
L.append("The named entry is kept (both PAL entries are functions, so the address is a real entry point either "
|
||||
"way; only the name is in question). Extents are the distance to the next PAL entry / next emitted "
|
||||
f"{TN} entry: the PAL entry whose extent matches the {TN} extent is the likelier owner of the address.")
|
||||
L.append("")
|
||||
if collisions:
|
||||
kept_addrs = sorted(e.ntsc for e in kept)
|
||||
rows = []
|
||||
for group in collisions:
|
||||
kept_e = next(e for e in group if e.verdict in EMITTED_VERDICTS)
|
||||
addr = group[0].ntsc
|
||||
j = bisect.bisect_right(kept_addrs, addr)
|
||||
ext_ntsc = f"{kept_addrs[j] - addr:#x}" if j < len(kept_addrs) else "-"
|
||||
parts = []
|
||||
for e in group:
|
||||
ext_pal = f"{entries[e.index + 1].pal - e.pal:#x}" if e.index + 1 < len(entries) else "-"
|
||||
parts.append(f"{e.display_name} (PAL {e.pal:08x}, {e.method}, extent {ext_pal})")
|
||||
rows.append([hx(addr), "; ".join(parts), ext_ntsc, kept_e.display_name])
|
||||
L += md_table([f"{TN}", "PAL entries", f"{TN} extent", "kept"], rows)
|
||||
else:
|
||||
L.append("None.")
|
||||
L.append("")
|
||||
|
||||
dropped = [e for e in entries if e.verdict == "DROPPED"]
|
||||
L.append(f"## Dropped entries ({len(dropped)})")
|
||||
L.append("")
|
||||
if dropped:
|
||||
L += md_table(["PAL", "name", "reason"], [[hx(e.pal), e.display_name, e.note] for e in dropped])
|
||||
else:
|
||||
L.append("None.")
|
||||
L.append("")
|
||||
|
||||
unv = [e for e in entries if e.verdict == "UNVERIFIED"]
|
||||
L.append(f"## Unverified entries ({len(unv)}; ported by the chunk table but not confirmed by the binary, not emitted)")
|
||||
L.append("")
|
||||
sub = collections.Counter()
|
||||
for e in unv:
|
||||
if "not in a text section" in e.note:
|
||||
sub["outside text (data symbols)"] += 1
|
||||
elif "conditional-branch target" in e.note and ("jt" in e.evidence or "ptr" in e.evidence):
|
||||
sub["conditional-branch target that is also jump-table referenced (a case label without a label name)"] += 1
|
||||
elif "conditional-branch target" in e.note:
|
||||
sub["conditional-branch target (inside a function)"] += 1
|
||||
elif "word=00000000" in e.note:
|
||||
sub["lands on a padding word (real function usually at +4)"] += 1
|
||||
elif "jt" in e.evidence or "ptr" in e.evidence:
|
||||
sub["jump-table referenced but named/unnamed as a function"] += 1
|
||||
else:
|
||||
sub["no evidence, predecessor is not a terminator"] += 1
|
||||
for k, v in sorted(sub.items()):
|
||||
L.append(f"- {k}: {v}")
|
||||
L.append("")
|
||||
if unv:
|
||||
L += md_table(["PAL", "name", f"{TN}", "evidence", "detail"],
|
||||
[[hx(e.pal), e.display_name, hx(e.ntsc), e.evidence, e.note] for e in unv])
|
||||
else:
|
||||
L.append("None.")
|
||||
L.append("")
|
||||
|
||||
ident = [e for e in entries if e.verdict == "IDENTITY"]
|
||||
L.append(f"## Identity (low-memory) entries ({len(ident)})")
|
||||
L.append("")
|
||||
L.append("Below 0x80004000 the PAL address is kept unchanged. These addresses are outside every DOL/REL "
|
||||
f"section, so the binaries cannot vouch for them; the evidence column shows whether any {TN} code "
|
||||
"branches to them.")
|
||||
L.append("")
|
||||
if ident:
|
||||
L += md_table(["address", "name", "binary evidence"],
|
||||
[[hx(e.pal), e.display_name, f"{e.note} ({e.evidence})"] for e in ident])
|
||||
L.append("")
|
||||
|
||||
while L and L[-1] == "":
|
||||
L.pop()
|
||||
text = "\n".join(L) + "\n"
|
||||
write_if_changed(path, text)
|
||||
return text
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------------------
|
||||
# main
|
||||
# ---------------------------------------------------------------------------------------
|
||||
@@ -1824,17 +1366,11 @@ def repo_root() -> str:
|
||||
return os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", ".."))
|
||||
|
||||
|
||||
def repo_relative(path: str) -> str:
|
||||
"""A path as it should read in a committed report: relative to the repository, forward slashes."""
|
||||
return os.path.relpath(os.path.abspath(path), repo_root()).replace(os.sep, "/")
|
||||
|
||||
|
||||
def default_paths(region: str = "E") -> dict:
|
||||
repo = repo_root()
|
||||
return {
|
||||
"pal_map": os.path.join(repo, "projects", "mkwii", "MAP.txt"),
|
||||
"out_map": os.path.join(repo, "projects", PROJECT_DIR[region], "MAP.txt"),
|
||||
"out_report": os.path.join(repo, "projects", PROJECT_DIR[region], "MAP_REPORT.md"),
|
||||
"out_json": os.path.join(repo, "projects", PROJECT_DIR[region], "region_port.json"),
|
||||
}
|
||||
|
||||
@@ -1858,9 +1394,7 @@ def main(argv: Optional[List[str]] = None) -> int:
|
||||
ap.add_argument("--rel", help=f"{TN} files/rel/StaticR.rel (overrides --disc-root)")
|
||||
ap.add_argument("--rel-load", default=None, help="target REL load address (default: the region's)")
|
||||
ap.add_argument("--out-map", default=d["out_map"])
|
||||
ap.add_argument("--out-report", default=d["out_report"])
|
||||
ap.add_argument("--out-json", default=d["out_json"])
|
||||
ap.add_argument("--quiet", action="store_true")
|
||||
args = ap.parse_args(argv)
|
||||
if args.disc_root:
|
||||
disc = os.path.join(args.disc_root, f"RMC{TARGET}01")
|
||||
@@ -1883,25 +1417,16 @@ def main(argv: Optional[List[str]] = None) -> int:
|
||||
entries = load_pal_map(args.pal_map)
|
||||
|
||||
port_entries(entries, table, ev, mem)
|
||||
gaps = interpolate_unported(entries, ev, mem)
|
||||
interpolate_unported(entries, ev, mem)
|
||||
finish_unported(entries)
|
||||
kept, collisions = dedupe(entries)
|
||||
kept, _ = dedupe(entries)
|
||||
|
||||
thunks = check_thunks(entries, mem)
|
||||
sda = read_sda_bases(entries, mem)
|
||||
|
||||
added, add_stats = binary_additions(ev, mem, {e.ntsc for e in kept})
|
||||
added, _ = binary_additions(ev, mem, {e.ntsc for e in kept})
|
||||
counts = collections.Counter(e.verdict for e in kept)
|
||||
counts["ADDED"] = len(added)
|
||||
write_map(args.out_map, kept + added, counts,
|
||||
os.path.relpath(args.pal_map, os.path.dirname(os.path.abspath(args.out_map))).replace(os.sep, "/"))
|
||||
write_json(args.out_json, table, dol, rel)
|
||||
report = write_report(args.out_report, args, dol, rel, table, ev, entries, kept, collisions, gaps, thunks, sda,
|
||||
added, add_stats)
|
||||
if not args.quiet:
|
||||
# print the summary section (up to the evidence section)
|
||||
cut = report.find("## Evidence set K")
|
||||
sys.stdout.write(report[:cut] if cut > 0 else report)
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user