From 8d8b9d1d848c1ff8317336bdbc530d40ee73e066 Mon Sep 17 00:00:00 2001 From: Paul Gardner-Stephen Date: Thu, 27 Dec 2018 11:20:49 +1030 Subject: [PATCH 1/5] add support for additional CPU types detected by CC65 --- main.c | 5 ++++- synthmark64.prg | Bin 10711 -> 10903 bytes 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index d5ae5db..7f04f77 100644 --- a/main.c +++ b/main.c @@ -15,6 +15,9 @@ unsigned char c128turbo = 0; unsigned char scpumode = 1; // default, none, full unsigned char *ptr; +int count_cpu_names=9; +char *cpu_names[]={"6502 ","65C02","65816","4510 ","65SC*","65CE*","HUC6*","2A0X ","45GS*"}; + void teststart(void) { ptr = (unsigned char*)0xe000; @@ -637,7 +640,7 @@ void menu (void) revers(1); //1234567890123456789012345678901234567890 gotoxy(0,0); cprintf(" SynthMark64 v0.2"); gotoxy(0,24); cprintf("CPU %s, RAM %5d KB (%3d BANKS) %s", - cpu_type == CPU_65816 ? "65816" : cpu_type == CPU_65C02 ? "65C02" : "6502 ", + cpu_type < count_cpu_names ? cpu_names[cpu_type] : "?????", ram_banks * 64, ram_banks, vic_pal ? "PAL " : "NTSC"); revers(0); while (1) { diff --git a/synthmark64.prg b/synthmark64.prg index 625c83b250bc241db98cc07bee5442ef4bc0f82f..2422c101152c08cb991388b78cfa76300e3f3e95 100644 GIT binary patch literal 10903 zcmd^F4{#J!n(yhE$)BD~GBYG$2tr;5XYvnbh9_XO+*$((PSz%&lAx%o+gD34@y{*z z-xUQR9mcs#%y{J;p8wh|Cek@Omz?L;YOQr3OPoP*8>1e3$JKJK83SmlJ#@n=lKWow zObD0(T&b(8x~cHq*YADr`@Z*mzxTb@uQBD=avbItaA4VDilSnsNGq;9nVTh;-so9_ z(I$)v7NLYEh&Zn_=gk}N)AWAF$#$W4U=99r@;#4cQXeYTlQ>1#5M_+hlYFCs_FoSmV(;Sg<%chMq_izqJRXl`VD;1Y^ znv|mf&5VA@Dq{gHN3?Z2Rp3;P1vIN@>JF$9rHlp=v|82un5rBPs5#vas^T8*k2&y= zFd2`#;j#MxRqX73RqfuaikrLbhZoup_v9ZIC%dhOyDf)hR-DtFe;83m;7_E0RIG<1 z_hQ9zIC2j*O!ynt&`N<;LuWqd)YYZr&IRMdWt}GRT97JwK(6QnQR3r3c06_(3)Nx5jaTBKzvO2?zLXda>y*{U@Jl{$DExNiX5nAMf-?lAS5#thfW2>h8f zbKel1sV6=}hoV^`Em5)w-RI%9I{oPr2{jfFm1luX%hU z1_$xzYp+P{FoI)(s1z995eK~)EI&qkp*#5=4>!+7oLo?Gu9T?|-6iir_XH4rcEMDv>zb2D_mL7zatoScR2dnMHrFN^**FSShAa?z4rrB(pKv}ID1FG9=A z9uqBKuT1F%XI?-**nt^f6v+gL3+4$+I!}1*!~x}cp7=o_8NXB^@#d#Ok_o^!5|Bt# zr1FsxOlbxf(rxiCI^ApIWs=HsbOA+EayGyyfEZSW=+d^ z=lE{Mo`%U_xWU}to*9Ne*tZ!#dI^$XiHmsTJOKXwNV;U{uzJ=7Q2qc(hm|IG2MX@! zQ2&?k{r07_>XIS**1}8Zt4kKa6KSj9j4{&|3n%fGVlj0nL+(n*A+%r#qm>n~wT)yt zl>JlYL>bHK%Z5X*n2o{}B83Jsh?ve6zDPciib2{3k#OFI1Mm|?sfCkyYQEWLPtAPc zsXh6BVQTA&jj4$Yx@w`AlRg{fo_#ia!!1G!IUAlGI12>s?4H!T(ZLMSkS`*jxfd5u z!getMHN?d%84)61L?o;iXA@z&7@G`nDUgBN^_SV@vmq8D!*zP3Lo!8P>+(^1wPcpZ zkW>Zq8y-0e)p_N7?iw!vejW)~{tz8^(%L4`K0QF|(6bey9-RWCS)@8GomMf21dJ>g zG`~_TAoamYAYm=8L+@1TXUt69^;NLx$uCKZj5W8F$bljYt@Vlyu$kCPq1I~h_75-m zC|)jCpi$4cZEnd=1i(oT<|gN%i7IyoB{1QR#exlnG5|7WN&^v&wq)YY9%2L+urpp) zp9_8BMsK;fc@<(2af>sBWVntXHxhQeN!j$Ws==O>XTF;&cc;_NT+I5loRZ|q+2WPOtGQ`B4jArI8FA*I^*!5Va z(NPF(KO7V$^qdiU*?m^njmOTJAOo;?u39W2xXCU@b)&EXKn6BgX$ZT{0C#F!+hr2< z(hPHxDUpdX@hAgVSTJ+)ik@}=z{#!Si2^LWU#^u*moU9k#Y*zr!PDSq(ueoj$}gZ8rttfg2VI{dP0Am`nnO?KAn!sEmM%f zpoJCvDw76^a-d0_A|@H^8>kGVU>Np=Z9c7bq`?815H%a7_=2nIm-pYxz7$zFz|l}`g& zw)|_!&#js-ziK2aW(tocFhhnrq;mNmb(Q2UH(TBV+>gwc-%O=8!mTq}2%}%}5#eyp zYcTGdfia6PIt@m+B{moj%)ppK82{T)4R^%Z@-INOrPR10&X#|sKgqYBYY0PzU9ZcB z91l75D-Rq#=!9M4V51kbf<%{AoY=0-ON6w`xtr(1v>Hs2u>c{D5%QQ$9wp>aLXIB~ z5S?Z~-p%v7kCUb|k)tY%TV*pRv$83Y4DiTT9)VT*6pOZ&LY7AHd1zoR_fn}uzqz~g zX=)5^&?Wjc>iONJgrxqT|CFDz0IYDcK@?yY4i+FZ}(fxcW8J|8`2vj;kk=r`2Pz(*!z@VBAT! zN+;*=$`%}X1fz$`Y1?ktNjTw~?5hbJq8qV@G+>Y4j-$T86_6nD)=*%gAjYYwSOy5^D( zO(k*o8!Cygn3QEW<`$UP9LRCtEzOqjXyC-Jl5^BAcDUQzg1Z;oS2M~8d9gX8How^?WvsEeQ92YWA%%?;3@PBO6pH0VX@oF3!1k*)$@=E~_~~N!OvWcXYVMGml;AM* zA1rsGOr|8;^PBK~$JfxYNVWEC!rGifH4u+t&5=MrJchOG!~!+9XETOj+(Qc_lnAI< z{qQj4?%9G9Rfar>)}94uL0RN++_M#TZ^PZ47=-%NxjN@GwlSS;8}88=ZU%)xttio| zITJt8auV-qmISBT&xj zP#3|T0OryXQowv#s_yB+$Xd438nC_6g|)2i5D7iJE%lX=L5*q=K^N0SJYNFG5mJCt z5>0A340~lW)@BF0TvnIWVzt`0VS6XYkOSzi%G%-BWyn~q!sT?2fXBc+@>;b#(W2%N z+nyt~5+!R?8~U0Bov-RT*Mgyk)XJa&!WmtbdM>az zc>(vlh!w+-qJeGrvlp<^iFbYeA|A}@c>#C7h-;L`@#in#eq}2rt!A0(Z>Z?_wxr0Uo$qUpF2+;3b4;;hriDqJ8D<2}-jGE*YUd z@32dq;A6w;?AW_Ot4QB4Rkx8Wu8Y7RVgYIM`>|1nRZ#3S5!kdo7iJQ0dAaqfu{scZF(2 zzk+Xbog=(ku4p?b9PBkG-zVe=;RHDE%j8FV<>tg=szts{J&=2?n%Ftg_mP`hT48;A z=LlHe1=jOBX_X!}57T^%Cb^LAHSxn{{lPr_!7}|JEBzo-B?(jS&C8D^OxoSDRib_> zn~x=|+9Q(XwQrsem&3A`CxvfdCZ~kcGA(?2?4Q4Bm=q?V+Bd1uY7W|5E}Ox@q=w@r zFInCUmp}atNf-J?ep1ebBk7?8qrs;q?Q%I=MN(GTF}39Q)yGQ`wC375AyHiu6BB(C zofGip^|1_hFFaaYEqp|Z5$->|5=9a?IcxSOVXjFyZ5nmWs8!AV#G+X`CUZ^v>TerJ zWpwcn9Q{n1q%|x2GedjQ%!_7-55NeDEGQ%jutLiwelQDZlicOUIBn7Zqg$jl(s98B zknWGiEF0mnDju^!WsSMGZJu)=uX9AxJV036LDdk{a9$QHP>|y>*>?cvseA#_;YCj< zh(qBZg%fRq_hq3-C=_OiXl2p*!u7N6SZ`f#S#Mj<^v-s-@dOg^kfIsAG453u*9r-4aUGSHk1d+w{mmLO0v8Kig1)}4@GHS zaFP8bugfmvcNL%?Rg))hI**oB_E~qjb~EZ#F^kn^WmM;pEvj9#z5aWDG%w^h$qiSA z9rNTxaH7mh=0SAq`dXN%Ak*ZYsssTt6%>(7k@mj0)xq2<5t|S9zhFz~G{IK(a zV91c_??tLTnx~oJ2oTHfD@geZ9j-)Fl|D&gT+AXkVphRP@DLXmaGZ^J&q4|-ga%w_ z2NxEJXiA~i?k)5d1^4C0?4t#-!cj-8Xw=yYJnf_4Q)mA z1cA@%v-45%YOAF2i`OM2v+rX*+XDk9#5Ji zO3Tr^vMc%tL9c9`1m{Xeug%@Y^n(Pa;0&*K-m%^hQjhn?96WTHp-XT0iZl>M!U}oLXZ530Rn}p?r5+UNk>Gl;38L z=8rdH&AHPBw>Ja~oi2En=k_ifZ^7y@eTr~u;c#RXCVtc3yJ2gjWe%Jp<0!4KzujdD zhX+={8Fd5v?d^?{ZCc&hu&Uu^P}bC_ z3%F%?snPx04?aRGYg<~;s;0X7ik8Y$?-fSx-o?1)Ot;bZ{=N@BeE+>$QA=xWb1Pb2 z-?$>U3Z_Z@WX-D8#7%W*d2=l^*0)eAKqhKvL^szrH?6L{t{xh=re>J*Dj40=Tu-Gt zQjaUwG_D{fq7}6qM~0`lS2f)*eK6NlTQ{w@dDV?)BlqrhcimT>WR7;df@xd8m}8DSa2x{~b|`{-bC3eTQ|%1`}yD zPnq`lUAAjWb99c=zO}X^K7;#Z-`%;pZ#C$3z7x6E zmKyYfzN5@t6$br|?=u){&^^9TUYh=muf(3F|J^q?KP~fPpOU{}w!y!{cX>gY)_l)S z(Ki3j9FB5>XP@sQ$F-#v-L{bL9%q{Vl`r3wra$nZSx0<^{f++L%u2V{`I`&V^o{

