Previous 15994 Revisions Next

r12705 Wednesday 24th August, 2011 at 06:51:22 UTC by Miodrag Milanović
Sync with MAME r13614 (no whatsnew)
[src/emu]addrmap.h eminline.h
[src/emu/drivers]xtal.h
[src/mame]mame.lst mame.mak
[src/mame/drivers]cavesh3.c chihiro.c esd16.c gaelco.c naomi.c sothello.c taito_f3.c taitojc.c triforce.c williams.c
[src/mame/includes]naomi.h naomibd.h taitojc.h williams.h
[src/mame/machine]awboard.c* awboard.h* dc.c gdcrypt.c maple-dc.c naomibd.c naomibd.h* naomig1.c* naomig1.h* naomigd.c* naomigd.h* naomim1.c* naomim1.h* naomim2.c* naomim2.h* naomim4.c* naomim4.h* naomim4decoder.c naomim4decoder.h naomirom.c* naomirom.h* williams.c
[src/mame/video]taitojc.c
[src/mess]mess.mak

src/mame/mame.lst
r12704r12705
48314831spkrbtl         // 2001.07 Spikers Battle
48324832cvs2gd         // 2001.08 Capcom Vs. SNK 2 Millionaire Fighting 2001 (Rev A)
48334833wrungp         // 2001.08 Wave Runner GP
4834            // 2001.09 Alien Front
4834alienfnt      // 2001.09 Alien Front
48354835hmgeo         // 2001.09 Heavy Metal Geomatrix (Rev A)
48364836gundmxgd      // 2001.09 Mobile Suit Gundam: Federation Vs. Zeon DX
48374837derbyoc2      // 2001.10 Derby Owners Club II (Rev B)
r12704r12705
79577957aligator      // (c) 1994 - Ref 940411
79587958aligatorun      // (c) 1994 - Ref 940411 (unprotected)
79597959biomtoy         // (c) 1995 - Ref 922804/2 - (unprotected)
7960biomtoya      // (c) 1995 - Ref 922804/2 - (unprotected)
79607961touchgo         // (c) 1995 - Ref 950906
79617962touchgon      // (c) 1995 - Ref 950906
79627963touchgoe      // (c) 1995 - Ref 950510-1
src/mame/machine/naomim4decoder.c
r12704r12705
1#include "naomim4decoder.h"
2
3const UINT8 NaomiM4Decoder::k_sboxes[4][16] = {
4    {13,14,1,11,7,9,10,0,15,6,4,5,8,2,12,3},
5    {12,3,14,6,7,15,2,13,1,4,11,0,9,10,8,5},
6    {6,12,0,10,1,5,14,9,7,2,15,13,4,11,3,8},
7    {9,12,8,7,10,4,0,15,1,11,14,2,13,5,6,3}
8};
9
10NaomiM4Decoder::NaomiM4Decoder(UINT32 cart_key)
11: m_key(cart_key & 0xffff)
12, m_iv(cart_key >> 16)   // initialization vector
13{
14    m_one_round = global_alloc_array(UINT16,0x10000);
15
16    // populate the lookup table for one of the internal rounds of the cipher
17    for (UINT32 i=0; i<0x10000; ++i)
18    {
19        m_one_round[i] = one_round_core(i);
20    }
21}
22
23NaomiM4Decoder::~NaomiM4Decoder()
24{
25    global_free(m_one_round);
26}
27
28void NaomiM4Decoder::init()
29{
30    m_counter = 0;
31}
32
33UINT16 NaomiM4Decoder::decrypt(UINT16 ciphertext)          // decrypt the next 16-bits value in the stream
34{
35    if (0 == (m_counter++ & 0xf))  // the iv is recovered every 16 values (32 bytes)
36        m_middle_value = m_iv;
37
38    UINT16 output_whitening = m_key ^ m_middle_value;
39
40    m_middle_value = m_one_round[ciphertext ^ m_middle_value];
41
42    return m_one_round[m_middle_value ^ m_key] ^ output_whitening;
43}
44
45UINT16 NaomiM4Decoder::one_round_core(UINT16 round_input)
46{
47    UINT8 input_nibble[4];
48    UINT8 output_nibble[4];
49    UINT8 aux_nibble;
50    UINT8 nibble_idx;
51    UINT8 i;
52    UINT16 result;
53
54    for (nibble_idx = 0; nibble_idx < 4; ++nibble_idx, round_input >>= 4)
55    {
56        input_nibble[nibble_idx] = round_input & 0xf;
57        output_nibble[nibble_idx] = 0;
58    }
59
60    aux_nibble = input_nibble[3];
61    for (nibble_idx = 0; nibble_idx < 4; ++nibble_idx)  // 4 s-boxes per round
62    {
63        aux_nibble ^= k_sboxes[nibble_idx][input_nibble[nibble_idx]];
64        for (i = 0; i < 4; ++i)  // diffusion of the bits
65            output_nibble[(nibble_idx - i) & 3] |= aux_nibble & (1 << i);
66    }
67
68    for (nibble_idx = 0, result = 0; nibble_idx < 4; ++nibble_idx)
69        result |= (output_nibble[nibble_idx] << (4 * nibble_idx));
70
71    return result;
72}
73
src/mame/machine/naomim4decoder.h
r12704r12705
1#pragma once
2
3#ifndef __NAOMIM4DECODER_H__
4#define __NAOMIM4DECODER_H__
5
6#include "emu.h"
7
8// Decoder for M4-type NAOMI cart encryption
9
10// In hardware, the decryption is managed by the XC3S50 Xilinx Spartan FPGA (IC2)
11// and the annexed PIC16C621A PIC MCU (IC3).
12// - The FPGA control the clock line of the security PIC.
13// - The protocol between the FPGA and the MCU is nibble-based, though it hasn't been RE for now.
14// - The decryption algorithm is clearly nibble-based too.
15
16// The decryption algorithm itself implements a stream cipher built on top of a 16-bits block cipher.
17// The underlying block-cipher is a SP-network of 2 rounds (both identical in structure). In every
18// round, the substitution phase is done using 4 fixed 4-to-4 sboxes acting on every nibble. The permutation
19// phase is indeed a nibble-based linear combination.
20// With that block cipher, a stream cipher is constructed by feeding the output result of the 1st round
21// of a certain 16-bits block as a whitening value for the next block. The cart dependent data used by
22// the algorithm is comprised by a 16-bits "key" and a 16-bits IV (initialization vector) --though they
23// will be merged in a only 32-bits number in the code--. The hardware auto-reset the feed value
24// to the cart-based IV every 16 blocks (32 bytes); that reset is not address-based, but index-based.
25
26class NaomiM4Decoder
27{
28public:
29    NaomiM4Decoder(UINT32 cart_key);
30    ~NaomiM4Decoder();
31
32    void init();        // initialize the decryption of a new stream (set the IV)
33    UINT16 decrypt(UINT16 ciphertext);      // decrypt the next 16-bits value in the stream
34
35private:
36    UINT16 one_round_core(UINT16 round_input);
37
38    static const UINT8 k_sboxes[4][16];
39    UINT16 *m_one_round;
40    const UINT16 m_key;
41    const UINT16 m_iv;
42    UINT16 m_middle_value;  // used by the stream cipher as feeding to the next block
43    UINT8 m_counter;
44};
45
46#endif // __NAOMIM4DECODER_H__
src/mame/machine/gdcrypt.c
r12704r12705
1
2/* DES decryption, used by GD-ROM based titles (Naomi etc.) */
3
4#include "emu.h"
5#include "includes/naomi.h"
6
7static UINT32 des_subkeys[32];
8
9static const UINT32 DES_LEFTSWAP[] =
10{
11  0x00000000, 0x00000001, 0x00000100, 0x00000101, 0x00010000, 0x00010001, 0x00010100, 0x00010101,
12  0x01000000, 0x01000001, 0x01000100, 0x01000101, 0x01010000, 0x01010001, 0x01010100, 0x01010101
13};
14
15static const UINT32 DES_RIGHTSWAP[] =
16{
17  0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100, 0x00010100, 0x01010100,
18  0x00000001, 0x01000001, 0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101, 0x01010101,
19};
20
21static const UINT32 DES_SBOX1[] =
22{
23  0x00808200, 0x00000000, 0x00008000, 0x00808202, 0x00808002, 0x00008202, 0x00000002, 0x00008000,
24  0x00000200, 0x00808200, 0x00808202, 0x00000200, 0x00800202, 0x00808002, 0x00800000, 0x00000002,
25  0x00000202, 0x00800200, 0x00800200, 0x00008200, 0x00008200, 0x00808000, 0x00808000, 0x00800202,
26  0x00008002, 0x00800002, 0x00800002, 0x00008002, 0x00000000, 0x00000202, 0x00008202, 0x00800000,
27  0x00008000, 0x00808202, 0x00000002, 0x00808000, 0x00808200, 0x00800000, 0x00800000, 0x00000200,
28  0x00808002, 0x00008000, 0x00008200, 0x00800002, 0x00000200, 0x00000002, 0x00800202, 0x00008202,
29  0x00808202, 0x00008002, 0x00808000, 0x00800202, 0x00800002, 0x00000202, 0x00008202, 0x00808200,
30  0x00000202, 0x00800200, 0x00800200, 0x00000000, 0x00008002, 0x00008200, 0x00000000, 0x00808002
31};
32
33static const UINT32 DES_SBOX2[] =
34{
35  0x40084010, 0x40004000, 0x00004000, 0x00084010, 0x00080000, 0x00000010, 0x40080010, 0x40004010,
36  0x40000010, 0x40084010, 0x40084000, 0x40000000, 0x40004000, 0x00080000, 0x00000010, 0x40080010,
37  0x00084000, 0x00080010, 0x40004010, 0x00000000, 0x40000000, 0x00004000, 0x00084010, 0x40080000,
38  0x00080010, 0x40000010, 0x00000000, 0x00084000, 0x00004010, 0x40084000, 0x40080000, 0x00004010,
39  0x00000000, 0x00084010, 0x40080010, 0x00080000, 0x40004010, 0x40080000, 0x40084000, 0x00004000,
40  0x40080000, 0x40004000, 0x00000010, 0x40084010, 0x00084010, 0x00000010, 0x00004000, 0x40000000,
41  0x00004010, 0x40084000, 0x00080000, 0x40000010, 0x00080010, 0x40004010, 0x40000010, 0x00080010,
42  0x00084000, 0x00000000, 0x40004000, 0x00004010, 0x40000000, 0x40080010, 0x40084010, 0x00084000
43};
44
45static const UINT32 DES_SBOX3[] =
46{
47  0x00000104, 0x04010100, 0x00000000, 0x04010004, 0x04000100, 0x00000000, 0x00010104, 0x04000100,
48  0x00010004, 0x04000004, 0x04000004, 0x00010000, 0x04010104, 0x00010004, 0x04010000, 0x00000104,
49  0x04000000, 0x00000004, 0x04010100, 0x00000100, 0x00010100, 0x04010000, 0x04010004, 0x00010104,
50  0x04000104, 0x00010100, 0x00010000, 0x04000104, 0x00000004, 0x04010104, 0x00000100, 0x04000000,
51  0x04010100, 0x04000000, 0x00010004, 0x00000104, 0x00010000, 0x04010100, 0x04000100, 0x00000000,
52  0x00000100, 0x00010004, 0x04010104, 0x04000100, 0x04000004, 0x00000100, 0x00000000, 0x04010004,
53  0x04000104, 0x00010000, 0x04000000, 0x04010104, 0x00000004, 0x00010104, 0x00010100, 0x04000004,
54  0x04010000, 0x04000104, 0x00000104, 0x04010000, 0x00010104, 0x00000004, 0x04010004, 0x00010100
55};
56
57static const UINT32 DES_SBOX4[] =
58{
59  0x80401000, 0x80001040, 0x80001040, 0x00000040, 0x00401040, 0x80400040, 0x80400000, 0x80001000,
60  0x00000000, 0x00401000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00400040, 0x80400000,
61  0x80000000, 0x00001000, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x80001000, 0x00001040,
62  0x80400040, 0x80000000, 0x00001040, 0x00400040, 0x00001000, 0x00401040, 0x80401040, 0x80000040,
63  0x00400040, 0x80400000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00000000, 0x00401000,
64  0x00001040, 0x00400040, 0x80400040, 0x80000000, 0x80401000, 0x80001040, 0x80001040, 0x00000040,
65  0x80401040, 0x80000040, 0x80000000, 0x00001000, 0x80400000, 0x80001000, 0x00401040, 0x80400040,
66  0x80001000, 0x00001040, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x00001000, 0x00401040
67};
68
69static const UINT32 DES_SBOX5[] =
70{
71  0x00000080, 0x01040080, 0x01040000, 0x21000080, 0x00040000, 0x00000080, 0x20000000, 0x01040000,
72  0x20040080, 0x00040000, 0x01000080, 0x20040080, 0x21000080, 0x21040000, 0x00040080, 0x20000000,
73  0x01000000, 0x20040000, 0x20040000, 0x00000000, 0x20000080, 0x21040080, 0x21040080, 0x01000080,
74  0x21040000, 0x20000080, 0x00000000, 0x21000000, 0x01040080, 0x01000000, 0x21000000, 0x00040080,
75  0x00040000, 0x21000080, 0x00000080, 0x01000000, 0x20000000, 0x01040000, 0x21000080, 0x20040080,
76  0x01000080, 0x20000000, 0x21040000, 0x01040080, 0x20040080, 0x00000080, 0x01000000, 0x21040000,
77  0x21040080, 0x00040080, 0x21000000, 0x21040080, 0x01040000, 0x00000000, 0x20040000, 0x21000000,
78  0x00040080, 0x01000080, 0x20000080, 0x00040000, 0x00000000, 0x20040000, 0x01040080, 0x20000080
79};
80
81static const UINT32 DES_SBOX6[] =
82{
83  0x10000008, 0x10200000, 0x00002000, 0x10202008, 0x10200000, 0x00000008, 0x10202008, 0x00200000,
84  0x10002000, 0x00202008, 0x00200000, 0x10000008, 0x00200008, 0x10002000, 0x10000000, 0x00002008,
85  0x00000000, 0x00200008, 0x10002008, 0x00002000, 0x00202000, 0x10002008, 0x00000008, 0x10200008,
86  0x10200008, 0x00000000, 0x00202008, 0x10202000, 0x00002008, 0x00202000, 0x10202000, 0x10000000,
87  0x10002000, 0x00000008, 0x10200008, 0x00202000, 0x10202008, 0x00200000, 0x00002008, 0x10000008,
88  0x00200000, 0x10002000, 0x10000000, 0x00002008, 0x10000008, 0x10202008, 0x00202000, 0x10200000,
89  0x00202008, 0x10202000, 0x00000000, 0x10200008, 0x00000008, 0x00002000, 0x10200000, 0x00202008,
90  0x00002000, 0x00200008, 0x10002008, 0x00000000, 0x10202000, 0x10000000, 0x00200008, 0x10002008
91};
92
93static const UINT32 DES_SBOX7[] =
94{
95  0x00100000, 0x02100001, 0x02000401, 0x00000000, 0x00000400, 0x02000401, 0x00100401, 0x02100400,
96  0x02100401, 0x00100000, 0x00000000, 0x02000001, 0x00000001, 0x02000000, 0x02100001, 0x00000401,
97  0x02000400, 0x00100401, 0x00100001, 0x02000400, 0x02000001, 0x02100000, 0x02100400, 0x00100001,
98  0x02100000, 0x00000400, 0x00000401, 0x02100401, 0x00100400, 0x00000001, 0x02000000, 0x00100400,
99  0x02000000, 0x00100400, 0x00100000, 0x02000401, 0x02000401, 0x02100001, 0x02100001, 0x00000001,
100  0x00100001, 0x02000000, 0x02000400, 0x00100000, 0x02100400, 0x00000401, 0x00100401, 0x02100400,
101  0x00000401, 0x02000001, 0x02100401, 0x02100000, 0x00100400, 0x00000000, 0x00000001, 0x02100401,
102  0x00000000, 0x00100401, 0x02100000, 0x00000400, 0x02000001, 0x02000400, 0x00000400, 0x00100001
103};
104
105static const UINT32 DES_SBOX8[] =
106{
107  0x08000820, 0x00000800, 0x00020000, 0x08020820, 0x08000000, 0x08000820, 0x00000020, 0x08000000,
108  0x00020020, 0x08020000, 0x08020820, 0x00020800, 0x08020800, 0x00020820, 0x00000800, 0x00000020,
109  0x08020000, 0x08000020, 0x08000800, 0x00000820, 0x00020800, 0x00020020, 0x08020020, 0x08020800,
110  0x00000820, 0x00000000, 0x00000000, 0x08020020, 0x08000020, 0x08000800, 0x00020820, 0x00020000,
111  0x00020820, 0x00020000, 0x08020800, 0x00000800, 0x00000020, 0x08020020, 0x00000800, 0x00020820,
112  0x08000800, 0x00000020, 0x08000020, 0x08020000, 0x08020020, 0x08000000, 0x00020000, 0x08000820,
113  0x00000000, 0x08020820, 0x00020020, 0x08000020, 0x08020000, 0x08000800, 0x08000820, 0x00000000,
114  0x08020820, 0x00020800, 0x00020800, 0x00000820, 0x00000820, 0x00020020, 0x08000000, 0x08020800
115};
116
117static const UINT32 DES_MASK_TABLE[] =
118{
119   0x24000000, 0x10000000, 0x08000000, 0x02080000, 0x01000000,
120   0x00200000, 0x00100000, 0x00040000, 0x00020000, 0x00010000,
121   0x00002000, 0x00001000, 0x00000800, 0x00000400, 0x00000200,
122   0x00000100, 0x00000020, 0x00000010, 0x00000008, 0x00000004,
123   0x00000002, 0x00000001, 0x20000000, 0x10000000, 0x08000000,
124   0x04000000, 0x02000000, 0x01000000, 0x00200000, 0x00100000,
125   0x00080000, 0x00040000, 0x00020000, 0x00010000, 0x00002000,
126   0x00001000, 0x00000808, 0x00000400, 0x00000200, 0x00000100,
127   0x00000020, 0x00000011, 0x00000004, 0x00000002
128};
129
130static const UINT8 DES_ROTATE_TABLE[16] =
131{
132  1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
133};
134
135
136INLINE void permutate(UINT32*a, UINT32*b, UINT32 m, int shift)
137{
138   UINT32 temp;
139    temp = ((*a>>shift) ^ *b) & m;
140    *a ^= temp<<shift;
141    *b ^= temp;
142}
143
144
145static void des_generate_subkeys(const UINT64 key, UINT32 *subkeys)
146{
147   UINT32 l, r;
148   int round;
149
150   l  = (key & 0xffffffff00000000ULL)>>32;
151   r = (key & 0x00000000ffffffffULL)>>0;;
152
153   permutate(&r, &l, 0x0f0f0f0f, 4);
154   permutate(&r, &l, 0x10101010, 0);
155
156   l  = (DES_LEFTSWAP[(l >> 0)  & 0xf] << 3) |
157           (DES_LEFTSWAP[(l >> 8)  & 0xf] << 2) |
158            (DES_LEFTSWAP[(l >> 16) & 0xf] << 1) |
159           (DES_LEFTSWAP[(l >> 24) & 0xf] << 0) |
160           (DES_LEFTSWAP[(l >> 5)  & 0xf] << 7) |
161           (DES_LEFTSWAP[(l >> 13) & 0xf] << 6) |
162           (DES_LEFTSWAP[(l >> 21) & 0xf] << 5) |
163           (DES_LEFTSWAP[(l >> 29) & 0xf] << 4);
164
165   r = (DES_RIGHTSWAP[(r >> 1)  & 0xf] << 3) |
166           (DES_RIGHTSWAP[(r >> 9)  & 0xf] << 2) |
167          (DES_RIGHTSWAP[(r >> 17) & 0xf] << 1) |
168          (DES_RIGHTSWAP[(r >> 25) & 0xf] << 0) |
169          (DES_RIGHTSWAP[(r >> 4)  & 0xf] << 7) |
170          (DES_RIGHTSWAP[(r >> 12) & 0xf] << 6) |
171          (DES_RIGHTSWAP[(r >> 20) & 0xf] << 5) |
172          (DES_RIGHTSWAP[(r >> 28) & 0xf] << 4);
173
174   l &= 0x0fffffff;
175   r &= 0x0fffffff;
176
177
178   for (round = 0; round < 16; round++)
179   {
180      l = ((l << DES_ROTATE_TABLE[round]) | (l >> (28 - DES_ROTATE_TABLE[round]))) & 0x0fffffff;
181      r = ((r << DES_ROTATE_TABLE[round]) | (r >> (28 - DES_ROTATE_TABLE[round]))) & 0x0fffffff;
182
183      subkeys[round*2] =
184         ((l << 4)  & DES_MASK_TABLE[0]) |
185          ((l << 28) & DES_MASK_TABLE[1]) |
186          ((l << 14) & DES_MASK_TABLE[2]) |
187          ((l << 18) & DES_MASK_TABLE[3]) |
188          ((l << 6)  & DES_MASK_TABLE[4]) |
189          ((l << 9)  & DES_MASK_TABLE[5]) |
190          ((l >> 1)  & DES_MASK_TABLE[6]) |
191          ((l << 10) & DES_MASK_TABLE[7]) |
192          ((l << 2)  & DES_MASK_TABLE[8]) |
193          ((l >> 10) & DES_MASK_TABLE[9]) |
194          ((r >> 13) & DES_MASK_TABLE[10])|
195          ((r >> 4)  & DES_MASK_TABLE[11])|
196          ((r << 6)  & DES_MASK_TABLE[12])|
197          ((r >> 1)  & DES_MASK_TABLE[13])|
198          ((r >> 14) & DES_MASK_TABLE[14])|
199          ((r >> 0)  & DES_MASK_TABLE[15])|
200          ((r >> 5)  & DES_MASK_TABLE[16])|
201          ((r >> 10) & DES_MASK_TABLE[17])|
202          ((r >> 3)  & DES_MASK_TABLE[18])|
203          ((r >> 18) & DES_MASK_TABLE[19])|
204          ((r >> 26) & DES_MASK_TABLE[20])|
205          ((r >> 24) & DES_MASK_TABLE[21]);
206
207      subkeys[round*2+1] =
208          ((l << 15) & DES_MASK_TABLE[22])|
209          ((l << 17) & DES_MASK_TABLE[23])|
210          ((l << 10) & DES_MASK_TABLE[24])|
211          ((l << 22) & DES_MASK_TABLE[25])|
212          ((l >> 2)  & DES_MASK_TABLE[26])|
213          ((l << 1)  & DES_MASK_TABLE[27])|
214          ((l << 16) & DES_MASK_TABLE[28])|
215          ((l << 11) & DES_MASK_TABLE[29])|
216          ((l << 3)  & DES_MASK_TABLE[30])|
217          ((l >> 6)  & DES_MASK_TABLE[31])|
218          ((l << 15) & DES_MASK_TABLE[32])|
219          ((l >> 4)  & DES_MASK_TABLE[33])|
220          ((r >> 2)  & DES_MASK_TABLE[34])|
221          ((r << 8)  & DES_MASK_TABLE[35])|
222          ((r >> 14) & DES_MASK_TABLE[36])|
223          ((r >> 9)  & DES_MASK_TABLE[37])|
224          ((r >> 0)  & DES_MASK_TABLE[38])|
225          ((r << 7)  & DES_MASK_TABLE[39])|
226          ((r >> 7)  & DES_MASK_TABLE[40])|
227          ((r >> 3)  & DES_MASK_TABLE[41])|
228          ((r << 2)  & DES_MASK_TABLE[42])|
229          ((r >> 21) & DES_MASK_TABLE[43]);
230    }
231}
232
233
234static UINT64 des_encrypt_decrypt(int decrypt, UINT64 ret)
235{
236   UINT32 l;
237   UINT32 r;
238   int i;
239   int subkey;
240
241   r = (ret & 0x00000000ffffffffULL) >> 0;
242   l = (ret & 0xffffffff00000000ULL) >> 32;
243
244   permutate(&l,  &r, 0x0f0f0f0f, 4);
245   permutate(&l,  &r, 0x0000ffff, 16);
246   permutate(&r,  &l, 0x33333333, 2);
247   permutate(&r,  &l, 0x00ff00ff, 8);
248   permutate(&l,  &r, 0x55555555, 1);
249
250   if (decrypt) subkey = 30;
251   else subkey = 0;
252
253   for (i = 0; i < 32 ; i+=4)
254   {
255      UINT32 temp;
256
257       temp = ((r<<1) | (r>>31)) ^ des_subkeys[subkey];
258       l ^= DES_SBOX8[ (temp>>0)  & 0x3f ];
259       l ^= DES_SBOX6[ (temp>>8)  & 0x3f ];
260       l ^= DES_SBOX4[ (temp>>16) & 0x3f ];
261       l ^= DES_SBOX2[ (temp>>24) & 0x3f ];
262      subkey++;
263
264      temp = ((r>>3) | (r<<29)) ^ des_subkeys[subkey];
265       l ^= DES_SBOX7[ (temp>>0)  & 0x3f ];
266       l ^= DES_SBOX5[ (temp>>8)  & 0x3f ];
267       l ^= DES_SBOX3[ (temp>>16) & 0x3f ];
268       l ^= DES_SBOX1[ (temp>>24) & 0x3f ];
269      subkey++;
270      if (decrypt) subkey-=4;
271
272       temp = ((l<<1) | (l>>31)) ^ des_subkeys[subkey];
273       r ^= DES_SBOX8[ (temp>>0)  & 0x3f ];
274       r ^= DES_SBOX6[ (temp>>8)  & 0x3f ];
275       r ^= DES_SBOX4[ (temp>>16) & 0x3f ];
276       r ^= DES_SBOX2[ (temp>>24) & 0x3f ];
277      subkey++;
278
279      temp = ((l>>3) | (l<<29)) ^ des_subkeys[subkey];
280       r ^= DES_SBOX7[ (temp>>0)  & 0x3f ];
281       r ^= DES_SBOX5[ (temp>>8)  & 0x3f ];
282       r ^= DES_SBOX3[ (temp>>16) & 0x3f ];
283       r ^= DES_SBOX1[ (temp>>24) & 0x3f ];
284      subkey++;
285      if (decrypt) subkey-=4;
286   }
287
288   permutate(&r, &l,  0x55555555, 1);
289   permutate(&l, &r,  0x00ff00ff, 8);
290   permutate(&l, &r,  0x33333333, 2);
291   permutate(&r, &l,  0x0000ffff, 16);
292   permutate(&r, &l,  0x0f0f0f0f, 4);
293
294   return ((UINT64)r << 32) | ((UINT64)l);
295}
296
297static UINT64 rev64(UINT64 src)
298{
299   UINT64 ret;
300
301   ret = ((src & 0x00000000000000ffULL) << 56)
302       | ((src & 0x000000000000ff00ULL) << 40)
303       | ((src & 0x0000000000ff0000ULL) << 24)
304       | ((src & 0x00000000ff000000ULL) << 8 )
305       | ((src & 0x000000ff00000000ULL) >> 8 )
306       | ((src & 0x0000ff0000000000ULL) >> 24)
307       | ((src & 0x00ff000000000000ULL) >> 40)
308       | ((src & 0xff00000000000000ULL) >> 56);
309
310   return ret;
311}
312
313static UINT64 read_to_qword(UINT8* region)
314{
315   int i;
316   UINT64 ret = 0;
317
318   for (i=0;i<8;i++)
319   {
320      UINT8 byte = region[i];
321      ret += (UINT64)byte << (56-(8*i));
322   }
323
324   return ret;
325}
326
327
328static void write_from_qword(UINT8* region, UINT64 qword)
329{
330   int i;
331   for (i=0;i<8;i++)
332   {
333      region[i] = qword >> (56-(i*8));
334   }
335}
336
337void naomi_game_decrypt(running_machine& machine, UINT64 key, UINT8* region, int length)
338{
339   int i;
340
341   des_generate_subkeys (rev64(key), des_subkeys);
342
343   #ifdef MAME_DEBUG
344   /* save the original file */
345   {
346      FILE *fp;
347      char filename[256];
348      sprintf(filename,"encrypted %s", machine.system().name);
349      fp=fopen(filename, "w+b");
350      if (fp)
351      {
352         fwrite(region, length, 1, fp);
353         fclose(fp);
354      }
355   }
356   #endif
357
358   for(i=0;i<length;i+=8)
359   {
360      UINT64 ret;
361      ret = read_to_qword(region+i);
362      ret = rev64(ret);
363      ret = des_encrypt_decrypt(1, ret);
364      ret = rev64(ret);
365      write_from_qword(region+i, ret);
366   }
367
368   #ifdef MAME_DEBUG
369   /* save the decrypted file */
370   {
371      FILE *fp;
372      char filename[256];
373      sprintf(filename,"decrypted %s", machine.system().name);
374      fp=fopen(filename, "w+b");
375      if (fp)
376      {
377         fwrite(region, length, 1, fp);
378         fclose(fp);
379      }
380   }
381   #endif
382}
383
src/mame/machine/naomim2.c
r0r12705
1#define ADDRESS_MAP_MODERN
2
3#include "emu.h"
4#include "naomim2.h"
5
6const device_type NAOMI_M2_BOARD = &device_creator<naomi_m2_board>;
7
8naomi_m2_board::naomi_m2_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
9   : naomi_board(mconfig, NAOMI_M2_BOARD, "NAOMI-M2-BOARD", tag, owner, clock)
10{
11   key_tag = 0;
12}
13
14void naomi_m2_board::static_set_tags(device_t &device, const char *_key_tag)
15{
16   naomi_m2_board &dev = downcast<naomi_m2_board &>(device);
17   dev.key_tag = _key_tag;
18}
19
20void naomi_m2_board::device_start()
21{
22   naomi_board::device_start();
23
24   const UINT8 *key_data = machine().region(key_tag)->base();
25   key = (key_data[0] << 24) | (key_data[1] << 16) | (key_data[2] << 8) | key_data[3];
26
27   ram = auto_alloc_array(machine(), UINT8, RAM_SIZE);
28   buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE);
29   line_buffer = auto_alloc_array(machine(), UINT8, LINE_SIZE);
30   line_buffer_prev = auto_alloc_array(machine(), UINT8, LINE_SIZE);
31
32   save_pointer(NAME(ram), RAM_SIZE);
33   save_pointer(NAME(buffer), BUFFER_SIZE);
34   save_pointer(NAME(line_buffer), LINE_SIZE);
35   save_pointer(NAME(line_buffer_prev), LINE_SIZE);
36   save_item(NAME(rom_cur_address));
37   save_item(NAME(prot_cur_address));
38   save_item(NAME(subkey));
39   save_item(NAME(enc_ready));
40   save_item(NAME(dec_hist));
41   save_item(NAME(dec_header));
42   save_item(NAME(buffer_pos));
43   save_item(NAME(line_buffer_pos));
44   save_item(NAME(line_buffer_size));
45}
46
47void naomi_m2_board::device_reset()
48{
49   naomi_board::device_reset();
50
51   memset(ram, 0, RAM_SIZE);
52   memset(buffer, 0, BUFFER_SIZE);
53   memset(line_buffer, 0, LINE_SIZE);
54   memset(line_buffer_prev, 0, LINE_SIZE);
55
56   rom_cur_address = 0;
57   prot_cur_address = 0;
58   subkey = 0;
59   dec_hist = 0;
60   dec_header = 0;
61   enc_ready = false;
62
63   buffer_pos = 0;
64   line_buffer_pos = 0;
65   line_buffer_size = 0;
66   buffer_bit = 0;
67}
68
69void naomi_m2_board::board_setup_address(UINT32 address, bool is_dma)
70{
71   rom_cur_address = address;
72}
73
74void naomi_m2_board::board_get_buffer(UINT8 *&base, UINT32 &limit)
75{
76   if(rom_cur_address & 0x40000000) {
77
78      if(rom_cur_address == 0x4001fffe) {
79         if(!enc_ready)
80            enc_start();
81         if(dec_header & FLAG_COMPRESSED) {
82            if(line_buffer_pos == line_buffer_size)
83               line_fill();
84            base = line_buffer + line_buffer_pos;
85            line_buffer_pos += 2;
86         } else {
87            if(buffer_pos == BUFFER_SIZE)
88               enc_fill();
89            base = buffer + buffer_pos;
90            buffer_pos += 2;
91         }
92         limit = 2;
93
94      } else
95         throw emu_fatalerror("NAOMIM2: Unsupported, read from %08x", rom_cur_address);
96
97   } else {
98      base = m_region->base() + (rom_cur_address & 0x1fffffff);
99      limit = m_region->bytes() - (rom_cur_address & 0x1fffffff);
100   }
101}
102
103void naomi_m2_board::board_advance(UINT32 size)
104{
105   rom_cur_address += size;
106}
107
108void naomi_m2_board::board_write(offs_t offset, UINT16 data)
109{
110   if(offset & 0x40000000) {
111      if((offset & 0x0f000000) == 0x02000000) {
112         offset &= RAM_SIZE-1;
113         ram[offset] = data;
114         ram[offset+1] = data >> 8;
115         return;
116      }
117      switch(offset & 0x1fffffff) {
118      case 0x1fff8: prot_cur_address = (prot_cur_address & 0xffff0000) | data; enc_ready = false; return;
119      case 0x1fffa: prot_cur_address = (prot_cur_address & 0x0000ffff) | (data << 16); enc_ready = false; return;
120      case 0x1fffc: subkey = data; enc_ready = false; return;
121      }
122   }
123   throw emu_fatalerror("NAOMIM2: unhandled board write %08x, %04x\n", offset, data);
124}
125
126/***************************************************************************
127    DECRYPTION EMULATION
128
129By convention, we label the three known cart protection methods this way (using Deunan Knute's wording):
130M1: DMA read of protected ROM area
131M2: special read of ROM area which supplies decryption key first
132M3: normal read followed by write to cart's decryption buffer (up to 64kB), followed by M2 but from buffer area
133
134Notes below refer to M2 & M3.
135
136The encryption is done by a stream cipher operating in counter mode, which use a 16-bits internal block cipher.
137
138There are 2 "control bits" at the start of the decrypted stream which control the mode of operation: bit #1 set to 1 means
139that the decrypted stream needs to be decompressed after being decrypted. More on this later.
140
141The next 16-bits are part of the header (they don't belong to the plaintext), but his meaning is unclear. It has been
142conjectured that it could stablish when to "reset" the process and start processing a new stream (based on some tests
143on WWFROYAL, in which the decryption's output doesn't seem to be valid for more than some dozens of words), but some
144more testing would be needed for clarifying that.
145
146After those 18 heading bits, we find the proper plaintext. It must be noted that, due to the initial 2 special bits,
147the 16-bits words of the plaintext are shifted 2 bits respect to the word-boundaries of the output stream of the
148internal block-cipher. So, at a given step, the internal block cipher will output 16-bits, 14 of which will go to a
149given plaintext word, and the remaining 2 to the next plaintext word.
150
151The underlying block cipher consists of two 4-round Feistel Networks (FN): the first one takes the counter (16 bits),
152the game-key (>=26 bits) and the sequence-key (16 bits) and output a middle result (16 bits) which will act as another key
153for the second one. The second FN will take the encrypted word (16 bits), the game-key, the sequence-key and the result
154from the first FN and will output the decrypted word (16 bits).
155
156Each round of the Feistel Networks use four substitution sboxes, each having 6 inputs and 2 outputs. The input can be the
157XOR of at most two "sources bits", being source bits the bits from the previous round and the bits from the different keys.
158
159The underlying block cipher has the same structure than the one used by the CPS-2 (Capcom Play System 2) and,
160indeed, some of the used sboxes are exactly the same and appear in the same FN/round in both systems (this is not evident,
161as you need to apply a bitswapping and some XORs to the input & output of the sboxes to get the same values due). However,
162the key scheduling used by this implementation is much weaker than the CPS-2's one. Many s-boxes inputs are XORed with any
163key bit.
164
165Due to the small key-length, no sophisticated attacks are needed to recover the keys; a brute-force attack knowing just
166some (encrypted word-decrypted word) pairs suffice. However, due to the weak key scheduling, it should be noted that some
167related keys can produce the same output bytes for some (short) input sequences.
168
169The only difference in the decryption process between M2 and M3 is the initialization of the counter. In M3, the counter is
170always set to 0 at the beginning of the decryption while, in M2, the bits #1-#16 of the ciphertext's address are used
171to initialize the counter.
172
173Note that this implementation considers that the counter initialization for ram decryption is 0 simply because the ram is
174mapped to multiples of 128K.
175
176Due to the nature of the cipher, there are some degrees of freedom when choosing the s-boxes and keys values; by example,
177you could apply a fixed bitswapping and XOR to the keys and the decryption would remain the same as long as you change
178accordingly the s-boxes' definitions. So the order of the bits in the keys is arbitrary, and the s-boxes values have been
179chosen so as to make the key for CAPSNK equal to 0.
180
181It can be observed that a couple of sboxes have incomplete tables (a 255 value indicate an unknown value). The recovered keys
182as of december/2010 show small randomness and big correlations, making possible that some unseen bits could make the
183decryption need those incomplete parts.
184
185****************************************************************************************/
186
187const naomi_m2_board::sbox naomi_m2_board::fn1_sboxes[4][4] = {
188   {   // 1st round
189      {
190         {
191            0,3,2,2,1,3,1,2,3,2,1,2,1,2,3,1,3,2,2,0,2,1,3,0,0,3,2,3,2,1,2,0,
192            2,3,1,1,2,2,1,1,1,0,2,3,3,0,2,1,1,1,1,1,3,0,3,2,1,0,1,2,0,3,1,3,
193         },
194         {3,4,5,7,-1,-1},
195         {0,4}
196      },
197
198      {
199         {
200            2,2,2,0,3,3,0,1,2,2,3,2,3,0,2,2,1,1,0,3,3,2,0,2,0,1,0,1,2,3,1,1,
201            0,1,3,3,1,3,3,1,2,3,2,0,0,0,2,2,0,3,1,3,0,3,2,2,0,3,0,3,1,1,0,2,
202         },
203         {0,1,2,5,6,7},
204         {1,6}
205      },
206
207      {
208         {
209            0,1,3,0,3,1,1,1,1,2,3,1,3,0,2,3,3,2,0,2,1,1,2,1,1,3,1,0,0,2,0,1,
210            1,3,1,0,0,3,2,3,2,0,3,3,0,0,0,0,1,2,3,3,2,0,3,2,1,0,0,0,2,2,3,3,
211         },
212         {0,2,5,6,7,-1},
213         {2,3}
214      },
215
216      {
217         {
218            3,2,1,2,1,2,3,2,0,3,2,2,3,1,3,3,0,2,3,0,3,3,2,1,1,1,2,0,2,2,0,1,
219            1,3,3,0,0,3,0,3,0,2,1,3,2,1,0,0,0,1,1,2,0,1,0,0,0,1,3,3,2,0,3,3,
220         },
221         {1,2,3,4,6,7},
222         {5,7}
223      },
224   },
225   {   // 2nd round
226      {
227         {
228            3,3,1,2,0,0,2,2,2,1,2,1,3,1,1,3,3,0,0,3,0,3,3,2,1,1,3,2,3,2,1,3,
229            2,3,0,1,3,2,0,1,2,1,3,1,2,2,3,3,3,1,2,2,0,3,1,2,2,1,3,0,3,0,1,3,
230         },
231         {0,1,3,4,5,7},
232         {0,4}
233      },
234
235      {
236         {
237            2,0,1,0,0,3,2,0,3,3,1,2,1,3,0,2,0,2,0,0,0,2,3,1,3,1,1,2,3,0,3,0,
238            3,0,2,0,0,2,2,1,0,2,3,3,1,3,1,0,1,3,3,0,0,1,3,1,0,2,0,3,2,1,0,1,
239         },
240         {0,1,3,4,6,-1},
241         {1,5}
242      },
243
244      {
245         {
246            2,2,2,3,1,1,0,1,0,1,2,2,3,3,0,2,0,3,2,3,3,0,2,1,0,3,1,0,0,2,3,2,
247            3,2,0,3,2,0,1,0,3,3,1,1,2,2,2,0,2,1,3,1,1,1,1,2,2,2,3,0,1,3,0,0,
248         },
249         {1,2,5,6,7,-1},
250         {2,7}
251      },
252
253      {
254         {
255            0,1,3,3,3,1,3,3,1,0,2,0,2,0,0,3,1,2,1,3,1,2,3,2,2,0,1,3,0,3,3,3,
256            0,0,0,2,1,1,2,3,2,2,3,1,1,2,0,2,0,2,1,3,1,1,3,3,1,1,3,0,2,3,0,0,
257         },
258         {2,3,4,5,6,7},
259         {3,6}
260      },
261   },
262   {   // 3rd round
263      {
264         {
265            0,0,1,0,1,0,0,3,2,0,0,3,0,1,0,2,0,3,0,0,2,0,3,2,2,1,3,2,2,1,1,2,
266            0,0,0,3,0,1,1,0,0,2,1,0,3,1,2,2,2,0,3,1,3,0,1,2,2,1,1,1,0,2,3,1,
267         },
268         {1,2,3,4,5,7},
269         {0,5}
270      },
271
272      {
273         {
274            1,2,1,0,3,1,1,2,0,0,2,3,2,3,1,3,2,0,3,2,2,3,1,1,1,1,0,3,2,0,0,1,
275            1,0,0,1,3,1,2,3,0,0,2,3,3,0,1,0,0,2,3,0,1,2,0,1,3,3,3,1,2,0,2,1,
276         },
277         {0,2,4,5,6,7},
278         {1,6}
279      },
280
281      {
282         {
283            0,3,0,2,1,2,0,0,1,1,0,0,3,1,1,0,0,3,0,0,2,3,3,2,3,1,2,0,0,2,3,0,
284            // unused?
285            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
286         },
287         {0,2,4,6,7,-1},
288         {2,3}
289      },
290
291      {
292         {
293            0,0,1,0,0,1,0,2,3,3,0,3,3,2,3,0,2,2,2,0,3,2,0,3,1,0,0,3,3,0,0,0,
294            2,2,1,0,2,0,3,2,0,0,3,1,3,3,0,0,2,1,1,2,1,0,1,1,0,3,1,2,0,2,0,3,
295         },
296         {0,1,2,3,6,-1},
297         {4,7}
298      },
299   },
300   {   // 4th round
301      {
302         {
303            0,3,3,3,3,3,2,0,0,1,2,0,2,2,2,2,1,1,0,2,2,1,3,2,3,2,0,1,2,3,2,1,
304            3,2,2,3,1,0,1,0,0,2,0,1,2,1,2,3,1,2,1,1,2,2,1,0,1,3,2,3,2,0,3,1,
305         },
306         {0,1,3,4,5,6},
307         {0,5}
308      },
309
310      {
311         {
312            0,3,0,0,2,0,3,1,1,1,2,2,2,1,3,1,2,2,1,3,2,2,3,3,0,3,1,0,3,2,0,1,
313            3,0,2,0,1,0,2,1,3,3,1,2,2,0,2,3,3,2,3,0,1,1,3,3,0,2,1,3,0,2,2,3,
314         },
315         {0,1,2,3,5,7},
316         {1,7}
317      },
318
319      {
320         {
321            0,1,2,3,3,3,3,1,2,0,2,3,2,1,0,1,2,2,1,2,0,3,2,0,1,1,0,1,3,1,3,1,
322            3,1,0,0,1,0,0,0,0,1,2,2,1,1,3,3,1,2,3,3,3,2,3,0,2,2,1,3,3,0,2,0,
323         },
324         {2,3,4,5,6,7},
325         {2,3}
326      },
327
328      {
329         {
330            0,2,1,1,3,2,0,3,1,0,1,0,3,2,1,1,2,2,0,3,1,0,1,2,2,2,3,3,0,0,0,0,
331            1,2,1,0,2,1,2,2,2,3,2,3,0,1,3,0,0,1,3,0,0,1,1,0,1,0,0,0,0,2,0,1,
332         },
333         {0,1,2,4,6,7},
334         {4,6}
335      },
336   },
337};
338
339
340const naomi_m2_board::sbox naomi_m2_board::fn2_sboxes[4][4] = {
341   {   // 1st round
342      {
343         {
344            3,3,0,1,0,1,0,0,0,3,0,0,1,3,1,2,0,3,3,3,2,1,0,1,1,1,2,2,2,3,2,2,
345            2,1,3,3,1,3,1,1,0,0,1,2,0,2,2,1,1,2,3,1,2,1,3,1,2,2,0,1,3,0,2,2,
346         },
347         {1,3,4,5,6,7},
348         {0,7}
349      },
350
351      {
352         {
353            0,2,3,2,1,1,0,0,2,1,0,3,3,0,0,0,3,2,0,2,1,1,2,1,0,0,3,1,2,2,3,1,
354            3,1,3,0,0,0,1,3,1,0,0,3,2,2,3,1,1,3,0,0,2,1,3,3,1,3,1,2,3,1,2,1,
355         },
356         {0,3,5,6,-1,-1},
357         {1,2}
358      },
359
360      {
361         {
362            0,2,2,1,0,1,2,1,2,0,1,2,3,3,0,1,3,1,1,2,1,2,1,3,3,2,3,3,2,1,0,1,
363            0,1,0,2,0,1,1,3,2,0,3,2,1,1,1,3,2,3,0,2,3,0,2,2,1,3,0,1,1,2,2,2,
364         },
365         {0,2,3,4,7,-1},
366         {3,4}
367      },
368
369      {
370         {
371            2,3,1,3,2,0,1,2,0,0,3,3,3,3,3,1,2,0,2,1,2,3,0,2,0,1,0,3,0,2,1,0,
372            2,3,0,1,3,0,3,2,3,1,2,0,3,1,1,2,0,3,0,0,2,0,2,1,2,2,3,2,1,2,3,1,
373         },
374         {1,2,5,6,-1,-1},
375         {5,6}
376      },
377   },
378   {   // 2nd round
379      {
380         {
381            2,3,1,3,1,0,3,3,3,2,3,3,2,0,0,3,2,3,0,3,1,1,2,3,1,1,2,2,0,1,0,0,
382            2,1,0,1,2,0,1,2,0,3,1,1,2,3,1,2,0,2,0,1,3,0,1,0,2,2,3,0,3,2,3,0,
383         },
384         {0,1,4,5,6,7},
385         {0,7}
386      },
387
388      {
389         {
390            0,2,2,0,2,2,0,3,2,3,2,1,3,2,3,3,1,1,0,0,3,0,2,1,1,3,3,2,3,2,0,1,
391            1,2,3,0,1,0,3,0,3,1,0,2,1,2,0,3,2,3,1,2,2,0,3,2,3,0,0,1,2,3,3,3,
392         },
393         {0,2,3,6,7,-1},
394         {1,5}
395      },
396
397      {
398         {
399            1,2,3,2,0,3,2,3,0,1,1,0,0,2,2,3,2,0,0,3,0,2,3,3,2,2,1,0,2,1,0,3,
400            1,0,2,0,1,1,0,1,0,0,1,0,3,0,3,3,2,2,0,2,1,1,1,0,3,0,1,3,2,3,2,1,
401         },
402         {2,3,4,6,7,-1},
403         {2,3}
404      },
405
406      {
407         {
408            2,3,1,3,1,1,2,3,3,1,1,0,1,0,2,3,2,1,0,0,2,2,0,1,0,2,2,2,0,2,1,0,
409            3,1,2,3,1,3,0,2,1,0,1,0,0,1,2,2,3,2,3,1,3,2,1,1,2,0,2,1,3,3,1,0,
410         },
411         {1,2,3,4,5,6},
412         {4,6}
413      },
414   },
415   {   // 3rd round
416      {
417         {
418            0,3,0,1,0,2,3,3,1,0,1,3,2,2,1,1,3,3,3,0,2,0,2,0,0,0,2,3,1,1,0,0,
419            3,3,0,3,3,0,0,2,1,1,1,0,2,2,2,0,3,0,3,1,2,2,0,3,0,0,3,2,0,3,2,1,
420         },
421         {1,4,5,6,7,-1},
422         {0,5}
423      },
424
425      {
426         {
427            0,3,0,1,3,0,3,1,3,2,2,2,3,0,3,2,2,1,2,2,0,3,2,2,0,0,2,1,1,3,2,3,
428            2,3,3,1,2,0,1,2,2,1,0,0,0,0,2,3,1,2,0,3,1,3,1,2,3,2,1,0,3,0,0,2,
429         },
430         {0,2,3,4,6,7},
431         {1,7}
432      },
433
434      {
435         {
436            2,2,3,2,0,3,2,3,1,1,2,0,2,3,1,3,0,0,0,3,2,0,1,0,1,3,2,3,3,3,1,0,
437            // unused?
438            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
439         },
440         {1,2,4,7,-1,-1},
441         {2,4}
442      },
443
444      {
445         {
446            0,2,3,1,3,1,1,0,0,1,3,0,2,1,3,3,2,0,2,1,1,2,3,3,0,0,0,2,0,2,3,0,
447            3,3,3,3,2,3,3,2,3,0,1,0,2,3,3,2,0,1,3,1,0,1,2,3,3,0,2,0,3,0,3,3,
448         },
449         {0,1,2,3,5,7},
450         {3,6}
451      },
452   },
453   {   // 4th round
454      {
455         {
456            0,1,1,0,0,1,0,2,3,3,0,1,2,3,0,2,1,0,3,3,2,0,3,0,0,2,1,0,1,0,1,3,
457            0,3,3,1,2,0,3,0,1,3,2,0,3,3,1,3,0,2,3,3,2,1,1,2,2,1,2,1,2,0,1,1,
458         },
459         {0,1,2,4,7,-1},
460         {0,5}
461      },
462
463      {
464         {
465            2,0,0,2,3,0,2,3,3,1,1,1,2,1,1,0,0,2,1,0,0,3,1,0,0,3,3,0,1,0,1,2,
466            0,2,0,2,0,1,2,3,2,1,1,0,3,3,3,3,3,3,1,0,3,0,0,2,0,3,2,0,2,2,0,1,
467         },
468         {0,1,3,5,6,-1},
469         {1,3}
470      },
471
472      {
473         {
474            0,1,1,2,1,3,1,1,0,0,3,1,1,1,2,0,3,2,0,1,1,2,3,3,3,0,3,0,0,2,0,3,
475            3,2,0,0,3,2,3,1,2,3,0,3,2,0,1,2,2,2,0,2,0,1,2,2,3,1,2,2,1,1,1,1,
476         },
477         {0,2,3,4,5,7},
478         {2,7}
479      },
480
481      {
482         {
483            0,1,2,0,3,3,0,3,2,1,3,3,0,3,1,1,3,2,3,2,3,0,0,0,3,0,2,2,3,2,2,3,
484            2,2,3,1,2,3,1,2,0,3,0,2,3,1,0,0,3,2,1,2,1,2,1,3,1,0,2,3,3,1,3,2,
485         },
486         {2,3,4,5,6,7},
487         {4,6}
488      },
489   },
490};
491
492const int naomi_m2_board::fn1_game_key_scheduling[38][2] = {
493   {1,29},  {1,71},  {2,4},   {2,54},  {3,8},   {4,56},  {4,73},  {5,11},
494   {6,51},  {7,92},  {8,89},  {9,9},   {9,10},  {9,39},  {9,41},  {9,58},
495   {9,59},  {9,86},  {10,90}, {11,6},  {12,64}, {13,49}, {14,44}, {15,40},
496   {16,69}, {17,15}, {18,23}, {18,43}, {19,82}, {20,81}, {21,32}, {21,61},
497   {22,5},  {23,66}, {24,13}, {24,45}, {25,12}, {25,35}
498};
499
500const int naomi_m2_board::fn2_game_key_scheduling[34][2] = {
501   {0,0},   {1,3},   {2,11},  {3,20},  {4,22},  {5,23},  {6,29},  {7,38},
502   {8,39},  {9,47},  {9,55},  {9,86},  {9,87},  {9,90},  {10,50}, {10,53},
503   {11,57}, {12,59}, {13,61}, {13,64}, {14,63}, {15,67}, {16,72}, {17,83},
504   {18,88}, {19,94}, {20,35}, {21,17}, {21,92}, {22,6},  {22,11}, {23,85},
505   {24,16}, {25,25}
506};
507
508const int naomi_m2_board::fn1_sequence_key_scheduling[20][2] = {
509   {0,52},  {1,34},  {2,17},  {3,36}, {4,84},  {4,88},  {5,57},  {6,48},
510   {6,68},  {7,76},  {8,83},  {9,30}, {10,22}, {10,41}, {11,38}, {12,55},
511   {13,74}, {14,19}, {14,80}, {15,26}
512};
513
514const int naomi_m2_board::fn2_sequence_key_scheduling[16] = {77,34,8,42,36,27,69,66,13,9,79,31,49,7,24,64};
515
516const int naomi_m2_board::fn2_middle_result_scheduling[16] = {1,10,44,68,74,78,81,95,2,4,30,40,41,51,53,58};
517
518int naomi_m2_board::feistel_function(int input, const struct sbox *sboxes, UINT32 subkeys)
519{
520    int k,m;
521    int aux;
522    int result=0;
523
524    for (m=0; m<4; ++m) { // 4 sboxes
525      for (k=0, aux=0; k<6; ++k)
526         if (sboxes[m].inputs[k]!=-1)
527            aux |= BIT(input, sboxes[m].inputs[k]) << k;
528         
529      aux = sboxes[m].table[(aux^subkeys)&0x3f];
530
531      for (k=0; k<2; ++k)
532         result |= BIT(aux,k) << sboxes[m].outputs[k];
533     
534      subkeys >>=6;
535   }
536
537    return result;
538}
539
540/**************************
541This implementation is an "educational" version. It must be noted that it can be speed-optimized in a number of ways.
542The most evident one is to factor out the parts of the key-scheduling that must only be done once (like the game-key &
543sequence-key parts) as noted in the comments inlined in the function. More sophisticated speed-ups can be gained by
544noticing that the weak key-scheduling would allow to create some pregenerated look-up tables for doing most of the work
545of the function. Even so, it would still be pretty slow, so caching techniques could be a wiser option here.
546**************************/
547
548UINT16 naomi_m2_board::block_decrypt(UINT32 game_key, UINT16 sequence_key, UINT16 counter, UINT16 data)
549{
550    int j;
551    int aux,aux2;
552    int A,B;
553    int middle_result;
554    UINT32 fn1_subkeys[4];
555    UINT32 fn2_subkeys[4];
556
557    /* Game-key scheduling; this could be done just once per game at initialization time */
558    memset(fn1_subkeys,0,sizeof(UINT32)*4);
559    memset(fn2_subkeys,0,sizeof(UINT32)*4);
560
561    for (j=0; j<38; ++j) {
562      if (BIT(game_key, fn1_game_key_scheduling[j][0])!=0) {
563         aux = fn1_game_key_scheduling[j][1]%24;
564         aux2 = fn1_game_key_scheduling[j][1]/24;
565         fn1_subkeys[aux2] ^= (1<<aux);
566      }
567   }
568
569    for (j=0; j<34; ++j) {
570      if (BIT(game_key, fn2_game_key_scheduling[j][0])!=0) {
571         aux = fn2_game_key_scheduling[j][1]%24;
572         aux2 = fn2_game_key_scheduling[j][1]/24;
573         fn2_subkeys[aux2] ^= (1<<aux);
574      }
575   }
576    /********************************************************/
577
578    /* Sequence-key scheduling; this could be done just once per decryption run */
579    for (j=0; j<20; ++j) {
580      if (BIT(sequence_key,fn1_sequence_key_scheduling[j][0])!=0) {
581         aux = fn1_sequence_key_scheduling[j][1]%24;
582         aux2 = fn1_sequence_key_scheduling[j][1]/24;
583         fn1_subkeys[aux2] ^= (1<<aux);
584      }
585   }
586
587    for (j=0; j<16; ++j) {
588      if (BIT(sequence_key,j)!=0) {
589         aux = fn2_sequence_key_scheduling[j]%24;
590         aux2 = fn2_sequence_key_scheduling[j]/24;
591         fn2_subkeys[aux2] ^= (1<<aux);
592      }
593   }
594
595    // subkeys bits 10 & 41
596    fn2_subkeys[0] ^= (BIT(sequence_key,2)<<10);
597    fn2_subkeys[1] ^= (BIT(sequence_key,4)<<17);
598    /**************************************************************/
599
600    // First Feistel Network
601
602    aux = BITSWAP16(counter,5,12,14,13,9,3,6,4,    8,1,15,11,0,7,10,2);
603
604    // 1st round
605    B = aux >> 8;
606    A = (aux & 0xff) ^ feistel_function(B,fn1_sboxes[0],fn1_subkeys[0]);
607
608    // 2nd round
609    B = B ^ feistel_function(A,fn1_sboxes[1],fn1_subkeys[1]);
610
611    // 3rd round
612    A = A ^ feistel_function(B,fn1_sboxes[2],fn1_subkeys[2]);
613
614    // 4th round
615    B = B ^ feistel_function(A,fn1_sboxes[3],fn1_subkeys[3]);
616
617    middle_result = (B<<8)|A;
618
619
620    /* Middle-result-key sheduling */
621    for (j=0; j<16; ++j) {
622      if (BIT(middle_result,j)!=0) {
623         aux = fn2_middle_result_scheduling[j]%24;
624         aux2 = fn2_middle_result_scheduling[j]/24;
625         fn2_subkeys[aux2] ^= (1<<aux);
626      }
627   }
628    /*********************/
629
630    // Second Feistel Network
631
632    aux = BITSWAP16(data,14,3,8,12,13,7,15,4,    6,2,9,5,11,0,1,10);
633
634    // 1st round
635    B = aux >> 8;
636    A = (aux & 0xff) ^ feistel_function(B,fn2_sboxes[0],fn2_subkeys[0]);
637
638    // 2nd round
639    B = B ^ feistel_function(A,fn2_sboxes[1],fn2_subkeys[1]);
640
641    // 3rd round
642    A = A ^ feistel_function(B,fn2_sboxes[2],fn2_subkeys[2]);
643
644    // 4th round
645    B = B ^ feistel_function(A,fn2_sboxes[3],fn2_subkeys[3]);
646
647    aux = (B<<8)|A;
648
649    aux = BITSWAP16(aux,15,7,6,14,13,12,5,4,    3,2,11,10,9,1,0,8);
650
651    return aux;
652}
653
654UINT16 naomi_m2_board::get_decrypted_16()
655{
656   UINT16 enc;
657
658   if((prot_cur_address & 0xffff0000) == 0x01000000) {
659      int base = 2*(prot_cur_address & 0x7fff);
660      enc = ram[base+1] | (ram[base] << 8);
661   } else {
662      const UINT8 *base = m_region->base() + 2*prot_cur_address;
663      enc = base[1] | (base[0] << 8);
664   }
665
666   UINT16 dec = block_decrypt(key, subkey, prot_cur_address, enc);
667   UINT16 res = (dec & 3) | (dec_hist & 0xfffc);
668   dec_hist = dec;
669
670   prot_cur_address ++;
671   return res;
672}
673
674void naomi_m2_board::enc_start()
675{
676   buffer_pos = BUFFER_SIZE;
677   dec_header = get_decrypted_16() << 16;
678   dec_header |= get_decrypted_16();
679
680   if(dec_header & FLAG_COMPRESSED) {
681      line_buffer_size = dec_header & FLAG_LINE_SIZE_512 ? 512 : 256;
682      line_buffer_pos = line_buffer_size;
683      buffer_bit = 7;
684   }
685   enc_ready = true;
686}
687
688void naomi_m2_board::enc_fill()
689{
690   assert(buffer_pos == BUFFER_SIZE);
691   for(int i = 0; i != BUFFER_SIZE; i+=2) {
692      UINT16 val = get_decrypted_16();
693      buffer[i] = val;
694      buffer[i+1] = val >> 8;
695   }
696   buffer_pos = 0;
697}
698
699/* node format
7000xxxxxxx - next node index
7011a0bbccc - end node
702           a - 0 = repeat
703               1 = fetch
704           b - if a = 1
705               00 - fetch  0
706               01 - fetch  1
707               11 - fetch -1
708               if a = 0
709               000
710           c - repeat/fetch counter
711               count = ccc + 1
71211111111 - empty node
713*/
714const UINT8 naomi_m2_board::trees[9][2][32] = {
715   {
716      {0x01,0x10,0x0f,0x05,0xc4,0x13,0x87,0x0a,0xcc,0x81,0xce,0x0c,0x86,0x0e,0x84,0xc2,
717       0x11,0xc1,0xc3,0xcf,0x15,0xc8,0xcd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
718      {0xc7,0x02,0x03,0x04,0x80,0x06,0x07,0x08,0x09,0xc9,0x0b,0x0d,0x82,0x83,0x85,0xc0,
719       0x12,0xc6,0xc5,0x14,0x16,0xca,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
720   },
721   {
722      {0x02,0x80,0x05,0x04,0x81,0x10,0x15,0x82,0x09,0x83,0x0b,0x0c,0x0d,0xdc,0x0f,0xde,
723       0x1c,0xcf,0xc5,0xdd,0x86,0x16,0x87,0x18,0x19,0x1a,0xda,0xca,0xc9,0x1e,0xce,0xff,},
724      {0x01,0x17,0x03,0x0a,0x08,0x06,0x07,0xc2,0xd9,0xc4,0xd8,0xc8,0x0e,0x84,0xcb,0x85,
725       0x11,0x12,0x13,0x14,0xcd,0x1b,0xdb,0xc7,0xc0,0xc1,0x1d,0xdf,0xc3,0xc6,0xcc,0xff,},
726   },
727   {
728      {0xc6,0x80,0x03,0x0b,0x05,0x07,0x82,0x08,0x15,0xdc,0xdd,0x0c,0xd9,0xc2,0x14,0x10,
729       0x85,0x86,0x18,0x16,0xc5,0xc4,0xc8,0xc9,0xc0,0xcc,0xff,0xff,0xff,0xff,0xff,0xff,},
730      {0x01,0x02,0x12,0x04,0x81,0x06,0x83,0xc3,0x09,0x0a,0x84,0x11,0x0d,0x0e,0x0f,0x19,
731       0xca,0xc1,0x13,0xd8,0xda,0xdb,0x17,0xde,0xcd,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,},
732   },
733   {
734      {0x01,0x80,0x0d,0x04,0x05,0x15,0x83,0x08,0xd9,0x10,0x0b,0x0c,0x84,0x0e,0xc0,0x14,
735       0x12,0xcb,0x13,0xca,0xc8,0xc2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
736      {0xc5,0x02,0x03,0x07,0x81,0x06,0x82,0xcc,0x09,0x0a,0xc9,0x11,0xc4,0x0f,0x85,0xd8,
737       0xda,0xdb,0xc3,0xdc,0xdd,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
738   },
739   {
740      {0x01,0x80,0x06,0x0c,0x05,0x81,0xd8,0x84,0x09,0xdc,0x0b,0x0f,0x0d,0x0e,0x10,0xdb,
741       0x11,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
742      {0xc4,0x02,0x03,0x04,0xcb,0x0a,0x07,0x08,0xd9,0x82,0xc8,0x83,0xc0,0xc1,0xda,0xc2,
743       0xc9,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
744   },
745   {
746      {0x01,0x02,0x06,0x0a,0x83,0x0b,0x07,0x08,0x09,0x82,0xd8,0x0c,0xd9,0xda,0xff,0xff,
747       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
748      {0xc3,0x80,0x03,0x04,0x05,0x81,0xca,0xc8,0xdb,0xc9,0xc0,0xc1,0x0d,0xc2,0xff,0xff,
749       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
750   },
751   {
752      {0x01,0x02,0x03,0x04,0x81,0x07,0x08,0xd8,0xda,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,
753       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
754      {0xc2,0x80,0x05,0xc9,0xc8,0x06,0x82,0xc0,0x09,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,
755       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
756   },
757   {
758      {0x01,0x80,0x04,0xc8,0xc0,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
759       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
760      {0xc1,0x02,0x03,0x81,0x05,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
761       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
762   },
763   {
764      {0x01,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
765       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
766      {0xc0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
767       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
768   },
769};
770
771int naomi_m2_board::get_compressed_bit()
772{
773   if(buffer_pos == BUFFER_SIZE)
774      enc_fill();
775   int res = (buffer[buffer_pos^1] >> buffer_bit) & 1;
776   buffer_bit--;
777   if(buffer_bit == -1) {
778      buffer_bit = 7;
779      buffer_pos++;
780   }
781   return res;
782}
783
784void naomi_m2_board::line_fill()
785{
786   assert(line_buffer_pos == line_buffer_size);
787   UINT8 *lp = line_buffer;
788   UINT8 *lc = line_buffer_prev;
789   line_buffer = lc;
790   line_buffer_prev = lp;
791   line_buffer_pos = 0;
792
793   UINT32 line_buffer_mask = line_buffer_size-1;
794
795   for(int i=0; i != line_buffer_size;) {
796      // vlc 0: start of line
797      // vlc 1: interior of line
798      // vlc 2-9: 7-1 bytes from end of line
799
800      int slot = i ? i < line_buffer_size - 7 ? 1 : (i & 7) + 1 : 0;
801
802      UINT32 tmp = 0;
803      while (!(tmp&0x80))
804         if(get_compressed_bit())
805            tmp = trees[slot][1][tmp];
806         else
807            tmp = trees[slot][0][tmp];
808      if(tmp != 0xff) {
809         int count = (tmp & 7) + 1;
810         
811            if(tmp&0x40) {
812            // Copy from previous line
813           
814               static int offsets[4] = {0, 1, 0, -1};
815            int offset = offsets[(tmp & 0x18) >> 3];
816            for(int j=0; j != count; j++) {
817               lc[i^1] = lp[((i+offset) & line_buffer_mask)^1];
818               i++;
819            }
820
821            } else {
822            // Get a byte in the stream and write n times
823            UINT8 byte;
824            byte =         get_compressed_bit()  << 1;
825            byte = (byte | get_compressed_bit()) << 1;
826            byte = (byte | get_compressed_bit()) << 1;
827            byte = (byte | get_compressed_bit()) << 1;
828            byte = (byte | get_compressed_bit()) << 1;
829            byte = (byte | get_compressed_bit()) << 1;
830            byte = (byte | get_compressed_bit()) << 1;
831            byte =  byte | get_compressed_bit();
832            for(int j=0; j != count; j++)
833               lc[(i++)^1] = byte;
834
835         }
836      }
837   }
838}
839
src/mame/machine/naomim2.h
r0r12705
1#ifndef _NAOMIM2_H_
2#define _NAOMIM2_H_
3
4#include "naomibd.h"
5
6#define MCFG_NAOMI_M2_BOARD_ADD(_tag, _key_tag, _eeprom_tag, _maincpu_tag, _irq_cb) \
7   MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M2_BOARD, _eeprom_tag, _maincpu_tag, _irq_cb) \
8   naomi_m2_board::static_set_tags(*device, _key_tag);
9
10class naomi_m2_board : public naomi_board
11{
12public:
13   naomi_m2_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
14
15   static void static_set_tags(device_t &device, const char *_key_tag);
16
17protected:
18   virtual void device_start();
19   virtual void device_reset();
20
21   virtual void board_setup_address(UINT32 address, bool is_dma);
22   virtual void board_get_buffer(UINT8 *&base, UINT32 &limit);
23   virtual void board_advance(UINT32 size);
24   virtual void board_write(offs_t offset, UINT16 data);
25
26private:
27   enum {
28      RAM_SIZE = 65536, BUFFER_SIZE = 32768, LINE_SIZE = 512,
29      FLAG_COMPRESSED = 0x10000, FLAG_LINE_SIZE_512 = 0x20000
30   };
31
32   const char *key_tag;
33   UINT32 key;
34
35   UINT8 *ram, *buffer, *line_buffer, *line_buffer_prev;
36   UINT32 rom_cur_address, prot_cur_address;
37   UINT16 subkey, dec_hist;
38   UINT32 dec_header;
39   bool enc_ready;
40
41   int buffer_pos, line_buffer_pos, line_buffer_size, buffer_bit;
42
43   struct sbox {
44      UINT8 table[64];
45      int inputs[6];      // positions of the inputs bits, -1 means no input except from key
46      int outputs[2];     // positions of the output bits
47   };
48
49   static const sbox fn1_sboxes[4][4];
50   static const sbox fn2_sboxes[4][4];
51
52   static const int fn1_game_key_scheduling[38][2];
53   static const int fn2_game_key_scheduling[34][2];
54   static const int fn1_sequence_key_scheduling[20][2];
55   static const int fn2_sequence_key_scheduling[16];
56   static const int fn2_middle_result_scheduling[16];
57
58   static const UINT8 trees[9][2][32];
59
60   int feistel_function(int input, const struct sbox *sboxes, UINT32 subkeys);
61   UINT16 block_decrypt(UINT32 game_key, UINT16 sequence_key, UINT16 counter, UINT16 data);
62
63   UINT16 get_decrypted_16();
64   int get_compressed_bit();
65
66   void enc_start();
67   void enc_fill();
68   void line_fill();
69};
70
71extern const device_type NAOMI_M2_BOARD;
72
73#endif
src/mame/machine/dc.c
r12704r12705
99#include "includes/dc.h"
1010#include "cpu/sh4/sh4.h"
1111#include "sound/aica.h"
12#include "includes/naomibd.h"
1312#include "includes/naomi.h"
1413#include "machine/mie.h"
1514
r12704r12705
120119   dc_update_interrupt_status(machine);
121120}
122121
123static TIMER_CALLBACK( gdrom_dma_irq )
122void naomi_g1_irq(running_machine &machine)
124123{
125   g1bus_regs[SB_GDST] = 0;
126124   dc_sysctrl_regs[SB_ISTNRM] |= IST_DMA_GDROM;
127125   dc_update_interrupt_status(machine);
128126}
r12704r12705
503501   mame_printf_verbose("GDROM: [%08x=%x]write %" I64FMT "x to %x, mask %" I64FMT "x\n", 0x5f7000+off*4, dat, data, offset, mem_mask);
504502}
505503
506READ64_HANDLER( dc_g1_ctrl_r )
507{
508   int reg;
509   UINT64 shift;
510
511   reg = decode_reg32_64(space->machine(), offset, mem_mask, &shift);
512   mame_printf_verbose("G1CTRL:  Unmapped read %08x\n", 0x5f7400+reg*4);
513   return (UINT64)g1bus_regs[reg] << shift;
514}
515
516WRITE64_HANDLER( dc_g1_ctrl_w )
517{
518   int reg;
519   UINT64 shift;
520   UINT32 old,dat;
521   struct sh4_ddt_dma ddtdata;
522   UINT8 *ROM;
523   UINT32 dmaoffset;
524
525   reg = decode_reg32_64(space->machine(), offset, mem_mask, &shift);
526   dat = (UINT32)(data >> shift);
527   old = g1bus_regs[reg];
528
529   g1bus_regs[reg] = dat; // 5f7400+reg*4=dat
530   mame_printf_verbose("G1CTRL: [%08x=%x] write %" I64FMT "x to %x, mask %" I64FMT "x\n", 0x5f7400+reg*4, dat, data, offset, mem_mask);
531   switch (reg)
532   {
533   case SB_GDST:
534      g1bus_regs[SB_GDST] = old;
535      if (((old & 1) == 0) && (dat & 1) && g1bus_regs[SB_GDEN] == 1) // 0 -> 1
536      {
537         if (g1bus_regs[SB_GDDIR] == 0)
538         {
539            printf("G1CTRL: unsupported transfer\n");
540            return;
541         }
542         g1bus_regs[SB_GDST] = dat & 1;
543//            printf("Cart DMA to %x len %x (PC %x)\n", g1bus_regs[SB_GDSTAR], g1bus_regs[SB_GDLEN], cpu_get_pc(&space->device()));
544         ROM = (UINT8 *)naomibd_get_memory(space->machine().device("rom_board"), g1bus_regs[SB_GDLEN]);
545         dmaoffset = naomibd_get_dmaoffset(space->machine().device("rom_board"));
546         ddtdata.destination=g1bus_regs[SB_GDSTAR];      // destination address
547         ddtdata.length=g1bus_regs[SB_GDLEN] >> 5;      // words to transfer
548         /* data in the lower 5 bits makes the length size to round by 32 bytes, this'll be needed by Virtua Tennis to boot (according to Deunan) */
549         if(g1bus_regs[SB_GDLEN] & 0x1c)
550            ddtdata.length++;
551
552         ddtdata.size=32;         // bytes per word
553         ddtdata.buffer=ROM+dmaoffset;   // buffer address
554         ddtdata.direction=1;   // 0 source to buffer, 1 buffer to destination
555         ddtdata.channel= -1;   // not used
556         ddtdata.mode= -1;      // copy from/to buffer
557         mame_printf_verbose("G1CTRL: transfer %x from ROM %08x to sdram %08x\n", g1bus_regs[SB_GDLEN], dmaoffset, g1bus_regs[SB_GDSTAR]);
558         sh4_dma_ddt(space->machine().device("maincpu"), &ddtdata);
559         /* Note: KOF Neowave definitely wants this to be delayed (!) */
560         /* FIXME: timing of this */
561         space->machine().scheduler().timer_set(attotime::from_usec(500), FUNC(gdrom_dma_irq));
562      }
563      break;
564   }
565}
566
567504READ64_HANDLER( dc_g2_ctrl_r )
568505{
569506   int reg;
src/mame/machine/awboard.c
r0r12705
1#define ADDRESS_MAP_MODERN
2
3#include "emu.h"
4#include "awboard.h"
5
6/*
7
8Atomiswave ROM board specs from Cah4e3 @ http://cah4e3.wordpress.com/2009/07/26/some-atomiswave-info/
9
10 AW_EPR_OFFSETL                                          Register addres: 0x5f7000
11 +-------------------------------------------------------------------------------+
12 |                                  bit15-0                                      |
13 +-------------------------------------------------------------------------------+
14 |                         EPR data offset low word                              |
15 +-------------------------------------------------------------------------------+
16
17 AW_EPR_OFFSETH                                          Register addres: 0x5f7004
18 +-------------------------------------------------------------------------------+
19 |                                  bit15-0                                      |
20 +-------------------------------------------------------------------------------+
21 |                          EPR data offset hi word                              |
22 +-------------------------------------------------------------------------------+
23
24  Both low and high words of 32-bit offset from start of EPR-ROM area. Used for
25  reading header and program code data, cannot be used for reading MPR-ROMs data.
26
27 AW_MPR_RECORD_INDEX                                     Register addres: 0x5f700c
28 +-------------------------------------------------------------------------------+
29 |                                  bit15-0                                      |
30 +-------------------------------------------------------------------------------+
31 |                          File system record index                             |
32 +-------------------------------------------------------------------------------+
33
34  This register contains index of MPR-ROM file system record (64-bytes in size) to
35  read throught DMA. Internal DMA offset register is assigned as AW_MPR_RECORD_INDEX<<6
36  from start of MPR-ROM area. Size of DMA transaction not limited, it is possible
37  to read any number of records or just part of it.
38
39 AW_MPR_FIRST_FILE_INDEX                                 Register addres: 0x5f7010
40 +-------------------------------------------------------------------------------+
41 |                                  bit15-0                                      |
42 +-------------------------------------------------------------------------------+
43 |                           First file record index                             |
44 +-------------------------------------------------------------------------------+
45
46  This register assign for internal cart circuit index of record in MPR-ROM file
47  system sub-area that contain information about first file of MPR-ROM files
48  sub-area. Internal circuit using this record to read absolute first file offset
49  from start of MPR-ROM area and calculate normal offset for each other file
50  requested, since MPR-ROM file data sub-area can be assighed only with relative
51  offsets from start of such sub-area.
52
53 AW_MPR_FILE_OFFSETL                                     Register addres: 0x5f7014
54 +-------------------------------------------------------------------------------+
55 |                                  bit15-0                                      |
56 +-------------------------------------------------------------------------------+
57 |                         MPR file offset low word                              |
58 +-------------------------------------------------------------------------------+
59
60 AW_MPR_FILE_OFFSETH                                     Register addres: 0x5f7018
61 +-------------------------------------------------------------------------------+
62 |                                  bit15-0                                      |
63 +-------------------------------------------------------------------------------+
64 |                          MPR file offset hi word                              |
65 +-------------------------------------------------------------------------------+
66
67  Both low and high words of 32-bit relative offset from start of MPR-ROM files
68  sub-area. Used by internal circuit to calculate absolute offset using data
69  from AW_MPR_FIRST_FILE_INDEX register. Cannot be used for reading EPR-ROM
70  data nor even MPR-ROM file system sub-area data.
71
72 In short:
73
74     EPR-ROM
75 +--------------+ 0x00000000
76 |              |
77 |    HEADER    +- AW_EPR_OFFSET << 1
78 |              |
79 +--------------+
80 |              |
81 |     CODE     +- AW_EPR_OFFSET << 1
82 |              |
83 |              |
84 +--------------+ 0x007fffff
85
86     MPR-ROMS
87 +--------------+ 0x00000000
88 | FS_HEADER    |
89 | FS_RECORD[1] +- (AW_MPR_RECORD_INDEX << 6)
90 | FS_RECORD[2] |
91 | FS_RECORD[3] +- (AW_MPR_FIRST_FILE_INDEX << 6)
92 |     ...      |
93 | FS_RECORD[N] |
94 +--------------+- FS_RECORD[AW_MPR_FIRST_FILE_INDEX].FILE_ABS_OFFSET
95 | FILE_0       |
96 | FILE_1       +- (AW_MPR_FILE_OFFSET << 1) + FS_RECORD[AW_MPR_FIRST_FILE_INDEX].FILE_ABS_OFFSET
97 |     ...      |
98 | FILE_N       |
99 +--------------+ 0x07ffffff
100
101*/
102
103const device_type AW_ROM_BOARD = &device_creator<aw_rom_board>;
104
105DEVICE_ADDRESS_MAP_START(submap, 16, aw_rom_board)
106   AM_RANGE(0x00, 0x01) AM_WRITE(epr_offsetl_w)
107   AM_RANGE(0x02, 0x03) AM_WRITE(epr_offseth_w)
108   AM_RANGE(0x06, 0x07) AM_WRITE(mpr_record_index_w)
109   AM_RANGE(0x08, 0x09) AM_WRITE(mpr_first_file_index_w)
110   AM_RANGE(0x0a, 0x0b) AM_WRITE(mpr_file_offsetl_w)
111   AM_RANGE(0x0c, 0x0d) AM_WRITE(mpr_file_offseth_w)
112ADDRESS_MAP_END
113
114aw_rom_board::aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
115   : naomi_g1_device(mconfig, AW_ROM_BOARD, "AW-ROM-BOARD", tag, owner, clock)
116{
117   region_is_decrypted = false;
118   keyregion = 0;
119}
120
121void aw_rom_board::static_set_keyregion(device_t &device, const char *_keyregion)
122{
123   aw_rom_board &dev = downcast<aw_rom_board &>(device);
124   dev.keyregion = _keyregion;
125}
126
127
128/*
129We are using 20 bits keys with the following subfields' structure:
130bits 0-15 is a 16-bits XOR
131bits 17-16 is a index to the sboxes table
132bits 19-18 is a index to the permutation table
133
134These subfields could be differing from the "real" ones in the following ways:
135- Every one of the index subfields could be suffering an arbitrary bitswap and XOR
136- The 16-bits-XOR subfield could suffer an arbitrary XOR which could depend on the 4 index bits (that is: a different XOR per every index combination)
137- Of course, the way in which we are mixing 3 subfields in one only key is arbitrary too.
138
139The keys are stored as 32-bits big-endian values in a file.
140*/
141
142
143const int aw_rom_board::permutation_table[4][16] =
144{
145    {8,10,1,3,7,4,11,2,5,15,6,0,12,13,9,14},
146    {4,5,9,6,1,13,7,11,10,0,14,12,8,15,2,3},
147    {12,7,11,2,0,5,15,6,1,8,14,4,9,13,3,10},
148    {14,1,11,15,7,3,8,13,0,4,2,12,6,10,5,9}
149};
150
151const aw_rom_board::sbox_set aw_rom_board::sboxes_table[4] =
152{
153    {
154        {4,12,8,14,16,30,31,0,23,29,24,21,11,22,27,5,3,20,18,26,10,7,17,1,28,6,15,13,2,9,25,19},
155        {13,1,0,9,5,12,4,14,3,15,2,10,11,6,8,7},
156        {7,13,4,6,5,9,3,2,0,15,12,10,8,11,1,14},
157        {4,0,1,2,5,7,3,6}
158    },
159    {
160        {3,0,14,17,10,15,31,20,13,2,29,28,9,18,25,27,6,19,30,22,7,12,1,16,23,11,24,4,8,26,21,5},
161        {2,10,6,9,11,13,4,5,3,15,7,14,12,1,0,8},
162        {1,13,11,3,8,7,9,10,12,15,4,14,0,5,6,2},
163        {6,5,0,3,7,1,4,2}
164    },
165    {
166        {9,15,28,7,13,24,2,23,21,1,22,16,18,8,17,31,27,6,30,12,4,20,5,19,0,25,3,29,10,14,11,26},
167        {5,2,13,11,8,6,12,1,4,3,0,10,14,15,7,9},
168        {11,6,10,0,12,1,8,14,2,9,13,3,7,4,15,5},
169        {1,5,6,2,4,7,3,0}
170    },
171    {
172        {17,3,31,2,28,10,9,29,6,25,24,8,13,1,19,15,22,0,14,20,16,7,21,4,18,26,27,5,12,23,11,30},
173        {4,8,11,15,3,14,7,12,1,0,9,5,6,13,2,10},
174        {14,0,9,11,4,1,7,5,13,6,8,12,2,3,10,15},
175        {2,1,0,5,4,6,7,3}
176    },
177};
178
179UINT16 aw_rom_board::decrypt(UINT16 cipherText, UINT32 address, const UINT32 key)
180{
181    UINT8 b0,b1,b2,b3;
182    UINT16 aux;
183    const int* pbox = permutation_table[key>>18];
184    const sbox_set* ss = &sboxes_table[(key>>16)&3];
185
186    aux = BITSWAP16(cipherText,
187                    pbox[15],pbox[14],pbox[13],pbox[12],pbox[11],pbox[10],pbox[9],pbox[8],
188                    pbox[7],pbox[6],pbox[5],pbox[4],pbox[3],pbox[2],pbox[1],pbox[0]);
189    aux = aux ^ BITSWAP16(address >> 1, 13,5,2, 14,10,9,4, 15,11,6,1, 12,8,7,3,0);
190
191    b0 = aux&0x1f;
192    b1 = (aux>>5)&0xf;
193    b2 = (aux>>9)&0xf;
194    b3 = aux>>13;
195
196    b0 = ss->S0[b0];
197    b1 = ss->S1[b1];
198    b2 = ss->S2[b2];
199    b3 = ss->S3[b3];
200
201    return ((b3<<13)|(b2<<9)|(b1<<5)|b0)^(key&0xffff);
202}
203
204void aw_rom_board::decrypt_region()
205{
206   if(region_is_decrypted)
207      return;
208   region_is_decrypted = true;
209
210   if(!m_region)
211      throw emu_fatalerror("AW-ROM-BOARD: region %s is missing\n", tag());
212
213   if(!keyregion)
214      return;
215
216   const memory_region *kr = machine().region(keyregion);
217   if(!kr)
218      return;   
219
220   if(kr->bytes() != 4)
221      throw emu_fatalerror("AW-ROM-BOARD: key region %s has incorrect size (%d, expected 4)\n", keyregion, kr->bytes());
222
223   const UINT8 *krp = kr->base();
224   UINT32 key = (krp[0] << 24) | (krp[1] << 16) | (krp[2] << 8) | krp[3];
225   UINT16 *src = (UINT16 *)m_region->base();
226   UINT32 rom_size = m_region->bytes();
227   for(UINT32 i=0; i<rom_size/2; i++)
228      src[i] = decrypt(src[i], i*2, key);
229}
230
231void aw_rom_board::device_start()
232{
233   naomi_g1_device::device_start();
234   decrypt_region();
235
236   save_item(NAME(epr_offset));
237   save_item(NAME(mpr_record_index));
238   save_item(NAME(mpr_first_file_index));
239   save_item(NAME(mpr_file_offset));
240   save_item(NAME(dma_offset));
241   save_item(NAME(dma_limit));
242}
243
244void aw_rom_board::device_reset()
245{
246   naomi_g1_device::device_reset();
247   epr_offset = 0;
248   mpr_record_index = 0;
249   mpr_first_file_index = 0;
250   mpr_file_offset = 0;
251
252   dma_offset = 0;
253   dma_limit  = 0;
254}
255
256WRITE16_MEMBER(aw_rom_board::epr_offsetl_w)
257{
258   epr_offset = (epr_offset & 0xffff0000) | data;
259   recalc_dma_offset(EPR);
260}
261
262WRITE16_MEMBER(aw_rom_board::epr_offseth_w)
263{
264   epr_offset = (epr_offset & 0x0000ffff) | (data << 16);
265   recalc_dma_offset(EPR);
266}
267
268WRITE16_MEMBER(aw_rom_board::mpr_record_index_w)
269{
270   mpr_record_index = data;
271   recalc_dma_offset(MPR_RECORD);
272}
273
274WRITE16_MEMBER(aw_rom_board::mpr_first_file_index_w)
275{
276   mpr_first_file_index = data;
277   recalc_dma_offset(MPR_FILE);
278}
279
280WRITE16_MEMBER(aw_rom_board::mpr_file_offsetl_w)
281{
282   mpr_file_offset = (mpr_file_offset & 0xffff0000) | data;
283   recalc_dma_offset(MPR_FILE);
284}
285
286WRITE16_MEMBER(aw_rom_board::mpr_file_offseth_w)
287{
288   mpr_file_offset = (mpr_file_offset & 0x0000ffff) | (data << 16);
289   recalc_dma_offset(MPR_FILE);
290}
291
292void aw_rom_board::recalc_dma_offset(int mode)
293{
294   switch(mode) {
295   case EPR:
296      dma_offset = epr_offset * 2;
297      dma_limit  = 0x1000000;
298      break;
299
300   case MPR_RECORD:
301      dma_offset = 0x1000000 + mpr_record_index * 0x40;
302      dma_limit  = m_region->bytes();
303      break;
304
305   case MPR_FILE: {
306      const UINT8 *entry = m_region->base() + 0x1000000 + mpr_first_file_index * 0x40;
307      dma_offset = 0x1000000 + (entry[8] | (entry[9] << 8) | (entry[10] << 16) | (entry[11] << 24)) + mpr_file_offset*2;
308      dma_limit  = m_region->bytes();
309      break;
310   }
311   }
312}
313
314void aw_rom_board::dma_get_position(UINT8 *&base, UINT32 &limit, bool to_mainram)
315{
316   if(!to_mainram) {
317      limit = 0;
318      base = 0;
319      return;
320   }
321
322   limit = dma_limit - dma_offset;
323   base = m_region->base() + dma_offset;
324}
325
326void aw_rom_board::dma_advance(UINT32 size)
327{
328   dma_offset += size;
329}
330
src/mame/machine/awboard.h
r0r12705
1#ifndef _AWBOARD_H_
2#define _AWBOARD_H_
3
4#include "naomig1.h"
5
6#define MCFG_AW_ROM_BOARD_ADD(_tag, _keyregion, _maincpu_tag, _irq_cb)   \
7   MCFG_NAOMI_G1_ADD(_tag, AW_ROM_BOARD, _maincpu_tag, _irq_cb)      \
8   aw_rom_board::static_set_keyregion(*device, _keyregion);
9
10class aw_rom_board : public naomi_g1_device
11{
12public:
13   aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
14
15   static void static_set_keyregion(device_t &device, const char *_keyregion);
16
17   DECLARE_ADDRESS_MAP(submap, 16);
18
19   DECLARE_WRITE16_MEMBER(epr_offsetl_w);          // 5f7000
20   DECLARE_WRITE16_MEMBER(epr_offseth_w);          // 5f7004
21   DECLARE_WRITE16_MEMBER(mpr_record_index_w);     // 5f700c
22   DECLARE_WRITE16_MEMBER(mpr_first_file_index_w); // 5f7010
23   DECLARE_WRITE16_MEMBER(mpr_file_offsetl_w);     // 5f7014
24   DECLARE_WRITE16_MEMBER(mpr_file_offseth_w);     // 5f7018
25
26protected:
27   virtual void device_start();
28   virtual void device_reset();
29
30   virtual void dma_get_position(UINT8 *&base, UINT32 &limit, bool to_mainram);
31   virtual void dma_advance(UINT32 size);
32
33private:
34   enum { EPR, MPR_RECORD, MPR_FILE };
35
36   const char *keyregion;
37   bool region_is_decrypted;
38
39   UINT32 epr_offset, mpr_file_offset;
40   UINT16 mpr_record_index, mpr_first_file_index;
41
42   UINT32 dma_offset, dma_limit;
43
44   struct sbox_set {
45      UINT8 S0[32];
46      UINT8 S1[16];
47      UINT8 S2[16];
48      UINT8 S3[8];
49   };
50
51   static const int permutation_table[4][16];
52   static const sbox_set sboxes_table[4];
53   static UINT16 decrypt(UINT16 cipherText, UINT32 address, const UINT32 key);
54
55   void decrypt_region();
56   void recalc_dma_offset(int mode);
57};
58
59extern const device_type AW_ROM_BOARD;
60
61#endif
src/mame/machine/naomigd.c
r0r12705
1#define ADDRESS_MAP_MODERN
2
3#include "emu.h"
4#include "naomigd.h"
5#include "imagedev/chd_cd.h"
6
7/*
8    Dimm board registers (add more information if you find it):
9
10    Name:                   Naomi   Dimm Bd.
11    NAOMI_DIMM_COMMAND    = 5f703c  14000014 (16 bit):
12        if bits all 1 no dimm board present and other registers not used
13        bit 15: during an interrupt is 1 if the dimm board has a command to be executed
14        bit 14-9: 6 bit command number (naomi bios understands 0 1 3 4 5 6 8 9 a)
15        bit 7-0: higher 8 bits of 24 bit offset parameter
16    NAOMI_DIMM_OFFSETL    = 5f7040  14000018 (16 bit):
17        bit 15-0: lower 16 bits of 24 bit offset parameter
18    NAOMI_DIMM_PARAMETERL = 5f7044  1400001c (16 bit)
19    NAOMI_DIMM_PARAMETERH = 5f7048  14000020 (16 bit)
20    NAOMI_DIMM_STATUS     = 5f704c  14000024 (16 bit):
21        bit 0: when 0 signal interrupt from naomi to dimm board
22        bit 8: when 0 signal interrupt from dimm board to naomi
23
24*/
25
26const device_type NAOMI_GDROM_BOARD = &device_creator<naomi_gdrom_board>;
27
28const UINT32 naomi_gdrom_board::DES_LEFTSWAP[] = {
29   0x00000000, 0x00000001, 0x00000100, 0x00000101, 0x00010000, 0x00010001, 0x00010100, 0x00010101,
30   0x01000000, 0x01000001, 0x01000100, 0x01000101, 0x01010000, 0x01010001, 0x01010100, 0x01010101
31};
32
33const UINT32 naomi_gdrom_board::DES_RIGHTSWAP[] = {
34   0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100, 0x00010100, 0x01010100,
35   0x00000001, 0x01000001, 0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101, 0x01010101,
36};
37
38const UINT32 naomi_gdrom_board::DES_SBOX1[] = {
39   0x00808200, 0x00000000, 0x00008000, 0x00808202, 0x00808002, 0x00008202, 0x00000002, 0x00008000,
40   0x00000200, 0x00808200, 0x00808202, 0x00000200, 0x00800202, 0x00808002, 0x00800000, 0x00000002,
41   0x00000202, 0x00800200, 0x00800200, 0x00008200, 0x00008200, 0x00808000, 0x00808000, 0x00800202,
42   0x00008002, 0x00800002, 0x00800002, 0x00008002, 0x00000000, 0x00000202, 0x00008202, 0x00800000,
43   0x00008000, 0x00808202, 0x00000002, 0x00808000, 0x00808200, 0x00800000, 0x00800000, 0x00000200,
44   0x00808002, 0x00008000, 0x00008200, 0x00800002, 0x00000200, 0x00000002, 0x00800202, 0x00008202,
45   0x00808202, 0x00008002, 0x00808000, 0x00800202, 0x00800002, 0x00000202, 0x00008202, 0x00808200,
46   0x00000202, 0x00800200, 0x00800200, 0x00000000, 0x00008002, 0x00008200, 0x00000000, 0x00808002
47};
48
49const UINT32 naomi_gdrom_board::DES_SBOX2[] = {
50   0x40084010, 0x40004000, 0x00004000, 0x00084010, 0x00080000, 0x00000010, 0x40080010, 0x40004010,
51   0x40000010, 0x40084010, 0x40084000, 0x40000000, 0x40004000, 0x00080000, 0x00000010, 0x40080010,
52   0x00084000, 0x00080010, 0x40004010, 0x00000000, 0x40000000, 0x00004000, 0x00084010, 0x40080000,
53   0x00080010, 0x40000010, 0x00000000, 0x00084000, 0x00004010, 0x40084000, 0x40080000, 0x00004010,
54   0x00000000, 0x00084010, 0x40080010, 0x00080000, 0x40004010, 0x40080000, 0x40084000, 0x00004000,
55   0x40080000, 0x40004000, 0x00000010, 0x40084010, 0x00084010, 0x00000010, 0x00004000, 0x40000000,
56   0x00004010, 0x40084000, 0x00080000, 0x40000010, 0x00080010, 0x40004010, 0x40000010, 0x00080010,
57   0x00084000, 0x00000000, 0x40004000, 0x00004010, 0x40000000, 0x40080010, 0x40084010, 0x00084000
58};
59
60const UINT32 naomi_gdrom_board::DES_SBOX3[] = {
61   0x00000104, 0x04010100, 0x00000000, 0x04010004, 0x04000100, 0x00000000, 0x00010104, 0x04000100,
62   0x00010004, 0x04000004, 0x04000004, 0x00010000, 0x04010104, 0x00010004, 0x04010000, 0x00000104,
63   0x04000000, 0x00000004, 0x04010100, 0x00000100, 0x00010100, 0x04010000, 0x04010004, 0x00010104,
64   0x04000104, 0x00010100, 0x00010000, 0x04000104, 0x00000004, 0x04010104, 0x00000100, 0x04000000,
65   0x04010100, 0x04000000, 0x00010004, 0x00000104, 0x00010000, 0x04010100, 0x04000100, 0x00000000,
66   0x00000100, 0x00010004, 0x04010104, 0x04000100, 0x04000004, 0x00000100, 0x00000000, 0x04010004,
67   0x04000104, 0x00010000, 0x04000000, 0x04010104, 0x00000004, 0x00010104, 0x00010100, 0x04000004,
68   0x04010000, 0x04000104, 0x00000104, 0x04010000, 0x00010104, 0x00000004, 0x04010004, 0x00010100
69};
70
71const UINT32 naomi_gdrom_board::DES_SBOX4[] = {
72   0x80401000, 0x80001040, 0x80001040, 0x00000040, 0x00401040, 0x80400040, 0x80400000, 0x80001000,
73   0x00000000, 0x00401000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00400040, 0x80400000,
74   0x80000000, 0x00001000, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x80001000, 0x00001040,
75   0x80400040, 0x80000000, 0x00001040, 0x00400040, 0x00001000, 0x00401040, 0x80401040, 0x80000040,
76   0x00400040, 0x80400000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00000000, 0x00401000,
77   0x00001040, 0x00400040, 0x80400040, 0x80000000, 0x80401000, 0x80001040, 0x80001040, 0x00000040,
78   0x80401040, 0x80000040, 0x80000000, 0x00001000, 0x80400000, 0x80001000, 0x00401040, 0x80400040,
79   0x80001000, 0x00001040, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x00001000, 0x00401040
80};
81
82const UINT32 naomi_gdrom_board::DES_SBOX5[] = {
83   0x00000080, 0x01040080, 0x01040000, 0x21000080, 0x00040000, 0x00000080, 0x20000000, 0x01040000,
84   0x20040080, 0x00040000, 0x01000080, 0x20040080, 0x21000080, 0x21040000, 0x00040080, 0x20000000,
85   0x01000000, 0x20040000, 0x20040000, 0x00000000, 0x20000080, 0x21040080, 0x21040080, 0x01000080,
86   0x21040000, 0x20000080, 0x00000000, 0x21000000, 0x01040080, 0x01000000, 0x21000000, 0x00040080,
87   0x00040000, 0x21000080, 0x00000080, 0x01000000, 0x20000000, 0x01040000, 0x21000080, 0x20040080,
88   0x01000080, 0x20000000, 0x21040000, 0x01040080, 0x20040080, 0x00000080, 0x01000000, 0x21040000,
89   0x21040080, 0x00040080, 0x21000000, 0x21040080, 0x01040000, 0x00000000, 0x20040000, 0x21000000,
90   0x00040080, 0x01000080, 0x20000080, 0x00040000, 0x00000000, 0x20040000, 0x01040080, 0x20000080
91};
92
93const UINT32 naomi_gdrom_board::DES_SBOX6[] = {
94   0x10000008, 0x10200000, 0x00002000, 0x10202008, 0x10200000, 0x00000008, 0x10202008, 0x00200000,
95   0x10002000, 0x00202008, 0x00200000, 0x10000008, 0x00200008, 0x10002000, 0x10000000, 0x00002008,
96   0x00000000, 0x00200008, 0x10002008, 0x00002000, 0x00202000, 0x10002008, 0x00000008, 0x10200008,
97   0x10200008, 0x00000000, 0x00202008, 0x10202000, 0x00002008, 0x00202000, 0x10202000, 0x10000000,
98   0x10002000, 0x00000008, 0x10200008, 0x00202000, 0x10202008, 0x00200000, 0x00002008, 0x10000008,
99   0x00200000, 0x10002000, 0x10000000, 0x00002008, 0x10000008, 0x10202008, 0x00202000, 0x10200000,
100   0x00202008, 0x10202000, 0x00000000, 0x10200008, 0x00000008, 0x00002000, 0x10200000, 0x00202008,
101   0x00002000, 0x00200008, 0x10002008, 0x00000000, 0x10202000, 0x10000000, 0x00200008, 0x10002008
102};
103
104const UINT32 naomi_gdrom_board::DES_SBOX7[] = {
105   0x00100000, 0x02100001, 0x02000401, 0x00000000, 0x00000400, 0x02000401, 0x00100401, 0x02100400,
106   0x02100401, 0x00100000, 0x00000000, 0x02000001, 0x00000001, 0x02000000, 0x02100001, 0x00000401,
107   0x02000400, 0x00100401, 0x00100001, 0x02000400, 0x02000001, 0x02100000, 0x02100400, 0x00100001,
108   0x02100000, 0x00000400, 0x00000401, 0x02100401, 0x00100400, 0x00000001, 0x02000000, 0x00100400,
109   0x02000000, 0x00100400, 0x00100000, 0x02000401, 0x02000401, 0x02100001, 0x02100001, 0x00000001,
110   0x00100001, 0x02000000, 0x02000400, 0x00100000, 0x02100400, 0x00000401, 0x00100401, 0x02100400,
111   0x00000401, 0x02000001, 0x02100401, 0x02100000, 0x00100400, 0x00000000, 0x00000001, 0x02100401,
112   0x00000000, 0x00100401, 0x02100000, 0x00000400, 0x02000001, 0x02000400, 0x00000400, 0x00100001
113};
114
115const UINT32 naomi_gdrom_board::DES_SBOX8[] = {
116   0x08000820, 0x00000800, 0x00020000, 0x08020820, 0x08000000, 0x08000820, 0x00000020, 0x08000000,
117   0x00020020, 0x08020000, 0x08020820, 0x00020800, 0x08020800, 0x00020820, 0x00000800, 0x00000020,
118   0x08020000, 0x08000020, 0x08000800, 0x00000820, 0x00020800, 0x00020020, 0x08020020, 0x08020800,
119   0x00000820, 0x00000000, 0x00000000, 0x08020020, 0x08000020, 0x08000800, 0x00020820, 0x00020000,
120   0x00020820, 0x00020000, 0x08020800, 0x00000800, 0x00000020, 0x08020020, 0x00000800, 0x00020820,
121   0x08000800, 0x00000020, 0x08000020, 0x08020000, 0x08020020, 0x08000000, 0x00020000, 0x08000820,
122   0x00000000, 0x08020820, 0x00020020, 0x08000020, 0x08020000, 0x08000800, 0x08000820, 0x00000000,
123   0x08020820, 0x00020800, 0x00020800, 0x00000820, 0x00000820, 0x00020020, 0x08000000, 0x08020800
124};
125
126const UINT32 naomi_gdrom_board::DES_MASK_TABLE[] = {
127   0x24000000, 0x10000000, 0x08000000, 0x02080000, 0x01000000,
128   0x00200000, 0x00100000, 0x00040000, 0x00020000, 0x00010000,
129   0x00002000, 0x00001000, 0x00000800, 0x00000400, 0x00000200,
130   0x00000100, 0x00000020, 0x00000010, 0x00000008, 0x00000004,
131   0x00000002, 0x00000001, 0x20000000, 0x10000000, 0x08000000,
132   0x04000000, 0x02000000, 0x01000000, 0x00200000, 0x00100000,
133   0x00080000, 0x00040000, 0x00020000, 0x00010000, 0x00002000,
134   0x00001000, 0x00000808, 0x00000400, 0x00000200, 0x00000100,
135   0x00000020, 0x00000011, 0x00000004, 0x00000002
136};
137
138const UINT8 naomi_gdrom_board::DES_ROTATE_TABLE[16] = {
139   1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
140};
141
142void naomi_gdrom_board::permutate(UINT32 &a, UINT32 &b, UINT32 m, int shift)
143{
144   UINT32 temp;
145    temp = ((a>>shift) ^ b) & m;
146    a ^= temp<<shift;
147    b ^= temp;
148}
149
150void naomi_gdrom_board::des_generate_subkeys(const UINT64 key, UINT32 *subkeys)
151{
152   UINT32 l = key >> 32;
153   UINT32 r = key;
154
155   permutate(r, l, 0x0f0f0f0f, 4);
156   permutate(r, l, 0x10101010, 0);
157
158   l = (DES_LEFTSWAP[(l >> 0)  & 0xf] << 3) |
159      (DES_LEFTSWAP[(l >> 8)  & 0xf] << 2) |
160      (DES_LEFTSWAP[(l >> 16) & 0xf] << 1) |
161      (DES_LEFTSWAP[(l >> 24) & 0xf] << 0) |
162      (DES_LEFTSWAP[(l >> 5)  & 0xf] << 7) |
163      (DES_LEFTSWAP[(l >> 13) & 0xf] << 6) |
164      (DES_LEFTSWAP[(l >> 21) & 0xf] << 5) |
165      (DES_LEFTSWAP[(l >> 29) & 0xf] << 4);
166
167   r = (DES_RIGHTSWAP[(r >> 1)  & 0xf] << 3) |
168      (DES_RIGHTSWAP[(r >> 9)  & 0xf] << 2) |
169      (DES_RIGHTSWAP[(r >> 17) & 0xf] << 1) |
170      (DES_RIGHTSWAP[(r >> 25) & 0xf] << 0) |
171      (DES_RIGHTSWAP[(r >> 4)  & 0xf] << 7) |
172      (DES_RIGHTSWAP[(r >> 12) & 0xf] << 6) |
173      (DES_RIGHTSWAP[(r >> 20) & 0xf] << 5) |
174      (DES_RIGHTSWAP[(r >> 28) & 0xf] << 4);
175
176   l &= 0x0fffffff;
177   r &= 0x0fffffff;
178
179
180   for(int round = 0; round < 16; round++) {
181      l = ((l << DES_ROTATE_TABLE[round]) | (l >> (28 - DES_ROTATE_TABLE[round]))) & 0x0fffffff;
182      r = ((r << DES_ROTATE_TABLE[round]) | (r >> (28 - DES_ROTATE_TABLE[round]))) & 0x0fffffff;
183
184      subkeys[round*2] =
185         ((l << 4)  & DES_MASK_TABLE[0]) |
186          ((l << 28) & DES_MASK_TABLE[1]) |
187          ((l << 14) & DES_MASK_TABLE[2]) |
188          ((l << 18) & DES_MASK_TABLE[3]) |
189          ((l << 6)  & DES_MASK_TABLE[4]) |
190          ((l << 9)  & DES_MASK_TABLE[5]) |
191          ((l >> 1)  & DES_MASK_TABLE[6]) |
192          ((l << 10) & DES_MASK_TABLE[7]) |
193          ((l << 2)  & DES_MASK_TABLE[8]) |
194          ((l >> 10) & DES_MASK_TABLE[9]) |
195          ((r >> 13) & DES_MASK_TABLE[10])|
196          ((r >> 4)  & DES_MASK_TABLE[11])|
197          ((r << 6)  & DES_MASK_TABLE[12])|
198          ((r >> 1)  & DES_MASK_TABLE[13])|
199          ((r >> 14) & DES_MASK_TABLE[14])|
200          ((r >> 0)  & DES_MASK_TABLE[15])|
201          ((r >> 5)  & DES_MASK_TABLE[16])|
202          ((r >> 10) & DES_MASK_TABLE[17])|
203          ((r >> 3)  & DES_MASK_TABLE[18])|
204          ((r >> 18) & DES_MASK_TABLE[19])|
205          ((r >> 26) & DES_MASK_TABLE[20])|
206          ((r >> 24) & DES_MASK_TABLE[21]);
207
208      subkeys[round*2+1] =
209          ((l << 15) & DES_MASK_TABLE[22])|
210          ((l << 17) & DES_MASK_TABLE[23])|
211          ((l << 10) & DES_MASK_TABLE[24])|
212          ((l << 22) & DES_MASK_TABLE[25])|
213          ((l >> 2)  & DES_MASK_TABLE[26])|
214          ((l << 1)  & DES_MASK_TABLE[27])|
215          ((l << 16) & DES_MASK_TABLE[28])|
216          ((l << 11) & DES_MASK_TABLE[29])|
217          ((l << 3)  & DES_MASK_TABLE[30])|
218          ((l >> 6)  & DES_MASK_TABLE[31])|
219          ((l << 15) & DES_MASK_TABLE[32])|
220          ((l >> 4)  & DES_MASK_TABLE[33])|
221          ((r >> 2)  & DES_MASK_TABLE[34])|
222          ((r << 8)  & DES_MASK_TABLE[35])|
223          ((r >> 14) & DES_MASK_TABLE[36])|
224          ((r >> 9)  & DES_MASK_TABLE[37])|
225          ((r >> 0)  & DES_MASK_TABLE[38])|
226          ((r << 7)  & DES_MASK_TABLE[39])|
227          ((r >> 7)  & DES_MASK_TABLE[40])|
228          ((r >> 3)  & DES_MASK_TABLE[41])|
229          ((r << 2)  & DES_MASK_TABLE[42])|
230          ((r >> 21) & DES_MASK_TABLE[43]);
231    }
232}
233
234UINT64 naomi_gdrom_board::des_encrypt_decrypt(bool decrypt, UINT64 src, const UINT32 *des_subkeys)
235{
236   UINT32 r = (src & 0x00000000ffffffffULL) >> 0;
237   UINT32 l = (src & 0xffffffff00000000ULL) >> 32;
238
239   permutate(l, r, 0x0f0f0f0f, 4);
240   permutate(l, r, 0x0000ffff, 16);
241   permutate(r, l, 0x33333333, 2);
242   permutate(r, l, 0x00ff00ff, 8);
243   permutate(l, r, 0x55555555, 1);
244
245   int subkey;
246   if(decrypt)
247      subkey = 30;
248   else
249      subkey = 0;
250
251   for(int i = 0; i < 32 ; i+=4) {
252      UINT32 temp;
253
254       temp = ((r<<1) | (r>>31)) ^ des_subkeys[subkey];
255       l ^= DES_SBOX8[ (temp>>0)  & 0x3f ];
256       l ^= DES_SBOX6[ (temp>>8)  & 0x3f ];
257       l ^= DES_SBOX4[ (temp>>16) & 0x3f ];
258       l ^= DES_SBOX2[ (temp>>24) & 0x3f ];
259      subkey++;
260
261      temp = ((r>>3) | (r<<29)) ^ des_subkeys[subkey];
262       l ^= DES_SBOX7[ (temp>>0)  & 0x3f ];
263       l ^= DES_SBOX5[ (temp>>8)  & 0x3f ];
264       l ^= DES_SBOX3[ (temp>>16) & 0x3f ];
265       l ^= DES_SBOX1[ (temp>>24) & 0x3f ];
266      subkey++;
267      if(decrypt)
268         subkey -= 4;
269
270       temp = ((l<<1) | (l>>31)) ^ des_subkeys[subkey];
271       r ^= DES_SBOX8[ (temp>>0)  & 0x3f ];
272       r ^= DES_SBOX6[ (temp>>8)  & 0x3f ];
273       r ^= DES_SBOX4[ (temp>>16) & 0x3f ];
274       r ^= DES_SBOX2[ (temp>>24) & 0x3f ];
275      subkey++;
276
277      temp = ((l>>3) | (l<<29)) ^ des_subkeys[subkey];
278       r ^= DES_SBOX7[ (temp>>0)  & 0x3f ];
279       r ^= DES_SBOX5[ (temp>>8)  & 0x3f ];
280       r ^= DES_SBOX3[ (temp>>16) & 0x3f ];
281       r ^= DES_SBOX1[ (temp>>24) & 0x3f ];
282      subkey++;
283      if(decrypt)
284         subkey -= 4;
285   }
286
287   permutate(r, l, 0x55555555, 1);
288   permutate(l, r, 0x00ff00ff, 8);
289   permutate(l, r, 0x33333333, 2);
290   permutate(r, l, 0x0000ffff, 16);
291   permutate(r, l, 0x0f0f0f0f, 4);
292
293   return (UINT64(r) << 32) | UINT64(l);
294}
295
296UINT64 naomi_gdrom_board::rev64(UINT64 src)
297{
298   UINT64 ret;
299
300   ret = ((src & 0x00000000000000ffULL) << 56)
301       | ((src & 0x000000000000ff00ULL) << 40)
302       | ((src & 0x0000000000ff0000ULL) << 24)
303       | ((src & 0x00000000ff000000ULL) << 8 )
304       | ((src & 0x000000ff00000000ULL) >> 8 )
305       | ((src & 0x0000ff0000000000ULL) >> 24)
306       | ((src & 0x00ff000000000000ULL) >> 40)
307       | ((src & 0xff00000000000000ULL) >> 56);
308
309   return ret;
310}
311
312UINT64 naomi_gdrom_board::read_to_qword(const UINT8 *region)
313{
314   UINT64 ret = 0;
315
316   for(int i=0;i<8;i++)
317      ret |= UINT64(region[i]) << (56-(8*i));
318
319   return ret;
320}
321
322void naomi_gdrom_board::write_from_qword(UINT8 *region, UINT64 qword)
323{
324   for(int i=0;i<8;i++)
325      region[i] = qword >> (56-(i*8));
326}
327
328naomi_gdrom_board::naomi_gdrom_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
329   : naomi_board(mconfig, NAOMI_GDROM_BOARD, "NAOMI-GDROM-BOARD", tag, owner, clock)
330{
331   image_tag = 0;
332   pic_tag = 0;
333}
334
335void naomi_gdrom_board::static_set_tags(device_t &device, const char *_image_tag, const char *_pic_tag)
336{
337   naomi_gdrom_board &dev = downcast<naomi_gdrom_board &>(device);
338   dev.image_tag = _image_tag;
339   dev.pic_tag = _pic_tag;
340}
341
342void naomi_gdrom_board::find_file(const char *name, const UINT8 *dir_sector, UINT32 &file_start, UINT32 &file_size)
343{
344   file_start = 0;
345   file_size = 0;
346   logerror("Looking for file %s\n", name);
347   for(UINT32 pos = 0; pos < 2048; pos += dir_sector[pos]) {
348      int fnlen = 0;
349      if(!(dir_sector[pos+25] & 2)) {
350         int len = dir_sector[pos+32];
351         for(fnlen=0; fnlen < FILENAME_LENGTH; fnlen++) {
352            if((dir_sector[pos+33+fnlen] == ';') && (name[fnlen] == 0)) {
353               fnlen = FILENAME_LENGTH+1;
354               break;
355            }
356            if(dir_sector[pos+33+fnlen] != name[fnlen])
357               break;
358            if(fnlen == len) {
359               if(name[fnlen] == 0)
360                  fnlen = FILENAME_LENGTH+1;
361               else
362                  fnlen = FILENAME_LENGTH;
363            }
364         }
365      }
366      if(fnlen == FILENAME_LENGTH+1) {
367         // start sector and size of file
368         file_start = ((dir_sector[pos+2] << 0) |
369                    (dir_sector[pos+3] << 8) |
370                    (dir_sector[pos+4] << 16) |
371                    (dir_sector[pos+5] << 24));
372         file_size =  ((dir_sector[pos+10] << 0) |
373                    (dir_sector[pos+11] << 8) |
374                    (dir_sector[pos+12] << 16) |
375                    (dir_sector[pos+13] << 24));
376
377         logerror("start %08x size %08x\n", file_start, file_size);
378         break;
379      }
380      if (dir_sector[pos] == 0)
381         break;
382   }
383}
384
385void naomi_gdrom_board::device_start()
386{
387   naomi_board::device_start();
388
389   dimm_data = 0;
390   dimm_data_size = 0;
391
392   char name[128];
393   memset(name,'\0',128);
394
395   UINT64 key;
396
397   const UINT8 *picdata = machine().region(pic_tag)->base();
398
399   if(machine().region(pic_tag)->bytes() == 0x4000) {
400      //printf("Real PIC binary found\n");
401      for(int i=0;i<7;i++)
402         name[i] = picdata[0x7c0+i*2];
403      for(int i=0;i<7;i++)
404         name[i+7] = picdata[0x7e0+i*2];
405
406      key = 0;
407      for(int i=0;i<7;i++)
408         key |= UINT64(picdata[0x780+i*2]) << (56 - i*8);
409
410      key |= picdata[0x7a0];
411
412   } else {
413      // use extracted pic data
414      logerror("This PIC key hasn't been converted to a proper PIC binary yet!\n");
415      memcpy(name, picdata+33, 7);
416      memcpy(name+7, picdata+25, 7);
417
418      key =((UINT64(picdata[0x31]) << 56) |
419           (UINT64(picdata[0x32]) << 48) |
420           (UINT64(picdata[0x33]) << 40) |
421           (UINT64(picdata[0x34]) << 32) |
422           (UINT64(picdata[0x35]) << 24) |
423           (UINT64(picdata[0x36]) << 16) |
424           (UINT64(picdata[0x37]) << 8)  |
425           (UINT64(picdata[0x29]) << 0));
426   }
427
428   logerror("key is %08x%08x\n", (UINT32)((key & 0xffffffff00000000ULL)>>32), (UINT32)(key & 0x00000000ffffffffULL));
429
430   UINT8 buffer[2048];
431   cdrom_file *gdromfile = cdrom_open(get_disk_handle(machine(), image_tag));
432   // primary volume descriptor
433   // read frame 0xb06e (frame=sector+150)
434   // dimm board firmware starts straight from this frame
435   cdrom_read_data(gdromfile, 0xb06e - 150, buffer, CD_TRACK_MODE1);
436   UINT32 path_table = ((buffer[0x8c+0] << 0) |
437                   (buffer[0x8c+1] << 8) |
438                   (buffer[0x8c+2] << 16) |
439                   (buffer[0x8c+3] << 24));
440   // path table
441   cdrom_read_data(gdromfile, path_table, buffer, CD_TRACK_MODE1);
442   UINT32 dir = ((buffer[0x2+0] << 0) |
443              (buffer[0x2+1] << 8) |
444              (buffer[0x2+2] << 16) |
445              (buffer[0x2+3] << 24));
446
447   // directory
448   UINT8 dir_sector[2048];
449   cdrom_read_data(gdromfile, dir, dir_sector, CD_TRACK_MODE1);
450   // find data of file
451   UINT32 file_start, file_size;
452   find_file(name, dir_sector, file_start, file_size);
453
454   if(file_start && (file_size == 0x100)) {
455      // read file
456      cdrom_read_data(gdromfile, file_start, buffer, CD_TRACK_MODE1);
457      // get "rom" file name
458      memset(name,'\0', 128);
459      memcpy(name, buffer+0xc0, FILENAME_LENGTH-1);
460
461      find_file(name, dir_sector, file_start, file_size);
462
463      if(file_start) {
464         UINT32 file_rounded_size = (file_size+2047) & -2048;
465         for(dimm_data_size = 4096; dimm_data_size < file_rounded_size; dimm_data_size <<= 1);
466         dimm_data = auto_alloc_array(machine(), UINT8, dimm_data_size);
467         if(dimm_data_size != file_rounded_size)
468            memset(dimm_data + file_rounded_size, 0, dimm_data_size - file_rounded_size);
469
470         // read encrypted data into dimm_data
471         UINT32 sectors = file_rounded_size / 2048;
472         for(UINT32 sec = 0; sec != sectors; sec++)
473            cdrom_read_data(gdromfile, file_start+sec, dimm_data + 2048*sec, CD_TRACK_MODE1);
474
475         UINT32 des_subkeys[32];
476         des_generate_subkeys(rev64(key), des_subkeys);
477
478         for(int i=0; i<file_rounded_size;i+=8)
479            write_from_qword(dimm_data+i, rev64(des_encrypt_decrypt(true, rev64(read_to_qword(dimm_data+i)), des_subkeys)));
480      }
481   }
482
483   // decrypt loaded data
484   cdrom_close(gdromfile);
485
486   if(!dimm_data)
487      throw emu_fatalerror("GDROM: Could not find the file to decrypt.");
488
489   save_item(NAME(dimm_cur_address));
490}
491
492void naomi_gdrom_board::device_reset()
493{
494   naomi_board::device_reset();
495
496   dimm_cur_address = 0;
497}
498
499void naomi_gdrom_board::board_setup_address(UINT32 address, bool is_dma)
500{
501   dimm_cur_address = address & (dimm_data_size-1);
502}
503
504void naomi_gdrom_board::board_get_buffer(UINT8 *&base, UINT32 &limit)
505{
506   base = dimm_data + dimm_cur_address;
507   limit = dimm_data_size - dimm_cur_address;
508}
509
510void naomi_gdrom_board::board_advance(UINT32 size)
511{
512   dimm_cur_address += size;
513   if(dimm_cur_address >= dimm_data_size)
514      dimm_cur_address %= dimm_data_size;
515}
src/mame/machine/naomigd.h
r0r12705
1#ifndef _NAOMIGD_H_
2#define _NAOMIGD_H_
3
4#include "naomibd.h"
5
6#define MCFG_NAOMI_GDROM_BOARD_ADD(_tag, _image_tag, _pic_tag, _eeprom_tag, _maincpu_tag, _irq_cb) \
7   MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_GDROM_BOARD, _eeprom_tag, _maincpu_tag, _irq_cb) \
8   naomi_gdrom_board::static_set_tags(*device, _image_tag, _pic_tag);
9
10class naomi_gdrom_board : public naomi_board
11{
12public:
13   naomi_gdrom_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
14
15   static void static_set_tags(device_t &device, const char *_image_tag, const char *_pic_tag);
16
17protected:
18   virtual void device_start();
19   virtual void device_reset();
20
21   virtual void board_setup_address(UINT32 address, bool is_dma);
22   virtual void board_get_buffer(UINT8 *&base, UINT32 &limit);
23   virtual void board_advance(UINT32 size);
24
25private:
26   enum { FILENAME_LENGTH=24 };
27
28   const char *image_tag, *pic_tag;
29
30   UINT32 dimm_cur_address;
31
32   // Note: voluntarily not saved into the state
33   UINT8 *dimm_data;
34   UINT32 dimm_data_size;
35
36   static const UINT32 DES_LEFTSWAP[];
37   static const UINT32 DES_RIGHTSWAP[];
38   static const UINT32 DES_SBOX1[];
39   static const UINT32 DES_SBOX2[];
40   static const UINT32 DES_SBOX3[];
41   static const UINT32 DES_SBOX4[];
42   static const UINT32 DES_SBOX5[];
43   static const UINT32 DES_SBOX6[];
44   static const UINT32 DES_SBOX7[];
45   static const UINT32 DES_SBOX8[];
46   static const UINT32 DES_MASK_TABLE[];
47   static const UINT8 DES_ROTATE_TABLE[16];
48
49   void find_file(const char *name, const UINT8 *dir_sector, UINT32 &file_start, UINT32 &file_size);
50
51   inline void permutate(UINT32 &a, UINT32 &b, UINT32 m, int shift);
52   void des_generate_subkeys(const UINT64 key, UINT32 *subkeys);
53   UINT64 des_encrypt_decrypt(bool decrypt, UINT64 src, const UINT32 *des_subkeys);
54   UINT64 rev64(UINT64 src);
55   UINT64 read_to_qword(const UINT8 *region);
56   void write_from_qword(UINT8 *region, UINT64 qword);
57};
58
59extern const device_type NAOMI_GDROM_BOARD;
60
61#endif
src/mame/machine/naomig1.c
r0r12705
1#define ADDRESS_MAP_MODERN
2
3#include "emu.h"
4#include "naomig1.h"
5
6DEVICE_ADDRESS_MAP_START(amap, 32, naomi_g1_device)
7   AM_RANGE(0x04, 0x07) AM_READWRITE(sb_gdstar_r, sb_gdstar_w)
8   AM_RANGE(0x08, 0x0b) AM_READWRITE(sb_gdlen_r, sb_gdlen_w)
9   AM_RANGE(0x0c, 0x0f) AM_READWRITE(sb_gddir_r, sb_gddir_w)
10   AM_RANGE(0x14, 0x17) AM_READWRITE(sb_gden_r, sb_gden_w)
11   AM_RANGE(0x18, 0x1b) AM_READWRITE(sb_gdst_r, sb_gdst_w)
12   AM_RANGE(0x80, 0x83) AM_WRITE(sb_g1rrc_w)
13   AM_RANGE(0x84, 0x87) AM_WRITE(sb_g1rwc_w)
14   AM_RANGE(0x88, 0x8b) AM_WRITE(sb_g1frc_w)
15   AM_RANGE(0x8c, 0x8f) AM_WRITE(sb_g1fwc_w)
16   AM_RANGE(0x90, 0x93) AM_WRITE(sb_g1crc_w)
17   AM_RANGE(0x94, 0x97) AM_WRITE(sb_g1cwc_w)
18   AM_RANGE(0xa0, 0xa3) AM_WRITE(sb_g1gdrc_w)
19   AM_RANGE(0xa4, 0xa7) AM_WRITE(sb_g1gdwc_w)
20   AM_RANGE(0xb0, 0xb3) AM_READ(sb_g1sysm_r)
21   AM_RANGE(0xb4, 0xb7) AM_WRITE(sb_g1crdyc_w)
22   AM_RANGE(0xb8, 0xbb) AM_WRITE(sb_gdapro_w)
23   AM_RANGE(0xf4, 0xf7) AM_READ(sb_gdstard_r)
24   AM_RANGE(0xf8, 0xfb) AM_READ(sb_gdlend_r)
25ADDRESS_MAP_END
26
27naomi_g1_device::naomi_g1_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
28   : device_t(mconfig, type, name, tag, owner, clock)
29{
30   cpu = 0;
31}
32
33void naomi_g1_device::static_set_maincpu_tag(device_t &device, const char *maincpu_tag)
34{
35   naomi_g1_device &naomi_g1 = downcast<naomi_g1_device &>(device);
36   naomi_g1.maincpu_tag = maincpu_tag;
37}
38
39void naomi_g1_device::static_set_irq_cb(device_t &device, void (*irq_cb)(running_machine &))
40{
41   naomi_g1_device &naomi_g1 = downcast<naomi_g1_device &>(device);
42   naomi_g1.irq_cb = irq_cb;
43}
44
45void naomi_g1_device::device_start()
46{
47   cpu = machine().device<sh4_device>(maincpu_tag);
48   timer = timer_alloc(G1_TIMER_ID);
49
50   save_item(NAME(gdstar));
51   save_item(NAME(gdlen));
52   save_item(NAME(gddir));
53   save_item(NAME(gden));
54   save_item(NAME(gdst));
55}
56
57void naomi_g1_device::device_reset()
58{
59   gdstar = 0;
60   gdlen = 0;
61   gddir = 0;
62   gden = 0;
63   gdst = 0;
64}
65
66void naomi_g1_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
67{
68   timer.adjust(attotime::never);
69   if(!gdst)
70      return;
71   gdst = 0;
72   if(irq_cb)
73      irq_cb(machine());
74}
75
76READ32_MEMBER(naomi_g1_device::sb_gdstar_r)
77{
78   return gdstar;
79}
80
81WRITE32_MEMBER(naomi_g1_device::sb_gdstar_w)
82{
83   COMBINE_DATA(&gdstar);
84   logerror("G1: gdstar_w %08x @ %08x\n", data, mem_mask);
85}
86
87READ32_MEMBER(naomi_g1_device::sb_gdlen_r)
88{
89   return gdlen;
90}
91
92WRITE32_MEMBER(naomi_g1_device::sb_gdlen_w)
93{
94   COMBINE_DATA(&gdlen);
95   logerror("G1: gdlen_w %08x @ %08x\n", data, mem_mask);
96}
97
98READ32_MEMBER(naomi_g1_device::sb_gddir_r)
99{
100   return gddir;
101}
102
103WRITE32_MEMBER(naomi_g1_device::sb_gddir_w)
104{
105   COMBINE_DATA(&gddir);
106   gddir &= 1;
107   logerror("G1: gddir_w %08x @ %08x\n", data, mem_mask);
108}
109
110READ32_MEMBER(naomi_g1_device::sb_gden_r)
111{
112   return gden;
113}
114
115WRITE32_MEMBER(naomi_g1_device::sb_gden_w)
116{
117   COMBINE_DATA(&gden);
118   gden &= 1;
119   logerror("G1: gden_w %08x @ %08x\n", data, mem_mask);
120}
121
122READ32_MEMBER(naomi_g1_device::sb_gdst_r)
123{
124   return gdst;
125}
126
127WRITE32_MEMBER(naomi_g1_device::sb_gdst_w)
128{
129   UINT32 old = gdst;
130   COMBINE_DATA(&gdst);
131   gdst &= 1;
132   logerror("G1: gdst_w %08x @ %08x\n", data, mem_mask);
133   if(!old && gdst && gden) {
134      // DMA starts
135
136      UINT32 adr = gdstar;
137      UINT32 len = gdlen;
138
139      // Deunan says round up to 32, doc says complete with zeroes.
140      // Virtua Tennis requires one of the two to boot
141      // We'll go with DK for now.
142      //
143      // In any case, low bit is ignored
144      len = (len + 30) & ~30;
145
146      bool to_mainram = true;
147      while(len) {
148         UINT8 *base;
149         UINT32 limit = len;
150         dma_get_position(base, limit, to_mainram);
151
152         if(!limit)
153            break;
154         UINT32 tlen = limit > len ? len : limit;
155         dma(base, adr, tlen, to_mainram);
156         adr += tlen;
157         len -= tlen;
158         dma_advance(tlen);
159      }
160
161      while(len && to_mainram) {
162         unsigned char zero[32];
163         memset(zero, 0, sizeof(zero));
164         UINT32 tlen = len > 32 ? 32 : len;
165         dma(zero, adr, tlen, to_mainram);
166         adr += tlen;
167         len -= tlen;
168      }
169
170      timer->adjust(attotime::from_usec(500));
171   }
172}
173
174WRITE32_MEMBER(naomi_g1_device::sb_g1rrc_w)
175{
176   logerror("G1: g1rrc_w %08x @ %08x\n", data, mem_mask);
177}
178
179WRITE32_MEMBER(naomi_g1_device::sb_g1rwc_w)
180{
181   logerror("G1: g1rwc_w %08x @ %08x\n", data, mem_mask);
182}
183
184WRITE32_MEMBER(naomi_g1_device::sb_g1crc_w)
185{
186   logerror("G1: g1crc_w %08x @ %08x\n", data, mem_mask);
187}
188
189WRITE32_MEMBER(naomi_g1_device::sb_g1cwc_w)
190{
191   logerror("G1: g1cwc_w %08x @ %08x\n", data, mem_mask);
192}
193
194WRITE32_MEMBER(naomi_g1_device::sb_g1frc_w)
195{
196   logerror("G1: g1frc_w %08x @ %08x\n", data, mem_mask);
197}
198
199WRITE32_MEMBER(naomi_g1_device::sb_g1fwc_w)
200{
201   logerror("G1: g1fwc_w %08x @ %08x\n", data, mem_mask);
202}
203
204WRITE32_MEMBER(naomi_g1_device::sb_g1gdrc_w)
205{
206   logerror("G1: g1gdrc_w %08x @ %08x\n", data, mem_mask);
207}
208
209WRITE32_MEMBER(naomi_g1_device::sb_g1gdwc_w)
210{
211   logerror("G1: g1gdwc_w %08x @ %08x\n", data, mem_mask);
212}
213
214READ32_MEMBER(naomi_g1_device::sb_g1sysm_r)
215{
216   logerror("G1: g1sysm_r @ %08x\n", mem_mask);
217   return 0;
218}
219
220WRITE32_MEMBER(naomi_g1_device::sb_g1crdyc_w)
221{
222   logerror("G1: g1crdyc_w %08x @ %08x\n", data, mem_mask);
223}
224
225WRITE32_MEMBER(naomi_g1_device::sb_gdapro_w)
226{
227   logerror("G1: gdapro_w %08x @ %08x\n", data, mem_mask);
228}
229
230READ32_MEMBER(naomi_g1_device::sb_gdstard_r)
231{
232   logerror("G1: gdstard_r @ %08x\n", mem_mask);
233   return 0;
234}
235
236READ32_MEMBER(naomi_g1_device::sb_gdlend_r)
237{
238   logerror("G1: gdlend_r @ %08x\n", mem_mask);
239   return 0;
240}
241
242void naomi_g1_device::dma(void *dma_ptr, UINT32 main_adr, UINT32 size, bool to_mainram)
243{
244   sh4_ddt_dma ddt;
245   if(to_mainram)
246      ddt.destination = main_adr;
247   else
248      ddt.source = main_adr;
249   ddt.buffer = dma_ptr;
250   ddt.length = size >> 5;
251   ddt.size = 32;
252   ddt.direction = to_mainram;
253   ddt.channel = -1;
254   ddt.mode = -1;
255   sh4_dma_ddt(cpu, &ddt);
256}
257
src/mame/machine/naomig1.h
r0r12705
1#ifndef _NAOMIG1_H_
2#define _NAOMIG1_H_
3
4#include "cpu/sh4/sh4.h"
5
6#define MCFG_NAOMI_G1_ADD(_tag, type, _maincpu_tag, _irq_cb)         \
7   MCFG_DEVICE_ADD(_tag, type, 0)                              \
8   naomi_g1_device::static_set_maincpu_tag(*device, _maincpu_tag);      \
9   naomi_g1_device::static_set_irq_cb(*device, _irq_cb);
10
11class naomi_g1_device : public device_t
12{
13public:
14   naomi_g1_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
15   static void static_set_maincpu_tag(device_t &device, const char *maincpu_tag);
16   static void static_set_irq_cb(device_t &device, void (*irq_cb)(running_machine &));
17
18   DECLARE_ADDRESS_MAP(amap, 32);
19
20   DECLARE_READ32_MEMBER(sb_gdstar_r);   // 5f7404
21   DECLARE_WRITE32_MEMBER(sb_gdstar_w);  // 5f7404
22   DECLARE_READ32_MEMBER(sb_gdlen_r);    // 5f7408
23   DECLARE_WRITE32_MEMBER(sb_gdlen_w);   // 5f7408
24   DECLARE_READ32_MEMBER(sb_gddir_r);    // 5f740c
25   DECLARE_WRITE32_MEMBER(sb_gddir_w);   // 5f740c
26   DECLARE_READ32_MEMBER(sb_gden_r);     // 5f7414
27   DECLARE_WRITE32_MEMBER(sb_gden_w);    // 5f7414
28   DECLARE_READ32_MEMBER(sb_gdst_r);     // 5f7418
29   DECLARE_WRITE32_MEMBER(sb_gdst_w);    // 5f7418
30
31   DECLARE_WRITE32_MEMBER(sb_g1rrc_w);   // 5f7480
32   DECLARE_WRITE32_MEMBER(sb_g1rwc_w);   // 5f7484
33   DECLARE_WRITE32_MEMBER(sb_g1frc_w);   // 5f7488
34   DECLARE_WRITE32_MEMBER(sb_g1fwc_w);   // 5f748c
35   DECLARE_WRITE32_MEMBER(sb_g1crc_w);   // 5f7490
36   DECLARE_WRITE32_MEMBER(sb_g1cwc_w);   // 5f7494
37   DECLARE_WRITE32_MEMBER(sb_g1gdrc_w);  // 5f74a0
38   DECLARE_WRITE32_MEMBER(sb_g1gdwc_w);  // 5f74a4
39   DECLARE_READ32_MEMBER(sb_g1sysm_r);   // 5f74b0
40   DECLARE_WRITE32_MEMBER(sb_g1crdyc_w); // 5f74b4
41   DECLARE_WRITE32_MEMBER(sb_gdapro_w);  // 5f74b8
42
43   DECLARE_READ32_MEMBER(sb_gdstard_r);  // 5f74f4
44   DECLARE_READ32_MEMBER(sb_gdlend_r);   // 5f74f8
45
46protected:
47   enum { G1_TIMER_ID = 0x42 };
48
49   virtual void device_start();
50   virtual void device_reset();
51   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
52
53   virtual void dma_get_position(UINT8 *&base, UINT32 &limit, bool to_maincpu) = 0;
54   virtual void dma_advance(UINT32 size) = 0;
55
56private:
57   UINT32 gdstar, gdlen, gddir, gden, gdst;
58
59   sh4_device *cpu;
60   const char *maincpu_tag;
61   emu_timer *timer;
62   void (*irq_cb)(running_machine &);
63
64   void dma(void *dma_ptr, UINT32 main_adr, UINT32 size, bool to_mainram);
65};
66
67#endif
src/mame/machine/naomim4.c
r0r12705
1#define ADDRESS_MAP_MODERN
2
3#include "emu.h"
4#include "naomim4.h"
5
6// Decoder for M4-type NAOMI cart encryption
7
8// In hardware, the decryption is managed by the XC3S50 Xilinx Spartan FPGA (IC2)
9// and the annexed PIC16C621A PIC MCU (IC3).
10// - The FPGA control the clock line of the security PIC.
11// - The protocol between the FPGA and the MCU is nibble-based, though it hasn't been RE for now.
12// - The decryption algorithm is clearly nibble-based too.
13
14// The decryption algorithm itself implements a stream cipher built on top of a 16-bits block cipher.
15// The underlying block-cipher is a SP-network of 2 rounds (both identical in structure). In every
16// round, the substitution phase is done using 4 fixed 4-to-4 sboxes acting on every nibble. The permutation
17// phase is indeed a nibble-based linear combination.
18// With that block cipher, a stream cipher is constructed by feeding the output result of the 1st round
19// of a certain 16-bits block as a whitening value for the next block. The cart dependent data used by
20// the algorithm is comprised by a 16-bits "key" and a 16-bits IV (initialization vector) --though they
21// will be merged in a only 32-bits number in the code--. The hardware auto-reset the feed value
22// to the cart-based IV every 16 blocks (32 bytes); that reset is not address-based, but index-based.
23
24const device_type NAOMI_M4_BOARD = &device_creator<naomi_m4_board>;
25
26const UINT8 naomi_m4_board::k_sboxes[4][16] = {
27    {13,14,1,11,7,9,10,0,15,6,4,5,8,2,12,3},
28    {12,3,14,6,7,15,2,13,1,4,11,0,9,10,8,5},
29    {6,12,0,10,1,5,14,9,7,2,15,13,4,11,3,8},
30    {9,12,8,7,10,4,0,15,1,11,14,2,13,5,6,3}
31};
32
33naomi_m4_board::naomi_m4_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
34   : naomi_board(mconfig, NAOMI_M4_BOARD, "NAOMI-M1-BOARD", tag, owner, clock)
35{
36   key_tag = 0;
37}
38
39void naomi_m4_board::static_set_tags(device_t &device, const char *_key_tag)
40{
41   naomi_m4_board &dev = downcast<naomi_m4_board &>(device);
42   dev.key_tag = _key_tag;
43}
44
45void naomi_m4_board::device_start()
46{
47   naomi_board::device_start();
48
49   const UINT8 *key_data = machine().region(key_tag)->base();
50   key = (key_data[2] << 8) | key_data[3];
51   iv = (key_data[0] << 8) | key_data[1];
52   buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE);
53   enc_init();
54
55   save_pointer(NAME(buffer), BUFFER_SIZE);
56   save_item(NAME(rom_cur_address));
57   save_item(NAME(buffer_actual_size));
58   save_item(NAME(encryption));
59   save_item(NAME(counter));
60}
61
62void naomi_m4_board::enc_init()
63{
64   one_round = auto_alloc_array(machine(), UINT16, 0x10000);
65
66   for(int round_input = 0; round_input < 0x10000; round_input++) {
67      UINT8 input_nibble[4];
68      UINT8 output_nibble[4];
69
70      for (int nibble_idx = 0; nibble_idx < 4; ++nibble_idx) {
71         input_nibble[nibble_idx] = (round_input >> (nibble_idx*4)) & 0xf;
72         output_nibble[nibble_idx] = 0;
73      }
74
75      UINT8 aux_nibble = input_nibble[3];
76      for (int nibble_idx = 0; nibble_idx < 4; ++nibble_idx) { // 4 s-boxes per round
77         aux_nibble ^= k_sboxes[nibble_idx][input_nibble[nibble_idx]];
78         for (int i = 0; i < 4; ++i)  // diffusion of the bits
79            output_nibble[(nibble_idx - i) & 3] |= aux_nibble & (1 << i);
80      }
81
82      UINT16 result = 0;
83      for (int nibble_idx = 0; nibble_idx < 4; ++nibble_idx)
84         result |= (output_nibble[nibble_idx] << (4 * nibble_idx));
85
86      one_round[round_input] = result;
87   }
88}
89
90void naomi_m4_board::device_reset()
91{
92   naomi_board::device_reset();
93   rom_cur_address = 0;
94   buffer_actual_size = 0;
95   encryption = false;
96   counter = 0;
97   cur_iv = 0;
98}
99
100void naomi_m4_board::board_setup_address(UINT32 address, bool is_dma)
101{
102   rom_cur_address = address & 0x1fffffff;
103   encryption = !(address & 0x20000000);
104
105   if(encryption) {
106      enc_reset();
107      enc_fill();
108   }
109}
110
111void naomi_m4_board::board_get_buffer(UINT8 *&base, UINT32 &limit)
112{
113   if(encryption) {
114      base = buffer;
115      limit = BUFFER_SIZE;
116
117   } else {
118      base = m_region->base() + rom_cur_address;
119      limit = m_region->bytes() - rom_cur_address;
120   }
121}
122
123void naomi_m4_board::board_advance(UINT32 size)
124{
125   if(encryption) {
126      if(size < buffer_actual_size) {
127         memmove(buffer, buffer + size, buffer_actual_size - size);
128         buffer_actual_size -= size;
129      } else
130         buffer_actual_size = 0;
131      enc_fill();
132         
133   } else
134      rom_cur_address += size;
135}
136
137void naomi_m4_board::enc_reset()
138{
139   buffer_actual_size = 0;
140   cur_iv = iv;
141   counter = 0;
142}
143
144void naomi_m4_board::enc_fill()
145{
146   const UINT8 *base = m_region->base() + rom_cur_address;
147   while(buffer_actual_size < BUFFER_SIZE) {
148      UINT16 enc = base[0] | (base[1] << 8);
149      UINT16 output_whitening = key ^ cur_iv;
150      cur_iv = one_round[enc ^ cur_iv];
151      UINT16 dec = one_round[key ^ cur_iv] ^ output_whitening;
152
153      buffer[buffer_actual_size++] = dec;
154      buffer[buffer_actual_size++] = dec >> 8;
155
156      base += 2;
157      rom_cur_address += 2;
158
159      counter++;
160      if(counter == 16) {
161         counter = 0;
162         cur_iv = iv;
163      }
164   }
165}
src/mame/machine/naomibd.c
r12704r12705
1/*************************************************************************
1#define ADDRESS_MAP_MODERN
22
3    Naomi plug-in board emulator
3#include "emu.h"
4#include "naomibd.h"
5#include "machine/x76f100.h"
46
5    emulator by Samuele Zannoli and R. Belmont
6    reverse engineering by ElSemi, Deunan Knute, Andreas Naive, Olivier Galibert, and Cah4e3
7
8    TODO: "M4" boards allow direct access to the flash chips' commands and IDs.
9          Can't implement this w/o access to the ROM test however.
10
11**************************************************************************/
12
137/*
148    Naomi ROM board info from ElSemi:
159
r12704r12705
2923
3024    To access the board using DMA, use the DMA_OFFSETL/H. DMA_COUNT is in units of 0x20 bytes. Then trigger a GDROM DMA request.
3125
32    Dimm board registers (add more information if you find it):
33
34    Name:                   Naomi   Dimm Bd.
35    NAOMI_DIMM_COMMAND    = 5f703c  14000014 (16 bit):
36        if bits all 1 no dimm board present and other registers not used
37        bit 15: during an interrupt is 1 if the dimm board has a command to be executed
38        bit 14-9: 6 bit command number (naomi bios understands 0 1 3 4 5 6 8 9 a)
39        bit 7-0: higher 8 bits of 24 bit offset parameter
40    NAOMI_DIMM_OFFSETL    = 5f7040  14000018 (16 bit):
41        bit 15-0: lower 16 bits of 24 bit offset parameter
42    NAOMI_DIMM_PARAMETERL = 5f7044  1400001c (16 bit)
43    NAOMI_DIMM_PARAMETERH = 5f7048  14000020 (16 bit)
44    NAOMI_DIMM_STATUS     = 5f704c  14000024 (16 bit):
45        bit 0: when 0 signal interrupt from naomi to dimm board
46        bit 8: when 0 signal interrupt from dimm board to naomi
47
48
4926    Cartridge protection info from Deunan Knute:
5027
5128    NAOMI cart can hold up to 256MB of data (well, 512 is possible too I guess), so the highest bits are used for other, dark and scary purposes.
r12704r12705
7249    Or it could really be the last address bit to allow up to 512MB of data on a cart?
7350
7451    Normal address starts with 0xa0000000 to enable auto-advance and standard addressing mode.
75
76------------------------
77
78Atomiswave ROM board specs from Cah4e3 @ http://cah4e3.wordpress.com/2009/07/26/some-atomiswave-info/
79
80 AW_EPR_OFFSETL                                          Register addres: 0x5f7000
81 +-------------------------------------------------------------------------------+
82 |                                  bit15-0                                      |
83 +-------------------------------------------------------------------------------+
84 |                         EPR data offset low word                              |
85 +-------------------------------------------------------------------------------+
86
87 AW_EPR_OFFSETH                                          Register addres: 0x5f7004
88 +-------------------------------------------------------------------------------+
89 |                                  bit15-0                                      |
90 +-------------------------------------------------------------------------------+
91 |                          EPR data offset hi word                              |
92 +-------------------------------------------------------------------------------+
93
94  Both low and high words of 32-bit offset from start of EPR-ROM area. Used for
95  reading header and programm code data, cannot be used for reading MPR-ROMs data.
96
97 AW_MPR_RECORD_INDEX                                     Register addres: 0x5f700c
98 +-------------------------------------------------------------------------------+
99 |                                  bit15-0                                      |
100 +-------------------------------------------------------------------------------+
101 |                          File system record index                             |
102 +-------------------------------------------------------------------------------+
103
104  This register contains index of MPR-ROM file system record (64-bytes in size) to
105  read throught DMA. Internal DMA offset register is assigned as AW_MPR_RECORD_INDEX<<6
106  from start of MPR-ROM area. Size of DMA transaction not limited, it is possible
107  to read any number of records or just part of it.
108
109 AW_MPR_FIRST_FILE_INDEX                                 Register addres: 0x5f7010
110 +-------------------------------------------------------------------------------+
111 |                                  bit15-0                                      |
112 +-------------------------------------------------------------------------------+
113 |                           First file record index                             |
114 +-------------------------------------------------------------------------------+
115
116  This register assign for internal cart circuit index of record in MPR-ROM file
117  system sub-area that contain information about first file of MPR-ROM files
118  sub-area. Internal circuit using this record to read absolute first file offset
119  from start of MPR-ROM area and calculate normal offset for each other file
120  requested, since MPR-ROM file data sub-area can be assighed only with relative
121  offsets from start of such sub-area.
122
123 AW_MPR_FILE_OFFSETL                                     Register addres: 0x5f7014
124 +-------------------------------------------------------------------------------+
125 |                                  bit15-0                                      |
126 +-------------------------------------------------------------------------------+
127 |                         MPR file offset low word                              |
128 +-------------------------------------------------------------------------------+
129
130 AW_MPR_FILE_OFFSETH                                     Register addres: 0x5f7018
131 +-------------------------------------------------------------------------------+
132 |                                  bit15-0                                      |
133 +-------------------------------------------------------------------------------+
134 |                          MPR file offset hi word                              |
135 +-------------------------------------------------------------------------------+
136
137  Both low and high words of 32-bit relative offset from start of MPR-ROM files
138  sub-area. Used by internal circuit to calculate absolute offset using data
139  from AW_MPR_FIRST_FILE_INDEX register. Cannot be used for reading EPR-ROM
140  data nor even MPR-ROM file system sub-area data.
141
142 In short:
143
144     EPR-ROM
145 +--------------+ 0x00000000
146 |              |
147 |    HEADER    +- AW_EPR_OFFSET << 1
148 |              |
149 +--------------+
150 |              |
151 |     CODE     +- AW_EPR_OFFSET << 1
152 |              |
153 |              |
154 +--------------+ 0x007fffff
155
156     MPR-ROMS
157 +--------------+ 0x00000000
158 | FS_HEADER    |
159 | FS_RECORD[1] +- (AW_MPR_RECORD_INDEX << 6)
160 | FS_RECORD[2] |
161 | FS_RECORD[3] +- (AW_MPR_FIRST_FILE_INDEX << 6)
162 |     ...      |
163 | FS_RECORD[N] |
164 +--------------+- FS_RECORD[AW_MPR_FIRST_FILE_INDEX].FILE_ABS_OFFSET
165 | FILE_0       |
166 | FILE_1       +- (AW_MPR_FILE_OFFSET << 1) + FS_RECORD[AW_MPR_FIRST_FILE_INDEX].FILE_ABS_OFFSET
167 |     ...      |
168 | FILE_N       |
169 +--------------+ 0x07ffffff
170
17152*/
17253
173// NOTE: all accesses are 16 or 32 bits wide but only 16 bits are valid
54DEVICE_ADDRESS_MAP_START(submap, 16, naomi_board)
55   AM_RANGE(0x00, 0x01) AM_WRITE(rom_offseth_w)
56   AM_RANGE(0x02, 0x03) AM_WRITE(rom_offsetl_w)
57   AM_RANGE(0x04, 0x05) AM_READWRITE(rom_data_r, rom_data_w)
58   AM_RANGE(0x06, 0x07) AM_WRITE(dma_offseth_w)
59   AM_RANGE(0x08, 0x09) AM_WRITE(dma_offsetl_w)
60   AM_RANGE(0x0a, 0x0b) AM_WRITE(dma_count_w)
61   AM_RANGE(0x3c, 0x3d) AM_WRITE(boardid_w)
62   AM_RANGE(0x3e, 0x3f) AM_READ(boardid_r)
17463
175#include "emu.h"
176#include "profiler.h"
177#include "machine/x76f100.h"
178#include "cdrom.h"
179#include "includes/naomi.h"
180#include "includes/naomibd.h"
181#include "naomim4decoder.h"
64   AM_RANGE(0x00, 0xff) AM_READ(default_r)
65ADDRESS_MAP_END
18266
183#define NAOMIBD_FLAG_AUTO_ADVANCE   (8)   // address auto-advances on read
184#define NAOMIBD_FLAG_SPECIAL_MODE   (4)   // used to access protection registers
185#define NAOMIBD_FLAG_DMA_COMPRESSION    (2)   // 0 protection chip decompresses DMA data, 1 for normal DMA reads
186
187#define NAOMIBD_PRINTF_PROTECTION   (0)   // 1 to printf protection access details
188
189#define CART_RAM_SIZE (2*1024*1024) // must be the size of the largest encrypted M4 DMA transfer to be done
190
191/*************************************
192 *
193 *  Structures
194 *
195 *************************************/
196
197#define PACK_BUF_SIZE (32768)
198
199enum
67naomi_board::naomi_board(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
68   : naomi_g1_device(mconfig, type, name, tag, owner, clock)
20069{
201   CMD_READY = 0,
202   CMD_FETCH,
203   CMD_REPEAT
204};
205
206typedef struct _naomibd_config_table naomibd_config_table;
207struct _naomibd_config_table
208{
209   const char *name;
210   int m2m3_key;
211    int m1_key;
212    int m4_key;
213};
214
215typedef struct _naomibd_prot naomibd_prot;
216struct _naomibd_prot
217{
218   UINT16 last_word, aux_word, pak_word, heading_word;
219   UINT16 *ptr;
220   int count, pak_bit, control_bits, pak_state, dec_count, pak_buf_size, pak_buf_pos;
221    int pak_fetch_ofs;
222    UINT8 pak_byte, cmd_byte;
223    int seed;
224    UINT8 pak_buf[PACK_BUF_SIZE];
225
226    UINT8 *s_input;
227    UINT8 s_xor[4];
228    UINT8 s_dict[111];
229    int s_subst, s_out_len, s_out_cnt, s_shift, s_bits, s_in_len, s_in_pos;
230};
231
232typedef struct _naomibd_state naomibd_state;
233struct _naomibd_state
234{
235   UINT8            index;               /* index of board */
236   UINT8            type;
237   device_t *device;            /* pointer to our containing device */
238
239   UINT8 *            memory;
240   chd_file *         gdromchd;
241   cdrom_file *      gdrom;
242   UINT8 *            picdata;
243   UINT32            size;            /* size of installed dimm memory */
244   UINT32            rom_offset, rom_offset_flags, dma_count;
245   UINT32            dma_offset, dma_offset_flags;
246   UINT32            prot_offset, prot_key;
247   UINT32            aw_offset, aw_file_base, aw_file_offset;
248
249   // live decrypt vars
250   UINT32            dc_gamekey, dc_seqkey, dc_dmakey, dc_m4key;
251   UINT8            dc_cart_ram[CART_RAM_SIZE];   // internal cartridge RAM
252   INT32            dc_m3_ptr;
253
254   naomibd_prot      prot;
255
256    NaomiM4Decoder      *m4_decoder;
257};
258
259// maps protection offsets to real addresses
260// format of array: encryption key, address written, address to switch out with.  if key is -1 it's ignored and address written is the match.
261// if key is not -1, it's used for the match instead of the address written.
262static const naomibd_config_table naomibd_translate_tbl[] =
263{
264   // games where on-the-fly decryption works (many of these are fully playable in MAME, just slow)
265   { "18wheelr", 0x07cf54, 0 },
266   { "alpilota", 0x070e41, 0 },
267   { "alpiltdx", 0x070e41, 0 },
268    { "asndynmt", 0xffffffff, 0, 0x00008784 },   // for M4 games, set the first key to 0xffffffff and the M4 key is the 3rd key
269    { "ausfache", 0xffffffff, 0, 0x092b6007 },   // for M4 games, set the first key to 0xffffffff and the M4 key is the 3rd key
270   { "capsnk", 0, 0 },
271   { "capsnka", 0, 0 },
272   { "crackndj", 0x1c2347, 0 },
273   { "crzytaxi", 0x0d2f45, 0 },
274   { "csmash", 0x103347, 0 },
275   { "csmasho", 0x103347, 0 },
276   { "cspike", 0x0e2010, 0 },
277   { "deathcox", 0x0b64d0, 0 },
278   { "derbyoc", 0x0fee35, 0 },
279   { "doa2", 0x8ad01, 0 },
280   { "doa2m", 0x8ad01, 0 },
281   { "dybb99", 0x048a01, 0 },
282   { "f355twin", 0x06efd4, 0 },
283   { "f355twn2", 0x1666c6, 0 },
284   { "ggram2", 0x074a61, 0 },
285   { "ggx", 0x076110, 0 },
286    { "gram2000", 0, 0x7f805c3f },
287   { "gundmct", 0x0e8010, 0 },
288   { "gwing2",  0x0b25d0, 0 },
289   { "hmgeo",   0x038510, 0 },
290    { "illvelo", 0xffffffff, 0, 0xf3a5982c },   // for M4 games, set the first key to 0xffffffff and the M4 key is the 3rd key
291   { "jambo",   0x0fab95, 0 },
292    { "kick4csh", 0, 0x820857c9 },
293    { "mvsc2", 0, 0xc18b6e7c },
294   { "otrigger", 0x0fea94, 0 },
295   { "pjustic", 0x0725d0, 0 },
296   { "pokasuka", 0xffffffff, 0, 0x4792bcde },   // for M4 games, set the first key to 0xffffffff and the M4 key is the 3rd key
297   { "pstone", 0x0e69c1, 0 },
298   { "pstone2", 0x0b8dc0, 0 },
299   { "puyoda", 0x0acd40, 0 },
300    { "qmegamis", 0, 0xcd9b4896 },
301   { "ringout", 0x0b1e40, 0 },
302   { "samba", 0x0a8b5d, 0 },
303   { "samba2k", 0x1702cf, 0 },
304   { "sgtetris", 0x8ae51, 0 },
305    { "shootopl", 0, 0xa0f37ca7 },
306    { "shootpl", 0, 0x9d8de9cd },
307    { "shootplm", 0, 0x9d8de9cd },
308    { "sl2007", 0xffffffff, 0, 0x88c274c7 },   // for M4 games, set the first key to 0xffffffff and the M4 key is the 3rd key
309   { "slasho", 0x1a66ca, 0 },
310   { "smlg99", 0x048a01, 0 },
311   { "spawn", 0x078d01, 0 },
312   { "sstrkfgt", 0x132303, 0 },
313   { "suchie3", 0x0368e1, 0 },
314   { "toyfight", 0x02ca85, 0 },
315   { "vf4cart", 0x2ef2f96, 0 },
316    { "vf4evoct", 0, 0x1e5bb0cd },
317    { "virnbao", 0x68b58, 0 },      // note: "virnba" set doesn't have protection
318    { "vs2_2k", 0x88b08, 0 },
319   { "vtennis", 0x03eb15, 0 },
320   { "vtenis2c", 0, 0x2d2d4743 },
321   { "vonot", 0x010715, 0 },
322   { "wldkicks", 0xae2901, 0 },
323   { "wwfroyal", 0x1627c3, 0 },
324   { "zerogu2", 0x07c010, 0 },
325   { "zombrvn", 0x012b41, 0 },
326};
327
328// forward declaration for decrypt function
329static UINT16 block_decrypt(UINT32 game_key, UINT16 sequence_key, UINT16 counter, UINT16 data);
330
331/***************************************************************************
332    INLINE FUNCTIONS
333***************************************************************************/
334
335/*-------------------------------------------------
336    get_safe_token - makes sure that the passed
337    in device is, in fact, a naomibd device
338-------------------------------------------------*/
339
340INLINE naomibd_state *get_safe_token(device_t *device)
341{
342   assert(device != NULL);
343   assert(device->type() == NAOMI_BOARD);
344
345   return (naomibd_state *)downcast<legacy_device_base *>(device)->token();
70   eeprom_tag = 0;
34671}
34772
348
349
350/*************************************
351 *
352 *  Misc. functions
353 *
354 *************************************/
355
356// send interrupt to host system
357void output_interrupt(naomibd_state *st, int state)
73void naomi_board::static_set_eeprom_tag(device_t &device, const char *_eeprom_tag)
35874{
359   naomibd_config *config = (naomibd_config *)downcast<const legacy_device_base *>(st->device)->inline_config();
360
361   /* send out an interrupt */
362   if (config->signal != NULL)
363      (*config->signal)(st->device, 0, state); // 0: this signal is an interrupt
75   naomi_board &dev = downcast<naomi_board &>(device);
76   dev.eeprom_tag = _eeprom_tag;
36477}
36578
366int naomibd_get_type(device_t *device)
367{
368   naomibd_state *v = get_safe_token(device);
369   return v->type;
370}
37179
372// M1 decryption/decompression
373static UINT8 naomibd_m1dec_readbyte(naomibd_state *naomibd)
80void naomi_board::device_start()
37481{
375    UINT8 v = 0;
82   naomi_g1_device::device_start();
37683
377    switch (naomibd->prot.s_in_pos & 3)
378    {
379        case 0:
380            v = naomibd->prot.s_input[naomibd->prot.s_in_pos + 3];
381            v ^= naomibd->prot.s_input[naomibd->prot.s_in_pos + 1];
382            break;
84   save_item(NAME(rom_offset));
85   save_item(NAME(dma_offset));
86   save_item(NAME(dma_count));
87   save_item(NAME(dma_cur_offset));
88   save_item(NAME(pio_ready));
89   save_item(NAME(dma_ready));
38390
384        case 1:
385            v = naomibd->prot.s_input[naomibd->prot.s_in_pos + 1];
386            v ^= naomibd->prot.s_input[naomibd->prot.s_in_pos - 1];
387            break;
388
389        case 2:
390            v = naomibd->prot.s_input[naomibd->prot.s_in_pos - 1];
391            break;
392
393        case 3:
394            v = naomibd->prot.s_input[naomibd->prot.s_in_pos - 3];
395            break;
396    }
397
398    v ^= naomibd->prot.s_xor[naomibd->prot.s_in_pos & 3];
399    naomibd->prot.s_in_pos++;
400    return v;
91   if(eeprom_tag)
92      eeprom = machine().device<x76f100_device>(eeprom_tag);
93   else
94      eeprom = 0;
40195}
40296
403static void naomibd_m1dec_storebyte (naomibd_state *naomibd, UINT8 b)
97void naomi_board::device_reset()
40498{
405    if (naomibd->prot.s_subst && naomibd->prot.s_out_cnt >= 2)
406    {
407        b = naomibd->dc_cart_ram[naomibd->prot.s_out_cnt - 2] - b;
408    }
409    naomibd->dc_cart_ram[naomibd->prot.s_out_cnt] = b;
410    naomibd->prot.s_out_cnt++;
411
412    if (naomibd->prot.s_out_cnt >= (256*1024))
413    {
414        fatalerror("naomibd: M1 decode exceeds buffer size!\n");
415    }
99   naomi_g1_device::device_reset();
100   rom_offset = 0;
101   dma_offset = 0;
102   dma_cur_offset = 0;
103   pio_ready = false;
104   dma_ready = false;
416105}
417106
418static void naomibd_m1dec_shiftin(naomibd_state *naomibd)
107void naomi_board::dma_get_position(UINT8 *&base, UINT32 &limit, bool to_mainram)
419108{
420    naomibd->prot.s_shift <<= 8;
421    naomibd->prot.s_shift |= naomibd_m1dec_readbyte(naomibd);
422    naomibd->prot.s_bits += 8;
423}
424
425static void naomibd_m1_decode(naomibd_state *naomibd)
426{
427    int i, eos;
428
429    naomibd->prot.s_xor [0] = (UINT8)naomibd->dc_dmakey;
430    naomibd->prot.s_xor [1] = (UINT8)(naomibd->dc_dmakey >> 8);
431    naomibd->prot.s_xor [2] = (UINT8)(naomibd->dc_dmakey >> 16);
432    naomibd->prot.s_xor [3] = (UINT8)(naomibd->dc_dmakey >> 24);
433
434   #if NAOMIBD_PRINTF_PROTECTION
435    printf("M1 decode: dma offset %x, key %x\n", naomibd->dma_offset, naomibd->dc_dmakey);
436    #endif
437
438    naomibd->prot.s_input = naomibd->memory + naomibd->dma_offset;
439    naomibd->prot.s_in_pos = 0;
440
441    // read in the dictionary
442    for (i = 0; i < 111; i++)
443    {
444        naomibd->prot.s_dict [i] = naomibd_m1dec_readbyte(naomibd);
445    }
446
447    // control bits
448    naomibd->prot.s_subst = (naomibd->prot.s_dict [0] & 64) ? 1 : 0;
449
450    // command stream
451    naomibd->prot.s_out_cnt = 0, eos = 0;
452    naomibd->prot.s_shift = 0, naomibd->prot.s_bits = 0;
453    while (!eos)
454    {
455        int code, addr, t;
456
457        if (naomibd->prot.s_bits < 2)
458            naomibd_m1dec_shiftin(naomibd);
459
460        code = (naomibd->prot.s_shift >> (naomibd->prot.s_bits - 2)) & 3;
461        switch (code)
462        {
463            case 0:
464                // 00-aa
465                if (naomibd->prot.s_bits < 4)
466                    naomibd_m1dec_shiftin(naomibd);
467                addr = (naomibd->prot.s_shift >> (naomibd->prot.s_bits - 4)) & 3;
468                naomibd->prot.s_bits -= 4;
469                if (addr == 0)
470                {
471                    // quotation
472                    if (naomibd->prot.s_bits < 8)
473                        naomibd_m1dec_shiftin (naomibd);
474                    t = (naomibd->prot.s_shift >> (naomibd->prot.s_bits - 8)) & 255;
475                    naomibd->prot.s_bits -= 8;
476                    naomibd_m1dec_storebyte(naomibd, t);
477                    break;
478                }
479                naomibd_m1dec_storebyte(naomibd, naomibd->prot.s_dict [addr]);
480                break;
481
482                case 1:
483                    if (naomibd->prot.s_bits < 5)
484                        naomibd_m1dec_shiftin (naomibd);
485                    t = (naomibd->prot.s_shift >> (naomibd->prot.s_bits - 3)) & 1;
486                    if (t == 0)
487                    {
488                        // 010-aa
489                        addr = (naomibd->prot.s_shift >> (naomibd->prot.s_bits - 5)) & 3;
490                        addr += 4;
491                        naomibd->prot.s_bits -= 5;
492                    }
493                    else
494                    {
495                        // 011-aaa
496                        if (naomibd->prot.s_bits < 6)
497                            naomibd_m1dec_shiftin (naomibd);
498                        addr = (naomibd->prot.s_shift >> (naomibd->prot.s_bits - 6)) & 7;
499                        addr += 8;
500                        naomibd->prot.s_bits -= 6;
501                    }
502                    naomibd_m1dec_storebyte(naomibd, naomibd->prot.s_dict [addr]);
503                    break;
504
505                case 2:
506                    if (naomibd->prot.s_bits < 7)
507                        naomibd_m1dec_shiftin(naomibd);
508                    // 10-aaaaa
509                    addr = (naomibd->prot.s_shift >> (naomibd->prot.s_bits - 7)) & 31;
510                    addr += 16;
511                    naomibd->prot.s_bits -= 7;
512                    naomibd_m1dec_storebyte(naomibd, naomibd->prot.s_dict [addr]);
513                    break;
514
515                case 3:
516                    if (naomibd->prot.s_bits < 8)
517                        naomibd_m1dec_shiftin(naomibd);
518                    // 11-aaaaaa
519                    addr = (naomibd->prot.s_shift >> (naomibd->prot.s_bits - 8)) & 63;
520                    addr += 48;
521                    naomibd->prot.s_bits -= 8;
522                    if (addr == 111)
523                    {
524                        // end of stream
525                        eos = 1;
526                    }
527                    else
528                    {
529                        naomibd_m1dec_storebyte(naomibd, naomibd->prot.s_dict [addr]);
530                    }
531                    break;
532        }
533    }
534}
535
536// Streaming M2/M3 protection and decompression
537
538INLINE UINT16 naomi_bswap16(UINT16 in)
539{
540    return ((in>>8) | (in<<8));
541}
542
543static UINT16 naomibd_get_decrypted_stream(naomibd_state *naomibd)
544{
545   UINT16 wordn = naomi_bswap16(naomibd->prot.ptr[naomibd->prot.count++]);
546
547   naomibd->prot.aux_word = block_decrypt(naomibd->dc_gamekey, naomibd->dc_seqkey, naomibd->prot.seed++, wordn);
548   wordn = (naomibd->prot.last_word&~3) | (naomibd->prot.aux_word&3);
549   naomibd->prot.last_word = naomibd->prot.aux_word;
550
551   return wordn;
552}
553
554static void naomibd_init_stream(naomibd_state *naomibd)
555{
556   naomibd->prot.last_word = 0;
557
558   naomibd->prot.control_bits = naomibd_get_decrypted_stream(naomibd);
559   naomibd->prot.heading_word = naomibd_get_decrypted_stream(naomibd);
560
561   if (naomibd->prot.control_bits & 2)
562   {
563      naomibd->prot.pak_bit = 0;
564      naomibd->prot.pak_state = CMD_READY;
565      naomibd->prot.dec_count = 0;
566      naomibd->prot.pak_buf_size = 256 << (naomibd->prot.control_bits & 1);
567      naomibd->prot.pak_buf_pos = 0;
109   if(!to_mainram) {
110      base = 0;
111      limit = 0;
112      return;
568113   }
569}
570114
571static UINT16 naomibd_get_compressed_bit(naomibd_state *naomibd)
572{
573   if(naomibd->prot.pak_bit == 0)
574   {
575       naomibd->prot.pak_bit = 15;
576       naomibd->prot.pak_word = naomibd_get_decrypted_stream(naomibd);
577   }
578   else
579   {
580       naomibd->prot.pak_bit--;
581       naomibd->prot.pak_word<<=1;
582   }
583   return naomibd->prot.pak_word >> 15;
584}
585
586static UINT16 naomibd_get_decompressed_stream(naomibd_state *naomibd)
587{
588/* node format
5890xxxxxxx - next node index
5901a0bbccc - end node
591           a - 0 = repeat
592               1 = fetch
593           b - if a = 1
594               00 - fetch  0
595               01 - fetch  1
596               11 - fetch -1
597               if a = 0
598               000
599           c - repeat/fetch counter
600               count = ccc + 1
60111111111 - empty node
602*/
603   static UINT8 trees[9][2][32] = {
604      {
605         {0x01,0x10,0x0f,0x05,0xc4,0x13,0x87,0x0a,0xcc,0x81,0xce,0x0c,0x86,0x0e,0x84,0xc2,
606          0x11,0xc1,0xc3,0xcf,0x15,0xc8,0xcd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
607         {0xc7,0x02,0x03,0x04,0x80,0x06,0x07,0x08,0x09,0xc9,0x0b,0x0d,0x82,0x83,0x85,0xc0,
608          0x12,0xc6,0xc5,0x14,0x16,0xca,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
609      },
610      {
611         {0x02,0x80,0x05,0x04,0x81,0x10,0x15,0x82,0x09,0x83,0x0b,0x0c,0x0d,0xdc,0x0f,0xde,
612          0x1c,0xcf,0xc5,0xdd,0x86,0x16,0x87,0x18,0x19,0x1a,0xda,0xca,0xc9,0x1e,0xce,0xff,},
613         {0x01,0x17,0x03,0x0a,0x08,0x06,0x07,0xc2,0xd9,0xc4,0xd8,0xc8,0x0e,0x84,0xcb,0x85,
614          0x11,0x12,0x13,0x14,0xcd,0x1b,0xdb,0xc7,0xc0,0xc1,0x1d,0xdf,0xc3,0xc6,0xcc,0xff,},
615      },
616      {
617         {0xc6,0x80,0x03,0x0b,0x05,0x07,0x82,0x08,0x15,0xdc,0xdd,0x0c,0xd9,0xc2,0x14,0x10,
618          0x85,0x86,0x18,0x16,0xc5,0xc4,0xc8,0xc9,0xc0,0xcc,0xff,0xff,0xff,0xff,0xff,0xff,},
619         {0x01,0x02,0x12,0x04,0x81,0x06,0x83,0xc3,0x09,0x0a,0x84,0x11,0x0d,0x0e,0x0f,0x19,
620          0xca,0xc1,0x13,0xd8,0xda,0xdb,0x17,0xde,0xcd,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,},
621      },
622      {
623         {0x01,0x80,0x0d,0x04,0x05,0x15,0x83,0x08,0xd9,0x10,0x0b,0x0c,0x84,0x0e,0xc0,0x14,
624          0x12,0xcb,0x13,0xca,0xc8,0xc2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
625         {0xc5,0x02,0x03,0x07,0x81,0x06,0x82,0xcc,0x09,0x0a,0xc9,0x11,0xc4,0x0f,0x85,0xd8,
626          0xda,0xdb,0xc3,0xdc,0xdd,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
627      },
628      {
629         {0x01,0x80,0x06,0x0c,0x05,0x81,0xd8,0x84,0x09,0xdc,0x0b,0x0f,0x0d,0x0e,0x10,0xdb,
630          0x11,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
631         {0xc4,0x02,0x03,0x04,0xcb,0x0a,0x07,0x08,0xd9,0x82,0xc8,0x83,0xc0,0xc1,0xda,0xc2,
632          0xc9,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
633      },
634      {
635         {0x01,0x02,0x06,0x0a,0x83,0x0b,0x07,0x08,0x09,0x82,0xd8,0x0c,0xd9,0xda,0xff,0xff,
636          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
637         {0xc3,0x80,0x03,0x04,0x05,0x81,0xca,0xc8,0xdb,0xc9,0xc0,0xc1,0x0d,0xc2,0xff,0xff,
638          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
639      },
640      {
641         {0x01,0x02,0x03,0x04,0x81,0x07,0x08,0xd8,0xda,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,
642          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
643         {0xc2,0x80,0x05,0xc9,0xc8,0x06,0x82,0xc0,0x09,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,
644          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
645      },
646      {
647         {0x01,0x80,0x04,0xc8,0xc0,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
648          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
649         {0xc1,0x02,0x03,0x81,0x05,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
650          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
651      },
652      {
653         {0x01,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
654          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
655         {0xc0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
656          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
657      },
658   };
659
660   UINT32 word_complete = 2;
661   UINT16 wordn = 0;
662
663   while(word_complete)
664   {
665      switch(naomibd->prot.pak_state)
666      {
667      case CMD_READY:
668      {
669         UINT32 tmp = 0;
670         INT32 slot = (naomibd->prot.pak_buf_pos & (naomibd->prot.pak_buf_size-1));
671         if(slot > 0)
672         {
673            if(slot < (naomibd->prot.pak_buf_size-7))
674               slot = 1;
675            else
676               slot = (slot & 7) + 1;
677         }
678         while (!(tmp&0x80))
679           if(naomibd_get_compressed_bit(naomibd))
680              tmp = trees[slot][1][tmp];
681           else
682              tmp = trees[slot][0][tmp];
683         if(tmp != 0xff)
684         {
685            naomibd->prot.pak_byte = (tmp&7)+1;
686            if(tmp&0x40)
687            {
688               static INT32 cmds[4] = {0, 1, 0, -1};
689               naomibd->prot.pak_fetch_ofs = cmds[(tmp&0x18)>>3];
690               naomibd->prot.pak_state = CMD_FETCH;
691            }
692            else
693            {
694               UINT8 byten;
695               naomibd->prot.pak_state = CMD_REPEAT;
696               byten =          naomibd_get_compressed_bit(naomibd)  << 1;
697               byten = (byten | naomibd_get_compressed_bit(naomibd)) << 1;
698               byten = (byten | naomibd_get_compressed_bit(naomibd)) << 1;
699               byten = (byten | naomibd_get_compressed_bit(naomibd)) << 1;
700               byten = (byten | naomibd_get_compressed_bit(naomibd)) << 1;
701               byten = (byten | naomibd_get_compressed_bit(naomibd)) << 1;
702               byten = (byten | naomibd_get_compressed_bit(naomibd)) << 1;
703               byten =  byten | naomibd_get_compressed_bit(naomibd);
704               naomibd->prot.cmd_byte = byten;
705            }
706         }
707         break;
708      }
709      case CMD_FETCH:
710         naomibd->prot.cmd_byte = naomibd->prot.pak_buf[(naomibd->prot.pak_buf_pos-naomibd->prot.pak_buf_size+naomibd->prot.pak_fetch_ofs)&(PACK_BUF_SIZE-1)];
711
712      case CMD_REPEAT:
713         naomibd->prot.pak_buf[naomibd->prot.pak_buf_pos&(PACK_BUF_SIZE-1)]=naomibd->prot.cmd_byte;
714         if(word_complete&2)
715       {
716            wordn = naomibd->prot.cmd_byte << 8;
717       }
718         else
719       {
720            wordn = wordn | naomibd->prot.cmd_byte;
721       }
722         word_complete--;
723         naomibd->prot.pak_byte--;
724         naomibd->prot.pak_buf_pos++;
725         if(naomibd->prot.pak_byte == 0) naomibd->prot.pak_state = CMD_READY;
726         break;
727      }
728   }
729   return wordn;
730}
731
732// stream read protected PIO hook
733//-----------------------------------------------------------
734static UINT16 naomibd_get_data_stream(naomibd_state *naomibd)
735{
736   UINT16 wordn;
737
738   if(naomibd->prot.control_bits&2)
739   {
740      wordn = naomibd_get_decompressed_stream(naomibd);
115   if(!dma_ready) {
116      if(!(dma_offset & 0x80000000))
117         throw emu_fatalerror("NAOMI BOARD: Unsupported, non-incrementing DMA.\n");
118      board_setup_address(dma_offset, true);
119      dma_cur_offset = 0;
120      dma_ready = true;
741121   }
742   else
743   {
744      wordn = naomibd_get_decrypted_stream(naomibd);
745   }
746122
747   return wordn;
123   board_get_buffer(base, limit);
124   UINT32 blimit = 0x20*dma_count - dma_cur_offset;
125   if(0 && limit > blimit)
126      limit = blimit;
748127}
749128
750void *naomibd_get_memory(device_t *device, UINT32 length)
129void naomi_board::dma_advance(UINT32 size)
751130{
752   naomibd_state *naomibd = get_safe_token(device);
753
754    // for M1 decodes, return the buffer we'll DMA from
755   if (!(naomibd->dma_offset_flags & NAOMIBD_FLAG_DMA_COMPRESSION) && (naomibd->type == ROM_BOARD) && (naomibd->dc_dmakey != 0))
756    {
757        // perform the M1 decode
758        naomibd_m1_decode(naomibd);
759
760        // return the pointer to our output buffer
761        return naomibd->dc_cart_ram;
762    }
763    else if (!(naomibd->dma_offset_flags & NAOMIBD_FLAG_DMA_COMPRESSION) && (naomibd->type == ROM_BOARD) && (naomibd->dc_m4key != 0))
764    {
765        if (length > CART_RAM_SIZE)  // make sure we stay in bounds
766        {
767            fatalerror("M4 encrypted DMA length too large, adjust CART_RAM_SIZE: %d\n", length);
768            assert(0);
769        }
770
771       #if NAOMIBD_PRINTF_PROTECTION
772        printf("Doing M4 DMA of length %x\n", length);
773        #endif
774
775        // decrypt the required number of bytes
776        naomibd->m4_decoder->init();
777        UINT8 *m4src = naomibd->memory + naomibd->dma_offset;
778        for (int i = 0; i < length; i+=2)
779        {
780            UINT16 temp = naomibd->m4_decoder->decrypt(m4src[i] | (m4src[i+1]<<8));
781
782            naomibd->dc_cart_ram[i] = temp & 0xff;
783            naomibd->dc_cart_ram[i+1] = (temp>>8) & 0xff;
784        }
785
786        // return the pointer to our output buffer
787        return naomibd->dc_cart_ram;
788    }
789
790    if (!(naomibd->dma_offset_flags & NAOMIBD_FLAG_DMA_COMPRESSION) && (naomibd->type == ROM_BOARD))
791    {
792        logerror("Unhandled M1 DMA with key %x, flags %x, offset %x\n", naomibd->dc_dmakey, naomibd->dma_offset_flags, naomibd->dma_offset);
793    }
794
795   return get_safe_token(device)->memory;
131   dma_cur_offset += size;
132   board_advance(size);
796133}
797134
798offs_t naomibd_get_dmaoffset(device_t *device)
135WRITE16_MEMBER(naomi_board::rom_offseth_w)
799136{
800   naomibd_state *naomibd = get_safe_token(device);
801   offs_t result = 0;
802
803   #if NAOMIBD_PRINTF_PROTECTION
804        printf("DMA source %08x, flags %x\n", get_safe_token(device)->dma_offset, get_safe_token(device)->dma_offset_flags);
805   #endif
806
807   // if the flag is cleared that lets the protection chip go,
808   // we need to handle this specially.  but not on DIMM boards or if there's no key.
809   if (!(naomibd->dma_offset_flags & NAOMIBD_FLAG_DMA_COMPRESSION) && (naomibd->type == ROM_BOARD) && (naomibd->dc_dmakey != 0))
810   {
811        // no offset, start at the beginning of cart ram for M1 transfers
812        result = 0;
813   }
814    else
815    {
816        result = get_safe_token(device)->dma_offset;
817    }
818
819   return result;
137   rom_offset = (rom_offset & 0x0000ffff) | (data << 16);
138   pio_ready = false;
820139}
821140
822
823/*************************************
824 *
825 *  Common initialization
826 *
827 *************************************/
828
829
830
831static void naomibd_postload(naomibd_state *v)
141WRITE16_MEMBER(naomi_board::rom_offsetl_w)
832142{
143   rom_offset = (rom_offset & 0xffff0000) | data;
144   pio_ready = false;
833145}
834146
835
836static void init_save_state(device_t *device)
147READ16_MEMBER(naomi_board::rom_data_r)
837148{
838   naomibd_state *v = get_safe_token(device);
839
840   device->machine().save().register_postload(save_prepost_delegate(FUNC(naomibd_postload), v));
841
842   /* register states */
843   device->save_item(NAME(v->rom_offset));
844   device->save_item(NAME(v->rom_offset_flags));
845   device->save_item(NAME(v->dma_count));
846   device->save_item(NAME(v->dma_offset));
847   device->save_item(NAME(v->dma_offset_flags));
848   device->save_item(NAME(v->prot_offset));
849   device->save_item(NAME(v->prot_key));
850   device->save_item(NAME(v->aw_offset));
851   device->save_item(NAME(v->aw_file_base));
852   device->save_item(NAME(v->aw_file_offset));
853   device->save_item(NAME(v->dc_m3_ptr));
854   device->save_item(NAME(v->dc_cart_ram));
855    device->save_item(NAME(v->prot.last_word));
856    device->save_item(NAME(v->prot.aux_word));
857    device->save_item(NAME(v->prot.pak_word));
858    device->save_item(NAME(v->prot.heading_word));
859    device->save_item(NAME(v->prot.count));
860    device->save_item(NAME(v->prot.pak_bit));
861    device->save_item(NAME(v->prot.control_bits));
862    device->save_item(NAME(v->prot.pak_state));
863    device->save_item(NAME(v->prot.dec_count));
864    device->save_item(NAME(v->prot.pak_buf_size));
865    device->save_item(NAME(v->prot.pak_buf_pos));
866    device->save_item(NAME(v->prot.pak_fetch_ofs));
867    device->save_item(NAME(v->prot.pak_byte));
868    device->save_item(NAME(v->prot.cmd_byte));
869    device->save_item(NAME(v->prot.seed));
870    device->save_item(NAME(v->prot.s_xor));
871    device->save_item(NAME(v->prot.s_dict));
872    device->save_item(NAME(v->prot.s_subst));
873    device->save_item(NAME(v->prot.s_out_len));
874    device->save_item(NAME(v->prot.s_out_cnt));
875    device->save_item(NAME(v->prot.s_shift));
876    device->save_item(NAME(v->prot.s_bits));
877    device->save_item(NAME(v->prot.s_in_len));
878    device->save_item(NAME(v->prot.s_in_pos));
879}
880
881
882
883/*************************************
884 *
885 *  Reset
886 *
887 *************************************/
888
889static void soft_reset(naomibd_state *v)
890{
891   v->dc_m3_ptr = 0;
892   v->dc_seqkey = 0;
893}
894
895
896
897/*************************************
898 *
899 *  Handlers
900 *
901 *************************************/
902
903READ64_DEVICE_HANDLER( naomibd_r )
904{
905   naomibd_state *v = get_safe_token(device);
906   UINT8 *ROM = (UINT8 *)v->memory;
907
908   // AW board is different, shouldn't ever be read
909   if (v->type == AW_ROM_BOARD)
910   {
911      mame_printf_debug("AW_ROM_BOARD read @ %x mask %" I64FMT "x\n", offset, mem_mask);
912      return U64(0xffffffffffffffff);
149   if(!pio_ready) {
150      board_setup_address(rom_offset, false);
151      pio_ready = true;
913152   }
914153
915   // ROM_DATA
916   if ((offset == 1) && ACCESSING_BITS_0_15)
917   {
918      UINT64 ret = 0;
919
920      if (v->rom_offset_flags & NAOMIBD_FLAG_SPECIAL_MODE)
921      {
922         // can we live-decrypt this game?
923         if (v->dc_gamekey != -1)
924         {
925            ret = (UINT64)naomibd_get_data_stream(v);
926         }
927            else if (v->dc_m4key != 0)
928            {
929                if (v->m4_decoder)
930                {
931                    ret = (UINT64)v->m4_decoder->decrypt(ROM[v->rom_offset] | (ROM[v->rom_offset+1]<<8));
932                }
933                else
934                {
935                    ret = U64(0);   // $$$M4 TODO
936                }
937            }
938         else
939         {
940                ret = (UINT64)(ROM[v->rom_offset] | (ROM[v->rom_offset+1]<<8));
941         }
942      }
943      else
944      {
945         ret = (UINT64)(ROM[v->rom_offset] | (ROM[v->rom_offset+1]<<8));
946      }
947
948      if (v->rom_offset_flags & NAOMIBD_FLAG_AUTO_ADVANCE)
949      {
950         v->rom_offset += 2;
951      }
952
953      return ret;
954   }
955   else if ((offset == 2) && ACCESSING_BITS_32_63)
956   {
957      //  Actel FPGA ID, used on some games for a "special" ROM test.
958      //
959      //  without this (by returning 0xffff) some games will do a rom test where
960      //  the IC numbers tested do not relate to the actual ROMs on the cart,
961      //  and a fake 'IC1' will be tested, which returns mirrored data from the
962      //  other roms in order to pass if enabled on the real hardware.
963      //  (certain bios / board combinations will also cause this, so it is
964      //   important that we mirror the data in the rom loading using ROM_COPY)
965
966      //return (UINT64)0xffff << 32;
967      return (UINT64)actel_id << 32;
968   }
969    else if ((offset == 6) && ACCESSING_BITS_32_47)
970    {
971        return (UINT64)0x5500<<32;  // flash ID for M4 carts?
972    }
973    else if ((offset == 7) && ACCESSING_BITS_32_47)
974    {
975        // 5f703c
976        mame_printf_verbose("ROM: read 5f703c\n");
977        return (UINT64)0xffff << 32;
978    }
979    else if ((offset == 8) && ACCESSING_BITS_0_15)
980    {
981        // 5f7040
982        #if NAOMIBD_PRINTF_PROTECTION
983        printf("ROM: read 5f7040\n");
984        #endif
985        return 0;
986    }
987   else if ((offset == 8) && ACCESSING_BITS_32_47)
988   {
989      // 5f7044
990        #if NAOMIBD_PRINTF_PROTECTION
991      printf("ROM: read 5f7044\n");
992        #endif
993      return 0;
994   }
995   else if ((offset == 9) && ACCESSING_BITS_0_15)
996   {
997      // 5f7048
998        #if NAOMIBD_PRINTF_PROTECTION
999      printf("ROM: read 5f7048\n");
1000        #endif
1001      return 0;
1002   }
1003   else if ((offset == 9) && ACCESSING_BITS_32_47)
1004   {
1005      // 5f704c
1006        #if NAOMIBD_PRINTF_PROTECTION
1007      printf("ROM: read 5f704c\n");
1008        #endif
1009      return (UINT64)1 << 32;
1010   }
1011   else if ((offset == 15) && ACCESSING_BITS_32_47) // boardid read
1012   {
1013      UINT64 ret;
1014
1015      ret = device->machine().device<x76f100_device>("naomibd_eeprom")->sda_r() << 15;
1016
1017      return ret << 32;
1018   }
1019    #if NAOMIBD_PRINTF_PROTECTION
1020   else
1021   {
1022      printf("%s:ROM: read mask %" I64FMT "x @ %x\n", device->machine().describe_context(), mem_mask, offset);
1023   }
1024    #endif
1025   return U64(0xffffffffffffffff);
154   UINT8 *buffer;
155   UINT32 size;
156   UINT16 res;
157   board_get_buffer(buffer, size);
158   assert(size > 1);
159   res = buffer[0] | (buffer[1] << 8);
160   if(rom_offset & 0x80000000)
161      board_advance(2);
162   return res;
1026163}
1027164
1028WRITE64_DEVICE_HANDLER( naomibd_w )
165WRITE16_MEMBER(naomi_board::rom_data_w)
1029166{
1030   naomibd_state *v = get_safe_token(device);
167   board_write(rom_offset, data);
1031168
1032   // AW board
1033   if (v->type == AW_ROM_BOARD)
1034   {
1035      //printf("AW: %" I64FMT "x to ROM board @ %x (mask %" I64FMT "x)\n", data, offset, mem_mask);
1036
1037      switch (offset)
1038      {
1039         case 0:
1040         {
1041            if(ACCESSING_BITS_0_15)
1042            {
1043               // EPR_OFFSETL
1044               v->aw_offset &= 0xffff0000;
1045               v->aw_offset |= (data & 0xffff);
1046               v->dma_offset = v->aw_offset*2;
1047               //printf("EPR_OFFSETL = %x, dma_offset %x\n", (UINT32)data, v->dma_offset);
1048            }
1049            else if(ACCESSING_BITS_32_47 || ACCESSING_BITS_32_63)
1050            {
1051               // EPR_OFFSETH
1052               v->aw_offset &= 0xffff;
1053               v->aw_offset |= ((data>>16) & 0xffff0000);
1054               v->dma_offset = v->aw_offset*2;
1055               v->dma_offset_flags = NAOMIBD_FLAG_DMA_COMPRESSION|NAOMIBD_FLAG_AUTO_ADVANCE;   // force normal DMA mode
1056               //printf("EPR_OFFSETH = %x, dma_offset %x\n", (UINT32)(data>>32), v->dma_offset);
1057            }
1058
1059         }
1060         break;
1061
1062         case 1:
1063         {
1064            if(ACCESSING_BITS_32_47 || ACCESSING_BITS_32_63)
1065            {
1066               // MPR_RECORD_INDEX
1067               //printf("%x to RECORD_INDEX\n", (UINT32)(data>>32));
1068               v->dma_offset = 0x1000000 + (0x40 * (data>>32));
1069            }
1070         }
1071         break;
1072
1073         case 2:
1074         {
1075            if(ACCESSING_BITS_0_15)
1076            {
1077               UINT8 *ROM = (UINT8 *)v->memory;
1078               UINT32 base;
1079
1080               // MPR_FIRST_FILE_INDEX (usually 3)
1081               base = data * 64;
1082               v->aw_file_base = ROM[0x100000b+base]<<24 | ROM[0x100000a+base]<<16 | ROM[0x1000009+base]<<8 | ROM[0x1000008+base];
1083               v->aw_file_base += 0x1000000;
1084               //printf("%x to FIRST_FILE_INDEX, file_base = %x\n", (UINT32)data, v->aw_file_base);
1085            }
1086            else if(ACCESSING_BITS_32_47 || ACCESSING_BITS_32_63)
1087            {
1088               // MPR_FILE_OFFSETL
1089               v->aw_file_offset &= 0xffff0000;
1090               v->aw_file_offset |= (data>>32) & 0xffff;
1091               v->dma_offset = v->aw_file_base + (v->aw_file_offset*2);
1092               //printf("%x to FILE_OFFSETL, file_offset %x, dma_offset %x\n", (UINT32)(data>>32), v->aw_file_offset, v->dma_offset);
1093            }
1094         }
1095         break;
1096
1097         case 3:
1098         {
1099            if(ACCESSING_BITS_0_15)
1100            {
1101               // MPR_FILE_OFFSETH
1102               v->aw_file_offset &= 0xffff;
1103               v->aw_file_offset |= (data & 0xffff)<<16;
1104               v->dma_offset = v->aw_file_base + (v->aw_file_offset*2);
1105               //printf("%x to FILE_OFFSETH, file_offset %x, dma_offset %x\n", (UINT32)data, v->aw_file_offset, v->dma_offset);
1106            }
1107         }
1108         break;
1109
1110         default:
1111            logerror("AW: unhandled %" I64FMT "x to ROM board @ %x (mask %" I64FMT "x)\n", data, offset, mem_mask);
1112         break;
1113      }
1114
1115      return;
1116   }
1117
1118   switch(offset)
1119   {
1120      case 0:
1121      {
1122         if(ACCESSING_BITS_0_15)
1123         {
1124            // ROM_OFFSETH
1125            v->rom_offset &= 0xffff;
1126            v->rom_offset |= (data & 0x1fff)<<16;
1127            v->rom_offset_flags = data >> 12;
1128         }
1129         if(ACCESSING_BITS_32_47)
1130         {
1131            // ROM_OFFSETL
1132            v->rom_offset &= 0xffff0000;
1133            v->rom_offset |= ((data >> 32) & 0xffff);
1134         }
1135
1136            v->rom_offset &= ~1;    // always clear bit 0 as per Deunan
1137
1138            if (v->m4_decoder)
1139            {
1140                v->m4_decoder->init();
1141            }
1142
1143            #if NAOMIBD_PRINTF_PROTECTION
1144            printf("PIO: offset to %x (flags %x)\n", v->rom_offset, v->rom_offset_flags);
1145            #endif
1146      }
1147      break;
1148      case 1:
1149      {
1150         if(ACCESSING_BITS_32_47 || ACCESSING_BITS_32_63)
1151         {
1152            // DMA_OFFSETH
1153            v->dma_offset &= 0xffff;
1154            v->dma_offset |= (data >> 16) & 0x1fff0000;
1155            v->dma_offset_flags = (data>>(28+16));
1156         }
1157         if(ACCESSING_BITS_0_15)
1158         {
1159            // ROM_DATA - used to access registers in the protection chip
1160            switch (v->rom_offset)
1161            {
1162               case 0x1fff8:   // offset low
1163                  v->prot_offset &= 0xffff0000;
1164                  v->prot_offset |= (UINT32)data;
1165                  break;
1166
1167               case 0x1fffa:   // offset high
1168                  v->prot_offset &= 0xffff;
1169                  v->prot_offset |= (UINT32)data<<16;
1170                  break;
1171
1172               case 0x1fffc:   // decryption key
1173                  v->prot_key = data;
1174
1175                  #if NAOMIBD_PRINTF_PROTECTION
1176                  printf("Protection: set up read @ %x, key %x (PIO %x DMA %x) [%s]\n", v->prot_offset*2, v->prot_key, v->rom_offset, v->dma_offset, device->machine().describe_context());
1177                  #endif
1178
1179                  // if dc_gamekey isn't -1, we can live-decrypt this one
1180                  if (v->dc_gamekey != -1)
1181                  {
1182                     UINT8 *ROM = (UINT8 *)v->memory;
1183
1184                     v->dc_seqkey = v->prot_key;
1185
1186                     if (v->prot_offset != 0x2000000/2)
1187                     {
1188                        // M2: decrypt from ROM
1189                        v->prot.ptr = (UINT16 *)&ROM[v->prot_offset*2];
1190                        v->prot.seed = v->prot_offset&0xffff;
1191                         #if NAOMIBD_PRINTF_PROTECTION
1192                         printf("M2 decrypt: gamekey %x seqkey %x length %x\n", v->dc_gamekey, v->dc_seqkey, v->dc_m3_ptr);
1193                         #endif
1194                     }
1195                     else
1196                     {
1197                        // M3: decrypt from cart ram
1198                        v->prot.ptr = (UINT16 *)v->dc_cart_ram;
1199                        v->prot.seed = 0;
1200                         #if NAOMIBD_PRINTF_PROTECTION
1201                         printf("M3 decrypt: gamekey %x seqkey %x length %x\n", v->dc_gamekey, v->dc_seqkey, v->dc_m3_ptr);
1202                         #endif
1203                     }
1204
1205                     v->prot.count = 0;
1206                     naomibd_init_stream(v);
1207
1208                     v->dc_m3_ptr = 0;
1209                  }
1210                        #if NAOMIBD_PRINTF_PROTECTION
1211                        else
1212                        {
1213                            printf("naomibd: protection not handled for this game\n");
1214                        }
1215                        #endif
1216                  break;
1217
1218               case 0x2000000:
1219               case 0x2020000:
1220                  v->dc_cart_ram[v->dc_m3_ptr] = (data&0xff);
1221                  v->dc_cart_ram[v->dc_m3_ptr+1] = (data>>8)&0xff;
1222                  v->dc_m3_ptr += 2;
1223                  break;
1224
1225               default:
1226                  #if NAOMIBD_PRINTF_PROTECTION
1227                  printf("naomibd: unknown protection write %x @ %x\n", (UINT32)data, v->rom_offset);
1228                  #endif
1229                  break;
1230            }
1231         }
1232      }
1233      break;
1234      case 2:
1235      {
1236         if(ACCESSING_BITS_0_15)
1237         {
1238            // DMA_OFFSETL
1239            v->dma_offset &= 0xffff0000;
1240            v->dma_offset |= (data & 0xffff);
1241         }
1242         if(ACCESSING_BITS_32_63)
1243         {
1244            // NAOMI_DMA_COUNT
1245            v->dma_count = data >> 32;
1246         }
1247      }
1248      break;
1249      case 15:
1250      {
1251         if(ACCESSING_BITS_0_15)
1252         {
1253            x76f100_device *x76f100 = device->machine().device<x76f100_device>("naomibd_eeprom");
1254            // NAOMI_BOARDID_WRITE
1255            x76f100->cs_w((data >> 2) & 1);
1256            x76f100->rst_w((data >> 3) & 1);
1257            x76f100->scl_w((data >> 1) & 1);
1258            x76f100->sda_w((data >> 0) & 1);
1259         }
1260            #if NAOMIBD_PRINTF_PROTECTION
1261            else
1262            {
1263                printf("naomibd: case 15 unknown bits %llx mask %llx\n", data, mem_mask);
1264            }
1265            #endif
1266      }
1267      break;
1268      default:
1269         logerror("%s: ROM: write %" I64FMT "x to %x, mask %" I64FMT "x\n", device->machine().describe_context(), data, offset, mem_mask);
1270         break;
1271   }
169   if(rom_offset & 0x80000000)
170      rom_offset += 2;
1272171}
1273172
1274
1275
1276/*************************************
1277 *
1278 *  Load rom file from gdrom
1279 *
1280 *************************************/
1281
1282#define FILENAME_LENGTH 24
1283
1284static void load_rom_gdrom(running_machine& machine, naomibd_state *v)
173WRITE16_MEMBER(naomi_board::dma_offseth_w)
1285174{
1286//  UINT32 result;
1287   cdrom_file *gdromfile;
1288   UINT8 buffer[2048];
1289   UINT8 *ptr;
1290   UINT32 start,size,sectors,dir;
1291   int pos,len,a;
1292   char name[128];
1293   UINT64 key;
1294   UINT8* realpic; // todo, add to device
1295
1296   memset(name,'\0',128);
1297
1298   realpic = machine.region("pic")->base();
1299
1300   if (realpic)
1301   {
1302      //printf("Real PIC binary found\n");
1303      int i;
1304      for (i=0;i<7;i++)
1305      {
1306         name[i] = realpic[0x7c0+i*2];
1307      }
1308      for (i=0;i<7;i++)
1309      {
1310         name[i+7] = realpic[0x7e0+i*2];
1311      }
1312   }
1313   else
1314   {
1315      // use extracted pic data
1316      logerror("This PIC key hasn't been converted to a proper PIC binary yet!\n");
1317      memcpy(name, v->picdata+33, 7);
1318      memcpy(name+7, v->picdata+25, 7);
1319   }
1320
1321   gdromfile = cdrom_open(v->gdromchd);
1322   // primary volume descriptor
1323   // read frame 0xb06e (frame=sector+150)
1324   // dimm board firmware starts straight from this frame
1325   cdrom_read_data(gdromfile, 0xb06e - 150, buffer, CD_TRACK_MODE1);
1326   start=((buffer[0x8c+0] << 0) |
1327         (buffer[0x8c+1] << 8) |
1328         (buffer[0x8c+2] << 16) |
1329         (buffer[0x8c+3] << 24));
1330   // path table
1331   cdrom_read_data(gdromfile, start, buffer, CD_TRACK_MODE1);
1332   start=((buffer[0x2+0] << 0) |
1333         (buffer[0x2+1] << 8) |
1334         (buffer[0x2+2] << 16) |
1335         (buffer[0x2+3] << 24));
1336   dir = start;
1337   // directory
1338   cdrom_read_data(gdromfile, dir, buffer, CD_TRACK_MODE1);
1339   // find data of file
1340   start = 0;
1341   size = 0;
1342   logerror("Looking for file %s\n", name);
1343   for (pos = 0;pos < 2048;pos += buffer[pos])
1344   {
1345      a=0;
1346      if (!(buffer[pos+25] & 2))
1347      {
1348         len=buffer[pos+32];
1349         for (a=0;a < FILENAME_LENGTH;a++)
1350         {
1351            if ((buffer[pos+33+a] == ';') && (name[a] == 0))
1352            {
1353               a=FILENAME_LENGTH+1;
1354               break;
1355            }
1356            if (buffer[pos+33+a] != name[a])
1357               break;
1358            if (a == len)
1359            {
1360               if (name[a] == 0)
1361                  a = FILENAME_LENGTH+1;
1362               else
1363                  a = FILENAME_LENGTH;
1364            }
1365         }
1366      }
1367      if (a == FILENAME_LENGTH+1)
1368      {
1369         // start sector and size of file
1370         start=((buffer[pos+2] << 0) |
1371               (buffer[pos+3] << 8) |
1372               (buffer[pos+4] << 16) |
1373               (buffer[pos+5] << 24));
1374         size =((buffer[pos+10] << 0) |
1375               (buffer[pos+11] << 8) |
1376               (buffer[pos+12] << 16) |
1377               (buffer[pos+13] << 24));
1378
1379         logerror("start %08x size %08x\n", start,size);
1380         break;
1381      }
1382      if (buffer[pos] == 0)
1383         break;
1384   }
1385
1386   if ((start != 0) && (size == 0x100))
1387   {
1388      // read file
1389      cdrom_read_data(gdromfile, start, buffer, CD_TRACK_MODE1);
1390      // get "rom" file name
1391      memset(name,'\0', 128);
1392      memcpy(name, buffer+0xc0, FILENAME_LENGTH-1);
1393
1394
1395      // directory
1396      cdrom_read_data(gdromfile, dir, buffer, CD_TRACK_MODE1);
1397      // find data of "rom" file
1398      start = 0;
1399      size = 0;
1400
1401      logerror("Looking for file %s\n", name);
1402      for (pos = 0;pos < 2048;pos += buffer[pos])
1403      {
1404         a = 0;
1405         if (!(buffer[pos+25] & 2))
1406         {
1407            len = buffer[pos+32];
1408            for (a=0;a < FILENAME_LENGTH;a++)
1409            {
1410               if ((buffer[pos+33+a] == ';') && (name[a] == 0))
1411               {
1412                  a=FILENAME_LENGTH+1;
1413                  break;
1414               }
1415               if (buffer[pos+33+a] != name[a])
1416                  break;
1417               if (a == len)
1418               {
1419                  if (name[a] == 0)
1420                     a = (FILENAME_LENGTH+1);
1421                  else
1422                     a = FILENAME_LENGTH;
1423               }
1424            }
1425         }
1426         if (a == (FILENAME_LENGTH+1))
1427         {
1428            // start sector and size of file
1429            start=((buffer[pos+2] << 0) |
1430                  (buffer[pos+3] << 8) |
1431                  (buffer[pos+4] << 16) |
1432                  (buffer[pos+5] << 24));
1433            size =((buffer[pos+10] << 0) |
1434                  (buffer[pos+11] << 8) |
1435                  (buffer[pos+12] << 16) |
1436                  (buffer[pos+13] << 24));
1437
1438            logerror("start %08x size %08x\n", start,size);
1439            break;
1440         }
1441         if (buffer[pos] == 0)
1442            break;
1443      }
1444      if (start != 0)
1445      {
1446         // check for size
1447         assert(size <= v->size);
1448         // read encrypted data into memory
1449         ptr = v->memory;
1450         sectors = (size+2047)/2048;
1451         while (sectors > 0)
1452         {
1453            cdrom_read_data(gdromfile, start, ptr, CD_TRACK_MODE1);
1454            ptr += 2048;
1455            start++;
1456            sectors--;
1457         }
1458      }
1459   }
1460   // get des key
1461   realpic = machine.region("pic")->base();
1462
1463   if (realpic)
1464   {
1465      int i;
1466      key = 0;
1467      for (i=0;i<7;i++)
1468      {
1469         key |= (UINT64)realpic[0x780+i*2] << (56 - i*8);
1470      }
1471
1472      key |= (UINT64)realpic[0x7a0];
1473   }
1474   else
1475   {
1476      key =(((UINT64)v->picdata[0x31] << 56) |
1477           ((UINT64)v->picdata[0x32] << 48) |
1478           ((UINT64)v->picdata[0x33] << 40) |
1479           ((UINT64)v->picdata[0x34] << 32) |
1480           ((UINT64)v->picdata[0x35] << 24) |
1481           ((UINT64)v->picdata[0x36] << 16) |
1482           ((UINT64)v->picdata[0x37] << 8)  |
1483           ((UINT64)v->picdata[0x29] << 0));
1484   }
1485
1486   logerror("key is %08x%08x\n", (UINT32)((key & 0xffffffff00000000ULL)>>32), (UINT32)(key & 0x00000000ffffffffULL));
1487
1488   // decrypt loaded data
1489   naomi_game_decrypt(machine, key, v->memory, size);
1490   cdrom_close(gdromfile);
175   dma_offset = (dma_offset & 0x0000ffff) | (data << 16);
176   dma_ready = false;
1491177}
1492178
1493/***************************************************************************
1494    DECRYPTION EMULATION
1495
1496By convention, we label the three known cart protection methods this way (using Deunan Knute's wording):
1497M1: DMA read of protected ROM area
1498M2: special read of ROM area which supplies decryption key first
1499M3: normal read followed by write to cart's decryption buffer (up to 64kB), followed by M2 but from buffer area
1500
1501Notes below refer to M2 & M3.
1502
1503The encryption is done by a stream cipher operating in counter mode, which use a 16-bits internal block cipher.
1504
1505There are 2 "control bits" at the start of the decrypted stream which control the mode of operation: bit #1 set to 1 means
1506that the decrypted stream needs to be decompressed after being decrypted. More on this later.
1507
1508The next 16-bits are part of the header (they don't belong to the plaintext), but his meaning is unclear. It has been
1509conjectured that it could stablish when to "reset" the process and start processing a new stream (based on some tests
1510on WWFROYAL, in which the decryption's output doesn't seem to be valid for more than some dozens of words), but some
1511more testing would be needed for clarifying that.
1512
1513After those 18 heading bits, we find the proper plaintext. It must be noted that, due to the initial 2 special bits,
1514the 16-bits words of the plaintext are shifted 2 bits respect to the word-boundaries of the output stream of the
1515internal block-cipher. So, at a given step, the internal block cipher will output 16-bits, 14 of which will go to a
1516given plaintext word, and the remaining 2 to the next plaintext word.
1517
1518The underlying block cipher consists of two 4-round Feistel Networks (FN): the first one takes the counter (16 bits),
1519the game-key (>=26 bits) and the sequence-key (16 bits) and output a middle result (16 bits) which will act as another key
1520for the second one. The second FN will take the encrypted word (16 bits), the game-key, the sequence-key and the result
1521from the first FN and will output the decrypted word (16 bits).
1522
1523Each round of the Feistel Networks use four substitution sboxes, each having 6 inputs and 2 outputs. The input can be the
1524XOR of at most two "sources bits", being source bits the bits from the previous round and the bits from the different keys.
1525
1526The underlying block cipher has the same structure than the one used by the CPS-2 (Capcom Play System 2) and,
1527indeed, some of the used sboxes are exactly the same and appear in the same FN/round in both systems (this is not evident,
1528as you need to apply a bitswapping and some XORs to the input & output of the sboxes to get the same values due). However,
1529the key scheduling used by this implementation is much weaker than the CPS-2's one. Many s-boxes inputs are XORed with any
1530key bit.
1531
1532Due to the small key-length, no sophisticated attacks are needed to recover the keys; a brute-force attack knowing just
1533some (encrypted word-decrypted word) pairs suffice. However, due to the weak key scheduling, it should be noted that some
1534related keys can produce the same output bytes for some (short) input sequences.
1535
1536The only difference in the decryption process between M2 and M3 is the initialization of the counter. In M3, the counter is
1537always set to 0 at the beginning of the decryption while, in M2, the bits #1-#16 of the ciphertext's address are used
1538to initialize the counter.
1539
1540Due to the nature of the cipher, there are some degrees of freedom when choosing the s-boxes and keys values; by example,
1541you could apply a fixed bitswapping and XOR to the keys and the decryption would remain the same as long as you change
1542accordingly the s-boxes' definitions. So the order of the bits in the keys is arbitrary, and the s-boxes values have been
1543chosen so as to make the key for CAPSNK equal to 0.
1544
1545It can be observed that a couple of sboxes have incomplete tables (a 255 value indicate an unknown value). The recovered keys
1546as of december/2010 show small randomness and big correlations, making possible that some unseen bits could make the
1547decryption need those incomplete parts.
1548
1549****************************************************************************************/
1550
1551struct sbox
179WRITE16_MEMBER(naomi_board::dma_offsetl_w)
1552180{
1553    UINT8 table[64];
1554    int inputs[6];      // positions of the inputs bits, -1 means no input except from key
1555    int outputs[2];     // positions of the output bits
1556};
1557
1558
1559static const struct sbox fn1_sboxes[4][4] =
1560{
1561    {   // 1st round
1562        {
1563            {
1564                0,3,2,2,1,3,1,2,3,2,1,2,1,2,3,1,3,2,2,0,2,1,3,0,0,3,2,3,2,1,2,0,
1565                2,3,1,1,2,2,1,1,1,0,2,3,3,0,2,1,1,1,1,1,3,0,3,2,1,0,1,2,0,3,1,3,
1566            },
1567            {3,4,5,7,-1,-1},
1568            {0,4}
1569        },
1570
1571        {
1572            {
1573                2,2,2,0,3,3,0,1,2,2,3,2,3,0,2,2,1,1,0,3,3,2,0,2,0,1,0,1,2,3,1,1,
1574                0,1,3,3,1,3,3,1,2,3,2,0,0,0,2,2,0,3,1,3,0,3,2,2,0,3,0,3,1,1,0,2,
1575            },
1576            {0,1,2,5,6,7},
1577            {1,6}
1578        },
1579
1580        {
1581            {
1582                0,1,3,0,3,1,1,1,1,2,3,1,3,0,2,3,3,2,0,2,1,1,2,1,1,3,1,0,0,2,0,1,
1583                1,3,1,0,0,3,2,3,2,0,3,3,0,0,0,0,1,2,3,3,2,0,3,2,1,0,0,0,2,2,3,3,
1584            },
1585            {0,2,5,6,7,-1},
1586            {2,3}
1587        },
1588
1589        {
1590            {
1591                3,2,1,2,1,2,3,2,0,3,2,2,3,1,3,3,0,2,3,0,3,3,2,1,1,1,2,0,2,2,0,1,
1592                1,3,3,0,0,3,0,3,0,2,1,3,2,1,0,0,0,1,1,2,0,1,0,0,0,1,3,3,2,0,3,3,
1593            },
1594            {1,2,3,4,6,7},
1595            {5,7}
1596        },
1597    },
1598    {   // 2nd round
1599        {
1600            {
1601                3,3,1,2,0,0,2,2,2,1,2,1,3,1,1,3,3,0,0,3,0,3,3,2,1,1,3,2,3,2,1,3,
1602                2,3,0,1,3,2,0,1,2,1,3,1,2,2,3,3,3,1,2,2,0,3,1,2,2,1,3,0,3,0,1,3,
1603            },
1604            {0,1,3,4,5,7},
1605            {0,4}
1606        },
1607
1608        {
1609            {
1610                2,0,1,0,0,3,2,0,3,3,1,2,1,3,0,2,0,2,0,0,0,2,3,1,3,1,1,2,3,0,3,0,
1611                3,0,2,0,0,2,2,1,0,2,3,3,1,3,1,0,1,3,3,0,0,1,3,1,0,2,0,3,2,1,0,1,
1612            },
1613            {0,1,3,4,6,-1},
1614            {1,5}
1615        },
1616
1617        {
1618            {
1619                2,2,2,3,1,1,0,1,0,1,2,2,3,3,0,2,0,3,2,3,3,0,2,1,0,3,1,0,0,2,3,2,
1620                3,2,0,3,2,0,1,0,3,3,1,1,2,2,2,0,2,1,3,1,1,1,1,2,2,2,3,0,1,3,0,0,
1621            },
1622            {1,2,5,6,7,-1},
1623            {2,7}
1624        },
1625
1626        {
1627            {
1628                0,1,3,3,3,1,3,3,1,0,2,0,2,0,0,3,1,2,1,3,1,2,3,2,2,0,1,3,0,3,3,3,
1629                0,0,0,2,1,1,2,3,2,2,3,1,1,2,0,2,0,2,1,3,1,1,3,3,1,1,3,0,2,3,0,0,
1630            },
1631            {2,3,4,5,6,7},
1632            {3,6}
1633        },
1634    },
1635    {   // 3rd round
1636        {
1637            {
1638                0,0,1,0,1,0,0,3,2,0,0,3,0,1,0,2,0,3,0,0,2,0,3,2,2,1,3,2,2,1,1,2,
1639                0,0,0,3,0,1,1,0,0,2,1,0,3,1,2,2,2,0,3,1,3,0,1,2,2,1,1,1,0,2,3,1,
1640            },
1641            {1,2,3,4,5,7},
1642            {0,5}
1643        },
1644
1645        {
1646            {
1647                1,2,1,0,3,1,1,2,0,0,2,3,2,3,1,3,2,0,3,2,2,3,1,1,1,1,0,3,2,0,0,1,
1648                1,0,0,1,3,1,2,3,0,0,2,3,3,0,1,0,0,2,3,0,1,2,0,1,3,3,3,1,2,0,2,1,
1649            },
1650            {0,2,4,5,6,7},
1651            {1,6}
1652        },
1653
1654        {
1655            {
1656                0,3,0,2,1,2,0,0,1,1,0,0,3,1,1,0,0,3,0,0,2,3,3,2,3,1,2,0,0,2,3,0,
1657                // unused?
1658                255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
1659            },
1660            {0,2,4,6,7,-1},
1661            {2,3}
1662        },
1663
1664        {
1665            {
1666                0,0,1,0,0,1,0,2,3,3,0,3,3,2,3,0,2,2,2,0,3,2,0,3,1,0,0,3,3,0,0,0,
1667                2,2,1,0,2,0,3,2,0,0,3,1,3,3,0,0,2,1,1,2,1,0,1,1,0,3,1,2,0,2,0,3,
1668            },
1669            {0,1,2,3,6,-1},
1670            {4,7}
1671        },
1672    },
1673    {   // 4th round
1674        {
1675            {
1676                0,3,3,3,3,3,2,0,0,1,2,0,2,2,2,2,1,1,0,2,2,1,3,2,3,2,0,1,2,3,2,1,
1677                3,2,2,3,1,0,1,0,0,2,0,1,2,1,2,3,1,2,1,1,2,2,1,0,1,3,2,3,2,0,3,1,
1678            },
1679            {0,1,3,4,5,6},
1680            {0,5}
1681        },
1682
1683        {
1684            {
1685                0,3,0,0,2,0,3,1,1,1,2,2,2,1,3,1,2,2,1,3,2,2,3,3,0,3,1,0,3,2,0,1,
1686                3,0,2,0,1,0,2,1,3,3,1,2,2,0,2,3,3,2,3,0,1,1,3,3,0,2,1,3,0,2,2,3,
1687            },
1688            {0,1,2,3,5,7},
1689            {1,7}
1690        },
1691
1692        {
1693            {
1694                0,1,2,3,3,3,3,1,2,0,2,3,2,1,0,1,2,2,1,2,0,3,2,0,1,1,0,1,3,1,3,1,
1695                3,1,0,0,1,0,0,0,0,1,2,2,1,1,3,3,1,2,3,3,3,2,3,0,2,2,1,3,3,0,2,0,
1696            },
1697            {2,3,4,5,6,7},
1698            {2,3}
1699        },
1700
1701        {
1702            {
1703                0,2,1,1,3,2,0,3,1,0,1,0,3,2,1,1,2,2,0,3,1,0,1,2,2,2,3,3,0,0,0,0,
1704                1,2,1,0,2,1,2,2,2,3,2,3,0,1,3,0,0,1,3,0,0,1,1,0,1,0,0,0,0,2,0,1,
1705            },
1706            {0,1,2,4,6,7},
1707            {4,6}
1708        },
1709    },
1710};
1711
1712
1713static const struct sbox fn2_sboxes[4][4] =
1714{
1715    {   // 1st round
1716        {
1717            {
1718                3,3,0,1,0,1,0,0,0,3,0,0,1,3,1,2,0,3,3,3,2,1,0,1,1,1,2,2,2,3,2,2,
1719                2,1,3,3,1,3,1,1,0,0,1,2,0,2,2,1,1,2,3,1,2,1,3,1,2,2,0,1,3,0,2,2,
1720            },
1721            {1,3,4,5,6,7},
1722            {0,7}
1723        },
1724
1725        {
1726            {
1727                0,2,3,2,1,1,0,0,2,1,0,3,3,0,0,0,3,2,0,2,1,1,2,1,0,0,3,1,2,2,3,1,
1728                3,1,3,0,0,0,1,3,1,0,0,3,2,2,3,1,1,3,0,0,2,1,3,3,1,3,1,2,3,1,2,1,
1729            },
1730            {0,3,5,6,-1,-1},
1731            {1,2}
1732        },
1733
1734        {
1735            {
1736                0,2,2,1,0,1,2,1,2,0,1,2,3,3,0,1,3,1,1,2,1,2,1,3,3,2,3,3,2,1,0,1,
1737                0,1,0,2,0,1,1,3,2,0,3,2,1,1,1,3,2,3,0,2,3,0,2,2,1,3,0,1,1,2,2,2,
1738            },
1739            {0,2,3,4,7,-1},
1740            {3,4}
1741        },
1742
1743        {
1744            {
1745                2,3,1,3,2,0,1,2,0,0,3,3,3,3,3,1,2,0,2,1,2,3,0,2,0,1,0,3,0,2,1,0,
1746                2,3,0,1,3,0,3,2,3,1,2,0,3,1,1,2,0,3,0,0,2,0,2,1,2,2,3,2,1,2,3,1,
1747            },
1748            {1,2,5,6,-1,-1},
1749            {5,6}
1750        },
1751    },
1752    {   // 2nd round
1753        {
1754            {
1755                2,3,1,3,1,0,3,3,3,2,3,3,2,0,0,3,2,3,0,3,1,1,2,3,1,1,2,2,0,1,0,0,
1756                2,1,0,1,2,0,1,2,0,3,1,1,2,3,1,2,0,2,0,1,3,0,1,0,2,2,3,0,3,2,3,0,
1757            },
1758            {0,1,4,5,6,7},
1759            {0,7}
1760        },
1761
1762        {
1763            {
1764                0,2,2,0,2,2,0,3,2,3,2,1,3,2,3,3,1,1,0,0,3,0,2,1,1,3,3,2,3,2,0,1,
1765                1,2,3,0,1,0,3,0,3,1,0,2,1,2,0,3,2,3,1,2,2,0,3,2,3,0,0,1,2,3,3,3,
1766            },
1767            {0,2,3,6,7,-1},
1768            {1,5}
1769        },
1770
1771        {
1772            {
1773                1,2,3,2,0,3,2,3,0,1,1,0,0,2,2,3,2,0,0,3,0,2,3,3,2,2,1,0,2,1,0,3,
1774                1,0,2,0,1,1,0,1,0,0,1,0,3,0,3,3,2,2,0,2,1,1,1,0,3,0,1,3,2,3,2,1,
1775            },
1776            {2,3,4,6,7,-1},
1777            {2,3}
1778        },
1779
1780        {
1781            {
1782                2,3,1,3,1,1,2,3,3,1,1,0,1,0,2,3,2,1,0,0,2,2,0,1,0,2,2,2,0,2,1,0,
1783                3,1,2,3,1,3,0,2,1,0,1,0,0,1,2,2,3,2,3,1,3,2,1,1,2,0,2,1,3,3,1,0,
1784            },
1785            {1,2,3,4,5,6},
1786            {4,6}
1787        },
1788    },
1789    {   // 3rd round
1790        {
1791            {
1792                0,3,0,1,0,2,3,3,1,0,1,3,2,2,1,1,3,3,3,0,2,0,2,0,0,0,2,3,1,1,0,0,
1793                3,3,0,3,3,0,0,2,1,1,1,0,2,2,2,0,3,0,3,1,2,2,0,3,0,0,3,2,0,3,2,1,
1794            },
1795            {1,4,5,6,7,-1},
1796            {0,5}
1797        },
1798
1799        {
1800            {
1801                0,3,0,1,3,0,3,1,3,2,2,2,3,0,3,2,2,1,2,2,0,3,2,2,0,0,2,1,1,3,2,3,
1802                2,3,3,1,2,0,1,2,2,1,0,0,0,0,2,3,1,2,0,3,1,3,1,2,3,2,1,0,3,0,0,2,
1803            },
1804            {0,2,3,4,6,7},
1805            {1,7}
1806        },
1807
1808        {
1809            {
1810                2,2,3,2,0,3,2,3,1,1,2,0,2,3,1,3,0,0,0,3,2,0,1,0,1,3,2,3,3,3,1,0,
1811                // unused?
1812                255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
1813            },
1814            {1,2,4,7,-1,-1},
1815            {2,4}
1816        },
1817
1818        {
1819            {
1820                0,2,3,1,3,1,1,0,0,1,3,0,2,1,3,3,2,0,2,1,1,2,3,3,0,0,0,2,0,2,3,0,
1821                3,3,3,3,2,3,3,2,3,0,1,0,2,3,3,2,0,1,3,1,0,1,2,3,3,0,2,0,3,0,3,3,
1822            },
1823            {0,1,2,3,5,7},
1824            {3,6}
1825        },
1826    },
1827    {   // 4th round
1828        {
1829            {
1830                0,1,1,0,0,1,0,2,3,3,0,1,2,3,0,2,1,0,3,3,2,0,3,0,0,2,1,0,1,0,1,3,
1831                0,3,3,1,2,0,3,0,1,3,2,0,3,3,1,3,0,2,3,3,2,1,1,2,2,1,2,1,2,0,1,1,
1832            },
1833            {0,1,2,4,7,-1},
1834            {0,5}
1835        },
1836
1837        {
1838            {
1839                2,0,0,2,3,0,2,3,3,1,1,1,2,1,1,0,0,2,1,0,0,3,1,0,0,3,3,0,1,0,1,2,
1840                0,2,0,2,0,1,2,3,2,1,1,0,3,3,3,3,3,3,1,0,3,0,0,2,0,3,2,0,2,2,0,1,
1841            },
1842            {0,1,3,5,6,-1},
1843            {1,3}
1844        },
1845
1846        {
1847            {
1848                0,1,1,2,1,3,1,1,0,0,3,1,1,1,2,0,3,2,0,1,1,2,3,3,3,0,3,0,0,2,0,3,
1849                3,2,0,0,3,2,3,1,2,3,0,3,2,0,1,2,2,2,0,2,0,1,2,2,3,1,2,2,1,1,1,1,
1850            },
1851            {0,2,3,4,5,7},
1852            {2,7}
1853        },
1854
1855        {
1856            {
1857                0,1,2,0,3,3,0,3,2,1,3,3,0,3,1,1,3,2,3,2,3,0,0,0,3,0,2,2,3,2,2,3,
1858                2,2,3,1,2,3,1,2,0,3,0,2,3,1,0,0,3,2,1,2,1,2,1,3,1,0,2,3,3,1,3,2,
1859            },
1860            {2,3,4,5,6,7},
1861            {4,6}
1862        },
1863    },
1864};
1865
1866static const int fn1_game_key_scheduling[38][2] =
1867{
1868    {1,29},  {1,71},  {2,4},   {2,54},  {3,8},   {4,56},  {4,73},  {5,11},
1869    {6,51},  {7,92},  {8,89},  {9,9},   {9,10},  {9,39},  {9,41},  {9,58},
1870    {9,59},  {9,86},  {10,90}, {11,6},  {12,64}, {13,49}, {14,44}, {15,40},
1871    {16,69}, {17,15}, {18,23}, {18,43}, {19,82}, {20,81}, {21,32}, {21,61},
1872    {22,5},  {23,66}, {24,13}, {24,45}, {25,12}, {25,35}
1873};
1874
1875static const int fn2_game_key_scheduling[34][2] =
1876{
1877    {0,0},   {1,3},   {2,11},  {3,20},  {4,22},  {5,23},  {6,29},  {7,38},
1878    {8,39},  {9,47},  {9,55},  {9,86},  {9,87},  {9,90},  {10,50}, {10,53},
1879    {11,57}, {12,59}, {13,61}, {13,64}, {14,63}, {15,67}, {16,72}, {17,83},
1880    {18,88}, {19,94}, {20,35}, {21,17}, {21,92}, {22,6},  {22,11}, {23,85},
1881    {24,16}, {25,25}
1882};
1883
1884static const int fn1_sequence_key_scheduling[20][2] =
1885{
1886    {0,52},  {1,34},  {2,17},  {3,36}, {4,84},  {4,88},  {5,57},  {6,48},
1887    {6,68},  {7,76},  {8,83},  {9,30}, {10,22}, {10,41}, {11,38}, {12,55},
1888    {13,74}, {14,19}, {14,80}, {15,26}
1889};
1890
1891static const int fn2_sequence_key_scheduling[16] = {77,34,8,42,36,27,69,66,13,9,79,31,49,7,24,64};
1892
1893static const int fn2_middle_result_scheduling[16] = {1,10,44,68,74,78,81,95,2,4,30,40,41,51,53,58};
1894
1895static int feistel_function(int input, const struct sbox* sboxes, UINT32 subkeys)
1896{
1897    int k,m;
1898    int aux;
1899    int result=0;
1900
1901    for (m=0; m<4; ++m)  // 4 sboxes
1902    {
1903        for (k=0, aux=0; k<6; ++k)
1904        {
1905            if (sboxes[m].inputs[k]!=-1)
1906            {
1907                aux |= (BIT(input, sboxes[m].inputs[k])<<k);
1908            }
1909        }
1910
1911        aux = sboxes[m].table[(aux^subkeys)&0x3f];
1912
1913        for (k=0; k<2; ++k)
1914        {
1915            result |= (BIT(aux,k)<<sboxes[m].outputs[k]);
1916        }
1917
1918        subkeys >>=6;
1919    }
1920
1921    return result;
181   dma_offset = (dma_offset & 0xffff0000) | data;
182   dma_ready = false;
1922183}
1923184
1924/**************************
1925This implementation is an "educational" version. It must be noted that it can be speed-optimized in a number of ways.
1926The most evident one is to factor out the parts of the key-scheduling that must only be done once (like the game-key &
1927sequence-key parts) as noted in the comments inlined in the function. More sophisticated speed-ups can be gained by
1928noticing that the weak key-scheduling would allow to create some pregenerated look-up tables for doing most of the work
1929of the function. Even so, it would still be pretty slow, so caching techniques could be a wiser option here.
1930**************************/
1931
1932static UINT16 block_decrypt(UINT32 game_key, UINT16 sequence_key, UINT16 counter, UINT16 data)
185WRITE16_MEMBER(naomi_board::dma_count_w)
1933186{
1934    int j;
1935    int aux,aux2;
1936    int A,B;
1937    int middle_result;
1938    UINT32 fn1_subkeys[4];
1939    UINT32 fn2_subkeys[4];
1940
1941    /* Game-key scheduling; this could be done just once per game at initialization time */
1942    memset(fn1_subkeys,0,sizeof(UINT32)*4);
1943    memset(fn2_subkeys,0,sizeof(UINT32)*4);
1944
1945    for (j=0; j<38; ++j)
1946    {
1947        if (BIT(game_key, fn1_game_key_scheduling[j][0])!=0)
1948        {
1949            aux = fn1_game_key_scheduling[j][1]%24;
1950            aux2 = fn1_game_key_scheduling[j][1]/24;
1951            fn1_subkeys[aux2] ^= (1<<aux);
1952        }
1953    }
1954
1955    for (j=0; j<34; ++j)
1956    {
1957        if (BIT(game_key, fn2_game_key_scheduling[j][0])!=0)
1958        {
1959            aux = fn2_game_key_scheduling[j][1]%24;
1960            aux2 = fn2_game_key_scheduling[j][1]/24;
1961            fn2_subkeys[aux2] ^= (1<<aux);
1962        }
1963    }
1964    /********************************************************/
1965
1966    /* Sequence-key scheduling; this could be done just once per decryption run */
1967    for (j=0; j<20; ++j)
1968    {
1969        if (BIT(sequence_key,fn1_sequence_key_scheduling[j][0])!=0)
1970        {
1971            aux = fn1_sequence_key_scheduling[j][1]%24;
1972            aux2 = fn1_sequence_key_scheduling[j][1]/24;
1973            fn1_subkeys[aux2] ^= (1<<aux);
1974        }
1975    }
1976
1977    for (j=0; j<16; ++j)
1978    {
1979        if (BIT(sequence_key,j)!=0)
1980        {
1981            aux = fn2_sequence_key_scheduling[j]%24;
1982            aux2 = fn2_sequence_key_scheduling[j]/24;
1983            fn2_subkeys[aux2] ^= (1<<aux);
1984        }
1985    }
1986
1987    // subkeys bits 10 & 41
1988    fn2_subkeys[0] ^= (BIT(sequence_key,2)<<10);
1989    fn2_subkeys[1] ^= (BIT(sequence_key,4)<<17);
1990    /**************************************************************/
1991
1992    // First Feistel Network
1993
1994    aux = BITSWAP16(counter,5,12,14,13,9,3,6,4,    8,1,15,11,0,7,10,2);
1995
1996    // 1st round
1997    B = aux >> 8;
1998    A = (aux & 0xff) ^ feistel_function(B,fn1_sboxes[0],fn1_subkeys[0]);
1999
2000    // 2nd round
2001    B = B ^ feistel_function(A,fn1_sboxes[1],fn1_subkeys[1]);
2002
2003    // 3rd round
2004    A = A ^ feistel_function(B,fn1_sboxes[2],fn1_subkeys[2]);
2005
2006    // 4th round
2007    B = B ^ feistel_function(A,fn1_sboxes[3],fn1_subkeys[3]);
2008
2009    middle_result = (B<<8)|A;
2010
2011
2012    /* Middle-result-key sheduling */
2013    for (j=0; j<16; ++j)
2014    {
2015        if (BIT(middle_result,j)!=0)
2016        {
2017            aux = fn2_middle_result_scheduling[j]%24;
2018            aux2 = fn2_middle_result_scheduling[j]/24;
2019            fn2_subkeys[aux2] ^= (1<<aux);
2020        }
2021    }
2022    /*********************/
2023
2024    // Second Feistel Network
2025
2026    aux = BITSWAP16(data,14,3,8,12,13,7,15,4,    6,2,9,5,11,0,1,10);
2027
2028    // 1st round
2029    B = aux >> 8;
2030    A = (aux & 0xff) ^ feistel_function(B,fn2_sboxes[0],fn2_subkeys[0]);
2031
2032    // 2nd round
2033    B = B ^ feistel_function(A,fn2_sboxes[1],fn2_subkeys[1]);
2034
2035    // 3rd round
2036    A = A ^ feistel_function(B,fn2_sboxes[2],fn2_subkeys[2]);
2037
2038    // 4th round
2039    B = B ^ feistel_function(A,fn2_sboxes[3],fn2_subkeys[3]);
2040
2041    aux = (B<<8)|A;
2042
2043    aux = BITSWAP16(aux,15,7,6,14,13,12,5,4,    3,2,11,10,9,1,0,8);
2044
2045    return aux;
187   dma_count = data;
2046188}
2047189
2048/***************************************************************************
2049    DEVICE INTERFACE
2050***************************************************************************/
2051
2052/*-------------------------------------------------
2053    device start callback
2054-------------------------------------------------*/
2055
2056static DEVICE_START( naomibd )
190WRITE16_MEMBER(naomi_board::boardid_w)
2057191{
2058   const naomibd_config *config = (const naomibd_config *)downcast<const legacy_device_base *>(device)->inline_config();
2059   naomibd_state *v = get_safe_token(device);
2060   int i;
2061
2062   /* validate some basic stuff */
2063   assert(device->static_config() == NULL);
2064   assert(downcast<const legacy_device_base *>(device)->inline_config() != NULL);
2065
2066   /* validate configuration */
2067   assert(config->type >= ROM_BOARD && config->type < MAX_NAOMIBD_TYPES);
2068
2069   /* store a pointer back to the device */
2070   v->device = device;
2071
2072    v->dc_dmakey = 0;
2073    v->m4_decoder = NULL;
2074
2075   for (i=0; i<ARRAY_LENGTH(naomibd_translate_tbl); i++)
2076   {
2077      if (!strcmp(device->machine().system().name, naomibd_translate_tbl[i].name))
2078      {
2079            v->dc_gamekey = naomibd_translate_tbl[i].m2m3_key;
2080            v->dc_dmakey = naomibd_translate_tbl[i].m1_key;
2081            v->dc_m4key = naomibd_translate_tbl[i].m4_key;
2082
2083            if (v->dc_m4key != 0)
2084            {
2085                v->m4_decoder = new NaomiM4Decoder(v->dc_m4key);
2086            }
2087            break;
2088      }
2089   }
2090
2091   /* configure type-specific values */
2092   switch (config->type)
2093   {
2094      case ROM_BOARD:
2095         v->memory = (UINT8 *)device->machine().region(config->regiontag)->base();
2096         break;
2097
2098      case AW_ROM_BOARD:
2099         v->memory = (UINT8 *)device->machine().region(config->regiontag)->base();
2100         break;
2101
2102      case DIMM_BOARD:
2103         assert((config->size >= 256) && !(config->size & 255)); // size multiple of 256 megabytes ?
2104         v->size = config->size << 20;
2105         v->memory = (UINT8 *)auto_alloc_array_clear(device->machine(), UINT8, v->size); // 0x40000000 is needed for some Chihiro sets, Naomi should be less
2106         v->gdromchd = get_disk_handle(device->machine(), config->gdromregiontag);
2107         v->picdata = (UINT8 *)device->machine().region(config->picregiontag)->base();
2108         if (v->memory != NULL && v->gdromchd != NULL && v->picdata != NULL)
2109            load_rom_gdrom(device->machine(), v);
2110         break;
2111
2112      default:
2113         fatalerror("Unsupported plug-in board in naomibd_start!");
2114         break;
2115   }
2116
2117   /* set the type */
2118   v->index = device->machine().devicelist().indexof(device->type(), device->tag());
2119   v->type = config->type;
2120
2121   /* initialize some registers */
2122   v->rom_offset = 0;
2123   v->rom_offset_flags = 0;
2124   v->dma_count = 0;
2125   v->dma_offset = 0;
2126   v->dma_offset_flags = 0;
2127   v->prot_offset = 0;
2128
2129   /* do a soft reset to reset everything else */
2130   soft_reset(v);
2131
2132   /* register for save states */
2133   init_save_state(device);
192   eeprom->cs_w((data >> 2) & 1);
193   eeprom->rst_w((data >> 3) & 1);
194   eeprom->scl_w((data >> 1) & 1);
195   eeprom->sda_w((data >> 0) & 1);
2134196}
2135197
2136
2137/*-------------------------------------------------
2138    device exit callback
2139-------------------------------------------------*/
2140
2141static DEVICE_STOP( naomibd )
198READ16_MEMBER(naomi_board::boardid_r)
2142199{
2143//    naomibd_state *v = get_safe_token(device);
200   return eeprom->sda_r() << 15;
2144201}
2145202
2146
2147/*-------------------------------------------------
2148    device reset callback
2149-------------------------------------------------*/
2150
2151static DEVICE_RESET( naomibd )
203READ16_MEMBER(naomi_board::default_r)
2152204{
2153   naomibd_state *v = get_safe_token(device);
2154   soft_reset(v);
205   logerror("NAOMIBD: unmapped read at %02x\n", offset);
206   return 0xffff;
2155207}
2156208
2157
2158/*-------------------------------------------------
2159    device get info callback
2160-------------------------------------------------*/
2161
2162DEVICE_GET_INFO( naomibd )
209void naomi_board::board_write(offs_t offset, UINT16 data)
2163210{
2164   const naomibd_config *config = (device != NULL) ? (const naomibd_config *)downcast<const legacy_device_base *>(device)->inline_config() : NULL;
2165   switch (state)
2166   {
2167      /* --- the following bits of info are returned as 64-bit signed integers --- */
2168      case DEVINFO_INT_TOKEN_BYTES:         info->i = sizeof(naomibd_state);            break;
2169      case DEVINFO_INT_INLINE_CONFIG_BYTES:   info->i = sizeof(naomibd_config);            break;
2170
2171      /* --- the following bits of info are returned as pointers --- */
2172      case DEVINFO_PTR_ROM_REGION:         info->romregion = NULL;                     break;
2173      case DEVINFO_PTR_MACHINE_CONFIG:      info->machine_config = NULL;               break;
2174
2175      /* --- the following bits of info are returned as pointers to data or functions --- */
2176      case DEVINFO_FCT_START:               info->start = DEVICE_START_NAME(naomibd);      break;
2177      case DEVINFO_FCT_STOP:               info->stop = DEVICE_STOP_NAME(naomibd);         break;
2178      case DEVINFO_FCT_RESET:               info->reset = DEVICE_RESET_NAME(naomibd);      break;
2179
2180      /* --- the following bits of info are returned as NULL-terminated strings --- */
2181      case DEVINFO_STR_NAME:
2182         switch (config->type)
2183         {
2184            default:
2185            case ROM_BOARD:               strcpy(info->s, "Naomi Rom Board");            break;
2186            case AW_ROM_BOARD:            strcpy(info->s, "Atomiswave Rom Board");            break;
2187            case DIMM_BOARD:            strcpy(info->s, "Naomi Dimm Board");         break;
2188         }
2189         break;
2190      case DEVINFO_STR_FAMILY:            strcpy(info->s, "Naomi/Atomiswave plug-in board");         break;
2191      case DEVINFO_STR_VERSION:            strcpy(info->s, "1.1");                     break;
2192      case DEVINFO_STR_SOURCE_FILE:         strcpy(info->s, __FILE__);                  break;
2193      case DEVINFO_STR_CREDITS:            strcpy(info->s, "Copyright Nicola Salmoria and the MAME Team"); break;
2194   }
211   logerror("NAOMIBD: unhandled board write %08x, %04x\n", offset, data);
2195212}
2196213
2197
2198DEFINE_LEGACY_DEVICE(NAOMI_BOARD, naomibd);
src/mame/machine/naomim4.h
r0r12705
1#ifndef _NAOMIM4_H_
2#define _NAOMIM4_H_
3
4#include "naomibd.h"
5
6#define MCFG_NAOMI_M4_BOARD_ADD(_tag, _key_tag, _eeprom_tag, _maincpu_tag, _irq_cb) \
7   MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M4_BOARD, _eeprom_tag, _maincpu_tag, _irq_cb) \
8   naomi_m4_board::static_set_tags(*device, _key_tag);
9
10class naomi_m4_board : public naomi_board
11{
12public:
13   naomi_m4_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
14
15   static void static_set_tags(device_t &device, const char *_key_tag);
16
17protected:
18   virtual void device_start();
19   virtual void device_reset();
20
21   virtual void board_setup_address(UINT32 address, bool is_dma);
22   virtual void board_get_buffer(UINT8 *&base, UINT32 &limit);
23   virtual void board_advance(UINT32 size);
24
25private:
26   enum { BUFFER_SIZE = 32768 };
27
28   static const UINT8 k_sboxes[4][16];
29
30   const char *key_tag;
31   UINT16 key, iv;
32   UINT16 *one_round;
33
34   UINT8 *buffer;
35   UINT32 rom_cur_address, buffer_actual_size;
36   UINT16 cur_iv;
37   UINT8 counter;
38   bool encryption;
39
40   void enc_init();
41   void enc_reset();
42   void enc_fill();
43};
44
45extern const device_type NAOMI_M4_BOARD;
46
47#endif
src/mame/machine/naomibd.h
r0r12705
1#ifndef _NAOMIBD_H_
2#define _NAOMIBD_H_
3
4#include "naomig1.h"
5
6#define MCFG_NAOMI_BOARD_ADD(_tag, type, _eeprom_tag, _maincpu_tag, _irq_cb)   \
7   MCFG_NAOMI_G1_ADD(_tag, type, _maincpu_tag, _irq_cb)                  \
8   naomi_board::static_set_eeprom_tag(*device, _eeprom_tag);
9
10class naomi_board : public naomi_g1_device
11{
12public:
13   naomi_board(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
14
15   static void static_set_eeprom_tag(device_t &device, const char *_eeprom_tag);
16
17   // Can be patched in the underlying class
18   virtual DECLARE_ADDRESS_MAP(submap, 16);
19
20   DECLARE_WRITE16_MEMBER(rom_offseth_w);          // 5f7000
21   DECLARE_WRITE16_MEMBER(rom_offsetl_w);          // 5f7004
22   DECLARE_READ16_MEMBER( rom_data_r);             // 5f7008
23   DECLARE_WRITE16_MEMBER(rom_data_w);             // 5f7008
24   DECLARE_WRITE16_MEMBER(dma_offseth_w);          // 5f700c
25   DECLARE_WRITE16_MEMBER(dma_offsetl_w);          // 5f7010
26   DECLARE_WRITE16_MEMBER(dma_count_w);            // 5f7014
27
28   DECLARE_WRITE16_MEMBER(boardid_w);              // 5f7078
29   DECLARE_READ16_MEMBER( boardid_r);              // 5f707c
30
31   DECLARE_READ16_MEMBER( default_r);
32
33protected:
34   virtual void device_start();
35   virtual void device_reset();
36
37   virtual void dma_get_position(UINT8 *&base, UINT32 &limit, bool to_mainram);
38   virtual void dma_advance(UINT32 size);
39
40   // To be defined in the underlying class
41   virtual void board_setup_address(UINT32 address, bool is_dma) = 0;
42   virtual void board_get_buffer(UINT8 *&base, UINT32 &limit) = 0;
43   virtual void board_advance(UINT32 size) = 0;
44
45   // To be optionally defined in the underlying class
46   virtual void board_write(offs_t offset, UINT16 data);
47
48private:
49   UINT32 rom_offset, dma_offset, dma_cur_offset;
50   UINT16 dma_count;
51   bool pio_ready, dma_ready;
52
53   const char *eeprom_tag;
54   class x76f100_device *eeprom;
55};
56
57#endif
src/mame/machine/naomirom.c
r0r12705
1#define ADDRESS_MAP_MODERN
2
3#include "emu.h"
4#include "naomirom.h"
5
6const device_type NAOMI_ROM_BOARD = &device_creator<naomi_rom_board>;
7
8naomi_rom_board::naomi_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
9   : naomi_board(mconfig, NAOMI_ROM_BOARD, "NAOMI-ROM-BOARD", tag, owner, clock)
10{
11}
12
13void naomi_rom_board::device_start()
14{
15   naomi_board::device_start();
16   save_item(NAME(rom_cur_address));
17}
18
19void naomi_rom_board::device_reset()
20{
21   naomi_board::device_reset();
22   rom_cur_address = 0;
23}
24
25void naomi_rom_board::board_setup_address(UINT32 address, bool is_dma)
26{
27   rom_cur_address = address & 0x1fffffff;
28}
29
30void naomi_rom_board::board_get_buffer(UINT8 *&base, UINT32 &limit)
31{
32   base = m_region->base() + rom_cur_address;
33   limit = m_region->bytes() - rom_cur_address;
34}
35
36void naomi_rom_board::board_advance(UINT32 size)
37{
38   rom_cur_address += size;
39}
40
src/mame/machine/williams.c
r12704r12705
1919static void williams_main_irq(device_t *device, int state);
2020static void williams_main_firq(device_t *device, int state);
2121static void williams_snd_irq(device_t *device, int state);
22static void williams_snd_irq_b(device_t *device, int state);
2223static WRITE8_DEVICE_HANDLER( williams_snd_cmd_w );
2324static WRITE8_DEVICE_HANDLER( playball_snd_cmd_w );
25static WRITE8_DEVICE_HANDLER( blaster_snd_cmd_w );
2426
2527/* input port mapping */
2628static WRITE8_DEVICE_HANDLER( williams_port_select_w );
r12704r12705
100102   /*outputs: A/B,CA/B2       */ DEVCB_DEVICE_HANDLER("wmsdac", dac_w), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL,
101103   /*irqs   : A/B             */ DEVCB_LINE(williams_snd_irq), DEVCB_LINE(williams_snd_irq)
102104};
105/* Same as above, but for second sound board */
106const pia6821_interface williams_snd_pia_b_intf =
107{
108   /*inputs : A/B,CA/B1,CA/B2 */ DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL,
109   /*outputs: A/B,CA/B2       */ DEVCB_DEVICE_HANDLER("wmsdac_b", dac_w), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL,
110   /*irqs   : A/B             */ DEVCB_LINE(williams_snd_irq_b), DEVCB_LINE(williams_snd_irq_b)
111};
103112
104113
105114
r12704r12705
133142   /*irqs   : A/B             */ DEVCB_LINE(williams_main_irq), DEVCB_LINE(williams_main_irq)
134143};
135144
145/* Special PIA 1 for Blaster, to support two sound boards */
146const pia6821_interface blaster_pia_1_intf =
147{
148   /*inputs : A/B,CA/B1,CA/B2 */ DEVCB_INPUT_PORT("IN2"), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL,
149   /*outputs: A/B,CA/B2       */ DEVCB_NULL, DEVCB_HANDLER(blaster_snd_cmd_w), DEVCB_NULL, DEVCB_NULL,
150   /*irqs   : A/B             */ DEVCB_LINE(williams_main_irq), DEVCB_LINE(williams_main_irq)
151};
152
136153/* extra PIA 3 for Speed Ball */
137154const pia6821_interface spdball_pia_3_intf =
138155{
r12704r12705
301318   /* IRQ to the sound CPU */
302319   cputag_set_input_line(device->machine(), "soundcpu", M6800_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
303320}
321/* Same as above, but for second sound board */
322static void williams_snd_irq_b(device_t *device, int state)
323{
324   pia6821_device *pia_2 = device->machine().device<pia6821_device>("pia_2b");
325   int combined_state = pia_2->irq_a_state() | pia_2->irq_b_state();
304326
327   /* IRQ to the sound CPU */
328   cputag_set_input_line(device->machine(), "soundcpu_b", M6800_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
329}
305330
306331
332
307333/*************************************
308334 *
309335 *  Newer Williams interrupts
r12704r12705
548574   device->machine().scheduler().synchronize(FUNC(williams_deferred_snd_cmd_w), data);
549575}
550576
577static TIMER_CALLBACK( blaster_deferred_snd_cmd_w )
578{
579   pia6821_device *pia_2l = machine.device<pia6821_device>("pia_2");
580   pia6821_device *pia_2r = machine.device<pia6821_device>("pia_2b");
581   UINT8 l_data = param | 0x80;
582   UINT8 r_data = (param >> 1 & 0x40) | (param & 0x3f) | 0x80;
551583
584   pia_2l->portb_w(l_data); pia_2l->cb1_w((l_data == 0xff) ? 0 : 1);
585   pia_2r->portb_w(r_data); pia_2r->cb1_w((r_data == 0xff) ? 0 : 1);
586}
587
588WRITE8_DEVICE_HANDLER( blaster_snd_cmd_w )
589{
590   device->machine().scheduler().synchronize(FUNC(blaster_deferred_snd_cmd_w), data);
591}
592
593
552594static TIMER_CALLBACK( williams2_deferred_snd_cmd_w )
553595{
554596   pia6821_device *pia_2 = machine.device<pia6821_device>("pia_2");
src/mame/machine/maple-dc.c
r12704r12705
3939
4040void maple_dc_device::device_start()
4141{
42   fprintf(stderr, "Device started\n");
4243   cpu = machine().device<sh4_device>(maincpu_tag);
4344   timer = timer_alloc(0);
4445
src/mame/machine/naomirom.h
r0r12705
1#ifndef _NAOMIROM_H_
2#define _NAOMIROM_H_
3
4#include "naomibd.h"
5
6#define MCFG_NAOMI_ROM_BOARD_ADD(_tag, _eeprom_tag, _maincpu_tag, _irq_cb) \
7   MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_ROM_BOARD, _eeprom_tag, _maincpu_tag, _irq_cb)
8
9class naomi_rom_board : public naomi_board
10{
11public:
12   naomi_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
13
14protected:
15   virtual void device_start();
16   virtual void device_reset();
17
18   virtual void board_setup_address(UINT32 address, bool is_dma);
19   virtual void board_get_buffer(UINT8 *&base, UINT32 &limit);
20   virtual void board_advance(UINT32 size);
21
22private:
23   UINT32 rom_cur_address;
24};
25
26extern const device_type NAOMI_ROM_BOARD;
27
28#endif
src/mame/machine/naomim1.c
r0r12705
1#define ADDRESS_MAP_MODERN
2
3#include "emu.h"
4#include "naomim1.h"
5
6const device_type NAOMI_M1_BOARD = &device_creator<naomi_m1_board>;
7
8DEVICE_ADDRESS_MAP_START(submap, 16, naomi_m1_board)
9   AM_RANGE(0x0a, 0x0b) AM_READ(actel_id_r)
10
11   AM_INHERIT_FROM(naomi_board::submap)
12ADDRESS_MAP_END
13
14naomi_m1_board::naomi_m1_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
15   : naomi_board(mconfig, NAOMI_M1_BOARD, "NAOMI-M1-BOARD", tag, owner, clock)
16{
17   key_tag = 0;
18}
19
20void naomi_m1_board::static_set_tags(device_t &device, const char *_key_tag)
21{
22   naomi_m1_board &dev = downcast<naomi_m1_board &>(device);
23   dev.key_tag = _key_tag;
24}
25
26READ16_MEMBER(naomi_m1_board::actel_id_r)
27{
28   return 0x0000;
29}
30
31void naomi_m1_board::device_start()
32{
33   naomi_board::device_start();
34
35   const UINT8 *key_data = machine().region(key_tag)->base();
36   key = (key_data[0] << 24) | (key_data[1] << 16) | (key_data[2] << 8) | key_data[3];
37   buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE);
38
39   save_pointer(NAME(buffer), BUFFER_SIZE);
40   save_item(NAME(dict));
41   save_item(NAME(hist));
42   save_item(NAME(rom_cur_address));
43   save_item(NAME(buffer_actual_size));
44   save_item(NAME(avail_bits));
45   save_item(NAME(encryption));
46   save_item(NAME(stream_ended));
47   save_item(NAME(has_history));
48}
49
50void naomi_m1_board::device_reset()
51{
52   naomi_board::device_reset();
53   encryption = false;
54   rom_cur_address = 0;
55   buffer_actual_size = 0;
56   has_history = false;
57   stream_ended = false;
58
59   memset(dict, 0, sizeof(dict));
60   memset(hist, 0, sizeof(hist));
61
62   avail_val = 0;
63   avail_bits = 0;
64}
65
66void naomi_m1_board::board_setup_address(UINT32 address, bool is_dma)
67{
68   rom_cur_address = address & 0x1fffffff;
69   encryption = (!(address & 0x20000000)) && is_dma;
70
71   if(encryption) {
72      enc_reset();
73      enc_fill();
74   }
75}
76
77void naomi_m1_board::board_get_buffer(UINT8 *&base, UINT32 &limit)
78{
79   if(encryption) {
80      base = buffer;
81      limit = BUFFER_SIZE;
82
83   } else {
84      base = m_region->base() + rom_cur_address;
85      limit = m_region->bytes() - rom_cur_address;
86   }
87}
88
89void naomi_m1_board::board_advance(UINT32 size)
90{
91   if(encryption) {
92      if(size < buffer_actual_size) {
93         memmove(buffer, buffer + size, buffer_actual_size - size);
94         buffer_actual_size -= size;
95      } else {
96         hist[0] = buffer[buffer_actual_size-2];
97         hist[1] = buffer[buffer_actual_size-1];
98         has_history = true;
99         buffer_actual_size = 0;
100      }
101      enc_fill();
102         
103   } else
104      rom_cur_address += size;
105}
106
107UINT32 naomi_m1_board::get_decrypted_32b()
108{
109   UINT8 *base = m_region->base() + rom_cur_address;
110   UINT8 a = base[0];
111   UINT8 b = base[1];
112   UINT8 c = base[2];
113   UINT8 d = base[3];
114
115   rom_cur_address += 4;
116
117   UINT32 res = key ^ (((b^d) << 24) | ((a^c) << 16) | (b << 8) | a);
118   return res;
119}
120
121void naomi_m1_board::gb_reset()
122{
123   avail_val = 0;
124   avail_bits = 0;
125}
126
127inline UINT32 naomi_m1_board::lookb(int bits)
128{
129   if(bits > avail_bits) {
130      avail_val = (avail_val << 32) | get_decrypted_32b();
131      avail_bits += 32;
132   }
133   return (avail_val >> (avail_bits - bits)) & ((1 << bits)-1);
134}
135
136inline void naomi_m1_board::skipb(int bits)
137{
138   avail_bits -= bits;
139}
140
141inline UINT32 naomi_m1_board::getb(int bits)
142{
143   UINT32 res = lookb(bits);
144   skipb(bits);
145   return res;
146}
147
148void naomi_m1_board::enc_reset()
149{
150   gb_reset();
151   stream_ended = false;
152   has_history = false;
153   buffer_actual_size = 0;
154
155   for(int i=0; i<111; i++)
156      dict[i] = getb(8);
157}
158
159void naomi_m1_board::wb(UINT8 byte)
160{
161   if(dict[0] & 64)
162      if(buffer_actual_size < 2)
163         if(has_history)
164            buffer[buffer_actual_size] = hist[buffer_actual_size] - byte;
165         else
166            buffer[buffer_actual_size] = byte;
167      else
168         buffer[buffer_actual_size] = buffer[buffer_actual_size-2] - byte;
169   else
170      buffer[buffer_actual_size] = byte;
171
172   buffer_actual_size++;
173}
174
175void naomi_m1_board::enc_fill()
176{
177   while(buffer_actual_size < BUFFER_SIZE && !stream_ended) {
178      switch(lookb(3)) {
179         // 00+2 - 0000+esc
180      case 0: case 1: {
181         skipb(2);
182         int addr = getb(2);
183         if(addr)
184            wb(dict[addr]);
185         else
186            wb(getb(8));
187         break;
188      }
189
190         // 010+2
191      case 2:
192         skipb(3);
193         wb(dict[getb(2)+4]);
194         break;
195
196         // 011+3
197      case 3:
198         skipb(3);
199         wb(dict[getb(3)+8]);
200         break;
201
202         // 10+5
203      case 4: case 5:
204         skipb(2);
205         wb(dict[getb(5)+16]);
206         break;
207
208         // 11+6
209      case 6: case 7: {
210         skipb(2);
211         int addr = getb(6)+48;
212         if(addr == 111)
213            stream_ended = true;
214         else
215            wb(dict[addr]);
216         break;
217      }
218      }         
219   }
220
221   while(buffer_actual_size < BUFFER_SIZE)
222      buffer[buffer_actual_size++] = 0;
223}
src/mame/machine/naomim1.h
r0r12705
1#ifndef _NAOMIM1_H_
2#define _NAOMIM1_H_
3
4#include "naomibd.h"
5
6#define MCFG_NAOMI_M1_BOARD_ADD(_tag, _key_tag, _eeprom_tag, _maincpu_tag, _irq_cb) \
7   MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M1_BOARD, _eeprom_tag, _maincpu_tag, _irq_cb) \
8   naomi_m1_board::static_set_tags(*device, _key_tag);
9
10class naomi_m1_board : public naomi_board
11{
12public:
13   naomi_m1_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
14
15   static void static_set_tags(device_t &device, const char *_key_tag);
16
17   virtual DECLARE_ADDRESS_MAP(submap, 16);
18   
19   DECLARE_READ16_MEMBER(actel_id_r);
20
21protected:
22   virtual void device_start();
23   virtual void device_reset();
24
25   virtual void board_setup_address(UINT32 address, bool is_dma);
26   virtual void board_get_buffer(UINT8 *&base, UINT32 &limit);
27   virtual void board_advance(UINT32 size);
28
29private:
30   enum { BUFFER_SIZE = 32768 };
31
32   const char *key_tag;
33   UINT32 key;
34
35   UINT8 *buffer;
36   UINT8 dict[111], hist[2];
37   UINT64 avail_val;
38   UINT32 rom_cur_address, buffer_actual_size, avail_bits;
39   bool encryption, stream_ended, has_history;
40
41   void gb_reset();
42   UINT32 lookb(int bits);
43   void skipb(int bits);
44   UINT32 getb(int bits);
45
46   void enc_reset();
47   void enc_fill();
48
49   UINT32 get_decrypted_32b();
50
51   void wb(UINT8 byte);
52};
53
54extern const device_type NAOMI_M1_BOARD;
55
56#endif
src/mame/includes/naomibd.h
r12704r12705
1/*************************************************************************
2
3    Naomi plug-in board
4
5    driver by Samuele Zannoli
6
7**************************************************************************/
8
9#include "devlegcy.h"
10
11/***************************************************************************
12    CONSTANTS
13***************************************************************************/
14
15/* enumeration specifying which model of board we are emulating */
16enum
17{
18   ROM_BOARD,
19   DIMM_BOARD,
20   AW_ROM_BOARD,
21   MAX_NAOMIBD_TYPES
22};
23
24
25/***************************************************************************
26    TYPE DEFINITIONS
27***************************************************************************/
28
29typedef void (*naomibd_signal_func)(device_t *device, int signal, int state);
30
31typedef struct _naomibd_config naomibd_config;
32struct _naomibd_config
33{
34   int                  type;
35   int                  size;
36   const char *         regiontag;
37   const char *         gdromregiontag;
38   const char *         picregiontag;
39   naomibd_signal_func      signal;
40};
41
42
43
44/***************************************************************************
45    DEVICE CONFIGURATION MACROS
46***************************************************************************/
47
48#define MCFG_NAOMIBD_ADD(_tag, _type) \
49   MCFG_DEVICE_ADD(_tag, NAOMI_BOARD, 0) \
50   MCFG_DEVICE_CONFIG_DATA32(naomibd_config, type, _type)
51
52#define MCFG_NAOMI_ROM_BOARD_ADD(_tag, _region) \
53   MCFG_NAOMIBD_ADD(_tag, ROM_BOARD) \
54   MCFG_NAOMIBD_REGION(_region)
55
56#define MCFG_AW_ROM_BOARD_ADD(_tag, _region) \
57   MCFG_NAOMIBD_ADD(_tag, AW_ROM_BOARD) \
58   MCFG_NAOMIBD_REGION(_region)
59
60#define MCFG_NAOMI_DIMM_BOARD_ADD(_tag, _gdrom, _callback, _sizemb, _pic) \
61   MCFG_NAOMIBD_ADD(_tag, DIMM_BOARD) \
62   MCFG_DEVICE_CONFIG_DATAPTR(naomibd_config, signal, _callback) \
63   MCFG_NAOMIBD_GDROM_REGION(_gdrom) \
64   MCFG_NAOMIBD_SIZE(_sizemb) \
65   MCFG_NAOMIBD_PIC_REGION(_pic)
66
67#define MCFG_NAOMIBD_REGION(_region) \
68   MCFG_DEVICE_CONFIG_DATAPTR(naomibd_config, regiontag, _region)
69
70#define MCFG_NAOMIBD_GDROM_REGION(_region) \
71   MCFG_DEVICE_CONFIG_DATAPTR(naomibd_config, gdromregiontag, _region)
72
73#define MCFG_NAOMIBD_PIC_REGION(_region) \
74   MCFG_DEVICE_CONFIG_DATAPTR(naomibd_config, picregiontag, _region)
75
76#define MCFG_NAOMIBD_SIZE(_sizemb) \
77   MCFG_DEVICE_CONFIG_DATA32(naomibd_config, size, _sizemb)
78
79#define MCFG_NAOMIBD_MODIFY(_tag) \
80   MCFG_DEVICE_MODIFY(_tag)
81
82/*#define MCFG_NAOMIBD_TMU_MEMORY(_tmu, _tmumem) \
83    MCFG_DEVICE_CONFIG_DATA32(naomibd_config, tmumem##_tmu, _tmumem)*/
84
85
86/*----------- defined in machine/naomibd.c -----------*/
87
88/***************************************************************************
89    FUNCTION PROTOTYPES
90***************************************************************************/
91
92int naomibd_get_type(device_t *device);
93void *naomibd_get_memory(device_t *device, UINT32 length);
94offs_t naomibd_get_dmaoffset(device_t *device);
95
96READ64_DEVICE_HANDLER( naomibd_r );
97WRITE64_DEVICE_HANDLER( naomibd_w );
98
99/* ----- device interface ----- */
100
101DECLARE_LEGACY_DEVICE(NAOMI_BOARD, naomibd);
src/mame/includes/taitojc.h
r12704r12705
5656   UINT16 m_debug_dsp_ram[0x8000];
5757
5858   UINT8 m_has_dsp_hack;
59
60   double m_speed_meter;
61   UINT16 m_break_meter;
62   UINT32 m_outputs;
5963};
6064
6165
src/mame/includes/naomi.h
r12704r12705
4444
4545extern int jvsboard_type;
4646extern UINT16 actel_id;
47
48void naomi_g1_irq(running_machine &machine);
src/mame/includes/williams.h
r12704r12705
5757extern const pia6821_interface williams_49way_muxed_pia_0_intf;
5858extern const pia6821_interface williams_pia_1_intf;
5959extern const pia6821_interface williams_snd_pia_intf;
60extern const pia6821_interface williams_snd_pia_b_intf;
6061
6162/* Game-specific old-Williams PIA interfaces */
6263extern const pia6821_interface lottofun_pia_0_intf;
6364extern const pia6821_interface sinistar_snd_pia_intf;
6465extern const pia6821_interface playball_pia_1_intf;
66extern const pia6821_interface blaster_pia_1_intf;
6567extern const pia6821_interface spdball_pia_3_intf;
6668
6769/* Generic later-Williams PIA interfaces */
src/mame/mame.mak
r12704r12705
11911191   $(DRIVERS)/model1.o $(MACHINE)/model1.o $(VIDEO)/model1.o \
11921192   $(DRIVERS)/model2.o $(VIDEO)/model2.o \
11931193   $(DRIVERS)/model3.o $(VIDEO)/model3.o $(MACHINE)/model3.o \
1194   $(DRIVERS)/naomi.o $(MACHINE)/dc.o $(VIDEO)/dc.o $(MACHINE)/gdcrypt.o $(MACHINE)/naomibd.o $(MACHINE)/naomi.o $(MACHINE)/naomim4decoder.o\
1195   $(MACHINE)/mie.o $(MACHINE)/maple-dc.o $(MACHINE)/mapledev.o $(MACHINE)/dc-ctrl.o \
1196   $(MACHINE)/jvs13551.o \
1194   $(DRIVERS)/naomi.o $(MACHINE)/dc.o $(VIDEO)/dc.o $(MACHINE)/naomi.o \
1195   $(MACHINE)/naomig1.o $(MACHINE)/naomibd.o $(MACHINE)/naomirom.o $(MACHINE)/naomigd.o $(MACHINE)/naomim1.o $(MACHINE)/naomim2.o $(MACHINE)/naomim4.o $(MACHINE)/awboard.o \
1196   $(MACHINE)/mie.o $(MACHINE)/maple-dc.o $(MACHINE)/mapledev.o $(MACHINE)/dc-ctrl.o $(MACHINE)/jvs13551.o \
11971197   $(DRIVERS)/triforce.o \
11981198   $(DRIVERS)/puckpkmn.o \
11991199   $(DRIVERS)/segac2.o \
src/mame/video/taitojc.c
r12704r12705
184184   /* this bit seems to set up border at left/right of screen (reads at 0xffc00) */
185185   if(mask_screen)
186186   {
187      if(address != 0xffc00)
188      {
189         popmessage("mask screen with %08x, contact MAMEdev",address);
190         return;
191      }
192
187193      for (j=y1; j < y2; j++)
188194      {
189195         UINT16 *d = BITMAP_ADDR16(bitmap, j,  0);
190         //int index = (iy * (width / 8)) + ix;
191196
197         UINT8 pen = state->m_objlist[(address-0xff000)/4];
198
192199         for (i=x1; i < x2; i++)
193200         {
194            d[i] = v[0];
201            d[i] = pen;
195202
196203            //index++;
197204         }
r12704r12705
210217         {
211218            UINT8 pen = (v[BYTE4_XOR_BE(index)] & 0xf0) >> 4;
212219            if (pen != 0)
213            {
214220               d[i] = palette + pen;
215            }
221
216222            pen = (v[BYTE4_XOR_BE(index)] & 0x0f);
217223            if (pen != 0)
218            {
219224               d[i+1] = palette + pen;
220            }
225
221226            index++;
222227         }
223228
r12704r12705
226231   }
227232   else // 8bpp
228233   {
229      for (j=y1; j < y2; j++)
230234      {
231         UINT16 *d = BITMAP_ADDR16(bitmap, j,  0);
232         int index = (iy * width) + ix;
235         for (j=y1; j < y2; j++)
236         {
237            UINT16 *d = BITMAP_ADDR16(bitmap, j,  0);
238            int index = (iy * width) + ix;
233239
234         for (i=x1; i < x2; i++)
235         {
236            UINT8 pen = v[BYTE4_XOR_BE(index)];
237            if (pen != 0)
240            for (i=x1; i < x2; i++)
238241            {
239               d[i] = palette + pen;
242               UINT8 pen = v[BYTE4_XOR_BE(index)];
243               if (pen != 0)
244               {
245                  d[i] = palette + pen;
246               }
247
248               index++;
240249            }
241250
242            index++;
251            iy++;
243252         }
244
245         iy++;
246253      }
247254   }
248255}
r12704r12705
291298{
292299   taitojc_state *state = machine.driver_data<taitojc_state>();
293300   UINT16 start_offs;
301//   UINT8 double_xy;
294302   int i;
295303
296304   start_offs = ((bank_type+1)*0x400)/4;
305//   double_xy = (state->m_objlist[(0xd1c+bank_type*0x10)/4] & 0x20000000) >> 29;
297306
307   /* probably a core bug in there (otherwise objects sticks on screen in Densya de Go) */
308   if(bank_type == 1 && (!(state->m_objlist[0xfc4/4] & 0x2000)))
309      return;
310
298311   for (i=start_offs-2; i >= (start_offs-0x400/4); i-=2)
299312   {
300313      UINT32 w1 = state->m_objlist[i + 0];
301314      UINT32 w2 = state->m_objlist[i + 1];
302315
303      //if(i < 6) // don't try to draw non-video stuff
304      //   return;
305
306316      if (((w2 & 0x200000) >> 21) == pri)
307317      {
308318         draw_object(machine, bitmap, cliprect, w1, w2, bank_type);
r12704r12705
338348
339349   //popmessage("%08x %08x %08x %08x",state->m_objlist[0xd20/4],state->m_objlist[0xd24/4],state->m_objlist[0xd28/4],state->m_objlist[0xd2c/4]);
340350
341   draw_object_bank(screen->machine(), bitmap, cliprect, ((state->m_objlist[0xfc4/4] & 0x2000) >> 13), 0);
351   draw_object_bank(screen->machine(), bitmap, cliprect, 0, 0);
352   draw_object_bank(screen->machine(), bitmap, cliprect, 1, 0);
342353   draw_object_bank(screen->machine(), bitmap, cliprect, 2, 0);
343354
344355   copybitmap_trans(bitmap, state->m_framebuffer, 0, 0, 0, 0, cliprect, 0);
345356
346   draw_object_bank(screen->machine(), bitmap, cliprect, ((state->m_objlist[0xfc4/4] & 0x2000) >> 13), 1);
357   draw_object_bank(screen->machine(), bitmap, cliprect, 0, 1);
358   draw_object_bank(screen->machine(), bitmap, cliprect, 1, 1);
347359   draw_object_bank(screen->machine(), bitmap, cliprect, 2, 1);
348360
349361   tilemap_draw(bitmap, cliprect, state->m_tilemap, 0,0);
src/mame/drivers/gaelco.c
r12704r12705
44
55    Driver by Manuel Abadia
66
7Games supported:
8
9Year   Game                PCB            NOTES
10-------------------------------------------------------------
111991   Big Karnak          REF 901112-1   Unprotected
121992   Squash              REF 922804/1   Encrypted Video RAM
131992   Thunder Hoop        REF 922804/1   Encrypted Video RAM
141995   Biomechanical Toy   REF 922804/2   Unprotected
151996   Maniac Square       REF 922804/2   Prototype
16
717***************************************************************************/
818
919#include "emu.h"
r12704r12705
658668   ROM_LOAD( "d1",   0x000000, 0x040000, CRC(26444ad1) SHA1(804101b9bbb6e1b6d43a1e9d91737f9c3b27802a) )
659669ROM_END
660670
661ROM_START( maniacsp )
671ROM_START( maniacsp ) /* PCB - REF 922804/2 */
662672   ROM_REGION( 0x100000, "maincpu", 0 )   /* 68000 code */
663673   ROM_LOAD16_BYTE(   "d18",   0x000000, 0x020000, CRC(740ecab2) SHA1(8d8583364cc6aeea58ea2b9cb9a2aab2a43a44df) )
664674   ROM_LOAD16_BYTE(   "d16",   0x000001, 0x020000, CRC(c6c42729) SHA1(1aac9f93d47a4eb57e06e206e9f50e349b1817da) )
r12704r12705
685695ROM_END
686696
687697
688ROM_START( biomtoy )
698ROM_START( biomtoy ) /* PCB - REF 922804/2 */
689699   ROM_REGION( 0x100000, "maincpu", 0 )   /* 68000 code */
690   ROM_LOAD16_BYTE(   "d18",   0x000000, 0x080000, CRC(4569ce64) SHA1(96557aca55779c23f7c2c11fddc618823c04ead0) )
691   ROM_LOAD16_BYTE(   "d16",   0x000001, 0x080000, CRC(739449bd) SHA1(711a8ea5081f15dea6067577516c9296239c4145) )
700   ROM_LOAD16_BYTE(   "d18",   0x000000, 0x080000, CRC(4569ce64) SHA1(96557aca55779c23f7c2c11fddc618823c04ead0) ) /* v1.0.1885 */
701   ROM_LOAD16_BYTE(   "d16",   0x000001, 0x080000, CRC(739449bd) SHA1(711a8ea5081f15dea6067577516c9296239c4145) ) /* v1.0.1885 */
692702
693703   ROM_REGION( 0x400000, "gfx1", 0 )
694704   /* weird gfx ordering */
r12704r12705
717727ROM_END
718728
719729
730ROM_START( biomtoya ) /* PCB - REF 922804/2 */
731   ROM_REGION( 0x100000, "maincpu", 0 )   /* 68000 code */
732   ROM_LOAD16_BYTE( "biomtoya.d18", 0x000000, 0x080000, CRC(39b6cdbd) SHA1(3a22eb2e304d85ecafff677d83c3c4fca3f869d5) ) /* v1.0.1884 */
733   ROM_LOAD16_BYTE( "biomtoya.d16", 0x000001, 0x080000, CRC(ab340671) SHA1(83f708a535048e927fd1c7de85a65282e460f98a) ) /* v1.0.1884 */
734
735   ROM_REGION( 0x400000, "gfx1", 0 )
736   /* weird gfx ordering */
737   ROM_LOAD( "h6",      0x040000, 0x040000, CRC(9416a729) SHA1(425149b3041554579791fc23c09fda6be054e89d) )
738   ROM_CONTINUE(      0x0c0000, 0x040000 )
739   ROM_LOAD( "j6",      0x000000, 0x040000, CRC(e923728b) SHA1(113eac1de73c74ef7c9d3e2e72599a1ff775176d) )
740   ROM_CONTINUE(      0x080000, 0x040000 )
741   ROM_LOAD( "h7",      0x140000, 0x040000, CRC(9c984d7b) SHA1(98d43a9c3fa93c9ea55f41475ecab6ca25713087) )
742   ROM_CONTINUE(      0x1c0000, 0x040000 )
743   ROM_LOAD( "j7",      0x100000, 0x040000, CRC(0e18fac2) SHA1(acb0a3699395a6c68cacdeadda42a785aa4020f5) )
744   ROM_CONTINUE(      0x180000, 0x040000 )
745   ROM_LOAD( "h9",      0x240000, 0x040000, CRC(8c1f6718) SHA1(9377e838ebb1e16d24072b9b4ed278408d7a808f) )
746   ROM_CONTINUE(      0x2c0000, 0x040000 )
747   ROM_LOAD( "j9",      0x200000, 0x040000, CRC(1c93f050) SHA1(fabeffa05dae7a83a199a57022bd318d6ad02c4d) )
748   ROM_CONTINUE(      0x280000, 0x040000 )
749   ROM_LOAD( "h10",   0x340000, 0x040000, CRC(aca1702b) SHA1(6b36b230722270dbfc2f69bd7eb07b9e718db089) )
750   ROM_CONTINUE(      0x3c0000, 0x040000 )
751   ROM_LOAD( "j10",   0x300000, 0x040000, CRC(8e3e96cc) SHA1(761009f3f32b18139e98f20a22c433b6a49d9168) )
752   ROM_CONTINUE(      0x380000, 0x040000 )
753
754   ROM_REGION( 0x140000, "oki", 0 )   /* ADPCM samples - sound chip is OKIM6295 */
755   ROM_LOAD( "c1",   0x000000, 0x080000, CRC(0f02de7e) SHA1(a8779370cc36290616794ff11eb3eebfdea5b1a9) )
756   /* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
757   ROM_RELOAD(      0x040000, 0x080000 )
758   ROM_LOAD( "c3",   0x0c0000, 0x080000, CRC(914e4bbc) SHA1(ca82b7481621a119f05992ed093b963da70d748a) )
759ROM_END
760
761
720762/*
721763Squash (version 1.0)
722764Gaelco, 1992
r12704r12705
765807           SQUASH_SOUND.1D   27C040      Sound
766808*/
767809
768/* encrypted video ram */
769810ROM_START( squash )
770811   ROM_REGION( 0x100000, "maincpu", 0 )   /* 68000 code */
771812   ROM_LOAD16_BYTE( "squash.d18", 0x000000, 0x20000, CRC(ce7aae96) SHA1(4fe8666ae571bffc5a08fa68346c0623282989eb) )
772813   ROM_LOAD16_BYTE( "squash.d16", 0x000001, 0x20000, CRC(8ffaedd7) SHA1(f4aada17ba67dd8b6c5a395e832bcbba2764c59d) )
773814
774815   ROM_REGION( 0x400000, "gfx1", 0 )
775   ROM_LOAD( "squash.c09", 0x300000, 0x80000, CRC(0bb91c69) SHA1(8be945049ab411a4d49bd64bd3937542ec9ef9fb) )
776   ROM_RELOAD(              0x380000, 0x80000 )
777   ROM_LOAD( "squash.c10", 0x200000, 0x80000, CRC(892a035c) SHA1(d0156ceb9aa6639a1124c17fb12389be319bb51f) )
778   ROM_RELOAD(              0x280000, 0x80000 )
779   ROM_LOAD( "squash.c11", 0x100000, 0x80000, CRC(9e19694d) SHA1(1df4646f3147719fef516a37aa361ae26d9b23a2) )
780   ROM_RELOAD(              0x180000, 0x80000 )
781   ROM_LOAD( "squash.c12", 0x000000, 0x80000, CRC(5c440645) SHA1(4f2fc1647ffc549fa079f2dc0aaaceb447afdf44) )
782   ROM_RELOAD(              0x080000, 0x80000 )
816   ROM_LOAD( "squash.c09", 0x300000, 0x80000, CRC(0bb91c69) SHA1(8be945049ab411a4d49bd64bd3937542ec9ef9fb) ) /* encrypted video ram */
817   ROM_RELOAD(                0x380000, 0x80000 )
818   ROM_LOAD( "squash.c10", 0x200000, 0x80000, CRC(892a035c) SHA1(d0156ceb9aa6639a1124c17fb12389be319bb51f) ) /* encrypted video ram */
819   ROM_RELOAD(                0x280000, 0x80000 )
820   ROM_LOAD( "squash.c11", 0x100000, 0x80000, CRC(9e19694d) SHA1(1df4646f3147719fef516a37aa361ae26d9b23a2) ) /* encrypted video ram */
821   ROM_RELOAD(                0x180000, 0x80000 )
822   ROM_LOAD( "squash.c12", 0x000000, 0x80000, CRC(5c440645) SHA1(4f2fc1647ffc549fa079f2dc0aaaceb447afdf44) ) /* encrypted video ram */
823   ROM_RELOAD(                0x080000, 0x80000 )
783824
784825   ROM_REGION( 0x140000, "oki", 0 )   /* ADPCM samples - sound chip is OKIM6295 */
785826   ROM_LOAD( "squash.d01",   0x000000, 0x80000, CRC(a1b9651b) SHA1(a396ba94889f70ea06d6330e3606b0f2497ff6ce) )
r12704r12705
789830ROM_END
790831
791832
792/* encrypted video ram */
793833ROM_START( thoop )
794834   ROM_REGION( 0x100000, "maincpu", 0 )   /* 68000 code */
795835   ROM_LOAD16_BYTE( "th18dea1.040", 0x000000, 0x80000, CRC(59bad625) SHA1(28e058b2290bc5f7130b801014d026432f9e7fd5) )
796836   ROM_LOAD16_BYTE( "th161eb4.020", 0x000001, 0x40000, CRC(6add61ed) SHA1(0e789d9a0ac19b6143044fbc04ab2227735b2a8f) )
797837
798838   ROM_REGION( 0x400000, "gfx1", 0 )
799   ROM_LOAD( "c09", 0x300000, 0x040000, CRC(06f0edbf) SHA1(3cf2e5c29cd00b43d49a106084076f2ac0dbad98) )
839   ROM_LOAD( "c09", 0x300000, 0x040000, CRC(06f0edbf) SHA1(3cf2e5c29cd00b43d49a106084076f2ac0dbad98) ) /* encrypted video ram */
800840   ROM_CONTINUE(    0x380000, 0x040000 )
801841   ROM_CONTINUE(    0x340000, 0x040000 )
802842   ROM_CONTINUE(    0x3c0000, 0x040000 )
803   ROM_LOAD( "c10", 0x200000, 0x040000, CRC(2d227085) SHA1(b224efd59ec83bb786fa92a23ef2d27ed36cab6c) )
843   ROM_LOAD( "c10", 0x200000, 0x040000, CRC(2d227085) SHA1(b224efd59ec83bb786fa92a23ef2d27ed36cab6c) ) /* encrypted video ram */
804844   ROM_CONTINUE(    0x280000, 0x040000 )
805845   ROM_CONTINUE(    0x240000, 0x040000 )
806846   ROM_CONTINUE(    0x2c0000, 0x040000 )
807   ROM_LOAD( "c11", 0x100000, 0x040000, CRC(7403ef7e) SHA1(52a737816e25a07ada070ed3a5f40bbbd22ac8e0) )
847   ROM_LOAD( "c11", 0x100000, 0x040000, CRC(7403ef7e) SHA1(52a737816e25a07ada070ed3a5f40bbbd22ac8e0) ) /* encrypted video ram */
808848   ROM_CONTINUE(    0x180000, 0x040000 )
809849   ROM_CONTINUE(    0x140000, 0x040000 )
810850   ROM_CONTINUE(    0x1c0000, 0x040000 )
811   ROM_LOAD( "c12", 0x000000, 0x040000, CRC(29a5ca36) SHA1(fdcfdefb3b02bfe34781fdd0295640caabe2a5fb) )
851   ROM_LOAD( "c12", 0x000000, 0x040000, CRC(29a5ca36) SHA1(fdcfdefb3b02bfe34781fdd0295640caabe2a5fb) ) /* encrypted video ram */
812852   ROM_CONTINUE(    0x080000, 0x040000 )
813853   ROM_CONTINUE(    0x040000, 0x040000 )
814854   ROM_CONTINUE(    0x0c0000, 0x040000 )
r12704r12705
828868 *************************************/
829869
830870GAME( 1991, bigkarnk, 0,        bigkarnk, bigkarnk, 0, ROT0, "Gaelco", "Big Karnak", GAME_SUPPORTS_SAVE )
831GAME( 1995, biomtoy,  0,        maniacsq, biomtoy,  0, ROT0, "Gaelco", "Biomechanical Toy (unprotected)", GAME_SUPPORTS_SAVE )
871GAME( 1995, biomtoy,  0,        maniacsq, biomtoy,  0, ROT0, "Gaelco", "Biomechanical Toy (Ver. 1.0.1885)", GAME_SUPPORTS_SAVE )
872GAME( 1995, biomtoya, biomtoy,  maniacsq, biomtoy,  0, ROT0, "Gaelco", "Biomechanical Toy (Ver. 1.0.1884)", GAME_SUPPORTS_SAVE )
832873GAME( 1996, maniacsp, maniacsq, maniacsq, maniacsq, 0, ROT0, "Gaelco", "Maniac Square (prototype)", GAME_SUPPORTS_SAVE )
833874GAME( 1992, squash,   0,        squash,   squash,   0, ROT0, "Gaelco", "Squash (Ver. 1.0)", GAME_SUPPORTS_SAVE )
834875GAME( 1992, thoop,    0,        thoop,    thoop,    0, ROT0, "Gaelco", "Thunder Hoop (Ver. 1)", GAME_SUPPORTS_SAVE )
src/mame/drivers/chihiro.c
r12704r12705
362362#include "emu.h"
363363#include "cpu/i386/i386.h"
364364#include "machine/pci.h"
365#include "includes/naomibd.h"
365#include "machine/naomigd.h"
366366#include "debug/debugcon.h"
367367#include "debug/debugcmd.h"
368368
r12704r12705
661661MACHINE_CONFIG_END
662662
663663static MACHINE_CONFIG_DERIVED( chihirogd, chihiro_base )
664   MCFG_NAOMI_DIMM_BOARD_ADD("rom_board", "gdrom", NULL, 512, "picreturn")
664   MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", "gdrom", "picreturn", NULL, "maincpu", NULL)
665665MACHINE_CONFIG_END
666666
667667#define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \
src/mame/drivers/naomi.c
r12704r12705
13861386#include "machine/maple-dc.h"
13871387#include "machine/dc-ctrl.h"
13881388#include "machine/mie.h"
1389#include "includes/naomibd.h"
1389#include "machine/naomirom.h"
1390#include "machine/naomigd.h"
1391#include "machine/naomim1.h"
1392#include "machine/naomim2.h"
1393#include "machine/naomim4.h"
1394#include "machine/awboard.h"
13901395#include "includes/naomi.h"
13911396#include "cpu/sh4/sh4.h"
13921397#include "cpu/arm7/arm7core.h"
r12704r12705
15401545   AM_RANGE(0x00200000, 0x00207fff) AM_MIRROR(0x02000000) AM_RAM                                             // bios uses it (battery backed ram ?)
15411546   AM_RANGE(0x005f6800, 0x005f69ff) AM_MIRROR(0x02000000) AM_READWRITE( dc_sysctrl_r, dc_sysctrl_w )
15421547   AM_RANGE(0x005f6c00, 0x005f6cff) AM_MIRROR(0x02000000) AM_DEVICE32( "maple_dc", maple_dc_device, amap, U64(0xffffffffffffffff) )
1543   AM_RANGE(0x005f7000, 0x005f70ff) AM_MIRROR(0x02000000) AM_DEVREADWRITE("rom_board", naomibd_r, naomibd_w)
1544   AM_RANGE(0x005f7400, 0x005f74ff) AM_MIRROR(0x02000000) AM_READWRITE( dc_g1_ctrl_r, dc_g1_ctrl_w )
1548   AM_RANGE(0x005f7000, 0x005f70ff) AM_MIRROR(0x02000000) AM_DEVICE16( "rom_board", naomi_board, submap, U64(0x0000ffff0000ffff) )
1549   AM_RANGE(0x005f7400, 0x005f74ff) AM_MIRROR(0x02000000) AM_DEVICE32( "rom_board", naomi_g1_device, amap, U64(0xffffffffffffffff) )
15451550   AM_RANGE(0x005f7800, 0x005f78ff) AM_MIRROR(0x02000000) AM_READWRITE( dc_g2_ctrl_r, dc_g2_ctrl_w )
15461551   AM_RANGE(0x005f7c00, 0x005f7cff) AM_MIRROR(0x02000000) AM_READWRITE( pvr_ctrl_r, pvr_ctrl_w )
15471552   AM_RANGE(0x005f8000, 0x005f9fff) AM_MIRROR(0x02000000) AM_READWRITE( pvr_ta_r, pvr_ta_w )
r12704r12705
15901595   AM_RANGE(0x00000000, 0x001fffff) AM_MIRROR(0xa2000000) AM_ROM AM_REGION("maincpu", 0) // BIOS
15911596
15921597   AM_RANGE(0x00200000, 0x00207fff) AM_MIRROR(0x02000000) AM_RAM                                             // bios uses it (battery backed ram ?)
1593   AM_RANGE(0x005f6800, 0x005f69ff) AM_READWRITE( dc_sysctrl_r, dc_sysctrl_w )
1594   AM_RANGE(0x005f6c00, 0x005f6c07) AM_MIRROR(0x02000000) AM_DEVREADWRITE32_MODERN( "maple_dc", maple_dc_device, sb_mdstar_r, sb_mdstar_w, U64(0xffffffff00000000) )
1595   AM_RANGE(0x005f6c10, 0x005f6c17) AM_MIRROR(0x02000000) AM_DEVREADWRITE32_MODERN( "maple_dc", maple_dc_device, sb_mden_r, sb_mden_w, U64(0xffffffff00000000) )
1596   AM_RANGE(0x005f6c18, 0x005f6c1f) AM_MIRROR(0x02000000) AM_DEVREADWRITE32_MODERN( "maple_dc", maple_dc_device, sb_mdst_r, sb_mdst_w, U64(0x00000000ffffffff) )
1597   AM_RANGE(0x005f6c80, 0x005f6c87) AM_MIRROR(0x02000000) AM_DEVREADWRITE32_MODERN( "maple_dc", maple_dc_device, sb_msys_r, sb_msys_w, U64(0x00000000ffffffff) )
1598   AM_RANGE(0x005f6c88, 0x005f6c8f) AM_MIRROR(0x02000000) AM_DEVWRITE32_MODERN( "maple_dc", maple_dc_device, sb_mdapro_w, U64(0xffffffff00000000) )
1599   AM_RANGE(0x005f7000, 0x005f70ff) AM_MIRROR(0x02000000) AM_DEVREADWRITE("rom_board", naomibd_r, naomibd_w)
1600   AM_RANGE(0x005f7400, 0x005f74ff) AM_MIRROR(0x02000000) AM_READWRITE( dc_g1_ctrl_r, dc_g1_ctrl_w )
1598   AM_RANGE(0x005f6800, 0x005f69ff) AM_MIRROR(0x02000000) AM_READWRITE( dc_sysctrl_r, dc_sysctrl_w )
1599   AM_RANGE(0x005f6c00, 0x005f6cff) AM_MIRROR(0x02000000) AM_DEVICE32( "maple_dc", maple_dc_device, amap, U64(0xffffffffffffffff) )
1600   AM_RANGE(0x005f7000, 0x005f70ff) AM_MIRROR(0x02000000) AM_DEVICE16( "rom_board", naomi_board, submap, U64(0x0000ffff0000ffff) )
1601   AM_RANGE(0x005f7400, 0x005f74ff) AM_MIRROR(0x02000000) AM_DEVICE32( "rom_board", naomi_g1_device, amap, U64(0xffffffffffffffff) )
16011602   AM_RANGE(0x005f7800, 0x005f78ff) AM_MIRROR(0x02000000) AM_READWRITE( dc_g2_ctrl_r, dc_g2_ctrl_w )
16021603   AM_RANGE(0x005f7c00, 0x005f7cff) AM_READWRITE( pvr_ctrl_r, pvr_ctrl_w )
16031604   AM_RANGE(0x005f8000, 0x005f9fff) AM_READWRITE( pvr_ta_r, pvr_ta_w )
r12704r12705
16471648   //AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
16481649ADDRESS_MAP_END
16491650
1651
16501652static ADDRESS_MAP_START( naomi_port, AS_IO, 64 )
16511653   AM_RANGE(0x00, 0x0f) AM_DEVREADWRITE("main_eeprom", eeprom_93c46a_r, eeprom_93c46a_w)
16521654ADDRESS_MAP_END
r12704r12705
17481750   AM_RANGE(0x00200000, 0x0021ffff) AM_RAM    // battery backed up RAM
17491751   AM_RANGE(0x005f6800, 0x005f69ff) AM_READWRITE( dc_sysctrl_r, dc_sysctrl_w )
17501752   AM_RANGE(0x005f6c00, 0x005f6cff) AM_MIRROR(0x02000000) AM_DEVICE32( "maple_dc", maple_dc_device, amap, U64(0xffffffffffffffff) )
1751   AM_RANGE(0x005f7000, 0x005f70ff) AM_DEVREADWRITE("rom_board", naomibd_r, naomibd_w)
1752   AM_RANGE(0x005f7400, 0x005f74ff) AM_READWRITE( dc_g1_ctrl_r, dc_g1_ctrl_w )
1753   AM_RANGE(0x005f7000, 0x005f70ff) AM_MIRROR(0x02000000) AM_DEVICE16( "rom_board", aw_rom_board, submap, U64(0x0000ffff0000ffff) )
1754   AM_RANGE(0x005f7400, 0x005f74ff) AM_MIRROR(0x02000000) AM_DEVICE32( "rom_board", naomi_g1_device, amap, U64(0xffffffffffffffff) )
17531755   AM_RANGE(0x005f7800, 0x005f78ff) AM_READWRITE( dc_g2_ctrl_r, dc_g2_ctrl_w )
17541756   AM_RANGE(0x005f7c00, 0x005f7cff) AM_READWRITE( pvr_ctrl_r, pvr_ctrl_w )
17551757   AM_RANGE(0x005f8000, 0x005f9fff) AM_READWRITE( pvr_ta_r, pvr_ta_w )
r12704r12705
24852487 * Common for Naomi 1, Naomi GD-Rom, Naomi 2, Atomiswave ...
24862488 */
24872489
2488static MACHINE_CONFIG_START( naomi_base, driver_device )
2490static MACHINE_CONFIG_START( naomi_aw_base, driver_device )
24892491   /* basic machine hardware */
24902492   MCFG_CPU_ADD("maincpu", SH4, CPU_CLOCK) // SH4!!!
24912493   MCFG_CPU_CONFIG(sh4cpu_config)
r12704r12705
25232525   MCFG_SOUND_ROUTE(1, "rspeaker", 2.0)
25242526MACHINE_CONFIG_END
25252527
2526/*
2527 * Naomi 1
2528 */
2529
2530static MACHINE_CONFIG_DERIVED( naomi, naomi_base )
2528static MACHINE_CONFIG_DERIVED( naomi_base, naomi_aw_base )
25312529   MCFG_MIE_ADD("mie", 4000000, "maple_dc", 0, 0, 0, 0, "MIE:3", 0, "MIE:5", 0, 0) // Actual frequency unknown
25322530   MCFG_SEGA_837_13551_DEVICE_ADD("837_13551", "mie", "TILT", "P1", "P2", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "OUTPUT")
25332531   MCFG_EEPROM_93C46_8BIT_ADD("mie_eeprom")
25342532
2535   MCFG_NAOMI_ROM_BOARD_ADD("rom_board", "user1")
25362533   MCFG_X76F100_ADD("naomibd_eeprom")
25372534MACHINE_CONFIG_END
25382535
25392536/*
2537 * Naomi 1, unprotected ROM sub-board
2538 */
2539
2540static MACHINE_CONFIG_DERIVED( naomi, naomi_base )
2541   MCFG_NAOMI_ROM_BOARD_ADD("rom_board", "naomibd_eeprom", "maincpu", naomi_g1_irq)
2542MACHINE_CONFIG_END
2543
2544/*
25402545 * Naomi 1 GD-Rom
25412546 */
25422547
25432548static MACHINE_CONFIG_DERIVED( naomigd, naomi_base )
2544   MCFG_MIE_ADD("mie", 4000000, "maple_dc", 0, 0, 0, 0, "MIE:3", 0, "MIE:5", 0, 0) // Actual frequency unknown
2545   MCFG_SEGA_837_13551_DEVICE_ADD("837_13551", "mie", "TILT", "P1", "P2", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "OUTPUT")
2546   MCFG_EEPROM_93C46_8BIT_ADD("mie_eeprom")
2549   MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", "gdrom", "pic", "naomibd_eeprom", "maincpu", naomi_g1_irq)
2550MACHINE_CONFIG_END
25472551
2548   MCFG_NAOMI_DIMM_BOARD_ADD("rom_board", "gdrom", NULL, 512, "picreturn")
2549   MCFG_X76F100_ADD("naomibd_eeprom")
2552/*
2553 * Naomi 1, M1 sub-board
2554 */
2555
2556static MACHINE_CONFIG_DERIVED( naomim1, naomi_base )
2557   MCFG_NAOMI_M1_BOARD_ADD("rom_board", "rom_key", "naomibd_eeprom", "maincpu", naomi_g1_irq)
25502558MACHINE_CONFIG_END
25512559
25522560/*
2561 * Naomi 1, M2/3 sub-board
2562 */
2563
2564static MACHINE_CONFIG_DERIVED( naomim2, naomi_base )
2565   MCFG_NAOMI_M2_BOARD_ADD("rom_board", "rom_key", "naomibd_eeprom", "maincpu", naomi_g1_irq)
2566MACHINE_CONFIG_END
2567
2568/*
2569 * Naomi 1, M4 sub-board
2570 */
2571
2572static MACHINE_CONFIG_DERIVED( naomim4, naomi_base )
2573   MCFG_NAOMI_M4_BOARD_ADD("rom_board", "rom_key", "naomibd_eeprom", "maincpu", naomi_g1_irq)
2574MACHINE_CONFIG_END
2575
2576/*
25532577 * Naomi 2
25542578 */
25552579
r12704r12705
25682592MACHINE_CONFIG_END
25692593
25702594/*
2595 * Naomi 2, M1 sub-board
2596 */
2597
2598static MACHINE_CONFIG_DERIVED( naomi2m1, naomim1 )
2599   MCFG_CPU_MODIFY("maincpu")
2600   MCFG_CPU_PROGRAM_MAP(naomi2_map)
2601MACHINE_CONFIG_END
2602
2603/*
2604 * Naomi 2, M2/3 sub-board
2605 */
2606
2607static MACHINE_CONFIG_DERIVED( naomi2m2, naomim2 )
2608   MCFG_CPU_MODIFY("maincpu")
2609   MCFG_CPU_PROGRAM_MAP(naomi2_map)
2610MACHINE_CONFIG_END
2611
2612/*
25712613 * Atomiswave
25722614 */
25732615
2574static MACHINE_CONFIG_DERIVED( aw_base, naomi_base )
2575//  MCFG_DEVICE_REMOVE("main_eeprom")
2616static MACHINE_CONFIG_DERIVED( aw_base, naomi_aw_base )
25762617   MCFG_CPU_MODIFY("maincpu")
25772618   MCFG_CPU_PROGRAM_MAP(aw_map)
25782619   MCFG_MACRONIX_29L001MC_ADD("awflash")
2579   MCFG_AW_ROM_BOARD_ADD("rom_board", "user1")
2580   MCFG_X76F100_ADD("naomibd_eeprom")
2620   MCFG_AW_ROM_BOARD_ADD("rom_board", "rom_key", "maincpu", naomi_g1_irq)
25812621MACHINE_CONFIG_END
25822622
25832623static MACHINE_CONFIG_DERIVED( aw1c, aw_base )
r12704r12705
26742714// game specific bios roms quite clearly don't belong in here.
26752715// Japan bios is default, because most games require it.
26762716#define NAOMI_BIOS \
2717   ROM_REGION( 0x200000, "maincpu", 0) \
26772718   ROM_SYSTEM_BIOS( 0, "bios0", "epr-21576h (Japan)" ) \
26782719   ROM_LOAD16_WORD_SWAP_BIOS( 0, "epr-21576h.ic27",  0x000000, 0x200000, CRC(d4895685) SHA1(91424d481ff99a8d3f4c45cea6d3f0eada049a6d) ) \
26792720   ROM_SYSTEM_BIOS( 1, "bios1", "epr-21576g (Japan)" ) \
r12704r12705
27072748
27082749// bios for House of the Dead 2
27092750#define HOTD2_BIOS \
2751   ROM_REGION( 0x200000, "maincpu", 0) \
27102752   ROM_SYSTEM_BIOS( 0, "bios0", "HOTD2 (Export)" ) \
27112753   ROM_LOAD16_WORD_SWAP_BIOS( 0,  "epr-21331.ic27", 0x000000, 0x200000, CRC(065f8500) SHA1(49a3881e8d76f952ef5e887200d77b4a415d47fe) ) \
27122754   ROM_SYSTEM_BIOS( 1, "bios1", "HOTD2 (USA)" ) \
27132755   ROM_LOAD16_WORD_SWAP_BIOS( 1,  "epr-21330.ic27", 0x000000, 0x200000, CRC(9e3bfa1b) SHA1(b539d38c767b0551b8e7956c1ff795de8bbe2fbc) )
27142756
27152757#define F355_BIOS \
2758   ROM_REGION( 0x200000, "maincpu", 0) \
27162759   ROM_SYSTEM_BIOS( 0, "bios0", "Ferrari F355 (Export)" ) \
27172760   ROM_LOAD16_WORD_SWAP_BIOS( 0,  "epr-22851.ic27", 0x000000, 0x200000, CRC(62483677) SHA1(3e3bcacf5f972c376b569f45307ee7fd0b5031b7) ) \
27182761   ROM_SYSTEM_BIOS( 1, "bios1", "Ferrari F355 (USA)" ) \
27192762   ROM_LOAD16_WORD_SWAP_BIOS( 1,  "epr-22850.ic27", 0x000000, 0x200000, CRC(28aa539d) SHA1(14485368656af80504b212da620179c49f84c1a2) )
27202763
27212764#define AIRLINE_BIOS \
2765   ROM_REGION( 0x200000, "maincpu", 0) \
27222766   ROM_SYSTEM_BIOS( 0, "bios0", "Airline Pilots Deluxe (Export)" ) \
27232767   ROM_LOAD16_WORD_SWAP_BIOS( 0,  "epr-21802.ic27", 0x000000, 0x200000, CRC(a77c6b1c) SHA1(bd50a6bb8fa9bac121b076e21ea048a83a240a48) ) \
27242768   ROM_SYSTEM_BIOS( 1, "bios1", "Airline Pilots Deluxe (USA)" ) \
r12704r12705
28072851
28082852/* First half is BIOS, second half is game settings and is blanked/reprogrammed by the BIOS as necessary */
28092853#define AW_BIOS \
2854   ROM_REGION( 0x200000, "awflash", 0) \
28102855   ROM_SYSTEM_BIOS( 0, "bios0", "Atomiswave BIOS" ) \
28112856   ROM_LOAD16_WORD_SWAP_BIOS( 0, "bios.ic23_l", 0x000000, 0x010000, BAD_DUMP CRC(e5693ce3) SHA1(1bde3ed87af64b0f675ebd47f12a53e1fc5709c1) ) /* Might be bad.. especially. bytes 0x0000, 0x6000, 0x8000 which gave different reads */ \
28122857
r12704r12705
28232868   ROM_LOAD16_WORD("eeprom-naomi-main-default.bin", 0x0000, 0x0080, CRC(fea29cbb) SHA1(4099f1747aafa07db34f6e072cd9bfaa83bae10e) )
28242869
28252870ROM_START( naomi )
2826   ROM_REGION( 0x200000, "maincpu", 0)
28272871   NAOMI_BIOS
28282872   NAOMI_DEFAULT_EEPROM
28292873
2830   ROM_REGION( 0x8400000, "user1", ROMREGION_ERASE)
2874   ROM_REGION( 0x8400000, "rom_board", ROMREGION_ERASE)
28312875ROM_END
28322876
28332877ROM_START( naomigd )
28342878   NAOMIGD_BIOS
28352879   NAOMI_DEFAULT_EEPROM
28362880
2837   ROM_REGION( 0x8400000, "user1", ROMREGION_ERASE)
2881   ROM_REGION( 0x8400000, "rom_board", ROMREGION_ERASE)
28382882ROM_END
28392883
28402884ROM_START( hod2bios )
2841   ROM_REGION( 0x200000, "maincpu", 0)
28422885   HOTD2_BIOS
28432886   NAOMI_DEFAULT_EEPROM
28442887
2845   ROM_REGION( 0x8400000, "user1", ROMREGION_ERASE)
2888   ROM_REGION( 0x8400000, "rom_board", ROMREGION_ERASE)
28462889ROM_END
28472890
28482891ROM_START( f355bios )
2849   ROM_REGION( 0x200000, "maincpu", 0)
28502892   F355_BIOS
28512893   NAOMI_DEFAULT_EEPROM
28522894
2853   ROM_REGION( 0x8400000, "user1", ROMREGION_ERASE)
2895   ROM_REGION( 0x8400000, "rom_board", ROMREGION_ERASE)
28542896ROM_END
28552897
28562898ROM_START( airlbios )
2857   ROM_REGION( 0x200000, "maincpu", 0)
28582899   AIRLINE_BIOS
28592900   NAOMI_DEFAULT_EEPROM
28602901
2861   ROM_REGION( 0x8400000, "user1", ROMREGION_ERASE)
2902   ROM_REGION( 0x8400000, "rom_board", ROMREGION_ERASE)
28622903ROM_END
28632904
28642905ROM_START( naomi2 )
28652906   NAOMI2_BIOS
28662907   NAOMI_DEFAULT_EEPROM
28672908
2868   ROM_REGION( 0x8400000, "user1", ROMREGION_ERASE)
2909   ROM_REGION( 0x8400000, "rom_board", ROMREGION_ERASE)
28692910ROM_END
28702911
28712912ROM_START( awbios )
2872   ROM_REGION( 0x200000, "awflash", 0)
28732913   AW_BIOS
28742914
2875   ROM_REGION( 0x8400000, "user1", ROMREGION_ERASE)
2915   ROM_REGION( 0x8400000, "rom_board", ROMREGION_ERASE)
28762916ROM_END
28772917
28782918
r12704r12705
28992939IC4     64M     FBD4    AE40
29002940IC5     64M     1717    F3EC
29012941IC6     64M     A622    1D3D
2902IC7     64M     33A3    4480
2942C7     64M     33A3    4480
29032943IC8     64M     FC26    A49D
29042944IC9     64M     528D    5206
29052945IC10    64M     7C94    8779
r12704r12705
29092949*/
29102950
29112951ROM_START( cspike )
2912   ROM_REGION( 0x200000, "maincpu", 0)
29132952   NAOMI_BIOS
29142953   NAOMI_DEFAULT_EEPROM
29152954
2916   ROM_REGION( 0x6800000, "user1", ROMREGION_ERASEFF)
2955   ROM_REGION( 0x6800000, "rom_board", ROMREGION_ERASEFF)
29172956   ROM_LOAD("epr-23210.ic22", 0x0000000, 0x0400000, CRC(a15c54b5) SHA1(5c7872244d3d648e4c04751f120d0e9d47239921) )
29182957   ROM_RELOAD( 0x400000, 0x400000)
29192958   ROM_LOAD("mpr-23198.ic1",  0x0800000, 0x0800000, CRC(ce8d3edf) SHA1(1df5bb4eb440c221b8f1e5f019b02accc235fc28) )
r12704r12705
29282967   ROM_LOAD("mpr-23207.ic10", 0x5000000, 0x0800000, CRC(39f692a1) SHA1(14bc86b48a995378b4dd3609d38b90cddf2d7483) )
29292968   ROM_LOAD("mpr-23208.ic11", 0x5800000, 0x0800000, CRC(b9494f4b) SHA1(2f35b25edf5210a82d4b67e639eeae11440d065a) )
29302969   ROM_LOAD("mpr-23209.ic12s",0x6000000, 0x0800000, CRC(560188c0) SHA1(77f14c9a031c6e5414ffa854d20c40115361d715) )
2970
2971   ROM_REGION( 4, "rom_key", 0 )
2972   ROM_LOAD( "cspike-key.bin", 0, 4, CRC(a3e9c6d0) SHA1(c098eae7aee716fbdca39f0eb1f55bd54d398394) )
29312973ROM_END
29322974
29332975/*
r12704r12705
29572999
29583000// ver 000904
29593001ROM_START( capsnk )
2960   ROM_REGION( 0x200000, "maincpu", 0)
29613002   NAOMI_BIOS
29623003   NAOMI_DEFAULT_EEPROM
29633004
2964   ROM_REGION( 0x7800000, "user1", ROMREGION_ERASEFF)
3005   ROM_REGION( 0x7800000, "rom_board", ROMREGION_ERASEFF)
29653006   ROM_LOAD( "epr-23511c.ic22", 0x000000, 0x400000, CRC(3dbf8eb2) SHA1(1f7b89ba99e018cc85022fa852d56d4e345e1bd2) )
2966        ROM_LOAD( "mpr-23504.ic1", 0x0800000, 0x1000000, CRC(e01a31d2) SHA1(e00e138f6a20175c7aadb6500f6d7541b91def14) )
2967        ROM_LOAD( "mpr-23505.ic2", 0x1800000, 0x1000000, CRC(3a34d5fe) SHA1(f3c5f6fcbaa7004d371923eb412ea1fcf3fa461a) )
2968        ROM_LOAD( "mpr-23506.ic3", 0x2800000, 0x1000000, CRC(9cbab27d) SHA1(f166352355a03c9ccafbc15f926330b3622ec040) )
2969        ROM_LOAD( "mpr-23507.ic4", 0x3800000, 0x1000000, CRC(363c1734) SHA1(16b0485f1aacc8925b3c6d6152680139748e6df8) )
2970        ROM_LOAD( "mpr-23508.ic5", 0x4800000, 0x1000000, CRC(0a3590aa) SHA1(84c0e1853f069b003d09b268caee97e58c4dacb6) )
2971        ROM_LOAD( "mpr-23509.ic6", 0x5800000, 0x1000000, CRC(281d633d) SHA1(d773be8e95f7bf9212ee1061f3076220d4fce9e0) )
2972        ROM_LOAD( "mpr-23510.ic7", 0x6800000, 0x1000000, CRC(b856fef5) SHA1(0634f86740c438b40286256a0269570d24cb845a) )
3007   ROM_LOAD( "mpr-23504.ic1", 0x0800000, 0x1000000, CRC(e01a31d2) SHA1(e00e138f6a20175c7aadb6500f6d7541b91def14) )
3008   ROM_LOAD( "mpr-23505.ic2", 0x1800000, 0x1000000, CRC(3a34d5fe) SHA1(f3c5f6fcbaa7004d371923eb412ea1fcf3fa461a) )
3009   ROM_LOAD( "mpr-23506.ic3", 0x2800000, 0x1000000, CRC(9cbab27d) SHA1(f166352355a03c9ccafbc15f926330b3622ec040) )
3010   ROM_LOAD( "mpr-23507.ic4", 0x3800000, 0x1000000, CRC(363c1734) SHA1(16b0485f1aacc8925b3c6d6152680139748e6df8) )
3011   ROM_LOAD( "mpr-23508.ic5", 0x4800000, 0x1000000, CRC(0a3590aa) SHA1(84c0e1853f069b003d09b268caee97e58c4dacb6) )
3012   ROM_LOAD( "mpr-23509.ic6", 0x5800000, 0x1000000, CRC(281d633d) SHA1(d773be8e95f7bf9212ee1061f3076220d4fce9e0) )
3013   ROM_LOAD( "mpr-23510.ic7", 0x6800000, 0x1000000, CRC(b856fef5) SHA1(0634f86740c438b40286256a0269570d24cb845a) )
3014
3015   ROM_REGION( 4, "rom_key", 0 )
3016   ROM_LOAD( "capsnk-key.bin", 0, 4, CRC(2144df1c) SHA1(9069ca78e7450a285173431b3e52c5c25299e473) )
29733017ROM_END
29743018
29753019// ver 000804
29763020ROM_START( capsnka )
2977   ROM_REGION( 0x200000, "maincpu", 0)
29783021   NAOMI_BIOS
29793022   NAOMI_DEFAULT_EEPROM
29803023
2981   ROM_REGION( 0x7800000, "user1", ROMREGION_ERASEFF)
2982        ROM_LOAD( "epr23511a.ic22", 0x000000, 0x400000, CRC(fe00650f) SHA1(ca8e9e9178ed2b6598bdea83be1bf0dd7aa509f9) )
2983        ROM_LOAD( "mpr-23504.ic1", 0x0800000, 0x1000000, CRC(e01a31d2) SHA1(e00e138f6a20175c7aadb6500f6d7541b91def14) )
2984        ROM_LOAD( "mpr-23505.ic2", 0x1800000, 0x1000000, CRC(3a34d5fe) SHA1(f3c5f6fcbaa7004d371923eb412ea1fcf3fa461a) )
2985        ROM_LOAD( "mpr-23506.ic3", 0x2800000, 0x1000000, CRC(9cbab27d) SHA1(f166352355a03c9ccafbc15f926330b3622ec040) )
2986        ROM_LOAD( "mpr-23507.ic4", 0x3800000, 0x1000000, CRC(363c1734) SHA1(16b0485f1aacc8925b3c6d6152680139748e6df8) )
2987        ROM_LOAD( "mpr-23508.ic5", 0x4800000, 0x1000000, CRC(0a3590aa) SHA1(84c0e1853f069b003d09b268caee97e58c4dacb6) )
2988        ROM_LOAD( "mpr-23509.ic6", 0x5800000, 0x1000000, CRC(281d633d) SHA1(d773be8e95f7bf9212ee1061f3076220d4fce9e0) )
2989        ROM_LOAD( "mpr-23510.ic7", 0x6800000, 0x1000000, CRC(b856fef5) SHA1(0634f86740c438b40286256a0269570d24cb845a) )
3024   ROM_REGION( 0x7800000, "rom_board", ROMREGION_ERASEFF)
3025   ROM_LOAD( "epr23511a.ic22", 0x000000, 0x400000, CRC(fe00650f) SHA1(ca8e9e9178ed2b6598bdea83be1bf0dd7aa509f9) )
3026   ROM_LOAD( "mpr-23504.ic1", 0x0800000, 0x1000000, CRC(e01a31d2) SHA1(e00e138f6a20175c7aadb6500f6d7541b91def14) )
3027   ROM_LOAD( "mpr-23505.ic2", 0x1800000, 0x1000000, CRC(3a34d5fe) SHA1(f3c5f6fcbaa7004d371923eb412ea1fcf3fa461a) )
3028   ROM_LOAD( "mpr-23506.ic3", 0x2800000, 0x1000000, CRC(9cbab27d) SHA1(f166352355a03c9ccafbc15f926330b3622ec040) )
3029   ROM_LOAD( "mpr-23507.ic4", 0x3800000, 0x1000000, CRC(363c1734) SHA1(16b0485f1aacc8925b3c6d6152680139748e6df8) )
3030   ROM_LOAD( "mpr-23508.ic5", 0x4800000, 0x1000000, CRC(0a3590aa) SHA1(84c0e1853f069b003d09b268caee97e58c4dacb6) )
3031   ROM_LOAD( "mpr-23509.ic6", 0x5800000, 0x1000000, CRC(281d633d) SHA1(d773be8e95f7bf9212ee1061f3076220d4fce9e0) )
3032   ROM_LOAD( "mpr-23510.ic7", 0x6800000, 0x1000000, CRC(b856fef5) SHA1(0634f86740c438b40286256a0269570d24cb845a) )
3033
3034   ROM_REGION( 4, "rom_key", 0 )
3035   ROM_LOAD( "capsnka-key.bin", 0, 4, CRC(2144df1c) SHA1(9069ca78e7450a285173431b3e52c5c25299e473) )
29903036ROM_END
29913037
29923038/*
r12704r12705
30123058*/
30133059
30143060ROM_START( csmash )
3015   ROM_REGION( 0x200000, "maincpu", 0)
30163061   NAOMI_BIOS
30173062   NAOMI_DEFAULT_EEPROM
30183063
3019   ROM_REGION( 0x4800000, "user1", ROMREGION_ERASEFF)
3064   ROM_REGION( 0x4800000, "rom_board", ROMREGION_ERASEFF)
30203065   ROM_LOAD("epr-23428a.ic22", 0x0000000, 0x400000, CRC(d628dbce) SHA1(91ec1296ead572a64c37f8ac2c1a96742f19d50b) )
30213066   ROM_RELOAD( 0x400000, 0x400000)
30223067   ROM_LOAD("mpr-23420.ic1",   0x0800000, 0x0800000, CRC(9d5991f2) SHA1(c75871db314b01935d1daaacf1a762e73e5fd411) )
r12704r12705
30273072   ROM_LOAD("mpr-23425.ic6",   0x3000000, 0x0800000, CRC(47f51da2) SHA1(af5ecd460114caed3a00157ffd3a2df0fbf348c0) )
30283073   ROM_LOAD("mpr-23426.ic7",   0x3800000, 0x0800000, CRC(7f91b13f) SHA1(2d534f77291ebfedc011bf0e803a1b9243fb477f) )
30293074   ROM_LOAD("mpr-23427.ic8",   0x4000000, 0x0800000, CRC(5851d525) SHA1(1cb1073542d75a3bcc0d363ed31d49bcaf1fd494) )
3075
3076   ROM_REGION( 4, "rom_key", 0 )
3077   ROM_LOAD( "csmash-key.bin", 0, 4, CRC(21b1cd6f) SHA1(a74eef5e3475cc6952f4ffe31579769a854b62a9) )
30303078ROM_END
30313079
30323080ROM_START( csmasho )
3033   ROM_REGION( 0x200000, "maincpu", 0)
30343081   NAOMI_BIOS
30353082   NAOMI_DEFAULT_EEPROM
30363083
3037   ROM_REGION( 0x4800000, "user1", ROMREGION_ERASEFF)
3084   ROM_REGION( 0x4800000, "rom_board", ROMREGION_ERASEFF)
30383085   ROM_LOAD("epr-23428.ic22", 0x0000000, 0x400000, CRC(f8597496) SHA1(2bb9f25b63b7410934ae4b1e052e1308a5c5a57f) )
30393086   ROM_RELOAD( 0x400000, 0x400000)
30403087   ROM_LOAD("mpr-23420.ic1", 0x0800000, 0x0800000, CRC(9d5991f2) SHA1(c75871db314b01935d1daaacf1a762e73e5fd411) )
r12704r12705
30453092   ROM_LOAD("mpr-23425.ic6", 0x3000000, 0x0800000, CRC(47f51da2) SHA1(af5ecd460114caed3a00157ffd3a2df0fbf348c0) )
30463093   ROM_LOAD("mpr-23426.ic7", 0x3800000, 0x0800000, CRC(7f91b13f) SHA1(2d534f77291ebfedc011bf0e803a1b9243fb477f) )
30473094   ROM_LOAD("mpr-23427.ic8", 0x4000000, 0x0800000, CRC(5851d525) SHA1(1cb1073542d75a3bcc0d363ed31d49bcaf1fd494) )
3095
3096   ROM_REGION( 4, "rom_key", 0 )
3097   ROM_LOAD( "csmasho-key.bin", 0, 4, CRC(21b1cd6f) SHA1(a74eef5e3475cc6952f4ffe31579769a854b62a9) )
30483098ROM_END
30493099
30503100/*
r12704r12705
30573107*/
30583108
30593109ROM_START( deathcox )
3060   ROM_REGION( 0x200000, "maincpu", 0)
30613110   NAOMI_BIOS
30623111   NAOMI_DEFAULT_EEPROM
30633112
3064   ROM_REGION( 0x5800000, "user1", ROMREGION_ERASEFF)
3113   ROM_REGION( 0x5800000, "rom_board", ROMREGION_ERASEFF)
30653114   ROM_LOAD("epr-23524.ic22",0x0000000, 0x0400000, CRC(edc20e44) SHA1(6167ee86624f5b78b3ced0dd82259e83053f4f9d) )
30663115   ROM_RELOAD( 0x400000, 0x400000)
30673116   ROM_LOAD("mpr-23514.ic1", 0x0800000, 0x0800000, CRC(1f2b090e) SHA1(f2863d306512112cd3025c9ce3300ac0a396ee2d) )
r12704r12705
30743123   ROM_LOAD("mpr-23521.ic8", 0x4000000, 0x0800000, CRC(cf8674b8) SHA1(bdd2a0ef98138021707b3dd06b1d9855308ed3ec) )
30753124   ROM_LOAD("mpr-23522.ic9", 0x4800000, 0x0800000, CRC(7ae6716e) SHA1(658b794ae6e3898885524582a207faa1076a65ca) )
30763125   ROM_LOAD("mpr-23523.ic10",0x5000000, 0x0800000, CRC(c91efb67) SHA1(3d79870551310da7a641858ffec3840714e9cc22) )
3126
3127   ROM_REGION( 4, "rom_key", 0 )
3128   ROM_LOAD( "deathcox-key.bin", 0, 4, CRC(aa534c8a) SHA1(fcc45e477c646b51afe7c4168d7246964a1f23b5) )
30773129ROM_END
30783130
30793131/*
r12704r12705
31103162*/
31113163
31123164ROM_START( doa2 )
3113   ROM_REGION( 0x200000, "maincpu", 0)
31143165   NAOMI_BIOS
31153166   NAOMI_DEFAULT_EEPROM_NO_BD
31163167
3117   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3168   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
31183169   ROM_LOAD("epr-22121.ic22",0x0000000, 0x0400000,  CRC(30f93b5e) SHA1(0e33383e7ab9a721dab4708b063598f2e9c9f2e7) ) // partially encrypted
31193170
31203171   ROM_LOAD("mpr-22100.ic1", 0x0800000, 0x0800000, CRC(92a53e5e) SHA1(87fcdeee9c4e65a3eb6eb345eed85d4f2df26c3c) )
r12704r12705
31393190   ROM_LOAD("mpr-22119.ic20",0xa000000, 0x0800000, CRC(d608fa86) SHA1(54c8107cccec8cbb536f13cda5b220b7972190b7) )
31403191   ROM_LOAD("mpr-22120.ic21",0xa800000, 0x0800000, CRC(a30facb4) SHA1(70415ca34095c795297486bce1f956f6a8d4817f) )
31413192
3193   ROM_REGION( 4, "rom_key", 0 )
3194   ROM_LOAD( "doa2-key.bin", 0, 4, CRC(43f97c96) SHA1(7d1e6fcca3ca936f33d59d57834c3e4ff74f587d) )
3195
31423196   // on-cart X76F100 eeprom contents
31433197   ROM_REGION( 0x84, "naomibd_eeprom", 0 )
31443198   ROM_LOAD( "841-0003.sf",  0x000000, 0x000084, CRC(3a119a17) SHA1(d37a092cca7c9cfc5f2637b355af90a65d04013e) )
r12704r12705
31803234*/
31813235
31823236ROM_START( doa2m )
3183   ROM_REGION( 0x200000, "maincpu", 0)
31843237   NAOMI_BIOS
31853238   NAOMI_DEFAULT_EEPROM_NO_BD
31863239
3187   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3240   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
31883241   ROM_LOAD("doa2verm.ic22", 0x0000000, 0x0400000,  CRC(94b16f08) SHA1(225cd3e5dd5f21facf0a1d5e66fa17db8497573d) )
31893242
31903243   ROM_LOAD("mpr-22100.ic1", 0x0800000, 0x0800000, CRC(92a53e5e) SHA1(87fcdeee9c4e65a3eb6eb345eed85d4f2df26c3c) )
r12704r12705
32093262   ROM_LOAD("mpr-22119.ic20",0xa000000, 0x0800000, CRC(d608fa86) SHA1(54c8107cccec8cbb536f13cda5b220b7972190b7) )
32103263   ROM_LOAD("mpr-22120.ic21",0xa800000, 0x0800000, CRC(a30facb4) SHA1(70415ca34095c795297486bce1f956f6a8d4817f) )
32113264
3265   ROM_REGION( 4, "rom_key", 0 )
3266   ROM_LOAD( "doa2m-key.bin", 0, 4, CRC(43f97c96) SHA1(7d1e6fcca3ca936f33d59d57834c3e4ff74f587d) )
3267
32123268   // on-cart X76F100 eeprom contents
32133269   ROM_REGION( 0x84, "naomibd_eeprom", 0 )
32143270   ROM_LOAD( "841-0003.sf",  0x000000, 0x000084, CRC(3a119a17) SHA1(d37a092cca7c9cfc5f2637b355af90a65d04013e) )
r12704r12705
32433299*/
32443300
32453301ROM_START( derbyoc )
3246   ROM_REGION( 0x200000, "maincpu", 0)
32473302   NAOMI_BIOS
32483303   NAOMI_DEFAULT_EEPROM
32493304
3250   ROM_REGION( 0x7800000, "user1", ROMREGION_ERASEFF)
3305   ROM_REGION( 0x7800000, "rom_board", ROMREGION_ERASEFF)
32513306   ROM_LOAD("epr-22099b.ic22", 0x0000000, 0x0400000, CRC(5e708879) SHA1(fada4f4bf29fc8f77f354167f8db4f904610fe1a) )
32523307   ROM_LOAD("mpr-22085.ic1",   0x0800000, 0x0800000, CRC(fffe9cc5) SHA1(ce6082fc648718b3831f709ba8b6212946c72d70) )
32533308   ROM_LOAD("mpr-22086.ic2",   0x1000000, 0x0800000, CRC(610fe214) SHA1(c982d9e4722c2b6cb87f2bc3e2ac0f764f0bae79) )
r12704r12705
32633318   ROM_LOAD("mpr-22096.ic12",  0x6000000, 0x0800000, CRC(d8c41648) SHA1(d465f4b841164da0738336e203c5bc6e1e799a76) )
32643319   ROM_LOAD("mpr-22097.ic13",  0x6800000, 0x0800000, CRC(f1dedac5) SHA1(9d4499cbafe80dd0b36be617de7994a96e1e9a01) )
32653320   ROM_LOAD("mpr-22098.ic14",  0x7000000, 0x0800000, CRC(f9824d2e) SHA1(f20f8cc2b1bef9077ede1cb874da8f2a335d39de) )
3321
3322   ROM_REGION( 4, "rom_key", 0 )
3323   ROM_LOAD( "derbyoc-key.bin", 0, 4, CRC(bc568260) SHA1(6dc4923a730bc0380490519c82f1443226365c3a) )
32663324ROM_END
32673325
32683326ROM_START( derbyocw )
3269   ROM_REGION( 0x200000, "maincpu", 0)
32703327   NAOMI_BIOS
32713328   NAOMI_DEFAULT_EEPROM
32723329
3273   ROM_REGION( 0x7800000, "user1", ROMREGION_ERASEFF)
3274      ROM_LOAD( "epr-22336d.ic22",0x000000, 0x0400000, CRC(e6c0cb0c) SHA1(b8c7fe62cb370793fd5ed0af27c18d36e9c0ce54) )
3275        ROM_LOAD( "mpr-22328.ic1", 0x0800000, 0x1000000, CRC(179cec02) SHA1(cbaba86082370a082d2e9f18427691d5cfa0e4f0) )
3276        ROM_LOAD( "mpr-22329.ic2", 0x1800000, 0x1000000, CRC(e0d5b98c) SHA1(5bf1ac0d895fd7725d170a54f01cd717a5e54110) )
3277        ROM_LOAD( "mpr-22330.ic3", 0x2800000, 0x1000000, CRC(6737cd62) SHA1(08429ca39fef3b36cb491813ddcd0feef3b24372) )
3278        ROM_LOAD( "mpr-22331.ic4", 0x3800000, 0x1000000, CRC(8fb5cbcf) SHA1(c4e6cbbe7d3549e1841654b41b1946b9bc356e74) )
3279        ROM_LOAD( "mpr-22332.ic5", 0x4800000, 0x1000000, CRC(c5e365a8) SHA1(5839ea24b8fd02552931175d35e2ceca75fca089) )
3280        ROM_LOAD( "mpr-22337.ic6", 0x5800000, 0x1000000, CRC(87ca3a2f) SHA1(2ffc01597107eb60dfa7aa49d51f203b51a44334) )
3281        ROM_LOAD( "mpr-22338.ic7", 0x6800000, 0x1000000, CRC(4bda7303) SHA1(db27d91ef811d741cfdb5c0196e61be722c2f5bd) )
3330   ROM_REGION( 0x7800000, "rom_board", ROMREGION_ERASEFF)
3331   ROM_LOAD( "epr-22336d.ic22",0x000000, 0x0400000, CRC(e6c0cb0c) SHA1(b8c7fe62cb370793fd5ed0af27c18d36e9c0ce54) )
3332   ROM_LOAD( "mpr-22328.ic1", 0x0800000, 0x1000000, CRC(179cec02) SHA1(cbaba86082370a082d2e9f18427691d5cfa0e4f0) )
3333   ROM_LOAD( "mpr-22329.ic2", 0x1800000, 0x1000000, CRC(e0d5b98c) SHA1(5bf1ac0d895fd7725d170a54f01cd717a5e54110) )
3334   ROM_LOAD( "mpr-22330.ic3", 0x2800000, 0x1000000, CRC(6737cd62) SHA1(08429ca39fef3b36cb491813ddcd0feef3b24372) )
3335   ROM_LOAD( "mpr-22331.ic4", 0x3800000, 0x1000000, CRC(8fb5cbcf) SHA1(c4e6cbbe7d3549e1841654b41b1946b9bc356e74) )
3336   ROM_LOAD( "mpr-22332.ic5", 0x4800000, 0x1000000, CRC(c5e365a8) SHA1(5839ea24b8fd02552931175d35e2ceca75fca089) )
3337   ROM_LOAD( "mpr-22337.ic6", 0x5800000, 0x1000000, CRC(87ca3a2f) SHA1(2ffc01597107eb60dfa7aa49d51f203b51a44334) )
3338   ROM_LOAD( "mpr-22338.ic7", 0x6800000, 0x1000000, CRC(4bda7303) SHA1(db27d91ef811d741cfdb5c0196e61be722c2f5bd) )
32823339ROM_END
32833340
32843341ROM_START( drbyocwc )
3285   ROM_REGION( 0x200000, "maincpu", 0)
32863342   NAOMI_BIOS
32873343   NAOMI_DEFAULT_EEPROM
32883344
3289   ROM_REGION( 0x7800000, "user1", ROMREGION_ERASEFF)
3290        ROM_LOAD( "epr-22336c.ic22", 0x000000, 0x400000, CRC(50053f82) SHA1(5b31abb480043ece3645b2479ba566ac6592acd8) )
3291        ROM_LOAD( "mpr-22328.ic1", 0x0800000, 0x1000000, CRC(179cec02) SHA1(cbaba86082370a082d2e9f18427691d5cfa0e4f0) )
3292        ROM_LOAD( "mpr-22329.ic2", 0x1800000, 0x1000000, CRC(e0d5b98c) SHA1(5bf1ac0d895fd7725d170a54f01cd717a5e54110) )
3293        ROM_LOAD( "mpr-22330.ic3", 0x2800000, 0x1000000, CRC(6737cd62) SHA1(08429ca39fef3b36cb491813ddcd0feef3b24372) )
3294        ROM_LOAD( "mpr-22331.ic4", 0x3800000, 0x1000000, CRC(8fb5cbcf) SHA1(c4e6cbbe7d3549e1841654b41b1946b9bc356e74) )
3295        ROM_LOAD( "mpr-22332.ic5", 0x4800000, 0x1000000, CRC(c5e365a8) SHA1(5839ea24b8fd02552931175d35e2ceca75fca089) )
3296        ROM_LOAD( "mpr-22333.ic6", 0x5800000, 0x1000000, CRC(96f324aa) SHA1(bc41e2097c1841771d786ba9ad1a31df1494a856) )
3297        ROM_LOAD( "mpr-22334.ic7", 0x6800000, 0x1000000, CRC(5389b05a) SHA1(e206e4d82d7b1a59c33043ec0812eb69be08d9b3) )
3345   ROM_REGION( 0x7800000, "rom_board", ROMREGION_ERASEFF)
3346   ROM_LOAD( "epr-22336c.ic22", 0x000000, 0x400000, CRC(50053f82) SHA1(5b31abb480043ece3645b2479ba566ac6592acd8) )
3347   ROM_LOAD( "mpr-22328.ic1", 0x0800000, 0x1000000, CRC(179cec02) SHA1(cbaba86082370a082d2e9f18427691d5cfa0e4f0) )
3348   ROM_LOAD( "mpr-22329.ic2", 0x1800000, 0x1000000, CRC(e0d5b98c) SHA1(5bf1ac0d895fd7725d170a54f01cd717a5e54110) )
3349   ROM_LOAD( "mpr-22330.ic3", 0x2800000, 0x1000000, CRC(6737cd62) SHA1(08429ca39fef3b36cb491813ddcd0feef3b24372) )
3350   ROM_LOAD( "mpr-22331.ic4", 0x3800000, 0x1000000, CRC(8fb5cbcf) SHA1(c4e6cbbe7d3549e1841654b41b1946b9bc356e74) )
3351   ROM_LOAD( "mpr-22332.ic5", 0x4800000, 0x1000000, CRC(c5e365a8) SHA1(5839ea24b8fd02552931175d35e2ceca75fca089) )
3352   ROM_LOAD( "mpr-22333.ic6", 0x5800000, 0x1000000, CRC(96f324aa) SHA1(bc41e2097c1841771d786ba9ad1a31df1494a856) )
3353   ROM_LOAD( "mpr-22334.ic7", 0x6800000, 0x1000000, CRC(5389b05a) SHA1(e206e4d82d7b1a59c33043ec0812eb69be08d9b3) )
32983354ROM_END
32993355
33003356/*
r12704r12705
33053361*/
33063362
33073363ROM_START( derbyoc2 )
3308   ROM_REGION( 0x200000, "maincpu", 0)
33093364   NAOMI_BIOS
33103365   NAOMI_DEFAULT_EEPROM
33113366
3312   ROM_REGION( 0xb800000, "user1", ROMREGION_ERASEFF)
3367   ROM_REGION( 0xb800000, "rom_board", ROMREGION_ERASEFF)
33133368   ROM_LOAD("epr-22306b.ic22",  0x0000000, 0x0400000, CRC(fcac20eb) SHA1(26cec9f615cd18ce7fccfc5e273e42c58dea1995) )
3314        ROM_LOAD( "mpr-22295.ic1",  0x0800000, 0x1000000, CRC(1085001b) SHA1(096ac0ecc7d5324f04514d24eb338de591926a3d) )
3315        ROM_LOAD( "mpr-22296.ic2",  0x1800000, 0x1000000, CRC(f18cb28b) SHA1(e7f253a35e15f62e178a1ff565f8a94102eea057) )
3316        ROM_LOAD( "mpr-22297.ic3",  0x2800000, 0x1000000, CRC(a78a527b) SHA1(7d4e7bd93519377a8676f7ca6f72c4d0de2a0475) )
3317        ROM_LOAD( "mpr-22298.ic4",  0x3800000, 0x1000000, CRC(cd76c7ea) SHA1(2db200c8853d1bc9da31da6c197c6b55e570dc69) )
3318        ROM_LOAD( "mpr-22299.ic5",  0x4800000, 0x1000000, CRC(ffb96da5) SHA1(bfe8f4a455d3eeec0fa9728fc1bb52cebd13b2a8) )
3319        ROM_LOAD( "mpr-22300.ic6",  0x5800000, 0x1000000, CRC(6fb05214) SHA1(9cececc46ac463bc5df3c3f5fb9268d5ced31837) )
3320        ROM_LOAD( "mpr-22301.ic7",  0x6800000, 0x1000000, CRC(52eb076d) SHA1(a79bb286594cc5d196a37a17147ad1770db5cd67) )
3321        ROM_LOAD( "mpr-22302.ic8",  0x7800000, 0x1000000, CRC(86767b0b) SHA1(54ed418cef78506fb824e3d16cadefdb684f2b34) )
3322        ROM_LOAD( "mpr-22303.ic9",  0x8800000, 0x1000000, CRC(73a80bd5) SHA1(d607f1d993af4b78d3609991e47e9540664380fd) )
3323        ROM_LOAD( "mpr-22304.ic10", 0x9800000, 0x1000000, CRC(46c1fb1f) SHA1(6daca76a75df3501f77e473eb065d48804fcc64a) )
3324        ROM_LOAD( "mpr-22305.ic11", 0xa800000, 0x1000000, CRC(027d0e7b) SHA1(e3c874e60cabb6f9ce686696d9055a0c0d5289ae) )
3369   ROM_LOAD( "mpr-22295.ic1",  0x0800000, 0x1000000, CRC(1085001b) SHA1(096ac0ecc7d5324f04514d24eb338de591926a3d) )
3370   ROM_LOAD( "mpr-22296.ic2",  0x1800000, 0x1000000, CRC(f18cb28b) SHA1(e7f253a35e15f62e178a1ff565f8a94102eea057) )
3371   ROM_LOAD( "mpr-22297.ic3",  0x2800000, 0x1000000, CRC(a78a527b) SHA1(7d4e7bd93519377a8676f7ca6f72c4d0de2a0475) )
3372   ROM_LOAD( "mpr-22298.ic4",  0x3800000, 0x1000000, CRC(cd76c7ea) SHA1(2db200c8853d1bc9da31da6c197c6b55e570dc69) )
3373   ROM_LOAD( "mpr-22299.ic5",  0x4800000, 0x1000000, CRC(ffb96da5) SHA1(bfe8f4a455d3eeec0fa9728fc1bb52cebd13b2a8) )
3374   ROM_LOAD( "mpr-22300.ic6",  0x5800000, 0x1000000, CRC(6fb05214) SHA1(9cececc46ac463bc5df3c3f5fb9268d5ced31837) )
3375   ROM_LOAD( "mpr-22301.ic7",  0x6800000, 0x1000000, CRC(52eb076d) SHA1(a79bb286594cc5d196a37a17147ad1770db5cd67) )
3376   ROM_LOAD( "mpr-22302.ic8",  0x7800000, 0x1000000, CRC(86767b0b) SHA1(54ed418cef78506fb824e3d16cadefdb684f2b34) )
3377   ROM_LOAD( "mpr-22303.ic9",  0x8800000, 0x1000000, CRC(73a80bd5) SHA1(d607f1d993af4b78d3609991e47e9540664380fd) )
3378   ROM_LOAD( "mpr-22304.ic10", 0x9800000, 0x1000000, CRC(46c1fb1f) SHA1(6daca76a75df3501f77e473eb065d48804fcc64a) )
3379   ROM_LOAD( "mpr-22305.ic11", 0xa800000, 0x1000000, CRC(027d0e7b) SHA1(e3c874e60cabb6f9ce686696d9055a0c0d5289ae) )
33253380ROM_END
33263381
33273382/*
r12704r12705
33723427*/
33733428
33743429ROM_START( dybbnao )
3375   ROM_REGION( 0x200000, "maincpu", 0)
33763430   NAOMI_BIOS
33773431   NAOMI_DEFAULT_EEPROM
33783432
3379   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3433   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
33803434   ROM_LOAD("epr-21575.ic22",0x0000000, 0x0200000, CRC(ba61e248) SHA1(3cce5d8b307038515d7da7ec567bfa2e3aafc274) )
33813435   ROM_LOAD("mpr-21554.ic1", 0x0800000, 0x0800000, CRC(6eb29c37) SHA1(3548a93f9efa3bd548f9e30223a9b3570031f126) )
33823436   ROM_LOAD("mpr-21555.ic2", 0x1000000, 0x0800000, CRC(3ff79959) SHA1(abd5407fcfa5556fc3f0c56892daad0c741a681f) )
r12704r12705
34353489*/
34363490
34373491ROM_START( dybb99 )
3438   ROM_REGION( 0x200000, "maincpu", 0)
34393492   NAOMI_BIOS
34403493   NAOMI_DEFAULT_EEPROM
34413494
3442   ROM_REGION( 0xa000000, "user1", ROMREGION_ERASEFF)
3495   ROM_REGION( 0xa000000, "rom_board", ROMREGION_ERASEFF)
34433496   ROM_LOAD("epr-22141b.ic22",0x0000000, 0x0200000, CRC(6d0e0785) SHA1(aa19e7bac4c266771d1e65cffa534a49d7566f51) )
34443497   ROM_LOAD("mpr-22122.ic1",  0x0800000, 0x0800000, CRC(403da794) SHA1(321bc5b8966d05e60110bc0b17d0f37fe1facc56) )
34453498   ROM_LOAD("mpr-22123.ic2",  0x1000000, 0x0800000, CRC(14cfeab8) SHA1(593d006bc2e6f4d1602d7045dc51d974fc5bbd4c) )
r12704r12705
34603513   ROM_LOAD("mpr-22138.ic17", 0x8800000, 0x0800000, CRC(59557b9f) SHA1(beda44c65c69110bdf8afb7542ae39913dab54f2) )
34613514   ROM_LOAD("mpr-22139.ic18", 0x9000000, 0x0800000, CRC(92faa2ca) SHA1(4953f0219c3ae62de0a89473cb7b9dd30b33fcfb) )
34623515   ROM_LOAD("mpr-22140.ic19", 0x9800000, 0x0800000, CRC(4cb54893) SHA1(a99b39cc3c82c3cf90f794bb8c8ba60638a6f921) )
3516
3517   ROM_REGION( 4, "rom_key", 0 )
3518   ROM_LOAD( "dybb99-key.bin", 0, 4, CRC(90263797) SHA1(83649c8b3e562bee1f08663e59c5ba8f404ed36c) )
34633519ROM_END
34643520
34653521ROM_START( smlg99 )
3466   ROM_REGION( 0x200000, "maincpu", 0)
34673522   NAOMI_BIOS
34683523   NAOMI_DEFAULT_EEPROM
34693524
3470   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3471        ROM_LOAD( "epr-22059.ic22", 0x0000000, 0x200000, CRC(5784f970) SHA1(e9ec692206a95cc260521154305693f6022190bc) )
3472        ROM_LOAD( "mpr-22038.ic1",  0x0800000, 0x800000, CRC(0a59fc5b) SHA1(efcbe2f847927fba173d333c889dd7df329d6df6) )
3473        ROM_LOAD( "mpr-22039.ic2",  0x1000000, 0x800000, CRC(4de79b52) SHA1(c63a3ce88db316e882948baf121fa96242010c8d) )
3474        ROM_LOAD( "mpr-22040.ic3",  0x1800000, 0x800000, CRC(b993fd90) SHA1(609de1509f393f884813ca4bcac533e10088ca84) )
3475        ROM_LOAD( "mpr-22041.ic4",  0x2000000, 0x800000, CRC(ddadfabd) SHA1(64531e68b10635415d49c0304a8ba550a3a9cef1) )
3476        ROM_LOAD( "mpr-22042.ic5",  0x2800000, 0x800000, CRC(136c101e) SHA1(a35d8d574b263d672a08963a992a7b507c838b70) )
3477        ROM_LOAD( "mpr-22043.ic6",  0x3000000, 0x800000, CRC(7f15a0a5) SHA1(5c36fa580f7eef448fb32d050078843470fafb31) )
3478        ROM_LOAD( "mpr-22044.ic7",  0x3800000, 0x800000, CRC(94376002) SHA1(8c4b954da69a079d9a73b8f34a9f1a94cceee9cc) )
3479        ROM_LOAD( "mpr-22045.ic8",  0x4000000, 0x800000, CRC(e520e2d9) SHA1(c7a9306b2dafb20baaa8bd6708fb5ece775c37f0) )
3480        ROM_LOAD( "mpr-22046.ic9",  0x4800000, 0x800000, CRC(976edfc8) SHA1(340b701b9e1d256963a8fe056ec975d8cbfec3d8) )
3481        ROM_LOAD( "mpr-22047.ic10", 0x5000000, 0x800000, CRC(32b136de) SHA1(4019e9836174b47135d7e1bbc02c23dd3ab52904) )
3482        ROM_LOAD( "mpr-22048.ic11", 0x5800000, 0x800000, CRC(32a9488a) SHA1(70c11fbcb1e24ed120f74aa455806e7dfbfa75b5) )
3483        ROM_LOAD( "mpr-22049.ic12", 0x6000000, 0x800000, CRC(8295696d) SHA1(5820cac054070aa35a64abc5bf8c6f45fe9be03f) )
3484        ROM_LOAD( "mpr-22050.ic13", 0x6800000, 0x800000, CRC(1cfebe44) SHA1(24415f723cd6c1efaa2513f6b52e076364eb0875) )
3485        ROM_LOAD( "mpr-22051.ic14", 0x7000000, 0x800000, CRC(58b9dbef) SHA1(1021d4dfbd5bcf6e1703ce608560c76d60dac71c) )
3486        ROM_LOAD( "mpr-22052.ic15", 0x7800000, 0x800000, CRC(95b87c1d) SHA1(bf0a89703fea7bd37e4d0fd10c7729d2cfe848d6) )
3487        ROM_LOAD( "mpr-22053.ic16", 0x8000000, 0x800000, CRC(666589a1) SHA1(130477f247661e87bdc4f2370788ca676336f563) )
3488        ROM_LOAD( "mpr-22054.ic17", 0x8800000, 0x800000, CRC(9d8c82e9) SHA1(13ebf9ffac9e1e960fa9662800c5e682284a5cdd) )
3489        ROM_LOAD( "mpr-22055.ic18", 0x9000000, 0x800000, CRC(fa865125) SHA1(04e0d77287f4e29df514875683992ede1e385dbc) )
3490        ROM_LOAD( "mpr-22056.ic19", 0x9800000, 0x800000, CRC(45a23d29) SHA1(2499637a4b389cda7cc9a7aa21014696bd1dafe2) )
3491        ROM_LOAD( "mpr-22057.ic20", 0xa000000, 0x800000, CRC(a056c109) SHA1(637e80c2d605851265430b0fa771a4ad5233be8a) )
3492        ROM_LOAD( "mpr-22058.ic21", 0xa800000, 0x800000, CRC(f16edaa0) SHA1(e093f5594df43c592a9acd45002ecc65035c2435) )
3525   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
3526   ROM_LOAD( "epr-22059.ic22", 0x0000000, 0x200000, CRC(5784f970) SHA1(e9ec692206a95cc260521154305693f6022190bc) )
3527   ROM_LOAD( "mpr-22038.ic1",  0x0800000, 0x800000, CRC(0a59fc5b) SHA1(efcbe2f847927fba173d333c889dd7df329d6df6) )
3528   ROM_LOAD( "mpr-22039.ic2",  0x1000000, 0x800000, CRC(4de79b52) SHA1(c63a3ce88db316e882948baf121fa96242010c8d) )
3529   ROM_LOAD( "mpr-22040.ic3",  0x1800000, 0x800000, CRC(b993fd90) SHA1(609de1509f393f884813ca4bcac533e10088ca84) )
3530   ROM_LOAD( "mpr-22041.ic4",  0x2000000, 0x800000, CRC(ddadfabd) SHA1(64531e68b10635415d49c0304a8ba550a3a9cef1) )
3531   ROM_LOAD( "mpr-22042.ic5",  0x2800000, 0x800000, CRC(136c101e) SHA1(a35d8d574b263d672a08963a992a7b507c838b70) )
3532   ROM_LOAD( "mpr-22043.ic6",  0x3000000, 0x800000, CRC(7f15a0a5) SHA1(5c36fa580f7eef448fb32d050078843470fafb31) )
3533   ROM_LOAD( "mpr-22044.ic7",  0x3800000, 0x800000, CRC(94376002) SHA1(8c4b954da69a079d9a73b8f34a9f1a94cceee9cc) )
3534   ROM_LOAD( "mpr-22045.ic8",  0x4000000, 0x800000, CRC(e520e2d9) SHA1(c7a9306b2dafb20baaa8bd6708fb5ece775c37f0) )
3535   ROM_LOAD( "mpr-22046.ic9",  0x4800000, 0x800000, CRC(976edfc8) SHA1(340b701b9e1d256963a8fe056ec975d8cbfec3d8) )
3536   ROM_LOAD( "mpr-22047.ic10", 0x5000000, 0x800000, CRC(32b136de) SHA1(4019e9836174b47135d7e1bbc02c23dd3ab52904) )
3537   ROM_LOAD( "mpr-22048.ic11", 0x5800000, 0x800000, CRC(32a9488a) SHA1(70c11fbcb1e24ed120f74aa455806e7dfbfa75b5) )
3538   ROM_LOAD( "mpr-22049.ic12", 0x6000000, 0x800000, CRC(8295696d) SHA1(5820cac054070aa35a64abc5bf8c6f45fe9be03f) )
3539   ROM_LOAD( "mpr-22050.ic13", 0x6800000, 0x800000, CRC(1cfebe44) SHA1(24415f723cd6c1efaa2513f6b52e076364eb0875) )
3540   ROM_LOAD( "mpr-22051.ic14", 0x7000000, 0x800000, CRC(58b9dbef) SHA1(1021d4dfbd5bcf6e1703ce608560c76d60dac71c) )
3541   ROM_LOAD( "mpr-22052.ic15", 0x7800000, 0x800000, CRC(95b87c1d) SHA1(bf0a89703fea7bd37e4d0fd10c7729d2cfe848d6) )
3542   ROM_LOAD( "mpr-22053.ic16", 0x8000000, 0x800000, CRC(666589a1) SHA1(130477f247661e87bdc4f2370788ca676336f563) )
3543   ROM_LOAD( "mpr-22054.ic17", 0x8800000, 0x800000, CRC(9d8c82e9) SHA1(13ebf9ffac9e1e960fa9662800c5e682284a5cdd) )
3544   ROM_LOAD( "mpr-22055.ic18", 0x9000000, 0x800000, CRC(fa865125) SHA1(04e0d77287f4e29df514875683992ede1e385dbc) )
3545   ROM_LOAD( "mpr-22056.ic19", 0x9800000, 0x800000, CRC(45a23d29) SHA1(2499637a4b389cda7cc9a7aa21014696bd1dafe2) )
3546   ROM_LOAD( "mpr-22057.ic20", 0xa000000, 0x800000, CRC(a056c109) SHA1(637e80c2d605851265430b0fa771a4ad5233be8a) )
3547   ROM_LOAD( "mpr-22058.ic21", 0xa800000, 0x800000, CRC(f16edaa0) SHA1(e093f5594df43c592a9acd45002ecc65035c2435) )
3548
3549   ROM_REGION( 4, "rom_key", 0 )
3550   ROM_LOAD( "smlg99-key.bin", 0, 4, CRC(90263797) SHA1(83649c8b3e562bee1f08663e59c5ba8f404ed36c) )
34933551ROM_END
34943552
34953553/*
r12704r12705
35023560*/
35033561
35043562ROM_START( f355 )
3505   ROM_REGION( 0x200000, "maincpu", 0)
35063563   F355_BIOS
35073564   NAOMI_DEFAULT_EEPROM
35083565
3509   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3566   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
35103567   ROM_LOAD("epr-21902.ic22",0x0000000, 0x0400000, CRC(04e8acec) SHA1(82e20f99876b13b77c0393ef545316f9eeb2c29c) )
35113568
35123569   ROM_LOAD("mpr-21881.ic1", 0x0800000, 0x0800000, CRC(00bf0d58) SHA1(cf2c58168501c77318e946a4a4d4663993a7913c) )
r12704r12705
35333590ROM_END                                                // ROM reads different each time and fails test mode on real h/w, need a new cart
35343591
35353592ROM_START( f355twin )
3536   ROM_REGION( 0x200000, "maincpu", 0)
35373593   F355_BIOS
35383594   NAOMI_DEFAULT_EEPROM
35393595
3540   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3541        ROM_LOAD( "epr-22848.ic22", 0x0000000, 0x800000, CRC(54de0bd5) SHA1(5f6be36d2d39eea681ecac14358b92eaf4bf6c1e) )
3542        ROM_LOAD( "mpr-22827.ic1",  0x0800000, 0x800000, CRC(eeb1b975) SHA1(929f453eaf5565ae3e660dbbb8f406ff8aa7897d) )
3543        ROM_LOAD( "mpr-22828.ic2",  0x1000000, 0x800000, CRC(691d246a) SHA1(a2d538bc2e0d592a4f18d65f52fea035e1d4c625) )
3544        ROM_LOAD( "mpr-22829.ic3",  0x1800000, 0x800000, CRC(00719c9c) SHA1(f0f19af4ebe2720bd822a9ea7e0004db163c706a) )
3545        ROM_LOAD( "mpr-22830.ic4",  0x2000000, 0x800000, CRC(bfeb0e95) SHA1(a2dac7887dec722bd4b90a526bbcb9910b636618) )
3546        ROM_LOAD( "mpr-22831.ic5",  0x2800000, 0x800000, CRC(697e60a8) SHA1(805dd3fb7b86d1ad8afadba58c7c026444e62e32) )
3547        ROM_LOAD( "mpr-22832.ic6",  0x3000000, 0x800000, CRC(78e146a0) SHA1(cb6f1313ae51addbc84f78b3fb1e5d3adbe9af7c) )
3548        ROM_LOAD( "mpr-22834.ic7",  0x3800000, 0x800000, CRC(cbd847ea) SHA1(7c54f909d9bc10fda12bf28d5d4b83052a0583d4) )
3549        ROM_LOAD( "mpr-22834.ic8",  0x4000000, 0x800000, CRC(3bfc6571) SHA1(c3d7e1a75a8a2490c3b9b6f475ec948c40c84085) )
3550        ROM_LOAD( "mpr-22835.ic9",  0x4800000, 0x800000, CRC(c0a14f8e) SHA1(811d95d3741a14a215f34b3dc465e4944d746568) )
3551        ROM_LOAD( "mpr-22836.ic10", 0x5000000, 0x800000, CRC(ee68d756) SHA1(319f5633c3a377461fcedcf4b01edac41a26ad4b) )
3552        ROM_LOAD( "mpr-22837.ic11", 0x5800000, 0x800000, CRC(3b53f0c9) SHA1(b9be9c3de9af3eefb16b77eb0ee8d2f144d66919) )
3596   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
3597   ROM_LOAD( "epr-22848.ic22", 0x0000000, 0x800000, CRC(54de0bd5) SHA1(5f6be36d2d39eea681ecac14358b92eaf4bf6c1e) )
3598   ROM_LOAD( "mpr-22827.ic1",  0x0800000, 0x800000, CRC(eeb1b975) SHA1(929f453eaf5565ae3e660dbbb8f406ff8aa7897d) )
3599   ROM_LOAD( "mpr-22828.ic2",  0x1000000, 0x800000, CRC(691d246a) SHA1(a2d538bc2e0d592a4f18d65f52fea035e1d4c625) )
3600   ROM_LOAD( "mpr-22829.ic3",  0x1800000, 0x800000, CRC(00719c9c) SHA1(f0f19af4ebe2720bd822a9ea7e0004db163c706a) )
3601   ROM_LOAD( "mpr-22830.ic4",  0x2000000, 0x800000, CRC(bfeb0e95) SHA1(a2dac7887dec722bd4b90a526bbcb9910b636618) )
3602   ROM_LOAD( "mpr-22831.ic5",  0x2800000, 0x800000, CRC(697e60a8) SHA1(805dd3fb7b86d1ad8afadba58c7c026444e62e32) )
3603   ROM_LOAD( "mpr-22832.ic6",  0x3000000, 0x800000, CRC(78e146a0) SHA1(cb6f1313ae51addbc84f78b3fb1e5d3adbe9af7c) )
3604   ROM_LOAD( "mpr-22834.ic7",  0x3800000, 0x800000, CRC(cbd847ea) SHA1(7c54f909d9bc10fda12bf28d5d4b83052a0583d4) )
3605   ROM_LOAD( "mpr-22834.ic8",  0x4000000, 0x800000, CRC(3bfc6571) SHA1(c3d7e1a75a8a2490c3b9b6f475ec948c40c84085) )
3606   ROM_LOAD( "mpr-22835.ic9",  0x4800000, 0x800000, CRC(c0a14f8e) SHA1(811d95d3741a14a215f34b3dc465e4944d746568) )
3607   ROM_LOAD( "mpr-22836.ic10", 0x5000000, 0x800000, CRC(ee68d756) SHA1(319f5633c3a377461fcedcf4b01edac41a26ad4b) )
3608   ROM_LOAD( "mpr-22837.ic11", 0x5800000, 0x800000, CRC(3b53f0c9) SHA1(b9be9c3de9af3eefb16b77eb0ee8d2f144d66919) )
35533609   ROM_LOAD( "mpr-22838.ic12", 0x6000000, 0x800000, CRC(c17a2228) SHA1(0fcea748f5bacfdc784275e6f810001897f07bf5) )
3554        ROM_LOAD( "mpr-22839.ic13", 0x6800000, 0x800000, CRC(31ab7352) SHA1(3a5b5a04172d4d32c2fcff540dd71ddb99bf662c) )
3555        ROM_LOAD( "mpr-22840.ic14", 0x7000000, 0x800000, CRC(af4c757b) SHA1(b17722fa1f762c38e777ba36ffaf967062f86eb9) )
3556        ROM_LOAD( "mpr-22841.ic15", 0x7800000, 0x800000, CRC(7adceb6b) SHA1(17e1833d3d22a244cd16ba93c74bd25bbaa1018d) )
3557        ROM_LOAD( "mpr-22842.ic16", 0x8000000, 0x800000, CRC(1ce2ec11) SHA1(279464955f3b10c71aef1e41c68337f85d871739) )
3558        ROM_LOAD( "mpr-22843.ic17", 0x8800000, 0x800000, CRC(1c659384) SHA1(4c5ca20c9924c56e5f7a51ecaaafac3c5c6f91c8) )
3559        ROM_LOAD( "mpr-22844.ic18", 0x9000000, 0x800000, CRC(361ea725) SHA1(b2d17b2f09b9ae1e19bdc395189fa966ba462c06) )
3560        ROM_LOAD( "mpr-22845.ic19", 0x9800000, 0x800000, CRC(3327aed1) SHA1(8bd81aa79ffe764da5810fe79a317530a4f3c191) )
3561        ROM_LOAD( "mpr-22846.ic20", 0xa000000, 0x800000, CRC(d4148f39) SHA1(b6598ce52bcaa42805c581de326c953d27c1b2b4) )
3562        ROM_LOAD( "mpr-22847.ic21", 0xa800000, 0x800000, CRC(955ad42e) SHA1(e396ca02b5786557434632c4fac56af3a4a9f8ce) )
3610   ROM_LOAD( "mpr-22839.ic13", 0x6800000, 0x800000, CRC(31ab7352) SHA1(3a5b5a04172d4d32c2fcff540dd71ddb99bf662c) )
3611   ROM_LOAD( "mpr-22840.ic14", 0x7000000, 0x800000, CRC(af4c757b) SHA1(b17722fa1f762c38e777ba36ffaf967062f86eb9) )
3612   ROM_LOAD( "mpr-22841.ic15", 0x7800000, 0x800000, CRC(7adceb6b) SHA1(17e1833d3d22a244cd16ba93c74bd25bbaa1018d) )
3613   ROM_LOAD( "mpr-22842.ic16", 0x8000000, 0x800000, CRC(1ce2ec11) SHA1(279464955f3b10c71aef1e41c68337f85d871739) )
3614   ROM_LOAD( "mpr-22843.ic17", 0x8800000, 0x800000, CRC(1c659384) SHA1(4c5ca20c9924c56e5f7a51ecaaafac3c5c6f91c8) )
3615   ROM_LOAD( "mpr-22844.ic18", 0x9000000, 0x800000, CRC(361ea725) SHA1(b2d17b2f09b9ae1e19bdc395189fa966ba462c06) )
3616   ROM_LOAD( "mpr-22845.ic19", 0x9800000, 0x800000, CRC(3327aed1) SHA1(8bd81aa79ffe764da5810fe79a317530a4f3c191) )
3617   ROM_LOAD( "mpr-22846.ic20", 0xa000000, 0x800000, CRC(d4148f39) SHA1(b6598ce52bcaa42805c581de326c953d27c1b2b4) )
3618   ROM_LOAD( "mpr-22847.ic21", 0xa800000, 0x800000, CRC(955ad42e) SHA1(e396ca02b5786557434632c4fac56af3a4a9f8ce) )
3619
3620   ROM_REGION( 4, "rom_key", 0 )
3621   ROM_LOAD( "f355twin-key.bin", 0, 4, CRC(7d915a40) SHA1(ea441c10673b79237a4e7368948cfad31ed45a26) )
35633622ROM_END
35643623
35653624ROM_START( f355twn2 )
3566   ROM_REGION( 0x200000, "maincpu", 0)
35673625   F355_BIOS
35683626   NAOMI_DEFAULT_EEPROM
35693627
3570   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3571        ROM_LOAD( "epr-23399.ic22", 0x0000000, 0x400000, CRC(36de514c) SHA1(1c32064169c233156921fdf170c1958dc0f8a750) )
3572        ROM_LOAD( "mpr-23378.ic1",  0x0800000, 0x800000, CRC(1ad80f12) SHA1(415a021987e07bb298e43eacb54ff898619837b1) )
3573        ROM_LOAD( "mpr-23379.ic2",  0x1000000, 0x800000, CRC(a198f0a8) SHA1(7025adfd26f80087fa405acb49797d5c77a55e98) )
3574        ROM_LOAD( "mpr-23380.ic3",  0x1800000, 0x800000, CRC(b1993286) SHA1(01ddc81ba3542f37dd2dadac972114ec254059a1) )
3575        ROM_LOAD( "mpr-23381.ic4",  0x2000000, 0x800000, CRC(1204d518) SHA1(5b272be2ff7d48ee8005194d03ae79a01cea1b92) )
3576        ROM_LOAD( "mpr-23382.ic5",  0x2800000, 0x800000, CRC(f2f3f7ab) SHA1(3e662197d7cc0b606706a2edb9433093d2bcd2d9) )
3577        ROM_LOAD( "mpr-23383.ic6",  0x3000000, 0x800000, CRC(f19069c1) SHA1(ccec4008d95f8305e9d77a5b34a3de8aec3606dc) )
3578        ROM_LOAD( "mpr-23384.ic7",  0x3800000, 0x800000, CRC(5150bb17) SHA1(9fab19f02e6f79e68e8e10aad78e47135081957d) )
3579        ROM_LOAD( "mpr-23385.ic8",  0x4000000, 0x800000, CRC(747e4025) SHA1(ad3ee65ac473fda8c82c5e3dd349abaa9312bd35) )
3580        ROM_LOAD( "mpr-23386.ic9",  0x4800000, 0x800000, CRC(28e22914) SHA1(e57d627de314dd13c229de91d061588df53b2164) )
3581        ROM_LOAD( "mpr-23387.ic10", 0x5000000, 0x800000, CRC(3b5c0fe4) SHA1(cbe93bf95d6386e5a0d44e27e6953e259f8667bd) )
3582        ROM_LOAD( "mpr-23388.ic11", 0x5800000, 0x800000, CRC(35d55060) SHA1(7c566f2ee82478aa63689f96088138902d9ee710) )
3583        ROM_LOAD( "mpr-23389.ic12", 0x6000000, 0x800000, CRC(360b9078) SHA1(26160273848d4f9c3992ea125b0d36bed58add49) )
3584        ROM_LOAD( "mpr-23390.ic13", 0x6800000, 0x800000, CRC(d5878f2d) SHA1(d918a37198033c74dadc1c531889f61c88ef94a8) )
3585        ROM_LOAD( "mpr-23391.ic14", 0x7000000, 0x800000, CRC(eef8b0c6) SHA1(0339a094cbecf97c785bb1071b2b598c1ab60e40) )
3586        ROM_LOAD( "mpr-23392.ic15", 0x7800000, 0x800000, CRC(df16126b) SHA1(b932afe38dd8e5f96412807743f44043fe450f14) )
3587        ROM_LOAD( "mpr-23393.ic16", 0x8000000, 0x800000, CRC(e6d383a3) SHA1(6a77318f718171fe998a8e18d542dd43b8a9b87d) )
3588        ROM_LOAD( "mpr-23394.ic17", 0x8800000, 0x800000, CRC(045235c4) SHA1(f1c4e09847840769d26719a26bdcf3c9241280a5) )
3589        ROM_LOAD( "mpr-23395.ic18", 0x9000000, 0x800000, CRC(ed645203) SHA1(b621c96c9ca49a7582a50bf5c513b910dead4e13) )
3590        ROM_LOAD( "mpr-23396.ic19", 0x9800000, 0x800000, CRC(42826956) SHA1(386eca3cda2bddb1825dbae850f0c17d1374eb41) )
3591        ROM_LOAD( "mpr-23397.ic20", 0xa000000, 0x800000, CRC(28d2caf6) SHA1(67a3bc19abccf7f211c3aae67e751815857bd564) )
3592        ROM_LOAD( "mpr-23398.ic21", 0xa800000, 0x800000, CRC(ea4d4d2a) SHA1(3dc9c7164516ae7f3b988c088ab819d8fd40d75e) )
3628   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
3629   ROM_LOAD( "epr-23399.ic22", 0x0000000, 0x400000, CRC(36de514c) SHA1(1c32064169c233156921fdf170c1958dc0f8a750) )
3630   ROM_LOAD( "mpr-23378.ic1",  0x0800000, 0x800000, CRC(1ad80f12) SHA1(415a021987e07bb298e43eacb54ff898619837b1) )
3631   ROM_LOAD( "mpr-23379.ic2",  0x1000000, 0x800000, CRC(a198f0a8) SHA1(7025adfd26f80087fa405acb49797d5c77a55e98) )
3632   ROM_LOAD( "mpr-23380.ic3",  0x1800000, 0x800000, CRC(b1993286) SHA1(01ddc81ba3542f37dd2dadac972114ec254059a1) )
3633   ROM_LOAD( "mpr-23381.ic4",  0x2000000, 0x800000, CRC(1204d518) SHA1(5b272be2ff7d48ee8005194d03ae79a01cea1b92) )
3634   ROM_LOAD( "mpr-23382.ic5",  0x2800000, 0x800000, CRC(f2f3f7ab) SHA1(3e662197d7cc0b606706a2edb9433093d2bcd2d9) )
3635   ROM_LOAD( "mpr-23383.ic6",  0x3000000, 0x800000, CRC(f19069c1) SHA1(ccec4008d95f8305e9d77a5b34a3de8aec3606dc) )
3636   ROM_LOAD( "mpr-23384.ic7",  0x3800000, 0x800000, CRC(5150bb17) SHA1(9fab19f02e6f79e68e8e10aad78e47135081957d) )
3637   ROM_LOAD( "mpr-23385.ic8",  0x4000000, 0x800000, CRC(747e4025) SHA1(ad3ee65ac473fda8c82c5e3dd349abaa9312bd35) )
3638   ROM_LOAD( "mpr-23386.ic9",  0x4800000, 0x800000, CRC(28e22914) SHA1(e57d627de314dd13c229de91d061588df53b2164) )
3639   ROM_LOAD( "mpr-23387.ic10", 0x5000000, 0x800000, CRC(3b5c0fe4) SHA1(cbe93bf95d6386e5a0d44e27e6953e259f8667bd) )
3640   ROM_LOAD( "mpr-23388.ic11", 0x5800000, 0x800000, CRC(35d55060) SHA1(7c566f2ee82478aa63689f96088138902d9ee710) )
3641   ROM_LOAD( "mpr-23389.ic12", 0x6000000, 0x800000, CRC(360b9078) SHA1(26160273848d4f9c3992ea125b0d36bed58add49) )
3642   ROM_LOAD( "mpr-23390.ic13", 0x6800000, 0x800000, CRC(d5878f2d) SHA1(d918a37198033c74dadc1c531889f61c88ef94a8) )
3643   ROM_LOAD( "mpr-23391.ic14", 0x7000000, 0x800000, CRC(eef8b0c6) SHA1(0339a094cbecf97c785bb1071b2b598c1ab60e40) )
3644   ROM_LOAD( "mpr-23392.ic15", 0x7800000, 0x800000, CRC(df16126b) SHA1(b932afe38dd8e5f96412807743f44043fe450f14) )
3645   ROM_LOAD( "mpr-23393.ic16", 0x8000000, 0x800000, CRC(e6d383a3) SHA1(6a77318f718171fe998a8e18d542dd43b8a9b87d) )
3646   ROM_LOAD( "mpr-23394.ic17", 0x8800000, 0x800000, CRC(045235c4) SHA1(f1c4e09847840769d26719a26bdcf3c9241280a5) )
3647   ROM_LOAD( "mpr-23395.ic18", 0x9000000, 0x800000, CRC(ed645203) SHA1(b621c96c9ca49a7582a50bf5c513b910dead4e13) )
3648   ROM_LOAD( "mpr-23396.ic19", 0x9800000, 0x800000, CRC(42826956) SHA1(386eca3cda2bddb1825dbae850f0c17d1374eb41) )
3649   ROM_LOAD( "mpr-23397.ic20", 0xa000000, 0x800000, CRC(28d2caf6) SHA1(67a3bc19abccf7f211c3aae67e751815857bd564) )
3650   ROM_LOAD( "mpr-23398.ic21", 0xa800000, 0x800000, CRC(ea4d4d2a) SHA1(3dc9c7164516ae7f3b988c088ab819d8fd40d75e) )
3651
3652   ROM_REGION( 4, "rom_key", 0 )
3653   ROM_LOAD( "f355twn2-key.bin", 0, 4, CRC(784fab7a) SHA1(5d9687876b390d35309c0b1404f5717daa533286) )
35933654ROM_END
35943655
35953656ROM_START( alpiltdx )
3596   ROM_REGION( 0x200000, "maincpu", 0)
35973657   AIRLINE_BIOS
35983658   NAOMI_DEFAULT_EEPROM_NO_BD
35993659
3600   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3660   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
36013661   ROM_LOAD( "epr-21787b.ic22", 0x0000000, 0x400000, CRC(56893156) SHA1(8e56e0633f92b1f50105421b7eb8428f51a78b27) )
36023662   ROM_LOAD( "mpr-21728.ic1",  0x0800000, 0x800000, CRC(872338d4) SHA1(04857b300196c0ec51361d7cf7bb57274a15a326) )
36033663   ROM_LOAD( "mpr-21729.ic2",  0x1000000, 0x800000, CRC(9a9b72ad) SHA1(ce96da7904dd82abaa448df45e954521dd834ed8) )
r12704r12705
36113671   ROM_LOAD( "mpr-21737.ic10", 0x5000000, 0x800000, CRC(260aaa98) SHA1(d1082587afe9d79f286df8b107a553ee51c27643) )
36123672   ROM_LOAD( "mpr-21738.ic11", 0x5800000, 0x800000, CRC(95a592e8) SHA1(862dce467e8805381bab001df68262f1baf3c498) )
36133673
3674   ROM_REGION( 4, "rom_key", 0 )
3675   ROM_LOAD( "alpiltdx-key.bin", 0, 4, CRC(bb539511) SHA1(dea206e7db23fdabf7b957104ddd1499eff509ff) )
3676
36143677   // on-cart X76F100 eeprom contents
36153678   ROM_REGION( 0x84, "naomibd_eeprom", 0 )
36163679   ROM_LOAD( "airlinepdx.sf",  0x000000, 0x000084, CRC(404b2add) SHA1(540c8474806775646ace111a2993397b1419fee3) )
36173680ROM_END
36183681
36193682ROM_START( alpilota )
3620   ROM_REGION( 0x200000, "maincpu", 0)
36213683   NAOMI_BIOS
36223684   NAOMI_DEFAULT_EEPROM
36233685
3624   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3686   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
36253687   ROM_LOAD( "epr-21739a.ic22", 0x000000, 0x400000, CRC(08f22bab) SHA1(fedc80eef7c824381fd834cc04202383c9340c4f) )
36263688   ROM_LOAD( "mpr-21728.ic1",  0x0800000, 0x800000, CRC(872338d4) SHA1(04857b300196c0ec51361d7cf7bb57274a15a326) )
36273689   ROM_LOAD( "mpr-21729.ic2",  0x1000000, 0x800000, CRC(9a9b72ad) SHA1(ce96da7904dd82abaa448df45e954521dd834ed8) )
r12704r12705
36343696   ROM_LOAD( "mpr-21736.ic9",  0x4800000, 0x800000, CRC(d74eda63) SHA1(d6794fa433cea9f06dc0a20dc9e10388162e7fd8) )
36353697   ROM_LOAD( "mpr-21737.ic10", 0x5000000, 0x800000, CRC(260aaa98) SHA1(d1082587afe9d79f286df8b107a553ee51c27643) )
36363698   ROM_LOAD( "mpr-21738.ic11", 0x5800000, 0x800000, CRC(95a592e8) SHA1(862dce467e8805381bab001df68262f1baf3c498) )
3699
3700   ROM_REGION( 4, "rom_key", 0 )
3701   ROM_LOAD( "alpilota-key.bin", 0, 4, CRC(bb539511) SHA1(dea206e7db23fdabf7b957104ddd1499eff509ff) )
36373702ROM_END
36383703
36393704ROM_START( hotd2 )
3640   ROM_REGION( 0x200000, "maincpu", 0)
36413705   HOTD2_BIOS
36423706   NAOMI_DEFAULT_EEPROM
36433707
36443708   ROM_REGION( 0x10000, "gunboard", ROMREGION_ERASEFF ) // ROM on the lightgun i/o board, near a D78213 ROM-less MCU
36453709   ROM_LOAD( "tg12.ic2", 0x00000, 0x10000, CRC(2c9600b1) SHA1(91813a43851c48d400fde41b1198dabf55bade2d) )
36463710
3647   ROM_REGION( 0xa800000, "user1", ROMREGION_ERASEFF)
3648        ROM_LOAD( "epr-21585.ic22", 0x0000000, 0x200000, CRC(b23d1a0c) SHA1(9e77980d1aa980c879886e53cc76a16d7a9d43a1) )
3649        ROM_LOAD( "mpr-21386.ic1",  0x0800000, 0x800000, CRC(88fb0562) SHA1(185a0eab68d86617cb6325d64c48a2dd4854622b) )
3650        ROM_LOAD( "mpr-21387.ic2",  0x1000000, 0x800000, CRC(5f4dd576) SHA1(5483c3949e587bbcca7e8fc7db9aff4cd2a33f02) )
3651        ROM_LOAD( "mpr-21388.ic3",  0x1800000, 0x800000, CRC(3e62fca4) SHA1(8cdebdebabc88160f458e1e779d9ebb4e6a14523) )
3652        ROM_LOAD( "mpr-21389.ic4",  0x2000000, 0x800000, CRC(6f73a852) SHA1(d5fd4c0800b3a1ea04231018fcaba79184fa1d87) )
3653        ROM_LOAD( "mpr-21390.ic5",  0x2800000, 0x800000, CRC(c7950445) SHA1(4f56768f07703452ef92d183e4ee654ab9711283) )
3654        ROM_LOAD( "mpr-21391.ic6",  0x3000000, 0x800000, CRC(5a812247) SHA1(7636661da0cc9bd5a1a2062f9f3ef65889c86fd5) )
3655        ROM_LOAD( "mpr-21392.ic7",  0x3800000, 0x800000, CRC(17e9414a) SHA1(9f291c4dd9a049eeed88d80867f7fca1d15c6095) )
3656        ROM_LOAD( "mpr-21393.ic8",  0x4000000, 0x800000, CRC(5d2d8134) SHA1(a2941b6afd0302822133d932064d1aad873b1c04) )
3657        ROM_LOAD( "mpr-21394.ic9",  0x4800000, 0x800000, CRC(eacaf26d) SHA1(21e35def0ed998a70cc982f373feb50b7974612a) )
3658        ROM_LOAD( "mpr-21395.ic10", 0x5000000, 0x800000, CRC(1e3686be) SHA1(7ec1b3c9c94882c5fe7b6ba6ffe9220e90824870) )
3659        ROM_LOAD( "mpr-21396.ic11", 0x5800000, 0x800000, CRC(5ada00a2) SHA1(981c65310c89e7a26e2b2c3e57623e78f6ad33d0) )
3660        ROM_LOAD( "mpr-21397.ic12", 0x6000000, 0x800000, CRC(9eff6247) SHA1(9257492fc3e48516897002dd3ff247093af27d87) )
3661        ROM_LOAD( "mpr-21398.ic13", 0x6800000, 0x800000, CRC(8a80b16a) SHA1(ffeb061b31027ac322c14b9050c686b2b844d2e1) )
3662        ROM_LOAD( "mpr-21399.ic14", 0x7000000, 0x800000, CRC(7ae20daf) SHA1(b36d8e490ac477db178b8df08f7997448308d3fd) )
3663        ROM_LOAD( "mpr-21400.ic15", 0x7800000, 0x800000, CRC(fbb8641b) SHA1(6cb44f0a3f80eb68a218bba97b2395961c596b9c) )
3664        ROM_LOAD( "mpr-21401.ic16", 0x8000000, 0x800000, CRC(3881ec23) SHA1(e4b87a6c6fd6a2eeda8e0e5ae7bed01b18386e54) )
3665        ROM_LOAD( "mpr-21402.ic17", 0x8800000, 0x800000, CRC(66bff6e4) SHA1(f87d618231b71b65952fc7ea7ccabdd208622a00) )
3666        ROM_LOAD( "mpr-21403.ic18", 0x9000000, 0x800000, CRC(8cd2f654) SHA1(77eb7061caaf0288aad04ed88c4247d27617f338) )
3667        ROM_LOAD( "mpr-21404.ic19", 0x9800000, 0x800000, CRC(6cf6e705) SHA1(68d7e9becefe27b556e0c5d7ba00efd2d1fb71ca) )
3668        ROM_LOAD( "mpr-21405.ic20", 0xa000000, 0x800000, CRC(495e6265) SHA1(57936367fec0000691641525682fb8aefc4e4f56) )
3711   ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
3712   ROM_LOAD( "epr-21585.ic22", 0x0000000, 0x200000, CRC(b23d1a0c) SHA1(9e77980d1aa980c879886e53cc76a16d7a9d43a1) )
3713   ROM_LOAD( "mpr-21386.ic1",  0x0800000, 0x800000, CRC(88fb0562) SHA1(185a0eab68d86617cb6325d64c48a2dd4854622b) )
3714   ROM_LOAD( "mpr-21387.ic2",  0x1000000, 0x800000, CRC(5f4dd576) SHA1(5483c3949e587bbcca7e8fc7db9aff4cd2a33f02) )
3715   ROM_LOAD( "mpr-21388.ic3",  0x1800000, 0x800000, CRC(3e62fca4) SHA1(8cdebdebabc88160f458e1e779d9ebb4e6a14523) )
3716   ROM_LOAD( "mpr-21389.ic4",  0x2000000, 0x800000, CRC(6f73a852) SHA1(d5fd4c0800b3a1ea04231018fcaba79184fa1d87) )
3717   ROM_LOAD( "mpr-21390.ic5",  0x2800000, 0x800000, CRC(c7950445) SHA1(4f56768f07703452ef92d183e4ee654ab9711283) )
3718   ROM_LOAD( "mpr-21391.ic6",  0x3000000, 0x800000, CRC(5a812247) SHA1(7636661da0cc9bd5a1a2062f9f3ef65889c86fd5) )
3719   ROM_LOAD( "mpr-21392.ic7",  0x3800000, 0x800000, CRC(17e9414a) SHA1(9f291c4dd9a049eeed88d80867f7fca1d15c6095) )
3720   ROM_LOAD( "mpr-21393.ic8",  0x4000000, 0x800000, CRC(5d2d8134) SHA1(a2941b6afd0302822133d932064d1aad873b1c04) )
3721   ROM_LOAD( "mpr-21394.ic9",  0x4800000, 0x800000, CRC(eacaf26d) SHA1(21e35def0ed998a70cc982f373feb50b7974612a) )
3722   ROM_LOAD( "mpr-21395.ic10", 0x5000000, 0x800000, CRC(1e3686be) SHA1(7ec1b3c9c94882c5fe7b6ba6ffe9220e90824870) )
3723   ROM_LOAD( "mpr-21396.ic11", 0x5800000, 0x800000, CRC(5ada00a2) SHA1(981c65310c89e7a26e2b2c3e57623e78f6ad33d0) )
3724   ROM_LOAD( "mpr-21397.ic12", 0x6000000, 0x800000, CRC(9eff6247) SHA1(9257492fc3e48516897002dd3ff247093af27d87) )
3725   ROM_LOAD( "mpr-21398.ic13", 0x6800000, 0x800000, CRC(8a80b16a) SHA1(ffeb061b31027ac322c14b9050c686b2b844d2e1) )
3726   ROM_LOAD( "mpr-21399.ic14", 0x7000000, 0x800000, CRC(7ae20daf) SHA1(b36d8e490ac477db178b8df08f7997448308d3fd) )
3727   ROM_LOAD( "mpr-21400.ic15", 0x7800000, 0x800000, CRC(fbb8641b) SHA1(6cb44f0a3f80eb68a218bba97b2395961c596b9c) )
3728   ROM_LOAD( "mpr-21401.ic16", 0x8000000, 0x800000, CRC(3881ec23) SHA1(e4b87a6c6fd6a2eeda8e0e5ae7bed01b18386e54) )
3729   ROM_LOAD( "mpr-21402.ic17", 0x8800000, 0x800000, CRC(66bff6e4) SHA1(f87d618231b71b65952fc7ea7ccabdd208622a00) )
3730   ROM_LOAD( "mpr-21403.ic18", 0x9000000, 0x800000, CRC(8cd2f654) SHA1(77eb7061caaf0288aad04ed88c4247d27617f338) )
3731   ROM_LOAD( "mpr-21404.ic19", 0x9800000, 0x800000, CRC(6cf6e705) SHA1(68d7e9becefe27b556e0c5d7ba00efd2d1fb71ca) )
3732   ROM_LOAD( "mpr-21405.ic20", 0xa000000, 0x800000, CRC(495e6265) SHA1(57936367fec0000691641525682fb8aefc4e4f56) )
36693733ROM_END
36703734
36713735ROM_START( hotd2o )
3672   ROM_REGION( 0x200000, "maincpu", 0)
36733736   HOTD2_BIOS
36743737   NAOMI_DEFAULT_EEPROM
36753738
36763739   ROM_REGION( 0x10000, "gunboard", ROMREGION_ERASEFF ) // ROM on the lightgun i/o board, near a D78213 ROM-less MCU
36773740   ROM_LOAD( "tg12.ic2", 0x00000, 0x10000, CRC(2c9600b1) SHA1(91813a43851c48d400fde41b1198dabf55bade2d) )
36783741
3679   ROM_REGION( 0xa800000, "user1", ROMREGION_ERASEFF)
3680        ROM_LOAD( "epr-21385.ic22", 0x0000000, 0x200000, CRC(dedffe5f) SHA1(98b2a4c67ecb30cb096b9cea9061d904cf495937) )
3681        ROM_LOAD( "mpr-21386.ic1",  0x0800000, 0x800000, CRC(88fb0562) SHA1(185a0eab68d86617cb6325d64c48a2dd4854622b) )
3682        ROM_LOAD( "mpr-21387.ic2",  0x1000000, 0x800000, CRC(5f4dd576) SHA1(5483c3949e587bbcca7e8fc7db9aff4cd2a33f02) )
3683        ROM_LOAD( "mpr-21388.ic3",  0x1800000, 0x800000, CRC(3e62fca4) SHA1(8cdebdebabc88160f458e1e779d9ebb4e6a14523) )
3684        ROM_LOAD( "mpr-21389.ic4",  0x2000000, 0x800000, CRC(6f73a852) SHA1(d5fd4c0800b3a1ea04231018fcaba79184fa1d87) )
3685        ROM_LOAD( "mpr-21390.ic5",  0x2800000, 0x800000, CRC(c7950445) SHA1(4f56768f07703452ef92d183e4ee654ab9711283) )
3686        ROM_LOAD( "mpr-21391.ic6",  0x3000000, 0x800000, CRC(5a812247) SHA1(7636661da0cc9bd5a1a2062f9f3ef65889c86fd5) )
3687        ROM_LOAD( "mpr-21392.ic7",  0x3800000, 0x800000, CRC(17e9414a) SHA1(9f291c4dd9a049eeed88d80867f7fca1d15c6095) )
3688        ROM_LOAD( "mpr-21393.ic8",  0x4000000, 0x800000, CRC(5d2d8134) SHA1(a2941b6afd0302822133d932064d1aad873b1c04) )
3689        ROM_LOAD( "mpr-21394.ic9",  0x4800000, 0x800000, CRC(eacaf26d) SHA1(21e35def0ed998a70cc982f373feb50b7974612a) )
3690        ROM_LOAD( "mpr-21395.ic10", 0x5000000, 0x800000, CRC(1e3686be) SHA1(7ec1b3c9c94882c5fe7b6ba6ffe9220e90824870) )
3691        ROM_LOAD( "mpr-21396.ic11", 0x5800000, 0x800000, CRC(5ada00a2) SHA1(981c65310c89e7a26e2b2c3e57623e78f6ad33d0) )
3692        ROM_LOAD( "mpr-21397.ic12", 0x6000000, 0x800000, CRC(9eff6247) SHA1(9257492fc3e48516897002dd3ff247093af27d87) )
3693        ROM_LOAD( "mpr-21398.ic13", 0x6800000, 0x800000, CRC(8a80b16a) SHA1(ffeb061b31027ac322c14b9050c686b2b844d2e1) )
3694        ROM_LOAD( "mpr-21399.ic14", 0x7000000, 0x800000, CRC(7ae20daf) SHA1(b36d8e490ac477db178b8df08f7997448308d3fd) )
3695        ROM_LOAD( "mpr-21400.ic15", 0x7800000, 0x800000, CRC(fbb8641b) SHA1(6cb44f0a3f80eb68a218bba97b2395961c596b9c) )
3696        ROM_LOAD( "mpr-21401.ic16", 0x8000000, 0x800000, CRC(3881ec23) SHA1(e4b87a6c6fd6a2eeda8e0e5ae7bed01b18386e54) )
3697        ROM_LOAD( "mpr-21402.ic17", 0x8800000, 0x800000, CRC(66bff6e4) SHA1(f87d618231b71b65952fc7ea7ccabdd208622a00) )
3698        ROM_LOAD( "mpr-21403.ic18", 0x9000000, 0x800000, CRC(8cd2f654) SHA1(77eb7061caaf0288aad04ed88c4247d27617f338) )
3699        ROM_LOAD( "mpr-21404.ic19", 0x9800000, 0x800000, CRC(6cf6e705) SHA1(68d7e9becefe27b556e0c5d7ba00efd2d1fb71ca) )
3700        ROM_LOAD( "mpr-21405.ic20", 0xa000000, 0x800000, CRC(495e6265) SHA1(57936367fec0000691641525682fb8aefc4e4f56) )
3742   ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
3743   ROM_LOAD( "epr-21385.ic22", 0x0000000, 0x200000, CRC(dedffe5f) SHA1(98b2a4c67ecb30cb096b9cea9061d904cf495937) )
3744   ROM_LOAD( "mpr-21386.ic1",  0x0800000, 0x800000, CRC(88fb0562) SHA1(185a0eab68d86617cb6325d64c48a2dd4854622b) )
3745   ROM_LOAD( "mpr-21387.ic2",  0x1000000, 0x800000, CRC(5f4dd576) SHA1(5483c3949e587bbcca7e8fc7db9aff4cd2a33f02) )
3746   ROM_LOAD( "mpr-21388.ic3",  0x1800000, 0x800000, CRC(3e62fca4) SHA1(8cdebdebabc88160f458e1e779d9ebb4e6a14523) )
3747   ROM_LOAD( "mpr-21389.ic4",  0x2000000, 0x800000, CRC(6f73a852) SHA1(d5fd4c0800b3a1ea04231018fcaba79184fa1d87) )
3748   ROM_LOAD( "mpr-21390.ic5",  0x2800000, 0x800000, CRC(c7950445) SHA1(4f56768f07703452ef92d183e4ee654ab9711283) )
3749   ROM_LOAD( "mpr-21391.ic6",  0x3000000, 0x800000, CRC(5a812247) SHA1(7636661da0cc9bd5a1a2062f9f3ef65889c86fd5) )
3750   ROM_LOAD( "mpr-21392.ic7",  0x3800000, 0x800000, CRC(17e9414a) SHA1(9f291c4dd9a049eeed88d80867f7fca1d15c6095) )
3751   ROM_LOAD( "mpr-21393.ic8",  0x4000000, 0x800000, CRC(5d2d8134) SHA1(a2941b6afd0302822133d932064d1aad873b1c04) )
3752   ROM_LOAD( "mpr-21394.ic9",  0x4800000, 0x800000, CRC(eacaf26d) SHA1(21e35def0ed998a70cc982f373feb50b7974612a) )
3753   ROM_LOAD( "mpr-21395.ic10", 0x5000000, 0x800000, CRC(1e3686be) SHA1(7ec1b3c9c94882c5fe7b6ba6ffe9220e90824870) )
3754   ROM_LOAD( "mpr-21396.ic11", 0x5800000, 0x800000, CRC(5ada00a2) SHA1(981c65310c89e7a26e2b2c3e57623e78f6ad33d0) )
3755   ROM_LOAD( "mpr-21397.ic12", 0x6000000, 0x800000, CRC(9eff6247) SHA1(9257492fc3e48516897002dd3ff247093af27d87) )
3756   ROM_LOAD( "mpr-21398.ic13", 0x6800000, 0x800000, CRC(8a80b16a) SHA1(ffeb061b31027ac322c14b9050c686b2b844d2e1) )
3757   ROM_LOAD( "mpr-21399.ic14", 0x7000000, 0x800000, CRC(7ae20daf) SHA1(b36d8e490ac477db178b8df08f7997448308d3fd) )
3758   ROM_LOAD( "mpr-21400.ic15", 0x7800000, 0x800000, CRC(fbb8641b) SHA1(6cb44f0a3f80eb68a218bba97b2395961c596b9c) )
3759   ROM_LOAD( "mpr-21401.ic16", 0x8000000, 0x800000, CRC(3881ec23) SHA1(e4b87a6c6fd6a2eeda8e0e5ae7bed01b18386e54) )
3760   ROM_LOAD( "mpr-21402.ic17", 0x8800000, 0x800000, CRC(66bff6e4) SHA1(f87d618231b71b65952fc7ea7ccabdd208622a00) )
3761   ROM_LOAD( "mpr-21403.ic18", 0x9000000, 0x800000, CRC(8cd2f654) SHA1(77eb7061caaf0288aad04ed88c4247d27617f338) )
3762   ROM_LOAD( "mpr-21404.ic19", 0x9800000, 0x800000, CRC(6cf6e705) SHA1(68d7e9becefe27b556e0c5d7ba00efd2d1fb71ca) )
3763   ROM_LOAD( "mpr-21405.ic20", 0xa000000, 0x800000, CRC(495e6265) SHA1(57936367fec0000691641525682fb8aefc4e4f56) )
37013764ROM_END
37023765
37033766/*
r12704r12705
37143777*/
37153778
37163779ROM_START( ggram2 )
3717   ROM_REGION( 0x200000, "maincpu", 0)
37183780   NAOMI_BIOS
37193781   NAOMI_DEFAULT_EEPROM
37203782
3721   ROM_REGION( 0x6000000, "user1", ROMREGION_ERASEFF)
3783   ROM_REGION( 0x6000000, "rom_board", ROMREGION_ERASEFF)
37223784   ROM_LOAD("epr-21820.ic22", 0x0000000, 0x0200000, CRC(0a198278) SHA1(0df5fc8b56ddafc66d92cb3923b851a5717b551d) )
37233785   ROM_RELOAD( 0x200000, 0x200000 )
37243786   ROM_RELOAD( 0x400000, 0x200000 )
r12704r12705
37343796   ROM_LOAD("mpr-21829.ic9",  0x4800000, 0x0800000, CRC(c5553df2) SHA1(b97a82ac9133dab4bfd87392f803754b6d00389f) )
37353797   ROM_LOAD("mpr-21830.ic10", 0x5000000, 0x0800000, CRC(e01ceb86) SHA1(dd5703d7712cfc0053bddfff63e78dda372b6ff2) )
37363798   ROM_LOAD("mpr-21831.ic11", 0x5800000, 0x0800000, CRC(751848d0) SHA1(9c2267fd3c6f9ea5f2679bb2ca20d511a49b2845) )
3799
3800   ROM_REGION( 4, "rom_key", 0 )
3801   ROM_LOAD( "ggram2-key.bin", 0, 4, CRC(14283fd8) SHA1(c928382e512e9fb685436020f88b8245b7c60d41) )
37373802ROM_END
37383803
37393804/*
r12704r12705
37723837*/
37733838
37743839ROM_START( gram2000 )
3775   ROM_REGION( 0x200000, "maincpu", 0)
37763840   NAOMI_BIOS
37773841   NAOMI_DEFAULT_EEPROM
37783842
3779   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3843   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
37803844   ROM_LOAD("epr-23377.ic11",        0x0000000, 0x0400000, CRC(4ca3149c) SHA1(9d25fc659658b416202b033754669be2f3abcdbe) )
37813845   // the 0x0800000 - 0x0ffffff space mirrors part of roms 17/18, see ROM_COPY below, gets tested as 'IC1' if actel_id is 0xffff
37823846   ROM_LOAD32_WORD("mpr-23357.ic17", 0x1000000, 0x0800000, CRC(eaf77487) SHA1(bdfc4666a6724441c11b31d89fa30c4bd11cbdd1) ) //ic 2
r12704r12705
38003864   ROM_LOAD32_WORD("mpr-23375.ic35", 0xa000000, 0x0800000, CRC(7d4043db) SHA1(cadf22419e5b63c33a179bb6b0742035fc9d8028) ) //ic 20
38013865   ROM_LOAD32_WORD("mpr-23376.ic36", 0xa000002, 0x0800000, CRC(e09cb473) SHA1(c3ec980f1a56142a0e06bae9594d6038acf0690d) ) //ic 21
38023866
3803   ROM_COPY( "user1", 0x1400000, 0x0800000, 0x0800000 ) // mirror data so IC1 check can pass
3804   //ROM_COPY( "user1", 0x1000000, 0x0400000, 0x0c00000 ) // or does it mirror the start of 17/18 from 0x0400000 upwards like this, check on real hw
3867   ROM_COPY( "rom_board", 0x1400000, 0x0800000, 0x0800000 ) // mirror data so IC1 check can pass
3868   //ROM_COPY( "rom_board", 0x1000000, 0x0400000, 0x0c00000 ) // or does it mirror the start of 17/18 from 0x0400000 upwards like this, check on real hw
3869
3870   ROM_REGION( 4, "rom_key", 0 )
3871   ROM_LOAD( "gram2000-key.bin", 0, 4, CRC(179314d9) SHA1(3dbbc04e9ff62800d08c4a239af3a83252a28dc0) )
38053872ROM_END
38063873
38073874ROM_START( crackndj )
3808   ROM_REGION( 0x200000, "maincpu", 0)
38093875   NAOMI_BIOS
38103876   NAOMI_DEFAULT_EEPROM
38113877
3812   ROM_REGION( 0xa800000, "user1", ROMREGION_ERASEFF)
3813        ROM_LOAD( "epr-23450.ic22", 0x0000000, 0x400000, CRC(ba0ee505) SHA1(7777f532ace9032a25fc949316c07bd70dd03851) )
3814        ROM_LOAD( "mpr-23525.ic1",  0x0800000, 0x1000000, CRC(01996526) SHA1(1080305424989593e606f8195d295e0fb822ae43) )
3815        ROM_LOAD( "mpr-23526.ic2",  0x1800000, 0x1000000, CRC(d7a0d52e) SHA1(64a03c6da70c64fc62dbb0f9a4b0fb35de59c72f) )
3816        ROM_LOAD( "mpr-23527.ic3",  0x2800000, 0x1000000, CRC(9361afd9) SHA1(fee55341b623cc1928d8f95acd53e20759db725f) )
3817        ROM_LOAD( "mpr-23528.ic4",  0x3800000, 0x1000000, CRC(e40b7970) SHA1(6467463994f2b4535f822357ff2c8ca2dd4450c8) )
3818        ROM_LOAD( "mpr-23529.ic5",  0x4800000, 0x1000000, CRC(5920e6e5) SHA1(eec207dba99ca541f2abc98674e8dcaef506af3b) )
3819        ROM_LOAD( "mpr-23530.ic6",  0x5800000, 0x1000000, CRC(2bb0aefc) SHA1(8e5e90a4b8780411a41f14f1ca16dd049aefcd4b) )
3820        ROM_LOAD( "mpr-23531.ic7",  0x6800000, 0x1000000, CRC(43592459) SHA1(1b69ce3c54ad2c054ea72547afba6ef55a2daf63) )
3821        ROM_LOAD( "mpr-23532.ic8",  0x7800000, 0x1000000, CRC(bbcddeee) SHA1(8649da1411e404953d5ebd4e459d407eb79b61b1) )
3822        ROM_LOAD( "mpr-23533.ic9",  0x8800000, 0x1000000, CRC(fc909c00) SHA1(9cf22a97ea272c4586f3942aefdb803bd0e6ede7) )
3823        ROM_LOAD( "mpr-23534.ic10", 0x9800000, 0x1000000, CRC(62ed85b6) SHA1(b88336bc6115c92a839981cb0c0d0a67b1f7eda5) )
3878   ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
3879   ROM_LOAD( "epr-23450.ic22", 0x0000000, 0x400000, CRC(ba0ee505) SHA1(7777f532ace9032a25fc949316c07bd70dd03851) )
3880   ROM_LOAD( "mpr-23525.ic1",  0x0800000, 0x1000000, CRC(01996526) SHA1(1080305424989593e606f8195d295e0fb822ae43) )
3881   ROM_LOAD( "mpr-23526.ic2",  0x1800000, 0x1000000, CRC(d7a0d52e) SHA1(64a03c6da70c64fc62dbb0f9a4b0fb35de59c72f) )
3882   ROM_LOAD( "mpr-23527.ic3",  0x2800000, 0x1000000, CRC(9361afd9) SHA1(fee55341b623cc1928d8f95acd53e20759db725f) )
3883   ROM_LOAD( "mpr-23528.ic4",  0x3800000, 0x1000000, CRC(e40b7970) SHA1(6467463994f2b4535f822357ff2c8ca2dd4450c8) )
3884   ROM_LOAD( "mpr-23529.ic5",  0x4800000, 0x1000000, CRC(5920e6e5) SHA1(eec207dba99ca541f2abc98674e8dcaef506af3b) )
3885   ROM_LOAD( "mpr-23530.ic6",  0x5800000, 0x1000000, CRC(2bb0aefc) SHA1(8e5e90a4b8780411a41f14f1ca16dd049aefcd4b) )
3886   ROM_LOAD( "mpr-23531.ic7",  0x6800000, 0x1000000, CRC(43592459) SHA1(1b69ce3c54ad2c054ea72547afba6ef55a2daf63) )
3887   ROM_LOAD( "mpr-23532.ic8",  0x7800000, 0x1000000, CRC(bbcddeee) SHA1(8649da1411e404953d5ebd4e459d407eb79b61b1) )
3888   ROM_LOAD( "mpr-23533.ic9",  0x8800000, 0x1000000, CRC(fc909c00) SHA1(9cf22a97ea272c4586f3942aefdb803bd0e6ede7) )
3889   ROM_LOAD( "mpr-23534.ic10", 0x9800000, 0x1000000, CRC(62ed85b6) SHA1(b88336bc6115c92a839981cb0c0d0a67b1f7eda5) )
3890
3891   ROM_REGION( 4, "rom_key", 0 )
3892   ROM_LOAD( "crackndj-key.bin", 0, 4, CRC(6269265a) SHA1(e2ab31b0058eb130d8f54d30e86d569687f9a068) )
38243893ROM_END
38253894
38263895ROM_START( samba2k )
3827   ROM_REGION( 0x200000, "maincpu", 0)
38283896   NAOMI_BIOS
38293897   NAOMI_DEFAULT_EEPROM
38303898
3831   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
3832      ROM_LOAD( "epr-23600.ic22",  0x0000000, 0x400000, CRC(8b6fed00) SHA1(72842f266ad272e4c02be42a6529c2462fd8b63f) )
3833      ROM_LOAD( "mpr-23579.ic1",   0x0800000, 0x800000, CRC(ded76d71) SHA1(9187434587173f2fcc50af817222121703c253b7) )
3834      ROM_LOAD( "mpr-23580.ic2",   0x1000000, 0x800000, CRC(a9b29be1) SHA1(4f71b37b21623d87d805cb8d7b9da73bca1d22f3) )
3835      ROM_LOAD( "mpr-23581.ic3",   0x1800000, 0x800000, CRC(7c44d4c9) SHA1(a2c6e7392a2b52c1b5c0b133bb95fbe53736ca3e) )
3836      ROM_LOAD( "mpr-23582.ic4",   0x2000000, 0x800000, CRC(99b1af20) SHA1(598abe358d6c97a0ad6d68f5273cea1b96f73237) )
3837      ROM_LOAD( "mpr-23583.ic5",   0x2800000, 0x800000, CRC(7a81bbd1) SHA1(e36895d8964d1cdd3f316f0ec27356faa3d3f6e0) )
3838      ROM_LOAD( "mpr-23584.ic6",   0x3000000, 0x800000, CRC(e478b1df) SHA1(5b316feb618a0a61974c3fb5b4c5527873055a5b) )
3839      ROM_LOAD( "mpr-23585.ic7",   0x3800000, 0x800000, CRC(2f378c38) SHA1(881c6001c173c1ef8ddbb3ae15667e45fac11f96) )
3840      ROM_LOAD( "mpr-23586.ic8",   0x4000000, 0x800000, CRC(23bec2a7) SHA1(960a6613966bedf20c19454bbc5ec52d14c3f308) )
3841      ROM_LOAD( "mpr-23587.ic9",   0x4800000, 0x800000, CRC(f52a356b) SHA1(4e3783f5e8d02d09f474cc5ece457af5c4296508) )
3842      ROM_LOAD( "mpr-23588.ic10",  0x5000000, 0x800000, CRC(4bae020b) SHA1(e3750f87309c7ac9ab6fc504a9377971451ccb5a) )
3843      ROM_LOAD( "mpr-23589.ic11",  0x5800000, 0x800000, CRC(f6a09854) SHA1(d4ae9d7ddc349e353196cb145f732798a692e560) )
3844      ROM_LOAD( "mpr-23590.ic12s", 0x6000000, 0x800000, CRC(88e29d52) SHA1(42b66f13302772729920b9af546123c771ecec6b) )
3845      ROM_LOAD( "mpr-23591.ic13s", 0x6800000, 0x800000, CRC(8736d9b1) SHA1(d829d499dc147f0d14413554ff33187c7df9134f) )
3846      ROM_LOAD( "mpr-23592.ic14s", 0x7000000, 0x800000, CRC(c7dbeefd) SHA1(7b84d2f5532668936f60314fb3e112b1350bcc51) )
3847      ROM_LOAD( "mpr-23593.ic15s", 0x7800000, 0x800000, CRC(c8d63355) SHA1(64b06027ebbcfb72ead1d2041423ffd2fe4dcd97) )
3848      ROM_LOAD( "mpr-23594.ic16s", 0x8000000, 0x800000, CRC(30a04934) SHA1(5b3e5226b1eef9f2d9a64b89307380e2b347547e) )
3849      ROM_LOAD( "mpr-23595.ic17s", 0x8800000, 0x800000, CRC(1fea68ad) SHA1(d4615f6ea0b9ce6483cb688810ef7ae287aef082) )
3850      ROM_LOAD( "mpr-23596.ic18s", 0x9000000, 0x800000, CRC(2e57f934) SHA1(9231d3b881e210fa83dda8f03a1702166eb48750) )
3851      ROM_LOAD( "mpr-23597.ic19s", 0x9800000, 0x800000, CRC(fb50cfdb) SHA1(2e95407b1c8660ae8e85b2d06c13bdc474b93d6e) )
3852      ROM_LOAD( "mpr-23598.ic20s", 0xa000000, 0x800000, CRC(897c2304) SHA1(e21b68fd935092b5bd019e3087647e9612be1169) )
3853      ROM_LOAD( "mpr-23599.ic21s", 0xa800000, 0x800000, CRC(f2d1f73f) SHA1(40ac3ef9b1c3797e986fc4a0c593dd4e49df8892) )
3899   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
3900   ROM_LOAD( "epr-23600.ic22",  0x0000000, 0x400000, CRC(8b6fed00) SHA1(72842f266ad272e4c02be42a6529c2462fd8b63f) )
3901   ROM_LOAD( "mpr-23579.ic1",   0x0800000, 0x800000, CRC(ded76d71) SHA1(9187434587173f2fcc50af817222121703c253b7) )
3902   ROM_LOAD( "mpr-23580.ic2",   0x1000000, 0x800000, CRC(a9b29be1) SHA1(4f71b37b21623d87d805cb8d7b9da73bca1d22f3) )
3903   ROM_LOAD( "mpr-23581.ic3",   0x1800000, 0x800000, CRC(7c44d4c9) SHA1(a2c6e7392a2b52c1b5c0b133bb95fbe53736ca3e) )
3904   ROM_LOAD( "mpr-23582.ic4",   0x2000000, 0x800000, CRC(99b1af20) SHA1(598abe358d6c97a0ad6d68f5273cea1b96f73237) )
3905   ROM_LOAD( "mpr-23583.ic5",   0x2800000, 0x800000, CRC(7a81bbd1) SHA1(e36895d8964d1cdd3f316f0ec27356faa3d3f6e0) )
3906   ROM_LOAD( "mpr-23584.ic6",   0x3000000, 0x800000, CRC(e478b1df) SHA1(5b316feb618a0a61974c3fb5b4c5527873055a5b) )
3907   ROM_LOAD( "mpr-23585.ic7",   0x3800000, 0x800000, CRC(2f378c38) SHA1(881c6001c173c1ef8ddbb3ae15667e45fac11f96) )
3908   ROM_LOAD( "mpr-23586.ic8",   0x4000000, 0x800000, CRC(23bec2a7) SHA1(960a6613966bedf20c19454bbc5ec52d14c3f308) )
3909   ROM_LOAD( "mpr-23587.ic9",   0x4800000, 0x800000, CRC(f52a356b) SHA1(4e3783f5e8d02d09f474cc5ece457af5c4296508) )
3910   ROM_LOAD( "mpr-23588.ic10",  0x5000000, 0x800000, CRC(4bae020b) SHA1(e3750f87309c7ac9ab6fc504a9377971451ccb5a) )
3911   ROM_LOAD( "mpr-23589.ic11",  0x5800000, 0x800000, CRC(f6a09854) SHA1(d4ae9d7ddc349e353196cb145f732798a692e560) )
3912   ROM_LOAD( "mpr-23590.ic12s", 0x6000000, 0x800000, CRC(88e29d52) SHA1(42b66f13302772729920b9af546123c771ecec6b) )
3913   ROM_LOAD( "mpr-23591.ic13s", 0x6800000, 0x800000, CRC(8736d9b1) SHA1(d829d499dc147f0d14413554ff33187c7df9134f) )
3914   ROM_LOAD( "mpr-23592.ic14s", 0x7000000, 0x800000, CRC(c7dbeefd) SHA1(7b84d2f5532668936f60314fb3e112b1350bcc51) )
3915   ROM_LOAD( "mpr-23593.ic15s", 0x7800000, 0x800000, CRC(c8d63355) SHA1(64b06027ebbcfb72ead1d2041423ffd2fe4dcd97) )
3916   ROM_LOAD( "mpr-23594.ic16s", 0x8000000, 0x800000, CRC(30a04934) SHA1(5b3e5226b1eef9f2d9a64b89307380e2b347547e) )
3917   ROM_LOAD( "mpr-23595.ic17s", 0x8800000, 0x800000, CRC(1fea68ad) SHA1(d4615f6ea0b9ce6483cb688810ef7ae287aef082) )
3918   ROM_LOAD( "mpr-23596.ic18s", 0x9000000, 0x800000, CRC(2e57f934) SHA1(9231d3b881e210fa83dda8f03a1702166eb48750) )
3919   ROM_LOAD( "mpr-23597.ic19s", 0x9800000, 0x800000, CRC(fb50cfdb) SHA1(2e95407b1c8660ae8e85b2d06c13bdc474b93d6e) )
3920   ROM_LOAD( "mpr-23598.ic20s", 0xa000000, 0x800000, CRC(897c2304) SHA1(e21b68fd935092b5bd019e3087647e9612be1169) )
3921   ROM_LOAD( "mpr-23599.ic21s", 0xa800000, 0x800000, CRC(f2d1f73f) SHA1(40ac3ef9b1c3797e986fc4a0c593dd4e49df8892) )
3922
3923   ROM_REGION( 4, "rom_key", 0 )
3924   ROM_LOAD( "samba2k-key.bin", 0, 4, CRC(01c0d74a) SHA1(4461cfd761919ba4bc6f1d1839a880f11eaf8d0f) )
38543925ROM_END
38553926
3927ROM_START( alienfnt )
3928   NAOMI_BIOS
3929   NAOMI_DEFAULT_EEPROM
38563930
3931   ROM_REGION( 0x5800000, "rom_board", ROMREGION_ERASEFF)
3932   ROM_LOAD( "epr-23586a.ic22", 0x0000000, 0x0400000, CRC(0fea04fc) SHA1(e9356e941d10db80d6d5dfa5f3237ea7c9044a73) )
3933   ROM_LOAD( "mpr-23581.ic1",   0x0800000, 0x1000000, CRC(ef0b93ce) SHA1(52fc7f52dc0b079df8c44a6766c8f54678e6a722) )
3934   ROM_LOAD( "mpr-23582.ic2",   0x1800000, 0x1000000, CRC(e396009c) SHA1(70bf0d78f20e0bd9632d3f4d6501bc1dedfe0672) )
3935   ROM_LOAD( "mpr-23583.ic3",   0x2800000, 0x1000000, CRC(878e8efe) SHA1(a48a4ab2816605b817dc62d4080b7dc88100a270) )
3936   ROM_LOAD( "mpr-23584.ic4",   0x3800000, 0x1000000, CRC(8d444756) SHA1(89c480f9ed1239c8ae565c85fa0fd50324264b20) )
3937   ROM_LOAD( "mpr-23585.ic5",   0x4800000, 0x1000000, CRC(883a6482) SHA1(e3145710df793b7fd67f02707904416210a71978) )
3938
3939   ROM_REGION( 4, "rom_key", 0 )
3940   ROM_LOAD( "alienfnt-key.bin", 0x000000, 0x000004, CRC(0cac6605) SHA1(7a050f13e3b9a10d6cdb851a8c67006f6548c60a) )
3941ROM_END
3942
38573943/*
38583944SYSTEMID: NAOMI
38593945JAP: GUILTY GEAR X
r12704r12705
38623948*/
38633949
38643950ROM_START( ggx )
3865   ROM_REGION( 0x200000, "maincpu", 0)
38663951   NAOMI_BIOS
38673952   NAOMI_DEFAULT_EEPROM
38683953
3869   ROM_REGION( 0x7800000, "user1", ROMREGION_ERASEFF)
3954   ROM_REGION( 0x7800000, "rom_board", ROMREGION_ERASEFF)
38703955   ROM_LOAD("epr-23356.ic22", 0x0000000, 0x0400000, CRC(ed2d289f) SHA1(d4f73c6cd25f320616e21f1ff0cdc0a566185dcb) )
38713956   ROM_LOAD("mpr-23342.ic1",  0x0800000, 0x0800000, CRC(4fd89557) SHA1(3a687393d38e890acb0d1b0edc3ea585773c0222) )
38723957   ROM_LOAD("mpr-23343.ic2",  0x1000000, 0x0800000, CRC(2e4417b6) SHA1(0f87fa92f01116b0acfae5f1b5a148c1a12a487f) )
r12704r12705
38823967   ROM_LOAD("mpr-23353.ic12", 0x6000000, 0x0800000, CRC(daa0ca24) SHA1(afce14e213e79add7fded838e71bb4447425906a) )
38833968   ROM_LOAD("mpr-23354.ic13", 0x6800000, 0x0800000, CRC(cea127f7) SHA1(11f12472ebfc93eb72b764c780e30afd4812dbe9) )
38843969   ROM_LOAD("mpr-23355.ic14", 0x7000000, 0x0800000, CRC(e809685f) SHA1(dc052b4eb4fdcfdc22c4807316ce34ee7a0d58a6) )
3970
3971   ROM_REGION( 4, "rom_key", 0 )
3972   ROM_LOAD( "ggx-key.bin", 0, 4, CRC(455a831b) SHA1(1834fc714224ac990a0677e8925493e92a4b5e5e) )
38853973ROM_END
38863974
38873975/*
r12704r12705
39093997
39103998
39113999ROM_START( hmgeo )
3912   ROM_REGION( 0x200000, "maincpu", 0)
39134000   NAOMI_BIOS
39144001   NAOMI_DEFAULT_EEPROM
39154002
3916   ROM_REGION( 0x6000000, "user1", ROMREGION_ERASEFF)
4003   ROM_REGION( 0x6000000, "rom_board", ROMREGION_ERASEFF)
39174004   ROM_LOAD("epr-23716a.ic22", 0x0000000, 0x0400000,  CRC(c5cb0d3b) SHA1(20de8f5ee183e996ccde77b10564a302939662db) )
39184005   ROM_RELOAD( 0x400000, 0x400000)
39194006   ROM_LOAD("mpr-23705.ic1", 0x0800000, 0x0800000, CRC(2549b57d) SHA1(02c04c8ccb0de680171d06700ca9a40208286894) )
r12704r12705
39264013   ROM_LOAD("mpr-23712.ic8", 0x4000000, 0x0800000, CRC(154f10ce) SHA1(67f6ff297f77632efe1965a81ed9f5c7dfa7a6b3) )
39274014   ROM_LOAD("mpr-23713.ic9", 0x4800000, 0x0800000, CRC(2969bac7) SHA1(5f1cf6ac726c2fe183d66e4022962e44592f9ccd) )
39284015   ROM_LOAD("mpr-23714.ic10",0x5000000, 0x0800000, CRC(da462c44) SHA1(ca450b6c07f939f96eba7b44c45b4e38abd598aa) )
3929        ROM_LOAD("mpr-23715.ic11",0x5800000, 0x0800000, CRC(c750abbd) SHA1(2a5bedc2b21cd3f991c7145ccfd8c7a9e7f647ae) )
4016   ROM_LOAD("mpr-23715.ic11",0x5800000, 0x0800000, CRC(c750abbd) SHA1(2a5bedc2b21cd3f991c7145ccfd8c7a9e7f647ae) )
4017
4018   ROM_REGION( 4, "rom_key", 0 )
4019   ROM_LOAD( "hmgeo-key.bin", 0, 4, CRC(78411d2f) SHA1(9809ef35406ea48639cf78d5d366069a06a411f0) )
39304020ROM_END
39314021
39324022/*
r12704r12705
39524042*/
39534043
39544044ROM_START( gwing2 )
3955   ROM_REGION( 0x200000, "maincpu", 0)
39564045   NAOMI_BIOS
39574046   NAOMI_DEFAULT_EEPROM
39584047
3959   ROM_REGION( 0x5800000, "user1", ROMREGION_ERASEFF)
4048   ROM_REGION( 0x5800000, "rom_board", ROMREGION_ERASEFF)
39604049   ROM_LOAD("epr-22270.ic22",0x0000000, 0x0200000,  CRC(876b3c97) SHA1(eb171d4a0521c3bea42b4aae3607faec63e10581) )
3961        ROM_LOAD("mpr-22271.ic1", 0x0800000, 0x1000000, CRC(9a072af5) SHA1(d5edff43d180346ba4d4f214c08f2db290a72def) )
3962        ROM_LOAD("mpr-22272.ic2", 0x1800000, 0x1000000, CRC(1e816ab1) SHA1(6e1fd47a21f5da7d2145caaf68094445f122a239) )
3963        ROM_LOAD("mpr-22273.ic3", 0x2800000, 0x1000000, CRC(cd633dcf) SHA1(f044d93802a4ba29d0e70c597d3fbe65da591335) )
3964        ROM_LOAD("mpr-22274.ic4", 0x3800000, 0x1000000, CRC(f8daaaf3) SHA1(8854d3f8e3d55715ede33ee918b641e251f752b4) )
3965        ROM_LOAD("mpr-22275.ic5", 0x4800000, 0x1000000, CRC(61aa1521) SHA1(7d9f5790e72a9151d128ac7887e236526fdf72a0) )
4050   ROM_LOAD("mpr-22271.ic1", 0x0800000, 0x1000000, CRC(9a072af5) SHA1(d5edff43d180346ba4d4f214c08f2db290a72def) )
4051   ROM_LOAD("mpr-22272.ic2", 0x1800000, 0x1000000, CRC(1e816ab1) SHA1(6e1fd47a21f5da7d2145caaf68094445f122a239) )
4052   ROM_LOAD("mpr-22273.ic3", 0x2800000, 0x1000000, CRC(cd633dcf) SHA1(f044d93802a4ba29d0e70c597d3fbe65da591335) )
4053   ROM_LOAD("mpr-22274.ic4", 0x3800000, 0x1000000, CRC(f8daaaf3) SHA1(8854d3f8e3d55715ede33ee918b641e251f752b4) )
4054   ROM_LOAD("mpr-22275.ic5", 0x4800000, 0x1000000, CRC(61aa1521) SHA1(7d9f5790e72a9151d128ac7887e236526fdf72a0) )
4055
4056   ROM_REGION( 4, "rom_key", 0 )
4057   ROM_LOAD( "gwing2-key.bin", 0, 4, CRC(433132ce) SHA1(27f6e6ba2dd28c777317ff085432c2d43b93a603) )
39664058ROM_END
39674059
39684060/*
r12704r12705
39904082*/
39914083
39924084ROM_START( suchie3 )
3993   ROM_REGION( 0x200000, "maincpu", 0)
39944085   NAOMI_BIOS
39954086   NAOMI_DEFAULT_EEPROM
39964087
3997   ROM_REGION( 0x7800000, "user1", ROMREGION_ERASEFF)
4088   ROM_REGION( 0x7800000, "rom_board", ROMREGION_ERASEFF)
39984089   ROM_LOAD("epr-21979.ic22",0x0000000, 0x0200000, CRC(335c9e25) SHA1(476790fdd99a8c13336e795b4a39b071ed86a97c) )
39994090   ROM_LOAD("mpr-21980.ic1", 0x0800000, 0x0800000, CRC(2b5f958a) SHA1(609585dda27c5e111378a92f04fa03ae11d42540) )
40004091   ROM_LOAD("mpr-21981.ic2", 0x1000000, 0x0800000, CRC(b4fff4ee) SHA1(333fb5a662775662881154b654233f207782a8aa) )
r12704r12705
40104101   ROM_LOAD("mpr-21991.ic12",0x6000000, 0x0800000, CRC(d82f834a) SHA1(06902713bdf6f68182749916cacc9ae6528dc355) )
40114102   ROM_LOAD("mpr-21992.ic13",0x6800000, 0x0800000, CRC(599a2fb8) SHA1(2a0007064ad2ee1e1a0fda1d5676df4ff19a9f2f) )
40124103   ROM_LOAD("mpr-21993.ic14",0x7000000, 0x0400000, CRC(fb28cf0a) SHA1(d51b1d4514a93074d1f77bd1bc5995739604cf56) )
4104
4105   ROM_REGION( 4, "rom_key", 0 )
4106   ROM_LOAD( "suchie3-key.bin", 0, 4, CRC(592b5204) SHA1(ba18a5302ea271f58617a9793dfb85a0123080c8) )
40134107ROM_END
40144108
40154109/*
r12704r12705
40204114*/
40214115
40224116ROM_START( shangril )
4023   ROM_REGION( 0x200000, "maincpu", 0)
40244117   NAOMI_BIOS
40254118   NAOMI_DEFAULT_EEPROM
40264119
4027   ROM_REGION( 0x6800000, "user1", ROMREGION_ERASEFF)
4120   ROM_REGION( 0x6800000, "rom_board", ROMREGION_ERASEFF)
40284121   ROM_LOAD("epr-22060.ic22", 0x0000000, 0x0400000, CRC(5ae18595) SHA1(baaf8fd948b07ab9970571fecebc3c4fab5d4897) )
40294122   ROM_LOAD("mpr-22061.ic1",  0x0800000, 0x0800000, CRC(4d760b34) SHA1(ba7dce0ab7961a77622a41c3f50c112a7e9904aa) )
40304123   ROM_LOAD("mpr-22062.ic2",  0x1000000, 0x0800000, CRC(f713c59f) SHA1(75d8559f1b847fd6a51009fe9333b9627adcbd75) )
r12704r12705
40524145*/
40534146
40544147ROM_START( mvsc2 )
4055   ROM_REGION( 0x200000, "maincpu", 0)
40564148   NAOMI_BIOS
40574149   NAOMI_DEFAULT_EEPROM
40584150
4059   ROM_REGION( 0x8900000, "user1", ROMREGION_ERASEFF)
4151   ROM_REGION( 0x8900000, "rom_board", ROMREGION_ERASEFF)
40604152   ROM_LOAD("epr-23085a.ic11", 0x0000000, 0x0400000, CRC(5d5b7ad1) SHA1(f58c31b245fc33fa541f9f074548402a63f7c3d3) )
40614153   ROM_RELOAD( 0x400000, 0x400000)
40624154   ROM_LOAD("mpr-23048.ic17",  0x0800000, 0x0800000, CRC(93d7a63a) SHA1(c50d10b4a3f9db51eae5749f5b665d7c8ab6c898) )
r12704r12705
40754167   ROM_LOAD("mpr-23061.ic30",  0x7000000, 0x0800000, CRC(fb1844c4) SHA1(1d1571516a6dbed0c4ded3b80efde9cc9281f66f) )
40764168   ROM_LOAD("mpr-23083.ic31",  0x7800000, 0x0400000, CRC(c61d2dfe) SHA1(a05fb979ed7c8040de91716fc8814e6bd995efa2) )
40774169   ROM_LOAD("mpr-23084.ic32",  0x8000000, 0x0400000, CRC(e228cdfd) SHA1(d02a2e3557bd24cf34c5ddb42d41ca15e78ae885) )
4170
4171   ROM_REGION( 4, "rom_key", 0 )
4172   ROM_LOAD( "mvsc2-key.bin", 0, 4, CRC(76f095b4) SHA1(773fd67e1eb471a989b3ee6e969a3d33bf61e779) )
40784173ROM_END
40794174
40804175/* toy fighter - 1999 sega */
40814176
40824177ROM_START( toyfight )
4083   ROM_REGION( 0x200000, "maincpu", 0)
40844178   NAOMI_BIOS
40854179   NAOMI_DEFAULT_EEPROM
40864180
4087   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASEFF)
4181   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASEFF)
40884182   ROM_LOAD("epr-22035.ic22",0x0000000, 0x0400000, CRC(dbc76493) SHA1(a9772bdb62610a39adf2b9f397781bcddda3e635) )
40894183
40904184   ROM_LOAD("mpr-22025.ic1", 0x0800000, 0x0800000, CRC(30237202) SHA1(e229a7671b3a34b26a461716bd7b437da100e1c8) )
r12704r12705
40974191   ROM_LOAD("mpr-22032.ic8", 0x4000000, 0x0800000, CRC(3c48c9ba) SHA1(00be199b23040f8e81db2ec489ba98cbf615652c) )
40984192   ROM_LOAD("mpr-22033.ic9", 0x4800000, 0x0800000, CRC(5fe5586e) SHA1(3ff41ae1f81469597684faadd88e62b5e0634352) )
40994193   ROM_LOAD("mpr-22034.ic10",0x5000000, 0x0800000, CRC(3aa5ce5e) SHA1(f00a906235e4522d6fc2ac771324114346875314) )
4194
4195   ROM_REGION( 4, "rom_key", 0 )
4196   ROM_LOAD( "toyfight-key.bin", 0, 4, CRC(8e074319) SHA1(b1b88bc57b81c08853d4aa77a5da48e293da4f42) )
41004197ROM_END
41014198
41024199/* Crazy Taxi */
41034200ROM_START( crzytaxi )
4104   ROM_REGION( 0x200000, "maincpu", 0)
41054201   NAOMI_BIOS
41064202   NAOMI_DEFAULT_EEPROM
41074203
4108   ROM_REGION( 0x8800000, "user1", ROMREGION_ERASEFF)
4109        ROM_LOAD( "epr-21684.ic22",   0x0000000, 0x400000, CRC(f1de77b7) SHA1(4490b828534db6676b2d0129498fd7694eb9e5ff) )
4110        ROM_LOAD( "mpr-21671.ic1",   0x0800000, 0x800000, CRC(2d362137) SHA1(ed6eb45eadb784910eee44d0273534ab68ad6937) )
4111        ROM_LOAD( "mpr-21672.ic2",   0x1000000, 0x800000, CRC(72c7da8e) SHA1(0ed3d71c052a2cccbbf0f7b20e2ec688316c7247) )
4112        ROM_LOAD( "mpr-21673.ic3",   0x1800000, 0x800000, CRC(27481c0d) SHA1(08779e33eda1a45cb06319327cb4254dc3e4460f) )
4113        ROM_LOAD( "mpr-21674.ic4",   0x2000000, 0x800000, CRC(c2e2a98c) SHA1(9a40456ca025c2a6314cef705f7d147bbf95c0f0) )
4114        ROM_LOAD( "mpr-21675.ic5",   0x2800000, 0x800000, CRC(6b755510) SHA1(3fa967587e05c5bd45db3fe8a2cbc56f44166ef6) )
4115        ROM_LOAD( "mpr-21676.ic6",   0x3000000, 0x800000, CRC(f33d1f39) SHA1(b1d589a9ab7ec4988e63bfb458ef006308e1de70) )
4116        ROM_LOAD( "mpr-21677.ic7",   0x3800000, 0x800000, CRC(ab4dc61b) SHA1(d92ff434e7a2b9d3598f9d7004aa717b9bd21980) )
4117        ROM_LOAD( "mpr-21678.ic10",  0x5000000, 0x800000, CRC(297c778a) SHA1(67e5685cd03a3aaaac1c47f15c7b3f3e341d34b1) )
4118        ROM_LOAD( "mpr-21679.ic11",  0x5800000, 0x800000, CRC(6b540c4a) SHA1(9877c31b41110230182c0ee8d40753907981c7f9) )
4119        ROM_LOAD( "mpr-21680.ic12s", 0x6000000, 0x800000, CRC(e76f03f9) SHA1(ea20aa86d02a77315cca8cb6be75ca4ca9cc7484) )
4120        ROM_LOAD( "mpr-21681.ic13s", 0x6800000, 0x800000, CRC(e5dcde7d) SHA1(8a90d9fb4ce0d2ceb609fcf4c54cf5b55c266c50) )
4121        ROM_LOAD( "mpr-21682.ic14s", 0x7000000, 0x800000, CRC(54c0290e) SHA1(6e07ab6e95c29a2aabed0ba1a7af0d7d605e0309) )
4122        ROM_LOAD( "mpr-21683.ic15s", 0x7800000, 0x800000, CRC(ac8a27e0) SHA1(8e71d853a102dd6c164d5326e6d157ccfb8c7b36) )
4204   ROM_REGION( 0x8800000, "rom_board", ROMREGION_ERASEFF)
4205   ROM_LOAD( "epr-21684.ic22",   0x0000000, 0x400000, CRC(f1de77b7) SHA1(4490b828534db6676b2d0129498fd7694eb9e5ff) )
4206   ROM_LOAD( "mpr-21671.ic1",   0x0800000, 0x800000, CRC(2d362137) SHA1(ed6eb45eadb784910eee44d0273534ab68ad6937) )
4207   ROM_LOAD( "mpr-21672.ic2",   0x1000000, 0x800000, CRC(72c7da8e) SHA1(0ed3d71c052a2cccbbf0f7b20e2ec688316c7247) )
4208   ROM_LOAD( "mpr-21673.ic3",   0x1800000, 0x800000, CRC(27481c0d) SHA1(08779e33eda1a45cb06319327cb4254dc3e4460f) )
4209   ROM_LOAD( "mpr-21674.ic4",   0x2000000, 0x800000, CRC(c2e2a98c) SHA1(9a40456ca025c2a6314cef705f7d147bbf95c0f0) )
4210   ROM_LOAD( "mpr-21675.ic5",   0x2800000, 0x800000, CRC(6b755510) SHA1(3fa967587e05c5bd45db3fe8a2cbc56f44166ef6) )
4211   ROM_LOAD( "mpr-21676.ic6",   0x3000000, 0x800000, CRC(f33d1f39) SHA1(b1d589a9ab7ec4988e63bfb458ef006308e1de70) )
4212   ROM_LOAD( "mpr-21677.ic7",   0x3800000, 0x800000, CRC(ab4dc61b) SHA1(d92ff434e7a2b9d3598f9d7004aa717b9bd21980) )
4213   ROM_LOAD( "mpr-21678.ic10",  0x5000000, 0x800000, CRC(297c778a) SHA1(67e5685cd03a3aaaac1c47f15c7b3f3e341d34b1) )
4214   ROM_LOAD( "mpr-21679.ic11",  0x5800000, 0x800000, CRC(6b540c4a) SHA1(9877c31b41110230182c0ee8d40753907981c7f9) )
4215   ROM_LOAD( "mpr-21680.ic12s", 0x6000000, 0x800000, CRC(e76f03f9) SHA1(ea20aa86d02a77315cca8cb6be75ca4ca9cc7484) )
4216   ROM_LOAD( "mpr-21681.ic13s", 0x6800000, 0x800000, CRC(e5dcde7d) SHA1(8a90d9fb4ce0d2ceb609fcf4c54cf5b55c266c50) )
4217   ROM_LOAD( "mpr-21682.ic14s", 0x7000000, 0x800000, CRC(54c0290e) SHA1(6e07ab6e95c29a2aabed0ba1a7af0d7d605e0309) )
4218   ROM_LOAD( "mpr-21683.ic15s", 0x7800000, 0x800000, CRC(ac8a27e0) SHA1(8e71d853a102dd6c164d5326e6d157ccfb8c7b36) )
4219
4220   ROM_REGION( 4, "rom_key", 0 )
4221   ROM_LOAD( "crzytaxi-key.bin", 0, 4, CRC(3d36c13d) SHA1(746e82e7f1d6f4629dde00fb6b32943741b6ec70) )
41234222ROM_END
41244223
41254224/* Jambo! Safari */
41264225ROM_START( jambo )
4127   ROM_REGION( 0x200000, "maincpu", 0)
41284226   NAOMI_BIOS
41294227   NAOMI_DEFAULT_EEPROM
41304228
4131   ROM_REGION( 0x8800000, "user1", ROMREGION_ERASEFF)
4132        ROM_LOAD( "epr-22826a.ic22", 0x0000000, 0x400000, CRC(18f8f3bc) SHA1(417f2282c9970775e51b56d2eeb671a50ca293a7) )
4133        ROM_LOAD( "mpr-22818.ic1",  0x0800000, 0x800000, CRC(3a709e11) SHA1(e7dd71dd244e872c35595456bd428dd79a81f081) )
4134        ROM_LOAD( "mpr-22819.ic2",  0x1000000, 0x800000, CRC(57b2d565) SHA1(be5e6404c8187dc75cd6f033a36af413bf28bdee) )
4135        ROM_LOAD( "mpr-22820.ic3",  0x1800000, 0x800000, CRC(3284e16b) SHA1(bdf9249f19c0a444a9f00e831563e91c576a7cca) )
4136        ROM_LOAD( "mpr-22821.ic4",  0x2000000, 0x800000, CRC(5ca54154) SHA1(7bb1ba3fae71368145fd68d31bdce0588f641f78) )
4137        ROM_LOAD( "mpr-22822.ic5",  0x2800000, 0x800000, CRC(8bc0c4d5) SHA1(b250ddeaab904b15737f1348b62d7b3f11103609) )
4138        ROM_LOAD( "mpr-22823.ic6",  0x3000000, 0x800000, CRC(00c33e51) SHA1(c55646a146ed259e6c61fd912c93fa784b5e6910) )
4139        ROM_LOAD( "mpr-22824.ic7",  0x3800000, 0x800000, CRC(cc55304a) SHA1(e548d8de83469e5816c55dbbb00afbb894282fd6) )
4140        ROM_LOAD( "mpr-22825.ic8",  0x4000000, 0x800000, CRC(85bada10) SHA1(b6e15d8f1d6bca12ffa4816ed0393c04ca500fba) )
4229   ROM_REGION( 0x8800000, "rom_board", ROMREGION_ERASEFF)
4230   ROM_LOAD( "epr-22826a.ic22", 0x0000000, 0x400000, CRC(18f8f3bc) SHA1(417f2282c9970775e51b56d2eeb671a50ca293a7) )
4231   ROM_LOAD( "mpr-22818.ic1",  0x0800000, 0x800000, CRC(3a709e11) SHA1(e7dd71dd244e872c35595456bd428dd79a81f081) )
4232   ROM_LOAD( "mpr-22819.ic2",  0x1000000, 0x800000, CRC(57b2d565) SHA1(be5e6404c8187dc75cd6f033a36af413bf28bdee) )
4233   ROM_LOAD( "mpr-22820.ic3",  0x1800000, 0x800000, CRC(3284e16b) SHA1(bdf9249f19c0a444a9f00e831563e91c576a7cca) )
4234   ROM_LOAD( "mpr-22821.ic4",  0x2000000, 0x800000, CRC(5ca54154) SHA1(7bb1ba3fae71368145fd68d31bdce0588f641f78) )
4235   ROM_LOAD( "mpr-22822.ic5",  0x2800000, 0x800000, CRC(8bc0c4d5) SHA1(b250ddeaab904b15737f1348b62d7b3f11103609) )
4236   ROM_LOAD( "mpr-22823.ic6",  0x3000000, 0x800000, CRC(00c33e51) SHA1(c55646a146ed259e6c61fd912c93fa784b5e6910) )
4237   ROM_LOAD( "mpr-22824.ic7",  0x3800000, 0x800000, CRC(cc55304a) SHA1(e548d8de83469e5816c55dbbb00afbb894282fd6) )
4238   ROM_LOAD( "mpr-22825.ic8",  0x4000000, 0x800000, CRC(85bada10) SHA1(b6e15d8f1d6bca12ffa4816ed0393c04ca500fba) )
4239
4240   ROM_REGION( 4, "rom_key", 0 )
4241   ROM_LOAD( "jambo-key.bin", 0, 4, CRC(e78e9ac8) SHA1(677d7f21c238e12362ad65d6496f285d688fc3a9) )
41414242ROM_END
41424243
41434244/* 18 Wheeler DELUXE (Rev A) */
41444245ROM_START( 18wheelr )
4145   ROM_REGION( 0x200000, "maincpu", 0)
41464246   NAOMI_BIOS
41474247   NAOMI_DEFAULT_EEPROM
41484248
4149   ROM_REGION( 0xa800000, "user1", ROMREGION_ERASEFF)
4150        ROM_LOAD( "epr-22185.ic22",   0x0000000, 0x400000, CRC(219b29b0) SHA1(2f32caf3906fc1408fd8126a500e74c682ff20fa) )
4151        ROM_LOAD( "mpr-22164.ic1",   0x0800000, 0x800000, CRC(ca045315) SHA1(0c5becb5220659fa86f1e7901032f8c9a1329a51) )
4152        ROM_LOAD( "mpr-22165.ic2",   0x1000000, 0x800000, CRC(e43f4ba8) SHA1(768159bccae6a72c809e9f374538df304c92fbfe) )
4153        ROM_LOAD( "mpr-22166.ic3",   0x1800000, 0x800000, CRC(ea67edb1) SHA1(1214fdbfd8ce9f7a2b33e97f7c4e22ebb3eee988) )
4154        ROM_LOAD( "mpr-22167.ic4",   0x2000000, 0x800000, CRC(df6125e2) SHA1(7244278cf89b88dbc7b8b1e3a537bf0b3f521c3a) )
4155        ROM_LOAD( "mpr-22168.ic5",   0x2800000, 0x800000, CRC(8a919f9c) SHA1(28f1f9d8943e0a0b7bc186808cdab5d21d914e05) )
4156        ROM_LOAD( "mpr-22169.ic6",   0x3000000, 0x800000, CRC(a0fa7d68) SHA1(010fc87f0df3cf9e3d01a5ca4d4aa7e84728652d) )
4157        ROM_LOAD( "mpr-22170.ic7",   0x3800000, 0x800000, CRC(1f407049) SHA1(3c11b25168715d200f8d78a3db7bfc8cb3c29897) )
4158        ROM_LOAD( "mpr-22171.ic8",   0x4000000, 0x800000, CRC(03ce8dcd) SHA1(9bf1eb0a2628317bea5d8899e34f6f4363729c52) )
4159        ROM_LOAD( "mpr-22172.ic9",   0x4800000, 0x800000, CRC(c3e8c978) SHA1(96cbaa0f13e22365b04818cb5cad2ddc2027e38a) )
4160        ROM_LOAD( "mpr-22173.ic10",  0x5000000, 0x800000, CRC(3caec8fc) SHA1(88ee6b0a1735788570d0a6507eec14a31ebabb9a) )
4161        ROM_LOAD( "mpr-22174.ic11",  0x5800000, 0x800000, CRC(17245a27) SHA1(b3701155b1bbdbcbfb5ea686470c3c432d2573b7) )
4162        ROM_LOAD( "mpr-22175.ic12s", 0x6000000, 0x800000, CRC(4d984682) SHA1(60270d6caa3bbc0025a0c01cf4d7b10783216e0b) )
4163        ROM_LOAD( "mpr-22176.ic13s", 0x6800000, 0x800000, CRC(3ea2403f) SHA1(efde74c621a8fe17d8aa3a24da35e2ca6bc0bd9a) )
4164        ROM_LOAD( "mpr-22177.ic14s", 0x7000000, 0x800000, CRC(15514cbc) SHA1(0171d67560b8d72ca3f718dcce301acc60dee1fa) )
4165        ROM_LOAD( "mpr-22178.ic15s", 0x7800000, 0x800000, CRC(9ea0552f) SHA1(4b282110ef9f60f942518f3849acfff4a5faf4bd) )
4166        ROM_LOAD( "mpr-22179.ic16s", 0x8000000, 0x800000, CRC(6915c4e6) SHA1(b44d49edcfdc0f2958bf1a3856b09b5442e8f1a3) )
4167        ROM_LOAD( "mpr-22180.ic17s", 0x8800000, 0x800000, CRC(744c3a40) SHA1(56fba6ebc45d542ba6e4f4dd205194344f127ac2) )
4168        ROM_LOAD( "mpr-22181.ic18s", 0x9000000, 0x800000, CRC(5a39b68e) SHA1(0f81ed1116b1829262f320fc82f93df107b6f848) )
4169        ROM_LOAD( "mpr-22182.ic19s", 0x9800000, 0x800000, CRC(c5606c42) SHA1(5871104ff1c7acde0493e13b9a4d0abdf8a40728) )
4170        ROM_LOAD( "mpr-22183.ic20s", 0xa000000, 0x800000, CRC(776af308) SHA1(7d29cb4dce75d34c622549fea7e102868d0da60a) )
4249   ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
4250   ROM_LOAD( "epr-22185.ic22",  0x0000000, 0x400000, CRC(219b29b0) SHA1(2f32caf3906fc1408fd8126a500e74c682ff20fa) )
4251   ROM_LOAD( "mpr-22164.ic1",   0x0800000, 0x800000, CRC(ca045315) SHA1(0c5becb5220659fa86f1e7901032f8c9a1329a51) )
4252   ROM_LOAD( "mpr-22165.ic2",   0x1000000, 0x800000, CRC(e43f4ba8) SHA1(768159bccae6a72c809e9f374538df304c92fbfe) )
4253   ROM_LOAD( "mpr-22166.ic3",   0x1800000, 0x800000, CRC(ea67edb1) SHA1(1214fdbfd8ce9f7a2b33e97f7c4e22ebb3eee988) )
4254   ROM_LOAD( "mpr-22167.ic4",   0x2000000, 0x800000, CRC(df6125e2) SHA1(7244278cf89b88dbc7b8b1e3a537bf0b3f521c3a) )
4255   ROM_LOAD( "mpr-22168.ic5",   0x2800000, 0x800000, CRC(8a919f9c) SHA1(28f1f9d8943e0a0b7bc186808cdab5d21d914e05) )
4256   ROM_LOAD( "mpr-22169.ic6",   0x3000000, 0x800000, CRC(a0fa7d68) SHA1(010fc87f0df3cf9e3d01a5ca4d4aa7e84728652d) )
4257   ROM_LOAD( "mpr-22170.ic7",   0x3800000, 0x800000, CRC(1f407049) SHA1(3c11b25168715d200f8d78a3db7bfc8cb3c29897) )
4258   ROM_LOAD( "mpr-22171.ic8",   0x4000000, 0x800000, CRC(03ce8dcd) SHA1(9bf1eb0a2628317bea5d8899e34f6f4363729c52) )
4259   ROM_LOAD( "mpr-22172.ic9",   0x4800000, 0x800000, CRC(c3e8c978) SHA1(96cbaa0f13e22365b04818cb5cad2ddc2027e38a) )
4260   ROM_LOAD( "mpr-22173.ic10",  0x5000000, 0x800000, CRC(3caec8fc) SHA1(88ee6b0a1735788570d0a6507eec14a31ebabb9a) )
4261   ROM_LOAD( "mpr-22174.ic11",  0x5800000, 0x800000, CRC(17245a27) SHA1(b3701155b1bbdbcbfb5ea686470c3c432d2573b7) )
4262   ROM_LOAD( "mpr-22175.ic12s", 0x6000000, 0x800000, CRC(4d984682) SHA1(60270d6caa3bbc0025a0c01cf4d7b10783216e0b) )
4263   ROM_LOAD( "mpr-22176.ic13s", 0x6800000, 0x800000, CRC(3ea2403f) SHA1(efde74c621a8fe17d8aa3a24da35e2ca6bc0bd9a) )
4264   ROM_LOAD( "mpr-22177.ic14s", 0x7000000, 0x800000, CRC(15514cbc) SHA1(0171d67560b8d72ca3f718dcce301acc60dee1fa) )
4265   ROM_LOAD( "mpr-22178.ic15s", 0x7800000, 0x800000, CRC(9ea0552f) SHA1(4b282110ef9f60f942518f3849acfff4a5faf4bd) )
4266   ROM_LOAD( "mpr-22179.ic16s", 0x8000000, 0x800000, CRC(6915c4e6) SHA1(b44d49edcfdc0f2958bf1a3856b09b5442e8f1a3) )
4267   ROM_LOAD( "mpr-22180.ic17s", 0x8800000, 0x800000, CRC(744c3a40) SHA1(56fba6ebc45d542ba6e4f4dd205194344f127ac2) )
4268   ROM_LOAD( "mpr-22181.ic18s", 0x9000000, 0x800000, CRC(5a39b68e) SHA1(0f81ed1116b1829262f320fc82f93df107b6f848) )
4269   ROM_LOAD( "mpr-22182.ic19s", 0x9800000, 0x800000, CRC(c5606c42) SHA1(5871104ff1c7acde0493e13b9a4d0abdf8a40728) )
4270   ROM_LOAD( "mpr-22183.ic20s", 0xa000000, 0x800000, CRC(776af308) SHA1(7d29cb4dce75d34c622549fea7e102868d0da60a) )
41714271
4272   ROM_REGION( 4, "rom_key", 0 )
4273   ROM_LOAD( "18wheelr-key.bin", 0, 4, CRC(046f97f5) SHA1(11eb5cffdd67d460718b63ddee8ff4dfa7d72314) )
4274
41724275   // JVS I/O board 837-13844, code is for a Z80 of unknown type (it's inside the big Sega ASIC)
41734276   ROM_REGION( 0x20000, "jvsio", ROMREGION_ERASEFF)
4174        ROM_LOAD( "epr-21868.ic7", 0x000000, 0x010000, CRC(c306a51f) SHA1(7833b73dc34c4c62401a30637968f46b949ceac0) )
4277   ROM_LOAD( "epr-21868.ic7", 0x000000, 0x010000, CRC(c306a51f) SHA1(7833b73dc34c4c62401a30637968f46b949ceac0) )
41754278   // later version of the same I/O board (temporary, we'll handle this properly later)
4176        ROM_LOAD( "epr-22082.ic7", 0x010000, 0x010000, CRC(de26fc6c) SHA1(cf8ef7969770fff8697299c3e3152413b898a967) )
4279   ROM_LOAD( "epr-22082.ic7", 0x010000, 0x010000, CRC(de26fc6c) SHA1(cf8ef7969770fff8697299c3e3152413b898a967) )
41774280
41784281   // 18 Wheeler motor controller 838-13992, code is for a TMPZ84C015 which is Z80 compatible
41794282   ROM_REGION( 0x10000, "motorio", ROMREGION_ERASEFF)
4180        ROM_LOAD( "epr-23000.ic8", 0x000000, 0x010000, CRC(e3b162f7) SHA1(52c7ad759c3c4a3148764e14d77ba5006bc8af48) )
4283   ROM_LOAD( "epr-23000.ic8", 0x000000, 0x010000, CRC(e3b162f7) SHA1(52c7ad759c3c4a3148764e14d77ba5006bc8af48) )
41814284ROM_END
41824285
41834286/* Sega Strike Fighter */
41844287ROM_START( sstrkfgt )
4185   ROM_REGION( 0x200000, "maincpu", 0)
41864288   NAOMI_BIOS
41874289   NAOMI_DEFAULT_EEPROM
41884290
4189   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
4190        ROM_LOAD( "epr-23323a.ic22", 0x0000000, 0x400000, CRC(f3fd304b) SHA1(012eefebd857200195d9e2d80c24a793b258d7e2) )
4191        ROM_LOAD( "mpr-23302.ic1",   0x0800000, 0x800000, CRC(3429321b) SHA1(6fc1be2ca71a690a2ceca9dc968183a1222177f7) )
4192        ROM_LOAD( "mpr-23303.ic2",   0x1000000, 0x800000, CRC(f7b3ada2) SHA1(d2caea852241cb0d91243d84d1c5523dfddac721) )
4193        ROM_LOAD( "mpr-23304.ic3",   0x1800000, 0x800000, CRC(3bf145e9) SHA1(a000e135ad640472418de418b92dbdb83dcf872b) )
4194        ROM_LOAD( "mpr-23305.ic4",   0x2000000, 0x800000, CRC(924ee9fd) SHA1(dd56f8cd7e9dda87968abb810694bddeeb31db5c) )
4195        ROM_LOAD( "mpr-23306.ic5",   0x2800000, 0x800000, CRC(4021e805) SHA1(75988ff8d710da6d90608cef87fc8b4408a617fb) )
4196        ROM_LOAD( "mpr-23307.ic6",   0x3000000, 0x800000, CRC(090c1812) SHA1(e3e32d5c1f42191e188f91dbd4a753030894aa6f) )
4197        ROM_LOAD( "mpr-23308.ic7",   0x3800000, 0x800000, CRC(f23d2198) SHA1(9775796a388ab903102126fb190867a0d192903e) )
4198        ROM_LOAD( "mpr-23309.ic8",   0x4000000, 0x800000, CRC(0d6a7c9d) SHA1(0df846289d598efdf5605ca8e09758eb8b5878f9) )
4199        ROM_LOAD( "mpr-23310.ic9",   0x4800000, 0x800000, CRC(f4ec4baa) SHA1(77e2ea1c5747ced4951286142bd429780f9d4115) )
4200        ROM_LOAD( "mpr-23311.ic10",  0x5000000, 0x800000, CRC(a1467573) SHA1(cf38527b0e812ba90e7402aa53e4557ce756cf43) )
4201        ROM_LOAD( "mpr-23312.ic11",  0x5800000, 0x800000, CRC(9b0ae703) SHA1(35f0e3cdbc206b91dad4a97feb3c533bc12a77f1) )
4202        ROM_LOAD( "mpr-23313.ic12s", 0x6000000, 0x800000, CRC(d309fea9) SHA1(2ba2da81976126f0a79b066d855706d800279150) )
4203        ROM_LOAD( "mpr-23314.ic13s", 0x6800000, 0x800000, CRC(0aeedeac) SHA1(5e5086a7a51a9576e786911a2c7f4b509d5bc2f4) )
4204        ROM_LOAD( "mpr-23315.ic14s", 0x7000000, 0x800000, CRC(88f22650) SHA1(3425433d233b458ae73e30cc0c7d25fca2a9d589) )
4205        ROM_LOAD( "mpr-23316.ic15s", 0x7800000, 0x800000, CRC(38ff3a9d) SHA1(56978183fe61fd2ad59ab2979cb61fbf2cde07e6) )
4206        ROM_LOAD( "mpr-23317.ic16s", 0x8000000, 0x800000, CRC(d6d45776) SHA1(102963243f6e127d4c35d150eeb09aa99a3738d4) )
4207        ROM_LOAD( "mpr-23318.ic17s", 0x8800000, 0x800000, CRC(5f33207e) SHA1(6eceb6bb9171da8634fcba9dd7409794447fe069) )
4208        ROM_LOAD( "mpr-23319.ic18s", 0x9000000, 0x800000, CRC(ff42857a) SHA1(adbc025c4e02ad3b15ead9340aee494c16005ad5) )
4209        ROM_LOAD( "mpr-23320.ic19s", 0x9800000, 0x800000, CRC(5ec75a45) SHA1(696e5d14678c794dec67246507bd580f7e5b5043) )
4210        ROM_LOAD( "mpr-23321.ic20s", 0xa000000, 0x800000, CRC(018627d4) SHA1(2519f39ad046d14f602648fed39bc3719185b55e) )
4291   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
4292   ROM_LOAD( "epr-23323a.ic22", 0x0000000, 0x400000, CRC(f3fd304b) SHA1(012eefebd857200195d9e2d80c24a793b258d7e2) )
4293   ROM_LOAD( "mpr-23302.ic1",   0x0800000, 0x800000, CRC(3429321b) SHA1(6fc1be2ca71a690a2ceca9dc968183a1222177f7) )
4294   ROM_LOAD( "mpr-23303.ic2",   0x1000000, 0x800000, CRC(f7b3ada2) SHA1(d2caea852241cb0d91243d84d1c5523dfddac721) )
4295   ROM_LOAD( "mpr-23304.ic3",   0x1800000, 0x800000, CRC(3bf145e9) SHA1(a000e135ad640472418de418b92dbdb83dcf872b) )
4296   ROM_LOAD( "mpr-23305.ic4",   0x2000000, 0x800000, CRC(924ee9fd) SHA1(dd56f8cd7e9dda87968abb810694bddeeb31db5c) )
4297   ROM_LOAD( "mpr-23306.ic5",   0x2800000, 0x800000, CRC(4021e805) SHA1(75988ff8d710da6d90608cef87fc8b4408a617fb) )
4298   ROM_LOAD( "mpr-23307.ic6",   0x3000000, 0x800000, CRC(090c1812) SHA1(e3e32d5c1f42191e188f91dbd4a753030894aa6f) )
4299   ROM_LOAD( "mpr-23308.ic7",   0x3800000, 0x800000, CRC(f23d2198) SHA1(9775796a388ab903102126fb190867a0d192903e) )
4300   ROM_LOAD( "mpr-23309.ic8",   0x4000000, 0x800000, CRC(0d6a7c9d) SHA1(0df846289d598efdf5605ca8e09758eb8b5878f9) )
4301   ROM_LOAD( "mpr-23310.ic9",   0x4800000, 0x800000, CRC(f4ec4baa) SHA1(77e2ea1c5747ced4951286142bd429780f9d4115) )
4302   ROM_LOAD( "mpr-23311.ic10",  0x5000000, 0x800000, CRC(a1467573) SHA1(cf38527b0e812ba90e7402aa53e4557ce756cf43) )
4303   ROM_LOAD( "mpr-23312.ic11",  0x5800000, 0x800000, CRC(9b0ae703) SHA1(35f0e3cdbc206b91dad4a97feb3c533bc12a77f1) )
4304   ROM_LOAD( "mpr-23313.ic12s", 0x6000000, 0x800000, CRC(d309fea9) SHA1(2ba2da81976126f0a79b066d855706d800279150) )
4305   ROM_LOAD( "mpr-23314.ic13s", 0x6800000, 0x800000, CRC(0aeedeac) SHA1(5e5086a7a51a9576e786911a2c7f4b509d5bc2f4) )
4306   ROM_LOAD( "mpr-23315.ic14s", 0x7000000, 0x800000, CRC(88f22650) SHA1(3425433d233b458ae73e30cc0c7d25fca2a9d589) )
4307   ROM_LOAD( "mpr-23316.ic15s", 0x7800000, 0x800000, CRC(38ff3a9d) SHA1(56978183fe61fd2ad59ab2979cb61fbf2cde07e6) )
4308   ROM_LOAD( "mpr-23317.ic16s", 0x8000000, 0x800000, CRC(d6d45776) SHA1(102963243f6e127d4c35d150eeb09aa99a3738d4) )
4309   ROM_LOAD( "mpr-23318.ic17s", 0x8800000, 0x800000, CRC(5f33207e) SHA1(6eceb6bb9171da8634fcba9dd7409794447fe069) )
4310   ROM_LOAD( "mpr-23319.ic18s", 0x9000000, 0x800000, CRC(ff42857a) SHA1(adbc025c4e02ad3b15ead9340aee494c16005ad5) )
4311   ROM_LOAD( "mpr-23320.ic19s", 0x9800000, 0x800000, CRC(5ec75a45) SHA1(696e5d14678c794dec67246507bd580f7e5b5043) )
4312   ROM_LOAD( "mpr-23321.ic20s", 0xa000000, 0x800000, CRC(018627d4) SHA1(2519f39ad046d14f602648fed39bc3719185b55e) )
4313
4314   ROM_REGION( 4, "rom_key", 0 )
4315   ROM_LOAD( "sstrkfgt-key.bin", 0, 4, CRC(1884e4ee) SHA1(14ec026ed32825252987fed350f19f6e2565aa4d) )
42114316ROM_END
42124317
42134318
42144319/* Sega Tetris */
42154320ROM_START( sgtetris )
4216   ROM_REGION( 0x200000, "maincpu", 0)
42174321   NAOMI_BIOS
42184322   NAOMI_DEFAULT_EEPROM
42194323
4220   ROM_REGION( 0x3800000, "user1", ROMREGION_ERASEFF)
4221        ROM_LOAD( "epr-22909.ic22", 0x000000, 0x200000, CRC(486b2fdf) SHA1(da54fec42b7ac16f73b2b9f166b9b2ab45426fd7) )
4222        ROM_LOAD( "mpr-22910.ic1", 0x0800000, 0x800000, CRC(7968b67e) SHA1(4a83c22a30b3a3ce7d7167f703a11b78d3f6cea6) )
4223        ROM_LOAD( "mpr-22911.ic2", 0x1000000, 0x800000, CRC(4014aa6a) SHA1(86a9bd852c9fff70c0b902b7014c136a1d82e9a4) )
4224        ROM_LOAD( "mpr-22912.ic3", 0x1800000, 0x800000, CRC(67667a56) SHA1(89f3cab6c5db2f6ecac4e6a0dee085fa39cb5cbb) )
4225        ROM_LOAD( "mpr-22913.ic4", 0x2000000, 0x800000, CRC(1fbdc41a) SHA1(eb8b9577b7677b9e9aec05ae950dee516ae15bf5) )
4226        ROM_LOAD( "mpr-22914.ic5", 0x2800000, 0x800000, CRC(77844b60) SHA1(65d71febb8a160d00778ac7b53e082253cad9834) )
4227        ROM_LOAD( "mpr-22915.ic6", 0x3000000, 0x800000, CRC(e48148ac) SHA1(c1273353eeaf9bb6b185f133281d7d04271bc895) )
4324   ROM_REGION( 0x3800000, "rom_board", ROMREGION_ERASEFF)
4325   ROM_LOAD( "epr-22909.ic22", 0x000000, 0x200000, CRC(486b2fdf) SHA1(da54fec42b7ac16f73b2b9f166b9b2ab45426fd7) )
4326   ROM_LOAD( "mpr-22910.ic1", 0x0800000, 0x800000, CRC(7968b67e) SHA1(4a83c22a30b3a3ce7d7167f703a11b78d3f6cea6) )
4327   ROM_LOAD( "mpr-22911.ic2", 0x1000000, 0x800000, CRC(4014aa6a) SHA1(86a9bd852c9fff70c0b902b7014c136a1d82e9a4) )
4328   ROM_LOAD( "mpr-22912.ic3", 0x1800000, 0x800000, CRC(67667a56) SHA1(89f3cab6c5db2f6ecac4e6a0dee085fa39cb5cbb) )
4329   ROM_LOAD( "mpr-22913.ic4", 0x2000000, 0x800000, CRC(1fbdc41a) SHA1(eb8b9577b7677b9e9aec05ae950dee516ae15bf5) )
4330   ROM_LOAD( "mpr-22914.ic5", 0x2800000, 0x800000, CRC(77844b60) SHA1(65d71febb8a160d00778ac7b53e082253cad9834) )
4331   ROM_LOAD( "mpr-22915.ic6", 0x3000000, 0x800000, CRC(e48148ac) SHA1(c1273353eeaf9bb6b185f133281d7d04271bc895) )
4332
4333   ROM_REGION( 4, "rom_key", 0 )
4334   ROM_LOAD( "sgtetris-key.bin", 0, 4, CRC(03bf7ea1) SHA1(0229c1f9a6eca65b09e3571768a1fbf3c1dad6b1) )
42284335ROM_END
42294336
42304337/*
r12704r12705
42574364*/
42584365
42594366ROM_START( slasho )
4260   ROM_REGION( 0x200000, "maincpu", 0)
42614367   NAOMI_BIOS
42624368   NAOMI_DEFAULT_EEPROM
42634369
4264   ROM_REGION( 0x9000000, "user1", ROMREGION_ERASEFF)
4370   ROM_REGION( 0x9000000, "rom_board", ROMREGION_ERASEFF)
42654371   ROM_LOAD("epr-23341.ic22", 0x0000000, 0x0400000, CRC(477fa123) SHA1(d2474766dcd0b0e5fe317a858534829eb1c26789) )
42664372   ROM_RELOAD( 0x400000, 0x400000)
42674373   ROM_LOAD("mpr-23324.ic1",  0x0800000, 0x0800000, CRC(8624493a) SHA1(4fe940a889619f2a75c45e15efb2b8ed9020bc55) )
r12704r12705
42814387   ROM_LOAD("mpr-23338.ic15s",0x7800000, 0x0800000, CRC(323e4db2) SHA1(c5484589c1613110faef6cf8b8f4def8867a8226) )
42824388   ROM_LOAD("mpr-23339.ic16s",0x8000000, 0x0800000, CRC(fd8c2736) SHA1(34ae1a4e35b4aac6666719fb4fc0959bd64ff3d6) )
42834389   ROM_LOAD("mpr-23340.ic17s",0x8800000, 0x0800000, CRC(001604f8) SHA1(615ec027d383d44d4aadb1175be6320e4139d7d1) )
4390
4391   ROM_REGION( 4, "rom_key", 0 )
4392   ROM_LOAD( "slasho-key.bin", 0, 4, CRC(78e31e35) SHA1(a0b06cb7fbb0b2f1734831fc3e6a8315c0e78edd) )
42844393ROM_END
42854394
42864395
r12704r12705
43204429*/
43214430
43224431ROM_START( pjustic )
4323   ROM_REGION( 0x200000, "maincpu", 0)
43244432   NAOMI_BIOS
43254433   NAOMI_DEFAULT_EEPROM
43264434
4327   ROM_REGION( 0xb800000, "user1", ROMREGION_ERASEFF)
4435   ROM_REGION( 0xb800000, "rom_board", ROMREGION_ERASEFF)
43284436   ROM_LOAD("epr-23548a.ic22", 0x0000000, 0x0400000,  CRC(f4ccf1ec) SHA1(97485b2a4b9452ffeea2501f42d20d718410e716) )
4329        ROM_LOAD( "mpr-23537.ic1",  0x0800000, 0x1000000, CRC(a2462770) SHA1(2d06f2efb686b2c45e5cc0b0776ba5fb1d392951) )
4330        ROM_LOAD( "mpr-23538.ic2",  0x1800000, 0x1000000, CRC(e4480832) SHA1(281700b10bd6b29e4d33b5230d085f9cc102fa01) )
4331        ROM_LOAD( "mpr-23539.ic3",  0x2800000, 0x1000000, CRC(97e3f7f5) SHA1(89ad30782ba148777ce3aad2d41e9dfda2dd0c5c) )
4332        ROM_LOAD( "mpr-23540.ic4",  0x3800000, 0x1000000, CRC(b9e92d21) SHA1(a9b465e83ecfbf47168f83ad4ae8ed4b802345ac) )
4333        ROM_LOAD( "mpr-23541.ic5",  0x4800000, 0x1000000, CRC(95b8a9c6) SHA1(2c9df93d9f599cf01d895a37d03ba0d86b9b3033) )
4334        ROM_LOAD( "mpr-23542.ic6",  0x5800000, 0x1000000, CRC(dfd490f5) SHA1(13fe0a11a75f1a7ebfe40433833241e656bb1511) )
4335        ROM_LOAD( "mpr-23543.ic7",  0x6800000, 0x1000000, CRC(66847ebd) SHA1(853d4fc7e53ac7b19b9ba616f756eb8a8fcd242d) )
4336        ROM_LOAD( "mpr-23544.ic8",  0x7800000, 0x1000000, CRC(d1f5b460) SHA1(f0789630871d728113abacceff21c6328a9fa9fc) )
4337        ROM_LOAD( "mpr-23545.ic9",  0x8800000, 0x1000000, CRC(60bd692f) SHA1(37b508f4a821d832eafff81574e7df3fe1c729f8) )
4338        ROM_LOAD( "mpr-23546.ic10", 0x9800000, 0x1000000, CRC(85db2248) SHA1(37845c269a2e65ee6181a8e7500c2e7dd9b2e343) )
4339        ROM_LOAD( "mpr-23547.ic11", 0xa800000, 0x1000000, CRC(18b369c7) SHA1(b61cb3fda8cc685865684f7afc7dad0b29d93ca5) )
4437   ROM_LOAD( "mpr-23537.ic1",  0x0800000, 0x1000000, CRC(a2462770) SHA1(2d06f2efb686b2c45e5cc0b0776ba5fb1d392951) )
4438   ROM_LOAD( "mpr-23538.ic2",  0x1800000, 0x1000000, CRC(e4480832) SHA1(281700b10bd6b29e4d33b5230d085f9cc102fa01) )
4439   ROM_LOAD( "mpr-23539.ic3",  0x2800000, 0x1000000, CRC(97e3f7f5) SHA1(89ad30782ba148777ce3aad2d41e9dfda2dd0c5c) )
4440   ROM_LOAD( "mpr-23540.ic4",  0x3800000, 0x1000000, CRC(b9e92d21) SHA1(a9b465e83ecfbf47168f83ad4ae8ed4b802345ac) )
4441   ROM_LOAD( "mpr-23541.ic5",  0x4800000, 0x1000000, CRC(95b8a9c6) SHA1(2c9df93d9f599cf01d895a37d03ba0d86b9b3033) )
4442   ROM_LOAD( "mpr-23542.ic6",  0x5800000, 0x1000000, CRC(dfd490f5) SHA1(13fe0a11a75f1a7ebfe40433833241e656bb1511) )
4443   ROM_LOAD( "mpr-23543.ic7",  0x6800000, 0x1000000, CRC(66847ebd) SHA1(853d4fc7e53ac7b19b9ba616f756eb8a8fcd242d) )
4444   ROM_LOAD( "mpr-23544.ic8",  0x7800000, 0x1000000, CRC(d1f5b460) SHA1(f0789630871d728113abacceff21c6328a9fa9fc) )
4445   ROM_LOAD( "mpr-23545.ic9",  0x8800000, 0x1000000, CRC(60bd692f) SHA1(37b508f4a821d832eafff81574e7df3fe1c729f8) )
4446   ROM_LOAD( "mpr-23546.ic10", 0x9800000, 0x1000000, CRC(85db2248) SHA1(37845c269a2e65ee6181a8e7500c2e7dd9b2e343) )
4447   ROM_LOAD( "mpr-23547.ic11", 0xa800000, 0x1000000, CRC(18b369c7) SHA1(b61cb3fda8cc685865684f7afc7dad0b29d93ca5) )
4448
4449   ROM_REGION( 4, "rom_key", 0 )
4450   ROM_LOAD( "pjustic-key.bin", 0, 4, CRC(4a2bcbaa) SHA1(a9434482498f97605f76d08f749685452651a753) )
43404451ROM_END
43414452
43424453/*
r12704r12705
43624473*/
43634474
43644475ROM_START( pstone )
4365   ROM_REGION( 0x200000, "maincpu", 0)
43664476   NAOMI_BIOS
43674477   NAOMI_DEFAULT_EEPROM
43684478
4369   ROM_REGION( 0x4800000, "user1", ROMREGION_ERASEFF)
4479   ROM_REGION( 0x4800000, "rom_board", ROMREGION_ERASEFF)
43704480   ROM_LOAD("epr-21597.ic22",0x0000000, 0x0200000, CRC(62c7acc0) SHA1(bb61641a7f3650757132cde379447bdc9bd91c78) )
43714481   ROM_LOAD("mpr-21589.ic1", 0x0800000, 0x0800000, CRC(2fa66608) SHA1(144bda75f892a1e4dbd8332439e9e44fad1d0695) )
43724482   ROM_LOAD("mpr-21590.ic2", 0x1000000, 0x0800000, CRC(6341b399) SHA1(d123b6a3eb7c4800950cc5849d748b0edafabc7d) )
r12704r12705
43764486   ROM_LOAD("mpr-21594.ic6", 0x3000000, 0x0800000, CRC(ddfa0467) SHA1(e758eae50035d5f18d99dbed728513e306d9566f) )
43774487   ROM_LOAD("mpr-21595.ic7", 0x3800000, 0x0800000, CRC(7ab218f7) SHA1(c5c022e63f926cce09d49331647cde20e8e42ab3) )
43784488   ROM_LOAD("mpr-21596.ic8", 0x4000000, 0x0800000, CRC(f27dbdc5) SHA1(d54717d62897546968de2f049239f68bee49bdd8) )
4489
4490   ROM_REGION( 4, "rom_key", 0 )
4491   ROM_LOAD( "pstone-key.bin", 0, 4, CRC(7386d0de) SHA1(72f6b552440e470344f707e349d100d9ba21b69d) )
43794492ROM_END
43804493
43814494/*
r12704r12705
44024515*/
44034516
44044517ROM_START( pstone2 )
4405   ROM_REGION( 0x200000, "maincpu", 0)
44064518   NAOMI_BIOS
44074519   NAOMI_DEFAULT_EEPROM
44084520
4409   ROM_REGION( 0x5000000, "user1", ROMREGION_ERASEFF)
4521   ROM_REGION( 0x5000000, "rom_board", ROMREGION_ERASEFF)
44104522   ROM_LOAD("epr-23127.ic22", 0x0000000, 0x0400000,  CRC(185761d6) SHA1(8c91b594dd59313d249c9da7b39dee21d3c9082e) )
44114523   ROM_RELOAD( 0x400000, 0x400000)
44124524   ROM_LOAD("mpr-23118.ic1", 0x0800000, 0x0800000, CRC(c69f3c3c) SHA1(e96ad24473197f8581f5e4398244b9b76957bfdd) )
r12704r12705
44184530   ROM_LOAD("mpr-23124.ic7", 0x3800000, 0x0800000, CRC(508c0207) SHA1(e50d97a17cdd6771fbc63a254a4d638e7daa8f57) )
44194531   ROM_LOAD("mpr-23125.ic8", 0x4000000, 0x0800000, CRC(b9938bbc) SHA1(d55d7adecb5a5a4a276a5a17c12808085d980fd9) )
44204532   ROM_LOAD("mpr-23126.ic9", 0x4800000, 0x0800000, CRC(fbb0325b) SHA1(21b965519d7508d84344641d43e8af2c3ca29ba4) )
4533
4534   ROM_REGION( 4, "rom_key", 0 )
4535   ROM_LOAD( "pstone2-key.bin", 0, 4, CRC(3858144b) SHA1(f5fb9157b38969c986f8abbe8ed3f95e788e45c0) )
44214536ROM_END
44224537
44234538
r12704r12705
44564571*/
44574572
44584573ROM_START( otrigger )
4459   ROM_REGION( 0x200000, "maincpu", 0)
44604574   NAOMI_BIOS
44614575   NAOMI_DEFAULT_EEPROM
44624576
4463   ROM_REGION( 0xa000000, "user1", ROMREGION_ERASEFF)
4577   ROM_REGION( 0xa000000, "rom_board", ROMREGION_ERASEFF)
44644578   ROM_LOAD("epr-22163.ic22", 0x0000000, 0x0400000, CRC(3bdafb6a) SHA1(c4c5a4ba94d85c4353df22d70bb08be67e9c22c3) )
44654579   ROM_RELOAD( 0x400000, 0x400000)
44664580   ROM_LOAD("mpr-22142.ic1",  0x0800000, 0x0800000, CRC(5b45fa35) SHA1(7d3fbecc6f0dce2b13bfb21ed68f44632b91b94b) )
r12704r12705
44824596   ROM_LOAD("mpr-22158.ic17s",0x8800000, 0x0800000, CRC(f5d96fe9) SHA1(d5d0ac3d6b7c9b851a18b22d5fb599710c684a76) )
44834597   ROM_LOAD("mpr-22159.ic18s",0x9000000, 0x0800000, CRC(f8b5e99d) SHA1(bb174a6a80967d0ff05c3a7512e4f0f9c921d130) )
44844598   ROM_LOAD("mpr-22160.ic19s",0x9800000, 0x0800000, CRC(579eef4e) SHA1(bfcabd57f623647053afcedcabfbc74e5736819f) )
4599
4600   ROM_REGION( 4, "rom_key", 0 )
4601   ROM_LOAD( "otrigger-key.bin", 0, 4, CRC(79ebd41a) SHA1(3545dacdeac66b46e8706565f0eca784291040d1) )
44854602ROM_END
44864603
44874604/*
r12704r12705
44944611*/
44954612
44964613ROM_START( qmegamis )
4497   ROM_REGION( 0x200000, "maincpu", 0)
44984614   NAOMI_BIOS
44994615   NAOMI_DEFAULT_EEPROM
45004616
4501   ROM_REGION( 0x9000200, "user1", ROMREGION_ERASEFF)
4617   ROM_REGION( 0x9000200, "rom_board", ROMREGION_ERASEFF)
45024618   ROM_LOAD("epr-23227.ic11", 0x0000000, 0x0400000, CRC(3f76087e) SHA1(664d28ef95394590b186e7badaf96ddaf781c104) ) //ic 22
45034619   ROM_RELOAD( 0x400000, 0x400000)
45044620   /*ic 1 empty */
r12704r12705
45194635   ROM_LOAD32_WORD("mpr-23225.ic31", 0x8000000, 0x0800000, CRC(ea558614) SHA1(b7dfe5598639a8e59e3cbbee38b1d9a1d8e022ea) ) //ic 16
45204636   ROM_LOAD32_WORD("mpr-23226.ic32", 0x8000002, 0x0800000, CRC(cd5da506) SHA1(2e76c8892c1d389b0f12a0046213f43d2ab07d78) ) //ic 17
45214637
4522   ROM_COPY( "user1", 0x1400000, 0x0800000, 0x0800000 ) // mirror data for IC1 (no test on this game, but layout is the same as gram2000)
4638   ROM_COPY( "rom_board", 0x1400000, 0x0800000, 0x0800000 ) // mirror data for IC1 (no test on this game, but layout is the same as gram2000)
4639
4640   ROM_REGION( 4, "rom_key", 0 )
4641   ROM_LOAD( "qmegamis-key.bin", 0, 4, CRC(b08650c0) SHA1(9e6b0fac6fb05209da9e01bb1a5437949d218078) )
45234642ROM_END
45244643
45254644/*
r12704r12705
45514670*/
45524671
45534672ROM_START( samba )
4554   ROM_REGION( 0x200000, "maincpu", 0)
45554673   NAOMI_BIOS
45564674   NAOMI_DEFAULT_EEPROM
45574675
4558   ROM_REGION( 0x8800000, "user1", ROMREGION_ERASEFF)
4676   ROM_REGION( 0x8800000, "rom_board", ROMREGION_ERASEFF)
45594677   ROM_LOAD("epr-22966b.ic22",0x0000000, 0x0400000, CRC(893116b8) SHA1(35cb4f40690ff21af5ab7cc5adbc53228d6fb0b3) )
45604678   ROM_LOAD("mpr-22950.ic1",  0x0800000, 0x0800000, CRC(16dee15c) SHA1(b46849e492756ff406bf8956303472255fcf55a5) )
45614679   ROM_LOAD("mpr-22951.ic2",  0x1000000, 0x0800000, CRC(f509496f) SHA1(41281576f7d58c8ede9c0a89bfd46a98d5b97033) )
r12704r12705
45734691   ROM_LOAD("mpr-22963.ic14s",0x7000000, 0x0800000, CRC(a53e9919) SHA1(d81eb79bc706f85ebfbc56a9b2889ae62d629e8e) )
45744692   ROM_LOAD("mpr-22964.ic15s",0x7800000, 0x0800000, CRC(f581d5a3) SHA1(8cf769f5b0a48951246bb60e9cf58232bcee7bc8) )
45754693   ROM_LOAD("mpr-22965.ic16s",0x8000000, 0x0800000, CRC(8f7bfa8a) SHA1(19f137b1552978d232785c4408805b71835585c6) )
4694
4695   ROM_REGION( 4, "rom_key", 0 )
4696   ROM_LOAD( "samba-key.bin", 0, 4, CRC(e17e3603) SHA1(5611615064a93cc9d957cc4edd12c716a72cd7f2) )
45764697ROM_END
45774698
45784699/*
r12704r12705
45854706*/
45864707
45874708ROM_START( smarinef )
4588   ROM_REGION( 0x200000, "maincpu", 0)
45894709   NAOMI_BIOS
45904710   NAOMI_DEFAULT_EEPROM
45914711
4592   ROM_REGION( 0x6800000, "user1", ROMREGION_ERASEFF)
4712   ROM_REGION( 0x6800000, "rom_board", ROMREGION_ERASEFF)
45934713   ROM_LOAD("epr-22221.ic22",0x0000000, 0x0400000, CRC(9d984375) SHA1(fe1185d70b4bc1529e3579fd6b2b678c7d548400) )
45944714   ROM_LOAD("mpr-22208.ic1", 0x0800000, 0x0800000, CRC(6a1e418c) SHA1(7092c6a34ac0c2c6fb2b4b78415d08ef473785d9) )
45954715   ROM_LOAD("mpr-22209.ic2", 0x1000000, 0x0800000, CRC(ecf5be54) SHA1(d7c264da4e232ce6f9b05c9920394f8027fa4a1d) )
r12704r12705
46154735*/
46164736
46174737ROM_START( shootpl )
4618   ROM_REGION( 0x200000, "maincpu", 0)
46194738   NAOMI_BIOS
46204739   NAOMI_DEFAULT_EEPROM
46214740
4622   ROM_REGION( 0x2800000, "user1", ROMREGION_ERASEFF)
4741   ROM_REGION( 0x2800000, "rom_board", ROMREGION_ERASEFF)
46234742   ROM_LOAD("epr-24065a.ic11",0x0000000, 0x0400000, CRC(622a9ba0) SHA1(2f4963b8447ecda78fea0107497c2811f075c07a) )
46244743   ROM_RELOAD( 0x400000, 0x400000)
46254744   ROM_LOAD32_WORD("opr-24060.ic17s", 0x0800000, 0x0800000, CRC(7f3d868c) SHA1(dc352981371c5479a69756bb1cbbbca43252216d) )
46264745   ROM_LOAD32_WORD("opr-24061.ic18",  0x0800002, 0x0800000, CRC(e934267c) SHA1(fdbe2b80e309aa8d9fefd2634aef20153735019d) )
46274746   ROM_LOAD32_WORD("opr-24062.ic19s", 0x1800000, 0x0800000, CRC(26e32af4) SHA1(49412a04198175240ef9adb4b7afb8a628eb127d) )
46284747   ROM_LOAD32_WORD("opr-24063.ic20",  0x1800002, 0x0800000, CRC(683fdcff) SHA1(890816ef1b3e604e16289998cf66e221ef75a0fe) )
4748
4749   ROM_REGION( 4, "rom_key", 0 )
4750   ROM_LOAD( "shootpl-key.bin", 0, 4, CRC(03c30b17) SHA1(e8e8659aa27b3d1cac2268850d3973d9afeaeba9) )
46294751ROM_END
46304752
46314753// SHOOTOUT POOL (the original, the above set is a sequel)
46324754ROM_START( shootopl )
4633   ROM_REGION( 0x200000, "maincpu", 0)
46344755   NAOMI_BIOS
46354756   NAOMI_DEFAULT_EEPROM
46364757
4637   ROM_REGION( 0x2800000, "user1", ROMREGION_ERASEFF)
4638        ROM_LOAD( "epr-23844.ic22", 0x000000, 0x400000, CRC(5c229638) SHA1(9185f9f2369bb2423faff4222419001ac9037d3f) )
4758   ROM_REGION( 0x2800000, "rom_board", ROMREGION_ERASEFF)
4759   ROM_LOAD( "epr-23844.ic22", 0x000000, 0x400000, CRC(5c229638) SHA1(9185f9f2369bb2423faff4222419001ac9037d3f) )
46394760   ROM_RELOAD( 0x400000, 0x400000)
4640        ROM_LOAD32_WORD( "mpr-23840.17s", 0x0800000, 0x800000, CRC(985e5ff4) SHA1(a6f529b1855cc2aef3bed8503746c2e38061f944) )
4641        ROM_LOAD32_WORD( "mpr-23841.18",  0x0800002, 0x800000, CRC(255fc335) SHA1(34ffec963880383bb9c02642f73ba3c852699831) )
4642        ROM_LOAD32_WORD( "mpr-23842.19s", 0x1800000, 0x800000, CRC(80724895) SHA1(ed4fa1160b35b3987702c0178bd31c3c5db69e6e) )
4643        ROM_LOAD32_WORD( "mpr-23843.20",  0x1800002, 0x800000, CRC(3574f616) SHA1(40130e8f98fb31c98428d444b79491f6a06ac208) )
4761   ROM_LOAD32_WORD( "mpr-23840.17s", 0x0800000, 0x800000, CRC(985e5ff4) SHA1(a6f529b1855cc2aef3bed8503746c2e38061f944) )
4762   ROM_LOAD32_WORD( "mpr-23841.18",  0x0800002, 0x800000, CRC(255fc335) SHA1(34ffec963880383bb9c02642f73ba3c852699831) )
4763   ROM_LOAD32_WORD( "mpr-23842.19s", 0x1800000, 0x800000, CRC(80724895) SHA1(ed4fa1160b35b3987702c0178bd31c3c5db69e6e) )
4764   ROM_LOAD32_WORD( "mpr-23843.20",  0x1800002, 0x800000, CRC(3574f616) SHA1(40130e8f98fb31c98428d444b79491f6a06ac208) )
4765
4766   ROM_REGION( 4, "rom_key", 0 )
4767   ROM_LOAD( "shootopl-key.bin", 0, 4, CRC(45547e02) SHA1(4f79f478ff1eea14bc939a67ff570143cb56a4bf) )
46444768ROM_END
46454769
46464770/* Shootout Pool Medal */
46474771ROM_START( shootplm )
4648   ROM_REGION( 0x200000, "maincpu", 0)
46494772   NAOMI_BIOS
46504773   NAOMI_DEFAULT_EEPROM
46514774
4652   ROM_REGION( 0x2800000, "user1", ROMREGION_ERASEFF)
4653        ROM_LOAD( "epr-24148.ic11", 0x000000, 0x400000, CRC(d575f311) SHA1(7f45d897412fd75eda740a82320fce08331fa310) )
4654      ROM_RELOAD( 0x400000, 0x400000)
4655        ROM_LOAD32_WORD( "opr-24174.ic17s", 0x0800000, 0x800000, CRC(ccd6aec5) SHA1(a8105ce6986601d8673ffea41353fe399cf8557d) )
4656        ROM_LOAD32_WORD( "opr-24175.ic18",  0x0800002, 0x800000, CRC(e66e6345) SHA1(28a372168419c9352cb7fc5285bbd37bd37f3b71) )
4657      ROM_LOAD32_WORD( "opr-24176.ic19s", 0x1800000, 0x800000, CRC(1277bca8) SHA1(e1bd9d1a6f4170a9c29658f95e9e96caf4b0cb84) )
4658        ROM_LOAD32_WORD( "opr-24177.ic20",  0x1800002, 0x800000, CRC(122eac82) SHA1(2acf00686d682e0f354708fa597933a0d6de4a6f) )
4775   ROM_REGION( 0x2800000, "rom_board", ROMREGION_ERASEFF)
4776   ROM_LOAD( "epr-24148.ic11", 0x000000, 0x400000, CRC(d575f311) SHA1(7f45d897412fd75eda740a82320fce08331fa310) )
4777   ROM_RELOAD( 0x400000, 0x400000)
4778   ROM_LOAD32_WORD( "opr-24174.ic17s", 0x0800000, 0x800000, CRC(ccd6aec5) SHA1(a8105ce6986601d8673ffea41353fe399cf8557d) )
4779   ROM_LOAD32_WORD( "opr-24175.ic18",  0x0800002, 0x800000, CRC(e66e6345) SHA1(28a372168419c9352cb7fc5285bbd37bd37f3b71) )
4780   ROM_LOAD32_WORD( "opr-24176.ic19s", 0x1800000, 0x800000, CRC(1277bca8) SHA1(e1bd9d1a6f4170a9c29658f95e9e96caf4b0cb84) )
4781   ROM_LOAD32_WORD( "opr-24177.ic20",  0x1800002, 0x800000, CRC(122eac82) SHA1(2acf00686d682e0f354708fa597933a0d6de4a6f) )
4782
4783   ROM_REGION( 4, "rom_key", 0 )
4784   ROM_LOAD( "shootpl-key.bin", 0, 4, CRC(03c30b17) SHA1(e8e8659aa27b3d1cac2268850d3973d9afeaeba9) )
46594785ROM_END
46604786
46614787/* Oinori-daimyoujin Matsuri (medal) */
46624788ROM_START( oinori )
4663   ROM_REGION( 0x200000, "maincpu", 0)
46644789   NAOMI_BIOS
46654790   NAOMI_DEFAULT_EEPROM
46664791
4667   ROM_REGION( 0x5800000, "user1", ROMREGION_ERASEFF)
4792   ROM_REGION( 0x5800000, "rom_board", ROMREGION_ERASEFF)
46684793   ROM_LOAD( "epr-24053.ic22",0x0000000, 0x0400000, CRC(f127bdab) SHA1(9095e618069fa977f6225ad323f38852131f59cd) )
46694794   ROM_RELOAD( 0x400000, 0x400000)
46704795   ROM_LOAD( "mpr-24054.ic1", 0x0800000, 0x1000000, CRC(db595e72) SHA1(030f33ba2c6cc0a3e1b36b5f3be17b3b83f83a42) )
r12704r12705
46994824*/
47004825
47014826ROM_START( spawn )
4702   ROM_REGION( 0x200000, "maincpu", 0)
47034827   NAOMI_BIOS
47044828   NAOMI_DEFAULT_EEPROM
47054829
4706   ROM_REGION( 0x5800000, "user1", ROMREGION_ERASEFF)
4830   ROM_REGION( 0x5800000, "rom_board", ROMREGION_ERASEFF)
47074831   ROM_LOAD("epr-22977b.ic22",0x0000000, 0x0400000, CRC(814ff5d1) SHA1(5a0a9e55878927f98750000eb7d9391cbecfe21d) )
47084832   ROM_LOAD("mpr-22967.ic1",  0x0800000, 0x0800000, CRC(78c7d914) SHA1(0a000e396f9a83c2c777cfb61212a82ec17417ba) )
47094833   ROM_LOAD("mpr-22968.ic2",  0x1000000, 0x0800000, CRC(8c4ae1bb) SHA1(a91934a01d306c8fd8f987b3013f33aec028de70) )
r12704r12705
47154839   ROM_LOAD("mpr-22974.ic8",  0x4000000, 0x0800000, CRC(20983c51) SHA1(f7321abf8bf5f2a7329c98174e5cf9b1ebf596b2) )
47164840   ROM_LOAD("mpr-22975.ic9",  0x4800000, 0x0800000, CRC(0d3c70d1) SHA1(22920bc5fd1dda760b5cb17482e9181be899bc08) )
47174841   ROM_LOAD("mpr-22976.ic10", 0x5000000, 0x0800000, CRC(092d8063) SHA1(14fafd3f4c4f2b37172453d1c815fb9b8f4814f4) )
4842
4843   ROM_REGION( 4, "rom_key", 0 )
4844   ROM_LOAD( "spawn-key.bin", 0, 4, CRC(dd211f09) SHA1(d436cd5009744c4c69fb94c84837103b4ca1c9a7) )
47184845ROM_END
47194846
47204847/*
r12704r12705
47274854*/
47284855
47294856ROM_START( totd )
4730   ROM_REGION( 0x200000, "maincpu", 0)
47314857   NAOMI_BIOS
47324858   NAOMI_DEFAULT_EEPROM
47334859
4734   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
4860   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
47354861   ROM_LOAD("epr-23021a.ic22", 0x0000000, 0x0400000,  CRC(07d21033) SHA1(d1e619d13c1c01648eb1a6964aad1554dd16c6d5) )
47364862
47374863   ROM_LOAD("mpr-23001.ic1", 0x0800000, 0x0800000, CRC(2eaab8ed) SHA1(e078bd8781e2a04e23fd18b11d118b2548fa59a8) )
r12704r12705
47914917*/
47924918
47934919ROM_START( virnba )
4794   ROM_REGION( 0x200000, "maincpu", 0)
47954920   NAOMI_BIOS
47964921   NAOMI_DEFAULT_EEPROM
47974922
4798   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
4923   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
47994924   ROM_LOAD("epr-23073.ic22",0x0000000, 0x0400000, CRC(ce5c3d28) SHA1(ca3eeae1cf78435787338bb7b3e71301c0f71dd9) )
48004925   ROM_LOAD("mpr-22928.ic1", 0x0800000, 0x0800000, CRC(63245c98) SHA1(a5a542244f07c6c8b66961a231fb56c89d2cf20c) )
48014926   ROM_LOAD("mpr-22929.ic2", 0x1000000, 0x0800000, CRC(eea89d21) SHA1(5fe184267e637f155d767f8d931462d9593eff5a) )
r12704r12705
48214946ROM_END
48224947
48234948ROM_START( virnbao )
4824   ROM_REGION( 0x200000, "maincpu", 0)
48254949   NAOMI_BIOS
48264950   NAOMI_DEFAULT_EEPROM
48274951
4828   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
4952   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
48294953   ROM_LOAD("epr-22949.ic22",0x0000000, 0x0400000, CRC(fd91447e) SHA1(0759d6517aeb684d0cb809c1ae1350615cc0aecc) )
48304954   ROM_LOAD("mpr-22928.ic1", 0x0800000, 0x0800000, CRC(63245c98) SHA1(a5a542244f07c6c8b66961a231fb56c89d2cf20c) )
48314955   ROM_LOAD("mpr-22929.ic2", 0x1000000, 0x0800000, CRC(eea89d21) SHA1(5fe184267e637f155d767f8d931462d9593eff5a) )
r12704r12705
48484972   ROM_LOAD("mpr-22946.ic19",0x9800000, 0x0800000, CRC(c79696c5) SHA1(4a9ac8b4ae1ce5d196e6c74fecc241b74aebc4ab) )
48494973   ROM_LOAD("mpr-22947.ic20",0xa000000, 0x0800000, CRC(5e5eb595) SHA1(401d4a11d436988d716bb014b36233f171dc576d) )
48504974   ROM_LOAD("mpr-22948.ic21",0xa800000, 0x0800000, CRC(1b0de917) SHA1(fd1742ea9bb2f1ce871ee3266171f26634e1c8e7) )
4975
4976   ROM_REGION( 4, "rom_key", 0 )
4977   ROM_LOAD( "virnbao-key.bin", 0, 4, CRC(980e3be8) SHA1(234a2f8ee408144d2c51e8083d0a033eea6026e0) )
48514978ROM_END
48524979
48534980/*
r12704r12705
48785005*/
48795006
48805007ROM_START( vs2_2k )
4881   ROM_REGION( 0x200000, "maincpu", 0)
48825008   NAOMI_BIOS
48835009   NAOMI_DEFAULT_EEPROM
48845010
4885   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASEFF)
5011   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASEFF)
48865012   ROM_LOAD("epr-21929.ic22", 0x0000000, 0x0400000, CRC(831af08a) SHA1(af4c74623be823fd061765cede354c6a9722fd10) )
48875013   ROM_LOAD("mpr-21924.ic1",  0x0800000, 0x0800000, CRC(f91ef69b) SHA1(4ed23091efad7ddf1878a0bfcdcbba3cf151af84) )
48885014   ROM_LOAD("mpr-21925.ic2",  0x1000000, 0x0800000, CRC(40128a67) SHA1(9d191c4ec33465f29bbc09491dde62f354a9ab15) )
r12704r12705
48995025   ROM_LOAD("mpr-21921.ic13s",0x6800000, 0x0800000, CRC(d6346491) SHA1(830971cbc14cab022a09ad4c6e11ee49c550e308) )
49005026   ROM_LOAD("mpr-21922.ic14s",0x7000000, 0x0800000, CRC(a1901e1e) SHA1(2281f91ac696cc14886bcdf4b0685ce2f5bb8117) )
49015027   ROM_LOAD("mpr-21923.ic15s",0x7800000, 0x0400000, CRC(d127d9a5) SHA1(78c95357344ea15469b84fa8b1332e76521892cd) )
5028
5029   ROM_REGION( 4, "rom_key", 0 )
5030   ROM_LOAD( "vs2_2k-key.bin", 0, 4, CRC(f9fb4716) SHA1(83277f61e97fc6c4d8d27b903bde0acdfb0c7dbc) )
49025031ROM_END
49035032
49045033/*
r12704r12705
49255054*/
49265055
49275056ROM_START( vtennis )
4928   ROM_REGION( 0x200000, "maincpu", 0)
49295057   NAOMI_BIOS
49305058   NAOMI_DEFAULT_EEPROM
49315059
4932   ROM_REGION( 0x6000000, "user1", ROMREGION_ERASEFF)
5060   ROM_REGION( 0x6000000, "rom_board", ROMREGION_ERASEFF)
49335061   ROM_LOAD("epr-22927.ic22", 0x0000000, 0x0400000,  CRC(89781723) SHA1(cf644aa66abcec6964d77485a0292f11ba80dd0d) )
49345062   ROM_RELOAD( 0x400000, 0x400000)
49355063   ROM_LOAD("mpr-22916.ic1", 0x0800000, 0x0800000, CRC(903873e5) SHA1(09af791bc02cca0e2dc72187679830ed9f4fc772) )
r12704r12705
49435071   ROM_LOAD("mpr-22924.ic9", 0x4800000, 0x0800000, CRC(ecde9d57) SHA1(1fbe7fdf66a56f4f1765baf113dff95142bfd114) )
49445072   ROM_LOAD("mpr-22925.ic10",0x5000000, 0x0800000, CRC(81057e42) SHA1(d41137ae28c64dbdb50150db8cf25851bc0709c4) )
49455073   ROM_LOAD("mpr-22926.ic11",0x5800000, 0x0800000, CRC(57eec89d) SHA1(dd8f9a9155e51ee5260f559449fb0ea245077952) )
5074
5075   ROM_REGION( 4, "rom_key", 0 )
5076   ROM_LOAD( "vtennis-key.bin", 0, 4, CRC(f355af89) SHA1(581a9b0f8c2f3606006e85e136f9cf0ea908c773) )
49465077ROM_END
49475078
49485079/*
r12704r12705
49535084*/
49545085
49555086ROM_START( wwfroyal )
4956   ROM_REGION( 0x200000, "maincpu", 0)
49575087   NAOMI_BIOS
49585088   NAOMI_DEFAULT_EEPROM
49595089
4960   ROM_REGION( 0x8800000, "user1", ROMREGION_ERASEFF)
5090   ROM_REGION( 0x8800000, "rom_board", ROMREGION_ERASEFF)
49615091   ROM_LOAD("epr-22261.ic22", 0x0000000, 0x0400000, CRC(60e5a6cd) SHA1(d74ee8318e40190231b94030176223da8305c053) )
4962        ROM_LOAD( "mpr-22262.ic1", 0x0800000, 0x1000000, CRC(f18c7920) SHA1(76fb592f62b8a359df19074265b44772ab2ecea0) )
4963        ROM_LOAD( "mpr-22263.ic2", 0x1800000, 0x1000000, CRC(5a397a54) SHA1(4b41b19ab7c49e09eeb5df2e688fdaecf8bb33a9) )
4964        ROM_LOAD( "mpr-22264.ic3", 0x2800000, 0x1000000, CRC(edca701e) SHA1(459b533d862e011f8daa0e4997d69fa7339b0755) )
4965        ROM_LOAD( "mpr-22265.ic4", 0x3800000, 0x1000000, CRC(7dfe71a1) SHA1(f2053544de8a177ab931c4d6a9010dfb6cc92e31) )
4966        ROM_LOAD( "mpr-22266.ic5", 0x4800000, 0x1000000, CRC(3e9ac148) SHA1(05a5725c72bbfc65db47aaa677b95f07aa9a3909) )
4967        ROM_LOAD( "mpr-22267.ic6", 0x5800000, 0x1000000, CRC(67ec1027) SHA1(2432b33983bbc9b07477459adb5ee1a62b6c0ea3) )
4968        ROM_LOAD( "mpr-22268.ic7", 0x6800000, 0x1000000, CRC(536f5eea) SHA1(f1de8624f82595adf75693b604fb026bf3f778ee) )
4969        ROM_LOAD( "mpr-22269.ic8", 0x7800000, 0x1000000, CRC(6c0cf740) SHA1(da10b33a6e54afbe1d7e52801216e7119b0b33b1) )
5092   ROM_LOAD( "mpr-22262.ic1", 0x0800000, 0x1000000, CRC(f18c7920) SHA1(76fb592f62b8a359df19074265b44772ab2ecea0) )
5093   ROM_LOAD( "mpr-22263.ic2", 0x1800000, 0x1000000, CRC(5a397a54) SHA1(4b41b19ab7c49e09eeb5df2e688fdaecf8bb33a9) )
5094   ROM_LOAD( "mpr-22264.ic3", 0x2800000, 0x1000000, CRC(edca701e) SHA1(459b533d862e011f8daa0e4997d69fa7339b0755) )
5095   ROM_LOAD( "mpr-22265.ic4", 0x3800000, 0x1000000, CRC(7dfe71a1) SHA1(f2053544de8a177ab931c4d6a9010dfb6cc92e31) )
5096   ROM_LOAD( "mpr-22266.ic5", 0x4800000, 0x1000000, CRC(3e9ac148) SHA1(05a5725c72bbfc65db47aaa677b95f07aa9a3909) )
5097   ROM_LOAD( "mpr-22267.ic6", 0x5800000, 0x1000000, CRC(67ec1027) SHA1(2432b33983bbc9b07477459adb5ee1a62b6c0ea3) )
5098   ROM_LOAD( "mpr-22268.ic7", 0x6800000, 0x1000000, CRC(536f5eea) SHA1(f1de8624f82595adf75693b604fb026bf3f778ee) )
5099   ROM_LOAD( "mpr-22269.ic8", 0x7800000, 0x1000000, CRC(6c0cf740) SHA1(da10b33a6e54afbe1d7e52801216e7119b0b33b1) )
5100
5101   ROM_REGION( 4, "rom_key", 0 )
5102   ROM_LOAD( "wwfroyal-key.bin", 0, 4, CRC(e14721b1) SHA1(1f2f447bbc4b1e0b016c5ac545d1d805abc61ebd) )
49705103ROM_END
49715104
49725105ROM_START( sl2007 )
4973   ROM_REGION( 0x200000, "maincpu", 0)
49745106   NAOMI_BIOS
49755107   NAOMI_DEFAULT_EEPROM
49765108
4977   ROM_REGION( 0x10000000, "user1", ROMREGION_ERASEFF)
5109   ROM_REGION( 0x10000000, "rom_board", ROMREGION_ERASEFF)
49785110   ROM_LOAD( "ic8.bin",    0x0000000, 0x4000000, CRC(30f0dcda) SHA1(eb1ebb0b089bb27571721de07e8635c89734d23e) )
49795111   ROM_LOAD( "ic9.bin",    0x4000000, 0x4000000, CRC(5475556e) SHA1(b895125b7c9f01723df42b44073c206cb43871ac) )
49805112   ROM_LOAD( "ic10.bin",   0x8000000, 0x4000000, CRC(133c742c) SHA1(89f857a31731dc918afc72b6cb716f5c77cb9d6e) )
49815113   ROM_LOAD( "ic11.bin",   0xc000000, 0x4000000, CRC(562fb88e) SHA1(172678e3e27cfad7f7e6217c4653a4ba119bfbdf) )
5114
5115   ROM_REGION( 4, "rom_key", 0 )
5116   ROM_LOAD( "sl2007-key.bin", 0, 4, CRC(d5d1e807) SHA1(8a0cc371729c622bb05c5d26b3e39ec31d29ace1) )
49825117ROM_END
49835118
49845119ROM_START( asndynmt )
4985   ROM_REGION( 0x200000, "maincpu", 0)
49865120   NAOMI_BIOS
49875121   NAOMI_DEFAULT_EEPROM
49885122
4989   ROM_REGION( 0x10000000, "user1", ROMREGION_ERASEFF)
5123   ROM_REGION( 0x10000000, "rom_board", ROMREGION_ERASEFF)
49905124   ROM_LOAD( "fpr-24382.ic8",  0x0000000, 0x4000000, CRC(4daefde5) SHA1(ceba09315a22541f500dbfe1f8ebfb0a1f9a8a62) )
49915125   ROM_LOAD( "fpr-24383.ic9",  0x4000000, 0x4000000, CRC(8ac2fe5d) SHA1(1c606140ffb2720433bdb0d225ef3c70e2260d27) )
49925126   ROM_LOAD( "fpr-24384.ic10", 0x8000000, 0x4000000, CRC(2e9116c4) SHA1(58903a33c4ce72a1f75aefcab94393fc2e8bd2d9) )
49935127   ROM_LOAD( "fpr-24385.ic11", 0xc000000, 0x4000000, CRC(2b79f45d) SHA1(db97d980bf1590df4b983a4b7786977687238ef5) )
5128
5129   ROM_REGION( 4, "rom_key", 0 )
5130   ROM_LOAD( "asndynmt-key.bin", 0, 4, CRC(bf5396a9) SHA1(0b27fdc800143fb977cb2f1e937078d7a7006939) )
49945131ROM_END
49955132
49965133ROM_START( illvelo )
4997   ROM_REGION( 0x200000, "maincpu", 0)
49985134   NAOMI_BIOS
49995135   NAOMI_DEFAULT_EEPROM
50005136
5001   ROM_REGION( 0x10000000, "user1", ROMREGION_ERASEFF)
5137   ROM_REGION( 0x10000000, "rom_board", ROMREGION_ERASEFF)
50025138   ROM_LOAD( "illvelo.ic8",  0x0000000, 0x4000000, CRC(34ddd732) SHA1(fc714e9593225e9fa3a3caa7a988ab1aa994e50f) )
50035139   ROM_LOAD( "illvelo.ic9",  0x4000000, 0x4000000, CRC(2a880b08) SHA1(87c8e742b8f0658fee91ea97c61b1b9d5dbb25f5) )
50045140   ROM_LOAD( "illvelo.ic10", 0x8000000, 0x4000000, CRC(c02040f9) SHA1(27ad2cb45e8a516433917f060ca9798412bb95f7) )
50055141   ROM_LOAD( "illvelo.ic11", 0xc000000, 0x4000000, CRC(b2eb30ed) SHA1(44fac4bedde4df04b9572ac665d3ac2c5cd00c7d) )
5142
5143   ROM_REGION( 4, "rom_key", 0 )
5144   ROM_LOAD( "illvelo-key.bin", 0, 4, CRC(e164952f) SHA1(6c0dfe567640e1e843a5d7bf858a24c101dfcf95) )
50065145ROM_END
50075146
50085147ROM_START( ausfache )
5009   ROM_REGION( 0x200000, "maincpu", 0)
50105148   NAOMI_BIOS
50115149   NAOMI_DEFAULT_EEPROM
50125150
5013   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASEFF)
5151   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASEFF)
50145152   ROM_LOAD( "ic8.bin",    0x0000000, 0x4000000, CRC(f6a16173) SHA1(7167885ce27a99bce286ba71128b4a2c8363015a) )
50155153   ROM_LOAD( "ic9.bin",    0x4000000, 0x4000000, CRC(18c994d7) SHA1(159e1425b2fc645133814b0d26d93a90e9849b1a) )
5154
5155   ROM_REGION( 4, "rom_key", 0 )
5156   ROM_LOAD( "ausfache-key.bin", 0, 4, CRC(93cdc793) SHA1(f0a0c321a3bdf8ca87cbd840a168a9057c08f16a) )
50165157ROM_END
50175158
50185159ROM_START( pokasuka )
5019   ROM_REGION( 0x200000, "maincpu", 0)
50205160   NAOMI_BIOS
50215161   NAOMI_DEFAULT_EEPROM
50225162
5023   ROM_REGION( 0x14000000, "user1", ROMREGION_ERASEFF)
5163   ROM_REGION( 0x14000000, "rom_board", ROMREGION_ERASEFF)
50245164   ROM_LOAD( "fpr-24365.ic8",  0x00000000, 0x4000000, CRC(11489cda) SHA1(d9902a61491061f522650f825f92e81541fcc772) )
50255165   ROM_LOAD( "fpr-24366.ic9",  0x04000000, 0x4000000, CRC(7429714a) SHA1(e45b442f447d24de0c746943a59c0dceb6e359cc) )
50265166   ROM_LOAD( "fpr-24367.ic10", 0x08000000, 0x4000000, CRC(dee87bab) SHA1(c5386cda2e84992e18b7959e7d9965c28c1185a4) )
r12704r12705
50295169
50305170   ROM_REGION( 0x200000, "ioboard", 0)   // touch screen I/O board, program disassembles as little-endian SH-4
50315171   ROM_LOAD( "fpr24351.ic14", 0x000000, 0x200000, CRC(4d1b7b89) SHA1(965b8c6b5a2e7b3f1b1e2eac19c86000c3b66754) )
5172
5173   ROM_REGION( 4, "rom_key", 0 )
5174   ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) )
50325175ROM_END
50335176
50345177/*
r12704r12705
50735216*/
50745217
50755218ROM_START( zombrvn )
5076   ROM_REGION( 0x200000, "maincpu", 0)
50775219   NAOMI_BIOS
50785220   NAOMI_DEFAULT_EEPROM
50795221
5080   ROM_REGION( 0xa000000, "user1", ROMREGION_ERASEFF)
5222   ROM_REGION( 0xa000000, "rom_board", ROMREGION_ERASEFF)
50815223   ROM_LOAD("epr-21707.ic22", 0x0000000, 0x0200000,  CRC(4daa11e9) SHA1(2dc219a5e0d0b41cce6d07631baff0495c479e13) )
50825224   ROM_RELOAD( 0x200000, 0x200000)
50835225   ROM_RELOAD( 0x400000, 0x200000)
r12704r12705
51015243   ROM_LOAD("mpr-21724.ic17",0x8800000, 0x0800000, CRC(f048aeb7) SHA1(39b7bf0ce65f6e13aa0ae5fd6a142959b9ce5acf) )
51025244   ROM_LOAD("mpr-21725.ic18",0x9000000, 0x0800000, CRC(2202077b) SHA1(0893a85379f994277083c0bc5b178dd34508f816) )
51035245   ROM_LOAD("mpr-21726.ic19",0x9800000, 0x0800000, CRC(429bf290) SHA1(6733e1bcf100e73ab43273f6feedc187fcaa55d4) )
5246
5247   ROM_REGION( 4, "rom_key", 0 )
5248   ROM_LOAD( "zombrvn-key.bin", 0, 4, CRC(572d3944) SHA1(16ae634d85169851b9deae3c03b5dd4d4bf2794a) )
51045249ROM_END
51055250
51065251ROM_START( gunsur2 )
5107   ROM_REGION( 0x200000, "maincpu", 0)
51085252   NAOMI_BIOS
51095253   NAOMI_DEFAULT_EEPROM
51105254
5111   ROM_REGION( 0x10000000, "user1", ROMREGION_ERASEFF)
5112        ROM_LOAD( "bhf1vere.2f",  0x0000000, 0x0800000, CRC(121ea283) SHA1(e4bf2b90fa3d42727b8393ffa2c5a8863914a630) )
5113        ROM_LOAD( "bhf1ma2.4m",   0x2000000, 0x1000000, CRC(8073dec7) SHA1(2d4173ff0de37b95a8cb02e1b572a9cdeb448c24) )
5114        ROM_LOAD( "bhf1ma3.4l",   0x3000000, 0x1000000, CRC(43cd16a4) SHA1(86258df34b652a614129efd4c825c62ff1382318) )
5115        ROM_LOAD( "bhf1ma4.4k",   0x4000000, 0x1000000, CRC(f6aebed8) SHA1(687057aacb45ebffe3b5cf2b8dd52d24039392f1) )
5116        ROM_LOAD( "bhf1ma5.4j",   0x5000000, 0x1000000, CRC(b5e1b582) SHA1(47763113e6917bbf48840292c08d4f63c3ce085a) )
5117        ROM_LOAD( "bhf1ma6.4h",   0x6000000, 0x1000000, CRC(345fd824) SHA1(61ebc12c7cd7f2e2c5173cc0f57240855ec99c6f) )
5118        ROM_LOAD( "bhf1ma7.4f",   0x7000000, 0x1000000, CRC(465ecff1) SHA1(f9eabc77ed8135fa77c8e40335e6b3df1a64042c) )
5119        ROM_LOAD( "bhf1ma8.4d",   0x8000000, 0x1000000, CRC(76c92354) SHA1(0049b10144d65f574d14d9ad9d1d5380bf154532) )
5120        ROM_LOAD( "bhf1ma9.4e",   0x9000000, 0x1000000, CRC(d45a46ee) SHA1(c12764f5ba17f10fb309e47450bb89fbef51e252) )
5121        ROM_LOAD( "bhf1ma10.4c",  0xa000000, 0x1000000, CRC(8c38d1f7) SHA1(3fbc280590c49fa094c1fc1e23d6c9d0031298c5) )
5122        ROM_LOAD( "bhf1ma11.4b",  0xb000000, 0x1000000, CRC(f49153c4) SHA1(85d5583cac492317ba52dc7a31a443f5f26a67c9) )
5123        ROM_LOAD( "bhf1ma12.6p",  0xc000000, 0x1000000, CRC(0e2bdd9a) SHA1(e2f82d2c9e33da1a297d79a0324558d0ff614172) )
5124        ROM_LOAD( "bhf1ma13.6n",  0xd000000, 0x1000000, CRC(055718ad) SHA1(355c4780231a4361aa6237dd34819b60d9df0fc7) )
5125        ROM_LOAD( "bhf1ma14.6m",  0xe000000, 0x1000000, CRC(d06c9bd7) SHA1(54668a2fd31059976890da92709c18f308634887) )
5126        ROM_LOAD( "bhf1ma15.6l",  0xf000000, 0x1000000, CRC(db3c396b) SHA1(da0e125d627ce890906ca100081ab0685e11c0ef) )
5255   ROM_REGION( 0x10000000, "rom_board", ROMREGION_ERASEFF)
5256   ROM_LOAD( "bhf1vere.2f",  0x0000000, 0x0800000, CRC(121ea283) SHA1(e4bf2b90fa3d42727b8393ffa2c5a8863914a630) )
5257   ROM_LOAD( "bhf1ma2.4m",   0x2000000, 0x1000000, CRC(8073dec7) SHA1(2d4173ff0de37b95a8cb02e1b572a9cdeb448c24) )
5258   ROM_LOAD( "bhf1ma3.4l",   0x3000000, 0x1000000, CRC(43cd16a4) SHA1(86258df34b652a614129efd4c825c62ff1382318) )
5259   ROM_LOAD( "bhf1ma4.4k",   0x4000000, 0x1000000, CRC(f6aebed8) SHA1(687057aacb45ebffe3b5cf2b8dd52d24039392f1) )
5260   ROM_LOAD( "bhf1ma5.4j",   0x5000000, 0x1000000, CRC(b5e1b582) SHA1(47763113e6917bbf48840292c08d4f63c3ce085a) )
5261   ROM_LOAD( "bhf1ma6.4h",   0x6000000, 0x1000000, CRC(345fd824) SHA1(61ebc12c7cd7f2e2c5173cc0f57240855ec99c6f) )
5262   ROM_LOAD( "bhf1ma7.4f",   0x7000000, 0x1000000, CRC(465ecff1) SHA1(f9eabc77ed8135fa77c8e40335e6b3df1a64042c) )
5263   ROM_LOAD( "bhf1ma8.4d",   0x8000000, 0x1000000, CRC(76c92354) SHA1(0049b10144d65f574d14d9ad9d1d5380bf154532) )
5264   ROM_LOAD( "bhf1ma9.4e",   0x9000000, 0x1000000, CRC(d45a46ee) SHA1(c12764f5ba17f10fb309e47450bb89fbef51e252) )
5265   ROM_LOAD( "bhf1ma10.4c",  0xa000000, 0x1000000, CRC(8c38d1f7) SHA1(3fbc280590c49fa094c1fc1e23d6c9d0031298c5) )
5266   ROM_LOAD( "bhf1ma11.4b",  0xb000000, 0x1000000, CRC(f49153c4) SHA1(85d5583cac492317ba52dc7a31a443f5f26a67c9) )
5267   ROM_LOAD( "bhf1ma12.6p",  0xc000000, 0x1000000, CRC(0e2bdd9a) SHA1(e2f82d2c9e33da1a297d79a0324558d0ff614172) )
5268   ROM_LOAD( "bhf1ma13.6n",  0xd000000, 0x1000000, CRC(055718ad) SHA1(355c4780231a4361aa6237dd34819b60d9df0fc7) )
5269   ROM_LOAD( "bhf1ma14.6m",  0xe000000, 0x1000000, CRC(d06c9bd7) SHA1(54668a2fd31059976890da92709c18f308634887) )
5270   ROM_LOAD( "bhf1ma15.6l",  0xf000000, 0x1000000, CRC(db3c396b) SHA1(da0e125d627ce890906ca100081ab0685e11c0ef) )
51275271ROM_END
51285272
51295273ROM_START( wldkicks )
5130   ROM_REGION( 0x200000, "maincpu", 0)
51315274   NAOMI_BIOS
51325275   NAOMI_DEFAULT_EEPROM
51335276
5134   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
5135      ROM_LOAD( "wk1-fl1.2d",   0x0400000, 0x0400000, CRC(f833a543) SHA1(328b64f2790bfd0b63168a8a3175227e083b995d) )
5136        ROM_LOAD( "wk1-fl2.2c",   0x0c00000, 0x0400000, CRC(20ee71b0) SHA1(074e0c531e8770b0efd6464193bce7a284a3c057) )
5137        ROM_LOAD( "wk1-ma2.4m",   0x1000000, 0x1000000, CRC(650590ec) SHA1(bb9d5d5df2321df24ee0fb9e8bf2757d5277f8ea) )
5138      ROM_RELOAD( 0x800000, 0x400000)
5139        ROM_LOAD( "wk1-ma3.4l",   0x2000000, 0x1000000, CRC(3b340dc0) SHA1(2412e41d5bd74d1233fb91f8ce2276a318bfc53d) )
5140        ROM_LOAD( "wk1-ma4.4k",   0x3000000, 0x1000000, CRC(263fbb16) SHA1(b5d3a3d085f9623d70030ca3c49afb84e25549e3) )
5141        ROM_LOAD( "wk1-ma5.4j",   0x4000000, 0x1000000, CRC(9697db68) SHA1(7926e2acff0519403afcba9bdb5f68de28b06c79) )
5142        ROM_LOAD( "wk1-ma6.4h",   0x5000000, 0x1000000, CRC(65017db3) SHA1(a66cd73cdfc9355df63da781a46aa832889f583a) )
5143        ROM_LOAD( "wk1-ma7.4f",   0x6000000, 0x1000000, CRC(902eea85) SHA1(aa7964eb85b468d4fe112f9f0faaf2fa3f1aa96b) )
5144        ROM_LOAD( "wk1-ma8.4e",   0x7000000, 0x1000000, CRC(90e917ed) SHA1(53d32ce0ae2b05fa55a95b8697927045d07f4e8a) )
5145        ROM_LOAD( "wk1-ma9.4d",   0x8000000, 0x1000000, CRC(1d227a05) SHA1(9f816bcdf0279785e0b37ab2f3c5eb5912114dd5) )
5146        ROM_LOAD( "wk1-ma10.4c",  0x9000000, 0x1000000, CRC(29635a54) SHA1(a3109d0f8f271e2183316846df2a6a819f6a9b20) )
5147        ROM_LOAD( "wk1-ma11.4b",  0xa000000, 0x1000000, CRC(e96f312c) SHA1(0a92640277111aef5c6e9dab4218a8ae2196ce61) )
5277   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
5278   ROM_LOAD( "wk1-fl1.2d",   0x0400000, 0x0400000, CRC(f833a543) SHA1(328b64f2790bfd0b63168a8a3175227e083b995d) )
5279   ROM_LOAD( "wk1-fl2.2c",   0x0c00000, 0x0400000, CRC(20ee71b0) SHA1(074e0c531e8770b0efd6464193bce7a284a3c057) )
5280   ROM_LOAD( "wk1-ma2.4m",   0x1000000, 0x1000000, CRC(650590ec) SHA1(bb9d5d5df2321df24ee0fb9e8bf2757d5277f8ea) )
5281   ROM_RELOAD( 0x800000, 0x400000)
5282   ROM_LOAD( "wk1-ma3.4l",   0x2000000, 0x1000000, CRC(3b340dc0) SHA1(2412e41d5bd74d1233fb91f8ce2276a318bfc53d) )
5283   ROM_LOAD( "wk1-ma4.4k",   0x3000000, 0x1000000, CRC(263fbb16) SHA1(b5d3a3d085f9623d70030ca3c49afb84e25549e3) )
5284   ROM_LOAD( "wk1-ma5.4j",   0x4000000, 0x1000000, CRC(9697db68) SHA1(7926e2acff0519403afcba9bdb5f68de28b06c79) )
5285   ROM_LOAD( "wk1-ma6.4h",   0x5000000, 0x1000000, CRC(65017db3) SHA1(a66cd73cdfc9355df63da781a46aa832889f583a) )
5286   ROM_LOAD( "wk1-ma7.4f",   0x6000000, 0x1000000, CRC(902eea85) SHA1(aa7964eb85b468d4fe112f9f0faaf2fa3f1aa96b) )
5287   ROM_LOAD( "wk1-ma8.4e",   0x7000000, 0x1000000, CRC(90e917ed) SHA1(53d32ce0ae2b05fa55a95b8697927045d07f4e8a) )
5288   ROM_LOAD( "wk1-ma9.4d",   0x8000000, 0x1000000, CRC(1d227a05) SHA1(9f816bcdf0279785e0b37ab2f3c5eb5912114dd5) )
5289   ROM_LOAD( "wk1-ma10.4c",  0x9000000, 0x1000000, CRC(29635a54) SHA1(a3109d0f8f271e2183316846df2a6a819f6a9b20) )
5290   ROM_LOAD( "wk1-ma11.4b",  0xa000000, 0x1000000, CRC(e96f312c) SHA1(0a92640277111aef5c6e9dab4218a8ae2196ce61) )
5291
5292   ROM_REGION( 4, "rom_key", 0 )
5293   ROM_LOAD( "wldkicks-key.bin", 0, 4, CRC(c1e3000b) SHA1(36c2546833effe9452e2b3f7d31335fc5e349f49) )
51485294ROM_END
51495295
51505296ROM_START( vtenis2c )
5151   ROM_REGION( 0x200000, "maincpu", 0)
51525297   NAOMI_BIOS
51535298   NAOMI_DEFAULT_EEPROM
51545299
5155   ROM_REGION( 0x10000000, "user1", ROMREGION_ERASEFF)
5156        ROM_LOAD( "epr-22327a.bin", 0x000000, 0x400000, CRC(e949004c) SHA1(54db84c3e1db30b233612f68dcd094b597deffd0) )
5157        ROM_LOAD32_WORD( "mpr-22307.17s",  0x0800000, 0x800000, CRC(db5c0818) SHA1(d39d2241adeb962d68bfb76a9d1c0dcd538c3538) )
5158        ROM_LOAD32_WORD( "mpr-22308.18",   0x0800002, 0x800000, CRC(ac996a0e) SHA1(5cf110b79ef250cd64919205874278b4a85a42f6) )
5159        ROM_LOAD32_WORD( "mpr-22309.19s",  0x1800000, 0x800000, CRC(fba79592) SHA1(09f2be133cf503e6f5e13eef1b1e38c268529b68) )
5160        ROM_LOAD32_WORD( "mpr-22310.20",   0x1800002, 0x800000, CRC(10876476) SHA1(590fd5532c72c67e285a12acd33e828f2e1ff5b1) )
5161        ROM_LOAD32_WORD( "mpr-22311.21s",  0x2800000, 0x800000, CRC(ad735e61) SHA1(6d340ae2f8fe44b82b1bbace02b5c10e89e40400) )
5162        ROM_LOAD32_WORD( "mpr-22312.22",   0x2800002, 0x800000, CRC(46830ffa) SHA1(89b843588a48352b958a70e85deb625c19a2fcc7) )
5163        ROM_LOAD32_WORD( "mpr-22313.23s",  0x3800000, 0x800000, CRC(44900a20) SHA1(3a82938a81fd6634c51595479d59ae4215fb8af3) )
5164        ROM_LOAD32_WORD( "mpr-22314.24",   0x3800002, 0x800000, CRC(3b0ba6e9) SHA1(0ee1dd2d67dd688de19b1ede00c48234994a4832) )
5165        ROM_LOAD32_WORD( "mpr-22315.25s",  0x4800000, 0x800000, CRC(eebe4877) SHA1(bc13e50d85f51aa2baf3c00440a089a8aff998ef) )
5166        ROM_LOAD32_WORD( "mpr-22316.26",   0x4800002, 0x800000, CRC(0a82d403) SHA1(fc002210397eb792c27885d440671225d0bed71f) )
5167        ROM_LOAD32_WORD( "mpr-22317.27s",  0x5800000, 0x800000, CRC(55ef3e71) SHA1(d7643c5d3bb6ccf4b35511be2b5c776fc46a2f45) )
5168        ROM_LOAD32_WORD( "mpr-22318.28",   0x5800002, 0x800000, CRC(3dfabb96) SHA1(97863c939e5bb3e976c517839faa49bcfbee83c5) )
5169        ROM_LOAD32_WORD( "mpr-22319.29s",  0x6800000, 0x800000, CRC(9b92fd02) SHA1(19c9b279aca1aa6575047494ce26a36dbc93812f) )
5170        ROM_LOAD32_WORD( "mpr-22320.30",   0x6800002, 0x800000, CRC(9b762f6e) SHA1(7f787a89574e45f529970377e8b6394472cd001b) )
5171        ROM_LOAD32_WORD( "mpr-22321.31s",  0x7800000, 0x800000, CRC(5ce2b3f1) SHA1(9bac49167ced0415ab3b2cac20c7bcf205aecfdf) )
5172        ROM_LOAD32_WORD( "mpr-22322.32",   0x7800002, 0x800000, CRC(21bf1caf) SHA1(bc1828db2f5f71ef87153a81b49b2ba72ba176e1) )
5173        ROM_LOAD32_WORD( "mpr-22323.33s",  0x8800000, 0x800000, CRC(0bd632ab) SHA1(21acab5336dd0ba317839176f2557df95917729e) )
5174        ROM_LOAD32_WORD( "mpr-22324.34",   0x8800002, 0x800000, CRC(ff2571d4) SHA1(c2cbb2345163bbf1973e63cefb9a952e5a52a6cf) )
5300   ROM_REGION( 0x10000000, "rom_board", ROMREGION_ERASEFF)
5301   ROM_LOAD( "epr-22327a.bin", 0x000000, 0x400000, CRC(e949004c) SHA1(54db84c3e1db30b233612f68dcd094b597deffd0) )
5302   ROM_LOAD32_WORD( "mpr-22307.17s",  0x0800000, 0x800000, CRC(db5c0818) SHA1(d39d2241adeb962d68bfb76a9d1c0dcd538c3538) )
5303   ROM_LOAD32_WORD( "mpr-22308.18",   0x0800002, 0x800000, CRC(ac996a0e) SHA1(5cf110b79ef250cd64919205874278b4a85a42f6) )
5304   ROM_LOAD32_WORD( "mpr-22309.19s",  0x1800000, 0x800000, CRC(fba79592) SHA1(09f2be133cf503e6f5e13eef1b1e38c268529b68) )
5305   ROM_LOAD32_WORD( "mpr-22310.20",   0x1800002, 0x800000, CRC(10876476) SHA1(590fd5532c72c67e285a12acd33e828f2e1ff5b1) )
5306   ROM_LOAD32_WORD( "mpr-22311.21s",  0x2800000, 0x800000, CRC(ad735e61) SHA1(6d340ae2f8fe44b82b1bbace02b5c10e89e40400) )
5307   ROM_LOAD32_WORD( "mpr-22312.22",   0x2800002, 0x800000, CRC(46830ffa) SHA1(89b843588a48352b958a70e85deb625c19a2fcc7) )
5308   ROM_LOAD32_WORD( "mpr-22313.23s",  0x3800000, 0x800000, CRC(44900a20) SHA1(3a82938a81fd6634c51595479d59ae4215fb8af3) )
5309   ROM_LOAD32_WORD( "mpr-22314.24",   0x3800002, 0x800000, CRC(3b0ba6e9) SHA1(0ee1dd2d67dd688de19b1ede00c48234994a4832) )
5310   ROM_LOAD32_WORD( "mpr-22315.25s",  0x4800000, 0x800000, CRC(eebe4877) SHA1(bc13e50d85f51aa2baf3c00440a089a8aff998ef) )
5311   ROM_LOAD32_WORD( "mpr-22316.26",   0x4800002, 0x800000, CRC(0a82d403) SHA1(fc002210397eb792c27885d440671225d0bed71f) )
5312   ROM_LOAD32_WORD( "mpr-22317.27s",  0x5800000, 0x800000, CRC(55ef3e71) SHA1(d7643c5d3bb6ccf4b35511be2b5c776fc46a2f45) )
5313   ROM_LOAD32_WORD( "mpr-22318.28",   0x5800002, 0x800000, CRC(3dfabb96) SHA1(97863c939e5bb3e976c517839faa49bcfbee83c5) )
5314   ROM_LOAD32_WORD( "mpr-22319.29s",  0x6800000, 0x800000, CRC(9b92fd02) SHA1(19c9b279aca1aa6575047494ce26a36dbc93812f) )
5315   ROM_LOAD32_WORD( "mpr-22320.30",   0x6800002, 0x800000, CRC(9b762f6e) SHA1(7f787a89574e45f529970377e8b6394472cd001b) )
5316   ROM_LOAD32_WORD( "mpr-22321.31s",  0x7800000, 0x800000, CRC(5ce2b3f1) SHA1(9bac49167ced0415ab3b2cac20c7bcf205aecfdf) )
5317   ROM_LOAD32_WORD( "mpr-22322.32",   0x7800002, 0x800000, CRC(21bf1caf) SHA1(bc1828db2f5f71ef87153a81b49b2ba72ba176e1) )
5318   ROM_LOAD32_WORD( "mpr-22323.33s",  0x8800000, 0x800000, CRC(0bd632ab) SHA1(21acab5336dd0ba317839176f2557df95917729e) )
5319   ROM_LOAD32_WORD( "mpr-22324.34",   0x8800002, 0x800000, CRC(ff2571d4) SHA1(c2cbb2345163bbf1973e63cefb9a952e5a52a6cf) )
5320
5321   ROM_REGION( 4, "rom_key", 0 )
5322   ROM_LOAD( "vtenis2c-key.bin", 0, 4, CRC(b8c5b510) SHA1(f36d037a62a576e71211093e075f0ffa7e312c2d) )
51755323ROM_END
51765324
51775325ROM_START( kick4csh )
5178   ROM_REGION( 0x200000, "maincpu", 0)
51795326   NAOMI_BIOS
51805327   NAOMI_DEFAULT_EEPROM
51815328
5182   ROM_REGION( 0x9000084, "user1", ROMREGION_ERASEFF)
5183        ROM_LOAD( "epr-24212.ic11",   0x0000000, 0x400000, CRC(935453e8) SHA1(b34b3ac976229cba941843ffac9db420068999de) )
5184        ROM_LOAD32_WORD( "opr-24213a.ic17s", 0x1000000, 0x800000, CRC(e24affe1) SHA1(5b4efbf9cdde8e49c26edba69b515d79b9b7acea) )
5185        ROM_LOAD32_WORD( "opr-24214a.ic18",  0x1000002, 0x800000, CRC(19bc5bca) SHA1(1c16ac929757a0c46456938bd9ccec7438130c66) )
5186        ROM_LOAD32_WORD( "opr-24215a.ic19s", 0x2000000, 0x800000, CRC(fed7750e) SHA1(61af9799a73ddc80e6763d44b23cbf8db497f144) )
5187        ROM_LOAD32_WORD( "opr-24216a.ic20",  0x2000002, 0x800000, CRC(635e5365) SHA1(e22f3fb0ac03963596e36592bfce791b0ee183e9) )
5188        ROM_LOAD32_WORD( "opr-24224a.ic21s", 0x3000000, 0x800000, CRC(a86b9368) SHA1(d73b8250700d368d3b194170b507a1ec1c818287) )
5189        ROM_LOAD32_WORD( "opr-24225a.ic22",  0x3000002, 0x800000, CRC(dbdebe45) SHA1(916897ea376175b48652efb58cdf22350d2a64cf) )
5190        ROM_LOAD32_WORD( "opr-24226a.ic23s", 0x4000000, 0x800000, CRC(43edd5a1) SHA1(0992c355d3d7d86dfe425de4b823fa4b64c0ee46) )
5191        ROM_LOAD32_WORD( "opr-24227a.ic24",  0x4000002, 0x800000, CRC(0e75009a) SHA1(f897ba64b6c6d98a080ee45a6a5f10cd6a764d61) )
5192        ROM_LOAD32_WORD( "opr-24228a.ic25s", 0x5000000, 0x800000, CRC(e1343e87) SHA1(8ea4eb85b9cbc1d1ef59c661357fc3dd473143d0) )
5193        ROM_LOAD32_WORD( "opr-24229a.ic26",  0x5000002, 0x800000, CRC(cca7f957) SHA1(8e2035c5d96fef849cf7517219dd6f1ae1e0f84b) )
5194        ROM_LOAD32_WORD( "opr-24230a.ic27s", 0x6000000, 0x800000, CRC(71f52068) SHA1(c21d2ce2fa2e83d0048cc52c8c7dbece11780e2f) )
5195        ROM_LOAD32_WORD( "opr-24231a.ic28",  0x6000002, 0x800000, CRC(16f3a1f1) SHA1(c3893d536ac0c16793accaa5aeb166fef4035630) )
5196        ROM_LOAD32_WORD( "opr-24232a.ic29",  0x7000000, 0x800000, CRC(4cdbd372) SHA1(745645c959689d4f2234aba37694e851b272528d) )
5197        ROM_LOAD32_WORD( "opr-24233a.ic30s", 0x7000002, 0x800000, CRC(70d638c6) SHA1(ef8bd9860a587dc76f3915047a5e408ab9f1f9b6) )
5198        ROM_LOAD32_WORD( "opr-24234a.ic31",  0x8000000, 0x800000, CRC(f78deb2a) SHA1(7103333c7f388545ebba8e8bb9443ec5ea90589b) )
5329   ROM_REGION( 0x9000084, "rom_board", ROMREGION_ERASEFF)
5330   ROM_LOAD( "epr-24212.ic11",   0x0000000, 0x400000, CRC(935453e8) SHA1(b34b3ac976229cba941843ffac9db420068999de) )
5331   ROM_LOAD32_WORD( "opr-24213a.ic17s", 0x1000000, 0x800000, CRC(e24affe1) SHA1(5b4efbf9cdde8e49c26edba69b515d79b9b7acea) )
5332   ROM_LOAD32_WORD( "opr-24214a.ic18",  0x1000002, 0x800000, CRC(19bc5bca) SHA1(1c16ac929757a0c46456938bd9ccec7438130c66) )
5333   ROM_LOAD32_WORD( "opr-24215a.ic19s", 0x2000000, 0x800000, CRC(fed7750e) SHA1(61af9799a73ddc80e6763d44b23cbf8db497f144) )
5334   ROM_LOAD32_WORD( "opr-24216a.ic20",  0x2000002, 0x800000, CRC(635e5365) SHA1(e22f3fb0ac03963596e36592bfce791b0ee183e9) )
5335   ROM_LOAD32_WORD( "opr-24224a.ic21s", 0x3000000, 0x800000, CRC(a86b9368) SHA1(d73b8250700d368d3b194170b507a1ec1c818287) )
5336   ROM_LOAD32_WORD( "opr-24225a.ic22",  0x3000002, 0x800000, CRC(dbdebe45) SHA1(916897ea376175b48652efb58cdf22350d2a64cf) )
5337   ROM_LOAD32_WORD( "opr-24226a.ic23s", 0x4000000, 0x800000, CRC(43edd5a1) SHA1(0992c355d3d7d86dfe425de4b823fa4b64c0ee46) )
5338   ROM_LOAD32_WORD( "opr-24227a.ic24",  0x4000002, 0x800000, CRC(0e75009a) SHA1(f897ba64b6c6d98a080ee45a6a5f10cd6a764d61) )
5339   ROM_LOAD32_WORD( "opr-24228a.ic25s", 0x5000000, 0x800000, CRC(e1343e87) SHA1(8ea4eb85b9cbc1d1ef59c661357fc3dd473143d0) )
5340   ROM_LOAD32_WORD( "opr-24229a.ic26",  0x5000002, 0x800000, CRC(cca7f957) SHA1(8e2035c5d96fef849cf7517219dd6f1ae1e0f84b) )
5341   ROM_LOAD32_WORD( "opr-24230a.ic27s", 0x6000000, 0x800000, CRC(71f52068) SHA1(c21d2ce2fa2e83d0048cc52c8c7dbece11780e2f) )
5342   ROM_LOAD32_WORD( "opr-24231a.ic28",  0x6000002, 0x800000, CRC(16f3a1f1) SHA1(c3893d536ac0c16793accaa5aeb166fef4035630) )
5343   ROM_LOAD32_WORD( "opr-24232a.ic29",  0x7000000, 0x800000, CRC(4cdbd372) SHA1(745645c959689d4f2234aba37694e851b272528d) )
5344   ROM_LOAD32_WORD( "opr-24233a.ic30s", 0x7000002, 0x800000, CRC(70d638c6) SHA1(ef8bd9860a587dc76f3915047a5e408ab9f1f9b6) )
5345   ROM_LOAD32_WORD( "opr-24234a.ic31",  0x8000000, 0x800000, CRC(f78deb2a) SHA1(7103333c7f388545ebba8e8bb9443ec5ea90589b) )
51995346   ROM_LOAD32_WORD( "opr-24235a.ic32s", 0x8000002, 0x800000, CRC(a2bb0d26) SHA1(bafd66250f8ad472eaa179bd73edc0dc22b681f5) )
52005347   ROM_LOAD( "25lc040.ic13s", 0x9000000, 0x000084, CRC(19d77c96) SHA1(1d82af6b11f7fde93a3c4dd3561f1f2ab74c8d65) )
5348
5349   ROM_REGION( 4, "rom_key", 0 )
5350   ROM_LOAD( "kick4csh-key.bin", 0, 4, CRC(889d2ea1) SHA1(daf7acf41b6bc607d443a93221a3e4554b99547f) )
52015351ROM_END
52025352
52035353ROM_START( wrungp )
5204   ROM_REGION( 0x200000, "maincpu", 0)
52055354   NAOMI_BIOS
52065355   NAOMI_DEFAULT_EEPROM
52075356
5208   ROM_REGION( 0x6800000, "user1", ROMREGION_ERASEFF)
5209        ROM_LOAD( "epr-24059.ic22", 0x0000000, 0x400000, CRC(f82c00b5) SHA1(e885a46b2d3d52d9222d9ce038766858a2046ea1) )
5210        ROM_LOAD( "mpr-23719.ic1",  0x0800000, 0x1000000, CRC(b9fb79df) SHA1(1568320c25118f4ee5c508dcca4e4496ff23c067) )
5211        ROM_LOAD( "mpr-23720.ic2",  0x1800000, 0x1000000, CRC(d3f19874) SHA1(cde22c56dac233f5407d2e3ac8e6ea4f8681d0bf) )
5212        ROM_LOAD( "mpr-23721.ic3",  0x2800000, 0x1000000, CRC(f599a52e) SHA1(ca0edc2e9496f218117cef7d71bf1761bed8d4ac) )
5213        ROM_LOAD( "mpr-23722.ic4",  0x3800000, 0x1000000, CRC(e08a6a36) SHA1(ef37d8c7bc9d5055008d522825ef3e80e27745c2) )
5214        ROM_LOAD( "mpr-23723.ic5",  0x4800000, 0x1000000, CRC(651610eb) SHA1(4dfe4f876a5440bd1034f41a4d76e1d6bd3e0e32) )
5215        ROM_LOAD( "mpr-23724.ic6",  0x5800000, 0x1000000, CRC(c633c45a) SHA1(23b45140f965428d33e2424b0574715c0b952d05) )
5357   ROM_REGION( 0x6800000, "rom_board", ROMREGION_ERASEFF)
5358   ROM_LOAD( "epr-24059.ic22", 0x0000000, 0x400000, CRC(f82c00b5) SHA1(e885a46b2d3d52d9222d9ce038766858a2046ea1) )
5359   ROM_LOAD( "mpr-23719.ic1",  0x0800000, 0x1000000, CRC(b9fb79df) SHA1(1568320c25118f4ee5c508dcca4e4496ff23c067) )
5360   ROM_LOAD( "mpr-23720.ic2",  0x1800000, 0x1000000, CRC(d3f19874) SHA1(cde22c56dac233f5407d2e3ac8e6ea4f8681d0bf) )
5361   ROM_LOAD( "mpr-23721.ic3",  0x2800000, 0x1000000, CRC(f599a52e) SHA1(ca0edc2e9496f218117cef7d71bf1761bed8d4ac) )
5362   ROM_LOAD( "mpr-23722.ic4",  0x3800000, 0x1000000, CRC(e08a6a36) SHA1(ef37d8c7bc9d5055008d522825ef3e80e27745c2) )
5363   ROM_LOAD( "mpr-23723.ic5",  0x4800000, 0x1000000, CRC(651610eb) SHA1(4dfe4f876a5440bd1034f41a4d76e1d6bd3e0e32) )
5364   ROM_LOAD( "mpr-23724.ic6",  0x5800000, 0x1000000, CRC(c633c45a) SHA1(23b45140f965428d33e2424b0574715c0b952d05) )
52165365ROM_END
52175366
52185367ROM_START( gundmct )
5219   ROM_REGION( 0x200000, "maincpu", 0)
52205368   NAOMI_BIOS
52215369   NAOMI_DEFAULT_EEPROM
52225370
5223   ROM_REGION( 0xa800000, "user1", ROMREGION_ERASEFF)
5224        ROM_LOAD( "epr-23638.ic22", 0x0000000, 0x0400000, CRC(03e8600d) SHA1(bf9bb6ed03a5744c91c2c4038be764408dd85234) )
5371   ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
5372   ROM_LOAD( "epr-23638.ic22", 0x0000000, 0x0400000, CRC(03e8600d) SHA1(bf9bb6ed03a5744c91c2c4038be764408dd85234) )
52255373   ROM_RELOAD( 0x400000, 0x400000)
5226        ROM_LOAD( "mpr-23628.ic1",  0x0800000, 0x1000000, CRC(8668ba2f) SHA1(cedc67e6ce267a8c99ced4728f891bcae01cce24) )
5227        ROM_LOAD( "mpr-23629.ic2",  0x1800000, 0x1000000, CRC(b60f3048) SHA1(e575547e00b93129b1da49c61fc2a56706e8f362) )
5228        ROM_LOAD( "mpr-23630.ic3",  0x2800000, 0x1000000, CRC(0b47643f) SHA1(3cc4e51ca85ecdd04fe7c91e3b877dd5e6c0e67e) )
5374   ROM_LOAD( "mpr-23628.ic1",  0x0800000, 0x1000000, CRC(8668ba2f) SHA1(cedc67e6ce267a8c99ced4728f891bcae01cce24) )
5375   ROM_LOAD( "mpr-23629.ic2",  0x1800000, 0x1000000, CRC(b60f3048) SHA1(e575547e00b93129b1da49c61fc2a56706e8f362) )
5376   ROM_LOAD( "mpr-23630.ic3",  0x2800000, 0x1000000, CRC(0b47643f) SHA1(3cc4e51ca85ecdd04fe7c91e3b877dd5e6c0e67e) )
52295377   ROM_LOAD( "mpr-23631.ic4",  0x3800000, 0x1000000, CRC(dbd863c9) SHA1(0c5d3b76a56902861e9a9595c0997f3726583cda) )
5230        ROM_LOAD( "mpr-23632.ic5",  0x4800000, 0x1000000, CRC(8c008562) SHA1(3fd696fadafd012b312a1407345c1ce1cd41ca45) )
5231        ROM_LOAD( "mpr-23633.ic6",  0x5800000, 0x1000000, CRC(ca104486) SHA1(05e6d1f9481a13189739671620a96a41af91433e) )
5232        ROM_LOAD( "mpr-23634.ic7",  0x6800000, 0x1000000, CRC(32bf6938) SHA1(f7bc0bed0a26c6d964c147fa78c666fd830730cf) )
5233        ROM_LOAD( "mpr-23635.ic8",  0x7800000, 0x1000000, CRC(f9279277) SHA1(823ae02a754ca8a8effdb957ccc6726765fc29b8) )
5234        ROM_LOAD( "mpr-23636.ic9",  0x8800000, 0x1000000, CRC(57199e9f) SHA1(73a6f20ee7b3133ed4c6286e477e2ff9757106bd) )
5235        ROM_LOAD( "mpr-23637.ic10", 0x9800000, 0x1000000, CRC(737b5dff) SHA1(0a405b711ffb096a3e6d52ececed73a5f93ebf02) )
5378   ROM_LOAD( "mpr-23632.ic5",  0x4800000, 0x1000000, CRC(8c008562) SHA1(3fd696fadafd012b312a1407345c1ce1cd41ca45) )
5379   ROM_LOAD( "mpr-23633.ic6",  0x5800000, 0x1000000, CRC(ca104486) SHA1(05e6d1f9481a13189739671620a96a41af91433e) )
5380   ROM_LOAD( "mpr-23634.ic7",  0x6800000, 0x1000000, CRC(32bf6938) SHA1(f7bc0bed0a26c6d964c147fa78c666fd830730cf) )
5381   ROM_LOAD( "mpr-23635.ic8",  0x7800000, 0x1000000, CRC(f9279277) SHA1(823ae02a754ca8a8effdb957ccc6726765fc29b8) )
5382   ROM_LOAD( "mpr-23636.ic9",  0x8800000, 0x1000000, CRC(57199e9f) SHA1(73a6f20ee7b3133ed4c6286e477e2ff9757106bd) )
5383   ROM_LOAD( "mpr-23637.ic10", 0x9800000, 0x1000000, CRC(737b5dff) SHA1(0a405b711ffb096a3e6d52ececed73a5f93ebf02) )
5384
5385   ROM_REGION( 4, "rom_key", 0 )
5386   ROM_LOAD( "gundmct-key.bin", 0, 4, CRC(0dee7a39) SHA1(24eef111ad7d8ad984e38b63101d01463b36542e) )
52365387ROM_END
52375388
52385389ROM_START( puyoda )
5239   ROM_REGION( 0x200000, "maincpu", 0)
52405390   NAOMI_BIOS
52415391   NAOMI_DEFAULT_EEPROM
52425392
5243   ROM_REGION( 0xa800000, "user1", ROMREGION_ERASEFF)
5244        ROM_LOAD( "epr-22206.ic22", 0x0000000, 0x400000, CRC(3882dd01) SHA1(9c287b531d0adfd9ecb10d5bf71a7b0f17454c21) )
5393   ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
5394   ROM_LOAD( "epr-22206.ic22", 0x0000000, 0x400000, CRC(3882dd01) SHA1(9c287b531d0adfd9ecb10d5bf71a7b0f17454c21) )
52455395   ROM_RELOAD( 0x400000, 0x400000)
5246        ROM_LOAD( "mpr-22186.ic1",  0x0800000, 0x800000, CRC(30b1a1d6) SHA1(73914c53a030b496e854b4c1fa454153bb025217) )
5247        ROM_LOAD( "mpr-22187.ic2",  0x1000000, 0x800000, CRC(0eae60e5) SHA1(c695c07000310089aa79b525fbe36015c5526165) )
5248        ROM_LOAD( "mpr-22188.ic3",  0x1800000, 0x800000, CRC(2e651f16) SHA1(b4ef7a90ade379cb3f7d4c64faedb25032465c25) )
5249        ROM_LOAD( "mpr-22189.ic4",  0x2000000, 0x800000, CRC(69ec44fc) SHA1(052e5e14ce433cddfae4a8b9b7c179c6266e9c1c) )
5250        ROM_LOAD( "mpr-22190.ic5",  0x2800000, 0x800000, CRC(d86bef21) SHA1(8c822438cf81023d83985d6800e7e3884f5c6a55) )
5251        ROM_LOAD( "mpr-22191.ic6",  0x3000000, 0x800000, CRC(b52364cd) SHA1(cc1ca522e6d0085a9bdf286e88aacb2041669daf) )
5252        ROM_LOAD( "mpr-22192.ic7",  0x3800000, 0x800000, CRC(08f09148) SHA1(c6a248199823f281cb9a9ac8080ebcae331d7e6f) )
5253        ROM_LOAD( "mpr-22193.ic8",  0x4000000, 0x800000, CRC(be5f58a8) SHA1(0d9f61182878540596909b2559158e03ffbd75c8) )
5254        ROM_LOAD( "mpr-22194.ic9",  0x4800000, 0x800000, CRC(2d0370fd) SHA1(f52587d6c2c06e2d872375f4ab0f0a9e11e932c3) )
5255        ROM_LOAD( "mpr-22195.ic10", 0x5000000, 0x800000, CRC(ccc8bb28) SHA1(d4769c9c8e4c1cdda53f8cb08b57f77c58d27c6f) )
5256        ROM_LOAD( "mpr-22196.ic11", 0x5800000, 0x800000, CRC(d65aa87b) SHA1(97f519a9c5b6bc6fc08e856d8c09fb69fad2bb04) )
5257        ROM_LOAD( "mpr-22197.ic12", 0x6000000, 0x800000, CRC(2c79608e) SHA1(01a09398c4f18e9368fddaca6b0ba520b07ca962) )
5258        ROM_LOAD( "mpr-22198.ic13", 0x6800000, 0x800000, CRC(b5373909) SHA1(6ff02c52a41da3d61e3f45b70fbcfddd4315fdfb) )
5259        ROM_LOAD( "mpr-22199.ic14", 0x7000000, 0x800000, CRC(4ba34fd9) SHA1(b681efb05df4f38349e96f98f38442db9db1f83a) )
5260        ROM_LOAD( "mpr-22200.ic15", 0x7800000, 0x800000, CRC(eb3d4a5e) SHA1(747bea94d224d1753e3dea27319d16fbca706459) )
5261        ROM_LOAD( "mpr-22201.ic16", 0x8000000, 0x800000, CRC(dce19598) SHA1(0081fbb74731f0b639a742fd4e2f5685ffe6887a) )
5262        ROM_LOAD( "mpr-22202.ic17", 0x8800000, 0x800000, CRC(f3ac92a6) SHA1(6583a3f3d1659d00dcffc98c6d3391f1aac03338) )
5263        ROM_LOAD( "mpr-22203.ic18", 0x9000000, 0x800000, CRC(881d6316) SHA1(c7a26404759afac346c63e39b35bf408f1a897a6) )
5264        ROM_LOAD( "mpr-22204.ic19", 0x9800000, 0x800000, CRC(2c5e5140) SHA1(7887fc19459dc85ca78256e0c50c762eea001e51) )
5265        ROM_LOAD( "mpr-22205.ic20", 0xa000000, 0x800000, CRC(7d523ae5) SHA1(7495082b7e83b6ee8f47660baba4c604d8ba2ff1) )
5396   ROM_LOAD( "mpr-22186.ic1",  0x0800000, 0x800000, CRC(30b1a1d6) SHA1(73914c53a030b496e854b4c1fa454153bb025217) )
5397   ROM_LOAD( "mpr-22187.ic2",  0x1000000, 0x800000, CRC(0eae60e5) SHA1(c695c07000310089aa79b525fbe36015c5526165) )
5398   ROM_LOAD( "mpr-22188.ic3",  0x1800000, 0x800000, CRC(2e651f16) SHA1(b4ef7a90ade379cb3f7d4c64faedb25032465c25) )
5399   ROM_LOAD( "mpr-22189.ic4",  0x2000000, 0x800000, CRC(69ec44fc) SHA1(052e5e14ce433cddfae4a8b9b7c179c6266e9c1c) )
5400   ROM_LOAD( "mpr-22190.ic5",  0x2800000, 0x800000, CRC(d86bef21) SHA1(8c822438cf81023d83985d6800e7e3884f5c6a55) )
5401   ROM_LOAD( "mpr-22191.ic6",  0x3000000, 0x800000, CRC(b52364cd) SHA1(cc1ca522e6d0085a9bdf286e88aacb2041669daf) )
5402   ROM_LOAD( "mpr-22192.ic7",  0x3800000, 0x800000, CRC(08f09148) SHA1(c6a248199823f281cb9a9ac8080ebcae331d7e6f) )
5403   ROM_LOAD( "mpr-22193.ic8",  0x4000000, 0x800000, CRC(be5f58a8) SHA1(0d9f61182878540596909b2559158e03ffbd75c8) )
5404   ROM_LOAD( "mpr-22194.ic9",  0x4800000, 0x800000, CRC(2d0370fd) SHA1(f52587d6c2c06e2d872375f4ab0f0a9e11e932c3) )
5405   ROM_LOAD( "mpr-22195.ic10", 0x5000000, 0x800000, CRC(ccc8bb28) SHA1(d4769c9c8e4c1cdda53f8cb08b57f77c58d27c6f) )
5406   ROM_LOAD( "mpr-22196.ic11", 0x5800000, 0x800000, CRC(d65aa87b) SHA1(97f519a9c5b6bc6fc08e856d8c09fb69fad2bb04) )
5407   ROM_LOAD( "mpr-22197.ic12", 0x6000000, 0x800000, CRC(2c79608e) SHA1(01a09398c4f18e9368fddaca6b0ba520b07ca962) )
5408   ROM_LOAD( "mpr-22198.ic13", 0x6800000, 0x800000, CRC(b5373909) SHA1(6ff02c52a41da3d61e3f45b70fbcfddd4315fdfb) )
5409   ROM_LOAD( "mpr-22199.ic14", 0x7000000, 0x800000, CRC(4ba34fd9) SHA1(b681efb05df4f38349e96f98f38442db9db1f83a) )
5410   ROM_LOAD( "mpr-22200.ic15", 0x7800000, 0x800000, CRC(eb3d4a5e) SHA1(747bea94d224d1753e3dea27319d16fbca706459) )
5411   ROM_LOAD( "mpr-22201.ic16", 0x8000000, 0x800000, CRC(dce19598) SHA1(0081fbb74731f0b639a742fd4e2f5685ffe6887a) )
5412   ROM_LOAD( "mpr-22202.ic17", 0x8800000, 0x800000, CRC(f3ac92a6) SHA1(6583a3f3d1659d00dcffc98c6d3391f1aac03338) )
5413   ROM_LOAD( "mpr-22203.ic18", 0x9000000, 0x800000, CRC(881d6316) SHA1(c7a26404759afac346c63e39b35bf408f1a897a6) )
5414   ROM_LOAD( "mpr-22204.ic19", 0x9800000, 0x800000, CRC(2c5e5140) SHA1(7887fc19459dc85ca78256e0c50c762eea001e51) )
5415   ROM_LOAD( "mpr-22205.ic20", 0xa000000, 0x800000, CRC(7d523ae5) SHA1(7495082b7e83b6ee8f47660baba4c604d8ba2ff1) )
5416
5417   ROM_REGION( 4, "rom_key", 0 )
5418   ROM_LOAD( "puyoda-key.bin", 0, 4, CRC(245bb259) SHA1(7ab675779ebf01ad3a78edd39cb287b71acd8bb5) )
52665419ROM_END
52675420
52685421ROM_START( zerogu2 )
5269   ROM_REGION( 0x200000, "maincpu", 0)
52705422   NAOMI_BIOS
52715423   NAOMI_DEFAULT_EEPROM
52725424
5273   ROM_REGION( 0x5800000, "user1", ROMREGION_ERASEFF)
5274        ROM_LOAD( "epr23689.bin", 0x0000000, 0x0400000, CRC(ba42267c) SHA1(e8166e33cc2a4d9b2c57410235f531651b2e7f8a) )
5275        ROM_LOAD( "mpr23684.ic1", 0x0800000, 0x1000000, CRC(035aec98) SHA1(47ea834ca88aca3a72d2e7ef715a64603c40eacd) )
5276        ROM_LOAD( "mpr23685.ic2", 0x1800000, 0x1000000, CRC(d878ff99) SHA1(577be93d43f6113b91cf0967b710c6cf45131713) )
5277        ROM_LOAD( "mpr23686.ic3", 0x2800000, 0x1000000, CRC(a61b4d49) SHA1(842c54ad4e8192e491152ae5bb08daf5dd6b8c6c) )
5278        ROM_LOAD( "mpr23687.ic4", 0x3800000, 0x1000000, CRC(e125439a) SHA1(07e7339f3f53aeb0ebddf7a8ac3eb6d8f3fe9de6) )
5279        ROM_LOAD( "mpr23688.ic5", 0x4800000, 0x1000000, CRC(38412edf) SHA1(9cae06cf46e134531f47e64deedace449664f69a) )
5425   ROM_REGION( 0x5800000, "rom_board", ROMREGION_ERASEFF)
5426   ROM_LOAD( "epr23689.bin", 0x0000000, 0x0400000, CRC(ba42267c) SHA1(e8166e33cc2a4d9b2c57410235f531651b2e7f8a) )
5427   ROM_LOAD( "mpr23684.ic1", 0x0800000, 0x1000000, CRC(035aec98) SHA1(47ea834ca88aca3a72d2e7ef715a64603c40eacd) )
5428   ROM_LOAD( "mpr23685.ic2", 0x1800000, 0x1000000, CRC(d878ff99) SHA1(577be93d43f6113b91cf0967b710c6cf45131713) )
5429   ROM_LOAD( "mpr23686.ic3", 0x2800000, 0x1000000, CRC(a61b4d49) SHA1(842c54ad4e8192e491152ae5bb08daf5dd6b8c6c) )
5430   ROM_LOAD( "mpr23687.ic4", 0x3800000, 0x1000000, CRC(e125439a) SHA1(07e7339f3f53aeb0ebddf7a8ac3eb6d8f3fe9de6) )
5431   ROM_LOAD( "mpr23688.ic5", 0x4800000, 0x1000000, CRC(38412edf) SHA1(9cae06cf46e134531f47e64deedace449664f69a) )
5432
5433   ROM_REGION( 4, "rom_key", 0 )
5434   ROM_LOAD( "zerogu2-key.bin", 0, 4, CRC(f2460eb3) SHA1(69ec4e3933e60caa6a0ac44a855a40deed337d92) )
52805435ROM_END
52815436
52825437ROM_START( inunoos )
5283   ROM_REGION( 0x200000, "maincpu", 0)
52845438   NAOMI_BIOS
52855439   NAOMI_DEFAULT_EEPROM
52865440
5287   ROM_REGION( 0x8800000, "user1", ROMREGION_ERASEFF)
5288        ROM_LOAD( "epr-22294a.ic22", 0x000000, 0x400000, CRC(bc3a1397) SHA1(73747f10ea034bd0fc952939c6c7576dab9640a6) )
5441   ROM_REGION( 0x8800000, "rom_board", ROMREGION_ERASEFF)
5442   ROM_LOAD( "epr-22294a.ic22", 0x000000, 0x400000, CRC(bc3a1397) SHA1(73747f10ea034bd0fc952939c6c7576dab9640a6) )
52895443
5290        ROM_LOAD( "mpr-22278.ic1",  0x0800000, 0x800000, CRC(0afec6d7) SHA1(fad13f7c205d048006b48c1f262f272a9d653630) )
5291        ROM_LOAD( "mpr-22279.ic2",  0x1000000, 0x800000, CRC(80b4a397) SHA1(c7d41a48c327b8ae9fefb15149ad5341b86ff933) )
5292        ROM_LOAD( "mpr-22280.ic3",  0x1800000, 0x800000, CRC(a58fde28) SHA1(db271690131f093a329a457aa234659cbdba4ad1) )
5293        ROM_LOAD( "mpr-22281.ic4",  0x2000000, 0x800000, CRC(6fcc34f6) SHA1(28f4d69fdd4e151cf1d98303d5f7ac8ff6d4c141) )
5294        ROM_LOAD( "mpr-22282.ic5",  0x2800000, 0x800000, CRC(d5582d3e) SHA1(b21eda63314983fff7b88d2ad6ddcd8a2ef20e32) )
5295        ROM_LOAD( "mpr-22283.ic6",  0x3000000, 0x800000, CRC(24b9fa3b) SHA1(b85be6085c476c8683c6d9e9b72e6021385a376a) )
5296        ROM_LOAD( "mpr-22284.ic7",  0x3800000, 0x800000, CRC(bb80e02a) SHA1(73e7fda34295eb3b67ac04e46206a3a399b7b88a) )
5297        ROM_LOAD( "mpr-22285.ic8",  0x4000000, 0x800000, CRC(59e2e25b) SHA1(e32d59dca85f246781a411bd8d0bec8fabc3b26d) )
5298        ROM_LOAD( "mpr-22286.ic9",  0x4800000, 0x800000, CRC(41eac8af) SHA1(594efd94ea053229f0c807591b4f38643f0995c2) )
5299        ROM_LOAD( "mpr-22287.ic10", 0x5000000, 0x800000, CRC(811f6e65) SHA1(71448b91d2c68df119a767fc29692bbf115edb37) )
5300        ROM_LOAD( "mpr-22288.ic11", 0x5800000, 0x800000, CRC(ad1375e8) SHA1(17eeaad1becbf0ad0d68e10457c0d3dac9f168da) )
5301        ROM_LOAD( "mpr-22289.ic12", 0x6000000, 0x800000, CRC(7e7826c0) SHA1(6a13fb7471555732292ee8e4709ee191aee2528c) )
5302        ROM_LOAD( "mpr-22290.ic13", 0x6800000, 0x800000, CRC(38a192da) SHA1(501c25190af153d1364a90762c7994ac797a498d) )
5303        ROM_LOAD( "mpr-22291.ic14", 0x7000000, 0x800000, CRC(79ca1d44) SHA1(449509110a7e181e0e495fe3e1d21762b6e4ce08) )
5304        ROM_LOAD( "mpr-22292.ic15", 0x7800000, 0x800000, CRC(b85e13ef) SHA1(974f6b8f24efe79d72ea9d7a2cfccf479704243d) )
5305        ROM_LOAD( "mpr-22293.ic16", 0x8000000, 0x800000, CRC(b8493dbe) SHA1(b641417e1bda49341e7ff86340072d74e3330665) )
5444   ROM_LOAD( "mpr-22278.ic1",  0x0800000, 0x800000, CRC(0afec6d7) SHA1(fad13f7c205d048006b48c1f262f272a9d653630) )
5445   ROM_LOAD( "mpr-22279.ic2",  0x1000000, 0x800000, CRC(80b4a397) SHA1(c7d41a48c327b8ae9fefb15149ad5341b86ff933) )
5446   ROM_LOAD( "mpr-22280.ic3",  0x1800000, 0x800000, CRC(a58fde28) SHA1(db271690131f093a329a457aa234659cbdba4ad1) )
5447   ROM_LOAD( "mpr-22281.ic4",  0x2000000, 0x800000, CRC(6fcc34f6) SHA1(28f4d69fdd4e151cf1d98303d5f7ac8ff6d4c141) )
5448   ROM_LOAD( "mpr-22282.ic5",  0x2800000, 0x800000, CRC(d5582d3e) SHA1(b21eda63314983fff7b88d2ad6ddcd8a2ef20e32) )
5449   ROM_LOAD( "mpr-22283.ic6",  0x3000000, 0x800000, CRC(24b9fa3b) SHA1(b85be6085c476c8683c6d9e9b72e6021385a376a) )
5450   ROM_LOAD( "mpr-22284.ic7",  0x3800000, 0x800000, CRC(bb80e02a) SHA1(73e7fda34295eb3b67ac04e46206a3a399b7b88a) )
5451   ROM_LOAD( "mpr-22285.ic8",  0x4000000, 0x800000, CRC(59e2e25b) SHA1(e32d59dca85f246781a411bd8d0bec8fabc3b26d) )
5452   ROM_LOAD( "mpr-22286.ic9",  0x4800000, 0x800000, CRC(41eac8af) SHA1(594efd94ea053229f0c807591b4f38643f0995c2) )
5453   ROM_LOAD( "mpr-22287.ic10", 0x5000000, 0x800000, CRC(811f6e65) SHA1(71448b91d2c68df119a767fc29692bbf115edb37) )
5454   ROM_LOAD( "mpr-22288.ic11", 0x5800000, 0x800000, CRC(ad1375e8) SHA1(17eeaad1becbf0ad0d68e10457c0d3dac9f168da) )
5455   ROM_LOAD( "mpr-22289.ic12", 0x6000000, 0x800000, CRC(7e7826c0) SHA1(6a13fb7471555732292ee8e4709ee191aee2528c) )
5456   ROM_LOAD( "mpr-22290.ic13", 0x6800000, 0x800000, CRC(38a192da) SHA1(501c25190af153d1364a90762c7994ac797a498d) )
5457   ROM_LOAD( "mpr-22291.ic14", 0x7000000, 0x800000, CRC(79ca1d44) SHA1(449509110a7e181e0e495fe3e1d21762b6e4ce08) )
5458   ROM_LOAD( "mpr-22292.ic15", 0x7800000, 0x800000, CRC(b85e13ef) SHA1(974f6b8f24efe79d72ea9d7a2cfccf479704243d) )
5459   ROM_LOAD( "mpr-22293.ic16", 0x8000000, 0x800000, CRC(b8493dbe) SHA1(b641417e1bda49341e7ff86340072d74e3330665) )
53065460ROM_END
53075461
53085462ROM_START( ringout )
5309   ROM_REGION( 0x200000, "maincpu", 0)
53105463   NAOMI_BIOS
53115464   NAOMI_DEFAULT_EEPROM
53125465
5313   ROM_REGION( 0x5800000, "user1", ROMREGION_ERASEFF)
5314        ROM_LOAD( "epr-21779.ic22", 0x0000000, 0x400000, CRC(1d419767) SHA1(33065006ef437845abcf32a59e78f4bc202c4460) )
5315        ROM_LOAD( "mpr-21769.ic1",  0x0800000, 0x800000, CRC(493199fc) SHA1(189cd9a20c9207f0238e6d2e867f1479a476dfaa) )
5316        ROM_LOAD( "mpr-21770.ic2",  0x1000000, 0x800000, CRC(68173ace) SHA1(0869072915543dd5dfa6d3cdb95205521b4a3bf4) )
5317        ROM_LOAD( "mpr-21771.ic3",  0x1800000, 0x800000, CRC(41badfc3) SHA1(d4062bdbb994b8c18dac20948db9a9550f030865) )
5318        ROM_LOAD( "mpr-21772.ic4",  0x2000000, 0x800000, CRC(a8dfb537) SHA1(9f6c98ee23842b22fa3b701dad0a384a24a9bc6a) )
5319        ROM_LOAD( "mpr-21773.ic5",  0x2800000, 0x800000, CRC(3f1f5ed4) SHA1(a7d6e65fba9732efbd99e10a609f41dd03fd3bb8) )
5320        ROM_LOAD( "mpr-21774.ic6",  0x3000000, 0x800000, CRC(5a1114f0) SHA1(a45fc82bccb40e582f107b86403409651476180e) )
5321        ROM_LOAD( "mpr-21775.ic7",  0x3800000, 0x800000, CRC(5645a95c) SHA1(f0e97ff5b744972a1fa4e03e6d16a19ba20fb930) )
5322        ROM_LOAD( "mpr-21776.ic8",  0x4000000, 0x800000, CRC(22fc33dc) SHA1(922c41f7fb22b26037446bdfb4f9788a8e0c3e46) )
5323        ROM_LOAD( "mpr-21777.ic9",  0x4800000, 0x800000, CRC(6d22d29d) SHA1(382dcd62065437b34fe101144b1c047eb261f047) )
5324        ROM_LOAD( "mpr-21778.ic10", 0x5000000, 0x800000, CRC(c5308e61) SHA1(e51f8026351d5ffbda2a5bed39aeef543366febf) )
5466   ROM_REGION( 0x5800000, "rom_board", ROMREGION_ERASEFF)
5467   ROM_LOAD( "epr-21779.ic22", 0x0000000, 0x400000, CRC(1d419767) SHA1(33065006ef437845abcf32a59e78f4bc202c4460) )
5468   ROM_LOAD( "mpr-21769.ic1",  0x0800000, 0x800000, CRC(493199fc) SHA1(189cd9a20c9207f0238e6d2e867f1479a476dfaa) )
5469   ROM_LOAD( "mpr-21770.ic2",  0x1000000, 0x800000, CRC(68173ace) SHA1(0869072915543dd5dfa6d3cdb95205521b4a3bf4) )
5470   ROM_LOAD( "mpr-21771.ic3",  0x1800000, 0x800000, CRC(41badfc3) SHA1(d4062bdbb994b8c18dac20948db9a9550f030865) )
5471   ROM_LOAD( "mpr-21772.ic4",  0x2000000, 0x800000, CRC(a8dfb537) SHA1(9f6c98ee23842b22fa3b701dad0a384a24a9bc6a) )
5472   ROM_LOAD( "mpr-21773.ic5",  0x2800000, 0x800000, CRC(3f1f5ed4) SHA1(a7d6e65fba9732efbd99e10a609f41dd03fd3bb8) )
5473   ROM_LOAD( "mpr-21774.ic6",  0x3000000, 0x800000, CRC(5a1114f0) SHA1(a45fc82bccb40e582f107b86403409651476180e) )
5474   ROM_LOAD( "mpr-21775.ic7",  0x3800000, 0x800000, CRC(5645a95c) SHA1(f0e97ff5b744972a1fa4e03e6d16a19ba20fb930) )
5475   ROM_LOAD( "mpr-21776.ic8",  0x4000000, 0x800000, CRC(22fc33dc) SHA1(922c41f7fb22b26037446bdfb4f9788a8e0c3e46) )
5476   ROM_LOAD( "mpr-21777.ic9",  0x4800000, 0x800000, CRC(6d22d29d) SHA1(382dcd62065437b34fe101144b1c047eb261f047) )
5477   ROM_LOAD( "mpr-21778.ic10", 0x5000000, 0x800000, CRC(c5308e61) SHA1(e51f8026351d5ffbda2a5bed39aeef543366febf) )
5478
5479   ROM_REGION( 4, "rom_key", 0 )
5480   ROM_LOAD( "ringout-key.bin", 0, 4, CRC(8f8c4eb2) SHA1(9bc59c69d04d9ce876415af048f39095ed680a5e) )
53255481ROM_END
53265482
53275483ROM_START( vonot )
5328   ROM_REGION( 0x200000, "maincpu", 0)
53295484   NAOMI_BIOS
53305485   NAOMI_DEFAULT_EEPROM
53315486
5332   ROM_REGION( 0x7000000, "user1", ROMREGION_ERASEFF)
5333        ROM_LOAD( "epr-23198.ic22", 0x0000000, 0x400000, CRC(9852eda2) SHA1(71ded8cbdf567afeff30bd593071ce3b7d84a260) )
5334        ROM_LOAD( "mpr-23185.ic1",  0x0800000, 0x800000, CRC(c4fc1d45) SHA1(cfeff71ac1cccf274f00731fe1ffc182fb85f7a6) )
5335        ROM_LOAD( "mpr-23186.ic2",  0x1000000, 0x800000, CRC(b17f9924) SHA1(a9aa9f10b76964042b337b25430acff072aaa7c7) )
5336        ROM_LOAD( "mpr-23187.ic3",  0x1800000, 0x800000, CRC(575f73e8) SHA1(fe6ffeab120ad788bd692b33eca1cf22db881ac3) )
5337        ROM_LOAD( "mpr-23188.ic4",  0x2000000, 0x800000, CRC(0004ef34) SHA1(926de996549421a5835f3c8c0895a07978519215) )
5338        ROM_LOAD( "mpr-23189.ic5",  0x2800000, 0x800000, CRC(554eea29) SHA1(c82c24270dee0dd7309b117e1632827ca314615d) )
5339        ROM_LOAD( "mpr-23190.ic6",  0x3000000, 0x800000, CRC(b74ae1c5) SHA1(003fadbaa03cf43757b686f316d1104d26ae9ce8) )
5340        ROM_LOAD( "mpr-23191.ic7",  0x3800000, 0x800000, CRC(9f2a88af) SHA1(b1caf9cbf026ee6d0f12ab66cddf120e7ba9884c) )
5341        ROM_LOAD( "mpr-23192.ic8",  0x4000000, 0x800000, CRC(83014196) SHA1(cc4801534e0f0e649fc3f368af4bd3ac01288732) )
5342        ROM_LOAD( "mpr-23193.ic9",  0x4800000, 0x800000, CRC(2fde8ecf) SHA1(6da95fb04f141f2c45564460c49834bb945fb1af) )
5343        ROM_LOAD( "mpr-23194.ic10", 0x5000000, 0x800000, CRC(92f045e5) SHA1(70f741e55a47682725c7d6dcdd0e60982187fc87) )
5344        ROM_LOAD( "mpr-23195.ic11", 0x5800000, 0x800000, CRC(9e708834) SHA1(2f454688ea5b8b041bbfffaa12047afad01d020f) )
5345        ROM_LOAD( "mpr-23196.ic12", 0x6000000, 0x800000, CRC(c86a5b9b) SHA1(4b8dda85003289e1464e12c3abf449bb8df20e3a) )
5346        ROM_LOAD( "mpr-23197.ic13", 0x6800000, 0x800000, CRC(5adea0bd) SHA1(f8614ba83d5f61556c3db1a1796a02ed2c51ce2a) )
5487   ROM_REGION( 0x7000000, "rom_board", ROMREGION_ERASEFF)
5488   ROM_LOAD( "epr-23198.ic22", 0x0000000, 0x400000, CRC(9852eda2) SHA1(71ded8cbdf567afeff30bd593071ce3b7d84a260) )
5489   ROM_LOAD( "mpr-23185.ic1",  0x0800000, 0x800000, CRC(c4fc1d45) SHA1(cfeff71ac1cccf274f00731fe1ffc182fb85f7a6) )
5490   ROM_LOAD( "mpr-23186.ic2",  0x1000000, 0x800000, CRC(b17f9924) SHA1(a9aa9f10b76964042b337b25430acff072aaa7c7) )
5491   ROM_LOAD( "mpr-23187.ic3",  0x1800000, 0x800000, CRC(575f73e8) SHA1(fe6ffeab120ad788bd692b33eca1cf22db881ac3) )
5492   ROM_LOAD( "mpr-23188.ic4",  0x2000000, 0x800000, CRC(0004ef34) SHA1(926de996549421a5835f3c8c0895a07978519215) )
5493   ROM_LOAD( "mpr-23189.ic5",  0x2800000, 0x800000, CRC(554eea29) SHA1(c82c24270dee0dd7309b117e1632827ca314615d) )
5494   ROM_LOAD( "mpr-23190.ic6",  0x3000000, 0x800000, CRC(b74ae1c5) SHA1(003fadbaa03cf43757b686f316d1104d26ae9ce8) )
5495   ROM_LOAD( "mpr-23191.ic7",  0x3800000, 0x800000, CRC(9f2a88af) SHA1(b1caf9cbf026ee6d0f12ab66cddf120e7ba9884c) )
5496   ROM_LOAD( "mpr-23192.ic8",  0x4000000, 0x800000, CRC(83014196) SHA1(cc4801534e0f0e649fc3f368af4bd3ac01288732) )
5497   ROM_LOAD( "mpr-23193.ic9",  0x4800000, 0x800000, CRC(2fde8ecf) SHA1(6da95fb04f141f2c45564460c49834bb945fb1af) )
5498   ROM_LOAD( "mpr-23194.ic10", 0x5000000, 0x800000, CRC(92f045e5) SHA1(70f741e55a47682725c7d6dcdd0e60982187fc87) )
5499   ROM_LOAD( "mpr-23195.ic11", 0x5800000, 0x800000, CRC(9e708834) SHA1(2f454688ea5b8b041bbfffaa12047afad01d020f) )
5500   ROM_LOAD( "mpr-23196.ic12", 0x6000000, 0x800000, CRC(c86a5b9b) SHA1(4b8dda85003289e1464e12c3abf449bb8df20e3a) )
5501   ROM_LOAD( "mpr-23197.ic13", 0x6800000, 0x800000, CRC(5adea0bd) SHA1(f8614ba83d5f61556c3db1a1796a02ed2c51ce2a) )
5502
5503   ROM_REGION( 4, "rom_key", 0 )
5504   ROM_LOAD( "vonot-key.bin", 0, 4, CRC(021ac707) SHA1(af57844331226d3b1722aedca1a7aef024468b39) )
53475505ROM_END
53485506
53495507ROM_START( derbyo2k )
5350   ROM_REGION( 0x200000, "maincpu", 0)
53515508   NAOMI_BIOS
53525509   NAOMI_DEFAULT_EEPROM
53535510
5354   ROM_REGION( 0x8800000, "user1", ROMREGION_ERASEFF)
5355        ROM_LOAD( "epr-22284a.ic22", 0x0000000, 0x400000, CRC(1e8e067c) SHA1(c33d5f7b175828511f69a6489b4558aef1ac2517) )
5356        ROM_LOAD( "mpr-22223.ic1",   0x0800000, 0x800000, CRC(5159df22) SHA1(612c2d43f02952c7987cb08051933e406e601474) )
5357        ROM_LOAD( "mpr-22224.ic2",   0x1000000, 0x800000, CRC(ef8bc5a0) SHA1(ecb858788d9bb84cf25aaeef8d0bee3b7ae0233e) )
5358        ROM_LOAD( "mpr-22225.ic3",   0x1800000, 0x800000, CRC(80e0fdbd) SHA1(b111d469b8f3a7e68960cc7731ecfca4d24f4f32) )
5359        ROM_LOAD( "mpr-22226.ic4",   0x2000000, 0x800000, CRC(ea940bcf) SHA1(7dfa7f9101b8cd836920c7ebef095d1ec40c0bd3) )
5360        ROM_LOAD( "mpr-22227.ic5",   0x2800000, 0x800000, CRC(300ed93b) SHA1(a81e0ccef6d32a959beacf66f60a9cbda128c493) )
5361        ROM_LOAD( "mpr-22228.ic6",   0x3000000, 0x800000, CRC(3dd062c7) SHA1(5515c636d47b128479d7de7659fe2a2adae51fe4) )
5362        ROM_LOAD( "mpr-22229.ic7",   0x3800000, 0x800000, CRC(da624f37) SHA1(8b9bb8e572f969019aaa8100fd3549fb7f902f42) )
5363        ROM_LOAD( "mpr-22230.ic8",   0x4000000, 0x800000, CRC(5a806bb6) SHA1(0d9366d215f23e3f54b26eda960a7033f3ac033c) )
5364        ROM_LOAD( "mpr-22231.ic9",   0x4800000, 0x800000, CRC(c633d57d) SHA1(737b55f5a9d0b34dec1e4b2bef7bd14e9a9e1bed) )
5365        ROM_LOAD( "mpr-22232.ic10",  0x5000000, 0x800000, CRC(6f25a6dd) SHA1(d4f354f3143b9484b493cdd87c25b94bd6e7c09a) )
5366      ROM_LOAD( "mpr-22233.ic11",  0x5800000, 0x800000, CRC(cf3ac2df) SHA1(4d6dfa030ef8ec6343153afd4bdca51a51065bb4) )
5367        ROM_LOAD( "mpr-22234.ic12s", 0x6000000, 0x800000, CRC(d8c41648) SHA1(d465f4b841164da0738336e203c5bc6e1e799a76) )
5368        ROM_LOAD( "mpr-22235.ic13s", 0x6800000, 0x800000, CRC(f1dedac5) SHA1(9d4499cbafe80dd0b36be617de7994a96e1e9a01) )
5369        ROM_LOAD( "mpr-22236.ic14s", 0x7000000, 0x800000, CRC(85f54964) SHA1(4592232694de75e245d1c67f506c9b9d7b0af53a) )
5370        ROM_LOAD( "mpr-22237.ic15s", 0x7800000, 0x800000, CRC(718dd6bf) SHA1(6b71bb6970b582865f53d26e9579587fce86439e) )
5371        ROM_LOAD( "mpr-22238.ic16s", 0x8000000, 0x800000, CRC(fb3e55da) SHA1(d547ee5b47e6e6fec9e447460300c828fbff8f2e) )
5511   ROM_REGION( 0x8800000, "rom_board", ROMREGION_ERASEFF)
5512   ROM_LOAD( "epr-22284a.ic22", 0x0000000, 0x400000, CRC(1e8e067c) SHA1(c33d5f7b175828511f69a6489b4558aef1ac2517) )
5513   ROM_LOAD( "mpr-22223.ic1",   0x0800000, 0x800000, CRC(5159df22) SHA1(612c2d43f02952c7987cb08051933e406e601474) )
5514   ROM_LOAD( "mpr-22224.ic2",   0x1000000, 0x800000, CRC(ef8bc5a0) SHA1(ecb858788d9bb84cf25aaeef8d0bee3b7ae0233e) )
5515   ROM_LOAD( "mpr-22225.ic3",   0x1800000, 0x800000, CRC(80e0fdbd) SHA1(b111d469b8f3a7e68960cc7731ecfca4d24f4f32) )
5516   ROM_LOAD( "mpr-22226.ic4",   0x2000000, 0x800000, CRC(ea940bcf) SHA1(7dfa7f9101b8cd836920c7ebef095d1ec40c0bd3) )
5517   ROM_LOAD( "mpr-22227.ic5",   0x2800000, 0x800000, CRC(300ed93b) SHA1(a81e0ccef6d32a959beacf66f60a9cbda128c493) )
5518   ROM_LOAD( "mpr-22228.ic6",   0x3000000, 0x800000, CRC(3dd062c7) SHA1(5515c636d47b128479d7de7659fe2a2adae51fe4) )
5519   ROM_LOAD( "mpr-22229.ic7",   0x3800000, 0x800000, CRC(da624f37) SHA1(8b9bb8e572f969019aaa8100fd3549fb7f902f42) )
5520   ROM_LOAD( "mpr-22230.ic8",   0x4000000, 0x800000, CRC(5a806bb6) SHA1(0d9366d215f23e3f54b26eda960a7033f3ac033c) )
5521   ROM_LOAD( "mpr-22231.ic9",   0x4800000, 0x800000, CRC(c633d57d) SHA1(737b55f5a9d0b34dec1e4b2bef7bd14e9a9e1bed) )
5522   ROM_LOAD( "mpr-22232.ic10",  0x5000000, 0x800000, CRC(6f25a6dd) SHA1(d4f354f3143b9484b493cdd87c25b94bd6e7c09a) )
5523   ROM_LOAD( "mpr-22233.ic11",  0x5800000, 0x800000, CRC(cf3ac2df) SHA1(4d6dfa030ef8ec6343153afd4bdca51a51065bb4) )
5524   ROM_LOAD( "mpr-22234.ic12s", 0x6000000, 0x800000, CRC(d8c41648) SHA1(d465f4b841164da0738336e203c5bc6e1e799a76) )
5525   ROM_LOAD( "mpr-22235.ic13s", 0x6800000, 0x800000, CRC(f1dedac5) SHA1(9d4499cbafe80dd0b36be617de7994a96e1e9a01) )
5526   ROM_LOAD( "mpr-22236.ic14s", 0x7000000, 0x800000, CRC(85f54964) SHA1(4592232694de75e245d1c67f506c9b9d7b0af53a) )
5527   ROM_LOAD( "mpr-22237.ic15s", 0x7800000, 0x800000, CRC(718dd6bf) SHA1(6b71bb6970b582865f53d26e9579587fce86439e) )
5528   ROM_LOAD( "mpr-22238.ic16s", 0x8000000, 0x800000, CRC(fb3e55da) SHA1(d547ee5b47e6e6fec9e447460300c828fbff8f2e) )
53725529ROM_END
53735530
53745531
r12704r12705
55025659   DISK_REGION( "gdrom" )
55035660   DISK_IMAGE_READONLY( "gdl-0001", 0, SHA1(615e19c22f32096f3aad557019a14313b60a4070) )
55045661
5505   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5506   //ROM_LOAD("317-5069-com.data", 0x00, 0x50, CRC(8e2f0cbd) SHA1(a5f3a990a03bfa50a1a742593c5ec07645c8718d) )
5507
55085662   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
55095663   //PIC16C622A (317-5069-COM)
55105664   //(sticker 253-5509-5069)
r12704r12705
55235677   DISK_REGION( "gdrom" )
55245678   DISK_IMAGE_READONLY( "gdl-0002", 0, SHA1(af4669fdd7ce8e6ec4a170748d401e322a3d7ae8) )
55255679
5526   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5527   //ROM_LOAD("317-5072-com.data", 0x00, 0x50, CRC(6d2992b9) SHA1(88e6dc6711f9f883362ba1217a3350d452a70896) )
5528
55295680   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
55305681   //PIC16C622A (317-5072-COM)
55315682   //(sticker 253-5509-5072)
r12704r12705
55405691   DISK_REGION( "gdrom" )
55415692   DISK_IMAGE_READONLY( "gdl-0004", 0,  SHA1(7a7fba0fbbc769c5120b08e6d692f1ac63a42225) )
55425693
5543   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5544   //ROM_LOAD("317-5076-jpn.data", 0x00, 0x50, CRC(5004161b) SHA1(8b2cdfec12ffd9160bc74659e08d07cbc46a4011) )
5545
55465694   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
55475695   //PIC16C622A (317-5076-JPN)
55485696   //(sticker 253-5509-5076J)
r12704r12705
55575705   DISK_REGION( "gdrom" )
55585706   DISK_IMAGE_READONLY( "gdl-0005", 0, SHA1(f5513c88528741798ee49f936b9b69480360f103) )
55595707
5560   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5561
55625708   /*
55635709    Note:
55645710    There was no sticker or silk screen markings on this PIC.
r12704r12705
55825728   DISK_REGION( "gdrom" )
55835729   DISK_IMAGE_READONLY( "gdl-0006", 0, SHA1(b28d6598711b5a9c744bbf07ad03fc60962d2e28) )
55845730
5585   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5586   //ROM_LOAD("317-5079-com.data", 0x00, 0x50, CRC(e6abe978) SHA1(700e610d84e517793a22d6cabd1aef9c3b8bc092) )
5587
55885731   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
55895732   //PIC16C622A (317-5079-COM)
55905733   //(sticker 253-5509-5079)
r12704r12705
55995742   DISK_REGION( "gdrom" )
56005743   DISK_IMAGE_READONLY( "gdl-0007a", 0, SHA1(56510390667b39b3915d8bc078660cbe093cf566) )
56015744
5602   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5603   //ROM_LOAD("317-5078-com.data", 0x00, 0x50, CRC(1c8d94ee) SHA1(bec4a6901f62dc8f76f7b9d72284b3eaac340bf3) )
5604
56055745   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
56065746   //PIC16C622A (317-5078-COM)
56075747   //(sticker 253-5509-5078)
r12704r12705
56165756   DISK_REGION( "gdrom" )
56175757   DISK_IMAGE_READONLY( "gdl-0010", 0, SHA1(65dcc22dd9e9b70975096464ad8e31a4a73dc5fd) )
56185758
5619   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5620   //ROM_LOAD("317-5081-jpn.data", 0x00, 0x50, CRC(d4cc5c8c) SHA1(44c0c5c2744fbd419b684cbc36f01973487bafbc) )
5621
56225759   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
56235760   //PIC16C622A (317-5081-JPN)
56245761   //(sticker 253-5509-5081J)
r12704r12705
56335770   DISK_REGION( "gdrom" )
56345771   DISK_IMAGE_READONLY( "gdl-0011", 0, SHA1(b7328eb2c588d55284bdcea0fe89bb8e629a8669) )
56355772
5636   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5637//  ROM_LOAD("317-5082-com.data", 0x00, 0x50, CRC(fa31209d) SHA1(bb18e6412a02510832f7200a06a3179ef1695ef2) )
5638//  ROM_REGION( 0x9a49, "pichex", ROMREGION_ERASE)
5639//  ROM_LOAD("gdl-0011.hex", 0x00, 0x0009a49, CRC(36361df8) SHA1(86aa50c9b3debd49c7b67f1c9bfd052c0fefc593) ) // actual decap results for ggxx in ascii/hex form
5640
56415773   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
56425774   //PIC16C622A (317-5082-COM)
56435775   //(sticker 253-5509-5082)
r12704r12705
56525784   DISK_REGION( "gdrom" )
56535785   DISK_IMAGE_READONLY( "gdl-0012", 0, SHA1(aae4c1321fdee37d5405c6cbe648e0596624ed13) )
56545786
5655   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5656
56575787   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
56585788   //PIC16C622A (317-5083-COM)
56595789   //(sticker 253-5509-5083)
r12704r12705
56715801   DISK_REGION( "gdrom" )
56725802   DISK_IMAGE_READONLY( "gdl-0013", 0, SHA1(c8869069c28bc8eec96d820886bc388d69d46143) )
56735803
5674   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5675   //ROM_LOAD("317-5084-jpn.data", 0x00, 0x50, CRC(56de2066) SHA1(a16a6d9f7272d3f8d322c85222a0487a87811910) )
5676
56775804   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
56785805   //PIC16C622A (317-5084-JPN)
56795806   //(sticker 253-5509-5084J)
r12704r12705
56885815   DISK_REGION( "gdrom" )
56895816   DISK_IMAGE_READONLY( "gdl-0014a", 0, SHA1(f88d8203c8692f51c9492d5549a3ad7d9583dc6f) )
56905817
5691   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5692   //ROM_LOAD("317-5085-jpn.data", 0x00, 0x50, CRC(eecd8140) SHA1(471fb6b242eff646173265df891109e3e0a37a7d) )
5693
56945818   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
56955819   //PIC16C622A (317-5085-JPN)
56965820   //(sticker 253-5509-5085J)
r12704r12705
57085832   DISK_REGION( "gdrom" )
57095833   DISK_IMAGE_READONLY( "gdl-0017", 0, SHA1(94a9319633388968611892e36691b45c94b4f83f) )
57105834
5711   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5712   //ROM_LOAD("317-5090-jpn.data", 0x00, 0x50, CRC(b4dd88f6) SHA1(c9aacd79c1088225fa5a69b7bd31a7c1286160e1) )
5713
57145835   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
57155836   //PIC16C622A (317-5090-JPN)
57165837   //(sticker 253-5509-5090J)
r12704r12705
57375858   DISK_REGION( "gdrom" )
57385859   DISK_IMAGE_READONLY( "gdl-0019a", 0, SHA1(d44906505ff698eda6feee6c2b9402e19f64e5d3) )
57395860
5740   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5741   //ROM_LOAD("317-5092-jpn.data", 0x00, 0x50, CRC(7c8cca4b) SHA1(92c5a0fd8916744eefc023e64daea69803573928) )
5742
57435861   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
57445862   //PIC16C622A (317-5092-JPN)
57455863   //(sticker 253-5509-5092J)
r12704r12705
57575875   DISK_REGION( "gdrom" )
57585876   DISK_IMAGE_READONLY( "gdl-0020", 0, SHA1(7b2ef47ca2038d6a93615b760b03e8f7cb1b83c2) )
57595877
5760   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5761   //ROM_LOAD("317-5093-jpn.data", 0x00, 0x50, CRC(06bc5013) SHA1(f7a46b7e34b20409ce2fdae80e5cdfff7adb9c64) )
5762
57635878   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
57645879   //PIC16C622A (317-5093-JPN)
57655880   //(sticker 253-5509-5093J)
r12704r12705
57775892   DISK_REGION( "gdrom" )
57785893   DISK_IMAGE_READONLY( "gdl-0021", 0, SHA1(f5036711a28a211e8d71400a8322db3172c5733f) )
57795894
5780   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5781   //ROM_LOAD("317-5095-jpn.data", 0x00, 0x50, CRC(6033ec89) SHA1(9e99a8ad43fa29296dbf2e13b3a3d4552130b4e8) )
5782
57835895   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
57845896   //PIC16C622A (317-5095-JPN)
57855897   //(sticker 253-5509-5095J)
r12704r12705
57975909   DISK_REGION( "gdrom" )
57985910   DISK_IMAGE_READONLY( "gdl-0022", 0, SHA1(45deba05a12abbf6390c0fc0e4cdeaedfa7d2ca5) )
57995911
5800   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5801   //ROM_LOAD("317-5096-jpn.data", 0x00, 0x50, CRC(621e827a) SHA1(cdc7580f5d1dfe85d2806233f22bc4f13fd62946) )
5802
58035912   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
58045913   //PIC16C622A (317-5096-JPN)
58055914   //(sticker 253-5509-5096J)
r12704r12705
58175926   DISK_REGION( "gdrom" )
58185927   DISK_IMAGE_READONLY( "gdl-0023a", 0, SHA1(caac915104d61f2122f5afe27da1ef5fa9cf9f9a) )
58195928
5820   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5821   //ROM_LOAD("317-5097-jpn.data", 0x00, 0x50, CRC(e689d047) SHA1(7e3e298d9a8076af0254faeb0eb89fbfce94718d) )
5822
58235929   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
58245930   //PIC16C622A (317-5097-JPN)
58255931   //(sticker 253-5509-5097J)
r12704r12705
58385944   DISK_REGION( "gdrom" )
58395945   DISK_IMAGE_READONLY( "gdl-0024", 0,  SHA1(d346762036fb1c40a261a434b50e63459f306f14) )
58405946
5841   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5842   //ROM_LOAD("317-5100-jpn.data", 0x00, 0x50, CRC(94316f0f) SHA1(e1ec2b4225105dbaa1e59e8a05027e73f7b725a9) )
5843
58445947   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
58455948   //PIC16C621A (317-5100-JPN)
58465949   //(sticker 253-5509-5100J)
r12704r12705
58585961   DISK_REGION( "gdrom" )
58595962   DISK_IMAGE_READONLY( "gdl-0025", 0, SHA1(be0d88eb4f48403a2ceaa7ef588ed60b96ba93bf) )
58605963
5861   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5862   //ROM_LOAD("317-5102-com.data", 0x00, 0x50, CRC(32adf2eb) SHA1(d86752e6fe9ccac093c512828fca5b7ae62a3ff2) )
5863
58645964   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
58655965   //PIC16C621A (317-5102-COM)
58665966   //(sticker 253-5509-5102)
r12704r12705
58785978   DISK_REGION( "gdrom" )
58795979   DISK_IMAGE_READONLY( "gdl-0026", 0, SHA1(e4c1e51292a7923b25bfc61d38fe386bf596002a) )
58805980
5881   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5882   //ROM_LOAD("317-5103-jpn.data", 0x00, 0x50,  CRC(3affbf82) SHA1(268746e86e7546f4bab54bdd268f7b58f10c1aaf) )
5883
58845981   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
58855982   //PIC16C621A (317-5103-JPN)
58865983   //(sticker 253-5509-5103J)
r12704r12705
58955992   DISK_REGION( "gdrom" )
58965993   DISK_IMAGE_READONLY( "gdl-0028c", 0, SHA1(66de09738551e351784cc9695a58b35fdf6b6c4b) )
58975994
5898   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5899   //ROM_LOAD("317-5104-jpn.data", 0x00, 0x50, CRC(fedc8305) SHA1(c535545937213f726f25e6aa8eb3746a794e9100) )
5900
59015995   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
59025996   //PIC16C622A (317-5104-JPN)
59035997   //(sticker 253-5509-5104J)
r12704r12705
59156009   DISK_REGION( "gdrom" )
59166010   DISK_IMAGE_READONLY( "gdl-0030a", 0,  SHA1(1f7ade47e37a0026451b5baf3ba746400de8d156) )
59176011
5918   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5919   //ROM_LOAD("317-5107-jpn.data", 0x00, 0x50, CRC(7b607409) SHA1(a9946a0637453e4813bef18060d4420355cff800) )
5920
59216012   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
59226013   //PIC16C622A (317-5107-JPN)
59236014   //(sticker 253-5509-5107J)
r12704r12705
59346025   DISK_REGION( "gdrom" )
59356026   DISK_IMAGE_READONLY( "gdl-0030", 0,  SHA1(c7f25c05f47a490c5da9369c588b6136e93c280e) )
59366027
5937   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5938   //ROM_LOAD("317-5107-jpn.data", 0x00, 0x50, CRC(7b607409) SHA1(a9946a0637453e4813bef18060d4420355cff800) )
5939
59406028   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
59416029   //PIC16C622A (317-5107-JPN)
59426030   //(sticker 253-5509-5107J)
r12704r12705
59546042   DISK_REGION( "gdrom" )
59556043   DISK_IMAGE_READONLY( "gdl-0031", 0, SHA1(83697f45f0ffbb964f0504b19171c554499cd709) )
59566044
5957   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5958   //ROM_LOAD("317-5108-jpn.data", 0x00, 0x50, CRC(6a2eb334) SHA1(cab407d2e994f33aa921d50f399b17e6fbf98eb0) )
5959
59606045   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
59616046   //PIC16C622A (317-5108-JPN)
59626047   //(sticker 253-5509-5108J)
r12704r12705
59716056   DISK_REGION( "gdrom" )
59726057   DISK_IMAGE_READONLY( "gdl-0031a", 0, SHA1(6091525845fc2042ed43cae5a1b60c603e16cf97) )
59736058
5974   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5975   //ROM_LOAD("317-5108-jpn.data", 0x00, 0x50, CRC(6a2eb334) SHA1(cab407d2e994f33aa921d50f399b17e6fbf98eb0) )
5976
59776059   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
59786060   //PIC16C622A (317-5108-JPN)
59796061   //(sticker 253-5509-5108J)
r12704r12705
59916073   DISK_REGION( "gdrom" )
59926074   DISK_IMAGE_READONLY( "gdl-0032", 0, SHA1(ebd7a40e59082e660ebf9a2d4ae7cb64371dae8d) )
59936075
5994   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
5995   //ROM_LOAD("317-5110-jpn.data", 0x00, 0x50, CRC(04e4ac45) SHA1(4102a4d68f20a7e78f6c7e3494e7229018e30e39) )
5996
59976076   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
59986077   //PIC16C621A (317-5110-JPN)
59996078   //(sticker 253-5509-5110J)
r12704r12705
60086087   DISK_REGION( "gdrom" )
60096088   DISK_IMAGE_READONLY( "gdl-0033a", 0, SHA1(29de69ae97a9099b1bbe936dfa965bb4a3195f68) )
60106089
6011   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6012   //ROM_LOAD("317-5111-jpn.data", 0x00, 0x50, CRC(a517c70d) SHA1(5f9798941355fb9abce511508c860653d6369e72) )
6013
6014
60156090   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
60166091   //PIC16C621A (317-5111-JPN)
60176092   //(sticker 253-5509-5111J)
r12704r12705
60266101   DISK_REGION( "gdrom" )
60276102   DISK_IMAGE_READONLY( "gdl-0034", 0, SHA1(10fd7edb0b620133c003d686e5af2ed27004fa09) )
60286103
6029   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6030   //ROM_LOAD("317-5115-jpn.data", 0x00, 0x50,  CRC(f40072a8) SHA1(366df2079a4d2ff7a93082c9bf849aad40ab079d) )
6031
60326104   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
60336105   //PIC16C621A (317-5115-JPN)
60346106   //(sticker 253-5509-5115J)
r12704r12705
60466118   DISK_REGION( "gdrom" )
60476119   DISK_IMAGE_READONLY( "gdl-0035", 0, SHA1(91da482a6a082e48bee5b3bd20d9c92d23936965) )
60486120
6049   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6050   //ROM_LOAD("317-5117-jpn.data", 0x00, 0x50,  CRC(f90f6d3b) SHA1(a18f803a8e951c375a3a55e4b0e74b698ae93f92) )
6051
60526121   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
60536122   //PIC16C622A (317-5117-JPN)
60546123   //(sticker 253-5509-5117J)
r12704r12705
60666135   DISK_REGION( "gdrom" )
60676136   DISK_IMAGE_READONLY( "gdl-0036a", 0, SHA1(91f1e19136997cb1e2edfb1ad342b9427d1d3bfb) )
60686137
6069   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6070   //ROM_LOAD("317-5121-jpn.data", 0x00, 0x50, CRC(a417b20f) SHA1(af6ed7ebf95948bff3e8df915b229189b8de1e46) )
6071
60726138   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
60736139   //PIC16C622A (317-5121-JPN)
60746140   //(sticker 253-5509-5121J)
r12704r12705
60836149   DISK_REGION( "gdrom" )
60846150   DISK_IMAGE_READONLY( "gdl-0037", 0, SHA1(99ffe2987e3002b3871daf276d2be45f2e9c6e74) )
60856151
6086   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6087   //ROM_LOAD("317-5122-jpn.data", 0x00, 0x50, CRC(0b85b7e4) SHA1(f4e419682ddc4b98a330e5ae543f9276c9bde030) )
6088
60896152   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
60906153   //PIC16C622A (317-5122-JPN)
60916154   //(sticker 253-5509-5122J)
r12704r12705
61006163   DISK_REGION( "gdrom" )
61016164   DISK_IMAGE_READONLY( "gdl-0038", 0, SHA1(430572f7e76c4fe009e2de91bf891d85613366b7) )
61026165
6103   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6104
61056166   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
61066167   //PIC16C622A (317-5123-COM)
61076168   //(sticker 253-5509-5123)
r12704r12705
61166177   DISK_REGION( "gdrom" )
61176178   DISK_IMAGE_READONLY( "gdl-0039", 0, SHA1(ffc7f6e113ad69422a4f22f318bdf9b1dc5c25db) )
61186179
6119   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6120   //ROM_LOAD("317-5124-jpn.data", 0x00, 0x50, CRC(4d6e2c77) SHA1(3bed734c291140d0a61afa40f221395369a251a9) )
6121
61226180   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
61236181   //PIC16C622A (317-5124-JPN)
61246182   //(sticker 253-5509-5124J)
r12704r12705
61326190   DISK_REGION( "gdrom" )
61336191   DISK_IMAGE_READONLY( "gdl-0039a", 0, SHA1(e6aa3d65b43a20606e6754bcb8665438770a1f8c) )
61346192
6135   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6136   //ROM_LOAD("317-5124-jpn.data", 0x00, 0x50, CRC(4d6e2c77) SHA1(3bed734c291140d0a61afa40f221395369a251a9) )
6137
61386193   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
61396194   //PIC16C622A (317-5124-JPN)
61406195   //(sticker 253-5509-5124J)
r12704r12705
61526207   DISK_REGION( "gdrom" )
61536208   DISK_IMAGE_READONLY( "gdl-0040", 0, SHA1(a62c8d4b6c5be44a4aeeea1a1a94f3d0fe542593) )
61546209
6155   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6156   //ROM_LOAD("317-5125-com.data", 0x00, 0x50, CRC(9d37b5e3) SHA1(e1d3cdc2ed82c864c9ff54d9399a80b70ba150c5) )
6157
61586210   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
61596211   //PIC16C621A (317-5125-COM)
61606212   //(sticker 253-5509-5125)
r12704r12705
61906242   DISK_REGION( "gdrom" )
61916243   DISK_IMAGE_READONLY( "gdl-0041", 0, SHA1(3a589e1c79ead971c821a7566032b0187e339684) )
61926244
6193   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6194
61956245   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
61966246   //PIC16C621A (317-5126-JPN)
61976247   //(sticker 253-5509-5126J)
r12704r12705
62066256   DISK_REGION( "gdrom" )
62076257   DISK_IMAGE_READONLY( "gdl-0042", 0, SHA1(984a4fa012d83dd8c748304958c847c9867f4125) )
62086258
6209   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6210   //ROM_LOAD("317-5127-jpn.data", 0x00, 0x50, CRC(e1a6dbe4) SHA1(61b458937acca55e4010f86b684aaa86b8c10eac) )
6211
62126259   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
62136260   //PIC16C621A (317-5127-JPN)
62146261   //(sticker 253-5509-5127J)
r12704r12705
62466293   DISK_REGION( "gdrom" )
62476294   DISK_IMAGE_READONLY( "gds-0001", 0, SHA1(bd05f197ba8643577883dd25d9d5a74c91b27ca9) )
62486295
6249   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6250   //ROM_LOAD("317-0298-com.data", 0x00, 0x50, CRC(c989b336) SHA1(40075500888626cc2261133eec496b3e753631e5) )
6251
62526296   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
62536297   ROM_LOAD("317-0298-com.pic", 0x00, 0x4000, CRC(15971bf6) SHA1(815152ab05edb1789a26898cfd66b5a7c4a1f765) )
62546298ROM_END
r12704r12705
62786322   DISK_REGION( "gdrom" )
62796323   DISK_IMAGE_READONLY( "gds-0016", 0, SHA1(59bac62db4a536c63fec3464c665e00633fcf1a3) )
62806324
6281   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6282
62836325   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
62846326   ROM_LOAD( "317-0321-com.pic", 0x000000, 0x004000, CRC(81519e71) SHA1(a30d25f81c77384ed26faa67c942802f2f3d7817) )
62856327ROM_END
r12704r12705
62916333   DISK_REGION( "gdrom" )
62926334   DISK_IMAGE_READONLY( "gds-0003", 0, SHA1(caaba214c1faca78b3370bcd4190eb2853d7f825) )
62936335
6294   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
62956336   //PIC16C622A (317-0300-COM)
62966337   //(sticker 253-5508-0300)
62976338   //ROM_LOAD("317-0300-com.data", 0x00, 0x50, CRC(9a08413f) SHA1(d57649dcc3af578d55a93dd7a3f41da62d580f54) )
r12704r12705
63086349   DISK_REGION( "gdrom" )
63096350   DISK_IMAGE_READONLY( "gds-0004", 0, SHA1(3cce788393ed194ba9b603f9896ff893691d6b00) )
63106351
6311   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6312   //ROM_LOAD("317-0302-com.data", 0x00, 0x50, CRC(4bf6cd62) SHA1(c1fdf12a4d80fa3008170c89d2dc583f19e0450b) )
6313
63146352   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
63156353   //PIC16C622A (317-0302-COM)
63166354   //(sticker 253-5508-0302)
r12704r12705
63256363   DISK_REGION( "gdrom" )
63266364   DISK_IMAGE_READONLY( "gds-0005", 0, SHA1(d1c3fb2350e4a89372373e7f629c42b741af29b3) )
63276365
6328   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6329   //ROM_LOAD("317-0303-com.data", 0x00, 0x50, CRC(6e7888a3) SHA1(5ca78052bcfd9e9f81934cbddd9c173e88973e0e) )
6330
63316366   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
63326367   //PIC16C622A (317-0303-COM)
63336368   //(sticker 253-5508-0303)
r12704r12705
63636398   DISK_REGION( "gdrom" )
63646399   DISK_IMAGE_READONLY( "gds-0008", 0, SHA1(2fadcd141bdbde77b2b335b270959a516af44d99) )
63656400
6366   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6367   //ROM_LOAD("317-0307-com.data", 0x00, 0x50, CRC(448bedc7) SHA1(092dbe5e28890d3ee40d62ca8cbf225c3ce90304) )
6368
63696401   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
63706402   ROM_LOAD("317-0307-com.pic", 0x00, 0x4000, CRC(4046de19) SHA1(8adda9f223e926148b36744bbbaa89557544a229) )
63716403ROM_END
r12704r12705
64096441   DISK_REGION( "gdrom" )
64106442   DISK_IMAGE_READONLY( "gds-0009a", 0, SHA1(d502155ddaf881c2c9505528004b9904aa32a59c) )
64116443
6412   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6413   //ROM_LOAD("317-0308-com.data", 0x00, 0x50,  CRC(56f63af0) SHA1(3c453226fc53d2f700b3634db3ef8ce206d94392) )
6414
64156444   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
64166445   //PIC16C622A (317-0308-COM)
64176446   //(sticker 253-5508-0308)
r12704r12705
64266455   DISK_REGION( "gdrom" )
64276456   DISK_IMAGE_READONLY( "gds-0010", 0,  SHA1(c3135ede3a8bdadab91aed49abacbfbde8037069) )
64286457
6429   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6430   //ROM_LOAD("317-0309-com.data", 0x00, 0x50, CRC(8792c550) SHA1(e8d6d91583d1673d8d3fa9ccb0ab1097c5c5ad08) )
6431
64326458   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
64336459   //PIC16C622A (317-0309-COM)
64346460   //(sticker 253-5508-0309)
r12704r12705
64436469   DISK_REGION( "gdrom" )
64446470   DISK_IMAGE_READONLY( "gds-0011", 0,  SHA1(b778403d73c8cdd13383691c9be2094ddfc1ba84) )
64456471
6446   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6447   //ROM_LOAD("317-0312-com.data", 0x00, 0x50, CRC(6b24f78f) SHA1(43f89815ec46cf014d941b4b9238da044b338b4c) )
6448
64496472   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
64506473   //PIC16C621A (317-0312-COM)
64516474   //(sticker 253-5508-0312)
r12704r12705
64626485   DISK_REGION( "gdrom" )
64636486   DISK_IMAGE_READONLY( "gds-0017", 0, SHA1(fb86eff3ef38de7fd78cfde897d5332d2092c172) )
64646487
6465   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6466   //ROM_LOAD("317-0323-com.data", 0x00, 0x50, CRC(c1277eb3) SHA1(529ed5a133550e2854f8656cd377706060a7befa) )
6467
64686488   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
64696489   ROM_LOAD("317-0323-com.pic", 0x00, 0x4000, CRC(c8854ef2) SHA1(b43b956df142fe4167dcc2ec805921e25bba180f) )
64706490
r12704r12705
64786498   DISK_REGION( "gdrom" )
64796499   DISK_IMAGE_READONLY( "gds-0019", 0, SHA1(955d3c0cb991be3057138c562cff69c5ef887787) )
64806500
6481   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6482   //ROM_LOAD("317-0330-com.data", 0x00, 0x50, CRC(f5e7f7d4) SHA1(3903337e82011d132993e4366475586866bd39b1) )
6483
64846501   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
64856502   //PIC16C622A (317-0330-COM)
64866503   //(sticker 253-5508-0330)
r12704r12705
65186535   DISK_REGION( "gdrom" )
65196536   DISK_IMAGE_READONLY( "gds-0015a", 0, SHA1(c6e9c9901bd4f075454b7f18baf08df81bc2f1ad) )
65206537
6521   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6522   //ROM_LOAD("317-0318-exp.data", 0x00, 0x50, CRC(7758ade6) SHA1(c62f35810bce466bfb0f55fd555066efd53e9bb6) )
6523
65246538   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
65256539   ROM_LOAD("317-0318-exp.pic", 0x00, 0x4000, CRC(83de4047) SHA1(1808ac0d8353b92296de37f98b490a42a0e141cf) )
65266540
r12704r12705
65346548   DISK_REGION( "gdrom" )
65356549   DISK_IMAGE_READONLY( "gds-0018", 0, SHA1(0633a99a666f363ab30450a76b9753685d6b1f57) )
65366550
6537   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6538   //ROM_LOAD("317-0332-j.data", 0x00, 0x50, CRC(31f2b632) SHA1(bbf253bfe831308a7e7fde3a4a28e5bcd2fbb273) )
6539
65406551   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
65416552   ROM_LOAD("317-0332-j.pic", 0x00, 0x4000, CRC(f71cb2fc) SHA1(281b3b3b03edf9a39e380976de528b7c9674de53) )
65426553ROM_END
r12704r12705
65496560   DISK_REGION( "gdrom" )
65506561   DISK_IMAGE_READONLY( "gds-0021a", 0,  SHA1(15c6f9434494a31693cbb8e33da36e0e8a8f7c62) )
65516562
6552   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6553   //ROM_LOAD("317-0332-jpn.data", 0x00, 0x50, CRC(ab302661) SHA1(65164cf76d78b281772bfcbf5a733b0200e86e09) )
6554
65556563   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
65566564   //PIC16C622A (317-0332-JPN)
65576565   //(sticker 253-5508-0332J)
r12704r12705
65666574   DISK_REGION( "gdrom" )
65676575   DISK_IMAGE_READONLY( "gds-0026b", 0,  SHA1(8ddc3ccd32ab3416fbe2921f6d6617d6c9f23203) )
65686576
6569   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6570
65716577   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
65726578   //PIC16C622A (317-0345-JPN)
65736579   //(sticker 253-5508-0345J)
r12704r12705
65936599   DISK_REGION( "gdrom" )
65946600   DISK_IMAGE_READONLY( "gds-0027", 0,  SHA1(44746f0ceb1a3bbcd1db11a35c78c93a030f02de) )
65956601
6596   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6597
65986602   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
65996603   //PIC16C622A (317-0357-EXP)
66006604   ROM_LOAD( "317-0357-exp.pic", 0x000000, 0x004000, CRC(38f84b4d) SHA1(03c12d8580da1a4b3a554e62fd8b1f3447b7ebbd) )
r12704r12705
66076611   DISK_REGION( "gdrom" )
66086612   DISK_IMAGE_READONLY( "gds-0032c", 0,  SHA1(005b93f9785c76a778f90f04d74d4b3cc1785a01) )
66096613
6610   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6611
66126614   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
66136615   //PIC16C622A (317-????-JPN)
66146616   ROM_LOAD( "317-xxxx-jpn.pic", 0x000000, 0x004000, NO_DUMP )   // missing PIC
r12704r12705
66546656   DISK_REGION( "gdrom" )
66556657   DISK_IMAGE_READONLY( "gds-0022", 0, SHA1(70b41745225006e7876176cbd239edecd4c3f8b6) )
66566658
6657   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6658   //ROM_LOAD("317-0333-com.data", 0x00, 0x50, CRC(0c07970f) SHA1(8882dd2f8ed522790ea78eed80cfa9442f88f67b) )
6659
66606659   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
66616660   ROM_LOAD("317-0333-com.pic", 0x00, 0x4000, CRC(15fb7792) SHA1(03932ba9b1738d5ab75b2a465cc3254e75f59f63) )
66626661
r12704r12705
66706669   DISK_REGION( "gdrom" )
66716670   DISK_IMAGE_READONLY( "gds-0023a", 0, SHA1(cd9d808b59eb8f40673ec4353d476f2b9c7f783c) )
66726671
6673   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6674   //ROM_LOAD("317-0314-com.data", 0x00, 0x50, CRC(91a97eb4) SHA1(059342368bc5d25b494ed3c729870695f9584fc7) )
6675
66766672   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) // uses the vf4 pic
66776673   //PIC16C622A (317-0314-COM)
66786674   //(sticker 253-5508-0314)
r12704r12705
66876683   DISK_REGION( "gdrom" )
66886684   DISK_IMAGE_READONLY( "gds-0023c", 0, SHA1(1fcb5530748886f4c4f45487d047859182ff7496))
66896685
6690   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6691   //ROM_LOAD("317-0338-jpn.data", 0x00, 0x50, CRC(eeb2c9e9) SHA1(d30b5914c603219daea9923e1cf8da2be6096742) )
6692
66936686   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) // uses the vf4 evolution pic
66946687   //PIC16C622A (317-0338-JPN)
66956688   //(sticker 253-5508-0338J)
r12704r12705
67076700   DISK_REGION( "gdrom" )
67086701   DISK_IMAGE_READONLY( "gds-0031", 0, SHA1(da2d421da9472b149619b6931bb2fe624be75fa2) )
67096702
6710   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6711   //ROM_LOAD("317-0375-com.data", 0x00, 0x50, CRC(32bf1825) SHA1(42dfbc6777c154d8de6c6f7350da9ea737380220) )
6712
67136703   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
67146704   //PIC16C621A (317-0375-COM)
67156705   //(sticker 253-5508-0375)
r12704r12705
67266716   NAOMI2_BIOS
67276717   NAOMI_DEFAULT_EEPROM
67286718
6729   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
6719   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
67306720   ROM_LOAD( "epr-23663c.ic22",0x0000000, 0x0400000, CRC(7007fec7) SHA1(523168f0b218d0bd5c815d65bf0caba2c8468c9d) )
67316721   ROM_LOAD( "mpr-23652.ic1",  0x0800000, 0x1000000, CRC(992758a2) SHA1(5e2a25c520c1795128e5026fc00d355c24852ded) )
67326722   ROM_LOAD( "mpr-23653.ic2",  0x1800000, 0x1000000, CRC(e210e932) SHA1(2f6f0a31c3e98b21f1ff3af1680e50b3535b130f) )
r12704r12705
67456735   NAOMI2_BIOS
67466736   NAOMI_DEFAULT_EEPROM
67476737
6748   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
6738   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
67496739   ROM_LOAD( "epr-23663b.ic22",0x0000000, 0x0400000, CRC(15733e44) SHA1(5040c518279283b76da6d9f75bb0a48953146ca9) )
67506740   ROM_LOAD( "mpr-23652.ic1",  0x0800000, 0x1000000, CRC(992758a2) SHA1(5e2a25c520c1795128e5026fc00d355c24852ded) )
67516741   ROM_LOAD( "mpr-23653.ic2",  0x1800000, 0x1000000, CRC(e210e932) SHA1(2f6f0a31c3e98b21f1ff3af1680e50b3535b130f) )
r12704r12705
67646754   NAOMI2_BIOS
67656755   NAOMI_DEFAULT_EEPROM
67666756
6767   ROM_REGION( 0xa800000, "user1", ROMREGION_ERASEFF)
6757   ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
67686758   ROM_LOAD( "epr-23622.ic22", 0x0000000, 0x0400000, CRC(8acafa5b) SHA1(c92bcd40bad6ba8efd1edbfd7e439fb2b3c67fb0) )
6769        ROM_LOAD( "mpr-23611.ic1",  0x0800000, 0x1000000, CRC(943bc32a) SHA1(11ced99e9dbd7cc93031779e00d4ee1f2dff9086) )
6770        ROM_LOAD( "mpr-23612.ic2",  0x1800000, 0x1000000, CRC(f71d87e5) SHA1(c36d1d07702642db282278f1cf556ed472e930d3) )
6771        ROM_LOAD( "mpr-23613.ic3",  0x2800000, 0x1000000, CRC(689e783e) SHA1(1264c3389610bbf2745b7e6d50f327b1df33b63b) )
6772        ROM_LOAD( "mpr-23614.ic4",  0x3800000, 0x1000000, CRC(e5b8c5e5) SHA1(4b81ecc6375bf731dc3423cf87c2228eb304f2b5) )
6773        ROM_LOAD( "mpr-23615.ic5",  0x4800000, 0x1000000, CRC(95c35866) SHA1(a3dd4cd2c8818a3c5de7aa6c4afc74f872d52b37) )
6774        ROM_LOAD( "mpr-23616.ic6",  0x5800000, 0x1000000, CRC(6288848f) SHA1(a69ddde96d15cee9154ed3e87514286db6bbb622) )
6775        ROM_LOAD( "mpr-23617.ic7",  0x6800000, 0x1000000, CRC(19298892) SHA1(78493587dc49c7c99c5a98f152b17500003316b3) )
6776        ROM_LOAD( "mpr-23618.ic8",  0x7800000, 0x1000000, CRC(67d7b659) SHA1(44e75e16f2740c6e147e101a8714be8c5d9b71f3) )
6777        ROM_LOAD( "mpr-23619.ic9",  0x8800000, 0x1000000, CRC(a5f4f6af) SHA1(bb89d3f0f5bbaf7c40fa43680c7e51ef93f7ed26) )
6778        ROM_LOAD( "mpr-23620.ic10", 0x9800000, 0x1000000, CRC(67aa15a9) SHA1(42c24cbf7069c27430a71509a872cd1c4224aaeb) )
6759   ROM_LOAD( "mpr-23611.ic1",  0x0800000, 0x1000000, CRC(943bc32a) SHA1(11ced99e9dbd7cc93031779e00d4ee1f2dff9086) )
6760   ROM_LOAD( "mpr-23612.ic2",  0x1800000, 0x1000000, CRC(f71d87e5) SHA1(c36d1d07702642db282278f1cf556ed472e930d3) )
6761   ROM_LOAD( "mpr-23613.ic3",  0x2800000, 0x1000000, CRC(689e783e) SHA1(1264c3389610bbf2745b7e6d50f327b1df33b63b) )
6762   ROM_LOAD( "mpr-23614.ic4",  0x3800000, 0x1000000, CRC(e5b8c5e5) SHA1(4b81ecc6375bf731dc3423cf87c2228eb304f2b5) )
6763   ROM_LOAD( "mpr-23615.ic5",  0x4800000, 0x1000000, CRC(95c35866) SHA1(a3dd4cd2c8818a3c5de7aa6c4afc74f872d52b37) )
6764   ROM_LOAD( "mpr-23616.ic6",  0x5800000, 0x1000000, CRC(6288848f) SHA1(a69ddde96d15cee9154ed3e87514286db6bbb622) )
6765   ROM_LOAD( "mpr-23617.ic7",  0x6800000, 0x1000000, CRC(19298892) SHA1(78493587dc49c7c99c5a98f152b17500003316b3) )
6766   ROM_LOAD( "mpr-23618.ic8",  0x7800000, 0x1000000, CRC(67d7b659) SHA1(44e75e16f2740c6e147e101a8714be8c5d9b71f3) )
6767   ROM_LOAD( "mpr-23619.ic9",  0x8800000, 0x1000000, CRC(a5f4f6af) SHA1(bb89d3f0f5bbaf7c40fa43680c7e51ef93f7ed26) )
6768   ROM_LOAD( "mpr-23620.ic10", 0x9800000, 0x1000000, CRC(67aa15a9) SHA1(42c24cbf7069c27430a71509a872cd1c4224aaeb) )
67796769ROM_END
67806770
67816771ROM_START( vf4cart )
67826772   NAOMI2_BIOS
67836773   NAOMI_DEFAULT_EEPROM
67846774
6785   ROM_REGION( 0xb800000, "user1", ROMREGION_ERASEFF)
6786        ROM_LOAD( "epr-23785.ic22", 0x0000000, 0x0400000, CRC(9bd98d4b) SHA1(3b0622625317cd6b2736c5b4a23484fb8bf39e4b) )
6787        ROM_LOAD( "mpr-23774.ic1",  0x0800000, 0x1000000, CRC(0fe7b864) SHA1(357ca3a5d96d7ff27e06367e115ddfd00cb260e3) )
6788        ROM_LOAD( "mpr-23775.ic2",  0x1800000, 0x1000000, CRC(a11cd9e5) SHA1(7fd8f634d0d14a91dfe9f39b5643b9c761dc7053) )
6789        ROM_LOAD( "mpr-23776.ic3",  0x2800000, 0x1000000, CRC(44b8429e) SHA1(0ec6b6156bef1621700791651903a4589f4b5f84) )
6790        ROM_LOAD( "mpr-23777.ic4",  0x3800000, 0x1000000, CRC(78a4264e) SHA1(40d045240173f330ac6f108b132f9a87884922be) )
6791        ROM_LOAD( "mpr-23778.ic5",  0x4800000, 0x1000000, CRC(02dee78b) SHA1(e08ce0fc0b1db2dcef957c2edb6d51db400a38cb) )
6792        ROM_LOAD( "mpr-23779.ic6",  0x5800000, 0x1000000, CRC(6e458eea) SHA1(4c85fcacf4ff46d4a137afcf5906092fd88fe4b1) )
6793        ROM_LOAD( "mpr-23780.ic7",  0x6800000, 0x1000000, CRC(a775a51c) SHA1(b3eae20e5e7d74252368fd902c4e94a6ba6cb154) )
6794        ROM_LOAD( "mpr-23781.ic8",  0x7800000, 0x1000000, CRC(401bca00) SHA1(10c6011fae7076ea0dc5ab0ebca9cb88659a93e9) )
6795        ROM_LOAD( "mpr-23782.ic9",  0x8800000, 0x1000000, CRC(4f72e901) SHA1(a1d231c446d2c34e5a7e7145754b2313a2d03fd4) )
6796        ROM_LOAD( "mpr-23783.ic10", 0x9800000, 0x1000000, CRC(c8d4f6f9) SHA1(9e9df605c050b3780d7df34bd5041d30bc084d2d) )
6797        ROM_LOAD( "mpr-23784.ic11", 0xa800000, 0x1000000, CRC(f74f2fee) SHA1(84b07baa6d116727e66ef27e24ba6484c3393891) )
6775   ROM_REGION( 0xb800000, "rom_board", ROMREGION_ERASEFF)
6776   ROM_LOAD( "epr-23785.ic22", 0x0000000, 0x0400000, CRC(9bd98d4b) SHA1(3b0622625317cd6b2736c5b4a23484fb8bf39e4b) )
6777   ROM_LOAD( "mpr-23774.ic1",  0x0800000, 0x1000000, CRC(0fe7b864) SHA1(357ca3a5d96d7ff27e06367e115ddfd00cb260e3) )
6778   ROM_LOAD( "mpr-23775.ic2",  0x1800000, 0x1000000, CRC(a11cd9e5) SHA1(7fd8f634d0d14a91dfe9f39b5643b9c761dc7053) )
6779   ROM_LOAD( "mpr-23776.ic3",  0x2800000, 0x1000000, CRC(44b8429e) SHA1(0ec6b6156bef1621700791651903a4589f4b5f84) )
6780   ROM_LOAD( "mpr-23777.ic4",  0x3800000, 0x1000000, CRC(78a4264e) SHA1(40d045240173f330ac6f108b132f9a87884922be) )
6781   ROM_LOAD( "mpr-23778.ic5",  0x4800000, 0x1000000, CRC(02dee78b) SHA1(e08ce0fc0b1db2dcef957c2edb6d51db400a38cb) )
6782   ROM_LOAD( "mpr-23779.ic6",  0x5800000, 0x1000000, CRC(6e458eea) SHA1(4c85fcacf4ff46d4a137afcf5906092fd88fe4b1) )
6783   ROM_LOAD( "mpr-23780.ic7",  0x6800000, 0x1000000, CRC(a775a51c) SHA1(b3eae20e5e7d74252368fd902c4e94a6ba6cb154) )
6784   ROM_LOAD( "mpr-23781.ic8",  0x7800000, 0x1000000, CRC(401bca00) SHA1(10c6011fae7076ea0dc5ab0ebca9cb88659a93e9) )
6785   ROM_LOAD( "mpr-23782.ic9",  0x8800000, 0x1000000, CRC(4f72e901) SHA1(a1d231c446d2c34e5a7e7145754b2313a2d03fd4) )
6786   ROM_LOAD( "mpr-23783.ic10", 0x9800000, 0x1000000, CRC(c8d4f6f9) SHA1(9e9df605c050b3780d7df34bd5041d30bc084d2d) )
6787   ROM_LOAD( "mpr-23784.ic11", 0xa800000, 0x1000000, CRC(f74f2fee) SHA1(84b07baa6d116727e66ef27e24ba6484c3393891) )
6788
6789   ROM_REGION( 4, "rom_key", 0 )
6790   ROM_LOAD( "vf4cart-key.bin", 0, 4, CRC(22838e16) SHA1(afee674dce3cfdd20360c30da2da5ba69f8d4682) )
67986791ROM_END
67996792
68006793ROM_START( kingrt66 )
68016794   NAOMI2_BIOS
68026795   NAOMI_DEFAULT_EEPROM
68036796
6804   ROM_REGION( 0xa800000, "user1", ROMREGION_ERASEFF)
6805        ROM_LOAD( "epr-23819a.ic22", 0x0000000, 0x400000, CRC(92f11b29) SHA1(b33f7eefb849754cfe194be1d48d770ed77ff69a) )
6797   ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
6798   ROM_LOAD( "epr-23819a.ic22", 0x0000000, 0x400000, CRC(92f11b29) SHA1(b33f7eefb849754cfe194be1d48d770ed77ff69a) )
68066799   ROM_RELOAD( 0x400000, 0x400000)
6807        ROM_LOAD( "mpr-23799.ic1",  0x0800000, 0x800000, CRC(03da8f81) SHA1(01f9b33ffc485d8ccb2630c8cc1fcc0d90da171d) )
6808        ROM_LOAD( "mpr-23800.ic2",  0x1000000, 0x800000, CRC(1bbbf549) SHA1(0c5269f3e8a88298408bb612dc8da4d545ce329e) )
6809        ROM_LOAD( "mpr-23801.ic3",  0x1800000, 0x800000, CRC(6c81d0a9) SHA1(2301350098062e16afd6d4c13eeb1e46040d398f) )
6810        ROM_LOAD( "mpr-23802.ic4",  0x2000000, 0x800000, CRC(fe245803) SHA1(3b5c4d20c447ca02306a74914c027c9193d2bb48) )
6811        ROM_LOAD( "mpr-23803.ic5",  0x2800000, 0x800000, CRC(d8376c76) SHA1(62a64d0ff4b63a2de3b8668c0ca1d69d4cdac00e) )
6812        ROM_LOAD( "mpr-23804.ic6",  0x3000000, 0x800000, CRC(d184a4b3) SHA1(db00cf005da52b8add695ec89f8a81cf21fc9bad) )
6813        ROM_LOAD( "mpr-23805.ic7",  0x3800000, 0x800000, CRC(6e92fb39) SHA1(d992272e474424221c87bb71e269e10cbba1cac9) )
6814        ROM_LOAD( "mpr-23806.ic8",  0x4000000, 0x800000, CRC(fd4c128f) SHA1(7778920f59b8bc1e9718d685bfd556f73e5c3895) )
6815        ROM_LOAD( "mpr-23807.ic9",  0x4800000, 0x800000, CRC(5bcb3759) SHA1(57baa595eaee826ffadc17c885cb73174558feb1) )
6816        ROM_LOAD( "mpr-23808.ic10", 0x5000000, 0x800000, CRC(7d66c409) SHA1(fa8d08587ebcd70ec39237366c5de6948efce881) )
6817        ROM_LOAD( "mpr-23809.ic11", 0x5800000, 0x800000, CRC(322abecc) SHA1(476a751dc9849a5167e7e7e17e27987b96b1cb00) )
6818        ROM_LOAD( "mpr-23810.ic12", 0x6000000, 0x800000, CRC(a47fff36) SHA1(5c0088e140654b89749c5dd5d729c4799afc224e) )
6819        ROM_LOAD( "mpr-23811.ic13", 0x6800000, 0x800000, CRC(f502b666) SHA1(fa483f327cab15d10861efcbf6bdf4a2c5d0a763) )
6820        ROM_LOAD( "mpr-23812.ic14", 0x7000000, 0x800000, CRC(ed664a57) SHA1(54421ce642208fd1f14fbbe2e326d9c8da7c9944) )
6821        ROM_LOAD( "mpr-23813.ic15", 0x7800000, 0x800000, CRC(3f905393) SHA1(d63bbe8099b323ad4fd95401e0097b4c7151b44c) )
6822        ROM_LOAD( "mpr-23814.ic16", 0x8000000, 0x800000, CRC(80756e62) SHA1(9b2f14ed10775ee56f245c75ee23534c99db23d4) )
6823        ROM_LOAD( "mpr-23815.ic17", 0x8800000, 0x800000, CRC(7404e74e) SHA1(a427bf9f5e8338d34d1091de69460e374ddc6ee6) )
6824        ROM_LOAD( "mpr-23816.ic18", 0x9000000, 0x800000, CRC(58a7fbac) SHA1(7132e018e73e68a355f92fe26121da7c3c0c927a) )
6825        ROM_LOAD( "mpr-23817.ic19", 0x9800000, 0x800000, CRC(fd6fb2cf) SHA1(b2bf8a11d42141237db0254506ee73d9cef8b9d1) )
6826        ROM_LOAD( "mpr-23818.ic20", 0xa000000, 0x800000, CRC(be902c2b) SHA1(1f1aa6933da528bdcef45942a0caa33cb24e7ddd) )
6800   ROM_LOAD( "mpr-23799.ic1",  0x0800000, 0x800000, CRC(03da8f81) SHA1(01f9b33ffc485d8ccb2630c8cc1fcc0d90da171d) )
6801   ROM_LOAD( "mpr-23800.ic2",  0x1000000, 0x800000, CRC(1bbbf549) SHA1(0c5269f3e8a88298408bb612dc8da4d545ce329e) )
6802   ROM_LOAD( "mpr-23801.ic3",  0x1800000, 0x800000, CRC(6c81d0a9) SHA1(2301350098062e16afd6d4c13eeb1e46040d398f) )
6803   ROM_LOAD( "mpr-23802.ic4",  0x2000000, 0x800000, CRC(fe245803) SHA1(3b5c4d20c447ca02306a74914c027c9193d2bb48) )
6804   ROM_LOAD( "mpr-23803.ic5",  0x2800000, 0x800000, CRC(d8376c76) SHA1(62a64d0ff4b63a2de3b8668c0ca1d69d4cdac00e) )
6805   ROM_LOAD( "mpr-23804.ic6",  0x3000000, 0x800000, CRC(d184a4b3) SHA1(db00cf005da52b8add695ec89f8a81cf21fc9bad) )
6806   ROM_LOAD( "mpr-23805.ic7",  0x3800000, 0x800000, CRC(6e92fb39) SHA1(d992272e474424221c87bb71e269e10cbba1cac9) )
6807   ROM_LOAD( "mpr-23806.ic8",  0x4000000, 0x800000, CRC(fd4c128f) SHA1(7778920f59b8bc1e9718d685bfd556f73e5c3895) )
6808   ROM_LOAD( "mpr-23807.ic9",  0x4800000, 0x800000, CRC(5bcb3759) SHA1(57baa595eaee826ffadc17c885cb73174558feb1) )
6809   ROM_LOAD( "mpr-23808.ic10", 0x5000000, 0x800000, CRC(7d66c409) SHA1(fa8d08587ebcd70ec39237366c5de6948efce881) )
6810   ROM_LOAD( "mpr-23809.ic11", 0x5800000, 0x800000, CRC(322abecc) SHA1(476a751dc9849a5167e7e7e17e27987b96b1cb00) )
6811   ROM_LOAD( "mpr-23810.ic12", 0x6000000, 0x800000, CRC(a47fff36) SHA1(5c0088e140654b89749c5dd5d729c4799afc224e) )
6812   ROM_LOAD( "mpr-23811.ic13", 0x6800000, 0x800000, CRC(f502b666) SHA1(fa483f327cab15d10861efcbf6bdf4a2c5d0a763) )
6813   ROM_LOAD( "mpr-23812.ic14", 0x7000000, 0x800000, CRC(ed664a57) SHA1(54421ce642208fd1f14fbbe2e326d9c8da7c9944) )
6814   ROM_LOAD( "mpr-23813.ic15", 0x7800000, 0x800000, CRC(3f905393) SHA1(d63bbe8099b323ad4fd95401e0097b4c7151b44c) )
6815   ROM_LOAD( "mpr-23814.ic16", 0x8000000, 0x800000, CRC(80756e62) SHA1(9b2f14ed10775ee56f245c75ee23534c99db23d4) )
6816   ROM_LOAD( "mpr-23815.ic17", 0x8800000, 0x800000, CRC(7404e74e) SHA1(a427bf9f5e8338d34d1091de69460e374ddc6ee6) )
6817   ROM_LOAD( "mpr-23816.ic18", 0x9000000, 0x800000, CRC(58a7fbac) SHA1(7132e018e73e68a355f92fe26121da7c3c0c927a) )
6818   ROM_LOAD( "mpr-23817.ic19", 0x9800000, 0x800000, CRC(fd6fb2cf) SHA1(b2bf8a11d42141237db0254506ee73d9cef8b9d1) )
6819   ROM_LOAD( "mpr-23818.ic20", 0xa000000, 0x800000, CRC(be902c2b) SHA1(1f1aa6933da528bdcef45942a0caa33cb24e7ddd) )
68276820ROM_END
68286821
68296822/*
r12704r12705
68336826   NAOMI2_BIOS
68346827   NAOMI_DEFAULT_EEPROM
68356828
6836   ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF)
6837        ROM_LOAD( "epr-23934.ic11",  0x0000000, 0x400000, CRC(656a7d84) SHA1(e407ddc923b399de99cb06a8831ef8fb328cfe64) )
6838        ROM_LOAD32_WORD( "mpr-23912.ic17s", 0x1000000, 0x800000, CRC(b2b13d97) SHA1(978bcdab7e4f220b464d5b9fa27870b5176283ca) )
6839        ROM_LOAD32_WORD( "mpr-23913.ic18",  0x1000002, 0x800000, CRC(560de9d2) SHA1(e065abb62346f5e50f654ac77beb54ee1bfc1a08) )
6840        ROM_LOAD32_WORD( "mpr-23914.ic19s", 0x2000000, 0x800000, CRC(a2104728) SHA1(48b752b6266b4d44fcb16fe179fb44ca58e11db0) )
6841        ROM_LOAD32_WORD( "mpr-23915.ic20",  0x2000002, 0x800000, CRC(295d32f0) SHA1(4cabb1ab54dad2cef7207f8d7a78f609d35800fb) )
6842        ROM_LOAD32_WORD( "mpr-23916.ic21s", 0x3000000, 0x800000, CRC(d725fdd3) SHA1(ab3a79dfcbaa65b5a085a429bcb76c1d3940d590) )
6843        ROM_LOAD32_WORD( "mpr-23917.ic22",  0x3000002, 0x800000, CRC(8794c8e8) SHA1(a2542ad8c063f77749fbc4429ec74bba26939556) )
6844        ROM_LOAD32_WORD( "mpr-23918.ic23s", 0x4000000, 0x800000, CRC(7a3da170) SHA1(72d05430cd8cd12c47ccd36bf171eaadfb987708) )
6845        ROM_LOAD32_WORD( "mpr-23919.ic24",  0x4000002, 0x800000, CRC(59601746) SHA1(514b00ee44d64593c2d257b48ac20b42ee2a402a) )
6846        ROM_LOAD32_WORD( "mpr-23920.ic25s", 0x5000000, 0x800000, CRC(6ae07021) SHA1(b018db4f868d9ebcde44759d8aea44d789958087) )
6847        ROM_LOAD32_WORD( "mpr-23921.ic26",  0x5000002, 0x800000, CRC(42028253) SHA1(aa5a3953e4306f4f69c1be568d515af249e6ab1e) )
6848        ROM_LOAD32_WORD( "mpr-23922.ic27s", 0x6000000, 0x800000, CRC(baf47df2) SHA1(d5c04e03a69a4ac8c8c066c0c750bef236e8c172) )
6849        ROM_LOAD32_WORD( "mpr-23923.ic28",  0x6000002, 0x800000, CRC(5c31b7e7) SHA1(cf1307400f7bd4b8dda840544a348eee34710256) )
6850        ROM_LOAD32_WORD( "mpr-23924.ic29",  0x7000000, 0x800000, CRC(6dfe19d9) SHA1(99b13ef752c7b8f7812ea5c3bce19cbf122008b6) )
6851        ROM_LOAD32_WORD( "mpr-23925.ic30s", 0x7000002, 0x800000, CRC(e9ec870a) SHA1(cdf385096e7fe15de98cea6ae5aabf3016e007a9) )
6852        ROM_LOAD32_WORD( "mpr-23926.ic31",  0x8000000, 0x800000, CRC(2c650728) SHA1(328748b2c786eb77c9d05280e88367cfb7b79777) )
6853        ROM_LOAD32_WORD( "mpr-23927.ic32s", 0x8000002, 0x800000, CRC(f36a765b) SHA1(ecd09db0961b0d11000c8744a2cfcf3fa473eea6) )
6854        ROM_LOAD32_WORD( "mpr-23928.ic33",  0x9000000, 0x800000, CRC(0ee92b02) SHA1(d0d26f4257a022b42b59cf4f9305a3cb2dc67f4b) )
6855        ROM_LOAD32_WORD( "mpr-23929.ic34s", 0x9000002, 0x800000, CRC(d768f242) SHA1(3ade29b094308d870ecac53cfe77b843d50af85a) )
6856        ROM_LOAD32_WORD( "mpr-23930.ic35",  0xa000000, 0x800000, CRC(0e45e4c4) SHA1(974b83d4cc35e8ac9f83d04ebd395f1e2196e829) )
6857        ROM_LOAD32_WORD( "mpr-23931.ic36s", 0xa000002, 0x800000, CRC(12ecd2f0) SHA1(3222d4d9d3e30c297a072a8888c28503306db40c) )
6829   ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
6830   ROM_LOAD( "epr-23934.ic11",  0x0000000, 0x400000, CRC(656a7d84) SHA1(e407ddc923b399de99cb06a8831ef8fb328cfe64) )
6831   ROM_LOAD32_WORD( "mpr-23912.ic17s", 0x1000000, 0x800000, CRC(b2b13d97) SHA1(978bcdab7e4f220b464d5b9fa27870b5176283ca) )
6832   ROM_LOAD32_WORD( "mpr-23913.ic18",  0x1000002, 0x800000, CRC(560de9d2) SHA1(e065abb62346f5e50f654ac77beb54ee1bfc1a08) )
6833   ROM_LOAD32_WORD( "mpr-23914.ic19s", 0x2000000, 0x800000, CRC(a2104728) SHA1(48b752b6266b4d44fcb16fe179fb44ca58e11db0) )
6834   ROM_LOAD32_WORD( "mpr-23915.ic20",  0x2000002, 0x800000, CRC(295d32f0) SHA1(4cabb1ab54dad2cef7207f8d7a78f609d35800fb) )
6835   ROM_LOAD32_WORD( "mpr-23916.ic21s", 0x3000000, 0x800000, CRC(d725fdd3) SHA1(ab3a79dfcbaa65b5a085a429bcb76c1d3940d590) )
6836   ROM_LOAD32_WORD( "mpr-23917.ic22",  0x3000002, 0x800000, CRC(8794c8e8) SHA1(a2542ad8c063f77749fbc4429ec74bba26939556) )
6837   ROM_LOAD32_WORD( "mpr-23918.ic23s", 0x4000000, 0x800000, CRC(7a3da170) SHA1(72d05430cd8cd12c47ccd36bf171eaadfb987708) )
6838   ROM_LOAD32_WORD( "mpr-23919.ic24",  0x4000002, 0x800000, CRC(59601746) SHA1(514b00ee44d64593c2d257b48ac20b42ee2a402a) )
6839   ROM_LOAD32_WORD( "mpr-23920.ic25s", 0x5000000, 0x800000, CRC(6ae07021) SHA1(b018db4f868d9ebcde44759d8aea44d789958087) )
6840   ROM_LOAD32_WORD( "mpr-23921.ic26",  0x5000002, 0x800000, CRC(42028253) SHA1(aa5a3953e4306f4f69c1be568d515af249e6ab1e) )
6841   ROM_LOAD32_WORD( "mpr-23922.ic27s", 0x6000000, 0x800000, CRC(baf47df2) SHA1(d5c04e03a69a4ac8c8c066c0c750bef236e8c172) )
6842   ROM_LOAD32_WORD( "mpr-23923.ic28",  0x6000002, 0x800000, CRC(5c31b7e7) SHA1(cf1307400f7bd4b8dda840544a348eee34710256) )
6843   ROM_LOAD32_WORD( "mpr-23924.ic29",  0x7000000, 0x800000, CRC(6dfe19d9) SHA1(99b13ef752c7b8f7812ea5c3bce19cbf122008b6) )
6844   ROM_LOAD32_WORD( "mpr-23925.ic30s", 0x7000002, 0x800000, CRC(e9ec870a) SHA1(cdf385096e7fe15de98cea6ae5aabf3016e007a9) )
6845   ROM_LOAD32_WORD( "mpr-23926.ic31",  0x8000000, 0x800000, CRC(2c650728) SHA1(328748b2c786eb77c9d05280e88367cfb7b79777) )
6846   ROM_LOAD32_WORD( "mpr-23927.ic32s", 0x8000002, 0x800000, CRC(f36a765b) SHA1(ecd09db0961b0d11000c8744a2cfcf3fa473eea6) )
6847   ROM_LOAD32_WORD( "mpr-23928.ic33",  0x9000000, 0x800000, CRC(0ee92b02) SHA1(d0d26f4257a022b42b59cf4f9305a3cb2dc67f4b) )
6848   ROM_LOAD32_WORD( "mpr-23929.ic34s", 0x9000002, 0x800000, CRC(d768f242) SHA1(3ade29b094308d870ecac53cfe77b843d50af85a) )
6849   ROM_LOAD32_WORD( "mpr-23930.ic35",  0xa000000, 0x800000, CRC(0e45e4c4) SHA1(974b83d4cc35e8ac9f83d04ebd395f1e2196e829) )
6850   ROM_LOAD32_WORD( "mpr-23931.ic36s", 0xa000002, 0x800000, CRC(12ecd2f0) SHA1(3222d4d9d3e30c297a072a8888c28503306db40c) )
68586851
6859   ROM_COPY( "user1", 0x1400000, 0x0800000, 0x0800000 ) // mirror data so IC1 check can pass
6852   ROM_COPY( "rom_board", 0x1400000, 0x0800000, 0x0800000 ) // mirror data so IC1 check can pass
6853
6854   ROM_REGION( 4, "rom_key", 0 )
6855   ROM_LOAD( "vf4evoct-key.bin", 0, 4, CRC(c37dae2b) SHA1(c42dc01b5918db36e7eb2aca523e2f4df567725a) )
68606856ROM_END
68616857
68626858ROM_START( clubkrte )
68636859   NAOMI2_BIOS
68646860   NAOMI_DEFAULT_EEPROM
68656861
6866   ROM_REGION( 0xb800000, "user1", ROMREGION_ERASEFF)
6867        ROM_LOAD( "epr-23704.ic22", 0x0000000, 0x0400000, CRC(ff700a0d) SHA1(e2db0d2bd7dc88b3a487077e8ce56eb6cfd9b02d) )
6868        ROM_LOAD( "mpr-23693.ic1",  0x0800000, 0x1000000, CRC(28995764) SHA1(a1457f9935dde2e5aaa5ef245c736c0f2f8c74b7) )
6869        ROM_LOAD( "mpr-22694.ic2",  0x1800000, 0x1000000, CRC(37d30111) SHA1(4c07df8cd548cac79d48709e61f692d762471f8f) )
6870        ROM_LOAD( "mpr-22695.ic3",  0x2800000, 0x1000000, CRC(41ac1510) SHA1(01b889b627fdfc1f12a0c84fcc36debdfb1cf377) )
6871        ROM_LOAD( "mpr-22696.ic4",  0x3800000, 0x1000000, CRC(6f2da455) SHA1(b655757bc513398820bfeae07dca8a4f3ea9752c) )
6872        ROM_LOAD( "mpr-22697.ic5",  0x4800000, 0x1000000, CRC(1383c742) SHA1(6efd17632a277a4bb0e47cc912fbc9865a8b14c3) )
6873        ROM_LOAD( "mpr-22698.ic6",  0x5800000, 0x1000000, CRC(da79cd06) SHA1(fdfe068caca1eb764dec28ab327e56b39144f3ae) )
6874        ROM_LOAD( "mpr-22699.ic7",  0x6800000, 0x1000000, CRC(ea77f000) SHA1(35aa8ee804d9429e72f516137a3b06c585a57b6d) )
6875        ROM_LOAD( "mpr-22700.ic8",  0x7800000, 0x1000000, CRC(db9e5c1d) SHA1(db918c0fa1860f4345806e574d44354aba5fcd54) )
6876        ROM_LOAD( "mpr-22701.ic9",  0x8800000, 0x1000000, CRC(0fa92fd7) SHA1(67a1cf085101884a17a4783d0d509ab198aa6425) )
6877        ROM_LOAD( "mpr-22702.ic10", 0x9800000, 0x1000000, CRC(e302b582) SHA1(787192ed9f9a08541eecc3128855485cad802a42) )
6878        ROM_LOAD( "mpr-22703.ic11", 0xa800000, 0x1000000, CRC(702b8b4a) SHA1(3a8dfde458f341e7db20664382b9fce2b6e5d462) )
6862   ROM_REGION( 0xb800000, "rom_board", ROMREGION_ERASEFF)
6863   ROM_LOAD( "epr-23704.ic22", 0x0000000, 0x0400000, CRC(ff700a0d) SHA1(e2db0d2bd7dc88b3a487077e8ce56eb6cfd9b02d) )
6864   ROM_LOAD( "mpr-23693.ic1",  0x0800000, 0x1000000, CRC(28995764) SHA1(a1457f9935dde2e5aaa5ef245c736c0f2f8c74b7) )
6865   ROM_LOAD( "mpr-22694.ic2",  0x1800000, 0x1000000, CRC(37d30111) SHA1(4c07df8cd548cac79d48709e61f692d762471f8f) )
6866   ROM_LOAD( "mpr-22695.ic3",  0x2800000, 0x1000000, CRC(41ac1510) SHA1(01b889b627fdfc1f12a0c84fcc36debdfb1cf377) )
6867   ROM_LOAD( "mpr-22696.ic4",  0x3800000, 0x1000000, CRC(6f2da455) SHA1(b655757bc513398820bfeae07dca8a4f3ea9752c) )
6868   ROM_LOAD( "mpr-22697.ic5",  0x4800000, 0x1000000, CRC(1383c742) SHA1(6efd17632a277a4bb0e47cc912fbc9865a8b14c3) )
6869   ROM_LOAD( "mpr-22698.ic6",  0x5800000, 0x1000000, CRC(da79cd06) SHA1(fdfe068caca1eb764dec28ab327e56b39144f3ae) )
6870   ROM_LOAD( "mpr-22699.ic7",  0x6800000, 0x1000000, CRC(ea77f000) SHA1(35aa8ee804d9429e72f516137a3b06c585a57b6d) )
6871   ROM_LOAD( "mpr-22700.ic8",  0x7800000, 0x1000000, CRC(db9e5c1d) SHA1(db918c0fa1860f4345806e574d44354aba5fcd54) )
6872   ROM_LOAD( "mpr-22701.ic9",  0x8800000, 0x1000000, CRC(0fa92fd7) SHA1(67a1cf085101884a17a4783d0d509ab198aa6425) )
6873   ROM_LOAD( "mpr-22702.ic10", 0x9800000, 0x1000000, CRC(e302b582) SHA1(787192ed9f9a08541eecc3128855485cad802a42) )
6874   ROM_LOAD( "mpr-22703.ic11", 0xa800000, 0x1000000, CRC(702b8b4a) SHA1(3a8dfde458f341e7db20664382b9fce2b6e5d462) )
68796875ROM_END
68806876
68816877/**********************************************
r12704r12705
68916887   DISK_REGION( "gdrom" )
68926888   DISK_IMAGE_READONLY( "gds-0006", 0, SHA1(aca09a88506f5e462ad3fb33eac5478a2a010609) )
68936889
6894   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6895   //ROM_LOAD("317-0304-com.data", 0x00, 0x50, CRC(a181c601) SHA1(6a489904941e638ac1069b66e76ee0bcec7d0bab) )
6896
68976890   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
68986891   //PIC16C622A (317-0304-COM)
68996892   //(sticker 253-5508-0304)
r12704r12705
69076900   DISK_REGION( "gdrom" )
69086901   DISK_IMAGE_READONLY( "gds-0012", 0, SHA1(c34588f59c6091cd1c3ef235171dad8d5247e707) )
69096902
6910   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6911   //ROM_LOAD("317-0314-com.data", 0x00, 0x50, CRC(91a97eb4) SHA1(059342368bc5d25b494ed3c729870695f9584fc7) )
6912
69136903   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
69146904   //PIC16C622A (317-0314-COM)
69156905   //(sticker 253-5508-0314)
r12704r12705
69246914   DISK_REGION( "gdrom" )
69256915   DISK_IMAGE_READONLY( "gds-0012b", 0, SHA1(9b8e05c3d28a09323b13c198dfcc2b771bba67cd) )
69266916
6927   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6928   //ROM_LOAD("317-0314-com.data", 0x00, 0x50, CRC(91a97eb4) SHA1(059342368bc5d25b494ed3c729870695f9584fc7) )
6929
69306917   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
69316918   //PIC16C622A (317-0314-COM)
69326919   //(sticker 253-5508-0314)
r12704r12705
69416928   DISK_REGION( "gdrom" )
69426929   DISK_IMAGE_READONLY( "gds-0012c", 0, SHA1(0ec149d7edfb326777cdc45a2ac8ad578a32aba1) )
69436930
6944   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6945   //ROM_LOAD("317-0314-com.data", 0x00, 0x50, CRC(91a97eb4) SHA1(059342368bc5d25b494ed3c729870695f9584fc7) )
6946
69476931   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
69486932   //PIC16C622A (317-0314-COM)
69496933   //(sticker 253-5508-0314)
r12704r12705
69596943   DISK_REGION( "gdrom" )
69606944   DISK_IMAGE_READONLY( "gds-0024b", 0, SHA1(a829169542f3bed76095ad6bfbbde7d494d04d72) )
69616945
6962   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6963   //ROM_LOAD("317-0338-jpn.data", 0x00, 0x50, CRC(eeb2c9e9) SHA1(d30b5914c603219daea9923e1cf8da2be6096742) )
6964
69656946   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
69666947   //PIC16C622A (317-0338-JPN)
69676948   //(sticker 253-5508-0338J)
r12704r12705
69766957   DISK_REGION( "gdrom" )
69776958   DISK_IMAGE_READONLY( "gds-0024a", 0, SHA1(6225e778d73db18be26f882d4f9cd3b3a136d1c9) )
69786959
6979   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6980   //ROM_LOAD("317-0338-jpn.data", 0x00, 0x50, CRC(eeb2c9e9) SHA1(d30b5914c603219daea9923e1cf8da2be6096742) )
6981
69826960   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
69836961   //PIC16C622A (317-0338-JPN)
69846962   //(sticker 253-5508-0338J)
r12704r12705
69926970   DISK_REGION( "gdrom" )
69936971   DISK_IMAGE_READONLY( "gds-0036f", 0, SHA1(ea35d6ecdf94e5c9a545952758da80f658755df0) )
69946972
6995   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
6996   //ROM_LOAD("317-0387-com.data", 0x00, 0x50, CRC(ab9f3851) SHA1(8b64dc6df176eb7adb48267709a27db221d5e3c3) )
6997
69986973   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
69996974   //PIC16C622A (317-0387-COM)
70006975   //(sticker 253-5508-0387)
r12704r12705
70086983   DISK_REGION( "gdrom" )
70096984   DISK_IMAGE_READONLY( "gds-0036d", 0, SHA1(2f7654307a4c978c5af6c8238c44e70275dd34f9) )
70106985
7011   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
7012   //ROM_LOAD("317-0387-com.data", 0x00, 0x50, CRC(ab9f3851) SHA1(8b64dc6df176eb7adb48267709a27db221d5e3c3) )
7013
70146986   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
70156987   //PIC16C622A (317-0387-COM)
70166988   //(sticker 253-5508-0387)
r12704r12705
70266998   DISK_REGION( "gdrom" )
70276999   DISK_IMAGE_READONLY( "gds-0036a", 0, SHA1(cd630fc4e8f7ed5641b85c609584d7efe0eac137) )
70287000
7029   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
7030   //ROM_LOAD("317-0387-com.data", 0x00, 0x50, CRC(ab9f3851) SHA1(8b64dc6df176eb7adb48267709a27db221d5e3c3) )
7031
70327001   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
70337002   //PIC16C622A (317-0387-COM)
70347003   //(sticker 253-5508-0387)
r12704r12705
70677036   DISK_REGION( "gdrom" )
70687037   DISK_IMAGE_READONLY( "gds-0014", 0, SHA1(1ebb3695196c11a86276e034df2e1c8d7fa6b96f) )
70697038
7070   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
70717039   //PIC16C622A (317-0317-COM)
70727040   //(sticker 253-5508-0317)
7073   //ROM_LOAD("317-0317-com.data", 0x00, 0x50, CRC(66efe433) SHA1(7f7b52202ed9b1e20516aaa7553cc3cc677a70b5) )
70747041
70757042   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
70767043   ROM_LOAD("317-0317-com.pic", 0x00, 0x4000, CRC(ef65fe73) SHA1(2c02d1570c1fdad56bc684c60bb17255c73c6d45) )
r12704r12705
70847051   DISK_REGION( "gdrom" )
70857052   DISK_IMAGE_READONLY( "gds-0020b", 0, SHA1(c0e901623ef4fcd97b7e4d29ae556e6f2e91b8ad) )
70867053
7087   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) // custom format containing data returned from pic
7088   //ROM_LOAD("317-0331-jpn.data", 0x00, 0x50, CRC(bb39742e) SHA1(b3100b18aeb80ebfd5312ba5c320e7e647710b55) )
7089
7090   //ROM_REGION( 0x9a49, "pichex", ROMREGION_ERASE) // actual pic dump (in hex/ascii mode) from decap
7091   //ROM_LOAD("gds-0020b.hex", 0x00, 0x0009a49, CRC(80d9fe04) SHA1(7a6fe325ce2e12e9270205d32f549aaf66505de5) )
7092
70937054   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
70947055   //PIC16C622A (317-0331-JPN)
70957056   //(sticker 253-5508-0331J)
r12704r12705
71037064   DISK_REGION( "gdrom" )
71047065   DISK_IMAGE_READONLY( "gds-0025", 0, SHA1(8ea92cf6b493f21b9453832edad7cbc5e5b350c1) )
71057066
7106   ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE)
7107   //ROM_LOAD("317-0343-com.data", 0x00, 0x50, CRC(e9d8fac0) SHA1(85f5bbffbd9d1f7162bae46ddd49e7870fe93662) )
7108
71097067   ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
71107068   ROM_LOAD("317-0343-com.pic", 0x00, 0x4000, CRC(80eea4eb) SHA1(5aedc0d52a2a8a2d186ca591094835d972574092) )
71117069ROM_END
r12704r12705
71187076 *
71197077 *********************************************/
71207078
7121typedef struct _sbox_set sbox_set;
7122struct _sbox_set
7123{
7124    int S0[32];
7125    int S1[16];
7126    int S2[16];
7127    int S3[8];
7128};
7129
7130static const int permutation_table[4][16] =
7131{
7132    {8,10,1,3,7,4,11,2,5,15,6,0,12,13,9,14},
7133    {4,5,9,6,1,13,7,11,10,0,14,12,8,15,2,3},
7134    {12,7,11,2,0,5,15,6,1,8,14,4,9,13,3,10},
7135    {14,1,11,15,7,3,8,13,0,4,2,12,6,10,5,9}
7136};
7137
7138static const sbox_set sboxes_table[4] =
7139{
7140    {
7141        {4,12,8,14,16,30,31,0,23,29,24,21,11,22,27,5,3,20,18,26,10,7,17,1,28,6,15,13,2,9,25,19},
7142        {13,1,0,9,5,12,4,14,3,15,2,10,11,6,8,7},
7143        {7,13,4,6,5,9,3,2,0,15,12,10,8,11,1,14},
7144        {4,0,1,2,5,7,3,6}
7145    },
7146    {
7147        {3,0,14,17,10,15,31,20,13,2,29,28,9,18,25,27,6,19,30,22,7,12,1,16,23,11,24,4,8,26,21,5},
7148        {2,10,6,9,11,13,4,5,3,15,7,14,12,1,0,8},
7149        {1,13,11,3,8,7,9,10,12,15,4,14,0,5,6,2},
7150        {6,5,0,3,7,1,4,2}
7151    },
7152    {
7153        {9,15,28,7,13,24,2,23,21,1,22,16,18,8,17,31,27,6,30,12,4,20,5,19,0,25,3,29,10,14,11,26},
7154        {5,2,13,11,8,6,12,1,4,3,0,10,14,15,7,9},
7155        {11,6,10,0,12,1,8,14,2,9,13,3,7,4,15,5},
7156        {1,5,6,2,4,7,3,0}
7157    },
7158    {
7159        {17,3,31,2,28,10,9,29,6,25,24,8,13,1,19,15,22,0,14,20,16,7,21,4,18,26,27,5,12,23,11,30},
7160        {4,8,11,15,3,14,7,12,1,0,9,5,6,13,2,10},
7161        {14,0,9,11,4,1,7,5,13,6,8,12,2,3,10,15},
7162        {2,1,0,5,4,6,7,3}
7163    },
7164};
7165
7166static UINT16 atomiswave_decrypt(UINT16 cipherText, int address, const UINT32 key)
7167{
7168    int b0,b1,b2,b3;
7169    int aux;
7170    const int* pbox = permutation_table[key>>18];
7171    const sbox_set* ss = &sboxes_table[(key>>16)&3];
7172
7173    aux = BITSWAP16(cipherText,
7174                    pbox[15],pbox[14],pbox[13],pbox[12],pbox[11],pbox[10],pbox[9],pbox[8],
7175                    pbox[7],pbox[6],pbox[5],pbox[4],pbox[3],pbox[2],pbox[1],pbox[0]);
7176    aux = aux ^ BITSWAP16(address/2, 13,5,2, 14,10,9,4, 15,11,6,1, 12,8,7,3,0);
7177
7178    b0 = aux&0x1f;
7179    b1 = (aux>>5)&0xf;
7180    b2 = (aux>>9)&0xf;
7181    b3 = aux>>13;
7182
7183    b0 = ss->S0[b0];
7184    b1 = ss->S1[b1];
7185    b2 = ss->S2[b2];
7186    b3 = ss->S3[b3];
7187
7188    return ((b3<<13)|(b2<<9)|(b1<<5)|b0)^(key&0xffff);
7189}
7190
7191
7192/*
7193We are using 20 bits keys with the following subfields' structure:
7194bits 0-15 is a 16-bits XOR
7195bits 17-16 is a index to the sboxes table
7196bits 19-18 is a index to the permutation table
7197
7198These subfields could be differing from the "real" ones in the following ways:
7199- Every one of the index subfields could be suffering an arbitrary bitswap and XOR
7200- The 16-bits-XOR subfield could suffer an arbitrary XOR which could depend on the 4 index bits (that is: a different XOR per every index combination)
7201- Of course, the way in which we are mixing 3 subfields in one only key is arbitrary too.
7202*/
7203
7204
7205static const UINT32 sprtshot_key = 0x00000;
7206static const UINT32 rangrmsn_key = 0x50000;
7207static const UINT32 fotns_key    = 0x93627;
7208static const UINT32 xtrmhunt_key = 0x80000;
7209static const UINT32 xtrmhnt2_key = 0xc194f;
7210static const UINT32 dolphin_key  = 0x1a1e8;
7211static const UINT32 demofist_key = 0x60000;
7212static const UINT32 rumblef_key  = 0x4194f;
7213static const UINT32 ngbc_key     = 0x42255;
7214static const UINT32 kofnw_key    = 0x6b3bf;
7215static const UINT32 kov7sprt_key = 0xf0000;
7216static const UINT32 ggisuka_key  = 0x8b10a;
7217static const UINT32 vfurlong_key = 0xa547a;
7218static const UINT32 salmankt_key = 0x34b74;
7219static const UINT32 maxspeed_key = 0x28dd6;
7220static const UINT32 ftspeed_key  = 0x0762f;
7221static const UINT32 kofxi_key    = 0xa4be3;
7222static const UINT32 dirtypig_key = 0xc194f;
7223static const UINT32 mslug6_key   = 0x53627;
7224static const UINT32 samsptk_key  = 0xe935f;
7225static const UINT32 ggx15_key    = 0x91257;
7226static const UINT32 rumblef2_key = 0xd674a;
7227static const UINT32 anmlbskt_key = 0x12c3e;
7228
72297079static DRIVER_INIT( atomiswave )
72307080{
72317081   UINT64 *ROM = (UINT64 *)machine.region("awflash")->base();
7232#if 0
7233   UINT8 *dcdata = (UINT8 *)machine.region("user1")->base();
7234   FILE *f;
72357082
7236   f = fopen("aw.bin", "wb");
7237   fwrite(dcdata, 0x8000000, 1, f);
7238   fclose(f);
7239#endif
72407083   // patch out long startup delay
72417084   ROM[0x98e/8] = (ROM[0x98e/8] & U64(0xffffffffffff)) | (UINT64)0x0009<<48;
72427085
72437086   awflash = machine.device<macronix_29l001mc_device>("awflash");
72447087}
72457088
7246#define AW_DRIVER_INIT(DRIVER)   \
7247static DRIVER_INIT(DRIVER)   \
7248{   \
7249   int i;   \
7250   UINT16 *src = (UINT16 *)(machine.region("user1")->base());   \
7251   int rom_size = machine.region("user1")->bytes();   \
7252   for(i=0; i<rom_size/2; i++)   \
7253   {   \
7254      src[i] = atomiswave_decrypt(src[i], i*2, DRIVER##_key);   \
7255   }   \
7256   DRIVER_INIT_CALL(atomiswave);   \
7257}
7258
7259AW_DRIVER_INIT(fotns)
7260AW_DRIVER_INIT(demofist)
7261AW_DRIVER_INIT(sprtshot)
7262AW_DRIVER_INIT(rangrmsn)
7263AW_DRIVER_INIT(xtrmhunt)
7264AW_DRIVER_INIT(xtrmhnt2)
7265AW_DRIVER_INIT(dolphin)
7266AW_DRIVER_INIT(rumblef)
7267AW_DRIVER_INIT(ngbc)
7268AW_DRIVER_INIT(kofxi)
7269AW_DRIVER_INIT(kofnw)
7270AW_DRIVER_INIT(kov7sprt)
7271AW_DRIVER_INIT(ggisuka)
7272AW_DRIVER_INIT(vfurlong)
7273AW_DRIVER_INIT(salmankt)
7274AW_DRIVER_INIT(maxspeed)
7275AW_DRIVER_INIT(ftspeed)
7276AW_DRIVER_INIT(dirtypig)
7277AW_DRIVER_INIT(mslug6)
7278AW_DRIVER_INIT(samsptk)
7279AW_DRIVER_INIT(ggx15)
7280AW_DRIVER_INIT(rumblef2)
7281AW_DRIVER_INIT(anmlbskt)
7282
72837089ROM_START( fotns )
7284   ROM_REGION( 0x200000, "awflash", 0)
72857090   AW_BIOS
72867091
7287   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7288   ROM_LOAD("ax1901p01.ic18", 0x0000000, 0x0800000,  CRC(a06998b0) SHA1(d617691db5170f6db176e40fc732966d523fd8cf) )
7289   ROM_LOAD("ax1901m01.ic11", 0x1000000, 0x1000000,  CRC(ff5a1642) SHA1(49cefcce173f9a811fe9c0c07bee53aeba2bc3a8) )
7290   ROM_LOAD("ax1902m01.ic12", 0x2000000, 0x1000000,  CRC(d9aae8a9) SHA1(bf87034088be0847b6e297b7665e0ea4d8cba631) )
7291   ROM_LOAD("ax1903m01.ic13", 0x3000000, 0x1000000,  CRC(1711b23d) SHA1(ab628b2ec678839c75245e245297818ef1592d3b) )
7292   ROM_LOAD("ax1904m01.ic14", 0x4000000, 0x1000000,  CRC(443bfb26) SHA1(6f7751afa0ca55dd0679758b27bed92b31c1b050) )
7293   ROM_LOAD("ax1905m01.ic15", 0x5000000, 0x1000000,  CRC(eb1cada0) SHA1(459d21d622c72606f1d3095e8a25b6c4adccf8ab) )
7294   ROM_LOAD("ax1906m01.ic16", 0x6000000, 0x1000000,  CRC(fe6da168) SHA1(d4ab6443383469bb5a4337005de917627a2e21cc) )
7295   ROM_LOAD("ax1907m01.ic17", 0x7000000, 0x1000000,  CRC(9d3a0520) SHA1(78583fd171b34439f77a04a97ebe3c9d1bab61cc) )
7092   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7093   ROM_LOAD( "ax1901p01.ic18", 0x0000000, 0x0800000,  CRC(a06998b0) SHA1(d617691db5170f6db176e40fc732966d523fd8cf) )
7094   ROM_LOAD( "ax1901m01.ic11", 0x1000000, 0x1000000,  CRC(ff5a1642) SHA1(49cefcce173f9a811fe9c0c07bee53aeba2bc3a8) )
7095   ROM_LOAD( "ax1902m01.ic12", 0x2000000, 0x1000000,  CRC(d9aae8a9) SHA1(bf87034088be0847b6e297b7665e0ea4d8cba631) )
7096   ROM_LOAD( "ax1903m01.ic13", 0x3000000, 0x1000000,  CRC(1711b23d) SHA1(ab628b2ec678839c75245e245297818ef1592d3b) )
7097   ROM_LOAD( "ax1904m01.ic14", 0x4000000, 0x1000000,  CRC(443bfb26) SHA1(6f7751afa0ca55dd0679758b27bed92b31c1b050) )
7098   ROM_LOAD( "ax1905m01.ic15", 0x5000000, 0x1000000,  CRC(eb1cada0) SHA1(459d21d622c72606f1d3095e8a25b6c4adccf8ab) )
7099   ROM_LOAD( "ax1906m01.ic16", 0x6000000, 0x1000000,  CRC(fe6da168) SHA1(d4ab6443383469bb5a4337005de917627a2e21cc) )
7100   ROM_LOAD( "ax1907m01.ic17", 0x7000000, 0x1000000,  CRC(9d3a0520) SHA1(78583fd171b34439f77a04a97ebe3c9d1bab61cc) )
7101
7102   ROM_REGION( 4, "rom_key", 0 )
7103   ROM_LOAD( "ax1901f01.bin", 0, 4, CRC(0283c08d) SHA1(5d62b6769ae7f1fc68bd3db028d782621aaa6f9c) )
72967104ROM_END
72977105
72987106ROM_START( rangrmsn )
7299   ROM_REGION( 0x200000, "awflash", 0)
73007107   AW_BIOS
73017108
7302   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7303        ROM_LOAD( "ax1601p01.ic18", 0x0000000, 0x0800000, CRC(00a74fbb) SHA1(57cc1eedd22d1f553956a825e69a597309ee2bef) )
7304        ROM_LOAD( "ax1601m01.ic11", 0x1000000, 0x1000000, CRC(f34eed33) SHA1(1c171fb8aa95877f81ed78652d4a9ff80f7713ff) )
7305        ROM_LOAD( "ax1602m01.ic12", 0x2000000, 0x1000000, CRC(a7d59efb) SHA1(a40938ce1399babefc8cf02f579a86cf08e211ef) )
7306        ROM_LOAD( "ax1603m01.ic13", 0x3000000, 0x1000000, CRC(7c0aa241) SHA1(3e0e5ff3307dcfa52998fb9b4b14bf54bd056a99) )
7307        ROM_LOAD( "ax1604m01.ic14", 0x4000000, 0x1000000, CRC(d2369144) SHA1(da1eae9957d27d1682c4191780cf51b32dfe6659) )
7308        ROM_LOAD( "ax1605m01.ic15", 0x5000000, 0x1000000, CRC(0c11c1f9) SHA1(0585db60618c5b97f9b7c203baf7e5ac90883ca6) )
7109   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7110   ROM_LOAD( "ax1601p01.ic18", 0x0000000, 0x0800000, CRC(00a74fbb) SHA1(57cc1eedd22d1f553956a825e69a597309ee2bef) )
7111   ROM_LOAD( "ax1601m01.ic11", 0x1000000, 0x1000000, CRC(f34eed33) SHA1(1c171fb8aa95877f81ed78652d4a9ff80f7713ff) )
7112   ROM_LOAD( "ax1602m01.ic12", 0x2000000, 0x1000000, CRC(a7d59efb) SHA1(a40938ce1399babefc8cf02f579a86cf08e211ef) )
7113   ROM_LOAD( "ax1603m01.ic13", 0x3000000, 0x1000000, CRC(7c0aa241) SHA1(3e0e5ff3307dcfa52998fb9b4b14bf54bd056a99) )
7114   ROM_LOAD( "ax1604m01.ic14", 0x4000000, 0x1000000, CRC(d2369144) SHA1(da1eae9957d27d1682c4191780cf51b32dfe6659) )
7115   ROM_LOAD( "ax1605m01.ic15", 0x5000000, 0x1000000, CRC(0c11c1f9) SHA1(0585db60618c5b97f9b7c203baf7e5ac90883ca6) )
7116
7117   ROM_REGION( 4, "rom_key", 0 )
7118   ROM_LOAD( "ax1601f01.bin", 0, 4, CRC(278f1df7) SHA1(bf3e92e0b19dc1604b764382b859e73158d18025) )
73097119ROM_END
73107120
73117121ROM_START( sprtshot )
7312   ROM_REGION( 0x200000, "awflash", 0)
73137122   AW_BIOS
73147123
7315   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7316        ROM_LOAD( "ax0101p01.ic18", 0x0000000, 0x0800000, CRC(b3642b5d) SHA1(85eabd9551aefb825ae8eb6422092fb5a58d60f6) )
7317        ROM_LOAD( "ax0101m01.ic11", 0x1000000, 0x1000000, CRC(1e39184d) SHA1(663e0cb9f43a0f89d9841e04b3d009f6c5e88d5e) )
7318        ROM_LOAD( "ax0102m01.ic12", 0x2000000, 0x1000000, CRC(700764d1) SHA1(310f1606f7bbed1012c119f1ef5d89d231d8489e) )
7319        ROM_LOAD( "ax0103m01.ic13", 0x3000000, 0x1000000, CRC(6144e7a8) SHA1(4d4341082f008dfd93ef5bf32a44c80869ef02a8) )
7320        ROM_LOAD( "ax0104m01.ic14", 0x4000000, 0x1000000, CRC(ccb72150) SHA1(a1032d321c27f9ff43da41f20b8687bf1958ddc9) )
7124   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7125   ROM_LOAD( "ax0101p01.ic18", 0x0000000, 0x0800000, CRC(b3642b5d) SHA1(85eabd9551aefb825ae8eb6422092fb5a58d60f6) )
7126   ROM_LOAD( "ax0101m01.ic11", 0x1000000, 0x1000000, CRC(1e39184d) SHA1(663e0cb9f43a0f89d9841e04b3d009f6c5e88d5e) )
7127   ROM_LOAD( "ax0102m01.ic12", 0x2000000, 0x1000000, CRC(700764d1) SHA1(310f1606f7bbed1012c119f1ef5d89d231d8489e) )
7128   ROM_LOAD( "ax0103m01.ic13", 0x3000000, 0x1000000, CRC(6144e7a8) SHA1(4d4341082f008dfd93ef5bf32a44c80869ef02a8) )
7129   ROM_LOAD( "ax0104m01.ic14", 0x4000000, 0x1000000, CRC(ccb72150) SHA1(a1032d321c27f9ff43da41f20b8687bf1958ddc9) )
7130
7131   ROM_REGION( 4, "rom_key", 0 )
7132   ROM_LOAD( "ax0101f01.bin", 0, 4, CRC(2144df1c) SHA1(9069ca78e7450a285173431b3e52c5c25299e473) )
73217133ROM_END
73227134
73237135ROM_START( xtrmhunt )
7324   ROM_REGION( 0x200000, "awflash", 0)
73257136   AW_BIOS
73267137
7327   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7328   ROM_LOAD("ax2401p01.ic18", 0x0000000, 0x0800000,  CRC(8e2a11f5) SHA1(b5106314fb8d4483254e83ac3982039bb60a78e8) )
7329   ROM_LOAD("ax2401m01.ic11", 0x1000000, 0x1000000,  CRC(76dbc286) SHA1(8f36ca94b8e67c76e0f90b21debc5ac7890f0da1) )
7330   ROM_LOAD("ax2402m01.ic12", 0x2000000, 0x1000000,  CRC(cd590ea2) SHA1(ee5e38bf68e95da665be478ebba9cc5ffed52bb7) )
7331   ROM_LOAD("ax2403m01.ic13", 0x3000000, 0x1000000,  CRC(06f62eb5) SHA1(f7e8d1dda6bb59ca2bc7cfa1105889b9e8e6d55d) )
7332   ROM_LOAD("ax2404m01.ic14", 0x4000000, 0x1000000,  CRC(759ef5cb) SHA1(27ac2d12c6fb358b3d631c017c7b693e5ad95fd7) )
7333   ROM_LOAD("ax2405m01.ic15", 0x5000000, 0x1000000,  CRC(940d77f1) SHA1(eefdfcb92873032dc7d9ff9310bf5ed715c8bf4f) )
7334   ROM_LOAD("ax2406m01.ic16", 0x6000000, 0x1000000,  CRC(cbcf2c5d) SHA1(61362fabcbb3bfc01c996748a7ca65f8a0e02f2f) )
7138   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7139   ROM_LOAD( "ax2401p01.ic18", 0x0000000, 0x0800000,  CRC(8e2a11f5) SHA1(b5106314fb8d4483254e83ac3982039bb60a78e8) )
7140   ROM_LOAD( "ax2401m01.ic11", 0x1000000, 0x1000000,  CRC(76dbc286) SHA1(8f36ca94b8e67c76e0f90b21debc5ac7890f0da1) )
7141   ROM_LOAD( "ax2402m01.ic12", 0x2000000, 0x1000000,  CRC(cd590ea2) SHA1(ee5e38bf68e95da665be478ebba9cc5ffed52bb7) )
7142   ROM_LOAD( "ax2403m01.ic13", 0x3000000, 0x1000000,  CRC(06f62eb5) SHA1(f7e8d1dda6bb59ca2bc7cfa1105889b9e8e6d55d) )
7143   ROM_LOAD( "ax2404m01.ic14", 0x4000000, 0x1000000,  CRC(759ef5cb) SHA1(27ac2d12c6fb358b3d631c017c7b693e5ad95fd7) )
7144   ROM_LOAD( "ax2405m01.ic15", 0x5000000, 0x1000000,  CRC(940d77f1) SHA1(eefdfcb92873032dc7d9ff9310bf5ed715c8bf4f) )
7145   ROM_LOAD( "ax2406m01.ic16", 0x6000000, 0x1000000,  CRC(cbcf2c5d) SHA1(61362fabcbb3bfc01c996748a7ca65f8a0e02f2f) )
7146
7147   ROM_REGION( 4, "rom_key", 0 )
7148   ROM_LOAD( "ax2401f01.bin", 0, 4, CRC(2f578ea4) SHA1(6775daa4b4081186905cc20f56df0f8ab147428b) )
73357149ROM_END
73367150
73377151ROM_START( xtrmhnt2 )
7338   ROM_REGION( 0x200000, "awflash", 0)
73397152   AW_BIOS
73407153
7341   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7342        ROM_LOAD( "610-0752.u3",  0x0000000, 0x1000000, CRC(bab6182e) SHA1(4d25256c81941316887cbb4524a203922f5b7104) )
7343        ROM_LOAD( "610-0752.u1",  0x1000000, 0x1000000, CRC(3086bc47) SHA1(eb7b04db90d296985528f0cfdd4545f184c40b64) )
7344        ROM_LOAD( "610-0752.u2",  0x2000000, 0x1000000, CRC(d3a88b31) SHA1(ccf14367e4e7efbc2cc835f3b001fd6d64302a5e) )
7345        ROM_LOAD( "610-0752.u4",  0x3000000, 0x1000000, CRC(9787f145) SHA1(8445ede0477f70fbdc113810b80356945ce498d2) )
7346        ROM_LOAD( "610-0752.u14", 0x4000000, 0x1000000, CRC(ce83bcc7) SHA1(e2d324a5a7eacbec7b0df9a4b9e276521bb9ab80) )
7347        ROM_LOAD( "610-0752.u15", 0x5000000, 0x1000000, CRC(864a6342) SHA1(fb97532d5dd00f8520fdaf68dfcd1ea627bdf90a) )
7348        ROM_LOAD( "610-0752.u16", 0x6000000, 0x1000000, CRC(8ac71c76) SHA1(080e41e633bf082fc536781541c6031d1ac81939) )
7349        ROM_LOAD( "610-0752.u17", 0x7000000, 0x1000000, CRC(a79fb1fa) SHA1(f75c5b574fd79677b926c595b369e95605a3c848) )
7154   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7155   ROM_LOAD( "610-0752.u3",  0x0000000, 0x1000000, CRC(bab6182e) SHA1(4d25256c81941316887cbb4524a203922f5b7104) )
7156   ROM_LOAD( "610-0752.u1",  0x1000000, 0x1000000, CRC(3086bc47) SHA1(eb7b04db90d296985528f0cfdd4545f184c40b64) )
7157   ROM_LOAD( "610-0752.u2",  0x2000000, 0x1000000, CRC(d3a88b31) SHA1(ccf14367e4e7efbc2cc835f3b001fd6d64302a5e) )
7158   ROM_LOAD( "610-0752.u4",  0x3000000, 0x1000000, CRC(9787f145) SHA1(8445ede0477f70fbdc113810b80356945ce498d2) )
7159   ROM_LOAD( "610-0752.u14", 0x4000000, 0x1000000, CRC(ce83bcc7) SHA1(e2d324a5a7eacbec7b0df9a4b9e276521bb9ab80) )
7160   ROM_LOAD( "610-0752.u15", 0x5000000, 0x1000000, CRC(864a6342) SHA1(fb97532d5dd00f8520fdaf68dfcd1ea627bdf90a) )
7161   ROM_LOAD( "610-0752.u16", 0x6000000, 0x1000000, CRC(8ac71c76) SHA1(080e41e633bf082fc536781541c6031d1ac81939) )
7162   ROM_LOAD( "610-0752.u17", 0x7000000, 0x1000000, CRC(a79fb1fa) SHA1(f75c5b574fd79677b926c595b369e95605a3c848) )
73507163
7164   ROM_REGION( 4, "rom_key", 0 )
7165   ROM_LOAD( "315-6248.bin", 0, 4, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) )
7166
73517167   ROM_REGION( 0x1400000, "network", 0)   // network board
7352        ROM_LOAD( "fpr-24330a.ic2", 0x000000, 0x400000, CRC(8d89877e) SHA1(6caafc49114eb0358e217bc2d1a3ab58a93c8d19) )
7353        ROM_LOAD( "flash128.ic4s", 0x400000, 0x1000000, CRC(866ed675) SHA1(2c4c06935b7ab1876e640cede51713b841833567) )
7168   ROM_LOAD( "fpr-24330a.ic2", 0x000000, 0x400000, CRC(8d89877e) SHA1(6caafc49114eb0358e217bc2d1a3ab58a93c8d19) )
7169   ROM_LOAD( "flash128.ic4s", 0x400000, 0x1000000, CRC(866ed675) SHA1(2c4c06935b7ab1876e640cede51713b841833567) )
73547170ROM_END
73557171
73567172ROM_START( anmlbskt )
7357   ROM_REGION( 0x200000, "awflash", 0)
73587173   AW_BIOS
73597174
73607175   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
r12704r12705
73667181   ROM_LOAD( "vm2001f01.u15", 0x5000000, 0x800000, CRC(2bb1be28) SHA1(fda7967d6c0341a608c52087ae3d461554760435) )
73677182   ROM_LOAD( "vm2001f01.u16", 0x6000000, 0x800000, CRC(3de23e27) SHA1(d3aae2a7e5c78fc3bf8e296392d8f893961d946f) )
73687183   ROM_LOAD( "vm2001f01.u17", 0x7000000, 0x800000, CRC(3de23e27) SHA1(d3aae2a7e5c78fc3bf8e296392d8f893961d946f) )
7184
7185   ROM_REGION( 4, "rom_key", 0 )
7186   ROM_LOAD( "ax0401f01.bin", 0, 4, CRC(394b52c9) SHA1(aa05d82e7c384f536cf68af48b5c0eb89e6f5dfa) )
73697187ROM_END
73707188
73717189ROM_START( dolphin )
7372   ROM_REGION( 0x200000, "awflash", 0)
73737190   AW_BIOS
73747191
7375   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7192   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
73767193   ROM_LOAD( "ax0401p01.ic18", 0x0000000, 0x0800000, CRC(195d6328) SHA1(cf3b5699f81235919dd3b1974d2ecb0376cb4552) )
73777194   ROM_LOAD( "ax0401m01.ic11", 0x1000000, 0x1000000, CRC(5e5dca57) SHA1(e0623c84f66cada37d4c9399a7a8fc6866933144) )
73787195   ROM_LOAD( "ax0402m01.ic12", 0x2000000, 0x1000000, CRC(77dd4771) SHA1(dcd23b8ddc82eab2f325266ffd7ed3fbc1bcdf71) )
73797196   ROM_LOAD( "ax0403m01.ic13", 0x3000000, 0x1000000, CRC(911d0674) SHA1(eec35badcfbfe412b7104a86c2111f5a1b5fb5cd) )
73807197   ROM_LOAD( "ax0404m01.ic14", 0x4000000, 0x1000000, CRC(f82a4ca3) SHA1(da686d86e176a9f24874d2916b1932f03a99a52d) )
73817198   ROM_LOAD( "ax0405m01.ic15", 0x5000000, 0x1000000, CRC(b88298d7) SHA1(490c3ec471018895b7268ee33498dddaccbbfd5a) )
7199
7200   ROM_REGION( 4, "rom_key", 0 )
7201   ROM_LOAD( "ax0401f01.bin", 0, 4, CRC(394b52c9) SHA1(aa05d82e7c384f536cf68af48b5c0eb89e6f5dfa) )
73827202ROM_END
73837203
73847204ROM_START( demofist )
7385   ROM_REGION( 0x200000, "awflash", 0)
73867205   AW_BIOS
73877206
7388   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7207   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
73897208   ROM_LOAD( "ax0601p01.ic18", 0x0000000, 0x0800000, CRC(0efb38ad) SHA1(9400e37efe3e936474d74400ebdf28ad0869b67b) )
73907209   ROM_LOAD( "ax0601m01.ic11", 0x1000000, 0x1000000, CRC(12fda2c7) SHA1(3afbac221ffe249386e4cb50b4edd013d9a40062) )
73917210   ROM_LOAD( "ax0602m01.ic12", 0x2000000, 0x1000000, CRC(aea61fdf) SHA1(0a088848bbf7a47df8b44b69bf72ed0d4a1088f8) )
r12704r12705
73947213   ROM_LOAD( "ax0605m01.ic15", 0x5000000, 0x1000000, CRC(18d8437e) SHA1(fe2e189e40a89141335e754268d29d46e3eb3bb8) )
73957214   ROM_LOAD( "ax0606m01.ic16", 0x6000000, 0x1000000, CRC(42c81617) SHA1(1cc686af5e3fc56143836e3dcc0067893f82fcf9) )
73967215   ROM_LOAD( "ax0607m01.ic17", 0x7000000, 0x1000000, CRC(96e5aa84) SHA1(e9841f550f2ef409d97004542bcadabb6b9e84af) )
7216
7217   ROM_REGION( 4, "rom_key", 0 )
7218   ROM_LOAD( "ax0601f01.bin", 0, 4, CRC(25c9a3ae) SHA1(060c3fa1f8cd7d41785630db22e107790ade702a) )
73977219ROM_END
73987220
73997221ROM_START( rumblef )
7400   ROM_REGION( 0x200000, "awflash", 0)
74017222   AW_BIOS
74027223
7403   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7224   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
74047225   ROM_LOAD( "ax1801p01.ic18", 0x0000000, 0x0800000, CRC(2f7fb163) SHA1(bf819d798d9a3a7bc754e111a3f53b9db6d6042a) )
74057226   ROM_LOAD( "ax1801m01.ic11", 0x1000000, 0x1000000, CRC(c38aa61c) SHA1(e2f688a0aa8b0119f5fd3d53c8904e035d43a4b1) )
74067227   ROM_LOAD( "ax1802m01.ic12", 0x2000000, 0x1000000, CRC(72e0ebc8) SHA1(e85300a405ea14c4c9d857eb9685c93faaca1d56) )
r12704r12705
74097230   ROM_LOAD( "ax1805m01.ic15", 0x5000000, 0x1000000, CRC(3d3f8e0d) SHA1(364a0bda890722b9fb72171f96c742b8f3fef23e) )
74107231   ROM_LOAD( "ax1806m01.ic16", 0x6000000, 0x1000000, CRC(ac2751bb) SHA1(5070fa12bf109ab87e8f7ea46ac4ae78a73105da) )
74117232   ROM_LOAD( "ax1807m01.ic17", 0x7000000, 0x1000000, CRC(3b2fbdb0) SHA1(f9f7e06785d3a07282247aaedd9999aa7c2670b9) )
7233
7234   ROM_REGION( 4, "rom_key", 0 )
7235   ROM_LOAD( "ax1801f01.bin", 0, 4, CRC(5b2e82d9) SHA1(de0d9c2511c72b95777897403cb63b690f74dfa1))
74127236ROM_END
74137237
74147238ROM_START( ngbc )
7415   ROM_REGION( 0x200000, "awflash", 0)
74167239   AW_BIOS
74177240
7418   ROM_REGION( 0xf000000, "user1", ROMREGION_ERASE)
7241   ROM_REGION( 0xf000000, "rom_board", ROMREGION_ERASE)
74197242   ROM_LOAD( "ax3301p01.fmem1", 0x0000000, 0x0800000, CRC(6dd78275) SHA1(72d4cab58dbcebd666db21aeef190378ef447580) )
74207243   ROM_LOAD( "ax3301m01.mrom1", 0x1000000, 0x2000000, CRC(e6013de9) SHA1(ccbc7c2e76153348646d75938d5c008dc80df17d) )
74217244   ROM_LOAD( "ax3301m01.mrom2", 0x3000000, 0x2000000, CRC(f7cfef6c) SHA1(c9e6231499a9c9c8650d9e61f34ff1fcce8d442c) )
r12704r12705
74247247   ROM_LOAD( "ax3301m01.mrom5", 0x9000000, 0x2000000, CRC(f6668aaa) SHA1(6a78f8f0c7d7a71854ff87329290d38970cfb476) )
74257248   ROM_LOAD( "ax3301m01.mrom6", 0xb000000, 0x2000000, CRC(5cf32fbd) SHA1(b6ae0abe5791b3d6f8db07b8c8ca22219a153801) )
74267249   ROM_LOAD( "ax3301m01.mrom7", 0xd000000, 0x2000000, CRC(26d9da53) SHA1(0015b4be670005a451274de68279b4302fc42a97) )
7250
7251   ROM_REGION( 4, "rom_key", 0 )
7252   ROM_LOAD( "ax3301f01.bin", 0, 4, CRC(9afe949b) SHA1(4f7b039f3287da61a53a2d012993bfb57e1459bd) )
74277253ROM_END
74287254
74297255ROM_START( kofnw )
7430   ROM_REGION( 0x200000, "awflash", 0)
74317256   AW_BIOS
74327257
7433   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7258   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
74347259   ROM_LOAD( "ax2201p01.ic18", 0x0000000, 0x0800000, CRC(27aab918) SHA1(41c5ddd8bd4c91481750606ab44aa115b5fe01d0) )
74357260   ROM_LOAD( "ax2201m01.ic11", 0x1000000, 0x1000000, CRC(22ea665b) SHA1(292c92c9ae43eea2d1c27cedfb89c3956b8dea32) )
74367261   ROM_LOAD( "ax2202m01.ic12", 0x2000000, 0x1000000, CRC(7fad1bea) SHA1(89f3f88af48973a4685955d86ef97a1487b8e7a8) )
r12704r12705
74387263   ROM_LOAD( "ax2204m01.ic14", 0x4000000, 0x1000000, CRC(6ffbeb04) SHA1(975062cf364589dbdd5c5cb5ca945f76d87fc120) )
74397264   ROM_LOAD( "ax2205m01.ic15", 0x5000000, 0x1000000, CRC(2851b791) SHA1(566ef95ea066b7bf548986085670242be217befc) )
74407265   ROM_LOAD( "ax2206m01.ic16", 0x6000000, 0x1000000, CRC(e53eb965) SHA1(f50cd53a5859f081d8a278d24a519c9d9b49ab96) )
7266
7267   ROM_REGION( 4, "rom_key", 0 )
7268   ROM_LOAD( "ax2201f01.bin", 0, 4, CRC(b1fff0c8) SHA1(d83177e3672378a2bbc08653b4b73704333ca30a) )
74417269ROM_END
74427270
74437271ROM_START( kofnwj )
7444   ROM_REGION( 0x200000, "awflash", 0)
74457272   AW_BIOS
74467273
7447   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7448    ROM_LOAD( "ax2201p01.ic18", 0x0000000, 0x0800000, CRC(ecc4a5c7) SHA1(97c2ef2be95b39bc978474a8243740df50255a8b) )
7449    /* these are taken from the above set, game *seems* to work fine with these ... */
7274   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7275       ROM_LOAD( "ax2201p01.ic18", 0x0000000, 0x0800000, CRC(ecc4a5c7) SHA1(97c2ef2be95b39bc978474a8243740df50255a8b) )
7276       /* these are taken from the above set, game *seems* to work fine with these ... */
74507277   ROM_LOAD( "ax2201m01.ic11", 0x1000000, 0x1000000, CRC(22ea665b) SHA1(292c92c9ae43eea2d1c27cedfb89c3956b8dea32) )
74517278   ROM_LOAD( "ax2202m01.ic12", 0x2000000, 0x1000000, CRC(7fad1bea) SHA1(89f3f88af48973a4685955d86ef97a1487b8e7a8) )
74527279   ROM_LOAD( "ax2203m01.ic13", 0x3000000, 0x1000000, CRC(78986ca4) SHA1(5a6c8c12955573f33361d2c6f20f85de35ac7bae) )
74537280   ROM_LOAD( "ax2204m01.ic14", 0x4000000, 0x1000000, CRC(6ffbeb04) SHA1(975062cf364589dbdd5c5cb5ca945f76d87fc120) )
74547281   ROM_LOAD( "ax2205m01.ic15", 0x5000000, 0x1000000, CRC(2851b791) SHA1(566ef95ea066b7bf548986085670242be217befc) )
74557282   ROM_LOAD( "ax2206m01.ic16", 0x6000000, 0x1000000, CRC(e53eb965) SHA1(f50cd53a5859f081d8a278d24a519c9d9b49ab96) )
7283
7284   ROM_REGION( 4, "rom_key", 0 )
7285   ROM_LOAD( "ax2201f01.bin", 0, 4, CRC(b1fff0c8) SHA1(d83177e3672378a2bbc08653b4b73704333ca30a) )
74567286ROM_END
74577287
74587288ROM_START( kov7sprt )
7459   ROM_REGION( 0x200000, "awflash", 0)
74607289   AW_BIOS
74617290
7462   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7463        ROM_LOAD( "ax1301p01.ic18", 0x0000000, 0x0800000, CRC(6833a334) SHA1(646aaa578e09ad23bc9c7f4fbdfb3c1486916fd3) )
7464        ROM_LOAD( "ax1301m01.ic11", 0x1000000, 0x1000000, CRC(58ae7ca1) SHA1(e91975697b797ea05488ace649cbb9964b4cd500) )
7465        ROM_LOAD( "ax1301m02.ic12", 0x2000000, 0x1000000, CRC(871ea03f) SHA1(6806910832ca271a9240aca8e91279556e5b0cb7) )
7466        ROM_LOAD( "ax1301m03.ic13", 0x3000000, 0x1000000, CRC(abc328bc) SHA1(d9271d4e5abe76d31de0f60a5c106260338d42e9) )
7467        ROM_LOAD( "ax1301m04.ic14", 0x4000000, 0x1000000, CRC(25a176d1) SHA1(6d815bf6acb645fead060733660e24fb0d44282d) )
7468        ROM_LOAD( "ax1301m05.ic15", 0x5000000, 0x1000000, CRC(e6573a93) SHA1(0666e52d0088263f28938e4c8aae201e604ec1f2) )
7469        ROM_LOAD( "ax1301m06.ic16", 0x6000000, 0x1000000, CRC(cb8cacb4) SHA1(5d008e8a934451b9bfa33fedfd492c86d9226ef5) )
7470        ROM_LOAD( "ax1301m07.ic17", 0x7000000, 0x1000000, CRC(0ca92213) SHA1(115c50fa55e6de3439de23e74621695510c6a7ba) )
7291   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7292   ROM_LOAD( "ax1301p01.ic18", 0x0000000, 0x0800000, CRC(6833a334) SHA1(646aaa578e09ad23bc9c7f4fbdfb3c1486916fd3) )
7293   ROM_LOAD( "ax1301m01.ic11", 0x1000000, 0x1000000, CRC(58ae7ca1) SHA1(e91975697b797ea05488ace649cbb9964b4cd500) )
7294   ROM_LOAD( "ax1301m02.ic12", 0x2000000, 0x1000000, CRC(871ea03f) SHA1(6806910832ca271a9240aca8e91279556e5b0cb7) )
7295   ROM_LOAD( "ax1301m03.ic13", 0x3000000, 0x1000000, CRC(abc328bc) SHA1(d9271d4e5abe76d31de0f60a5c106260338d42e9) )
7296   ROM_LOAD( "ax1301m04.ic14", 0x4000000, 0x1000000, CRC(25a176d1) SHA1(6d815bf6acb645fead060733660e24fb0d44282d) )
7297   ROM_LOAD( "ax1301m05.ic15", 0x5000000, 0x1000000, CRC(e6573a93) SHA1(0666e52d0088263f28938e4c8aae201e604ec1f2) )
7298   ROM_LOAD( "ax1301m06.ic16", 0x6000000, 0x1000000, CRC(cb8cacb4) SHA1(5d008e8a934451b9bfa33fedfd492c86d9226ef5) )
7299   ROM_LOAD( "ax1301m07.ic17", 0x7000000, 0x1000000, CRC(0ca92213) SHA1(115c50fa55e6de3439de23e74621695510c6a7ba) )
7300
7301   ROM_REGION( 4, "rom_key", 0 )
7302   ROM_LOAD( "ax1301f01.bin", 0, 4, CRC(2a189821) SHA1(d15c9df83782d49ea85e201cba844f5a9e33f15c) )
74717303ROM_END
74727304
74737305ROM_START( ggisuka )
7474   ROM_REGION( 0x200000, "awflash", 0)
74757306   AW_BIOS
74767307
7477   ROM_REGION( 0x9000000, "user1", ROMREGION_ERASE)
7478        ROM_LOAD( "ax1201p01.ic18", 0x0000000, 0x0800000, CRC(0a78d52c) SHA1(e9006dc43cd11d5ba49a092a1dff31dc10700c28) )
7479        ROM_LOAD( "ax1201m01.ic10", 0x0800000, 0x1000000, CRC(df96ce30) SHA1(25a9f743b1c2b11896d0c7a2dc1c198fc977aaca) )   // second half is blank
7480        ROM_LOAD( "ax1202m01.ic11", 0x1000000, 0x1000000, CRC(dfc6fd67) SHA1(f9d35b18a03d22f70feda42d314b0f9dd54eea55) )
7481        ROM_LOAD( "ax1203m01.ic12", 0x2000000, 0x1000000, CRC(bf623df9) SHA1(8b9a8e8100ff6d2ce9a982ab8eb1d542f1c7af03) )
7482        ROM_LOAD( "ax1204m01.ic13", 0x3000000, 0x1000000, CRC(c80c3930) SHA1(5c39fde36e2ebbfe72967d7d0202eb454a8d3bbe) )
7483        ROM_LOAD( "ax1205m01.ic14", 0x4000000, 0x1000000, CRC(e99a269d) SHA1(a52148b82b0338b8bad8b52985302eaf81a4cfde) )
7484        ROM_LOAD( "ax1206m01.ic15", 0x5000000, 0x1000000, CRC(807ab795) SHA1(17c86b1a56333c05b68ff84f83e964d013c1819c) )
7485        ROM_LOAD( "ax1207m01.ic16", 0x6000000, 0x1000000, CRC(6636d1b8) SHA1(9bd8fc114557f6fbe772f85eeb246f7336d4255e) )
7486        ROM_LOAD( "ax1208m01.ic17", 0x7000000, 0x1000000, CRC(38bda476) SHA1(0234a6f5fbaf5e958b3ba0db311dff157f80addc) )
7308   ROM_REGION( 0x9000000, "rom_board", ROMREGION_ERASE)
7309   ROM_LOAD( "ax1201p01.ic18", 0x0000000, 0x0800000, CRC(0a78d52c) SHA1(e9006dc43cd11d5ba49a092a1dff31dc10700c28) )
7310   ROM_LOAD( "ax1201m01.ic10", 0x0800000, 0x1000000, CRC(df96ce30) SHA1(25a9f743b1c2b11896d0c7a2dc1c198fc977aaca) )   // second half is blank
7311   ROM_LOAD( "ax1202m01.ic11", 0x1000000, 0x1000000, CRC(dfc6fd67) SHA1(f9d35b18a03d22f70feda42d314b0f9dd54eea55) )
7312   ROM_LOAD( "ax1203m01.ic12", 0x2000000, 0x1000000, CRC(bf623df9) SHA1(8b9a8e8100ff6d2ce9a982ab8eb1d542f1c7af03) )
7313   ROM_LOAD( "ax1204m01.ic13", 0x3000000, 0x1000000, CRC(c80c3930) SHA1(5c39fde36e2ebbfe72967d7d0202eb454a8d3bbe) )
7314   ROM_LOAD( "ax1205m01.ic14", 0x4000000, 0x1000000, CRC(e99a269d) SHA1(a52148b82b0338b8bad8b52985302eaf81a4cfde) )
7315   ROM_LOAD( "ax1206m01.ic15", 0x5000000, 0x1000000, CRC(807ab795) SHA1(17c86b1a56333c05b68ff84f83e964d013c1819c) )
7316   ROM_LOAD( "ax1207m01.ic16", 0x6000000, 0x1000000, CRC(6636d1b8) SHA1(9bd8fc114557f6fbe772f85eeb246f7336d4255e) )
7317   ROM_LOAD( "ax1208m01.ic17", 0x7000000, 0x1000000, CRC(38bda476) SHA1(0234a6f5fbaf5e958b3ba0db311dff157f80addc) )
7318
7319   ROM_REGION( 4, "rom_key", 0 )
7320   ROM_LOAD( "ax1201f01.bin", 0, 4, CRC(325cf843) SHA1(c51d19a4fce37433f37e7ce23801a7fc4e09013d) )
74877321ROM_END
74887322
74897323ROM_START( maxspeed )
7490   ROM_REGION( 0x200000, "awflash", 0)
74917324   AW_BIOS
74927325
7493   ROM_REGION( 0x9000000, "user1", ROMREGION_ERASE)
7494        ROM_LOAD( "ax0501p01.ic18", 0x0000000, 0x0800000, CRC(e1651867) SHA1(49caf82f4b111da312b14bb0a9c31e3732b4b24e) )
7495        ROM_LOAD( "ax0501m01.ic11", 0x0800000, 0x1000000, CRC(4a847a59) SHA1(7808bcd357b85861082b426dbe34a20ae7016f6a) )
7496        ROM_LOAD( "ax0502m01.ic12", 0x1000000, 0x1000000, CRC(2580237f) SHA1(2e92c940f95edae33d6a7e8a071544a9083a0fd6) )
7497        ROM_LOAD( "ax0503m01.ic13", 0x2000000, 0x1000000, CRC(e5a3766b) SHA1(1fe6e072adad27ac43c0bff04e3c448678aabc18) )
7498        ROM_LOAD( "ax0504m01.ic14", 0x3000000, 0x1000000, CRC(7955b55a) SHA1(927f58d6961e702c2a8afce79bac5e5cff3dfed6) )
7499        ROM_LOAD( "ax0505m01.ic15", 0x4000000, 0x1000000, CRC(e8ccc660) SHA1(a5f414f200a0d41e958430d0fc2d4e1fda1cc67c) )
7326   ROM_REGION( 0x9000000, "rom_board", ROMREGION_ERASE)
7327   ROM_LOAD( "ax0501p01.ic18", 0x0000000, 0x0800000, CRC(e1651867) SHA1(49caf82f4b111da312b14bb0a9c31e3732b4b24e) )
7328   ROM_LOAD( "ax0501m01.ic11", 0x0800000, 0x1000000, CRC(4a847a59) SHA1(7808bcd357b85861082b426dbe34a20ae7016f6a) )
7329   ROM_LOAD( "ax0502m01.ic12", 0x1000000, 0x1000000, CRC(2580237f) SHA1(2e92c940f95edae33d6a7e8a071544a9083a0fd6) )
7330   ROM_LOAD( "ax0503m01.ic13", 0x2000000, 0x1000000, CRC(e5a3766b) SHA1(1fe6e072adad27ac43c0bff04e3c448678aabc18) )
7331   ROM_LOAD( "ax0504m01.ic14", 0x3000000, 0x1000000, CRC(7955b55a) SHA1(927f58d6961e702c2a8afce79bac5e5cff3dfed6) )
7332   ROM_LOAD( "ax0505m01.ic15", 0x4000000, 0x1000000, CRC(e8ccc660) SHA1(a5f414f200a0d41e958430d0fc2d4e1fda1cc67c) )
7333
7334   ROM_REGION( 4, "rom_key", 0 )
7335   ROM_LOAD( "ax0501f01.bin", 0, 4, CRC(c35d9a95) SHA1(bf260caf33821be51014b06480a11ec982fa4fcd) )
75007336ROM_END
75017337
75027338ROM_START( vfurlong )
7503   ROM_REGION( 0x200000, "awflash", 0)
75047339   AW_BIOS
75057340
7506   ROM_REGION( 0x9000000, "user1", ROMREGION_ERASE)
7507        ROM_LOAD( "ax2001p01.ic18", 0x0000000, 0x0800000, CRC(17ea9aa9) SHA1(c68500e9b3407a9d4b20f2678718ce475f179f7d) )
7508        ROM_LOAD( "ax2001m01.ic11", 0x1000000, 0x1000000, CRC(64460b24) SHA1(044857d6593897d303622e005a63ca7b3acd7453) )
7509        ROM_LOAD( "ax2002m01.ic12", 0x2000000, 0x1000000, CRC(d4da357f) SHA1(c462cddec9a369a1a5595676de76499d56683ea9) )
7510        ROM_LOAD( "ax2003m01.ic13", 0x3000000, 0x1000000, CRC(ad046ad7) SHA1(ac7c46e458595714e327526354e1111fb25b44e0) )
7511        ROM_LOAD( "ax2004m01.ic14", 0x4000000, 0x1000000, CRC(4d555d7c) SHA1(a5eccc920bdb7ad9cf57c0e1ef6a905c6b9eee45) )
7512        ROM_LOAD( "ax2005m01.ic15", 0x5000000, 0x1000000, CRC(785208e2) SHA1(6ba5bd3901c5b1d71abcc8d833a011bd4abae6b6) )
7513        ROM_LOAD( "ax2006m01.ic16", 0x6000000, 0x1000000, CRC(8134ec55) SHA1(843e473d4f99237ded641cce9515b7802cfe3742) )
7514        ROM_LOAD( "ax2007m01.ic17", 0x7000000, 0x1000000, CRC(d0557e8a) SHA1(df8057597eb690bd18c5d26736f5d4f86e3b1225) )
7341   ROM_REGION( 0x9000000, "rom_board", ROMREGION_ERASE)
7342   ROM_LOAD( "ax2001p01.ic18", 0x0000000, 0x0800000, CRC(17ea9aa9) SHA1(c68500e9b3407a9d4b20f2678718ce475f179f7d) )
7343   ROM_LOAD( "ax2001m01.ic11", 0x1000000, 0x1000000, CRC(64460b24) SHA1(044857d6593897d303622e005a63ca7b3acd7453) )
7344   ROM_LOAD( "ax2002m01.ic12", 0x2000000, 0x1000000, CRC(d4da357f) SHA1(c462cddec9a369a1a5595676de76499d56683ea9) )
7345   ROM_LOAD( "ax2003m01.ic13", 0x3000000, 0x1000000, CRC(ad046ad7) SHA1(ac7c46e458595714e327526354e1111fb25b44e0) )
7346   ROM_LOAD( "ax2004m01.ic14", 0x4000000, 0x1000000, CRC(4d555d7c) SHA1(a5eccc920bdb7ad9cf57c0e1ef6a905c6b9eee45) )
7347   ROM_LOAD( "ax2005m01.ic15", 0x5000000, 0x1000000, CRC(785208e2) SHA1(6ba5bd3901c5b1d71abcc8d833a011bd4abae6b6) )
7348   ROM_LOAD( "ax2006m01.ic16", 0x6000000, 0x1000000, CRC(8134ec55) SHA1(843e473d4f99237ded641cce9515b7802cfe3742) )
7349   ROM_LOAD( "ax2007m01.ic17", 0x7000000, 0x1000000, CRC(d0557e8a) SHA1(df8057597eb690bd18c5d26736f5d4f86e3b1225) )
7350
7351   ROM_REGION( 4, "rom_key", 0 )
7352   ROM_LOAD( "ax2001f01.bin", 0, 4, CRC(42d45ab8) SHA1(25bc9c046ff085e5219109316fbc0c1fae183d1f) )
75157353ROM_END
75167354
75177355ROM_START( salmankt )
7518   ROM_REGION( 0x200000, "awflash", 0)
75197356   AW_BIOS
75207357
7521   ROM_REGION( 0x9000000, "user1", ROMREGION_ERASE)
7522        ROM_LOAD( "ax1401p01.ic18", 0x0000000, 0x0800000, CRC(28d779e0) SHA1(dab785a595de5f474c18c713e672949176a5b1b5) )
7523        ROM_LOAD( "ax1401m01.ic11", 0x1000000, 0x1000000, CRC(fd7af845) SHA1(0c8f5a91662e46d5c187a0758af95082183cdf69) )
7524        ROM_LOAD( "ax1402m01.ic12", 0x2000000, 0x1000000, CRC(88d458a7) SHA1(c661196d5a9640013995c8aa6a5bea057d984f87) )
7525        ROM_LOAD( "ax1403m01.ic13", 0x3000000, 0x1000000, CRC(074f7c4b) SHA1(4955e4f333d15d5d9cc69bb9658f29a37e912012) )
7526        ROM_LOAD( "ax1404m01.ic14", 0x4000000, 0x1000000, CRC(af4e3829) SHA1(18d9e8a8d8e930ad697b686a98f31ea175f5fd4a) )
7527        ROM_LOAD( "ax1405m01.ic15", 0x5000000, 0x1000000, CRC(b548446f) SHA1(8b4661e601e36c067dff2530aff4f7ea76e1c21e) )
7528        ROM_LOAD( "ax1406m01.ic16", 0x6000000, 0x1000000, CRC(437673e6) SHA1(66f7e5f246ebbb1bdbf074da41ec16bf32720a82) )
7529        ROM_LOAD( "ax1407m01.ic17", 0x7000000, 0x1000000, CRC(6b6acc0a) SHA1(a8c692c875271a0806460caa79c67fd756231273) )
7358   ROM_REGION( 0x9000000, "rom_board", ROMREGION_ERASE)
7359   ROM_LOAD( "ax1401p01.ic18", 0x0000000, 0x0800000, CRC(28d779e0) SHA1(dab785a595de5f474c18c713e672949176a5b1b5) )
7360   ROM_LOAD( "ax1401m01.ic11", 0x1000000, 0x1000000, CRC(fd7af845) SHA1(0c8f5a91662e46d5c187a0758af95082183cdf69) )
7361   ROM_LOAD( "ax1402m01.ic12", 0x2000000, 0x1000000, CRC(88d458a7) SHA1(c661196d5a9640013995c8aa6a5bea057d984f87) )
7362   ROM_LOAD( "ax1403m01.ic13", 0x3000000, 0x1000000, CRC(074f7c4b) SHA1(4955e4f333d15d5d9cc69bb9658f29a37e912012) )
7363   ROM_LOAD( "ax1404m01.ic14", 0x4000000, 0x1000000, CRC(af4e3829) SHA1(18d9e8a8d8e930ad697b686a98f31ea175f5fd4a) )
7364   ROM_LOAD( "ax1405m01.ic15", 0x5000000, 0x1000000, CRC(b548446f) SHA1(8b4661e601e36c067dff2530aff4f7ea76e1c21e) )
7365   ROM_LOAD( "ax1406m01.ic16", 0x6000000, 0x1000000, CRC(437673e6) SHA1(66f7e5f246ebbb1bdbf074da41ec16bf32720a82) )
7366   ROM_LOAD( "ax1407m01.ic17", 0x7000000, 0x1000000, CRC(6b6acc0a) SHA1(a8c692c875271a0806460caa79c67fd756231273) )
7367
7368   ROM_REGION( 4, "rom_key", 0 )
7369   ROM_LOAD( "ax1401f01.bin", 0, 4, CRC(67e742ae) SHA1(7c2e955bcb753ff8756db4bd75409583ffbadf62) )
75307370ROM_END
75317371
75327372ROM_START( ftspeed )
7533   ROM_REGION( 0x200000, "awflash", 0)
75347373   AW_BIOS
75357374
7536   ROM_REGION( 0x9000000, "user1", ROMREGION_ERASE)
7537        ROM_LOAD( "ax1701p01.ic18", 0x0000000, 0x0800000, CRC(480cade7) SHA1(487d4b27d7e5196d8321c5a80175ec7b1b32c1e8) )
7538        ROM_LOAD( "ax1701m01.ic11", 0x1000000, 0x1000000, CRC(7dcdc784) SHA1(5eeef9a760a0b090ed5aad8b7bdee2baa69a088b) )
7539        ROM_LOAD( "ax1702m01.ic12", 0x2000000, 0x1000000, CRC(06c9bf85) SHA1(636262dca7140397436646754fb204b97aa08ce9) )
7540        ROM_LOAD( "ax1703m01.ic13", 0x3000000, 0x1000000, CRC(8f8e0224) SHA1(2a9a17ed726913c00bf1c6a94bdd4fb32e800868) )
7541        ROM_LOAD( "ax1704m01.ic14", 0x4000000, 0x1000000, CRC(fbb4bb16) SHA1(b582680a880166c5bbdd2ad77b7903fedf9b01ad) )
7542        ROM_LOAD( "ax1705m01.ic15", 0x5000000, 0x1000000, CRC(d9e69723) SHA1(22ed4dab76320a286b66215607bda5adf21304d1) )
7543        ROM_LOAD( "ax1706m01.ic16", 0x6000000, 0x1000000, CRC(804b2eb2) SHA1(fcca02a5a8c09eb16548255115fb105c9c49c4e0) )
7375   ROM_REGION( 0x9000000, "rom_board", ROMREGION_ERASE)
7376   ROM_LOAD( "ax1701p01.ic18", 0x0000000, 0x0800000, CRC(480cade7) SHA1(487d4b27d7e5196d8321c5a80175ec7b1b32c1e8) )
7377   ROM_LOAD( "ax1701m01.ic11", 0x1000000, 0x1000000, CRC(7dcdc784) SHA1(5eeef9a760a0b090ed5aad8b7bdee2baa69a088b) )
7378   ROM_LOAD( "ax1702m01.ic12", 0x2000000, 0x1000000, CRC(06c9bf85) SHA1(636262dca7140397436646754fb204b97aa08ce9) )
7379   ROM_LOAD( "ax1703m01.ic13", 0x3000000, 0x1000000, CRC(8f8e0224) SHA1(2a9a17ed726913c00bf1c6a94bdd4fb32e800868) )
7380   ROM_LOAD( "ax1704m01.ic14", 0x4000000, 0x1000000, CRC(fbb4bb16) SHA1(b582680a880166c5bbdd2ad77b7903fedf9b01ad) )
7381   ROM_LOAD( "ax1705m01.ic15", 0x5000000, 0x1000000, CRC(d9e69723) SHA1(22ed4dab76320a286b66215607bda5adf21304d1) )
7382   ROM_LOAD( "ax1706m01.ic16", 0x6000000, 0x1000000, CRC(804b2eb2) SHA1(fcca02a5a8c09eb16548255115fb105c9c49c4e0) )
7383
7384   ROM_REGION( 4, "rom_key", 0 )
7385   ROM_LOAD( "ax1701f01.bin", 0, 4, CRC(f3f03c35) SHA1(2a8329a29cdcc0219e9360cc573c0f3ad44d0175) )
75447386ROM_END
75457387
75467388ROM_START( kofxi )
7547   ROM_REGION( 0x200000, "awflash", 0)
75487389   AW_BIOS
75497390
7550   ROM_REGION( 0xf000000, "user1", ROMREGION_ERASE)
7551        ROM_LOAD( "ax3201p01.fmem1", 0x0000000, 0x0800000, CRC(6dbdd71b) SHA1(cce3897b104f5d923d8136485fc80eb9717ff4b5) )
7552        ROM_LOAD( "ax3201m01.mrom1", 0x1000000, 0x2000000, CRC(7f9d6af9) SHA1(001064ad1b8c3408efe799dc766c2728dc6512a9) )
7553        ROM_LOAD( "ax3202m01.mrom2", 0x3000000, 0x2000000, CRC(1ae40afa) SHA1(9ee7957c86cc3a71e6971ddcd906a82c5b1e16f1) )
7554        ROM_LOAD( "ax3203m01.mrom3", 0x5000000, 0x2000000, CRC(8c5e3bfd) SHA1(b5443e2a1b88642cc57c5287a3122376c2d48de9) )
7555        ROM_LOAD( "ax3204m01.mrom4", 0x7000000, 0x2000000, CRC(ba97f80c) SHA1(36f672fe833e13f0bab036b02c39123066327e20) )
7556        ROM_LOAD( "ax3205m01.mrom5", 0x9000000, 0x2000000, CRC(3c747067) SHA1(54b7ff73d618e2e4e40c125c6cfe99016e69ad1a) )
7557        ROM_LOAD( "ax3206m01.mrom6", 0xb000000, 0x2000000, CRC(cb81e5f5) SHA1(07faee02a58ac9c600ab3cdd525d22c16b35222d) )
7558        ROM_LOAD( "ax3207m01.mrom7", 0xd000000, 0x2000000, CRC(164f6329) SHA1(a72c8cbe4ac7b98edda3d4434f6c81a370b8c39b) )
7391   ROM_REGION( 0xf000000, "rom_board", ROMREGION_ERASE)
7392   ROM_LOAD( "ax3201p01.fmem1", 0x0000000, 0x0800000, CRC(6dbdd71b) SHA1(cce3897b104f5d923d8136485fc80eb9717ff4b5) )
7393   ROM_LOAD( "ax3201m01.mrom1", 0x1000000, 0x2000000, CRC(7f9d6af9) SHA1(001064ad1b8c3408efe799dc766c2728dc6512a9) )
7394   ROM_LOAD( "ax3202m01.mrom2", 0x3000000, 0x2000000, CRC(1ae40afa) SHA1(9ee7957c86cc3a71e6971ddcd906a82c5b1e16f1) )
7395   ROM_LOAD( "ax3203m01.mrom3", 0x5000000, 0x2000000, CRC(8c5e3bfd) SHA1(b5443e2a1b88642cc57c5287a3122376c2d48de9) )
7396   ROM_LOAD( "ax3204m01.mrom4", 0x7000000, 0x2000000, CRC(ba97f80c) SHA1(36f672fe833e13f0bab036b02c39123066327e20) )
7397   ROM_LOAD( "ax3205m01.mrom5", 0x9000000, 0x2000000, CRC(3c747067) SHA1(54b7ff73d618e2e4e40c125c6cfe99016e69ad1a) )
7398   ROM_LOAD( "ax3206m01.mrom6", 0xb000000, 0x2000000, CRC(cb81e5f5) SHA1(07faee02a58ac9c600ab3cdd525d22c16b35222d) )
7399   ROM_LOAD( "ax3207m01.mrom7", 0xd000000, 0x2000000, CRC(164f6329) SHA1(a72c8cbe4ac7b98edda3d4434f6c81a370b8c39b) )
7400
7401   ROM_REGION( 4, "rom_key", 0 )
7402   ROM_LOAD( "ax3201f01.bin", 0, 4, CRC(065d7fc6) SHA1(e4f18126e9f4e6747ffc5d0664766986fc07c127) )
75597403ROM_END
75607404
75617405ROM_START( dirtypig )
7562   ROM_REGION( 0x200000, "awflash", 0)
75637406   AW_BIOS
75647407
7565   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7566        ROM_LOAD( "837-14695.u3",  0x0000000, 0x1000000, CRC(9fdd7d07) SHA1(56d580dda116823ea5dc5e1bd5154463a476866a) )
7567        ROM_LOAD( "837-14695.u1",  0x1000000, 0x1000000, CRC(a91d2fcb) SHA1(8414386c09ba36ea581c8161f6cf2a13cc5ae516) )
7568        ROM_LOAD( "837-14695.u2",  0x2000000, 0x1000000, CRC(4d82152f) SHA1(a448983d4e81eb6485b62f23a6c99d1112a20c21) )
7569        ROM_LOAD( "837-14695.u4",  0x3000000, 0x1000000, CRC(3342f237) SHA1(e617b0e1f8d8da9783c58ab98eb91de2363ec36f) )
7570        ROM_LOAD( "837-14695.u14", 0x4000000, 0x1000000, CRC(55470242) SHA1(789036189ae5488a9da565774bdf91b49cd8264e) )
7571        ROM_LOAD( "837-14695.u15", 0x5000000, 0x1000000, CRC(d239a549) SHA1(71f3c1c2ae2a9b6f09f30e7be3bb11ba111276ae) )
7572        ROM_LOAD( "837-14695.u16", 0x6000000, 0x1000000, CRC(730180a4) SHA1(017b82e2d2744695e3e521d35a8511ecc1c8ab43) )
7573        ROM_LOAD( "837-14695.u17", 0x7000000, 0x1000000, CRC(16bb5992) SHA1(18772587272aba1d50a48d384f472276c3b48d96) )
7408   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7409   ROM_LOAD( "837-14695.u3",  0x0000000, 0x1000000, CRC(9fdd7d07) SHA1(56d580dda116823ea5dc5e1bd5154463a476866a) )
7410   ROM_LOAD( "837-14695.u1",  0x1000000, 0x1000000, CRC(a91d2fcb) SHA1(8414386c09ba36ea581c8161f6cf2a13cc5ae516) )
7411   ROM_LOAD( "837-14695.u2",  0x2000000, 0x1000000, CRC(4d82152f) SHA1(a448983d4e81eb6485b62f23a6c99d1112a20c21) )
7412   ROM_LOAD( "837-14695.u4",  0x3000000, 0x1000000, CRC(3342f237) SHA1(e617b0e1f8d8da9783c58ab98eb91de2363ec36f) )
7413   ROM_LOAD( "837-14695.u14", 0x4000000, 0x1000000, CRC(55470242) SHA1(789036189ae5488a9da565774bdf91b49cd8264e) )
7414   ROM_LOAD( "837-14695.u15", 0x5000000, 0x1000000, CRC(d239a549) SHA1(71f3c1c2ae2a9b6f09f30e7be3bb11ba111276ae) )
7415   ROM_LOAD( "837-14695.u16", 0x6000000, 0x1000000, CRC(730180a4) SHA1(017b82e2d2744695e3e521d35a8511ecc1c8ab43) )
7416   ROM_LOAD( "837-14695.u17", 0x7000000, 0x1000000, CRC(16bb5992) SHA1(18772587272aba1d50a48d384f472276c3b48d96) )
7417
7418   ROM_REGION( 4, "rom_key", 0 )
7419   ROM_LOAD( "837-14695.bin", 0, 4, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) )
75747420ROM_END
75757421
75767422ROM_START( mslug6 )
7577   ROM_REGION( 0x200000, "awflash", 0)
75787423   AW_BIOS
75797424
7580   ROM_REGION( 0xf000000, "user1", ROMREGION_ERASE)
7425   ROM_REGION( 0xf000000, "rom_board", ROMREGION_ERASE)
75817426   ROM_LOAD( "ax3001p01.fmem1", 0x0000000, 0x0800000, CRC(af67dbce) SHA1(5aba108caf3e4ced6994bc26e752d4e225c231e8) )
75827427   ROM_LOAD( "ax3001m01.mrom1", 0x1000000, 0x2000000, CRC(e56417ee) SHA1(27692ad5c1093aff0973d2aafd01a5e30c7bfbbe) )
75837428   ROM_LOAD( "ax3002m01.mrom2", 0x3000000, 0x2000000, CRC(1be3bbc1) SHA1(d75ce5c855c9c4eeacdbf84d440c73a94de060fe) )
75847429   ROM_LOAD( "ax3003m01.mrom3", 0x5000000, 0x2000000, CRC(4fe37370) SHA1(85d51db94c3e34265e37b636d6545ed2801ba5a6) )
75857430   ROM_LOAD( "ax3004m01.mrom4", 0x7000000, 0x2000000, CRC(2f4c4c6f) SHA1(5815c28fdaf0429003986e725c0015fe4c08721f) )
7586   ROM_COPY( "user1", 0x7000000, 0x9000000, 0x2000000)
7431   ROM_COPY( "rom_board", 0x7000000, 0x9000000, 0x2000000)
7432
7433   ROM_REGION( 4, "rom_key", 0 )
7434   ROM_LOAD( "ax3001f01.bin", 0, 4, CRC(0b9939e9) SHA1(4ca1225c7c9993542a67035a054ac579ed021de5) )
75877435ROM_END
75887436
75897437ROM_START( samsptk )
7590   ROM_REGION( 0x200000, "awflash", 0)
75917438   AW_BIOS
75927439
7593   ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE)
7440   ROM_REGION( 0x10000000, "rom_board", ROMREGION_ERASE)
75947441   ROM_LOAD( "ax2901p01.fmem1", 0x0000000, 0x0800000, CRC(58e0030b) SHA1(ed8a66833beeb56d83770123eff28df0f25221d1) )
75957442   ROM_LOAD( "ax2901m01.mrom1", 0x1000000, 0x2000000, CRC(dbbbd90d) SHA1(102ee0b249a3e0ca2f659b6c515816c522ad78d0) )
75967443   ROM_LOAD( "ax2902m01.mrom2", 0x3000000, 0x2000000, CRC(a3bd7890) SHA1(9b8d934d6ebc3ef688cd8a6de47657a0663fea10) )
r12704r12705
75997446   ROM_LOAD( "ax2905m01.mrom5", 0x9000000, 0x2000000, CRC(429877ba) SHA1(88e1f3bc682b18d331e328ef8754065109cf9bda) )
76007447   ROM_LOAD( "ax2906m01.mrom6", 0xb000000, 0x2000000, CRC(cb95298d) SHA1(5fb5d5a0d6801df61101a1b23de0c14ff29ef654) )
76017448   ROM_LOAD( "ax2907m01.mrom7", 0xd000000, 0x2000000, CRC(48015081) SHA1(3c0a0a6dc9ab7bf889579477699e612c3092f9bf) )
7449
7450   ROM_REGION( 4, "rom_key", 0 )
7451   ROM_LOAD( "ax2901f01.bin", 0, 4, CRC(8a6267aa) SHA1(9705bed35acb87d578f0efcf4f74b2a4b1a7be2e) )
76027452ROM_END
76037453
76047454ROM_START( ggx15 )
7605   ROM_REGION( 0x200000, "awflash", 0)
76067455   AW_BIOS
76077456
7608   ROM_REGION( 0x8000000, "user1", ROMREGION_ERASE)
7609        ROM_LOAD( "ax0801p01.ic18", 0x0000000, 0x0800000, CRC(d920c6bb) SHA1(ab34bbef3c71396447bc5322d8e8786041fc832a) )
7610        ROM_LOAD( "ax0801m01.ic11", 0x1000000, 0x1000000, CRC(61879b2d) SHA1(9592fbd979cef9d8f465cd92d0f00b9c13ecf7ba) )
7611        ROM_LOAD( "ax0802m01.ic12", 0x2000000, 0x1000000, CRC(c0ff124d) SHA1(dd403d10de2f097fbaa6b93bc311e2b9e893828d) )
7612        ROM_LOAD( "ax0803m01.ic13", 0x3000000, 0x1000000, CRC(4400c89a) SHA1(4e13536c01103ecfbfc9e3e33746ceae7a91a520) )
7613        ROM_LOAD( "ax0804m01.ic14", 0x4000000, 0x1000000, CRC(70f58ab4) SHA1(cd2def19bbad945c87567f8d28f3a2a179a7f7f6) )
7614        ROM_LOAD( "ax0805m01.ic15", 0x5000000, 0x1000000, CRC(72740e45) SHA1(646eded89f10008c9176cd6772a8ac9d1bf4271a) )
7615        ROM_LOAD( "ax0806m01.ic16", 0x6000000, 0x1000000, CRC(3bf8ecba) SHA1(43e7fbf21d8ee60bab72ce558640730fd9c3e3b8) )
7616        ROM_LOAD( "ax0807m01.ic17", 0x7000000, 0x1000000, CRC(e397dd79) SHA1(5fec32dc19dd71ef0d451f8058186f998015723b) )
7457   ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
7458   ROM_LOAD( "ax0801p01.ic18", 0x0000000, 0x0800000, CRC(d920c6bb) SHA1(ab34bbef3c71396447bc5322d8e8786041fc832a) )
7459   ROM_LOAD( "ax0801m01.ic11", 0x1000000, 0x1000000, CRC(61879b2d) SHA1(9592fbd979cef9d8f465cd92d0f00b9c13ecf7ba) )
7460   ROM_LOAD( "ax0802m01.ic12", 0x2000000, 0x1000000, CRC(c0ff124d) SHA1(dd403d10de2f097fbaa6b93bc311e2b9e893828d) )
7461   ROM_LOAD( "ax0803m01.ic13", 0x3000000, 0x1000000, CRC(4400c89a) SHA1(4e13536c01103ecfbfc9e3e33746ceae7a91a520) )
7462   ROM_LOAD( "ax0804m01.ic14", 0x4000000, 0x1000000, CRC(70f58ab4) SHA1(cd2def19bbad945c87567f8d28f3a2a179a7f7f6) )
7463   ROM_LOAD( "ax0805m01.ic15", 0x5000000, 0x1000000, CRC(72740e45) SHA1(646eded89f10008c9176cd6772a8ac9d1bf4271a) )
7464   ROM_LOAD( "ax0806m01.ic16", 0x6000000, 0x1000000, CRC(3bf8ecba) SHA1(43e7fbf21d8ee60bab72ce558640730fd9c3e3b8) )
7465   ROM_LOAD( "ax0807m01.ic17", 0x7000000, 0x1000000, CRC(e397dd79) SHA1(5fec32dc19dd71ef0d451f8058186f998015723b) )
7466
7467   ROM_REGION( 4, "rom_key", 0 )
7468   ROM_LOAD( "ax0801f01.bin", 0, 4, CRC(a36e5017) SHA1(fd763a4c708fe37c7561ba5b5d0b8d2118cff16b) )
76177469ROM_END
76187470
76197471ROM_START( rumblef2 )
7620   ROM_REGION( 0x200000, "awflash", 0)
76217472   AW_BIOS
76227473
7623   ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE)
7474   ROM_REGION( 0x10000000, "rom_board", ROMREGION_ERASE)
76247475   ROM_LOAD( "ax3401p01.fmem1", 0x0000000, 0x0800000, CRC(a33601cf) SHA1(2dd60a9c3a2517f2257ab69288fa95645de133fa) )
76257476   ROM_LOAD( "ax3401m01.mrom1", 0x1000000, 0x2000000, CRC(60894d4c) SHA1(5b21af3c7c82d4d64bfd8498c26283111ada1298) )
76267477   ROM_LOAD( "ax3402m01.mrom2", 0x3000000, 0x2000000, CRC(e4224cc9) SHA1(dcab06fcf48cda286f93d2b37f03a83abf3230cb) )
76277478   ROM_LOAD( "ax3403m01.mrom3", 0x5000000, 0x2000000, CRC(081c0edb) SHA1(63a3f1b5f9d7ca4367868c492236406f23996cc3) )
76287479   ROM_LOAD( "ax3404m01.mrom4", 0x7000000, 0x2000000, CRC(a426b443) SHA1(617aab42e432a80b0663281fb7faa6c14ef4f149) )
76297480   ROM_LOAD( "ax3405m01.mrom5", 0x9000000, 0x2000000, CRC(4766ce56) SHA1(349b82013a75905ae5520b14a87702c9038a5def) )
7630   ROM_COPY( "user1", 0x9000000, 0xb000000, 0x2000000)
7481   ROM_COPY( "rom_board", 0x9000000, 0xb000000, 0x2000000)
7482
7483   ROM_REGION( 4, "rom_key", 0 )
7484   ROM_LOAD( "ax3401f01.bin", 0, 4, CRC(952919a1) SHA1(d343fdbbd1d8b651401133f21facc1584bb66c04) )
76317485ROM_END
76327486
76337487/* All games have the regional titles at the start of the IC22 rom in the following order
r12704r12705
76587512/* 13636 */ GAME( 1998, hotd2,    hod2bios, naomi,   hotd2,    hotd2,   ROT0, "Sega", "House of the Dead 2", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "airlbios" needed */
76597513/* 13636 */ GAME( 1998, hotd2o,   hotd2,    naomi,   hotd2,    hotd2,   ROT0, "Sega", "House of the Dead 2 (original)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "airlbios" needed */
76607514/* 13842 */ GAME( 1999, f355,     f355bios, naomi,   naomi,    0,       ROT0, "Sega", "Ferrari F355 Challenge", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "f355bios" needed */
7661/* 13950 */ GAME( 1999, f355twin, f355bios, naomi,  naomi,    0,       ROT0, "Sega", "Ferrari F355 Challenge (Twin)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "f355bios" needed */
7515/* 13950 */ GAME( 1999, f355twin, f355bios, naomim2, naomi,    0,       ROT0, "Sega", "Ferrari F355 Challenge (Twin)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "f355bios" needed */
76627516
76637517/* 840-xxxxx (Sega Naomi cart games)*/
76647518/* 0001 */ GAME( 1998, dybbnao,  naomi,    naomi,   dybbnao,  naomi,    ROT0, "Sega", "Dynamite Baseball NAOMI (JPN)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7665/* 0002 */ GAME( 1999, crzytaxi, naomi,    naomi,   crzytaxi, naomi,    ROT0, "Sega", "Crazy Taxi (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7666/* 0003 */ GAME( 1999, zombrvn,  naomi,    naomi,   zombrvn,  naomi,    ROT0, "Sega", "Zombie Revenge (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7667/* 0005 */ GAME( 1999, alpilota, naomi,    naomi,   alpilota, naomi,    ROT0, "Sega", "Airline Pilots (Rev A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "airlbios" needed */
7668/* 0007 */ GAME( 1999, ggram2,   naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Giant Gram: All Japan Pro Wrestling 2 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7669/* 0010 */ GAME( 1999, vs2_2k,   naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Virtua Striker 2 Ver. 2000 (JPN, USA, EXP, KOR, AUS) (Rev C)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7670/* 0011 */ GAME( 1999, toyfight, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Toy Fighter", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7671/* 0012 */ GAME( 1999, smlg99,   naomi,    naomi,   dybbnao,  naomi,    ROT0, "Sega", "Super Major League '99", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7672/* 0013 */ GAME( 1999, jambo,    naomi,    naomi,   jambo,    naomi,    ROT0, "Sega", "Jambo! Safari (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7673/* 0015 */ GAME( 1999, vtennis,  naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Virtua Tennis (USA, EXP, KOR, AUS) / Power Smash (JPN)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7674/* 0016 */ GAME( 1999, derbyoc,  naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Derby Owners Club (JPN, USA, EXP, KOR, AUS) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7675/* 0017 */ GAME( 1999, otrigger, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "OutTrigger (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7676/* 0018 */ GAME( 1999, sgtetris, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Sega Tetris", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7677/* 0019 */ GAME( 1999, dybb99,   naomi,    naomi,   dybbnao,  naomi,    ROT0, "Sega", "Dynamite Baseball '99 (JPN) / World Series '99 (USA, EXP, KOR, AUS) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7678/* 0020 */ GAME( 1999, samba,    naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Samba De Amigo (JPN) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7679/* 0021 */ GAME( 2000, virnbao,  virnba,   naomi,   naomi,    naomi,    ROT0, "Sega", "Virtua NBA (JPN, USA, EXP, KOR, AUS) (original)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7519/* 0002 */ GAME( 1999, crzytaxi, naomi,    naomim2, crzytaxi, naomi,    ROT0, "Sega", "Crazy Taxi (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7520/* 0003 */ GAME( 1999, zombrvn,  naomi,    naomim2, zombrvn,  naomi,    ROT0, "Sega", "Zombie Revenge (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7521/* 0005 */ GAME( 1999, alpilota, naomi,    naomim2, alpilota, naomi,    ROT0, "Sega", "Airline Pilots (Rev A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "airlbios" needed */
7522/* 0007 */ GAME( 1999, ggram2,   naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Giant Gram: All Japan Pro Wrestling 2 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7523/* 0010 */ GAME( 1999, vs2_2k,   naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Virtua Striker 2 Ver. 2000 (JPN, USA, EXP, KOR, AUS) (Rev C)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7524/* 0011 */ GAME( 1999, toyfight, naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Toy Fighter", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7525/* 0012 */ GAME( 1999, smlg99,   naomi,    naomim2, dybbnao,  naomi,    ROT0, "Sega", "Super Major League '99", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7526/* 0013 */ GAME( 1999, jambo,    naomi,    naomim2, jambo,    naomi,    ROT0, "Sega", "Jambo! Safari (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7527/* 0015 */ GAME( 1999, vtennis,  naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Virtua Tennis (USA, EXP, KOR, AUS) / Power Smash (JPN)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7528/* 0016 */ GAME( 1999, derbyoc,  naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Derby Owners Club (JPN, USA, EXP, KOR, AUS) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7529/* 0017 */ GAME( 1999, otrigger, naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "OutTrigger (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7530/* 0018 */ GAME( 1999, sgtetris, naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Sega Tetris", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7531/* 0019 */ GAME( 1999, dybb99,   naomi,    naomim2, dybbnao,  naomi,    ROT0, "Sega", "Dynamite Baseball '99 (JPN) / World Series '99 (USA, EXP, KOR, AUS) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7532/* 0020 */ GAME( 1999, samba,    naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Samba De Amigo (JPN) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7533/* 0021 */ GAME( 2000, virnbao,  virnba,   naomim2, naomi,    naomi,    ROT0, "Sega", "Virtua NBA (JPN, USA, EXP, KOR, AUS) (original)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
76807534/* 0021-01 */ GAME( 2000,virnba, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Virtua NBA (JPN, USA, EXP, KOR, AUS)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
76817535// 0022 Touch de Uno! 2
7682/* 0023 */ GAME( 2000, 18wheelr, naomi,    naomi,  18wheelr, naomi,    ROT0, "Sega", "18 Wheeler Deluxe (Rev A) (JPN)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7536/* 0023 */ GAME( 2000, 18wheelr, naomi,    naomim2, 18wheelr, naomi,    ROT0, "Sega", "18 Wheeler Deluxe (Rev A) (JPN)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
76837537// 0025 Mars TV
76847538/* 0026 */ GAME( 2000, totd,     naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "The Typing of the Dead (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
76857539/* 0027 */ GAME( 2000, smarinef, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Sega Marine Fishing", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7686/* 0028 */ GAME( 2000, vonot,    naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Virtual On Oratorio Tangram M.S.B.S. ver5.66 2000 Edition", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7687/* 0030 */ GAME( 2000, qmegamis, naomi,    naomi,   naomi,    qmegamis, ROT0, "Sega", "Quiz Ah Megamisama (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7688/* 0035 */ GAME( 2000, sstrkfgt, naomi,    naomi,   sstrkfgt, naomi,    ROT0, "Sega", "Sega Strike Fighter (Rev A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7540/* 0028 */ GAME( 2000, vonot,    naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Virtual On Oratorio Tangram M.S.B.S. ver5.66 2000 Edition", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7541/* 0030 */ GAME( 2000, qmegamis, naomi,    naomim1, naomi,    qmegamis, ROT0, "Sega", "Quiz Ah Megamisama (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7542/* 0035 */ GAME( 2000, sstrkfgt, naomi,    naomim2, sstrkfgt, naomi,    ROT0, "Sega", "Sega Strike Fighter (Rev A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
76897543// 0037 18 Wheeler - American Pro Trucker
7690/* 0039 */ GAME( 2000, gram2000, naomi,    naomi,   naomi,    gram2000, ROT0, "Sega", "Giant Gram 2000 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7691/* 0040 */ GAME( 2000, wwfroyal, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "WWF Royal Rumble (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7692/* 0041 */ GAME( 2000, slasho,   naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Slashout (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7693/* 0042 */ GAME( 2001, f355twn2, f355bios, naomi,   naomi,    0,        ROT0, "Sega", "Ferrari F355 Challenge 2 (Twin)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "f355bios" needed */
7694/* 0043 */ GAME( 2000, crackndj, naomi,    naomi,   crackndj, naomi,    ROT0, "Sega", "Crackin' DJ", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7695/* 0044 */ GAME( 2000, csmasho,  csmash,   naomi,   naomi,    naomi,    ROT0, "Sega", "Cosmic Smash (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7696/* 0044 */ GAME( 2000, csmash,   naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Cosmic Smash (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7697/* 0047 */ GAME( 2000, samba2k,  naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Samba de Amigo ver. 2000", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7698// 0048 Alien Front
7544/* 0039 */ GAME( 2000, gram2000, naomi,    naomim1, naomi,    gram2000, ROT0, "Sega", "Giant Gram 2000 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7545/* 0040 */ GAME( 2000, wwfroyal, naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "WWF Royal Rumble (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7546/* 0041 */ GAME( 2000, slasho,   naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Slashout (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7547/* 0042 */ GAME( 2001, f355twn2, f355bios, naomim2, naomi,    0,        ROT0, "Sega", "Ferrari F355 Challenge 2 (Twin)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "f355bios" needed */
7548/* 0043 */ GAME( 2000, crackndj, naomi,    naomim2, crackndj, naomi,    ROT0, "Sega", "Crackin' DJ", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7549/* 0044 */ GAME( 2000, csmasho,  csmash,   naomim2, naomi,    naomi,    ROT0, "Sega", "Cosmic Smash (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7550/* 0044 */ GAME( 2000, csmash,   naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Cosmic Smash (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7551/* 0047 */ GAME( 2000, samba2k,  naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Samba de Amigo ver. 2000", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7552/* 0048 */ GAME( 2001, alienfnt, naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Alien Front", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
76997553/* 0052 */ GAME( 2000, derbyo2k, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Derby Owners Club 2000 (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77007554/* 0064 */ GAME( 2001, wrungp,   naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Wave Runner GP", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77017555/* 0073 */ GAME( 2001, inunoos,  naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Inu No Osanpo / Dog Walking (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77027556/* 0083 */ GAME( 2001, derbyoc2, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Derby Owners Club II (JPN, USA, EXP, KOR, AUS) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7703/* 0084 */ GAME( 2001, vtenis2c, naomi,    naomi,  naomi,    naomi,    ROT0, "Sega", "Virtua Tennis 2 / Power Smash 2 (JPN) (USA, EXP, KOR, AUS) (Cart, Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7557/* 0084 */ GAME( 2001, vtenis2c, naomi,    naomim1, naomi,    naomi,    ROT0, "Sega", "Virtua Tennis 2 / Power Smash 2 (JPN) (USA, EXP, KOR, AUS) (Cart, Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77047558/* 0088 */ GAME( 2001, derbyocw, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev D)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77057559/* 0088 */ GAME( 2001, drbyocwc, derbyocw, naomi,   naomi,    naomi,    ROT0, "Sega", "Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev C)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7706/* 0098 */ GAME( 2002, shootopl, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Shootout Pool", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7707/* 0126 */ GAME( 2003, oinori,   naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Oinori-Daimyoujin Matsuri", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7708/* 0128 */ GAME( 2002, shootpl,  naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Shootout Pool (JPN, USA, KOR, AUS) / Shootout Pool Prize (EXP)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7709/* 0140 */ GAME( 2004, kick4csh, naomi,    naomi,   naomi,    kick4csh, ROT0, "Sega", "Kick '4' Cash", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7560/* 0098 */ GAME( 2002, shootopl, naomi,    naomim1, naomi,    naomi,    ROT0, "Sega", "Shootout Pool", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7561/* 0126 */ GAME( 2003, oinori,   naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Oinori-daimyoujin Matsuri", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7562/* 0128 */ GAME( 2002, shootpl,  naomi,    naomim1, naomi,    naomi,    ROT0, "Sega", "Shootout Pool (JPN, USA, KOR, AUS) / Shootout Pool Prize (EXP)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7563/* 0140 */ GAME( 2004, kick4csh, naomi,    naomim1, naomi,    kick4csh, ROT0, "Sega", "Kick '4' Cash", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77107564// 0150 MushiKing - The King Of Beetle
77117565// 0166 Touch De Zunou (Japan)
77127566// 0166 Touch De Zunou (Japan) (Rev A)
7713/* 0170 */ GAME( 2007, pokasuka, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Pokasuka Ghost", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7714/* 0175 */ GAME( 2007, asndynmt, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Asian Dynamite", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7715/* 00?? */ GAME( 1999, ringout,  naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Ring Out 4x4", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7716/* 00?? */ GAME( 1999, alpiltdx, airlbios, naomi,   naomi,    0,        ROT0, "Sega", "Airline Pilots Deluxe (Rev B)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "airlbios" needed */
7717/* 0??? */ GAME( 2001, shootplm, naomi,    naomi,   naomi,    naomi,    ROT0, "Sega", "Shootout Pool Medal", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7567/* 0170 */ GAME( 2007, pokasuka, naomi,    naomim4, naomi,    naomi,    ROT0, "Sega", "Pokasuka Ghost", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7568/* 0175 */ GAME( 2007, asndynmt, naomi,    naomim4, naomi,    naomi,    ROT0, "Sega", "Asian Dynamite", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7569/* 00?? */ GAME( 1999, ringout,  naomi,    naomim2, naomi,    naomi,    ROT0, "Sega", "Ring Out 4x4", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7570/* 00?? */ GAME( 1999, alpiltdx, airlbios, naomim2, naomi,    0,        ROT0, "Sega", "Airline Pilots Deluxe (Rev B)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) /* specific BIOS "airlbios" needed */
7571/* 0??? */ GAME( 2001, shootplm, naomi,    naomim1, naomi,    naomi,    ROT0, "Sega", "Shootout Pool Medal", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77187572// 00?? Crackin' DJ Part 2
77197573// 00?? Touch de Uno!
77207574
r12704r12705
77237577/* 0061 */ GAME( 2001, vstrik3c, naomi2,   naomi2,   naomi,    naomi2,   ROT0, "Sega", "Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev C)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77247578/* 0061 */ GAME( 2001, vstrik3cb,vstrik3c, naomi2,   naomi,    naomi2,   ROT0, "Sega", "Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77257579/* 0062 */ GAME( 2002, clubkrte, naomi2,   naomi2,   naomi,    naomi2,   ROT0, "Sega", "Club Kart: European Session (Rev D)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7726/* 0080 */ GAME( 2002, vf4cart,  naomi2,   naomi2,  naomi,    naomi2,   ROT0, "Sega", "Virtua Fighter 4 (Cartridge)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7580/* 0080 */ GAME( 2002, vf4cart,  naomi2,   naomi2m2, naomi,    naomi2,   ROT0, "Sega", "Virtua Fighter 4 (Cartridge)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77277581/* 0087 */ GAME( 2002, kingrt66, naomi2,   naomi2,   naomi,    naomi2,   ROT0, "Sega", "King of Route 66 (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77287582// 0095 Soul Surfer
7729/* 0106 */ GAME( 2002, vf4evoct, naomi2,   naomi2,  naomi,    vf4evoct, ROT0, "Sega", "Virtua Fighter 4 Evolution (Cartridge)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7583/* 0106 */ GAME( 2002, vf4evoct, naomi2,   naomi2m1, naomi,    vf4evoct, ROT0, "Sega", "Virtua Fighter 4 Evolution (Cartridge)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77307584// 0129 Club Kart Prize
77317585
77327586/* 841-xxxxx ("Licensed by Sega" Naomi cart games)*/
7733/* 0001 */ GAME( 1999, pstone,   naomi,    naomi,   naomi,    naomi,    ROT0, "Capcom",          "Power Stone (JPN, USA, EUR, ASI, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7734/* 0002 */ GAME( 1999, suchie3,  naomi,    naomi,   naomi_mp, naomi_mp, ROT0, "Jaleco",          "Idol Janshi Suchie-Pai 3 (JPN)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7735/* 0003 */ GAME( 1999, doa2,     naomi,    naomi,   naomi,    naomi,    ROT0, "Tecmo",           "Dead or Alive 2 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7736/* 0003 */ GAME( 2000, doa2m,    doa2,     naomi,   naomi,    naomi,    ROT0, "Tecmo",           "Dead or Alive 2 Millennium (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7587/* 0001 */ GAME( 1999, pstone,   naomi,    naomim2, naomi,    naomi,    ROT0, "Capcom",          "Power Stone (JPN, USA, EUR, ASI, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7588/* 0002 */ GAME( 1999, suchie3,  naomi,    naomim2, naomi_mp, naomi_mp, ROT0, "Jaleco",          "Idol Janshi Suchie-Pai 3 (JPN)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7589/* 0003 */ GAME( 1999, doa2,     naomi,    naomim2, naomi,    naomi,    ROT0, "Tecmo",           "Dead or Alive 2 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7590/* 0003 */ GAME( 2000, doa2m,    doa2,     naomim2, naomi,    naomi,    ROT0, "Tecmo",           "Dead or Alive 2 Millennium (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77377591/* 0004 */ GAME( 1999, shangril, naomi,    naomi,   naomi_mp, naomi_mp, ROT0, "Marvelous Ent.",  "Dengen Tenshi Taisen Janshi Shangri-la (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7738/* 0005 */ GAME( 1999, spawn,    naomi,    naomi,   naomi,    naomi,    ROT0, "Capcom",          "Spawn In the Demon's Hand (JPN, USA, EUR, ASI, AUS) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7739/* 0006 */ GAME( 1999, puyoda,   naomi,    naomi,   naomi,    naomi,    ROT0, "Compile",         "Puyo Puyo Da!", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7740/* 0007-02 */ GAME( 2000,mvsc2,  naomi,    naomi,   naomi,    mvsc2,    ROT0, "Capcom",          "Marvel Vs. Capcom 2 New Age of Heroes (JPN, USA, EUR, ASI, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7741/* 0008 */ GAME( 2000, pstone2,  naomi,    naomi,   naomi,    naomi,    ROT0, "Capcom",          "Power Stone 2 (JPN, USA, EUR, ASI, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7742/* 0011 */ GAME( 2000, capsnk,   naomi,    naomi,   naomi,    naomi,    ROT0, "Capcom / SNK",    "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev C)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7743/* 0011 */ GAME( 2000, capsnka,  capsnk,   naomi,   naomi,    naomi,    ROT0, "Capcom / SNK",    "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7744/* 0012 */ GAME( 2000, cspike,   naomi,    naomi,   naomi,    naomi,    ROT0, "Psikyo / Capcom", "Gun Spike (JPN) / Cannon Spike (USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7745/* 0013 */ GAME( 2000, ggx,      naomi,    naomi,   naomi,    naomi,    ROT0, "Arc System Works","Guilty Gear X (JPN)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7746/* 0014 */ GAME( 2000, gwing2,   naomi,    naomi,   naomi,    naomi,    ROT0, "Takumi / Capcom", "Giga Wing 2 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7747/* 0015 */ GAME( 2000, pjustic,  naomi,    naomi,   naomi,    naomi,    ROT0, "Capcom",          "Moero Justice Gakuen (JPN) / Project Justice (USA, EXP, KOR, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7748/* 0016 */ GAME( 2000, deathcox, naomi,    naomi,   naomi,    naomi,    ROT0, "Ecole Software",  "Death Crimson OX (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7749/* 0017 */ GAME( 2001, gundmct,  naomi,    naomi,   naomi,    naomi,    ROT0, "Capcom / Banpresto",       "Mobile Suit Gundam: Federation Vs. Zeon (2001-02-08)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7750/* 0020 */ GAME( 2001, zerogu2,  naomi,    naomi,   naomi,    naomi,    ROT0, "Psikyo",          "Zero Gunner 2", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7751/* 0057 */ GAME( 2007, sl2007,   naomi,    naomi,   naomi,    naomi,    ROT270, "Triangle Service", "Shooting Love 2007", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7752/* 0058 */ GAME( 2008, ausfache, naomi,    naomi,   naomi,    naomi,    ROT0, "Subtle Style",    "Akatsuki Blitzkampf Ausf Achse", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7753/* 0059 */ GAME( 2008, illvelo,  naomi,    naomi,   naomi,    naomi,    ROT270, "Milestone",     "Illvelo (Illmatic Envelope)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7592/* 0005 */ GAME( 1999, spawn,    naomi,    naomim2, naomi,    naomi,    ROT0, "Capcom",          "Spawn In the Demon's Hand (JPN, USA, EUR, ASI, AUS) (Rev B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7593/* 0006 */ GAME( 1999, puyoda,   naomi,    naomim2, naomi,    naomi,    ROT0, "Compile",         "Puyo Puyo Da!", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7594/* 0007-02 */ GAME( 2000,mvsc2,  naomi,    naomim1, naomi,    mvsc2,    ROT0, "Capcom",          "Marvel Vs. Capcom 2 New Age of Heroes (JPN, USA, EUR, ASI, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7595/* 0008 */ GAME( 2000, pstone2,  naomi,    naomim2, naomi,    naomi,    ROT0, "Capcom",          "Power Stone 2 (JPN, USA, EUR, ASI, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7596/* 0011 */ GAME( 2000, capsnk,   naomi,    naomim2, naomi,    naomi,    ROT0, "Capcom / SNK",    "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev C)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7597/* 0011 */ GAME( 2000, capsnka,  capsnk,   naomim2, naomi,    naomi,    ROT0, "Capcom / SNK",    "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7598/* 0012 */ GAME( 2000, cspike,   naomi,    naomim2, naomi,    naomi,    ROT0, "Psikyo / Capcom", "Gun Spike (JPN) / Cannon Spike (USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7599/* 0013 */ GAME( 2000, ggx,      naomi,    naomim2, naomi,    naomi,    ROT0, "Arc System Works","Guilty Gear X (JPN)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7600/* 0014 */ GAME( 2000, gwing2,   naomi,    naomim2, naomi,    naomi,    ROT0, "Takumi / Capcom", "Giga Wing 2 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7601/* 0015 */ GAME( 2000, pjustic,  naomi,    naomim2, naomi,    naomi,    ROT0, "Capcom",          "Moero Justice Gakuen (JPN) / Project Justice (USA, EXP, KOR, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7602/* 0016 */ GAME( 2000, deathcox, naomi,    naomim2, naomi,    naomi,    ROT0, "Ecole Software",  "Death Crimson OX (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7603/* 0017 */ GAME( 2001, gundmct,  naomi,    naomi,   naomi,    naomi,    ROT0, "Banpresto",       "Mobile Suit Gundam: Federation Vs. Zeon (2001-02-08)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7604/* 0020 */ GAME( 2001, zerogu2,  naomi,    naomim2, naomi,    naomi,    ROT0, "Psikyo",          "Zero Gunner 2", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7605/* 0057 */ GAME( 2007, sl2007,   naomi,    naomim4, naomi,    naomi,    ROT270, "Triangle Service", "Shooting Love 2007", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7606/* 0058 */ GAME( 2008, ausfache, naomi,    naomim4, naomi,    naomi,    ROT0, "Subtle Style",    "Akatsuki Blitzkampf Ausf Achse", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7607/* 0059 */ GAME( 2008, illvelo,  naomi,    naomim4, naomi,    naomi,    ROT270, "Milestone",     "Illvelo (Illmatic Envelope)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77547608// 0060 Mamonoro - Mamoru-kun wa Norowarete Shimatta!
77557609// 0061 Melty Blood Actress Again
77567610// 0061 Melty Blood Actress Again (Rev A)
77577611// 0062 Radilgy Noar
7758/* HMG016007 */ GAME( 2001, hmgeo, naomi,   naomi,  naomi,    naomi,    ROT0, "Capcom",          "Heavy Metal Geomatrix (JPN, USA, EUR, ASI, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7612/* HMG016007 */ GAME( 2001, hmgeo, naomi,   naomim2, naomi,    naomi,    ROT0, "Capcom",          "Heavy Metal Geomatrix (JPN, USA, EUR, ASI, AUS) (Rev A)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77597613
77607614/* Cart games on Namco custom ROM board */
7761/* 25209801 */ GAME( 2000, wldkicks, naomi, naomi,  naomi,    naomi,    ROT0, "Capcom / Namco", "World Kicks", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7615/* 25209801 */ GAME( 2000, wldkicks, naomi, naomim2, naomi,    naomi,    ROT0, "Capcom / Namco", "World Kicks", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
77627616// 25349801 Shin Nihon Prowrestling Toukon Retsuden 4 Arcade Edition
77637617// 25469801 Ninja Assault
77647618/* 25709801 */ GAME( 2001, gunsur2,  naomi, naomi,   naomi,    naomi,    ROT0, "Capcom / Namco", "Gun Survivor 2 Biohazard Code: Veronica", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
r12704r12705
79027756/* 0042  */ GAME( 2006, takoron,   naomigd,  naomigd, naomi,    naomigd,  ROT0,   "Compile",      "Noukone Puzzle Takoron (GDL-0042)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
79037757
79047758/* Atomiswave */
7905GAME( 2001, awbios,   0,        aw2c,    aw2c,  atomiswave, ROT0, "Sammy",                    "Atomiswave Bios", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING|GAME_IS_BIOS_ROOT )
7759GAME( 2001, awbios,   0,        aw2c,    aw2c,  atomiswave, ROT0, "Sammy",                           "Atomiswave Bios", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING|GAME_IS_BIOS_ROOT )
79067760
7907GAME( 2002, maxspeed, awbios,   aw1c,    aw1w,  maxspeed,   ROT0, "Sammy",                    "Maximum Speed", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7908GAME( 2002, sprtshot, awbios,   aw2c,    aw2c,  sprtshot,   ROT0, "Sammy USA",                "Sports Shooting USA", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7909GAME( 2003, ggx15,    awbios,   aw2c,    aw2c,  ggx15,      ROT0, "Sammy / Arc System Works", "Guilty Gear X ver. 1.5", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7910GAME( 2003, demofist, awbios,   aw2c,    aw2c,  demofist,   ROT0, "Polygon Magic / Dimps",    "Demolish Fist", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7911GAME( 2003, dolphin,  awbios,   aw2c,    aw2c,  dolphin,    ROT0, "Sammy",                    "Dolphin Blue", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7912GAME( 2003, ggisuka,  awbios,   aw2c,    aw2c,  ggisuka,    ROT0, "Sammy / Arc System Works", "Guilty Gear Isuka", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7913GAME( 2004, dirtypig, awbios,   aw2c,    aw2c,  dirtypig,   ROT0, "Sammy",                    "Dirty Pigskin Football", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7914GAME( 2004, rumblef,  awbios,   aw2c,    aw2c,  rumblef,    ROT0, "Sammy / Dimps",            "The Rumble Fish", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7915GAME( 2004, rangrmsn, awbios,   aw2c,    aw1w,  rangrmsn,   ROT0, "Sammy",                    "Ranger Mission", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7916GAME( 2004, salmankt, awbios,   aw2c,    aw2c,  salmankt,   ROT0, "Sammy",                    "Salary Man Kintarou", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7917GAME( 2004, ftspeed,  awbios,   aw1c,    aw1w,  ftspeed,    ROT0, "Sammy",                    "Faster Than Speed", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7918GAME( 2004, kov7sprt, awbios,   aw2c,    aw2c,  kov7sprt,   ROT0, "Sammy / IGS",              "Knights of Valour - The Seven Spirits", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7919GAME( 2005, vfurlong, awbios,   aw2c,    aw2c,  vfurlong,   ROT0, "Sammy",                    "Net Select Keiba Victory Furlong", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7920GAME( 2004, rumblef2, awbios,   aw2c,    aw2c,  rumblef2,   ROT0, "Sammy / Dimps",            "The Rumble Fish 2", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7921GAME( 2005, anmlbskt, awbios,   aw2c,    aw2c,  anmlbskt,   ROT0, "Sammy / Moss",             "Animal Basket", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7922GAME( 2005, ngbc,     awbios,   aw2c,    aw2c,  ngbc,       ROT0, "Sammy / SNK Playmore",     "Neo-Geo Battle Coliseum", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7923GAME( 2005, samsptk,  awbios,   aw2c,    aw2c,  samsptk,    ROT0, "Sammy / SNK Playmore",     "Samurai Spirits Tenkaichi Kenkakuden", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7924GAME( 2005, kofxi,    awbios,   aw2c,    aw2c,  kofxi,      ROT0, "Sammy / SNK Playmore",     "The King of Fighters XI", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7925GAME( 2005, fotns,    awbios,   aw2c,    aw2c,  fotns,      ROT0, "Sega / Arc System Works",  "Fist Of The North Star", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7926GAME( 2005, kofnw,    awbios,   aw2c,    aw2c,  kofnw,      ROT0, "Sammy / SNK Playmore",     "The King of Fighters Neowave", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7927GAME( 2005, kofnwj,   kofnw,    aw2c,    aw2c,  kofnw,      ROT0, "Sammy / SNK Playmore",     "The King of Fighters Neowave (Japan)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7928GAME( 2005, xtrmhunt, awbios,   aw2c,    aw2c,  xtrmhunt,   ROT0, "Sammy",                    "Extreme Hunting", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7929GAME( 2006, mslug6,   awbios,   aw2c,    aw2c,  mslug6,     ROT0, "Sega / SNK Playmore",      "Metal Slug 6", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7930GAME( 2006, xtrmhnt2, awbios,   aw2c,    aw2c,  xtrmhnt2,   ROT0, "Sega",                     "Extreme Hunting 2", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7761GAME( 2002, maxspeed, awbios,   aw1c,    aw1w,  atomiswave, ROT0, "Sammy",                           "Maximum Speed", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7762GAME( 2002, sprtshot, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy USA",                       "Sports Shooting USA", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7763GAME( 2003, ggx15,    awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / Arc System Works",        "Guilty Gear X ver. 1.5", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7764GAME( 2003, demofist, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Polygon Magic / Dimps",           "Demolish Fist", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7765GAME( 2003, dolphin,  awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy",                           "Dolphin Blue", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7766GAME( 2003, ggisuka,  awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / Arc System Works",        "Guilty Gear Isuka", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7767GAME( 2004, dirtypig, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy",                           "Dirty Pigskin Football", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7768GAME( 2004, rumblef,  awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / Dimps",                   "The Rumble Fish", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7769GAME( 2004, rangrmsn, awbios,   aw2c,    aw1w,  atomiswave, ROT0, "Sammy",                           "Ranger Mission", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7770GAME( 2004, salmankt, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy",                           "Salary Man Kintarou", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7771GAME( 2004, ftspeed,  awbios,   aw1c,    aw1w,  atomiswave, ROT0, "Sammy",                           "Faster Than Speed", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7772GAME( 2004, kov7sprt, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / IGS",                     "Knights of Valour - The Seven Spirits", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7773GAME( 2005, vfurlong, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy",                           "Net Select Keiba Victory Furlong", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7774GAME( 2004, rumblef2, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / Dimps",                   "The Rumble Fish 2", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7775GAME( 2005, anmlbskt, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / Moss",                    "Animal Basket", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7776GAME( 2005, ngbc,     awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / SNK Playmore",            "Neo-Geo Battle Coliseum", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7777GAME( 2005, samsptk,  awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / SNK Playmore",            "Samurai Spirits Tenkaichi Kenkakuden", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7778GAME( 2005, kofxi,    awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / SNK Playmore",            "The King of Fighters XI", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7779GAME( 2005, fotns,    awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sega / Arc System Works",         "Fist Of The North Star", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7780GAME( 2005, kofnw,    awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy / SNK Playmore",            "The King of Fighters Neowave", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7781GAME( 2005, kofnwj,   kofnw,    aw2c,    aw2c,  atomiswave, ROT0, "Sammy / SNK Playmore",            "The King of Fighters Neowave (Japan)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7782GAME( 2005, xtrmhunt, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sammy",                           "Extreme Hunting", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
7783GAME( 2006, mslug6,   awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sega / SNK Playmore",             "Metal Slug 6", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND )
7784GAME( 2006, xtrmhnt2, awbios,   aw2c,    aw2c,  atomiswave, ROT0, "Sega",                            "Extreme Hunting 2", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING )
src/mame/drivers/sothello.c
r12704r12705
5757
5858#define VDP_MEM             0x40000
5959
60#define MAINCPU_CLOCK       (XTAL_21_477MHz/6)
61#define SOUNDCPU_CLOCK      (XTAL_21_477MHz/6)
62#define YM_CLOCK            (XTAL_21_477MHz/12)
60#define MAINCPU_CLOCK       (XTAL_21_4772MHz/6)
61#define SOUNDCPU_CLOCK      (XTAL_21_4772MHz/6)
62#define YM_CLOCK            (XTAL_21_4772MHz/12)
6363#define MSM_CLOCK           (XTAL_384kHz)
6464#define SUBCPU_CLOCK        (XTAL_8MHz/4)
6565
src/mame/drivers/taitojc.c
r12704r12705
349349        - dangcurv DSP program crashes very soon, so no 3d is currently shown.
350350        - add idle skips if possible
351351      - dendeg and clones needs output lamps and an artwork for the inputs (helps with the playability);
352      - POST has a PCB ID (shown at top of screen) that can't be faked without a proper reference.
352353*/
353354
354355#include "emu.h"
r12704r12705
356357#include "cpu/m68000/m68000.h"
357358#include "cpu/mc68hc11/mc68hc11.h"
358359#include "sound/es5506.h"
360#include "sound/okim6295.h"
359361#include "machine/eeprom.h"
360362#include "audio/taito_en.h"
361363#include "includes/taitojc.h"
r12704r12705
387389
388390static READ32_HANDLER ( jc_control_r )
389391{
392   taitojc_state *state = space->machine().driver_data<taitojc_state>();
390393   UINT32 r = 0;
391//  mame_printf_debug("jc_control_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(&space->device()));
394
395   if(ACCESSING_BITS_0_15)
396      printf("jc_control_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(&space->device()));
392397   switch(offset)
393398   {
394399      case 0x0:
r12704r12705
425430      }
426431      case 0x4:
427432      {
428         if (ACCESSING_BITS_24_31)
433         if (ACCESSING_BITS_16_31)
429434         {
430            //r |= (space->machine().rand() & 0xff) << 24;
435            r |= state->m_outputs << 16;
431436         }
432437         return r;
433438      }
r12704r12705
448453   return 0;
449454}
450455
456static WRITE32_HANDLER( jc_coin_counters_w )
457{
458   taitojc_state *state = space->machine().driver_data<taitojc_state>();
459
460   COMBINE_DATA(&state->m_outputs);
461
462   coin_lockout_w(space->machine(), 0, !(data & 0x01000000));
463   coin_lockout_w(space->machine(), 1, !(data & 0x02000000));
464   coin_counter_w(space->machine(), 0, data & 0x04000000);
465   coin_counter_w(space->machine(), 1, data & 0x08000000);
466}
467
451468static WRITE32_HANDLER ( jc_control_w )
452469{
453470   //mame_printf_debug("jc_control_w: %08X, %08X, %08X\n", data, offset, mem_mask);
r12704r12705
580597   }
581598}
582599
583static READ32_HANDLER(jc_unknown1_r)
600static READ8_HANDLER(jc_pcbid_r)
584601{
585   return 0;
602   static const char pcb_id[0x40] =
603   { "Needs proper PCB ID here!"};
604
605   return pcb_id[offset];
586606}
587607
588608static READ32_HANDLER(dsp_shared_r)
r12704r12705
807827   }
808828}
809829
810static WRITE32_HANDLER(jc_output_w)
830static WRITE32_HANDLER(jc_meters_w)
811831{
812   // speed and brake meter outputs in Densya De Go!
813   // logerror("jc_output_w: %08x, %08x %08x\n", offset, data,mem_mask);
832   taitojc_state *state = space->machine().driver_data<taitojc_state>();
833   static const double odometer_table[0x100] =
834   {
835      0.0,   0.3,   0.7,   1.0,   1.4,   1.7,   2.1,   2.4,   2.8,   3.1,   3.4,   3.8,   4.1,   4.5,   4.8,   5.2,
836      5.5,   5.9,   6.2,   6.6,   6.9,   7.2,   7.6,   7.9,   8.3,   8.6,   9.0,   9.3,   9.7,  10.0,  10.5,  11.1,
837      11.6,  12.1,  12.6,  13.2,  13.7,  14.2,  14.7,  15.3,  15.8,  16.3,  16.8,  17.4,  17.9,  18.4,  18.9,  19.5,
838      20.0,  20.6,  21.1,  21.7,  22.2,  22.8,  23.3,  23.9,  24.4,  25.0,  25.6,  26.1,  26.7,  27.2,  27.8,  28.3,
839      28.9,  29.4,  30.0,  30.6,  31.1,  31.7,  32.2,  32.8,  33.3,  33.9,  34.4,  35.0,  35.6,  36.1,  36.7,  37.2,
840      37.8,  38.3,  38.9,  39.4,  40.0,  40.6,  41.2,  41.8,  42.4,  42.9,  43.5,  44.1,  44.7,  45.3,  45.9,  46.5,
841      47.1,  47.6,  48.2,  48.8,  49.4,  50.0,  50.5,  51.1,  51.6,  52.1,  52.6,  53.2,  53.7,  54.2,  54.7,  55.3,
842      55.8,  56.3,  56.8,  57.4,  57.9,  58.4,  58.9,  59.5,  60.0,  60.7,  61.3,  62.0,  62.7,  63.3,  64.0,  64.7,
843      65.3,  66.0,  66.7,  67.3,  68.0,  68.7,  69.3,  70.0,  70.5,  71.1,  71.6,  72.1,  72.6,  73.2,  73.7,  74.2,
844      74.7,  75.3,  75.8,  76.3,  76.8,  77.4,  77.9,  78.4,  78.9,  79.5,  80.0,  80.6,  81.2,  81.8,  82.4,  82.9,
845      83.5,  84.1,  84.7,  85.3,  85.9,  86.5,  87.1,  87.6,  88.2,  88.8,  89.4,  90.0,  90.6,  91.1,  91.7,  92.2,
846      92.8,  93.3,  93.9,  94.4,  95.0,  95.6,  96.1,  96.7,  97.2,  97.8,  98.3,  98.9,  99.4, 100.0, 100.5, 101.1,
847      101.6, 102.1, 102.6, 103.2, 103.7, 104.2, 104.7, 105.3, 105.8, 106.3, 106.8, 107.4, 107.9, 108.4, 108.9, 109.5,
848      110.0, 110.7, 111.3, 112.0, 112.7, 113.3, 114.0, 114.7, 115.3, 116.0, 116.7, 117.3, 118.0, 118.7, 119.3, 120.0,
849      120.3, 120.6, 120.9, 121.2, 121.6, 121.9, 122.2, 122.5, 122.8, 123.1, 123.4, 123.8, 124.1, 124.4, 124.7, 125.0,
850      125.3, 125.6, 125.9, 126.2, 126.6, 126.9, 127.2, 127.5, 127.8, 128.1, 128.4, 128.8, 129.1, 129.4, 129.7, 130.0,
851   };
852
853
854   // printf("jc_output_w: %08x, %08x %08x\n", offset, data,mem_mask);
855   if(offset == 0 && ACCESSING_BITS_16_31)
856      state->m_speed_meter = odometer_table[(data >> 16) & 0xff];
857   else if(offset == 1 && ACCESSING_BITS_16_31)
858      state->m_break_meter = data >> 16; //TODO
859
860   if(input_port_read_safe(space->machine(), "METER", 0))
861   {
862      UINT8 mascon_lv = (input_port_read(space->machine(), "MASCON") & 0x70) >> 4;
863
864      popmessage("%d %02f",mascon_lv,state->m_speed_meter);
865   }
814866}
815867
816868static READ32_HANDLER( jc_lan_r )
r12704r12705
825877   AM_RANGE(0x040f8000, 0x040fbfff) AM_READWRITE(taitojc_tile_r, taitojc_tile_w)
826878   AM_RANGE(0x040fc000, 0x040fefff) AM_READWRITE(taitojc_char_r, taitojc_char_w)
827879   AM_RANGE(0x040ff000, 0x040fffff) AM_RAM AM_BASE_MEMBER(taitojc_state,m_objlist)
828   AM_RANGE(0x05800000, 0x05801fff) AM_READ(jc_unknown1_r)
880   AM_RANGE(0x05800000, 0x0580003f) AM_READ8(jc_pcbid_r,0xffffffff)
829881   AM_RANGE(0x05900000, 0x05900007) AM_READWRITE(mcu_comm_r, mcu_comm_w)
830882   //AM_RANGE(0x05a00000, 0x05a01fff)
831883   //AM_RANGE(0x05fc0000, 0x05fc3fff)
832884   AM_RANGE(0x06400000, 0x0641ffff) AM_READWRITE(taitojc_palette_r, taitojc_palette_w) AM_BASE_MEMBER(taitojc_state,m_palette_ram)
833885   AM_RANGE(0x06600000, 0x0660001f) AM_READ(jc_control_r)
834886   AM_RANGE(0x06600000, 0x06600003) AM_WRITE(jc_control1_w) // watchdog
835   AM_RANGE(0x06600010, 0x06600013) AM_NOP      // unknown
887   AM_RANGE(0x06600010, 0x06600013) AM_WRITE(jc_coin_counters_w)
836888   AM_RANGE(0x06600040, 0x0660004f) AM_WRITE(jc_control_w)
837   AM_RANGE(0x06800000, 0x06801fff) AM_NOP      // unknown
889   //AM_RANGE(0x06800000, 0x06801fff) AM_NOP      // unknown
838890   AM_RANGE(0x06a00000, 0x06a01fff) AM_READWRITE(f3_share_r, f3_share_w) AM_SHARE("f3_shared") AM_BASE_MEMBER(taitojc_state,m_f3_shared_ram)
839891   AM_RANGE(0x06c00000, 0x06c0001f) AM_READ(jc_lan_r) AM_WRITENOP // Dangerous Curves
840   AM_RANGE(0x06e00000, 0x06e0ffff) AM_WRITE(jc_output_w)
892   AM_RANGE(0x06e00000, 0x06e00007) AM_WRITE(jc_meters_w)
841893   AM_RANGE(0x08000000, 0x080fffff) AM_RAM AM_BASE_MEMBER(taitojc_state,m_main_ram)
842894   AM_RANGE(0x10000000, 0x10001fff) AM_READWRITE(dsp_shared_r, dsp_shared_w)
843895ADDRESS_MAP_END
r12704r12705
854906
855907static WRITE8_HANDLER(hc11_comm_w)
856908{
909
857910}
858911
859912static READ8_HANDLER(hc11_data_r)
r12704r12705
12061259//   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Mascon 0")      // Mascon 0
12071260
12081261   PORT_START("MASCON")
1209   PORT_BIT( 0x7f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(0x60) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_CENTERDELTA(5)
1262   PORT_BIT( 0x7f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(0x60) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_CENTERDELTA(0)
12101263
12111264   PORT_START("ANALOG1")      // Brake
1212   PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_CENTERDELTA(5) PORT_NAME("Brake")
1265   PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_NAME("Brake")
1266
1267   PORT_START("METER")
1268   PORT_CONFNAME( 0x01, 0x01, "Show Meters" )
1269   PORT_CONFSETTING(    0x01, DEF_STR( Yes ) )
1270   PORT_CONFSETTING(    0x00, DEF_STR( No )  )
12131271INPUT_PORTS_END
12141272
12151273static INPUT_PORTS_START( landgear )
r12704r12705
13601418   device_set_input_line_and_vector(device, 2, HOLD_LINE, 130);
13611419}
13621420
1363#if 0
1364static INTERRUPT_GEN( taitojc_int6 )
1365{
1366//   device_set_input_line(device, 6, HOLD_LINE);
1367}
1368#endif
1369
13701421static const hc11_config taitojc_config =
13711422{
13721423   1, //has extended I/O
r12704r12705
14111462   MCFG_FRAGMENT_ADD(taito_f3_sound)
14121463MACHINE_CONFIG_END
14131464
1465static MACHINE_CONFIG_DERIVED( dendeg, taitojc )
1466   MCFG_OKIM6295_ADD("oki", 32000000/32, OKIM6295_PIN7_HIGH)
1467   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
1468   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
1469MACHINE_CONFIG_END
1470
1471static READ16_HANDLER( taitojc_dsp_idle_skip_r )
1472{
1473   taitojc_state *state = space->machine().driver_data<taitojc_state>();
1474
1475   if(cpu_get_pc(&space->device())==0x404c)
1476      device_spin_until_time(&space->device(), attotime::from_usec(500));
1477
1478   return state->m_dsp_shared_ram[0x7f0];
1479}
1480
1481static READ16_HANDLER( dendeg2_dsp_idle_skip_r )
1482{
1483   taitojc_state *state = space->machine().driver_data<taitojc_state>();
1484
1485   if(cpu_get_pc(&space->device())==0x402e)
1486      device_spin_until_time(&space->device(), attotime::from_usec(500));
1487
1488   return state->m_dsp_shared_ram[0x7f0];
1489}
1490
1491static WRITE16_HANDLER( dsp_idle_skip_w )
1492{
1493   taitojc_state *state = space->machine().driver_data<taitojc_state>();
1494
1495   COMBINE_DATA(&state->m_dsp_shared_ram[0x7f0]);
1496}
1497
14141498static DRIVER_INIT( taitojc )
14151499{
14161500   taitojc_state *state = machine.driver_data<taitojc_state>();
r12704r12705
14181502   state->m_polygon_fifo = auto_alloc_array(machine, UINT16, POLYGON_FIFO_SIZE);
14191503
14201504   state->m_has_dsp_hack = 1;
1505
1506   machine.device("dsp")->memory().space(AS_DATA)->install_legacy_readwrite_handler(0x7ff0, 0x7ff0, FUNC(taitojc_dsp_idle_skip_r), FUNC(dsp_idle_skip_w));
14211507}
14221508
1509static DRIVER_INIT( dendeg2 )
1510{
1511   DRIVER_INIT_CALL( taitojc );
1512
1513   machine.device("dsp")->memory().space(AS_DATA)->install_legacy_readwrite_handler(0x7ff0, 0x7ff0, FUNC(dendeg2_dsp_idle_skip_r), FUNC(dsp_idle_skip_w));
1514}
1515
1516
14231517static DRIVER_INIT( dangcurv )
14241518{
14251519   taitojc_state *state = machine.driver_data<taitojc_state>();
r12704r12705
16401734   ROM_LOAD( "e35-11.020",  0x0c00000, 0x200000, CRC(dc8f5e88) SHA1(e311252db8a7232a5325a3eff5c1890d20bd3f8f) )
16411735   ROM_LOAD( "e35-12.021",  0x0e00000, 0x200000, CRC(039b604c) SHA1(7e394e7cddc6bf42f3834d5331203e8496597a90) )
16421736
1643   ROM_REGION( 0x40000, "user3", 0 )      /* train board, OKI6295 sound samples */
1737   ROM_REGION( 0x40000, "oki", 0 )      /* train board, OKI6295 sound samples */
16441738   ROM_LOAD( "e35-28.trn",  0x000000, 0x040000, CRC(d1b571c1) SHA1(cac7d3f0285544fe36b8b744edfbac0190cdecab) )
16451739
16461740   ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00  )
r12704r12705
16871781   ROM_LOAD( "e35-11.020",  0x0c00000, 0x200000, CRC(dc8f5e88) SHA1(e311252db8a7232a5325a3eff5c1890d20bd3f8f) )
16881782   ROM_LOAD( "e35-12.021",  0x0e00000, 0x200000, CRC(039b604c) SHA1(7e394e7cddc6bf42f3834d5331203e8496597a90) )
16891783
1690   ROM_REGION( 0x40000, "user3", 0 )      /* train board, OKI6295 sound samples */
1784   ROM_REGION( 0x40000, "oki", 0 )      /* train board, OKI6295 sound samples */
16911785   ROM_LOAD( "e35-28.trn",  0x000000, 0x040000, CRC(d1b571c1) SHA1(cac7d3f0285544fe36b8b744edfbac0190cdecab) )
16921786
16931787   ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00  )
r12704r12705
17381832   ROM_LOAD( "e52-11.020",  0x0c00000, 0x200000, CRC(1bc22680) SHA1(1f71db88d6df3b4bdf090b77bc83a67906bb31da) )
17391833   ROM_LOAD( "e52-12.021",  0x0e00000, 0x200000, CRC(a8bb91c5) SHA1(959a9fedb7839e1e4e7658d920bd5da4fd8cae48) )
17401834
1741   ROM_REGION( 0x40000, "user3", 0 )      /* train board, OKI6295 sound samples */
1835   ROM_REGION( 0x40000, "oki", 0 )      /* train board, OKI6295 sound samples */
17421836   ROM_LOAD( "e35-28.trn",  0x000000, 0x040000, CRC(d1b571c1) SHA1(cac7d3f0285544fe36b8b744edfbac0190cdecab) )
17431837
17441838   ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00  )
r12704r12705
17891883   ROM_LOAD( "e52-11.020",  0x0c00000, 0x200000, CRC(1bc22680) SHA1(1f71db88d6df3b4bdf090b77bc83a67906bb31da) )
17901884   ROM_LOAD( "e52-12.021",  0x0e00000, 0x200000, CRC(a8bb91c5) SHA1(959a9fedb7839e1e4e7658d920bd5da4fd8cae48) )
17911885
1792   ROM_REGION( 0x40000, "user3", 0 )      /* train board, OKI6295 sound samples */
1886   ROM_REGION( 0x40000, "oki", 0 )      /* train board, OKI6295 sound samples */
17931887   ROM_LOAD( "e35-28.trn",  0x000000, 0x040000, CRC(d1b571c1) SHA1(cac7d3f0285544fe36b8b744edfbac0190cdecab) )
17941888
17951889   ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00  )
r12704r12705
18991993ROM_END
19001994
19011995
1902GAME( 1996, dendeg,   0,       taitojc, dendeg,   taitojc,  ROT0, "Taito", "Densya De Go (Japan)", GAME_IMPERFECT_GRAPHICS )
1903GAME( 1996, dendegx,  dendeg,  taitojc, dendeg,   taitojc,  ROT0, "Taito", "Densya De Go Ex (Japan)", GAME_IMPERFECT_GRAPHICS )
1904GAME( 1998, dendeg2,  0,       taitojc, dendeg,   taitojc,  ROT0, "Taito", "Densya De Go 2 (Japan)", GAME_IMPERFECT_GRAPHICS )
1905GAME( 1998, dendeg2x, dendeg2, taitojc, dendeg,   taitojc,  ROT0, "Taito", "Densya De Go 2 Ex (Japan)", GAME_IMPERFECT_GRAPHICS )
1996GAME( 1996, dendeg,   0,       dendeg, dendeg,   taitojc,  ROT0, "Taito", "Densya De Go (Japan)", GAME_IMPERFECT_GRAPHICS )
1997GAME( 1996, dendegx,  dendeg,  dendeg, dendeg,   taitojc,  ROT0, "Taito", "Densya De Go Ex (Japan)", GAME_IMPERFECT_GRAPHICS )
1998GAME( 1998, dendeg2,  0,       dendeg, dendeg,   dendeg2,  ROT0, "Taito", "Densya De Go 2 (Japan)", GAME_IMPERFECT_GRAPHICS )
1999GAME( 1998, dendeg2x, dendeg2, dendeg, dendeg,   dendeg2,  ROT0, "Taito", "Densya De Go 2 Ex (Japan)", GAME_IMPERFECT_GRAPHICS )
19062000GAME( 1996, sidebs,   0,       taitojc, sidebs,   taitojc,  ROT0, "Taito", "Side By Side (Japan)", GAME_IMPERFECT_GRAPHICS )
19072001GAME( 1997, sidebs2,  0,       taitojc, sidebs,   taitojc,  ROT0, "Taito", "Side By Side 2 (North/South America)", GAME_IMPERFECT_GRAPHICS )
19082002GAME( 1997, sidebs2j, sidebs2, taitojc, sidebs,   taitojc,  ROT0, "Taito", "Side By Side 2 (Japan)", GAME_IMPERFECT_GRAPHICS )
src/mame/drivers/esd16.c
r12704r12705
12081208***************************************************************************/
12091209
12101210/* ESD 11-09-98 */
1211GAME( 1999, multchmp, 0,        multchmp, multchmp, 0, ROT0, "ESD",         "Multi Champ (World)", GAME_SUPPORTS_SAVE )
1211GAME( 1998, multchmp, 0,        multchmp, multchmp, 0, ROT0, "ESD",         "Multi Champ (World)", GAME_SUPPORTS_SAVE )
12121212GAME( 1998, multchmpk,multchmp, multchmp, multchmp, 0, ROT0, "ESD",         "Multi Champ (Korea)", GAME_SUPPORTS_SAVE )
12131213
12141214/* ESD 05-28-99 */
12151215GAME( 1999, hedpanico,hedpanic, hedpanio, hedpanic, 0, ROT0, "ESD",         "Head Panic (ver. 0615, 15/06/1999)", GAME_SUPPORTS_SAVE ) // 15/06/1999 ?
12161216
12171217/* ESD 08-26-1999 */
1218GAME( 2000, mchampdx, 0,        mchampdx, hedpanic, 0, ROT0, "ESD",         "Multi Champ Deluxe (ver. 0106, 06/01/2000)", GAME_SUPPORTS_SAVE ) // 06/01/2000 ?
1218GAME( 1999, mchampdx, 0,        mchampdx, hedpanic, 0, ROT0, "ESD",         "Multi Champ Deluxe (ver. 0106, 06/01/2000)", GAME_SUPPORTS_SAVE ) // 06/01/2000 ?
12191219GAME( 1999, mchampdxa,mchampdx, mchampdx, hedpanic, 0, ROT0, "ESD",         "Multi Champ Deluxe (ver. 1126, 26/11/1999)", GAME_SUPPORTS_SAVE ) // 26/11/1999 ?
12201220GAME( 1999, mchampdxb,mchampdx, mchampdx, hedpanic, 0, ROT0, "ESD",         "Multi Champ Deluxe (ver. 1114, 14/11/1999)", GAME_SUPPORTS_SAVE ) // 14/11/1999 ?
1221GAME( 2000, hedpanic, 0,        hedpanic, hedpanic, 0, ROT0, "ESD",         "Head Panic (ver. 0117, 17/01/2000)", GAME_SUPPORTS_SAVE ) // 17/01/2000 ?
1222GAME( 2000, hedpanicf,hedpanic, hedpanic, hedpanic, 0, ROT0, "ESD / Fuuki", "Head Panic (ver. 0315, 15/03/2000)", GAME_SUPPORTS_SAVE ) // 15/03/2000 ?
1221GAME( 1999, hedpanic, 0,        hedpanic, hedpanic, 0, ROT0, "ESD",         "Head Panic (ver. 0117, 17/01/2000)", GAME_SUPPORTS_SAVE ) // 17/01/2000 ?
1222GAME( 1999, hedpanicf,hedpanic, hedpanic, hedpanic, 0, ROT0, "ESD / Fuuki", "Head Panic (ver. 0315, 15/03/2000)", GAME_SUPPORTS_SAVE ) // 15/03/2000 ?
12231223
12241224/* ESD - This PCB looks identical to the ESD 08-26-1999 PCB */
12251225GAME( 2000, tangtang, 0,        tangtang, hedpanic, 0, ROT0, "ESD",         "Tang Tang (ver. 0526, 26/05/2000)", GAME_SUPPORTS_SAVE ) // 26/05/2000 ?
src/mame/drivers/cavesh3.c
r12704r12705
143143
144144ROM_START( ibarablk )
145145   ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASEFF)
146   ROM_LOAD( "u4", 0x000000, 0x200000, CRC(ee1f1f77) SHA1(ac276f3955aa4dde2544af4912819a7ae6bcf8dd) ) /* (2006/02/06.MASTER VER.) */
146   ROM_LOAD( "u4", 0x000000, 0x200000, CRC(ee1f1f77) SHA1(ac276f3955aa4dde2544af4912819a7ae6bcf8dd) ) /* (2006/02/06. MASTER VER.) */
147147
148148   ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
149   ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(5e46be44) SHA1(bed5f1bf452f2cac58747ecabec3c4392566a3a7) ) /* (2006/02/06.MASTER VER.) */
149   ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(5e46be44) SHA1(bed5f1bf452f2cac58747ecabec3c4392566a3a7) ) /* (2006/02/06. MASTER VER.) */
150150
151151   ROM_REGION( 0x800000, "samples", ROMREGION_ERASEFF)
152152   ROM_LOAD( "u23", 0x000000, 0x400000, CRC(a436bb22) SHA1(0556e771cc02638bf8814315ba671c2d442594f1) ) /* (2006/02/06 MASTER VER.) */
r12704r12705
197197GAME( 2006, futari15,  0,          cavesh3,    cavesh3,  0, ROT0, "Cave", "Mushihime Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54)", GAME_NOT_WORKING | GAME_NO_SOUND )
198198GAME( 2006, futari10,  futari15,   cavesh3,    cavesh3,  0, ROT0, "Cave", "Mushihime Sama Futari Ver 1.0 (2006/10/23 MASTER VER.)",    GAME_NOT_WORKING | GAME_NO_SOUND )
199199GAME( 2006, ibara,     0,          cavesh3,    cavesh3,  0, ROT0, "Cave", "Ibara (2005/03/22 MASTER VER..)",                           GAME_NOT_WORKING | GAME_NO_SOUND )
200GAME( 2006, ibarablk,  0,          cavesh3,    cavesh3,  0, ROT0, "Cave", "Ibara Kuro - Black Label (2006/02/06.MASTER VER.)",         GAME_NOT_WORKING | GAME_NO_SOUND )
200GAME( 2006, ibarablk,  0,          cavesh3,    cavesh3,  0, ROT0, "Cave", "Ibara Kuro - Black Label (2006/02/06. MASTER VER.)",        GAME_NOT_WORKING | GAME_NO_SOUND )
201201GAME( 2006, ibarablka, ibarablk,   cavesh3,    cavesh3,  0, ROT0, "Cave", "Ibara Kuro - Black Label (2006/02/06 MASTER VER.)",         GAME_NOT_WORKING | GAME_NO_SOUND )
202202GAME( 2007, deathsml,  0,          cavesh3,    cavesh3,  0, ROT0, "Cave", "Death Smiles (2007/10/09 MASTER VER)",                      GAME_NOT_WORKING | GAME_NO_SOUND )
203203
r12704r12705
215215
216216IBARA BLACK LABEL
217217  "2006/02/06 MASTER VER."
218  "2006/02/06.MASTER VER."
218  "2006/02/06. MASTER VER."
219219
220220ESPGALUDA II
221221  "2005/11/14 MASTER VER"
src/mame/drivers/triforce.c
r12704r12705
401401
402402#include "emu.h"
403403#include "cpu/powerpc/ppc.h"
404#include "includes/naomibd.h"
404#include "machine/naomigd.h"
405405
406406static ADDRESS_MAP_START( gc_map, AS_PROGRAM, 32 )
407407   AM_RANGE(0x7fe00000, 0x7fffffff) AM_ROM AM_REGION("maincpu", 0) AM_SHARE("share2")   /* Program ROM */
r12704r12705
443443MACHINE_CONFIG_END
444444
445445static MACHINE_CONFIG_DERIVED( triforcegd, triforce_base )
446   MCFG_NAOMI_DIMM_BOARD_ADD("rom_board", "gdrom", NULL, 256, "picreturn")
446   MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", "gdrom", "picreturn", NULL, "maincpu", NULL)
447447MACHINE_CONFIG_END
448448
449449#define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \
src/mame/drivers/taito_f3.c
r12704r12705
2828
2929    Taito custom chips on motherboard:
3030
31        TC0630 FDP - Playfield generator?  (Nearest tile roms)
32        TC0640 FI0 - I/O & watchdog?
33        TC0650 FDA - Priority mixer?  (Near paletteram & video output)
34        TC0660 FCM - Sprites? (Nearest sprite roms)
31        TC0630FDP - Playfield generator?  (Nearest tile roms)
32        TC0640FIO - I/O & watchdog?
33        TC0650FDA - Priority mixer?  (Near paletteram & video output)
34        TC0660FCM - Sprites? (Nearest sprite roms)
3535
3636***************************************************************************/
3737
src/mame/drivers/williams.c
r12704r12705
9494    c80c rom_pia_dataa
9595    c80d rom_pia_ctrla
9696    c80e rom_pia_datab
97          bit 0 \
98          bit 1 |
99          bit 2 |-6 bits to sound board
100          bit 3 |
101          bit 4 |
102          bit 5 /
103          bit 6 \
104          bit 7 /Plus CA2 and CB2 = 4 bits to drive the LED 7 segment
97          bits 0-5 = 6 bits to sound board
98          bits 6-7 plus CA2 and CB2 = 4 bits to drive the LED 7 segment
99                   Blaster only: bits 6-7 are for selecting the sound board
105100    c80f rom_pia_ctrlb
106101
107102    C900 rom_enable_scr_ctrl  Switch between video ram and rom at 0000-97FF
r12704r12705
503498#include "machine/nvram.h"
504499
505500
506#define MASTER_CLOCK      (12000000)
507#define SOUND_CLOCK         (3579000)
501#define MASTER_CLOCK      (XTAL_12MHz)
502#define SOUND_CLOCK         (XTAL_3_579545MHz)
508503
509504
510505
r12704r12705
672667static ADDRESS_MAP_START( defender_sound_map, AS_PROGRAM, 8 )
673668   AM_RANGE(0x0000, 0x007f) AM_RAM      /* internal RAM */
674669   AM_RANGE(0x0400, 0x0403) AM_MIRROR(0x8000) AM_DEVREADWRITE_MODERN("pia_2", pia6821_device, read, write)
675   AM_RANGE(0xb000, 0xffff) AM_ROM      /* most games start at $F000, Sinistar starts at $B000 */
670   AM_RANGE(0xb000, 0xffff) AM_ROM
676671ADDRESS_MAP_END
677672
678673
r12704r12705
680675   AM_RANGE(0x0000, 0x007f) AM_RAM      /* internal RAM */
681676   AM_RANGE(0x0080, 0x00ff) AM_RAM      /* MC6810 RAM */
682677   AM_RANGE(0x0400, 0x0403) AM_MIRROR(0x8000) AM_DEVREADWRITE_MODERN("pia_2", pia6821_device, read, write)
683   AM_RANGE(0xb000, 0xffff) AM_ROM      /* most games start at $F000, Sinistar starts at $B000 */
678   AM_RANGE(0xb000, 0xffff) AM_ROM
684679ADDRESS_MAP_END
685680
681/* Same as above, but for second sound board */
682static ADDRESS_MAP_START( sound_map_b, AS_PROGRAM, 8 )
683   AM_RANGE(0x0000, 0x007f) AM_RAM      /* internal RAM */
684   AM_RANGE(0x0080, 0x00ff) AM_RAM      /* MC6810 RAM */
685   AM_RANGE(0x0400, 0x0403) AM_MIRROR(0x8000) AM_DEVREADWRITE_MODERN("pia_2b", pia6821_device, read, write)
686   AM_RANGE(0xb000, 0xffff) AM_ROM
687ADDRESS_MAP_END
686688
687689
690
688691/*************************************
689692 *
690693 *  Later sound board memory handlers
r12704r12705
15761579MACHINE_CONFIG_END
15771580
15781581
1579static MACHINE_CONFIG_DERIVED( blaster, williams )
1582static MACHINE_CONFIG_DERIVED( blastkit, williams )
15801583
15811584   /* basic machine hardware */
1582
15831585   MCFG_CPU_MODIFY("maincpu")
15841586   MCFG_CPU_PROGRAM_MAP(blaster_map)
15851587
r12704r12705
15921594   MCFG_SCREEN_UPDATE(blaster)
15931595
15941596   /* pia */
1595   MCFG_PIA6821_MODIFY("pia_0", williams_49way_pia_0_intf)
1597   MCFG_PIA6821_MODIFY("pia_0", williams_49way_muxed_pia_0_intf)
15961598MACHINE_CONFIG_END
15971599
15981600
1599static MACHINE_CONFIG_DERIVED( blastkit, blaster )
1601static MACHINE_CONFIG_DERIVED( blaster, blastkit )
16001602
16011603   /* basic machine hardware */
1604   MCFG_CPU_ADD("soundcpu_b", M6808, SOUND_CLOCK)
1605   MCFG_CPU_PROGRAM_MAP(sound_map_b)
16021606
16031607   /* pia */
1604   MCFG_PIA6821_MODIFY("pia_0", williams_49way_muxed_pia_0_intf)
1608   MCFG_PIA6821_MODIFY("pia_0", williams_49way_pia_0_intf)
1609   MCFG_PIA6821_MODIFY("pia_1", blaster_pia_1_intf)
1610   MCFG_PIA6821_ADD("pia_2b", williams_snd_pia_b_intf)
1611
1612   /* sound hardware */
1613   MCFG_DEVICE_REMOVE("wmsdac")
1614   MCFG_DEVICE_REMOVE("mono")
1615
1616   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1617   MCFG_SOUND_ADD("wmsdac", DAC, 0)
1618   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
1619   MCFG_SOUND_ADD("wmsdac_b", DAC, 0)
1620   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
16051621MACHINE_CONFIG_END
16061622
16071623
r12704r12705
23502366
23512367ROM_START( blaster )
23522368   ROM_REGION( 0x54000, "maincpu", 0 )
2353   ROM_LOAD( "blaster.16",   0x0d000, 0x1000, CRC(54a40b21) SHA1(663c7b539e6f1f065a4ecae7bb0477c71951223f) )
2354   ROM_LOAD( "blaster.13",   0x0e000, 0x2000, CRC(f4dae4c8) SHA1(211dcbe085a30419d649afe10ca7c4017d909bd7) )
2369   ROM_LOAD( "16.ic39",     0x0d000, 0x1000, CRC(54a40b21) SHA1(663c7b539e6f1f065a4ecae7bb0477c71951223f) )
2370   ROM_LOAD( "13.ic27",     0x0e000, 0x2000, CRC(f4dae4c8) SHA1(211dcbe085a30419d649afe10ca7c4017d909bd7) )
23552371
2356   ROM_LOAD( "blaster.11",   0x10000, 0x2000, CRC(6371e62f) SHA1(dc4173d2ee88757a6ac0838acaee325eadc2c4fb) )
2357   ROM_LOAD( "blaster.12",   0x12000, 0x2000, CRC(9804faac) SHA1(e61218fe190ad268af48d611d140d8f4cd38e4c7) )
2358   ROM_LOAD( "blaster.17",   0x14000, 0x1000, CRC(bf96182f) SHA1(e25a02508eecf79ea1ae5d45278a60becc6c7dcc) )
2372   ROM_LOAD( "11.ic25",     0x10000, 0x2000, CRC(6371e62f) SHA1(dc4173d2ee88757a6ac0838acaee325eadc2c4fb) )
2373   ROM_LOAD( "12.ic26",     0x12000, 0x2000, CRC(9804faac) SHA1(e61218fe190ad268af48d611d140d8f4cd38e4c7) )
2374   ROM_LOAD( "17.ic41",     0x14000, 0x1000, CRC(bf96182f) SHA1(e25a02508eecf79ea1ae5d45278a60becc6c7dcc) )
23592375
2360   ROM_LOAD( "blaster.15",   0x18000, 0x4000, CRC(1ad146a4) SHA1(5ab3d9618023b59bc329a9eeef986901867a639b) )
2361   ROM_LOAD( "blaster.8",    0x1c000, 0x4000, CRC(f110bbb0) SHA1(314dea232a3706509399348c7415f933c64cea1b) )
2362   ROM_LOAD( "blaster.9",    0x20000, 0x4000, CRC(5c5b0f8a) SHA1(224f89c85b2b1ca511d006180b8d994fccbdfb6b) )
2363   ROM_LOAD( "blaster.10",   0x24000, 0x4000, CRC(d47eb67f) SHA1(5dcde8be1a7b1927b90ffab3219dc47c5b2f20e4) )
2364   ROM_LOAD( "blaster.6",    0x28000, 0x4000, CRC(47fc007e) SHA1(3a80b9b7ae460e9732f7c1cdd465a5b06ded970f) )
2365   ROM_LOAD( "blaster.5",    0x2c000, 0x4000, CRC(15c1b94d) SHA1(5d97628541eb8933870c3ffd3646b7aaf8af6af5) )
2366   ROM_LOAD( "blaster.14",   0x30000, 0x4000, CRC(aea6b846) SHA1(04cb4b5eb000471a0cec377a5236ac8c83529528) )
2367   ROM_LOAD( "blaster.7",    0x34000, 0x4000, CRC(7a101181) SHA1(5f1581911ea7fe3e63ce1b9c50b1d3bf081dbf81) )
2368   ROM_LOAD( "blaster.1",    0x38000, 0x4000, CRC(8d0ea9e7) SHA1(34f8e2e99748bed29285f7e4929bb920960ab03e) )
2369   ROM_LOAD( "blaster.2",    0x3c000, 0x4000, CRC(03c4012c) SHA1(53f0adc91e5f1ac58b08b3a6d2de8de5a40bebab) )
2370   ROM_LOAD( "blaster.4",    0x40000, 0x4000, CRC(fc9d39fb) SHA1(126d43a64471bbf4b40aeda8913d50e82d254f9c) )
2371   ROM_LOAD( "blaster.3",    0x44000, 0x4000, CRC(253690fb) SHA1(06cb2ef95bb06b3618392e298aa690e1f75bc977) )
2376   ROM_LOAD( "15.ic38",     0x18000, 0x4000, CRC(1ad146a4) SHA1(5ab3d9618023b59bc329a9eeef986901867a639b) )
2377   ROM_LOAD( "8.ic20",      0x1c000, 0x4000, CRC(f110bbb0) SHA1(314dea232a3706509399348c7415f933c64cea1b) )
2378   ROM_LOAD( "9.ic22",      0x20000, 0x4000, CRC(5c5b0f8a) SHA1(224f89c85b2b1ca511d006180b8d994fccbdfb6b) )
2379   ROM_LOAD( "10.ic24",     0x24000, 0x4000, CRC(d47eb67f) SHA1(5dcde8be1a7b1927b90ffab3219dc47c5b2f20e4) )
2380   ROM_LOAD( "6.ic13",      0x28000, 0x4000, CRC(47fc007e) SHA1(3a80b9b7ae460e9732f7c1cdd465a5b06ded970f) )
2381   ROM_LOAD( "5.ic11",      0x2c000, 0x4000, CRC(15c1b94d) SHA1(5d97628541eb8933870c3ffd3646b7aaf8af6af5) )
2382   ROM_LOAD( "14.ic35",     0x30000, 0x4000, CRC(aea6b846) SHA1(04cb4b5eb000471a0cec377a5236ac8c83529528) )
2383   ROM_LOAD( "7.ic15",      0x34000, 0x4000, CRC(7a101181) SHA1(5f1581911ea7fe3e63ce1b9c50b1d3bf081dbf81) )
2384   ROM_LOAD( "1.ic1",       0x38000, 0x4000, CRC(8d0ea9e7) SHA1(34f8e2e99748bed29285f7e4929bb920960ab03e) )
2385   ROM_LOAD( "2.ic3",       0x3c000, 0x4000, CRC(03c4012c) SHA1(53f0adc91e5f1ac58b08b3a6d2de8de5a40bebab) )
2386   ROM_LOAD( "4.ic7",       0x40000, 0x4000, CRC(fc9d39fb) SHA1(126d43a64471bbf4b40aeda8913d50e82d254f9c) )
2387   ROM_LOAD( "3.ic6",       0x44000, 0x4000, CRC(253690fb) SHA1(06cb2ef95bb06b3618392e298aa690e1f75bc977) )
23722388
23732389   ROM_REGION( 0x10000, "soundcpu", 0 )
2374   ROM_LOAD( "blaster.18",   0xf000, 0x1000, CRC(c33a3145) SHA1(6ffe2da7b70c0b576fbc1790a33eecdbb9ee3d02) )
2390   ROM_LOAD( "18.sb13",      0xf000, 0x1000, CRC(c33a3145) SHA1(6ffe2da7b70c0b576fbc1790a33eecdbb9ee3d02) )
2391   ROM_REGION( 0x10000, "soundcpu_b", 0 )
2392   ROM_LOAD( "18.sb10",      0xf000, 0x1000, CRC(c33a3145) SHA1(6ffe2da7b70c0b576fbc1790a33eecdbb9ee3d02) )
23752393
23762394   ROM_REGION( 0x0c00, "proms", 0 )      /* color & video-decoder PROM data */
23772395   ROM_LOAD( "decoder.4",    0x0800, 0x0200, CRC(e6631c23) SHA1(9988723269367fb44ef83f627186a1c88cf7877e) )
r12704r12705
23812399
23822400ROM_START( blaster30 )
23832401   ROM_REGION( 0x54000, "maincpu", 0 )
2384   ROM_LOAD( "blast30.16",   0x0d000, 0x1000, CRC(2db032d2) SHA1(287769361639695b1c1ceae0fe6899d83b4575d5) )
2385   ROM_LOAD( "blast30.13",   0x0e000, 0x2000, CRC(c99213c7) SHA1(d1c1549c053de3d862d8ef3ebca02811ed289464) )
2402   ROM_LOAD( "16.ic39",     0x0d000, 0x1000, CRC(2db032d2) SHA1(287769361639695b1c1ceae0fe6899d83b4575d5) )
2403   ROM_LOAD( "13.ic27",     0x0e000, 0x2000, CRC(c99213c7) SHA1(d1c1549c053de3d862d8ef3ebca02811ed289464) )
23862404
2387   ROM_LOAD( "blast30.11",   0x10000, 0x2000, CRC(bc2d7eda) SHA1(831e9ecb75b143f9770eab1939136092a29e64f7) )
2388   ROM_LOAD( "blast30.12",   0x12000, 0x2000, CRC(8a215017) SHA1(ee9233134907c03f7a1221d9daa84fe047c2db94) )
2389   ROM_LOAD( "blast30.17",   0x14000, 0x1000, CRC(b308f0e5) SHA1(262e25be40dff66e65a0fe34c9d013a750b90876) )
2405   ROM_LOAD( "11.ic25",     0x10000, 0x2000, CRC(bc2d7eda) SHA1(831e9ecb75b143f9770eab1939136092a29e64f7) )
2406   ROM_LOAD( "12.ic26",     0x12000, 0x2000, CRC(8a215017) SHA1(ee9233134907c03f7a1221d9daa84fe047c2db94) )
2407   ROM_LOAD( "17.ic41",     0x14000, 0x1000, CRC(b308f0e5) SHA1(262e25be40dff66e65a0fe34c9d013a750b90876) )
23902408
2391   ROM_LOAD( "blaster.15",   0x18000, 0x4000, CRC(1ad146a4) SHA1(5ab3d9618023b59bc329a9eeef986901867a639b) )
2392   ROM_LOAD( "blaster.8",    0x1c000, 0x4000, CRC(f110bbb0) SHA1(314dea232a3706509399348c7415f933c64cea1b) )
2393   ROM_LOAD( "blaster.9",    0x20000, 0x4000, CRC(5c5b0f8a) SHA1(224f89c85b2b1ca511d006180b8d994fccbdfb6b) )
2394   ROM_LOAD( "blaster.10",   0x24000, 0x4000, CRC(d47eb67f) SHA1(5dcde8be1a7b1927b90ffab3219dc47c5b2f20e4) )
2395   ROM_LOAD( "blaster.6",    0x28000, 0x4000, CRC(47fc007e) SHA1(3a80b9b7ae460e9732f7c1cdd465a5b06ded970f) )
2396   ROM_LOAD( "blaster.5",    0x2c000, 0x4000, CRC(15c1b94d) SHA1(5d97628541eb8933870c3ffd3646b7aaf8af6af5) )
2397   ROM_LOAD( "blaster.14",   0x30000, 0x4000, CRC(aea6b846) SHA1(04cb4b5eb000471a0cec377a5236ac8c83529528) )
2398   ROM_LOAD( "blast30.7",    0x34000, 0x4000, CRC(a1c4db77) SHA1(7a878d44b6ca7444ecbb6c8f75e5e91de149daf3) )
2399   ROM_LOAD( "blaster.1",    0x38000, 0x4000, CRC(8d0ea9e7) SHA1(34f8e2e99748bed29285f7e4929bb920960ab03e) )
2400   ROM_LOAD( "blaster.2",    0x3c000, 0x4000, CRC(03c4012c) SHA1(53f0adc91e5f1ac58b08b3a6d2de8de5a40bebab) )
2401   ROM_LOAD( "blast30.4",    0x40000, 0x4000, CRC(39d2a32c) SHA1(33707877e841ef86a11b47ffabddce7f3d2a7030) )
2402   ROM_LOAD( "blast30.3",    0x44000, 0x4000, CRC(054c9f1c) SHA1(c21e3493f1ae506ab9fd28ed9ecc67d3305e9d7a) )
2409   ROM_LOAD( "15.ic38",     0x18000, 0x4000, CRC(1ad146a4) SHA1(5ab3d9618023b59bc329a9eeef986901867a639b) )
2410   ROM_LOAD( "8.ic20",      0x1c000, 0x4000, CRC(f110bbb0) SHA1(314dea232a3706509399348c7415f933c64cea1b) )
2411   ROM_LOAD( "9.ic22",      0x20000, 0x4000, CRC(5c5b0f8a) SHA1(224f89c85b2b1ca511d006180b8d994fccbdfb6b) )
2412   ROM_LOAD( "10.ic24",     0x24000, 0x4000, CRC(d47eb67f) SHA1(5dcde8be1a7b1927b90ffab3219dc47c5b2f20e4) )
2413   ROM_LOAD( "6.ic13",      0x28000, 0x4000, CRC(47fc007e) SHA1(3a80b9b7ae460e9732f7c1cdd465a5b06ded970f) )
2414   ROM_LOAD( "5.ic11",      0x2c000, 0x4000, CRC(15c1b94d) SHA1(5d97628541eb8933870c3ffd3646b7aaf8af6af5) )
2415   ROM_LOAD( "14.ic35",     0x30000, 0x4000, CRC(aea6b846) SHA1(04cb4b5eb000471a0cec377a5236ac8c83529528) )
2416   ROM_LOAD( "7.ic15",      0x34000, 0x4000, CRC(a1c4db77) SHA1(7a878d44b6ca7444ecbb6c8f75e5e91de149daf3) )
2417   ROM_LOAD( "1.ic1",       0x38000, 0x4000, CRC(8d0ea9e7) SHA1(34f8e2e99748bed29285f7e4929bb920960ab03e) )
2418   ROM_LOAD( "2.ic3",       0x3c000, 0x4000, CRC(03c4012c) SHA1(53f0adc91e5f1ac58b08b3a6d2de8de5a40bebab) )
2419   ROM_LOAD( "4.ic7",       0x40000, 0x4000, CRC(39d2a32c) SHA1(33707877e841ef86a11b47ffabddce7f3d2a7030) )
2420   ROM_LOAD( "3.ic6",       0x44000, 0x4000, CRC(054c9f1c) SHA1(c21e3493f1ae506ab9fd28ed9ecc67d3305e9d7a) )
24032421
24042422   ROM_REGION( 0x10000, "soundcpu", 0 )
2405   ROM_LOAD( "blaster.18",   0xf000, 0x1000, CRC(c33a3145) SHA1(6ffe2da7b70c0b576fbc1790a33eecdbb9ee3d02) )
2423   ROM_LOAD( "sb13.18",      0xf000, 0x1000, CRC(c33a3145) SHA1(6ffe2da7b70c0b576fbc1790a33eecdbb9ee3d02) )
2424   ROM_REGION( 0x10000, "soundcpu_b", 0 )
2425   ROM_LOAD( "sb10.18",      0xf000, 0x1000, CRC(c33a3145) SHA1(6ffe2da7b70c0b576fbc1790a33eecdbb9ee3d02) )
24062426
24072427   ROM_REGION( 0x0c00, "proms", 0 )      /* color & video-decoder PROM data */
24082428   ROM_LOAD( "decoder.4",    0x0800, 0x0200, CRC(e6631c23) SHA1(9988723269367fb44ef83f627186a1c88cf7877e) )
r12704r12705
24192439   ROM_LOAD( "blastkit.12",  0x12000, 0x2000, CRC(8b1e26ab) SHA1(7d30800a9302f5a83792499d8df536693d01f75d) )
24202440   ROM_LOAD( "blastkit.17",  0x14000, 0x1000, CRC(577d1e9a) SHA1(0064124a65490e0473dfb0081ec28b7ee43a04b5) )
24212441
2422   ROM_LOAD( "blaster.15",   0x18000, 0x4000, CRC(1ad146a4) SHA1(5ab3d9618023b59bc329a9eeef986901867a639b) )
2423   ROM_LOAD( "blaster.8",    0x1c000, 0x4000, CRC(f110bbb0) SHA1(314dea232a3706509399348c7415f933c64cea1b) )
2424   ROM_LOAD( "blaster.9",    0x20000, 0x4000, CRC(5c5b0f8a) SHA1(224f89c85b2b1ca511d006180b8d994fccbdfb6b) )
2425   ROM_LOAD( "blaster.10",   0x24000, 0x4000, CRC(d47eb67f) SHA1(5dcde8be1a7b1927b90ffab3219dc47c5b2f20e4) )
2426   ROM_LOAD( "blaster.6",    0x28000, 0x4000, CRC(47fc007e) SHA1(3a80b9b7ae460e9732f7c1cdd465a5b06ded970f) )
2427   ROM_LOAD( "blaster.5",    0x2c000, 0x4000, CRC(15c1b94d) SHA1(5d97628541eb8933870c3ffd3646b7aaf8af6af5) )
2428   ROM_LOAD( "blaster.14",   0x30000, 0x4000, CRC(aea6b846) SHA1(04cb4b5eb000471a0cec377a5236ac8c83529528) )
2442   ROM_LOAD( "blastkit.15",  0x18000, 0x4000, CRC(1ad146a4) SHA1(5ab3d9618023b59bc329a9eeef986901867a639b) )
2443   ROM_LOAD( "blastkit.8",   0x1c000, 0x4000, CRC(f110bbb0) SHA1(314dea232a3706509399348c7415f933c64cea1b) )
2444   ROM_LOAD( "blastkit.9",   0x20000, 0x4000, CRC(5c5b0f8a) SHA1(224f89c85b2b1ca511d006180b8d994fccbdfb6b) )
2445   ROM_LOAD( "blastkit.10",  0x24000, 0x4000, CRC(d47eb67f) SHA1(5dcde8be1a7b1927b90ffab3219dc47c5b2f20e4) )
2446   ROM_LOAD( "blastkit.6",   0x28000, 0x4000, CRC(47fc007e) SHA1(3a80b9b7ae460e9732f7c1cdd465a5b06ded970f) )
2447   ROM_LOAD( "blastkit.5",   0x2c000, 0x4000, CRC(15c1b94d) SHA1(5d97628541eb8933870c3ffd3646b7aaf8af6af5) )
2448   ROM_LOAD( "blastkit.14",  0x30000, 0x4000, CRC(aea6b846) SHA1(04cb4b5eb000471a0cec377a5236ac8c83529528) )
24292449   ROM_LOAD( "blastkit.7",   0x34000, 0x4000, CRC(6fcc2153) SHA1(00e7b6846c15400315d94e2c7d1c99b1a737c285) )
2430   ROM_LOAD( "blaster.1",    0x38000, 0x4000, CRC(8d0ea9e7) SHA1(34f8e2e99748bed29285f7e4929bb920960ab03e) )
2431   ROM_LOAD( "blaster.2",    0x3c000, 0x4000, CRC(03c4012c) SHA1(53f0adc91e5f1ac58b08b3a6d2de8de5a40bebab) )
2450   ROM_LOAD( "blastkit.1",   0x38000, 0x4000, CRC(8d0ea9e7) SHA1(34f8e2e99748bed29285f7e4929bb920960ab03e) )
2451   ROM_LOAD( "blastkit.2",   0x3c000, 0x4000, CRC(03c4012c) SHA1(53f0adc91e5f1ac58b08b3a6d2de8de5a40bebab) )
24322452   ROM_LOAD( "blastkit.4",   0x40000, 0x4000, CRC(f80e9ff5) SHA1(e232d96b6e07c7b4240fa4dd2cb9be4745a1be4b) )
24332453   ROM_LOAD( "blastkit.3",   0x44000, 0x4000, CRC(20e851f9) SHA1(efc288ef0333812a6282f22aade8e43e9a827533) )
24342454
24352455   ROM_REGION( 0x10000, "soundcpu", 0 )
2436   ROM_LOAD( "blaster.18",  0xf000, 0x1000, CRC(c33a3145) SHA1(6ffe2da7b70c0b576fbc1790a33eecdbb9ee3d02) )
2456   ROM_LOAD( "blastkit.18", 0xf000, 0x1000, CRC(c33a3145) SHA1(6ffe2da7b70c0b576fbc1790a33eecdbb9ee3d02) )
24372457
24382458   ROM_REGION( 0x0c00, "proms", 0 )      /* color & video-decoder PROM data */
24392459   ROM_LOAD( "decoder.4",    0x0800, 0x0200, CRC(e6631c23) SHA1(9988723269367fb44ef83f627186a1c88cf7877e) )
r12704r12705
27992819}
28002820
28012821
2802static DRIVER_INIT( blastkit )
2803{
2804   williams_state *state = machine.driver_data<williams_state>();
2805   CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9700);
2806}
2807
2808
28092822static DRIVER_INIT( spdball )
28102823{
28112824   williams_state *state = machine.driver_data<williams_state>();
r12704r12705
29152928
29162929/* Standard Williams hardware */
29172930GAME( 1981, stargate,   0,        williams,            stargate, stargate, ROT0,   "Williams", "Stargate", GAME_SUPPORTS_SAVE )
2918GAME( 1982, robotron,   0,        williams,            robotron, robotron, ROT0,   "Williams", "Robotron (Solid Blue label)", GAME_SUPPORTS_SAVE )
2919GAME( 1982, robotronyo, robotron, williams,            robotron, robotron, ROT0,   "Williams", "Robotron (Yellow/Orange label)", GAME_SUPPORTS_SAVE )
2931GAME( 1982, robotron,   0,        williams,            robotron, robotron, ROT0,   "Williams", "Robotron: 2084 (Solid Blue label)", GAME_SUPPORTS_SAVE )
2932GAME( 1982, robotronyo, robotron, williams,            robotron, robotron, ROT0,   "Williams", "Robotron: 2084 (Yellow/Orange label)", GAME_SUPPORTS_SAVE )
29202933GAME( 1982, joust,      0,        williams_muxed,      joust,    joust,    ROT0,   "Williams", "Joust (White/Green label)", GAME_SUPPORTS_SAVE )
29212934GAME( 1982, joustr,     joust,    williams_muxed,      joust,    joust,    ROT0,   "Williams", "Joust (Solid Red label)", GAME_SUPPORTS_SAVE )
29222935GAME( 1982, joustwr,    joust,    williams_muxed,      joust,    joust,    ROT0,   "Williams", "Joust (White/Red label)", GAME_SUPPORTS_SAVE )
r12704r12705
29292942GAME( 1982, sinistar2,  sinistar, sinistar,            sinistar, sinistar, ROT270, "Williams", "Sinistar (revision 2)", GAME_SUPPORTS_SAVE )
29302943GAME( 1983, playball,   0,        playball,            playball, playball, ROT270, "Williams", "PlayBall! (prototype)", GAME_SUPPORTS_SAVE )
29312944GAME( 1983, blaster,    0,        blaster,             blaster,  blaster,  ROT0,   "Williams", "Blaster", GAME_SUPPORTS_SAVE )
2932GAME( 1983, blaster30,  blaster,  blaster,             blaster,  blaster,  ROT0,   "Williams", "Blaster (early 30 wave version)", GAME_SUPPORTS_SAVE )
2933GAME( 1983, blasterkit, blaster,  blastkit,            blastkit, blastkit, ROT0,   "Williams", "Blaster (kit)", GAME_SUPPORTS_SAVE )
2945GAME( 1983, blaster30,  blaster,  blaster,             blaster,  blaster,  ROT0,   "Williams", "Blaster (early version with 30 waves)", GAME_SUPPORTS_SAVE )
2946GAME( 1983, blasterkit, blaster,  blastkit,            blastkit, blaster,  ROT0,   "Williams", "Blaster (kit)", GAME_SUPPORTS_SAVE )
29342947GAME( 1985, spdball,    0,        spdball,             spdball,  spdball,  ROT0,   "Williams", "Speed Ball (prototype)", GAME_SUPPORTS_SAVE )
29352948GAME( 1985, alienar,    0,        alienar,             alienar,  alienar,  ROT0,   "Duncan Brown", "Alien Arena", GAME_SUPPORTS_SAVE )
29362949GAME( 1985, alienaru,   alienar,  alienar,             alienar,  alienaru, ROT0,   "Duncan Brown", "Alien Arena (Stargate Upgrade)", GAME_SUPPORTS_SAVE )
src/emu/eminline.h
r12704r12705
1414#define __EMINLINE__
1515
1616/* we come with implementations for GCC x86 and PPC */
17#ifdef __GNUC__
17#if defined(__GNUC__) && !defined(SDLMAME_NOASM)
1818
1919#if defined(__i386__) || defined(__x86_64__)
2020#include "eigccx86.h"
src/emu/drivers/xtal.h
r12704r12705
3232    tolerance so be sure to reference existing parts only and not just
3333    accept direct readings as 100% true.
3434
35    MAME doesn't yet support fractions in crystal frequencies. For example,
36    XTAL_3_579545MHz should actually be 3579545.454545...Hz (39375000/11).
37    This is no problem though: see above note about tolerance.
38
3539    (Thanks to Guru for starting this documentation.)
3640
3741**************************************************************************/
r12704r12705
113117   XTAL_13_4952MHz      = 13495200,      /* Used on Shadow Force pcb and maybe other Technos pcbs? */
114118   XTAL_14MHz        = 14000000,
115119   XTAL_14_112MHz     = 14112000,      /* Timex/Sinclair TS2068 */
116   XTAL_14_31818MHz   = 14318180,      /* Extremely common, used on 100's of PCBs */
120   XTAL_14_31818MHz   = 14318181,      /* Extremely common, used on 100's of PCBs */
117121   XTAL_14_705882MHz   = 14705882,      /* Aleck64 */
118122   XTAL_14_7456MHz    = 14745600,      /* Namco System 12 & System Super 22/23 for H8/3002 CPU */
119123   XTAL_15MHz         = 15000000,      /* Sinclair QL */
r12704r12705
135139   XTAL_20_079MHz      = 20790000,      /* Blockade-hardware Gremlin games */
136140   XTAL_21MHz        = 21000000,      /* Lock-On pixel clock */
137141   XTAL_21_3MHz      = 21300000,
138   XTAL_21_477MHz      = 21477000,      /* Super Othello */
139   XTAL_21_4772MHz    = 21477270,      /* BMC bowling, some Data East 90's games, Vtech Socrates; NTSC color subcarrier * 6 */
142   XTAL_21_4772MHz    = 21477272,      /* BMC bowling, some Data East 90's games, Vtech Socrates; NTSC color subcarrier * 6 */
140143   XTAL_22MHz        = 22000000,
141144   XTAL_22_1184MHz      = 22118400,
142145   XTAL_23_9616MHz      = 23961600,      /* Osborne 4 (Vixen) */
r12704r12705
149152   XTAL_25_590906MHz   = 25590906,      /* Atari Jaguar NTSC */
150153   XTAL_25_593900MHz   = 25593900,      /* Atari Jaguar PAL */
151154   XTAL_25_601712MHz   = 25601712,      /* Astro Corp.'s Show Hand */
152   XTAL_26_66666MHz   = 26666660,      /* Irem M92 but most use 27MHz */
155   XTAL_26_66666MHz   = 26666666,      /* Irem M92 but most use 27MHz */
153156   XTAL_26_686MHz      = 26686000,      /* Typically used on 90's Taito PCBs to drive the custom chips */
154157   XTAL_27MHz        = 27000000,      /* Some Banpresto games macrossp, Irem M92 and 90's Toaplan games */
155158   XTAL_27_164MHz     = 27164000,      /* Typically used on 90's Taito PCBs to drive the custom chips */
r12704r12705
157160   XTAL_28MHz        = 28000000,
158161   XTAL_28_37516MHz   = 28375160,      /* Amiga PAL systems */
159162   XTAL_28_48MHz      = 28480000,      /* Chromatics CGC-7900 */
160   XTAL_28_63636MHz   = 28636360,      /* Later Leland games and Atari GT, Amiga NTSC , Raiden2 h/w */
163   XTAL_28_63636MHz   = 28636363,      /* Later Leland games and Atari GT, Amiga NTSC , Raiden2 h/w */
161164   XTAL_30MHz        = 30000000,      /* Impera Magic Card */
162165   XTAL_30_4761MHz    = 30476100,      /* Taito JC */
163166   XTAL_32MHz        = 32000000,
r12704r12705
169172   XTAL_36MHz        = 36000000,      /* Sega Model 1 video board */
170173   XTAL_38_76922MHz   = 38769220,      /* Namco System 21 video board */
171174   XTAL_40MHz        = 40000000,
172   XTAL_42_9545MHz    = 42954500,      /* CPS3 */
175   XTAL_42_9545MHz    = 42954545,      /* CPS3 */
173176   XTAL_44_1MHz      = 44100000,      /* Subsino's Bishou Jan */
174177   XTAL_45MHz        = 45000000,      /* Eolith with Hyperstone CPUs */
175178   XTAL_45_158MHz     = 45158000,      /* Sega Model 2A video board, Model 3 CPU board */
r12704r12705
181184   XTAL_52MHz        = 52000000,      /* Cojag */
182185   XTAL_53_693175MHz   = 53693175,      /* PSX-based h/w, Sony ZN1-2-based */
183186   XTAL_54MHz        = 54000000,      /* Taito JC */
184   XTAL_57_2727MHz    = 57272700,      /* Psikyo SH2 with /2 divider */
187   XTAL_57_2727MHz    = 57272727,      /* Psikyo SH2 with /2 divider */
185188   XTAL_60MHz        = 60000000,
186189   XTAL_61_44MHz      = 61440000,      /* dkong */
187190   XTAL_64MHz        = 64000000,      /* BattleToads */
src/emu/addrmap.h
r12704r12705
804804#define AM_IMPORT_FROM(_name) \
805805   ADDRESS_MAP_NAME(_name)(map, device); \
806806
807// importing data from inherited address maps
808#define AM_INHERIT_FROM(_name) \
809   _name(map, device); \
807810
811
808812// address ranges
809813#define AM_RANGE(_start, _end) \
810814   curentry = map.add(_start, _end, curentry); \
src/mess/mess.mak
r12704r12705
465465   $(MAME_MACHINE)/pcshare.o   \
466466   $(MAME_MACHINE)/megadriv.o  \
467467   $(MAME_MACHINE)/dc.o      \
468   $(MAME_MACHINE)/naomibd.o   \
469   $(MAME_MACHINE)/naomim4decoder.o \
470   $(MAME_MACHINE)/gdcrypt.o   \
471   $(MAME_MACHINE)/mie.o      \
472   $(MAME_MACHINE)/maple-dc.o   \
473   $(MAME_MACHINE)/mapledev.o   \
474   $(MAME_MACHINE)/dc-ctrl.o   \
475   $(MAME_MACHINE)/jvs13551.o   \
468   $(MAME_DRIVERS)/naomi.o    \
469   $(MAME_MACHINE)/dc.o       \
470   $(MAME_VIDEO)/dc.o          \
471   $(MAME_MACHINE)/naomi.o    \
472   $(MAME_MACHINE)/naomig1.o    \
473   $(MAME_MACHINE)/naomibd.o    \
474   $(MAME_MACHINE)/naomirom.o    \
475   $(MAME_MACHINE)/naomigd.o    \
476   $(MAME_MACHINE)/naomim1.o    \
477   $(MAME_MACHINE)/naomim2.o    \
478   $(MAME_MACHINE)/naomim4.o    \
479   $(MAME_MACHINE)/awboard.o    \
480   $(MAME_MACHINE)/mie.o       \
481   $(MAME_MACHINE)/maple-dc.o    \
482   $(MAME_MACHINE)/mapledev.o    \
483   $(MAME_MACHINE)/dc-ctrl.o    \
484   $(MAME_MACHINE)/jvs13551.o    \
476485   $(MAME_VIDEO)/dc.o         \
477486   $(MAME_VIDEO)/neogeo.o      \
478487   $(MAME_MACHINE)/neoprot.o   \

Previous 15994 Revisions Next


© 1998-2018 The MESS Team