Starting APU instructions implementation

This commit is contained in:
Melefo
2020-02-10 17:50:12 +01:00
parent aeb1e127f3
commit b8a2da54a5
2 changed files with 23 additions and 3 deletions
+16 -2
View File
@@ -5,6 +5,7 @@
#include "APU.hpp" #include "APU.hpp"
#include "../Exceptions/NotImplementedException.hpp" #include "../Exceptions/NotImplementedException.hpp"
#include "../Exceptions/InvalidAddress.hpp" #include "../Exceptions/InvalidAddress.hpp"
#include "../Exceptions/InvalidOpcode.hpp"
namespace ComSquare::APU namespace ComSquare::APU
{ {
@@ -47,8 +48,21 @@ namespace ComSquare::APU
} }
} }
bool APU::update() int APU::executeInstruction()
{ {
throw NotImplementedException(); uint8_t opcode = read(this->_internalRegisters.pc++);
switch (opcode) {
default:
throw InvalidOpcode("APU", opcode);
}
}
int APU::update()
{
int cycles = 0;
cycles += executeInstruction();
return cycles;
} }
} }
+7 -1
View File
@@ -112,6 +112,10 @@ namespace ComSquare::APU
//! @brief The DSP component used to produce sound //! @brief The DSP component used to produce sound
std::shared_ptr<DSP::DSP> _dsp; std::shared_ptr<DSP::DSP> _dsp;
//! @brief Execute a single instruction.
//! @return The number of cycles that the instruction took.
int executeInstruction();
public: public:
explicit APU(); explicit APU();
@@ -125,7 +129,9 @@ namespace ComSquare::APU
//! @param data The new value of the register. //! @param data The new value of the register.
//! @throw InvalidAddress will be thrown if the address is more than $FF (the number of register). //! @throw InvalidAddress will be thrown if the address is more than $FF (the number of register).
void write(uint24_t addr, uint8_t data) override; void write(uint24_t addr, uint8_t data) override;
bool update(); //! @brief This function execute the instructions received.
//! @return The number of cycles that elapsed.
int update();
}; };
} }