LhFrpINf^>>87lQ4NlkmkHbKYs(f4WESlQ5EPeGkmytf0EmP{|Bm6 Bjbi`+ literal 10711 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 From 5b08b5ce9e79a9eb83052ea230d68674e36a8ca1 Mon Sep 17 00:00:00 2001 From: Paul Gardner-Stephen Date: Thu, 27 Dec 2018 11:31:03 +1030 Subject: [PATCH 2/5] add support for toggling M65 turbo mode --- main.c | 17 ++++++++++++++++- synthmark64.prg | Bin 10903 -> 11011 bytes 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 7f04f77..5705dae 100644 --- a/main.c +++ b/main.c @@ -12,6 +12,7 @@ unsigned char vic_pal = 0; unsigned char screenoff = 0; unsigned char dtvturbo = 0; unsigned char c128turbo = 0; +unsigned char m65turbo = 0; unsigned char scpumode = 1; // default, none, full unsigned char *ptr; @@ -73,6 +74,16 @@ unsigned int dotest(void) asm("ldy #$01"); asm("sty $d030"); } + + if (cpu_type == CPU_45GS02) { + if (m65turbo) { + asm("ldy #65"); + asm("sty $0"); + } else { + asm("ldy #64"); + asm("sty $0"); + } + } if (cpu_type == CPU_65816) { // scpumode @@ -648,7 +659,8 @@ void menu (void) gotoxy(1,4); cprintf("[F3] use C128 fast mode: %s", c128turbo ? "yes" : "no "); gotoxy(1,6); cprintf("[F5] use DTV fast mode(s): %s", dtvturbo ? "yes" : "no "); gotoxy(1,8); cprintf("[F7] use SCPU optimization: %s", scpumode == 0 ? "default" : scpumode == 1 ? "none " : "full "); - gotoxy(1,10); cprintf("[RETURN] start benchmark"); + gotoxy(1,10); cprintf("[F8] use MEGA65 fast mode: %s", m65turbo ? "yes" : "no "); + gotoxy(1,12); cprintf("[RETURN] start benchmark"); ch = cgetc(); if (ch == 0x0d) { break; @@ -672,6 +684,9 @@ void menu (void) scpumode = 0; } break; + case 0x8c: + m65turbo ^= 1; + break; } } while (kbhit()) { diff --git a/synthmark64.prg b/synthmark64.prg index 2422c101152c08cb991388b78cfa76300e3f3e95..79ed1b106fcb0fff0fb70fa265a7df9ef0db7214 100644 GIT binary patch literal 11011 zcmd^F3sf9cny#+yhNk*K(?HS?liVf(%_DSkNg|GW){sDiu@V>_CO)@jSF+&v7-u}L z?s!aQhC-I5k=EncICGp+)}}cr)?&cX(aesThaufDF*n9Xb{93{nIK6FmXl~uqwIgH zx(SJN64#tPd(PH@`~2^J|NH;n{qJA5+GMla+~(il;IeXtVIro`He58BmLi(|(7PR@ zag1(RjOG;7q9+UFoR@asC)hpi$u_ZXa6A6h;5OW866C`Q6B@<6?_xoH7mIdv6pNf9 zNKBX$c)@l|%^*b^wMqU*@gkWN&|eoS%$6`4^`~#7;^OH8H#7stY8&rGlCsIex??}%EB5mk#j+Qz{dtIZ_RF8GE$1wT_0~$EsyC^d2_kI^;7%VL%ir2uoZrr#@Yr?>vxLTGnBbmIGHQANWcc zz)JeLF&{d;aGm-d9(*4Q0{UU0@^d*2WtK{;!i3pqn3c@KY%G;nyC5S&w}DOvLANQL zsor)|pK09Cw}L>)DYN$tv&nj*!)#YLMPg+}F`@1G{1a(1)6L)G2Pw{--fT=i-e=|~ zIb#-YyBTH&L1&*-;s56XCE?hYY#E!9btps0dSHme4j8M>;*3=r)1ntj6sPQi4773v z{adke#(UQ&4vpeI^TfLtNCk9Vp~P%5jAH_;q#N3ih6<8MevIluSMn?QJhs#6ZtJ(Z5mndoOF<$tMH{^B8^Lc~2)U7q3zfj;zRNhRcXEb8}9c?&_ZLwa}8$! z!=2j`UpHFt9SoXwX$GZamts(ZUBr?UA<89K!g^^kQL;;s$zT@;8K_-!cga64PPnuu3*+FuGyTkBX#pnlC7ZBJ9Q6k+)cnF_U#aRt$%pG9fQE_S}BD@gPY- zkpjsLGE;dO^mGY*`-c~Ol$wX7?OY;Dr_NHpe+t9<;4D&D zhPh}4rcL#+D9W`vPc+WArQ9UplWB?XNOQdXyo904PeFSy@ z@YrCGvS4qe&m$=cJ(rARBfk`sbYZh2O;#eq`RjmN3i9^Di#m{AA*R-5#HR2@(!b zI;D_qJ~&_Fo39wXS%8+?X7Zk~G;18c=>_O|n>?j_0DBHSYC}IQm0;_ZCK&}friXy8 z`0g-=GIQgqp_^Vm9%kqVJ?I}GXg1Tq?vKOrU#~zvwdsUr{;4bYH|L`j1$y-~>}0rU zokj-rEEHQ?&Oyl2B?iRi%Vi+HeyzH1U3vG38_S2T0KId4?6|l6ri6C^b5ifZU$a2@ zK=(p00L*_hAH7Gtm!W92v0O`47Rf>WZx<*F8R%74av?6e>p9d?^B46d9F{wo%KQ(^}t{Jl;HhXFX>6$KEbura50GeiWU zmKp2Ra$}EZzF3#$kM(F*@%JnM9n_gZP35%MLW?bWv6&W|X>nq0ITg?hFui9%&sx3r z2HJZAEuOXbYQJ$CZRS7oDW=d5$_4bZ!Vv84_kC#pLh$bB-T7$eJbq%K%)aDAPcY+f z9WS%bGfz1YEi(VlA9ctlvg)u;G^@}0M2q@6pJ-K|^NA_y^FA?E{k>1LsW14%H1$QF z$f;X>@VVm;KGC86yH9kgfAoni^(CK}uDhWYCMN}uSG83Prd3ea z#8nL1X#wQ!;2>Z_FXlx!{?|n_Dx*cUl6C7G=E*WVnREb751H*bL0W$R0S!cWYBZ*D>?pQH_YX$lHM z{ycv9B88FdPmSX}?k}KYF|qcJV=X6E0)?YkbH@-Aj$th|wuq$l9>*|@-?d0au^>qq zfXcA9_ahuDHu!w--U;0EG49bYFfAkVbjlfIOLel3aj#Br6HHjEWyhMe zjM(=zTWqgpiSfj)OocwtC%op$o|9NU)oZJeaW5ERL0)VnaRDqsr!ags{1o$llOL;w zL3Ly?oFyPGD3RS~fPS`7kQhK?H9(zTldIF!|DhAXEOk2$gGf+1bn!w$V zp1|rjCT2wP(0}DY5k8I*iUEkF?q$PlZM2(a18qXI*1M^d6#v%CZLSJiyK}14`bPH6WcXEvSC?4#iJ6#Rq!N+JpvheROtVJGwTa3}{qDMjK zWWk7soE9P@WNu_{t$G-vzblB0XlG=mjhM!}p@yD2A~V7OSrFMvauk!eH?m)IZaz4C zpl)OMfcgjSVixK_3bEKoW_8Q?@}a=O4#HkE5ci3pNxha{crZ zBp5v&ihyL)F`&}L&p0X|7B(d0NDA;gsPS;@`eLZhxg}T;6Z$Mg?-RD@T7(Ou+x*0e z%y1deaZvCo{?-HHfj;xt8?<;*JPFD>HTJepv?2B|u_(8ZeQC={Z1chXx4rx?{MOx@ z4}$caAic1eCG3cKgcTwz^@VJoNf4q>Vw zTV8sn@QE*}yU-8vNhJ+J*+Vf-gHKl4l}ai>a!TGYl6(An$8%$>=GlB&W;#!wKHY!1 z<21aneW1Xdjes655#OfCLB6<9W~c+FG3vk=taZ#h%o=&+5i3divqiJCPoq zW^@TOhNiLX7^_*~-wf?zW#~q(CAwfE89T2}3DJo8qrL#%ogs7`+m6FB=s- z0O^5f#BwiOaz!In$gB|$Px8-$yiO5L&_Kc322%|~4ibnKNT?|E+yR`&{RMD`7ep~V z3W=L08HnVAp0mX)F;haTve##=&%9&3b-iW1eLdGV*W2oMep%FS-R#-Mk*gyXtKG_xjKdp=Q?hTZ4u&0F?nyqgxZ6En zSquTDW6S~8aq4@ax`-~5f4>MAC`_${6owwI1(pJ9@h(rF<%nmDgP38<)+IqWd4Vx_ zNb(;N(-wAUW(WZyuKx76zEDvyT3xI!k_s2Gi0+70%%FIPiX14;PPJ#Di4{x(Ds+Mh zvn4b=VS%$Ct022}mn-5tk{-!A;*Mk=$>;-`wj-cZXcL{ZRm>XW+PX+obeubL7HBdX z4DaZ73h2$^{&X#Kmj;{y@509|J2(i=Xd4OEe^Lty8? z{x~ZV{8T_O@$gCx-J4l0b%cH$XTi0MfRhJ6$xLnB;Xv?ZmP`pG0lEx7M4JuZ(}7Xw z7i4COW|23-#q93R-I^&XGn<6k4$q8PH+$OP2)zZaf?-H4Qg>itf$~x)C;)>d*sNStWOWhPIHxs<^;9unS-aFtUl(?j!Dj zF|NCd{8_XJdiRiJmm5ItrXZhyMtyU^5&AOj7M+m4g5!G(AORcGGwkxVI>N5#u&dP> zc1^sDwT#Ukc)g}z=;`(@S`PKJ1sQVG&R?)xvs3N3^g>?G&P~B zH8-N`Yi>l%^{8q^ePeSO(jUgizL_4paZPjWzN*ISmn}gz1j{h9edWrQ)h&Egb4@i` zTT^#kEiE)w(OJHS@^N)peh^o$V{RTPzZF&2HC3(PYf#h5#+sTnsJf*Qs1TK@322*` zo#ZXZO3@qJ_o4iy)#$Yy$e&+PjdpB*{k4Ndl;Y-*t8PUtO*QBsrLAvhu3KGq6HHdW zMrUyINTt!eZ`bba%a)>5RZY!kb$xYBymzV5`|6u-pY8HD6~%iijNYB)xbkeb(f7u# zH{W{W^;=O>b5&zAT2ZrRW$kKE0`vWr)eTgM)o4Xy6*Sf~F)Lv@RJR7*RMS}BP<34m zH1PF}ppw-vy1uc7Np!@kt6J8qqzgbRt9YIcPf)L}zhUNJzP_sZ?AUW_=aDw9UVE03 zR`M6)U=ygc1q{kG)?8QD)LhdD>T6>7da!^YmtNHQ)&=Tkw&~ny+jJ-8SzWWLs)cW6 z*3_@5p=?*R@I1}0r4O@YX?YMa%a-okRSaom`7$Q@*3M3$O`gCn(ze}d zl=qj}xaA9t@&{#Kb9efU^0I)*k!b(C?5XK;VIbg4wEr*=bR~FR8`$Cc@myo9IdFA) zqP#jVG+k~F+~;-|8Z^Pcarg3t7G1WJWshVe%D%uNPojKtU}@&zGDH5YfdiR|_DJCG zvl8VUfv>U*8rJgbz~kBOLduf0^abvolPLc-P&d~o)4s&R8->u*xL3xZEx1>~U0bK7 zLeCo6Fz$H{qp2xrii`^k^Fe81T(Vq$g<$0h`U)ZEJkLJ0174OV;rJvX+i8aHL2pd) Hqxio8H8ETa literal 10903 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 Bjbi`+ From d771825da487f32a7cd3a937d43e8d9d294cdb0b Mon Sep 17 00:00:00 2001 From: Paul Gardner-Stephen Date: Thu, 27 Dec 2018 11:35:06 +1030 Subject: [PATCH 3/5] add support for C65 and M65 turbo modes --- main.c | 28 ++++++++++++++++++++++++---- synthmark64.prg | Bin 11011 -> 11133 bytes 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/main.c b/main.c index 5705dae..95fd7a1 100644 --- a/main.c +++ b/main.c @@ -12,6 +12,7 @@ unsigned char vic_pal = 0; unsigned char screenoff = 0; unsigned char dtvturbo = 0; unsigned char c128turbo = 0; +unsigned char c65turbo = 0; unsigned char m65turbo = 0; unsigned char scpumode = 1; // default, none, full unsigned char *ptr; @@ -85,6 +86,21 @@ unsigned int dotest(void) } } + if (cpu_type == CPU_45GS02 || cpu_type == CPU_4510) { + asm ("lda #$a5"); + asm ("ldy #$96"); + asm ("sta $d02f"); + asm ("sty $d02f"); + if (c65turbo) { + asm("ldy #$40"); + asm("sty $d031"); + } else { + asm("ldy #$00"); + asm("sty $d031"); + } + asm ("sty $d02f"); + } + if (cpu_type == CPU_65816) { // scpumode asm("sty $d07e"); @@ -657,10 +673,11 @@ void menu (void) while (1) { gotoxy(1,2); cprintf("[F1] disable screen during tests: %s", screenoff ? "yes" : "no "); gotoxy(1,4); cprintf("[F3] use C128 fast mode: %s", c128turbo ? "yes" : "no "); - gotoxy(1,6); cprintf("[F5] use DTV fast mode(s): %s", dtvturbo ? "yes" : "no "); - gotoxy(1,8); cprintf("[F7] use SCPU optimization: %s", scpumode == 0 ? "default" : scpumode == 1 ? "none " : "full "); - gotoxy(1,10); cprintf("[F8] use MEGA65 fast mode: %s", m65turbo ? "yes" : "no "); - gotoxy(1,12); cprintf("[RETURN] start benchmark"); + gotoxy(1,6); cprintf("[F4] use C65 fast mode: %s", c65turbo ? "yes" : "no "); + gotoxy(1,8); cprintf("[F5] use DTV fast mode(s): %s", dtvturbo ? "yes" : "no "); + gotoxy(1,10); cprintf("[F7] use SCPU optimization: %s", scpumode == 0 ? "default" : scpumode == 1 ? "none " : "full "); + gotoxy(1,12); cprintf("[F8] use MEGA65 fast mode: %s", m65turbo ? "yes" : "no "); + gotoxy(1,14); cprintf("[RETURN] start benchmark"); ch = cgetc(); if (ch == 0x0d) { break; @@ -675,6 +692,9 @@ void menu (void) case 0x86: c128turbo ^= 1; break; + case 0x8a: + c65turbo ^= 1; + break; case 0x87: dtvturbo ^= 1; break; diff --git a/synthmark64.prg b/synthmark64.prg index 79ed1b106fcb0fff0fb70fa265a7df9ef0db7214..4705f0916caa2e7f22c34ca08f1b08458662cd2b 100644 GIT binary patch literal 11133 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 G;{O31_CO)@jSF+&v7-u}L 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 Hqxio8H8ETa From 424c6ff331f40b0409655a6634e8380d42f37eb8 Mon Sep 17 00:00:00 2001 From: Paul Gardner-Stephen Date: Thu, 27 Dec 2018 11:58:10 +1030 Subject: [PATCH 4/5] begin implementing RAM sizing for M65 --- Makefile | 2 +- helper.s | 15 ++++++++++++++ main.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ synthmark64.prg | Bin 11133 -> 11359 bytes 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index dda3bf8..7538f4d 100644 --- a/Makefile +++ b/Makefile @@ -5,4 +5,4 @@ all: clean: rm -f *~ rm -f *.o - rm -f *.prg \ No newline at end of file + rm -f *.prg diff --git a/helper.s b/helper.s index c191b26..dccc645 100644 --- a/helper.s +++ b/helper.s @@ -1,4 +1,19 @@ + .export _m65read32,_m65write32 + +_m65read32: + nop + .byte $b2, $fb ; lda ($fb),z + ldx #$00 + rts + +_m65write32: + nop + .byte $92,$fb ; sta ($fb),z + lda #$00 + ldx #$00 + rts + .export _loadzpage, _savezpage _loadzpage: ldx #2 diff --git a/main.c b/main.c index 95fd7a1..879570f 100644 --- a/main.c +++ b/main.c @@ -17,6 +17,9 @@ unsigned char m65turbo = 0; unsigned char scpumode = 1; // default, none, full unsigned char *ptr; +void fastcall m65write32(unsigned char v); +unsigned char m65read32(void); + int count_cpu_names=9; char *cpu_names[]={"6502 ","65C02","65816","4510 ","65SC*","65CE*","HUC6*","2A0X ","45GS*"}; @@ -56,6 +59,50 @@ extern void dtvturbooff(void); extern void set_vic_pal(void); extern void set_ram_banks(void); +/* Work out how much RAM a MEGA65 has. + We have to add up two types of RAM: + 1. The primary fast/chip memory; and + 2. The optional expansion memory. + + For now, we will just count the main memory. + + Basically try writing a value to $xx00FF and see if + it sticks, and stop when it stops working (but make sure + to enable writing to the "ROM" area first. +*/ + +unsigned char read_value; +unsigned char m65zpsave[5]; +void set_m65_ram_banks(void) +{ + unsigned char n,bank_ok; + // Save $FB-$FF + for(n=0;n<5;n++) m65zpsave[n]=*(unsigned char *)(0xfb+n); + + // Set pointer to $00000000 to begin with + (*(unsigned long *)0xFB)=0x00000000L; + + // Now try memory banks + for (n=0;n<255;n++) { + // Set bits 16 - 23 to bank number + (*(unsigned char *)0xfd)=n; + // now do the read + read_value=m65read32(); + read_value^=0xff; + m65write32(read_value); + if (m65read32()!=read_value) bank_ok=0; else bank_ok=1; + read_value^=0xff; + m65write32(read_value); + if (!bank_ok) break; + } + + if (n) ram_banks=n; + + // restore ZP area + for(n=0;n<5;n++) *(unsigned char *)(0xfb+n)=m65zpsave[n]; + +} + unsigned int dotest(void) { static unsigned int res; @@ -718,6 +765,11 @@ void check_ram_banks (void) { if (cpu_type == CPU_65816) { set_ram_banks(); + } else if (cpu_type == CPU_4510) { + // Assume C65 + ram_banks = 2; + } else if (cpu_type == CPU_45GS02) { + set_m65_ram_banks(); } else { ram_banks = 1; } diff --git a/synthmark64.prg b/synthmark64.prg index 4705f0916caa2e7f22c34ca08f1b08458662cd2b..b8be3101c204b376db2641542cbd57d8ec5d9ffd 100644 GIT binary patch literal 11359 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 G;{O31 Date: Thu, 27 Dec 2018 12:11:12 +1030 Subject: [PATCH 5/5] remove write protection of M65 ROM area before testing memory size --- main.c | 16 +++++++++++++++- synthmark64.prg | Bin 11359 -> 11378 bytes 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 879570f..82ddb9f 100644 --- a/main.c +++ b/main.c @@ -79,11 +79,25 @@ void set_m65_ram_banks(void) // Save $FB-$FF for(n=0;n<5;n++) m65zpsave[n]=*(unsigned char *)(0xfb+n); +#if 1 + // Remove write protection of 128KB ROM area + // XXX - This hypervisor call TOGGLES write protection, so we + // should actually check the result before proceeding. + __asm__("lda #$47"); + __asm__("sta $d02f"); + __asm__("lda #$53"); + __asm__("sta $d02f"); + __asm__("lda #$70"); + __asm__("sta $d640"); + __asm__("nop"); // work around M65 bug sometimes eating byte after hypervisor call + __asm__("sta $d02f"); +#endif + // Set pointer to $00000000 to begin with (*(unsigned long *)0xFB)=0x00000000L; // Now try memory banks - for (n=0;n<255;n++) { + for (n=0;n!=255;n++) { // Set bits 16 - 23 to bank number (*(unsigned char *)0xfd)=n; // now do the read diff --git a/synthmark64.prg b/synthmark64.prg index b8be3101c204b376db2641542cbd57d8ec5d9ffd..328706dcb188735624db3c331473db25e8b04554 100644 GIT binary patch literal 11378 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