diff --git a/src/xenia/gpu/command_processor.cc b/src/xenia/gpu/command_processor.cc index 2361f3fd9..edb6138fa 100644 --- a/src/xenia/gpu/command_processor.cc +++ b/src/xenia/gpu/command_processor.cc @@ -512,7 +512,7 @@ uint32_t CommandProcessor::ExecutePacket(PacketArgs& args) { uint32_t value = READ_PTR(); // Writeback initiator. WriteRegister(packet_ptr, XE_GPU_REG_VGT_EVENT_INITIATOR, - initiator & 0x1F); + initiator & 0x3F); uint32_t data_value; if ((initiator >> 31) & 0x1) { // Write counter (GPU vblank counter?). diff --git a/src/xenia/gpu/graphics_system.cc b/src/xenia/gpu/graphics_system.cc index c969e23d2..b1c0eb2d0 100644 --- a/src/xenia/gpu/graphics_system.cc +++ b/src/xenia/gpu/graphics_system.cc @@ -192,6 +192,9 @@ void GraphicsSystem::DispatchInterruptCallback( cpu = 2; } + XELOGGPU("Dispatching GPU interrupt at %.8X w/ mode %d on cpu %d", + interrupt_callback_, source, cpu); + // NOTE: we may be executing in some random thread. if (!interrupt_callback_) { return; diff --git a/src/xenia/gpu/xenos/register_table.inc b/src/xenia/gpu/xenos/register_table.inc index c549e39a6..25a5890a0 100644 --- a/src/xenia/gpu/xenos/register_table.inc +++ b/src/xenia/gpu/xenos/register_table.inc @@ -18,12 +18,12 @@ XE_GPU_REGISTER(0x01DD, dword, SCRATCH_ADDR) XE_GPU_REGISTER(0x01DC, dword, SCRATCH_UMSK) -XE_GPU_REGISTER(0x0578, dword, SCRATCH_REG0) -XE_GPU_REGISTER(0x0579, dword, SCRATCH_REG1) +XE_GPU_REGISTER(0x0578, dword, SCRATCH_REG0) // interrupt sync +XE_GPU_REGISTER(0x0579, dword, SCRATCH_REG1) // present interval XE_GPU_REGISTER(0x057A, dword, SCRATCH_REG2) XE_GPU_REGISTER(0x057B, dword, SCRATCH_REG3) -XE_GPU_REGISTER(0x057C, dword, SCRATCH_REG4) -XE_GPU_REGISTER(0x057D, dword, SCRATCH_REG5) +XE_GPU_REGISTER(0x057C, dword, CALLBACK_ADDRESS) +XE_GPU_REGISTER(0x057D, dword, CALLBACK_CONTEXT) XE_GPU_REGISTER(0x057E, dword, SCRATCH_REG6) XE_GPU_REGISTER(0x057F, dword, SCRATCH_REG7) diff --git a/src/xenia/kernel/xboxkrnl_threading.cc b/src/xenia/kernel/xboxkrnl_threading.cc index 4a7805f13..a727d8f45 100644 --- a/src/xenia/kernel/xboxkrnl_threading.cc +++ b/src/xenia/kernel/xboxkrnl_threading.cc @@ -1177,6 +1177,8 @@ SHIM_CALL KeInsertQueueDpc_shim(PPCContext* ppc_state, KernelState* state) { uint32_t arg1 = SHIM_GET_ARG_32(1); uint32_t arg2 = SHIM_GET_ARG_32(2); + assert_always("DPC does not dispatch yet; going to hang!"); + XELOGD("KeInsertQueueDpc(%.8X, %.8X, %.8X)", dpc_ptr, arg1, arg2); uint32_t list_entry_ptr = dpc_ptr + 4;