From 2f16e82cf71d041043e6b8fcd8c49a9cdfae97a7 Mon Sep 17 00:00:00 2001 From: ISSOtm Date: Sun, 15 Mar 2020 00:12:54 +0100 Subject: [PATCH] Improve PC offset management Basically make it always point to the instruction's first byte. This was the behavior all whom I asked to intuitively expected. --- src/asm/asmy.y | 46 ++++++++++++++++++------------------ test/asm/pc-operand.asm | 13 ++++++++++ test/asm/pc-operand.err | 0 test/asm/pc-operand.out | 0 test/asm/pc-operand.out.bin | Bin 0 -> 23 bytes 5 files changed, 36 insertions(+), 23 deletions(-) create mode 100644 test/asm/pc-operand.asm create mode 100644 test/asm/pc-operand.err create mode 100644 test/asm/pc-operand.out create mode 100644 test/asm/pc-operand.out.bin diff --git a/src/asm/asmy.y b/src/asm/asmy.y index 4a907333..a7d059a1 100644 --- a/src/asm/asmy.y +++ b/src/asm/asmy.y @@ -648,7 +648,7 @@ asmfile : lines; lines : /* empty */ | lines { nListCountEmpty = 0; - nPCOffset = 1; + nPCOffset = 0; } line '\n' { nLineNo++; nTotalLines++; @@ -738,9 +738,9 @@ simple_pseudoop : include | else | endc | export - | { nPCOffset = 0; } db - | { nPCOffset = 0; } dw - | { nPCOffset = 0; } dl + | db + | dw + | dl | ds | section | rsreset @@ -1365,31 +1365,31 @@ sectattrs : /* empty */ { ; -cpu_command : z80_adc - | z80_add - | z80_and - | z80_bit - | z80_call +cpu_command : { nPCOffset = 1; } z80_adc + | { nPCOffset = 1; } z80_add + | { nPCOffset = 1; } z80_and + | { nPCOffset = 1; } z80_bit + | { nPCOffset = 1; } z80_call | z80_ccf - | z80_cp + | { nPCOffset = 1; } z80_cp | z80_cpl | z80_daa - | z80_dec + | { nPCOffset = 1; } z80_dec | z80_di | z80_ei | z80_halt | z80_inc - | z80_jp - | z80_jr - | z80_ld + | { nPCOffset = 1; } z80_jp + | { nPCOffset = 1; } z80_jr + | { nPCOffset = 1; } z80_ld | z80_ldd | z80_ldi - | z80_ldio + | { nPCOffset = 1; } z80_ldio | z80_nop - | z80_or + | { nPCOffset = 1; } z80_or | z80_pop | z80_push - | z80_res + | { nPCOffset = 1; } z80_res | z80_ret | z80_reti | z80_rl @@ -1400,17 +1400,17 @@ cpu_command : z80_adc | z80_rra | z80_rrc | z80_rrca - | z80_rst - | z80_sbc + | /*{ nPCOffset = 0; }*/ z80_rst + | { nPCOffset = 1; } z80_sbc | z80_scf - | z80_set + | { nPCOffset = 1; } z80_set | z80_sla | z80_sra | z80_srl - | z80_stop - | z80_sub + | { nPCOffset = 1; } z80_stop + | { nPCOffset = 1; } z80_sub | z80_swap - | z80_xor + | { nPCOffset = 1; } z80_xor ; z80_adc : T_Z80_ADC op_a_n { diff --git a/test/asm/pc-operand.asm b/test/asm/pc-operand.asm new file mode 100644 index 00000000..88175c04 --- /dev/null +++ b/test/asm/pc-operand.asm @@ -0,0 +1,13 @@ +SECTION "fixed", ROM0[0] + + rst @ ; rst 0 + ld de, @ ; ld de, 1 + bit @, h ; bit 4, h + db @, @ ; db 6, 7 + +SECTION "floating", ROM0 + + rst @ ; rst 8 + ld l, @ ; ld l, 9 + dw @, @ ; dw 11, 13 + dl @, @ ; dl 15, 19 diff --git a/test/asm/pc-operand.err b/test/asm/pc-operand.err new file mode 100644 index 00000000..e69de29b diff --git a/test/asm/pc-operand.out b/test/asm/pc-operand.out new file mode 100644 index 00000000..e69de29b diff --git a/test/asm/pc-operand.out.bin b/test/asm/pc-operand.out.bin new file mode 100644 index 0000000000000000000000000000000000000000..7c06a3d5df4320fb6947ea697761bab2a2c0a026 GIT binary patch literal 23 dcmX>u$jERyg^m5Z9w#>gF9SaV1A{OS0{}Z#16BY4 literal 0 HcmV?d00001