Rename driver state classes to have _state in their names (no whatsnew)

This commit is contained in:
Miodrag Milanovic 2012-10-03 12:12:48 +00:00
parent e52d60b7f8
commit ee491e3f30
5 changed files with 334 additions and 334 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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 */