shithub: psxe

Download patch

ref: 32a93c23fdcc0a4367506f96537a2dbe14c5d243
parent: 4f5f051a8c54d65a12bfde24395760e5583e33e4
author: allkern <lisandroaalarcon@gmail.com>
date: Sat Nov 30 08:57:29 EST 2024

Fix high resolution MDEC processing

--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@
 sdl2-win32/
 sdl2-win64/
 system573/
+psyq/
 test/
 bios/
 roms/
--- a/psx/bus.c
+++ b/psx/bus.c
@@ -182,7 +182,7 @@
 }
 
 
-void psx_bus_write16(psx_bus_t* bus, uint32_t addr, uint16_t value) {
+void psx_bus_write16(psx_bus_t* bus, uint32_t addr, uint32_t value) {
     bus->access_cycles = 0;
 
     uint32_t vaddr = addr;
@@ -217,7 +217,7 @@
     //exit(1);
 }
 
-void psx_bus_write8(psx_bus_t* bus, uint32_t addr, uint8_t value) {
+void psx_bus_write8(psx_bus_t* bus, uint32_t addr, uint32_t value) {
     bus->access_cycles = 0;
 
     uint32_t vaddr = addr;
--- a/psx/bus.h
+++ b/psx/bus.h
@@ -13,8 +13,8 @@
 uint16_t psx_bus_read16(psx_bus_t*, uint32_t);
 uint8_t psx_bus_read8(psx_bus_t*, uint32_t);
 void psx_bus_write32(psx_bus_t*, uint32_t, uint32_t);
-void psx_bus_write16(psx_bus_t*, uint32_t, uint16_t);
-void psx_bus_write8(psx_bus_t*, uint32_t, uint8_t);
+void psx_bus_write16(psx_bus_t*, uint32_t, uint32_t);
+void psx_bus_write8(psx_bus_t*, uint32_t, uint32_t);
 uint32_t psx_bus_get_access_cycles(psx_bus_t*);
 void psx_bus_destroy(psx_bus_t*);
 
--- a/psx/dev/gpu.c
+++ b/psx/dev/gpu.c
@@ -335,7 +335,7 @@
                 if (!texel)
                     continue;
 
-                if ((data.attrib & PA_TRANSP) != 0)
+                if (data.attrib & PA_TRANSP)
                     transp = (texel & 0x8000) != 0;
 
                 if (data.attrib & PA_RAW) {
--- a/psx/dev/mdec.c
+++ b/psx/dev/mdec.c
@@ -237,6 +237,8 @@
         mdec->output_empty = 0;
         mdec->output_index = 0;
 
+        // printf("output words remaining: %d (%x) count=%d block_size=%lld size=%lld\n", mdec->output_words_remaining, mdec->output_words_remaining, block_count, block_size, size);
+
         // log_set_quiet(0);
         // log_fatal("Finished decoding %u-bit MDEC data input=(%04x -> %08x)",
         //     (mdec->output_depth == 3) ? 15 : 24,
--- a/psx/dev/mdec.h
+++ b/psx/dev/mdec.h
@@ -57,9 +57,9 @@
 
     uint8_t* output;
     int output_index;
-    uint16_t output_words_remaining;
+    uint32_t output_words_remaining;
 
-    uint16_t words_remaining;
+    uint32_t words_remaining;
     int current_block;
     int output_bit15;
     int output_signed;
--