tc-z80-ucode-generator/quadrants/mq0.py

590 lines
23 KiB
Python

from z80shortcuts import *
instructions = [None] * 256
y = 0
z = 0
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "NOP",
"subins": [
c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
y = 1
z = 0
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "EX AF, AF'",
"subins": [
c_qw["AF_toggle"] | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
y = 2
z = 0
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "DJNZ d",
"subins": [
sr_read(sr.index("PC")) | mem_read | c_qw["ACU_write_en"] | c_qw["TMP_write_en"] | sr_write(sr.index("Z")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
#sign extend
alu_op(alu.index("ADD")),
alu_op(alu.index("SBC")) | sr_write(sr.index("W")),
sr_read(sr.index("PCL")) | c_qw["ACU_write_en"],
sr_read(sr.index("Z")) | c_qw["TMP_write_en"],
alu_op(alu.index("ADD")) | sr_write(sr.index("Z")),
sr_read(sr.index("PCH")) | c_qw["ACU_write_en"],
sr_read(sr.index("W")) | c_qw["TMP_write_en"],
alu_op(alu.index("ADC")) | sr_write(sr.index("W")),
clear_acu,
mr_read(r.index("B")) | c_qw["TMP_write_en"],
alu_op(inc.index("DEC"),alu_dev.index("INC")) | mr_write(r.index("B")),
exec_if_cond(cc_i["NZ"]) | c_qw["reset_m_state"] | c_qw["reset_context"],
sr_read(sr.index("WZ")) | sr_write(sr.index("PC")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
y = 3
z = 0
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "JR d",
"subins": [
sr_read(sr.index("PC")) | mem_read | c_qw["ACU_write_en"] | c_qw["TMP_write_en"] | sr_write(sr.index("Z")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
#sign extend
alu_op(alu.index("ADD")),
alu_op(alu.index("SBC")) | sr_write(sr.index("W")),
sr_read(sr.index("PCL")) | c_qw["ACU_write_en"],
sr_read(sr.index("Z")) | c_qw["TMP_write_en"],
alu_op(alu.index("ADD")) | sr_write(sr.index("Z")),
sr_read(sr.index("PCH")) | c_qw["ACU_write_en"],
sr_read(sr.index("W")) | c_qw["TMP_write_en"],
alu_op(alu.index("ADC")) | sr_write(sr.index("W")),
sr_read(sr.index("WZ")) | sr_write(sr.index("PC")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 0
for y in [4, 5, 6, 7]:
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"JR {cc[y-4]}, d",
"subins": [
sr_read(sr.index("PC")) | mem_read | c_qw["ACU_write_en"] | c_qw["TMP_write_en"] | sr_write(sr.index("Z")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
#early return
f_to_flatch,
exec_if_cond(cc_i[cc[(y-4)]]) | c_qw["reset_m_state"] | c_qw["reset_context"],
#sign extend
alu_op(alu.index("ADD")),
alu_op(alu.index("SBC")) | sr_write(sr.index("W")),
sr_read(sr.index("PCL")) | c_qw["ACU_write_en"],
sr_read(sr.index("Z")) | c_qw["TMP_write_en"], # unneeded
alu_op(alu.index("ADD")) | sr_write(sr.index("Z")),
sr_read(sr.index("PCH")) | c_qw["ACU_write_en"],
sr_read(sr.index("W")) | c_qw["TMP_write_en"],
alu_op(alu.index("ADC")) | sr_write(sr.index("W")),
sr_read(sr.index("WZ")) | sr_write(sr.index("PC")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 1
for y in range(8):
p = y >> 1
q = y & 1
if q != 0: continue
if p == 3: continue
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"LD {rp[p]}, nn",
"subins": [
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")) | mem_read | mr_write((p<<1)+1),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")) | mem_read | mr_write((p<<1)) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 1
y = 6
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"LD SP, nn",
"subins": [
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("SPL")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("SPH")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 1
for y in range(8):
p = y >> 1
q = y & 1
if q == 0: continue
if p == 3: continue
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"ADD HL, {rp[p]}",
"subins": [
mr_read(r.index("L")) | c_qw["ACU_write_en"],
mr_read((p<<1)+1) | c_qw["TMP_write_en"],
alu_op(alu.index("ADD")) | mr_write(r.index("L")),
mr_read(r.index("H")) | c_qw["ACU_write_en"],
mr_read((p<<1)) | c_qw["TMP_write_en"],
alu_op(alu.index("ADC")) | mr_write(r.index("H")),
flatch_to_f | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 1
p = rp.index("SP")
q = 1
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"ADD HL, SP",
"subins": [
mr_read(r.index("L")) | c_qw["ACU_write_en"],
sr_read(sr.index("SPL")) | c_qw["TMP_write_en"],
alu_op(alu.index("ADD")) | mr_write(r.index("L")),
mr_read(r.index("H")) | c_qw["ACU_write_en"],
sr_read(sr.index("SPH")) | c_qw["TMP_write_en"],
alu_op(alu.index("ADC")) | mr_write(r.index("H")),
flatch_to_f | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 2
q = 0
p = 0
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"LD (BC), A",
"subins": [
mr_read(r.index("B")) | sr_write(sr.index("W")),
mr_read(r.index("C")) | sr_write(sr.index("Z")),
sr_read(sr.index("WZ")) | mr_read(r.index("A")) | mem_write | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 2
q = 0
p = 1
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"LD (DE), A",
"subins": [
mr_read(r.index("D")) | sr_write(sr.index("W")),
mr_read(r.index("E")) | sr_write(sr.index("Z")),
sr_read(sr.index("WZ")) | mr_read(r.index("A")) | mem_write | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 2
q = 0
p = 2
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"LD (nn), HL",
"subins": [
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("Z")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("W")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("WZ")) | mr_read(r.index("L")) | mem_write | c_qw["addr_inc_en"] | sr_write(sr.index("WZ")),
sr_read(sr.index("WZ")) | mr_read(r.index("H")) | mem_write | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 2
q = 0
p = 3
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"LD (nn), A",
"subins": [
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("Z")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("W")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("WZ")) | mr_read(r.index("A")) | mem_write | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 2
q = 1
p = 0
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"LD A, (BC)",
"subins": [
mr_read(r.index("B")) | sr_write(sr.index("W")),
mr_read(r.index("C")) | sr_write(sr.index("Z")),
sr_read(sr.index("WZ")) | mem_read | mr_write(r.index("A")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 2
q = 1
p = 1
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"LD A, (DE)",
"subins": [
mr_read(r.index("D")) | sr_write(sr.index("W")),
mr_read(r.index("E")) | sr_write(sr.index("Z")),
sr_read(sr.index("WZ")) | mem_read | mr_write(r.index("A")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 2
q = 1
p = 2
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"LD HL, (nn)",
"subins": [
sr_read(sr.index("PC")) | mem_read |sr_write(sr.index("Z")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("W")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("WZ")) | mem_read | mr_write(r.index("L")),
sr_read(sr.index("WZ")) | c_qw["addr_inc_en"] | sr_write(sr.index("WZ")),
sr_read(sr.index("WZ")) | mem_read | mr_write(r.index("H")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 2
q = 1
p = 3
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"LD A, (nn)",
"subins": [
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("Z")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("PC")) | mem_read | sr_write(sr.index("W")),
sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
sr_read(sr.index("WZ")) | mem_read | mr_write(r.index("A")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 3
q = 0
for p in range(3):
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"INC {rp[p]}",
"subins": [
clear_acu,
mr_read((p<<1)+1) | c_qw["TMP_write_en"],
alu_op(inc.index("INC"),alu_dev.index("INC")) | mr_write((p<<1)+1),
mr_read((p<<1)) | c_qw["TMP_write_en"],
alu_op(alu.index("ADC")) | mr_write((p<<1)) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 3
q = 0
p = rp.index("SP")
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"INC SP",
"subins": [
clear_acu,
sr_read(sr.index("SPL")) | c_qw["TMP_write_en"],
alu_op(inc.index("INC"),alu_dev.index("INC")) | sr_write(sr.index("SPL")),
sr_read(sr.index("SPH")) | c_qw["TMP_write_en"],
alu_op(alu.index("ADC")) | sr_write(sr.index("SPH")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 3
q = 1
for p in range(2):
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"DEC {rp[p]}",
"subins": [
clear_acu,
mr_read((p<<1)+1) | c_qw["TMP_write_en"],
alu_op(inc.index("DEC"),alu_dev.index("INC")) | mr_write((p<<1)+1),
clear_tmp,
mr_read((p<<1)) | c_qw["ACU_write_en"],
alu_op(alu.index("SBC")) | mr_write((p<<1)) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 3
q = 1
p = rp.index("SP")
instructions[int(f"0b00{((p<<1)+q):03b}{z:03b}", 2)] = {
"name": f"DEC SP",
"subins": [
clear_acu,
sr_read(sr.index("SPL")) | c_qw["TMP_write_en"],
alu_op(inc.index("DEC"),alu_dev.index("INC")) | sr_write(sr.index("SPL")),
clear_tmp,
sr_read(sr.index("SPH")) | c_qw["ACU_write_en"],
alu_op(alu.index("SBC")) | sr_write(sr.index("SPH")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 4
for y in range(8):
if y == r.index("(HL)"): continue
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"INC {r[y]}",
"subins": [
clear_acu,
mr_read(y) | c_qw["TMP_write_en"],
alu_op(inc.index("INC"),alu_dev.index("INC")) | mr_write(y),
flatch_to_f | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 4
y = r.index("(HL)")
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"INC (HL)",
"subins": [
exec_if_context | sr_read(sr.index("PC")) | mem_read | c_qw["ACU_write_en"] | c_qw["TMP_write_en"] | sr_write(sr.index("Z")),
exec_if_context | sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
#sign extend
exec_if_context | alu_op(alu.index("ADD")),
exec_if_context | alu_op(alu.index("SBC")) | sr_write(sr.index("W")),
exec_if_context | mr_read(r.index("L")) | c_qw["ACU_write_en"],
exec_if_context | sr_read(sr.index("Z")) | c_qw["TMP_write_en"],
exec_if_context | alu_op(alu.index("ADD")) | sr_write(sr.index("Z")),
exec_if_context | mr_read(r.index("H")) | c_qw["ACU_write_en"],
exec_if_context | sr_read(sr.index("W")) | c_qw["TMP_write_en"],
exec_if_context | alu_op(alu.index("ADC")) | sr_write(sr.index("W")),
clear_acu,
mr_read(r.index("(HL)")) | mem_read | c_qw["TMP_write_en"],
alu_op(inc.index("INC"),alu_dev.index("INC")) | mr_read(y) | mem_write,
flatch_to_f | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 5
for y in range(8):
if y == r.index("(HL)"): continue
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"DEC {r[y]}",
"subins": [
clear_acu,
mr_read(y) | c_qw["TMP_write_en"],
alu_op(inc.index("DEC"),alu_dev.index("INC")) | mr_write(y),
flatch_to_f | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 5
y = r.index("(HL)")
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"DEC (HL)",
"subins": [
exec_if_context | sr_read(sr.index("PC")) | mem_read | c_qw["ACU_write_en"] | c_qw["TMP_write_en"] | sr_write(sr.index("Z")),
exec_if_context | sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
#sign extend
exec_if_context | alu_op(alu.index("ADD")),
exec_if_context | alu_op(alu.index("SBC")) | sr_write(sr.index("W")),
exec_if_context | mr_read(r.index("L")) | c_qw["ACU_write_en"],
exec_if_context | sr_read(sr.index("Z")) | c_qw["TMP_write_en"],
exec_if_context | alu_op(alu.index("ADD")) | sr_write(sr.index("Z")),
exec_if_context | mr_read(r.index("H")) | c_qw["ACU_write_en"],
exec_if_context | sr_read(sr.index("W")) | c_qw["TMP_write_en"],
exec_if_context | alu_op(alu.index("ADC")) | sr_write(sr.index("W")),
clear_acu,
mr_read(r.index("(HL)")) | mem_read | c_qw["TMP_write_en"],
alu_op(inc.index("DEC"),alu_dev.index("INC")) | mr_read(y) | mem_write,
flatch_to_f | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 6
for y in range(8):
if y == r.index("(HL)"): continue
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"LD {r[y]}, n",
"subins": [
sr_read(sr.index("PC")) | mem_read | mr_write(y) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")) | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 6
y = r.index("(HL)")
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": f"LD (HL), n",
"subins": [
exec_if_context | sr_read(sr.index("PC")) | mem_read | c_qw["ACU_write_en"] | c_qw["TMP_write_en"] | sr_write(sr.index("Z")),
exec_if_context | sr_read(sr.index("PC")) | c_qw["addr_inc_en"] | sr_write(sr.index("PC")),
#sign extend
exec_if_context | alu_op(alu.index("ADD")),
exec_if_context | alu_op(alu.index("SBC")) | sr_write(sr.index("W")),
exec_if_context | mr_read(r.index("L")) | c_qw["ACU_write_en"],
exec_if_context | sr_read(sr.index("Z")) | c_qw["TMP_write_en"],
exec_if_context | alu_op(alu.index("ADD")) | sr_write(sr.index("Z")),
exec_if_context | mr_read(r.index("H")) | c_qw["ACU_write_en"],
exec_if_context | sr_read(sr.index("W")) | c_qw["TMP_write_en"],
exec_if_context | alu_op(alu.index("ADC")) | sr_write(sr.index("W")),
sr_read(sr.index("PC")) | mem_read | c_qw["TMP_write_en"] | c_qw["addr_inc_en"] | sr_write(sr.index("PC")), # super hacky to preserve WZ for (IX+d)
mr_read(r.index("(HL)")) | tmp_to_db | mem_write | c_qw["reset_m_state"] | c_qw["reset_context"] # passthru tmp => DB
]
}
z = 7
y = 0
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "RLCA",
"subins": [
f_to_flatch,
mr_read(r.index("A")) | c_qw["TMP_write_en"],
alu_op(rot.index("RLC"),alu_dev.index("SLU")) | mr_write(r.index("A")),
c_qw["Flatch_read_en"] | c_qw["ACU_write_en"],
clear_tmp,
alu_op(flags.index("C") | bit["SET"],alu_dev.index("BMU")) | c_qw["TMP_write_en"],
alu_op(alu.index("AND")) | sr_write(sr.index("Z")),
internal_byte_to_db(internal_byte.index("FF")) | c_qw["TMP_write_en"],
alu_op(flags.index("C") | bit["RESET"],alu_dev.index("BMU")) | c_qw["TMP_write_en"],
alu_op(flags.index("H") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(flags.index("N") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"], #W = 0b11101100
c_qw["F_read_en"] | c_qw["ACU_write_en"],
alu_op(alu.index("AND")) | c_qw["ACU_write_en"],
sr_write(sr.index("Z")) | c_qw["TMP_write_en"],
alu_op(alu.index("OR")) | c_qw["F_write_en"]| c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 7
y = 1
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "RRCA",
"subins": [
f_to_flatch,
mr_read(r.index("A")) | c_qw["TMP_write_en"],
alu_op(rot.index("RRC"),alu_dev.index("SLU")) | mr_write(r.index("A")),
c_qw["Flatch_read_en"] | c_qw["ACU_write_en"],
clear_tmp,
alu_op(flags.index("C") | bit["SET"],alu_dev.index("BMU")) | c_qw["TMP_write_en"],
alu_op(alu.index("AND")) | sr_write(sr.index("Z")), # Z = 0b0000000C
internal_byte_to_db(internal_byte.index("FF")) | c_qw["TMP_write_en"],
alu_op(flags.index("C") | bit["RESET"],alu_dev.index("BMU")) | c_qw["TMP_write_en"],
alu_op(flags.index("H") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(flags.index("N") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"], #W = 0b11101100
c_qw["F_read_en"] | c_qw["ACU_write_en"],
alu_op(alu.index("AND")) | c_qw["ACU_write_en"],
sr_write(sr.index("Z")) | c_qw["TMP_write_en"],
alu_op(alu.index("OR")) | c_qw["F_write_en"]| c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 7
y = 2
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "RLA",
"subins": [
mr_read(r.index("A")) | c_qw["TMP_write_en"],
alu_op(rot.index("RL"),alu_dev.index("SLU"))| mr_write(r.index("A")),
c_qw["Flatch_read_en"] | c_qw["ACU_write_en"],
clear_tmp,
alu_op(flags.index("C") | bit["SET"],alu_dev.index("BMU")) | c_qw["TMP_write_en"],
alu_op(alu.index("AND")) | sr_write(sr.index("Z")), # Z = 0b0000000C
internal_byte_to_db(internal_byte.index("FF")) | c_qw["TMP_write_en"],
alu_op(flags.index("C") | bit["RESET"],alu_dev.index("BMU")) | c_qw["TMP_write_en"],
alu_op(flags.index("H") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(flags.index("N") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"], #W = 0b11101100
c_qw["F_read_en"] | c_qw["ACU_write_en"],
alu_op(alu.index("AND")) | c_qw["ACU_write_en"],
sr_write(sr.index("Z")) | c_qw["TMP_write_en"],
alu_op(alu.index("OR")) | c_qw["F_write_en"]| c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 7
y = 3
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "RRA",
"subins": [
mr_read(r.index("A")) | c_qw["TMP_write_en"],
alu_op(rot.index("RR"),alu_dev.index("SLU"))| mr_write(r.index("A")),
c_qw["Flatch_read_en"] | c_qw["ACU_write_en"],
clear_tmp,
alu_op(flags.index("C") | bit["SET"],alu_dev.index("BMU")) | c_qw["TMP_write_en"],
alu_op(alu.index("AND")) | sr_write(sr.index("Z")), # Z = 0b0000000C
internal_byte_to_db(internal_byte.index("FF")) | c_qw["TMP_write_en"],
alu_op(flags.index("C") | bit["RESET"],alu_dev.index("BMU")) | c_qw["TMP_write_en"],
alu_op(flags.index("H") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(flags.index("N") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"], #W = 0b11101100
c_qw["F_read_en"] | c_qw["ACU_write_en"],
alu_op(alu.index("AND")) | c_qw["ACU_write_en"],
sr_write(sr.index("Z")) | c_qw["TMP_write_en"],
alu_op(alu.index("OR")) | c_qw["F_write_en"] | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 7
y = 4
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "DAA",
"subins": [
f_to_flatch,
a_to_acu,
alu_op(0,alu_dev.index("DAA")) | mr_write(r.index("A")),
flatch_to_f | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 7
y = 5
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "CPL",
"subins": [
a_to_acu,
alu_op(alu.index("NOT"),save_flags=False) | mr_write(r.index("A")),
f_to_tmp,
alu_op(flags.index("H") | bit["SET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(flags.index("N") | bit["SET"],alu_dev.index("BMU"),False) | c_qw["F_write_en"] | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 7
y = 6
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "SCF",
"subins": [
f_to_tmp,
alu_op(flags.index("C") | bit["SET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(flags.index("H") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(flags.index("N") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["F_write_en"] | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}
z = 7
y = 7
instructions[int(f"0b00{y:03b}{z:03b}", 2)] = {
"name": "CCF",
"subins": [
f_to_acu,
clear_tmp,
alu_op(flags.index("C") | bit["SET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(flags.index("H") | bit["SET"],alu_dev.index("BMU"),False) | c_qw["TMP_write_en"],
alu_op(alu.index("XOR"),save_flags=False) | c_qw["TMP_write_en"],
alu_op(flags.index("N") | bit["RESET"],alu_dev.index("BMU"),False) | c_qw["F_write_en"] | c_qw["reset_m_state"] | c_qw["reset_context"]
]
}