Guest User

Untitled

a guest
Apr 23rd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.93 KB | None | 0 0
  1. Type OPTYPE
  2. Value As Integer
  3. OpCode As String
  4. Operand1 As String
  5. Operand2 As String
  6. TStates As Integer
  7. Code As String
  8. End Type
  9.  
  10. Dim OPS(0 To 255) As OPType
  11. Dim OPS_CB(0 To 255) As OPType
  12. Dim OPS_DD(0 To 255) As OPType
  13. Dim OPS_ED(0 To 255) As OPType
  14. Dim OPS_FD(0 To 255) As OPType
  15.  
  16. Dim reg_tab1(0 To 7) As String => {"B", "C", "D", "E", "H", "L", "(HL)", "A"}
  17. Dim reg_tab2(0 To 3) As String => {"BC", "DE", "HL", "SP"}
  18. Dim reg_tab3(0 To 3) As String => {"BC", "DE", "HL", "AF"}
  19. Dim cc_tab1(0 To 7) As String => {"NZ", "Z", "NC", "C", "PO", "PE", "P", "M"}
  20. Dim p_tab1(0 To 7) As String => {"&H00", "&H08", "&H10", "&H18", "&H20", "&H28", "&H30", "&H38"}
  21.  
  22. For i = 0 To 255
  23. OPS(i).Value = i
  24.  
  25. ' 8-Bit Load Group
  26. ' LD r, r'
  27. If (i shr 6) = &B01 Then
  28. r1 = (i shr 3) AND &B111
  29. r2 = i AND &B111
  30. If reg_tab1(r1) <> "(HL)" AND reg_tab1(r2) <> "(HL)" Then
  31. OPS(i).OpCode = "LD"
  32. OPS(i).Operand1 = reg_tab1(r1)
  33. OPS(i).Operand2 = reg_tab1(r2)
  34. OPS(i).TStates = 4
  35. If r1 <> r2 Then
  36. OPS(i).Code = " z80->r_" & reg_tab1(r1) & " = z80->r_" & reg_tab1(r2)
  37. Else
  38. OPS(i).Code = " ' Nothing to do!"
  39. End If
  40. End If
  41. End If
  42. ' LD r, n
  43. If ((i shr 6) = &B00) AND ((i AND &B111) = &B110) Then
  44. r1 = (i shr 3) AND &B111
  45. If reg_tab1(r1) <> "(HL)" Then
  46. OPS(i).OpCode = "LD"
  47. OPS(i).Operand1 = reg_tab1(r1)
  48. OPS(i).Operand2 = "n"
  49. OPS(i).TStates = 7
  50. OPS(i).Code = " z80->r_" & reg_tab1(r1) & " = nextbyte(z80)"
  51. End If
  52. End If
  53. ' LD r, (HL)
  54. If (i shr 6) = &B01 Then
  55. r1 = (i shr 3) AND &B111
  56. r2 = i AND &B111
  57. If reg_tab1(r1) <> "(HL)" AND reg_tab1(r2) = "(HL)" Then
  58. OPS(i).OpCode = "LD"
  59. OPS(i).Operand1 = reg_tab1(r1)
  60. OPS(i).Operand2 = reg_tab1(r2)
  61. OPS(i).TStates = 7
  62. OPS(i).Code = " z80->r_" & reg_tab1(r1) & " = peekbyte(z80, get_HL(z80))"
  63. End If
  64. End If
  65. ' LD r, (IX+d)
  66. If ((i shr 6) = &B01) AND ((i AND &B111) = &B110) Then
  67. r1 = (i shr 3) AND &B111
  68. If reg_tab1(r1) <> "(HL)" Then
  69. OPS_DD(i).OpCode = "LD"
  70. OPS_DD(i).Operand1 = reg_tab1(r1)
  71. OPS_DD(i).Operand2 = "(IX+d)"
  72. OPS_DD(i).TStates = 19
  73. OPS_DD(i).Code = " z80->r_" & reg_tab1(r1) & " = peekbyte(z80, z80->r_IX + CAST(byte, nextbyte(z80)))"
  74. End If
  75. End If
  76. ' LD r, (IY+d)
  77. If ((i shr 6) = &B01) AND ((i AND &B111) = &B110) Then
  78. r1 = (i shr 3) AND &B111
  79. If reg_tab1(r1) <> "(HL)" Then
  80. OPS_FD(i).OpCode = "LD"
  81. OPS_FD(i).Operand1 = reg_tab1(r1)
  82. OPS_FD(i).Operand2 = "(IY+d)"
  83. OPS_FD(i).TStates = 19
  84. OPS_FD(i).Code = " z80->r_" & reg_tab1(r1) & " = peekbyte(z80, z80->r_IY + CAST(byte, nextbyte(z80)))"
  85. End If
  86. End If
  87. ' LD (HL), r
  88. If (i shr 6) = &B01 Then
  89. r1 = (i shr 3) AND &B111
  90. r2 = i AND &B111
  91. If reg_tab1(r1) = "(HL)" AND reg_tab1(r2) <> "(HL)" Then
  92. OPS(i).OpCode = "LD"
  93. OPS(i).Operand1 = reg_tab1(r1)
  94. OPS(i).Operand2 = reg_tab1(r2)
  95. OPS(i).TStates = 7
  96. OPS(i).Code = " pokebyte(z80, get_HL(z80), z80->r_" & reg_tab1(r2) & ")"
  97. End If
  98. End If
  99. ' LD (IX+d), r
  100. If (i shr 3) = &B01110 Then
  101. r1 = i AND &B111
  102. If reg_tab1(r1) <> "(HL)" Then
  103. OPS_DD(i).OpCode = "LD"
  104. OPS_DD(i).Operand1 = "(IX+d)"
  105. OPS_DD(i).Operand2 = reg_tab1(r1)
  106. OPS_DD(i).TStates = 19
  107. OPS_DD(i).Code = " pokebyte(z80, z80->r_IX + CAST(byte, nextbyte(z80)), z80->r_" & reg_tab1(r1) & ")"
  108. End If
  109. End If
  110. ' LD (IY+d), r
  111. If (i shr 3) = &B01110 Then
  112. r1 = i AND &B111
  113. If reg_tab1(r1) <> "(HL)" Then
  114. OPS_FD(i).OpCode = "LD"
  115. OPS_FD(i).Operand1 = "(IY+d)"
  116. OPS_FD(i).Operand2 = reg_tab1(r1)
  117. OPS_FD(i).TStates = 19
  118. OPS_FD(i).Code = " pokebyte(z80, z80->r_IY + CAST(byte, nextbyte(z80)), z80->r_" & reg_tab1(r1) & ")"
  119. End If
  120. End If
  121. ' LD (HL), n
  122. If i = &H36 Then
  123. OPS(i).OpCode = "LD"
  124. OPS(i).Operand1 = "(HL)"
  125. OPS(i).Operand2 = "n"
  126. OPS(i).TStates = 10
  127. OPS(i).Code = " pokebyte(z80, get_HL(z80), nextbyte(z80))"
  128. End If
  129. ' LD (IX+d), n
  130. If i = &H36 Then
  131. OPS_DD(i).OpCode = "LD"
  132. OPS_DD(i).Operand1 = "(IX+d)"
  133. OPS_DD(i).Operand2 = "n"
  134. OPS_DD(i).TStates = 19
  135. OPS_DD(i).Code = " Dim d As uByte" & Chr(13, 10)
  136. OPS_DD(i).Code += " d = nextbyte(z80)" & Chr(13, 10)
  137. OPS_DD(i).Code += " pokebyte(z80, z80->r_IX + CAST(byte, d), nextbyte(z80))"
  138. End If
  139. ' LD (IY+d), n
  140. If i = &H36 Then
  141. OPS_FD(i).OpCode = "LD"
  142. OPS_FD(i).Operand1 = "(IY+d)"
  143. OPS_FD(i).Operand2 = "n"
  144. OPS_FD(i).TStates = 19
  145. OPS_FD(i).Code = " Dim d As uByte" & Chr(13, 10)
  146. OPS_FD(i).Code += " d = nextbyte(z80)" & Chr(13, 10)
  147. OPS_FD(i).Code += " pokebyte(z80, z80->r_IY + CAST(byte, d), nextbyte(z80))"
  148. End If
  149. ' LD A, (BC)
  150. If i = &H0A Then
  151. OPS(i).OpCode = "LD"
  152. OPS(i).Operand1 = "A"
  153. OPS(i).Operand2 = "(BC)"
  154. OPS(i).TStates = 7
  155. OPS(i).Code = " z80->r_A = peekbyte(z80, get_BC(z80))"
  156. End If
  157. ' LD A, (DE)
  158. If i = &H1A Then
  159. OPS(i).OpCode = "LD"
  160. OPS(i).Operand1 = "A"
  161. OPS(i).Operand2 = "(DE)"
  162. OPS(i).TStates = 7
  163. OPS(i).Code = " z80->r_A = peekbyte(z80, get_DE(z80))"
  164. End If
  165. ' LD A, (nn)
  166. If i = &H3A Then
  167. OPS(i).OpCode = "LD"
  168. OPS(i).Operand1 = "A"
  169. OPS(i).Operand2 = "(nn)"
  170. OPS(i).TStates = 13
  171. OPS(i).Code = " z80->r_A = peekbyte(z80, nextword(z80))"
  172. End If
  173. ' LD (BC), A
  174. If i = &H02 Then
  175. OPS(i).OpCode = "LD"
  176. OPS(i).Operand1 = "(BC)"
  177. OPS(i).Operand2 = "A"
  178. OPS(i).TStates = 7
  179. OPS(i).Code = " pokebyte(z80, get_BC(z80), z80->r_A)"
  180. End If
  181. ' LD (DE), A
  182. If i = &H12 Then
  183. OPS(i).OpCode = "LD"
  184. OPS(i).Operand1 = "(DE)"
  185. OPS(i).Operand2 = "A"
  186. OPS(i).TStates = 7
  187. OPS(i).Code = " pokebyte(z80, get_DE(z80), z80->r_A)"
  188. End If
  189. ' LD (nn), A
  190. If i = &H32 Then
  191. OPS(i).OpCode = "LD"
  192. OPS(i).Operand1 = "(nn)"
  193. OPS(i).Operand2 = "A"
  194. OPS(i).TStates = 13
  195. OPS(i).Code = " pokebyte(z80, nextword(z80), z80->r_A)"
  196. End If
  197. ' LD A, I
  198. If i = &H57 Then
  199. OPS_ED(i).OpCode = "LD"
  200. OPS_ED(i).Operand1 = "A"
  201. OPS_ED(i).Operand2 = "I"
  202. OPS_ED(i).TStates = 9
  203. OPS_ED(i).Code = " z80->r_A = z80->r_I" & Chr(13, 10)
  204. OPS_ED(i).Code += " z80->f_S = BIT(z80->r_I, 7)" & Chr(13, 10)
  205. OPS_ED(i).Code += " z80->f_Z = (z80->r_I = 0)" & Chr(13, 10)
  206. OPS_ED(i).Code += " z80->f_H = 0" & Chr(13, 10)
  207. OPS_ED(i).Code += " z80->f_PV = z80->IFF2" & Chr(13, 10)
  208. OPS_ED(i).Code += " z80->f_N = 0"
  209. End If
  210. ' LD A, R
  211. If i = &H5F Then
  212. OPS_ED(i).OpCode = "LD"
  213. OPS_ED(i).Operand1 = "A"
  214. OPS_ED(i).Operand2 = "R"
  215. OPS_ED(i).TStates = 9
  216. OPS_ED(i).Code = " z80->r_A = z80->r_R" & Chr(13, 10)
  217. OPS_ED(i).Code += " z80->f_S = BIT(z80->r_R, 7)" & Chr(13, 10)
  218. OPS_ED(i).Code += " z80->f_Z = (z80->r_R = 0)" & Chr(13, 10)
  219. OPS_ED(i).Code += " z80->f_H = 0" & Chr(13, 10)
  220. OPS_ED(i).Code += " z80->f_PV = z80->IFF2" & Chr(13, 10)
  221. OPS_ED(i).Code += " z80->f_N = 0"
  222. End If
  223. ' LD I, A
  224. If i = &H47 Then
  225. OPS_ED(i).OpCode = "LD"
  226. OPS_ED(i).Operand1 = "I"
  227. OPS_ED(i).Operand2 = "A"
  228. OPS_ED(i).TStates = 9
  229. OPS_ED(i).Code = " z80->r_I = z80->r_A"
  230. End If
  231. ' LD R, A
  232. If i = &H4F Then
  233. OPS_ED(i).OpCode = "LD"
  234. OPS_ED(i).Operand1 = "R"
  235. OPS_ED(i).Operand2 = "A"
  236. OPS_ED(i).TStates = 9
  237. OPS_ED(i).Code = " z80->r_R = z80->r_A"
  238. End If
  239. ' 16-Bit Load Group
  240. ' LD dd, nn
  241. If (i shr 6) = &B00 AND (i AND &B1111) = &B0001 Then
  242. r1 = (i shr 4) AND &B11
  243. OPS(i).OpCode = "LD"
  244. OPS(i).Operand1 = reg_tab2(r1)
  245. OPS(i).Operand2 = "nn"
  246. OPS(i).TStates = 10
  247. If reg_tab2(r1) <> "SP" Then
  248. OPS(i).Code = " set_" & reg_tab2(r1) & "(z80, nextword(z80))"
  249. Else
  250. OPS(i).Code = " z80->r_SP = nextword(z80)"
  251. End If
  252. End If
  253. ' LD IX, nn
  254. If i = &H21 Then
  255. OPS_DD(i).OpCode = "LD"
  256. OPS_DD(i).Operand1 = "IX"
  257. OPS_DD(i).Operand2 = "nn"
  258. OPS_DD(i).TStates = 14
  259. End If
  260. ' LD IY, nn
  261. If i = &H21 Then
  262. OPS_FD(i).OpCode = "LD"
  263. OPS_FD(i).Operand1 = "IY"
  264. OPS_FD(i).Operand2 = "nn"
  265. OPS_FD(i).TStates = 14
  266. End If
  267. ' LD HL, (nn)
  268. If i = &H2A Then
  269. OPS(i).OpCode = "LD"
  270. OPS(i).Operand1 = "HL"
  271. OPS(i).Operand2 = "(nn)"
  272. OPS(i).TStates = 16
  273. OPS(i).Code = " set_HL(z80, peekword(z80, nextword(z80)))"
  274. End If
  275. ' LD dd, (nn)
  276. If (i shr 6) = &B01 AND (i AND &B1111) = &B1011 Then
  277. r1 = (i shr 4) AND &B11
  278. OPS_ED(i).OpCode = "LD"
  279. OPS_ED(i).Operand1 = reg_tab2(r1)
  280. OPS_ED(i).Operand2 = "(nn)"
  281. OPS_ED(i).TStates = 20
  282. If reg_tab2(r1) <> "SP" Then
  283. OPS_ED(i).Code = " set_" & reg_tab2(r1) & "(z80, peekword(z80, nextword(z80)))"
  284. Else
  285. OPS_ED(i).Code = " z80->r_SP = peekword(z80, nextword(z80))"
  286. End If
  287. End If
  288. ' LD IX, (nn)
  289. If i = &H2A Then
  290. OPS_DD(i).OpCode = "LD"
  291. OPS_DD(i).Operand1 = "IX"
  292. OPS_DD(i).Operand2 = "(nn)"
  293. OPS_DD(i).TStates = 20
  294. OPS_DD(i).Code = " z80->r_IX = peekword(z80, nextword(z80))"
  295. End If
  296. ' LD IY, (nn)
  297. If i = &H2A Then
  298. OPS_FD(i).OpCode = "LD"
  299. OPS_FD(i).Operand1 = "IY"
  300. OPS_FD(i).Operand2 = "(nn)"
  301. OPS_FD(i).TStates = 20
  302. OPS_FD(i).Code = " z80->r_IY = peekword(z80, nextword(z80))"
  303. End If
  304. ' LD (nn), HL
  305. If i = &H22 Then
  306. OPS(i).OpCode = "LD"
  307. OPS(i).Operand1 = "(nn)"
  308. OPS(i).Operand2 = "HL"
  309. OPS(i).TStates = 16
  310. OPS(i).Code = " pokeword(z80, nextword(z80), get_HL(z80))"
  311. End If
  312. ' LD (nn), dd
  313. If (i shr 6) = &B01 AND (i AND &B1111) = &B0011 Then
  314. r1 = (i shr 4) AND &B11
  315. OPS_ED(i).OpCode = "LD"
  316. OPS_ED(i).Operand1 = "(nn)"
  317. OPS_ED(i).Operand2 = reg_tab2(r1)
  318. OPS_ED(i).TStates = 20
  319. If reg_tab2(r1) <> "SP" Then
  320. OPS_ED(i).Code = " pokeword(z80, nextword(z80), get_" & reg_tab2(r1) & "(z80))"
  321. Else
  322. OPS_ED(i).Code = " pokeword(z80, nextword(z80), z80->r_SP)"
  323. End If
  324. End If
  325. ' LD SP, HL
  326. If i = &HF9 Then
  327. OPS(i).OpCode = "LD"
  328. OPS(i).Operand1 = "SP"
  329. OPS(i).Operand2 = "HL"
  330. OPS(i).TStates = 6
  331. OPS(i).Code = " z80->r_SP = get_HL(z80)"
  332. End If
  333. ' PUSH qq
  334. If ((i shr 6) = &B11) AND ((i AND &B1111) = &B0101) Then
  335. r1 = (i shr 4) AND &B11
  336. OPS(i).OpCode = "PUSH"
  337. OPS(i).Operand1 = reg_tab3(r1)
  338. OPS(i).Operand2 = ""
  339. OPS(i).TStates = 11
  340. End If
  341. ' POP qq
  342. If ((i shr 6) = &B11) AND ((i AND &B1111) = &B0001) Then
  343. r1 = (i shr 4) AND &B11
  344. OPS(i).OpCode = "POP"
  345. OPS(i).Operand1 = reg_tab3(r1)
  346. OPS(i).Operand2 = ""
  347. OPS(i).TStates = 10
  348. End If
  349. ' Exchange, Block Transfer, and Search Group
  350. ' EX DE, HL
  351. If i = &HEB Then
  352. OPS(i).OpCode = "EX"
  353. OPS(i).Operand1 = "DE"
  354. OPS(i).Operand2 = "HL"
  355. OPS(i).TStates = 4
  356. End If
  357. ' EX AF, AF'
  358. If i = &H08 Then
  359. OPS(i).OpCode = "EX"
  360. OPS(i).Operand1 = "AF"
  361. OPS(i).Operand2 = "AF'"
  362. OPS(i).TStates = 4
  363. OPS(i).Code = " Dim temp As uShort" & chr(13, 10)
  364. OPS(i).Code += " temp = get_AF(z80)" & chr(13, 10)
  365. OPS(i).Code += " set_AF(z80, get_AF2(z80))" & chr(13, 10)
  366. OPS(i).Code += " set_AF2(z80, temp)"
  367. End If
  368. ' EXX
  369. If i = &HD9 Then
  370. OPS(i).OpCode = "EXX"
  371. OPS(i).Operand1 = ""
  372. OPS(i).Operand2 = ""
  373. OPS(i).TStates = 4
  374. End If
  375. ' EX (SP), HL
  376. If i = &HE3 Then
  377. OPS(i).OpCode = "EX"
  378. OPS(i).Operand1 = "(SP)"
  379. OPS(i).Operand2 = "HL"
  380. OPS(i).TStates = 19
  381. End If
  382. ' 8-Bit Arithmetic Group
  383. ' ADD A, r
  384. If (i shr 3) = &B10000 Then
  385. r1 = i AND &B111
  386. If reg_tab1(r1) <> "(HL)" Then
  387. OPS(i).OpCode = "ADD"
  388. OPS(i).Operand1 = "A"
  389. OPS(i).Operand2 = reg_tab1(r1)
  390. OPS(i).TStates = 4
  391. End If
  392. End If
  393. ' ADD A, n
  394. If i = &HC6 Then
  395. OPS(i).OpCode = "ADD"
  396. OPS(i).Operand1 = "A"
  397. OPS(i).Operand2 = "n"
  398. OPS(i).TStates = 7
  399. End If
  400. ' ADD A, (HL)
  401. If i = &H86 Then
  402. OPS(i).OpCode = "ADD"
  403. OPS(i).Operand1 = "A"
  404. OPS(i).Operand2 = "(HL)"
  405. OPS(i).TStates = 7
  406. End If
  407.  
  408. ' ADC A, r
  409. If (i shr 3) = &B10001 Then
  410. r1 = i AND &B111
  411. If reg_tab1(r1) <> "(HL)" Then
  412. OPS(i).OpCode = "ADC"
  413. OPS(i).Operand1 = "A"
  414. OPS(i).Operand2 = reg_tab1(r1)
  415. OPS(i).TStates = 4
  416. End If
  417. End If
  418. ' ADC A, n
  419. If i = &HCE Then
  420. OPS(i).OpCode = "ADC"
  421. OPS(i).Operand1 = "A"
  422. OPS(i).Operand2 = "n"
  423. OPS(i).TStates = 7
  424. End If
  425. ' ADC A, (HL)
  426. If i = &H8E Then
  427. OPS(i).OpCode = "ADC"
  428. OPS(i).Operand1 = "A"
  429. OPS(i).Operand2 = "(HL)"
  430. OPS(i).TStates = 7
  431. End If
  432.  
  433. ' SUB A, r
  434. If (i shr 3) = &B10010 Then
  435. r1 = i AND &B111
  436. If reg_tab1(r1) <> "(HL)" Then
  437. OPS(i).OpCode = "SUB"
  438. OPS(i).Operand1 = "A"
  439. OPS(i).Operand2 = reg_tab1(r1)
  440. OPS(i).TStates = 4
  441. End If
  442. End If
  443. ' SUB A, n
  444. If i = &HD6 Then
  445. OPS(i).OpCode = "SUB"
  446. OPS(i).Operand1 = "A"
  447. OPS(i).Operand2 = "n"
  448. OPS(i).TStates = 7
  449. End If
  450. ' SUB A, (HL)
  451. If i = &H96 Then
  452. OPS(i).OpCode = "SUB"
  453. OPS(i).Operand1 = "A"
  454. OPS(i).Operand2 = "(HL)"
  455. OPS(i).TStates = 7
  456. End If
  457.  
  458. ' SBC A, r
  459. If (i shr 3) = &B10011 Then
  460. r1 = i AND &B111
  461. If reg_tab1(r1) <> "(HL)" Then
  462. OPS(i).OpCode = "SBC"
  463. OPS(i).Operand1 = "A"
  464. OPS(i).Operand2 = reg_tab1(r1)
  465. OPS(i).TStates = 4
  466. End If
  467. End If
  468. ' SBC A, n
  469. If i = &HDE Then
  470. OPS(i).OpCode = "SBC"
  471. OPS(i).Operand1 = "A"
  472. OPS(i).Operand2 = "n"
  473. OPS(i).TStates = 7
  474. End If
  475. ' SBC A, (HL)
  476. If i = &H9E Then
  477. OPS(i).OpCode = "SBC"
  478. OPS(i).Operand1 = "A"
  479. OPS(i).Operand2 = "(HL)"
  480. OPS(i).TStates = 7
  481. End If
  482.  
  483. ' AND A, r
  484. If (i shr 3) = &B10100 Then
  485. r1 = i AND &B111
  486. If reg_tab1(r1) <> "(HL)" Then
  487. OPS(i).OpCode = "AND"
  488. OPS(i).Operand1 = "A"
  489. OPS(i).Operand2 = reg_tab1(r1)
  490. OPS(i).TStates = 4
  491. OPS(i).Code = " z80->r_A AND= z80->r_" & reg_tab1(r1) & Chr(13, 10)
  492. OPS(i).Code += " z80->f_S = BIT(z80->r_A, 7)" & Chr(13, 10)
  493. OPS(i).Code += " z80->f_Z = (z80->r_A = 0)" & Chr(13, 10)
  494. OPS(i).Code += " z80->f_H = -1" & Chr(13, 10)
  495. OPS(i).Code += " z80->f_PV = parity(z80->r_A)" & Chr(13, 10)
  496. OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
  497. OPS(i).Code += " z80->f_C = 0"
  498. End If
  499. End If
  500. ' AND A, n
  501. If i = &HE6 Then
  502. OPS(i).OpCode = "AND"
  503. OPS(i).Operand1 = "A"
  504. OPS(i).Operand2 = "n"
  505. OPS(i).TStates = 7
  506. End If
  507. ' AND A, (HL)
  508. If i = &HA6 Then
  509. OPS(i).OpCode = "AND"
  510. OPS(i).Operand1 = "A"
  511. OPS(i).Operand2 = "(HL)"
  512. OPS(i).TStates = 7
  513. End If
  514. ' OR A, r
  515. If (i shr 3) = &B10110 Then
  516. r1 = i AND &B111
  517. If reg_tab1(r1) <> "(HL)" Then
  518. OPS(i).OpCode = "OR"
  519. OPS(i).Operand1 = "A"
  520. OPS(i).Operand2 = reg_tab1(r1)
  521. OPS(i).TStates = 4
  522. End If
  523. End If
  524. ' OR A, n
  525. If i = &HF6 Then
  526. OPS(i).OpCode = "OR"
  527. OPS(i).Operand1 = "A"
  528. OPS(i).Operand2 = "n"
  529. OPS(i).TStates = 7
  530. End If
  531. ' OR A, (HL)
  532. If i = &HB6 Then
  533. OPS(i).OpCode = "OR"
  534. OPS(i).Operand1 = "A"
  535. OPS(i).Operand2 = "(HL)"
  536. OPS(i).TStates = 7
  537. End If
  538.  
  539. ' XOR A, r
  540. If (i shr 3) = &B10101 Then
  541. r1 = i AND &B111
  542. If reg_tab1(r1) <> "(HL)" Then
  543. OPS(i).OpCode = "XOR"
  544. OPS(i).Operand1 = "A"
  545. OPS(i).Operand2 = reg_tab1(r1)
  546. OPS(i).TStates = 4
  547. OPS(i).Code = " z80->r_A XOR= z80->r_" & reg_tab1(r1) & Chr(13, 10)
  548. OPS(i).Code += " z80->f_S = BIT(z80->r_A, 7)" & Chr(13, 10)
  549. OPS(i).Code += " z80->f_Z = (z80->r_A = 0)" & Chr(13, 10)
  550. OPS(i).Code += " z80->f_H = 0" & Chr(13, 10)
  551. OPS(i).Code += " z80->f_PV = parity(z80->r_A)" & Chr(13, 10)
  552. OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
  553. OPS(i).Code += " z80->f_C = 0"
  554. End If
  555. End If
  556. ' XOR A, n
  557. If i = &HEE Then
  558. OPS(i).OpCode = "XOR"
  559. OPS(i).Operand1 = "A"
  560. OPS(i).Operand2 = "n"
  561. OPS(i).TStates = 7
  562. End If
  563. ' XOR A, (HL)
  564. If i = &HAE Then
  565. OPS(i).OpCode = "XOR"
  566. OPS(i).Operand1 = "A"
  567. OPS(i).Operand2 = "(HL)"
  568. OPS(i).TStates = 7
  569. End If
  570.  
  571. ' CP A, r
  572. If (i shr 3) = &B10111 Then
  573. r1 = i AND &B111
  574. If reg_tab1(r1) <> "(HL)" Then
  575. OPS(i).OpCode = "CP"
  576. OPS(i).Operand1 = "A"
  577. OPS(i).Operand2 = reg_tab1(r1)
  578. OPS(i).TStates = 4
  579. OPS(i).Code = " Dim tmp As uShort" & Chr(13, 10)
  580. OPS(i).Code += " tmp = (z80->r_A - z80->r_" & reg_tab1(r1) & ")" & Chr(13, 10)
  581. OPS(i).Code += " z80->f_S = BIT(tmp, 7)" & Chr(13, 10)
  582. OPS(i).Code += " z80->f_Z = (tmp = 0)" & Chr(13, 10)
  583. OPS(i).Code += " z80->f_H = BIT((z80->r_A AND &HF) - (z80->r_" & reg_tab1(r1) & " AND &HF), 4)" & Chr(13, 10)
  584. 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)
  585. OPS(i).Code += " z80->f_N = -1" & Chr(13, 10)
  586. OPS(i).Code += " z80->f_C = ((z80->r_A - z80->r_" & reg_tab1(r1) & ") AND &H100) <> 0"
  587. End If
  588. End If
  589. ' CP A, n
  590. If i = &HFE Then
  591. OPS(i).OpCode = "CP"
  592. OPS(i).Operand1 = "A"
  593. OPS(i).Operand2 = "n"
  594. OPS(i).TStates = 7
  595. End If
  596. ' CP A, (HL)
  597. If i = &HBE Then
  598. OPS(i).OpCode = "CP"
  599. OPS(i).Operand1 = "A"
  600. OPS(i).Operand2 = "(HL)"
  601. OPS(i).TStates = 7
  602. End If
  603.  
  604. ' INC r
  605. If ((i shr 6) = &B00) AND ((i AND &B111) = &B100) Then
  606. r1 = (i shr 3) AND &B111
  607. If reg_tab1(r1) <> "(HL)" Then
  608. OPS(i).OpCode = "INC"
  609. OPS(i).Operand1 = reg_tab1(r1)
  610. OPS(i).Operand2 = ""
  611. OPS(i).TStates = 4
  612. OPS(i).Code = " z80->f_PV = (z80->r_" & reg_tab1(r1) & " = &H7F)" & Chr(13, 10)
  613. OPS(i).Code += " z80->f_H = BIT(((z80->r_" & reg_tab1(r1) & " AND &HF) + 1), 4)" & Chr(13, 10)
  614. OPS(i).Code += " z80->r_" & reg_tab1(r1) & " += 1" & Chr(13, 10)
  615. OPS(i).Code += " z80->f_S = BIT(z80->r_" & reg_tab1(r1) & ", 7)" & Chr(13, 10)
  616. OPS(i).Code += " z80->f_Z = (z80->r_" & reg_tab1(r1) & " = 0)" & Chr(13, 10)
  617. OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
  618. End If
  619. End If
  620.  
  621. ' INC (HL)
  622. If i = &H34 Then
  623. OPS(i).OpCode = "INC"
  624. OPS(i).Operand1 = "(HL)"
  625. OPS(i).Operand2 = ""
  626. OPS(i).TStates = 11
  627. End If
  628.  
  629. ' DEC r
  630. If ((i shr 6) = &B00) AND ((i AND &B111) = &B101) Then
  631. r1 = (i shr 3) AND &B111
  632. If reg_tab1(r1) <> "(HL)" Then
  633. OPS(i).OpCode = "DEC"
  634. OPS(i).Operand1 = reg_tab1(r1)
  635. OPS(i).Operand2 = ""
  636. OPS(i).TStates = 4
  637. OPS(i).Code = " z80->f_PV = (z80->r_" & reg_tab1(r1) & " = &H80)" & Chr(13, 10)
  638. OPS(i).Code += " z80->f_H = BIT(((z80->r_" & reg_tab1(r1) & " AND &HF) - 1), 4)" & Chr(13, 10)
  639. OPS(i).Code += " z80->r_" & reg_tab1(r1) & " -= 1" & Chr(13, 10)
  640. OPS(i).Code += " z80->f_S = BIT(z80->r_" & reg_tab1(r1) & ", 7)" & Chr(13, 10)
  641. OPS(i).Code += " z80->f_Z = (z80->r_" & reg_tab1(r1) & " = 0)" & Chr(13, 10)
  642. OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
  643. End If
  644. End If
  645.  
  646. ' DEC (HL)
  647. If i = &H35 Then
  648. OPS(i).OpCode = "DEC"
  649. OPS(i).Operand1 = "(HL)"
  650. OPS(i).Operand2 = ""
  651. OPS(i).TStates = 11
  652. OPS(i).Code = " z80->f_PV = (peekbyte(z80, get_HL(z80)) = &H80)" & Chr(13, 10)
  653. OPS(i).Code += " z80->f_H = BIT(((peekbyte(z80, get_HL(z80)) AND &HF) - 1), 4)" & Chr(13, 10)
  654. OPS(i).Code += " pokebyte(z80, get_HL(z80), peekbyte(z80, get_HL(z80)) - 1)" & Chr(13, 10)
  655. OPS(i).Code += " z80->f_S = BIT(peekbyte(z80, get_HL(z80)), 7)" & Chr(13, 10)
  656. OPS(i).Code += " z80->f_Z = (peekbyte(z80, get_HL(z80)) = 0)" & Chr(13, 10)
  657. OPS(i).Code += " z80->f_N = 0" & Chr(13, 10)
  658. End If
  659.  
  660. ' General-Purpose Arithmetic and CPU Control Groups
  661. ' DAA
  662. If i = &H27 Then
  663. OPS(i).OpCode = "DAA"
  664. OPS(i).Operand1 = ""
  665. OPS(i).Operand2 = ""
  666. OPS(i).TStates = 4
  667. End If
  668. ' CPL
  669. If i = &H2F Then
  670. OPS(i).OpCode = "CPL"
  671. OPS(i).Operand1 = ""
  672. OPS(i).Operand2 = ""
  673. OPS(i).TStates = 4
  674. End If
  675. ' CCF
  676. If i = &H3F Then
  677. OPS(i).OpCode = "CCF"
  678. OPS(i).Operand1 = ""
  679. OPS(i).Operand2 = ""
  680. OPS(i).TStates = 4
  681. End If
  682. ' SCF
  683. If i = &H37 Then
  684. OPS(i).OpCode = "SCF"
  685. OPS(i).Operand1 = ""
  686. OPS(i).Operand2 = ""
  687. OPS(i).TStates = 4
  688. End If
  689. ' NOP
  690. If i = &H00 Then
  691. OPS(i).OpCode = "NOP"
  692. OPS(i).Operand1 = ""
  693. OPS(i).Operand2 = ""
  694. OPS(i).TStates = 4
  695. OPS(i).Code = " ' Nothing to do!"
  696. End If
  697. ' HALT
  698. If i = &H76 Then
  699. OPS(i).OpCode = "HALT"
  700. OPS(i).Operand1 = ""
  701. OPS(i).Operand2 = ""
  702. OPS(i).TStates = 4
  703. End If
  704. ' DI
  705. If i = &HF3 Then
  706. OPS(i).OpCode = "DI"
  707. OPS(i).Operand1 = ""
  708. OPS(i).Operand2 = ""
  709. OPS(i).TStates = 4
  710. OPS(i).Code = " z80->IFF1 = 0"
  711. OPS(i).Code = " z80->IFF2 = 0"
  712. End If
  713. ' EI
  714. If i = &HFB Then
  715. OPS(i).OpCode = "EI"
  716. OPS(i).Operand1 = ""
  717. OPS(i).Operand2 = ""
  718. OPS(i).TStates = 4
  719. OPS(i).Code = " z80->IFF1 = -1"
  720. OPS(i).Code = " z80->IFF2 = -1"
  721. End If
  722. ' 16-Bit Arithmetic Group
  723. ' ADD HL, ss
  724. If ((i shr 6) = &B00) AND ((i AND &B1111) = &B1001) Then
  725. r1 = (i shr 4) AND &B11
  726. OPS(i).OpCode = "ADD"
  727. OPS(i).Operand1 = "HL"
  728. OPS(i).Operand2 = reg_tab2(r1)
  729. OPS(i).TStates = 11
  730. If reg_tab2(r1) <> "SP" Then
  731. OPS(i).Code = " Dim temp As uInteger" & chr(13, 10)
  732. OPS(i).Code += " temp = cuInt(get_HL(z80)) + cuInt(get_" & reg_tab2(r1) & "(z80))" & chr(13, 10)
  733. OPS(i).Code += " z80->f_C = BIT(temp, 16)" & chr(13, 10)
  734. OPS(i).Code += " temp = (get_HL(z80) AND &HFFF) + (get_" & reg_tab2(r1) & "(z80) AND &HFFF)" & chr(13, 10)
  735. OPS(i).Code += " z80->f_H = BIT(temp, 12)" & chr(13, 10)
  736. OPS(i).Code += " z80->f_N = 0" & chr(13, 10)
  737. OPS(i).Code += " set_HL(z80, get_HL(z80) + get_" & reg_tab2(r1) & "(z80))"
  738. Else
  739. OPS(i).Code = " Dim temp As uInteger" & chr(13, 10)
  740. OPS(i).Code += " temp = cuInt(get_HL(z80)) + cuInt(z80->r_SP)" & chr(13, 10)
  741. OPS(i).Code += " z80->f_C = BIT(temp, 16)" & chr(13, 10)
  742. OPS(i).Code += " temp = (get_HL(z80) AND &HFFF) + (z80->r_SP AND &HFFF)" & chr(13, 10)
  743. OPS(i).Code += " z80->f_H = BIT(temp, 12)" & chr(13, 10)
  744. OPS(i).Code += " z80->f_N = 0" & chr(13, 10)
  745. OPS(i).Code += " set_HL(z80, get_HL(z80) + z80->r_SP)"
  746. End If
  747. End If
  748. ' ADC HL, ss
  749. If ((i shr 6) = &B01) AND ((i AND &B1111) = &B1010) Then
  750. r1 = (i shr 4) AND &B11
  751. OPS_ED(i).OpCode = "ADC"
  752. OPS_ED(i).Operand1 = "HL"
  753. OPS_ED(i).Operand2 = reg_tab2(r1)
  754. OPS_ED(i).TStates = 15
  755. If reg_tab2(r1) <> "SP" Then
  756.  
  757. Else
  758.  
  759. End If
  760. End If
  761. ' SBC HL, ss
  762. If ((i shr 6) = &B01) AND ((i AND &B1111) = &B0010) Then
  763. r1 =
Add Comment
Please, Sign In to add comment