summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/mame/drivers/puckpkmn.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mame/drivers/puckpkmn.c')
-rw-r--r--trunk/src/mame/drivers/puckpkmn.c342
1 files changed, 342 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/puckpkmn.c b/trunk/src/mame/drivers/puckpkmn.c
new file mode 100644
index 00000000000..5df59d2e361
--- /dev/null
+++ b/trunk/src/mame/drivers/puckpkmn.c
@@ -0,0 +1,342 @@
+/* Puckman Pockimon
+ -- original driver by Luca Elia
+
+Seems to be based around genesis hardware, despite containing no original Sega chips
+
+Supported:
+
+Puckman Pockimon - (c)2000 Genie? (there should be a way to show Sun Mixing copyright, roms are the same
+ on a version with the SM (c)
+
+|---------------------------------------|
+| VOL 4558 4MHz PAL 62256 |
+| YM3812 YM3014 |
+| 3.579545MHz 555 PAL |------||
+| LM324 M6295 |----| |TV16B ||
+| ROM.U3 PAL |YBOX| | ||
+|J PAL |----| | ||
+|A PAL PAL |------||
+|M PAL PAL PAL |
+|M PAL PAL 53.693175MHz|
+|A DSW2 |
+| PAL PAL |------| |
+| DSW1 |TA06SD| |
+| ROM.U5 ROM.U4 | | |
+| |------| |
+| ROM.U8 ROM.U7 62256 D41264|
+| * * 62256 D41264|
+|---------------------------------------|
+Notes:
+ Main CPU is 68000-based, but actual CPU chip is not known
+ Master clock 53.693175MHz. CPU likely running at 53.693175/7 or /6 (??)
+ YM3812 clock 3.579545MHz
+ M6295 clock 1.000MHz (4/4]. Sample rate = 1000000/132
+ VSync 60Hz
+ HSync 16.24kHz
+ 62256 - 8k x8 SRAM (DIP28)
+ D41264 - NEC D41264V-15V 64k x4 VRAM (ZIP24)
+ * Unpopulated DIP32 socket
+ Custom ICs -
+ Y-BOX TA891945 (QFP100)
+ TA-06SD 9933 B816453 (QFP128)
+ TV16B 0010 ME251271 (QFP160)
+*/
+
+#include "emu.h"
+#include "cpu/m68000/m68000.h"
+#include "sound/okim6295.h"
+#include "sound/sn76496.h"
+#include "sound/2612intf.h"
+
+#include "includes/megadriv.h"
+
+
+/* Puckman Pockimon Input Ports */
+static INPUT_PORTS_START( puckpkmn )
+ PORT_START("P2") /* $700011.b */
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+
+ PORT_START("P1") /* $700013.b */
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(10)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+
+ PORT_START("UNK") /* $700015.b */
+
+ PORT_START("DSW1") /* $700017.b */
+ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x38, 0x28, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x38, "1" )
+ PORT_DIPSETTING( 0x30, "2" )
+ PORT_DIPSETTING( 0x28, "3" )
+ PORT_DIPSETTING( 0x20, "4" )
+ PORT_DIPSETTING( 0x18, "5" )
+ PORT_DIPSETTING( 0x10, "6" )
+ PORT_DIPSETTING( 0x08, "7" )
+ PORT_DIPSETTING( 0x00, "8" )
+ PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+
+ PORT_START("DSW2") /* $700019.b */
+ PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static ADDRESS_MAP_START( puckpkmn_map, AS_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_ROM /* Main 68k Program Roms */
+ AM_RANGE(0x700010, 0x700011) AM_READ_PORT("P2")
+ AM_RANGE(0x700012, 0x700013) AM_READ_PORT("P1")
+ AM_RANGE(0x700014, 0x700015) AM_READ_PORT("UNK")
+ AM_RANGE(0x700016, 0x700017) AM_READ_PORT("DSW1")
+ AM_RANGE(0x700018, 0x700019) AM_READ_PORT("DSW2")
+ AM_RANGE(0x700022, 0x700023) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff)
+ AM_RANGE(0xa04000, 0xa04003) AM_DEVREADWRITE8("ymsnd", megadriv_68k_YM2612_read, megadriv_68k_YM2612_write, 0xffff)
+ AM_RANGE(0xc00000, 0xc0001f) AM_READWRITE(megadriv_vdp_r, megadriv_vdp_w)
+ AM_RANGE(0xe00000, 0xe0ffff) AM_RAM AM_MIRROR(0x1f0000) AM_BASE(&megadrive_ram)
+
+ /* Unknown reads/writes: */
+ AM_RANGE(0xa00000, 0xa00551) AM_WRITENOP /* ? */
+// AM_RANGE(0xa10000, 0xa10001) AM_READNOP /* ? once */
+ AM_RANGE(0xa10002, 0xa10005) AM_NOP /* ? alternative way of reading inputs ? */
+ AM_RANGE(0xa11100, 0xa11101) AM_NOP /* ? */
+// AM_RANGE(0xa10008, 0xa1000d) AM_WRITENOP /* ? once */
+// AM_RANGE(0xa14000, 0xa14003) AM_WRITENOP /* ? once */
+ AM_RANGE(0xa11200, 0xa11201) AM_WRITENOP /* ? */
+ADDRESS_MAP_END
+
+static READ16_HANDLER(puckpkmna_70001c_r)
+{
+ return 0x0e;
+}
+
+static READ16_HANDLER(puckpkmna_4b2476_r)
+{
+ return 0x3400;
+}
+
+static ADDRESS_MAP_START( puckpkmna_map, AS_PROGRAM, 16 )
+ AM_IMPORT_FROM( puckpkmn_map )
+ AM_RANGE(0x4b2476, 0x4b2477) AM_READ(puckpkmna_4b2476_r)
+ AM_RANGE(0x70001c, 0x70001d) AM_READ(puckpkmna_70001c_r)
+ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( puckpkmn, md_boot_state )
+ MCFG_FRAGMENT_ADD(md_ntsc)
+
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(puckpkmn_map)
+
+ MCFG_DEVICE_REMOVE("genesis_snd_z80")
+
+ MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker",0.25)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( puckpkmna, puckpkmn )
+
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(puckpkmna_map)
+
+MACHINE_CONFIG_END
+
+/* Genie's Hardware (contains no real sega parts) */
+
+/***************************************************************************
+Puckman Pokemon Genie 2000
+(c) 2000? Manufacturer ?
+
+Hardware looks bootleg-ish, but is newly manufactured.
+
+CPU: ? (one of the SMD chips)
+SND: OKI6295, U6612 (probably YM3812), U6614B (Probably YM3014B)
+XTAL: 3.579545MHz, 4.0000MHz
+OSC: 53.693175MHz
+Other Chips: Possible CPU: TA-06SD 9933 B816453 128 pin square SMD
+ GFX support chips: Y-BOX TA891945 100 pin SMD
+ TV16B 0010 ME251271 160 pin SMD
+
+There are 13 PAL's on the PCB !
+
+RAM: 62256 x 3, D41264 x 2 (ZIP Ram)
+DIPS: 2 x 8 position
+SW1:
+ 1 2 3 4 5 6 7 8
+coins 1coin 1 Cred. off off off
+ 2c 1c on off off
+ 3c 1c off on off
+ 4c 1c on on off
+ 5c 1c off off on
+ 1c 2c on off on
+ 1c 3c off on on
+ 1c 4c on on on
+
+players 1 off off off
+ 2 on off off
+ 3 off on off
+ 4 on on off
+ 5 off off on
+ 6 on off on
+ 7 off on on
+ 8 on on on
+
+diffic-
+ulty v.easy off off
+ normal on off
+ diffic. off on
+ v. diffic. on on
+
+
+SW2
+
+note position 3-8 not used
+
+ 1 2 3 4 5 6 7 8
+test mode no off
+ yes on
+
+demo sound yes off
+ no on
+
+
+ROMS:
+PUCKPOKE.U3 M5M27C201 Sound
+PUCKPOKE.U4 27C040--\
+PUCKPOKE.U5 27C040---\
+PUCKPOKE.U7 27C040----- Main program & GFX
+PUCKPOKE.U8 27C4001---/
+
+ROM sockets U63 & U64 empty
+
+Hi-res PCB scan available on request.
+Screenshots available on my site at http://guru.mameworld.info/oldnews2001.html (under PCB Shop Raid #2)
+
+
+****************************************************************************/
+
+static DRIVER_INIT( puckpkmn )
+{
+ UINT8 *rom = machine.region("maincpu")->base();
+ size_t len = machine.region("maincpu")->bytes();
+ int i;
+
+ for (i = 0; i < len; i++)
+ rom[i] = BITSWAP8(rom[i],1,4,2,0,7,5,3,6);
+
+ DRIVER_INIT_CALL(megadriv);
+}
+
+ROM_START( puckpkmn ) /* Puckman Pockimon (c)2000 Genie */
+ ROM_REGION( 0x200000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "puckpoke.u5", 0x000000, 0x080000, CRC(fd334b91) SHA1(cf8bf6645a4082ea4392937e169b1686c9c7e246) )
+ ROM_LOAD16_BYTE( "puckpoke.u4", 0x000001, 0x080000, CRC(839cc76b) SHA1(e15662a7175db7a8e222dda176a8ed92e0d56e9d) )
+ ROM_LOAD16_BYTE( "puckpoke.u8", 0x100000, 0x080000, CRC(7936bec8) SHA1(4b350105abe514fbfeabae1c6f3aeee695c3d07a) )
+ ROM_LOAD16_BYTE( "puckpoke.u7", 0x100001, 0x080000, CRC(96b66bdf) SHA1(3cc2861ad9bc232cbe683e01b58090f832d03db5) )
+
+ ROM_REGION( 0x40000, "oki", 0 )
+ ROM_LOAD( "puckpoke.u3", 0x00000, 0x40000, CRC(7b066bac) SHA1(429616e21c672b07e0705bc63234249cac3af56f) )
+ROM_END
+
+/*
+Puckman Pokimon (alt.)
+
+
+PCB Layout
+----------
+
+|------------------------------------------------|
+|UPC1241 4.000MHz 6264 |
+| VOL 6295 555 |
+| |
+| |
+| LM324 TV16B |
+| A.U3 |
+| |
+| |
+|J |
+|A 59.693175MHz|
+|M |
+|M DSW2(8) |
+|A |
+| 62256 62256 |
+| DSW1(8) PAL PAL |
+| |
+| B.U59 TA-06S |
+| PAL TK-20K PAL |
+| PAL MB81461 |
+| PAL PAL MB81461 |
+|------------------------------------------------|
+Notes:
+ TV16B - custom graphics chip (QFP160)
+ TA-06S - custom chip (QFP128)
+ TK-20K - custom chip, probably the CPU (QFP100). Clock unknown.
+ M6295 - clock 1.000MHz [4/4]
+
+ 4x 1Mx8 flashROMs (B*.U59) are mounted onto a DIP42 carrier board to make a
+ 32MBit EPROM equivalent. It appears to contain graphics plus the main program.
+ ROM A.U3 contains samples for the M6295.
+
+*/
+
+ROM_START( puckpkmna ) /* Puckman Pockimon (c)2000 IBS Co. Ltd */
+ ROM_REGION( 0x200000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "b2.u59", 0x000000, 0x080000, CRC(3fbea2c7) SHA1(89f3770ae92c62714f0795ddd2f311a9532eb25a) ) // FIRST AND SECOND HALF IDENTICAL
+ ROM_IGNORE(0x080000)
+ ROM_LOAD16_BYTE( "b1.u59", 0x000001, 0x080000, CRC(dc7b4254) SHA1(8ba5c5e8123e62e9af091971d0d0401d2df49350) ) // FIRST AND SECOND HALF IDENTICAL
+ ROM_IGNORE(0x080000)
+ ROM_LOAD16_BYTE( "b4.u59", 0x100000, 0x080000, CRC(375c9f80) SHA1(9b0eb729e95c22355e4117eec596f90e10282492) ) // FIRST AND SECOND HALF IDENTICAL
+ ROM_IGNORE(0x080000)
+ ROM_LOAD16_BYTE( "b3.u59", 0x100001, 0x080000, CRC(d5487df6) SHA1(d1d3d717e184a4e8e067665bbbe94e7cf45db478) ) // FIRST AND SECOND HALF IDENTICAL
+ ROM_IGNORE(0x080000)
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "a.u3", 0x00000, 0x80000, CRC(77891c9b) SHA1(66f28b418a480a89ddb3fae3a7c2fe702c62364c) )
+ROM_END
+
+/* Genie Hardware (uses Genesis VDP) also has 'Sun Mixing Co' put into tile ram */
+GAME( 2000, puckpkmn, 0, puckpkmn, puckpkmn, puckpkmn, ROT0, "Genie", "Puckman Pockimon (set 1)", 0 )
+GAME( 2000, puckpkmna,puckpkmn, puckpkmna, puckpkmn, puckpkmn, ROT0, "IBS", "Puckman Pockimon (set 2)", 0 )