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.
 
 
 
 
 

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