Skip to content

Commit bea4ecf

Browse files
authored
Merge pull request #668 from boriel/bugfix/missing_bracket_instructions
fix: allow square brackets in all ASM mnemonics
2 parents b0e1e50 + 495f57e commit bea4ecf

8 files changed

Lines changed: 244 additions & 13 deletions

File tree

src/parsetab/tabs.dbm.bak

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
'zxbpp', (0, 66998)
2-
'asmparse', (67072, 222500)
3-
'zxnext_asmparse', (289792, 246933)
4-
'zxbparser', (537088, 641182)
2+
'asmparse', (67072, 233494)
3+
'zxnext_asmparse', (301056, 258575)
4+
'zxbparser', (560128, 641182)

src/parsetab/tabs.dbm.dat

22.5 KB
Binary file not shown.

src/parsetab/tabs.dbm.dir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
'zxbpp', (0, 66998)
2-
'asmparse', (67072, 222500)
3-
'zxnext_asmparse', (289792, 246933)
4-
'zxbparser', (537088, 641182)
2+
'asmparse', (67072, 233494)
3+
'zxnext_asmparse', (301056, 258575)
4+
'zxbparser', (560128, 641182)

src/zxbasm/asmparse.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,15 @@ def p_asm_ld8(p):
168168

169169
def p_LDa(p): # Remaining LD A,... and LD...,A instructions
170170
"""asm : LD A COMMA LP BC RP
171+
| LD A COMMA LB BC RB
171172
| LD A COMMA LP DE RP
173+
| LD A COMMA LB DE RB
172174
| LD LP BC RP COMMA A
175+
| LD LB BC RB COMMA A
173176
| LD LP DE RP COMMA A
177+
| LD LB DE RB COMMA A
174178
"""
175-
p[0] = Asm(p.lineno(1), "LD " + "".join(p[2:]))
179+
p[0] = Asm(p.lineno(1), "LD " + "".join(x.replace("[", "(").replace("]", ")") for x in p[2:]))
176180

177181

178182
def p_PROC(p):
@@ -431,7 +435,9 @@ def p_incbin(p):
431435

432436
def p_ex_sp_reg8(p):
433437
"""asm : EX LP SP RP COMMA reg16i
438+
| EX LB SP RB COMMA reg16i
434439
| EX LP SP RP COMMA HL
440+
| EX LB SP RB COMMA HL
435441
"""
436442
p[0] = Asm(p.lineno(1), "EX (SP)," + p[6])
437443

