1919from . import zxbparser , zxblex
2020from libzxbpp import zxbpp
2121from libzxbasm import asmparse
22- import arch .zx48k .backend as backend
2322
2423from api import global_ as gl
2524from api .config import OPTIONS
2625from api import debug
27- from arch .zx48k .optimizer import optimize
2826
2927import arch
3028
3129
3230def get_inits (memory ):
33- backend .INITS .union (zxbparser .INITS )
31+ arch . target . backend .INITS .union (zxbparser .INITS )
3432
3533 reinit = re .compile (r'^#[ \t]*init[ \t]+([_a-zA-Z][_a-zA-Z0-9]*)[ \t]*$' ,
3634 re .IGNORECASE )
@@ -39,7 +37,7 @@ def get_inits(memory):
3937 for m in memory :
4038 init = reinit .match (m )
4139 if init is not None :
42- backend .INITS .add (init .groups ()[0 ])
40+ arch . target . backend .INITS .add (init .groups ()[0 ])
4341 memory [i ] = ''
4442 i += 1
4543
@@ -78,8 +76,8 @@ def main(args=None, emitter=None):
7876 api .config .init ()
7977 zxbpp .init ()
8078 zxbparser .init ()
81- arch .zx48k .backend .init ()
82- arch .zx48k .Translator .reset ()
79+ arch .target .backend .init ()
80+ arch .target .Translator .reset ()
8381 asmparse .init ()
8482
8583 # ------------------------------------------------------------
@@ -184,6 +182,8 @@ def main(args=None, emitter=None):
184182 parser .error (f"Invalid architecture '{ options .arch } '" )
185183 return 2
186184 OPTIONS .architecture .value = options .arch
185+ arch .set_target_arch (options .arch )
186+ backend = arch .target .backend
187187
188188 OPTIONS .org .value = api .utils .parse_int (options .org )
189189 if OPTIONS .org .value is None :
@@ -285,14 +285,14 @@ def main(args=None, emitter=None):
285285 optimizer .visit (zxbparser .ast )
286286
287287 # Emits intermediate code
288- translator = arch .zx48k .Translator ()
288+ translator = arch .target .Translator ()
289289 translator .visit (zxbparser .ast )
290290
291291 if gl .DATA_IS_USED :
292292 gl .FUNCTIONS .extend (gl .DATA_FUNCTIONS )
293293
294294 # This will fill MEMORY with pending functions
295- func_visitor = arch .zx48k .FunctionTranslator (gl .FUNCTIONS )
295+ func_visitor = arch .target .FunctionTranslator (gl .FUNCTIONS )
296296 func_visitor .start ()
297297
298298 # Emits data lines
@@ -309,7 +309,7 @@ def main(args=None, emitter=None):
309309
310310 backend .MEMORY [:] = [] # Empties memory
311311 # This will fill MEMORY with global declared variables
312- translator = arch .zx48k .VarTranslator ()
312+ translator = arch .target .VarTranslator ()
313313 translator .visit (zxbparser .data_ast )
314314
315315 for quad in translator .dumpMemory (backend .MEMORY ):
@@ -318,7 +318,7 @@ def main(args=None, emitter=None):
318318
319319 # Join all lines into a single string and ensures an INTRO at end of file
320320 asm_output = backend .emit (backend .MEMORY , optimize = OPTIONS .optimization .value > 0 )
321- asm_output = optimize (asm_output ) + '\n ' # invoke the -O3
321+ asm_output = arch . target . optimizer . optimize (asm_output ) + '\n ' # invoke the -O3
322322
323323 asm_output = asm_output .split ('\n ' )
324324 for i in range (len (asm_output )):
@@ -341,7 +341,7 @@ def main(args=None, emitter=None):
341341 # This will fill MEMORY with global declared variables
342342 var_checker = api .optimize .VariableVisitor ()
343343 var_checker .visit (zxbparser .data_ast )
344- translator = arch .zx48k .VarTranslator ()
344+ translator = arch .target .VarTranslator ()
345345 translator .visit (zxbparser .data_ast )
346346 if gl .has_errors :
347347 debug .__DEBUG__ ("exiting due to errors." )
0 commit comments