From 8892e26cf257f172755315ce49a7df24e570f5c5 Mon Sep 17 00:00:00 2001 From: Ty Lamontagne Date: Sun, 24 Jul 2022 12:09:15 -0400 Subject: [PATCH] test(prog_field): Update to reflect more findings. --- progressive_field/README.md | 13 ++++--------- progressive_field/prog_field.c | 5 ----- progressive_field/prog_field.elf | Bin 191572 -> 191572 bytes 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/progressive_field/README.md b/progressive_field/README.md index e47badc..0495b7e 100644 --- a/progressive_field/README.md +++ b/progressive_field/README.md @@ -1,8 +1,7 @@ # Progressive Field ## Description -Checks the behaviour of FIELD(in CSR) when the CMOD(in SMODE1) -and VFP(in SYNCHV) bits are changed. +Checks the behaviour of FIELD(in CSR) when the VFP(in SYNCHV) bits are changed. ## PCSX2 Behaviour PCSX2 would swap FIELD unconditionally, this caused some progressive games to @@ -16,20 +15,16 @@ This was later found to be incorrect behaviour. ## Findings The original finding determined that when the video mode is set to progressive, FIELD is set. - Turns out, the SMODE2 interlace bit has no control over FIELD behaviour. -The actual behaviour is determined by CMOD (bits 13 & 14 in SMODE1) -and VFP (bottom bits in SYNCV) +The actual behaviour is determined by VFP (bottom bits in SYNCV) -![img](https://i.imgur.com/dsFYHm5.jpg) ## Related PR(s) or Issue(s) https://github.com/PCSX2/pcsx2/pull/6256 https://github.com/PCSX2/pcsx2/pull/6342 + ## Expected Results -When testing CMOD 1, odd VFPs should say `FIELD IS CHANGING` - -When testing CMOD 0, no matter the VFP, it should say `FIELD IS NOT CHANGING` +When testing odd VFPs should say `FIELD IS CHANGING`, even VFPs should say `FIELD IS NOT CHANGING` diff --git a/progressive_field/prog_field.c b/progressive_field/prog_field.c index c070b54..c874226 100644 --- a/progressive_field/prog_field.c +++ b/progressive_field/prog_field.c @@ -52,11 +52,6 @@ int main(void) // Enable VSYNC event GSCSR = 0x8; - printf("Checking FIELD when CMOD is set to 1\n"); - SMODE1 |= (1 << 13); - test_gs_field(); - printf("Checking FIELD when CMOD is set to 0\n"); - SMODE1 &= ~(2 << 13); test_gs_field(); SleepThread(); diff --git a/progressive_field/prog_field.elf b/progressive_field/prog_field.elf index c65f053028d31234addb291ef911706fbf680a88..4622c45e9e9dcadd43cf2c9a686dca7ef93d0923 100644 GIT binary patch delta 20137 zcmbV!3tW`d*7x4e48wq+GbjQgG9(Cw2;LGCWblfquiy>TJYrg5X<};X(GFu_;T^w6 z+xV4*3W^s596f`k1(~I#i6=`eFW9kjFjKMggr@QR*K>iXQ}21-kKgavd#}r0d#%0K zUi&tBwzk#T+E)1w_>A=rql4HjbA*90D`UpBUX6?!nMW5ZGbhx_$vnV6`_DR+F`_d3 zWy!O7WYB(%65(((Q>b1e>b2#8ay38dVOcUTyq&y4>dY<9QmHTJZ^+*ocJNE`8e=fh zoyK|7E*XqIB$W9{2^Kc6_p;W8@I@g8mOOrX@5(?Z#s)n&%~T#MlM>j{!Qp>cC+*+s zWXj7tI_FrJM?y{0k;qBR81C>X4v%8*H`!Q4la*N$dP9RiR^H_4uq61Q1wZhPD;T=E zMlKHTN7|(tyUdV`J`py?D3>6ErFuLz89CLpGE2gElm{r56qPmp#nL4(r$?8FC_5uM zV?}bL$r_^5-SF!go2>20_yO{GQ(wMRUSo>n4*7s-EMFvhd5%Up(Q_)&gP#47-u3Ji z76^$Pt^JWjz2)KN;26?7v!FO!x5vzk2_=O?S33$dn{2t^%{IyF&277qrUlSEj#;}% zj9DHiZ5Y?;TAP_gwMaf?9u~G?Fxge!6h74G;|Kfm6_~MK646h2cGf}e=%|I^BB9j75KH!%xU z%#?##^$(f>YyvAU3uks?Ud1DOEf}^4TcM#wp4}>zr^uUI1^bT#kE7K7AOktoNeXX(V?dE6Nw)e#dXRhcmJ@vfMk#}D|DD0Ndpt(nMGipS zBYkKLCqvL7muYYb2Hk97Mi}XSScrOXOqi zLqk?hF!~g+ZDsh@l^g7VdsykZh$u+66-u*Y9#F<@&WeD~B_8fv-oeHB9cN-kPYw}7 zLf%ArCFC;F>P|m$Kj(qawnR8#dk5*vu>MGk!&V{f@kl!V&bi_dnE9O?5xx-V=I|V( zArX;CheRxaGSv|>f7>~}%Q<3-iQ0kmi>M@|{#{2SeY$HBe@ec1Hkf}YS9cu*jK`y& zBR&5piQv)0_&3hs(a`K|Ijvh?en(!>?K%hxVtOIn854|7Jr+YPCw7lUInZKq?2?@o zUnV`3HZ)y|RPBr&Be*H2LvNRtr#%Js;E@L(7ja( z?Z0HNq|SZFpa@%)WMK!^Q4La-vwdBfmBj#HmZ}DUPP~WYX-U1Ns5R>(&c-O*YRv=x zO-*-`k491pt0kvjQ`4ZWif*KrGHdPZj(j_59WRuZ*)m4Uws7%RE9+E78znDCS zeacEz|sDzJCYR)x@_n|z8zt+N#63Afl1b{I*~o5aJ@%H%3*^B!L6Sj)H%qZ z)uJwLDcdB6yk$@mMYF-7e5hQFbhUhCa3tFD8Zs!t+n3t1L03Ea(I$-y1zb+OR47Hn zIe=r*GxFRa!B(P#BjVvh-!jPEJY+g#@u9&;Lxu*#D0;(90-0-FHR57Kp`GcPd@ zDLf*cF>hF~TAntvFZY%=4eiB8%BK_=*M@Ghk_->BP}PZzls6BHhJ`1FMMo@!_0)1i zoQ?EFzc8sb1UPcdDBu*Wf>LPe^h4$hIjs*{yQ~1i5JPfPlWo% z(FDcB-SWWRktQhl$sIZQiD8(OE1n3oW(6C49C0QEPh;?veDI0skQ*{06m2Aq7}m9U z+Gw5^;XX}DNZ&d|??ZCwh|Vz-EbMEGFGWPvslfrYoL}5G|T9u#IaDbjgyJk4fTY z`Pi8LNcq@>{3Chs*v=?#9_vCne%x69aqVcJ?b2s(8fv|UdxU=^9~l=4`o(e49%@^@ z(u$SMSfC?!9lf` zqI_gpG+Mbf?OCL0PX(hJXFoNJ=gSA4dLGoU>8E+B^Y(OugzWCqp_~kPb`@{$-12NM z?l}g%Yh;7u*qMD~%gjJN#@Tgd5{Dr(pNl4=o+Fb_Jl7wo$MchsPJ8}!NVxX=*HGZt ztQ-%{$5PhjhLc?#F*#_L$K;(0ckpq}v_+8;q%8jP>%3OxOQs^7wxq8TS2>jI% z{5g5ltLaFKkq(s~zB;0-t{3h9A~FlfkClC3oDCk9<)AQUh_E@Z?#;~|jj&Oj+e=B? z%I4+0`QMz0%irN}kc+RK#;BCO{=8Qn_I(kyOlgc9mUj;QcrR}iD9cyG@;v##3UZ)L zE2k2EY%juoa%Rr3_{3*3(e%%GPK7?{xm14VgS; z+dOWR&un|u>yxh7?XN8kzba2Dip1b8FN)@m%N0eT=)N;Wt1z>t6nBPc%ZkTJ4gKZ6 z>>49SZJz}n+_-&gZ?)HL61r#aVCJ#b$O@I|q~j^1MPX#f{T@Y*!ge`(dq>2xemgp2 zXr}B4fT#sKX!mzxM}T~IN1Reh;-ASeCBx9}f|6Ch@SUIX3-YO*)2$b}>d~*LECLIQ zO-|m`pSQ*U&fy=(H+IeAAIj5q_eI)cPXN-2-NTUH`xPcY&fF7)Gx(WpqvhH?4t`&r zSo%)H&}darT3~boXgknSwo7?($lgfkJ!J1>q+9leBCX!r7U>szqmlBmV5A{sec=-0 z%V42%aoOh-t438!MHnirNJ4s}B3L=6P_GnffhQuakXA5u#~HRS2Vq~{;-p?b=Iljo z<&4F?zw7?K7?WxH-$fd7U^jnFK5-xzz4z^b>oit>JqOHA7lnrtuFrwlTsa4+@4=6e zesM4da|upv?VeyXQ^R_LFUkiGO~oi%4@b)OcWo$5d$&x1N6^?GUiCX?rhA7&jeLL{ zR2_=6U-dAg%c|*|bP<@9^22KE2Ax44{FBZ?{8%puXQ4hH2XL^BI{qfoYsW7mJ#m80 zLPtKqS!jTK=F`uS7N6{o^vcQCkQWNI&zeiqk>0-atbcBp z%30lHZ%3TOmFJv&S*E_`S0Ucn^{OZJX^(&WECCmD?Ng-puDy^|12K2=p1uHE( zD_h@gD`#HM1itz@sebqRD&qMbJu097ei+iQ8+1yXb|V1cWATj<=%r&fBGGR*ZV428FEpEYC)kT*(4EaJ`QjxU)<>ou8N6fD*D!xwHm$$Z$Mm;B=0B0_ z&+A7^Y=n=)?a^r4#$x52XnAO&3(`o>GB7Cv28i>Af3;U z{U1gKt%ewHmWzuyyJ9>IhM8T(Y#IM>9ym`t9K;XHzQ3%Z1^pM=hF$q(9q@CT1V6md ziw{GZ#?$%sjXQa;S0khuU1RnnY&^xIrv&~|9ByXeU5w0gZ#!n#duX81rz4a0(k>Yb zymTCN!g+y5$9bbnxV(qO;e_)6OuU4P0&b*YHe-2WJm;~#r2guU$Lygo`%J9oJla1u zxn)}DH)-3&8F2Fi!6n|Gj}(a#AB$|g#8>eK5n|v;{0A|`z=Qc&vDg4}W{5Ke9*XR? z0i5|_h>_2;;+{^4al*)>d6u|q#3a}4g z>IO4=WbX{|G{zt-yLEB6V-Ot}jp6k5M)~-zSN76DlR1nDdE%58$F5a`c=JKNlQhob zyOyub6|=p0aGyLHI8+R`q_GFu7M*Ysa3p|Endn%wDbbNhVz`^m6-T`J2rmqQ*$$^J z5Y|>a)T#?7pC?svMRF_tG0zZQKG0x>nCOGMdKxw_cwOMHye@ogme}OO2SLw^K72&T zS?F1dy)-r0S~&{iB0~v`Tg%GD5MQ1oQ5kEv2z#tp0kJV6TP54z<6KNJmIxgl~ID&}SXn}WZ za9y)-Ps#V~!A3J3x@cE1Mm+T6!(!GBq42q{=?!LYM=tu>Fg1*QW1yVj0FPZac03f? zR*Jc8q5C&tMO!|Ve{NqZ;`2jJ4mPEo!6LVw`4ah30Gs zt~Tt<0N%i_pW1szTnoZ{xhecR!1|kFK?gn^+4&B94zl6F7`Q<3Z7`u}QzRX2CSc)uoYbV9Vs6MaGf^%l!R`3OK~ zLLp?Ou-bUA6?!QHNcz$s=7~fbsNaZ}Z5Wt1vC)QJ`c53Q@zFtKj}P0r!-#8$5-cz6 zkkbT>6JcS*h*EiCcqC$0mTPe&e_aB|ALRnsrbp31c5&}f#ID!G@@N=k7pJ13XrA!x#@|6! z+6@)s#Kmq9V;4a&Q0OU<7=y4B=h{RW&vV`Fjt&NOVjO(P=2{TP+W;+=_uxN*y0|Cg z@z2D;UTDlLf_j6=PxR>xw=;?V(^@KR zM9f5z z58cW-PS5KDENs6wo@qIlswsnj6;%nGo3MuPUVHI*sz)9az|z(1Ws?@tfs(f7ynO`g--xK1e11ncmBmpeAJ zDDTeK&JDl+zcDIrJ$l-`Vjh_HZ2UE@W5KU+^EH9pkmsVITF_78BRTW6JkU*nDA&$c zd6|?`a@4{qkEq{UZe<;(=T#qA*lLYli}F=`L~{VQ2>E~dbUDAtbDA613GonUsaA#S zxlW_}u$z)TRV~W9^St$b3%>Tlma;pKTAuN1VmX-OVHq{7f5*`v;q=OTj;ZAt$SqJH z4tcnSOVAoCbW`B$QE}hFyW~{!y`$$g@!YKYhBK z-{d*Xjq8NkZ(9`7aetK8ee?UgPrBhZT>X6>Rp#_x6CZ%t@|y}7|NJ#>Fkq_u0G3}x zLno1+)RfNF@=P}c!bS259+|U0%F1eg^X13FHVEUfTHEQWUwnqBvH;k1R@jca>&sAq!*-4eAC zr%QPU?kT?8!#m-;GQ5|_!FZ`d5~wO8(?twD6;&8eLwe-R3OA~RWCH^1&goRrmKE0Z{%-OaI;rnYelHz zxLALN2bwjgQrs@ZF~39s4UR@(t>6KMMQzk(sG`WK;5MEjc2>Zasva8Q1MVfR0V5Uk z6ptQ(5ncCTW41^PN9I{LO6`nWd!T<*s%lv5`!Gx?tA-ik(llG@{svo`fqgv6oSH^; znyQ55BOb)Zh$l*UC(pRCgbWq2=wfM{UiTmrS>c3gg&OLON=Vbm_5&cFaPp}lWk2sC zUO0m7;so*N`%rSC)GxB-N%EZx~byPeY}&QAX96^@hL>=07P~dYY$+U zv&7B=XgF}XMO;74J4v(L*=MW38#GQYXl3XsWot}ze+4jC2llxEwo}~8G?(=86sM2E z))zG{JF1voR69ZG+Prx!S{nivXswX_T3OVgNz+TjWzf87pW^#D*cxKf{Aet6S=L9#;U&1bDw8ZjB~@oW!(-*c5#`sAY{SYpurRsODZ~T)LBF z&6i8oX*8NLqU#}yn0>2;Dy)DhTg7)3FePwXvko2jHr2d(1;@m#k6>Pr*!3QKyjXD` zsaS6jzF{h+s_2Eo7_IF(0nM4W6MtXZ(!f4vDd)`Ogo9d z)sZ@`00vRE4{h%f-tbw@m&>2yTx;dLE58{$TD&5FfJZC9^pPx;U2N8 z5@SHYcD(nO2SZ$W%s5s#h5DDm04X2o*|T^Nd1Bq#>qJm-e|;6?!7;8%>o|R)<$A zuT*&XLB$B^klNxKG@Z1vsC%Ec7OfFGy`tV#YNF56_VED8c3A8}r+YPCAT)W!dK!w$ z;?YBxvb8tGE@&a$)Ql+n2o7;eJb|u6MlLSZ-x8mYq776Zu5bu8H|Xrg!QP35Qn&sN*T!)&!8hnr>^RQsl=9qj&(iL;68)#R)@IAjD9p6~yrmco#z( zEn<7pvP1#w7A+aHJ`phIJsxDv`Y4F1)Q#9p=1y zgfoaaN1)7oMVSyooK_GiA99D;_A{|y7H7YQC>r%plTI@?@1d$bts$O)zi5n;prGhmg~%!CfU?B3(kK+*&8?_14POP^(d47Ha|%*x6uJu>}A698CklHCUOM)X)i)Dp4k*Prp*8^5!X(krIJM0 zcM#5&tjVQiO9xc1PNr(1V%h&(~`O&y=wwGE}trgf@N?2tdR{G%(ksD}X~} zSHambR7x8xt7f$fXP~%jny68*@6pSr5t7W4)avS*?p63J(9=AbsM?$@Q~)$fo6oE# zTPTM5Cz~ztlBQ_((hf==zd>~-pmei9xd7z-3W zwft)n299|KiW{~35mOY(JWBYV=PP-NtMEMkierDj}jAk1n7;?BAzhsLmIq1?(%-m-EGk39e$NMpLI2=>==TZ#Q2V_{ zJ)a%Dh~!d2f1a=EvbI6a7LwKaN1*bEo+nP!EAKZo-@*gti>7)^-a<`u#x;npay@^I zL{|xj4iHnW^9h~}B)=g;9J-FE!<0!TE?tM5I-$tB#O~koG#>AAd`}YMMfPn- zc=0AI&q5`fcs{!c%NLOVC4p)!mXG&hY%D%>%0$)j857BJyoN$-l6d77_wz1C-9_Me z+uJquAN&~iEkU303r0Q@$Z~3Mc1j(!MG5`2^u{}oy_w`Iz0p8)B>|>IiJf5BK}?n! zO^FMN5|Vk6+Wq1O^ih;+*AFzfQIpiced`WP%s^Cur#0TeZZC@>OqK|_%Y&tqNvbvD zCMo0SPy{_Ditb|W6}sNP%irTT(*NZrKHF47B5K6#pLl3O9f?p9XcM%W#`H5JY2J*D z#>axHz_1J6w;fm$`Dd1i0znGva8itH#5kB;Z#VKBjyTfkKJSS+ns%SZn=%pLq)f5y zJ`eJlh4Kri&RB=uV*hM7 zl6vyOji;q}L=-cZLc{hWUM^PTu}*m?KLhn12W*CVYY^GbiWDwQe|s-GMUiK-geScoM#Jbd+8FghW64DsbPU@c7U{wqac0> zgb*f5f}~f#9o<37qcFQaSlYmAUBf#{139l1t3#xorrJg5wOa9Ei1di59%WYV`aVQj znGW?9E|5Z@fuJl(xG1X;=TziRlvRmDs=883BPg@ zZ59GqFJc!0$`;Q8B6af?N}Yh+LBv|u#|x#GjaVIqER`-vW?DN9vL_drf06uM_8jT5 zgkG|}B0VCRX!SI#5DmG~BjUMS^iYbpo-6GzRbg5ioGSj%a^T}d|JQ)0NoKg9;=Nx7 zK1!^5UE1ME>!#r~Z*eRk_4Nt1k`dB!Gb z6ZQCyo236M0l)Sw3Gd&vuFp23Pp!17%!hm6=ljZEzOWWa!LTrH;v=$?)qAb?52>um6QCupLx_j(Fxm=VIHA-BetWfxGM`jkow@a~r7H>!6 zS>oV!sc$kCb7n`Q^dpJ}s1P;9$}&tXuwyz_1~(YXIy;G_N$1ZHJ$7IevPBxQu!aS= zO+@=dZNeXCd}*j}hyv#$K-G) b>Yc1Y1-^?!!{;Lm{H`zU`)bQrAov$!7akS^mC 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 delta 20125 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