summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2011-10-10 20:37:17 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2011-10-10 20:37:17 +0000
commit7819df93f22c6e9e70e40572624a5f17a12576fc (patch)
tree8ac2ca0b63d4369c6fac002820312b854be8f46f
parent2e9c7aef124ce6d598ffd478d715f4df0592285b (diff)
Updated intelfsh.c in order to support AMD 29F080 chip [Sandro Ronco]
-rw-r--r--src/emu/machine/intelfsh.c33
-rw-r--r--src/emu/machine/intelfsh.h11
2 files changed, 44 insertions, 0 deletions
diff --git a/src/emu/machine/intelfsh.c b/src/emu/machine/intelfsh.c
index 56ae07c9df9..97f09b25d6e 100644
--- a/src/emu/machine/intelfsh.c
+++ b/src/emu/machine/intelfsh.c
@@ -47,6 +47,7 @@ enum
// device type definition
const device_type INTEL_28F016S5 = &device_creator<intel_28f016s5_device>;
const device_type SHARP_LH28F016S = &device_creator<sharp_lh28f016s_device>;
+const device_type AMD_29F080 = &device_creator<amd_29f080_device>;
const device_type FUJITSU_29F016A = &device_creator<fujitsu_29f016a_device>;
const device_type FUJITSU_29DL16X = &device_creator<fujitsu_29dl16x_device>;
const device_type INTEL_E28F400 = &device_creator<intel_e28f400_device>;
@@ -127,6 +128,13 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type
m_device_id = 0xaa;
map = ADDRESS_MAP_NAME( memory_map8_16Mb );
break;
+ case FLASH_AMD_29F080:
+ m_bits = 8;
+ m_size = 0x100000;
+ m_maker_id = 0x01;
+ m_device_id = 0xd5;
+ map = ADDRESS_MAP_NAME( memory_map8_8Mb );
+ break;
case FLASH_SHARP_LH28F400:
case FLASH_INTEL_E28F400:
m_bits = 16;
@@ -222,6 +230,9 @@ fujitsu_29dl16x_device::fujitsu_29dl16x_device(const machine_config &mconfig, co
sharp_lh28f016s_device::sharp_lh28f016s_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: intelfsh8_device(mconfig, SHARP_LH28F016S, "Sharp LH28F016S Flash", tag, owner, clock, FLASH_SHARP_LH28F016S) { }
+amd_29f080_device::amd_29f080_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh8_device(mconfig, AMD_29F080, "AMD 29F080 Flash", tag, owner, clock, FLASH_AMD_29F080) { }
+
intel_e28f008sa_device::intel_e28f008sa_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: intelfsh8_device(mconfig, INTEL_E28F008SA, "Intel E28F008SA Flash", tag, owner, clock, FLASH_INTEL_E28F008SA) { }
@@ -532,6 +543,10 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
{
m_flash_mode = FM_READAMDID2;
}
+ else if( ( address & 0x7ff ) == 0x2aa && ( data & 0xff ) == 0x55 && m_type == FLASH_AMD_29F080 )
+ {
+ m_flash_mode = FM_READAMDID2;
+ }
else
{
logerror( "unexpected %08x=%02x in FM_READAMDID1\n", address, data & 0xff );
@@ -591,6 +606,24 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
{
m_flash_mode = FM_BANKSELECT;
}
+
+ // for AMD 29F080 address bits A11-A19 don't care
+ else if(( address & 0x7ff ) == 0x555 && ( data & 0xff ) == 0x80 && m_type == FLASH_AMD_29F080 )
+ {
+ m_flash_mode = FM_ERASEAMD1;
+ }
+ else if(( address & 0x7ff ) == 0x555 && ( data & 0xff ) == 0x90 && m_type == FLASH_AMD_29F080 )
+ {
+ m_flash_mode = FM_READAMDID3;
+ }
+ else if(( address & 0x7ff ) == 0x555 && ( data & 0xff ) == 0xa0 && m_type == FLASH_AMD_29F080 )
+ {
+ m_flash_mode = FM_BYTEPROGRAM;
+ }
+ else if(( address & 0x7ff ) == 0x555 && ( data & 0xff ) == 0xf0 && m_type == FLASH_AMD_29F080 )
+ {
+ m_flash_mode = FM_NORMAL;
+ }
else
{
logerror( "unexpected %08x=%02x in FM_READAMDID2\n", address, data & 0xff );
diff --git a/src/emu/machine/intelfsh.h b/src/emu/machine/intelfsh.h
index c913f0dcf87..133bf429578 100644
--- a/src/emu/machine/intelfsh.h
+++ b/src/emu/machine/intelfsh.h
@@ -16,6 +16,9 @@
#define MCFG_SHARP_LH28F016S_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, SHARP_LH28F016S, 0)
+#define MCFG_AMD_29F080_ADD(_tag) \
+ MCFG_DEVICE_ADD(_tag, AMD_29F080, 0)
+
#define MCFG_FUJITSU_29F016A_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, FUJITSU_29F016A, 0)
@@ -68,6 +71,7 @@ public:
FLASH_INTEL_28F016S5 = 0x0800,
FLASH_FUJITSU_29F016A,
FLASH_FUJITSU_29DL16X,
+ FLASH_AMD_29F080,
FLASH_SHARP_LH28F016S,
FLASH_INTEL_E28F008SA,
FLASH_MACRONIX_29L001MC,
@@ -178,6 +182,12 @@ public:
fujitsu_29dl16x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
+class amd_29f080_device : public intelfsh8_device
+{
+public:
+ amd_29f080_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
class sharp_lh28f016s_device : public intelfsh8_device
{
public:
@@ -239,6 +249,7 @@ public:
// device type definition
extern const device_type INTEL_28F016S5;
extern const device_type SHARP_LH28F016S;
+extern const device_type AMD_29F080;
extern const device_type FUJITSU_29F016A;
extern const device_type FUJITSU_29DL16X;
extern const device_type INTEL_E28F400;