35 lines
922 B
C
35 lines
922 B
C
#ifndef INSTRUCTIONS_H
|
|
#define INSTRUCTIONS_H
|
|
|
|
#include "../vmbl.h"
|
|
|
|
#define MAX_ARGS 3
|
|
|
|
typedef enum
|
|
{
|
|
ARG_TYPE_NONE,
|
|
ARG_TYPE_INT
|
|
} ArgType;
|
|
|
|
typedef struct
|
|
{
|
|
char *mnemonic;
|
|
uint8_t argCount;
|
|
ArgType args[MAX_ARGS];
|
|
} InstructionInfo;
|
|
|
|
static const InstructionInfo instruction_table[] = {
|
|
[INSTRUCTION_NOP] = { "nop", 0, { ARG_TYPE_NONE } },
|
|
[INSTRUCTION_PUSH] = { "push", 1, { ARG_TYPE_INT } },
|
|
[INSTRUCTION_DROP] = { "drop", 1, { ARG_TYPE_INT } },
|
|
[INSTRUCTION_ADD] = { "add", 0, { ARG_TYPE_NONE } },
|
|
[INSTRUCTION_SUB] = { "sub", 0, { ARG_TYPE_NONE } },
|
|
[INSTRUCTION_MUL] = { "mul", 0, { ARG_TYPE_NONE } },
|
|
[INSTRUCTION_DIV] = { "div", 0, { ARG_TYPE_NONE } },
|
|
[INSTRUCTION_DUPLICATE] = { "dup", 1, { ARG_TYPE_INT } },
|
|
[INSTRUCTION_HALT] = { "halt", 0, { ARG_TYPE_NONE } },
|
|
};
|
|
|
|
InstructionType instructionNameToType(char* instName);
|
|
|
|
#endif // !INSTRUCTIONS_H
|