op_write.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. #ifdef SCPU_CPP
  2. //sta_addr
  3. case 0x8d: {
  4. aa.l = op_readpc();
  5. aa.h = op_readpc();
  6. if(regs.p.m) last_cycle();
  7. op_writedbr(aa.w, regs.a.w);
  8. if(regs.p.m) break;
  9. last_cycle();
  10. op_writedbr(aa.w + 1, regs.a.w >> 8);
  11. } break;
  12. //stx_addr
  13. case 0x8e: {
  14. aa.l = op_readpc();
  15. aa.h = op_readpc();
  16. if(regs.p.x) last_cycle();
  17. op_writedbr(aa.w, regs.x.w);
  18. if(regs.p.x) break;
  19. last_cycle();
  20. op_writedbr(aa.w + 1, regs.x.w >> 8);
  21. } break;
  22. //sty_addr
  23. case 0x8c: {
  24. aa.l = op_readpc();
  25. aa.h = op_readpc();
  26. if(regs.p.x) last_cycle();
  27. op_writedbr(aa.w, regs.y.w);
  28. if(regs.p.x) break;
  29. last_cycle();
  30. op_writedbr(aa.w + 1, regs.y.w >> 8);
  31. } break;
  32. //stz_addr
  33. case 0x9c: {
  34. aa.l = op_readpc();
  35. aa.h = op_readpc();
  36. if(regs.p.m) last_cycle();
  37. op_writedbr(aa.w, 0x0000);
  38. if(regs.p.m) break;
  39. last_cycle();
  40. op_writedbr(aa.w + 1, 0x0000 >> 8);
  41. } break;
  42. //sta_addrx
  43. case 0x9d: {
  44. aa.l = op_readpc();
  45. aa.h = op_readpc();
  46. op_io();
  47. if(regs.p.m) last_cycle();
  48. op_writedbr(aa.w + regs.x.w, regs.a.w);
  49. if(regs.p.m) break;
  50. last_cycle();
  51. op_writedbr(aa.w + regs.x.w + 1, regs.a.w >> 8);
  52. } break;
  53. //stz_addrx
  54. case 0x9e: {
  55. aa.l = op_readpc();
  56. aa.h = op_readpc();
  57. op_io();
  58. if(regs.p.m) last_cycle();
  59. op_writedbr(aa.w + regs.x.w, 0x0000);
  60. if(regs.p.m) break;
  61. last_cycle();
  62. op_writedbr(aa.w + regs.x.w + 1, 0x0000 >> 8);
  63. } break;
  64. //sta_addry
  65. case 0x99: {
  66. aa.l = op_readpc();
  67. aa.h = op_readpc();
  68. op_io();
  69. if(regs.p.m) last_cycle();
  70. op_writedbr(aa.w + regs.y.w, regs.a.l);
  71. if(regs.p.m) break;
  72. last_cycle();
  73. op_writedbr(aa.w + regs.y.w + 1, regs.a.h);
  74. } break;
  75. //sta_long
  76. case 0x8f: {
  77. aa.l = op_readpc();
  78. aa.h = op_readpc();
  79. aa.b = op_readpc();
  80. if(regs.p.m) last_cycle();
  81. op_writelong(aa.d, regs.a.l);
  82. if(regs.p.m) break;
  83. last_cycle();
  84. op_writelong(aa.d + 1, regs.a.h);
  85. } break;
  86. //sta_longx
  87. case 0x9f: {
  88. aa.l = op_readpc();
  89. aa.h = op_readpc();
  90. aa.b = op_readpc();
  91. if(regs.p.m) last_cycle();
  92. op_writelong(aa.d + regs.x.w, regs.a.l);
  93. if(regs.p.m) break;
  94. last_cycle();
  95. op_writelong(aa.d + regs.x.w + 1, regs.a.h);
  96. } break;
  97. //sta_dp
  98. case 0x85: {
  99. dp = op_readpc();
  100. op_io_cond2();
  101. if(regs.p.m) last_cycle();
  102. op_writedp(dp, regs.a.w);
  103. if(regs.p.m) break;
  104. last_cycle();
  105. op_writedp(dp + 1, regs.a.w >> 8);
  106. } break;
  107. //stx_dp
  108. case 0x86: {
  109. dp = op_readpc();
  110. op_io_cond2();
  111. if(regs.p.x) last_cycle();
  112. op_writedp(dp, regs.x.w);
  113. if(regs.p.x) break;
  114. last_cycle();
  115. op_writedp(dp + 1, regs.x.w >> 8);
  116. } break;
  117. //sty_dp
  118. case 0x84: {
  119. dp = op_readpc();
  120. op_io_cond2();
  121. if(regs.p.x) last_cycle();
  122. op_writedp(dp, regs.y.w);
  123. if(regs.p.x) break;
  124. last_cycle();
  125. op_writedp(dp + 1, regs.y.w >> 8);
  126. } break;
  127. //stz_dp
  128. case 0x64: {
  129. dp = op_readpc();
  130. op_io_cond2();
  131. if(regs.p.m) last_cycle();
  132. op_writedp(dp, 0x0000);
  133. if(regs.p.m) break;
  134. last_cycle();
  135. op_writedp(dp + 1, 0x0000 >> 8);
  136. } break;
  137. //sta_dpx
  138. case 0x95: {
  139. dp = op_readpc();
  140. op_io_cond2();
  141. op_io();
  142. if(regs.p.m) last_cycle();
  143. op_writedp(dp + regs.x.w, regs.a.w);
  144. if(regs.p.m) break;
  145. last_cycle();
  146. op_writedp(dp + regs.x.w + 1, regs.a.w >> 8);
  147. } break;
  148. //sty_dpx
  149. case 0x94: {
  150. dp = op_readpc();
  151. op_io_cond2();
  152. op_io();
  153. if(regs.p.x) last_cycle();
  154. op_writedp(dp + regs.x.w, regs.y.w);
  155. if(regs.p.x) break;
  156. last_cycle();
  157. op_writedp(dp + regs.x.w + 1, regs.y.w >> 8);
  158. } break;
  159. //stz_dpx
  160. case 0x74: {
  161. dp = op_readpc();
  162. op_io_cond2();
  163. op_io();
  164. if(regs.p.m) last_cycle();
  165. op_writedp(dp + regs.x.w, 0x0000);
  166. if(regs.p.m) break;
  167. last_cycle();
  168. op_writedp(dp + regs.x.w + 1, 0x0000 >> 8);
  169. } break;
  170. //stx_dpy
  171. case 0x96: {
  172. dp = op_readpc();
  173. op_io_cond2();
  174. op_io();
  175. if(regs.p.x) last_cycle();
  176. op_writedp(dp + regs.y.w, regs.x.l);
  177. if(regs.p.x) break;
  178. last_cycle();
  179. op_writedp(dp + regs.y.w + 1, regs.x.h);
  180. } break;
  181. //sta_idp
  182. case 0x92: {
  183. dp = op_readpc();
  184. op_io_cond2();
  185. aa.l = op_readdp(dp);
  186. aa.h = op_readdp(dp + 1);
  187. if(regs.p.m) last_cycle();
  188. op_writedbr(aa.w, regs.a.l);
  189. if(regs.p.m) break;
  190. last_cycle();
  191. op_writedbr(aa.w + 1, regs.a.h);
  192. } break;
  193. //sta_ildp
  194. case 0x87: {
  195. dp = op_readpc();
  196. op_io_cond2();
  197. aa.l = op_readdp(dp);
  198. aa.h = op_readdp(dp + 1);
  199. aa.b = op_readdp(dp + 2);
  200. if(regs.p.m) last_cycle();
  201. op_writelong(aa.d, regs.a.l);
  202. if(regs.p.m) break;
  203. last_cycle();
  204. op_writelong(aa.d + 1, regs.a.h);
  205. } break;
  206. //sta_idpx
  207. case 0x81: {
  208. dp = op_readpc();
  209. op_io_cond2();
  210. op_io();
  211. aa.l = op_readdp(dp + regs.x.w);
  212. aa.h = op_readdp(dp + regs.x.w + 1);
  213. if(regs.p.m) last_cycle();
  214. op_writedbr(aa.w, regs.a.l);
  215. if(regs.p.m) break;
  216. last_cycle();
  217. op_writedbr(aa.w + 1, regs.a.h);
  218. } break;
  219. //sta_idpy
  220. case 0x91: {
  221. dp = op_readpc();
  222. op_io_cond2();
  223. aa.l = op_readdp(dp);
  224. aa.h = op_readdp(dp + 1);
  225. op_io();
  226. if(regs.p.m) last_cycle();
  227. op_writedbr(aa.w + regs.y.w, regs.a.l);
  228. if(regs.p.m) break;
  229. last_cycle();
  230. op_writedbr(aa.w + regs.y.w + 1, regs.a.h);
  231. } break;
  232. //sta_ildpy
  233. case 0x97: {
  234. dp = op_readpc();
  235. op_io_cond2();
  236. aa.l = op_readdp(dp);
  237. aa.h = op_readdp(dp + 1);
  238. aa.b = op_readdp(dp + 2);
  239. if(regs.p.m) last_cycle();
  240. op_writelong(aa.d + regs.y.w, regs.a.l);
  241. if(regs.p.m) break;
  242. last_cycle();
  243. op_writelong(aa.d + regs.y.w + 1, regs.a.h);
  244. } break;
  245. //sta_sr
  246. case 0x83: {
  247. sp = op_readpc();
  248. op_io();
  249. if(regs.p.m) last_cycle();
  250. op_writesp(sp, regs.a.l);
  251. if(regs.p.m) break;
  252. last_cycle();
  253. op_writesp(sp + 1, regs.a.h);
  254. } break;
  255. //sta_isry
  256. case 0x93: {
  257. sp = op_readpc();
  258. op_io();
  259. aa.l = op_readsp(sp);
  260. aa.h = op_readsp(sp + 1);
  261. op_io();
  262. if(regs.p.m) last_cycle();
  263. op_writedbr(aa.w + regs.y.w, regs.a.l);
  264. if(regs.p.m) break;
  265. last_cycle();
  266. op_writedbr(aa.w + regs.y.w + 1, regs.a.h);
  267. } break;
  268. #endif