openMSX
EEPROM_93C46.hh
Go to the documentation of this file.
1#ifndef EEPROM_93C46_HH
2#define EEPROM_93C46_HH
3
4#include "EmuTime.hh"
5#include "SRAM.hh"
6#include <climits>
7#include <string>
8
9namespace openmsx {
10
11class DeviceConfig;
12class XMLElement;
13
15{
16public:
17 static constexpr uint8_t ADDRESS_BITS = 7;
18 static constexpr uint32_t NUM_ADDRESSES = 1 << ADDRESS_BITS;
19 static constexpr uint32_t ADDRESS_MASK = NUM_ADDRESSES - 1;
20 static constexpr uint8_t DATA_BITS = 8; // only 8-bit mode implemented
21
22public:
23 EEPROM_93C46(const XMLElement& xml); // unittest
24 EEPROM_93C46(const std::string& name, const DeviceConfig& config);
25
26 void reset();
27
28 [[nodiscard]] bool read_DO(EmuTime::param time) const;
29 void write_CS (bool value, EmuTime::param time);
30 void write_CLK(bool value, EmuTime::param time);
31 void write_DI (bool value, EmuTime::param time);
32
33 template<typename Archive>
34 void serialize(Archive& ar, unsigned version);
35
36 // for unittest
37 [[nodiscard]] const uint8_t* backdoor() const {
38 return &sram[0];
39 }
40
41private:
42 [[nodiscard]] uint8_t read(unsigned addr);
43 void write(unsigned addr, uint8_t value, EmuTime::param time);
44 void writeAll(uint8_t value, EmuTime::param time);
45 void erase(unsigned addr, EmuTime::param time);
46 void eraseAll(EmuTime::param time);
47
48 [[nodiscard]] bool ready(EmuTime::param time) const;
49 void clockEvent(EmuTime::param time);
50 void execute_command(EmuTime::param time);
51
52public: // for serialize
61
62private:
63 SRAM sram;
64 EmuTime completionTime = EmuTime::zero();
65 EmuTime csTime = EmuTime::zero();
66 State state = IN_RESET;
67 uint16_t shiftRegister = 0;
68 uint8_t bits = 0;
69 uint8_t address = 0;
70 bool pinCS = false;
71 bool pinCLK = false;
72 bool pinDI = false;
73 bool writeProtected = true;
74
75 static constexpr int SHIFT_REG_BITS = sizeof(shiftRegister) * CHAR_BIT;
76};
77
78} // namespace openmsx
79
80#endif
const uint8_t * backdoor() const
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)
void write_CLK(bool value, EmuTime::param time)
bool read_DO(EmuTime::param time) const
void write_DI(bool value, EmuTime::param time)
This file implemented 3 utility functions:
Definition Autofire.cc:9