mirror of
https://github.com/holub/mame
synced 2025-04-28 19:14:55 +03:00
Rename driver state classes to have _state in their names (no whatsnew)
This commit is contained in:
parent
e52d60b7f8
commit
ee491e3f30
@ -219,10 +219,10 @@
|
|||||||
#define SRAM_SIZE 384*1024 // maximum SRAM expansion on-board
|
#define SRAM_SIZE 384*1024 // maximum SRAM expansion on-board
|
||||||
#define DRAM_SIZE 512*1024
|
#define DRAM_SIZE 512*1024
|
||||||
|
|
||||||
class geneve : public driver_device
|
class geneve_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
geneve(const machine_config &mconfig, device_type type, const char *tag)
|
geneve_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag) { }
|
: driver_device(mconfig, type, tag) { }
|
||||||
|
|
||||||
// CRU (Communication Register Unit) handling
|
// CRU (Communication Register Unit) handling
|
||||||
@ -281,7 +281,7 @@ private:
|
|||||||
Memory map
|
Memory map
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static ADDRESS_MAP_START(memmap, AS_PROGRAM, 8, geneve)
|
static ADDRESS_MAP_START(memmap, AS_PROGRAM, 8, geneve_state)
|
||||||
AM_RANGE(0x0000, 0xffff) AM_DEVREADWRITE(GMAPPER_TAG, geneve_mapper_device, readm, writem)
|
AM_RANGE(0x0000, 0xffff) AM_DEVREADWRITE(GMAPPER_TAG, geneve_mapper_device, readm, writem)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -293,7 +293,7 @@ ADDRESS_MAP_END
|
|||||||
TODO: Check whether A0-A2 are available for CRU addressing since those
|
TODO: Check whether A0-A2 are available for CRU addressing since those
|
||||||
bits are usually routed through the mapper first.
|
bits are usually routed through the mapper first.
|
||||||
*/
|
*/
|
||||||
static ADDRESS_MAP_START(crumap, AS_IO, 8, geneve)
|
static ADDRESS_MAP_START(crumap, AS_IO, 8, geneve_state)
|
||||||
AM_RANGE(0x0000, 0x0003) AM_DEVREAD(TMS9901_TAG, tms9901_device, read)
|
AM_RANGE(0x0000, 0x0003) AM_DEVREAD(TMS9901_TAG, tms9901_device, read)
|
||||||
AM_RANGE(0x0000, 0x0fff) AM_READ( cruread )
|
AM_RANGE(0x0000, 0x0fff) AM_READ( cruread )
|
||||||
|
|
||||||
@ -337,7 +337,7 @@ INPUT_PORTS_END
|
|||||||
#define CRU_CONTROL_BASE 0x1ee0
|
#define CRU_CONTROL_BASE 0x1ee0
|
||||||
#define CRU_SSTEP_BASE 0x13c0
|
#define CRU_SSTEP_BASE 0x13c0
|
||||||
|
|
||||||
WRITE8_MEMBER ( geneve::cruwrite )
|
WRITE8_MEMBER ( geneve_state::cruwrite )
|
||||||
{
|
{
|
||||||
int addroff = offset << 1;
|
int addroff = offset << 1;
|
||||||
|
|
||||||
@ -407,7 +407,7 @@ WRITE8_MEMBER ( geneve::cruwrite )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( geneve::cruread )
|
READ8_MEMBER( geneve_state::cruread )
|
||||||
{
|
{
|
||||||
UINT8 value = 0;
|
UINT8 value = 0;
|
||||||
int addroff = offset << 4;
|
int addroff = offset << 4;
|
||||||
@ -433,7 +433,7 @@ READ8_MEMBER( geneve::cruread )
|
|||||||
CRU callbacks
|
CRU callbacks
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
READ8_MEMBER( geneve::read_by_9901 )
|
READ8_MEMBER( geneve_state::read_by_9901 )
|
||||||
{
|
{
|
||||||
int answer = 0;
|
int answer = 0;
|
||||||
|
|
||||||
@ -495,7 +495,7 @@ READ8_MEMBER( geneve::read_by_9901 )
|
|||||||
/*
|
/*
|
||||||
Write PE bus reset line
|
Write PE bus reset line
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::peripheral_bus_reset )
|
WRITE_LINE_MEMBER( geneve_state::peripheral_bus_reset )
|
||||||
{
|
{
|
||||||
if (VERBOSE>0) LOG("geneve: peripheral bus reset request; not implemented yet.\n");
|
if (VERBOSE>0) LOG("geneve: peripheral bus reset request; not implemented yet.\n");
|
||||||
}
|
}
|
||||||
@ -503,7 +503,7 @@ WRITE_LINE_MEMBER( geneve::peripheral_bus_reset )
|
|||||||
/*
|
/*
|
||||||
Write VDP reset line
|
Write VDP reset line
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::VDP_reset )
|
WRITE_LINE_MEMBER( geneve_state::VDP_reset )
|
||||||
{
|
{
|
||||||
if (VERBOSE>0) LOG("geneve: Video reset request; not implemented yet.\n");
|
if (VERBOSE>0) LOG("geneve: Video reset request; not implemented yet.\n");
|
||||||
}
|
}
|
||||||
@ -511,7 +511,7 @@ WRITE_LINE_MEMBER( geneve::VDP_reset )
|
|||||||
/*
|
/*
|
||||||
Write joystick select line. 1 selects joystick 1 (pin 7), 0 selects joystick 2 (pin 2)
|
Write joystick select line. 1 selects joystick 1 (pin 7), 0 selects joystick 2 (pin 2)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::joystick_select )
|
WRITE_LINE_MEMBER( geneve_state::joystick_select )
|
||||||
{
|
{
|
||||||
m_joyport->write_port((state==ASSERT_LINE)? 1:2);
|
m_joyport->write_port((state==ASSERT_LINE)? 1:2);
|
||||||
}
|
}
|
||||||
@ -519,7 +519,7 @@ WRITE_LINE_MEMBER( geneve::joystick_select )
|
|||||||
/*
|
/*
|
||||||
Write external mem cycles (0=long, 1=short)
|
Write external mem cycles (0=long, 1=short)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::extbus_wait_states )
|
WRITE_LINE_MEMBER( geneve_state::extbus_wait_states )
|
||||||
{
|
{
|
||||||
if (VERBOSE>0) LOG("geneve: external bus wait states set to %d, not implemented yet.\n", state);
|
if (VERBOSE>0) LOG("geneve: external bus wait states set to %d, not implemented yet.\n", state);
|
||||||
}
|
}
|
||||||
@ -528,7 +528,7 @@ WRITE_LINE_MEMBER( geneve::extbus_wait_states )
|
|||||||
Write vdp wait cycles (1=add 14 cycles, 0=add none)
|
Write vdp wait cycles (1=add 14 cycles, 0=add none)
|
||||||
see above for waitstate handling
|
see above for waitstate handling
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::video_wait_states )
|
WRITE_LINE_MEMBER( geneve_state::video_wait_states )
|
||||||
{
|
{
|
||||||
if (VERBOSE>1) LOG("geneve: video wait states set to %d\n", state);
|
if (VERBOSE>1) LOG("geneve: video wait states set to %d\n", state);
|
||||||
m_mapper->set_video_waitstates(state==ASSERT_LINE);
|
m_mapper->set_video_waitstates(state==ASSERT_LINE);
|
||||||
@ -541,7 +541,7 @@ WRITE_LINE_MEMBER( geneve::video_wait_states )
|
|||||||
but again it is ignored. Anyway, the TMS9995 has only two external inputs
|
but again it is ignored. Anyway, the TMS9995 has only two external inputs
|
||||||
(INT1 and INT4).
|
(INT1 and INT4).
|
||||||
*/
|
*/
|
||||||
WRITE8_MEMBER( geneve::tms9901_interrupt )
|
WRITE8_MEMBER( geneve_state::tms9901_interrupt )
|
||||||
{
|
{
|
||||||
/* INTREQ is connected to INT1. */
|
/* INTREQ is connected to INT1. */
|
||||||
m_cpu->set_input_line(INPUT_LINE_99XX_INT1, data);
|
m_cpu->set_input_line(INPUT_LINE_99XX_INT1, data);
|
||||||
@ -553,19 +553,19 @@ const tms9901_interface tms9901_wiring_geneve =
|
|||||||
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INT8 | TMS9901_INTB | TMS9901_INTC, /* only input pins whose state is always known */
|
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INT8 | TMS9901_INTB | TMS9901_INTC, /* only input pins whose state is always known */
|
||||||
|
|
||||||
// read handler
|
// read handler
|
||||||
DEVCB_DRIVER_MEMBER(geneve, read_by_9901),
|
DEVCB_DRIVER_MEMBER(geneve_state, read_by_9901),
|
||||||
|
|
||||||
{ /* write handlers */
|
{ /* write handlers */
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, peripheral_bus_reset),
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, peripheral_bus_reset),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, VDP_reset),
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, VDP_reset),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, joystick_select),
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, joystick_select),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DEVICE_LINE_MEMBER(GKEYBOARD_TAG, geneve_keyboard_device, reset_line),
|
DEVCB_DEVICE_LINE_MEMBER(GKEYBOARD_TAG, geneve_keyboard_device, reset_line),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, extbus_wait_states),
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, extbus_wait_states),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, video_wait_states),
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, video_wait_states),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
@ -575,7 +575,7 @@ const tms9901_interface tms9901_wiring_geneve =
|
|||||||
},
|
},
|
||||||
|
|
||||||
/* interrupt handler */
|
/* interrupt handler */
|
||||||
DEVCB_DRIVER_MEMBER(geneve, tms9901_interrupt)
|
DEVCB_DRIVER_MEMBER(geneve_state, tms9901_interrupt)
|
||||||
};
|
};
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
@ -584,7 +584,7 @@ const tms9901_interface tms9901_wiring_geneve =
|
|||||||
/*
|
/*
|
||||||
inta is connected to both tms9901 IRQ1 line and to tms9995 INT4/EC line.
|
inta is connected to both tms9901 IRQ1 line and to tms9995 INT4/EC line.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::inta )
|
WRITE_LINE_MEMBER( geneve_state::inta )
|
||||||
{
|
{
|
||||||
m_inta = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
m_inta = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
||||||
m_tms9901->set_single_int(1, state);
|
m_tms9901->set_single_int(1, state);
|
||||||
@ -594,20 +594,20 @@ WRITE_LINE_MEMBER( geneve::inta )
|
|||||||
/*
|
/*
|
||||||
intb is connected to tms9901 IRQ12 line.
|
intb is connected to tms9901 IRQ12 line.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::intb )
|
WRITE_LINE_MEMBER( geneve_state::intb )
|
||||||
{
|
{
|
||||||
m_intb = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
m_intb = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
||||||
m_tms9901->set_single_int(12, state);
|
m_tms9901->set_single_int(12, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( geneve::ext_ready )
|
WRITE_LINE_MEMBER( geneve_state::ext_ready )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_8: READY level (ext) =%02x\n", state);
|
if (VERBOSE>6) LOG("ti99_8: READY level (ext) =%02x\n", state);
|
||||||
m_ready_line = state;
|
m_ready_line = state;
|
||||||
m_cpu->set_ready((m_ready_line == ASSERT_LINE && m_ready_line1 == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE);
|
m_cpu->set_ready((m_ready_line == ASSERT_LINE && m_ready_line1 == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( geneve::mapper_ready )
|
WRITE_LINE_MEMBER( geneve_state::mapper_ready )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("geneve: READY level (mapper) = %02x\n", state);
|
if (VERBOSE>6) LOG("geneve: READY level (mapper) = %02x\n", state);
|
||||||
m_ready_line1 = state;
|
m_ready_line1 = state;
|
||||||
@ -617,7 +617,7 @@ WRITE_LINE_MEMBER( geneve::mapper_ready )
|
|||||||
/*
|
/*
|
||||||
set the state of int2 (called by the v9938 core)
|
set the state of int2 (called by the v9938 core)
|
||||||
*/
|
*/
|
||||||
void geneve::set_tms9901_INT2_from_v9938(v99x8_device &vdp, int state)
|
void geneve_state::set_tms9901_INT2_from_v9938(v99x8_device &vdp, int state)
|
||||||
{
|
{
|
||||||
m_int2 = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
m_int2 = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
||||||
m_tms9901->set_single_int(2, state);
|
m_tms9901->set_single_int(2, state);
|
||||||
@ -626,7 +626,7 @@ void geneve::set_tms9901_INT2_from_v9938(v99x8_device &vdp, int state)
|
|||||||
/*
|
/*
|
||||||
Interrupt from the keyboard.
|
Interrupt from the keyboard.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::keyboard_interrupt )
|
WRITE_LINE_MEMBER( geneve_state::keyboard_interrupt )
|
||||||
{
|
{
|
||||||
m_keyint = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
m_keyint = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
||||||
m_tms9901->set_single_int(8, state);
|
m_tms9901->set_single_int(8, state);
|
||||||
@ -635,7 +635,7 @@ WRITE_LINE_MEMBER( geneve::keyboard_interrupt )
|
|||||||
/*
|
/*
|
||||||
scanline interrupt
|
scanline interrupt
|
||||||
*/
|
*/
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(geneve::geneve_hblank_interrupt)
|
TIMER_DEVICE_CALLBACK_MEMBER(geneve_state::geneve_hblank_interrupt)
|
||||||
{
|
{
|
||||||
int scanline = param;
|
int scanline = param;
|
||||||
|
|
||||||
@ -653,7 +653,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(geneve::geneve_hblank_interrupt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( geneve::external_operation )
|
WRITE8_MEMBER( geneve_state::external_operation )
|
||||||
{
|
{
|
||||||
static const char* extop[8] = { "inv1", "inv2", "IDLE", "RSET", "inv3", "CKON", "CKOF", "LREX" };
|
static const char* extop[8] = { "inv1", "inv2", "IDLE", "RSET", "inv3", "CKON", "CKOF", "LREX" };
|
||||||
if (VERBOSE>1)
|
if (VERBOSE>1)
|
||||||
@ -663,16 +663,16 @@ WRITE8_MEMBER( geneve::external_operation )
|
|||||||
/*
|
/*
|
||||||
Clock line from the CPU. Used to control wait state generation.
|
Clock line from the CPU. Used to control wait state generation.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( geneve::clock_out )
|
WRITE_LINE_MEMBER( geneve_state::clock_out )
|
||||||
{
|
{
|
||||||
m_mapper->clock_in(state);
|
m_mapper->clock_in(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TMS9995_CONFIG( geneve_processor_config )
|
static TMS9995_CONFIG( geneve_processor_config )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_MEMBER(geneve, external_operation),
|
DEVCB_DRIVER_MEMBER(geneve_state, external_operation),
|
||||||
DEVCB_NULL, // Instruction acquisition
|
DEVCB_NULL, // Instruction acquisition
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, clock_out),
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, clock_out),
|
||||||
DEVCB_NULL, // wait
|
DEVCB_NULL, // wait
|
||||||
DEVCB_NULL, // HOLDA
|
DEVCB_NULL, // HOLDA
|
||||||
INTERNAL_RAM, // use internal RAM
|
INTERNAL_RAM, // use internal RAM
|
||||||
@ -681,7 +681,7 @@ static TMS9995_CONFIG( geneve_processor_config )
|
|||||||
|
|
||||||
static TI_SOUND_CONFIG( sound_conf )
|
static TI_SOUND_CONFIG( sound_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, ext_ready) // READY
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, ext_ready) // READY
|
||||||
};
|
};
|
||||||
|
|
||||||
static const mm58274c_interface geneve_mm58274c_interface =
|
static const mm58274c_interface geneve_mm58274c_interface =
|
||||||
@ -692,20 +692,20 @@ static const mm58274c_interface geneve_mm58274c_interface =
|
|||||||
|
|
||||||
static GENEVE_KEYBOARD_CONFIG( geneve_keyb_conf )
|
static GENEVE_KEYBOARD_CONFIG( geneve_keyb_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, keyboard_interrupt)
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, keyboard_interrupt)
|
||||||
};
|
};
|
||||||
|
|
||||||
static PERIBOX_CONFIG( peribox_conf )
|
static PERIBOX_CONFIG( peribox_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, inta), // INTA
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, inta), // INTA
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, intb), // INTB
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, intb), // INTB
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, ext_ready), // READY
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, ext_ready), // READY
|
||||||
0x00000 // Address bus prefix (Mapper will produce prefixes)
|
0x00000 // Address bus prefix (Mapper will produce prefixes)
|
||||||
};
|
};
|
||||||
|
|
||||||
static GENEVE_MAPPER_CONFIG( mapper_conf )
|
static GENEVE_MAPPER_CONFIG( mapper_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(geneve, mapper_ready) // READY
|
DEVCB_DRIVER_LINE_MEMBER(geneve_state, mapper_ready) // READY
|
||||||
};
|
};
|
||||||
|
|
||||||
static JOYPORT_CONFIG( joyport_60 )
|
static JOYPORT_CONFIG( joyport_60 )
|
||||||
@ -714,11 +714,11 @@ static JOYPORT_CONFIG( joyport_60 )
|
|||||||
60
|
60
|
||||||
};
|
};
|
||||||
|
|
||||||
DRIVER_INIT_MEMBER(geneve,geneve)
|
DRIVER_INIT_MEMBER(geneve_state,geneve)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void geneve::machine_start()
|
void geneve_state::machine_start()
|
||||||
{
|
{
|
||||||
m_tms9901 = static_cast<tms9901_device*>(machine().device(TMS9901_TAG));
|
m_tms9901 = static_cast<tms9901_device*>(machine().device(TMS9901_TAG));
|
||||||
m_mapper = static_cast<geneve_mapper_device*>(machine().device(GMAPPER_TAG));
|
m_mapper = static_cast<geneve_mapper_device*>(machine().device(GMAPPER_TAG));
|
||||||
@ -732,7 +732,7 @@ void geneve::machine_start()
|
|||||||
/*
|
/*
|
||||||
Reset the machine.
|
Reset the machine.
|
||||||
*/
|
*/
|
||||||
void geneve::machine_reset()
|
void geneve_state::machine_reset()
|
||||||
{
|
{
|
||||||
m_inta = CLEAR_LINE; // flag reflecting the INTA line
|
m_inta = CLEAR_LINE; // flag reflecting the INTA line
|
||||||
m_intb = CLEAR_LINE; // flag reflecting the INTB line
|
m_intb = CLEAR_LINE; // flag reflecting the INTB line
|
||||||
@ -750,7 +750,7 @@ void geneve::machine_reset()
|
|||||||
m_joyport->write_port(0x01); // select Joystick 1
|
m_joyport->write_port(0x01); // select Joystick 1
|
||||||
}
|
}
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( geneve_60hz, geneve )
|
static MACHINE_CONFIG_START( geneve_60hz, geneve_state )
|
||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
// TMS9995 CPU @ 12.0 MHz
|
// TMS9995 CPU @ 12.0 MHz
|
||||||
MCFG_TMS9995_ADD("maincpu", TMS9995, 12000000, memmap, crumap, geneve_processor_config)
|
MCFG_TMS9995_ADD("maincpu", TMS9995, 12000000, memmap, crumap, geneve_processor_config)
|
||||||
@ -762,8 +762,8 @@ static MACHINE_CONFIG_START( geneve_60hz, geneve )
|
|||||||
// interlace mode, but in non-interlace modes only half of the lines are
|
// interlace mode, but in non-interlace modes only half of the lines are
|
||||||
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
||||||
// not 60 Hz. This should be fixed in the v9938 emulation.
|
// not 60 Hz. This should be fixed in the v9938 emulation.
|
||||||
MCFG_TI_V9938_ADD(VIDEO_SYSTEM_TAG, 30, SCREEN_TAG, 2500, 512+32, (212+28)*2, DEVICE_SELF, geneve, set_tms9901_INT2_from_v9938)
|
MCFG_TI_V9938_ADD(VIDEO_SYSTEM_TAG, 30, SCREEN_TAG, 2500, 512+32, (212+28)*2, DEVICE_SELF, geneve_state, set_tms9901_INT2_from_v9938)
|
||||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", geneve, geneve_hblank_interrupt, SCREEN_TAG, 0, 1) /* 262.5 in 60Hz, 312.5 in 50Hz */
|
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", geneve_state, geneve_hblank_interrupt, SCREEN_TAG, 0, 1) /* 262.5 in 60Hz, 312.5 in 50Hz */
|
||||||
|
|
||||||
// Main board components
|
// Main board components
|
||||||
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_geneve, 3000000)
|
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_geneve, 3000000)
|
||||||
@ -802,4 +802,4 @@ ROM_START(geneve)
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
||||||
COMP( 1987,geneve, 0, 0, geneve_60hz, geneve, geneve, geneve, "Myarc", "Geneve 9640" , 0)
|
COMP( 1987,geneve, 0, 0, geneve_60hz, geneve, geneve_state, geneve, "Myarc", "Geneve 9640" , 0)
|
||||||
|
@ -57,10 +57,10 @@
|
|||||||
#define VERBOSE 1
|
#define VERBOSE 1
|
||||||
#define LOG logerror
|
#define LOG logerror
|
||||||
|
|
||||||
class ti99_4p : public driver_device
|
class ti99_4p_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ti99_4p(const machine_config &mconfig, device_type type, const char *tag)
|
ti99_4p_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag) { }
|
: driver_device(mconfig, type, tag) { }
|
||||||
|
|
||||||
DECLARE_WRITE_LINE_MEMBER( console_ready );
|
DECLARE_WRITE_LINE_MEMBER( console_ready );
|
||||||
@ -168,11 +168,11 @@ private:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static ADDRESS_MAP_START(memmap, AS_PROGRAM, 16, ti99_4p)
|
static ADDRESS_MAP_START(memmap, AS_PROGRAM, 16, ti99_4p_state)
|
||||||
AM_RANGE(0x0000, 0xffff) AM_READWRITE( memread, memwrite )
|
AM_RANGE(0x0000, 0xffff) AM_READWRITE( memread, memwrite )
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START(cru_map, AS_IO, 8, ti99_4p)
|
static ADDRESS_MAP_START(cru_map, AS_IO, 8, ti99_4p_state)
|
||||||
AM_RANGE(0x0000, 0x003f) AM_DEVREAD(TMS9901_TAG, tms9901_device, read)
|
AM_RANGE(0x0000, 0x003f) AM_DEVREAD(TMS9901_TAG, tms9901_device, read)
|
||||||
AM_RANGE(0x0000, 0x01ff) AM_READ( cruread )
|
AM_RANGE(0x0000, 0x01ff) AM_READ( cruread )
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ INPUT_PORTS_END
|
|||||||
/*
|
/*
|
||||||
Memory access
|
Memory access
|
||||||
*/
|
*/
|
||||||
READ16_MEMBER( ti99_4p::memread )
|
READ16_MEMBER( ti99_4p_state::memread )
|
||||||
{
|
{
|
||||||
int addroff = offset << 1;
|
int addroff = offset << 1;
|
||||||
if (m_rom0 == NULL) return 0; // premature access
|
if (m_rom0 == NULL) return 0; // premature access
|
||||||
@ -336,7 +336,7 @@ READ16_MEMBER( ti99_4p::memread )
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE16_MEMBER( ti99_4p::memwrite )
|
WRITE16_MEMBER( ti99_4p_state::memwrite )
|
||||||
{
|
{
|
||||||
// m_cpu->execute().adjust_icount(-4);
|
// m_cpu->execute().adjust_icount(-4);
|
||||||
|
|
||||||
@ -416,7 +416,7 @@ WRITE16_MEMBER( ti99_4p::memwrite )
|
|||||||
The datamux is connected to the clock line in order to operate
|
The datamux is connected to the clock line in order to operate
|
||||||
the wait state counter.
|
the wait state counter.
|
||||||
*/
|
*/
|
||||||
void ti99_4p::clock_in(int clock)
|
void ti99_4p_state::clock_in(int clock)
|
||||||
{
|
{
|
||||||
if (clock==ASSERT_LINE && m_waitcount!=0)
|
if (clock==ASSERT_LINE && m_waitcount!=0)
|
||||||
{
|
{
|
||||||
@ -426,7 +426,7 @@ void ti99_4p::clock_in(int clock)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
READ16_MEMBER( ti99_4p::datamux_read )
|
READ16_MEMBER( ti99_4p_state::datamux_read )
|
||||||
{
|
{
|
||||||
UINT8 hbyte = 0;
|
UINT8 hbyte = 0;
|
||||||
UINT16 addroff = (offset << 1);
|
UINT16 addroff = (offset << 1);
|
||||||
@ -451,7 +451,7 @@ READ16_MEMBER( ti99_4p::datamux_read )
|
|||||||
Write access.
|
Write access.
|
||||||
TODO: use the 16-bit expansion in the box for suitable cards
|
TODO: use the 16-bit expansion in the box for suitable cards
|
||||||
*/
|
*/
|
||||||
WRITE16_MEMBER( ti99_4p::datamux_write )
|
WRITE16_MEMBER( ti99_4p_state::datamux_write )
|
||||||
{
|
{
|
||||||
UINT16 addroff = (offset << 1);
|
UINT16 addroff = (offset << 1);
|
||||||
// printf("write address = %04x, value = %04x, memmask = %4x\n", addroff, data, mem_mask);
|
// printf("write address = %04x, value = %04x, memmask = %4x\n", addroff, data, mem_mask);
|
||||||
@ -479,7 +479,7 @@ WRITE16_MEMBER( ti99_4p::datamux_write )
|
|||||||
/*
|
/*
|
||||||
CRU write
|
CRU write
|
||||||
*/
|
*/
|
||||||
WRITE8_MEMBER( ti99_4p::cruwrite )
|
WRITE8_MEMBER( ti99_4p_state::cruwrite )
|
||||||
{
|
{
|
||||||
int addroff = offset<<1;
|
int addroff = offset<<1;
|
||||||
|
|
||||||
@ -503,7 +503,7 @@ WRITE8_MEMBER( ti99_4p::cruwrite )
|
|||||||
m_peribox->cruwrite(addroff, data);
|
m_peribox->cruwrite(addroff, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( ti99_4p::cruread )
|
READ8_MEMBER( ti99_4p_state::cruread )
|
||||||
{
|
{
|
||||||
UINT8 value = 0;
|
UINT8 value = 0;
|
||||||
m_peribox->crureadz(offset<<4, &value);
|
m_peribox->crureadz(offset<<4, &value);
|
||||||
@ -519,7 +519,7 @@ READ8_MEMBER( ti99_4p::cruread )
|
|||||||
0x2000-0x3fff and 0xa000-0xffff, and the mapper area is at 0x4000-0x401e
|
0x2000-0x3fff and 0xa000-0xffff, and the mapper area is at 0x4000-0x401e
|
||||||
(only even addresses).
|
(only even addresses).
|
||||||
*/
|
*/
|
||||||
READ16_MEMBER( ti99_4p::samsmem_read )
|
READ16_MEMBER( ti99_4p_state::samsmem_read )
|
||||||
{
|
{
|
||||||
UINT32 address = 0;
|
UINT32 address = 0;
|
||||||
int addroff = offset << 1;
|
int addroff = offset << 1;
|
||||||
@ -536,7 +536,7 @@ READ16_MEMBER( ti99_4p::samsmem_read )
|
|||||||
/*
|
/*
|
||||||
Memory write
|
Memory write
|
||||||
*/
|
*/
|
||||||
WRITE16_MEMBER( ti99_4p::samsmem_write )
|
WRITE16_MEMBER( ti99_4p_state::samsmem_write )
|
||||||
{
|
{
|
||||||
UINT32 address = 0;
|
UINT32 address = 0;
|
||||||
int addroff = offset << 1;
|
int addroff = offset << 1;
|
||||||
@ -555,7 +555,7 @@ WRITE16_MEMBER( ti99_4p::samsmem_write )
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static const char *const column[] = { "COL0", "COL1", "COL2", "COL3", "COL4", "COL5" };
|
static const char *const column[] = { "COL0", "COL1", "COL2", "COL3", "COL4", "COL5" };
|
||||||
|
|
||||||
READ8_MEMBER( ti99_4p::read_by_9901 )
|
READ8_MEMBER( ti99_4p_state::read_by_9901 )
|
||||||
{
|
{
|
||||||
int answer=0;
|
int answer=0;
|
||||||
|
|
||||||
@ -613,7 +613,7 @@ READ8_MEMBER( ti99_4p::read_by_9901 )
|
|||||||
/*
|
/*
|
||||||
WRITE key column select (P2-P4)
|
WRITE key column select (P2-P4)
|
||||||
*/
|
*/
|
||||||
void ti99_4p::set_keyboard_column(int number, int data)
|
void ti99_4p_state::set_keyboard_column(int number, int data)
|
||||||
{
|
{
|
||||||
if (data!=0) m_keyboard_column |= 1 << number;
|
if (data!=0) m_keyboard_column |= 1 << number;
|
||||||
else m_keyboard_column &= ~(1 << number);
|
else m_keyboard_column &= ~(1 << number);
|
||||||
@ -624,17 +624,17 @@ void ti99_4p::set_keyboard_column(int number, int data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4p::keyC0 )
|
WRITE_LINE_MEMBER( ti99_4p_state::keyC0 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(0, state);
|
set_keyboard_column(0, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4p::keyC1 )
|
WRITE_LINE_MEMBER( ti99_4p_state::keyC1 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(1, state);
|
set_keyboard_column(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4p::keyC2 )
|
WRITE_LINE_MEMBER( ti99_4p_state::keyC2 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(2, state);
|
set_keyboard_column(2, state);
|
||||||
}
|
}
|
||||||
@ -642,7 +642,7 @@ WRITE_LINE_MEMBER( ti99_4p::keyC2 )
|
|||||||
/*
|
/*
|
||||||
WRITE alpha lock line (P5)
|
WRITE alpha lock line (P5)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4p::alphaW )
|
WRITE_LINE_MEMBER( ti99_4p_state::alphaW )
|
||||||
{
|
{
|
||||||
m_check_alphalock = (state==0);
|
m_check_alphalock = (state==0);
|
||||||
}
|
}
|
||||||
@ -650,7 +650,7 @@ WRITE_LINE_MEMBER( ti99_4p::alphaW )
|
|||||||
/*
|
/*
|
||||||
command CS1 (only) tape unit motor (P6)
|
command CS1 (only) tape unit motor (P6)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4p::cs_motor )
|
WRITE_LINE_MEMBER( ti99_4p_state::cs_motor )
|
||||||
{
|
{
|
||||||
m_cassette->change_state((state!=0)? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
|
m_cassette->change_state((state!=0)? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
|
||||||
}
|
}
|
||||||
@ -664,14 +664,14 @@ WRITE_LINE_MEMBER( ti99_4p::cs_motor )
|
|||||||
We do not really need to emulate this as the tape recorder generates sound
|
We do not really need to emulate this as the tape recorder generates sound
|
||||||
on its own.
|
on its own.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4p::audio_gate )
|
WRITE_LINE_MEMBER( ti99_4p_state::audio_gate )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
tape output (P9)
|
tape output (P9)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4p::cassette_output )
|
WRITE_LINE_MEMBER( ti99_4p_state::cassette_output )
|
||||||
{
|
{
|
||||||
m_cassette->output((state!=0)? +1 : -1);
|
m_cassette->output((state!=0)? +1 : -1);
|
||||||
}
|
}
|
||||||
@ -682,19 +682,19 @@ const tms9901_interface tms9901_wiring_sgcpu =
|
|||||||
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC, /* only input pins whose state is always known */
|
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC, /* only input pins whose state is always known */
|
||||||
|
|
||||||
// read handler
|
// read handler
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4p, read_by_9901),
|
DEVCB_DRIVER_MEMBER(ti99_4p_state, read_by_9901),
|
||||||
|
|
||||||
{ // write handlers
|
{ // write handlers
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, keyC0),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, keyC0),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, keyC1),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, keyC1),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, keyC2),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, keyC2),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, alphaW),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, alphaW),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, cs_motor),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, cs_motor),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, audio_gate),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, audio_gate),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, cassette_output),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, cassette_output),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
@ -704,7 +704,7 @@ const tms9901_interface tms9901_wiring_sgcpu =
|
|||||||
},
|
},
|
||||||
|
|
||||||
/* interrupt handler */
|
/* interrupt handler */
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4p, tms9901_interrupt)
|
DEVCB_DRIVER_MEMBER(ti99_4p_state, tms9901_interrupt)
|
||||||
};
|
};
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -717,7 +717,7 @@ const tms9901_interface tms9901_wiring_sgcpu =
|
|||||||
no chance to make another device pull down the same line; the CPU just
|
no chance to make another device pull down the same line; the CPU just
|
||||||
won't access any other device in this time.
|
won't access any other device in this time.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4p::console_ready )
|
WRITE_LINE_MEMBER( ti99_4p_state::console_ready )
|
||||||
{
|
{
|
||||||
m_ready_line = state;
|
m_ready_line = state;
|
||||||
int combined = (m_ready_line == ASSERT_LINE && m_ready_line_dmux == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE;
|
int combined = (m_ready_line == ASSERT_LINE && m_ready_line_dmux == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE;
|
||||||
@ -735,7 +735,7 @@ WRITE_LINE_MEMBER( ti99_4p::console_ready )
|
|||||||
the READY line, and the datamux raises READY depending on the clock pulse.
|
the READY line, and the datamux raises READY depending on the clock pulse.
|
||||||
So we must make sure this does not interfere.
|
So we must make sure this does not interfere.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4p::console_ready_dmux )
|
WRITE_LINE_MEMBER( ti99_4p_state::console_ready_dmux )
|
||||||
{
|
{
|
||||||
m_ready_line_dmux = state;
|
m_ready_line_dmux = state;
|
||||||
int combined = (m_ready_line == ASSERT_LINE && m_ready_line_dmux == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE;
|
int combined = (m_ready_line == ASSERT_LINE && m_ready_line_dmux == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE;
|
||||||
@ -749,14 +749,14 @@ WRITE_LINE_MEMBER( ti99_4p::console_ready_dmux )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4p::extint )
|
WRITE_LINE_MEMBER( ti99_4p_state::extint )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_4p: EXTINT level = %02x\n", state);
|
if (VERBOSE>6) LOG("ti99_4p: EXTINT level = %02x\n", state);
|
||||||
if (m_tms9901 != NULL)
|
if (m_tms9901 != NULL)
|
||||||
m_tms9901->set_single_int(1, state);
|
m_tms9901->set_single_int(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4p::notconnected )
|
WRITE_LINE_MEMBER( ti99_4p_state::notconnected )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_4p: Setting a not connected line ... ignored\n");
|
if (VERBOSE>6) LOG("ti99_4p: Setting a not connected line ... ignored\n");
|
||||||
}
|
}
|
||||||
@ -764,12 +764,12 @@ WRITE_LINE_MEMBER( ti99_4p::notconnected )
|
|||||||
/*
|
/*
|
||||||
Clock line from the CPU. Used to control wait state generation.
|
Clock line from the CPU. Used to control wait state generation.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4p::clock_out )
|
WRITE_LINE_MEMBER( ti99_4p_state::clock_out )
|
||||||
{
|
{
|
||||||
clock_in(state);
|
clock_in(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( ti99_4p::tms9901_interrupt )
|
WRITE8_MEMBER( ti99_4p_state::tms9901_interrupt )
|
||||||
{
|
{
|
||||||
// offset contains the interrupt level (0-15)
|
// offset contains the interrupt level (0-15)
|
||||||
// However, the TI board just ignores that level and hardwires it to 1
|
// However, the TI board just ignores that level and hardwires it to 1
|
||||||
@ -777,14 +777,14 @@ WRITE8_MEMBER( ti99_4p::tms9901_interrupt )
|
|||||||
m_cpu->set_input_line(INPUT_LINE_99XX_INTREQ, data);
|
m_cpu->set_input_line(INPUT_LINE_99XX_INTREQ, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( ti99_4p::interrupt_level )
|
READ8_MEMBER( ti99_4p_state::interrupt_level )
|
||||||
{
|
{
|
||||||
// On the TI-99 systems these IC lines are not used; the input lines
|
// On the TI-99 systems these IC lines are not used; the input lines
|
||||||
// at the CPU are hardwired to level 1.
|
// at the CPU are hardwired to level 1.
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( ti99_4p::external_operation )
|
WRITE8_MEMBER( ti99_4p_state::external_operation )
|
||||||
{
|
{
|
||||||
static const char* extop[8] = { "inv1", "inv2", "IDLE", "RSET", "inv3", "CKON", "CKOF", "LREX" };
|
static const char* extop[8] = { "inv1", "inv2", "IDLE", "RSET", "inv3", "CKON", "CKOF", "LREX" };
|
||||||
if (VERBOSE>1) LOG("External operation %s not implemented on the SGCPU board\n", extop[offset]);
|
if (VERBOSE>1) LOG("External operation %s not implemented on the SGCPU board\n", extop[offset]);
|
||||||
@ -794,23 +794,23 @@ WRITE8_MEMBER( ti99_4p::external_operation )
|
|||||||
|
|
||||||
static PERIBOX_CONFIG( peribox_conf )
|
static PERIBOX_CONFIG( peribox_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, extint), // INTA
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, extint), // INTA
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, notconnected), // INTB
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, notconnected), // INTB
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, console_ready), // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, console_ready), // READY
|
||||||
0x70000 // Address bus prefix (AMA/AMB/AMC)
|
0x70000 // Address bus prefix (AMA/AMB/AMC)
|
||||||
};
|
};
|
||||||
|
|
||||||
static TMS99xx_CONFIG( sgcpu_cpuconf )
|
static TMS99xx_CONFIG( sgcpu_cpuconf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4p, external_operation),
|
DEVCB_DRIVER_MEMBER(ti99_4p_state, external_operation),
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4p, interrupt_level),
|
DEVCB_DRIVER_MEMBER(ti99_4p_state, interrupt_level),
|
||||||
DEVCB_NULL, // Instruction acquisition
|
DEVCB_NULL, // Instruction acquisition
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, clock_out),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, clock_out),
|
||||||
DEVCB_NULL, // wait
|
DEVCB_NULL, // wait
|
||||||
DEVCB_NULL // Hold acknowledge
|
DEVCB_NULL // Hold acknowledge
|
||||||
};
|
};
|
||||||
|
|
||||||
void ti99_4p::machine_start()
|
void ti99_4p_state::machine_start()
|
||||||
{
|
{
|
||||||
|
|
||||||
m_cpu = static_cast<tms9900_device*>(machine().device("maincpu"));
|
m_cpu = static_cast<tms9900_device*>(machine().device("maincpu"));
|
||||||
@ -841,14 +841,14 @@ void ti99_4p::machine_start()
|
|||||||
/*
|
/*
|
||||||
set the state of int2 (called by the v9938)
|
set the state of int2 (called by the v9938)
|
||||||
*/
|
*/
|
||||||
void ti99_4p::set_tms9901_INT2_from_v9938(v99x8_device &vdp, int state)
|
void ti99_4p_state::set_tms9901_INT2_from_v9938(v99x8_device &vdp, int state)
|
||||||
{
|
{
|
||||||
m_tms9901->set_single_int(2, state);
|
m_tms9901->set_single_int(2, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TI_SOUND_CONFIG( sound_conf )
|
static TI_SOUND_CONFIG( sound_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, console_ready) // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, console_ready) // READY
|
||||||
};
|
};
|
||||||
|
|
||||||
static JOYPORT_CONFIG( joyport4a_60 )
|
static JOYPORT_CONFIG( joyport4a_60 )
|
||||||
@ -860,7 +860,7 @@ static JOYPORT_CONFIG( joyport4a_60 )
|
|||||||
/*
|
/*
|
||||||
Reset the machine.
|
Reset the machine.
|
||||||
*/
|
*/
|
||||||
MACHINE_RESET_MEMBER(ti99_4p,ti99_4p)
|
MACHINE_RESET_MEMBER(ti99_4p_state,ti99_4p)
|
||||||
{
|
{
|
||||||
m_tms9901->set_single_int(12, 0);
|
m_tms9901->set_single_int(12, 0);
|
||||||
|
|
||||||
@ -868,7 +868,7 @@ MACHINE_RESET_MEMBER(ti99_4p,ti99_4p)
|
|||||||
m_cpu->set_hold(CLEAR_LINE);
|
m_cpu->set_hold(CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(ti99_4p::sgcpu_hblank_interrupt)
|
TIMER_DEVICE_CALLBACK_MEMBER(ti99_4p_state::sgcpu_hblank_interrupt)
|
||||||
{
|
{
|
||||||
machine().device<v9938_device>(VDP_TAG)->interrupt();
|
machine().device<v9938_device>(VDP_TAG)->interrupt();
|
||||||
}
|
}
|
||||||
@ -876,7 +876,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ti99_4p::sgcpu_hblank_interrupt)
|
|||||||
/*
|
/*
|
||||||
Machine description.
|
Machine description.
|
||||||
*/
|
*/
|
||||||
static MACHINE_CONFIG_START( ti99_4p_60hz, ti99_4p )
|
static MACHINE_CONFIG_START( ti99_4p_60hz, ti99_4p_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
/* TMS9900 CPU @ 3.0 MHz */
|
/* TMS9900 CPU @ 3.0 MHz */
|
||||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, sgcpu_cpuconf)
|
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, sgcpu_cpuconf)
|
||||||
@ -887,8 +887,8 @@ static MACHINE_CONFIG_START( ti99_4p_60hz, ti99_4p )
|
|||||||
// interlace mode, but in non-interlace modes only half of the lines are
|
// interlace mode, but in non-interlace modes only half of the lines are
|
||||||
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
||||||
// not 60 Hz. This should be fixed in the v9938 emulation.
|
// not 60 Hz. This should be fixed in the v9938 emulation.
|
||||||
MCFG_TI_V9938_ADD(VIDEO_SYSTEM_TAG, 30, SCREEN_TAG, 2500, 512+32, (212+28)*2, DEVICE_SELF, ti99_4p, set_tms9901_INT2_from_v9938)
|
MCFG_TI_V9938_ADD(VIDEO_SYSTEM_TAG, 30, SCREEN_TAG, 2500, 512+32, (212+28)*2, DEVICE_SELF, ti99_4p_state, set_tms9901_INT2_from_v9938)
|
||||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ti99_4p, sgcpu_hblank_interrupt, SCREEN_TAG, 0, 1)
|
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ti99_4p_state, sgcpu_hblank_interrupt, SCREEN_TAG, 0, 1)
|
||||||
|
|
||||||
// tms9901
|
// tms9901
|
||||||
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_sgcpu, 3000000)
|
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_sgcpu, 3000000)
|
||||||
|
@ -60,10 +60,10 @@
|
|||||||
/*
|
/*
|
||||||
The console.
|
The console.
|
||||||
*/
|
*/
|
||||||
class ti99_4x : public driver_device
|
class ti99_4x_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ti99_4x(const machine_config &mconfig, device_type type, const char *tag)
|
ti99_4x_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag) { }
|
: driver_device(mconfig, type, tag) { }
|
||||||
|
|
||||||
// CRU (Communication Register Unit) handling
|
// CRU (Communication Register Unit) handling
|
||||||
@ -132,7 +132,7 @@ private:
|
|||||||
to the 16bit bus, and the wait state logic is not active during their
|
to the 16bit bus, and the wait state logic is not active during their
|
||||||
accesses.
|
accesses.
|
||||||
*/
|
*/
|
||||||
static ADDRESS_MAP_START(memmap, AS_PROGRAM, 16, ti99_4x)
|
static ADDRESS_MAP_START(memmap, AS_PROGRAM, 16, ti99_4x_state)
|
||||||
ADDRESS_MAP_GLOBAL_MASK(0xffff)
|
ADDRESS_MAP_GLOBAL_MASK(0xffff)
|
||||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x80ff) AM_MIRROR(0x0300) AM_RAM
|
AM_RANGE(0x8000, 0x80ff) AM_MIRROR(0x0300) AM_RAM
|
||||||
@ -159,7 +159,7 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
Write:0000 - 01ff corresponds to bit 0 of base address 0000 - 03fe
|
Write:0000 - 01ff corresponds to bit 0 of base address 0000 - 03fe
|
||||||
*/
|
*/
|
||||||
static ADDRESS_MAP_START(cru_map, AS_IO, 8, ti99_4x)
|
static ADDRESS_MAP_START(cru_map, AS_IO, 8, ti99_4x_state)
|
||||||
AM_RANGE(0x0000, 0x003f) AM_DEVREAD(TMS9901_TAG, tms9901_device, read)
|
AM_RANGE(0x0000, 0x003f) AM_DEVREAD(TMS9901_TAG, tms9901_device, read)
|
||||||
AM_RANGE(0x0000, 0x01ff) AM_READ(cruread)
|
AM_RANGE(0x0000, 0x01ff) AM_READ(cruread)
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ static INPUT_PORTS_START(ti99_4a)
|
|||||||
PORT_CONFSETTING( 0x01, DEF_STR( On ) )
|
PORT_CONFSETTING( 0x01, DEF_STR( On ) )
|
||||||
|
|
||||||
PORT_START( "LOADINT ")
|
PORT_START( "LOADINT ")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Load interrupt") PORT_CODE(KEYCODE_PRTSCR) PORT_CHANGED_MEMBER(DEVICE_SELF, ti99_4x, load_interrupt, 1)
|
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Load interrupt") PORT_CODE(KEYCODE_PRTSCR) PORT_CHANGED_MEMBER(DEVICE_SELF, ti99_4x_state, load_interrupt, 1)
|
||||||
|
|
||||||
PORT_START("COL0") // col 0
|
PORT_START("COL0") // col 0
|
||||||
PORT_BIT(0x88, IP_ACTIVE_LOW, IPT_UNUSED)
|
PORT_BIT(0x88, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
@ -310,39 +310,39 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
static GROM_CONFIG(grom0_config)
|
static GROM_CONFIG(grom0_config)
|
||||||
{
|
{
|
||||||
false, 0, region_grom, 0x0000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready), GROMFREQ
|
false, 0, region_grom, 0x0000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready), GROMFREQ
|
||||||
};
|
};
|
||||||
|
|
||||||
static GROM_CONFIG(grom1_config)
|
static GROM_CONFIG(grom1_config)
|
||||||
{
|
{
|
||||||
false, 1, region_grom, 0x2000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready), GROMFREQ
|
false, 1, region_grom, 0x2000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready), GROMFREQ
|
||||||
};
|
};
|
||||||
|
|
||||||
static GROM_CONFIG(grom2_config)
|
static GROM_CONFIG(grom2_config)
|
||||||
{
|
{
|
||||||
false, 2, region_grom, 0x4000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready), GROMFREQ
|
false, 2, region_grom, 0x4000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready), GROMFREQ
|
||||||
};
|
};
|
||||||
|
|
||||||
static GROMPORT_CONFIG(console_cartslot)
|
static GROMPORT_CONFIG(console_cartslot)
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_reset)
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_reset)
|
||||||
};
|
};
|
||||||
|
|
||||||
static PERIBOX_CONFIG( peribox_conf )
|
static PERIBOX_CONFIG( peribox_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, extint), // INTA
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, extint), // INTA
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, notconnected), // INTB
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, notconnected), // INTB
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready), // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready), // READY
|
||||||
0x70000 // Address bus prefix (AMA/AMB/AMC)
|
0x70000 // Address bus prefix (AMA/AMB/AMC)
|
||||||
};
|
};
|
||||||
|
|
||||||
static TI_SOUND_CONFIG( sound_conf )
|
static TI_SOUND_CONFIG( sound_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready) // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready) // READY
|
||||||
};
|
};
|
||||||
|
|
||||||
READ8_MEMBER( ti99_4x::cruread )
|
READ8_MEMBER( ti99_4x_state::cruread )
|
||||||
{
|
{
|
||||||
// if (VERBOSE>6) LOG("read access to CRU address %04x\n", offset << 4);
|
// if (VERBOSE>6) LOG("read access to CRU address %04x\n", offset << 4);
|
||||||
UINT8 value = 0;
|
UINT8 value = 0;
|
||||||
@ -356,14 +356,14 @@ READ8_MEMBER( ti99_4x::cruread )
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( ti99_4x::cruwrite )
|
WRITE8_MEMBER( ti99_4x_state::cruwrite )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_4x: write access to CRU address %04x\n", offset << 1);
|
if (VERBOSE>6) LOG("ti99_4x: write access to CRU address %04x\n", offset << 1);
|
||||||
m_gromport->cruwrite(offset<<1, data);
|
m_gromport->cruwrite(offset<<1, data);
|
||||||
m_peribox->cruwrite(offset<<1, data);
|
m_peribox->cruwrite(offset<<1, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( ti99_4x::external_operation )
|
WRITE8_MEMBER( ti99_4x_state::external_operation )
|
||||||
{
|
{
|
||||||
static const char* extop[8] = { "inv1", "inv2", "IDLE", "RSET", "inv3", "CKON", "CKOF", "LREX" };
|
static const char* extop[8] = { "inv1", "inv2", "IDLE", "RSET", "inv3", "CKON", "CKOF", "LREX" };
|
||||||
// Some games (e.g. Slymoids) actually use IDLE for synchronization
|
// Some games (e.g. Slymoids) actually use IDLE for synchronization
|
||||||
@ -402,7 +402,7 @@ WRITE8_MEMBER( ti99_4x::external_operation )
|
|||||||
|
|
||||||
static const char *const column[] = { "COL0", "COL1", "COL2", "COL3", "COL4", "COL5" };
|
static const char *const column[] = { "COL0", "COL1", "COL2", "COL3", "COL4", "COL5" };
|
||||||
|
|
||||||
READ8_MEMBER( ti99_4x::read_by_9901 )
|
READ8_MEMBER( ti99_4x_state::read_by_9901 )
|
||||||
{
|
{
|
||||||
int answer=0;
|
int answer=0;
|
||||||
|
|
||||||
@ -475,7 +475,7 @@ READ8_MEMBER( ti99_4x::read_by_9901 )
|
|||||||
/*
|
/*
|
||||||
Handler for tms9901 P0 pin (handset data acknowledge)
|
Handler for tms9901 P0 pin (handset data acknowledge)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::handset_ack )
|
WRITE_LINE_MEMBER( ti99_4x_state::handset_ack )
|
||||||
{
|
{
|
||||||
// Write a value to the joyport. If there is a handset this will set its
|
// Write a value to the joyport. If there is a handset this will set its
|
||||||
// ACK line.
|
// ACK line.
|
||||||
@ -485,7 +485,7 @@ WRITE_LINE_MEMBER( ti99_4x::handset_ack )
|
|||||||
/*
|
/*
|
||||||
WRITE key column select (P2-P4), TI-99/4
|
WRITE key column select (P2-P4), TI-99/4
|
||||||
*/
|
*/
|
||||||
void ti99_4x::set_keyboard_column(int number, int data)
|
void ti99_4x_state::set_keyboard_column(int number, int data)
|
||||||
{
|
{
|
||||||
if (data != 0)
|
if (data != 0)
|
||||||
m_keyboard_column |= 1 << number;
|
m_keyboard_column |= 1 << number;
|
||||||
@ -506,17 +506,17 @@ void ti99_4x::set_keyboard_column(int number, int data)
|
|||||||
// joystick 2 = column 7
|
// joystick 2 = column 7
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4x::keyC0 )
|
WRITE_LINE_MEMBER( ti99_4x_state::keyC0 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(0, state);
|
set_keyboard_column(0, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4x::keyC1 )
|
WRITE_LINE_MEMBER( ti99_4x_state::keyC1 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(1, state);
|
set_keyboard_column(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4x::keyC2 )
|
WRITE_LINE_MEMBER( ti99_4x_state::keyC2 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(2, state);
|
set_keyboard_column(2, state);
|
||||||
}
|
}
|
||||||
@ -524,7 +524,7 @@ WRITE_LINE_MEMBER( ti99_4x::keyC2 )
|
|||||||
/*
|
/*
|
||||||
Select alpha lock line - TI99/4a only (P5)
|
Select alpha lock line - TI99/4a only (P5)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::alphaW )
|
WRITE_LINE_MEMBER( ti99_4x_state::alphaW )
|
||||||
{
|
{
|
||||||
m_check_alphalock = (state==0);
|
m_check_alphalock = (state==0);
|
||||||
}
|
}
|
||||||
@ -532,7 +532,7 @@ WRITE_LINE_MEMBER( ti99_4x::alphaW )
|
|||||||
/*
|
/*
|
||||||
Control CS1 tape unit motor (P6)
|
Control CS1 tape unit motor (P6)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::cs1_motor )
|
WRITE_LINE_MEMBER( ti99_4x_state::cs1_motor )
|
||||||
{
|
{
|
||||||
cassette_image_device *img = machine().device<cassette_image_device>(CASSETTE_TAG);
|
cassette_image_device *img = machine().device<cassette_image_device>(CASSETTE_TAG);
|
||||||
img->change_state(state==ASSERT_LINE? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
|
img->change_state(state==ASSERT_LINE? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
|
||||||
@ -541,7 +541,7 @@ WRITE_LINE_MEMBER( ti99_4x::cs1_motor )
|
|||||||
/*
|
/*
|
||||||
Control CS2 tape unit motor (P7)
|
Control CS2 tape unit motor (P7)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::cs2_motor )
|
WRITE_LINE_MEMBER( ti99_4x_state::cs2_motor )
|
||||||
{
|
{
|
||||||
cassette_image_device *img = machine().device<cassette_image_device>(CASSETTE2_TAG);
|
cassette_image_device *img = machine().device<cassette_image_device>(CASSETTE2_TAG);
|
||||||
img->change_state(state==ASSERT_LINE? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
|
img->change_state(state==ASSERT_LINE? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
|
||||||
@ -554,7 +554,7 @@ WRITE_LINE_MEMBER( ti99_4x::cs2_motor )
|
|||||||
We do not really need to emulate this as the tape recorder generates sound
|
We do not really need to emulate this as the tape recorder generates sound
|
||||||
on its own.
|
on its own.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::audio_gate )
|
WRITE_LINE_MEMBER( ti99_4x_state::audio_gate )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -562,13 +562,13 @@ WRITE_LINE_MEMBER( ti99_4x::audio_gate )
|
|||||||
Tape output (P9)
|
Tape output (P9)
|
||||||
I think polarity is correct, but don't take my word for it.
|
I think polarity is correct, but don't take my word for it.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::cassette_output )
|
WRITE_LINE_MEMBER( ti99_4x_state::cassette_output )
|
||||||
{
|
{
|
||||||
machine().device<cassette_image_device>(CASSETTE_TAG)->output(state==ASSERT_LINE? +1 : -1);
|
machine().device<cassette_image_device>(CASSETTE_TAG)->output(state==ASSERT_LINE? +1 : -1);
|
||||||
machine().device<cassette_image_device>(CASSETTE2_TAG)->output(state==ASSERT_LINE? +1 : -1);
|
machine().device<cassette_image_device>(CASSETTE2_TAG)->output(state==ASSERT_LINE? +1 : -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( ti99_4x::tms9901_interrupt )
|
WRITE8_MEMBER( ti99_4x_state::tms9901_interrupt )
|
||||||
{
|
{
|
||||||
// offset contains the interrupt level (0-15)
|
// offset contains the interrupt level (0-15)
|
||||||
// However, the TI board just ignores that level and hardwires it to 1
|
// However, the TI board just ignores that level and hardwires it to 1
|
||||||
@ -576,7 +576,7 @@ WRITE8_MEMBER( ti99_4x::tms9901_interrupt )
|
|||||||
m_cpu->set_input_line(INPUT_LINE_99XX_INTREQ, data);
|
m_cpu->set_input_line(INPUT_LINE_99XX_INTREQ, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( ti99_4x::interrupt_level )
|
READ8_MEMBER( ti99_4x_state::interrupt_level )
|
||||||
{
|
{
|
||||||
// On the TI-99 systems these IC lines are not used; the input lines
|
// On the TI-99 systems these IC lines are not used; the input lines
|
||||||
// at the CPU are hardwired to level 1.
|
// at the CPU are hardwired to level 1.
|
||||||
@ -586,7 +586,7 @@ READ8_MEMBER( ti99_4x::interrupt_level )
|
|||||||
/*
|
/*
|
||||||
Clock line from the CPU. Used to control wait state generation.
|
Clock line from the CPU. Used to control wait state generation.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::clock_out )
|
WRITE_LINE_MEMBER( ti99_4x_state::clock_out )
|
||||||
{
|
{
|
||||||
m_datamux->clock_in(state);
|
m_datamux->clock_in(state);
|
||||||
}
|
}
|
||||||
@ -596,13 +596,13 @@ WRITE_LINE_MEMBER( ti99_4x::clock_out )
|
|||||||
/*
|
/*
|
||||||
set the state of TMS9901's INT2 (called by the tms9928 core)
|
set the state of TMS9901's INT2 (called by the tms9928 core)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::set_tms9901_INT2 )
|
WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT2 )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_4x: VDP int 2 on tms9901, level=%d\n", state);
|
if (VERBOSE>6) LOG("ti99_4x: VDP int 2 on tms9901, level=%d\n", state);
|
||||||
m_tms9901->set_single_int(2, state);
|
m_tms9901->set_single_int(2, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ti99_4x::set_tms9901_INT2_from_v9938(v99x8_device &vdp, int state)
|
void ti99_4x_state::set_tms9901_INT2_from_v9938(v99x8_device &vdp, int state)
|
||||||
{
|
{
|
||||||
m_tms9901->set_single_int(2, state);
|
m_tms9901->set_single_int(2, state);
|
||||||
}
|
}
|
||||||
@ -610,7 +610,7 @@ void ti99_4x::set_tms9901_INT2_from_v9938(v99x8_device &vdp, int state)
|
|||||||
/*
|
/*
|
||||||
set the state of TMS9901's INT12 (called by the handset prototype of TI-99/4)
|
set the state of TMS9901's INT12 (called by the handset prototype of TI-99/4)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::set_tms9901_INT12)
|
WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT12)
|
||||||
{
|
{
|
||||||
m_tms9901->set_single_int(12, state);
|
m_tms9901->set_single_int(12, state);
|
||||||
}
|
}
|
||||||
@ -619,7 +619,7 @@ WRITE_LINE_MEMBER( ti99_4x::set_tms9901_INT12)
|
|||||||
One of the common hardware mods was to add a switch to trigger a LOAD
|
One of the common hardware mods was to add a switch to trigger a LOAD
|
||||||
interrupt (NMI)
|
interrupt (NMI)
|
||||||
*/
|
*/
|
||||||
INPUT_CHANGED_MEMBER( ti99_4x::load_interrupt )
|
INPUT_CHANGED_MEMBER( ti99_4x_state::load_interrupt )
|
||||||
{
|
{
|
||||||
m_cpu->set_input_line(INPUT_LINE_NMI, (newval==0)? ASSERT_LINE : CLEAR_LINE);
|
m_cpu->set_input_line(INPUT_LINE_NMI, (newval==0)? ASSERT_LINE : CLEAR_LINE);
|
||||||
}
|
}
|
||||||
@ -634,7 +634,7 @@ INPUT_CHANGED_MEMBER( ti99_4x::load_interrupt )
|
|||||||
no chance to make another device pull down the same line; the CPU just
|
no chance to make another device pull down the same line; the CPU just
|
||||||
won't access any other device in this time.
|
won't access any other device in this time.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::console_ready )
|
WRITE_LINE_MEMBER( ti99_4x_state::console_ready )
|
||||||
{
|
{
|
||||||
m_ready_line = state;
|
m_ready_line = state;
|
||||||
int combined = (m_ready_line == ASSERT_LINE && m_ready_line_dmux == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE;
|
int combined = (m_ready_line == ASSERT_LINE && m_ready_line_dmux == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE;
|
||||||
@ -650,7 +650,7 @@ WRITE_LINE_MEMBER( ti99_4x::console_ready )
|
|||||||
/*
|
/*
|
||||||
The RESET line leading to a reset of the CPU.
|
The RESET line leading to a reset of the CPU.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::console_reset )
|
WRITE_LINE_MEMBER( ti99_4x_state::console_reset )
|
||||||
{
|
{
|
||||||
if (machine().phase() != MACHINE_PHASE_INIT)
|
if (machine().phase() != MACHINE_PHASE_INIT)
|
||||||
{
|
{
|
||||||
@ -664,7 +664,7 @@ WRITE_LINE_MEMBER( ti99_4x::console_reset )
|
|||||||
the READY line, and the datamux raises READY depending on the clock pulse.
|
the READY line, and the datamux raises READY depending on the clock pulse.
|
||||||
So we must make sure this does not interfere.
|
So we must make sure this does not interfere.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_4x::console_ready_dmux )
|
WRITE_LINE_MEMBER( ti99_4x_state::console_ready_dmux )
|
||||||
{
|
{
|
||||||
m_ready_line_dmux = state;
|
m_ready_line_dmux = state;
|
||||||
int combined = (m_ready_line == ASSERT_LINE && m_ready_line_dmux == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE;
|
int combined = (m_ready_line == ASSERT_LINE && m_ready_line_dmux == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE;
|
||||||
@ -677,14 +677,14 @@ WRITE_LINE_MEMBER( ti99_4x::console_ready_dmux )
|
|||||||
m_cpu->set_ready(combined);
|
m_cpu->set_ready(combined);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4x::extint )
|
WRITE_LINE_MEMBER( ti99_4x_state::extint )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_4x: EXTINT level = %02x\n", state);
|
if (VERBOSE>6) LOG("ti99_4x: EXTINT level = %02x\n", state);
|
||||||
if (m_tms9901 != NULL)
|
if (m_tms9901 != NULL)
|
||||||
m_tms9901->set_single_int(1, state);
|
m_tms9901->set_single_int(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_4x::notconnected )
|
WRITE_LINE_MEMBER( ti99_4x_state::notconnected )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_4x: Setting a not connected line ... ignored\n");
|
if (VERBOSE>6) LOG("ti99_4x: Setting a not connected line ... ignored\n");
|
||||||
}
|
}
|
||||||
@ -695,7 +695,7 @@ static TMS9928A_INTERFACE(ti99_4_tms9928a_interface)
|
|||||||
{
|
{
|
||||||
SCREEN_TAG,
|
SCREEN_TAG,
|
||||||
0x4000,
|
0x4000,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, set_tms9901_INT2)
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, set_tms9901_INT2)
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TMS9901 setup. */
|
/* TMS9901 setup. */
|
||||||
@ -704,20 +704,20 @@ const tms9901_interface tms9901_wiring_ti99_4 =
|
|||||||
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC, /* only input pins whose state is always known */
|
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC, /* only input pins whose state is always known */
|
||||||
|
|
||||||
// read handler
|
// read handler
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4x, read_by_9901),
|
DEVCB_DRIVER_MEMBER(ti99_4x_state, read_by_9901),
|
||||||
|
|
||||||
// write handlers
|
// write handlers
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, handset_ack),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, handset_ack),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC0),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC0),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC1),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC1),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC2),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC2),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cs1_motor),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs1_motor),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cs2_motor),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs2_motor),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, audio_gate),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, audio_gate),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cassette_output),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cassette_output),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
@ -727,7 +727,7 @@ const tms9901_interface tms9901_wiring_ti99_4 =
|
|||||||
},
|
},
|
||||||
|
|
||||||
// interrupt handler
|
// interrupt handler
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4x, tms9901_interrupt)
|
DEVCB_DRIVER_MEMBER(ti99_4x_state, tms9901_interrupt)
|
||||||
};
|
};
|
||||||
|
|
||||||
const tms9901_interface tms9901_wiring_ti99_4a =
|
const tms9901_interface tms9901_wiring_ti99_4a =
|
||||||
@ -735,20 +735,20 @@ const tms9901_interface tms9901_wiring_ti99_4a =
|
|||||||
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC,
|
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC,
|
||||||
|
|
||||||
// read handler
|
// read handler
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4x, read_by_9901),
|
DEVCB_DRIVER_MEMBER(ti99_4x_state, read_by_9901),
|
||||||
|
|
||||||
// write handlers
|
// write handlers
|
||||||
{
|
{
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC0),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC0),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC1),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC1),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC2),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC2),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, alphaW),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, alphaW),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cs1_motor),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs1_motor),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cs2_motor),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs2_motor),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, audio_gate),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, audio_gate),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cassette_output),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cassette_output),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
@ -757,7 +757,7 @@ const tms9901_interface tms9901_wiring_ti99_4a =
|
|||||||
DEVCB_NULL
|
DEVCB_NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4x, tms9901_interrupt)
|
DEVCB_DRIVER_MEMBER(ti99_4x_state, tms9901_interrupt)
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -796,35 +796,35 @@ static const dmux_device_list_entry dmux_devices_ev[] =
|
|||||||
|
|
||||||
static DMUX_CONFIG( datamux_conf )
|
static DMUX_CONFIG( datamux_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready_dmux), // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready_dmux), // READY
|
||||||
dmux_devices
|
dmux_devices
|
||||||
};
|
};
|
||||||
|
|
||||||
static DMUX_CONFIG( datamux_conf_ev )
|
static DMUX_CONFIG( datamux_conf_ev )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready_dmux), // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready_dmux), // READY
|
||||||
dmux_devices_ev
|
dmux_devices_ev
|
||||||
};
|
};
|
||||||
|
|
||||||
static TMS99xx_CONFIG( ti99_cpuconf )
|
static TMS99xx_CONFIG( ti99_cpuconf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4x, external_operation),
|
DEVCB_DRIVER_MEMBER(ti99_4x_state, external_operation),
|
||||||
DEVCB_DRIVER_MEMBER(ti99_4x, interrupt_level),
|
DEVCB_DRIVER_MEMBER(ti99_4x_state, interrupt_level),
|
||||||
DEVCB_NULL, // Instruction acquisition
|
DEVCB_NULL, // Instruction acquisition
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, clock_out),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, clock_out),
|
||||||
DEVCB_NULL, // wait
|
DEVCB_NULL, // wait
|
||||||
DEVCB_NULL // Hold acknowledge
|
DEVCB_NULL // Hold acknowledge
|
||||||
};
|
};
|
||||||
|
|
||||||
static JOYPORT_CONFIG( joyport4_60 )
|
static JOYPORT_CONFIG( joyport4_60 )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, set_tms9901_INT12),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, set_tms9901_INT12),
|
||||||
60
|
60
|
||||||
};
|
};
|
||||||
|
|
||||||
static JOYPORT_CONFIG( joyport4_50 )
|
static JOYPORT_CONFIG( joyport4_50 )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, set_tms9901_INT12),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, set_tms9901_INT12),
|
||||||
50
|
50
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -845,7 +845,7 @@ static JOYPORT_CONFIG( joyport4a_50 )
|
|||||||
Machine definitions
|
Machine definitions
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
MACHINE_START_MEMBER(ti99_4x,ti99_4)
|
MACHINE_START_MEMBER(ti99_4x_state,ti99_4)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_cpu = static_cast<tms9900_device*>(machine().device("maincpu"));
|
m_cpu = static_cast<tms9900_device*>(machine().device("maincpu"));
|
||||||
@ -867,7 +867,7 @@ MACHINE_START_MEMBER(ti99_4x,ti99_4)
|
|||||||
m_ready_line = m_ready_line_dmux = ASSERT_LINE;
|
m_ready_line = m_ready_line_dmux = ASSERT_LINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_RESET_MEMBER(ti99_4x,ti99_4)
|
MACHINE_RESET_MEMBER(ti99_4x_state,ti99_4)
|
||||||
{
|
{
|
||||||
m_cpu->set_ready(ASSERT_LINE);
|
m_cpu->set_ready(ASSERT_LINE);
|
||||||
m_cpu->set_hold(CLEAR_LINE);
|
m_cpu->set_hold(CLEAR_LINE);
|
||||||
@ -876,12 +876,12 @@ MACHINE_RESET_MEMBER(ti99_4x,ti99_4)
|
|||||||
/*
|
/*
|
||||||
TI-99/4 - the predecessor of the more popular TI-99/4A
|
TI-99/4 - the predecessor of the more popular TI-99/4A
|
||||||
*/
|
*/
|
||||||
static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x )
|
static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x_state )
|
||||||
/* CPU */
|
/* CPU */
|
||||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||||
|
|
||||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4 )
|
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4 )
|
||||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x, ti99_4 )
|
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4 )
|
||||||
|
|
||||||
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918, ti99_4_tms9928a_interface)
|
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918, ti99_4_tms9928a_interface)
|
||||||
|
|
||||||
@ -917,12 +917,12 @@ static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x )
|
|||||||
|
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( ti99_4_50hz, ti99_4x )
|
static MACHINE_CONFIG_START( ti99_4_50hz, ti99_4x_state )
|
||||||
/* CPU */
|
/* CPU */
|
||||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||||
|
|
||||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4 )
|
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4 )
|
||||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x, ti99_4 )
|
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4 )
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929, ti99_4_tms9928a_interface)
|
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929, ti99_4_tms9928a_interface)
|
||||||
@ -963,7 +963,7 @@ MACHINE_CONFIG_END
|
|||||||
TI-99/4A - replaced the 99/4
|
TI-99/4A - replaced the 99/4
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MACHINE_START_MEMBER(ti99_4x,ti99_4a)
|
MACHINE_START_MEMBER(ti99_4x_state,ti99_4a)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_cpu = static_cast<tms9900_device*>(machine().device("maincpu"));
|
m_cpu = static_cast<tms9900_device*>(machine().device("maincpu"));
|
||||||
@ -982,18 +982,18 @@ MACHINE_START_MEMBER(ti99_4x,ti99_4a)
|
|||||||
m_ready_line = m_ready_line_dmux = ASSERT_LINE;
|
m_ready_line = m_ready_line_dmux = ASSERT_LINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_RESET_MEMBER(ti99_4x,ti99_4a)
|
MACHINE_RESET_MEMBER(ti99_4x_state,ti99_4a)
|
||||||
{
|
{
|
||||||
m_cpu->set_ready(ASSERT_LINE);
|
m_cpu->set_ready(ASSERT_LINE);
|
||||||
m_cpu->set_hold(CLEAR_LINE);
|
m_cpu->set_hold(CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( ti99_4a_60hz, ti99_4x )
|
static MACHINE_CONFIG_START( ti99_4a_60hz, ti99_4x_state )
|
||||||
/* CPU */
|
/* CPU */
|
||||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||||
|
|
||||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4a )
|
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x, ti99_4a )
|
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||||
|
|
||||||
/* Video hardware */
|
/* Video hardware */
|
||||||
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918A, ti99_4_tms9928a_interface)
|
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918A, ti99_4_tms9928a_interface)
|
||||||
@ -1030,12 +1030,12 @@ static MACHINE_CONFIG_START( ti99_4a_60hz, ti99_4x )
|
|||||||
|
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( ti99_4a_50hz, ti99_4x )
|
static MACHINE_CONFIG_START( ti99_4a_50hz, ti99_4x_state )
|
||||||
/* CPU */
|
/* CPU */
|
||||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||||
|
|
||||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4a )
|
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x, ti99_4a )
|
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||||
|
|
||||||
/* Video hardware */
|
/* Video hardware */
|
||||||
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929A, ti99_4_tms9928a_interface)
|
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929A, ti99_4_tms9928a_interface)
|
||||||
@ -1073,7 +1073,7 @@ static MACHINE_CONFIG_START( ti99_4a_50hz, ti99_4x )
|
|||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(ti99_4x::ti99_4ev_hblank_interrupt)
|
TIMER_DEVICE_CALLBACK_MEMBER(ti99_4x_state::ti99_4ev_hblank_interrupt)
|
||||||
{
|
{
|
||||||
machine().device<v9938_device>(VDP_TAG)->interrupt();
|
machine().device<v9938_device>(VDP_TAG)->interrupt();
|
||||||
}
|
}
|
||||||
@ -1082,11 +1082,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(ti99_4x::ti99_4ev_hblank_interrupt)
|
|||||||
TI-99/4A with 80-column support. Actually a separate expansion card (EVPC),
|
TI-99/4A with 80-column support. Actually a separate expansion card (EVPC),
|
||||||
replacing the console video processor.
|
replacing the console video processor.
|
||||||
*/
|
*/
|
||||||
static MACHINE_CONFIG_START( ti99_4ev_60hz, ti99_4x )
|
static MACHINE_CONFIG_START( ti99_4ev_60hz, ti99_4x_state )
|
||||||
/* CPU */
|
/* CPU */
|
||||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||||
|
|
||||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4a )
|
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
// Although we should have a 60 Hz screen rate, we have to set it to 30 here.
|
// Although we should have a 60 Hz screen rate, we have to set it to 30 here.
|
||||||
@ -1094,8 +1094,8 @@ static MACHINE_CONFIG_START( ti99_4ev_60hz, ti99_4x )
|
|||||||
// interlace mode, but in non-interlace modes only half of the lines are
|
// interlace mode, but in non-interlace modes only half of the lines are
|
||||||
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
||||||
// not 60 Hz. This should be fixed in the v9938 emulation.
|
// not 60 Hz. This should be fixed in the v9938 emulation.
|
||||||
MCFG_TI_V9938_ADD(VIDEO_SYSTEM_TAG, 30, SCREEN_TAG, 2500, 512+32, (212+28)*2, DEVICE_SELF, ti99_4x, set_tms9901_INT2_from_v9938)
|
MCFG_TI_V9938_ADD(VIDEO_SYSTEM_TAG, 30, SCREEN_TAG, 2500, 512+32, (212+28)*2, DEVICE_SELF, ti99_4x_state, set_tms9901_INT2_from_v9938)
|
||||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ti99_4x, ti99_4ev_hblank_interrupt, SCREEN_TAG, 0, 1)
|
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ti99_4x_state, ti99_4ev_hblank_interrupt, SCREEN_TAG, 0, 1)
|
||||||
|
|
||||||
/* Main board */
|
/* Main board */
|
||||||
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_ti99_4a, 3000000)
|
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_ti99_4a, 3000000)
|
||||||
|
@ -217,10 +217,10 @@ Known Issues (MZ, 2010-11-07)
|
|||||||
#define VERBOSE 0
|
#define VERBOSE 0
|
||||||
#define LOG logerror
|
#define LOG logerror
|
||||||
|
|
||||||
class ti99_8 : public driver_device
|
class ti99_8_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ti99_8(const machine_config &mconfig, device_type type, const char *tag)
|
ti99_8_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag) { }
|
: driver_device(mconfig, type, tag) { }
|
||||||
|
|
||||||
// CRU (Communication Register Unit) handling
|
// CRU (Communication Register Unit) handling
|
||||||
@ -279,7 +279,7 @@ private:
|
|||||||
Memory map. We have a configurable mapper, so we need to delegate the
|
Memory map. We have a configurable mapper, so we need to delegate the
|
||||||
job to the mapper completely.
|
job to the mapper completely.
|
||||||
*/
|
*/
|
||||||
static ADDRESS_MAP_START(memmap, AS_PROGRAM, 8, ti99_8)
|
static ADDRESS_MAP_START(memmap, AS_PROGRAM, 8, ti99_8_state)
|
||||||
AM_RANGE(0x0000, 0xffff) AM_DEVREADWRITE(MAPPER_TAG, ti998_mapper_device, readm, writem )
|
AM_RANGE(0x0000, 0xffff) AM_DEVREADWRITE(MAPPER_TAG, ti998_mapper_device, readm, writem )
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ ADDRESS_MAP_END
|
|||||||
(decoded by the "Vaquerro" chip, signal NNOICS*)
|
(decoded by the "Vaquerro" chip, signal NNOICS*)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static ADDRESS_MAP_START(crumap, AS_IO, 8, ti99_8)
|
static ADDRESS_MAP_START(crumap, AS_IO, 8, ti99_8_state)
|
||||||
AM_RANGE(0x0000, 0x0003) AM_DEVREAD(TMS9901_TAG, tms9901_device, read)
|
AM_RANGE(0x0000, 0x0003) AM_DEVREAD(TMS9901_TAG, tms9901_device, read)
|
||||||
AM_RANGE(0x0000, 0x02ff) AM_READ(cruread)
|
AM_RANGE(0x0000, 0x02ff) AM_READ(cruread)
|
||||||
|
|
||||||
@ -406,17 +406,17 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
static GROM_CONFIG(grom0_config)
|
static GROM_CONFIG(grom0_config)
|
||||||
{
|
{
|
||||||
false, 0, region_grom, 0x0000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ
|
false, 0, region_grom, 0x0000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ
|
||||||
};
|
};
|
||||||
|
|
||||||
static GROM_CONFIG(grom1_config)
|
static GROM_CONFIG(grom1_config)
|
||||||
{
|
{
|
||||||
false, 1, region_grom, 0x2000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ
|
false, 1, region_grom, 0x2000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ
|
||||||
};
|
};
|
||||||
|
|
||||||
static GROM_CONFIG(grom2_config)
|
static GROM_CONFIG(grom2_config)
|
||||||
{
|
{
|
||||||
false, 2, region_grom, 0x4000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ
|
false, 2, region_grom, 0x4000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************
|
/****************************************************
|
||||||
@ -447,21 +447,21 @@ static GROM_CONFIG(grom2_config)
|
|||||||
|
|
||||||
#define GROM_LIBRARY_CONFIG(_conf, _region) \
|
#define GROM_LIBRARY_CONFIG(_conf, _region) \
|
||||||
static GROM_CONFIG(_conf##0) \
|
static GROM_CONFIG(_conf##0) \
|
||||||
{ false, 0, _region, 0x0000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ }; \
|
{ false, 0, _region, 0x0000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ }; \
|
||||||
static GROM_CONFIG(_conf##1) \
|
static GROM_CONFIG(_conf##1) \
|
||||||
{ false, 1, _region, 0x2000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ }; \
|
{ false, 1, _region, 0x2000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ }; \
|
||||||
static GROM_CONFIG(_conf##2) \
|
static GROM_CONFIG(_conf##2) \
|
||||||
{ false, 2, _region, 0x4000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ }; \
|
{ false, 2, _region, 0x4000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ }; \
|
||||||
static GROM_CONFIG(_conf##3) \
|
static GROM_CONFIG(_conf##3) \
|
||||||
{ false, 3, _region, 0x6000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ }; \
|
{ false, 3, _region, 0x6000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ }; \
|
||||||
static GROM_CONFIG(_conf##4) \
|
static GROM_CONFIG(_conf##4) \
|
||||||
{ false, 4, _region, 0x8000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ }; \
|
{ false, 4, _region, 0x8000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ }; \
|
||||||
static GROM_CONFIG(_conf##5) \
|
static GROM_CONFIG(_conf##5) \
|
||||||
{ false, 5, _region, 0xa000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ }; \
|
{ false, 5, _region, 0xa000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ }; \
|
||||||
static GROM_CONFIG(_conf##6) \
|
static GROM_CONFIG(_conf##6) \
|
||||||
{ false, 6, _region, 0xc000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ }; \
|
{ false, 6, _region, 0xc000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ }; \
|
||||||
static GROM_CONFIG(_conf##7) \
|
static GROM_CONFIG(_conf##7) \
|
||||||
{ false, 7, _region, 0xe000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), GROMFREQ };
|
{ false, 7, _region, 0xe000, 0x1800, DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), GROMFREQ };
|
||||||
|
|
||||||
GROM_LIBRARY_CONFIG(pascal0, pascal0_region)
|
GROM_LIBRARY_CONFIG(pascal0, pascal0_region)
|
||||||
GROM_LIBRARY_CONFIG(pascal1, pascal12_region)
|
GROM_LIBRARY_CONFIG(pascal1, pascal12_region)
|
||||||
@ -469,19 +469,19 @@ GROM_LIBRARY_CONFIG(pascal2, pascal12_region)
|
|||||||
|
|
||||||
static GROMPORT_CONFIG(console_cartslot)
|
static GROMPORT_CONFIG(console_cartslot)
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_reset)
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_reset)
|
||||||
};
|
};
|
||||||
|
|
||||||
static PERIBOX_CONFIG( peribox_conf )
|
static PERIBOX_CONFIG( peribox_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, extint), // INTA
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, extint), // INTA
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, notconnected), // INTB
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, notconnected), // INTB
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), // READY
|
||||||
0x70000 // Address bus prefix (AMA/AMB/AMC)
|
0x70000 // Address bus prefix (AMA/AMB/AMC)
|
||||||
};
|
};
|
||||||
|
|
||||||
READ8_MEMBER( ti99_8::cruread )
|
READ8_MEMBER( ti99_8_state::cruread )
|
||||||
{
|
{
|
||||||
// if (VERBOSE>6) LOG("read access to CRU address %04x\n", offset << 4);
|
// if (VERBOSE>6) LOG("read access to CRU address %04x\n", offset << 4);
|
||||||
UINT8 value = 0;
|
UINT8 value = 0;
|
||||||
@ -497,7 +497,7 @@ READ8_MEMBER( ti99_8::cruread )
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( ti99_8::cruwrite )
|
WRITE8_MEMBER( ti99_8_state::cruwrite )
|
||||||
{
|
{
|
||||||
if (VERBOSE>8) LOG("ti99_8: CRU %04x <- %x\n", offset<<1, data);
|
if (VERBOSE>8) LOG("ti99_8: CRU %04x <- %x\n", offset<<1, data);
|
||||||
m_mapper->cruwrite(offset<<1, data);
|
m_mapper->cruwrite(offset<<1, data);
|
||||||
@ -518,7 +518,7 @@ static const char *const column[] = {
|
|||||||
"COL8", "COL9", "COL10", "COL11", "COL12", "COL13"
|
"COL8", "COL9", "COL10", "COL11", "COL12", "COL13"
|
||||||
};
|
};
|
||||||
|
|
||||||
READ8_MEMBER( ti99_8::read_by_9901 )
|
READ8_MEMBER( ti99_8_state::read_by_9901 )
|
||||||
{
|
{
|
||||||
int answer=0;
|
int answer=0;
|
||||||
UINT8 joyst;
|
UINT8 joyst;
|
||||||
@ -590,7 +590,7 @@ READ8_MEMBER( ti99_8::read_by_9901 )
|
|||||||
/*
|
/*
|
||||||
WRITE key column select (P2-P4), TI-99/8
|
WRITE key column select (P2-P4), TI-99/8
|
||||||
*/
|
*/
|
||||||
void ti99_8::set_keyboard_column(int number, int data)
|
void ti99_8_state::set_keyboard_column(int number, int data)
|
||||||
{
|
{
|
||||||
if (data != 0) m_keyboard_column |= 1 << number;
|
if (data != 0) m_keyboard_column |= 1 << number;
|
||||||
else m_keyboard_column &= ~(1 << number);
|
else m_keyboard_column &= ~(1 << number);
|
||||||
@ -601,22 +601,22 @@ void ti99_8::set_keyboard_column(int number, int data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_8::keyC0 )
|
WRITE_LINE_MEMBER( ti99_8_state::keyC0 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(0, state);
|
set_keyboard_column(0, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_8::keyC1 )
|
WRITE_LINE_MEMBER( ti99_8_state::keyC1 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(1, state);
|
set_keyboard_column(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_8::keyC2 )
|
WRITE_LINE_MEMBER( ti99_8_state::keyC2 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(2, state);
|
set_keyboard_column(2, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_8::keyC3 )
|
WRITE_LINE_MEMBER( ti99_8_state::keyC3 )
|
||||||
{
|
{
|
||||||
set_keyboard_column(3, state);
|
set_keyboard_column(3, state);
|
||||||
}
|
}
|
||||||
@ -624,7 +624,7 @@ WRITE_LINE_MEMBER( ti99_8::keyC3 )
|
|||||||
/*
|
/*
|
||||||
Set 99/4A compatibility mode (CRUS=1)
|
Set 99/4A compatibility mode (CRUS=1)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::CRUS )
|
WRITE_LINE_MEMBER( ti99_8_state::CRUS )
|
||||||
{
|
{
|
||||||
m_mapper->CRUS_set(state==ASSERT_LINE);
|
m_mapper->CRUS_set(state==ASSERT_LINE);
|
||||||
}
|
}
|
||||||
@ -632,7 +632,7 @@ WRITE_LINE_MEMBER( ti99_8::CRUS )
|
|||||||
/*
|
/*
|
||||||
Set mapper /PTGEN. This is negative logic; we use PTGE as the positive logic signal.
|
Set mapper /PTGEN. This is negative logic; we use PTGE as the positive logic signal.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::PTGEN )
|
WRITE_LINE_MEMBER( ti99_8_state::PTGEN )
|
||||||
{
|
{
|
||||||
m_mapper->PTGE_set(state==CLEAR_LINE);
|
m_mapper->PTGE_set(state==CLEAR_LINE);
|
||||||
}
|
}
|
||||||
@ -640,7 +640,7 @@ WRITE_LINE_MEMBER( ti99_8::PTGEN )
|
|||||||
/*
|
/*
|
||||||
Control cassette tape unit motor (P6)
|
Control cassette tape unit motor (P6)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::cassette_motor )
|
WRITE_LINE_MEMBER( ti99_8_state::cassette_motor )
|
||||||
{
|
{
|
||||||
cassette_image_device *img = machine().device<cassette_image_device>(CASSETTE_TAG);
|
cassette_image_device *img = machine().device<cassette_image_device>(CASSETTE_TAG);
|
||||||
img->change_state(state==ASSERT_LINE? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
|
img->change_state(state==ASSERT_LINE? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
|
||||||
@ -653,7 +653,7 @@ WRITE_LINE_MEMBER( ti99_8::cassette_motor )
|
|||||||
We do not really need to emulate this as the tape recorder generates sound
|
We do not really need to emulate this as the tape recorder generates sound
|
||||||
on its own.
|
on its own.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::audio_gate )
|
WRITE_LINE_MEMBER( ti99_8_state::audio_gate )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -661,12 +661,12 @@ WRITE_LINE_MEMBER( ti99_8::audio_gate )
|
|||||||
Tape output (P9)
|
Tape output (P9)
|
||||||
I think polarity is correct, but don't take my word for it.
|
I think polarity is correct, but don't take my word for it.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::cassette_output )
|
WRITE_LINE_MEMBER( ti99_8_state::cassette_output )
|
||||||
{
|
{
|
||||||
machine().device<cassette_image_device>(CASSETTE_TAG)->output(state==ASSERT_LINE? +1 : -1);
|
machine().device<cassette_image_device>(CASSETTE_TAG)->output(state==ASSERT_LINE? +1 : -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( ti99_8::tms9901_interrupt )
|
WRITE8_MEMBER( ti99_8_state::tms9901_interrupt )
|
||||||
{
|
{
|
||||||
m_cpu->set_input_line(INPUT_LINE_99XX_INT1, data);
|
m_cpu->set_input_line(INPUT_LINE_99XX_INT1, data);
|
||||||
}
|
}
|
||||||
@ -676,20 +676,20 @@ const tms9901_interface tms9901_wiring_ti99_8 =
|
|||||||
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC,
|
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC,
|
||||||
|
|
||||||
// read handler
|
// read handler
|
||||||
DEVCB_DRIVER_MEMBER(ti99_8, read_by_9901),
|
DEVCB_DRIVER_MEMBER(ti99_8_state, read_by_9901),
|
||||||
|
|
||||||
// write handlers
|
// write handlers
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, keyC0),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, keyC0),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, keyC1),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, keyC1),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, keyC2),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, keyC2),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, keyC3),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, keyC3),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, CRUS),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, CRUS),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, PTGEN),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, PTGEN),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, cassette_motor),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, cassette_motor),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, audio_gate),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, audio_gate),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, cassette_output),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, cassette_output),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
@ -698,7 +698,7 @@ const tms9901_interface tms9901_wiring_ti99_8 =
|
|||||||
DEVCB_NULL
|
DEVCB_NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
DEVCB_DRIVER_MEMBER(ti99_8, tms9901_interrupt)
|
DEVCB_DRIVER_MEMBER(ti99_8_state, tms9901_interrupt)
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@ -706,7 +706,7 @@ const tms9901_interface tms9901_wiring_ti99_8 =
|
|||||||
/*
|
/*
|
||||||
set the state of TMS9901's INT2 (called by the tms9928 core)
|
set the state of TMS9901's INT2 (called by the tms9928 core)
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::set_tms9901_INT2 )
|
WRITE_LINE_MEMBER( ti99_8_state::set_tms9901_INT2 )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_8: VDP int 2 on tms9901, level=%02x\n", state);
|
if (VERBOSE>6) LOG("ti99_8: VDP int 2 on tms9901, level=%02x\n", state);
|
||||||
m_tms9901->set_single_int(2, state);
|
m_tms9901->set_single_int(2, state);
|
||||||
@ -717,7 +717,7 @@ WRITE_LINE_MEMBER( ti99_8::set_tms9901_INT2 )
|
|||||||
***********************************************************/
|
***********************************************************/
|
||||||
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_8::console_ready )
|
WRITE_LINE_MEMBER( ti99_8_state::console_ready )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_8: READY level=%02x\n", state);
|
if (VERBOSE>6) LOG("ti99_8: READY level=%02x\n", state);
|
||||||
m_ready_line = state;
|
m_ready_line = state;
|
||||||
@ -728,7 +728,7 @@ WRITE_LINE_MEMBER( ti99_8::console_ready )
|
|||||||
/*
|
/*
|
||||||
The RESET line leading to a reset of the CPU.
|
The RESET line leading to a reset of the CPU.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::console_reset )
|
WRITE_LINE_MEMBER( ti99_8_state::console_reset )
|
||||||
{
|
{
|
||||||
if (machine().phase() != MACHINE_PHASE_INIT)
|
if (machine().phase() != MACHINE_PHASE_INIT)
|
||||||
{
|
{
|
||||||
@ -742,21 +742,21 @@ WRITE_LINE_MEMBER( ti99_8::console_reset )
|
|||||||
the READY line, and the mapper raises READY depending on the clock pulse.
|
the READY line, and the mapper raises READY depending on the clock pulse.
|
||||||
So we must make sure this does not interfere.
|
So we must make sure this does not interfere.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::console_ready_mapper )
|
WRITE_LINE_MEMBER( ti99_8_state::console_ready_mapper )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_8: READY level (mapper) = %02x\n", state);
|
if (VERBOSE>6) LOG("ti99_8: READY level (mapper) = %02x\n", state);
|
||||||
m_ready_line1 = state;
|
m_ready_line1 = state;
|
||||||
m_cpu->set_ready((m_ready_line == ASSERT_LINE && m_ready_line1 == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE);
|
m_cpu->set_ready((m_ready_line == ASSERT_LINE && m_ready_line1 == ASSERT_LINE)? ASSERT_LINE : CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_8::extint )
|
WRITE_LINE_MEMBER( ti99_8_state::extint )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_8: EXTINT level = %02x\n", state);
|
if (VERBOSE>6) LOG("ti99_8: EXTINT level = %02x\n", state);
|
||||||
if (m_tms9901 != NULL)
|
if (m_tms9901 != NULL)
|
||||||
m_tms9901->set_single_int(1, state);
|
m_tms9901->set_single_int(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( ti99_8::notconnected )
|
WRITE_LINE_MEMBER( ti99_8_state::notconnected )
|
||||||
{
|
{
|
||||||
if (VERBOSE>6) LOG("ti99_8: Setting a not connected line ... ignored\n");
|
if (VERBOSE>6) LOG("ti99_8: Setting a not connected line ... ignored\n");
|
||||||
}
|
}
|
||||||
@ -765,10 +765,10 @@ static TMS9928A_INTERFACE(ti99_8_tms9118a_interface)
|
|||||||
{
|
{
|
||||||
SCREEN_TAG,
|
SCREEN_TAG,
|
||||||
0x4000,
|
0x4000,
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, set_tms9901_INT2)
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, set_tms9901_INT2)
|
||||||
};
|
};
|
||||||
|
|
||||||
WRITE8_MEMBER( ti99_8::external_operation )
|
WRITE8_MEMBER( ti99_8_state::external_operation )
|
||||||
{
|
{
|
||||||
static const char* extop[8] = { "inv1", "inv2", "IDLE", "RSET", "inv3", "CKON", "CKOF", "LREX" };
|
static const char* extop[8] = { "inv1", "inv2", "IDLE", "RSET", "inv3", "CKON", "CKOF", "LREX" };
|
||||||
if (VERBOSE>1) LOG("External operation %s not implemented on TI-99 board\n", extop[offset]);
|
if (VERBOSE>1) LOG("External operation %s not implemented on TI-99 board\n", extop[offset]);
|
||||||
@ -777,7 +777,7 @@ WRITE8_MEMBER( ti99_8::external_operation )
|
|||||||
/*
|
/*
|
||||||
Clock line from the CPU. Used to control wait state generation.
|
Clock line from the CPU. Used to control wait state generation.
|
||||||
*/
|
*/
|
||||||
WRITE_LINE_MEMBER( ti99_8::clock_out )
|
WRITE_LINE_MEMBER( ti99_8_state::clock_out )
|
||||||
{
|
{
|
||||||
m_mapper->clock_in(state);
|
m_mapper->clock_in(state);
|
||||||
}
|
}
|
||||||
@ -791,9 +791,9 @@ WRITE_LINE_MEMBER( ti99_8::clock_out )
|
|||||||
*/
|
*/
|
||||||
static TMS9995_CONFIG( ti99_8_processor_config )
|
static TMS9995_CONFIG( ti99_8_processor_config )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_MEMBER(ti99_8, external_operation),
|
DEVCB_DRIVER_MEMBER(ti99_8_state, external_operation),
|
||||||
DEVCB_NULL, // Instruction acquisition
|
DEVCB_NULL, // Instruction acquisition
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, clock_out),
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, clock_out),
|
||||||
DEVCB_NULL, // wait
|
DEVCB_NULL, // wait
|
||||||
DEVCB_NULL, // HOLDA
|
DEVCB_NULL, // HOLDA
|
||||||
NO_INTERNAL_RAM,
|
NO_INTERNAL_RAM,
|
||||||
@ -802,7 +802,7 @@ static TMS9995_CONFIG( ti99_8_processor_config )
|
|||||||
|
|
||||||
static TI_SOUND_CONFIG( sound_conf )
|
static TI_SOUND_CONFIG( sound_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready) // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready) // READY
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -902,13 +902,13 @@ static const mapper8_list_entry mapper_devices[] =
|
|||||||
|
|
||||||
static MAPPER8_CONFIG( mapper_conf )
|
static MAPPER8_CONFIG( mapper_conf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready_mapper), // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready_mapper), // READY
|
||||||
mapper_devices
|
mapper_devices
|
||||||
};
|
};
|
||||||
|
|
||||||
static SPEECH8_CONFIG( speech_config )
|
static SPEECH8_CONFIG( speech_config )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), // READY
|
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), // READY
|
||||||
};
|
};
|
||||||
|
|
||||||
static JOYPORT_CONFIG( joyport8_60 )
|
static JOYPORT_CONFIG( joyport8_60 )
|
||||||
@ -923,7 +923,7 @@ static JOYPORT_CONFIG( joyport8_50 )
|
|||||||
50
|
50
|
||||||
};
|
};
|
||||||
|
|
||||||
void ti99_8::machine_start()
|
void ti99_8_state::machine_start()
|
||||||
{
|
{
|
||||||
m_cpu = static_cast<tms9995_device*>(machine().device("maincpu"));
|
m_cpu = static_cast<tms9995_device*>(machine().device("maincpu"));
|
||||||
m_tms9901 = static_cast<tms9901_device*>(machine().device(TMS9901_TAG));
|
m_tms9901 = static_cast<tms9901_device*>(machine().device(TMS9901_TAG));
|
||||||
@ -938,7 +938,7 @@ void ti99_8::machine_start()
|
|||||||
m_firstjoy = 14;
|
m_firstjoy = 14;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ti99_8::machine_reset()
|
void ti99_8_state::machine_reset()
|
||||||
{
|
{
|
||||||
|
|
||||||
m_cpu->set_hold(CLEAR_LINE);
|
m_cpu->set_hold(CLEAR_LINE);
|
||||||
@ -957,7 +957,7 @@ void ti99_8::machine_reset()
|
|||||||
m_ready_line = m_ready_line1 = ASSERT_LINE;
|
m_ready_line = m_ready_line1 = ASSERT_LINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( ti99_8_60hz, ti99_8 )
|
static MACHINE_CONFIG_START( ti99_8_60hz, ti99_8_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
/* TMS9995-MP9537 CPU @ 10.7 MHz */
|
/* TMS9995-MP9537 CPU @ 10.7 MHz */
|
||||||
MCFG_TMS9995_ADD("maincpu", TMS9995, 10738635, memmap, crumap, ti99_8_processor_config)
|
MCFG_TMS9995_ADD("maincpu", TMS9995, 10738635, memmap, crumap, ti99_8_processor_config)
|
||||||
@ -1001,7 +1001,7 @@ static MACHINE_CONFIG_START( ti99_8_60hz, ti99_8 )
|
|||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( ti99_8_50hz, ti99_8 )
|
static MACHINE_CONFIG_START( ti99_8_50hz, ti99_8_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
/* TMS9995-MP9537 CPU @ 10.7 MHz */
|
/* TMS9995-MP9537 CPU @ 10.7 MHz */
|
||||||
MCFG_TMS9995_ADD("maincpu", TMS9995, 10738635, memmap, crumap, ti99_8_processor_config)
|
MCFG_TMS9995_ADD("maincpu", TMS9995, 10738635, memmap, crumap, ti99_8_processor_config)
|
||||||
|
@ -69,10 +69,10 @@
|
|||||||
#include "tm990189v.lh"
|
#include "tm990189v.lh"
|
||||||
|
|
||||||
|
|
||||||
class tm990189 : public driver_device
|
class tm990189_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tm990189(const machine_config &mconfig, device_type type, const char *tag)
|
tm990189_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_tms9980a(*this, "maincpu"),
|
m_tms9980a(*this, "maincpu"),
|
||||||
m_speaker(*this, SPEAKER_TAG),
|
m_speaker(*this, SPEAKER_TAG),
|
||||||
@ -161,14 +161,14 @@ static void hold_load(running_machine &machine);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
MACHINE_RESET_MEMBER(tm990189,tm990_189)
|
MACHINE_RESET_MEMBER(tm990189_state,tm990_189)
|
||||||
{
|
{
|
||||||
m_tms9980a->set_ready(ASSERT_LINE);
|
m_tms9980a->set_ready(ASSERT_LINE);
|
||||||
m_tms9980a->set_hold(CLEAR_LINE);
|
m_tms9980a->set_hold(CLEAR_LINE);
|
||||||
hold_load(machine());
|
hold_load(machine());
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START_MEMBER(tm990189,tm990_189)
|
MACHINE_START_MEMBER(tm990189_state,tm990_189)
|
||||||
{
|
{
|
||||||
m_displayena_timer = machine().scheduler().timer_alloc(FUNC_NULL);
|
m_displayena_timer = machine().scheduler().timer_alloc(FUNC_NULL);
|
||||||
}
|
}
|
||||||
@ -180,7 +180,7 @@ static TMS9928A_INTERFACE(tms9918_interface)
|
|||||||
DEVCB_NULL
|
DEVCB_NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
MACHINE_START_MEMBER(tm990189,tm990_189_v)
|
MACHINE_START_MEMBER(tm990189_state,tm990_189_v)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_displayena_timer = machine().scheduler().timer_alloc(FUNC_NULL);
|
m_displayena_timer = machine().scheduler().timer_alloc(FUNC_NULL);
|
||||||
@ -191,7 +191,7 @@ MACHINE_START_MEMBER(tm990189,tm990_189_v)
|
|||||||
m_joy2y_timer = machine().scheduler().timer_alloc(FUNC_NULL);
|
m_joy2y_timer = machine().scheduler().timer_alloc(FUNC_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_RESET_MEMBER(tm990189,tm990_189_v)
|
MACHINE_RESET_MEMBER(tm990189_state,tm990_189_v)
|
||||||
{
|
{
|
||||||
m_tms9980a->set_ready(ASSERT_LINE);
|
m_tms9980a->set_ready(ASSERT_LINE);
|
||||||
m_tms9980a->set_hold(CLEAR_LINE);
|
m_tms9980a->set_hold(CLEAR_LINE);
|
||||||
@ -201,7 +201,7 @@ MACHINE_RESET_MEMBER(tm990189,tm990_189_v)
|
|||||||
/*
|
/*
|
||||||
Will be called back from the CPU when triggering an interrupt.
|
Will be called back from the CPU when triggering an interrupt.
|
||||||
*/
|
*/
|
||||||
READ8_MEMBER( tm990189::interrupt_level )
|
READ8_MEMBER( tm990189_state::interrupt_level )
|
||||||
{
|
{
|
||||||
return m_ic_state;
|
return m_ic_state;
|
||||||
}
|
}
|
||||||
@ -212,14 +212,14 @@ READ8_MEMBER( tm990189::interrupt_level )
|
|||||||
|
|
||||||
static TIMER_CALLBACK(clear_load)
|
static TIMER_CALLBACK(clear_load)
|
||||||
{
|
{
|
||||||
tm990189 *state = machine.driver_data<tm990189>();
|
tm990189_state *state = machine.driver_data<tm990189_state>();
|
||||||
state->m_load_state = FALSE;
|
state->m_load_state = FALSE;
|
||||||
state->m_tms9980a->set_input_line(0, CLEAR_LINE);
|
state->m_tms9980a->set_input_line(0, CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hold_load(running_machine &machine)
|
static void hold_load(running_machine &machine)
|
||||||
{
|
{
|
||||||
tm990189 *state = machine.driver_data<tm990189>();
|
tm990189_state *state = machine.driver_data<tm990189_state>();
|
||||||
state->m_load_state = TRUE;
|
state->m_load_state = TRUE;
|
||||||
state->m_ic_state = 2; // LOAD interrupt
|
state->m_ic_state = 2; // LOAD interrupt
|
||||||
state->m_tms9980a->set_input_line(0, ASSERT_LINE);
|
state->m_tms9980a->set_input_line(0, ASSERT_LINE);
|
||||||
@ -229,7 +229,7 @@ static void hold_load(running_machine &machine)
|
|||||||
/*
|
/*
|
||||||
LOAD interrupt switch
|
LOAD interrupt switch
|
||||||
*/
|
*/
|
||||||
INPUT_CHANGED_MEMBER( tm990189::load_interrupt )
|
INPUT_CHANGED_MEMBER( tm990189_state::load_interrupt )
|
||||||
{
|
{
|
||||||
// When depressed, fire LOAD (neg logic)
|
// When depressed, fire LOAD (neg logic)
|
||||||
if (newval==CLEAR_LINE) hold_load(machine());
|
if (newval==CLEAR_LINE) hold_load(machine());
|
||||||
@ -243,13 +243,13 @@ INPUT_CHANGED_MEMBER( tm990189::load_interrupt )
|
|||||||
Supports EIA and TTY terminals, and an optional 9918 controller.
|
Supports EIA and TTY terminals, and an optional 9918 controller.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void tm990189::draw_digit()
|
void tm990189_state::draw_digit()
|
||||||
{
|
{
|
||||||
m_segment_state[m_digitsel] |= ~m_segment;
|
m_segment_state[m_digitsel] |= ~m_segment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(tm990189::display_callback)
|
TIMER_DEVICE_CALLBACK_MEMBER(tm990189_state::display_callback)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
char ledname[8];
|
char ledname[8];
|
||||||
@ -275,7 +275,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(tm990189::display_callback)
|
|||||||
tms9901 code
|
tms9901 code
|
||||||
*/
|
*/
|
||||||
|
|
||||||
WRITE8_MEMBER( tm990189::usr9901_interrupt_callback )
|
WRITE8_MEMBER( tm990189_state::usr9901_interrupt_callback )
|
||||||
{
|
{
|
||||||
// Triggered by internal timer (set by ROM to 1.6 ms cycle) on level 3
|
// Triggered by internal timer (set by ROM to 1.6 ms cycle) on level 3
|
||||||
// or by keyboard interrupt (level 6)
|
// or by keyboard interrupt (level 6)
|
||||||
@ -286,7 +286,7 @@ WRITE8_MEMBER( tm990189::usr9901_interrupt_callback )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tm990189::led_set(int offset, bool state)
|
void tm990189_state::led_set(int offset, bool state)
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
m_LED_state |= (1 << offset);
|
m_LED_state |= (1 << offset);
|
||||||
@ -294,32 +294,32 @@ void tm990189::led_set(int offset, bool state)
|
|||||||
m_LED_state &= ~(1 << offset);
|
m_LED_state &= ~(1 << offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::usr9901_led0_w )
|
WRITE_LINE_MEMBER( tm990189_state::usr9901_led0_w )
|
||||||
{
|
{
|
||||||
led_set(0, state);
|
led_set(0, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::usr9901_led1_w )
|
WRITE_LINE_MEMBER( tm990189_state::usr9901_led1_w )
|
||||||
{
|
{
|
||||||
led_set(1, state);
|
led_set(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::usr9901_led2_w )
|
WRITE_LINE_MEMBER( tm990189_state::usr9901_led2_w )
|
||||||
{
|
{
|
||||||
led_set(2, state);
|
led_set(2, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::usr9901_led3_w )
|
WRITE_LINE_MEMBER( tm990189_state::usr9901_led3_w )
|
||||||
{
|
{
|
||||||
led_set(3, state);
|
led_set(3, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( tm990189::sys9901_interrupt_callback )
|
WRITE8_MEMBER( tm990189_state::sys9901_interrupt_callback )
|
||||||
{
|
{
|
||||||
machine().device<tms9901_device>("tms9901_0")->set_single_int(5, (data!=0)? ASSERT_LINE:CLEAR_LINE);
|
machine().device<tms9901_device>("tms9901_0")->set_single_int(5, (data!=0)? ASSERT_LINE:CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( tm990189::sys9901_r )
|
READ8_MEMBER( tm990189_state::sys9901_r )
|
||||||
{
|
{
|
||||||
UINT8 data = 0;
|
UINT8 data = 0;
|
||||||
if (offset == TMS9901_CB_INT7)
|
if (offset == TMS9901_CB_INT7)
|
||||||
@ -338,7 +338,7 @@ READ8_MEMBER( tm990189::sys9901_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tm990189::digitsel(int offset, bool state)
|
void tm990189_state::digitsel(int offset, bool state)
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
m_digitsel |= 1 << offset;
|
m_digitsel |= 1 << offset;
|
||||||
@ -346,25 +346,25 @@ void tm990189::digitsel(int offset, bool state)
|
|||||||
m_digitsel &= ~ (1 << offset);
|
m_digitsel &= ~ (1 << offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_digitsel0_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_digitsel0_w )
|
||||||
{
|
{
|
||||||
digitsel(0, state);
|
digitsel(0, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_digitsel1_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_digitsel1_w )
|
||||||
{
|
{
|
||||||
digitsel(1, state);
|
digitsel(1, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_digitsel2_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_digitsel2_w )
|
||||||
{
|
{
|
||||||
digitsel(2, state);
|
digitsel(2, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_digitsel3_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_digitsel3_w )
|
||||||
{
|
{
|
||||||
digitsel(3, state);
|
digitsel(3, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void tm990189::segment_set(int offset, bool state)
|
void tm990189_state::segment_set(int offset, bool state)
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
m_segment |= 1 << offset;
|
m_segment |= 1 << offset;
|
||||||
@ -376,40 +376,40 @@ void tm990189::segment_set(int offset, bool state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment0_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment0_w )
|
||||||
{
|
{
|
||||||
segment_set(0, state);
|
segment_set(0, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment1_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment1_w )
|
||||||
{
|
{
|
||||||
segment_set(1, state);
|
segment_set(1, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment2_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment2_w )
|
||||||
{
|
{
|
||||||
segment_set(2, state);
|
segment_set(2, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment3_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment3_w )
|
||||||
{
|
{
|
||||||
segment_set(3, state);
|
segment_set(3, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment4_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment4_w )
|
||||||
{
|
{
|
||||||
segment_set(4, state);
|
segment_set(4, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment5_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment5_w )
|
||||||
{
|
{
|
||||||
segment_set(5, state);
|
segment_set(5, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment6_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment6_w )
|
||||||
{
|
{
|
||||||
segment_set(6, state);
|
segment_set(6, state);
|
||||||
}
|
}
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment7_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment7_w )
|
||||||
{
|
{
|
||||||
segment_set(7, state);
|
segment_set(7, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_dsplytrgr_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_dsplytrgr_w )
|
||||||
{
|
{
|
||||||
if ((!state) && (m_digitsel < 10))
|
if ((!state) && (m_digitsel < 10))
|
||||||
{
|
{
|
||||||
@ -418,7 +418,7 @@ WRITE_LINE_MEMBER( tm990189::sys9901_dsplytrgr_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_shiftlight_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_shiftlight_w )
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
m_LED_state |= 0x10;
|
m_LED_state |= 0x10;
|
||||||
@ -426,13 +426,13 @@ WRITE_LINE_MEMBER( tm990189::sys9901_shiftlight_w )
|
|||||||
m_LED_state &= ~0x10;
|
m_LED_state &= ~0x10;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_spkrdrive_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_spkrdrive_w )
|
||||||
{
|
{
|
||||||
device_t *speaker = machine().device(SPEAKER_TAG);
|
device_t *speaker = machine().device(SPEAKER_TAG);
|
||||||
speaker_level_w(speaker, state);
|
speaker_level_w(speaker, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( tm990189::sys9901_tapewdata_w )
|
WRITE_LINE_MEMBER( tm990189_state::sys9901_tapewdata_w )
|
||||||
{
|
{
|
||||||
machine().device<cassette_image_device>(CASSETTE_TAG)->output(state ? +1.0 : -1.0);
|
machine().device<cassette_image_device>(CASSETTE_TAG)->output(state ? +1.0 : -1.0);
|
||||||
}
|
}
|
||||||
@ -486,7 +486,7 @@ void tm990_189_rs232_image_device::device_start()
|
|||||||
|
|
||||||
void tm990_189_rs232_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
void tm990_189_rs232_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||||
{
|
{
|
||||||
//tm990189 *state = machine.driver_data<tm990189>();
|
//tm990189_state *state = machine.driver_data<tm990189_state>();
|
||||||
UINT8 buf;
|
UINT8 buf;
|
||||||
if (/*state->m_rs232_rts &&*/ /*(mame_ftell(state->m_rs232_fp) < mame_fsize(state->m_rs232_fp))*/1)
|
if (/*state->m_rs232_rts &&*/ /*(mame_ftell(state->m_rs232_fp) < mame_fsize(state->m_rs232_fp))*/1)
|
||||||
{
|
{
|
||||||
@ -498,7 +498,7 @@ void tm990_189_rs232_image_device::device_timer(emu_timer &timer, device_timer_i
|
|||||||
|
|
||||||
bool tm990_189_rs232_image_device::call_load()
|
bool tm990_189_rs232_image_device::call_load()
|
||||||
{
|
{
|
||||||
tm990189 *state = machine().driver_data<tm990189>();
|
tm990189_state *state = machine().driver_data<tm990189_state>();
|
||||||
tms9902_device* tms9902 = static_cast<tms9902_device*>(machine().device("tms9902"));
|
tms9902_device* tms9902 = static_cast<tms9902_device*>(machine().device("tms9902"));
|
||||||
tms9902->rcv_dsr(ASSERT_LINE);
|
tms9902->rcv_dsr(ASSERT_LINE);
|
||||||
state->m_rs232_input_timer = timer_alloc();
|
state->m_rs232_input_timer = timer_alloc();
|
||||||
@ -509,7 +509,7 @@ bool tm990_189_rs232_image_device::call_load()
|
|||||||
|
|
||||||
void tm990_189_rs232_image_device::call_unload()
|
void tm990_189_rs232_image_device::call_unload()
|
||||||
{
|
{
|
||||||
tm990189 *state = machine().driver_data<tm990189>();
|
tm990189_state *state = machine().driver_data<tm990189_state>();
|
||||||
tms9902_device* tms9902 = static_cast<tms9902_device*>(machine().device("tms9902"));
|
tms9902_device* tms9902 = static_cast<tms9902_device*>(machine().device("tms9902"));
|
||||||
tms9902->rcv_dsr(CLEAR_LINE);
|
tms9902->rcv_dsr(CLEAR_LINE);
|
||||||
|
|
||||||
@ -527,7 +527,7 @@ void tm990_189_rs232_image_device::call_unload()
|
|||||||
tms9902->set_cts(RTS);
|
tms9902->set_cts(RTS);
|
||||||
} */
|
} */
|
||||||
|
|
||||||
WRITE8_MEMBER( tm990189::xmit_callback )
|
WRITE8_MEMBER( tm990189_state::xmit_callback )
|
||||||
{
|
{
|
||||||
UINT8 buf = data;
|
UINT8 buf = data;
|
||||||
if (m_rs232_fp) m_rs232_fp->fwrite(&buf, 1);
|
if (m_rs232_fp) m_rs232_fp->fwrite(&buf, 1);
|
||||||
@ -536,7 +536,7 @@ WRITE8_MEMBER( tm990189::xmit_callback )
|
|||||||
/*
|
/*
|
||||||
External instruction decoding
|
External instruction decoding
|
||||||
*/
|
*/
|
||||||
WRITE8_MEMBER( tm990189::external_operation )
|
WRITE8_MEMBER( tm990189_state::external_operation )
|
||||||
{
|
{
|
||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
@ -569,7 +569,7 @@ WRITE8_MEMBER( tm990189::external_operation )
|
|||||||
Video Board handling
|
Video Board handling
|
||||||
*/
|
*/
|
||||||
|
|
||||||
READ8_MEMBER( tm990189::video_vdp_r )
|
READ8_MEMBER( tm990189_state::video_vdp_r )
|
||||||
{
|
{
|
||||||
int reply = 0;
|
int reply = 0;
|
||||||
|
|
||||||
@ -600,7 +600,7 @@ READ8_MEMBER( tm990189::video_vdp_r )
|
|||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( tm990189::video_vdp_w )
|
WRITE8_MEMBER( tm990189_state::video_vdp_w )
|
||||||
{
|
{
|
||||||
if (offset & 1)
|
if (offset & 1)
|
||||||
{
|
{
|
||||||
@ -611,7 +611,7 @@ WRITE8_MEMBER( tm990189::video_vdp_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( tm990189::video_joy_r )
|
READ8_MEMBER( tm990189_state::video_joy_r )
|
||||||
{
|
{
|
||||||
UINT8 data = ioport("BUTTONS")->read();
|
UINT8 data = ioport("BUTTONS")->read();
|
||||||
|
|
||||||
@ -630,7 +630,7 @@ READ8_MEMBER( tm990189::video_joy_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( tm990189::video_joy_w )
|
WRITE8_MEMBER( tm990189_state::video_joy_w )
|
||||||
{
|
{
|
||||||
m_joy1x_timer->reset(attotime::from_usec(ioport("JOY1_X")->read()*28+28));
|
m_joy1x_timer->reset(attotime::from_usec(ioport("JOY1_X")->read()*28+28));
|
||||||
m_joy1y_timer->reset(attotime::from_usec(ioport("JOY1_Y")->read()*28+28));
|
m_joy1y_timer->reset(attotime::from_usec(ioport("JOY1_Y")->read()*28+28));
|
||||||
@ -648,10 +648,10 @@ static const tms9901_interface usr9901reset_param =
|
|||||||
|
|
||||||
/* write handlers */
|
/* write handlers */
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, usr9901_led0_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, usr9901_led0_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, usr9901_led1_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, usr9901_led1_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, usr9901_led2_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, usr9901_led2_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, usr9901_led3_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, usr9901_led3_w),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
@ -667,7 +667,7 @@ static const tms9901_interface usr9901reset_param =
|
|||||||
},
|
},
|
||||||
|
|
||||||
/* interrupt handler */
|
/* interrupt handler */
|
||||||
DEVCB_DRIVER_MEMBER(tm990189, usr9901_interrupt_callback)
|
DEVCB_DRIVER_MEMBER(tm990189_state, usr9901_interrupt_callback)
|
||||||
};
|
};
|
||||||
|
|
||||||
/* system tms9901 setup */
|
/* system tms9901 setup */
|
||||||
@ -676,30 +676,30 @@ static const tms9901_interface sys9901reset_param =
|
|||||||
0, /* only input pins whose state is always known */
|
0, /* only input pins whose state is always known */
|
||||||
|
|
||||||
/* Read handler. Covers all input lines (see tms9901.h) */
|
/* Read handler. Covers all input lines (see tms9901.h) */
|
||||||
DEVCB_DRIVER_MEMBER(tm990189, sys9901_r),
|
DEVCB_DRIVER_MEMBER(tm990189_state, sys9901_r),
|
||||||
|
|
||||||
/* write handlers */
|
/* write handlers */
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_digitsel0_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_digitsel0_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_digitsel1_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_digitsel1_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_digitsel2_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_digitsel2_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_digitsel3_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_digitsel3_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment0_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment0_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment1_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment1_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment2_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment2_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment3_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment3_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment4_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment4_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment5_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment5_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment6_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment6_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment7_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment7_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_dsplytrgr_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_dsplytrgr_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_shiftlight_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_shiftlight_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_spkrdrive_w),
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_spkrdrive_w),
|
||||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_tapewdata_w)
|
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_tapewdata_w)
|
||||||
},
|
},
|
||||||
|
|
||||||
/* interrupt handler */
|
/* interrupt handler */
|
||||||
DEVCB_DRIVER_MEMBER(tm990189, sys9901_interrupt_callback)
|
DEVCB_DRIVER_MEMBER(tm990189_state, sys9901_interrupt_callback)
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -734,18 +734,18 @@ static const tms9902_interface tms9902_params =
|
|||||||
{
|
{
|
||||||
DEVCB_NULL, /*int_callback,*/ /* called when interrupt pin state changes */
|
DEVCB_NULL, /*int_callback,*/ /* called when interrupt pin state changes */
|
||||||
DEVCB_NULL, /*rcv_callback,*/ /* called when a character shall be received */
|
DEVCB_NULL, /*rcv_callback,*/ /* called when a character shall be received */
|
||||||
DEVCB_DRIVER_MEMBER(tm990189, xmit_callback), /* called when a character is transmitted */
|
DEVCB_DRIVER_MEMBER(tm990189_state, xmit_callback), /* called when a character is transmitted */
|
||||||
DEVCB_NULL /* called for setting interface parameters and line states */
|
DEVCB_NULL /* called for setting interface parameters and line states */
|
||||||
};
|
};
|
||||||
|
|
||||||
static ADDRESS_MAP_START( tm990_189_memmap, AS_PROGRAM, 8, tm990189 )
|
static ADDRESS_MAP_START( tm990_189_memmap, AS_PROGRAM, 8, tm990189_state )
|
||||||
AM_RANGE(0x0000, 0x07ff) AM_RAM /* RAM */
|
AM_RANGE(0x0000, 0x07ff) AM_RAM /* RAM */
|
||||||
AM_RANGE(0x0800, 0x0fff) AM_ROM /* extra ROM - application programs with unibug, remaining 2kb of program for university basic */
|
AM_RANGE(0x0800, 0x0fff) AM_ROM /* extra ROM - application programs with unibug, remaining 2kb of program for university basic */
|
||||||
AM_RANGE(0x1000, 0x2fff) AM_NOP /* reserved for expansion (RAM and/or tms9918 video controller) */
|
AM_RANGE(0x1000, 0x2fff) AM_NOP /* reserved for expansion (RAM and/or tms9918 video controller) */
|
||||||
AM_RANGE(0x3000, 0x3fff) AM_ROM /* main ROM - unibug or university basic */
|
AM_RANGE(0x3000, 0x3fff) AM_ROM /* main ROM - unibug or university basic */
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( tm990_189_v_memmap, AS_PROGRAM, 8, tm990189 )
|
static ADDRESS_MAP_START( tm990_189_v_memmap, AS_PROGRAM, 8, tm990189_state )
|
||||||
AM_RANGE(0x0000, 0x07ff) AM_RAM /* RAM */
|
AM_RANGE(0x0000, 0x07ff) AM_RAM /* RAM */
|
||||||
AM_RANGE(0x0800, 0x0fff) AM_ROM /* extra ROM - application programs with unibug, remaining 2kb of program for university basic */
|
AM_RANGE(0x0800, 0x0fff) AM_ROM /* extra ROM - application programs with unibug, remaining 2kb of program for university basic */
|
||||||
|
|
||||||
@ -813,7 +813,7 @@ ADDRESS_MAP_END
|
|||||||
d
|
d
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static ADDRESS_MAP_START( tm990_189_cru_map, AS_IO, 8, tm990189 )
|
static ADDRESS_MAP_START( tm990_189_cru_map, AS_IO, 8, tm990189_state )
|
||||||
AM_RANGE(0x0000, 0x003f) AM_DEVREAD("tms9901_0", tms9901_device, read) /* user I/O tms9901 */
|
AM_RANGE(0x0000, 0x003f) AM_DEVREAD("tms9901_0", tms9901_device, read) /* user I/O tms9901 */
|
||||||
AM_RANGE(0x0040, 0x006f) AM_DEVREAD("tms9901_1", tms9901_device, read) /* system I/O tms9901 */
|
AM_RANGE(0x0040, 0x006f) AM_DEVREAD("tms9901_1", tms9901_device, read) /* system I/O tms9901 */
|
||||||
AM_RANGE(0x0080, 0x00cf) AM_DEVREAD("tms9902", tms9902_device, cruread) /* optional tms9902 */
|
AM_RANGE(0x0080, 0x00cf) AM_DEVREAD("tms9902", tms9902_device, cruread) /* optional tms9902 */
|
||||||
@ -825,20 +825,20 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
static TMS99xx_CONFIG( cpuconf )
|
static TMS99xx_CONFIG( cpuconf )
|
||||||
{
|
{
|
||||||
DEVCB_DRIVER_MEMBER(tm990189, external_operation),
|
DEVCB_DRIVER_MEMBER(tm990189_state, external_operation),
|
||||||
DEVCB_DRIVER_MEMBER(tm990189, interrupt_level),
|
DEVCB_DRIVER_MEMBER(tm990189_state, interrupt_level),
|
||||||
DEVCB_NULL, // Instruction acquisition
|
DEVCB_NULL, // Instruction acquisition
|
||||||
DEVCB_NULL, // Clock out
|
DEVCB_NULL, // Clock out
|
||||||
DEVCB_NULL, // wait
|
DEVCB_NULL, // wait
|
||||||
DEVCB_NULL // Hold acknowledge
|
DEVCB_NULL // Hold acknowledge
|
||||||
};
|
};
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( tm990_189, tm990189 )
|
static MACHINE_CONFIG_START( tm990_189, tm990189_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_memmap, tm990_189_cru_map, cpuconf)
|
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_memmap, tm990_189_cru_map, cpuconf)
|
||||||
|
|
||||||
MCFG_MACHINE_START_OVERRIDE(tm990189, tm990_189 )
|
MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189 )
|
||||||
MCFG_MACHINE_RESET_OVERRIDE(tm990189, tm990_189 )
|
MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189 )
|
||||||
|
|
||||||
/* Video hardware */
|
/* Video hardware */
|
||||||
MCFG_DEFAULT_LAYOUT(layout_tm990189)
|
MCFG_DEFAULT_LAYOUT(layout_tm990189)
|
||||||
@ -856,18 +856,18 @@ static MACHINE_CONFIG_START( tm990_189, tm990189 )
|
|||||||
MCFG_TMS9901_ADD("tms9901_1", sys9901reset_param, 2000000)
|
MCFG_TMS9901_ADD("tms9901_1", sys9901reset_param, 2000000)
|
||||||
MCFG_TMS9902_ADD("tms9902", tms9902_params, 2000000)
|
MCFG_TMS9902_ADD("tms9902", tms9902_params, 2000000)
|
||||||
MCFG_TM990_189_RS232_ADD("rs232")
|
MCFG_TM990_189_RS232_ADD("rs232")
|
||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_timer", tm990189, display_callback, attotime::from_hz(30))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_timer", tm990189_state, display_callback, attotime::from_hz(30))
|
||||||
// Need to delay the timer, or it will spoil the initial LOAD
|
// Need to delay the timer, or it will spoil the initial LOAD
|
||||||
// TODO: Fix this, probably inside CPU
|
// TODO: Fix this, probably inside CPU
|
||||||
MCFG_TIMER_START_DELAY(attotime::from_msec(150))
|
MCFG_TIMER_START_DELAY(attotime::from_msec(150))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( tm990_189_v, tm990189 )
|
static MACHINE_CONFIG_START( tm990_189_v, tm990189_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_v_memmap, tm990_189_cru_map, cpuconf)
|
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_v_memmap, tm990_189_cru_map, cpuconf)
|
||||||
|
|
||||||
MCFG_MACHINE_START_OVERRIDE(tm990189, tm990_189_v )
|
MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189_v )
|
||||||
MCFG_MACHINE_RESET_OVERRIDE(tm990189, tm990_189_v )
|
MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189_v )
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_TMS9928A_ADD( "tms9918", TMS9918, tms9918_interface )
|
MCFG_TMS9928A_ADD( "tms9918", TMS9918, tms9918_interface )
|
||||||
@ -888,7 +888,7 @@ static MACHINE_CONFIG_START( tm990_189_v, tm990189 )
|
|||||||
MCFG_TMS9901_ADD("tms9901_1", sys9901reset_param, 2000000)
|
MCFG_TMS9901_ADD("tms9901_1", sys9901reset_param, 2000000)
|
||||||
MCFG_TMS9902_ADD("tms9902", tms9902_params, 2000000)
|
MCFG_TMS9902_ADD("tms9902", tms9902_params, 2000000)
|
||||||
MCFG_TM990_189_RS232_ADD("rs232")
|
MCFG_TM990_189_RS232_ADD("rs232")
|
||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_timer", tm990189, display_callback, attotime::from_hz(30))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_timer", tm990189_state, display_callback, attotime::from_hz(30))
|
||||||
MCFG_TIMER_START_DELAY(attotime::from_msec(150))
|
MCFG_TIMER_START_DELAY(attotime::from_msec(150))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -931,7 +931,7 @@ ROM_END
|
|||||||
static INPUT_PORTS_START(tm990_189)
|
static INPUT_PORTS_START(tm990_189)
|
||||||
|
|
||||||
PORT_START( "LOADINT ")
|
PORT_START( "LOADINT ")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Load interrupt") PORT_CODE(KEYCODE_PRTSCR) PORT_CHANGED_MEMBER(DEVICE_SELF, tm990189, load_interrupt, 1)
|
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Load interrupt") PORT_CODE(KEYCODE_PRTSCR) PORT_CHANGED_MEMBER(DEVICE_SELF, tm990189_state, load_interrupt, 1)
|
||||||
|
|
||||||
/* 45-key calculator-like alphanumeric keyboard... */
|
/* 45-key calculator-like alphanumeric keyboard... */
|
||||||
PORT_START("LINE0") /* row 0 */
|
PORT_START("LINE0") /* row 0 */
|
||||||
|
Loading…
Reference in New Issue
Block a user