Add vbuCodeSize()
This commit is contained in:
parent
f45636a491
commit
18b2c589e6
|
@ -1085,11 +1085,13 @@ static void vipDrawAffine(VB *sim, World *world) {
|
||||||
pixel = cell->pixels[(py & 7) << 3 | (px & 7)];
|
pixel = cell->pixels[(py & 7) << 3 | (px & 7)];
|
||||||
if (pixel != 0)
|
if (pixel != 0)
|
||||||
*col = cell->palette[pixel];
|
*col = cell->palette[pixel];
|
||||||
}
|
|
||||||
|
|
||||||
}
|
} /* x */
|
||||||
|
|
||||||
|
} /* y */
|
||||||
|
|
||||||
|
} /* i */
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw an object group into shadow memory */
|
/* Draw an object group into shadow memory */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* This file is included into vb.c and cannot be compiled on its own. */
|
/* This file is included into vbu.c and cannot be compiled on its own. */
|
||||||
#ifdef VBUAPI
|
#ifdef VBUAPI
|
||||||
|
|
||||||
|
|
||||||
|
@ -449,12 +449,6 @@ static VBU_DasmLine* dasmGrow(
|
||||||
return *lines == NULL ? NULL : &(*lines)[index];
|
return *lines == NULL ? NULL : &(*lines)[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine the size of an instruction */
|
|
||||||
static uint32_t dasmInstSize(VB *sim, uint32_t address) {
|
|
||||||
unsigned opcode = vbRead(sim, address, VB_U16) >> 10 & 63;
|
|
||||||
return opcode < 0x20 || opcode == 0x32 || opcode == 0x36 ? 2 : 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Format an operand */
|
/* Format an operand */
|
||||||
static void dasmOperand(char *dest, VBU_DasmConfig *config,
|
static void dasmOperand(char *dest, VBU_DasmConfig *config,
|
||||||
VBU_DasmLine *line, uint8_t type) {
|
VBU_DasmLine *line, uint8_t type) {
|
||||||
|
@ -515,7 +509,7 @@ static int dasmLine(VB *sim, uint32_t *address, uint32_t pc,
|
||||||
/* Process non-text members */
|
/* Process non-text members */
|
||||||
line = &(*lines)[index];
|
line = &(*lines)[index];
|
||||||
line->address = *address;
|
line->address = *address;
|
||||||
line->codeLength = dasmInstSize(sim, *address);
|
line->codeLength = vbuCodeSize(sim, *address);
|
||||||
line->isPC = *address == pc;
|
line->isPC = *address == pc;
|
||||||
for (x = 0; x < line->codeLength; x++)
|
for (x = 0; x < line->codeLength; x++)
|
||||||
line->code[x] = vbRead(sim, *address + x, VB_U8);
|
line->code[x] = vbRead(sim, *address + x, VB_U8);
|
||||||
|
@ -660,7 +654,7 @@ static VBU_DasmLine* dasmDisassemble(VB *sim, uint32_t address,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if the instruction contains the reference address */
|
/* Check if the instruction contains the reference address */
|
||||||
size = dasmInstSize(sim, addr);
|
size = vbuCodeSize(sim, addr);
|
||||||
if (address - addr < size)
|
if (address - addr < size)
|
||||||
break;
|
break;
|
||||||
addr += addr != pc && pc - addr < size ? pc - addr : size;
|
addr += addr != pc && pc - addr < size ? pc - addr : size;
|
||||||
|
@ -674,7 +668,7 @@ static VBU_DasmLine* dasmDisassemble(VB *sim, uint32_t address,
|
||||||
|
|
||||||
/* Keep decoding until the first line of output */
|
/* Keep decoding until the first line of output */
|
||||||
else for (; line < 0; line++)
|
else for (; line < 0; line++)
|
||||||
addr += dasmInstSize(sim, addr);
|
addr += vbuCodeSize(sim, addr);
|
||||||
|
|
||||||
/* Working variables */
|
/* Working variables */
|
||||||
size = length * sizeof (VBU_DasmLine);
|
size = length * sizeof (VBU_DasmLine);
|
||||||
|
|
|
@ -38,6 +38,12 @@ static int32_t SignExtend(int32_t value, int32_t bits) {
|
||||||
|
|
||||||
/******************************* API Commands ********************************/
|
/******************************* API Commands ********************************/
|
||||||
|
|
||||||
|
/* Determine the size in bytes of an instruction */
|
||||||
|
VBUAPI int vbuCodeSize(VB *sim, uint32_t address) {
|
||||||
|
int opcode = vbRead(sim, address, VB_U16) >> 10 & 63;
|
||||||
|
return opcode < 0x20 || opcode == 0x32 || opcode == 0x36 ? 2 : 4;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize disassembler options with default settings */
|
/* Initialize disassembler options with default settings */
|
||||||
VBUAPI VBU_DasmConfig* vbuDasmInit(VBU_DasmConfig *config) {
|
VBUAPI VBU_DasmConfig* vbuDasmInit(VBU_DasmConfig *config) {
|
||||||
config->bcondNotation = VBU_JOINED;
|
config->bcondNotation = VBU_JOINED;
|
||||||
|
|
|
@ -85,6 +85,7 @@ typedef struct {
|
||||||
|
|
||||||
/******************************* API Commands ********************************/
|
/******************************* API Commands ********************************/
|
||||||
|
|
||||||
|
VBUAPI int vbuCodeSize (VB *sim, uint32_t address);
|
||||||
VBUAPI VBU_DasmConfig* vbuDasmInit (VBU_DasmConfig *config);
|
VBUAPI VBU_DasmConfig* vbuDasmInit (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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue