From 41843b8f76737965fd3442d75c4bf3f7f40b4bbc Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 14 Jun 2020 13:43:08 -0400 Subject: [PATCH] intelfsh: Fujitsu updates (nw) - Add MBM29LV800B type - Identify MBM29F160TE and MBM29DL164BD types more specifically - Correct device ID for MBM29F160TE --- src/devices/machine/intelfsh.cpp | 55 +++++++++++++++++++++++++------- src/devices/machine/intelfsh.h | 25 ++++++++++----- src/mame/drivers/rex6000.cpp | 8 ++--- src/mame/drivers/ti85.cpp | 2 +- 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)