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.
 
 
 
 
 

586 lignes
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: error
  81. # bit:
  82. # args: yes
  83. # return: error
  84. # call:
  85. # args: yes
  86. # return: error
  87. ccf:
  88. args: no
  89. return: [0x3F]
  90. # cp:
  91. # args: yes
  92. # return: error
  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: error
  114. di:
  115. args: no
  116. return: [0xF3]
  117. # djnz:
  118. # args: yes
  119. # return: error
  120. ei:
  121. args: no
  122. return: [0xFB]
  123. # ex:
  124. # args: yes
  125. # return: error
  126. exx:
  127. args: no
  128. return: [0xD9]
  129. halt:
  130. args: no
  131. return: [0x76]
  132. # im:
  133. # args: yes
  134. # return: error
  135. # in:
  136. # args: yes
  137. # return: error
  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: error
  184. # jr:
  185. # args: yes
  186. # return: error
  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] # TODO, support both this and regular indirect
  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: error
  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: error
  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: error
  431. # push:
  432. # args: yes
  433. # return: error
  434. # res:
  435. # args: yes
  436. # return: error
  437. # ret:
  438. # args: yes
  439. # return: error
  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: error
  449. rla:
  450. args: no
  451. return: [0x17]
  452. # rlc:
  453. # args: yes
  454. # return: error
  455. rlca:
  456. args: no
  457. return: [0x07]
  458. rld:
  459. args: no
  460. return: [0xED, 0x6F]
  461. # rr:
  462. # args: yes
  463. # return: error
  464. rra:
  465. args: no
  466. return: [0x1F]
  467. # rrc:
  468. # args: yes
  469. # return: error
  470. rrca:
  471. args: no
  472. return: [0x0F]
  473. # rrd:
  474. # args: yes
  475. # return: error
  476. # rst:
  477. # args: yes
  478. # return: error
  479. # sbc:
  480. # args: yes
  481. # return: error
  482. scf:
  483. args: no
  484. return: [0x37]
  485. # set:
  486. # args: yes
  487. # return: error
  488. # sl1:
  489. # args: yes
  490. # return: error
  491. # sla:
  492. # args: yes
  493. # return: error
  494. # sll:
  495. # args: yes
  496. # return: error
  497. # sls:
  498. # args: yes
  499. # return: error
  500. # sra:
  501. # args: yes
  502. # return: error
  503. # srl:
  504. # args: yes
  505. # return: error
  506. # sub:
  507. # args: yes
  508. # return: error
  509. # xor:
  510. # args: yes
  511. # return: error