From 4959af6b652c30e6fcf87b3cc5674d755a674920 Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Wed, 6 Jun 2018 17:09:41 +0900 Subject: [PATCH] [VM][BABBAGE2ND] . --- source/src/vm/babbage2nd/babbage2nd.h | 1 + source/src/vm/babbage2nd/display.cpp | 51 ++++++++++++++++++++++++----------- source/src/vm/babbage2nd/display.h | 2 ++ 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/source/src/vm/babbage2nd/babbage2nd.h b/source/src/vm/babbage2nd/babbage2nd.h index 777c4ce53..21cf4329c 100644 --- a/source/src/vm/babbage2nd/babbage2nd.h +++ b/source/src/vm/babbage2nd/babbage2nd.h @@ -83,6 +83,7 @@ const struct { }; class csp_state_utils; + class EMU; class DEVICE; class EVENT; diff --git a/source/src/vm/babbage2nd/display.cpp b/source/src/vm/babbage2nd/display.cpp index 2a9b71095..2766d3786 100644 --- a/source/src/vm/babbage2nd/display.cpp +++ b/source/src/vm/babbage2nd/display.cpp @@ -162,29 +162,50 @@ void DISPLAY::draw_screen() #define STATE_VERSION 1 +#include "../../statesub.h" + +void DISPLAY::decl_state() +{ + state_entry = new csp_state_utils(STATE_VERSION, this_device_id, _T("DISPLAY")); + + DECL_STATE_ENTRY_1D_ARRAY(seg, sizeof(seg)); + DECL_STATE_ENTRY_UINT8(ls373); + DECL_STATE_ENTRY_UINT8(pio_7seg); + DECL_STATE_ENTRY_UINT8(pio_8bit); + +} + void DISPLAY::save_state(FILEIO* state_fio) { - state_fio->FputUint32(STATE_VERSION); - state_fio->FputInt32(this_device_id); + if(state_entry != NULL) { + state_entry->save_state(state_fio); + } + //state_fio->FputUint32(STATE_VERSION); + //state_fio->FputInt32(this_device_id); - state_fio->Fwrite(seg, sizeof(seg), 1); - state_fio->FputUint8(ls373); - state_fio->FputUint8(pio_7seg); - state_fio->FputUint8(pio_8bit); + //state_fio->Fwrite(seg, sizeof(seg), 1); + //state_fio->FputUint8(ls373); + //state_fio->FputUint8(pio_7seg); + //state_fio->FputUint8(pio_8bit); } bool DISPLAY::load_state(FILEIO* state_fio) { - if(state_fio->FgetUint32() != STATE_VERSION) { - return false; - } - if(state_fio->FgetInt32() != this_device_id) { - return false; + bool mb = false; + if(state_entry != NULL) { + mb = state_entry->load_state(state_fio); } - state_fio->Fread(seg, sizeof(seg), 1); - ls373 = state_fio->FgetUint8(); - pio_7seg = state_fio->FgetUint8(); - pio_8bit = state_fio->FgetUint8(); + if(!mb) return false; + //if(state_fio->FgetUint32() != STATE_VERSION) { + // return false; + //} + //if(state_fio->FgetInt32() != this_device_id) { + // return false; + //} + //state_fio->Fread(seg, sizeof(seg), 1); + //ls373 = state_fio->FgetUint8(); + //pio_7seg = state_fio->FgetUint8(); + //pio_8bit = state_fio->FgetUint8(); return true; } diff --git a/source/src/vm/babbage2nd/display.h b/source/src/vm/babbage2nd/display.h index 661828b36..1a2b0f38a 100644 --- a/source/src/vm/babbage2nd/display.h +++ b/source/src/vm/babbage2nd/display.h @@ -17,6 +17,7 @@ #define SIG_DISPLAY_7SEG_LED 0 #define SIG_DISPLAY_8BIT_LED 1 + class DISPLAY : public DEVICE { private: @@ -38,6 +39,7 @@ public: void initialize(); void write_signal(int id, uint32_t data, uint32_t mask); void event_vline(int v, int clock); + void decl_state(); void save_state(FILEIO* state_fio); bool load_state(FILEIO* state_fio); -- 2.11.0