37 lines
709 B
C++
37 lines
709 B
C++
#pragma once
|
|
#include <variant>
|
|
#include <execute/bytecode.hpp>
|
|
#include <execute/error.hpp>
|
|
#include <execute/state.hpp>
|
|
#include <stdexcept>
|
|
#include <vector>
|
|
|
|
namespace Execute
|
|
{
|
|
enum class ArgumentType
|
|
{
|
|
Immediate,
|
|
Register,
|
|
Memory
|
|
};
|
|
|
|
class ArgumentValue
|
|
{
|
|
private:
|
|
ArgumentType type;
|
|
ArgumentType memoryValueType;
|
|
std::variant<RegisterByte, int> data;
|
|
|
|
int & GetRegister(State & state) const;
|
|
std::uint8_t * GetMemory(State & state) const;
|
|
|
|
public:
|
|
void Write(int const value, State & state) const;
|
|
int Read(State & state) const;
|
|
|
|
// Returns the size of the argument in bytes
|
|
std::size_t Parse(
|
|
std::vector<std::uint8_t> const & memory,
|
|
std::size_t const pos);
|
|
};
|
|
} |