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.
 
 
 
 
 

1298 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. # *** ASM Instruction Description File ***
  4. # This file is used to generate 'instructions.inc.c'.
  5. # `make` should trigger a rebuild when this file is modified; if not, use:
  6. # `python scripts/update_asm_instructions.py`.
  7. ---
  8. adc:
  9. args: yes
  10. cases:
  11. - type: [register, register]
  12. cases:
  13. - cond: [a, a]
  14. return: [0x8F]
  15. - cond: [a, b|c|d|e]
  16. return: [step(0x88)]
  17. - cond: [a, h|ih]
  18. return: [0x8C]
  19. - cond: [a, l|il]
  20. return: [0x8D]
  21. - cond: [hl, bc|de|hl|sp]
  22. return: [0xED, step(0x4A 0x10)]
  23. - type: [register, immediate]
  24. cases:
  25. - cond: [a, u8]
  26. return: [0xCE, u8]
  27. - type: [register, indirect_hl_or_indexed]
  28. cases:
  29. - cond: [a, _]
  30. return: [0x8E]
  31. add:
  32. args: yes
  33. cases:
  34. - type: [register, register]
  35. cases:
  36. - cond: [a, a]
  37. return: [0x87]
  38. - cond: [a, b|c|d|e]
  39. return: [step(0x80)]
  40. - cond: [a, h|ih]
  41. return: [0x84]
  42. - cond: [a, l|il]
  43. return: [0x85]
  44. - cond: [hl|i, bc]
  45. return: [0x09]
  46. - cond: [hl|i, de]
  47. return: [0x19]
  48. - cond: [hl|i, hl|i]
  49. return: [0x29]
  50. - cond: [hl|i, sp]
  51. return: [0x39]
  52. - type: [register, immediate]
  53. cases:
  54. - cond: [a, u8]
  55. return: [0xC6, u8]
  56. - type: [register, indirect_hl_or_indexed]
  57. cases:
  58. - cond: [a, _]
  59. return: [0x86]
  60. and:
  61. args: yes
  62. cases:
  63. - type: [register]
  64. cases:
  65. - cond: [a]
  66. return: [0xA7]
  67. - cond: [b|c|d|e]
  68. return: [step(0xA0)]
  69. - cond: [h|ih]
  70. return: [0xA4]
  71. - cond: [l|il]
  72. return: [0xA5]
  73. - type: [immediate]
  74. cases:
  75. - cond: [u8]
  76. return: [0xE6, u8]
  77. - type: [indirect_hl_or_indexed]
  78. cases:
  79. - cond: [_]
  80. return: [0xA6]
  81. bit:
  82. args: yes
  83. cases:
  84. - type: [immediate, register]
  85. cases:
  86. - cond: [bit, a]
  87. return: [0xCB, bit(0x47)]
  88. - cond: [bit, b]
  89. return: [0xCB, bit(0x40)]
  90. - cond: [bit, c]
  91. return: [0xCB, bit(0x41)]
  92. - cond: [bit, d]
  93. return: [0xCB, bit(0x42)]
  94. - cond: [bit, e]
  95. return: [0xCB, bit(0x43)]
  96. - cond: [bit, h]
  97. return: [0xCB, bit(0x44)]
  98. - cond: [bit, l]
  99. return: [0xCB, bit(0x45)]
  100. - type: [immediate, indirect_hl_or_indexed]
  101. cases:
  102. - cond: [bit, _]
  103. return: [0xCB, bit(0x46)]
  104. call:
  105. args: yes
  106. cases:
  107. - type: [immediate]
  108. cases:
  109. - cond: [u16]
  110. return: [0xCD, u16]
  111. - type: [condition, immediate]
  112. cases:
  113. - cond: [nz, u16]
  114. return: [0xC4, u16]
  115. - cond: [z, u16]
  116. return: [0xCC, u16]
  117. - cond: [nc, u16]
  118. return: [0xD4, u16]
  119. - cond: [c, u16]
  120. return: [0xDC, u16]
  121. - cond: [po, u16]
  122. return: [0xE4, u16]
  123. - cond: [pe, u16]
  124. return: [0xEC, u16]
  125. - cond: [p, u16]
  126. return: [0xF4, u16]
  127. - cond: [m, u16]
  128. return: [0xFC, u16]
  129. ccf:
  130. args: no
  131. return: [0x3F]
  132. cp:
  133. args: yes
  134. cases:
  135. - type: [register]
  136. cases:
  137. - cond: [a]
  138. return: [0xBF]
  139. - cond: [b]
  140. return: [0xB8]
  141. - cond: [c]
  142. return: [0xB9]
  143. - cond: [d]
  144. return: [0xBA]
  145. - cond: [e]
  146. return: [0xBB]
  147. - cond: [h|ih]
  148. return: [0xBC]
  149. - cond: [l|il]
  150. return: [0xBD]
  151. - type: [indirect_hl_or_indexed]
  152. cases:
  153. - cond: [_]
  154. return: [0xBE]
  155. - type: [immediate]
  156. cases:
  157. - cond: [u8]
  158. return: [0xFE, u8]
  159. cpd:
  160. args: no
  161. return: [0xED, 0xA9]
  162. cpdr:
  163. args: no
  164. return: [0xED, 0xB9]
  165. cpi:
  166. args: no
  167. return: [0xED, 0xA1]
  168. cpir:
  169. args: no
  170. return: [0xED, 0xB1]
  171. cpl:
  172. args: no
  173. return: [0x2F]
  174. daa:
  175. args: no
  176. return: [0x27]
  177. dec:
  178. args: yes
  179. cases:
  180. - type: [register]
  181. cases:
  182. - cond: [a]
  183. return: [0x3D]
  184. - cond: [b]
  185. return: [0x05]
  186. - cond: [c]
  187. return: [0x0D]
  188. - cond: [d]
  189. return: [0x15]
  190. - cond: [e]
  191. return: [0x1D]
  192. - cond: [h|ih]
  193. return: [0x25]
  194. - cond: [l|il]
  195. return: [0x2D]
  196. - cond: [bc]
  197. return: [0x0B]
  198. - cond: [de]
  199. return: [0x1B]
  200. - cond: [hl|i]
  201. return: [0x2B]
  202. - cond: [sp]
  203. return: [0x3B]
  204. - type: [indirect_hl_or_indexed]
  205. cases:
  206. - cond: [_]
  207. return: [0x35]
  208. di:
  209. args: no
  210. return: [0xF3]
  211. djnz:
  212. args: yes
  213. cases:
  214. - type: [immediate]
  215. cases:
  216. - cond: [rel]
  217. return: [0x10, rel]
  218. ei:
  219. args: no
  220. return: [0xFB]
  221. ex:
  222. args: yes
  223. cases:
  224. - type: [register, register]
  225. cases:
  226. - cond: [af, af_]
  227. return: [0x08]
  228. - cond: [de, hl]
  229. return: [0xEB]
  230. - type: [indirect, register]
  231. cases:
  232. - cond: [reg.sp, hl|i]
  233. return: [0xE3]
  234. exx:
  235. args: no
  236. return: [0xD9]
  237. halt:
  238. args: no
  239. return: [0x76]
  240. im:
  241. args: yes
  242. cases:
  243. - type: [immediate]
  244. cases:
  245. - cond: [im.0]
  246. return: [0xED, 0x46]
  247. - cond: [im.1]
  248. return: [0xED, 0x56]
  249. - cond: [im.2]
  250. return: [0xED, 0x5E]
  251. in:
  252. args: yes
  253. cases:
  254. - type: [register, port]
  255. cases:
  256. - cond: [a, imm]
  257. return: [0xDB, u8]
  258. - cond: [a, reg.c]
  259. return: [0xED, 0x78]
  260. - cond: [b, reg.c]
  261. return: [0xED, 0x40]
  262. - cond: [c, reg.c]
  263. return: [0xED, 0x48]
  264. - cond: [d, reg.c]
  265. return: [0xED, 0x50]
  266. - cond: [e, reg.c]
  267. return: [0xED, 0x58]
  268. - cond: [h, reg.c]
  269. return: [0xED, 0x60]
  270. - cond: [l, reg.c]
  271. return: [0xED, 0x68]
  272. - type: [port]
  273. cases:
  274. - cond: [reg.c]
  275. return: [0xED, 0x70]
  276. inc:
  277. args: yes
  278. cases:
  279. - type: [register]
  280. cases:
  281. - cond: [a]
  282. return: [0x3C]
  283. - cond: [b]
  284. return: [0x04]
  285. - cond: [c]
  286. return: [0x0C]
  287. - cond: [d]
  288. return: [0x14]
  289. - cond: [e]
  290. return: [0x1C]
  291. - cond: [h|ih]
  292. return: [0x24]
  293. - cond: [l|il]
  294. return: [0x2C]
  295. - cond: [bc]
  296. return: [0x03]
  297. - cond: [de]
  298. return: [0x13]
  299. - cond: [hl|i]
  300. return: [0x23]
  301. - cond: [sp]
  302. return: [0x33]
  303. - type: [indirect_hl_or_indexed]
  304. cases:
  305. - cond: [_]
  306. return: [0x34]
  307. ind:
  308. args: no
  309. return: [0xED, 0xAA]
  310. indr:
  311. args: no
  312. return: [0xED, 0xBA]
  313. ini:
  314. args: no
  315. return: [0xED, 0xA2]
  316. inir:
  317. args: no
  318. return: [0xED, 0xB2]
  319. jp:
  320. args: yes
  321. cases:
  322. - type: [immediate]
  323. cases:
  324. - cond: [u16]
  325. return: [0xC3, u16]
  326. - type: [condition, immediate]
  327. cases:
  328. - cond: [nz, u16]
  329. return: [0xC2, u16]
  330. - cond: [z, u16]
  331. return: [0xCA, u16]
  332. - cond: [nc, u16]
  333. return: [0xD2, u16]
  334. - cond: [c, u16]
  335. return: [0xDA, u16]
  336. - cond: [po, u16]
  337. return: [0xE2, u16]
  338. - cond: [pe, u16]
  339. return: [0xEA, u16]
  340. - cond: [p, u16]
  341. return: [0xF2, u16]
  342. - cond: [m, u16]
  343. return: [0xFA, u16]
  344. - type: [indirect_hl_or_indexed]
  345. cases:
  346. - cond: [_]
  347. return: [0xE9]
  348. jr:
  349. args: yes
  350. cases:
  351. - type: [immediate]
  352. cases:
  353. - cond: [rel]
  354. return: [0x18, rel]
  355. - type: [condition, immediate]
  356. cases:
  357. - cond: [nz|z|nc|c, rel]
  358. return: [step(0x20 0x08), rel]
  359. ld:
  360. args: yes
  361. cases:
  362. - type: [register, register]
  363. cases:
  364. - cond: [a, a]
  365. return: [0x7F]
  366. - cond: [a, b]
  367. return: [0x78]
  368. - cond: [a, c]
  369. return: [0x79]
  370. - cond: [a, d]
  371. return: [0x7A]
  372. - cond: [a, e]
  373. return: [0x7B]
  374. - cond: [a, h|ih]
  375. return: [0x7C]
  376. - cond: [a, l|il]
  377. return: [0x7D]
  378. - cond: [b, a]
  379. return: [0x47]
  380. - cond: [b, b]
  381. return: [0x40]
  382. - cond: [b, c]
  383. return: [0x41]
  384. - cond: [b, d]
  385. return: [0x42]
  386. - cond: [b, e]
  387. return: [0x43]
  388. - cond: [b, h|ih]
  389. return: [0x44]
  390. - cond: [b, l|il]
  391. return: [0x45]
  392. - cond: [c, a]
  393. return: [0x4F]
  394. - cond: [c, b]
  395. return: [0x48]
  396. - cond: [c, c]
  397. return: [0x49]
  398. - cond: [c, d]
  399. return: [0x4A]
  400. - cond: [c, e]
  401. return: [0x4B]
  402. - cond: [c, h|ih]
  403. return: [0x4C]
  404. - cond: [c, l|il]
  405. return: [0x4D]
  406. - cond: [d, a]
  407. return: [0x57]
  408. - cond: [d, b]
  409. return: [0x50]
  410. - cond: [d, c]
  411. return: [0x51]
  412. - cond: [d, d]
  413. return: [0x52]
  414. - cond: [d, e]
  415. return: [0x53]
  416. - cond: [d, h|ih]
  417. return: [0x54]
  418. - cond: [d, l|il]
  419. return: [0x55]
  420. - cond: [e, a]
  421. return: [0x5F]
  422. - cond: [e, b]
  423. return: [0x58]
  424. - cond: [e, c]
  425. return: [0x59]
  426. - cond: [e, d]
  427. return: [0x5A]
  428. - cond: [e, e]
  429. return: [0x5B]
  430. - cond: [e, h|ih]
  431. return: [0x5C]
  432. - cond: [e, l|il]
  433. return: [0x5D]
  434. - cond: [h|ih, a]
  435. return: [0x67]
  436. - cond: [h|ih, b]
  437. return: [0x60]
  438. - cond: [h|ih, c]
  439. return: [0x61]
  440. - cond: [h|ih, d]
  441. return: [0x62]
  442. - cond: [h|ih, e]
  443. return: [0x63]
  444. - cond: [h|ih, h|ih]
  445. return: [0x64]
  446. - cond: [h|ih, l|il]
  447. return: [0x65]
  448. - cond: [l|il, a]
  449. return: [0x6F]
  450. - cond: [l|il, b]
  451. return: [0x68]
  452. - cond: [l|il, c]
  453. return: [0x69]
  454. - cond: [l|il, d]
  455. return: [0x6A]
  456. - cond: [l|il, e]
  457. return: [0x6B]
  458. - cond: [l|il, h|ih]
  459. return: [0x6C]
  460. - cond: [l|il, l|il]
  461. return: [0x6D]
  462. - cond: [a, i]
  463. return: [0xED, 0x57]
  464. - cond: [i, a]
  465. return: [0xED, 0x47]
  466. - cond: [a, r]
  467. return: [0xED, 0x5F]
  468. - cond: [r, a]
  469. return: [0xED, 0x4F]
  470. - cond: [sp, hl|i]
  471. return: [0xF9]
  472. - type: [register, immediate]
  473. cases:
  474. - cond: [a, u8]
  475. return: [0x3E, u8]
  476. - cond: [b, u8]
  477. return: [0x06, u8]
  478. - cond: [c, u8]
  479. return: [0x0E, u8]
  480. - cond: [d, u8]
  481. return: [0x16, u8]
  482. - cond: [e, u8]
  483. return: [0x1E, u8]
  484. - cond: [h|ih, u8]
  485. return: [0x26, u8]
  486. - cond: [l|il, u8]
  487. return: [0x2E, u8]
  488. - cond: [bc, u16]
  489. return: [0x01, u16]
  490. - cond: [de, u16]
  491. return: [0x11, u16]
  492. - cond: [hl|i, u16]
  493. return: [0x21, u16]
  494. - cond: [sp, u16]
  495. return: [0x31, u16]
  496. - type: [register, indirect_hl_or_indexed]
  497. cases:
  498. - cond: [a, _]
  499. return: [0x7E]
  500. - cond: [b, _]
  501. return: [0x46]
  502. - cond: [c, _]
  503. return: [0x4E]
  504. - cond: [d, _]
  505. return: [0x56]
  506. - cond: [e, _]
  507. return: [0x5E]
  508. - cond: [h, _]
  509. return: [0x66]
  510. - cond: [l, _]
  511. return: [0x6E]
  512. - type: [register, indirect]
  513. cases:
  514. - cond: [a, reg.bc]
  515. return: [0x0A]
  516. - cond: [a, reg.de]
  517. return: [0x1A]
  518. - cond: [hl|i, imm]
  519. return: [0x2A, u16]
  520. - cond: [a, imm]
  521. return: [0x3A, u16]
  522. - cond: [bc, imm]
  523. return: [0xED, 0x4B, u16]
  524. - cond: [de, imm]
  525. return: [0xED, 0x5B, u16]
  526. - cond: [sp, imm]
  527. return: [0xED, 0x7B, u16]
  528. - type: [indirect_hl_or_indexed, register]
  529. cases:
  530. - cond: [_, a]
  531. return: [0x77]
  532. - cond: [_, b]
  533. return: [0x70]
  534. - cond: [_, c]
  535. return: [0x71]
  536. - cond: [_, d]
  537. return: [0x72]
  538. - cond: [_, e]
  539. return: [0x73]
  540. - cond: [_, h]
  541. return: [0x74]
  542. - cond: [_, l]
  543. return: [0x75]
  544. - type: [indirect_hl_or_indexed, immediate]
  545. cases:
  546. - cond: [_, u8]
  547. return: [0x36, u8]
  548. - type: [indirect, register]
  549. cases:
  550. - cond: [reg.bc, a]
  551. return: [0x02]
  552. - cond: [reg.de, a]
  553. return: [0x12]
  554. - cond: [imm, hl|i]
  555. return: [0x22, u16]
  556. - cond: [imm, a]
  557. return: [0x32, u16]
  558. - cond: [imm, bc]
  559. return: [0xED, 0x43, u16]
  560. - cond: [imm, de]
  561. return: [0xED, 0x53, u16]
  562. - cond: [imm, sp]
  563. return: [0xED, 0x73, u16]
  564. ldd:
  565. args: no
  566. return: [0xED, 0xA8]
  567. lddr:
  568. args: no
  569. return: [0xED, 0xB8]
  570. ldi:
  571. args: no
  572. return: [0xED, 0xA0]
  573. ldir:
  574. args: no
  575. return: [0xED, 0xB0]
  576. neg:
  577. args: no
  578. return: [0xED, 0x44]
  579. nop:
  580. args: no
  581. return: [0x00]
  582. or:
  583. args: yes
  584. cases:
  585. - type: [register]
  586. cases:
  587. - cond: [a]
  588. return: [0xB7]
  589. - cond: [b]
  590. return: [0xB0]
  591. - cond: [c]
  592. return: [0xB1]
  593. - cond: [d]
  594. return: [0xB2]
  595. - cond: [e]
  596. return: [0xB3]
  597. - cond: [h|ih]
  598. return: [0xB4]
  599. - cond: [l|il]
  600. return: [0xB5]
  601. - type: [immediate]
  602. cases:
  603. - cond: [u8]
  604. return: [0xF6, u8]
  605. - type: [indirect_hl_or_indexed]
  606. cases:
  607. - cond: [_]
  608. return: [0xB6]
  609. otdr:
  610. args: no
  611. return: [0xED, 0xBB]
  612. otir:
  613. args: no
  614. return: [0xED, 0xB3]
  615. out:
  616. args: yes
  617. cases:
  618. - type: [port, register]
  619. cases:
  620. - cond: [imm, a]
  621. return: [0xD3, u8]
  622. - cond: [reg.c, a]
  623. return: [0xED, 0x79]
  624. - cond: [reg.c, b]
  625. return: [0xED, 0x41]
  626. - cond: [reg.c, c]
  627. return: [0xED, 0x49]
  628. - cond: [reg.c, d]
  629. return: [0xED, 0x51]
  630. - cond: [reg.c, e]
  631. return: [0xED, 0x59]
  632. - cond: [reg.c, h]
  633. return: [0xED, 0x61]
  634. - cond: [reg.c, l]
  635. return: [0xED, 0x69]
  636. - type: [port, immediate]
  637. cases:
  638. - cond: [reg.c, u8.0]
  639. return: [0xED, 0x71]
  640. outd:
  641. args: no
  642. return: [0xED, 0xAB]
  643. outi:
  644. args: no
  645. return: [0xED, 0xA3]
  646. pop:
  647. args: yes
  648. cases:
  649. - type: [register]
  650. cases:
  651. - cond: [bc]
  652. return: [0xC1]
  653. - cond: [de]
  654. return: [0xD1]
  655. - cond: [hl|i]
  656. return: [0xE1]
  657. - cond: [af]
  658. return: [0xF1]
  659. push:
  660. args: yes
  661. cases:
  662. - type: [register]
  663. cases:
  664. - cond: [bc]
  665. return: [0xC5]
  666. - cond: [de]
  667. return: [0xD5]
  668. - cond: [hl|i]
  669. return: [0xE5]
  670. - cond: [af]
  671. return: [0xF5]
  672. res:
  673. args: yes
  674. cases:
  675. - type: [immediate, register]
  676. cases:
  677. - cond: [bit, a]
  678. return: [0xCB, bit(0x87)]
  679. - cond: [bit, b]
  680. return: [0xCB, bit(0x80)]
  681. - cond: [bit, c]
  682. return: [0xCB, bit(0x81)]
  683. - cond: [bit, d]
  684. return: [0xCB, bit(0x82)]
  685. - cond: [bit, e]
  686. return: [0xCB, bit(0x83)]
  687. - cond: [bit, h]
  688. return: [0xCB, bit(0x84)]
  689. - cond: [bit, l]
  690. return: [0xCB, bit(0x85)]
  691. - type: [immediate, indirect_hl_or_indexed]
  692. cases:
  693. - cond: [bit, _]
  694. return: [0xCB, bit(0x86)]
  695. - type: [immediate, indexed, register]
  696. cases:
  697. - cond: [bit, _, a]
  698. return: [0xCB, bit(0x87)]
  699. - cond: [bit, _, b]
  700. return: [0xCB, bit(0x80)]
  701. - cond: [bit, _, c]
  702. return: [0xCB, bit(0x81)]
  703. - cond: [bit, _, d]
  704. return: [0xCB, bit(0x82)]
  705. - cond: [bit, _, e]
  706. return: [0xCB, bit(0x83)]
  707. - cond: [bit, _, h]
  708. return: [0xCB, bit(0x84)]
  709. - cond: [bit, _, l]
  710. return: [0xCB, bit(0x85)]
  711. ret:
  712. args: yes
  713. cases:
  714. - type: []
  715. return: [0xC9]
  716. - type: [condition]
  717. cases:
  718. - cond: [nz]
  719. return: [0xC0]
  720. - cond: [z]
  721. return: [0xC8]
  722. - cond: [nc]
  723. return: [0xD0]
  724. - cond: [c]
  725. return: [0xD8]
  726. - cond: [po]
  727. return: [0xE0]
  728. - cond: [pe]
  729. return: [0xE8]
  730. - cond: [p]
  731. return: [0xF0]
  732. - cond: [m]
  733. return: [0xF8]
  734. reti:
  735. args: no
  736. return: [0xED, 0x4D]
  737. retn:
  738. args: no
  739. return: [0xED, 0x45]
  740. rl:
  741. args: yes
  742. cases:
  743. - type: [register]
  744. cases:
  745. - cond: [a]
  746. return: [0xCB, 0x17]
  747. - cond: [b]
  748. return: [0xCB, 0x10]
  749. - cond: [c]
  750. return: [0xCB, 0x11]
  751. - cond: [d]
  752. return: [0xCB, 0x12]
  753. - cond: [e]
  754. return: [0xCB, 0x13]
  755. - cond: [h]
  756. return: [0xCB, 0x14]
  757. - cond: [l]
  758. return: [0xCB, 0x15]
  759. - type: [indirect_hl_or_indexed]
  760. cases:
  761. - cond: [_]
  762. return: [0xCB, 0x16]
  763. - type: [indexed, register]
  764. cases:
  765. - cond: [_, a]
  766. return: [0xCB, 0x17]
  767. - cond: [_, b]
  768. return: [0xCB, 0x10]
  769. - cond: [_, c]
  770. return: [0xCB, 0x11]
  771. - cond: [_, d]
  772. return: [0xCB, 0x12]
  773. - cond: [_, e]
  774. return: [0xCB, 0x13]
  775. - cond: [_, h]
  776. return: [0xCB, 0x14]
  777. - cond: [_, l]
  778. return: [0xCB, 0x15]
  779. rla:
  780. args: no
  781. return: [0x17]
  782. rlc:
  783. args: yes
  784. cases:
  785. - type: [register]
  786. cases:
  787. - cond: [a]
  788. return: [0xCB, 0x07]
  789. - cond: [b]
  790. return: [0xCB, 0x00]
  791. - cond: [c]
  792. return: [0xCB, 0x01]
  793. - cond: [d]
  794. return: [0xCB, 0x02]
  795. - cond: [e]
  796. return: [0xCB, 0x03]
  797. - cond: [h]
  798. return: [0xCB, 0x04]
  799. - cond: [l]
  800. return: [0xCB, 0x05]
  801. - type: [indirect_hl_or_indexed]
  802. cases:
  803. - cond: [_]
  804. return: [0xCB, 0x06]
  805. - type: [indexed, register]
  806. cases:
  807. - cond: [_, a]
  808. return: [0xCB, 0x07]
  809. - cond: [_, b]
  810. return: [0xCB, 0x00]
  811. - cond: [_, c]
  812. return: [0xCB, 0x01]
  813. - cond: [_, d]
  814. return: [0xCB, 0x02]
  815. - cond: [_, e]
  816. return: [0xCB, 0x03]
  817. - cond: [_, h]
  818. return: [0xCB, 0x04]
  819. - cond: [_, l]
  820. return: [0xCB, 0x05]
  821. rlca:
  822. args: no
  823. return: [0x07]
  824. rld:
  825. args: no
  826. return: [0xED, 0x6F]
  827. rr:
  828. args: yes
  829. cases:
  830. - type: [register]
  831. cases:
  832. - cond: [a]
  833. return: [0xCB, 0x1F]
  834. - cond: [b]
  835. return: [0xCB, 0x18]
  836. - cond: [c]
  837. return: [0xCB, 0x19]
  838. - cond: [d]
  839. return: [0xCB, 0x1A]
  840. - cond: [e]
  841. return: [0xCB, 0x1B]
  842. - cond: [h]
  843. return: [0xCB, 0x1C]
  844. - cond: [l]
  845. return: [0xCB, 0x1D]
  846. - type: [indirect_hl_or_indexed]
  847. cases:
  848. - cond: [_]
  849. return: [0xCB, 0x1E]
  850. - type: [indexed, register]
  851. cases:
  852. - cond: [_, a]
  853. return: [0xCB, 0x1F]
  854. - cond: [_, b]
  855. return: [0xCB, 0x18]
  856. - cond: [_, c]
  857. return: [0xCB, 0x19]
  858. - cond: [_, d]
  859. return: [0xCB, 0x1A]
  860. - cond: [_, e]
  861. return: [0xCB, 0x1B]
  862. - cond: [_, h]
  863. return: [0xCB, 0x1C]
  864. - cond: [_, l]
  865. return: [0xCB, 0x1D]
  866. rra:
  867. args: no
  868. return: [0x1F]
  869. rrc:
  870. args: yes
  871. cases:
  872. - type: [register]
  873. cases:
  874. - cond: [a]
  875. return: [0xCB, 0x0F]
  876. - cond: [b]
  877. return: [0xCB, 0x08]
  878. - cond: [c]
  879. return: [0xCB, 0x09]
  880. - cond: [d]
  881. return: [0xCB, 0x0A]
  882. - cond: [e]
  883. return: [0xCB, 0x0B]
  884. - cond: [h]
  885. return: [0xCB, 0x0C]
  886. - cond: [l]
  887. return: [0xCB, 0x0D]
  888. - type: [indirect_hl_or_indexed]
  889. cases:
  890. - cond: [_]
  891. return: [0xCB, 0x0E]
  892. - type: [indexed, register]
  893. cases:
  894. - cond: [_, a]
  895. return: [0xCB, 0x0F]
  896. - cond: [_, b]
  897. return: [0xCB, 0x08]
  898. - cond: [_, c]
  899. return: [0xCB, 0x09]
  900. - cond: [_, d]
  901. return: [0xCB, 0x0A]
  902. - cond: [_, e]
  903. return: [0xCB, 0x0B]
  904. - cond: [_, h]
  905. return: [0xCB, 0x0C]
  906. - cond: [_, l]
  907. return: [0xCB, 0x0D]
  908. rrca:
  909. args: no
  910. return: [0x0F]
  911. rrd:
  912. args: no
  913. return: [0xED, 0x67]
  914. rst:
  915. args: yes
  916. cases:
  917. - type: [immediate]
  918. cases:
  919. - cond: [rst.0x00]
  920. return: [0xC7]
  921. - cond: [rst.0x08]
  922. return: [0xCF]
  923. - cond: [rst.0x10]
  924. return: [0xD7]
  925. - cond: [rst.0x18]
  926. return: [0xDF]
  927. - cond: [rst.0x20]
  928. return: [0xE7]
  929. - cond: [rst.0x28]
  930. return: [0xEF]
  931. - cond: [rst.0x30]
  932. return: [0xF7]
  933. - cond: [rst.0x38]
  934. return: [0xFF]
  935. sbc:
  936. args: yes
  937. cases:
  938. - type: [register, register]
  939. cases:
  940. - cond: [a, a]
  941. return: [0x9F]
  942. - cond: [a, b]
  943. return: [0x98]
  944. - cond: [a, c]
  945. return: [0x99]
  946. - cond: [a, d]
  947. return: [0x9A]
  948. - cond: [a, e]
  949. return: [0x9B]
  950. - cond: [a, h|ih]
  951. return: [0x9C]
  952. - cond: [a, l|il]
  953. return: [0x9D]
  954. - cond: [hl, bc]
  955. return: [0xED, 0x42]
  956. - cond: [hl, de]
  957. return: [0xED, 0x52]
  958. - cond: [hl, hl]
  959. return: [0xED, 0x62]
  960. - cond: [hl, sp]
  961. return: [0xED, 0x72]
  962. - type: [register, immediate]
  963. cases:
  964. - cond: [a, u8]
  965. return: [0xDE, u8]
  966. - type: [register, indirect_hl_or_indexed]
  967. cases:
  968. - cond: [a, _]
  969. return: [0x9E]
  970. scf:
  971. args: no
  972. return: [0x37]
  973. set:
  974. args: yes
  975. cases:
  976. - type: [immediate, register]
  977. cases:
  978. - cond: [bit, a]
  979. return: [0xCB, bit(0xC7)]
  980. - cond: [bit, b]
  981. return: [0xCB, bit(0xC0)]
  982. - cond: [bit, c]
  983. return: [0xCB, bit(0xC1)]
  984. - cond: [bit, d]
  985. return: [0xCB, bit(0xC2)]
  986. - cond: [bit, e]
  987. return: [0xCB, bit(0xC3)]
  988. - cond: [bit, h]
  989. return: [0xCB, bit(0xC4)]
  990. - cond: [bit, l]
  991. return: [0xCB, bit(0xC5)]
  992. - type: [immediate, indirect_hl_or_indexed]
  993. cases:
  994. - cond: [bit, _]
  995. return: [0xCB, bit(0xC6)]
  996. - type: [immediate, indexed, register]
  997. cases:
  998. - cond: [bit, _, a]
  999. return: [0xCB, bit(0xC7)]
  1000. - cond: [bit, _, b]
  1001. return: [0xCB, bit(0xC0)]
  1002. - cond: [bit, _, c]
  1003. return: [0xCB, bit(0xC1)]
  1004. - cond: [bit, _, d]
  1005. return: [0xCB, bit(0xC2)]
  1006. - cond: [bit, _, e]
  1007. return: [0xCB, bit(0xC3)]
  1008. - cond: [bit, _, h]
  1009. return: [0xCB, bit(0xC4)]
  1010. - cond: [bit, _, l]
  1011. return: [0xCB, bit(0xC5)]
  1012. sl1: &sl1
  1013. args: yes
  1014. cases:
  1015. - type: [register]
  1016. cases:
  1017. - cond: [a]
  1018. return: [0xCB, 0x37]
  1019. - cond: [b]
  1020. return: [0xCB, 0x30]
  1021. - cond: [c]
  1022. return: [0xCB, 0x31]
  1023. - cond: [d]
  1024. return: [0xCB, 0x32]
  1025. - cond: [e]
  1026. return: [0xCB, 0x33]
  1027. - cond: [h]
  1028. return: [0xCB, 0x34]
  1029. - cond: [l]
  1030. return: [0xCB, 0x35]
  1031. - type: [indirect_hl_or_indexed]
  1032. cases:
  1033. - cond: [_]
  1034. return: [0xCB, 0x36]
  1035. - type: [indexed, register]
  1036. cases:
  1037. - cond: [_, a]
  1038. return: [0xCB, 0x37]
  1039. - cond: [_, b]
  1040. return: [0xCB, 0x30]
  1041. - cond: [_, c]
  1042. return: [0xCB, 0x31]
  1043. - cond: [_, d]
  1044. return: [0xCB, 0x32]
  1045. - cond: [_, e]
  1046. return: [0xCB, 0x33]
  1047. - cond: [_, h]
  1048. return: [0xCB, 0x34]
  1049. - cond: [_, l]
  1050. return: [0xCB, 0x35]
  1051. sla:
  1052. args: yes
  1053. cases:
  1054. - type: [register]
  1055. cases:
  1056. - cond: [a]
  1057. return: [0xCB, 0x27]
  1058. - cond: [b]
  1059. return: [0xCB, 0x20]
  1060. - cond: [c]
  1061. return: [0xCB, 0x21]
  1062. - cond: [d]
  1063. return: [0xCB, 0x22]
  1064. - cond: [e]
  1065. return: [0xCB, 0x23]
  1066. - cond: [h]
  1067. return: [0xCB, 0x24]
  1068. - cond: [l]
  1069. return: [0xCB, 0x25]
  1070. - type: [indirect_hl_or_indexed]
  1071. cases:
  1072. - cond: [_]
  1073. return: [0xCB, 0x26]
  1074. - type: [indexed, register]
  1075. cases:
  1076. - cond: [_, a]
  1077. return: [0xCB, 0x27]
  1078. - cond: [_, b]
  1079. return: [0xCB, 0x20]
  1080. - cond: [_, c]
  1081. return: [0xCB, 0x21]
  1082. - cond: [_, d]
  1083. return: [0xCB, 0x22]
  1084. - cond: [_, e]
  1085. return: [0xCB, 0x23]
  1086. - cond: [_, h]
  1087. return: [0xCB, 0x24]
  1088. - cond: [_, l]
  1089. return: [0xCB, 0x25]
  1090. sll: *sl1
  1091. sls: *sl1
  1092. sra:
  1093. args: yes
  1094. cases:
  1095. - type: [register]
  1096. cases:
  1097. - cond: [a]
  1098. return: [0xCB, 0x2F]
  1099. - cond: [b]
  1100. return: [0xCB, 0x28]
  1101. - cond: [c]
  1102. return: [0xCB, 0x29]
  1103. - cond: [d]
  1104. return: [0xCB, 0x2A]
  1105. - cond: [e]
  1106. return: [0xCB, 0x2B]
  1107. - cond: [h]
  1108. return: [0xCB, 0x2C]
  1109. - cond: [l]
  1110. return: [0xCB, 0x2D]
  1111. - type: [indirect_hl_or_indexed]
  1112. cases:
  1113. - cond: [_]
  1114. return: [0xCB, 0x2E]
  1115. - type: [indexed, register]
  1116. cases:
  1117. - cond: [_, a]
  1118. return: [0xCB, 0x2F]
  1119. - cond: [_, b]
  1120. return: [0xCB, 0x28]
  1121. - cond: [_, c]
  1122. return: [0xCB, 0x29]
  1123. - cond: [_, d]
  1124. return: [0xCB, 0x2A]
  1125. - cond: [_, e]
  1126. return: [0xCB, 0x2B]
  1127. - cond: [_, h]
  1128. return: [0xCB, 0x2C]
  1129. - cond: [_, l]
  1130. return: [0xCB, 0x2D]
  1131. srl:
  1132. args: yes
  1133. cases:
  1134. - type: [register]
  1135. cases:
  1136. - cond: [a]
  1137. return: [0xCB, 0x3F]
  1138. - cond: [b]
  1139. return: [0xCB, 0x38]
  1140. - cond: [c]
  1141. return: [0xCB, 0x39]
  1142. - cond: [d]
  1143. return: [0xCB, 0x3A]
  1144. - cond: [e]
  1145. return: [0xCB, 0x3B]
  1146. - cond: [h]
  1147. return: [0xCB, 0x3C]
  1148. - cond: [l]
  1149. return: [0xCB, 0x3D]
  1150. - type: [indirect_hl_or_indexed]
  1151. cases:
  1152. - cond: [_]
  1153. return: [0xCB, 0x3E]
  1154. - type: [indexed, register]
  1155. cases:
  1156. - cond: [_, a]
  1157. return: [0xCB, 0x3F]
  1158. - cond: [_, b]
  1159. return: [0xCB, 0x38]
  1160. - cond: [_, c]
  1161. return: [0xCB, 0x39]
  1162. - cond: [_, d]
  1163. return: [0xCB, 0x3A]
  1164. - cond: [_, e]
  1165. return: [0xCB, 0x3B]
  1166. - cond: [_, h]
  1167. return: [0xCB, 0x3C]
  1168. - cond: [_, l]
  1169. return: [0xCB, 0x3D]
  1170. sub:
  1171. args: yes
  1172. cases:
  1173. - type: [register]
  1174. cases:
  1175. - cond: [a]
  1176. return: [0x97]
  1177. - cond: [b]
  1178. return: [0x90]
  1179. - cond: [c]
  1180. return: [0x91]
  1181. - cond: [d]
  1182. return: [0x92]
  1183. - cond: [e]
  1184. return: [0x93]
  1185. - cond: [h|ih]
  1186. return: [0x94]
  1187. - cond: [l|il]
  1188. return: [0x95]
  1189. - type: [immediate]
  1190. cases:
  1191. - cond: [u8]
  1192. return: [0xD6, u8]
  1193. - type: [indirect_hl_or_indexed]
  1194. cases:
  1195. - cond: [_]
  1196. return: [0x96]
  1197. xor:
  1198. args: yes
  1199. cases:
  1200. - type: [register]
  1201. cases:
  1202. - cond: [a]
  1203. return: [0xAF]
  1204. - cond: [b]
  1205. return: [0xA8]
  1206. - cond: [c]
  1207. return: [0xA9]
  1208. - cond: [d]
  1209. return: [0xAA]
  1210. - cond: [e]
  1211. return: [0xAB]
  1212. - cond: [h|ih]
  1213. return: [0xAC]
  1214. - cond: [l|il]
  1215. return: [0xAD]
  1216. - type: [immediate]
  1217. cases:
  1218. - cond: [u8]
  1219. return: [0xEE, u8]
  1220. - type: [indirect_hl_or_indexed]
  1221. cases:
  1222. - cond: [_]
  1223. return: [0xAE]