On 06/21/2018 05:08 AM, BALATON Zoltan wrote: > From: Sebastian Bauer <m...@sebastianbauer.info> > > Changing the palette of a color index has as an immediate effect on > all pixels with the corresponding index on real hardware. Performing a > full update after a palette change is a simple way to emulate this > effect. > > Signed-off-by: Sebastian Bauer <m...@sebastianbauer.info> > Signed-off-by: BALATON Zoltan <bala...@eik.bme.hu> > --- > > Notes: > v4: Updated commit message > > hw/display/sm501.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/hw/display/sm501.c b/hw/display/sm501.c > index 0625cf5..a2ee6e3 100644 > --- a/hw/display/sm501.c > +++ b/hw/display/sm501.c > @@ -479,6 +479,7 @@ typedef struct SM501State { > MemoryRegion twoD_engine_region; > uint32_t last_width; > uint32_t last_height; > + uint32_t do_full_update; /* perform a full update next time */
Can this be a bool? > I2CBus *i2c_bus; > > /* mmio registers */ > @@ -1032,6 +1033,7 @@ static void sm501_palette_write(void *opaque, hwaddr > addr, > > assert(range_covers_byte(0, 0x400 * 3, addr)); > *(uint32_t *)&s->dc_palette[addr] = value; > + s->do_full_update = 1; > } > > static uint64_t sm501_disp_ctrl_read(void *opaque, hwaddr addr, > @@ -1620,6 +1622,12 @@ static void sm501_update_display(void *opaque) > full_update = 1; > } > > + /* someone else requested a full update */ > + if (s->do_full_update) { > + s->do_full_update = 0; > + full_update = 1; > + } > + > /* draw each line according to conditions */ > snap = memory_region_snapshot_and_clear_dirty(&s->local_mem_region, > offset, width * height * src_bpp, DIRTY_MEMORY_VGA); >