Remember and use PRAMIN memory pointer in favor of calculating it every time

This commit is contained in:
PatrickvL 2018-02-01 10:45:01 +01:00
parent 6d9d89c5f1
commit 998e68b681
3 changed files with 7 additions and 6 deletions

View File

@ -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;
}

View File

@ -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));

View File

@ -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);