trunk/src/mame/drivers/naomi.c
| r241905 | r241906 | |
| 2661 | 2661 | */ |
| 2662 | 2662 | |
| 2663 | 2663 | static MACHINE_CONFIG_DERIVED( naomim4, naomi_base ) |
| 2664 | | MCFG_NAOMI_M4_BOARD_ADD("rom_board", ":pic_readout", "naomibd_eeprom", ":boardid", WRITE8(dc_state, g1_irq)) |
| 2664 | MCFG_NAOMI_M4_BOARD_ADD("rom_board", ":rom_key", "naomibd_eeprom", ":boardid", WRITE8(dc_state, g1_irq)) |
| 2665 | 2665 | MACHINE_CONFIG_END |
| 2666 | 2666 | |
| 2667 | 2667 | /* |
| r241905 | r241906 | |
| 5597 | 5597 | ROM_LOAD( "fpr-24333.ic8", 0x0000000, 0x4000000, CRC(a467b69c) SHA1(66a841b72ef1bb8cbabbfb1d14081b4dff14b1d3) ) |
| 5598 | 5598 | ROM_LOAD( "fpr-24334.ic9", 0x4000000, 0x4000000, CRC(13d2d1dc) SHA1(6a47cfaddf006e6ff46837fac956fbcc20619d79) ) |
| 5599 | 5599 | |
| 5600 | | // ROM_REGION( 4, "rom_key", 0 ) |
| 5601 | | // ROM_LOAD( "mushik2e-key.bin", 0, 4, CRC(b32a0633) SHA1(984c01e43cf359d8e8a0c6cb1a04c5dc3da47d39) ) |
| 5602 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5603 | | ROM_LOAD( "317-0437-com.ic3", 0, 20, NO_DUMP ) |
| 5600 | ROM_REGION( 4, "rom_key", 0 ) |
| 5601 | ROM_LOAD( "mushik2e-key.bin", 0, 4, CRC(b32a0633) SHA1(984c01e43cf359d8e8a0c6cb1a04c5dc3da47d39) ) |
| 5604 | 5602 | |
| 5605 | 5603 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x02)) |
| 5606 | 5604 | ROM_END |
| r241905 | r241906 | |
| 5614 | 5612 | ROM_LOAD( "epr-24357.ic7", 0x0000000, 0x0400000, CRC(a2236d58) SHA1(3746b9d3c0f7ecf6340619bb8bf01f170ac4efb7) ) // EPR mode, overwrite FPR data |
| 5615 | 5613 | ROM_LOAD( "fpr-24334.ic9", 0x4000000, 0x4000000, CRC(13d2d1dc) SHA1(6a47cfaddf006e6ff46837fac956fbcc20619d79) ) |
| 5616 | 5614 | |
| 5617 | | // ROM_REGION( 4, "rom_key", 0 ) |
| 5618 | | // ROM_LOAD( "mushik2e-key.bin", 0, 4, CRC(b32a0633) SHA1(984c01e43cf359d8e8a0c6cb1a04c5dc3da47d39) ) |
| 5619 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5620 | | ROM_LOAD( "317-0437-com.ic3", 0, 20, NO_DUMP ) |
| 5615 | ROM_REGION( 4, "rom_key", 0 ) |
| 5616 | ROM_LOAD( "mushik2e-key.bin", 0, 4, CRC(b32a0633) SHA1(984c01e43cf359d8e8a0c6cb1a04c5dc3da47d39) ) |
| 5621 | 5617 | |
| 5622 | 5618 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x82)) |
| 5623 | 5619 | ROM_END |
| r241905 | r241906 | |
| 5630 | 5626 | ROM_LOAD( "fpr-24338.ic8", 0x0000000, 0x4000000, CRC(1423c374) SHA1(e6a3f0eaccd13c161d07705bcd00f447f08fc186) ) |
| 5631 | 5627 | ROM_LOAD( "fpr-24339.ic9", 0x4000000, 0x4000000, CRC(11883792) SHA1(1782db04f74394f981f887ab1a95d687eb2c0b35) ) |
| 5632 | 5628 | |
| 5633 | | // ROM_REGION( 4, "rom_key", 0 ) |
| 5634 | | // ROM_LOAD( "zunou-key.bin", 0, 4, CRC(cbe35afb) SHA1(78877655800aae27661bf720e1c37d6c6f2e3d1c) ) |
| 5635 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5636 | | ROM_LOAD( "317-0435-jpn.ic3", 0, 20, NO_DUMP ) |
| 5629 | ROM_REGION( 4, "rom_key", 0 ) |
| 5630 | ROM_LOAD( "zunou-key.bin", 0, 4, CRC(cbe35afb) SHA1(78877655800aae27661bf720e1c37d6c6f2e3d1c) ) |
| 5637 | 5631 | |
| 5638 | 5632 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x02)) |
| 5639 | 5633 | ROM_END |
| r241905 | r241906 | |
| 5648 | 5642 | ROM_LOAD( "fpr-24415.ic10", 0x8000000, 0x4000000, CRC(133c742c) SHA1(89f857a31731dc918afc72b6cb716f5c77cb9d6e) ) |
| 5649 | 5643 | ROM_LOAD( "fpr-24416.ic11", 0xc000000, 0x4000000, CRC(562fb88e) SHA1(172678e3e27cfad7f7e6217c4653a4ba119bfbdf) ) |
| 5650 | 5644 | |
| 5651 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5652 | | ROM_LOAD( "317-5129-jpn.ic3", 0, 20, CRC(b6191cea) SHA1(13e14ff013bf2728203641303141c016e82b10a3) ) |
| 5645 | ROM_REGION( 4, "rom_key", 0 ) |
| 5646 | ROM_LOAD( "sl2007-key.bin", 0, 4, CRC(d5d1e807) SHA1(8a0cc371729c622bb05c5d26b3e39ec31d29ace1) ) |
| 5653 | 5647 | |
| 5654 | 5648 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04)) |
| 5655 | 5649 | ROM_END |
| r241905 | r241906 | |
| 5664 | 5658 | ROM_LOAD( "fpr-24384.ic10", 0x8000000, 0x4000000, CRC(2e9116c4) SHA1(58903a33c4ce72a1f75aefcab94393fc2e8bd2d9) ) |
| 5665 | 5659 | ROM_LOAD( "fpr-24385.ic11", 0xc000000, 0x4000000, CRC(2b79f45d) SHA1(db97d980bf1590df4b983a4b7786977687238ef5) ) |
| 5666 | 5660 | |
| 5667 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5668 | | ROM_LOAD( "317-0495-com.ic3", 0, 20, CRC(675aca7b) SHA1(5127189e1f960abf9ed3f643158747d9abcaee1c) ) |
| 5661 | ROM_REGION( 4, "rom_key", 0 ) |
| 5662 | ROM_LOAD( "asndynmt-key.bin", 0, 4, CRC(bf5396a9) SHA1(0b27fdc800143fb977cb2f1e937078d7a7006939) ) |
| 5669 | 5663 | |
| 5670 | 5664 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04)) |
| 5671 | 5665 | ROM_END |
| r241905 | r241906 | |
| 5680 | 5674 | ROM_LOAD( "fpr-24439.ic10", 0x8000000, 0x4000000, CRC(c02040f9) SHA1(27ad2cb45e8a516433917f060ca9798412bb95f7) ) |
| 5681 | 5675 | // IC11 Populated, Empty |
| 5682 | 5676 | |
| 5683 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5684 | | ROM_LOAD( "317-5131-jpn.ic3", 0, 20, CRC(44ab8ca9) SHA1(c17b10041e70590547ed010dc16a4dd2510fcc80) ) |
| 5677 | ROM_REGION( 4, "rom_key", 0 ) |
| 5678 | ROM_LOAD( "illvelo-key.bin", 0, 4, CRC(e164952f) SHA1(6c0dfe567640e1e843a5d7bf858a24c101dfcf95) ) |
| 5685 | 5679 | |
| 5686 | 5680 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04)) |
| 5687 | 5681 | ROM_END |
| r241905 | r241906 | |
| 5696 | 5690 | ROM_LOAD( "ic10.bin", 0x8000000, 0x4000000, CRC(76fb945f) SHA1(448be0c3d9a7c3956dd51aca3c4d8d28f8cec227) ) |
| 5697 | 5691 | // IC11 Populated, Empty |
| 5698 | 5692 | |
| 5699 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5700 | | ROM_LOAD( "317-5132-jpn.ic3", 0, 20, CRC(f2089de5) SHA1(12af0681decb22bbfa4b3e01037c3503846f265a) ) |
| 5693 | ROM_REGION( 4, "rom_key", 0 ) |
| 5694 | ROM_LOAD( "mamonoro-key.bin", 0x000000, 0x000004, CRC(264ca27a) SHA1(3b81b9794d86697f8eac7ea6945d992564ad6199) ) |
| 5701 | 5695 | |
| 5702 | 5696 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04)) |
| 5703 | 5697 | ROM_END |
| r241905 | r241906 | |
| 5714 | 5708 | ROM_LOAD( "ic12.bin", 0x10000000, 0x4000000, CRC(b8a6bff2) SHA1(befbc2e917b3107f1c4bfb9169623282ff97bfb2) ) |
| 5715 | 5709 | ROM_LOAD( "ic13.bin", 0x14000000, 0x4000000, CRC(4886329f) SHA1(6ccf6fb83cfdbef3f85f6c06e641c38ff434d605) ) |
| 5716 | 5710 | |
| 5717 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5718 | | ROM_LOAD( "317-5133-jpn.ic3", 0, 20, CRC(3dc7d902) SHA1(bb70e80dff878bca3652088f3333079e0781f482) ) |
| 5711 | ROM_REGION( 4, "rom_key", 0 ) |
| 5712 | ROM_LOAD( "mbaa-key.bin", 0x000000, 0x000004, CRC(f4ad909f) SHA1(27ba44592c2642b5862a24f68c755ad4115e6047) ) |
| 5719 | 5713 | |
| 5720 | 5714 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x06)) |
| 5721 | 5715 | ROM_END |
| r241905 | r241906 | |
| 5733 | 5727 | ROM_LOAD( "ic12.bin", 0x10000000, 0x4000000, CRC(b8a6bff2) SHA1(befbc2e917b3107f1c4bfb9169623282ff97bfb2) ) |
| 5734 | 5728 | ROM_LOAD( "ic13.bin", 0x14000000, 0x4000000, CRC(4886329f) SHA1(6ccf6fb83cfdbef3f85f6c06e641c38ff434d605) ) |
| 5735 | 5729 | |
| 5736 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5737 | | ROM_LOAD( "317-5133-jpn.ic3", 0, 20, CRC(3dc7d902) SHA1(bb70e80dff878bca3652088f3333079e0781f482) ) |
| 5730 | ROM_REGION( 4, "rom_key", 0 ) |
| 5731 | ROM_LOAD( "mbaa-key.bin", 0x000000, 0x000004, CRC(f4ad909f) SHA1(27ba44592c2642b5862a24f68c755ad4115e6047) ) |
| 5738 | 5732 | |
| 5739 | 5733 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x86)) |
| 5740 | 5734 | ROM_END |
| r241905 | r241906 | |
| 5748 | 5742 | ROM_LOAD( "ic9.bin", 0x4000000, 0x4000000, CRC(16cf2e7a) SHA1(ff7c6540e4507f84e3128ba03be4826ba504678c) ) |
| 5749 | 5743 | // IC10 and IC11 Populated, Empty |
| 5750 | 5744 | |
| 5751 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5752 | | ROM_LOAD( "317-5138-jpn.ic3", 0, 20, CRC(babcc420) SHA1(653cdcfa388426f4ce03c76506046ec6fd070562) ) |
| 5745 | ROM_REGION( 4, "rom_key", 0 ) |
| 5746 | ROM_LOAD( "radirgyn-key.bin", 0x000000, 0x000004, CRC(c158cf3b) SHA1(c128646d7fee79fc10bf7bbaa23121f347df77f4) ) |
| 5753 | 5747 | |
| 5754 | 5748 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04)) |
| 5755 | 5749 | ROM_END |
| r241905 | r241906 | |
| 5763 | 5757 | ROM_LOAD( "ic9.bin", 0x4000000, 0x4000000, CRC(18c994d7) SHA1(159e1425b2fc645133814b0d26d93a90e9849b1a) ) |
| 5764 | 5758 | // IC10 and IC11 Populated, Empty |
| 5765 | 5759 | |
| 5766 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5767 | | ROM_LOAD( "317-5130-jpn.ic3", 0, 20, CRC(3e0c010b) SHA1(b6da97d4ecb228e73fb9a5ada837d0d6699ab0f1) ) |
| 5760 | ROM_REGION( 4, "rom_key", 0 ) |
| 5761 | ROM_LOAD( "ausfache-key.bin", 0, 4, CRC(93cdc793) SHA1(f0a0c321a3bdf8ca87cbd840a168a9057c08f16a) ) |
| 5768 | 5762 | |
| 5769 | 5763 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04)) |
| 5770 | 5764 | ROM_END |
| r241905 | r241906 | |
| 5783 | 5777 | ROM_REGION( 0x200000, "ioboard", 0) // touch screen I/O board, program disassembles as little-endian SH-4 |
| 5784 | 5778 | ROM_LOAD( "fpr24351.ic14", 0x000000, 0x200000, CRC(4d1b7b89) SHA1(965b8c6b5a2e7b3f1b1e2eac19c86000c3b66754) ) |
| 5785 | 5779 | |
| 5786 | | // ROM_REGION( 4, "rom_key", 0 ) |
| 5787 | | // ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) ) |
| 5788 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5789 | | ROM_LOAD( "317-0461-com.ic3", 0, 20, NO_DUMP ) |
| 5780 | ROM_REGION( 4, "rom_key", 0 ) |
| 5781 | ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) ) |
| 5790 | 5782 | |
| 5791 | 5783 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x05)) |
| 5792 | 5784 | ROM_END |
| r241905 | r241906 | |
| 5805 | 5797 | ROM_REGION( 0x200000, "ioboard", 0) // touch screen I/O board, program disassembles as little-endian SH-4 |
| 5806 | 5798 | ROM_LOAD( "fpr24351.ic14", 0x000000, 0x200000, CRC(4d1b7b89) SHA1(965b8c6b5a2e7b3f1b1e2eac19c86000c3b66754) ) |
| 5807 | 5799 | |
| 5808 | | // ROM_REGION( 4, "rom_key", 0 ) |
| 5809 | | // ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) ) |
| 5810 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5811 | | ROM_LOAD( "317-0461-com.ic3", 0, 20, NO_DUMP ) |
| 5800 | ROM_REGION( 4, "rom_key", 0 ) |
| 5801 | ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) ) |
| 5812 | 5802 | |
| 5813 | 5803 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x05)) |
| 5814 | 5804 | ROM_END |
| r241905 | r241906 | |
| 5826 | 5816 | ROM_LOAD( "fpr-24425.ic10", 0x08000000, 0x4000000, CRC(6223ebac) SHA1(64c0ec61c108acbb557e7d3837f578deba832cb6) ) |
| 5827 | 5817 | ROM_LOAD( "fpr-24426.ic11", 0x0c000000, 0x4000000, CRC(c78b0981) SHA1(f889acf9065566e11ff985a3b6c4824e364d57ae) ) |
| 5828 | 5818 | |
| 5829 | | ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader |
| 5830 | | ROM_LOAD( "317-0503-jpn.ic3", 0, 20, CRC(69fc3f47) SHA1(3a887c62e93fa264b307c954eb39a4fca1bdfad6) ) |
| 5819 | ROM_REGION( 4, "rom_key", 0 ) |
| 5820 | ROM_LOAD( "rhytngk-key.bin", 0x000000, 0x000004, CRC(e2560d28) SHA1(46fb9b47a0df3035f92db2b0c63a6e4e0745ad29) ) |
| 5831 | 5821 | |
| 5832 | 5822 | ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04)) |
| 5833 | 5823 | ROM_END |
trunk/src/mame/machine/naomim4.c
| r241905 | r241906 | |
| 16 | 16 | // phase is indeed a nibble-based linear combination. |
| 17 | 17 | // With that block cipher, a stream cipher is constructed by feeding the output result of the 1st round |
| 18 | 18 | // of a certain 16-bits block as a whitening value for the next block. The cart dependent data used by |
| 19 | | // the algorithm is a 32-bits key stored in the PIC16C621A. The hardware auto-reset the feed value |
| 19 | // the algorithm is comprised by a 16-bits "key" and a 16-bits IV (initialization vector) --though they |
| 20 | // will be merged in a only 32-bits number in the code--. The hardware auto-reset the feed value |
| 20 | 21 | // to the cart-based IV every 16 blocks (32 bytes); that reset is not address-based, but index-based. |
| 21 | 22 | |
| 22 | 23 | const device_type NAOMI_M4_BOARD = &device_creator<naomi_m4_board>; |
| 23 | 24 | |
| 24 | 25 | const UINT8 naomi_m4_board::k_sboxes[4][16] = { |
| 25 | | {9,8,2,11,1,14,5,15,12,6,0,3,7,13,10,4}, |
| 26 | | {2,10,0,15,14,1,11,3,7,12,13,8,4,9,5,6}, |
| 27 | | {4,11,3,8,7,2,15,13,1,5,14,9,6,12,0,10}, |
| 28 | | {1,13,8,2,0,5,6,14,4,11,15,10,12,3,7,9} |
| 26 | {13,14,1,11,7,9,10,0,15,6,4,5,8,2,12,3}, |
| 27 | {12,3,14,6,7,15,2,13,1,4,11,0,9,10,8,5}, |
| 28 | {6,12,0,10,1,5,14,9,7,2,15,13,4,11,3,8}, |
| 29 | {9,12,8,7,10,4,0,15,1,11,14,2,13,5,6,3} |
| 29 | 30 | }; |
| 30 | 31 | |
| 31 | 32 | // from S29GL512N datasheet |
| r241905 | r241906 | |
| 66 | 67 | key = tempkey & 0xffff; |
| 67 | 68 | #else |
| 68 | 69 | const UINT8 *key_data = memregion(key_tag)->base(); |
| 69 | | subkey1 = (key_data[17] << 8) | key_data[16]; |
| 70 | | subkey2 = (key_data[19] << 8) | key_data[18]; |
| 70 | key = (key_data[2] << 8) | key_data[3]; |
| 71 | iv = (key_data[0] << 8) | key_data[1]; |
| 71 | 72 | #endif |
| 72 | 73 | buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE); |
| 73 | 74 | enc_init(); |
| r241905 | r241906 | |
| 116 | 117 | encryption = false; |
| 117 | 118 | cfi_mode = false; |
| 118 | 119 | counter = 0; |
| 119 | | iv = 0; |
| 120 | cur_iv = 0; |
| 120 | 121 | } |
| 121 | 122 | |
| 122 | 123 | void naomi_m4_board::board_setup_address(UINT32 address, bool is_dma) |
| r241905 | r241906 | |
| 175 | 176 | void naomi_m4_board::enc_reset() |
| 176 | 177 | { |
| 177 | 178 | buffer_actual_size = 0; |
| 178 | | iv = 0; |
| 179 | cur_iv = iv; |
| 179 | 180 | counter = 0; |
| 180 | 181 | } |
| 181 | 182 | |
| 182 | | UINT16 naomi_m4_board::decrypt_one_round(UINT16 word, UINT16 subkey) |
| 183 | | { |
| 184 | | return one_round[word ^ subkey] ^ subkey ; |
| 185 | | } |
| 186 | | |
| 187 | 183 | void naomi_m4_board::enc_fill() |
| 188 | 184 | { |
| 189 | 185 | const UINT8 *base = m_region->base() + rom_cur_address; |
| 190 | 186 | while(buffer_actual_size < BUFFER_SIZE) { |
| 191 | 187 | UINT16 enc = base[0] | (base[1] << 8); |
| 192 | | UINT16 dec = iv; |
| 193 | | iv = decrypt_one_round(enc ^ iv, subkey1); |
| 194 | | dec ^= decrypt_one_round(iv, subkey2); |
| 195 | | |
| 188 | UINT16 output_whitening = key ^ cur_iv; |
| 189 | cur_iv = one_round[enc ^ cur_iv]; |
| 190 | UINT16 dec = one_round[key ^ cur_iv] ^ output_whitening; |
| 191 | |
| 196 | 192 | buffer[buffer_actual_size++] = dec; |
| 197 | 193 | buffer[buffer_actual_size++] = dec >> 8; |
| 198 | 194 | |
| r241905 | r241906 | |
| 202 | 198 | counter++; |
| 203 | 199 | if(counter == 16) { |
| 204 | 200 | counter = 0; |
| 205 | | iv = 0; |
| 201 | cur_iv = iv; |
| 206 | 202 | } |
| 207 | 203 | } |
| 208 | 204 | } |