trunk/src/mame/drivers/naomi.c
| r243139 | r243140 | |
| 1509 | 1509 | #include "machine/jvs13551.h" |
| 1510 | 1510 | #include "includes/dc.h" |
| 1511 | 1511 | #include "includes/naomi.h" |
| 1512 | | #include "machine/naomicrypt.h" |
| 1513 | 1512 | |
| 1514 | 1513 | #define CPU_CLOCK (200000000) |
| 1515 | 1514 | |
| r243139 | r243140 | |
| 2654 | 2653 | */ |
| 2655 | 2654 | |
| 2656 | 2655 | static MACHINE_CONFIG_DERIVED( naomim1, naomi_base ) |
| 2657 | | MCFG_NAOMI_M1_BOARD_ADD("rom_board", ":rom_key", "naomibd_eeprom", ":boardid", WRITE8(dc_state, g1_irq)) |
| 2656 | MCFG_NAOMI_M1_BOARD_ADD("rom_board", "naomibd_eeprom", ":boardid", WRITE8(dc_state, g1_irq)) |
| 2658 | 2657 | MACHINE_CONFIG_END |
| 2659 | 2658 | |
| 2660 | 2659 | /* |
| r243139 | r243140 | |
| 4075 | 4074 | |
| 4076 | 4075 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 4077 | 4076 | |
| 4078 | | _NAOMI_M1_KEYFILE( "gram2000-key.bin", CRC(179314d9) SHA1(3dbbc04e9ff62800d08c4a239af3a83252a28dc0) ) |
| 4077 | // 840-0039 2000 |
| 4078 | ROM_PARAMETER( ":rom_board:key", "3f5c807f" ) |
| 4079 | 4079 | ROM_END |
| 4080 | 4080 | |
| 4081 | 4081 | ROM_START( tduno ) |
| r243139 | r243140 | |
| 4116 | 4116 | |
| 4117 | 4117 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 4118 | 4118 | |
| 4119 | | _NAOMI_M1_KEYFILE("tduno2.key", CRC(8e0f0f3b) SHA1(914d3db8746c806d559539cc0851169161d32c04) ) |
| 4119 | // 840-0022 2000 |
| 4120 | ROM_PARAMETER( ":rom_board:key", "2f6f0f8d" ) |
| 4120 | 4121 | ROM_END |
| 4121 | 4122 | |
| 4122 | 4123 | ROM_START( mtkob2 ) |
| r243139 | r243140 | |
| 4134 | 4135 | |
| 4135 | 4136 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 4136 | 4137 | |
| 4137 | | _NAOMI_M1_KEYFILE("mtkob2-key.bin", CRC(db088208) SHA1(14d65ad2555183a445abcd93907c85df4032b41d) ) |
| 4138 | // 840-0150 2003 |
| 4139 | ROM_PARAMETER( ":rom_board:key", "3892fb3a" ) |
| 4138 | 4140 | ROM_END |
| 4139 | 4141 | |
| 4140 | 4142 | ROM_START( mushi2k5 ) |
| r243139 | r243140 | |
| 4498 | 4500 | |
| 4499 | 4501 | ROM_COPY( "rom_board", 0x1200000, 0x400000, 0x400000 ) |
| 4500 | 4502 | |
| 4501 | | _NAOMI_M1_KEYFILE( "mvsc2-key.bin", CRC(76f095b4) SHA1(773fd67e1eb471a989b3ee6e969a3d33bf61e779) ) |
| 4503 | // 841-0007-02 2000 |
| 4504 | ROM_PARAMETER( ":rom_board:key", "7c6e8bc1" ) |
| 4502 | 4505 | ROM_END |
| 4503 | 4506 | |
| 4504 | 4507 | /* toy fighter - 1999 sega */ |
| r243139 | r243140 | |
| 5102 | 5105 | |
| 5103 | 5106 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 5104 | 5107 | |
| 5105 | | _NAOMI_M1_KEYFILE("qmegamis-key.bin", CRC(b08650c0) SHA1(9e6b0fac6fb05209da9e01bb1a5437949d218078) ) |
| 5108 | // 840-0030 2000 |
| 5109 | ROM_PARAMETER( ":rom_board:key", "96489bcd" ) |
| 5106 | 5110 | ROM_END |
| 5107 | 5111 | |
| 5108 | 5112 | /* |
| r243139 | r243140 | |
| 5233 | 5237 | |
| 5234 | 5238 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 5235 | 5239 | |
| 5236 | | _NAOMI_M1_KEYFILE( "shootopl-key.bin", CRC(45547e02) SHA1(4f79f478ff1eea14bc939a67ff570143cb56a4bf) ) |
| 5240 | // 840-0098 2002 |
| 5241 | ROM_PARAMETER( ":rom_board:key", "a77cf3a0" ) |
| 5237 | 5242 | ROM_END |
| 5238 | 5243 | |
| 5239 | 5244 | // Shootout Pool Prize |
| r243139 | r243140 | |
| 5250 | 5255 | |
| 5251 | 5256 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 5252 | 5257 | |
| 5253 | | _NAOMI_M1_KEYFILE( "shootpl-key.bin", CRC(03c30b17) SHA1(e8e8659aa27b3d1cac2268850d3973d9afeaeba9) ) |
| 5258 | // 840-0128 2002 |
| 5259 | ROM_PARAMETER( ":rom_board:key", "cde98d9d" ) |
| 5254 | 5260 | ROM_END |
| 5255 | 5261 | |
| 5256 | 5262 | // Shootout Pool Prize Ver. B |
| r243139 | r243140 | |
| 5267 | 5273 | |
| 5268 | 5274 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 5269 | 5275 | |
| 5270 | | _NAOMI_M1_KEYFILE( "shootpl-key.bin", CRC(03c30b17) SHA1(e8e8659aa27b3d1cac2268850d3973d9afeaeba9) ) |
| 5276 | // 840-0128 2002 |
| 5277 | ROM_PARAMETER( ":rom_board:key", "cde98d9d" ) |
| 5271 | 5278 | ROM_END |
| 5272 | 5279 | |
| 5273 | 5280 | /* Oinori-daimyoujin Matsuri (medal) */ |
| r243139 | r243140 | |
| 6249 | 6256 | |
| 6250 | 6257 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 6251 | 6258 | |
| 6252 | | _NAOMI_M1_KEYFILE("vtenis2c-key.bin", CRC(b8c5b510) SHA1(f36d037a62a576e71211093e075f0ffa7e312c2d) ) |
| 6259 | // 840-0084 2001 |
| 6260 | ROM_PARAMETER( ":rom_board:key", "43472d2d" ) |
| 6253 | 6261 | ROM_END |
| 6254 | 6262 | |
| 6255 | 6263 | ROM_START( kick4csh ) |
| r243139 | r243140 | |
| 6278 | 6286 | |
| 6279 | 6287 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 6280 | 6288 | |
| 6281 | | _NAOMI_M1_KEYFILE( "kick4csh-key.bin", CRC(889d2ea1) SHA1(daf7acf41b6bc607d443a93221a3e4554b99547f) ) |
| 6289 | // 840-0140 2004 |
| 6290 | ROM_PARAMETER( ":rom_board:key", "c9570882" ) |
| 6282 | 6291 | ROM_END |
| 6283 | 6292 | |
| 6284 | 6293 | ROM_START( wrungp ) |
| r243139 | r243140 | |
| 6587 | 6596 | ROM_COPY( "rom_board", 0x01000000, 0x400000, 0xc00000 ) |
| 6588 | 6597 | |
| 6589 | 6598 | // M1 board, but it doesn't appear the protection is used |
| 6590 | | _NAOMI_M1_KEYFILE_UNUSED |
| 6599 | ROM_PARAMETER( ":rom_board:key", "0" ) |
| 6591 | 6600 | |
| 6592 | 6601 | // this dump can't be used as main_eeprom, because that's exactly 0x80 bytes |
| 6593 | 6602 | ROM_REGION(0x84, "some_eeprom", 0) |
| r243139 | r243140 | |
| 7949 | 7958 | |
| 7950 | 7959 | ROM_COPY( "rom_board", 0x1000000, 0x400000, 0xc00000 ) |
| 7951 | 7960 | |
| 7952 | | _NAOMI_M1_KEYFILE( "vf4evoct-key.bin", CRC(11111111) SHA1(1111111111111111111111111111111111111111) ) |
| 7961 | // 840-0106 2002 |
| 7962 | ROM_PARAMETER( ":rom_board:key", "cdb05b1e" ) |
| 7953 | 7963 | ROM_END |
| 7954 | 7964 | |
| 7955 | 7965 | ROM_START( hopper ) |
trunk/src/mame/machine/naomicrypt.c
| r243139 | r243140 | |
| 1 | | |
| 2 | | /* Sega 'M1' type encryption ( using an Actel A54SX32 ) |
| 3 | | |
| 4 | | see naomim1.c for Naomi hokup details |
| 5 | | |
| 6 | | The keys here are totally arbitrary and have nothing to do with the real keys. |
| 7 | | |
| 8 | | used by |
| 9 | | Naomi |
| 10 | | Hikaru |
| 11 | | |
| 12 | | |
| 13 | | |
| 14 | | */ |
| 15 | | |
| 16 | | |
| 17 | | #include "emu.h" |
| 18 | | #include "naomicrypt.h" |
| 19 | | |
| 20 | | struct game_keys |
| 21 | | { |
| 22 | | const char *name; /* game driver name */ |
| 23 | | const UINT32 key; |
| 24 | | |
| 25 | | }; |
| 26 | | |
| 27 | | static const struct game_keys keys_table[] = |
| 28 | | { |
| 29 | | // name key gameid # year |
| 30 | | // M1 |
| 31 | | { "tduno2", 0x2f6f0f8d }, // 840-0022 2000 |
| 32 | | { "qmegamis", 0x96489bcd }, // 840-0030 2000 |
| 33 | | { "gram2000", 0x3f5c807f }, // 840-0039 2000 |
| 34 | | { "vtenis2c", 0x43472d2d }, // 840-0084 2001 |
| 35 | | { "shootopl", 0xa77cf3a0 }, // 840-0098 2002 |
| 36 | | { "vf4evoct", 0xcdb05b1e }, // 840-0106 2002 |
| 37 | | { "shootpl", 0xcde98d9d }, // 840-0128 2002 |
| 38 | | { "shootplm", 0xcde98d9d }, // 840-0136 2002 |
| 39 | | { "kick4csh", 0xc9570882 }, // 840-0140 2004 |
| 40 | | { "mtkob2", 0x3892fb3a }, // 840-0150 2003 |
| 41 | | { "mvsc2", 0x7c6e8bc1 }, // 841-0007-02 2000 |
| 42 | | // sgnascar (Hikaru) |
| 43 | | { NULL, 0 } // end of table |
| 44 | | }; |
| 45 | | |
| 46 | | |
| 47 | | UINT32 get_naomi_key(running_machine &machine) |
| 48 | | { |
| 49 | | const char *gamename = machine.system().name; |
| 50 | | const struct game_keys *k = &keys_table[0]; |
| 51 | | |
| 52 | | while (k->name) |
| 53 | | { |
| 54 | | if (strcmp(k->name, gamename) == 0) |
| 55 | | { |
| 56 | | // we have a proper key so return it |
| 57 | | return k->key; |
| 58 | | } |
| 59 | | ++k; |
| 60 | | } |
| 61 | | |
| 62 | | printf("get_naomi_key : KEY NOT FOUND\n"); |
| 63 | | |
| 64 | | return 0; |
| 65 | | } |
trunk/src/mame/machine/naomim1.c
| r243139 | r243140 | |
| 13 | 13 | naomi_m1_board::naomi_m1_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 14 | 14 | : naomi_board(mconfig, NAOMI_M1_BOARD, "Sega NAOMI M1 Board", tag, owner, clock, "naomi_m1_board", __FILE__) |
| 15 | 15 | { |
| 16 | | key_tag = 0; |
| 17 | 16 | } |
| 18 | 17 | |
| 19 | | void naomi_m1_board::static_set_tags(device_t &device, const char *_key_tag) |
| 20 | | { |
| 21 | | naomi_m1_board &dev = downcast<naomi_m1_board &>(device); |
| 22 | | dev.key_tag = _key_tag; |
| 23 | | } |
| 24 | | |
| 25 | 18 | READ16_MEMBER(naomi_m1_board::actel_id_r) |
| 26 | 19 | { |
| 27 | 20 | if (rombdid_tag && memregion(rombdid_tag) != NULL) |
| r243139 | r243140 | |
| 37 | 30 | { |
| 38 | 31 | naomi_board::device_start(); |
| 39 | 32 | |
| 40 | | #if USE_NAOMICRYPT |
| 41 | | key = get_naomi_key(machine()); |
| 42 | | #else |
| 43 | | const UINT8 *key_data = memregion(key_tag)->base(); |
| 44 | | key = (key_data[0] << 24) | (key_data[1] << 16) | (key_data[2] << 8) | key_data[3]; |
| 45 | | #endif |
| 33 | astring skey = parameter("key"); |
| 34 | if(skey) |
| 35 | key = strtoll(skey.cstr(), 0, 16); |
| 36 | else |
| 37 | { |
| 38 | logerror("%s: Warning: key not provided\n", tag()); |
| 39 | key = 0; |
| 40 | } |
| 41 | |
| 46 | 42 | buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE); |
| 47 | 43 | |
| 48 | 44 | save_pointer(NAME(buffer), BUFFER_SIZE); |
trunk/src/mame/machine/naomim1.h
| r243139 | r243140 | |
| 3 | 3 | |
| 4 | 4 | #include "naomibd.h" |
| 5 | 5 | |
| 6 | | #define MCFG_NAOMI_M1_BOARD_ADD(_tag, _key_tag, _eeprom_tag, _actel_tag, _irq_cb) \ |
| 7 | | MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M1_BOARD, _eeprom_tag, _actel_tag, _irq_cb) \ |
| 8 | | naomi_m1_board::static_set_tags(*device, _key_tag); |
| 6 | #define MCFG_NAOMI_M1_BOARD_ADD(_tag, _eeprom_tag, _actel_tag, _irq_cb) \ |
| 7 | MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M1_BOARD, _eeprom_tag, _actel_tag, _irq_cb) |
| 9 | 8 | |
| 10 | 9 | class naomi_m1_board : public naomi_board |
| 11 | 10 | { |
| 12 | 11 | public: |
| 13 | 12 | naomi_m1_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 14 | 13 | |
| 15 | | static void static_set_tags(device_t &device, const char *_key_tag); |
| 16 | | |
| 17 | 14 | virtual DECLARE_ADDRESS_MAP(submap, 16); |
| 18 | 15 | |
| 19 | 16 | DECLARE_READ16_MEMBER(actel_id_r); |
| r243139 | r243140 | |
| 28 | 25 | |
| 29 | 26 | private: |
| 30 | 27 | enum { BUFFER_SIZE = 32768 }; |
| 31 | | |
| 32 | | const char *key_tag; |
| 33 | 28 | UINT32 key; |
| 34 | 29 | |
| 35 | 30 | UINT8 *buffer; |