diff options
Diffstat (limited to 'src/mame/drivers/topshoot.c')
-rw-r--r-- | src/mame/drivers/topshoot.c | 310 |
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 ) |