From 760580d73323f17832455bb58357ca055247ea9b Mon Sep 17 00:00:00 2001 From: Lucas Scharenbroich Date: Sun, 18 Jul 2021 08:59:19 -0500 Subject: [PATCH] Tweak file loading functions --- assets/donut-plains-1-6-color.png | Bin 0 -> 1557 bytes assets/donut-plains-1png.png | Bin 0 -> 1716 bytes assets/donut-plains-2-8-color-shift.png | Bin 0 -> 2666 bytes assets/donut-plains-2-8-color.png | Bin 0 -> 2676 bytes assets/donut-plains-2.png | Bin 0 -> 2541 bytes build-image.bat | 1 + package.json | 2 +- src/Actions.s | 4 + src/App.Main.s | 293 ++++++++++++++++++++---- src/blitter/DirectPage.s | 3 + tools/pngtoiigs.js | 17 +- 11 files changed, 274 insertions(+), 46 deletions(-) create mode 100644 assets/donut-plains-1-6-color.png create mode 100644 assets/donut-plains-1png.png create mode 100644 assets/donut-plains-2-8-color-shift.png create mode 100644 assets/donut-plains-2-8-color.png create mode 100644 assets/donut-plains-2.png diff --git a/assets/donut-plains-1-6-color.png b/assets/donut-plains-1-6-color.png new file mode 100644 index 0000000000000000000000000000000000000000..99bfb8b18fd5a09334df866eadfbab448101307f GIT binary patch literal 1557 zcmai!X;4#F6vq=5mtZ6yA+o~@U}-=EOeh%k7xF+B4XA|GXe1_V5|G^mI%vWc9$`y^ zFvW<>AhZP3iMYjO5(J}S3ks-Mq8JMnaiIu8gP%In54|(z-gD;O`Ok08|IFp@ilCxV z<|qULfewK{8UlfYwE4qzy4sz_TPM~Y$SfK)5YeTw)MyJmRzP?F0?{onSYqgFYvWyE z(Udo{e-nf4m5niFaaNOZD&i56L-g>|-mX6a(X$YUjki_R zwmWKQQDxXjmV?$&ACRy@#7rk_0$1?jl(%3sPsc6(Y&a{?-a~pWeTrY)v)j z@krKeJ^RZ7BdSF;;V_r6UcztmZI%=ABwv*;#XVo`e!aE9%;_3=tVL&MvrnMf?QrJy zfXKm|h+4B9^J~PW{bNh1T$sTvExX$PXkh|g>k#kDu+AU|b0VBQkU|HbM%9{ZgQ4%Y zxNjubMxQ-!KEFJY%Nw-B&{KC{L?;!Y`;&3ACy+Bn1V7YR%kxkE&UMc?Oh6P3lcPS` zyIs^_`HY6^`J-CDpz3k0$=++-*@yZ^(v=~cu+E#JwHD-g+acZ=d>K=4 z3Hq#CXPMWdS2JWD5G=D{6-;E&uCyR`=%CVxwJQaO2(HeRO}u* ztU&J=Gna&((j-af46yd1$W_Yz!EoPg$MV2Vqa7WJY9NZAn5k}}49ylPJrmFBmXC_U zZ|9Rh@8S=SdCruX!M2y=_^K}W7(Al%$4jY#h4)+9pyQevrOZSGwHhZeA0KH(!v#!W z>LlJaRl1zsU{c=9ie5`}9Hg)+9VX^G(ydJIhY`4d-Xhld~>0U#njTirj+| zKfjJ`gbH6)K|s)r%3)nP6GNih^Nz>3tuo-lW}6A!RH zZKg55e?+KiD#U2?RCbiN=1*}(BT8$ZQ$V9I?gRTZ6Q0NX2e zr>Wc*BPJaP#aRZhbLbai$~%t7&W@lw^3pX3OC)imF!Xc=6?_lJ`}mG}4-H=F&n?|% zHD#J2;m2qD#as`Rxb021tMM5HytZbSqdmoNu`)Cs7^?qsaGk7JxoUYuU0f;&L)Sfi zltj-?t?ZT-qyp|oHQ0*UUoe^twPN0HL~d&A1$ae%P^hrMIrSyTp#>fI`Bz9*40$ee zVcI6g)m}8p)+;v7Np?e<370Yb)@iUM?y3#lfOp}J1CS;xkAzWsK}@vMx-V z*vAr56vLYd9STPvsv%J;iGo%BGCq`mSG3(VU$7yQ@>eYx({i|CG|vRJ7QEFdXLzf^ zoAGG<5-@_e$X=;46=@NRmEd(5S=1nt8?Kd3Td;rHpInwy;~ zw~yto6!xru-bYYar@nniDY3$p>onw7F-?74z5xy^4FhmC!S(oVLIZ$Sv#t+#UzD?L crKk@}2H~gm&a?USveh3ggc1RE1@15T2Q62tJOBUy literal 0 HcmV?d00001 diff --git a/assets/donut-plains-1png.png b/assets/donut-plains-1png.png new file mode 100644 index 0000000000000000000000000000000000000000..e370f1b14b69639956a6dd0a45cb3dc445f8fc04 GIT binary patch literal 1716 zcma)6dpMM7AAaYXrU}U@BWfKcXVMxX=V*peh-u1TK4sa4oW~)9C@VW-+TLF5AY+kf zrL`SQVwtRL%gYR9R1C$sqK|cG4Qg6pUtRmhUf2HfJ=gUd?(4aq=ed8s`*%H@zyKdr zWj$p8091X+L<#_)$jJKXHZ(F)*xM?Q36(w5bPT0 zMxN`{DqEt&~I#NdbTzotqt{ZGHqfw-x0}^rU8l&+|Fy6`!k!Yx-v&ea$zd|Tb(k#YJJu#r|<|S z%8m8Rs62Z%Z98+uacpmSKKx-h4Cm|UU|_^_&yH2GFMu)2qeH>-MbpsHZTOfW1hdKQ zZ6CHkOB^drybcPo8c6(A@Ny)K%|G`3`Z&WbQGrW#eVrgt{Jl=HtA}657@IF$__6A`wtWA> zR79cmJ6O-{TK1|Isdu65v{SGlffwtvd#A4dm?ht~#J?R({iNyun;OU9;$^iCJ((Rp zgLJMYz8JK5+X>=dwBS|PlAQHS5x(gm*80sUo$`&32RJ3a3%os%Z06<)C*sQ{)fbEh zz^-zvx|8R^($GioD_Kq8XT$ydulE<0yuTzb@HXf^5i!(wS>WFJT+i|WU(Akj(lGm+ zAW5#{n7C~JpC+E=*-O7}-g-?!xTPMd7AHSPlI9K0=yjD_8&lHT@_BMCV%JPqFNWw{ z+^ig7*>935DBR;WPRl7E-}sU4wOIx-n^X?Qv4VFI{x+kK96xjs$3%U~RE$;WaGW7i zm1bPwXZpf3OvbXtOONSVMO%0rjuO<+iGo=u{`hsDbqq)vTPH$|qbB!DstgGM;}jdi z&9d8eJlRI>F6I2|L4_-GA5wMS;VGkO)tBgpCNqSP*GR94!)`Vmjq5Qj=A=D6nXb=e zFCXtx4()xSt{Y>nqcM{iHCi$akTqxLfKO;JreQfzt~WC#JH5{ zBaoP;C{xI>EEA~e&z8HnwpFY@7)1G0t5|KQs>0FbJiY9S98>k7v`zTSW9R67gAew8H&Q zmF{r;(bCf_v-9m=8tWjcrYj gzA$8JxBt9>*8Zl{p#VFZu=#oVk^+dgy-w%-1)N(2-T(jq literal 0 HcmV?d00001 diff --git a/assets/donut-plains-2-8-color-shift.png b/assets/donut-plains-2-8-color-shift.png new file mode 100644 index 0000000000000000000000000000000000000000..60a4fe4be325a2a7de8458fac3cc7ed4e1e1dd9c GIT binary patch literal 2666 zcmZ`*dpHwpA0F9Ql-F7g!(wA;sl-Y|Y-StDsX3&=%N$Cjj5jlfl3p!l7SfzXyg5@V z$ycER*2*!*B0d`!&aGAqyaBL}1#I%$dJ0z9D`&wMNhhcPz}A<)r^0p<=PPpVqZ1xWj`g1}P>q^9 zsOI>-`C0VF;l1{!+8|0_-JBSgLjAHd!Tv?onnIK;cH1wHiP>T>|M*0ZyXrHYKzny! z87GkBu8^&&zTRtXlRtY63yy;?aoCT2zzfyYCW zBrGgeLq(NcYJX>^xr?{rX~QV!j5Fex*A=w6KpdR$iqd}3L?mJFraFlZv+|6c|0L4s^PScFazS1ks4Uobk>xj6U8;Lpku!Qe2&rD!qqo5M@eqOf|$>T42 zS^1QXHuv`PaV^KE&M{|!vn?kDK`m}m(afdf_{NW2icF(hwxRf6M{F0RBexiVNuHNXDV*KOmy8s_1cDiMZv` zmmiR6apk+wpuQuyHy_O%E$04XUdlcwSUa_=uXbNaVuqlG5LDZ7E&(jHAm7G7B5bGU zjy@4r*Yw0%LcWfmldcd5xFbGO>b-nYPgs@Sds1pk+qfm#=!=A$5kcvB4g#;6<_KXj zepHk5q(=+w@aiWO=DRi&cR9cD8tj|?SbGd=AoA0v`M&;&^P(?$wjWT$c^FOF^iNE+ z^V$GEpgJ5Coy3xcbKZ5<|F?iBzWwPu`aBb%+?lelc!-X137z&S5ua?D;+!PM!FE}G z#HRNA)W6-4_2%6=x<7tjqYb^u*+&?vtdCm>7=|}EB_-;o$~dE!E8ewLZqNwbrRK9; z^%P6H{QS)7+)C57-nGGm2|5`i17n^JPv=Him`}oTrVho8cf#FJy)#Cg^>TkzETcE# z%dX!)3y&E(l(`c7A7Q#@HJiS#ip#F(4M6$-M&rPf>D;*KAe z9_po369}O-9t@iuzEvcN%)_FC!jdzcKC;4ctkFk%v3+63E)-qvQ)->ybWt4J31m$_ zYnzd;C%^X#4XsYAa!lloLzm&o$1=`R%3kW_pxvJHizKD@#zkt(bh3^QP2hl7Uhw-X zg0{Yne^q?%@qPksH?wfVtE}&iv(Ro%d8%^bnMW{P&w}P}7lP^m?y+K#8WMA+eU#H| z5<5R9g5CyWDI;b79{#*%C4Q9WCGg~UgPK8D*jSg|toWt)fKM24grLFGzD;1ZN%$Z88K@ID{$y?H$W;cCdr zi)2K%tnh5M-dtZytGDnC)`<(?BzRYnC2j}{uA~W0<=Sc1mA_TG?VI|^CzPueBy0K} z?_jj3UbyLA2L-XR-%)BEK)L_Y`M07XUc#G|g|Xwu{92{_y)y`F5NB@JPPU+)u=sXN ztor()WL73#A(b}^J=*V{nLJGtL|`D#Q1TAfXpgrj%}dgBLiP*`<3zpThwcoqznU{s zKIJyKZ3*(TVoA2JHFa3F24gv}fJ0)UI(|<`?KZ0+hj4mHDU;3M@SM z$9Pu&)T$HdIame z8rRfy2c|tEx``@?H4|rzycem@iHaZB*XP#%`ch0Jcb|Ed(I)mfH}ETAem~1oW(Yg8 zFQU8J{md`mRYO*#!BxM;SNT|~&ZE;Bv{C5|Vm3X!{d@AWiLoU~aFSR9WOKKlin;I< z8)g_k)V}cGXCli)V)Q#RTMDo9zbS)!v5my+*xQ8Uhb2w7=Jmj;+~@H9KQF-;M{PcD zqIC(S4k7L8xi5nJg)=nQ?tq`PP=@dakxgR-U8Kjq=r%K%G>a>GFB#&hODdMt5mfkT z_Gp;~Fk!l&ljAwR<`F5Cb{cp8q1?u7J&ZIVr?I+`g`^%q0!w`!|#y*eU<|0RT>p LuJ}4!VDkR}zxWG4 literal 0 HcmV?d00001 diff --git a/assets/donut-plains-2-8-color.png b/assets/donut-plains-2-8-color.png new file mode 100644 index 0000000000000000000000000000000000000000..e084fe6c0f4bdecc19700893cd26a4ec11480125 GIT binary patch literal 2676 zcmbtW`#aP98(&0G#7MO?GWljna+pWojc1zAHdam}I*81UZ2tFg5~`KvnJAHMr!S^V1m$3`9rnt}?kJ(|vMp5_DAN z;)&P;`@=fe#WF`to@Ey+5==UhiZvpfJ&pWjRy?LdAzCMXvyi&#`*#QaZZ1pO`8eKG zjii8#H-5gMBJ+R8Uy0GC?|Z8GL?(`E1SP*1>MWAsWA{EZh_U)zA1h}BTpryc$x~M! zPZ~Uzs_CT$T+RWF+!b#80Xi1g}d0k`$5g zCnFs^Z5{qNYBxpqL{}u2rZt=IS4_~}`9Id<^^{*tgvq+Gsvkplx~W_HoG5tNjtflc zg|ET#hZUGr{xnjP3i86ArqIxnllyKS(ONj+t1Tzixpd?S!T@v5N6OVKZ6*MJ{C0a?vW==3d4B^4DL z7bnT^wHC*<_P*O^7U`@*kFl27I?EjSLi@3OqTo#oHet(>snn1+v!uQ9b}B2r-OeWw zfOb!=>9|N}+qW>t0#oR_0s$kdqy4lG2e77wVW7|-0?y)qu%tgX;p*2qm$M^z!BhTl z#+g`dZzF7WjaCMrHu8~vK_q*EM)nkmeKGGifi)d=gL}eZW(Y5;U^FdqAUW(KtEQ)lVFzs ztAp$H>C(1~{pmS96B{tzy0E46R)Ot>5)fvf6B4>m)t(%-S$+cIBlkS1?cyef5;Y~H?)_Zhl$ zxhFUV6=DsXaCW!Fk5z4Uh$~1da;D91M{`$vDP2d9$A$*O&8g^oT*=)hZ2$sMXXv1R z&}$66z`d^hMRcS4K&dMNVKVlZEo@P^X;9oBLbZhp?p>8?a4{Tdp#@F*kp8EEshJO5 z?aW_NnZ1ND@APXelFQbAROEZt;t>eW9A{!BK(z-oVBsLRp5Eg@yIonxSt+tl1a)PL zF!k{6GnrChe@8PnqZe%2cp>Rg^h7i6ys?yV_N3J;sd)3@;eIt}jeY5s-fGH<*Fhn)iS_LJ-^^u_vfSN3iF)R* z;xni3Ye4HSm5M!H>olIaq3}U`5~Ifm%@BhH=*52$d~jx!C*p#g=L1MO7OYmn$gLVo zEdhq>)(Z-4XxF_Kcolque>leZW>zL96xsX4X5!s5%J8GQ_S1OcyFtR$RUqro0(s6< zkCDxIV%~*b2{esX)SEBRT?*3e!a!^7+NYto+|!r$Qq7A7xdpK~92dpva5 zdy=giLj!=Dt1dZaYw4Qeyp#IG%jFElp=(St*uQOfUxoSE?CKE^>oT#_?7nQ2NBF5(eYL6!Np#T56%dQF`Ue8;~IXu-3*q1ik)WfeyarNu}&FP0hsm zqGyThubjc~#_%?5)XmtyRuO!@^A@`IqUo8I>y$_ukRZlMpOyw;@RjK4qzchw;4MFD zX59amJU;l(mBzz3ccs^afZeLI!3$sm|5F(9vx1o&k8C98{v#`4D3eB!0MP;uwy% zno3$8Cd{(Q0|B!01?#ysXIE1VmPZJ`8Tz9Vp|@e_I)0Hj`Gz3f4Gi=spNuEY=+fVA zJ&oZqe`T9uZZTg*?WM&A(SdA&S(6SPb7jXlL`@U#J6s`q{%81NF&@_+(31I5;PPmAow{_A zu5bLir+M8*3lg~`N$kkNr~R!?bJ~5cFCq<{gZZTT5ngfF9^%%dt1y`LT!X6c7!%ltf5bcn6!#3cPB65I)u+w3OtHX2+qQ6IVu5<_J za=%8L$`YW1+sVE^LJt_snPuJ=eA^gd`Q`kwSdE**q(55{DP8tb>Gb-BE+4D5(weha zj#JNH6{gQvChj+sw#V?>#$ZH=rr0XgAZlhRYyys5fbRTg5_SL0XFQ+waBV8%RTQb~ zZyJ>veTkxSI0c6%AlmDQnNiyG7>!SNcRAKh-gzIp35tw8|L~@!jol5?R+J WkNS(gP`30J2qD^>#c{1Y6aE7T!5~@y literal 0 HcmV?d00001 diff --git a/assets/donut-plains-2.png b/assets/donut-plains-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec9439716193a1fd0297cfa50ebef0a80a12cde GIT binary patch literal 2541 zcmZ`*dpOf=A77-LDm)oY@6xcea?Bx_JoC)voMGgULkLlea+uS!N{eQV^f;gOU_Bao zL=7u!EKE7QMNU8D966`8cfEhT|Gd|AA3lfg_rC7yzOVbfz7HH7um_|e(jXA%fVCCc z2?W|>CBnUu;-b-sBAF|i_S|&BT7as1j?Rh5-XN4c3IwX5$^7t>5OG~cI~U8{@xMF9 zKfN6vZ`)jDZ*R}8Y>S+MZtt#6+qx#DiUts+2;@rv{T>5S4F-WO$}QwuFN-3iZdkeB z1c45={_1hOtJYTw=VJ@(x7zos<3DbRR)i`G=6StM2LTZ~0{Ux%#C@{%wzI zKO(~w+7}wkWOT;#y=SleCB@wSZUzios$V06NxHq|jIhb+$RNFMf&qJ@m2Wnqi9fKU z<%Z6E%?Z`qrjD;;v#Njb5>V2x1nW z+byM_iQUwU6+yfE|KtJ@!@y>Ne4pOoM$&e4 zM%3&c6nKv25j9K4gXe5N*u`GfqO5C#XeC|`7p1{yuX1V%rVT%+ z_Y0=s)Fu({41PhoQjxkm*Gp;Oy^@o?!>;P7Uy->yI29E9 zjWg-eM zz?-Xha}at`qn$0hnr`X)#)Dib)9x9S=e8t=Up5o;`orSUb2{t#@uda&lQnQ%Q z^TJIxa9Y?Ch}*V;nWgc6=mxO;xvW9LXxixI5{z9*sZDI0$qr$(VA-j^<63akWJb7! zk;zpzWq#DicI>xyCvR#@wUZtj&}zhfEOQ-un~01bxp*EII9G--agkk#5#Q3xahcB@ z-zX3Fk5A{NW0Z|Q6@$iClbf(_%ACgbGJGJ$&Cz6D2`AvbSQ0l{ofeld{oSbcJFkK7 zSb2c^GXe7v=n1H4rrRe(j(`%Qig=%HIPMc&B-{oX4PVtlMA7GmIMnek`zzbl8Tv=h zf5p(q)`(jQ^PUE*s z(AQ2HY5UPm1iT|y(ZrDEY+rvB?OOE^XvAHJgsfqEPG^`w=y*h5j0d_zOIrUl^hEaJ z0L8cIBjPI%B6lPV$84VoPwtebN)F~%Mwmihckq8u{Wi{qMYyPuH-aj=xP7X%W~8Zy zSq4+D;Y{ig#E$u?l&QMV?7yd01^LpZVeotYqqmos;`u_vzk4cpf{%M(#Kel})T1AP zT>@g6nKiPdb2SVSbgZZQy)S?wDt06x9qCL>$RRda98HCo;7lrs$rvtXviuvzH4(+y+x?t#-8K z=*TBq$JCMqoqrg7BPz~30NAUJ7vT&YO8@3g0Bu@;MeibW+Wd5e8gku;1xA^~1YE!{ z|2a-f(XyZaW=apTwdOPv;*>o!mg=&(BMn8}`F88l&e8jEcR8O~kBKmR=CfvXg=@G+ z$75w>9EP7dnw#4JiQdyh1x1mgs{ij2-_*sLSHg<;#3GJ>m9oYvtqRz<7pm?+Pw|w7 z0yQp&PbMT*U_iTNmy@^(IXqUgszO@P+b1PhWRA2%8=p2Pxk7xfHl>NE`<`wk)$V`j zL@>*_S_grf<8vIA6vft8SRWtM<)j3@1)bJR?#j6I*V%?a<}nWw_7Q1c(Z4% z^AR^R8U>r)0#@!~U+a=RU-leq6f?COer|20va&sf}wK~Z({bycJX zQFDAu;7hLU)x9^uT)aAhpxG{)v8*c0_@nsr6H__dbu;Y5ZW^3gx^wh-ORRYvX3+e% z%D9JPH|?HB+d+z#YU0y|d_I(Cilm?g9eXjhvh zFWARwJcAU6hvkzG#t7bTV*CUI%PMHAMVm}?Y`HNN;=FM97JGqKZ!En)Qghnc-ZA5@ zrw~3GTC5dEN}n6wzz(b2+aM{quPQHu`Q#diRbJO&{S1yPof42zp2fC#5JmB!56b&5wErdrI|W6lcq^*? z_pq{e)NjM^G(S}Gu&u22Q$1<{c@0E=#a(8tYEI6cJWE?Q$DJJa+m5xS{tf{eN2;LV kk5`67PhV+e`wL$vU6{?#e5ScyRAzy!EgjI+7QW>F0PhOpHvj+t literal 0 HcmV?d00001 diff --git a/build-image.bat b/build-image.bat index be18e14..069d7bb 100644 --- a/build-image.bat +++ b/build-image.bat @@ -17,3 +17,4 @@ REM Now copy files and folders as needed %CADIUS% ADDFILE %IMAGE% %FOLDER% emu\\test.pic %CADIUS% ADDFILE %IMAGE% %FOLDER% emu\\bg1a.bin %CADIUS% ADDFILE %IMAGE% %FOLDER% emu\\bg1b.bin +%CADIUS% ADDFILE %IMAGE% %FOLDER% emu\\fg1.bin diff --git a/package.json b/package.json index f9f67e6..6a63fab 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "debug": "%npm_package_config_crossrunner% src\\GTETestApp -Source src\\GTETestApp_S02_MAINSEG_Output.txt -Debug -CompatibilityLayer", "build": "%npm_package_config_merlin32% -V %npm_package_config_macros% src\\App.s", "build:watch": "watch \"npm run build\" src", - "build:assets": "node ./tools/pngtoiigs.js ./assets/smb-2bit-328x208.png ./emu/bg1a.bin && node ./tools/pngtoiigs.js ./assets/smb-2bit-328x208-shift.png ./emu/bg1b.bin" + "build:assets": "node ./tools/pngtoiigs.js ./assets/donut-plains-2-8-color.png ./emu/bg1a.bin --start-index 6 && node ./tools/pngtoiigs.js ./assets/donut-plains-2-8-color-shift.png ./emu/bg1b.bin --start-index 6 && node ./tools/pngtoiigs.js ./assets/donut-plains-1-6-color.png ./emu/fg1.bin" }, "repository": { "type": "git", diff --git a/src/Actions.s b/src/Actions.s index f15fc3e..bc275ae 100644 --- a/src/Actions.s +++ b/src/Actions.s @@ -82,6 +82,9 @@ Demo beq :loop sta oldOneSecondCounter + lda ScreenWidth + cmp #150 + bcs :loop lda #FPSStr ldx #0 ; top-left corner @@ -105,3 +108,4 @@ FPSStr str 'FPS' + diff --git a/src/App.Main.s b/src/App.Main.s index a2b19cb..f89b3ef 100644 --- a/src/App.Main.s +++ b/src/App.Main.s @@ -105,10 +105,11 @@ NO_INTERRUPTS equ 0 ; turn off for crossrunner lda #0 jsr _ClearBG1Buffer -; Load a picture and copy it into Bank $E1. Then turn on the screen. +; Allocate room to load data - jsr AllocOneBank ; Alloc 64KB for Load/Unpack + jsr AllocOneBank2 ; Alloc 64KB for Load/Unpack sta BankLoad ; Store "Bank Pointer" + EvtLoop jsr WaitForKey @@ -118,7 +119,7 @@ EvtLoop :1 cmp #'l' bne :1_1 - jsr DoLoadPic + jsr DoLoadFG bra EvtLoop :1_1 cmp #'b' @@ -187,11 +188,11 @@ EvtLoop brl EvtLoop :12 cmp #'c' - bne :13 - ldx #$00E1 - lda #$2000 - jsr CopyPicToField - brl EvtLoop +; bne :13 +; ldx #$00E1 +; lda #$2000 +; jsr CopyPicToField +; brl EvtLoop :13 brl EvtLoop @@ -219,6 +220,21 @@ Exit bcs Fatal Fatal brk $00 +ClearBankLoad + lda BankLoad + phb + pha + plb + ldx #$FFFE +:lp sta: $0000,x + dex + dex + cpx #0 + bne :lp + plb + plb + rts + ; Allow the user to dynamically select one of the pre-configured screen sizes ; ; 1. Full Screen : 40 x 25 320 x 200 (32,000 bytes (100.0%)) @@ -324,13 +340,13 @@ DoTiles lda :column,s inc sta :column,s - cmp #40 + cmp #41 bcc :colloop lda :row,s inc sta :row,s - cmp #25 + cmp #26 bcc :rowloop pla ; restore the stack @@ -351,13 +367,8 @@ DoLoadBG1 ldx #BG1DataFile jsr LoadFile - lda BankLoad - xba - pha - and #$00FF - tax - pla - and #$FF00 + ldx BankLoad + lda #0 ldy BG1DataBank jsr CopyBinToBG1 @@ -365,43 +376,40 @@ DoLoadBG1 ldx #BG1AltDataFile jsr LoadFile - lda BankLoad - xba - pha - and #$00FF - tax - pla - and #$FF00 + ldx BankLoad + lda #0 ldy BG1AltBank jsr CopyBinToBG1 rts +; Load a raw pixture into the code buffer +DoLoadFG + lda BankLoad + ldx #FGName + jsr LoadFile + + ldx BankLoad ; Copy it into the code field + lda #0 + jsr CopyBinToField + rts + ; Load a simple picture format onto the SHR screen DoLoadPic lda BankLoad ldx #ImageName ; Load+Unpack Boot Picture jsr LoadPicture ; X=Name, A=Bank to use for loading - lda BankLoad ; Copy it into the code field - clc - adc #$0080 - xba - pha - and #$00FF - tax - pla - and #$FF00 + ldx BankLoad ; Copy it into the code field + lda #0 jsr CopyPicToField rts -; Copy a loaded SHR picture into the code field +; Copy a raw data file into the code field ; ; A=low word of picture address -; X=high workd of pixture address -; -; Picture must be within one bank -CopyPicToField +; X=high word of pixture address +CopyBinToField :srcptr equ tmp0 :line_cnt equ tmp2 :dstptr equ tmp3 @@ -426,7 +434,7 @@ CopyPicToField ldx #162 ; move backwards in the code field ldy #0 ; move forward in the image data - lda #80 ; keep a running column count + lda #82 ; keep a running column count sta :col_cnt :cloop @@ -502,11 +510,158 @@ CopyPicToField lda :srcptr clc + adc #164 + sta :srcptr + + inc :line_cnt + lda :line_cnt + cmp #200 + bcs :exit + brl :rloop + +:exit + rts + +:toMask bit #$F000 + beq *+7 + and #$0FFF + bra *+5 + ora #$F000 + + bit #$0F00 + beq *+7 + and #$F0FF + bra *+5 + ora #$0F00 + + bit #$00F0 + beq *+7 + and #$FF0F + bra *+5 + ora #$00F0 + + bit #$000F + beq *+7 + and #$FFF0 + bra *+5 + ora #$000F + rts + +; Copy a loaded SHR picture into the code field +; +; A=low word of picture address +; X=high workd of pixture address +; +; Picture must be within one bank +CopyPicToField +:srcptr equ tmp0 +:line_cnt equ tmp2 +:dstptr equ tmp3 +:col_cnt equ tmp5 +:mask equ tmp6 +:data equ tmp7 + + sta :srcptr + stx :srcptr+2 + + stz :line_cnt +:rloop + lda :line_cnt ; get the pointer to the code field line + asl + tax + + lda BTableLow,x + sta :dstptr + lda BTableHigh,x + sta :dstptr+2 + + ldx #162 ; move backwards in the code field + ldy #0 ; move forward in the image data + + lda #80 ; keep a running column count +; lda #82 ; keep a running column count + sta :col_cnt + +:cloop + phy + lda [:srcptr],y ; load the picture data + beq :transparent ; a value of $0000 is transparent + + jsr :toMask ; Infer a mask value for this. If it's $0000, then + bne :mixed ; the data is solid, otherwise mixed + +; This is a solid word + lda [:srcptr],y + ldy Col2CodeOffset,x ; Get the offset to the code from the line start + + pha ; Save the data + lda #$00F4 ; PEA instruction + sta [:dstptr],y + iny + pla + sta [:dstptr],y ; PEA operand + bra :next +:transparent + ldy Col2CodeOffset,x ; Get the offset to the code from the line start + lda #$B1 ; LDA (dp),y + sta [:dstptr],y + iny + lda 1,s ; load the saved Y-index + ora #$4800 ; put a PHA after the offset + sta [:dstptr],y + bra :next + +:mixed + sta :mask ; Save the mask + lda [:srcptr],y ; Refetch the screen data + sta :data + + ldy Col2CodeOffset,x ; Get the offset into the code field + lda #$4C ; JMP exception + sta [:dstptr],y + iny + + lda JTableOffset,x ; Get the address offset and add to the base address + clc + adc :dstptr + sta [:dstptr],y + + ldy JTableOffset,x ; This points to the code fragment + lda 1,s ; load the offset + xba + ora #$00B1 + sta [:dstptr],y ; write the LDA (--),y instruction + iny + iny + iny ; advance to the AND #imm operand + lda :mask + sta [:dstptr],y + iny + iny + iny ; advance to the ORA #imm operand + lda :data + sta [:dstptr],y + +:next + ply + + dex + dex + iny + iny + + dec :col_cnt + bne :cloop + + lda :srcptr + clc +; adc #164 adc #160 sta :srcptr inc :line_cnt lda :line_cnt +; cmp #208 cmp #200 bcs :exit brl :rloop @@ -683,11 +838,13 @@ GrafInit dw $0fa9,$0ff0,$00e0,$04DF dw $0d00,$078f,$0ccc,$0FFF -DefaultPalette dw $09BE,$0AA6,$0DC9,$0DB7,$09AA +; DefaultPalette dw $09BE,$0AA6,$0DC9,$0DB7,$09AA dw $0080,$0f70,$0FFF dw $0fa9,$0ff0,$00e0,$04DF dw $0d00,$078f,$0ccc,$0FFF +DefaultPalette dw $0EEF,$0342,$0C95,$0852,$0DB4,$00C0 + dw $0FDA,$0DEE,$0000,$0CC5,$09A0,$0680,$0470,$0051 ; Return the current border color ($0 - $F) in the accumulator GetBorderColor lda #0000 sep #$20 @@ -837,8 +994,11 @@ UP_UnPackedSize hex 0000 ; Size of Unpacked Data Buf ; Basic I/O function to load files -LoadFile stx openRec+4 ; X=File, A=Bank/Page XX/00 - sta readRec+5 +LoadFile + stx openRec+4 ; X=File, A=Bank (high word) assumed zero for low + stz readRec+4 + sta readRec+6 + jsr ClearBankLoad :openFile _OpenGS openRec bcs :openReadErr @@ -887,13 +1047,13 @@ BG1DataFile strl '1/bg1a.bin' BG1AltDataFile strl '1/bg1b.bin' ImageName strl '1/test.pic' +FGName strl '1/fg1.bin' MasterId ds 2 UserId ds 2 -BankLoad hex 0000 openRec dw 2 ; pCount ds 2 ; refNum - adrl ImageName ; pathname + adrl FGName ; pathname eofRec dw 2 ; pCount ds 2 ; refNum @@ -965,6 +1125,51 @@ qtRec adrl $0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/blitter/DirectPage.s b/src/blitter/DirectPage.s index a2dec4c..d445900 100644 --- a/src/blitter/DirectPage.s +++ b/src/blitter/DirectPage.s @@ -35,6 +35,8 @@ BG1StartYMod208 equ 46 OldBG1StartX equ 48 OldBG1StartY equ 50 +BankLoad equ 128 + bstk equ 208 ; 16-byte stack to push bank addresses tmp8 equ 224 @@ -77,5 +79,6 @@ DIRTY_BIT_BG1_Y equ $0008 + diff --git a/tools/pngtoiigs.js b/tools/pngtoiigs.js index 9898b10..ecb5626 100644 --- a/tools/pngtoiigs.js +++ b/tools/pngtoiigs.js @@ -3,6 +3,9 @@ const PNG = require("pngjs").PNG; const process = require('process'); const { Buffer } = require('buffer'); +// Starting color index +let startIndex = 0; + main(process.argv.slice(2)).then( () => process.exit(0), (e) => { @@ -15,7 +18,7 @@ function findColorIndex(png, pixel) { for (let i = 0; i < png.palette.length; i += 1) { const color = png.palette[i]; if (color.every((c, idx) => c === pixel[idx])) { - return i; + return i + startIndex; } } @@ -94,9 +97,21 @@ function paletteToIIgs(palette) { return '0' + r.toString(16).toUpperCase() + g.toString(16).toUpperCase() + b.toString(16).toUpperCase(); } +function getArg(argv, arg, fn, defaultValue) { + for (let i = 0; i < argv.length; i += 1) { + if (argv[i] === arg) { + return fn(argv[i+1]); + } + } + return defaultValue; +} + async function main(argv) { const data = await fs.readFile(argv[0]); const png = PNG.sync.read(data); + startIndex = getArg(argv, '--start-index', x => parseInt(x, 10), 0); + + console.info(`startIndex = ${startIndex}`); if (png.colorType !== 3) { console.warn('PNG must be in palette color type');