New DynamicRegisterValue for inspecting and manipulating register bit fields, via bit field descriptors

This commit is contained in:
Nav
2024-12-15 00:40:54 +00:00
parent 6dd8f0453e
commit 4ff7c76621
5 changed files with 150 additions and 0 deletions

View File

@@ -309,6 +309,28 @@ namespace Targets::RiscV
return this->programmingMode;
}
TargetMemoryBuffer RiscV::readRegister(const TargetRegisterDescriptor& descriptor) {
return this->readRegisters({&descriptor}).front().second;
}
DynamicRegisterValue RiscV::readRegisterDynamicValue(const TargetRegisterDescriptor& descriptor) {
return DynamicRegisterValue{descriptor, this->readRegister(descriptor)};
}
void RiscV::writeRegister(const TargetRegisterDescriptor& descriptor, TargetMemoryBufferSpan value) {
this->writeRegisters({{descriptor, TargetMemoryBuffer{value.begin(), value.end()}}});
}
void RiscV::writeRegister(const TargetRegisterDescriptor& descriptor, std::uint64_t value) {
auto data = TargetMemoryBuffer(descriptor.size, 0x00);
for (auto i = TargetMemorySize{0}; i < descriptor.size; ++i) {
data[i] = static_cast<unsigned char>(value >> ((descriptor.size - i - 1) * 8));
}
this->writeRegister(descriptor, data);
}
bool RiscV::probeMemory(
const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
const TargetMemorySegmentDescriptor& memorySegmentDescriptor,