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); diff --git a/src/xenia/kernel/xboxkrnl_memory.cc b/src/xenia/kernel/xboxkrnl_memory.cc index fe98c4d27..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); 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);