| @@ -118,7 +118,8 @@ class Instruction(object): | |||||
| num, cond[len("reg."):].upper()) | num, cond[len("reg."):].upper()) | ||||
| return "({0} && {1})".format(test1, test2) | 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}" | err = "Unknown condition for indirect argument: {0}" | ||||
| return RuntimeError(err.format(cond)) | return RuntimeError(err.format(cond)) | ||||
| @@ -168,10 +169,13 @@ class Instruction(object): | |||||
| if "|" in cond: | if "|" in cond: | ||||
| sets = [split(typ, c) for c in cond.split("|")] | sets = [split(typ, c) for c in cond.split("|")] | ||||
| return {choice for s in sets for choice in s} | 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 {cond} | ||||
| return product(*(split(types[i], cond) | return product(*(split(types[i], cond) | ||||
| @@ -46,9 +46,41 @@ adc: | |||||
| - cond: [a, _] | - cond: [a, _] | ||||
| return: [0x8E] | 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: | # and: | ||||
| # args: no | # args: no | ||||
| @@ -62,65 +94,65 @@ adc: | |||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # ccf: | |||||
| # args: no | |||||
| # return: error | |||||
| ccf: | |||||
| args: no | |||||
| return: [0x3F] | |||||
| # cp: | # cp: | ||||
| # args: no | # args: no | ||||
| # return: error | # 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: | # dec: | ||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # di: | |||||
| # args: no | |||||
| # return: error | |||||
| di: | |||||
| args: no | |||||
| return: [0xF3] | |||||
| # djnz: | # djnz: | ||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # ei: | |||||
| # args: no | |||||
| # return: error | |||||
| ei: | |||||
| args: no | |||||
| return: [0xFB] | |||||
| # ex: | # ex: | ||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # exx: | |||||
| # args: no | |||||
| # return: error | |||||
| exx: | |||||
| args: no | |||||
| return: [0xD9] | |||||
| # halt: | |||||
| # args: no | |||||
| # return: error | |||||
| halt: | |||||
| args: no | |||||
| return: [0x76] | |||||
| # im: | # im: | ||||
| # args: no | # args: no | ||||
| @@ -134,21 +166,21 @@ adc: | |||||
| # args: no | # args: no | ||||
| # return: error | # 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: | ini: | ||||
| args: no | args: no | ||||
| return: [0xED, 0xA2] | return: [0xED, 0xA2] | ||||
| # inir: | |||||
| # args: no | |||||
| # return: error | |||||
| inir: | |||||
| args: no | |||||
| return: [0xED, 0xB2] | |||||
| # jp: | # jp: | ||||
| # args: no | # args: no | ||||
| @@ -162,53 +194,53 @@ ini: | |||||
| # args: no | # args: no | ||||
| # return: error | # 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: | # or: | ||||
| # args: no | # args: no | ||||
| # return: error | # 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: | # out: | ||||
| # args: no | # args: no | ||||
| # return: error | # 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: | # pop: | ||||
| # args: no | # args: no | ||||
| @@ -226,49 +258,49 @@ ini: | |||||
| # args: no | # args: no | ||||
| # return: error | # 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: | # rl: | ||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # rla: | |||||
| # args: no | |||||
| # return: error | |||||
| rla: | |||||
| args: no | |||||
| return: [0x17] | |||||
| # rlc: | # rlc: | ||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # rlca: | |||||
| # args: no | |||||
| # return: error | |||||
| rlca: | |||||
| args: no | |||||
| return: [0x07] | |||||
| # rld: | |||||
| # args: no | |||||
| # return: error | |||||
| rld: | |||||
| args: no | |||||
| return: [0xED, 0x6F] | |||||
| # rr: | # rr: | ||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # rra: | |||||
| # args: no | |||||
| # return: error | |||||
| rra: | |||||
| args: no | |||||
| return: [0x1F] | |||||
| # rrc: | # rrc: | ||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # rrca: | |||||
| # args: no | |||||
| # return: error | |||||
| rrca: | |||||
| args: no | |||||
| return: [0x0F] | |||||
| # rrd: | # rrd: | ||||
| # args: no | # args: no | ||||
| @@ -282,9 +314,9 @@ ini: | |||||
| # args: no | # args: no | ||||
| # return: error | # return: error | ||||
| # scf: | |||||
| # args: no | |||||
| # return: error | |||||
| scf: | |||||
| args: no | |||||
| return: [0x37] | |||||
| # set: | # set: | ||||
| # args: no | # args: no | ||||