87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
import enum
|
|
import sys
|
|
import re
|
|
import pprint
|
|
from z80shortcuts import *
|
|
from quadrants.mq0 import instructions as instructions_main_0
|
|
from quadrants.mq1 import instructions as instructions_main_1
|
|
from quadrants.mq2 import instructions as instructions_main_2
|
|
from quadrants.mq3 import instructions as instructions_main_3
|
|
|
|
from quadrants.cb import instructions as instructions_cb
|
|
from quadrants.ed import instructions as instructions_ed
|
|
|
|
instructions = [None] * 256
|
|
|
|
# ========== Main Quadrant 0
|
|
|
|
for i, x in enumerate(instructions_main_0):
|
|
if x == None: continue
|
|
instructions[i] = x
|
|
|
|
# ========== Main Quadrant 1
|
|
|
|
for i, x in enumerate(instructions_main_1):
|
|
if x == None: continue
|
|
instructions[i] = x
|
|
|
|
# ========== Main Quadrant 2
|
|
|
|
for i, x in enumerate(instructions_main_2):
|
|
if x == None: continue
|
|
instructions[i] = x
|
|
|
|
|
|
# ======== Main Quadrant 3
|
|
|
|
for i, x in enumerate(instructions_main_3):
|
|
if x == None: continue
|
|
instructions[i] = x
|
|
|
|
|
|
|
|
|
|
|
|
# =====================================
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) < 2: exit()
|
|
if sys.argv[1] == "-l":
|
|
ins_set = instructions
|
|
if len(sys.argv) >= 3 and sys.argv[2] == "CB":
|
|
ins_set = instructions_cb
|
|
if len(sys.argv) >= 3 and sys.argv[2] == "ED":
|
|
ins_set = instructions_ed
|
|
for i, x in enumerate(ins_set):
|
|
if x == None: continue
|
|
print(f"0x{i:02X}", x['name'])
|
|
if len(x['subins']) > 0:
|
|
if len(x['subins']) > 32: print("TOO BIG")
|
|
for y in x['subins']:
|
|
print(end="")
|
|
#print(f"0b{y:064b}", y, f"0x{y:016X}")
|
|
elif sys.argv[1] == "-g":
|
|
ins_set = instructions
|
|
filename = "decoderout_main.rom"
|
|
if len(sys.argv) >= 3 and sys.argv[2] == "CB":
|
|
ins_set = instructions_cb
|
|
filename = "decoderout_CB.rom"
|
|
if len(sys.argv) >= 3 and sys.argv[2] == "ED":
|
|
ins_set = instructions_ed
|
|
filename = "decoderout_ED.rom"
|
|
instruction_subins_in_printable_order = [b'\x00'] *256 *32 *8
|
|
for x, instruction in enumerate(ins_set):
|
|
if instruction == None: continue
|
|
subins_template_list = [b'\x00'] *8 *32
|
|
for i, subin in enumerate(instruction['subins']):
|
|
subin_bytes_hex = re.findall(r'..', f"{subin:016X}")
|
|
subin_bytes_hex.reverse()
|
|
for j, by in enumerate(subin_bytes_hex):
|
|
subins_template_list[i*8+j] = bytes.fromhex(by)
|
|
for i, by in enumerate(subins_template_list):
|
|
#print(by)
|
|
instruction_subins_in_printable_order[(x*8*32)+i] = by
|
|
#print(instruction_subins_in_printable_order)
|
|
with open(filename, 'wb+') as out_file:
|
|
for x in instruction_subins_in_printable_order:
|
|
out_file.write(x)
|