diff --git a/src/mess/drivers/cortex.c b/src/mess/drivers/cortex.c index 04b46221585..fa9c06785b2 100644 --- a/src/mess/drivers/cortex.c +++ b/src/mess/drivers/cortex.c @@ -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 ) diff --git a/src/mess/drivers/evmbug.c b/src/mess/drivers/evmbug.c index 41a726ff14a..0e1598fbce9 100644 --- a/src/mess/drivers/evmbug.c +++ b/src/mess/drivers/evmbug.c @@ -98,21 +98,11 @@ void evmbug_state::machine_reset() static_cast(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) diff --git a/src/mess/drivers/geneve.c b/src/mess/drivers/geneve.c index 61d947e7ea0..672070a7fbb 100644 --- a/src/mess/drivers/geneve.c +++ b/src/mess/drivers/geneve.c @@ -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 m_cpu; + required_device m_tms9901; + required_device m_keyboard; + required_device m_mapper; + required_device m_peribox; + required_device m_mouse; + required_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(machine().device(TMS9901_TAG)); - m_mapper = static_cast(machine().device(GMAPPER_TAG)); - m_keyboard = static_cast(machine().device(GKEYBOARD_TAG)); - m_peribox = static_cast(machine().device(PERIBOX_TAG)); - m_mouse = static_cast(machine().device(GMOUSE_TAG)); - m_cpu = static_cast(machine().device("maincpu")); - m_joyport = static_cast(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. diff --git a/src/mess/drivers/ti990_10.c b/src/mess/drivers/ti990_10.c index c00467a30c3..d737f6de65c 100644 --- a/src/mess/drivers/ti990_10.c +++ b/src/mess/drivers/ti990_10.c @@ -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) diff --git a/src/mess/drivers/ti990_4.c b/src/mess/drivers/ti990_4.c index cc1497cc8be..08a718d0f78 100644 --- a/src/mess/drivers/ti990_4.c +++ b/src/mess/drivers/ti990_4.c @@ -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 ) diff --git a/src/mess/drivers/ti99_2.c b/src/mess/drivers/ti99_2.c index 2fec7a024ff..b2c914f876d 100644 --- a/src/mess/drivers/ti99_2.c +++ b/src/mess/drivers/ti99_2.c @@ -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) diff --git a/src/mess/drivers/ti99_4p.c b/src/mess/drivers/ti99_4p.c index 237878ed354..9ef0c4ff9f2 100644 --- a/src/mess/drivers/ti99_4p.c +++ b/src/mess/drivers/ti99_4p.c @@ -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 m_cassette; - peribox_device* m_peribox; - joyport_device* m_joyport; + required_device m_cpu; + required_device m_tms9901; + required_device m_sound; + required_device m_video; + required_device m_cassette; + required_device m_peribox; + required_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(machine().device("maincpu")); - m_peribox = static_cast(machine().device(PERIBOX_TAG)); - m_sound = static_cast(machine().device(TISOUND_TAG)); - m_video = static_cast(machine().device(VIDEO_SYSTEM_TAG)); - m_tms9901 = static_cast(machine().device(TMS9901_TAG)); - m_joyport = static_cast(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. diff --git a/src/mess/drivers/ti99_4x.c b/src/mess/drivers/ti99_4x.c index 235e0adc45f..e585de47565 100644 --- a/src/mess/drivers/ti99_4x.c +++ b/src/mess/drivers/ti99_4x.c @@ -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 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<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(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 ) diff --git a/src/mess/drivers/ti99_8.c b/src/mess/drivers/ti99_8.c index 67377777c68..fabe87a52ef 100644 --- a/src/mess/drivers/ti99_8.c +++ b/src/mess/drivers/ti99_8.c @@ -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 ) diff --git a/src/mess/drivers/tm990189.c b/src/mess/drivers/tm990189.c index 749b03ea6b9..250bc7262a8 100644 --- a/src/mess/drivers/tm990189.c +++ b/src/mess/drivers/tm990189.c @@ -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 ) diff --git a/src/mess/drivers/tutor.c b/src/mess/drivers/tutor.c index 0ac1295d48e..15b016c89fc 100644 --- a/src/mess/drivers/tutor.c +++ b/src/mess/drivers/tutor.c @@ -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 )