From 49f510d2d60129526832bfcd9c0f4049962bc80e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt=20B=C3=B6hm?= Date: Mon, 18 May 2009 20:53:42 +0200 Subject: move stuff around and create initial source structure --- src/emu/opc.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/emu/opc.c (limited to 'src/emu/opc.c') diff --git a/src/emu/opc.c b/src/emu/opc.c new file mode 100644 index 0000000..870a272 --- /dev/null +++ b/src/emu/opc.c @@ -0,0 +1,63 @@ +#include +#include + +#include "opc.h" + +typedef struct opc_mapping { + const char *name; + uint32_t opcode; +} opc_mapping_t; + +opc_mapping_t opc_map[] = { + { "ADD", OPC_ADD }, + { "SUB", OPC_SUB }, + { "MUL", OPC_MUL }, + { "DIV", OPC_DIV }, + { "MOD", OPC_MOD }, + { "SHL", OPC_SHL }, + { "SHR", OPC_SHR }, + { "AND", OPC_AND }, + { "OR", OPC_OR }, + { "XOR", OPC_XOR }, + { "NOR", OPC_NOR }, + { "MOV", OPC_MOV }, + { "LB", OPC_LB }, + { "LH", OPC_LH }, + { "LW", OPC_LW }, + { "SB", OPC_SB }, + { "SH", OPC_SH }, + { "SW", OPC_SW }, + { "CMP", OPC_CMP }, + { "BEQ", OPC_BEQ }, + { "BNE", OPC_BNE }, + { "BLT", OPC_BLT }, + { "BGE", OPC_BGE }, + { "BLE", OPC_BLE }, + { "BGT", OPC_BGT }, + { "J", OPC_J }, + { "JAL", OPC_JAL }, + { "SYS", OPC_SYS }, + { NULL, 0 } +}; + +uint32_t mnemonic2opc(const char *mnemonic) +{ + for (uint8_t i = 0; opc_map[i].name; i++) { + if (strcmp(opc_map[i].name, mnemonic) == 0) + return opc_map[i].opcode << 26; + } + + return ~0; +} + +const char *opc2mnemonic(uint32_t IR) +{ + uint32_t opcode = IR >> 26; + + for (uint8_t i = 0; opc_map[i].name; i++) { + if (opc_map[i].opcode == opcode) + return opc_map[i].name; + } + + return NULL; +} -- cgit v1.2.3