diff options
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 |
commit | c0d137367eb5e25eafe63fcc3ce1bb0009e215d9 (patch) | |
tree | 17f69ab139489c814b497d7c0fd2afb868d3966f /src/devices/machine | |
parent | 6c32272fcd9885905458196ec2e3edf317ac814d (diff) |
machine/intelfsh.cpp: Retire variant enum; add TC58FVT800 type
Diffstat (limited to 'src/devices/machine')
-rw-r--r-- | src/devices/machine/intelfsh.cpp | 378 | ||||
-rw-r--r-- | src/devices/machine/intelfsh.h | 62 |
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 |