drc: adjust bogus looking check
[pcsx_rearmed.git] / plugins / gpulib / gpu.c
index 0e6fe63..d67df03 100644 (file)
@@ -21,7 +21,6 @@
 #define unlikely(x)
 #define preload(...)
 #define noinline
-#error huh
 #endif
 
 #define gpu_log(fmt, ...) \
@@ -458,6 +457,12 @@ static noinline int do_cmd_buffer(uint32_t *data, int count)
 
     cmd = data[pos] >> 24;
     if (0xa0 <= cmd && cmd <= 0xdf) {
+      if (unlikely((pos+2) >= count)) {
+        // incomplete vram write/read cmd, can't consume yet
+        cmd = -1;
+        break;
+      }
+
       // consume vram write/read cmd
       start_vram_transfer(data[pos + 1], data[pos + 2], (cmd & 0xe0) == 0xc0);
       pos += 3;
@@ -522,7 +527,6 @@ void GPUwriteData(uint32_t data)
 long GPUdmaChain(uint32_t *rambase, uint32_t start_addr)
 {
   uint32_t addr, *list, ld_addr = 0;
-  uint32_t *llist_entry = NULL;
   int len, left, count;
   long cpu_cycles = 0;
 
@@ -531,15 +535,6 @@ long GPUdmaChain(uint32_t *rambase, uint32_t start_addr)
   if (unlikely(gpu.cmd_len > 0))
     flush_cmd_buffer();
 
-  // ff7 sends it's main list twice, detect this
-  if (*gpu.state.frame_count == gpu.state.last_list.frame &&
-      *gpu.state.hcnt - gpu.state.last_list.hcnt <= 1 &&
-       gpu.state.last_list.cycles > 2048)
-  {
-    llist_entry = rambase + (gpu.state.last_list.addr & 0x1fffff) / 4;
-    *llist_entry |= 0x800000;
-  }
-
   log_io("gpu_dma_chain\n");
   addr = start_addr & 0xffffff;
   for (count = 0; (addr & 0x800000) == 0; count++)
@@ -586,9 +581,6 @@ long GPUdmaChain(uint32_t *rambase, uint32_t start_addr)
     }
   }
 
-  if (llist_entry)
-    *llist_entry &= ~0x800000;
-
   gpu.state.last_list.frame = *gpu.state.frame_count;
   gpu.state.last_list.hcnt = *gpu.state.hcnt;
   gpu.state.last_list.cycles = cpu_cycles;