Previous 199869 Revisions Next

r29555 Saturday 12th April, 2014 at 08:36:53 UTC by Fabio Priuli
i8257: updated to devcb2. nw.
[src/emu/machine]8257dma.c 8257dma.h
[src/mame/drivers]dkong.c
[src/mess/drivers]apogee.c fanucspmg.c mikrosha.c partner.c pc8001.c radio86.c unior.c
[src/mess/includes]partner.h radio86.h
[src/mess/machine]partner.c radio86.c

trunk/src/emu/machine/8257dma.c
r29554r29555
6060
6161i8257_device::i8257_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
6262   : device_t(mconfig, I8257, "DMA8257", tag, owner, clock, "i8257", __FILE__),
63      m_out_hrq_cb(*this),
64      m_out_tc_cb(*this),
65      m_out_mark_cb(*this),
66      m_in_memr_cb(*this),
67      m_out_memw_cb(*this),
68      m_in_ior_0_cb(*this),
69      m_in_ior_1_cb(*this),
70      m_in_ior_2_cb(*this),
71      m_in_ior_3_cb(*this),
72      m_out_iow_0_cb(*this),
73      m_out_iow_1_cb(*this),
74      m_out_iow_2_cb(*this),
75      m_out_iow_3_cb(*this),
6376      m_mode(0),
6477      m_rr(0),
6578      m_msb(0),
r29554r29555
7285   memset(m_rwmode, 0, sizeof(m_rwmode));
7386}
7487
75
7688//-------------------------------------------------
77//  device_config_complete - perform any
78//  operations now that the configuration is
79//  complete
80//-------------------------------------------------
81
82void i8257_device::device_config_complete()
83{
84   // inherit a copy of the static data
85   const i8257_interface *intf = reinterpret_cast<const i8257_interface *>(static_config());
86   if (intf != NULL)
87   {
88      *static_cast<i8257_interface *>(this) = *intf;
89   }
90
91   // or initialize to defaults if none provided
92   else
93   {
94      memset(&m_out_hrq_cb, 0, sizeof(m_out_hrq_cb));
95      memset(&m_out_tc_cb, 0, sizeof(m_out_tc_cb));
96      memset(&m_out_mark_cb, 0, sizeof(m_out_mark_cb));
97      memset(&m_in_memr_cb, 0, sizeof(m_in_memr_cb));
98      memset(&m_out_memw_cb, 0, sizeof(m_out_memw_cb));
99      memset(&m_in_ior_cb[0], 0, sizeof(m_in_ior_cb[0]));
100      memset(&m_in_ior_cb[1], 0, sizeof(m_in_ior_cb[1]));
101      memset(&m_in_ior_cb[2], 0, sizeof(m_in_ior_cb[2]));
102      memset(&m_in_ior_cb[3], 0, sizeof(m_in_ior_cb[3]));
103      memset(&m_out_iow_cb[0], 0, sizeof(m_out_iow_cb[0]));
104      memset(&m_out_iow_cb[1], 0, sizeof(m_out_iow_cb[1]));
105      memset(&m_out_iow_cb[2], 0, sizeof(m_out_iow_cb[2]));
106      memset(&m_out_iow_cb[3], 0, sizeof(m_out_iow_cb[3]));
107   }
108}
109
110
111//-------------------------------------------------
11289//  device_start - device-specific startup
11390//-------------------------------------------------
11491
r29554r29555
11895   assert(this != NULL);
11996
12097   /* resolve callbacks */
121   m_out_hrq_func.resolve(m_out_hrq_cb, *this);
122   m_out_tc_func.resolve(m_out_tc_cb, *this);
123   m_out_mark_func.resolve(m_out_mark_cb, *this);
124   m_in_memr_func.resolve(m_in_memr_cb, *this);
125   m_out_memw_func.resolve(m_out_memw_cb, *this);
126
127   for (int i = 0; i < I8257_NUM_CHANNELS; i++)
128   {
129      m_in_ior_func[i].resolve(m_in_ior_cb[i], *this);
130      m_out_iow_func[i].resolve(m_out_iow_cb[i], *this);
131   }
132
98   m_out_hrq_cb.resolve_safe();
99   m_out_tc_cb.resolve_safe();
100   m_out_mark_cb.resolve_safe();
101   m_in_memr_cb.resolve();
102   m_out_memw_cb.resolve();
103   m_in_ior_0_cb.resolve();
104   m_in_ior_1_cb.resolve();
105   m_in_ior_2_cb.resolve();
106   m_in_ior_3_cb.resolve();
107   m_out_iow_0_cb.resolve();
108   m_out_iow_1_cb.resolve();
109   m_out_iow_2_cb.resolve();
110   m_out_iow_3_cb.resolve();
111   
133112   /* set initial values */
134113   m_timer = timer_alloc(TIMER_OPERATION);
135114   m_msbflip_timer = timer_alloc(TIMER_MSBFLIP);
r29554r29555
162141int i8257_device::i8257_do_operation(int channel)
163142{
164143   int done;
165   UINT8 data;
144   UINT8 data = 0;
166145
167146   UINT8 mode = m_rwmode[channel];
168147   if (m_count[channel] == 0x0000)
169148   {
170149      m_status |=  (0x01 << channel);
171150
172      m_out_tc_func(ASSERT_LINE);
151      m_out_tc_cb(ASSERT_LINE);
173152   }
174   switch(mode) {
153
154   switch(mode)
155   {
175156   case 1:
176      if (!m_in_memr_func.isnull())
177      {
178         data = m_in_memr_func(m_address[channel]);
179      }
157      if (!m_in_memr_cb.isnull())
158         data = m_in_memr_cb(m_address[channel]);
180159      else
181160      {
182161         data = 0;
183162         logerror("8257: No memory read function defined.\n");
184163      }
185      if (!m_out_iow_func[channel].isnull())
164         
165      switch (channel)
186166      {
187         m_out_iow_func[channel](m_address[channel], data);
167      case 0:
168         if (!m_out_iow_0_cb.isnull())
169            m_out_iow_0_cb((offs_t)m_address[channel], data);
170         else
171            logerror("8257: No channel write function for channel %d defined.\n", channel);
172         break;
173      case 1:
174         if (!m_out_iow_1_cb.isnull())
175            m_out_iow_1_cb((offs_t)m_address[channel], data);
176         else
177            logerror("8257: No channel write function for channel %d defined.\n", channel);
178         break;
179      case 2:
180         if (!m_out_iow_2_cb.isnull())
181            m_out_iow_2_cb((offs_t)m_address[channel], data);
182         else
183            logerror("8257: No channel write function for channel %d defined.\n", channel);
184         break;
185      case 3:
186         if (!m_out_iow_3_cb.isnull())
187            m_out_iow_3_cb((offs_t)m_address[channel], data);
188         else
189            logerror("8257: No channel write function for channel %d defined.\n", channel);
190         break;
188191      }
189      else
190      {
191         logerror("8257: No channel write function for channel %d defined.\n",channel);
192      }
193192
194193      m_address[channel]++;
195194      m_count[channel]--;
r29554r29555
197196      break;
198197
199198   case 2:
200      if (!m_in_ior_func[channel].isnull())
199      switch (channel)
201200      {
202         data = m_in_ior_func[channel](m_address[channel]);
201      case 0:
202         if (!m_in_ior_0_cb.isnull())
203            data = m_in_ior_0_cb((offs_t)m_address[channel]);
204         else
205         {
206            data = 0;
207            logerror("8257: No channel read function for channel %d defined.\n", channel);
208         }
209         break;
210      case 1:
211         if (!m_in_ior_1_cb.isnull())
212            data = m_in_ior_1_cb((offs_t)m_address[channel]);
213         else
214         {
215            data = 0;
216            logerror("8257: No channel read function for channel %d defined.\n", channel);
217         }
218         break;
219      case 2:
220         if (!m_in_ior_2_cb.isnull())
221            data = m_in_ior_2_cb((offs_t)m_address[channel]);
222         else
223         {
224            data = 0;
225            logerror("8257: No channel read function for channel %d defined.\n", channel);
226         }
227         break;
228      case 3:
229         if (!m_in_ior_3_cb.isnull())
230            data = m_in_ior_3_cb((offs_t)m_address[channel]);
231         else
232         {
233            data = 0;
234            logerror("8257: No channel read function for channel %d defined.\n", channel);
235         }
236         break;
203237      }
204      else
205      {
206         data = 0;
207         logerror("8257: No channel read function for channel %d defined.\n",channel);
208      }
209238
210      if (!m_out_memw_func.isnull())
211      {
212         m_out_memw_func(m_address[channel], data);
213      }
239      if (!m_out_memw_cb.isnull())
240         m_out_memw_cb((offs_t)m_address[channel], data);
214241      else
215      {
216242         logerror("8257: No memory write function defined.\n");
217      }
243
218244      m_address[channel]++;
219245      m_count[channel]--;
220      done = (m_count[channel] == 0xFFFF);
246      done = (m_count[channel] == 0xffff);
221247      break;
248
222249   case 0: /* verify */
223250      m_address[channel]++;
224251      m_count[channel]--;
225      done = (m_count[channel] == 0xFFFF);
252      done = (m_count[channel] == 0xffff);
226253      break;
254
227255   default:
228256      fatalerror("i8257_do_operation: invalid mode!\n");
229257      break;
230258   }
259
231260   if (done)
232261   {
233262      if ((channel==2) && DMA_MODE_AUTOLOAD(m_mode))
r29554r29555
238267         m_registers[5] = m_registers[7];
239268      }
240269
241      m_out_tc_func(CLEAR_LINE);
270      m_out_tc_cb(CLEAR_LINE);
242271   }
243272   return done;
244273}
r29554r29555
337366   }
338367
339368   /* set the halt line */
340   m_out_hrq_func(pending_transfer ? ASSERT_LINE : CLEAR_LINE);
369   m_out_hrq_cb(pending_transfer ? ASSERT_LINE : CLEAR_LINE);
341370}
342371
343372
trunk/src/emu/machine/8257dma.h
r29554r29555
4040#include "emu.h"
4141
4242
43#define I8257_NUM_CHANNELS      (4)
4344
45
4446/***************************************************************************
4547    DEVICE CONFIGURATION MACROS
4648***************************************************************************/
4749
48#define MCFG_I8257_ADD(_tag, _clock, _config) \
49   MCFG_DEVICE_ADD(_tag, I8257, _clock) \
50   MCFG_DEVICE_CONFIG(_config)
50#define MCFG_I8257_OUT_HRQ_CB(_devcb) \
51   devcb = &i8257_device::set_out_hrq_callback(*device, DEVCB2_##_devcb);
5152
52#define I8257_INTERFACE(_name) \
53   const i8257_interface (_name) =
53#define MCFG_I8257_OUT_TC_CB(_devcb) \
54   devcb = &i8257_device::set_out_tc_callback(*device, DEVCB2_##_devcb);
5455
55#define I8257_NUM_CHANNELS      (4)
56#define MCFG_I8257_OUT_MARK_CB(_devcb) \
57   devcb = &i8257_device::set_out_mark_callback(*device, DEVCB2_##_devcb);
5658
5759
58/***************************************************************************
59    TYPE DEFINITIONS
60***************************************************************************/
60#define MCFG_I8257_IN_MEMR_CB(_devcb) \
61   devcb = &i8257_device::set_in_memr_callback(*device, DEVCB2_##_devcb);
6162
63#define MCFG_I8257_OUT_MEMW_CB(_devcb) \
64   devcb = &i8257_device::set_out_memw_callback(*device, DEVCB2_##_devcb);
6265
63// ======================> i8257_interface
6466
65struct i8257_interface
66{
67   devcb_write_line    m_out_hrq_cb;
68   devcb_write_line    m_out_tc_cb;
69   devcb_write_line    m_out_mark_cb;
67#define MCFG_I8257_IN_IOR_0_CB(_devcb) \
68   devcb = &i8257_device::set_in_ior_0_callback(*device, DEVCB2_##_devcb);
7069
71   /* accessors to main memory */
72   devcb_read8         m_in_memr_cb; // TODO m_in_memr_cb[I8257_NUM_CHANNELS];
73   devcb_write8        m_out_memw_cb; // TODO m_out_memw_cb[I8257_NUM_CHANNELS];
70#define MCFG_I8257_IN_IOR_1_CB(_devcb) \
71   devcb = &i8257_device::set_in_ior_1_callback(*device, DEVCB2_##_devcb);
7472
75   /* channel accesors */
76   devcb_read8         m_in_ior_cb[I8257_NUM_CHANNELS];
77   devcb_write8        m_out_iow_cb[I8257_NUM_CHANNELS];
78};
73#define MCFG_I8257_IN_IOR_2_CB(_devcb) \
74   devcb = &i8257_device::set_in_ior_2_callback(*device, DEVCB2_##_devcb);
7975
76#define MCFG_I8257_IN_IOR_3_CB(_devcb) \
77   devcb = &i8257_device::set_in_ior_3_callback(*device, DEVCB2_##_devcb);
8078
8179
80#define MCFG_I8257_OUT_IOW_0_CB(_devcb) \
81   devcb = &i8257_device::set_out_iow_0_callback(*device, DEVCB2_##_devcb);
82
83#define MCFG_I8257_OUT_IOW_1_CB(_devcb) \
84   devcb = &i8257_device::set_out_iow_1_callback(*device, DEVCB2_##_devcb);
85
86#define MCFG_I8257_OUT_IOW_2_CB(_devcb) \
87   devcb = &i8257_device::set_out_iow_2_callback(*device, DEVCB2_##_devcb);
88
89#define MCFG_I8257_OUT_IOW_3_CB(_devcb) \
90   devcb = &i8257_device::set_out_iow_3_callback(*device, DEVCB2_##_devcb);
91
92
93/***************************************************************************
94    TYPE DEFINITIONS
95***************************************************************************/
96
97
8298// ======================> i8257_device
8399
84class i8257_device :  public device_t,
85                  public i8257_interface
100class i8257_device :  public device_t
86101{
87102public:
88103   // construction/destruction
89104   i8257_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
90105
106   template<class _Object> static devcb2_base &set_out_hrq_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_out_hrq_cb.set_callback(object); }
107   template<class _Object> static devcb2_base &set_out_tc_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_out_tc_cb.set_callback(object); }
108   template<class _Object> static devcb2_base &set_out_mark_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_out_mark_cb.set_callback(object); }
109
110   template<class _Object> static devcb2_base &set_in_memr_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_in_memr_cb.set_callback(object); }
111   template<class _Object> static devcb2_base &set_out_memw_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_out_memw_cb.set_callback(object); }
112   
113   template<class _Object> static devcb2_base &set_in_ior_0_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_in_ior_0_cb.set_callback(object); }
114   template<class _Object> static devcb2_base &set_in_ior_1_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_in_ior_1_cb.set_callback(object); }
115   template<class _Object> static devcb2_base &set_in_ior_2_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_in_ior_2_cb.set_callback(object); }
116   template<class _Object> static devcb2_base &set_in_ior_3_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_in_ior_3_cb.set_callback(object); }
117   
118   template<class _Object> static devcb2_base &set_out_iow_0_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_out_iow_0_cb.set_callback(object); }
119   template<class _Object> static devcb2_base &set_out_iow_1_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_out_iow_1_cb.set_callback(object); }
120   template<class _Object> static devcb2_base &set_out_iow_2_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_out_iow_2_cb.set_callback(object); }
121   template<class _Object> static devcb2_base &set_out_iow_3_callback(device_t &device, _Object object) { return downcast<i8257_device &>(device).m_out_iow_3_cb.set_callback(object); }
122   
91123   /* register access */
92124   DECLARE_READ8_MEMBER( i8257_r );
93125   DECLARE_WRITE8_MEMBER( i8257_w );
r29554r29555
107139
108140protected:
109141   // device-level overrides
110   virtual void device_config_complete();
111142   virtual void device_start();
112143   virtual void device_reset();
113144   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
r29554r29555
121152   void i8257_update_status();
122153   void i8257_prepare_msb_flip();
123154
124   devcb_resolved_write_line   m_out_hrq_func;
125   devcb_resolved_write_line   m_out_tc_func;
126   devcb_resolved_write_line   m_out_mark_func;
127   devcb_resolved_read8        m_in_memr_func;
128   devcb_resolved_write8       m_out_memw_func;
129   devcb_resolved_read8        m_in_ior_func[I8257_NUM_CHANNELS];
130   devcb_resolved_write8       m_out_iow_func[I8257_NUM_CHANNELS];
155   devcb2_write_line   m_out_hrq_cb;
156   devcb2_write_line   m_out_tc_cb;
157   devcb2_write_line   m_out_mark_cb;
131158
159   /* accessors to main memory */
160   devcb2_read8        m_in_memr_cb;
161   devcb2_write8       m_out_memw_cb;
162
163   /* channel accesors */
164   devcb2_read8        m_in_ior_0_cb;
165   devcb2_read8        m_in_ior_1_cb;
166   devcb2_read8        m_in_ior_2_cb;
167   devcb2_read8        m_in_ior_3_cb;
168   devcb2_write8       m_out_iow_0_cb;
169   devcb2_write8       m_out_iow_1_cb;
170   devcb2_write8       m_out_iow_2_cb;
171   devcb2_write8       m_out_iow_3_cb;
172
132173   emu_timer *m_timer;
133174   emu_timer *m_msbflip_timer;
134175
trunk/src/mess/drivers/mikrosha.c
r29554r29555
209209   MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
210210   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
211211
212   MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, radio86_dma)
212   MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9)
213   MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w))
214   MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte))
215   MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte))
216   MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
213217
214218   MCFG_CASSETTE_ADD( "cassette", mikrosha_cassette_interface )
215219   MCFG_SOFTWARE_LIST_ADD("cass_list","mikrosha")
trunk/src/mess/drivers/unior.c
r29554r29555
393393      return m_p_vram[offset & 0x7ff];
394394}
395395
396static I8257_INTERFACE( dma_intf )
397{
398   DEVCB_CPU_INPUT_LINE("maincpu", I8085_HALT),
399   DEVCB_NULL,
400   DEVCB_NULL,
401   DEVCB_NULL,
402   DEVCB_DEVICE_MEMBER("crtc", i8275_device, dack_w),
403   { DEVCB_NULL, DEVCB_NULL, DEVCB_DRIVER_MEMBER(unior_state, dma_r), DEVCB_NULL },
404   { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL },
405};
406
407396WRITE8_MEMBER( unior_state::cpu_status_callback )
408397{
409398   m_dma->i8257_hlda_w(BIT(data, 3));
r29554r29555
462451
463452   MCFG_I8255_ADD( "ppi0", ppi0_intf )
464453   MCFG_I8255_ADD( "ppi1", ppi1_intf )
465   MCFG_I8257_ADD("dma", XTAL_20MHz / 9, dma_intf) // unknown clock
454
455   MCFG_DEVICE_ADD("dma", I8257, XTAL_20MHz / 9) // unknown clock
456   MCFG_I8257_OUT_HRQ_CB(INPUTLINE("maincpu", I8085_HALT))
457   MCFG_I8257_OUT_MEMW_CB(DEVWRITE8("crtc", i8275_device, dack_w))
458   MCFG_I8257_IN_IOR_2_CB(READ8(unior_state, dma_r))
459
466460   MCFG_I8275_ADD("crtc", crtc_intf)
467461MACHINE_CONFIG_END
468462
trunk/src/mess/drivers/fanucspmg.c
r29554r29555
710710   return prog_space.write_byte(offset, data);
711711}
712712
713I8257_INTERFACE( fanucspmg_dma )
714{
715   DEVCB_NULL,
716   DEVCB_NULL,
717   DEVCB_NULL,
718   DEVCB_DRIVER_MEMBER(fanucspmg_state, memory_read_byte),
719   DEVCB_DRIVER_MEMBER(fanucspmg_state, memory_write_byte),
720   { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL },
721   { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }
722};
723
724713static MC6845_UPDATE_ROW( fanuc_update_row )
725714{
726715   fanucspmg_state *state = downcast<fanucspmg_state *>(device->owner());
r29554r29555
819808   MCFG_PIT8253_CLK1(XTAL_15MHz/12)
820809   MCFG_PIT8253_CLK2(XTAL_15MHz/12)
821810
822   MCFG_I8257_ADD(DMAC_TAG, XTAL_15MHz / 5, fanucspmg_dma)
811   MCFG_DEVICE_ADD(DMAC_TAG, I8257, XTAL_15MHz / 5)
812   MCFG_I8257_IN_MEMR_CB(READ8(fanucspmg_state, memory_read_byte))
813   MCFG_I8257_OUT_MEMW_CB(WRITE8(fanucspmg_state, memory_write_byte))
823814
824815   MCFG_PIC8259_ADD(PIC0_TAG, INPUTLINE("maincpu", 0), VCC, NULL)
825816   MCFG_PIC8259_ADD(PIC1_TAG, INPUTLINE("maincpu", 0), VCC, NULL)
trunk/src/mess/drivers/pc8001.c
r29554r29555
444444   program.write_byte(offset, data);
445445}
446446
447static I8257_INTERFACE( dmac_intf )
448{
449   DEVCB_DRIVER_LINE_MEMBER(pc8001_state, hrq_w),
450   DEVCB_NULL,
451   DEVCB_NULL,
452   DEVCB_NULL,
453   DEVCB_DRIVER_MEMBER(pc8001_state, dma_mem_w),
454   { DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_r), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_r), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_r), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_r) },
455   { DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_w), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_w), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_w), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_w) },
456};
457447
458448/* Machine Initialization */
459449
r29554r29555
545535   MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
546536
547537   MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
548   MCFG_I8257_ADD(I8257_TAG, 4000000, dmac_intf)
538
539   MCFG_DEVICE_ADD(I8257_TAG, I8257, 4000000)
540   MCFG_I8257_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w))
541   MCFG_I8257_OUT_MEMW_CB(WRITE8(pc8001_state, dma_mem_w))
542   MCFG_I8257_IN_IOR_0_CB(READ8(pc8001_state, dma_io_r))
543   MCFG_I8257_IN_IOR_1_CB(READ8(pc8001_state, dma_io_r))
544   MCFG_I8257_IN_IOR_2_CB(READ8(pc8001_state, dma_io_r))
545   MCFG_I8257_IN_IOR_3_CB(READ8(pc8001_state, dma_io_r))
546   MCFG_I8257_OUT_IOW_0_CB(WRITE8(pc8001_state, dma_io_w))
547   MCFG_I8257_OUT_IOW_1_CB(WRITE8(pc8001_state, dma_io_w))
548   MCFG_I8257_OUT_IOW_2_CB(WRITE8(pc8001_state, dma_io_w))
549   MCFG_I8257_OUT_IOW_3_CB(WRITE8(pc8001_state, dma_io_w))
550
549551   MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL)
550552
551553   MCFG_DEVICE_ADD(UPD3301_TAG, UPD3301, 14318180)
r29554r29555
589591   MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
590592
591593   MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
592   MCFG_I8257_ADD(I8257_TAG, 4000000, dmac_intf)
594
595   MCFG_DEVICE_ADD(I8257_TAG, I8257, 4000000)
596   MCFG_I8257_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w))
597   MCFG_I8257_OUT_MEMW_CB(WRITE8(pc8001_state, dma_mem_w))
598   MCFG_I8257_IN_IOR_0_CB(READ8(pc8001_state, dma_io_r))
599   MCFG_I8257_IN_IOR_1_CB(READ8(pc8001_state, dma_io_r))
600   MCFG_I8257_IN_IOR_2_CB(READ8(pc8001_state, dma_io_r))
601   MCFG_I8257_IN_IOR_3_CB(READ8(pc8001_state, dma_io_r))
602   MCFG_I8257_OUT_IOW_0_CB(WRITE8(pc8001_state, dma_io_w))
603   MCFG_I8257_OUT_IOW_1_CB(WRITE8(pc8001_state, dma_io_w))
604   MCFG_I8257_OUT_IOW_2_CB(WRITE8(pc8001_state, dma_io_w))
605   MCFG_I8257_OUT_IOW_3_CB(WRITE8(pc8001_state, dma_io_w))
606
593607   MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL)
594608
595609   MCFG_DEVICE_ADD(UPD3301_TAG, UPD3301, 14318180)
trunk/src/mess/drivers/apogee.c
r29554r29555
237237   MCFG_SOUND_CONFIG(apogee_speaker_interface)
238238   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
239239
240   MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, radio86_dma)
240   MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9)
241   MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w))
242   MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte))
243   MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte))
244   MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
241245
242246   MCFG_CASSETTE_ADD( "cassette", apogee_cassette_interface )
243247   MCFG_SOFTWARE_LIST_ADD("cass_list","apogee")
trunk/src/mess/drivers/partner.c
r29554r29555
215215   MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
216216   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
217217
218   MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, partner_dma)
218   MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9)
219   MCFG_I8257_OUT_HRQ_CB(WRITELINE(partner_state, hrq_w))
220   MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte))
221   MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte))
222   MCFG_I8257_IN_IOR_0_CB(READ8(partner_state, partner_fdc_r))
223   MCFG_I8257_OUT_IOW_0_CB(WRITE8(partner_state, partner_fdc_w))
224   MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
219225
220226   MCFG_CASSETTE_ADD( "cassette", partner_cassette_interface )
221227   MCFG_SOFTWARE_LIST_ADD("cass_list","partner_cass")
trunk/src/mess/drivers/radio86.c
r29554r29555
372372   MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
373373   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
374374
375   MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, radio86_dma)
375   MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9)
376   MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w))
377   MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte))
378   MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte))
379   MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
376380
377381   MCFG_CASSETTE_ADD( "cassette", radio86_cassette_interface )
378382   MCFG_SOFTWARE_LIST_ADD("cass_list","radio86")
trunk/src/mess/machine/partner.c
r29554r29555
362362{
363363   return m_fdc->data_r(space,offset);
364364}
365
365366WRITE8_MEMBER(partner_state::partner_fdc_w)
366367{
367368   m_fdc->data_w(space,offset,data);
368369}
369370
370I8257_INTERFACE( partner_dma )
371{
372   DEVCB_DRIVER_LINE_MEMBER(partner_state,hrq_w),
373   DEVCB_NULL,
374   DEVCB_NULL,
375   DEVCB_DRIVER_MEMBER(radio86_state, memory_read_byte),
376   DEVCB_DRIVER_MEMBER(radio86_state, memory_write_byte),
377   { DEVCB_DRIVER_MEMBER(partner_state, partner_fdc_r), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL },
378   { DEVCB_DRIVER_MEMBER(partner_state, partner_fdc_w), DEVCB_NULL, DEVCB_DEVICE_MEMBER("i8275", i8275_device, dack_w), DEVCB_NULL }
379};
380
381
382371MACHINE_RESET_MEMBER(partner_state,partner)
383372{
384373   m_mem_page = 0;
trunk/src/mess/machine/radio86.c
r29554r29555
146146   return prog_space.write_byte(offset, data);
147147}
148148
149I8257_INTERFACE( radio86_dma )
150{
151   DEVCB_DRIVER_LINE_MEMBER(radio86_state,hrq_w),
152   DEVCB_NULL,
153   DEVCB_NULL,
154   DEVCB_DRIVER_MEMBER(radio86_state, memory_read_byte),
155   DEVCB_DRIVER_MEMBER(radio86_state, memory_write_byte),
156   { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL },
157   { DEVCB_NULL, DEVCB_NULL, DEVCB_DEVICE_MEMBER("i8275", i8275_device, dack_w), DEVCB_NULL }
158};
159
160149void radio86_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
161150{
162151   switch (id)
trunk/src/mess/includes/radio86.h
r29554r29555
133133extern const i8275_interface mikrosha_i8275_interface;
134134extern const i8275_interface apogee_i8275_interface;
135135
136extern const i8257_interface radio86_dma;
137
138
139136extern void radio86_init_keyboard(running_machine &machine);
140137
141138
trunk/src/mess/includes/partner.h
r29554r29555
4747
4848/*----------- defined in machine/partner.c -----------*/
4949
50extern const i8257_interface partner_dma;
5150extern const wd17xx_interface partner_wd17xx_interface;
5251
5352#endif /* partner_H_ */
trunk/src/mame/drivers/dkong.c
r29554r29555
370370   DEVCB_NULL
371371};
372372
373static I8257_INTERFACE( dk_dma )
374{
375   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_HALT),
376   DEVCB_NULL,
377   DEVCB_NULL,
378   DEVCB_DRIVER_MEMBER(dkong_state, memory_read_byte),
379   DEVCB_DRIVER_MEMBER(dkong_state, memory_write_byte),
380   { DEVCB_NULL, DEVCB_DRIVER_MEMBER(dkong_state,p8257_ctl_r), DEVCB_NULL, DEVCB_NULL },
381   { DEVCB_DRIVER_MEMBER(dkong_state,p8257_ctl_w), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }
382};
383
384static I8257_INTERFACE( hb_dma )
385{
386   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_HALT),
387   DEVCB_NULL,
388   DEVCB_NULL,
389   DEVCB_DRIVER_MEMBER(dkong_state, hb_dma_read_byte),
390   DEVCB_DRIVER_MEMBER(dkong_state, hb_dma_write_byte),
391   { DEVCB_NULL, DEVCB_DRIVER_MEMBER(dkong_state,p8257_ctl_r), DEVCB_NULL, DEVCB_NULL },
392   { DEVCB_DRIVER_MEMBER(dkong_state,p8257_ctl_w), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }
393};
394
395373/*************************************
396374 *
397375 *  VBLANK and IRQ generation
r29554r29555
16571635   MCFG_MACHINE_START_OVERRIDE(dkong_state,dkong2b)
16581636   MCFG_MACHINE_RESET_OVERRIDE(dkong_state,dkong)
16591637
1660   MCFG_I8257_ADD("dma8257", CLOCK_1H, dk_dma)
1638   MCFG_DEVICE_ADD("dma8257", I8257, CLOCK_1H)
1639   MCFG_I8257_OUT_HRQ_CB(INPUTLINE("maincpu", INPUT_LINE_HALT))
1640   MCFG_I8257_IN_MEMR_CB(READ8(dkong_state, memory_read_byte))
1641   MCFG_I8257_OUT_MEMW_CB(WRITE8(dkong_state, memory_write_byte))
1642   MCFG_I8257_IN_IOR_1_CB(READ8(dkong_state, p8257_ctl_r))
1643   MCFG_I8257_OUT_IOW_0_CB(WRITE8(dkong_state, p8257_ctl_w))
16611644
16621645   /* video hardware */
16631646   MCFG_SCREEN_ADD("screen", RASTER)
r29554r29555
17841767   MCFG_CPU_VBLANK_INT_DRIVER("screen", dkong_state,  s2650_interrupt)
17851768
17861769   MCFG_DEVICE_MODIFY("dma8257")
1787   MCFG_DEVICE_CONFIG(hb_dma)
1770   MCFG_I8257_IN_MEMR_CB(READ8(dkong_state, hb_dma_read_byte))
1771   MCFG_I8257_OUT_MEMW_CB(WRITE8(dkong_state, hb_dma_write_byte))
17881772
17891773   MCFG_MACHINE_START_OVERRIDE(dkong_state,s2650)
17901774MACHINE_CONFIG_END

Previous 199869 Revisions Next


© 1997-2024 The MAME Team