From 36f0e131354b01842166f9c8b4b1ae08137ce847 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Thu, 20 Jun 2024 07:07:36 +0200 Subject: [PATCH 1/4] writePhysical => write_physical --- bus.cpp | 2 +- bus.h | 2 +- main.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bus.cpp b/bus.cpp index c92e01a..aeca485 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); diff --git a/bus.h b/bus.h index c86183d..a08870a 100644 --- a/bus.h +++ b/bus.h @@ -135,7 +135,7 @@ public: 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/main.cpp b/main.cpp index 1685819..f0c82f6 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)); } } From 9a10510c30a5acd89f6974117100326575b2d29c Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Thu, 20 Jun 2024 07:08:26 +0200 Subject: [PATCH 2/4] readPhysical => read_physical --- breakpoint_memory.cpp | 2 +- bus.cpp | 2 +- bus.h | 2 +- debugger.cpp | 2 +- main.cpp | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) 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 aeca485..02bf6f6 100644 --- a/bus.cpp +++ b/bus.cpp @@ -841,7 +841,7 @@ void bus::write_physical(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); diff --git a/bus.h b/bus.h index a08870a..b097bf9 100644 --- a/bus.h +++ b/bus.h @@ -128,7 +128,7 @@ public: 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); + 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); 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 f0c82f6..e4be40c 100644 --- a/main.cpp +++ b/main.cpp @@ -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; } } From fcff5f83729576969f6f0530ce585a98e4b75989 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Thu, 20 Jun 2024 07:10:14 +0200 Subject: [PATCH 3/4] UnibusByte -> _unibus_byte --- bus.cpp | 8 ++++---- bus.h | 4 ++-- rk05.cpp | 4 ++-- rl02.cpp | 8 ++++---- rp06.cpp | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/bus.cpp b/bus.cpp index 02bf6f6..68a5749 100644 --- a/bus.cpp +++ b/bus.cpp @@ -871,15 +871,15 @@ 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); + 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); + TRACE("write_unibus_byte[%08o]=%03o", a, v); m->write_byte(a, v); } diff --git a/bus.h b/bus.h index b097bf9..43cb2f3 100644 --- a/bus.h +++ b/bus.h @@ -127,11 +127,11 @@ 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); + 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); } 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); From e12030945860e22eb3e039201b8951986e4287b3 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Thu, 20 Jun 2024 07:14:15 +0200 Subject: [PATCH 4/4] duplicate memory size check removed --- bus.cpp | 8 ++++++-- memory.h | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bus.cpp b/bus.cpp index 68a5749..f69becb 100644 --- a/bus.cpp +++ b/bus.cpp @@ -873,7 +873,9 @@ void bus::write_word(const uint16_t a, const uint16_t value, const d_i_space_t s uint8_t bus::read_unibus_byte(const uint32_t a) { - uint8_t v = m->read_byte(a); + 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; } @@ -881,5 +883,7 @@ uint8_t bus::read_unibus_byte(const uint32_t a) void bus::write_unibus_byte(const uint32_t a, const uint8_t v) { TRACE("write_unibus_byte[%08o]=%03o", a, v); - m->write_byte(a, v); + + if (a < m->get_memory_size()) + m->write_byte(a, v); } 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; } };