sm501: Perform a full update after palette change
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 <mail@sebastianbauer.info> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
4a1f253adb
commit
d27335592a
|
@ -487,6 +487,7 @@ typedef struct SM501State {
|
||||||
MemoryRegion twoD_engine_region;
|
MemoryRegion twoD_engine_region;
|
||||||
uint32_t last_width;
|
uint32_t last_width;
|
||||||
uint32_t last_height;
|
uint32_t last_height;
|
||||||
|
bool do_full_update; /* perform a full update next time */
|
||||||
I2CBus *i2c_bus;
|
I2CBus *i2c_bus;
|
||||||
|
|
||||||
/* mmio registers */
|
/* mmio registers */
|
||||||
|
@ -1042,6 +1043,7 @@ static void sm501_palette_write(void *opaque, hwaddr addr,
|
||||||
|
|
||||||
assert(range_covers_byte(0, 0x400 * 3, addr));
|
assert(range_covers_byte(0, 0x400 * 3, addr));
|
||||||
*(uint32_t *)&s->dc_palette[addr] = value;
|
*(uint32_t *)&s->dc_palette[addr] = value;
|
||||||
|
s->do_full_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t sm501_disp_ctrl_read(void *opaque, hwaddr addr,
|
static uint64_t sm501_disp_ctrl_read(void *opaque, hwaddr addr,
|
||||||
|
@ -1630,6 +1632,12 @@ static void sm501_update_display(void *opaque)
|
||||||
full_update = 1;
|
full_update = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* someone else requested a full update */
|
||||||
|
if (s->do_full_update) {
|
||||||
|
s->do_full_update = false;
|
||||||
|
full_update = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* draw each line according to conditions */
|
/* draw each line according to conditions */
|
||||||
snap = memory_region_snapshot_and_clear_dirty(&s->local_mem_region,
|
snap = memory_region_snapshot_and_clear_dirty(&s->local_mem_region,
|
||||||
offset, width * height * src_bpp, DIRTY_MEMORY_VGA);
|
offset, width * height * src_bpp, DIRTY_MEMORY_VGA);
|
||||||
|
|
Loading…
Reference in a new issue