summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/puckpkmn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/puckpkmn.c')
-rw-r--r--src/mame/drivers/puckpkmn.c294
1 files changed, 294 insertions, 0 deletions
diff --git a/src/mame/drivers/puckpkmn.c b/src/mame/drivers/puckpkmn.c
new file mode 100644
index 00000000000..d3a970aee6e
--- /dev/null
+++ b/src/mame/drivers/puckpkmn.c
@@ -0,0 +1,294 @@
+/* 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)
+
+*/
+
+#include "driver.h"
+#include "genesis.h"
+
+#define MASTER_CLOCK 53693100
+
+static UINT16* main_ram;
+
+static INPUT_PORTS_START( puckpkmn ) /* Puckman Pockimon Input Ports */
+ PORT_START /* Player 2 Controls ($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 /* Player 1 Controls ($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 /* ? ($700015.b) */
+
+ PORT_START /* DSW 1 ($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 /* DSW 1 ($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 READ16_HANDLER( puckpkmn_YM3438_r )
+{
+ return YM3438_status_port_0_A_r(0) << 8;
+}
+
+static WRITE16_HANDLER( puckpkmn_YM3438_w )
+{
+ switch (offset)
+ {
+ case 0:
+ if (ACCESSING_MSB) YM3438_control_port_0_A_w (0, (data >> 8) & 0xff);
+ else YM3438_data_port_0_A_w (0, (data >> 0) & 0xff);
+ break;
+ case 1:
+ if (ACCESSING_MSB) YM3438_control_port_0_B_w (0, (data >> 8) & 0xff);
+ else YM3438_data_port_0_B_w (0, (data >> 0) & 0xff);
+ break;
+ }
+}
+
+
+static ADDRESS_MAP_START( puckpkmn_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_READ(MRA16_ROM) /* Main 68k Program Roms */
+ AM_RANGE(0x700010, 0x700011) AM_READ(input_port_0_word_r) /* Input (P2) */
+ AM_RANGE(0x700012, 0x700013) AM_READ(input_port_1_word_r) /* Input (P1) */
+ AM_RANGE(0x700014, 0x700015) AM_READ(input_port_2_word_r) /* Input (?) */
+ AM_RANGE(0x700016, 0x700017) AM_READ(input_port_3_word_r) /* Input (DSW1) */
+ AM_RANGE(0x700018, 0x700019) AM_READ(input_port_4_word_r) /* Input (DSW2) */
+ AM_RANGE(0x700022, 0x700023) AM_READ(OKIM6295_status_0_lsb_r) /* M6295 Sound Chip Status Register */
+ AM_RANGE(0xa04000, 0xa04001) AM_READ(puckpkmn_YM3438_r) /* Ym3438 Sound Chip Status Register */
+ AM_RANGE(0xc00000, 0xc0001f) AM_READ(genesis_vdp_r) /* VDP Access */
+ AM_RANGE(0xe00000, 0xe1ffff) AM_READ(MRA16_BANK1) /* VDP sees the roms here */
+ AM_RANGE(0xfe0000, 0xfeffff) AM_READ(MRA16_BANK2) /* VDP sees the ram here */
+ AM_RANGE(0xff0000, 0xffffff) AM_READ(MRA16_RAM ) /* Main Ram */
+
+ /* Unknown reads: */
+// AM_RANGE(0xa10000, 0xa10001) AM_READ(MRA16_NOP) /* ? once */
+ AM_RANGE(0xa10002, 0xa10005) AM_READ(MRA16_NOP) /* ? alternative way of reading inputs ? */
+ AM_RANGE(0xa11100, 0xa11101) AM_READ(MRA16_NOP) /* ? */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( puckpkmn_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x1fffff) AM_WRITE(MWA16_ROM) /* Main 68k Program Roms */
+ AM_RANGE(0x700022, 0x700023) AM_WRITE(OKIM6295_data_0_lsb_w) /* M6295 Sound Chip Writes */
+ AM_RANGE(0xa04000, 0xa04003) AM_WRITE(puckpkmn_YM3438_w) /* Ym3438 Sound Chip Writes */
+ AM_RANGE(0xc00000, 0xc0001f) AM_WRITE(genesis_vdp_w) /* VDP Access */
+ AM_RANGE(0xff0000, 0xffffff) AM_WRITE(MWA16_RAM) AM_BASE(&main_ram) /* Main Ram */
+
+ /* Unknown writes: */
+ AM_RANGE(0xa00000, 0xa00551) AM_WRITE(MWA16_RAM) /* ? */
+ AM_RANGE(0xa10002, 0xa10005) AM_WRITE(MWA16_NOP) /* ? alternative way of reading inputs ? */
+// AM_RANGE(0xa10008, 0xa1000d) AM_WRITE(MWA16_NOP) /* ? once */
+// AM_RANGE(0xa14000, 0xa14003) AM_WRITE(MWA16_NOP) /* ? once */
+ AM_RANGE(0xa11100, 0xa11101) AM_WRITE(MWA16_NOP) /* ? */
+ AM_RANGE(0xa11200, 0xa11201) AM_WRITE(MWA16_NOP) /* ? */
+ADDRESS_MAP_END
+
+
+static struct YM3438interface ym3438_intf =
+{
+ genesis_irq2_interrupt /* IRQ handler */
+};
+
+static MACHINE_DRIVER_START( puckpkmn )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD_TAG("main",M68000, MASTER_CLOCK/7) /*???*/
+ MDRV_CPU_PROGRAM_MAP(puckpkmn_readmem,puckpkmn_writemem)
+ MDRV_CPU_VBLANK_INT(genesis_vblank_interrupt,1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+
+ MDRV_MACHINE_START(genesis)
+ MDRV_MACHINE_RESET(genesis)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(342,262)
+ MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 223)
+ MDRV_PALETTE_LENGTH(64)
+
+ MDRV_VIDEO_START(genesis)
+ MDRV_VIDEO_UPDATE(genesis)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD(YM3438, MASTER_CLOCK/7)
+ MDRV_SOUND_CONFIG(ym3438_intf)
+ MDRV_SOUND_ROUTE(0, "mono", 0.50)
+ MDRV_SOUND_ROUTE(1, "mono", 0.50)
+
+ MDRV_SOUND_ADD(SN76496, MASTER_CLOCK/15)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+ /* sound hardware */
+ MDRV_SOUND_ADD(OKIM6295, 1056000)
+ MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) // clock frequency & pin 7 not verified
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+MACHINE_DRIVER_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://unemulated.emuunlim.com (under PCB Shop Raid #2)
+
+
+****************************************************************************/
+
+static DRIVER_INIT( puckpkmn )
+{
+ UINT8 *rom = memory_region(REGION_CPU1);
+ size_t len = memory_region_length(REGION_CPU1);
+ int i;
+
+ for (i = 0; i < len; i++)
+ rom[i] = BITSWAP8(rom[i],1,4,2,0,7,5,3,6);
+
+ memory_set_bankptr(1, memory_region(REGION_CPU1) ); // VDP reads the roms from here
+ memory_set_bankptr(2, main_ram ); // VDP reads the ram from here
+}
+
+ROM_START( puckpkmn ) /* Puckman Pockimon (c)2000 Genie */
+ ROM_REGION( 0x200000, REGION_CPU1, 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, REGION_SOUND1, 0 )
+ ROM_LOAD( "puckpoke.u3", 0x00000, 0x40000, CRC(7b066bac) SHA1(429616e21c672b07e0705bc63234249cac3af56f) )
+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", 0 )