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)