color_reg is expected to hold 32 bit values, so it was too small. This bug was reported by coverity:
hw/sm501.c:624: result_independent_of_operands: color_reg >> 16 is 0 regardless of the values of its operands. This occurs as the bitwise first operand of '&'. Cc: Shin-ichiro Kawasaki <kawas...@juno.dti.ne.jp> Signed-off-by: Stefan Weil <s...@weilnetz.de> --- hw/sm501.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/hw/sm501.c b/hw/sm501.c index 326531c..09c5894 100644 --- a/hw/sm501.c +++ b/hw/sm501.c @@ -593,7 +593,7 @@ static inline uint32_t get_hwc_x(SM501State *state, int crt) */ static inline uint16_t get_hwc_color(SM501State *state, int crt, int index) { - uint16_t color_reg = 0; + uint32_t color_reg = 0; uint16_t color_565 = 0; if (index == 0) { -- 1.7.0.4