diff options
author | 2011-10-10 20:37:17 +0000 | |
---|---|---|
committer | 2011-10-10 20:37:17 +0000 | |
commit | 7819df93f22c6e9e70e40572624a5f17a12576fc (patch) | |
tree | 8ac2ca0b63d4369c6fac002820312b854be8f46f /src/emu | |
parent | 2e9c7aef124ce6d598ffd478d715f4df0592285b (diff) |
Updated intelfsh.c in order to support AMD 29F080 chip [Sandro Ronco]
Diffstat (limited to 'src/emu')
-rw-r--r-- | src/emu/machine/intelfsh.c | 33 | ||||
-rw-r--r-- | src/emu/machine/intelfsh.h | 11 |
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; |