diff options
Diffstat (limited to 'src/mame/drivers/namcona1.cpp')
-rw-r--r-- | src/mame/drivers/namcona1.cpp | 107 |
1 files changed, 64 insertions, 43 deletions
diff --git a/src/mame/drivers/namcona1.cpp b/src/mame/drivers/namcona1.cpp index 043732a1d09..a093999e048 100644 --- a/src/mame/drivers/namcona1.cpp +++ b/src/mame/drivers/namcona1.cpp @@ -730,6 +730,8 @@ void namcona1_state::machine_start() save_item(NAME(m_mcu_port5)); save_item(NAME(m_mcu_port6)); save_item(NAME(m_mcu_port8)); + + m_scan_timer = timer_alloc(TIMER_SCANLINE); } // the MCU boots the 68000 @@ -739,6 +741,8 @@ void namcona1_state::machine_reset() m_mcu_port4 = 0; m_mcu_port5 = 1; + + m_scan_timer->adjust(m_screen->scan_period(), 0, m_screen->scan_period()); } // each bit of player 3's inputs is split across one of the 8 analog input ports @@ -931,9 +935,8 @@ GFXDECODE_END // IRQ 1 => // IRQ 2 => -TIMER_DEVICE_CALLBACK_MEMBER(namcona1_state::interrupt) +void namcona1_state::scanline_interrupt(int scanline) { - int scanline = param; int enabled = m_mEnableInterrupts ? ~m_vreg[0x1a/2] : 0; // adc (timing guessed, when does this trigger?) @@ -960,35 +963,41 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcona1_state::interrupt) } } -/* cropped at sides */ -MACHINE_CONFIG_START(namcona1_state::namcona1) - - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, MASTER_CLOCK/4) - MCFG_DEVICE_PROGRAM_MAP(namcona1_main_map) - - MCFG_DEVICE_ADD("mcu", NAMCO_C69, MASTER_CLOCK/4) - MCFG_DEVICE_PROGRAM_MAP(namcona1_mcu_map) - MCFG_DEVICE_IO_MAP( namcona1_mcu_io_map) +void namcona1_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + if (id == TIMER_SCANLINE) + { + scanline_interrupt(m_screen->vpos()); + } +} - MCFG_TIMER_DRIVER_ADD_SCANLINE("scan_main", namcona1_state, interrupt, "screen", 0, 1) +void namcona1_state::c69(machine_config &config) +{ + NAMCO_C69(config, m_mcu, MASTER_CLOCK/4); + m_mcu->set_addrmap(AS_PROGRAM, &namcona1_state::namcona1_mcu_map); + m_mcu->set_addrmap(AS_IO, &namcona1_state::namcona1_mcu_io_map); +} - MCFG_EEPROM_2816_ADD("eeprom") +/* cropped at sides */ +void namcona1_state::namcona_base(machine_config &config) +{ + /* basic machine hardware */ + M68000(config, m_maincpu, MASTER_CLOCK/4); + m_maincpu->set_addrmap(AS_PROGRAM, &namcona1_state::namcona1_main_map); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(40*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(8, 38*8-1-8, 4*8, 32*8-1) - MCFG_SCREEN_VISIBLE_AREA(0, 38*8-1, 4*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(namcona1_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + m_screen->set_size(40*8, 32*8); +// m_screen->set_visarea(8, 38*8-1-8, 4*8, 32*8-1); + m_screen->set_visarea(0, 38*8-1, 4*8, 32*8-1); + m_screen->set_screen_update(FUNC(namcona1_state::screen_update)); + m_screen->set_palette("palette"); - MCFG_PALETTE_ADD("palette", 0x2000) - MCFG_PALETTE_ENABLE_SHADOWS() + PALETTE(config, m_palette, 0x2000).enable_shadows(); - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_namcona1) + GFXDECODE(config, m_gfxdecode, m_palette, gfx_namcona1); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); @@ -999,31 +1008,43 @@ MACHINE_CONFIG_START(namcona1_state::namcona1) m_c140->set_addrmap(0, &namcona1_state::namcona1_c140_map); m_c140->add_route(0, "rspeaker", 1.00); m_c140->add_route(1, "lspeaker", 1.00); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(namcona2_state::namcona2) - namcona1(config); +void namcona1_state::namcona1(machine_config &config) +{ + namcona_base(config); + c69(config); + EEPROM_2816(config, "eeprom"); +} - /* basic machine hardware */ -// MCFG_DEVICE_MODIFY("maincpu") -// MCFG_DEVICE_PROGRAM_MAP(namcona2_main_map) +void namcona2_state::c70(machine_config &config) +{ + NAMCO_C70(config, m_mcu, MASTER_CLOCK/4); + m_mcu->set_addrmap(AS_PROGRAM, &namcona1_state::namcona1_mcu_map); + m_mcu->set_addrmap(AS_IO, &namcona1_state::namcona1_mcu_io_map); +} - MCFG_DEVICE_REPLACE("mcu", NAMCO_C70, MASTER_CLOCK/4) - MCFG_DEVICE_PROGRAM_MAP(namcona1_mcu_map) - MCFG_DEVICE_IO_MAP( namcona1_mcu_io_map) -MACHINE_CONFIG_END +void namcona2_state::namcona2(machine_config &config) +{ + namcona_base(config); + c70(config); + EEPROM_2816(config, "eeprom"); + +// m_maincpu->set_addrmap(AS_PROGRAM, &namcona2_state::namcona2_main_map); +} -MACHINE_CONFIG_START(xday2_namcona2_state::xday2) - namcona2(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(xday2_main_map) +void xday2_namcona2_state::xday2(machine_config &config) +{ + namcona_base(config); + c70(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &xday2_namcona2_state::xday2_main_map); - MCFG_DEVICE_REMOVE("eeprom") - MCFG_EEPROM_2864_ADD("eeprom") + EEPROM_2864(config, "eeprom"); // TODO: unknown sub type - MCFG_DEVICE_ADD("rtc", MSM6242, XTAL(32'768)) -MACHINE_CONFIG_END + MSM6242(config,"rtc", XTAL(32'768)); +} /* NA-1 Hardware */ void namcona1_state::init_bkrtmaq() { m_gametype = NAMCO_BKRTMAQ; } |