Previous 15994 Revisions Next

r862 Wednesday 22nd August, 2007 at 15:27:06 UTC by Curt Coder
[MFP68901] Cleanups
[src/mess/drivers]atarist.c
[src/mess/machine]68901mfp.c 68901mfp.h

src/mess/machine/68901mfp.c
r861r862
11/*
22
33   TODO:
4   
5   - serial comms
6   - interrupt queueing
7   - trigger interrupt on AER change
84
5   - GPIP read crash
6   - serial I/O
7
98*/
109
1110#include "68901mfp.h"
r861r862
3433   UINT8 tsr;
3534   UINT8 udr;
3635
37   mame_timer *timer_a, *timer_b, *timer_c, *timer_d;
36   mame_timer *timer[4], *irq_timer;
3837
3938   int   chip_clock;
4039   int   timer_clock;
r861r862
5756static TIMER_CALLBACK( timer_c );
5857static TIMER_CALLBACK( timer_d );
5958
60/*
61void mfp68901_irq_ack(int which)
59static const int GPIO_MASK[] =
60{
61   MFP68901_IPRB_GPIP_0, MFP68901_IPRB_GPIP_1, MFP68901_IPRB_GPIP_2, MFP68901_IPRB_GPIP_3,
62   MFP68901_IPRB_GPIP_4, MFP68901_IPRB_GPIP_5, MFP68901_IPRA_GPIP_6, MFP68901_IPRA_GPIP_7
63};
64
65static void mfp68901_poll_gpio(int which)
6266{
6367   mfp_68901 *mfp_p = &mfp[which];
68   UINT8 gpio = 0x80;//mfp_p->gpio_r(0);
69   UINT8 gpold = (mfp_p->gpip & ~mfp_p->ddr) ^ mfp_p->aer;
70   UINT8 gpnew = (gpio & ~mfp_p->ddr) ^ mfp_p->aer;
71   UINT8 *ier, *ipr, *imr;
72   int bit;
6473
74   for (bit = 0; bit < 8; bit++)
75   {
76      if (bit < 6)
77      {
78         ier = &mfp_p->ierb;
79         ipr = &mfp_p->iprb;
80         imr = &mfp_p->imrb;
81      }
82      else
83      {
84         ier = &mfp_p->iera;
85         ipr = &mfp_p->ipra;
86         imr = &mfp_p->imra;
87      }
88
89      if ((BIT(gpold, bit) == 1) && (BIT(gpnew, bit) == 0))
90      {
91         if (*ier & GPIO_MASK[bit])
92         {
93            (*ipr) |= GPIO_MASK[bit];
94         }
95      }
96   }
97
98   mfp_p->gpip = (gpio & ~mfp_p->ddr) | (mfp_p->gpip & mfp_p->ddr);
99}
100
101static void mfp68901_irq_ack(int which)
102{
103   mfp_68901 *mfp_p = &mfp[which];
104
65105   UINT16 ipr = (mfp_p->ipra << 8) | mfp_p->iprb;
66106   UINT16 isr = (mfp_p->isra << 8) | mfp_p->isrb;
67107   UINT16 imr = (mfp_p->imra << 8) | mfp_p->imrb;
68108   int ch;
69109
70   for (ch = 15; ch > 0; ch--)
110   if (!isr)
71111   {
72      if (BIT(isr, ch))
112      for (ch = 15; ch > 0; ch--)
73113      {
74         break;
75      }
114         if (BIT(ipr, ch) && BIT(imr, ch))
115         {
116            ipr -= (1 << ch);
76117
77      if (BIT(ipr, ch) && BIT(imr, ch))
78      {
79         ipr -= (1 << ch);
118            mfp_p->ipra = (ipr & 0xff00) >> 8;
119            mfp_p->iprb = ipr & 0xff;
80120
81         mfp_p->ipra = (ipr & 0xff00) >> 8;
82         mfp_p->iprb = ipr & 0xff;
121            if (mfp_p->vr & MFP68901_VR_S)
122            {
123               isr |= (1 << ch);
83124
84         if (mfp_p->vr & MFP68901_VR_S)
85         {
86            isr |= (1 << ch);
125               mfp_p->isra = (isr & 0xff00) >> 8;
126               mfp_p->isrb = isr & 0xff;
127            }
87128
88            mfp_p->isra = (isr & 0xff00) >> 8;
89            mfp_p->isrb = isr & 0xff;
129            mfp_p->irq_callback(which, HOLD_LINE, (mfp_p->vr & 0xf0) | (15 - ch));
130            logerror("MFP68901 #%u Interrupt %u\n", which, 15 - ch);
131            return;
90132         }
91133
92         mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | (15 - ch));
93         return;
134         ipr <<= 1;
135         isr <<= 1;
136         imr <<= 1;
94137      }
95138
96      ipr <<= 1;
97      isr <<= 1;
98      imr <<= 1;
139      mfp_p->irq_callback(which, CLEAR_LINE, 0);
99140   }
141}
100142
101   mfp_p->irq_callback(which, CLEAR_LINE, 0);
143static TIMER_CALLBACK( mfp68901_tick )
144{
145   mfp68901_poll_gpio(param);
146   mfp68901_irq_ack(param);
102147}
103*/
104148
105149static UINT8 mfp68901_register_r(int which, int reg)
106150{
r861r862
108152
109153   switch (reg)
110154   {
111   case MFP68901_REGISTER_GPIP:
112      {
113      UINT8 gpio = 0;
114
115      if (mfp_p->gpio_r)
116      {
117         //gpio = (*mfp_p->gpio_r)(0);
118      }
119
120      gpio |= (mfp_p->gpip & mfp_p->ddr);
121
122      // signal interrupts if necessary
123      return 0x80;
124      }
155   case MFP68901_REGISTER_GPIP:  return mfp_p->gpip;
125156   case MFP68901_REGISTER_AER:   return mfp_p->aer;
126157   case MFP68901_REGISTER_DDR:   return mfp_p->ddr;
127158
r861r862
148179   case MFP68901_REGISTER_RSR:   return mfp_p->rsr;
149180   case MFP68901_REGISTER_TSR:   return mfp_p->tsr;
150181   case MFP68901_REGISTER_UDR:   return mfp_p->udr;
151   default:   
152      return 0;
182
183   default:                 return 0;
153184   }
154185}
155186
r861r862
236267      {
237268      case MFP68901_TCR_TIMER_DELAY_4:
238269         logerror("MFP68901 #%u Timer A Delay Mode : 4 Prescale\n", which);
239         mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
270         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
240271         break;
241272      case MFP68901_TCR_TIMER_DELAY_10:
242273         logerror("MFP68901 #%u Timer A Delay Mode : 10 Prescale\n", which);
243         mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
274         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
244275         break;
245276      case MFP68901_TCR_TIMER_DELAY_16:
246277         logerror("MFP68901 #%u Timer A Delay Mode : 16 Prescale\n", which);
247         mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
278         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
248279         break;
249280      case MFP68901_TCR_TIMER_DELAY_50:
250281         logerror("MFP68901 #%u Timer A Delay Mode : 50 Prescale\n", which);
251         mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
282         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
252283         break;
253284      case MFP68901_TCR_TIMER_DELAY_64:
254285         logerror("MFP68901 #%u Timer A Delay Mode : 64 Prescale\n", which);
255         mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
286         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
256287         break;
257288      case MFP68901_TCR_TIMER_DELAY_100:
258289         logerror("MFP68901 #%u Timer A Delay Mode : 100 Prescale\n", which);
259         mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
290         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
260291         break;
261292      case MFP68901_TCR_TIMER_DELAY_200:
262293         logerror("MFP68901 #%u Timer A Delay Mode : 200 Prescale\n", which);
263         mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
294         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
264295         break;
265296      case MFP68901_TCR_TIMER_STOPPED:
266297         logerror("MFP68901 #%u Timer A Stopped\n", which);
267         mame_timer_enable(mfp_p->timer_a, 0);
298         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_A], 0);
268299         break;
269300      case MFP68901_TCR_TIMER_EVENT:
270301         logerror("MFP68901 #%u Timer A Event Count Mode\n", which);
271         mame_timer_enable(mfp_p->timer_a, 0);
302         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_A], 0);
272303         break;
273304      case MFP68901_TCR_TIMER_PULSE_4:
274305         logerror("MFP68901 #%u Timer A Pulse Width Mode : 4 Prescale\n", which);
275         mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
306         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
276307         break;
277308      case MFP68901_TCR_TIMER_PULSE_10:
278309         logerror("MFP68901 #%u Timer A Pulse Width Mode : 10 Prescale\n", which);
279         mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
310         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
280311         break;
281312      case MFP68901_TCR_TIMER_PULSE_16:
282313         logerror("MFP68901 #%u Timer A Pulse Width Mode : 16 Prescale\n", which);
283         mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
314         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
284315         break;
285316      case MFP68901_TCR_TIMER_PULSE_50:
286317         logerror("MFP68901 #%u Timer A Pulse Width Mode : 50 Prescale\n", which);
287         mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
318         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
288319         break;
289320      case MFP68901_TCR_TIMER_PULSE_64:
290321         logerror("MFP68901 #%u Timer A Pulse Width Mode : 64 Prescale\n", which);
291         mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
322         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
292323         break;
293324      case MFP68901_TCR_TIMER_PULSE_100:
294325         logerror("MFP68901 #%u Timer A Pulse Width Mode : 100 Prescale\n", which);
295         mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
326         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
296327         break;
297328      case MFP68901_TCR_TIMER_PULSE_200:
298329         logerror("MFP68901 #%u Timer A Pulse Width Mode : 200 Prescale\n", which);
299         mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
330         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_A], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
300331         break;
301332      }
302333
r861r862
319350      {
320351      case MFP68901_TCR_TIMER_DELAY_4:
321352         logerror("MFP68901 #%u Timer B Delay Mode : 4 Prescale\n", which);
322         mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
353         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
323354         break;
324355      case MFP68901_TCR_TIMER_DELAY_10:
325356         logerror("MFP68901 #%u Timer B Delay Mode : 10 Prescale\n", which);
326         mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
357         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
327358         break;
328359      case MFP68901_TCR_TIMER_DELAY_16:
329360         logerror("MFP68901 #%u Timer B Delay Mode : 16 Prescale\n", which);
330         mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
361         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
331362         break;
332363      case MFP68901_TCR_TIMER_DELAY_50:
333364         logerror("MFP68901 #%u Timer B Delay Mode : 50 Prescale\n", which);
334         mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
365         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
335366         break;
336367      case MFP68901_TCR_TIMER_DELAY_64:
337368         logerror("MFP68901 #%u Timer B Delay Mode : 64 Prescale\n", which);
338         mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
369         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
339370         break;
340371      case MFP68901_TCR_TIMER_DELAY_100:
341372         logerror("MFP68901 #%u Timer B Delay Mode : 100 Prescale\n", which);
342         mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
373         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
343374         break;
344375      case MFP68901_TCR_TIMER_DELAY_200:
345376         logerror("MFP68901 #%u Timer B Delay Mode : 200 Prescale\n", which);
346         mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
377         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
347378         break;
348379      case MFP68901_TCR_TIMER_STOPPED:
349380         logerror("MFP68901 #%u Timer B Stopped\n", which);
350         mame_timer_enable(mfp_p->timer_b, 0);
381         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_B], 0);
351382         break;
352383      case MFP68901_TCR_TIMER_EVENT:
353384         logerror("MFP68901 #%u Timer B Event Count Mode\n", which);
354         mame_timer_enable(mfp_p->timer_b, 0);
385         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_B], 0);
355386         break;
356387      case MFP68901_TCR_TIMER_PULSE_4:
357388         logerror("MFP68901 #%u Timer B Pulse Width Mode : 4 Prescale\n", which);
358         mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
389         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
359390         break;
360391      case MFP68901_TCR_TIMER_PULSE_10:
361392         logerror("MFP68901 #%u Timer B Pulse Width Mode : 10 Prescale\n", which);
362         mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
393         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
363394         break;
364395      case MFP68901_TCR_TIMER_PULSE_16:
365396         logerror("MFP68901 #%u Timer B Pulse Width Mode : 16 Prescale\n", which);
366         mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
397         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
367398         break;
368399      case MFP68901_TCR_TIMER_PULSE_50:
369400         logerror("MFP68901 #%u Timer B Pulse Width Mode : 50 Prescale\n", which);
370         mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
401         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
371402         break;
372403      case MFP68901_TCR_TIMER_PULSE_64:
373404         logerror("MFP68901 #%u Timer B Pulse Width Mode : 64 Prescale\n", which);
374         mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
405         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
375406         break;
376407      case MFP68901_TCR_TIMER_PULSE_100:
377408         logerror("MFP68901 #%u Timer B Pulse Width Mode : 100 Prescale\n", which);
378         mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
409         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
379410         break;
380411      case MFP68901_TCR_TIMER_PULSE_200:
381412         logerror("MFP68901 #%u Timer B Pulse Width Mode : 200 Prescale\n", which);
382         mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
413         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_B], time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
383414         break;
384415      }
385416
r861r862
402433      {
403434      case MFP68901_TCR_TIMER_DELAY_4:
404435         logerror("MFP68901 #%u Timer D Delay Mode : 4 Prescale\n", which);
405         mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
436         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_D], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
406437         break;
407438      case MFP68901_TCR_TIMER_DELAY_10:
408439         logerror("MFP68901 #%u Timer D Delay Mode : 10 Prescale\n", which);
409         mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
440         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_D], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
410441         break;
411442      case MFP68901_TCR_TIMER_DELAY_16:
412443         logerror("MFP68901 #%u Timer D Delay Mode : 16 Prescale\n", which);
413         mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
444         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_D], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
414445         break;
415446      case MFP68901_TCR_TIMER_DELAY_50:
416447         logerror("MFP68901 #%u Timer D Delay Mode : 50 Prescale\n", which);
417         mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
448         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_D], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
418449         break;
419450      case MFP68901_TCR_TIMER_DELAY_64:
420451         logerror("MFP68901 #%u Timer D Delay Mode : 64 Prescale\n", which);
421         mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
452         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_D], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
422453         break;
423454      case MFP68901_TCR_TIMER_DELAY_100:
424455         logerror("MFP68901 #%u Timer D Delay Mode : 100 Prescale\n", which);
425         mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
456         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_D], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
426457         break;
427458      case MFP68901_TCR_TIMER_DELAY_200:
428459         logerror("MFP68901 #%u Timer D Delay Mode : 200 Prescale\n", which);
429         mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
460         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_D], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
430461         break;
431462      case MFP68901_TCR_TIMER_STOPPED:
432463         logerror("MFP68901 #%u Timer D Stopped\n", which);
433         mame_timer_enable(mfp_p->timer_d, 0);
464         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_D], 0);
434465         break;
435466      }
436467
r861r862
438469      {
439470      case MFP68901_TCR_TIMER_DELAY_4:
440471         logerror("MFP68901 #%u Timer C Delay Mode : 4 Prescale\n", which);
441         mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
472         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_C], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
442473         break;
443474      case MFP68901_TCR_TIMER_DELAY_10:
444475         logerror("MFP68901 #%u Timer C Delay Mode : 10 Prescale\n", which);
445         mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
476         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_C], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
446477         break;
447478      case MFP68901_TCR_TIMER_DELAY_16:
448479         logerror("MFP68901 #%u Timer C Delay Mode : 16 Prescale\n", which);
449         mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
480         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_C], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
450481         break;
451482      case MFP68901_TCR_TIMER_DELAY_50:
452483         logerror("MFP68901 #%u Timer C Delay Mode : 50 Prescale\n", which);
453         mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
484         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_C], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
454485         break;
455486      case MFP68901_TCR_TIMER_DELAY_64:
456487         logerror("MFP68901 #%u Timer C Delay Mode : 64 Prescale\n", which);
457         mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
488         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_C], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
458489         break;
459490      case MFP68901_TCR_TIMER_DELAY_100:
460491         logerror("MFP68901 #%u Timer C Delay Mode : 100 Prescale\n", which);
461         mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
492         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_C], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
462493         break;
463494      case MFP68901_TCR_TIMER_DELAY_200:
464495         logerror("MFP68901 #%u Timer C Delay Mode : 200 Prescale\n", which);
465         mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
496         mame_timer_adjust(mfp_p->timer[MFP68901_TIMER_C], time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
466497         break;
467498      case MFP68901_TCR_TIMER_STOPPED:
468499         logerror("MFP68901 #%u Timer C Stopped\n", which);
469         mame_timer_enable(mfp_p->timer_c, 0);
500         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_C], 0);
470501         break;
471502      }
472503      break;
r861r862
475506
476507      mfp_p->tadr = data;
477508
478      if (!mame_timer_enabled(mfp_p->timer_a))
509      if (!mame_timer_enabled(mfp_p->timer[MFP68901_TIMER_A]))
479510      {
480511         mfp_p->tamc = data;
481512      }
r861r862
485516
486517      mfp_p->tbdr = data;
487518
488      if (!mame_timer_enabled(mfp_p->timer_b))
519      if (!mame_timer_enabled(mfp_p->timer[MFP68901_TIMER_B]))
489520      {
490521         mfp_p->tbmc = data;
491522      }
r861r862
495526
496527      mfp_p->tcdr = data;
497528
498      if (!mame_timer_enabled(mfp_p->timer_c))
529      if (!mame_timer_enabled(mfp_p->timer[MFP68901_TIMER_C]))
499530      {
500531         mfp_p->tcmc = data;
501532      }
r861r862
505536
506537      mfp_p->tddr = data;
507538
508      if (!mame_timer_enabled(mfp_p->timer_d))
539      if (!mame_timer_enabled(mfp_p->timer[MFP68901_TIMER_D]))
509540      {
510541         mfp_p->tdmc = data;
511542      }
r861r862
630661         mfp_p->tsr = data & 0x2f;
631662      }
632663      break;
633
634      logerror("MFP68901 TSR %x\n", data);
635      mfp_p->tsr = data;
636      break;
637664   case MFP68901_REGISTER_UDR:
638665      logerror("MFP68901 UDR %x\n", data);
639666      mfp_p->udr = data;
r861r862
652679
653680   memset(mfp_p, 0, sizeof(mfp));
654681
682   mfp_p->tsr = MFP68901_TSR_BUFFER_EMPTY;
683
655684   mfp_p->chip_clock = intf->chip_clock;
656685   mfp_p->timer_clock = intf->timer_clock;
657686   mfp_p->irq_callback = intf->irq_callback;
658687   mfp_p->gpio_r = intf->gpio_r;
659688   mfp_p->gpio_w = intf->gpio_w;
660689   
661   mfp_p->timer_a = mame_timer_alloc(timer_a);
662   mfp_p->timer_b = mame_timer_alloc(timer_b);
663   mfp_p->timer_c = mame_timer_alloc(timer_c);
664   mfp_p->timer_d = mame_timer_alloc(timer_d);
690   mfp_p->timer[MFP68901_TIMER_A] = mame_timer_alloc(timer_a);
691   mfp_p->timer[MFP68901_TIMER_B] = mame_timer_alloc(timer_b);
692   mfp_p->timer[MFP68901_TIMER_C] = mame_timer_alloc(timer_c);
693   mfp_p->timer[MFP68901_TIMER_D] = mame_timer_alloc(timer_d);
665694
666   mame_timer_reset(mfp_p->timer_a, time_never);
667   mame_timer_reset(mfp_p->timer_b, time_never);
668   mame_timer_reset(mfp_p->timer_c, time_never);
669   mame_timer_reset(mfp_p->timer_d, time_never);
695   mfp_p->irq_timer = mame_timer_alloc(mfp68901_tick);
696   mame_timer_adjust(mfp_p->irq_timer, time_zero, which, MAME_TIME_IN_HZ(mfp_p->chip_clock / 4));
670697
671698   state_save_register_item("mfp68901", which, mfp_p->gpip);
672699   state_save_register_item("mfp68901", which, mfp_p->aer);
r861r862
712739
713740   if (mfp_p->tamc == 0x01)
714741   {
742      mfp_p->tao = mfp_p->tao ? 0 : 1;
743
744      if (mfp_p->tao_w)
745      {
746         mfp_p->tao_w(which, mfp_p->tao);
747      }
748
715749      if (mfp_p->iera & MFP68901_IPRA_TIMER_A)
716750      {
717751         mfp_p->ipra |= MFP68901_IPRA_TIMER_A;
718
719         if (mfp_p->imra & MFP68901_IPRA_TIMER_A)
720         {
721            mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_TIMER_A);
722
723            if (mfp_p->tao)
724            {
725               mfp_p->tao = 0;
726            }
727            else
728            {
729               mfp_p->tao = 1;
730            }
731
732            if (mfp_p->tao_w)
733            {
734               mfp_p->tao_w(which, mfp_p->tao);
735            }
736         }
737752      }
738753
739754      mfp_p->tamc = mfp_p->tadr;
r861r862
750765
751766   if (mfp_p->tbmc == 0x01)
752767   {
768      mfp_p->tbo = mfp_p->tbo ? 0 : 1;
769
770      if (mfp_p->tbo_w)
771      {
772         mfp_p->tbo_w(which, mfp_p->tbo);
773      }
774
753775      if (mfp_p->iera & MFP68901_IPRA_TIMER_B)
754776      {
755777         mfp_p->ipra |= MFP68901_IPRA_TIMER_B;
756
757         if (mfp_p->imra & MFP68901_IPRA_TIMER_B)
758         {
759            mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_TIMER_B);
760           
761            if (mfp_p->tbo)
762            {
763               mfp_p->tbo = 0;
764            }
765            else
766            {
767               mfp_p->tbo = 1;
768            }
769
770            if (mfp_p->tbo_w)
771            {
772               mfp_p->tbo_w(which, mfp_p->tbo);
773            }
774         }
775778      }
776779
777780      mfp_p->tbmc = mfp_p->tbdr;
r861r862
788791
789792   if (mfp_p->tcmc == 0x01)
790793   {
794      mfp_p->tco = mfp_p->tco ? 0 : 1;
795
796      if (mfp_p->tco_w)
797      {
798         mfp_p->tco_w(which, mfp_p->tco);
799      }
800
791801      if (mfp_p->ierb & MFP68901_IPRB_TIMER_C)
792802      {
793803         mfp_p->iprb |= MFP68901_IPRB_TIMER_C;
794
795         if (mfp_p->imrb & MFP68901_IPRB_TIMER_C)
796         {
797            mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_TIMER_C);
798           
799            if (mfp_p->tco)
800            {
801               mfp_p->tco = 0;
802            }
803            else
804            {
805               mfp_p->tco = 1;
806            }
807
808            if (mfp_p->tco_w)
809            {
810               mfp_p->tco_w(which, mfp_p->tco);
811            }
812         }
813804      }
814805
815806      mfp_p->tcmc = mfp_p->tcdr;
r861r862
826817
827818   if (mfp_p->tdmc == 0x01)
828819   {
820      mfp_p->tdo = mfp_p->tdo ? 0 : 1;
821
822      if (mfp_p->tdo_w)
823      {
824         mfp_p->tdo_w(which, mfp_p->tdo);
825      }
826
829827      if (mfp_p->ierb & MFP68901_IPRB_TIMER_D)
830828      {
831829         mfp_p->iprb |= MFP68901_IPRB_TIMER_D;
832
833         if (mfp_p->imrb & MFP68901_IPRB_TIMER_D)
834         {
835            mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_TIMER_D);
836           
837            if (mfp_p->tdo)
838            {
839               mfp_p->tdo = 0;
840            }
841            else
842            {
843               mfp_p->tdo = 1;
844            }
845
846            if (mfp_p->tdo_w)
847            {
848               mfp_p->tdo_w(which, mfp_p->tdo);
849            }
850         }
851830      }
852831
853832      mfp_p->tdmc = mfp_p->tddr;
r861r862
875854      return;
876855
877856   case MFP68901_TCR_TIMER_EVENT:
878      if (mfp_p->aer & MFP68901_AER_GPIP_4)
857      if (BIT(mfp_p->aer, 4))
879858      {
880859         // count down on 0->1 transition
881860         if (mfp_p->tai == 0 && value == 1)
r861r862
904883   case MFP68901_TCR_TIMER_PULSE_200:
905884      if (BIT(mfp_p->aer, 4) == value)
906885      {
907         mame_timer_enable(mfp_p->timer_a, 1);
886         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_A], 1);
908887      }
909888      else
910889      {
911         mame_timer_enable(mfp_p->timer_a, 0);
890         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_A], 0);
912891      }
913892
914      if (mfp_p->aer & MFP68901_AER_GPIP_4)
893      if (BIT(mfp_p->aer, 4))
915894      {
916895         // interrupt on 1->0 transition
917896         if (mfp_p->tai == 1 && value == 0)
r861r862
919898            if (mfp_p->ierb & MFP68901_IPRB_GPIP_4)
920899            {
921900               mfp_p->iprb |= MFP68901_IPRB_GPIP_4;
922
923               if (mfp_p->imrb & MFP68901_IPRB_GPIP_4)
924               {
925                  mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_GPI4);
926               }
927901            }
928902         }
929903      }
r861r862
935909            if (mfp_p->ierb & MFP68901_IPRB_GPIP_4)
936910            {
937911               mfp_p->iprb |= MFP68901_IPRB_GPIP_4;
938
939               if (mfp_p->imrb & MFP68901_IPRB_GPIP_4)
940               {
941                  mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_GPI4);
942               }
943912            }
944913         }
945914      }
r861r862
966935      return;
967936
968937   case MFP68901_TCR_TIMER_EVENT:
969      if (mfp_p->aer & MFP68901_AER_GPIP_3)
938      if (BIT(mfp_p->aer, 3))
970939      {
971940         // count down on 0->1 transition
972941         if (mfp_p->tbi == 0 && value == 1)
r861r862
995964   case MFP68901_TCR_TIMER_PULSE_200:
996965      if (BIT(mfp_p->aer, 3) == value)
997966      {
998         mame_timer_enable(mfp_p->timer_b, 1);
967         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_B], 1);
999968      }
1000969      else
1001970      {
1002         mame_timer_enable(mfp_p->timer_b, 0);
971         mame_timer_enable(mfp_p->timer[MFP68901_TIMER_B], 0);
1003972      }
1004973
1005      if (mfp_p->aer & MFP68901_AER_GPIP_3)
974      if (BIT(mfp_p->aer, 3))
1006975      {
1007976         // interrupt on 1->0 transition
1008977         if (mfp_p->tbi == 1 && value == 0)
r861r862
1010979            if (mfp_p->ierb & MFP68901_IPRB_GPIP_3)
1011980            {
1012981               mfp_p->iprb |= MFP68901_IPRB_GPIP_3;
1013
1014               if (mfp_p->imrb & MFP68901_IPRB_GPIP_3)
1015               {
1016                  mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_GPI3);
1017               }
1018982            }
1019983         }
1020984      }
r861r862
1026990            if (mfp_p->ierb & MFP68901_IPRB_GPIP_3)
1027991            {
1028992               mfp_p->iprb |= MFP68901_IPRB_GPIP_3;
1029
1030               if (mfp_p->imrb & MFP68901_IPRB_GPIP_3)
1031               {
1032                  mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_GPI3);
1033               }
1034993            }
1035994         }
1036995      }
r861r862
1040999   }
10411000}
10421001
1043static const int GPIO_MASK[] =
1044{
1045   MFP68901_IPRB_GPIP_0, MFP68901_IPRB_GPIP_1, MFP68901_IPRB_GPIP_2, MFP68901_IPRB_GPIP_3,
1046   MFP68901_IPRB_GPIP_4, MFP68901_IPRB_GPIP_5, MFP68901_IPRA_GPIP_6, MFP68901_IPRA_GPIP_7
1047};
1048
1049static const int GPIO_VECTOR[] =
1050{
1051   MFP68901_INT_GPI0, MFP68901_INT_GPI1, MFP68901_INT_GPI2, MFP68901_INT_GPI3,
1052   MFP68901_INT_GPI4, MFP68901_INT_GPI5, MFP68901_INT_GPI6, MFP68901_INT_GPI7
1053};
1054
1055void mfp68901_gpio_w(int which, int line, int value)
1056{
1057   mfp_68901 *mfp_p = &mfp[which];
1058   UINT8 *ier, *ipr, *imr;
1059   int lvalue, rvalue;
1060
1061   if (line < 6)
1062   {
1063      ier = &mfp_p->ierb;
1064      ipr = &mfp_p->iprb;
1065      imr = &mfp_p->imrb;
1066   }
1067   else
1068   {
1069      ier = &mfp_p->iera;
1070      ipr = &mfp_p->ipra;
1071      imr = &mfp_p->imra;
1072   }
1073
1074   if (mfp_p->aer & (1 << line))
1075   {
1076      lvalue = mfp_p->gpip & (1 << line);
1077      rvalue = value;
1078   }
1079   else
1080   {
1081      lvalue = value;
1082      rvalue = mfp_p->gpip & (1 << line);
1083   }
1084
1085   if (lvalue == 1 && rvalue == 0)
1086   {
1087      if (*ier & GPIO_MASK[line])
1088      {
1089         (*ipr) |= GPIO_MASK[line];
1090
1091         if (*imr & GPIO_MASK[line])
1092         {
1093            mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | GPIO_VECTOR[line]);
1094         }
1095      }
1096   }
1097}
1098
10991002static TIMER_CALLBACK( timer_a )
11001003{
1101   int which = param;
1102
1103   mfp68901_timer_count_a(which);
1004   mfp68901_timer_count_a(param);
11041005}
11051006
11061007static TIMER_CALLBACK( timer_b )
11071008{
1108   int which = param;
1109
1110   mfp68901_timer_count_b(which);
1009   mfp68901_timer_count_b(param);
11111010}
11121011
11131012static TIMER_CALLBACK( timer_c )
11141013{
1115   int which = param;
1116
1117   mfp68901_timer_count_c(which);
1014   mfp68901_timer_count_c(param);
11181015}
11191016
11201017static TIMER_CALLBACK( timer_d )
11211018{
1122   int which = param;
1123
1124   mfp68901_timer_count_d(which);
1019   mfp68901_timer_count_d(param);
11251020}
11261021
1127READ16_HANDLER( mfp68901_0_register16_r ) { return mfp68901_register_r(0, offset); }
1128READ16_HANDLER( mfp68901_1_register16_r ) { return mfp68901_register_r(1, offset); }
1129READ16_HANDLER( mfp68901_2_register16_r ) { return mfp68901_register_r(2, offset); }
1130READ16_HANDLER( mfp68901_3_register16_r ) { return mfp68901_register_r(3, offset); }
1022READ16_HANDLER( mfp68901_0_register_msb_r ) { return mfp68901_register_r(0, offset) << 8; }
1023READ16_HANDLER( mfp68901_1_register_msb_r ) { return mfp68901_register_r(1, offset) << 8; }
1024READ16_HANDLER( mfp68901_2_register_msb_r ) { return mfp68901_register_r(2, offset) << 8; }
1025READ16_HANDLER( mfp68901_3_register_msb_r ) { return mfp68901_register_r(3, offset) << 8; }
11311026
1027READ16_HANDLER( mfp68901_0_register_lsb_r ) { return mfp68901_register_r(0, offset); }
1028READ16_HANDLER( mfp68901_1_register_lsb_r ) { return mfp68901_register_r(1, offset); }
1029READ16_HANDLER( mfp68901_2_register_lsb_r ) { return mfp68901_register_r(2, offset); }
1030READ16_HANDLER( mfp68901_3_register_lsb_r ) { return mfp68901_register_r(3, offset); }
1031
11321032WRITE16_HANDLER( mfp68901_0_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset, (data >> 8) & 0xff); }
11331033WRITE16_HANDLER( mfp68901_1_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset, (data >> 8) & 0xff); }
11341034WRITE16_HANDLER( mfp68901_2_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset, (data >> 8) & 0xff); }
src/mess/machine/68901mfp.h
r861r862
7070   MFP68901_INT_GPI7
7171};
7272
73enum
74{
75   MFP68901_TIMER_A = 0,
76   MFP68901_TIMER_B,
77   MFP68901_TIMER_C,
78   MFP68901_TIMER_D
79};
80
7381#define MFP68901_AER_GPIP_0            0x01
7482#define MFP68901_AER_GPIP_1            0x02
7583#define MFP68901_AER_GPIP_2            0x04
r861r862
157165void mfp68901_tbi_w(int which, int value);
158166void mfp68901_gpio_w(int which, int line, int value);
159167
160READ16_HANDLER( mfp68901_0_register16_r );
161READ16_HANDLER( mfp68901_1_register16_r );
162READ16_HANDLER( mfp68901_2_register16_r );
163READ16_HANDLER( mfp68901_3_register16_r );
168READ16_HANDLER( mfp68901_0_register_msb_r );
169READ16_HANDLER( mfp68901_1_register_msb_r );
170READ16_HANDLER( mfp68901_2_register_msb_r );
171READ16_HANDLER( mfp68901_3_register_msb_r );
164172
173READ16_HANDLER( mfp68901_0_register_lsb_r );
174READ16_HANDLER( mfp68901_1_register_lsb_r );
175READ16_HANDLER( mfp68901_2_register_lsb_r );
176READ16_HANDLER( mfp68901_3_register_lsb_r );
177
165178WRITE16_HANDLER( mfp68901_0_register_msb_w );
166179WRITE16_HANDLER( mfp68901_1_register_msb_w );
167180WRITE16_HANDLER( mfp68901_2_register_msb_w );
src/mess/drivers/atarist.c
r861r862
476476   AM_RANGE(0xff8608, 0xff860d) AM_READWRITE(atarist_fdc_dma_base_r, atarist_fdc_dma_base_w)
477477   AM_RANGE(0xff8800, 0xff8801) AM_READWRITE(AY8910_read_port_0_msb_r, AY8910_control_port_0_msb_w)
478478   AM_RANGE(0xff8802, 0xff8803) AM_WRITE(AY8910_write_port_0_msb_w)
479   AM_RANGE(0xfffa00, 0xfffa2f) AM_READWRITE(mfp68901_0_register16_r, mfp68901_0_register_lsb_w)
479   AM_RANGE(0xfffa00, 0xfffa2f) AM_READWRITE(mfp68901_0_register_lsb_r, mfp68901_0_register_lsb_w)
480480   AM_RANGE(0xfffc00, 0xfffc01) AM_READWRITE(acia6850_0_stat_msb_r, acia6850_0_ctrl_msb_w)
481481   AM_RANGE(0xfffc02, 0xfffc03) AM_READWRITE(acia6850_0_data_msb_r, acia6850_0_data_msb_w)
482482   AM_RANGE(0xfffc04, 0xfffc05) AM_READWRITE(acia6850_1_stat_msb_r, acia6850_1_ctrl_msb_w)
r861r862
501501   AM_RANGE(0xff8800, 0xff8801) AM_READWRITE(AY8910_read_port_0_msb_r, AY8910_control_port_0_msb_w)
502502   AM_RANGE(0xff8802, 0xff8803) AM_WRITE(AY8910_write_port_0_msb_w)
503503//   AM_RANGE(0xff8a00, 0xff8a3f) AM_READWRITE(atarist_blitter_r, atarist_blitter_w)
504   AM_RANGE(0xfffa00, 0xfffa3f) AM_READWRITE(mfp68901_0_register16_r, mfp68901_0_register_msb_w)
504   AM_RANGE(0xfffa00, 0xfffa3f) AM_READWRITE(mfp68901_0_register_lsb_r, mfp68901_0_register_msb_w)
505505   AM_RANGE(0xfffc00, 0xfffc01) AM_READWRITE(acia6850_0_stat_msb_r, acia6850_0_ctrl_msb_w)
506506   AM_RANGE(0xfffc02, 0xfffc03) AM_READWRITE(acia6850_0_data_msb_r, acia6850_0_data_msb_w)
507507   AM_RANGE(0xfffc04, 0xfffc05) AM_READWRITE(acia6850_1_stat_msb_r, acia6850_1_ctrl_msb_w)
r861r862
546546   AM_RANGE(0xff9216, 0xff9217) AM_READ(port_tag_to_handler16("PADDLE1Y"))
547547   AM_RANGE(0xff9220, 0xff9221) AM_READ(port_tag_to_handler16("GUNX"))
548548   AM_RANGE(0xff9222, 0xff9223) AM_READ(port_tag_to_handler16("GUNY"))
549   AM_RANGE(0xfffa00, 0xfffa2f) AM_READWRITE(mfp68901_0_register16_r, mfp68901_0_register_lsb_w)
549   AM_RANGE(0xfffa00, 0xfffa2f) AM_READWRITE(mfp68901_0_register_lsb_r, mfp68901_0_register_lsb_w)
550550   AM_RANGE(0xfffc00, 0xfffc01) AM_READWRITE(acia6850_0_stat_msb_r, acia6850_0_ctrl_msb_w)
551551   AM_RANGE(0xfffc02, 0xfffc03) AM_READWRITE(acia6850_0_data_msb_r, acia6850_0_data_msb_w)
552552   AM_RANGE(0xfffc04, 0xfffc05) AM_READWRITE(acia6850_1_stat_msb_r, acia6850_1_ctrl_msb_w)
r861r862
583583//   AM_RANGE(0xff8924, 0xff8925) AM_READWRITE(atariste_mixer_mask_r, atariste_mixer_mask_w)
584584//   AM_RANGE(0xff8a00, 0xff8a3f) AM_READWRITE(atariste_blitter_r, atariste_blitter_w)
585585//   AM_RANGE(0xff8e20, 0xff8e21) AM_READWRITE(megaste_cache_r, megaste_cache_w)
586   AM_RANGE(0xfffa00, 0xfffa3f) AM_READWRITE(mfp68901_0_register16_r, mfp68901_0_register_msb_w)
586   AM_RANGE(0xfffa00, 0xfffa3f) AM_READWRITE(mfp68901_0_register_lsb_r, mfp68901_0_register_msb_w)
587587//   AM_RANGE(0xfffa40, 0xfffa5f) AM_READWRITE(megaste_fpu_r, megaste_fpu_w)
588588//   AM_RANGE(0xff8c80, 0xff8c87) AM_READWRITE(megaste_scc8530_r, megaste_scc8530_w)
589589   AM_RANGE(0xfffc00, 0xfffc01) AM_READWRITE(acia6850_0_stat_msb_r, acia6850_0_ctrl_msb_w)
r861r862
919919
920920static struct mfp68901_interface mfp_intf =
921921{
922   Y2/32,
922   Y2/8,
923923   Y1,
924924   NULL,
925925   NULL,

Previous 15994 Revisions Next


© 1998-2018 The MESS Team