mirror of
https://github.com/holub/mame
synced 2025-06-17 17:59:05 +03:00
(MESS) TMS99xx users adapted to use devcb2. (nw)
This commit is contained in:
parent
cac7437f8e
commit
28ccff182e
@ -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 )
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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 )
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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 )
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
Loading…
Reference in New Issue
Block a user