unmapped memory access for rk05
This commit is contained in:
parent
86e225215a
commit
ba1bcdbe15
3 changed files with 19 additions and 5 deletions
16
bus.cpp
16
bus.cpp
|
@ -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
4
bus.h
|
@ -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; }
|
||||
|
|
4
rk05.cpp
4
rk05.cpp
|
@ -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++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue