summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine
diff options
context:
space:
mode:
author MetalliC <0vetal0@gmail.com>2016-08-01 21:00:27 +0300
committer MetalliC <0vetal0@gmail.com>2016-08-01 21:00:27 +0300
commit203e6dc8293414dc1839eec7a48d875f6fc902a3 (patch)
tree3c3a93deb0f83c3370676ab74af57d0fd39acdbe /src/mame/machine
parent871656c98caca81aa501c3dbdc8d0a581e2b0178 (diff)
atomiswave use ROM_PARAMETER for keys, NAOMI BIOS docs update
Diffstat (limited to 'src/mame/machine')
-rw-r--r--src/mame/machine/awboard.cpp31
-rw-r--r--src/mame/machine/awboard.h9
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);
};