Previous 199869 Revisions Next

r20298 Thursday 17th January, 2013 at 14:14:29 UTC by Phil Bennett
05104: slither, slithera: [debug] Error: bad downcast<> or device<> [Phil Bennett]

qix.c - Resolve device references at initialisation where possible [Phil Bennett]
[src/mame/audio]qix.c
[src/mame/drivers]qix.c
[src/mame/includes]qix.h
[src/mame/machine]qix.c

trunk/src/mame/drivers/qix.c
r20297r20298
12561256
12571257DRIVER_INIT_MEMBER(qix_state,kram3)
12581258{
1259   address_space &mainspace = machine().device("maincpu")->memory().space(AS_PROGRAM);
1260   address_space &videospace = machine().device("videocpu")->memory().space(AS_PROGRAM);
1259   address_space &mainspace = m_maincpu->space(AS_PROGRAM);
1260   address_space &videospace = m_videocpu->space(AS_PROGRAM);
12611261   //const UINT8 *patch;
12621262   UINT8 *rom, *decrypted;
12631263   int i;
trunk/src/mame/audio/qix.c
r20297r20298
9999}
100100
101101
102static TIMER_CALLBACK( deferred_sndpia1_porta_w )
102TIMER_CALLBACK_MEMBER(qix_state::deferred_sndpia1_porta_w)
103103{
104   pia6821_device *device = (pia6821_device *)ptr;
105   device->porta_w(param);
104   m_sndpia1->porta_w(param);
106105}
107106
108107
109108WRITE8_MEMBER(qix_state::sync_sndpia1_porta_w)
110109{
111   device_t *device = machine().device("sndpia1");
112110   /* we need to synchronize this so the sound CPU doesn't drop anything important */
113   machine().scheduler().synchronize(FUNC(deferred_sndpia1_porta_w), data, (void *)downcast<pia6821_device *>(device));
111   machine().scheduler().synchronize(timer_expired_delegate(FUNC(qix_state::deferred_sndpia1_porta_w), this), data);
114112}
115113
116114
r20297r20298
130128
131129WRITE_LINE_MEMBER(qix_state::qix_pia_dint)
132130{
133   pia6821_device *pia = downcast<pia6821_device *>(machine().device("sndpia0"));
134   int combined_state = pia->irq_a_state() | pia->irq_b_state();
131   int combined_state = m_sndpia0->irq_a_state() | m_sndpia0->irq_b_state();
135132
136133   /* DINT is connected to the data CPU's IRQ line */
137   machine().device("maincpu")->execute().set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
134   m_maincpu->set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
138135}
139136
140137
141138WRITE_LINE_MEMBER(qix_state::qix_pia_sint)
142139{
143   pia6821_device *pia = downcast<pia6821_device *>(machine().device("sndpia1"));
144   int combined_state = pia->irq_a_state() | pia->irq_b_state();
140   int combined_state = m_sndpia1->irq_a_state() | m_sndpia1->irq_b_state();
145141
146142   /* SINT is connected to the sound CPU's IRQ line */
147143   machine().device("audiocpu")->execute().set_input_line(M6800_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
trunk/src/mame/machine/qix.c
r20297r20298
226226
227227WRITE_LINE_MEMBER(qix_state::qix_vsync_changed)
228228{
229   pia6821_device *pia = machine().device<pia6821_device>("sndpia0");
230   pia->cb1_w(state);
229   m_sndpia0->cb1_w(state);
231230}
232231
233232
r20297r20298
255254
256255WRITE8_MEMBER(qix_state::qix_data_firq_w)
257256{
258   machine().device("maincpu")->execute().set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
257   m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
259258}
260259
261260
262261WRITE8_MEMBER(qix_state::qix_data_firq_ack_w)
263262{
264   machine().device("maincpu")->execute().set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
263   m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
265264}
266265
267266
268267READ8_MEMBER(qix_state::qix_data_firq_r)
269268{
270   machine().device("maincpu")->execute().set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
269   m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
271270   return 0xff;
272271}
273272
274273
275274READ8_MEMBER(qix_state::qix_data_firq_ack_r)
276275{
277   machine().device("maincpu")->execute().set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
276   m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
278277   return 0xff;
279278}
280279
r20297r20298
288287
289288WRITE8_MEMBER(qix_state::qix_video_firq_w)
290289{
291   machine().device("videocpu")->execute().set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
290   m_videocpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
292291}
293292
294293
295294WRITE8_MEMBER(qix_state::qix_video_firq_ack_w)
296295{
297   machine().device("videocpu")->execute().set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
296   m_videocpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
298297}
299298
300299
301300READ8_MEMBER(qix_state::qix_video_firq_r)
302301{
303   machine().device("videocpu")->execute().set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
302   m_videocpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
304303   return 0xff;
305304}
306305
307306
308307READ8_MEMBER(qix_state::qix_video_firq_ack_r)
309308{
310   machine().device("videocpu")->execute().set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
309   m_videocpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
311310   return 0xff;
312311}
313312
r20297r20298
427426
428427TIMER_CALLBACK_MEMBER(qix_state::pia_w_callback)
429428{
430   pia6821_device *device = (pia6821_device *)ptr;
431   device->write(device->machine().driver_data()->generic_space(), param >> 8, param & 0xff);
429   m_pia0->write(generic_space(), param >> 8, param & 0xff);
432430}
433431
434432
r20297r20298
436434{
437435   /* make all the CPUs synchronize, and only AFTER that write the command to the PIA */
438436   /* otherwise the 68705 will miss commands */
439   machine().scheduler().synchronize(timer_expired_delegate(FUNC(qix_state::pia_w_callback),this), data | (offset << 8), (void *)downcast<pia6821_device *>(machine().device("pia0")));
437   machine().scheduler().synchronize(timer_expired_delegate(FUNC(qix_state::pia_w_callback), this), data | (offset << 8));
440438}
441439
442440
r20297r20298
461459 *
462460 *************************************/
463461
464   WRITE8_MEMBER(qix_state::slither_76489_0_w)
462WRITE8_MEMBER(qix_state::slither_76489_0_w)
465463{
466464   /* write to the sound chip */
467   m_sn1->write(space.machine().device<legacy_cpu_device>("maincpu")->space(), 0, data);
465   m_sn1->write(generic_space(), 0, data);
468466
469467   /* clock the ready line going back into CB1 */
470   pia6821_device *pia = downcast<pia6821_device *>(machine().device("pia1"));
471   pia->cb1_w(0);
472   pia->cb1_w(1);
468   m_pia1->cb1_w(0);
469   m_pia1->cb1_w(1);
473470}
474471
475472
476473WRITE8_MEMBER(qix_state::slither_76489_1_w)
477474{
478475   /* write to the sound chip */
479   m_sn2->write(machine().device<legacy_cpu_device>("maincpu")->space(), 0, data);
476   m_sn2->write(generic_space(), 0, data);
480477
481478   /* clock the ready line going back into CB1 */
482   pia6821_device *pia = downcast<pia6821_device *>(machine().device("pia2"));
483   pia->cb1_w(0);
484   pia->cb1_w(1);
479   m_pia2->cb1_w(0);
480   m_pia2->cb1_w(1);
485481}
486482
487483
trunk/src/mame/includes/qix.h
r20297r20298
66
77***************************************************************************/
88
9#include "cpu/m6809/m6809.h"
910#include "video/mc6845.h"
1011#include "machine/6821pia.h"
1112#include "sound/sn76496.h"
r20297r20298
2526public:
2627   qix_state(const machine_config &mconfig, device_type type, const char *tag)
2728      : driver_device(mconfig, type, tag) ,
29      m_maincpu(*this, "maincpu"),
30      m_videocpu(*this, "videocpu"),
31      m_pia0(*this, "pia0"),
32      m_pia1(*this, "pia1"),
33      m_pia2(*this, "pia2"),
34      m_sndpia0(*this, "sndpia0"),
35      m_sndpia1(*this, "sndpia1"),
36      m_sndpia2(*this, "sndpia2"),
2837      m_sn1 (*this, "sn1"),
2938      m_sn2 (*this, "sn2"),
3039      m_68705_port_out(*this, "68705_port_out"),
r20297r20298
3746      m_discrete(*this, "discrete") { }
3847
3948   /* devices */
49   required_device<m6809_device> m_maincpu;
50   required_device<m6809_device> m_videocpu;
51   required_device<pia6821_device> m_pia0;
52   required_device<pia6821_device> m_pia1;
53   required_device<pia6821_device> m_pia2;
54   required_device<pia6821_device> m_sndpia0;
55   optional_device<pia6821_device> m_sndpia1;
56   optional_device<pia6821_device> m_sndpia2;
4057   optional_device<sn76489_device> m_sn1;
4158   optional_device<sn76489_device> m_sn2;
4259
r20297r20298
87104   DECLARE_MACHINE_START(qixmcu);
88105   DECLARE_VIDEO_START(qix);
89106   TIMER_CALLBACK_MEMBER(pia_w_callback);
107   TIMER_CALLBACK_MEMBER(deferred_sndpia1_porta_w);
90108   DECLARE_WRITE_LINE_MEMBER(qix_vsync_changed);
91109   DECLARE_READ8_MEMBER(qixmcu_coin_r);
92110   DECLARE_WRITE8_MEMBER(qixmcu_coin_w);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team