Save PC speaker state to remove differences between system states after saving the snapshot and after loading it again. This patch is needed for deterministic replay of the execution.
Signed-off-by: Pavel Dovgalyuk<pavel.dovga...@gmail.com> --- hw/pcspk.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-) diff --git a/hw/pcspk.c b/hw/pcspk.c index e430324..3fb3dd1 100644 --- a/hw/pcspk.c +++ b/hw/pcspk.c @@ -159,10 +159,28 @@ static const MemoryRegionOps pcspk_io_ops = { }, }; +static const VMStateDescription vmstate_spk = { + .name = "pcspk", + .version_id = 1, + .minimum_version_id = 1, + .minimum_version_id_old = 1, + .fields = (VMStateField[]) { + VMSTATE_UINT8_ARRAY(sample_buf, PCSpkState, PCSPK_BUF_LEN), + VMSTATE_UINT32(pit_count, PCSpkState), + VMSTATE_UINT32(samples, PCSpkState), + VMSTATE_UINT32(play_pos, PCSpkState), + VMSTATE_INT32(data_on, PCSpkState), + VMSTATE_INT32(dummy_refresh_clock, PCSpkState), + VMSTATE_END_OF_LIST() + } +}; + static int pcspk_initfn(ISADevice *dev) { PCSpkState *s = DO_UPCAST(PCSpkState, dev, dev); + vmstate_register(NULL, 0, &vmstate_spk, s); + memory_region_init_io(&s->ioport, &pcspk_io_ops, s, "elcr", 1); isa_register_ioport(dev, &s->ioport, s->iobase);