diff options
Diffstat (limited to 'src/emu/machine/intelfsh.c')
-rw-r--r-- | src/emu/machine/intelfsh.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/emu/machine/intelfsh.c b/src/emu/machine/intelfsh.c index fa5a6abfdbd..b7e6e00601e 100644 --- a/src/emu/machine/intelfsh.c +++ b/src/emu/machine/intelfsh.c @@ -93,6 +93,7 @@ const device_type FUJITSU_29DL16X = &device_creator<fujitsu_29dl16x_device>; const device_type INTEL_E28F400B = &device_creator<intel_e28f400b_device>; const device_type MACRONIX_29L001MC = &device_creator<macronix_29l001mc_device>; const device_type MACRONIX_29LV160TMC = &device_creator<macronix_29lv160tmc_device>; +const device_type TMS_29F040 = &device_creator<tms_29f040_device>; const device_type PANASONIC_MN63F805MNP = &device_creator<panasonic_mn63f805mnp_device>; const device_type SANYO_LE26FV10N1TS = &device_creator<sanyo_le26fv10n1ts_device>; @@ -166,6 +167,7 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_type(variant), m_size(0), m_bits(8), + m_addrmask(0), m_device_id(0), m_maker_id(0), m_sector_is_4k(false), @@ -215,6 +217,7 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type case FLASH_AMD_29F080: m_bits = 8; m_size = 0x100000; + m_addrmask = 0x7ff; m_maker_id = MFG_AMD; m_device_id = 0xd5; map = ADDRESS_MAP_NAME( memory_map8_8Mb ); @@ -369,6 +372,14 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_device_id = 0x04; map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; + case FLASH_TMS_29F040: + m_bits = 8; + m_addrmask = 0x7fff; + m_size = 0x80000; + m_maker_id = MFG_AMD; + m_device_id = 0xa4; + map = ADDRESS_MAP_NAME( memory_map8_4Mb ); + break; } int addrbits; @@ -465,6 +476,10 @@ intel_28f320j5_device::intel_28f320j5_device(const machine_config &mconfig, cons sst_39vf400a_device::sst_39vf400a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : intelfsh16_device(mconfig, SST_39VF400A, "SST 39VF400A Flash", tag, owner, clock, FLASH_SST_39VF400A, "sst_39vf400a", __FILE__) { } + +tms_29f040_device::tms_29f040_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : intelfsh8_device(mconfig, TMS_29F040, "Texas Instruments 29F040 Flash", tag, owner, clock, FLASH_TMS_29F040, "tms_29f040", __FILE__) { } + //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -761,7 +776,8 @@ 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 ) + // for AMD 29F080 address bits A11-A19 don't care, for TMS 29F040 address bits A15-A18 don't care + else if( ( address & m_addrmask ) == ( 0xaaaa & m_addrmask ) && ( data & 0xff ) == 0x55 && m_addrmask ) { m_flash_mode = FM_READAMDID2; } @@ -833,20 +849,20 @@ 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 ) + // for AMD 29F080 address bits A11-A19 don't care, for TMS 29F040 address bits A15-A18 don't care + else if(( address & m_addrmask ) == ( 0x5555 & m_addrmask ) && ( data & 0xff ) == 0x80 && m_addrmask ) { m_flash_mode = FM_ERASEAMD1; } - else if(( address & 0x7ff ) == 0x555 && ( data & 0xff ) == 0x90 && m_type == FLASH_AMD_29F080 ) + else if(( address & m_addrmask ) == ( 0x5555 & m_addrmask ) && ( data & 0xff ) == 0x90 && m_addrmask ) { m_flash_mode = FM_READAMDID3; } - else if(( address & 0x7ff ) == 0x555 && ( data & 0xff ) == 0xa0 && m_type == FLASH_AMD_29F080 ) + else if(( address & m_addrmask ) == ( 0x5555 & m_addrmask ) && ( data & 0xff ) == 0xa0 && m_addrmask ) { m_flash_mode = FM_BYTEPROGRAM; } - else if(( address & 0x7ff ) == 0x555 && ( data & 0xff ) == 0xf0 && m_type == FLASH_AMD_29F080 ) + else if(( address & m_addrmask ) == ( 0x5555 & m_addrmask ) && ( data & 0xff ) == 0xf0 && m_addrmask ) { m_flash_mode = FM_NORMAL; } |