Using new TMS9980/95 implementation. [Michael Zapf]

This commit is contained in:
Michael Zapf 2013-10-19 23:48:20 +00:00
parent 28805e5c88
commit bfb64b0421
5 changed files with 93 additions and 62 deletions

View File

@ -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 )

View File

@ -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<cpu_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)

View File

@ -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 */

View File

@ -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
/-------------------------------------------------------------------*/

View File

@ -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 */)