trunk/src/emu/bus/midi/midiinport.c
| r29535 | r29536 | |
| 17 | 17 | { |
| 18 | 18 | } |
| 19 | 19 | |
| 20 | | static midiin_config midiin_port_image_config = |
| 21 | | { |
| 22 | | DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midiin_port_device, read) |
| 23 | | }; |
| 24 | | |
| 25 | 20 | static MACHINE_CONFIG_FRAGMENT(midiin_port_config) |
| 26 | | MCFG_MIDIIN_ADD("midiinimg", midiin_port_image_config) |
| 21 | MCFG_DEVICE_ADD("midiinimg", MIDIIN, 0) |
| 22 | MCFG_MIDIIN_INPUT_CB(WRITELINE(midiin_port_device, read)) |
| 27 | 23 | MACHINE_CONFIG_END |
| 28 | 24 | |
| 29 | 25 | machine_config_constructor midiin_port_device::device_mconfig_additions() const |
trunk/src/emu/imagedev/midiin.h
| r29535 | r29536 | |
| 10 | 10 | #define __MIDIIN_H__ |
| 11 | 11 | |
| 12 | 12 | |
| 13 | | /*************************************************************************** |
| 14 | | CONSTANTS |
| 15 | | ***************************************************************************/ |
| 13 | #define MCFG_MIDIIN_INPUT_CB(_devcb) \ |
| 14 | devcb = &midiin_device::set_input_callback(*device, DEVCB2_##_devcb); |
| 16 | 15 | |
| 17 | | struct midiin_config |
| 18 | | { |
| 19 | | /* callback to driver */ |
| 20 | | devcb_write_line m_input_callback; |
| 21 | | }; |
| 22 | 16 | |
| 23 | | #define MCFG_MIDIIN_ADD(_tag, _config) \ |
| 24 | | MCFG_DEVICE_ADD(_tag, MIDIIN, 0) \ |
| 25 | | MCFG_DEVICE_CONFIG(_config) |
| 26 | | |
| 27 | | |
| 28 | 17 | /*************************************************************************** |
| 29 | 18 | TYPE DEFINITIONS |
| 30 | 19 | ***************************************************************************/ |
| 31 | 20 | |
| 32 | 21 | class midiin_device : public device_t, |
| 33 | 22 | public device_image_interface, |
| 34 | | public device_serial_interface, |
| 35 | | public midiin_config |
| 23 | public device_serial_interface |
| 36 | 24 | { |
| 37 | 25 | public: |
| 38 | 26 | // construction/destruction |
| 39 | 27 | midiin_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 40 | 28 | |
| 29 | template<class _Object> static devcb2_base &set_input_callback(device_t &device, _Object object) { return downcast<midiin_device &>(device).m_input_cb.set_callback(object); } |
| 30 | |
| 41 | 31 | // image-level overrides |
| 42 | 32 | virtual bool call_load(); |
| 43 | 33 | virtual void call_unload(); |
| r29535 | r29536 | |
| 72 | 62 | |
| 73 | 63 | osd_midi_device *m_midi; |
| 74 | 64 | emu_timer *m_timer; |
| 75 | | devcb_resolved_write_line m_input_func; |
| 65 | devcb2_write_line m_input_cb; |
| 76 | 66 | UINT8 m_xmitring[XMIT_RING_SIZE]; |
| 77 | 67 | int m_xmit_read, m_xmit_write; |
| 78 | 68 | bool m_tx_busy; |
trunk/src/emu/imagedev/midiin.c
| r29535 | r29536 | |
| 22 | 22 | midiin_device::midiin_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 23 | 23 | : device_t(mconfig, MIDIIN, "MIDI In image device", tag, owner, clock, "midiin", __FILE__), |
| 24 | 24 | device_image_interface(mconfig, *this), |
| 25 | | device_serial_interface(mconfig, *this) |
| 25 | device_serial_interface(mconfig, *this), |
| 26 | m_input_cb(*this) |
| 26 | 27 | { |
| 27 | 28 | } |
| 28 | 29 | |
| r29535 | r29536 | |
| 32 | 33 | |
| 33 | 34 | void midiin_device::device_start() |
| 34 | 35 | { |
| 35 | | m_input_func.resolve(m_input_callback, *this); |
| 36 | m_input_cb.resolve_safe(); |
| 36 | 37 | m_timer = timer_alloc(0); |
| 37 | 38 | m_midi = NULL; |
| 38 | 39 | m_timer->enable(false); |
| r29535 | r29536 | |
| 55 | 56 | |
| 56 | 57 | void midiin_device::device_config_complete(void) |
| 57 | 58 | { |
| 58 | | const midiin_config *intf = reinterpret_cast<const midiin_config *>(static_config()); |
| 59 | | if(intf != NULL) |
| 60 | | { |
| 61 | | *static_cast<midiin_config *>(this) = *intf; |
| 62 | | } |
| 63 | | else |
| 64 | | { |
| 65 | | memset(&m_input_callback, 0, sizeof(m_input_callback)); |
| 66 | | } |
| 67 | 59 | update_names(); |
| 68 | 60 | } |
| 69 | 61 | |
| r29535 | r29536 | |
| 152 | 144 | void midiin_device::tra_callback() |
| 153 | 145 | { |
| 154 | 146 | int bit = transmit_register_get_data_bit(); |
| 155 | | m_input_func(bit); |
| 147 | m_input_cb(bit); |
| 156 | 148 | } |
| 157 | 149 | |
| 158 | 150 | void midiin_device::xmit_char(UINT8 data) |