Mercurial > repos > blastem
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 |