mirror of
https://github.com/MoleskiCoder/EightBit.git
synced 2026-04-26 21:18:36 +00:00
Simplifications of json usage. No slow down.
Signed-off-by: Adrian Conlon <adrian.conlon@gmail.com>
This commit is contained in:
1 parent
393fab2bbc
commit
e63ace34e9
8 files changed
+16
-18
No files matched your search
@@ -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());
|
||||||
|
|||||||
@@ -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,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) {}
|
||||||
@@ -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,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) {}
|
||||||
@@ -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,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) {}
|
||||||
@@ -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")); }
|
||||||
|
|||||||
Reference in new issue
Block a user