Simplifications of json usage. No slow down.

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

View File

@ -4,7 +4,7 @@
std::set<uint8_t> TestRunner::m_undocumented_opcodes;
bool TestRunner::m_undocumented_opcodes_initialised = false;
TestRunner::TestRunner(const test_t& test)
TestRunner::TestRunner(const test_t test)
: m_test(test) {}
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() {
const auto& starting = test().initial_state();
const auto starting = test().initial_state();
CPU().PC().word = starting.pc();
CPU().S() = starting.s();
@ -130,8 +130,7 @@ void TestRunner::initialiseState() {
CPU().X() = starting.x();
CPU().Y() = starting.y();
CPU().P() = starting.p();
const auto& ram = starting.ram();
for (auto entry : ram) {
for (auto entry : starting.ram()) {
const byte_t byte(entry);
RAM().poke(byte.address(), byte.value());
}
@ -139,7 +138,7 @@ void TestRunner::initialiseState() {
bool TestRunner::checkState() {
const auto& finished = test().final_state();
const auto finished = test().final_state();
const auto& expected_cycles = test().cycles();
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 p_good = check("P", finished.p(), CPU().P());
const auto& ram = finished.ram();
bool ram_problem = false;
for (auto entry : ram) {
for (const auto entry : finished.ram()) {
const byte_t byte(entry);
const auto ram_good = check("RAM", byte.address(), byte.value(), RAM().peek(byte.address()));
if (!ram_good && !ram_problem)
@ -193,7 +191,7 @@ void TestRunner::check() {
initialise();
raisePOWER();
initialiseState();
const auto pc = CPU().PC();
const auto pc = CPU().PC().word;
const auto start_opcode = peek(pc);
m_cycles = CPU().step();
lowerPOWER();
@ -213,7 +211,7 @@ void TestRunner::check() {
if (invalid() && implemented()) {
disassemble(pc.word);
disassemble(pc);
raise("PC", test().final_state().pc(), CPU().PC().word);
raise("S", test().final_state().s(), CPU().S());

View File

@ -24,7 +24,7 @@ private:
EightBit::Symbols 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::vector<std::string> m_messages;
@ -75,7 +75,7 @@ protected:
virtual EightBit::MemoryMapping mapping(uint16_t address) noexcept final;
public:
TestRunner(const test_t& test);
TestRunner(test_t test);
virtual void raisePOWER() final;
virtual void lowerPOWER() final;
@ -84,7 +84,7 @@ public:
[[nodiscard]] constexpr auto& RAM() noexcept { return m_ram; }
[[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 auto cycles() const noexcept { return m_cycles; }

View File

@ -1,5 +1,5 @@
#include "stdafx.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) {}

View File

@ -9,7 +9,7 @@ private:
simdjson::dom::array m_raw;;
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 end() const noexcept { return m_raw.end(); }

View File

@ -1,5 +1,5 @@
#include "stdafx.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) {}

View File

@ -17,7 +17,7 @@ private:
[[nodiscard]] auto array_at(std::string key) const noexcept { return at(key).get_array(); }
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 s() const noexcept { return byte_at("s"); }

View File

@ -1,5 +1,5 @@
#include "stdafx.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) {}

View File

@ -15,7 +15,7 @@ private:
[[nodiscard]] auto array_at(std::string key) const noexcept { return at(key).get_array(); }
public:
test_t(simdjson::dom::element input);
test_t(simdjson::dom::element input) noexcept;
[[nodiscard]] auto name() const noexcept { return at("name"); }
[[nodiscard]] auto initial_state() const noexcept { return state_t(at("initial")); }