summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/topshoot.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/topshoot.c')
-rw-r--r--src/mame/drivers/topshoot.c310
1 files changed, 310 insertions, 0 deletions
diff --git a/src/mame/drivers/topshoot.c b/src/mame/drivers/topshoot.c
new file mode 100644
index 00000000000..c0ecca6f487
--- /dev/null
+++ b/src/mame/drivers/topshoot.c
@@ -0,0 +1,310 @@
+
+/*
+
+Sun Mixing board, looks like a hacked up Genesis clone.
+
+
+Top Shooter - (c)1995 - older board, look more like an actual hacked cart system, has an MCU, doesn't
+ work in MAME due to VDP status etc. boots in Kega Fusion but has no inputs
+ (MCU related?)
+
+*/
+
+#define MASTER_CLOCK 53693100
+
+
+/* Not Dumped
+
+ Super Bubble Bobble (a bubble bobble rip-off from Sun Mixing, looks like it may be on this hardware)
+
+ */
+
+/*
+
+note:
+
+inputs don't work.. (MCU related?)
+no sprites in MAME (VDP related? they show in Kega Fusion)
+
+*/
+
+
+/*
+
+TOP SHOOTER - Sun Mixing Co. Ltd. 1995
+
+To me it seems like an original cartridge-based arcade board
+hacked to use an external ROM board and a standard JAMMA
+connector, but of course, I can be wrong.
+
+
+ UPPER BOARD
+
+ _________________________________________________________
+ | ___________ ___________ _____ __ |
+ | 74LS245P |U14 Empty | |U12 ROM1 | |IC1| |B| |
+ | 74LS245P |__________| |__________| |___| |
+ | 74LS245P ___________ ___________ _____________ |
+ __| |U13 Empty | |U11 ROM2 | | AT89C51 | |
+ |_ J |__________| |__________| |____________| |_
+ |_ A ______________________ _____ |_ J
+ |_ M | U10 MC68000P10 | |OSC| |_ P
+ |_ M | Motorola | |_ 2
+ |_ A |______________________| 74HC00P |_
+ |_ 74LS245P ______________________ ________ |
+ |_ | U9 Empty | |HM6116L |
+ |_ | | |_______| |_ J
+ |_ |______________________| |_ P
+ |_ 74LS245P TD62oo3AP 74LS373P |_ 3
+ |_ __________ |
+ |_ 74LS245P |GALv20V8B| |
+ |_ ______ |
+ |_ _____ |DIPS| |_ P
+ | |U24 | |_ 1
+ | 74LS245P |
+ | TD62oo3AP |
+ | |
+ |_ 97 ____________ _____|
+ |_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_|_|_|
+
+
+ IC1 = Surface scracthed out, don't know what is it
+ U24 = Surface scratched out, seems like a PROM
+ DIPS = Fixed as: 00001000
+ ROMS = Toshiba TC574000AD
+
+ JP2, JP3 and P1 connects both boards, also another
+ on-board connector is used, see notes for the 68K socket
+ for the lower board.
+
+
+ LOWER BOARD
+
+ _________________________________________________________
+ | ____ ____ |
+ | ___ | I| | I| |
+ | |I| | C| | C| |
+ | |C| | 3| | 2| |
+ | |1| |__| |__| |
+ | |3| |__
+ | _ _________________________ __|
+ | |_| ||||||||||||||||||||||||| __|
+ | IC14 ---------- SLOT --------- __|
+ | ______________________ __|
+ | | | __|
+ | ___ | 68K (to upper board) | _______ __|
+ | |I| |______________________| |SE-94| __|
+ | |C| |JDDB | _|
+ | |1| _______ |_____| |
+ | |2| |SE-93| IC4 |
+ | |JDDA | |
+ | |_____| ___________ |_
+ | IC8 |Z8400A PS| |
+ | |_________| |
+ | ______ _________ _________ |
+ | | OSC| | IC11 | | IC7 | |
+ | _____________ |_______| |_______| |
+ | RST | | CN5 CN6 |
+ |___________| |______________________________|
+
+
+ IC3 = IC2 = Winbond W24257V
+ IC7 = 6264LD 9440
+ IC11 = SE-95 JDDC
+ IC12 = Sony CXA1634P
+ IC13 = Sony CXA1145P
+ IC14 = GL358 N16
+
+ RST is a reset button.
+
+ OSC = 53.693175 MHz
+
+ CN5 and CN6 are 9-pin connectors... serial ports?
+
+ There are two wires soldered directly to two connectors
+ of the slot, going to the upper board (via P1).
+
+ The whole upper board is plugged using the 68000 socket,
+ there is no 68K on the lower board.
+
+ There is an edge connector, but it isn't JAMMA.
+
+ "HK-986 (KINYO)" is written on the PCB, near the slot.
+
+*/
+
+#include "driver.h"
+#include "genesis.h"
+
+
+static INPUT_PORTS_START( topshoot ) /* Top Shooter Input Ports */
+ PORT_START /* 16bit */
+ PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
+
+static ADDRESS_MAP_START( topshoot_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM) /* Cartridge Program Rom */
+// AM_RANGE(0x200000, 0x20007f) AM_READ(MRA16_RAM)
+// AM_RANGE(0x200040, 0x200041) AM_READ(input_port_0_word_r) // ??
+// AM_RANGE(0x200050, 0x200051) AM_READ(input_port_0_word_r) // ??
+ AM_RANGE(0x202000, 0x2023ff) AM_READ(MRA16_RAM)
+ AM_RANGE(0x400004, 0x400005) AM_READ(input_port_0_word_r) // ??
+ AM_RANGE(0xa10000, 0xa1001f) AM_READ(input_port_0_word_r)
+ AM_RANGE(0xa11100, 0xa11101) AM_READ(input_port_0_word_r) // ??
+
+
+ AM_RANGE(0xa00000, 0xa0ffff) AM_READ(genesis_68k_to_z80_r)
+ AM_RANGE(0xc00000, 0xc0001f) AM_READ(genesis_vdp_r) /* VDP Access */
+ AM_RANGE(0xe00000, 0xe1ffff) AM_READ(MRA16_BANK3)
+ AM_RANGE(0xfe0000, 0xfeffff) AM_READ(MRA16_BANK4)
+ AM_RANGE(0xff0000, 0xffffff) AM_READ(MRA16_RAM) /* Main Ram */
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( topshoot_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM) /* Cartridge Program Rom */
+// AM_RANGE(0x200000, 0x20007f) AM_WRITE(MWA16_RAM)
+ AM_RANGE(0x200000, 0x2023ff) AM_WRITE(MWA16_RAM) // tested
+ AM_RANGE(0xa10000, 0xa1001f) AM_WRITE(genesis_io_w) AM_BASE(&genesis_io_ram) /* Genesis Input */
+ AM_RANGE(0xa11000, 0xa11203) AM_WRITE(genesis_ctrl_w)
+ AM_RANGE(0xa00000, 0xa0ffff) AM_WRITE(genesis_68k_to_z80_w)
+ AM_RANGE(0xc00000, 0xc0001f) AM_WRITE(genesis_vdp_w) /* VDP Access */
+ AM_RANGE(0xfe0000, 0xfeffff) AM_WRITE(MWA16_BANK4)
+ AM_RANGE(0xff0000, 0xffffff) AM_WRITE(MWA16_RAM) AM_BASE(&genesis_68k_ram)/* Main Ram */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( genesis_z80_readmem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x1fff) AM_READ(MRA8_BANK1)
+ AM_RANGE(0x2000, 0x3fff) AM_READ(MRA8_BANK2) /* mirror */
+ AM_RANGE(0x4000, 0x7fff) AM_READ(genesis_z80_r)
+ AM_RANGE(0x8000, 0xffff) AM_READ(genesis_z80_bank_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( genesis_z80_writemem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x1fff) AM_WRITE(MWA8_BANK1) AM_BASE(&genesis_z80_ram)
+ AM_RANGE(0x2000, 0x3fff) AM_WRITE(MWA8_BANK2) /* mirror */
+ AM_RANGE(0x4000, 0x7fff) AM_WRITE(genesis_z80_w)
+ // AM_RANGE(0x8000, 0xffff) AM_WRITE(genesis_z80_bank_w)
+ADDRESS_MAP_END
+
+
+static MACHINE_DRIVER_START( genesis_base )
+ /*basic machine hardware */
+ MDRV_CPU_ADD_TAG("main", M68000, MASTER_CLOCK / 7)
+ MDRV_CPU_VBLANK_INT(genesis_vblank_interrupt,1)
+
+ MDRV_CPU_ADD_TAG("sound", Z80, MASTER_CLOCK / 15)
+ MDRV_CPU_PROGRAM_MAP(genesis_z80_readmem, genesis_z80_writemem)
+ MDRV_CPU_VBLANK_INT(irq0_line_hold, 1) /* from vdp at scanline 0xe0 */
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+
+ MDRV_INTERLEAVE(100)
+
+ 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_ROUTE(0, "mono", 0.50)
+ MDRV_SOUND_ROUTE(1, "mono", 0.50)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( topshoot )
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM( genesis_base )
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(topshoot_readmem,topshoot_writemem)
+
+ /* video hardware */
+ MDRV_VIDEO_START(genesis)
+ MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 223)
+
+ /* sound hardware */
+ MDRV_SOUND_ADD(SN76496, MASTER_CLOCK/15)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+MACHINE_DRIVER_END
+
+ROM_START( topshoot ) /* Top Shooter (c)1995 Sun Mixing */
+ ROM_REGION( 0x200000, REGION_CPU1, 0 )
+ ROM_LOAD16_BYTE( "tc574000ad_u11_2.bin", 0x000000, 0x080000, CRC(b235c4d9) SHA1(fbb308a5f6e769f3277824cb6a3b50c308969ac2) )
+ ROM_LOAD16_BYTE( "tc574000ad_u12_1.bin", 0x000001, 0x080000, CRC(e826f6ad) SHA1(23ec8bb608f954d3b915f061e7076c0c63b8259e) )
+ROM_END
+
+static READ16_HANDLER( vdp_fake_r )
+{
+ return mame_rand(Machine);
+}
+
+static DRIVER_INIT(topshoot)
+{
+ /* hack -- fix vdp emulation instead */
+ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0xC00004, 0xC00005, 0, 0, vdp_fake_r);
+
+ memory_set_bankptr(3, memory_region(REGION_CPU1) );
+ memory_set_bankptr(4, genesis_68k_ram );
+}
+
+
+/* Sun Mixing Hardware, very close to actual Genesis */
+GAME( 1995, topshoot, 0, topshoot, topshoot, topshoot, ROT0, "Sun Mixing", "Top Shooter",GAME_NOT_WORKING )