From 40b3cd51ec7b1e350c5794d82398210f7683cfda Mon Sep 17 00:00:00 2001 From: David Guillen Fandos Date: Tue, 24 Aug 2021 17:13:39 +0200 Subject: [PATCH] Fix sign extension from BG references (broke it in 7f7d06) --- video.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/video.c b/video.c index 4ea67cb..691e51f 100644 --- a/video.c +++ b/video.c @@ -2336,17 +2336,23 @@ static void render_scanline_text_transparent_alpha(u32 layer, s32 affine_reference_x[2]; s32 affine_reference_y[2]; +static inline s32 signext28(u32 value) +{ + s32 ret = (s32)(value << 4); + return ret >> 4; +} + void video_reload_counters() { /* This happens every Vblank */ - affine_reference_x[0] = (s32)(read_ioreg(REG_BG2X_L) | - ((read_ioreg(REG_BG2X_H) & 0xFFF) << 16)); - affine_reference_y[0] = (s32)(read_ioreg(REG_BG2Y_L) | - ((read_ioreg(REG_BG2Y_H) & 0xFFF) << 16)); - affine_reference_x[1] = (s32)(read_ioreg(REG_BG3X_L) | - ((read_ioreg(REG_BG3X_H) & 0xFFF) << 16)); - affine_reference_y[1] = (s32)(read_ioreg(REG_BG3Y_L) | - ((read_ioreg(REG_BG3Y_H) & 0xFFF) << 16)); + affine_reference_x[0] = signext28(read_ioreg(REG_BG2X_L) | + (read_ioreg(REG_BG2X_H) << 16)); + affine_reference_y[0] = signext28(read_ioreg(REG_BG2Y_L) | + (read_ioreg(REG_BG2Y_H) << 16)); + affine_reference_x[1] = signext28(read_ioreg(REG_BG3X_L) | + (read_ioreg(REG_BG3X_H) << 16)); + affine_reference_y[1] = signext28(read_ioreg(REG_BG3Y_L) | + (read_ioreg(REG_BG3Y_H) << 16)); } #define affine_render_bg_pixel_normal() \