mirror of
https://github.com/Lukas0025/POC1-SIMD-DNA.git
synced 2025-04-04 23:01:33 +01:00
92 lines
2.5 KiB
Python
Executable File
92 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
from SIMDDNA.register import Register
|
|
from SIMDDNA.assembly import Assembly
|
|
from SIMDDNA.ascii import showMolecule
|
|
import argparse
|
|
|
|
from joblib import Parallel, delayed
|
|
|
|
parser = argparse.ArgumentParser(description='DNA|SIMD python simulator POC1')
|
|
parser.add_argument('assembly')
|
|
parser.add_argument('-s', '--spaceing', default=" ", help='space sentense between ascii char of DNA strands')
|
|
parser.add_argument('-v', '--verbose', help='show simulation step by step not only final', action='store_true', default=False)
|
|
parser.add_argument('-d', '--decode', help='use macros to decode final result', action='store_true', default=False)
|
|
parser.add_argument('-c', '--comments', help='show comments for instructions', action='store_true', default=False)
|
|
parser.add_argument('-b', '--break_i', help='stop on Instruction ID', type=int, default=None)
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Open a file
|
|
file = open(args.assembly, mode='r')
|
|
asm = file.read()
|
|
file.close()
|
|
|
|
asm = Assembly(asm)
|
|
|
|
print("=================================")
|
|
print("| Inital state |")
|
|
print("=================================")
|
|
print("")
|
|
|
|
regs = []
|
|
|
|
for data in asm.getData():
|
|
regs.append(Register(data))
|
|
regs[-1].asciiShow(spaceing = args.spaceing)
|
|
print("")
|
|
|
|
|
|
iId = 0
|
|
for ins in asm.getInstructions():
|
|
|
|
if args.verbose:
|
|
print("")
|
|
print("=================================")
|
|
print(f"| Instruction {iId} |")
|
|
print("=================================")
|
|
print()
|
|
|
|
if args.comments:
|
|
print("#%s" % ins["comment"])
|
|
print("")
|
|
|
|
for insc in ins["ins"]:
|
|
insc.rawPrint()
|
|
|
|
print()
|
|
print("Registers")
|
|
print("--------------------------------")
|
|
print()
|
|
|
|
regs = Parallel(n_jobs=max(len(regs), 4))(delayed(reg.instruction)(ins["ins"]) for reg in regs)
|
|
|
|
if args.verbose:
|
|
for reg in regs:
|
|
reg.asciiShow(spaceing = args.spaceing)
|
|
print("")
|
|
|
|
if args.break_i is not None:
|
|
if iId >= args.break_i:
|
|
break
|
|
|
|
iId += 1
|
|
|
|
print("")
|
|
print("=================================")
|
|
print("| FINAL state |")
|
|
print("=================================")
|
|
print("")
|
|
|
|
for reg in regs:
|
|
reg.asciiShow(spaceing = args.spaceing)
|
|
print("")
|
|
|
|
if args.decode:
|
|
# todo: implement it
|
|
print()
|
|
print("Decoded")
|
|
print("--------------------------------")
|
|
print()
|
|
for reg in regs:
|
|
print(asm.decode(reg)) |