trunk/src/mess/drivers/esq5505.c
| r28713 | r28714 | |
| 624 | 624 | DEVCB_DRIVER_MEMBER16(esq5505_state, analog_r) /* ADC */ |
| 625 | 625 | }; |
| 626 | 626 | |
| 627 | | static const esqpanel_interface esqpanel_config = |
| 628 | | { |
| 629 | | DEVCB_DEVICE_LINE_MEMBER("duart", mc68681_device, rx_b_w), |
| 630 | | DEVCB_DRIVER_MEMBER16(esq5505_state, analog_w) |
| 631 | | }; |
| 632 | | |
| 633 | 627 | static MACHINE_CONFIG_START( vfx, esq5505_state ) |
| 634 | 628 | MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz) |
| 635 | 629 | MCFG_CPU_PROGRAM_MAP(vfx_map) |
| r28713 | r28714 | |
| 637 | 631 | MCFG_CPU_ADD("esp", ES5510, XTAL_10MHz) |
| 638 | 632 | MCFG_DEVICE_DISABLE() |
| 639 | 633 | |
| 640 | | MCFG_ESQPANEL2x40_ADD("panel", esqpanel_config) |
| 634 | MCFG_ESQPANEL2x40_ADD("panel") |
| 635 | MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) |
| 636 | MCFG_ESQPANEL_ANALOG_CALLBACK(WRITE16(esq5505_state, analog_w)) |
| 641 | 637 | |
| 642 | 638 | MCFG_MC68681_ADD("duart", 4000000) |
| 643 | 639 | MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esq5505_state, duart_irq_handler)) |
| r28713 | r28714 | |
| 674 | 670 | MCFG_CPU_PROGRAM_MAP(eps_map) |
| 675 | 671 | |
| 676 | 672 | MCFG_ESQPANEL_2x40_REMOVE("panel") |
| 677 | | MCFG_ESQPANEL1x22_ADD("panel", esqpanel_config) |
| 673 | MCFG_ESQPANEL1x22_ADD("panel") |
| 674 | MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) |
| 675 | MCFG_ESQPANEL_ANALOG_CALLBACK(WRITE16(esq5505_state, analog_w)) |
| 678 | 676 | |
| 679 | 677 | MCFG_WD1772x_ADD("wd1772", 8000000) |
| 680 | 678 | MCFG_FLOPPY_DRIVE_ADD("wd1772:0", ensoniq_floppies, "35dd", esq5505_state::floppy_formats) |
| r28713 | r28714 | |
| 698 | 696 | MCFG_CPU_ADD("esp", ES5510, XTAL_10MHz) |
| 699 | 697 | MCFG_DEVICE_DISABLE() |
| 700 | 698 | |
| 701 | | MCFG_ESQPANEL2x40_ADD("panel", esqpanel_config) |
| 699 | MCFG_ESQPANEL2x40_ADD("panel") |
| 700 | MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) |
| 701 | MCFG_ESQPANEL_ANALOG_CALLBACK(WRITE16(esq5505_state, analog_w)) |
| 702 | 702 | |
| 703 | 703 | MCFG_MC68681_ADD("duart", 4000000) |
| 704 | 704 | MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esq5505_state, duart_irq_handler)) |
| r28713 | r28714 | |
| 738 | 738 | MCFG_CPU_PROGRAM_MAP(sq1_map) |
| 739 | 739 | |
| 740 | 740 | MCFG_ESQPANEL_2x40_REMOVE("panel") |
| 741 | | MCFG_ESQPANEL2x40_SQ1_ADD("panel", esqpanel_config) |
| 741 | MCFG_ESQPANEL2x40_SQ1_ADD("panel") |
| 742 | MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) |
| 743 | MCFG_ESQPANEL_ANALOG_CALLBACK(WRITE16(esq5505_state, analog_w)) |
| 742 | 744 | MACHINE_CONFIG_END |
| 743 | 745 | |
| 744 | 746 | static INPUT_PORTS_START( vfx ) |
trunk/src/mess/drivers/esq1.c
| r28713 | r28714 | |
| 576 | 576 | } |
| 577 | 577 | } |
| 578 | 578 | |
| 579 | | static const esqpanel_interface esqpanel_config = |
| 580 | | { |
| 581 | | DEVCB_DEVICE_LINE_MEMBER("duart", mc68681_device, rx_b_w) |
| 582 | | }; |
| 583 | | |
| 584 | 579 | static MACHINE_CONFIG_START( esq1, esq1_state ) |
| 585 | 580 | MCFG_CPU_ADD("maincpu", M6809E, 4000000) // how fast is it? |
| 586 | 581 | MCFG_CPU_PROGRAM_MAP(esq1_map) |
| r28713 | r28714 | |
| 592 | 587 | MCFG_MC68681_B_TX_CALLBACK(WRITELINE(esq1_state, duart_tx_b)) |
| 593 | 588 | MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(esq1_state, duart_output)) |
| 594 | 589 | |
| 595 | | MCFG_ESQPANEL2x40_ADD("panel", esqpanel_config) |
| 590 | MCFG_ESQPANEL2x40_ADD("panel") |
| 591 | MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) |
| 596 | 592 | |
| 597 | 593 | MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin") |
| 598 | 594 | MCFG_MIDI_RX_HANDLER(DEVWRITELINE("duart", mc68681_device, rx_a_w)) // route MIDI Tx send directly to 68681 channel A Rx |
trunk/src/mess/machine/esqpanel.c
| r28713 | r28714 | |
| 26 | 26 | |
| 27 | 27 | esqpanel_device::esqpanel_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : |
| 28 | 28 | device_t(mconfig, type, name, tag, owner, clock, shortname, source), |
| 29 | | device_serial_interface(mconfig, *this) |
| 29 | device_serial_interface(mconfig, *this), |
| 30 | m_write_tx(*this), |
| 31 | m_write_analog(*this) |
| 30 | 32 | { |
| 31 | 33 | } |
| 32 | 34 | |
| 33 | | void esqpanel_device::device_config_complete() |
| 34 | | { |
| 35 | | // inherit a copy of the static data |
| 36 | | const esqpanel_interface *intf = reinterpret_cast<const esqpanel_interface *>(static_config()); |
| 37 | | if (intf != NULL) |
| 38 | | { |
| 39 | | *static_cast<esqpanel_interface *>(this) = *intf; |
| 40 | | } |
| 41 | | // or initialize to defaults if none provided |
| 42 | | else |
| 43 | | { |
| 44 | | memset(&m_out_tx_cb, 0, sizeof(m_out_tx_cb)); |
| 45 | | memset(&m_analog_value_cb, 0, sizeof(m_analog_value_cb)); |
| 46 | | } |
| 47 | | } |
| 48 | 35 | |
| 49 | 36 | //------------------------------------------------- |
| 50 | 37 | // device_start - device-specific startup |
| r28713 | r28714 | |
| 52 | 39 | |
| 53 | 40 | void esqpanel_device::device_start() |
| 54 | 41 | { |
| 55 | | m_out_tx_func.resolve(m_out_tx_cb, *this); |
| 56 | | m_analog_value_func.resolve(m_analog_value_cb, *this); |
| 42 | m_write_tx.resolve_safe(); |
| 43 | m_write_analog.resolve_safe(); |
| 57 | 44 | } |
| 58 | 45 | |
| 59 | 46 | |
| r28713 | r28714 | |
| 180 | 167 | |
| 181 | 168 | void esqpanel_device::tra_callback() // Tx send bit |
| 182 | 169 | { |
| 183 | | m_out_tx_func(transmit_register_get_data_bit()); |
| 170 | m_write_tx(transmit_register_get_data_bit()); |
| 184 | 171 | } |
| 185 | 172 | |
| 186 | 173 | void esqpanel_device::xmit_char(UINT8 data) |
| r28713 | r28714 | |
| 206 | 193 | |
| 207 | 194 | void esqpanel_device::set_analog_value(offs_t offset, UINT16 value) |
| 208 | 195 | { |
| 209 | | if (!m_analog_value_func.isnull()) |
| 210 | | { |
| 211 | | m_analog_value_func(offset, value); |
| 212 | | } |
| 196 | m_write_analog(offset, value); |
| 213 | 197 | } |
| 214 | 198 | |
| 215 | 199 | /* panel with 1x22 VFD display used in the EPS-16 and EPS-16 Plus */ |
trunk/src/mess/machine/esqpanel.h
| r28713 | r28714 | |
| 10 | 10 | // INTERFACE CONFIGURATION MACROS |
| 11 | 11 | //************************************************************************** |
| 12 | 12 | |
| 13 | | #define MCFG_ESQPANEL1x22_ADD(_tag, _config) \ |
| 14 | | MCFG_DEVICE_ADD(_tag, ESQPANEL1x22, 0) \ |
| 15 | | MCFG_DEVICE_CONFIG(_config) |
| 13 | #define MCFG_ESQPANEL1x22_ADD(_tag) \ |
| 14 | MCFG_DEVICE_ADD(_tag, ESQPANEL1x22, 0) |
| 16 | 15 | |
| 17 | | #define MCFG_ESQPANEL1x22_REPLACE(_tag, _config) \ |
| 18 | | MCFG_DEVICE_REPLACE(_tag, ESQPANEL1x22, 0) \ |
| 19 | | MCFG_DEVICE_CONFIG(_config) |
| 16 | #define MCFG_ESQPANEL1x22_REPLACE(_tag) \ |
| 17 | MCFG_DEVICE_REPLACE(_tag, ESQPANEL1x22, 0) |
| 20 | 18 | |
| 21 | 19 | #define MCFG_ESQPANEL1x22_REMOVE(_tag) \ |
| 22 | 20 | MCFG_DEVICE_REMOVE(_tag) |
| 23 | 21 | |
| 24 | | #define MCFG_ESQPANEL2x40_ADD(_tag, _config) \ |
| 25 | | MCFG_DEVICE_ADD(_tag, ESQPANEL2x40, 0) \ |
| 26 | | MCFG_DEVICE_CONFIG(_config) |
| 22 | #define MCFG_ESQPANEL2x40_ADD(_tag) \ |
| 23 | MCFG_DEVICE_ADD(_tag, ESQPANEL2x40, 0) |
| 27 | 24 | |
| 28 | | #define MCFG_ESQPANEL2x40_REPLACE(_tag, _config) \ |
| 29 | | MCFG_DEVICE_REPLACE(_tag, ESQPANEL2x40, 0) \ |
| 30 | | MCFG_DEVICE_CONFIG(_config) |
| 25 | #define MCFG_ESQPANEL2x40_REPLACE(_tag) \ |
| 26 | MCFG_DEVICE_REPLACE(_tag, ESQPANEL2x40, 0) |
| 31 | 27 | |
| 32 | 28 | #define MCFG_ESQPANEL_2x40_REMOVE(_tag) \ |
| 33 | 29 | MCFG_DEVICE_REMOVE(_tag) |
| 34 | 30 | |
| 35 | | #define MCFG_ESQPANEL2x40_SQ1_ADD(_tag, _config) \ |
| 36 | | MCFG_DEVICE_ADD(_tag, ESQPANEL2x40_SQ1, 0) \ |
| 37 | | MCFG_DEVICE_CONFIG(_config) |
| 31 | #define MCFG_ESQPANEL2x40_SQ1_ADD(_tag) \ |
| 32 | MCFG_DEVICE_ADD(_tag, ESQPANEL2x40_SQ1, 0) |
| 38 | 33 | |
| 39 | | #define MCFG_ESQPANEL2x40_SQ1_REPLACE(_tag, _config) \ |
| 40 | | MCFG_DEVICE_REPLACE(_tag, ESQPANEL2x40_SQ1, 0) \ |
| 41 | | MCFG_DEVICE_CONFIG(_config) |
| 34 | #define MCFG_ESQPANEL2x40_SQ1_REPLACE(_tag) \ |
| 35 | MCFG_DEVICE_REPLACE(_tag, ESQPANEL2x40_SQ1, 0) |
| 42 | 36 | |
| 43 | 37 | #define MCFG_ESQPANEL2x40_SQ1_REMOVE(_tag) \ |
| 44 | 38 | MCFG_DEVICE_REMOVE(_tag) |
| 45 | 39 | |
| 40 | #define MCFG_ESQPANEL_TX_CALLBACK(_write) \ |
| 41 | devcb = &esqpanel_device::set_tx_wr_callback(*device, DEVCB2_##_write); |
| 42 | |
| 43 | #define MCFG_ESQPANEL_ANALOG_CALLBACK(_write) \ |
| 44 | devcb = &esqpanel_device::set_analog_wr_callback(*device, DEVCB2_##_write); |
| 45 | |
| 46 | 46 | //************************************************************************** |
| 47 | 47 | // TYPE DEFINITIONS |
| 48 | 48 | //************************************************************************** |
| 49 | 49 | |
| 50 | | struct esqpanel_interface |
| 51 | | { |
| 52 | | devcb_write_line m_out_tx_cb; |
| 53 | | devcb_write16 m_analog_value_cb; |
| 54 | | }; |
| 55 | | |
| 56 | 50 | // ======================> esqpanel_device |
| 57 | 51 | |
| 58 | | class esqpanel_device : public device_t, public device_serial_interface, public esqpanel_interface |
| 52 | class esqpanel_device : public device_t, public device_serial_interface |
| 59 | 53 | { |
| 60 | 54 | public: |
| 61 | 55 | // construction/destruction |
| 62 | 56 | esqpanel_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); |
| 63 | 57 | |
| 58 | template<class _Object> static devcb2_base &set_tx_wr_callback(device_t &device, _Object object) { return downcast<esqpanel_device &>(device).m_write_tx.set_callback(object); } |
| 59 | template<class _Object> static devcb2_base &set_analog_wr_callback(device_t &device, _Object object) { return downcast<esqpanel_device &>(device).m_write_analog.set_callback(object); } |
| 60 | |
| 64 | 61 | virtual void send_to_display(UINT8 data) = 0; |
| 65 | 62 | |
| 66 | 63 | void xmit_char(UINT8 data); |
| r28713 | r28714 | |
| 70 | 67 | // device-level overrides |
| 71 | 68 | virtual void device_start(); |
| 72 | 69 | virtual void device_reset(); |
| 73 | | virtual void device_config_complete(); |
| 74 | 70 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 75 | 71 | |
| 76 | 72 | // serial overrides |
| r28713 | r28714 | |
| 86 | 82 | bool m_bCalibSecondByte; |
| 87 | 83 | bool m_bButtonLightSecondByte; |
| 88 | 84 | |
| 89 | | devcb_resolved_write_line m_out_tx_func; |
| 90 | | devcb_resolved_write16 m_analog_value_func; |
| 85 | devcb2_write_line m_write_tx; |
| 86 | devcb2_write16 m_write_analog; |
| 91 | 87 | UINT8 m_xmitring[XMIT_RING_SIZE]; |
| 92 | 88 | int m_xmit_read, m_xmit_write; |
| 93 | 89 | bool m_tx_busy; |