diff --git a/breakpoint_memory.cpp b/breakpoint_memory.cpp index 4c59e6b..7adfa48 100644 --- a/breakpoint_memory.cpp +++ b/breakpoint_memory.cpp @@ -25,7 +25,7 @@ std::optional 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()) diff --git a/bus.cpp b/bus.cpp index c92e01a..f69becb 100644 --- a/bus.cpp +++ b/bus.cpp @@ -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); } diff --git a/bus.h b/bus.h index c86183d..43cb2f3 100644 --- a/bus.h +++ b/bus.h @@ -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; }; diff --git a/debugger.cpp b/debugger.cpp index a00c629..53058c1 100644 --- a/debugger.cpp +++ b/debugger.cpp @@ -933,7 +933,7 @@ void debugger(console *const cnsl, bus *const b, std::atomic_uint32_t *const sto for(int i=0; iread(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)); diff --git a/main.cpp b/main.cpp index 1685819..e4be40c 100644 --- a/main.cpp +++ b/main.cpp @@ -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; } } diff --git a/memory.h b/memory.h index b7c0081..fab1a9b 100644 --- a/memory.h +++ b/memory.h @@ -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; } }; diff --git a/rk05.cpp b/rk05.cpp index 2ed0d6b..a858229 100644 --- a/rk05.cpp +++ b/rk05.cpp @@ -173,7 +173,7 @@ void rk05::write_word(const uint16_t addr, const uint16_t v) work_reclen -= cur; for(size_t i=0; ireadUnibusByte(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; iwriteUnibusByte(p++, xfer_buffer[i]); + b->write_unibus_byte(p++, xfer_buffer[i]); if ((v & 2048) == 0) update_bus_address(2); diff --git a/rl02.cpp b/rl02.cpp index 8c2c0ef..b5057e9 100644 --- a/rl02.cpp +++ b/rl02.cpp @@ -275,8 +275,8 @@ void rl02::write_word(const uint16_t addr, uint16_t v) for(uint32_t i=0; ireadUnibusByte(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; iwriteUnibusByte(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); diff --git a/rp06.cpp b/rp06.cpp index 3fe5b97..25804e6 100644 --- a/rp06.cpp +++ b/rp06.cpp @@ -201,13 +201,13 @@ void rp06::write_word(const uint16_t addr, uint16_t v) } for(uint32_t i=0; iwriteUnibusByte(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; ireadUnibusByte(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);