comparison 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
comparison
equal deleted inserted replaced
1426:957325c990d5 1427:4e5797b3935a
3828 check_cycles_int(&opts->gen, address); 3828 check_cycles_int(&opts->gen, address);
3829 opts->gen.code = tmp_code; 3829 opts->gen.code = tmp_code;
3830 } 3830 }
3831 } 3831 }
3832 3832
3833 void z80_serialize(z80_context *context, serialize_buffer *buf)
3834 {
3835 for (int i = 0; i <= Z80_A; i++)
3836 {
3837 save_int8(buf, context->regs[i]);
3838 }
3839 uint8_t f = context->flags[ZF_S];
3840 f <<= 1;
3841 f |= context->flags[ZF_Z] ;
3842 f <<= 2;
3843 f |= context->flags[ZF_H];
3844 f <<= 2;
3845 f |= context->flags[ZF_PV];
3846 f <<= 1;
3847 f |= context->flags[ZF_N];
3848 f <<= 1;
3849 f |= context->flags[ZF_C];
3850 f |= context->flags[ZF_XY] & 0x28;
3851 save_int8(buf, f);
3852 for (int i = 0; i <= Z80_A; i++)
3853 {
3854 save_int8(buf, context->alt_regs[i]);
3855 }
3856 f = context->alt_flags[ZF_S];
3857 f <<= 1;
3858 f |= context->alt_flags[ZF_Z] ;
3859 f <<= 2;
3860 f |= context->alt_flags[ZF_H];
3861 f <<= 2;
3862 f |= context->alt_flags[ZF_PV];
3863 f <<= 1;
3864 f |= context->alt_flags[ZF_N];
3865 f <<= 1;
3866 f |= context->alt_flags[ZF_C];
3867 f |= context->flags[ZF_XY] & 0x28;
3868 save_int8(buf, f);
3869 save_int16(buf, context->pc);
3870 save_int16(buf, context->sp);
3871 save_int8(buf, context->im);
3872 save_int8(buf, context->iff1);
3873 save_int8(buf, context->iff2);
3874 save_int8(buf, context->int_is_nmi);
3875 save_int32(buf, context->current_cycle);
3876 save_int32(buf, context->int_cycle);
3877 save_int32(buf, context->int_enable_cycle);
3878 save_int32(buf, context->int_pulse_start);
3879 save_int32(buf, context->int_pulse_end);
3880 save_int32(buf, context->nmi_start);
3881 }
3882
3883 void z80_deserialize(deserialize_buffer *buf, void *vcontext)
3884 {
3885 z80_context *context = vcontext;
3886 for (int i = 0; i <= Z80_A; i++)
3887 {
3888 context->regs[i] = load_int8(buf);
3889 }
3890 uint8_t f = load_int8(buf);
3891 context->flags[ZF_XY] = f & 0x28;
3892 context->flags[ZF_C] = f & 1;
3893 f >>= 1;
3894 context->flags[ZF_N] = f & 1;
3895 f >>= 1;
3896 context->flags[ZF_PV] = f & 1;
3897 f >>= 2;
3898 context->flags[ZF_H] = f & 1;
3899 f >>= 2;
3900 context->flags[ZF_Z] = f & 1;
3901 f >>= 1;
3902 context->flags[ZF_S] = f;
3903 for (int i = 0; i <= Z80_A; i++)
3904 {
3905 context->alt_regs[i] = load_int8(buf);
3906 }
3907 f = load_int8(buf);
3908 context->alt_flags[ZF_XY] = f & 0x28;
3909 context->alt_flags[ZF_C] = f & 1;
3910 f >>= 1;
3911 context->alt_flags[ZF_N] = f & 1;
3912 f >>= 1;
3913 context->alt_flags[ZF_PV] = f & 1;
3914 f >>= 2;
3915 context->alt_flags[ZF_H] = f & 1;
3916 f >>= 2;
3917 context->alt_flags[ZF_Z] = f & 1;
3918 f >>= 1;
3919 context->alt_flags[ZF_S] = f;
3920 context->pc = load_int16(buf);
3921 context->sp = load_int16(buf);
3922 context->im = load_int8(buf);
3923 context->iff1 = load_int8(buf);
3924 context->iff2 = load_int8(buf);
3925 context->int_is_nmi = load_int8(buf);
3926 context->current_cycle = load_int32(buf);
3927 context->int_cycle = load_int32(buf);
3928 context->int_enable_cycle = load_int32(buf);
3929 context->int_pulse_start = load_int32(buf);
3930 context->int_pulse_end = load_int32(buf);
3931 context->nmi_start = load_int32(buf);
3932 }
3933