summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-06-14 13:43:08 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-06-14 13:45:22 -0400
commit41843b8f76737965fd3442d75c4bf3f7f40b4bbc (patch)
treeab44e4169be21564574a4cd8baf9f5ada493097e
parenta1d23edb668ef908256420e6b19d742c6b0dde4a (diff)
intelfsh: Fujitsu updates (nw)
- Add MBM29LV800B type - Identify MBM29F160TE and MBM29DL164BD types more specifically - Correct device ID for MBM29F160TE
-rw-r--r--src/devices/machine/intelfsh.cpp55
-rw-r--r--src/devices/machine/intelfsh.h25
-rw-r--r--src/mame/drivers/rex6000.cpp8
-rw-r--r--src/mame/drivers/ti85.cpp2
4 files changed, 66 insertions, 24 deletions
diff --git a/src/devices/machine/intelfsh.cpp b/src/devices/machine/intelfsh.cpp
index b8293cad26e..dd9aa956287 100644
--- a/src/devices/machine/intelfsh.cpp
+++ b/src/devices/machine/intelfsh.cpp
@@ -89,10 +89,11 @@ DEFINE_DEVICE_TYPE(AMD_29F400T, amd_29f400t_device, "amd_29f
DEFINE_DEVICE_TYPE(AMD_29F800T, amd_29f800t_device, "amd_29f800t", "AMD 29F800T Flash")
DEFINE_DEVICE_TYPE(AMD_29F800B_16BIT, amd_29f800b_16bit_device, "amd_29f800b_16bit", "AMD 29F800B Flash used in 16 bit mode")
DEFINE_DEVICE_TYPE(AMD_29LV200T, amd_29lv200t_device, "amd_29lv200t", "AMD 29LV200T Flash")
-DEFINE_DEVICE_TYPE(FUJITSU_29F160T, fujitsu_29f160t_device, "fujitsu_29f160t", "Fujitsu 29F160T Flash")
-DEFINE_DEVICE_TYPE(FUJITSU_29F016A, fujitsu_29f016a_device, "fujitsu_29f016a", "Fujitsu 29F016A Flash")
-DEFINE_DEVICE_TYPE(FUJITSU_29DL16X, fujitsu_29dl16x_device, "fujitsu_29dl16x", "Fujitsu 29DL16X Flash")
-DEFINE_DEVICE_TYPE(FUJITSU_29LV002TC, fujitsu_29lv002tc_device, "fujitsu_29lv002tc", "Fujitsu 29LV002TC Flash")
+DEFINE_DEVICE_TYPE(FUJITSU_29F160TE, fujitsu_29f160te_device, "mbm29f160te", "Fujitsu MBM29F160TE Flash")
+DEFINE_DEVICE_TYPE(FUJITSU_29F016A, fujitsu_29f016a_device, "mbm29f016a", "Fujitsu MBM29F016A Flash")
+DEFINE_DEVICE_TYPE(FUJITSU_29DL164BD, fujitsu_29dl164bd_device, "mbm29dl164bd", "Fujitsu MBM29DL164BD Flash")
+DEFINE_DEVICE_TYPE(FUJITSU_29LV002TC, fujitsu_29lv002tc_device, "mbm29lv002tc", "Fujitsu MBM29LV002TC Flash")
+DEFINE_DEVICE_TYPE(FUJITSU_29LV800B, fujitsu_29lv800b_device, "mbm29lv800b", "Fujitsu MBM29LV800B Flash")
DEFINE_DEVICE_TYPE(INTEL_E28F400B, intel_e28f400b_device, "intel_e28f400b", "Intel E28F400B Flash")
DEFINE_DEVICE_TYPE(MACRONIX_29L001MC, macronix_29l001mc_device, "macronix_29l001mc", "Macronix 29L001MC Flash")
DEFINE_DEVICE_TYPE(MACRONIX_29LV160TMC, macronix_29lv160tmc_device, "macronix_29lv160tmc", "Macronix 29LV160TMC Flash")
@@ -142,6 +143,7 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type
m_sector_is_4k(false),
m_sector_is_16k(false),
m_top_boot_sector(false),
+ m_bot_boot_sector(false),
m_status(0x80),
m_erase_sector(0),
m_flash_mode(FM_NORMAL),
@@ -285,11 +287,11 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type
m_maker_id = MFG_INTEL;
m_device_id = 0x4471;
break;
- case FLASH_FUJITSU_29F160T:
+ case FLASH_FUJITSU_29F160TE:
m_bits = 8;
m_size = 0x200000;
m_maker_id = MFG_FUJITSU;
- m_device_id = 0xad;
+ m_device_id = 0xd2;
m_top_boot_sector = true;
break;
case FLASH_FUJITSU_29F016A:
@@ -298,7 +300,7 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type
m_maker_id = MFG_FUJITSU;
m_device_id = 0xad;
break;
- case FLASH_FUJITSU_29DL16X:
+ case FLASH_FUJITSU_29DL164BD:
m_bits = 8;
m_size = 0x200000;
m_maker_id = MFG_FUJITSU;
@@ -310,6 +312,13 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type
m_maker_id = MFG_FUJITSU;
m_device_id = 0x40;
break;
+ case FLASH_FUJITSU_29LV800B:
+ m_bits = 16;
+ m_size = 0x100000;
+ m_maker_id = MFG_FUJITSU;
+ m_device_id = 0x225b;
+ m_bot_boot_sector = true;
+ break;
case FLASH_INTEL_E28F008SA:
m_bits = 8;
m_size = 0x100000;
@@ -393,18 +402,21 @@ intelfsh16_device::intelfsh16_device(const machine_config &mconfig, device_type
intel_28f016s5_device::intel_28f016s5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: intelfsh8_device(mconfig, INTEL_28F016S5, tag, owner, clock, FLASH_INTEL_28F016S5) { }
-fujitsu_29f160t_device::fujitsu_29f160t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, FUJITSU_29F160T, tag, owner, clock, FLASH_FUJITSU_29F160T) { }
+fujitsu_29f160te_device::fujitsu_29f160te_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : intelfsh8_device(mconfig, FUJITSU_29F160TE, tag, owner, clock, FLASH_FUJITSU_29F160TE) { }
fujitsu_29f016a_device::fujitsu_29f016a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: intelfsh8_device(mconfig, FUJITSU_29F016A, tag, owner, clock, FLASH_FUJITSU_29F016A) { }
-fujitsu_29dl16x_device::fujitsu_29dl16x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, FUJITSU_29DL16X, tag, owner, clock, FLASH_FUJITSU_29DL16X) { }
+fujitsu_29dl164bd_device::fujitsu_29dl164bd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : intelfsh8_device(mconfig, FUJITSU_29DL164BD, tag, owner, clock, FLASH_FUJITSU_29DL164BD) { }
fujitsu_29lv002tc_device::fujitsu_29lv002tc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: intelfsh8_device(mconfig, FUJITSU_29LV002TC, tag, owner, clock, FLASH_FUJITSU_29LV002TC) { }
+fujitsu_29lv800b_device::fujitsu_29lv800b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : intelfsh16_device(mconfig, FUJITSU_29LV800B, tag, owner, clock, FLASH_FUJITSU_29LV800B) { }
+
sharp_lh28f016s_device::sharp_lh28f016s_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: intelfsh8_device(mconfig, SHARP_LH28F016S, tag, owner, clock, FLASH_SHARP_LH28F016S) { }
@@ -979,6 +991,27 @@ void intelfsh_device::write_full(uint32_t address, uint32_t data)
m_timer->adjust( attotime::from_msec( 500 ) );
}
}
+ else if(m_bot_boot_sector && address < (64*1024))
+ {
+ if (address < (16*1024))
+ {
+ memset(&m_data[base & ~0x3fff], 0xff, 16 * 1024);
+ m_erase_sector = address & ((m_bits == 16) ? ~0x1fff : ~0x3fff);
+ m_timer->adjust( attotime::from_msec( 500 ) );
+ }
+ else if (address < (32*1024))
+ {
+ memset(&m_data[base & ~0x1fff], 0xff, 8 * 1024);
+ m_erase_sector = address & ((m_bits == 16) ? ~0xfff : ~0x1fff);
+ m_timer->adjust( attotime::from_msec( 250 ) );
+ }
+ else
+ {
+ memset(&m_data[base & ~0x7fff], 0xff, 32 * 1024);
+ m_erase_sector = address & ((m_bits == 16) ? ~0x3fff : ~0x7fff);
+ m_timer->adjust( attotime::from_msec( 500 ) );
+ }
+ }
else if (m_maker_id == MFG_FUJITSU && m_device_id == 0x40)
{
constexpr u32 sectors[] = { 0x10000, 0x10000, 0x10000, 0x08000, 0x02000, 0x02000, 0x4000 };
diff --git a/src/devices/machine/intelfsh.h b/src/devices/machine/intelfsh.h
index cc9f3fb90ba..bde0b0d4c61 100644
--- a/src/devices/machine/intelfsh.h
+++ b/src/devices/machine/intelfsh.h
@@ -17,10 +17,11 @@ public:
{
// 8-bit variants
FLASH_INTEL_28F016S5 = 0x0800,
- FLASH_FUJITSU_29F160T,
+ FLASH_FUJITSU_29F160TE,
FLASH_FUJITSU_29F016A,
- FLASH_FUJITSU_29DL16X,
+ FLASH_FUJITSU_29DL164BD,
FLASH_FUJITSU_29LV002TC,
+ FLASH_FUJITSU_29LV800B,
FLASH_ATMEL_29C010,
FLASH_AMD_29F010,
FLASH_AMD_29F040,
@@ -87,6 +88,7 @@ protected:
bool m_sector_is_4k;
bool m_sector_is_16k;
bool m_top_boot_sector;
+ bool m_bot_boot_sector;
uint8_t m_page_size;
// internal state
@@ -146,10 +148,10 @@ public:
intel_28f016s5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
-class fujitsu_29f160t_device : public intelfsh8_device
+class fujitsu_29f160te_device : public intelfsh8_device
{
public:
- fujitsu_29f160t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ fujitsu_29f160te_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
class fujitsu_29f016a_device : public intelfsh8_device
@@ -158,10 +160,10 @@ public:
fujitsu_29f016a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
-class fujitsu_29dl16x_device : public intelfsh8_device
+class fujitsu_29dl164bd_device : public intelfsh8_device
{
public:
- fujitsu_29dl16x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ fujitsu_29dl164bd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
class fujitsu_29lv002tc_device : public intelfsh8_device
@@ -170,6 +172,12 @@ public:
fujitsu_29lv002tc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
+class fujitsu_29lv800b_device : public intelfsh16_device
+{
+public:
+ fujitsu_29lv800b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
class atmel_29c010_device : public intelfsh8_device
{
public:
@@ -370,10 +378,11 @@ DECLARE_DEVICE_TYPE(AMD_29F400T, amd_29f400t_device)
DECLARE_DEVICE_TYPE(AMD_29F800T, amd_29f800t_device)
DECLARE_DEVICE_TYPE(AMD_29F800B_16BIT, amd_29f800b_16bit_device)
DECLARE_DEVICE_TYPE(AMD_29LV200T, amd_29lv200t_device)
-DECLARE_DEVICE_TYPE(FUJITSU_29F160T, fujitsu_29f160t_device)
+DECLARE_DEVICE_TYPE(FUJITSU_29F160TE, fujitsu_29f160te_device)
DECLARE_DEVICE_TYPE(FUJITSU_29F016A, fujitsu_29f016a_device)
-DECLARE_DEVICE_TYPE(FUJITSU_29DL16X, fujitsu_29dl16x_device)
+DECLARE_DEVICE_TYPE(FUJITSU_29DL164BD, fujitsu_29dl164bd_device)
DECLARE_DEVICE_TYPE(FUJITSU_29LV002TC, fujitsu_29lv002tc_device)
+DECLARE_DEVICE_TYPE(FUJITSU_29LV800B, fujitsu_29lv800b_device)
DECLARE_DEVICE_TYPE(INTEL_E28F400B, intel_e28f400b_device)
DECLARE_DEVICE_TYPE(MACRONIX_29L001MC, macronix_29l001mc_device)
DECLARE_DEVICE_TYPE(MACRONIX_29LV160TMC, macronix_29lv160tmc_device)
diff --git a/src/mame/drivers/rex6000.cpp b/src/mame/drivers/rex6000.cpp
index 474467d79c4..81812f8a1c0 100644
--- a/src/mame/drivers/rex6000.cpp
+++ b/src/mame/drivers/rex6000.cpp
@@ -947,10 +947,10 @@ void rex6000_state::rex6000(machine_config &config)
by the flash emulation and I have split every bank into a separate
device in order to have similar behavior.
*/
- FUJITSU_29DL16X(config, m_flash0a); //bank 0 of first flash
- FUJITSU_29DL16X(config, m_flash0b); //bank 1 of first flash
- FUJITSU_29DL16X(config, m_flash1a); //bank 0 of second flash
- FUJITSU_29DL16X(config, m_flash1b); //bank 1 of second flash
+ FUJITSU_29DL164BD(config, m_flash0a); //bank 0 of first flash
+ FUJITSU_29DL164BD(config, m_flash0b); //bank 1 of first flash
+ FUJITSU_29DL164BD(config, m_flash1a); //bank 0 of second flash
+ FUJITSU_29DL164BD(config, m_flash1b); //bank 1 of second flash
/* internal ram */
RAM(config, RAM_TAG).set_default_size("32K");
diff --git a/src/mame/drivers/ti85.cpp b/src/mame/drivers/ti85.cpp
index 1605411788d..8311d630149 100644
--- a/src/mame/drivers/ti85.cpp
+++ b/src/mame/drivers/ti85.cpp
@@ -716,7 +716,7 @@ void ti85_state::ti83pse(machine_config &config)
m_membank[3]->set_map(&ti85_state::ti83pse_banked_mem);
MCFG_MACHINE_START_OVERRIDE(ti85_state, ti83pse )
- FUJITSU_29F160T(config.replace(), m_flash, 0);
+ FUJITSU_29F160TE(config.replace(), m_flash, 0);
}
void ti85_state::ti84p(machine_config &config)