diff options
Diffstat (limited to 'src/mame/machine/sms.cpp')
-rw-r--r-- | src/mame/machine/sms.cpp | 54 |
1 files changed, 21 insertions, 33 deletions
diff --git a/src/mame/machine/sms.cpp b/src/mame/machine/sms.cpp index 55c9f01871c..2f915a111a4 100644 --- a/src/mame/machine/sms.cpp +++ b/src/mame/machine/sms.cpp @@ -1033,8 +1033,6 @@ void sms_state::machine_start() m_led_pwr = 1; } - char str[7]; - m_cartslot = machine().device<sega8_cart_slot_device>("slot"); m_cardslot = machine().device<sega8_card_slot_device>("mycard"); m_smsexpslot = machine().device<sms_expansion_slot_device>("smsexp"); @@ -1101,30 +1099,18 @@ void sms_state::machine_start() save_item(NAME(m_gg_sio)); } - if (m_is_sdisp) - { - machine().save().register_postload(save_prepost_delegate(FUNC(sms_state::store_post_load), this)); - - save_item(NAME(m_store_control)); - save_item(NAME(m_store_cart_selection_data)); - - m_slots[0] = m_cartslot; - for (int i = 1; i < 16; i++) - { - sprintf(str,"slot%i",i + 1); - m_slots[i] = machine().device<sega8_cart_slot_device>(str); - } - for (int i = 0; i < 16; i++) - { - sprintf(str,"slot%i",i + 16 + 1); - m_cards[i] = machine().device<sega8_card_slot_device>(str); - } - } - if (m_cartslot) m_cartslot->save_ram(); } +void smssdisp_state::machine_start() +{ + sms_state::machine_start(); + + save_item(NAME(m_store_control)); + save_item(NAME(m_store_cart_selection_data)); +} + void sms_state::machine_reset() { if (m_is_smsj) @@ -1166,17 +1152,19 @@ void sms_state::machine_reset() m_gg_sio[4] = 0x00; } - if (m_is_sdisp) - { - m_store_control = 0; - m_store_cart_selection_data = 0; - store_select_cart(m_store_cart_selection_data); - } - setup_bios(); setup_media_slots(); } +void smssdisp_state::machine_reset() +{ + sms_state::machine_reset(); + + m_store_control = 0; + m_store_cart_selection_data = 0; + store_select_cart(m_store_cart_selection_data); +} + READ8_MEMBER(smssdisp_state::sms_store_cart_select_r) { return m_store_cart_selection_data; @@ -1191,7 +1179,7 @@ WRITE8_MEMBER(smssdisp_state::sms_store_cart_select_w) } -void sms_state::store_post_load() +void smssdisp_state::device_post_load() { store_select_cart(m_store_cart_selection_data); } @@ -1206,7 +1194,7 @@ void sms_state::store_post_load() // that seems to change the active cart/card slot pair or, for the 4th // game switch onward of the 16-3 model, the active cart slot only. -void sms_state::store_select_cart(uint8_t data) +void smssdisp_state::store_select_cart(uint8_t data) { uint8_t slot = data >> 4; uint8_t slottype = data & 0x08; @@ -1214,9 +1202,9 @@ void sms_state::store_select_cart(uint8_t data) // The SMS Store Display Unit only uses the logical cartridge slot to // map the active cartridge or card slot, of its multiple ones. if (slottype == 0) - m_cartslot = m_slots[slot]; + m_cartslot = m_slots[slot].target(); else - m_cartslot = m_cards[slot]; + m_cartslot = m_cards[slot].target(); logerror("switching in part of %s slot #%d\n", slottype ? "card" : "cartridge", slot); } |