Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Type OPTYPE
- Value As Integer
- OpCode As String
- Operand1 As String
- Operand2 As String
- TStates As Integer
- Code As String
- End Type
- Dim OPS(0 To 255) As OPType
- Dim OPS_CB(0 To 255) As OPType
- Dim OPS_DD(0 To 255) As OPType
- Dim OPS_ED(0 To 255) As OPType
- Dim OPS_FD(0 To 255) As OPType
- Dim reg_tab1(0 To 7) As String => {"B", "C", "D", "E", "H", "L", "(HL)", "A"}
- Dim reg_tab2(0 To 3) As String => {"BC", "DE", "HL", "SP"}
- Dim reg_tab3(0 To 3) As String => {"BC", "DE", "HL", "AF"}
- Dim cc_tab1(0 To 7) As String => {"NZ", "Z", "NC", "C", "PO", "PE", "P", "M"}
- Dim p_tab1(0 To 7) As String => {"&H00", "&H08", "&H10", "&H18", "&H20", "&H28", "&H30", "&H38"}
- For i = 0 To 255
- OPS(i).Value = i
- ' 8-Bit Load Group
- ' LD r, r'
- If (i shr 6) = &B01 Then
- r1 = (i shr 3) AND &B111
- r2 = i AND &B111
- If reg_tab1(r1) <> "(HL)" AND reg_tab1(r2) <> "(HL)" Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = reg_tab1(r1)
- OPS(i).Operand2 = reg_tab1(r2)
- OPS(i).TStates = 4
- If r1 <> r2 Then
- OPS(i).Code = " z80->r_" & reg_tab1(r1) & " = z80->r_" & reg_tab1(r2)
- Else
- OPS(i).Code = " ' Nothing to do!"
- End If
- End If
- End If
- ' LD r, n
- If ((i shr 6) = &B00) AND ((i AND &B111) = &B110) Then
- r1 = (i shr 3) AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = reg_tab1(r1)
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- OPS(i).Code = " z80->r_" & reg_tab1(r1) & " = nextbyte(z80)"
- End If
- End If
- ' LD r, (HL)
- If (i shr 6) = &B01 Then
- r1 = (i shr 3) AND &B111
- r2 = i AND &B111
- If reg_tab1(r1) <> "(HL)" AND reg_tab1(r2) = "(HL)" Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = reg_tab1(r1)
- OPS(i).Operand2 = reg_tab1(r2)
- OPS(i).TStates = 7
- OPS(i).Code = " z80->r_" & reg_tab1(r1) & " = peekbyte(z80, get_HL(z80))"
- End If
- End If
- ' LD r, (IX+d)
- If ((i shr 6) = &B01) AND ((i AND &B111) = &B110) Then
- r1 = (i shr 3) AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS_DD(i).OpCode = "LD"
- OPS_DD(i).Operand1 = reg_tab1(r1)
- OPS_DD(i).Operand2 = "(IX+d)"
- OPS_DD(i).TStates = 19
- OPS_DD(i).Code = " z80->r_" & reg_tab1(r1) & " = peekbyte(z80, z80->r_IX + CAST(byte, nextbyte(z80)))"
- End If
- End If
- ' LD r, (IY+d)
- If ((i shr 6) = &B01) AND ((i AND &B111) = &B110) Then
- r1 = (i shr 3) AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS_FD(i).OpCode = "LD"
- OPS_FD(i).Operand1 = reg_tab1(r1)
- OPS_FD(i).Operand2 = "(IY+d)"
- OPS_FD(i).TStates = 19
- OPS_FD(i).Code = " z80->r_" & reg_tab1(r1) & " = peekbyte(z80, z80->r_IY + CAST(byte, nextbyte(z80)))"
- End If
- End If
- ' LD (HL), r
- If (i shr 6) = &B01 Then
- r1 = (i shr 3) AND &B111
- r2 = i AND &B111
- If reg_tab1(r1) = "(HL)" AND reg_tab1(r2) <> "(HL)" Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = reg_tab1(r1)
- OPS(i).Operand2 = reg_tab1(r2)
- OPS(i).TStates = 7
- OPS(i).Code = " pokebyte(z80, get_HL(z80), z80->r_" & reg_tab1(r2) & ")"
- End If
- End If
- ' LD (IX+d), r
- If (i shr 3) = &B01110 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS_DD(i).OpCode = "LD"
- OPS_DD(i).Operand1 = "(IX+d)"
- OPS_DD(i).Operand2 = reg_tab1(r1)
- OPS_DD(i).TStates = 19
- OPS_DD(i).Code = " pokebyte(z80, z80->r_IX + CAST(byte, nextbyte(z80)), z80->r_" & reg_tab1(r1) & ")"
- End If
- End If
- ' LD (IY+d), r
- If (i shr 3) = &B01110 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS_FD(i).OpCode = "LD"
- OPS_FD(i).Operand1 = "(IY+d)"
- OPS_FD(i).Operand2 = reg_tab1(r1)
- OPS_FD(i).TStates = 19
- OPS_FD(i).Code = " pokebyte(z80, z80->r_IY + CAST(byte, nextbyte(z80)), z80->r_" & reg_tab1(r1) & ")"
- End If
- End If
- ' LD (HL), n
- If i = &H36 Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "(HL)"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 10
- OPS(i).Code = " pokebyte(z80, get_HL(z80), nextbyte(z80))"
- End If
- ' LD (IX+d), n
- If i = &H36 Then
- OPS_DD(i).OpCode = "LD"
- OPS_DD(i).Operand1 = "(IX+d)"
- OPS_DD(i).Operand2 = "n"
- OPS_DD(i).TStates = 19
- OPS_DD(i).Code = " Dim d As uByte" & Chr(13, 10)
- OPS_DD(i).Code += " d = nextbyte(z80)" & Chr(13, 10)
- OPS_DD(i).Code += " pokebyte(z80, z80->r_IX + CAST(byte, d), nextbyte(z80))"
- End If
- ' LD (IY+d), n
- If i = &H36 Then
- OPS_FD(i).OpCode = "LD"
- OPS_FD(i).Operand1 = "(IY+d)"
- OPS_FD(i).Operand2 = "n"
- OPS_FD(i).TStates = 19
- OPS_FD(i).Code = " Dim d As uByte" & Chr(13, 10)
- OPS_FD(i).Code += " d = nextbyte(z80)" & Chr(13, 10)
- OPS_FD(i).Code += " pokebyte(z80, z80->r_IY + CAST(byte, d), nextbyte(z80))"
- End If
- ' LD A, (BC)
- If i = &H0A Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(BC)"
- OPS(i).TStates = 7
- OPS(i).Code = " z80->r_A = peekbyte(z80, get_BC(z80))"
- End If
- ' LD A, (DE)
- If i = &H1A Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(DE)"
- OPS(i).TStates = 7
- OPS(i).Code = " z80->r_A = peekbyte(z80, get_DE(z80))"
- End If
- ' LD A, (nn)
- If i = &H3A Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(nn)"
- OPS(i).TStates = 13
- OPS(i).Code = " z80->r_A = peekbyte(z80, nextword(z80))"
- End If
- ' LD (BC), A
- If i = &H02 Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "(BC)"
- OPS(i).Operand2 = "A"
- OPS(i).TStates = 7
- OPS(i).Code = " pokebyte(z80, get_BC(z80), z80->r_A)"
- End If
- ' LD (DE), A
- If i = &H12 Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "(DE)"
- OPS(i).Operand2 = "A"
- OPS(i).TStates = 7
- OPS(i).Code = " pokebyte(z80, get_DE(z80), z80->r_A)"
- End If
- ' LD (nn), A
- If i = &H32 Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "(nn)"
- OPS(i).Operand2 = "A"
- OPS(i).TStates = 13
- OPS(i).Code = " pokebyte(z80, nextword(z80), z80->r_A)"
- End If
- ' LD A, I
- If i = &H57 Then
- OPS_ED(i).OpCode = "LD"
- OPS_ED(i).Operand1 = "A"
- OPS_ED(i).Operand2 = "I"
- OPS_ED(i).TStates = 9
- OPS_ED(i).Code = " z80->r_A = z80->r_I" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_S = BIT(z80->r_I, 7)" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_Z = (z80->r_I = 0)" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_H = 0" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_PV = z80->IFF2" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_N = 0"
- End If
- ' LD A, R
- If i = &H5F Then
- OPS_ED(i).OpCode = "LD"
- OPS_ED(i).Operand1 = "A"
- OPS_ED(i).Operand2 = "R"
- OPS_ED(i).TStates = 9
- OPS_ED(i).Code = " z80->r_A = z80->r_R" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_S = BIT(z80->r_R, 7)" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_Z = (z80->r_R = 0)" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_H = 0" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_PV = z80->IFF2" & Chr(13, 10)
- OPS_ED(i).Code += " z80->f_N = 0"
- End If
- ' LD I, A
- If i = &H47 Then
- OPS_ED(i).OpCode = "LD"
- OPS_ED(i).Operand1 = "I"
- OPS_ED(i).Operand2 = "A"
- OPS_ED(i).TStates = 9
- OPS_ED(i).Code = " z80->r_I = z80->r_A"
- End If
- ' LD R, A
- If i = &H4F Then
- OPS_ED(i).OpCode = "LD"
- OPS_ED(i).Operand1 = "R"
- OPS_ED(i).Operand2 = "A"
- OPS_ED(i).TStates = 9
- OPS_ED(i).Code = " z80->r_R = z80->r_A"
- End If
- ' 16-Bit Load Group
- ' LD dd, nn
- If (i shr 6) = &B00 AND (i AND &B1111) = &B0001 Then
- r1 = (i shr 4) AND &B11
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = reg_tab2(r1)
- OPS(i).Operand2 = "nn"
- OPS(i).TStates = 10
- If reg_tab2(r1) <> "SP" Then
- OPS(i).Code = " set_" & reg_tab2(r1) & "(z80, nextword(z80))"
- Else
- OPS(i).Code = " z80->r_SP = nextword(z80)"
- End If
- End If
- ' LD IX, nn
- If i = &H21 Then
- OPS_DD(i).OpCode = "LD"
- OPS_DD(i).Operand1 = "IX"
- OPS_DD(i).Operand2 = "nn"
- OPS_DD(i).TStates = 14
- End If
- ' LD IY, nn
- If i = &H21 Then
- OPS_FD(i).OpCode = "LD"
- OPS_FD(i).Operand1 = "IY"
- OPS_FD(i).Operand2 = "nn"
- OPS_FD(i).TStates = 14
- End If
- ' LD HL, (nn)
- If i = &H2A Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "HL"
- OPS(i).Operand2 = "(nn)"
- OPS(i).TStates = 16
- OPS(i).Code = " set_HL(z80, peekword(z80, nextword(z80)))"
- End If
- ' LD dd, (nn)
- If (i shr 6) = &B01 AND (i AND &B1111) = &B1011 Then
- r1 = (i shr 4) AND &B11
- OPS_ED(i).OpCode = "LD"
- OPS_ED(i).Operand1 = reg_tab2(r1)
- OPS_ED(i).Operand2 = "(nn)"
- OPS_ED(i).TStates = 20
- If reg_tab2(r1) <> "SP" Then
- OPS_ED(i).Code = " set_" & reg_tab2(r1) & "(z80, peekword(z80, nextword(z80)))"
- Else
- OPS_ED(i).Code = " z80->r_SP = peekword(z80, nextword(z80))"
- End If
- End If
- ' LD IX, (nn)
- If i = &H2A Then
- OPS_DD(i).OpCode = "LD"
- OPS_DD(i).Operand1 = "IX"
- OPS_DD(i).Operand2 = "(nn)"
- OPS_DD(i).TStates = 20
- OPS_DD(i).Code = " z80->r_IX = peekword(z80, nextword(z80))"
- End If
- ' LD IY, (nn)
- If i = &H2A Then
- OPS_FD(i).OpCode = "LD"
- OPS_FD(i).Operand1 = "IY"
- OPS_FD(i).Operand2 = "(nn)"
- OPS_FD(i).TStates = 20
- OPS_FD(i).Code = " z80->r_IY = peekword(z80, nextword(z80))"
- End If
- ' LD (nn), HL
- If i = &H22 Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "(nn)"
- OPS(i).Operand2 = "HL"
- OPS(i).TStates = 16
- OPS(i).Code = " pokeword(z80, nextword(z80), get_HL(z80))"
- End If
- ' LD (nn), dd
- If (i shr 6) = &B01 AND (i AND &B1111) = &B0011 Then
- r1 = (i shr 4) AND &B11
- OPS_ED(i).OpCode = "LD"
- OPS_ED(i).Operand1 = "(nn)"
- OPS_ED(i).Operand2 = reg_tab2(r1)
- OPS_ED(i).TStates = 20
- If reg_tab2(r1) <> "SP" Then
- OPS_ED(i).Code = " pokeword(z80, nextword(z80), get_" & reg_tab2(r1) & "(z80))"
- Else
- OPS_ED(i).Code = " pokeword(z80, nextword(z80), z80->r_SP)"
- End If
- End If
- ' LD SP, HL
- If i = &HF9 Then
- OPS(i).OpCode = "LD"
- OPS(i).Operand1 = "SP"
- OPS(i).Operand2 = "HL"
- OPS(i).TStates = 6
- OPS(i).Code = " z80->r_SP = get_HL(z80)"
- End If
- ' PUSH qq
- If ((i shr 6) = &B11) AND ((i AND &B1111) = &B0101) Then
- r1 = (i shr 4) AND &B11
- OPS(i).OpCode = "PUSH"
- OPS(i).Operand1 = reg_tab3(r1)
- OPS(i).Operand2 = ""
- OPS(i).TStates = 11
- End If
- ' POP qq
- If ((i shr 6) = &B11) AND ((i AND &B1111) = &B0001) Then
- r1 = (i shr 4) AND &B11
- OPS(i).OpCode = "POP"
- OPS(i).Operand1 = reg_tab3(r1)
- OPS(i).Operand2 = ""
- OPS(i).TStates = 10
- End If
- ' Exchange, Block Transfer, and Search Group
- ' EX DE, HL
- If i = &HEB Then
- OPS(i).OpCode = "EX"
- OPS(i).Operand1 = "DE"
- OPS(i).Operand2 = "HL"
- OPS(i).TStates = 4
- End If
- ' EX AF, AF'
- If i = &H08 Then
- OPS(i).OpCode = "EX"
- OPS(i).Operand1 = "AF"
- OPS(i).Operand2 = "AF'"
- OPS(i).TStates = 4
- OPS(i).Code = " Dim temp As uShort" & chr(13, 10)
- OPS(i).Code += " temp = get_AF(z80)" & chr(13, 10)
- OPS(i).Code += " set_AF(z80, get_AF2(z80))" & chr(13, 10)
- OPS(i).Code += " set_AF2(z80, temp)"
- End If
- ' EXX
- If i = &HD9 Then
- OPS(i).OpCode = "EXX"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- End If
- ' EX (SP), HL
- If i = &HE3 Then
- OPS(i).OpCode = "EX"
- OPS(i).Operand1 = "(SP)"
- OPS(i).Operand2 = "HL"
- OPS(i).TStates = 19
- End If
- ' 8-Bit Arithmetic Group
- ' ADD A, r
- If (i shr 3) = &B10000 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "ADD"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = reg_tab1(r1)
- OPS(i).TStates = 4
- End If
- End If
- ' ADD A, n
- If i = &HC6 Then
- OPS(i).OpCode = "ADD"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- End If
- ' ADD A, (HL)
- If i = &H86 Then
- OPS(i).OpCode = "ADD"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(HL)"
- OPS(i).TStates = 7
- End If
- ' ADC A, r
- If (i shr 3) = &B10001 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "ADC"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = reg_tab1(r1)
- OPS(i).TStates = 4
- End If
- End If
- ' ADC A, n
- If i = &HCE Then
- OPS(i).OpCode = "ADC"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- End If
- ' ADC A, (HL)
- If i = &H8E Then
- OPS(i).OpCode = "ADC"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(HL)"
- OPS(i).TStates = 7
- End If
- ' SUB A, r
- If (i shr 3) = &B10010 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "SUB"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = reg_tab1(r1)
- OPS(i).TStates = 4
- End If
- End If
- ' SUB A, n
- If i = &HD6 Then
- OPS(i).OpCode = "SUB"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- End If
- ' SUB A, (HL)
- If i = &H96 Then
- OPS(i).OpCode = "SUB"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(HL)"
- OPS(i).TStates = 7
- End If
- ' SBC A, r
- If (i shr 3) = &B10011 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "SBC"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = reg_tab1(r1)
- OPS(i).TStates = 4
- End If
- End If
- ' SBC A, n
- If i = &HDE Then
- OPS(i).OpCode = "SBC"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- End If
- ' SBC A, (HL)
- If i = &H9E Then
- OPS(i).OpCode = "SBC"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(HL)"
- OPS(i).TStates = 7
- End If
- ' AND A, r
- If (i shr 3) = &B10100 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "AND"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = reg_tab1(r1)
- OPS(i).TStates = 4
- OPS(i).Code = " z80->r_A AND= z80->r_" & reg_tab1(r1) & Chr(13, 10)
- OPS(i).Code += " z80->f_S = BIT(z80->r_A, 7)" & Chr(13, 10)
- OPS(i).Code += " z80->f_Z = (z80->r_A = 0)" & Chr(13, 10)
- OPS(i).Code += " z80->f_H = -1" & Chr(13, 10)
- OPS(i).Code += " z80->f_PV = parity(z80->r_A)" & Chr(13, 10)
- OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
- OPS(i).Code += " z80->f_C = 0"
- End If
- End If
- ' AND A, n
- If i = &HE6 Then
- OPS(i).OpCode = "AND"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- End If
- ' AND A, (HL)
- If i = &HA6 Then
- OPS(i).OpCode = "AND"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(HL)"
- OPS(i).TStates = 7
- End If
- ' OR A, r
- If (i shr 3) = &B10110 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "OR"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = reg_tab1(r1)
- OPS(i).TStates = 4
- End If
- End If
- ' OR A, n
- If i = &HF6 Then
- OPS(i).OpCode = "OR"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- End If
- ' OR A, (HL)
- If i = &HB6 Then
- OPS(i).OpCode = "OR"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(HL)"
- OPS(i).TStates = 7
- End If
- ' XOR A, r
- If (i shr 3) = &B10101 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "XOR"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = reg_tab1(r1)
- OPS(i).TStates = 4
- OPS(i).Code = " z80->r_A XOR= z80->r_" & reg_tab1(r1) & Chr(13, 10)
- OPS(i).Code += " z80->f_S = BIT(z80->r_A, 7)" & Chr(13, 10)
- OPS(i).Code += " z80->f_Z = (z80->r_A = 0)" & Chr(13, 10)
- OPS(i).Code += " z80->f_H = 0" & Chr(13, 10)
- OPS(i).Code += " z80->f_PV = parity(z80->r_A)" & Chr(13, 10)
- OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
- OPS(i).Code += " z80->f_C = 0"
- End If
- End If
- ' XOR A, n
- If i = &HEE Then
- OPS(i).OpCode = "XOR"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- End If
- ' XOR A, (HL)
- If i = &HAE Then
- OPS(i).OpCode = "XOR"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(HL)"
- OPS(i).TStates = 7
- End If
- ' CP A, r
- If (i shr 3) = &B10111 Then
- r1 = i AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "CP"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = reg_tab1(r1)
- OPS(i).TStates = 4
- OPS(i).Code = " Dim tmp As uShort" & Chr(13, 10)
- OPS(i).Code += " tmp = (z80->r_A - z80->r_" & reg_tab1(r1) & ")" & Chr(13, 10)
- OPS(i).Code += " z80->f_S = BIT(tmp, 7)" & Chr(13, 10)
- OPS(i).Code += " z80->f_Z = (tmp = 0)" & Chr(13, 10)
- OPS(i).Code += " z80->f_H = BIT((z80->r_A AND &HF) - (z80->r_" & reg_tab1(r1) & " AND &HF), 4)" & Chr(13, 10)
- OPS(i).Code += " z80->f_PV = ((z80->r_A XOR z80->r_" & reg_tab1(r1) & ") AND (z80->r_A XOR tmp) AND &H80) <> 0" & Chr(13, 10)
- OPS(i).Code += " z80->f_N = -1" & Chr(13, 10)
- OPS(i).Code += " z80->f_C = ((z80->r_A - z80->r_" & reg_tab1(r1) & ") AND &H100) <> 0"
- End If
- End If
- ' CP A, n
- If i = &HFE Then
- OPS(i).OpCode = "CP"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "n"
- OPS(i).TStates = 7
- End If
- ' CP A, (HL)
- If i = &HBE Then
- OPS(i).OpCode = "CP"
- OPS(i).Operand1 = "A"
- OPS(i).Operand2 = "(HL)"
- OPS(i).TStates = 7
- End If
- ' INC r
- If ((i shr 6) = &B00) AND ((i AND &B111) = &B100) Then
- r1 = (i shr 3) AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "INC"
- OPS(i).Operand1 = reg_tab1(r1)
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- OPS(i).Code = " z80->f_PV = (z80->r_" & reg_tab1(r1) & " = &H7F)" & Chr(13, 10)
- OPS(i).Code += " z80->f_H = BIT(((z80->r_" & reg_tab1(r1) & " AND &HF) + 1), 4)" & Chr(13, 10)
- OPS(i).Code += " z80->r_" & reg_tab1(r1) & " += 1" & Chr(13, 10)
- OPS(i).Code += " z80->f_S = BIT(z80->r_" & reg_tab1(r1) & ", 7)" & Chr(13, 10)
- OPS(i).Code += " z80->f_Z = (z80->r_" & reg_tab1(r1) & " = 0)" & Chr(13, 10)
- OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
- End If
- End If
- ' INC (HL)
- If i = &H34 Then
- OPS(i).OpCode = "INC"
- OPS(i).Operand1 = "(HL)"
- OPS(i).Operand2 = ""
- OPS(i).TStates = 11
- End If
- ' DEC r
- If ((i shr 6) = &B00) AND ((i AND &B111) = &B101) Then
- r1 = (i shr 3) AND &B111
- If reg_tab1(r1) <> "(HL)" Then
- OPS(i).OpCode = "DEC"
- OPS(i).Operand1 = reg_tab1(r1)
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- OPS(i).Code = " z80->f_PV = (z80->r_" & reg_tab1(r1) & " = &H80)" & Chr(13, 10)
- OPS(i).Code += " z80->f_H = BIT(((z80->r_" & reg_tab1(r1) & " AND &HF) - 1), 4)" & Chr(13, 10)
- OPS(i).Code += " z80->r_" & reg_tab1(r1) & " -= 1" & Chr(13, 10)
- OPS(i).Code += " z80->f_S = BIT(z80->r_" & reg_tab1(r1) & ", 7)" & Chr(13, 10)
- OPS(i).Code += " z80->f_Z = (z80->r_" & reg_tab1(r1) & " = 0)" & Chr(13, 10)
- OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
- End If
- End If
- ' DEC (HL)
- If i = &H35 Then
- OPS(i).OpCode = "DEC"
- OPS(i).Operand1 = "(HL)"
- OPS(i).Operand2 = ""
- OPS(i).TStates = 11
- OPS(i).Code = " z80->f_PV = (peekbyte(z80, get_HL(z80)) = &H80)" & Chr(13, 10)
- OPS(i).Code += " z80->f_H = BIT(((peekbyte(z80, get_HL(z80)) AND &HF) - 1), 4)" & Chr(13, 10)
- OPS(i).Code += " pokebyte(z80, get_HL(z80), peekbyte(z80, get_HL(z80)) - 1)" & Chr(13, 10)
- OPS(i).Code += " z80->f_S = BIT(peekbyte(z80, get_HL(z80)), 7)" & Chr(13, 10)
- OPS(i).Code += " z80->f_Z = (peekbyte(z80, get_HL(z80)) = 0)" & Chr(13, 10)
- OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
- End If
- ' General-Purpose Arithmetic and CPU Control Groups
- ' DAA
- If i = &H27 Then
- OPS(i).OpCode = "DAA"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- End If
- ' CPL
- If i = &H2F Then
- OPS(i).OpCode = "CPL"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- End If
- ' CCF
- If i = &H3F Then
- OPS(i).OpCode = "CCF"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- End If
- ' SCF
- If i = &H37 Then
- OPS(i).OpCode = "SCF"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- End If
- ' NOP
- If i = &H00 Then
- OPS(i).OpCode = "NOP"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- OPS(i).Code = " ' Nothing to do!"
- End If
- ' HALT
- If i = &H76 Then
- OPS(i).OpCode = "HALT"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- End If
- ' DI
- If i = &HF3 Then
- OPS(i).OpCode = "DI"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- OPS(i).Code = " z80->IFF1 = 0"
- OPS(i).Code = " z80->IFF2 = 0"
- End If
- ' EI
- If i = &HFB Then
- OPS(i).OpCode = "EI"
- OPS(i).Operand1 = ""
- OPS(i).Operand2 = ""
- OPS(i).TStates = 4
- OPS(i).Code = " z80->IFF1 = -1"
- OPS(i).Code = " z80->IFF2 = -1"
- End If
- ' 16-Bit Arithmetic Group
- ' ADD HL, ss
- If ((i shr 6) = &B00) AND ((i AND &B1111) = &B1001) Then
- r1 = (i shr 4) AND &B11
- OPS(i).OpCode = "ADD"
- OPS(i).Operand1 = "HL"
- OPS(i).Operand2 = reg_tab2(r1)
- OPS(i).TStates = 11
- If reg_tab2(r1) <> "SP" Then
- OPS(i).Code = " Dim temp As uInteger" & chr(13, 10)
- OPS(i).Code += " temp = cuInt(get_HL(z80)) + cuInt(get_" & reg_tab2(r1) & "(z80))" & chr(13, 10)
- OPS(i).Code += " z80->f_C = BIT(temp, 16)" & chr(13, 10)
- OPS(i).Code += " temp = (get_HL(z80) AND &HFFF) + (get_" & reg_tab2(r1) & "(z80) AND &HFFF)" & chr(13, 10)
- OPS(i).Code += " z80->f_H = BIT(temp, 12)" & chr(13, 10)
- OPS(i).Code += " z80->f_N = 0" & chr(13, 10)
- OPS(i).Code += " set_HL(z80, get_HL(z80) + get_" & reg_tab2(r1) & "(z80))"
- Else
- OPS(i).Code = " Dim temp As uInteger" & chr(13, 10)
- OPS(i).Code += " temp = cuInt(get_HL(z80)) + cuInt(z80->r_SP)" & chr(13, 10)
- OPS(i).Code += " z80->f_C = BIT(temp, 16)" & chr(13, 10)
- OPS(i).Code += " temp = (get_HL(z80) AND &HFFF) + (z80->r_SP AND &HFFF)" & chr(13, 10)
- OPS(i).Code += " z80->f_H = BIT(temp, 12)" & chr(13, 10)
- OPS(i).Code += " z80->f_N = 0" & chr(13, 10)
- OPS(i).Code += " set_HL(z80, get_HL(z80) + z80->r_SP)"
- End If
- End If
- ' ADC HL, ss
- If ((i shr 6) = &B01) AND ((i AND &B1111) = &B1010) Then
- r1 = (i shr 4) AND &B11
- OPS_ED(i).OpCode = "ADC"
- OPS_ED(i).Operand1 = "HL"
- OPS_ED(i).Operand2 = reg_tab2(r1)
- OPS_ED(i).TStates = 15
- If reg_tab2(r1) <> "SP" Then
- Else
- End If
- End If
- ' SBC HL, ss
- If ((i shr 6) = &B01) AND ((i AND &B1111) = &B0010) Then
- r1 =
Add Comment
Please, Sign In to add comment