Previous 199869 Revisions Next

r29451 Tuesday 8th April, 2014 at 15:14:44 UTC by Osso
i8279_device: converted to devcb2 (nw)
[src/emu/machine]i8279.c i8279.h
[src/mame/drivers]icecold.c turbo.c
[src/mess/drivers]mmd1.c sdk85.c sdk86.c selz80.c

trunk/src/mame/drivers/icecold.c
r29450r29451
327327   }
328328}
329329
330static I8279_INTERFACE( icecold_i8279_intf )
331{
332   DEVCB_DEVICE_LINE_MEMBER("pia0", pia6821_device, cb1_w), // irq
333   DEVCB_DRIVER_MEMBER(icecold_state, scanlines_w),    // scan SL lines
334   DEVCB_DRIVER_MEMBER(icecold_state, digit_w),        // display A&B
335   DEVCB_NULL,                                         // BD
336   DEVCB_DRIVER_MEMBER(icecold_state, kbd_r),          // kbd RL lines
337   DEVCB_NULL,                                         // Shift key
338   DEVCB_NULL                                          // Ctrl-Strobe line
339};
340
341330static const ay8910_interface icecold_ay8910_0_intf =
342331{
343332   AY8910_LEGACY_OUTPUT,
r29450r29451
382371   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6809_device, irq_line))
383372   MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6809_device, irq_line))
384373
385   MCFG_I8279_ADD("i8279", XTAL_6MHz/4, icecold_i8279_intf)
386
374   MCFG_DEVICE_ADD("i8279", I8279, XTAL_6MHz/4)
375   MCFG_I8279_OUT_IRQ_CB(DEVWRITELINE("pia0", pia6821_device, cb1_w)) // irq
376   MCFG_I8279_OUT_SL_CB(WRITE8(icecold_state, scanlines_w))       // scan SL lines
377   MCFG_I8279_OUT_DISP_CB(WRITE8(icecold_state, digit_w))         // display A&B
378   MCFG_I8279_IN_RL_CB(READ8(icecold_state, kbd_r))               // kbd RL lines
379   
387380   // 30Hz signal from CH-C of ay0
388381   MCFG_TIMER_DRIVER_ADD_PERIODIC("sint_timer", icecold_state, icecold_sint_timer, attotime::from_hz(30))
389382
trunk/src/mame/drivers/turbo.c
r29450r29451
454454   output_set_digit_value(m_i8279_scanlines * 2 + 1, ls48_map[(data>>4) & 0x0f]);
455455}
456456
457
458static I8279_INTERFACE( turbo_i8279_intf )
459{
460   DEVCB_NULL,                                     // irq
461   DEVCB_DRIVER_MEMBER(turbo_state, scanlines_w),  // scan SL lines
462   DEVCB_DRIVER_MEMBER(turbo_state, digit_w),      // display A&B
463   DEVCB_NULL,                                     // BD
464   DEVCB_INPUT_PORT("DSW1"),                       // kbd RL lines
465   DEVCB_NULL,                                     // Shift key
466   DEVCB_NULL                                      // Ctrl-Strobe line
467};
468
469
470
471457/*************************************
472458 *
473459 *  Misc Turbo inputs/outputs
r29450r29451
936922   MCFG_I8255_ADD( "i8255_2", turbo_8255_intf_2 )
937923   MCFG_I8255_ADD( "i8255_3", turbo_8255_intf_3 )
938924
939   MCFG_I8279_ADD("i8279", MASTER_CLOCK/4, turbo_i8279_intf)    // unknown clock
940
925   MCFG_DEVICE_ADD("i8279", I8279, MASTER_CLOCK/4)    // unknown clock
926   MCFG_I8279_OUT_SL_CB(WRITE8(turbo_state, scanlines_w))     // scan SL lines
927   MCFG_I8279_OUT_DISP_CB(WRITE8(turbo_state, digit_w))      // display A&B
928   MCFG_I8279_IN_RL_CB(IOPORT("DSW1"))                       // kbd RL lines
929   
941930   /* video hardware */
942931   MCFG_GFXDECODE_ADD("gfxdecode", "palette", turbo)
943932   MCFG_PALETTE_ADD("palette", 256)
r29450r29451
966955   MCFG_I8255_ADD( "i8255_0", subroc3d_8255_intf_0 )
967956   MCFG_I8255_ADD( "i8255_1", subroc3d_8255_intf_1 )
968957
969   MCFG_I8279_ADD("i8279", MASTER_CLOCK/4, turbo_i8279_intf)    // unknown clock
958   MCFG_DEVICE_ADD("i8279", I8279, MASTER_CLOCK/4)    // unknown clock
959   MCFG_I8279_OUT_SL_CB(WRITE8(turbo_state, scanlines_w))     // scan SL lines
960   MCFG_I8279_OUT_DISP_CB(WRITE8(turbo_state, digit_w))      // display A&B
961   MCFG_I8279_IN_RL_CB(IOPORT("DSW1"))                       // kbd RL lines
970962
971963   /* video hardware */
972964   MCFG_GFXDECODE_ADD("gfxdecode", "palette", turbo)
r29450r29451
1003995   MCFG_I8255_ADD( "i8255_0", buckrog_8255_intf_0 )
1004996   MCFG_I8255_ADD( "i8255_1", buckrog_8255_intf_1 )
1005997
1006   MCFG_I8279_ADD("i8279", MASTER_CLOCK/4, turbo_i8279_intf)    // unknown clock
998   MCFG_DEVICE_ADD("i8279", I8279, MASTER_CLOCK/4)    // unknown clock
999   MCFG_I8279_OUT_SL_CB(WRITE8(turbo_state, scanlines_w))     // scan SL lines
1000   MCFG_I8279_OUT_DISP_CB(WRITE8(turbo_state, digit_w))      // display A&B
1001   MCFG_I8279_IN_RL_CB(IOPORT("DSW1"))                       // kbd RL lines
10071002
10081003   /* video hardware */
10091004   MCFG_GFXDECODE_ADD("gfxdecode", "palette", turbo)
trunk/src/emu/machine/i8279.c
r29450r29451
8888//-------------------------------------------------
8989
9090i8279_device::i8279_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
91   : device_t(mconfig, I8279, "8279 KDC", tag, owner, clock, "i8279", __FILE__)
91   : device_t(mconfig, I8279, "8279 KDC", tag, owner, clock, "i8279", __FILE__),
92   m_out_irq_cb(*this),
93   m_out_sl_cb(*this),
94   m_out_disp_cb(*this),
95   m_out_bd_cb(*this),
96   m_in_rl_cb(*this),
97   m_in_shift_cb(*this),
98   m_in_ctrl_cb(*this)
9299{
93100}
94101
95102//-------------------------------------------------
96//  device_config_complete - perform any
97//  operations now that the configuration is
98//  complete
99//-------------------------------------------------
100
101void i8279_device::device_config_complete()
102{
103   // inherit a copy of the static data
104   const i8279_interface *intf = reinterpret_cast<const i8279_interface *>(static_config());
105   if (intf != NULL)
106   {
107      *static_cast<i8279_interface *>(this) = *intf;
108   }
109
110   // or initialize to defaults if none provided
111   else
112   {
113      memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
114      memset(&m_out_sl_cb, 0, sizeof(m_out_sl_cb));
115      memset(&m_out_disp_cb, 0, sizeof(m_out_disp_cb));
116      memset(&m_out_bd_cb, 0, sizeof(m_out_bd_cb));
117      memset(&m_in_rl_cb, 0, sizeof(m_in_rl_cb));
118      memset(&m_in_shift_cb, 0, sizeof(m_in_shift_cb));
119      memset(&m_in_ctrl_cb, 0, sizeof(m_in_ctrl_cb));
120   }
121}
122
123
124//-------------------------------------------------
125103//  device_start - device-specific startup
126104//-------------------------------------------------
127105
128106void i8279_device::device_start()
129107{
130108   /* resolve callbacks */
131   m_out_irq_func.resolve(m_out_irq_cb, *this);
132   m_out_sl_func.resolve(m_out_sl_cb, *this);
133   m_out_disp_func.resolve(m_out_disp_cb, *this);
134   m_out_bd_func.resolve(m_out_bd_cb, *this);
135   m_in_rl_func.resolve(m_in_rl_cb, *this);
136   m_in_shift_func.resolve(m_in_shift_cb, *this);
137   m_in_ctrl_func.resolve(m_in_ctrl_cb, *this);
109   m_out_irq_cb.resolve();
110   m_out_sl_cb.resolve();
111   m_out_disp_cb.resolve();
112   m_out_bd_cb.resolve();
113   m_in_rl_cb.resolve();
114   m_in_shift_cb.resolve();
115   m_in_ctrl_cb.resolve();
138116   m_clock = clock();
139   m_timer = machine().scheduler().timer_alloc(FUNC(timerproc_callback), (void *)this);
117   m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(i8279_device::timerproc_callback), this));
140118}
141119
142120
r29450r29451
218196
219197void i8279_device::set_irq(bool state)
220198{
221   if ( !m_out_irq_func.isnull() )
222      m_out_irq_func( state );
199   if ( !m_out_irq_cb.isnull() )
200      m_out_irq_cb( state );
223201}
224202
225203
r29450r29451
267245}
268246
269247
270TIMER_CALLBACK( i8279_device::timerproc_callback )
248TIMER_CALLBACK_MEMBER( i8279_device::timerproc_callback )
271249{
272   reinterpret_cast<i8279_device*>(ptr)->timer_mainloop();
250   timer_mainloop();
273251}
274252
275253
r29450r29451
295273   // type 3 = strobed
296274
297275   // Get shift keys
298   if ( !m_in_shift_func.isnull() )
299      shift_key = m_in_shift_func();
276   if ( !m_in_shift_cb.isnull() )
277      shift_key = m_in_shift_cb();
300278
301   if ( !m_in_ctrl_func.isnull() )
302      ctrl_key = m_in_ctrl_func();
279   if ( !m_in_ctrl_cb.isnull() )
280      ctrl_key = m_in_ctrl_cb();
303281
304282   if (ctrl_key && !m_ctrl_key)
305283      strobe_pulse = 1; // low-to-high is a strobe
r29450r29451
308286
309287   // Read a row of keys
310288
311   if ( !m_in_rl_func.isnull() )
289   if ( !m_in_rl_cb.isnull() )
312290   {
313      UINT8 rl = m_in_rl_func(0);
291      UINT8 rl = m_in_rl_cb(0);
314292
315293      // see if key still down from last time
316294      UINT16 key_down = (m_scanner << 8) | rl;
r29450r29451
367345
368346   m_scanner &= scanner_mask; // 4-bit port
369347
370   if ( !m_out_sl_func.isnull() )
371      m_out_sl_func(0, m_scanner);
348   if ( !m_out_sl_cb.isnull() )
349      m_out_sl_cb((offs_t)0, m_scanner);
372350
373351   // output a digit
374352
375   if ( !m_out_disp_func.isnull() )
376      m_out_disp_func(0, m_d_ram[m_scanner] );
353   if ( !m_out_disp_cb.isnull() )
354      m_out_disp_cb((offs_t)0, m_d_ram[m_scanner] );
377355}
378356
379357
trunk/src/emu/machine/i8279.h
r29450r29451
4444    DEVICE CONFIGURATION MACROS
4545***************************************************************************/
4646
47#define MCFG_I8279_ADD(_tag, _clock, _config) \
48   MCFG_DEVICE_ADD(_tag, I8279, _clock) \
49   MCFG_DEVICE_CONFIG(_config)
47#define MCFG_I8279_OUT_IRQ_CB(_devcb) \
48   devcb = &i8279_device::set_out_irq_callback(*device, DEVCB2_##_devcb);
5049
51#define I8279_INTERFACE(_name) \
52   const i8279_interface (_name) =
50#define MCFG_I8279_OUT_SL_CB(_devcb) \
51   devcb = &i8279_device::set_out_sl_callback(*device, DEVCB2_##_devcb);
5352
53#define MCFG_I8279_OUT_DISP_CB(_devcb) \
54   devcb = &i8279_device::set_out_disp_callback(*device, DEVCB2_##_devcb);
5455
55/***************************************************************************
56    TYPE DEFINITIONS
57***************************************************************************/
56#define MCFG_I8279_OUT_BD_CB(_devcb) \
57   devcb = &i8279_device::set_out_bd_callback(*device, DEVCB2_##_devcb);
5858
59#define MCFG_I8279_IN_RL_CB(_devcb) \
60   devcb = &i8279_device::set_in_rl_callback(*device, DEVCB2_##_devcb);
5961
60// ======================> i8279_interface
62#define MCFG_I8279_IN_SHIFT_CB(_devcb) \
63   devcb = &i8279_device::set_in_shift_callback(*device, DEVCB2_##_devcb);
6164
62struct i8279_interface
63{
64   devcb_write_line    m_out_irq_cb;       // IRQ
65   devcb_write8        m_out_sl_cb;        // Scanlines SL0-3
66   devcb_write8        m_out_disp_cb;      // B0-3,A0-3
67   devcb_write_line    m_out_bd_cb;        // BD
68   devcb_read8     m_in_rl_cb;     // kbd readlines RL0-7
69   devcb_read_line     m_in_shift_cb;      // Shift key
70   devcb_read_line     m_in_ctrl_cb;       // Ctrl-Strobe line
71};
65#define MCFG_I8279_IN_CTRL_CB(_devcb) \
66   devcb = &i8279_device::set_in_ctrl_callback(*device, DEVCB2_##_devcb);
7267
68/***************************************************************************
69    TYPE DEFINITIONS
70***************************************************************************/
7371
74
7572// ======================> i8279_device
7673
77class i8279_device :  public device_t, public i8279_interface
74class i8279_device :  public device_t
7875{
7976public:
8077   // construction/destruction
8178   i8279_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
8279
80   template<class _Object> static devcb2_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_out_irq_cb.set_callback(object); }
81   template<class _Object> static devcb2_base &set_out_sl_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_out_sl_cb.set_callback(object); }
82   template<class _Object> static devcb2_base &set_out_disp_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_out_disp_cb.set_callback(object); }
83   template<class _Object> static devcb2_base &set_out_bd_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_out_bd_cb.set_callback(object); }
84   template<class _Object> static devcb2_base &set_in_rl_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_in_rl_cb.set_callback(object); }
85   template<class _Object> static devcb2_base &set_in_shift_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_in_shift_cb.set_callback(object); }
86   template<class _Object> static devcb2_base &set_in_ctrl_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_in_ctrl_cb.set_callback(object); }
87   
8388   // read & write handlers
8489   DECLARE_READ8_MEMBER(status_r);
8590   DECLARE_READ8_MEMBER(data_r);
r29450r29451
8994
9095protected:
9196   // device-level overrides
92   virtual void device_config_complete();
9397   virtual void device_start();
9498   virtual void device_reset();
9599   virtual void device_post_load() { }
96100   virtual void device_clock_changed() { }
97101
98   static TIMER_CALLBACK( timerproc_callback );
102   TIMER_CALLBACK_MEMBER( timerproc_callback );
99103
100104private:
101105
r29450r29451
107111   void set_irq(bool state);
108112   void set_display_mode(UINT8 data);
109113
110   devcb_resolved_write_line   m_out_irq_func;
111   devcb_resolved_write8       m_out_sl_func;
112   devcb_resolved_write8       m_out_disp_func;
113   devcb_resolved_write_line   m_out_bd_func;
114   devcb_resolved_read8        m_in_rl_func;
115   devcb_resolved_read_line    m_in_shift_func;
116   devcb_resolved_read_line    m_in_ctrl_func;
114   devcb2_write_line    m_out_irq_cb;       // IRQ
115   devcb2_write8        m_out_sl_cb;        // Scanlines SL0-3
116   devcb2_write8        m_out_disp_cb;      // B0-3,A0-3
117   devcb2_write_line    m_out_bd_cb;        // BD
118   devcb2_read8        m_in_rl_cb;        // kbd readlines RL0-7
119   devcb2_read_line     m_in_shift_cb;      // Shift key
120   devcb2_read_line     m_in_ctrl_cb;       // Ctrl-Strobe line
117121
118122   emu_timer *m_timer;
119123
trunk/src/mess/drivers/sdk86.c
r29450r29451
137137   m_usart->write_rxc(state);
138138}
139139
140static I8279_INTERFACE( sdk86_intf )
141{
142   DEVCB_NULL, // irq
143   DEVCB_DRIVER_MEMBER(sdk86_state, scanlines_w),  // scan SL lines
144   DEVCB_DRIVER_MEMBER(sdk86_state, digit_w),      // display A&B
145   DEVCB_NULL,                     // BD
146   DEVCB_DRIVER_MEMBER(sdk86_state, kbd_r),        // kbd RL lines
147   DEVCB_LINE_GND,                     // Shift key
148   DEVCB_LINE_GND
149};
150
151140static DEVICE_INPUT_DEFAULTS_START( terminal )
152141   DEVICE_INPUT_DEFAULTS( "TERM_TXBAUD", 0xff, 0x05 ) // 4800
153142   DEVICE_INPUT_DEFAULTS( "TERM_RXBAUD", 0xff, 0x05 ) // 4800
r29450r29451
180169   MCFG_DEVICE_ADD("usart_clock", CLOCK, 307200)
181170   MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(sdk86_state, write_usart_clock))
182171
183   MCFG_I8279_ADD("i8279", 2500000, sdk86_intf) // based on divider
172   MCFG_DEVICE_ADD("i8279", I8279, 2500000) // based on divider
173   MCFG_I8279_OUT_SL_CB(WRITE8(sdk86_state, scanlines_w))         // scan SL lines
174   MCFG_I8279_OUT_DISP_CB(WRITE8(sdk86_state, digit_w))         // display A&B
175   MCFG_I8279_IN_RL_CB(READ8(sdk86_state, kbd_r))               // kbd RL lines
176   MCFG_I8279_IN_SHIFT_CB(GND)                              // Shift key
177   MCFG_I8279_IN_CTRL_CB(GND)
184178
185179MACHINE_CONFIG_END
186180
trunk/src/mess/drivers/selz80.c
r29450r29451
153153   return data;
154154}
155155
156static I8279_INTERFACE( selz80_intf )
157{
158   DEVCB_NULL, // irq
159   DEVCB_DRIVER_MEMBER(selz80_state, scanlines_w), // scan SL lines
160   DEVCB_DRIVER_MEMBER(selz80_state, digit_w),     // display A&B
161   DEVCB_NULL,                     // BD
162   DEVCB_DRIVER_MEMBER(selz80_state, kbd_r),       // kbd RL lines
163   DEVCB_LINE_VCC,                     // Shift key
164   DEVCB_LINE_VCC
165};
166
167156static MACHINE_CONFIG_START( selz80, selz80_state )
168157   /* basic machine hardware */
169158   MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz)
r29450r29451
174163   MCFG_DEFAULT_LAYOUT(layout_selz80)
175164
176165   /* Devices */
177   MCFG_I8279_ADD("i8279", 2500000, selz80_intf) // based on divider
166   MCFG_DEVICE_ADD("i8279", I8279, 2500000) // based on divider
167   MCFG_I8279_OUT_SL_CB(WRITE8(selz80_state, scanlines_w))         // scan SL lines
168   MCFG_I8279_OUT_DISP_CB(WRITE8(selz80_state, digit_w))         // display A&B
169   MCFG_I8279_IN_RL_CB(READ8(selz80_state, kbd_r))               // kbd RL lines
170   MCFG_I8279_IN_SHIFT_CB(VCC)                              // Shift key
171   MCFG_I8279_IN_CTRL_CB(VCC)
178172MACHINE_CONFIG_END
179173
180174static MACHINE_CONFIG_DERIVED( dagz80, selz80 )
trunk/src/mess/drivers/mmd1.c
r29450r29451
410410   return data;
411411}
412412
413
414static I8279_INTERFACE( mmd2_intf )
415{
416   DEVCB_NULL,                     // irq
417   DEVCB_DRIVER_MEMBER(mmd1_state, mmd2_scanlines_w),  // scan SL lines
418   DEVCB_DRIVER_MEMBER(mmd1_state, mmd2_digit_w),      // display A&B
419   DEVCB_NULL,                     // BD
420   DEVCB_DRIVER_MEMBER(mmd1_state, mmd2_kbd_r),        // kbd RL lines
421   DEVCB_LINE_VCC,                     // Shift key
422   DEVCB_LINE_VCC
423};
424
425413WRITE8_MEMBER( mmd1_state::mmd2_status_callback )
426414{
427415   // operate the HALT LED
r29450r29451
513501   MCFG_DEFAULT_LAYOUT(layout_mmd2)
514502
515503   /* Devices */
516   MCFG_I8279_ADD("i8279", 400000, mmd2_intf) // based on divider
504   MCFG_DEVICE_ADD("i8279", I8279, 400000) // based on divider
505   MCFG_I8279_OUT_SL_CB(WRITE8(mmd1_state, mmd2_scanlines_w))         // scan SL lines
506   MCFG_I8279_OUT_DISP_CB(WRITE8(mmd1_state, mmd2_digit_w))         // display A&B
507   MCFG_I8279_IN_RL_CB(READ8(mmd1_state, mmd2_kbd_r))               // kbd RL lines
508   MCFG_I8279_IN_SHIFT_CB(VCC)                              // Shift key
509   MCFG_I8279_IN_CTRL_CB(VCC)
510
517511MACHINE_CONFIG_END
518512
519513/* ROM definition */
trunk/src/mess/drivers/sdk85.c
r29450r29451
114114   return data;
115115}
116116
117static I8279_INTERFACE( sdk85_intf )
118{
119   DEVCB_CPU_INPUT_LINE("maincpu", I8085_RST55_LINE),  // irq
120   DEVCB_DRIVER_MEMBER(sdk85_state, scanlines_w),  // scan SL lines
121   DEVCB_DRIVER_MEMBER(sdk85_state, digit_w),      // display A&B
122   DEVCB_NULL,                     // BD
123   DEVCB_DRIVER_MEMBER(sdk85_state, kbd_r),        // kbd RL lines
124   DEVCB_LINE_VCC,                     // Shift key
125   DEVCB_LINE_VCC
126};
127
128117static MACHINE_CONFIG_START( sdk85, sdk85_state )
129118   /* basic machine hardware */
130119   MCFG_CPU_ADD("maincpu", I8085A, XTAL_2MHz)
r29450r29451
135124   MCFG_DEFAULT_LAYOUT(layout_sdk85)
136125
137126   /* Devices */
138   MCFG_I8279_ADD("i8279", 3100000, sdk85_intf) // based on divider
127   MCFG_DEVICE_ADD("i8279", I8279, 3100000) // based on divider
128   MCFG_I8279_OUT_IRQ_CB(INPUTLINE("maincpu", I8085_RST55_LINE))   // irq
129   MCFG_I8279_OUT_SL_CB(WRITE8(sdk85_state, scanlines_w))         // scan SL lines
130   MCFG_I8279_OUT_DISP_CB(WRITE8(sdk85_state, digit_w))         // display A&B
131   MCFG_I8279_IN_RL_CB(READ8(sdk85_state, kbd_r))               // kbd RL lines
132   MCFG_I8279_IN_SHIFT_CB(VCC)                              // Shift key
133   MCFG_I8279_IN_CTRL_CB(VCC)
139134MACHINE_CONFIG_END
140135
141136/* ROM definition */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team