From d010e3ca2fe3d9bcb521ad13f467032dc4414c22 Mon Sep 17 00:00:00 2001 From: Adrian Conlon Date: Fri, 10 Nov 2017 22:41:50 +0000 Subject: [PATCH] Start incorporating CPP core guidelines (as an experiment!) Signed-off-by: Adrian Conlon --- Z80/inc/Z80.h | 32 +++++++------- Z80/src/Z80.cpp | 18 +------- inc/Bus.h | 86 ++++++++---------------------------- inc/IntelProcessor.h | 2 +- inc/Processor.h | 12 ++--- src/Bus.cpp | 74 +++++++++++++++++++++++++++++++ src/EightBit.vcxproj | 1 + src/EightBit.vcxproj.filters | 3 ++ src/IntelProcessor.cpp | 1 - src/Processor.cpp | 6 +-- 10 files changed, 121 insertions(+), 114 deletions(-) create mode 100644 src/Bus.cpp diff --git a/Z80/inc/Z80.h b/Z80/inc/Z80.h index 0035f52..4773cf2 100644 --- a/Z80/inc/Z80.h +++ b/Z80/inc/Z80.h @@ -98,30 +98,30 @@ namespace EightBit { enum { BC_IDX, DE_IDX, HL_IDX }; std::array, 2> m_registers; - int m_registerSet; + int m_registerSet = 0; std::array m_accumulatorFlags; - int m_accumulatorFlagsSet; + int m_accumulatorFlagsSet = 0; - register16_t m_ix; - register16_t m_iy; + register16_t m_ix = { 0xff, 0xff }; + register16_t m_iy = { 0xff, 0xff }; - refresh_t m_refresh; + refresh_t m_refresh = 0x7f; - uint8_t iv; - int m_interruptMode; - bool m_iff1; - bool m_iff2; + uint8_t iv = 0xff; + int m_interruptMode = 0; + bool m_iff1 = false; + bool m_iff2 = false; - bool m1; + bool m1 = false; - bool m_prefixCB; - bool m_prefixDD; - bool m_prefixED; - bool m_prefixFD; + bool m_prefixCB = false; + bool m_prefixDD = false; + bool m_prefixED = false; + bool m_prefixFD = false; - int8_t m_displacement; - bool m_displaced; + int8_t m_displacement = 0; + bool m_displaced = false; uint16_t displacedAddress() { assert(m_displaced); diff --git a/Z80/src/Z80.cpp b/Z80/src/Z80.cpp index 445b44a..7b231da 100644 --- a/Z80/src/Z80.cpp +++ b/Z80/src/Z80.cpp @@ -5,23 +5,7 @@ EightBit::Z80::Z80(Bus& bus, InputOutput& ports) : IntelProcessor(bus), - m_ports(ports), - m_registerSet(0), - m_accumulatorFlagsSet(0), - m_refresh(0x7f), - iv(0xff), - m_interruptMode(0), - m_iff1(false), - m_iff2(false), - m1(false), - m_prefixCB(false), - m_prefixDD(false), - m_prefixED(false), - m_prefixFD(false), - m_displacement(0), - m_displaced(false) { - IX().word = 0xffff; - IY().word = 0xffff; + m_ports(ports) { } EightBit::register16_t& EightBit::Z80::AF() { diff --git a/inc/Bus.h b/inc/Bus.h index 2101b38..9ea766e 100644 --- a/inc/Bus.h +++ b/inc/Bus.h @@ -8,87 +8,37 @@ namespace EightBit { class Bus { public: - Bus() - : m_temporary(0xff), m_data(nullptr) { - m_address.word = 0xffff; - } + virtual ~Bus() = default; Signal WrittenByte; Signal ReadingByte; - register16_t& ADDRESS() { return m_address; } - uint8_t& DATA() { return *m_data; } + register16_t& ADDRESS(); + uint8_t& DATA(); - uint8_t& placeDATA(uint8_t value) { - m_temporary = value; - m_data = &m_temporary; - return DATA(); - } + uint8_t& placeDATA(uint8_t value); + uint8_t& referenceDATA(uint8_t& value); - uint8_t& referenceDATA(uint8_t& value) { - m_data = &value; - return DATA(); - } + uint8_t peek(uint16_t address); + void poke(uint16_t address, uint8_t value); - uint8_t peek(uint16_t address) { - bool rom; - return reference(address, rom); - } + uint16_t peekWord(uint16_t address); - void poke(uint16_t address, uint8_t value) { - bool rom; - reference(address, rom) = value; - } + uint8_t read(); + uint8_t read(uint16_t offset); + uint8_t read(register16_t address); - uint16_t peekWord(uint16_t address) { - register16_t returned; - returned.low = peek(address); - returned.high = peek(address + 1); - return returned.word; - } - - uint8_t read() { - ReadingByte.fire(ADDRESS().word); - return reference(); - } - - uint8_t read(uint16_t offset) { - ADDRESS().word = offset; - return read(); - } - - uint8_t read(register16_t address) { - ADDRESS() = address; - return read(); - } - - void write(uint8_t value) { - reference() = value; - WrittenByte.fire(ADDRESS().word); - } - - void write(uint16_t offset, uint8_t value) { - ADDRESS().word = offset; - write(value); - } - - void write(register16_t address, uint8_t value) { - ADDRESS() = address; - write(value); - } + void write(uint8_t value); + void write(uint16_t offset, uint8_t value); + void write(register16_t address, uint8_t value); protected: virtual uint8_t& reference(uint16_t address, bool& rom) = 0; - - uint8_t& reference() { - bool rom; - auto& value = reference(ADDRESS().word, rom); - return rom ? placeDATA(value) : referenceDATA(value); - } + uint8_t& reference(); private: - uint8_t m_temporary; // Used to simulate ROM - register16_t m_address; - uint8_t* m_data; + uint8_t* m_data = nullptr; + register16_t m_address { 0xff, 0xff }; + uint8_t m_temporary = 0xff; // Used to simulate ROM }; } \ No newline at end of file diff --git a/inc/IntelProcessor.h b/inc/IntelProcessor.h index d94d56c..85cc663 100644 --- a/inc/IntelProcessor.h +++ b/inc/IntelProcessor.h @@ -179,6 +179,6 @@ namespace EightBit { private: std::array m_decodedOpcodes; - register16_t m_sp; + register16_t m_sp = { 0xff, 0xff }; }; } \ No newline at end of file diff --git a/inc/Processor.h b/inc/Processor.h index 7f0a385..636c108 100644 --- a/inc/Processor.h +++ b/inc/Processor.h @@ -115,7 +115,7 @@ namespace EightBit { virtual void push(uint8_t value) = 0; virtual uint8_t pop() = 0; - void pushWord(const register16_t& value) { + void pushWord(register16_t value) { push(value.high); push(value.low); } @@ -146,10 +146,10 @@ namespace EightBit { private: Bus& m_bus; - int m_cycles; - register16_t m_pc; - register16_t m_memptr; - bool m_halted; - bool m_power; + int m_cycles = 0; + register16_t m_pc = { 0, 0 }; + register16_t m_memptr = { 0, 0 }; + bool m_halted = false; + bool m_power = false; }; } \ No newline at end of file diff --git a/src/Bus.cpp b/src/Bus.cpp new file mode 100644 index 0000000..df2c22f --- /dev/null +++ b/src/Bus.cpp @@ -0,0 +1,74 @@ +#include "stdafx.h" +#include "Bus.h" + +EightBit::register16_t& EightBit::Bus::ADDRESS() { + return m_address; +} + +uint8_t& EightBit::Bus::DATA() { + return *m_data; +} + +uint8_t& EightBit::Bus::placeDATA(uint8_t value) { + m_temporary = value; + m_data = &m_temporary; + return DATA(); +} + +uint8_t& EightBit::Bus::referenceDATA(uint8_t& value) { + m_data = &value; + return DATA(); +} + +uint8_t EightBit::Bus::peek(uint16_t address) { + bool rom; + return reference(address, rom); +} + +void EightBit::Bus::poke(uint16_t address, uint8_t value) { + bool rom; + reference(address, rom) = value; +} + +uint16_t EightBit::Bus::peekWord(uint16_t address) { + register16_t returned; + returned.low = peek(address); + returned.high = peek(address + 1); + return returned.word; +} + +uint8_t EightBit::Bus::read() { + ReadingByte.fire(ADDRESS().word); + return reference(); +} + +uint8_t EightBit::Bus::read(uint16_t offset) { + ADDRESS().word = offset; + return read(); +} + +uint8_t EightBit::Bus::read(register16_t address) { + ADDRESS() = address; + return read(); +} + +void EightBit::Bus::write(uint8_t value) { + reference() = value; + WrittenByte.fire(ADDRESS().word); +} + +void EightBit::Bus::write(uint16_t offset, uint8_t value) { + ADDRESS().word = offset; + write(value); +} + +void EightBit::Bus::write(register16_t address, uint8_t value) { + ADDRESS() = address; + write(value); +} + +uint8_t& EightBit::Bus::reference() { + bool rom; + auto& value = reference(ADDRESS().word, rom); + return rom ? placeDATA(value) : referenceDATA(value); +} \ No newline at end of file diff --git a/src/EightBit.vcxproj b/src/EightBit.vcxproj index 737c496..c58e31e 100644 --- a/src/EightBit.vcxproj +++ b/src/EightBit.vcxproj @@ -152,6 +152,7 @@ + diff --git a/src/EightBit.vcxproj.filters b/src/EightBit.vcxproj.filters index d5a32a2..3bf4ad6 100644 --- a/src/EightBit.vcxproj.filters +++ b/src/EightBit.vcxproj.filters @@ -67,5 +67,8 @@ Source Files + + Source Files + \ No newline at end of file diff --git a/src/IntelProcessor.cpp b/src/IntelProcessor.cpp index bab8160..00bb89a 100644 --- a/src/IntelProcessor.cpp +++ b/src/IntelProcessor.cpp @@ -3,7 +3,6 @@ EightBit::IntelProcessor::IntelProcessor(Bus& bus) : Processor(bus) { - SP().word = Mask16; } void EightBit::IntelProcessor::initialise() { diff --git a/src/Processor.cpp b/src/Processor.cpp index b46f79c..4b3f1ea 100644 --- a/src/Processor.cpp +++ b/src/Processor.cpp @@ -2,11 +2,7 @@ #include "Processor.h" EightBit::Processor::Processor(Bus& bus) -: m_bus(bus), - m_cycles(0), - m_halted(false), - m_power(false) { - PC().word = MEMPTR().word = 0; +: m_bus(bus) { } void EightBit::Processor::reset() {