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;
--
⑨