Files
BloomPatched/src/Targets/TargetBreakpoint.hpp

62 lines
1.5 KiB
C++
Raw Normal View History

2021-04-04 21:04:12 +01:00
#pragma once
#include <cstdint>
2023-09-20 23:37:54 +01:00
#include <optional>
#include <cassert>
2021-04-04 21:04:12 +01:00
#include "TargetMemory.hpp"
namespace Targets
2021-04-04 21:04:12 +01:00
{
2023-09-20 23:37:54 +01:00
enum class TargetBreakCause: std::uint8_t
2021-04-04 21:04:12 +01:00
{
BREAKPOINT,
UNKNOWN,
};
struct TargetBreakpoint
{
2023-09-20 23:37:54 +01:00
enum class Type: std::uint8_t
{
HARDWARE,
SOFTWARE,
};
2021-04-04 21:04:12 +01:00
/**
* Byte address of the breakpoint.
*/
TargetMemoryAddress address = 0;
2021-04-04 21:04:12 +01:00
2023-09-20 23:37:54 +01:00
Type type = Type::SOFTWARE;
TargetBreakpoint() = default;
2023-09-20 23:37:54 +01:00
explicit TargetBreakpoint(TargetMemoryAddress address, Type type = Type::SOFTWARE)
: address(address)
, type(type)
{};
};
struct BreakpointResources
{
std::optional<std::uint16_t> maximumHardwareBreakpoints;
std::optional<std::uint16_t> maximumSoftwareBreakpoints;
std::uint16_t reservedHardwareBreakpoints;
2023-09-20 23:37:54 +01:00
BreakpointResources(
std::optional<std::uint16_t> maximumHardwareBreakpoints,
std::optional<std::uint16_t> maximumSoftwareBreakpoints,
std::uint16_t reservedHardwareBreakpoints
2023-09-20 23:37:54 +01:00
)
: maximumHardwareBreakpoints(maximumHardwareBreakpoints)
, maximumSoftwareBreakpoints(maximumSoftwareBreakpoints)
, reservedHardwareBreakpoints(reservedHardwareBreakpoints)
{
assert(
!this->maximumHardwareBreakpoints.has_value()
|| this->maximumHardwareBreakpoints >= this->reservedHardwareBreakpoints
);
}
2021-04-04 21:04:12 +01:00
};
}