mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
tms99xx: Various devcb3 updates. (nw)
This commit is contained in:
parent
a978d723ca
commit
c4c6a68d4b
@ -400,11 +400,27 @@ void ti99_cartridge_device::device_config_complete()
|
||||
5 GROMs that may be contained in a cartridge
|
||||
*/
|
||||
MACHINE_CONFIG_START(ti99_cartridge_device::device_add_mconfig)
|
||||
MCFG_GROM_ADD( GROM3_TAG, 3, CARTGROM_TAG, 0x0000, WRITELINE(*this, ti99_cartridge_device, ready_line))
|
||||
MCFG_GROM_ADD( GROM4_TAG, 4, CARTGROM_TAG, 0x2000, WRITELINE(*this, ti99_cartridge_device, ready_line))
|
||||
MCFG_GROM_ADD( GROM5_TAG, 5, CARTGROM_TAG, 0x4000, WRITELINE(*this, ti99_cartridge_device, ready_line))
|
||||
MCFG_GROM_ADD( GROM6_TAG, 6, CARTGROM_TAG, 0x6000, WRITELINE(*this, ti99_cartridge_device, ready_line))
|
||||
MCFG_GROM_ADD( GROM7_TAG, 7, CARTGROM_TAG, 0x8000, WRITELINE(*this, ti99_cartridge_device, ready_line))
|
||||
|
||||
tmc0430_device& grom3(TMC0430(config, GROM3_TAG, 0));
|
||||
grom3.ready_cb().set(FUNC(ti99_cartridge_device::ready_line));
|
||||
grom3.set_region_and_ident(CARTGROM_TAG, 0x0000, 3);
|
||||
|
||||
tmc0430_device& grom4(TMC0430(config, GROM4_TAG, 0));
|
||||
grom4.ready_cb().set(FUNC(ti99_cartridge_device::ready_line));
|
||||
grom4.set_region_and_ident(CARTGROM_TAG, 0x2000, 4);
|
||||
|
||||
tmc0430_device& grom5(TMC0430(config, GROM5_TAG, 0));
|
||||
grom5.ready_cb().set(FUNC(ti99_cartridge_device::ready_line));
|
||||
grom5.set_region_and_ident(CARTGROM_TAG, 0x4000, 5);
|
||||
|
||||
tmc0430_device& grom6(TMC0430(config, GROM6_TAG, 0));
|
||||
grom6.ready_cb().set(FUNC(ti99_cartridge_device::ready_line));
|
||||
grom6.set_region_and_ident(CARTGROM_TAG, 0x6000, 6);
|
||||
|
||||
tmc0430_device& grom7(TMC0430(config, GROM7_TAG, 0));
|
||||
grom7.ready_cb().set(FUNC(ti99_cartridge_device::ready_line));
|
||||
grom7.set_region_and_ident(CARTGROM_TAG, 0x8000, 7);
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -48,6 +48,11 @@ public:
|
||||
// Video enable
|
||||
DECLARE_WRITE_LINE_MEMBER( videna );
|
||||
|
||||
// Callbacks
|
||||
auto readmem_cb() { return m_mem_read_cb.bind(); }
|
||||
auto hold_cb() { return m_hold_cb.bind(); }
|
||||
auto int_cb() { return m_int_cb.bind(); }
|
||||
|
||||
protected:
|
||||
video992_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
int m_beol;
|
||||
@ -105,8 +110,8 @@ public:
|
||||
DECLARE_READ8_MEMBER( cruread );
|
||||
DECLARE_WRITE8_MEMBER( cruwrite );
|
||||
void device_start() override;
|
||||
template <class Object> devcb_base &set_rombank_callback(Object &&cb) { return m_set_rom_bank.set_callback(std::forward<Object>(cb)); }
|
||||
ioport_constructor device_input_ports() const override;
|
||||
auto rombank_cb() { return m_set_rom_bank.bind(); }
|
||||
|
||||
protected:
|
||||
io992_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
@ -174,9 +179,6 @@ public:
|
||||
#define MCFG_VIDEO992_INT_CB(_devcb) \
|
||||
downcast<bus::ti99::internal::video992_device &>(*device).set_int_callback(DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_SET_ROMBANK_HANDLER( _devcb ) \
|
||||
downcast<bus::ti99::internal::io992_device &>(*device).set_rombank_callback(DEVCB_##_devcb);
|
||||
|
||||
DECLARE_DEVICE_TYPE_NS(VIDEO99224, bus::ti99::internal, video992_24_device)
|
||||
DECLARE_DEVICE_TYPE_NS(VIDEO99232, bus::ti99::internal, video992_32_device)
|
||||
DECLARE_DEVICE_TYPE_NS(IO99224, bus::ti99::internal, io992_24_device)
|
||||
|
@ -565,9 +565,9 @@ public:
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( holda_line );
|
||||
|
||||
template<class Object> devcb_base &set_ready_wr_callback(Object &&cb) { return m_ready.set_callback(std::forward<Object>(cb)); }
|
||||
template<class Object> devcb_base &set_reset_wr_callback(Object &&cb) { return m_console_reset.set_callback(std::forward<Object>(cb)); }
|
||||
template<class Object> devcb_base &set_hold_wr_callback(Object &&cb) { return m_hold_line.set_callback(std::forward<Object>(cb)); }
|
||||
auto ready_cb() { return m_ready.bind(); }
|
||||
auto reset_cb() { return m_console_reset.bind(); }
|
||||
auto hold_cb() { return m_hold_line.bind(); }
|
||||
|
||||
void set_paddress(int address);
|
||||
|
||||
@ -701,18 +701,6 @@ private:
|
||||
|
||||
} } } // end namespace bus::ti99::internal
|
||||
|
||||
#define MCFG_MAINBOARD8_READY_CALLBACK(_write) \
|
||||
downcast<bus::ti99::internal::mainboard8_device &>(*device).set_ready_wr_callback(DEVCB_##_write);
|
||||
|
||||
#define MCFG_MAINBOARD8_RESET_CALLBACK(_write) \
|
||||
downcast<bus::ti99::internal::mainboard8_device &>(*device).set_reset_wr_callback(DEVCB_##_write);
|
||||
|
||||
#define MCFG_MAINBOARD8_HOLD_CALLBACK(_write) \
|
||||
downcast<bus::ti99::internal::mainboard8_device &>(*device).set_hold_wr_callback(DEVCB_##_write);
|
||||
|
||||
#define MCFG_OSO_INT_CALLBACK(_int) \
|
||||
downcast<bus::ti99::internal::oso_device &>(*device).set_int_callback(DEVCB##_int);
|
||||
|
||||
DECLARE_DEVICE_TYPE_NS(TI99_MAINBOARD8, bus::ti99::internal, mainboard8_device)
|
||||
DECLARE_DEVICE_TYPE_NS(TI99_VAQUERRO, bus::ti99::internal, vaquerro_device)
|
||||
DECLARE_DEVICE_TYPE_NS(TI99_MOFETTA, bus::ti99::internal, mofetta_device)
|
||||
|
@ -20,10 +20,9 @@ class evpc_clock_connector : public device_t
|
||||
public:
|
||||
evpc_clock_connector(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
template<class Object> devcb_base &set_vdpint_callback(Object &&cb) { return m_vdpint.set_callback(std::forward<Object>(cb)); }
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( vclock_line );
|
||||
void device_start() override;
|
||||
auto vdpint_cb() { return m_vdpint.bind(); }
|
||||
|
||||
private:
|
||||
// VDPINT line to the CPU
|
||||
@ -34,8 +33,4 @@ private:
|
||||
|
||||
DECLARE_DEVICE_TYPE_NS(TI99_EVPCCONN, bus::ti99::internal, evpc_clock_connector)
|
||||
|
||||
#define MCFG_ADD_EVPC_CONNECTOR( _tag, _vdpint ) \
|
||||
MCFG_DEVICE_ADD(_tag, TI99_EVPCCONN, 0) \
|
||||
downcast<bus::ti99::internal::evpc_clock_connector &>(*device).set_vdpint_callback(DEVCB_##_vdpint);
|
||||
|
||||
#endif // MAME_BUS_TI99_INTERNAL_EVPCCONN_H
|
||||
|
@ -62,7 +62,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( clock_control );
|
||||
uint8_t get_recent_key();
|
||||
|
||||
template <class Object> devcb_base &set_int_callback(Object &&cb) { return m_interrupt.set_callback(std::forward<Object>(cb)); }
|
||||
auto int_cb() { return m_interrupt.bind(); }
|
||||
|
||||
protected:
|
||||
void device_start() override;
|
||||
@ -107,9 +107,6 @@ private:
|
||||
emu_timer* m_timer;
|
||||
};
|
||||
|
||||
#define MCFG_GENEVE_KBINT_HANDLER( _intcallb ) \
|
||||
downcast<bus::ti99::internal::geneve_keyboard_device &>(*device).set_int_callback(DEVCB_##_intcallb);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
class geneve_mapper_device : public device_t
|
||||
@ -138,7 +135,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( pfm_select_msb );
|
||||
DECLARE_WRITE_LINE_MEMBER( pfm_output_enable );
|
||||
|
||||
template <class Object> devcb_base &set_ready_callback(Object &&cb) { return m_ready.set_callback(std::forward<Object>(cb)); }
|
||||
auto ready_cb() { return m_ready.bind(); }
|
||||
|
||||
protected:
|
||||
geneve_mapper_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
@ -307,9 +304,6 @@ private:
|
||||
bool m_turbo;
|
||||
};
|
||||
|
||||
#define MCFG_GENEVE_READY_HANDLER( _intcallb ) \
|
||||
downcast<bus::ti99::internal::geneve_mapper_device &>(*device).set_ready_callback(DEVCB_##_intcallb);
|
||||
|
||||
} } } // end namespace bus::ti99::internal
|
||||
|
||||
DECLARE_DEVICE_TYPE_NS(GENEVE_KEYBOARD, bus::ti99::internal, geneve_keyboard_device)
|
||||
|
@ -133,11 +133,22 @@ namespace bus { namespace ti99 { namespace peb {
|
||||
|
||||
#define ESC 0x1b
|
||||
|
||||
#define UART0 "uart0"
|
||||
#define UART1 "uart1"
|
||||
|
||||
#define SERDEV0 "serdev0"
|
||||
#define SERDEV1 "serdev1"
|
||||
#define PIODEV "piodev"
|
||||
|
||||
ti_rs232_pio_device::ti_rs232_pio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, TI99_RS232, tag, owner, clock),
|
||||
device_ti99_peribox_card_interface(mconfig, *this),
|
||||
m_crulatch(*this, "crulatch"),
|
||||
m_piodev(nullptr),
|
||||
m_uart0(*this, UART0),
|
||||
m_uart1(*this, UART1),
|
||||
m_serdev0(*this, SERDEV0),
|
||||
m_serdev1(*this, SERDEV1),
|
||||
m_piodev(*this, PIODEV),
|
||||
m_dsrrom(nullptr),
|
||||
m_pio_direction_in(false),
|
||||
m_pio_handshakeout(false),
|
||||
@ -161,7 +172,8 @@ ti_rs232_pio_device::ti_rs232_pio_device(const machine_config &mconfig, const ch
|
||||
|
||||
ti_rs232_attached_device::ti_rs232_attached_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, TI99_RS232_DEV, tag, owner, clock),
|
||||
device_image_interface(mconfig, *this)
|
||||
device_image_interface(mconfig, *this),
|
||||
m_uart(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@ -171,55 +183,12 @@ ti_pio_attached_device::ti_pio_attached_device(const machine_config &mconfig, co
|
||||
{
|
||||
}
|
||||
|
||||
void ti_rs232_attached_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
void ti_pio_attached_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
Find the index of the image name. We assume the format
|
||||
<name><number>, i.e. the number is the longest string from the right
|
||||
which can be interpreted as a number.
|
||||
*/
|
||||
int ti_rs232_attached_device::get_index_from_tagname()
|
||||
{
|
||||
const char *mytag = tag();
|
||||
int maxlen = strlen(mytag);
|
||||
int i;
|
||||
for (i=maxlen-1; i >=0; i--)
|
||||
if (mytag[i] < 48 || mytag[i] > 57) break;
|
||||
|
||||
return atoi(mytag+i+1);
|
||||
}
|
||||
|
||||
/*
|
||||
Initialize rs232 unit and open image
|
||||
*/
|
||||
image_init_result ti_rs232_attached_device::call_load()
|
||||
{
|
||||
tms9902_device* tms9902;
|
||||
|
||||
int devnumber = get_index_from_tagname();
|
||||
if (devnumber==0)
|
||||
{
|
||||
tms9902 = siblingdevice<tms9902_device>("tms9902_0");
|
||||
// Turn on polling
|
||||
tms9902->set_clock(true);
|
||||
}
|
||||
else if (devnumber==1)
|
||||
{
|
||||
tms9902 = siblingdevice<tms9902_device>("tms9902_1");
|
||||
// Turn on polling
|
||||
tms9902->set_clock(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGMASKED(LOG_WARN, "Could not find device tag number\n");
|
||||
return image_init_result::FAIL;
|
||||
}
|
||||
m_uart->set_clock(true);
|
||||
|
||||
// The following line may cause trouble in the init phase
|
||||
// card->incoming_dtr(devnumber, (m_file!=nullptr)? ASSERT_LINE : CLEAR_LINE);
|
||||
@ -229,21 +198,7 @@ image_init_result ti_rs232_attached_device::call_load()
|
||||
|
||||
void ti_rs232_attached_device::call_unload()
|
||||
{
|
||||
tms9902_device* tms9902;
|
||||
|
||||
int devnumber = get_index_from_tagname();
|
||||
if (devnumber==0)
|
||||
{
|
||||
tms9902 = siblingdevice<tms9902_device>("tms9902_0");
|
||||
// Turn off polling
|
||||
tms9902->set_clock(false);
|
||||
}
|
||||
else if (devnumber==1)
|
||||
{
|
||||
tms9902 = siblingdevice<tms9902_device>("tms9902_1");
|
||||
// Turn off polling
|
||||
tms9902->set_clock(false);
|
||||
}
|
||||
m_uart->set_clock(false);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -304,12 +259,12 @@ READ8Z_MEMBER(ti_rs232_pio_device::crureadz)
|
||||
}
|
||||
if ((offset & 0x00c0)==0x0040)
|
||||
{
|
||||
*value = m_uart[0]->cruread(space, offset>>4, 0xff);
|
||||
*value = m_uart0->cruread(space, offset>>4, 0xff);
|
||||
return;
|
||||
}
|
||||
if ((offset & 0x00c0)==0x0080)
|
||||
{
|
||||
*value = m_uart[1]->cruread(space, offset>>4, 0xff);
|
||||
*value = m_uart1->cruread(space, offset>>4, 0xff);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -324,12 +279,12 @@ WRITE8_MEMBER(ti_rs232_pio_device::cruwrite)
|
||||
{
|
||||
if ((offset & 0x00c0)==0x0040)
|
||||
{
|
||||
m_uart[0]->cruwrite(space, offset>>1, data, 0xff);
|
||||
m_uart0->cruwrite(space, offset>>1, data, 0xff);
|
||||
return;
|
||||
}
|
||||
if ((offset & 0x00c0)==0x0080)
|
||||
{
|
||||
m_uart[1]->cruwrite(space, offset>>1, data, 0xff);
|
||||
m_uart1->cruwrite(space, offset>>1, data, 0xff);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -350,8 +305,6 @@ WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_direction_in_w)
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_handshake_out_w)
|
||||
{
|
||||
device_image_interface *image = dynamic_cast<device_image_interface *>(m_piodev);
|
||||
|
||||
m_pio_handshakeout = state;
|
||||
if (m_pio_write && m_pio_writable && (!m_pio_direction_in))
|
||||
{ /* PIO in output mode */
|
||||
@ -359,7 +312,7 @@ WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_handshake_out_w)
|
||||
{ /* write data strobe */
|
||||
/* write data and acknowledge */
|
||||
uint8_t buf = m_pio_out_buffer;
|
||||
int ret = image->fwrite(&buf, 1);
|
||||
int ret = m_piodev->fwrite(&buf, 1);
|
||||
if (ret)
|
||||
m_pio_handshakein = 1;
|
||||
}
|
||||
@ -376,7 +329,7 @@ WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_handshake_out_w)
|
||||
{ /* receiver ready */
|
||||
/* send data and strobe */
|
||||
uint8_t buf;
|
||||
if (image->fread(&buf, 1))
|
||||
if (m_piodev->fread(&buf, 1))
|
||||
m_pio_in_buffer = buf;
|
||||
m_pio_handshakein = 0;
|
||||
}
|
||||
@ -471,8 +424,16 @@ void ti_rs232_pio_device::incoming_dtr(int uartind, line_state value)
|
||||
{
|
||||
LOGMASKED(LOG_LINES, "(RS232/%d) Incoming DTR = %d\n", uartind+1, (value==ASSERT_LINE)? 1:0);
|
||||
|
||||
m_uart[uartind]->rcv_cts(value);
|
||||
m_uart[uartind]->rcv_dsr(value);
|
||||
if (uartind==0)
|
||||
{
|
||||
m_uart0->rcv_cts(value);
|
||||
m_uart0->rcv_dsr(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_uart1->rcv_cts(value);
|
||||
m_uart1->rcv_dsr(value);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -481,9 +442,8 @@ void ti_rs232_pio_device::incoming_dtr(int uartind, line_state value)
|
||||
void ti_rs232_pio_device::transmit_data(int uartind, uint8_t value)
|
||||
{
|
||||
uint8_t buf = value;
|
||||
ti_rs232_attached_device *serial = (uartind==0)? m_serdev0 : m_serdev1;
|
||||
|
||||
device_image_interface *serial;
|
||||
serial = dynamic_cast<device_image_interface *>(m_serdev[uartind]);
|
||||
if (!serial->exists())
|
||||
{
|
||||
LOGMASKED(LOG_CONFIG, "(RS232/%d) No serial output attached\n", uartind+1);
|
||||
@ -710,10 +670,10 @@ uint8_t ti_rs232_pio_device::map_lines_in(int uartind, uint8_t value)
|
||||
*/
|
||||
void ti_rs232_pio_device::receive_data_or_line_state(int uartind)
|
||||
{
|
||||
device_image_interface *serial;
|
||||
uint8_t buffer;
|
||||
|
||||
serial = dynamic_cast<device_image_interface *>(m_serdev[uartind]);
|
||||
ti_rs232_attached_device *serial = (uartind==0)? m_serdev0 : m_serdev1;
|
||||
tms9902_device *uart = (uartind==0)? m_uart0 : m_uart1;
|
||||
|
||||
if (!serial->exists())
|
||||
{
|
||||
@ -721,7 +681,7 @@ void ti_rs232_pio_device::receive_data_or_line_state(int uartind)
|
||||
return;
|
||||
}
|
||||
|
||||
double baudpoll = m_uart[uartind]->get_baudpoll();
|
||||
double baudpoll = uart->get_baudpoll();
|
||||
|
||||
// If more than the minimum waiting time since the last data byte has
|
||||
// elapsed, we can get a new value.
|
||||
@ -758,7 +718,7 @@ void ti_rs232_pio_device::receive_data_or_line_state(int uartind)
|
||||
else
|
||||
{
|
||||
LOGMASKED(LOG_IN, "(RS232/%d) Received: %c <%02x>, pass to UART\n", uartind+1, cbuf, buffer);
|
||||
m_uart[uartind]->rcv_data(buffer);
|
||||
uart->rcv_data(buffer);
|
||||
m_time_hold[uartind] = 0.0;
|
||||
}
|
||||
break;
|
||||
@ -767,7 +727,7 @@ void ti_rs232_pio_device::receive_data_or_line_state(int uartind)
|
||||
{
|
||||
m_recv_mode[uartind] = RECV_MODE_NORMAL;
|
||||
LOGMASKED(LOG_STATE, "(RS232/%d) Received another ESC, passing to UART, leaving ESC mode\n", uartind+1);
|
||||
m_uart[uartind]->rcv_data(buffer);
|
||||
uart->rcv_data(buffer);
|
||||
m_time_hold[uartind] = 0.0;
|
||||
}
|
||||
else
|
||||
@ -791,10 +751,12 @@ void ti_rs232_pio_device::receive_data_or_line_state(int uartind)
|
||||
{
|
||||
// Exception states: BRK, FRMERR, PARERR
|
||||
LOGMASKED(LOG_LINES, "(RS232/%d) Received BRK or ERROR <%02x>\n", uartind+1, buffer);
|
||||
m_uart[uartind]->rcv_break(((buffer & tms9902_device::BRK)!=0));
|
||||
uart->rcv_break(((buffer & tms9902_device::BRK)!=0));
|
||||
|
||||
if (buffer & tms9902_device::FRMERR) m_uart[uartind]->rcv_framing_error();
|
||||
if (buffer & tms9902_device::PARERR) m_uart[uartind]->rcv_parity_error();
|
||||
if (buffer & tms9902_device::FRMERR)
|
||||
uart->rcv_framing_error();
|
||||
if (buffer & tms9902_device::PARERR)
|
||||
uart->rcv_parity_error();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -821,11 +783,9 @@ void ti_rs232_pio_device::receive_data_or_line_state(int uartind)
|
||||
void ti_rs232_pio_device::configure_interface(int uartind, int type, int value)
|
||||
{
|
||||
uint8_t bufctrl[4];
|
||||
device_image_interface *serial;
|
||||
ti_rs232_attached_device *serial = (uartind==0)? m_serdev0 : m_serdev1;
|
||||
uint8_t esc = ESC;
|
||||
|
||||
serial = dynamic_cast<device_image_interface *>(m_serdev[uartind]);
|
||||
|
||||
if (!serial->exists())
|
||||
{
|
||||
LOGMASKED(LOG_CONFIG, "(RS232/%d) No serial output attached\n", uartind+1);
|
||||
@ -903,12 +863,10 @@ void ti_rs232_pio_device::set_bit(int uartind, int line, int value)
|
||||
*/
|
||||
void ti_rs232_pio_device::output_exception(int uartind, int param, uint8_t value)
|
||||
{
|
||||
device_image_interface *serial;
|
||||
ti_rs232_attached_device *serial = (uartind==0)? m_serdev0 : m_serdev1;
|
||||
uint8_t bufctrl[2];
|
||||
uint8_t esc = ESC;
|
||||
|
||||
serial = dynamic_cast<device_image_interface *>(m_serdev[uartind]);
|
||||
|
||||
if (!serial->exists())
|
||||
{
|
||||
LOGMASKED(LOG_CONFIG, "(RS232/%d) No serial output attached\n", uartind+1);
|
||||
@ -929,12 +887,10 @@ void ti_rs232_pio_device::output_exception(int uartind, int param, uint8_t value
|
||||
*/
|
||||
void ti_rs232_pio_device::output_line_state(int uartind, int mask, uint8_t value)
|
||||
{
|
||||
device_image_interface *serial;
|
||||
ti_rs232_attached_device *serial = (uartind==0)? m_serdev0 : m_serdev1;
|
||||
uint8_t bufctrl[2];
|
||||
uint8_t esc = ESC;
|
||||
|
||||
serial = dynamic_cast<device_image_interface *>(m_serdev[uartind]);
|
||||
|
||||
if (!serial->exists())
|
||||
{
|
||||
LOGMASKED(LOG_CONFIG, "(RS232/%d) No serial output attached\n", uartind+1);
|
||||
@ -942,6 +898,7 @@ void ti_rs232_pio_device::output_line_state(int uartind, int mask, uint8_t value
|
||||
}
|
||||
|
||||
// Send ESC to serial bridge
|
||||
// FIXME: When the socket cannot be set up, MAME crashes here
|
||||
serial->fwrite(&esc, 1);
|
||||
|
||||
// Length 1
|
||||
@ -1026,7 +983,7 @@ void ti_rs232_pio_device::ctrl_callback(int uartind, int offset, uint8_t data)
|
||||
{
|
||||
// We cannot pass the configuration data as they need more than 8 bits.
|
||||
// Could be done by a write16 function as well.
|
||||
configure_interface(uartind, data, m_uart[uartind]->get_config_value());
|
||||
configure_interface(uartind, data, (uartind==0)? m_uart0->get_config_value() : m_uart1->get_config_value());
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1054,14 +1011,11 @@ WRITE8_MEMBER( ti_rs232_pio_device::ctrl1_callback )
|
||||
void ti_rs232_pio_device::device_start()
|
||||
{
|
||||
m_dsrrom = memregion(TI99_DSRROM)->base();
|
||||
m_uart[0] = subdevice<tms9902_device>("tms9902_0");
|
||||
m_uart[1] = subdevice<tms9902_device>("tms9902_1");
|
||||
m_serdev[0] = subdevice<ti_rs232_attached_device>("serdev0");
|
||||
m_serdev[1] = subdevice<ti_rs232_attached_device>("serdev1");
|
||||
m_piodev = subdevice<ti_pio_attached_device>("piodev");
|
||||
|
||||
// Prepare the receive buffers
|
||||
m_recvbuf[0] = std::make_unique<uint8_t[]>(512);
|
||||
m_recvbuf[1] = std::make_unique<uint8_t[]>(512);
|
||||
|
||||
m_pio_write = true; // required for call_load of pio_attached_device
|
||||
m_pio_writable = false;
|
||||
m_pio_handshakein = false;
|
||||
@ -1148,19 +1102,22 @@ INPUT_PORTS_START( ti_rs232 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
MACHINE_CONFIG_START(ti_rs232_pio_device::device_add_mconfig)
|
||||
MCFG_DEVICE_ADD("tms9902_0", TMS9902, 3000000)
|
||||
MCFG_TMS9902_INT_CB(WRITELINE(*this, ti_rs232_pio_device, int0_callback)) /* called when interrupt pin state changes */
|
||||
MCFG_TMS9902_RCV_CB(WRITELINE(*this, ti_rs232_pio_device, rcv0_callback)) /* called when a character is received */
|
||||
MCFG_TMS9902_XMIT_CB(WRITE8(*this, ti_rs232_pio_device, xmit0_callback)) /* called when a character is transmitted */
|
||||
MCFG_TMS9902_CTRL_CB(WRITE8(*this, ti_rs232_pio_device, ctrl0_callback))
|
||||
MCFG_DEVICE_ADD("tms9902_1", TMS9902, 3000000)
|
||||
MCFG_TMS9902_INT_CB(WRITELINE(*this, ti_rs232_pio_device, int1_callback)) /* called when interrupt pin state changes */
|
||||
MCFG_TMS9902_RCV_CB(WRITELINE(*this, ti_rs232_pio_device, rcv1_callback)) /* called when a character is received */
|
||||
MCFG_TMS9902_XMIT_CB(WRITE8(*this, ti_rs232_pio_device, xmit1_callback)) /* called when a character is transmitted */
|
||||
MCFG_TMS9902_CTRL_CB(WRITE8(*this, ti_rs232_pio_device, ctrl1_callback))
|
||||
MCFG_DEVICE_ADD("serdev0", TI99_RS232_DEV, 0)
|
||||
MCFG_DEVICE_ADD("serdev1", TI99_RS232_DEV, 0)
|
||||
MCFG_DEVICE_ADD("piodev", TI99_PIO_DEV, 0)
|
||||
TMS9902(config, m_uart0, 3000000);
|
||||
m_uart0->int_cb().set(FUNC(ti_rs232_pio_device::int0_callback));
|
||||
m_uart0->rcv_cb().set(FUNC(ti_rs232_pio_device::rcv0_callback));
|
||||
m_uart0->xmit_cb().set(FUNC(ti_rs232_pio_device::xmit0_callback));
|
||||
m_uart0->ctrl_cb().set(FUNC(ti_rs232_pio_device::ctrl0_callback));
|
||||
TMS9902(config, m_uart1, 3000000);
|
||||
m_uart1->int_cb().set(FUNC(ti_rs232_pio_device::int1_callback));
|
||||
m_uart1->rcv_cb().set(FUNC(ti_rs232_pio_device::rcv1_callback));
|
||||
m_uart1->xmit_cb().set(FUNC(ti_rs232_pio_device::xmit1_callback));
|
||||
m_uart1->ctrl_cb().set(FUNC(ti_rs232_pio_device::ctrl1_callback));
|
||||
TI99_RS232_DEV(config, m_serdev0, 0);
|
||||
m_serdev0->connect(m_uart0);
|
||||
TI99_RS232_DEV(config, m_serdev1, 0);
|
||||
m_serdev1->connect(m_uart1);
|
||||
|
||||
TI99_PIO_DEV(config, m_piodev, 0);
|
||||
|
||||
LS259(config, m_crulatch); // U12
|
||||
m_crulatch->q_out_cb<0>().set(FUNC(ti_rs232_pio_device::selected_w));
|
||||
|
@ -38,12 +38,12 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(cruwrite) override;
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_stop() override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
void device_start() override;
|
||||
void device_reset() override;
|
||||
void device_stop() override;
|
||||
const tiny_rom_entry *device_rom_region() const override;
|
||||
void device_add_mconfig(machine_config &config) override;
|
||||
ioport_constructor device_input_ports() const override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER(int0_callback);
|
||||
@ -77,15 +77,18 @@ private:
|
||||
void ctrl_callback(int uartind, int type, uint8_t data);
|
||||
|
||||
required_device<ls259_device> m_crulatch;
|
||||
// Asynchronous receivers/transmitters
|
||||
required_device<tms9902_device> m_uart0;
|
||||
required_device<tms9902_device> m_uart1;
|
||||
|
||||
// UART chips
|
||||
tms9902_device* m_uart[2];
|
||||
// Connected images (file or socket connection) that represent the
|
||||
// devices that are connected to the serial adapters
|
||||
ti_rs232_attached_device* m_serdev[2];
|
||||
required_device<ti_rs232_attached_device> m_serdev0;
|
||||
required_device<ti_rs232_attached_device> m_serdev1;
|
||||
|
||||
// Connected image (file) that represents the device connected to the
|
||||
// parallel interface
|
||||
ti_pio_attached_device* m_piodev;
|
||||
required_device<ti_pio_attached_device> m_piodev;
|
||||
uint8_t* m_dsrrom;
|
||||
|
||||
// Input buffer for each UART. We have to copy the contents of sdlsocket here
|
||||
@ -138,14 +141,16 @@ public:
|
||||
bool is_reset_on_load() const override { return false; }
|
||||
const char *image_interface() const override { return ""; }
|
||||
const char *file_extensions() const override { return ""; }
|
||||
void connect(tms9902_device *dev) { m_uart = dev; }
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
void device_start() override { };
|
||||
image_init_result call_load() override;
|
||||
void call_unload() override;
|
||||
|
||||
private:
|
||||
int get_index_from_tagname();
|
||||
tms9902_device* m_uart;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -166,7 +171,7 @@ public:
|
||||
const char *file_extensions() const override { return ""; }
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
void device_start() override { };
|
||||
image_init_result call_load() override;
|
||||
void call_unload() override;
|
||||
};
|
||||
|
@ -28,10 +28,8 @@ class tmc0430_device : public device_t
|
||||
public:
|
||||
tmc0430_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
template <class Object> devcb_base &set_ready_wr_callback(Object &&cb) { return m_gromready.set_callback(std::forward<Object>(cb)); }
|
||||
|
||||
auto ready_cb() { return m_gromready.bind(); }
|
||||
|
||||
|
||||
void readz(uint8_t *value);
|
||||
void write(uint8_t data);
|
||||
void set_lines(line_state mline, line_state moline, line_state gsq);
|
||||
@ -103,9 +101,4 @@ private:
|
||||
uint8_t *m_memptr;
|
||||
};
|
||||
|
||||
#define MCFG_GROM_ADD(_tag, _ident, _region, _offset, _ready) \
|
||||
MCFG_DEVICE_ADD(_tag, TMC0430, 0) \
|
||||
downcast<tmc0430_device &>(*device).set_region_and_ident(_region, _offset, _ident); \
|
||||
downcast<tmc0430_device &>(*device).set_ready_wr_callback(DEVCB_##_ready);
|
||||
|
||||
#endif // MAME_MACHINE_TMC0430_H
|
||||
|
@ -50,11 +50,6 @@ public:
|
||||
|
||||
tms9902_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
template <class Object> devcb_base &set_int_callback(Object &&cb) { return m_int_cb.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> devcb_base &set_rcv_callback(Object &&cb) { return m_rcv_cb.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> devcb_base &set_xmit_callback(Object &&cb) { return m_xmit_cb.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> devcb_base &set_ctrl_callback(Object &&cb) { return m_ctrl_cb.set_callback(std::forward<Object>(cb)); }
|
||||
|
||||
// Callbacks
|
||||
auto int_cb() { return m_int_cb.bind(); }
|
||||
auto rcv_cb() { return m_rcv_cb.bind(); }
|
||||
@ -191,20 +186,4 @@ private:
|
||||
int m_last_config_value;
|
||||
};
|
||||
|
||||
/***************************************************************************
|
||||
DEVICE CONFIGURATION MACROS
|
||||
***************************************************************************/
|
||||
|
||||
#define MCFG_TMS9902_INT_CB(cb) \
|
||||
downcast<tms9902_device &>(*device).set_int_callback((DEVCB_##cb));
|
||||
|
||||
#define MCFG_TMS9902_RCV_CB(cb) \
|
||||
downcast<tms9902_device &>(*device).set_rcv_callback((DEVCB_##cb));
|
||||
|
||||
#define MCFG_TMS9902_XMIT_CB(cb) \
|
||||
downcast<tms9902_device &>(*device).set_xmit_callback((DEVCB_##cb));
|
||||
|
||||
#define MCFG_TMS9902_CTRL_CB(cb) \
|
||||
downcast<tms9902_device &>(*device).set_ctrl_callback((DEVCB_##cb));
|
||||
|
||||
#endif // MAME_MACHINE_TMS9902_H
|
||||
|
@ -698,8 +698,8 @@ MACHINE_CONFIG_START(geneve_state::geneve)
|
||||
geneve_common(config);
|
||||
|
||||
// Mapper
|
||||
MCFG_DEVICE_ADD(GENEVE_MAPPER_TAG, GENEVE_MAPPER, 0)
|
||||
MCFG_GENEVE_READY_HANDLER( WRITELINE(*this, geneve_state, mapper_ready) )
|
||||
GENEVE_MAPPER(config, m_mapper, 0);
|
||||
m_mapper->ready_cb().set(FUNC(geneve_state::mapper_ready));
|
||||
|
||||
// Peripheral expansion box (Geneve composition)
|
||||
TI99_PERIBOX_GEN(config, m_peribox, 0);
|
||||
@ -712,8 +712,8 @@ MACHINE_CONFIG_START(geneve_state::genmod)
|
||||
geneve_common(config);
|
||||
|
||||
// Mapper
|
||||
MCFG_DEVICE_ADD(GENEVE_MAPPER_TAG, GENMOD_MAPPER, 0)
|
||||
MCFG_GENEVE_READY_HANDLER( WRITELINE(*this, geneve_state, mapper_ready) )
|
||||
GENMOD_MAPPER(config, m_mapper, 0);
|
||||
m_mapper->ready_cb().set(FUNC(geneve_state::mapper_ready));
|
||||
|
||||
// Peripheral expansion box (Geneve composition with Genmod and plugged-in Memex)
|
||||
TI99_PERIBOX_GENMOD(config, m_peribox, 0);
|
||||
@ -764,11 +764,10 @@ MACHINE_CONFIG_START(geneve_state::geneve_common)
|
||||
MCFG_SN76496_READY_HANDLER( WRITELINE(*this, geneve_state, ext_ready) )
|
||||
|
||||
// User interface devices
|
||||
MCFG_DEVICE_ADD( GENEVE_KEYBOARD_TAG, GENEVE_KEYBOARD, 0 )
|
||||
MCFG_GENEVE_KBINT_HANDLER( WRITELINE(*this, geneve_state, keyboard_interrupt) )
|
||||
GENEVE_KEYBOARD(config, m_keyboard, 0);
|
||||
m_keyboard->int_cb().set(FUNC(geneve_state::keyboard_interrupt));
|
||||
TI99_JOYPORT(config, m_joyport, 0);
|
||||
m_joyport->configure_slot(false, false);
|
||||
|
||||
TI99_COLORBUS(config, m_colorbus, 0);
|
||||
m_colorbus->configure_slot();
|
||||
|
||||
|
@ -132,9 +132,8 @@
|
||||
#include "j2trail.lh"
|
||||
#include "j2tstplt.lh"
|
||||
|
||||
|
||||
|
||||
|
||||
#define UART_IC5 "tms9902_ic5"
|
||||
#define UART_IC10 "tms9902_ic10"
|
||||
|
||||
|
||||
class jpmmps_state : public driver_device
|
||||
@ -144,7 +143,9 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_psg(*this, "sn"),
|
||||
m_meters(*this, "meters")
|
||||
m_meters(*this, "meters"),
|
||||
m_uart_ic5(*this, UART_IC5),
|
||||
m_uart_ic10(*this, UART_IC10)
|
||||
{ }
|
||||
|
||||
void jpmmps(machine_config &config);
|
||||
@ -161,6 +162,8 @@ private:
|
||||
required_device<tms9995_device> m_maincpu;
|
||||
required_device<sn76489_device> m_psg;
|
||||
required_device<meters_device> m_meters;
|
||||
required_device<tms9902_device> m_uart_ic5;
|
||||
required_device<tms9902_device> m_uart_ic10;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(jpmmps_meters_w);
|
||||
DECLARE_WRITE8_MEMBER(jpmmps_psg_buf_w);
|
||||
@ -182,7 +185,7 @@ void jpmmps_state::jpmmps_map(address_map &map)
|
||||
void jpmmps_state::jpmmps_io_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x0000, 0x001f).rw("tms9902_ic5", FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite));
|
||||
map(0x0000, 0x001f).rw(UART_IC5, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite));
|
||||
|
||||
// AM_RANGE(0x0020, 0x0020) // power fail
|
||||
// AM_RANGE(0x0021, 0x0021) // wd timeout
|
||||
@ -192,7 +195,7 @@ void jpmmps_state::jpmmps_io_map(address_map &map)
|
||||
// AM_RANGE(0x0026, 0x0026) // uart4 int
|
||||
// AM_RANGE(0x0027, 0x0027) // uart2 int
|
||||
|
||||
map(0x0040, 0x005f).rw("tms9902_ic10", FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite));
|
||||
map(0x0040, 0x005f).rw(UART_IC10, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite));
|
||||
map(0x0060, 0x0067).w("mainlatch", FUNC(ls259_device::write_d0));
|
||||
}
|
||||
|
||||
@ -276,8 +279,8 @@ MACHINE_CONFIG_START(jpmmps_state::jpmmps)
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_ic25", I8255, 0)
|
||||
|
||||
MCFG_DEVICE_ADD("tms9902_ic10", TMS9902, DUART_CLOCK) // Communication with Reel MCU
|
||||
MCFG_DEVICE_ADD("tms9902_ic5", TMS9902, DUART_CLOCK) // Communication with Security / Printer
|
||||
TMS9902(config, m_uart_ic10, DUART_CLOCK); // Communication with Reel MCU
|
||||
TMS9902(config, m_uart_ic5, DUART_CLOCK); // Communication with Security / Printer
|
||||
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
|
@ -52,7 +52,8 @@ class jpms80_state : public driver_device
|
||||
public:
|
||||
jpms80_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu")
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_duart(*this, "tms9902duart")
|
||||
{ }
|
||||
|
||||
void jpms80(machine_config &config);
|
||||
@ -73,6 +74,7 @@ private:
|
||||
|
||||
// devices
|
||||
required_device<tms9995_device> m_maincpu;
|
||||
required_device<tms9902_device> m_duart;
|
||||
};
|
||||
|
||||
WRITE_LINE_MEMBER(jpms80_state::int1_enable_w)
|
||||
@ -158,7 +160,7 @@ MACHINE_CONFIG_START(jpms80_state::jpms80)
|
||||
outlatch10.q_out_cb<2>().set(FUNC(jpms80_state::watchdog_w)); // 52 - Watchdog
|
||||
outlatch10.q_out_cb<3>().set(FUNC(jpms80_state::io_enable_w)); // 53 - I/O Enable
|
||||
|
||||
MCFG_DEVICE_ADD("tms9902duart", TMS9902, DUART_CLOCK)
|
||||
TMS9902(config, m_duart, DUART_CLOCK);
|
||||
|
||||
MCFG_DEVICE_ADD("aysnd", AY8910, 2000000)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
@ -426,7 +426,7 @@ MACHINE_CONFIG_START(ti99_2_state::ti99_224)
|
||||
MCFG_VIDEO992_SCREEN_ADD( TI992_SCREEN_TAG )
|
||||
MCFG_SCREEN_UPDATE_DEVICE( TI992_VDC_TAG, bus::ti99::internal::video992_device, screen_update )
|
||||
// I/O interface circuit
|
||||
MCFG_DEVICE_ADD(TI992_IO_TAG, IO99224, 0)
|
||||
IO99224(config, m_io992, 0);
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_2_state, ti99_224 )
|
||||
MACHINE_CONFIG_END
|
||||
@ -442,8 +442,8 @@ MACHINE_CONFIG_START(ti99_2_state::ti99_232)
|
||||
MCFG_SCREEN_UPDATE_DEVICE( TI992_VDC_TAG, bus::ti99::internal::video992_device, screen_update )
|
||||
|
||||
// I/O interface circuit
|
||||
MCFG_DEVICE_ADD(TI992_IO_TAG, IO99232, 0)
|
||||
MCFG_SET_ROMBANK_HANDLER(WRITELINE(*this, ti99_2_state, rombank_set) )
|
||||
IO99232(config, m_io992, 0);
|
||||
m_io992->rombank_cb().set(FUNC(ti99_2_state::rombank_set));
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ti99_2_state, ti99_232 )
|
||||
|
||||
|
@ -924,9 +924,17 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4)
|
||||
WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
|
||||
|
||||
// GROM devices
|
||||
MCFG_GROM_ADD( TI99_GROM0_TAG, 0, TI99_CONSOLEGROM, 0x0000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
MCFG_GROM_ADD( TI99_GROM1_TAG, 1, TI99_CONSOLEGROM, 0x2000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
MCFG_GROM_ADD( TI99_GROM2_TAG, 2, TI99_CONSOLEGROM, 0x4000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
tmc0430_device& grom0(TMC0430(config, TI99_GROM0_TAG, 0));
|
||||
grom0.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom0.set_region_and_ident(TI99_CONSOLEGROM, 0x0000, 0);
|
||||
|
||||
tmc0430_device& grom1(TMC0430(config, TI99_GROM1_TAG, 0));
|
||||
grom1.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom1.set_region_and_ident(TI99_CONSOLEGROM, 0x2000, 1);
|
||||
|
||||
tmc0430_device& grom2(TMC0430(config, TI99_GROM2_TAG, 0));
|
||||
grom2.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom2.set_region_and_ident(TI99_CONSOLEGROM, 0x4000, 2);
|
||||
|
||||
// Joystick port
|
||||
TI99_JOYPORT(config, m_joyport, 0);
|
||||
@ -1044,9 +1052,17 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4a)
|
||||
WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
|
||||
|
||||
// GROM devices
|
||||
MCFG_GROM_ADD( TI99_GROM0_TAG, 0, TI99_CONSOLEGROM, 0x0000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
MCFG_GROM_ADD( TI99_GROM1_TAG, 1, TI99_CONSOLEGROM, 0x2000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
MCFG_GROM_ADD( TI99_GROM2_TAG, 2, TI99_CONSOLEGROM, 0x4000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
tmc0430_device& grom0(TMC0430(config, TI99_GROM0_TAG, 0));
|
||||
grom0.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom0.set_region_and_ident(TI99_CONSOLEGROM, 0x0000, 0);
|
||||
|
||||
tmc0430_device& grom1(TMC0430(config, TI99_GROM1_TAG, 0));
|
||||
grom1.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom1.set_region_and_ident(TI99_CONSOLEGROM, 0x2000, 1);
|
||||
|
||||
tmc0430_device& grom2(TMC0430(config, TI99_GROM2_TAG, 0));
|
||||
grom2.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom2.set_region_and_ident(TI99_CONSOLEGROM, 0x4000, 2);
|
||||
|
||||
// Joystick port
|
||||
TI99_JOYPORT(config, m_joyport, 0);
|
||||
@ -1185,7 +1201,8 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4ev_60hz)
|
||||
RAM(config, TI99_EXPRAM_TAG).set_default_size("32K").set_default_value(0);
|
||||
|
||||
// EVPC connector
|
||||
MCFG_ADD_EVPC_CONNECTOR( TI99_EVPC_CONN_TAG, WRITELINE( *this, ti99_4x_state, video_interrupt_evpc_in ) )
|
||||
bus::ti99::internal::evpc_clock_connector& evpcconn(TI99_EVPCCONN(config, TI99_EVPC_CONN_TAG, 0));
|
||||
evpcconn.vdpint_cb().set(FUNC(ti99_4x_state::video_interrupt_evpc_in));
|
||||
|
||||
// Software list
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list_ti99", "ti99_cart")
|
||||
@ -1204,9 +1221,17 @@ MACHINE_CONFIG_START(ti99_4x_state::ti99_4ev_60hz)
|
||||
WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
|
||||
|
||||
// GROM devices
|
||||
MCFG_GROM_ADD( TI99_GROM0_TAG, 0, TI99_CONSOLEGROM, 0x0000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
MCFG_GROM_ADD( TI99_GROM1_TAG, 1, TI99_CONSOLEGROM, 0x2000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
MCFG_GROM_ADD( TI99_GROM2_TAG, 2, TI99_CONSOLEGROM, 0x4000, WRITELINE(*this, ti99_4x_state, console_ready_grom))
|
||||
tmc0430_device& grom0(TMC0430(config, TI99_GROM0_TAG, 0));
|
||||
grom0.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom0.set_region_and_ident(TI99_CONSOLEGROM, 0x0000, 0);
|
||||
|
||||
tmc0430_device& grom1(TMC0430(config, TI99_GROM1_TAG, 0));
|
||||
grom1.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom1.set_region_and_ident(TI99_CONSOLEGROM, 0x2000, 1);
|
||||
|
||||
tmc0430_device& grom2(TMC0430(config, TI99_GROM2_TAG, 0));
|
||||
grom2.ready_cb().set(FUNC(ti99_4x_state::console_ready_grom));
|
||||
grom2.set_region_and_ident(TI99_CONSOLEGROM, 0x4000, 2);
|
||||
|
||||
// Joystick port
|
||||
TI99_JOYPORT(config, m_joyport, 0);
|
||||
|
@ -759,10 +759,10 @@ MACHINE_CONFIG_START(ti99_8_state::ti99_8)
|
||||
m_tms9901->intlevel_cb().set(FUNC(ti99_8_state::tms9901_interrupt));
|
||||
|
||||
// Mainboard with custom chips
|
||||
MCFG_DEVICE_ADD(TI998_MAINBOARD_TAG, TI99_MAINBOARD8, 0)
|
||||
MCFG_MAINBOARD8_READY_CALLBACK(WRITELINE(*this, ti99_8_state, console_ready))
|
||||
MCFG_MAINBOARD8_RESET_CALLBACK(WRITELINE(*this, ti99_8_state, console_reset))
|
||||
MCFG_MAINBOARD8_HOLD_CALLBACK(WRITELINE(*this, ti99_8_state, cpu_hold))
|
||||
TI99_MAINBOARD8(config, m_mainboard, 0);
|
||||
m_mainboard->ready_cb().set(FUNC(ti99_8_state::console_ready));
|
||||
m_mainboard->reset_cb().set(FUNC(ti99_8_state::console_reset));
|
||||
m_mainboard->hold_cb().set(FUNC(ti99_8_state::cpu_hold));
|
||||
|
||||
// Cartridge port
|
||||
TI99_GROMPORT(config, m_gromport, 0);
|
||||
@ -807,31 +807,96 @@ MACHINE_CONFIG_START(ti99_8_state::ti99_8)
|
||||
WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "cass_out", 0.25);
|
||||
|
||||
// GROM library
|
||||
MCFG_GROM_ADD( TI998_SYSGROM0_TAG, 0, TI998_SYSGROM_REG, 0x0000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, system_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_SYSGROM1_TAG, 1, TI998_SYSGROM_REG, 0x2000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, system_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_SYSGROM2_TAG, 2, TI998_SYSGROM_REG, 0x4000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, system_grom_ready))
|
||||
tmc0430_device& sgrom0(TMC0430(config, TI998_SYSGROM0_TAG, 0));
|
||||
sgrom0.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::system_grom_ready));
|
||||
sgrom0.set_region_and_ident(TI998_SYSGROM_REG, 0x0000, 0);
|
||||
|
||||
MCFG_GROM_ADD( TI998_GLIB10_TAG, 0, TI998_GROMLIB1_REG, 0x0000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, ptts_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB11_TAG, 1, TI998_GROMLIB1_REG, 0x2000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, ptts_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB12_TAG, 2, TI998_GROMLIB1_REG, 0x4000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, ptts_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB13_TAG, 3, TI998_GROMLIB1_REG, 0x6000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, ptts_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB14_TAG, 4, TI998_GROMLIB1_REG, 0x8000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, ptts_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB15_TAG, 5, TI998_GROMLIB1_REG, 0xa000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, ptts_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB16_TAG, 6, TI998_GROMLIB1_REG, 0xc000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, ptts_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB17_TAG, 7, TI998_GROMLIB1_REG, 0xe000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, ptts_grom_ready))
|
||||
tmc0430_device& sgrom1(TMC0430(config, TI998_SYSGROM1_TAG, 0));
|
||||
sgrom1.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::system_grom_ready));
|
||||
sgrom1.set_region_and_ident(TI998_SYSGROM_REG, 0x2000, 1);
|
||||
|
||||
MCFG_GROM_ADD( TI998_GLIB20_TAG, 0, TI998_GROMLIB2_REG, 0x0000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p8_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB21_TAG, 1, TI998_GROMLIB2_REG, 0x2000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p8_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB22_TAG, 2, TI998_GROMLIB2_REG, 0x4000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p8_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB23_TAG, 3, TI998_GROMLIB2_REG, 0x6000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p8_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB24_TAG, 4, TI998_GROMLIB2_REG, 0x8000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p8_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB25_TAG, 5, TI998_GROMLIB2_REG, 0xa000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p8_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB26_TAG, 6, TI998_GROMLIB2_REG, 0xc000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p8_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB27_TAG, 7, TI998_GROMLIB2_REG, 0xe000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p8_grom_ready))
|
||||
tmc0430_device& sgrom2(TMC0430(config, TI998_SYSGROM2_TAG, 0));
|
||||
sgrom2.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::system_grom_ready));
|
||||
sgrom2.set_region_and_ident(TI998_SYSGROM_REG, 0x4000, 2);
|
||||
|
||||
MCFG_GROM_ADD( TI998_GLIB30_TAG, 0, TI998_GROMLIB3_REG, 0x0000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p3_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB31_TAG, 1, TI998_GROMLIB3_REG, 0x2000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p3_grom_ready))
|
||||
MCFG_GROM_ADD( TI998_GLIB32_TAG, 2, TI998_GROMLIB3_REG, 0x4000, WRITELINE(TI998_MAINBOARD_TAG, bus::ti99::internal::mainboard8_device, p3_grom_ready))
|
||||
|
||||
tmc0430_device& tgrom0(TMC0430(config, TI998_GLIB10_TAG, 0));
|
||||
tgrom0.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::ptts_grom_ready));
|
||||
tgrom0.set_region_and_ident(TI998_GROMLIB1_REG, 0x0000, 0);
|
||||
|
||||
tmc0430_device& tgrom1(TMC0430(config, TI998_GLIB11_TAG, 0));
|
||||
tgrom1.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::ptts_grom_ready));
|
||||
tgrom1.set_region_and_ident(TI998_GROMLIB1_REG, 0x2000, 1);
|
||||
|
||||
tmc0430_device& tgrom2(TMC0430(config, TI998_GLIB12_TAG, 0));
|
||||
tgrom2.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::ptts_grom_ready));
|
||||
tgrom2.set_region_and_ident(TI998_GROMLIB1_REG, 0x4000, 2);
|
||||
|
||||
tmc0430_device& tgrom3(TMC0430(config, TI998_GLIB13_TAG, 0));
|
||||
tgrom3.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::ptts_grom_ready));
|
||||
tgrom3.set_region_and_ident(TI998_GROMLIB1_REG, 0x6000, 3);
|
||||
|
||||
tmc0430_device& tgrom4(TMC0430(config, TI998_GLIB14_TAG, 0));
|
||||
tgrom4.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::ptts_grom_ready));
|
||||
tgrom4.set_region_and_ident(TI998_GROMLIB1_REG, 0x8000, 4);
|
||||
|
||||
tmc0430_device& tgrom5(TMC0430(config, TI998_GLIB15_TAG, 0));
|
||||
tgrom5.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::ptts_grom_ready));
|
||||
tgrom5.set_region_and_ident(TI998_GROMLIB1_REG, 0xa000, 5);
|
||||
|
||||
tmc0430_device& tgrom6(TMC0430(config, TI998_GLIB16_TAG, 0));
|
||||
tgrom6.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::ptts_grom_ready));
|
||||
tgrom6.set_region_and_ident(TI998_GROMLIB1_REG, 0xc000, 6);
|
||||
|
||||
tmc0430_device& tgrom7(TMC0430(config, TI998_GLIB17_TAG, 0));
|
||||
tgrom7.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::ptts_grom_ready));
|
||||
tgrom7.set_region_and_ident(TI998_GROMLIB1_REG, 0xe000, 7);
|
||||
|
||||
|
||||
tmc0430_device& p8grom0(TMC0430(config, TI998_GLIB20_TAG, 0));
|
||||
p8grom0.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p8_grom_ready));
|
||||
p8grom0.set_region_and_ident(TI998_GROMLIB2_REG, 0x0000, 0);
|
||||
|
||||
tmc0430_device& p8grom1(TMC0430(config, TI998_GLIB21_TAG, 0));
|
||||
p8grom1.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p8_grom_ready));
|
||||
p8grom1.set_region_and_ident(TI998_GROMLIB2_REG, 0x2000, 1);
|
||||
|
||||
tmc0430_device& p8grom2(TMC0430(config, TI998_GLIB22_TAG, 0));
|
||||
p8grom2.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p8_grom_ready));
|
||||
p8grom2.set_region_and_ident(TI998_GROMLIB2_REG, 0x4000, 2);
|
||||
|
||||
tmc0430_device& p8grom3(TMC0430(config, TI998_GLIB23_TAG, 0));
|
||||
p8grom3.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p8_grom_ready));
|
||||
p8grom3.set_region_and_ident(TI998_GROMLIB2_REG, 0x6000, 3);
|
||||
|
||||
tmc0430_device& p8grom4(TMC0430(config, TI998_GLIB24_TAG, 0));
|
||||
p8grom4.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p8_grom_ready));
|
||||
p8grom4.set_region_and_ident(TI998_GROMLIB2_REG, 0x8000, 4);
|
||||
|
||||
tmc0430_device& p8grom5(TMC0430(config, TI998_GLIB25_TAG, 0));
|
||||
p8grom5.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p8_grom_ready));
|
||||
p8grom5.set_region_and_ident(TI998_GROMLIB2_REG, 0xa000, 5);
|
||||
|
||||
tmc0430_device& p8grom6(TMC0430(config, TI998_GLIB26_TAG, 0));
|
||||
p8grom6.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p8_grom_ready));
|
||||
p8grom6.set_region_and_ident(TI998_GROMLIB2_REG, 0xc000, 6);
|
||||
|
||||
tmc0430_device& p8grom7(TMC0430(config, TI998_GLIB27_TAG, 0));
|
||||
p8grom7.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p8_grom_ready));
|
||||
p8grom7.set_region_and_ident(TI998_GROMLIB2_REG, 0xe000, 7);
|
||||
|
||||
|
||||
tmc0430_device& p3grom0(TMC0430(config, TI998_GLIB30_TAG, 0));
|
||||
p3grom0.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p3_grom_ready));
|
||||
p3grom0.set_region_and_ident(TI998_GROMLIB3_REG, 0x0000, 0);
|
||||
|
||||
tmc0430_device& p3grom1(TMC0430(config, TI998_GLIB31_TAG, 0));
|
||||
p3grom1.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p3_grom_ready));
|
||||
p3grom1.set_region_and_ident(TI998_GROMLIB3_REG, 0x2000, 1);
|
||||
|
||||
tmc0430_device& p3grom2(TMC0430(config, TI998_GLIB32_TAG, 0));
|
||||
p3grom2.ready_cb().set(TI998_MAINBOARD_TAG, FUNC(bus::ti99::internal::mainboard8_device::p3_grom_ready));
|
||||
p3grom2.set_region_and_ident(TI998_GROMLIB3_REG, 0x4000, 2);
|
||||
|
||||
// Joystick port
|
||||
TI99_JOYPORT(config, m_joyport, 0);
|
||||
|
@ -870,8 +870,9 @@ MACHINE_CONFIG_START(tm990189_state::tm990_189)
|
||||
m_tms9901_sys->p_out_cb(15).set(FUNC(tm990189_state::sys9901_tapewdata_w));
|
||||
m_tms9901_sys->intlevel_cb().set(FUNC(tm990189_state::sys9901_interrupt_callback));
|
||||
|
||||
MCFG_DEVICE_ADD(m_tms9902, TMS9902, 2000000) // MZ: needs to be fixed once the RS232 support is complete
|
||||
MCFG_TMS9902_XMIT_CB(WRITE8(*this, tm990189_state, xmit_callback)) /* called when a character is transmitted */
|
||||
TMS9902(config, m_tms9902, 2000000);
|
||||
m_tms9902->xmit_cb().set(FUNC(tm990189_state::xmit_callback)); // called when a character is transmitted
|
||||
|
||||
MCFG_DEVICE_ADD("rs232", TM990_189_RS232, 0, m_tms9902)
|
||||
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
|
||||
@ -931,8 +932,9 @@ MACHINE_CONFIG_START(tm990189_state::tm990_189_v)
|
||||
m_tms9901_sys->p_out_cb(15).set(FUNC(tm990189_state::sys9901_tapewdata_w));
|
||||
m_tms9901_sys->intlevel_cb().set(FUNC(tm990189_state::sys9901_interrupt_callback));
|
||||
|
||||
MCFG_DEVICE_ADD(m_tms9902, TMS9902, 2000000) // MZ: needs to be fixed once the RS232 support is complete
|
||||
MCFG_TMS9902_XMIT_CB(WRITE8(*this, tm990189_state, xmit_callback)) /* called when a character is transmitted */
|
||||
TMS9902(config, m_tms9902, 2000000);
|
||||
m_tms9902->xmit_cb().set(FUNC(tm990189_state::xmit_callback)); // called when a character is transmitted
|
||||
|
||||
MCFG_DEVICE_ADD("rs232", TM990_189_RS232, 0, m_tms9902)
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_timer", tm990189_state, display_callback, attotime::from_hz(30))
|
||||
MCFG_TIMER_START_DELAY(attotime::from_msec(150))
|
||||
|
Loading…
Reference in New Issue
Block a user