move long m/x settings to the block

This commit is contained in:
Kelvin Sherlock
2019-08-11 00:12:10 -04:00
parent d78d9d51dc
commit d46fae7cf0
2 changed files with 52 additions and 6 deletions

View File

@@ -33,10 +33,9 @@ def mask_char(asm, short_m, old, new):
if old & ~new:
asm.emit("tya", 1)
asm.longm(not short_m)
if short_m:
asm.emit("longa off", 0)
asm.emit("ora #${:02x}".format(new), 2)
asm.emit("longa on", 0)
else:
asm.emit("ora #${:04x}".format(new), 3)
return new
@@ -71,7 +70,10 @@ def generate_asm(asm, d, level):
if count>0:
if short_m:
asm.longm(False)
asm.emit("sep #$20", 2)
else:
asm.longm(True)
if level==0:
asm.emit("lda (cp)", 2)
@@ -88,12 +90,14 @@ def generate_asm(asm, d, level):
l = asm.reserve_label()
if flag_i: mask = mask_char(asm, short_m, mask, or_mask(k))
v = str_to_int(k)
asm.longm(True)
asm.emit("cmp #${:04x}\t; '{}'".format(v, encode_string(k)), 3)
asm.bne(l)
generate_asm(asm, dd, level+1)
asm.emit_label(l)
if single and double:
asm.longm(False)
asm.emit("sep #$20", 2)
short_m = True
mask = mask & 0xff
@@ -103,16 +107,15 @@ def generate_asm(asm, d, level):
l = asm.reserve_label()
if flag_i: mask = mask_char(asm, short_m, mask, or_mask(k))
v = str_to_int(k)
asm.emit("longa off", 0)
asm.longm(False)
asm.emit("cmp #${:02x}\t; '{}'".format(v, encode_string(k)), 2)
asm.emit("longa on", 0)
asm.bne(l)
generate_asm(asm, dd, level+1)
asm.emit_label(l)
# if short_m:
# asm.emit("longa on", 0)
# if short_m: asm.longm(True)
if "" in d:
d = d[""]
asm.emit("ldx #{}\t; '{}'".format(d["__value__"], d["__key__"]), 3)