unmapped memory access for rk05

This commit is contained in:
folkert van heusden 2022-03-22 21:32:37 +01:00
parent 86e225215a
commit ba1bcdbe15
3 changed files with 19 additions and 5 deletions

16
bus.cpp
View file

@ -416,7 +416,7 @@ uint16_t bus::write(const uint16_t a, const bool word_mode, uint16_t value, cons
if (a == 0172516) { // MMR3
D(fprintf(stderr, "write set MMR3: %o\n", value);)
MMR3 = value;
MMR3 = value & 067;
return MMR3;
}
@ -571,9 +571,9 @@ uint16_t bus::write(const uint16_t a, const bool word_mode, uint16_t value, cons
m_offset += a & 8191;
if (word_mode)
m -> writeByte(m_offset, value);
m->writeByte(m_offset, value);
else
m -> writeWord(m_offset, value);
m->writeWord(m_offset, value);
return value;
}
@ -587,3 +587,13 @@ uint16_t bus::writeWord(const uint16_t a, const uint16_t value)
{
return write(a, false, value);
}
uint16_t bus::readUnibusByte(const uint16_t a)
{
return m->readByte(a);
}
void bus::writeUnibusByte(const uint16_t a, const uint8_t v)
{
m->writeByte(a, v);
}

4
bus.h
View file

@ -55,10 +55,14 @@ public:
uint16_t readByte(const uint16_t a) { return read(a, true); }
uint16_t readWord(const uint16_t a);
uint16_t readUnibusByte(const uint16_t a);
uint16_t write(const uint16_t a, const bool word_mode, uint16_t value, const bool use_prev=false);
uint8_t writeByte(const uint16_t a, const uint8_t value) { return write(a, true, value); }
uint16_t writeWord(const uint16_t a, const uint16_t value);
void writeUnibusByte(const uint16_t a, const uint8_t value);
void setMMR2(const uint16_t value) { MMR2 = value; }
uint16_t get_switch_register() const { return switch_register; }

View file

@ -178,7 +178,7 @@ void rk05::writeWord(const uint16_t addr, uint16_t v)
uint32_t p = reclen; // FIXME
for(size_t i=0; i<reclen; i++)
xfer_buffer[i] = b -> readByte(memoff + i);
xfer_buffer[i] = b->readUnibusByte(memoff + i);
#if defined(ESP32)
if (!fh.seek(diskoffb))
@ -242,7 +242,7 @@ void rk05::writeWord(const uint16_t addr, uint16_t v)
for(uint32_t i=0; i<cur; i++) {
if (p < 0160000)
b -> writeByte(p, xfer_buffer[i]);
b -> writeUnibusByte(p, xfer_buffer[i]);
p++;
}