#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 { int opecode; char string[32]; } emul_isa_t; typedef struct { int operand; char string[32]; } emul_reg_t; typedef struct { int pseudo; char string[32]; } emul_pseudo_t; void emul_inst_dec_init(); int emul_inst_dec_load(const char *filename); int emul_inst_dec_loadline(const char *line); 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