Add Processor::pokeWord to define an endian specific 16-bit word write.

Signed-off-by: Adrian Conlon <Adrian.conlon@gmail.com>
This commit is contained in:
Adrian Conlon 2018-10-14 10:05:43 +01:00
parent 9445e7d1c4
commit 7e527ff093
5 changed files with 15 additions and 2 deletions

View File

@ -8,6 +8,7 @@ namespace EightBit {
class BigEndianProcessor : public Processor {
public:
virtual register16_t peekWord(register16_t address) final;
virtual void pokeWord(register16_t address, register16_t value) final;
protected:
BigEndianProcessor(Bus& memory);

View File

@ -8,6 +8,7 @@ namespace EightBit {
class LittleEndianProcessor : public Processor {
public:
virtual register16_t peekWord(register16_t address) final;
virtual void pokeWord(register16_t address, register16_t value) final;
protected:
LittleEndianProcessor(Bus& memory);

View File

@ -34,6 +34,7 @@ namespace EightBit {
int cycles() const { return m_cycles; }
virtual register16_t peekWord(register16_t address) = 0;
virtual void pokeWord(register16_t address, register16_t value) = 0;
protected:
Processor(Bus& memory);

View File

@ -27,7 +27,7 @@ EightBit::register16_t EightBit::BigEndianProcessor::getWordPaged(const uint8_t
void EightBit::BigEndianProcessor::setWordPaged(const uint8_t page, const uint8_t offset, const register16_t value) {
setBytePaged(page, offset, value.high);
++BUS().ADDRESS().low;
BUS().read(value.low);
BUS().write(value.low);
}
EightBit::register16_t EightBit::BigEndianProcessor::fetchWord() {
@ -52,3 +52,8 @@ EightBit::register16_t EightBit::BigEndianProcessor::peekWord(const register16_t
const auto low = BUS().peek(address + 1);
return register16_t(low, high);
}
void EightBit::BigEndianProcessor::pokeWord(const register16_t address, const register16_t value) {
BUS().poke(address, value.high);
BUS().poke(address + 1, value.low);
}

View File

@ -27,7 +27,7 @@ EightBit::register16_t EightBit::LittleEndianProcessor::getWordPaged(const uint8
void EightBit::LittleEndianProcessor::setWordPaged(const uint8_t page, const uint8_t offset, const register16_t value) {
setBytePaged(page, offset, value.low);
++BUS().ADDRESS().low;
BUS().read(value.high);
BUS().write(value.high);
}
EightBit::register16_t EightBit::LittleEndianProcessor::fetchWord() {
@ -52,3 +52,8 @@ EightBit::register16_t EightBit::LittleEndianProcessor::peekWord(const register1
const auto high = BUS().peek(address + 1);
return register16_t(low, high);
}
void EightBit::LittleEndianProcessor::pokeWord(const register16_t address, const register16_t value) {
BUS().poke(address, value.low);
BUS().poke(address + 1, value.high);
}