mirror of
https://github.com/holub/mame
synced 2025-04-28 19:14:55 +03:00
Rename driver state classes to have _state in their names (no whatsnew)
This commit is contained in:
parent
e52d60b7f8
commit
ee491e3f30
@ -219,10 +219,10 @@
|
||||
#define SRAM_SIZE 384*1024 // maximum SRAM expansion on-board
|
||||
#define DRAM_SIZE 512*1024
|
||||
|
||||
class geneve : public driver_device
|
||||
class geneve_state : public driver_device
|
||||
{
|
||||
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) { }
|
||||
|
||||
// CRU (Communication Register Unit) handling
|
||||
@ -281,7 +281,7 @@ private:
|
||||
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)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -293,7 +293,7 @@ ADDRESS_MAP_END
|
||||
TODO: Check whether A0-A2 are available for CRU addressing since those
|
||||
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, 0x0fff) AM_READ( cruread )
|
||||
|
||||
@ -337,7 +337,7 @@ INPUT_PORTS_END
|
||||
#define CRU_CONTROL_BASE 0x1ee0
|
||||
#define CRU_SSTEP_BASE 0x13c0
|
||||
|
||||
WRITE8_MEMBER ( geneve::cruwrite )
|
||||
WRITE8_MEMBER ( geneve_state::cruwrite )
|
||||
{
|
||||
int addroff = offset << 1;
|
||||
|
||||
@ -407,7 +407,7 @@ WRITE8_MEMBER ( geneve::cruwrite )
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER( geneve::cruread )
|
||||
READ8_MEMBER( geneve_state::cruread )
|
||||
{
|
||||
UINT8 value = 0;
|
||||
int addroff = offset << 4;
|
||||
@ -433,7 +433,7 @@ READ8_MEMBER( geneve::cruread )
|
||||
CRU callbacks
|
||||
***********************************************************************/
|
||||
|
||||
READ8_MEMBER( geneve::read_by_9901 )
|
||||
READ8_MEMBER( geneve_state::read_by_9901 )
|
||||
{
|
||||
int answer = 0;
|
||||
|
||||
@ -495,7 +495,7 @@ READ8_MEMBER( geneve::read_by_9901 )
|
||||
/*
|
||||
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");
|
||||
}
|
||||
@ -503,7 +503,7 @@ WRITE_LINE_MEMBER( geneve::peripheral_bus_reset )
|
||||
/*
|
||||
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");
|
||||
}
|
||||
@ -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_LINE_MEMBER( geneve::joystick_select )
|
||||
WRITE_LINE_MEMBER( geneve_state::joystick_select )
|
||||
{
|
||||
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_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);
|
||||
}
|
||||
@ -528,7 +528,7 @@ WRITE_LINE_MEMBER( geneve::extbus_wait_states )
|
||||
Write vdp wait cycles (1=add 14 cycles, 0=add none)
|
||||
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);
|
||||
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
|
||||
(INT1 and INT4).
|
||||
*/
|
||||
WRITE8_MEMBER( geneve::tms9901_interrupt )
|
||||
WRITE8_MEMBER( geneve_state::tms9901_interrupt )
|
||||
{
|
||||
/* INTREQ is connected to INT1. */
|
||||
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 */
|
||||
|
||||
// read handler
|
||||
DEVCB_DRIVER_MEMBER(geneve, read_by_9901),
|
||||
DEVCB_DRIVER_MEMBER(geneve_state, read_by_9901),
|
||||
|
||||
{ /* write handlers */
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve, peripheral_bus_reset),
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve, VDP_reset),
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve, joystick_select),
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve_state, peripheral_bus_reset),
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve_state, VDP_reset),
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve_state, joystick_select),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
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_DRIVER_LINE_MEMBER(geneve, video_wait_states),
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve_state, video_wait_states),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -575,7 +575,7 @@ const tms9901_interface tms9901_wiring_geneve =
|
||||
},
|
||||
|
||||
/* 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.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( geneve::inta )
|
||||
WRITE_LINE_MEMBER( geneve_state::inta )
|
||||
{
|
||||
m_inta = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
||||
m_tms9901->set_single_int(1, state);
|
||||
@ -594,20 +594,20 @@ WRITE_LINE_MEMBER( geneve::inta )
|
||||
/*
|
||||
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_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);
|
||||
m_ready_line = state;
|
||||
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);
|
||||
m_ready_line1 = state;
|
||||
@ -617,7 +617,7 @@ WRITE_LINE_MEMBER( geneve::mapper_ready )
|
||||
/*
|
||||
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_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.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( geneve::keyboard_interrupt )
|
||||
WRITE_LINE_MEMBER( geneve_state::keyboard_interrupt )
|
||||
{
|
||||
m_keyint = (state!=0)? ASSERT_LINE : CLEAR_LINE;
|
||||
m_tms9901->set_single_int(8, state);
|
||||
@ -635,7 +635,7 @@ WRITE_LINE_MEMBER( geneve::keyboard_interrupt )
|
||||
/*
|
||||
scanline interrupt
|
||||
*/
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(geneve::geneve_hblank_interrupt)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(geneve_state::geneve_hblank_interrupt)
|
||||
{
|
||||
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" };
|
||||
if (VERBOSE>1)
|
||||
@ -663,16 +663,16 @@ WRITE8_MEMBER( geneve::external_operation )
|
||||
/*
|
||||
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);
|
||||
}
|
||||
|
||||
static TMS9995_CONFIG( geneve_processor_config )
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER(geneve, external_operation),
|
||||
DEVCB_DRIVER_MEMBER(geneve_state, external_operation),
|
||||
DEVCB_NULL, // Instruction acquisition
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve, clock_out),
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve_state, clock_out),
|
||||
DEVCB_NULL, // wait
|
||||
DEVCB_NULL, // HOLDA
|
||||
INTERNAL_RAM, // use internal RAM
|
||||
@ -681,7 +681,7 @@ static TMS9995_CONFIG( geneve_processor_config )
|
||||
|
||||
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 =
|
||||
@ -692,20 +692,20 @@ static const mm58274c_interface geneve_mm58274c_interface =
|
||||
|
||||
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 )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve, inta), // INTA
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve, intb), // INTB
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve, ext_ready), // READY
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve_state, inta), // INTA
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve_state, intb), // INTB
|
||||
DEVCB_DRIVER_LINE_MEMBER(geneve_state, ext_ready), // READY
|
||||
0x00000 // Address bus prefix (Mapper will produce prefixes)
|
||||
};
|
||||
|
||||
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 )
|
||||
@ -714,11 +714,11 @@ static JOYPORT_CONFIG( joyport_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_mapper = static_cast<geneve_mapper_device*>(machine().device(GMAPPER_TAG));
|
||||
@ -732,7 +732,7 @@ void geneve::machine_start()
|
||||
/*
|
||||
Reset the machine.
|
||||
*/
|
||||
void geneve::machine_reset()
|
||||
void geneve_state::machine_reset()
|
||||
{
|
||||
m_inta = CLEAR_LINE; // flag reflecting the INTA 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
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( geneve_60hz, geneve )
|
||||
static MACHINE_CONFIG_START( geneve_60hz, geneve_state )
|
||||
// basic machine hardware
|
||||
// TMS9995 CPU @ 12.0 MHz
|
||||
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
|
||||
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
||||
// 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_TIMER_DRIVER_ADD_SCANLINE("scantimer", geneve, geneve_hblank_interrupt, SCREEN_TAG, 0, 1) /* 262.5 in 60Hz, 312.5 in 50Hz */
|
||||
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_state, geneve_hblank_interrupt, SCREEN_TAG, 0, 1) /* 262.5 in 60Hz, 312.5 in 50Hz */
|
||||
|
||||
// Main board components
|
||||
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_geneve, 3000000)
|
||||
@ -802,4 +802,4 @@ ROM_START(geneve)
|
||||
ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
||||
COMP( 1987,geneve, 0, 0, geneve_60hz, geneve, geneve, geneve, "Myarc", "Geneve 9640" , 0)
|
||||
COMP( 1987,geneve, 0, 0, geneve_60hz, geneve, geneve_state, geneve, "Myarc", "Geneve 9640" , 0)
|
||||
|
@ -57,10 +57,10 @@
|
||||
#define VERBOSE 1
|
||||
#define LOG logerror
|
||||
|
||||
class ti99_4p : public driver_device
|
||||
class ti99_4p_state : public driver_device
|
||||
{
|
||||
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) { }
|
||||
|
||||
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 )
|
||||
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, 0x01ff) AM_READ( cruread )
|
||||
|
||||
@ -260,7 +260,7 @@ INPUT_PORTS_END
|
||||
/*
|
||||
Memory access
|
||||
*/
|
||||
READ16_MEMBER( ti99_4p::memread )
|
||||
READ16_MEMBER( ti99_4p_state::memread )
|
||||
{
|
||||
int addroff = offset << 1;
|
||||
if (m_rom0 == NULL) return 0; // premature access
|
||||
@ -336,7 +336,7 @@ READ16_MEMBER( ti99_4p::memread )
|
||||
return value;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( ti99_4p::memwrite )
|
||||
WRITE16_MEMBER( ti99_4p_state::memwrite )
|
||||
{
|
||||
// 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 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)
|
||||
{
|
||||
@ -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;
|
||||
UINT16 addroff = (offset << 1);
|
||||
@ -451,7 +451,7 @@ READ16_MEMBER( ti99_4p::datamux_read )
|
||||
Write access.
|
||||
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);
|
||||
// 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
|
||||
*/
|
||||
WRITE8_MEMBER( ti99_4p::cruwrite )
|
||||
WRITE8_MEMBER( ti99_4p_state::cruwrite )
|
||||
{
|
||||
int addroff = offset<<1;
|
||||
|
||||
@ -503,7 +503,7 @@ WRITE8_MEMBER( ti99_4p::cruwrite )
|
||||
m_peribox->cruwrite(addroff, data);
|
||||
}
|
||||
|
||||
READ8_MEMBER( ti99_4p::cruread )
|
||||
READ8_MEMBER( ti99_4p_state::cruread )
|
||||
{
|
||||
UINT8 value = 0;
|
||||
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
|
||||
(only even addresses).
|
||||
*/
|
||||
READ16_MEMBER( ti99_4p::samsmem_read )
|
||||
READ16_MEMBER( ti99_4p_state::samsmem_read )
|
||||
{
|
||||
UINT32 address = 0;
|
||||
int addroff = offset << 1;
|
||||
@ -536,7 +536,7 @@ READ16_MEMBER( ti99_4p::samsmem_read )
|
||||
/*
|
||||
Memory write
|
||||
*/
|
||||
WRITE16_MEMBER( ti99_4p::samsmem_write )
|
||||
WRITE16_MEMBER( ti99_4p_state::samsmem_write )
|
||||
{
|
||||
UINT32 address = 0;
|
||||
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" };
|
||||
|
||||
READ8_MEMBER( ti99_4p::read_by_9901 )
|
||||
READ8_MEMBER( ti99_4p_state::read_by_9901 )
|
||||
{
|
||||
int answer=0;
|
||||
|
||||
@ -613,7 +613,7 @@ READ8_MEMBER( ti99_4p::read_by_9901 )
|
||||
/*
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( ti99_4p::keyC1 )
|
||||
WRITE_LINE_MEMBER( ti99_4p_state::keyC1 )
|
||||
{
|
||||
set_keyboard_column(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( ti99_4p::keyC2 )
|
||||
WRITE_LINE_MEMBER( ti99_4p_state::keyC2 )
|
||||
{
|
||||
set_keyboard_column(2, state);
|
||||
}
|
||||
@ -642,7 +642,7 @@ WRITE_LINE_MEMBER( ti99_4p::keyC2 )
|
||||
/*
|
||||
WRITE alpha lock line (P5)
|
||||
*/
|
||||
WRITE_LINE_MEMBER( ti99_4p::alphaW )
|
||||
WRITE_LINE_MEMBER( ti99_4p_state::alphaW )
|
||||
{
|
||||
m_check_alphalock = (state==0);
|
||||
}
|
||||
@ -650,7 +650,7 @@ WRITE_LINE_MEMBER( ti99_4p::alphaW )
|
||||
/*
|
||||
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);
|
||||
}
|
||||
@ -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
|
||||
on its own.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( ti99_4p::audio_gate )
|
||||
WRITE_LINE_MEMBER( ti99_4p_state::audio_gate )
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
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);
|
||||
}
|
||||
@ -682,19 +682,19 @@ const tms9901_interface tms9901_wiring_sgcpu =
|
||||
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC, /* only input pins whose state is always known */
|
||||
|
||||
// read handler
|
||||
DEVCB_DRIVER_MEMBER(ti99_4p, read_by_9901),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4p_state, read_by_9901),
|
||||
|
||||
{ // write handlers
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, keyC0),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, keyC1),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, keyC2),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, alphaW),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, cs_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, keyC0),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, keyC1),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, keyC2),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, alphaW),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, cs_motor),
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, audio_gate),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, cassette_output),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, audio_gate),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, cassette_output),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -704,7 +704,7 @@ const tms9901_interface tms9901_wiring_sgcpu =
|
||||
},
|
||||
|
||||
/* 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
|
||||
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;
|
||||
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.
|
||||
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;
|
||||
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 (m_tms9901 != NULL)
|
||||
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");
|
||||
}
|
||||
@ -764,12 +764,12 @@ WRITE_LINE_MEMBER( ti99_4p::notconnected )
|
||||
/*
|
||||
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);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ti99_4p::tms9901_interrupt )
|
||||
WRITE8_MEMBER( ti99_4p_state::tms9901_interrupt )
|
||||
{
|
||||
// offset contains the interrupt level (0-15)
|
||||
// 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);
|
||||
}
|
||||
|
||||
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
|
||||
// at the CPU are hardwired to level 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" };
|
||||
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 )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, extint), // INTA
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, notconnected), // INTB
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, console_ready), // READY
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, extint), // INTA
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, notconnected), // INTB
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, console_ready), // READY
|
||||
0x70000 // Address bus prefix (AMA/AMB/AMC)
|
||||
};
|
||||
|
||||
static TMS99xx_CONFIG( sgcpu_cpuconf )
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER(ti99_4p, external_operation),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4p, interrupt_level),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4p_state, external_operation),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4p_state, interrupt_level),
|
||||
DEVCB_NULL, // Instruction acquisition
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p, clock_out),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4p_state, clock_out),
|
||||
DEVCB_NULL, // wait
|
||||
DEVCB_NULL // Hold acknowledge
|
||||
};
|
||||
|
||||
void ti99_4p::machine_start()
|
||||
void ti99_4p_state::machine_start()
|
||||
{
|
||||
|
||||
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)
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
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 )
|
||||
@ -860,7 +860,7 @@ static JOYPORT_CONFIG( joyport4a_60 )
|
||||
/*
|
||||
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);
|
||||
|
||||
@ -868,7 +868,7 @@ MACHINE_RESET_MEMBER(ti99_4p,ti99_4p)
|
||||
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();
|
||||
}
|
||||
@ -876,7 +876,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ti99_4p::sgcpu_hblank_interrupt)
|
||||
/*
|
||||
Machine description.
|
||||
*/
|
||||
static MACHINE_CONFIG_START( ti99_4p_60hz, ti99_4p )
|
||||
static MACHINE_CONFIG_START( ti99_4p_60hz, ti99_4p_state )
|
||||
/* basic machine hardware */
|
||||
/* TMS9900 CPU @ 3.0 MHz */
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, sgcpu_cpuconf)
|
||||
@ -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
|
||||
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
||||
// 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_TIMER_DRIVER_ADD_SCANLINE("scantimer", ti99_4p, sgcpu_hblank_interrupt, SCREEN_TAG, 0, 1)
|
||||
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_state, sgcpu_hblank_interrupt, SCREEN_TAG, 0, 1)
|
||||
|
||||
// tms9901
|
||||
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_sgcpu, 3000000)
|
||||
|
@ -60,10 +60,10 @@
|
||||
/*
|
||||
The console.
|
||||
*/
|
||||
class ti99_4x : public driver_device
|
||||
class ti99_4x_state : public driver_device
|
||||
{
|
||||
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) { }
|
||||
|
||||
// CRU (Communication Register Unit) handling
|
||||
@ -132,7 +132,7 @@ private:
|
||||
to the 16bit bus, and the wait state logic is not active during their
|
||||
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)
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
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
|
||||
*/
|
||||
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, 0x01ff) AM_READ(cruread)
|
||||
|
||||
@ -234,7 +234,7 @@ static INPUT_PORTS_START(ti99_4a)
|
||||
PORT_CONFSETTING( 0x01, DEF_STR( On ) )
|
||||
|
||||
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_BIT(0x88, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
@ -310,39 +310,39 @@ INPUT_PORTS_END
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_reset)
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_reset)
|
||||
};
|
||||
|
||||
static PERIBOX_CONFIG( peribox_conf )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, extint), // INTA
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, notconnected), // INTB
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready), // READY
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, extint), // INTA
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, notconnected), // INTB
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready), // READY
|
||||
0x70000 // Address bus prefix (AMA/AMB/AMC)
|
||||
};
|
||||
|
||||
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);
|
||||
UINT8 value = 0;
|
||||
@ -356,14 +356,14 @@ READ8_MEMBER( ti99_4x::cruread )
|
||||
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);
|
||||
m_gromport->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" };
|
||||
// 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" };
|
||||
|
||||
READ8_MEMBER( ti99_4x::read_by_9901 )
|
||||
READ8_MEMBER( ti99_4x_state::read_by_9901 )
|
||||
{
|
||||
int answer=0;
|
||||
|
||||
@ -475,7 +475,7 @@ READ8_MEMBER( ti99_4x::read_by_9901 )
|
||||
/*
|
||||
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
|
||||
// ACK line.
|
||||
@ -485,7 +485,7 @@ WRITE_LINE_MEMBER( ti99_4x::handset_ack )
|
||||
/*
|
||||
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)
|
||||
m_keyboard_column |= 1 << number;
|
||||
@ -506,17 +506,17 @@ void ti99_4x::set_keyboard_column(int number, int data)
|
||||
// joystick 2 = column 7
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( ti99_4x::keyC0 )
|
||||
WRITE_LINE_MEMBER( ti99_4x_state::keyC0 )
|
||||
{
|
||||
set_keyboard_column(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( ti99_4x::keyC1 )
|
||||
WRITE_LINE_MEMBER( ti99_4x_state::keyC1 )
|
||||
{
|
||||
set_keyboard_column(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( ti99_4x::keyC2 )
|
||||
WRITE_LINE_MEMBER( ti99_4x_state::keyC2 )
|
||||
{
|
||||
set_keyboard_column(2, state);
|
||||
}
|
||||
@ -524,7 +524,7 @@ WRITE_LINE_MEMBER( ti99_4x::keyC2 )
|
||||
/*
|
||||
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);
|
||||
}
|
||||
@ -532,7 +532,7 @@ WRITE_LINE_MEMBER( ti99_4x::alphaW )
|
||||
/*
|
||||
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);
|
||||
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)
|
||||
*/
|
||||
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);
|
||||
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
|
||||
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)
|
||||
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>(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)
|
||||
// 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);
|
||||
}
|
||||
|
||||
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
|
||||
// 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.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( ti99_4x::clock_out )
|
||||
WRITE_LINE_MEMBER( ti99_4x_state::clock_out )
|
||||
{
|
||||
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)
|
||||
*/
|
||||
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);
|
||||
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);
|
||||
}
|
||||
@ -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)
|
||||
*/
|
||||
WRITE_LINE_MEMBER( ti99_4x::set_tms9901_INT12)
|
||||
WRITE_LINE_MEMBER( ti99_4x_state::set_tms9901_INT12)
|
||||
{
|
||||
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
|
||||
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);
|
||||
}
|
||||
@ -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
|
||||
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;
|
||||
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.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( ti99_4x::console_reset )
|
||||
WRITE_LINE_MEMBER( ti99_4x_state::console_reset )
|
||||
{
|
||||
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.
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
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 (m_tms9901 != NULL)
|
||||
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");
|
||||
}
|
||||
@ -695,7 +695,7 @@ static TMS9928A_INTERFACE(ti99_4_tms9928a_interface)
|
||||
{
|
||||
SCREEN_TAG,
|
||||
0x4000,
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, set_tms9901_INT2)
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, set_tms9901_INT2)
|
||||
};
|
||||
|
||||
/* 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 */
|
||||
|
||||
// read handler
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x, read_by_9901),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x_state, read_by_9901),
|
||||
|
||||
// write handlers
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, handset_ack),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, handset_ack),
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC0),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC1),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC2),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC0),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC1),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC2),
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cs1_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cs2_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, audio_gate),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cassette_output),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs1_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs2_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, audio_gate),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cassette_output),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -727,7 +727,7 @@ const tms9901_interface tms9901_wiring_ti99_4 =
|
||||
},
|
||||
|
||||
// interrupt handler
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x, tms9901_interrupt)
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x_state, tms9901_interrupt)
|
||||
};
|
||||
|
||||
const tms9901_interface tms9901_wiring_ti99_4a =
|
||||
@ -735,20 +735,20 @@ const tms9901_interface tms9901_wiring_ti99_4a =
|
||||
TMS9901_INT1 | TMS9901_INT2 | TMS9901_INTC,
|
||||
|
||||
// read handler
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x, read_by_9901),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x_state, read_by_9901),
|
||||
|
||||
// write handlers
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC0),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC1),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, keyC2),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, alphaW),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cs1_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cs2_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, audio_gate),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, cassette_output),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC0),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC1),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, keyC2),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, alphaW),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs1_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cs2_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, audio_gate),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, cassette_output),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -757,7 +757,7 @@ const tms9901_interface tms9901_wiring_ti99_4a =
|
||||
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 )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, console_ready_dmux), // READY
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, console_ready_dmux), // READY
|
||||
dmux_devices
|
||||
};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
static TMS99xx_CONFIG( ti99_cpuconf )
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x, external_operation),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x, interrupt_level),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x_state, external_operation),
|
||||
DEVCB_DRIVER_MEMBER(ti99_4x_state, interrupt_level),
|
||||
DEVCB_NULL, // Instruction acquisition
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x, clock_out),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_4x_state, clock_out),
|
||||
DEVCB_NULL, // wait
|
||||
DEVCB_NULL // Hold acknowledge
|
||||
};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
@ -845,7 +845,7 @@ static JOYPORT_CONFIG( joyport4a_50 )
|
||||
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"));
|
||||
@ -867,7 +867,7 @@ MACHINE_START_MEMBER(ti99_4x,ti99_4)
|
||||
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_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
|
||||
*/
|
||||
static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x )
|
||||
static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x_state )
|
||||
/* CPU */
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4 )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x, ti99_4 )
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4 )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4 )
|
||||
|
||||
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918, ti99_4_tms9928a_interface)
|
||||
|
||||
@ -917,12 +917,12 @@ static MACHINE_CONFIG_START( ti99_4_60hz, ti99_4x )
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( ti99_4_50hz, ti99_4x )
|
||||
static MACHINE_CONFIG_START( ti99_4_50hz, ti99_4x_state )
|
||||
/* CPU */
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4 )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x, ti99_4 )
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4 )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4 )
|
||||
|
||||
/* video hardware */
|
||||
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
|
||||
*/
|
||||
|
||||
MACHINE_START_MEMBER(ti99_4x,ti99_4a)
|
||||
MACHINE_START_MEMBER(ti99_4x_state,ti99_4a)
|
||||
{
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(ti99_4x,ti99_4a)
|
||||
MACHINE_RESET_MEMBER(ti99_4x_state,ti99_4a)
|
||||
{
|
||||
m_cpu->set_ready(ASSERT_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 */
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4a )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x, ti99_4a )
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||
|
||||
/* Video hardware */
|
||||
MCFG_TI_TMS991x_ADD_NTSC(VIDEO_SYSTEM_TAG, TMS9918A, ti99_4_tms9928a_interface)
|
||||
@ -1030,12 +1030,12 @@ static MACHINE_CONFIG_START( ti99_4a_60hz, ti99_4x )
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( ti99_4a_50hz, ti99_4x )
|
||||
static MACHINE_CONFIG_START( ti99_4a_50hz, ti99_4x_state )
|
||||
/* CPU */
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9900, 3000000, memmap, cru_map, ti99_cpuconf)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x, ti99_4a )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x, ti99_4a )
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(ti99_4x_state, ti99_4a )
|
||||
|
||||
/* Video hardware */
|
||||
MCFG_TI_TMS991x_ADD_PAL(VIDEO_SYSTEM_TAG, TMS9929A, ti99_4_tms9928a_interface)
|
||||
@ -1073,7 +1073,7 @@ static MACHINE_CONFIG_START( ti99_4a_50hz, ti99_4x )
|
||||
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();
|
||||
}
|
||||
@ -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),
|
||||
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 */
|
||||
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 */
|
||||
// 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
|
||||
// painted. Accordingly, the full set of lines is refreshed at 30 Hz,
|
||||
// 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_TIMER_DRIVER_ADD_SCANLINE("scantimer", ti99_4x, ti99_4ev_hblank_interrupt, SCREEN_TAG, 0, 1)
|
||||
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_state, ti99_4ev_hblank_interrupt, SCREEN_TAG, 0, 1)
|
||||
|
||||
/* Main board */
|
||||
MCFG_TMS9901_ADD(TMS9901_TAG, tms9901_wiring_ti99_4a, 3000000)
|
||||
|
@ -217,10 +217,10 @@ Known Issues (MZ, 2010-11-07)
|
||||
#define VERBOSE 0
|
||||
#define LOG logerror
|
||||
|
||||
class ti99_8 : public driver_device
|
||||
class ti99_8_state : public driver_device
|
||||
{
|
||||
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) { }
|
||||
|
||||
// CRU (Communication Register Unit) handling
|
||||
@ -279,7 +279,7 @@ private:
|
||||
Memory map. We have a configurable mapper, so we need to delegate the
|
||||
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 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -290,7 +290,7 @@ ADDRESS_MAP_END
|
||||
(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, 0x02ff) AM_READ(cruread)
|
||||
|
||||
@ -406,17 +406,17 @@ INPUT_PORTS_END
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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) \
|
||||
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) \
|
||||
{ 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) \
|
||||
{ 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) \
|
||||
{ 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) \
|
||||
{ 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) \
|
||||
{ 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) \
|
||||
{ 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) \
|
||||
{ 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(pascal1, pascal12_region)
|
||||
@ -469,19 +469,19 @@ GROM_LIBRARY_CONFIG(pascal2, pascal12_region)
|
||||
|
||||
static GROMPORT_CONFIG(console_cartslot)
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_reset)
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_reset)
|
||||
};
|
||||
|
||||
static PERIBOX_CONFIG( peribox_conf )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, extint), // INTA
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, notconnected), // INTB
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready), // READY
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, extint), // INTA
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, notconnected), // INTB
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready), // READY
|
||||
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);
|
||||
UINT8 value = 0;
|
||||
@ -497,7 +497,7 @@ READ8_MEMBER( ti99_8::cruread )
|
||||
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);
|
||||
m_mapper->cruwrite(offset<<1, data);
|
||||
@ -518,7 +518,7 @@ static const char *const column[] = {
|
||||
"COL8", "COL9", "COL10", "COL11", "COL12", "COL13"
|
||||
};
|
||||
|
||||
READ8_MEMBER( ti99_8::read_by_9901 )
|
||||
READ8_MEMBER( ti99_8_state::read_by_9901 )
|
||||
{
|
||||
int answer=0;
|
||||
UINT8 joyst;
|
||||
@ -590,7 +590,7 @@ READ8_MEMBER( ti99_8::read_by_9901 )
|
||||
/*
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( ti99_8::keyC1 )
|
||||
WRITE_LINE_MEMBER( ti99_8_state::keyC1 )
|
||||
{
|
||||
set_keyboard_column(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( ti99_8::keyC2 )
|
||||
WRITE_LINE_MEMBER( ti99_8_state::keyC2 )
|
||||
{
|
||||
set_keyboard_column(2, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( ti99_8::keyC3 )
|
||||
WRITE_LINE_MEMBER( ti99_8_state::keyC3 )
|
||||
{
|
||||
set_keyboard_column(3, state);
|
||||
}
|
||||
@ -624,7 +624,7 @@ WRITE_LINE_MEMBER( ti99_8::keyC3 )
|
||||
/*
|
||||
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);
|
||||
}
|
||||
@ -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.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( ti99_8::PTGEN )
|
||||
WRITE_LINE_MEMBER( ti99_8_state::PTGEN )
|
||||
{
|
||||
m_mapper->PTGE_set(state==CLEAR_LINE);
|
||||
}
|
||||
@ -640,7 +640,7 @@ WRITE_LINE_MEMBER( ti99_8::PTGEN )
|
||||
/*
|
||||
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);
|
||||
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
|
||||
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)
|
||||
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);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ti99_8::tms9901_interrupt )
|
||||
WRITE8_MEMBER( ti99_8_state::tms9901_interrupt )
|
||||
{
|
||||
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,
|
||||
|
||||
// read handler
|
||||
DEVCB_DRIVER_MEMBER(ti99_8, read_by_9901),
|
||||
DEVCB_DRIVER_MEMBER(ti99_8_state, read_by_9901),
|
||||
|
||||
// write handlers
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, keyC0),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, keyC1),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, keyC2),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, keyC3),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, CRUS),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, PTGEN),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, cassette_motor),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, keyC0),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, keyC1),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, keyC2),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, keyC3),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, CRUS),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, PTGEN),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, cassette_motor),
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, audio_gate),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, cassette_output),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, audio_gate),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, cassette_output),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -698,7 +698,7 @@ const tms9901_interface tms9901_wiring_ti99_8 =
|
||||
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)
|
||||
*/
|
||||
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);
|
||||
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);
|
||||
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.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( ti99_8::console_reset )
|
||||
WRITE_LINE_MEMBER( ti99_8_state::console_reset )
|
||||
{
|
||||
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.
|
||||
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);
|
||||
m_ready_line1 = state;
|
||||
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 (m_tms9901 != NULL)
|
||||
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");
|
||||
}
|
||||
@ -765,10 +765,10 @@ static TMS9928A_INTERFACE(ti99_8_tms9118a_interface)
|
||||
{
|
||||
SCREEN_TAG,
|
||||
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" };
|
||||
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.
|
||||
*/
|
||||
WRITE_LINE_MEMBER( ti99_8::clock_out )
|
||||
WRITE_LINE_MEMBER( ti99_8_state::clock_out )
|
||||
{
|
||||
m_mapper->clock_in(state);
|
||||
}
|
||||
@ -791,9 +791,9 @@ WRITE_LINE_MEMBER( ti99_8::clock_out )
|
||||
*/
|
||||
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_DRIVER_LINE_MEMBER(ti99_8, clock_out),
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, clock_out),
|
||||
DEVCB_NULL, // wait
|
||||
DEVCB_NULL, // HOLDA
|
||||
NO_INTERNAL_RAM,
|
||||
@ -802,7 +802,7 @@ static TMS9995_CONFIG( ti99_8_processor_config )
|
||||
|
||||
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 )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8, console_ready_mapper), // READY
|
||||
DEVCB_DRIVER_LINE_MEMBER(ti99_8_state, console_ready_mapper), // READY
|
||||
mapper_devices
|
||||
};
|
||||
|
||||
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 )
|
||||
@ -923,7 +923,7 @@ static JOYPORT_CONFIG( joyport8_50 )
|
||||
50
|
||||
};
|
||||
|
||||
void ti99_8::machine_start()
|
||||
void ti99_8_state::machine_start()
|
||||
{
|
||||
m_cpu = static_cast<tms9995_device*>(machine().device("maincpu"));
|
||||
m_tms9901 = static_cast<tms9901_device*>(machine().device(TMS9901_TAG));
|
||||
@ -938,7 +938,7 @@ void ti99_8::machine_start()
|
||||
m_firstjoy = 14;
|
||||
}
|
||||
|
||||
void ti99_8::machine_reset()
|
||||
void ti99_8_state::machine_reset()
|
||||
{
|
||||
|
||||
m_cpu->set_hold(CLEAR_LINE);
|
||||
@ -957,7 +957,7 @@ void ti99_8::machine_reset()
|
||||
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 */
|
||||
/* TMS9995-MP9537 CPU @ 10.7 MHz */
|
||||
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
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( ti99_8_50hz, ti99_8 )
|
||||
static MACHINE_CONFIG_START( ti99_8_50hz, ti99_8_state )
|
||||
/* basic machine hardware */
|
||||
/* TMS9995-MP9537 CPU @ 10.7 MHz */
|
||||
MCFG_TMS9995_ADD("maincpu", TMS9995, 10738635, memmap, crumap, ti99_8_processor_config)
|
||||
|
@ -69,10 +69,10 @@
|
||||
#include "tm990189v.lh"
|
||||
|
||||
|
||||
class tm990189 : public driver_device
|
||||
class tm990189_state : public driver_device
|
||||
{
|
||||
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),
|
||||
m_tms9980a(*this, "maincpu"),
|
||||
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_hold(CLEAR_LINE);
|
||||
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);
|
||||
}
|
||||
@ -180,7 +180,7 @@ static TMS9928A_INTERFACE(tms9918_interface)
|
||||
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);
|
||||
@ -191,7 +191,7 @@ MACHINE_START_MEMBER(tm990189,tm990_189_v)
|
||||
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_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.
|
||||
*/
|
||||
READ8_MEMBER( tm990189::interrupt_level )
|
||||
READ8_MEMBER( tm990189_state::interrupt_level )
|
||||
{
|
||||
return m_ic_state;
|
||||
}
|
||||
@ -212,14 +212,14 @@ READ8_MEMBER( tm990189::interrupt_level )
|
||||
|
||||
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_tms9980a->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
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_ic_state = 2; // LOAD interrupt
|
||||
state->m_tms9980a->set_input_line(0, ASSERT_LINE);
|
||||
@ -229,7 +229,7 @@ static void hold_load(running_machine &machine)
|
||||
/*
|
||||
LOAD interrupt switch
|
||||
*/
|
||||
INPUT_CHANGED_MEMBER( tm990189::load_interrupt )
|
||||
INPUT_CHANGED_MEMBER( tm990189_state::load_interrupt )
|
||||
{
|
||||
// When depressed, fire LOAD (neg logic)
|
||||
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.
|
||||
*/
|
||||
|
||||
void tm990189::draw_digit()
|
||||
void tm990189_state::draw_digit()
|
||||
{
|
||||
m_segment_state[m_digitsel] |= ~m_segment;
|
||||
}
|
||||
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(tm990189::display_callback)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(tm990189_state::display_callback)
|
||||
{
|
||||
UINT8 i;
|
||||
char ledname[8];
|
||||
@ -275,7 +275,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(tm990189::display_callback)
|
||||
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
|
||||
// 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)
|
||||
m_LED_state |= (1 << offset);
|
||||
@ -294,32 +294,32 @@ void tm990189::led_set(int offset, bool state)
|
||||
m_LED_state &= ~(1 << offset);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tm990189::usr9901_led0_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::usr9901_led0_w )
|
||||
{
|
||||
led_set(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tm990189::usr9901_led1_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::usr9901_led1_w )
|
||||
{
|
||||
led_set(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tm990189::usr9901_led2_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::usr9901_led2_w )
|
||||
{
|
||||
led_set(2, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tm990189::usr9901_led3_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::usr9901_led3_w )
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
READ8_MEMBER( tm990189::sys9901_r )
|
||||
READ8_MEMBER( tm990189_state::sys9901_r )
|
||||
{
|
||||
UINT8 data = 0;
|
||||
if (offset == TMS9901_CB_INT7)
|
||||
@ -338,7 +338,7 @@ READ8_MEMBER( tm990189::sys9901_r )
|
||||
return data;
|
||||
}
|
||||
|
||||
void tm990189::digitsel(int offset, bool state)
|
||||
void tm990189_state::digitsel(int offset, bool state)
|
||||
{
|
||||
if (state)
|
||||
m_digitsel |= 1 << offset;
|
||||
@ -346,25 +346,25 @@ void tm990189::digitsel(int offset, bool state)
|
||||
m_digitsel &= ~ (1 << offset);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_digitsel0_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_digitsel0_w )
|
||||
{
|
||||
digitsel(0, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_digitsel1_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_digitsel1_w )
|
||||
{
|
||||
digitsel(1, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_digitsel2_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_digitsel2_w )
|
||||
{
|
||||
digitsel(2, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_digitsel3_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_digitsel3_w )
|
||||
{
|
||||
digitsel(3, state);
|
||||
}
|
||||
|
||||
|
||||
void tm990189::segment_set(int offset, bool state)
|
||||
void tm990189_state::segment_set(int offset, bool state)
|
||||
{
|
||||
if (state)
|
||||
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);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment1_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment1_w )
|
||||
{
|
||||
segment_set(1, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment2_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment2_w )
|
||||
{
|
||||
segment_set(2, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment3_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment3_w )
|
||||
{
|
||||
segment_set(3, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment4_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment4_w )
|
||||
{
|
||||
segment_set(4, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment5_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment5_w )
|
||||
{
|
||||
segment_set(5, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment6_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment6_w )
|
||||
{
|
||||
segment_set(6, state);
|
||||
}
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_segment7_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_segment7_w )
|
||||
{
|
||||
segment_set(7, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( tm990189::sys9901_dsplytrgr_w )
|
||||
WRITE_LINE_MEMBER( tm990189_state::sys9901_dsplytrgr_w )
|
||||
{
|
||||
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)
|
||||
m_LED_state |= 0x10;
|
||||
@ -426,13 +426,13 @@ WRITE_LINE_MEMBER( tm990189::sys9901_shiftlight_w )
|
||||
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);
|
||||
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);
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
//tm990189 *state = machine.driver_data<tm990189>();
|
||||
//tm990189_state *state = machine.driver_data<tm990189_state>();
|
||||
UINT8 buf;
|
||||
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()
|
||||
{
|
||||
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->rcv_dsr(ASSERT_LINE);
|
||||
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()
|
||||
{
|
||||
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->rcv_dsr(CLEAR_LINE);
|
||||
|
||||
@ -527,7 +527,7 @@ void tm990_189_rs232_image_device::call_unload()
|
||||
tms9902->set_cts(RTS);
|
||||
} */
|
||||
|
||||
WRITE8_MEMBER( tm990189::xmit_callback )
|
||||
WRITE8_MEMBER( tm990189_state::xmit_callback )
|
||||
{
|
||||
UINT8 buf = data;
|
||||
if (m_rs232_fp) m_rs232_fp->fwrite(&buf, 1);
|
||||
@ -536,7 +536,7 @@ WRITE8_MEMBER( tm990189::xmit_callback )
|
||||
/*
|
||||
External instruction decoding
|
||||
*/
|
||||
WRITE8_MEMBER( tm990189::external_operation )
|
||||
WRITE8_MEMBER( tm990189_state::external_operation )
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
@ -569,7 +569,7 @@ WRITE8_MEMBER( tm990189::external_operation )
|
||||
Video Board handling
|
||||
*/
|
||||
|
||||
READ8_MEMBER( tm990189::video_vdp_r )
|
||||
READ8_MEMBER( tm990189_state::video_vdp_r )
|
||||
{
|
||||
int reply = 0;
|
||||
|
||||
@ -600,7 +600,7 @@ READ8_MEMBER( tm990189::video_vdp_r )
|
||||
return reply;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( tm990189::video_vdp_w )
|
||||
WRITE8_MEMBER( tm990189_state::video_vdp_w )
|
||||
{
|
||||
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();
|
||||
|
||||
@ -630,7 +630,7 @@ READ8_MEMBER( tm990189::video_joy_r )
|
||||
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_joy1y_timer->reset(attotime::from_usec(ioport("JOY1_Y")->read()*28+28));
|
||||
@ -648,10 +648,10 @@ static const tms9901_interface usr9901reset_param =
|
||||
|
||||
/* write handlers */
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, usr9901_led0_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, usr9901_led1_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, usr9901_led2_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, usr9901_led3_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, usr9901_led0_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, usr9901_led1_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, usr9901_led2_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, usr9901_led3_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -667,7 +667,7 @@ static const tms9901_interface usr9901reset_param =
|
||||
},
|
||||
|
||||
/* interrupt handler */
|
||||
DEVCB_DRIVER_MEMBER(tm990189, usr9901_interrupt_callback)
|
||||
DEVCB_DRIVER_MEMBER(tm990189_state, usr9901_interrupt_callback)
|
||||
};
|
||||
|
||||
/* system tms9901 setup */
|
||||
@ -676,30 +676,30 @@ static const tms9901_interface sys9901reset_param =
|
||||
0, /* only input pins whose state is always known */
|
||||
|
||||
/* Read handler. Covers all input lines (see tms9901.h) */
|
||||
DEVCB_DRIVER_MEMBER(tm990189, sys9901_r),
|
||||
DEVCB_DRIVER_MEMBER(tm990189_state, sys9901_r),
|
||||
|
||||
/* write handlers */
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_digitsel0_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_digitsel1_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_digitsel2_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_digitsel3_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment0_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment1_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment2_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment3_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment4_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment5_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment6_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_segment7_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_dsplytrgr_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_shiftlight_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_spkrdrive_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189, sys9901_tapewdata_w)
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_digitsel0_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_digitsel1_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_digitsel2_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_digitsel3_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment0_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment1_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment2_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment3_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment4_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment5_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment6_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_segment7_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_dsplytrgr_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_shiftlight_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_spkrdrive_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(tm990189_state, sys9901_tapewdata_w)
|
||||
},
|
||||
|
||||
/* 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, /*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 */
|
||||
};
|
||||
|
||||
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(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(0x3000, 0x3fff) AM_ROM /* main ROM - unibug or university basic */
|
||||
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(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
|
||||
*/
|
||||
|
||||
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(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 */
|
||||
@ -825,20 +825,20 @@ ADDRESS_MAP_END
|
||||
|
||||
static TMS99xx_CONFIG( cpuconf )
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER(tm990189, external_operation),
|
||||
DEVCB_DRIVER_MEMBER(tm990189, interrupt_level),
|
||||
DEVCB_DRIVER_MEMBER(tm990189_state, external_operation),
|
||||
DEVCB_DRIVER_MEMBER(tm990189_state, interrupt_level),
|
||||
DEVCB_NULL, // Instruction acquisition
|
||||
DEVCB_NULL, // Clock out
|
||||
DEVCB_NULL, // wait
|
||||
DEVCB_NULL // Hold acknowledge
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( tm990_189, tm990189 )
|
||||
static MACHINE_CONFIG_START( tm990_189, tm990189_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_memmap, tm990_189_cru_map, cpuconf)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(tm990189, tm990_189 )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(tm990189, tm990_189 )
|
||||
MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189 )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189 )
|
||||
|
||||
/* Video hardware */
|
||||
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_TMS9902_ADD("tms9902", tms9902_params, 2000000)
|
||||
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
|
||||
// TODO: Fix this, probably inside CPU
|
||||
MCFG_TIMER_START_DELAY(attotime::from_msec(150))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( tm990_189_v, tm990189 )
|
||||
static MACHINE_CONFIG_START( tm990_189_v, tm990189_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 2000000, tm990_189_v_memmap, tm990_189_cru_map, cpuconf)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(tm990189, tm990_189_v )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(tm990189, tm990_189_v )
|
||||
MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189_v )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189_v )
|
||||
|
||||
/* video hardware */
|
||||
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_TMS9902_ADD("tms9902", tms9902_params, 2000000)
|
||||
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))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -931,7 +931,7 @@ ROM_END
|
||||
static INPUT_PORTS_START(tm990_189)
|
||||
|
||||
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... */
|
||||
PORT_START("LINE0") /* row 0 */
|
||||
|
Loading…
Reference in New Issue
Block a user