(MESS) TMS99xx users adapted to use devcb2. (nw)

This commit is contained in:
Michael Zapf 2014-03-21 13:23:49 +00:00
parent cac7437f8e
commit 28ccff182e
11 changed files with 189 additions and 537 deletions

View File

@ -75,17 +75,6 @@ void cortex_state::machine_reset()
m_maincpu->set_ready(ASSERT_LINE); m_maincpu->set_ready(ASSERT_LINE);
} }
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
};
static TMS9928A_INTERFACE(cortex_tms9929a_interface) static TMS9928A_INTERFACE(cortex_tms9929a_interface)
{ {
0x4000, // vram size 0x4000, // vram size
@ -95,7 +84,9 @@ static TMS9928A_INTERFACE(cortex_tms9929a_interface)
static MACHINE_CONFIG_START( cortex, cortex_state ) static MACHINE_CONFIG_START( cortex, cortex_state )
/* basic machine hardware */ /* basic machine hardware */
/* TMS9995 CPU @ 12.0 MHz */ /* TMS9995 CPU @ 12.0 MHz */
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, cortex_mem, cortex_io, cpuconf95) // Standard variant, no overflow int
// No lines connected yet
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, cortex_mem, cortex_io)
/* video hardware */ /* video hardware */
MCFG_TMS9928A_ADD( "tms9928a", TMS9929A, cortex_tms9929a_interface ) MCFG_TMS9928A_ADD( "tms9928a", TMS9929A, cortex_tms9929a_interface )

View File

@ -98,21 +98,11 @@ void evmbug_state::machine_reset()
static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(ASSERT_LINE); static_cast<tms9995_device*>(machine().device("maincpu"))->set_ready(ASSERT_LINE);
} }
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
};
static MACHINE_CONFIG_START( evmbug, evmbug_state ) static MACHINE_CONFIG_START( evmbug, evmbug_state )
/* basic machine hardware */ // basic machine hardware
/* TMS9995 CPU @ 12.0 MHz */ // TMS9995 CPU @ 12.0 MHz
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, evmbug_mem, evmbug_io, cpuconf95) // We have no lines connected yet
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, evmbug_mem, evmbug_io )
/* video hardware */ /* video hardware */
MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)

View File

