diff --git a/man/rgbasm-old.5 b/man/rgbasm-old.5 index f307a0f2..c0279ebc 100644 --- a/man/rgbasm-old.5 +++ b/man/rgbasm-old.5 @@ -266,6 +266,14 @@ Instead, use .Ql LDH [C], A and .Ql LDH A, [C] . +.Pp +Note that +.Ql LD [$FF00+C], A +and +.Ql LD A, [$FF00+C] +were also deprecated in 0.9.0, but were +.Em undeprecated +in 0.9.1. .Ss LDH [n8], A and LDH A, [n8] Deprecated in 0.9.0. .Pp diff --git a/src/asm/parser.y b/src/asm/parser.y index 2c8683c6..829950af 100644 --- a/src/asm/parser.y +++ b/src/asm/parser.y @@ -1973,14 +1973,21 @@ z80_ldh: | Z80_LDH MODE_A COMMA c_ind { sect_ConstByte(0xF2); } + | Z80_LDH MODE_A COMMA ff00_c_ind { + sect_ConstByte(0xF2); + } | Z80_LDH c_ind COMMA MODE_A { sect_ConstByte(0xE2); } + | Z80_LDH ff00_c_ind COMMA MODE_A { + sect_ConstByte(0xE2); + } ; -c_ind: - LBRACK MODE_C RBRACK - | LBRACK relocexpr OP_ADD MODE_C RBRACK { +c_ind: LBRACK MODE_C RBRACK; + +ff00_c_ind: + LBRACK relocexpr OP_ADD MODE_C RBRACK { // This has to use `relocexpr`, not `iconst`, to avoid a shift/reduce conflict if ($2.getConstVal() != 0xFF00) ::error("Base value must be equal to $FF00 for $FF00+C\n"); @@ -2031,7 +2038,10 @@ z80_ld_mem: ; z80_ld_c_ind: - Z80_LD c_ind COMMA MODE_A { + Z80_LD ff00_c_ind COMMA MODE_A { + sect_ConstByte(0xE2); + } + | Z80_LD c_ind COMMA MODE_A { warning(WARNING_OBSOLETE, "LD [C], A is deprecated; use LDH [C], A\n"); sect_ConstByte(0xE2); } @@ -2064,6 +2074,9 @@ z80_ld_a: | Z80_LD reg_a COMMA reg_r { sect_ConstByte(0x40 | ($2 << 3) | $4); } + | Z80_LD reg_a COMMA ff00_c_ind { + sect_ConstByte(0xF2); + } | Z80_LD reg_a COMMA c_ind { warning(WARNING_OBSOLETE, "LD A, [C] is deprecated; use LDH A, [C]\n"); sect_ConstByte(0xF2); diff --git a/test/asm/deprecated-ldio.err b/test/asm/deprecated-ldio.err index d9b04081..f4aac64b 100644 --- a/test/asm/deprecated-ldio.err +++ b/test/asm/deprecated-ldio.err @@ -2,10 +2,6 @@ warning: deprecated-ldio.asm(5): [-Wobsolete] LDH is deprecated with values from $00 to $FF; use $FF00 to $FFFF warning: deprecated-ldio.asm(6): [-Wobsolete] LDH is deprecated with values from $00 to $FF; use $FF00 to $FFFF -warning: deprecated-ldio.asm(8): [-Wobsolete] - LD [C], A is deprecated; use LDH [C], A -warning: deprecated-ldio.asm(9): [-Wobsolete] - LD A, [C] is deprecated; use LDH A, [C] warning: deprecated-ldio.asm(13): [-Wobsolete] LDIO is deprecated; use LDH warning: deprecated-ldio.asm(14): [-Wobsolete] @@ -18,10 +14,6 @@ warning: deprecated-ldio.asm(20): [-Wobsolete] LDH is deprecated with values from $00 to $FF; use $FF00 to $FFFF warning: deprecated-ldio.asm(21): [-Wobsolete] LDH is deprecated with values from $00 to $FF; use $FF00 to $FFFF -warning: deprecated-ldio.asm(23): [-Wobsolete] - LD [C], A is deprecated; use LDH [C], A -warning: deprecated-ldio.asm(24): [-Wobsolete] - LD A, [C] is deprecated; use LDH A, [C] warning: deprecated-ldio.asm(28): [-Wobsolete] LDIO is deprecated; use LDH warning: deprecated-ldio.asm(29): [-Wobsolete] diff --git a/test/asm/ff00+c-bad.asm b/test/asm/ff00+c-bad.asm index 9d0be7a4..19a01a53 100644 --- a/test/asm/ff00+c-bad.asm +++ b/test/asm/ff00+c-bad.asm @@ -1,9 +1,9 @@ SECTION "ff00+c or not to ff00+c", ROMX - ldh a, [$ff00 + c] - ldh [65280 + c], a + ld a, [$ff00 + c] + ld [65280 + c], a ; Not ok - ldh a, [$ff01 + c] - ldh [xyz + c], a + ld a, [$ff01 + c] + ld [xyz + c], a diff --git a/test/asm/ff00+c.asm b/test/asm/ff00+c.asm index 4ef5c574..469da3db 100644 --- a/test/asm/ff00+c.asm +++ b/test/asm/ff00+c.asm @@ -1,5 +1,5 @@ SECTION "test", ROM0[0] - ldh [ $ff00 + c ], a + ld [ $ff00 + c ], a ; 257 spaces exceeds both LEXER_BUF_SIZE (64) and uint8_t limit (255) - ldh [ $ff00 + c ], a - ldh [ $ff00 + c ], a + ld [ $ff00 + c ], a + ld [ $ff00 + c ], a diff --git a/test/asm/invalid-instructions.asm b/test/asm/invalid-instructions.asm index bffe7981..3ed9580f 100644 --- a/test/asm/invalid-instructions.asm +++ b/test/asm/invalid-instructions.asm @@ -1,6 +1,6 @@ SECTION "invalid", ROM0[$10000] ld [hl], [hl] - ldh a, [$00ff+c] + ld a, [$00ff+c] ld b, [c] ld b, [bc] ld b, [$4000] diff --git a/test/link/all-instructions.asm b/test/link/all-instructions.asm index 954b9d85..cf09236e 100644 --- a/test/link/all-instructions.asm +++ b/test/link/all-instructions.asm @@ -154,7 +154,7 @@ ENDM ld [hl],a ld [$ABCD],a ldh [$ff00+$DB],a - ldh [$ff00+c],a + ld [$ff00+c],a ldh [$ff00 + c],a ldh [c],a @@ -164,7 +164,7 @@ ENDM ld a,[$ABCD] ldh a,[$ff00+$DB] ldh a,[$ff00+c] - ldh a,[$ff00 + c] + ld a,[$ff00 + c] ldh a,[c] ld [hl+],a