summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2022-11-08 22:23:02 -0500
committer AJR <ajrhacker@users.noreply.github.com>2022-11-08 22:23:02 -0500
commitc0d137367eb5e25eafe63fcc3ce1bb0009e215d9 (patch)
tree17f69ab139489c814b497d7c0fd2afb868d3966f /src/devices/machine
parent6c32272fcd9885905458196ec2e3edf317ac814d (diff)
machine/intelfsh.cpp: Retire variant enum; add TC58FVT800 type
Diffstat (limited to 'src/devices/machine')
-rw-r--r--src/devices/machine/intelfsh.cpp378
-rw-r--r--src/devices/machine/intelfsh.h62
2 files changed, 81 insertions, 359 deletions
diff --git a/src/devices/machine/intelfsh.cpp b/src/devices/machine/intelfsh.cpp
index b4e9c5acde0..1bd9308bba8 100644
--- a/src/devices/machine/intelfsh.cpp
+++ b/src/devices/machine/intelfsh.cpp
@@ -67,6 +67,7 @@ enum
MFG_SYNCMOS = 0x40,
MFG_TI = 0x97,
MFG_TI_OLD = 0x01,
+ MFG_TOSHIBA = 0x98,
MFG_WINBOND_NEX = 0xef,
MFG_WINBOND = 0xda
};
@@ -123,6 +124,8 @@ DEFINE_DEVICE_TYPE(ATMEL_49F4096, atmel_49f4096_device, "atmel_4
DEFINE_DEVICE_TYPE(CAT28F020, cat28f020_device, "cat28f020", "CSI CAT28F020 Flash")
+DEFINE_DEVICE_TYPE(TC58FVT800, tc58fvt800_device, "tc58fvt800", "Toshiba TC58FVT800 Flash")
+
//**************************************************************************
@@ -133,16 +136,15 @@ DEFINE_DEVICE_TYPE(CAT28F020, cat28f020_device, "cat28f0
// intelfsh_device - constructor
//-------------------------------------------------
-intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t variant)
+intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t bits, uint32_t size, uint8_t maker_id, uint16_t device_id)
: device_t(mconfig, type, tag, owner, clock),
device_nvram_interface(mconfig, *this),
m_region(*this, DEVICE_SELF),
- m_type(variant),
- m_size(0),
- m_bits(8),
+ m_size(size),
+ m_bits(bits),
m_addrmask(0),
- m_device_id(0),
- m_maker_id(0),
+ m_device_id(device_id),
+ m_maker_id(maker_id),
m_sector_is_4k(false),
m_sector_is_16k(false),
m_top_boot_sector(false),
@@ -154,386 +156,146 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type
m_timer(nullptr),
m_bank(0)
{
- switch( variant )
- {
- case FLASH_INTEL_28F016S5:
- case FLASH_SHARP_LH28F016S:
- m_bits = 8;
- m_size = 0x200000;
- m_maker_id = MFG_INTEL;
- m_device_id = 0xaa;
- break;
- case FLASH_SHARP_LH28F016S_16BIT:
- m_bits = 16;
- m_size = 0x200000;
- m_maker_id = MFG_INTEL;
- m_device_id = 0xaa;
- break;
- case FLASH_ATMEL_29C010:
- m_bits = 8;
- m_size = 0x20000;
- m_page_size = 0x80;
- m_maker_id = MFG_ATMEL;
- m_device_id = 0xd5;
- break;
- case FLASH_ATMEL_49F4096:
- m_bits = 16;
- m_size = 0x80000;
- m_maker_id = MFG_ATMEL;
- m_device_id = 0x92;
- m_sector_is_16k = true;
- break;
- case FLASH_AMD_29F010:
- m_bits = 8;
- m_size = 0x20000;
- m_maker_id = MFG_AMD;
- m_device_id = 0x20;
- break;
- case FLASH_AMD_29F040:
- m_bits = 8;
- m_size = 0x80000;
- m_maker_id = MFG_AMD;
- m_device_id = 0xa4;
- break;
- case FLASH_AMD_29F080:
- m_bits = 8;
- m_size = 0x100000;
- m_addrmask = 0x7ff;
- m_maker_id = MFG_AMD;
- m_device_id = 0xd5;
- break;
- case FLASH_AMD_29F400T:
- m_bits = 8;
- m_size = 0x80000;
- m_maker_id = MFG_AMD;
- m_device_id = 0x23;
- m_top_boot_sector = true;
- break;
- case FLASH_AMD_29F800T:
- m_bits = 8;
- m_size = 0x100000;
- m_maker_id = MFG_AMD;
- m_device_id = 0xda;
- m_top_boot_sector = true;
- break;
- case FLASH_AMD_29F800B_16BIT:
- m_bits = 16;
- m_size = 0x100000;
- m_maker_id = MFG_AMD;
- m_device_id = 0x2258;
- m_top_boot_sector = false;
- break;
- case FLASH_AMD_29LV200T:
- m_bits = 8;
- m_size = 0x40000;
- m_maker_id = MFG_AMD;
- m_device_id = 0x3b;
- break;
- case FLASH_CAT28F020:
- m_bits = 8;
- m_size = 0x40000;
- m_maker_id = MFG_CATALYST;
- m_device_id = 0xbd;
- break;
- case FLASH_INTEL_28F320J3D:
- m_bits = 16;
- m_size = 0x400000;
- m_maker_id = MFG_INTEL;
- m_device_id = 0x16;
- m_sector_is_4k = true;
- break;
- case FLASH_SPANSION_S29GL064S: // senbbs
- m_bits = 16;
- m_size = 0x800000;
- m_maker_id = MFG_SPANSION;
- m_device_id = 0x227e;
- m_sector_is_4k = false;
- break;
- case FLASH_INTEL_28F320J5: // funkball
- m_bits = 16;
- m_size = 0x400000;
- m_maker_id = MFG_INTEL;
- m_device_id = 0x14;
-// m_sector_is_4k = true; 128kb?
- break;
- case FLASH_SST_39SF040:
- m_bits = 8;
- m_size = 0x80000;
- m_addrmask = 0x7fff;
- m_maker_id = MFG_SST;
- m_device_id = 0xb7;
- m_sector_is_4k = true;
- break;
- case FLASH_SST_39VF020:
- m_bits = 8;
- m_size = 0x40000;
- m_maker_id = MFG_SST;
- m_device_id = 0xd6;
- m_sector_is_4k = true;
- break;
- case FLASH_SST_49LF020:
- m_bits = 8;
- m_size = 0x40000;
- m_maker_id = MFG_SST;
- m_device_id = 0x61;
- m_sector_is_4k = true;
- break;
- case FLASH_SST_39VF400A:
- m_bits = 16;
- m_size = 0x80000;
- m_maker_id = MFG_SST;
- m_device_id = 0xd6;
- m_sector_is_4k = true;
- break;
- case FLASH_SHARP_LH28F400:
- m_bits = 16;
- m_size = 0x80000;
- m_maker_id = MFG_SHARP;
- m_device_id = 0xed;
- break;
- case FLASH_INTEL_E28F400B:
- m_bits = 16;
- m_size = 0x80000;
- m_maker_id = MFG_INTEL;
- m_device_id = 0x4471;
- break;
- case FLASH_FUJITSU_29F160TE:
- m_bits = 8;
- m_size = 0x200000;
- m_maker_id = MFG_FUJITSU;
- m_device_id = 0xd2;
- m_top_boot_sector = true;
- break;
- case FLASH_FUJITSU_29F016A:
- m_bits = 8;
- m_size = 0x200000;
- m_maker_id = MFG_FUJITSU;
- m_device_id = 0xad;
- break;
- case FLASH_FUJITSU_29DL164BD:
- m_bits = 8;
- m_size = 0x200000;
- m_maker_id = MFG_FUJITSU;
- m_device_id = 0x35;
- break;
- case FLASH_FUJITSU_29LV002TC:
- m_bits = 8;
- m_size = 0x40000;
- 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;
- m_maker_id = MFG_INTEL;
- m_device_id = 0xa2;
- break;
- case FLASH_INTEL_TE28F160:
- case FLASH_SHARP_LH28F160S3:
- m_bits = 16;
- m_size = 0x200000;
- m_maker_id = MFG_SHARP;
- m_device_id = 0xd0;
- break;
- case FLASH_INTEL_TE28F320:
- m_bits = 16;
- m_size = 0x400000;
- m_maker_id = MFG_INTEL;
- m_device_id = 0x8896;
- break;
- case FLASH_SHARP_LH28F320BF:
- m_bits = 16;
- m_size = 0x400000;
- m_maker_id = MFG_SHARP;
- m_device_id = 0xb5;
- break;
- case FLASH_MACRONIX_29F008TC:
- m_bits = 8;
- m_size = 0x100000;
- m_maker_id = MFG_MACRONIX;
- m_device_id = 0x81;
- m_sector_is_4k = true;
- break;
- case FLASH_MACRONIX_29L001MC:
- m_bits = 8;
- m_size = 0x20000;
- m_maker_id = MFG_MACRONIX;
- m_device_id = 0x51;
- break;
- case FLASH_MACRONIX_29LV160TMC:
- m_bits = 8;
- m_size = 0x20000;
- m_maker_id = MFG_MACRONIX;
- m_device_id = 0x49;
- m_sector_is_16k = true;
- break;
- case FLASH_PANASONIC_MN63F805MNP:
- m_bits = 8;
- m_size = 0x10000;
- m_maker_id = MFG_PANASONIC;
- m_device_id = 0x1b;
- m_sector_is_4k = true;
- break;
- case FLASH_SANYO_LE26FV10N1TS:
- m_bits = 8;
- m_size = 0x20000;
- m_maker_id = MFG_SANYO;
- m_device_id = 0x13;
- m_sector_is_4k = true;
- break;
- case FLASH_SST_28SF040:
- m_bits = 8;
- m_size = 0x80000;
- m_maker_id = MFG_SST;
- m_device_id = 0x04;
- break;
- case FLASH_TMS_29F040:
- m_bits = 8;
- m_addrmask = 0x7fff;
- m_size = 0x80000;
- m_maker_id = MFG_AMD;
- m_device_id = 0xa4;
- break;
- }
-
- int addrbits;
- for (addrbits = 24; addrbits > 0; addrbits--)
- if ((m_size & (1 << addrbits)) != 0)
- break;
+ assert(bits == 8 || bits == 16);
+ assert(size != 0);
}
-intelfsh8_device::intelfsh8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t variant)
- : intelfsh_device(mconfig, type, tag, owner, clock, variant) { }
+intelfsh8_device::intelfsh8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t size, uint8_t maker_id, uint16_t device_id)
+ : intelfsh_device(mconfig, type, tag, owner, clock, 8, size, maker_id, device_id) { }
-intelfsh16_device::intelfsh16_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t variant)
- : intelfsh_device(mconfig, type, tag, owner, clock, variant) { }
+intelfsh16_device::intelfsh16_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t size, uint8_t maker_id, uint16_t device_id)
+ : intelfsh_device(mconfig, type, tag, owner, clock, 16, size, maker_id, device_id) { }
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) { }
+ : intelfsh8_device(mconfig, INTEL_28F016S5, tag, owner, clock, 0x200000, MFG_INTEL, 0xaa) { }
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) { }
+ : intelfsh8_device(mconfig, FUJITSU_29F160TE, tag, owner, clock, 0x200000, MFG_FUJITSU, 0xd2) { m_top_boot_sector = true; }
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) { }
+ : intelfsh8_device(mconfig, FUJITSU_29F016A, tag, owner, clock, 0x200000, MFG_FUJITSU, 0xad) { }
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) { }
+ : intelfsh8_device(mconfig, FUJITSU_29DL164BD, tag, owner, clock, 0x200000, MFG_FUJITSU, 0x35) { }
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) { }
+ : intelfsh8_device(mconfig, FUJITSU_29LV002TC, tag, owner, clock, 0x40000, MFG_FUJITSU, 0x40) { }
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) { }
+ : intelfsh16_device(mconfig, FUJITSU_29LV800B, tag, owner, clock, 0x100000, MFG_FUJITSU, 0x225b) { m_bot_boot_sector = true; }
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) { }
+ : intelfsh8_device(mconfig, SHARP_LH28F016S, tag, owner, clock, 0x200000, MFG_INTEL, 0xaa) { }
sharp_lh28f016s_16bit_device::sharp_lh28f016s_16bit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, SHARP_LH28F016S_16BIT, tag, owner, clock, FLASH_SHARP_LH28F016S_16BIT) { }
+ : intelfsh16_device(mconfig, SHARP_LH28F016S_16BIT, tag, owner, clock, 0x200000, MFG_INTEL, 0xaa) { }
atmel_29c010_device::atmel_29c010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, ATMEL_29C010, tag, owner, clock, FLASH_ATMEL_29C010) { }
+ : intelfsh8_device(mconfig, ATMEL_29C010, tag, owner, clock, 0x20000, MFG_ATMEL, 0xd5) { m_page_size = 0x80; }
atmel_49f4096_device::atmel_49f4096_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, ATMEL_49F4096, tag, owner, clock, FLASH_ATMEL_49F4096) { }
+ : intelfsh16_device(mconfig, ATMEL_49F4096, tag, owner, clock, 0x80000, MFG_ATMEL, 0x92) { m_sector_is_16k = true; }
amd_29f010_device::amd_29f010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, AMD_29F010, tag, owner, clock, FLASH_AMD_29F010) { }
+ : intelfsh8_device(mconfig, AMD_29F010, tag, owner, clock, 0x20000, MFG_AMD, 0x20) { }
amd_29f040_device::amd_29f040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, AMD_29F040, tag, owner, clock, FLASH_AMD_29F040) { }
+ : intelfsh8_device(mconfig, AMD_29F040, tag, owner, clock, 0x80000, MFG_AMD, 0xa4) { }
amd_29f080_device::amd_29f080_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, AMD_29F080, tag, owner, clock, FLASH_AMD_29F080) { }
+ : intelfsh8_device(mconfig, AMD_29F080, tag, owner, clock, 0x100000, MFG_AMD, 0xd5) { m_addrmask = 0x7ff; }
amd_29f400t_device::amd_29f400t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, AMD_29F400T, tag, owner, clock, FLASH_AMD_29F400T) { }
+ : intelfsh8_device(mconfig, AMD_29F400T, tag, owner, clock, 0x80000, MFG_AMD, 0x23) { m_top_boot_sector = true; }
amd_29f800t_device::amd_29f800t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, AMD_29F800T, tag, owner, clock, FLASH_AMD_29F800T) { }
+ : intelfsh8_device(mconfig, AMD_29F800T, tag, owner, clock, 0x100000, MFG_AMD, 0xda) { m_top_boot_sector = true; }
amd_29f800b_16bit_device::amd_29f800b_16bit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, AMD_29F800B_16BIT, tag, owner, clock, FLASH_AMD_29F800B_16BIT) { }
+ : intelfsh16_device(mconfig, AMD_29F800B_16BIT, tag, owner, clock, 0x100000, MFG_AMD, 0x2258) { m_top_boot_sector = false; }
amd_29lv200t_device::amd_29lv200t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, AMD_29LV200T, tag, owner, clock, FLASH_AMD_29LV200T) { }
+ : intelfsh8_device(mconfig, AMD_29LV200T, tag, owner, clock, 0x40000, MFG_AMD, 0x3b) { }
cat28f020_device::cat28f020_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, CAT28F020, tag, owner, clock, FLASH_CAT28F020) { }
+ : intelfsh8_device(mconfig, CAT28F020, tag, owner, clock, 0x40000, MFG_CATALYST, 0xbd) { }
intel_e28f008sa_device::intel_e28f008sa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, INTEL_E28F008SA, tag, owner, clock, FLASH_INTEL_E28F008SA) { }
+ : intelfsh8_device(mconfig, INTEL_E28F008SA, tag, owner, clock, 0x100000, MFG_INTEL, 0xa2) { }
macronix_29f008tc_device::macronix_29f008tc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, MACRONIX_29F008TC, tag, owner, clock, FLASH_MACRONIX_29F008TC) { }
+ : intelfsh8_device(mconfig, MACRONIX_29F008TC, tag, owner, clock, 0x100000, MFG_MACRONIX, 0x81) { m_sector_is_4k = true; }
macronix_29l001mc_device::macronix_29l001mc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, MACRONIX_29L001MC, tag, owner, clock, FLASH_MACRONIX_29L001MC) { }
+ : intelfsh8_device(mconfig, MACRONIX_29L001MC, tag, owner, clock, 0x20000, MFG_MACRONIX, 0x51) { }
macronix_29lv160tmc_device::macronix_29lv160tmc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, MACRONIX_29LV160TMC, tag, owner, clock, FLASH_MACRONIX_29LV160TMC) { }
+ : intelfsh8_device(mconfig, MACRONIX_29LV160TMC, tag, owner, clock, 0x20000, MFG_MACRONIX, 0x49) { m_sector_is_16k = true; }
panasonic_mn63f805mnp_device::panasonic_mn63f805mnp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, PANASONIC_MN63F805MNP, tag, owner, clock, FLASH_PANASONIC_MN63F805MNP) { }
+ : intelfsh8_device(mconfig, PANASONIC_MN63F805MNP, tag, owner, clock, 0x10000, MFG_PANASONIC, 0x1b) { m_sector_is_4k = true; }
sanyo_le26fv10n1ts_device::sanyo_le26fv10n1ts_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, SANYO_LE26FV10N1TS, tag, owner, clock, FLASH_SANYO_LE26FV10N1TS) { }
+ : intelfsh8_device(mconfig, SANYO_LE26FV10N1TS, tag, owner, clock, 0x20000, MFG_SANYO, 0x13) { m_sector_is_4k = true; }
sst_28sf040_device::sst_28sf040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, SST_28SF040, tag, owner, clock, FLASH_SST_28SF040) { }
+ : intelfsh8_device(mconfig, SST_28SF040, tag, owner, clock, 0x80000, MFG_SST, 0x04) { }
sst_39sf040_device::sst_39sf040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, SST_39SF040, tag, owner, clock, FLASH_SST_39SF040) { }
+ : intelfsh8_device(mconfig, SST_39SF040, tag, owner, clock, 0x80000, MFG_SST, 0xb7) { m_addrmask = 0x7fff; }
sst_39vf020_device::sst_39vf020_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, SST_39VF020, tag, owner, clock, FLASH_SST_39VF020) { }
+ : intelfsh8_device(mconfig, SST_39VF020, tag, owner, clock, 0x40000, MFG_SST, 0xd6) { m_sector_is_4k = true; }
sst_49lf020_device::sst_49lf020_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, SST_49LF020, tag, owner, clock, FLASH_SST_49LF020) { }
+ : intelfsh8_device(mconfig, SST_49LF020, tag, owner, clock, 0x40000, MFG_SST, 0x61) { m_sector_is_4k = true; }
sharp_lh28f400_device::sharp_lh28f400_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, SHARP_LH28F400, tag, owner, clock, FLASH_SHARP_LH28F400) { }
+ : intelfsh16_device(mconfig, SHARP_LH28F400, tag, owner, clock, 0x80000, MFG_SHARP, 0xed) { }
intel_te28f160_device::intel_te28f160_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, INTEL_TE28F160, tag, owner, clock, FLASH_INTEL_TE28F160) { }
+ : intelfsh16_device(mconfig, INTEL_TE28F160, tag, owner, clock, 0x200000, MFG_SHARP, 0xd0) { }
sharp_lh28f160s3_device::sharp_lh28f160s3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, SHARP_LH28F160S3, tag, owner, clock, FLASH_SHARP_LH28F160S3) { }
+ : intelfsh16_device(mconfig, SHARP_LH28F160S3, tag, owner, clock, 0x200000, MFG_SHARP, 0xd0) { }
intel_te28f320_device::intel_te28f320_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, INTEL_TE28F320, tag, owner, clock, FLASH_INTEL_TE28F320) { }
+ : intelfsh16_device(mconfig, INTEL_TE28F320, tag, owner, clock, 0x400000, MFG_INTEL, 0x8896) { }
spansion_s29gl064s_device::spansion_s29gl064s_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, SPANSION_S29GL064S, tag, owner, clock, FLASH_SPANSION_S29GL064S) { }
+ : intelfsh16_device(mconfig, SPANSION_S29GL064S, tag, owner, clock, 0x800000, MFG_SPANSION, 0x227e)
+{
+ // senbbs
+ m_sector_is_4k = false;
+}
intel_e28f400b_device::intel_e28f400b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, INTEL_E28F400B, tag, owner, clock, FLASH_INTEL_E28F400B) { }
+ : intelfsh16_device(mconfig, INTEL_E28F400B, tag, owner, clock, 0x80000, MFG_INTEL, 0x4471) { }
sharp_lh28f320bf_device::sharp_lh28f320bf_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, SHARP_LH28F320BF, tag, owner, clock, FLASH_SHARP_LH28F320BF) { }
+ : intelfsh16_device(mconfig, SHARP_LH28F320BF, tag, owner, clock, 0x400000, MFG_SHARP, 0xb5) { }
intel_28f320j3d_device::intel_28f320j3d_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, INTEL_28F320J3D, tag, owner, clock, FLASH_INTEL_28F320J3D) { }
+ : intelfsh16_device(mconfig, INTEL_28F320J3D, tag, owner, clock, 0x400000, MFG_INTEL, 0x16) { m_sector_is_4k = true; }
intel_28f320j5_device::intel_28f320j5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, INTEL_28F320J5, tag, owner, clock, FLASH_INTEL_28F320J5) { }
+ : intelfsh16_device(mconfig, INTEL_28F320J5, tag, owner, clock, 0x400000, MFG_INTEL, 0x14)
+{
+ // funkball
+// m_sector_is_4k = true; 128kb?
+}
sst_39vf400a_device::sst_39vf400a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh16_device(mconfig, SST_39VF400A, tag, owner, clock, FLASH_SST_39VF400A) { }
+ : intelfsh16_device(mconfig, SST_39VF400A, tag, owner, clock, 0x80000, MFG_SST, 0xd6) { m_sector_is_4k = true; }
tms_29f040_device::tms_29f040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : intelfsh8_device(mconfig, TMS_29F040, tag, owner, clock, FLASH_TMS_29F040) { }
+ : intelfsh8_device(mconfig, TMS_29F040, tag, owner, clock, 0x80000, MFG_AMD, 0xa4) { m_addrmask = 0x7fff; }
+
+tc58fvt800_device::tc58fvt800_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : intelfsh16_device(mconfig, TC58FVT800, tag, owner, clock, 0x100000, MFG_TOSHIBA, 0x4f) { m_top_boot_sector = true; }
//-------------------------------------------------
// device_start - device-specific startup
@@ -775,7 +537,7 @@ void intelfsh_device::write_full(uint32_t address, uint32_t data)
m_flash_mode = FM_WRITEPART1;
break;
case 0x50: // clear status reg
- if ((m_type == FLASH_SST_49LF020) && (m_flash_mode == FM_NORMAL))
+ if ((m_maker_id == MFG_SST && m_device_id == 0x61) && (m_flash_mode == FM_NORMAL))
logerror("Invalid flash mode byte %x\n", data & 0xff);
else
{
@@ -784,7 +546,7 @@ void intelfsh_device::write_full(uint32_t address, uint32_t data)
}
break;
case 0x20: // block erase
- if (m_type == FLASH_SST_49LF020)
+ if (m_maker_id == MFG_SST && m_device_id == 0x61)
logerror("Unknown flash mode byte %x\n", data & 0xff);
else
m_flash_mode = FM_CLEARPART1;
@@ -865,7 +627,7 @@ void intelfsh_device::write_full(uint32_t address, uint32_t data)
}
else if( ( address & 0xffff ) == 0x5555 && ( data & 0xff ) == 0xa0 )
{
- if (m_type == FLASH_ATMEL_29C010)
+ if (m_maker_id == MFG_ATMEL && m_device_id == 0xd5)
{
m_flash_mode = FM_WRITEPAGEATMEL;
m_byte_count = 0;
@@ -1109,7 +871,7 @@ void intelfsh_device::write_full(uint32_t address, uint32_t data)
break;
}
m_status = 0x80;
- if (m_type == FLASH_SST_28SF040)
+ if (m_maker_id == MFG_SST && m_device_id == 0x04)
m_flash_mode = FM_NORMAL;
else
m_flash_mode = FM_READSTATUS;
@@ -1139,7 +901,7 @@ void intelfsh_device::write_full(uint32_t address, uint32_t data)
case FM_CLEARPART1:
if( ( data & 0xff ) == 0xd0 )
{
- if (m_type == FLASH_SST_28SF040)
+ if (m_maker_id == MFG_SST && m_device_id == 0x04)
{
// clear the 256 bytes block containing the current address to all 0xffs
uint32_t base = address * ((m_bits == 16) ? 2 : 1);
@@ -1147,7 +909,7 @@ void intelfsh_device::write_full(uint32_t address, uint32_t data)
m_timer->adjust( attotime::from_msec( 4 ) );
}
- else if (m_type == FLASH_INTEL_E28F400B)
+ else if (m_maker_id == MFG_INTEL && m_device_id == 0x4471)
{
// 00000-03fff - 16KB boot block (may be write protected via external pins)
// 04000-05fff - 8KB parameter block
diff --git a/src/devices/machine/intelfsh.h b/src/devices/machine/intelfsh.h
index 189d9349d42..ee6a54fb829 100644
--- a/src/devices/machine/intelfsh.h
+++ b/src/devices/machine/intelfsh.h
@@ -13,57 +13,11 @@ class intelfsh_device : public device_t,
public device_nvram_interface
{
public:
- enum
- {
- // 8-bit variants
- FLASH_INTEL_28F016S5 = 0x0800,
- FLASH_FUJITSU_29F160TE,
- FLASH_FUJITSU_29F016A,
- FLASH_FUJITSU_29DL164BD,
- FLASH_FUJITSU_29LV002TC,
- FLASH_FUJITSU_29LV800B,
- FLASH_ATMEL_29C010,
- FLASH_AMD_29F010,
- FLASH_AMD_29F040,
- FLASH_AMD_29F080,
- FLASH_AMD_29F400T,
- FLASH_AMD_29F800T,
- FLASH_AMD_29F800B_16BIT,
- FLASH_AMD_29LV200T,
- FLASH_CAT28F020,
- FLASH_SHARP_LH28F016S,
- FLASH_SHARP_LH28F016S_16BIT,
- FLASH_INTEL_E28F008SA,
- FLASH_MACRONIX_29F008TC,
- FLASH_MACRONIX_29L001MC,
- FLASH_MACRONIX_29LV160TMC,
- FLASH_PANASONIC_MN63F805MNP,
- FLASH_SANYO_LE26FV10N1TS,
- FLASH_SST_28SF040,
- FLASH_SST_39SF040,
- FLASH_SST_39VF020,
- FLASH_SST_49LF020,
- FLASH_TMS_29F040,
-
- // 16-bit variants
- FLASH_SHARP_LH28F400 = 0x1000,
- FLASH_INTEL_E28F400B,
- FLASH_INTEL_TE28F160,
- FLASH_SHARP_LH28F160S3,
- FLASH_INTEL_TE28F320,
- FLASH_SHARP_LH28F320BF,
- FLASH_INTEL_28F320J3D,
- FLASH_SPANSION_S29GL064S,
- FLASH_INTEL_28F320J5,
- FLASH_SST_39VF400A,
- FLASH_ATMEL_49F4096
- };
-
uint8_t *base() { return &m_data[0]; }
protected:
// construction/destruction
- intelfsh_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t variant);
+ intelfsh_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t bits, uint32_t size, uint8_t maker_id, uint16_t device_id);
// device-level overrides
virtual void device_start() override;
@@ -82,8 +36,7 @@ protected:
optional_memory_region m_region;
// configuration state
- uint32_t m_type;
- int32_t m_size;
+ uint32_t m_size;
uint8_t m_bits;
uint32_t m_addrmask;
uint16_t m_device_id;
@@ -120,7 +73,7 @@ public:
protected:
// construction/destruction
- intelfsh8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t variant);
+ intelfsh8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t size, uint8_t maker_id, uint16_t device_id);
};
@@ -138,7 +91,7 @@ public:
protected:
// construction/destruction
- intelfsh16_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t variant);
+ intelfsh16_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t size, uint8_t maker_id, uint16_t device_id);
};
@@ -380,6 +333,12 @@ public:
cat28f020_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
+class tc58fvt800_device : public intelfsh16_device
+{
+public:
+ tc58fvt800_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
// device type definition
DECLARE_DEVICE_TYPE(INTEL_28F016S5, intel_28f016s5_device)
@@ -423,5 +382,6 @@ DECLARE_DEVICE_TYPE(INTEL_28F320J5, intel_28f320j5_device)
DECLARE_DEVICE_TYPE(SST_39VF400A, sst_39vf400a_device)
DECLARE_DEVICE_TYPE(ATMEL_49F4096, atmel_49f4096_device)
DECLARE_DEVICE_TYPE(CAT28F020, cat28f020_device)
+DECLARE_DEVICE_TYPE(TC58FVT800, tc58fvt800_device)
#endif // MAME_MACHINE_INTELFSH_H