From f3c694303d901b2d2d7d212dd12f64990e7467ac Mon Sep 17 00:00:00 2001 From: Adrian Conlon <98398945+AdrianConlon@users.noreply.github.com> Date: Fri, 1 Mar 2024 20:06:39 +0000 Subject: [PATCH] Low level processor simplifications. --- inc/BigEndianProcessor.h | 4 ++-- inc/LittleEndianProcessor.h | 4 ++-- inc/Processor.h | 8 ++++++-- src/BigEndianProcessor.cpp | 8 ++++---- src/LittleEndianProcessor.cpp | 8 ++++---- src/Processor.cpp | 10 ++++++++++ 6 files changed, 28 insertions(+), 14 deletions(-) diff --git a/inc/BigEndianProcessor.h b/inc/BigEndianProcessor.h index 67ba314..ddb917c 100644 --- a/inc/BigEndianProcessor.h +++ b/inc/BigEndianProcessor.h @@ -19,8 +19,8 @@ namespace EightBit { [[nodiscard]] register16_t getWord() override; void setWord(register16_t value) override; - [[nodiscard]] register16_t getWordPaged(uint8_t page, uint8_t offset) override; - void setWordPaged(uint8_t page, uint8_t offset, register16_t value) override; + [[nodiscard]] register16_t getWordPaged() override; + void setWordPaged(register16_t value) override; [[nodiscard]] register16_t fetchWord() final; diff --git a/inc/LittleEndianProcessor.h b/inc/LittleEndianProcessor.h index ed8e8f5..bc68936 100644 --- a/inc/LittleEndianProcessor.h +++ b/inc/LittleEndianProcessor.h @@ -19,8 +19,8 @@ namespace EightBit { [[nodiscard]] register16_t getWord() override; void setWord(register16_t value) override; - [[nodiscard]] register16_t getWordPaged(uint8_t page, uint8_t offset) override; - void setWordPaged(uint8_t page, uint8_t offset, register16_t value) override; + [[nodiscard]] register16_t getWordPaged() override; + void setWordPaged(register16_t value) override; [[nodiscard]] register16_t fetchWord() final; diff --git a/inc/Processor.h b/inc/Processor.h index 275e5fc..b684085 100644 --- a/inc/Processor.h +++ b/inc/Processor.h @@ -57,7 +57,9 @@ namespace EightBit { virtual uint8_t memoryRead(); virtual uint8_t busRead(); + uint8_t getBytePaged() { return memoryRead(); } uint8_t getBytePaged(uint8_t page, uint8_t offset); + void setBytePaged(uint8_t value) { memoryWrite(value); } void setBytePaged(uint8_t page, uint8_t offset, uint8_t value); uint8_t fetchByte(); @@ -65,8 +67,10 @@ namespace EightBit { [[nodiscard]] virtual register16_t getWord() = 0; virtual void setWord(register16_t value) = 0; - [[nodiscard]] virtual register16_t getWordPaged(uint8_t page, uint8_t offset) = 0; - virtual void setWordPaged(uint8_t page, uint8_t offset, register16_t value) = 0; + [[nodiscard]] register16_t getWordPaged(uint8_t page, uint8_t offset); + [[nodiscard]] virtual register16_t getWordPaged() = 0; + void setWordPaged(uint8_t page, uint8_t offset, register16_t value); + virtual void setWordPaged(register16_t value) = 0; [[nodiscard]] virtual register16_t fetchWord() = 0; diff --git a/src/BigEndianProcessor.cpp b/src/BigEndianProcessor.cpp index d626656..9e83a83 100644 --- a/src/BigEndianProcessor.cpp +++ b/src/BigEndianProcessor.cpp @@ -17,15 +17,15 @@ void EightBit::BigEndianProcessor::setWord(const register16_t value) { memoryWrite(value.low); } -EightBit::register16_t EightBit::BigEndianProcessor::getWordPaged(const uint8_t page, const uint8_t offset) { - const auto high = getBytePaged(page, offset); +EightBit::register16_t EightBit::BigEndianProcessor::getWordPaged() { + const auto high = getBytePaged(); ++BUS().ADDRESS().low; const auto low = memoryRead(); return { low, high }; } -void EightBit::BigEndianProcessor::setWordPaged(const uint8_t page, const uint8_t offset, const register16_t value) { - setBytePaged(page, offset, value.high); +void EightBit::BigEndianProcessor::setWordPaged(const register16_t value) { + setBytePaged(value.high); ++BUS().ADDRESS().low; memoryWrite(value.low); } diff --git a/src/LittleEndianProcessor.cpp b/src/LittleEndianProcessor.cpp index be3e0ef..2a98e33 100644 --- a/src/LittleEndianProcessor.cpp +++ b/src/LittleEndianProcessor.cpp @@ -20,15 +20,15 @@ void EightBit::LittleEndianProcessor::setWord(const register16_t value) { memoryWrite(value.high); } -EightBit::register16_t EightBit::LittleEndianProcessor::getWordPaged(const uint8_t page, const uint8_t offset) { - const auto low = getBytePaged(page, offset); +EightBit::register16_t EightBit::LittleEndianProcessor::getWordPaged() { + const auto low = getBytePaged(); ++BUS().ADDRESS().low; const auto high = memoryRead(); return { low, high }; } -void EightBit::LittleEndianProcessor::setWordPaged(const uint8_t page, const uint8_t offset, const register16_t value) { - setBytePaged(page, offset, value.low); +void EightBit::LittleEndianProcessor::setWordPaged(register16_t value) { + setBytePaged(value.low); ++BUS().ADDRESS().low; memoryWrite(value.high); } diff --git a/src/Processor.cpp b/src/Processor.cpp index c3743c7..5e240ff 100644 --- a/src/Processor.cpp +++ b/src/Processor.cpp @@ -68,6 +68,16 @@ void EightBit::Processor::setBytePaged(const uint8_t page, const uint8_t offset, memoryWrite(register16_t(offset, page), value); } +EightBit::register16_t EightBit::Processor::getWordPaged(const uint8_t page, const uint8_t offset) { + BUS().ADDRESS() = { offset, page }; + return getWordPaged(); +} + +void EightBit::Processor::setWordPaged(const uint8_t page, const uint8_t offset, const register16_t value) { + BUS().ADDRESS() = { offset, page }; + setWordPaged(value); +} + uint8_t EightBit::Processor::fetchByte() { return memoryRead(PC()++); }