@ -225,7 +225,14 @@ class geneve_state : public driver_device
{ {
public: public:
geneve_state(const machine_config &mconfig, device_type type, const char *tag) geneve_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) { } : driver_device(mconfig, type, tag),
m_cpu(*this, "maincpu"),
m_tms9901(*this, TMS9901_TAG),
m_keyboard(*this, GKEYBOARD_TAG),
m_mapper(*this, GMAPPER_TAG),
m_peribox(*this, PERIBOX_TAG),
m_mouse(*this, GMOUSE_TAG),
m_joyport(*this,JOYPORT_TAG) { }
// CRU (Communication Register Unit) handling // CRU (Communication Register Unit) handling
DECLARE_READ8_MEMBER(cruread); DECLARE_READ8_MEMBER(cruread);
@ -248,13 +255,13 @@ public:
DECLARE_WRITE_LINE_MEMBER( keyboard_interrupt ); DECLARE_WRITE_LINE_MEMBER( keyboard_interrupt );
geneve_keyboard_device* m_keyboard; required_device<tms9995_device> m_cpu;
geneve_mouse_device* m_mouse; required_device<tms9901_device> m_tms9901;
tms9901_device* m_tms9901; required_device<geneve_keyboard_device> m_keyboard;
geneve_mapper_device* m_mapper; required_device<geneve_mapper_device> m_mapper;
peribox_device* m_peribox; required_device<peribox_device> m_peribox;
tms9995_device* m_cpu; required_device<geneve_mouse_device> m_mouse;
joyport_device* m_joyport; required_device<joyport_device> m_joyport;
DECLARE_WRITE_LINE_MEMBER( inta ); DECLARE_WRITE_LINE_MEMBER( inta );
DECLARE_WRITE_LINE_MEMBER( intb ); DECLARE_WRITE_LINE_MEMBER( intb );
@ -679,17 +686,6 @@ WRITE_LINE_MEMBER( geneve_state::dbin_line )
m_mapper->dbin_in(state); m_mapper->dbin_in(state);
} }
static TMS9995_CONFIG( geneve_processor_config )
{
DEVCB_DRIVER_MEMBER(geneve_state, external_operation),
DEVCB_NULL, // Instruction acquisition
DEVCB_DRIVER_LINE_MEMBER(geneve_state, clock_out),
DEVCB_NULL, // HOLDA
DEVCB_DRIVER_LINE_MEMBER(geneve_state, dbin_line), // DBIN
INTERNAL_RAM, // use internal RAM
NO_OVERFLOW_INT // The generally available versions of TMS9995 have a deactivated overflow interrupt
};
static const mm58274c_interface geneve_mm58274c_interface = static const mm58274c_interface geneve_mm58274c_interface =
{ {
1, /* mode 24*/ 1, /* mode 24*/
@ -702,13 +698,6 @@ DRIVER_INIT_MEMBER(geneve_state,geneve)
void geneve_state::machine_start() void geneve_state::machine_start()
{ {
m_tms9901 = static_cast<tms9901_device*>(machine().device(TMS9901_TAG));
m_mapper = static_cast<geneve_mapper_device*>(machine().device(GMAPPER_TAG));
m_keyboard = static_cast<geneve_keyboard_device*>(machine().device(GKEYBOARD_TAG));
m_peribox = static_cast<peribox_device*>(machine().device(PERIBOX_TAG));
m_mouse = static_cast<geneve_mouse_device*>(machine().device(GMOUSE_TAG));
m_cpu = static_cast<tms9995_device*>(machine().device("maincpu"));
m_joyport = static_cast<joyport_device*>(machine().device(JOYPORT_TAG));
} }
/* /*
@ -735,7 +724,10 @@ void geneve_state::machine_reset()
static MACHINE_CONFIG_START( geneve_60hz, geneve_state ) static MACHINE_CONFIG_START( geneve_60hz, geneve_state )
// basic machine hardware // basic machine hardware
// TMS9995 CPU @ 12.0 MHz // TMS9995 CPU @ 12.0 MHz
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, memmap, crumap, geneve_processor_config) MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, memmap, crumap)
MCFG_TMS9995_EXTOP_HANDLER( WRITE8(geneve_state, external_operation) )
MCFG_TMS9995_CLKOUT_HANDLER( WRITELINE(geneve_state, clock_out) )
MCFG_TMS9995_DBIN_HANDLER( WRITELINE(geneve_state, dbin_line) )
// video hardware // video hardware
// Although we should have a 60 Hz screen rate, we have to set it to 30 here. // Although we should have a 60 Hz screen rate, we have to set it to 30 here.

View File

@ -188,21 +188,10 @@ WRITE_LINE_MEMBER(ti990_10_state::tape_interrupt)
// set_int9(state); // set_int9(state);
} }
static TMS99xx_CONFIG( cpuconf )
{
DEVCB_NULL, //DEVCB_DRIVER_MEMBER(ti990_10_state, external_operation),
DEVCB_NULL, //DEVCB_DRIVER_MEMBER(ti990_10_state, interrupt_level),
DEVCB_NULL, // Instruction acquisition
DEVCB_NULL, // Clock out
DEVCB_NULL, // wait
DEVCB_NULL, // Hold acknowledge
DEVCB_NULL // data bus in
};
static MACHINE_CONFIG_START( ti990_10, ti990_10_state ) static MACHINE_CONFIG_START( ti990_10, ti990_10_state )
/* basic machine hardware */ /* basic machine hardware */
/* TI990/10 CPU @ 4.0(???) MHz */ /* TI990/10 CPU @ 4.0(???) MHz */
MCFG_TMS99xx_ADD("maincpu", TI990_10, 4000000, ti990_10_memmap, ti990_10_io, cpuconf) MCFG_TMS99xx_ADD("maincpu", TI990_10, 4000000, ti990_10_memmap, ti990_10_io )
// VDT 911 terminal // VDT 911 terminal
MCFG_DEVICE_ADD("vdt911", VDT911, 0) MCFG_DEVICE_ADD("vdt911", VDT911, 0)

View File

@ -275,17 +275,6 @@ static const floppy_interface ti990_4_floppy_interface =
NULL NULL
}; };
static TMS99xx_CONFIG( cpuconf )
{
DEVCB_DRIVER_MEMBER(ti990_4_state, external_operation),
DEVCB_DRIVER_MEMBER(ti990_4_state, interrupt_level),
DEVCB_NULL, // Instruction acquisition
DEVCB_NULL, // Clock out
DEVCB_NULL, // wait
DEVCB_NULL, // Hold acknowledge
DEVCB_NULL // data bus in
};
MACHINE_RESET_MEMBER(ti990_4_state,ti990_4) MACHINE_RESET_MEMBER(ti990_4_state,ti990_4)
{ {
hold_load(); hold_load();
@ -302,7 +291,10 @@ DRIVER_INIT_MEMBER(ti990_4_state, ti990_4)
static MACHINE_CONFIG_START( ti990_4, ti990_4_state ) static MACHINE_CONFIG_START( ti990_4, ti990_4_state )
/* basic machine hardware */ /* basic machine hardware */
/* TMS9900 CPU @ 3.0(???) MHz */ /* TMS9900 CPU @ 3.0(???) MHz */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, cpuconf) MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map)
MCFG_TMS99xx_EXTOP_HANDLER( WRITE8(ti990_4_state, external_operation) )
MCFG_TMS99xx_INTLEVEL_HANDLER( READ8(ti990_4_state, interrupt_level) )
MCFG_MACHINE_RESET_OVERRIDE(ti990_4_state, ti990_4 ) MCFG_MACHINE_RESET_OVERRIDE(ti990_4_state, ti990_4 )
// Terminal // Terminal
@ -320,7 +312,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti990_4v, ti990_4_state ) static MACHINE_CONFIG_START( ti990_4v, ti990_4_state )
/* basic machine hardware */ /* basic machine hardware */
/* TMS9900 CPU @ 3.0(???) MHz */ /* TMS9900 CPU @ 3.0(???) MHz */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map_v, cpuconf) MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map_v)
MCFG_TMS99xx_EXTOP_HANDLER( WRITE8(ti990_4_state, external_operation) )
MCFG_TMS99xx_INTLEVEL_HANDLER( READ8(ti990_4_state, interrupt_level) )
MCFG_MACHINE_RESET_OVERRIDE(ti990_4_state, ti990_4 ) MCFG_MACHINE_RESET_OVERRIDE(ti990_4_state, ti990_4 )
// Terminal // Terminal
@ -376,5 +370,5 @@ ROM_START(ti990_4v)
ROM_END ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
COMP( 1976, ti990_4, 0, 0, ti990_4, 0, ti990_4_state, ti990_4, "Texas Instruments", "TI 990/4 Minicomputer System" , GAME_NOT_WORKING | GAME_NO_SOUND ) COMP( 1976, ti990_4, 0, 0, ti990_4, 0, ti990_4_state, ti990_4, "Texas Instruments", "TI Model 990/4 Microcomputer System" , GAME_NOT_WORKING | GAME_NO_SOUND )
COMP( 1976, ti990_4v, ti990_4, 0, ti990_4v, 0, ti990_4_state, ti990_4, "Texas Instruments", "TI 990/4 Minicomputer System with Video Display Terminal" , GAME_NOT_WORKING | GAME_NO_SOUND ) COMP( 1976, ti990_4v, ti990_4, 0, ti990_4v, 0, ti990_4_state, ti990_4, "Texas Instruments", "TI Model 990/4 Microcomputer System with Video Display Terminal" , GAME_NOT_WORKING | GAME_NO_SOUND )

View File

