From 998e68b68181ba5ce5ea04b07f21ff6f6a576bb2 Mon Sep 17 00:00:00 2001 From: PatrickvL Date: Thu, 1 Feb 2018 10:45:01 +0100 Subject: [PATCH] Remember and use PRAMIN memory pointer in favor of calculating it every time --- src/devices/video/EmuNV2A.cpp | 9 +++++---- src/devices/video/EmuNV2A_PFIFO.cpp | 2 +- src/devices/video/EmuNV2A_PGRAPH.cpp | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/devices/video/EmuNV2A.cpp b/src/devices/video/EmuNV2A.cpp index 3bf947729..40631c8a2 100644 --- a/src/devices/video/EmuNV2A.cpp +++ b/src/devices/video/EmuNV2A.cpp @@ -388,6 +388,7 @@ struct { } pramdac; struct { + intptr_t memory; uint32_t regs[NV_PRAMIN_SIZE]; // TODO : union } pramin; @@ -588,7 +589,7 @@ static DMAObject nv_dma_load(xbaddr dma_obj_address) { assert(dma_obj_address < NV_PRAMIN_SIZE); - uint32_t *dma_obj = (uint32_t*)(NV2A_ADDR + NV_PRAMIN_ADDR + dma_obj_address); + uint32_t *dma_obj = (uint32_t*)(pramin.memory + dma_obj_address); uint32_t flags = ldl_le_p(dma_obj); uint32_t limit = ldl_le_p(dma_obj + 1); uint32_t frame = ldl_le_p(dma_obj + 2); @@ -703,7 +704,7 @@ static void load_graphics_object(xbaddr instance_address, GraphicsObject *obj) uint32_t switch1, switch2, switch3; assert(instance_address < NV_PRAMIN_SIZE); - obj_ptr = (uint8_t*)(NV2A_ADDR + NV_PRAMIN_ADDR + instance_address); + obj_ptr = (uint8_t*)(pramin.memory + instance_address); switch1 = ldl_le_p((uint32_t*)obj_ptr); switch2 = ldl_le_p((uint32_t*)(obj_ptr + 4)); @@ -2588,13 +2589,13 @@ void CxbxReserveNV2AMemory() GetCurrentThreadId(), NV2A_SIZE / ONE_MB, NV2A_ADDR, NV2A_ADDR + NV2A_SIZE - 1); // Allocate PRAMIN Region - memory = VirtualAllocEx( + pramin.memory = (intptr_t)VirtualAllocEx( GetCurrentProcess(), (void*)(NV2A_ADDR + NV_PRAMIN_ADDR), NV_PRAMIN_SIZE, MEM_COMMIT, // No MEM_RESERVE | PAGE_READWRITE); - if (memory == NULL) { + if (pramin.memory == NULL) { EmuWarning("Couldn't allocate NV2A PRAMIN memory"); return; } diff --git a/src/devices/video/EmuNV2A_PFIFO.cpp b/src/devices/video/EmuNV2A_PFIFO.cpp index 9c562e09d..8302ab61e 100644 --- a/src/devices/video/EmuNV2A_PFIFO.cpp +++ b/src/devices/video/EmuNV2A_PFIFO.cpp @@ -444,7 +444,7 @@ static RAMHTEntry ramht_lookup(uint32_t handle) GET_MASK(pfifo.regs[NV_PFIFO_RAMHT], NV_PFIFO_RAMHT_BASE_ADDRESS_MASK) << 12; - uint8_t *entry_ptr = (uint8_t*)(NV2A_ADDR + NV_PRAMIN_ADDR + ramht_address + hash * 8); + uint8_t *entry_ptr = (uint8_t*)(pramin.memory + ramht_address + hash * 8); uint32_t entry_handle = ldl_le_p((uint32_t*)entry_ptr); uint32_t entry_context = ldl_le_p((uint32_t*)(entry_ptr + 4)); diff --git a/src/devices/video/EmuNV2A_PGRAPH.cpp b/src/devices/video/EmuNV2A_PGRAPH.cpp index b28efaaae..d75c4fe9f 100644 --- a/src/devices/video/EmuNV2A_PGRAPH.cpp +++ b/src/devices/video/EmuNV2A_PGRAPH.cpp @@ -95,7 +95,7 @@ DEVICE_WRITE32(PGRAPH) printf("PGRAPH: read channel %d context from %0x08X\n", pgraph.channel_id, pgraph.context_address); - uint8_t *context_ptr = (uint8_t*)(NV2A_ADDR + NV_PRAMIN_ADDR + pgraph.context_address); + uint8_t *context_ptr = (uint8_t*)(pramin.memory + pgraph.context_address); uint32_t context_user = ldl_le_p((uint32_t*)context_ptr); printf(" - CTX_USER = 0x%x\n", context_user);