Previous 199869 Revisions Next

r19507 Thursday 13th December, 2012 at 03:43:00 UTC by Roberto Fresca
New driver for Kuru Kuru Pyon Pyon....


New games added or promoted from NOT_WORKING status
---------------------------------------------------
Kuru Kuru Pyon Pyon (Japan) [Roberto Fresca, hap, Fyrecrypts, anonymous,
btribble, Yohji, Smitdogg, The Dumping Union]
[src/mame]mame.lst mame.mak
[src/mame/drivers]kurukuru.c*

trunk/src/mame/mame.mak
r19506r19507
18281828   $(DRIVERS)/kas89.o \
18291829   $(DRIVERS)/kingpin.o \
18301830   $(DRIVERS)/koikoi.o \
1831   $(DRIVERS)/kurukuru.o \
18311832   $(DRIVERS)/kyugo.o $(VIDEO)/kyugo.o \
18321833   $(DRIVERS)/ladyfrog.o $(VIDEO)/ladyfrog.o \
18331834   $(DRIVERS)/laserbas.o \
trunk/src/mame/drivers/kurukuru.c
r0r19507
1/**************************************************************************
2
3  KURU KURU PYON PYON
4  Taiyo Jidoki / Success
5
6
7  Driver by Roberto Fresca.
8
9
10  This hardware seems to be a derivative of MSX2 'on steroids'.
11
12  Depending how complex is turning the emulation, this driver
13  could be merged later with tonton.c, since the platforms are
14  sharing the hardware base...
15
16  Special thanks to hap, that implemented the correct graphics bankswitch.
17
18
19***************************************************************************
20
21  KURU KURU PYON PYON
22  (c)SUCCESS / CABINET :TAIYO JIDOKI
23
24  CPU   : 2x Sharp LH0080A Z80A
25 
26  MEM   : 1x Sharp LH5116H-10 (2KB SRAM) + battery
27          1x Fairchild 8464A-10L (8KB SRAM)
28          6x Sharp LH2464-15 (192KB Video DRAM total)
29
30  SOUND : 1x Yamaha YM2149F
31          1x OKI M5205
32
33  VIDEO : 1x Unknown 64-legs VDP (seems to be from V9938/58 family).
34
35  XTAL  : 1x 21477.27KHz
36
37  1x Texas Instruments RC4558P (Dual General-Purpose Operational Amplifier, DIP8)
38  1x Fairchild MB3712 (5,7 Watt Audio Power Amplifier, SIP8).
39  2x 8 DIP switches banks.
40
41  3x PAL16L8A (IC12, IC26 & IC27)
42  1x PAL12L6 (IC32)
43
44
45***************************************************************************
46
47  Notes....
48
49  The game name could be translated as "Croak Croak Hop Hop"
50  Kuru is the frog sound, and Pyon is the sound of jumps.
51
52  The game is playable, even when you can't see some graphics.
53
54  Coin 1 (key 5) is not working properly and could hang the system.
55  For now, use Coin 2 (key 6) and Service (key 8) for credits...
56
57  If you pressed Coin 1 and the game is not responding anymore, press RESET
58  (key 0) and the game will reset to default values.
59
60
61***************************************************************************
62
63  TODO:
64
65  - Graphics banking (or figure out how to load them).
66  - Audio CPU interrupts and connections/latches.
67  - M5205 ADPCM system.
68  - Hook up AY8910 output ports.
69  - Find why the use of coin 1 hangs the game.
70
71
72***************************************************************************/
73
74#include "emu.h"
75#include "cpu/z80/z80.h"
76#include "sound/ay8910.h"
77#include "sound/msm5205.h"
78#include "video/v9938.h"
79#include "machine/nvram.h"
80
81class kurukuru_state : public driver_device
82{
83public:
84   kurukuru_state(const machine_config &mconfig, device_type type, const char *tag)
85      : driver_device(mconfig, type, tag),
86        m_v9938(*this, "v9938") { }
87
88   required_device<v9938_device> m_v9938;
89
90   DECLARE_WRITE8_MEMBER(kurukuru_bankswitch_w);
91   DECLARE_WRITE8_MEMBER(kurukuru_outport_w);
92
93   virtual void machine_start();
94   virtual void machine_reset();
95   TIMER_DEVICE_CALLBACK_MEMBER(kurukuru_interrupt);
96};
97
98#define MAIN_CLOCK XTAL_21_4772MHz
99
100#define VDP_MEM            0x30000
101
102#define MSX2_XBORDER_PIXELS      16
103#define MSX2_YBORDER_PIXELS      28
104#define MSX2_TOTAL_XRES_PIXELS      256 * 2 + (MSX2_XBORDER_PIXELS * 2)
105#define MSX2_TOTAL_YRES_PIXELS      212 * 2 + (MSX2_YBORDER_PIXELS * 2)
106#define MSX2_VISIBLE_XBORDER_PIXELS   8 * 2
107#define MSX2_VISIBLE_YBORDER_PIXELS   14 * 2
108
109
110/*************************************************
111*                Video Hardware                  *
112*************************************************/
113
114static void kurukuru_vdp0_interrupt(device_t *, v99x8_device &device, int i)
115{
116   device.machine().device("maincpu")->execute().set_input_line(0, (i ? HOLD_LINE : CLEAR_LINE));
117}
118
119
120/*************************************************
121*                     I/O                        *
122*************************************************/
123
124WRITE8_MEMBER(kurukuru_state::kurukuru_bankswitch_w)
125{
126   // d4,d5: bank
127   membank("bank1")->set_entry(data >> 4 & 3);
128   
129   // d3: ?
130   // other bits: always set
131}
132
133
134WRITE8_MEMBER(kurukuru_state::kurukuru_outport_w)
135{
136//      logerror("%02x\n", data);
137}
138
139
140/*************************************************
141*                  Memory Map                    *
142*************************************************/
143
144static ADDRESS_MAP_START( kurukuru_map, AS_PROGRAM, 8, kurukuru_state )
145   AM_RANGE(0x0000, 0x3fff) AM_ROM
146   AM_RANGE(0x6000, 0xdfff) AM_ROMBANK("bank1")
147   AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_SHARE("nvram")
148//   AM_RANGE(0xe400, 0xefff) AM_RAM
149   AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("share")
150ADDRESS_MAP_END
151
152static ADDRESS_MAP_START( kurukuru_io, AS_IO, 8, kurukuru_state )
153   ADDRESS_MAP_GLOBAL_MASK(0xff)
154   AM_RANGE(0x00, 0x00) AM_WRITENOP //seems for switch cpu... or irq?
155   AM_RANGE(0x10, 0x10) AM_READ_PORT("DSW1")
156   AM_RANGE(0x80, 0x83) AM_DEVREADWRITE( "v9938", v9938_device, read, write )
157   AM_RANGE(0x90, 0x90) AM_WRITE(kurukuru_bankswitch_w)
158   AM_RANGE(0xa0, 0xa0) AM_READ_PORT("IN0")
159   AM_RANGE(0xb0, 0xb0) AM_READ_PORT("IN1")
160   AM_RANGE(0xc0, 0xc0) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
161   AM_RANGE(0xc8, 0xc8) AM_READ_PORT("DSW2")
162   AM_RANGE(0xd0, 0xd0) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
163ADDRESS_MAP_END
164
165
166static ADDRESS_MAP_START( audio_map, AS_PROGRAM, 8, kurukuru_state )
167   AM_RANGE(0x0000, 0xbfff) AM_ROM
168   AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("share")
169ADDRESS_MAP_END
170
171static ADDRESS_MAP_START( audio_io, AS_IO, 8, kurukuru_state )
172   ADDRESS_MAP_GLOBAL_MASK(0xff)
173//   AM_RANGE(0x00, 0x00) seems for switch cpu... or irqack?
174//   AM_RANGE(0xff, 0xff) AM_WRITE(kurukuru_outport_w)
175ADDRESS_MAP_END
176
177/*
178  0x50 Write 0x0b
179  0x60 Read
180  0x70 Read
181*/
182
183
184/*************************************************
185*            Input Ports Definitions             *
186*************************************************/
187
188static INPUT_PORTS_START( kurukuru )
189   PORT_START("IN0")
190   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_Z) PORT_NAME("1st")
191   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_X) PORT_NAME("2nd")
192   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_C) PORT_NAME("3rd")
193   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_V) PORT_NAME("4th")
194   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_B) PORT_NAME("5th")
195   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_CODE(KEYCODE_N) PORT_NAME("unknown N")
196   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CODE(KEYCODE_M) PORT_NAME("unknown M")
197   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
198
199   PORT_START("IN1")
200   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Bookkeeping")
201   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_8) PORT_NAME("Service")
202   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Reset Button")
203   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
204   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER )   PORT_CODE(KEYCODE_A) PORT_NAME("Unknown 1")
205   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )   // coin 1 not incrementing and hang the game
206   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER )   PORT_CODE(KEYCODE_S) PORT_NAME("Unknown 2")
207   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
208
209   PORT_START("DSW1")
210   PORT_DIPNAME( 0x07, 0x03, "Coinage A (100 Y)" )   PORT_DIPLOCATION("DSW1:1,2,3")
211   PORT_DIPSETTING(    0x02, "1 Coin / 3 Medal" )
212   PORT_DIPSETTING(    0x06, "1 Coin / 4 Medal" )
213   PORT_DIPSETTING(    0x01, "1 Coin / 5 Medal" )
214   PORT_DIPSETTING(    0x05, "1 Coin / 6 Medal" )
215   PORT_DIPSETTING(    0x03, "1 Coin / 10 Medal" )
216   PORT_DIPSETTING(    0x07, "1 Coin / 11 Medal" )
217   PORT_DIPSETTING(    0x04, "1 Coin / 20 Medal" )
218   PORT_DIPSETTING(    0x00, "1 Coin / 50 Medal" )
219   PORT_DIPNAME( 0x18, 0x08, "Coinage B (10 Y)" )   PORT_DIPLOCATION("DSW1:4,5")
220   PORT_DIPSETTING(    0x00, "3 Coin / 1 Medal" )
221   PORT_DIPSETTING(    0x10, "2 Coin / 1 Medal" )
222   PORT_DIPSETTING(    0x18, "1 Coin / 1 Medal" )
223   PORT_DIPSETTING(    0x08, "1 Coin / 2 Medal" )
224   PORT_DIPNAME( 0x20, 0x20, "Service Coinage" )   PORT_DIPLOCATION("DSW1:6")
225   PORT_DIPSETTING(    0x20, "1 Pulse / 1 Medal" )
226   PORT_DIPSETTING(    0x00, "1 Pulse / 2 Medal" )
227   PORT_DIPNAME( 0x40, 0x00, "Payout Mode" )      PORT_DIPLOCATION("DSW1:7")
228   PORT_DIPSETTING(    0x40, "Manual" )
229   PORT_DIPSETTING(    0x00, "Automatic" )
230   PORT_DIPNAME( 0x80, 0x00, "Repeat Bet")         PORT_DIPLOCATION("DSW1:8")
231   PORT_DIPSETTING(    0x80, DEF_STR( No ) )
232   PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
233
234   PORT_START("DSW2")
235   PORT_DIPNAME( 0x07, 0x01, "Percentage" )   PORT_DIPLOCATION("DSW2:1,2,3")
236   PORT_DIPSETTING(    0x07, "50%" )
237   PORT_DIPSETTING(    0x03, "60%" )
238   PORT_DIPSETTING(    0x05, "70%" )
239   PORT_DIPSETTING(    0x01, "75%" )
240   PORT_DIPSETTING(    0x06, "80%" )
241   PORT_DIPSETTING(    0x02, "85%" )
242   PORT_DIPSETTING(    0x04, "90%" )
243   PORT_DIPSETTING(    0x00, "95%" )
244   PORT_DIPNAME( 0x08, 0x08, "Winwave" )      PORT_DIPLOCATION("DSW2:4")
245   PORT_DIPSETTING(    0x08, "Small" )
246   PORT_DIPSETTING(    0x00, "Big" )
247   PORT_DIPNAME( 0x10, 0x10, "M.Medal" )      PORT_DIPLOCATION("DSW2:5")
248   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
249   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
250   PORT_DIPNAME( 0x60, 0x60, "HG" )         PORT_DIPLOCATION("DSW2:6,7")
251   PORT_DIPSETTING(    0x60, "10-1" )
252   PORT_DIPSETTING(    0x20, "20-1" )
253   PORT_DIPSETTING(    0x40, "50-1" )
254   PORT_DIPSETTING(    0x00, "100-1" )
255   PORT_DIPNAME( 0x80, 0x80, "Bet Max" )      PORT_DIPLOCATION("DSW2:8")
256   PORT_DIPSETTING(    0x80, "5" )
257   PORT_DIPSETTING(    0x00, "10" )
258
259INPUT_PORTS_END
260
261
262/*************************************************
263*        Machine Start & Reset Routines          *
264*************************************************/
265
266void kurukuru_state::machine_start()
267{
268   membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base(), 0x8000);
269}
270
271void kurukuru_state::machine_reset()
272{
273   //membank("bank1")->set_entry(2);
274}
275
276
277/*************************************************
278*      R/W Handlers and Interrupt Routines       *
279*************************************************/
280
281TIMER_DEVICE_CALLBACK_MEMBER(kurukuru_state::kurukuru_interrupt)
282{
283   m_v9938->set_resolution(0);
284   m_v9938->interrupt();
285}
286
287
288/*************************************************
289*                Sound Interfaces                *
290*************************************************/
291
292static const ay8910_interface ay8910_intf =
293{
294   AY8910_LEGACY_OUTPUT,
295   AY8910_DEFAULT_LOADS,
296   DEVCB_UNMAPPED,
297   DEVCB_UNMAPPED,
298   DEVCB_UNMAPPED,   // some writes...
299   DEVCB_UNMAPPED   // some writes...
300};
301
302
303/*************************************************
304*                 Machine Driver                 *
305*************************************************/
306
307static MACHINE_CONFIG_START( kurukuru, kurukuru_state )
308
309   /* basic machine hardware */
310   MCFG_CPU_ADD("maincpu",Z80,MAIN_CLOCK/6)
311   MCFG_CPU_PROGRAM_MAP(kurukuru_map)
312   MCFG_CPU_IO_MAP(kurukuru_io)
313   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", kurukuru_state, kurukuru_interrupt, "screen", 0, 1)
314
315   MCFG_CPU_ADD("audiocpu", Z80, MAIN_CLOCK/6)
316   MCFG_CPU_PROGRAM_MAP(audio_map)
317   MCFG_CPU_IO_MAP(audio_io)
318   // need interrupts...
319
320   MCFG_NVRAM_ADD_0FILL("nvram")
321
322
323   /* video hardware */
324   MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
325
326   MCFG_V9938_ADD("v9938", "screen", VDP_MEM)
327   MCFG_V99X8_INTERRUPT_CALLBACK_STATIC(kurukuru_vdp0_interrupt)
328
329   MCFG_SCREEN_ADD("screen",RASTER)
330   MCFG_SCREEN_REFRESH_RATE(60)
331   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
332
333   MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, MSX2_TOTAL_YRES_PIXELS)
334   MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1)
335   MCFG_SCREEN_UPDATE_DEVICE("v9938", v9938_device, screen_update)
336
337   MCFG_PALETTE_LENGTH(512)
338   MCFG_PALETTE_INIT( v9938 )
339
340   /* sound hardware */
341   MCFG_SPEAKER_STANDARD_MONO("mono")
342   MCFG_SOUND_ADD("aysnd", YM2149, MAIN_CLOCK/12)
343   MCFG_SOUND_CONFIG(ay8910_intf)
344   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
345MACHINE_CONFIG_END
346
347
348/***************************************************************************
349
350  Game driver(s)
351
352***************************************************************************/
353
354ROM_START( kurukuru )
355   ROM_REGION( 0x28000, "maincpu", 0 )
356   ROM_LOAD( "kp_17l.ic17",  0x00000, 0x08000, CRC(9b552ebc) SHA1(07d0e62b7fdad381963a345376b72ad31eb7b96d) )   // program code
357   ROM_LOAD( "10.ic10",      0x08000, 0x10000, CRC(3d6012bc) SHA1(2764f70e0e0bef3f2f71dd6c78e0a4189057beca) )   // title + text + ingame gfx
358   ROM_LOAD( "18.ic18",      0x18000, 0x10000, CRC(afb13c6a) SHA1(ac3cd40fad081f7a2b3d1fc72ea96282b9d1f4a3) )   // big frog gfx
359
360   ROM_REGION( 0x10000, "audiocpu", 0 )
361   ROM_LOAD( "4.ic4",    0x00000, 0x10000, CRC(85d86f32) SHA1(f2aa93d702e6577f8f2204c74c44ac26d05be699) )   // code & adpcm samples
362
363   ROM_REGION( 0x800, "plds", 0 )
364   ROM_LOAD( "51.ic26",     0x0000, 0x0104, CRC(ce4a601b) SHA1(07f5bbb327b220e5846927cbb91149174dd07b36) )
365   ROM_LOAD( "52.ic27",     0x0200, 0x0104, CRC(e23296a5) SHA1(4747923d201fcc5e0e752acbf50b41f0414e4ca8) )
366   ROM_LOAD( "53.ic12",     0x0400, 0x0104, CRC(2ac654f2) SHA1(18668c73781a55dcffc4bf4c107026b0e72a75d1) )
367   ROM_LOAD( "7908b-4.ic32", 0x0600, 0x0034, CRC(bddf925e) SHA1(861cf5966444d0c0392241e5cfa08db475fb439a) )
368ROM_END
369
370
371/*    YEAR  NAME      PARENT  MACHINE   INPUT     STATE          INIT  ROT    COMPANY                   FULLNAME                       FLAGS  */
372GAME( 199?, kurukuru, 0,      kurukuru, kurukuru, driver_device, 0,    ROT0, "Success / Taiyo Jidoki", "Kuru Kuru Pyon Pyon (Japan)",  GAME_IMPERFECT_SOUND )
trunk/src/mame/mame.lst
r19506r19507
78897889raidenu         // (c) 1990 Seibu Kaihatsu + Fabtek license
78907890raidenua      // (c) 1990 Seibu Kaihatsu + Fabtek license
78917891sdgndmps      // (c) Banpresto / Bandai (Japan)
7892dcon         // (c) 1992 Success
78937892sengokmj      // (c) 1991 Sigma
78947893totmejan      // (c) 1991 Seibu/Tecmo
78957894goodejan      // (c) 1991 Seibu/Tecmo
r19506r19507
86328631farmer         // TVG17 (c) 1985 Sun Electronics
86338632shanghai      // (c) 1988 Sunsoft (Sun Electronics)
86348633shangha2      // (c) 1989 Sunsoft (Sun Electronics)
8635kothello      // (c) 1990 Success
86368634shangha3      // (c) 1993 Sunsoft
86378635heberpop      // (c) 1994 Sunsoft / Atlus
86388636blocken         // (c) 1994 KID / Visco
r19506r19507
97969794atamanot      // (c) 1983 Yachiyo Denki / Uni Enterprize
97979795ssingles      // Yachiyo?
97989796tcl            // (c) 1995 Uniwang
9799othello         // (c) 1984 Success
9800sothello      // (c) 1986 Success / Fujiwara
9801tonton         // 199?, Success.
98029797quake         // (c) 19?? Lazer-Tron / iD Software
98039798majorpkr      // (c) 1994 PAL System.
98049799su2000         // (c) 1993 Virtuality
98059800boonggab      // (c) 2001 Taff System
98069801
9802// Success
9803tonton         // (c) 199? Success / Taiyo Jidoki.
9804kurukuru      // (c) 199? Success / Taiyo Jidoki.
9805othello         // (c) 1984 Success.
9806sothello      // (c) 1986 Success / Fujiwara.
9807kothello      // (c) 1990 Success.
9808dcon         // (c) 1992 Success.
9809
98079810// Nexus 3D
98089811acheart
98099812acheartf      // (c) 2006 Examu
r19506r19507
3033630339// HP Automaten
3033730340bingoman
3033830341bingomana
30342

Previous 199869 Revisions Next


© 1997-2024 The MAME Team