From bfb64b04211097385c5b489be155db610215d395 Mon Sep 17 00:00:00 2001 From: Michael Zapf Date: Sat, 19 Oct 2013 23:48:20 +0000 Subject: [PATCH] Using new TMS9980/95 implementation. [Michael Zapf] --- src/mame/drivers/cosmic.c | 30 +++++-------------- src/mame/drivers/jpmsru.c | 22 ++++++++------ src/mame/drivers/jubilee.c | 18 +++++++---- src/mame/drivers/jvh.c | 24 ++++++++++----- src/mame/drivers/looping.c | 61 ++++++++++++++++++++++++++------------ 5 files changed, 93 insertions(+), 62 deletions(-) diff --git a/src/mame/drivers/cosmic.c b/src/mame/drivers/cosmic.c index 9202d26aa23..d87979bc86c 100644 --- a/src/mame/drivers/cosmic.c +++ b/src/mame/drivers/cosmic.c @@ -528,8 +528,7 @@ INPUT_PORTS_END INPUT_CHANGED_MEMBER(cosmic_state::cosmicg_coin_inserted) { - m_ic_state = 6; - m_maincpu->set_input_line(0, newval? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(INT_9980A_LEVEL4, newval? ASSERT_LINE : CLEAR_LINE); } static INPUT_PORTS_START( cosmicg ) @@ -988,11 +987,8 @@ MACHINE_RESET_MEMBER(cosmic_state,cosmicg) m_color_registers[0] = 0; m_color_registers[1] = 0; m_color_registers[2] = 0; - - // For TMS 9980 - m_ic_state = 0; // RESET - m_maincpu->set_input_line(0, ASSERT_LINE); - m_ic_state = 7; // CLEAR + m_maincpu->set_input_line(INT_9980A_RESET, ASSERT_LINE); + m_maincpu->set_input_line(INT_9980A_RESET, CLEAR_LINE); } static MACHINE_CONFIG_START( cosmic, cosmic_state ) @@ -1073,22 +1069,12 @@ static MACHINE_CONFIG_DERIVED( cosmica, cosmic ) MACHINE_CONFIG_END -/* - Will be called back from the CPU when triggering an interrupt. -*/ -READ8_MEMBER( cosmic_state::interrupt_level ) +static TMS9980A_CONFIG( cpuconf ) { - return m_ic_state; -} - -static TMS99xx_CONFIG( cpuconf ) -{ - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(cosmic_state, interrupt_level), + DEVCB_NULL, // External operation DEVCB_NULL, // Instruction acquisition DEVCB_NULL, // Clock out - DEVCB_NULL, // wait - DEVCB_NULL, // Hold acknowledge + DEVCB_NULL, // Hold acknowledge DEVCB_NULL // DBIN }; @@ -1599,8 +1585,8 @@ DRIVER_INIT_MEMBER(cosmic_state,panic) } -GAME( 1979, cosmicg, 0, cosmicg, cosmicg, cosmic_state, cosmicg, ROT270, "Universal", "Cosmic Guerilla", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL ) -GAME( 1979, cosmicgi, cosmicg, cosmicg, cosmicg, cosmic_state, cosmicg, ROT270, "bootleg (Inder)", "Cosmic Guerilla (Spanish bootleg)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL ) +GAME( 1979, cosmicg, 0, cosmicg, cosmicg, cosmic_state, cosmicg, ROT270, "Universal", "Cosmic Guerilla", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL /*| GAME_SUPPORTS_SAVE */) +GAME( 1979, cosmicgi, cosmicg, cosmicg, cosmicg, cosmic_state, cosmicg, ROT270, "bootleg (Inder)", "Cosmic Guerilla (Spanish bootleg)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL /*| GAME_SUPPORTS_SAVE */) GAME( 1979, cosmica, 0, cosmica, cosmica, cosmic_state, cosmica, ROT270, "Universal", "Cosmic Alien (version II)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) GAME( 1979, cosmica1, cosmica, cosmica, cosmica, cosmic_state, cosmica, ROT270, "Universal", "Cosmic Alien (first version)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) GAME( 1979, cosmica2, cosmica, cosmica, cosmica, cosmic_state, cosmica, ROT270, "Universal", "Cosmic Alien (early version II?)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/jpmsru.c b/src/mame/drivers/jpmsru.c index 138456eba93..1ad9b64fb7f 100644 --- a/src/mame/drivers/jpmsru.c +++ b/src/mame/drivers/jpmsru.c @@ -17,7 +17,7 @@ **********************************************************************/ #include "emu.h" -#include "cpu/tms9900/tms9900l.h" +#include "cpu/tms9900/tms9980a.h" class jpmsru_state : public driver_device { @@ -33,6 +33,7 @@ protected: required_device m_maincpu; public: DECLARE_DRIVER_INIT(jpmsru); + DECLARE_READ8_MEMBER( interrupt_level ); }; // blind guess @@ -60,18 +61,21 @@ ADDRESS_MAP_END static INPUT_PORTS_START( jpmsru ) INPUT_PORTS_END -static MACHINE_CONFIG_START( jpmsru, jpmsru_state ) - MCFG_CPU_ADD("maincpu", TMS9980L, MAIN_CLOCK) +static TMS9980A_CONFIG( cpuconf ) +{ + DEVCB_NULL, // External operation + DEVCB_NULL, // Instruction acquisition + DEVCB_NULL, // Clock out + DEVCB_NULL, // Hold acknowledge + DEVCB_NULL // DBIN +}; - MCFG_CPU_PROGRAM_MAP(jpmsru_map) - MCFG_CPU_IO_MAP(jpmsru_io) +static MACHINE_CONFIG_START( jpmsru, jpmsru_state ) + MCFG_TMS99xx_ADD("maincpu", TMS9980A, MAIN_CLOCK, jpmsru_map, jpmsru_io, cpuconf) MACHINE_CONFIG_END static MACHINE_CONFIG_START( jpmsru_4, jpmsru_state ) - MCFG_CPU_ADD("maincpu", TMS9980L, MAIN_CLOCK) - - MCFG_CPU_PROGRAM_MAP(jpmsru_4_map) - MCFG_CPU_IO_MAP(jpmsru_io) + MCFG_TMS99xx_ADD("maincpu", TMS9980A, MAIN_CLOCK, jpmsru_4_map, jpmsru_io, cpuconf) MACHINE_CONFIG_END DRIVER_INIT_MEMBER(jpmsru_state,jpmsru) diff --git a/src/mame/drivers/jubilee.c b/src/mame/drivers/jubilee.c index 4dad6b59af7..cf514c58931 100644 --- a/src/mame/drivers/jubilee.c +++ b/src/mame/drivers/jubilee.c @@ -86,7 +86,7 @@ #define MASTER_CLOCK XTAL_8MHz /* guess */ #include "emu.h" -#include "cpu/tms9900/tms9900l.h" +#include "cpu/tms9900/tms9980a.h" #include "video/mc6845.h" @@ -157,7 +157,8 @@ void jubilee_state::palette_init() INTERRUPT_GEN_MEMBER(jubilee_state::jubileep_interrupt) { /* doesn't seems to work properly. need to set level1 interrupts */ - device.execute().set_input_line_and_vector(0, ASSERT_LINE, 3);//2=nmi 3,4,5,6 + m_maincpu->set_input_line(INT_9980A_LEVEL1, ASSERT_LINE); + m_maincpu->set_input_line(INT_9980A_LEVEL1, CLEAR_LINE); } @@ -409,6 +410,15 @@ static MC6845_INTERFACE( mc6845_intf ) }; +static TMS9980A_CONFIG( cpuconf ) +{ + DEVCB_NULL, + DEVCB_NULL, // Instruction acquisition + DEVCB_NULL, // Clock out + DEVCB_NULL, // Hold acknowledge + DEVCB_NULL // DBIN +}; + /************************* * Machine Drivers * *************************/ @@ -416,9 +426,7 @@ static MC6845_INTERFACE( mc6845_intf ) static MACHINE_CONFIG_START( jubileep, jubilee_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS9980L, MASTER_CLOCK/2) /* guess */ - MCFG_CPU_PROGRAM_MAP(jubileep_map) - MCFG_CPU_IO_MAP(jubileep_cru_map) + MCFG_TMS99xx_ADD("maincpu", TMS9980A, MASTER_CLOCK/2, jubileep_map, jubileep_cru_map, cpuconf) MCFG_CPU_VBLANK_INT_DRIVER("screen", jubilee_state, jubileep_interrupt) /* video hardware */ diff --git a/src/mame/drivers/jvh.c b/src/mame/drivers/jvh.c index 97b51211285..43f92fce1b0 100644 --- a/src/mame/drivers/jvh.c +++ b/src/mame/drivers/jvh.c @@ -5,7 +5,7 @@ JVH : Escape, and Movie Masters ********************************************************************************/ #include "emu.h" -#include "cpu/tms9900/tms9900l.h" +#include "cpu/tms9900/tms9980a.h" #include "cpu/m6800/m6800.h" class jvh_state : public driver_device @@ -100,25 +100,35 @@ void jvh_state::machine_reset() { } +static TMS9980A_CONFIG( cpuconf ) +{ + DEVCB_NULL, // External operation + DEVCB_NULL, // Instruction acquisition + DEVCB_NULL, // Clock out + DEVCB_NULL, // Hold acknowledge + DEVCB_NULL // DBIN +}; + DRIVER_INIT_MEMBER(jvh_state,jvh) { } static MACHINE_CONFIG_START( jvh, jvh_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS9980L, 1000000) - MCFG_CPU_PROGRAM_MAP(jvh_map) - MCFG_CPU_IO_MAP(escape_io) + MCFG_TMS99xx_ADD("maincpu", TMS9980A, 1000000, jvh_map, escape_io, cpuconf) MCFG_CPU_ADD("cpu2", M6800, 1000000) MCFG_CPU_PROGRAM_MAP(jvh_sub_map) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( jvh2, jvh ) - MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_IO_MAP(movmastr_io) +static MACHINE_CONFIG_START( jvh2, jvh_state ) + /* basic machine hardware */ + MCFG_TMS99xx_ADD("maincpu", TMS9980A, 1000000, jvh_map, movmastr_io, cpuconf) + MCFG_CPU_ADD("cpu2", M6800, 1000000) + MCFG_CPU_PROGRAM_MAP(jvh_sub_map) MACHINE_CONFIG_END + /*------------------------------------------------------------------- / Escape /-------------------------------------------------------------------*/ diff --git a/src/mame/drivers/looping.c b/src/mame/drivers/looping.c index 9a0c28e3566..8f7c28b0970 100644 --- a/src/mame/drivers/looping.c +++ b/src/mame/drivers/looping.c @@ -53,7 +53,8 @@ L056-6 9A " " VLI-8-4 7A " */ #include "emu.h" -#include "cpu/tms9900/tms9900l.h" +#include "cpu/tms9900/tms9995.h" +#include "cpu/tms9900/tms9980a.h" #include "sound/ay8910.h" #include "sound/dac.h" #include "sound/tms5220.h" @@ -119,6 +120,7 @@ public: UINT8 m_sound[8]; int m_last; + DECLARE_WRITE8_MEMBER(flip_screen_x_w); DECLARE_WRITE8_MEMBER(flip_screen_y_w); DECLARE_WRITE8_MEMBER(looping_videoram_w); @@ -341,26 +343,28 @@ void looping_state::machine_start() INTERRUPT_GEN_MEMBER(looping_state::looping_interrupt) { - device.execute().set_input_line_and_vector(0, ASSERT_LINE, 4); + m_maincpu->set_input_line(INT_9995_INT1, ASSERT_LINE); } WRITE8_MEMBER(looping_state::level2_irq_set) { + logerror("Level 2 int = %d\n", data); if (!(data & 1)) - m_maincpu->set_input_line_and_vector(0, ASSERT_LINE, 4); + m_maincpu->set_input_line(INT_9995_INT1, ASSERT_LINE); } WRITE8_MEMBER(looping_state::main_irq_ack_w) { if (data == 0) - m_maincpu->set_input_line(0, CLEAR_LINE); + m_maincpu->set_input_line(INT_9995_INT1, CLEAR_LINE); } WRITE8_MEMBER(looping_state::looping_souint_clr) { + logerror("Soundint clr = %d\n", data); if (data == 0) m_audiocpu->set_input_line(0, CLEAR_LINE); } @@ -368,18 +372,17 @@ WRITE8_MEMBER(looping_state::looping_souint_clr) WRITE_LINE_MEMBER(looping_state::looping_spcint) { - m_audiocpu->set_input_line_and_vector(0, !state, 6); + logerror("Speech /int = %d\n", state==ASSERT_LINE? 1:0); + m_audiocpu->set_input_line(INT_9980A_LEVEL4, state==ASSERT_LINE? CLEAR_LINE : ASSERT_LINE); } WRITE8_MEMBER(looping_state::looping_soundlatch_w) { soundlatch_byte_w(space, offset, data); - m_audiocpu->set_input_line_and_vector(0, ASSERT_LINE, 4); + m_audiocpu->set_input_line(INT_9980A_LEVEL2, ASSERT_LINE); } - - /************************************* * * Custom DAC handling @@ -622,6 +625,31 @@ static const ay8910_interface ay8910_config = DEVCB_NULL }; +/************************************* + * + * CPU configs + * + *************************************/ + +static TMS9980A_CONFIG( cpuconf80 ) +{ + DEVCB_NULL, + DEVCB_NULL, // Instruction acquisition + DEVCB_NULL, // Clock out + DEVCB_NULL, // Hold acknowledge + DEVCB_NULL // DBIN +}; + +static TMS9995_CONFIG( cpuconf95 ) +{ + DEVCB_NULL, // external op + DEVCB_NULL, // Instruction acquisition + DEVCB_NULL, // clock out + DEVCB_NULL, // HOLDA + DEVCB_NULL, // DBIN + INTERNAL_RAM, // use internal RAM + NO_OVERFLOW_INT // The generally available versions of TMS9995 have a deactivated overflow interrupt +}; /************************************* * @@ -632,14 +660,10 @@ static const ay8910_interface ay8910_config = static MACHINE_CONFIG_START( looping, looping_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", TMS9995L, MAIN_CPU_CLOCK) - MCFG_CPU_PROGRAM_MAP(looping_map) - MCFG_CPU_IO_MAP(looping_io_map) + MCFG_TMS99xx_ADD("maincpu", TMS9995, MAIN_CPU_CLOCK, looping_map, looping_io_map, cpuconf95) MCFG_CPU_VBLANK_INT_DRIVER("screen", looping_state, looping_interrupt) - MCFG_CPU_ADD("audiocpu", TMS9980L, SOUND_CLOCK/4) - MCFG_CPU_PROGRAM_MAP(looping_sound_map) - MCFG_CPU_IO_MAP(looping_sound_io_map) + MCFG_TMS99xx_ADD("audiocpu", TMS9980A, SOUND_CLOCK/4, looping_sound_map, looping_sound_io_map, cpuconf80) MCFG_CPU_ADD("mcu", COP420, COP_CLOCK) MCFG_CPU_PROGRAM_MAP(looping_cop_map) @@ -647,7 +671,6 @@ static MACHINE_CONFIG_START( looping, looping_state ) MCFG_CPU_IO_MAP(looping_cop_io_map) MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED ) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) @@ -919,7 +942,7 @@ DRIVER_INIT_MEMBER(looping_state,looping) * *************************************/ -GAME( 1982, looping, 0, looping, looping, looping_state, looping, ROT90, "Video Games GmbH", "Looping", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) -GAME( 1982, loopingv, looping, looping, looping, looping_state, looping, ROT90, "Video Games GmbH (Venture Line license)", "Looping (Venture Line license, set 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) -GAME( 1982, loopingva, looping, looping, looping, looping_state, looping, ROT90, "Video Games GmbH (Venture Line license)", "Looping (Venture Line license, set 2)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) -GAME( 1982, skybump, 0, looping, skybump, looping_state, looping, ROT90, "Venture Line", "Sky Bumper", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1982, looping, 0, looping, looping, looping_state, looping, ROT90, "Video Games GmbH", "Looping", GAME_IMPERFECT_SOUND /*| GAME_SUPPORTS_SAVE */) +GAME( 1982, loopingv, looping, looping, looping, looping_state, looping, ROT90, "Video Games GmbH (Venture Line license)", "Looping (Venture Line license, set 1)", GAME_IMPERFECT_SOUND /* | GAME_SUPPORTS_SAVE */) +GAME( 1982, loopingva, looping, looping, looping, looping_state, looping, ROT90, "Video Games GmbH (Venture Line license)", "Looping (Venture Line license, set 2)", GAME_IMPERFECT_SOUND /* | GAME_SUPPORTS_SAVE */ ) +GAME( 1982, skybump, 0, looping, skybump, looping_state, looping, ROT90, "Venture Line", "Sky Bumper", GAME_IMPERFECT_SOUND /* | GAME_SUPPORTS_SAVE */)