(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);
}
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)
{
0x4000, // vram size
@ -95,7 +84,9 @@ static TMS9928A_INTERFACE(cortex_tms9929a_interface)
static MACHINE_CONFIG_START( cortex, cortex_state )
/* basic machine hardware */
/* 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 */
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 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 )
/* basic machine hardware */
/* TMS9995 CPU @ 12.0 MHz */
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, evmbug_mem, evmbug_io, cpuconf95)
// basic machine hardware
// TMS9995 CPU @ 12.0 MHz
// We have no lines connected yet
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, evmbug_mem, evmbug_io )
/* video hardware */
MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)

View File

@ -225,7 +225,14 @@ class geneve_state : public driver_device
{
public:
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
DECLARE_READ8_MEMBER(cruread);
@ -248,13 +255,13 @@ public:
DECLARE_WRITE_LINE_MEMBER( keyboard_interrupt );
geneve_keyboard_device* m_keyboard;
geneve_mouse_device* m_mouse;
tms9901_device* m_tms9901;
geneve_mapper_device* m_mapper;
peribox_device* m_peribox;
tms9995_device* m_cpu;
joyport_device* m_joyport;
required_device<tms9995_device> m_cpu;
required_device<tms9901_device> m_tms9901;
required_device<geneve_keyboard_device> m_keyboard;
required_device<geneve_mapper_device> m_mapper;
required_device<peribox_device> m_peribox;
required_device<geneve_mouse_device> m_mouse;
required_device<joyport_device> m_joyport;
DECLARE_WRITE_LINE_MEMBER( inta );
DECLARE_WRITE_LINE_MEMBER( intb );
@ -679,17 +686,6 @@ WRITE_LINE_MEMBER( geneve_state::dbin_line )
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 =
{
1, /* mode 24*/
@ -702,13 +698,6 @@ DRIVER_INIT_MEMBER(geneve_state,geneve)
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 )
// basic machine hardware
// 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
// 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);
}
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 )
/* basic machine hardware */
/* 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
MCFG_DEVICE_ADD("vdt911", VDT911, 0)

View File

@ -275,17 +275,6 @@ static const floppy_interface ti990_4_floppy_interface =
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)
{
hold_load();
@ -302,7 +291,10 @@ DRIVER_INIT_MEMBER(ti990_4_state, ti990_4)
static MACHINE_CONFIG_START( ti990_4, ti990_4_state )
/* basic machine hardware */
/* 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 )
// Terminal
@ -320,7 +312,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti990_4v, ti990_4_state )
/* basic machine hardware */
/* 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 )
// Terminal
@ -376,5 +370,5 @@ ROM_START(ti990_4v)
ROM_END
/* 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_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_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 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 "cpu/tms9900/tms9995.h"
class ti99_2_state : public driver_device
{
public:
@ -365,21 +364,11 @@ static INPUT_PORTS_START(ti99_2)
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 )
/* basic machine hardware */
MCFG_TMS99xx_ADD("maincpu", TMS9995, 10700000, ti99_2_memmap, ti99_2_io, cpuconf95)
// basic machine hardware
// 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)

View File

