X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgpu.cpp;h=9ee426425e42c69f3624939930258765cfde8a92;hb=240a6df48aebb5e17f82452c32e770cdfe9b5d5e;hp=fbf26a0e6846fba758246ee0cec664eaf677f044;hpb=40e59fafacbc0df467b9d3c05a6199ff6138949b;p=virtualjaguar diff --git a/src/gpu.cpp b/src/gpu.cpp index fbf26a0..9ee4264 100644 --- a/src/gpu.cpp +++ b/src/gpu.cpp @@ -319,9 +319,10 @@ static uint32_t gpu_pointer_to_matrix; static uint32_t gpu_data_organization; static uint32_t gpu_control; static uint32_t gpu_div_control; -// There is a distinct advantage to having these separated out--there's no need to clear -// a bit before writing a result. I.e., if the result of an operation leaves a zero in -// the carry flag, you don't have to zero gpu_flag_c before you can write that zero! +// There is a distinct advantage to having these separated out--there's no need +// to clear a bit before writing a result. I.e., if the result of an operation +// leaves a zero in the carry flag, you don't have to zero gpu_flag_c before +// you can write that zero! static uint8_t gpu_flag_z, gpu_flag_n, gpu_flag_c; uint32_t gpu_reg_bank_0[32]; uint32_t gpu_reg_bank_1[32]; @@ -1050,11 +1051,13 @@ void GPUReset(void) *((uint32_t *)(&gpu_ram_8[i])) = rand(); } + uint32_t GPUReadPC(void) { return gpu_pc; } + void GPUResetStats(void) { for(uint32_t i=0; i<64; i++) @@ -1062,6 +1065,7 @@ void GPUResetStats(void) WriteLog("--> GPU stats were reset!\n"); } + void GPUDumpDisassembly(void) { char buffer[512]; @@ -1076,6 +1080,7 @@ void GPUDumpDisassembly(void) } } + void GPUDumpRegisters(void) { WriteLog("\n---[GPU flags: NCZ %d%d%d]-----------------------\n", gpu_flag_n, gpu_flag_c, gpu_flag_z); @@ -1099,6 +1104,7 @@ void GPUDumpRegisters(void) } } + void GPUDumpMemory(void) { WriteLog("\n---[GPU data at 00F03000]---------------------------\n"); @@ -1107,8 +1113,23 @@ void GPUDumpMemory(void) gpu_ram_8[i+1], gpu_ram_8[i+2], gpu_ram_8[i+3]); } + void GPUDone(void) { + WriteLog("\n\n---------------------------------------------------------------------\n"); + WriteLog("GPU I/O Registers\n"); + WriteLog("---------------------------------------------------------------------\n"); + WriteLog("F0%04X (G_FLAGS): $%06X\n", 0x2100, (gpu_flags & 0xFFFFFFF8) | (gpu_flag_n << 2) | (gpu_flag_c << 1) | gpu_flag_z); + WriteLog("F0%04X (G_MTXC): $%04X\n", 0x2104, gpu_matrix_control); + WriteLog("F0%04X (G_MTXA): $%04X\n", 0x2108, gpu_pointer_to_matrix); + WriteLog("F0%04X (G_END): $%02X\n", 0x210C, gpu_data_organization); + WriteLog("F0%04X (G_PC): $%06X\n", 0x2110, gpu_pc); + WriteLog("F0%04X (G_CTRL): $%06X\n", 0x2114, gpu_control); + WriteLog("F0%04X (G_HIDATA): $%08X\n", 0x2118, gpu_hidata); + WriteLog("F0%04X (G_REMAIN): $%08X\n", 0x211C, gpu_remain); + WriteLog("F0%04X (G_DIVCTRL): $%02X\n", 0x211C, gpu_div_control); + WriteLog("---------------------------------------------------------------------\n\n\n"); + WriteLog("GPU: Stopped at PC=%08X (GPU %s running)\n", (unsigned int)gpu_pc, GPU_RUNNING ? "was" : "wasn't"); // Get the interrupt latch & enable bits @@ -1125,12 +1146,9 @@ void GPUDone(void) WriteLog("\t%17s %lu\n", gpu_opcode_str[i], gpu_opcode_use[i]); } WriteLog("\n"); - -// memory_free(gpu_ram_8); -// memory_free(gpu_reg_bank_0); -// memory_free(gpu_reg_bank_1); } + // // Main GPU execution core //