gb-emu: initial commit
Add a mostly non-functional Gameboy CPU and the skeleton of a Gameboy assembler intended for unit tests.
This commit is contained in:
49
src/gbasm/types.h
Normal file
49
src/gbasm/types.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#ifndef GBASM_TYPES_H
|
||||
#define GBASM_TYPES_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "gbasm/gb_types.h"
|
||||
#include "gbasm/emitter.h"
|
||||
|
||||
struct gbasm_parsed_inst {
|
||||
const char *src_line;
|
||||
const char *file_name;
|
||||
const char *opcode;
|
||||
int line_num;
|
||||
|
||||
struct gbasm_operand operands[GBASM_MAX_OPERANDS];
|
||||
int num_operands;
|
||||
};
|
||||
|
||||
struct gbasm_op_info {
|
||||
char *opcode;
|
||||
uint32_t operand_types[GBASM_MAX_OPERANDS];
|
||||
|
||||
int (*check)(const struct gbasm_parsed_inst *inst,
|
||||
const struct gbasm_op_info *op_info);
|
||||
size_t (*length)(const struct gbasm_parsed_inst *inst,
|
||||
const struct gbasm_op_info *info);
|
||||
size_t (*emit)(struct emitter *emitter,
|
||||
const struct gbasm_parsed_inst *inst);
|
||||
};
|
||||
|
||||
struct gbasm_operand_info {
|
||||
|
||||
const char *token;
|
||||
|
||||
bool fixed;
|
||||
union {
|
||||
/* Valid iff fixed == true */
|
||||
int (*convert)(const char *token, struct gbasm_operand *operand);
|
||||
/* Valid iff fixed == false */
|
||||
struct gbasm_operand op_info;
|
||||
};
|
||||
};
|
||||
|
||||
struct gbasm_operand_prefix {
|
||||
const char *prefix;
|
||||
int (*convert)(const char *token, struct gbasm_operand *operand);
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user