op_read.b 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. adc_const(0x69, adc, regs.p.m),
  2. and_const(0x29, and, regs.p.m),
  3. cmp_const(0xc9, cmp, regs.p.m),
  4. cpx_const(0xe0, cpx, regs.p.x),
  5. cpy_const(0xc0, cpy, regs.p.x),
  6. eor_const(0x49, eor, regs.p.m),
  7. lda_const(0xa9, lda, regs.p.m),
  8. ldx_const(0xa2, ldx, regs.p.x),
  9. ldy_const(0xa0, ldy, regs.p.x),
  10. ora_const(0x09, ora, regs.p.m),
  11. sbc_const(0xe9, sbc, regs.p.m) {
  12. 1:if($2) last_cycle();
  13. rd.l = op_readpc();
  14. if($2) { op_$1_b(); end; }
  15. 2:last_cycle();
  16. rd.h = op_readpc();
  17. op_$1_w();
  18. }
  19. adc_addr(0x6d, adc, regs.p.m),
  20. and_addr(0x2d, and, regs.p.m),
  21. bit_addr(0x2c, bit, regs.p.m),
  22. cmp_addr(0xcd, cmp, regs.p.m),
  23. cpx_addr(0xec, cpx, regs.p.x),
  24. cpy_addr(0xcc, cpy, regs.p.x),
  25. eor_addr(0x4d, eor, regs.p.m),
  26. lda_addr(0xad, lda, regs.p.m),
  27. ldx_addr(0xae, ldx, regs.p.x),
  28. ldy_addr(0xac, ldy, regs.p.x),
  29. ora_addr(0x0d, ora, regs.p.m),
  30. sbc_addr(0xed, sbc, regs.p.m) {
  31. 1:aa.l = op_readpc();
  32. 2:aa.h = op_readpc();
  33. 3:if($2) last_cycle();
  34. rd.l = op_readdbr(aa.w);
  35. if($2) { op_$1_b(); end; }
  36. 4:last_cycle();
  37. rd.h = op_readdbr(aa.w + 1);
  38. op_$1_w();
  39. }
  40. adc_addrx(0x7d, adc, regs.p.m),
  41. and_addrx(0x3d, and, regs.p.m),
  42. bit_addrx(0x3c, bit, regs.p.m),
  43. cmp_addrx(0xdd, cmp, regs.p.m),
  44. eor_addrx(0x5d, eor, regs.p.m),
  45. lda_addrx(0xbd, lda, regs.p.m),
  46. ldy_addrx(0xbc, ldy, regs.p.x),
  47. ora_addrx(0x1d, ora, regs.p.m),
  48. sbc_addrx(0xfd, sbc, regs.p.m) {
  49. 1:aa.l = op_readpc();
  50. 2:aa.h = op_readpc();
  51. 3:op_io_cond4(aa.w, aa.w + regs.x.w);
  52. 4:if($2) last_cycle();
  53. rd.l = op_readdbr(aa.w + regs.x.w);
  54. if($2) { op_$1_b(); end; }
  55. 5:last_cycle();
  56. rd.h = op_readdbr(aa.w + regs.x.w + 1);
  57. op_$1_w();
  58. }
  59. adc_addry(0x79, adc, regs.p.m),
  60. and_addry(0x39, and, regs.p.m),
  61. cmp_addry(0xd9, cmp, regs.p.m),
  62. eor_addry(0x59, eor, regs.p.m),
  63. lda_addry(0xb9, lda, regs.p.m),
  64. ldx_addry(0xbe, ldx, regs.p.x),
  65. ora_addry(0x19, ora, regs.p.m),
  66. sbc_addry(0xf9, sbc, regs.p.m) {
  67. 1:aa.l = op_readpc();
  68. 2:aa.h = op_readpc();
  69. 3:op_io_cond4(aa.w, aa.w + regs.y.w);
  70. 4:if($2) last_cycle();
  71. rd.l = op_readdbr(aa.w + regs.y.w);
  72. if($2) { op_$1_b(); end; }
  73. 5:last_cycle();
  74. rd.h = op_readdbr(aa.w + regs.y.w + 1);
  75. op_$1_w();
  76. }
  77. adc_long(0x6f, adc, regs.p.m),
  78. and_long(0x2f, and, regs.p.m),
  79. cmp_long(0xcf, cmp, regs.p.m),
  80. eor_long(0x4f, eor, regs.p.m),
  81. lda_long(0xaf, lda, regs.p.m),
  82. ora_long(0x0f, ora, regs.p.m),
  83. sbc_long(0xef, sbc, regs.p.m) {
  84. 1:aa.l = op_readpc();
  85. 2:aa.h = op_readpc();
  86. 3:aa.b = op_readpc();
  87. 4:if($2) last_cycle();
  88. rd.l = op_readlong(aa.d);
  89. if($2) { op_$1_b(); end; }
  90. 5:last_cycle();
  91. rd.h = op_readlong(aa.d + 1);
  92. op_$1_w();
  93. }
  94. adc_longx(0x7f, adc, regs.p.m),
  95. and_longx(0x3f, and, regs.p.m),
  96. cmp_longx(0xdf, cmp, regs.p.m),
  97. eor_longx(0x5f, eor, regs.p.m),
  98. lda_longx(0xbf, lda, regs.p.m),
  99. ora_longx(0x1f, ora, regs.p.m),
  100. sbc_longx(0xff, sbc, regs.p.m) {
  101. 1:aa.l = op_readpc();
  102. 2:aa.h = op_readpc();
  103. 3:aa.b = op_readpc();
  104. 4:if($2) last_cycle();
  105. rd.l = op_readlong(aa.d + regs.x.w);
  106. if($2) { op_$1_b(); end; }
  107. 5:last_cycle();
  108. rd.h = op_readlong(aa.d + regs.x.w + 1);
  109. op_$1_w();
  110. }
  111. adc_dp(0x65, adc, regs.p.m),
  112. and_dp(0x25, and, regs.p.m),
  113. bit_dp(0x24, bit, regs.p.m),
  114. cmp_dp(0xc5, cmp, regs.p.m),
  115. cpx_dp(0xe4, cpx, regs.p.x),
  116. cpy_dp(0xc4, cpy, regs.p.x),
  117. eor_dp(0x45, eor, regs.p.m),
  118. lda_dp(0xa5, lda, regs.p.m),
  119. ldx_dp(0xa6, ldx, regs.p.x),
  120. ldy_dp(0xa4, ldy, regs.p.x),
  121. ora_dp(0x05, ora, regs.p.m),
  122. sbc_dp(0xe5, sbc, regs.p.m) {
  123. 1:dp = op_readpc();
  124. 2:op_io_cond2();
  125. 3:if($2) last_cycle();
  126. rd.l = op_readdp(dp);
  127. if($2) { op_$1_b(); end; }
  128. 4:last_cycle();
  129. rd.h = op_readdp(dp + 1);
  130. op_$1_w();
  131. }
  132. adc_dpx(0x75, adc, regs.p.m),
  133. and_dpx(0x35, and, regs.p.m),
  134. bit_dpx(0x34, bit, regs.p.m),
  135. cmp_dpx(0xd5, cmp, regs.p.m),
  136. eor_dpx(0x55, eor, regs.p.m),
  137. lda_dpx(0xb5, lda, regs.p.m),
  138. ldy_dpx(0xb4, ldy, regs.p.x),
  139. ora_dpx(0x15, ora, regs.p.m),
  140. sbc_dpx(0xf5, sbc, regs.p.m) {
  141. 1:dp = op_readpc();
  142. 2:op_io_cond2();
  143. 3:op_io();
  144. 4:if($2) last_cycle();
  145. rd.l = op_readdp(dp + regs.x.w);
  146. if($2) { op_$1_b(); end; }
  147. 5:last_cycle();
  148. rd.h = op_readdp(dp + regs.x.w + 1);
  149. op_$1_w();
  150. }
  151. ldx_dpy(0xb6, ldx, regs.p.x) {
  152. 1:dp = op_readpc();
  153. 2:op_io_cond2();
  154. 3:op_io();
  155. 4:if($2) last_cycle();
  156. rd.l = op_readdp(dp + regs.y.w);
  157. if($2) { op_$1_b(); end; }
  158. 5:last_cycle();
  159. rd.h = op_readdp(dp + regs.y.w + 1);
  160. op_$1_w();
  161. }
  162. adc_idp(0x72, adc, regs.p.m),
  163. and_idp(0x32, and, regs.p.m),
  164. cmp_idp(0xd2, cmp, regs.p.m),
  165. eor_idp(0x52, eor, regs.p.m),
  166. lda_idp(0xb2, lda, regs.p.m),
  167. ora_idp(0x12, ora, regs.p.m),
  168. sbc_idp(0xf2, sbc, regs.p.m) {
  169. 1:dp = op_readpc();
  170. 2:op_io_cond2();
  171. 3:aa.l = op_readdp(dp);
  172. 4:aa.h = op_readdp(dp + 1);
  173. 5:if($2) last_cycle();
  174. rd.l = op_readdbr(aa.w);
  175. if($2) { op_$1_b(); end; }
  176. 6:last_cycle();
  177. rd.h = op_readdbr(aa.w + 1);
  178. op_$1_w();
  179. }
  180. adc_idpx(0x61, adc, regs.p.m),
  181. and_idpx(0x21, and, regs.p.m),
  182. cmp_idpx(0xc1, cmp, regs.p.m),
  183. eor_idpx(0x41, eor, regs.p.m),
  184. lda_idpx(0xa1, lda, regs.p.m),
  185. ora_idpx(0x01, ora, regs.p.m),
  186. sbc_idpx(0xe1, sbc, regs.p.m) {
  187. 1:dp = op_readpc();
  188. 2:op_io_cond2();
  189. 3:op_io();
  190. 4:aa.l = op_readdp(dp + regs.x.w);
  191. 5:aa.h = op_readdp(dp + regs.x.w + 1);
  192. 6:if($2) last_cycle();
  193. rd.l = op_readdbr(aa.w);
  194. if($2) { op_$1_b(); end; }
  195. 7:last_cycle();
  196. rd.h = op_readdbr(aa.w + 1);
  197. op_$1_w();
  198. }
  199. adc_idpy(0x71, adc, regs.p.m),
  200. and_idpy(0x31, and, regs.p.m),
  201. cmp_idpy(0xd1, cmp, regs.p.m),
  202. eor_idpy(0x51, eor, regs.p.m),
  203. lda_idpy(0xb1, lda, regs.p.m),
  204. ora_idpy(0x11, ora, regs.p.m),
  205. sbc_idpy(0xf1, sbc, regs.p.m) {
  206. 1:dp = op_readpc();
  207. 2:op_io_cond2();
  208. 3:aa.l = op_readdp(dp);
  209. 4:aa.h = op_readdp(dp + 1);
  210. 5:op_io_cond4(aa.w, aa.w + regs.y.w);
  211. 6:if($2) last_cycle();
  212. rd.l = op_readdbr(aa.w + regs.y.w);
  213. if($2) { op_$1_b(); end; }
  214. 7:last_cycle();
  215. rd.h = op_readdbr(aa.w + regs.y.w + 1);
  216. op_$1_w();
  217. }
  218. adc_ildp(0x67, adc, regs.p.m),
  219. and_ildp(0x27, and, regs.p.m),
  220. cmp_ildp(0xc7, cmp, regs.p.m),
  221. eor_ildp(0x47, eor, regs.p.m),
  222. lda_ildp(0xa7, lda, regs.p.m),
  223. ora_ildp(0x07, ora, regs.p.m),
  224. sbc_ildp(0xe7, sbc, regs.p.m) {
  225. 1:dp = op_readpc();
  226. 2:op_io_cond2();
  227. 3:aa.l = op_readdp(dp);
  228. 4:aa.h = op_readdp(dp + 1);
  229. 5:aa.b = op_readdp(dp + 2);
  230. 6:if($2) last_cycle();
  231. rd.l = op_readlong(aa.d);
  232. if($2) { op_$1_b(); end; }
  233. 7:last_cycle();
  234. rd.h = op_readlong(aa.d + 1);
  235. op_$1_w();
  236. }
  237. adc_ildpy(0x77, adc, regs.p.m),
  238. and_ildpy(0x37, and, regs.p.m),
  239. cmp_ildpy(0xd7, cmp, regs.p.m),
  240. eor_ildpy(0x57, eor, regs.p.m),
  241. lda_ildpy(0xb7, lda, regs.p.m),
  242. ora_ildpy(0x17, ora, regs.p.m),
  243. sbc_ildpy(0xf7, sbc, regs.p.m) {
  244. 1:dp = op_readpc();
  245. 2:op_io_cond2();
  246. 3:aa.l = op_readdp(dp);
  247. 4:aa.h = op_readdp(dp + 1);
  248. 5:aa.b = op_readdp(dp + 2);
  249. 6:if($2) last_cycle();
  250. rd.l = op_readlong(aa.d + regs.y.w);
  251. if($2) { op_$1_b(); end; }
  252. 7:last_cycle();
  253. rd.h = op_readlong(aa.d + regs.y.w + 1);
  254. op_$1_w();
  255. }
  256. adc_sr(0x63, adc, regs.p.m),
  257. and_sr(0x23, and, regs.p.m),
  258. cmp_sr(0xc3, cmp, regs.p.m),
  259. eor_sr(0x43, eor, regs.p.m),
  260. lda_sr(0xa3, lda, regs.p.m),
  261. ora_sr(0x03, ora, regs.p.m),
  262. sbc_sr(0xe3, sbc, regs.p.m) {
  263. 1:sp = op_readpc();
  264. 2:op_io();
  265. 3:if($2) last_cycle();
  266. rd.l = op_readsp(sp);
  267. if($2) { op_$1_b(); end; }
  268. 4:last_cycle();
  269. rd.h = op_readsp(sp + 1);
  270. op_$1_w();
  271. }
  272. adc_isry(0x73, adc),
  273. and_isry(0x33, and),
  274. cmp_isry(0xd3, cmp),
  275. eor_isry(0x53, eor),
  276. lda_isry(0xb3, lda),
  277. ora_isry(0x13, ora),
  278. sbc_isry(0xf3, sbc) {
  279. 1:sp = op_readpc();
  280. 2:op_io();
  281. 3:aa.l = op_readsp(sp);
  282. 4:aa.h = op_readsp(sp + 1);
  283. 5:op_io();
  284. 6:if(regs.p.m) last_cycle();
  285. rd.l = op_readdbr(aa.w + regs.y.w);
  286. if(regs.p.m) { op_$1_b(); end; }
  287. 7:last_cycle();
  288. rd.h = op_readdbr(aa.w + regs.y.w + 1);
  289. op_$1_w();
  290. }
  291. bit_const(0x89) {
  292. 1:if(regs.p.m) last_cycle();
  293. rd.l = op_readpc();
  294. if(regs.p.m) {
  295. regs.p.z = ((rd.l & regs.a.l) == 0);
  296. end;
  297. }
  298. 2:last_cycle();
  299. rd.h = op_readpc();
  300. regs.p.z = ((rd.w & regs.a.w) == 0);
  301. }