summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/hshavoc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/hshavoc.cpp')
-rw-r--r--src/mame/drivers/hshavoc.cpp217
1 files changed, 0 insertions, 217 deletions
diff --git a/src/mame/drivers/hshavoc.cpp b/src/mame/drivers/hshavoc.cpp
deleted file mode 100644
index 32f387aec26..00000000000
--- a/src/mame/drivers/hshavoc.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Haywood
-/*
-
- High Seas Havoc
- (c)1993 Data East
-
- This is an unusual Data East PCB based on the Sega Genesis / Megadrive. The Game was also released on the home system.
-
-
-Produttore Data East
-N.revisione CG-2
-
-CPU
-1x MC68000P8 (main)(12c)
-1x Z8400B (sound)(1a)
-1x custom SEGA315-5660-FC1004 (QFP208)(5d)
-1x PIC16C55 (7a)
-1x oscillator 53.6931MHz (osc1)
-
-ROMs
-2x TMS27C040 (25,26)(11a,9a)
-2x PEEL18CV8 (4b,5b)
-
-Note
-1x JAMMA edge connector
-1x trimmer (volume)(vr1)
-2x 6 switches dip (dsw1,dsw2)
------------------------------------
-PCB markings:"DE-0407-2 MADE IN JAPAN"
------------------------------------
-
-Thanks to DOX, the "mystery chip" has been identified (and verified) as a PIC.
-It's read protected, but has been decapped and read out. Unfortunately it doesn't
-help with figuring out the encryption on the coin-op parts of the program.
-
-*/
-
-
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "cpu/m68000/m68000.h"
-#include "sound/sn76496.h"
-#include "sound/ym2612.h"
-#include "includes/megadriv.h"
-#include "includes/megadriv_acbl.h"
-
-static INPUT_PORTS_START( hshavoc )
- PORT_START("IN0") /* 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
-
-
-ROM_START( hshavoc )
- ROM_REGION( 0x200000, "maincpu", 0 )
- ROM_LOAD16_BYTE( "d-25.11a", 0x000000, 0x080000, CRC(6a155060) SHA1(ecb47bd428786e50e300a062b5038f943419a389) )
- ROM_LOAD16_BYTE( "d-26.9a", 0x000001, 0x080000, CRC(1afa84fe) SHA1(041296e0360b7747aedc2d948c39e06ba03a7d08) )
-
- ROM_REGION( 0x400, "user1", 0 ) // other
- ROM_LOAD( "peel18cv8s.4b.bin", 0x000, 0x155, CRC(b5fb1d5f) SHA1(f0ac80471d97f77f415b5a1f153e1fce66720963) )
- ROM_LOAD( "peel18cv8s.5b.bin", 0x000, 0x155, CRC(efc7ceea) SHA1(1c31a56bc4b83bfa708048b7de4cee7a24537500) )
-
- ROM_REGION( 0x407, "user2", 0 )
- ROM_LOAD( "pic16c55.bin", 0x000, 0x407, CRC(7163eb63) SHA1(d9c2cb7d24ce070d43597fabf012ebce47693954) ) // decapped
-ROM_END
-
-
-void md_boot_state::init_hshavoc()
-{
- uint16_t *src = (uint16_t *)memregion("maincpu")->base();
-
- static const uint16_t typedat[16] = {
- 1,1,1,1, 1,1,1,1,
- 1,0,0,1, 1,0,1,1 };
-
- /* this decryption is wrong / incomplete, maybe it uses slightly different decryption for opcodes / data */
- /* I think the PIC that exists on the PCB controls a state-based encryption... there is a large amount
- of code encrypted using the same encryption as the data, but all the startup-code + vectors use additional
- encryption.. maybe the PIC can also patch the code, I'm also concerned that we may decrypt it and find
- that it runs as the Genesis (no insert coin etc.) version without the PIC, or the PIC supplies additional
- code in RAM.. but as of yet we can't know */
-
- int rom_size = 0xe8000;
- for (int x = 0; x < rom_size / 2; x++)
- {
- src[x] = bitswap<16>(src[x],
- 7, 15,6, 14,
- 5, 2, 1, 10,
- 13,4, 12,3,
- 11,0, 8, 9 );
-
-
- if (typedat[x & 0xf] == 1)
- src[x] = src[x] ^ 0x0501;
- else
- src[x] = src[x] ^ 0x0406;
-
-
- if (src[x] & 0x0400)
- src[x] ^= 0x0200;
-
- if (typedat[x & 0xf] == 0)
- {
- if (src[x] & 0x0100)
- src[x] ^= 0x0004;
-
- src[x] = bitswap<16>(src[x], 15,14,13,12,
- 11,9, 10,8,
- 7, 6, 5, 4,
- 3, 2, 1, 0 );
- }
- }
-
- /* START e? from e80000 to end you need THIS ALONE to match the genesis rom */
- for (int x = rom_size / 2; x < 0x100000 / 2; x++)
- src[x] = bitswap<16>(src[x],
- 7, 15, 6, 14,
- 5, 2, 1, 0,
- 13, 4, 12, 3,
- 11, 10, 9, 8 );
- /* EMD e80000 - end */
-
- src[0] ^= 0x0107;
- src[1] ^= 0x0107;
- src[2] ^= 0x0107;
- src[3] ^= 0x0707; //? 0701 not 0107 .. conditional 0x600 extra xor?, different 'typemap' ??
-
- /* I'm pretty sure c42 is where the startup code is located, comparing genesis version
- and this there is at least one jump in the genesis version to the startup code which
- has been changed to this address in the arcade version.
-
- there are several blocks of code like this, all appear to end with a normal rts instruction
- tho...
- */
- for (int x = 0xc42 / 2; x < 0xc9a / 2; x++)
- {
- src[x] ^= 0x0107; //? seems conditional..
-
- src[x] = bitswap<16>(src[x],
- 15,13,14,12,
- 11,10,9, 0,
- 8, 6, 5, 4,
- 3, 2, 1, 7 ); // probably wrong
-
- src[x] ^= 0x0001; // wrong..
- }
-
-/* Uncommented until actively worked on
- {
- FILE*FP;
-
- FP = fopen("hshavoc.dump", "wb");
-
- fwrite(src, rom_size / 2, 2, FP);
- fclose(FP);
- }
-*/
-
- {
- address_space &space = m_maincpu->space(AS_PROGRAM);
- space.nop_write(0x200000, 0x201fff);
- }
-
- init_megadriv();
-
- m_vdp->stop_timers();
-}
-
-
-GAME( 1993, hshavoc, 0, md_bootleg, hshavoc, md_boot_state, init_hshavoc, ROT0, "Data East", "High Seas Havoc", MACHINE_NOT_WORKING )