# HG changeset patch # User james # Date 1393183045 0 # Node ID 5953026ed47eeea598311565fd9f4944f42c724b # Parent ddeae9d3fff489ecb1dd13da2d0dc6a8c146ccca immediate ints are now only signed when they are negative diff -r ddeae9d3fff4 -r 5953026ed47e assembler/language.py --- a/assembler/language.py Sun Feb 23 14:52:31 2014 +0000 +++ b/assembler/language.py Sun Feb 23 19:17:25 2014 +0000 @@ -318,29 +318,33 @@ is_neg = 1 # things that can be negative - # immediate ints + # immediate ints (signed when negative) if (a[:3] == '#' + PREFIX): # 8 bit ints if len(a[3:]) <= 2: sym.append('#data8') if is_neg: val = string_num('-' + a[1:]) + fmt = '>b' else: val = string_num(a[1:]) + fmt = '>B' # signed big-endian byte - data = data + struct.pack('>b', val) + data = data + struct.pack(fmt, val) continue # 16 bit ints elif len(a[3:]) <= 4: sym.append('#data16') if is_neg: val = string_num('-' + a[1:]) + fmt = '>h' else: val = string_num(a[1:]) + fmt = '>H' # signed big-endian short - data = data + struct.pack('>h', val) + data = data + struct.pack(fmt, val) continue - # 8 bit relative addresses + # 8 bit relative addresses (always signed) elif (a[:2] == PREFIX) and (len(a[2:]) <= 2): sym.append('rel8') if is_neg: diff -r ddeae9d3fff4 -r 5953026ed47e assembler/language.pyc Binary file assembler/language.pyc has changed