diff --git a/src/system/xnet_transport.cpp b/src/system/xnet_transport.cpp index 1c8486a..babadfa 100644 --- a/src/system/xnet_transport.cpp +++ b/src/system/xnet_transport.cpp @@ -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(a); + return p != nullptr ? int(*p) : -1; + }; + const auto rd32 = [](uint32_t a) -> uint32_t { + uint32_t* p = REX_KERNEL_MEMORY()->TranslateVirtual(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