Backport Shrooms2 disassembler
This commit is contained in:
+728
-590
File diff suppressed because it is too large
Load Diff
+20
-2
@@ -46,14 +46,21 @@ VBUAPI int vbuCodeSize(VB *sim, uint32_t address) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize disassembler options with default settings */
|
/* Initialize disassembler options with default settings */
|
||||||
VBUAPI VBU_DasmConfig* vbuDasmInit(VBU_DasmConfig *config) {
|
VBUAPI VBU_DasmConfig* vbuDasmDefaults(VBU_DasmConfig *config) {
|
||||||
|
|
||||||
|
/* Error checking */
|
||||||
|
if (config == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Supply default configuration */
|
||||||
config->bcondNotation = VBU_JOINED;
|
config->bcondNotation = VBU_JOINED;
|
||||||
|
config->branchNotation = VBU_ABSOLUTE;
|
||||||
config->conditionCase = VBU_LOWER;
|
config->conditionCase = VBU_LOWER;
|
||||||
config->conditionCL = VBU_L;
|
config->conditionCL = VBU_L;
|
||||||
config->conditionEZ = VBU_Z;
|
config->conditionEZ = VBU_Z;
|
||||||
config->conditionNotation = VBU_NAMES;
|
config->conditionNotation = VBU_NAMES;
|
||||||
config->hexCase = VBU_UPPER;
|
config->hexCase = VBU_UPPER;
|
||||||
config->hexNotation = VBU_0X;
|
config->hexNotation = VBU_PREFIX_0X;
|
||||||
config->immediateNotation = VBU_NONE;
|
config->immediateNotation = VBU_NONE;
|
||||||
config->memoryNotation = VBU_OUTSIDE;
|
config->memoryNotation = VBU_OUTSIDE;
|
||||||
config->mnemonicCase = VBU_UPPER;
|
config->mnemonicCase = VBU_UPPER;
|
||||||
@@ -69,6 +76,17 @@ VBUAPI VBU_DasmConfig* vbuDasmInit(VBU_DasmConfig *config) {
|
|||||||
/* Disassemble from a simulation */
|
/* Disassemble from a simulation */
|
||||||
VBUAPI VBU_DasmLine* vbuDisassemble(VB *sim, uint32_t address,
|
VBUAPI VBU_DasmLine* vbuDisassemble(VB *sim, uint32_t address,
|
||||||
VBU_DasmConfig *config, unsigned length, int line) {
|
VBU_DasmConfig *config, unsigned length, int line) {
|
||||||
|
VBU_DasmConfig defs; /* Default settings */
|
||||||
|
|
||||||
|
/* Error checking */
|
||||||
|
if (sim == NULL || length == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Supply default configuration */
|
||||||
|
if (config == NULL)
|
||||||
|
config = vbuDasmDefaults(&defs);
|
||||||
|
|
||||||
|
/* Disassemble instructions */
|
||||||
return dasmDisassemble(sim, address, config, length, line);
|
return dasmDisassemble(sim, address, config, length, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-9
@@ -17,23 +17,25 @@ extern "C" {
|
|||||||
/********************************* Constants *********************************/
|
/********************************* Constants *********************************/
|
||||||
|
|
||||||
/* Disassembler options */
|
/* Disassembler options */
|
||||||
#define VBU_0X 0
|
#define VBU_ABSOLUTE 0
|
||||||
#define VBU_C 1
|
#define VBU_C 1
|
||||||
#define VBU_DEST_FIRST 1
|
#define VBU_DEST_FIRST 1
|
||||||
#define VBU_DEST_LAST 0
|
#define VBU_DEST_LAST 0
|
||||||
#define VBU_DOLLAR 1
|
|
||||||
#define VBU_E 0
|
#define VBU_E 0
|
||||||
#define VBU_H 2
|
|
||||||
#define VBU_INSIDE 1
|
#define VBU_INSIDE 1
|
||||||
#define VBU_JOINED 0
|
#define VBU_JOINED 0
|
||||||
#define VBU_L 0
|
#define VBU_L 0
|
||||||
#define VBU_LOWER 1
|
#define VBU_LOWER 1
|
||||||
#define VBU_NAMES 1
|
#define VBU_NAMES 1
|
||||||
#define VBU_NONE 0
|
#define VBU_NONE 0
|
||||||
#define VBU_NUMBER 1
|
|
||||||
#define VBU_NUMBERS 0
|
#define VBU_NUMBERS 0
|
||||||
#define VBU_OUTSIDE 0
|
#define VBU_OUTSIDE 0
|
||||||
|
#define VBU_PREFIX_0X 0
|
||||||
|
#define VBU_PREFIX_DOLLAR 1
|
||||||
|
#define VBU_PREFIX_NUMBER 1
|
||||||
|
#define VBU_RELATIVE 1
|
||||||
#define VBU_SPLIT 1
|
#define VBU_SPLIT 1
|
||||||
|
#define VBU_SUFFIX_H 2
|
||||||
#define VBU_UPPER 0
|
#define VBU_UPPER 0
|
||||||
#define VBU_Z 1
|
#define VBU_Z 1
|
||||||
|
|
||||||
@@ -44,13 +46,14 @@ extern "C" {
|
|||||||
/* Disassembler text options */
|
/* Disassembler text options */
|
||||||
typedef struct { /* Defaults listed first */
|
typedef struct { /* Defaults listed first */
|
||||||
uint8_t bcondNotation; /* JOINED, SPLIT */
|
uint8_t bcondNotation; /* JOINED, SPLIT */
|
||||||
|
uint8_t branchNotation; /* ABSOLUTE, RELATIVE */
|
||||||
uint8_t conditionCase; /* LOWER, UPPER */
|
uint8_t conditionCase; /* LOWER, UPPER */
|
||||||
uint8_t conditionCL; /* L, C */
|
uint8_t conditionCL; /* L, C */
|
||||||
uint8_t conditionEZ; /* Z, E */
|
uint8_t conditionEZ; /* Z, E */
|
||||||
uint8_t conditionNotation; /* NAMES, NUMBERS */
|
uint8_t conditionNotation; /* NAMES, NUMBERS */
|
||||||
uint8_t hexCase; /* UPPER, LOWER */
|
uint8_t hexCase; /* UPPER, LOWER */
|
||||||
uint8_t hexNotation; /* 0X, H, DOLLAR */
|
uint8_t hexNotation; /* PREFIX_0X, SUFFIX_H, PREFIX_DOLLAR */
|
||||||
uint8_t immediateNotation; /* NONE, NUMBER */
|
uint8_t immediateNotation; /* NONE, SUFFIX_NUMBER */
|
||||||
uint8_t memoryNotation; /* OUTSIDE, INSIDE */
|
uint8_t memoryNotation; /* OUTSIDE, INSIDE */
|
||||||
uint8_t mnemonicCase; /* UPPER, LOWER */
|
uint8_t mnemonicCase; /* UPPER, LOWER */
|
||||||
uint8_t operandOrder; /* DEST_LAST, DEST_FIRST */
|
uint8_t operandOrder; /* DEST_LAST, DEST_FIRST */
|
||||||
@@ -66,7 +69,7 @@ typedef struct {
|
|||||||
|
|
||||||
/* Parsed */
|
/* Parsed */
|
||||||
uint32_t address; /* Memory address */
|
uint32_t address; /* Memory address */
|
||||||
uint16_t code[4]; /* Instruction bytes */
|
uint8_t code[4]; /* Instruction bytes */
|
||||||
uint8_t codeLength; /* Number of items in code */
|
uint8_t codeLength; /* Number of items in code */
|
||||||
uint8_t isPC; /* Set if PC is on this line */
|
uint8_t isPC; /* Set if PC is on this line */
|
||||||
|
|
||||||
@@ -86,8 +89,8 @@ typedef struct {
|
|||||||
/******************************* API Commands ********************************/
|
/******************************* API Commands ********************************/
|
||||||
|
|
||||||
VBUAPI int vbuCodeSize (VB *sim, uint32_t address);
|
VBUAPI int vbuCodeSize (VB *sim, uint32_t address);
|
||||||
VBUAPI VBU_DasmConfig* vbuDasmInit (VBU_DasmConfig *config);
|
VBUAPI VBU_DasmConfig* vbuDasmDefaults(VBU_DasmConfig *config);
|
||||||
VBUAPI VBU_DasmLine* vbuDisassemble(VB *sim, uint32_t address, VBU_DasmConfig *config, unsigned length, int line);
|
VBUAPI VBU_DasmLine* vbuDisassemble (VB *sim, uint32_t address, VBU_DasmConfig *config, unsigned length, int line);
|
||||||
VBUAPI void* vbuFromISX (void *bytes, size_t length, size_t *romLength);
|
VBUAPI void* vbuFromISX (void *bytes, size_t length, size_t *romLength);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user