From 936714beda91fde29177e6d35f57ebbd490ec156 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 8 Feb 2021 13:09:11 +0100 Subject: slapstic: Add forgotten part of save state management --- src/mame/machine/slapstic.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/mame/machine/slapstic.h | 20 ++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/src/mame/machine/slapstic.cpp b/src/mame/machine/slapstic.cpp index c65e1422389..5624156ed67 100644 --- a/src/mame/machine/slapstic.cpp +++ b/src/mame/machine/slapstic.cpp @@ -211,6 +211,7 @@ atari_slapstic_device::atari_slapstic_device(const machine_config &mconfig, cons m_start(0), m_end(0), m_mirror(0), + m_saved_state(S_IDLE), m_current_bank(0), m_loaded_bank(0) { @@ -1255,3 +1256,42 @@ void atari_slapstic_device::add_set::test(offs_t addr) const m_sl->m_state = m_sl->m_s_alt_commit.get(); } } + + +// state saving management + +void atari_slapstic_device::device_pre_save() +{ + m_saved_state = m_state->state_id(); +} + +u8 atari_slapstic_device::idle ::state_id() const { return S_IDLE; } +u8 atari_slapstic_device::active_101_102 ::state_id() const { return S_ACTIVE; } +u8 atari_slapstic_device::active_103_110 ::state_id() const { return S_ACTIVE; } +u8 atari_slapstic_device::active_111_118 ::state_id() const { return S_ACTIVE; } +u8 atari_slapstic_device::alt_valid_101_102 ::state_id() const { return S_ALT_VALID; } +u8 atari_slapstic_device::alt_valid_103_110 ::state_id() const { return S_ALT_VALID; } +u8 atari_slapstic_device::alt_valid_111_118 ::state_id() const { return S_ALT_VALID; } +u8 atari_slapstic_device::alt_select_101_110::state_id() const { return S_ALT_SELECT; } +u8 atari_slapstic_device::alt_select_111_118::state_id() const { return S_ALT_SELECT; } +u8 atari_slapstic_device::alt_commit ::state_id() const { return S_ALT_COMMIT; } +u8 atari_slapstic_device::bit_load ::state_id() const { return S_BIT_LOAD; } +u8 atari_slapstic_device::bit_set ::state_id() const { return m_is_odd ? S_BIT_SET_ODD : S_BIT_SET_EVEN; } +u8 atari_slapstic_device::add_load ::state_id() const { return S_ADD_LOAD; } +u8 atari_slapstic_device::add_set ::state_id() const { return S_ADD_SET; } + +void atari_slapstic_device::device_post_load() +{ + switch(m_saved_state) { + case S_IDLE: m_state = m_s_idle.get(); break; + case S_ACTIVE: m_state = m_s_active.get(); break; + case S_ALT_VALID: m_state = m_s_alt_valid.get(); break; + case S_ALT_SELECT: m_state = m_s_alt_select.get(); break; + case S_ALT_COMMIT: m_state = m_s_alt_commit.get(); break; + case S_BIT_LOAD: m_state = m_s_bit_load.get(); break; + case S_BIT_SET_ODD: m_state = m_s_bit_set_odd.get(); break; + case S_BIT_SET_EVEN: m_state = m_s_bit_set_even.get(); break; + case S_ADD_LOAD: m_state = m_s_add_load.get(); break; + case S_ADD_SET: m_state = m_s_add_set.get(); break; + } +} diff --git a/src/mame/machine/slapstic.h b/src/mame/machine/slapstic.h index 8d729dd02c4..c3973f34df4 100644 --- a/src/mame/machine/slapstic.h +++ b/src/mame/machine/slapstic.h @@ -53,6 +53,8 @@ protected: virtual void device_start() override; virtual void device_reset() override; virtual void device_validity_check(validity_checker &valid) const override; + virtual void device_pre_save() override; + virtual void device_post_load() override; private: struct mask_value { @@ -135,6 +137,7 @@ private: virtual ~state() = default; virtual void test(offs_t addr) const = 0; + virtual u8 state_id() const = 0; }; struct idle : public state { @@ -142,6 +145,7 @@ private: idle(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct active_101_102 : public state { @@ -149,6 +153,7 @@ private: active_101_102(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct active_103_110 : public state { @@ -156,6 +161,7 @@ private: active_103_110(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct active_111_118 : public state { @@ -163,6 +169,7 @@ private: active_111_118(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct alt_valid_101_102 : public state { @@ -170,6 +177,7 @@ private: alt_valid_101_102(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct alt_valid_103_110 : public state { @@ -177,6 +185,7 @@ private: alt_valid_103_110(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct alt_valid_111_118 : public state { @@ -184,6 +193,7 @@ private: alt_valid_111_118(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct alt_select_101_110 : public state { @@ -192,6 +202,7 @@ private: alt_select_101_110(atari_slapstic_device *sl, const checker &check, const slapstic_data *data, int shift); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct alt_select_111_118 : public state { @@ -200,6 +211,7 @@ private: alt_select_111_118(atari_slapstic_device *sl, const checker &check, const slapstic_data *data, int shift); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct alt_commit : public state { @@ -207,6 +219,7 @@ private: alt_commit(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct bit_load : public state { @@ -214,6 +227,7 @@ private: bit_load(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct bit_set : public state { @@ -222,6 +236,7 @@ private: bit_set(atari_slapstic_device *sl, const checker &check, const slapstic_data *data, bool odd); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct add_load : public state { @@ -229,6 +244,7 @@ private: add_load(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; struct add_set : public state { @@ -236,6 +252,7 @@ private: add_set(atari_slapstic_device *sl, const checker &check, const slapstic_data *data); virtual void test(offs_t addr) const override; + virtual u8 state_id() const override; }; @@ -263,6 +280,9 @@ private: const state *m_state; + enum { S_IDLE, S_ACTIVE, S_ALT_VALID, S_ALT_SELECT, S_ALT_COMMIT, S_BIT_LOAD, S_BIT_SET_ODD, S_BIT_SET_EVEN, S_ADD_LOAD, S_ADD_SET }; + u8 m_saved_state; + u8 m_current_bank; u8 m_loaded_bank; -- cgit v1.2.3