gbasm: correct the "(hl)" operand
Though not a real register, the operand "(hl)" fits in better with the 8-bit registers than it does with the sixteen bit ones. As such, move its definition. Also, define useful values for the 8-bit operands rather than arbitrary ones.
This commit is contained in:
@@ -18,13 +18,14 @@ enum gbasm_operand_type {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum gbasm_operand_r8_type {
|
enum gbasm_operand_r8_type {
|
||||||
GBASM_OPERAND_R8_A,
|
GBASM_OPERAND_R8_B = 0,
|
||||||
GBASM_OPERAND_R8_B,
|
GBASM_OPERAND_R8_C = 1,
|
||||||
GBASM_OPERAND_R8_C,
|
GBASM_OPERAND_R8_D = 2,
|
||||||
GBASM_OPERAND_R8_D,
|
GBASM_OPERAND_R8_E = 3,
|
||||||
GBASM_OPERAND_R8_E,
|
GBASM_OPERAND_R8_H = 4,
|
||||||
GBASM_OPERAND_R8_H,
|
GBASM_OPERAND_R8_L = 5,
|
||||||
GBASM_OPERAND_R8_L,
|
GBASM_OPERAND_R8_HL_DEREF = 6,
|
||||||
|
GBASM_OPERAND_R8_A = 7,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct gbasm_operand_r8 {
|
struct gbasm_operand_r8 {
|
||||||
@@ -36,7 +37,6 @@ enum gbasm_operand_r16_type {
|
|||||||
GBASM_OPERAND_R16_DE,
|
GBASM_OPERAND_R16_DE,
|
||||||
GBASM_OPERAND_R16_HL,
|
GBASM_OPERAND_R16_HL,
|
||||||
GBASM_OPERAND_R16_SP,
|
GBASM_OPERAND_R16_SP,
|
||||||
GBASM_OPERAND_R16_HL_DEREF,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct gbasm_operand_r16 {
|
struct gbasm_operand_r16 {
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ size_t inc_emit(struct emitter *emitter,
|
|||||||
case GBASM_OPERAND_R8_E: opcode = 0x1c; break;
|
case GBASM_OPERAND_R8_E: opcode = 0x1c; break;
|
||||||
case GBASM_OPERAND_R8_H: opcode = 0x24; break;
|
case GBASM_OPERAND_R8_H: opcode = 0x24; break;
|
||||||
case GBASM_OPERAND_R8_L: opcode = 0x2c; break;
|
case GBASM_OPERAND_R8_L: opcode = 0x2c; break;
|
||||||
|
case GBASM_OPERAND_R8_HL_DEREF: opcode = 0x34; break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GBASM_OPERAND_REG_16:
|
case GBASM_OPERAND_REG_16:
|
||||||
@@ -97,7 +98,6 @@ size_t inc_emit(struct emitter *emitter,
|
|||||||
case GBASM_OPERAND_R16_DE: opcode = 0x13; break;
|
case GBASM_OPERAND_R16_DE: opcode = 0x13; break;
|
||||||
case GBASM_OPERAND_R16_HL: opcode = 0x23; break;
|
case GBASM_OPERAND_R16_HL: opcode = 0x23; break;
|
||||||
case GBASM_OPERAND_R16_SP: opcode = 0x33; break;
|
case GBASM_OPERAND_R16_SP: opcode = 0x33; break;
|
||||||
case GBASM_OPERAND_R16_HL_DEREF: opcode = 0x34; break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -124,6 +124,7 @@ size_t dec_emit(struct emitter *emitter,
|
|||||||
case GBASM_OPERAND_R8_E: opcode = 0x1d; break;
|
case GBASM_OPERAND_R8_E: opcode = 0x1d; break;
|
||||||
case GBASM_OPERAND_R8_H: opcode = 0x25; break;
|
case GBASM_OPERAND_R8_H: opcode = 0x25; break;
|
||||||
case GBASM_OPERAND_R8_L: opcode = 0x2d; break;
|
case GBASM_OPERAND_R8_L: opcode = 0x2d; break;
|
||||||
|
case GBASM_OPERAND_R8_HL_DEREF: opcode = 0x35; break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GBASM_OPERAND_REG_16:
|
case GBASM_OPERAND_REG_16:
|
||||||
@@ -132,7 +133,6 @@ size_t dec_emit(struct emitter *emitter,
|
|||||||
case GBASM_OPERAND_R16_DE: opcode = 0x1b; break;
|
case GBASM_OPERAND_R16_DE: opcode = 0x1b; break;
|
||||||
case GBASM_OPERAND_R16_HL: opcode = 0x2b; break;
|
case GBASM_OPERAND_R16_HL: opcode = 0x2b; break;
|
||||||
case GBASM_OPERAND_R16_SP: opcode = 0x3b; break;
|
case GBASM_OPERAND_R16_SP: opcode = 0x3b; break;
|
||||||
case GBASM_OPERAND_R16_HL_DEREF: opcode = 0x35; break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -69,6 +69,14 @@ static const struct gbasm_operand_info gbasm_operand_infos[] = {
|
|||||||
.r8 = { .type = GBASM_OPERAND_R8_L },
|
.r8 = { .type = GBASM_OPERAND_R8_L },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.token = "(hl)",
|
||||||
|
.fixed = true,
|
||||||
|
.op_info = {
|
||||||
|
.type = GBASM_OPERAND_REG_8,
|
||||||
|
.r8 = { GBASM_OPERAND_R8_HL_DEREF },
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.token = "bc",
|
.token = "bc",
|
||||||
.fixed = true,
|
.fixed = true,
|
||||||
@@ -93,15 +101,6 @@ static const struct gbasm_operand_info gbasm_operand_infos[] = {
|
|||||||
.r16 = { GBASM_OPERAND_R16_HL },
|
.r16 = { GBASM_OPERAND_R16_HL },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.token = "(hl)",
|
|
||||||
.fixed = true,
|
|
||||||
.op_info = {
|
|
||||||
.type = GBASM_OPERAND_REG_16,
|
|
||||||
.r16 = { GBASM_OPERAND_R16_HL_DEREF },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
.token = "sp",
|
.token = "sp",
|
||||||
.fixed = true,
|
.fixed = true,
|
||||||
|
|||||||
Reference in New Issue
Block a user