Previous 199869 Revisions Next

r24547 Monday 29th July, 2013 at 04:27:57 UTC by R. Belmont
(MESS) Mac: convert ASC to devcb2 IRQ output, some minor modernization. [R. Belmont]
[src/emu/sound]asc.c asc.h
[src/mess/drivers]mac.c
[src/mess/includes]mac.h
[src/mess/machine]mac.c

trunk/src/emu/sound/asc.c
r24546r24547
4646asc_device::asc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
4747   : device_t(mconfig, ASC, "ASC", tag, owner, clock, "asc", __FILE__),
4848      device_sound_interface(mconfig, *this),
49      m_chip_type(0),
50      m_irq_cb(NULL)
49      write_irq(*this),
50      m_chip_type(0)
5151{
5252}
5353
r24546r24547
6464}
6565
6666//-------------------------------------------------
67//  static_set_type - configuration helper to set
68//  the IRQ callback
69//-------------------------------------------------
70
71
72void asc_device::static_set_irqf(device_t &device, void (*irqf)(device_t *device, int state))
73{
74   asc_device &asc = downcast<asc_device &>(device);
75   asc.m_irq_cb = irqf;
76}
77
78//-------------------------------------------------
7967//  device_start - device-specific startup
8068//-------------------------------------------------
8169
r24546r24547
9987   save_item(NAME(m_regs));
10088   save_item(NAME(m_phase));
10189   save_item(NAME(m_incr));
90
91   write_irq.resolve_safe();
10292}
10393
10494
r24546r24547
183173                  {
184174                     m_regs[R_FIFOSTAT-0x800] |= 0x4;    // fifo less than half full
185175                     m_regs[R_FIFOSTAT-0x800] |= 0x8;    // just pass the damn test
186                     if (m_irq_cb)
187                     {
188                        m_irq_cb(this, 1);
189                     }
176                     write_irq(ASSERT_LINE);
190177                  }
191178                  break;
192179
r24546r24547
194181                  if (m_fifo_cap_a == 0x1ff)
195182                  {
196183                     m_regs[R_FIFOSTAT-0x800] |= 1;  // fifo A half-empty
197                     if (m_irq_cb)
198                     {
199                        m_irq_cb(this, 1);
200                     }
184                     write_irq(ASSERT_LINE);
201185                  }
202186                  else if (m_fifo_cap_a == 0x1)   // fifo A fully empty
203187                  {
204188                     m_regs[R_FIFOSTAT-0x800] |= 2;  // fifo A empty
205                     if (m_irq_cb)
206                     {
207                        m_irq_cb(this, 1);
208                     }
189                     write_irq(ASSERT_LINE);
209190                  }
210191
211192                  if (m_fifo_cap_b == 0x1ff)
212193                  {
213194                     m_regs[R_FIFOSTAT-0x800] |= 4;  // fifo B half-empty
214                     if (m_irq_cb)
215                     {
216                        m_irq_cb(this, 1);
217                     }
195                     write_irq(ASSERT_LINE);
218196                  }
219197                  else if (m_fifo_cap_b == 0x1)   // fifo B fully empty
220198                  {
221199                     m_regs[R_FIFOSTAT-0x800] |= 8;  // fifo B empty
222                     if (m_irq_cb)
223                     {
224                        m_irq_cb(this, 1);
225                     }
200                     write_irq(ASSERT_LINE);
226201                  }
227202                  break;
228203            }
r24546r24547
356331            m_regs[R_FIFOSTAT-0x800] = 0;
357332
358333            // reading this clears interrupts
359            if (m_irq_cb)
360            {
361               m_irq_cb(this, 0);
362            }
334            write_irq(CLEAR_LINE);
363335
364336            return rv;
365337
trunk/src/emu/sound/asc.h
r24546r24547
5151#define MCFG_ASC_TYPE(_type) \
5252   asc_device::static_set_type(*device, _type);
5353#define MCFG_IRQ_FUNC(_irqf) \
54   asc_device::static_set_irqf(*device, _irqf);
54   downcast<asc_device *>(device)->set_irqf(DEVCB2_##_irqf);
5555
5656//**************************************************************************
5757//  TYPE DEFINITIONS
r24546r24547
6767
6868   // inline configuration helpers
6969   static void static_set_type(device_t &device, int type);
70   static void static_set_irqf(device_t &device, void (*irqf)(device_t *device, int state));
7170
71
72   template<class _write> void set_irqf(_write wr)
73   {
74      write_irq.set_callback(wr);
75   }
76
77   devcb2_write_line write_irq;
78
7279   DECLARE_READ8_MEMBER(read);
7380   DECLARE_WRITE8_MEMBER(write);
7481
r24546r24547
104111
105112   // inline data
106113   UINT8   m_chip_type;
107   void (*m_irq_cb)(device_t *device, int state);
108114
109115   UINT8   m_fifo_a[0x400];
110116   UINT8   m_fifo_b[0x400];
trunk/src/mess/drivers/mac.c
r24546r24547
10511051
10521052   /* sound hardware */
10531053   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1054   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq)
1054   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq))
10551055   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
10561056   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
10571057
r24546r24547
10871087
10881088   /* sound hardware */
10891089   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1090   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq)
1090   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq))
10911091   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
10921092   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
10931093
r24546r24547
11371137
11381138   /* sound hardware */
11391139   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1140   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq)
1140   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq))
11411141   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
11421142   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
11431143
r24546r24547
12061206   MCFG_NUBUS_BUS_ADD("pds", "maincpu", nubus_intf)
12071207   MCFG_NUBUS_SLOT_ADD("pds","lcpds", mac_lcpds_cards, NULL)
12081208
1209   MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_V8, mac_asc_irq)
1209   MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_V8, WRITELINE(mac_state, mac_asc_irq))
12101210   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
12111211   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
12121212
r24546r24547
12471247   MCFG_RAM_DEFAULT_SIZE("4M")
12481248   MCFG_RAM_EXTRA_OPTIONS("8M,16M,32M,48M,64M,80M")
12491249
1250   MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_SONORA, mac_asc_irq)
1250   MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_SONORA, WRITELINE(mac_state, mac_asc_irq))
12511251   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
12521252   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
12531253
r24546r24547
13451345
13461346   /* sound hardware */
13471347   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1348   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq)
1348   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq))
13491349   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
13501350   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
13511351
r24546r24547
13971397
13981398   /* sound hardware */
13991399   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1400   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq)
1400   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq))
14011401   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
14021402   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
14031403
r24546r24547
14651465
14661466   /* sound hardware */
14671467   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1468   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, mac_asc_irq)
1468   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_ASC, WRITELINE(mac_state, mac_asc_irq))
14691469   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
14701470   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
14711471
r24546r24547
15371537   MCFG_SCREEN_VISIBLE_AREA(0, MAC_H_VIS-1, 0, MAC_V_VIS-1)
15381538   MCFG_SCREEN_UPDATE_DRIVER(mac_state, screen_update_macrbv)
15391539
1540   MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_EAGLE, mac_asc_irq)
1540   MCFG_ASC_REPLACE("asc", C15M, ASC_TYPE_EAGLE, WRITELINE(mac_state, mac_asc_irq))
15411541   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
15421542   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
15431543
r24546r24547
16791679
16801680   /* sound hardware */
16811681   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1682   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_EASC, mac_asc_irq)
1682   MCFG_ASC_ADD("asc", C15M, ASC_TYPE_EASC, WRITELINE(mac_state, mac_asc_irq))
16831683   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
16841684   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
16851685
trunk/src/mess/machine/mac.c
r24546r24547
107107#define AUDIO_IS_CLASSIC (m_model <= MODEL_MAC_CLASSIC)
108108#define MAC_HAS_VIA2    ((m_model >= MODEL_MAC_II) && (m_model != MODEL_MAC_IIFX))
109109
110#define ASC_INTS_RBV    ((mac->m_model >= MODEL_MAC_IICI) && (mac->m_model <= MODEL_MAC_IIVI)) || ((mac->m_model >= MODEL_MAC_LC) && (mac->m_model <= MODEL_MAC_LC_580))
111110#define INTS_RBV    ((m_model >= MODEL_MAC_IICI) && (m_model <= MODEL_MAC_IIVI)) || ((m_model >= MODEL_MAC_LC) && (m_model <= MODEL_MAC_LC_580))
112111
113112#ifdef MAME_DEBUG
r24546r24547
304303   this->field_interrupts();
305304}
306305
307void mac_asc_irq(device_t *device, int state)
306WRITE_LINE_MEMBER(mac_state::mac_asc_irq)
308307{
309   mac_state *mac = device->machine().driver_data<mac_state>();
310
311   if (ASC_INTS_RBV)
308   if (INTS_RBV)
312309   {
313      if (state)
310      if (state == ASSERT_LINE)
314311      {
315         mac->m_rbv_regs[3] |= 0x10; // any VIA 2 interrupt | sound interrupt
316         mac->rbv_recalc_irqs();
312         m_rbv_regs[3] |= 0x10; // any VIA 2 interrupt | sound interrupt
313         rbv_recalc_irqs();
317314      }
318315      else
319316      {
320         mac->m_rbv_regs[3] &= ~0x10;
321         mac->rbv_recalc_irqs();
317         m_rbv_regs[3] &= ~0x10;
318         rbv_recalc_irqs();
322319      }
323320   }
324   else if ((mac->m_model == MODEL_MAC_PORTABLE) || (mac->m_model == MODEL_MAC_PB100))
321   else if ((m_model == MODEL_MAC_PORTABLE) || (m_model == MODEL_MAC_PB100))
325322   {
326323//      m_asc_interrupt = state;
327//      mac->field_interrupts();
324//      field_interrupts();
328325   }
329   else if ((mac->m_model >= MODEL_MAC_II) && (mac->m_model != MODEL_MAC_IIFX))
326   else if ((m_model >= MODEL_MAC_II) && (m_model != MODEL_MAC_IIFX))
330327   {
331      mac->m_via2->write_cb1(state^1);
328      m_via2->write_cb1(state^1);
332329   }
333330}
334331
trunk/src/mess/includes/mac.h
r24546r24547
143143extern const via6522_interface mac_via6522_2_intf;
144144extern const via6522_interface mac_via6522_adb_intf;
145145
146void mac_asc_irq(device_t *device, int state);
147146void mac_fdc_set_enable_lines(device_t *device, int enable_mask);
148147
149148/*----------- defined in audio/mac.c -----------*/
r24546r24547
408407   DECLARE_WRITE_LINE_MEMBER(adb_linechange_w);
409408
410409   DECLARE_WRITE_LINE_MEMBER(mac_scsi_irq);
410   DECLARE_WRITE_LINE_MEMBER(mac_asc_irq);
411411
412412   DECLARE_DIRECT_UPDATE_MEMBER(overlay_opbaseoverride);
413413private:

Previous 199869 Revisions Next


© 1997-2024 The MAME Team