shithub: psxe

Download patch

ref: 2938d7ff4aed900360df017dbad86f16d3db1610
parent: cd1b22d7c135a90834e8b49fc1dc52777d6d3485
author: allkern <lisandroaalarcon@gmail.com>
date: Mon Jun 26 18:01:42 EDT 2023

Remove unnecessary CPU fetch

--- a/frontend/main.c
+++ b/frontend/main.c
@@ -10,6 +10,8 @@
 psx_cpu_t* g_cpu;
 
 void sigint_handler(int sig) {
+    log_set_quiet(0);
+
     log_fatal("r0=%08x at=%08x v0=%08x v1=%08x", g_cpu->r[0] , g_cpu->r[1] , g_cpu->r[2] , g_cpu->r[3] );
     log_fatal("a0=%08x a1=%08x a2=%08x a3=%08x", g_cpu->r[4] , g_cpu->r[5] , g_cpu->r[6] , g_cpu->r[7] );
     log_fatal("t0=%08x t1=%08x t2=%08x t3=%08x", g_cpu->r[8] , g_cpu->r[9] , g_cpu->r[10], g_cpu->r[11]);
@@ -30,7 +32,7 @@
     psxe_cfg_load_defaults(cfg);
     psxe_cfg_load(cfg, argc, argv);
 
-    log_set_level(LOG_ERROR);
+    log_set_level(cfg->log_level);
 
     signal(SIGINT, sigint_handler);
 
@@ -64,6 +66,8 @@
     }
 
     psx_cpu_t* cpu = psx_get_cpu(psx);
+
+    log_set_quiet(0);
 
     log_fatal("r0=%08x at=%08x v0=%08x v1=%08x", cpu->r[0] , cpu->r[1] , cpu->r[2] , cpu->r[3] );
     log_fatal("a0=%08x a1=%08x a2=%08x a3=%08x", cpu->r[4] , cpu->r[5] , cpu->r[6] , cpu->r[7] );
--- a/psx/cpu.c
+++ b/psx/cpu.c
@@ -129,7 +129,7 @@
     psx_cpu_i_bltzal , psx_cpu_i_bgezal , psx_cpu_i_invalid, psx_cpu_i_invalid
 };
 
-#define OP ((cpu->buf[1] >> 26) & 0x3f) 
+#define OP ((cpu->buf[1] >> 26) & 0x3f)
 #define S ((cpu->buf[1] >> 21) & 0x1f)
 #define T ((cpu->buf[1] >> 16) & 0x1f)
 #define D ((cpu->buf[1] >> 11) & 0x1f)
@@ -208,15 +208,15 @@
     cpu->load_d = 0;
 
 #define DEBUG_ALL \
