@@ -168,11 +168,15 @@ def p_asm_ld8(p):
168168
169169def 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
178182def p_PROC (p ):
@@ -431,7 +435,9 @@ def p_incbin(p):
431435
432436def 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
803809def 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
810818def 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
817827def 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
822834def 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
0 commit comments