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.
 
 
 
 
 

832 lines
32 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 Mon May 18 05:16:08 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_NARGS == 2 && 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_NARGS == 2 && 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_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT) {
  56. if (INST_REG(0) == REG_A && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  57. INST_RETURN(1, 0x8E)
  58. INST_ERROR(ARG_VALUE)
  59. }
  60. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDEXED) {
  61. if (INST_REG(0) == REG_A)
  62. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x8E, INST_INDEX(1).offset)
  63. INST_ERROR(ARG_VALUE)
  64. }
  65. INST_ERROR(ARG_TYPE)
  66. }
  67. INST_FUNC(add)
  68. {
  69. INST_TAKES_ARGS(
  70. AT_REGISTER,
  71. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  72. AT_NONE
  73. )
  74. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_REGISTER) {
  75. if (INST_REG(0) == REG_A && INST_REG(1) == REG_A)
  76. INST_RETURN(1, 0x87)
  77. if (INST_REG(0) == REG_A && INST_REG(1) == REG_B)
  78. INST_RETURN(1, 0x80)
  79. if (INST_REG(0) == REG_A && INST_REG(1) == REG_C)
  80. INST_RETURN(1, 0x81)
  81. if (INST_REG(0) == REG_A && INST_REG(1) == REG_D)
  82. INST_RETURN(1, 0x82)
  83. if (INST_REG(0) == REG_A && INST_REG(1) == REG_E)
  84. INST_RETURN(1, 0x83)
  85. if (INST_REG(0) == REG_A && INST_REG(1) == REG_H)
  86. INST_RETURN(1, 0x84)
  87. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXH)
  88. INST_RETURN(2, INST_IX_PREFIX, 0x84)
  89. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYH)
  90. INST_RETURN(2, INST_IY_PREFIX, 0x84)
  91. if (INST_REG(0) == REG_A && INST_REG(1) == REG_L)
  92. INST_RETURN(1, 0x85)
  93. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXL)
  94. INST_RETURN(2, INST_IX_PREFIX, 0x85)
  95. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYL)
  96. INST_RETURN(2, INST_IY_PREFIX, 0x85)
  97. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_BC)
  98. INST_RETURN(1, 0x09)
  99. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_BC)
  100. INST_RETURN(2, INST_IX_PREFIX, 0x09)
  101. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_BC)
  102. INST_RETURN(2, INST_IY_PREFIX, 0x09)
  103. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_DE)
  104. INST_RETURN(1, 0x19)
  105. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_DE)
  106. INST_RETURN(2, INST_IX_PREFIX, 0x19)
  107. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_DE)
  108. INST_RETURN(2, INST_IY_PREFIX, 0x19)
  109. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_HL)
  110. INST_RETURN(1, 0x29)
  111. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_IX)
  112. INST_RETURN(2, INST_IX_PREFIX, 0x29)
  113. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_IY)
  114. INST_RETURN(2, INST_IY_PREFIX, 0x29)
  115. if (INST_REG(0) == REG_HL && INST_REG(1) == REG_SP)
  116. INST_RETURN(1, 0x39)
  117. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_SP)
  118. INST_RETURN(2, INST_IX_PREFIX, 0x39)
  119. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_SP)
  120. INST_RETURN(2, INST_IY_PREFIX, 0x39)
  121. INST_ERROR(ARG_VALUE)
  122. }
  123. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_IMMEDIATE) {
  124. if (INST_REG(0) == REG_A && INST_IMM(1).mask & IMM_U8)
  125. INST_RETURN(2, 0xC6, INST_IMM(1).uval)
  126. INST_ERROR(ARG_VALUE)
  127. }
  128. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT) {
  129. if (INST_REG(0) == REG_A && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  130. INST_RETURN(1, 0x86)
  131. INST_ERROR(ARG_VALUE)
  132. }
  133. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDEXED) {
  134. if (INST_REG(0) == REG_A)
  135. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x86, INST_INDEX(1).offset)
  136. INST_ERROR(ARG_VALUE)
  137. }
  138. INST_ERROR(ARG_TYPE)
  139. }
  140. INST_FUNC(ccf)
  141. {
  142. INST_TAKES_NO_ARGS
  143. INST_RETURN(1, 0x3F)
  144. }
  145. INST_FUNC(cpd)
  146. {
  147. INST_TAKES_NO_ARGS
  148. INST_RETURN(2, 0xED, 0xA9)
  149. }
  150. INST_FUNC(cpdr)
  151. {
  152. INST_TAKES_NO_ARGS
  153. INST_RETURN(2, 0xED, 0xB9)
  154. }
  155. INST_FUNC(cpi)
  156. {
  157. INST_TAKES_NO_ARGS
  158. INST_RETURN(2, 0xED, 0xA1)
  159. }
  160. INST_FUNC(cpir)
  161. {
  162. INST_TAKES_NO_ARGS
  163. INST_RETURN(2, 0xED, 0xB1)
  164. }
  165. INST_FUNC(cpl)
  166. {
  167. INST_TAKES_NO_ARGS
  168. INST_RETURN(1, 0x2F)
  169. }
  170. INST_FUNC(daa)
  171. {
  172. INST_TAKES_NO_ARGS
  173. INST_RETURN(1, 0x27)
  174. }
  175. INST_FUNC(di)
  176. {
  177. INST_TAKES_NO_ARGS
  178. INST_RETURN(1, 0xF3)
  179. }
  180. INST_FUNC(ei)
  181. {
  182. INST_TAKES_NO_ARGS
  183. INST_RETURN(1, 0xFB)
  184. }
  185. INST_FUNC(exx)
  186. {
  187. INST_TAKES_NO_ARGS
  188. INST_RETURN(1, 0xD9)
  189. }
  190. INST_FUNC(halt)
  191. {
  192. INST_TAKES_NO_ARGS
  193. INST_RETURN(1, 0x76)
  194. }
  195. INST_FUNC(inc)
  196. {
  197. INST_TAKES_ARGS(
  198. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  199. AT_NONE,
  200. AT_NONE
  201. )
  202. if (INST_NARGS == 1 && INST_TYPE(0) == AT_REGISTER) {
  203. if (INST_REG(0) == REG_A)
  204. INST_RETURN(1, 0x3C)
  205. if (INST_REG(0) == REG_B)
  206. INST_RETURN(1, 0x04)
  207. if (INST_REG(0) == REG_C)
  208. INST_RETURN(1, 0x0C)
  209. if (INST_REG(0) == REG_D)
  210. INST_RETURN(1, 0x14)
  211. if (INST_REG(0) == REG_E)
  212. INST_RETURN(1, 0x1C)
  213. if (INST_REG(0) == REG_H)
  214. INST_RETURN(1, 0x24)
  215. if (INST_REG(0) == REG_IXH)
  216. INST_RETURN(2, INST_IX_PREFIX, 0x24)
  217. if (INST_REG(0) == REG_IYH)
  218. INST_RETURN(2, INST_IY_PREFIX, 0x24)
  219. if (INST_REG(0) == REG_L)
  220. INST_RETURN(1, 0x2C)
  221. if (INST_REG(0) == REG_IXL)
  222. INST_RETURN(2, INST_IX_PREFIX, 0x2C)
  223. if (INST_REG(0) == REG_IYL)
  224. INST_RETURN(2, INST_IY_PREFIX, 0x2C)
  225. if (INST_REG(0) == REG_BC)
  226. INST_RETURN(1, 0x03)
  227. if (INST_REG(0) == REG_DE)
  228. INST_RETURN(1, 0x13)
  229. if (INST_REG(0) == REG_HL)
  230. INST_RETURN(1, 0x23)
  231. if (INST_REG(0) == REG_IX)
  232. INST_RETURN(2, INST_IX_PREFIX, 0x23)
  233. if (INST_REG(0) == REG_IY)
  234. INST_RETURN(2, INST_IY_PREFIX, 0x23)
  235. if (INST_REG(0) == REG_SP)
  236. INST_RETURN(1, 0x33)
  237. INST_ERROR(ARG_VALUE)
  238. }
  239. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDIRECT) {
  240. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL))
  241. INST_RETURN(1, 0x34)
  242. INST_ERROR(ARG_VALUE)
  243. }
  244. if (INST_NARGS == 1 && INST_TYPE(0) == AT_INDEXED) {
  245. if (1)
  246. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x34, INST_INDEX(0).offset)
  247. INST_ERROR(ARG_VALUE)
  248. }
  249. INST_ERROR(ARG_TYPE)
  250. }
  251. INST_FUNC(ind)
  252. {
  253. INST_TAKES_NO_ARGS
  254. INST_RETURN(2, 0xED, 0xAA)
  255. }
  256. INST_FUNC(indr)
  257. {
  258. INST_TAKES_NO_ARGS
  259. INST_RETURN(2, 0xED, 0xBA)
  260. }
  261. INST_FUNC(ini)
  262. {
  263. INST_TAKES_NO_ARGS
  264. INST_RETURN(2, 0xED, 0xA2)
  265. }
  266. INST_FUNC(inir)
  267. {
  268. INST_TAKES_NO_ARGS
  269. INST_RETURN(2, 0xED, 0xB2)
  270. }
  271. INST_FUNC(ld)
  272. {
  273. INST_TAKES_ARGS(
  274. AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  275. AT_IMMEDIATE|AT_INDEXED|AT_INDIRECT|AT_REGISTER,
  276. AT_NONE
  277. )
  278. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_REGISTER) {
  279. if (INST_REG(0) == REG_A && INST_REG(1) == REG_A)
  280. INST_RETURN(1, 0x7F)
  281. if (INST_REG(0) == REG_A && INST_REG(1) == REG_B)
  282. INST_RETURN(1, 0x78)
  283. if (INST_REG(0) == REG_A && INST_REG(1) == REG_C)
  284. INST_RETURN(1, 0x79)
  285. if (INST_REG(0) == REG_A && INST_REG(1) == REG_D)
  286. INST_RETURN(1, 0x7A)
  287. if (INST_REG(0) == REG_A && INST_REG(1) == REG_E)
  288. INST_RETURN(1, 0x7B)
  289. if (INST_REG(0) == REG_A && INST_REG(1) == REG_H)
  290. INST_RETURN(1, 0x7C)
  291. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXH)
  292. INST_RETURN(2, INST_IX_PREFIX, 0x7C)
  293. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYH)
  294. INST_RETURN(2, INST_IY_PREFIX, 0x7C)
  295. if (INST_REG(0) == REG_A && INST_REG(1) == REG_L)
  296. INST_RETURN(1, 0x7D)
  297. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IXL)
  298. INST_RETURN(2, INST_IX_PREFIX, 0x7D)
  299. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IYL)
  300. INST_RETURN(2, INST_IY_PREFIX, 0x7D)
  301. if (INST_REG(0) == REG_B && INST_REG(1) == REG_A)
  302. INST_RETURN(1, 0x47)
  303. if (INST_REG(0) == REG_B && INST_REG(1) == REG_B)
  304. INST_RETURN(1, 0x40)
  305. if (INST_REG(0) == REG_B && INST_REG(1) == REG_C)
  306. INST_RETURN(1, 0x41)
  307. if (INST_REG(0) == REG_B && INST_REG(1) == REG_D)
  308. INST_RETURN(1, 0x42)
  309. if (INST_REG(0) == REG_B && INST_REG(1) == REG_E)
  310. INST_RETURN(1, 0x43)
  311. if (INST_REG(0) == REG_B && INST_REG(1) == REG_H)
  312. INST_RETURN(1, 0x44)
  313. if (INST_REG(0) == REG_B && INST_REG(1) == REG_IXH)
  314. INST_RETURN(2, INST_IX_PREFIX, 0x44)
  315. if (INST_REG(0) == REG_B && INST_REG(1) == REG_IYH)
  316. INST_RETURN(2, INST_IY_PREFIX, 0x44)
  317. if (INST_REG(0) == REG_B && INST_REG(1) == REG_L)
  318. INST_RETURN(1, 0x45)
  319. if (INST_REG(0) == REG_B && INST_REG(1) == REG_IXL)
  320. INST_RETURN(2, INST_IX_PREFIX, 0x45)
  321. if (INST_REG(0) == REG_B && INST_REG(1) == REG_IYL)
  322. INST_RETURN(2, INST_IY_PREFIX, 0x45)
  323. if (INST_REG(0) == REG_C && INST_REG(1) == REG_A)
  324. INST_RETURN(1, 0x4F)
  325. if (INST_REG(0) == REG_C && INST_REG(1) == REG_B)
  326. INST_RETURN(1, 0x48)
  327. if (INST_REG(0) == REG_C && INST_REG(1) == REG_C)
  328. INST_RETURN(1, 0x49)
  329. if (INST_REG(0) == REG_C && INST_REG(1) == REG_D)
  330. INST_RETURN(1, 0x4A)
  331. if (INST_REG(0) == REG_C && INST_REG(1) == REG_E)
  332. INST_RETURN(1, 0x4B)
  333. if (INST_REG(0) == REG_C && INST_REG(1) == REG_H)
  334. INST_RETURN(1, 0x4C)
  335. if (INST_REG(0) == REG_C && INST_REG(1) == REG_IXH)
  336. INST_RETURN(2, INST_IX_PREFIX, 0x4C)
  337. if (INST_REG(0) == REG_C && INST_REG(1) == REG_IYH)
  338. INST_RETURN(2, INST_IY_PREFIX, 0x4C)
  339. if (INST_REG(0) == REG_C && INST_REG(1) == REG_L)
  340. INST_RETURN(1, 0x4D)
  341. if (INST_REG(0) == REG_C && INST_REG(1) == REG_IXL)
  342. INST_RETURN(2, INST_IX_PREFIX, 0x4D)
  343. if (INST_REG(0) == REG_C && INST_REG(1) == REG_IYL)
  344. INST_RETURN(2, INST_IY_PREFIX, 0x4D)
  345. if (INST_REG(0) == REG_D && INST_REG(1) == REG_A)
  346. INST_RETURN(1, 0x57)
  347. if (INST_REG(0) == REG_D && INST_REG(1) == REG_B)
  348. INST_RETURN(1, 0x50)
  349. if (INST_REG(0) == REG_D && INST_REG(1) == REG_C)
  350. INST_RETURN(1, 0x51)
  351. if (INST_REG(0) == REG_D && INST_REG(1) == REG_D)
  352. INST_RETURN(1, 0x52)
  353. if (INST_REG(0) == REG_D && INST_REG(1) == REG_E)
  354. INST_RETURN(1, 0x53)
  355. if (INST_REG(0) == REG_D && INST_REG(1) == REG_H)
  356. INST_RETURN(1, 0x54)
  357. if (INST_REG(0) == REG_D && INST_REG(1) == REG_IXH)
  358. INST_RETURN(2, INST_IX_PREFIX, 0x54)
  359. if (INST_REG(0) == REG_D && INST_REG(1) == REG_IYH)
  360. INST_RETURN(2, INST_IY_PREFIX, 0x54)
  361. if (INST_REG(0) == REG_D && INST_REG(1) == REG_L)
  362. INST_RETURN(1, 0x55)
  363. if (INST_REG(0) == REG_D && INST_REG(1) == REG_IXL)
  364. INST_RETURN(2, INST_IX_PREFIX, 0x55)
  365. if (INST_REG(0) == REG_D && INST_REG(1) == REG_IYL)
  366. INST_RETURN(2, INST_IY_PREFIX, 0x55)
  367. if (INST_REG(0) == REG_E && INST_REG(1) == REG_A)
  368. INST_RETURN(1, 0x5F)
  369. if (INST_REG(0) == REG_E && INST_REG(1) == REG_B)
  370. INST_RETURN(1, 0x58)
  371. if (INST_REG(0) == REG_E && INST_REG(1) == REG_C)
  372. INST_RETURN(1, 0x59)
  373. if (INST_REG(0) == REG_E && INST_REG(1) == REG_D)
  374. INST_RETURN(1, 0x5A)
  375. if (INST_REG(0) == REG_E && INST_REG(1) == REG_E)
  376. INST_RETURN(1, 0x5B)
  377. if (INST_REG(0) == REG_E && INST_REG(1) == REG_H)
  378. INST_RETURN(1, 0x5C)
  379. if (INST_REG(0) == REG_E && INST_REG(1) == REG_IXH)
  380. INST_RETURN(2, INST_IX_PREFIX, 0x5C)
  381. if (INST_REG(0) == REG_E && INST_REG(1) == REG_IYH)
  382. INST_RETURN(2, INST_IY_PREFIX, 0x5C)
  383. if (INST_REG(0) == REG_E && INST_REG(1) == REG_L)
  384. INST_RETURN(1, 0x5D)
  385. if (INST_REG(0) == REG_E && INST_REG(1) == REG_IXL)
  386. INST_RETURN(2, INST_IX_PREFIX, 0x5D)
  387. if (INST_REG(0) == REG_E && INST_REG(1) == REG_IYL)
  388. INST_RETURN(2, INST_IY_PREFIX, 0x5D)
  389. if (INST_REG(0) == REG_H && INST_REG(1) == REG_A)
  390. INST_RETURN(1, 0x67)
  391. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_A)
  392. INST_RETURN(2, INST_IX_PREFIX, 0x67)
  393. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_A)
  394. INST_RETURN(2, INST_IY_PREFIX, 0x67)
  395. if (INST_REG(0) == REG_H && INST_REG(1) == REG_B)
  396. INST_RETURN(1, 0x60)
  397. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_B)
  398. INST_RETURN(2, INST_IX_PREFIX, 0x60)
  399. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_B)
  400. INST_RETURN(2, INST_IY_PREFIX, 0x60)
  401. if (INST_REG(0) == REG_H && INST_REG(1) == REG_C)
  402. INST_RETURN(1, 0x61)
  403. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_C)
  404. INST_RETURN(2, INST_IX_PREFIX, 0x61)
  405. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_C)
  406. INST_RETURN(2, INST_IY_PREFIX, 0x61)
  407. if (INST_REG(0) == REG_H && INST_REG(1) == REG_D)
  408. INST_RETURN(1, 0x62)
  409. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_D)
  410. INST_RETURN(2, INST_IX_PREFIX, 0x62)
  411. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_D)
  412. INST_RETURN(2, INST_IY_PREFIX, 0x62)
  413. if (INST_REG(0) == REG_H && INST_REG(1) == REG_E)
  414. INST_RETURN(1, 0x63)
  415. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_E)
  416. INST_RETURN(2, INST_IX_PREFIX, 0x63)
  417. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_E)
  418. INST_RETURN(2, INST_IY_PREFIX, 0x63)
  419. if (INST_REG(0) == REG_H && INST_REG(1) == REG_H)
  420. INST_RETURN(1, 0x64)
  421. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_IXH)
  422. INST_RETURN(2, INST_IX_PREFIX, 0x64)
  423. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_IYH)
  424. INST_RETURN(2, INST_IY_PREFIX, 0x64)
  425. if (INST_REG(0) == REG_H && INST_REG(1) == REG_L)
  426. INST_RETURN(1, 0x65)
  427. if (INST_REG(0) == REG_IXH && INST_REG(1) == REG_IXL)
  428. INST_RETURN(2, INST_IX_PREFIX, 0x65)
  429. if (INST_REG(0) == REG_IYH && INST_REG(1) == REG_IYL)
  430. INST_RETURN(2, INST_IY_PREFIX, 0x65)
  431. if (INST_REG(0) == REG_L && INST_REG(1) == REG_A)
  432. INST_RETURN(1, 0x6F)
  433. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_A)
  434. INST_RETURN(2, INST_IX_PREFIX, 0x6F)
  435. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_A)
  436. INST_RETURN(2, INST_IY_PREFIX, 0x6F)
  437. if (INST_REG(0) == REG_L && INST_REG(1) == REG_B)
  438. INST_RETURN(1, 0x68)
  439. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_B)
  440. INST_RETURN(2, INST_IX_PREFIX, 0x68)
  441. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_B)
  442. INST_RETURN(2, INST_IY_PREFIX, 0x68)
  443. if (INST_REG(0) == REG_L && INST_REG(1) == REG_C)
  444. INST_RETURN(1, 0x69)
  445. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_C)
  446. INST_RETURN(2, INST_IX_PREFIX, 0x69)
  447. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_C)
  448. INST_RETURN(2, INST_IY_PREFIX, 0x69)
  449. if (INST_REG(0) == REG_L && INST_REG(1) == REG_D)
  450. INST_RETURN(1, 0x6A)
  451. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_D)
  452. INST_RETURN(2, INST_IX_PREFIX, 0x6A)
  453. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_D)
  454. INST_RETURN(2, INST_IY_PREFIX, 0x6A)
  455. if (INST_REG(0) == REG_L && INST_REG(1) == REG_E)
  456. INST_RETURN(1, 0x6B)
  457. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_E)
  458. INST_RETURN(2, INST_IX_PREFIX, 0x6B)
  459. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_E)
  460. INST_RETURN(2, INST_IY_PREFIX, 0x6B)
  461. if (INST_REG(0) == REG_L && INST_REG(1) == REG_H)
  462. INST_RETURN(1, 0x6C)
  463. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_IXH)
  464. INST_RETURN(2, INST_IX_PREFIX, 0x6C)
  465. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_IYH)
  466. INST_RETURN(2, INST_IY_PREFIX, 0x6C)
  467. if (INST_REG(0) == REG_L && INST_REG(1) == REG_L)
  468. INST_RETURN(1, 0x6D)
  469. if (INST_REG(0) == REG_IXL && INST_REG(1) == REG_IXL)
  470. INST_RETURN(2, INST_IX_PREFIX, 0x6D)
  471. if (INST_REG(0) == REG_IYL && INST_REG(1) == REG_IYL)
  472. INST_RETURN(2, INST_IY_PREFIX, 0x6D)
  473. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IX)
  474. INST_RETURN(3, INST_IX_PREFIX, 0xED, 0x57)
  475. if (INST_REG(0) == REG_A && INST_REG(1) == REG_IY)
  476. INST_RETURN(3, INST_IY_PREFIX, 0xED, 0x57)
  477. if (INST_REG(0) == REG_IX && INST_REG(1) == REG_A)
  478. INST_RETURN(3, INST_IX_PREFIX, 0xED, 0x47)
  479. if (INST_REG(0) == REG_IY && INST_REG(1) == REG_A)
  480. INST_RETURN(3, INST_IY_PREFIX, 0xED, 0x47)
  481. if (INST_REG(0) == REG_A && INST_REG(1) == REG_R)
  482. INST_RETURN(2, 0xED, 0x5F)
  483. if (INST_REG(0) == REG_R && INST_REG(1) == REG_A)
  484. INST_RETURN(2, 0xED, 0x4F)
  485. if (INST_REG(0) == REG_SP && INST_REG(1) == REG_HL)
  486. INST_RETURN(1, 0xF9)
  487. if (INST_REG(0) == REG_SP && INST_REG(1) == REG_IX)
  488. INST_RETURN(2, INST_IX_PREFIX, 0xF9)
  489. if (INST_REG(0) == REG_SP && INST_REG(1) == REG_IY)
  490. INST_RETURN(2, INST_IY_PREFIX, 0xF9)
  491. INST_ERROR(ARG_VALUE)
  492. }
  493. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_IMMEDIATE) {
  494. if (INST_REG(0) == REG_A && INST_IMM(1).mask & IMM_U8)
  495. INST_RETURN(2, 0x3E, INST_IMM(1).uval)
  496. if (INST_REG(0) == REG_B && INST_IMM(1).mask & IMM_U8)
  497. INST_RETURN(2, 0x06, INST_IMM(1).uval)
  498. if (INST_REG(0) == REG_C && INST_IMM(1).mask & IMM_U8)
  499. INST_RETURN(2, 0x0E, INST_IMM(1).uval)
  500. if (INST_REG(0) == REG_D && INST_IMM(1).mask & IMM_U8)
  501. INST_RETURN(2, 0x16, INST_IMM(1).uval)
  502. if (INST_REG(0) == REG_E && INST_IMM(1).mask & IMM_U8)
  503. INST_RETURN(2, 0x1E, INST_IMM(1).uval)
  504. if (INST_REG(0) == REG_H && INST_IMM(1).mask & IMM_U8)
  505. INST_RETURN(2, 0x26, INST_IMM(1).uval)
  506. if (INST_REG(0) == REG_IXH && INST_IMM(1).mask & IMM_U8)
  507. INST_RETURN(3, INST_IX_PREFIX, 0x26, INST_IMM(1).uval)
  508. if (INST_REG(0) == REG_IYH && INST_IMM(1).mask & IMM_U8)
  509. INST_RETURN(3, INST_IY_PREFIX, 0x26, INST_IMM(1).uval)
  510. if (INST_REG(0) == REG_L && INST_IMM(1).mask & IMM_U8)
  511. INST_RETURN(2, 0x2E, INST_IMM(1).uval)
  512. if (INST_REG(0) == REG_IXL && INST_IMM(1).mask & IMM_U8)
  513. INST_RETURN(3, INST_IX_PREFIX, 0x2E, INST_IMM(1).uval)
  514. if (INST_REG(0) == REG_IYL && INST_IMM(1).mask & IMM_U8)
  515. INST_RETURN(3, INST_IY_PREFIX, 0x2E, INST_IMM(1).uval)
  516. if (INST_REG(0) == REG_BC && INST_IMM(1).mask & IMM_U16)
  517. INST_RETURN(3, 0x01, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  518. if (INST_REG(0) == REG_DE && INST_IMM(1).mask & IMM_U16)
  519. INST_RETURN(3, 0x11, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  520. if (INST_REG(0) == REG_HL && INST_IMM(1).mask & IMM_U16)
  521. INST_RETURN(3, 0x21, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  522. if (INST_REG(0) == REG_IX && INST_IMM(1).mask & IMM_U16)
  523. INST_RETURN(4, INST_IX_PREFIX, 0x21, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  524. if (INST_REG(0) == REG_IY && INST_IMM(1).mask & IMM_U16)
  525. INST_RETURN(4, INST_IY_PREFIX, 0x21, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  526. if (INST_REG(0) == REG_SP && INST_IMM(1).mask & IMM_U16)
  527. INST_RETURN(3, 0x31, INST_IMM_U16_B1(INST_IMM(1)), INST_IMM_U16_B2(INST_IMM(1)))
  528. INST_ERROR(ARG_VALUE)
  529. }
  530. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT) {
  531. if (INST_REG(0) == REG_A && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  532. INST_RETURN(1, 0x7E)
  533. if (INST_REG(0) == REG_B && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  534. INST_RETURN(1, 0x46)
  535. if (INST_REG(0) == REG_C && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  536. INST_RETURN(1, 0x4E)
  537. if (INST_REG(0) == REG_D && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  538. INST_RETURN(1, 0x56)
  539. if (INST_REG(0) == REG_E && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  540. INST_RETURN(1, 0x5E)
  541. if (INST_REG(0) == REG_H && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  542. INST_RETURN(1, 0x66)
  543. if (INST_REG(0) == REG_L && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_HL))
  544. INST_RETURN(1, 0x6E)
  545. INST_ERROR(ARG_VALUE)
  546. }
  547. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDEXED) {
  548. if (INST_REG(0) == REG_A)
  549. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x7E, INST_INDEX(1).offset)
  550. if (INST_REG(0) == REG_B)
  551. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x46, INST_INDEX(1).offset)
  552. if (INST_REG(0) == REG_C)
  553. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x4E, INST_INDEX(1).offset)
  554. if (INST_REG(0) == REG_D)
  555. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x56, INST_INDEX(1).offset)
  556. if (INST_REG(0) == REG_E)
  557. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x5E, INST_INDEX(1).offset)
  558. if (INST_REG(0) == REG_H)
  559. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x66, INST_INDEX(1).offset)
  560. if (INST_REG(0) == REG_L)
  561. INST_RETURN(3, INST_INDEX_PREFIX(1), 0x6E, INST_INDEX(1).offset)
  562. INST_ERROR(ARG_VALUE)
  563. }
  564. if (INST_NARGS == 2 && INST_TYPE(0) == AT_REGISTER && INST_TYPE(1) == AT_INDIRECT) {
  565. if (INST_REG(0) == REG_A && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_BC))
  566. INST_RETURN(1, 0x0A)
  567. if (INST_REG(0) == REG_A && (INST_INDIRECT(1).type == AT_REGISTER && INST_INDIRECT(1).addr.reg == REG_DE))
  568. INST_RETURN(1, 0x1A)
  569. if (INST_REG(0) == REG_HL && INST_INDIRECT(1).type == AT_IMMEDIATE)
  570. INST_RETURN(3, 0x2A, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  571. if (INST_REG(0) == REG_IX && INST_INDIRECT(1).type == AT_IMMEDIATE)
  572. 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))
  573. if (INST_REG(0) == REG_IY && INST_INDIRECT(1).type == AT_IMMEDIATE)
  574. 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))
  575. if (INST_REG(0) == REG_A && INST_INDIRECT(1).type == AT_IMMEDIATE)
  576. INST_RETURN(3, 0x3A, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  577. if (INST_REG(0) == REG_BC && INST_INDIRECT(1).type == AT_IMMEDIATE)
  578. INST_RETURN(4, 0xED, 0x4B, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  579. if (INST_REG(0) == REG_DE && INST_INDIRECT(1).type == AT_IMMEDIATE)
  580. INST_RETURN(4, 0xED, 0x5B, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  581. if (INST_REG(0) == REG_SP && INST_INDIRECT(1).type == AT_IMMEDIATE)
  582. INST_RETURN(4, 0xED, 0x7B, INST_IMM_U16_B1(INST_INDIRECT(1).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(1).addr.imm))
  583. INST_ERROR(ARG_VALUE)
  584. }
  585. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDIRECT && INST_TYPE(1) == AT_REGISTER) {
  586. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL) && INST_REG(1) == REG_A)
  587. INST_RETURN(1, 0x77)
  588. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL) && INST_REG(1) == REG_B)
  589. INST_RETURN(1, 0x70)
  590. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL) && INST_REG(1) == REG_C)
  591. INST_RETURN(1, 0x71)
  592. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL) && INST_REG(1) == REG_D)
  593. INST_RETURN(1, 0x72)
  594. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL) && INST_REG(1) == REG_E)
  595. INST_RETURN(1, 0x73)
  596. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL) && INST_REG(1) == REG_H)
  597. INST_RETURN(1, 0x74)
  598. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL) && INST_REG(1) == REG_L)
  599. INST_RETURN(1, 0x75)
  600. INST_ERROR(ARG_VALUE)
  601. }
  602. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_REGISTER) {
  603. if (INST_REG(1) == REG_A)
  604. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x77, INST_INDEX(0).offset)
  605. if (INST_REG(1) == REG_B)
  606. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x70, INST_INDEX(0).offset)
  607. if (INST_REG(1) == REG_C)
  608. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x71, INST_INDEX(0).offset)
  609. if (INST_REG(1) == REG_D)
  610. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x72, INST_INDEX(0).offset)
  611. if (INST_REG(1) == REG_E)
  612. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x73, INST_INDEX(0).offset)
  613. if (INST_REG(1) == REG_H)
  614. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x74, INST_INDEX(0).offset)
  615. if (INST_REG(1) == REG_L)
  616. INST_RETURN(3, INST_INDEX_PREFIX(0), 0x75, INST_INDEX(0).offset)
  617. INST_ERROR(ARG_VALUE)
  618. }
  619. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDIRECT && INST_TYPE(1) == AT_IMMEDIATE) {
  620. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_HL) && INST_IMM(1).mask & IMM_U8)
  621. INST_RETURN(2, 0x36, INST_IMM(1).uval)
  622. INST_ERROR(ARG_VALUE)
  623. }
  624. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDEXED && INST_TYPE(1) == AT_IMMEDIATE) {
  625. if (INST_IMM(1).mask & IMM_U8)
  626. INST_RETURN(4, INST_INDEX_PREFIX(0), 0x36, INST_IMM(1).uval, INST_INDEX(0).offset)
  627. INST_ERROR(ARG_VALUE)
  628. }
  629. if (INST_NARGS == 2 && INST_TYPE(0) == AT_INDIRECT && INST_TYPE(1) == AT_REGISTER) {
  630. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_BC) && INST_REG(1) == REG_A)
  631. INST_RETURN(1, 0x02)
  632. if ((INST_INDIRECT(0).type == AT_REGISTER && INST_INDIRECT(0).addr.reg == REG_DE) && INST_REG(1) == REG_A)
  633. INST_RETURN(1, 0x12)
  634. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_HL)
  635. INST_RETURN(3, 0x22, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  636. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_IX)
  637. 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))
  638. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_IY)
  639. 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))
  640. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_A)
  641. INST_RETURN(3, 0x32, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  642. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_BC)
  643. INST_RETURN(4, 0xED, 0x43, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  644. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_DE)
  645. INST_RETURN(4, 0xED, 0x53, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  646. if (INST_INDIRECT(0).type == AT_IMMEDIATE && INST_REG(1) == REG_SP)
  647. INST_RETURN(4, 0xED, 0x73, INST_IMM_U16_B1(INST_INDIRECT(0).addr.imm), INST_IMM_U16_B2(INST_INDIRECT(0).addr.imm))
  648. INST_ERROR(ARG_VALUE)
  649. }
  650. INST_ERROR(ARG_TYPE)
  651. }
  652. INST_FUNC(ldd)
  653. {
  654. INST_TAKES_NO_ARGS
  655. INST_RETURN(2, 0xED, 0xA8)
  656. }
  657. INST_FUNC(lddr)
  658. {
  659. INST_TAKES_NO_ARGS
  660. INST_RETURN(2, 0xED, 0xB8)
  661. }
  662. INST_FUNC(ldi)
  663. {
  664. INST_TAKES_NO_ARGS
  665. INST_RETURN(2, 0xED, 0xA0)
  666. }
  667. INST_FUNC(ldir)
  668. {
  669. INST_TAKES_NO_ARGS
  670. INST_RETURN(2, 0xED, 0xB0)
  671. }
  672. INST_FUNC(neg)
  673. {
  674. INST_TAKES_NO_ARGS
  675. INST_RETURN(2, 0xED, 0x44)
  676. }
  677. INST_FUNC(nop)
  678. {
  679. INST_TAKES_NO_ARGS
  680. INST_RETURN(1, 0x00)
  681. }
  682. INST_FUNC(otdr)
  683. {
  684. INST_TAKES_NO_ARGS
  685. INST_RETURN(2, 0xED, 0xBB)
  686. }
  687. INST_FUNC(otir)
  688. {
  689. INST_TAKES_NO_ARGS
  690. INST_RETURN(2, 0xED, 0xB3)
  691. }
  692. INST_FUNC(outd)
  693. {
  694. INST_TAKES_NO_ARGS
  695. INST_RETURN(2, 0xED, 0xAB)
  696. }
  697. INST_FUNC(outi)
  698. {
  699. INST_TAKES_NO_ARGS
  700. INST_RETURN(2, 0xED, 0xA3)
  701. }
  702. INST_FUNC(reti)
  703. {
  704. INST_TAKES_NO_ARGS
  705. INST_RETURN(2, 0xED, 0x4D)
  706. }
  707. INST_FUNC(retn)
  708. {
  709. INST_TAKES_NO_ARGS
  710. INST_RETURN(2, 0xED, 0x45)
  711. }
  712. INST_FUNC(rla)
  713. {
  714. INST_TAKES_NO_ARGS
  715. INST_RETURN(1, 0x17)
  716. }
  717. INST_FUNC(rlca)
  718. {
  719. INST_TAKES_NO_ARGS
  720. INST_RETURN(1, 0x07)
  721. }
  722. INST_FUNC(rld)
  723. {
  724. INST_TAKES_NO_ARGS
  725. INST_RETURN(2, 0xED, 0x6F)
  726. }
  727. INST_FUNC(rra)
  728. {
  729. INST_TAKES_NO_ARGS
  730. INST_RETURN(1, 0x1F)
  731. }
  732. INST_FUNC(rrca)
  733. {
  734. INST_TAKES_NO_ARGS
  735. INST_RETURN(1, 0x0F)
  736. }
  737. INST_FUNC(scf)
  738. {
  739. INST_TAKES_NO_ARGS
  740. INST_RETURN(1, 0x37)
  741. }
  742. /* @AUTOGEN_INST_BLOCK_END */
  743. /*
  744. Return the relevant ASMInstParser function for the given encoded mnemonic.
  745. */
  746. static ASMInstParser lookup_parser(uint32_t key)
  747. {
  748. /* @AUTOGEN_LOOKUP_BLOCK_START */
  749. HANDLE(adc)
  750. HANDLE(add)
  751. HANDLE(ccf)
  752. HANDLE(cpd)
  753. HANDLE(cpdr)
  754. HANDLE(cpi)
  755. HANDLE(cpir)
  756. HANDLE(cpl)
  757. HANDLE(daa)
  758. HANDLE(di)
  759. HANDLE(ei)
  760. HANDLE(exx)
  761. HANDLE(halt)
  762. HANDLE(inc)
  763. HANDLE(ind)
  764. HANDLE(indr)
  765. HANDLE(ini)
  766. HANDLE(inir)
  767. HANDLE(ld)
  768. HANDLE(ldd)
  769. HANDLE(lddr)
  770. HANDLE(ldi)
  771. HANDLE(ldir)
  772. HANDLE(neg)
  773. HANDLE(nop)
  774. HANDLE(otdr)
  775. HANDLE(otir)
  776. HANDLE(outd)
  777. HANDLE(outi)
  778. HANDLE(reti)
  779. HANDLE(retn)
  780. HANDLE(rla)
  781. HANDLE(rlca)
  782. HANDLE(rld)
  783. HANDLE(rra)
  784. HANDLE(rrca)
  785. HANDLE(scf)
  786. /* @AUTOGEN_LOOKUP_BLOCK_END */
  787. return NULL;
  788. }