-    log_debug("r0=%08x at=%08x v0=%08x v1=%08x", R_R0, R_AT, R_V0, R_V1); \
-    log_debug("a0=%08x a1=%08x a2=%08x a3=%08x", R_A0, R_A1, R_A2, R_A3); \
-    log_debug("t0=%08x t1=%08x t2=%08x t3=%08x", R_T0, R_T1, R_T2, R_T3); \
-    log_debug("t4=%08x t5=%08x t6=%08x t7=%08x", R_T4, R_T5, R_T6, R_T7); \
-    log_debug("s0=%08x s1=%08x s2=%08x s3=%08x", R_S0, R_S1, R_S2, R_S3); \
-    log_debug("s4=%08x s5=%08x s6=%08x s7=%08x", R_S4, R_S5, R_S6, R_S7); \
-    log_debug("t8=%08x t9=%08x k0=%08x k1=%08x", R_T8, R_T9, R_K0, R_K1); \
-    log_debug("gp=%08x sp=%08x fp=%08x ra=%08x", R_GP, R_SP, R_FP, R_RA); \
-    log_debug("pc=%08x hi=%08x lo=%08x l:%s=%08x", cpu->pc, cpu->hi, cpu->lo, g_mips_cc_register_names[cpu->load_d], cpu->load_v); \
+    log_fatal("r0=%08x at=%08x v0=%08x v1=%08x", R_R0, R_AT, R_V0, R_V1); \
+    log_fatal("a0=%08x a1=%08x a2=%08x a3=%08x", R_A0, R_A1, R_A2, R_A3); \
+    log_fatal("t0=%08x t1=%08x t2=%08x t3=%08x", R_T0, R_T1, R_T2, R_T3); \
+    log_fatal("t4=%08x t5=%08x t6=%08x t7=%08x", R_T4, R_T5, R_T6, R_T7); \
+    log_fatal("s0=%08x s1=%08x s2=%08x s3=%08x", R_S0, R_S1, R_S2, R_S3); \
+    log_fatal("s4=%08x s5=%08x s6=%08x s7=%08x", R_S4, R_S5, R_S6, R_S7); \
+    log_fatal("t8=%08x t9=%08x k0=%08x k1=%08x", R_T8, R_T9, R_K0, R_K1); \
+    log_fatal("gp=%08x sp=%08x fp=%08x ra=%08x", R_GP, R_SP, R_FP, R_RA); \
+    log_fatal("pc=%08x hi=%08x lo=%08x l:%s=%08x", cpu->pc, cpu->hi, cpu->lo, g_mips_cc_register_names[cpu->load_d], cpu->load_v); \
     exit(1)
 
 #define SE8(v) ((int32_t)((int8_t)v))
@@ -324,7 +324,6 @@
 
     g_psx_cpu_primary_table[OP](cpu);
 
-    // Interrupts not yet working
     if ((cpu->cop0_sr & SR_IEC) && (cpu->cop0_cause & cpu->cop0_sr & SR_IM2)) {
         psx_cpu_exception(cpu, CAUSE_INT);
     }
@@ -369,7 +368,7 @@
 void psx_cpu_i_invalid(psx_cpu_t* cpu) {
     log_warn("%08x: Illegal instruction %08x", cpu->pc - 8, cpu->buf[1]);
 
-    psx_cpu_exception(cpu, CAUSE_RI);
+    //psx_cpu_exception(cpu, CAUSE_RI);
 }
 
 // Primary
@@ -945,7 +944,6 @@
     cpu->pc = s;
 }
 
-
 void psx_cpu_i_syscall(psx_cpu_t* cpu) {
     TRACE_I20("syscall");
 
@@ -1098,7 +1096,7 @@
 
     DO_PENDING_LOAD;
 
-    int32_t r = s - t;
+    uint32_t r = s - t;
 
     // To-do: Check SUB overflow check
     uint32_t o = (s ^ t) & (t & r);
--- a/psx/dev/gpu.c
+++ b/psx/dev/gpu.c
@@ -712,7 +712,7 @@
         gpu->line++;
 
         if (gpu->line == GPU_SCANS_PER_FRAME_NTSC) {
-            psx_ic_irq(gpu->ic, IC_VBLANK);
+            //psx_ic_irq(gpu->ic, IC_VBLANK);
 
             gpu->line = 0;
         } else {
--- a/psx/psx.c
+++ b/psx/psx.c
@@ -106,7 +106,6 @@
     psx_scratchpad_init(psx->scratchpad);
     psx_gpu_init(psx->gpu, psx->ic);
     psx_spu_init(psx->spu);
-    psx_cpu_init(psx->cpu, psx->bus);
     psx_timer_init(psx->timer);
     psx_cdrom_init(psx->cdrom, psx->ic);
     psx_pad_init(psx->pad);
@@ -113,7 +112,7 @@
 
     psx_bios_load(psx->bios, bios_path);
 
-    psx_cpu_fetch(psx->cpu);
+    psx_cpu_init(psx->cpu, psx->bus);
 }
 
 void psx_hard_reset(psx_t* psx) {
--