Merge branch 'master' of ssh://172.29.0.8/home/folkert/git/PDP-11

This commit is contained in:
Folkert van Heusden 2024-06-21 13:54:06 +02:00
commit 52e1224e7d
Signed by untrusted user who does not match committer: folkert
GPG key ID: 30190E8C1F28D8AE
9 changed files with 31 additions and 27 deletions

View file

@ -25,7 +25,7 @@ std::optional<std::string> breakpoint_memory::is_triggered() const
if (is_virtual)
v = b->read(addr, word_mode, rm_cur, true, i_space);
else
v = b->readPhysical(addr);
v = b->read_physical(addr);
auto it = values.find(v);
if (it == values.end())

20
bus.cpp
View file

@ -827,7 +827,7 @@ write_rc_t bus::write(const uint16_t addr_in, const word_mode_t word_mode, uint1
return { false };
}
void bus::writePhysical(const uint32_t a, const uint16_t value)
void bus::write_physical(const uint32_t a, const uint16_t value)
{
TRACE("physicalWRITE %06o to %o", value, a);
@ -841,7 +841,7 @@ void bus::writePhysical(const uint32_t a, const uint16_t value)
}
}
uint16_t bus::readPhysical(const uint32_t a)
uint16_t bus::read_physical(const uint32_t a)
{
if (a >= m->get_memory_size()) {
TRACE("physicalREAD from %o: trap 004", a);
@ -871,15 +871,19 @@ void bus::write_word(const uint16_t a, const uint16_t value, const d_i_space_t s
write(a, wm_word, value, rm_cur, s);
}
uint8_t bus::readUnibusByte(const uint32_t a)
uint8_t bus::read_unibus_byte(const uint32_t a)
{
uint8_t v = m->read_byte(a);
TRACE("readUnibusByte[%08o]=%03o", a, v);
uint8_t v = 0;
if (a < m->get_memory_size())
v = m->read_byte(a);
TRACE("read_unibus_byte[%08o]=%03o", a, v);
return v;
}
void bus::writeUnibusByte(const uint32_t a, const uint8_t v)
void bus::write_unibus_byte(const uint32_t a, const uint8_t v)
{
TRACE("writeUnibusByte[%08o]=%03o", a, v);
m->write_byte(a, v);
TRACE("write_unibus_byte[%08o]=%03o", a, v);
if (a < m->get_memory_size())
m->write_byte(a, v);
}

8
bus.h
View file

@ -127,15 +127,15 @@ public:
uint16_t read_word(const uint16_t a, const d_i_space_t s);
uint16_t read_word(const uint16_t a) override { return read_word(a, i_space); }
uint16_t peek_word(const uint16_t a);
uint8_t readUnibusByte(const uint32_t a);
uint16_t readPhysical(const uint32_t a);
uint8_t read_unibus_byte(const uint32_t a);
uint16_t read_physical(const uint32_t a);
write_rc_t write(const uint16_t a, const word_mode_t word_mode, uint16_t value, const rm_selection_t mode_selection, const d_i_space_t s = i_space);
void writeUnibusByte(const uint32_t a, const uint8_t value);
void write_unibus_byte(const uint32_t a, const uint8_t value);
void write_byte(const uint16_t a, const uint8_t value) override { write(a, wm_byte, value, rm_cur); }
void write_word(const uint16_t a, const uint16_t value, const d_i_space_t s);
void write_word(const uint16_t a, const uint16_t value) override { write_word(a, value, i_space); }
void writePhysical(const uint32_t a, const uint16_t value);
void write_physical(const uint32_t a, const uint16_t value);
bool is_psw(const uint16_t addr, const int run_mode, const d_i_space_t space) const;
};

View file

@ -933,7 +933,7 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto
for(int i=0; i<n; i++) {
uint32_t cur_addr = addr + i * 2;
int val = parts[2] == "v" ? b->read(cur_addr, wm_word, rm_cur, true) : b->readPhysical(cur_addr);
int val = parts[2] == "v" ? b->read(cur_addr, wm_word, rm_cur, true) : b->read_physical(cur_addr);
if (val == -1) {
cnsl->put_string_lf(format("Can't read from %06o\n", cur_addr));

View file

@ -84,7 +84,7 @@ int run_cpu_validation(const std::string & filename)
const char *key = nullptr;
json_t *value = nullptr;
json_object_foreach(memory_before, key, value) {
b->writePhysical(atoi(key), json_integer_value(value));
b->write_physical(atoi(key), json_integer_value(value));
}
}
@ -144,7 +144,7 @@ int run_cpu_validation(const std::string & filename)
json_t *value = nullptr;
json_object_foreach(memory_after, key, value) {
int key_v = atoi(key);
uint16_t mem_contains = b->readPhysical(key_v);
uint16_t mem_contains = b->read_physical(key_v);
uint16_t should_be = json_integer_value(value);
if (mem_contains != should_be) {
@ -193,7 +193,7 @@ int run_cpu_validation(const std::string & filename)
json_t *temp = json_array_get(a_sp, i);
uint16_t sp = c->lowlevel_register_sp_get(i);
if (json_integer_value(temp) != sp) {
DOLOG(warning, true, "SP[%d] register mismatch (is: %06o (%d), should be: %06o (%d)) for %06o", i, sp, sp, json_integer_value(temp), json_integer_value(temp), b->readPhysical(start_pc));
DOLOG(warning, true, "SP[%d] register mismatch (is: %06o (%d), should be: %06o (%d)) for %06o", i, sp, sp, json_integer_value(temp), json_integer_value(temp), b->read_physical(start_pc));
err = true;
}
}

View file

@ -26,8 +26,8 @@ public:
static memory *deserialize(const JsonVariantConst j);
uint16_t read_byte(const uint32_t a) const { return m[a]; }
void write_byte(const uint32_t a, const uint16_t v) { if (a < size) m[a] = v; }
void write_byte(const uint32_t a, const uint16_t v) { m[a] = v; }
uint16_t read_word(const uint32_t a) const { return m[a] | (m[a + 1] << 8); }
void write_word(const uint32_t a, const uint16_t v) { if(a < size - 1) { m[a] = v; m[a + 1] = v >> 8; } }
void write_word(const uint32_t a, const uint16_t v) { m[a] = v; m[a + 1] = v >> 8; }
};

View file

@ -173,7 +173,7 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
work_reclen -= cur;
for(size_t i=0; i<cur; i++)
xfer_buffer[i] = b->readUnibusByte(work_memoff++);
xfer_buffer[i] = b->read_unibus_byte(work_memoff++);
if (!fhs.at(device)->write(work_diskoffb, cur, xfer_buffer, 512)) {
DOLOG(ll_error, true, "RK05(%d) write error %s to %u len %u", device, strerror(errno), work_diskoffb, cur);
@ -230,7 +230,7 @@ void rk05::write_word(const uint16_t addr, const uint16_t v)
temp_diskoffb += cur;
for(uint32_t i=0; i<cur; i++) {
b->writeUnibusByte(p++, xfer_buffer[i]);
b->write_unibus_byte(p++, xfer_buffer[i]);
if ((v & 2048) == 0)
update_bus_address(2);

View file

@ -275,8 +275,8 @@ void rl02::write_word(const uint16_t addr, uint16_t v)
for(uint32_t i=0; i<cur;) {
// BA and MPR are increased by 2
xfer_buffer[i++] = b->readUnibusByte(memory_address++);
xfer_buffer[i++] = b->readUnibusByte(memory_address++);
xfer_buffer[i++] = b->read_unibus_byte(memory_address++);
xfer_buffer[i++] = b->read_unibus_byte(memory_address++);
// update_bus_address(memory_address);
mpr[0]++;
@ -343,8 +343,8 @@ void rl02::write_word(const uint16_t addr, uint16_t v)
for(uint32_t i=0; i<cur;) {
// BA and MPR are increased by 2
b->writeUnibusByte(memory_address++, xfer_buffer[i++]);
b->writeUnibusByte(memory_address++, xfer_buffer[i++]);
b->write_unibus_byte(memory_address++, xfer_buffer[i++]);
b->write_unibus_byte(memory_address++, xfer_buffer[i++]);
// update_bus_address(memory_address);

View file

@ -201,13 +201,13 @@ void rp06::write_word(const uint16_t addr, uint16_t v)
}
for(uint32_t i=0; i<cur_n; i++)
b->writeUnibusByte(addr++, xfer_buffer[i]);
b->write_unibus_byte(addr++, xfer_buffer[i]);
}
else {
DOLOG(debug, false, "RP06: writing %u bytes to %u (dec) from %06o (oct)", cur_n, offs, addr);
for(uint32_t i=0; i<cur_n; i++)
xfer_buffer[i] = b->readUnibusByte(addr++);
xfer_buffer[i] = b->read_unibus_byte(addr++);
if (!fhs.at(0)->write(cur_offset, cur_n, xfer_buffer, SECTOR_SIZE)) {
DOLOG(ll_error, true, "RP06 write error %s from %u", strerror(errno), cur_offset);