@ -64,7 +64,13 @@ class ti99_4p_state : public driver_device
public:
ti99_4p_state(const machine_config &mconfig, device_type type, const char *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_dmux );
@ -102,13 +108,13 @@ public:
DECLARE_WRITE_LINE_MEMBER(set_tms9901_INT2_from_v9938);
tms9900_device* m_cpu;
tms9901_device* m_tms9901;
ti_sound_system_device* m_sound;
ti_exp_video_device* m_video;
required_device<cassette_image_device> m_cassette;
peribox_device* m_peribox;
joyport_device* m_joyport;
required_device<tms9900_device> m_cpu;
required_device<tms9901_device> m_tms9901;
required_device<ti_sound_system_device> m_sound;
required_device<ti_exp_video_device> m_video;
required_device<cassette_image_device> m_cassette;
required_device<peribox_device> m_peribox;
required_device<joyport_device> m_joyport;
// Pointer to 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()
{
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_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 )
/* basic machine hardware */
/* 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 */
// 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 "cpu/tms9900/tms9900.h"
@ -58,7 +57,6 @@
#define TRACE_READY 0
#define TRACE_INTERRUPTS 0
#define TRACE_CRU 0
#define LOG logerror
/*
The console.
@ -139,9 +137,10 @@ private:
// Console type
int m_console;
// Latch for 9901 INT2, INT1 lines
int m_9901_int;
void set_9901_int(int line, line_state state);
// Latch for 9901 INT1, INT2, and INT12 lines
line_state m_int1;
line_state m_int2;
line_state m_int12;
// Connected devices
required_device<tms9900_device> m_cpu;
@ -377,7 +376,7 @@ static GROM_CONFIG(grom2_config)
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;
// 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 )
{
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
if (m_console != MODEL_4QI) m_gromport->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;
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 = (answer << 3) | m_9901_int;
answer = (answer << 3);
if (m_int1 == CLEAR_LINE) answer |= 0x02;
if (m_int2 == CLEAR_LINE) answer |= 0x04;
break;
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;
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;
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 )
{
@ -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)
*/
WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT2 )
{
if (TRACE_INTERRUPTS) LOG("ti99_4x: VDP int 2 on tms9901, level=%d\n", state);
set_9901_int(2, (line_state)state);
if (TRACE_INTERRUPTS) logerror("ti99_4x: VDP INT2 on tms9901, level=%d\n", state);
m_int2 = (line_state)state;
m_tms9901->set_single_int(2, state);
}
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);
set_9901_int(2, (line_state)state);
if (TRACE_INTERRUPTS) logerror("ti99_4x: VDP INT2 on tms9901, level=%d\n", 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)
{
if (TRACE_INTERRUPTS) LOG("ti99_4x: joyport INT 12 on tms9901, level=%d\n", state);
set_9901_int(12, (line_state)state);
if (TRACE_INTERRUPTS) logerror("ti99_4x: joyport INT12 on tms9901, level=%d\n", 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 )
{
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);
}
@ -695,7 +692,7 @@ void ti99_4x_state::console_ready_join(int id, int state)
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;
@ -747,13 +744,14 @@ WRITE_LINE_MEMBER( ti99_4x_state::console_reset )
WRITE_LINE_MEMBER( ti99_4x_state::extint )
{
if (TRACE_INTERRUPTS) LOG("ti99_4x: EXTINT level = %02x\n", state);
set_9901_int(1, (line_state)state);
if (TRACE_INTERRUPTS) logerror("ti99_4x: EXTINT level = %02x\n", state);
m_int1 = (line_state)state;
m_tms9901->set_single_int(11, state);
}
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)
};
/* 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
the common address maps since the multiplexer also inserts wait states
@ -873,17 +806,6 @@ static DMUX_CONFIG( datamux_conf_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
******************************************************************************/
@ -900,21 +822,26 @@ MACHINE_RESET_MEMBER(ti99_4x_state,ti99_4)
{
m_cpu->set_ready(ASSERT_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
*/
static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x_state )
/* CPU */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
/**********************************************************************
TI-99/4 - predecessor of the more popular TI-99/4A
***********************************************************************/
static MACHINE_CONFIG_START( ti99_4, ti99_4x_state )
// 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_RESET_OVERRIDE(ti99_4x_state, ti99_4 )
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918, ti99_4_tms9928a_interface)
/* Main board */
MCFG_DEVICE_ADD(TMS9901_TAG, TMS9901, 3000000)
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_ADD( GROM2_TAG, grom2_config )
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
MCFG_TI_JOYPORT4_ADD( JOYPORT_TAG, 60 )
MCFG_JOYPORT_INT_HANDLER( WRITELINE(ti99_4x_state, set_tms9901_INT12) )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti99_4_50hz, ti99_4x_state )
/* CPU */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4 )
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4 )
/* video hardware */
/*
European version: 50 Hz, PAL
*/
static MACHINE_CONFIG_DERIVED( ti99_4_50hz, ti99_4 )
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
MCFG_TI_JOYPORT4_ADD( JOYPORT_TAG, 50 )
MCFG_JOYPORT_INT_HANDLER( WRITELINE(ti99_4x_state, set_tms9901_INT12) )
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)
{
@ -1050,18 +929,22 @@ MACHINE_RESET_MEMBER(ti99_4x_state,ti99_4a)
{
m_cpu->set_ready(ASSERT_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 */
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_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
/* Video hardware */
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) )
@ -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_ADD( GROM2_TAG, grom2_config )
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
/*
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
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
removed the ROM search for cartridges so that only cartridges with GROMs
could be started, effectively kicking out all third-party cartridges like
those from Atarisoft.
*/
*************************************************************************/
MACHINE_START_MEMBER(ti99_4x_state, ti99_4qi)
{
@ -1195,146 +1033,49 @@ MACHINE_START_MEMBER(ti99_4x_state, ti99_4qi)
m_nready_combined = 0;
}
static MACHINE_CONFIG_START( ti99_4qi_60hz, ti99_4x_state )
/* CPU */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
static MACHINE_CONFIG_DERIVED( ti99_4qi, ti99_4a )
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 */
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
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 60 )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti99_4qi_50hz, ti99_4x_state )
/* CPU */
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4qi )
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
/* Video hardware */
/*
European version: 50 Hz, PAL
*/
static MACHINE_CONFIG_DERIVED( ti99_4qi_50hz, ti99_4qi )
// 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
/************************************************************************
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)
{
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 )
/* 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 )

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:
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 )
/* basic machine hardware */
/* TMS9995-MP9537 CPU @ 10.7 MHz */
MCFG_TMS99xx_ADD("maincpu", TMS9995, XTAL_10_738635MHz, memmap, crumap, ti99_8_processor_config)
// basic machine hardware */
// TMS9995-MP9537 CPU @ 10.7 MHz
// 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_RESET_OVERRIDE(ti99_8_state, ti99_8 )
@ -1083,7 +1071,7 @@ static MACHINE_CONFIG_START( ti99_8_60hz, ti99_8_state )
/* Devices */
MCFG_DEVICE_ADD(SPEECH_TAG, TI99_SPEECH8, 0)
MCFG_SPEECH8_READY_CALLBACK(WRITELINE(ti99_8_state, console_ready_speech))
MCFG_SPEECH8_READY_CALLBACK(WRITELINE(ti99_8_state, console_ready_speech))
// Joystick port
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 60 )
@ -1093,7 +1081,10 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( ti99_8_50hz, ti99_8_state )
/* basic machine hardware */
/* 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_RESET_OVERRIDE(ti99_8_state, ti99_8 )
@ -1149,8 +1140,8 @@ static MACHINE_CONFIG_START( ti99_8_50hz, ti99_8_state )
MCFG_GROM_LIBRARY_ADD3(pascal3_grom, pascal3)
/* Devices */
MCFG_DEVICE_ADD(SPEECH_TAG, TI99_SPEECH8, 0)
MCFG_SPEECH8_READY_CALLBACK(WRITELINE(ti99_8_state, console_ready_speech))
MCFG_DEVICE_ADD(SPEECH_TAG, TI99_SPEECH8, 0)
MCFG_SPEECH8_READY_CALLBACK(WRITELINE(ti99_8_state, console_ready_speech))
// Joystick port
MCFG_TI_JOYPORT4A_ADD( JOYPORT_TAG, 50 )

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 */
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 )
/* 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_RESET_OVERRIDE(tm990189_state, tm990_189 )
@ -888,7 +880,8 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( tm990_189_v, tm990189_state )
/* 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_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)
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 )
/* basic machine hardware */
/* TMS9995 CPU @ 10.7 MHz */
MCFG_TMS99xx_ADD("maincpu", TMS9995, 10700000, tutor_memmap, tutor_io, cpuconf95)
// basic machine hardware
// TMS9995 CPU @ 10.7 MHz
// No lines connected yet
MCFG_TMS99xx_ADD("maincpu", TMS9995, XTAL_10_738635MHz, tutor_memmap, tutor_io)
/* video hardware */
MCFG_TMS9928A_ADD( "tms9928a", TMS9928A, tutor_tms9928a_interface )