summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/intelfsh.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/intelfsh.h')
-rw-r--r--src/devices/machine/intelfsh.h282
1 files changed, 176 insertions, 106 deletions
diff --git a/src/devices/machine/intelfsh.h b/src/devices/machine/intelfsh.h
index 2d459f59eed..5db03effe96 100644
--- a/src/devices/machine/intelfsh.h
+++ b/src/devices/machine/intelfsh.h
@@ -13,88 +13,60 @@ class intelfsh_device : public device_t,
public device_nvram_interface
{
public:
- enum
- {
- // 8-bit variants
- FLASH_INTEL_28F016S5 = 0x0800,
- FLASH_FUJITSU_29F160T,
- FLASH_FUJITSU_29F016A,
- FLASH_FUJITSU_29DL16X,
- 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_SHARP_LH28F016S,
- FLASH_SHARP_LH28F016S_16BIT,
- FLASH_INTEL_E28F008SA,
- FLASH_MACRONIX_29L001MC,
- FLASH_MACRONIX_29LV160TMC,
- FLASH_PANASONIC_MN63F805MNP,
- FLASH_SANYO_LE26FV10N1TS,
- FLASH_SST_28SF040,
- 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_INTEL_28F320J5,
- FLASH_SST_39VF400A,
- FLASH_ATMEL_49F4096
- };
-
uint8_t *base() { return &m_data[0]; }
+ bool is_ready();
+
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;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ virtual void device_start() override ATTR_COLD;
// device_nvram_interface overrides
virtual void nvram_default() override;
- virtual void nvram_read(emu_file &file) override;
- virtual void nvram_write(emu_file &file) override;
+ virtual bool nvram_read(util::read_stream &file) override;
+ virtual bool nvram_write(util::write_stream &file) override;
// derived helpers
uint32_t read_full(uint32_t offset);
void write_full(uint32_t offset, uint32_t data);
+ TIMER_CALLBACK_MEMBER(delay_tick);
+
optional_memory_region m_region;
// configuration state
- uint32_t m_type;
- int32_t m_size;
- uint8_t m_bits;
- uint32_t m_addrmask;
- uint16_t m_device_id;
- uint8_t m_maker_id;
+ uint32_t m_size;
+ uint8_t m_bits;
+ uint32_t m_addrmask;
+ uint16_t m_device_id;
+ uint16_t m_device_id2;
+ uint16_t m_device_id3;
+ uint8_t m_maker_id;
bool m_sector_is_4k;
bool m_sector_is_16k;
bool m_top_boot_sector;
- uint8_t m_page_size;
+ bool m_bot_boot_sector;
+ uint16_t m_page_size;
// internal state
std::unique_ptr<uint8_t[]> m_data;
- uint8_t m_status;
- int32_t m_erase_sector;
- int32_t m_flash_mode;
+ uint8_t m_status;
+ int32_t m_erase_sector;
+ int32_t m_flash_mode;
bool m_flash_master_lock;
emu_timer * m_timer;
- int32_t m_bank;
- uint8_t m_byte_count;
+ int32_t m_bank;
+ uint16_t m_byte_count;
+ bool m_sdp;
+
+ uint8_t m_write_buffer[32];
+ uint32_t m_write_buffer_start_address;
+ uint32_t m_write_buffer_count;
+
+ bool m_fast_mode;
};
@@ -112,7 +84,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);
};
@@ -130,7 +102,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);
};
@@ -143,10 +115,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
@@ -155,10 +127,16 @@ 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
+{
+public:
+ fujitsu_29lv002tc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
class atmel_29c010_device : public intelfsh8_device
@@ -197,16 +175,16 @@ public:
amd_29f800t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
-class amd_29f800b_16bit_device : public intelfsh16_device
+class amd_29lv200t_device : public intelfsh8_device
{
public:
- amd_29f800b_16bit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ amd_29lv200t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
-class amd_29lv200t_device : public intelfsh8_device
+class atmel_29c020_device : public intelfsh8_device
{
public:
- amd_29lv200t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ atmel_29c020_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
class sharp_lh28f016s_device : public intelfsh8_device
@@ -215,16 +193,22 @@ public:
sharp_lh28f016s_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
-class sharp_lh28f016s_16bit_device : public intelfsh16_device
+class intel_e28f008sa_device : public intelfsh8_device
{
public:
- sharp_lh28f016s_16bit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ intel_e28f008sa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
-class intel_e28f008sa_device : public intelfsh8_device
+class macronix_29f008tc_device : public intelfsh8_device
{
public:
- intel_e28f008sa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+ macronix_29f008tc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class macronix_29f1610mc_device : public intelfsh8_device
+{
+public:
+ macronix_29f1610mc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
class macronix_29l001mc_device : public intelfsh8_device
@@ -239,6 +223,12 @@ public:
macronix_29lv160tmc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
+class st_m29w640gb_device : public intelfsh8_device
+{
+public:
+ st_m29w640gb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
class panasonic_mn63f805mnp_device : public intelfsh8_device
{
public:
@@ -257,6 +247,18 @@ public:
sst_28sf040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
+class sst_39sf010_device : public intelfsh8_device
+{
+public:
+ sst_39sf010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class sst_39sf040_device : public intelfsh8_device
+{
+public:
+ sst_39sf040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
class sst_39vf020_device : public intelfsh8_device
{
public:
@@ -275,7 +277,19 @@ public:
tms_29f040_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
+class cat28f020_device : public intelfsh8_device
+{
+public:
+ cat28f020_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
// 16-bit variants
+class fujitsu_29f160te_16bit_device : public intelfsh16_device
+{
+public:
+ fujitsu_29f160te_16bit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
class sharp_lh28f400_device : public intelfsh16_device
{
public:
@@ -300,6 +314,12 @@ public:
intel_te28f320_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
+class spansion_s29gl064s_device : public intelfsh16_device
+{
+public:
+ spansion_s29gl064s_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
class intel_e28f400b_device : public intelfsh16_device
{
public:
@@ -324,6 +344,12 @@ public:
intel_28f320j5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
+class intel_28f640j5_device : public intelfsh16_device
+{
+public:
+ intel_28f640j5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
class sst_39vf400a_device : public intelfsh16_device
{
public:
@@ -336,42 +362,86 @@ public:
atmel_49f4096_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);
+};
+
+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 amd_29f800b_16bit_device : public intelfsh16_device
+{
+public:
+ amd_29f800b_16bit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class sharp_lh28f016s_16bit_device : public intelfsh16_device
+{
+public:
+ sharp_lh28f016s_16bit_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class macronix_29f1610mc_16bit_device : public intelfsh16_device
+{
+public:
+ macronix_29f1610mc_16bit_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)
-DECLARE_DEVICE_TYPE(SHARP_LH28F016S, sharp_lh28f016s_device)
-DECLARE_DEVICE_TYPE(SHARP_LH28F016S_16BIT, sharp_lh28f016s_16bit_device)
-DECLARE_DEVICE_TYPE(ATMEL_29C010, atmel_29c010_device)
-DECLARE_DEVICE_TYPE(AMD_29F010, amd_29f010_device)
-DECLARE_DEVICE_TYPE(AMD_29F040, amd_29f040_device)
-DECLARE_DEVICE_TYPE(AMD_29F080, amd_29f080_device)
-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_29F016A, fujitsu_29f016a_device)
-DECLARE_DEVICE_TYPE(FUJITSU_29DL16X, fujitsu_29dl16x_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)
-DECLARE_DEVICE_TYPE(TMS_29F040, tms_29f040_device)
-
-DECLARE_DEVICE_TYPE(PANASONIC_MN63F805MNP, panasonic_mn63f805mnp_device)
-DECLARE_DEVICE_TYPE(SANYO_LE26FV10N1TS, sanyo_le26fv10n1ts_device)
-DECLARE_DEVICE_TYPE(SST_28SF040, sst_28sf040_device)
-DECLARE_DEVICE_TYPE(SST_39VF020, sst_39vf020_device)
-DECLARE_DEVICE_TYPE(SST_49LF020, sst_49lf020_device)
-
-DECLARE_DEVICE_TYPE(SHARP_LH28F400, sharp_lh28f400_device)
-DECLARE_DEVICE_TYPE(INTEL_E28F008SA, intel_e28f008sa_device)
-DECLARE_DEVICE_TYPE(INTEL_TE28F160, intel_te28f160_device)
-DECLARE_DEVICE_TYPE(SHARP_LH28F160S3, sharp_lh28f160s3_device)
-DECLARE_DEVICE_TYPE(INTEL_TE28F320, intel_te28f320_device)
-DECLARE_DEVICE_TYPE(SHARP_LH28F320BF, sharp_lh28f320bf_device)
-DECLARE_DEVICE_TYPE(INTEL_28F320J3D, intel_28f320j3d_device)
-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(INTEL_28F016S5, intel_28f016s5_device)
+DECLARE_DEVICE_TYPE(SHARP_LH28F016S, sharp_lh28f016s_device)
+DECLARE_DEVICE_TYPE(SHARP_LH28F016S_16BIT, sharp_lh28f016s_16bit_device)
+DECLARE_DEVICE_TYPE(ATMEL_29C010, atmel_29c010_device)
+DECLARE_DEVICE_TYPE(ATMEL_29C020, atmel_29c020_device)
+DECLARE_DEVICE_TYPE(AMD_29F010, amd_29f010_device)
+DECLARE_DEVICE_TYPE(AMD_29F040, amd_29f040_device)
+DECLARE_DEVICE_TYPE(AMD_29F080, amd_29f080_device)
+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_29F160TE, fujitsu_29f160te_device)
+DECLARE_DEVICE_TYPE(FUJITSU_29F160TE_16BIT, fujitsu_29f160te_16bit_device)
+DECLARE_DEVICE_TYPE(FUJITSU_29F016A, fujitsu_29f016a_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_29F008TC, macronix_29f008tc_device)
+DECLARE_DEVICE_TYPE(MACRONIX_29F1610MC, macronix_29f1610mc_device)
+DECLARE_DEVICE_TYPE(MACRONIX_29F1610MC_16BIT,macronix_29f1610mc_16bit_device)
+DECLARE_DEVICE_TYPE(MACRONIX_29L001MC, macronix_29l001mc_device)
+DECLARE_DEVICE_TYPE(MACRONIX_29LV160TMC, macronix_29lv160tmc_device)
+DECLARE_DEVICE_TYPE(ST_M29W640GB, st_m29w640gb_device)
+DECLARE_DEVICE_TYPE(TMS_29F040, tms_29f040_device)
+
+DECLARE_DEVICE_TYPE(PANASONIC_MN63F805MNP, panasonic_mn63f805mnp_device)
+DECLARE_DEVICE_TYPE(SANYO_LE26FV10N1TS, sanyo_le26fv10n1ts_device)
+DECLARE_DEVICE_TYPE(SST_28SF040, sst_28sf040_device)
+DECLARE_DEVICE_TYPE(SST_39SF010, sst_39sf010_device)
+DECLARE_DEVICE_TYPE(SST_39SF040, sst_39sf040_device)
+DECLARE_DEVICE_TYPE(SST_39VF020, sst_39vf020_device)
+DECLARE_DEVICE_TYPE(SST_49LF020, sst_49lf020_device)
+
+DECLARE_DEVICE_TYPE(SHARP_LH28F400, sharp_lh28f400_device)
+DECLARE_DEVICE_TYPE(INTEL_E28F008SA, intel_e28f008sa_device)
+DECLARE_DEVICE_TYPE(INTEL_TE28F160, intel_te28f160_device)
+DECLARE_DEVICE_TYPE(SHARP_LH28F160S3, sharp_lh28f160s3_device)
+DECLARE_DEVICE_TYPE(INTEL_TE28F320, intel_te28f320_device)
+DECLARE_DEVICE_TYPE(SPANSION_S29GL064S, spansion_s29gl064s_device)
+DECLARE_DEVICE_TYPE(SHARP_LH28F320BF, sharp_lh28f320bf_device)
+DECLARE_DEVICE_TYPE(INTEL_28F320J3D, intel_28f320j3d_device)
+DECLARE_DEVICE_TYPE(INTEL_28F320J5, intel_28f320j5_device)
+DECLARE_DEVICE_TYPE(INTEL_28F640J5, intel_28f640j5_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