@@ -477,7 +483,7 @@ def p_JP_hl(p):
477483
| JP LB reg16i RB
478484
"""
479485
s = "JP "
480-
if p[2] in ("(HL)", "[HL]"):
486+
if p[2] == "(HL)":
481487
s += p[2]
482488
else:
483489
s += "(%s)" % p[3]
@@ -802,25 +808,33 @@ def p_im(p):
802808

803809
def p_in(p):
804810
"""asm : IN A COMMA LP C RP
811+
| IN A COMMA LB C RB
805812
| IN reg8 COMMA LP C RP
813+
| IN reg8 COMMA LB C RB
806814
"""
807815
p[0] = Asm(p.lineno(1), "IN %s,(C)" % p[2])
808816

809817

810818
def p_out(p):
811819
"""asm : OUT LP C RP COMMA A
820+
| OUT LB C RB COMMA A
812821
| OUT LP C RP COMMA reg8
822+
| OUT LB C RB COMMA reg8
813823
"""
814824
p[0] = Asm(p.lineno(1), "OUT (C),%s" % p[6])
815825

816826

817827
def p_in_expr(p):
818-
"""asm : IN A COMMA pexpr"""
828+
"""asm : IN A COMMA mem_indir
829+
| IN A COMMA pexpr
830+
"""
819831
p[0] = Asm(p.lineno(1), "IN A,(N)", p[4])
820832

821833

822834
def p_out_expr(p):
823-
"""asm : OUT pexpr COMMA A"""
835+
"""asm : OUT mem_indir COMMA A
836+
| OUT pexpr COMMA A
837+
"""
824838
p[0] = Asm(p.lineno(1), "OUT (N),A", p[2])
825839

826840

src/zxbasm/z80.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# -*- coding: utf-8 -*-
33
# vim:ts=4:et:
44

5-
from typing import NamedTuple
5+
from typing import Final, NamedTuple
66

77

88
class Opcode(NamedTuple):
@@ -846,4 +846,4 @@ class Opcode(NamedTuple):
846846

847847

848848
# Z80 asm instruction list
849-
Z80INSTR = set(x.split()[0] for x in Z80SET)
849+
Z80INSTR: Final[set[str]] = set(x.split()[0] for x in Z80SET)

src/zxbasm/zxnext.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ def p_add_reg16_a(p):
4848

4949

5050
def p_JP_c(p):
51-
"""asm : JP LP C RP"""
51+
"""asm : JP LP C RP
52+
| JP LB C RB
53+
"""
5254
p[0] = asmparse.Asm(p.lineno(1), "JP (C)")
5355

5456

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
N equ 0
2+
NN equ 1234
3+
4+
adc a,[hl]
5+
adc a,[ix+N]
6+
adc a,[iy+N]
7+
add a,[hl]
8+
add a,[ix+N]
9+
add a,[iy+N]
10+
and [hl]
11+
and [ix+N]
12+
and [iy+N]
13+
bit 0,[hl]
14+
bit 1,[hl]
15+
bit 2,[hl]
16+
bit 3,[hl]
17+
bit 4,[hl]
18+
bit 5,[hl]
19+
bit 6,[hl]
20+
bit 7,[hl]
21+
bit 0,[ix+N]
22+
bit 1,[ix+N]
23+
bit 2,[ix+N]
24+
bit 3,[ix+N]
25+
bit 4,[ix+N]
26+
bit 5,[ix+N]
27+
bit 6,[ix+N]
28+
bit 7,[ix+N]
29+
bit 0,[iy+N]
30+
bit 1,[iy+N]
31+
bit 2,[iy+N]
32+
bit 3,[iy+N]
33+
bit 4,[iy+N]
34+
bit 5,[iy+N]
35+
bit 6,[iy+N]
36+
bit 7,[iy+N]
37+
cp [hl]
38+
cp [ix+N]
39+
cp [iy+N]
40+
dec [hl]
41+
dec [ix+N]
42+
dec [iy+N]
43+
ex [sp],hl
44+
ex [sp],ix
45+
ex [sp],iy
46+
in a,[c]
47+
in a,[N]
48+
in b,[c]
49+
in c,[c]
50+
in d,[c]
51+
in e,[c]
52+
in h,[c]
53+
in l,[c]
54+
inc [hl]
55+
inc [ix+N]
56+
inc [iy+N]
57+
jp [hl]
58+
jp [ix]
59+
jp [iy]
60+
ld [bc],a
61+
ld [de],a
62+
ld [hl],a
63+
ld [hl],c
64+
ld [hl],b
65+
ld [hl],e
66+
ld [hl],d
67+
ld [hl],h
68+
ld [hl],l
69+
ld [hl],N
70+
ld [ix+N],a
71+
ld [ix+N],c
72+
ld [ix+N],b
73+
ld [ix+N],e
74+
ld [ix+N],d
75+
ld [ix+N],h
76+
ld [ix+N],l
77+
ld [ix+N],N
78+
ld [iy+N],a
79+
ld [iy+N],c
80+
ld [iy+N],b
81+
ld [iy+N],e
82+
ld [iy+N],d
83+
ld [iy+N],h
84+
ld [iy+N],l
85+
ld [iy+N],N
86+
ld [NN],a
87+
ld [NN],bc
88+
ld [NN],de
89+
ld [NN],hl
90+
ld [NN],ix
91+
ld [NN],iy
92+
ld [NN],sp
93+
ld a,[bc]
94+
ld a,[de]
95+
ld a,[hl]
96+
ld a,[ix+N]
97+
ld a,[iy+N]
98+
ld a,[NN]
99+
ld b,[hl]
100+
ld b,[ix+N]
101+
ld b,[iy+N]
102+
ld bc,[NN]
103+
ld c,[hl]
104+
ld c,[ix+N]
105+
ld c,[iy+N]
106+
ld d,[hl]
107+
ld d,[ix+N]
108+
ld d,[iy+N]
109+
ld de,[NN]
110+
ld e,[hl]
111+
ld e,[ix+N]
112+
ld e,[iy+N]
113+
ld h,[hl]
114+
ld h,[ix+N]
115+
ld h,[iy+N]
116+
ld hl,[NN]
117+
ld ix,[NN]
118+
ld iy,[NN]
119+
ld l,[hl]
120+
ld l,[ix+N]
121+
ld l,[iy+N]
122+
ld sp,[NN]
123+
or [hl]
124+
or [ix+N]
125+
or [iy+N]
126+
out [c],a
127+
out [c],b
128+
out [c],c
129+
out [c],d
130+
out [c],e
131+
out [c],h
132+
out [c],l
133+
out [N],a
134+
res 0,[hl]
135+
res 1,[hl]
136+
res 2,[hl]
137+
res 3,[hl]
138+
res 4,[hl]
139+
res 5,[hl]
140+
res 6,[hl]
141+
res 7,[hl]
142+
res 0,[ix+N]
143+
res 1,[ix+N]
144+
res 2,[ix+N]
145+
res 3,[ix+N]
146+
res 4,[ix+N]
147+
res 5,[ix+N]
148+
res 6,[ix+N]
149+
res 7,[ix+N]
150+
res 0,[iy+N]
151+
res 1,[iy+N]
152+
res 2,[iy+N]
153+
res 3,[iy+N]
154+
res 4,[iy+N]
155+
res 5,[iy+N]
156+
res 6,[iy+N]
157+
res 7,[iy+N]
158+
rl [hl]
159+
rl [ix+N]
160+
rl [iy+N]
161+
rlc [hl]
162+
rlc [ix+N]
163+
rlc [iy+N]
164+
rr [hl]
165+
rr [ix+N]
166+
rr [iy+N]
167+
rrc [hl]
168+
rrc [ix+N]
169+
rrc [iy+N]
170+
sbc a,[hl]
171+
sbc a,[ix+N]
172+
sbc a,[iy+N]
173+
set 0,[hl]
174+
set 1,[hl]
175+
set 2,[hl]
176+
set 3,[hl]
177+
set 4,[hl]
178+
set 5,[hl]
179+
set 6,[hl]
180+
set 7,[hl]
181+
set 0,[ix+N]
182+
set 1,[ix+N]
183+
set 2,[ix+N]
184+
set 3,[ix+N]
185+
set 4,[ix+N]
186+
set 5,[ix+N]
187+
set 6,[ix+N]
188+
set 7,[ix+N]
189+
set 0,[iy+N]
190+
set 1,[iy+N]
191+
set 2,[iy+N]
192+
set 3,[iy+N]
193+
set 4,[iy+N]
194+
set 5,[iy+N]
195+
set 6,[iy+N]
196+
set 7,[iy+N]
197+
sla [hl]
198+
sla [ix+N]
199+
sla [iy+N]
200+
sra [hl]
201+
sra [ix+N]
202+
sra [iy+N]
203+
srl [hl]
204+
srl [ix+N]
205+
srl [iy+N]
206+
sub [hl]
207+
sub [ix+N]
208+
sub [iy+N]
209+
xor [hl]
210+
xor [ix+N]
211+
xor [iy+N]
212+
sll [hl]
213+
sll [ix+N]
214+
sll [iy+N]
215+
jp [c]
598 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)