slapstic: Add forgotten part of save state management

This commit is contained in:
Olivier Galibert 2021-02-08 13:09:11 +01:00
parent f4f9a3284b
commit 936714beda
2 changed files with 60 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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;