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.
 
 
 
 
 

788 lines
16 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. #include "instructions.h"
  4. #include "inst_support.h"
  5. /* Instruction parser functions */
  6. INST_FUNC(adc)
  7. {
  8. INST_TAKES_ARGS(2, 2)
  9. INST_FORCE_TYPE(0, AT_REGISTER)
  10. switch (INST_REG(0)) {
  11. case REG_A:
  12. switch (INST_TYPE(1)) {
  13. case AT_REGISTER:
  14. switch (INST_REG(1)) {
  15. INST_HANDLE_MAIN_8_BIT_REGS(0x88)
  16. default: INST_ERROR(ARG1_BAD_REG)
  17. }
  18. case AT_IMMEDIATE:
  19. INST_CHECK_IMM(1, IMM_U8)
  20. INST_RETURN(2, 0xCE, INST_IMM(1).uval)
  21. case AT_INDIRECT:
  22. INST_INDIRECT_HL_ONLY(1)
  23. INST_RETURN(1, 0x8E)
  24. case AT_INDEXED:
  25. INST_RETURN(3, INST_INDEX_BYTES(1, 0x8E))
  26. default:
  27. INST_ERROR(ARG1_TYPE)
  28. }
  29. case REG_HL:
  30. INST_FORCE_TYPE(1, AT_REGISTER)
  31. switch (INST_REG(1)) {
  32. case REG_BC: INST_RETURN(2, 0xED, 0x4A)
  33. case REG_DE: INST_RETURN(2, 0xED, 0x5A)
  34. case REG_HL: INST_RETURN(2, 0xED, 0x6A)
  35. case REG_SP: INST_RETURN(2, 0xED, 0x7A)
  36. default: INST_ERROR(ARG1_BAD_REG)
  37. }
  38. default:
  39. INST_ERROR(ARG0_TYPE)
  40. }
  41. }
  42. INST_FUNC(add)
  43. {
  44. INST_TAKES_ARGS(2, 2)
  45. INST_FORCE_TYPE(0, AT_REGISTER)
  46. switch (INST_REG(0)) {
  47. case REG_A:
  48. switch (INST_TYPE(1)) {
  49. case AT_REGISTER:
  50. switch (INST_REG(1)) {
  51. INST_HANDLE_MAIN_8_BIT_REGS(0x80)
  52. default: INST_ERROR(ARG1_BAD_REG)
  53. }
  54. case AT_IMMEDIATE:
  55. INST_CHECK_IMM(1, IMM_U8)
  56. INST_RETURN(2, 0xC6, INST_IMM(1).uval)
  57. case AT_INDIRECT:
  58. INST_INDIRECT_HL_ONLY(1)
  59. INST_RETURN(1, 0x86)
  60. case AT_INDEXED:
  61. INST_RETURN(3, INST_INDEX_BYTES(1, 0x86))
  62. default:
  63. INST_ERROR(ARG1_TYPE)
  64. }
  65. case REG_HL:
  66. INST_FORCE_TYPE(1, AT_REGISTER)
  67. switch (INST_REG(1)) {
  68. case REG_BC: INST_RETURN(1, 0x09)
  69. case REG_DE: INST_RETURN(1, 0x19)
  70. case REG_HL: INST_RETURN(1, 0x29)
  71. case REG_SP: INST_RETURN(1, 0x39)
  72. default: INST_ERROR(ARG1_BAD_REG)
  73. }
  74. case REG_IX:
  75. case REG_IY:
  76. INST_FORCE_TYPE(1, AT_REGISTER)
  77. switch (INST_REG(1)) {
  78. case REG_BC: INST_RETURN(2, INST_INDEX_PREFIX(1), 0x09)
  79. case REG_DE: INST_RETURN(2, INST_INDEX_PREFIX(1), 0x19)
  80. case REG_IX:
  81. case REG_IY:
  82. if (INST_REG(0) != INST_REG(1))
  83. INST_ERROR(ARG1_BAD_REG)
  84. INST_RETURN(2, INST_INDEX_PREFIX(1), 0x29)
  85. case REG_SP: INST_RETURN(2, INST_INDEX_PREFIX(1), 0x39)
  86. default: INST_ERROR(ARG1_BAD_REG)
  87. }
  88. default:
  89. INST_ERROR(ARG0_TYPE)
  90. }
  91. }
  92. INST_FUNC(and)
  93. {
  94. // TODO
  95. INST_TAKES_NO_ARGS
  96. INST_ERROR(ARG_SYNTAX)
  97. INST_RETURN(1, 0xFF)
  98. }
  99. INST_FUNC(bit)
  100. {
  101. // TODO
  102. INST_TAKES_NO_ARGS
  103. INST_ERROR(ARG_SYNTAX)
  104. INST_RETURN(1, 0xFF)
  105. }
  106. INST_FUNC(call)
  107. {
  108. // TODO
  109. INST_TAKES_NO_ARGS
  110. INST_ERROR(ARG_SYNTAX)
  111. INST_RETURN(1, 0xFF)
  112. }
  113. INST_FUNC(ccf)
  114. {
  115. INST_TAKES_NO_ARGS
  116. INST_RETURN(1, 0x3F)
  117. }
  118. INST_FUNC(cp)
  119. {
  120. // TODO
  121. INST_TAKES_NO_ARGS
  122. INST_ERROR(ARG_SYNTAX)
  123. INST_RETURN(1, 0xFF)
  124. }
  125. INST_FUNC(cpd)
  126. {
  127. INST_TAKES_NO_ARGS
  128. INST_RETURN(2, 0xED, 0xA9)
  129. }
  130. INST_FUNC(cpdr)
  131. {
  132. INST_TAKES_NO_ARGS
  133. INST_RETURN(2, 0xED, 0xB9)
  134. }
  135. INST_FUNC(cpi)
  136. {
  137. INST_TAKES_NO_ARGS
  138. INST_RETURN(2, 0xED, 0xA1)
  139. }
  140. INST_FUNC(cpir)
  141. {
  142. INST_TAKES_NO_ARGS
  143. INST_RETURN(2, 0xED, 0xB1)
  144. }
  145. INST_FUNC(cpl)
  146. {
  147. INST_TAKES_NO_ARGS
  148. INST_RETURN(1, 0x2F)
  149. }
  150. INST_FUNC(daa)
  151. {
  152. INST_TAKES_NO_ARGS
  153. INST_RETURN(1, 0x27)
  154. }
  155. INST_FUNC(dec)
  156. {
  157. // TODO
  158. INST_TAKES_NO_ARGS
  159. INST_ERROR(ARG_SYNTAX)
  160. INST_RETURN(1, 0xFF)
  161. }
  162. INST_FUNC(di)
  163. {
  164. INST_TAKES_NO_ARGS
  165. INST_RETURN(1, 0xF3)
  166. }
  167. INST_FUNC(djnz)
  168. {
  169. // TODO
  170. INST_TAKES_NO_ARGS
  171. INST_ERROR(ARG_SYNTAX)
  172. INST_RETURN(1, 0xFF)
  173. }
  174. INST_FUNC(ei)
  175. {
  176. INST_TAKES_NO_ARGS
  177. INST_RETURN(1, 0xFB)
  178. }
  179. INST_FUNC(ex)
  180. {
  181. // TODO
  182. INST_TAKES_NO_ARGS
  183. INST_ERROR(ARG_SYNTAX)
  184. INST_RETURN(1, 0xFF)
  185. }
  186. INST_FUNC(exx)
  187. {
  188. INST_TAKES_NO_ARGS
  189. INST_RETURN(1, 0xD9)
  190. }
  191. INST_FUNC(halt)
  192. {
  193. INST_TAKES_NO_ARGS
  194. INST_RETURN(1, 0x76)
  195. }
  196. INST_FUNC(im)
  197. {
  198. // TODO
  199. INST_TAKES_NO_ARGS
  200. INST_ERROR(ARG_SYNTAX)
  201. INST_RETURN(1, 0xFF)
  202. }
  203. INST_FUNC(in)
  204. {
  205. // TODO
  206. INST_TAKES_NO_ARGS
  207. INST_ERROR(ARG_SYNTAX)
  208. INST_RETURN(1, 0xFF)
  209. }
  210. INST_FUNC(inc)
  211. {
  212. INST_TAKES_ARGS(1, 1)
  213. switch (INST_TYPE(0)) {
  214. case AT_REGISTER:
  215. switch (INST_REG(0)) {
  216. case REG_A: INST_RETURN(1, 0x3C)
  217. case REG_B: INST_RETURN(1, 0x04)
  218. case REG_C: INST_RETURN(1, 0x0C)
  219. case REG_D: INST_RETURN(1, 0x14)
  220. case REG_E: INST_RETURN(1, 0x1C)
  221. case REG_H: INST_RETURN(1, 0x24)
  222. case REG_L: INST_RETURN(1, 0x2C)
  223. case REG_BC: INST_RETURN(1, 0x03)
  224. case REG_DE: INST_RETURN(1, 0x13)
  225. case REG_HL: INST_RETURN(1, 0x23)
  226. case REG_SP: INST_RETURN(1, 0x33)
  227. case REG_IX: INST_RETURN(2, 0xDD, 0x23)
  228. case REG_IY: INST_RETURN(2, 0xFD, 0x23)
  229. case REG_IXH: INST_RETURN(2, 0xDD, 0x2C)
  230. case REG_IXL: INST_RETURN(2, 0xFD, 0x2C)
  231. case REG_IYH: INST_RETURN(2, 0xDD, 0x2C)
  232. case REG_IYL: INST_RETURN(2, 0xFD, 0x2C)
  233. default: INST_ERROR(ARG0_BAD_REG)
  234. }
  235. case AT_INDIRECT:
  236. INST_INDIRECT_HL_ONLY(0)
  237. INST_RETURN(1, 0x34)
  238. case AT_INDEXED:
  239. INST_RETURN(3, INST_INDEX_BYTES(0, 0x34))
  240. default:
  241. INST_ERROR(ARG0_TYPE)
  242. }
  243. }
  244. INST_FUNC(ind)
  245. {
  246. INST_TAKES_NO_ARGS
  247. INST_RETURN(2, 0xED, 0xAA)
  248. }
  249. INST_FUNC(indr)
  250. {
  251. INST_TAKES_NO_ARGS
  252. INST_RETURN(2, 0xED, 0xBA)
  253. }
  254. INST_FUNC(ini)
  255. {
  256. INST_TAKES_NO_ARGS
  257. INST_RETURN(2, 0xED, 0xA2)
  258. }
  259. INST_FUNC(inir)
  260. {
  261. INST_TAKES_NO_ARGS
  262. INST_RETURN(2, 0xED, 0xB2)
  263. }
  264. INST_FUNC(jp)
  265. {
  266. // TODO
  267. INST_TAKES_NO_ARGS
  268. INST_ERROR(ARG_SYNTAX)
  269. INST_RETURN(1, 0xFF)
  270. }
  271. INST_FUNC(jr)
  272. {
  273. // TODO
  274. INST_TAKES_NO_ARGS
  275. INST_ERROR(ARG_SYNTAX)
  276. INST_RETURN(1, 0xFF)
  277. }
  278. INST_FUNC(ld)
  279. {
  280. uint8_t base;
  281. INST_TAKES_ARGS(2, 2)
  282. switch (INST_TYPE(0)) {
  283. case AT_REGISTER:
  284. switch (INST_REG(0)) {
  285. case REG_A:
  286. switch (INST_TYPE(1)) {
  287. case AT_REGISTER:
  288. switch (INST_REG(1)) {
  289. INST_HANDLE_MAIN_8_BIT_REGS(0x78)
  290. case REG_I: INST_RETURN(2, 0xED, 0x57)
  291. case REG_R: INST_RETURN(2, 0xED, 0x5F)
  292. default: INST_ERROR(ARG1_BAD_REG)
  293. }
  294. case AT_IMMEDIATE:
  295. INST_CHECK_IMM(1, IMM_U8)
  296. INST_RETURN(2, 0x3E, INST_IMM(1).uval)
  297. case AT_INDIRECT:
  298. switch (INST_INDIRECT(1).type) {
  299. case AT_REGISTER:
  300. switch (INST_INDIRECT(1).addr.reg) {
  301. case REG_BC: INST_RETURN(1, 0x0A)
  302. case REG_DE: INST_RETURN(1, 0x1A)
  303. case REG_HL: INST_RETURN(1, 0x7E)
  304. default: INST_ERROR(ARG0_BAD_REG)
  305. }
  306. case AT_IMMEDIATE:
  307. INST_RETURN(3, 0x3A, INST_INDIRECT_IMM(1))
  308. case AT_LABEL:
  309. INST_RETURN_INDIRECT_LABEL(1, 3, 0x3A)
  310. default:
  311. INST_ERROR(ARG1_TYPE)
  312. }
  313. case AT_INDEXED:
  314. INST_RETURN(3, INST_INDEX_BYTES(1, 0x7E))
  315. default:
  316. INST_ERROR(ARG1_TYPE)
  317. }
  318. case REG_B:
  319. base = 0x00;
  320. case REG_C:
  321. base = 0x08;
  322. case REG_D:
  323. base = 0x10;
  324. case REG_E:
  325. base = 0x18;
  326. switch (INST_TYPE(1)) {
  327. case AT_REGISTER:
  328. switch (INST_REG(1)) {
  329. INST_HANDLE_MAIN_8_BIT_REGS(base + 0x40)
  330. default: INST_ERROR(ARG1_BAD_REG)
  331. }
  332. case AT_IMMEDIATE:
  333. INST_CHECK_IMM(1, IMM_U8)
  334. INST_RETURN(2, base + 0x06, INST_IMM(1).uval)
  335. case AT_INDIRECT:
  336. INST_INDIRECT_HL_ONLY(1)
  337. INST_RETURN(1, base + 0x46)
  338. case AT_INDEXED:
  339. INST_RETURN(3, INST_INDEX_BYTES(1, base + 0x46))
  340. default:
  341. INST_ERROR(ARG1_TYPE)
  342. }
  343. case REG_H: // TODO (11 cases)
  344. case REG_L: // TODO (11 cases)
  345. case REG_I:
  346. INST_REG_ONLY(1, REG_A)
  347. INST_RETURN(2, 0xED, 0x47)
  348. case REG_R:
  349. INST_REG_ONLY(1, REG_A)
  350. INST_RETURN(2, 0xED, 0x4F)
  351. case REG_BC: // TODO ( 2 cases)
  352. case REG_DE: // TODO ( 2 cases)
  353. case REG_HL: // TODO ( 3 cases)
  354. case REG_IX: // TODO ( 2 cases)
  355. case REG_IY: // TODO ( 2 cases)
  356. case REG_SP: // TODO ( 5 cases)
  357. case REG_IXH: // TODO ( 8 cases)
  358. case REG_IXL: // TODO ( 8 cases)
  359. case REG_IYH: // TODO ( 8 cases)
  360. case REG_IYL: // TODO ( 8 cases)
  361. default: INST_ERROR(ARG0_BAD_REG)
  362. }
  363. case AT_INDIRECT:
  364. switch (INST_INDIRECT(0).type) {
  365. case AT_REGISTER:
  366. switch (INST_INDIRECT(0).addr.reg) {
  367. case REG_BC: // TODO (1 case )
  368. case REG_DE: // TODO (1 case )
  369. case REG_HL: // TODO (8 cases)
  370. default: INST_ERROR(ARG0_BAD_REG)
  371. }
  372. case AT_IMMEDIATE:
  373. // TODO (8 cases)
  374. case AT_LABEL:
  375. // TODO (same 8 cases)
  376. default:
  377. INST_ERROR(ARG0_TYPE)
  378. }
  379. case AT_INDEXED:
  380. // TODO (16 cases)
  381. default:
  382. INST_ERROR(ARG0_TYPE)
  383. }
  384. }
  385. INST_FUNC(ldd)
  386. {
  387. INST_TAKES_NO_ARGS
  388. INST_RETURN(2, 0xED, 0xA8)
  389. }
  390. INST_FUNC(lddr)
  391. {
  392. INST_TAKES_NO_ARGS
  393. INST_RETURN(2, 0xED, 0xB8)
  394. }
  395. INST_FUNC(ldi)
  396. {
  397. INST_TAKES_NO_ARGS
  398. INST_RETURN(2, 0xED, 0xA0)
  399. }
  400. INST_FUNC(ldir)
  401. {
  402. INST_TAKES_NO_ARGS
  403. INST_RETURN(2, 0xED, 0xB0)
  404. }
  405. INST_FUNC(neg)
  406. {
  407. // TODO
  408. INST_TAKES_NO_ARGS
  409. INST_ERROR(ARG_SYNTAX)
  410. INST_RETURN(1, 0xFF)
  411. }
  412. INST_FUNC(nop)
  413. {
  414. INST_TAKES_NO_ARGS
  415. INST_RETURN(1, 0x00)
  416. }
  417. INST_FUNC(or)
  418. {
  419. // TODO
  420. INST_TAKES_NO_ARGS
  421. INST_ERROR(ARG_SYNTAX)
  422. INST_RETURN(1, 0xFF)
  423. }
  424. INST_FUNC(otdr)
  425. {
  426. INST_TAKES_NO_ARGS
  427. INST_RETURN(2, 0xED, 0xBB)
  428. }
  429. INST_FUNC(otir)
  430. {
  431. INST_TAKES_NO_ARGS
  432. INST_RETURN(2, 0xED, 0xB3)
  433. }
  434. INST_FUNC(out)
  435. {
  436. // TODO
  437. INST_TAKES_NO_ARGS
  438. INST_ERROR(ARG_SYNTAX)
  439. INST_RETURN(1, 0xFF)
  440. }
  441. INST_FUNC(outd)
  442. {
  443. INST_TAKES_NO_ARGS
  444. INST_RETURN(2, 0xED, 0xAB)
  445. }
  446. INST_FUNC(outi)
  447. {
  448. INST_TAKES_NO_ARGS
  449. INST_RETURN(2, 0xED, 0xA3)
  450. }
  451. INST_FUNC(pop)
  452. {
  453. // TODO
  454. INST_TAKES_NO_ARGS
  455. INST_ERROR(ARG_SYNTAX)
  456. INST_RETURN(1, 0xFF)
  457. }
  458. INST_FUNC(push)
  459. {
  460. // TODO
  461. INST_TAKES_NO_ARGS
  462. INST_ERROR(ARG_SYNTAX)
  463. INST_RETURN(1, 0xFF)
  464. }
  465. INST_FUNC(res)
  466. {
  467. // TODO
  468. INST_TAKES_NO_ARGS
  469. INST_ERROR(ARG_SYNTAX)
  470. INST_RETURN(1, 0xFF)
  471. }
  472. INST_FUNC(ret)
  473. {
  474. // TODO
  475. INST_TAKES_NO_ARGS
  476. INST_ERROR(ARG_SYNTAX)
  477. INST_RETURN(1, 0xFF)
  478. }
  479. INST_FUNC(reti)
  480. {
  481. INST_TAKES_NO_ARGS
  482. INST_RETURN(2, 0xED, 0x4D)
  483. }
  484. INST_FUNC(retn)
  485. {
  486. INST_TAKES_NO_ARGS
  487. INST_RETURN(2, 0xED, 0x45)
  488. }
  489. INST_FUNC(rl)
  490. {
  491. // TODO
  492. INST_TAKES_NO_ARGS
  493. INST_ERROR(ARG_SYNTAX)
  494. INST_RETURN(1, 0xFF)
  495. }
  496. INST_FUNC(rla)
  497. {
  498. INST_TAKES_NO_ARGS
  499. INST_RETURN(1, 0x17)
  500. }
  501. INST_FUNC(rlc)
  502. {
  503. // TODO
  504. INST_TAKES_NO_ARGS
  505. INST_ERROR(ARG_SYNTAX)
  506. INST_RETURN(1, 0xFF)
  507. }
  508. INST_FUNC(rlca)
  509. {
  510. INST_TAKES_NO_ARGS
  511. INST_RETURN(1, 0x07)
  512. }
  513. INST_FUNC(rld)
  514. {
  515. INST_TAKES_NO_ARGS
  516. INST_RETURN(2, 0xED, 0x6F)
  517. }
  518. INST_FUNC(rr)
  519. {
  520. // TODO
  521. INST_TAKES_NO_ARGS
  522. INST_ERROR(ARG_SYNTAX)
  523. INST_RETURN(1, 0xFF)
  524. }
  525. INST_FUNC(rra)
  526. {
  527. INST_TAKES_NO_ARGS
  528. INST_RETURN(1, 0x1F)
  529. }
  530. INST_FUNC(rrc)
  531. {
  532. // TODO
  533. INST_TAKES_NO_ARGS
  534. INST_ERROR(ARG_SYNTAX)
  535. INST_RETURN(1, 0xFF)
  536. }
  537. INST_FUNC(rrca)
  538. {
  539. INST_TAKES_NO_ARGS
  540. INST_RETURN(1, 0x0F)
  541. }
  542. INST_FUNC(rrd)
  543. {
  544. // TODO
  545. INST_TAKES_NO_ARGS
  546. INST_ERROR(ARG_SYNTAX)
  547. INST_RETURN(1, 0xFF)
  548. }
  549. INST_FUNC(rst)
  550. {
  551. // TODO
  552. INST_TAKES_NO_ARGS
  553. INST_ERROR(ARG_SYNTAX)
  554. INST_RETURN(1, 0xFF)
  555. }
  556. INST_FUNC(sbc)
  557. {
  558. // TODO
  559. INST_TAKES_NO_ARGS
  560. INST_ERROR(ARG_SYNTAX)
  561. INST_RETURN(1, 0xFF)
  562. }
  563. INST_FUNC(scf)
  564. {
  565. INST_TAKES_NO_ARGS
  566. INST_RETURN(1, 0x37)
  567. }
  568. INST_FUNC(set)
  569. {
  570. // TODO
  571. INST_TAKES_NO_ARGS
  572. INST_ERROR(ARG_SYNTAX)
  573. INST_RETURN(1, 0xFF)
  574. }
  575. INST_FUNC(sl1)
  576. {
  577. // TODO
  578. INST_TAKES_NO_ARGS
  579. INST_ERROR(ARG_SYNTAX)
  580. INST_RETURN(1, 0xFF)
  581. }
  582. INST_FUNC(sla)
  583. {
  584. // TODO
  585. INST_TAKES_NO_ARGS
  586. INST_ERROR(ARG_SYNTAX)
  587. INST_RETURN(1, 0xFF)
  588. }
  589. INST_FUNC(sll)
  590. {
  591. // TODO
  592. INST_TAKES_NO_ARGS
  593. INST_ERROR(ARG_SYNTAX)
  594. INST_RETURN(1, 0xFF)
  595. }
  596. INST_FUNC(sls)
  597. {
  598. // TODO
  599. INST_TAKES_NO_ARGS
  600. INST_ERROR(ARG_SYNTAX)
  601. INST_RETURN(1, 0xFF)
  602. }
  603. INST_FUNC(sra)
  604. {
  605. // TODO
  606. INST_TAKES_NO_ARGS
  607. INST_ERROR(ARG_SYNTAX)
  608. INST_RETURN(1, 0xFF)
  609. }
  610. INST_FUNC(srl)
  611. {
  612. // TODO
  613. INST_TAKES_NO_ARGS
  614. INST_ERROR(ARG_SYNTAX)
  615. INST_RETURN(1, 0xFF)
  616. }
  617. INST_FUNC(sub)
  618. {
  619. // TODO
  620. INST_TAKES_NO_ARGS
  621. INST_ERROR(ARG_SYNTAX)
  622. INST_RETURN(1, 0xFF)
  623. }
  624. INST_FUNC(xor)
  625. {
  626. // TODO
  627. INST_TAKES_NO_ARGS
  628. INST_ERROR(ARG_SYNTAX)
  629. INST_RETURN(1, 0xFF)
  630. }
  631. /*
  632. Return the relevant ASMInstParser function for a given mnemonic.
  633. NULL is returned if the mnemonic is not known.
  634. */
  635. ASMInstParser get_inst_parser(char mstr[MAX_MNEMONIC_SIZE])
  636. {
  637. // Exploit the fact that we can store the entire mnemonic string as a
  638. // single 32-bit value to do fast lookups:
  639. uint32_t key = (mstr[0] << 24) + (mstr[1] << 16) + (mstr[2] << 8) + mstr[3];
  640. HANDLE(adc)
  641. HANDLE(add)
  642. HANDLE(and)
  643. HANDLE(bit)
  644. HANDLE(call)
  645. HANDLE(ccf)
  646. HANDLE(cp)
  647. HANDLE(cpd)
  648. HANDLE(cpdr)
  649. HANDLE(cpi)
  650. HANDLE(cpir)
  651. HANDLE(cpl)
  652. HANDLE(daa)
  653. HANDLE(dec)
  654. HANDLE(di)
  655. HANDLE(djnz)
  656. HANDLE(ei)
  657. HANDLE(ex)
  658. HANDLE(exx)
  659. HANDLE(halt)
  660. HANDLE(im)
  661. HANDLE(in)
  662. HANDLE(inc)
  663. HANDLE(ind)
  664. HANDLE(indr)
  665. HANDLE(ini)
  666. HANDLE(inir)
  667. HANDLE(jp)
  668. HANDLE(jr)
  669. HANDLE(ld)
  670. HANDLE(ldd)
  671. HANDLE(lddr)
  672. HANDLE(ldi)
  673. HANDLE(ldir)
  674. HANDLE(neg)
  675. HANDLE(nop)
  676. HANDLE(or)
  677. HANDLE(otdr)
  678. HANDLE(otir)
  679. HANDLE(out)
  680. HANDLE(outd)
  681. HANDLE(outi)
  682. HANDLE(pop)
  683. HANDLE(push)
  684. HANDLE(res)
  685. HANDLE(ret)
  686. HANDLE(reti)
  687. HANDLE(retn)
  688. HANDLE(rl)
  689. HANDLE(rla)
  690. HANDLE(rlc)
  691. HANDLE(rlca)
  692. HANDLE(rld)
  693. HANDLE(rr)
  694. HANDLE(rra)
  695. HANDLE(rrc)
  696. HANDLE(rrca)
  697. HANDLE(rrd)
  698. HANDLE(rst)
  699. HANDLE(sbc)
  700. HANDLE(scf)
  701. HANDLE(set)
  702. HANDLE(sl1)
  703. HANDLE(sla)
  704. HANDLE(sll)
  705. HANDLE(sls)
  706. HANDLE(sra)
  707. HANDLE(srl)
  708. HANDLE(sub)
  709. HANDLE(xor)
  710. return NULL;
  711. }