An emulator, assembler, and disassembler for the Sega Game Gear
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

2785 lines
123 KiB

  1. /* Copyright (C) 2014-2015 Ben Kurtovic <ben.kurtovic@gmail.com>
  2. Released under the terms of the MIT License. See LICENSE for details. */
  3. /*
  4. This file is AUTO-GENERATED from 'instructions.yml'.
  5. `make` should trigger a rebuild when it is modified; if not, use:
  6. `python scripts/update_asm_instructions.py`.
  7. @AUTOGEN_DATE Wed May 20 07:34:18 2015 UTC
  8. */
  9. /* @AUTOGEN_INST_BLOCK_START */
  10. INST_FUNC(adc)
  11. {
  12. INST_TAKES_ARGS(
  13. AT_REGISTER,
  14. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  15. AT_NONE
  16. )
  17. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_REGISTER) {
  18. if (INST_REG(0) == REG_A && INST_REG(1) == REG_A)
  19. INST_RETURN(1, 0x8F)
  20. if (INST_REG(0) == REG_A && INST_REG(1) == REG_B)
  21. INST_RETURN(1, 0x88)
  22. if (INST_REG(0) == REG_A && INST_REG(1) == REG_C)
  23. INST_RETURN(1, 0x89)
  24. if (INST_REG(0) == REG_A && INST_REG(1) == REG_D)
  25. INST_RETURN(1, 0x8A)
  26. if (INST_REG(0) == REG_A && INST_REG(1) == REG_E)
  27. INST_RETURN(1, 0x8B)
  28. if (INST_REG(0) == REG_A && INST_REG(1) == REG_H)
  29. INST_RETURN(1, 0x8C)
  30. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXH)
  31. INST_RETURN(2, INST_IX_PREFIX, 0x8C)
  32. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYH)
  33. INST_RETURN(2, INST_IY_PREFIX, 0x8C)
  34. if (INST_REG(0) == REG_A && INST_REG(1) == REG_L)
  35. INST_RETURN(1, 0x8D)
  36. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXL)
  37. INST_RETURN(2, INST_IX_PREFIX, 0x8D)
  38. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYL)
  39. INST_RETURN(2, INST_IY_PREFIX, 0x8D)
  40. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_BC)
  41. INST_RETURN(2, 0xED, 0x4A)
  42. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_DE)
  43. INST_RETURN(2, 0xED, 0x5A)
  44. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_HL)
  45. INST_RETURN(2, 0xED, 0x6A)
  46. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_SP)
  47. INST_RETURN(2, 0xED, 0x7A)
  48. INST_ERROR(ARG_VALUE)
  49. }
  50. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_IMMEDIATE) {
  51. if (INST_REG(0) == REG_A && INST_IMM(1).mask & IMM_U8)
  52. INST_RETURN(2, 0xCE, INST_IMM(1).uval)
  53. INST_ERROR(ARG_VALUE)
  54. }
  55. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT &&
  56. (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL)) {
  57. if (INST_REG(0) == REG_A)
  58. INST_RETURN(1, 0x8E)
  59. INST_ERROR(ARG_VALUE)
  60. }
  61. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDEXED) {
  62. if (INST_REG(0) == REG_A)
  63. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x8E, INST_INDEX(1).offset)
  64. INST_ERROR(ARG_VALUE)
  65. }
  66. INST_ERROR(ARG_TYPE)
  67. }
  68. INST_FUNC(add)
  69. {
  70. INST_TAKES_ARGS(
  71. AT_REGISTER,
  72. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  73. AT_NONE
  74. )
  75. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_REGISTER) {
  76. if (INST_REG(0) == REG_A && INST_REG(1) == REG_A)
  77. INST_RETURN(1, 0x87)
  78. if (INST_REG(0) == REG_A && INST_REG(1) == REG_B)
  79. INST_RETURN(1, 0x80)
  80. if (INST_REG(0) == REG_A && INST_REG(1) == REG_C)
  81. INST_RETURN(1, 0x81)
  82. if (INST_REG(0) == REG_A && INST_REG(1) == REG_D)
  83. INST_RETURN(1, 0x82)
  84. if (INST_REG(0) == REG_A && INST_REG(1) == REG_E)
  85. INST_RETURN(1, 0x83)
  86. if (INST_REG(0) == REG_A && INST_REG(1) == REG_H)
  87. INST_RETURN(1, 0x84)
  88. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXH)
  89. INST_RETURN(2, INST_IX_PREFIX, 0x84)
  90. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYH)
  91. INST_RETURN(2, INST_IY_PREFIX, 0x84)
  92. if (INST_REG(0) == REG_A && INST_REG(1) == REG_L)
  93. INST_RETURN(1, 0x85)
  94. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXL)
  95. INST_RETURN(2, INST_IX_PREFIX, 0x85)
  96. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYL)
  97. INST_RETURN(2, INST_IY_PREFIX, 0x85)
  98. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_BC)
  99. INST_RETURN(1, 0x09)
  100. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_BC)
  101. INST_RETURN(2, INST_IX_PREFIX, 0x09)
  102. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_BC)
  103. INST_RETURN(2, INST_IY_PREFIX, 0x09)
  104. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_DE)
  105. INST_RETURN(1, 0x19)
  106. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_DE)
  107. INST_RETURN(2, INST_IX_PREFIX, 0x19)
  108. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_DE)
  109. INST_RETURN(2, INST_IY_PREFIX, 0x19)
  110. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_HL)
  111. INST_RETURN(1, 0x29)
  112. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_IX)
  113. INST_RETURN(2, INST_IX_PREFIX, 0x29)
  114. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_IY)
  115. INST_RETURN(2, INST_IY_PREFIX, 0x29)
  116. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_SP)
  117. INST_RETURN(1, 0x39)
  118. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_SP)
  119. INST_RETURN(2, INST_IX_PREFIX, 0x39)
  120. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_SP)
  121. INST_RETURN(2, INST_IY_PREFIX, 0x39)
  122. INST_ERROR(ARG_VALUE)
  123. }
  124. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_IMMEDIATE) {
  125. if (INST_REG(0) == REG_A && INST_IMM(1).mask & IMM_U8)
  126. INST_RETURN(2, 0xC6, INST_IMM(1).uval)
  127. INST_ERROR(ARG_VALUE)
  128. }
  129. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT &&
  130. (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL)) {
  131. if (INST_REG(0) == REG_A)
  132. INST_RETURN(1, 0x86)
  133. INST_ERROR(ARG_VALUE)
  134. }
  135. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDEXED) {
  136. if (INST_REG(0) == REG_A)
  137. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x86, INST_INDEX(1).offset)
  138. INST_ERROR(ARG_VALUE)
  139. }
  140. INST_ERROR(ARG_TYPE)
  141. }
  142. INST_FUNC(and)
  143. {
  144. INST_TAKES_ARGS(
  145. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  146. AT_NONE,
  147. AT_NONE
  148. )
  149. if (INST_TYPE(0) == AT_REGISTER) {
  150. if (INST_REG(0) == REG_A)
  151. INST_RETURN(1, 0xA7)
  152. if (INST_REG(0) == REG_B)
  153. INST_RETURN(1, 0xA0)
  154. if (INST_REG(0) == REG_C)
  155. INST_RETURN(1, 0xA1)
  156. if (INST_REG(0) == REG_D)
  157. INST_RETURN(1, 0xA2)
  158. if (INST_REG(0) == REG_E)
  159. INST_RETURN(1, 0xA3)
  160. if (INST_REG(0) == REG_H)
  161. INST_RETURN(1, 0xA4)
  162. if (INST_REG(0) == REG_IXH)
  163. INST_RETURN(2, INST_IX_PREFIX, 0xA4)
  164. if (INST_REG(0) == REG_IYH)
  165. INST_RETURN(2, INST_IY_PREFIX, 0xA4)
  166. if (INST_REG(0) == REG_L)
  167. INST_RETURN(1, 0xA5)
  168. if (INST_REG(0) == REG_IXL)
  169. INST_RETURN(2, INST_IX_PREFIX, 0xA5)
  170. if (INST_REG(0) == REG_IYL)
  171. INST_RETURN(2, INST_IY_PREFIX, 0xA5)
  172. INST_ERROR(ARG_VALUE)
  173. }
  174. if (INST_TYPE(0) == AT_IMMEDIATE) {
  175. if (INST_IMM(0).mask & IMM_U8)
  176. INST_RETURN(2, 0xE6, INST_IMM(0).uval)
  177. INST_ERROR(ARG_VALUE)
  178. }
  179. if (INST_TYPE(0) == AT_INDIRECT &&
  180. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  181. INST_RETURN(1, 0xA6)
  182. }
  183. if (INST_TYPE(0) == AT_INDEXED) {
  184. INST_RETURN(3, INST_INDEX_PREFIX(0), 0xA6, INST_INDEX(0).offset)
  185. }
  186. INST_ERROR(ARG_TYPE)
  187. }
  188. INST_FUNC(bit)
  189. {
  190. INST_TAKES_ARGS(
  191. AT_IMMEDIATE,
  192. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  193. AT_NONE
  194. )
  195. if (INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_REGISTER) {
  196. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_A)
  197. INST_RETURN(2, 0xCB, 0x47)
  198. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_B)
  199. INST_RETURN(2, 0xCB, 0x40)
  200. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_C)
  201. INST_RETURN(2, 0xCB, 0x41)
  202. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_D)
  203. INST_RETURN(2, 0xCB, 0x42)
  204. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_E)
  205. INST_RETURN(2, 0xCB, 0x43)
  206. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_H)
  207. INST_RETURN(2, 0xCB, 0x44)
  208. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_L)
  209. INST_RETURN(2, 0xCB, 0x45)
  210. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_A)
  211. INST_RETURN(2, 0xCB, 0x4F)
  212. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_B)
  213. INST_RETURN(2, 0xCB, 0x48)
  214. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_C)
  215. INST_RETURN(2, 0xCB, 0x49)
  216. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_D)
  217. INST_RETURN(2, 0xCB, 0x4A)
  218. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_E)
  219. INST_RETURN(2, 0xCB, 0x4B)
  220. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_H)
  221. INST_RETURN(2, 0xCB, 0x4C)
  222. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_L)
  223. INST_RETURN(2, 0xCB, 0x4D)
  224. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_A)
  225. INST_RETURN(2, 0xCB, 0x57)
  226. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_B)
  227. INST_RETURN(2, 0xCB, 0x50)
  228. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_C)
  229. INST_RETURN(2, 0xCB, 0x51)
  230. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_D)
  231. INST_RETURN(2, 0xCB, 0x52)
  232. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_E)
  233. INST_RETURN(2, 0xCB, 0x53)
  234. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_H)
  235. INST_RETURN(2, 0xCB, 0x54)
  236. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_L)
  237. INST_RETURN(2, 0xCB, 0x55)
  238. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_A)
  239. INST_RETURN(2, 0xCB, 0x5F)
  240. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_B)
  241. INST_RETURN(2, 0xCB, 0x58)
  242. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_C)
  243. INST_RETURN(2, 0xCB, 0x59)
  244. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_D)
  245. INST_RETURN(2, 0xCB, 0x5A)
  246. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_E)
  247. INST_RETURN(2, 0xCB, 0x5B)
  248. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_H)
  249. INST_RETURN(2, 0xCB, 0x5C)
  250. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_L)
  251. INST_RETURN(2, 0xCB, 0x5D)
  252. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_A)
  253. INST_RETURN(2, 0xCB, 0x67)
  254. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_B)
  255. INST_RETURN(2, 0xCB, 0x60)
  256. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_C)
  257. INST_RETURN(2, 0xCB, 0x61)
  258. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_D)
  259. INST_RETURN(2, 0xCB, 0x62)
  260. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_E)
  261. INST_RETURN(2, 0xCB, 0x63)
  262. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_H)
  263. INST_RETURN(2, 0xCB, 0x64)
  264. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_L)
  265. INST_RETURN(2, 0xCB, 0x65)
  266. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_A)
  267. INST_RETURN(2, 0xCB, 0x6F)
  268. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_B)
  269. INST_RETURN(2, 0xCB, 0x68)
  270. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_C)
  271. INST_RETURN(2, 0xCB, 0x69)
  272. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_D)
  273. INST_RETURN(2, 0xCB, 0x6A)
  274. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_E)
  275. INST_RETURN(2, 0xCB, 0x6B)
  276. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_H)
  277. INST_RETURN(2, 0xCB, 0x6C)
  278. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_L)
  279. INST_RETURN(2, 0xCB, 0x6D)
  280. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_A)
  281. INST_RETURN(2, 0xCB, 0x77)
  282. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_B)
  283. INST_RETURN(2, 0xCB, 0x70)
  284. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_C)
  285. INST_RETURN(2, 0xCB, 0x71)
  286. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_D)
  287. INST_RETURN(2, 0xCB, 0x72)
  288. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_E)
  289. INST_RETURN(2, 0xCB, 0x73)
  290. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_H)
  291. INST_RETURN(2, 0xCB, 0x74)
  292. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_L)
  293. INST_RETURN(2, 0xCB, 0x75)
  294. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_A)
  295. INST_RETURN(2, 0xCB, 0x7F)
  296. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_B)
  297. INST_RETURN(2, 0xCB, 0x78)
  298. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_C)
  299. INST_RETURN(2, 0xCB, 0x79)
  300. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_D)
  301. INST_RETURN(2, 0xCB, 0x7A)
  302. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_E)
  303. INST_RETURN(2, 0xCB, 0x7B)
  304. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_H)
  305. INST_RETURN(2, 0xCB, 0x7C)
  306. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_L)
  307. INST_RETURN(2, 0xCB, 0x7D)
  308. INST_ERROR(ARG_VALUE)
  309. }
  310. if (INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_INDIRECT &&
  311. (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL)) {
  312. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0))
  313. INST_RETURN(2, 0xCB, 0x46)
  314. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1))
  315. INST_RETURN(2, 0xCB, 0x4E)
  316. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2))
  317. INST_RETURN(2, 0xCB, 0x56)
  318. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3))
  319. INST_RETURN(2, 0xCB, 0x5E)
  320. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4))
  321. INST_RETURN(2, 0xCB, 0x66)
  322. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5))
  323. INST_RETURN(2, 0xCB, 0x6E)
  324. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6))
  325. INST_RETURN(2, 0xCB, 0x76)
  326. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7))
  327. INST_RETURN(2, 0xCB, 0x7E)
  328. INST_ERROR(ARG_VALUE)
  329. }
  330. if (INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_INDEXED) {
  331. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0))
  332. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x46)
  333. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1))
  334. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x4E)
  335. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2))
  336. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x56)
  337. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3))
  338. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x5E)
  339. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4))
  340. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x66)
  341. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5))
  342. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x6E)
  343. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6))
  344. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x76)
  345. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7))
  346. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x7E)
  347. INST_ERROR(ARG_VALUE)
  348. }
  349. INST_ERROR(ARG_TYPE)
  350. }
  351. INST_FUNC(call)
  352. {
  353. INST_TAKES_ARGS(
  354. AT_CONDITION|AT_IMMEDIATE,
  355. AT_IMMEDIATE|AT_OPTIONAL,
  356. AT_NONE
  357. )
  358. if (INST_NARGS == 1 && INST_TYPE(0) == AT_IMMEDIATE) {
  359. if (INST_IMM(0).mask & IMM_U16)
  360. INST_RETURN(3, 0xCD, INST_IMM_U16_B1(INST_IMM(0)), INST_IMM_U16_B2(INST_IMM(0)))
  361. INST_ERROR(ARG_VALUE)
  362. }
  363. if (INST_NARGS == 2 && INST_TYPE(0) == AT_CONDITION && INST_TYPE(1) == AT_IMMEDIATE) {
  364. if (INST_COND(0) == COND_NZ && INST_IMM(1).mask & IMM_U16)
  365. INST_RETURN(3, 0xC4, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  366. if (INST_COND(0) == COND_Z && INST_IMM(1).mask & IMM_U16)
  367. INST_RETURN(3, 0xCC, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  368. if (INST_COND(0) == COND_NC && INST_IMM(1).mask & IMM_U16)
  369. INST_RETURN(3, 0xD4, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  370. if (INST_COND(0) == COND_C && INST_IMM(1).mask & IMM_U16)
  371. INST_RETURN(3, 0xDC, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  372. if (INST_COND(0) == COND_PO && INST_IMM(1).mask & IMM_U16)
  373. INST_RETURN(3, 0xE4, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  374. if (INST_COND(0) == COND_PE && INST_IMM(1).mask & IMM_U16)
  375. INST_RETURN(3, 0xEC, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  376. if (INST_COND(0) == COND_P && INST_IMM(1).mask & IMM_U16)
  377. INST_RETURN(3, 0xF4, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  378. if (INST_COND(0) == COND_M && INST_IMM(1).mask & IMM_U16)
  379. INST_RETURN(3, 0xFC, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  380. INST_ERROR(ARG_VALUE)
  381. }
  382. INST_ERROR(ARG_TYPE)
  383. }
  384. INST_FUNC(ccf)
  385. {
  386. INST_TAKES_NO_ARGS
  387. INST_RETURN(1, 0x3F)
  388. }
  389. INST_FUNC(cp)
  390. {
  391. INST_TAKES_ARGS(
  392. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  393. AT_NONE,
  394. AT_NONE
  395. )
  396. if (INST_TYPE(0) == AT_REGISTER) {
  397. if (INST_REG(0) == REG_A)
  398. INST_RETURN(1, 0xBF)
  399. if (INST_REG(0) == REG_B)
  400. INST_RETURN(1, 0xB8)
  401. if (INST_REG(0) == REG_C)
  402. INST_RETURN(1, 0xB9)
  403. if (INST_REG(0) == REG_D)
  404. INST_RETURN(1, 0xBA)
  405. if (INST_REG(0) == REG_E)
  406. INST_RETURN(1, 0xBB)
  407. if (INST_REG(0) == REG_H)
  408. INST_RETURN(1, 0xBC)
  409. if (INST_REG(0) == REG_IXH)
  410. INST_RETURN(2, INST_IX_PREFIX, 0xBC)
  411. if (INST_REG(0) == REG_IYH)
  412. INST_RETURN(2, INST_IY_PREFIX, 0xBC)
  413. if (INST_REG(0) == REG_L)
  414. INST_RETURN(1, 0xBD)
  415. if (INST_REG(0) == REG_IXL)
  416. INST_RETURN(2, INST_IX_PREFIX, 0xBD)
  417. if (INST_REG(0) == REG_IYL)
  418. INST_RETURN(2, INST_IY_PREFIX, 0xBD)
  419. INST_ERROR(ARG_VALUE)
  420. }
  421. if (INST_TYPE(0) == AT_INDIRECT &&
  422. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  423. INST_RETURN(1, 0xBE)
  424. }
  425. if (INST_TYPE(0) == AT_INDEXED) {
  426. INST_RETURN(3, INST_INDEX_PREFIX(0), 0xBE, INST_INDEX(0).offset)
  427. }
  428. if (INST_TYPE(0) == AT_IMMEDIATE) {
  429. if (INST_IMM(0).mask & IMM_U8)
  430. INST_RETURN(2, 0xFE, INST_IMM(0).uval)
  431. INST_ERROR(ARG_VALUE)
  432. }
  433. INST_ERROR(ARG_TYPE)
  434. }
  435. INST_FUNC(cpd)
  436. {
  437. INST_TAKES_NO_ARGS
  438. INST_RETURN(2, 0xED, 0xA9)
  439. }
  440. INST_FUNC(cpdr)
  441. {
  442. INST_TAKES_NO_ARGS
  443. INST_RETURN(2, 0xED, 0xB9)
  444. }
  445. INST_FUNC(cpi)
  446. {
  447. INST_TAKES_NO_ARGS
  448. INST_RETURN(2, 0xED, 0xA1)
  449. }
  450. INST_FUNC(cpir)
  451. {
  452. INST_TAKES_NO_ARGS
  453. INST_RETURN(2, 0xED, 0xB1)
  454. }
  455. INST_FUNC(cpl)
  456. {
  457. INST_TAKES_NO_ARGS
  458. INST_RETURN(1, 0x2F)
  459. }
  460. INST_FUNC(daa)
  461. {
  462. INST_TAKES_NO_ARGS
  463. INST_RETURN(1, 0x27)
  464. }
  465. INST_FUNC(dec)
  466. {
  467. INST_TAKES_ARGS(
  468. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  469. AT_NONE,
  470. AT_NONE
  471. )
  472. if (INST_TYPE(0) == AT_REGISTER) {
  473. if (INST_REG(0) == REG_A)
  474. INST_RETURN(1, 0x3D)
  475. if (INST_REG(0) == REG_B)
  476. INST_RETURN(1, 0x05)
  477. if (INST_REG(0) == REG_C)
  478. INST_RETURN(1, 0x0D)
  479. if (INST_REG(0) == REG_D)
  480. INST_RETURN(1, 0x15)
  481. if (INST_REG(0) == REG_E)
  482. INST_RETURN(1, 0x1D)
  483. if (INST_REG(0) == REG_H)
  484. INST_RETURN(1, 0x25)
  485. if (INST_REG(0) == REG_IXH)
  486. INST_RETURN(2, INST_IX_PREFIX, 0x25)
  487. if (INST_REG(0) == REG_IYH)
  488. INST_RETURN(2, INST_IY_PREFIX, 0x25)
  489. if (INST_REG(0) == REG_L)
  490. INST_RETURN(1, 0x2D)
  491. if (INST_REG(0) == REG_IXL)
  492. INST_RETURN(2, INST_IX_PREFIX, 0x2D)
  493. if (INST_REG(0) == REG_IYL)
  494. INST_RETURN(2, INST_IY_PREFIX, 0x2D)
  495. if (INST_REG(0) == REG_BC)
  496. INST_RETURN(1, 0x0B)
  497. if (INST_REG(0) == REG_DE)
  498. INST_RETURN(1, 0x1B)
  499. if (INST_REG(0) == REG_HL)
  500. INST_RETURN(1, 0x2B)
  501. if (INST_REG(0) == REG_IX)
  502. INST_RETURN(2, INST_IX_PREFIX, 0x2B)
  503. if (INST_REG(0) == REG_IY)
  504. INST_RETURN(2, INST_IY_PREFIX, 0x2B)
  505. if (INST_REG(0) == REG_SP)
  506. INST_RETURN(1, 0x3B)
  507. INST_ERROR(ARG_VALUE)
  508. }
  509. if (INST_TYPE(0) == AT_INDIRECT &&
  510. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  511. INST_RETURN(1, 0x35)
  512. }
  513. if (INST_TYPE(0) == AT_INDEXED) {
  514. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x35, INST_INDEX(0).offset)
  515. }
  516. INST_ERROR(ARG_TYPE)
  517. }
  518. INST_FUNC(di)
  519. {
  520. INST_TAKES_NO_ARGS
  521. INST_RETURN(1, 0xF3)
  522. }
  523. INST_FUNC(djnz)
  524. {
  525. INST_TAKES_ARGS(
  526. AT_IMMEDIATE,
  527. AT_NONE,
  528. AT_NONE
  529. )
  530. if (INST_TYPE(0) == AT_IMMEDIATE) {
  531. if (INST_IMM(0).mask & IMM_REL)
  532. INST_RETURN(2, 0x10, INST_IMM(0).sval - 2)
  533. INST_ERROR(ARG_VALUE)
  534. }
  535. INST_ERROR(ARG_TYPE)
  536. }
  537. INST_FUNC(ei)
  538. {
  539. INST_TAKES_NO_ARGS
  540. INST_RETURN(1, 0xFB)
  541. }
  542. INST_FUNC(ex)
  543. {
  544. INST_TAKES_ARGS(
  545. AT_INDIRECT|AT_REGISTER,
  546. AT_REGISTER,
  547. AT_NONE
  548. )
  549. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_REGISTER) {
  550. if (INST_REG(0) == REG_AF && INST_REG(1) == REG_AF_)
  551. INST_RETURN(1, 0x08)
  552. if (INST_REG(0) == REG_DE && INST_REG(1) == REG_HL)
  553. INST_RETURN(1, 0xEB)
  554. INST_ERROR(ARG_VALUE)
  555. }
  556. if (INST_TYPE(0) == AT_INDIRECT && INST_TYPE(1) == AT_REGISTER) {
  557. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_SP) && INST_REG(1) == REG_HL)
  558. INST_RETURN(1, 0xE3)
  559. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_SP) && INST_REG(1) == REG_IX)
  560. INST_RETURN(2, INST_IX_PREFIX, 0xE3)
  561. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_SP) && INST_REG(1) == REG_IY)
  562. INST_RETURN(2, INST_IY_PREFIX, 0xE3)
  563. INST_ERROR(ARG_VALUE)
  564. }
  565. INST_ERROR(ARG_TYPE)
  566. }
  567. INST_FUNC(exx)
  568. {
  569. INST_TAKES_NO_ARGS
  570. INST_RETURN(1, 0xD9)
  571. }
  572. INST_FUNC(halt)
  573. {
  574. INST_TAKES_NO_ARGS
  575. INST_RETURN(1, 0x76)
  576. }
  577. INST_FUNC(im)
  578. {
  579. INST_TAKES_ARGS(
  580. AT_IMMEDIATE,
  581. AT_NONE,
  582. AT_NONE
  583. )
  584. if (INST_TYPE(0) == AT_IMMEDIATE) {
  585. if ((INST_IMM(0).mask & IMM_IM && INST_IMM(0).uval == 0))
  586. INST_RETURN(2, 0xED, 0x46)
  587. if ((INST_IMM(0).mask & IMM_IM && INST_IMM(0).uval == 1))
  588. INST_RETURN(2, 0xED, 0x56)
  589. if ((INST_IMM(0).mask & IMM_IM && INST_IMM(0).uval == 2))
  590. INST_RETURN(2, 0xED, 0x5E)
  591. INST_ERROR(ARG_VALUE)
  592. }
  593. INST_ERROR(ARG_TYPE)
  594. }
  595. INST_FUNC(in)
  596. {
  597. INST_TAKES_ARGS(
  598. AT_PORT|AT_REGISTER,
  599. AT_OPTIONAL|AT_PORT,
  600. AT_NONE
  601. )
  602. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_PORT) {
  603. if (INST_REG(0) == REG_A && INST_PORT(1).type == AT_IMMEDIATE)
  604. INST_RETURN(2, 0xDB, INST_PORT(1).port.imm.uval)
  605. if (INST_REG(0) == REG_A && INST_PORT(1).type == AT_REGISTER)
  606. INST_RETURN(2, 0xED, 0x78)
  607. if (INST_REG(0) == REG_B && INST_PORT(1).type == AT_REGISTER)
  608. INST_RETURN(2, 0xED, 0x40)
  609. if (INST_REG(0) == REG_C && INST_PORT(1).type == AT_REGISTER)
  610. INST_RETURN(2, 0xED, 0x48)
  611. if (INST_REG(0) == REG_D && INST_PORT(1).type == AT_REGISTER)
  612. INST_RETURN(2, 0xED, 0x50)
  613. if (INST_REG(0) == REG_E && INST_PORT(1).type == AT_REGISTER)
  614. INST_RETURN(2, 0xED, 0x58)
  615. if (INST_REG(0) == REG_H && INST_PORT(1).type == AT_REGISTER)
  616. INST_RETURN(2, 0xED, 0x60)
  617. if (INST_REG(0) == REG_L && INST_PORT(1).type == AT_REGISTER)
  618. INST_RETURN(2, 0xED, 0x68)
  619. INST_ERROR(ARG_VALUE)
  620. }
  621. if (INST_NARGS == 1 && INST_TYPE(0) == AT_PORT) {
  622. if (INST_PORT(0).type == AT_REGISTER)
  623. INST_RETURN(2, 0xED, 0x70)
  624. INST_ERROR(ARG_VALUE)
  625. }
  626. INST_ERROR(ARG_TYPE)
  627. }
  628. INST_FUNC(inc)
  629. {
  630. INST_TAKES_ARGS(
  631. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  632. AT_NONE,
  633. AT_NONE
  634. )
  635. if (INST_TYPE(0) == AT_REGISTER) {
  636. if (INST_REG(0) == REG_A)
  637. INST_RETURN(1, 0x3C)
  638. if (INST_REG(0) == REG_B)
  639. INST_RETURN(1, 0x04)
  640. if (INST_REG(0) == REG_C)
  641. INST_RETURN(1, 0x0C)
  642. if (INST_REG(0) == REG_D)
  643. INST_RETURN(1, 0x14)
  644. if (INST_REG(0) == REG_E)
  645. INST_RETURN(1, 0x1C)
  646. if (INST_REG(0) == REG_H)
  647. INST_RETURN(1, 0x24)
  648. if (INST_REG(0) == REG_IXH)
  649. INST_RETURN(2, INST_IX_PREFIX, 0x24)
  650. if (INST_REG(0) == REG_IYH)
  651. INST_RETURN(2, INST_IY_PREFIX, 0x24)
  652. if (INST_REG(0) == REG_L)
  653. INST_RETURN(1, 0x2C)
  654. if (INST_REG(0) == REG_IXL)
  655. INST_RETURN(2, INST_IX_PREFIX, 0x2C)
  656. if (INST_REG(0) == REG_IYL)
  657. INST_RETURN(2, INST_IY_PREFIX, 0x2C)
  658. if (INST_REG(0) == REG_BC)
  659. INST_RETURN(1, 0x03)
  660. if (INST_REG(0) == REG_DE)
  661. INST_RETURN(1, 0x13)
  662. if (INST_REG(0) == REG_HL)
  663. INST_RETURN(1, 0x23)
  664. if (INST_REG(0) == REG_IX)
  665. INST_RETURN(2, INST_IX_PREFIX, 0x23)
  666. if (INST_REG(0) == REG_IY)
  667. INST_RETURN(2, INST_IY_PREFIX, 0x23)
  668. if (INST_REG(0) == REG_SP)
  669. INST_RETURN(1, 0x33)
  670. INST_ERROR(ARG_VALUE)
  671. }
  672. if (INST_TYPE(0) == AT_INDIRECT &&
  673. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  674. INST_RETURN(1, 0x34)
  675. }
  676. if (INST_TYPE(0) == AT_INDEXED) {
  677. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x34, INST_INDEX(0).offset)
  678. }
  679. INST_ERROR(ARG_TYPE)
  680. }
  681. INST_FUNC(ind)
  682. {
  683. INST_TAKES_NO_ARGS
  684. INST_RETURN(2, 0xED, 0xAA)
  685. }
  686. INST_FUNC(indr)
  687. {
  688. INST_TAKES_NO_ARGS
  689. INST_RETURN(2, 0xED, 0xBA)
  690. }
  691. INST_FUNC(ini)
  692. {
  693. INST_TAKES_NO_ARGS
  694. INST_RETURN(2, 0xED, 0xA2)
  695. }
  696. INST_FUNC(inir)
  697. {
  698. INST_TAKES_NO_ARGS
  699. INST_RETURN(2, 0xED, 0xB2)
  700. }
  701. INST_FUNC(jp)
  702. {
  703. INST_TAKES_ARGS(
  704. AT_CONDITION|AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT,
  705. AT_IMMEDIATE|AT_OPTIONAL,
  706. AT_NONE
  707. )
  708. if (INST_NARGS == 1 && INST_TYPE(0) == AT_IMMEDIATE) {
  709. if (INST_IMM(0).mask & IMM_U16)
  710. INST_RETURN(3, 0xC3, INST_IMM_U16_B1(INST_IMM(0)), INST_IMM_U16_B2(INST_IMM(0)))
  711. INST_ERROR(ARG_VALUE)
  712. }
  713. if (INST_NARGS == 2 && INST_TYPE(0) == AT_CONDITION && INST_TYPE(1) == AT_IMMEDIATE) {
  714. if (INST_COND(0) == COND_NZ && INST_IMM(1).mask & IMM_U16)
  715. INST_RETURN(3, 0xC2, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  716. if (INST_COND(0) == COND_Z && INST_IMM(1).mask & IMM_U16)
  717. INST_RETURN(3, 0xCA, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  718. if (INST_COND(0) == COND_NC && INST_IMM(1).mask & IMM_U16)
  719. INST_RETURN(3, 0xD2, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  720. if (INST_COND(0) == COND_C && INST_IMM(1).mask & IMM_U16)
  721. INST_RETURN(3, 0xDA, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  722. if (INST_COND(0) == COND_PO && INST_IMM(1).mask & IMM_U16)
  723. INST_RETURN(3, 0xE2, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  724. if (INST_COND(0) == COND_PE && INST_IMM(1).mask & IMM_U16)
  725. INST_RETURN(3, 0xEA, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  726. if (INST_COND(0) == COND_P && INST_IMM(1).mask & IMM_U16)
  727. INST_RETURN(3, 0xF2, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  728. if (INST_COND(0) == COND_M && INST_IMM(1).mask & IMM_U16)
  729. INST_RETURN(3, 0xFA, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  730. INST_ERROR(ARG_VALUE)
  731. }
  732. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  733. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  734. INST_RETURN(1, 0xE9)
  735. }
  736. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  737. INST_RETURN(3, INST_INDEX_PREFIX(0), 0xE9, INST_INDEX(0).offset)
  738. }
  739. INST_ERROR(ARG_TYPE)
  740. }
  741. INST_FUNC(jr)
  742. {
  743. INST_TAKES_ARGS(
  744. AT_CONDITION|AT_IMMEDIATE,
  745. AT_IMMEDIATE|AT_OPTIONAL,
  746. AT_NONE
  747. )
  748. if (INST_NARGS == 1 && INST_TYPE(0) == AT_IMMEDIATE) {
  749. if (INST_IMM(0).mask & IMM_REL)
  750. INST_RETURN(2, 0x18, INST_IMM(0).sval - 2)
  751. INST_ERROR(ARG_VALUE)
  752. }
  753. if (INST_NARGS == 2 && INST_TYPE(0) == AT_CONDITION && INST_TYPE(1) == AT_IMMEDIATE) {
  754. if (INST_COND(0) == COND_NZ && INST_IMM(1).mask & IMM_REL)
  755. INST_RETURN(2, 0x20, INST_IMM(1).sval - 2)
  756. if (INST_COND(0) == COND_Z && INST_IMM(1).mask & IMM_REL)
  757. INST_RETURN(2, 0x28, INST_IMM(1).sval - 2)
  758. if (INST_COND(0) == COND_NC && INST_IMM(1).mask & IMM_REL)
  759. INST_RETURN(2, 0x30, INST_IMM(1).sval - 2)
  760. if (INST_COND(0) == COND_C && INST_IMM(1).mask & IMM_REL)
  761. INST_RETURN(2, 0x38, INST_IMM(1).sval - 2)
  762. INST_ERROR(ARG_VALUE)
  763. }
  764. INST_ERROR(ARG_TYPE)
  765. }
  766. INST_FUNC(ld)
  767. {
  768. INST_TAKES_ARGS(
  769. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  770. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  771. AT_NONE
  772. )
  773. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_REGISTER) {
  774. if (INST_REG(0) == REG_A && INST_REG(1) == REG_A)
  775. INST_RETURN(1, 0x7F)
  776. if (INST_REG(0) == REG_A && INST_REG(1) == REG_B)
  777. INST_RETURN(1, 0x78)
  778. if (INST_REG(0) == REG_A && INST_REG(1) == REG_C)
  779. INST_RETURN(1, 0x79)
  780. if (INST_REG(0) == REG_A && INST_REG(1) == REG_D)
  781. INST_RETURN(1, 0x7A)
  782. if (INST_REG(0) == REG_A && INST_REG(1) == REG_E)
  783. INST_RETURN(1, 0x7B)
  784. if (INST_REG(0) == REG_A && INST_REG(1) == REG_H)
  785. INST_RETURN(1, 0x7C)
  786. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXH)
  787. INST_RETURN(2, INST_IX_PREFIX, 0x7C)
  788. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYH)
  789. INST_RETURN(2, INST_IY_PREFIX, 0x7C)
  790. if (INST_REG(0) == REG_A && INST_REG(1) == REG_L)
  791. INST_RETURN(1, 0x7D)
  792. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXL)
  793. INST_RETURN(2, INST_IX_PREFIX, 0x7D)
  794. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYL)
  795. INST_RETURN(2, INST_IY_PREFIX, 0x7D)
  796. if (INST_REG(0) == REG_B && INST_REG(1) == REG_A)
  797. INST_RETURN(1, 0x47)
  798. if (INST_REG(0) == REG_B && INST_REG(1) == REG_B)
  799. INST_RETURN(1, 0x40)
  800. if (INST_REG(0) == REG_B && INST_REG(1) == REG_C)
  801. INST_RETURN(1, 0x41)
  802. if (INST_REG(0) == REG_B && INST_REG(1) == REG_D)
  803. INST_RETURN(1, 0x42)
  804. if (INST_REG(0) == REG_B && INST_REG(1) == REG_E)
  805. INST_RETURN(1, 0x43)
  806. if (INST_REG(0) == REG_B && INST_REG(1) == REG_H)
  807. INST_RETURN(1, 0x44)
  808. if (INST_REG(0) == REG_B && INST_REG(1) == REG_IXH)
  809. INST_RETURN(2, INST_IX_PREFIX, 0x44)
  810. if (INST_REG(0) == REG_B && INST_REG(1) == REG_IYH)
  811. INST_RETURN(2, INST_IY_PREFIX, 0x44)
  812. if (INST_REG(0) == REG_B && INST_REG(1) == REG_L)
  813. INST_RETURN(1, 0x45)
  814. if (INST_REG(0) == REG_B && INST_REG(1) == REG_IXL)
  815. INST_RETURN(2, INST_IX_PREFIX, 0x45)
  816. if (INST_REG(0) == REG_B && INST_REG(1) == REG_IYL)
  817. INST_RETURN(2, INST_IY_PREFIX, 0x45)
  818. if (INST_REG(0) == REG_C && INST_REG(1) == REG_A)
  819. INST_RETURN(1, 0x4F)
  820. if (INST_REG(0) == REG_C && INST_REG(1) == REG_B)
  821. INST_RETURN(1, 0x48)
  822. if (INST_REG(0) == REG_C && INST_REG(1) == REG_C)
  823. INST_RETURN(1, 0x49)
  824. if (INST_REG(0) == REG_C && INST_REG(1) == REG_D)
  825. INST_RETURN(1, 0x4A)
  826. if (INST_REG(0) == REG_C && INST_REG(1) == REG_E)
  827. INST_RETURN(1, 0x4B)
  828. if (INST_REG(0) == REG_C && INST_REG(1) == REG_H)
  829. INST_RETURN(1, 0x4C)
  830. if (INST_REG(0) == REG_C && INST_REG(1) == REG_IXH)
  831. INST_RETURN(2, INST_IX_PREFIX, 0x4C)
  832. if (INST_REG(0) == REG_C && INST_REG(1) == REG_IYH)
  833. INST_RETURN(2, INST_IY_PREFIX, 0x4C)
  834. if (INST_REG(0) == REG_C && INST_REG(1) == REG_L)
  835. INST_RETURN(1, 0x4D)
  836. if (INST_REG(0) == REG_C && INST_REG(1) == REG_IXL)
  837. INST_RETURN(2, INST_IX_PREFIX, 0x4D)
  838. if (INST_REG(0) == REG_C && INST_REG(1) == REG_IYL)
  839. INST_RETURN(2, INST_IY_PREFIX, 0x4D)
  840. if (INST_REG(0) == REG_D && INST_REG(1) == REG_A)
  841. INST_RETURN(1, 0x57)
  842. if (INST_REG(0) == REG_D && INST_REG(1) == REG_B)
  843. INST_RETURN(1, 0x50)
  844. if (INST_REG(0) == REG_D && INST_REG(1) == REG_C)
  845. INST_RETURN(1, 0x51)
  846. if (INST_REG(0) == REG_D && INST_REG(1) == REG_D)
  847. INST_RETURN(1, 0x52)
  848. if (INST_REG(0) == REG_D && INST_REG(1) == REG_E)
  849. INST_RETURN(1, 0x53)
  850. if (INST_REG(0) == REG_D && INST_REG(1) == REG_H)
  851. INST_RETURN(1, 0x54)
  852. if (INST_REG(0) == REG_D && INST_REG(1) == REG_IXH)
  853. INST_RETURN(2, INST_IX_PREFIX, 0x54)
  854. if (INST_REG(0) == REG_D && INST_REG(1) == REG_IYH)
  855. INST_RETURN(2, INST_IY_PREFIX, 0x54)
  856. if (INST_REG(0) == REG_D && INST_REG(1) == REG_L)
  857. INST_RETURN(1, 0x55)
  858. if (INST_REG(0) == REG_D && INST_REG(1) == REG_IXL)
  859. INST_RETURN(2, INST_IX_PREFIX, 0x55)
  860. if (INST_REG(0) == REG_D && INST_REG(1) == REG_IYL)
  861. INST_RETURN(2, INST_IY_PREFIX, 0x55)
  862. if (INST_REG(0) == REG_E && INST_REG(1) == REG_A)
  863. INST_RETURN(1, 0x5F)
  864. if (INST_REG(0) == REG_E && INST_REG(1) == REG_B)
  865. INST_RETURN(1, 0x58)
  866. if (INST_REG(0) == REG_E && INST_REG(1) == REG_C)
  867. INST_RETURN(1, 0x59)
  868. if (INST_REG(0) == REG_E && INST_REG(1) == REG_D)
  869. INST_RETURN(1, 0x5A)
  870. if (INST_REG(0) == REG_E && INST_REG(1) == REG_E)
  871. INST_RETURN(1, 0x5B)
  872. if (INST_REG(0) == REG_E && INST_REG(1) == REG_H)
  873. INST_RETURN(1, 0x5C)
  874. if (INST_REG(0) == REG_E && INST_REG(1) == REG_IXH)
  875. INST_RETURN(2, INST_IX_PREFIX, 0x5C)
  876. if (INST_REG(0) == REG_E && INST_REG(1) == REG_IYH)
  877. INST_RETURN(2, INST_IY_PREFIX, 0x5C)
  878. if (INST_REG(0) == REG_E && INST_REG(1) == REG_L)
  879. INST_RETURN(1, 0x5D)
  880. if (INST_REG(0) == REG_E && INST_REG(1) == REG_IXL)
  881. INST_RETURN(2, INST_IX_PREFIX, 0x5D)
  882. if (INST_REG(0) == REG_E && INST_REG(1) == REG_IYL)
  883. INST_RETURN(2, INST_IY_PREFIX, 0x5D)
  884. if (INST_REG(0) == REG_H && INST_REG(1) == REG_A)
  885. INST_RETURN(1, 0x67)
  886. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_A)
  887. INST_RETURN(2, INST_IX_PREFIX, 0x67)
  888. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_A)
  889. INST_RETURN(2, INST_IY_PREFIX, 0x67)
  890. if (INST_REG(0) == REG_H && INST_REG(1) == REG_B)
  891. INST_RETURN(1, 0x60)
  892. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_B)
  893. INST_RETURN(2, INST_IX_PREFIX, 0x60)
  894. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_B)
  895. INST_RETURN(2, INST_IY_PREFIX, 0x60)
  896. if (INST_REG(0) == REG_H && INST_REG(1) == REG_C)
  897. INST_RETURN(1, 0x61)
  898. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_C)
  899. INST_RETURN(2, INST_IX_PREFIX, 0x61)
  900. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_C)
  901. INST_RETURN(2, INST_IY_PREFIX, 0x61)
  902. if (INST_REG(0) == REG_H && INST_REG(1) == REG_D)
  903. INST_RETURN(1, 0x62)
  904. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_D)
  905. INST_RETURN(2, INST_IX_PREFIX, 0x62)
  906. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_D)
  907. INST_RETURN(2, INST_IY_PREFIX, 0x62)
  908. if (INST_REG(0) == REG_H && INST_REG(1) == REG_E)
  909. INST_RETURN(1, 0x63)
  910. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_E)
  911. INST_RETURN(2, INST_IX_PREFIX, 0x63)
  912. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_E)
  913. INST_RETURN(2, INST_IY_PREFIX, 0x63)
  914. if (INST_REG(0) == REG_H && INST_REG(1) == REG_H)
  915. INST_RETURN(1, 0x64)
  916. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_IXH)
  917. INST_RETURN(2, INST_IX_PREFIX, 0x64)
  918. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_IYH)
  919. INST_RETURN(2, INST_IY_PREFIX, 0x64)
  920. if (INST_REG(0) == REG_H && INST_REG(1) == REG_L)
  921. INST_RETURN(1, 0x65)
  922. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_IXL)
  923. INST_RETURN(2, INST_IX_PREFIX, 0x65)
  924. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_IYL)
  925. INST_RETURN(2, INST_IY_PREFIX, 0x65)
  926. if (INST_REG(0) == REG_L && INST_REG(1) == REG_A)
  927. INST_RETURN(1, 0x6F)
  928. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_A)
  929. INST_RETURN(2, INST_IX_PREFIX, 0x6F)
  930. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_A)
  931. INST_RETURN(2, INST_IY_PREFIX, 0x6F)
  932. if (INST_REG(0) == REG_L && INST_REG(1) == REG_B)
  933. INST_RETURN(1, 0x68)
  934. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_B)
  935. INST_RETURN(2, INST_IX_PREFIX, 0x68)
  936. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_B)
  937. INST_RETURN(2, INST_IY_PREFIX, 0x68)
  938. if (INST_REG(0) == REG_L && INST_REG(1) == REG_C)
  939. INST_RETURN(1, 0x69)
  940. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_C)
  941. INST_RETURN(2, INST_IX_PREFIX, 0x69)
  942. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_C)
  943. INST_RETURN(2, INST_IY_PREFIX, 0x69)
  944. if (INST_REG(0) == REG_L && INST_REG(1) == REG_D)
  945. INST_RETURN(1, 0x6A)
  946. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_D)
  947. INST_RETURN(2, INST_IX_PREFIX, 0x6A)
  948. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_D)
  949. INST_RETURN(2, INST_IY_PREFIX, 0x6A)
  950. if (INST_REG(0) == REG_L && INST_REG(1) == REG_E)
  951. INST_RETURN(1, 0x6B)
  952. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_E)
  953. INST_RETURN(2, INST_IX_PREFIX, 0x6B)
  954. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_E)
  955. INST_RETURN(2, INST_IY_PREFIX, 0x6B)
  956. if (INST_REG(0) == REG_L && INST_REG(1) == REG_H)
  957. INST_RETURN(1, 0x6C)
  958. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_IXH)
  959. INST_RETURN(2, INST_IX_PREFIX, 0x6C)
  960. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_IYH)
  961. INST_RETURN(2, INST_IY_PREFIX, 0x6C)
  962. if (INST_REG(0) == REG_L && INST_REG(1) == REG_L)
  963. INST_RETURN(1, 0x6D)
  964. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_IXL)
  965. INST_RETURN(2, INST_IX_PREFIX, 0x6D)
  966. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_IYL)
  967. INST_RETURN(2, INST_IY_PREFIX, 0x6D)
  968. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IX)
  969. INST_RETURN(3, INST_IX_PREFIX, 0xED, 0x57)
  970. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IY)
  971. INST_RETURN(3, INST_IY_PREFIX, 0xED, 0x57)
  972. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_A)
  973. INST_RETURN(3, INST_IX_PREFIX, 0xED, 0x47)
  974. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_A)
  975. INST_RETURN(3, INST_IY_PREFIX, 0xED, 0x47)
  976. if (INST_REG(0) == REG_A && INST_REG(1) == REG_R)
  977. INST_RETURN(2, 0xED, 0x5F)
  978. if (INST_REG(0) == REG_R && INST_REG(1) == REG_A)
  979. INST_RETURN(2, 0xED, 0x4F)
  980. if (INST_REG(0) == REG_SP && INST_REG(1) == REG_HL)
  981. INST_RETURN(1, 0xF9)
  982. if (INST_REG(0) == REG_SP && INST_REG(1) == REG_IX)
  983. INST_RETURN(2, INST_IX_PREFIX, 0xF9)
  984. if (INST_REG(0) == REG_SP && INST_REG(1) == REG_IY)
  985. INST_RETURN(2, INST_IY_PREFIX, 0xF9)
  986. INST_ERROR(ARG_VALUE)
  987. }
  988. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_IMMEDIATE) {
  989. if (INST_REG(0) == REG_A && INST_IMM(1).mask & IMM_U8)
  990. INST_RETURN(2, 0x3E, INST_IMM(1).uval)
  991. if (INST_REG(0) == REG_B && INST_IMM(1).mask & IMM_U8)
  992. INST_RETURN(2, 0x06, INST_IMM(1).uval)
  993. if (INST_REG(0) == REG_C && INST_IMM(1).mask & IMM_U8)
  994. INST_RETURN(2, 0x0E, INST_IMM(1).uval)
  995. if (INST_REG(0) == REG_D && INST_IMM(1).mask & IMM_U8)
  996. INST_RETURN(2, 0x16, INST_IMM(1).uval)
  997. if (INST_REG(0) == REG_E && INST_IMM(1).mask & IMM_U8)
  998. INST_RETURN(2, 0x1E, INST_IMM(1).uval)
  999. if (INST_REG(0) == REG_H && INST_IMM(1).mask & IMM_U8)
  1000. INST_RETURN(2, 0x26, INST_IMM(1).uval)
  1001. if (INST_REG(0) == REG_IXH && INST_IMM(1).mask & IMM_U8)
  1002. INST_RETURN(3, INST_IX_PREFIX, 0x26, INST_IMM(1).uval)
  1003. if (INST_REG(0) == REG_IYH && INST_IMM(1).mask & IMM_U8)
  1004. INST_RETURN(3, INST_IY_PREFIX, 0x26, INST_IMM(1).uval)
  1005. if (INST_REG(0) == REG_L && INST_IMM(1).mask & IMM_U8)
  1006. INST_RETURN(2, 0x2E, INST_IMM(1).uval)
  1007. if (INST_REG(0) == REG_IXL && INST_IMM(1).mask & IMM_U8)
  1008. INST_RETURN(3, INST_IX_PREFIX, 0x2E, INST_IMM(1).uval)
  1009. if (INST_REG(0) == REG_IYL && INST_IMM(1).mask & IMM_U8)
  1010. INST_RETURN(3, INST_IY_PREFIX, 0x2E, INST_IMM(1).uval)
  1011. if (INST_REG(0) == REG_BC && INST_IMM(1).mask & IMM_U16)
  1012. INST_RETURN(3, 0x01, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  1013. if (INST_REG(0) == REG_DE && INST_IMM(1).mask & IMM_U16)
  1014. INST_RETURN(3, 0x11, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  1015. if (INST_REG(0) == REG_HL && INST_IMM(1).mask & IMM_U16)
  1016. INST_RETURN(3, 0x21, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  1017. if (INST_REG(0) == REG_IX && INST_IMM(1).mask & IMM_U16)
  1018. INST_RETURN(4, INST_IX_PREFIX, 0x21, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  1019. if (INST_REG(0) == REG_IY && INST_IMM(1).mask & IMM_U16)
  1020. INST_RETURN(4, INST_IY_PREFIX, 0x21, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  1021. if (INST_REG(0) == REG_SP && INST_IMM(1).mask & IMM_U16)
  1022. INST_RETURN(3, 0x31, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  1023. INST_ERROR(ARG_VALUE)
  1024. }
  1025. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT &&
  1026. (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL)) {
  1027. if (INST_REG(0) == REG_A)
  1028. INST_RETURN(1, 0x7E)
  1029. if (INST_REG(0) == REG_B)
  1030. INST_RETURN(1, 0x46)
  1031. if (INST_REG(0) == REG_C)
  1032. INST_RETURN(1, 0x4E)
  1033. if (INST_REG(0) == REG_D)
  1034. INST_RETURN(1, 0x56)
  1035. if (INST_REG(0) == REG_E)
  1036. INST_RETURN(1, 0x5E)
  1037. if (INST_REG(0) == REG_H)
  1038. INST_RETURN(1, 0x66)
  1039. if (INST_REG(0) == REG_L)
  1040. INST_RETURN(1, 0x6E)
  1041. INST_ERROR(ARG_VALUE)
  1042. }
  1043. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDEXED) {
  1044. if (INST_REG(0) == REG_A)
  1045. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x7E, INST_INDEX(1).offset)
  1046. if (INST_REG(0) == REG_B)
  1047. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x46, INST_INDEX(1).offset)
  1048. if (INST_REG(0) == REG_C)
  1049. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x4E, INST_INDEX(1).offset)
  1050. if (INST_REG(0) == REG_D)
  1051. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x56, INST_INDEX(1).offset)
  1052. if (INST_REG(0) == REG_E)
  1053. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x5E, INST_INDEX(1).offset)
  1054. if (INST_REG(0) == REG_H)
  1055. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x66, INST_INDEX(1).offset)
  1056. if (INST_REG(0) == REG_L)
  1057. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x6E, INST_INDEX(1).offset)
  1058. INST_ERROR(ARG_VALUE)
  1059. }
  1060. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT) {
  1061. if (INST_REG(0) == REG_A && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_BC))
  1062. INST_RETURN(1, 0x0A)
  1063. if (INST_REG(0) == REG_A && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_DE))
  1064. INST_RETURN(1, 0x1A)
  1065. if (INST_REG(0) == REG_HL && INST_INDIRECT(1).type == AT_IMMEDIATE)
  1066. INST_RETURN(3, 0x2A, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  1067. if (INST_REG(0) == REG_IX && INST_INDIRECT(1).type == AT_IMMEDIATE)
  1068. INST_RETURN(4, INST_IX_PREFIX, 0x2A, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  1069. if (INST_REG(0) == REG_IY && INST_INDIRECT(1).type == AT_IMMEDIATE)
  1070. INST_RETURN(4, INST_IY_PREFIX, 0x2A, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  1071. if (INST_REG(0) == REG_A && INST_INDIRECT(1).type == AT_IMMEDIATE)
  1072. INST_RETURN(3, 0x3A, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  1073. if (INST_REG(0) == REG_BC && INST_INDIRECT(1).type == AT_IMMEDIATE)
  1074. INST_RETURN(4, 0xED, 0x4B, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  1075. if (INST_REG(0) == REG_DE && INST_INDIRECT(1).type == AT_IMMEDIATE)
  1076. INST_RETURN(4, 0xED, 0x5B, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  1077. if (INST_REG(0) == REG_SP && INST_INDIRECT(1).type == AT_IMMEDIATE)
  1078. INST_RETURN(4, 0xED, 0x7B, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  1079. INST_ERROR(ARG_VALUE)
  1080. }
  1081. if (INST_TYPE(0) == AT_INDIRECT && INST_TYPE(1) == AT_REGISTER &&
  1082. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  1083. if (INST_REG(1) == REG_A)
  1084. INST_RETURN(1, 0x77)
  1085. if (INST_REG(1) == REG_B)
  1086. INST_RETURN(1, 0x70)
  1087. if (INST_REG(1) == REG_C)
  1088. INST_RETURN(1, 0x71)
  1089. if (INST_REG(1) == REG_D)
  1090. INST_RETURN(1, 0x72)
  1091. if (INST_REG(1) == REG_E)
  1092. INST_RETURN(1, 0x73)
  1093. if (INST_REG(1) == REG_H)
  1094. INST_RETURN(1, 0x74)
  1095. if (INST_REG(1) == REG_L)
  1096. INST_RETURN(1, 0x75)
  1097. INST_ERROR(ARG_VALUE)
  1098. }
  1099. if (INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  1100. if (INST_REG(1) == REG_A)
  1101. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x77, INST_INDEX(0).offset)
  1102. if (INST_REG(1) == REG_B)
  1103. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x70, INST_INDEX(0).offset)
  1104. if (INST_REG(1) == REG_C)
  1105. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x71, INST_INDEX(0).offset)
  1106. if (INST_REG(1) == REG_D)
  1107. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x72, INST_INDEX(0).offset)
  1108. if (INST_REG(1) == REG_E)
  1109. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x73, INST_INDEX(0).offset)
  1110. if (INST_REG(1) == REG_H)
  1111. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x74, INST_INDEX(0).offset)
  1112. if (INST_REG(1) == REG_L)
  1113. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x75, INST_INDEX(0).offset)
  1114. INST_ERROR(ARG_VALUE)
  1115. }
  1116. if (INST_TYPE(0) == AT_INDIRECT && INST_TYPE(1) == AT_IMMEDIATE &&
  1117. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  1118. if (INST_IMM(1).mask & IMM_U8)
  1119. INST_RETURN(2, 0x36, INST_IMM(1).uval)
  1120. INST_ERROR(ARG_VALUE)
  1121. }
  1122. if (INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_IMMEDIATE) {
  1123. if (INST_IMM(1).mask & IMM_U8)
  1124. INST_RETURN(4, INST_INDEX_PREFIX(0), 0x36, INST_INDEX(0).offset, INST_IMM(1).uval)
  1125. INST_ERROR(ARG_VALUE)
  1126. }
  1127. if (INST_TYPE(0) == AT_INDIRECT && INST_TYPE(1) == AT_REGISTER) {
  1128. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_BC) && INST_REG(1) == REG_A)
  1129. INST_RETURN(1, 0x02)
  1130. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_DE) && INST_REG(1) == REG_A)
  1131. INST_RETURN(1, 0x12)
  1132. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_HL)
  1133. INST_RETURN(3, 0x22, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  1134. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_IX)
  1135. INST_RETURN(4, INST_IX_PREFIX, 0x22, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  1136. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_IY)
  1137. INST_RETURN(4, INST_IY_PREFIX, 0x22, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  1138. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_A)
  1139. INST_RETURN(3, 0x32, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  1140. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_BC)
  1141. INST_RETURN(4, 0xED, 0x43, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  1142. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_DE)
  1143. INST_RETURN(4, 0xED, 0x53, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  1144. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_SP)
  1145. INST_RETURN(4, 0xED, 0x73, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  1146. INST_ERROR(ARG_VALUE)
  1147. }
  1148. INST_ERROR(ARG_TYPE)
  1149. }
  1150. INST_FUNC(ldd)
  1151. {
  1152. INST_TAKES_NO_ARGS
  1153. INST_RETURN(2, 0xED, 0xA8)
  1154. }
  1155. INST_FUNC(lddr)
  1156. {
  1157. INST_TAKES_NO_ARGS
  1158. INST_RETURN(2, 0xED, 0xB8)
  1159. }
  1160. INST_FUNC(ldi)
  1161. {
  1162. INST_TAKES_NO_ARGS
  1163. INST_RETURN(2, 0xED, 0xA0)
  1164. }
  1165. INST_FUNC(ldir)
  1166. {
  1167. INST_TAKES_NO_ARGS
  1168. INST_RETURN(2, 0xED, 0xB0)
  1169. }
  1170. INST_FUNC(neg)
  1171. {
  1172. INST_TAKES_NO_ARGS
  1173. INST_RETURN(2, 0xED, 0x44)
  1174. }
  1175. INST_FUNC(nop)
  1176. {
  1177. INST_TAKES_NO_ARGS
  1178. INST_RETURN(1, 0x00)
  1179. }
  1180. INST_FUNC(or)
  1181. {
  1182. INST_TAKES_ARGS(
  1183. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  1184. AT_NONE,
  1185. AT_NONE
  1186. )
  1187. if (INST_TYPE(0) == AT_REGISTER) {
  1188. if (INST_REG(0) == REG_A)
  1189. INST_RETURN(1, 0xB7)
  1190. if (INST_REG(0) == REG_B)
  1191. INST_RETURN(1, 0xB0)
  1192. if (INST_REG(0) == REG_C)
  1193. INST_RETURN(1, 0xB1)
  1194. if (INST_REG(0) == REG_D)
  1195. INST_RETURN(1, 0xB2)
  1196. if (INST_REG(0) == REG_E)
  1197. INST_RETURN(1, 0xB3)
  1198. if (INST_REG(0) == REG_H)
  1199. INST_RETURN(1, 0xB4)
  1200. if (INST_REG(0) == REG_IXH)
  1201. INST_RETURN(2, INST_IX_PREFIX, 0xB4)
  1202. if (INST_REG(0) == REG_IYH)
  1203. INST_RETURN(2, INST_IY_PREFIX, 0xB4)
  1204. if (INST_REG(0) == REG_L)
  1205. INST_RETURN(1, 0xB5)
  1206. if (INST_REG(0) == REG_IXL)
  1207. INST_RETURN(2, INST_IX_PREFIX, 0xB5)
  1208. if (INST_REG(0) == REG_IYL)
  1209. INST_RETURN(2, INST_IY_PREFIX, 0xB5)
  1210. INST_ERROR(ARG_VALUE)
  1211. }
  1212. if (INST_TYPE(0) == AT_IMMEDIATE) {
  1213. if (INST_IMM(0).mask & IMM_U8)
  1214. INST_RETURN(2, 0xF6, INST_IMM(0).uval)
  1215. INST_ERROR(ARG_VALUE)
  1216. }
  1217. if (INST_TYPE(0) == AT_INDIRECT &&
  1218. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  1219. INST_RETURN(1, 0xB6)
  1220. }
  1221. if (INST_TYPE(0) == AT_INDEXED) {
  1222. INST_RETURN(3, INST_INDEX_PREFIX(0), 0xB6, INST_INDEX(0).offset)
  1223. }
  1224. INST_ERROR(ARG_TYPE)
  1225. }
  1226. INST_FUNC(otdr)
  1227. {
  1228. INST_TAKES_NO_ARGS
  1229. INST_RETURN(2, 0xED, 0xBB)
  1230. }
  1231. INST_FUNC(otir)
  1232. {
  1233. INST_TAKES_NO_ARGS
  1234. INST_RETURN(2, 0xED, 0xB3)
  1235. }
  1236. INST_FUNC(out)
  1237. {
  1238. INST_TAKES_ARGS(
  1239. AT_PORT,
  1240. AT_IMMEDIATE|AT_REGISTER,
  1241. AT_NONE
  1242. )
  1243. if (INST_TYPE(0) == AT_PORT && INST_TYPE(1) == AT_REGISTER) {
  1244. if (INST_PORT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_A)
  1245. INST_RETURN(2, 0xD3, INST_PORT(0).port.imm.uval)
  1246. if (INST_PORT(0).type == AT_REGISTER && INST_REG(1) == REG_A)
  1247. INST_RETURN(2, 0xED, 0x79)
  1248. if (INST_PORT(0).type == AT_REGISTER && INST_REG(1) == REG_B)
  1249. INST_RETURN(2, 0xED, 0x41)
  1250. if (INST_PORT(0).type == AT_REGISTER && INST_REG(1) == REG_C)
  1251. INST_RETURN(2, 0xED, 0x49)
  1252. if (INST_PORT(0).type == AT_REGISTER && INST_REG(1) == REG_D)
  1253. INST_RETURN(2, 0xED, 0x51)
  1254. if (INST_PORT(0).type == AT_REGISTER && INST_REG(1) == REG_E)
  1255. INST_RETURN(2, 0xED, 0x59)
  1256. if (INST_PORT(0).type == AT_REGISTER && INST_REG(1) == REG_H)
  1257. INST_RETURN(2, 0xED, 0x61)
  1258. if (INST_PORT(0).type == AT_REGISTER && INST_REG(1) == REG_L)
  1259. INST_RETURN(2, 0xED, 0x69)
  1260. INST_ERROR(ARG_VALUE)
  1261. }
  1262. if (INST_TYPE(0) == AT_PORT && INST_TYPE(1) == AT_IMMEDIATE) {
  1263. if (INST_PORT(0).type == AT_REGISTER && (INST_IMM(1).mask & IMM_U8 && INST_IMM(1).uval == 0))
  1264. INST_RETURN(2, 0xED, 0x71)
  1265. INST_ERROR(ARG_VALUE)
  1266. }
  1267. INST_ERROR(ARG_TYPE)
  1268. }
  1269. INST_FUNC(outd)
  1270. {
  1271. INST_TAKES_NO_ARGS
  1272. INST_RETURN(2, 0xED, 0xAB)
  1273. }
  1274. INST_FUNC(outi)
  1275. {
  1276. INST_TAKES_NO_ARGS
  1277. INST_RETURN(2, 0xED, 0xA3)
  1278. }
  1279. INST_FUNC(pop)
  1280. {
  1281. INST_TAKES_ARGS(
  1282. AT_REGISTER,
  1283. AT_NONE,
  1284. AT_NONE
  1285. )
  1286. if (INST_TYPE(0) == AT_REGISTER) {
  1287. if (INST_REG(0) == REG_BC)
  1288. INST_RETURN(1, 0xC1)
  1289. if (INST_REG(0) == REG_DE)
  1290. INST_RETURN(1, 0xD1)
  1291. if (INST_REG(0) == REG_HL)
  1292. INST_RETURN(1, 0xE1)
  1293. if (INST_REG(0) == REG_IX)
  1294. INST_RETURN(2, INST_IX_PREFIX, 0xE1)
  1295. if (INST_REG(0) == REG_IY)
  1296. INST_RETURN(2, INST_IY_PREFIX, 0xE1)
  1297. if (INST_REG(0) == REG_AF)
  1298. INST_RETURN(1, 0xF1)
  1299. INST_ERROR(ARG_VALUE)
  1300. }
  1301. INST_ERROR(ARG_TYPE)
  1302. }
  1303. INST_FUNC(push)
  1304. {
  1305. INST_TAKES_ARGS(
  1306. AT_REGISTER,
  1307. AT_NONE,
  1308. AT_NONE
  1309. )
  1310. if (INST_TYPE(0) == AT_REGISTER) {
  1311. if (INST_REG(0) == REG_BC)
  1312. INST_RETURN(1, 0xC5)
  1313. if (INST_REG(0) == REG_DE)
  1314. INST_RETURN(1, 0xD5)
  1315. if (INST_REG(0) == REG_HL)
  1316. INST_RETURN(1, 0xE5)
  1317. if (INST_REG(0) == REG_IX)
  1318. INST_RETURN(2, INST_IX_PREFIX, 0xE5)
  1319. if (INST_REG(0) == REG_IY)
  1320. INST_RETURN(2, INST_IY_PREFIX, 0xE5)
  1321. if (INST_REG(0) == REG_AF)
  1322. INST_RETURN(1, 0xF5)
  1323. INST_ERROR(ARG_VALUE)
  1324. }
  1325. INST_ERROR(ARG_TYPE)
  1326. }
  1327. INST_FUNC(res)
  1328. {
  1329. INST_TAKES_ARGS(
  1330. AT_IMMEDIATE,
  1331. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  1332. AT_OPTIONAL|AT_REGISTER
  1333. )
  1334. if (INST_NARGS == 2 && INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_REGISTER) {
  1335. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_A)
  1336. INST_RETURN(2, 0xCB, 0x87)
  1337. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_B)
  1338. INST_RETURN(2, 0xCB, 0x80)
  1339. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_C)
  1340. INST_RETURN(2, 0xCB, 0x81)
  1341. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_D)
  1342. INST_RETURN(2, 0xCB, 0x82)
  1343. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_E)
  1344. INST_RETURN(2, 0xCB, 0x83)
  1345. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_H)
  1346. INST_RETURN(2, 0xCB, 0x84)
  1347. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_L)
  1348. INST_RETURN(2, 0xCB, 0x85)
  1349. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_A)
  1350. INST_RETURN(2, 0xCB, 0x8F)
  1351. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_B)
  1352. INST_RETURN(2, 0xCB, 0x88)
  1353. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_C)
  1354. INST_RETURN(2, 0xCB, 0x89)
  1355. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_D)
  1356. INST_RETURN(2, 0xCB, 0x8A)
  1357. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_E)
  1358. INST_RETURN(2, 0xCB, 0x8B)
  1359. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_H)
  1360. INST_RETURN(2, 0xCB, 0x8C)
  1361. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_L)
  1362. INST_RETURN(2, 0xCB, 0x8D)
  1363. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_A)
  1364. INST_RETURN(2, 0xCB, 0x97)
  1365. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_B)
  1366. INST_RETURN(2, 0xCB, 0x90)
  1367. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_C)
  1368. INST_RETURN(2, 0xCB, 0x91)
  1369. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_D)
  1370. INST_RETURN(2, 0xCB, 0x92)
  1371. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_E)
  1372. INST_RETURN(2, 0xCB, 0x93)
  1373. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_H)
  1374. INST_RETURN(2, 0xCB, 0x94)
  1375. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_L)
  1376. INST_RETURN(2, 0xCB, 0x95)
  1377. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_A)
  1378. INST_RETURN(2, 0xCB, 0x9F)
  1379. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_B)
  1380. INST_RETURN(2, 0xCB, 0x98)
  1381. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_C)
  1382. INST_RETURN(2, 0xCB, 0x99)
  1383. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_D)
  1384. INST_RETURN(2, 0xCB, 0x9A)
  1385. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_E)
  1386. INST_RETURN(2, 0xCB, 0x9B)
  1387. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_H)
  1388. INST_RETURN(2, 0xCB, 0x9C)
  1389. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_L)
  1390. INST_RETURN(2, 0xCB, 0x9D)
  1391. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_A)
  1392. INST_RETURN(2, 0xCB, 0xA7)
  1393. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_B)
  1394. INST_RETURN(2, 0xCB, 0xA0)
  1395. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_C)
  1396. INST_RETURN(2, 0xCB, 0xA1)
  1397. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_D)
  1398. INST_RETURN(2, 0xCB, 0xA2)
  1399. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_E)
  1400. INST_RETURN(2, 0xCB, 0xA3)
  1401. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_H)
  1402. INST_RETURN(2, 0xCB, 0xA4)
  1403. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_L)
  1404. INST_RETURN(2, 0xCB, 0xA5)
  1405. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_A)
  1406. INST_RETURN(2, 0xCB, 0xAF)
  1407. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_B)
  1408. INST_RETURN(2, 0xCB, 0xA8)
  1409. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_C)
  1410. INST_RETURN(2, 0xCB, 0xA9)
  1411. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_D)
  1412. INST_RETURN(2, 0xCB, 0xAA)
  1413. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_E)
  1414. INST_RETURN(2, 0xCB, 0xAB)
  1415. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_H)
  1416. INST_RETURN(2, 0xCB, 0xAC)
  1417. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_L)
  1418. INST_RETURN(2, 0xCB, 0xAD)
  1419. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_A)
  1420. INST_RETURN(2, 0xCB, 0xB7)
  1421. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_B)
  1422. INST_RETURN(2, 0xCB, 0xB0)
  1423. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_C)
  1424. INST_RETURN(2, 0xCB, 0xB1)
  1425. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_D)
  1426. INST_RETURN(2, 0xCB, 0xB2)
  1427. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_E)
  1428. INST_RETURN(2, 0xCB, 0xB3)
  1429. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_H)
  1430. INST_RETURN(2, 0xCB, 0xB4)
  1431. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_L)
  1432. INST_RETURN(2, 0xCB, 0xB5)
  1433. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_A)
  1434. INST_RETURN(2, 0xCB, 0xBF)
  1435. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_B)
  1436. INST_RETURN(2, 0xCB, 0xB8)
  1437. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_C)
  1438. INST_RETURN(2, 0xCB, 0xB9)
  1439. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_D)
  1440. INST_RETURN(2, 0xCB, 0xBA)
  1441. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_E)
  1442. INST_RETURN(2, 0xCB, 0xBB)
  1443. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_H)
  1444. INST_RETURN(2, 0xCB, 0xBC)
  1445. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_L)
  1446. INST_RETURN(2, 0xCB, 0xBD)
  1447. INST_ERROR(ARG_VALUE)
  1448. }
  1449. if (INST_NARGS == 2 && INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_INDIRECT &&
  1450. (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL)) {
  1451. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0))
  1452. INST_RETURN(2, 0xCB, 0x86)
  1453. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1))
  1454. INST_RETURN(2, 0xCB, 0x8E)
  1455. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2))
  1456. INST_RETURN(2, 0xCB, 0x96)
  1457. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3))
  1458. INST_RETURN(2, 0xCB, 0x9E)
  1459. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4))
  1460. INST_RETURN(2, 0xCB, 0xA6)
  1461. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5))
  1462. INST_RETURN(2, 0xCB, 0xAE)
  1463. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6))
  1464. INST_RETURN(2, 0xCB, 0xB6)
  1465. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7))
  1466. INST_RETURN(2, 0xCB, 0xBE)
  1467. INST_ERROR(ARG_VALUE)
  1468. }
  1469. if (INST_NARGS == 2 && INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_INDEXED) {
  1470. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0))
  1471. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x86)
  1472. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1))
  1473. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x8E)
  1474. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2))
  1475. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x96)
  1476. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3))
  1477. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x9E)
  1478. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4))
  1479. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA6)
  1480. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5))
  1481. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xAE)
  1482. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6))
  1483. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB6)
  1484. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7))
  1485. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xBE)
  1486. INST_ERROR(ARG_VALUE)
  1487. }
  1488. if (INST_NARGS == 3 && INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_INDEXED && INST_TYPE(2) == AT_REGISTER) {
  1489. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_A)
  1490. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x87)
  1491. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_B)
  1492. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x80)
  1493. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_C)
  1494. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x81)
  1495. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_D)
  1496. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x82)
  1497. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_E)
  1498. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x83)
  1499. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_H)
  1500. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x84)
  1501. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_L)
  1502. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x85)
  1503. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_A)
  1504. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x8F)
  1505. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_B)
  1506. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x88)
  1507. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_C)
  1508. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x89)
  1509. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_D)
  1510. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x8A)
  1511. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_E)
  1512. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x8B)
  1513. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_H)
  1514. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x8C)
  1515. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_L)
  1516. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x8D)
  1517. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_A)
  1518. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x97)
  1519. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_B)
  1520. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x90)
  1521. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_C)
  1522. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x91)
  1523. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_D)
  1524. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x92)
  1525. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_E)
  1526. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x93)
  1527. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_H)
  1528. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x94)
  1529. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_L)
  1530. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x95)
  1531. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_A)
  1532. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x9F)
  1533. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_B)
  1534. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x98)
  1535. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_C)
  1536. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x99)
  1537. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_D)
  1538. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x9A)
  1539. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_E)
  1540. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x9B)
  1541. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_H)
  1542. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x9C)
  1543. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_L)
  1544. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0x9D)
  1545. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_A)
  1546. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA7)
  1547. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_B)
  1548. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA0)
  1549. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_C)
  1550. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA1)
  1551. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_D)
  1552. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA2)
  1553. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_E)
  1554. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA3)
  1555. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_H)
  1556. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA4)
  1557. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_L)
  1558. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA5)
  1559. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_A)
  1560. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xAF)
  1561. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_B)
  1562. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA8)
  1563. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_C)
  1564. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xA9)
  1565. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_D)
  1566. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xAA)
  1567. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_E)
  1568. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xAB)
  1569. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_H)
  1570. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xAC)
  1571. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_L)
  1572. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xAD)
  1573. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_A)
  1574. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB7)
  1575. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_B)
  1576. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB0)
  1577. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_C)
  1578. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB1)
  1579. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_D)
  1580. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB2)
  1581. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_E)
  1582. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB3)
  1583. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_H)
  1584. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB4)
  1585. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_L)
  1586. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB5)
  1587. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_A)
  1588. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xBF)
  1589. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_B)
  1590. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB8)
  1591. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_C)
  1592. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xB9)
  1593. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_D)
  1594. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xBA)
  1595. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_E)
  1596. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xBB)
  1597. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_H)
  1598. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xBC)
  1599. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_L)
  1600. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xBD)
  1601. INST_ERROR(ARG_VALUE)
  1602. }
  1603. INST_ERROR(ARG_TYPE)
  1604. }
  1605. INST_FUNC(ret)
  1606. {
  1607. INST_TAKES_ARGS(
  1608. AT_CONDITION|AT_OPTIONAL,
  1609. AT_NONE,
  1610. AT_NONE
  1611. )
  1612. if (INST_NARGS == 0) {
  1613. INST_RETURN(1, 0xC9)
  1614. }
  1615. if (INST_NARGS == 1 && INST_TYPE(0) == AT_CONDITION) {
  1616. if (INST_COND(0) == COND_NZ)
  1617. INST_RETURN(1, 0xC0)
  1618. if (INST_COND(0) == COND_Z)
  1619. INST_RETURN(1, 0xC8)
  1620. if (INST_COND(0) == COND_NC)
  1621. INST_RETURN(1, 0xD0)
  1622. if (INST_COND(0) == COND_C)
  1623. INST_RETURN(1, 0xD8)
  1624. if (INST_COND(0) == COND_PO)
  1625. INST_RETURN(1, 0xE0)
  1626. if (INST_COND(0) == COND_PE)
  1627. INST_RETURN(1, 0xE8)
  1628. if (INST_COND(0) == COND_P)
  1629. INST_RETURN(1, 0xF0)
  1630. if (INST_COND(0) == COND_M)
  1631. INST_RETURN(1, 0xF8)
  1632. INST_ERROR(ARG_VALUE)
  1633. }
  1634. INST_ERROR(ARG_TYPE)
  1635. }
  1636. INST_FUNC(reti)
  1637. {
  1638. INST_TAKES_NO_ARGS
  1639. INST_RETURN(2, 0xED, 0x4D)
  1640. }
  1641. INST_FUNC(retn)
  1642. {
  1643. INST_TAKES_NO_ARGS
  1644. INST_RETURN(2, 0xED, 0x45)
  1645. }
  1646. INST_FUNC(rl)
  1647. {
  1648. INST_TAKES_ARGS(
  1649. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  1650. AT_OPTIONAL|AT_REGISTER,
  1651. AT_NONE
  1652. )
  1653. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  1654. if (INST_REG(0) == REG_A)
  1655. INST_RETURN(2, 0xCB, 0x17)
  1656. if (INST_REG(0) == REG_B)
  1657. INST_RETURN(2, 0xCB, 0x10)
  1658. if (INST_REG(0) == REG_C)
  1659. INST_RETURN(2, 0xCB, 0x11)
  1660. if (INST_REG(0) == REG_D)
  1661. INST_RETURN(2, 0xCB, 0x12)
  1662. if (INST_REG(0) == REG_E)
  1663. INST_RETURN(2, 0xCB, 0x13)
  1664. if (INST_REG(0) == REG_H)
  1665. INST_RETURN(2, 0xCB, 0x14)
  1666. if (INST_REG(0) == REG_L)
  1667. INST_RETURN(2, 0xCB, 0x15)
  1668. INST_ERROR(ARG_VALUE)
  1669. }
  1670. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  1671. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  1672. INST_RETURN(2, 0xCB, 0x16)
  1673. }
  1674. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  1675. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x16)
  1676. }
  1677. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  1678. if (INST_REG(1) == REG_A)
  1679. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x17)
  1680. if (INST_REG(1) == REG_B)
  1681. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x10)
  1682. if (INST_REG(1) == REG_C)
  1683. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x11)
  1684. if (INST_REG(1) == REG_D)
  1685. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x12)
  1686. if (INST_REG(1) == REG_E)
  1687. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x13)
  1688. if (INST_REG(1) == REG_H)
  1689. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x14)
  1690. if (INST_REG(1) == REG_L)
  1691. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x15)
  1692. INST_ERROR(ARG_VALUE)
  1693. }
  1694. INST_ERROR(ARG_TYPE)
  1695. }
  1696. INST_FUNC(rla)
  1697. {
  1698. INST_TAKES_NO_ARGS
  1699. INST_RETURN(1, 0x17)
  1700. }
  1701. INST_FUNC(rlc)
  1702. {
  1703. INST_TAKES_ARGS(
  1704. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  1705. AT_OPTIONAL|AT_REGISTER,
  1706. AT_NONE
  1707. )
  1708. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  1709. if (INST_REG(0) == REG_A)
  1710. INST_RETURN(2, 0xCB, 0x07)
  1711. if (INST_REG(0) == REG_B)
  1712. INST_RETURN(2, 0xCB, 0x00)
  1713. if (INST_REG(0) == REG_C)
  1714. INST_RETURN(2, 0xCB, 0x01)
  1715. if (INST_REG(0) == REG_D)
  1716. INST_RETURN(2, 0xCB, 0x02)
  1717. if (INST_REG(0) == REG_E)
  1718. INST_RETURN(2, 0xCB, 0x03)
  1719. if (INST_REG(0) == REG_H)
  1720. INST_RETURN(2, 0xCB, 0x04)
  1721. if (INST_REG(0) == REG_L)
  1722. INST_RETURN(2, 0xCB, 0x05)
  1723. INST_ERROR(ARG_VALUE)
  1724. }
  1725. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  1726. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  1727. INST_RETURN(2, 0xCB, 0x06)
  1728. }
  1729. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  1730. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x06)
  1731. }
  1732. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  1733. if (INST_REG(1) == REG_A)
  1734. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x07)
  1735. if (INST_REG(1) == REG_B)
  1736. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x00)
  1737. if (INST_REG(1) == REG_C)
  1738. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x01)
  1739. if (INST_REG(1) == REG_D)
  1740. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x02)
  1741. if (INST_REG(1) == REG_E)
  1742. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x03)
  1743. if (INST_REG(1) == REG_H)
  1744. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x04)
  1745. if (INST_REG(1) == REG_L)
  1746. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x05)
  1747. INST_ERROR(ARG_VALUE)
  1748. }
  1749. INST_ERROR(ARG_TYPE)
  1750. }
  1751. INST_FUNC(rlca)
  1752. {
  1753. INST_TAKES_NO_ARGS
  1754. INST_RETURN(1, 0x07)
  1755. }
  1756. INST_FUNC(rld)
  1757. {
  1758. INST_TAKES_NO_ARGS
  1759. INST_RETURN(2, 0xED, 0x6F)
  1760. }
  1761. INST_FUNC(rr)
  1762. {
  1763. INST_TAKES_ARGS(
  1764. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  1765. AT_OPTIONAL|AT_REGISTER,
  1766. AT_NONE
  1767. )
  1768. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  1769. if (INST_REG(0) == REG_A)
  1770. INST_RETURN(2, 0xCB, 0x1F)
  1771. if (INST_REG(0) == REG_B)
  1772. INST_RETURN(2, 0xCB, 0x18)
  1773. if (INST_REG(0) == REG_C)
  1774. INST_RETURN(2, 0xCB, 0x19)
  1775. if (INST_REG(0) == REG_D)
  1776. INST_RETURN(2, 0xCB, 0x1A)
  1777. if (INST_REG(0) == REG_E)
  1778. INST_RETURN(2, 0xCB, 0x1B)
  1779. if (INST_REG(0) == REG_H)
  1780. INST_RETURN(2, 0xCB, 0x1C)
  1781. if (INST_REG(0) == REG_L)
  1782. INST_RETURN(2, 0xCB, 0x1D)
  1783. INST_ERROR(ARG_VALUE)
  1784. }
  1785. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  1786. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  1787. INST_RETURN(2, 0xCB, 0x1E)
  1788. }
  1789. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  1790. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x1E)
  1791. }
  1792. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  1793. if (INST_REG(1) == REG_A)
  1794. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x1F)
  1795. if (INST_REG(1) == REG_B)
  1796. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x18)
  1797. if (INST_REG(1) == REG_C)
  1798. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x19)
  1799. if (INST_REG(1) == REG_D)
  1800. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x1A)
  1801. if (INST_REG(1) == REG_E)
  1802. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x1B)
  1803. if (INST_REG(1) == REG_H)
  1804. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x1C)
  1805. if (INST_REG(1) == REG_L)
  1806. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x1D)
  1807. INST_ERROR(ARG_VALUE)
  1808. }
  1809. INST_ERROR(ARG_TYPE)
  1810. }
  1811. INST_FUNC(rra)
  1812. {
  1813. INST_TAKES_NO_ARGS
  1814. INST_RETURN(1, 0x1F)
  1815. }
  1816. INST_FUNC(rrc)
  1817. {
  1818. INST_TAKES_ARGS(
  1819. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  1820. AT_OPTIONAL|AT_REGISTER,
  1821. AT_NONE
  1822. )
  1823. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  1824. if (INST_REG(0) == REG_A)
  1825. INST_RETURN(2, 0xCB, 0x0F)
  1826. if (INST_REG(0) == REG_B)
  1827. INST_RETURN(2, 0xCB, 0x08)
  1828. if (INST_REG(0) == REG_C)
  1829. INST_RETURN(2, 0xCB, 0x09)
  1830. if (INST_REG(0) == REG_D)
  1831. INST_RETURN(2, 0xCB, 0x0A)
  1832. if (INST_REG(0) == REG_E)
  1833. INST_RETURN(2, 0xCB, 0x0B)
  1834. if (INST_REG(0) == REG_H)
  1835. INST_RETURN(2, 0xCB, 0x0C)
  1836. if (INST_REG(0) == REG_L)
  1837. INST_RETURN(2, 0xCB, 0x0D)
  1838. INST_ERROR(ARG_VALUE)
  1839. }
  1840. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  1841. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  1842. INST_RETURN(2, 0xCB, 0x0E)
  1843. }
  1844. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  1845. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x0E)
  1846. }
  1847. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  1848. if (INST_REG(1) == REG_A)
  1849. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x0F)
  1850. if (INST_REG(1) == REG_B)
  1851. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x08)
  1852. if (INST_REG(1) == REG_C)
  1853. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x09)
  1854. if (INST_REG(1) == REG_D)
  1855. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x0A)
  1856. if (INST_REG(1) == REG_E)
  1857. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x0B)
  1858. if (INST_REG(1) == REG_H)
  1859. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x0C)
  1860. if (INST_REG(1) == REG_L)
  1861. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x0D)
  1862. INST_ERROR(ARG_VALUE)
  1863. }
  1864. INST_ERROR(ARG_TYPE)
  1865. }
  1866. INST_FUNC(rrca)
  1867. {
  1868. INST_TAKES_NO_ARGS
  1869. INST_RETURN(1, 0x0F)
  1870. }
  1871. INST_FUNC(rrd)
  1872. {
  1873. INST_TAKES_NO_ARGS
  1874. INST_RETURN(2, 0xED, 0x67)
  1875. }
  1876. INST_FUNC(rst)
  1877. {
  1878. INST_TAKES_ARGS(
  1879. AT_IMMEDIATE,
  1880. AT_NONE,
  1881. AT_NONE
  1882. )
  1883. if (INST_TYPE(0) == AT_IMMEDIATE) {
  1884. if ((INST_IMM(0).mask & IMM_RST && INST_IMM(0).uval == 0))
  1885. INST_RETURN(1, 0xC7)
  1886. if ((INST_IMM(0).mask & IMM_RST && INST_IMM(0).uval == 8))
  1887. INST_RETURN(1, 0xCF)
  1888. if ((INST_IMM(0).mask & IMM_RST && INST_IMM(0).uval == 16))
  1889. INST_RETURN(1, 0xD7)
  1890. if ((INST_IMM(0).mask & IMM_RST && INST_IMM(0).uval == 24))
  1891. INST_RETURN(1, 0xDF)
  1892. if ((INST_IMM(0).mask & IMM_RST && INST_IMM(0).uval == 32))
  1893. INST_RETURN(1, 0xE7)
  1894. if ((INST_IMM(0).mask & IMM_RST && INST_IMM(0).uval == 40))
  1895. INST_RETURN(1, 0xEF)
  1896. if ((INST_IMM(0).mask & IMM_RST && INST_IMM(0).uval == 48))
  1897. INST_RETURN(1, 0xF7)
  1898. if ((INST_IMM(0).mask & IMM_RST && INST_IMM(0).uval == 56))
  1899. INST_RETURN(1, 0xFF)
  1900. INST_ERROR(ARG_VALUE)
  1901. }
  1902. INST_ERROR(ARG_TYPE)
  1903. }
  1904. INST_FUNC(sbc)
  1905. {
  1906. INST_TAKES_ARGS(
  1907. AT_REGISTER,
  1908. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  1909. AT_NONE
  1910. )
  1911. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_REGISTER) {
  1912. if (INST_REG(0) == REG_A && INST_REG(1) == REG_A)
  1913. INST_RETURN(1, 0x9F)
  1914. if (INST_REG(0) == REG_A && INST_REG(1) == REG_B)
  1915. INST_RETURN(1, 0x98)
  1916. if (INST_REG(0) == REG_A && INST_REG(1) == REG_C)
  1917. INST_RETURN(1, 0x99)
  1918. if (INST_REG(0) == REG_A && INST_REG(1) == REG_D)
  1919. INST_RETURN(1, 0x9A)
  1920. if (INST_REG(0) == REG_A && INST_REG(1) == REG_E)
  1921. INST_RETURN(1, 0x9B)
  1922. if (INST_REG(0) == REG_A && INST_REG(1) == REG_H)
  1923. INST_RETURN(1, 0x9C)
  1924. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXH)
  1925. INST_RETURN(2, INST_IX_PREFIX, 0x9C)
  1926. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYH)
  1927. INST_RETURN(2, INST_IY_PREFIX, 0x9C)
  1928. if (INST_REG(0) == REG_A && INST_REG(1) == REG_L)
  1929. INST_RETURN(1, 0x9D)
  1930. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXL)
  1931. INST_RETURN(2, INST_IX_PREFIX, 0x9D)
  1932. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYL)
  1933. INST_RETURN(2, INST_IY_PREFIX, 0x9D)
  1934. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_BC)
  1935. INST_RETURN(2, 0xED, 0x42)
  1936. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_DE)
  1937. INST_RETURN(2, 0xED, 0x52)
  1938. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_HL)
  1939. INST_RETURN(2, 0xED, 0x62)
  1940. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_SP)
  1941. INST_RETURN(2, 0xED, 0x72)
  1942. INST_ERROR(ARG_VALUE)
  1943. }
  1944. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_IMMEDIATE) {
  1945. if (INST_REG(0) == REG_A && INST_IMM(1).mask & IMM_U8)
  1946. INST_RETURN(2, 0xDE, INST_IMM(1).uval)
  1947. INST_ERROR(ARG_VALUE)
  1948. }
  1949. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT &&
  1950. (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL)) {
  1951. if (INST_REG(0) == REG_A)
  1952. INST_RETURN(1, 0x9E)
  1953. INST_ERROR(ARG_VALUE)
  1954. }
  1955. if (INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDEXED) {
  1956. if (INST_REG(0) == REG_A)
  1957. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x9E, INST_INDEX(1).offset)
  1958. INST_ERROR(ARG_VALUE)
  1959. }
  1960. INST_ERROR(ARG_TYPE)
  1961. }
  1962. INST_FUNC(scf)
  1963. {
  1964. INST_TAKES_NO_ARGS
  1965. INST_RETURN(1, 0x37)
  1966. }
  1967. INST_FUNC(set)
  1968. {
  1969. INST_TAKES_ARGS(
  1970. AT_IMMEDIATE,
  1971. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  1972. AT_OPTIONAL|AT_REGISTER
  1973. )
  1974. if (INST_NARGS == 2 && INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_REGISTER) {
  1975. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_A)
  1976. INST_RETURN(2, 0xCB, 0xC7)
  1977. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_B)
  1978. INST_RETURN(2, 0xCB, 0xC0)
  1979. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_C)
  1980. INST_RETURN(2, 0xCB, 0xC1)
  1981. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_D)
  1982. INST_RETURN(2, 0xCB, 0xC2)
  1983. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_E)
  1984. INST_RETURN(2, 0xCB, 0xC3)
  1985. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_H)
  1986. INST_RETURN(2, 0xCB, 0xC4)
  1987. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(1) == REG_L)
  1988. INST_RETURN(2, 0xCB, 0xC5)
  1989. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_A)
  1990. INST_RETURN(2, 0xCB, 0xCF)
  1991. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_B)
  1992. INST_RETURN(2, 0xCB, 0xC8)
  1993. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_C)
  1994. INST_RETURN(2, 0xCB, 0xC9)
  1995. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_D)
  1996. INST_RETURN(2, 0xCB, 0xCA)
  1997. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_E)
  1998. INST_RETURN(2, 0xCB, 0xCB)
  1999. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_H)
  2000. INST_RETURN(2, 0xCB, 0xCC)
  2001. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(1) == REG_L)
  2002. INST_RETURN(2, 0xCB, 0xCD)
  2003. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_A)
  2004. INST_RETURN(2, 0xCB, 0xD7)
  2005. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_B)
  2006. INST_RETURN(2, 0xCB, 0xD0)
  2007. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_C)
  2008. INST_RETURN(2, 0xCB, 0xD1)
  2009. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_D)
  2010. INST_RETURN(2, 0xCB, 0xD2)
  2011. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_E)
  2012. INST_RETURN(2, 0xCB, 0xD3)
  2013. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_H)
  2014. INST_RETURN(2, 0xCB, 0xD4)
  2015. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(1) == REG_L)
  2016. INST_RETURN(2, 0xCB, 0xD5)
  2017. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_A)
  2018. INST_RETURN(2, 0xCB, 0xDF)
  2019. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_B)
  2020. INST_RETURN(2, 0xCB, 0xD8)
  2021. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_C)
  2022. INST_RETURN(2, 0xCB, 0xD9)
  2023. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_D)
  2024. INST_RETURN(2, 0xCB, 0xDA)
  2025. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_E)
  2026. INST_RETURN(2, 0xCB, 0xDB)
  2027. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_H)
  2028. INST_RETURN(2, 0xCB, 0xDC)
  2029. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(1) == REG_L)
  2030. INST_RETURN(2, 0xCB, 0xDD)
  2031. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_A)
  2032. INST_RETURN(2, 0xCB, 0xE7)
  2033. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_B)
  2034. INST_RETURN(2, 0xCB, 0xE0)
  2035. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_C)
  2036. INST_RETURN(2, 0xCB, 0xE1)
  2037. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_D)
  2038. INST_RETURN(2, 0xCB, 0xE2)
  2039. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_E)
  2040. INST_RETURN(2, 0xCB, 0xE3)
  2041. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_H)
  2042. INST_RETURN(2, 0xCB, 0xE4)
  2043. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(1) == REG_L)
  2044. INST_RETURN(2, 0xCB, 0xE5)
  2045. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_A)
  2046. INST_RETURN(2, 0xCB, 0xEF)
  2047. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_B)
  2048. INST_RETURN(2, 0xCB, 0xE8)
  2049. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_C)
  2050. INST_RETURN(2, 0xCB, 0xE9)
  2051. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_D)
  2052. INST_RETURN(2, 0xCB, 0xEA)
  2053. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_E)
  2054. INST_RETURN(2, 0xCB, 0xEB)
  2055. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_H)
  2056. INST_RETURN(2, 0xCB, 0xEC)
  2057. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(1) == REG_L)
  2058. INST_RETURN(2, 0xCB, 0xED)
  2059. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_A)
  2060. INST_RETURN(2, 0xCB, 0xF7)
  2061. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_B)
  2062. INST_RETURN(2, 0xCB, 0xF0)
  2063. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_C)
  2064. INST_RETURN(2, 0xCB, 0xF1)
  2065. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_D)
  2066. INST_RETURN(2, 0xCB, 0xF2)
  2067. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_E)
  2068. INST_RETURN(2, 0xCB, 0xF3)
  2069. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_H)
  2070. INST_RETURN(2, 0xCB, 0xF4)
  2071. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(1) == REG_L)
  2072. INST_RETURN(2, 0xCB, 0xF5)
  2073. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_A)
  2074. INST_RETURN(2, 0xCB, 0xFF)
  2075. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_B)
  2076. INST_RETURN(2, 0xCB, 0xF8)
  2077. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_C)
  2078. INST_RETURN(2, 0xCB, 0xF9)
  2079. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_D)
  2080. INST_RETURN(2, 0xCB, 0xFA)
  2081. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_E)
  2082. INST_RETURN(2, 0xCB, 0xFB)
  2083. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_H)
  2084. INST_RETURN(2, 0xCB, 0xFC)
  2085. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(1) == REG_L)
  2086. INST_RETURN(2, 0xCB, 0xFD)
  2087. INST_ERROR(ARG_VALUE)
  2088. }
  2089. if (INST_NARGS == 2 && INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_INDIRECT &&
  2090. (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL)) {
  2091. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0))
  2092. INST_RETURN(2, 0xCB, 0xC6)
  2093. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1))
  2094. INST_RETURN(2, 0xCB, 0xCE)
  2095. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2))
  2096. INST_RETURN(2, 0xCB, 0xD6)
  2097. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3))
  2098. INST_RETURN(2, 0xCB, 0xDE)
  2099. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4))
  2100. INST_RETURN(2, 0xCB, 0xE6)
  2101. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5))
  2102. INST_RETURN(2, 0xCB, 0xEE)
  2103. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6))
  2104. INST_RETURN(2, 0xCB, 0xF6)
  2105. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7))
  2106. INST_RETURN(2, 0xCB, 0xFE)
  2107. INST_ERROR(ARG_VALUE)
  2108. }
  2109. if (INST_NARGS == 2 && INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_INDEXED) {
  2110. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0))
  2111. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC6)
  2112. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1))
  2113. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xCE)
  2114. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2))
  2115. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD6)
  2116. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3))
  2117. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xDE)
  2118. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4))
  2119. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE6)
  2120. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5))
  2121. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xEE)
  2122. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6))
  2123. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF6)
  2124. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7))
  2125. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xFE)
  2126. INST_ERROR(ARG_VALUE)
  2127. }
  2128. if (INST_NARGS == 3 && INST_TYPE(0) == AT_IMMEDIATE && INST_TYPE(1) == AT_INDEXED && INST_TYPE(2) == AT_REGISTER) {
  2129. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_A)
  2130. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC7)
  2131. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_B)
  2132. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC0)
  2133. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_C)
  2134. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC1)
  2135. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_D)
  2136. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC2)
  2137. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_E)
  2138. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC3)
  2139. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_H)
  2140. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC4)
  2141. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 0) && INST_REG(2) == REG_L)
  2142. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC5)
  2143. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_A)
  2144. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xCF)
  2145. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_B)
  2146. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC8)
  2147. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_C)
  2148. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xC9)
  2149. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_D)
  2150. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xCA)
  2151. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_E)
  2152. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xCB)
  2153. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_H)
  2154. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xCC)
  2155. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 1) && INST_REG(2) == REG_L)
  2156. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xCD)
  2157. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_A)
  2158. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD7)
  2159. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_B)
  2160. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD0)
  2161. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_C)
  2162. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD1)
  2163. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_D)
  2164. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD2)
  2165. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_E)
  2166. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD3)
  2167. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_H)
  2168. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD4)
  2169. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 2) && INST_REG(2) == REG_L)
  2170. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD5)
  2171. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_A)
  2172. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xDF)
  2173. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_B)
  2174. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD8)
  2175. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_C)
  2176. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xD9)
  2177. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_D)
  2178. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xDA)
  2179. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_E)
  2180. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xDB)
  2181. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_H)
  2182. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xDC)
  2183. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 3) && INST_REG(2) == REG_L)
  2184. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xDD)
  2185. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_A)
  2186. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE7)
  2187. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_B)
  2188. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE0)
  2189. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_C)
  2190. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE1)
  2191. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_D)
  2192. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE2)
  2193. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_E)
  2194. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE3)
  2195. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_H)
  2196. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE4)
  2197. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 4) && INST_REG(2) == REG_L)
  2198. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE5)
  2199. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_A)
  2200. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xEF)
  2201. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_B)
  2202. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE8)
  2203. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_C)
  2204. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xE9)
  2205. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_D)
  2206. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xEA)
  2207. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_E)
  2208. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xEB)
  2209. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_H)
  2210. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xEC)
  2211. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 5) && INST_REG(2) == REG_L)
  2212. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xED)
  2213. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_A)
  2214. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF7)
  2215. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_B)
  2216. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF0)
  2217. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_C)
  2218. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF1)
  2219. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_D)
  2220. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF2)
  2221. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_E)
  2222. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF3)
  2223. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_H)
  2224. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF4)
  2225. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 6) && INST_REG(2) == REG_L)
  2226. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF5)
  2227. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_A)
  2228. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xFF)
  2229. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_B)
  2230. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF8)
  2231. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_C)
  2232. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xF9)
  2233. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_D)
  2234. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xFA)
  2235. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_E)
  2236. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xFB)
  2237. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_H)
  2238. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xFC)
  2239. if ((INST_IMM(0).mask & IMM_BIT && INST_IMM(0).uval == 7) && INST_REG(2) == REG_L)
  2240. INST_RETURN(4, INST_INDEX_PREFIX(1), 0xCB, INST_INDEX(1).offset, 0xFD)
  2241. INST_ERROR(ARG_VALUE)
  2242. }
  2243. INST_ERROR(ARG_TYPE)
  2244. }
  2245. INST_FUNC(sl1)
  2246. {
  2247. INST_TAKES_ARGS(
  2248. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  2249. AT_OPTIONAL|AT_REGISTER,
  2250. AT_NONE
  2251. )
  2252. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  2253. if (INST_REG(0) == REG_A)
  2254. INST_RETURN(2, 0xCB, 0x37)
  2255. if (INST_REG(0) == REG_B)
  2256. INST_RETURN(2, 0xCB, 0x30)
  2257. if (INST_REG(0) == REG_C)
  2258. INST_RETURN(2, 0xCB, 0x31)
  2259. if (INST_REG(0) == REG_D)
  2260. INST_RETURN(2, 0xCB, 0x32)
  2261. if (INST_REG(0) == REG_E)
  2262. INST_RETURN(2, 0xCB, 0x33)
  2263. if (INST_REG(0) == REG_H)
  2264. INST_RETURN(2, 0xCB, 0x34)
  2265. if (INST_REG(0) == REG_L)
  2266. INST_RETURN(2, 0xCB, 0x35)
  2267. INST_ERROR(ARG_VALUE)
  2268. }
  2269. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  2270. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  2271. INST_RETURN(2, 0xCB, 0x36)
  2272. }
  2273. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  2274. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x36)
  2275. }
  2276. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  2277. if (INST_REG(1) == REG_A)
  2278. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x37)
  2279. if (INST_REG(1) == REG_B)
  2280. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x30)
  2281. if (INST_REG(1) == REG_C)
  2282. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x31)
  2283. if (INST_REG(1) == REG_D)
  2284. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x32)
  2285. if (INST_REG(1) == REG_E)
  2286. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x33)
  2287. if (INST_REG(1) == REG_H)
  2288. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x34)
  2289. if (INST_REG(1) == REG_L)
  2290. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x35)
  2291. INST_ERROR(ARG_VALUE)
  2292. }
  2293. INST_ERROR(ARG_TYPE)
  2294. }
  2295. INST_FUNC(sla)
  2296. {
  2297. INST_TAKES_ARGS(
  2298. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  2299. AT_OPTIONAL|AT_REGISTER,
  2300. AT_NONE
  2301. )
  2302. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  2303. if (INST_REG(0) == REG_A)
  2304. INST_RETURN(2, 0xCB, 0x27)
  2305. if (INST_REG(0) == REG_B)
  2306. INST_RETURN(2, 0xCB, 0x20)
  2307. if (INST_REG(0) == REG_C)
  2308. INST_RETURN(2, 0xCB, 0x21)
  2309. if (INST_REG(0) == REG_D)
  2310. INST_RETURN(2, 0xCB, 0x22)
  2311. if (INST_REG(0) == REG_E)
  2312. INST_RETURN(2, 0xCB, 0x23)
  2313. if (INST_REG(0) == REG_H)
  2314. INST_RETURN(2, 0xCB, 0x24)
  2315. if (INST_REG(0) == REG_L)
  2316. INST_RETURN(2, 0xCB, 0x25)
  2317. INST_ERROR(ARG_VALUE)
  2318. }
  2319. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  2320. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  2321. INST_RETURN(2, 0xCB, 0x26)
  2322. }
  2323. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  2324. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x26)
  2325. }
  2326. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  2327. if (INST_REG(1) == REG_A)
  2328. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x27)
  2329. if (INST_REG(1) == REG_B)
  2330. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x20)
  2331. if (INST_REG(1) == REG_C)
  2332. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x21)
  2333. if (INST_REG(1) == REG_D)
  2334. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x22)
  2335. if (INST_REG(1) == REG_E)
  2336. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x23)
  2337. if (INST_REG(1) == REG_H)
  2338. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x24)
  2339. if (INST_REG(1) == REG_L)
  2340. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x25)
  2341. INST_ERROR(ARG_VALUE)
  2342. }
  2343. INST_ERROR(ARG_TYPE)
  2344. }
  2345. INST_FUNC(sll)
  2346. {
  2347. INST_TAKES_ARGS(
  2348. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  2349. AT_OPTIONAL|AT_REGISTER,
  2350. AT_NONE
  2351. )
  2352. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  2353. if (INST_REG(0) == REG_A)
  2354. INST_RETURN(2, 0xCB, 0x37)
  2355. if (INST_REG(0) == REG_B)
  2356. INST_RETURN(2, 0xCB, 0x30)
  2357. if (INST_REG(0) == REG_C)
  2358. INST_RETURN(2, 0xCB, 0x31)
  2359. if (INST_REG(0) == REG_D)
  2360. INST_RETURN(2, 0xCB, 0x32)
  2361. if (INST_REG(0) == REG_E)
  2362. INST_RETURN(2, 0xCB, 0x33)
  2363. if (INST_REG(0) == REG_H)
  2364. INST_RETURN(2, 0xCB, 0x34)
  2365. if (INST_REG(0) == REG_L)
  2366. INST_RETURN(2, 0xCB, 0x35)
  2367. INST_ERROR(ARG_VALUE)
  2368. }
  2369. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT) {
  2370. INST_RETURN(2, 0xCB, 0x36)
  2371. }
  2372. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  2373. if (INST_REG(1) == REG_A)
  2374. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x37)
  2375. if (INST_REG(1) == REG_B)
  2376. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x30)
  2377. if (INST_REG(1) == REG_C)
  2378. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x31)
  2379. if (INST_REG(1) == REG_D)
  2380. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x32)
  2381. if (INST_REG(1) == REG_E)
  2382. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x33)
  2383. if (INST_REG(1) == REG_H)
  2384. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x34)
  2385. if (INST_REG(1) == REG_L)
  2386. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x35)
  2387. INST_ERROR(ARG_VALUE)
  2388. }
  2389. INST_ERROR(ARG_TYPE)
  2390. }
  2391. INST_FUNC(sls)
  2392. {
  2393. INST_TAKES_ARGS(
  2394. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  2395. AT_OPTIONAL|AT_REGISTER,
  2396. AT_NONE
  2397. )
  2398. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  2399. if (INST_REG(0) == REG_A)
  2400. INST_RETURN(2, 0xCB, 0x37)
  2401. if (INST_REG(0) == REG_B)
  2402. INST_RETURN(2, 0xCB, 0x30)
  2403. if (INST_REG(0) == REG_C)
  2404. INST_RETURN(2, 0xCB, 0x31)
  2405. if (INST_REG(0) == REG_D)
  2406. INST_RETURN(2, 0xCB, 0x32)
  2407. if (INST_REG(0) == REG_E)
  2408. INST_RETURN(2, 0xCB, 0x33)
  2409. if (INST_REG(0) == REG_H)
  2410. INST_RETURN(2, 0xCB, 0x34)
  2411. if (INST_REG(0) == REG_L)
  2412. INST_RETURN(2, 0xCB, 0x35)
  2413. INST_ERROR(ARG_VALUE)
  2414. }
  2415. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT) {
  2416. INST_RETURN(2, 0xCB, 0x36)
  2417. }
  2418. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  2419. if (INST_REG(1) == REG_A)
  2420. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x37)
  2421. if (INST_REG(1) == REG_B)
  2422. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x30)
  2423. if (INST_REG(1) == REG_C)
  2424. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x31)
  2425. if (INST_REG(1) == REG_D)
  2426. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x32)
  2427. if (INST_REG(1) == REG_E)
  2428. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x33)
  2429. if (INST_REG(1) == REG_H)
  2430. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x34)
  2431. if (INST_REG(1) == REG_L)
  2432. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x35)
  2433. INST_ERROR(ARG_VALUE)
  2434. }
  2435. INST_ERROR(ARG_TYPE)
  2436. }
  2437. INST_FUNC(sra)
  2438. {
  2439. INST_TAKES_ARGS(
  2440. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  2441. AT_OPTIONAL|AT_REGISTER,
  2442. AT_NONE
  2443. )
  2444. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  2445. if (INST_REG(0) == REG_A)
  2446. INST_RETURN(2, 0xCB, 0x2F)
  2447. if (INST_REG(0) == REG_B)
  2448. INST_RETURN(2, 0xCB, 0x28)
  2449. if (INST_REG(0) == REG_C)
  2450. INST_RETURN(2, 0xCB, 0x29)
  2451. if (INST_REG(0) == REG_D)
  2452. INST_RETURN(2, 0xCB, 0x2A)
  2453. if (INST_REG(0) == REG_E)
  2454. INST_RETURN(2, 0xCB, 0x2B)
  2455. if (INST_REG(0) == REG_H)
  2456. INST_RETURN(2, 0xCB, 0x2C)
  2457. if (INST_REG(0) == REG_L)
  2458. INST_RETURN(2, 0xCB, 0x2D)
  2459. INST_ERROR(ARG_VALUE)
  2460. }
  2461. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  2462. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  2463. INST_RETURN(2, 0xCB, 0x2E)
  2464. }
  2465. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  2466. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x2E)
  2467. }
  2468. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  2469. if (INST_REG(1) == REG_A)
  2470. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x2F)
  2471. if (INST_REG(1) == REG_B)
  2472. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x28)
  2473. if (INST_REG(1) == REG_C)
  2474. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x29)
  2475. if (INST_REG(1) == REG_D)
  2476. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x2A)
  2477. if (INST_REG(1) == REG_E)
  2478. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x2B)
  2479. if (INST_REG(1) == REG_H)
  2480. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x2C)
  2481. if (INST_REG(1) == REG_L)
  2482. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x2D)
  2483. INST_ERROR(ARG_VALUE)
  2484. }
  2485. INST_ERROR(ARG_TYPE)
  2486. }
  2487. INST_FUNC(srl)
  2488. {
  2489. INST_TAKES_ARGS(
  2490. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  2491. AT_OPTIONAL|AT_REGISTER,
  2492. AT_NONE
  2493. )
  2494. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  2495. if (INST_REG(0) == REG_A)
  2496. INST_RETURN(2, 0xCB, 0x3F)
  2497. if (INST_REG(0) == REG_B)
  2498. INST_RETURN(2, 0xCB, 0x38)
  2499. if (INST_REG(0) == REG_C)
  2500. INST_RETURN(2, 0xCB, 0x39)
  2501. if (INST_REG(0) == REG_D)
  2502. INST_RETURN(2, 0xCB, 0x3A)
  2503. if (INST_REG(0) == REG_E)
  2504. INST_RETURN(2, 0xCB, 0x3B)
  2505. if (INST_REG(0) == REG_H)
  2506. INST_RETURN(2, 0xCB, 0x3C)
  2507. if (INST_REG(0) == REG_L)
  2508. INST_RETURN(2, 0xCB, 0x3D)
  2509. INST_ERROR(ARG_VALUE)
  2510. }
  2511. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT &&
  2512. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  2513. INST_RETURN(2, 0xCB, 0x3E)
  2514. }
  2515. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  2516. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x3E)
  2517. }
  2518. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  2519. if (INST_REG(1) == REG_A)
  2520. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x3F)
  2521. if (INST_REG(1) == REG_B)
  2522. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x38)
  2523. if (INST_REG(1) == REG_C)
  2524. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x39)
  2525. if (INST_REG(1) == REG_D)
  2526. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x3A)
  2527. if (INST_REG(1) == REG_E)
  2528. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x3B)
  2529. if (INST_REG(1) == REG_H)
  2530. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x3C)
  2531. if (INST_REG(1) == REG_L)
  2532. INST_RETURN(4, INST_INDEX_PREFIX(0), 0xCB, INST_INDEX(0).offset, 0x3D)
  2533. INST_ERROR(ARG_VALUE)
  2534. }
  2535. INST_ERROR(ARG_TYPE)
  2536. }
  2537. INST_FUNC(sub)
  2538. {
  2539. INST_TAKES_ARGS(
  2540. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  2541. AT_NONE,
  2542. AT_NONE
  2543. )
  2544. if (INST_TYPE(0) == AT_REGISTER) {
  2545. if (INST_REG(0) == REG_A)
  2546. INST_RETURN(1, 0x97)
  2547. if (INST_REG(0) == REG_B)
  2548. INST_RETURN(1, 0x90)
  2549. if (INST_REG(0) == REG_C)
  2550. INST_RETURN(1, 0x91)
  2551. if (INST_REG(0) == REG_D)
  2552. INST_RETURN(1, 0x92)
  2553. if (INST_REG(0) == REG_E)
  2554. INST_RETURN(1, 0x93)
  2555. if (INST_REG(0) == REG_H)
  2556. INST_RETURN(1, 0x94)
  2557. if (INST_REG(0) == REG_IXH)
  2558. INST_RETURN(2, INST_IX_PREFIX, 0x94)
  2559. if (INST_REG(0) == REG_IYH)
  2560. INST_RETURN(2, INST_IY_PREFIX, 0x94)
  2561. if (INST_REG(0) == REG_L)
  2562. INST_RETURN(1, 0x95)
  2563. if (INST_REG(0) == REG_IXL)
  2564. INST_RETURN(2, INST_IX_PREFIX, 0x95)
  2565. if (INST_REG(0) == REG_IYL)
  2566. INST_RETURN(2, INST_IY_PREFIX, 0x95)
  2567. INST_ERROR(ARG_VALUE)
  2568. }
  2569. if (INST_TYPE(0) == AT_IMMEDIATE) {
  2570. if (INST_IMM(0).mask & IMM_U8)
  2571. INST_RETURN(2, 0xD6, INST_IMM(0).uval)
  2572. INST_ERROR(ARG_VALUE)
  2573. }
  2574. if (INST_TYPE(0) == AT_INDIRECT &&
  2575. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  2576. INST_RETURN(1, 0x96)
  2577. }
  2578. if (INST_TYPE(0) == AT_INDEXED) {
  2579. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x96, INST_INDEX(0).offset)
  2580. }
  2581. INST_ERROR(ARG_TYPE)
  2582. }
  2583. INST_FUNC(xor)
  2584. {
  2585. INST_TAKES_ARGS(
  2586. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  2587. AT_NONE,
  2588. AT_NONE
  2589. )
  2590. if (INST_TYPE(0) == AT_REGISTER) {
  2591. if (INST_REG(0) == REG_A)
  2592. INST_RETURN(1, 0xAF)
  2593. if (INST_REG(0) == REG_B)
  2594. INST_RETURN(1, 0xA8)
  2595. if (INST_REG(0) == REG_C)
  2596. INST_RETURN(1, 0xA9)
  2597. if (INST_REG(0) == REG_D)
  2598. INST_RETURN(1, 0xAA)
  2599. if (INST_REG(0) == REG_E)
  2600. INST_RETURN(1, 0xAB)
  2601. if (INST_REG(0) == REG_H)
  2602. INST_RETURN(1, 0xAC)
  2603. if (INST_REG(0) == REG_IXH)
  2604. INST_RETURN(2, INST_IX_PREFIX, 0xAC)
  2605. if (INST_REG(0) == REG_IYH)
  2606. INST_RETURN(2, INST_IY_PREFIX, 0xAC)
  2607. if (INST_REG(0) == REG_L)
  2608. INST_RETURN(1, 0xAD)
  2609. if (INST_REG(0) == REG_IXL)
  2610. INST_RETURN(2, INST_IX_PREFIX, 0xAD)
  2611. if (INST_REG(0) == REG_IYL)
  2612. INST_RETURN(2, INST_IY_PREFIX, 0xAD)
  2613. INST_ERROR(ARG_VALUE)
  2614. }
  2615. if (INST_TYPE(0) == AT_IMMEDIATE) {
  2616. if (INST_IMM(0).mask & IMM_U8)
  2617. INST_RETURN(2, 0xEE, INST_IMM(0).uval)
  2618. INST_ERROR(ARG_VALUE)
  2619. }
  2620. if (INST_TYPE(0) == AT_INDIRECT &&
  2621. (INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL)) {
  2622. INST_RETURN(1, 0xAE)
  2623. }
  2624. if (INST_TYPE(0) == AT_INDEXED) {
  2625. INST_RETURN(3, INST_INDEX_PREFIX(0), 0xAE, INST_INDEX(0).offset)
  2626. }
  2627. INST_ERROR(ARG_TYPE)
  2628. }
  2629. /* @AUTOGEN_INST_BLOCK_END */
  2630. /*
  2631. Return the relevant ASMInstParser function for the given encoded mnemonic.
  2632. */
  2633. static ASMInstParser lookup_parser(uint32_t key)
  2634. {
  2635. /* @AUTOGEN_LOOKUP_BLOCK_START */
  2636. HANDLE(adc)
  2637. HANDLE(add)
  2638. HANDLE(and)
  2639. HANDLE(bit)
  2640. HANDLE(call)
  2641. HANDLE(ccf)
  2642. HANDLE(cp)
  2643. HANDLE(cpd)
  2644. HANDLE(cpdr)
  2645. HANDLE(cpi)
  2646. HANDLE(cpir)
  2647. HANDLE(cpl)
  2648. HANDLE(daa)
  2649. HANDLE(dec)
  2650. HANDLE(di)
  2651. HANDLE(djnz)
  2652. HANDLE(ei)
  2653. HANDLE(ex)
  2654. HANDLE(exx)
  2655. HANDLE(halt)
  2656. HANDLE(im)
  2657. HANDLE(in)
  2658. HANDLE(inc)
  2659. HANDLE(ind)
  2660. HANDLE(indr)
  2661. HANDLE(ini)
  2662. HANDLE(inir)
  2663. HANDLE(jp)
  2664. HANDLE(jr)
  2665. HANDLE(ld)
  2666. HANDLE(ldd)
  2667. HANDLE(lddr)
  2668. HANDLE(ldi)
  2669. HANDLE(ldir)
  2670. HANDLE(neg)
  2671. HANDLE(nop)
  2672. HANDLE(or)
  2673. HANDLE(otdr)
  2674. HANDLE(otir)
  2675. HANDLE(out)
  2676. HANDLE(outd)
  2677. HANDLE(outi)
  2678. HANDLE(pop)
  2679. HANDLE(push)
  2680. HANDLE(res)
  2681. HANDLE(ret)
  2682. HANDLE(reti)
  2683. HANDLE(retn)
  2684. HANDLE(rl)
  2685. HANDLE(rla)
  2686. HANDLE(rlc)
  2687. HANDLE(rlca)
  2688. HANDLE(rld)
  2689. HANDLE(rr)
  2690. HANDLE(rra)
  2691. HANDLE(rrc)
  2692. HANDLE(rrca)
  2693. HANDLE(rrd)
  2694. HANDLE(rst)
  2695. HANDLE(sbc)
  2696. HANDLE(scf)
  2697. HANDLE(set)
  2698. HANDLE(sl1)
  2699. HANDLE(sla)
  2700. HANDLE(sll)
  2701. HANDLE(sls)
  2702. HANDLE(sra)
  2703. HANDLE(srl)
  2704. HANDLE(sub)
  2705. HANDLE(xor)
  2706. /* @AUTOGEN_LOOKUP_BLOCK_END */
  2707. return NULL;
  2708. }