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.
 
 
 
 
 

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