Mercurial > repos > blastem
diff z80_to_x86.c @ 1427:4e5797b3935a
WIP - New savestate format
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 06 Aug 2017 00:06:36 -0700 |
parents | 70d88d9bfe13 |
children | c886c54d8cf1 |
line wrap: on
line diff
--- a/z80_to_x86.c Fri Jul 07 21:44:49 2017 -0700 +++ b/z80_to_x86.c Sun Aug 06 00:06:36 2017 -0700 @@ -3830,3 +3830,104 @@ } } +void z80_serialize(z80_context *context, serialize_buffer *buf) +{ + for (int i = 0; i <= Z80_A; i++) + { + save_int8(buf, context->regs[i]); + } + uint8_t f = context->flags[ZF_S]; + f <<= 1; + f |= context->flags[ZF_Z] ; + f <<= 2; + f |= context->flags[ZF_H]; + f <<= 2; + f |= context->flags[ZF_PV]; + f <<= 1; + f |= context->flags[ZF_N]; + f <<= 1; + f |= context->flags[ZF_C]; + f |= context->flags[ZF_XY] & 0x28; + save_int8(buf, f); + for (int i = 0; i <= Z80_A; i++) + { + save_int8(buf, context->alt_regs[i]); + } + f = context->alt_flags[ZF_S]; + f <<= 1; + f |= context->alt_flags[ZF_Z] ; + f <<= 2; + f |= context->alt_flags[ZF_H]; + f <<= 2; + f |= context->alt_flags[ZF_PV]; + f <<= 1; + f |= context->alt_flags[ZF_N]; + f <<= 1; + f |= context->alt_flags[ZF_C]; + f |= context->flags[ZF_XY] & 0x28; + save_int8(buf, f); + save_int16(buf, context->pc); + save_int16(buf, context->sp); + save_int8(buf, context->im); + save_int8(buf, context->iff1); + save_int8(buf, context->iff2); + save_int8(buf, context->int_is_nmi); + save_int32(buf, context->current_cycle); + save_int32(buf, context->int_cycle); + save_int32(buf, context->int_enable_cycle); + save_int32(buf, context->int_pulse_start); + save_int32(buf, context->int_pulse_end); + save_int32(buf, context->nmi_start); +} + +void z80_deserialize(deserialize_buffer *buf, void *vcontext) +{ + z80_context *context = vcontext; + for (int i = 0; i <= Z80_A; i++) + { + context->regs[i] = load_int8(buf); + } + uint8_t f = load_int8(buf); + context->flags[ZF_XY] = f & 0x28; + context->flags[ZF_C] = f & 1; + f >>= 1; + context->flags[ZF_N] = f & 1; + f >>= 1; + context->flags[ZF_PV] = f & 1; + f >>= 2; + context->flags[ZF_H] = f & 1; + f >>= 2; + context->flags[ZF_Z] = f & 1; + f >>= 1; + context->flags[ZF_S] = f; + for (int i = 0; i <= Z80_A; i++) + { + context->alt_regs[i] = load_int8(buf); + } + f = load_int8(buf); + context->alt_flags[ZF_XY] = f & 0x28; + context->alt_flags[ZF_C] = f & 1; + f >>= 1; + context->alt_flags[ZF_N] = f & 1; + f >>= 1; + context->alt_flags[ZF_PV] = f & 1; + f >>= 2; + context->alt_flags[ZF_H] = f & 1; + f >>= 2; + context->alt_flags[ZF_Z] = f & 1; + f >>= 1; + context->alt_flags[ZF_S] = f; + context->pc = load_int16(buf); + context->sp = load_int16(buf); + context->im = load_int8(buf); + context->iff1 = load_int8(buf); + context->iff2 = load_int8(buf); + context->int_is_nmi = load_int8(buf); + context->current_cycle = load_int32(buf); + context->int_cycle = load_int32(buf); + context->int_enable_cycle = load_int32(buf); + context->int_pulse_start = load_int32(buf); + context->int_pulse_end = load_int32(buf); + context->nmi_start = load_int32(buf); +} +