From f9b966dec65733fa89e72253c1edef97d6a17065 Mon Sep 17 00:00:00 2001 From: kub Date: Wed, 14 Sep 2022 19:27:43 +0000 Subject: [PATCH] mcd, fix gfx (32x32 stamp) --- pico/cd/gfx.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pico/cd/gfx.c b/pico/cd/gfx.c index 2d30c15f..84c4f43c 100644 --- a/pico/cd/gfx.c +++ b/pico/cd/gfx.c @@ -43,6 +43,7 @@ typedef struct //uint32 cycles; /* current cycles count for graphics operation */ //uint32 cyclesPerLine; /* current graphics operation timings */ uint32 dotMask; /* stamp map size mask */ + uint32 stampMask; /* stamp number mask */ uint16 *tracePtr; /* trace vector pointer */ uint16 *mapPtr; /* stamp map table base address */ uint8 stampShift; /* stamp pixel shift value (related to stamp size) */ @@ -193,7 +194,7 @@ static inline int gfx_pixel(uint32 xpos, uint32 ypos, uint16 *lut_cell) /* c = cell offset (0-3 for 16x16, 0-15 for 32x32) */ /* yyy = line offset (0-7) */ /* xxx = pixel offset (0-7) */ - stamp_index = (stamp_data & 0x7ff) << 8; + stamp_index = (stamp_data & gfx.stampMask) << 8; if (stamp_index) { @@ -355,28 +356,32 @@ void gfx_start(uint32 base) { case 0: gfx.dotMask = 0x07ffff; /* 256x256 dots/map */ - gfx.stampShift = 11 + 4; /* 16x16 dots/stamps */ + gfx.stampMask = 0x7ff; /* 16x16 dots/stamp */ + gfx.stampShift = 11 + 4; /* 16x16 dots/stamp */ gfx.mapShift = 4; /* 16x16 stamps/map */ mask = 0x3fe00; /* 512 bytes/table */ break; case 1: gfx.dotMask = 0x07ffff; /* 256x256 dots/map */ - gfx.stampShift = 11 + 5; /* 32x32 dots/stamps */ + gfx.stampMask = 0x7fc; /* 16x16 dots/stamp */ + gfx.stampShift = 11 + 5; /* 32x32 dots/stamp */ gfx.mapShift = 3; /* 8x8 stamps/map */ mask = 0x3ff80; /* 128 bytes/table */ break; case 2: gfx.dotMask = 0x7fffff; /* 4096*4096 dots/map */ - gfx.stampShift = 11 + 4; /* 16x16 dots/stamps */ + gfx.stampMask = 0x7ff; /* 16x16 dots/stamp */ + gfx.stampShift = 11 + 4; /* 16x16 dots/stamp */ gfx.mapShift = 8; /* 256x256 stamps/map */ mask = 0x20000; /* 131072 bytes/table */ break; case 3: gfx.dotMask = 0x7fffff; /* 4096*4096 dots/map */ - gfx.stampShift = 11 + 5; /* 32x32 dots/stamps */ + gfx.stampMask = 0x7fc; /* 16x16 dots/stamp */ + gfx.stampShift = 11 + 5; /* 32x32 dots/stamp */ gfx.mapShift = 7; /* 128x128 stamps/map */ mask = 0x38000; /* 32768 bytes/table */ break; -- 2.39.5