An emulator, assembler, and disassembler for the Sega Game Gear
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 

788 lignes
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. }