@ -81,7 +81,6 @@ would just have taken three extra tracks on the main board and a OR gate in an A
#include "machine/tms9901.h" #include "machine/tms9901.h"
#include "cpu/tms9900/tms9995.h" #include "cpu/tms9900/tms9995.h"
class ti99_2_state : public driver_device class ti99_2_state : public driver_device
{ {
public: public:
@ -365,21 +364,11 @@ static INPUT_PORTS_START(ti99_2)
INPUT_PORTS_END INPUT_PORTS_END
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
};
static MACHINE_CONFIG_START( ti99_2, ti99_2_state ) static MACHINE_CONFIG_START( ti99_2, ti99_2_state )
/* basic machine hardware */ // basic machine hardware
MCFG_TMS99xx_ADD("maincpu", TMS9995, 10700000, ti99_2_memmap, ti99_2_io, cpuconf95) // TMS9995, standard variant
// We have no lines connected yet
MCFG_TMS99xx_ADD("maincpu", TMS9995, 10700000, ti99_2_memmap, ti99_2_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", ti99_2_state, ti99_2_vblank_interrupt) MCFG_CPU_VBLANK_INT_DRIVER("screen", ti99_2_state, ti99_2_vblank_interrupt)

View File

@ -64,7 +64,13 @@ class ti99_4p_state : public driver_device
public: public:
ti99_4p_state(const machine_config &mconfig, device_type type, const char *tag) ti99_4p_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_cassette(*this, "cassette") { } m_cpu(*this, "maincpu"),
m_tms9901(*this, TMS9901_TAG),
m_sound(*this, TISOUND_TAG),
m_video(*this, VIDEO_SYSTEM_TAG),
m_cassette(*this, "cassette"),
m_peribox(*this, PERIBOX_TAG),
m_joyport(*this, JOYPORT_TAG) { }
DECLARE_WRITE_LINE_MEMBER( console_ready ); DECLARE_WRITE_LINE_MEMBER( console_ready );
DECLARE_WRITE_LINE_MEMBER( console_ready_dmux ); DECLARE_WRITE_LINE_MEMBER( console_ready_dmux );
@ -102,13 +108,13 @@ public:
DECLARE_WRITE_LINE_MEMBER(set_tms9901_INT2_from_v9938); DECLARE_WRITE_LINE_MEMBER(set_tms9901_INT2_from_v9938);
tms9900_device* m_cpu; required_device<tms9900_device> m_cpu;
tms9901_device* m_tms9901; required_device<tms9901_device> m_tms9901;
ti_sound_system_device* m_sound; required_device<ti_sound_system_device> m_sound;
ti_exp_video_device* m_video; required_device<ti_exp_video_device> m_video;
required_device<cassette_image_device> m_cassette; required_device<cassette_image_device> m_cassette;
peribox_device* m_peribox; required_device<peribox_device> m_peribox;
joyport_device* m_joyport; required_device<joyport_device> m_joyport;
// Pointer to ROM0 // Pointer to ROM0
UINT16 *m_rom0; UINT16 *m_rom0;
@ -808,25 +814,8 @@ WRITE8_MEMBER( ti99_4p_state::external_operation )
/*****************************************************************************/ /*****************************************************************************/
static TMS99xx_CONFIG( sgcpu_cpuconf )
{
DEVCB_DRIVER_MEMBER(ti99_4p_state, external_operation),
DEVCB_DRIVER_MEMBER(ti99_4p_state, interrupt_level),
DEVCB_NULL, // Instruction acquisition
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, clock_out),
DEVCB_NULL, // wait
DEVCB_NULL // Hold acknowledge
};
void ti99_4p_state::machine_start() void ti99_4p_state::machine_start()
{ {
m_cpu = static_cast<tms9900_device*>(machine().device("maincpu"));
m_peribox = static_cast<peribox_device*>(machine().device(PERIBOX_TAG));
m_sound = static_cast<ti_sound_system_device*>(machine().device(TISOUND_TAG));
m_video = static_cast<ti_exp_video_device*>(machine().device(VIDEO_SYSTEM_TAG));
m_tms9901 = static_cast<tms9901_device*>(machine().device(TMS9901_TAG));
m_joyport = static_cast<joyport_device*>(machine().device(JOYPORT_TAG));
m_ram = (UINT16*)(*memregion(SAMSMEM_TAG)); m_ram = (UINT16*)(*memregion(SAMSMEM_TAG));
m_scratchpad = (UINT16*)(*memregion(PADMEM_TAG)); m_scratchpad = (UINT16*)(*memregion(PADMEM_TAG));
@ -875,7 +864,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(ti99_4p_state::sgcpu_hblank_interrupt)
static MACHINE_CONFIG_START( ti99_4p_60hz, ti99_4p_state ) static MACHINE_CONFIG_START( ti99_4p_60hz, ti99_4p_state )
/* basic machine hardware */ /* basic machine hardware */
/* TMS9900 CPU @ 3.0 MHz */ /* TMS9900 CPU @ 3.0 MHz */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, sgcpu_cpuconf) MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map)
MCFG_TMS99xx_EXTOP_HANDLER( WRITE8(ti99_4p_state, external_operation) )
MCFG_TMS99xx_INTLEVEL_HANDLER( READ8(ti99_4p_state, interrupt_level) )
MCFG_TMS99xx_CLKOUT_HANDLER( WRITELINE(ti99_4p_state, clock_out) )
/* video hardware */ /* video hardware */
// Although we should have a 60 Hz screen rate, we have to set it to 30 here. // Although we should have a 60 Hz screen rate, we have to set it to 30 here.

View File

@ -38,7 +38,6 @@
*****************************************************************************/ *****************************************************************************/
#include "emu.h" #include "emu.h"
#include "cpu/tms9900/tms9900.h" #include "cpu/tms9900/tms9900.h"
@ -58,7 +57,6 @@
#define TRACE_READY 0 #define TRACE_READY 0
#define TRACE_INTERRUPTS 0 #define TRACE_INTERRUPTS 0
#define TRACE_CRU 0 #define TRACE_CRU 0
#define LOG logerror
/* /*
The console. The console.
@ -139,9 +137,10 @@ private:
// Console type // Console type
int m_console; int m_console;
// Latch for 9901 INT2, INT1 lines // Latch for 9901 INT1, INT2, and INT12 lines
int m_9901_int; line_state m_int1;
void set_9901_int(int line, line_state state); line_state m_int2;
line_state m_int12;
// Connected devices // Connected devices
required_device<tms9900_device> m_cpu; required_device<tms9900_device> m_cpu;
@ -377,7 +376,7 @@ static GROM_CONFIG(grom2_config)
READ8_MEMBER( ti99_4x_state::cruread ) READ8_MEMBER( ti99_4x_state::cruread )
{ {
// if (TRACE_CRU) LOG("read access to CRU address %04x\n", offset << 4); // if (TRACE_CRU) logerror("read access to CRU address %04x\n", offset << 4);
UINT8 value = 0; UINT8 value = 0;
// Similar to the bus8z_devices, just let the gromport and the p-box // Similar to the bus8z_devices, just let the gromport and the p-box
@ -393,7 +392,7 @@ READ8_MEMBER( ti99_4x_state::cruread )
WRITE8_MEMBER( ti99_4x_state::cruwrite ) WRITE8_MEMBER( ti99_4x_state::cruwrite )
{ {
if (TRACE_CRU) LOG("ti99_4x: write access to CRU address %04x\n", offset << 1); if (TRACE_CRU) logerror("ti99_4x: write access to CRU address %04x\n", offset << 1);
// The QI version does not propagate the CRU signals to the cartridge slot // The QI version does not propagate the CRU signals to the cartridge slot
if (m_console != MODEL_4QI) m_gromport->cruwrite(space, offset<<1, data); if (m_console != MODEL_4QI) m_gromport->cruwrite(space, offset<<1, data);
m_peribox->cruwrite(space, offset<<1, data); m_peribox->cruwrite(space, offset<<1, data);
@ -406,7 +405,7 @@ WRITE8_MEMBER( ti99_4x_state::external_operation )
if (offset == IDLE_OP) return; if (offset == IDLE_OP) return;
else else
{ {
LOG("ti99_4x: External operation %s not implemented on TI-99 board\n", extop[offset]); logerror("ti99_4x: External operation %s not implemented on TI-99 board\n", extop[offset]);
} }
} }
@ -474,15 +473,18 @@ READ8_MEMBER( ti99_4x_state::read_by_9901 )
{ {
answer &= ~(ioport("ALPHA")->read()); answer &= ~(ioport("ALPHA")->read());
} }
answer = (answer << 3) | m_9901_int; answer = (answer << 3);
if (m_int1 == CLEAR_LINE) answer |= 0x02;
if (m_int2 == CLEAR_LINE) answer |= 0x04;
break; break;
case TMS9901_INT8_INT15: case TMS9901_INT8_INT15:
// |1|1|1|1|0|K|K|K| // |1|1|1|INT12|0|K|K|K|
if (m_keyboard_column >= (m_console==MODEL_4? 5:6)) answer = 0x07; if (m_keyboard_column >= (m_console==MODEL_4? 5:6)) answer = 0x07;
else answer = ((ioport(column[m_keyboard_column])->read())>>5) & 0x07; else answer = ((ioport(column[m_keyboard_column])->read())>>5) & 0x07;
answer |= 0xf0; answer |= 0xe0;
if (m_console != MODEL_4 || m_int12==CLEAR_LINE) answer |= 0x10;
break; break;
case TMS9901_P0_P7: case TMS9901_P0_P7:
@ -509,7 +511,7 @@ READ8_MEMBER( ti99_4x_state::read_by_9901 )
} }
/* /*
Handler for tms9901 P0 pin (handset data acknowledge) Handler for TMS9901 P0 pin (handset data acknowledge); only for 99/4
*/ */
WRITE_LINE_MEMBER( ti99_4x_state::handset_ack ) WRITE_LINE_MEMBER( ti99_4x_state::handset_ack )
{ {
@ -635,27 +637,21 @@ WRITE_LINE_MEMBER( ti99_4x_state::dbin_line )
/*****************************************************************************/ /*****************************************************************************/
void ti99_4x_state::set_9901_int( int line, line_state state)
{
m_tms9901->set_single_int(line, state);
// We latch the value for the read operation. Mind the negative logic.
if (state==CLEAR_LINE) m_9901_int |= (1<<line);
else m_9901_int &= ~(1<<line);
}
/* /*
set the state of TMS9901's INT2 (called by the tms9928 core) set the state of TMS9901's INT2 (called by the tms9928 core)
*/ */
WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT2 ) WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT2 )
{ {
if (TRACE_INTERRUPTS) LOG("ti99_4x: VDP int 2 on tms9901, level=%d\n", state); if (TRACE_INTERRUPTS) logerror("ti99_4x: VDP INT2 on tms9901, level=%d\n", state);
set_9901_int(2, (line_state)state); m_int2 = (line_state)state;
m_tms9901->set_single_int(2, state);
} }
WRITE_LINE_MEMBER(ti99_4x_state::set_tms9901_INT2_from_v9938) WRITE_LINE_MEMBER(ti99_4x_state::set_tms9901_INT2_from_v9938)
{ {
if (TRACE_INTERRUPTS) LOG("ti99_4x: VDP int 2 on tms9901, level=%d\n", state); if (TRACE_INTERRUPTS) logerror("ti99_4x: VDP INT2 on tms9901, level=%d\n", state);
set_9901_int(2, (line_state)state); m_int2 = (line_state)state;
m_tms9901->set_single_int(2, state);
} }
/* /*
@ -663,8 +659,9 @@ WRITE_LINE_MEMBER(ti99_4x_state::set_tms9901_INT2_from_v9938)
*/ */
WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT12) WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT12)
{ {
if (TRACE_INTERRUPTS) LOG("ti99_4x: joyport INT 12 on tms9901, level=%d\n", state); if (TRACE_INTERRUPTS) logerror("ti99_4x: joyport INT12 on tms9901, level=%d\n", state);
set_9901_int(12, (line_state)state); m_int12 = (line_state)state;
m_tms9901->set_single_int(12, state);
} }
/* /*
@ -673,7 +670,7 @@ WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT12)
*/ */
INPUT_CHANGED_MEMBER( ti99_4x_state::load_interrupt ) INPUT_CHANGED_MEMBER( ti99_4x_state::load_interrupt )
{ {
LOG("ti99_4x: LOAD interrupt, level=%d\n", newval); logerror("ti99_4x: LOAD interrupt, level=%d\n", newval);
m_cpu->set_input_line(INT_9900_LOAD, (newval==0)? ASSERT_LINE : CLEAR_LINE); m_cpu->set_input_line(INT_9900_LOAD, (newval==0)? ASSERT_LINE : CLEAR_LINE);
} }
@ -695,7 +692,7 @@ void ti99_4x_state::console_ready_join(int id, int state)
if (TRACE_READY) if (TRACE_READY)
{ {
if (m_nready_prev != m_nready_combined) LOG("ti99_4x: READY bits = %04x\n", ~m_nready_combined); if (m_nready_prev != m_nready_combined) logerror("ti99_4x: READY bits = %04x\n", ~m_nready_combined);
} }
m_nready_prev = m_nready_combined; m_nready_prev = m_nready_combined;
@ -747,13 +744,14 @@ WRITE_LINE_MEMBER( ti99_4x_state::console_reset )
WRITE_LINE_MEMBER( ti99_4x_state::extint ) WRITE_LINE_MEMBER( ti99_4x_state::extint )
{ {
if (TRACE_INTERRUPTS) LOG("ti99_4x: EXTINT level = %02x\n", state); if (TRACE_INTERRUPTS) logerror("ti99_4x: EXTINT level = %02x\n", state);
set_9901_int(1, (line_state)state); m_int1 = (line_state)state;
m_tms9901->set_single_int(11, state);
} }
WRITE_LINE_MEMBER( ti99_4x_state::notconnected ) WRITE_LINE_MEMBER( ti99_4x_state::notconnected )
{ {
if (TRACE_INTERRUPTS) LOG("ti99_4x: Setting a not connected line ... ignored\n"); if (TRACE_INTERRUPTS) logerror("ti99_4x: Setting a not connected line ... ignored\n");
} }
/*****************************************************************************/ /*****************************************************************************/
@ -764,71 +762,6 @@ static TMS9928A_INTERFACE(ti99_4_tms9928a_interface)
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, set_tms9901_INT2) DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, set_tms9901_INT2)
}; };
/* TMS9901 setup.
const tms9901_interface tms9901_wiring_ti99_4 =
{
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC, // only input pins whose state is always known
// read handler
DEVCB_DRIVER_MEMBER(ti99_4x_state, read_by_9901),
// write handlers
{
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, handset_ack),
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC0),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC1),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC2),
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs1_motor),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs2_motor),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, audio_gate),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cassette_output),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
},
// interrupt handler
DEVCB_DRIVER_MEMBER(ti99_4x_state, tms9901_interrupt)
};
*/
/*
const tms9901_interface tms9901_wiring_ti99_4a =
{
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC,
// read handler
DEVCB_DRIVER_MEMBER(ti99_4x_state, read_by_9901),
// write handlers
{
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC0),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC1),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC2),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, alphaW),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs1_motor),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs2_motor),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, audio_gate),
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cassette_output),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
},
DEVCB_DRIVER_MEMBER(ti99_4x_state, tms9901_interrupt)
};
*/
/* /*
Devices attached to the databus multiplexer. We cannot solve this with Devices attached to the databus multiplexer. We cannot solve this with
the common address maps since the multiplexer also inserts wait states the common address maps since the multiplexer also inserts wait states
@ -873,17 +806,6 @@ static DMUX_CONFIG( datamux_conf_ev )
dmux_devices_ev dmux_devices_ev
}; };
static TMS99xx_CONFIG( ti99_cpuconf )
{
DEVCB_DRIVER_MEMBER(ti99_4x_state, external_operation),
DEVCB_DRIVER_MEMBER(ti99_4x_state, interrupt_level),
DEVCB_NULL, // Instruction acquisition
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, clock_out),
DEVCB_NULL, // wait
DEVCB_NULL, // Hold acknowledge
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, dbin_line) // data bus in
};
/****************************************************************************** /******************************************************************************
Machine definitions Machine definitions
******************************************************************************/ ******************************************************************************/
@ -900,21 +822,26 @@ MACHINE_RESET_MEMBER(ti99_4x_state,ti99_4)
{ {
m_cpu->set_ready(ASSERT_LINE); m_cpu->set_ready(ASSERT_LINE);
m_cpu->set_hold(CLEAR_LINE); m_cpu->set_hold(CLEAR_LINE);
m_9901_int = 0x03; // INT2* and INT1* set to 1, i.e. inactive m_int1 = CLEAR_LINE;
m_int2 = CLEAR_LINE;
m_int12 = CLEAR_LINE;
} }
/* /**********************************************************************
TI-99/4 - the predecessor of the more popular TI-99/4A TI-99/4 - predecessor of the more popular TI-99/4A
*/ ***********************************************************************/
static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x_state )
/* CPU */ static MACHINE_CONFIG_START( ti99_4, ti99_4x_state )
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf) // CPU
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map)
MCFG_TMS99xx_EXTOP_HANDLER( WRITE8(ti99_4x_state, external_operation) )
MCFG_TMS99xx_INTLEVEL_HANDLER( READ8(ti99_4x_state, interrupt_level) )
MCFG_TMS99xx_CLKOUT_HANDLER( WRITELINE(ti99_4x_state, clock_out) )
MCFG_TMS99xx_DBIN_HANDLER( WRITELINE(ti99_4x_state, dbin_line) )
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4 ) MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4 )
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4 ) MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4 )
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918, ti99_4_tms9928a_interface)
/* Main board */ /* Main board */
MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000) MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000)
MCFG_TMS9901_READBLOCK_HANDLER( READ8(ti99_4x_state, read_by_9901) ) MCFG_TMS9901_READBLOCK_HANDLER( READ8(ti99_4x_state, read_by_9901) )
@ -962,81 +889,33 @@ static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x_state )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom)) MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM2_TAG, grom2_config ) MCFG_GROM_ADD( GROM2_TAG, grom2_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom)) MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MACHINE_CONFIG_END
/*
US version: 60 Hz, NTSC
*/
static MACHINE_CONFIG_DERIVED( ti99_4_60hz, ti99_4 )
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918, ti99_4_tms9928a_interface)
// Joystick port // Joystick port
MCFG_TI_JOYPORT4_ADD( JOYPORT_TAG, 60 ) MCFG_TI_JOYPORT4_ADD( JOYPORT_TAG, 60 )
MCFG_JOYPORT_INT_HANDLER( WRITELINE(ti99_4x_state, set_tms9901_INT12) ) MCFG_JOYPORT_INT_HANDLER( WRITELINE(ti99_4x_state, set_tms9901_INT12) )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti99_4_50hz, ti99_4x_state ) /*
/* CPU */ European version: 50 Hz, PAL
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf) */
static MACHINE_CONFIG_DERIVED( ti99_4_50hz, ti99_4 )
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4 )
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4 )
/* video hardware */
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929, ti99_4_tms9928a_interface) MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929, ti99_4_tms9928a_interface)
/* Main board */
MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000)
MCFG_TMS9901_READBLOCK_HANDLER( READ8(ti99_4x_state, read_by_9901) )
MCFG_TMS9901_P0_HANDLER( WRITELINE( ti99_4x_state, handset_ack) )
MCFG_TMS9901_P2_HANDLER( WRITELINE( ti99_4x_state, keyC0) )
MCFG_TMS9901_P3_HANDLER( WRITELINE( ti99_4x_state, keyC1) )
MCFG_TMS9901_P4_HANDLER( WRITELINE( ti99_4x_state, keyC2) )
MCFG_TMS9901_P6_HANDLER( WRITELINE( ti99_4x_state, cs1_motor) )
MCFG_TMS9901_P7_HANDLER( WRITELINE( ti99_4x_state, cs2_motor) )
MCFG_TMS9901_P8_HANDLER( WRITELINE( ti99_4x_state, audio_gate) )
MCFG_TMS9901_P9_HANDLER( WRITELINE( ti99_4x_state, cassette_output) )
MCFG_TMS9901_INTLEVEL_HANDLER( WRITE8( ti99_4x_state, tms9901_interrupt) )
MCFG_DMUX_ADD( DATAMUX_TAG, datamux_conf )
MCFG_DMUX_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_dmux) )
MCFG_TI99_GROMPORT_ADD( GROMPORT_TAG )
MCFG_GROMPORT_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_cart) )
MCFG_GROMPORT_RESET_HANDLER( WRITELINE(ti99_4x_state, console_reset) )
/* Software list */
MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart")
/* Peripheral expansion box */
MCFG_DEVICE_ADD( PERIBOX_TAG, PERIBOX, 0)
MCFG_PERIBOX_INTA_HANDLER( WRITELINE(ti99_4x_state, extint) )
MCFG_PERIBOX_INTB_HANDLER( WRITELINE(ti99_4x_state, notconnected) )
MCFG_PERIBOX_READY_HANDLER( DEVWRITELINE(DATAMUX_TAG, ti99_datamux_device, ready_line) )
/* sound hardware */
MCFG_TI_SOUND_94624_ADD( TISOUND_TAG )
MCFG_TI_SOUND_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_sound) )
/* Cassette drives */
MCFG_SPEAKER_STANDARD_MONO("cass_out")
MCFG_CASSETTE_ADD( "cassette", default_cassette_interface )
MCFG_CASSETTE_ADD( "cassette2", default_cassette_interface )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "cass_out", 0.25)
/* GROM devices */
MCFG_GROM_ADD( GROM0_TAG, grom0_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM1_TAG, grom1_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM2_TAG, grom2_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
// Joystick port // Joystick port
MCFG_TI_JOYPORT4_ADD( JOYPORT_TAG, 50 ) MCFG_TI_JOYPORT4_ADD( JOYPORT_TAG, 50 )
MCFG_JOYPORT_INT_HANDLER( WRITELINE(ti99_4x_state, set_tms9901_INT12) ) MCFG_JOYPORT_INT_HANDLER( WRITELINE(ti99_4x_state, set_tms9901_INT12) )
MACHINE_CONFIG_END MACHINE_CONFIG_END
/* /**********************************************************************
TI-99/4A - replaced the 99/4 TI-99/4A - replaced the 99/4 and became the standard TI-99 console
*/ ***********************************************************************/
MACHINE_START_MEMBER(ti99_4x_state,ti99_4a) MACHINE_START_MEMBER(ti99_4x_state,ti99_4a)
{ {
@ -1050,18 +929,22 @@ MACHINE_RESET_MEMBER(ti99_4x_state,ti99_4a)
{ {
m_cpu->set_ready(ASSERT_LINE); m_cpu->set_ready(ASSERT_LINE);
m_cpu->set_hold(CLEAR_LINE); m_cpu->set_hold(CLEAR_LINE);
m_int1 = CLEAR_LINE;
m_int2 = CLEAR_LINE;
m_int12 = CLEAR_LINE;
} }
static MACHINE_CONFIG_START( ti99_4a_60hz, ti99_4x_state ) static MACHINE_CONFIG_START( ti99_4a, ti99_4x_state )
/* CPU */ /* CPU */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf) MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map)
MCFG_TMS99xx_EXTOP_HANDLER( WRITE8(ti99_4x_state, external_operation) )
MCFG_TMS99xx_INTLEVEL_HANDLER( READ8(ti99_4x_state, interrupt_level) )
MCFG_TMS99xx_CLKOUT_HANDLER( WRITELINE(ti99_4x_state, clock_out) )
MCFG_TMS99xx_DBIN_HANDLER( WRITELINE(ti99_4x_state, dbin_line) )
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a ) MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a )
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a ) MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
/* Video hardware */
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918A, ti99_4_tms9928a_interface)
/* Main board */ /* Main board */
MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000) MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000)
MCFG_TMS9901_READBLOCK_HANDLER( READ8(ti99_4x_state, read_by_9901) ) MCFG_TMS9901_READBLOCK_HANDLER( READ8(ti99_4x_state, read_by_9901) )
@ -1109,83 +992,38 @@ static MACHINE_CONFIG_START( ti99_4a_60hz, ti99_4x_state )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom)) MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM2_TAG, grom2_config ) MCFG_GROM_ADD( GROM2_TAG, grom2_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom)) MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
// Joystick port
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 60 )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti99_4a_50hz, ti99_4x_state )
/* CPU */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a )
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
/* Video hardware */
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929A, ti99_4_tms9928a_interface)
/* Main board */
MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000)
MCFG_TMS9901_READBLOCK_HANDLER( READ8(ti99_4x_state, read_by_9901) )
MCFG_TMS9901_P2_HANDLER( WRITELINE( ti99_4x_state, keyC0) )
MCFG_TMS9901_P3_HANDLER( WRITELINE( ti99_4x_state, keyC1) )
MCFG_TMS9901_P4_HANDLER( WRITELINE( ti99_4x_state, keyC2) )
MCFG_TMS9901_P5_HANDLER( WRITELINE( ti99_4x_state, alphaW) )
MCFG_TMS9901_P6_HANDLER( WRITELINE( ti99_4x_state, cs1_motor) )
MCFG_TMS9901_P7_HANDLER( WRITELINE( ti99_4x_state, cs2_motor) )
MCFG_TMS9901_P8_HANDLER( WRITELINE( ti99_4x_state, audio_gate) )
MCFG_TMS9901_P9_HANDLER( WRITELINE( ti99_4x_state, cassette_output) )
MCFG_TMS9901_INTLEVEL_HANDLER( WRITE8( ti99_4x_state, tms9901_interrupt) )
MCFG_DMUX_ADD( DATAMUX_TAG, datamux_conf )
MCFG_DMUX_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_dmux) )
MCFG_TI99_GROMPORT_ADD( GROMPORT_TAG )
MCFG_GROMPORT_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_cart) )
MCFG_GROMPORT_RESET_HANDLER( WRITELINE(ti99_4x_state, console_reset) )
/* Software list */
MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart")
/* Peripheral expansion box */
MCFG_DEVICE_ADD( PERIBOX_TAG, PERIBOX, 0)
MCFG_PERIBOX_INTA_HANDLER( WRITELINE(ti99_4x_state, extint) )
MCFG_PERIBOX_INTB_HANDLER( WRITELINE(ti99_4x_state, notconnected) )
MCFG_PERIBOX_READY_HANDLER( DEVWRITELINE(DATAMUX_TAG, ti99_datamux_device, ready_line) )
/* sound hardware */
MCFG_TI_SOUND_94624_ADD( TISOUND_TAG )
MCFG_TI_SOUND_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_sound) )
/* Cassette drives */
MCFG_SPEAKER_STANDARD_MONO("cass_out")
MCFG_CASSETTE_ADD( "cassette", default_cassette_interface )
MCFG_CASSETTE_ADD( "cassette2", default_cassette_interface )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "cass_out", 0.25)
/* GROM devices */
MCFG_GROM_ADD( GROM0_TAG, grom0_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM1_TAG, grom1_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM2_TAG, grom2_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
// Joystick port
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 50 )
MACHINE_CONFIG_END MACHINE_CONFIG_END
/* /*
US version: 60 Hz, NTSC
*/
static MACHINE_CONFIG_DERIVED( ti99_4a_60hz, ti99_4a )
// Video hardware
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918A, ti99_4_tms9928a_interface)
// Joystick port
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 60 )
MACHINE_CONFIG_END
/*
European version: 50 Hz, PAL
*/
static MACHINE_CONFIG_DERIVED( ti99_4a_50hz, ti99_4a )
// Video hardware
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929A, ti99_4_tms9928a_interface)
// Joystick port
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 50 )
MACHINE_CONFIG_END
/************************************************************************
TI-99/4QI - the final version of the TI-99/4A TI-99/4QI - the final version of the TI-99/4A
This was a last modification of the console. One purpose was to lower This was a last modification of the console. One purpose was to lower
production costs by a redesigned board layout. The other was that TI production costs by a redesigned board layout. The other was that TI
removed the ROM search for cartridges so that only cartridges with GROMs removed the ROM search for cartridges so that only cartridges with GROMs
could be started, effectively kicking out all third-party cartridges like could be started, effectively kicking out all third-party cartridges like
those from Atarisoft. those from Atarisoft.
*/ *************************************************************************/
MACHINE_START_MEMBER(ti99_4x_state, ti99_4qi) MACHINE_START_MEMBER(ti99_4x_state, ti99_4qi)
{ {
@ -1195,146 +1033,49 @@ MACHINE_START_MEMBER(ti99_4x_state, ti99_4qi)
m_nready_combined = 0; m_nready_combined = 0;
} }
static MACHINE_CONFIG_START( ti99_4qi_60hz, ti99_4x_state ) static MACHINE_CONFIG_DERIVED( ti99_4qi, ti99_4a )
/* CPU */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4qi ) MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4qi )
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a ) MACHINE_CONFIG_END
/*
US version: 60 Hz, NTSC
*/
static MACHINE_CONFIG_DERIVED( ti99_4qi_60hz, ti99_4qi )
/* Video hardware */ /* Video hardware */
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918A, ti99_4_tms9928a_interface) MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918A, ti99_4_tms9928a_interface)
/* Main board */
MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000)
MCFG_TMS9901_READBLOCK_HANDLER( READ8(ti99_4x_state, read_by_9901) )
MCFG_TMS9901_P2_HANDLER( WRITELINE( ti99_4x_state, keyC0) )
MCFG_TMS9901_P3_HANDLER( WRITELINE( ti99_4x_state, keyC1) )
MCFG_TMS9901_P4_HANDLER( WRITELINE( ti99_4x_state, keyC2) )
MCFG_TMS9901_P5_HANDLER( WRITELINE( ti99_4x_state, alphaW) )
MCFG_TMS9901_P6_HANDLER( WRITELINE( ti99_4x_state, cs1_motor) )
MCFG_TMS9901_P7_HANDLER( WRITELINE( ti99_4x_state, cs2_motor) )
MCFG_TMS9901_P8_HANDLER( WRITELINE( ti99_4x_state, audio_gate) )
MCFG_TMS9901_P9_HANDLER( WRITELINE( ti99_4x_state, cassette_output) )
MCFG_TMS9901_INTLEVEL_HANDLER( WRITE8( ti99_4x_state, tms9901_interrupt) )
MCFG_DMUX_ADD( DATAMUX_TAG, datamux_conf )
MCFG_DMUX_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_dmux) )
MCFG_TI99_GROMPORT_ADD( GROMPORT_TAG )
MCFG_GROMPORT_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_cart) )
MCFG_GROMPORT_RESET_HANDLER( WRITELINE(ti99_4x_state, console_reset) )
/* Software list */
MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart")
/* Peripheral expansion box */
MCFG_DEVICE_ADD( PERIBOX_TAG, PERIBOX, 0)
MCFG_PERIBOX_INTA_HANDLER( WRITELINE(ti99_4x_state, extint) )
MCFG_PERIBOX_INTB_HANDLER( WRITELINE(ti99_4x_state, notconnected) )
MCFG_PERIBOX_READY_HANDLER( DEVWRITELINE(DATAMUX_TAG, ti99_datamux_device, ready_line) )
/* sound hardware */
MCFG_TI_SOUND_94624_ADD( TISOUND_TAG )
MCFG_TI_SOUND_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_sound) )
/* Cassette drives */
MCFG_SPEAKER_STANDARD_MONO("cass_out")
MCFG_CASSETTE_ADD( "cassette", default_cassette_interface )
MCFG_CASSETTE_ADD( "cassette2", default_cassette_interface )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "cass_out", 0.25)
/* GROM devices */
MCFG_GROM_ADD( GROM0_TAG, grom0_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM1_TAG, grom1_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM2_TAG, grom2_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
// Joystick port // Joystick port
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 60 ) MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 60 )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti99_4qi_50hz, ti99_4x_state ) /*
/* CPU */ European version: 50 Hz, PAL
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf) */
static MACHINE_CONFIG_DERIVED( ti99_4qi_50hz, ti99_4qi )
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4qi ) // Video hardware
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
/* Video hardware */
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929A, ti99_4_tms9928a_interface) MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929A, ti99_4_tms9928a_interface)
/* Main board */
MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000)
MCFG_TMS9901_READBLOCK_HANDLER( READ8(ti99_4x_state, read_by_9901) )
MCFG_TMS9901_P2_HANDLER( WRITELINE( ti99_4x_state, keyC0) )
MCFG_TMS9901_P3_HANDLER( WRITELINE( ti99_4x_state, keyC1) )
MCFG_TMS9901_P4_HANDLER( WRITELINE( ti99_4x_state, keyC2) )
MCFG_TMS9901_P5_HANDLER( WRITELINE( ti99_4x_state, alphaW) )
MCFG_TMS9901_P6_HANDLER( WRITELINE( ti99_4x_state, cs1_motor) )
MCFG_TMS9901_P7_HANDLER( WRITELINE( ti99_4x_state, cs2_motor) )
MCFG_TMS9901_P8_HANDLER( WRITELINE( ti99_4x_state, audio_gate) )
MCFG_TMS9901_P9_HANDLER( WRITELINE( ti99_4x_state, cassette_output) )
MCFG_TMS9901_INTLEVEL_HANDLER( WRITE8( ti99_4x_state, tms9901_interrupt) )
MCFG_DMUX_ADD( DATAMUX_TAG, datamux_conf )
MCFG_DMUX_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_dmux) )
MCFG_TI99_GROMPORT_ADD( GROMPORT_TAG )
MCFG_GROMPORT_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_cart) )
MCFG_GROMPORT_RESET_HANDLER( WRITELINE(ti99_4x_state, console_reset) )
/* Software list */
MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart")
/* Peripheral expansion box */
MCFG_DEVICE_ADD( PERIBOX_TAG, PERIBOX, 0)
MCFG_PERIBOX_INTA_HANDLER( WRITELINE(ti99_4x_state, extint) )
MCFG_PERIBOX_INTB_HANDLER( WRITELINE(ti99_4x_state, notconnected) )
MCFG_PERIBOX_READY_HANDLER( DEVWRITELINE(DATAMUX_TAG, ti99_datamux_device, ready_line) )
/* sound hardware */
MCFG_TI_SOUND_94624_ADD( TISOUND_TAG )
MCFG_TI_SOUND_READY_HANDLER( WRITELINE(ti99_4x_state, console_ready_sound) )
/* Cassette drives */
MCFG_SPEAKER_STANDARD_MONO("cass_out")
MCFG_CASSETTE_ADD( "cassette", default_cassette_interface )
MCFG_CASSETTE_ADD( "cassette2", default_cassette_interface )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "cass_out", 0.25)
/* GROM devices */
MCFG_GROM_ADD( GROM0_TAG, grom0_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM1_TAG, grom1_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
MCFG_GROM_ADD( GROM2_TAG, grom2_config )
MCFG_GROM_READY_CALLBACK(WRITELINE(ti99_4x_state, console_ready_grom))
// Joystick port // Joystick port
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 50 ) MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 50 )
MACHINE_CONFIG_END MACHINE_CONFIG_END
/************************************************************************
TI-99/4A with 80-column support. Actually a separate expansion card (EVPC),
replacing the console video processor.
*************************************************************************/
TIMER_DEVICE_CALLBACK_MEMBER(ti99_4x_state::ti99_4ev_hblank_interrupt) TIMER_DEVICE_CALLBACK_MEMBER(ti99_4x_state::ti99_4ev_hblank_interrupt)
{ {
machine().device<v9938_device>(VDP_TAG)->interrupt(); machine().device<v9938_device>(VDP_TAG)->interrupt();
} }
/*
TI-99/4A with 80-column support. Actually a separate expansion card (EVPC),
replacing the console video processor.
*/
static MACHINE_CONFIG_START( ti99_4ev_60hz, ti99_4x_state ) static MACHINE_CONFIG_START( ti99_4ev_60hz, ti99_4x_state )
/* CPU */ /* CPU */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf) MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map)
MCFG_TMS99xx_EXTOP_HANDLER( WRITE8(ti99_4x_state, external_operation) )
MCFG_TMS99xx_INTLEVEL_HANDLER( READ8(ti99_4x_state, interrupt_level) )
MCFG_TMS99xx_CLKOUT_HANDLER( WRITELINE(ti99_4x_state, clock_out) )
MCFG_TMS99xx_DBIN_HANDLER( WRITELINE(ti99_4x_state, dbin_line) )
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a ) MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a )

View File

@ -877,22 +877,6 @@ WRITE_LINE_MEMBER( ti99_8_state::clock_out )
/*****************************************************************************/ /*****************************************************************************/
/*
MP9537 mask: This variant of the TMS9995 does not contain on-chip RAM
Also, the overflow interrupt is disabled; in the available documentation
this feature is said to be disabled and is announced for a later version.
*/
static TMS9995_CONFIG( ti99_8_processor_config )
{
DEVCB_DRIVER_MEMBER(ti99_8_state, external_operation),
DEVCB_NULL, // Instruction acquisition
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, clock_out),
DEVCB_NULL, // HOLDA
DEVCB_NULL, // DBIN
NO_INTERNAL_RAM,
NO_OVERFLOW_INT
};
/* /*
Format: Format:
Name, mode, stop, mask, select, write, read8z function, write8 function Name, mode, stop, mask, select, write, read8z function, write8 function
@ -1023,9 +1007,13 @@ MACHINE_RESET_MEMBER(ti99_8_state, ti99_8)
} }
static MACHINE_CONFIG_START( ti99_8_60hz, ti99_8_state ) static MACHINE_CONFIG_START( ti99_8_60hz, ti99_8_state )
/* basic machine hardware */ // basic machine hardware */
/* TMS9995-MP9537 CPU @ 10.7 MHz */ // TMS9995-MP9537 CPU @ 10.7 MHz
MCFG_TMS99xx_ADD("maincpu", TMS9995, XTAL_10_738635MHz, memmap, crumap, ti99_8_processor_config) // MP9537 mask: This variant of the TMS9995 does not contain on-chip RAM
MCFG_TMS99xx_ADD("maincpu", TMS9995_MP9537, XTAL_10_738635MHz, memmap, crumap)
MCFG_TMS9995_EXTOP_HANDLER( WRITE8(ti99_8_state, external_operation) )
MCFG_TMS9995_CLKOUT_HANDLER( WRITELINE(ti99_8_state, clock_out) )
MCFG_MACHINE_START_OVERRIDE(ti99_8_state, ti99_8 ) MCFG_MACHINE_START_OVERRIDE(ti99_8_state, ti99_8 )
MCFG_MACHINE_RESET_OVERRIDE(ti99_8_state, ti99_8 ) MCFG_MACHINE_RESET_OVERRIDE(ti99_8_state, ti99_8 )
@ -1093,7 +1081,10 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti99_8_50hz, ti99_8_state ) static MACHINE_CONFIG_START( ti99_8_50hz, ti99_8_state )
/* basic machine hardware */ /* basic machine hardware */
/* TMS9995-MP9537 CPU @ 10.7 MHz */ /* TMS9995-MP9537 CPU @ 10.7 MHz */
MCFG_TMS99xx_ADD("maincpu", TMS9995, XTAL_10_738635MHz, memmap, crumap, ti99_8_processor_config) MCFG_TMS99xx_ADD("maincpu", TMS9995_MP9537, XTAL_10_738635MHz, memmap, crumap)
MCFG_TMS9995_EXTOP_HANDLER( WRITE8(ti99_8_state, external_operation) )
MCFG_TMS9995_CLKOUT_HANDLER( WRITELINE(ti99_8_state, clock_out) )
MCFG_MACHINE_START_OVERRIDE(ti99_8_state, ti99_8 ) MCFG_MACHINE_START_OVERRIDE(ti99_8_state, ti99_8 )
MCFG_MACHINE_RESET_OVERRIDE(ti99_8_state, ti99_8 ) MCFG_MACHINE_RESET_OVERRIDE(ti99_8_state, ti99_8 )

