diff options
Diffstat (limited to 'src/devices/machine/intelfsh.cpp')
-rw-r--r-- | src/devices/machine/intelfsh.cpp | 55 |
1 files changed, 44 insertions, 11 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 }; |