#ifndef LIB_65oo2_DECODER_H
# define LIB_65oo2_DECODER_H 1

#include <stddef.h>
#include <stdint.h>
#include "mnemonic.h"
#include "addressing.h"

typedef enum {
	ADDRESS_SIZE_HINT_NONE, /* default 8bits */
	ADDRESS_SIZE_HINT_16,
	ADDRESS_SIZE_HINT_32,
	
	ADDRESS_SIZE_HINT_MAX
} AddressSizeHint;

typedef enum {
	OPERAND_SIZE_HINT_NONE,
	OPERAND_SIZE_HINT_16,
	OPERAND_SIZE_HINT_32,

	OPERAND_SIZE_HINT_MAX
} OperandSizeHint;

typedef struct {
	Mnemonic mnemonic;
	uint8_t length;
	AddressingMode addressing;
} DecodedInstruction;

int decoder_decode(uint8_t *buffer, size_t length, DecodedInstruction *instruction);

#endif /* !LIB_65oo2_DECODER_H */