summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/segas24.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/segas24.cpp')
-rw-r--r--src/mame/drivers/segas24.cpp320
1 files changed, 194 insertions, 126 deletions
diff --git a/src/mame/drivers/segas24.cpp b/src/mame/drivers/segas24.cpp
index b26e0b60cf6..11d9975a551 100644
--- a/src/mame/drivers/segas24.cpp
+++ b/src/mame/drivers/segas24.cpp
@@ -376,6 +376,8 @@ enum {
void segas24_state::fdc_init()
{
+ m_fdc_track_side = 0;
+ m_fdc_mode = 0;
m_fdc_status = 0;
m_fdc_track = 0;
m_fdc_sector = 0;
@@ -386,6 +388,18 @@ void segas24_state::fdc_init()
m_fdc_index_count = 0;
}
+void segas24_state::device_post_load()
+{
+ switch(m_fdc_mode) {
+ case 0x9:
+ case 0xb:
+ m_fdc_pt = &m_floppy[m_track_size*(2*m_fdc_phys_track+m_fdc_track_side) + (m_track_size - m_fdc_span)];
+ break;
+ default:
+ break;
+ }
+}
+
READ16_MEMBER( segas24_state::fdc_r )
{
if(!m_track_size)
@@ -445,21 +459,26 @@ WRITE16_MEMBER( segas24_state::fdc_w )
m_fdc_status = m_fdc_track ? 0 : 4;
break;
case 0x9:
- FDC_LOG(("Read multiple [%02x] %d..%d side %d track %d\n", data, m_fdc_sector, m_fdc_sector+m_fdc_data-1, data & 8 ? 1 : 0, m_fdc_phys_track));
- m_fdc_pt = &m_floppy[m_track_size*(2*m_fdc_phys_track+(data & 8 ? 1 : 0))];
+ m_fdc_track_side = (data & 8 ? 1 : 0);
+ m_fdc_mode = 0x9;
+ FDC_LOG(("Read multiple [%02x] %d..%d side %d track %d\n", data, m_fdc_sector, m_fdc_sector+m_fdc_data-1, m_fdc_track_side, m_fdc_phys_track));
+ m_fdc_pt = &m_floppy[m_track_size*(2*m_fdc_phys_track+m_fdc_track_side)];
m_fdc_span = m_track_size;
m_fdc_status = 3;
m_fdc_drq = true;
m_fdc_data = *m_fdc_pt;
break;
case 0xb:
- FDC_LOG(("Write multiple [%02x] %d..%d side %d track %d\n", data, m_fdc_sector, m_fdc_sector+m_fdc_data-1, data & 8 ? 1 : 0, m_fdc_phys_track));
- m_fdc_pt = &m_floppy[m_track_size*(2*m_fdc_phys_track+(data & 8 ? 1 : 0))];
+ m_fdc_track_side = (data & 8 ? 1 : 0);
+ m_fdc_mode = 0xb;
+ FDC_LOG(("Write multiple [%02x] %d..%d side %d track %d\n", data, m_fdc_sector, m_fdc_sector+m_fdc_data-1, m_fdc_track_side, m_fdc_phys_track));
+ m_fdc_pt = &m_floppy[m_track_size*(2*m_fdc_phys_track+m_fdc_track_side)];
m_fdc_span = m_track_size;
m_fdc_status = 3;
m_fdc_drq = true;
break;
case 0xd:
+ m_fdc_mode = 0xd;
FDC_LOG(("FDC: Forced interrupt\n"));
m_fdc_span = 0;
m_fdc_drq = false;
@@ -661,22 +680,20 @@ void segas24_state::reset_bank()
{
if (m_romboard != nullptr)
{
- membank("bank1")->set_entry(m_curbank & 15);
- membank("bank2")->set_entry(m_curbank & 15);
+ m_rombank[0]->set_entry(m_curbank & 15);
+ m_rombank[1]->set_entry(m_curbank & 15);
}
}
-READ16_MEMBER( segas24_state::curbank_r )
+READ8_MEMBER( segas24_state::curbank_r )
{
return m_curbank;
}
-WRITE16_MEMBER( segas24_state::curbank_w )
+WRITE8_MEMBER( segas24_state::curbank_w )
{
- if(ACCESSING_BITS_0_7) {
- m_curbank = data & 0xff;
- reset_bank();
- }
+ m_curbank = data;
+ reset_bank();
}
READ8_MEMBER( segas24_state::frc_mode_r )
@@ -719,33 +736,29 @@ const uint8_t segas24_state::s_quizmeku_mlt[8] = { 0, 3, 2, 4, 6, 1, 7, 5 };
const uint8_t segas24_state::s_dcclub_mlt[8] = { 4, 7, 3, 0, 2, 6, 5, 1 };
-READ16_MEMBER( segas24_state::mlatch_r )
+READ8_MEMBER( segas24_state::mlatch_r )
{
return m_mlatch;
}
-WRITE16_MEMBER( segas24_state::mlatch_w )
+WRITE8_MEMBER( segas24_state::mlatch_w )
{
- if(ACCESSING_BITS_0_7) {
- int i;
- uint8_t mxor = 0;
- if(!m_mlatch_table) {
- logerror("Protection: magic latch accessed but no table loaded %s\n", machine().describe_context());
- return;
- }
-
- data &= 0xff;
+ int i;
+ uint8_t mxor = 0;
+ if(!m_mlatch_table) {
+ logerror("Protection: magic latch accessed but no table loaded %s\n", machine().describe_context());
+ return;
+ }
- if(data != 0xff) {
- for(i=0; i<8; i++)
- if(m_mlatch & (1<<i))
- mxor |= 1 << m_mlatch_table[i];
- m_mlatch = data ^ mxor;
- logerror("Magic latching %02x ^ %02x as %02x %s\n", data & 0xff, mxor, m_mlatch, machine().describe_context());
- } else {
- logerror("Magic latch reset %s\n", machine().describe_context());
- m_mlatch = 0x00;
- }
+ if(data != 0xff) {
+ for(i=0; i<8; i++)
+ if(m_mlatch & (1<<i))
+ mxor |= 1 << m_mlatch_table[i];
+ m_mlatch = data ^ mxor;
+ logerror("Magic latching %02x ^ %02x as %02x %s\n", data & 0xff, mxor, m_mlatch, machine().describe_context());
+ } else {
+ logerror("Magic latch reset %s\n", machine().describe_context());
+ m_mlatch = 0x00;
}
}
@@ -972,16 +985,16 @@ WRITE_LINE_MEMBER(segas24_state::irq_ym)
// 315-5242
-READ16_MEMBER( segas24_state::sys16_paletteram_r )
+READ16_MEMBER( segas24_state::paletteram_r )
{
- return m_generic_paletteram_16[offset];
+ return m_paletteram[offset];
}
-WRITE16_MEMBER( segas24_state::sys16_paletteram_w )
+WRITE16_MEMBER( segas24_state::paletteram_w )
{
int r, g, b;
- COMBINE_DATA (m_generic_paletteram_16 + offset);
- data = m_generic_paletteram_16[offset];
+ COMBINE_DATA (m_paletteram + offset);
+ data = m_paletteram[offset];
r = (data & 0x00f) << 4;
if(data & 0x1000)
@@ -1036,7 +1049,7 @@ fc-ff ramhi
/*************************************
*
- * CPU 1 memory handlers
+ * Shared memory handlers
*
*************************************/
@@ -1063,9 +1076,8 @@ fc-ff ramhi
*/
-void segas24_state::system24_cpu1_map(address_map &map)
+void segas24_state::common_map(address_map &map)
{
- map(0x000000, 0x03ffff).mirror(0x040000).rom().region("maincpu", 0);
map(0x080000, 0x0bffff).mirror(0x040000).ram().share("share1");
map(0x100000, 0x13ffff).mirror(0x0c0000).rom().region("maincpu", 0);
map(0x200000, 0x20ffff).mirror(0x110000).rw("tile", FUNC(segas24_tile_device::tile_r), FUNC(segas24_tile_device::tile_w));
@@ -1074,7 +1086,7 @@ void segas24_state::system24_cpu1_map(address_map &map)
map(0x260000, 0x260001).mirror(0x10fffe).nopw(); /* Frame trigger position (XVOUT) */
map(0x270000, 0x270001).mirror(0x10fffe).nopw(); /* Synchronization mode */
map(0x280000, 0x29ffff).mirror(0x160000).rw("tile", FUNC(segas24_tile_device::char_r), FUNC(segas24_tile_device::char_w));
- map(0x400000, 0x403fff).mirror(0x1f8000).rw(FUNC(segas24_state::sys16_paletteram_r), FUNC(segas24_state::sys16_paletteram_w)).share("paletteram");
+ map(0x400000, 0x403fff).mirror(0x1f8000).rw(FUNC(segas24_state::paletteram_r), FUNC(segas24_state::paletteram_w)).share("paletteram");
map(0x404000, 0x40401f).mirror(0x1fbfe0).rw("mixer", FUNC(segas24_mixer_device::read), FUNC(segas24_mixer_device::write));
map(0x600000, 0x63ffff).mirror(0x180000).rw("sprite", FUNC(segas24_sprite_device::read), FUNC(segas24_sprite_device::write));
map(0x800000, 0x80003f).mirror(0x1ffe00).rw("io", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
@@ -1083,29 +1095,31 @@ void segas24_state::system24_cpu1_map(address_map &map)
map(0xa00000, 0xa00007).mirror(0x0ffff8).rw(FUNC(segas24_state::irq_r), FUNC(segas24_state::irq_w));
map(0xb00000, 0xb00007).mirror(0x07fff0).rw(FUNC(segas24_state::fdc_r), FUNC(segas24_state::fdc_w));
map(0xb00008, 0xb0000f).mirror(0x07fff0).rw(FUNC(segas24_state::fdc_status_r), FUNC(segas24_state::fdc_ctrl_w));
- map(0xb80000, 0xbbffff).bankr("bank1");
- map(0xbc0000, 0xbc0001).mirror(0x03fff8).rw(FUNC(segas24_state::curbank_r), FUNC(segas24_state::curbank_w));
map(0xbc0003, 0xbc0003).mirror(0x03fff8).rw(FUNC(segas24_state::frc_mode_r), FUNC(segas24_state::frc_mode_w));
map(0xbc0005, 0xbc0005).mirror(0x03fff8).rw(FUNC(segas24_state::frc_r), FUNC(segas24_state::frc_w));
- map(0xbc0006, 0xbc0007).mirror(0x03fff8).rw(FUNC(segas24_state::mlatch_r), FUNC(segas24_state::mlatch_w));
- map(0xc80000, 0xcbffff).bankr("bank2");
- map(0xcc0000, 0xcc0001).mirror(0x03fff8).rw(FUNC(segas24_state::curbank_r), FUNC(segas24_state::curbank_w));
+ map(0xbc0007, 0xbc0007).mirror(0x03fff8).rw(FUNC(segas24_state::mlatch_r), FUNC(segas24_state::mlatch_w));
map(0xcc0003, 0xcc0003).mirror(0x03fff8).rw(FUNC(segas24_state::frc_mode_r), FUNC(segas24_state::frc_mode_w));
map(0xcc0005, 0xcc0005).mirror(0x03fff8).rw(FUNC(segas24_state::frc_r), FUNC(segas24_state::frc_w));
- map(0xcc0006, 0xcc0007).mirror(0x03fff8).rw(FUNC(segas24_state::mlatch_r), FUNC(segas24_state::mlatch_w));
+ map(0xcc0007, 0xcc0007).mirror(0x03fff8).rw(FUNC(segas24_state::mlatch_r), FUNC(segas24_state::mlatch_w));
map(0xf00000, 0xf3ffff).mirror(0x040000).ram().share("subcpu");
map(0xf80000, 0xfbffff).mirror(0x040000).ram().share("share1");
}
-void segas24_state::roughrac_cpu1_map(address_map &map)
+void segas24_state::rombd_common_map(address_map &map)
+{
+ map(0xb80000, 0xbbffff).bankr("rombank1");
+ map(0xbc0001, 0xbc0001).mirror(0x03fff8).rw(FUNC(segas24_state::curbank_r), FUNC(segas24_state::curbank_w));
+ map(0xc80000, 0xcbffff).bankr("rombank2");
+ map(0xcc0001, 0xcc0001).mirror(0x03fff8).rw(FUNC(segas24_state::curbank_r), FUNC(segas24_state::curbank_w));
+}
+
+void segas24_state::roughrac_common_map(address_map &map)
{
- system24_cpu1_map(map);
map(0xc00000, 0xc00007).mirror(0x07ffe0).r("upd4701", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
}
-void segas24_state::hotrod_cpu1_map(address_map &map)
+void segas24_state::hotrod_common_map(address_map &map)
{
- system24_cpu1_map(map);
map(0xc00000, 0xc00007).mirror(0x07ffe0).r("upd1", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
map(0xc00008, 0xc0000f).mirror(0x07ffe0).r("upd2", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
map(0xc00011, 0xc00011).mirror(0x07ffec).rw("adc1", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::select_w));
@@ -1113,6 +1127,36 @@ void segas24_state::hotrod_cpu1_map(address_map &map)
}
+/*************************************
+ *
+ * CPU 1 memory handlers
+ *
+ *************************************/
+
+void segas24_state::cpu1_map(address_map &map)
+{
+ common_map(map);
+ map(0x000000, 0x03ffff).mirror(0x040000).rom().region("maincpu", 0);
+}
+
+void segas24_state::rombd_cpu1_map(address_map &map)
+{
+ cpu1_map(map);
+ rombd_common_map(map);
+}
+
+void segas24_state::roughrac_cpu1_map(address_map &map)
+{
+ cpu1_map(map);
+ roughrac_common_map(map);
+}
+
+void segas24_state::hotrod_cpu1_map(address_map &map)
+{
+ cpu1_map(map);
+ hotrod_common_map(map);
+}
+
/*************************************
*
@@ -1120,53 +1164,28 @@ void segas24_state::hotrod_cpu1_map(address_map &map)
*
*************************************/
-void segas24_state::system24_cpu2_map(address_map &map)
+void segas24_state::cpu2_map(address_map &map)
{
+ common_map(map);
map(0x000000, 0x03ffff).mirror(0x040000).ram().share("subcpu");
- map(0x080000, 0x0bffff).mirror(0x040000).ram().share("share1");
- map(0x100000, 0x13ffff).mirror(0x0c0000).rom().region("maincpu", 0);
- map(0x200000, 0x20ffff).mirror(0x110000).rw("tile", FUNC(segas24_tile_device::tile_r), FUNC(segas24_tile_device::tile_w));
- map(0x220000, 0x220001).mirror(0x11fffe).nopw(); /* Horizontal split position (ABSEL) */
- map(0x240000, 0x240001).mirror(0x11fffe).nopw(); /* Scanline trigger position (XHOUT) */
- map(0x260000, 0x260001).mirror(0x10fffe).nopw(); /* Frame trigger position (XVOUT) */
- map(0x270000, 0x270001).mirror(0x10fffe).nopw(); /* Synchronization mode */
- map(0x280000, 0x29ffff).mirror(0x160000).rw("tile", FUNC(segas24_tile_device::char_r), FUNC(segas24_tile_device::char_w));
- map(0x400000, 0x403fff).mirror(0x1f8000).rw(FUNC(segas24_state::sys16_paletteram_r), FUNC(segas24_state::sys16_paletteram_w)).share("paletteram");
- map(0x404000, 0x40401f).mirror(0x1fbfe0).rw("mixer", FUNC(segas24_mixer_device::read), FUNC(segas24_mixer_device::write));
- map(0x600000, 0x63ffff).mirror(0x180000).rw("sprite", FUNC(segas24_sprite_device::read), FUNC(segas24_sprite_device::write));
- map(0x800000, 0x80003f).mirror(0x1ffe00).rw("io", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
- map(0x800040, 0x80007f).mirror(0x1ffe00).rw(FUNC(segas24_state::iod_r), FUNC(segas24_state::iod_w));
- map(0x800100, 0x800103).mirror(0x1ffe00).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0x00ff);
- map(0xa00000, 0xa00007).mirror(0x0ffff8).rw(FUNC(segas24_state::irq_r), FUNC(segas24_state::irq_w));
- map(0xb00000, 0xb00007).mirror(0x07fff0).rw(FUNC(segas24_state::fdc_r), FUNC(segas24_state::fdc_w));
- map(0xb00008, 0xb0000f).mirror(0x07fff0).rw(FUNC(segas24_state::fdc_status_r), FUNC(segas24_state::fdc_ctrl_w));
- map(0xb80000, 0xbbffff).bankr("bank1");
- map(0xbc0000, 0xbc0001).mirror(0x03fff8).rw(FUNC(segas24_state::curbank_r), FUNC(segas24_state::curbank_w));
- map(0xbc0003, 0xbc0003).mirror(0x03fff8).rw(FUNC(segas24_state::frc_mode_r), FUNC(segas24_state::frc_mode_w));
- map(0xbc0005, 0xbc0005).mirror(0x03fff8).rw(FUNC(segas24_state::frc_r), FUNC(segas24_state::frc_w));
- map(0xbc0006, 0xbc0007).mirror(0x03fff8).rw(FUNC(segas24_state::mlatch_r), FUNC(segas24_state::mlatch_w));
- map(0xc80000, 0xcbffff).bankr("bank2");
- map(0xcc0000, 0xcc0001).mirror(0x03fff8).rw(FUNC(segas24_state::curbank_r), FUNC(segas24_state::curbank_w));
- map(0xcc0003, 0xcc0003).mirror(0x03fff8).rw(FUNC(segas24_state::frc_mode_r), FUNC(segas24_state::frc_mode_w));
- map(0xcc0005, 0xcc0005).mirror(0x03fff8).rw(FUNC(segas24_state::frc_r), FUNC(segas24_state::frc_w));
- map(0xcc0006, 0xcc0007).mirror(0x03fff8).rw(FUNC(segas24_state::mlatch_r), FUNC(segas24_state::mlatch_w));
- map(0xf00000, 0xf3ffff).mirror(0x040000).ram().share("subcpu");
- map(0xf80000, 0xfbffff).mirror(0x040000).ram().share("share1");
+}
+
+void segas24_state::rombd_cpu2_map(address_map &map)
+{
+ cpu2_map(map);
+ rombd_common_map(map);
}
void segas24_state::roughrac_cpu2_map(address_map &map)
{
- system24_cpu2_map(map);
- map(0xc00000, 0xc00007).mirror(0x07ffe0).r("upd4701", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
+ cpu2_map(map);
+ roughrac_common_map(map);
}
void segas24_state::hotrod_cpu2_map(address_map &map)
{
- system24_cpu2_map(map);
- map(0xc00000, 0xc00007).mirror(0x07ffe0).r("upd1", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
- map(0xc00008, 0xc0000f).mirror(0x07ffe0).r("upd2", FUNC(upd4701_device::read_xy)).umask16(0x00ff);
- map(0xc00011, 0xc00011).mirror(0x07ffec).rw("adc1", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::select_w));
- map(0xc00013, 0xc00013).mirror(0x07ffec).rw("adc2", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::select_w));
+ cpu2_map(map);
+ hotrod_common_map(map);
}
void segas24_state::decrypted_opcodes_map(address_map &map)
@@ -1182,15 +1201,48 @@ void segas24_state::decrypted_opcodes_map(address_map &map)
void segas24_state::machine_start()
{
+ if ((m_romboard != nullptr) && (m_rombank[0] != nullptr) && (m_rombank[1] != nullptr))
+ {
+ uint8_t *usr1 = m_romboard->base();
+ m_rombank[0]->configure_entries(0, 16, usr1, 0x40000);
+ m_rombank[1]->configure_entries(0, 16, usr1, 0x40000);
+
+ save_item(NAME(m_curbank));
+ }
+
if (m_track_size)
+ {
subdevice<nvram_device>("floppy_nvram")->set_base(&m_floppy[0], 2*m_track_size);
- if (m_romboard != nullptr)
- {
- uint8_t *usr1 = m_romboard->base();
- membank("bank1")->configure_entries(0, 16, usr1, 0x40000);
- membank("bank2")->configure_entries(0, 16, usr1, 0x40000);
+ save_item(NAME(m_fdc_track_side));
+ save_item(NAME(m_fdc_mode));
+ save_item(NAME(m_fdc_status));
+ save_item(NAME(m_fdc_track));
+ save_item(NAME(m_fdc_sector));
+ save_item(NAME(m_fdc_data));
+ save_item(NAME(m_fdc_phys_track));
+ save_item(NAME(m_fdc_irq));
+ save_item(NAME(m_fdc_drq));
+ save_item(NAME(m_fdc_span));
+ save_item(NAME(m_fdc_index_count));
}
+
+ save_item(NAME(m_mlatch));
+
+ save_item(NAME(m_irq_tdata));
+ save_item(NAME(m_irq_tval));
+ save_item(NAME(m_irq_tmode));
+ save_item(NAME(m_irq_allow0));
+ save_item(NAME(m_irq_allow1));
+ save_item(NAME(m_irq_timer_pend0));
+ save_item(NAME(m_irq_timer_pend1));
+ save_item(NAME(m_irq_yms));
+ save_item(NAME(m_irq_vblank));
+ save_item(NAME(m_irq_sprite));
+
+ save_item(NAME(m_frc_mode));
+
+ save_item(NAME(m_cnt1));
}
void segas24_state::machine_reset()
@@ -1198,12 +1250,15 @@ void segas24_state::machine_reset()
m_subcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
m_cnt1 = true;
fdc_init();
- m_curbank = 0;
- reset_bank();
irq_init();
m_mlatch = 0x00;
m_frc_mode = 0;
m_frc_cnt_timer->reset();
+ if ((m_romboard != nullptr) && (m_rombank[0] != nullptr) && (m_rombank[1] != nullptr))
+ {
+ m_curbank = 0;
+ reset_bank();
+ }
}
/*************************************
@@ -1864,12 +1919,12 @@ INPUT_PORTS_END
MACHINE_CONFIG_START(segas24_state::system24)
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, MASTER_CLOCK/2)
- MCFG_DEVICE_PROGRAM_MAP(system24_cpu1_map)
+ M68000(config, m_maincpu, MASTER_CLOCK/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::cpu1_map);
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", segas24_state, irq_vbl, "screen", 0, 1)
- MCFG_DEVICE_ADD("subcpu", M68000, MASTER_CLOCK/2)
- MCFG_DEVICE_PROGRAM_MAP(system24_cpu2_map)
+ M68000(config, m_subcpu, MASTER_CLOCK/2);
+ m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::cpu2_map);
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
@@ -1898,7 +1953,7 @@ MACHINE_CONFIG_START(segas24_state::system24)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK/2, 656, 0/*+69*/, 496/*+69*/, 424, 0/*+25*/, 384/*+25*/)
- MCFG_SCREEN_UPDATE_DRIVER(segas24_state, screen_update_system24)
+ MCFG_SCREEN_UPDATE_DRIVER(segas24_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 8192*2)
@@ -1916,9 +1971,16 @@ MACHINE_CONFIG_START(segas24_state::system24)
MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
MACHINE_CONFIG_END
-void segas24_state::mahmajn(machine_config &config)
+void segas24_state::system24_rom(machine_config &config)
{
system24(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu1_map);
+ m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu2_map);
+}
+
+void segas24_state::mahmajn(machine_config &config)
+{
+ system24_rom(config);
sega_315_5296_device &io(*subdevice<sega_315_5296_device>("io"));
io.in_pa_callback().set(FUNC(segas24_state::mahmajn_input_line_r));
io.in_pc_callback().set(FUNC(segas24_state::mahmajn_inputs_r));
@@ -1931,12 +1993,17 @@ void segas24_state::system24_floppy(machine_config &config)
NVRAM(config, "floppy_nvram", nvram_device::DEFAULT_NONE);
}
+void segas24_state::system24_floppy_rom(machine_config &config)
+{
+ system24_floppy(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu1_map);
+ m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu2_map);
+}
+
MACHINE_CONFIG_START(segas24_state::system24_floppy_hotrod)
system24_floppy(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(hotrod_cpu1_map)
- MCFG_DEVICE_MODIFY("subcpu")
- MCFG_DEVICE_PROGRAM_MAP(hotrod_cpu2_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::hotrod_cpu1_map);
+ m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::hotrod_cpu2_map);
upd4701_device &upd1(UPD4701A(config, "upd1")); // IC4 on 834-6510 I/O board
upd1.set_portx_tag("DIAL1");
@@ -1955,19 +2022,18 @@ MACHINE_CONFIG_START(segas24_state::system24_floppy_hotrod)
MCFG_DEVICE_ADD("adc2", MSM6253, 0) // IC2 - 33k/33p R/C clock
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(segas24_state::system24_floppy_fd1094)
+void segas24_state::system24_floppy_fd1094(machine_config &config)
+{
system24_floppy(config);
- MCFG_DEVICE_REPLACE("subcpu", FD1094, MASTER_CLOCK/2)
- MCFG_DEVICE_PROGRAM_MAP(system24_cpu2_map)
- MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
-MACHINE_CONFIG_END
+ FD1094(config.replace(), m_subcpu, MASTER_CLOCK/2);
+ m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::cpu2_map);
+ m_subcpu->set_addrmap(AS_OPCODES, &segas24_state::decrypted_opcodes_map);
+}
MACHINE_CONFIG_START(segas24_state::system24_floppy_fd_upd)
system24_floppy_fd1094(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(roughrac_cpu1_map)
- MCFG_DEVICE_MODIFY("subcpu")
- MCFG_DEVICE_PROGRAM_MAP(roughrac_cpu2_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::roughrac_cpu1_map);
+ m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::roughrac_cpu2_map);
upd4701_device &upd4701(UPD4701A(config, "upd4701")); // IC4 on 834-6510 I/O board
upd4701.set_portx_tag("DIAL1");
@@ -1976,7 +2042,7 @@ MACHINE_CONFIG_END
void segas24_state::dcclub(machine_config &config)
{
- system24(config);
+ system24_rom(config);
sega_315_5296_device &io(*subdevice<sega_315_5296_device>("io"));
io.in_pa_callback().set(FUNC(segas24_state::dcclub_p1_r));
io.in_pc_callback().set(FUNC(segas24_state::dcclub_p3_r));
@@ -2368,6 +2434,7 @@ void segas24_state::init_mahmajn()
m_mlatch_table = s_mahmajn_mlt;
m_track_size = 0;
m_cur_input_line = 0;
+ save_item(NAME(m_cur_input_line));
}
void segas24_state::init_mahmajn2()
@@ -2375,6 +2442,7 @@ void segas24_state::init_mahmajn2()
m_mlatch_table = s_mahmajn2_mlt;
m_track_size = 0;
m_cur_input_line = 0;
+ save_item(NAME(m_cur_input_line));
}
void segas24_state::init_hotrod()
@@ -2484,17 +2552,17 @@ void segas24_state::init_roughrac()
/* 05 */GAME( 1989, sgmastc, sgmast, system24_floppy_fd1094, sgmast, segas24_state, init_sgmast, ROT0, "Sega", "Jumbo Ozaki Super Masters Golf (World, Floppy Based, FD1094 317-0058-05c)", MACHINE_IMPERFECT_GRAPHICS ) // some gfx offset / colour probs?
/* 05 */GAME( 1989, sgmastj, sgmast, system24_floppy_fd_upd, sgmastj, segas24_state, init_sgmast, ROT0, "Sega", "Jumbo Ozaki Super Masters Golf (Japan, Floppy Based, FD1094 317-0058-05b)", MACHINE_IMPERFECT_GRAPHICS ) // some gfx offset / colour probs?
/* 06 */GAME( 1990, roughrac, 0, system24_floppy_fd_upd, roughrac, segas24_state, init_roughrac, ROT0, "Sega", "Rough Racer (Japan, Floppy Based, FD1094 317-0058-06b)", 0 )
-/* 07 */GAME( 1990, bnzabros, 0, system24_floppy, bnzabros, segas24_state, init_bnzabros, ROT0, "Sega", "Bonanza Bros (US, Floppy DS3-5000-07d? Based)", 0 )
-/* 07 */GAME( 1990, bnzabrosj, bnzabros, system24_floppy, bnzabros, segas24_state, init_bnzabros, ROT0, "Sega", "Bonanza Bros (Japan, Floppy DS3-5000-07b Based)", 0 )
+/* 07 */GAME( 1990, bnzabros, 0, system24_floppy_rom, bnzabros, segas24_state, init_bnzabros, ROT0, "Sega", "Bonanza Bros (US, Floppy DS3-5000-07d? Based)", 0 )
+/* 07 */GAME( 1990, bnzabrosj, bnzabros, system24_floppy_rom, bnzabros, segas24_state, init_bnzabros, ROT0, "Sega", "Bonanza Bros (Japan, Floppy DS3-5000-07b Based)", 0 )
/* 08 */GAME( 1991, qsww, 0, system24_floppy_fd1094, qsww, segas24_state, init_qsww, ROT0, "Sega", "Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b)", MACHINE_IMPERFECT_GRAPHICS ) // wrong bg colour on title
/* 09 */GAME( 1991, dcclubfd, dcclub, system24_floppy_dcclub, dcclub, segas24_state, init_dcclubfd, ROT0, "Sega", "Dynamic Country Club (US, Floppy Based, FD1094 317-0058-09d)", 0 )
-// YEAR NAME PARENT MACHINE INPUT CLASS INIT MONITOR COMPANY FULLNAME FLAGS
+// YEAR NAME PARENT MACHINE INPUT CLASS INIT MONITOR COMPANY FULLNAME FLAGS
/* ROM Based */
-GAME( 1991, dcclub, 0, dcclub, dcclub, segas24_state, init_dcclub, ROT0, "Sega", "Dynamic Country Club (World, ROM Based)", 0 )
-GAME( 1991, dcclubj, dcclub, dcclub, dcclub, segas24_state, init_dcclub, ROT0, "Sega", "Dynamic Country Club (Japan, ROM Based)", 0 )
-GAME( 1991, qrouka, 0, system24, qrouka, segas24_state, init_qrouka, ROT0, "Sega", "Quiz Rouka Ni Tattenasai (Japan, ROM Based)", 0 )
-GAME( 1992, quizmeku, 0, system24, quizmeku, segas24_state, init_quizmeku, ROT0, "Sega", "Quiz Mekurumeku Story (Japan, ROM Based)", 0 ) /* Released in 05.1993 */
-GAME( 1992, mahmajn, 0, mahmajn, mahmajn, segas24_state, init_mahmajn, ROT0, "Sega", "Tokoro San no MahMahjan (Japan, ROM Based)", 0 )
-GAME( 1994, qgh, 0, system24, qgh, segas24_state, init_qgh, ROT0, "Sega", "Quiz Ghost Hunter (Japan, ROM Based)", 0 )
-GAME( 1994, mahmajn2, 0, mahmajn, mahmajn, segas24_state, init_mahmajn2, ROT0, "Sega", "Tokoro San no MahMahjan 2 (Japan, ROM Based)", 0 )
+GAME( 1991, dcclub, 0, dcclub, dcclub, segas24_state, init_dcclub, ROT0, "Sega", "Dynamic Country Club (World, ROM Based)", 0 )
+GAME( 1991, dcclubj, dcclub, dcclub, dcclub, segas24_state, init_dcclub, ROT0, "Sega", "Dynamic Country Club (Japan, ROM Based)", 0 )
+GAME( 1991, qrouka, 0, system24_rom, qrouka, segas24_state, init_qrouka, ROT0, "Sega", "Quiz Rouka Ni Tattenasai (Japan, ROM Based)", 0 )
+GAME( 1992, quizmeku, 0, system24_rom, quizmeku, segas24_state, init_quizmeku, ROT0, "Sega", "Quiz Mekurumeku Story (Japan, ROM Based)", 0 ) /* Released in 05.1993 */
+GAME( 1992, mahmajn, 0, mahmajn, mahmajn, segas24_state, init_mahmajn, ROT0, "Sega", "Tokoro San no MahMahjan (Japan, ROM Based)", 0 )
+GAME( 1994, qgh, 0, system24_rom, qgh, segas24_state, init_qgh, ROT0, "Sega", "Quiz Ghost Hunter (Japan, ROM Based)", 0 )
+GAME( 1994, mahmajn2, 0, mahmajn, mahmajn, segas24_state, init_mahmajn2, ROT0, "Sega", "Tokoro San no MahMahjan 2 (Japan, ROM Based)", 0 )