Simplifications of json usage. No slow down.

Signed-off-by: Adrian Conlon <adrian.conlon@gmail.com>
This commit is contained in:
Adrian Conlon committed 2021-10-21 22:43:16 +01:00
1 parent 393fab2bbc
commit e63ace34e9
8 files changed
+16 -18

No files matched your search

+7 -9
View File
@@ -4,7 +4,7 @@
std::set<uint8_t> TestRunner::m_undocumented_opcodes; std::set<uint8_t> TestRunner::m_undocumented_opcodes;
bool TestRunner::m_undocumented_opcodes_initialised = false; bool TestRunner::m_undocumented_opcodes_initialised = false;
TestRunner::TestRunner(const test_t& test) TestRunner::TestRunner(const test_t test)
: m_test(test) {} : m_test(test) {}
EightBit::MemoryMapping TestRunner::mapping(uint16_t address) noexcept { EightBit::MemoryMapping TestRunner::mapping(uint16_t address) noexcept {
@@ -122,7 +122,7 @@ bool TestRunner::check(std::string what, uint16_t address, uint8_t expected, uin
void TestRunner::initialiseState() { void TestRunner::initialiseState() {
const auto& starting = test().initial_state(); const auto starting = test().initial_state();
CPU().PC().word = starting.pc(); CPU().PC().word = starting.pc();
CPU().S() = starting.s(); CPU().S() = starting.s();
@@ -130,8 +130,7 @@ void TestRunner::initialiseState() {
CPU().X() = starting.x(); CPU().X() = starting.x();
CPU().Y() = starting.y(); CPU().Y() = starting.y();
CPU().P() = starting.p(); CPU().P() = starting.p();
const auto& ram = starting.ram(); for (auto entry : starting.ram()) {
for (auto entry : ram) {
const byte_t byte(entry); const byte_t byte(entry);
RAM().poke(byte.address(), byte.value()); RAM().poke(byte.address(), byte.value());
} }
@@ -139,7 +138,7 @@ void TestRunner::initialiseState() {
bool TestRunner::checkState() { bool TestRunner::checkState() {
const auto& finished = test().final_state(); const auto finished = test().final_state();
const auto& expected_cycles = test().cycles(); const auto& expected_cycles = test().cycles();
const auto& actual_cycles = m_actualCycles; const auto& actual_cycles = m_actualCycles;
@@ -162,9 +161,8 @@ bool TestRunner::checkState() {
const auto y_good = check("Y", finished.y(), CPU().Y()); const auto y_good = check("Y", finished.y(), CPU().Y());
const auto p_good = check("P", finished.p(), CPU().P()); const auto p_good = check("P", finished.p(), CPU().P());
const auto& ram = finished.ram();
bool ram_problem = false; bool ram_problem = false;
for (auto entry : ram) { for (const auto entry : finished.ram()) {
const byte_t byte(entry); const byte_t byte(entry);
const auto ram_good = check("RAM", byte.address(), byte.value(), RAM().peek(byte.address())); const auto ram_good = check("RAM", byte.address(), byte.value(), RAM().peek(byte.address()));
if (!ram_good && !ram_problem) if (!ram_good && !ram_problem)
@@ -193,7 +191,7 @@ void TestRunner::check() {
initialise(); initialise();
raisePOWER(); raisePOWER();
initialiseState(); initialiseState();
const auto pc = CPU().PC(); const auto pc = CPU().PC().word;
const auto start_opcode = peek(pc); const auto start_opcode = peek(pc);
m_cycles = CPU().step(); m_cycles = CPU().step();
lowerPOWER(); lowerPOWER();
@@ -213,7 +211,7 @@ void TestRunner::check() {
if (invalid() && implemented()) { if (invalid() && implemented()) {
disassemble(pc.word); disassemble(pc);
raise("PC", test().final_state().pc(), CPU().PC().word); raise("PC", test().final_state().pc(), CPU().PC().word);
raise("S", test().final_state().s(), CPU().S()); raise("S", test().final_state().s(), CPU().S());
+3 -3
View File
@@ -24,7 +24,7 @@ private:
EightBit::Symbols m_symbols; EightBit::Symbols m_symbols;
EightBit::Disassembly m_disassembler = { *this, m_cpu, m_symbols }; EightBit::Disassembly m_disassembler = { *this, m_cpu, m_symbols };
const test_t& m_test; const test_t m_test;
std::ostringstream m_os; std::ostringstream m_os;
std::vector<std::string> m_messages; std::vector<std::string> m_messages;
@@ -75,7 +75,7 @@ protected:
virtual EightBit::MemoryMapping mapping(uint16_t address) noexcept final; virtual EightBit::MemoryMapping mapping(uint16_t address) noexcept final;
public: public:
TestRunner(const test_t& test); TestRunner(test_t test);
virtual void raisePOWER() final; virtual void raisePOWER() final;
virtual void lowerPOWER() final; virtual void lowerPOWER() final;
@@ -84,7 +84,7 @@ public:
[[nodiscard]] constexpr auto& RAM() noexcept { return m_ram; } [[nodiscard]] constexpr auto& RAM() noexcept { return m_ram; }
[[nodiscard]] constexpr auto& CPU() noexcept { return m_cpu; } [[nodiscard]] constexpr auto& CPU() noexcept { return m_cpu; }
[[nodiscard]] constexpr const auto& test() const noexcept { return m_test; } [[nodiscard]] auto test() const noexcept { return m_test; }
[[nodiscard]] constexpr const auto& messages() const noexcept { return m_messages; } [[nodiscard]] constexpr const auto& messages() const noexcept { return m_messages; }
[[nodiscard]] constexpr auto cycles() const noexcept { return m_cycles; } [[nodiscard]] constexpr auto cycles() const noexcept { return m_cycles; }
+1 -1
View File
@@ -1,5 +1,5 @@
#include "stdafx.h" #include "stdafx.h"
#include "ram_t.h" #include "ram_t.h"
ram_t::ram_t(simdjson::dom::array input) ram_t::ram_t(simdjson::dom::array input) noexcept
: m_raw(input) {} : m_raw(input) {}
+1 -1
View File
@@ -9,7 +9,7 @@ private:
simdjson::dom::array m_raw;; simdjson::dom::array m_raw;;
public: public:
ram_t(simdjson::dom::array input); ram_t(simdjson::dom::array input) noexcept;
[[nodiscard]] auto begin() const noexcept { return m_raw.begin(); } [[nodiscard]] auto begin() const noexcept { return m_raw.begin(); }
[[nodiscard]] auto end() const noexcept { return m_raw.end(); } [[nodiscard]] auto end() const noexcept { return m_raw.end(); }
+1 -1
View File
@@ -1,5 +1,5 @@
#include "stdafx.h" #include "stdafx.h"
#include "state_t.h" #include "state_t.h"
state_t::state_t(const simdjson::dom::element input) state_t::state_t(const simdjson::dom::element input) noexcept
: m_raw(input) {} : m_raw(input) {}
+1 -1
View File
@@ -17,7 +17,7 @@ private:
[[nodiscard]] auto array_at(std::string key) const noexcept { return at(key).get_array(); } [[nodiscard]] auto array_at(std::string key) const noexcept { return at(key).get_array(); }
public: public:
state_t(simdjson::dom::element input); state_t(simdjson::dom::element input) noexcept;
[[nodiscard]] auto pc() const noexcept { return address_at("pc"); } [[nodiscard]] auto pc() const noexcept { return address_at("pc"); }
[[nodiscard]] auto s() const noexcept { return byte_at("s"); } [[nodiscard]] auto s() const noexcept { return byte_at("s"); }
+1 -1
View File
@@ -1,5 +1,5 @@
#include "stdafx.h" #include "stdafx.h"
#include "test_t.h" #include "test_t.h"
test_t::test_t(const simdjson::dom::element input) test_t::test_t(const simdjson::dom::element input) noexcept
: m_raw(input) {} : m_raw(input) {}
+1 -1
View File
@@ -15,7 +15,7 @@ private:
[[nodiscard]] auto array_at(std::string key) const noexcept { return at(key).get_array(); } [[nodiscard]] auto array_at(std::string key) const noexcept { return at(key).get_array(); }
public: public:
test_t(simdjson::dom::element input); test_t(simdjson::dom::element input) noexcept;
[[nodiscard]] auto name() const noexcept { return at("name"); } [[nodiscard]] auto name() const noexcept { return at("name"); }
[[nodiscard]] auto initial_state() const noexcept { return state_t(at("initial")); } [[nodiscard]] auto initial_state() const noexcept { return state_t(at("initial")); }