7 : sram(NUM_ADDRESSES, xml,
SRAM::DontLoadTag{})
12 : sram(name +
" EEPROM", NUM_ADDRESSES, config)
18 completionTime = EmuTime::zero();
20 writeProtected =
true;
26uint8_t EEPROM_93C46::read(
unsigned addr)
31void EEPROM_93C46::write(
unsigned addr, uint8_t value, EmuTime::param time)
35 sram.
write(addr, value);
39void EEPROM_93C46::writeAll(uint8_t value, EmuTime::param time)
48void EEPROM_93C46::erase(
unsigned addr, EmuTime::param time)
50 sram.
write(addr, 255);
54void EEPROM_93C46::eraseAll(EmuTime::param time)
60bool EEPROM_93C46::ready(EmuTime::param time)
const
62 return time >= completionTime;
68 return shiftRegister & (1 << (SHIFT_REG_BITS - 1));
78 if (pinCS == value)
return;
93 if (pinCLK == value)
return;
106void EEPROM_93C46::clockEvent(EmuTime::param time)
115 if (pinDI && ready(time) && (time > csTime)) {
123 shiftRegister = narrow_cast<uint16_t>((shiftRegister << 1) |
int(pinDI));
126 execute_command(time);
132 uint8_t value = read(address);
133 shiftRegister = uint16_t(value << (SHIFT_REG_BITS -
DATA_BITS));
142 shiftRegister = narrow_cast<uint16_t>((shiftRegister << 1) |
int(pinDI));
145 if (writeProtected) {
149 write(address, narrow_cast<uint8_t>(shiftRegister), time);
155 shiftRegister = narrow_cast<uint16_t>((shiftRegister << 1) |
int(pinDI));
158 if (writeProtected) {
162 writeAll(narrow_cast<uint8_t>(shiftRegister), time);
169void EEPROM_93C46::execute_command(EmuTime::param time)
178 writeProtected =
true;
188 if (writeProtected) {
197 writeProtected =
false;
217 if (writeProtected) {
221 erase(address, time);
227static constexpr std::initializer_list<enum_string<EEPROM_93C46::State>> stateInfo = {
237template<
typename Archive>
240 ar.serialize(
"sram", sram,
241 "completionTime", completionTime,
244 "shiftRegister", shiftRegister,
250 "writeProtected", writeProtected);
static constexpr uint32_t ADDRESS_MASK
static constexpr uint8_t ADDRESS_BITS
void write_CS(bool value, EmuTime::param time)
static constexpr uint32_t NUM_ADDRESSES
static constexpr uint8_t DATA_BITS
void serialize(Archive &ar, unsigned version)
EEPROM_93C46(const XMLElement &xml)
void write_CLK(bool value, EmuTime::param time)
bool read_DO(EmuTime::param time) const
void write_DI(bool value, EmuTime::param time)
static constexpr EmuDuration usec(unsigned x)
void write(size_t addr, byte value)
void memset(size_t addr, byte c, size_t size)
This file implemented 3 utility functions:
SERIALIZE_ENUM(CassettePlayer::State, stateInfo)
#define INSTANTIATE_SERIALIZE_METHODS(CLASS)