mirror of
https://github.com/holub/mame
synced 2025-05-31 10:01:51 +03:00
89 lines
2.6 KiB
C++
89 lines
2.6 KiB
C++
/*
|
|
ATMEL 29040a
|
|
|
|
Michael Zapf
|
|
September 2010: Rewritten as device
|
|
February 2012: Rewritten as class
|
|
*/
|
|
|
|
#ifndef __AT29040__
|
|
#define __AT29040__
|
|
|
|
#include "emu.h"
|
|
|
|
extern const device_type AT29040A;
|
|
|
|
/*
|
|
at29c40a state
|
|
|
|
Command states (CMD_0 is the initial state):
|
|
CMD_0: default state
|
|
CMD_1: state after writing aa to 5555
|
|
CMD_2: state after writing 55 to 2aaa
|
|
|
|
Programming states (s_programming_0 is the initial state):
|
|
PGM_0: default state
|
|
PGM_1: a program and enable/disable lock command has been executed, but programming has not actually started.
|
|
PGM_2: the programming buffer is being written to
|
|
PGM_3: the programming buffer is being burnt to flash ROM
|
|
*/
|
|
enum s_cmd_t
|
|
{
|
|
CMD_0 = 0x0,
|
|
CMD_1 = 0x1,
|
|
CMD_2 = 0x2
|
|
};
|
|
|
|
enum s_pgm_t
|
|
{
|
|
PGM_0 = 0x0,
|
|
PGM_1 = 0x1,
|
|
PGM_2 = 0x2,
|
|
PGM_3 = 0x3
|
|
};
|
|
|
|
class at29040a_device : public device_t, public device_nvram_interface
|
|
{
|
|
public:
|
|
at29040a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
DECLARE_READ8_MEMBER( read );
|
|
DECLARE_WRITE8_MEMBER( write );
|
|
|
|
protected:
|
|
virtual void device_start(void);
|
|
virtual void device_reset(void);
|
|
virtual void device_stop(void);
|
|
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
|
|
|
void nvram_default();
|
|
void nvram_read(emu_file &file);
|
|
void nvram_write(emu_file &file);
|
|
|
|
private:
|
|
void sync_flags(void);
|
|
|
|
UINT8* m_eememory;
|
|
|
|
bool m_lower_bbl; /* set when lower boot block lockout is enabled */
|
|
bool m_higher_bbl; /* set when upper boot block lockout is enabled */
|
|
bool m_sdp; /* set when in software data protect mode */
|
|
|
|
bool m_id_mode; /* set when in chip id mode */
|
|
s_cmd_t m_cmd; /* command state */
|
|
bool m_enabling_bbl; /* set when a boot block lockout command is expecting its parameter */
|
|
bool m_long_sequence; /* set if 0x80 command has just been executed (some command require this prefix) */
|
|
s_pgm_t m_pgm; /* programming state */
|
|
bool m_enabling_sdb; /* set when a sdp enable command is in progress */
|
|
bool m_disabling_sdb; /* set when a sdp disable command is in progress */
|
|
//bool m_dirty; /* set when the memory contents should be set */
|
|
bool m_toggle_bit; // indicates flashing in progress (toggles for each query)
|
|
UINT8* m_programming_buffer;
|
|
int m_programming_last_offset;
|
|
emu_timer* m_programming_timer;
|
|
};
|
|
|
|
#define MCFG_AT29040A_ADD(_tag ) \
|
|
MCFG_DEVICE_ADD(_tag, AT29040A, 0)
|
|
|
|
#endif
|