summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-07-11 02:31:42 +1000
committer Vas Crabb <vas@vastheman.com>2017-07-11 02:31:42 +1000
commitc5c3012634f76a15b30637cc687519cb5989667d (patch)
treeca0b98d7a40cbe4c93eb2c8f6f082ad7c242d42f /src/devices/bus
parent7d980227979c30aac9eb527f15c5b893aebea5c6 (diff)
Cleaned up serial, matrix keyboard and TI-8x link protocol interfaces:
* Switched to delegate timers - Frees implementations from having to call timer method - Eliminates risk of ID conflicts with implementations/other interfaces * Moved save state registration to interface post start - Plays nicely with device_missing_dependencies exceptions - Frees implementation from having to call save state registration method - Improves save state support in devices that neglected to call method
Diffstat (limited to 'src/devices/bus')
-rw-r--r--src/devices/bus/apricot/keyboard/hle.cpp11
-rw-r--r--src/devices/bus/apricot/keyboard/hle.h2
-rw-r--r--src/devices/bus/hp_hil/hlekbd.cpp10
-rw-r--r--src/devices/bus/hp_hil/hlekbd.h4
-rw-r--r--src/devices/bus/intellec4/intellec4.cpp117
-rw-r--r--src/devices/bus/intellec4/intellec4.h25
-rw-r--r--src/devices/bus/isa/sblaster.cpp5
-rw-r--r--src/devices/bus/nes_ctrl/miracle.cpp4
-rw-r--r--src/devices/bus/rs232/keyboard.cpp13
-rw-r--r--src/devices/bus/rs232/keyboard.h2
-rw-r--r--src/devices/bus/rs232/null_modem.cpp2
-rw-r--r--src/devices/bus/rs232/printer.cpp5
-rw-r--r--src/devices/bus/rs232/printer.h1
-rw-r--r--src/devices/bus/rs232/pty.cpp2
-rw-r--r--src/devices/bus/rs232/rs232.h3
-rw-r--r--src/devices/bus/rs232/ser_mouse.cpp72
-rw-r--r--src/devices/bus/rs232/terminal.cpp12
-rw-r--r--src/devices/bus/rs232/terminal.h2
-rw-r--r--src/devices/bus/rs232/xvd701.cpp2
-rw-r--r--src/devices/bus/snes_ctrl/miracle.cpp4
-rw-r--r--src/devices/bus/sunkbd/hlekbd.cpp5
-rw-r--r--src/devices/bus/sunkbd/hlekbd.h2
-rw-r--r--src/devices/bus/ti8x/graphlinkhle.cpp9
-rw-r--r--src/devices/bus/ti8x/graphlinkhle.h1
-rw-r--r--src/devices/bus/ti8x/ti8x.cpp136
-rw-r--r--src/devices/bus/ti8x/ti8x.h11
26 files changed, 228 insertions, 234 deletions
diff --git a/src/devices/bus/apricot/keyboard/hle.cpp b/src/devices/bus/apricot/keyboard/hle.cpp
index bb95d2bbc9d..742917b5c9d 100644
--- a/src/devices/bus/apricot/keyboard/hle.cpp
+++ b/src/devices/bus/apricot/keyboard/hle.cpp
@@ -224,7 +224,6 @@ apricot_keyboard_hle_device::apricot_keyboard_hle_device(const machine_config &m
void apricot_keyboard_hle_device::device_start()
{
- device_buffered_serial_interface::register_save_state(machine().save(), this);
}
//-------------------------------------------------
@@ -348,13 +347,3 @@ void apricot_keyboard_hle_device::out_w(int state)
{
device_buffered_serial_interface::rx_w(state);
}
-
-//-------------------------------------------------
-// device_timer - device-specific timer
-//-------------------------------------------------
-
-void apricot_keyboard_hle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- device_matrix_keyboard_interface::device_timer(timer, id, param, ptr);
- device_buffered_serial_interface::device_timer(timer, id, param, ptr);
-}
diff --git a/src/devices/bus/apricot/keyboard/hle.h b/src/devices/bus/apricot/keyboard/hle.h
index 921218a967f..6335a71ca73 100644
--- a/src/devices/bus/apricot/keyboard/hle.h
+++ b/src/devices/bus/apricot/keyboard/hle.h
@@ -49,8 +49,6 @@ protected:
virtual void key_make(uint8_t row, uint8_t column) override;
virtual void key_break(uint8_t row, uint8_t column) override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
-
private:
enum {
CMD_REQ_TIME_AND_DATE = 0xe1,
diff --git a/src/devices/bus/hp_hil/hlekbd.cpp b/src/devices/bus/hp_hil/hlekbd.cpp
index e068e9a0ec5..48289063ee7 100644
--- a/src/devices/bus/hp_hil/hlekbd.cpp
+++ b/src/devices/bus/hp_hil/hlekbd.cpp
@@ -277,16 +277,6 @@ void hle_device_base::device_reset()
}
-/*--------------------------------------------------
- hle_device_base::device_timer
- handle timed events
---------------------------------------------------*/
-
-void hle_device_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- device_matrix_keyboard_interface::device_timer(timer, id, param, ptr);
-}
-
void hle_device_base::hil_write(uint16_t data)
{
int frames = 0;
diff --git a/src/devices/bus/hp_hil/hlekbd.h b/src/devices/bus/hp_hil/hlekbd.h
index 3c7f3fdda8c..534ba441c5e 100644
--- a/src/devices/bus/hp_hil/hlekbd.h
+++ b/src/devices/bus/hp_hil/hlekbd.h
@@ -26,7 +26,6 @@ protected:
// device overrides
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_matrix_keyboard_interface overrides
virtual void key_make(uint8_t row, uint8_t column) override;
@@ -36,9 +35,6 @@ protected:
virtual void hil_write(uint16_t data) override;
private:
- // device_serial_interface uses 10'000 range
- // device_matrix_keyboard_interface uses 20'000 range
-
void transmit_byte(uint8_t byte);
util::fifo<uint8_t, 8> m_fifo;
diff --git a/src/devices/bus/intellec4/intellec4.cpp b/src/devices/bus/intellec4/intellec4.cpp
index 249e18ca501..83c2f7702c4 100644
--- a/src/devices/bus/intellec4/intellec4.cpp
+++ b/src/devices/bus/intellec4/intellec4.cpp
@@ -20,17 +20,40 @@ namespace bus { namespace intellec4 {
univ_slot_device::univ_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, INTELLEC4_UNIV_SLOT, tag, owner, clock)
, device_slot_interface(mconfig, *this)
+ , m_bus(*this, finder_base::DUMMY_TAG)
{
}
+/*----------------------------------
+ configuration helpers
+----------------------------------*/
+
void univ_slot_device::set_bus_tag(device_t &device, char const *tag)
{
+ downcast<univ_slot_device &>(device).m_bus.set_tag(tag);
}
+/*----------------------------------
+ device_t implementation
+----------------------------------*/
+
+void univ_slot_device::device_validity_check(validity_checker &valid) const
+{
+ device_t *const card(get_card_device());
+ if (card && !dynamic_cast<device_univ_card_interface *>(card))
+ osd_printf_error("Card device %s (%s) does not implement device_univ_card_interface\n", card->tag(), card->name());
+}
+
void univ_slot_device::device_start()
{
+ device_t *const card_device(get_card_device());
+ device_univ_card_interface *const univ_card(dynamic_cast<device_univ_card_interface *>(card_device));
+ if (card_device && !univ_card)
+ throw emu_fatalerror("univ_slot_device: card device %s (%s) does not implement device_univ_card_interface\n", card_device->tag(), card_device->name());
+ if (univ_card)
+ univ_card->set_bus(*m_bus);
}
@@ -39,6 +62,31 @@ void univ_slot_device::device_start()
BUS DEVICE
***********************************************************************/
+univ_bus_device::univ_bus_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, INTELLEC4_UNIV_BUS, tag, owner, clock)
+ , m_rom_device(*this, finder_base::DUMMY_TAG)
+ , m_rom_ports_device(*this, finder_base::DUMMY_TAG)
+ , m_memory_device(*this, finder_base::DUMMY_TAG)
+ , m_status_device(*this, finder_base::DUMMY_TAG)
+ , m_ram_ports_device(*this, finder_base::DUMMY_TAG)
+ , m_rom_space(-1)
+ , m_rom_ports_space(-1)
+ , m_memory_space(-1)
+ , m_status_space(-1)
+ , m_ram_ports_space(-1)
+ , m_stop_out_cb(*this)
+ , m_test_out_cb(*this)
+ , m_reset_4002_out_cb(*this)
+ , m_user_reset_out_cb(*this)
+ , m_stop(0U)
+ , m_test(0U)
+ , m_reset_4002(0U)
+ , m_user_reset(0U)
+{
+ std::fill(std::begin(m_cards), std::end(m_cards), nullptr);
+}
+
+
/*----------------------------------
address space configuration
----------------------------------*/
@@ -79,31 +127,6 @@ void univ_bus_device::set_ram_ports_space(device_t &device, char const *tag, int
}
-univ_bus_device::univ_bus_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, INTELLEC4_UNIV_BUS, tag, owner, clock)
- , m_rom_device(*this, finder_base::DUMMY_TAG)
- , m_rom_ports_device(*this, finder_base::DUMMY_TAG)
- , m_memory_device(*this, finder_base::DUMMY_TAG)
- , m_status_device(*this, finder_base::DUMMY_TAG)
- , m_ram_ports_device(*this, finder_base::DUMMY_TAG)
- , m_rom_space(-1)
- , m_rom_ports_space(-1)
- , m_memory_space(-1)
- , m_status_space(-1)
- , m_ram_ports_space(-1)
- , m_stop_out_cb(*this)
- , m_test_out_cb(*this)
- , m_reset_4002_out_cb(*this)
- , m_user_reset_out_cb(*this)
- , m_stop(0U)
- , m_test(0U)
- , m_reset_4002(0U)
- , m_user_reset(0U)
-{
- std::fill(std::begin(m_cards), std::end(m_cards), nullptr);
-}
-
-
/*----------------------------------
input lines
----------------------------------*/
@@ -177,6 +200,50 @@ void univ_bus_device::device_start()
m_user_reset_out_cb.resolve_safe();
}
+
+/*----------------------------------
+ helpers for cards
+----------------------------------*/
+
+unsigned univ_bus_device::add_card(device_univ_card_interface &card)
+{
+ for (unsigned i = 0; ARRAY_LENGTH(m_cards) > i; ++i)
+ {
+ if (!m_cards[i])
+ {
+ m_cards[i] = &card;
+ return i;
+ }
+ }
+ throw emu_fatalerror("univ_bus_device: maximum number of cards (%u) exceeded\n", unsigned(ARRAY_LENGTH(m_cards)));
+}
+
+
+
+/***********************************************************************
+ CARD INTERFACE
+***********************************************************************/
+
+device_univ_card_interface::device_univ_card_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_bus(nullptr)
+ , m_index(~unsigned(0))
+{
+}
+
+
+void device_univ_card_interface::interface_pre_start()
+{
+ if (!m_bus)
+ throw device_missing_dependencies();
+}
+
+
+void device_univ_card_interface::set_bus(univ_bus_device &bus)
+{
+ m_index = (m_bus = &bus)->add_card(*this);
+}
+
} } // namespace bus::intellec4
diff --git a/src/devices/bus/intellec4/intellec4.h b/src/devices/bus/intellec4/intellec4.h
index 2f5c418ec8d..58900760300 100644
--- a/src/devices/bus/intellec4/intellec4.h
+++ b/src/devices/bus/intellec4/intellec4.h
@@ -117,7 +117,7 @@ to implement the card in both systems.
#define MCFG_INTELLEC4_UNIV_SLOT_ADD(bus_tag, slot_tag, clock, slot_intf, def_slot) \
MCFG_DEVICE_ADD(slot_tag, INTELLEC4_UNIV_SLOT, clock) \
MCFG_DEVICE_SLOT_INTERFACE(slot_intf, def_slot, false) \
- bus::intellec4::univ_slot_device::set_bus_tag(*device, bus_tag);
+ bus::intellec4::univ_slot_device::set_bus_tag(*device, "^" bus_tag);
#define MCFG_INTELLEC4_UNIV_SLOT_REMOVE(slot_tag) \
MCFG_DEVICE_REMOVE(slot_tag)
@@ -168,13 +168,19 @@ public:
protected:
// device_t implementation
+ virtual void device_validity_check(validity_checker &valid) const override ATTR_COLD;
virtual void device_start() override;
+
+private:
+ required_device<univ_bus_device> m_bus;
};
class univ_bus_device : public device_t
{
public:
+ friend class device_univ_card_interface;
+
// address space configuration
static void set_rom_space(device_t &device, char const *tag, int space);
static void set_rom_ports_space(device_t &device, char const *tag, int space);
@@ -214,6 +220,9 @@ protected:
virtual void device_start() override;
private:
+ // helpers for cards
+ unsigned add_card(device_univ_card_interface &card);
+
// finding address spaces
required_device<device_memory_interface> m_rom_device, m_rom_ports_device;
required_device<device_memory_interface> m_memory_device, m_status_device, m_ram_ports_device;
@@ -236,6 +245,20 @@ private:
class device_univ_card_interface : public device_slot_card_interface
{
+protected:
+ friend class univ_slot_device;
+ friend class univ_bus_device;
+
+ device_univ_card_interface(const machine_config &mconfig, device_t &device);
+
+ // device_interface implementation
+ void interface_pre_start() override;
+
+private:
+ void set_bus(univ_bus_device &bus);
+
+ univ_bus_device *m_bus;
+ unsigned m_index;
};
} } // namespace bus::intellec4
diff --git a/src/devices/bus/isa/sblaster.cpp b/src/devices/bus/isa/sblaster.cpp
index 69e10819602..a6c0bcfa438 100644
--- a/src/devices/bus/isa/sblaster.cpp
+++ b/src/devices/bus/isa/sblaster.cpp
@@ -1568,13 +1568,10 @@ void sb_device::dack_w(int line, uint8_t data)
void sb_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr)
{
-// printf("DMA timer expire\n");
if (tid)
- {
- device_serial_interface::device_timer(timer, tid, param, ptr);
return;
- }
+// printf("DMA timer expire\n");
uint16_t lsample, rsample;
switch (m_dsp.flags) {
case 0: // 8-bit unsigned mono
diff --git a/src/devices/bus/nes_ctrl/miracle.cpp b/src/devices/bus/nes_ctrl/miracle.cpp
index 14ea0c2572f..350286db17a 100644
--- a/src/devices/bus/nes_ctrl/miracle.cpp
+++ b/src/devices/bus/nes_ctrl/miracle.cpp
@@ -40,10 +40,6 @@ void nes_miracle_device::device_timer(emu_timer &timer, device_timer_id id, int
{
m_strobe_clock++;
}
- else
- {
- device_serial_interface::device_timer(timer, id, param, ptr);
- }
}
//**************************************************************************
diff --git a/src/devices/bus/rs232/keyboard.cpp b/src/devices/bus/rs232/keyboard.cpp
index 17c6d4fa066..6e73ee30fc7 100644
--- a/src/devices/bus/rs232/keyboard.cpp
+++ b/src/devices/bus/rs232/keyboard.cpp
@@ -47,12 +47,6 @@ WRITE_LINE_MEMBER( serial_keyboard_device::update_serial )
reset();
}
-void serial_keyboard_device::device_start()
-{
- generic_keyboard_device::device_start();
- device_buffered_serial_interface::register_save_state(machine().save(), this);
-}
-
void serial_keyboard_device::device_reset()
{
generic_keyboard_device::device_reset();
@@ -79,13 +73,6 @@ void serial_keyboard_device::device_reset()
transmit_register_reset();
}
-void serial_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- // give both bases a chance to handle it
- device_buffered_serial_interface::device_timer(timer, id, param, ptr);
- generic_keyboard_device::device_timer(timer, id, param, ptr);
-}
-
void serial_keyboard_device::tra_callback()
{
output_rxd(transmit_register_get_data_bit());
diff --git a/src/devices/bus/rs232/keyboard.h b/src/devices/bus/rs232/keyboard.h
index 33b848dc126..a10f9a78385 100644
--- a/src/devices/bus/rs232/keyboard.h
+++ b/src/devices/bus/rs232/keyboard.h
@@ -27,9 +27,7 @@ public:
protected:
serial_keyboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
- virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void tra_callback() override;
virtual void send_key(uint8_t code) override;
diff --git a/src/devices/bus/rs232/null_modem.cpp b/src/devices/bus/rs232/null_modem.cpp
index 27579f3d8b8..1f4ba8d5ae9 100644
--- a/src/devices/bus/rs232/null_modem.cpp
+++ b/src/devices/bus/rs232/null_modem.cpp
@@ -89,7 +89,7 @@ void null_modem_device::device_timer(emu_timer &timer, device_timer_id id, int p
break;
default:
- device_serial_interface::device_timer(timer, id, param, ptr);
+ break;
}
}
diff --git a/src/devices/bus/rs232/printer.cpp b/src/devices/bus/rs232/printer.cpp
index 14df26f2203..82dc2530f5b 100644
--- a/src/devices/bus/rs232/printer.cpp
+++ b/src/devices/bus/rs232/printer.cpp
@@ -67,11 +67,6 @@ WRITE_LINE_MEMBER(serial_printer_device::printer_online)
/// TODO: ?
}
-void serial_printer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- device_serial_interface::device_timer(timer, id, param, ptr);
-}
-
void serial_printer_device::rcv_complete()
{
receive_register_extract();
diff --git a/src/devices/bus/rs232/printer.h b/src/devices/bus/rs232/printer.h
index dba1c9401e2..099e3a33138 100644
--- a/src/devices/bus/rs232/printer.h
+++ b/src/devices/bus/rs232/printer.h
@@ -24,7 +24,6 @@ protected:
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void rcv_complete() override;
diff --git a/src/devices/bus/rs232/pty.cpp b/src/devices/bus/rs232/pty.cpp
index a324e532fb6..919b85b777b 100644
--- a/src/devices/bus/rs232/pty.cpp
+++ b/src/devices/bus/rs232/pty.cpp
@@ -90,7 +90,7 @@ void pseudo_terminal_device::device_timer(emu_timer &timer, device_timer_id id,
break;
default:
- device_serial_interface::device_timer(timer, id, param, ptr);
+ break;
}
}
diff --git a/src/devices/bus/rs232/rs232.h b/src/devices/bus/rs232/rs232.h
index 395bf2b72cc..b062d35ff5b 100644
--- a/src/devices/bus/rs232/rs232.h
+++ b/src/devices/bus/rs232/rs232.h
@@ -276,15 +276,12 @@ protected:
virtual void device_start() override
{
- device_buffered_serial_interface<FIFO_LENGTH>::register_save_state(machine().save(), this);
}
virtual void tra_callback() override
{
output_rxd(this->transmit_register_get_data_bit());
}
-
- using device_buffered_serial_interface<FIFO_LENGTH>::device_timer;
};
DECLARE_DEVICE_TYPE(RS232_PORT, rs232_port_device)
diff --git a/src/devices/bus/rs232/ser_mouse.cpp b/src/devices/bus/rs232/ser_mouse.cpp
index d84f9a4d5f3..2c80fc43ef5 100644
--- a/src/devices/bus/rs232/ser_mouse.cpp
+++ b/src/devices/bus/rs232/ser_mouse.cpp
@@ -86,46 +86,42 @@ void serial_mouse_device::tra_callback()
**************************************************************************/
void serial_mouse_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- if (id)
+ if (!id)
{
- device_serial_interface::device_timer(timer, id, param, ptr);
- return;
+ static int ox = 0, oy = 0;
+ int nx,ny;
+ int dx, dy, nb;
+ int mbc;
+
+ /* Do not get deltas or send packets if queue is not empty (Prevents drifting) */
+ if (m_head==m_tail)
+ {
+ nx = m_x->read();
+
+ dx = nx - ox;
+ if (dx<=-0x800) dx = nx + 0x1000 - ox; /* Prevent jumping */
+ if (dx>=0x800) dx = nx - 0x1000 - ox;
+ ox = nx;
+
+ ny = m_y->read();
+
+ dy = ny - oy;
+ if (dy<=-0x800) dy = ny + 0x1000 - oy;
+ if (dy>=0x800) dy = ny - 0x1000 - oy;
+ oy = ny;
+
+ nb = m_btn->read();
+ mbc = nb^m_mb;
+ m_mb = nb;
+
+ /* check if there is any delta or mouse buttons changed */
+ if ( (dx!=0) || (dy!=0) || (mbc!=0) )
+ mouse_trans(dx, dy, nb, mbc);
+ }
+
+ if(m_tail != m_head && is_transmit_register_empty())
+ transmit_register_setup(unqueue_data());
}
-
- static int ox = 0, oy = 0;
- int nx,ny;
- int dx, dy, nb;
- int mbc;
-
- /* Do not get deltas or send packets if queue is not empty (Prevents drifting) */
- if (m_head==m_tail)
- {
- nx = m_x->read();
-
- dx = nx - ox;
- if (dx<=-0x800) dx = nx + 0x1000 - ox; /* Prevent jumping */
- if (dx>=0x800) dx = nx - 0x1000 - ox;
- ox = nx;
-
- ny = m_y->read();
-
- dy = ny - oy;
- if (dy<=-0x800) dy = ny + 0x1000 - oy;
- if (dy>=0x800) dy = ny - 0x1000 - oy;
- oy = ny;
-
- nb = m_btn->read();
- mbc = nb^m_mb;
- m_mb = nb;
-
- /* check if there is any delta or mouse buttons changed */
- if ( (dx!=0) || (dy!=0) || (mbc!=0) )
- mouse_trans(dx, dy, nb, mbc);
- }
-
-
- if(m_tail != m_head && is_transmit_register_empty())
- transmit_register_setup(unqueue_data());
}
void microsoft_mouse_device::mouse_trans(int dx, int dy, int nb, int mbc)
diff --git a/src/devices/bus/rs232/terminal.cpp b/src/devices/bus/rs232/terminal.cpp
index 6d28eee7a0b..5a638a6c8db 100644
--- a/src/devices/bus/rs232/terminal.cpp
+++ b/src/devices/bus/rs232/terminal.cpp
@@ -32,12 +32,6 @@ ioport_constructor serial_terminal_device::device_input_ports() const
return INPUT_PORTS_NAME(serial_terminal);
}
-void serial_terminal_device::device_start()
-{
- generic_terminal_device::device_start();
- device_buffered_serial_interface::register_save_state(machine().save(), this);
-}
-
WRITE_LINE_MEMBER(serial_terminal_device::update_serial)
{
clear_fifo();
@@ -72,12 +66,6 @@ void serial_terminal_device::device_reset()
update_serial(0);
}
-void serial_terminal_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- generic_terminal_device::device_timer(timer, id, param, ptr);
- device_buffered_serial_interface::device_timer(timer, id, param, ptr);
-}
-
void serial_terminal_device::send_key(uint8_t code)
{
transmit_byte(code);
diff --git a/src/devices/bus/rs232/terminal.h b/src/devices/bus/rs232/terminal.h
index e58b882a96d..727b3122583 100644
--- a/src/devices/bus/rs232/terminal.h
+++ b/src/devices/bus/rs232/terminal.h
@@ -20,9 +20,7 @@ public:
protected:
virtual ioport_constructor device_input_ports() const override;
- virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void tra_callback() override;
virtual void send_key(uint8_t code) override;
diff --git a/src/devices/bus/rs232/xvd701.cpp b/src/devices/bus/rs232/xvd701.cpp
index 96c5ad4b01d..f9c7e0f7cbe 100644
--- a/src/devices/bus/rs232/xvd701.cpp
+++ b/src/devices/bus/rs232/xvd701.cpp
@@ -65,7 +65,7 @@ void jvc_xvd701_device::device_timer(emu_timer &timer, device_timer_id id, int p
break;
default:
- device_serial_interface::device_timer(timer, id, param, ptr);
+ break;
}
}
diff --git a/src/devices/bus/snes_ctrl/miracle.cpp b/src/devices/bus/snes_ctrl/miracle.cpp
index f31eee7d848..1a4c7dc1423 100644
--- a/src/devices/bus/snes_ctrl/miracle.cpp
+++ b/src/devices/bus/snes_ctrl/miracle.cpp
@@ -41,10 +41,6 @@ void snes_miracle_device::device_timer(emu_timer &timer, device_timer_id id, int
{
m_strobe_clock++;
}
- else
- {
- device_serial_interface::device_timer(timer, id, param, ptr);
- }
}
//**************************************************************************
diff --git a/src/devices/bus/sunkbd/hlekbd.cpp b/src/devices/bus/sunkbd/hlekbd.cpp
index 1820e3aa626..60abf1e0c4b 100644
--- a/src/devices/bus/sunkbd/hlekbd.cpp
+++ b/src/devices/bus/sunkbd/hlekbd.cpp
@@ -802,8 +802,6 @@ MACHINE_CONFIG_END
void hle_device_base::device_start()
{
- device_buffered_serial_interface::register_save_state(machine().save(), this);
-
m_click_timer = timer_alloc(CLICK_TIMER_ID);
save_item(NAME(m_make_count));
@@ -874,8 +872,7 @@ void hle_device_base::device_timer(emu_timer &timer, device_timer_id id, int par
break;
default:
- device_matrix_keyboard_interface::device_timer(timer, id, param, ptr);
- device_buffered_serial_interface::device_timer(timer, id, param, ptr);
+ break;
}
}
diff --git a/src/devices/bus/sunkbd/hlekbd.h b/src/devices/bus/sunkbd/hlekbd.h
index 7cb931b0fda..c2dbf17f67e 100644
--- a/src/devices/bus/sunkbd/hlekbd.h
+++ b/src/devices/bus/sunkbd/hlekbd.h
@@ -52,8 +52,6 @@ protected:
required_ioport m_dips;
private:
- // device_serial_interface uses 10'000 range
- // device_matrix_keyboard_interface uses 20'000 range
enum {
CLICK_TIMER_ID = 30'000
};
diff --git a/src/devices/bus/ti8x/graphlinkhle.cpp b/src/devices/bus/ti8x/graphlinkhle.cpp
index 8a77ff826ff..40fff88b681 100644
--- a/src/devices/bus/ti8x/graphlinkhle.cpp
+++ b/src/devices/bus/ti8x/graphlinkhle.cpp
@@ -30,8 +30,6 @@ graph_link_hle_device::graph_link_hle_device(
void graph_link_hle_device::device_start()
{
- device_serial_interface::register_save_state(machine().save(), this);
-
m_buffer = std::make_unique<u8 []>(BUFLEN);
save_pointer(NAME(m_buffer.get()), BUFLEN);
@@ -51,13 +49,6 @@ void graph_link_hle_device::device_reset()
}
-void graph_link_hle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- device_ti8x_link_port_byte_interface::device_timer(timer, id, param, ptr);
- device_serial_interface::device_timer(timer, id, param, ptr);
-}
-
-
MACHINE_CONFIG_MEMBER(graph_link_hle_device::device_add_mconfig)
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(graph_link_hle_device, rx_w))
diff --git a/src/devices/bus/ti8x/graphlinkhle.h b/src/devices/bus/ti8x/graphlinkhle.h
index 5e574374cab..55f8a838cfe 100644
--- a/src/devices/bus/ti8x/graphlinkhle.h
+++ b/src/devices/bus/ti8x/graphlinkhle.h
@@ -37,7 +37,6 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void byte_collision() override;
virtual void byte_send_timeout() override;
diff --git a/src/devices/bus/ti8x/ti8x.cpp b/src/devices/bus/ti8x/ti8x.cpp
index 528b1dc6c39..e998ded593c 100644
--- a/src/devices/bus/ti8x/ti8x.cpp
+++ b/src/devices/bus/ti8x/ti8x.cpp
@@ -120,16 +120,23 @@ void device_ti8x_link_port_bit_interface::interface_pre_start()
{
device_ti8x_link_port_interface::interface_pre_start();
- m_error_timer = device().timer_alloc(TIMER_ID_BIT_TIMEOUT);
+ if (!m_error_timer)
+ m_error_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_ti8x_link_port_bit_interface::bit_timeout), this));
+
+ m_bit_phase = IDLE;
+ m_tx_bit_buffer = EMPTY;
+ m_tip_in = m_ring_in = true;
+}
+
+
+void device_ti8x_link_port_bit_interface::interface_post_start()
+{
+ device_ti8x_link_port_interface::interface_post_start();
device().save_item(NAME(m_bit_phase));
device().save_item(NAME(m_tx_bit_buffer));
device().save_item(NAME(m_tip_in));
device().save_item(NAME(m_ring_in));
-
- m_bit_phase = IDLE;
- m_tx_bit_buffer = EMPTY;
- m_tip_in = m_ring_in = true;
}
@@ -146,66 +153,6 @@ void device_ti8x_link_port_bit_interface::interface_pre_reset()
}
-void device_ti8x_link_port_bit_interface::device_timer(
- emu_timer &timer,
- device_timer_id id,
- int param, void *ptr)
-{
- switch (id)
- {
- case TIMER_ID_BIT_TIMEOUT:
- switch (m_bit_phase)
- {
- // something very bad happened (heap smash?)
- case IDLE:
- case HOLD_0:
- case HOLD_1:
- default:
- throw false;
-
- // receive timeout
- case ACK_0:
- case ACK_1:
- LOGBITPROTO("timeout acknowledging %d bit\n", (ACK_0 == m_bit_phase) ? 0 : 1);
- output_tip(1);
- output_ring(1);
- if (m_tip_in && m_ring_in)
- {
- check_tx_bit_buffer();
- }
- else
- {
- LOGBITPROTO("waiting for bus idle\n");
- m_error_timer->reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout
- m_bit_phase = WAIT_IDLE;
- }
- bit_receive_timeout();
- break;
-
- // send timeout:
- case WAIT_IDLE:
- assert(EMPTY != m_tx_bit_buffer);
- case WAIT_ACK_0:
- case WAIT_ACK_1:
- case WAIT_REL_0:
- case WAIT_REL_1:
- LOGBITPROTO("timeout sending bit\n");
- m_error_timer->reset();
- m_bit_phase = (m_tip_in && m_ring_in) ? IDLE : WAIT_IDLE;
- m_tx_bit_buffer = EMPTY;
- output_tip(1);
- output_ring(1);
- bit_send_timeout();
- break;
- }
- break;
-
- default:
- break;
- }
-}
-
-
void device_ti8x_link_port_bit_interface::send_bit(bool data)
{
LOGBITPROTO("queue %d bit\n", data ? 1 : 0);
@@ -452,6 +399,55 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_ring)
}
+TIMER_CALLBACK_MEMBER(device_ti8x_link_port_bit_interface::bit_timeout)
+{
+ switch (m_bit_phase)
+ {
+ // something very bad happened (heap smash?)
+ case IDLE:
+ case HOLD_0:
+ case HOLD_1:
+ default:
+ throw false;
+
+ // receive timeout
+ case ACK_0:
+ case ACK_1:
+ LOGBITPROTO("timeout acknowledging %d bit\n", (ACK_0 == m_bit_phase) ? 0 : 1);
+ output_tip(1);
+ output_ring(1);
+ if (m_tip_in && m_ring_in)
+ {
+ check_tx_bit_buffer();
+ }
+ else
+ {
+ LOGBITPROTO("waiting for bus idle\n");
+ m_error_timer->reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout
+ m_bit_phase = WAIT_IDLE;
+ }
+ bit_receive_timeout();
+ break;
+
+ // send timeout:
+ case WAIT_IDLE:
+ assert(EMPTY != m_tx_bit_buffer);
+ case WAIT_ACK_0:
+ case WAIT_ACK_1:
+ case WAIT_REL_0:
+ case WAIT_REL_1:
+ LOGBITPROTO("timeout sending bit\n");
+ m_error_timer->reset();
+ m_bit_phase = (m_tip_in && m_ring_in) ? IDLE : WAIT_IDLE;
+ m_tx_bit_buffer = EMPTY;
+ output_tip(1);
+ output_ring(1);
+ bit_send_timeout();
+ break;
+ }
+}
+
+
void device_ti8x_link_port_bit_interface::check_tx_bit_buffer()
{
assert(m_tip_in);
@@ -506,10 +502,16 @@ void device_ti8x_link_port_byte_interface::interface_pre_start()
{
device_ti8x_link_port_bit_interface::interface_pre_start();
+ m_tx_byte_buffer = m_rx_byte_buffer = 0U;
+}
+
+
+void device_ti8x_link_port_byte_interface::interface_post_start()
+{
+ device_ti8x_link_port_bit_interface::interface_post_start();
+
device().save_item(NAME(m_tx_byte_buffer));
device().save_item(NAME(m_rx_byte_buffer));
-
- m_tx_byte_buffer = m_rx_byte_buffer = 0U;
}
diff --git a/src/devices/bus/ti8x/ti8x.h b/src/devices/bus/ti8x/ti8x.h
index 5a21a4abc17..67ddad75747 100644
--- a/src/devices/bus/ti8x/ti8x.h
+++ b/src/devices/bus/ti8x/ti8x.h
@@ -125,19 +125,13 @@ protected:
device_ti8x_link_port_bit_interface(machine_config const &mconfig, device_t &device);
virtual void interface_pre_start() override;
+ virtual void interface_post_start() override;
virtual void interface_pre_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
-
void send_bit(bool data);
void accept_bit();
private:
- enum
- {
- TIMER_ID_BIT_TIMEOUT = 20000 // ensure this doesn't clash with device_serial_interface
- };
-
enum bit_phase
{
IDLE,
@@ -168,6 +162,8 @@ private:
virtual void bit_sent() = 0;
virtual void bit_received(bool data) = 0;
+ TIMER_CALLBACK_MEMBER(bit_timeout);
+
void check_tx_bit_buffer();
emu_timer * m_error_timer;
@@ -183,6 +179,7 @@ protected:
device_ti8x_link_port_byte_interface(machine_config const &mconfig, device_t &device);
virtual void interface_pre_start() override;
+ virtual void interface_post_start() override;
virtual void interface_pre_reset() override;
void send_byte(u8 data);