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.
 
 
 
 
 

610 lines
12 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]
  16. return: [0x88]
  17. - cond: [a, c]
  18. return: [0x89]
  19. - cond: [a, d]
  20. return: [0x8A]
  21. - cond: [a, e]
  22. return: [0x8B]
  23. - cond: [a, h|ih]
  24. return: [0x8C]
  25. - cond: [a, l|il]
  26. return: [0x8D]
  27. - cond: [hl, bc]
  28. return: [0xED, 0x4A]
  29. - cond: [hl, de]
  30. return: [0xED, 0x5A]
  31. - cond: [hl, hl]
  32. return: [0xED, 0x6A]
  33. - cond: [hl, sp]
  34. return: [0xED, 0x7A]
  35. - type: [register, immediate]
  36. cases:
  37. - cond: [a, u8]
  38. return: [0xCE, u8]
  39. - type: [register, indirect_hl_or_indexed]
  40. cases:
  41. - cond: [a, _]
  42. return: [0x8E]
  43. add:
  44. args: yes
  45. cases:
  46. - type: [register, register]
  47. cases:
  48. - cond: [a, a]
  49. return: [0x87]
  50. - cond: [a, b]
  51. return: [0x80]
  52. - cond: [a, c]
  53. return: [0x81]
  54. - cond: [a, d]
  55. return: [0x82]
  56. - cond: [a, e]
  57. return: [0x83]
  58. - cond: [a, h|ih]
  59. return: [0x84]
  60. - cond: [a, l|il]
  61. return: [0x85]
  62. - cond: [hl|i, bc]
  63. return: [0x09]
  64. - cond: [hl|i, de]
  65. return: [0x19]
  66. - cond: [hl|i, hl|i]
  67. return: [0x29]
  68. - cond: [hl|i, sp]
  69. return: [0x39]
  70. - type: [register, immediate]
  71. cases:
  72. - cond: [a, u8]
  73. return: [0xC6, u8]
  74. - type: [register, indirect_hl_or_indexed]
  75. cases:
  76. - cond: [a, _]
  77. return: [0x86]
  78. and:
  79. args: yes
  80. cases:
  81. - type: [register]
  82. cases:
  83. - cond: [a]
  84. return: [0xA7]
  85. - cond: [b]
  86. return: [0xA0]
  87. - cond: [c]
  88. return: [0xA1]
  89. - cond: [d]
  90. return: [0xA2]
  91. - cond: [e]
  92. return: [0xA3]
  93. - cond: [h|ih]
  94. return: [0xA4]
  95. - cond: [l|il]
  96. return: [0xA5]
  97. - type: [immediate]
  98. cases:
  99. - cond: [u8]
  100. return: [0xE6, u8]
  101. - type: [indirect_hl_or_indexed]
  102. cases:
  103. - cond: [_]
  104. return: [0xA6]
  105. # bit:
  106. # args: yes
  107. # return: TODO
  108. # call:
  109. # args: yes
  110. # return: TODO
  111. ccf:
  112. args: no
  113. return: [0x3F]
  114. # cp:
  115. # args: yes
  116. # return: TODO
  117. cpd:
  118. args: no
  119. return: [0xED, 0xA9]
  120. cpdr:
  121. args: no
  122. return: [0xED, 0xB9]
  123. cpi:
  124. args: no
  125. return: [0xED, 0xA1]
  126. cpir:
  127. args: no
  128. return: [0xED, 0xB1]
  129. cpl:
  130. args: no
  131. return: [0x2F]
  132. daa:
  133. args: no
  134. return: [0x27]
  135. # dec:
  136. # args: yes
  137. # return: TODO
  138. di:
  139. args: no
  140. return: [0xF3]
  141. # djnz:
  142. # args: yes
  143. # return: TODO
  144. ei:
  145. args: no
  146. return: [0xFB]
  147. # ex:
  148. # args: yes
  149. # return: TODO
  150. exx:
  151. args: no
  152. return: [0xD9]
  153. halt:
  154. args: no
  155. return: [0x76]
  156. # im:
  157. # args: yes
  158. # return: TODO
  159. # in:
  160. # args: yes
  161. # return: TODO
  162. inc:
  163. args: yes
  164. cases:
  165. - type: [register]
  166. cases:
  167. - cond: [a]
  168. return: [0x3C]
  169. - cond: [b]
  170. return: [0x04]
  171. - cond: [c]
  172. return: [0x0C]
  173. - cond: [d]
  174. return: [0x14]
  175. - cond: [e]
  176. return: [0x1C]
  177. - cond: [h|ih]
  178. return: [0x24]
  179. - cond: [l|il]
  180. return: [0x2C]
  181. - cond: [bc]
  182. return: [0x03]
  183. - cond: [de]
  184. return: [0x13]
  185. - cond: [hl|i]
  186. return: [0x23]
  187. - cond: [sp]
  188. return: [0x33]
  189. - type: [indirect_hl_or_indexed]
  190. cases:
  191. - cond: [_]
  192. return: [0x34]
  193. ind:
  194. args: no
  195. return: [0xED, 0xAA]
  196. indr:
  197. args: no
  198. return: [0xED, 0xBA]
  199. ini:
  200. args: no
  201. return: [0xED, 0xA2]
  202. inir:
  203. args: no
  204. return: [0xED, 0xB2]
  205. # jp:
  206. # args: yes
  207. # return: TODO
  208. # jr:
  209. # args: yes
  210. # return: TODO
  211. ld:
  212. args: yes
  213. cases:
  214. - type: [register, register]
  215. cases:
  216. - cond: [a, a]
  217. return: [0x7F]
  218. - cond: [a, b]
  219. return: [0x78]
  220. - cond: [a, c]
  221. return: [0x79]
  222. - cond: [a, d]
  223. return: [0x7A]
  224. - cond: [a, e]
  225. return: [0x7B]
  226. - cond: [a, h|ih]
  227. return: [0x7C]
  228. - cond: [a, l|il]
  229. return: [0x7D]
  230. - cond: [b, a]
  231. return: [0x47]
  232. - cond: [b, b]
  233. return: [0x40]
  234. - cond: [b, c]
  235. return: [0x41]
  236. - cond: [b, d]
  237. return: [0x42]
  238. - cond: [b, e]
  239. return: [0x43]
  240. - cond: [b, h|ih]
  241. return: [0x44]
  242. - cond: [b, l|il]
  243. return: [0x45]
  244. - cond: [c, a]
  245. return: [0x4F]
  246. - cond: [c, b]
  247. return: [0x48]
  248. - cond: [c, c]
  249. return: [0x49]
  250. - cond: [c, d]
  251. return: [0x4A]
  252. - cond: [c, e]
  253. return: [0x4B]
  254. - cond: [c, h|ih]
  255. return: [0x4C]
  256. - cond: [c, l|il]
  257. return: [0x4D]
  258. - cond: [d, a]
  259. return: [0x57]
  260. - cond: [d, b]
  261. return: [0x50]
  262. - cond: [d, c]
  263. return: [0x51]
  264. - cond: [d, d]
  265. return: [0x52]
  266. - cond: [d, e]
  267. return: [0x53]
  268. - cond: [d, h|ih]
  269. return: [0x54]
  270. - cond: [d, l|il]
  271. return: [0x55]
  272. - cond: [e, a]
  273. return: [0x5F]
  274. - cond: [e, b]
  275. return: [0x58]
  276. - cond: [e, c]
  277. return: [0x59]
  278. - cond: [e, d]
  279. return: [0x5A]
  280. - cond: [e, e]
  281. return: [0x5B]
  282. - cond: [e, h|ih]
  283. return: [0x5C]
  284. - cond: [e, l|il]
  285. return: [0x5D]
  286. - cond: [h|ih, a]
  287. return: [0x67]
  288. - cond: [h|ih, b]
  289. return: [0x60]
  290. - cond: [h|ih, c]
  291. return: [0x61]
  292. - cond: [h|ih, d]
  293. return: [0x62]
  294. - cond: [h|ih, e]
  295. return: [0x63]
  296. - cond: [h|ih, h|ih]
  297. return: [0x64]
  298. - cond: [h|ih, l|il]
  299. return: [0x65]
  300. - cond: [l|il, a]
  301. return: [0x6F]
  302. - cond: [l|il, b]
  303. return: [0x68]
  304. - cond: [l|il, c]
  305. return: [0x69]
  306. - cond: [l|il, d]
  307. return: [0x6A]
  308. - cond: [l|il, e]
  309. return: [0x6B]
  310. - cond: [l|il, h|ih]
  311. return: [0x6C]
  312. - cond: [l|il, l|il]
  313. return: [0x6D]
  314. - cond: [a, i]
  315. return: [0xED, 0x57]
  316. - cond: [i, a]
  317. return: [0xED, 0x47]
  318. - cond: [a, r]
  319. return: [0xED, 0x5F]
  320. - cond: [r, a]
  321. return: [0xED, 0x4F]
  322. - cond: [sp, hl|i]
  323. return: [0xF9]
  324. - type: [register, immediate]
  325. cases:
  326. - cond: [a, u8]
  327. return: [0x3E, u8]
  328. - cond: [b, u8]
  329. return: [0x06, u8]
  330. - cond: [c, u8]
  331. return: [0x0E, u8]
  332. - cond: [d, u8]
  333. return: [0x16, u8]
  334. - cond: [e, u8]
  335. return: [0x1E, u8]
  336. - cond: [h|ih, u8]
  337. return: [0x26, u8]
  338. - cond: [l|il, u8]
  339. return: [0x2E, u8]
  340. - cond: [bc, u16]
  341. return: [0x01, u16]
  342. - cond: [de, u16]
  343. return: [0x11, u16]
  344. - cond: [hl|i, u16]
  345. return: [0x21, u16]
  346. - cond: [sp, u16]
  347. return: [0x31, u16]
  348. - type: [register, indirect_hl_or_indexed]
  349. cases:
  350. - cond: [a, _]
  351. return: [0x7E]
  352. - cond: [b, _]
  353. return: [0x46]
  354. - cond: [c, _]
  355. return: [0x4E]
  356. - cond: [d, _]
  357. return: [0x56]
  358. - cond: [e, _]
  359. return: [0x5E]
  360. - cond: [h, _]
  361. return: [0x66]
  362. - cond: [l, _]
  363. return: [0x6E]
  364. - type: [register, indirect]
  365. cases:
  366. - cond: [a, reg.bc]
  367. return: [0x0A]
  368. - cond: [a, reg.de]
  369. return: [0x1A]
  370. - cond: [hl|i, imm]
  371. return: [0x2A, u16]
  372. - cond: [a, imm]
  373. return: [0x3A, u16]
  374. - cond: [bc, imm]
  375. return: [0xED, 0x4B, u16]
  376. - cond: [de, imm]
  377. return: [0xED, 0x5B, u16]
  378. - cond: [sp, imm]
  379. return: [0xED, 0x7B, u16]
  380. - type: [indirect_hl_or_indexed, register]
  381. cases:
  382. - cond: [_, a]
  383. return: [0x77]
  384. - cond: [_, b]
  385. return: [0x70]
  386. - cond: [_, c]
  387. return: [0x71]
  388. - cond: [_, d]
  389. return: [0x72]
  390. - cond: [_, e]
  391. return: [0x73]
  392. - cond: [_, h]
  393. return: [0x74]
  394. - cond: [_, l]
  395. return: [0x75]
  396. - type: [indirect_hl_or_indexed, immediate]
  397. cases:
  398. - cond: [_, u8]
  399. return: [0x36, u8]
  400. - type: [indirect, register]
  401. cases:
  402. - cond: [reg.bc, a]
  403. return: [0x02]
  404. - cond: [reg.de, a]
  405. return: [0x12]
  406. - cond: [imm, hl|i]
  407. return: [0x22, u16]
  408. - cond: [imm, a]
  409. return: [0x32, u16]
  410. - cond: [imm, bc]
  411. return: [0xED, 0x43, u16]
  412. - cond: [imm, de]
  413. return: [0xED, 0x53, u16]
  414. - cond: [imm, sp]
  415. return: [0xED, 0x73, u16]
  416. ldd:
  417. args: no
  418. return: [0xED, 0xA8]
  419. lddr:
  420. args: no
  421. return: [0xED, 0xB8]
  422. ldi:
  423. args: no
  424. return: [0xED, 0xA0]
  425. ldir:
  426. args: no
  427. return: [0xED, 0xB0]
  428. neg:
  429. args: no
  430. return: [0xED, 0x44]
  431. nop:
  432. args: no
  433. return: [0x00]
  434. # or:
  435. # args: yes
  436. # return: TODO
  437. otdr:
  438. args: no
  439. return: [0xED, 0xBB]
  440. otir:
  441. args: no
  442. return: [0xED, 0xB3]
  443. # out:
  444. # args: yes
  445. # return: TODO
  446. outd:
  447. args: no
  448. return: [0xED, 0xAB]
  449. outi:
  450. args: no
  451. return: [0xED, 0xA3]
  452. # pop:
  453. # args: yes
  454. # return: TODO
  455. # push:
  456. # args: yes
  457. # return: TODO
  458. # res:
  459. # args: yes
  460. # return: TODO
  461. # ret:
  462. # args: yes
  463. # return: TODO
  464. reti:
  465. args: no
  466. return: [0xED, 0x4D]
  467. retn:
  468. args: no
  469. return: [0xED, 0x45]
  470. # rl:
  471. # args: yes
  472. # return: TODO
  473. rla:
  474. args: no
  475. return: [0x17]
  476. # rlc:
  477. # args: yes
  478. # return: TODO
  479. rlca:
  480. args: no
  481. return: [0x07]
  482. rld:
  483. args: no
  484. return: [0xED, 0x6F]
  485. # rr:
  486. # args: yes
  487. # return: TODO
  488. rra:
  489. args: no
  490. return: [0x1F]
  491. # rrc:
  492. # args: yes
  493. # return: TODO
  494. rrca:
  495. args: no
  496. return: [0x0F]
  497. # rrd:
  498. # args: yes
  499. # return: TODO
  500. # rst:
  501. # args: yes
  502. # return: TODO
  503. # sbc:
  504. # args: yes
  505. # return: TODO
  506. scf:
  507. args: no
  508. return: [0x37]
  509. # set:
  510. # args: yes
  511. # return: TODO
  512. # sl1:
  513. # args: yes
  514. # return: TODO
  515. # sla:
  516. # args: yes
  517. # return: TODO
  518. # sll:
  519. # args: yes
  520. # return: TODO
  521. # sls:
  522. # args: yes
  523. # return: TODO
  524. # sra:
  525. # args: yes
  526. # return: TODO
  527. # srl:
  528. # args: yes
  529. # return: TODO
  530. # sub:
  531. # args: yes
  532. # return: TODO
  533. # xor:
  534. # args: yes
  535. # return: TODO