From 29ade46a0a58e885a9a913f738cdb30d54e0a9c5 Mon Sep 17 00:00:00 2001 From: Guy Perfect Date: Sat, 28 Mar 2026 16:46:32 -0500 Subject: [PATCH] Fix for affine parameter address resolution --- core/vip.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/vip.c b/core/vip.c index 3e1964d..85308bf 100644 --- a/core/vip.c +++ b/core/vip.c @@ -1005,7 +1005,7 @@ static void vipDrawAffine(VB *sim, World *world) { Cell *cell; /* Source cell */ uint8_t *col, *row; /* Output pixel */ uint8_t pixel; /* Character pixel value */ - uint8_t *param; /* World parameter memory */ + uint32_t param; /* World parameter memory */ int32_t px, py; /* Pixel source coordinates */ int32_t dx, dy, mp, mx, my; /* Affine parameters */ int32_t wx; /* Base world X coordinate */ @@ -1052,16 +1052,16 @@ static void vipDrawAffine(VB *sim, World *world) { wx = x1 - wx; /* Process all visible rows */ - param = &sim->vip.ram[world->paramBase | (y1 - world->gy) << 4]; + param = world->paramBase + ((y1 - world->gy) << 4); row = &sim->vip.shadow[i][x1 * 224 + y1]; for (y = y1; y < y2; y++, param += 16, row++) { /* Parse line parameters */ - mx = (int32_t) busReadBuffer(param + 0, VB_S16) << 6; - mp = (int32_t) busReadBuffer(param + 2, VB_S16); - my = (int32_t) busReadBuffer(param + 4, VB_S16) << 6; - dx = (int32_t) busReadBuffer(param + 6, VB_S16); - dy = (int32_t) busReadBuffer(param + 8, VB_S16); + mx = (int32_t) busReadBuffer(&sim->vip.ram[param | 0], VB_S16) << 6; + mp = (int32_t) busReadBuffer(&sim->vip.ram[param | 2], VB_S16); + my = (int32_t) busReadBuffer(&sim->vip.ram[param | 4], VB_S16) << 6; + dx = (int32_t) busReadBuffer(&sim->vip.ram[param | 6], VB_S16); + dy = (int32_t) busReadBuffer(&sim->vip.ram[param | 8], VB_S16); /* Adjust left-edge parameters */ if ((mp < 0) ^ i) {