From 9d2e8d4699d475656c8ac6647979f7fdd969cba9 Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Sat, 23 May 2015 14:25:10 -0500 Subject: [PATCH 1/4] Shouldn't need these range asserts anymore. --- src/xenia/kernel/xboxkrnl_memory.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/xenia/kernel/xboxkrnl_memory.cc b/src/xenia/kernel/xboxkrnl_memory.cc index fe98c4d27..d548edf49 100644 --- a/src/xenia/kernel/xboxkrnl_memory.cc +++ b/src/xenia/kernel/xboxkrnl_memory.cc @@ -306,8 +306,8 @@ SHIM_CALL MmAllocatePhysicalMemoryEx_shim(PPCContext* ppc_state, // and the memory must be allocated there. I haven't seen a game do this, // and instead they all do min=0 / max=-1 to indicate the system should pick. // If we have to suport arbitrary placement things will get nasty. - assert_true(min_addr_range == 0); - assert_true(max_addr_range == 0xFFFFFFFF); + //assert_true(min_addr_range == 0); + //assert_true(max_addr_range == 0xFFFFFFFF); uint32_t allocation_type = kMemoryAllocationReserve | kMemoryAllocationCommit; uint32_t protect = FromXdkProtectFlags(protect_bits); From 30e445a6de12357bc94cab76920b593792ddddcc Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Sat, 23 May 2015 14:25:46 -0500 Subject: [PATCH 2/4] VdPersistDisplay - Check if unk1 ptr is NULL --- src/xenia/kernel/xboxkrnl_video.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/xenia/kernel/xboxkrnl_video.cc b/src/xenia/kernel/xboxkrnl_video.cc index d660c16d5..9bcf0a88f 100644 --- a/src/xenia/kernel/xboxkrnl_video.cc +++ b/src/xenia/kernel/xboxkrnl_video.cc @@ -380,11 +380,13 @@ SHIM_CALL VdPersistDisplay_shim(PPCContext* ppc_state, KernelState* state) { // unk1_ptr needs to be populated with a pointer passed to // MmFreePhysicalMemory(1, *unk1_ptr). - auto heap = state->memory()->LookupHeapByType(true, 16 * 1024); - uint32_t unk1_value; - heap->Alloc(64, 32, kMemoryAllocationReserve | kMemoryAllocationCommit, - kMemoryProtectNoAccess, false, &unk1_value); - SHIM_SET_MEM_32(unk1_ptr, unk1_value); + if (unk1_ptr) { + auto heap = state->memory()->LookupHeapByType(true, 16 * 1024); + uint32_t unk1_value; + heap->Alloc(64, 32, kMemoryAllocationReserve | kMemoryAllocationCommit, + kMemoryProtectNoAccess, false, &unk1_value); + SHIM_SET_MEM_32(unk1_ptr, unk1_value); + } // ? SHIM_SET_RETURN_64(1); From 61e9ba665b3a83d370d947566a6eaa62cc9d68af Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Sat, 23 May 2015 14:35:00 -0500 Subject: [PATCH 3/4] XamLoaderSetLaunchData --- src/xenia/kernel/xam_info.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/xenia/kernel/xam_info.cc b/src/xenia/kernel/xam_info.cc index dfa285255..3904d176c 100644 --- a/src/xenia/kernel/xam_info.cc +++ b/src/xenia/kernel/xam_info.cc @@ -84,6 +84,17 @@ SHIM_CALL XamGetExecutionId_shim(PPCContext* ppc_state, KernelState* state) { SHIM_SET_RETURN_32(0); } +SHIM_CALL XamLoaderSetLaunchData_shim(PPCContext* ppc_state, + KernelState* state) { + uint32_t data_ptr = SHIM_GET_ARG_32(0); + uint32_t data_size = SHIM_GET_ARG_32(1); + + XELOGD("XamLoaderSetLaunchData(%.8X, %d)", data_ptr, data_size); + + // Unknown return value. + SHIM_SET_RETURN_32(0); +} + SHIM_CALL XamLoaderGetLaunchDataSize_shim(PPCContext* ppc_state, KernelState* state) { uint32_t size_ptr = SHIM_GET_ARG_32(0); @@ -205,8 +216,9 @@ void xe::kernel::xam::RegisterInfoExports( SHIM_SET_MAPPING("xam.xex", XGetLanguage, state); SHIM_SET_MAPPING("xam.xex", XamVoiceIsActiveProcess, state); - SHIM_SET_MAPPING("xam.xex", XamGetExecutionId, state); + + SHIM_SET_MAPPING("xam.xex", XamLoaderSetLaunchData, state); SHIM_SET_MAPPING("xam.xex", XamLoaderGetLaunchDataSize, state); SHIM_SET_MAPPING("xam.xex", XamLoaderGetLaunchData, state); SHIM_SET_MAPPING("xam.xex", XamLoaderLaunchTitle, state); From 99dd84ce579f7fe7db7fcc25cab77653b2d300f3 Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Sat, 23 May 2015 14:52:38 -0500 Subject: [PATCH 4/4] Removed assert statements checking for addr range --- src/xenia/kernel/xboxkrnl_memory.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/xenia/kernel/xboxkrnl_memory.cc b/src/xenia/kernel/xboxkrnl_memory.cc index d548edf49..5e861ce1d 100644 --- a/src/xenia/kernel/xboxkrnl_memory.cc +++ b/src/xenia/kernel/xboxkrnl_memory.cc @@ -306,8 +306,6 @@ SHIM_CALL MmAllocatePhysicalMemoryEx_shim(PPCContext* ppc_state, // and the memory must be allocated there. I haven't seen a game do this, // and instead they all do min=0 / max=-1 to indicate the system should pick. // If we have to suport arbitrary placement things will get nasty. - //assert_true(min_addr_range == 0); - //assert_true(max_addr_range == 0xFFFFFFFF); uint32_t allocation_type = kMemoryAllocationReserve | kMemoryAllocationCommit; uint32_t protect = FromXdkProtectFlags(protect_bits);