View File

@ -822,18 +822,10 @@ static ADDRESS_MAP_START( tm990_189_cru_map, AS_IO, 8, tm990189_state )
AM_RANGE(0x0400, 0x05ff) AM_DEVWRITE("tms9902", tms9902_device, cruwrite) /* optional tms9902 */ AM_RANGE(0x0400, 0x05ff) AM_DEVWRITE("tms9902", tms9902_device, cruwrite) /* optional tms9902 */
ADDRESS_MAP_END ADDRESS_MAP_END
static TMS9980A_CONFIG( cpuconf )
{
DEVCB_DRIVER_MEMBER(tm990189_state, external_operation),
DEVCB_NULL, // Instruction acquisition
DEVCB_NULL, // Clock out
DEVCB_NULL, // Hold acknowledge
DEVCB_NULL // DBIN
};
static MACHINE_CONFIG_START( tm990_189, tm990189_state ) static MACHINE_CONFIG_START( tm990_189, tm990189_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_memmap, tm990_189_cru_map, cpuconf) MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_memmap, tm990_189_cru_map)
MCFG_TMS99xx_EXTOP_HANDLER( WRITE8(tm990189_state, external_operation) )
MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189 ) MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189 )
MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189 ) MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189 )
@ -888,7 +880,8 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( tm990_189_v, tm990189_state ) static MACHINE_CONFIG_START( tm990_189_v, tm990189_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_v_memmap, tm990_189_cru_map, cpuconf) MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_v_memmap, tm990_189_cru_map)
MCFG_TMS99xx_EXTOP_HANDLER( WRITE8(tm990189_state, external_operation) )
MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189_v ) MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189_v )
MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189_v ) MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189_v )

View File

@ -754,21 +754,11 @@ static INPUT_PORTS_START(pyuutajr)
PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END INPUT_PORTS_END
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
};
static MACHINE_CONFIG_START( tutor, tutor_state ) static MACHINE_CONFIG_START( tutor, tutor_state )
/* basic machine hardware */ // basic machine hardware
/* TMS9995 CPU @ 10.7 MHz */ // TMS9995 CPU @ 10.7 MHz
MCFG_TMS99xx_ADD("maincpu", TMS9995, 10700000, tutor_memmap, tutor_io, cpuconf95) // No lines connected yet
MCFG_TMS99xx_ADD("maincpu", TMS9995, XTAL_10_738635MHz, tutor_memmap, tutor_io)
/* video hardware */ /* video hardware */
MCFG_TMS9928A_ADD( "tms9928a", TMS9928A, tutor_tms9928a_interface ) MCFG_TMS9928A_ADD( "tms9928a", TMS9928A, tutor_tms9928a_interface )