@@ -118,7 +118,8 @@ class Instruction(object): | |||
num, cond[len("reg."):].upper()) | |||
return "({0} && {1})".format(test1, test2) | |||
# TODO | |||
if cond == "imm" or cond == "immediate": | |||
return "INST_INDIRECT({0}).type == AT_IMMEDIATE".format(num) | |||
err = "Unknown condition for indirect argument: {0}" | |||
return RuntimeError(err.format(cond)) | |||
@@ -168,10 +169,13 @@ class Instruction(object): | |||
if "|" in cond: | |||
sets = [split(typ, c) for c in cond.split("|")] | |||
return {choice for s in sets for choice in s} | |||
if typ == "register" and cond == "ih": | |||
return {"ixh", "iyh"} | |||
if typ == "register" and cond == "il": | |||
return {"ixl", "iyl"} | |||
if typ == "register": | |||
if cond == "i": | |||
return {"ix", "iy"} | |||
if cond == "ih": | |||
return {"ixh", "iyh"} | |||
if cond == "il": | |||
return {"ixl", "iyl"} | |||
return {cond} | |||
return product(*(split(types[i], cond) | |||
@@ -46,9 +46,41 @@ adc: | |||
- cond: [a, _] | |||
return: [0x8E] | |||
# add: | |||
# args: no | |||
# return: error | |||
add: | |||
args: yes | |||
cases: | |||
- type: [register, register] | |||
cases: | |||
- cond: [a, a] | |||
return: [0x87] | |||
- cond: [a, b] | |||
return: [0x80] | |||
- cond: [a, c] | |||
return: [0x81] | |||
- cond: [a, d] | |||
return: [0x82] | |||
- cond: [a, e] | |||
return: [0x83] | |||
- cond: [a, h|ih] | |||
return: [0x84] | |||
- cond: [a, l|il] | |||
return: [0x85] | |||
- cond: [hl|i, bc] | |||
return: [0x09] | |||
- cond: [hl|i, de] | |||
return: [0x19] | |||
- cond: [hl|i, hl] | |||
return: [0x29] | |||
- cond: [hl|i, sp] | |||
return: [0x39] | |||
- type: [register, immediate] | |||
cases: | |||
- cond: [a, u8] | |||
return: [0xC6, u8] | |||
- type: [register, indirect_hl_or_indexed] | |||
cases: | |||
- cond: [a, _] | |||
return: [0x86] | |||
# and: | |||
# args: no | |||
@@ -62,65 +94,65 @@ adc: | |||
# args: no | |||
# return: error | |||
# ccf: | |||
# args: no | |||
# return: error | |||
ccf: | |||
args: no | |||
return: [0x3F] | |||
# cp: | |||
# args: no | |||
# return: error | |||
# cpd: | |||
# args: no | |||
# return: error | |||
cpd: | |||
args: no | |||
return: [0xED, 0xA9] | |||
# cpdr: | |||
# args: no | |||
# return: error | |||
cpdr: | |||
args: no | |||
return: [0xED, 0xB9] | |||
# cpi: | |||
# args: no | |||
# return: error | |||
cpi: | |||
args: no | |||
return: [0xED, 0xA1] | |||
# cpir: | |||
# args: no | |||
# return: error | |||
cpir: | |||
args: no | |||
return: [0xED, 0xB1] | |||
# cpl: | |||
# args: no | |||
# return: error | |||
cpl: | |||
args: no | |||
return: [0x2F] | |||
# daa: | |||
# args: no | |||
# return: error | |||
daa: | |||
args: no | |||
return: [0x27] | |||
# dec: | |||
# args: no | |||
# return: error | |||
# di: | |||
# args: no | |||
# return: error | |||
di: | |||
args: no | |||
return: [0xF3] | |||
# djnz: | |||
# args: no | |||
# return: error | |||
# ei: | |||
# args: no | |||
# return: error | |||
ei: | |||
args: no | |||
return: [0xFB] | |||
# ex: | |||
# args: no | |||
# return: error | |||
# exx: | |||
# args: no | |||
# return: error | |||
exx: | |||
args: no | |||
return: [0xD9] | |||
# halt: | |||
# args: no | |||
# return: error | |||
halt: | |||
args: no | |||
return: [0x76] | |||
# im: | |||
# args: no | |||
@@ -134,21 +166,21 @@ adc: | |||
# args: no | |||
# return: error | |||
# ind: | |||
# args: no | |||
# return: error | |||
ind: | |||
args: no | |||
return: [0xED, 0xAA] | |||
# indr: | |||
# args: no | |||
# return: error | |||
indr: | |||
args: no | |||
return: [0xED, 0xBA] | |||
ini: | |||
args: no | |||
return: [0xED, 0xA2] | |||
# inir: | |||
# args: no | |||
# return: error | |||
inir: | |||
args: no | |||
return: [0xED, 0xB2] | |||
# jp: | |||
# args: no | |||
@@ -162,53 +194,53 @@ ini: | |||
# args: no | |||
# return: error | |||
# ldd: | |||
# args: no | |||
# return: error | |||
ldd: | |||
args: no | |||
return: [0xED, 0xA8] | |||
# lddr: | |||
# args: no | |||
# return: error | |||
lddr: | |||
args: no | |||
return: [0xED, 0xB8] | |||
# ldi: | |||
# args: no | |||
# return: error | |||
ldi: | |||
args: no | |||
return: [0xED, 0xA0] | |||
# ldir: | |||
# args: no | |||
# return: error | |||
ldir: | |||
args: no | |||
return: [0xED, 0xB0] | |||
# neg: | |||
# args: no | |||
# return: error | |||
neg: | |||
args: no | |||
return: [0xED, 0x44] | |||
# nop: | |||
# args: no | |||
# return: error | |||
nop: | |||
args: no | |||
return: [0x00] | |||
# or: | |||
# args: no | |||
# return: error | |||
# otdr: | |||
# args: no | |||
# return: error | |||
otdr: | |||
args: no | |||
return: [0xED, 0xBB] | |||
# otir: | |||
# args: no | |||
# return: error | |||
otir: | |||
args: no | |||
return: [0xED, 0xB3] | |||
# out: | |||
# args: no | |||
# return: error | |||
# outd: | |||
# args: no | |||
# return: error | |||
outd: | |||
args: no | |||
return: [0xED, 0xAB] | |||
# outi: | |||
# args: no | |||
# return: error | |||
outi: | |||
args: no | |||
return: [0xED, 0xA3] | |||
# pop: | |||
# args: no | |||
@@ -226,49 +258,49 @@ ini: | |||
# args: no | |||
# return: error | |||
# reti: | |||
# args: no | |||
# return: error | |||
reti: | |||
args: no | |||
return: [0xED, 0x4D] | |||
# retn: | |||
# args: no | |||
# return: error | |||
retn: | |||
args: no | |||
return: [0xED, 0x45] | |||
# rl: | |||
# args: no | |||
# return: error | |||
# rla: | |||
# args: no | |||
# return: error | |||
rla: | |||
args: no | |||
return: [0x17] | |||
# rlc: | |||
# args: no | |||
# return: error | |||
# rlca: | |||
# args: no | |||
# return: error | |||
rlca: | |||
args: no | |||
return: [0x07] | |||
# rld: | |||
# args: no | |||
# return: error | |||
rld: | |||
args: no | |||
return: [0xED, 0x6F] | |||
# rr: | |||
# args: no | |||
# return: error | |||
# rra: | |||
# args: no | |||
# return: error | |||
rra: | |||
args: no | |||
return: [0x1F] | |||
# rrc: | |||
# args: no | |||
# return: error | |||
# rrca: | |||
# args: no | |||
# return: error | |||
rrca: | |||
args: no | |||
return: [0x0F] | |||
# rrd: | |||
# args: no | |||
@@ -282,9 +314,9 @@ ini: | |||
# args: no | |||
# return: error | |||
# scf: | |||
# args: no | |||
# return: error | |||
scf: | |||
args: no | |||
return: [0x37] | |||
# set: | |||
# args: no | |||