summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/naomigd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/naomigd.cpp')
-rw-r--r--src/mame/machine/naomigd.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/mame/machine/naomigd.cpp b/src/mame/machine/naomigd.cpp
index 34b8364eaf9..4de880b3548 100644
--- a/src/mame/machine/naomigd.cpp
+++ b/src/mame/machine/naomigd.cpp
@@ -493,7 +493,7 @@ WRITE32_MEMBER(naomi_gdrom_board::memorymanager_w)
else
src = src + 0x0c000000;
dst = dst - 0x10000000;
- ddtdata.buffer = dimm_data + dst; // TODO: access des encrypted data
+ ddtdata.buffer = dimm_des_data + dst;
ddtdata.source = src;
ddtdata.length = len;
ddtdata.size = 4;
@@ -510,7 +510,7 @@ WRITE32_MEMBER(naomi_gdrom_board::memorymanager_w)
else
dst = dst + 0xc000000;
src = src - 0x10000000;
- ddtdata.buffer = dimm_data + src; // TODO: access des encrypted data
+ ddtdata.buffer = dimm_des_data + src;
ddtdata.destination = dst;
ddtdata.length = len;
ddtdata.size = 4;
@@ -799,6 +799,7 @@ void naomi_gdrom_board::device_start()
naomi_board::device_start();
dimm_data = nullptr;
+ dimm_des_data = nullptr;
dimm_data_size = 0;
char name[128];
@@ -808,6 +809,15 @@ void naomi_gdrom_board::device_start()
uint8_t netpic = 0;
+ logerror("Work mode is %d\n", work_mode);
+ if (work_mode != 0)
+ {
+ dimm_command = 0;
+ dimm_offsetl = 0;
+ dimm_parameterl = 0;
+ dimm_parameterh = 0;
+ }
+
if(picdata) {
if(picdata.length() >= 0x4000) {
printf("Real PIC binary found\n");
@@ -903,22 +913,26 @@ void naomi_gdrom_board::device_start()
uint32_t file_rounded_size = (file_size + 2047) & -2048;
for (dimm_data_size = 4096; dimm_data_size < file_rounded_size; dimm_data_size <<= 1);
dimm_data = auto_alloc_array(machine(), uint8_t, dimm_data_size);
+ if (work_mode == 0)
+ dimm_des_data = dimm_data;
+ else
+ dimm_des_data = auto_alloc_array(machine(), uint8_t, dimm_data_size);
if (dimm_data_size != file_rounded_size)
memset(dimm_data + file_rounded_size, 0, dimm_data_size - file_rounded_size);
- // read encrypted data into dimm_data
+ // read encrypted data into dimm_des_data
uint32_t sectors = file_rounded_size / 2048;
for (uint32_t sec = 0; sec != sectors; sec++)
- cdrom_read_data(gdromfile, file_start + sec, dimm_data + 2048 * sec, CD_TRACK_MODE1);
+ cdrom_read_data(gdromfile, file_start + sec, dimm_des_data + 2048 * sec, CD_TRACK_MODE1);
uint32_t des_subkeys[32];
des_generate_subkeys(rev64(key), des_subkeys);
+ // decrypt read data from dimm_des_data to dimm_data
for (int i = 0; i < file_rounded_size; i += 8)
- write_from_qword(dimm_data + i, rev64(des_encrypt_decrypt(true, rev64(read_to_qword(dimm_data + i)), des_subkeys)));
+ write_from_qword(dimm_data + i, rev64(des_encrypt_decrypt(true, rev64(read_to_qword(dimm_des_data + i)), des_subkeys)));
}
- // decrypt loaded data
cdrom_close(gdromfile);
if(!dimm_data)
@@ -992,8 +1006,11 @@ void naomi_gdrom_board::device_add_mconfig(machine_config &config)
m_i2c1->set_e0(1);
m_i2c1->set_wc(1);
EEPROM_93C46_8BIT(config, m_eeprom, 0);
- m_maincpu->set_disable();
- m_securitycpu->set_disable();
+ if (work_mode == 0)
+ {
+ m_maincpu->set_disable();
+ m_securitycpu->set_disable();
+ }
}
// DIMM firmwares: