Implement more of Z80.

This commit is contained in:
Jeff Tranter 2015-06-25 22:42:47 -04:00
parent bf9f9f5f95
commit f761d5d61e

401
z80.py
View File

@ -24,10 +24,18 @@ addressModeTable = {
"e" : "e",
"h" : "h",
"l" : "l",
"m" : "m",
"nc" : "nc",
"p" : "p",
"z" : "z",
"nz" : "nz",
"pe" : "pe",
"po" : "po",
"sp" : "sp",
"bc" : "bc",
"de" : "de",
"hl" : "hl",
"af" : "af",
"a,a" : "a,a",
"a,b" : "a,b",
"a,c" : "a,c",
@ -82,13 +90,19 @@ addressModeTable = {
"hl,de" : "hl,bc",
"hl,hl" : "hl,hl",
"hl,sp" : "hl,sp",
"sp,hl" : "sp,hl",
"de,hl" : "de,hl",
"bc,nn" : "bc,${1:02X}{0:02X}",
"de,nn" : "de,${1:02X}{0:02X}",
"hl,nn" : "hl,${1:02X}{0:02X}",
"sp,nn" : "sp,${1:02X}{0:02X}",
"c,nn" : "c,${1:02X}{0:02X}",
"m,nn" : "m,${1:02X}{0:02X}",
"indnn,hl" : "(${1:02X}{0:02X}),hl",
"indn,a" : "(${0:02X}),a",
"indhl,n" : "(hl),(${0:02X})",
"a,indnn" : "a,(${1:02X}{0:02X})",
"a,indn" : "a,(${0:02X})",
"indnn,a" : "(${1:02X}{0:02X}),a",
"hl,indnn" : "hl,(${1:02X}{0:02X})",
"indbc,a" : "(bc),a",
@ -101,6 +115,7 @@ addressModeTable = {
"indhl,e" : "(hl),e",
"indhl,h" : "(hl),h",
"indhl,l" : "(hl),l",
"indsp,hl" : "(sp),hl",
"a,indde" : "a,(de)",
"a,indbc" : "a,(bc)",
"b,indhl" : "b,(hl)",
@ -120,8 +135,23 @@ addressModeTable = {
"l,n" : "l,${0:02X}",
"nz,n" : "nz,${0:04X}",
"z,n" : "z,${0:04X}",
"z,nn" : "z,${1:02X}{0:02X}",
"nz,nn" : "nz,${1:02X}{0:02X}",
"nc,n" : "nc,${0:04X}",
"nc,nn" : "nc,${1:02X}{0:02X}",
"pe,nn" : "pe,${1:02X}{0:02X}",
"po,nn" : "po,${1:02X}{0:02X}",
"p,nn" : "p,${1:02X}{0:02X}",
"c,n" : "c,${0:04X}",
"nn" : "${1:02X}{0:02X}",
"00" : "$00",
"08" : "$08",
"10" : "$10",
"18" : "$18",
"20" : "$20",
"28" : "$28",
"30" : "$10",
"38" : "$18",
}
@ -338,74 +368,69 @@ opcodeTable = {
0xbe : [ 1, "cp", "indhl" ],
0xbf : [ 1, "cp", "a" ],
# [ "ret nz", 1 ], # c0
# [ "pop bc", 1 ], # c1
# [ "jp nz,", 3 ], # c2
# [ "jp ", 3 ], # c3
# [ "call nz,", 3 ], # c4
# [ "push bc", 1 ], # c5
# [ "ada a,", 2 ], # c6
# [ "rst 00", 1 ], # c7
# [ "ret z", 1 ], # c8
# [ "ret", 1 ], # c9
# [ "jp z,", 3 ], # ca
# [ "prefix", 2 ], # cb
# [ "call z,", 3 ], # cc
# [ "call ", 3 ], # cd
# [ "adc a,", 2 ], # ce
# [ "rst 08", 1 ], # cf
#
# [ "ret nc", 1 ], # D0
# [ "pop de", 1 ], # D1
# [ "jp nc,", 3 ], # D2
# [ "out (", 2 ], # D3 then append "),a"
# [ "call nc,", 3 ], # D4
# [ "push de", 1 ], # D5
# [ "sub ", 2 ], # D6
# [ "rst 10", 1 ], # D7
# [ "ret c", 1 ], # D8
# [ "exx", 1 ], # D9
# [ "jp c,", 3 ], # DA
# [ "in a,(", 2 ], # DB then append ")"
# [ "call c,", 3 ], # DC
# [ "prefix", 2 ], # DD
# [ "sbc a,", 2 ], # DE
# [ "rst 18", 1 ], # DF
#
# [ "ret po", 1 ], # E0
# [ "pop hl", 1 ], # E1
# [ "jp po,", 3 ], # E2
# [ "ex (sp),hl", 1 ],# E3
# [ "call po,", 3 ], # E4
# [ "push hl", 1 ], # E5
# [ "and ", 2 ], # E6
# [ "rst 20", 1 ], # E7
# [ "ret pe", 1 ], # E8
# [ "jp (hl)", 1 ], # E9
# [ "jp pe,", 3 ], # EA
# [ "ex de,hl", 1 ], # EB
# [ "call pe,", 3 ], # EC
# [ "prefix", 2 ], # ED
# [ "xor ", 2 ], # EE
# [ "rst 28", 1 ], # EF
#
# [ "ret p", 1 ], # F0
# [ "pop af", 1 ], # F1
# [ "jp p,", 3 ], # F2
# [ "di", 1 ], # F3
# [ "call p,", 3 ], # F4
# [ "push af", 1 ], # F5
# [ "or ", 2 ], # F6
# [ "rst 30", 1 ], # F7
# [ "ret m", 1 ], # F8
# [ "ld sp,phl", 1 ], # F9
# [ "jp m,", 3 ], # FA
# [ "ei", 1 ], # FB
# [ "call m,", 3 ], # FC
# [ "prefix", 2 ], # FD
# [ "cp ", 2 ], # FE
# [ "rst 38", 1 ], # FF
#
0xc0 : [ 1, "ret", "nz" ],
0xc1 : [ 1, "pop", "bc" ],
0xc2 : [ 3, "jp", "nz,nn" ],
0xc3 : [ 3, "jp", "nn" ],
0xc4 : [ 3, "call","nz,nn" ],
0xc5 : [ 1, "push","bc" ],
0xc6 : [ 2, "ada", "a,n" ],
0xc7 : [ 1, "rst", "00" ],
0xc8 : [ 1, "ret", "z" ],
0xc9 : [ 1, "ret", "implied" ],
0xca : [ 3, "jp", "z,nn" ],
0xcc : [ 3, "call","z,nn" ],
0xcd : [ 3, "call", "nn" ],
0xce : [ 2, "adc", "a,n" ],
0xcf : [ 1, "rst", "08" ],
0xd0 : [ 1, "ret", "nc" ],
0xd1 : [ 1, "pop", "de" ],
0xd2 : [ 3, "jp", "nc,nn" ],
0xd3 : [ 2, "out", "indn,a" ],
0xd4 : [ 3, "call", "nc,nn" ],
0xd5 : [ 1, "push", "de" ],
0xd6 : [ 2, "sub", "n" ],
0xd7 : [ 1, "rst", "10" ],
0xd8 : [ 1, "ret", "c" ],
0xd9 : [ 1, "exx", "implied" ],
0xda : [ 3, "jp", "c,nn" ],
0xdb : [ 2, "in", "a,indn" ],
0xdc : [ 3, "call", "c,nn" ],
0xde : [ 2, "sbc", "a,n" ],
0xdf : [ 1, "rst", "18" ],
0xe0 : [ 1, "ret", "po" ],
0xe1 : [ 1, "pop", "hl" ],
0xe2 : [ 3, "jp", "po,nn" ],
0xe3 : [ 1, "ex", "indsp,hl" ],
0xe4 : [ 3, "call", "po,nn" ],
0xe5 : [ 1, "push", "hl" ],
0xe6 : [ 2, "and", "n" ],
0xe7 : [ 1, "rst", "20" ],
0xe8 : [ 1, "ret", "pe" ],
0xe9 : [ 1, "jp", "indhl" ],
0xea : [ 3, "jp", "pe,nn" ],
0xeb : [ 1, "ex", "de,hl" ],
0xec : [ 3, "call", "pe,nn" ],
0xee : [ 2, "xor", "n" ],
0xef : [ 1, "rst", "28" ],
0xf0 : [ 1, "ret", "p" ],
0xf1 : [ 1, "pop", "af" ],
0xf2 : [ 3, "jp", "p,nn" ],
0xf3 : [ 1, "di", "implied" ],
0xf4 : [ 3, "call", "p,nn" ],
0xf5 : [ 1, "push", "af" ],
0xf6 : [ 2, "or", "n" ],
0xf7 : [ 1, "rst", "30" ],
0xf8 : [ 1, "ret", "m" ],
0xf9 : [ 1, "ld", "sp,hl" ],
0xfa : [ 3, "jp", "m,nn" ],
0xfb : [ 1, "ei", "implied" ],
0xfc : [ 3, "call", "m,nn" ],
0xfe : [ 2, "cp", "n" ],
0xff : [ 1, "rst", "38" ],
# Multibyte instructions
@ -452,243 +477,3 @@ opcodeTable = {
# [ "rr l", 2 ], # 1D
# [ "rr (hl)", 2 ], # 1E
# [ "rr e", 2 ], # 1F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # 2F
#
# [ "", 2 ], # 20
# [ "", 2 ], # 21
# [ "", 2 ], # 22
# [ "", 2 ], # 23
# [ "", 2 ], # 24
# [ "", 2 ], # 25
# [ "", 2 ], # 26
# [ "", 2 ], # 27
# [ "", 2 ], # 28
# [ "", 2 ], # 29
# [ "", 2 ], # 2A
# [ "", 2 ], # 2B
# [ "", 2 ], # 2C
# [ "", 2 ], # 2D
# [ "", 2 ], # 2E
# [ "", 2 ], # FF
#]
#