Separate routine for fetching the current stack pointer

This commit is contained in:
Nav
2021-11-11 19:03:23 +00:00
parent 7409134314
commit cd0f2428ef
3 changed files with 22 additions and 0 deletions

View File

@@ -254,6 +254,19 @@ void Avr8::setProgramCounter(std::uint32_t programCounter) {
this->avr8Interface->setProgramCounter(programCounter);
}
std::uint32_t Avr8::getStackPointer() {
const auto stackPointerRegister = this->readRegisters(
{this->targetRegisterDescriptorsByType.at(TargetRegisterType::STACK_POINTER)}
).front();
std::uint32_t stackPointer = 0;
for (std::size_t i = 0; i < stackPointerRegister.size() && i < 4; i++) {
stackPointer = (stackPointer << (8 * i)) | stackPointerRegister.value[i];
}
return stackPointer;
}
std::map<int, TargetPinState> Avr8::getPinStates(int variantId) {
if (!this->targetVariantsById.contains(variantId)) {
throw Exception("Invalid target variant ID");

View File

@@ -109,6 +109,8 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit
TargetRegister getProgramCounterRegister();
void setProgramCounter(std::uint32_t programCounter) override;
std::uint32_t getStackPointer() override;
std::map<int, TargetPinState> getPinStates(int variantId) override;
void setPinState(
const TargetPinDescriptor& pinDescriptor,

View File

@@ -275,6 +275,13 @@ namespace Bloom::Targets
*/
virtual void setProgramCounter(std::uint32_t programCounter) = 0;
/**
* Should fetch the current stack pointer value.
*
* @return
*/
virtual std::uint32_t getStackPointer() = 0;
/**
* Should get the current pin states for each pin on the target, mapped by pin number
*