Previous 199869 Revisions Next

r19673 Tuesday 18th December, 2012 at 19:30:27 UTC by hap
added adpcm sound
[src/mame/drivers]kurukuru.c

trunk/src/mame/drivers/kurukuru.c
r19672r19673
44  Taiyo Jidoki / Success
55
66
7  Driver by Roberto Fresca.
7  Driver by Roberto Fresca & hap.
88
99
1010  This hardware seems to be a derivative of MSX2 'on steroids'.
r19672r19673
1313  could be merged later with tonton.c, since the platforms are
1414  sharing the hardware base...
1515
16  Special thanks to hap, that implemented the correct graphics bankswitch.
1716
18
1917***************************************************************************
2018
2119  KURU KURU PYON PYON
r19672r19673
179177
180178  TODO:
181179
182  - Audio CPU interrupts and connections/latches.
183  - M5205 ADPCM system.
184180  - Hook up AY8910 output ports. Or unused?
185181  - Find why the use of coin 1 always jams. Hopper?
186182
r19672r19673
207203   required_device<v9938_device> m_v9938;
208204
209205   UINT8 m_sound_irq_cause;
210   UINT8 m_sound_irq_mask;
206   UINT8 m_adpcm_data;
211207
212208   DECLARE_WRITE8_MEMBER(kurukuru_bankswitch_w);
213209   DECLARE_WRITE8_MEMBER(kurukuru_soundlatch_w);
214210   DECLARE_READ8_MEMBER(kurukuru_soundlatch_r);
215   DECLARE_WRITE8_MEMBER(kurukuru_sound_irqmask_w);
216   DECLARE_READ8_MEMBER(kurukuru_sound_timer_irqack_r);
211   DECLARE_WRITE8_MEMBER(kurukuru_adpcm_reset_w);
212   DECLARE_READ8_MEMBER(kurukuru_adpcm_timer_irqack_r);
213   DECLARE_WRITE8_MEMBER(kurukuru_adpcm_data_w);
217214
218215   void update_sound_irq(UINT8 cause);
219216   virtual void machine_start();
220217   virtual void machine_reset();
221218   TIMER_DEVICE_CALLBACK_MEMBER(kurukuru_vdp_scanline);
222   INTERRUPT_GEN_MEMBER(kurukuru_sound_timer_irq);
223219};
224220
225221#define MAIN_CLOCK      XTAL_21_4772MHz
r19672r19673
227223
228224#define VDP_MEM            0x30000
229225
226/* from MSX2 driver, may be not accurate for this HW */
230227#define MSX2_XBORDER_PIXELS      16
231228#define MSX2_YBORDER_PIXELS      28
232229#define MSX2_TOTAL_XRES_PIXELS      256 * 2 + (MSX2_XBORDER_PIXELS * 2)
r19672r19673
255252void kurukuru_state::update_sound_irq(UINT8 cause)
256253{
257254   m_sound_irq_cause = cause & 3;
258   UINT8 mask = m_sound_irq_cause & m_sound_irq_mask;
259   if (mask)
255   if (m_sound_irq_cause)
260256   {
261257      // use bit 0 for latch irq, and bit 1 for timer irq
262258      // latch irq vector is $ef (rst $28)
263259      // timer irq vector is $f7 (rst $30)
264260      // if both are asserted, the vector becomes $f7 AND $ef = $e7 (rst $20)
265261      const UINT8 irq_vector[4] = { 0x00, 0xef, 0xf7, 0xe7 };
266      m_audiocpu->set_input_line_and_vector(0, ASSERT_LINE, irq_vector[mask]);
262      m_audiocpu->set_input_line_and_vector(0, ASSERT_LINE, irq_vector[m_sound_irq_cause]);
267263   }
268264   else
269265   {
r19672r19673
272268}
273269
274270
275INTERRUPT_GEN_MEMBER(kurukuru_state::kurukuru_sound_timer_irq)
271static void kurukuru_msm5205_vck(device_t *device)
276272{
277   update_sound_irq(m_sound_irq_cause | 2);
273   kurukuru_state *state = device->machine().driver_data<kurukuru_state>();
274   state->update_sound_irq(state->m_sound_irq_cause | 2);
275   msm5205_data_w(device, state->m_adpcm_data);
278276}
279277
280278
r19672r19673
306304
307305static ADDRESS_MAP_START( kurukuru_io, AS_IO, 8, kurukuru_state )
308306   ADDRESS_MAP_GLOBAL_MASK(0xff)
309//  AM_RANGE(0x00, 0x00) AM_WRITENOP // seems for switch cpu... or irq? or hopper?
307//  AM_RANGE(0x00, 0x00) AM_WRITENOP // hopper?
310308   AM_RANGE(0x10, 0x10) AM_READ_PORT("DSW1")
311309   AM_RANGE(0x20, 0x20) AM_WRITE(kurukuru_soundlatch_w)
312310   AM_RANGE(0x80, 0x83) AM_DEVREADWRITE( "v9938", v9938_device, read, write )
r19672r19673
319317ADDRESS_MAP_END
320318
321319/*
322  0x00 Writes... 2nd cpu related.
320  0x00 Writes... assume hopper related.
323321                 01 when coin 1 (jams)
324322                 20 when coin 2
325323                 40 when payout (jams) ...check
326
327  0x20 Writes... # sample to trigger
328                 00, 08, 03, 04, 05 for bets 1-2-3-4-5 respectively.
329                 0d while reels are running.
330324*/
331325
332326
333327// Audio CPU
334328
335WRITE8_MEMBER(kurukuru_state::kurukuru_sound_irqmask_w)
329WRITE8_MEMBER(kurukuru_state::kurukuru_adpcm_data_w)
336330{
337   // d0: sound latch irq enable
338   // d1: sound timer irq enable
331   m_adpcm_data = data & 0xf;
332}
333
334WRITE8_MEMBER(kurukuru_state::kurukuru_adpcm_reset_w)
335{
336   // d0: reset adpcm chip
339337   // other bits: ?
340   m_sound_irq_mask = data;
338   msm5205_reset_w(machine().device("adpcm"), data & 1);
341339   update_sound_irq(m_sound_irq_cause);
342340}
343341
r19672r19673
347345   return soundlatch_byte_r(space, 0);
348346}
349347
350READ8_MEMBER(kurukuru_state::kurukuru_sound_timer_irqack_r)
348READ8_MEMBER(kurukuru_state::kurukuru_adpcm_timer_irqack_r)
351349{
352350   update_sound_irq(m_sound_irq_cause & ~2);
353351   return 0;
r19672r19673
361359
362360static ADDRESS_MAP_START( audio_io, AS_IO, 8, kurukuru_state )
363361   ADDRESS_MAP_GLOBAL_MASK(0xff)
364//  AM_RANGE(0x40, 0x40) AM_WRITENOP
365   AM_RANGE(0x50, 0x50) AM_WRITE(kurukuru_sound_irqmask_w)
362   AM_RANGE(0x40, 0x40) AM_WRITE(kurukuru_adpcm_data_w)
363   AM_RANGE(0x50, 0x50) AM_WRITE(kurukuru_adpcm_reset_w)
366364   AM_RANGE(0x60, 0x60) AM_READ(kurukuru_soundlatch_r)
367   AM_RANGE(0x70, 0x70) AM_READ(kurukuru_sound_timer_irqack_r)
365   AM_RANGE(0x70, 0x70) AM_READ(kurukuru_adpcm_timer_irqack_r)
368366ADDRESS_MAP_END
369367
370368
r19672r19673
457455
458456void kurukuru_state::machine_reset()
459457{
460   m_sound_irq_mask = 0;
461458   update_sound_irq(0);
462459}
463460
r19672r19673
476473   DEVCB_UNMAPPED   // some writes...
477474};
478475
476static const msm5205_interface msm5205_config =
477{
478   kurukuru_msm5205_vck,
479   MSM5205_S48_4B      /* 8 kHz? */
480};
479481
482
480483/*************************************************
481484*                 Machine Driver                 *
482485*************************************************/
r19672r19673
492495   MCFG_CPU_ADD("audiocpu", Z80, MAIN_CLOCK/6)
493496   MCFG_CPU_PROGRAM_MAP(audio_map)
494497   MCFG_CPU_IO_MAP(audio_io)
495   MCFG_CPU_PERIODIC_INT_DRIVER(kurukuru_state, kurukuru_sound_timer_irq, 4*60) // from M5205? need to fix that
496498
497499   MCFG_NVRAM_ADD_0FILL("nvram")
498500
r19672r19673
518520   MCFG_SOUND_ADD("aysnd", YM2149, MAIN_CLOCK/12)
519521   MCFG_SOUND_CONFIG(ay8910_intf)
520522   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
523
524   MCFG_SOUND_ADD("adpcm", MSM5205, XTAL_384kHz)
525   MCFG_SOUND_CONFIG(msm5205_config)
526   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
521527MACHINE_CONFIG_END
522528
523529
r19672r19673
545551
546552
547553/*    YEAR  NAME      PARENT  MACHINE   INPUT     STATE          INIT  ROT    COMPANY                   FULLNAME                       FLAGS  */
548GAME( 199?, kurukuru, 0,      kurukuru, kurukuru, driver_device, 0,    ROT0, "Success / Taiyo Jidoki", "Kuru Kuru Pyon Pyon (Japan)",  GAME_IMPERFECT_SOUND )
554GAME( 199?, kurukuru, 0,      kurukuru, kurukuru, driver_device, 0,    ROT0, "Success / Taiyo Jidoki", "Kuru Kuru Pyon Pyon (Japan)",  0 )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team