From a853e8eaadfb58f3e87626a3ecb3add11eb894b9 Mon Sep 17 00:00:00 2001 From: Maurizio Porrato Date: Tue, 21 Jan 2020 23:31:47 +0000 Subject: [PATCH] Generate flat binary --- asm.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/asm.py b/asm.py index c271585..71ca018 100755 --- a/asm.py +++ b/asm.py @@ -2,6 +2,7 @@ from types import SimpleNamespace from rply import ParserGenerator, LexerGenerator +import struct OPS = { 'ADD': lambda a, b: a + b, @@ -205,13 +206,14 @@ def none(p): @pg.production("line : EOL") def line(p): label = None + instr = Directive(label=None, directive=None, args=None) for t in p: if type(t) in (ASM, Directive): - t.label = label - return t + instr = t elif t.gettokentype() == 'SYMBOL': label = t.getstr() - return None + instr.label = label + return instr @pg.production("op : OP2 arg_b COMMA arg_a") def op_op2(p): @@ -393,7 +395,13 @@ if __name__ == '__main__': assemble(sym, inst) print(sym) sym['.addr'] = 0 + binimage = b'' for inst in code: # pylint: disable=E1133 a = assemble(sym, inst, 2) if a is not None: print(["%04x" % x for x in a]) + for w in a: + binimage += struct.pack("