diff options
author | MetalliC <0vetal0@gmail.com> | 2016-08-01 21:00:27 +0300 |
---|---|---|
committer | MetalliC <0vetal0@gmail.com> | 2016-08-01 21:00:27 +0300 |
commit | 203e6dc8293414dc1839eec7a48d875f6fc902a3 (patch) | |
tree | 3c3a93deb0f83c3370676ab74af57d0fd39acdbe /src/mame/machine | |
parent | 871656c98caca81aa501c3dbdc8d0a581e2b0178 (diff) |
atomiswave use ROM_PARAMETER for keys, NAOMI BIOS docs update
Diffstat (limited to 'src/mame/machine')
-rw-r--r-- | src/mame/machine/awboard.cpp | 31 | ||||
-rw-r--r-- | src/mame/machine/awboard.h | 9 |
2 files changed, 12 insertions, 28 deletions
diff --git a/src/mame/machine/awboard.cpp b/src/mame/machine/awboard.cpp index b2374e52858..27fef557bbd 100644 --- a/src/mame/machine/awboard.cpp +++ b/src/mame/machine/awboard.cpp @@ -167,17 +167,10 @@ ADDRESS_MAP_END aw_rom_board::aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : naomi_g1_device(mconfig, AW_ROM_BOARD, "Sammy Atomiswave ROM Board", tag, owner, clock, "aw_rom_board", __FILE__), - m_region(*this, DEVICE_SELF), - m_keyregion(*this) + m_region(*this, DEVICE_SELF) { } -void aw_rom_board::static_set_keyregion(device_t &device, const char *keyregion) -{ - aw_rom_board &dev = downcast<aw_rom_board &>(device); - dev.m_keyregion.set_tag(keyregion); -} - /* We are using 20 bits keys with the following subfields' structure: @@ -255,22 +248,18 @@ UINT16 aw_rom_board::decrypt(UINT16 cipherText, UINT32 address, const UINT32 key return ((b3<<13)|(b2<<9)|(b1<<5)|b0)^(key&0xffff); } -void aw_rom_board::set_key() -{ - if (!m_keyregion.found()) - return; - - if (m_keyregion->bytes() != 4) - throw emu_fatalerror("AW-ROM-BOARD: key region %s has incorrect size (%d, expected 4)\n", m_keyregion.finder_tag(), m_keyregion->bytes()); - - const UINT8 *krp = m_keyregion->base(); - rombd_key = (krp[0] << 24) | (krp[1] << 16) | (krp[2] << 8) | krp[3]; -} - void aw_rom_board::device_start() { naomi_g1_device::device_start(); - set_key(); + + std::string skey = parameter("key"); + if (!skey.empty()) + rombd_key = strtoll(skey.c_str(), nullptr, 16); + else + { + logerror("%s: Warning: key not provided\n", tag()); + rombd_key = 0; + } mpr_offset = decrypt16(0x58/2) | (decrypt16(0x5a/2) << 16); diff --git a/src/mame/machine/awboard.h b/src/mame/machine/awboard.h index 5ae885079c1..f7f7b886d9d 100644 --- a/src/mame/machine/awboard.h +++ b/src/mame/machine/awboard.h @@ -5,17 +5,14 @@ #include "naomig1.h" -#define MCFG_AW_ROM_BOARD_ADD(_tag, _keyregion, _irq_cb) \ - MCFG_NAOMI_G1_ADD(_tag, AW_ROM_BOARD, _irq_cb) \ - aw_rom_board::static_set_keyregion(*device, "^" _keyregion); +#define MCFG_AW_ROM_BOARD_ADD(_tag, _irq_cb) \ + MCFG_NAOMI_G1_ADD(_tag, AW_ROM_BOARD, _irq_cb) class aw_rom_board : public naomi_g1_device { public: aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - static void static_set_keyregion(device_t &device, const char *keyregion); - DECLARE_ADDRESS_MAP(submap, 16); DECLARE_WRITE16_MEMBER(epr_offsetl_w); // 5f7000 @@ -38,7 +35,6 @@ private: enum { EPR, MPR_RECORD, MPR_FILE }; required_memory_region m_region; - optional_memory_region m_keyregion; UINT32 rombd_key; UINT32 mpr_offset, mpr_bank; UINT32 epr_offset, mpr_file_offset; @@ -59,7 +55,6 @@ private: static UINT16 decrypt(UINT16 cipherText, UINT32 address, const UINT32 key); UINT16 decrypt16(UINT32 address) { return decrypt(m_region->u16(address), address, rombd_key); } - void set_key(); void recalc_dma_offset(int mode); }; |