From 30cb545e5ea9b8edb4736e35dd5f36c4944fae70 Mon Sep 17 00:00:00 2001 From: Lucas Scharenbroich Date: Wed, 19 Aug 2020 00:35:30 -0500 Subject: [PATCH] Update skeleon to show a pictire on-screen --- .vscode/settings.json | 21 +++ build-image.bat | 1 + emu/Target.2mg | Bin 2097216 -> 2097216 bytes emu/test.pic | Bin 0 -> 12078 bytes macros/EDS.GSOS.MACS.S | 341 +++++++++++++++++++++-------------------- package.json | 7 +- src/GTE.Line.s | 33 ++-- src/GTE.Main.s | 2 +- src/Tool.s | 12 +- test/App.Init.s | 73 +++++++++ test/App.Main.s | 280 ++++++++++++++++++++++++++++++++- test/App.s | 39 +++-- 12 files changed, 606 insertions(+), 203 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 emu/test.pic create mode 100644 test/App.Init.s diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3092d6d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,21 @@ +{ + "emeraldwalk.runonsave": { + "commands": [ + { + "match": "\\.s$", + "isAsync": true, + "cmd": "C:\\\\Programs\\\\IIgsXDev\\\\bin\\\\Cadius.exe INDENTFILE ${file}" + }, + { + "match": "\\.S$", + "isAsync": true, + "cmd": "C:\\\\Programs\\\\IIgsXDev\\\\bin\\\\Cadius.exe INDENTFILE ${file}" + }, + { + "match": "\\.MACS\\.S$", + "isAsync": true, + "cmd": "C:\\\\Programs\\\\IIgsXDev\\\\bin\\\\Cadius.exe INDENTFILE ${file}" + } + ] + } +} \ No newline at end of file diff --git a/build-image.bat b/build-image.bat index c59dce0..3d4cca9 100644 --- a/build-image.bat +++ b/build-image.bat @@ -15,3 +15,4 @@ REM Cadius does not overwrite files, so clear the root folder first REM Now copy files and folders as needed %CADIUS% ADDFILE %IMAGE% %FOLDER% test\\GTETestApp %CADIUS% ADDFILE %IMAGE% %FOLDER% src\\GTETool +%CADIUS% ADDFILE %IMAGE% %FOLDER% emu\\test.pic diff --git a/emu/Target.2mg b/emu/Target.2mg index 99ab3d0f31032ed6940db423f42d3ee9678ebdba..59e663b4468216939bfa60d2f5480431106ea0d8 100644 GIT binary patch delta 14230 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 DdQ-z~ delta 497 zcmYMvJxjwt7zgm@lGKtE(Xlr}7-RZCOEz2g1u}+MVyjn2N-oB<2|3f;Fne6Xr-^?3malaWW zNaxc|?=@W{fy7#_Yj^Cm^m1R2P$Opm}Tt*89ZL1h;@0ak)~NJ zAKt6ovRgbl))2FJtQ_7;!c6g7!Vyz&N-#9t!{l{EB!nnnV7E zT{jKEYsM<80#&iRLJ49&DcU4;_6vVTuy#*!cwg*%!p@9v;W|UtVIY7A5=3AQWS9p9 qREUBGI>aCj1}wlLBp?YXNP`I($U+YCP=F;UKD$n7bmzNHv+)ln7kJ+Q diff --git a/emu/test.pic b/emu/test.pic new file mode 100644 index 0000000000000000000000000000000000000000..258fcdb1e42ab515050671427d938d3c4ad42344 GIT binary patch literal 12078 zcmai)YiwiZncv^Tn@C+od?{(1i?bLW%I;-@cF99ILAz*n4iD9$SQI-ZkESS!U3)#^ z6h%?2x0_*66os@XikFgRI@{I@9!mBGLAMZ(6nA?;Aq~d{HFgq7b2N!__1L3HoJ9l2 znIZN=KNS6v{+^?8dijt=5=A4v?{k0t&*kOM)Z0p_JNi$Rs}h!NA2>wde{y86YU{vmV=uC0omtxAi|(05yj_Vf84Kq+I{S{HS3sE2$ubX-5P)LQi0 zm-G*mB|=(SySDsYwOl{Z_Vs)GUB887%39QJTfOXZHC1vP&vX5BYq|Nw=kxcWoSa+M z`8)igEKjSa>h0vqS{FQfqU6*(&-YvYqJK#arsmqnD7xo|@!^AZs@?u4PTSS0P`6!Y z%=f)k%NMd4rRJ_(Yd!C3>+;J(tu8ON)$a{knPtD>G@SC;jhy2w_?}$h26joeueE%? z-M)6vcH2|_WnWIe?bH!IS#+w-(1YTAmF4)gFZ!3;*Swb7PJPkmsOv8}Dc`O* z9|vP$Y7O+G@2Bt<`e0*Rrl& z!`Cr8uUf4+u*=Ime@X5+6(UU+7vUG}kynBxFeDT1}>E&At*Gft(1 z_UKWn*7Dy#)MR#Vuj56TqpdJH4kI`8ko`c7rwK9S*6sGoi%5_{La&Z1pLZSgOx=%z zqU2OvCuu*Sls29H!NzSjQb)rm9qtUGXm=PU`oYaQB9VQU>!g~8=@to{1)rcuR2G`9 zKXr)+gO->#rZuUQF}I`Wu36uTAeOwfGuWy}sW1$Jn?sehB)D7kHraE2*iy@`KZZ&R zzHb+YHsRw#^ek#?p6evEXga65X5(u{9Y>6>IAkvQOR6n5KLtc zjKwd(^xeT=^VUw-@2>6a2SK#uM(Mj@7dQdJuDY!Zfb?RXm;&X9tKywAP^;FfFKY{&@>7^Y#}Ny*>*)giB-0AO3FZ*mNfm4ydBI=ph1;eRbOK|7NN9)K zYu!$;$v@3j6z<$Ud8hO_z`^$fEG~$xGYAiLvi88w`99HBKy(|c*ww0svCAiFOyx`j z-C!8T#(tLHcl$vgMPZCL3sNBXOb{U4hOc(}TMBWWdM-hmqYAkomUNY1tVCQXMFbtefA63o>JYMMBn zzxq#@B*pY@lsoFKt@Y7jD_AsB;l~U*z5Xk8*UQ!2Sc&s3Vl`K**t($g;&OB7O_r)o ztxPY2sf0&b;>)g(7=jWDXTh7o_c-3<(543yvjLN**3Ou09U5U$uue4lm+%8g>%f&)@W`;B;w&D=Bg~NQU`v0i0RW})7(mf17rasPwg)zPG z6|Yt;&6LE|ut-qPT|1@q`K2o~1Q$WM2|c52VpY=5i2NqHYH6!F4YHabNbA*%ov1yIjY48%lql!8-U^$Cd3eC2{i zLSJp*a>~G=A?*T~;jh%@ZHoBN{zS>a3o(uqpfK*KXz9fL^49$4B4NgadSFr7x`OXs#%k^5NLQ&EBszvRs`jP}@N9#+kE|!R8UEpgOLxw)rvJqtXDhlH@3bCd*zOYt264 z)5PBxuC+v4Q3gw>lAcZ##XjW606lI^33=>> zfBj=FttQ=7(WWm#8^2lMS5aosxhQ|rAc==3G};t^L}#HvFXQ^j*0L_Rb{fC?&J#|( zN7yXg2?Hv!Yf{^SDqb|T1=}!u1wd*@qo+T46{9_meNd+5wHnV8yLwjCx+twwu|S$I zf%p@xOA>9>YQsOXSfY0u2Dwfc_9f-bc5J=im$z^cKo5szLuly?92#yB4t}e7<%;7w z_A|6&KA_|xwK3I&eE>K11kX|LAUQxy*oWGwEDfe zDXyUkOlaQDSkO`AGxVz{P=v)ovo>_bHHc0hT=hI`^l1VCJfDFDX|ezmOR4~genVVA z_Z2+qOIm<^feRb*@GpeoeE94h2TP11Aay=w({%CoT+;`~E4Dqi1OSRwBs3^noS9)n zaA+GZxjJ*k0i+TR*dGRAuita&5&M#n+jaA7ALsuV`VHKmL=CS(iZ`T6OLe%6kEEUq zJ#~@p4?i<^3V6^2#tb-!GlapbKiM;3A6SAxDiB~NDe=kYdt$CX#^L~MKIT!4dDQ8x z$@YRc3h?z@eCu7*dM38gB}s}iE+wz}F_&C$`~9_T)9r;AD#=eW-xANOHP=jcUV%%a zQoH~c*ijRbO&spoc{BuOyjl!S@WA%z8LCCCK^I8eYMTKwX7ZGz;Nav{tQCZPLRXq# zjJF0vc0<>k@4SLPU?QscRR?d(G^yi5`{`%JR+af$rBv2>R=8B0LWLZZ_5nWly-@g= zkMs?Ldp|||E(TMmGbRnm8u2W48=6nO5>FL2%C!7i%!h(S80$ImIaQnIZwLC5XLW;O z=rza;a-GnsIcK`KYBCq>-aW$gl7x~c=z`mYe*P5>ODKd=$i*r9!mV6Y4RBKXK zWg_ud*=N_33$~T?zJvAN#gEwCV0r9d&B7%vSY7G#}ca|`fQ@Nn7o^jAJ zM@hmHwHkb^*jP#EgJI+Z@Wil1o8tLn|A&4SL>%1Of9)s1Vwi?HP0v|io$D;Mmhgm- z7Z{|?a3s@W@|il>QJf|FTzjfG=L;U%Q1=(8wYlZxOLnPNjphFY{-&)Bjvj$Y{I?hO z`_jCbwMFwZK!J@M1%gogw0;??x|o;rZq}%bTJk#$0Fsi@<_HV&{{Lg)DmO?0g7+V} zG^1{iq<0SMrm*@f11or}n600XckO&3Pe0gfk}aiK@*!`zIz{n_JwVsvRhvy9Wa$!B zeE|)=LBP5}x)%hm1%OmqqBX$BQ$ig%8`g5GR>nF`8#!%l&DEO?X?Ds`&r?vDx0_He z$dm=*Hk({p@(UGb!4v9iZE{|ad~fHy_l99cdL3|NXeL)}whc1fw^}vZEoSu@d8Q+O ztR~u!%$`c-^C>JtuZZOIAUPD)m70+LraGr2%X;DNqgQc&bP0Jf?e`1MwtO+m5`>Ga zZLYrT7SHMYoL^s{kn33p=j+N!(O$Z?c1pFHS0g4{e)){>JBpEF7-V0K7>^FgDjL|; zqF4iQ7cP-QuAaHtmS!dSRY+3^)2q zVhFQp+hC4J>yt3l-D~aNB~GllrG|JAy5PW&B~HFdyM(+F;!yTtxWMj>trx;8DM>wkg`mXKYF=`J^9VJ2iTxi=Y`^_h!S-imvmDM1o4 zSlhsx6E8<5Oz(uLoB5ci@Mx(^t0f?bz9SZy%(G|&TUW2O+x~)>SHswKz0bs?{fpAv z;ySv7y7Ui?!hGY5bW*9cQ#Tq8to`0W0NNVRcGVV_iP+f&h;30fS#wTYZBr+Nbitjc zQ@W* zZVrM$z-|MfLr4$mVHT?MRhmd_JoHnIvTPR^4zqUqWo?%UTo(o637Y~8Ko3Fi8VyuT z_1x=^qNBn7V9)`S`@sMVBJZe`ll?y^lqhg#(n8qLR3?|nvqEMh$}`TLRtE1A0lz)e zxf$|J3{c76W5P{jAKo1flJx6T!y&2{2FzCUyIs0{X{q%2Wmy(A7Bs7EOO^nc83u=I zUt}y)i|jeEzT297Q5R>J4kXjWXIAckH%P3@u0id)!Be*=BOwbp(+|7au5yS-1MG)> z!lCh(kxDjR*BIMK0`@&u81y|~Ee>0W7iS#TOVh8!PLsJQH3(Qhx#2JE4E6)CVrRhS zYak1|?NypQr&1|Ai3^M7k0sqA)1Z*8`*Tu{m^>C`yD5#EG>a9SmbxBA_ab*NO#p1} z?+;98hq!=`JIDu7U+6YUCBgAH;3nvY^GZL}y4=1(1y#$7evTfIepY_C-q;f4g}Uol zk{6{{N2d>>Xt2-DZ?FkI-*ZvL(ztzLIWsfW=?6gv`%?jW(>*+lL=dXO%Zsc!TEv595LC+M-%LU*5M z6M^4FXH15?Syc3#L|KR?ZhUyd9gRoG{QkhKBepx3?IQKwV2?&{n{wE!Rc)YFR+UNU zVO-TXV1r_EmeRC9@+~sm?!a=vwAMD^e(~C}#jJ>%eZvoj- z%w^(_I}jm^SoxM`E*v;x;I=M2bCv@W8^)|;PfkyxlLvPfQ8Nhl2kZNLo#^EB9i~w# z33u%=JqNLRvw8xQY3ecV-bcy3&L;oIau53Nke5tD z35o-8UH7X(MO6>HjAR5&{ZOY0&adQ?o|6>-E?ljjkv*3?W`~Q24@akiL4@L#2}rR0 z^~gQVuAnllwNv!S8>k+5xPYO{BO#F-d}gl8ipEqLr_7*Y>7SEMWTO?f&l{)iDEGdA zp)u>5gplrqJ0}lE_jx@N+GQF)wto#aDa4|u2tI{>(=mPD(_=FghowP*C1_(3uu>hIyzAh%Yi! z+btd&Ai1_ORN1wY(dZ*Kp?BTrlXq`NgTY#KdiwBP9=>#8rbHJeqbwvdj!z!>aZo0C zF1y4?h?q{9P8f*+@xmEd8aj18YhHc$D0~#%edECii8?sEe){m?DJtZM6sfpP53gry zWD1?ef~>d~2zgA)YmLtEV8wn6z|9uumkR7ycuzT(-Foogo>T)0z(6v}I^_W&vns2D zm&oBH_Vb52p){GD5-gGjGCfl%oxN8g+lmHkkJ7Y}q6BLmv}Smj!5(($6~sL&y9P}4w7 zsjOWm_1sHKwfy&#tH!d%T3jaX8)Y%b}dt0$0P7K#-c8w~Z7EEr4F9rS3P z-OpuLtkM++Rk=wg%63Ns^Bk5((=mDwqD59!sDlN#Ty~ygaTzn8&aNnQ`@|~kCdw9h z>PwU=l{+>saV~5LUf%I+w_p_!I#cB)Pi!Lgq*)~5a6>2TLILiDvg2IzoMoSA{+>J_AiBDK z4E2;r8fFK|pNAi>g=)#AA9c$(!hW9l2#SjofDh zSOnKt06@Tn0Qb2&LISo6T6?zT(95V2wF#gAdT8Y0+k_7DzN|UHpn8xTl7es{1(cmC$+G-mG+E+7rAuM1X$(E1D1%6>F7+DeyCki7r1Om zGul}2YYSYy@Lk!xn$cjL?f3c{r;i`N-H@H0L^)r8m_&8LM__`U{yvWh80f<#FuSjwUmUSN;#oKKE@mvFr? zf&h7@c5dIjyG`h3jFIdngv5W6R$eRxLvaZb#CDnq(Qm%A#NG}PsqBZ;GhS?S(uS{i z#L`*161bR=P@5-?Vl4_b-?UKAFr!o(t!Awv8kqGx?xb@4ULUAqTMZW5S6ssl@ZoU>hD4zjHRq4)$P|CY^`MctM)wAM-cs z7bzL?wF0^6a+B|GSd544GM)T)@GEle3Bx_Ju1v81WJh9F`A!5Wj7KqX{w*ZSJkxk? z8A}R3vyLUn<~m)bD+1oSHQ3Gu^oY4z;ZCnl4nS-Ms4!GV&^GHlCa%kSS0_j-t059iIqy_E!{7!O|-;pM;d7 z!@Bvp#JuMe`3eP#?)AZ-ZYXf$JKYtP-J;zZ51Hh)If~A#Csw|OiBc>z<$_W!$E6}B z)OeS^$86D#t6R*H+~C<2Gno#OTUJrXuQOW+`BiRatv59@maI-o=Q!; zamp4Ex^EFC8_}(L=$RDH^6{QGFyBW4^`%9XdgJt@6RZ1{n8s{GgImKeZ`KZjJrS2J z6>rqR%J)S&LOQ*1@-Cx+Yu+YB*zB=w8Aj(=H0;KQJKf;;7~*o+Rq2xlr?JLw#}&lX zqrz=wTJ#Z70}l63j=SFn0=CiR9~o>pblBPma1P zQVX-=JcK>Ci)^m>s>)t2n0zbZ#SyqXJ-sg*OCp8t zs1qHdUp>ehk*3qz;p*DyBd*EobXMwGb{%kkYh;Z^?rGwEvE$eIC_@PBZt*@7Cbzqh zaXYykR0&@_yGn>;&7QgLo~ri_!USQx7%17g6Mt&uP<@8m(GlOt2)ew}^U#XeU2I{3 zuRMr(gDA$lAzgU5{T2j5R@{fMwanHqvM_p7V96ebN6-T|davJq+(l;TARcmS`>XId zl3XV|1fR`3io#QIzjJYe4gNZbHrv?(e?wAW+f6ZL%4wOlYmcd9ImYogR$-S z&QH2LQDv_WMzTF570KeP+{r4l8}&jKl%7dOW^IQXA$FA$@-QjMhx;aX(4fD@3gz^k9Hv>m zF@o_sYRqiyvRV-2ur>}kxxL3pM&IDUD2Q3Ejc%D0*?#gZ48UL;lclyef>itxP`iXH<%5#F+35;CQhCR zj_#qyiX2R=jW|bAVFM0kx_ql;eVd(VZeQ3Qk9dtfBlzBj!dGR(cALdWZx8mpOKTh$9<9%f}E6>)lGiv z9(@#bIVmwABFYrRLEKS@2yC;%ITk-0grtd8xv>pFiH@z^9$zIA0fP?b5Cc<3$BzzU zm8~`NZ8@|h*+UFW2SI$u5R=FEe)8nd_R6=3f!*G=2_yFM~6w;j@e2_oA8L+vEei%n)XN!-yE-#KdeBmR#xgU*o z4?q5}|KuvKoI702Kw}gguEgJc&GN;EIA{3=-VQhWo3B6W@{vmy+l{&ga}vJPCQzso z4%om%AEj+3222-0f6+4Ed89@^bKVYEVf?H>kLdPm}m-pfDH9k4~fTS>xi@Nn7 z8AiLu?kK^t#0RQ?hC&NWzc(7~Mz4)Ve8tQ%DZ$lB7v%4@ijQA7`)ES`eSyEqzlRsbVlrI%AL{e!C+X|`r`2y=zd1K|^Rr*# zxBrySj9>rqo!V<}T(EBc=D&Rzxcq)FZ>(Ukubx$ZQT=80S@l=cuc(Tus^`?_zo7n_`c?He)UOdrtjN{hQh!_hy81inH`Md0 zsg~5=Rew+Yef67o;DPm(-WlzgPc(wkuS->UH%e>OZUhs{WhWJEv}`+v-hx Ldx!7Ie@*>wQnihE literal 0 HcmV?d00001 diff --git a/macros/EDS.GSOS.MACS.S b/macros/EDS.GSOS.MACS.S index ef91b86..d78a13b 100644 --- a/macros/EDS.GSOS.MACS.S +++ b/macros/EDS.GSOS.MACS.S @@ -18,228 +18,229 @@ ************************************************** -_AddNotifyProcGS mac - CallGSOS $2034;]1 - <<< +_AddNotifyProcGS mac + CallGSOS $2034;]1 + <<< -_BeginSessionGS mac - CallGSOS $201D;]1 - <<< +_BeginSessionGS mac + CallGSOS $201D;]1 + <<< -_BindIntGS mac - CallGSOS $2031;]1 - <<< +_BindIntGS mac + CallGSOS $2031;]1 + <<< -_ChangePathGS mac - CallGSOS $2004;]1 - <<< +_ChangePathGS mac + CallGSOS $2004;]1 + <<< -_ClearBackupBitGS mac - CallGSOS $200B;]1 - <<< +_ClearBackupBitGS mac + CallGSOS $200B;]1 + <<< -_CloseGS mac - CallGSOS $2014;]1 - <<< +_CloseGS mac + CallGSOS $2014;]1 + <<< -_CreateGS mac - CallGSOS $2001;]1 - <<< +_CreateGS mac + CallGSOS $2001;]1 + <<< -_DControlGS mac - CallGSOS $202E;]1 - <<< +_DControlGS mac + CallGSOS $202E;]1 + <<< -_DelNotifyProcGS mac - CallGSOS $2035;]1 - <<< +_DelNotifyProcGS mac + CallGSOS $2035;]1 + <<< -_DestroyGS mac - CallGSOS $2002;]1 - <<< +_DestroyGS mac + CallGSOS $2002;]1 + <<< -_DInfoGS mac - CallGSOS $202C;]1 - <<< +_DInfoGS mac + CallGSOS $202C;]1 + <<< -_DReadGS mac - CallGSOS $202F;]1 - <<< +_DReadGS mac + CallGSOS $202F;]1 + <<< -_DRenameGS mac - CallGSOS $2036;]1 - <<< +_DRenameGS mac + CallGSOS $2036;]1 + <<< -_DStatusGS mac - CallGSOS $202D;]1 - <<< +_DStatusGS mac + CallGSOS $202D;]1 + <<< -_DWriteGS mac - CallGSOS $2030;]1 - <<< +_DWriteGS mac + CallGSOS $2030;]1 + <<< -_EndSessionGS mac - CallGSOS $201E;]1 - <<< +_EndSessionGS mac + CallGSOS $201E;]1 + <<< -_EraseDiskGS mac - CallGSOS $2025;]1 - <<< +_EraseDiskGS mac + CallGSOS $2025;]1 + <<< -_ExpandPathGS mac - CallGSOS $200E;]1 - <<< +_ExpandPathGS mac + CallGSOS $200E;]1 + <<< -_FlushGS mac - CallGSOS $2015;]1 - <<< +_FlushGS mac + CallGSOS $2015;]1 + <<< -_FormatGS mac - CallGSOS $2024;]1 - <<< +_FormatGS mac + CallGSOS $2024;]1 + <<< -_FSTSpecificGS mac - CallGSOS $2033;]1 - <<< +_FSTSpecificGS mac + CallGSOS $2033;]1 + <<< -_GetBootVolGS mac - CallGSOS $2028;]1 - <<< +_GetBootVolGS mac + CallGSOS $2028;]1 + <<< -_GetDevNumberGS mac - CallGSOS $2020;]1 - <<< +_GetDevNumberGS mac + CallGSOS $2020;]1 + <<< -_GetDirEntryGS mac - CallGSOS $201C;]1 - <<< +_GetDirEntryGS mac + CallGSOS $201C;]1 + <<< -_GetEOFGS mac - CallGSOS $2019;]1 - <<< +_GetEOFGS mac + CallGSOS $2019;]1 + <<< -_GetFileInfoGS mac - CallGSOS $2006;]1 - <<< +_GetFileInfoGS mac + CallGSOS $2006;]1 + <<< -_GetFSTInfoGS mac - CallGSOS $202B;]1 - <<< +_GetFSTInfoGS mac + CallGSOS $202B;]1 + <<< -_GetLevelGS mac - CallGSOS $201B;]1 - <<< +_GetLevelGS mac + CallGSOS $201B;]1 + <<< -_GetMarkGS mac - CallGSOS $2017;]1 - <<< +_GetMarkGS mac + CallGSOS $2017;]1 + <<< -_GetNameGS mac - CallGSOS $2027;]1 - <<< +_GetNameGS mac + CallGSOS $2027;]1 + <<< -_GetPrefixGS mac - CallGSOS $200A;]1 - <<< +_GetPrefixGS mac + CallGSOS $200A;]1 + <<< -_GetRefInfoGS mac - CallGSOS $2039;]1 - <<< +_GetRefInfoGS mac + CallGSOS $2039;]1 + <<< -_GetRefNumGS mac - CallGSOS $2038;]1 - <<< +_GetRefNumGS mac + CallGSOS $2038;]1 + <<< -_GetStdRefNumGS mac - CallGSOS $2037;]1 - <<< +_GetStdRefNumGS mac + CallGSOS $2037;]1 + <<< -_GetSysPrefsGS mac - CallGSOS $200F;]1 - <<< +_GetSysPrefsGS mac + CallGSOS $200F;]1 + <<< -_GetVersionGS mac - CallGSOS $202A;]1 - <<< +_GetVersionGS mac + CallGSOS $202A;]1 + <<< -_JudgeNameGS mac - CallGSOS $2007;]1 - <<< +_JudgeNameGS mac + CallGSOS $2007;]1 + <<< -_NewLineGS mac - CallGSOS $2011;]1 - <<< +_NewLineGS mac + CallGSOS $2011;]1 + <<< -_NullGS mac - CallGSOS $200D;]1 - <<< +_NullGS mac + CallGSOS $200D;]1 + <<< -_OpenGS mac - CallGSOS $2010;]1 - <<< +_OpenGS mac + CallGSOS $2010;]1 + <<< -_OSShutDownGS mac - CallGSOS $2003;]1 - <<< +_OSShutDownGS mac + CallGSOS $2003;]1 + <<< -_QuitGS mac - CallGSOS $2029;]1 - <<< +_QuitGS mac + CallGSOS $2029;]1 + <<< -_ReadGS mac - CallGSOS $2012;]1 - <<< +_ReadGS mac + CallGSOS $2012;]1 + <<< -_ResetCacheGS mac - CallGSOS $2026;]1 - <<< +_ResetCacheGS mac + CallGSOS $2026;]1 + <<< -_SessionStatusGS mac - CallGSOS $201F;]1 - <<< +_SessionStatusGS mac + CallGSOS $201F;]1 + <<< -_SetEOFGS mac - CallGSOS $2018;]1 - <<< +_SetEOFGS mac + CallGSOS $2018;]1 + <<< -_SetFileInfoGS mac - CallGSOS $2005;]1 - <<< +_SetFileInfoGS mac + CallGSOS $2005;]1 + <<< -_SetLevelGS mac - CallGSOS $201A;]1 - <<< +_SetLevelGS mac + CallGSOS $201A;]1 + <<< -_SetMarkGS mac - CallGSOS $2016;]1 - <<< +_SetMarkGS mac + CallGSOS $2016;]1 + <<< -_SetPrefixGS mac - CallGSOS $2009;]1 - <<< +_SetPrefixGS mac + CallGSOS $2009;]1 + <<< -_SetStdRefNumGS mac - CallGSOS $203A;]1 - <<< +_SetStdRefNumGS mac + CallGSOS $203A;]1 + <<< -_SetSysPrefsGS mac - CallGSOS $200C;]1 - <<< +_SetSysPrefsGS mac + CallGSOS $200C;]1 + <<< -_UnbindIntGS mac - CallGSOS $2032;]1 - <<< +_UnbindIntGS mac + CallGSOS $2032;]1 + <<< -_VolumeGS mac - CallGSOS $2008;]1 - <<< +_VolumeGS mac + CallGSOS $2008;]1 + <<< -_WriteGS mac - CallGSOS $2013;]1 - <<< +_WriteGS mac + CallGSOS $2013;]1 + <<< + +CallGSOS mac + jsl $E100A8 + dw ]1 + adrl ]2 + <<< -CallGSOS mac - jsl $E100A8 - dw ]1 - adrl ]2 - <<< diff --git a/package.json b/package.json index 1b06b7f..0cb033b 100644 --- a/package.json +++ b/package.json @@ -6,13 +6,14 @@ "config": { "merlin32": "C:\\Programs\\IIgsXDev\\bin\\Merlin32.exe", "cadius": "C:\\Programs\\IIgsXDev\\bin\\Cadius.exe", - "gsport": "C:\\Programs\\gsport\\gsport_0.31\\GSPort.exe" + "gsport": "C:\\Programs\\gsport\\gsport_0.31\\GSPort.exe", + "macros": "C:\\Programs\\BrutalDeluxe\\Merlin32\\Library" }, "scripts": { "test": "npm run build && build-image.bat %npm_package_config_cadius% && %npm_package_config_gsport%", "build": "npm run build:tool && npm run build:test", - "build:test": "%npm_package_config_merlin32% -V macros test/App.s", - "build:tool": "%npm_package_config_merlin32% -V C:\\Programs\\BrutalDeluxe\\Merlin32\\Library src\\Tool.s", + "build:test": "%npm_package_config_merlin32% -V %npm_package_config_macros% test\\App.s", + "build:tool": "%npm_package_config_merlin32% -V %npm_package_config_macros% src\\Tool.s", "build:watch": "watch \"npm run build\" src" }, "repository": { diff --git a/src/GTE.Line.s b/src/GTE.Line.s index c4eac1b..ae9e3ca 100644 --- a/src/GTE.Line.s +++ b/src/GTE.Line.s @@ -37,7 +37,7 @@ ; things to be fast and complex things to not be slow. That is, the developer has a lot ; of control over the time taken to render the full screen based on how complex it can be. ; -; That said, I'll cover three cases, ranging from the simple (a single background) and +; That said, I'll cover three cases, ranging from the simple (a single background) to the ; complex (2 backgrounds, 50% mixed). The even- and odd-aligned cases are also broken out. ; ; Simple case; all elements of the code field are PEA instructions @@ -74,14 +74,16 @@ ; - Final JMP to next line = 3 cycles ; -- total of 1,517 cycles / line of which 700 were spent doing necessary instructions ; -- theoretically about 8 fps - +; +; Odd: + MX %00 entry_1 ldx #0000 ; patch with the address of the direct page tiles. Fixed. entry_2 ldy #0000 ; patch with the address of the line in the second layer. Set when BG1 scroll position changes. entry_3 lda #0000 ; patch with the address of the right edge of the line. Set when origin position changes. tcs entry_jmp jmp $2000 - dfb 00 ; of the screen is odd-aligned, then the opcode is set to + dfb 00 ; if the screen is odd-aligned, then the opcode is set to ; ; $AF to convert to a LDA long instruction. This puts the ; ; first two bytes of the instruction field in the accumulator ; ; and falls through to the next instruction. @@ -117,7 +119,7 @@ r_is_pea xba ; fast code for PEA r_is_jmp sep #$41 ; Set the C and V flags which tells a snippet to push only the low byte ldal entry_jmp+1 stal r_jmp_patch+1 -r_jmp_patch dfb $4C,$00,$00 ; Jump back to address in entry_jmp (this takes 13 cycles, is there a better way?) +r_jmp_patch dfb $4C,$00,$00 ; Jump back to address in entry_jmp (this takes 16 cycles, is there a better way?) ; This is the spot that needs to be page-aligned. In addition to simplifying the entry address ; and only needing to update a byte instad of a word, because the code breaks out of the @@ -132,7 +134,7 @@ loop lup 82 ; +6 Set up 82 PEA instructions, which is 32 jmp loop ; +252 Ensure execution continues to loop around jmp even_exit ; +255 -odd_exit lda #patch ; This operabd field is *always* used to hold the original 2 bytes of the code field +odd_exit lda #0000 ; This operand field is *always* used to hold the original 2 bytes of the code field ; ; that are replaced by the needed BRA instruction to exit the code field. When the ; ; left edge is odd-aligned, we are able to immediately load the value and perform ; ; similar logic to the right_odd code path above @@ -150,12 +152,12 @@ l_is_pea xba pha rep #$30 bra even_exit -r_is_jmp sep #$01 ; Set the C flag (V is always cleared at this point) which tells a snippet to push only the high byte +l_is_jmp sep #$01 ; Set the C flag (V is always cleared at this point) which tells a snippet to push only the high byte ldal entry_jmp+1 - stal r_jmp_patch+1 -r_jmp_patch dfb $4C,$00,$00 ; Jump back to address in entry_jmp (this takes 13 cycles, is there a better way?) + stal l_jmp_patch+1 +l_jmp_patch dfb $4C,$00,$00 ; Jump back to address in entry_jmp (this takes 13 cycles, is there a better way?) -even_exit jmp next_entry ; Jump to the next line. We set up the blitter to do 8 or 16 lines at a time +even_exit jmp $0000 ; Jump to the next line. We set up the blitter to do 8 or 16 lines at a time ; ; before restoring the machine state and re-enabling interrupts. This makes ; ; the blitter interrupt friendly to allow things like music player to continue ; ; to function. @@ -205,4 +207,17 @@ even_exit jmp next_entry ; Jump to the next line. We set up the blitte ; ; The slow paths have 21 and 22 cycles for the right and left ; ; odd-aligned cases respectively. +snippets ds 32*82 + + + + + + + + + + + + diff --git a/src/GTE.Main.s b/src/GTE.Main.s index 0a71ad5..b41dd61 100644 --- a/src/GTE.Main.s +++ b/src/GTE.Main.s @@ -1 +1 @@ - RTL + RTL diff --git a/src/Tool.s b/src/Tool.s index d656655..a859af0 100644 --- a/src/Tool.s +++ b/src/Tool.s @@ -1,13 +1,15 @@ *-------------------------------------* * GTE Tool * *-------------------------------------* - DSK GTETool - TYP $BA - XPL + DSK GTETool + TYP $BA + XPL *-------------------------------------* * Segment #1 * *-------------------------------------* - ASM GTE.Main.s - SNA Main + ASM GTE.Main.s + ASM GTE.Line.s + SNA Main + diff --git a/test/App.Init.s b/test/App.Init.s new file mode 100644 index 0000000..c4651b8 --- /dev/null +++ b/test/App.Init.s @@ -0,0 +1,73 @@ +; Initialize the system for fun! +; +; Mostly memory allocation +; +; * 13 banks of memory for the blitter +; * 1 bank of memory for the second background +; * 1 bank of memory for the second background mask +; +; * $01/2000 - $01/9FFF for the shadow screen +; * $00/2000 - $00/9FFF for the fixed background +; +; * 10 pages of direct page in Bank $00 +; - 1 page for scratch space +; - 1 page for pointer to the second background +; - 8 pages for the dynamic tiles + + mx %00 + +MemInit PushLong #0 ; space for result + PushLong #$008000 ; size (32k) + PushWord UserId + PushWord #%11000000_00010111 ; Fixed location + PushLong #$002000 + _NewHandle ; returns LONG Handle on stack + plx ; base address of the new handle + pla ; high address 00XX of the new handle (bank) + _Deref + sta Buff00+2 + stx Buff00 + + PushLong #0 ; space for result + PushLong #$008000 ; size (32k) + PushWord UserId + PushWord #%11000000_00010111 ; Fixed location + PushLong #$012000 + _NewHandle ; returns LONG Handle on stack + plx ; base address of the new handle + pla ; high address 00XX of the new handle (bank) + _Deref + sta Buff01+2 + stx Buff01 + + PushLong #0 ; space for result + PushLong #$000A00 ; size (10 pages) + PushWord UserId + PushWord #%11000000_00010101 ; Page-aligned, fixed bank + PushLong #$000000 + _NewHandle ; returns LONG Handle on stack + plx ; base address of the new handle + pla ; high address 00XX of the new handle (bank) + _Deref + sta ZeroPage+2 + stx ZeroPage + + rts + +Buff00 ds 4 +Buff01 ds 4 +ZeroPage ds 4 + + + + + + + + + + + + + + diff --git a/test/App.Main.s b/test/App.Main.s index 2961519..04d2bcc 100644 --- a/test/App.Main.s +++ b/test/App.Main.s @@ -1,6 +1,278 @@ - USE EDS.GSOS.MACS - - _QuitGS qtRec +; Test program for graphics stufff... + + rel + + use Util.Macs.s + use Locator.Macs.s + use Mem.Macs.s + use Misc.Macs.s + put ..\macros\App.Macs.s + put ..\macros\EDS.GSOS.MACS.s + + mx %00 + +; Typical init + + phk + plb + +; Tool startup + + _TLStartUp ; normal tool initialization + pha + _MMStartUp + _Err ; should never happen + pla + sta MasterId ; our master handle references the memory allocated to us + ora #$0100 ; set auxID = $01 (valid values $01-0f) + sta UserId ; any memory we request must use our own id + +; Start up the graphics engine... + + jsr MemInit + +; Load a picture and copy it into Bank $E1. Then turn on the screen. + + jsr AllocOneBank ; Alloc 64KB for Load/Unpack + sta BankLoad ; Store "Bank Pointer" + + ldx #ImageName ; Load+Unpack Boot Picture + jsr LoadPicture ; X=Name, A=Bank to use for loading + + lda BankLoad ; get address of loaded/uncompressed picture + clc + adc #$0080 ; skip header? + sta :copySHR+2 ; and store that over the 'ldal' address below + ldx #$7FFE ; copy all image data +:copySHR ldal $000000,x ; load from BankLoad we allocated + stal $E12000,x ; store to SHR screen + dex + dex + bpl :copySHR + + jsr GrafOn + jsr WaitForKey + +; Deallocate all of our memory + PushWord UserId + _DisposeAll + +Exit _QuitGS qtRec + + bcs Fatal +Fatal brk $00 + +WaitForKey sep #$30 +:WFK ldal $00C000 + bpl :WFK + stal $00C010 + rep #$30 + rts + +**************************************** +* Fatal Error Handler * +**************************************** +PgmDeath tax + pla + inc + phx + phk + pha + bra ContDeath +PgmDeath0 pha + pea $0000 + pea $0000 +ContDeath ldx #$1503 + jsl $E10000 + +; Graphic screen initialization + +GrafInit ldx #$7FFE + lda #0000 +:loop stal $E12000,x + dex + dex + bne :loop + rts + + +GrafOn sep #$30 + lda #$81 + stal $00C029 + rep #$30 + rts + +; Bank allocator (for one full, fixed bank of memory. Can be immediately deferenced) + +AllocOneBank PushLong #0 + PushLong #$10000 + PushWord UserId + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle ; returns LONG Handle on stack + plx ; base address of the new handle + pla ; high address 00XX of the new handle (bank) + xba ; swap accumulator bytes to XX00 + sta :bank+2 ; store as bank for next op (overwrite $XX00) +:bank ldal $000001,X ; recover the bank address in A=XX/00 + rts + +; Graphics helpers + +LoadPicture jsr LoadFile ; X=Nom Image, A=Banc de chargement XX/00 + bcc :loadOK + brl Exit +:loadOK jsr UnpackPicture ; A=Packed Size + rts + + +UnpackPicture sta UP_PackedSize ; Size of Packed Data + lda #$8000 ; Size of output Data Buffer + sta UP_UnPackedSize + lda BankLoad ; Banc de chargement / Decompression + sta UP_Packed+1 ; Packed Data + clc + adc #$0080 + stz UP_UnPacked ; On remet a zero car modifie par l'appel + stz UP_UnPacked+2 + sta UP_UnPacked+1 ; Unpacked Data buffer + + PushWord #0 ; Space for Result : Number of bytes unpacked + PushLong UP_Packed ; Pointer to buffer containing the packed data + PushWord UP_PackedSize ; Size of the Packed Data + PushLong #UP_UnPacked ; Pointer to Pointer to unpacked buffer + PushLong #UP_UnPackedSize ; Pointer to a Word containing size of unpacked data + _UnPackBytes + pla ; Number of byte unpacked + rts + +UP_Packed hex 00000000 ; Address of Packed Data +UP_PackedSize hex 0000 ; Size of Packed Data +UP_UnPacked hex 00000000 ; Address of Unpacked Data Buffer (modified) +UP_UnPackedSize hex 0000 ; Size of Unpacked Data Buffer (modified) + +; Basic I/O function to load files + +LoadFile stx openRec+4 ; X=File, A=Bank/Page XX/00 + sta readRec+5 + +:openFile _OpenGS openRec + bcs :openReadErr + lda openRec+2 + sta eofRec+2 + sta readRec+2 + + _GetEOFGS eofRec + lda eofRec+4 + sta readRec+8 + lda eofRec+6 + sta readRec+10 + + _ReadGS readRec + bcs :openReadErr + +:closeFile _CloseGS closeRec + clc + lda eofRec+4 ; File Size + rts + +:openReadErr jsr :closeFile + nop + nop + + PushWord #0 + PushLong #msgLine1 + PushLong #msgLine2 + PushLong #msgLine3 + PushLong #msgLine4 + _TLTextMountVolume + pla + cmp #1 + bne :loadFileErr + brl :openFile +:loadFileErr sec + rts + +msgLine1 str 'Unable to load File' +msgLine2 str 'Press a key :' +msgLine3 str ' -> Return to Try Again' +msgLine4 str ' -> Esc to Quit' + +; Data storage +ImageName strl '1/test.pic' +MasterId ds 2 +UserId ds 2 +BankLoad hex 0000 + +openRec dw 2 ; pCount + ds 2 ; refNum + adrl ImageName ; pathname + +eofRec dw 2 ; pCount + ds 2 ; refNum + ds 4 ; eof + +readRec dw 4 ; pCount + ds 2 ; refNum + ds 4 ; dataBuffer + ds 4 ; requestCount + ds 4 ; transferCount + +closeRec dw 1 ; pCount + ds 2 ; refNum + +qtRec adrl $0000 + da $00 + + put App.Init.s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -qtRec DW 0 diff --git a/test/App.s b/test/App.s index 749e8da..9cbe4b6 100644 --- a/test/App.s +++ b/test/App.s @@ -1,13 +1,30 @@ -*-------------------------------------* -* GTE Tool * -*-------------------------------------* - DSK GTETestApp - TYP $B3 ; S16 file - XPL + TYP $B3 ; S16 file + DSK GTETestApp + + ASM App.Main.s + SNA Main + + + + + + + + + + + + + + + + + + + + + + + -*-------------------------------------* -* Segment #1 * -*-------------------------------------* - ASM App.Main.s - SNA Main