netcode-revival: dump the party state machine's internal state
Some checks failed
Lint & Format Check / Format Check (push) Has been cancelled
Some checks failed
Lint & Format Check / Format Check (push) Has been cancelled
The trace shows the machine spinning on XNetGetTitleXnAddr (state 1/0). Add a rate-limited dump of the static party struct (0x82FD9750): state@336, eaip@344, byte417 (EA flag), byte421 (online), byte423 (EA connected) - so we can see whether the party bytes are mapped and exactly which gate keeps it stuck.
This commit is contained in:
parent
0da17439a7
commit
edda6c9a06
1 changed files with 14 additions and 0 deletions
|
|
@ -172,6 +172,20 @@ void XNetTransport::ForceLiveFlag() {
|
|||
REXLOG_INFO("xnet trace: live flag 0x82FC8851 {} value={}",
|
||||
flag != nullptr ? "mapped" : "NOT MAPPED",
|
||||
flag != nullptr ? int(*flag) : -1);
|
||||
// Dump the party state machine's internal state (static party struct at
|
||||
// 0x82FD9750): state@336, eaip@344, byte417 (EA flag), byte421 (online),
|
||||
// byte423 (EA connected). Tells us exactly where the machine is stuck.
|
||||
const auto rd8 = [](uint32_t a) -> int {
|
||||
uint8_t* p = REX_KERNEL_MEMORY()->TranslateVirtual<uint8_t*>(a);
|
||||
return p != nullptr ? int(*p) : -1;
|
||||
};
|
||||
const auto rd32 = [](uint32_t a) -> uint32_t {
|
||||
uint32_t* p = REX_KERNEL_MEMORY()->TranslateVirtual<uint32_t*>(a);
|
||||
return p != nullptr ? *p : 0xFFFFFFFFu;
|
||||
};
|
||||
REXLOG_INFO("xnet trace: party state={} eaip=0x{:08X} b417={} b421={} b423={}",
|
||||
rd32(0x82FD98A0), rd32(0x82FD98A8), rd8(0x82FD98F1), rd8(0x82FD98F5),
|
||||
rd8(0x82FD98F7));
|
||||
}
|
||||
// The flag is the LIVE USER INDEX (not a boolean). The profile lives in
|
||||
// slot 0, so force 0 (any slot answers after the shim fix, but 0 is the
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue