30 :
MSXRom(config, std::move(rom_))
31 , ram(config,
getName() +
" RAM",
"ROM Hunter Mk 2 RAM", 0x40000)
43 unsigned ROMHunterMk2::getRamAddr(
unsigned addr)
const
45 unsigned page = (addr >> 13) - 2;
47 unsigned bank = bankRegs[page];
48 return (bank * 0x2000) + (addr & 0x1FFF);
54 if ((addr < 0x4000) || (0xC000 <= addr)) {
59 if (((configReg & 0b1000) == 0) && (addr < 0x8000)) {
60 return &
rom[addr & 0x1FFF];
62 return &ram[getRamAddr(addr)];
86 if ((addr < 0x4000) || (0xC000 <= addr)) {
91 unsigned ramAddr = getRamAddr(addr);
94 if ((configReg & 0b10) == 0) {
96 switch (configReg & 0b101) {
106 const byte maskedValue = value & 0xF;
107 if ((0x6000 <= addr) && (addr < 0x6800)) {
108 bankRegs[0] = 2 * maskedValue + 0;
109 bankRegs[1] = 2 * maskedValue + 1;
112 if ((0x7000 <= addr) && (addr < 0x7800)) {
113 bankRegs[2] = 2 * maskedValue + 0;
114 bankRegs[3] = 2 * maskedValue + 1;
121 if ((0x6000 <= addr) && (addr < 0x8000)) {
122 byte bank = (addr >> 11) & 0x03;
123 bankRegs[bank] = value & 0x1F;
129 if ((0x6000 <= addr) && (addr < 0xC000)) {
130 unsigned bank = (addr >> 13) - 2;
131 bankRegs[bank] = value & 0x1F;
142 if ((configReg & 0b1000) == 0) {
145 if ((addr >= 0x8000) || ((configReg & 0b10) == 0b10)) {
146 ram[ramAddr] = value;
156 template<
typename Archive>
160 ar.template serializeBase<MSXDevice>(*
this);
161 ar.serialize(
"ram", ram,
162 "configReg", configReg,
163 "bankRegs", bankRegs);
void invalidateDeviceRCache()
static byte unmappedRead[0x10000]
EmuTime::param getCurrentTime() const
byte * getWriteCacheLine(word address) const override
Test that the memory in the interval [start, start + CacheLine::SIZE) is cacheable for writing.
ROMHunterMk2(const DeviceConfig &config, Rom &&rom)
const byte * getReadCacheLine(word address) const override
Test that the memory in the interval [start, start + CacheLine::SIZE) is cacheable for reading.
void serialize(Archive &ar, unsigned version)
byte peekMem(word address, EmuTime::param time) const override
Read a byte from a given memory location.
void writeMem(word address, byte value, EmuTime::param time) override
Write a given byte to a given location at a certain time to this device.
byte readMem(word address, EmuTime::param time) override
Read a byte from a location at a certain time from this device.
void reset(EmuTime::param time) override
This method is called on reset.
std::string getName(KeyCode keyCode)
Translate key code to key name.
This file implemented 3 utility functions:
REGISTER_MSXDEVICE(ChakkariCopy, "ChakkariCopy")
uint16_t word
16 bit unsigned integer
void fill(ForwardRange &&range, const T &value)
#define INSTANTIATE_SERIALIZE_METHODS(CLASS)