wiiu_unmap(avail_va + 0x200000 * i, 0x200000);
goto cleanup_allocations;
}
- psxM = (void*)avail_va;
+ psxRegs.ptrs.psxM = (void*)avail_va;
- psxP = wiiu_mmap(avail_va + 0x1f000000, 0x10000, psx_parallel);
- psxH = wiiu_mmap(avail_va + 0x1f800000, 0x10000, psx_scratch);
- psxR = wiiu_mmap(avail_va + 0x1fc00000, 0x80000, psx_bios);
+ psxRegs.ptrs.psxP = wiiu_mmap(avail_va + 0x1f000000, 0x10000, psx_parallel);
+ psxRegs.ptrs.psxH = wiiu_mmap(avail_va + 0x1f800000, 0x10000, psx_scratch);
+ psxRegs.ptrs.psxR = wiiu_mmap(avail_va + 0x1fc00000, 0x80000, psx_bios);
- if (psxP == MAP_FAILED || psxH == MAP_FAILED || psxR == MAP_FAILED) {
+ if (psxRegs.ptrs.psxP == MAP_FAILED || psxRegs.ptrs.psxH == MAP_FAILED ||
+ psxRegs.ptrs.psxR == MAP_FAILED)
+ {
for (int i = 0; i < 4; i++)
- wiiu_unmap(psxM + 0x200000 * i, 0x200000);
- wiiu_unmap(psxP, 0x10000);
- wiiu_unmap(psxH, 0x10000);
- wiiu_unmap(psxR, 0x80000);
+ wiiu_unmap(psxRegs.ptrs.psxM + 0x200000 * i, 0x200000);
+ wiiu_unmap(psxRegs.ptrs.psxP, 0x10000);
+ wiiu_unmap(psxRegs.ptrs.psxH, 0x10000);
+ wiiu_unmap(psxRegs.ptrs.psxR, 0x80000);
goto cleanup_allocations;
}
void lightrec_free_mmap(void) {
for (int i = 0; i < 4; i++)
- wiiu_unmap(psxM + 0x200000 * i, 0x200000);
- wiiu_unmap(psxP, 0x10000);
- wiiu_unmap(psxH, 0x10000);
- wiiu_unmap(psxR, 0x80000);
+ wiiu_unmap(psxRegs.ptrs.psxM + 0x200000 * i, 0x200000);
+ wiiu_unmap(psxRegs.ptrs.psxP, 0x10000);
+ wiiu_unmap(psxRegs.ptrs.psxH, 0x10000);
+ wiiu_unmap(psxRegs.ptrs.psxR, 0x80000);
free(psx_mem);
free(psx_parallel);
free(psx_scratch);
{
if ((a >> 16) == 0x1f80)
// scratchpad/IO
- return *(u32 *)(psxH + (a & 0xfffc));
+ return *(u32 *)(psxRegs.ptrs.psxH + (a & 0xfffc));
if ((a >> 16) == 0x1f00)
// parallel
- return *(u32 *)(psxP + (a & 0xfffc));
+ return *(u32 *)(psxRegs.ptrs.psxP + (a & 0xfffc));
// if ((a & ~0xe0600000) < 0x200000)
// RAM
- return *(u32 *)(psxM + (a & 0x1ffffc));
+ return *(u32 *)(psxRegs.ptrs.psxM + (a & 0x1ffffc));
}
#if 0
#if 0
if (psxRegs.cycle == 190230) {
- dump_mem("/mnt/ntz/dev/pnd/tmp/psxram_i.dump", psxM, 0x200000);
- dump_mem("/mnt/ntz/dev/pnd/tmp/psxregs_i.dump", psxH, 0x10000);
+ dump_mem("/mnt/ntz/dev/pnd/tmp/psxram_i.dump", psxRegs.ptrs.psxM, 0x200000);
+ dump_mem("/mnt/ntz/dev/pnd/tmp/psxregs_i.dump", psxRegs.ptrs.psxH, 0x10000);
printf("dumped\n");
exit(1);
}
i+8, allregs_p[i+8], i+16, allregs_p[i+16], i+24, allregs_p[i+24]);
printf("PC: %08x/%08x, cycle %u, next %u\n", psxRegs.pc, ppc,
psxRegs.cycle, psxRegs.next_interupt);
- //dump_mem("/tmp/psxram.dump", psxM, 0x200000);
- //dump_mem("/mnt/ntz/dev/pnd/tmp/psxregs.dump", psxH, 0x10000);
+ //dump_mem("/tmp/psxram.dump", psxRegs.ptrs.psxM, 0x200000);
+ //dump_mem("/mnt/ntz/dev/pnd/tmp/psxregs.dump", psxRegs.ptrs.psxH, 0x10000);
exit(1);
ok:
//psxRegs.cycle = rregs.cycle + 2; // sync timing
{
if (cause != 0x20) {
//FILE *f = fopen("/tmp/psx_ram.bin", "wb");
- //fwrite(psxM, 1, 0x200000, f); fclose(f);
+ //fwrite(psxRegs.ptrs.psxM, 1, 0x200000, f); fclose(f);
log_unhandled("exception %08x @%08x ra=%08x\n",
cause, pc, regs->GPR.n.ra);
}