Newer
Older
emul / emul_inst_decipher.h
#ifndef EMUL_INST_DECIPHER__
#define EMUL_INST_DECIPHER__

#include "emul_inst_isa.h"
#include "emul_inst_pseudo.h"
#include "emul_reg.h"

#define LOAD_LINE_WIDTH_MAX 128
#define LOAD_LINE_HEIGHT_MAX 1024
#define LOAD_TOKEN_MAX 32

typedef struct {
    EMUL_ISA opecode;
    char string[32];
} emul_isa_t;

typedef struct {
    EMUL_REG operand;
    char string[32];
} emul_reg_t;

typedef struct {
    EMUL_PSEUDO pseudo;
    char string[32];
} emul_pseudo_t;

void emul_inst_dec_init();

int emul_inst_dec_load(const char *filename);

void emul_inst_dec_set_pc(int pc);

void emul_inst_dec_update_pc();

void emul_inst_dec_reset_pc();

int emul_inst_dec_get_token(char *token);

/* Summary:
 *   通常トークンを*_get_opecodeに渡して結果を得るが,
 *   これは*_get_tokenを実行しその結果から結果を得る.
 * Note:
 *   純粋関数
 * Example:
 *   ASM: add St0, Ss0, Ss1
 *   RETURN: add */
int emul_inst_dec_get_opecode(const char *token);

/* Summary:
 *   通常トークンを*_get_opecodeに渡して結果を得るが,
 *   これは*_get_tokenを実行しその結果から結果を得る.
 * Note:
 *   破壊的関数*/
int emul_inst_dec_get_next_opecode();

// Example:
//   ASM: add St0, Ss0, Ss1
//   RETURN: St0
//   RETURN: Ss0
//   RETURN: Ss1
int emul_inst_dec_get_operand(const char *token);

int emul_inst_dec_get_next_operand();

// immediate
int emul_inst_dec_get_next_immediate();

// 疑似コード
int emul_inst_dec_get_pseudo(const char *token);
int emul_inst_dec_get_next_pseudo();

#endif