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
|
if (a == 0172516) { // MMR3
|
||||||
D(fprintf(stderr, "write set MMR3: %o\n", value);)
|
D(fprintf(stderr, "write set MMR3: %o\n", value);)
|
||||||
MMR3 = value;
|
MMR3 = value & 067;
|
||||||
return MMR3;
|
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;
|
m_offset += a & 8191;
|
||||||
|
|
||||||
if (word_mode)
|
if (word_mode)
|
||||||
m -> writeByte(m_offset, value);
|
m->writeByte(m_offset, value);
|
||||||
else
|
else
|
||||||
m -> writeWord(m_offset, value);
|
m->writeWord(m_offset, value);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -587,3 +587,13 @@ uint16_t bus::writeWord(const uint16_t a, const uint16_t value)
|
||||||
{
|
{
|
||||||
return write(a, false, 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 readByte(const uint16_t a) { return read(a, true); }
|
||||||
uint16_t readWord(const uint16_t a);
|
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);
|
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); }
|
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);
|
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; }
|
void setMMR2(const uint16_t value) { MMR2 = value; }
|
||||||
|
|
||||||
uint16_t get_switch_register() const { return switch_register; }
|
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
|
uint32_t p = reclen; // FIXME
|
||||||
for(size_t i=0; i<reclen; i++)
|
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 defined(ESP32)
|
||||||
if (!fh.seek(diskoffb))
|
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++) {
|
for(uint32_t i=0; i<cur; i++) {
|
||||||
if (p < 0160000)
|
if (p < 0160000)
|
||||||
b -> writeByte(p, xfer_buffer[i]);
|
b -> writeUnibusByte(p, xfer_buffer[i]);
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue