diff --git a/src/asm/parser.y b/src/asm/parser.y index 2d0ecdcb..7c679a7f 100644 --- a/src/asm/parser.y +++ b/src/asm/parser.y @@ -2035,14 +2035,22 @@ z80_ld_a_comma_args : reg_rr { // $0A,$1A,$2A,$3A: ld a, [] | T_MODE_A T_OP_SUB T_TOKEN_C T_OP_SUB z80_ld_a_comma_a_minus_c_minus_args ; -z80_ld_a_comma_a_plus_c_plus_args : T_TOKEN_C { out_AbsByte(0x89); } // $89: adc a, c ==> ld a, a + c + c +z80_ld_a_comma_a_plus_c_plus_args : reg_nc { + // $88-$8F: adc a, ==> ld a, a + c + (except $89: adc a, c) + out_AbsByte(0x88 | $1); + } + | T_TOKEN_C { out_AbsByte(0x89); } // $89: adc a, c ==> ld a, a + c + c | reloc_8bit { // $CE: adc a, ==> ld a, a + c + out_AbsByte(0xCE); out_RelByte(&$1, 1); } ; -z80_ld_a_comma_a_minus_c_minus_args : T_TOKEN_C { out_AbsByte(0x99); } // $99: sbc a, c ==> ld a, a - c - c +z80_ld_a_comma_a_minus_c_minus_args : reg_nc { + // $98-$9F: sbc a, ==> ld a, a - c - (except $99: sbc a, c) + out_AbsByte(0x98 | $1); + } + | T_TOKEN_C { out_AbsByte(0x99); } // $99: sbc a, c ==> ld a, a - c - c | reloc_8bit { // $DE: sbc a, ==> ld a, a - c - out_AbsByte(0xDE); out_RelByte(&$1, 1);