mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-06-05 10:59:38 +00:00
Starting APU instructions implementation
This commit is contained in:
+16
-2
@@ -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
@@ -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();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user