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={}",
|
REXLOG_INFO("xnet trace: live flag 0x82FC8851 {} value={}",
|
||||||
flag != nullptr ? "mapped" : "NOT MAPPED",
|
flag != nullptr ? "mapped" : "NOT MAPPED",
|
||||||
flag != nullptr ? int(*flag) : -1);
|
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
|
// 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
|
// slot 0, so force 0 (any slot answers after the shim fix, but 0 is the
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue