mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
bus/sega8: Added partial support for recent 188 in 1 cartridge. (#9509)
This commit is contained in:
parent
6c3bdae448
commit
f261d4edd6
@ -3033,6 +3033,7 @@ license:CC0
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="게임모음집188합" />
|
||||
<part name="cart" interface="sms_cart">
|
||||
<feature name="slot" value="korean_188in1" />
|
||||
<dataarea name="rom" size="1048576">
|
||||
<rom name="game mo-eumjip 188 hap (kr).bin" size="1048576" crc="380d7400" sha1="35a5f9a52cce6d702ba7e68daa7b5a07bce5ca87" offset="000000" />
|
||||
</dataarea>
|
||||
|
@ -40,6 +40,7 @@ DEFINE_DEVICE_TYPE(SEGA8_ROM_NEMESIS, sega8_nemesis_device, "sega8_nem
|
||||
DEFINE_DEVICE_TYPE(SEGA8_ROM_JANGGUN, sega8_janggun_device, "sega8_janggun", "SMS Janggun Cart")
|
||||
DEFINE_DEVICE_TYPE(SEGA8_ROM_HICOM, sega8_hicom_device, "sega8_hicom", "SMS Hi-Com Carts")
|
||||
DEFINE_DEVICE_TYPE(SEGA8_ROM_KOREAN, sega8_korean_device, "sega8_korean", "SMS Korean Carts")
|
||||
DEFINE_DEVICE_TYPE(SEGA8_ROM_KOREAN_188, sega8_korean_188_device, "sega8_korean_188", "SMS Korean 188 in 1 Multicart")
|
||||
DEFINE_DEVICE_TYPE(SEGA8_ROM_KOREAN_NB, sega8_korean_nb_device, "sega8_korean_nb", "SMS Korean No-Bank Mapper Carts")
|
||||
DEFINE_DEVICE_TYPE(SEGA8_ROM_SEOJIN, sega8_seojin_device, "sega8_seojin", "SMS Seo Jin Multi-cart")
|
||||
DEFINE_DEVICE_TYPE(SEGA8_ROM_X_TERMINATOR, sega8_x_terminator_device, "sega8_x_terminator", "GG X-Terminator")
|
||||
@ -178,6 +179,13 @@ sega8_korean_device::sega8_korean_device(const machine_config &mconfig, const ch
|
||||
}
|
||||
|
||||
|
||||
sega8_korean_188_device::sega8_korean_188_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: sega8_rom_device(mconfig, SEGA8_ROM_KOREAN_188, tag, owner, clock)
|
||||
, m_rom_bank_base(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
sega8_korean_nb_device::sega8_korean_nb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: sega8_rom_device(mconfig, SEGA8_ROM_KOREAN_NB, tag, owner, clock)
|
||||
{
|
||||
@ -258,6 +266,7 @@ void sega8_codemasters_device::device_reset()
|
||||
m_ram_enabled = 0;
|
||||
}
|
||||
|
||||
|
||||
void sega8_4pak_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_rom_bank_base));
|
||||
@ -285,6 +294,17 @@ void sega8_zemina_device::device_reset()
|
||||
}
|
||||
|
||||
|
||||
void sega8_korean_188_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_rom_bank_base));
|
||||
}
|
||||
|
||||
void sega8_korean_188_device::device_reset()
|
||||
{
|
||||
m_rom_bank_base = 0;
|
||||
}
|
||||
|
||||
|
||||
void sega8_multicart_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_block));
|
||||
@ -990,6 +1010,36 @@ void sega8_korean_device::write_cart(offs_t offset, uint8_t data)
|
||||
m_rom_bank_base[2] = data % m_rom_page_count;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
Korean Game 188 multicart,
|
||||
writes to 0x2000 switch 8K banks at 0x4000-0xbfff
|
||||
|
||||
TODO: figure out why menu #s 6, 13, etc don't load.
|
||||
Add dumps of other compatible multicarts.
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
u8 sega8_korean_188_device::read_cart(offs_t offset)
|
||||
{
|
||||
if (offset < 0x4000)
|
||||
return m_rom[offset];
|
||||
else
|
||||
{
|
||||
int bank = m_rom_bank_base ^ 0x1f;
|
||||
bank %= m_rom_page_count * 2;
|
||||
return m_rom[bank * 0x2000 + offset - 0x4000];
|
||||
}
|
||||
}
|
||||
|
||||
void sega8_korean_188_device::write_cart(offs_t offset, u8 data)
|
||||
{
|
||||
if ((offset & 0x6000) == 0x2000)
|
||||
m_rom_bank_base = data;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
Seo Jin Multi-Carts
|
||||
|
@ -359,6 +359,28 @@ public:
|
||||
};
|
||||
|
||||
|
||||
// ======================> sega8_korean_188_device
|
||||
|
||||
class sega8_korean_188_device : public sega8_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
sega8_korean_188_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// reading and writing
|
||||
virtual u8 read_cart(offs_t offset) override;
|
||||
virtual void write_cart(offs_t offset, u8 data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
private:
|
||||
u8 m_rom_bank_base;
|
||||
};
|
||||
|
||||
|
||||
// ======================> sega8_korean_nb_device
|
||||
|
||||
class sega8_korean_nb_device : public sega8_rom_device
|
||||
@ -495,6 +517,7 @@ DECLARE_DEVICE_TYPE(SEGA8_ROM_NEMESIS, sega8_nemesis_device)
|
||||
DECLARE_DEVICE_TYPE(SEGA8_ROM_JANGGUN, sega8_janggun_device)
|
||||
DECLARE_DEVICE_TYPE(SEGA8_ROM_HICOM, sega8_hicom_device)
|
||||
DECLARE_DEVICE_TYPE(SEGA8_ROM_KOREAN, sega8_korean_device)
|
||||
DECLARE_DEVICE_TYPE(SEGA8_ROM_KOREAN_188, sega8_korean_188_device)
|
||||
DECLARE_DEVICE_TYPE(SEGA8_ROM_KOREAN_NB, sega8_korean_nb_device)
|
||||
DECLARE_DEVICE_TYPE(SEGA8_ROM_SEOJIN, sega8_seojin_device)
|
||||
DECLARE_DEVICE_TYPE(SEGA8_ROM_MULTICART, sega8_multicart_device)
|
||||
|
@ -223,6 +223,7 @@ static const sega8_slot slot_list[] =
|
||||
{ SEGA8_NEMESIS, "nemesis" },
|
||||
{ SEGA8_JANGGUN, "janggun" },
|
||||
{ SEGA8_KOREAN, "korean" },
|
||||
{ SEGA8_KOREAN_188IN1, "korean_188in1" },
|
||||
{ SEGA8_KOREAN_NOBANK, "korean_nb" },
|
||||
{ SEGA8_OTHELLO, "othello" },
|
||||
{ SEGA8_CASTLE, "castle" },
|
||||
@ -916,6 +917,7 @@ void sg1000mk3_cart(device_slot_interface &device)
|
||||
device.option_add_internal("janggun", SEGA8_ROM_JANGGUN);
|
||||
device.option_add_internal("hicom", SEGA8_ROM_HICOM);
|
||||
device.option_add_internal("korean", SEGA8_ROM_KOREAN);
|
||||
device.option_add_internal("korean_188in1", SEGA8_ROM_KOREAN_188);
|
||||
device.option_add_internal("korean_nb", SEGA8_ROM_KOREAN_NB);
|
||||
device.option_add_internal("seojin", SEGA8_ROM_SEOJIN);
|
||||
device.option_add_internal("othello", SEGA8_ROM_OTHELLO);
|
||||
@ -937,6 +939,7 @@ void sms_cart(device_slot_interface &device)
|
||||
device.option_add_internal("janggun", SEGA8_ROM_JANGGUN);
|
||||
device.option_add_internal("hicom", SEGA8_ROM_HICOM);
|
||||
device.option_add_internal("korean", SEGA8_ROM_KOREAN);
|
||||
device.option_add_internal("korean_188in1", SEGA8_ROM_KOREAN_188);
|
||||
device.option_add_internal("korean_nb", SEGA8_ROM_KOREAN_NB);
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,7 @@ enum
|
||||
SEGA8_NEMESIS,
|
||||
SEGA8_JANGGUN,
|
||||
SEGA8_KOREAN,
|
||||
SEGA8_KOREAN_188IN1,
|
||||
SEGA8_KOREAN_NOBANK,
|
||||
SEGA8_OTHELLO,
|
||||
SEGA8_CASTLE,
|
||||
|
Loading…
Reference in New Issue
Block a user