EightBit/M6502/HarteTest_6502/TestRunner.h
Adrian Conlon 6a59bfbcd8 First stab at using the Harte randomised processor tests. Some failures detected in the M6502 run.
Signed-off-by: Adrian Conlon <adrian.conlon@gmail.com>
2021-10-10 21:26:30 +01:00

51 lines
1.3 KiB
C++

#pragma once
#include <Bus.h>
#include <Ram.h>
#include <mos6502.h>
#include "test_t.h"
class TestRunner final : public EightBit::Bus {
private:
EightBit::Ram m_ram = 0x10000;
EightBit::MOS6502 m_cpu = { *this };
const test_t& m_test;
test_t::events_t m_actualEvents;
void initialiseState();
void verifyState();
void raise(std::string what, uint16_t expected, uint16_t actual);
void raise(std::string what, uint8_t expected, uint8_t actual);
void raise(std::string what, test_t::action expected, test_t::action actual);
template<class T>
bool check(std::string what, T expected, T actual) {
const auto success = actual == expected;
if (!success)
raise(what, expected, actual);
return success;
}
void addActualEvent(test_t::action action, uint16_t address, uint8_t value);
protected:
virtual EightBit::MemoryMapping mapping(uint16_t address) noexcept final;
public:
TestRunner(const test_t& test);
virtual void raisePOWER() final;
virtual void lowerPOWER() final;
virtual void initialise() final;
constexpr auto& RAM() noexcept { return m_ram; }
constexpr auto& CPU() noexcept { return m_cpu; }
constexpr const auto& test() const noexcept { return m_test; }
void run();
};