From ee8c65b4c51a93c4ebc3020a404f629a006c8253 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Sat, 10 Aug 2019 18:39:19 -0400 Subject: [PATCH] add -l flag to include text length in the value. --- string_compiler.py | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/string_compiler.py b/string_compiler.py index c0b39eb..4721140 100644 --- a/string_compiler.py +++ b/string_compiler.py @@ -6,6 +6,9 @@ from functools import reduce from asm import Assembler flag_i = False +flag_l = False +flag_v = False +flag_o = None def str_to_int(cc): @@ -78,8 +81,6 @@ 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) - # only valid if preceeded by a lda/ora - # if v != 0: asm.emit("cmp #${:04x}\t; '{}'".format(v, encode_string(k)), 3) asm.bne(l) generate_asm(asm, dd, level+1) @@ -96,7 +97,6 @@ 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) - # if v != 0: asm.emit("cmp #${:02x}\t; '{}'".format(v, encode_string(k)), 2) asm.bne(l) generate_asm(asm, dd, level+1) @@ -150,7 +150,7 @@ def usage(ex=1): def read_data(f, name): - global flag_i + global flag_i, flag_l data = {} ln = 0 @@ -169,6 +169,11 @@ def read_data(f, name): k = k.lower() k = decode_string(k) v = int(m[2]) + if flag_l: + if v > 255 or len(orig_k) > 255: + err = "{}:{} Value too large: {}".format(name, ln, v) + raise Exception(err) + v = (v << 8) + len(orig_k) if k in data: err = "{}:{}: Duplicate string: {}".format(name,ln,orig_k) @@ -186,9 +191,8 @@ def read_file(path): return read_data(f, path) +def init_maps(): -def main(): - global flag_i global decode_map global encode_map @@ -223,10 +227,26 @@ def main(): +def main(): + global flag_i, flag_l + + init_maps() + + argv = sys.argv[1:] - opts, args = getopt.getopt(argv, "i") + opts, args = getopt.getopt(argv, "ivo:le") + + # flags = {} + # for k, v in opts: flags[k] = v + # # booleans + # for k in ("-i","-v","-l","-e"): + # flags[k] = k in flags + for k, v in opts: if k == '-i': flag_i = True + elif k == '-o': flag_o = v + elif k == '-v': flag_v = True + elif k == '-l': flag_l = True else: usage() @@ -249,4 +269,4 @@ try: main() except Exception as ex: print("string16: ", ex, file=sys.stderr, flush=True) - sys.exit(1) \ No newline at end of file + sys.exit(1)