Previous 199869 Revisions Next

r28714 Wednesday 19th March, 2014 at 12:51:26 UTC by Curt Coder
(MESS) esqpanel: devcb2. (nw)
[src/mess/drivers]esq1.c esq5505.c esqkt.c
[src/mess/machine]esqpanel.c esqpanel.h

trunk/src/mess/drivers/esq5505.c
r28713r28714
624624   DEVCB_DRIVER_MEMBER16(esq5505_state, analog_r) /* ADC */
625625};
626626
627static 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
633627static MACHINE_CONFIG_START( vfx, esq5505_state )
634628   MCFG_CPU_ADD("maincpu", M68000, XTAL_10MHz)
635629   MCFG_CPU_PROGRAM_MAP(vfx_map)
r28713r28714
637631   MCFG_CPU_ADD("esp", ES5510, XTAL_10MHz)
638632   MCFG_DEVICE_DISABLE()
639633
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))
641637
642638   MCFG_MC68681_ADD("duart", 4000000)
643639   MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esq5505_state, duart_irq_handler))
r28713r28714
674670   MCFG_CPU_PROGRAM_MAP(eps_map)
675671
676672   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))
678676
679677   MCFG_WD1772x_ADD("wd1772", 8000000)
680678   MCFG_FLOPPY_DRIVE_ADD("wd1772:0", ensoniq_floppies, "35dd", esq5505_state::floppy_formats)
r28713r28714
698696   MCFG_CPU_ADD("esp", ES5510, XTAL_10MHz)
699697   MCFG_DEVICE_DISABLE()
700698
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))
702702
703703   MCFG_MC68681_ADD("duart", 4000000)
704704   MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esq5505_state, duart_irq_handler))
r28713r28714
738738   MCFG_CPU_PROGRAM_MAP(sq1_map)
739739
740740   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))
742744MACHINE_CONFIG_END
743745
744746static INPUT_PORTS_START( vfx )
trunk/src/mess/drivers/esq1.c
r28713r28714
576576   }
577577}
578578
579static const esqpanel_interface esqpanel_config =
580{
581   DEVCB_DEVICE_LINE_MEMBER("duart", mc68681_device, rx_b_w)
582};
583
584579static MACHINE_CONFIG_START( esq1, esq1_state )
585580   MCFG_CPU_ADD("maincpu", M6809E, 4000000)    // how fast is it?
586581   MCFG_CPU_PROGRAM_MAP(esq1_map)
r28713r28714
592587   MCFG_MC68681_B_TX_CALLBACK(WRITELINE(esq1_state, duart_tx_b))
593588   MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(esq1_state, duart_output))
594589
595   MCFG_ESQPANEL2x40_ADD("panel", esqpanel_config)
590   MCFG_ESQPANEL2x40_ADD("panel")
591   MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w))
596592
597593   MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin")
598594   MCFG_MIDI_RX_HANDLER(DEVWRITELINE("duart", mc68681_device, rx_a_w)) // route MIDI Tx send directly to 68681 channel A Rx
trunk/src/mess/drivers/esqkt.c
r28713r28714
207207   DEVCB_NULL
208208};
209209
210static const esqpanel_interface esqpanel_config =
211{
212   DEVCB_DEVICE_LINE_MEMBER("duart", mc68681_device, rx_b_w)
213};
214
215210static MACHINE_CONFIG_START( kt, esqkt_state )
216211   MCFG_CPU_ADD("maincpu", M68EC020, XTAL_16MHz)
217212   MCFG_CPU_PROGRAM_MAP(kt_map)
r28713r28714
219214   MCFG_CPU_ADD("esp", ES5510, XTAL_10MHz)
220215   MCFG_DEVICE_DISABLE()
221216
222   MCFG_ESQPANEL2x40_SQ1_ADD("sq1panel", esqpanel_config)
217   MCFG_ESQPANEL2x40_SQ1_ADD("sq1panel")
218   MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w))
223219
224220   MCFG_MC68681_ADD("duart", 4000000)
225221   MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esqkt_state, duart_irq_handler))
trunk/src/mess/machine/esqpanel.c
r28713r28714
2626
2727esqpanel_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) :
2828   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)
3032{
3133}
3234
33void 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}
4835
4936//-------------------------------------------------
5037//  device_start - device-specific startup
r28713r28714
5239
5340void esqpanel_device::device_start()
5441{
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();
5744}
5845
5946
r28713r28714
180167
181168void esqpanel_device::tra_callback()    // Tx send bit
182169{
183   m_out_tx_func(transmit_register_get_data_bit());
170   m_write_tx(transmit_register_get_data_bit());
184171}
185172
186173void esqpanel_device::xmit_char(UINT8 data)
r28713r28714
206193
207194void esqpanel_device::set_analog_value(offs_t offset, UINT16 value)
208195{
209   if (!m_analog_value_func.isnull())
210   {
211      m_analog_value_func(offset, value);
212   }
196   m_write_analog(offset, value);
213197}
214198
215199/* panel with 1x22 VFD display used in the EPS-16 and EPS-16 Plus */
trunk/src/mess/machine/esqpanel.h
r28713r28714
1010//  INTERFACE CONFIGURATION MACROS
1111//**************************************************************************
1212
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)
1615
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)
2018
2119#define MCFG_ESQPANEL1x22_REMOVE(_tag) \
2220   MCFG_DEVICE_REMOVE(_tag)
2321
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)
2724
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)
3127
3228#define MCFG_ESQPANEL_2x40_REMOVE(_tag) \
3329   MCFG_DEVICE_REMOVE(_tag)
3430
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)
3833
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)
4236
4337#define MCFG_ESQPANEL2x40_SQ1_REMOVE(_tag) \
4438   MCFG_DEVICE_REMOVE(_tag)
4539
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
4646//**************************************************************************
4747//  TYPE DEFINITIONS
4848//**************************************************************************
4949
50struct esqpanel_interface
51{
52   devcb_write_line    m_out_tx_cb;
53   devcb_write16       m_analog_value_cb;
54};
55
5650// ======================> esqpanel_device
5751
58class esqpanel_device :  public device_t, public device_serial_interface, public esqpanel_interface
52class esqpanel_device :  public device_t, public device_serial_interface
5953{
6054public:
6155   // construction/destruction
6256   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);
6357
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
6461   virtual void send_to_display(UINT8 data) = 0;
6562
6663   void xmit_char(UINT8 data);
r28713r28714
7067   // device-level overrides
7168   virtual void device_start();
7269   virtual void device_reset();
73   virtual void device_config_complete();
7470   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
7571
7672   // serial overrides
r28713r28714
8682   bool  m_bCalibSecondByte;
8783   bool  m_bButtonLightSecondByte;
8884
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;
9187   UINT8 m_xmitring[XMIT_RING_SIZE];
9288   int m_xmit_read, m_xmit_write;
9389   bool m_tx_busy;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team