mirror of
https://github.com/holub/mame
synced 2025-06-03 11:26:56 +03:00
misc/cv1k.cpp, misc/nexus3d.cpp: Migrated to use newer machine/nandflash.cpp Flash memory emulation. (#11708)
* machine/nandflash.cpp: Only reset page address on read or program command. * machine/nandflash.cpp: Added Samsung K9F1G08U0M and K9F2G08U0M. * Removed now-unused machine/serflash.cpp.
This commit is contained in:
parent
65ec4542ca
commit
74b32921e1
@ -3311,18 +3311,6 @@ if (MACHINES["SENSORBOARD"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/serflash.h,MACHINES["SERFLASH"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["SERFLASH"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/serflash.cpp",
|
||||
MAME_DIR .. "src/devices/machine/serflash.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/smc91c9x.h,MACHINES["SMC91C9X"] = true
|
||||
|
@ -25,7 +25,9 @@ DEFINE_DEVICE_TYPE(SAMSUNG_K9F5608U0DJ, samsung_k9f5608u0dj_device, "samsung_k9f
|
||||
DEFINE_DEVICE_TYPE(SAMSUNG_K9F5608U0B, samsung_k9f5608u0b_device, "samsung_k9f5608u0b", "Samsung K9F5608U0B")
|
||||
DEFINE_DEVICE_TYPE(SAMSUNG_K9F2808U0B, samsung_k9f2808u0b_device, "samsung_k9f2808u0b", "Samsung K9F2808U0B")
|
||||
DEFINE_DEVICE_TYPE(SAMSUNG_K9F1G08U0B, samsung_k9f1g08u0b_device, "samsung_k9f1g08u0b", "Samsung K9F1G08U0B")
|
||||
DEFINE_DEVICE_TYPE(SAMSUNG_K9F1G08U0M, samsung_k9f1g08u0m_device, "samsung_k9f1g08u0m", "Samsung K9F1G08U0M")
|
||||
DEFINE_DEVICE_TYPE(SAMSUNG_K9LAG08U0M, samsung_k9lag08u0m_device, "samsung_k9lag08u0m", "Samsung K9LAG08U0M")
|
||||
DEFINE_DEVICE_TYPE(SAMSUNG_K9F2G08U0M, samsung_k9f2g08u0m_device, "samsung_k9f2g08u0m", "Samsung K9F2G08U0M")
|
||||
|
||||
nand_device::nand_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nand_device(mconfig, NAND, tag, owner, clock)
|
||||
@ -128,6 +130,23 @@ samsung_k9f1g08u0b_device::samsung_k9f1g08u0b_device(const machine_config &mconf
|
||||
m_sequential_row_read = 0;
|
||||
}
|
||||
|
||||
samsung_k9f1g08u0m_device::samsung_k9f1g08u0m_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nand_device(mconfig, SAMSUNG_K9F1G08U0M, tag, owner, clock)
|
||||
{
|
||||
m_id_len = 4;
|
||||
m_id[0] = 0xec;
|
||||
m_id[1] = 0xf1;
|
||||
m_id[2] = 0x00;
|
||||
m_id[3] = 0x15;
|
||||
m_page_data_size = 2048;
|
||||
m_page_total_size = 2048 + 64;
|
||||
m_log2_pages_per_block = compute_log2(64);
|
||||
m_num_pages = 64 * 1024;
|
||||
m_col_address_cycles = 2;
|
||||
m_row_address_cycles = 2;
|
||||
m_sequential_row_read = 0;
|
||||
}
|
||||
|
||||
samsung_k9lag08u0m_device::samsung_k9lag08u0m_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nand_device(mconfig, SAMSUNG_K9LAG08U0M, tag, owner, clock)
|
||||
{
|
||||
@ -146,6 +165,23 @@ samsung_k9lag08u0m_device::samsung_k9lag08u0m_device(const machine_config &mconf
|
||||
m_sequential_row_read = 0;
|
||||
}
|
||||
|
||||
samsung_k9f2g08u0m_device::samsung_k9f2g08u0m_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: nand_device(mconfig, SAMSUNG_K9F2G08U0M, tag, owner, clock)
|
||||
{
|
||||
m_id_len = 4;
|
||||
m_id[0] = 0xec;
|
||||
m_id[1] = 0xda;
|
||||
m_id[2] = 0x00;
|
||||
m_id[3] = 0x15;
|
||||
m_page_data_size = 2048;
|
||||
m_page_total_size = 2048 + 64;
|
||||
m_log2_pages_per_block = compute_log2(64);
|
||||
m_num_pages = 128 * 1024;
|
||||
m_col_address_cycles = 2;
|
||||
m_row_address_cycles = 3;
|
||||
m_sequential_row_read = 0;
|
||||
}
|
||||
|
||||
void nand_device::device_start()
|
||||
{
|
||||
m_data_uid_ptr = nullptr; // smartmed cruft
|
||||
@ -242,7 +278,6 @@ void nand_device::command_w(uint8_t data)
|
||||
case 0x00: // Read (1st cycle)
|
||||
m_mode = SM_M_READ;
|
||||
m_pointer_mode = SM_PM_A;
|
||||
m_page_addr = 0;
|
||||
m_addr_load_ptr = 0;
|
||||
break;
|
||||
case 0x01:
|
||||
@ -255,7 +290,6 @@ void nand_device::command_w(uint8_t data)
|
||||
{
|
||||
m_mode = SM_M_READ;
|
||||
m_pointer_mode = SM_PM_B;
|
||||
m_page_addr = 0;
|
||||
m_addr_load_ptr = 0;
|
||||
}
|
||||
break;
|
||||
@ -269,13 +303,11 @@ void nand_device::command_w(uint8_t data)
|
||||
{
|
||||
m_mode = SM_M_READ;
|
||||
m_pointer_mode = SM_PM_C;
|
||||
m_page_addr = 0;
|
||||
m_addr_load_ptr = 0;
|
||||
}
|
||||
break;
|
||||
case 0x80: // Page Program (1st cycle)
|
||||
m_mode = SM_M_PROGRAM;
|
||||
m_page_addr = 0;
|
||||
m_addr_load_ptr = 0;
|
||||
m_program_byte_count = 0;
|
||||
memset(m_pagereg.get(), 0xff, m_page_total_size);
|
||||
@ -432,6 +464,10 @@ void nand_device::address_w(uint8_t data)
|
||||
break;
|
||||
case SM_M_READ:
|
||||
case SM_M_PROGRAM:
|
||||
if (m_addr_load_ptr == 0)
|
||||
{
|
||||
m_page_addr = 0;
|
||||
}
|
||||
if ((m_addr_load_ptr == 0) && (m_col_address_cycles == 1))
|
||||
{
|
||||
switch (m_pointer_mode)
|
||||
|
@ -130,12 +130,24 @@ public:
|
||||
samsung_k9f1g08u0b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
|
||||
};
|
||||
|
||||
class samsung_k9f1g08u0m_device : public nand_device
|
||||
{
|
||||
public:
|
||||
samsung_k9f1g08u0m_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
|
||||
};
|
||||
|
||||
class samsung_k9lag08u0m_device : public nand_device
|
||||
{
|
||||
public:
|
||||
samsung_k9lag08u0m_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
|
||||
};
|
||||
|
||||
class samsung_k9f2g08u0m_device : public nand_device
|
||||
{
|
||||
public:
|
||||
samsung_k9f2g08u0m_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(NAND, nand_device)
|
||||
DECLARE_DEVICE_TYPE(SAMSUNG_K9F5608U0D, samsung_k9f5608u0d_device)
|
||||
@ -143,6 +155,8 @@ DECLARE_DEVICE_TYPE(SAMSUNG_K9F5608U0DJ, samsung_k9f5608u0dj_device)
|
||||
DECLARE_DEVICE_TYPE(SAMSUNG_K9F5608U0B, samsung_k9f5608u0b_device)
|
||||
DECLARE_DEVICE_TYPE(SAMSUNG_K9F2808U0B, samsung_k9f2808u0b_device)
|
||||
DECLARE_DEVICE_TYPE(SAMSUNG_K9F1G08U0B, samsung_k9f1g08u0b_device)
|
||||
DECLARE_DEVICE_TYPE(SAMSUNG_K9F1G08U0M, samsung_k9f1g08u0m_device)
|
||||
DECLARE_DEVICE_TYPE(SAMSUNG_K9LAG08U0M, samsung_k9lag08u0m_device)
|
||||
DECLARE_DEVICE_TYPE(SAMSUNG_K9F2G08U0M, samsung_k9f2g08u0m_device)
|
||||
|
||||
#endif // MAME_MACHINE_NANDFLASH_H
|
||||
|
@ -1,482 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood, Luca Elia
|
||||
/* Serial Flash Device */
|
||||
|
||||
/* todo: cleanup, refactor etc. */
|
||||
/* ghosteo.c is similar? */
|
||||
|
||||
#include "emu.h"
|
||||
#include "machine/serflash.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
ALLOW_SAVE_TYPE(serflash_device::flash_state_t);
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
DEFINE_DEVICE_TYPE(SERFLASH, serflash_device, "serflash", "Serial Flash")
|
||||
|
||||
//-------------------------------------------------
|
||||
// serflash_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
serflash_device::serflash_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, SERFLASH, tag, owner, clock)
|
||||
, device_nvram_interface(mconfig, *this)
|
||||
, m_length(0)
|
||||
, m_region(nullptr)
|
||||
, m_row_num(0)
|
||||
, m_flash_page_size(2048+64)
|
||||
, m_flash_state()
|
||||
, m_flash_enab(0)
|
||||
, m_flash_cmd_seq(0), m_flash_cmd_prev(0), m_flash_addr_seq(0), m_flash_read_seq(0)
|
||||
, m_flash_row(0), m_flash_col(0), m_flash_page_addr(0), m_flash_page_index(0), m_last_flash_cmd(0), m_flash_addr(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void serflash_device::device_start()
|
||||
{
|
||||
m_length = machine().root_device().memregion(tag())->bytes();
|
||||
m_region = machine().root_device().memregion(tag())->base();
|
||||
|
||||
m_row_num = m_length / m_flash_page_size;
|
||||
|
||||
m_flashwritemap.resize(m_row_num);
|
||||
std::fill(m_flashwritemap.begin(), m_flashwritemap.end(), 0);
|
||||
|
||||
m_flash_page_data.resize(m_flash_page_size);
|
||||
|
||||
save_item(NAME(m_flash_state));
|
||||
save_item(NAME(m_flash_enab));
|
||||
save_item(NAME(m_flash_cmd_seq));
|
||||
save_item(NAME(m_flash_cmd_prev));
|
||||
save_item(NAME(m_flash_addr_seq));
|
||||
save_item(NAME(m_flash_read_seq));
|
||||
save_item(NAME(m_flash_row));
|
||||
save_item(NAME(m_flash_col));
|
||||
save_item(NAME(m_flash_page_addr));
|
||||
save_item(NAME(m_flash_page_index));
|
||||
save_item(NAME(m_flashwritemap));
|
||||
save_item(NAME(m_last_flash_cmd));
|
||||
save_item(NAME(m_flash_addr));
|
||||
save_item(NAME(m_flash_page_data));
|
||||
}
|
||||
|
||||
void serflash_device::device_reset()
|
||||
{
|
||||
m_flash_enab = 0;
|
||||
flash_hard_reset();
|
||||
|
||||
m_last_flash_cmd = 0x00;
|
||||
m_flash_addr_seq = 0;
|
||||
m_flash_addr = 0;
|
||||
|
||||
m_flash_page_addr = 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// serflash_default - called to initialize SERFLASH to
|
||||
// its default state
|
||||
//-------------------------------------------------
|
||||
|
||||
void serflash_device::nvram_default()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// nvram_read - called to read SERFLASH from the
|
||||
// .nv file
|
||||
//-------------------------------------------------
|
||||
|
||||
bool serflash_device::nvram_read(util::read_stream &file)
|
||||
{
|
||||
if (m_length % m_flash_page_size) return false; // region size must be multiple of flash page size
|
||||
int size = m_length / m_flash_page_size;
|
||||
|
||||
{
|
||||
uint32_t page;
|
||||
size_t actual;
|
||||
if (file.read(&page, 4, actual) || actual != 4)
|
||||
return false;
|
||||
while (page < size)
|
||||
{
|
||||
m_flashwritemap[page] = 1;
|
||||
if (file.read(m_region + page * m_flash_page_size, m_flash_page_size, actual) || actual != m_flash_page_size)
|
||||
return false;
|
||||
if (file.read(&page, 4, actual) || actual != 4)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// nvram_write - called to write SERFLASH to the
|
||||
// .nv file
|
||||
//-------------------------------------------------
|
||||
|
||||
bool serflash_device::nvram_write(util::write_stream &file)
|
||||
{
|
||||
if (m_length % m_flash_page_size) return false; // region size must be multiple of flash page size
|
||||
int size = m_length / m_flash_page_size;
|
||||
|
||||
uint32_t page = 0;
|
||||
size_t actual;
|
||||
while (page < size)
|
||||
{
|
||||
if (m_flashwritemap[page])
|
||||
{
|
||||
if (file.write(&page, 4, actual) || actual != 4)
|
||||
return false;
|
||||
if (file.write(m_region + page * m_flash_page_size, m_flash_page_size, actual) || actual != m_flash_page_size)
|
||||
return false;
|
||||
}
|
||||
page++;
|
||||
}
|
||||
if (file.write(&page, 4, actual) || actual != 4)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void serflash_device::flash_hard_reset()
|
||||
{
|
||||
// logerror("%08x FLASH: RESET\n", cpuexec_describe_context(machine));
|
||||
|
||||
m_flash_state = flash_state_t::READ;
|
||||
|
||||
m_flash_cmd_prev = -1;
|
||||
m_flash_cmd_seq = 0;
|
||||
|
||||
m_flash_addr_seq = 0;
|
||||
m_flash_read_seq = 0;
|
||||
|
||||
m_flash_row = 0;
|
||||
m_flash_col = 0;
|
||||
|
||||
std::fill(m_flash_page_data.begin(), m_flash_page_data.end(), 0);
|
||||
m_flash_page_addr = 0;
|
||||
m_flash_page_index = 0;
|
||||
}
|
||||
|
||||
void serflash_device::flash_enab_w(uint8_t data)
|
||||
{
|
||||
//logerror("%08x FLASH: enab = %02X\n", m_maincpu->pc(), data);
|
||||
m_flash_enab = data;
|
||||
}
|
||||
|
||||
void serflash_device::flash_change_state(flash_state_t state)
|
||||
{
|
||||
m_flash_state = state;
|
||||
|
||||
m_flash_cmd_prev = -1;
|
||||
m_flash_cmd_seq = 0;
|
||||
|
||||
m_flash_read_seq = 0;
|
||||
m_flash_addr_seq = 0;
|
||||
|
||||
//logerror("flash_change_state - FLASH: state = %s\n", m_flash_state_name[state]);
|
||||
}
|
||||
|
||||
void serflash_device::flash_cmd_w(uint8_t data)
|
||||
{
|
||||
if (!m_flash_enab)
|
||||
return;
|
||||
|
||||
//logerror("%08x FLASH: cmd = %02X (prev = %02X)\n", m_maincpu->pc(), data, m_flash_cmd_prev);
|
||||
|
||||
if (m_flash_cmd_prev == -1)
|
||||
{
|
||||
m_flash_cmd_prev = data;
|
||||
|
||||
switch (data)
|
||||
{
|
||||
case 0x00: // READ
|
||||
m_flash_addr_seq = 0;
|
||||
break;
|
||||
|
||||
case 0x60: // BLOCK ERASE
|
||||
m_flash_addr_seq = 2; // row address only
|
||||
break;
|
||||
|
||||
case 0x70: // READ STATUS
|
||||
flash_change_state( flash_state_t::READ_STATUS );
|
||||
break;
|
||||
|
||||
case 0x80: // PAGE / CACHE PROGRAM
|
||||
m_flash_addr_seq = 0;
|
||||
// this actually seems to be set with the next 2 writes?
|
||||
m_flash_page_addr = 0;
|
||||
break;
|
||||
|
||||
case 0x90: // READ ID
|
||||
flash_change_state( flash_state_t::READ_ID );
|
||||
break;
|
||||
|
||||
case 0xff: // RESET
|
||||
flash_change_state( flash_state_t::IDLE );
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
//logerror("%s FLASH: unknown cmd1 = %02X\n", machine().describe_context(), data);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (m_flash_cmd_prev)
|
||||
{
|
||||
case 0x00: // READ
|
||||
if (data == 0x30)
|
||||
{
|
||||
if (m_flash_row < m_row_num)
|
||||
{
|
||||
std::copy_n(&m_region[m_flash_row * m_flash_page_size], m_flash_page_size, m_flash_page_data.begin());
|
||||
m_flash_page_addr = m_flash_col;
|
||||
m_flash_page_index = m_flash_row;
|
||||
}
|
||||
flash_change_state( flash_state_t::READ );
|
||||
|
||||
//logerror("%08x FLASH: caching page = %04X\n", m_maincpu->pc(), m_flash_row);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x60: // BLOCK ERASE
|
||||
if (data==0xd0)
|
||||
{
|
||||
flash_change_state( flash_state_t::BLOCK_ERASE );
|
||||
if (m_flash_row < m_row_num)
|
||||
{
|
||||
m_flashwritemap[m_flash_row] |= 1;
|
||||
std::fill_n(&m_region[m_flash_row * m_flash_page_size], m_flash_page_size, 0xff);
|
||||
}
|
||||
//logerror("erased block %04x (%08x - %08x)\n", m_flash_col, m_flash_col * m_flash_page_size, ((m_flash_col+1) * m_flash_page_size)-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
//logerror("unexpected 2nd command after BLOCK ERASE\n");
|
||||
}
|
||||
break;
|
||||
case 0x80:
|
||||
if (data==0x10)
|
||||
{
|
||||
flash_change_state( flash_state_t::PAGE_PROGRAM );
|
||||
if (m_flash_row < m_row_num)
|
||||
{
|
||||
m_flashwritemap[m_flash_row] |= (memcmp(m_region + m_flash_row * m_flash_page_size, &m_flash_page_data[0], m_flash_page_size) != 0);
|
||||
std::copy_n(m_flash_page_data.begin(), m_flash_page_size, &m_region[m_flash_row * m_flash_page_size]);
|
||||
}
|
||||
//logerror("re-written block %04x (%08x - %08x)\n", m_flash_row, m_flash_row * m_flash_page_size, ((m_flash_row+1) * m_flash_page_size)-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
//logerror("unexpected 2nd command after SPAGE PROGRAM\n");
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
{
|
||||
//logerror("%08x FLASH: unknown cmd2 = %02X (cmd1 = %02X)\n", m_maincpu->pc(), data, m_flash_cmd_prev);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void serflash_device::flash_data_w(uint8_t data)
|
||||
{
|
||||
if (!m_flash_enab)
|
||||
return;
|
||||
|
||||
//logerror("flash data write %04x\n", m_flash_page_addr);
|
||||
if (m_flash_page_addr < m_flash_page_size)
|
||||
{
|
||||
m_flash_page_data[m_flash_page_addr] = data;
|
||||
}
|
||||
m_flash_page_addr++;
|
||||
}
|
||||
|
||||
void serflash_device::flash_addr_w(uint8_t data)
|
||||
{
|
||||
if (!m_flash_enab)
|
||||
return;
|
||||
|
||||
//logerror("%08x FLASH: addr = %02X (seq = %02X)\n", m_maincpu->pc(), data, m_flash_addr_seq);
|
||||
|
||||
switch( m_flash_addr_seq++ )
|
||||
{
|
||||
case 0:
|
||||
m_flash_col = (m_flash_col & 0xff00) | data;
|
||||
break;
|
||||
case 1:
|
||||
m_flash_col = (m_flash_col & 0x00ff) | (data << 8);
|
||||
break;
|
||||
case 2:
|
||||
m_flash_row = (m_flash_row & 0xffff00) | data;
|
||||
if (m_row_num <= 256)
|
||||
{
|
||||
m_flash_addr_seq = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
m_flash_row = (m_flash_row & 0xff00ff) | (data << 8);
|
||||
if (m_row_num <= 65536)
|
||||
{
|
||||
m_flash_addr_seq = 0;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
m_flash_row = (m_flash_row & 0x00ffff) | (data << 16);
|
||||
m_flash_addr_seq = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t serflash_device::flash_io_r()
|
||||
{
|
||||
uint8_t data = 0x00;
|
||||
// uint32_t old;
|
||||
|
||||
if (!m_flash_enab)
|
||||
return 0xff;
|
||||
|
||||
switch (m_flash_state)
|
||||
{
|
||||
case flash_state_t::READ_ID:
|
||||
//old = m_flash_read_seq;
|
||||
|
||||
switch( m_flash_read_seq++ )
|
||||
{
|
||||
case 0:
|
||||
data = 0xEC; // Manufacturer
|
||||
break;
|
||||
case 1:
|
||||
data = 0xF1; // Device
|
||||
break;
|
||||
case 2:
|
||||
data = 0x00; // XX
|
||||
break;
|
||||
case 3:
|
||||
data = 0x15; // Flags
|
||||
m_flash_read_seq = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
//logerror("%08x FLASH: read %02X from id(%02X)\n", m_maincpu->pc(), data, old);
|
||||
break;
|
||||
|
||||
case flash_state_t::READ:
|
||||
if (m_flash_page_addr > m_flash_page_size-1)
|
||||
m_flash_page_addr = m_flash_page_size-1;
|
||||
|
||||
//old = m_flash_page_addr;
|
||||
|
||||
data = m_flash_page_data[m_flash_page_addr++];
|
||||
|
||||
//logerror("%08x FLASH: read data %02X from addr %03X (page %04X)\n", m_maincpu->pc(), data, old, m_flash_page_index);
|
||||
break;
|
||||
|
||||
case flash_state_t::READ_STATUS:
|
||||
// bit 7 = writeable, bit 6 = ready, bit 5 = ready/true ready, bit 1 = fail(N-1), bit 0 = fail
|
||||
data = 0xe0;
|
||||
//logerror("%08x FLASH: read status %02X\n", m_maincpu->pc(), data);
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
// logerror("%08x FLASH: unknown read in state %s\n",0x00/*m_maincpu->pc()*/, m_flash_state_name[m_flash_state]);
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
uint8_t serflash_device::flash_ready_r()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint8_t serflash_device::n3d_flash_r(offs_t offset)
|
||||
{
|
||||
if (m_last_flash_cmd==0x70) return 0xe0;
|
||||
|
||||
if (m_last_flash_cmd==0x00)
|
||||
{
|
||||
uint8_t retdat = m_flash_page_data[m_flash_page_addr];
|
||||
|
||||
//logerror("n3d_flash_r %02x %04x\n", offset, m_flash_page_addr);
|
||||
|
||||
m_flash_page_addr++;
|
||||
return retdat;
|
||||
}
|
||||
|
||||
|
||||
logerror("n3d_flash_r %02x\n", offset);
|
||||
return 0x00;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void serflash_device::n3d_flash_cmd_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
logerror("n3d_flash_cmd_w %02x %02x\n", offset, data);
|
||||
m_last_flash_cmd = data;
|
||||
|
||||
if (data==0x00)
|
||||
{
|
||||
if (m_flash_addr < m_row_num)
|
||||
{
|
||||
std::copy_n(&m_region[m_flash_addr * m_flash_page_size], m_flash_page_size, m_flash_page_data.begin());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void serflash_device::n3d_flash_addr_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
// logerror("n3d_flash_addr_w %02x %02x\n", offset, data);
|
||||
|
||||
m_flash_addr_seq++;
|
||||
|
||||
if (m_flash_addr_seq==3)
|
||||
{
|
||||
m_flash_addr = (m_flash_addr & 0xffff00) | data;
|
||||
if (m_row_num <= 256)
|
||||
{
|
||||
m_flash_addr_seq = 0;
|
||||
m_flash_page_addr = 0;
|
||||
logerror("set flash block to %08x\n", m_flash_addr);
|
||||
}
|
||||
}
|
||||
if (m_flash_addr_seq==4)
|
||||
{
|
||||
m_flash_addr = (m_flash_addr & 0xff00ff) | data << 8;
|
||||
if (m_row_num <= 65536)
|
||||
{
|
||||
m_flash_addr_seq = 0;
|
||||
m_flash_page_addr = 0;
|
||||
logerror("set flash block to %08x\n", m_flash_addr);
|
||||
}
|
||||
}
|
||||
if (m_flash_addr_seq==5)
|
||||
{
|
||||
m_flash_addr = (m_flash_addr & 0x00ffff) | data << 16;
|
||||
m_flash_addr_seq = 0;
|
||||
m_flash_page_addr = 0;
|
||||
logerror("set flash block to %08x\n", m_flash_addr);
|
||||
}
|
||||
}
|
@ -1,91 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood, Luca Elia
|
||||
/* Serial Flash */
|
||||
|
||||
#ifndef MAME_MACHINE_SERFLASH_H
|
||||
#define MAME_MACHINE_SERFLASH_H
|
||||
|
||||
#pragma once
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
|
||||
// ======================> serflash_device
|
||||
|
||||
class serflash_device : public device_t, public device_nvram_interface
|
||||
{
|
||||
public:
|
||||
// custom initialization for default state
|
||||
typedef device_delegate<void (serflash_device &, void *, size_t)> init_delegate;
|
||||
|
||||
// construction/destruction
|
||||
serflash_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// configuration
|
||||
void set_flash_page_size(uint16_t size) { m_flash_page_size = size; }
|
||||
|
||||
uint8_t flash_ready_r();
|
||||
uint8_t flash_io_r();
|
||||
void flash_addr_w(uint8_t data);
|
||||
void flash_data_w(uint8_t data);
|
||||
void flash_cmd_w(uint8_t data);
|
||||
void flash_enab_w(uint8_t data);
|
||||
void flash_hard_reset();
|
||||
|
||||
uint8_t n3d_flash_r(offs_t offset);
|
||||
void n3d_flash_cmd_w(offs_t offset, uint8_t data);
|
||||
void n3d_flash_addr_w(offs_t offset, uint8_t data);
|
||||
|
||||
protected:
|
||||
enum class flash_state_t : u8 { IDLE = 0, READ, READ_ID, READ_STATUS, BLOCK_ERASE, PAGE_PROGRAM };
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// device_nvram_interface overrides
|
||||
virtual void nvram_default() override;
|
||||
virtual bool nvram_read(util::read_stream &file) override;
|
||||
virtual bool nvram_write(util::write_stream &file) override;
|
||||
|
||||
void flash_change_state(flash_state_t state);
|
||||
|
||||
// runtime state
|
||||
size_t m_length;
|
||||
uint8_t* m_region;
|
||||
|
||||
uint32_t m_row_num;
|
||||
uint16_t m_flash_page_size;
|
||||
|
||||
flash_state_t m_flash_state;
|
||||
|
||||
uint8_t m_flash_enab;
|
||||
|
||||
uint8_t m_flash_cmd_seq;
|
||||
uint32_t m_flash_cmd_prev;
|
||||
|
||||
uint8_t m_flash_addr_seq;
|
||||
uint8_t m_flash_read_seq;
|
||||
|
||||
uint32_t m_flash_row;
|
||||
uint16_t m_flash_col;
|
||||
int m_flash_page_addr;
|
||||
uint32_t m_flash_page_index;
|
||||
|
||||
|
||||
std::vector<uint8_t> m_flashwritemap;
|
||||
|
||||
uint8_t m_last_flash_cmd;
|
||||
|
||||
uint32_t m_flash_addr;
|
||||
|
||||
std::vector<uint8_t> m_flash_page_data;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(SERFLASH, serflash_device)
|
||||
|
||||
#endif // MAME_MACHINE_SERFLASH_H
|
@ -192,8 +192,8 @@ Timing
|
||||
|
||||
#include "cpu/sh/sh3comn.h"
|
||||
#include "cpu/sh/sh4.h"
|
||||
#include "machine/nandflash.h"
|
||||
#include "machine/rtc9701.h"
|
||||
#include "machine/serflash.h"
|
||||
#include "sound/ymz770.h"
|
||||
#include "video/epic12.h"
|
||||
|
||||
@ -210,7 +210,7 @@ public:
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_blitter(*this, "blitter"),
|
||||
m_serflash(*this, "game"),
|
||||
m_nand(*this, "nand"),
|
||||
m_eeprom(*this, "eeprom"),
|
||||
m_ram(*this, "mainram"),
|
||||
m_rombase(*this, "maincpu"),
|
||||
@ -236,7 +236,7 @@ protected:
|
||||
private:
|
||||
required_device<sh34_base_device> m_maincpu;
|
||||
required_device<epic12_device> m_blitter;
|
||||
required_device<serflash_device> m_serflash;
|
||||
required_device<samsung_k9f1g08u0m_device> m_nand;
|
||||
required_device<rtc9701_device> m_eeprom;
|
||||
|
||||
required_shared_ptr<uint64_t> m_ram;
|
||||
@ -277,7 +277,7 @@ uint32_t cv1k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
|
||||
uint64_t cv1k_state::flash_port_e_r()
|
||||
{
|
||||
return ((m_serflash->flash_ready_r() ? 0x20 : 0x00)) | 0xdf;
|
||||
return ((!m_nand->is_busy() ? 0x20 : 0x00)) | 0xdf;
|
||||
}
|
||||
|
||||
|
||||
@ -297,7 +297,7 @@ uint8_t cv1k_state::flash_io_r(offs_t offset)
|
||||
return 0xff;
|
||||
|
||||
case 0x00:
|
||||
return m_serflash->flash_io_r();
|
||||
return m_nand->data_r();
|
||||
}
|
||||
}
|
||||
|
||||
@ -311,15 +311,15 @@ void cv1k_state::flash_io_w(offs_t offset, uint8_t data)
|
||||
break;
|
||||
|
||||
case 0x00:
|
||||
m_serflash->flash_data_w( data);
|
||||
m_nand->data_w(data);
|
||||
break;
|
||||
|
||||
case 0x01:
|
||||
m_serflash->flash_cmd_w(data);
|
||||
m_nand->command_w(data);
|
||||
break;
|
||||
|
||||
case 0x2:
|
||||
m_serflash->flash_addr_w(data);
|
||||
m_nand->address_w(data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -347,7 +347,8 @@ void cv1k_state::serial_rtc_eeprom_w(offs_t offset, uint8_t data)
|
||||
m_eepromout->write(data, 0xff);
|
||||
break;
|
||||
case 0x03:
|
||||
m_serflash->flash_enab_w(data);
|
||||
// Set CE pin of NAND to !(data & 0x01). Unlikely to matter for emulation, since it's just hardware
|
||||
// handling of who accesses the shared data bus.
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -481,7 +482,7 @@ void cv1k_state::cv1k(machine_config &config)
|
||||
m_maincpu->set_vblank_int("screen", FUNC(cv1k_state::irq2_line_hold)); // irq2 actually asserted at V-sync pulse, not at V-blank
|
||||
|
||||
RTC9701(config, m_eeprom);
|
||||
SERFLASH(config, m_serflash, 0);
|
||||
SAMSUNG_K9F1G08U0M(config, m_nand, 0);
|
||||
|
||||
/* video hardware */
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
@ -543,7 +544,7 @@ ROM_START( mushisam )
|
||||
ROM_LOAD16_WORD_SWAP("mushisam_u4", 0x000000, 0x200000, CRC(15321b30) SHA1(d2cd714ff2299eeab6f9a7c219dfb559c8f98b45) ) // (2004/10/12.MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD("mushisam_u2", 0x000000, 0x8400000, CRC(4f0a842a) SHA1(33f3550ec676a7088b6348cd72c16cc6594afb84) ) // (2004/10/12.MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -556,7 +557,7 @@ ROM_START( mushisama )
|
||||
ROM_LOAD16_WORD_SWAP("mushisama_u4", 0x000000, 0x200000, CRC(0b5b30b2) SHA1(35fd1bb1561c30b311b4325bc8f4628f2fccd20b) ) // (2004/10/12 MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD("mushisam_u2", 0x000000, 0x8400000, CRC(4f0a842a) SHA1(33f3550ec676a7088b6348cd72c16cc6594afb84) ) // (2004/10/12.MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -569,7 +570,7 @@ ROM_START( mushisamb )
|
||||
ROM_LOAD16_WORD_SWAP("mushisamb_u4", 0x000000, 0x200000, CRC(9f1c7f51) SHA1(f82ae72ec03687904ca7516887080be92365a5f3) ) // (2004/10/12 MASTER VER)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD("mushisam_u2", 0x000000, 0x8400000, CRC(4f0a842a) SHA1(33f3550ec676a7088b6348cd72c16cc6594afb84) ) // (2004/10/12.MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -582,7 +583,7 @@ ROM_START( espgal2 )
|
||||
ROM_LOAD16_WORD_SWAP( "espgal2_u4", 0x000000, 0x200000, CRC(2cb37c03) SHA1(da438efc497f72aa345d2cdb0143d269e51576d3) ) // (2005/11/14.MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(222f58c7) SHA1(d47a5085a1debd9cb8c61d88cd39e4f5036d1797) ) // (2005/11/14 MASTER VER)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -595,7 +596,7 @@ ROM_START( espgal2a ) // newer CV1000-B PCB revision, updated FPGA firmware, no
|
||||
ROM_LOAD16_WORD_SWAP( "espgal2a_u4", 0x000000, 0x200000, CRC(843608b8) SHA1(2f5fcd38e76df531a923cd9956104cef5185aaa9) ) // (2005/11/14 MASTER VER)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(222f58c7) SHA1(d47a5085a1debd9cb8c61d88cd39e4f5036d1797) ) // (2005/11/14 MASTER VER)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -608,7 +609,7 @@ ROM_START( espgal2b )
|
||||
ROM_LOAD16_WORD_SWAP( "espgal2b_u4", 0x000000, 0x200000, CRC(09c908bb) SHA1(7d6031fd3542b3e1d296ff218feb40502fd78694) ) // (2005/11/14 MASTER VER)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(222f58c7) SHA1(d47a5085a1debd9cb8c61d88cd39e4f5036d1797) ) // (2005/11/14 MASTER VER)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -621,7 +622,7 @@ ROM_START( mushitam )
|
||||
ROM_LOAD16_WORD_SWAP("mushitam_u4", 0x000000, 0x200000, CRC(c49eb6b1) SHA1(c40ee5de89e3f1cb49ac19687657dd2b42a88d81) ) // (2005/09/09.MASTER VER)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD("mushitam_u2", 0x000000, 0x8400000, CRC(8ba498ab) SHA1(459c0b4ab831bbe019bdd5b0ac56955948b9e3a6) ) // (2005/09/09.MASTER VER)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -634,7 +635,7 @@ ROM_START( mushitama )
|
||||
ROM_LOAD16_WORD_SWAP("mushitama_u4", 0x000000, 0x200000, CRC(4a23e6c8) SHA1(d44c287bb88e6d413a8d35d75bc1b4928ad52cdf) ) // (2005/09/09 MASTER VER)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
// ROM_LOAD("mushitama_u2", 0x000000, 0x8400000, CRC(3f93ff82) SHA1(6f6c250aa7134016ffb288d056bc937ea311f538) ) // recycled ROM - only unused areas differ
|
||||
ROM_LOAD("mushitam_u2", 0x000000, 0x8400000, CRC(8ba498ab) SHA1(459c0b4ab831bbe019bdd5b0ac56955948b9e3a6) ) // (2005/09/09.MASTER VER)
|
||||
|
||||
@ -648,7 +649,7 @@ ROM_START( futari15 )
|
||||
ROM_LOAD16_WORD_SWAP("futari15_u4", 0x000000, 0x200000, CRC(e8c5f128) SHA1(45fb8066fdbecb83fdc2e14555c460d0c652cd5f) ) // (2006/12/8.MAST VER. 1.54.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD("futari15_u2", 0x000000, 0x8400000, CRC(b9eae1fc) SHA1(410f8e7cfcbfd271b41fb4f8d049a13a3191a1f9) ) // (2006/12/8.MAST VER. 1.54.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -661,7 +662,7 @@ ROM_START( futari15a )
|
||||
ROM_LOAD16_WORD_SWAP("futari15a_u4", 0x000000, 0x200000, CRC(a609cf89) SHA1(56752fae9f42fa852af8ee2eae79e25ec7f17953) ) // (2006/12/8 MAST VER 1.54)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
// ROM_LOAD("futari15a_u2", 0x000000, 0x8400000, CRC(b9d815f9) SHA1(6b6f668b0bbb087ffac65e4f0d8bd9d5b28eeb28) ) // recycled ROM - only unused areas differ
|
||||
ROM_LOAD("futari15_u2", 0x000000, 0x8400000, CRC(b9eae1fc) SHA1(410f8e7cfcbfd271b41fb4f8d049a13a3191a1f9) ) // (2006/12/8.MAST VER. 1.54.)
|
||||
|
||||
@ -675,7 +676,7 @@ ROM_START( futari10 )
|
||||
ROM_LOAD16_WORD_SWAP( "futari10_u4", 0x000000, 0x200000, CRC(b127dca7) SHA1(e1f518bc72fc1cdf69aefa89eafa4edaf4e84778) ) // (2006/10/23 MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "futari10_u2", 0x000000, 0x8400000, CRC(78ffcd0c) SHA1(0e2937edec15ce3f5741b72ebd3bbaaefffb556e) ) // (2006/10/23 MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -688,7 +689,7 @@ ROM_START( futaribl ) // Title screen shows (c) 2007 despite the 2009 "master" d
|
||||
ROM_LOAD16_WORD_SWAP( "futaribli_u4", 0x000000, 0x200000, CRC(1971dd16) SHA1(e75993f2978cbaaf925b4b8bb33d094a5a7cebf0) ) // (2009/11/27 INTERNATIONAL BL)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "futariblk_u2", 0x000000, 0x8400000, CRC(08c6fd62) SHA1(e1fc386b2b0e41906c724287cbf82304297e0150) )
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -701,7 +702,7 @@ ROM_START( futariblj )
|
||||
ROM_LOAD16_WORD_SWAP( "futariblk_u4", 0x000000, 0x200000, CRC(b9467b6d) SHA1(64782807fe69acb4ae028e36c5c689d8bd9b7857) ) // (2007/12/11 BLACK LABEL VER)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "futariblk_u2", 0x000000, 0x8400000, CRC(08c6fd62) SHA1(e1fc386b2b0e41906c724287cbf82304297e0150) ) // (2007/12/11 BLACK LABEL VER)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -715,7 +716,7 @@ ROM_START( ibara )
|
||||
ROM_LOAD16_WORD_SWAP( "ibara_u4", 0x000000, 0x200000, CRC(d5fb6657) SHA1(4b2c9057cc765054232f520ee1c93495bc6b301e) ) // '06. 3. 7 ver. shown at service menu in special mode, still same as ibarao (2005/03/22 MASTER VER..) text at normal boot
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(55840976) SHA1(4982bdce84f9603adfed7a618f18bc80359ab81e) ) // (2005/03/22 MASTER VER..)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -729,7 +730,7 @@ ROM_START( ibarao )
|
||||
ROM_LOAD16_WORD_SWAP( "ibarao_u4", 0x000000, 0x200000, CRC(8e6c155d) SHA1(38ac2107dc7824836e2b4e04c7180d5ae43c9b79) ) // (2005/03/22 MASTER VER..)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(55840976) SHA1(4982bdce84f9603adfed7a618f18bc80359ab81e) ) // (2005/03/22 MASTER VER..)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -742,7 +743,7 @@ ROM_START( ibarablk ) // Title screen shows (c) 2005 despite the 2006 "master" d
|
||||
ROM_LOAD16_WORD_SWAP( "ibarablk_u4", 0x000000, 0x200000, CRC(ee1f1f77) SHA1(ac276f3955aa4dde2544af4912819a7ae6bcf8dd) ) // (2006/02/06. MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "ibarablk_u2", 0x000000, 0x8400000, CRC(5e46be44) SHA1(bed5f1bf452f2cac58747ecabec3c4392566a3a7) ) // (2006/02/06. MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -755,7 +756,7 @@ ROM_START( ibarablka ) // Title screen shows (c) 2005 despite the 2006 "master"
|
||||
ROM_LOAD16_WORD_SWAP( "ibarablka_u4", 0x000000, 0x200000, CRC(a9d43839) SHA1(507696e616608c05893c7ac2814b3365e9cb0720) ) // (2006/02/06 MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "ibarablka_u2", 0x000000, 0x8400000, CRC(33400d96) SHA1(09c22b5431ac3726bf88c56efd970f56793f825a) ) // (2006/02/06 MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -768,7 +769,7 @@ ROM_START( deathsml )
|
||||
ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x200000, CRC(1a7b98bf) SHA1(07798a4a846e5802756396b34df47d106895c1f1) ) // (2007/10/09 MASTER VER)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(59ef5d78) SHA1(426e506b6d88948aa55aec71c0db6e91da3d490d) ) // (2007/10/09 MASTER VER)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -781,7 +782,7 @@ ROM_START( mmpork )
|
||||
ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x200000, CRC(d06cfa42) SHA1(5707feb4b3e5265daf5926f38c38612b24106f1f) ) // (2007/ 4/17 MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(1ee961b8) SHA1(81a2eba704ac1cf7fc44fa7c6a3f50e3570c104f) ) // (2007/ 4/17 MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -794,7 +795,7 @@ ROM_START( mmmbanc )
|
||||
ROM_LOAD16_WORD_SWAP( "u4", 0x0000, 0x200000, CRC(5589d8c6) SHA1(43fbdb0effe2bc0e7135698757b6ee50200aecde) ) // (2007/06/05 MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(2e38965a) SHA1(2b58d1cd1a3dbc261d4a46805d2ea015fe22c444) ) // (2007/06/05 MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -807,7 +808,7 @@ ROM_START( pinkswts )
|
||||
ROM_LOAD16_WORD_SWAP( "pinkswts_u4", 0x0000, 0x200000, CRC(5d812c9e) SHA1(db821ec3892fd150513749d64a8b60bf147f3275) ) // (2006/04/06 MASTER VER....)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "pinkswts_u2", 0x000000, 0x8400000, CRC(a2fa5363) SHA1(5be327534840871592df523ac82ee1927bd79d67) ) // (2006/04/06 MASTER VER....)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -820,7 +821,7 @@ ROM_START( pinkswtsa )
|
||||
ROM_LOAD16_WORD_SWAP( "pnkswtsa_u4", 0x0000, 0x200000, CRC(ee3339b2) SHA1(995988d370731a7074b49ce8752525dadf06a954) ) // (2006/04/06 MASTER VER...)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "pnkswtsa_u2", 0x000000, 0x8400000, CRC(829a862e) SHA1(8c0ee2a0eb33b68869252fd68aed74820a904287) ) // (2006/04/06 MASTER VER...)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -833,7 +834,7 @@ ROM_START( pinkswtsb )
|
||||
ROM_LOAD16_WORD_SWAP( "pnkswtsb_u4", 0x0000, 0x200000, CRC(68bcc009) SHA1(2fef544b93c61161a37365f868b431d8262e4b21) ) // (2006/04/06 MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
// ROM_LOAD( "pnkswtsb_u2", 0x000000, 0x8400000, BAD_DUMP CRC(a5666ed9) SHA1(682e06c84990225bc6bb0c9f38b5f46c4e36b430) ) // (2006/04/06 MASTER VER.)
|
||||
ROM_LOAD( "pnkswtsx_u2", 0x000000, 0x8400000, CRC(91e4deb2) SHA1(893cb10d6f805df7cb4a1bb709a3ea6de147b7e9) ) // (2006/xx/xx MASTER VER.) and (2006/04/06 MASTER VER.)
|
||||
|
||||
@ -847,7 +848,7 @@ ROM_START( pinkswtsx )
|
||||
ROM_LOAD16_WORD_SWAP( "pnkswtsx_u4", 0x0000, 0x200000, CRC(8fe05bf0) SHA1(5cd45ac0e74690787c83d3fb383a65ed7cd47104) ) // (2006/xx/xx MASTER VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "pnkswtsx_u2", 0x000000, 0x8400000, CRC(91e4deb2) SHA1(893cb10d6f805df7cb4a1bb709a3ea6de147b7e9) ) // (2006/xx/xx MASTER VER.) and (2006/04/06 MASTER VER.)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -862,7 +863,7 @@ ROM_START( pinkswtssc )
|
||||
ROM_LOAD16_WORD_SWAP( "suicideclub.u4", 0x0000, 0x200000, CRC(5e03662f) SHA1(b974204b8dcd55fc1b7775f7c1806150919caff3) ) // (2017/10/31 SUICIDECLUB VER.)
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "suicideclub.u2", 0x000000, 0x8400000, CRC(32324608) SHA1(cec1416c943520cb3f91eb295e2ba864a0db7d45) )
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -874,7 +875,7 @@ ROM_START( ddpdfk )
|
||||
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
|
||||
ROM_LOAD16_WORD_SWAP( "ddpdfk_u4", 0x0000, 0x400000, CRC(9976d699) SHA1(9dfe9d1daf6f638cafce8cdc5230209e2bcb7522) ) // (2008/06/23 MASTER VER 1.5)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "ddpdfk_u2", 0x000000, 0x8400000, CRC(84a51a4f) SHA1(291a6279c0746d2eb8630e7d6d886043f0cfdd94) ) // (2008/06/23 MASTER VER 1.5)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -886,7 +887,7 @@ ROM_START( ddpdfk10 )
|
||||
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
|
||||
ROM_LOAD16_WORD_SWAP( "ddpdfk10_u4", 0x0000, 0x400000, CRC(a3d650b2) SHA1(46a7551760e18c2cecd372c3f4be16f6600efc2c) ) // (2008/05/16 MASTER VER)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "ddpdfk10_u2", 0x000000, 0x8400000, CRC(d349cb2a) SHA1(c364c36b69b93f8f62390f185d044f51056669ff) ) // (2008/05/16 MASTER VER)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -898,7 +899,7 @@ ROM_START( dsmbl )
|
||||
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
|
||||
ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x400000, CRC(77fc5ad1) SHA1(afe044fc16e9494143c876879b033caccd08cf22) ) // (2008/10/06 MEGABLACK LABEL VER)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(d6b85b7a) SHA1(4674f6ad07f6a03904ca3d05060816b8fe061add) ) // (2008/10/06 MEGABLACK LABEL VER)
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -910,7 +911,7 @@ ROM_START( dfkbl )
|
||||
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
|
||||
ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x400000, CRC(8092ca9d) SHA1(75e16cd7c8d0f9c715115ce12da5c245fbcd2416) ) // (2010/1/18 BLACK LABEL)
|
||||
|
||||
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(29f9d73a) SHA1(ed978ab5e3ad8c05e7778a91bfb5aaa17b0f72d9) )
|
||||
|
||||
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -922,7 +923,7 @@ ROM_END
|
||||
// ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
|
||||
// ROM_LOAD16_WORD_SWAP( "u4", 0x000000, 0x400000, CRC(613fd380) SHA1(6e28480eef3b483d00b42d811a9d2c7fa1097924) ) // (2010/ 8/13 MASTER VER.)
|
||||
|
||||
// ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
// ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
// ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(89a2e1a5) SHA1(e6f4ec974406283665697fdd52bd606d0337dd11) )
|
||||
|
||||
// ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
@ -935,7 +936,7 @@ ROM_END
|
||||
// ROM_LOAD16_WORD_SWAP("u4", 0x000000, 0x400000, CRC(e2a4411c) SHA1(f8b2b6326dd8eeae99b8b1ab2bd5a3f0b9c7f027) )
|
||||
// ROM_IGNORE( 0x000100 ) // Flash extra bytes
|
||||
|
||||
// ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
|
||||
// ROM_REGION( 0x8400000, "nand", ROMREGION_ERASEFF)
|
||||
// ROM_LOAD("u2", 0x000000, 0x8400000, CRC(668e4cd6) SHA1(da0b10865df3a3e46cf8a109ca88a551faba4483) )
|
||||
|
||||
// ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
|
||||
|
@ -16,7 +16,7 @@
|
||||
#include "emu.h"
|
||||
#include "cpu/arm7/arm7.h"
|
||||
#include "cpu/arm7/arm7core.h"
|
||||
#include "machine/serflash.h"
|
||||
#include "machine/nandflash.h"
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "debugger.h"
|
||||
@ -34,7 +34,7 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_mainram(*this, "mainram"),
|
||||
m_fbram(*this, "fbram"),
|
||||
m_serflash(*this, "flash"),
|
||||
m_nand(*this, "nand"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette")
|
||||
{ }
|
||||
@ -48,7 +48,7 @@ private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_shared_ptr<uint32_t> m_mainram;
|
||||
required_shared_ptr<uint32_t> m_fbram;
|
||||
required_device<serflash_device> m_serflash;
|
||||
required_device<samsung_k9f2g08u0m_device> m_nand;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
@ -243,9 +243,9 @@ void nexus3d_state::nexus3d_map(address_map &map)
|
||||
map(0x8d000000, 0x8d000003).portr("IN2");
|
||||
|
||||
// flash
|
||||
map(0x9C000000, 0x9C000003).r(m_serflash, FUNC(serflash_device::n3d_flash_r));
|
||||
map(0x9C000010, 0x9C000013).w(m_serflash, FUNC(serflash_device::n3d_flash_cmd_w));
|
||||
map(0x9C000018, 0x9C00001b).w(m_serflash, FUNC(serflash_device::n3d_flash_addr_w));
|
||||
map(0x9C000000, 0x9C000003).r(m_nand, FUNC(nand_device::data_r));
|
||||
map(0x9C000010, 0x9C000013).w(m_nand, FUNC(nand_device::command_w));
|
||||
map(0x9C000018, 0x9C00001b).w(m_nand, FUNC(nand_device::address_w));
|
||||
|
||||
// read on irq 9 service, unknown purpose
|
||||
map(0xc0000200, 0xc00002bf).nopr();
|
||||
@ -298,7 +298,7 @@ void nexus3d_state::machine_start()
|
||||
void nexus3d_state::machine_reset()
|
||||
{
|
||||
// the first part of the flash ROM automatically gets copied to RAM
|
||||
memcpy(m_mainram, memregion("flash")->base(), 4 * 1024);
|
||||
memcpy(m_mainram, memregion("nand")->base(), 4 * 1024);
|
||||
}
|
||||
|
||||
void nexus3d_state::screen_vblank(int state)
|
||||
@ -326,13 +326,13 @@ void nexus3d_state::nexus3d(machine_config &config)
|
||||
|
||||
PALETTE(config, "palette", palette_device::RGB_565);
|
||||
|
||||
SERFLASH(config, m_serflash, 0);
|
||||
SAMSUNG_K9F2G08U0M(config, m_nand, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ROM_START( acheart )
|
||||
ROM_REGION( 0x10800898, "flash", 0 ) /* ARM 32 bit code */
|
||||
ROM_REGION( 0x10800898, "nand", 0 ) /* ARM 32 bit code */
|
||||
ROM_LOAD( "arcanaheart.u1", 0x000000, 0x10800898, CRC(109bf439) SHA1(33fd39355923ef384d5eaeec8ae3f296509bde93) )
|
||||
|
||||
ROM_REGION( 0x200000, "user2", 0 ) // QDSP stuff
|
||||
@ -348,7 +348,7 @@ ROM_END
|
||||
|
||||
|
||||
ROM_START( acheartf )
|
||||
ROM_REGION( 0x10800898, "flash", 0 ) /* ARM 32 bit code */
|
||||
ROM_REGION( 0x10800898, "nand", 0 ) /* ARM 32 bit code */
|
||||
ROM_LOAD( "arcanaheartfull.u1", 0x000000, 0x10800898, CRC(54b57a9d) SHA1(dee5a43b3aea854d2b98869dca74c57b66fb06eb))
|
||||
|
||||
ROM_REGION( 0x200000, "user2", 0 ) // QDSP stuff
|
||||
|
Loading…
Reference in New Issue
Block a user