From 04118be59a83f81fd60fe2830b84dad6703fafb2 Mon Sep 17 00:00:00 2001 From: byuu Date: Fri, 20 Oct 2006 03:53:34 +0000 Subject: [PATCH] Update to bsnes v018r04 release. Ok, _please_ be courteous to my webhost and only download this WIP if you're going to test it on a processor that hasn't been tested thus far. byuu.org/files/bsnes_v018_wip4.zip byuu.org/files/bsnes_tests.zip This has two separate builds. Neither have PGO, SSE, SSE2, ZIP or JMA support. They are identical except for the FAVOR_ flag define and title of the program. FAVOR_ACCURACY [bsnes_accurate.exe]: - Always tests OAM RTO flags even on skipped frames - Tests NMI/IRQ trigger every clock cycle FAVOR_SPEED [bsnes_fast.exe]: - Only tests OAM RTO flags on rendered frames (always with no frameskipping) - Tests NMI/IRQ trigger using ranges If you'd like to test, please run demo_mode3.smc on both versions of bsnes, turn off speed regulation, and report the framerate both with a frameskip of zero and a frameskip of nine (max), along with your processor speed. The other test ROMs are just to verify that IRQ behavior is still reliable in both versions. A blue screen indicates passing, they all pass on both versions. Don't expect test_* ROMs to pass on other emulators, but demo_* ones should. Example (my main PC): AMD Athlon 3500+ Accurate: - 121.5 fps w/o frameskipping - 171 fps w/max frameskipping Fast: - 146.5 fps w/o frameskipping - 271.5 fps w/max frameskipping ----- As you can see, there are _major_ speed differences on my A64. Personally, I'm all for accuracy, but I also want people to actually be able to use this program in the interim. Perhaps in the future when a low end computer is a current low-end Core 2 Duo, we can remove all of the "speedhack" code. And in the meantime, the full 100% precision is there for people who have the CPU power to afford it. ----- If anyone wants to try and help, heh. src/cpu/scpu/timing/irqtiming_accurate.cpp and src/cpu/scpu/timing/irqtiming_fast.cpp are the two versions of the IRQ testing code. If you see any ways to optimize either (preferrably the former, obviously), I'd greatly appreciate it. Understand that both the CPU counters (VCOUNTER, HCLOCK) and the IRQ timing positions (VIRQPOS, HIRQPOS) can wrap not only the horizontal clock position (1362->0), but the vertical position as well (261->0). And also that they are "misaligned" by 10 clocks (which is really more of an internal CPU IC delay thing, we aren't entirely sure why the difference is there). You probably shouldn't mess with the code if you don't understand the implications of this on eg range testing :/ --- bsnes_accurate.exe | Bin 0 -> 1540096 bytes bsnes_fast.exe | Bin 0 -> 1544192 bytes cart.db | Bin 0 -> 1384 bytes license.txt | 35 + readme.txt | 124 + src/base.h | 6 +- src/cpu/bcpu/bcpu.cpp | 97 - src/cpu/bcpu/bcpu.h | 165 - src/cpu/bcpu/bcpu_exec.cpp | 163 - src/cpu/bcpu/bcpu_int.cpp | 50 - src/cpu/bcpu/bcpu_mmio.cpp | 650 ---- src/cpu/bcpu/core/bcpugen.cpp | 18 - src/cpu/bcpu/core/cc.bat | 3 - src/cpu/bcpu/core/clean.bat | 1 - src/cpu/bcpu/core/core.cpp | 28 - src/cpu/bcpu/core/core.h | 62 - src/cpu/bcpu/core/op.h | 256 -- src/cpu/bcpu/core/op_misc.b | 282 -- src/cpu/bcpu/core/op_misc.cpp | 864 ------ src/cpu/bcpu/core/op_pc.b | 160 - src/cpu/bcpu/core/op_pc.cpp | 483 --- src/cpu/bcpu/core/op_read.b | 317 -- src/cpu/bcpu/core/op_read.cpp | 3183 -------------------- src/cpu/bcpu/core/op_rmw.b | 185 -- src/cpu/bcpu/core/op_rmw.cpp | 1110 ------- src/cpu/bcpu/core/op_write.b | 181 -- src/cpu/bcpu/core/op_write.cpp | 582 ---- src/cpu/bcpu/core/opfn.cpp | 377 --- src/cpu/bcpu/core/optable.cpp | 256 -- src/cpu/bcpu/dma/dma.cpp | 260 -- src/cpu/bcpu/dma/dma.h | 61 - src/cpu/bcpu/memory/memory.cpp | 40 - src/cpu/bcpu/memory/memory.h | 27 - src/cpu/bcpu/timing/timing.cpp | 338 --- src/cpu/bcpu/timing/timing.h | 74 - src/cpu/cpu.h | 7 +- src/cpu/cpuregs.h | 3 +- src/cpu/scpu/core/core.cpp | 6 +- src/cpu/scpu/core/core.h | 5 +- src/cpu/scpu/core/op_misc.b | 115 +- src/cpu/scpu/core/op_misc.cpp | 161 +- src/cpu/scpu/core/op_pc.b | 34 +- src/cpu/scpu/core/op_pc.cpp | 34 +- src/cpu/scpu/core/op_read.b | 244 +- src/cpu/scpu/core/op_read.cpp | 504 ++-- src/cpu/scpu/core/op_rmw.b | 36 +- src/cpu/scpu/core/op_rmw.cpp | 132 +- src/cpu/scpu/core/op_write.b | 70 +- src/cpu/scpu/core/op_write.cpp | 96 +- src/cpu/scpu/dma/dma.cpp | 8 +- src/cpu/scpu/memory/memory.cpp | 95 +- src/cpu/scpu/memory/memory.h | 32 +- src/cpu/scpu/mmio/mmio.cpp | 38 +- src/cpu/scpu/scpu.cpp | 26 +- src/cpu/scpu/scpu.h | 28 +- src/cpu/scpu/timing/irq.cpp | 65 +- src/cpu/scpu/timing/irqtiming_accurate.cpp | 76 + src/cpu/scpu/timing/irqtiming_fast.cpp | 111 + src/cpu/scpu/timing/timing.cpp | 59 +- src/cpu/scpu/timing/timing.h | 15 +- src/interface.h | 2 - src/smp/bsmp/bsmp.cpp | 60 - src/smp/bsmp/bsmp.h | 24 - src/smp/bsmp/core/bsmpgen.cpp | 18 - src/smp/bsmp/core/cc.bat | 3 - src/smp/bsmp/core/clean.bat | 1 - src/smp/bsmp/core/core.cpp | 28 - src/smp/bsmp/core/core.h | 25 - src/smp/bsmp/core/op.h | 256 -- src/smp/bsmp/core/op_misc.b | 164 - src/smp/bsmp/core/op_misc.cpp | 643 ---- src/smp/bsmp/core/op_mov.b | 210 -- src/smp/bsmp/core/op_mov.cpp | 708 ----- src/smp/bsmp/core/op_pc.b | 166 - src/smp/bsmp/core/op_pc.cpp | 1157 ------- src/smp/bsmp/core/op_read.b | 194 -- src/smp/bsmp/core/op_read.cpp | 1467 --------- src/smp/bsmp/core/op_rmw.b | 60 - src/smp/bsmp/core/op_rmw.cpp | 452 --- src/smp/bsmp/core/opfn.cpp | 138 - src/smp/bsmp/core/optable.cpp | 256 -- src/smp/bsmp/memory/memory.cpp | 184 -- src/smp/bsmp/memory/memory.h | 11 - src/smp/bsmp/timing/timing.cpp | 35 - src/smp/bsmp/timing/timing.h | 9 - src/smp/smp.h | 7 +- src/smp/ssmp/core/core.cpp | 6 +- src/smp/ssmp/memory/memory.cpp | 53 +- src/smp/ssmp/memory/memory.h | 14 +- src/smp/ssmp/ssmp.cpp | 23 +- src/smp/ssmp/ssmp.h | 10 +- src/smp/ssmp/timing/timing.cpp | 20 +- src/snes/scheduler/scheduler.cpp | 49 + src/snes/scheduler/scheduler.h | 52 + src/snes/snes.cpp | 62 +- src/snes/snes.h | 10 +- src/snes/video/video.cpp | 2 + src/ui/Makefile | 14 +- src/ui/cc.bat | 2 +- 99 files changed, 1435 insertions(+), 17598 deletions(-) create mode 100644 bsnes_accurate.exe create mode 100644 bsnes_fast.exe create mode 100644 cart.db create mode 100644 license.txt create mode 100644 readme.txt delete mode 100644 src/cpu/bcpu/bcpu.cpp delete mode 100644 src/cpu/bcpu/bcpu.h delete mode 100644 src/cpu/bcpu/bcpu_exec.cpp delete mode 100644 src/cpu/bcpu/bcpu_int.cpp delete mode 100644 src/cpu/bcpu/bcpu_mmio.cpp delete mode 100644 src/cpu/bcpu/core/bcpugen.cpp delete mode 100644 src/cpu/bcpu/core/cc.bat delete mode 100644 src/cpu/bcpu/core/clean.bat delete mode 100644 src/cpu/bcpu/core/core.cpp delete mode 100644 src/cpu/bcpu/core/core.h delete mode 100644 src/cpu/bcpu/core/op.h delete mode 100644 src/cpu/bcpu/core/op_misc.b delete mode 100644 src/cpu/bcpu/core/op_misc.cpp delete mode 100644 src/cpu/bcpu/core/op_pc.b delete mode 100644 src/cpu/bcpu/core/op_pc.cpp delete mode 100644 src/cpu/bcpu/core/op_read.b delete mode 100644 src/cpu/bcpu/core/op_read.cpp delete mode 100644 src/cpu/bcpu/core/op_rmw.b delete mode 100644 src/cpu/bcpu/core/op_rmw.cpp delete mode 100644 src/cpu/bcpu/core/op_write.b delete mode 100644 src/cpu/bcpu/core/op_write.cpp delete mode 100644 src/cpu/bcpu/core/opfn.cpp delete mode 100644 src/cpu/bcpu/core/optable.cpp delete mode 100644 src/cpu/bcpu/dma/dma.cpp delete mode 100644 src/cpu/bcpu/dma/dma.h delete mode 100644 src/cpu/bcpu/memory/memory.cpp delete mode 100644 src/cpu/bcpu/memory/memory.h delete mode 100644 src/cpu/bcpu/timing/timing.cpp delete mode 100644 src/cpu/bcpu/timing/timing.h create mode 100644 src/cpu/scpu/timing/irqtiming_accurate.cpp create mode 100644 src/cpu/scpu/timing/irqtiming_fast.cpp delete mode 100644 src/smp/bsmp/bsmp.cpp delete mode 100644 src/smp/bsmp/bsmp.h delete mode 100644 src/smp/bsmp/core/bsmpgen.cpp delete mode 100644 src/smp/bsmp/core/cc.bat delete mode 100644 src/smp/bsmp/core/clean.bat delete mode 100644 src/smp/bsmp/core/core.cpp delete mode 100644 src/smp/bsmp/core/core.h delete mode 100644 src/smp/bsmp/core/op.h delete mode 100644 src/smp/bsmp/core/op_misc.b delete mode 100644 src/smp/bsmp/core/op_misc.cpp delete mode 100644 src/smp/bsmp/core/op_mov.b delete mode 100644 src/smp/bsmp/core/op_mov.cpp delete mode 100644 src/smp/bsmp/core/op_pc.b delete mode 100644 src/smp/bsmp/core/op_pc.cpp delete mode 100644 src/smp/bsmp/core/op_read.b delete mode 100644 src/smp/bsmp/core/op_read.cpp delete mode 100644 src/smp/bsmp/core/op_rmw.b delete mode 100644 src/smp/bsmp/core/op_rmw.cpp delete mode 100644 src/smp/bsmp/core/opfn.cpp delete mode 100644 src/smp/bsmp/core/optable.cpp delete mode 100644 src/smp/bsmp/memory/memory.cpp delete mode 100644 src/smp/bsmp/memory/memory.h delete mode 100644 src/smp/bsmp/timing/timing.cpp delete mode 100644 src/smp/bsmp/timing/timing.h create mode 100644 src/snes/scheduler/scheduler.cpp create mode 100644 src/snes/scheduler/scheduler.h diff --git a/bsnes_accurate.exe b/bsnes_accurate.exe new file mode 100644 index 0000000000000000000000000000000000000000..71a8c95c409d5204528c7528dcb2d1db0bdcb405 GIT binary patch literal 1540096 zcmeFa4R}=5wLg4@OkjYC8FivjV;$SEO(ojY1aD|UjS@pzW1M`aHA1|Nz0;IhiWBA5 zm?lmV=WvLZw$##F+RF^Ir7c(Ky;Os8G zA^6JszxREf_k9SQb=F#Y?S0nSA8W7uarWH$`4virq9{&WiG-pI;m*Hu0pB0E9Ex(@ z6;Gb0Y?}U?D~BA_zqzs@_@#S%iJaR@Mx^k@PFtzWX12F(-Mop= zh9xfL0I|iNR@Q75tp6DRJ^Q2rlcsm=7f>JwDMeWdy{Ma^UowIZZ+~s*uB9O`zVjH~ z8w_QmaR-|G^HFX|`<RQ4 z_bmAWcp^`bH%c5t{345#OfQXbjyRVC=W^g&4xGz@b2)G>2hQcdxg0o`1Ltz!Tn?Pe zfzxuJcdoLcN^m(R6uB`1IO3 zeGn3#|6K33JfvJ(SEv6vGgIl^!9nxqKj+xid*~R#)z6+9xoLtrjofrx-j2!JIB&hL zcmY+2hQcdxg0o`1OK1M0c~o3Jd_>K@A{il z3GZ-@V8vEZwvU>B%PRcNNUs~y0o$AkxXXIIz*7R(#kaZ0PyRIx?>f|?=znW=D8pNb z9VNDr*h|2o>wy)WDBa0tzHwYUQ=Ls_bQOT)?@#i{QfIFba5dn9?V}qVsb}+<>D1_G zc-+;fE%JMsnzf1HjVtCWo3UQ66zzHI$DMBNW*>(B;TF0s*@~pG}~} zE)cN^wAlrg+XRAkffY7^#S}0b9h6*Y6Ie=t8DNT1gTN}AKpzFn$_9beHi3v;V2w>+ zxm|~KHi4D)6xQ1WR#5=kQcNW`*aX&4!1@*&Z2}u8z@0bA*W6?i*k~8v-YaWqZn6t( zu?Y;>1>!b=Ep~w&Hi5WZV3$o`hh1RQCa}vcFlG}NwF~UE35?kV_SppX+6A~#%9>I8 z>;eaE0tf5@hiw7}?E<<@;ILg_+$Nyg1vqDIRdU=eaNH(v%r3w=aBB+3?E{(!f@@)cTc7Xz$K!shP&?Zn#foYbvD7FbSP{8_{B{qRJ zyFi&uV3A#*+$ONpE>K|;=(7t{*#uVD1*&ZVtL*{-o4|UzK!Z(SlU<<2CJ?s^wAutl z?E-B!fqfKkTgsx{CUBSnrk8^H5VQ##r@%~03X5z4%C~I-i){jK3RoWzvI*qb1(w^fuLPrwM}5LU0{t(V5wbTolT&J0@i$3Zxe{v1vc0OR#3p&{5RSJR@ntM z*#y?uA2DPTSZ^2DViVYC7l>O0hFMCRhajVk)oY(Bozrh*2e=7U&OJ=>(d2{$RM|i6vyv+f2rOCe5%Kn7OzSzpn73}G=-VUADpV$l)ly6K6 z?@k<@Qnb5&cXt2x!5M6sI@sX%)D2eneSu&cI@Rmn{)&cv+U{1%G({r*Pzi!q^S7JKW0V^AZ!eQLda-OCs!SNQY46z_v%c!xWq z!tcFZ>+9c(m}V9tGmGLzc8-qDsq}SD9pb=y`!;J<^$!B8fXDfj-P=R0_9*C zXfaTZjDeN_yDSRsrSE6=*e3j#GgKfO1d@v;inbpg>!I za<~b!6)4A+K-+-2;1>aH2kMb%5NNJM7XkH2bTQC;iH3j{N^~jE5{Y&JEf?rO5AqCD zm86)1paPPLNUB9r%O%w&DUPQg8I%+UPoNe{iX$aZOC`l&5hxCqw$B+@BdLg_)=7#3 zA%v}$6h}RvHb`ofq&RLtDr+RgK?*1iULeU438;;d;_w3$hb0J$OKM0`J0!&c2f}tq zDlVx}NpUEFFpdw9$}UN9FaU~!1ccG^2Q?-sy7{2!{v+(5r1nYbu%zhNBTSdnK}n5E ziY`0C=!YW}T~c(qLD3mU7(HxI$0S8}8Wi1Zgej=xpe7{cloTCkgt;U|ZyA(ZQgn?$ zc_c+Y7?f91Zb{`ziXJY)@+9SzluuIhT@mJ&RDq=OB~>h`0!h&Yg=C?m=x>55mQ=N* zN+i`FsWM5?ZG>dGq!vl4LQ-@H5mqHBdVip*B}G>cR6tVn>p(R~icTD;7D;WARI8-u zo*}GFQlpY;mlPc@gasu{G~b|BN{UVis8y0`lhkTS(cM7U8cET&0JTn1bRU;*iv9qoO_E~g4{AtKYb3QrQtZ|d7MB$J@a^@@MK25v?*eDe{8ORQ zInzS7%$e^DeSXe-SLjPcy9b-ybEbqsqI-7szTJa*-t`)~%H9!nis5%WUAqpWp)b3)nyHM>eP`mTh?gq6xpmtZQ-BoILh1y-NcDJeBt!j6R+TE^p zFIBrkYWHHbdy(25REKFt)nVFJb(r>69qu9Q?ox+oIMrbqQ+1dIRvo6tKmrw+#jq)}9dhXmXtAdQMTOhcm%)A*>v zG)U?&jg&e}!=(-%6p#i^9o{EkE(%W__6q0`&@G@#K&OC;fHYI;uutH50+t9^EMTF4 z1p?*^=oheBz$yVN1S}V@Ou#k)TLo+putC6pfQtkS3fL~-QUOB(E*7vyz%Bt-2)JCp zh=6?pt`=~WfGY*uB;ZB?Hwd_1z;yzy5il;`76FF<2Y? z{!?nHdcRY>-=#O*lF8cJyIs`pR~?=E7T&>{JUZHu2yR?gskBECTM2~6^XjqZFBP#%7F%95$zlxweP&&=A{ z;Rwx!yM<)(v-_VwGTP-E4`AivA8v3cbC6Ewyx{tdDh1)Wfe|>R!Jo`m^o5_zgk0cY z6Z!f2%%tqaQnuQkTWiV|QMSwP*MC&*pljyWT(xl8@`8S}u{!-g3jrbzC$_>7fxJN)j9WO8Zm_Eu%`-2(ca8~JWC)k+_tyG8VWF{95+Mo)XM zO^hzyt405|i0)P^{r7#mBTGaNAUa;v=T1gWE28@tS=9VCy$O-k%6zTT9iDL9GmTbF zIXWXe;kq|-$OT-jbPp+D&Z+d?lYyKcItb>R%3Kn;gRn&U%1=2IAbwo~0-XxmRn8qL zpToH9_VAAU)C@FfBiPi`+7%)UnJu6aeq3EbZ zG%iHlOtsw*eO8Jt3h$_*^bal4-vW+Ff}U=VGQ?)ynK@L5TVSvn>X!hk)xXWy4gSJ9 zME!y#YO{#y?dd+>7M1zJr~$o&QBiEQh?;MSnwN}vfh{UCjZy3L%cagD(_TgHCv)N@ z)`S|bHPhZ46FDI=ZJR~(aUq&Z(PXBLNKuh#-?fOceua0G^>kluQz(@U%Nf!oN5MWyLRWm$rDfM{EEnlVT@v~nM` zkR7qs?CO|Or(Il^82g2zy**vaQF+Y>&N-MfvA zUTw--RB>h3A5tx@>-4q|%rDc=P3vrYp7iP8c%~=SQ0IOK!{S zyjGjrJBZK@VTxZj)7_45wvNRChtPCbjImvO|IDtp_%f6)Qop(CTO9V*qplbq92n_ROjYPO573C(yHnx!*NPiu0`&J&t#d|qnC zJ2exu&`fepPi=C|vZ>idz9ux|U1*lhI6bY&HS-9~%8h!)J2exu&`fepPi=C|&ZlO_ zj6CCAXqL`6J*~+#yFh5R`Y*C=@=nbJEi{vy(^H#VvkR%&8bdSQg=XoD)6<$9-Zi(2dd9oZES+(BT9a#*D>U0^XvRA=6SUAwa!yZea?LKGW=r?T7QnmEES+(B zT9a#bsn9IAvAFGe6cQQX-7;l_>&H}*NWv9rL9b{;nxXxwO9aidYh zjrI&T8lvsj#ka3m{@HTnUvWK#>v3FP!nGLJeYm=D_2c?Bt|+ecxL(KgF0Kop(!SOeDh0i$qvh zk%-7oi+0#wt2?s$euH8q(jS48DClnhK`D&gid;xD)rX?O+QO6zTYD(oejbVni-%BQ z?+&HgutQN{br33S&Y^TWawsZVK0-yihp@FRABu|BhfvY>4yCuJLs8KJ5Gv~bA@L4R z$;ztK;2qL@!$VQw-9cJ-cZbsbGbBw93!%cFg0R&`IusRN4MK%ab129|hfs>5|BuEn^%f$L#h z8*u#!*M3}gqQt&|YXh#Qa9xD!DqO|5=HaTtwHVjKxPE|(O}y`AmOtD26DDgni4peZ43s%x_}vS7$+;gZ#2&vx-{dqlnX zPCASiN zXBG@uOHlrAuEf^aPGj6)dg=)2W`)GE%6i7^xe2l;mShE z)#3gHTp?WjxE{eZgzI@+M{$KA^CMjQa2>&QEv_4I1#sPoYYDEExE{wff{TU&^G{2y z^X=~XwCVOd%XGU36X{-DoM!i9rmRp-ZhM1eV%p2Y^>*%8+-nK$$e9tz6dv-AgEKv zgbF5LC2$wi16W@_dlM4ED+FqQK`xz$Jwvkgh*gh_#NnMh79LOkV9=A2~_!m^}v z@DoYp@}byy~ zC?`heP;NSslWP;bW^(4*L|U=_n8}G^t%7nF3gyzRaQM9$NKGzH6q%`+OA~21*J3Ic zfO60LojFGnE|epZfO0corQ}k@;SUQd}9 zS=5u;gBeWAve^Uv+YOaD}NH?ZI-SrsdFU63Pkp3CgAH!OzX)CbtJ;vy#fu z9?TWWrTbo1dvJ%D+T`}&L8fNfgV!-VuI12S6UqtC4a%kL!FgtKliPzLQ#sm$HAv3x z_F3&g{EB4GO>PffzB;KK?LnPTj=rK$PB@KFE@cnCW+peeJ$Qu4nf4$t;v8Z@G z5ER=ai;DI9y3)93b8KheTp&KWoloHQyaDM@Zkw~SrO~1rzhR(^cgFiZ*-i`KA$^D^c$a& zAEUwr+^HyH!Ez8Qmk7^Cu%Z{CywZn-dji@{ef&M-CDxqU5ge?>3juGTs4-*=???^} zC_QXQUvH7Vn$pGuKc$6#A<|x9NV_c3r%*D6^Wdbk98@sve>9|@heT47-%?r*H-xkt zaZtM0kltXCUIQFyrjJ;KCQ}XRZj1C1rfp2JQxnm<3+a7yzmN|Bi*yC0Cz2AHO{HmOAj{P?^$l2*kInF{F1|q@Sd;F_NaV=vzhF zK0|tyMS3}^Pt}Us?7c6sJGOSH908{$(L9dI%{l=4wRhV}^K@MZ8Rii?O>D zmz@Apj~e2aSj4l0xER?>aWU5;QeR?-zk=zq3YLdkyjB7I98GN+WEfF3m7gf0-^8a^?<;c&!i@GYT?wG1nwgf7}qimLefh zcbYcmBg^$Ivm6ROpqSpIKle+yep&7JS%#9@%Xe6(Uq|is53@kR4kp1iciQygXnin1 zBegG)b8M_q!CLN=+qX9dTfqw?awfpiCi)Yd84GXU-Z9?P```FQ040&*+f%9ZzC%3Z z%~BMX5}&QzmDsA7-Iu{Fw{LsyYYyF}Z4K*FLYIg2tnB_MM6`>vIxn>Mq1W+2 zObHylfGC0#uEKkvi?5dJ?qzuKuYx_qpoO=iR-mAfcfO;448L8I-S-aIy>D|uH@km6 zpw{g#+Fkn2z5k#!IPvf^RnlpkDDW)y~KCfu^ zoSM9QRjtXF{lo)q?b6cwJt2>gKuz9~*N%J{2RCA`2jXevUTkW@_J&6H)>k~ee^>B5 zS;!ZjnA$m0vci9NAnwGp&TF)r-Ea>m{b8g$=w8OhyZCqqo?fU;*J?d#gTMGl0`&l? z54t0iK!S>PJ^~7{#iGh%=9*gVFAf~}6J(1La~9;?TdQ5JvkG8~!xOiB< z0weqJo-xrj`s28nIl{Q za>yz1!2R>D_ds(n#S=AgC+)J*Rzp4!+o}>QW%{^Z)baY;+ZAC6a z@OlasFRPku5zHy3brHhhue+4aEF)6~kNlX~u@zaS-RMf@<>t0><->QDEA_Y*;!-j) zG8|I?tbbFq#M@seSALIc9M`qD@RyN6;s0O$Ii`fiz2R=JBHVCabH~(1?d@h-+hzN> zP5$mchthesR_TH<7Y41#1(V@nMLmF)FzCEtu=*O9_*t0W)Q-$r3K@_RBC`Mn)5 zSgokbvqqlPJJ|a2B@KJ$pY_bM`iU1Vdm;Sa?}fKd3IE!OP5S|@(plF51LfpCJ>zK? zVe$^vVyrJ7nvOb%dJh7d_!p{ow{TaY*WO$4ycT~4w*We!c}HO)r-4Q@CxnevNyUW~ zul9R2r@teUuUZ>ey9wb@3PA%kYlz#h#QTPK_|v;TGktGb`p!37ltH(j`67~c`e&hc zz=+3*ej(RKr#Y7KW{2b1 z_rR$}f5f+GM&HA?$=LerM4+idsZ;N(Q0G_42P|M_i8p~=sLM zp6-J;kot~zTJJ4LSMikUOD-9_*}+Znx%ypLA4KdtMm-<)I2m<0qtfDtPxFnaJ!w&| zwnTl^^3;`#YJLzaqxL9iQD4WJX!5DMEm2ob^3?M5sGBTNe`JZej!~zlD;!Uc`p=fA zy_TpOCy6>GJ?f_|QSY!s-7-m3M|#u@OVl}*sJj@IeWb`?XZV&jl%J(!etljlk8&;X z#?s;;d)ru9(xR@gL_O|E73w}lwU!K`+FrEL5_QZH^&q3tp-9$;Hh!;>_S8!)QTYi- zvMT9}YL<)>b=nbr#(@g=U<11^)Ocs;0c~EZc8g1!O;;3NXyWxi$FbVPAGG>5ZJw*H zV>|%-mNu>4rOl;1?D$AyW8>B%8I9rH@1gPkQACI7G2_6dnQ@$_O9!-Dssq=>wYT&T zJa|l%c=efBkB7<@A06Mq=50@Yyy4}y3%Oz~>fYQ;CHXmpm&+iMz0hQ{ahmKZlZ{rH zO5~F!8%}I0kxNZ>S|S-HJ1vp%izn6O_a-|nkztdamdH;`cA6$Dz)lW6aPR5zI~~|` z*;y#IktX)^#o-!O2DBPxq<#(OQsIU>(1nzvfO>0$t>KPMcv!HC2K$SxEL`hGPU9Ky z0O`JAJyS9y&Gk)#zR`)k@Gv?*$q0`ZVB5R)1~%1eSsPEZD9ycFJs-me;_d?NdF@@b zCRhIqOSIMBFxXwJ&y{%jV0W4RN#fYjkJ7G&6{=F3DnJI*nriLW+KXx>7y-Q+^+K!k z6ul5szM&}fbjfk~>H8&e)O~Ly zN3D@!KA2pOs2OeFD_7tKmT;7Wn&O4!MVHiujMFN;rQ1W9IH{bU%|kDrR#~ilMX86U zTCL6XL!`b|s|n!39_gkE+*@&Ps|_@w9jKMgWCG<(AkG@CHDO=`@p|<2)r^CCD;RBc zvZcv&g5zkWwTVB@S%BTcuF$8T#Px`X;;lpR)?gAe%3PkyjkEW7w5&}a)Z*T7Cb^D{ z4*9u4!M0p}P<~w;{T^|naBlzPHap7QnF?!?X^b zgJbT*@pt@Qab#-6`uXzvvySuCy9@QHKXGC+b3xGykz6uL^uPU>jABWa>wghsStK{8 zlw;d7a%zD~z1yQM$WwpFr$rXrrEi0b2(Ay{ixmAkUbIk3>p!&yu{hg$Yxf6=XyjlL+e8UO7<5E?9EKO z(b;hfu{Z^=RnH3_w4J}l_U5v+KNnn|Wcxe)`Rh?~z2ZS9t4 zpwmxx&c&v+T*ScV0F6I%^4AIw!LTl3e?zX-KXcnYs!2{Y??=TgEPA!{ne4vDWUpL; zMp~xMb8F>!nZ6p-i+LW%l&iPoqUKeo^ydnC%9V2U%lT@3o;uH`-r~3Vau64@hhkMbE5FmI^pkN2N+@tf9@iwpKt}8-?4VW@ESw`rA7U` zCF+}&{`)k44pD9X+!dCnzqLg5@TpdZ15s`M+~LfW!auXTYi?RpxJLzW87%J621`8E z@<@K}opM|mZ%SIckR@Kw63=(q^Dan>S7wPPCSnX9`!t^ls|+@u%3+C$#beVkI?bob zr%z@0MlQ~NyxQ0(=l8T*JX*aQOGZwu9ur5m_ygL!Jlu2ZwE6O5z5|1Pvd;ow~Dbin)_83&zoYKrNP$o(+U?362E*(S5hWTTd*w&UDmvN2VY zN~G0fr%B&zveTrmHQAUNq6;K7x!7c<@Cjyl*YP_LRc~}C4^>ImDl^W=#^$@ z0iT+;EL@)F5HCC@!=Y?+um?=dyK?lJi(f6_ekOgbW&h5Z+WQe?Zeh_2rQ5Unrpfjs z+dF2DlI{Iw+1_uJ?fnk#$jt?)^X2Lt`D$aHdb3Zx)sKGOiz^pb9uiEpcg&OO;SZR@NvLFCug z1q;!RP{%|&+OFP=b`(ywqeJMa(T;vHc{}=?d(w7vlgUo2)U!->TFda7?6j8g?o2d+ zEH;7q+Ef!jO-yeB1*s-*J#;-|6G%B{^q1g|!2z2qTGboKTDO=P4gLbJ$pIFe4oq?c z`7t~kGJJ}ac3QCLKZia@d$RPO$F1$@O#SD`JkGf*=tBWNXdn8CD^hI=6C0&`&=1ouv()i}_MsP9q83@A+S?SnUt1sg!h5NwW?Q1#+Z3bP`p`9&s7K8!(1 z_GvEUTXN8jsJ`?;`(2i(BbKP;lSK8TN4?q-b*&|86{DI5svEh(L5JpO31(~L*lWTz$aQZ2WaS7A>O^%G{*`#^p4&cCOk^1F~^m&YTHtkZGmXc3y$ z(Q1~cf5p2dqozC7(|QpVvkz%e1D2@UEm6~bYY~-gMRv4D(>vNmcCYA}oH(ok7I2_`wWBv!8afS`@pW&n2kXH zi}7!XZTwqe8UJFct6BTBHop*`eKnW##j{s#6${A8nGdv=mJiZiEd6f|3J)dm{^M8l zznq*pyZ-mFi$%3fu1VZxwwDhyhJE&=h%NfxrDml+a+*&&$r$z#OVkESRC{|tRJIpu z2XVV4YM~{ny}ckR+lw`-&k~hia>=H4#b82|k6m?!fYLqCv+gsq>&O`H?2k*8X-t9bix3?s{+j(~HR*n+G zc(!PGPAGI{@AiJjqz$j#WT!Q}TTOOa!@J&Or}ZsYfGyi&qs6;@zX4v$-_G0~>oN0- zUy!(ljjRbj$}kO`_b@q5m0rhB|F=xokRM9QQ$=h37+P(*SfFlh>e-;MT~|3TWTrGJ}gZLen< zf1-b5wL$-e*{u&c22ETjYGJZ}JIgWXl{g|T*}t9T81yf1rJ|nY81(0ssAo9_U2KVZ zmSfP_mZ&e9?e%|W47wOL;0$BX1#iAzEB*bun1dDvl%+MWVUwNKN`GRq(^}~Ylbx2x zKZAXCz2<+QyE{{_nHqwc?MVsFg9){Fj~t&SyU&VA!;Sv;76cmoZ(4gxw#Ujdg{RW5 zdB5~I_cvMkXwQnZJ?Glyj|+^g%52YN{NbGJzN=+>=HgS8YH!cgs+dm-pgnUL9_<t#=akBgIpmPPO#cMhKK26?y?_tN^0EiM2AxYW^R(pR!CM@)V%`5M z@Keaj4*wj1r#rK8{LYSW@HpX=9`!mi>O+>OsR<`bRF^I4$=8!l{emTGYH*y2+GAIE ziy8F>OVrfhI2E)``nD0%x14dR5B6D_`%W?C^sjiP z=#; zy}tA$<}qtTee~;pdR2twm!8ZHe@A9D_Nu*!byMV8K>H2W?{+#6u`;G~iLwsJ)pWsnNx+>xcYgdpy>FnpEv*piX?|P7f?`Q8g zNpgC)Vek47IGH_4+B@w`;VFAJ@P6s@WPr)ihrJt%S?16G2kjjfj9~BZ;16o=Zom&V zyuZDB;AqnFoVC5X$&7l|_HLRP^{nmP=qpKu&)VL7(~Nr7_O8i{`oC}QR-D=1edEac z*}D_?S-GTpV=+~KHrZ*WYM04Qvv`|AHGVEAHMTYf?9R8e>oJ;FG5F)br1AV_4PsS4@h<+I1RM)9cbf0KZ;Lng|7KX zr@;J3{xVFmp+q5;{IET3^VN-SBIB?Eh=mkwCR{Z?Hr)oN@wKqI9J@u?Sq(Gc()aGY z4d2(5o`lW~W)GRCKlK+Q{gd}}iiEsxVY0x3PPRILJZwjH=EA|K4PI->E750eLPwXl z_d}ZVE!n%>6gEm5V;R}Iom_IL|Ao->di`TE2njDubzkDEgk+OT`#gEk8*(!Z`ZcpW z_C+ndLV0?51Y~*OjlIHGFb`tJRH3yrLjHDL8^`-1gOR5gm*S|1dv7Uy3wct2JZW<9 z2SoDppS&z&e5G&Q6M|eWI&iI#JEi@#D62B`vALLmtP@#c^q{gc|E1{rktIfl|A_}r zZvcm6pYD}G$dZ69OI)TEvK)r+xnnX*lKt=WRB22)9$_V$tba{@UsF&oKYnNuyTdVu zG2baFCN}Kj9pZRR_q`pcFPN|Ba5M!u>aWG_qTq+gEG+VZvaa}Nl^2{Yu~iK=^tEA3nB5flq&w0Q_k?wL-Y5!+9p zVy-yKCZPW#oMsq)AN1eM&ROq0490eN1m^kD@O=u+x3Uhw7&c-U-ejCXbS*klYy^@YXkOPP-T{hQHVV)2qvheoLZSyFjauYIkBp<_1FzvoKN6X<3S*_r~Ii1eXrO>-{ z>ykInN4uNr>o7CG&&?Lxfz=;86|7qAZ~D)6CK7@rMv1hmm_R_i3U0z%(8x~uuSz@C z@p&eQsfIv@E0J>w$jN=^QVM`zLYtp$7O>oLey-((!sGdJU+VdIdx2qPYAtovUpm74 z@Fa2+q@dq}oupz%bBD5)TTjr3ppwI)A_I)OV8~t3h9v5PPi}zjpjVeGr$T^vxE~Wy zUEBeUd;W2hFz#Xuj=K|UE5=Ufp>iB@7*3vmega|Ke?Bs`4`&ARyV}ZbS!_GSHq&V6 zr50}Yy$}`X>mpzzlPvy47nxy|$uP1+Si2c^bux@B{#mkXG}?u%Y2w5k(goU%t;3-# zWOErZNuABm=$5}FfBE{)qWwA5*L4FGCZi0CGQA%NIH zf|p1hCeQ)YoQ*_}5gZ4I<-G!MIlx*UfgeE48fS0;=|X^53&H0|wi2`fs5$vWg9M8J zVk-&0Lvj_tY5+B>o#;A(^#HLkf@ewYCD;d`=By!lkl-*t%zYFf3t)KV&*mdI7wD6l zeu}d209)$?P_qtDJdd;wAXY{28Isim0fH8SR)AO^K|jd|!Eyj~b_3Cs1gijIae}QR zcM$9XP-m|oI!3S;Aa;u2U6RT;fD=HSJxbb5+5-?PA(%t5jG!Dq&2kZ~BB%z4g$O!H zE+yy!P;)AX_7Ow?VjBs5L2?tp5P+K1Lo`mX10Xg|@G8k;1jhl?oGnC85h$-BIG^C- z0BZ{f3IWut2?m#tE(3_Q6Wm2INU#V%on1^cM6eVfwuT@|avi~X05xl|fVzNfueB(f z{V1`u8!4~}Aa;P@Pb3c#93~hiI0g{QMU2=b0BiFId<6Lf1pu)If<}@p1g!+^1VMn< z3W9HvTuHEsU=6`KfY>O(Z%B?2>?Jrra1bEo!byg)=>Tip1RjE1f;@m&1;NcEs|czA z)SL~_SIzMwwwkk=Fl(QHUW5+ORv4X3lu6VJ1NIbc7q%7(OL;j3L({Q`P@PSYC>1H) zsb0=x3_e*=s!u*2V(`g|@}DvZCx^$Y+0Iq(fGey%YKDiwr(lQTA-)vmZ0~WJO0&r)4KQV~Ox9VCcY#?lAdp ze$C*M72RU;pHK41!ob<;PK-7U?>mJ4w)5Ai{?>{9R?QmyZ#F8|VZt5(Cjd9I2N=m@ zoE~<@V~|?A7a(?u;9Zgmvn@MEeLL z0I`h(zaY7ZV2B`2umd1APVg$pV+6+mV0ek1B2ZpNa6ZAu0oE1}6cUsWlmW!r3GN~p zBv=HX<`feR5iA9Wts#h#Tt~1T04A5{MuJTMu>%BuB6*PDFo2r1f#^8FF@RVuj%SZu z0ubkAZR4nLeNUkP7nl$tswX&$(01F0JNQImLK<#%r-#UeVV{1 z#V50W6f)`;MWTEt>m8FY_+&+?F!@x^;FA^Q%aYGmGx%ghnNj2~PVvc#GLy+KPVvc# zvS`R>?K09KE6QRepM_}f$%?Wvkk2}4@X3m@B9UK_;*%9+^&{Vv;*%9+r6r&B+(?J4 zs8{eq*#SLvx6z)+in>kyvLv6ZsMF*xN%F}`wzH<;HRxURoL%YdYwfCID7MuAu^j}@ zklaNuO0bt;A3#ib1Hb{W)=A(Z@DO+bVr2w#NtP2-5L6Qc0AfoC{+VPKK@UNMU^zf+ z6TvS@4iRi2*g>!hAa;!44U)$RCIB=HIruWG(eTx*mC#Pj8WYfsP&KEDFso1CaX>kK zU}}@qKS~(+PLU{eVtFvW!6z%qHzA*?8+@{&e1G!!Y=ci$l(|MeH8c2RMVZ&+Q*VP$ zR`dYgNZQr^SY(tpS<$^F|6h}QvZA9V|G^}mtWr3jksb1dSwH2wDN);}C5p2m-`b5PXy5N`h4YYEB!`H3aJb zVxt7VAvs2{m*4=wL4cSGI>e>}taTH30Mwj)49+E;2N0_uxS3=XK{Y`GK?^{vhoF~a zA3+2_%?S`)L9h}awuRuoNX7|v0H`_3iH;JC0mLQ<-X?j9K=~tNvUU-50bT0`h!qpe zCRsvI2B2m+iB=F)0mK#)e2rv?U@3r_Q%;xpk^Isa53o;fLI&Bog~`{f&gk(A<@MIA%NIw zf*+7vL$D4&&00is1Hnds*gk^&Bo7cA1W>cq6V(aE0b<_$0673_a|!YQ)U3k{_LI&B zhy@60Nj4C)0H|3$qHP520I}r+gCtiFtOQWAT8XYESOXB-MX;OXD8U$jnzf4PK7s=P zF(*y~k7WX^brHA$)U3S>_L9y8h?NuENV0;U3P8>B5DgGC0K~co9w6C6&;*%9+#Uj5j#V0GuN=ZJeppgz)QC4X3 zS$z#YSy46y^1D)evZ8EA)TWJTEs$#fEX4U>@$Sy37|@@Y>EK3P#3NAlZJe6pf6tmOMse6pg8V1A|D zfAWil-6t#BZt`PEK3UOLlfNv4h4H^7J zDLz@z5`$lu;*%Af_-~ocG2D&x$%<|<_?uFEvZ6f(e`$(ORL^1vC31dSQCVVnS;qlTnVbD=vr3+6sW!B7(1w zTucxm=pyI=h^;61Daj248v#Z#mjX6yKq{Na+d>cri0K4JNRAU615jrV5uG471rYN? zqu5mdYx4;T2#N_x0Ag(fcam%;2m+`%g+vz7$ew6Z~!3YJP42pu+~N322f}3MF@Huz#*1ba(;&qCbRz( zH|ixtqI@jd8xt`2WJRem`K>8FSy8?&`MwmNtSGaJd}fT14p~uVGx^L^gHKkJg+ur2WJOsY$!F~|_+&*{i^(rb@yUwzA@8K! z+jghX-pGn}nf#w6`D8^yCjVPWK3S>u7UwTg&wfg@H_i?`S;3j%p+8~NumvD?nBZlS zI>9)>ae@henD0e^D*@K}3GxXF35o$?tpsp zm*Dp#_YoW*I82}e#60+2#n|}(YrO=y1U>>kK&+bJR+0gN27*?CHh@@!Kqa}HUyQPDgRMUo@~N<)A*=4$AGC>1<*&$3JSPRz=MQ2d5EcIwFtNp zP>!egjLGUdC5-Z?NR*ng{2AZilNIIrkFI{NVQ?jDRP5zW5pRDM( z$$w>mAx~Dao|^r0>%ZMTY5p~UZ#iceP5Y4A_2 zHq$37S^-+-_s{My@{g=&naTfFl22B&*yMjb$tTO6-%Z-=yr*Hf2RyDR_>C_mRKVZQ zt<_O{NEkU1>1wWOy1Q=o~R;6 z?tePNxN>if0_0wCuV?NnSQ^H0!5ctCBlyV#{?ZrkJ2OQ{ zVh_F(?R%J^#~>L9GM}+~!4=%V4A)OKu~v9`<`!V?R|z$1IpYwk8|?Etr(n0s5DQG- z10itS;DmR$wK1H(pWG|a)Ql||u36hoKY?F+({cvCmcv3e&eCKVuek=#%YHnIk99h- zACKdd;P0J$yJxP>_le{%7>8@g`h<#t4^w;QlBwX+)JPVkc;FJU2?s76ZV+2dKqL#u ztb0o0AT!yln07kgOdLWu%3sUkZxpibI#G9jyWq&KCsS2q8Mcuw!%1Iy(Z3`T_*9R( zCwO{i@_8&7E8Sd_C>-1yMx-!h1*A)E>V6K390{R5R zw-MOvk!lID3fD6OarAUaVvnx$ClVb#{f!c*!jo;(%IeMwg1bVie;g2n0&dr1DU5Ad?x z1&;96DJS-+H6gVocv+k$&3yw+rDTCm9asSgoNA{IaL;Y$1tXPRVpHORcJ&UNs@8V& zBCVzXKPRm&=o+bPznF>Mic)FA>2;c`d9XXs+}MF{%4^I2i_seE18hPeZ}1r3VDIzd z4Hn+9fbXD9(_Dj(?0{HZK)aE)Yybz*D|1;bvmg9Anv3@E7($mlg2POetw%2JdCAdp z$Z=v|6-ZCy;Q~lR9=QfE^igeqhjjmx9}b5u`6(hfLKpm$AM}Q1lA027YR~ZGy2!w_ zU`F$e-~HrWC^)NUn91Rc?2!R+1_6kX0UqrM6N-Gx6VL~E6z9oN!U#p;>Z2m`QHE;M zMh5)2EBU}(T5W(Cz!%lN$&ZgaridJ|GH|wgnn-;|MmnQoN{90_PG&l%zGEsGJ;Tfm z9uX~`$irD0Ee{m5^?8S(XnjxxG*u9+j%jIhW5-2lG|tq$Fr6{A!<)va@3_pQ7ekAb zw(X#T{78`DsPaA@d``qqq-U7LQ(`?8l9z(s6NJqgD9ER#q!fGB;@1^@B|f5M;5U#s!5QbsdYFA%laIy*x-6b#tQw zb@O2#(yk2zb626>=Ivv>bsP0o+PlgC>h-N!jh{ct>K+-$N1}+L;Fs404pPw`Ay>m0 zsZ+6mOY3C;;8~K3<2ez4a`>x1~oH~2}%|_6HBOOIfOl5cWPe=(Z4?FyMwzPI*1ys6T zJ5Rf@N_?fr9~BtWzROz7eRNckNB`phGwsIW#905U*skaAtkZJh_$4`PYTwK|_}uQC z`vR^9rXI*_d3nBaV0IfJ*6`*l`@8%XWIs{izaUF-qs2gKKTb>jGq;6fYdr7^jt0=n zVJ(&^^8SCGV(;H^;E!@|=99c_J(OD%e~P<}xgYyC;Uh}uVwT(m0G*d>yI@;R?7wXH z$!CvFH;Iq@N@CE-(CCDa`L9!%p1VH%RjO^tBd|}8> z(z!>mF}R8K=Ky|pC%nUzI|4eFmVu+-0#lr#fYKRmY~)cPsbs#kBfw+YE`bL#Iwl?7#?3* zudVj?AdMz%lYbTN&DwkY2^Hs5c0;T$=%*B8iZ}guyaAf~(?Em-dZ}nI2 zufT=9m{!SsFKKV~pD-kXkO)GeFkK>JtbY%7v@?xjNEGAF`eZ(>fA@Gaq^K>w_XYl?OME5rDk9REI{~CDlz>9BcHx=yPjnEK+_&R0# zfBoVc`&Y|Hnonj#-~RZE@9h5-WLiPB;$AK!`40Q#tAMu@73hY|dEjyHGyG3HA7%#U z`R&o_8?OLd$=9V0>ZFX%Rvj?7f#^~NLb4WPHFsz~nF z6}2AiAH;$KDCR`ev_jI9t>5Fl|Bq?$9;NMo$olB=|!B z+JkHt7(s~6S%J|oZ3%mzW{eF*!S2^tv>QMm*8V)dOaP^7$&*?$;}J9bx}#HUd`|Xv zKBFL-v-{ZH8Ks%5ELm&tGm;o#l=}ypoOMZk99oT6Yw~p7ug&#ffKZF-Ab#s0AG_GJ z$}*g&tkslcjNxeI@{DKea0V^<9udTfSX(tXOb1VVCnMFgbk6AY+;!T;b-3fS7U_(j zvyO<|(BMzN@HZ#+9BtJqOK=!+MauEO0nX)kVp)^^3vpDnsPv-xDrZ}Ld%E-SGc>#K z%--&bIC3TX!KXm<%&o*oTj}&gMK_FLtLTQ|Y~SZI!m|6m1;ME3R1q#ZRfOOBjbvPB zQR1klC|;5|A4%ajB=m9k#kraiyb5&ZI~d+Wkk1u(lYWqgiL-u)mZ&|*w}RbRIc%2L z|8av{xWKl*pTo)mG18RdCHcL@k6Y~DThwd&!%uOX4QqoR$5g^kc_hJcg_eOt8evR$ z*M1Fz28~tV=d1#a(juT*!mqo8r(|=4>=7g6Z8w`AV_?&ymWZywB59xr69L}f0d(-S z`fC`hqMGCd51gn}>hu}6agdqIkxxMXTpfs=4otE1zV}zOmF{@&dpho2mx{xx3?M#&9Uz-hh}6<@U1Fy9*5_|QnS zo8cx%2L8y+5WY-0UpPGjtTgF-QH=&poyI3e8=wo8E>8~XBbXLVc$j)Rr`q~~1?G#8 znq|HS6wVwkdUa&#-k;1@iW1HGoUg!T8)2b^6H~fgM@LTQUAz1^z9<-(+Kwp+o<)Cm zgZe06P<@oIqdrRI)kmqS`Y08{Z^fv0SF4Y*PO6WxSc($xKbui=Ji+6l=4?W4V{9R8 zP2xG63p_yK&RjgaH^C7_*Rw(A_vYhwPGpEC!WWi4bI0wW3xXbm;5!HYrWj@u5s}4< zNJXQVfSWl_6fj7`4>XE%l*cVS#K-iREe;+vIZvgZ5+tf78G2oo5};DYM<4n;4_$5%8Ns3PZcY9Ls! zA0NW738H1BhA`|ul%8%M$9+vznyd4wj`KO%2%!2l6>~5Mr$cKh?C<~ZuB9w$_D&Wl!&%CF{bC>v8jQd828B>q8yTH z36HneV@{*JnP~}^Iy{k`-S;cR3r~2m`?dl(Z7w0Z?`L3lbamjDzl$DsVp6FK^hl-n zpm=0p6ht|$WIUApW^)?C-TN@ZDR6X#fxGYnWE}qDW1Y&yYULtS_Q3_M^&*GfXW21IFN(*8fs)<2e2z}@#S*)QYeNFsi}$|!b@oing1D0#gnM6 z$imC|U+BCrn2$QE@5bIgRHAzQ(=d8y4z61Ep2Asx^PbyI4KPZ;O&D(cbW(j{&q6qx z?U*#=ms7Ant*97|!KQXuzU>?_hNc$9<$?DhjD%bq39-9Q4uq2S>_$Y@zS)BiQBRWd zkjeIea&JO|#K*}}Ct>b7#8*{@V!R<65nH>_%Zk+^M$~2u;q(|mc$PJ>R1m9t=NzN5 z6`20ynUlJ=0mJlKA=#AJvp{ABl;)2!babJjvd%sIpHBIUb*Nb-l|EUhop&s&x$^2= zs5>Y2qg@UzXsAbxyb>=V%b8Omm+i)^pjxw3^I$Z2Q*L5xaNr;Wigv42PPNLVR=Ksy z!aG}_9 zEXy;r2CXI+zw3slsZER2n#H1ub)biBX<{X#olp9c`Ru4tZez3b8>Pc&a~Cnl`J*V0 z>N7ZvKH)T?Z1CMCUf+Qt&4)Q^rFZC~ArjR<*o|aS9{mD-*aQA1ezOX7naxsEA>I@C z(Ng}N2&Y^;buhmCac=}Oe$r$uqNQSG)M^EK zZ!1STi!jQuI#r_oZac02ZbOqw?=|7swxn}f@St=~14<&D^MBL(j*iwh7rl_|Y6si> zsIwBIB~rr`&|T=KQ>`zxxq zH(c4~&??(XD_gT4dGsUN1mcKI5A$)U;mN#5Y@})d$hW0G!fzFA>4zX z2HZ1J*~S_LYv4-u$9M}Te!KBTr*@M&F_z>ets8$2PUaP+Fh?pI7<;4=g9+Z+cne*K z*T{aXro9#hPQUvx;i2I9Xp{GAociKK6thFCEtVav%p2;3%=EHNc+oi8vma{;O6y#J z7&V}4f-EegTc=-ybU}z0a~W^NW8Tpov>U4-f3KJ3u8@Y2lae%eE@7(qV{rU^Aof_y)`$&Da4kh4ntu zlc*4CWot&9bCenJL2o}Zs7|eH*F)vP55gJLg9~sXf?65S=U*Y*ohBEm)fB!4j31Vm zD)aDjGlSi^>U_64-=og=s`G*8sq=kWM&n?Or*>qTAE}O1a-0IE(Wl;>FRd_&kMYaY z%5t@`V({)VoJIFV6+dcFiC+RLA9M?C@KZ=%9Jv{8-xo(JKRt!;vmU}K{9a8>h309L zla)wlzEhp=l3HN470y_iF0y>0<=|_VsZ9l1P8CJ)Ym!+NMDEU~oi9{tiU;rZHkvx; z_c*Z7R021z3SUbnp5>6E#>u)`!TM>8K#YpQ;fT>JaN>+Hv_4}+@rsJ_>IP9!3Pehl ziXzM|E6P`pb)p(`4CG*yL50Ckj}xw8{KlU!3;}8H+yVW?xuW2(euzp8({&Lma+R>0 zqE2&G1M7>(*7QIRT}kTp0axhh^nj zwn^Dv^^WuWkJP9n9~6#g(e{fa%)$TU0w&sl{^HL?dkjCtB}*mrDJ@Kdy7`;LFBL)k z{`dnQPVw{jZj(rbpUN+0y{qtZ(oe}AxDdVe;D2)YQ*>BR08_TP;ZI{cy$3|F2U6&p z8fX@pp#~Zr9@~yGkhIpO~;*){FAo%KnT*pJB@T16hI?k3$_)44Ukz&FzfCG;!MT}t94j}$AIbDSFaz3f_@x}p3Qv5Y+ePvVATibIJ&+Yd`<81B`n-EH*^Bz0 zOngI8W{s8pYH*{{gBSa^c!2{a19+|ip_KkMd-YZV0qNmmn!MqNI?3 zq)6XcwEJl0W=bxr@Mq81+WTHUauVrMNlJ^SLt3PtCVd{%&7H9ovO;$heJ^|yCWTH5 zs~x3b)(K>L9*aKv!32)k$Dpzp*^kLyY!~=tG0Hvt`~~(m0i7#R*ouJlee7=$y8#|y zQrZ9)*hN3P@)1@oVdKNw(790BW17d}LK&_F!r!b8aEX6#m{HXM7jO*21r!VY17e|nKrHkRh=u+EvCu!jh5o@Gime41 zs?ZMu^1iQfXj~u6gEbA}hau6N<>3pMBq|a;2U-()_vT>NJ~>bpL)wC1yGe?jAjr%a z%ssC7h-t_?c7m7D0&`kU2_AgDT*0bw;@Odbaugh!&d2~~#Y+WN1*}Y9)xhQoECB4& z0&4(vgTPvVl?$vD*o^{f19p?Z+JVgz7=Np&LST!4p(^8PT=u0;F)|PW#=~Dm29^Rt z{Rh?s>=}Wf^H4r6us&cj1;%p?VTmBO99V|HxZdCt*h*lT0$T-)wQgi!H839dF*2|Q z7;+ZaI$+ZUwjS6Ffo%Zh7T88$ICThen}D4supwZ31hxg(a{`M48xhzJV80XCE?~O_ zHVW)nfsFzCkihl=D-_s1VAl%l05G4x4g$MCV26QSDKH(_hXpnc3@sU29RtSg6(eHq z49yzY1b9~o>=dw%3XB3zEJQu>ZA1?8Q}7< zS71J17YWP{>=OdxDmKg+oRfpr15ra;Tqm4pvQ3 zKkHKQqn3kTcWa5kR##ZPg1B#&ozSAf&x)=5U(9`f zU{uAm|8BA&3nc8K8x0z4)YZ}^Y9wfb0Sk(VE!9mz5-bSVQoBu25qAMA;>JxNo67=i z5wt}m3GJir*_K)#B-Ua=FhNC)U=>9Xt!*y`ZTtlRl>L4_XYSqH-4JT)`{Ntfxp(HC zIdkUBncrv5G!QhjIM+^-OTndo@^j6r`~eUrofq%IHE(;|WDmIfi}4*QX<P-_%*CM`{griimHwlu2c{E^%O;Wha7mtP4tk0rpkWfz&+MZD*EGJOWieDp!HUJn zDcOFXNr^4!QdHQf-PgEXKfY02@$7K{7go66V9jq6@!}_+j-wy@vq~OQGJL# zR^K>$K70uV!)v_kpyoEQpv7=y4vkjg=Y^@t)%c`c){F5g)+Vv@Ubo&G0-XN98iddD zdW*Y*XDTyjlf3z~wp1W?qPIPQ{(nElW;xmkJ%266+Dl-3$-fv*g?{J}#2tiDHtcM1 zy(F$bnzudh6>U%pLG`bq=&@*OJ}syQ22^a`nZ{-rjYcVqr!F|O6~iL zE>@K4pZ;8th#-T+sos1pT`3aJCW#<0{JCA*zvz;x6lPCvH6kI@jK$>?#LAV7{q12D zOFKKd)Tx(3I-x-{vJ3o)r+ZJobWyp;8ik?B#Bf4C9nqPPnfTTH6QAnMA;~JL--ufK zJ`#_om)S2pPDSJSEHu+g_koQ)C^xXN_WhvArWbx@vdJvTgfu^SNM%^cP70$!&wH3i zGODIx9)!thseTsHkeY;05I5Dk1j*;K=R!kLfcK(06dJ9M2C|E{`xkw z$J4w^O7-nty2NnZHl8EWXGNd|Ond0tcnnFu0p9Qqr`6<# zxn7(by2oiRs|>ngS-a3+6;H<1f*U|^T)7#U*CuCcBS|5rNY(9}!4}4vH=w!CYey51 z!C4dZq;m1u**(PQ-|$}V$VTnVDM}4^u;*0jL7BQyB%zV5SOAnz-oVq5Smu4Q>p zi1HE43*jaq;2VW$4z?rPxhaS^OCH6XD?@WeGMV!1B!hV2@g&ez5pY%6RS$6%RD2=D zvuF)(*RJO0;T-v^w!KYH{lk#M2es=n>i2xTOKU%ZJD_0KEwt@BtV*yq#A>PtGXZ9X{@WZBwyj3MBLUkfd3V+|h?*kOj$tJ|yWDBzN{9 zaaxcB`j8B^APE8q^u^1xy#`C#-b>N8AK9DQn%bJTJ#{Y#tf+hBF!H_V#+dh^_3ur9 z;1&E02PNrrkJhq^a9E&)PWJ^`mIG%lTj+FWYgxTGK-5B~dnkkx8uu-9u($zXRpLGz zlUw>KGcdGZ2l?C)s33;l?hUtrc|W0T${RAYcCd}*Viw5V?24}y?t#~F?k!=LTq#8W zUdM~z9)*QP0A9z7U@4HG24F9G*TD(4*YNv0ejnp!LmpLqDB zR#y#2l21S`ZF$>WH5{h$$-!}0Pj%HcU}A=?km!_OhL7gDmj4W1*OthEo(Z;?H@Y4V zeRXdvHo6r{30OnG%Cvsqc!Iwui*1st7P=i~ql5Dc*jw>C(RS&N)k$k?L10GsYC;4o z<@?=?Ky4iez9m9*`Wo$se)O}1WE)nX2n)AsSv>sFL=VcwDMvw2KsPw#;79y`jhqz0 zDixnxzyM>b7HTi*k7N8|NvXk$aU+rD;@L!xAf=BD7N1<}QhtSH5wP5rgvEnV7qM{P zqKO{CBD)yCBKsP^qWlWWUBEIb5lgsrnVyBwj)lC?_-PPTThOgf#cG-5gPtEs@Ec7v z%3)Nj%K}H~6v4%cLl_bPnSvqVk&wbFrvyOu^saEK6*nZ;fTp}&#`Svr^JNJj>acS2 zT#R4ST4-KTKlE@c)?(w^W2Yrh1})?ej53mod?rv=l*L0vuG(R#lq4ByA_rJZvgCm4 zFHfT8S%S>EiQ-QH4fm$IYRVwz$vDz2Nyh;IF~ zPm{vg*}7`~ii8`ahpyv+s@i8?UN=I6}tLWpN1~;0PIx z*YHr*MLd)>)8BW5?0B_wFaDiKM4jNW5N|nFw&zrE;iL9odSR=+AF2T-$E2<1`c3h( zK}XHLfU~%+20RX4SihY86UMg7&L=ar?8R&mHT+B{s#&PeHg9I!7tFYv_nUFY4R(e9 z0UV6m&ba#$8!4nX3MqQ)m$NHiN-YA-=2U+wF&(Tf*Zz`F`&=~`XWCSpaSm6w)`-(; z*R{krP?Y&FU*3>ze%8F8-z83FqjCB6vTC`*Cw+)% zoz#N1;uUIsI56Hx#QVdOQsW;u)>Ovw|A*B4Xkff^i1$Z=H!Qh~DJFt{*OPx!J8vXEVk6=Q~!cO`$QGfDIx?A!MGpD8V{v(k`kUba4tg3#k_x? zJ0b(O4vcpN@!pzTR#L*Z4IFDVW8Ib-OYWlGglzV?DrF^OIvqT6YW_ zYdvG#ksM3XS}<^|4UDxQIhLe#=fJTxGS;2Ru_Ud)z_B(lRv^%EhzfipR13CWC(yXct3pNuZpum6{HA*Rp& znL$^HzAHPKE-Bl)2d0a+xm4Y)SSnLXGK{m!{|km?{L*AtVL!rzVM_)kOc)0JR`gvB zoZymSeEwfBEXSa$ME~WPCuP_@1Jfl8yT@RdG1-<$_x}aM^5YCk=|`9_Z0W#+3B#5O zVgF&%f(hCH;_Dv=!m937xi&{AmuMnfp@CyfMJzwR|2tHjq5+u>e5YtYE>Q!m`vxXx z4hiD-ljele%K=7c0Y>EaO&T=E z#&g%FgzHsUXuIBlofj;v`Lye&mf~#2_kM&`QCWUKos;E<-Dk7R4C%cnp1uFL>CmT@j-E*1hol@lw7%mI}a zZ&kU%+ifHaUomQlf1MxydPn@Ltnx|RJL6vi@vmII>sZD)S&CYG>uVv+87|gJxWpz& z{Un~$-3Bse6_(8mLhiv=OuvxWQu*re&(|l|sz$R2vmWR2+zKx@fU(Mr)$QL8=jt}6 zG0;df*N8@#4o?zRh2Z`7zF;r%5`oES{z_)H(gH@q6z)>_x@0 zb~5=J9Nd$DY-T+QubO5nlGnQ9B%3)x7d=;Whc?^wMe)y;IU!X-wUk;cJs)+|G$E~U zuhUh#1~1W7l&7)Z0+Xb=VFO|gG(p3?X^U=%d28Q|O|YrEF(ReV4y#mlyYJ!qx0Q|I zJNW+1ZDN1+2YfHwHXU6k4rSr}t7@s~JA6MIHfHbv#~+7tnZC#gSH++pwTaD)AI0Whi-;^czh^yyxKt)9XZls zj73-S1t4p4pl<-3LtK0)Nf5>JaT=>wGzLs>7!9d>}>U;;h(|>$8-(Y12 zS&98fVO)eYi((pGMV3Wym!s(?w_rKQ@I%j0@d@ip3@Tt0a;R>yJMJfM>LyE5fbZHx z51{7PO+HOq)r=2S6S#Ya*6%M+>(9{N$K;}Fg0?3DE%@aHU<=eE{-VE%&V%~El~B9`15kBl(*6}p ze?rwBzRQvVI0)`FK{1m}Go0N-KapP4`@ zzY>bKfdJ~|M5H$+P)ZoW@3VCAuKPeF=3UQ`kzq5_K7NC2+Ip^0K3G(t?df7kF$gUw;na=p0br{Yb20}ALs(w@lZ-T(1B4+guMYz3%L?yg zHT>l8)Iuy_2+J#o`r)l6Y#(O{Ls(v81lV_pcSO}<|A&fIeH^<;8BMczynihuJL`0FS=z7B=3_gHGUzuA=fVhGu2h(z}XBV6t}LUJ}_D=8GA? z`H=Ga{5gVZ6H!eCDs?Ur2ut+Lzol^GW^TzxSIxvYq`1vhy9xbfJb?miuu1}aiFLK` zp+APD>^H>D6V8-Hw{n2!IMZjQl2M}n*SiU+kR4k&;DJ5SfVUtxsi6m! zM9~()4foia=#%6a!2IyZ{22Z-IEihmn~KwO(3sL*IQSlLMYmGpaG8OSu+61c=jpI~GFG4e@_hQA-i$;9}`RAOuo zPH6BPAboDQ#73WBV*s)7No>lWkl%w;1&^-cz=j1CgAWZ7W$7v$uTtUz3@m#UVoC)| zjUhfMzdpX=B(=#|gD=Ema!TckA!be$Z45D~RjC`Ii-B#z0D=bw4Qfn@)Yegkl_VqE z0->nGvasUkItro^M-w73m4phi@cSGMsVw6lvGZh-UkVt065;*y#{&!R*94g%b689^ zm}3^g7>uC`P&Htt3Il8mts6v`uqY!e+l|jf_*_~fOD&j9j3FrDgq463MiOpZ0$dT` z1fMV%aKc`!L_@~}Xn1Y*IPG-pIU`l-Px$nyZ>L~cBEG4+tE7P!_-Jn2sEUf%Zv@7R zs#*vUAA#}4s>Bf(Zw4}(RTmZ+&OxUt?W9EJSC;6>N@E*8>IZLTVesA|Ed>l$-RTJb z_fh0kXQS!u!$lb464n*CF*6Jk=C#<464} zA(PiB^(S*o0-1y%E`c@3G{X#;GXze-2$?1T?{Ttn)0aRdzY=w#^vmXh14rB(=AqSi zL%WSJ;_d9xIb=1jkYXM(5?KA6ggg+22?^{~ll-5sG={X8!HMZBFv*4q!0W4!4IhQd zrH1uCO2`QTm_TA%4Sj5WP|dZ2iw&i)b=o4pyBl~{7Ul|TEJzn8ASFQm3YNuSvsz%U z87oLv6_vCIFeu>7Tp)FQA67Muuu3suNUdt!%vKxJ@4CQQ5hM^h~?L_(fyO2_K2V3dxanY6Rxe@!?cx+`h%4wL5O0pv5^B<7d zY{B&tH?f}=1uKkdu=56k)uY76eWS;S3(Id(6b6_x)d+A@uPkzGb6Wl^=}X^ zF)Nec;@w-s#ixb_0SmD$W>_MA1tT>{0rZjgZ4ShFyBBDdCQ(o`fT*PmK&F`P0-0p` zHh$FWXOc`_7uKK5DG6i}MzTy;gG@6l5x>GGWGVpD9Hht_*D%$n_8=rqMzwL#qYxFh zRk~`IQ5e;#i?3na1`OCRwB-{;tGvjJc(w6j&8-Kwe2-js0W1tH%I#d{R+=Jvpn=vorPR>YC)6Nuc6uA~cm1nR}u z*aYG`fn-IPnD{~| zpedGO;X8r2fGR+IA<$lEB$&zZof||+=8SeV@LnnOp;OpACO5C#`e-3Qym?&>Ph#`R zd!Wz)%{*E2D)9+GYIuLTWc@@U5P*QZ>-A65`cibw+?`FOh8#Ow(^kx1mwkc0GyuyXvIhXuqR{%@V^QIF>Qx& zNW|^SI0J~3x9{P@>V!D5tknlg7{ZEFUNxpALHOV|WlSUj{)B>uKcRf#SH)%ft|9Y zbC&8a0IGspb{k;NNS${I42NMjwY~fGXJw~jmOAf5opoL?5=bp%aXSd0idapTxTs5B{w4!7APJr3 zAhPOZ1nUo;7YDKFO8|luc>fr z@DR4!$c{3}!a~3_9QY*{-`;@Br6~GjNWlOW51%Xz!;b@Ova-STw+zfiGJM>~KA2BT z8!;>(4nBPi8{l#f$R|1=<#iZd9)ydpkXZ0==+=){;a+g+S$r8g%kASeCacIVeSR)7 z{YOT))&W&MF{UOO5__ThAQ}?T-qw2JIuc#j$n#Y|ug{~jA^f?vUFZ#=3xURM8-&9D z8#*I_5eRaj9RZz(QFvgAnSl+eaeVDdis}ys#{gIr>DcR`sc-?QQKL>FItzZES-h=Z z0lldR!8Us!Z#>e%VUmyecHAeZ~p3UV#587s&i!fvubsd3p3Y}T}PXGkT1F&fZGIS=H*30{{h z2b|4{2y|yBm8?0>l|t3lQ5;d!(N%oGDj3cuQFR6^ohFJQ&}^FZ0d5PDGYPwPL9-)t z?nGO2D`;wdUxQE2;5%&{uKcl<49LR3Q?@s*g!tWdSjmPh5 z{I0|A2K;8=_e1<{#SiDf*EU$rgX1Kt<+OqqzNGWu9Mr1w;Fu*XQqk_JQwifLv=?EaO;1}jKxrC zit3$pLumd7=OvyAegvBZMZA&dTG)TELl^&W!xU`XM$%P!XEHr6_CJ{*ngmI(tJ{O# z)o8LM#jd^-+jO@z(JPUtwzJ-i1Z#E&k1(~oHdtUsiZ@7#&jb%^JKGMX#BV@?Mp97; z=*;nxkWxKkCS)hz&Btn2?cqgVmjlu{`sL*knv0l z;?@bRF$iITxMfq^6o22pslT{+XY~`eY6DAxxMfq^6q;WXO@DEF{U!rblDLiTk1nCq zD~Zl3Zf#}##qIqPm9v3pIt@tri`!PjN)k7VobR96U)-`q-2Qm*3y50}x9T8ne2Tbj z;$9a5_#8;w{^C^Pw)#J5-Xujxm!v52CP^Yhk{npxW+T-v*SuX+c`|vc^qo@P?wQeF z-X5RPPu_+bSOzNF%ZaAHyj7W)lH_gs4gEwVLEirH-6VM{p=>2JZ};>^LXG)&9cToS z{_=J$Vht>Bw=vW--RVDIJ?j+hTjq`ZX(o=NfFW|DT=&Fk_eF`2bQ;ck?NOg->7fhfB3fO+ozPb zhbsEZ8&)=xI?zob0B%EwSNhDlN2FclA_3) zB#977a$tFLA=NJ@Z*QvpC8>Q&zwVUscG0x{@-~+v>cr_n+mwC+l2EpPFFUEcon>N5 zlD7r@(Iv>+I-;}6o1LB1zDw~ycY0`lg; z<_+67K1JSE8}kP~2a>m}*a?}P{zv0CNfFW|DT=&Fk_eF`2bQ--PMr9X@^-80Uy|f) z-Q-is+n-DN%iAX$QYXq=iGjt^ASIOTLZa#4zWuj}DM{W^`lCybx33bNRo;FIDM^;M zKVNg|I`EF~Wb(Egu?BA6eup^8@-|iEE&S#ekhcv+_sOToTbD6k;Bz2(`_*S(Lf#}r zNSCB2@+L_lM3Nj>-Y!9^U#@-oT=g$W^7hq9rb|zvCEN@pb;iUF$n#kMf z`@Vp@c|_L%t&J!*VD+sPig|4C_#8;yE<5%mu0h1GR5!iKf52J|kBFu>}Bze2`o2QhwTffy`-ZpYbo!GwF4J-r6 z+l55aU*5iJVoH*?$FA%rDhcxT>UBx-Hj%QG)V|%?A4x*{_A?;qFK^#Ktbyfi786ct z-{y+E6~6KXByT^w;*|0hy{5ms?ck6) zv3)z&z%r1$O(vTD^7a!GQ&Ri3du%^ZNszZA*wsvsx0@+jN$p#-KavD_dkjeW%UdO4 z4J>a|>->yH&-D;ztC`fu<80}ry1n`qA1i+x(0mfiMZDhxi1 zfu|k!XBC*c^)=l#L|kre*~+=BP6y-A;Ibo4J)MKplgFMJ?zXF^XRvx^$GpiE5V>W?2C`Xh*4+jblBooFdb`aH8YN#kX%Ef=6&Pp%^H|ee-S(*^5r(<(4^pxnp zXgh;L3p*}|#lZQt?jf$NFSY&MJ@g~3Lt7^iRxx+_D;cm8`Ep+t7G8oZ#5HW>Y*`rg z&!L#2y{PTgzlyBW>cXfp23by<@7h%&hHi~Q#5sJHrr3*5Qdcqc7)e9? zjd6Cqcd_UnLC<0HTSzt?O_v;##+6i1;D;`CXqyxw>?cfyr3YWfGApyrz`i<^R$hR* zzvwwNOnnEfAN1$FNTHvCC+%6Z5F)PN>4PUx!LyDCOtpArEh2uPTH+Iciat~$;jX?? zCsFDn+xSsG6IsIXDnVp9(L)UQznzR4Os3rmSUICANC^{%y=tz1F>^m2 zX9|)(g!qAn4U#|9C4VS*SNOPw;UlVMR^2LEO%^^9fN9QCfE)S%?*)MtKmrhOlLFi< zfJ$3RV}7VDWdSD`!QWNjT?9AIa$m-rTg#F#rktD2N`+G5`}AwESYd0+%bTEll1TxN zWKt5*JcCz}Ocp~VlRR$m{`a-E&NTAz<=)hSRv0&TI6(LFWJ+oz5XRjUKGCHDKzXs(d z_qEQ0sg-M>X_m^C*j3XBp`vaR3=P8sza26YUByGtW4{CSx{vVDJY=Gui=LK8A8AWm zskw~}0_Fw6ps}CHwjRxO&7X~cIno~}wM#1c6<>B>+ANzZ{1D#txl3^`mR;)zp7o>F z^$6$)O?Vd@-&$xA9(u)H(7ejFez6;0o?MK`Kl}+CT=kCoI#!^2iW9YbJv!B~*SLd& z%e1%ji9kCex@s@OzT*z2qlX}^(RI`q9b3+jBl=8cc)5=uh?k}>f#1Z(I#PXz)S1ev zHQoo{)3if?!p&>6R8m>xhJ}(0*b#X}3(rMb{ty$v9d|Gy^2$?e+A!*IwjhRFEFbu) z_Vf8nR1+5i5j4m+Hv!!&+?V(~GOj(Rv!%xnX#?WSo`n(7qa7R(k&*;u+yUrQT`UVx z^k4a6=)VRkRUzDYgSLu!DAPtV50V8MS=pm4w`ReMEbL)cqN_-3DXtc$F&3eh7k1ps za(EVb=2iD`Vq;HRh}D*vbgWc#Kut4nMsXTN;m%=NmtK4~$b8}8BqMLya;BvD#;GJ> zfJ&76agPy#^%EBw_e(^#a{Q!!06#j&_~|K@7f-D9mDf)As6ohU*cBzyqraDz=fRW2 z#1hl`SyEc}!QVi#kznCI2>P%otze(Hm-#GD;X(N$9pFDNp$iV2%BaN3N7)TZf_aYgnQ!CTJrG#_w#A& zug}D?Ys)0>X;@D7_^79s>n{LQslFFXN8ya}L4j`?Kg{FJ##5+o)(bNI(*aeYKL#kR z9QvV9I2#qM@$SVZp9W5-jN!_Qe^SV*JLnegb=`L>p7iVEhPx?h->1KJm&1>8R4~3r|^!y8vfMkVwpv@FN48Ne=`E8Su3; z1EiXx?dn4tkys!78{mWDc;FtR;sn9f95OkBBo8H%-9EgXhU$qII`{ox%sss#qj2Ef3U99d36KyBl8 zQcD_DOMvmM?xcC3J|kzA+OTU^!#Lj6g7NHJq||Rb%S&fk2oWF8P9XSYG!0~oYH=5p zT>qj*wEpKwHA`C#h02&pkeFA)2rS1`Ob(No_?BMR9B0NhLkx6=xz%n`~EUO)+hX0R&(W;e^c59R^D zG|-`Oy@r<+*1e2jl*G3bp@$IU7p#OaL47#5qP!vzKI2xQ-3?NtKI2j$)#|HDg$AE% zRAF_g(6L-=n;$+j3ODg?L`t_JReuP*g4n;xMbHyPa4@Q+jlPbwAHcPDrup%hiwx=8 zbI_ho=Qs&#U3|uNUw~OK%+jA=2avJYky!VT>P)`#vPJoZ$R22GEYoFj+({hAnh3GCvZSjJ`4apGY-yk?fQ%V0(^cPoM)r; z4gUhXE)LGad-@&!0(^ZOoU;f0s(%5#ISx)4(oY9CmPAG+4S?ci8~dA*#Chjok;`ay z5sf47ET>6Fw#2l5>8d#&@&Y@I6|P!VKpJ8E=_lYbkNrM@XVM)X_an$SdEaBX!+^HouY4M5=Sh3_yS~!3!*Uvb$ExaA1g}zu9FNpgEk;*k6=VA!%s;!6La@B|X z99h{=hfpn7d-RU9g!3woa$MzcI!pi==dpjvo&<-W&TMFXLv%r4aE5QDt$^ybc?4(+ zj%?s1Uy%PYK=3uTTV4D0_hA^*DQtTE2%BxQ-CT)k{v?FDv-Sm8vh)3Ximh-*q{iEW zAf8!A7vzM2A=o5f=AK4o%F0nkJR+e!{jxu!mwPxDHIyT$_iOjLmfZ`O>JBf05HF(= zwmng0+*()s);)}hv-7t1Kd+#DWSm%tUL7meKi(MdBBAVXYpi~XU5%~|-=byifC$xR zb-=wP;;i$f@cLyN(|_7t+`V886yrRzNnmvcEjsx0N6;kTpwv}Z9(Girf^%8uCXQ{H zX^s`Ve`4=TpDBjn@c|U4%~iw22F{~$=->ogO7JV8@oT|#Temwj{(gB$4~<{L7gr6% zsbRHVVXLUb<)DSJ+GiGCv~A6M5Y>(+Y&bGjZy6>E9FB)XeX;5el3#pm!CuI5M%#hG zX={*r{g65*&XcHof23s+Z`<30tK0ZdYm3ge$4`Ldb%c9iAa>!f%@@~Ayt!`T_v$8o zzpiAi$fTZ&gw1j`*9Qt)$EFeA!n0b|;IX>HZbLfNZ9<29S#YRA3V2&KzUwnlO~JkR z7(}X3xS4{FylO|AccL@`Y0bRQ#uwen8mEs!95HW5wu^;B+$%ck;7>8E+0`)jAIJmm z50#2h<-z!X##i?uzMnOzg#hSWHVB+wN4No0ZUN#~0KK7rdg4H8F|7|70RYFW7`?Rr zJcx$>FCZTyo-}`NJYB*7RK^0CIgF4nY--3wP;Kj<5ZhKaatb`1X;b0m=H}W0>1Y~w zy3J1?Onvj9+xQ%`6-|uQKx`Ow4=qFY0K@OfTQ~ALLE?jpQMoNJNPULEKZIc1lKU%U z{R|=1e>IW?wfP8ATp~>0&}BM&@uAC1cxqegM%LijnN|mPAR3zp+Q7&b>Xf%`WUWMB z0oO`h!xVHp>|yz&HDM11?F42~J}dotNl+na*B12k5*Dr!fO*H)g_Va?|n9 zA)}=P8d+YAvjH8Ibd?U77MB5ny3mx9#t_;0QSk*M*F ztpAN{4YZEVH0CJdcU)=9M$AYi%f_rQ4P0EjEJ`?o8rH|d518Q$Lb;p$Z<{s*_h!|+i_)g?zS>vtqLreOM>k6s z{7Uc}q4D}OED^yFu|8r=ip}sgPl7-P)0(H@;qw>agqq%s5ff)}=&sOqMdkLc;+K@M zWSH%k)p!ti%#UKY=cQnlVbi02ubu#WHHFIv=e-A3DOI&C1^|Y0e{@vFbm%YKS^UFUb-BaDD|Bu)s}BfFl6lHY&J~ z1YP0l#0;B>>=Zc)-o=-$*z!A7Z7+k`=-LbUGgXgpBxq4{5UG zg%C1RS);HfwZN$E{ON|DezwYzJ((cU187@Nt)` z_J89sTix9|!oBAPuQBc~8*biTmfnn$&$jL}tK6|Y7uZ5J8!x=PfcK-PF;iM5lgit9 zekRk6h_Aag+S3XtZJ|=|1Ret|%`rKXOnz*7nb@q#lcU?#+8P z9CLBO%(Y5K7Ri_Bl&U%1DENxL*xb>Ot)5EQgz(l=kImhh6 z#n#_wUA#+1<;1lmZ8b8Yb+`S^f%~prgpq-cv~tV|?29~Fm!H=%;zaZ^WFI3cclTiR z5n_F(Y_w>*arxZ2)v4Bf8n40qVOzj8qjQX0A)WMc1hSn*rIGzL4v9YecQ!yULC zfeef~zFwcjgi|~9!EW5ZF1P8f!ZI^x%rVLjg8;F?JP$WfzwZC)8LSzGofK(TCZSYhBIJ~t5bkt1!k^M$Y4{)iNi zepV9FIToZwpXS$=aSm3lY_AJi4^5y0rCWbC2aH@h2j8pQ+KVOH-t!-3anqXm@A0W# z%v;s()Y|pjOtM_(Ue8Tdc75<$Gwac1(ouE=&(?pQR1VMd0j-=0{OD@afovv_S#dSS z!8lPvpNa~RGYbpRxbR|G-?!NJW>2&|h+h|e>2oI9it)Q0zb5?Rl?5-&8N1rv)w8CWRtoF67Def~$$)0OBRlnkb$x#1ld+Ro@kFXGwaGq>oI zUJo$+i{tySTaanQRQF-mho!b^k}6iMU0b?RpGWIvcm z|8WrJ)9*$m1md#26XaQa?tNYNURzZRws$y?v_;j}_jX#9Q8nH&9e~Snz3kEciZk z65r0s620}mE%=Z)@ZD*}_cHONS@2CRJls9lC=D$psGmSxLzfn(cAa4Fsw~yNmxR5m zQqQttKS1pN^~X3D0>uWkPe5+1C?^R@GQed)381AwxqXX;0Xk7mv!J{N1Un6aS1WoQ ziOBx}T`t9q$9~ht4U{vH|3D#E(+k`O@*3+Q))8=t%2z&%#W?A({55>W6)!hRnM?3~ zs+9RPV3Kk7Cm_wwp1Orl7+tE#z3m}HNu1m}5LDaRk(Q4q7L^O|7--ULOzat>fta|R zR%KT+d*$y)yGWrKgNIC>69B3{LwBDm3yFmH`({E^M2xoqK| zsVF6MU`eiJ8$>cg7{X3duyqDf{~K{wnW+gZVQ|xjWhSD8xMCYW>(>mD^$;#F zL^3I?Pbk$L7D^pLoW=um-lq3mIy#*mI-kI4 z%mI~+BjGgV((%HHhyXRQw3`axG)|{;BfT@}%%Q^qZJGzCaSfgO>3x9CdO92FY=YC+ zMdu}YU#7Dc4%TS+dVtQma2hkf?8ZzuO>R0KIFU@2Y*P;Xxo{e%(7BG@sdRjBI@4I9 zRIF*5&ajzq8f)m((pyJo1-+aI$P|t$IV{;unbonXCl@gGvnu_oAsPNzl;*cM?7~0) z1_V8^84mWdxPH`;_7}KldiLTm7XqYzgu}Zh*^}b(G=>`gdQYkufDMF}J*mg>V(dwM z?f8k9|4EXxfr85WQTj;QrAXrJy(8@cEH8khQFsVRvq92R{G|ViINl%*F*zyLu;bb4 zQ8*~19cj111&;Z62#&LfLuCGD;Fz7f0~8w1DV*I^BWp-v8X1Z?yq~=zO}?{DD0!h0y;bB02@NV zEVI!g)7cB!jEx_2qXz-xB_JdrrL2VRg$XIPsZB1EYe+=wtL3l}mW{0?C%e1e!l?ps zY6LlTp=B%U8dx$wmS?qF*mkKIX6c?`kL>=M+a}to-)7}F(q^;anztP7rRsO!wN)Rp z<=SiuGOCZoW@ALKtPa$bv=nTbf&s;H5DLrW9TV-;<6wLYo~x&Cg0@Rvuxo3Zmf3rF zx~<;fv;+ehBb8gKkJ?fe3=Y5jmFj1>z0vR)0HF{~z8mZ#r7(FPstm`&>{X?xGvkv5KN zNj}YS|CCK7HpyYEONH8vA$q&$Y}eH>hh~s#YgYqv2NfeT=mN>vcx22OKJb-H=8I6w zS^^ZZvk68ULvP>9&&;FcGxp`4Kpx)1?{oazp!Rb7m?zk88}#eA{kD<>V{Mo~C`)Z} zZz3gZd;!+7tEOl@Ro|_^WsoC3gV$H(jP3D1em}+;_@`ZzPmq59j_l=#=`U4N5VPq4 z=wHNMRS|9fr6T@|C>+T#%3!3G@kOFE@g7GI>8lzxKotLzM&q178}Hd-tRaZy`Bw>{ z;x?^egsglFA(u?b8=e^7+4bt4~w z8@Xr$T>T$tDW77fe$ipHyIznXR%iX!pqQoY9)qAKCc#1U5G*U#jr<$j$VEC_eG{WI zRQ~|S%Jc{K$71^2qinq1K;PBuLo}V^{o2;xMSiY^=|zvq03XvXPi<=_rmzUK1;(l- zqeSb`gE!+aM4rC@9Mgwdfnl*PH{gcOIH)ZJ;I1112m^XVf(n5&m*CWG6HVSXPh-N* zVJ?7#M^-uY?U-tzQNe&ZuhW)|&63Uu4%rzk-wfBAmaz2IpZktNLC4fb;H0#LPr+B%w@F0|hv6G}m%OC%nU*IGcig znM9GEhHun`Fs~;lvMNSERmjK>RuysMrvk$jpmM9_I8N6((-@O~4deof^>m-^|CN++ zXBva#8=0cMO*OwUh<_li*@5EG5C7J>p2HI3iVX{{#+!kMs7^Xd^#>m!_Kc{*>w^kK z!2$4Kg_q!17AX29mj#H@A*ucst&+GHkx+FA>oM>6AhNHqTs!gBLARNPWiMd$6^RP~0te{_=1|-<8 z(4LO^>~Z~yyzPN0{v}v{k=35Xc=726q5J{JT-cxlYZ8F55VJVDK4Vnq=p})S(9xNJ zbZ9%=^+C6z!!gR%LOj~j`e4*1n6k`@v@j|{~!q1=E2&d zXu0M+$Z{fst-^r*&$MUk#ljJUILnWAJeFlcE3RLP1t2LGmY+@E47?}^Z6wJBC%9hA zbt)Z88aDq-v~6fa-p4yuv)uTuH$d^m@4?_zf9=;o5~TjLPTLL~G*B8y6nSaS+)W#> z7SP1uCwCgrTGN4_%;B2(G;P5<&A%W;I|RO9BkoP5?<=G1uukJNrxW7C-KH@mO5xe(kVtdHx0$9 z#zDODCE>5Eyzu?PePeHPF7#GL=XwDW9k*9YFMc{O)Ti4N0g+3>?e^kX&IRwx)&{9B ze_t;p7P&Zbn=^8oApsP%q?JRz?V&TQwn_7Bw z%wBB}c#bXihZLeto@%r)nc2<-`)AFF-0qysa~OACsJWtJUIRbQfT&GoYh}|XgRICP zh!Dh$QQlne`Yc44Au$qi2Yt9}9YRvE9{ARs1)!=-d-G0jMFI^YPD%qYYG+0>-X~?K zv+YuEoRRd%?GBQr5-OpHIe0K6;_&Wsc+CrzOh#8|J@qLyt${IR#(MS6(7}nJqazlj zICATU)xQ?%o)|hlVo_?SE%%DHU}pVQw493#H#9IW&!|tS?+U#)F?39U@2nqW`e!k| zYg?CVTU*|CYnj%&uNWRYuV#1Pw0fWYiV}P9jBqQI>r-GJ_uax)whFL!UEkJzc58TV ztj`-OCAP-QC>Xn93 zgW{Lberc|}?OKo4Ru-LZQQvA$WpXnXo}p5^Avv|DwZHUX_~t1!=RV$uwynKien3jI z?+@q@e0Iuv92===9;ZH70*iZs;~{-x!K&EOLJfz=Y7Z~<)_X=63%XaVCNk_dw%Ut3 zmVDSfxIRQAb&e4@(NO&25-55l@B^&a4u!R{dMNYRYxV_?Qmj+M6`K551BfQ;#E#5m1q4xaHwPmzx%h%Jm5v?unm86UoZ#OfR*OmGzvauj*_5W{qtI*mj6BP<6q|wFk{F%0<^E%PU zow)Z>ZI3<*9U-dth2?oip!RuqX|~p`y`X*2or-y7y{D*-QNjo9!H+u}dE7a)3dFyg z-f*p5uT$v_$~)5GI0rqr6(5u~Uadfr{tSzR@_iP|gL3ss;o;idOGnk`Tp2oEup}*X zeC$$B==emwOK-;=7%$`&J{T(QEBK6yhGBmaruV^KYt}!d1*% z8rAknf8Co3Z75N~hfA;}&F{vGnA{iOq z?a)#y%YFL!==6ar7yF<&c5Nt9FTn5}8_n4r4i^nYxH%KhbgieGB22~?2fR71l~16y z99#-VF_{M!<4pc}3I;`|O9|(ULRT@SKYdF{*%^wm)^!|sn3OGbXqRixq3;{S)>OLe zkCeuWWfmDeTN zF9_D54TfOlM?IG;I7f|7q&-d+t$=rw60NgbTQ1Gp-%qrR;AGJCk`dFy~VFV zxLzxs#UdOQy_(~f&+k`7m@UFJ%b}f7R$i)iV4A7~YY@^NgF+fd;X-Zea6s(HZd|PZ z{U@*xX7F7r*#wiWE2CxhQqYyA=vr{G5;9a`j=V=nO}^OXh*xkgE4T_i6T#XrYA|7d z8_oH;j8v@iJ5&x4zF}-JO7yD@%2l;c!iVbOwUjq>Nde2{+uGmI^ZcDxc|RNh9x8NK2DUi$?@O>S-T`2oFHr258Tk+romK4T=6IhZXE&FH;_fCUZ92C21)rXQTgXkC5 z5s-h(7z(Um@Kjw@tBXvJGb}sW-&nt`Fb)MAj40!Xk;q@73)@7ukV^y^z zho7Mc34XE?Q39>TwnWqv1?nv(mwYD&RR`g9dp$@OnfjNq+RaXHs(r9I{twV;p3{R zw6lFa%hEpgp9{>37k9#3pd=ogARJf3gA;_~eAkx2l&}v2Bdo%48igZMJ9=;)tA;5f ztUfvR)Z=FL$)&8gR^s4bEM9d!X4T0_{fK2ORi|9P2ergHf0U{djH2qWE%K_^{y6Dtpb$xI{vsFIqi-f^kX<&~goyVS0o03OxlWuw=3-=oG%?Ds~qYev7PGkl3d zJJNlY){)ogOMS5J`hjYus-odL9CmG@LmSSUrea;~c(?RcSg$E@hL1VH zcSmHRW6_1!JIvN5+QJ9y@M6&gWvpIq>70lqBZPEJOy}cp{ltV{7Gm)iL%0*q;rNjP zZDMvpdK~OyeIj~Swr+>117wQR^S)Y-^JFPYF0LP9tg^a|Ro0xMsqR?t3@)H79g3+I zMrp^?I_vNgn32r@MJm6%|LKwV{vl=+hW4@#E01pDo~L=}X^x`Ob?ogj7-kPGMCxr@SF6v`b7DL-o}Z~wXqJ2=Invt+O-)NKKddzWay1hc#NpAW?y!; zV=C&?(^MfvCc9CDU5Sk=Bw`dchQ6V7LLyMUeeI(}eKsQH8=35ZC9JOG^6z$6+4cVd z2)?WJIh15Rq_H3}*%6tX5vg#(@)pblSaw|?wA(%LB~9?FVndu?N!zU+gJEQrS1~Jk zTlSwg{-_!rxyhmDGwEx%3=M|mBADT`yt+q7vN9_tky%0LH-cHnyW~4L*DpiK6!{^; zkn4U7%jZs-M6{0IgkQffV-C!(MF8pJ7v?qE=X&rER6CdE>bK(AIoXM##K|f!&SPO5 zH0CqZrG!e<#I2}&Y81CAK5oID1SZuV|Jqfv1#eGfL$VNxZA~%L;;Pxe&|DRYRe1xJ zQ?{qPD%8Qy-5>utu(+jwINSAyySdU4{CY&#@sb)SR36p$PHR2dDJ|)sg)Z;@=L1ELm`EZT0!5#J_b}zllnP&+m(W zea!k52Fl_e9<+W)Up3KoF@ELvEy1q|zbEng3w|Hsmk9>v;YWeO{I$aW#$l*2=po1{ zcbuKIhlA-@o(%8sw3n4vR;A#=L;bfH5?APtVf@Bzl?vPr1A&Z4szvsA%vCXz`XAoQ|kycX^Y@5re=j3J)ewd{W}fGFON8|Ls~!FiklHVb$; z_JkF9@qSnML5|u4MsvK*1)X@K*XgSHK0ju>9vXYTtEQ6gFO~Y|lFlcYZVrUD@O=o} z*o!v8?^-qrAQt`P@c11Fwuw^1qU^F}iS#N|p^Oi%Wrf6f8NVUh6UUT0>K$H+`FD7;; zeRaSuwWAmUre*TA#3JtHXjmI4?cp8SSl4Y`II*|~Qv^(+lza!@#rlL)2ORH$fHhF+ zwTzw;zaOGouJc@mir-;}@FMb?#UnQW#&sXg&)K4P+pA-oxh_iI#z*%p@S@o1#iP3t zUi7;3;?X??-U-T!NB3BG5sP2(=>9sr4&`;&y3eN9t-NkqcSdw8z14rW*?M9P>p?x+vlGz{Q3SWX@ZT?mTK?T7C6fE zsS3{&i98gMe@w-pp6;}5jBdbxRi#kkt|;}_0AKe6oo8D#m=?&@kj83BBPNsB3?mNj zZ6$%&7s@Wv|3;rv6AYUK`XxeR{Jz6oEJEqJ?+zRx$53;#9kP0oO0pGu?PewMaM>xl z8Hn@^2)2wDAmkV#jTDBCBtvm-8g6GAg_r{?eeb=7@YYekAu^JZ6dC!rxXt3SrbkA$ zipzE;GIFQ5yTt7hm-VQbsmw?ieyjaKY|AeAURm@ed-ZWjTZJiggE6EyjuT(lg1OcK zu^4%0YGe^+Gf{^K1Qx|EzE1=Ko3e`>5$rJEj)T$*;&*Lkun}-ewtsU7)jK`v*wnXm zD_qbfIui&&M+LnF%)UMh7HN~6KK-?&h4k3Wt9s@>klI;`#oD3#&ec<-}DhPyTcb{H0{>fXGlbSUSEu>8DpWO zbU2Vn<%=?XLn1gcp!#NPpKnIl?w4NPS=)-ycHo=rn0>lu1?hK`=x3nQ)heJe3k$rF z$xi(^{OBn~VSuJ%efse*Lmb#RL6?k(PP_8+W}O23 z-_T;h@?E+yGz_0eTQWKtxbm~+L-?w_qSu?>(PBfnxcL(me5V=Au`V|?)u<9<8Q$bw zR#~Bc3hv5a27{OVD9{T1uMDwOR>0)1n%CxHpqePaT-+DSFgcabGtp@yCYPO^1`P+z z=OMT04Zj$x-4{4dqa8Dt>Irv4AFQxb>@l_d(^)vKws-oqw%UEc14gWJ!NKLNBV7pz zmJorM9j<2zH2bp~cKFgQ?}N;D*OqDC^ulNAb=Q{m8TC`WDQ#~%hdxWE%~Vg|d2d`# z-eX2dKk-#v^d#2?*!}31V@;=0T$Bg|!*T(J6wgXOWCvE!;(LQ=`sJsmw`jKnn z3r-MZ1Y{%!WF`j;QvnY$6N1BK4N&jMt@;i#&#%nV+IX_q6hCDzIhO(+m=@lagBN?? z+hy9r9=yqU_sa6rH=|3P`p>g*jBy!*Dc3nZ{jvS2Hv8`wpsf^lSvKC;dG5quW#OQR z0MDY(TmB#&p=~O?%gyvI0&jfY*ly@4IWl6i+BJy@LpgRIQjQ3ANxz<(yHo_|LukQQ zs_@wY*MUIjwOI4uQ<-?-%y=gBkKT;aFX@qT$$~*WbCXOx?347-Ki*7l%t;A;2Wi#A zYEPY8eKwGjF$%RTiG*4dGZvF(9MxV_jAPf69-7F#Jx8RPjO`w!{gg3MVah7s-|#zvUn-LB z<1X4WB&6^ta7H5u=7Nqvzcd;Oy`^w~DDgX~8sPh8d%Kl9jN@DF0LA|O!NPq-50OiO z^qWSv&R{;k*5W{ql0KPoy0bbFxL6R9Of^4ja7v}PMf zqn)O-5KL$}BM*_7?h@%RD)c}8L^{sm_Q*AkpmUayP$e{!-#dl@&37CnXvw4ZIJLcz zT1M2vS*Qv6IcTr7a_HH;cn{-y3ir*P6?upZ>Zm2j_M0}_NpYN|_0dxR>^OxeecRaDL9 z+(D&Tg4XRrF!W)P5gY{bzB6uYXZ?fi6f|o?>*NFa-^cgz1!hPIlP)Wlq?hDX@r)p4QitB@B ziYm1@DPhY8H@=~Z%`jJgX35$QE0k-CGcp8iyx$J_iT_87K6r?0%ajvsZ@c9s*7kPx z;2~)t&{rA#iK8VKFR(Dy({W!IZyc9KpQyo$tPg$stB(65D@0zu5yAZuP$>R|Bzt-$kxYs&2O)e7^ppN{&b4;ePZ<=wws-c7BOk(yHNG^F zl)e@k_4gu%RA6cN{mO+`OKfdCA))I3SJ*shMZwHJQMj*uactKbXmnD#^ND608qjG-4IfeC`WRNYyDsZeSm~|H z8ZB<2xMRe^OL{|%WQQ!uA)fTuXr~2Ve>dpo)p$F zlex*912>YDi->hu1#n?3oaYMj;r7u}(!ewdpBc|&aB?jG7Qp5cLF+Pw&`cpTQwYrz zLNkTXOd&Lrga+qh&ghlDslhoj7oEWe~9A}L${tVxy_ zQ{pkStf}z`7a)R4sD9d@tkAK`%IaqhI-_o;*A>hP9WQs)^3+sE8o6UX_!{0r$3_Rw z2pzvV09~zXg7+~5_)O#NIOjU@sgCORfL zhIl4+q_L#z-9?1XP*5Cockc}yKbN4vJt~l6?(R+!kQq9DLD2aJdz}>T5Gm>zL!{h? z7&1Uvf>q%`*@xTG1E+=GPJhCNwtLSzkt~W<_mIvsKKZ9*42ooiAW_=1L5@gP4d12? za>BO13d@LOtx#d^Nakw1f#06O*4cGgYv5_TAI@W;KYVjm&1xbE463W+lWkk?8B5-i zRv+Wzib`sARg27WK?A$P8Ls>0fgKH$=K4BHS>06c(9qle3?0o4rinfqf+0c@bZ#*1 zDKhUdXVL0c0DC9w=-Ba!?|ALB|G`~U_i8-6?o~6qX!YKB=<2;@=pTj^)x8!EuX`;X zo?2A*dSCeK@$gVh-RB4o(0UJE5suf+6f|X<-$Hmil)Tuy;TFxtjVZ{c|p;^0wVw;!%+>vq@HXIxuf!*RRR zJvh*auo-a#t)#$duoM;hPDf!Yq;ZLN=;+{J3}rIFAgsu6{h|2C5>Ii@68G%B)(Xpl z&i2A*ihEt_+h)&#wqNzzHd||~x~(-f0SyovocNGGd?+J4UgRY>tTSyf%8P#(`?gm! z-|+_+G75Md`c|&7!LTPLgI{kTuup&IHuNjfmX(N|WM32G>c4%1U4|PJWVEAI0Vu6r zJN2irV^N_%{udnyX3+wI^>dYYMc{H}9)oG>m*3IXX`LepYPf;|orcVweOPd*_lCiwbov*z4ku) z?7fflFq4VWdKNJRp&f|gaV?!65jS9~<}=tiimjbc`oaqL_PX!8ZOh$Hx1NK&*L!3D z4$j#ZeQt4Lc(^sBobPFFHZ){?GEvIkP3u*%?JEI*9(C=b`|iOAp*AXuC}D#(-AfHZ%qGGRP?H~FAJq)8K9JGburtO`WaiaQOzSa-LSRojXwb$Mk zuISZ?W~?69?~ZaH3!7Kefm*&}AacZ5t^e*7G*B!4)G@&dsZT-$Q5dtuBE=y&ie7aL zK7 z@0O#a%OZFu%>Ae*ikRxm*mE7EqU2Opdolrgf#id)qrtH4RIZ}Ni~&88*I4~RRs}c+ zO;O6};Cjq3<~tHV8tXqAq#MYG<_blt`|IeSSuzIpo~@cp+l>a`MjI&z|Asxk)5h2O z;k8vAUPl)fmO(8vl~2>E_+G|wye*waU&>0UM4m-TLq-}EGdD@N!|2(nj-KJd%JUrR ztNyq8z8R+zm|i&#mTP^;F-qR#W6PgI((xKj!}=jS%}#q{Tvjq1N*cGJq2cpKF+hS| zJ?nd8(}MO{gte3}bvn$`SP$X_Lbju?Gyrcx`FSDXrU{M#IoGCVO(r^rYw<<61X_)V z2NVd@m*)9!c%^jLRBl!M%6#vHVZI(E(mvXCl;9Yk18koxT_FIm=xz7s6nymD-27$E zaTbIp+;B&`%E}rBRm|-Ek-Q&jU=bmSeQtH>|W@ZG*htkQTq+yglax;}}kNLVb0f4PIZceAMwDOVQ-|A`L(q2w@Y*xEN03 zLy>segJja;FY(q2g*oyR?&YdOjwi?ksL9w2nUJVLOWnbzE<2`}W zi7otE+s2r9C(!mQJ`KQg19tnl!_b$3?1|nupKcjqDTIqgQezCRdm;5<5o6)MNg-0n zCRF>7BW_TwUrG0T14*+T(OiVr!xtvszC$R& zb50r#bgD?H{ISNB8@y$aj9PFQm8Q~X)la*c zR_a3ZUef>2{;^WHkMb_UP<3}u!COW}w;KUV#zvO<=0c~X-?z&$CSaLRXgyW@UswYb z13~s0sQ@%?0u6Ikp>ytGf}7^06us;fc(g+syn5`rWNcjy@j z7VBAxis(I%@cN@G9`$0(B+t-u6KhYcofeDnE|~?q7lPWmyg#N3V@TgXRoEh9?R}zX zF_BQ{i1jj}J<&{m(9DZhQWz0fuM4cOqQz4c9E2xv1Uhi)Je`XG>ux_6e|cWZWzQn& zMMWON&>H^!$`J}xS`T_m_uU0VaQ$_JRM4u^-YoSpb9yj zkv`&d`qsR4-2aLK*owk1)Zk#L0Izz7U@I5G3jFg>tmr_AAlr%lxOPn(Ls@m zY9)Pq_OqgoHqzTzV9|s=zI%}MA$7rU7qi!GrD9yvhD$rKyI$&mQM5D{eJ!8oQQ3yK z#7g%JLH9&G+;i(28kPs4A0Djq!4cNtMrj-QX{&6-!0vQfEuQH3_onVNy3TGRJq+&np$%?<&8KmHV{u&FX=wBY z!H9gTl22JTb*GOa&A5~ujNMC`{(z#(G0D>UEG8lk@8NxjPEquJOS(&d(YP8xAu<_J z-XVQ~c~q&c3pzGrv$sVOF!kwA2}(sQ7OP4+W^FS|12kpiy(v0b901u_U)5@<$-CrZfw8ayzCk#)!gQ{rvZ}5FWJGZ#- zQesx9*svuw)8c*YJx#o?y~95r1sL&BhwJY}Eq!bVoQM~-7Um>mz5Jeb2tE7H2wOov z6+FVe_=&?e6s%JnR!X9!oJ z9cVfI2A$5ic2J>&{G2O1g_BU?nKzmKzIX_Eu0ji-T=PQd?~61%ukAZ%9zo?iGiVLL z<;)mVNRT;?c$kXoMaEdn7==8bpLc{P&5H)MMC+V9FVd(O=WGl zjT@?OV#Mq&Su4mrbMO?3iQi;tx)}dY%%GXXtVLAzSEcN3rHp1H;eSvwxe_08B~HyMg6Fsrvy10BaWTe~_;`vdai%m#Kowdcp{p>G|I$(qyl&&a z(fpSVF>w{f@m~l3rFB@Y!an@BFaI6De+Tm4!Tfh9|D|E3t1yZG(((>hVKV<6%YVn? zZuEI(9Np%%Y#*g&UW-PU^Lf6HGQ!&CrP$)o7-nzc7#jipguEk6E z?^6D|41Yb9%9JhnTNEZK#^BTo@v0bS)soecql(wi1!v=75{r@8_|tBg5pmOEa)#*x zXg`Ve4wz1SveFYL7Ap`!87-+QB!`*y-3;p>#+mjtSE$wnXz`Ak9#{FP3U4Nh7qcUY zlU@tng@ogC9FAZD%Boy5{kzNfc(GBl2=TLiPAB)BJ2TJKq zv3}JY@3qB`2y~ z{EMfp_$VBwafFT1MK+FRrY`hOPRYe}xVWa33=x=Tq?HU<$PlhBWZ2-EPb~~&g_(_% zWNeR)Dp8{MWiq7*Jtb3;$x?@g?<>`StCQBYn-qgV>qV#r~omzh|>Q^86d zCtI~z`tFB@23On0)sxijFEd?tg-Rs^GSVu2z`u0*$Z@{1;{eC>DCt++Oi6N$j4mD- zhqmcTk44jnm6lgwMeoS0{u^CZS5l}e34bG9Np=yq6R>3}DXMsm6V9HJ4EVm16YvP| zb2xg=;m|#YL-!mC-NmnS{&2f%c$8~+v}<^*Yj~V%xI=ut607)KBSKvxtgaD}t`THXxE5X*N8aR2uJZ8iXo_EfX0jn(n*oUb0|VH3klNMN+mMSp~y_a;Mr071=$GC zbt5BjvSKbchPEg)q=rrz%Cn)|kP)Inr--$yG{7V$4;3dDa^T|PI9`jxMN{I$svXSB ziF?FhS_w1?M-4Hmh4_-Q9C8*S4QJg;oi7=aN5R^k6q@Z7f!U663I}G6U1j1sZtW*l za^wiYf~LP#3^@T=rcb!09zXat)%akX1W;GNGrQBT;Q0&07oMBMvYg_`{{hUhy#^11 z5z?SPru{@Z$X!p!dG$fl!gANsa0-D@Tv~!?M?ZgcT;mTT^}hO%dbDZ&tdBZ>mejwF zcf;c`6Th)Y1CZj797w%*qJbVj2L?%{EAcc780Bd;!7+-S`IC9p;Ky|ss!nhW#yY(y z>CP_@yll>!EI52y>~9THj!2;sQt+Vb4MJ&-gtdR>{eJX`fP4wUiZao^>6V`5)wj!u z^t5$89(J=Wzf6HM0@w2TCK?;HTPqFckClM?em9_86mDBDQ)D2GdPh1-{6z72jvrH`u!` z)N>^Fmyp58+2TDI=G_;Ll2MMKt`3+PPVh?6MZvWrP<5Qt1H^F=B}L<+Us>&N!P)?@ zmJYrwQcVS_y_I;XT#c)-j-fOihxG)YmrxYMMD~=*M7HCCpGo={AKx6tEhukWYKB^J z!h1GcN*~<7S>i-8B(3hMBW1XAljt1{9)N&1bTZ}rBC4-Jo#9>#lC==X;Q>qvo~LQ-I5At~1) z?MK~M)D#6(Mw2fTalU7L(Tk)`*F1t%X7=#)X1of3YvwgTp=(K@>BWVlC!ECb_GeJz zL$q%cqE+VKqNq=s9~bDJ`rHOm90<@)dhtBgS&EcJ1Tdfw=&Ubk9XvyN1iGN7P+2@u z#31(1X(9c}D$rC;3H9fe*MJqS&sGwD#uHvNdlE*mxDIu>C*!JUb{75?$9M5;>b;@( zqbKP`iSI>`VQ_EyKDF!%RZ6=#Iqjo~c$=KzVwb~=0p65%<)(**m(!IRg=k=2wNYRd zpWG~P#r(42r(p*P;-c`sV)kzA>n#eVov*a2G1yiz%!(^3oeW|x3N9YjuJ;k4KkTSy z{LdM#+T8r1d9{(Ee~#9_-x_G@pGV34v-r9t zecJ=83r9Id8H0QRFPX!+24b`$VJ2%RQUX#E(pV&Zhk@U|=)%VaVRVD(5-hQc6&-tm z^wUTD>Ly9+(_^Vm7h7~9R>LD^qW}3pdg>FJd>&LwM-@6p(=aVm+Y*y5^`V~X)^s@i zK+aAP{VCp>@P*so+UM!681LSl>z-9Z1i8CW>_ItW}|T(;3()4wZP@8_vI3OT!1NiKSu{ zBS~Q?^dP;07?|b6`=DfLCWcaIXE-=$aBy~Kbm;@wK2j(U`|tK)=>QF;26)C;dE>Kg z|7vS?J|oa|?d=(E^$fyVRBX@Ki_I}woeMssI%_Y|a%Le1TJM{O50*-{*>@ofqOg~g ziF{lPmF~p_k2)GTq}bXrR=?3}{pZS#7X%m0xjs;{F%qYVMtT32nmyLxpqEnOSQe+6 zjT|Dr0-K0u{^QW{yW;U?~Qr{A@PBCs6a`fnUK z`b2SJ2hx8UdR<5HsCK=v>kA&2Dm|ab-?`~a4$?=u4@BsciFMJrmE6}exoN8rlA=77 zjr&*6I84(7r-AEgv9e>|?aV0bgBSZGqWY?zKPpR#z`OqH1m$Q^8h2pUFw0_zvy922 zp;u9N8d|t`hFwZoN#r6|Pbk@yAx+0!0L=nRw{4W9LRDo`-Cu zyYT*w=QnbH#k7c}HV%)41QDFxPz{I;T#RKZSk?px3yw4I;^`Ps#ZQd%bUiU6;=4@j z5TPa8baECj$IvVk;d+8?r6(~XM-jA|fFn+3(taTV&IFfsafz!)@XPGZBzA`}yZn@a z@e;EfiRaK1vHWM0qXV*rhT_$>SU@8!kdUTX zSg0CK!?iPY*$&E&Uf<$a6YxJSJAtM6Qc-#oE8X)u_6KAA5^{5YCWS|QWh>!bE&NDK zO2Rs|2=7Z>GU+ja3gF;~v&3>W3~?{k9#4$;F2j$V zh-N))5~i-pgVP<{k|#K?B6v*1Nf{ZqxR%WZS)*{ApJBbbY(MrlTmC2Do8|v2{^r~X zXQEkz3A7L>G<^)}AlrFrJzwLo3nxj*CS+ZtM0~?01oQEs;KBR5J@+TlLwdvy>_c2L ztV=Y>*`fdkns7Im88oYKWEPYQ6fCNe)$>)dn17(@2$d!vWSZMFno-QB-M}YtnZgHN z(M&Dz1*XzTKf>4UfwSq?{*zCHl+k~Fi}RR0IcpUfX^IpP&n>;eD}}2i>$v3TFtsE( zYcpr`K^d=veY_p!!?*rca3uSb=iKG>y(hT;|iLbk1$^IYz!QsK1q-=Dj;)TfC1IFU)eQS@K za=u<0`mupT_Ug4!#vCU4Bc73Dq7FaBWm@q7V=?MXFy(x`cC0C9_1ekC9ImsQRjo7I zSPY{1rktnL9#$9>+DdmaTSzJ?b%W zqz(RttS@N5!c#i2Cx@1n4jJ_0W1*gk+UpB;3s(t)pZozosl2>mQ2mVdp6zgxbm?_G zf7IfHO`OU4Ej!LUWQ0`ON-<{z$BPXq2P^p>MPn8sJF++rKR6$QIKucPmloDqs;IP$ zrP?=4T(+|;!KJP6@9;n{#wUT+UkXNXHo-8;RFaE$|&bl5GBO^han}Yfdz~; z3z#4aI9L%-`AVK&IZN>|F5>+AMv;bdRfS!?9$C?ykdTZ8ow?cUs(IKndLl(lVzJJXS3t6 z&aZD}VQE!=fQbD6K>NKCVj29lOY`LnV9y6Md+LNFi)xLxrR^0bT~W`6a4mX1lfCJS z%uylVQ14rgSaF`-cjx8X2c1Iiiw-wAUFv~#XV3z=Voy~nawI!4G;3dA>jmRhPld)b zX7lpuZx!+E%I4TTPLA8;-IH())C=?Ozu?SRgVp1Zp~>6YRy;+sx+-823wWMZJX97? z8)}5%yaGsR9&9wT_f5fKJA-^fkjE`-v=*qv@alq}k1ilS z=N@7CwfH<08JheT7@x@-k3+E!T#L z{!$CY?f7~20^;$}T9dpr$Y`d#&2wK}FsA;dQ84}!=Bq9s9v?l(@@w(91{s?C|G$gJ zK|)?_cJ7EzFYo{N<8d71F*IOX^95|4L!UPuQ|}rlKibhWs}hpc_vwFPy!wk|5;qPR zn*aVe_S8jZ5w99Q1er$^N_6J<^e4(Y>{pY#eUb5}%lrSH_?&`0b_RDIii~E;+dOw} zMtoi}>W}g2;a!N==x;)c7hs8B175b>il?Aa&*Cupo^*x+#+{+~oMVkV(iT4&JT29U zY=o3XJK-Cu)q~TVc-0YvGv(;(7ooJ0(dwD|EWI$mvMVdUTP}*CrEy9nW-tbEhgy|2 zdggL78NAC4^?1FKeel{Do%sdH^{R*C%iSP@V`lN8NiRMYRTDz*18tU&xwCg*1k!(- z$9uvIt?)lgPncezbZe51$BWT8)4}pGtA|f1C<+Z1LK6SHv@>&vCGs(wr~P|i24`9e z5s`W6G`w`JeuJ{z`N0;vC<4!#)dYg?-`j(Q%7`s#PEd$q(>Lg38oXT1j-@{r(QDSY z%-osSIWx7^E-r@FwiOp;w&%;RzNs6riKB>?qe^@M6mQjOTZr`Bu3$gs-+9`93a~WK zqxQ%Kta|9-Nr`gjheu;AIlij~Z@?>{LC0JvQ8{g^hS{N1kWh~PXA_gXq$}HiUtx3R zKfSHWKdTJyG^I{fhQWGDao7VNE<$g?;FeMJ*^&N-i&xUSCC@kB{Z`L0PbG|w^{EZ` zu=&uOxZHEJcGOn*02soGSMu+3d|JemS06Vm9Zx1RQjMiK@mNP>2M{X7PJ|j;={9do`{I1NWeL`! zY&(IqY$2U#&tz3wdIRQq2|L9as&HIFsD);jeH#d^e(JRT=!a%pd!n4C5p%A{-~B{e z(2b4D=_Zq3!sHitYi!W)GdKyby!H*WzSz9V8XWgIYmC)XyX z*4|QAF*K*MS`<-^uM|LosmZlh(Ju%>Ex7BJdm6P{x|Q{`ScY0ec1U?L#$(Z`(u-&( zo@#zw6;kek01$&k62j0sAiVO+s|v+a0(61*dsw+7hKJO0@t!6U{9TH48PY>?x*fl~ z-!QjwQBYgU7ei71+T{m_Sw264KVp3BsazR{Y_-32p+m-Zw+FfwSa1*v{l)jV%R;eC zG3Nm6j5o$OOEhOARw0Pjs2)BrEAM0wUTo*wS-c{8HYy^DYb>?HEGzB!J>%szS(8pgv{~*z?Qs{3c`gtdVbM65}r`5urT+k@$&O4WhYy3BhKJ%YUGw@0XDWmrv+W$jdGV$E{=SuqLp$Sd2xE2le(V}o3)Z~)i22D%#j z3jO^Q_rVtBiWC&YQ&H15ar#ae0>SjpR4XXa9p^b>;cmL#-esur^J@J0bL^da zi1yXUyQ6VVjTLvO^C%zIK5%gq*u$|Ca1-qDS%CHPZ_o*8dG$SQa|)4ZD=7;7A3l=e zD6T&aO;}Kd6Lh7$w2C;VW7Y<|y7%1=I4p>f{)Ts_&LMR2m?gVUabYw<^-8oH%jb4D zuVxQ;C>o1p5;EbZy}!&k>>NS|li>^zuy7VHn#Dn5;{HywALkG{MU3uuO8252Ifu~6 zZ=!rP?ooFbILCsM;H>Y^+Gw!}MX$1RdG+D8IseAtVxG?QF=bcxI3O0?9a_Y4zd**_UAv z9%j7c;|#DKxelL<2C%2|QvAghtK?8c-92Sc#1(P)fq-7d(C=x`LeE#p&|*Dt5}gVu z;FkjuN8WwP2$@Wuj(oFZH$i^|(_f|07k0X`Df(p$zfOY}c5D)U1H*4t;8#}T3ZHei zOTW5db@~vo;rlZycAz{vlxiQBo}9G@chX@eAhFgM+Ryq~_y+cM)>Bp%ts28Nk6*2{ z)svT%W&JL)e&Q@Ttl6GbE3$s(tTGJuslVltvno9~n^xc1vku7Fo-SB3NQ?i1vwjg- zSQEty{UW|h$@cyU&7hN>C=g-w=e8JH{Yf#ZLVOXustq?1#N5hZp%z~X0zy_j z;*4||qlW^O_6TO&1LPMpc36jU%qSy z?U3(Xi>OQUD0k5`u0Vf}zo8Zy1BCHktXpM>;#WJ7)?AB1RU{>Ae5h+hD5HilYABbghVFv`9vaWVA@2 z<(4A@U5q{Vl;u+NWb-;=h7Q`cx8eMUa5NaH$5wC{UC8INpdk#RqoBC@FiYP4An$%V zkH2IF54x6--Z9RCF7V7GM0xLO)&jau6g?j5T23NsWssAkq%x~(ImxA!K^PK+$|7CM ziFuV_8n6}7ydQn({nRtWmTlgH;6B&8$f67jhmtj?;*ZDsIhj|PKUK$r;1l*^ZfQKo z<25g;;ql-mc`RB%=XWD&B|D~I|GKA;43tHPQ?QR`p9h;Ru!^$}7F~O`WQYgf%G^+r zxhmI+A1f+0H5j7DWaz5^MF;@d_%`IOSY8NT#Rb5zU{$s?NL!Mf7suuDl5A~oge&Y@ zG2CPS9W;TRg7m10arsG09PRGUJ=ri3r+wha=-P;6K3_(PN93So+v&E_dVDS3A6jP_ zt$n{TTFV>pb*9HVu|mcV2EHy==A!xamt#DXPV0sJ*X@tx`9Ps6ixY#HT`VOw${8gy z9NDi7l6h_xvLu<+-dc6h}TFNkXu8J)#9ws8PT@ViBT%vwS-rS zRo5fCg=~j76GO^1Odb6~z)jSb*h-(#sGu`y2*H|bMH*1U*`iENW29u{MYhtdraBlh zy(4mg0NHhni=rrhMWrJH5+TgVHjM8*w${em88qe?6>37<~a3K*2RJzr-oUs zN4g8?L8SReuOV$j`UxrI^f1dcNJ&WdBjJnhoILn_1?eNCXgSs3_YjieTlDMi`J%4P zr|GjSLE}8{@%fAJz>_!=*Urb@=Gfa^Po-6Dmg6t|KQ5kQ{vsPtF@&H9v1=)8(uNjHP+Dy$KgT?wmFO9uxY{Z!os+CJc(8C zPR^_v=pjY&b>wyMzUhFlmHgq^@-aRSEZGpUlGC!z0ED*or26jSVi_~~Gs65(#vH6- z+JN~Df(I}M07PJRR*L&=Lve{HPNw1ne7o9Lcd1-27r!KmA40M3TSLjyqNGTryILv! zI1F?%MDbFU?qU?<2`W0P3|T2sFf(iQ%}2KL>F$;sN8N~+xSUIHwD3_d67AlenspqI z=wdnug*?FYzoZSXv01xNlq#*3i*6^{K+3Y05XOHv+v@ADRM`vJDbjp7I~Lhg4IRsJ zEaC_>jDtF*_pxvmdKwB)-{DLAL3jkjc!K!SFT{faVk$wrEg+82xg}e9-j1tkkE-GY zSP_BE2AD8&CzSM}5->#9vA9MAP0d;YIANQ+Rp2%NIE^K);CKa*8Kjnkpk$vY*+Gcx zEj`p?JBrIi@e!47uu{x6e@hfcmV)k2-4*t51cc-gCB0B0=x#I=PZ7llRLs8gj#}In z*msEHNkrF!5|D__nu)tq>9~z-Z1v?LyMLK`pRMG}kHbAjB93~t0I{P$T&Px?O4wxY z_mGt=mB`q`DVtnu9kNrT*X8U!M6{8;S0e~OdwT%tI~!|;XoqV5B_NIy#BRS3PY8&} z6@XYNAk6l@2!v7vn1jHcYec96Ao>c3!2~fC5L(0UB1*=hM5sK?e?8<^2N7u?(o~{y zwMvD8K(#0-QmNRLVz&54qIfA4v*C_*(+7d)L~$9>-DW6xT$Jol>8?lmb1GeyRlO&!@5&wa3Mf_Qj9-{LILp}K~(yMm@FXH5yVmfVRi~K)(`=sHra&#gmBcUPDQ~D4D6!U1unMKol=h>Hb?SrXY|gia#Z~g(%@5P>s7( z>GufX4KtD5I0&>Ch>}|EorF#HwtPVz@{x>v3uRLfh(nw z6$r}!A`CQvusFOSD@7`kvF=o{sHOjc^`?+$4`FfWzk-V^l5Hg$F~y{2+Y~Gg0Lukd z^eUyUBlx5fv%={t@04ElBI4klgp6ZR106ikVo5* z5+Z%Gn7-V?^HG#4?Uak|S7@(djJ2F?^^Kxz(#sBHr%21>?CX(jv^YiDN~}zUehvZD z7uE=Z1_Db3MCfWj9KdOvMj8Y$TR_ATM7e-4Tbx?>Jpyb1f&B|$S_>aWC2|YD9@pH$ zM*&V4`Y{!lT6mNoGnvSYRZFOapTa6s$l@eKR{qUuF}3jBqWD#nZZ|I8j^~loWnv>)V;rn z?8Ys-zd%d?s1V~Z!lsrz0a?k?w|Hkt*pn%n?3|5k_`jTeClTG|_Gf|buuK&SnhSW} z#R5z>>Z1Ta-+utaQi3>v(}0b}CWsdV#43XLMnIUWqUQau0NX)e9{`M{KZLtfsjJNB zQeqI-@`Y@|mGMqDaN=BjiLD8=033qO6zQrkVXYEmH`U_n0huf{ z;N3X2__<79Zt;6ilqwyNiykG~aSS_D8$&D*5ZMG#Eg;NJKrQ}30XCPw-UgV~;_spoxy291 zHMjVsfD zy`URzC|NE_`k+M6J<>tpo)DiE#Yt4mV}-41F}3_@qIfdV{TLfT$;kV80Mc1cbdD5H)tL#cXeC^iK$|UIexhV4A%rQi*KuF}P-X4+Wgi-?J(( zJ>2&bWX2PjX`(h=n2G{~T_#7@p-gT=N>(00R`rRp3=2x3qD24|8npNYds%=jSHZr+>B^0%O%q@nRIrZ;%zu}ZC}3*<>njA9 z<}!V#M0S}tT(is66HRV%87eS^hz6_=g#h+-Aako)LLuU3QPKw`LbRT0F@=aqQJh4@ zOgBs|rk4I+Q9POG{))Z)f;}oJ79~!V?pJDYFp3`*#jmP#KTwM)MBF8cR}kI#C}HQ= zfxA?xz9E>q_X1=qy49Zjy9mTXYPD&EO(7z5J$c3FGWJNyCa;J^c8c_toZXj*8bSmG zd@q)pLVE)M>I-TFK_TLG0Wpdoe#FW&BMpLhT0l%Dh}8nZUx-K(U^5BqMS!X9Z#T|$ zEeAldbm$!EBGUH+ATb9b=DHT5C{@}j7iDmfGB0=n3rQi#W`GED-WZ^c&`PSKNG8-- zUx&nX{8KJEg%1b`%TqjgUepl>Y*EK{rI_PMwkRHqV&A8RlDkF8ctYej^@^c*kSNYp z={}_tb3BO^#S4h;1eCDLyob9~Y5iH@GO5T`6-twbx_D9p$Q0>c3>oR`#iZqUvJOSb zl2a~fPqfK%&M?MR-usE~BIU$EN*Sb_@X z@(XsE0GptK{f)r<$CJ9Bx#n!Z`fdQ27Ekt2i5yR=an12$F45$6e~}7I@#I56W+{>R zy`4ga;>io5q)cVz8?~6?$#hY?N2Ob$7E{zn7sd5N_a#Hg5K$7fK~dS$YB9x=OGI&B zDi-liEv9(VaDc@gg<{{WC}B%w;VxBLc3L>c^~hE%rNxs>6Y@js=ejq8k9}`^YcET>_$pAm%rM2!}-12#9)u_@{vI7f-?j zn0+I_5&@>VzbT$103ca<^^}MwR{>IuC%sUVD&@*W7jcmiPyYK8>va-9gxY^?tHYeh zm?LG(9b8116ea#CFc+zq?<>U|B}R+lPf_ffXDAsUN~#HwqeQl$xU(oeq|zOy6myiQ z+s_PJH-YXAC}Br%;4W2q{iJY&KFC(pWQr2w0huD@Fl3}Jm`Te~Vlax5rMu;#U-9;e z{UMt%hRd|8DVyf8=W>;OT^8rxM*q)e?#yT}8=Um2SGBxE`yWp@U^A-GOQ` zMTzf3@j9Y=F-q7{HMmQaW}gtwVMDfJDJ@DY5s39_wKZ5?!BN7#nYJ+}t6E4h5*s(+Gmb6jup|@dWXpUx>B>Vk$w56cGNRM9q(^mm&g- z1DNXmrYNxr0Qd?>orn@4fK;Qz5)`FM_sB&OR<#Iw(F04aAioPBB1(9+%aB#98&!En}}uK4%8EbwHN?sZBr zM~P}t>?FE&l&~Ybin~lz_f*?CR3EC24sqK7ehw+_F(motwfFzpQ0#P8Xy;W zQN;dmh%vg$wBMm@iV~q)sLC)o`*~z5zNbYAhu}39phD8ge!{}EDJV9!BO1Mj2r!B04_66LwD9d=omjqBRCkr3c#|lOrDEng zTrH+(@vbNyh+p4`!QkDm?9rp$x;^?`z^|* zXz?ntQ>2Dtg6Lc#YIsJWX^ifI=%)a!on$PgP;qWIi@KSLhczz#Q4}Ab;>%F%FGzeL zV9o#rTscythnXQeaqih5zUP*|4aY%yJxB4$NB3Ryy+>Y8Oh*nHKHum$O#u8sNGu<( z!&2j+3+aoHU2P>Juwv&E4yb`VDov?~HM8t=s0@A5^x#jcv`gyiLPXF~#kv-g?lxzs-ql zdHdt?Hr<^{JF6OB~HEm8{oqAkq-iEYfIzV_}RuT)@UI;lfZ(T3X5%v7?^T@}# zrS;!B^|lx4wc%h^`g{(~WyKZN717sW=?<6l>=>6d0rjS04x5$RD{q}$S1+_$(cn3K zPqBPHwq{?0em!$}tq;}}VqNap--6{uz1ZyHY1nmknB@5q=`tm zNN*u+LOO&L5gc#nhm?Xe70HeCHqr*9ACVj(@s>eIsYuyKFCwi#`VlEI6ts~>AWcS^ zh4dQIDx{rAhmoS%#9MkJ#Uo8dDnwd_^fl5iNNvL6EwM<0kW!HzMe-oMgXBdDYa4Ir zjx+!%4e4>DSCG6&zad$z@s=x*5|PFu%|Ln)X*p6A(r-v@+My1l;Ybf4%|ZGAX+6>b zq_FUKOHZT(qzt5|kzPgm1gRd$76Cbtl8~k#%|-eIsRrp3(#4VSmVrpANRJ{dKzaws zizFd6Aa!XE7^J(AW+J_XRE=~H>C%hhEw>A>MKs(oIPBAU%!rI#MN4M8|l`)ku#Z%|lv- zRE6{llBH9;r7O||q{oolNFO2XLTW&|A}Zc82I-$jbCKRfT90%9DWo&_LK=W{57IOw z7t*^(Um^XD)TIl`ke)<(0qIkuEl7uvBD;b<(h#KCNG~HTNBS1&98%Bdc*`iHCy<^; z`WR^|QY}*W#qpM_kcK1Ojg*VD2*cn-C<*-bfia-ijY1;szmw$=?qf0OJGYR z{dz%nZX0x`+L~Tl2^PR(=czm2dJsLFadRXPxtumh0;Xu8fYElx;(Leg(J^&it2@y# zCi^aThTXm0`IF6I3$Ac~=lm%sxT5S}=-_tK+lGcYY|io^cZQ>^HZ*v<^HjU(5zg{3 z=YE@WBR<^g+;^^Mbd0TJ6D^?K7aFkv^lBaMG@M?$F9>URv3xe<>yS-YeG49Kub1~r zisH~<<{zluva=?U_)8|OqmhErr{Aoz| z_TVz-{?*~-MTs#*qwV-wIrek96JwTHZKb2JYXu7j+u8CfP{|lu34~eiup#Rra3f1) zE1BSE@7@a0Aeh$|8C*dk?6c`)w3TK!aGJdxf&z(Ubx&|yR5aFMo8Df?OxMneAgHwi z(1X8so^Ch2owFhg@J??KzTIHQCenkERJO@^vK`>sLtWl5ROH-5>e_$KR&vt&Ybc%r zB2E^O7C;gA5vNFj_^rREwx_N1VMks~kgfEakaAjH>!lAq(E3)PKv{pKiCBAE)?eyh zb>f@Lr4#EdP5{U{%)~iy3%$;LLE&DQ+4HUUppEpnZ%Fu7)?=n?mOZ?DB9uvAgkYz# zl_WXhlI-pz`xy857-53oZO)&b4&UzF=M3LklpJF?Aw1KQjv?XIMJX`=wv{G2 zG7A#zo@&tX9=r%rLmrGl!Z*3oVluswt*oZ4bN`U=^5Bh*)!`f9hK4F^C8Hg-l0`D7(hHrK5KZC>JSv|oU!?zZc*(}sGSAWz6*015Wxc($Z-2+)|y^aCtMYWh-ltPc%tF@*2ZP$AJ zrf{@%kG8wh&|{2u@2W$G5#;tdY*$yfzefP1AB4^_U+C3eBC56t4R?AQCYiLVR0sTcq@HRvRYSW^-Kz~QQMY=724LS+PfEevY zZ)LCBim>9ajk(%OE&gf*+%!A72rB+g^aNLLN7%=nfi$~&CuRRY!cty4%0syKeCMsD zn9up#p@ci}g~bMZv?ILTbiSrP?I@#NyXjWC4tJI}pfe@qSe@nJPz!p8FVSV9BLHQ& zOF+H4&VjUs{^2sJmY9XEN>5>L2C1vQ_bI)uN02>OW6F zameyf{mC)?(EAWxwNLbX{%a=16DR%9#cs_4Z$W*N;QykhMFeY3Pn#k{3BpdUt+vul zu1H5C4WReKp&!sgAYL%kVlO~H4?YC7Bu5%Hhn-T?q1Q&li9q_8hzKhyM8_T&%k=JN z%k=vWM_(YW^c@csg>MSTn87_aYy5$h4HDZ*k{x8LOwUv_c2YWWVlub>mKkw05RV#* zI`7}S*_{jp+Q;OBr;6a+{l>>2aQqYuJ}=t@Bhpr|Bs&d+;3Svt%q-Xj*3qRT$DG)D z`4;E?U{s&!N^)q!phonqoaHNPXgSys~)>+E|g3;E8u z=4L!P1m#>>Sx6TacVhRtUERv^YV2)j>vX28@Cb5iuXL_SVz^5x3+ck*9^Jj}yKWov z_Stj2wCy_6HID$XQFs2^*lcw>jzXv`q^A-LRTCp^C9|+mtQxaQ-e2vRuEfX?d<8&S zkI6cO{V#xyZ@}B;IQ~sLa|%}N#1m*-ent!*Ua(*jfK(D2bR25htRiK2e# zS{>r9vkeV(i7|FoeP;u@x$?H6a)$08U8N)PJcyw7of{0&>numc->{sem-^}u@7CA; zk^$XZJ8i;+;pN(U>xgs~wU0NTn`OUUuDzcQanBjO<)aPw=IX;m_3%5kyuSVyKt}q$ z${@SR@|!vuB++49|WM7n|qw0pM!+w6Ix)cS*UsC%$)Ott;R z1_I{lBSiJG_7Cgamv*h8{_iUT%Kw2P|27@!1bzK48wi-|_b>s)`m1$Bx{CVmHlR0> zU#FB&(cl ze_BVRD~OQ&4cKPyA0_ISLUq=suf{bUXJZ&6P6IHLJo%mlLAxlihZ47Ut%C+iX5ke? zVjQ`DJw7N!d(11PEdW(xHmz?}qSifN0p*Jc6IcisM8JsrEF<@nF2-_P1@H2JtWRW& z0Ic6)X1#lptanmb=VpIE$HZdn7L$I$EEBO#e2aLe$nA@OVKnub?fLn;q>}(lz6=0^ zejlf*{Ob2%rp3O|3CH++sAKXZc7;L1gJm}TYWO-v?fguyy#$DDF?@p#g4#Q3I4IL8^U_weJ zO#e-C8k%g=OkR0DCd153{=Bv+CU^greS>0S2kBuQi#QmF^!qMh`e*XafK1M2!T~gS z9|LGkFsw-)ZxlQ#{;OlM0>fi48P+tDy#g}%!+*{bA67Ad#^kG*hw<;J&oQLZ@vp;r ze5Dh(L@;?Dq59WkNI)hBo{!0{05JGu-Rh>eJcI`s(ZjJ%{!_>13~VWrRuQIuCieym zSI;xy0Op3yAN(WnU`e7};EAk0Gc@ZDt)!OYy27}V;kiHNF7XmTB-=--$YB9qSD*#)VWz-#A`_Om`Xrs#B3vbKpTx<@&Ou- zqp?JdZS>({y^Z#jC?ff{(N;j~y2ezUOcSt+O?pG%H)*3a0d4dcQ`bpkwoxhr7`(2r zjedAdFOf}^$iI;q0IfdG9>X31B|gu^PBPf&>(4Zea3}MDVH{%Sa5~^eKR_qW8A*9<>{LzeWZYdA(wm;=r z%WRZxW{J#3IrXnbZNITm3IL=@RQib`k>JQ|l>ahGIhyI^8GwClFv<+Z*BRwdK%Hvo^eN+yj`A%s%;1={ z{~D9gv2ND>Oa?IcQ)BJ7HL!k@%DR8;U!}5+(eWysHg_8X!{`93tTZsu(N z%jTvariIjZAYKMAu-;hfqX49K8qbKDp$`8_e}pM2okog|_0tHpVEq=Afd8g&Pr#;N zH%nv|`S(T5XbMjPNNWo3VK!a(k$+>n$|Tjs-CZXWjq0U`1b&pSGN3WWF&Uj7nVZ0X z#;i9s#@d(ktRKZpc%UY*5727wuw$>*03Jq90b_im;*UmX#Usc9K9r=XK=d4w(}`f# z{-X@g11u>o-4N;YZ=I5v{i4Lnl!@Bwz=3C0oH{*wou1=k-)bDM!gerl+<>WXz~@y3 z2^1gBSPn33s(JA|EnqDJ=r}fuv={*NOsjJIwBSJH_-Uq~y2t46G@h;CS-R8AaV~VP z(~zl2UTfyq%ustX$7Vk|^n!`wFEM?t*YTGCP`%<|9lztT0S!9-mw?xF+yi4Hjbk%I zGnt&uE6fq}9tH@Y=bA4fL?9p7l?_-BJxm>G&Tb8Hsr#PcMQ zj^ho~@=n6Jz2Y;bp!)F*Ivo!M&r*Sa*SzABfI7}(ayqXti!{Q_ zu~{UCnd1->#~~`m=q2lPI$nSf4IOXC?76`!D)1zxd4-vwPoFb+g_)t}89=XNUE8Jg z0Mh_q&~XYlu$9j07&0r)Qz?8yx|6BMo?+jvdGhy&&mhvBand?^661&WDoRRkLhxnT9KVZ*7v1or%kiIWBz$uLIo46K)6Lfz~tA2Suz%lqq? z9|Gp3*^Fb>`r84up20K&ILwgqu^ww?{WPY(&8(j&)_M6sotNh$j>F5V7)NE@w;Ydg zO}on5Os$u5R){DaHW*4=Pzc9=FSHYw^4p2@mG@A3lWt_XJ5=@J7F;?$l^_Wx%+2Nz3&NDHL?ct z@XuoL{XL-a_su1(XmaG@UX$Y!%&50ij`>Vcb&*M5Ym&r35@{l6o?nicFba#N$}xp= zlwq?u%3o}fW2HwgM=hqwTPjBtD9BNf=E1ExIZ}7AMP2~a^GkADBa7S^&?0wny_!XS zck3nT(F#eoJ;KffG<8_98XKsn}ct(qKH;$D47z8h7x)F3wq zG2|DZ<8^YB?_@dJnB=&QTgX+$76N$>yGS2BrExkE&wzx%-vGB>hPy@wm(FladExVn zp~>7I_o~d9n9y&j%<)W6nJhT)mDZNFAoPOA4j`(xT~jijED|#B(~i^xYr`cqnMR%snB;aMKyvvtYc*t;8NsbQ- zbw0Qs^Xn}YV+{x(e8}x?$!5(5Z^zgiaukE;`Q=#JNRH)BY z0-7AXbaKqz#&WF3H2eAGn9xX$+XKq+3|FhkaVhRKze+)!Ej7qBLJ(z1%?Dp<7Fn?s z?c*$F!_O~AR3kZp1IkgFZ)_jwxYy)xq0W}d@c>hl+sAmF6vwLB9@jTZj*EC)tRL~5 z!ShzrBe&o4jB?D!J)F1*Kbkn7W3ru8NKX(UqEQ}7lMt(_gq*ob$qHHNH&(N6m-NWf*-hw)@!oGV{9bN0cFJlNNvTV zIs|1$v(o4tb#w@Jg>7{o_nh)Afhr86U*9~DBTtE%$96-wW~~MNkjsMY#E&MJRTZp- z7W)xoS%@ZE z2kAdLZ(M-h2$F5bgnILAc1t6{`WOT=+sp+C^u6g-xJQMT83Y@P>RZ*ydNXx(gfL2H zvl7I0=``lZn`yE3jhyi`yjcq$=2o`+8KYpyxQAf3;YV}Er%-?EESAFL<@j+xXR*DA zkEo}ID%ofbPEEJ6PlXt|@bRWWFtf$Jon;hk2JTVeRQ#wz*tamV-YSDV$;6d0#Ctlq z!h~G6fpRk~w!4vF8x4Y)Eq3l{qhO1155Zo-k7lurm_Kiw#a?IfsxQXrWV?D3eDM)b zZeAOk-AJ&h2Eoi0>uC~f{Y(~Y4SqDij$mHARVJ$f896R?kUp=_qW##7?1?Xda5F9T z4>7RNx#C|9Lk+XVMsd|zR6O()3-&X9R9B?=e%WAAE$hgB0~u``Snbs$dvXIywi>hM zI*Ua$-NvdBY>YkG8j;gPPxcsBtqIl%_exF8ohQ1EX~dE2%2ZG@d+`4~Nsgi01F{1X z?X=zmBAE7oYyzk-zAe8UdO^wcg{G!4Rr&yF_R9H;s>ygA?prG39ZaJ&GIju_LB=DP z0rxNCFHa~kdMa)CHRutgPgZGC{f|IFpbto*&CP!DZ`tT5{E{q zmYhJAd|fA_3mvD{)tN21{&7OpWPAYks*LJzSU0j$CN<@$M+Di~Ou`_diWqPleH#!B z64HFXe>+~nb%+3L%YPRkQyR2dv*W)Jkeilq-wdOSxwuzlRNIw)T&@VI&D_4mGz>zj zn1RRC_XE=)WjvHc3@{Bc z(tN*v8OL%ZiY0R}GLyFIq}*K|NXo8^ta)o`PRpg-4jfwN+w$1@GB6ENK91>p|5858 zl?Y1?AQ|t~$#??YQPY;}�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�@)(SxC;WqKjT}02oI<<41 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𝔒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

~vNT&BuMk;*O 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�@)(b$|p*Ha? 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 aP#?r!rZNZ094K?3%z-io${fhcf&T+~tA=3! literal 0 HcmV?d00001 diff --git a/cart.db b/cart.db new file mode 100644 index 0000000000000000000000000000000000000000..83609d43d738fffdb3dd4f16d8343fe64da57269 GIT binary patch literal 1384 zcmWIca}9QJTEoD6{cV*?YLS9ZVqSVtW^pl)so|AakeH{b5Um)?Ko=0~5$3FG=xFS# zYixksLInl}AUgBzrzsA%YJ?f;8ERtJOjS{0-70x{uO!f|NtFu0C5bsXnfZAN>Xv5o z4O^#RP_UZ%>KYj02m@enH!v{d2DMBJ%Fj*AOU}$oR|rmYPlUS@60USe3b1f>(ls=~ z?pOhE8fZ$6P7exjR|qLC%`Pn}RWO1%6}u*yh(f~E98b6^0PSUDh+{dhG&nW6D78c( zKTW~4EVU>%zbI8fBQ)5NZn+B*u3o^rWrQPdIe^2}t!RH-aDHiCih^H$S!xbEeCb&j rz{AxLhf^6q;*1O_aw}896Z2A1i&Be<71E0Ga}^?s=^LyJ#HLpO9*S~5 literal 0 HcmV?d00001 diff --git a/license.txt b/license.txt new file mode 100644 index 00000000..08c2ad76 --- /dev/null +++ b/license.txt @@ -0,0 +1,35 @@ +bsnes License: +-------------- +You are free to redistribute this software, and its source code; provided +there is no charge for the software, nor any charge for the medium used to +distribute the software. You are also free to use and modify the source code +as you desire for personal use only. No publically-released derivative works +of this program nor its source code are permitted without my permission, +though I will likely grant you permission if you ask me. You must also abide +by the terms of any additional source code licenses contained within this +program. + +Simple DirectMedia Layer License: +--------------------------------- +The Simple DirectMedia Layer (SDL for short) is a cross-platform library +designed to make it easy to write multi-media software, such as games and +emulators. + +The Simple DirectMedia Layer library source code is available from: +http://www.libsdl.org/ + +This library is distributed under the terms of the GNU LGPL: +http://www.gnu.org/copyleft/lesser.html + +JMA License: +------------ +JMA is licensed under the GNU GPL. I have received special exemption from +Nach to use this library in bsnes. + +Licensing Exemptions: +--------------------- +libco, the cooperative multithreading library used by bsnes, is public domain. +You may obtain the latest version at: http://byuu.org/ + +Richard Bannister has asked for and received my permission to distribute +a binary-only port of bsnes on the Mac OS X platform. diff --git a/readme.txt b/readme.txt new file mode 100644 index 00000000..0e4762af --- /dev/null +++ b/readme.txt @@ -0,0 +1,124 @@ +bsnes +Version 0.018 +Author: byuu + + +General +------- +bsnes is a Super Nintendo / Super Famicom emulator that began on +October 14th, 2004. + +The latest version can be downloaded from: +http://byuu.org/ + +Please see license.txt for important licensing information. + + +Known Bugs +---------- +Koushien 2 (J): +- Severity: critical +- Issue: game periodically crashes +- Cause: unknown, possibly S-SMP related + +Mega lo Mania (J): +- Severity: minor +- Issue: horizontal line flickering during intro +- Cause: caching of OAM occurs too early. Not fixable without dot-based PPU core + +Street Racer (J): +- Severity: minor +- Issue: track sometimes flickers every several frames +- Cause: unknown, possibly timing related + +Unirally (J), Uniracers (U, E): +- Severity: critical +- Issue: 2-player mode sprites do not display at the correct positions +- Cause: mid-frame OAM writes. Not fixable without dot-based PPU core + + +Known Limitations +----------------- +S-CPU +- Invalid DMA / HDMA transfers (eg WRAM<>WRAM) not fully emulated +- Multiply / Divide register delays not implemented + +S-SMP +- Cycle breakdown of opcodes is theoretical, but mostly correct + +S-PPU +- Uses scanline-based renderer. This is very inaccurate, but very + few games rely on mid-scanline writes to function correctly +- Does not support FirstSprite+Y priority +- OAM / CGRAM accesses during active display not supported correctly +- RTO flags are not calculated on frames that are skipped when frameskipping + is enabled. This provides a major speedup, however it will cause in issues + in games that test these flags, eg the SNES Test Program Electronics Test. + Turning frameskipping off will allow RTO flag calculation on every frame + +S-DSP +- Runs at 32khz. Hardware S-DSP likely runs at 1.024mhz to perform + multiple reads / writes per sample. Sound is still output at 32khz, + of course + +Hardware Bugs +- CPUr1 HDMA crashing bug not emulated +- CPU<>APU communication bus conflicts not emulated + + +Unsupported Hardware +-------------------- +SA-1 +Coprocessor used in many popular games, including: +- Dragon Ball Z Hyper Dimension +- Kirby Super Star +- Kirby's Dreamland 3 +- Marvelous +- SD Gundam G-NEXT +- Super Mario RPG + +Super FX +Coprocessor used in many popular games, including: +- Doom +- Star Fox +- Star Fox 2 (unreleased beta) +- Super Mario World 2: Yoshi's Island + +SPC7110 +Coprocessor used only by the following games: +- Far East of Eden Zero +- Far East of Eden Zero: Shounen Jump no Shou +- Momotarou Densetsu Happy +- Super Power League 4 + +DSP-3 +Coprocessor used only by SD Gundam GX + +DSP-4 +Coprocessor used only by Top Gear 3000 + +ST010 / ST011 / ST018 +SETA coprocessors used by very few games + +BS-X (Broadcast Satellite) +Add-on unit sold only in Japan that played specially-made games that +were downloaded via satellite + +BS-X Flashcart +Flash cartridge used by BS-X, as well as some standalone games by +Asciisoft + +Bandai Sufami Turbo +Special cartloader to play some Bandai games + +Super Gameboy +Cartridge passthrough used for playing Gameboy games + + +Unsupported controllers +----------------------- +Mouse +Super Scope +Justifier +Multitap (4-port) +Multitap (5-port) diff --git a/src/base.h b/src/base.h index 6a27466e..66624047 100644 --- a/src/base.h +++ b/src/base.h @@ -1,4 +1,4 @@ -#define BSNES_VERSION "0.018" +#define BSNES_VERSION "0.018.04" #define BSNES_TITLE "bsnes v" BSNES_VERSION #define MEMCORE bMemBus @@ -14,10 +14,10 @@ #define CHEAT_SYSTEM //enable GZ, ZIP format support -#define GZIP_SUPPORT +//#define GZIP_SUPPORT //enable JMA support -#define JMA_SUPPORT +//#define JMA_SUPPORT //snes core polymorphism //(allow runtime cpu/smp/dsp/ppu/bus selection, ~10% speed hit) diff --git a/src/cpu/bcpu/bcpu.cpp b/src/cpu/bcpu/bcpu.cpp deleted file mode 100644 index 6edfd6b3..00000000 --- a/src/cpu/bcpu/bcpu.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "../../base.h" - -#include "core/core.cpp" -#include "memory/memory.cpp" -#include "dma/dma.cpp" -#include "timing/timing.cpp" - -#include "bcpu_exec.cpp" -#include "bcpu_mmio.cpp" -#include "bcpu_int.cpp" - -uint8 bCPU::pio_status() { return status.pio; } - -void bCPU::run() { - if(run_state.hdma) { - exec_hdma(); - return; - } - - if(run_state.dma) { - exec_dma(); - return; - } - - if(status.cycle_pos == 0) { //interrupts only trigger on opcode edges - if(run_state.irq && !run_state.stp) { - run_state.irq = false; - if(time.nmi_pending == true) { - time.nmi_pending = false; - aa.w = (regs.e == false) ? 0xffea : 0xfffa; - } else if(time.irq_pending == true) { - time.irq_pending = false; - aa.w = (regs.e == false) ? 0xffee : 0xfffe; - } - irq_run(); - } - } - - exec_cycle(); -} - -void bCPU::power() { - region = snes->region(); - - regs.a = regs.x = regs.y = 0x0000; - regs.s = 0x01ff; - reset(); -} - -void bCPU::reset() { -//reset vector location - regs.pc.d = 0; - regs.pc.l = r_mem->read(0xfffc); - regs.pc.h = r_mem->read(0xfffd); - -//registers are not fully reset by SNES - regs.x.h = 0x00; - regs.y.h = 0x00; - regs.s.h = 0x01; - regs.d = 0x0000; - regs.db = 0x00; - regs.p = 0x34; - regs.e = 1; - regs.mdr = 0x00; - - time_reset(); - mmio_reset(); - dma_reset(); - - run_state.hdma = false; - run_state.dma = false; - run_state.irq = false; - run_state.wai = false; - run_state.stp = false; - - status.cycle_pos = 0; - status.cycle_count = 0; - status.cycles_executed = 0; - - apu_port[0] = 0x00; - apu_port[1] = 0x00; - apu_port[2] = 0x00; - apu_port[3] = 0x00; - - frame(); - -//initial latch values for $213c/$213d -//[x]0035 : [y]0000 (53.0 -> 212) [lda $2137] -//[x]0038 : [y]0000 (56.5 -> 226) [nop : lda $2137] - add_cycles(186); -} - -bCPU::bCPU() { - init_op_tables(); -} - -bCPU::~bCPU() {} diff --git a/src/cpu/bcpu/bcpu.h b/src/cpu/bcpu/bcpu.h deleted file mode 100644 index 41e802c0..00000000 --- a/src/cpu/bcpu/bcpu.h +++ /dev/null @@ -1,165 +0,0 @@ -class bCPU : public CPU { -public: -#include "core/core.h" -#include "memory/memory.h" -#include "dma/dma.h" -#include "timing/timing.h" - -enum { NTSC = 0, PAL = 1 }; -uint8 region; - -enum { - DMASTATE_DMASYNC, - DMASTATE_DMASYNC2, - DMASTATE_DMASYNC3, - DMASTATE_RUN, - DMASTATE_CPUSYNC, - - HDMASTATE_IDMASYNC, - HDMASTATE_IDMASYNC2, - HDMASTATE_IDMASYNC3, - HDMASTATE_ICPUSYNC, - - HDMASTATE_DMASYNC, - HDMASTATE_DMASYNC2, - HDMASTATE_DMASYNC3, - HDMASTATE_RUN, - HDMASTATE_CPUSYNC -}; - -struct { - bool hdma; - bool dma; - bool irq; - bool stp; - bool wai; -} run_state; - -struct { - uint8 cycle_pos, cycle_count; - uint8 opcode; - uint32 cycles_executed; - - uint8 dma_state, hdma_state; - uint32 dma_cycle_count, hdma_cycle_count; - -//$4207-$420a - uint16 virq_trigger, hirq_trigger; - -//$2181-$2183 - uint32 wram_addr; - -//$4016-$4017 - bool joypad_strobe_latch; - uint8 joypad1_read_pos, joypad2_read_pos; - -//$4200 - bool nmi_enabled; - bool hirq_enabled, virq_enabled; - bool auto_joypad_poll; - -//$4201 - uint8 pio; - -//$4202-$4203 - uint8 mul_a, mul_b; - -//$4204-$4206 - uint16 div_a; - uint8 div_b; - -//$4207-$420a - uint16 hirq_pos, virq_pos; - -//$4214-$4216 - uint16 r4214; - uint16 r4216; -} status; - - inline bool hdma_test(); - inline bool nmi_test(); - inline bool irq_test(); - - inline uint8 pio_status(); - inline void run(); - inline uint32 clocks_executed(); - inline void power(); - inline void reset(); - - inline void irq_run(); - -//mmio commands - void mmio_reset(); - uint8 mmio_r2180(); - uint8 mmio_r4016(); - uint8 mmio_r4017(); - uint8 mmio_r4210(); - uint8 mmio_r4211(); - uint8 mmio_r4212(); - uint8 mmio_r4213(); - uint8 mmio_r4214(); - uint8 mmio_r4215(); - uint8 mmio_r4216(); - uint8 mmio_r4217(); - uint8 mmio_r4218(); - uint8 mmio_r4219(); - uint8 mmio_r421a(); - uint8 mmio_r421b(); - uint8 mmio_r43x0(uint8 i); - uint8 mmio_r43x1(uint8 i); - uint8 mmio_r43x2(uint8 i); - uint8 mmio_r43x3(uint8 i); - uint8 mmio_r43x4(uint8 i); - uint8 mmio_r43x5(uint8 i); - uint8 mmio_r43x6(uint8 i); - uint8 mmio_r43x7(uint8 i); - uint8 mmio_r43x8(uint8 i); - uint8 mmio_r43x9(uint8 i); - uint8 mmio_r43xa(uint8 i); - uint8 mmio_r43xb(uint8 i); - void mmio_w2180(uint8 value); - void mmio_w2181(uint8 value); - void mmio_w2182(uint8 value); - void mmio_w2183(uint8 value); - void mmio_w4016(uint8 value); - void mmio_w4200(uint8 value); - void mmio_w4201(uint8 value); - void mmio_w4202(uint8 value); - void mmio_w4203(uint8 value); - void mmio_w4204(uint8 value); - void mmio_w4205(uint8 value); - void mmio_w4206(uint8 value); - void mmio_w4207(uint8 value); - void mmio_w4208(uint8 value); - void mmio_w4209(uint8 value); - void mmio_w420a(uint8 value); - void mmio_w420b(uint8 value); - void mmio_w420c(uint8 value); - void mmio_w420d(uint8 value); - void mmio_w43x0(uint8 value, uint8 i); - void mmio_w43x1(uint8 value, uint8 i); - void mmio_w43x2(uint8 value, uint8 i); - void mmio_w43x3(uint8 value, uint8 i); - void mmio_w43x4(uint8 value, uint8 i); - void mmio_w43x5(uint8 value, uint8 i); - void mmio_w43x6(uint8 value, uint8 i); - void mmio_w43x7(uint8 value, uint8 i); - void mmio_w43x8(uint8 value, uint8 i); - void mmio_w43x9(uint8 value, uint8 i); - void mmio_w43xa(uint8 value, uint8 i); - void mmio_w43xb(uint8 value, uint8 i); - - uint8 mmio_read (uint16 addr); - void mmio_write(uint16 addr, uint8 data); - -enum { CYCLE_OPREAD, CYCLE_READ, CYCLE_WRITE, CYCLE_IO }; - inline void pre_exec_cycle(); - inline void exec_hdma(); - inline void exec_dma(); - inline void exec_cycle(); - inline void last_cycle(); - inline bool in_opcode(); - - bCPU(); - ~bCPU(); -}; diff --git a/src/cpu/bcpu/bcpu_exec.cpp b/src/cpu/bcpu/bcpu_exec.cpp deleted file mode 100644 index 9e22e43e..00000000 --- a/src/cpu/bcpu/bcpu_exec.cpp +++ /dev/null @@ -1,163 +0,0 @@ -void bCPU::last_cycle() { - time.nmi_pending |= nmi_test(); - time.irq_pending |= irq_test(); - - run_state.irq = (time.nmi_pending || time.irq_pending); -} - -void bCPU::pre_exec_cycle() { - if(!run_state.dma && !run_state.hdma)return; - -int c, z; - if(run_state.hdma) { - switch(status.hdma_state) { - case HDMASTATE_ICPUSYNC: - case HDMASTATE_CPUSYNC: - c = status.cycle_count; - z = c - (status.hdma_cycle_count % c); - if(!z)z = c; - add_cycles(z); - run_state.hdma = false; - break; - } - } - - if(run_state.dma) { - switch(status.dma_state) { - case DMASTATE_CPUSYNC: - c = status.cycle_count; - z = c - (status.dma_cycle_count % c); - if(!z)z = c; - add_cycles(z); - run_state.dma = false; - break; - } - } -} - -void bCPU::exec_hdma() { -int n; -static int z; - switch(status.hdma_state) { - case HDMASTATE_IDMASYNC: - status.hdma_cycle_count = 0; - z = 0; - if(!run_state.dma) { - exec_cycle(); - status.hdma_state = HDMASTATE_IDMASYNC2; - } else { - status.hdma_state = HDMASTATE_IDMASYNC3; - } - break; - case HDMASTATE_IDMASYNC2: - n = 8 - dma_counter() + 8; - add_cycles(n); - status.hdma_cycle_count += n; - status.hdma_state = HDMASTATE_IDMASYNC3; - break; - case HDMASTATE_IDMASYNC3: - hdma_init(); - if(!run_state.dma) { - status.hdma_state = HDMASTATE_ICPUSYNC; - } else { - run_state.hdma = false; - } - break; - case HDMASTATE_ICPUSYNC: - exec_cycle(); - break; - - case HDMASTATE_DMASYNC: - status.hdma_cycle_count = 0; - z = 0; - if(!run_state.dma) { - exec_cycle(); - status.hdma_state = HDMASTATE_DMASYNC2; - } else { - status.hdma_state = HDMASTATE_DMASYNC3; - } - break; - case HDMASTATE_DMASYNC2: - n = 8 - dma_counter() + 8; - add_cycles(n); - status.hdma_cycle_count += n; - status.hdma_state = HDMASTATE_DMASYNC3; - break; - case HDMASTATE_DMASYNC3: - if(channel[z].hdma_line_counter) { - add_cycles(8); - status.hdma_cycle_count += 8; - } - if(++z < 8)break; - status.hdma_state = HDMASTATE_RUN; - break; - case HDMASTATE_RUN: - hdma_run(); //updates status.hdma_cycle_count - if(!run_state.dma) { - status.hdma_state = HDMASTATE_CPUSYNC; - } else { - run_state.hdma = false; - } - break; - case HDMASTATE_CPUSYNC: - exec_cycle(); - break; - } -} - -void bCPU::exec_dma() { -int n; -static int z; - switch(status.dma_state) { - case DMASTATE_DMASYNC: - exec_cycle(); - status.dma_state = DMASTATE_DMASYNC2; - break; - case DMASTATE_DMASYNC2: - n = 8 - dma_counter() + 8; - add_cycles(n); - status.dma_cycle_count = n; - z = 0; - status.dma_state = DMASTATE_DMASYNC3; - break; - case DMASTATE_DMASYNC3: - if(channel[z].dma_enabled == true) { - add_cycles(8); - status.dma_cycle_count += 8; - } - if(++z < 8)break; - status.dma_state = DMASTATE_RUN; - break; - case DMASTATE_RUN: - dma_run(); //updates status.dma_cycle_count - cycle_edge(); - break; - case DMASTATE_CPUSYNC: - exec_cycle(); - break; - } -} - -void bCPU::exec_cycle() { - if(status.cycle_pos) { - (this->*optbl[status.opcode])(); - #ifdef DEBUGGER - if(status.cycle_pos == 0) { - snes->notify(SNES::CPU_EXEC_OPCODE_END); - } - #endif - return; - } - -//on first cycle? -#ifdef DEBUGGER - snes->notify(SNES::CPU_EXEC_OPCODE_BEGIN); -#endif - status.opcode = op_readpc(); - status.cycle_pos = 1; -} - -//only return true when we are on an opcode edge -bool bCPU::in_opcode() { - return (status.cycle_pos != 0); -} diff --git a/src/cpu/bcpu/bcpu_int.cpp b/src/cpu/bcpu/bcpu_int.cpp deleted file mode 100644 index 8dc97742..00000000 --- a/src/cpu/bcpu/bcpu_int.cpp +++ /dev/null @@ -1,50 +0,0 @@ -void bCPU::irq_run() { - mem_read(regs.pc.d); - cpu_io(); - if(!regs.e)op_writestack(regs.pc.b); - op_writestack(regs.pc.h); - op_writestack(regs.pc.l); - op_writestack(regs.e ? (regs.p & ~0x10) : regs.p); - rd.l = op_readaddr(aa.w + 0); - regs.pc.b = 0x00; - regs.p.i = 1; - regs.p.d = 0; - rd.h = op_readaddr(aa.w + 1); - regs.pc.w = rd.w; -#ifdef DEBUGGER -//let debugger know the new IRQ opcode address - snes->notify(SNES::CPU_EXEC_OPCODE_END); -#endif -} - -bool bCPU::nmi_test() { - if(time.nmi_transition == 0)return false; - time.nmi_transition = 0; - - run_state.wai = false; - return true; -} - -bool bCPU::irq_test() { - if(time.irq_transition == 1)goto _true; - - if(time.irq_read == 0) { - if(time.irq_line == 1 && (irq_trigger_pos_match(0) || irq_trigger_pos_match(2))) { - return false; - } - goto _true; - } - - if(time.irq_line == 0) { - time.irq_line = 1; - goto _true; - } - - return false; - -_true: - time.irq_transition = 0; - - run_state.wai = false; - return (regs.p.i) ? false : true; -} diff --git a/src/cpu/bcpu/bcpu_mmio.cpp b/src/cpu/bcpu/bcpu_mmio.cpp deleted file mode 100644 index 2f4f990f..00000000 --- a/src/cpu/bcpu/bcpu_mmio.cpp +++ /dev/null @@ -1,650 +0,0 @@ -void bCPU::mmio_reset() { -//$2181-$2183 - status.wram_addr = 0x000000; - -//$4016-$4017 - status.joypad_strobe_latch = 0; - status.joypad1_read_pos = 0; - status.joypad2_read_pos = 0; - -//$4200 - status.nmi_enabled = false; - status.hirq_enabled = false; - status.virq_enabled = false; - status.auto_joypad_poll = false; - -//$4201 - status.pio = 0xff; - -//$4202-$4203 - status.mul_a = 0xff; - status.mul_b = 0xff; - -//$4204-$4206 - status.div_a = 0xffff; - status.div_b = 0xff; - -//$4207-$420a - status.hirq_pos = 0x01ff; - status.virq_pos = 0x01ff; - -//$4214-$4217 - status.r4214 = 0x0000; - status.r4216 = 0x0000; -} - -//WMDATA -uint8 bCPU::mmio_r2180() { -uint8 r; - r = r_mem->read(0x7e0000 | status.wram_addr); - status.wram_addr++; - status.wram_addr &= 0x01ffff; - return r; -} - -//JOYSER0 -//7-2 = MDR -//1-0 = Joypad serial data -/* The joypad contains a small bit shifter that has 16 bits. - * Reading from 4016 reads one bit from this buffer, then moves - * the buffer left one, and adds a '1' to the rightmost bit. - * Writing a one to $4016 will fill the buffer with the current - * joypad button states, and lock the bit shifter at position - * zero. All reads will be the first buffer state, or 'B'. - * A zero must be written back to $4016 to unlock the buffer, - * so that reads will increment the bit shifting position. - */ -uint8 bCPU::mmio_r4016() { -uint8 r; - r = regs.mdr & 0xfc; - - if(status.joypad_strobe_latch == 1) { - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_B); - } else { - switch(status.joypad1_read_pos) { - case 0: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_B); break; - case 1: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_Y); break; - case 2: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_SELECT); break; - case 3: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_START); break; - case 4: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_UP); break; - case 5: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_DOWN); break; - case 6: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_LEFT); break; - case 7: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_RIGHT); break; - case 8: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_A); break; - case 9: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_X); break; - case 10: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_L); break; - case 11: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_R); break; - case 12: break; - case 13: break; - case 14: break; - case 15: break; //bits 12-15 always return 0 - //all subsequent reads return joypad connection status - case 16: r |= 1; break; //joypad connected bit - } - if(++status.joypad1_read_pos > 16)status.joypad1_read_pos = 16; - } - - return r; -} - -//JOYSER1 -//7-5 = MDR -//4-2 = Always 1 (pins are connected to GND) -//1-0 = Joypad serial data -uint8 bCPU::mmio_r4017() { -uint8 r; - r = regs.mdr & 0xe0; - r |= 0x1c; - - if(status.joypad_strobe_latch == 1) { - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_B); - } else { - switch(status.joypad2_read_pos) { - case 0: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_B); break; - case 1: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_Y); break; - case 2: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_SELECT); break; - case 3: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_START); break; - case 4: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_UP); break; - case 5: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_DOWN); break; - case 6: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_LEFT); break; - case 7: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_RIGHT); break; - case 8: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_A); break; - case 9: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_X); break; - case 10: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_L); break; - case 11: r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_R); break; - case 12: break; - case 13: break; - case 14: break; - case 15: break; //bits 12-15 always return 0 - //all subsequent reads return joypad connection status - case 16: r |= 1; break; //joypad connected bit - } - if(++status.joypad2_read_pos > 16)status.joypad2_read_pos = 16; - } - - return r; -} - -//RDNMI -//7 = NMI acknowledge -//6-4 = MDR -//3-0 = CPU (5a22) version -uint8 bCPU::mmio_r4210() { -uint8 r; - r = regs.mdr & 0x70; - r |= uint8(!time.nmi_read) << 7; - - if(!nmi_trigger_pos_match(0) && !nmi_trigger_pos_match(2)) { - time.nmi_read = 1; - } - - r |= (cpu_version & 0x0f); - return r; -} - -//TIMEUP -//7 = IRQ acknowledge -//6-0 = MDR -uint8 bCPU::mmio_r4211() { -uint8 r; - r = regs.mdr & 0x7f; - r |= uint8(!time.irq_read) << 7; - - if(!irq_trigger_pos_match(0) && !irq_trigger_pos_match(2)) { - time.irq_read = 1; - time.irq_line = 1; - time.irq_transition = 0; - } - - return r; -} - -//HVBJOY -//7 = in vblank -//6 = in hblank -//5-1 = MDR -//0 = joypad ready -uint8 bCPU::mmio_r4212() { -uint8 r; - r = regs.mdr & 0x3e; - -uint16 vs = overscan() ? 240 : 225; - -//auto joypad polling - if(time.v >= vs && time.v <= (vs + 2))r |= 0x01; - -//hblank - if(time.hc <= 2 || time.hc >= 1096)r |= 0x40; - -//vblank - if(time.v >= vs)r |= 0x80; - - return r; -} - -//RDIO -uint8 bCPU::mmio_r4213() { - return status.pio; -} - -//RDDIVL -uint8 bCPU::mmio_r4214() { - return status.r4214; -} - -//RDDIVH -uint8 bCPU::mmio_r4215() { - return status.r4214 >> 8; -} - -//RDMPYL -uint8 bCPU::mmio_r4216() { - return status.r4216; -} - -//RDMPYH -uint8 bCPU::mmio_r4217() { - return status.r4216 >> 8; -} - -//JOY1L -uint8 bCPU::mmio_r4218() { -uint8 r = 0x00; -uint16 v = vcounter(); - if(status.auto_joypad_poll == false)return 0x00; //can't read joypad if auto polling not enabled -//if(v >= 225 && v <= 227)return 0x00; //can't read joypad while SNES is polling input - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_A) << 7; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_X) << 6; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_L) << 5; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_R) << 4; - return r; -} - -//JOY1H -uint8 bCPU::mmio_r4219() { -uint8 r = 0x00; -uint16 v = vcounter(); - if(status.auto_joypad_poll == false)return 0x00; //can't read joypad if auto polling not enabled -//if(v >= 225 && v <= 227)return 0x00; //can't read joypad while SNES is polling input - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_B) << 7; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_Y) << 6; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_SELECT) << 5; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_START) << 4; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_UP) << 3; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_DOWN) << 2; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_LEFT) << 1; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD1, SNES::JOYPAD_RIGHT); - return r; -} - -//JOY2L -uint8 bCPU::mmio_r421a() { -uint8 r = 0x00; -uint16 v = vcounter(); - if(status.auto_joypad_poll == false)return 0x00; //can't read joypad if auto polling not enabled -//if(v >= 225 && v <= 227)return 0x00; //can't read joypad while SNES is polling input - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_A) << 7; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_X) << 6; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_L) << 5; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_R) << 4; - return r; -} - -//JOY2H -uint8 bCPU::mmio_r421b() { -uint8 r = 0x00; -uint16 v = vcounter(); - if(status.auto_joypad_poll == false)return 0x00; //can't read joypad if auto polling not enabled -//if(v >= 225 && v <= 227)return 0x00; //can't read joypad while SNES is polling input - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_B) << 7; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_Y) << 6; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_SELECT) << 5; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_START) << 4; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_UP) << 3; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_DOWN) << 2; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_LEFT) << 1; - r |= (uint8)snes->get_input_status(SNES::DEVICEID_JOYPAD2, SNES::JOYPAD_RIGHT); - return r; -} - -//DMAPx -uint8 bCPU::mmio_r43x0(uint8 i) { - return channel[i].dmap; -} - -//BBADx -uint8 bCPU::mmio_r43x1(uint8 i) { - return channel[i].destaddr; -} - -//A1TxL -uint8 bCPU::mmio_r43x2(uint8 i) { - return channel[i].srcaddr; -} - -//A1TxH -uint8 bCPU::mmio_r43x3(uint8 i) { - return channel[i].srcaddr >> 8; -} - -//A1Bx -uint8 bCPU::mmio_r43x4(uint8 i) { - return channel[i].srcbank; -} - -//DASxL -uint8 bCPU::mmio_r43x5(uint8 i) { - return channel[i].xfersize; -} - -//DASxH -uint8 bCPU::mmio_r43x6(uint8 i) { - return channel[i].xfersize >> 8; -} - -//DASBx -uint8 bCPU::mmio_r43x7(uint8 i) { - return channel[i].hdma_ibank; -} - -//A2AxL -uint8 bCPU::mmio_r43x8(uint8 i) { - return channel[i].hdma_addr; -} - -//A2AxH -uint8 bCPU::mmio_r43x9(uint8 i) { - return channel[i].hdma_addr >> 8; -} - -//NTRLx -uint8 bCPU::mmio_r43xa(uint8 i) { - return channel[i].hdma_line_counter; -} - -//??? -uint8 bCPU::mmio_r43xb(uint8 i) { - return channel[i].hdma_unknown; -} - -uint8 bCPU::mmio_read(uint16 addr) { -//APU - if((addr & 0xffc0) == 0x2140) { //$2140-$217f - return r_smp->port_read(addr & 3); - } - -//HDMA - if((addr & 0xff80) == 0x4300) { //$4300-$437f - uint i = (addr >> 4) & 7; - switch(addr & 0xf) { - case 0x0: return mmio_r43x0(i); - case 0x1: return mmio_r43x1(i); - case 0x2: return mmio_r43x2(i); - case 0x3: return mmio_r43x3(i); - case 0x4: return mmio_r43x4(i); - case 0x5: return mmio_r43x5(i); - case 0x6: return mmio_r43x6(i); - case 0x7: return mmio_r43x7(i); - case 0x8: return mmio_r43x8(i); - case 0x9: return mmio_r43x9(i); - case 0xa: return mmio_r43xa(i); - case 0xb: return mmio_r43xb(i); - case 0xc: return regs.mdr; //unmapped - case 0xd: return regs.mdr; //unmapped - case 0xe: return regs.mdr; //unmapped - case 0xf: return mmio_r43xb(i); //mirror of 43xb - } - } - - switch(addr) { - case 0x2180: return mmio_r2180(); //WMDATA - case 0x4016: return mmio_r4016(); //JOYSER0 - case 0x4017: return mmio_r4017(); //JOYSER1 - case 0x4210: return mmio_r4210(); //RDNMI - case 0x4211: return mmio_r4211(); //TIMEUP - case 0x4212: return mmio_r4212(); //HVBJOY - case 0x4213: return mmio_r4213(); //RDIO - case 0x4214: return mmio_r4214(); //RDDIVL - case 0x4215: return mmio_r4215(); //RDDIVH - case 0x4216: return mmio_r4216(); //RDMPYL - case 0x4217: return mmio_r4217(); //RDMPYH - case 0x4218: return mmio_r4218(); //JOY1L - case 0x4219: return mmio_r4219(); //JOY1H - case 0x421a: return mmio_r421a(); //JOY2L - case 0x421b: return mmio_r421b(); //JOY2H - case 0x421c: return 0x00; - case 0x421d: return 0x00; - case 0x421e: return 0x00; - case 0x421f: return 0x00; - } - - return regs.mdr; -} - -//WMDATA -void bCPU::mmio_w2180(uint8 value) { - r_mem->write(0x7e0000 | status.wram_addr, value); - status.wram_addr++; - status.wram_addr &= 0x01ffff; -} - -//WMADDL -void bCPU::mmio_w2181(uint8 value) { - status.wram_addr = (status.wram_addr & 0xffff00) | value; - status.wram_addr &= 0x01ffff; -} - -//WMADDM -void bCPU::mmio_w2182(uint8 value) { - status.wram_addr = (status.wram_addr & 0xff00ff) | (value << 8); - status.wram_addr &= 0x01ffff; -} - -//WMADDH -void bCPU::mmio_w2183(uint8 value) { - status.wram_addr = (status.wram_addr & 0x00ffff) | (value << 16); - status.wram_addr &= 0x01ffff; -} - -//JOYSER0 -//bit 0 is shared between JOYSER0 and JOYSER1, therefore -//strobing $4016.d0 affects both controller port latches. -//$4017 bit 0 writes are ignored. -void bCPU::mmio_w4016(uint8 value) { - status.joypad_strobe_latch = bool(value & 1); - - if(status.joypad_strobe_latch == 1) { - snes->poll_input(); - status.joypad1_read_pos = 0; - status.joypad2_read_pos = 0; - } -} - -//NMITIMEN -void bCPU::mmio_w4200(uint8 value) { - status.nmi_enabled = bool(value & 0x80); - status.virq_enabled = bool(value & 0x20); - status.hirq_enabled = bool(value & 0x10); - status.auto_joypad_poll = bool(value & 0x01); - - if(time.nmi_read == 0) { - if(time.nmi_line == 1 && !status.nmi_enabled == 0) { - time.nmi_transition = 1; - } - time.nmi_line = !status.nmi_enabled; - } - - if(status.virq_enabled == false && status.hirq_enabled == false) { - time.irq_line = 1; - time.irq_read = 1; - time.irq_transition = 0; - } - - update_interrupts(); -} - -//WRIO -void bCPU::mmio_w4201(uint8 value) { - if((status.pio & 0x80) && !(value & 0x80)) { - r_ppu->latch_counters(); - } - status.pio = value; -} - -//WRMPYA -void bCPU::mmio_w4202(uint8 value) { - status.mul_a = value; -} - -//WRMPYB -void bCPU::mmio_w4203(uint8 value) { - status.mul_b = value; - status.r4216 = status.mul_a * status.mul_b; -} - -//WRDIVL -void bCPU::mmio_w4204(uint8 value) { - status.div_a = (status.div_a & 0xff00) | (value); -} - -//WRDIVH -void bCPU::mmio_w4205(uint8 value) { - status.div_a = (status.div_a & 0x00ff) | (value << 8); -} - -//WRDIVB -void bCPU::mmio_w4206(uint8 value) { - status.div_b = value; - status.r4214 = (status.div_b) ? status.div_a / status.div_b : 0xffff; - status.r4216 = (status.div_b) ? status.div_a % status.div_b : status.div_a; -} - -//HTIMEL -void bCPU::mmio_w4207(uint8 value) { - status.hirq_pos = ((status.hirq_pos & 0xff00) | value) & 0x01ff; - update_interrupts(); -} - -//HTIMEH -void bCPU::mmio_w4208(uint8 value) { - status.hirq_pos = ((status.hirq_pos & 0x00ff) | (value << 8)) & 0x01ff; - update_interrupts(); -} - -//VTIMEL -void bCPU::mmio_w4209(uint8 value) { - status.virq_pos = ((status.virq_pos & 0xff00) | value) & 0x01ff; - update_interrupts(); -} - -//VTIMEH -void bCPU::mmio_w420a(uint8 value) { - status.virq_pos = ((status.virq_pos & 0x00ff) | (value << 8)) & 0x01ff; - update_interrupts(); -} - -//DMAEN -//DMA enable does not disable active HDMA channels -void bCPU::mmio_w420b(uint8 value) { - if(value != 0x00) { - run_state.dma = true; - status.dma_state = DMASTATE_DMASYNC; - } - - for(int i = 0; i < 8; i++) { - channel[i].dma_enabled = bool(value & (1 << i)); - //TODO: clearing read_index may interfere with DMA+HDMA occurring simultaneously - if(channel[i].dma_enabled)channel[i].read_index = 0; - } -} - -//HDMAEN -void bCPU::mmio_w420c(uint8 value) { - for(int i = 0; i < 8; i++) { - channel[i].hdma_enabled = bool(value & (1 << i)); - } -} - -//MEMSEL -void bCPU::mmio_w420d(uint8 value) { - r_mem->set_speed(value & 1); -} - -//DMAPx -void bCPU::mmio_w43x0(uint8 value, uint8 i) { - channel[i].dmap = value; - channel[i].direction = bool(value & 0x80); - channel[i].hdma_indirect = bool(value & 0x40); - channel[i].incmode = (value & 0x10) ? -1 : 1; - channel[i].fixedxfer = bool(value & 0x08); - channel[i].xfermode = value & 7; -} - -//BBADx -void bCPU::mmio_w43x1(uint8 value, uint8 i) { - channel[i].destaddr = value; -} - -//A1TxL -void bCPU::mmio_w43x2(uint8 value, uint8 i) { - channel[i].srcaddr = (channel[i].srcaddr & 0xff00) | value; -} - -//A1TxH -void bCPU::mmio_w43x3(uint8 value, uint8 i) { - channel[i].srcaddr = (channel[i].srcaddr & 0x00ff) | (value << 8); -} - -//A1Bx -void bCPU::mmio_w43x4(uint8 value, uint8 i) { - channel[i].srcbank = value; -} - -//DASxL -void bCPU::mmio_w43x5(uint8 value, uint8 i) { - channel[i].xfersize = (channel[i].xfersize & 0xff00) | value; -} - -//DASxH -void bCPU::mmio_w43x6(uint8 value, uint8 i) { - channel[i].xfersize = (channel[i].xfersize & 0x00ff) | (value << 8); -} - -//DASBx -void bCPU::mmio_w43x7(uint8 value, uint8 i) { - channel[i].hdma_ibank = value; -} - -//A2AxL -void bCPU::mmio_w43x8(uint8 value, uint8 i) { - channel[i].hdma_addr = (channel[i].hdma_addr & 0xff00) | value; -} - -//A2AxH -void bCPU::mmio_w43x9(uint8 value, uint8 i) { - channel[i].hdma_addr = (channel[i].hdma_addr & 0x00ff) | (value << 8); -} - -//NTRLx -void bCPU::mmio_w43xa(uint8 value, uint8 i) { - channel[i].hdma_line_counter = value; -} - -//??? -void bCPU::mmio_w43xb(uint8 value, uint8 i) { - channel[i].hdma_unknown = value; -} - -void bCPU::mmio_write(uint16 addr, uint8 data) { -//APU - if((addr & 0xffc0) == 0x2140) { //$2140-$217f - port_write(addr & 3, data); - return; - } - -//HDMA - if((addr & 0xff80) == 0x4300) { //$4300-$437f - uint i = (addr >> 4) & 7; - switch(addr & 0xf) { - case 0x0: mmio_w43x0(data, i); return; - case 0x1: mmio_w43x1(data, i); return; - case 0x2: mmio_w43x2(data, i); return; - case 0x3: mmio_w43x3(data, i); return; - case 0x4: mmio_w43x4(data, i); return; - case 0x5: mmio_w43x5(data, i); return; - case 0x6: mmio_w43x6(data, i); return; - case 0x7: mmio_w43x7(data, i); return; - case 0x8: mmio_w43x8(data, i); return; - case 0x9: mmio_w43x9(data, i); return; - case 0xa: mmio_w43xa(data, i); return; - case 0xb: mmio_w43xb(data, i); return; - case 0xc: return; //unmapped - case 0xd: return; //unmapped - case 0xe: return; //unmapped - case 0xf: mmio_w43xb(data, i); return; //mirror of 43xb - } - } - - switch(addr) { - case 0x2180: mmio_w2180(data); return; //WMDATA - case 0x2181: mmio_w2181(data); return; //WMADDL - case 0x2182: mmio_w2182(data); return; //WMADDM - case 0x2183: mmio_w2183(data); return; //WMADDH - case 0x4016: mmio_w4016(data); return; //JOYSER0 - case 0x4017: return; //unmapped - case 0x4200: mmio_w4200(data); return; //NMITIMEN - case 0x4201: mmio_w4201(data); return; //WRIO - case 0x4202: mmio_w4202(data); return; //WRMPYA - case 0x4203: mmio_w4203(data); return; //WRMPYB - case 0x4204: mmio_w4204(data); return; //WRDIVL - case 0x4205: mmio_w4205(data); return; //WRDIVH - case 0x4206: mmio_w4206(data); return; //WRDIVB - case 0x4207: mmio_w4207(data); return; //HTIMEL - case 0x4208: mmio_w4208(data); return; //HTIMEH - case 0x4209: mmio_w4209(data); return; //VTIMEL - case 0x420a: mmio_w420a(data); return; //VTIMEH - case 0x420b: mmio_w420b(data); return; //DMAEN - case 0x420c: mmio_w420c(data); return; //HDMAEN - case 0x420d: mmio_w420d(data); return; //MEMSEL - } -} diff --git a/src/cpu/bcpu/core/bcpugen.cpp b/src/cpu/bcpu/core/bcpugen.cpp deleted file mode 100644 index d0176818..00000000 --- a/src/cpu/bcpu/core/bcpugen.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#define CLASS_NAME "bCPU" -#include "../../../lib/opgen.cpp" - -int main() { - fph = fopen("op.h", "wb"); - fpt = fopen("optable.cpp", "wb"); - - generate("op_read.cpp", "op_read.b"); - generate("op_rmw.cpp", "op_rmw.b"); - generate("op_write.cpp", "op_write.b"); - generate("op_pc.cpp", "op_pc.b"); - generate("op_misc.cpp", "op_misc.b"); - - fclose(fph); - fclose(fpt); - - return 0; -} diff --git a/src/cpu/bcpu/core/cc.bat b/src/cpu/bcpu/core/cc.bat deleted file mode 100644 index 80920bad..00000000 --- a/src/cpu/bcpu/core/cc.bat +++ /dev/null @@ -1,3 +0,0 @@ -cl /O2 /wd4996 bcpugen.cpp -@pause -@del *.obj \ No newline at end of file diff --git a/src/cpu/bcpu/core/clean.bat b/src/cpu/bcpu/core/clean.bat deleted file mode 100644 index d807f14d..00000000 --- a/src/cpu/bcpu/core/clean.bat +++ /dev/null @@ -1 +0,0 @@ -@del *.exe diff --git a/src/cpu/bcpu/core/core.cpp b/src/cpu/bcpu/core/core.cpp deleted file mode 100644 index 51ff2a6e..00000000 --- a/src/cpu/bcpu/core/core.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "opfn.cpp" -#include "op_read.cpp" -#include "op_rmw.cpp" -#include "op_write.cpp" -#include "op_pc.cpp" -#include "op_misc.cpp" - -void bCPU::cpu_c2() { - if(regs.d.l != 0x00) { - cpu_io(); - } -} - -void bCPU::cpu_c4(uint16 x, uint16 y) { - if(!regs.p.x || (x & 0xff00) != (y & 0xff00)) { - cpu_io(); - } -} - -void bCPU::cpu_c6(uint16 addr) { - if(regs.e && (regs.pc.w & 0xff00) != (addr & 0xff00)) { - cpu_io(); - } -} - -void bCPU::init_op_tables() { - #include "optable.cpp" -} diff --git a/src/cpu/bcpu/core/core.h b/src/cpu/bcpu/core/core.h deleted file mode 100644 index f4ad7598..00000000 --- a/src/cpu/bcpu/core/core.h +++ /dev/null @@ -1,62 +0,0 @@ -/* External functions: - * void last_cycle(); - * void cpu_io(); - * uint8 mem_read(uint32 addr); - * void mem_write(uint32 addr, uint8 value); - */ - -void (bCPU::*optbl[256])(); - -CPUReg24 aa, rd; -uint8 dp, sp; - -//op_read - inline void op_adc_b(); - inline void op_adc_w(); - inline void op_and_b(); - inline void op_and_w(); - inline void op_bit_b(); - inline void op_bit_w(); - inline void op_cmp_b(); - inline void op_cmp_w(); - inline void op_cpx_b(); - inline void op_cpx_w(); - inline void op_cpy_b(); - inline void op_cpy_w(); - inline void op_eor_b(); - inline void op_eor_w(); - inline void op_lda_b(); - inline void op_lda_w(); - inline void op_ldx_b(); - inline void op_ldx_w(); - inline void op_ldy_b(); - inline void op_ldy_w(); - inline void op_ora_b(); - inline void op_ora_w(); - inline void op_sbc_b(); - inline void op_sbc_w(); -//op_rmw - inline void op_inc_b(); - inline void op_inc_w(); - inline void op_dec_b(); - inline void op_dec_w(); - inline void op_asl_b(); - inline void op_asl_w(); - inline void op_lsr_b(); - inline void op_lsr_w(); - inline void op_rol_b(); - inline void op_rol_w(); - inline void op_ror_b(); - inline void op_ror_w(); - inline void op_trb_b(); - inline void op_trb_w(); - inline void op_tsb_b(); - inline void op_tsb_w(); - - inline void cpu_c2(); - inline void cpu_c4(uint16 x, uint16 y); - inline void cpu_c6(uint16 addr); - - inline void init_op_tables(); - -#include "op.h" diff --git a/src/cpu/bcpu/core/op.h b/src/cpu/bcpu/core/op.h deleted file mode 100644 index 1b3f44f6..00000000 --- a/src/cpu/bcpu/core/op.h +++ /dev/null @@ -1,256 +0,0 @@ -void op_adc_const(); -void op_and_const(); -void op_cmp_const(); -void op_cpx_const(); -void op_cpy_const(); -void op_eor_const(); -void op_lda_const(); -void op_ldx_const(); -void op_ldy_const(); -void op_ora_const(); -void op_sbc_const(); -void op_adc_addr(); -void op_and_addr(); -void op_bit_addr(); -void op_cmp_addr(); -void op_cpx_addr(); -void op_cpy_addr(); -void op_eor_addr(); -void op_lda_addr(); -void op_ldx_addr(); -void op_ldy_addr(); -void op_ora_addr(); -void op_sbc_addr(); -void op_adc_addrx(); -void op_and_addrx(); -void op_bit_addrx(); -void op_cmp_addrx(); -void op_eor_addrx(); -void op_lda_addrx(); -void op_ldy_addrx(); -void op_ora_addrx(); -void op_sbc_addrx(); -void op_adc_addry(); -void op_and_addry(); -void op_cmp_addry(); -void op_eor_addry(); -void op_lda_addry(); -void op_ldx_addry(); -void op_ora_addry(); -void op_sbc_addry(); -void op_adc_long(); -void op_and_long(); -void op_cmp_long(); -void op_eor_long(); -void op_lda_long(); -void op_ora_long(); -void op_sbc_long(); -void op_adc_longx(); -void op_and_longx(); -void op_cmp_longx(); -void op_eor_longx(); -void op_lda_longx(); -void op_ora_longx(); -void op_sbc_longx(); -void op_adc_dp(); -void op_and_dp(); -void op_bit_dp(); -void op_cmp_dp(); -void op_cpx_dp(); -void op_cpy_dp(); -void op_eor_dp(); -void op_lda_dp(); -void op_ldx_dp(); -void op_ldy_dp(); -void op_ora_dp(); -void op_sbc_dp(); -void op_adc_dpx(); -void op_and_dpx(); -void op_bit_dpx(); -void op_cmp_dpx(); -void op_eor_dpx(); -void op_lda_dpx(); -void op_ldy_dpx(); -void op_ora_dpx(); -void op_sbc_dpx(); -void op_ldx_dpy(); -void op_adc_idp(); -void op_and_idp(); -void op_cmp_idp(); -void op_eor_idp(); -void op_lda_idp(); -void op_ora_idp(); -void op_sbc_idp(); -void op_adc_idpx(); -void op_and_idpx(); -void op_cmp_idpx(); -void op_eor_idpx(); -void op_lda_idpx(); -void op_ora_idpx(); -void op_sbc_idpx(); -void op_adc_idpy(); -void op_and_idpy(); -void op_cmp_idpy(); -void op_eor_idpy(); -void op_lda_idpy(); -void op_ora_idpy(); -void op_sbc_idpy(); -void op_adc_ildp(); -void op_and_ildp(); -void op_cmp_ildp(); -void op_eor_ildp(); -void op_lda_ildp(); -void op_ora_ildp(); -void op_sbc_ildp(); -void op_adc_ildpy(); -void op_and_ildpy(); -void op_cmp_ildpy(); -void op_eor_ildpy(); -void op_lda_ildpy(); -void op_ora_ildpy(); -void op_sbc_ildpy(); -void op_adc_sr(); -void op_and_sr(); -void op_cmp_sr(); -void op_eor_sr(); -void op_lda_sr(); -void op_ora_sr(); -void op_sbc_sr(); -void op_adc_isry(); -void op_and_isry(); -void op_cmp_isry(); -void op_eor_isry(); -void op_lda_isry(); -void op_ora_isry(); -void op_sbc_isry(); -void op_bit_const(); -void op_inc(); -void op_inx(); -void op_iny(); -void op_dec(); -void op_dex(); -void op_dey(); -void op_asl(); -void op_lsr(); -void op_rol(); -void op_ror(); -void op_inc_addr(); -void op_dec_addr(); -void op_asl_addr(); -void op_lsr_addr(); -void op_rol_addr(); -void op_ror_addr(); -void op_trb_addr(); -void op_tsb_addr(); -void op_inc_addrx(); -void op_dec_addrx(); -void op_asl_addrx(); -void op_lsr_addrx(); -void op_rol_addrx(); -void op_ror_addrx(); -void op_inc_dp(); -void op_dec_dp(); -void op_asl_dp(); -void op_lsr_dp(); -void op_rol_dp(); -void op_ror_dp(); -void op_trb_dp(); -void op_tsb_dp(); -void op_inc_dpx(); -void op_dec_dpx(); -void op_asl_dpx(); -void op_lsr_dpx(); -void op_rol_dpx(); -void op_ror_dpx(); -void op_sta_addr(); -void op_stx_addr(); -void op_sty_addr(); -void op_stz_addr(); -void op_sta_addrx(); -void op_stz_addrx(); -void op_sta_addry(); -void op_sta_long(); -void op_sta_longx(); -void op_sta_dp(); -void op_stx_dp(); -void op_sty_dp(); -void op_stz_dp(); -void op_sta_dpx(); -void op_sty_dpx(); -void op_stz_dpx(); -void op_stx_dpy(); -void op_sta_idp(); -void op_sta_ildp(); -void op_sta_idpx(); -void op_sta_idpy(); -void op_sta_ildpy(); -void op_sta_sr(); -void op_sta_isry(); -void op_bcc(); -void op_bcs(); -void op_bne(); -void op_beq(); -void op_bpl(); -void op_bmi(); -void op_bvc(); -void op_bvs(); -void op_bra(); -void op_brl(); -void op_jmp_addr(); -void op_jmp_long(); -void op_jmp_iaddr(); -void op_jmp_iaddrx(); -void op_jmp_iladdr(); -void op_jsr_addr(); -void op_jsr_long(); -void op_jsr_iaddrx(); -void op_rti(); -void op_rts(); -void op_rtl(); -void op_nop(); -void op_wdm(); -void op_xba(); -void op_mvn(); -void op_mvp(); -void op_brk(); -void op_cop(); -void op_stp(); -void op_wai(); -void op_xce(); -void op_clc(); -void op_cld(); -void op_cli(); -void op_clv(); -void op_sec(); -void op_sed(); -void op_sei(); -void op_rep(); -void op_sep(); -void op_tax(); -void op_tay(); -void op_txa(); -void op_txy(); -void op_tya(); -void op_tyx(); -void op_tcd(); -void op_tcs(); -void op_tdc(); -void op_tsc(); -void op_tsx(); -void op_txs(); -void op_pha(); -void op_phx(); -void op_phy(); -void op_phd(); -void op_phb(); -void op_phk(); -void op_php(); -void op_pla(); -void op_plx(); -void op_ply(); -void op_pld(); -void op_plb(); -void op_plp(); -void op_pea(); -void op_pei(); -void op_per(); diff --git a/src/cpu/bcpu/core/op_misc.b b/src/cpu/bcpu/core/op_misc.b deleted file mode 100644 index a1ac8625..00000000 --- a/src/cpu/bcpu/core/op_misc.b +++ /dev/null @@ -1,282 +0,0 @@ -nop(0xea) { -1:last_cycle(); - cpu_io(); -} - -wdm(0x42) { -1:last_cycle(); - op_readpc(); -} - -xba(0xeb) { -1:cpu_io(); -2:last_cycle(); - cpu_io(); - regs.a.l ^= regs.a.h; - regs.a.h ^= regs.a.l; - regs.a.l ^= regs.a.h; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); -} - -mvn(0x54, ++), -mvp(0x44, --) { -1:dp = op_readpc(); -2:sp = op_readpc(); -3:regs.db = dp; - rd.l = op_readlong((sp << 16) | regs.x.w); -4:op_writelong((dp << 16) | regs.y.w, rd.l); -5:cpu_io(); - if(regs.p.x) { regs.x.l$1; regs.y.l$1; } - else { regs.x.w$1; regs.y.w$1; } -6:last_cycle(); - cpu_io(); - if(regs.a.w--)regs.pc.w -= 3; -} - -brk(0x00, 0xfffe, 0xffff, 0xffe6, 0xffe7), -cop(0x02, 0xfff4, 0xfff5, 0xffe4, 0xffe5) { -1:op_readpc(); - if(regs.e)skip; -2:op_writestack(regs.pc.b); -3:op_writestack(regs.pc.h); -4:op_writestack(regs.pc.l); -5:op_writestack(regs.p); -6:rd.l = op_readlong((regs.e) ? $1 : $3); - regs.pc.b = 0x00; - regs.p.i = 1; - regs.p.d = 0; -7:last_cycle(); - rd.h = op_readlong((regs.e) ? $2 : $4); - regs.pc.w = rd.w; -} - -stp(0xdb) { -1:cpu_io(); - run_state.stp = true; -2:last_cycle(); - cpu_io(); - regs.pc.w--; -} - -wai(0xcb) { -1:cpu_io(); - run_state.wai = true; -2:last_cycle(); - cpu_io(); -//no wakeup delay if last_cycle() cancelled wai - if(run_state.wai == false)end; -3:last_cycle(); - cpu_io(); -//sleep another i/o cycle -//note: this should alert the debugger that wai is continuing... - if(run_state.wai == true)status.cycle_pos--; -//wai wakeup delay (one i/o cycle) -4:last_cycle(); - cpu_io(); -} - -xce(0xfb) { -1:last_cycle(); - cpu_io(); -bool c = regs.p.c; - regs.p.c = regs.e; - regs.e = c; - if(regs.e) { - regs.p |= 0x30; - regs.x.h = 0x00; - regs.y.h = 0x00; - regs.s.h = 0x01; - } -} - -clc(0x18, regs.p.c = 0), -cld(0xd8, regs.p.d = 0), -cli(0x58, regs.p.i = 0), -clv(0xb8, regs.p.v = 0), -sec(0x38, regs.p.c = 1), -sed(0xf8, regs.p.d = 1), -sei(0x78, regs.p.i = 1) { -1:last_cycle(); - cpu_io(); - $1; -} - -rep(0xc2, &=~), -sep(0xe2, |=) { -1:rd.l = op_readpc(); -2:last_cycle(); - cpu_io(); - regs.p $1 rd.l; - if(regs.e)regs.p |= 0x30; - if(regs.p.x) { - regs.x.h = 0x00; - regs.y.h = 0x00; - } -} - -tax(0xaa, regs.p.x, x, a), -tay(0xa8, regs.p.x, y, a), -txa(0x8a, regs.p.m, a, x), -txy(0x9b, regs.p.x, y, x), -tya(0x98, regs.p.m, a, y), -tyx(0xbb, regs.p.x, x, y) { -1:last_cycle(); - cpu_io(); - if($1) { - regs.$2.l = regs.$3.l; - regs.p.n = !!(regs.$2.l & 0x80); - regs.p.z = (regs.$2.l == 0); - } else { - regs.$2.w = regs.$3.w; - regs.p.n = !!(regs.$2.w & 0x8000); - regs.p.z = (regs.$2.w == 0); - } -} - -tcd(0x5b) { -1:last_cycle(); - cpu_io(); - regs.d.w = regs.a.w; - regs.p.n = !!(regs.d.w & 0x8000); - regs.p.z = (regs.d.w == 0); -} - -tcs(0x1b) { -1:last_cycle(); - cpu_io(); - regs.s.w = regs.a.w; - if(regs.e)regs.s.h = 0x01; -} - -tdc(0x7b) { -1:last_cycle(); - cpu_io(); - regs.a.w = regs.d.w; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); -} - -tsc(0x3b) { -1:last_cycle(); - cpu_io(); - regs.a.w = regs.s.w; - if(regs.e) { - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } -} - -tsx(0xba) { -1:last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.x.l = regs.s.l; - regs.p.n = !!(regs.x.l & 0x80); - regs.p.z = (regs.x.l == 0); - } else { - regs.x.w = regs.s.w; - regs.p.n = !!(regs.x.w & 0x8000); - regs.p.z = (regs.x.w == 0); - } -} - -txs(0x9a) { -1:last_cycle(); - cpu_io(); - if(regs.e) { - regs.s.l = regs.x.l; - } else { - regs.s.w = regs.x.w; - } -} - -pha(0x48, regs.p.m, a), -phx(0xda, regs.p.x, x), -phy(0x5a, regs.p.x, y), -phd(0x0b, 0, d) { -1:cpu_io(); - if($1)skip; -2:op_writestack(regs.$2.h); -3:last_cycle(); - op_writestack(regs.$2.l); -} - -phb(0x8b, regs.db), -phk(0x4b, regs.pc.b), -php(0x08, regs.p) { -1:cpu_io(); -2:last_cycle(); - op_writestack($1); -} - -pla(0x68, regs.p.m, a), -plx(0xfa, regs.p.x, x), -ply(0x7a, regs.p.x, y), -pld(0x2b, 0, d) { -1:cpu_io(); -2:cpu_io(); -3:if($1)last_cycle(); - regs.$2.l = op_readstack(); - if($1) { - regs.p.n = !!(regs.$2.l & 0x80); - regs.p.z = (regs.$2.l == 0); - end; - } -4:last_cycle(); - regs.$2.h = op_readstack(); - regs.p.n = !!(regs.$2.w & 0x8000); - regs.p.z = (regs.$2.w == 0); -} - -plb(0xab) { -1:cpu_io(); -2:cpu_io(); -3:last_cycle(); - regs.db = op_readstack(); - regs.p.n = !!(regs.db & 0x80); - regs.p.z = (regs.db == 0); -} - -plp(0x28) { -1:cpu_io(); -2:cpu_io(); -3:last_cycle(); - regs.p = op_readstack(); - if(regs.e)regs.p |= 0x30; - if(regs.p.x) { - regs.x.h = 0x00; - regs.y.h = 0x00; - } -} - -pea(0xf4) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:op_writestack(aa.h); -4:last_cycle(); - op_writestack(aa.l); -} - -pei(0xd4) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:op_writestack(aa.h); -6:last_cycle(); - op_writestack(aa.l); -} - -per(0x62) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:cpu_io(); - rd.w = regs.pc.d + (int16)aa.w; -4:op_writestack(rd.h); -5:last_cycle(); - op_writestack(rd.l); -} diff --git a/src/cpu/bcpu/core/op_misc.cpp b/src/cpu/bcpu/core/op_misc.cpp deleted file mode 100644 index 85acb876..00000000 --- a/src/cpu/bcpu/core/op_misc.cpp +++ /dev/null @@ -1,864 +0,0 @@ -void bCPU::op_nop() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_wdm() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - op_readpc(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_xba() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - last_cycle(); - cpu_io(); - regs.a.l ^= regs.a.h; - regs.a.h ^= regs.a.l; - regs.a.l ^= regs.a.h; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_mvn() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - sp = op_readpc(); - } break; - case 3: { - regs.db = dp; - rd.l = op_readlong((sp << 16) | regs.x.w); - } break; - case 4: { - op_writelong((dp << 16) | regs.y.w, rd.l); - } break; - case 5: { - cpu_io(); - if(regs.p.x) { regs.x.l++; regs.y.l++; } - else { regs.x.w++; regs.y.w++; } - } break; - case 6: { - last_cycle(); - cpu_io(); - if(regs.a.w--)regs.pc.w -= 3; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_mvp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - sp = op_readpc(); - } break; - case 3: { - regs.db = dp; - rd.l = op_readlong((sp << 16) | regs.x.w); - } break; - case 4: { - op_writelong((dp << 16) | regs.y.w, rd.l); - } break; - case 5: { - cpu_io(); - if(regs.p.x) { regs.x.l--; regs.y.l--; } - else { regs.x.w--; regs.y.w--; } - } break; - case 6: { - last_cycle(); - cpu_io(); - if(regs.a.w--)regs.pc.w -= 3; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_brk() { - switch(status.cycle_pos++) { - case 1: { - op_readpc(); - if(regs.e)status.cycle_pos++; - } break; - case 2: { - op_writestack(regs.pc.b); - } break; - case 3: { - op_writestack(regs.pc.h); - } break; - case 4: { - op_writestack(regs.pc.l); - } break; - case 5: { - op_writestack(regs.p); - } break; - case 6: { - rd.l = op_readlong((regs.e) ? 0xfffe : 0xffe6); - regs.pc.b = 0x00; - regs.p.i = 1; - regs.p.d = 0; - } break; - case 7: { - last_cycle(); - rd.h = op_readlong((regs.e) ? 0xffff : 0xffe7); - regs.pc.w = rd.w; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cop() { - switch(status.cycle_pos++) { - case 1: { - op_readpc(); - if(regs.e)status.cycle_pos++; - } break; - case 2: { - op_writestack(regs.pc.b); - } break; - case 3: { - op_writestack(regs.pc.h); - } break; - case 4: { - op_writestack(regs.pc.l); - } break; - case 5: { - op_writestack(regs.p); - } break; - case 6: { - rd.l = op_readlong((regs.e) ? 0xfff4 : 0xffe4); - regs.pc.b = 0x00; - regs.p.i = 1; - regs.p.d = 0; - } break; - case 7: { - last_cycle(); - rd.h = op_readlong((regs.e) ? 0xfff5 : 0xffe5); - regs.pc.w = rd.w; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_stp() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - run_state.stp = true; - } break; - case 2: { - last_cycle(); - cpu_io(); - regs.pc.w--; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_wai() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - run_state.wai = true; - } break; - case 2: { - last_cycle(); - cpu_io(); - //no wakeup delay if last_cycle() cancelled wai - if(run_state.wai == false)status.cycle_pos = 0; - } break; - case 3: { - last_cycle(); - cpu_io(); - //sleep another i/o cycle - //note: this should alert the debugger that wai is continuing... - if(run_state.wai == true)status.cycle_pos--; - //wai wakeup delay (one i/o cycle) - } break; - case 4: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_xce() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - bool c = regs.p.c; - regs.p.c = regs.e; - regs.e = c; - if(regs.e) { - regs.p |= 0x30; - regs.x.h = 0x00; - regs.y.h = 0x00; - regs.s.h = 0x01; - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_clc() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.p.c = 0; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cld() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.p.d = 0; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cli() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.p.i = 0; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_clv() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.p.v = 0; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sec() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.p.c = 1; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sed() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.p.d = 1; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sei() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.p.i = 1; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rep() { - switch(status.cycle_pos++) { - case 1: { - rd.l = op_readpc(); - } break; - case 2: { - last_cycle(); - cpu_io(); - regs.p &=~ rd.l; - if(regs.e)regs.p |= 0x30; - if(regs.p.x) { - regs.x.h = 0x00; - regs.y.h = 0x00; - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sep() { - switch(status.cycle_pos++) { - case 1: { - rd.l = op_readpc(); - } break; - case 2: { - last_cycle(); - cpu_io(); - regs.p |= rd.l; - if(regs.e)regs.p |= 0x30; - if(regs.p.x) { - regs.x.h = 0x00; - regs.y.h = 0x00; - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tax() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.x.l = regs.a.l; - regs.p.n = !!(regs.x.l & 0x80); - regs.p.z = (regs.x.l == 0); - } else { - regs.x.w = regs.a.w; - regs.p.n = !!(regs.x.w & 0x8000); - regs.p.z = (regs.x.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tay() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.y.l = regs.a.l; - regs.p.n = !!(regs.y.l & 0x80); - regs.p.z = (regs.y.l == 0); - } else { - regs.y.w = regs.a.w; - regs.p.n = !!(regs.y.w & 0x8000); - regs.p.z = (regs.y.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_txa() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.m) { - regs.a.l = regs.x.l; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.a.w = regs.x.w; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_txy() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.y.l = regs.x.l; - regs.p.n = !!(regs.y.l & 0x80); - regs.p.z = (regs.y.l == 0); - } else { - regs.y.w = regs.x.w; - regs.p.n = !!(regs.y.w & 0x8000); - regs.p.z = (regs.y.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tya() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.m) { - regs.a.l = regs.y.l; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.a.w = regs.y.w; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tyx() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.x.l = regs.y.l; - regs.p.n = !!(regs.x.l & 0x80); - regs.p.z = (regs.x.l == 0); - } else { - regs.x.w = regs.y.w; - regs.p.n = !!(regs.x.w & 0x8000); - regs.p.z = (regs.x.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tcd() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.d.w = regs.a.w; - regs.p.n = !!(regs.d.w & 0x8000); - regs.p.z = (regs.d.w == 0); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tcs() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.s.w = regs.a.w; - if(regs.e)regs.s.h = 0x01; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tdc() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.a.w = regs.d.w; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tsc() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - regs.a.w = regs.s.w; - if(regs.e) { - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tsx() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.x.l = regs.s.l; - regs.p.n = !!(regs.x.l & 0x80); - regs.p.z = (regs.x.l == 0); - } else { - regs.x.w = regs.s.w; - regs.p.n = !!(regs.x.w & 0x8000); - regs.p.z = (regs.x.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_txs() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.e) { - regs.s.l = regs.x.l; - } else { - regs.s.w = regs.x.w; - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_pha() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - if(regs.p.m)status.cycle_pos++; - } break; - case 2: { - op_writestack(regs.a.h); - } break; - case 3: { - last_cycle(); - op_writestack(regs.a.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_phx() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - if(regs.p.x)status.cycle_pos++; - } break; - case 2: { - op_writestack(regs.x.h); - } break; - case 3: { - last_cycle(); - op_writestack(regs.x.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_phy() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - if(regs.p.x)status.cycle_pos++; - } break; - case 2: { - op_writestack(regs.y.h); - } break; - case 3: { - last_cycle(); - op_writestack(regs.y.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_phd() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - if(0)status.cycle_pos++; - } break; - case 2: { - op_writestack(regs. d.h); - } break; - case 3: { - last_cycle(); - op_writestack(regs. d.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_phb() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - last_cycle(); - op_writestack(regs.db); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_phk() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - last_cycle(); - op_writestack(regs.pc.b); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_php() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - last_cycle(); - op_writestack(regs.p); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_pla() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - regs.a.l = op_readstack(); - if(regs.p.m) { - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - status.cycle_pos = 0; - } - } break; - case 4: { - last_cycle(); - regs.a.h = op_readstack(); - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_plx() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - regs.x.l = op_readstack(); - if(regs.p.x) { - regs.p.n = !!(regs.x.l & 0x80); - regs.p.z = (regs.x.l == 0); - status.cycle_pos = 0; - } - } break; - case 4: { - last_cycle(); - regs.x.h = op_readstack(); - regs.p.n = !!(regs.x.w & 0x8000); - regs.p.z = (regs.x.w == 0); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ply() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - regs.y.l = op_readstack(); - if(regs.p.x) { - regs.p.n = !!(regs.y.l & 0x80); - regs.p.z = (regs.y.l == 0); - status.cycle_pos = 0; - } - } break; - case 4: { - last_cycle(); - regs.y.h = op_readstack(); - regs.p.n = !!(regs.y.w & 0x8000); - regs.p.z = (regs.y.w == 0); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_pld() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(0)last_cycle(); - regs. d.l = op_readstack(); - if(0) { - regs.p.n = !!(regs. d.l & 0x80); - regs.p.z = (regs. d.l == 0); - status.cycle_pos = 0; - } - } break; - case 4: { - last_cycle(); - regs. d.h = op_readstack(); - regs.p.n = !!(regs. d.w & 0x8000); - regs.p.z = (regs. d.w == 0); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_plb() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - last_cycle(); - regs.db = op_readstack(); - regs.p.n = !!(regs.db & 0x80); - regs.p.z = (regs.db == 0); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_plp() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - last_cycle(); - regs.p = op_readstack(); - if(regs.e)regs.p |= 0x30; - if(regs.p.x) { - regs.x.h = 0x00; - regs.y.h = 0x00; - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_pea() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - op_writestack(aa.h); - } break; - case 4: { - last_cycle(); - op_writestack(aa.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_pei() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - op_writestack(aa.h); - } break; - case 6: { - last_cycle(); - op_writestack(aa.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_per() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - rd.w = regs.pc.d + (int16)aa.w; - } break; - case 4: { - op_writestack(rd.h); - } break; - case 5: { - last_cycle(); - op_writestack(rd.l); - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/cpu/bcpu/core/op_pc.b b/src/cpu/bcpu/core/op_pc.b deleted file mode 100644 index 33b69c5e..00000000 --- a/src/cpu/bcpu/core/op_pc.b +++ /dev/null @@ -1,160 +0,0 @@ -bcc(0x90, !regs.p.c), -bcs(0xb0, regs.p.c), -bne(0xd0, !regs.p.z), -beq(0xf0, regs.p.z), -bpl(0x10, !regs.p.n), -bmi(0x30, regs.p.n), -bvc(0x50, !regs.p.v), -bvs(0x70, regs.p.v) { -1:if(!$1)last_cycle(); - rd.l = op_readpc(); - if($1) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - end; - } -2:cpu_c6(aa.w); -3:last_cycle(); - cpu_io(); -} - -bra(0x80) { -1:rd.l = op_readpc(); - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; -2:cpu_c6(aa.w); -3:last_cycle(); - cpu_io(); -} - -brl(0x82) { -1:rd.l = op_readpc(); -2:rd.h = op_readpc(); -3:last_cycle(); - cpu_io(); - regs.pc.w = regs.pc.d + (int16)rd.w; -} - -jmp_addr(0x4c) { -1:rd.l = op_readpc(); -2:last_cycle(); - rd.h = op_readpc(); - regs.pc.w = rd.w; -} - -jmp_long(0x5c) { -1:rd.l = op_readpc(); -2:rd.h = op_readpc(); -3:last_cycle(); - rd.b = op_readpc(); - regs.pc.d = rd.d & 0xffffff; -} - -jmp_iaddr(0x6c) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:rd.l = op_readaddr(aa.w); -4:last_cycle(); - rd.h = op_readaddr(aa.w + 1); - regs.pc.w = rd.w; -} - -jmp_iaddrx(0x7c) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:cpu_io(); -4:rd.l = op_readpbr(aa.w + regs.x.w); -5:last_cycle(); - rd.h = op_readpbr(aa.w + regs.x.w + 1); - regs.pc.w = rd.w; -} - -jmp_iladdr(0xdc) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:rd.l = op_readaddr(aa.w); -4:rd.h = op_readaddr(aa.w + 1); -5:last_cycle(); - rd.b = op_readaddr(aa.w + 2); - regs.pc.d = rd.d & 0xffffff; -} - -jsr_addr(0x20) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:cpu_io(); -4:regs.pc.w--; - op_writestack(regs.pc.h); -5:last_cycle(); - op_writestack(regs.pc.l); - regs.pc.w = aa.w; -} - -jsr_long(0x22) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:op_writestack(regs.pc.b); -4:cpu_io(); -5:aa.b = op_readpc(); -6:regs.pc.w--; - op_writestack(regs.pc.h); -7:last_cycle(); - op_writestack(regs.pc.l); - regs.pc.d = aa.d & 0xffffff; -} - -jsr_iaddrx(0xfc) { -1:aa.l = op_readpc(); -2:op_writestack(regs.pc.h); -3:op_writestack(regs.pc.l); -4:aa.h = op_readpc(); -5:cpu_io(); -6:rd.l = op_readpbr(aa.w + regs.x.w); -7:last_cycle(); - rd.h = op_readpbr(aa.w + regs.x.w + 1); - regs.pc.w = rd.w; -} - -rti(0x40) { -1:cpu_io(); -2:cpu_io(); -3:regs.p = op_readstack(); - if(regs.e)regs.p |= 0x30; - if(regs.p.x) { - regs.x.h = 0x00; - regs.y.h = 0x00; - } -4:rd.l = op_readstack(); -5:if(regs.e)last_cycle(); - rd.h = op_readstack(); - if(regs.e) { - regs.pc.w = rd.w; - end; - } -6:last_cycle(); - rd.b = op_readstack(); - regs.pc.d = rd.d & 0xffffff; -} - -rts(0x60) { -1:cpu_io(); -2:cpu_io(); -3:rd.l = op_readstack(); -4:rd.h = op_readstack(); -5:last_cycle(); - cpu_io(); - regs.pc.w = rd.w; - regs.pc.w++; -} - -rtl(0x6b) { -1:cpu_io(); -2:cpu_io(); -3:rd.l = op_readstack(); -4:rd.h = op_readstack(); -5:last_cycle(); - rd.b = op_readstack(); - regs.pc.d = rd.d & 0xffffff; - regs.pc.w++; -} diff --git a/src/cpu/bcpu/core/op_pc.cpp b/src/cpu/bcpu/core/op_pc.cpp deleted file mode 100644 index 5f4046f2..00000000 --- a/src/cpu/bcpu/core/op_pc.cpp +++ /dev/null @@ -1,483 +0,0 @@ -void bCPU::op_bcc() { - switch(status.cycle_pos++) { - case 1: { - if(!!regs.p.c)last_cycle(); - rd.l = op_readpc(); - if(!regs.p.c) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - status.cycle_pos = 0; - } - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bcs() { - switch(status.cycle_pos++) { - case 1: { - if(!regs.p.c)last_cycle(); - rd.l = op_readpc(); - if(regs.p.c) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - status.cycle_pos = 0; - } - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bne() { - switch(status.cycle_pos++) { - case 1: { - if(!!regs.p.z)last_cycle(); - rd.l = op_readpc(); - if(!regs.p.z) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - status.cycle_pos = 0; - } - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_beq() { - switch(status.cycle_pos++) { - case 1: { - if(!regs.p.z)last_cycle(); - rd.l = op_readpc(); - if(regs.p.z) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - status.cycle_pos = 0; - } - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bpl() { - switch(status.cycle_pos++) { - case 1: { - if(!!regs.p.n)last_cycle(); - rd.l = op_readpc(); - if(!regs.p.n) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - status.cycle_pos = 0; - } - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bmi() { - switch(status.cycle_pos++) { - case 1: { - if(!regs.p.n)last_cycle(); - rd.l = op_readpc(); - if(regs.p.n) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - status.cycle_pos = 0; - } - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bvc() { - switch(status.cycle_pos++) { - case 1: { - if(!!regs.p.v)last_cycle(); - rd.l = op_readpc(); - if(!regs.p.v) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - status.cycle_pos = 0; - } - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bvs() { - switch(status.cycle_pos++) { - case 1: { - if(!regs.p.v)last_cycle(); - rd.l = op_readpc(); - if(regs.p.v) { - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } else { - status.cycle_pos = 0; - } - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bra() { - switch(status.cycle_pos++) { - case 1: { - rd.l = op_readpc(); - aa.w = regs.pc.d + (int8)rd.l; - regs.pc.w = aa.w; - } break; - case 2: { - cpu_c6(aa.w); - } break; - case 3: { - last_cycle(); - cpu_io(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_brl() { - switch(status.cycle_pos++) { - case 1: { - rd.l = op_readpc(); - } break; - case 2: { - rd.h = op_readpc(); - } break; - case 3: { - last_cycle(); - cpu_io(); - regs.pc.w = regs.pc.d + (int16)rd.w; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_jmp_addr() { - switch(status.cycle_pos++) { - case 1: { - rd.l = op_readpc(); - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - regs.pc.w = rd.w; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_jmp_long() { - switch(status.cycle_pos++) { - case 1: { - rd.l = op_readpc(); - } break; - case 2: { - rd.h = op_readpc(); - } break; - case 3: { - last_cycle(); - rd.b = op_readpc(); - regs.pc.d = rd.d & 0xffffff; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_jmp_iaddr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readaddr(aa.w); - } break; - case 4: { - last_cycle(); - rd.h = op_readaddr(aa.w + 1); - regs.pc.w = rd.w; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_jmp_iaddrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readpbr(aa.w + regs.x.w); - } break; - case 5: { - last_cycle(); - rd.h = op_readpbr(aa.w + regs.x.w + 1); - regs.pc.w = rd.w; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_jmp_iladdr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readaddr(aa.w); - } break; - case 4: { - rd.h = op_readaddr(aa.w + 1); - } break; - case 5: { - last_cycle(); - rd.b = op_readaddr(aa.w + 2); - regs.pc.d = rd.d & 0xffffff; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_jsr_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - regs.pc.w--; - op_writestack(regs.pc.h); - } break; - case 5: { - last_cycle(); - op_writestack(regs.pc.l); - regs.pc.w = aa.w; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_jsr_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - op_writestack(regs.pc.b); - } break; - case 4: { - cpu_io(); - } break; - case 5: { - aa.b = op_readpc(); - } break; - case 6: { - regs.pc.w--; - op_writestack(regs.pc.h); - } break; - case 7: { - last_cycle(); - op_writestack(regs.pc.l); - regs.pc.d = aa.d & 0xffffff; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_jsr_iaddrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - op_writestack(regs.pc.h); - } break; - case 3: { - op_writestack(regs.pc.l); - } break; - case 4: { - aa.h = op_readpc(); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - rd.l = op_readpbr(aa.w + regs.x.w); - } break; - case 7: { - last_cycle(); - rd.h = op_readpbr(aa.w + regs.x.w + 1); - regs.pc.w = rd.w; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rti() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - regs.p = op_readstack(); - if(regs.e)regs.p |= 0x30; - if(regs.p.x) { - regs.x.h = 0x00; - regs.y.h = 0x00; - } - } break; - case 4: { - rd.l = op_readstack(); - } break; - case 5: { - if(regs.e)last_cycle(); - rd.h = op_readstack(); - if(regs.e) { - regs.pc.w = rd.w; - status.cycle_pos = 0; - } - } break; - case 6: { - last_cycle(); - rd.b = op_readstack(); - regs.pc.d = rd.d & 0xffffff; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rts() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - rd.l = op_readstack(); - } break; - case 4: { - rd.h = op_readstack(); - } break; - case 5: { - last_cycle(); - cpu_io(); - regs.pc.w = rd.w; - regs.pc.w++; - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rtl() { - switch(status.cycle_pos++) { - case 1: { - cpu_io(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - rd.l = op_readstack(); - } break; - case 4: { - rd.h = op_readstack(); - } break; - case 5: { - last_cycle(); - rd.b = op_readstack(); - regs.pc.d = rd.d & 0xffffff; - regs.pc.w++; - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/cpu/bcpu/core/op_read.b b/src/cpu/bcpu/core/op_read.b deleted file mode 100644 index ca2de7aa..00000000 --- a/src/cpu/bcpu/core/op_read.b +++ /dev/null @@ -1,317 +0,0 @@ -adc_const(0x69, adc, regs.p.m), -and_const(0x29, and, regs.p.m), -cmp_const(0xc9, cmp, regs.p.m), -cpx_const(0xe0, cpx, regs.p.x), -cpy_const(0xc0, cpy, regs.p.x), -eor_const(0x49, eor, regs.p.m), -lda_const(0xa9, lda, regs.p.m), -ldx_const(0xa2, ldx, regs.p.x), -ldy_const(0xa0, ldy, regs.p.x), -ora_const(0x09, ora, regs.p.m), -sbc_const(0xe9, sbc, regs.p.m) { -1:if($2)last_cycle(); - rd.l = op_readpc(); - if($2) { op_$1_b(); end; } -2:last_cycle(); - rd.h = op_readpc(); - op_$1_w(); -} - -adc_addr(0x6d, adc, regs.p.m), -and_addr(0x2d, and, regs.p.m), -bit_addr(0x2c, bit, regs.p.m), -cmp_addr(0xcd, cmp, regs.p.m), -cpx_addr(0xec, cpx, regs.p.x), -cpy_addr(0xcc, cpy, regs.p.x), -eor_addr(0x4d, eor, regs.p.m), -lda_addr(0xad, lda, regs.p.m), -ldx_addr(0xae, ldx, regs.p.x), -ldy_addr(0xac, ldy, regs.p.x), -ora_addr(0x0d, ora, regs.p.m), -sbc_addr(0xed, sbc, regs.p.m) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:if($2)last_cycle(); - rd.l = op_readdbr(aa.w); - if($2) { op_$1_b(); end; } -4:last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_$1_w(); -} - -adc_addrx(0x7d, adc, regs.p.m), -and_addrx(0x3d, and, regs.p.m), -bit_addrx(0x3c, bit, regs.p.m), -cmp_addrx(0xdd, cmp, regs.p.m), -eor_addrx(0x5d, eor, regs.p.m), -lda_addrx(0xbd, lda, regs.p.m), -ldy_addrx(0xbc, ldy, regs.p.x), -ora_addrx(0x1d, ora, regs.p.m), -sbc_addrx(0xfd, sbc, regs.p.m) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:cpu_c4(aa.w, aa.w + regs.x.w); -4:if($2)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if($2) { op_$1_b(); end; } -5:last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_$1_w(); -} - -adc_addry(0x79, adc, regs.p.m), -and_addry(0x39, and, regs.p.m), -cmp_addry(0xd9, cmp, regs.p.m), -eor_addry(0x59, eor, regs.p.m), -lda_addry(0xb9, lda, regs.p.m), -ldx_addry(0xbe, ldx, regs.p.x), -ora_addry(0x19, ora, regs.p.m), -sbc_addry(0xf9, sbc, regs.p.m) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:cpu_c4(aa.w, aa.w + regs.y.w); -4:if($2)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if($2) { op_$1_b(); end; } -5:last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_$1_w(); -} - -adc_long(0x6f, adc, regs.p.m), -and_long(0x2f, and, regs.p.m), -cmp_long(0xcf, cmp, regs.p.m), -eor_long(0x4f, eor, regs.p.m), -lda_long(0xaf, lda, regs.p.m), -ora_long(0x0f, ora, regs.p.m), -sbc_long(0xef, sbc, regs.p.m) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:aa.b = op_readpc(); -4:if($2)last_cycle(); - rd.l = op_readlong(aa.d); - if($2) { op_$1_b(); end; } -5:last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_$1_w(); -} - -adc_longx(0x7f, adc, regs.p.m), -and_longx(0x3f, and, regs.p.m), -cmp_longx(0xdf, cmp, regs.p.m), -eor_longx(0x5f, eor, regs.p.m), -lda_longx(0xbf, lda, regs.p.m), -ora_longx(0x1f, ora, regs.p.m), -sbc_longx(0xff, sbc, regs.p.m) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:aa.b = op_readpc(); -4:if($2)last_cycle(); - rd.l = op_readlong(aa.d + regs.x.w); - if($2) { op_$1_b(); end; } -5:last_cycle(); - rd.h = op_readlong(aa.d + regs.x.w + 1); - op_$1_w(); -} - -adc_dp(0x65, adc, regs.p.m), -and_dp(0x25, and, regs.p.m), -bit_dp(0x24, bit, regs.p.m), -cmp_dp(0xc5, cmp, regs.p.m), -cpx_dp(0xe4, cpx, regs.p.x), -cpy_dp(0xc4, cpy, regs.p.x), -eor_dp(0x45, eor, regs.p.m), -lda_dp(0xa5, lda, regs.p.m), -ldx_dp(0xa6, ldx, regs.p.x), -ldy_dp(0xa4, ldy, regs.p.x), -ora_dp(0x05, ora, regs.p.m), -sbc_dp(0xe5, sbc, regs.p.m) { -1:dp = op_readpc(); -2:cpu_c2(); -3:if($2)last_cycle(); - rd.l = op_readdp(dp); - if($2) { op_$1_b(); end; } -4:last_cycle(); - rd.h = op_readdp(dp + 1); - op_$1_w(); -} - -adc_dpx(0x75, adc, regs.p.m), -and_dpx(0x35, and, regs.p.m), -bit_dpx(0x34, bit, regs.p.m), -cmp_dpx(0xd5, cmp, regs.p.m), -eor_dpx(0x55, eor, regs.p.m), -lda_dpx(0xb5, lda, regs.p.m), -ldy_dpx(0xb4, ldy, regs.p.x), -ora_dpx(0x15, ora, regs.p.m), -sbc_dpx(0xf5, sbc, regs.p.m) { -1:dp = op_readpc(); -2:cpu_c2(); -3:cpu_io(); -4:if($2)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if($2) { op_$1_b(); end; } -5:last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_$1_w(); -} - -ldx_dpy(0xb6, ldx, regs.p.x) { -1:dp = op_readpc(); -2:cpu_c2(); -3:cpu_io(); -4:if($2)last_cycle(); - rd.l = op_readdp(dp + regs.y.w); - if($2) { op_$1_b(); end; } -5:last_cycle(); - rd.h = op_readdp(dp + regs.y.w + 1); - op_$1_w(); -} - -adc_idp(0x72, adc, regs.p.m), -and_idp(0x32, and, regs.p.m), -cmp_idp(0xd2, cmp, regs.p.m), -eor_idp(0x52, eor, regs.p.m), -lda_idp(0xb2, lda, regs.p.m), -ora_idp(0x12, ora, regs.p.m), -sbc_idp(0xf2, sbc, regs.p.m) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:if($2)last_cycle(); - rd.l = op_readdbr(aa.w); - if($2) { op_$1_b(); end; } -6:last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_$1_w(); -} - -adc_idpx(0x61, adc, regs.p.m), -and_idpx(0x21, and, regs.p.m), -cmp_idpx(0xc1, cmp, regs.p.m), -eor_idpx(0x41, eor, regs.p.m), -lda_idpx(0xa1, lda, regs.p.m), -ora_idpx(0x01, ora, regs.p.m), -sbc_idpx(0xe1, sbc, regs.p.m) { -1:dp = op_readpc(); -2:cpu_c2(); -3:cpu_io(); -4:aa.l = op_readdp(dp + regs.x.w); -5:aa.h = op_readdp(dp + regs.x.w + 1); -6:if($2)last_cycle(); - rd.l = op_readdbr(aa.w); - if($2) { op_$1_b(); end; } -7:last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_$1_w(); -} - -adc_idpy(0x71, adc, regs.p.m), -and_idpy(0x31, and, regs.p.m), -cmp_idpy(0xd1, cmp, regs.p.m), -eor_idpy(0x51, eor, regs.p.m), -lda_idpy(0xb1, lda, regs.p.m), -ora_idpy(0x11, ora, regs.p.m), -sbc_idpy(0xf1, sbc, regs.p.m) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:cpu_c4(aa.w, aa.w + regs.y.w); -6:if($2)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if($2) { op_$1_b(); end; } -7:last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_$1_w(); -} - -adc_ildp(0x67, adc, regs.p.m), -and_ildp(0x27, and, regs.p.m), -cmp_ildp(0xc7, cmp, regs.p.m), -eor_ildp(0x47, eor, regs.p.m), -lda_ildp(0xa7, lda, regs.p.m), -ora_ildp(0x07, ora, regs.p.m), -sbc_ildp(0xe7, sbc, regs.p.m) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:aa.b = op_readdp(dp + 2); -6:if($2)last_cycle(); - rd.l = op_readlong(aa.d); - if($2) { op_$1_b(); end; } -7:last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_$1_w(); -} - -adc_ildpy(0x77, adc, regs.p.m), -and_ildpy(0x37, and, regs.p.m), -cmp_ildpy(0xd7, cmp, regs.p.m), -eor_ildpy(0x57, eor, regs.p.m), -lda_ildpy(0xb7, lda, regs.p.m), -ora_ildpy(0x17, ora, regs.p.m), -sbc_ildpy(0xf7, sbc, regs.p.m) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:aa.b = op_readdp(dp + 2); -6:if($2)last_cycle(); - rd.l = op_readlong(aa.d + regs.y.w); - if($2) { op_$1_b(); end; } -7:last_cycle(); - rd.h = op_readlong(aa.d + regs.y.w + 1); - op_$1_w(); -} - -adc_sr(0x63, adc, regs.p.m), -and_sr(0x23, and, regs.p.m), -cmp_sr(0xc3, cmp, regs.p.m), -eor_sr(0x43, eor, regs.p.m), -lda_sr(0xa3, lda, regs.p.m), -ora_sr(0x03, ora, regs.p.m), -sbc_sr(0xe3, sbc, regs.p.m) { -1:sp = op_readpc(); -2:cpu_io(); -3:if($2)last_cycle(); - rd.l = op_readsp(sp); - if($2) { op_$1_b(); end; } -4:last_cycle(); - rd.h = op_readsp(sp + 1); - op_$1_w(); -} - -adc_isry(0x73, adc), -and_isry(0x33, and), -cmp_isry(0xd3, cmp), -eor_isry(0x53, eor), -lda_isry(0xb3, lda), -ora_isry(0x13, ora), -sbc_isry(0xf3, sbc) { -1:sp = op_readpc(); -2:cpu_io(); -3:aa.l = op_readsp(sp); -4:aa.h = op_readsp(sp + 1); -5:cpu_io(); -6:if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_$1_b(); end; } -7:last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_$1_w(); -} - -bit_const(0x89) { -1:if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { - regs.p.z = ((rd.l & regs.a.l) == 0); - end; - } -2:last_cycle(); - rd.h = op_readpc(); - regs.p.z = ((rd.w & regs.a.w) == 0); -} diff --git a/src/cpu/bcpu/core/op_read.cpp b/src/cpu/bcpu/core/op_read.cpp deleted file mode 100644 index 74777cdf..00000000 --- a/src/cpu/bcpu/core/op_read.cpp +++ /dev/null @@ -1,3183 +0,0 @@ -void bCPU::op_adc_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cpx_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.x)last_cycle(); - rd.l = op_readpc(); - if(regs.p.x) { op_cpx_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_cpx_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cpy_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.x)last_cycle(); - rd.l = op_readpc(); - if(regs.p.x) { op_cpy_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_cpy_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldx_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.x)last_cycle(); - rd.l = op_readpc(); - if(regs.p.x) { op_ldx_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_ldx_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldy_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.x)last_cycle(); - rd.l = op_readpc(); - if(regs.p.x) { op_ldy_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_ldy_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bit_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_bit_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_bit_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cpx_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.x) { op_cpx_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_cpx_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cpy_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.x) { op_cpy_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_cpy_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldx_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.x) { op_ldx_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_ldx_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldy_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.x) { op_ldy_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_ldy_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bit_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m) { op_bit_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_bit_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldy_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.x)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.x) { op_ldy_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_ldy_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.x.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldx_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.x)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.x) { op_ldx_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_ldx_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_longx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.x.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.x.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_longx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.x.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.x.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_longx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.x.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.x.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_longx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.x.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.x.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_longx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.x.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.x.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_longx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.x.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.x.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_longx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.x.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.x.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bit_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.m) { op_bit_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_bit_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cpx_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.x) { op_cpx_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_cpx_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cpy_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.x) { op_cpy_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_cpy_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldx_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.x) { op_ldx_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_ldx_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldy_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.x) { op_ldy_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_ldy_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readdp(dp + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bit_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m) { op_bit_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_bit_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldy_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.x)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.x) { op_ldy_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_ldy_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.x.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ldx_dpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.x)last_cycle(); - rd.l = op_readdp(dp + regs.y.w); - if(regs.p.x) { op_ldx_b(); status.cycle_pos = 0; } - } break; - case 5: { - last_cycle(); - rd.h = op_readdp(dp + regs.y.w + 1); - op_ldx_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_idp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 6: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_idp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 6: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_idp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 6: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_idp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 6: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_idp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 6: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_idp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 6: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_idp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 6: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - aa.l = op_readdp(dp + regs.x.w); - } break; - case 5: { - aa.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - aa.l = op_readdp(dp + regs.x.w); - } break; - case 5: { - aa.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - aa.l = op_readdp(dp + regs.x.w); - } break; - case 5: { - aa.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - aa.l = op_readdp(dp + regs.x.w); - } break; - case 5: { - aa.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - aa.l = op_readdp(dp + regs.x.w); - } break; - case 5: { - aa.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - aa.l = op_readdp(dp + regs.x.w); - } break; - case 5: { - aa.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - aa.l = op_readdp(dp + regs.x.w); - } break; - case 5: { - aa.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_ildp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_ildp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_ildp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_ildp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_ildp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_ildp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_ildp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_ildpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.y.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.y.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_ildpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.y.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.y.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_ildpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.y.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.y.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_ildpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.y.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.y.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_ildpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.y.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.y.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_ildpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.y.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.y.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_ildpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readlong(aa.d + regs.y.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readlong(aa.d + regs.y.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_sr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readsp(sp); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readsp(sp + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_sr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readsp(sp); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readsp(sp + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_sr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readsp(sp); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readsp(sp + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_sr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readsp(sp); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readsp(sp + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_sr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readsp(sp); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readsp(sp + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_sr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readsp(sp); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readsp(sp + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_sr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - rd.l = op_readsp(sp); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 4: { - last_cycle(); - rd.h = op_readsp(sp + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_adc_isry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - aa.l = op_readsp(sp); - } break; - case 4: { - aa.h = op_readsp(sp + 1); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_adc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_adc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_and_isry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - aa.l = op_readsp(sp); - } break; - case 4: { - aa.h = op_readsp(sp + 1); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_and_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_and_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_cmp_isry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - aa.l = op_readsp(sp); - } break; - case 4: { - aa.h = op_readsp(sp + 1); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_cmp_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_cmp_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_eor_isry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - aa.l = op_readsp(sp); - } break; - case 4: { - aa.h = op_readsp(sp + 1); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_eor_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_eor_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lda_isry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - aa.l = op_readsp(sp); - } break; - case 4: { - aa.h = op_readsp(sp + 1); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_lda_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_lda_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ora_isry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - aa.l = op_readsp(sp); - } break; - case 4: { - aa.h = op_readsp(sp + 1); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_ora_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_ora_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sbc_isry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - aa.l = op_readsp(sp); - } break; - case 4: { - aa.h = op_readsp(sp + 1); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - if(regs.p.m)last_cycle(); - rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.p.m) { op_sbc_b(); status.cycle_pos = 0; } - } break; - case 7: { - last_cycle(); - rd.h = op_readdbr(aa.w + regs.y.w + 1); - op_sbc_w(); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_bit_const() { - switch(status.cycle_pos++) { - case 1: { - if(regs.p.m)last_cycle(); - rd.l = op_readpc(); - if(regs.p.m) { - regs.p.z = ((rd.l & regs.a.l) == 0); - status.cycle_pos = 0; - } - } break; - case 2: { - last_cycle(); - rd.h = op_readpc(); - regs.p.z = ((rd.w & regs.a.w) == 0); - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/cpu/bcpu/core/op_rmw.b b/src/cpu/bcpu/core/op_rmw.b deleted file mode 100644 index 40e60cad..00000000 --- a/src/cpu/bcpu/core/op_rmw.b +++ /dev/null @@ -1,185 +0,0 @@ -inc(0x1a, regs.p.m, a), -inx(0xe8, regs.p.x, x), -iny(0xc8, regs.p.x, y) { -1:last_cycle(); - cpu_io(); - if($1) { - regs.$2.l++; - regs.p.n = !!(regs.$2.l & 0x80); - regs.p.z = (regs.$2.l == 0); - } else { - regs.$2.w++; - regs.p.n = !!(regs.$2.w & 0x8000); - regs.p.z = (regs.$2.w == 0); - } -} - -dec(0x3a, regs.p.m, a), -dex(0xca, regs.p.x, x), -dey(0x88, regs.p.x, y) { -1:last_cycle(); - cpu_io(); - if($1) { - regs.$2.l--; - regs.p.n = !!(regs.$2.l & 0x80); - regs.p.z = (regs.$2.l == 0); - } else { - regs.$2.w--; - regs.p.n = !!(regs.$2.w & 0x8000); - regs.p.z = (regs.$2.w == 0); - } -} - -asl(0x0a) { -1:last_cycle(); - cpu_io(); - if(regs.p.m) { - regs.p.c = !!(regs.a.l & 0x80); - regs.a.l <<= 1; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.p.c = !!(regs.a.w & 0x8000); - regs.a.w <<= 1; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } -} - -lsr(0x4a) { -1:last_cycle(); - cpu_io(); - if(regs.p.m) { - regs.p.c = regs.a.l & 1; - regs.a.l >>= 1; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.p.c = regs.a.w & 1; - regs.a.w >>= 1; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } -} - -rol(0x2a) { -1:last_cycle(); - cpu_io(); - uint16 c = regs.p.c; - if(regs.p.m) { - regs.p.c = !!(regs.a.l & 0x80); - regs.a.l <<= 1; - regs.a.l |= c; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.p.c = !!(regs.a.w & 0x8000); - regs.a.w <<= 1; - regs.a.w |= c; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } -} - -ror(0x6a) { -1:last_cycle(); - cpu_io(); - uint16 c; - if(regs.p.m) { - c = (regs.p.c)?0x80:0; - regs.p.c = regs.a.l & 1; - regs.a.l >>= 1; - regs.a.l |= c; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - c = (regs.p.c)?0x8000:0; - regs.p.c = regs.a.w & 1; - regs.a.w >>= 1; - regs.a.w |= c; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } -} - -inc_addr(0xee, inc), -dec_addr(0xce, dec), -asl_addr(0x0e, asl), -lsr_addr(0x4e, lsr), -rol_addr(0x2e, rol), -ror_addr(0x6e, ror), -trb_addr(0x1c, trb), -tsb_addr(0x0c, tsb) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:rd.l = op_readdbr(aa.w); - if(regs.p.m)skip; -4:rd.h = op_readdbr(aa.w + 1); -5:cpu_io(); - if(regs.p.m) { op_$1_b(); skip; } - else op_$1_w(); -6:op_writedbr(aa.w + 1, rd.h); -7:last_cycle(); - op_writedbr(aa.w, rd.l); -} - -inc_addrx(0xfe, inc), -dec_addrx(0xde, dec), -asl_addrx(0x1e, asl), -lsr_addrx(0x5e, lsr), -rol_addrx(0x3e, rol), -ror_addrx(0x7e, ror) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:cpu_io(); -4:rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m)skip; -5:rd.h = op_readdbr(aa.w + regs.x.w + 1); -6:cpu_io(); - if(regs.p.m) { op_$1_b(); skip; } - else op_$1_w(); -7:op_writedbr(aa.w + regs.x.w + 1, rd.h); -8:last_cycle(); - op_writedbr(aa.w + regs.x.w, rd.l); -} - -inc_dp(0xe6, inc), -dec_dp(0xc6, dec), -asl_dp(0x06, asl), -lsr_dp(0x46, lsr), -rol_dp(0x26, rol), -ror_dp(0x66, ror), -trb_dp(0x14, trb), -tsb_dp(0x04, tsb) { -1:dp = op_readpc(); -2:cpu_c2(); -3:rd.l = op_readdp(dp); - if(regs.p.m)skip; -4:rd.h = op_readdp(dp + 1); -5:cpu_io(); - if(regs.p.m) { op_$1_b(); skip; } - else op_$1_w(); -6:op_writedp(dp + 1, rd.h); -7:last_cycle(); - op_writedp(dp, rd.l); -} - -inc_dpx(0xf6, inc), -dec_dpx(0xd6, dec), -asl_dpx(0x16, asl), -lsr_dpx(0x56, lsr), -rol_dpx(0x36, rol), -ror_dpx(0x76, ror) { -1:dp = op_readpc(); -2:cpu_c2(); -3:cpu_io(); -4:rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m)skip; -5:rd.h = op_readdp(dp + regs.x.w + 1); -6:cpu_io(); - if(regs.p.m) { op_$1_b(); skip; } - else op_$1_w(); -7:op_writedp(dp + regs.x.w + 1, rd.h); -8:last_cycle(); - op_writedp(dp + regs.x.w, rd.l); -} diff --git a/src/cpu/bcpu/core/op_rmw.cpp b/src/cpu/bcpu/core/op_rmw.cpp deleted file mode 100644 index bc50347e..00000000 --- a/src/cpu/bcpu/core/op_rmw.cpp +++ /dev/null @@ -1,1110 +0,0 @@ -void bCPU::op_inc() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.m) { - regs.a.l++; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.a.w++; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_inx() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.x.l++; - regs.p.n = !!(regs.x.l & 0x80); - regs.p.z = (regs.x.l == 0); - } else { - regs.x.w++; - regs.p.n = !!(regs.x.w & 0x8000); - regs.p.z = (regs.x.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_iny() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.y.l++; - regs.p.n = !!(regs.y.l & 0x80); - regs.p.z = (regs.y.l == 0); - } else { - regs.y.w++; - regs.p.n = !!(regs.y.w & 0x8000); - regs.p.z = (regs.y.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_dec() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.m) { - regs.a.l--; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.a.w--; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_dex() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.x.l--; - regs.p.n = !!(regs.x.l & 0x80); - regs.p.z = (regs.x.l == 0); - } else { - regs.x.w--; - regs.p.n = !!(regs.x.w & 0x8000); - regs.p.z = (regs.x.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_dey() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.x) { - regs.y.l--; - regs.p.n = !!(regs.y.l & 0x80); - regs.p.z = (regs.y.l == 0); - } else { - regs.y.w--; - regs.p.n = !!(regs.y.w & 0x8000); - regs.p.z = (regs.y.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_asl() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.m) { - regs.p.c = !!(regs.a.l & 0x80); - regs.a.l <<= 1; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.p.c = !!(regs.a.w & 0x8000); - regs.a.w <<= 1; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lsr() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - if(regs.p.m) { - regs.p.c = regs.a.l & 1; - regs.a.l >>= 1; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.p.c = regs.a.w & 1; - regs.a.w >>= 1; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rol() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - uint16 c = regs.p.c; - if(regs.p.m) { - regs.p.c = !!(regs.a.l & 0x80); - regs.a.l <<= 1; - regs.a.l |= c; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - regs.p.c = !!(regs.a.w & 0x8000); - regs.a.w <<= 1; - regs.a.w |= c; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ror() { - switch(status.cycle_pos++) { - case 1: { - last_cycle(); - cpu_io(); - uint16 c; - if(regs.p.m) { - c = (regs.p.c)?0x80:0; - regs.p.c = regs.a.l & 1; - regs.a.l >>= 1; - regs.a.l |= c; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); - } else { - c = (regs.p.c)?0x8000:0; - regs.p.c = regs.a.w & 1; - regs.a.w >>= 1; - regs.a.w |= c; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); - } - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_inc_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readdbr(aa.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdbr(aa.w + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_inc_b(); status.cycle_pos++; } - else op_inc_w(); - } break; - case 6: { - op_writedbr(aa.w + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_dec_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readdbr(aa.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdbr(aa.w + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_dec_b(); status.cycle_pos++; } - else op_dec_w(); - } break; - case 6: { - op_writedbr(aa.w + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_asl_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readdbr(aa.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdbr(aa.w + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_asl_b(); status.cycle_pos++; } - else op_asl_w(); - } break; - case 6: { - op_writedbr(aa.w + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lsr_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readdbr(aa.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdbr(aa.w + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_lsr_b(); status.cycle_pos++; } - else op_lsr_w(); - } break; - case 6: { - op_writedbr(aa.w + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rol_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readdbr(aa.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdbr(aa.w + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_rol_b(); status.cycle_pos++; } - else op_rol_w(); - } break; - case 6: { - op_writedbr(aa.w + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ror_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readdbr(aa.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdbr(aa.w + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_ror_b(); status.cycle_pos++; } - else op_ror_w(); - } break; - case 6: { - op_writedbr(aa.w + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_trb_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readdbr(aa.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdbr(aa.w + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_trb_b(); status.cycle_pos++; } - else op_trb_w(); - } break; - case 6: { - op_writedbr(aa.w + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tsb_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - rd.l = op_readdbr(aa.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdbr(aa.w + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_tsb_b(); status.cycle_pos++; } - else op_tsb_w(); - } break; - case 6: { - op_writedbr(aa.w + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_inc_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdbr(aa.w + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_inc_b(); status.cycle_pos++; } - else op_inc_w(); - } break; - case 7: { - op_writedbr(aa.w + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedbr(aa.w + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_dec_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdbr(aa.w + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_dec_b(); status.cycle_pos++; } - else op_dec_w(); - } break; - case 7: { - op_writedbr(aa.w + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedbr(aa.w + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_asl_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdbr(aa.w + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_asl_b(); status.cycle_pos++; } - else op_asl_w(); - } break; - case 7: { - op_writedbr(aa.w + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedbr(aa.w + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lsr_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdbr(aa.w + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_lsr_b(); status.cycle_pos++; } - else op_lsr_w(); - } break; - case 7: { - op_writedbr(aa.w + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedbr(aa.w + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rol_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdbr(aa.w + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_rol_b(); status.cycle_pos++; } - else op_rol_w(); - } break; - case 7: { - op_writedbr(aa.w + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedbr(aa.w + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ror_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdbr(aa.w + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_ror_b(); status.cycle_pos++; } - else op_ror_w(); - } break; - case 7: { - op_writedbr(aa.w + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedbr(aa.w + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_inc_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - rd.l = op_readdp(dp); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_inc_b(); status.cycle_pos++; } - else op_inc_w(); - } break; - case 6: { - op_writedp(dp + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedp(dp, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_dec_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - rd.l = op_readdp(dp); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_dec_b(); status.cycle_pos++; } - else op_dec_w(); - } break; - case 6: { - op_writedp(dp + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedp(dp, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_asl_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - rd.l = op_readdp(dp); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_asl_b(); status.cycle_pos++; } - else op_asl_w(); - } break; - case 6: { - op_writedp(dp + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedp(dp, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lsr_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - rd.l = op_readdp(dp); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_lsr_b(); status.cycle_pos++; } - else op_lsr_w(); - } break; - case 6: { - op_writedp(dp + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedp(dp, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rol_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - rd.l = op_readdp(dp); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_rol_b(); status.cycle_pos++; } - else op_rol_w(); - } break; - case 6: { - op_writedp(dp + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedp(dp, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ror_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - rd.l = op_readdp(dp); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_ror_b(); status.cycle_pos++; } - else op_ror_w(); - } break; - case 6: { - op_writedp(dp + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedp(dp, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_trb_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - rd.l = op_readdp(dp); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_trb_b(); status.cycle_pos++; } - else op_trb_w(); - } break; - case 6: { - op_writedp(dp + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedp(dp, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_tsb_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - rd.l = op_readdp(dp); - if(regs.p.m)status.cycle_pos++; - } break; - case 4: { - rd.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_io(); - if(regs.p.m) { op_tsb_b(); status.cycle_pos++; } - else op_tsb_w(); - } break; - case 6: { - op_writedp(dp + 1, rd.h); - } break; - case 7: { - last_cycle(); - op_writedp(dp, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_inc_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_inc_b(); status.cycle_pos++; } - else op_inc_w(); - } break; - case 7: { - op_writedp(dp + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedp(dp + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_dec_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_dec_b(); status.cycle_pos++; } - else op_dec_w(); - } break; - case 7: { - op_writedp(dp + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedp(dp + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_asl_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_asl_b(); status.cycle_pos++; } - else op_asl_w(); - } break; - case 7: { - op_writedp(dp + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedp(dp + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_lsr_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_lsr_b(); status.cycle_pos++; } - else op_lsr_w(); - } break; - case 7: { - op_writedp(dp + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedp(dp + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_rol_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_rol_b(); status.cycle_pos++; } - else op_rol_w(); - } break; - case 7: { - op_writedp(dp + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedp(dp + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_ror_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - rd.l = op_readdp(dp + regs.x.w); - if(regs.p.m)status.cycle_pos++; - } break; - case 5: { - rd.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - cpu_io(); - if(regs.p.m) { op_ror_b(); status.cycle_pos++; } - else op_ror_w(); - } break; - case 7: { - op_writedp(dp + regs.x.w + 1, rd.h); - } break; - case 8: { - last_cycle(); - op_writedp(dp + regs.x.w, rd.l); - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/cpu/bcpu/core/op_write.b b/src/cpu/bcpu/core/op_write.b deleted file mode 100644 index 28aeae7a..00000000 --- a/src/cpu/bcpu/core/op_write.b +++ /dev/null @@ -1,181 +0,0 @@ -sta_addr(0x8d, regs.p.m, regs.a.w), -stx_addr(0x8e, regs.p.x, regs.x.w), -sty_addr(0x8c, regs.p.x, regs.y.w), -stz_addr(0x9c, regs.p.m, 0x0000) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:if($1)last_cycle(); - op_writedbr(aa.w, $2); - if($1)end; -4:last_cycle(); - op_writedbr(aa.w + 1, $2 >> 8); -} - -sta_addrx(0x9d, regs.p.m, regs.a.w), -stz_addrx(0x9e, regs.p.m, 0x0000) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:cpu_io(); -4:if($1)last_cycle(); - op_writedbr(aa.w + regs.x.w, $2); - if($1)end; -5:last_cycle(); - op_writedbr(aa.w + regs.x.w + 1, $2 >> 8); -} - -sta_addry(0x99) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:cpu_io(); -4:if(regs.p.m)last_cycle(); - op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.p.m)end; -5:last_cycle(); - op_writedbr(aa.w + regs.y.w + 1, regs.a.h); -} - -sta_long(0x8f) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:aa.b = op_readpc(); -4:if(regs.p.m)last_cycle(); - op_writelong(aa.d, regs.a.l); - if(regs.p.m)end; -5:last_cycle(); - op_writelong(aa.d + 1, regs.a.h); -} - -sta_longx(0x9f) { -1:aa.l = op_readpc(); -2:aa.h = op_readpc(); -3:aa.b = op_readpc(); -4:if(regs.p.m)last_cycle(); - op_writelong(aa.d + regs.x.w, regs.a.l); - if(regs.p.m)end; -5:last_cycle(); - op_writelong(aa.d + regs.x.w + 1, regs.a.h); -} - -sta_dp(0x85, regs.p.m, regs.a.w), -stx_dp(0x86, regs.p.x, regs.x.w), -sty_dp(0x84, regs.p.x, regs.y.w), -stz_dp(0x64, regs.p.m, 0x0000) { -1:dp = op_readpc(); -2:cpu_c2(); -3:if($1)last_cycle(); - op_writedp(dp, $2); - if($1)end; -4:last_cycle(); - op_writedp(dp + 1, $2 >> 8); -} - -sta_dpx(0x95, regs.p.m, regs.a.w), -sty_dpx(0x94, regs.p.x, regs.y.w), -stz_dpx(0x74, regs.p.m, 0x0000) { -1:dp = op_readpc(); -2:cpu_c2(); -3:cpu_io(); -4:if($1)last_cycle(); - op_writedp(dp + regs.x.w, $2); - if($1)end; -5:last_cycle(); - op_writedp(dp + regs.x.w + 1, $2 >> 8); -} - -stx_dpy(0x96) { -1:dp = op_readpc(); -2:cpu_c2(); -3:cpu_io(); -4:if(regs.p.x)last_cycle(); - op_writedp(dp + regs.y.w, regs.x.l); - if(regs.p.x)end; -5:last_cycle(); - op_writedp(dp + regs.y.w + 1, regs.x.h); -} - -sta_idp(0x92) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:if(regs.p.m)last_cycle(); - op_writedbr(aa.w, regs.a.l); - if(regs.p.m)end; -6:last_cycle(); - op_writedbr(aa.w + 1, regs.a.h); -} - -sta_ildp(0x87) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:aa.b = op_readdp(dp + 2); -6:if(regs.p.m)last_cycle(); - op_writelong(aa.d, regs.a.l); - if(regs.p.m)end; -7:last_cycle(); - op_writelong(aa.d + 1, regs.a.h); -} - -sta_idpx(0x81) { -1:dp = op_readpc(); -2:cpu_c2(); -3:cpu_io(); -4:aa.l = op_readdp(dp + regs.x.w); -5:aa.h = op_readdp(dp + regs.x.w + 1); -6:if(regs.p.m)last_cycle(); - op_writedbr(aa.w, regs.a.l); - if(regs.p.m)end; -7:last_cycle(); - op_writedbr(aa.w + 1, regs.a.h); -} - -sta_idpy(0x91) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:cpu_io(); -6:if(regs.p.m)last_cycle(); - op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.p.m)end; -7:last_cycle(); - op_writedbr(aa.w + regs.y.w + 1, regs.a.h); -} - -sta_ildpy(0x97) { -1:dp = op_readpc(); -2:cpu_c2(); -3:aa.l = op_readdp(dp); -4:aa.h = op_readdp(dp + 1); -5:aa.b = op_readdp(dp + 2); -6:if(regs.p.m)last_cycle(); - op_writelong(aa.d + regs.y.w, regs.a.l); - if(regs.p.m)end; -7:last_cycle(); - op_writelong(aa.d + regs.y.w + 1, regs.a.h); -} - -sta_sr(0x83) { -1:sp = op_readpc(); -2:cpu_io(); -3:if(regs.p.m)last_cycle(); - op_writesp(sp, regs.a.l); - if(regs.p.m)end; -4:last_cycle(); - op_writesp(sp + 1, regs.a.h); -} - -sta_isry(0x93) { -1:sp = op_readpc(); -2:cpu_io(); -3:aa.l = op_readsp(sp); -4:aa.h = op_readsp(sp + 1); -5:cpu_io(); -6:if(regs.p.m)last_cycle(); - op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.p.m)end; -7:last_cycle(); - op_writedbr(aa.w + regs.y.w + 1, regs.a.h); -} diff --git a/src/cpu/bcpu/core/op_write.cpp b/src/cpu/bcpu/core/op_write.cpp deleted file mode 100644 index 01be2850..00000000 --- a/src/cpu/bcpu/core/op_write.cpp +++ /dev/null @@ -1,582 +0,0 @@ -void bCPU::op_sta_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w, regs.a.w); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writedbr(aa.w + 1, regs.a.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_stx_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - op_writedbr(aa.w, regs.x.w); - if(regs.p.x)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writedbr(aa.w + 1, regs.x.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sty_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - op_writedbr(aa.w, regs.y.w); - if(regs.p.x)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writedbr(aa.w + 1, regs.y.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_stz_addr() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w, 0x0000); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writedbr(aa.w + 1, 0x0000 >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w + regs.x.w, regs.a.w); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writedbr(aa.w + regs.x.w + 1, regs.a.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_stz_addrx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.x.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w + regs.x.w, 0x0000); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writedbr(aa.w + regs.x.w + 1, 0x0000 >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_addry() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 4: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writedbr(aa.w + regs.y.w + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_long() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - op_writelong(aa.d, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writelong(aa.d + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_longx() { - switch(status.cycle_pos++) { - case 1: { - aa.l = op_readpc(); - } break; - case 2: { - aa.h = op_readpc(); - } break; - case 3: { - aa.b = op_readpc(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - op_writelong(aa.d + regs.x.w, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writelong(aa.d + regs.x.w + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - op_writedp(dp, regs.a.w); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writedp(dp + 1, regs.a.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_stx_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - op_writedp(dp, regs.x.w); - if(regs.p.x)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writedp(dp + 1, regs.x.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sty_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.x)last_cycle(); - op_writedp(dp, regs.y.w); - if(regs.p.x)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writedp(dp + 1, regs.y.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_stz_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - op_writedp(dp, 0x0000); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writedp(dp + 1, 0x0000 >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - op_writedp(dp + regs.x.w, regs.a.w); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writedp(dp + regs.x.w + 1, regs.a.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sty_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.x)last_cycle(); - op_writedp(dp + regs.x.w, regs.y.w); - if(regs.p.x)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writedp(dp + regs.x.w + 1, regs.y.w >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_stz_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.m)last_cycle(); - op_writedp(dp + regs.x.w, 0x0000); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writedp(dp + regs.x.w + 1, 0x0000 >> 8); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_stx_dpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - if(regs.p.x)last_cycle(); - op_writedp(dp + regs.y.w, regs.x.l); - if(regs.p.x)status.cycle_pos = 0; - } break; - case 5: { - last_cycle(); - op_writedp(dp + regs.y.w + 1, regs.x.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_idp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 6: { - last_cycle(); - op_writedbr(aa.w + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_ildp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - op_writelong(aa.d, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 7: { - last_cycle(); - op_writelong(aa.d + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - cpu_io(); - } break; - case 4: { - aa.l = op_readdp(dp + regs.x.w); - } break; - case 5: { - aa.h = op_readdp(dp + regs.x.w + 1); - } break; - case 6: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - cpu_c4(aa.w, aa.w + regs.y.w); - } break; - case 6: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w + regs.y.w + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_ildpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_readpc(); - } break; - case 2: { - cpu_c2(); - } break; - case 3: { - aa.l = op_readdp(dp); - } break; - case 4: { - aa.h = op_readdp(dp + 1); - } break; - case 5: { - aa.b = op_readdp(dp + 2); - } break; - case 6: { - if(regs.p.m)last_cycle(); - op_writelong(aa.d + regs.y.w, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 7: { - last_cycle(); - op_writelong(aa.d + regs.y.w + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_sr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - if(regs.p.m)last_cycle(); - op_writesp(sp, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 4: { - last_cycle(); - op_writesp(sp + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - -void bCPU::op_sta_isry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_readpc(); - } break; - case 2: { - cpu_io(); - } break; - case 3: { - aa.l = op_readsp(sp); - } break; - case 4: { - aa.h = op_readsp(sp + 1); - } break; - case 5: { - cpu_io(); - } break; - case 6: { - if(regs.p.m)last_cycle(); - op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.p.m)status.cycle_pos = 0; - } break; - case 7: { - last_cycle(); - op_writedbr(aa.w + regs.y.w + 1, regs.a.h); - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/cpu/bcpu/core/opfn.cpp b/src/cpu/bcpu/core/opfn.cpp deleted file mode 100644 index 18eb3d42..00000000 --- a/src/cpu/bcpu/core/opfn.cpp +++ /dev/null @@ -1,377 +0,0 @@ -//op_read -inline void bCPU::op_adc_b() { -int32 r = regs.a.l + rd.l + regs.p.c; - if(regs.p.d) { - uint8 n0 = (regs.a.l ) & 15; - uint8 n1 = (regs.a.l >> 4) & 15; - n0 += ((rd.l) & 15) + regs.p.c; - if(n0 > 9) { - n0 -= 10; - n0 &= 15; - n1++; - } - n1 += ((rd.l >> 4) & 15); - if(n1 > 9) { - n1 -= 10; - n1 &= 15; - regs.p.c = 1; - } else { - regs.p.c = 0; - } - r = (n1 << 4) | (n0); - } else { - r = regs.a.l + rd.l + regs.p.c; - regs.p.c = (r > 0xff); - } - regs.p.n = !!(r & 0x80); - regs.p.v = !!(~(regs.a.l ^ rd.l) & (regs.a.l ^ r) & 0x80); - regs.p.z = ((uint8)r == 0); - regs.a.l = r; -} - -inline void bCPU::op_adc_w() { -int32 r; - if(regs.p.d) { - uint8 n0 = (regs.a.w ) & 15; - uint8 n1 = (regs.a.w >> 4) & 15; - uint8 n2 = (regs.a.w >> 8) & 15; - uint8 n3 = (regs.a.w >> 12) & 15; - n0 += ((rd.w) & 15) + regs.p.c; - if(n0 > 9) { - n0 -= 10; - n0 &= 15; - n1++; - } - n1 += ((rd.w >> 4) & 15); - if(n1 > 9) { - n1 -= 10; - n1 &= 15; - n2++; - } - n2 += ((rd.w >> 8) & 15); - if(n2 > 9) { - n2 -= 10; - n2 &= 15; - n3++; - } - n3 += ((rd.w >> 12) & 15); - if(n3 > 9) { - n3 -= 10; - n3 &= 15; - regs.p.c = 1; - } else { - regs.p.c = 0; - } - r = (n3 << 12) | (n2 << 8) | (n1 << 4) | (n0); - } else { - r = regs.a.w + rd.w + regs.p.c; - regs.p.c = (r > 0xffff); - } - regs.p.n = !!(r & 0x8000); - regs.p.v = !!(~(regs.a.w ^ rd.w) & (regs.a.w ^ r) & 0x8000); - regs.p.z = ((uint16)r == 0); - regs.a.w = r; -} - -inline void bCPU::op_and_b() { - regs.a.l &= rd.l; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); -} - -inline void bCPU::op_and_w() { - regs.a.w &= rd.w; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); -} - -inline void bCPU::op_bit_b() { - regs.p.n = !!(rd.l & 0x80); - regs.p.v = !!(rd.l & 0x40); - regs.p.z = ((rd.l & regs.a.l) == 0); -} - -inline void bCPU::op_bit_w() { - regs.p.n = !!(rd.w & 0x8000); - regs.p.v = !!(rd.w & 0x4000); - regs.p.z = ((rd.w & regs.a.w) == 0); -} - -inline void bCPU::op_cmp_b() { -int32 r = regs.a.l - rd.l; - regs.p.n = !!(r & 0x80); - regs.p.z = ((uint8)r == 0); - regs.p.c = (r >= 0); -} - -inline void bCPU::op_cmp_w() { -int32 r = regs.a.w - rd.w; - regs.p.n = !!(r & 0x8000); - regs.p.z = ((uint16)r == 0); - regs.p.c = (r >= 0); -} - -inline void bCPU::op_cpx_b() { -int32 r = regs.x.l - rd.l; - regs.p.n = !!(r & 0x80); - regs.p.z = ((uint8)r == 0); - regs.p.c = (r >= 0); -} - -inline void bCPU::op_cpx_w() { -int32 r = regs.x.w - rd.w; - regs.p.n = !!(r & 0x8000); - regs.p.z = ((uint16)r == 0); - regs.p.c = (r >= 0); -} - -inline void bCPU::op_cpy_b() { -int32 r = regs.y.l - rd.l; - regs.p.n = !!(r & 0x80); - regs.p.z = ((uint8)r == 0); - regs.p.c = (r >= 0); -} - -inline void bCPU::op_cpy_w() { -int32 r = regs.y.w - rd.w; - regs.p.n = !!(r & 0x8000); - regs.p.z = ((uint16)r == 0); - regs.p.c = (r >= 0); -} - -inline void bCPU::op_eor_b() { - regs.a.l ^= rd.l; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); -} - -inline void bCPU::op_eor_w() { - regs.a.w ^= rd.w; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); -} - -inline void bCPU::op_lda_b() { - regs.a.l = rd.l; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); -} - -inline void bCPU::op_lda_w() { - regs.a.w = rd.w; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); -} - -inline void bCPU::op_ldx_b() { - regs.x.l = rd.l; - regs.p.n = !!(regs.x.l & 0x80); - regs.p.z = (regs.x.l == 0); -} - -inline void bCPU::op_ldx_w() { - regs.x.w = rd.w; - regs.p.n = !!(regs.x.w & 0x8000); - regs.p.z = (regs.x.w == 0); -} - -inline void bCPU::op_ldy_b() { - regs.y.l = rd.l; - regs.p.n = !!(regs.y.l & 0x80); - regs.p.z = (regs.y.l == 0); -} - -inline void bCPU::op_ldy_w() { - regs.y.w = rd.w; - regs.p.n = !!(regs.y.w & 0x8000); - regs.p.z = (regs.y.w == 0); -} - -inline void bCPU::op_ora_b() { - regs.a.l |= rd.l; - regs.p.n = !!(regs.a.l & 0x80); - regs.p.z = (regs.a.l == 0); -} - -inline void bCPU::op_ora_w() { - regs.a.w |= rd.w; - regs.p.n = !!(regs.a.w & 0x8000); - regs.p.z = (regs.a.w == 0); -} - -inline void bCPU::op_sbc_b() { -int32 r; - if(regs.p.d) { - uint8 n0 = (regs.a.l ) & 15; - uint8 n1 = (regs.a.l >> 4) & 15; - n0 -= ((rd.l ) & 15) + !regs.p.c; - n1 -= ((rd.l >> 4) & 15); - if(n0 > 9) { - n0 += 10; - n1--; - } - if(n1 > 9) { - n1 += 10; - regs.p.c = 0; - } else { - regs.p.c = 1; - } - r = (n1 << 4) | (n0); - } else { - r = regs.a.l - rd.l - !regs.p.c; - regs.p.c = (r >= 0); - } - regs.p.n = !!(r & 0x80); - regs.p.v = !!((regs.a.l ^ rd.l) & (regs.a.l ^ r) & 0x80); - regs.p.z = ((uint8)r == 0); - regs.a.l = r; -} - -inline void bCPU::op_sbc_w() { -int32 r; - if(regs.p.d) { - uint8 n0 = (regs.a.w ) & 15; - uint8 n1 = (regs.a.w >> 4) & 15; - uint8 n2 = (regs.a.w >> 8) & 15; - uint8 n3 = (regs.a.w >> 12) & 15; - n0 -= ((rd.w ) & 15) + !regs.p.c; - n1 -= ((rd.w >> 4) & 15); - n2 -= ((rd.w >> 8) & 15); - n3 -= ((rd.w >> 12) & 15); - if(n0 > 9) { - n0 += 10; - n1--; - } - if(n1 > 9) { - n1 += 10; - n2--; - } - if(n2 > 9) { - n2 += 10; - n3--; - } - if(n3 > 9) { - n3 += 10; - regs.p.c = 0; - } else { - regs.p.c = 1; - } - r = (n3 << 12) | (n2 << 8) | (n1 << 4) | (n0); - } else { - r = regs.a.w - rd.w - !regs.p.c; - regs.p.c = (r >= 0); - } - regs.p.n = !!(r & 0x8000); - regs.p.v = !!((regs.a.w ^ rd.w) & (regs.a.w ^ r) & 0x8000); - regs.p.z = ((uint16)r == 0); - regs.a.w = r; -} - -//op_rmw -inline void bCPU::op_inc_b() { - rd.l++; - regs.p.n = !!(rd.l & 0x80); - regs.p.z = (rd.l == 0); -} - -inline void bCPU::op_inc_w() { - rd.w++; - regs.p.n = !!(rd.w & 0x8000); - regs.p.z = (rd.w == 0); -} - -inline void bCPU::op_dec_b() { - rd.l--; - regs.p.n = !!(rd.l & 0x80); - regs.p.z = (rd.l == 0); -} - -inline void bCPU::op_dec_w() { - rd.w--; - regs.p.n = !!(rd.w & 0x8000); - regs.p.z = (rd.w == 0); -} - -inline void bCPU::op_asl_b() { - regs.p.c = !!(rd.l & 0x80); - rd.l <<= 1; - regs.p.n = !!(rd.l & 0x80); - regs.p.z = (rd.l == 0); -} - -inline void bCPU::op_asl_w() { - regs.p.c = !!(rd.w & 0x8000); - rd.w <<= 1; - regs.p.n = !!(rd.w & 0x8000); - regs.p.z = (rd.w == 0); -} - -inline void bCPU::op_lsr_b() { - regs.p.c = rd.l & 1; - rd.l >>= 1; - regs.p.n = !!(rd.l & 0x80); - regs.p.z = (rd.l == 0); -} - -inline void bCPU::op_lsr_w() { - regs.p.c = rd.w & 1; - rd.w >>= 1; - regs.p.n = !!(rd.w & 0x8000); - regs.p.z = (rd.w == 0); -} - -inline void bCPU::op_rol_b() { -uint16 c = regs.p.c; - regs.p.c = !!(rd.l & 0x80); - rd.l <<= 1; - rd.l |= c; - regs.p.n = !!(rd.l & 0x80); - regs.p.z = (rd.l == 0); -} - -inline void bCPU::op_rol_w() { -uint16 c = regs.p.c; - regs.p.c = !!(rd.w & 0x8000); - rd.w <<= 1; - rd.w |= c; - regs.p.n = !!(rd.w & 0x8000); - regs.p.z = (rd.w == 0); -} - -inline void bCPU::op_ror_b() { -uint16 c = (regs.p.c)?0x80:0; - regs.p.c = rd.l & 1; - rd.l >>= 1; - rd.l |= c; - regs.p.n = !!(rd.l & 0x80); - regs.p.z = (rd.l == 0); -} - -inline void bCPU::op_ror_w() { -uint16 c = (regs.p.c)?0x8000:0; - regs.p.c = rd.w & 1; - rd.w >>= 1; - rd.w |= c; - regs.p.n = !!(rd.w & 0x8000); - regs.p.z = (rd.w == 0); -} - -inline void bCPU::op_trb_b() { - regs.p.z = ((rd.l & regs.a.l) == 0); - rd.l &= ~regs.a.l; -} - -inline void bCPU::op_trb_w() { - regs.p.z = ((rd.w & regs.a.w) == 0); - rd.w &= ~regs.a.w; -} - -inline void bCPU::op_tsb_b() { - regs.p.z = ((rd.l & regs.a.l) == 0); - rd.l |= regs.a.l; -} - -inline void bCPU::op_tsb_w() { - regs.p.z = ((rd.w & regs.a.w) == 0); - rd.w |= regs.a.w; -} diff --git a/src/cpu/bcpu/core/optable.cpp b/src/cpu/bcpu/core/optable.cpp deleted file mode 100644 index 4041724c..00000000 --- a/src/cpu/bcpu/core/optable.cpp +++ /dev/null @@ -1,256 +0,0 @@ -optbl[0x69] = &bCPU::op_adc_const; -optbl[0x29] = &bCPU::op_and_const; -optbl[0xc9] = &bCPU::op_cmp_const; -optbl[0xe0] = &bCPU::op_cpx_const; -optbl[0xc0] = &bCPU::op_cpy_const; -optbl[0x49] = &bCPU::op_eor_const; -optbl[0xa9] = &bCPU::op_lda_const; -optbl[0xa2] = &bCPU::op_ldx_const; -optbl[0xa0] = &bCPU::op_ldy_const; -optbl[0x09] = &bCPU::op_ora_const; -optbl[0xe9] = &bCPU::op_sbc_const; -optbl[0x6d] = &bCPU::op_adc_addr; -optbl[0x2d] = &bCPU::op_and_addr; -optbl[0x2c] = &bCPU::op_bit_addr; -optbl[0xcd] = &bCPU::op_cmp_addr; -optbl[0xec] = &bCPU::op_cpx_addr; -optbl[0xcc] = &bCPU::op_cpy_addr; -optbl[0x4d] = &bCPU::op_eor_addr; -optbl[0xad] = &bCPU::op_lda_addr; -optbl[0xae] = &bCPU::op_ldx_addr; -optbl[0xac] = &bCPU::op_ldy_addr; -optbl[0x0d] = &bCPU::op_ora_addr; -optbl[0xed] = &bCPU::op_sbc_addr; -optbl[0x7d] = &bCPU::op_adc_addrx; -optbl[0x3d] = &bCPU::op_and_addrx; -optbl[0x3c] = &bCPU::op_bit_addrx; -optbl[0xdd] = &bCPU::op_cmp_addrx; -optbl[0x5d] = &bCPU::op_eor_addrx; -optbl[0xbd] = &bCPU::op_lda_addrx; -optbl[0xbc] = &bCPU::op_ldy_addrx; -optbl[0x1d] = &bCPU::op_ora_addrx; -optbl[0xfd] = &bCPU::op_sbc_addrx; -optbl[0x79] = &bCPU::op_adc_addry; -optbl[0x39] = &bCPU::op_and_addry; -optbl[0xd9] = &bCPU::op_cmp_addry; -optbl[0x59] = &bCPU::op_eor_addry; -optbl[0xb9] = &bCPU::op_lda_addry; -optbl[0xbe] = &bCPU::op_ldx_addry; -optbl[0x19] = &bCPU::op_ora_addry; -optbl[0xf9] = &bCPU::op_sbc_addry; -optbl[0x6f] = &bCPU::op_adc_long; -optbl[0x2f] = &bCPU::op_and_long; -optbl[0xcf] = &bCPU::op_cmp_long; -optbl[0x4f] = &bCPU::op_eor_long; -optbl[0xaf] = &bCPU::op_lda_long; -optbl[0x0f] = &bCPU::op_ora_long; -optbl[0xef] = &bCPU::op_sbc_long; -optbl[0x7f] = &bCPU::op_adc_longx; -optbl[0x3f] = &bCPU::op_and_longx; -optbl[0xdf] = &bCPU::op_cmp_longx; -optbl[0x5f] = &bCPU::op_eor_longx; -optbl[0xbf] = &bCPU::op_lda_longx; -optbl[0x1f] = &bCPU::op_ora_longx; -optbl[0xff] = &bCPU::op_sbc_longx; -optbl[0x65] = &bCPU::op_adc_dp; -optbl[0x25] = &bCPU::op_and_dp; -optbl[0x24] = &bCPU::op_bit_dp; -optbl[0xc5] = &bCPU::op_cmp_dp; -optbl[0xe4] = &bCPU::op_cpx_dp; -optbl[0xc4] = &bCPU::op_cpy_dp; -optbl[0x45] = &bCPU::op_eor_dp; -optbl[0xa5] = &bCPU::op_lda_dp; -optbl[0xa6] = &bCPU::op_ldx_dp; -optbl[0xa4] = &bCPU::op_ldy_dp; -optbl[0x05] = &bCPU::op_ora_dp; -optbl[0xe5] = &bCPU::op_sbc_dp; -optbl[0x75] = &bCPU::op_adc_dpx; -optbl[0x35] = &bCPU::op_and_dpx; -optbl[0x34] = &bCPU::op_bit_dpx; -optbl[0xd5] = &bCPU::op_cmp_dpx; -optbl[0x55] = &bCPU::op_eor_dpx; -optbl[0xb5] = &bCPU::op_lda_dpx; -optbl[0xb4] = &bCPU::op_ldy_dpx; -optbl[0x15] = &bCPU::op_ora_dpx; -optbl[0xf5] = &bCPU::op_sbc_dpx; -optbl[0xb6] = &bCPU::op_ldx_dpy; -optbl[0x72] = &bCPU::op_adc_idp; -optbl[0x32] = &bCPU::op_and_idp; -optbl[0xd2] = &bCPU::op_cmp_idp; -optbl[0x52] = &bCPU::op_eor_idp; -optbl[0xb2] = &bCPU::op_lda_idp; -optbl[0x12] = &bCPU::op_ora_idp; -optbl[0xf2] = &bCPU::op_sbc_idp; -optbl[0x61] = &bCPU::op_adc_idpx; -optbl[0x21] = &bCPU::op_and_idpx; -optbl[0xc1] = &bCPU::op_cmp_idpx; -optbl[0x41] = &bCPU::op_eor_idpx; -optbl[0xa1] = &bCPU::op_lda_idpx; -optbl[0x01] = &bCPU::op_ora_idpx; -optbl[0xe1] = &bCPU::op_sbc_idpx; -optbl[0x71] = &bCPU::op_adc_idpy; -optbl[0x31] = &bCPU::op_and_idpy; -optbl[0xd1] = &bCPU::op_cmp_idpy; -optbl[0x51] = &bCPU::op_eor_idpy; -optbl[0xb1] = &bCPU::op_lda_idpy; -optbl[0x11] = &bCPU::op_ora_idpy; -optbl[0xf1] = &bCPU::op_sbc_idpy; -optbl[0x67] = &bCPU::op_adc_ildp; -optbl[0x27] = &bCPU::op_and_ildp; -optbl[0xc7] = &bCPU::op_cmp_ildp; -optbl[0x47] = &bCPU::op_eor_ildp; -optbl[0xa7] = &bCPU::op_lda_ildp; -optbl[0x07] = &bCPU::op_ora_ildp; -optbl[0xe7] = &bCPU::op_sbc_ildp; -optbl[0x77] = &bCPU::op_adc_ildpy; -optbl[0x37] = &bCPU::op_and_ildpy; -optbl[0xd7] = &bCPU::op_cmp_ildpy; -optbl[0x57] = &bCPU::op_eor_ildpy; -optbl[0xb7] = &bCPU::op_lda_ildpy; -optbl[0x17] = &bCPU::op_ora_ildpy; -optbl[0xf7] = &bCPU::op_sbc_ildpy; -optbl[0x63] = &bCPU::op_adc_sr; -optbl[0x23] = &bCPU::op_and_sr; -optbl[0xc3] = &bCPU::op_cmp_sr; -optbl[0x43] = &bCPU::op_eor_sr; -optbl[0xa3] = &bCPU::op_lda_sr; -optbl[0x03] = &bCPU::op_ora_sr; -optbl[0xe3] = &bCPU::op_sbc_sr; -optbl[0x73] = &bCPU::op_adc_isry; -optbl[0x33] = &bCPU::op_and_isry; -optbl[0xd3] = &bCPU::op_cmp_isry; -optbl[0x53] = &bCPU::op_eor_isry; -optbl[0xb3] = &bCPU::op_lda_isry; -optbl[0x13] = &bCPU::op_ora_isry; -optbl[0xf3] = &bCPU::op_sbc_isry; -optbl[0x89] = &bCPU::op_bit_const; -optbl[0x1a] = &bCPU::op_inc; -optbl[0xe8] = &bCPU::op_inx; -optbl[0xc8] = &bCPU::op_iny; -optbl[0x3a] = &bCPU::op_dec; -optbl[0xca] = &bCPU::op_dex; -optbl[0x88] = &bCPU::op_dey; -optbl[0x0a] = &bCPU::op_asl; -optbl[0x4a] = &bCPU::op_lsr; -optbl[0x2a] = &bCPU::op_rol; -optbl[0x6a] = &bCPU::op_ror; -optbl[0xee] = &bCPU::op_inc_addr; -optbl[0xce] = &bCPU::op_dec_addr; -optbl[0x0e] = &bCPU::op_asl_addr; -optbl[0x4e] = &bCPU::op_lsr_addr; -optbl[0x2e] = &bCPU::op_rol_addr; -optbl[0x6e] = &bCPU::op_ror_addr; -optbl[0x1c] = &bCPU::op_trb_addr; -optbl[0x0c] = &bCPU::op_tsb_addr; -optbl[0xfe] = &bCPU::op_inc_addrx; -optbl[0xde] = &bCPU::op_dec_addrx; -optbl[0x1e] = &bCPU::op_asl_addrx; -optbl[0x5e] = &bCPU::op_lsr_addrx; -optbl[0x3e] = &bCPU::op_rol_addrx; -optbl[0x7e] = &bCPU::op_ror_addrx; -optbl[0xe6] = &bCPU::op_inc_dp; -optbl[0xc6] = &bCPU::op_dec_dp; -optbl[0x06] = &bCPU::op_asl_dp; -optbl[0x46] = &bCPU::op_lsr_dp; -optbl[0x26] = &bCPU::op_rol_dp; -optbl[0x66] = &bCPU::op_ror_dp; -optbl[0x14] = &bCPU::op_trb_dp; -optbl[0x04] = &bCPU::op_tsb_dp; -optbl[0xf6] = &bCPU::op_inc_dpx; -optbl[0xd6] = &bCPU::op_dec_dpx; -optbl[0x16] = &bCPU::op_asl_dpx; -optbl[0x56] = &bCPU::op_lsr_dpx; -optbl[0x36] = &bCPU::op_rol_dpx; -optbl[0x76] = &bCPU::op_ror_dpx; -optbl[0x8d] = &bCPU::op_sta_addr; -optbl[0x8e] = &bCPU::op_stx_addr; -optbl[0x8c] = &bCPU::op_sty_addr; -optbl[0x9c] = &bCPU::op_stz_addr; -optbl[0x9d] = &bCPU::op_sta_addrx; -optbl[0x9e] = &bCPU::op_stz_addrx; -optbl[0x99] = &bCPU::op_sta_addry; -optbl[0x8f] = &bCPU::op_sta_long; -optbl[0x9f] = &bCPU::op_sta_longx; -optbl[0x85] = &bCPU::op_sta_dp; -optbl[0x86] = &bCPU::op_stx_dp; -optbl[0x84] = &bCPU::op_sty_dp; -optbl[0x64] = &bCPU::op_stz_dp; -optbl[0x95] = &bCPU::op_sta_dpx; -optbl[0x94] = &bCPU::op_sty_dpx; -optbl[0x74] = &bCPU::op_stz_dpx; -optbl[0x96] = &bCPU::op_stx_dpy; -optbl[0x92] = &bCPU::op_sta_idp; -optbl[0x87] = &bCPU::op_sta_ildp; -optbl[0x81] = &bCPU::op_sta_idpx; -optbl[0x91] = &bCPU::op_sta_idpy; -optbl[0x97] = &bCPU::op_sta_ildpy; -optbl[0x83] = &bCPU::op_sta_sr; -optbl[0x93] = &bCPU::op_sta_isry; -optbl[0x90] = &bCPU::op_bcc; -optbl[0xb0] = &bCPU::op_bcs; -optbl[0xd0] = &bCPU::op_bne; -optbl[0xf0] = &bCPU::op_beq; -optbl[0x10] = &bCPU::op_bpl; -optbl[0x30] = &bCPU::op_bmi; -optbl[0x50] = &bCPU::op_bvc; -optbl[0x70] = &bCPU::op_bvs; -optbl[0x80] = &bCPU::op_bra; -optbl[0x82] = &bCPU::op_brl; -optbl[0x4c] = &bCPU::op_jmp_addr; -optbl[0x5c] = &bCPU::op_jmp_long; -optbl[0x6c] = &bCPU::op_jmp_iaddr; -optbl[0x7c] = &bCPU::op_jmp_iaddrx; -optbl[0xdc] = &bCPU::op_jmp_iladdr; -optbl[0x20] = &bCPU::op_jsr_addr; -optbl[0x22] = &bCPU::op_jsr_long; -optbl[0xfc] = &bCPU::op_jsr_iaddrx; -optbl[0x40] = &bCPU::op_rti; -optbl[0x60] = &bCPU::op_rts; -optbl[0x6b] = &bCPU::op_rtl; -optbl[0xea] = &bCPU::op_nop; -optbl[0x42] = &bCPU::op_wdm; -optbl[0xeb] = &bCPU::op_xba; -optbl[0x54] = &bCPU::op_mvn; -optbl[0x44] = &bCPU::op_mvp; -optbl[0x00] = &bCPU::op_brk; -optbl[0x02] = &bCPU::op_cop; -optbl[0xdb] = &bCPU::op_stp; -optbl[0xcb] = &bCPU::op_wai; -optbl[0xfb] = &bCPU::op_xce; -optbl[0x18] = &bCPU::op_clc; -optbl[0xd8] = &bCPU::op_cld; -optbl[0x58] = &bCPU::op_cli; -optbl[0xb8] = &bCPU::op_clv; -optbl[0x38] = &bCPU::op_sec; -optbl[0xf8] = &bCPU::op_sed; -optbl[0x78] = &bCPU::op_sei; -optbl[0xc2] = &bCPU::op_rep; -optbl[0xe2] = &bCPU::op_sep; -optbl[0xaa] = &bCPU::op_tax; -optbl[0xa8] = &bCPU::op_tay; -optbl[0x8a] = &bCPU::op_txa; -optbl[0x9b] = &bCPU::op_txy; -optbl[0x98] = &bCPU::op_tya; -optbl[0xbb] = &bCPU::op_tyx; -optbl[0x5b] = &bCPU::op_tcd; -optbl[0x1b] = &bCPU::op_tcs; -optbl[0x7b] = &bCPU::op_tdc; -optbl[0x3b] = &bCPU::op_tsc; -optbl[0xba] = &bCPU::op_tsx; -optbl[0x9a] = &bCPU::op_txs; -optbl[0x48] = &bCPU::op_pha; -optbl[0xda] = &bCPU::op_phx; -optbl[0x5a] = &bCPU::op_phy; -optbl[0x0b] = &bCPU::op_phd; -optbl[0x8b] = &bCPU::op_phb; -optbl[0x4b] = &bCPU::op_phk; -optbl[0x08] = &bCPU::op_php; -optbl[0x68] = &bCPU::op_pla; -optbl[0xfa] = &bCPU::op_plx; -optbl[0x7a] = &bCPU::op_ply; -optbl[0x2b] = &bCPU::op_pld; -optbl[0xab] = &bCPU::op_plb; -optbl[0x28] = &bCPU::op_plp; -optbl[0xf4] = &bCPU::op_pea; -optbl[0xd4] = &bCPU::op_pei; -optbl[0x62] = &bCPU::op_per; diff --git a/src/cpu/bcpu/dma/dma.cpp b/src/cpu/bcpu/dma/dma.cpp deleted file mode 100644 index d7839702..00000000 --- a/src/cpu/bcpu/dma/dma.cpp +++ /dev/null @@ -1,260 +0,0 @@ -/* used by both DMA and HDMA - * prevents transfer across same bus (a->a or b->b) - */ -void bCPU::dma_transfer_byte(bool direction, uint8 bbus, uint32 abus) { -uint8 r; - if(direction == 0) { - //read from address bus a, write to address bus b - - //DMA address bus a cannot read from or write to the following addresses: - //$[00-3f|80-bf]:21[00-ff]

- //$[00-3f|80-bf]:43[00-7f] - //$[00-3f|80-bf]:420b - //$[00-3f|80-bf]:420c - if((abus & 0x40ff00) == 0x2100 || (abus & 0x40ff80) == 0x4300 || - (abus & 0x40ffff) == 0x420b || (abus & 0x40ffff) == 0x420c) { - //these invalid reads will return open bus - r = r_cpu->regs.mdr; - } else { - r = r_mem->read(abus); - } - - r_mem->write(0x2100 | bbus, r); - } else { - //read from address bus b, write to address bus a - - //block invalid writes, see comments above - r = r_mem->read(0x2100 | bbus); - if((abus & 0x40ff00) == 0x2100 || (abus & 0x40ff80) == 0x4300 || - (abus & 0x40ffff) == 0x420b || (abus & 0x40ffff) == 0x420c)return; - r_mem->write(abus, r); - } -} - -uint8 bCPU::dma_bbus(uint8 i, uint8 index) { - switch(channel[i].xfermode) { - default: - case 0: return (channel[i].destaddr); break; //0 - case 1: return (channel[i].destaddr + (index & 1)); break; //0,1 - case 2: return (channel[i].destaddr); break; //0,0 - case 3: return (channel[i].destaddr + ((index >> 1) & 1)); break; //0,0,1,1 - case 4: return (channel[i].destaddr + (index & 3)); break; //0,1,2,3 - case 5: return (channel[i].destaddr + (index & 1)); break; //0,1,0,1 - case 6: return (channel[i].destaddr); break; //0,0 [2] - case 7: return (channel[i].destaddr + ((index >> 1) & 1)); break; //0,0,1,1 [3] - } -} - -void bCPU::dma_add_cycles(uint32 cycles) { - status.dma_cycle_count += cycles; -} - -void bCPU::hdma_add_cycles(uint32 cycles) { - if(run_state.dma) { - status.dma_cycle_count += cycles; - } - status.hdma_cycle_count += cycles; -} - -uint32 bCPU::dma_addr(uint8 i) { -uint32 r; - r = (channel[i].srcbank << 16) | (channel[i].srcaddr); - - if(channel[i].fixedxfer == false) { - channel[i].srcaddr += channel[i].incmode; - } - - return r; -} - -void bCPU::dma_cputommio(uint8 i, uint8 bbus) { - if(cartridge.info.sdd1 == true && sdd1->dma_active() == true) { - r_mem->write(0x2100 | bbus, sdd1->dma_read()); - } else { - dma_transfer_byte(0, bbus, dma_addr(i)); - } - - add_cycles(8); - channel[i].xfersize--; -} - -void bCPU::dma_mmiotocpu(uint8 i, uint8 bbus) { - dma_transfer_byte(1, bbus, dma_addr(i)); - - add_cycles(8); - channel[i].xfersize--; -} - -void bCPU::dma_write(uint8 i, uint8 index) { - if(channel[i].direction == 0) { - dma_cputommio(i, index); - } else { - dma_mmiotocpu(i, index); - } -} - -void bCPU::dma_run() { - for(int i = 0; i < 8; i++) { - if(channel[i].dma_enabled == false)continue; - - //first byte transferred? - if(cartridge.info.sdd1 == true && channel[i].read_index == 0) { - sdd1->dma_begin(i, (channel[i].srcbank << 16) | (channel[i].srcaddr), - channel[i].xfersize); - } - - dma_write(i, dma_bbus(i, channel[i].read_index++)); - dma_add_cycles(8); - - if(channel[i].xfersize == 0) { - channel[i].dma_enabled = false; - } - - return; - } - - status.dma_state = DMASTATE_CPUSYNC; -} - -uint32 bCPU::hdma_addr(uint8 i) { - return (channel[i].srcbank << 16) | (channel[i].hdma_addr++); -} - -uint32 bCPU::hdma_iaddr(uint8 i) { - return (channel[i].hdma_ibank << 16) | (channel[i].hdma_iaddr++); -} - -void bCPU::hdma_update(uint8 i) { - channel[i].hdma_line_counter = r_mem->read(hdma_addr(i)); - add_cycles(8); - hdma_add_cycles(8); - - if(channel[i].hdma_indirect) { - channel[i].hdma_iaddr = r_mem->read(hdma_addr(i)) << 8; - add_cycles(8); - hdma_add_cycles(8); - } - - if(channel[i].hdma_line_counter == 0) { - channel[i].hdma_completed = true; - channel[i].hdma_do_transfer = false; - return; - } - - channel[i].hdma_do_transfer = true; - - if(channel[i].hdma_indirect) { - channel[i].hdma_iaddr >>= 8; - channel[i].hdma_iaddr |= r_mem->read(hdma_addr(i)) << 8; - add_cycles(8); - hdma_add_cycles(8); - } -} - -void bCPU::hdma_run() { -static uint8 hdma_xferlen[8] = { 1, 2, 2, 4, 4, 4, 2, 4 }; - for(int i = 0; i < 8; i++) { - if(!channel[i].hdma_enabled || channel[i].hdma_completed)continue; - - if(channel[i].hdma_do_transfer) { - int xferlen = hdma_xferlen[channel[i].xfermode]; - for(channel[i].read_index = 0; channel[i].read_index < xferlen; channel[i].read_index++) { - if(bool(config::cpu.hdma_enable) == true) { - dma_transfer_byte(channel[i].direction, dma_bbus(i, channel[i].read_index), - channel[i].hdma_indirect ? hdma_iaddr(i) : hdma_addr(i)); - } - add_cycles(8); - hdma_add_cycles(8); - } - } - - channel[i].hdma_line_counter--; - channel[i].hdma_do_transfer = bool(channel[i].hdma_line_counter & 0x80); - if((channel[i].hdma_line_counter & 0x7f) == 0) { - hdma_update(i); - } - } -} - -void bCPU::hdma_init() { - for(int i = 0; i < 8; i++) { - if(!channel[i].hdma_enabled)continue; - - channel[i].hdma_addr = channel[i].srcaddr; - hdma_update(i); - } -} - -uint8 bCPU::hdma_enabled_channels() { -int r = 0; - for(int i = 0; i < 8; i++) { - if(channel[i].hdma_enabled)r++; - } - return r; -} - -uint8 bCPU::hdma_active_channels() { -int r = 0; - for(int i = 0; i < 8; i++) { - if(channel[i].hdma_enabled && !channel[i].hdma_completed)r++; - } - return r; -} - -/* hdmainit_activate() - * hdma_activate() - * - * Functions are called by CPU timing routine - * when an HDMA event (init or run) occurs. - */ - -void bCPU::hdmainit_activate() { - for(int i = 0; i < 8; i++) { - channel[i].hdma_completed = false; - channel[i].hdma_do_transfer = false; - } - - if(hdma_enabled_channels() != 0) { - status.hdma_state = HDMASTATE_IDMASYNC; - run_state.hdma = true; - } -} - -void bCPU::hdma_activate() { - if(hdma_active_channels() != 0) { - status.hdma_state = HDMASTATE_DMASYNC; - run_state.hdma = true; - } -} - -void bCPU::dma_reset() { - status.dma_state = DMASTATE_CPUSYNC; - status.hdma_state = HDMASTATE_CPUSYNC; - status.dma_cycle_count = 0; - status.hdma_cycle_count = 0; - - for(int i = 0; i < 8; i++) { - channel[i].read_index = 0; - channel[i].dma_enabled = false; - channel[i].hdma_enabled = false; - channel[i].dmap = 0xff; - channel[i].direction = 1; - channel[i].hdma_indirect = 1; - channel[i].incmode = -1; - channel[i].fixedxfer = 1; - channel[i].xfermode = 7; - channel[i].destaddr = 0xff; - channel[i].srcaddr = 0xffff; - channel[i].srcbank = 0xff; - channel[i].xfersize = 0xffff; - //xfersize and hdma_iaddr are of union { uint16 }; - //channel[i].hdma_iaddr = 0xffff; - channel[i].hdma_ibank = 0xff; - channel[i].hdma_addr = 0xffff; - channel[i].hdma_line_counter = 0xff; - channel[i].hdma_unknown = 0xff; - - channel[i].hdma_completed = false; - channel[i].hdma_do_transfer = false; - } -} diff --git a/src/cpu/bcpu/dma/dma.h b/src/cpu/bcpu/dma/dma.h deleted file mode 100644 index fd0ba726..00000000 --- a/src/cpu/bcpu/dma/dma.h +++ /dev/null @@ -1,61 +0,0 @@ -struct { - uint32 read_index; //set to 0 at beginning of DMA/HDMA - -//$420b - bool dma_enabled; -//$420c - bool hdma_enabled; -//$43x0 - uint8 dmap; - bool direction; - bool hdma_indirect; - int8 incmode; - bool fixedxfer; - uint8 xfermode; -//$43x1 - uint8 destaddr; -//$43x2-$43x3 - uint16 srcaddr; -//$43x4 - uint8 srcbank; -//$43x5-$43x6 - union { - uint16 xfersize; - uint16 hdma_iaddr; - }; -//$43x7 - uint8 hdma_ibank; -//$43x8-$43x9 - uint16 hdma_addr; -//$43xa - uint8 hdma_line_counter; -//$43xb/$43xf - uint8 hdma_unknown; - -//hdma-specific - bool hdma_completed; //for this frame - bool hdma_do_transfer; - - uint8 hdma_current_channel; - uint8 hdma_current_pos; -} channel[8]; - - inline void dma_transfer_byte(bool direction, uint8 bbus, uint32 abus); - inline uint8 dma_bbus(uint8 i, uint8 index); - inline void dma_add_cycles(uint32 cycles); - inline void hdma_add_cycles(uint32 cycles); - inline void dma_run(); - inline void hdma_run(); - inline void hdma_init(); - inline void hdma_update(uint8 i); - inline uint8 hdma_enabled_channels(); - inline uint8 hdma_active_channels(); - inline void hdmainit_activate(); - inline void hdma_activate(); - inline void dma_cputommio(uint8 i, uint8 index); - inline void dma_mmiotocpu(uint8 i, uint8 index); - inline void dma_write(uint8 i, uint8 index); - inline uint32 dma_addr(uint8 i); - inline uint32 hdma_addr(uint8 i); - inline uint32 hdma_iaddr(uint8 i); - inline void dma_reset(); diff --git a/src/cpu/bcpu/memory/memory.cpp b/src/cpu/bcpu/memory/memory.cpp deleted file mode 100644 index c4ea39ee..00000000 --- a/src/cpu/bcpu/memory/memory.cpp +++ /dev/null @@ -1,40 +0,0 @@ -uint8 bCPU::port_read(uint8 port) { - return apu_port[port & 3]; -} - -void bCPU::port_write(uint8 port, uint8 value) { - apu_port[port & 3] = value; -} - -/* The next 3 functions control bus timing for the CPU. - * cpu_io is an I/O cycle, and always 6 clock cycles long. - * mem_read / mem_write indicate memory access bus cycle, - * they are either 6, 8, or 12 bus cycles long, depending - * both on location and the $420d.d0 FastROM enable bit. - */ - -void bCPU::cpu_io() { - status.cycle_count = 6; - pre_exec_cycle(); - add_cycles(6); - cycle_edge(); -} - -uint8 bCPU::mem_read(uint32 addr) { - status.cycle_count = r_mem->speed(addr); - pre_exec_cycle(); - add_cycles(status.cycle_count - 4); - regs.mdr = r_mem->read(addr); - add_cycles(4); - cycle_edge(); - return regs.mdr; -} - -void bCPU::mem_write(uint32 addr, uint8 value) { - status.cycle_count = r_mem->speed(addr); - pre_exec_cycle(); - add_cycles(status.cycle_count); - regs.mdr = value; - r_mem->write(addr, value); - cycle_edge(); -} diff --git a/src/cpu/bcpu/memory/memory.h b/src/cpu/bcpu/memory/memory.h deleted file mode 100644 index 61377196..00000000 --- a/src/cpu/bcpu/memory/memory.h +++ /dev/null @@ -1,27 +0,0 @@ -uint8 apu_port[4]; - inline uint8 port_read (uint8 port); - inline void port_write(uint8 port, uint8 value); - - inline void cpu_io(); - inline uint8 mem_read(uint32 addr); - inline void mem_write(uint32 addr, uint8 value); - -/***** - * helper memory addressing functions used by CPU core - *****/ - uint8 op_readpc () { return mem_read((regs.pc.b << 16) + regs.pc.w++); } - uint8 op_readstack() { (regs.e) ? regs.s.l++ : regs.s.w++; return mem_read(regs.s.w); } - uint8 op_readaddr (uint32 addr) { return mem_read(uclip<16>(addr)); } - uint8 op_readlong (uint32 addr) { return mem_read(uclip<24>(addr)); } - uint8 op_readdbr (uint32 addr) { return mem_read(uclip<24>((regs.db << 16) + addr)); } - uint8 op_readpbr (uint32 addr) { return mem_read((regs.pc.b << 16) + uclip<16>(addr)); } - uint8 op_readdp (uint32 addr) { return mem_read(uclip<16>(regs.d + uclip<16>(addr))); } - uint8 op_readsp (uint32 addr) { return mem_read(uclip<16>(regs.s + uclip<16>(addr))); } - - void op_writestack(uint8 data) { mem_write(regs.s.w, data); (regs.e) ? regs.s.l-- : regs.s.w--; } - void op_writeaddr (uint32 addr, uint8 data) { mem_write(uclip<16>(addr), data); } - void op_writelong (uint32 addr, uint8 data) { mem_write(uclip<24>(addr), data); } - void op_writedbr (uint32 addr, uint8 data) { mem_write(uclip<24>((regs.db << 16) + addr), data); } - void op_writepbr (uint32 addr, uint8 data) { mem_write((regs.pc.b << 16) + uclip<16>(addr), data); } - void op_writedp (uint32 addr, uint8 data) { mem_write(uclip<16>(regs.d + uclip<16>(addr)), data); } - void op_writesp (uint32 addr, uint8 data) { mem_write(uclip<16>(regs.s + uclip<16>(addr)), data); } diff --git a/src/cpu/bcpu/timing/timing.cpp b/src/cpu/bcpu/timing/timing.cpp deleted file mode 100644 index 1b282a7b..00000000 --- a/src/cpu/bcpu/timing/timing.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/* Notes about PAL timing: - * As I do not have PAL hardware to run timing tests on, I've - * had to guess on a lot of things. Below is how I've arrived - * at various calculations: - * - * NTSC timing crystal: ~21477272hz - * PAL timing crystal: ~21281370hz - * NTSC ~60fps, PAL ~50fps - * NTSC ~262 lines/frame, PAL ~312 lines/frame - * NTSC 21477272 / (262 * 60) = ~1366 cycles/line - * PAL 21281370 / (312 * 50) = ~1364 cycles/line - * - * As the cycles/line are very close between the two systems, - * I have left the known NTSC anomalies intact for PAL timing. - * In reality, some of these may not exist, and some may be - * slightly different. - * - * [known] - * - DRAM refresh occurs at about the same time every - * scanline on PAL units (per Overload). - * [unknown] - * - Are dots 323/327 still 2 cycles longer than the - * other dots? - * - Is scanline 240 on non-interlace odd frames still - * 4 cycles short? - */ - -uint16 bCPU::vcounter() { return time.v; } -uint16 bCPU::hclock() { return time.hc; } - -bool bCPU::interlace() { return time.interlace; } -bool bCPU::interlace_field() { return time.interlace_field; } -bool bCPU::overscan() { return time.overscan; } -uint16 bCPU::region_scanlines() { return time.region_scanlines; } - -void bCPU::set_interlace(bool r) { time.interlace = r; update_interrupts(); } -void bCPU::set_overscan (bool r) { time.overscan = r; update_interrupts(); } - -uint8 bCPU::dma_counter() { return (time.dma_counter + time.hc) & 6; } - -uint16 bCPU::hcounter() { - if(time.v == 240 && time.interlace == false && time.interlace_field == 1) { - return time.hc >> 2; - } - return (time.hc - ((time.hc > 1292) << 1) - ((time.hc > 1310) << 1)) >> 2; -} - -bool bCPU::nmi_trigger_pos_match(uint32 offset) { -uint16 v = overscan() ? 240 : 225; -uint16 hc = 2 + offset; - return (time.v == v && time.hc == hc); -} - -bool bCPU::irq_trigger_pos_match(uint32 offset) { -uint16 v = status.virq_pos; -uint16 hc = (status.hirq_enabled) ? status.hirq_pos : 0; -uint16 vlimit = region_scanlines() >> 1; - -//positions that can never be latched -//region_scanlines() = 525/NTSC, 625/PAL -//PAL results are unverified on hardware - if(v == 240 && hc == 339 && interlace() == false && interlace_field() == 1)return false; - if(v == (vlimit - 1) && hc == 339 && interlace() == false)return false; - if(v == vlimit && interlace() == false)return false; - if(v == vlimit && hc == 339)return false; - if(v > vlimit)return false; - if(hc > 339)return false; - - hc = (hc != 0) ? ((hc << 2) + 14) : 10; - hc += offset; - if(hc >= time.line_cycles) { - hc -= time.line_cycles; - if(++v >= time.frame_lines) { - v = 0; - } - } - - if((status.virq_enabled == true && time.v == v) || status.virq_enabled == false) { - return (time.hc == hc); - } - - return false; -} - -void bCPU::update_nmi() { - if(time.v == (overscan() ? 240 : 225)) { - time.nmi_read_trigger_pos = 2; - time.nmi_line_trigger_pos = 6; - } else { - time.nmi_read_trigger_pos = -64; - time.nmi_line_trigger_pos = -64; - } -} - -void bCPU::update_irq() { -int vpos = status.virq_pos; -int hpos = (status.hirq_enabled) ? status.hirq_pos : 0; -int vlimit = region_scanlines() >> 1; - -//positions that can never be latched -//region_scanlines() = 262/NTSC, 312/PAL -//PAL results are unverified on hardware - if(vpos == 240 && hpos == 339 && interlace() == false && interlace_field() == 1)goto _nolatch; - if(vpos == (vlimit - 1) && hpos == 339 && interlace() == false)goto _nolatch; - if(vpos == vlimit && interlace() == false)goto _nolatch; - if(vpos == vlimit && hpos == 339)goto _nolatch; - if(vpos > vlimit)goto _nolatch; - if(hpos > 339)goto _nolatch; - - hpos = (hpos != 0) ? ((hpos << 2) + 14) : 10; - if(hpos >= time.line_cycles) { - hpos -= time.line_cycles; - if(++vpos >= time.frame_lines) { - vpos = 0; - } - } - - if((status.virq_enabled == true && time.v == vpos) || status.virq_enabled == false) { - time.irq_read_trigger_pos = hpos; - } else { - time.irq_read_trigger_pos = -64; - } - - hpos += 4; - if(hpos >= time.line_cycles) { - hpos -= time.line_cycles; - if(++vpos >= time.frame_lines) { - vpos = 0; - } - } - - if((status.virq_enabled == true && time.v == vpos) || status.virq_enabled == false) { - time.irq_line_trigger_pos = hpos; - } else { - time.irq_line_trigger_pos = -64; - } - - return; - -_nolatch: - time.irq_read_trigger_pos = -64; - time.irq_line_trigger_pos = -64; -} - -void bCPU::update_interrupts() { - update_nmi(); - update_irq(); -} - -void bCPU::poll_interrupts(int cycles) { -int16 hc, hc_end; - if(time.hc == 0) { - hc = -1; - hc_end = cycles; - } else { - hc = time.hc; - hc_end = time.hc + cycles; - } - - if(hc < time.nmi_read_trigger_pos && time.nmi_read_trigger_pos <= hc_end) { - //nmi_read can go low even with NMI interrupts disabled in $4200.d7 - time.nmi_read = 0; - } - - if(hc < time.nmi_line_trigger_pos && time.nmi_line_trigger_pos <= hc_end) { - if(status.nmi_enabled == true) { - if(time.nmi_line == 1) { - time.nmi_transition = 1; - } - time.nmi_line = 0; - } - } - - if(hc < time.irq_read_trigger_pos && time.irq_read_trigger_pos <= hc_end) { - if(status.virq_enabled == true || status.hirq_enabled == true) { - time.irq_read = 0; - } - } - - if(hc < time.irq_line_trigger_pos && time.irq_line_trigger_pos <= hc_end) { - if(status.virq_enabled == true || status.hirq_enabled == true) { - time.irq_line = 0; - time.irq_transition = 1; - } - } -} - -uint32 bCPU::clocks_executed() { -uint32 r = status.cycles_executed; - status.cycles_executed = 0; - return r; -} - -void bCPU::cycle_edge() { - if(time.line_rendered == false) { - if(time.hc >= 192) { - time.line_rendered = true; - r_ppu->render_scanline(); - } - } - - if(time.hdmainit_triggered == false) { - if(time.hc >= time.hdmainit_trigger_pos || time.v) { - time.hdmainit_triggered = true; - hdmainit_activate(); - } - } - - if(time.hdma_triggered == false) { - //hdma_triggered only set to false for v <= (overscan ? 239 : 224) - if(time.hc >= 1106) { - time.hdma_triggered = true; - hdma_activate(); - } - } -} - -void bCPU::add_cycles(int cycles) { - status.cycles_executed += cycles; - poll_interrupts(cycles); - - if(time.hc + cycles >= time.line_cycles) { - cycles = (time.hc + cycles) - time.line_cycles; - time.hc = 0; - scanline(); - poll_interrupts(cycles); - } - - time.hc += cycles; - - if(time.dram_refreshed == false) { - if(time.hc >= time.dram_refresh_pos) { - time.dram_refreshed = true; - add_cycles(40); - return; - } - } -} - -void bCPU::scanline() { - if(++time.v >= time.frame_lines) { - frame(); - } - - time.dma_counter += time.line_cycles; - if(time.v == 240 && time.interlace == false && time.interlace_field == 1) { - time.line_cycles = 1360; - } else { - time.line_cycles = 1364; - } - time.dram_refreshed = false; - - time.line_rendered = - time.hdma_triggered = (time.v <= (!overscan() ? 224 : 239)) ? false : true; - - r_ppu->scanline(); - snes->scanline(); - - update_interrupts(); - - if(vcounter() == (!overscan() ? 227 : 242) && status.auto_joypad_poll == true) { - snes->poll_input(); - //When the SNES auto-polls the joypads, it writes 1, then 0 to - //$4016, then reads from each 16 times to get the joypad state - //information. As a result, the joypad read positions are set - //to 16 after such a poll. Position 16 is the controller - //connected status bit. - status.joypad1_read_pos = 16; - status.joypad2_read_pos = 16; - } -} - -void bCPU::frame() { - time.nmi_read = 1; - time.nmi_line = 1; - time.nmi_transition = 0; - - time.v = 0; - time.interlace_field ^= 1; - if(interlace() == true && interlace_field() == 0) { - time.frame_lines = (time.region_scanlines >> 1) + 1; - } else { - time.frame_lines = (time.region_scanlines >> 1); - } - - if(cpu_version == 2) { - time.hdmainit_trigger_pos = 12 + dma_counter(); - } else { - time.hdmainit_trigger_pos = 12 + 8 - dma_counter(); - } - time.hdmainit_triggered = false; - - r_ppu->frame(); - snes->frame(); -} - -void bCPU::time_reset() { - time.v = 0; - time.hc = 0; - -//upon SNES reset, start at scanline 0 non-interlace - time.interlace = 0; - time.interlace_field = 0; - time.overscan = false; - time.line_cycles = 1364; - - time.dram_refreshed = false; - time.dram_refresh_pos = (cpu_version == 2) ? 538 : 530; - - time.dma_counter = 0; - -//set at V=0,H=0 - time.hdmainit_trigger_pos = 0; - time.hdmainit_triggered = true; - - time.hdma_triggered = false; - - time.nmi_pending = false; - time.irq_pending = false; - time.nmi_line = time.nmi_read = 1; - time.irq_line = time.irq_read = 1; - - time.nmi_transition = 0; - time.irq_transition = 0; - - update_interrupts(); - - switch(region) { - case NTSC: - time.region_scanlines = 525; - break; - case PAL: - time.region_scanlines = 625; - break; - } - - time.frame_lines = time.region_scanlines >> 1; -} diff --git a/src/cpu/bcpu/timing/timing.h b/src/cpu/bcpu/timing/timing.h deleted file mode 100644 index 0a23bce9..00000000 --- a/src/cpu/bcpu/timing/timing.h +++ /dev/null @@ -1,74 +0,0 @@ -struct { - uint16 v, hc; - - bool interlace, interlace_field, overscan; - uint16 line_cycles, frame_lines; - - bool line_rendered; - - bool dram_refreshed; - uint16 dram_refresh_pos; - - uint8 dma_counter; - - uint16 hdmainit_trigger_pos; - bool hdmainit_triggered; - - bool hdma_triggered; - - uint16 region_scanlines; - -//nmi_pending, irq_pending are used by last_cycle() -//nmi_line = /NMI, nmi_read = $4210.7 -//irq_line = /IRQ, irq_read = $4211.7 - bool nmi_pending, nmi_line, nmi_read; - bool irq_pending, irq_line, irq_read; - -//NMI is edge-sensitive, meaning it triggers when /NMI -//transitions from high to low. This value is set to 1 -//when that happens, and cleared after the nmi_test() -//routine acknowledges it and invokes the NMI interrupt - bool nmi_transition; - -//IRQ is level-sensitive, so it does not need to keep -//track of transitions from high to low. IRQs will -//continue to fire as long as /IRQ stays low. -//However, if a write to $4200 forces IRQs high at the -//exact same clock cycle that /IRQ goes low, the /IRQ -//will still occur. Hence the need for this variable. - bool irq_transition; - -//position is relative to time.hc, set at start of each scanline -//-64 means no trigger point on this scanline -//$4210/$4211 status bits get set before /NMI and /IRQ go low, -//hence the need for two variables for each. - int32 nmi_read_trigger_pos, nmi_line_trigger_pos; - int32 irq_read_trigger_pos, irq_line_trigger_pos; -} time; - - inline uint16 vcounter(); - inline uint16 hcounter(); - inline uint16 hclock(); - inline bool interlace(); - inline bool interlace_field(); - inline bool overscan(); - inline uint16 region_scanlines(); - - inline bool nmi_trigger_pos_match(uint32 offset); - inline bool irq_trigger_pos_match(uint32 offset); - - inline void update_nmi(); - inline void update_irq(); - inline void update_interrupts(); - inline void poll_interrupts(int cycles); - - inline void set_interlace(bool r); - inline void set_overscan (bool r); - - inline uint8 dma_counter(); - - inline void cycle_edge(); - inline void add_cycles(int cycles); - inline void scanline(); - inline void frame(); - inline void time_reset(); diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h index 6647eb5a..ae2b9555 100644 --- a/src/cpu/cpu.h +++ b/src/cpu/cpu.h @@ -1,6 +1,10 @@ #include "cpuregs.h" class CPU : public MMIO { +public: +thread_t thread; + virtual void enter() = 0; + public: //CPU version number //* 1 and 2 are known @@ -30,9 +34,6 @@ CPURegs regs; FLAG_Z = 0x02, FLAG_C = 0x01 }; virtual uint8 pio_status() = 0; - virtual void main() {} - virtual void run() = 0; - virtual uint32 clocks_executed() = 0; virtual void scanline() = 0; virtual void frame() = 0; virtual void power() = 0; diff --git a/src/cpu/cpuregs.h b/src/cpu/cpuregs.h index 99302cca..8a7e8754 100644 --- a/src/cpu/cpuregs.h +++ b/src/cpu/cpuregs.h @@ -71,6 +71,5 @@ CPURegFlags p; uint8 db; uint8 mdr; bool e; -bool acc_8b, idx_8b; - CPURegs() : db(0), mdr(0x00), e(false), acc_8b(true), idx_8b(true) {} + CPURegs() : db(0), mdr(0x00), e(false) {} }; diff --git a/src/cpu/scpu/core/core.cpp b/src/cpu/scpu/core/core.cpp index 3277b043..b8981f41 100644 --- a/src/cpu/scpu/core/core.cpp +++ b/src/cpu/scpu/core/core.cpp @@ -1,6 +1,6 @@ #include "opfn.cpp" -void sCPU::main() { +void sCPU::enter() { for(;;) { if(event.irq) { event.irq = false; @@ -27,10 +27,6 @@ void sCPU::main() { } status.in_opcode = false; - - #ifdef FAVOR_SPEED - co_return(); - #endif } } diff --git a/src/cpu/scpu/core/core.h b/src/cpu/scpu/core/core.h index a2ab86fb..ce2b6794 100644 --- a/src/cpu/scpu/core/core.h +++ b/src/cpu/scpu/core/core.h @@ -3,10 +3,9 @@ CPUReg24 aa, rd; uint8 dp, sp; - inline void main(); - inline void op_irq(); + void op_irq(); - inline bool in_opcode() { return status.in_opcode; } + inline bool in_opcode() { return status.in_opcode; } //op_read void op_adc_b(); diff --git a/src/cpu/scpu/core/op_misc.b b/src/cpu/scpu/core/op_misc.b index 76c9fbf8..33c2554f 100644 --- a/src/cpu/scpu/core/op_misc.b +++ b/src/cpu/scpu/core/op_misc.b @@ -15,7 +15,7 @@ xba(0xeb) { regs.a.l ^= regs.a.h; regs.a.h ^= regs.a.l; regs.a.l ^= regs.a.h; - regs.p.n = bool(regs.a.l & 0x80); + regs.p.n = !!(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); } @@ -27,10 +27,12 @@ mvp(0x44, --) { rd.l = op_readlong((sp << 16) | regs.x.w); 4:op_writelong((dp << 16) | regs.y.w, rd.l); 5:op_io(); - if(regs.idx_8b) { - regs.x.l $1; regs.y.l $1; + if(regs.p.x) { + regs.x.l $1; + regs.y.l $1; } else { - regs.x.w $1; regs.y.w $1; + regs.x.w $1; + regs.y.w $1; } 6:last_cycle(); op_io(); @@ -58,7 +60,6 @@ stp(0xdb) { 2:last_cycle(); while(1) { op_io(); - co_return(); } } @@ -70,7 +71,6 @@ wai(0xcb) { 3:while(event.wai) { last_cycle(); op_io(); - co_return(); } } @@ -80,10 +80,11 @@ xce(0xfb) { bool c = regs.p.c; regs.p.c = regs.e; regs.e = c; - if(regs.e)regs.s.h = 0x01; - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e) { + regs.p |= 0x30; + regs.s.h = 0x01; + } + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } @@ -107,29 +108,28 @@ sep(0xe2, |=) { 2:last_cycle(); op_io(); regs.p $1 rd.l; - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e)regs.p |= 0x30; + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } } -tax(0xaa, regs.idx_8b, x, a), -tay(0xa8, regs.idx_8b, y, a), -txa(0x8a, regs.acc_8b, a, x), -txy(0x9b, regs.idx_8b, y, x), -tya(0x98, regs.acc_8b, a, y), -tyx(0xbb, regs.idx_8b, x, y) { +tax(0xaa, regs.p.x, x, a), +tay(0xa8, regs.p.x, y, a), +txa(0x8a, regs.p.m, a, x), +txy(0x9b, regs.p.x, y, x), +tya(0x98, regs.p.m, a, y), +tyx(0xbb, regs.p.x, x, y) { 1:last_cycle(); op_io(); if($1) { regs.$2.l = regs.$3.l; - regs.p.n = bool(regs.$2.l & 0x80); + regs.p.n = !!(regs.$2.l & 0x80); regs.p.z = (regs.$2.l == 0); } else { regs.$2.w = regs.$3.w; - regs.p.n = bool(regs.$2.w & 0x8000); + regs.p.n = !!(regs.$2.w & 0x8000); regs.p.z = (regs.$2.w == 0); } } @@ -138,7 +138,7 @@ tcd(0x5b) { 1:last_cycle(); op_io(); regs.d.w = regs.a.w; - regs.p.n = bool(regs.d.w & 0x8000); + regs.p.n = !!(regs.d.w & 0x8000); regs.p.z = (regs.d.w == 0); } @@ -153,7 +153,7 @@ tdc(0x7b) { 1:last_cycle(); op_io(); regs.a.w = regs.d.w; - regs.p.n = bool(regs.a.w & 0x8000); + regs.p.n = !!(regs.a.w & 0x8000); regs.p.z = (regs.a.w == 0); } @@ -162,10 +162,10 @@ tsc(0x3b) { op_io(); regs.a.w = regs.s.w; if(regs.e) { - regs.p.n = bool(regs.a.l & 0x80); + regs.p.n = !!(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); } else { - regs.p.n = bool(regs.a.w & 0x8000); + regs.p.n = !!(regs.a.w & 0x8000); regs.p.z = (regs.a.w == 0); } } @@ -173,13 +173,13 @@ tsc(0x3b) { tsx(0xba) { 1:last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.x.l = regs.s.l; - regs.p.n = bool(regs.x.l & 0x80); + regs.p.n = !!(regs.x.l & 0x80); regs.p.z = (regs.x.l == 0); } else { regs.x.w = regs.s.w; - regs.p.n = bool(regs.x.w & 0x8000); + regs.p.n = !!(regs.x.w & 0x8000); regs.p.z = (regs.x.w == 0); } } @@ -194,16 +194,23 @@ txs(0x9a) { } } -pha(0x48, regs.acc_8b, a), -phx(0xda, regs.idx_8b, x), -phy(0x5a, regs.idx_8b, y), -phd(0x0b, 0, d) { +pha(0x48, regs.p.m, a), +phx(0xda, regs.p.x, x), +phy(0x5a, regs.p.x, y) { 1:op_io(); 2:if(!$1)op_writestack(regs.$2.h); 3:last_cycle(); op_writestack(regs.$2.l); } +phd(0x0b) { +1:op_io(); +2:op_writestackn(regs.d.h); +3:last_cycle(); + op_writestackn(regs.d.l); + if(regs.e)regs.s.h = 0x01; +} + phb(0x8b, regs.db), phk(0x4b, regs.pc.b), php(0x08, regs.p) { @@ -212,31 +219,41 @@ php(0x08, regs.p) { op_writestack($1); } -pla(0x68, regs.acc_8b, a), -plx(0xfa, regs.idx_8b, x), -ply(0x7a, regs.idx_8b, y), -pld(0x2b, 0, d) { +pla(0x68, regs.p.m, a), +plx(0xfa, regs.p.x, x), +ply(0x7a, regs.p.x, y) { 1:op_io(); 2:op_io(); 3:if($1)last_cycle(); regs.$2.l = op_readstack(); if($1) { - regs.p.n = bool(regs.$2.l & 0x80); + regs.p.n = !!(regs.$2.l & 0x80); regs.p.z = (regs.$2.l == 0); end; } 4:last_cycle(); regs.$2.h = op_readstack(); - regs.p.n = bool(regs.$2.w & 0x8000); + regs.p.n = !!(regs.$2.w & 0x8000); regs.p.z = (regs.$2.w == 0); } +pld(0x2b) { +1:op_io(); +2:op_io(); +3:regs.d.l = op_readstackn(); +4:last_cycle(); + regs.d.h = op_readstackn(); + regs.p.n = !!(regs.d.w & 0x8000); + regs.p.z = (regs.d.w == 0); + if(regs.e)regs.s.h = 0x01; +} + plb(0xab) { 1:op_io(); 2:op_io(); 3:last_cycle(); regs.db = op_readstack(); - regs.p.n = bool(regs.db & 0x80); + regs.p.n = !!(regs.db & 0x80); regs.p.z = (regs.db == 0); } @@ -245,9 +262,8 @@ plp(0x28) { 2:op_io(); 3:last_cycle(); regs.p = op_readstack(); - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e)regs.p |= 0x30; + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } @@ -256,9 +272,10 @@ plp(0x28) { pea(0xf4) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); -3:op_writestack(aa.h); +3:op_writestackn(aa.h); 4:last_cycle(); - op_writestack(aa.l); + op_writestackn(aa.l); + if(regs.e)regs.s.h = 0x01; } pei(0xd4) { @@ -266,9 +283,10 @@ pei(0xd4) { 2:op_io_cond2(); 3:aa.l = op_readdp(dp); 4:aa.h = op_readdp(dp + 1); -5:op_writestack(aa.h); +5:op_writestackn(aa.h); 6:last_cycle(); - op_writestack(aa.l); + op_writestackn(aa.l); + if(regs.e)regs.s.h = 0x01; } per(0x62) { @@ -276,7 +294,8 @@ per(0x62) { 2:aa.h = op_readpc(); 3:op_io(); rd.w = regs.pc.d + (int16)aa.w; -4:op_writestack(rd.h); +4:op_writestackn(rd.h); 5:last_cycle(); - op_writestack(rd.l); + op_writestackn(rd.l); + if(regs.e)regs.s.h = 0x01; } diff --git a/src/cpu/scpu/core/op_misc.cpp b/src/cpu/scpu/core/op_misc.cpp index 0bdd4ccc..e72b63e9 100644 --- a/src/cpu/scpu/core/op_misc.cpp +++ b/src/cpu/scpu/core/op_misc.cpp @@ -18,7 +18,7 @@ case 0xeb: { regs.a.l ^= regs.a.h; regs.a.h ^= regs.a.l; regs.a.l ^= regs.a.h; - regs.p.n = bool(regs.a.l & 0x80); + regs.p.n = !!(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); } break; @@ -30,10 +30,12 @@ case 0x54: { rd.l = op_readlong((sp << 16) | regs.x.w); op_writelong((dp << 16) | regs.y.w, rd.l); op_io(); - if(regs.idx_8b) { - regs.x.l ++; regs.y.l ++; + if(regs.p.x) { + regs.x.l ++; + regs.y.l ++; } else { - regs.x.w ++; regs.y.w ++; + regs.x.w ++; + regs.y.w ++; } last_cycle(); op_io(); @@ -48,10 +50,12 @@ case 0x44: { rd.l = op_readlong((sp << 16) | regs.x.w); op_writelong((dp << 16) | regs.y.w, rd.l); op_io(); - if(regs.idx_8b) { - regs.x.l --; regs.y.l --; + if(regs.p.x) { + regs.x.l --; + regs.y.l --; } else { - regs.x.w --; regs.y.w --; + regs.x.w --; + regs.y.w --; } last_cycle(); op_io(); @@ -96,7 +100,6 @@ case 0xdb: { last_cycle(); while(1) { op_io(); - co_return(); } } break; @@ -109,7 +112,6 @@ case 0xcb: { while(event.wai) { last_cycle(); op_io(); - co_return(); } } break; @@ -120,10 +122,11 @@ case 0xfb: { bool c = regs.p.c; regs.p.c = regs.e; regs.e = c; - if(regs.e)regs.s.h = 0x01; - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e) { + regs.p |= 0x30; + regs.s.h = 0x01; + } + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } @@ -184,9 +187,8 @@ case 0xc2: { last_cycle(); op_io(); regs.p &=~ rd.l; - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e)regs.p |= 0x30; + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } @@ -198,9 +200,8 @@ case 0xe2: { last_cycle(); op_io(); regs.p |= rd.l; - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e)regs.p |= 0x30; + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } @@ -210,13 +211,13 @@ case 0xe2: { case 0xaa: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.x.l = regs.a.l; - regs.p.n = bool(regs.x.l & 0x80); + regs.p.n = !!(regs.x.l & 0x80); regs.p.z = (regs.x.l == 0); } else { regs.x.w = regs.a.w; - regs.p.n = bool(regs.x.w & 0x8000); + regs.p.n = !!(regs.x.w & 0x8000); regs.p.z = (regs.x.w == 0); } } break; @@ -225,13 +226,13 @@ case 0xaa: { case 0xa8: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.y.l = regs.a.l; - regs.p.n = bool(regs.y.l & 0x80); + regs.p.n = !!(regs.y.l & 0x80); regs.p.z = (regs.y.l == 0); } else { regs.y.w = regs.a.w; - regs.p.n = bool(regs.y.w & 0x8000); + regs.p.n = !!(regs.y.w & 0x8000); regs.p.z = (regs.y.w == 0); } } break; @@ -240,13 +241,13 @@ case 0xa8: { case 0x8a: { last_cycle(); op_io(); - if(regs.acc_8b) { + if(regs.p.m) { regs.a.l = regs.x.l; - regs.p.n = bool(regs.a.l & 0x80); + regs.p.n = !!(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); } else { regs.a.w = regs.x.w; - regs.p.n = bool(regs.a.w & 0x8000); + regs.p.n = !!(regs.a.w & 0x8000); regs.p.z = (regs.a.w == 0); } } break; @@ -255,13 +256,13 @@ case 0x8a: { case 0x9b: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.y.l = regs.x.l; - regs.p.n = bool(regs.y.l & 0x80); + regs.p.n = !!(regs.y.l & 0x80); regs.p.z = (regs.y.l == 0); } else { regs.y.w = regs.x.w; - regs.p.n = bool(regs.y.w & 0x8000); + regs.p.n = !!(regs.y.w & 0x8000); regs.p.z = (regs.y.w == 0); } } break; @@ -270,13 +271,13 @@ case 0x9b: { case 0x98: { last_cycle(); op_io(); - if(regs.acc_8b) { + if(regs.p.m) { regs.a.l = regs.y.l; - regs.p.n = bool(regs.a.l & 0x80); + regs.p.n = !!(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); } else { regs.a.w = regs.y.w; - regs.p.n = bool(regs.a.w & 0x8000); + regs.p.n = !!(regs.a.w & 0x8000); regs.p.z = (regs.a.w == 0); } } break; @@ -285,13 +286,13 @@ case 0x98: { case 0xbb: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.x.l = regs.y.l; - regs.p.n = bool(regs.x.l & 0x80); + regs.p.n = !!(regs.x.l & 0x80); regs.p.z = (regs.x.l == 0); } else { regs.x.w = regs.y.w; - regs.p.n = bool(regs.x.w & 0x8000); + regs.p.n = !!(regs.x.w & 0x8000); regs.p.z = (regs.x.w == 0); } } break; @@ -301,7 +302,7 @@ case 0x5b: { last_cycle(); op_io(); regs.d.w = regs.a.w; - regs.p.n = bool(regs.d.w & 0x8000); + regs.p.n = !!(regs.d.w & 0x8000); regs.p.z = (regs.d.w == 0); } break; @@ -318,7 +319,7 @@ case 0x7b: { last_cycle(); op_io(); regs.a.w = regs.d.w; - regs.p.n = bool(regs.a.w & 0x8000); + regs.p.n = !!(regs.a.w & 0x8000); regs.p.z = (regs.a.w == 0); } break; @@ -328,10 +329,10 @@ case 0x3b: { op_io(); regs.a.w = regs.s.w; if(regs.e) { - regs.p.n = bool(regs.a.l & 0x80); + regs.p.n = !!(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); } else { - regs.p.n = bool(regs.a.w & 0x8000); + regs.p.n = !!(regs.a.w & 0x8000); regs.p.z = (regs.a.w == 0); } } break; @@ -340,13 +341,13 @@ case 0x3b: { case 0xba: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.x.l = regs.s.l; - regs.p.n = bool(regs.x.l & 0x80); + regs.p.n = !!(regs.x.l & 0x80); regs.p.z = (regs.x.l == 0); } else { regs.x.w = regs.s.w; - regs.p.n = bool(regs.x.w & 0x8000); + regs.p.n = !!(regs.x.w & 0x8000); regs.p.z = (regs.x.w == 0); } } break; @@ -365,7 +366,7 @@ case 0x9a: { //pha case 0x48: { op_io(); - if(!regs.acc_8b)op_writestack(regs.a.h); + if(!regs.p.m)op_writestack(regs.a.h); last_cycle(); op_writestack(regs.a.l); } break; @@ -373,7 +374,7 @@ case 0x48: { //phx case 0xda: { op_io(); - if(!regs.idx_8b)op_writestack(regs.x.h); + if(!regs.p.x)op_writestack(regs.x.h); last_cycle(); op_writestack(regs.x.l); } break; @@ -381,7 +382,7 @@ case 0xda: { //phy case 0x5a: { op_io(); - if(!regs.idx_8b)op_writestack(regs.y.h); + if(!regs.p.x)op_writestack(regs.y.h); last_cycle(); op_writestack(regs.y.l); } break; @@ -389,9 +390,10 @@ case 0x5a: { //phd case 0x0b: { op_io(); - if(!0)op_writestack(regs. d.h); + op_writestackn(regs.d.h); last_cycle(); - op_writestack(regs. d.l); + op_writestackn(regs.d.l); + if(regs.e)regs.s.h = 0x01; } break; //phb @@ -419,16 +421,16 @@ case 0x08: { case 0x68: { op_io(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); regs.a.l = op_readstack(); - if(regs.acc_8b) { - regs.p.n = bool(regs.a.l & 0x80); + if(regs.p.m) { + regs.p.n = !!(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); break; } last_cycle(); regs.a.h = op_readstack(); - regs.p.n = bool(regs.a.w & 0x8000); + regs.p.n = !!(regs.a.w & 0x8000); regs.p.z = (regs.a.w == 0); } break; @@ -436,16 +438,16 @@ case 0x68: { case 0xfa: { op_io(); op_io(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); regs.x.l = op_readstack(); - if(regs.idx_8b) { - regs.p.n = bool(regs.x.l & 0x80); + if(regs.p.x) { + regs.p.n = !!(regs.x.l & 0x80); regs.p.z = (regs.x.l == 0); break; } last_cycle(); regs.x.h = op_readstack(); - regs.p.n = bool(regs.x.w & 0x8000); + regs.p.n = !!(regs.x.w & 0x8000); regs.p.z = (regs.x.w == 0); } break; @@ -453,16 +455,16 @@ case 0xfa: { case 0x7a: { op_io(); op_io(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); regs.y.l = op_readstack(); - if(regs.idx_8b) { - regs.p.n = bool(regs.y.l & 0x80); + if(regs.p.x) { + regs.p.n = !!(regs.y.l & 0x80); regs.p.z = (regs.y.l == 0); break; } last_cycle(); regs.y.h = op_readstack(); - regs.p.n = bool(regs.y.w & 0x8000); + regs.p.n = !!(regs.y.w & 0x8000); regs.p.z = (regs.y.w == 0); } break; @@ -470,17 +472,12 @@ case 0x7a: { case 0x2b: { op_io(); op_io(); - if(0)last_cycle(); - regs. d.l = op_readstack(); - if(0) { - regs.p.n = bool(regs. d.l & 0x80); - regs.p.z = (regs. d.l == 0); - break; - } + regs.d.l = op_readstackn(); last_cycle(); - regs. d.h = op_readstack(); - regs.p.n = bool(regs. d.w & 0x8000); - regs.p.z = (regs. d.w == 0); + regs.d.h = op_readstackn(); + regs.p.n = !!(regs.d.w & 0x8000); + regs.p.z = (regs.d.w == 0); + if(regs.e)regs.s.h = 0x01; } break; //plb @@ -489,7 +486,7 @@ case 0xab: { op_io(); last_cycle(); regs.db = op_readstack(); - regs.p.n = bool(regs.db & 0x80); + regs.p.n = !!(regs.db & 0x80); regs.p.z = (regs.db == 0); } break; @@ -499,9 +496,8 @@ case 0x28: { op_io(); last_cycle(); regs.p = op_readstack(); - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e)regs.p |= 0x30; + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } @@ -511,9 +507,10 @@ case 0x28: { case 0xf4: { aa.l = op_readpc(); aa.h = op_readpc(); - op_writestack(aa.h); + op_writestackn(aa.h); last_cycle(); - op_writestack(aa.l); + op_writestackn(aa.l); + if(regs.e)regs.s.h = 0x01; } break; //pei @@ -522,9 +519,10 @@ case 0xd4: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - op_writestack(aa.h); + op_writestackn(aa.h); last_cycle(); - op_writestack(aa.l); + op_writestackn(aa.l); + if(regs.e)regs.s.h = 0x01; } break; //per @@ -533,8 +531,9 @@ case 0x62: { aa.h = op_readpc(); op_io(); rd.w = regs.pc.d + (int16)aa.w; - op_writestack(rd.h); + op_writestackn(rd.h); last_cycle(); - op_writestack(rd.l); + op_writestackn(rd.l); + if(regs.e)regs.s.h = 0x01; } break; diff --git a/src/cpu/scpu/core/op_pc.b b/src/cpu/scpu/core/op_pc.b index 1a3b9e06..958b5602 100644 --- a/src/cpu/scpu/core/op_pc.b +++ b/src/cpu/scpu/core/op_pc.b @@ -48,7 +48,7 @@ jmp_long(0x5c) { 2:rd.h = op_readpc(); 3:last_cycle(); rd.b = op_readpc(); - regs.pc.d = uclip<24>(rd.d); + regs.pc.d = rd.d & 0xffffff; } jmp_iaddr(0x6c) { @@ -77,7 +77,7 @@ jmp_iladdr(0xdc) { 4:rd.h = op_readaddr(aa.w + 1); 5:last_cycle(); rd.b = op_readaddr(aa.w + 2); - regs.pc.d = uclip<24>(rd.d); + regs.pc.d = rd.d & 0xffffff; } jsr_addr(0x20) { @@ -94,35 +94,36 @@ jsr_addr(0x20) { jsr_long(0x22) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); -3:op_writestack(regs.pc.b); +3:op_writestackn(regs.pc.b); 4:op_io(); 5:aa.b = op_readpc(); 6:regs.pc.w--; - op_writestack(regs.pc.h); + op_writestackn(regs.pc.h); 7:last_cycle(); - op_writestack(regs.pc.l); - regs.pc.d = uclip<24>(aa.d); + op_writestackn(regs.pc.l); + regs.pc.d = aa.d & 0xffffff; + if(regs.e)regs.s.h = 0x01; } jsr_iaddrx(0xfc) { 1:aa.l = op_readpc(); -2:op_writestack(regs.pc.h); -3:op_writestack(regs.pc.l); +2:op_writestackn(regs.pc.h); +3:op_writestackn(regs.pc.l); 4:aa.h = op_readpc(); 5:op_io(); 6:rd.l = op_readpbr(aa.w + regs.x.w); 7:last_cycle(); rd.h = op_readpbr(aa.w + regs.x.w + 1); regs.pc.w = rd.w; + if(regs.e)regs.s.h = 0x01; } rti(0x40) { 1:op_io(); 2:op_io(); 3:regs.p = op_readstack(); - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e)regs.p |= 0x30; + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } @@ -135,7 +136,7 @@ rti(0x40) { } 6:last_cycle(); rd.b = op_readstack(); - regs.pc.d = uclip<24>(rd.d); + regs.pc.d = rd.d & 0xffffff; } rts(0x60) { @@ -152,10 +153,11 @@ rts(0x60) { rtl(0x6b) { 1:op_io(); 2:op_io(); -3:rd.l = op_readstack(); -4:rd.h = op_readstack(); +3:rd.l = op_readstackn(); +4:rd.h = op_readstackn(); 5:last_cycle(); - rd.b = op_readstack(); - regs.pc.d = uclip<24>(rd.d); + rd.b = op_readstackn(); + regs.pc.d = rd.d & 0xffffff; regs.pc.w++; + if(regs.e)regs.s.h = 0x01; } diff --git a/src/cpu/scpu/core/op_pc.cpp b/src/cpu/scpu/core/op_pc.cpp index 4fd741a4..9f61ba83 100644 --- a/src/cpu/scpu/core/op_pc.cpp +++ b/src/cpu/scpu/core/op_pc.cpp @@ -151,7 +151,7 @@ case 0x5c: { rd.h = op_readpc(); last_cycle(); rd.b = op_readpc(); - regs.pc.d = uclip<24>(rd.d); + regs.pc.d = rd.d & 0xffffff; } break; //jmp_iaddr @@ -183,7 +183,7 @@ case 0xdc: { rd.h = op_readaddr(aa.w + 1); last_cycle(); rd.b = op_readaddr(aa.w + 2); - regs.pc.d = uclip<24>(rd.d); + regs.pc.d = rd.d & 0xffffff; } break; //jsr_addr @@ -202,27 +202,29 @@ case 0x20: { case 0x22: { aa.l = op_readpc(); aa.h = op_readpc(); - op_writestack(regs.pc.b); + op_writestackn(regs.pc.b); op_io(); aa.b = op_readpc(); regs.pc.w--; - op_writestack(regs.pc.h); + op_writestackn(regs.pc.h); last_cycle(); - op_writestack(regs.pc.l); - regs.pc.d = uclip<24>(aa.d); + op_writestackn(regs.pc.l); + regs.pc.d = aa.d & 0xffffff; + if(regs.e)regs.s.h = 0x01; } break; //jsr_iaddrx case 0xfc: { aa.l = op_readpc(); - op_writestack(regs.pc.h); - op_writestack(regs.pc.l); + op_writestackn(regs.pc.h); + op_writestackn(regs.pc.l); aa.h = op_readpc(); op_io(); rd.l = op_readpbr(aa.w + regs.x.w); last_cycle(); rd.h = op_readpbr(aa.w + regs.x.w + 1); regs.pc.w = rd.w; + if(regs.e)regs.s.h = 0x01; } break; //rti @@ -230,9 +232,8 @@ case 0x40: { op_io(); op_io(); regs.p = op_readstack(); - regs.acc_8b = (regs.e || regs.p.m); - regs.idx_8b = (regs.e || regs.p.x); - if(regs.idx_8b) { + if(regs.e)regs.p |= 0x30; + if(regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } @@ -245,7 +246,7 @@ case 0x40: { } last_cycle(); rd.b = op_readstack(); - regs.pc.d = uclip<24>(rd.d); + regs.pc.d = rd.d & 0xffffff; } break; //rts @@ -264,11 +265,12 @@ case 0x60: { case 0x6b: { op_io(); op_io(); - rd.l = op_readstack(); - rd.h = op_readstack(); + rd.l = op_readstackn(); + rd.h = op_readstackn(); last_cycle(); - rd.b = op_readstack(); - regs.pc.d = uclip<24>(rd.d); + rd.b = op_readstackn(); + regs.pc.d = rd.d & 0xffffff; regs.pc.w++; + if(regs.e)regs.s.h = 0x01; } break; diff --git a/src/cpu/scpu/core/op_read.b b/src/cpu/scpu/core/op_read.b index 393f55b7..1b3d986f 100644 --- a/src/cpu/scpu/core/op_read.b +++ b/src/cpu/scpu/core/op_read.b @@ -1,14 +1,14 @@ -adc_const(0x69, adc, regs.acc_8b), -and_const(0x29, and, regs.acc_8b), -cmp_const(0xc9, cmp, regs.acc_8b), -cpx_const(0xe0, cpx, regs.idx_8b), -cpy_const(0xc0, cpy, regs.idx_8b), -eor_const(0x49, eor, regs.acc_8b), -lda_const(0xa9, lda, regs.acc_8b), -ldx_const(0xa2, ldx, regs.idx_8b), -ldy_const(0xa0, ldy, regs.idx_8b), -ora_const(0x09, ora, regs.acc_8b), -sbc_const(0xe9, sbc, regs.acc_8b) { +adc_const(0x69, adc, regs.p.m), +and_const(0x29, and, regs.p.m), +cmp_const(0xc9, cmp, regs.p.m), +cpx_const(0xe0, cpx, regs.p.x), +cpy_const(0xc0, cpy, regs.p.x), +eor_const(0x49, eor, regs.p.m), +lda_const(0xa9, lda, regs.p.m), +ldx_const(0xa2, ldx, regs.p.x), +ldy_const(0xa0, ldy, regs.p.x), +ora_const(0x09, ora, regs.p.m), +sbc_const(0xe9, sbc, regs.p.m) { 1:if($2)last_cycle(); rd.l = op_readpc(); if($2) { op_$1_b(); end; } @@ -17,18 +17,18 @@ sbc_const(0xe9, sbc, regs.acc_8b) { op_$1_w(); } -adc_addr(0x6d, adc, regs.acc_8b), -and_addr(0x2d, and, regs.acc_8b), -bit_addr(0x2c, bit, regs.acc_8b), -cmp_addr(0xcd, cmp, regs.acc_8b), -cpx_addr(0xec, cpx, regs.idx_8b), -cpy_addr(0xcc, cpy, regs.idx_8b), -eor_addr(0x4d, eor, regs.acc_8b), -lda_addr(0xad, lda, regs.acc_8b), -ldx_addr(0xae, ldx, regs.idx_8b), -ldy_addr(0xac, ldy, regs.idx_8b), -ora_addr(0x0d, ora, regs.acc_8b), -sbc_addr(0xed, sbc, regs.acc_8b) { +adc_addr(0x6d, adc, regs.p.m), +and_addr(0x2d, and, regs.p.m), +bit_addr(0x2c, bit, regs.p.m), +cmp_addr(0xcd, cmp, regs.p.m), +cpx_addr(0xec, cpx, regs.p.x), +cpy_addr(0xcc, cpy, regs.p.x), +eor_addr(0x4d, eor, regs.p.m), +lda_addr(0xad, lda, regs.p.m), +ldx_addr(0xae, ldx, regs.p.x), +ldy_addr(0xac, ldy, regs.p.x), +ora_addr(0x0d, ora, regs.p.m), +sbc_addr(0xed, sbc, regs.p.m) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:if($2)last_cycle(); @@ -39,15 +39,15 @@ sbc_addr(0xed, sbc, regs.acc_8b) { op_$1_w(); } -adc_addrx(0x7d, adc, regs.acc_8b), -and_addrx(0x3d, and, regs.acc_8b), -bit_addrx(0x3c, bit, regs.acc_8b), -cmp_addrx(0xdd, cmp, regs.acc_8b), -eor_addrx(0x5d, eor, regs.acc_8b), -lda_addrx(0xbd, lda, regs.acc_8b), -ldy_addrx(0xbc, ldy, regs.idx_8b), -ora_addrx(0x1d, ora, regs.acc_8b), -sbc_addrx(0xfd, sbc, regs.acc_8b) { +adc_addrx(0x7d, adc, regs.p.m), +and_addrx(0x3d, and, regs.p.m), +bit_addrx(0x3c, bit, regs.p.m), +cmp_addrx(0xdd, cmp, regs.p.m), +eor_addrx(0x5d, eor, regs.p.m), +lda_addrx(0xbd, lda, regs.p.m), +ldy_addrx(0xbc, ldy, regs.p.x), +ora_addrx(0x1d, ora, regs.p.m), +sbc_addrx(0xfd, sbc, regs.p.m) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:op_io_cond4(aa.w, aa.w + regs.x.w); @@ -59,14 +59,14 @@ sbc_addrx(0xfd, sbc, regs.acc_8b) { op_$1_w(); } -adc_addry(0x79, adc, regs.acc_8b), -and_addry(0x39, and, regs.acc_8b), -cmp_addry(0xd9, cmp, regs.acc_8b), -eor_addry(0x59, eor, regs.acc_8b), -lda_addry(0xb9, lda, regs.acc_8b), -ldx_addry(0xbe, ldx, regs.idx_8b), -ora_addry(0x19, ora, regs.acc_8b), -sbc_addry(0xf9, sbc, regs.acc_8b) { +adc_addry(0x79, adc, regs.p.m), +and_addry(0x39, and, regs.p.m), +cmp_addry(0xd9, cmp, regs.p.m), +eor_addry(0x59, eor, regs.p.m), +lda_addry(0xb9, lda, regs.p.m), +ldx_addry(0xbe, ldx, regs.p.x), +ora_addry(0x19, ora, regs.p.m), +sbc_addry(0xf9, sbc, regs.p.m) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:op_io_cond4(aa.w, aa.w + regs.y.w); @@ -78,13 +78,13 @@ sbc_addry(0xf9, sbc, regs.acc_8b) { op_$1_w(); } -adc_long(0x6f, adc, regs.acc_8b), -and_long(0x2f, and, regs.acc_8b), -cmp_long(0xcf, cmp, regs.acc_8b), -eor_long(0x4f, eor, regs.acc_8b), -lda_long(0xaf, lda, regs.acc_8b), -ora_long(0x0f, ora, regs.acc_8b), -sbc_long(0xef, sbc, regs.acc_8b) { +adc_long(0x6f, adc, regs.p.m), +and_long(0x2f, and, regs.p.m), +cmp_long(0xcf, cmp, regs.p.m), +eor_long(0x4f, eor, regs.p.m), +lda_long(0xaf, lda, regs.p.m), +ora_long(0x0f, ora, regs.p.m), +sbc_long(0xef, sbc, regs.p.m) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:aa.b = op_readpc(); @@ -96,13 +96,13 @@ sbc_long(0xef, sbc, regs.acc_8b) { op_$1_w(); } -adc_longx(0x7f, adc, regs.acc_8b), -and_longx(0x3f, and, regs.acc_8b), -cmp_longx(0xdf, cmp, regs.acc_8b), -eor_longx(0x5f, eor, regs.acc_8b), -lda_longx(0xbf, lda, regs.acc_8b), -ora_longx(0x1f, ora, regs.acc_8b), -sbc_longx(0xff, sbc, regs.acc_8b) { +adc_longx(0x7f, adc, regs.p.m), +and_longx(0x3f, and, regs.p.m), +cmp_longx(0xdf, cmp, regs.p.m), +eor_longx(0x5f, eor, regs.p.m), +lda_longx(0xbf, lda, regs.p.m), +ora_longx(0x1f, ora, regs.p.m), +sbc_longx(0xff, sbc, regs.p.m) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:aa.b = op_readpc(); @@ -114,18 +114,18 @@ sbc_longx(0xff, sbc, regs.acc_8b) { op_$1_w(); } -adc_dp(0x65, adc, regs.acc_8b), -and_dp(0x25, and, regs.acc_8b), -bit_dp(0x24, bit, regs.acc_8b), -cmp_dp(0xc5, cmp, regs.acc_8b), -cpx_dp(0xe4, cpx, regs.idx_8b), -cpy_dp(0xc4, cpy, regs.idx_8b), -eor_dp(0x45, eor, regs.acc_8b), -lda_dp(0xa5, lda, regs.acc_8b), -ldx_dp(0xa6, ldx, regs.idx_8b), -ldy_dp(0xa4, ldy, regs.idx_8b), -ora_dp(0x05, ora, regs.acc_8b), -sbc_dp(0xe5, sbc, regs.acc_8b) { +adc_dp(0x65, adc, regs.p.m), +and_dp(0x25, and, regs.p.m), +bit_dp(0x24, bit, regs.p.m), +cmp_dp(0xc5, cmp, regs.p.m), +cpx_dp(0xe4, cpx, regs.p.x), +cpy_dp(0xc4, cpy, regs.p.x), +eor_dp(0x45, eor, regs.p.m), +lda_dp(0xa5, lda, regs.p.m), +ldx_dp(0xa6, ldx, regs.p.x), +ldy_dp(0xa4, ldy, regs.p.x), +ora_dp(0x05, ora, regs.p.m), +sbc_dp(0xe5, sbc, regs.p.m) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:if($2)last_cycle(); @@ -136,15 +136,15 @@ sbc_dp(0xe5, sbc, regs.acc_8b) { op_$1_w(); } -adc_dpx(0x75, adc, regs.acc_8b), -and_dpx(0x35, and, regs.acc_8b), -bit_dpx(0x34, bit, regs.acc_8b), -cmp_dpx(0xd5, cmp, regs.acc_8b), -eor_dpx(0x55, eor, regs.acc_8b), -lda_dpx(0xb5, lda, regs.acc_8b), -ldy_dpx(0xb4, ldy, regs.idx_8b), -ora_dpx(0x15, ora, regs.acc_8b), -sbc_dpx(0xf5, sbc, regs.acc_8b) { +adc_dpx(0x75, adc, regs.p.m), +and_dpx(0x35, and, regs.p.m), +bit_dpx(0x34, bit, regs.p.m), +cmp_dpx(0xd5, cmp, regs.p.m), +eor_dpx(0x55, eor, regs.p.m), +lda_dpx(0xb5, lda, regs.p.m), +ldy_dpx(0xb4, ldy, regs.p.x), +ora_dpx(0x15, ora, regs.p.m), +sbc_dpx(0xf5, sbc, regs.p.m) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:op_io(); @@ -156,7 +156,7 @@ sbc_dpx(0xf5, sbc, regs.acc_8b) { op_$1_w(); } -ldx_dpy(0xb6, ldx, regs.idx_8b) { +ldx_dpy(0xb6, ldx, regs.p.x) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:op_io(); @@ -168,13 +168,13 @@ ldx_dpy(0xb6, ldx, regs.idx_8b) { op_$1_w(); } -adc_idp(0x72, adc, regs.acc_8b), -and_idp(0x32, and, regs.acc_8b), -cmp_idp(0xd2, cmp, regs.acc_8b), -eor_idp(0x52, eor, regs.acc_8b), -lda_idp(0xb2, lda, regs.acc_8b), -ora_idp(0x12, ora, regs.acc_8b), -sbc_idp(0xf2, sbc, regs.acc_8b) { +adc_idp(0x72, adc, regs.p.m), +and_idp(0x32, and, regs.p.m), +cmp_idp(0xd2, cmp, regs.p.m), +eor_idp(0x52, eor, regs.p.m), +lda_idp(0xb2, lda, regs.p.m), +ora_idp(0x12, ora, regs.p.m), +sbc_idp(0xf2, sbc, regs.p.m) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:aa.l = op_readdp(dp); @@ -187,13 +187,13 @@ sbc_idp(0xf2, sbc, regs.acc_8b) { op_$1_w(); } -adc_idpx(0x61, adc, regs.acc_8b), -and_idpx(0x21, and, regs.acc_8b), -cmp_idpx(0xc1, cmp, regs.acc_8b), -eor_idpx(0x41, eor, regs.acc_8b), -lda_idpx(0xa1, lda, regs.acc_8b), -ora_idpx(0x01, ora, regs.acc_8b), -sbc_idpx(0xe1, sbc, regs.acc_8b) { +adc_idpx(0x61, adc, regs.p.m), +and_idpx(0x21, and, regs.p.m), +cmp_idpx(0xc1, cmp, regs.p.m), +eor_idpx(0x41, eor, regs.p.m), +lda_idpx(0xa1, lda, regs.p.m), +ora_idpx(0x01, ora, regs.p.m), +sbc_idpx(0xe1, sbc, regs.p.m) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:op_io(); @@ -207,13 +207,13 @@ sbc_idpx(0xe1, sbc, regs.acc_8b) { op_$1_w(); } -adc_idpy(0x71, adc, regs.acc_8b), -and_idpy(0x31, and, regs.acc_8b), -cmp_idpy(0xd1, cmp, regs.acc_8b), -eor_idpy(0x51, eor, regs.acc_8b), -lda_idpy(0xb1, lda, regs.acc_8b), -ora_idpy(0x11, ora, regs.acc_8b), -sbc_idpy(0xf1, sbc, regs.acc_8b) { +adc_idpy(0x71, adc, regs.p.m), +and_idpy(0x31, and, regs.p.m), +cmp_idpy(0xd1, cmp, regs.p.m), +eor_idpy(0x51, eor, regs.p.m), +lda_idpy(0xb1, lda, regs.p.m), +ora_idpy(0x11, ora, regs.p.m), +sbc_idpy(0xf1, sbc, regs.p.m) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:aa.l = op_readdp(dp); @@ -227,13 +227,13 @@ sbc_idpy(0xf1, sbc, regs.acc_8b) { op_$1_w(); } -adc_ildp(0x67, adc, regs.acc_8b), -and_ildp(0x27, and, regs.acc_8b), -cmp_ildp(0xc7, cmp, regs.acc_8b), -eor_ildp(0x47, eor, regs.acc_8b), -lda_ildp(0xa7, lda, regs.acc_8b), -ora_ildp(0x07, ora, regs.acc_8b), -sbc_ildp(0xe7, sbc, regs.acc_8b) { +adc_ildp(0x67, adc, regs.p.m), +and_ildp(0x27, and, regs.p.m), +cmp_ildp(0xc7, cmp, regs.p.m), +eor_ildp(0x47, eor, regs.p.m), +lda_ildp(0xa7, lda, regs.p.m), +ora_ildp(0x07, ora, regs.p.m), +sbc_ildp(0xe7, sbc, regs.p.m) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:aa.l = op_readdp(dp); @@ -247,13 +247,13 @@ sbc_ildp(0xe7, sbc, regs.acc_8b) { op_$1_w(); } -adc_ildpy(0x77, adc, regs.acc_8b), -and_ildpy(0x37, and, regs.acc_8b), -cmp_ildpy(0xd7, cmp, regs.acc_8b), -eor_ildpy(0x57, eor, regs.acc_8b), -lda_ildpy(0xb7, lda, regs.acc_8b), -ora_ildpy(0x17, ora, regs.acc_8b), -sbc_ildpy(0xf7, sbc, regs.acc_8b) { +adc_ildpy(0x77, adc, regs.p.m), +and_ildpy(0x37, and, regs.p.m), +cmp_ildpy(0xd7, cmp, regs.p.m), +eor_ildpy(0x57, eor, regs.p.m), +lda_ildpy(0xb7, lda, regs.p.m), +ora_ildpy(0x17, ora, regs.p.m), +sbc_ildpy(0xf7, sbc, regs.p.m) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:aa.l = op_readdp(dp); @@ -267,13 +267,13 @@ sbc_ildpy(0xf7, sbc, regs.acc_8b) { op_$1_w(); } -adc_sr(0x63, adc, regs.acc_8b), -and_sr(0x23, and, regs.acc_8b), -cmp_sr(0xc3, cmp, regs.acc_8b), -eor_sr(0x43, eor, regs.acc_8b), -lda_sr(0xa3, lda, regs.acc_8b), -ora_sr(0x03, ora, regs.acc_8b), -sbc_sr(0xe3, sbc, regs.acc_8b) { +adc_sr(0x63, adc, regs.p.m), +and_sr(0x23, and, regs.p.m), +cmp_sr(0xc3, cmp, regs.p.m), +eor_sr(0x43, eor, regs.p.m), +lda_sr(0xa3, lda, regs.p.m), +ora_sr(0x03, ora, regs.p.m), +sbc_sr(0xe3, sbc, regs.p.m) { 1:sp = op_readpc(); 2:op_io(); 3:if($2)last_cycle(); @@ -296,18 +296,18 @@ sbc_isry(0xf3, sbc) { 3:aa.l = op_readsp(sp); 4:aa.h = op_readsp(sp + 1); 5:op_io(); -6:if(regs.acc_8b)last_cycle(); +6:if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_$1_b(); end; } + if(regs.p.m) { op_$1_b(); end; } 7:last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_$1_w(); } bit_const(0x89) { -1:if(regs.acc_8b)last_cycle(); +1:if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { + if(regs.p.m) { regs.p.z = ((rd.l & regs.a.l) == 0); end; } diff --git a/src/cpu/scpu/core/op_read.cpp b/src/cpu/scpu/core/op_read.cpp index 680feb3e..fee2eda8 100644 --- a/src/cpu/scpu/core/op_read.cpp +++ b/src/cpu/scpu/core/op_read.cpp @@ -1,8 +1,8 @@ //adc_const case 0x69: { - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readpc(); op_adc_w(); @@ -10,9 +10,9 @@ case 0x69: { //and_const case 0x29: { - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readpc(); op_and_w(); @@ -20,9 +20,9 @@ case 0x29: { //cmp_const case 0xc9: { - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readpc(); op_cmp_w(); @@ -30,9 +30,9 @@ case 0xc9: { //cpx_const case 0xe0: { - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readpc(); - if(regs.idx_8b) { op_cpx_b(); break; } + if(regs.p.x) { op_cpx_b(); break; } last_cycle(); rd.h = op_readpc(); op_cpx_w(); @@ -40,9 +40,9 @@ case 0xe0: { //cpy_const case 0xc0: { - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readpc(); - if(regs.idx_8b) { op_cpy_b(); break; } + if(regs.p.x) { op_cpy_b(); break; } last_cycle(); rd.h = op_readpc(); op_cpy_w(); @@ -50,9 +50,9 @@ case 0xc0: { //eor_const case 0x49: { - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readpc(); op_eor_w(); @@ -60,9 +60,9 @@ case 0x49: { //lda_const case 0xa9: { - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readpc(); op_lda_w(); @@ -70,9 +70,9 @@ case 0xa9: { //ldx_const case 0xa2: { - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readpc(); - if(regs.idx_8b) { op_ldx_b(); break; } + if(regs.p.x) { op_ldx_b(); break; } last_cycle(); rd.h = op_readpc(); op_ldx_w(); @@ -80,9 +80,9 @@ case 0xa2: { //ldy_const case 0xa0: { - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readpc(); - if(regs.idx_8b) { op_ldy_b(); break; } + if(regs.p.x) { op_ldy_b(); break; } last_cycle(); rd.h = op_readpc(); op_ldy_w(); @@ -90,9 +90,9 @@ case 0xa0: { //ora_const case 0x09: { - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readpc(); op_ora_w(); @@ -100,9 +100,9 @@ case 0x09: { //sbc_const case 0xe9: { - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readpc(); op_sbc_w(); @@ -112,9 +112,9 @@ case 0xe9: { case 0x6d: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_adc_w(); @@ -124,9 +124,9 @@ case 0x6d: { case 0x2d: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_and_w(); @@ -136,9 +136,9 @@ case 0x2d: { case 0x2c: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_bit_b(); break; } + if(regs.p.m) { op_bit_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_bit_w(); @@ -148,9 +148,9 @@ case 0x2c: { case 0xcd: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_cmp_w(); @@ -160,9 +160,9 @@ case 0xcd: { case 0xec: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.idx_8b) { op_cpx_b(); break; } + if(regs.p.x) { op_cpx_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_cpx_w(); @@ -172,9 +172,9 @@ case 0xec: { case 0xcc: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.idx_8b) { op_cpy_b(); break; } + if(regs.p.x) { op_cpy_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_cpy_w(); @@ -184,9 +184,9 @@ case 0xcc: { case 0x4d: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_eor_w(); @@ -196,9 +196,9 @@ case 0x4d: { case 0xad: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_lda_w(); @@ -208,9 +208,9 @@ case 0xad: { case 0xae: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.idx_8b) { op_ldx_b(); break; } + if(regs.p.x) { op_ldx_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_ldx_w(); @@ -220,9 +220,9 @@ case 0xae: { case 0xac: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.idx_8b) { op_ldy_b(); break; } + if(regs.p.x) { op_ldy_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_ldy_w(); @@ -232,9 +232,9 @@ case 0xac: { case 0x0d: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_ora_w(); @@ -244,9 +244,9 @@ case 0x0d: { case 0xed: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_sbc_w(); @@ -257,9 +257,9 @@ case 0x7d: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_adc_w(); @@ -270,9 +270,9 @@ case 0x3d: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_and_w(); @@ -283,9 +283,9 @@ case 0x3c: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.acc_8b) { op_bit_b(); break; } + if(regs.p.m) { op_bit_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_bit_w(); @@ -296,9 +296,9 @@ case 0xdd: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_cmp_w(); @@ -309,9 +309,9 @@ case 0x5d: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_eor_w(); @@ -322,9 +322,9 @@ case 0xbd: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_lda_w(); @@ -335,9 +335,9 @@ case 0xbc: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.idx_8b) { op_ldy_b(); break; } + if(regs.p.x) { op_ldy_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_ldy_w(); @@ -348,9 +348,9 @@ case 0x1d: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_ora_w(); @@ -361,9 +361,9 @@ case 0xfd: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.x.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.x.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.x.w + 1); op_sbc_w(); @@ -374,9 +374,9 @@ case 0x79: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_adc_w(); @@ -387,9 +387,9 @@ case 0x39: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_and_w(); @@ -400,9 +400,9 @@ case 0xd9: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_cmp_w(); @@ -413,9 +413,9 @@ case 0x59: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_eor_w(); @@ -426,9 +426,9 @@ case 0xb9: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_lda_w(); @@ -439,9 +439,9 @@ case 0xbe: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.idx_8b) { op_ldx_b(); break; } + if(regs.p.x) { op_ldx_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_ldx_w(); @@ -452,9 +452,9 @@ case 0x19: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_ora_w(); @@ -465,9 +465,9 @@ case 0xf9: { aa.l = op_readpc(); aa.h = op_readpc(); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_sbc_w(); @@ -478,9 +478,9 @@ case 0x6f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_adc_w(); @@ -491,9 +491,9 @@ case 0x2f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_and_w(); @@ -504,9 +504,9 @@ case 0xcf: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_cmp_w(); @@ -517,9 +517,9 @@ case 0x4f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_eor_w(); @@ -530,9 +530,9 @@ case 0xaf: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_lda_w(); @@ -543,9 +543,9 @@ case 0x0f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_ora_w(); @@ -556,9 +556,9 @@ case 0xef: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_sbc_w(); @@ -569,9 +569,9 @@ case 0x7f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.x.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.x.w + 1); op_adc_w(); @@ -582,9 +582,9 @@ case 0x3f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.x.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.x.w + 1); op_and_w(); @@ -595,9 +595,9 @@ case 0xdf: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.x.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.x.w + 1); op_cmp_w(); @@ -608,9 +608,9 @@ case 0x5f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.x.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.x.w + 1); op_eor_w(); @@ -621,9 +621,9 @@ case 0xbf: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.x.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.x.w + 1); op_lda_w(); @@ -634,9 +634,9 @@ case 0x1f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.x.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.x.w + 1); op_ora_w(); @@ -647,9 +647,9 @@ case 0xff: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.x.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.x.w + 1); op_sbc_w(); @@ -659,9 +659,9 @@ case 0xff: { case 0x65: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_adc_w(); @@ -671,9 +671,9 @@ case 0x65: { case 0x25: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_and_w(); @@ -683,9 +683,9 @@ case 0x25: { case 0x24: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp); - if(regs.acc_8b) { op_bit_b(); break; } + if(regs.p.m) { op_bit_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_bit_w(); @@ -695,9 +695,9 @@ case 0x24: { case 0xc5: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_cmp_w(); @@ -707,9 +707,9 @@ case 0xc5: { case 0xe4: { dp = op_readpc(); op_io_cond2(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdp(dp); - if(regs.idx_8b) { op_cpx_b(); break; } + if(regs.p.x) { op_cpx_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_cpx_w(); @@ -719,9 +719,9 @@ case 0xe4: { case 0xc4: { dp = op_readpc(); op_io_cond2(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdp(dp); - if(regs.idx_8b) { op_cpy_b(); break; } + if(regs.p.x) { op_cpy_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_cpy_w(); @@ -731,9 +731,9 @@ case 0xc4: { case 0x45: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_eor_w(); @@ -743,9 +743,9 @@ case 0x45: { case 0xa5: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_lda_w(); @@ -755,9 +755,9 @@ case 0xa5: { case 0xa6: { dp = op_readpc(); op_io_cond2(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdp(dp); - if(regs.idx_8b) { op_ldx_b(); break; } + if(regs.p.x) { op_ldx_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_ldx_w(); @@ -767,9 +767,9 @@ case 0xa6: { case 0xa4: { dp = op_readpc(); op_io_cond2(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdp(dp); - if(regs.idx_8b) { op_ldy_b(); break; } + if(regs.p.x) { op_ldy_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_ldy_w(); @@ -779,9 +779,9 @@ case 0xa4: { case 0x05: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_ora_w(); @@ -791,9 +791,9 @@ case 0x05: { case 0xe5: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdp(dp + 1); op_sbc_w(); @@ -804,9 +804,9 @@ case 0x75: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_adc_w(); @@ -817,9 +817,9 @@ case 0x35: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_and_w(); @@ -830,9 +830,9 @@ case 0x34: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.acc_8b) { op_bit_b(); break; } + if(regs.p.m) { op_bit_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_bit_w(); @@ -843,9 +843,9 @@ case 0xd5: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_cmp_w(); @@ -856,9 +856,9 @@ case 0x55: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_eor_w(); @@ -869,9 +869,9 @@ case 0xb5: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_lda_w(); @@ -882,9 +882,9 @@ case 0xb4: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.idx_8b) { op_ldy_b(); break; } + if(regs.p.x) { op_ldy_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_ldy_w(); @@ -895,9 +895,9 @@ case 0x15: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_ora_w(); @@ -908,9 +908,9 @@ case 0xf5: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdp(dp + regs.x.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.x.w + 1); op_sbc_w(); @@ -921,9 +921,9 @@ case 0xb6: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); rd.l = op_readdp(dp + regs.y.w); - if(regs.idx_8b) { op_ldx_b(); break; } + if(regs.p.x) { op_ldx_b(); break; } last_cycle(); rd.h = op_readdp(dp + regs.y.w + 1); op_ldx_w(); @@ -935,9 +935,9 @@ case 0x72: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_adc_w(); @@ -949,9 +949,9 @@ case 0x32: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_and_w(); @@ -963,9 +963,9 @@ case 0xd2: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_cmp_w(); @@ -977,9 +977,9 @@ case 0x52: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_eor_w(); @@ -991,9 +991,9 @@ case 0xb2: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_lda_w(); @@ -1005,9 +1005,9 @@ case 0x12: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_ora_w(); @@ -1019,9 +1019,9 @@ case 0xf2: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_sbc_w(); @@ -1034,9 +1034,9 @@ case 0x61: { op_io(); aa.l = op_readdp(dp + regs.x.w); aa.h = op_readdp(dp + regs.x.w + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_adc_w(); @@ -1049,9 +1049,9 @@ case 0x21: { op_io(); aa.l = op_readdp(dp + regs.x.w); aa.h = op_readdp(dp + regs.x.w + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_and_w(); @@ -1064,9 +1064,9 @@ case 0xc1: { op_io(); aa.l = op_readdp(dp + regs.x.w); aa.h = op_readdp(dp + regs.x.w + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_cmp_w(); @@ -1079,9 +1079,9 @@ case 0x41: { op_io(); aa.l = op_readdp(dp + regs.x.w); aa.h = op_readdp(dp + regs.x.w + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_eor_w(); @@ -1094,9 +1094,9 @@ case 0xa1: { op_io(); aa.l = op_readdp(dp + regs.x.w); aa.h = op_readdp(dp + regs.x.w + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_lda_w(); @@ -1109,9 +1109,9 @@ case 0x01: { op_io(); aa.l = op_readdp(dp + regs.x.w); aa.h = op_readdp(dp + regs.x.w + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_ora_w(); @@ -1124,9 +1124,9 @@ case 0xe1: { op_io(); aa.l = op_readdp(dp + regs.x.w); aa.h = op_readdp(dp + regs.x.w + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + 1); op_sbc_w(); @@ -1139,9 +1139,9 @@ case 0x71: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_adc_w(); @@ -1154,9 +1154,9 @@ case 0x31: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_and_w(); @@ -1169,9 +1169,9 @@ case 0xd1: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_cmp_w(); @@ -1184,9 +1184,9 @@ case 0x51: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_eor_w(); @@ -1199,9 +1199,9 @@ case 0xb1: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_lda_w(); @@ -1214,9 +1214,9 @@ case 0x11: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_ora_w(); @@ -1229,9 +1229,9 @@ case 0xf1: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); op_io_cond4(aa.w, aa.w + regs.y.w); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_sbc_w(); @@ -1244,9 +1244,9 @@ case 0x67: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_adc_w(); @@ -1259,9 +1259,9 @@ case 0x27: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_and_w(); @@ -1274,9 +1274,9 @@ case 0xc7: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_cmp_w(); @@ -1289,9 +1289,9 @@ case 0x47: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_eor_w(); @@ -1304,9 +1304,9 @@ case 0xa7: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_lda_w(); @@ -1319,9 +1319,9 @@ case 0x07: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_ora_w(); @@ -1334,9 +1334,9 @@ case 0xe7: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + 1); op_sbc_w(); @@ -1349,9 +1349,9 @@ case 0x77: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.y.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.y.w + 1); op_adc_w(); @@ -1364,9 +1364,9 @@ case 0x37: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.y.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.y.w + 1); op_and_w(); @@ -1379,9 +1379,9 @@ case 0xd7: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.y.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.y.w + 1); op_cmp_w(); @@ -1394,9 +1394,9 @@ case 0x57: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.y.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.y.w + 1); op_eor_w(); @@ -1409,9 +1409,9 @@ case 0xb7: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.y.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.y.w + 1); op_lda_w(); @@ -1424,9 +1424,9 @@ case 0x17: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.y.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.y.w + 1); op_ora_w(); @@ -1439,9 +1439,9 @@ case 0xf7: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readlong(aa.d + regs.y.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readlong(aa.d + regs.y.w + 1); op_sbc_w(); @@ -1451,9 +1451,9 @@ case 0xf7: { case 0x63: { sp = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readsp(sp); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readsp(sp + 1); op_adc_w(); @@ -1463,9 +1463,9 @@ case 0x63: { case 0x23: { sp = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readsp(sp); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readsp(sp + 1); op_and_w(); @@ -1475,9 +1475,9 @@ case 0x23: { case 0xc3: { sp = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readsp(sp); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readsp(sp + 1); op_cmp_w(); @@ -1487,9 +1487,9 @@ case 0xc3: { case 0x43: { sp = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readsp(sp); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readsp(sp + 1); op_eor_w(); @@ -1499,9 +1499,9 @@ case 0x43: { case 0xa3: { sp = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readsp(sp); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readsp(sp + 1); op_lda_w(); @@ -1511,9 +1511,9 @@ case 0xa3: { case 0x03: { sp = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readsp(sp); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readsp(sp + 1); op_ora_w(); @@ -1523,9 +1523,9 @@ case 0x03: { case 0xe3: { sp = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readsp(sp); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readsp(sp + 1); op_sbc_w(); @@ -1538,9 +1538,9 @@ case 0x73: { aa.l = op_readsp(sp); aa.h = op_readsp(sp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_adc_b(); break; } + if(regs.p.m) { op_adc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_adc_w(); @@ -1553,9 +1553,9 @@ case 0x33: { aa.l = op_readsp(sp); aa.h = op_readsp(sp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_and_b(); break; } + if(regs.p.m) { op_and_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_and_w(); @@ -1568,9 +1568,9 @@ case 0xd3: { aa.l = op_readsp(sp); aa.h = op_readsp(sp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_cmp_b(); break; } + if(regs.p.m) { op_cmp_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_cmp_w(); @@ -1583,9 +1583,9 @@ case 0x53: { aa.l = op_readsp(sp); aa.h = op_readsp(sp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_eor_b(); break; } + if(regs.p.m) { op_eor_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_eor_w(); @@ -1598,9 +1598,9 @@ case 0xb3: { aa.l = op_readsp(sp); aa.h = op_readsp(sp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_lda_b(); break; } + if(regs.p.m) { op_lda_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_lda_w(); @@ -1613,9 +1613,9 @@ case 0x13: { aa.l = op_readsp(sp); aa.h = op_readsp(sp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_ora_b(); break; } + if(regs.p.m) { op_ora_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_ora_w(); @@ -1628,9 +1628,9 @@ case 0xf3: { aa.l = op_readsp(sp); aa.h = op_readsp(sp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readdbr(aa.w + regs.y.w); - if(regs.acc_8b) { op_sbc_b(); break; } + if(regs.p.m) { op_sbc_b(); break; } last_cycle(); rd.h = op_readdbr(aa.w + regs.y.w + 1); op_sbc_w(); @@ -1638,9 +1638,9 @@ case 0xf3: { //bit_const case 0x89: { - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); rd.l = op_readpc(); - if(regs.acc_8b) { + if(regs.p.m) { regs.p.z = ((rd.l & regs.a.l) == 0); break; } diff --git a/src/cpu/scpu/core/op_rmw.b b/src/cpu/scpu/core/op_rmw.b index 464e4d94..cea0cd99 100644 --- a/src/cpu/scpu/core/op_rmw.b +++ b/src/cpu/scpu/core/op_rmw.b @@ -1,6 +1,6 @@ -inc(0x1a, regs.acc_8b, a), -inx(0xe8, regs.idx_8b, x), -iny(0xc8, regs.idx_8b, y) { +inc(0x1a, regs.p.m, a), +inx(0xe8, regs.p.x, x), +iny(0xc8, regs.p.x, y) { 1:last_cycle(); op_io(); if($1) { @@ -14,9 +14,9 @@ iny(0xc8, regs.idx_8b, y) { } } -dec(0x3a, regs.acc_8b, a), -dex(0xca, regs.idx_8b, x), -dey(0x88, regs.idx_8b, y) { +dec(0x3a, regs.p.m, a), +dex(0xca, regs.p.x, x), +dey(0x88, regs.p.x, y) { 1:last_cycle(); op_io(); if($1) { @@ -33,7 +33,7 @@ dey(0x88, regs.idx_8b, y) { asl(0x0a) { 1:last_cycle(); op_io(); - if(regs.acc_8b) { + if(regs.p.m) { regs.p.c = bool(regs.a.l & 0x80); regs.a.l <<= 1; regs.p.n = bool(regs.a.l & 0x80); @@ -49,7 +49,7 @@ asl(0x0a) { lsr(0x4a) { 1:last_cycle(); op_io(); - if(regs.acc_8b) { + if(regs.p.m) { regs.p.c = regs.a.l & 1; regs.a.l >>= 1; regs.p.n = bool(regs.a.l & 0x80); @@ -66,7 +66,7 @@ rol(0x2a) { 1:last_cycle(); op_io(); uint16 c = regs.p.c; - if(regs.acc_8b) { + if(regs.p.m) { regs.p.c = bool(regs.a.l & 0x80); regs.a.l <<= 1; regs.a.l |= c; @@ -85,7 +85,7 @@ ror(0x6a) { 1:last_cycle(); op_io(); uint16 c; - if(regs.acc_8b) { + if(regs.p.m) { c = (regs.p.c)?0x80:0; regs.p.c = regs.a.l & 1; regs.a.l >>= 1; @@ -113,9 +113,9 @@ tsb_addr(0x0c, tsb) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:rd.l = op_readdbr(aa.w); -4:if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); +4:if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); 5:op_io(); - if(regs.acc_8b) { op_$1_b(); } + if(regs.p.m) { op_$1_b(); } else { op_$1_w(); 6:op_writedbr(aa.w + 1, rd.h); } 7:last_cycle(); @@ -132,9 +132,9 @@ ror_addrx(0x7e, ror) { 2:aa.h = op_readpc(); 3:op_io(); 4:rd.l = op_readdbr(aa.w + regs.x.w); -5:if(!regs.acc_8b)rd.h = op_readdbr(aa.w + regs.x.w + 1); +5:if(!regs.p.m)rd.h = op_readdbr(aa.w + regs.x.w + 1); 6:op_io(); - if(regs.acc_8b) { op_$1_b(); } + if(regs.p.m) { op_$1_b(); } else { op_$1_w(); 7:op_writedbr(aa.w + regs.x.w + 1, rd.h); } 8:last_cycle(); @@ -152,9 +152,9 @@ tsb_dp(0x04, tsb) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:rd.l = op_readdp(dp); -4:if(!regs.acc_8b)rd.h = op_readdp(dp + 1); +4:if(!regs.p.m)rd.h = op_readdp(dp + 1); 5:op_io(); - if(regs.acc_8b) { op_$1_b(); } + if(regs.p.m) { op_$1_b(); } else { op_$1_w(); 6:op_writedp(dp + 1, rd.h); } 7:last_cycle(); @@ -171,9 +171,9 @@ ror_dpx(0x76, ror) { 2:op_io_cond2(); 3:op_io(); 4:rd.l = op_readdp(dp + regs.x.w); -5:if(!regs.acc_8b)rd.h = op_readdp(dp + regs.x.w + 1); +5:if(!regs.p.m)rd.h = op_readdp(dp + regs.x.w + 1); 6:op_io(); - if(regs.acc_8b) { op_$1_b(); } + if(regs.p.m) { op_$1_b(); } else { op_$1_w(); 7:op_writedp(dp + regs.x.w + 1, rd.h); } 8:last_cycle(); diff --git a/src/cpu/scpu/core/op_rmw.cpp b/src/cpu/scpu/core/op_rmw.cpp index a2280ce0..104e47a6 100644 --- a/src/cpu/scpu/core/op_rmw.cpp +++ b/src/cpu/scpu/core/op_rmw.cpp @@ -2,7 +2,7 @@ case 0x1a: { last_cycle(); op_io(); - if(regs.acc_8b) { + if(regs.p.m) { regs.a.l++; regs.p.n = bool(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); @@ -17,7 +17,7 @@ case 0x1a: { case 0xe8: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.x.l++; regs.p.n = bool(regs.x.l & 0x80); regs.p.z = (regs.x.l == 0); @@ -32,7 +32,7 @@ case 0xe8: { case 0xc8: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.y.l++; regs.p.n = bool(regs.y.l & 0x80); regs.p.z = (regs.y.l == 0); @@ -47,7 +47,7 @@ case 0xc8: { case 0x3a: { last_cycle(); op_io(); - if(regs.acc_8b) { + if(regs.p.m) { regs.a.l--; regs.p.n = bool(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); @@ -62,7 +62,7 @@ case 0x3a: { case 0xca: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.x.l--; regs.p.n = bool(regs.x.l & 0x80); regs.p.z = (regs.x.l == 0); @@ -77,7 +77,7 @@ case 0xca: { case 0x88: { last_cycle(); op_io(); - if(regs.idx_8b) { + if(regs.p.x) { regs.y.l--; regs.p.n = bool(regs.y.l & 0x80); regs.p.z = (regs.y.l == 0); @@ -92,7 +92,7 @@ case 0x88: { case 0x0a: { last_cycle(); op_io(); - if(regs.acc_8b) { + if(regs.p.m) { regs.p.c = bool(regs.a.l & 0x80); regs.a.l <<= 1; regs.p.n = bool(regs.a.l & 0x80); @@ -109,7 +109,7 @@ case 0x0a: { case 0x4a: { last_cycle(); op_io(); - if(regs.acc_8b) { + if(regs.p.m) { regs.p.c = regs.a.l & 1; regs.a.l >>= 1; regs.p.n = bool(regs.a.l & 0x80); @@ -127,7 +127,7 @@ case 0x2a: { last_cycle(); op_io(); uint16 c = regs.p.c; - if(regs.acc_8b) { + if(regs.p.m) { regs.p.c = bool(regs.a.l & 0x80); regs.a.l <<= 1; regs.a.l |= c; @@ -147,7 +147,7 @@ case 0x6a: { last_cycle(); op_io(); uint16 c; - if(regs.acc_8b) { + if(regs.p.m) { c = (regs.p.c)?0x80:0; regs.p.c = regs.a.l & 1; regs.a.l >>= 1; @@ -169,9 +169,9 @@ case 0xee: { aa.l = op_readpc(); aa.h = op_readpc(); rd.l = op_readdbr(aa.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); op_io(); - if(regs.acc_8b) { op_inc_b(); } + if(regs.p.m) { op_inc_b(); } else { op_inc_w(); op_writedbr(aa.w + 1, rd.h); } last_cycle(); @@ -183,9 +183,9 @@ case 0xce: { aa.l = op_readpc(); aa.h = op_readpc(); rd.l = op_readdbr(aa.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); op_io(); - if(regs.acc_8b) { op_dec_b(); } + if(regs.p.m) { op_dec_b(); } else { op_dec_w(); op_writedbr(aa.w + 1, rd.h); } last_cycle(); @@ -197,9 +197,9 @@ case 0x0e: { aa.l = op_readpc(); aa.h = op_readpc(); rd.l = op_readdbr(aa.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); op_io(); - if(regs.acc_8b) { op_asl_b(); } + if(regs.p.m) { op_asl_b(); } else { op_asl_w(); op_writedbr(aa.w + 1, rd.h); } last_cycle(); @@ -211,9 +211,9 @@ case 0x4e: { aa.l = op_readpc(); aa.h = op_readpc(); rd.l = op_readdbr(aa.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); op_io(); - if(regs.acc_8b) { op_lsr_b(); } + if(regs.p.m) { op_lsr_b(); } else { op_lsr_w(); op_writedbr(aa.w + 1, rd.h); } last_cycle(); @@ -225,9 +225,9 @@ case 0x2e: { aa.l = op_readpc(); aa.h = op_readpc(); rd.l = op_readdbr(aa.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); op_io(); - if(regs.acc_8b) { op_rol_b(); } + if(regs.p.m) { op_rol_b(); } else { op_rol_w(); op_writedbr(aa.w + 1, rd.h); } last_cycle(); @@ -239,9 +239,9 @@ case 0x6e: { aa.l = op_readpc(); aa.h = op_readpc(); rd.l = op_readdbr(aa.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); op_io(); - if(regs.acc_8b) { op_ror_b(); } + if(regs.p.m) { op_ror_b(); } else { op_ror_w(); op_writedbr(aa.w + 1, rd.h); } last_cycle(); @@ -253,9 +253,9 @@ case 0x1c: { aa.l = op_readpc(); aa.h = op_readpc(); rd.l = op_readdbr(aa.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); op_io(); - if(regs.acc_8b) { op_trb_b(); } + if(regs.p.m) { op_trb_b(); } else { op_trb_w(); op_writedbr(aa.w + 1, rd.h); } last_cycle(); @@ -267,9 +267,9 @@ case 0x0c: { aa.l = op_readpc(); aa.h = op_readpc(); rd.l = op_readdbr(aa.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + 1); op_io(); - if(regs.acc_8b) { op_tsb_b(); } + if(regs.p.m) { op_tsb_b(); } else { op_tsb_w(); op_writedbr(aa.w + 1, rd.h); } last_cycle(); @@ -282,9 +282,9 @@ case 0xfe: { aa.h = op_readpc(); op_io(); rd.l = op_readdbr(aa.w + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_inc_b(); } + if(regs.p.m) { op_inc_b(); } else { op_inc_w(); op_writedbr(aa.w + regs.x.w + 1, rd.h); } last_cycle(); @@ -297,9 +297,9 @@ case 0xde: { aa.h = op_readpc(); op_io(); rd.l = op_readdbr(aa.w + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_dec_b(); } + if(regs.p.m) { op_dec_b(); } else { op_dec_w(); op_writedbr(aa.w + regs.x.w + 1, rd.h); } last_cycle(); @@ -312,9 +312,9 @@ case 0x1e: { aa.h = op_readpc(); op_io(); rd.l = op_readdbr(aa.w + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_asl_b(); } + if(regs.p.m) { op_asl_b(); } else { op_asl_w(); op_writedbr(aa.w + regs.x.w + 1, rd.h); } last_cycle(); @@ -327,9 +327,9 @@ case 0x5e: { aa.h = op_readpc(); op_io(); rd.l = op_readdbr(aa.w + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_lsr_b(); } + if(regs.p.m) { op_lsr_b(); } else { op_lsr_w(); op_writedbr(aa.w + regs.x.w + 1, rd.h); } last_cycle(); @@ -342,9 +342,9 @@ case 0x3e: { aa.h = op_readpc(); op_io(); rd.l = op_readdbr(aa.w + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_rol_b(); } + if(regs.p.m) { op_rol_b(); } else { op_rol_w(); op_writedbr(aa.w + regs.x.w + 1, rd.h); } last_cycle(); @@ -357,9 +357,9 @@ case 0x7e: { aa.h = op_readpc(); op_io(); rd.l = op_readdbr(aa.w + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdbr(aa.w + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdbr(aa.w + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_ror_b(); } + if(regs.p.m) { op_ror_b(); } else { op_ror_w(); op_writedbr(aa.w + regs.x.w + 1, rd.h); } last_cycle(); @@ -371,9 +371,9 @@ case 0xe6: { dp = op_readpc(); op_io_cond2(); rd.l = op_readdp(dp); - if(!regs.acc_8b)rd.h = op_readdp(dp + 1); + if(!regs.p.m)rd.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b) { op_inc_b(); } + if(regs.p.m) { op_inc_b(); } else { op_inc_w(); op_writedp(dp + 1, rd.h); } last_cycle(); @@ -385,9 +385,9 @@ case 0xc6: { dp = op_readpc(); op_io_cond2(); rd.l = op_readdp(dp); - if(!regs.acc_8b)rd.h = op_readdp(dp + 1); + if(!regs.p.m)rd.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b) { op_dec_b(); } + if(regs.p.m) { op_dec_b(); } else { op_dec_w(); op_writedp(dp + 1, rd.h); } last_cycle(); @@ -399,9 +399,9 @@ case 0x06: { dp = op_readpc(); op_io_cond2(); rd.l = op_readdp(dp); - if(!regs.acc_8b)rd.h = op_readdp(dp + 1); + if(!regs.p.m)rd.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b) { op_asl_b(); } + if(regs.p.m) { op_asl_b(); } else { op_asl_w(); op_writedp(dp + 1, rd.h); } last_cycle(); @@ -413,9 +413,9 @@ case 0x46: { dp = op_readpc(); op_io_cond2(); rd.l = op_readdp(dp); - if(!regs.acc_8b)rd.h = op_readdp(dp + 1); + if(!regs.p.m)rd.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b) { op_lsr_b(); } + if(regs.p.m) { op_lsr_b(); } else { op_lsr_w(); op_writedp(dp + 1, rd.h); } last_cycle(); @@ -427,9 +427,9 @@ case 0x26: { dp = op_readpc(); op_io_cond2(); rd.l = op_readdp(dp); - if(!regs.acc_8b)rd.h = op_readdp(dp + 1); + if(!regs.p.m)rd.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b) { op_rol_b(); } + if(regs.p.m) { op_rol_b(); } else { op_rol_w(); op_writedp(dp + 1, rd.h); } last_cycle(); @@ -441,9 +441,9 @@ case 0x66: { dp = op_readpc(); op_io_cond2(); rd.l = op_readdp(dp); - if(!regs.acc_8b)rd.h = op_readdp(dp + 1); + if(!regs.p.m)rd.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b) { op_ror_b(); } + if(regs.p.m) { op_ror_b(); } else { op_ror_w(); op_writedp(dp + 1, rd.h); } last_cycle(); @@ -455,9 +455,9 @@ case 0x14: { dp = op_readpc(); op_io_cond2(); rd.l = op_readdp(dp); - if(!regs.acc_8b)rd.h = op_readdp(dp + 1); + if(!regs.p.m)rd.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b) { op_trb_b(); } + if(regs.p.m) { op_trb_b(); } else { op_trb_w(); op_writedp(dp + 1, rd.h); } last_cycle(); @@ -469,9 +469,9 @@ case 0x04: { dp = op_readpc(); op_io_cond2(); rd.l = op_readdp(dp); - if(!regs.acc_8b)rd.h = op_readdp(dp + 1); + if(!regs.p.m)rd.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b) { op_tsb_b(); } + if(regs.p.m) { op_tsb_b(); } else { op_tsb_w(); op_writedp(dp + 1, rd.h); } last_cycle(); @@ -484,9 +484,9 @@ case 0xf6: { op_io_cond2(); op_io(); rd.l = op_readdp(dp + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdp(dp + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdp(dp + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_inc_b(); } + if(regs.p.m) { op_inc_b(); } else { op_inc_w(); op_writedp(dp + regs.x.w + 1, rd.h); } last_cycle(); @@ -499,9 +499,9 @@ case 0xd6: { op_io_cond2(); op_io(); rd.l = op_readdp(dp + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdp(dp + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdp(dp + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_dec_b(); } + if(regs.p.m) { op_dec_b(); } else { op_dec_w(); op_writedp(dp + regs.x.w + 1, rd.h); } last_cycle(); @@ -514,9 +514,9 @@ case 0x16: { op_io_cond2(); op_io(); rd.l = op_readdp(dp + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdp(dp + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdp(dp + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_asl_b(); } + if(regs.p.m) { op_asl_b(); } else { op_asl_w(); op_writedp(dp + regs.x.w + 1, rd.h); } last_cycle(); @@ -529,9 +529,9 @@ case 0x56: { op_io_cond2(); op_io(); rd.l = op_readdp(dp + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdp(dp + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdp(dp + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_lsr_b(); } + if(regs.p.m) { op_lsr_b(); } else { op_lsr_w(); op_writedp(dp + regs.x.w + 1, rd.h); } last_cycle(); @@ -544,9 +544,9 @@ case 0x36: { op_io_cond2(); op_io(); rd.l = op_readdp(dp + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdp(dp + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdp(dp + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_rol_b(); } + if(regs.p.m) { op_rol_b(); } else { op_rol_w(); op_writedp(dp + regs.x.w + 1, rd.h); } last_cycle(); @@ -559,9 +559,9 @@ case 0x76: { op_io_cond2(); op_io(); rd.l = op_readdp(dp + regs.x.w); - if(!regs.acc_8b)rd.h = op_readdp(dp + regs.x.w + 1); + if(!regs.p.m)rd.h = op_readdp(dp + regs.x.w + 1); op_io(); - if(regs.acc_8b) { op_ror_b(); } + if(regs.p.m) { op_ror_b(); } else { op_ror_w(); op_writedp(dp + regs.x.w + 1, rd.h); } last_cycle(); diff --git a/src/cpu/scpu/core/op_write.b b/src/cpu/scpu/core/op_write.b index f4b110a4..d081a6c6 100644 --- a/src/cpu/scpu/core/op_write.b +++ b/src/cpu/scpu/core/op_write.b @@ -1,7 +1,7 @@ -sta_addr(0x8d, regs.acc_8b, regs.a.w), -stx_addr(0x8e, regs.idx_8b, regs.x.w), -sty_addr(0x8c, regs.idx_8b, regs.y.w), -stz_addr(0x9c, regs.acc_8b, 0x0000) { +sta_addr(0x8d, regs.p.m, regs.a.w), +stx_addr(0x8e, regs.p.x, regs.x.w), +sty_addr(0x8c, regs.p.x, regs.y.w), +stz_addr(0x9c, regs.p.m, 0x0000) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:if($1)last_cycle(); @@ -11,8 +11,8 @@ stz_addr(0x9c, regs.acc_8b, 0x0000) { op_writedbr(aa.w + 1, $2 >> 8); } -sta_addrx(0x9d, regs.acc_8b, regs.a.w), -stz_addrx(0x9e, regs.acc_8b, 0x0000) { +sta_addrx(0x9d, regs.p.m, regs.a.w), +stz_addrx(0x9e, regs.p.m, 0x0000) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:op_io(); @@ -27,9 +27,9 @@ sta_addry(0x99) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:op_io(); -4:if(regs.acc_8b)last_cycle(); +4:if(regs.p.m)last_cycle(); op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 5:last_cycle(); op_writedbr(aa.w + regs.y.w + 1, regs.a.h); } @@ -38,9 +38,9 @@ sta_long(0x8f) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:aa.b = op_readpc(); -4:if(regs.acc_8b)last_cycle(); +4:if(regs.p.m)last_cycle(); op_writelong(aa.d, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 5:last_cycle(); op_writelong(aa.d + 1, regs.a.h); } @@ -49,17 +49,17 @@ sta_longx(0x9f) { 1:aa.l = op_readpc(); 2:aa.h = op_readpc(); 3:aa.b = op_readpc(); -4:if(regs.acc_8b)last_cycle(); +4:if(regs.p.m)last_cycle(); op_writelong(aa.d + regs.x.w, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 5:last_cycle(); op_writelong(aa.d + regs.x.w + 1, regs.a.h); } -sta_dp(0x85, regs.acc_8b, regs.a.w), -stx_dp(0x86, regs.idx_8b, regs.x.w), -sty_dp(0x84, regs.idx_8b, regs.y.w), -stz_dp(0x64, regs.acc_8b, 0x0000) { +sta_dp(0x85, regs.p.m, regs.a.w), +stx_dp(0x86, regs.p.x, regs.x.w), +sty_dp(0x84, regs.p.x, regs.y.w), +stz_dp(0x64, regs.p.m, 0x0000) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:if($1)last_cycle(); @@ -69,9 +69,9 @@ stz_dp(0x64, regs.acc_8b, 0x0000) { op_writedp(dp + 1, $2 >> 8); } -sta_dpx(0x95, regs.acc_8b, regs.a.w), -sty_dpx(0x94, regs.idx_8b, regs.y.w), -stz_dpx(0x74, regs.acc_8b, 0x0000) { +sta_dpx(0x95, regs.p.m, regs.a.w), +sty_dpx(0x94, regs.p.x, regs.y.w), +stz_dpx(0x74, regs.p.m, 0x0000) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:op_io(); @@ -86,9 +86,9 @@ stx_dpy(0x96) { 1:dp = op_readpc(); 2:op_io_cond2(); 3:op_io(); -4:if(regs.idx_8b)last_cycle(); +4:if(regs.p.x)last_cycle(); op_writedp(dp + regs.y.w, regs.x.l); - if(regs.idx_8b)end; + if(regs.p.x)end; 5:last_cycle(); op_writedp(dp + regs.y.w + 1, regs.x.h); } @@ -98,9 +98,9 @@ sta_idp(0x92) { 2:op_io_cond2(); 3:aa.l = op_readdp(dp); 4:aa.h = op_readdp(dp + 1); -5:if(regs.acc_8b)last_cycle(); +5:if(regs.p.m)last_cycle(); op_writedbr(aa.w, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 6:last_cycle(); op_writedbr(aa.w + 1, regs.a.h); } @@ -111,9 +111,9 @@ sta_ildp(0x87) { 3:aa.l = op_readdp(dp); 4:aa.h = op_readdp(dp + 1); 5:aa.b = op_readdp(dp + 2); -6:if(regs.acc_8b)last_cycle(); +6:if(regs.p.m)last_cycle(); op_writelong(aa.d, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 7:last_cycle(); op_writelong(aa.d + 1, regs.a.h); } @@ -124,9 +124,9 @@ sta_idpx(0x81) { 3:op_io(); 4:aa.l = op_readdp(dp + regs.x.w); 5:aa.h = op_readdp(dp + regs.x.w + 1); -6:if(regs.acc_8b)last_cycle(); +6:if(regs.p.m)last_cycle(); op_writedbr(aa.w, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 7:last_cycle(); op_writedbr(aa.w + 1, regs.a.h); } @@ -137,9 +137,9 @@ sta_idpy(0x91) { 3:aa.l = op_readdp(dp); 4:aa.h = op_readdp(dp + 1); 5:op_io(); -6:if(regs.acc_8b)last_cycle(); +6:if(regs.p.m)last_cycle(); op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 7:last_cycle(); op_writedbr(aa.w + regs.y.w + 1, regs.a.h); } @@ -150,9 +150,9 @@ sta_ildpy(0x97) { 3:aa.l = op_readdp(dp); 4:aa.h = op_readdp(dp + 1); 5:aa.b = op_readdp(dp + 2); -6:if(regs.acc_8b)last_cycle(); +6:if(regs.p.m)last_cycle(); op_writelong(aa.d + regs.y.w, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 7:last_cycle(); op_writelong(aa.d + regs.y.w + 1, regs.a.h); } @@ -160,9 +160,9 @@ sta_ildpy(0x97) { sta_sr(0x83) { 1:sp = op_readpc(); 2:op_io(); -3:if(regs.acc_8b)last_cycle(); +3:if(regs.p.m)last_cycle(); op_writesp(sp, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 4:last_cycle(); op_writesp(sp + 1, regs.a.h); } @@ -173,9 +173,9 @@ sta_isry(0x93) { 3:aa.l = op_readsp(sp); 4:aa.h = op_readsp(sp + 1); 5:op_io(); -6:if(regs.acc_8b)last_cycle(); +6:if(regs.p.m)last_cycle(); op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.acc_8b)end; + if(regs.p.m)end; 7:last_cycle(); op_writedbr(aa.w + regs.y.w + 1, regs.a.h); } diff --git a/src/cpu/scpu/core/op_write.cpp b/src/cpu/scpu/core/op_write.cpp index 04537515..97c731f9 100644 --- a/src/cpu/scpu/core/op_write.cpp +++ b/src/cpu/scpu/core/op_write.cpp @@ -2,9 +2,9 @@ case 0x8d: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w, regs.a.w); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + 1, regs.a.w >> 8); } break; @@ -13,9 +13,9 @@ case 0x8d: { case 0x8e: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); op_writedbr(aa.w, regs.x.w); - if(regs.idx_8b)break; + if(regs.p.x)break; last_cycle(); op_writedbr(aa.w + 1, regs.x.w >> 8); } break; @@ -24,9 +24,9 @@ case 0x8e: { case 0x8c: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); op_writedbr(aa.w, regs.y.w); - if(regs.idx_8b)break; + if(regs.p.x)break; last_cycle(); op_writedbr(aa.w + 1, regs.y.w >> 8); } break; @@ -35,9 +35,9 @@ case 0x8c: { case 0x9c: { aa.l = op_readpc(); aa.h = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w, 0x0000); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + 1, 0x0000 >> 8); } break; @@ -47,9 +47,9 @@ case 0x9d: { aa.l = op_readpc(); aa.h = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w + regs.x.w, regs.a.w); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + regs.x.w + 1, regs.a.w >> 8); } break; @@ -59,9 +59,9 @@ case 0x9e: { aa.l = op_readpc(); aa.h = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w + regs.x.w, 0x0000); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + regs.x.w + 1, 0x0000 >> 8); } break; @@ -71,9 +71,9 @@ case 0x99: { aa.l = op_readpc(); aa.h = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + regs.y.w + 1, regs.a.h); } break; @@ -83,9 +83,9 @@ case 0x8f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writelong(aa.d, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writelong(aa.d + 1, regs.a.h); } break; @@ -95,9 +95,9 @@ case 0x9f: { aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writelong(aa.d + regs.x.w, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writelong(aa.d + regs.x.w + 1, regs.a.h); } break; @@ -106,9 +106,9 @@ case 0x9f: { case 0x85: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedp(dp, regs.a.w); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedp(dp + 1, regs.a.w >> 8); } break; @@ -117,9 +117,9 @@ case 0x85: { case 0x86: { dp = op_readpc(); op_io_cond2(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); op_writedp(dp, regs.x.w); - if(regs.idx_8b)break; + if(regs.p.x)break; last_cycle(); op_writedp(dp + 1, regs.x.w >> 8); } break; @@ -128,9 +128,9 @@ case 0x86: { case 0x84: { dp = op_readpc(); op_io_cond2(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); op_writedp(dp, regs.y.w); - if(regs.idx_8b)break; + if(regs.p.x)break; last_cycle(); op_writedp(dp + 1, regs.y.w >> 8); } break; @@ -139,9 +139,9 @@ case 0x84: { case 0x64: { dp = op_readpc(); op_io_cond2(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedp(dp, 0x0000); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedp(dp + 1, 0x0000 >> 8); } break; @@ -151,9 +151,9 @@ case 0x95: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedp(dp + regs.x.w, regs.a.w); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedp(dp + regs.x.w + 1, regs.a.w >> 8); } break; @@ -163,9 +163,9 @@ case 0x94: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); op_writedp(dp + regs.x.w, regs.y.w); - if(regs.idx_8b)break; + if(regs.p.x)break; last_cycle(); op_writedp(dp + regs.x.w + 1, regs.y.w >> 8); } break; @@ -175,9 +175,9 @@ case 0x74: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedp(dp + regs.x.w, 0x0000); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedp(dp + regs.x.w + 1, 0x0000 >> 8); } break; @@ -187,9 +187,9 @@ case 0x96: { dp = op_readpc(); op_io_cond2(); op_io(); - if(regs.idx_8b)last_cycle(); + if(regs.p.x)last_cycle(); op_writedp(dp + regs.y.w, regs.x.l); - if(regs.idx_8b)break; + if(regs.p.x)break; last_cycle(); op_writedp(dp + regs.y.w + 1, regs.x.h); } break; @@ -200,9 +200,9 @@ case 0x92: { op_io_cond2(); aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + 1, regs.a.h); } break; @@ -214,9 +214,9 @@ case 0x87: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writelong(aa.d, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writelong(aa.d + 1, regs.a.h); } break; @@ -228,9 +228,9 @@ case 0x81: { op_io(); aa.l = op_readdp(dp + regs.x.w); aa.h = op_readdp(dp + regs.x.w + 1); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + 1, regs.a.h); } break; @@ -242,9 +242,9 @@ case 0x91: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + regs.y.w + 1, regs.a.h); } break; @@ -256,9 +256,9 @@ case 0x97: { aa.l = op_readdp(dp); aa.h = op_readdp(dp + 1); aa.b = op_readdp(dp + 2); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writelong(aa.d + regs.y.w, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writelong(aa.d + regs.y.w + 1, regs.a.h); } break; @@ -267,9 +267,9 @@ case 0x97: { case 0x83: { sp = op_readpc(); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writesp(sp, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writesp(sp + 1, regs.a.h); } break; @@ -281,9 +281,9 @@ case 0x93: { aa.l = op_readsp(sp); aa.h = op_readsp(sp + 1); op_io(); - if(regs.acc_8b)last_cycle(); + if(regs.p.m)last_cycle(); op_writedbr(aa.w + regs.y.w, regs.a.l); - if(regs.acc_8b)break; + if(regs.p.m)break; last_cycle(); op_writedbr(aa.w + regs.y.w + 1, regs.a.h); } break; diff --git a/src/cpu/scpu/dma/dma.cpp b/src/cpu/scpu/dma/dma.cpp index 55b6660e..bf15c955 100644 --- a/src/cpu/scpu/dma/dma.cpp +++ b/src/cpu/scpu/dma/dma.cpp @@ -31,7 +31,6 @@ uint8 r; status.dma_clocks += 8; add_clocks(8); - co_return(); cycle_edge(); } @@ -130,7 +129,7 @@ void sCPU::dma_run() { channel[i].dma_enabled = false; } - counter_set(counter.irq_delay, 24); + counter.set(counter.irq_delay, 24); } /***** @@ -199,7 +198,6 @@ static uint8 hdma_xferlen[8] = { 1, 2, 2, 4, 4, 4, 2, 4 }; !channel[i].hdma_indirect ? hdma_addr(i) : hdma_iaddr(i)); } else { add_clocks(8); - co_return(); cycle_edge(); } } @@ -212,7 +210,7 @@ static uint8 hdma_xferlen[8] = { 1, 2, 2, 4, 4, 4, 2, 4 }; } } - counter_set(counter.irq_delay, 24); + counter.set(counter.irq_delay, 24); } void sCPU::hdma_init_reset() { @@ -231,7 +229,7 @@ void sCPU::hdma_init() { hdma_update(i); } - counter_set(counter.irq_delay, 24); + counter.set(counter.irq_delay, 24); } /***** diff --git a/src/cpu/scpu/memory/memory.cpp b/src/cpu/scpu/memory/memory.cpp index 80333f1d..65f154b8 100644 --- a/src/cpu/scpu/memory/memory.cpp +++ b/src/cpu/scpu/memory/memory.cpp @@ -10,7 +10,6 @@ void sCPU::op_io() { status.clock_count = 6; precycle_edge(); add_clocks(6); -//co_return(); cycle_edge(); } @@ -18,9 +17,6 @@ uint8 sCPU::op_read(uint32 addr) { status.clock_count = r_mem->speed(addr); precycle_edge(); add_clocks(status.clock_count - 4); -#ifdef FAVOR_ACCURACY - co_return(); -#endif regs.mdr = r_mem->read(addr); add_clocks(4); cycle_edge(); @@ -31,10 +27,95 @@ void sCPU::op_write(uint32 addr, uint8 data) { status.clock_count = r_mem->speed(addr); precycle_edge(); add_clocks(status.clock_count); -#ifdef FAVOR_ACCURACY - co_return(); -#endif regs.mdr = data; r_mem->write(addr, regs.mdr); cycle_edge(); } + +// + +alwaysinline uint8 sCPU::op_readpc() { + return op_read((regs.pc.b << 16) + regs.pc.w++); +} + +alwaysinline uint8 sCPU::op_readstack() { + if(regs.e) { + regs.s.l++; + } else { + regs.s.w++; + } + return op_read(regs.s.w); +} + +alwaysinline uint8 sCPU::op_readstackn() { + return op_read(++regs.s.w); +} + +alwaysinline uint8 sCPU::op_readaddr(uint32 addr) { + return op_read(addr & 0xffff); +} + +alwaysinline uint8 sCPU::op_readlong(uint32 addr) { + return op_read(addr & 0xffffff); +} + +alwaysinline uint8 sCPU::op_readdbr(uint32 addr) { + return op_read(((regs.db << 16) + addr) & 0xffffff); +} + +alwaysinline uint8 sCPU::op_readpbr(uint32 addr) { + return op_read((regs.pc.b << 16) + (addr & 0xffff)); +} + +alwaysinline uint8 sCPU::op_readdp(uint32 addr) { + if(regs.e && regs.d.l == 0x00) { + return op_read((regs.d & 0xff00) + ((regs.d + (addr & 0xffff)) & 0xff)); + } else { + return op_read((regs.d + (addr & 0xffff)) & 0xffff); + } +} + +alwaysinline uint8 sCPU::op_readsp(uint32 addr) { + return op_read((regs.s + (addr & 0xffff)) & 0xffff); +} + +alwaysinline void sCPU::op_writestack(uint8 data) { + op_write(regs.s.w, data); + if(regs.e) { + regs.s.l--; + } else { + regs.s.w--; + } +} + +alwaysinline void sCPU::op_writestackn(uint8 data) { + op_write(regs.s.w--, data); +} + +alwaysinline void sCPU::op_writeaddr(uint32 addr, uint8 data) { + op_write(addr & 0xffff, data); +} + +alwaysinline void sCPU::op_writelong(uint32 addr, uint8 data) { + op_write(addr & 0xffffff, data); +} + +alwaysinline void sCPU::op_writedbr(uint32 addr, uint8 data) { + op_write(((regs.db << 16) + addr) & 0xffffff, data); +} + +alwaysinline void sCPU::op_writepbr(uint32 addr, uint8 data) { + op_write((regs.pc.b << 16) + (addr & 0xffff), data); +} + +alwaysinline void sCPU::op_writedp(uint32 addr, uint8 data) { + if(regs.e && regs.d.l == 0x00) { + op_write((regs.d & 0xff00) + ((regs.d + (addr & 0xffff)) & 0xff), data); + } else { + op_write((regs.d + (addr & 0xffff)) & 0xffff, data); + } +} + +alwaysinline void sCPU::op_writesp(uint32 addr, uint8 data) { + op_write((regs.s + (addr & 0xffff)) & 0xffff, data); +} diff --git a/src/cpu/scpu/memory/memory.h b/src/cpu/scpu/memory/memory.h index b23fe6d3..545c6c64 100644 --- a/src/cpu/scpu/memory/memory.h +++ b/src/cpu/scpu/memory/memory.h @@ -15,19 +15,21 @@ uint8 apu_port[4]; /***** * helper memory addressing functions used by CPU core *****/ - uint8 op_readpc () { return op_read((regs.pc.b << 16) + regs.pc.w++); } - uint8 op_readstack() { (regs.e) ? regs.s.l++ : regs.s.w++; return op_read(regs.s.w); } - uint8 op_readaddr (uint32 addr) { return op_read(addr & 0xffff); } - uint8 op_readlong (uint32 addr) { return op_read(addr & 0xffffff); } - uint8 op_readdbr (uint32 addr) { return op_read(((regs.db << 16) + addr) & 0xffffff); } - uint8 op_readpbr (uint32 addr) { return op_read((regs.pc.b << 16) + (addr & 0xffff)); } - uint8 op_readdp (uint32 addr) { return op_read((regs.d + (addr & 0xffff)) & 0xffff); } - uint8 op_readsp (uint32 addr) { return op_read((regs.s + (addr & 0xffff)) & 0xffff); } + uint8 op_readpc (); + uint8 op_readstack (); + uint8 op_readstackn(); + uint8 op_readaddr (uint32 addr); + uint8 op_readlong (uint32 addr); + uint8 op_readdbr (uint32 addr); + uint8 op_readpbr (uint32 addr); + uint8 op_readdp (uint32 addr); + uint8 op_readsp (uint32 addr); - void op_writestack(uint8 data) { op_write(regs.s.w, data); (regs.e) ? regs.s.l-- : regs.s.w--; } - void op_writeaddr (uint32 addr, uint8 data) { op_write(addr & 0xffff, data); } - void op_writelong (uint32 addr, uint8 data) { op_write(addr & 0xffffff, data); } - void op_writedbr (uint32 addr, uint8 data) { op_write(((regs.db << 16) + addr) & 0xffffff, data); } - void op_writepbr (uint32 addr, uint8 data) { op_write((regs.pc.b << 16) + (addr & 0xffff), data); } - void op_writedp (uint32 addr, uint8 data) { op_write((regs.d + (addr & 0xffff)) & 0xffff, data); } - void op_writesp (uint32 addr, uint8 data) { op_write((regs.s + (addr & 0xffff)) & 0xffff, data); } + void op_writestack (uint8 data); + void op_writestackn(uint8 data); + void op_writeaddr (uint32 addr, uint8 data); + void op_writelong (uint32 addr, uint8 data); + void op_writedbr (uint32 addr, uint8 data); + void op_writepbr (uint32 addr, uint8 data); + void op_writedp (uint32 addr, uint8 data); + void op_writesp (uint32 addr, uint8 data); diff --git a/src/cpu/scpu/mmio/mmio.cpp b/src/cpu/scpu/mmio/mmio.cpp index 1ad30057..fdd9534e 100644 --- a/src/cpu/scpu/mmio/mmio.cpp +++ b/src/cpu/scpu/mmio/mmio.cpp @@ -99,7 +99,7 @@ void sCPU::mmio_w4200(uint8 data) { } update_interrupts(); - counter_set(counter.irq_delay, 2); + counter.set(counter.irq_delay, 2); } //WRIO @@ -119,7 +119,7 @@ void sCPU::mmio_w4202(uint8 data) { void sCPU::mmio_w4203(uint8 data) { status.mul_b = data; status.r4216 = status.mul_a * status.mul_b; -//counter_set(counter.hw_math, 48); +//counter.set(counter.hw_math, 48); } //WRDIVL @@ -137,7 +137,7 @@ void sCPU::mmio_w4206(uint8 data) { status.div_b = data; status.r4214 = (status.div_b) ? status.div_a / status.div_b : 0xffff; status.r4216 = (status.div_b) ? status.div_a % status.div_b : status.div_a; -//counter_set(counter.hw_math, 96); +//counter.set(counter.hw_math, 96); } //HTIMEL @@ -145,10 +145,7 @@ void sCPU::mmio_w4207(uint8 data) { status.hirq_pos = (status.hirq_pos & ~0xff) | (data); status.hirq_pos &= 0x01ff; update_interrupts(); - -uint vpos = status.vcounter, hpos = status.hclock; - timeshift_backward(10, vpos, hpos); - if(hpos < status.hirq_trigger_pos) { status.irq_lock = false; } + irqpos_update(0x4207); } //HTIMEH @@ -156,10 +153,7 @@ void sCPU::mmio_w4208(uint8 data) { status.hirq_pos = (status.hirq_pos & 0xff) | (data << 8); status.hirq_pos &= 0x01ff; update_interrupts(); - -uint vpos = status.vcounter, hpos = status.hclock; - timeshift_backward(10, vpos, hpos); - if(hpos < status.hirq_trigger_pos) { status.irq_lock = false; } + irqpos_update(0x4208); } //VTIMEL @@ -167,10 +161,7 @@ void sCPU::mmio_w4209(uint8 data) { status.virq_pos = (status.virq_pos & ~0xff) | (data); status.virq_pos &= 0x01ff; update_interrupts(); - -uint vpos = status.vcounter, hpos = status.hclock; - timeshift_backward(10, vpos, hpos); - if(hpos < status.hirq_trigger_pos) { status.irq_lock = false; } + irqpos_update(0x4209); } //VTIMEH @@ -178,10 +169,7 @@ void sCPU::mmio_w420a(uint8 data) { status.virq_pos = (status.virq_pos & 0xff) | (data << 8); status.virq_pos &= 0x01ff; update_interrupts(); - -uint vpos = status.vcounter, hpos = status.hclock; - timeshift_backward(10, vpos, hpos); - if(hpos < status.hirq_trigger_pos) { status.irq_lock = false; } + irqpos_update(0x420a); } //DMAEN @@ -215,7 +203,7 @@ uint8 sCPU::mmio_r4210() { uint8 r = (regs.mdr & 0x70); r |= (uint8)(!status.nmi_read) << 7; - if(!counter.nmi_fire) { + if(!nmi_edge()) { status.nmi_read = 1; } @@ -230,7 +218,7 @@ uint8 sCPU::mmio_r4211() { uint8 r = (regs.mdr & 0x7f); r |= (uint8)(!status.irq_read) << 7; - if(!counter.irq_fire) { + if(!irq_edge()) { status.irq_read = 1; status.irq_line = 1; status.irq_transition = 0; @@ -479,9 +467,7 @@ void sCPU::mmio_reset() { uint8 sCPU::mmio_read(uint16 addr) { //APU if((addr & 0xffc0) == 0x2140) { //$2140-$217f - #ifdef FAVOR_SPEED - co_return(); - #endif + scheduler.sync_cpusmp(); return r_smp->port_read(addr & 3); } @@ -536,9 +522,7 @@ uint8 sCPU::mmio_read(uint16 addr) { void sCPU::mmio_write(uint16 addr, uint8 data) { //APU if((addr & 0xffc0) == 0x2140) { //$2140-$217f - #ifdef FAVOR_SPEED - co_return(); - #endif + scheduler.sync_cpusmp(); port_write(addr & 3, data); return; } diff --git a/src/cpu/scpu/scpu.cpp b/src/cpu/scpu/scpu.cpp index f62ab7e8..e7658acc 100644 --- a/src/cpu/scpu/scpu.cpp +++ b/src/cpu/scpu/scpu.cpp @@ -6,16 +6,8 @@ #include "mmio/mmio.cpp" #include "timing/timing.cpp" -void scpu_entry_point() { - r_cpu->main(); -} - -void sCPU::run() { - co_call(thread); -} - void sCPU::power() { - status.region = bool(snes->region()); + status.region = (bool)snes->region(); regs.a = regs.x = regs.y = 0x0000; regs.s = 0x01ff; @@ -28,16 +20,10 @@ void sCPU::power() { } void sCPU::reset() { - if(thread)co_delete(thread); - thread = co_create(scpu_entry_point, 65536); - regs.pc.d = 0x000000; regs.pc.l = r_mem->read(0xfffc); regs.pc.h = r_mem->read(0xfffd); - regs.acc_8b = true; - regs.idx_8b = true; - //note: some registers are not fully reset by SNES regs.x.h = 0x00; regs.y.h = 0x00; @@ -62,11 +48,5 @@ void sCPU::reset() { apu_port[3] = 0x00; } -sCPU::sCPU() { -//#include "core/optable.cpp" - thread = 0; -} - -sCPU::~sCPU() { - if(thread)co_delete(thread); -} +sCPU::sCPU() {} +sCPU::~sCPU() {} diff --git a/src/cpu/scpu/scpu.h b/src/cpu/scpu/scpu.h index af19d6c5..f2d45c9c 100644 --- a/src/cpu/scpu/scpu.h +++ b/src/cpu/scpu/scpu.h @@ -1,4 +1,7 @@ class sCPU : public CPU { +public: + void enter(); + public: #include "core/core.h" #include "dma/dma.h" @@ -6,8 +9,6 @@ public: #include "mmio/mmio.h" #include "timing/timing.h" -thread_t thread; - struct { bool wai; bool irq; @@ -15,11 +16,22 @@ struct { } event; struct { - bool enabled; - uint irq_delay; - uint irq_fire; uint nmi_fire; + uint irq_fire; + uint irq_delay; uint hw_math; + + alwaysinline void set(uint &ctr, uint clocks) { + if(clocks >= ctr) { ctr = clocks; } + } + + alwaysinline void sub(uint &ctr, uint clocks) { + if(ctr >= clocks) { + ctr -= clocks; + } else { + ctr = 0; + } + } } counter; enum { @@ -35,7 +47,6 @@ struct { bool in_opcode; uint clock_count; - uint clocks_executed; //timing bool region; @@ -60,10 +71,12 @@ struct { uint16 irq_delay; uint16 nmi_trigger_pos; + uint16 nmi_read_pos, nmi_line_pos; bool nmi_read, nmi_line, nmi_transition; - bool nmi_pending; + bool nmi_lock, nmi_pending; uint16 virq_trigger_pos, hirq_trigger_pos; + uint16 irq_read_pos, irq_line_pos; bool irq_read, irq_line, irq_transition; bool irq_lock, irq_pending; @@ -114,7 +127,6 @@ struct { uint8 joy4l, joy4h; } status; - void run(); void power(); void reset(); diff --git a/src/cpu/scpu/timing/irq.cpp b/src/cpu/scpu/timing/irq.cpp index cecb215a..f84c71dc 100644 --- a/src/cpu/scpu/timing/irq.cpp +++ b/src/cpu/scpu/timing/irq.cpp @@ -1,61 +1,8 @@ -void sCPU::update_interrupts() { - status.nmi_trigger_pos = (status.vcounter == status.vblstart) ? 2 : IRQ_TRIGGER_NEVER; - - if(irq_pos_valid() == true) { - status.virq_trigger_pos = status.virq_pos; - status.hirq_trigger_pos = (status.hirq_enabled) ? ((status.hirq_pos + 1) * 4) : 0; - } else { - status.virq_trigger_pos = IRQ_TRIGGER_NEVER; - status.hirq_trigger_pos = IRQ_TRIGGER_NEVER; - } -} - -alwaysinline void sCPU::nmi_tick() { - counter.nmi_fire -= 2; - if(counter.nmi_fire != 0) { return; } - - if(status.nmi_enabled == true && status.nmi_line == 1) { - status.nmi_line = 0; - status.nmi_transition = 1; - } -} - -alwaysinline void sCPU::irq_tick() { - counter.irq_fire -= 2; - if(counter.irq_fire != 0) { return; } - - if(status.virq_enabled == true || status.hirq_enabled == true) { - status.irq_line = 0; - status.irq_transition = 1; - } -} - -alwaysinline void sCPU::poll_interrupts() { - if(status.hclock == status.nmi_trigger_pos) { - status.nmi_read = 0; - counter.nmi_fire = 4; - } - - if(status.hclock == 10) { status.irq_lock = false; } - - if(status.hirq_trigger_pos == IRQ_TRIGGER_NEVER)return; - if(status.virq_enabled == false && status.hirq_enabled == false)return; - if(status.irq_lock == true)return; - -uint vpos = status.vcounter; -uint hpos = status.hclock; - timeshift_backward(10, vpos, hpos); - -bool trigger_irq = true; - if(status.virq_enabled == true && vpos != status.virq_trigger_pos)trigger_irq = false; - if(status.hirq_enabled == true && hpos != status.hirq_trigger_pos)trigger_irq = false; - - if(trigger_irq == true) { - status.irq_lock = true; - status.irq_read = 0; - counter.irq_fire = 4; - } -} +#if defined(FAVOR_ACCURACY) + #include "irqtiming_accurate.cpp" +#elif defined(FAVOR_SPEED) + #include "irqtiming_fast.cpp" +#endif bool sCPU::irq_pos_valid() { uint vpos = status.virq_pos; @@ -86,7 +33,7 @@ alwaysinline bool sCPU::irq_test() { if(status.irq_transition == 1)goto irq_trigger; if(status.irq_read == 0) { - if(status.irq_line == 1 && counter.irq_fire) { + if(status.irq_line == 1 && irq_edge()) { return false; } goto irq_trigger; diff --git a/src/cpu/scpu/timing/irqtiming_accurate.cpp b/src/cpu/scpu/timing/irqtiming_accurate.cpp new file mode 100644 index 00000000..31365381 --- /dev/null +++ b/src/cpu/scpu/timing/irqtiming_accurate.cpp @@ -0,0 +1,76 @@ +void sCPU::update_interrupts() { + status.nmi_trigger_pos = (status.vcounter == status.vblstart) ? 2 : IRQ_TRIGGER_NEVER; + + if(irq_pos_valid() == true) { + status.virq_trigger_pos = status.virq_pos; + status.hirq_trigger_pos = 4 * ((status.hirq_enabled) ? (status.hirq_pos + 1) : 0); + } else { + status.virq_trigger_pos = IRQ_TRIGGER_NEVER; + status.hirq_trigger_pos = IRQ_TRIGGER_NEVER; + } +} + +alwaysinline void sCPU::poll_interrupts(uint clocks) { + clocks >>= 1; + while(clocks--) { + status.hclock += 2; + if(status.hclock >= status.line_clocks) { scanline(); } + + //NMI tick + if(counter.nmi_fire) { + counter.nmi_fire -= 2; + if(counter.nmi_fire == 0) { + if(status.nmi_enabled == true && status.nmi_line == 1) { + status.nmi_line = 0; + status.nmi_transition = 1; + } + } + } + + //IRQ tick + if(counter.irq_fire) { + counter.irq_fire -= 2; + if(counter.irq_fire == 0) { + if(status.virq_enabled == true || status.hirq_enabled == true) { + status.irq_line = 0; + status.irq_transition = 1; + } + } + } + + //NMI test + if(status.hclock == status.nmi_trigger_pos) { + status.nmi_read = 0; + counter.nmi_fire = 4; + } + + //IRQ test + if(status.hclock == 10) { status.irq_lock = false; } + + if(status.hirq_trigger_pos == IRQ_TRIGGER_NEVER) { continue; } + if(status.virq_enabled == false && status.hirq_enabled == false) { continue; } + if(status.irq_lock == true) { continue; } + + uint vpos = status.vcounter, hpos = status.hclock; + timeshift_backward(10, vpos, hpos); + + bool trigger_irq = true; + if(status.virq_enabled == true && vpos != status.virq_trigger_pos)trigger_irq = false; + if(status.hirq_enabled == true && hpos != status.hirq_trigger_pos)trigger_irq = false; + + if(trigger_irq == true) { + status.irq_lock = true; + status.irq_read = 0; + counter.irq_fire = 4; + } + } +} + +bool sCPU::nmi_edge() { return (counter.nmi_fire != 0); } +bool sCPU::irq_edge() { return (counter.irq_fire != 0); } + +void sCPU::irqpos_update(uint16 addr) { +uint vpos = status.vcounter, hpos = status.hclock; + timeshift_backward(10, vpos, hpos); + if(hpos < status.hirq_trigger_pos) { status.irq_lock = false; } +} diff --git a/src/cpu/scpu/timing/irqtiming_fast.cpp b/src/cpu/scpu/timing/irqtiming_fast.cpp new file mode 100644 index 00000000..4d2b4d83 --- /dev/null +++ b/src/cpu/scpu/timing/irqtiming_fast.cpp @@ -0,0 +1,111 @@ +void sCPU::update_interrupts() { + status.nmi_read_pos = (status.vcounter == status.vblstart) ? 2 : IRQ_TRIGGER_NEVER; + status.nmi_line_pos = (status.vcounter == status.vblstart) ? 6 : IRQ_TRIGGER_NEVER; + + if(irq_pos_valid() == false) { + status.irq_read_pos = IRQ_TRIGGER_NEVER; + status.irq_line_pos = IRQ_TRIGGER_NEVER; + return; + } + +uint vpos = status.virq_pos; +uint hpos = 4 * ((status.hirq_enabled) ? (status.hirq_pos + 1) : 0); + timeshift_forward(10, vpos, hpos); + if(!status.virq_enabled || (status.virq_enabled && status.vcounter == vpos)) { + status.irq_read_pos = hpos; + } else { + status.irq_read_pos = IRQ_TRIGGER_NEVER; + } + + timeshift_forward(4, vpos, hpos); + if(!status.virq_enabled || (status.virq_enabled && status.vcounter == vpos)) { + status.irq_line_pos = hpos; + } else { + status.irq_line_pos = IRQ_TRIGGER_NEVER; + } +} + +alwaysinline void sCPU::poll_interrupts(uint clocks) { + if(status.hclock + clocks >= status.line_clocks) { + clocks = (status.hclock + clocks) - status.line_clocks; + poll_interrupts_range(status.line_clocks - status.hclock); + scanline(); + status.irq_lock = false; + if(clocks == 0) { return; } + } + + poll_interrupts_range(clocks); + status.hclock += clocks; +} + +alwaysinline void sCPU::poll_interrupts_range(uint clocks) { +int start, end; + if(status.hclock == 0) { + start = -1; + end = clocks; + } else { + start = status.hclock; + end = status.hclock + clocks; + } + + if(start < status.nmi_read_pos && status.nmi_read_pos <= end) { + status.nmi_read = 0; + } + + if(start < status.nmi_line_pos && status.nmi_line_pos <= end) { + if(status.nmi_enabled == true) { + if(status.nmi_line == 1) { + status.nmi_transition = 1; + } + status.nmi_line = 0; + } + } + + if(status.virq_enabled == false && status.hirq_enabled == false) { + return; + } + + if(status.hirq_enabled == false) { + if(status.irq_lock == false) { + if(end >= status.irq_read_pos) { + status.irq_read = 0; + } + + if(end >= status.irq_line_pos) { + status.irq_lock = true; + status.irq_line = 0; + status.irq_transition = 1; + } + } + } else { + if(start < status.irq_read_pos && status.irq_read_pos <= end) { + status.irq_read = 0; + } + + if(start < status.irq_line_pos && status.irq_line_pos <= end) { + status.irq_lock = true; + status.irq_line = 0; + status.irq_transition = 1; + } + } +} + +bool sCPU::nmi_edge() { +uint vpos = status.vcounter, hpos = status.hclock; + if(hpos == status.nmi_read_pos)return true; + timeshift_backward(2, vpos, hpos); + if(hpos == status.nmi_read_pos)return true; + return false; +} + +bool sCPU::irq_edge() { +uint vpos = status.vcounter, hpos = status.hclock; + if(hpos == status.irq_read_pos)return true; + timeshift_backward(2, vpos, hpos); + if(hpos == status.irq_read_pos)return true; + return false; +} + +void sCPU::irqpos_update(uint16 addr) { + if(status.hclock < status.irq_line_pos) { status.irq_lock = false; } +} diff --git a/src/cpu/scpu/timing/timing.cpp b/src/cpu/scpu/timing/timing.cpp index b26a4a3c..a2c2e461 100644 --- a/src/cpu/scpu/timing/timing.cpp +++ b/src/cpu/scpu/timing/timing.cpp @@ -45,35 +45,21 @@ uint16 sCPU::hcounter() { } void sCPU::add_clocks(uint clocks) { - status.clocks_executed += clocks; - - if(counter.irq_delay) { - counter.irq_delay = (counter.irq_delay > clocks) ? (counter.irq_delay - clocks) : 0; + if(status.dram_refreshed == false) { + if(status.hclock + clocks >= status.dram_refresh_position) { + status.dram_refreshed = true; + clocks += 40; + } } - if(status.hclock + clocks >= status.line_clocks) { - clocks = (status.hclock + clocks) - status.line_clocks; - while(status.hclock < status.line_clocks - 2) { tick(); } - scanline(); - } + counter.sub(counter.irq_delay, clocks); + scheduler.addclocks_cpu(clocks); - clocks >>= 1; - while(clocks--) { tick(); } -} - -alwaysinline void sCPU::tick() { - status.hclock += 2; - - if(counter.nmi_fire) { nmi_tick(); } - if(counter.irq_fire) { irq_tick(); } - - if(status.dram_refreshed == false && status.hclock >= status.dram_refresh_position) { - status.dram_refreshed = true; - add_clocks(40); - return; - } - - poll_interrupts(); +//TODO: rename function to more descriptive term +//below function is responsible for incrementing status.hclock +//by clocks, calling scanline() when a new line is reached, and +//testing for and triggering NMIs and IRQs + poll_interrupts(clocks); } void sCPU::scanline() { @@ -231,30 +217,16 @@ void sCPU::last_cycle() { event.irq = (status.nmi_pending || status.irq_pending); } -/***** - * clocks_executed() - * - * Return number of clocks executed since last call to this function. - * Used by class SNES to control CPU<>APU synchronization. - *****/ -uint32 sCPU::clocks_executed() { -uint32 r = status.clocks_executed; - status.clocks_executed = 0; - return r; -} - void sCPU::timing_power() { } void sCPU::timing_reset() { - counter.enabled = false; + counter.nmi_fire = 0; + counter.irq_fire = 0; counter.irq_delay = 0; counter.hw_math = 0; - counter.irq_fire = 0; - counter.nmi_fire = 0; - status.clock_count = 0; - status.clocks_executed = 0; + status.clock_count = 0; status.vcounter = 0; status.hcounter = 0; @@ -285,6 +257,7 @@ void sCPU::timing_reset() { status.nmi_read = 1; status.nmi_line = 1; status.nmi_transition = 0; + status.nmi_lock = false; status.nmi_pending = false; status.irq_read = 1; diff --git a/src/cpu/scpu/timing/timing.h b/src/cpu/scpu/timing/timing.h index 64db637b..05817c90 100644 --- a/src/cpu/scpu/timing/timing.h +++ b/src/cpu/scpu/timing/timing.h @@ -13,7 +13,6 @@ uint dma_counter(); void add_clocks(uint clocks); - void tick(); void scanline(); void frame(); @@ -25,10 +24,6 @@ void timing_power(); void timing_reset(); - void counter_set(uint &ctr, uint clocks) { - if(clocks >= ctr) { ctr = clocks; } - } - //timeshift.cpp void timeshift_forward (uint clocks, uint &v, uint &h); void timeshift_backward(uint clocks, uint &v, uint &h); @@ -36,9 +31,13 @@ //irq.cpp enum { IRQ_TRIGGER_NEVER = 0x3fff }; void update_interrupts(); - void nmi_tick(); - void irq_tick(); - void poll_interrupts(); + void poll_interrupts(uint clocks); +#ifdef FAVOR_SPEED + void poll_interrupts_range(uint clocks); +#endif + bool nmi_edge(); + bool irq_edge(); + void irqpos_update(uint16 addr); bool irq_pos_valid(); bool nmi_test(); bool irq_test(); diff --git a/src/interface.h b/src/interface.h index 14368699..87fa3148 100644 --- a/src/interface.h +++ b/src/interface.h @@ -20,11 +20,9 @@ #include "cpu/cpu.h" #include "cpu/scpu/scpu.h" -//#include "cpu/bcpu/bcpu.h" #include "smp/smp.h" #include "smp/ssmp/ssmp.h" -//#include "smp/bsmp/bsmp.h" #include "dsp/dsp.h" #include "dsp/bdsp/bdsp.h" diff --git a/src/smp/bsmp/bsmp.cpp b/src/smp/bsmp/bsmp.cpp deleted file mode 100644 index 7852cbd8..00000000 --- a/src/smp/bsmp/bsmp.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "../../base.h" - -#include "core/core.cpp" -#include "memory/memory.cpp" -#include "timing/timing.cpp" - -void bSMP::run() { - exec(); -} - -void bSMP::power() { - memset(spcram, 0x00, 65536); - reset(); -} - -void bSMP::reset() { - regs.pc = 0xffc0; - regs.a = 0x00; - regs.x = 0x00; - regs.y = 0x00; - regs.sp = 0xef; - regs.p = 0x02; - - status.cycle_pos = 0; - status.clocks_executed = 0; - -//$f1 - status.iplrom_enabled = true; - - t0.enabled = false; - t1.enabled = false; - t2.enabled = false; - - t0.stage1_ticks = 0; - t1.stage1_ticks = 0; - t2.stage1_ticks = 0; - - t0.stage2_ticks = 0; - t1.stage2_ticks = 0; - t2.stage2_ticks = 0; - - t0.stage3_ticks = 0; - t1.stage3_ticks = 0; - t2.stage3_ticks = 0; -} - -bSMP::bSMP() { - init_op_table(); - - t0.cycle_frequency = 128; //1.024mhz / 8khz = 128 - t1.cycle_frequency = 128; //1.024mhz / 8khz = 128 - t2.cycle_frequency = 16; //1.024mhz / 64khz = 16 - -//targets not initialized/changed upon reset - t0.target = 0; - t1.target = 0; - t2.target = 0; -} - -bSMP::~bSMP() {} diff --git a/src/smp/bsmp/bsmp.h b/src/smp/bsmp/bsmp.h deleted file mode 100644 index e504f224..00000000 --- a/src/smp/bsmp/bsmp.h +++ /dev/null @@ -1,24 +0,0 @@ -class bSMP : public SMP { -public: -#include "core/core.h" -#include "memory/memory.h" -#include "timing/timing.h" - -struct { - uint8 cycle_pos, opcode; - uint32 clocks_executed; - -//$f1 - bool iplrom_enabled; - -//$f2 - uint8 dsp_addr; -} status; - - inline void run(); - inline void power(); - inline void reset(); - - bSMP(); - ~bSMP(); -}; diff --git a/src/smp/bsmp/core/bsmpgen.cpp b/src/smp/bsmp/core/bsmpgen.cpp deleted file mode 100644 index 65643c8e..00000000 --- a/src/smp/bsmp/core/bsmpgen.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#define CLASS_NAME "bSMP" -#include "../../../lib/opgen.cpp" - -int main() { - fph = fopen("op.h", "wb"); - fpt = fopen("optable.cpp", "wb"); - - generate("op_mov.cpp", "op_mov.b"); - generate("op_pc.cpp", "op_pc.b"); - generate("op_read.cpp", "op_read.b"); - generate("op_rmw.cpp", "op_rmw.b"); - generate("op_misc.cpp", "op_misc.b"); - - fclose(fph); - fclose(fpt); - - return 0; -} diff --git a/src/smp/bsmp/core/cc.bat b/src/smp/bsmp/core/cc.bat deleted file mode 100644 index 281aad27..00000000 --- a/src/smp/bsmp/core/cc.bat +++ /dev/null @@ -1,3 +0,0 @@ -cl /nologo /O2 bsmpgen.cpp -@pause -@del *.obj \ No newline at end of file diff --git a/src/smp/bsmp/core/clean.bat b/src/smp/bsmp/core/clean.bat deleted file mode 100644 index d807f14d..00000000 --- a/src/smp/bsmp/core/clean.bat +++ /dev/null @@ -1 +0,0 @@ -@del *.exe diff --git a/src/smp/bsmp/core/core.cpp b/src/smp/bsmp/core/core.cpp deleted file mode 100644 index 8434b3de..00000000 --- a/src/smp/bsmp/core/core.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "opfn.cpp" -#include "op_mov.cpp" -#include "op_pc.cpp" -#include "op_read.cpp" -#include "op_rmw.cpp" -#include "op_misc.cpp" - -void bSMP::exec() { - if(status.cycle_pos) { - (this->*optbl[status.opcode])(); - add_cycles(1); - return; - } - -//on first cycle? - status.opcode = op_read(); - status.cycle_pos = 1; - add_cycles(1); -} - -//only return true when we are on an opcode edge -bool bSMP::in_opcode() { - return (status.cycle_pos != 0); -} - -void bSMP::init_op_table() { - #include "optable.cpp" -} diff --git a/src/smp/bsmp/core/core.h b/src/smp/bsmp/core/core.h deleted file mode 100644 index e1ed96c8..00000000 --- a/src/smp/bsmp/core/core.h +++ /dev/null @@ -1,25 +0,0 @@ -void (bSMP::*optbl[256])(); -uint16 dp, sp, rd, wr, bit, ya; - inline uint8 op_adc (uint8 x, uint8 y); - inline uint16 op_addw(uint16 x, uint16 y); - inline uint8 op_and (uint8 x, uint8 y); - inline uint8 op_cmp (uint8 x, uint8 y); - inline uint16 op_cmpw(uint16 x, uint16 y); - inline uint8 op_eor (uint8 x, uint8 y); - inline uint8 op_inc (uint8 x); - inline uint16 op_incw(uint16 x); - inline uint8 op_dec (uint8 x); - inline uint16 op_decw(uint16 x); - inline uint8 op_or (uint8 x, uint8 y); - inline uint8 op_sbc (uint8 x, uint8 y); - inline uint16 op_subw(uint16 x, uint16 y); - inline uint8 op_asl (uint8 x); - inline uint8 op_lsr (uint8 x); - inline uint8 op_rol (uint8 x); - inline uint8 op_ror (uint8 x); - - inline void exec(); - inline bool in_opcode(); - inline void init_op_table(); - -#include "op.h" diff --git a/src/smp/bsmp/core/op.h b/src/smp/bsmp/core/op.h deleted file mode 100644 index da2b2856..00000000 --- a/src/smp/bsmp/core/op.h +++ /dev/null @@ -1,256 +0,0 @@ -void op_mov_a_x(); -void op_mov_a_y(); -void op_mov_x_a(); -void op_mov_y_a(); -void op_mov_x_sp(); -void op_mov_sp_x(); -void op_mov_a_const(); -void op_mov_x_const(); -void op_mov_y_const(); -void op_mov_a_ix(); -void op_mov_a_ixinc(); -void op_mov_a_dp(); -void op_mov_x_dp(); -void op_mov_y_dp(); -void op_mov_a_dpx(); -void op_mov_x_dpy(); -void op_mov_y_dpx(); -void op_mov_a_addr(); -void op_mov_x_addr(); -void op_mov_y_addr(); -void op_mov_a_addrx(); -void op_mov_a_addry(); -void op_mov_a_idpx(); -void op_mov_a_idpy(); -void op_mov_dp_dp(); -void op_mov_dp_const(); -void op_mov_ix_a(); -void op_mov_ixinc_a(); -void op_mov_dp_a(); -void op_mov_dp_x(); -void op_mov_dp_y(); -void op_mov_dpx_a(); -void op_mov_dpy_x(); -void op_mov_dpx_y(); -void op_mov_addr_a(); -void op_mov_addr_x(); -void op_mov_addr_y(); -void op_mov_addrx_a(); -void op_mov_addry_a(); -void op_mov_idpx_a(); -void op_mov_idpy_a(); -void op_movw_ya_dp(); -void op_movw_dp_ya(); -void op_mov1_c_bit(); -void op_mov1_bit_c(); -void op_bra(); -void op_beq(); -void op_bne(); -void op_bcs(); -void op_bcc(); -void op_bvs(); -void op_bvc(); -void op_bmi(); -void op_bpl(); -void op_bbs0(); -void op_bbc0(); -void op_bbs1(); -void op_bbc1(); -void op_bbs2(); -void op_bbc2(); -void op_bbs3(); -void op_bbc3(); -void op_bbs4(); -void op_bbc4(); -void op_bbs5(); -void op_bbc5(); -void op_bbs6(); -void op_bbc6(); -void op_bbs7(); -void op_bbc7(); -void op_cbne_dp(); -void op_cbne_dpx(); -void op_dbnz_dp(); -void op_dbnz_y(); -void op_jmp_addr(); -void op_jmp_iaddrx(); -void op_call(); -void op_pcall(); -void op_tcall_0(); -void op_tcall_1(); -void op_tcall_2(); -void op_tcall_3(); -void op_tcall_4(); -void op_tcall_5(); -void op_tcall_6(); -void op_tcall_7(); -void op_tcall_8(); -void op_tcall_9(); -void op_tcall_10(); -void op_tcall_11(); -void op_tcall_12(); -void op_tcall_13(); -void op_tcall_14(); -void op_tcall_15(); -void op_brk(); -void op_ret(); -void op_reti(); -void op_adc_a_const(); -void op_and_a_const(); -void op_cmp_a_const(); -void op_cmp_x_const(); -void op_cmp_y_const(); -void op_eor_a_const(); -void op_or_a_const(); -void op_sbc_a_const(); -void op_adc_a_ix(); -void op_and_a_ix(); -void op_cmp_a_ix(); -void op_eor_a_ix(); -void op_or_a_ix(); -void op_sbc_a_ix(); -void op_adc_a_dp(); -void op_and_a_dp(); -void op_cmp_a_dp(); -void op_cmp_x_dp(); -void op_cmp_y_dp(); -void op_eor_a_dp(); -void op_or_a_dp(); -void op_sbc_a_dp(); -void op_adc_a_dpx(); -void op_and_a_dpx(); -void op_cmp_a_dpx(); -void op_eor_a_dpx(); -void op_or_a_dpx(); -void op_sbc_a_dpx(); -void op_adc_a_addr(); -void op_and_a_addr(); -void op_cmp_a_addr(); -void op_cmp_x_addr(); -void op_cmp_y_addr(); -void op_eor_a_addr(); -void op_or_a_addr(); -void op_sbc_a_addr(); -void op_adc_a_addrx(); -void op_adc_a_addry(); -void op_and_a_addrx(); -void op_and_a_addry(); -void op_cmp_a_addrx(); -void op_cmp_a_addry(); -void op_eor_a_addrx(); -void op_eor_a_addry(); -void op_or_a_addrx(); -void op_or_a_addry(); -void op_sbc_a_addrx(); -void op_sbc_a_addry(); -void op_adc_a_idpx(); -void op_and_a_idpx(); -void op_cmp_a_idpx(); -void op_eor_a_idpx(); -void op_or_a_idpx(); -void op_sbc_a_idpx(); -void op_adc_a_idpy(); -void op_and_a_idpy(); -void op_cmp_a_idpy(); -void op_eor_a_idpy(); -void op_or_a_idpy(); -void op_sbc_a_idpy(); -void op_adc_ix_iy(); -void op_and_ix_iy(); -void op_cmp_ix_iy(); -void op_eor_ix_iy(); -void op_or_ix_iy(); -void op_sbc_ix_iy(); -void op_adc_dp_dp(); -void op_and_dp_dp(); -void op_cmp_dp_dp(); -void op_eor_dp_dp(); -void op_or_dp_dp(); -void op_sbc_dp_dp(); -void op_adc_dp_const(); -void op_and_dp_const(); -void op_cmp_dp_const(); -void op_eor_dp_const(); -void op_or_dp_const(); -void op_sbc_dp_const(); -void op_addw_ya_dp(); -void op_cmpw_ya_dp(); -void op_subw_ya_dp(); -void op_and1_bit(); -void op_and1_notbit(); -void op_eor1_bit(); -void op_not1_bit(); -void op_or1_bit(); -void op_or1_notbit(); -void op_inc_a(); -void op_inc_x(); -void op_inc_y(); -void op_dec_a(); -void op_dec_x(); -void op_dec_y(); -void op_asl_a(); -void op_lsr_a(); -void op_rol_a(); -void op_ror_a(); -void op_inc_dp(); -void op_dec_dp(); -void op_asl_dp(); -void op_lsr_dp(); -void op_rol_dp(); -void op_ror_dp(); -void op_inc_dpx(); -void op_dec_dpx(); -void op_asl_dpx(); -void op_lsr_dpx(); -void op_rol_dpx(); -void op_ror_dpx(); -void op_inc_addr(); -void op_dec_addr(); -void op_asl_addr(); -void op_lsr_addr(); -void op_rol_addr(); -void op_ror_addr(); -void op_incw_dp(); -void op_decw_dp(); -void op_nop(); -void op_sleep(); -void op_stop(); -void op_xcn(); -void op_daa(); -void op_das(); -void op_clrc(); -void op_clrp(); -void op_setc(); -void op_setp(); -void op_clrv(); -void op_notc(); -void op_ei(); -void op_di(); -void op_set0_dp(); -void op_clr0_dp(); -void op_set1_dp(); -void op_clr1_dp(); -void op_set2_dp(); -void op_clr2_dp(); -void op_set3_dp(); -void op_clr3_dp(); -void op_set4_dp(); -void op_clr4_dp(); -void op_set5_dp(); -void op_clr5_dp(); -void op_set6_dp(); -void op_clr6_dp(); -void op_set7_dp(); -void op_clr7_dp(); -void op_tset_addr_a(); -void op_tclr_addr_a(); -void op_push_a(); -void op_push_x(); -void op_push_y(); -void op_push_p(); -void op_pop_a(); -void op_pop_x(); -void op_pop_y(); -void op_pop_p(); -void op_mul_ya(); -void op_div_ya_x(); diff --git a/src/smp/bsmp/core/op_misc.b b/src/smp/bsmp/core/op_misc.b deleted file mode 100644 index 489da50d..00000000 --- a/src/smp/bsmp/core/op_misc.b +++ /dev/null @@ -1,164 +0,0 @@ -nop(0x00) { -1: -} - -sleep(0xef), -stop(0xff) { -1: -2:regs.pc--; -} - -xcn(0x9f) { -1: -2: -3: -4:regs.a = (regs.a >> 4) | (regs.a << 4); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -daa(0xdf) { -1: -2:if(regs.p.c || (regs.a) > 0x99) { - regs.a += 0x60; - regs.p.c = 1; - } - if(regs.p.h || (regs.a & 15) > 0x09) { - regs.a += 0x06; - } - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -das(0xbe) { -1: -2:if(!regs.p.c || (regs.a) > 0x99) { - regs.a -= 0x60; - regs.p.c = 0; - } - if(!regs.p.h || (regs.a & 15) > 0x09) { - regs.a -= 0x06; - } - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -clrc(0x60, regs.p.c = 0), -clrp(0x20, regs.p.p = 0), -setc(0x80, regs.p.c = 1), -setp(0x40, regs.p.p = 1) { -1:$1; -} - -clrv(0xe0) { -1:regs.p.v = 0; - regs.p.h = 0; -} - -notc(0xed) { -1: -2:regs.p.c ^= 1; -} - -ei(0xa0, 1), -di(0xc0, 0) { -1: -2:regs.p.i = $1; -} - -set0_dp(0x02, rd |= 0x01), -clr0_dp(0x12, rd &= ~0x01), -set1_dp(0x22, rd |= 0x02), -clr1_dp(0x32, rd &= ~0x02), -set2_dp(0x42, rd |= 0x04), -clr2_dp(0x52, rd &= ~0x04), -set3_dp(0x62, rd |= 0x08), -clr3_dp(0x72, rd &= ~0x08), -set4_dp(0x82, rd |= 0x10), -clr4_dp(0x92, rd &= ~0x10), -set5_dp(0xa2, rd |= 0x20), -clr5_dp(0xb2, rd &= ~0x20), -set6_dp(0xc2, rd |= 0x40), -clr6_dp(0xd2, rd &= ~0x40), -set7_dp(0xe2, rd |= 0x80), -clr7_dp(0xf2, rd &= ~0x80) { -1:dp = op_read(); -2:rd = op_read(OPMODE_DP, dp); -3:$1; - op_write(OPMODE_DP, dp, rd); -} - -tset_addr_a(0x0e, |=), -tclr_addr_a(0x4e, &=~) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:rd = op_read(OPMODE_ADDR, dp); -4:regs.p.n = !!((rd & regs.a) & 0x80); - regs.p.z = ((rd & regs.a) == 0); - rd $1 regs.a; -5:op_write(OPMODE_ADDR, dp, rd); -} - -push_a(0x2d, a), -push_x(0x4d, x), -push_y(0x6d, y), -push_p(0x0d, p) { -1: -2: -3:stack_write(regs.$1); -} - -pop_a(0xae, a), -pop_x(0xce, x), -pop_y(0xee, y), -pop_p(0x8e, p) { -1: -2: -3:regs.$1 = stack_read(); -} - -mul_ya(0xcf) { -1: -2: -3: -4: -5: -6: -7: -8:ya = regs.y * regs.a; - regs.a = ya; - regs.y = ya >> 8; -//result is set based on y (high-byte) only - regs.p.n = !!(regs.y & 0x80); - regs.p.z = (regs.y == 0); -} - -div_ya_x(0x9e) { -1: -2: -3: -4: -5: -6: -7: -8: -9: -10: -11:ya = regs.ya; -//overflow set if quotient >= 256 - regs.p.v = !!(regs.y >= regs.x); - regs.p.h = !!((regs.y & 15) >= (regs.x & 15)); - if(regs.y < (regs.x << 1)) { - //if quotient is <= 511 (will fit into 9-bit result) - regs.a = ya / regs.x; - regs.y = ya % regs.x; - } else { - //otherwise, the quotient won't fit into regs.p.v + regs.a - //this emulates the odd behavior of the SPC700 in this case - regs.a = 255 - (ya - (regs.x << 9)) / (256 - regs.x); - regs.y = regs.x + (ya - (regs.x << 9)) % (256 - regs.x); - } -//result is set based on a (quotient) only - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} diff --git a/src/smp/bsmp/core/op_misc.cpp b/src/smp/bsmp/core/op_misc.cpp deleted file mode 100644 index ef48790e..00000000 --- a/src/smp/bsmp/core/op_misc.cpp +++ /dev/null @@ -1,643 +0,0 @@ -void bSMP::op_nop() { - switch(status.cycle_pos++) { - case 1: { - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sleep() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - regs.pc--; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_stop() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - regs.pc--; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_xcn() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - } break; - case 4: { - regs.a = (regs.a >> 4) | (regs.a << 4); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_daa() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - if(regs.p.c || (regs.a) > 0x99) { - regs.a += 0x60; - regs.p.c = 1; - } - if(regs.p.h || (regs.a & 15) > 0x09) { - regs.a += 0x06; - } - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_das() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - if(!regs.p.c || (regs.a) > 0x99) { - regs.a -= 0x60; - regs.p.c = 0; - } - if(!regs.p.h || (regs.a & 15) > 0x09) { - regs.a -= 0x06; - } - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clrc() { - switch(status.cycle_pos++) { - case 1: { - regs.p.c = 0; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clrp() { - switch(status.cycle_pos++) { - case 1: { - regs.p.p = 0; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_setc() { - switch(status.cycle_pos++) { - case 1: { - regs.p.c = 1; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_setp() { - switch(status.cycle_pos++) { - case 1: { - regs.p.p = 1; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clrv() { - switch(status.cycle_pos++) { - case 1: { - regs.p.v = 0; - regs.p.h = 0; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_notc() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - regs.p.c ^= 1; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_ei() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - regs.p.i = 1; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_di() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - regs.p.i = 0; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_set0_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= 0x01; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clr0_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd &= ~0x01; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_set1_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= 0x02; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clr1_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd &= ~0x02; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_set2_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= 0x04; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clr2_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd &= ~0x04; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_set3_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= 0x08; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clr3_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd &= ~0x08; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_set4_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= 0x10; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clr4_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd &= ~0x10; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_set5_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= 0x20; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clr5_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd &= ~0x20; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_set6_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= 0x40; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clr6_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd &= ~0x40; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_set7_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= 0x80; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_clr7_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd &= ~0x80; - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tset_addr_a() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - regs.p.n = !!((rd & regs.a) & 0x80); - regs.p.z = ((rd & regs.a) == 0); - rd |= regs.a; - } break; - case 5: { - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tclr_addr_a() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - regs.p.n = !!((rd & regs.a) & 0x80); - regs.p.z = ((rd & regs.a) == 0); - rd &=~ regs.a; - } break; - case 5: { - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_push_a() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - stack_write(regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_push_x() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - stack_write(regs.x); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_push_y() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - stack_write(regs.y); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_push_p() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - stack_write(regs.p); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_pop_a() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - regs.a = stack_read(); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_pop_x() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - regs.x = stack_read(); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_pop_y() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - regs.y = stack_read(); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_pop_p() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - regs.p = stack_read(); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mul_ya() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - } break; - case 7: { - } break; - case 8: { - ya = regs.y * regs.a; - regs.a = ya; - regs.y = ya >> 8; - //result is set based on y (high-byte) only - regs.p.n = !!(regs.y & 0x80); - regs.p.z = (regs.y == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_div_ya_x() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - } break; - case 7: { - } break; - case 8: { - } break; - case 9: { - } break; - case 10: { - } break; - case 11: { - ya = regs.ya; - //overflow set if quotient >= 256 - regs.p.v = !!(regs.y >= regs.x); - regs.p.h = !!((regs.y & 15) >= (regs.x & 15)); - if(regs.y < (regs.x << 1)) { - //if quotient is <= 511 (will fit into 9-bit result) - regs.a = ya / regs.x; - regs.y = ya % regs.x; - } else { - //otherwise, the quotient won't fit into regs.p.v + regs.a - //this emulates the odd behavior of the SPC700 in this case - regs.a = 255 - (ya - (regs.x << 9)) / (256 - regs.x); - regs.y = regs.x + (ya - (regs.x << 9)) % (256 - regs.x); - } - //result is set based on a (quotient) only - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/smp/bsmp/core/op_mov.b b/src/smp/bsmp/core/op_mov.b deleted file mode 100644 index bbf12c75..00000000 --- a/src/smp/bsmp/core/op_mov.b +++ /dev/null @@ -1,210 +0,0 @@ -mov_a_x(0x7d, a, x), -mov_a_y(0xdd, a, y), -mov_x_a(0x5d, x, a), -mov_y_a(0xfd, y, a), -mov_x_sp(0x9d, x, sp) { -1:regs.$1 = regs.$2; - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_sp_x(0xbd, sp, x) { -1:regs.$1 = regs.$2; -} - -mov_a_const(0xe8, a), -mov_x_const(0xcd, x), -mov_y_const(0x8d, y) { -1:regs.$1 = op_read(); - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_a_ix(0xe6) { -1: -2:regs.a = op_read(OPMODE_DP, regs.x); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_a_ixinc(0xbf) { -1: -2: -3:regs.a = op_read(OPMODE_DP, regs.x++); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_a_dp(0xe4, a), -mov_x_dp(0xf8, x), -mov_y_dp(0xeb, y) { -1:sp = op_read(); -2:regs.$1 = op_read(OPMODE_DP, sp); - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_a_dpx(0xf4, a, x), -mov_x_dpy(0xf9, x, y), -mov_y_dpx(0xfb, y, x) { -1:sp = op_read(); -2: -3:regs.$1 = op_read(OPMODE_DP, sp + regs.$2); - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_a_addr(0xe5, a), -mov_x_addr(0xe9, x), -mov_y_addr(0xec, y) { -1:sp = op_read(); -2:sp |= op_read() << 8; -3:regs.$1 = op_read(OPMODE_ADDR, sp); - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_a_addrx(0xf5, x), -mov_a_addry(0xf6, y) { -1:sp = op_read(); -2:sp |= op_read() << 8; -3: -4:regs.a = op_read(OPMODE_ADDR, sp + regs.$1); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_a_idpx(0xe7) { -1:dp = op_read() + regs.x; -2: -3:sp = op_read(OPMODE_DP, dp); -4:sp |= op_read(OPMODE_DP, dp + 1) << 8; -5:regs.a = op_read(OPMODE_ADDR, sp); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_a_idpy(0xf7) { -1:dp = op_read(); -2: -3:sp = op_read(OPMODE_DP, dp); -4:sp |= op_read(OPMODE_DP, dp + 1) << 8; -5:regs.a = op_read(OPMODE_ADDR, sp + regs.y); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_dp_dp(0xfa) { -1:sp = op_read(); -2:dp = op_read(); -3:rd = op_read(OPMODE_DP, sp); -4:op_write(OPMODE_DP, dp, rd); -} - -mov_dp_const(0x8f) { -1:rd = op_read(); -2:dp = op_read(); -3: -4:op_write(OPMODE_DP, dp, rd); -} - -mov_ix_a(0xc6) { -1: -2: -3:op_write(OPMODE_DP, regs.x, regs.a); -} - -mov_ixinc_a(0xaf) { -1: -2: -3:op_write(OPMODE_DP, regs.x++, regs.a); -} - -mov_dp_a(0xc4, a), -mov_dp_x(0xd8, x), -mov_dp_y(0xcb, y) { -1:dp = op_read(); -2: -3:op_write(OPMODE_DP, dp, regs.$1); -} - -mov_dpx_a(0xd4, x, a), -mov_dpy_x(0xd9, y, x), -mov_dpx_y(0xdb, x, y) { -1:dp = op_read(); -2: -3: -4:op_write(OPMODE_DP, dp + regs.$1, regs.$2); -} - -mov_addr_a(0xc5, a), -mov_addr_x(0xc9, x), -mov_addr_y(0xcc, y) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3: -4:op_write(OPMODE_ADDR, dp, regs.$1); -} - -mov_addrx_a(0xd5, x), -mov_addry_a(0xd6, y) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3: -4: -5:op_write(OPMODE_ADDR, dp + regs.$1, regs.a); -} - -mov_idpx_a(0xc7) { -1:sp = op_read() + regs.x; -2: -3:dp = op_read(OPMODE_DP, sp); -4:dp |= op_read(OPMODE_DP, sp + 1) << 8; -5: -6:op_write(OPMODE_ADDR, dp, regs.a); -} - -mov_idpy_a(0xd7) { -1:sp = op_read(); -2: -3:dp = op_read(OPMODE_DP, sp); -4:dp |= op_read(OPMODE_DP, sp + 1) << 8; -5: -6:op_write(OPMODE_ADDR, dp + regs.y, regs.a); -} - -movw_ya_dp(0xba) { -1:sp = op_read(); -2: -3:regs.a = op_read(OPMODE_DP, sp); -4:regs.y = op_read(OPMODE_DP, sp + 1); - regs.p.n = !!(regs.ya & 0x8000); - regs.p.z = (regs.ya == 0); -} - -movw_dp_ya(0xda) { -1:dp = op_read(); -2: -3:op_write(OPMODE_DP, dp, regs.a); -4:op_write(OPMODE_DP, dp + 1, regs.y); -} - -mov1_c_bit(0xaa) { -1:sp = op_read(); -2:sp |= op_read() << 8; -3:bit = sp >> 13; - sp &= 0x1fff; - rd = op_read(OPMODE_ADDR, sp); - regs.p.c = !!(rd & (1 << bit)); -} - -mov1_bit_c(0xca) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - if(regs.p.c)rd |= (1 << bit); - else rd &= ~(1 << bit); -4:op_write(OPMODE_ADDR, dp, rd); -} diff --git a/src/smp/bsmp/core/op_mov.cpp b/src/smp/bsmp/core/op_mov.cpp deleted file mode 100644 index b00250a0..00000000 --- a/src/smp/bsmp/core/op_mov.cpp +++ /dev/null @@ -1,708 +0,0 @@ -void bSMP::op_mov_a_x() { - switch(status.cycle_pos++) { - case 1: { - regs.a = regs.x; - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_y() { - switch(status.cycle_pos++) { - case 1: { - regs.a = regs.y; - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_x_a() { - switch(status.cycle_pos++) { - case 1: { - regs.x = regs.a; - regs.p.n = !!(regs.x & 0x80); - regs.p.z = (regs.x == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_y_a() { - switch(status.cycle_pos++) { - case 1: { - regs.y = regs.a; - regs.p.n = !!(regs.y & 0x80); - regs.p.z = (regs.y == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_x_sp() { - switch(status.cycle_pos++) { - case 1: { - regs.x = regs.sp; - regs.p.n = !!(regs.x & 0x80); - regs.p.z = (regs.x == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_sp_x() { - switch(status.cycle_pos++) { - case 1: { - regs.sp = regs.x; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_const() { - switch(status.cycle_pos++) { - case 1: { - regs.a = op_read(); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_x_const() { - switch(status.cycle_pos++) { - case 1: { - regs.x = op_read(); - regs.p.n = !!(regs.x & 0x80); - regs.p.z = (regs.x == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_y_const() { - switch(status.cycle_pos++) { - case 1: { - regs.y = op_read(); - regs.p.n = !!(regs.y & 0x80); - regs.p.z = (regs.y == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_ix() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - regs.a = op_read(OPMODE_DP, regs.x); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_ixinc() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - regs.a = op_read(OPMODE_DP, regs.x++); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - regs.a = op_read(OPMODE_DP, sp); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_x_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - regs.x = op_read(OPMODE_DP, sp); - regs.p.n = !!(regs.x & 0x80); - regs.p.z = (regs.x == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_y_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - regs.y = op_read(OPMODE_DP, sp); - regs.p.n = !!(regs.y & 0x80); - regs.p.z = (regs.y == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_dpx() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - } break; - case 3: { - regs.a = op_read(OPMODE_DP, sp + regs.x); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_x_dpy() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - } break; - case 3: { - regs.x = op_read(OPMODE_DP, sp + regs.y); - regs.p.n = !!(regs.x & 0x80); - regs.p.z = (regs.x == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_y_dpx() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - } break; - case 3: { - regs.y = op_read(OPMODE_DP, sp + regs.x); - regs.p.n = !!(regs.y & 0x80); - regs.p.z = (regs.y == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_addr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - sp |= op_read() << 8; - } break; - case 3: { - regs.a = op_read(OPMODE_ADDR, sp); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_x_addr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - sp |= op_read() << 8; - } break; - case 3: { - regs.x = op_read(OPMODE_ADDR, sp); - regs.p.n = !!(regs.x & 0x80); - regs.p.z = (regs.x == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_y_addr() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - sp |= op_read() << 8; - } break; - case 3: { - regs.y = op_read(OPMODE_ADDR, sp); - regs.p.n = !!(regs.y & 0x80); - regs.p.z = (regs.y == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_addrx() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - sp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - regs.a = op_read(OPMODE_ADDR, sp + regs.x); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_addry() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - sp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - regs.a = op_read(OPMODE_ADDR, sp + regs.y); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read() + regs.x; - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - regs.a = op_read(OPMODE_ADDR, sp); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_a_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - regs.a = op_read(OPMODE_ADDR, sp + regs.y); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_dp_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - rd = op_read(OPMODE_DP, sp); - } break; - case 4: { - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_dp_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - } break; - case 4: { - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_ix_a() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - op_write(OPMODE_DP, regs.x, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_ixinc_a() { - switch(status.cycle_pos++) { - case 1: { - } break; - case 2: { - } break; - case 3: { - op_write(OPMODE_DP, regs.x++, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_dp_a() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - op_write(OPMODE_DP, dp, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_dp_x() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - op_write(OPMODE_DP, dp, regs.x); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_dp_y() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - op_write(OPMODE_DP, dp, regs.y); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_dpx_a() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - } break; - case 4: { - op_write(OPMODE_DP, dp + regs.x, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_dpy_x() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - } break; - case 4: { - op_write(OPMODE_DP, dp + regs.y, regs.x); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_dpx_y() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - } break; - case 4: { - op_write(OPMODE_DP, dp + regs.x, regs.y); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_addr_a() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - op_write(OPMODE_ADDR, dp, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_addr_x() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - op_write(OPMODE_ADDR, dp, regs.x); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_addr_y() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - op_write(OPMODE_ADDR, dp, regs.y); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_addrx_a() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - op_write(OPMODE_ADDR, dp + regs.x, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_addry_a() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - op_write(OPMODE_ADDR, dp + regs.y, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_idpx_a() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read() + regs.x; - } break; - case 2: { - } break; - case 3: { - dp = op_read(OPMODE_DP, sp); - } break; - case 4: { - dp |= op_read(OPMODE_DP, sp + 1) << 8; - } break; - case 5: { - } break; - case 6: { - op_write(OPMODE_ADDR, dp, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov_idpy_a() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - } break; - case 3: { - dp = op_read(OPMODE_DP, sp); - } break; - case 4: { - dp |= op_read(OPMODE_DP, sp + 1) << 8; - } break; - case 5: { - } break; - case 6: { - op_write(OPMODE_ADDR, dp + regs.y, regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_movw_ya_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - } break; - case 3: { - regs.a = op_read(OPMODE_DP, sp); - } break; - case 4: { - regs.y = op_read(OPMODE_DP, sp + 1); - regs.p.n = !!(regs.ya & 0x8000); - regs.p.z = (regs.ya == 0); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_movw_dp_ya() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - op_write(OPMODE_DP, dp, regs.a); - } break; - case 4: { - op_write(OPMODE_DP, dp + 1, regs.y); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov1_c_bit() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - sp |= op_read() << 8; - } break; - case 3: { - bit = sp >> 13; - sp &= 0x1fff; - rd = op_read(OPMODE_ADDR, sp); - regs.p.c = !!(rd & (1 << bit)); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_mov1_bit_c() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - if(regs.p.c)rd |= (1 << bit); - else rd &= ~(1 << bit); - } break; - case 4: { - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/smp/bsmp/core/op_pc.b b/src/smp/bsmp/core/op_pc.b deleted file mode 100644 index a13b1147..00000000 --- a/src/smp/bsmp/core/op_pc.b +++ /dev/null @@ -1,166 +0,0 @@ -bra(0x2f, 0), -beq(0xf0, !regs.p.z), -bne(0xd0, regs.p.z), -bcs(0xb0, !regs.p.c), -bcc(0x90, regs.p.c), -bvs(0x70, !regs.p.v), -bvc(0x50, regs.p.v), -bmi(0x30, !regs.p.n), -bpl(0x10, regs.p.n) { -1:rd = op_read(); - if($1)end; -2: -3:regs.pc += (int8)rd; -} - -bbs0(0x03, 0x01, !=), -bbc0(0x13, 0x01, ==), -bbs1(0x23, 0x02, !=), -bbc1(0x33, 0x02, ==), -bbs2(0x43, 0x04, !=), -bbc2(0x53, 0x04, ==), -bbs3(0x63, 0x08, !=), -bbc3(0x73, 0x08, ==), -bbs4(0x83, 0x10, !=), -bbc4(0x93, 0x10, ==), -bbs5(0xa3, 0x20, !=), -bbc5(0xb3, 0x20, ==), -bbs6(0xc3, 0x40, !=), -bbc6(0xd3, 0x40, ==), -bbs7(0xe3, 0x80, !=), -bbc7(0xf3, 0x80, ==) { -1:dp = op_read(); -2:rd = op_read(); -3:sp = op_read(OPMODE_DP, dp); -4:if((sp & $1) $2 $1)end; -5: -6:regs.pc += (int8)rd; -} - -cbne_dp(0x2e) { -1:dp = op_read(); -2:rd = op_read(); -3:sp = op_read(OPMODE_DP, dp); -4:if(regs.a == sp)end; -5: -6:regs.pc += (int8)rd; -} - -cbne_dpx(0xde) { -1:dp = op_read(); -2:rd = op_read(); -3: -4:sp = op_read(OPMODE_DP, dp + regs.x); -5:if(regs.a == sp)end; -6: -7:regs.pc += (int8)rd; -} - -dbnz_dp(0x6e) { -1:dp = op_read(); -2:rd = op_read(); -3:wr = op_read(OPMODE_DP, dp); -4:wr--; - op_write(OPMODE_DP, dp, wr); - if(wr == 0x00)end; -5: -6:regs.pc += (int8)rd; -} - -dbnz_y(0xfe) { -1:rd = op_read(); -2:regs.y--; -3:if(regs.y == 0x00)end; -4: -5:regs.pc += (int8)rd; -} - -jmp_addr(0x5f) { -1:rd = op_read(); -2:rd |= op_read() << 8; - regs.pc = rd; -} - -jmp_iaddrx(0x1f) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:dp += regs.x; -4:rd = op_read(OPMODE_ADDR, dp); -5:rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - regs.pc = rd; -} - -call(0x3f) { -1:rd = op_read(); -2:rd |= op_read() << 8; -3: -4: -5: -6:stack_write(regs.pc >> 8); -7:stack_write(regs.pc); - regs.pc = rd; -} - -pcall(0x4f) { -1:rd = op_read(); -2: -3: -4:stack_write(regs.pc >> 8); -5:stack_write(regs.pc); - regs.pc = 0xff00 | rd; -} - -tcall_0(0x01, 0), -tcall_1(0x11, 1), -tcall_2(0x21, 2), -tcall_3(0x31, 3), -tcall_4(0x41, 4), -tcall_5(0x51, 5), -tcall_6(0x61, 6), -tcall_7(0x71, 7), -tcall_8(0x81, 8), -tcall_9(0x91, 9), -tcall_10(0xa1, 10), -tcall_11(0xb1, 11), -tcall_12(0xc1, 12), -tcall_13(0xd1, 13), -tcall_14(0xe1, 14), -tcall_15(0xf1, 15) { -1:dp = 0xffde - ($1 << 1); - rd = op_read(OPMODE_ADDR, dp); -2:rd |= op_read(OPMODE_ADDR, dp + 1) << 8; -3: -4: -5: -6:stack_write(regs.pc >> 8); -7:stack_write(regs.pc); - regs.pc = rd; -} - -brk(0x0f) { -1:rd = op_read(OPMODE_ADDR, 0xffde); -2:rd |= op_read(OPMODE_ADDR, 0xffdf) << 8; -3: -4: -5:stack_write(regs.pc >> 8); -6:stack_write(regs.pc); -7:stack_write(regs.p); - regs.pc = rd; - regs.p.b = 1; - regs.p.i = 0; -} - -ret(0x6f) { -1:rd = stack_read(); -2:rd |= stack_read() << 8; -3: -4:regs.pc = rd; -} - -reti(0x7f) { -1:regs.p = stack_read(); -2:rd = stack_read(); -3:rd |= stack_read() << 8; -4: -5:regs.pc = rd; -} diff --git a/src/smp/bsmp/core/op_pc.cpp b/src/smp/bsmp/core/op_pc.cpp deleted file mode 100644 index 78cd6467..00000000 --- a/src/smp/bsmp/core/op_pc.cpp +++ /dev/null @@ -1,1157 +0,0 @@ -void bSMP::op_bra() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(0)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_beq() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(!regs.p.z)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bne() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(regs.p.z)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bcs() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(!regs.p.c)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bcc() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(regs.p.c)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bvs() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(!regs.p.v)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bvc() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(regs.p.v)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bmi() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(!regs.p.n)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bpl() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - if(regs.p.n)status.cycle_pos = 0; - } break; - case 2: { - } break; - case 3: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbs0() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x01) != 0x01)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbc0() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x01) == 0x01)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbs1() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x02) != 0x02)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbc1() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x02) == 0x02)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbs2() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x04) != 0x04)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbc2() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x04) == 0x04)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbs3() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x08) != 0x08)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbc3() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x08) == 0x08)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbs4() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x10) != 0x10)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbc4() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x10) == 0x10)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbs5() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x20) != 0x20)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbc5() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x20) == 0x20)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbs6() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x40) != 0x40)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbc6() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x40) == 0x40)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbs7() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x80) != 0x80)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_bbc7() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if((sp & 0x80) == 0x80)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cbne_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - if(regs.a == sp)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cbne_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - } break; - case 4: { - sp = op_read(OPMODE_DP, dp + regs.x); - } break; - case 5: { - if(regs.a == sp)status.cycle_pos = 0; - } break; - case 6: { - } break; - case 7: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_dbnz_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - wr--; - op_write(OPMODE_DP, dp, wr); - if(wr == 0x00)status.cycle_pos = 0; - } break; - case 5: { - } break; - case 6: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_dbnz_y() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - regs.y--; - } break; - case 3: { - if(regs.y == 0x00)status.cycle_pos = 0; - } break; - case 4: { - } break; - case 5: { - regs.pc += (int8)rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_jmp_addr() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - rd |= op_read() << 8; - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_jmp_iaddrx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - dp += regs.x; - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 5: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_call() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - rd |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_pcall() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - } break; - case 3: { - } break; - case 4: { - stack_write(regs.pc >> 8); - } break; - case 5: { - stack_write(regs.pc); - regs.pc = 0xff00 | rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_0() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (0 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_1() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (1 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_2() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (2 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_3() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (3 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_4() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (4 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_5() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (5 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_6() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (6 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_7() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (7 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_8() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (8 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_9() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (9 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_10() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (10 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_11() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (11 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_12() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (12 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_13() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (13 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_14() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (14 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_tcall_15() { - switch(status.cycle_pos++) { - case 1: { - dp = 0xffde - (15 << 1); - rd = op_read(OPMODE_ADDR, dp); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, dp + 1) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - } break; - case 6: { - stack_write(regs.pc >> 8); - } break; - case 7: { - stack_write(regs.pc); - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_brk() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(OPMODE_ADDR, 0xffde); - } break; - case 2: { - rd |= op_read(OPMODE_ADDR, 0xffdf) << 8; - } break; - case 3: { - } break; - case 4: { - } break; - case 5: { - stack_write(regs.pc >> 8); - } break; - case 6: { - stack_write(regs.pc); - } break; - case 7: { - stack_write(regs.p); - regs.pc = rd; - regs.p.b = 1; - regs.p.i = 0; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_ret() { - switch(status.cycle_pos++) { - case 1: { - rd = stack_read(); - } break; - case 2: { - rd |= stack_read() << 8; - } break; - case 3: { - } break; - case 4: { - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_reti() { - switch(status.cycle_pos++) { - case 1: { - regs.p = stack_read(); - } break; - case 2: { - rd = stack_read(); - } break; - case 3: { - rd |= stack_read() << 8; - } break; - case 4: { - } break; - case 5: { - regs.pc = rd; - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/smp/bsmp/core/op_read.b b/src/smp/bsmp/core/op_read.b deleted file mode 100644 index c67f3571..00000000 --- a/src/smp/bsmp/core/op_read.b +++ /dev/null @@ -1,194 +0,0 @@ -adc_a_const(0x88, adc, a), -and_a_const(0x28, and, a), -cmp_a_const(0x68, cmp, a), -cmp_x_const(0xc8, cmp, x), -cmp_y_const(0xad, cmp, y), -eor_a_const(0x48, eor, a), -or_a_const(0x08, or, a), -sbc_a_const(0xa8, sbc, a) { -1:rd = op_read(); - regs.$2 = op_$1(regs.$2, rd); -} - -adc_a_ix(0x86, adc), -and_a_ix(0x26, and), -cmp_a_ix(0x66, cmp), -eor_a_ix(0x46, eor), -or_a_ix(0x06, or), -sbc_a_ix(0xa6, sbc) { -1:rd = op_read(OPMODE_DP, regs.x); -2:regs.a = op_$1(regs.a, rd); -} - -adc_a_dp(0x84, adc, a), -and_a_dp(0x24, and, a), -cmp_a_dp(0x64, cmp, a), -cmp_x_dp(0x3e, cmp, x), -cmp_y_dp(0x7e, cmp, y), -eor_a_dp(0x44, eor, a), -or_a_dp(0x04, or, a), -sbc_a_dp(0xa4, sbc, a) { -1:dp = op_read(); -2:rd = op_read(OPMODE_DP, dp); - regs.$2 = op_$1(regs.$2, rd); -} - -adc_a_dpx(0x94, adc), -and_a_dpx(0x34, and), -cmp_a_dpx(0x74, cmp), -eor_a_dpx(0x54, eor), -or_a_dpx(0x14, or), -sbc_a_dpx(0xb4, sbc) { -1:dp = op_read(); -2: -3:rd = op_read(OPMODE_DP, dp + regs.x); - regs.a = op_$1(regs.a, rd); -} - -adc_a_addr(0x85, adc, a), -and_a_addr(0x25, and, a), -cmp_a_addr(0x65, cmp, a), -cmp_x_addr(0x1e, cmp, x), -cmp_y_addr(0x5e, cmp, y), -eor_a_addr(0x45, eor, a), -or_a_addr(0x05, or, a), -sbc_a_addr(0xa5, sbc, a) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:rd = op_read(OPMODE_ADDR, dp); - regs.$2 = op_$1(regs.$2, rd); -} - -adc_a_addrx(0x95, adc, x), -adc_a_addry(0x96, adc, y), -and_a_addrx(0x35, and, x), -and_a_addry(0x36, and, y), -cmp_a_addrx(0x75, cmp, x), -cmp_a_addry(0x76, cmp, y), -eor_a_addrx(0x55, eor, x), -eor_a_addry(0x56, eor, y), -or_a_addrx(0x15, or, x), -or_a_addry(0x16, or, y), -sbc_a_addrx(0xb5, sbc, x), -sbc_a_addry(0xb6, sbc, y) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3: -4:rd = op_read(OPMODE_ADDR, dp + regs.$2); - regs.a = op_$1(regs.a, rd); -} - -adc_a_idpx(0x87, adc), -and_a_idpx(0x27, and), -cmp_a_idpx(0x67, cmp), -eor_a_idpx(0x47, eor), -or_a_idpx(0x07, or), -sbc_a_idpx(0xa7, sbc) { -1:dp = op_read() + regs.x; -2: -3:sp = op_read(OPMODE_DP, dp); -4:sp |= op_read(OPMODE_DP, dp + 1) << 8; -5:rd = op_read(OPMODE_ADDR, sp); - regs.a = op_$1(regs.a, rd); -} - -adc_a_idpy(0x97, adc), -and_a_idpy(0x37, and), -cmp_a_idpy(0x77, cmp), -eor_a_idpy(0x57, eor), -or_a_idpy(0x17, or), -sbc_a_idpy(0xb7, sbc) { -1:dp = op_read(); -2: -3:sp = op_read(OPMODE_DP, dp); -4:sp |= op_read(OPMODE_DP, dp + 1) << 8; -5:rd = op_read(OPMODE_ADDR, sp + regs.y); - regs.a = op_$1(regs.a, rd); -} - -adc_ix_iy(0x99, adc, 1), -and_ix_iy(0x39, and, 1), -cmp_ix_iy(0x79, cmp, 0), -eor_ix_iy(0x59, eor, 1), -or_ix_iy(0x19, or, 1), -sbc_ix_iy(0xb9, sbc, 1) { -1:wr = op_read(OPMODE_DP, regs.x); -2:rd = op_read(OPMODE_DP, regs.y); -3:wr = op_$1(wr, rd); -4:if($2)op_write(OPMODE_DP, regs.x, wr); -} - -adc_dp_dp(0x89, adc, 1), -and_dp_dp(0x29, and, 1), -cmp_dp_dp(0x69, cmp, 0), -eor_dp_dp(0x49, eor, 1), -or_dp_dp(0x09, or, 1), -sbc_dp_dp(0xa9, sbc, 1) { -1:sp = op_read(); -2:dp = op_read(); -3:wr = op_read(OPMODE_DP, dp); -4:rd = op_read(OPMODE_DP, sp); -5:wr = op_$1(wr, rd); - if($2)op_write(OPMODE_DP, dp, wr); -} - -adc_dp_const(0x98, adc, 1), -and_dp_const(0x38, and, 1), -cmp_dp_const(0x78, cmp, 0), -eor_dp_const(0x58, eor, 1), -or_dp_const(0x18, or, 1), -sbc_dp_const(0xb8, sbc, 1) { -1:rd = op_read(); -2:dp = op_read(); -3:wr = op_read(OPMODE_DP, dp); -4:wr = op_$1(wr, rd); - if($2)op_write(OPMODE_DP, dp, wr); -} - -addw_ya_dp(0x7a, addw), -cmpw_ya_dp(0x5a, cmpw), -subw_ya_dp(0x9a, subw) { -1:dp = op_read(); -2:rd = op_read(OPMODE_DP, dp); -3:rd |= op_read(OPMODE_DP, dp + 1) << 8; -4:regs.ya = op_$1(regs.ya, rd); -} - -and1_bit(0x4a, !!), -and1_notbit(0x6a, !) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - regs.p.c = regs.p.c & $1(rd & (1 << bit)); -} - -eor1_bit(0x8a) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); -4:regs.p.c = regs.p.c ^ !!(rd & (1 << bit)); -} - -not1_bit(0xea) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - rd ^= (1 << bit); -4:op_write(OPMODE_ADDR, dp, rd); -} - -or1_bit(0x0a, !!), -or1_notbit(0x2a, !) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); -4:regs.p.c = regs.p.c | $1(rd & (1 << bit)); -} diff --git a/src/smp/bsmp/core/op_read.cpp b/src/smp/bsmp/core/op_read.cpp deleted file mode 100644 index ae6c801d..00000000 --- a/src/smp/bsmp/core/op_read.cpp +++ /dev/null @@ -1,1467 +0,0 @@ -void bSMP::op_adc_a_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_x_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - regs.x = op_cmp(regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_y_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - regs.y = op_cmp(regs.y, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_a_ix() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_ix() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_ix() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_ix() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_ix() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_ix() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_a_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_x_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - regs.x = op_cmp(regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_y_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - regs.y = op_cmp(regs.y, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_a_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_a_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_x_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - regs.x = op_cmp(regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_y_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - regs.y = op_cmp(regs.y, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_a_addrx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.x); - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_a_addry() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.y); - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_addrx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.x); - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_addry() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.y); - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_addrx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.x); - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_addry() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.y); - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_addrx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.x); - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_addry() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.y); - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_addrx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.x); - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_addry() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.y); - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_addrx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.x); - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_addry() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - } break; - case 4: { - rd = op_read(OPMODE_ADDR, dp + regs.y); - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_a_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read() + regs.x; - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp); - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read() + regs.x; - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp); - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read() + regs.x; - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp); - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read() + regs.x; - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp); - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read() + regs.x; - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp); - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_idpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read() + regs.x; - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp); - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_a_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp + regs.y); - regs.a = op_adc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_a_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp + regs.y); - regs.a = op_and(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_a_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp + regs.y); - regs.a = op_cmp(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_a_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp + regs.y); - regs.a = op_eor(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_a_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp + regs.y); - regs.a = op_or(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_a_idpy() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - sp = op_read(OPMODE_DP, dp); - } break; - case 4: { - sp |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 5: { - rd = op_read(OPMODE_ADDR, sp + regs.y); - regs.a = op_sbc(regs.a, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_ix_iy() { - switch(status.cycle_pos++) { - case 1: { - wr = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - rd = op_read(OPMODE_DP, regs.y); - } break; - case 3: { - wr = op_adc(wr, rd); - } break; - case 4: { - if(1)op_write(OPMODE_DP, regs.x, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_ix_iy() { - switch(status.cycle_pos++) { - case 1: { - wr = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - rd = op_read(OPMODE_DP, regs.y); - } break; - case 3: { - wr = op_and(wr, rd); - } break; - case 4: { - if(1)op_write(OPMODE_DP, regs.x, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_ix_iy() { - switch(status.cycle_pos++) { - case 1: { - wr = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - rd = op_read(OPMODE_DP, regs.y); - } break; - case 3: { - wr = op_cmp(wr, rd); - } break; - case 4: { - if(0)op_write(OPMODE_DP, regs.x, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_ix_iy() { - switch(status.cycle_pos++) { - case 1: { - wr = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - rd = op_read(OPMODE_DP, regs.y); - } break; - case 3: { - wr = op_eor(wr, rd); - } break; - case 4: { - if(1)op_write(OPMODE_DP, regs.x, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_ix_iy() { - switch(status.cycle_pos++) { - case 1: { - wr = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - rd = op_read(OPMODE_DP, regs.y); - } break; - case 3: { - wr = op_or(wr, rd); - } break; - case 4: { - if(1)op_write(OPMODE_DP, regs.x, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_ix_iy() { - switch(status.cycle_pos++) { - case 1: { - wr = op_read(OPMODE_DP, regs.x); - } break; - case 2: { - rd = op_read(OPMODE_DP, regs.y); - } break; - case 3: { - wr = op_sbc(wr, rd); - } break; - case 4: { - if(1)op_write(OPMODE_DP, regs.x, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_dp_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - rd = op_read(OPMODE_DP, sp); - } break; - case 5: { - wr = op_adc(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_dp_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - rd = op_read(OPMODE_DP, sp); - } break; - case 5: { - wr = op_and(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_dp_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - rd = op_read(OPMODE_DP, sp); - } break; - case 5: { - wr = op_cmp(wr, rd); - if(0)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_dp_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - rd = op_read(OPMODE_DP, sp); - } break; - case 5: { - wr = op_eor(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_dp_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - rd = op_read(OPMODE_DP, sp); - } break; - case 5: { - wr = op_or(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_dp_dp() { - switch(status.cycle_pos++) { - case 1: { - sp = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - rd = op_read(OPMODE_DP, sp); - } break; - case 5: { - wr = op_sbc(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_adc_dp_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - wr = op_adc(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and_dp_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - wr = op_and(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmp_dp_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - wr = op_cmp(wr, rd); - if(0)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor_dp_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - wr = op_eor(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or_dp_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - wr = op_or(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_sbc_dp_const() { - switch(status.cycle_pos++) { - case 1: { - rd = op_read(); - } break; - case 2: { - dp = op_read(); - } break; - case 3: { - wr = op_read(OPMODE_DP, dp); - } break; - case 4: { - wr = op_sbc(wr, rd); - if(1)op_write(OPMODE_DP, dp, wr); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_addw_ya_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 4: { - regs.ya = op_addw(regs.ya, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_cmpw_ya_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 4: { - regs.ya = op_cmpw(regs.ya, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_subw_ya_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 4: { - regs.ya = op_subw(regs.ya, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and1_bit() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - regs.p.c = regs.p.c & !!(rd & (1 << bit)); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_and1_notbit() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - regs.p.c = regs.p.c & !(rd & (1 << bit)); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_eor1_bit() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - regs.p.c = regs.p.c ^ !!(rd & (1 << bit)); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_not1_bit() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - rd ^= (1 << bit); - } break; - case 4: { - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or1_bit() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - regs.p.c = regs.p.c | !!(rd & (1 << bit)); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_or1_notbit() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - bit = dp >> 13; - dp &= 0x1fff; - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - regs.p.c = regs.p.c | !(rd & (1 << bit)); - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/smp/bsmp/core/op_rmw.b b/src/smp/bsmp/core/op_rmw.b deleted file mode 100644 index 6084310d..00000000 --- a/src/smp/bsmp/core/op_rmw.b +++ /dev/null @@ -1,60 +0,0 @@ -inc_a(0xbc, inc, a), -inc_x(0x3d, inc, x), -inc_y(0xfc, inc, y), -dec_a(0x9c, dec, a), -dec_x(0x1d, dec, x), -dec_y(0xdc, dec, y), -asl_a(0x1c, asl, a), -lsr_a(0x5c, lsr, a), -rol_a(0x3c, rol, a), -ror_a(0x7c, ror, a) { -1:regs.$2 = op_$1(regs.$2); -} - -inc_dp(0xab, inc), -dec_dp(0x8b, dec), -asl_dp(0x0b, asl), -lsr_dp(0x4b, lsr), -rol_dp(0x2b, rol), -ror_dp(0x6b, ror) { -1:dp = op_read(); -2:rd = op_read(OPMODE_DP, dp); -3:rd = op_$1(rd); - op_write(OPMODE_DP, dp, rd); -} - -inc_dpx(0xbb, inc), -dec_dpx(0x9b, dec), -asl_dpx(0x1b, asl), -lsr_dpx(0x5b, lsr), -rol_dpx(0x3b, rol), -ror_dpx(0x7b, ror) { -1:dp = op_read(); -2: -3:rd = op_read(OPMODE_DP, dp + regs.x); -4:rd = op_$1(rd); - op_write(OPMODE_DP, dp + regs.x, rd); -} - -inc_addr(0xac, inc), -dec_addr(0x8c, dec), -asl_addr(0x0c, asl), -lsr_addr(0x4c, lsr), -rol_addr(0x2c, rol), -ror_addr(0x6c, ror) { -1:dp = op_read(); -2:dp |= op_read() << 8; -3:rd = op_read(OPMODE_ADDR, dp); -4:rd = op_$1(rd); - op_write(OPMODE_ADDR, dp, rd); -} - -incw_dp(0x3a, incw), -decw_dp(0x1a, decw) { -1:dp = op_read(); -2:rd = op_read(OPMODE_DP, dp); -3:rd |= op_read(OPMODE_DP, dp + 1) << 8; -4:rd = op_$1(rd); - op_write(OPMODE_DP, dp + 1, rd >> 8); -5:op_write(OPMODE_DP, dp, rd); -} diff --git a/src/smp/bsmp/core/op_rmw.cpp b/src/smp/bsmp/core/op_rmw.cpp deleted file mode 100644 index 67f60760..00000000 --- a/src/smp/bsmp/core/op_rmw.cpp +++ /dev/null @@ -1,452 +0,0 @@ -void bSMP::op_inc_a() { - switch(status.cycle_pos++) { - case 1: { - regs.a = op_inc(regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_inc_x() { - switch(status.cycle_pos++) { - case 1: { - regs.x = op_inc(regs.x); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_inc_y() { - switch(status.cycle_pos++) { - case 1: { - regs.y = op_inc(regs.y); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_dec_a() { - switch(status.cycle_pos++) { - case 1: { - regs.a = op_dec(regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_dec_x() { - switch(status.cycle_pos++) { - case 1: { - regs.x = op_dec(regs.x); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_dec_y() { - switch(status.cycle_pos++) { - case 1: { - regs.y = op_dec(regs.y); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_asl_a() { - switch(status.cycle_pos++) { - case 1: { - regs.a = op_asl(regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_lsr_a() { - switch(status.cycle_pos++) { - case 1: { - regs.a = op_lsr(regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_rol_a() { - switch(status.cycle_pos++) { - case 1: { - regs.a = op_rol(regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_ror_a() { - switch(status.cycle_pos++) { - case 1: { - regs.a = op_ror(regs.a); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_inc_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd = op_inc(rd); - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_dec_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd = op_dec(rd); - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_asl_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd = op_asl(rd); - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_lsr_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd = op_lsr(rd); - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_rol_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd = op_rol(rd); - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_ror_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd = op_ror(rd); - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_inc_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - } break; - case 4: { - rd = op_inc(rd); - op_write(OPMODE_DP, dp + regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_dec_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - } break; - case 4: { - rd = op_dec(rd); - op_write(OPMODE_DP, dp + regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_asl_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - } break; - case 4: { - rd = op_asl(rd); - op_write(OPMODE_DP, dp + regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_lsr_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - } break; - case 4: { - rd = op_lsr(rd); - op_write(OPMODE_DP, dp + regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_rol_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - } break; - case 4: { - rd = op_rol(rd); - op_write(OPMODE_DP, dp + regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_ror_dpx() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - } break; - case 3: { - rd = op_read(OPMODE_DP, dp + regs.x); - } break; - case 4: { - rd = op_ror(rd); - op_write(OPMODE_DP, dp + regs.x, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_inc_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - rd = op_inc(rd); - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_dec_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - rd = op_dec(rd); - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_asl_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - rd = op_asl(rd); - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_lsr_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - rd = op_lsr(rd); - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_rol_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - rd = op_rol(rd); - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_ror_addr() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - dp |= op_read() << 8; - } break; - case 3: { - rd = op_read(OPMODE_ADDR, dp); - } break; - case 4: { - rd = op_ror(rd); - op_write(OPMODE_ADDR, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_incw_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 4: { - rd = op_incw(rd); - op_write(OPMODE_DP, dp + 1, rd >> 8); - } break; - case 5: { - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - -void bSMP::op_decw_dp() { - switch(status.cycle_pos++) { - case 1: { - dp = op_read(); - } break; - case 2: { - rd = op_read(OPMODE_DP, dp); - } break; - case 3: { - rd |= op_read(OPMODE_DP, dp + 1) << 8; - } break; - case 4: { - rd = op_decw(rd); - op_write(OPMODE_DP, dp + 1, rd >> 8); - } break; - case 5: { - op_write(OPMODE_DP, dp, rd); - status.cycle_pos = 0; - } break; - } -} - diff --git a/src/smp/bsmp/core/opfn.cpp b/src/smp/bsmp/core/opfn.cpp deleted file mode 100644 index 2c3cc3f6..00000000 --- a/src/smp/bsmp/core/opfn.cpp +++ /dev/null @@ -1,138 +0,0 @@ -uint8 bSMP::op_adc(uint8 x, uint8 y) { -int16 r = x + y + regs.p.c; - regs.p.n = !!(r & 0x80); - regs.p.v = !!(~(x ^ y) & (y ^ (uint8)r) & 0x80); - regs.p.h = !!((x ^ y ^ (uint8)r) & 0x10); - regs.p.z = ((uint8)r == 0); - regs.p.c = (r > 0xff); - return r; -} - -uint16 bSMP::op_addw(uint16 x, uint16 y) { -int16 r; - regs.p.c = 0; - r = op_adc(x, y); - r |= op_adc(x >> 8, y >> 8) << 8; - regs.p.z = ((uint16)r == 0); - return r; -} - -uint8 bSMP::op_and(uint8 x, uint8 y) { - x &= y; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} - -uint8 bSMP::op_cmp(uint8 x, uint8 y) { -int16 r = x - y; - regs.p.n = !!(r & 0x80); - regs.p.z = ((uint8)r == 0); - regs.p.c = (r >= 0); - return x; -} - -uint16 bSMP::op_cmpw(uint16 x, uint16 y) { -int32 r = x - y; - regs.p.n = !!(r & 0x8000); - regs.p.z = ((uint16)r == 0); - regs.p.c = (r >= 0); - return x; -} - -uint8 bSMP::op_eor(uint8 x, uint8 y) { - x ^= y; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} - -uint8 bSMP::op_or(uint8 x, uint8 y) { - x |= y; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} - -uint8 bSMP::op_sbc(uint8 x, uint8 y) { -int16 r = x - y - !regs.p.c; - regs.p.n = !!(r & 0x80); - regs.p.v = !!((x ^ y) & (x ^ (uint8)r) & 0x80); - regs.p.h = !((x ^ y ^ (uint8)r) & 0x10); - regs.p.z = ((uint8)r == 0); - regs.p.c = (r >= 0); - return r; -} - -uint16 bSMP::op_subw(uint16 x, uint16 y) { -int16 r; - regs.p.c = 1; - r = op_sbc(x, y); - r |= op_sbc(x >> 8, y >> 8) << 8; - regs.p.z = ((uint16)r == 0); - return r; -} - -uint8 bSMP::op_inc(uint8 x) { - x++; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} - -uint16 bSMP::op_incw(uint16 x) { - x++; - regs.p.n = !!(x & 0x8000); - regs.p.z = (x == 0); - return x; -} - -uint8 bSMP::op_dec(uint8 x) { - x--; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} - -uint16 bSMP::op_decw(uint16 x) { - x--; - regs.p.n = !!(x & 0x8000); - regs.p.z = (x == 0); - return x; -} - -uint8 bSMP::op_asl(uint8 x) { - regs.p.c = !!(x & 0x80); - x <<= 1; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} - -uint8 bSMP::op_lsr(uint8 x) { - regs.p.c = !!(x & 0x01); - x >>= 1; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} - -uint8 bSMP::op_rol(uint8 x) { -uint8 c = regs.p.c; - regs.p.c = !!(x & 0x80); - x <<= 1; - x |= c; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} - -uint8 bSMP::op_ror(uint8 x) { -uint8 c = (regs.p.c)?0x80:0x00; - regs.p.c = !!(x & 0x01); - x >>= 1; - x |= c; - regs.p.n = !!(x & 0x80); - regs.p.z = (x == 0); - return x; -} diff --git a/src/smp/bsmp/core/optable.cpp b/src/smp/bsmp/core/optable.cpp deleted file mode 100644 index 35764629..00000000 --- a/src/smp/bsmp/core/optable.cpp +++ /dev/null @@ -1,256 +0,0 @@ -optbl[0x7d] = &bSMP::op_mov_a_x; -optbl[0xdd] = &bSMP::op_mov_a_y; -optbl[0x5d] = &bSMP::op_mov_x_a; -optbl[0xfd] = &bSMP::op_mov_y_a; -optbl[0x9d] = &bSMP::op_mov_x_sp; -optbl[0xbd] = &bSMP::op_mov_sp_x; -optbl[0xe8] = &bSMP::op_mov_a_const; -optbl[0xcd] = &bSMP::op_mov_x_const; -optbl[0x8d] = &bSMP::op_mov_y_const; -optbl[0xe6] = &bSMP::op_mov_a_ix; -optbl[0xbf] = &bSMP::op_mov_a_ixinc; -optbl[0xe4] = &bSMP::op_mov_a_dp; -optbl[0xf8] = &bSMP::op_mov_x_dp; -optbl[0xeb] = &bSMP::op_mov_y_dp; -optbl[0xf4] = &bSMP::op_mov_a_dpx; -optbl[0xf9] = &bSMP::op_mov_x_dpy; -optbl[0xfb] = &bSMP::op_mov_y_dpx; -optbl[0xe5] = &bSMP::op_mov_a_addr; -optbl[0xe9] = &bSMP::op_mov_x_addr; -optbl[0xec] = &bSMP::op_mov_y_addr; -optbl[0xf5] = &bSMP::op_mov_a_addrx; -optbl[0xf6] = &bSMP::op_mov_a_addry; -optbl[0xe7] = &bSMP::op_mov_a_idpx; -optbl[0xf7] = &bSMP::op_mov_a_idpy; -optbl[0xfa] = &bSMP::op_mov_dp_dp; -optbl[0x8f] = &bSMP::op_mov_dp_const; -optbl[0xc6] = &bSMP::op_mov_ix_a; -optbl[0xaf] = &bSMP::op_mov_ixinc_a; -optbl[0xc4] = &bSMP::op_mov_dp_a; -optbl[0xd8] = &bSMP::op_mov_dp_x; -optbl[0xcb] = &bSMP::op_mov_dp_y; -optbl[0xd4] = &bSMP::op_mov_dpx_a; -optbl[0xd9] = &bSMP::op_mov_dpy_x; -optbl[0xdb] = &bSMP::op_mov_dpx_y; -optbl[0xc5] = &bSMP::op_mov_addr_a; -optbl[0xc9] = &bSMP::op_mov_addr_x; -optbl[0xcc] = &bSMP::op_mov_addr_y; -optbl[0xd5] = &bSMP::op_mov_addrx_a; -optbl[0xd6] = &bSMP::op_mov_addry_a; -optbl[0xc7] = &bSMP::op_mov_idpx_a; -optbl[0xd7] = &bSMP::op_mov_idpy_a; -optbl[0xba] = &bSMP::op_movw_ya_dp; -optbl[0xda] = &bSMP::op_movw_dp_ya; -optbl[0xaa] = &bSMP::op_mov1_c_bit; -optbl[0xca] = &bSMP::op_mov1_bit_c; -optbl[0x2f] = &bSMP::op_bra; -optbl[0xf0] = &bSMP::op_beq; -optbl[0xd0] = &bSMP::op_bne; -optbl[0xb0] = &bSMP::op_bcs; -optbl[0x90] = &bSMP::op_bcc; -optbl[0x70] = &bSMP::op_bvs; -optbl[0x50] = &bSMP::op_bvc; -optbl[0x30] = &bSMP::op_bmi; -optbl[0x10] = &bSMP::op_bpl; -optbl[0x03] = &bSMP::op_bbs0; -optbl[0x13] = &bSMP::op_bbc0; -optbl[0x23] = &bSMP::op_bbs1; -optbl[0x33] = &bSMP::op_bbc1; -optbl[0x43] = &bSMP::op_bbs2; -optbl[0x53] = &bSMP::op_bbc2; -optbl[0x63] = &bSMP::op_bbs3; -optbl[0x73] = &bSMP::op_bbc3; -optbl[0x83] = &bSMP::op_bbs4; -optbl[0x93] = &bSMP::op_bbc4; -optbl[0xa3] = &bSMP::op_bbs5; -optbl[0xb3] = &bSMP::op_bbc5; -optbl[0xc3] = &bSMP::op_bbs6; -optbl[0xd3] = &bSMP::op_bbc6; -optbl[0xe3] = &bSMP::op_bbs7; -optbl[0xf3] = &bSMP::op_bbc7; -optbl[0x2e] = &bSMP::op_cbne_dp; -optbl[0xde] = &bSMP::op_cbne_dpx; -optbl[0x6e] = &bSMP::op_dbnz_dp; -optbl[0xfe] = &bSMP::op_dbnz_y; -optbl[0x5f] = &bSMP::op_jmp_addr; -optbl[0x1f] = &bSMP::op_jmp_iaddrx; -optbl[0x3f] = &bSMP::op_call; -optbl[0x4f] = &bSMP::op_pcall; -optbl[0x01] = &bSMP::op_tcall_0; -optbl[0x11] = &bSMP::op_tcall_1; -optbl[0x21] = &bSMP::op_tcall_2; -optbl[0x31] = &bSMP::op_tcall_3; -optbl[0x41] = &bSMP::op_tcall_4; -optbl[0x51] = &bSMP::op_tcall_5; -optbl[0x61] = &bSMP::op_tcall_6; -optbl[0x71] = &bSMP::op_tcall_7; -optbl[0x81] = &bSMP::op_tcall_8; -optbl[0x91] = &bSMP::op_tcall_9; -optbl[0xa1] = &bSMP::op_tcall_10; -optbl[0xb1] = &bSMP::op_tcall_11; -optbl[0xc1] = &bSMP::op_tcall_12; -optbl[0xd1] = &bSMP::op_tcall_13; -optbl[0xe1] = &bSMP::op_tcall_14; -optbl[0xf1] = &bSMP::op_tcall_15; -optbl[0x0f] = &bSMP::op_brk; -optbl[0x6f] = &bSMP::op_ret; -optbl[0x7f] = &bSMP::op_reti; -optbl[0x88] = &bSMP::op_adc_a_const; -optbl[0x28] = &bSMP::op_and_a_const; -optbl[0x68] = &bSMP::op_cmp_a_const; -optbl[0xc8] = &bSMP::op_cmp_x_const; -optbl[0xad] = &bSMP::op_cmp_y_const; -optbl[0x48] = &bSMP::op_eor_a_const; -optbl[0x08] = &bSMP::op_or_a_const; -optbl[0xa8] = &bSMP::op_sbc_a_const; -optbl[0x86] = &bSMP::op_adc_a_ix; -optbl[0x26] = &bSMP::op_and_a_ix; -optbl[0x66] = &bSMP::op_cmp_a_ix; -optbl[0x46] = &bSMP::op_eor_a_ix; -optbl[0x06] = &bSMP::op_or_a_ix; -optbl[0xa6] = &bSMP::op_sbc_a_ix; -optbl[0x84] = &bSMP::op_adc_a_dp; -optbl[0x24] = &bSMP::op_and_a_dp; -optbl[0x64] = &bSMP::op_cmp_a_dp; -optbl[0x3e] = &bSMP::op_cmp_x_dp; -optbl[0x7e] = &bSMP::op_cmp_y_dp; -optbl[0x44] = &bSMP::op_eor_a_dp; -optbl[0x04] = &bSMP::op_or_a_dp; -optbl[0xa4] = &bSMP::op_sbc_a_dp; -optbl[0x94] = &bSMP::op_adc_a_dpx; -optbl[0x34] = &bSMP::op_and_a_dpx; -optbl[0x74] = &bSMP::op_cmp_a_dpx; -optbl[0x54] = &bSMP::op_eor_a_dpx; -optbl[0x14] = &bSMP::op_or_a_dpx; -optbl[0xb4] = &bSMP::op_sbc_a_dpx; -optbl[0x85] = &bSMP::op_adc_a_addr; -optbl[0x25] = &bSMP::op_and_a_addr; -optbl[0x65] = &bSMP::op_cmp_a_addr; -optbl[0x1e] = &bSMP::op_cmp_x_addr; -optbl[0x5e] = &bSMP::op_cmp_y_addr; -optbl[0x45] = &bSMP::op_eor_a_addr; -optbl[0x05] = &bSMP::op_or_a_addr; -optbl[0xa5] = &bSMP::op_sbc_a_addr; -optbl[0x95] = &bSMP::op_adc_a_addrx; -optbl[0x96] = &bSMP::op_adc_a_addry; -optbl[0x35] = &bSMP::op_and_a_addrx; -optbl[0x36] = &bSMP::op_and_a_addry; -optbl[0x75] = &bSMP::op_cmp_a_addrx; -optbl[0x76] = &bSMP::op_cmp_a_addry; -optbl[0x55] = &bSMP::op_eor_a_addrx; -optbl[0x56] = &bSMP::op_eor_a_addry; -optbl[0x15] = &bSMP::op_or_a_addrx; -optbl[0x16] = &bSMP::op_or_a_addry; -optbl[0xb5] = &bSMP::op_sbc_a_addrx; -optbl[0xb6] = &bSMP::op_sbc_a_addry; -optbl[0x87] = &bSMP::op_adc_a_idpx; -optbl[0x27] = &bSMP::op_and_a_idpx; -optbl[0x67] = &bSMP::op_cmp_a_idpx; -optbl[0x47] = &bSMP::op_eor_a_idpx; -optbl[0x07] = &bSMP::op_or_a_idpx; -optbl[0xa7] = &bSMP::op_sbc_a_idpx; -optbl[0x97] = &bSMP::op_adc_a_idpy; -optbl[0x37] = &bSMP::op_and_a_idpy; -optbl[0x77] = &bSMP::op_cmp_a_idpy; -optbl[0x57] = &bSMP::op_eor_a_idpy; -optbl[0x17] = &bSMP::op_or_a_idpy; -optbl[0xb7] = &bSMP::op_sbc_a_idpy; -optbl[0x99] = &bSMP::op_adc_ix_iy; -optbl[0x39] = &bSMP::op_and_ix_iy; -optbl[0x79] = &bSMP::op_cmp_ix_iy; -optbl[0x59] = &bSMP::op_eor_ix_iy; -optbl[0x19] = &bSMP::op_or_ix_iy; -optbl[0xb9] = &bSMP::op_sbc_ix_iy; -optbl[0x89] = &bSMP::op_adc_dp_dp; -optbl[0x29] = &bSMP::op_and_dp_dp; -optbl[0x69] = &bSMP::op_cmp_dp_dp; -optbl[0x49] = &bSMP::op_eor_dp_dp; -optbl[0x09] = &bSMP::op_or_dp_dp; -optbl[0xa9] = &bSMP::op_sbc_dp_dp; -optbl[0x98] = &bSMP::op_adc_dp_const; -optbl[0x38] = &bSMP::op_and_dp_const; -optbl[0x78] = &bSMP::op_cmp_dp_const; -optbl[0x58] = &bSMP::op_eor_dp_const; -optbl[0x18] = &bSMP::op_or_dp_const; -optbl[0xb8] = &bSMP::op_sbc_dp_const; -optbl[0x7a] = &bSMP::op_addw_ya_dp; -optbl[0x5a] = &bSMP::op_cmpw_ya_dp; -optbl[0x9a] = &bSMP::op_subw_ya_dp; -optbl[0x4a] = &bSMP::op_and1_bit; -optbl[0x6a] = &bSMP::op_and1_notbit; -optbl[0x8a] = &bSMP::op_eor1_bit; -optbl[0xea] = &bSMP::op_not1_bit; -optbl[0x0a] = &bSMP::op_or1_bit; -optbl[0x2a] = &bSMP::op_or1_notbit; -optbl[0xbc] = &bSMP::op_inc_a; -optbl[0x3d] = &bSMP::op_inc_x; -optbl[0xfc] = &bSMP::op_inc_y; -optbl[0x9c] = &bSMP::op_dec_a; -optbl[0x1d] = &bSMP::op_dec_x; -optbl[0xdc] = &bSMP::op_dec_y; -optbl[0x1c] = &bSMP::op_asl_a; -optbl[0x5c] = &bSMP::op_lsr_a; -optbl[0x3c] = &bSMP::op_rol_a; -optbl[0x7c] = &bSMP::op_ror_a; -optbl[0xab] = &bSMP::op_inc_dp; -optbl[0x8b] = &bSMP::op_dec_dp; -optbl[0x0b] = &bSMP::op_asl_dp; -optbl[0x4b] = &bSMP::op_lsr_dp; -optbl[0x2b] = &bSMP::op_rol_dp; -optbl[0x6b] = &bSMP::op_ror_dp; -optbl[0xbb] = &bSMP::op_inc_dpx; -optbl[0x9b] = &bSMP::op_dec_dpx; -optbl[0x1b] = &bSMP::op_asl_dpx; -optbl[0x5b] = &bSMP::op_lsr_dpx; -optbl[0x3b] = &bSMP::op_rol_dpx; -optbl[0x7b] = &bSMP::op_ror_dpx; -optbl[0xac] = &bSMP::op_inc_addr; -optbl[0x8c] = &bSMP::op_dec_addr; -optbl[0x0c] = &bSMP::op_asl_addr; -optbl[0x4c] = &bSMP::op_lsr_addr; -optbl[0x2c] = &bSMP::op_rol_addr; -optbl[0x6c] = &bSMP::op_ror_addr; -optbl[0x3a] = &bSMP::op_incw_dp; -optbl[0x1a] = &bSMP::op_decw_dp; -optbl[0x00] = &bSMP::op_nop; -optbl[0xef] = &bSMP::op_sleep; -optbl[0xff] = &bSMP::op_stop; -optbl[0x9f] = &bSMP::op_xcn; -optbl[0xdf] = &bSMP::op_daa; -optbl[0xbe] = &bSMP::op_das; -optbl[0x60] = &bSMP::op_clrc; -optbl[0x20] = &bSMP::op_clrp; -optbl[0x80] = &bSMP::op_setc; -optbl[0x40] = &bSMP::op_setp; -optbl[0xe0] = &bSMP::op_clrv; -optbl[0xed] = &bSMP::op_notc; -optbl[0xa0] = &bSMP::op_ei; -optbl[0xc0] = &bSMP::op_di; -optbl[0x02] = &bSMP::op_set0_dp; -optbl[0x12] = &bSMP::op_clr0_dp; -optbl[0x22] = &bSMP::op_set1_dp; -optbl[0x32] = &bSMP::op_clr1_dp; -optbl[0x42] = &bSMP::op_set2_dp; -optbl[0x52] = &bSMP::op_clr2_dp; -optbl[0x62] = &bSMP::op_set3_dp; -optbl[0x72] = &bSMP::op_clr3_dp; -optbl[0x82] = &bSMP::op_set4_dp; -optbl[0x92] = &bSMP::op_clr4_dp; -optbl[0xa2] = &bSMP::op_set5_dp; -optbl[0xb2] = &bSMP::op_clr5_dp; -optbl[0xc2] = &bSMP::op_set6_dp; -optbl[0xd2] = &bSMP::op_clr6_dp; -optbl[0xe2] = &bSMP::op_set7_dp; -optbl[0xf2] = &bSMP::op_clr7_dp; -optbl[0x0e] = &bSMP::op_tset_addr_a; -optbl[0x4e] = &bSMP::op_tclr_addr_a; -optbl[0x2d] = &bSMP::op_push_a; -optbl[0x4d] = &bSMP::op_push_x; -optbl[0x6d] = &bSMP::op_push_y; -optbl[0x0d] = &bSMP::op_push_p; -optbl[0xae] = &bSMP::op_pop_a; -optbl[0xce] = &bSMP::op_pop_x; -optbl[0xee] = &bSMP::op_pop_y; -optbl[0x8e] = &bSMP::op_pop_p; -optbl[0xcf] = &bSMP::op_mul_ya; -optbl[0x9e] = &bSMP::op_div_ya_x; diff --git a/src/smp/bsmp/memory/memory.cpp b/src/smp/bsmp/memory/memory.cpp deleted file mode 100644 index 8b196cc1..00000000 --- a/src/smp/bsmp/memory/memory.cpp +++ /dev/null @@ -1,184 +0,0 @@ -uint8 bSMP::ram_read(uint16 addr) { -uint8 r; - if(addr >= 0x00f0 && addr <= 0x00ff) { - switch(addr) { - case 0xf0: //TEST -- operation unknown, supposedly returns 0x00 - r = 0x00; - break; - case 0xf1: //CONTROL -- write-only register, always returns 0x00 - r = 0x00; - break; - case 0xf2: //DSPADDR - r = status.dsp_addr; - break; - case 0xf3: //DSPDATA - //0x80-0xff is a read-only mirror of 0x00-0x7f - r = r_dsp->read(status.dsp_addr & 0x7f); - break; - case 0xf4: //CPUIO0 - case 0xf5: //CPUIO1 - case 0xf6: //CPUIO2 - case 0xf7: //CPUIO3 - r = r_cpu->port_read(addr & 3); - break; - case 0xf8: //??? - case 0xf9: //??? -- Mapped to SPCRAM - r = spcram[addr]; - break; - case 0xfa: //T0TARGET - case 0xfb: //T1TARGET - case 0xfc: //T2TARGET -- write-only registers, always return 0x00 - r = 0x00; - break; - case 0xfd: //T0OUT -- 4-bit counter value - r = t0.stage3_ticks & 15; - t0.stage3_ticks = 0; - break; - case 0xfe: //T1OUT -- 4-bit counter value - r = t1.stage3_ticks & 15; - t1.stage3_ticks = 0; - break; - case 0xff: //T2OUT -- 4-bit counter value - r = t2.stage3_ticks & 15; - t2.stage3_ticks = 0; - break; - } - } else if(addr < 0xffc0) { - r = spcram[addr]; - } else { - if(status.iplrom_enabled == true) { - r = iplrom[addr & 0x3f]; - } else { - r = spcram[addr]; - } - } - - return r; -} - -void bSMP::ram_write(uint16 addr, uint8 value) { - if(addr >= 0x00f0 && addr <= 0x00ff) { - switch(addr) { - case 0xf0: //TEST -- operation unknown - break; - case 0xf1: //CONTROL - status.iplrom_enabled = !!(value & 0x80); - - //one-time clearing of SMP port read registers, - //emulated by simulating CPU writes of 0x00 - if(value & 0x20) { - r_cpu->port_write(2, 0x00); - r_cpu->port_write(3, 0x00); - } - if(value & 0x10) { - r_cpu->port_write(0, 0x00); - r_cpu->port_write(1, 0x00); - } - - //0->1 transistion resets timers - if(t2.enabled == false && (value & 0x04)) { - t2.stage2_ticks = 0; - t2.stage3_ticks = 0; - } - t2.enabled = !!(value & 0x04); - - if(t1.enabled == false && (value & 0x02)) { - t1.stage2_ticks = 0; - t1.stage3_ticks = 0; - } - t1.enabled = !!(value & 0x02); - - if(t0.enabled == false && (value & 0x01)) { - t0.stage2_ticks = 0; - t0.stage3_ticks = 0; - } - t0.enabled = !!(value & 0x01); - break; - case 0xf2: //DSPADDR - status.dsp_addr = value; - break; - case 0xf3: //DSPDATA - //0x80-0xff is a read-only mirror of 0x00-0x7f - if(status.dsp_addr < 0x80) { - r_dsp->write(status.dsp_addr & 0x7f, value); - } - break; - case 0xf4: //CPUIO0 - case 0xf5: //CPUIO1 - case 0xf6: //CPUIO2 - case 0xf7: //CPUIO3 - port_write(addr & 3, value); - break; - case 0xf8: //??? - case 0xf9: //??? - Mapped to SPCRAM - spcram[addr] = value; - break; - case 0xfa: //T0TARGET - t0.target = value; - break; - case 0xfb: //T1TARGET - t1.target = value; - break; - case 0xfc: //T2TARGET - t2.target = value; - break; - case 0xfd: //T0OUT - case 0xfe: //T1OUT - case 0xff: //T2OUT -- read-only registers - break; - } - } else { - //writes to $ffc0-$ffff always go to spcram, - //even if the iplrom is enabled. - spcram[addr] = value; - } -} - -uint8 bSMP::port_read(uint8 port) { - return spcram[0xf4 + (port & 3)]; -} - -void bSMP::port_write(uint8 port, uint8 value) { - spcram[0xf4 + (port & 0x03)] = value; -} - -uint8 bSMP::op_read() { -uint8 r; - r = ram_read(regs.pc); - regs.pc++; - return r; -} - -uint8 bSMP::op_read(uint8 mode, uint16 addr) { -uint8 r; - switch(mode) { - case OPMODE_ADDR: - r = ram_read(addr); - break; - case OPMODE_DP: - r = ram_read(((regs.p.p)?0x100:0x000) + (addr & 0xff)); - break; - } - return r; -} - -void bSMP::op_write(uint8 mode, uint16 addr, uint8 value) { - switch(mode) { - case OPMODE_ADDR: - ram_write(addr, value); - break; - case OPMODE_DP: - ram_write(((regs.p.p)?0x100:0x000) + (addr & 0xff), value); - break; - } -} - -uint8 bSMP::stack_read() { - regs.sp++; - return ram_read(0x0100 | regs.sp); -} - -void bSMP::stack_write(uint8 value) { - ram_write(0x0100 | regs.sp, value); - regs.sp--; -} diff --git a/src/smp/bsmp/memory/memory.h b/src/smp/bsmp/memory/memory.h deleted file mode 100644 index 76865d13..00000000 --- a/src/smp/bsmp/memory/memory.h +++ /dev/null @@ -1,11 +0,0 @@ -enum { OPMODE_ADDR, OPMODE_DP }; - inline uint8 ram_read (uint16 addr); - inline void ram_write(uint16 addr, uint8 value); - inline uint8 port_read (uint8 port); - inline void port_write(uint8 port, uint8 value); - - inline uint8 op_read(); - inline uint8 op_read (uint8 mode, uint16 addr); - inline void op_write(uint8 mode, uint16 addr, uint8 value); - inline uint8 stack_read(); - inline void stack_write(uint8 value); diff --git a/src/smp/bsmp/timing/timing.cpp b/src/smp/bsmp/timing/timing.cpp deleted file mode 100644 index f194d8ef..00000000 --- a/src/smp/bsmp/timing/timing.cpp +++ /dev/null @@ -1,35 +0,0 @@ -void bSMP::add_cycles(int cycles) { - status.clocks_executed += cycles; - - t0.add_cycles(cycles); - t1.add_cycles(cycles); - t2.add_cycles(cycles); -} - -uint32 bSMP::clocks_executed() { -uint32 r = status.clocks_executed; - status.clocks_executed = 0; - return (r << 4) + (r << 3); -} - -//cycles should never be greater than 12. since the minimum -//cycle_frequency value is 16, we don't have to worry about -//two ticks occuring in one call to this function. -void bSMP::bSMPTimer::add_cycles(int cycles) { -//stage 1 increment - stage1_ticks += cycles; - if(stage1_ticks < cycle_frequency)return; - - stage1_ticks -= cycle_frequency; - if(enabled == false)return; - -//stage 2 increment - stage2_ticks++; - - if(stage2_ticks != target)return; - -//stage 3 increment - stage2_ticks = 0; - stage3_ticks++; - stage3_ticks &= 15; -} diff --git a/src/smp/bsmp/timing/timing.h b/src/smp/bsmp/timing/timing.h deleted file mode 100644 index b9caca2b..00000000 --- a/src/smp/bsmp/timing/timing.h +++ /dev/null @@ -1,9 +0,0 @@ -class bSMPTimer { -public: -uint8 cycle_frequency, target; -uint8 stage1_ticks, stage2_ticks, stage3_ticks; -bool enabled; - inline void add_cycles(int cycles); -} t0, t1, t2; - inline void add_cycles(int cycles); - inline uint32 clocks_executed(); diff --git a/src/smp/smp.h b/src/smp/smp.h index 90121b8e..87e12258 100644 --- a/src/smp/smp.h +++ b/src/smp/smp.h @@ -1,6 +1,10 @@ #include "smpregs.h" class SMP { +public: +thread_t thread; + virtual void enter() = 0; + public: SMPRegs regs; uint8 spcram[65536]; @@ -17,9 +21,6 @@ static const uint8 iplrom[64]; virtual void port_write(uint8 port, uint8 value) = 0; virtual uint8 *get_spcram_handle() { return spcram; } - virtual void main() {} - virtual void run() = 0; - virtual uint32 clocks_executed() = 0; virtual void power() = 0; virtual void reset() = 0; diff --git a/src/smp/ssmp/core/core.cpp b/src/smp/ssmp/core/core.cpp index 6de48c49..23a3dce9 100644 --- a/src/smp/ssmp/core/core.cpp +++ b/src/smp/ssmp/core/core.cpp @@ -1,6 +1,6 @@ #include "opfn.cpp" -void sSMP::main() { +void sSMP::enter() { for(;;) { tracer.trace_smpop(); //traces SMP opcode (only if tracer is enabled) @@ -15,9 +15,5 @@ void sSMP::main() { } status.in_opcode = false; - - #ifdef FAVOR_SPEED - co_return(); - #endif } } diff --git a/src/smp/ssmp/memory/memory.cpp b/src/smp/ssmp/memory/memory.cpp index 855d770d..6cbe5abd 100644 --- a/src/smp/ssmp/memory/memory.cpp +++ b/src/smp/ssmp/memory/memory.cpp @@ -25,10 +25,7 @@ alwaysinline uint8 sSMP::op_busread(uint16 addr) { uint8 r; if((addr & 0xfff0) == 0x00f0) { //addr >= 0x00f0 && addr <= 0x00ff - - #ifdef FAVOR_SPEED - co_return(); - #endif + scheduler.sync_smpcpu(); switch(addr) { @@ -99,10 +96,7 @@ uint8 r; alwaysinline void sSMP::op_buswrite(uint16 addr, uint8 data) { if((addr & 0xfff0) == 0x00f0) { //addr >= 0x00f0 && addr >= 0x00ff - - #ifdef FAVOR_SPEED - co_return(); - #endif + scheduler.sync_smpcpu(); if(status.mmio_disabled == true)return; @@ -208,25 +202,48 @@ alwaysinline void sSMP::op_buswrite(uint16 addr, uint8 data) { // -alwaysinline void sSMP::op_io() { +void sSMP::op_io() { add_clocks(status.clock_speed); -//co_return(); } -alwaysinline uint8 sSMP::op_read(uint16 addr) { +uint8 sSMP::op_read(uint16 addr) { add_clocks(status.clock_speed >> 1); -#ifdef FAVOR_ACCURACY - co_return(); -#endif uint8 r = op_busread(addr); add_clocks(status.clock_speed >> 1); return r; } -alwaysinline void sSMP::op_write(uint16 addr, uint8 data) { +void sSMP::op_write(uint16 addr, uint8 data) { add_clocks(status.clock_speed); -#ifdef FAVOR_ACCURACY - co_return(); -#endif op_buswrite(addr, data); } + +// + +alwaysinline uint8 sSMP::op_readpc() { + return op_read(regs.pc++); +} + +alwaysinline uint8 sSMP::op_readstack() { + return op_read(0x0100 | ++regs.sp); +} + +alwaysinline void sSMP::op_writestack(uint8 data) { + op_write(0x0100 | regs.sp--, data); +} + +alwaysinline uint8 sSMP::op_readaddr(uint16 addr) { + return op_read(addr); +} + +alwaysinline void sSMP::op_writeaddr(uint16 addr, uint8 data) { + op_write(addr, data); +} + +alwaysinline uint8 sSMP::op_readdp(uint8 addr) { + return op_read(((uint)regs.p.p << 8) + addr); +} + +alwaysinline void sSMP::op_writedp(uint8 addr, uint8 data) { + op_write(((uint)regs.p.p << 8) + addr, data); +} diff --git a/src/smp/ssmp/memory/memory.h b/src/smp/ssmp/memory/memory.h index 1adbdcde..ca6e1f8d 100644 --- a/src/smp/ssmp/memory/memory.h +++ b/src/smp/ssmp/memory/memory.h @@ -17,13 +17,13 @@ /***** * helper memory addressing functions used by SMP core *****/ - uint8 op_readpc () { return op_read(regs.pc++); } + uint8 op_readpc (); - uint8 op_readstack () { return op_read(0x0100 | ++regs.sp); } - void op_writestack(uint8 data) { op_write(0x0100 | regs.sp--, data); } + uint8 op_readstack (); + void op_writestack(uint8 data); - uint8 op_readaddr (uint16 addr) { return op_read(addr); } - void op_writeaddr (uint16 addr, uint8 data) { op_write(addr, data); } + uint8 op_readaddr (uint16 addr); + void op_writeaddr (uint16 addr, uint8 data); - uint8 op_readdp (uint8 addr) { return op_read(((uint)regs.p.p << 8) + addr); } - void op_writedp (uint8 addr, uint8 data) { op_write(((uint)regs.p.p << 8) + addr, data); } + uint8 op_readdp (uint8 addr); + void op_writedp (uint8 addr, uint8 data); diff --git a/src/smp/ssmp/ssmp.cpp b/src/smp/ssmp/ssmp.cpp index 35a1473a..e6abd3d5 100644 --- a/src/smp/ssmp/ssmp.cpp +++ b/src/smp/ssmp/ssmp.cpp @@ -4,14 +4,6 @@ #include "memory/memory.cpp" #include "timing/timing.cpp" -void ssmp_entry_point() { - r_smp->main(); -} - -void sSMP::run() { - co_call(thread); -} - void sSMP::power() { //for(int i = 0; i < 65536; i += 64) { // memset(spcram + i, 0x00, 32); @@ -29,9 +21,6 @@ void sSMP::power() { } void sSMP::reset() { - if(thread)co_delete(thread); - thread = co_create(ssmp_entry_point, 65536); - regs.pc = 0xffc0; regs.a = 0x00; regs.x = 0x00; @@ -39,7 +28,8 @@ void sSMP::reset() { regs.sp = 0xef; regs.p = 0x02; - status.clocks_executed = 0; + status.clock_counter = 0; + status.dsp_counter = 0; //$00f0 status.clock_speed = 24 * 3 / 3; @@ -69,10 +59,5 @@ void sSMP::reset() { t2.stage3_ticks = 0; } -sSMP::sSMP() { - thread = 0; -} - -sSMP::~sSMP() { - if(thread)co_delete(thread); -} +sSMP::sSMP() {} +sSMP::~sSMP() {} diff --git a/src/smp/ssmp/ssmp.h b/src/smp/ssmp/ssmp.h index b614b3c1..74261d80 100644 --- a/src/smp/ssmp/ssmp.h +++ b/src/smp/ssmp/ssmp.h @@ -1,18 +1,19 @@ class sSMP : public SMP { +public: + void enter(); + public: #include "core/core.h" #include "memory/memory.h" #include "timing/timing.h" -thread_t thread; - struct { uint8 opcode; bool in_opcode; //timing - uint32 clocks_executed; uint32 clock_counter; + uint32 dsp_counter; //$00f0 uint8 clock_speed; @@ -27,9 +28,6 @@ struct { } status; //ssmp.cpp - void main(); - - void run(); void power(); void reset(); diff --git a/src/smp/ssmp/timing/timing.cpp b/src/smp/ssmp/timing/timing.cpp index f62b8902..6da21668 100644 --- a/src/smp/ssmp/timing/timing.cpp +++ b/src/smp/ssmp/timing/timing.cpp @@ -1,6 +1,7 @@ -inline void sSMP::add_clocks(uint clocks) { - status.clocks_executed += clocks; - status.clock_counter += clocks; +alwaysinline void sSMP::add_clocks(uint clocks) { + scheduler.addclocks_smp(clocks); + + status.clock_counter += clocks; //update timers while(status.clock_counter >= 24) { @@ -8,11 +9,12 @@ inline void sSMP::add_clocks(uint clocks) { t0.tick(); t1.tick(); t2.tick(); + + //24 * 32 = 768 clocks/DSP tick + //1024000 / 768 = 32000 DSP ticks/second + if(++status.dsp_counter == 32) { + status.dsp_counter = 0; + snes->audio_update(r_dsp->run()); + } } } - -inline uint32 sSMP::clocks_executed() { -uint32 r = status.clocks_executed; - status.clocks_executed = 0; - return r; -} diff --git a/src/snes/scheduler/scheduler.cpp b/src/snes/scheduler/scheduler.cpp new file mode 100644 index 00000000..385d1193 --- /dev/null +++ b/src/snes/scheduler/scheduler.cpp @@ -0,0 +1,49 @@ +Scheduler scheduler; + +// + +void threadentry_cpu() { r_cpu->enter(); } +void threadentry_smp() { r_smp->enter(); } + +// + +void Scheduler::enter() { + switch(clock.active) { + case THREAD_CPU: + co_jump(thread_cpu); + break; + case THREAD_SMP: + co_jump(thread_smp); + break; + } +} + +void Scheduler::exit() { + co_jump(thread_snes); +} + +void Scheduler::init() { + clock.cpu_freq = snes->region() == SNES::NTSC ? + config::cpu.ntsc_clock_rate : + config::cpu.pal_clock_rate; + clock.smp_freq = snes->region() == SNES::NTSC ? + config::smp.ntsc_clock_rate : + config::smp.pal_clock_rate; + + clock.active = THREAD_CPU; + clock.cpusmp = 0; + + if(thread_cpu)co_delete(thread_cpu); + if(thread_smp)co_delete(thread_smp); + + thread_cpu = co_create(threadentry_cpu, 65536); + thread_smp = co_create(threadentry_smp, 65536); +} + +// + +Scheduler::Scheduler() { + thread_snes = co_active(); + thread_cpu = 0; + thread_smp = 0; +} diff --git a/src/snes/scheduler/scheduler.h b/src/snes/scheduler/scheduler.h new file mode 100644 index 00000000..6b55170d --- /dev/null +++ b/src/snes/scheduler/scheduler.h @@ -0,0 +1,52 @@ +class Scheduler { +public: + +thread_t thread_snes; +thread_t thread_cpu; +thread_t thread_smp; + +enum ActiveThread { + THREAD_CPU, + THREAD_SMP, +}; + +struct { + uint cpu_freq; + uint smp_freq; + + ActiveThread active; + int64 cpusmp; +} clock; + + alwaysinline void sync_cpusmp() { + if(clock.cpusmp < 0) { + clock.active = THREAD_SMP; + co_jump(thread_smp); + } + } + + alwaysinline void sync_smpcpu() { + if(clock.cpusmp >= 0) { + clock.active = THREAD_CPU; + co_jump(thread_cpu); + } + } + + alwaysinline void addclocks_cpu(uint clocks) { + clock.cpusmp -= clocks * (uint64)clock.smp_freq; + if(clock.cpusmp < -(275000 * (int64)24000000))sync_cpusmp(); + } + + alwaysinline void addclocks_smp(uint clocks) { + clock.cpusmp += clocks * (uint64)clock.cpu_freq; + if(clock.cpusmp > +(275000 * (int64)24000000))sync_smpcpu(); + } + + void enter(); + void exit(); + void init(); + + Scheduler(); +}; + +extern Scheduler scheduler; diff --git a/src/snes/snes.cpp b/src/snes/snes.cpp index 47522fae..56b4ca81 100644 --- a/src/snes/snes.cpp +++ b/src/snes/snes.cpp @@ -2,37 +2,17 @@ SNES *snes; +#include "scheduler/scheduler.cpp" #include "tracer/tracer.cpp" -#include "video/filter.cpp" #include "video/video.cpp" #include "audio/audio.cpp" #include "input/input.cpp" -void SNES::run() { - if(sync.counter <= 0) { - r_cpu->run(); - uint32 clocks = r_cpu->clocks_executed(); - sync.counter += sync.apu_multbl[clocks]; - } else { - r_smp->run(); - uint32 clocks = r_smp->clocks_executed(); - sync.counter -= sync.cpu_multbl[clocks]; - //1024000(SPC700) / 32000(DSP) = 32spc/dsp ticks - //24576000(Sound clock crystal) / 32000(DSP) = 768crystal/dsp ticks - sync.dsp_counter += clocks; - while(sync.dsp_counter >= 768) { - sync.dsp_counter -= 768; - audio_update(r_dsp->run()); - } - } -} +void SNES::run() {} void SNES::runtoframe() { - while(r_ppu->status.frame_executed == false) { - SNES::run(); - } - r_ppu->status.frame_executed = false; + scheduler.enter(); } void SNES::init() { @@ -60,6 +40,8 @@ void SNES::term() { } void SNES::power() { + scheduler.init(); + r_cpu->power(); r_smp->power(); r_dsp->power(); @@ -92,8 +74,7 @@ void SNES::power() { } void SNES::reset() { - sync.counter = -sync.cpu_multbl[32]; - sync.dsp_counter = 0; + scheduler.init(); r_cpu->reset(); r_smp->reset(); @@ -118,6 +99,7 @@ void SNES::scanline() { //video output seem more responsive to controller input if(r_cpu->vcounter() == 241) { video_update(); + scheduler.exit(); } } @@ -135,36 +117,8 @@ void SNES::set_region(uint8 new_region) { } else { alert("Unsupported region : %0.2x", new_region); } - - update_timing(); } uint8 SNES::region() { return snes_region; } -/***** - * Timing - * - * Note: Stock PAL CPU speed is currently unknown. - * It is thought to be 21281370hz, but this causes - * sound errors in certain games. Therefore, the PAL - * CPU is currently clocked 40000hz slower, at - * 21241370hz. - *****/ - -void SNES::update_timing() { - sync.counter = 0; - sync.dsp_counter = 0; - - sync.cpu_freq = (snes_region == NTSC) ? config::cpu.ntsc_clock_rate : config::cpu.pal_clock_rate; - sync.apu_freq = (snes_region == NTSC) ? config::smp.ntsc_clock_rate : config::smp.pal_clock_rate; - - for(int64 i = 0; i < 1024; i++) { - sync.cpu_multbl[i] = i * sync.cpu_freq; - sync.apu_multbl[i] = i * sync.apu_freq; - } -} - -SNES::SNES() { - snes_region = NTSC; - update_timing(); -} +SNES::SNES() {} diff --git a/src/snes/snes.h b/src/snes/snes.h index 405c4b16..58bedad3 100644 --- a/src/snes/snes.h +++ b/src/snes/snes.h @@ -1,3 +1,4 @@ +#include "scheduler/scheduler.h" #include "tracer/tracer.h" class VideoFilter; @@ -6,15 +7,6 @@ class SNES { protected: uint8 snes_region; -//CPU<>APU synchronization -struct { - int64 counter, dsp_counter; - int64 cpu_freq, apu_freq; - int64 cpu_multbl[1024], apu_multbl[1024]; -} sync; - - void update_timing(); - public: enum { NTSC = 0, PAL = 1 }; diff --git a/src/snes/video/video.cpp b/src/snes/video/video.cpp index c38583b0..4de5d70b 100644 --- a/src/snes/video/video.cpp +++ b/src/snes/video/video.cpp @@ -1,3 +1,5 @@ +#include "filter.cpp" + void SNES::set_video_format(uint filter, uint video_standard, uint pixel_format) { //only make changes at the start of a new frame video_format.filter = filter; diff --git a/src/ui/Makefile b/src/ui/Makefile index abe49a2f..247f2bcf 100644 --- a/src/ui/Makefile +++ b/src/ui/Makefile @@ -118,10 +118,10 @@ OBJS = main.$(OBJ) \ bdsp.$(OBJ) \ ppu.$(OBJ) bppu.$(OBJ) \ snes.$(OBJ) \ - srtc.$(OBJ) sdd1.$(OBJ) c4.$(OBJ) dsp1.$(OBJ) dsp2.$(OBJ) obc1.$(OBJ) \ - adler32.$(OBJ) compress.$(OBJ) crc32.$(OBJ) deflate.$(OBJ) gzio.$(OBJ) inffast.$(OBJ) \ - inflate.$(OBJ) inftrees.$(OBJ) ioapi.$(OBJ) trees.$(OBJ) unzip.$(OBJ) zip.$(OBJ) zutil.$(OBJ) \ - jma.$(OBJ) jcrc32.$(OBJ) lzmadec.$(OBJ) 7zlzma.$(OBJ) iiostrm.$(OBJ) inbyte.$(OBJ) lzma.$(OBJ) winout.$(OBJ) + srtc.$(OBJ) sdd1.$(OBJ) c4.$(OBJ) dsp1.$(OBJ) dsp2.$(OBJ) obc1.$(OBJ) +# adler32.$(OBJ) compress.$(OBJ) crc32.$(OBJ) deflate.$(OBJ) gzio.$(OBJ) inffast.$(OBJ) \ +# inflate.$(OBJ) inftrees.$(OBJ) ioapi.$(OBJ) trees.$(OBJ) unzip.$(OBJ) zip.$(OBJ) zutil.$(OBJ) \ +# jma.$(OBJ) jcrc32.$(OBJ) lzmadec.$(OBJ) 7zlzma.$(OBJ) iiostrm.$(OBJ) inbyte.$(OBJ) lzma.$(OBJ) winout.$(OBJ) ifeq ($(OS),win) ifeq ($(CC),cl) @@ -182,9 +182,6 @@ cpu.$(OBJ): ../cpu/* scpu.$(OBJ): ../cpu/scpu/* ../cpu/scpu/core/* ../cpu/scpu/dma/* ../cpu/scpu/memory/* ../cpu/scpu/mmio/* ../cpu/scpu/timing/* $(CXX) $(CFLAGS) $(COBJFLAG) ../cpu/scpu/scpu.cpp -bcpu.$(OBJ): ../cpu/bcpu/* - $(CXX) $(CFLAGS) $(COBJFLAG) ../cpu/bcpu/bcpu.cpp - ########### ### smp ### ########### @@ -194,9 +191,6 @@ smp.$(OBJ): ../smp/* ssmp.$(OBJ): ../smp/ssmp/* ../smp/ssmp/core/* ../smp/ssmp/memory/* ../smp/ssmp/timing/* $(CXX) $(CFLAGS) $(COBJFLAG) ../smp/ssmp/ssmp.cpp -bsmp.$(OBJ): ../smp/bsmp/* - $(CXX) $(CFLAGS) $(COBJFLAG) ../smp/bsmp/bsmp.cpp - ########### ### dsp ### ########### diff --git a/src/ui/cc.bat b/src/ui/cc.bat index 2dcd14b0..e6e3ce31 100644 --- a/src/ui/cc.bat +++ b/src/ui/cc.bat @@ -1,3 +1,3 @@ -@make PLATFORM=win-visualc +@make PLATFORM=win-visualc-wip @move bsnes.exe ../../bsnes.exe>nul @pause \ No newline at end of file