From b5f675ee255f4e3a3a08e59ea835bcdb6e7cf622 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sat, 28 Jan 2023 18:22:48 -0800 Subject: [PATCH] vdp1: add normal_sprite_animated example --- .gitignore | 1 + Makefile | 7 +- res/mai.data | Bin 8000 -> 115200 bytes res/mai.data.pal | Bin 48 -> 48 bytes res/mai.xcf | Bin 0 -> 46265 bytes res/mai00.data | Bin 0 -> 7200 bytes res/mai01.data | Bin 0 -> 7200 bytes res/mai02.data | Bin 0 -> 7200 bytes res/mai03.data | Bin 0 -> 7200 bytes res/mai04.data | Bin 0 -> 7200 bytes res/mai05.data | Bin 0 -> 7200 bytes res/mai06.data | Bin 0 -> 7200 bytes res/mai07.data | Bin 0 -> 7200 bytes res/mai08.data | Bin 0 -> 7200 bytes res/mai09.data | Bin 0 -> 7200 bytes res/mai10.data | Bin 0 -> 7200 bytes res/mai11.data | Bin 0 -> 7200 bytes res/mai12.data | Bin 0 -> 7200 bytes res/mai13.data | Bin 0 -> 7200 bytes res/mai14.data | Bin 0 -> 7200 bytes res/mai15.data | Bin 0 -> 7200 bytes vdp1/normal_sprite.cpp | 10 +- vdp1/normal_sprite_animated.cpp | 198 ++++++++++++++++++++++++++++++++ 23 files changed, 210 insertions(+), 6 deletions(-) create mode 100644 res/mai.xcf create mode 100644 res/mai00.data create mode 100644 res/mai01.data create mode 100644 res/mai02.data create mode 100644 res/mai03.data create mode 100644 res/mai04.data create mode 100644 res/mai05.data create mode 100644 res/mai06.data create mode 100644 res/mai07.data create mode 100644 res/mai08.data create mode 100644 res/mai09.data create mode 100644 res/mai10.data create mode 100644 res/mai11.data create mode 100644 res/mai12.data create mode 100644 res/mai13.data create mode 100644 res/mai14.data create mode 100644 res/mai15.data create mode 100644 vdp1/normal_sprite_animated.cpp diff --git a/.gitignore b/.gitignore index cb90211..df0be19 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ *.ppm *.png *.out +res/mai.data diff --git a/Makefile b/Makefile index 9fd810c..88ac2bd 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,12 @@ raytracing/raytracing.elf: raytracing/main-saturn.o raytracing/raytracing.o sh/l vdp2/nbg0.elf: vdp2/nbg0.o res/butterfly.data.o res/butterfly.data.pal.o vdp1/polygon.elf: vdp1/polygon.o -vdp1/normal_sprite.elf: vdp1/normal_sprite.o res/mai.data.o res/mai.data.pal.o +vdp1/normal_sprite.elf: vdp1/normal_sprite.o res/mai00.data.o res/mai.data.pal.o + +res/mai.data: res/mai00.data res/mai01.data res/mai02.data res/mai03.data res/mai04.data res/mai05.data res/mai06.data res/mai07.data res/mai08.data res/mai09.data res/mai10.data res/mai11.data res/mai12.data res/mai13.data res/mai14.data res/mai15.data + cat $(sort $^) > $@ + +vdp1/normal_sprite_animated.elf: vdp1/normal_sprite_animated.o res/mai.data.o res/mai.data.pal.o # clean clean: clean-sh diff --git a/res/mai.data b/res/mai.data index e85e2ceeaf61ad461eeb418ed2ba7f8cdaf2acae..2e121ed7f906ca61801fcf392bbdbdf9504cd7b3 100644 GIT binary patch literal 115200 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 diff --git a/res/mai.data.pal b/res/mai.data.pal index 2096178803f669d81cc8fc9e5a09197ebc02564e..525969050ed8b09e6ee004a25451972a8bdb0029 100644 GIT binary patch literal 48 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�JiA`A^lDCv3oK<867eIf4vDj* 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 A0ssI2 literal 0 HcmV?d00001 diff --git a/res/mai00.data b/res/mai00.data new file mode 100644 index 0000000000000000000000000000000000000000..83f824cbd0ac4cde503abe14fc8ee966e00073fc GIT binary patch literal 7200 zcmeI0+m@ps5Jia+g8}sa|918%#Aqk!KxQ6?UMuYdH>VC4OPu>({yXsOz(jFrU7zoC zT@hwVE3El%P{TA(#Q7@_m7)GGW@DDH-H_x*IoQ{pOA8%?d&dugG zX5mwJsTeo~!!Mvl(y}Z$SerjNVY*zn)&$C6mL*1k)Kyj--DQf(X@j7g4V2@OW7sH{ zi<8Baoa2S7!)J%!mmMnzuWkV8RSkI6-oPDQe+_h@3mm z+^5A_&rH#)_d`@%7j7%s&w5;lx7#F1=5{2iHC?ak5HW~fBw>F8$AOp#OntV57z>8^ zg`kya84+z9=k9R8;59x6sYy!&Ij9pdTAK7wZ$b(fo(&;+Fc}WksAzMRG2B&Dl|vvfkJ?(r2pAXt=` zu-C*$`jVsG5@yNFS2+0#&ZvIY$PouQK51_B$2AsE5QpJ-^-kjYImwS>N}6Yw!{GUn zlUDR7vcS+W%vXAlkP2uv3Ub^x{)m%`MaZIH%oiNS-J0e!Ln?CQZ$Bq9@U}v(QF9g? zU%EPsl{tHS*-Pndak>T&<2KXll{6O-!gNgx`4GK&O9dRuY_SKOMOxEu;TU7YXgDT_ z%iWw9O^f}ABam@Ae3lKy*&;Iz&x^C=SZ!h9CJJz-XeylOA}{_9IZk;GODT{7+Bjq) zy#1S$luGK|0y=Q=0*4HumjkE@(rO0VI2{;gdWzKDrI0H;$<S}+C>p0btevwkH;$Y>m)(P-xw`8i(Y$FfYcDdj6d)AErL_7s`K}DemInjHode~5 z3%+NzJL?_eIKesf~3bGXUe418>gf1ZGI~jRt4XC>d&8?5+@LELRrL`~}=O)$gEdeHh^xoc?cHR>9N2~P$^!cf`| zGD)1q*Rv`so6FO(?7n%G8VfxuY0#l@~PCIj!xc`T1P0dd41tLq9ViBW7dW$zF{1z@Y&|)&7571 z+di8r=)Is_P6*!5vw2*TI+`hZ9*W)xsttjg#IZtdSL=K8=b`(ZpobhVDoQaAoNMJ& zk7@(w|5Z-FoKm(7u~w^b>D(&67F6T}Zk9ZQ*Qx2*jXrV;=+$0OX~CK}aOBY|Jw?&* z0wg(AXaSM=9x;1=ZCo0D-kcgFr(&G)3_rT^KCN;%-4E@+cD~M+oH#p18;=woG*Yel z^m+%B&KKDO3*oVoLT3wPoS!NxmH%KKqsy-Ukf>2pI6@tsJReevos`2hzn=HKpok-z ze&g^_#aI3zGQO!#`&C_>2gvhLeF_vcyPo%9(XD*AvJ0{q%O+U)kliEQIqIhrJxteN$*g| literal 0 HcmV?d00001 diff --git a/res/mai01.data b/res/mai01.data new file mode 100644 index 0000000000000000000000000000000000000000..045d33853beb4112f5557409362928a94e24c329 GIT binary patch literal 7200 zcmeI0>6Y>;5JfSQL?C(pxBd1h0*SUm(EIbUR<{~ub7~?Locn+L?18whKQr7k#dVt8 z{2OYTE*EjSpFpBqE^{LY4pcIxAys6pbh|^6eUHmB!oOHcjlb0%J z{KYk5R^g<8B3b%=1TZ&1-h>IXh|_iWW=bAGa7^NRjt|JWG3PcdFjGjB=r{~r;M#QI zYgzlAVc+_2y-t#3-VPzHYaGYbIQ&P_IgXpe5hjGiiz7_5aIIKNMx4@vs0j`jd@Vm4 zW(gj{6oho1<0hnlVXpUaKuv-JNEl`48UL7*ZZ~3MoEXQ5IT$%9gu%+|G{+GbPsaHu zIZ#r_AgdQ!>fFDa$#4ebkm5KzkU_1OQlfrPtjsMqE5u=lZJSxqGnyQ^R|8JtePiQD z&bmksb_JZJ8fh6DXN04At(-M3B+&VhImn5|QKeD%;{azlPbqs?HcNX4n-T>(Ml$jz z4#u&6j1ggt9EE;R_Mn7(W>Bzf8!E8#gOWB5`GR9M&N$kRbe>`*T{w{vl^$(p;xy%S z))RXruM}BDR!NY{!&e+9PV9RW%`s!XIqGg)MEzT+6BCuVSh z%W2)LCxlH6FXC`d#H_Y_))XdIQ09PXb&qBoIMMVp%Td&cu=HeC8;9w3MRC-peaA_gpdOB4u8rlj>5*k}Q027UEvPQ@k6b;F z&EjM^t@%?pi*eY3^n77GW7BQN^2a2lfF3xwn6}Y^*y3vCVIFY$UXe|OakhdmGn4RO)*0YAb{0QO3 zsU-=IjM^|+4|6N%qiJ~9IPr+79Bh*!8h{Vs*Aal^6pR`uhWwmI1-%Ww)?#?Wtn+M* z7=WEq6}=N=n&HfAj`&>Uj71KwwvrY*Tzhz1elpL>zk{5Ep2~SGsK^OkP2rAl_YZJo zwFeRV$MORnYX>kihn76J=cuPz_R6p-2aLKWjSQljzZ=_vch~k0MUEGS@tQ->H1?^- zcSVlRlsnG7UCgo{KR0ZX<8#xK_2lYuTsp3(_Xc{rSiewGRF1{We)@!Cpl4@O)#AeG z#o1Q;tH+|&{RMTq<1*-oLE{q>Lil@F#u?b2>AI`uQD#5o==uEdIJxUCzPR5KkP>AS zj@#eWOZI>s?}e_N;M-61?1pR9vOJw$NhH{Ce^jv^Fs_L+9xWs1sv39T4Da>u*vYBG z!Lm^`P~~FPX4fgs4&n@iC*mVVsiP+IgPxvgoXTvD?Kw`P44!b_V@UnX=`yG{Iggyr z;bP&)`3dKpIj#GV-T0u#$vf^YeX7=nH6`zGQ%*2Ht@rx-e;XE4KL7v# literal 0 HcmV?d00001 diff --git a/res/mai02.data b/res/mai02.data new file mode 100644 index 0000000000000000000000000000000000000000..6448045fc83061200df9d35fdd57b8ae38da6e6e GIT binary patch literal 7200 zcmd^@YkRXQ5JmA4g8}sa|J!%%0n{{21MT^CrcV>2u-r2YSLgo67We({-Y-ks7w6VL zp_XMC1~`8M34*N=oLl2>ean;r`VTM!XI+tmbHA`d4RwvOEaTYEx?-Hfm;q{3wQXDS z&OKp_<30DrVQ2y+FxwWwff*DLJTf)bdP9Stlnj)@mV&oh7TCh!>A>C5?)~^d$#lQp zlb0%J{Kq{OJt6QkK>rb84=H(n0P@txpiP`{^!Szh(#r7xIS=YQmd)Ot=%TlI9)sdD z@L1k{*5iD*-xo=;XyeJg$J=cm1A*ofNv?_G7IB0LVe{e$6UPNXJKmBJZ5*YFVTiTj zY?v*89MuR3pIZD>;Kwa!lnIkV(M+MWQ*;;cT>W`|d}1t;#-UyT#v3{?r#UW!AYGQy>+6UcS1uxn;heG#z&l4ph(w3g$*Cl6ZGV>)%d971Sm!g z9x1Aa+|*TDbGm@U+0i3GWDaeGiK7QCc5*i=|o)wvDnbRESs)%@sI%-a# zP3OWv5P7I%j9E@^K35JA${c)>TS%;~H+@$Qf{b%7i!{Zo2~Y~Xa1gU7@|}VXPD0N# z)8>zRX~V{OFbk@6NFg|)+*6pdpdQC;TVP&@=t<<1=ECWT^vPlED-=Dea(W!IvBumG zhCfzga}8RDV+V&Z&~MA;XJ-4~aB86a<|CXry4lxzTk90h%#fEn+YUyYX>v2umw8Iu zn^Q4!_MHW4WDX>>ICg+SGe{hx7)Gxbr>bNvty>Mong=bcmZiqZivuXPAq$2Eh$`&1 z<`#v}$c$qkt$`as*`*!I%J_5PICeoYgf%Ey72iE$3Mb1EF_W4=YmE$YUO0fVrjK*k z#$w0B1TW6jExXnRPxfIlW71S$))fpZ)>n>Ge9R2{=EL@W1w&&M%c$9d;xUbu{TI{W$B1dXw2M*mrE6ma> zp5sG>pE>n4hA~j)++H{Z^u1$;9I45Iik`229l<_*xm;B_1%qR?w|~RQt@f>;%<*OI z#Oe~W*Sy5p?n?f9j_m`@t*K&O+bcUE(8Zm4IY^IwWI-o}onbBW{7w094&BBBuS7O0 z)xHal9&vW}${FEgca=AnUh%Bq`io89`1M#CbUCro-lTBe_;auT#V=xG#c-t`xA&{sRw8s95&P(798@p;J~OJ?wFc9rhd|6oZCeZ$7wfaakI+#?3SCDpV-)+ zAmngtdF8Z($2dCPVUKMlIR{6l=sC>g=?`Dpl5@OMvq*BDIj+Gg@!6bhnwo2 zAKN^u97af_UjC(15ESMge5#v&YO7qB^c_!*j%74(9ia9LfjG9$6<~7saD=^`LPzbS@5JlCd6$jM!f7`Qm0p7-GvGePYFUIDw+*LqPnx^?bmbfhcF1zoeDC57O zdP-dS{@*}-*R^dsMqtetzqPFwL`9&lF)O9Trg4;kUkKVLU>c+JSoxH7#559P1yH4` zd7dYq++tU=MGWuzw#8#rpb5-8hp>V&Mml;pDiwmJ$v{(>r(mLzXYq_Mw6@fCsq)j6 zp3^W4lb0%J{EbV*6mdeJRZ2e*QX4&oA3&ZF2{en-bzX8jit0E%Am@iMKmBY^pV*>r z=ej^$-_k5=@AWi33_~wT=4~ulmiT@zUBED|NNTD$Z6l5_A(=7+_{E<+Cc9?tX)M}i_NM;u&ioC^PJhGp&U zC60DI806R%ySEFDP}@Gl(I$u`7*S)KP{T1_ZyfA`lM1(ut?W9EqC$x;aY>*Nk}$@p zz?{3_+LyU{jPCWKReH{y?th07&OcE&5ok;rFpBe_RY zuT9|wC7G5o)*N3um4!1K=Y@wsNzOyVR?Z|n%oS@Va~>JC<0zkI%E?`lo-a9!_QRlH zRMkrE;IP@-~8FjKWk|-UBIPV?QTnJP`t1VlW^hQ zN}bOocRg39-?6*;GuvOBmAh|ybT4g`M`I41{{z-y BP=^2j literal 0 HcmV?d00001 diff --git a/res/mai04.data b/res/mai04.data new file mode 100644 index 0000000000000000000000000000000000000000..7c17ce7a164cf22b1ea0bad2757be72fe80b0e81 GIT binary patch literal 7200 zcmdU!;li6B3`MD0#e(|&Z@Y5?*lKOXe!rG&wN*IYgaFYw_g`9EmcQ%n`?&PZjekP* zGB|$&!DyP>ZH#w$!&M4A%mDMLHNsV(7V+N>F z)jZFWUoqJeF}%*=YZYh$GtZ%@SuxVlXL^O8X)@3h<|%lKu#t$2FkHQHw#oD_2Us>8}pc;l) zE6#?Q1IR{$FcHWKzbtPU7=q*J>wWA{Gr=J=GW1k%a{4_UjE!-mX7X@CuOSQ-DX5Xp zoErn<9e>OzC=(GENNOr<#boLJevivcCJ~)L232BKIVA#j4HdCQhyoqEF4nAxMNWxi zYjTvS{K51wu0xUL97k1*97Nn4}iT!&@H7%WV|D)K)b8Lizl1}sM?8pc-0U7LfSdrVvm zG)Amz+twkcW~#n%VgwW;AcVE9ma~_*pkq|1$I&px**7}>J+f8EB`_EhODoy=uvNHEQNVdmPUzR02zn~e}=aZH$+bS?-Tk)s_xhexy3Dx%A7nGYKd z<;+kuyI$ou$x+>s1&z^*GyD)`I2IrqcZMsKX%|7}mISpae_}K_!__o2w~`>~Y2#>e ze3$mMy zNsTaR#OYtWTP1xhTn&RFnbl#II2(-Pfiv0X5S11NN^;~10n?$F9_h@=iMM0EPNE@4 znp*iov9W1s&xUIHNl>|uM^DDMPEP|HIctQd(2gz3;eM%_vq?o_?=Vl$F~+TKsjq4$ ze3HF4&&rP-TivqGd_-2AL(Hn^{SKTdZdrvPmT?Z77SQ3v#PND8O*W$EqnY|c$Be_3 zI!>Bu2e(;oP&icc2hEITr+l?db_-ZIH&o$+NVA({;RQ zdg1WCXvIKDv%QYPOQI(z@+zhLOcX6Xr>32og{Aa#cV2<4^Ez`X#!D;ZhQoWg7milK znqfz-ftHet$k}sh)WB)jd3pO<62>s=_*JXnrAougF8+%nMKZ~Ga+vd{Ax;f=Gaci~ wS>)z^Tc{%e(%;m$VL$K4=(?`kR?6Sf5#lR$+wj7#%vre?x^A1AxW8cj0lzX*r~m)} literal 0 HcmV?d00001 diff --git a/res/mai05.data b/res/mai05.data new file mode 100644 index 0000000000000000000000000000000000000000..cc458ab1fc1a1d98e145e0ed07c0db80aa38ecb2 GIT binary patch literal 7200 zcmeI0>w>c?3`J3?(t`T_Z+q4bg0`Jj{APY0=2DBW+zAO6o%_H1g$L5Q{tX7o{kN!b zOzSxQ7Br51cTXdrd-{cKP$&ZZ0S3_hjwFoxw=zmh*WnvcC_R7IQ5ECF2x07d%xnZL z%Q6Rh=7vFzGa=(v(E^&mEK7{)n~gF|=4=)HIcS~@G{-!Z55Grt|oCWz2Ak9G$#Rt#hJ+qhR0&BT!I*)3|O} zh*eDGn17^)9C>o&moGb|gOf}Tv4bcEk4RDgotGm84*n23fGi~>=ce2^*Yh;yYVHSdNG+xzLi;A5X72M+ z1zA&15r`otcD%O~JBJ*+lN)0f94s@;;F>ws9ZlOaQwH6^48!1z)8L=nyHXs{I}9Gm zT}Jt9oT7zZE1*NU#@S5bLo1FIHXC4{bbZ5;cep>Tl z2k~s;a4P_fL!Rv|nywTp!E3x#7&Xg}>l~$0EOKg|F^M#(*c-iaG}CL_(3W47qp2&R zr+5gnqD^NPIU1QL|7@lyTgAC*7G2O23+J9}<+*H@Ji#_9YN%A;urYc}@zPT0oa9JQ z$eaN=#+fd)VG!g&6dJqc;OWIH zN1=n4?U-<7BHKA~&w$s%G%=BQFF~g=YJ#Q+~Em9`N#6+AqsZFpN1xTTIRv6a~TFkgIPFDqb!a1F-|=m~(qOO=i%K zhHV@>ElEV?+^~pk>ysLN$)LAtDvYBil&uqnWnb@OcIaoI9|Z07l_PH-dcIt$!w($E z$<>8pqxRDI_!Us!A1mxyoUJm0&M@*(*T0QGl>arwFGs>RJ-Kk7ANC} zZe>~F9eH-iJBNra-un7UUht~Da8{GI57^hPPd5oVdu5+1dzJ@JL_alY`yx(_JTZG! YwDtYiYU5Py$A)J&lw6dvW}ol>2dei{MF0Q* literal 0 HcmV?d00001 diff --git a/res/mai06.data b/res/mai06.data new file mode 100644 index 0000000000000000000000000000000000000000..13a64d7af037f37ea7d90db537408a59dcd09950 GIT binary patch literal 7200 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 literal 0 HcmV?d00001 diff --git a/res/mai08.data b/res/mai08.data new file mode 100644 index 0000000000000000000000000000000000000000..2843f3c6ac725a316f31fed1ef6ad69d5bcf63f7 GIT binary patch literal 7200 zcmeI0?UI8i5Jgdm!2$IB-*(S!z>kbcOlE&=Embob!NcvQX+Y=xFaJpoq-FUR>>ATD zj^p%K)L1xw1&v)dCG?C_`jc%PMWBBH)46GyBu0g zHFjO#xDfC6pC8`&8D~%tOuF5cK4KXEk>uPJjvG-kN|Oy+ESS`ffR>O;M7*~PM*$K` zgFnm3s7Z6g&>r9AY_7Znaw8ltIm~g69!!RVYgBd-x(?3Mn-M8s5D~&HVGi0xjLPvs z2=1wPI-?-Ogd8Y@l7T)_V?ZD-gy4}w0N|ZS1bvPv;zE>@%`I|t@;-f)6X8e>1!*C` z`EK37EXG_M?20LQ!eH;ltM>u3m>e5N)T=M=+R4i{@rBChf%6RrIgP{n%PkR+^StZm z;_b$fD&qjU`0}n9ZZ3Mj%rhL#jc+)_i$4Jw}_`?Yb%8xuGk1|}fOvI7B z9<=B`c;Mwv42ZsQ2ID9{i}Q&f%z~rBhz;I25@ehY1gYCljp8yTTQdNu;scH{)(#|$ zW-NkK^U@>xO7$wks)J099?%BP^_Vs}dyY0|1*DzLec$Jc`|=X~mXRM4;bR;;!)D|% zr^qpmEE|ZP`Y3+FsdCOZ9|<~e1|n$FGlvfZRU3+)2M$Aa*+CaLmqyHnhJP9_D?7Us zLKg)!_v|=q4=Y@ALL1r_QPZkcPF(d&M-Ch8*7(J>bUYN!$j%qn_qU2ZCebJnh+>M0n0SXGhp#4xj(PLACeXTUW! zPzA$Q!StLvsF}4_(;QS?(=dQ!*RjWDMCBYYPJ30)Us{?`rM+>^1U0i7wp`n8!_3=N z-EP+H?n%2XoJTcnAEjxQHnSYZU4c$MC>iGg(e=Zle1(08zjynX5(lh zT?gG@;t)qCU%2`c%#QQmAg|f3bHd{>oDWyO)VP&nCyaw0%NpVw(?{a7;Mq5w;-Fs` zXL=B%!`z5YP1#{BO)*acU0coYfN18wPcPuJR5q7)GGO)AJvd)8ri*)ya7UQxd?F M`L)Yk2mbNLKN31w7ytkO literal 0 HcmV?d00001 diff --git a/res/mai09.data b/res/mai09.data new file mode 100644 index 0000000000000000000000000000000000000000..a242ce75e1b3ccb6c4180b05e922e79caddc0716 GIT binary patch literal 7200 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 O8?;_Ypw`x}?fwBRw_I=l literal 0 HcmV?d00001 diff --git a/res/mai12.data b/res/mai12.data new file mode 100644 index 0000000000000000000000000000000000000000..e43e90c8b92ef306971626b08a0a381bfd861a20 GIT binary patch literal 7200 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 BS2X|t literal 0 HcmV?d00001 diff --git a/res/mai14.data b/res/mai14.data new file mode 100644 index 0000000000000000000000000000000000000000..0eef6925d3f37f75ba01f3388f5e84efb7c634db GIT binary patch literal 7200 zcmeI1(YB*15JXWCA%On>-`=WjAZpABCiiieb<_xKs+$IZG3HHV#k0UT10M*Q_w z-jx%h25;(r}_GwFl>WLA#QQ12uUOl4Z@&L%A4(-DqIpYZDxa=WFI9F8< z?|g)u2kJcBDy?S>(b?KDjxM_a*`CH8>RkTtaakNCQ4Lzp+m_~e6ArGBM6X>|J-!6O z!7%pOO6vrZMi*V)eAbBQ;TZD(hhjY4lc*-4^Tf&UGh6NB7zZi9psx4H0+YdkYnW<; z9*ubO>+wL}kdp+1Ac)bys2o2A&WQ+!!M~~|M+Mzd^F(?YwIamf9Uq6=j2aGm;Rv<6dMii{{NjbfaS!{xG0X}GkqtR%n`g_I{=z|)0Yg1GalDG2 zeBVEa7Xf)tCtyvgAcN~p~$(9bTN#z)R*6uinaSPv8Qm7gvBnz|SCUJsj z)&yKxHyHU|cL1t<#+yLU-xCasMUafNTb!sIfsv!2dmPR;!YP&sM?f+Wb?afPP=F{_ z2Puaja*Bx^G;%O|0ivKMhijvL4qH{wj>Eu_wb9a{M2iRqpel%yka*@Rj<}kFCUPio z6;8Jt@upbD`GTDA69+?soatxI8ZS8gW>vd5=8t-?0PXKBOnc%~Ucf=3f7oA$p5@L; zN-7B}zHn~oX@YX&;1%U8ch*w)@QE5+UO4@u!WgW*P8@lIOI+$q)YWY#PM9W0RCc^G zJwFW-yKpgHmgVb;TbC3q)C4t-!Rj761+MaMxLV^y{S2!x$jHH#2b_EZ)I80PpmO*n z$~JnK)(-+lyME7!Hiu|2u_CwAN9nYZM0 zew`_YpU#{LXG$9v!2xSU%S_~bHjRbI!KHCj4vZA1}k6NM@Q;wNLPB?S^@Q}z*icEZz6HIY(bHrys zO^#R5!U<|s(_^H|ShSH(4^KH|N6XJ3G3;|Vy%xvHUeY@cX)doiof88Gi<9>pn@Won ze7sjVI5N@<;e;yZsfXJ_DSRzR?3)k{JXBLH zZ08CZFF=&DrxZPOwWf+OlW?eLc;Sr03#Njm6UG=7BBn=;-IMr;o{}MVGpn>whi{UrI+KgMy(Ir7=WeAj{0(UCuiPUX15D9I1lAM zrEu)tu)@Md7_Qn`Hm7uT?8T@72S#BD{Fd_s*_pewo#68LkuzZfjN_DY(uGYmH^dhl zsQF8eDV$M2Q-YjJ4rfFRE3xa?VYSV~1AYID?K{1O8i{82Qb77ju@XD99o_t zL0g1Xe4wNC#pwzT{v)6avx$cnm}yRB(}njWUqGd=@tK1-n=TI+%WQEi2dI4n X3v|S3_m!d>@BS~2io1&FUNQdxu`g5C literal 0 HcmV?d00001 diff --git a/res/mai15.data b/res/mai15.data new file mode 100644 index 0000000000000000000000000000000000000000..9a66aa8e0ab5d5cd01468fc8a783a85214be2f99 GIT binary patch literal 7200 zcmeI0-I}8+5Jia^#Q^&LZ+q4*z@N;dTg-RvhKqF4;&Rufzyjy~wSNx$&kn?O{q_kX zEs8RKg&N1M>*6|&-+_QU9*;S8faZ8RHlq~K7Z@ioYHprq8Ff?8hH*xbSGQO@M`El2 zYFCwmA}l9{_v7OM`XXpqmgKV$8;6Jhb#To#oTe#xzK9eOQ}p>5x*$al{!LsL zICPw**F+H01SEyDuJQR?yFlvji6rMPaGVdw89_}_6W|EL{0d=Qeaa*GdtA0aquTFZJ{ShaFX6CD5+zp@Yg)_(5B=Lb7Cr;zIrzIiB8ns5PSy)_`CZqKR?B`12 zuhg)3w{p;*7_Ca0iwMQlVzm4WGDS@|Uean{?s0l+a7+;C+{|I!%5wM=N1#@Y=C^VB zj4}=&+1xT-Dl;-CgEA-F;;{0`&$m4kOO1p8~>0?$U>G02PkL zUCu1`I9QZHEFM9Y!D*7?vK|C^3+!8tBEujSv-vAM48FH~K5{M@TsoDw7_&D{n?0(V zOWQeOtNd)yV}op@u*C(3VV{}`vh1orY2$>PJ-)0&mt^IvGeJ9Ndc9s0=q<|_wU+&!0ZgD6z9hvu{mF6Oz$9kVdT0yHF)p{5Lca_Y)^`M1T)kVE?J9*EIc{^>I8JiL z#KuXSvgTh>#cG(Ho@YqBNSAR)11`hS4)1Ei={z~a;gt+#Re^6D+-u;Npp-dO8!PWZ zABvvKZ$tDLCm6>tGa7tg+_^*+T$7}}3e1bMs&Ezt(4Z%flvfm?#5nqZLk$(ccItT)0*T{w}CK1vSn%g|w#+aXqUB>s^1G{+@6xiD&w7pzW5>wu{2-7$^_!d{XE;bWVlYdb9Yj_j@zkYqRFQq=^z86BE+~$0u2Ob< zJL(e06;5ZMp1trN9B1y#jQbD%up5r-fY;9Q8Yt_-A-_!3k+aKu|Hc_5M}s@(3Fplq zjTX1PrOz7(4hQ&|<9hARS!&LGGR8pX3#VTODr4Pq`pH`=o)eMN^m50iVYkal;CiD$ gJ5H%jk8+iB{_hXJK5%}x8F4H2X8!5@c;k- literal 0 HcmV?d00001 diff --git a/vdp1/normal_sprite.cpp b/vdp1/normal_sprite.cpp index fdc9461..e0c2646 100644 --- a/vdp1/normal_sprite.cpp +++ b/vdp1/normal_sprite.cpp @@ -5,8 +5,8 @@ extern void * _mai_data_pal_start __asm("_binary_res_mai_data_pal_start"); extern void * _mai_data_pal_size __asm("_binary_res_mai_data_pal_size"); -extern void * _mai_data_start __asm("_binary_res_mai_data_start"); -extern void * _mai_data_size __asm("_binary_res_mai_data_size"); +extern void * _mai00_data_start __asm("_binary_res_mai00_data_start"); +extern void * _mai00_data_size __asm("_binary_res_mai00_data_size"); inline constexpr uint16_t rgb15(const uint8_t * rgb24) { @@ -45,8 +45,8 @@ uint32_t color_lookup_table(const uint32_t top) uint32_t character_pattern_table(const uint32_t top) { - const uint32_t buf_size = reinterpret_cast(&_mai_data_size); - const uint32_t * buf = reinterpret_cast(&_mai_data_start); + const uint32_t buf_size = reinterpret_cast(&_mai00_data_size); + const uint32_t * buf = reinterpret_cast(&_mai00_data_start); // Unlike vdp2 cell format, vdp1 sprites appear to be much more dimensionally // flexible. The data is interpreted as a row-major packed array, where the @@ -141,7 +141,7 @@ void main() // in this example is 7FFE0. vdp1.vram.cmd[2].COLR = color_address >> 3; // non-palettized (rgb15) color data vdp1.vram.cmd[2].SRCA = character_address >> 3; - vdp1.vram.cmd[2].SIZE = SIZE__X(80) | SIZE__Y(100); + vdp1.vram.cmd[2].SIZE = SIZE__X(72) | SIZE__Y(100); vdp1.vram.cmd[2].XA = 100; vdp1.vram.cmd[2].YA = 100; diff --git a/vdp1/normal_sprite_animated.cpp b/vdp1/normal_sprite_animated.cpp new file mode 100644 index 0000000..d15abdf --- /dev/null +++ b/vdp1/normal_sprite_animated.cpp @@ -0,0 +1,198 @@ +#include +#include "vdp2.h" +#include "vdp1.h" +#include "scu.h" +#include "sh2.h" + +extern void * _mai_data_pal_start __asm("_binary_res_mai_data_pal_start"); +extern void * _mai_data_pal_size __asm("_binary_res_mai_data_pal_size"); + +extern void * _mai_data_start __asm("_binary_res_mai_data_start"); +extern void * _mai_data_size __asm("_binary_res_mai_data_size"); + +inline constexpr uint16_t rgb15(const uint8_t * rgb24) +{ + return ((rgb24[2] >> 3) << 10) // blue + | ((rgb24[1] >> 3) << 5) // green + | ((rgb24[0] >> 3) << 0); // red +} + +uint32_t color_lookup_table(const uint32_t top) +{ + const uint32_t buf_size = reinterpret_cast(&_mai_data_pal_size); + if (buf_size != (0x20 * 3 / 2)) while (1); // halt if buf_size is incorrect + + const uint8_t * buf = reinterpret_cast(&_mai_data_pal_start); + + // "The size of a color lookup table is 20H (32) bytes" + // (assume top is already aligned to 0x20) + const uint32_t table_address = top - 0x20; + + // "The color lookup table defines the respective color codes of 16 colors in + // VRAM as 16-bit data" + uint16_t * table = &vdp1.vram.u16[(table_address / 2)]; + + uint32_t buf_ix = 0; + for (uint32_t i = 0; i < (buf_size / 3); i++) { + // there is a typo in "5.2 Color Lookup Tables" "If RGB code, MSB = 0" + // should be "MSB = 1". The "MSB = 0" claim is correctly contradicted later. + + table[i] = 1 << 15 | rgb15(&buf[buf_ix]); + // _mai_data_pal is rgb24, 3 bytes per color + buf_ix += 3; + } + + return table_address; +} + +uint32_t character_pattern_table(const uint32_t top) +{ + const uint32_t buf_size = reinterpret_cast(&_mai_data_size); + const uint32_t * buf = reinterpret_cast(&_mai_data_start); + + // Unlike vdp2 cell format, vdp1 sprites appear to be much more dimensionally + // flexible. The data is interpreted as a row-major packed array, where the + // row/horizontal stride is equal to the sprite width (as configured in the + // draw command). This is identical to how the input palette index data is + // structured, so there is no transformation to do here, only a plain memory + // copy. + + // Divide `buf_size` by two because this converts (indexed color) 8 bit pixels + // to 4 bit pixels. Round up to the nearest 0x20 (for an 8000 pixel/8000 byte + // image, this rounding is a no-op). + const uint32_t table_size = ((buf_size / 2) + 0x20 - 1) & (-0x20); + const uint32_t table_address = top - table_size; + uint16_t * table = &vdp1.vram.u16[(table_address / 2)]; + + // `table_size` is in bytes; divide by two to get uint16_t indicies. + uint32_t buf_ix = 0; + for (uint32_t table_ix = 0; table_ix < (table_size / 2); table_ix++) { + uint32_t tmp = buf[buf_ix]; + table[table_ix] = (((tmp >> 24) & 0xf) << 12) + | (((tmp >> 16) & 0xf) << 8 ) + | (((tmp >> 8 ) & 0xf) << 4 ) + | (((tmp >> 0 ) & 0xf) << 0 ); + buf_ix += 1; + } + + return table_address; +} + +constexpr uint32_t sprite_width = 72; +constexpr uint32_t sprite_height = 100; +constexpr uint32_t sprite_last_frame = 15; + +static uint32_t color_address, character_address; +static uint32_t sprite_frame_index; +static uint32_t animation_timer; + +// __attribute__ ((interrupt_handler)) changes code generation behavior for this +// function works. `rts` as generated in normal functions is replaced with +// `rte`. +void v_blank_in(void) __attribute__ ((interrupt_handler)); +void v_blank_in(void) +{ + // clear V_BLANK_IN interrupt status + scu.reg.IST &= ~(IST__V_BLANK_IN); + + if (++animation_timer < 4) + return; + else + animation_timer = 0; + + // 4 bits == 0.5 bytes per pixel + constexpr uint32_t sprite_size = (sprite_width * sprite_height) / 2; + + sprite_frame_index = sprite_frame_index == sprite_last_frame ? 0 : sprite_frame_index + 1; + vdp1.vram.cmd[2].SRCA = SRCA(character_address + (sprite_size * sprite_frame_index)); +} + +void main() +{ + uint32_t top = (sizeof (union vdp1_vram)); + top = color_address = color_lookup_table(top); + top = character_address = character_pattern_table(top); + + // DISP: Please make sure to change this bit from 0 to 1 during V blank. + vdp2.reg.TVMD = ( TVMD__DISP | TVMD__LSMD__NON_INTERLACE + | TVMD__VRESO__240 | TVMD__HRESO__NORMAL_320); + + // VDP2 User's Manual: + // "When sprite data is in an RGB format, sprite register 0 is selected" + // "When the value of a priority number is 0h, it is read as transparent" + // + // From a VDP2 perspective: in VDP1 16-color lookup table mode, VDP1 is still + // sending RGB data to VDP2. This sprite color data as configured in + // `color_lookup_table` from a VDP2 priority perspective uses sprite register 0. + // + // The power-on value of PRISA is zero. Set the priority for sprite register 0 + // to some number greater than zero, so that the color data is not interpreted + // as "transparent". + vdp2.reg.PRISA = PRISA__S0PRIN(1); // Sprite register 0 PRIority Number + + /* TVM settings must be performed from the second H-blank IN interrupt after the + V-blank IN interrupt to the H-blank IN interrupt immediately after the V-blank + OUT interrupt. */ + // "normal" display resolution, 16 bits per pixel, 512x256 framebuffer + vdp1.reg.TVMR = TVMR__TVM__NORMAL; + + // swap framebuffers every 1 cycle; non-interlace + vdp1.reg.FBCR = 0; + + // during a framebuffer erase cycle, write the color "black" to each pixel + constexpr uint16_t black = 0x0000; + vdp1.reg.EWDR = black; + + // the EWLR/EWRR macros use somewhat nontrivial math for the X coordinates + // erase upper-left coordinate + vdp1.reg.EWLR = EWLR__16BPP_X1(0) | EWLR__Y1(0); + + // erase lower-right coordinate + vdp1.reg.EWRR = EWRR__16BPP_X3(319) | EWRR__Y3(239); + + vdp1.vram.cmd[0].CTRL = CTRL__JP__JUMP_NEXT | CTRL__COMM__SYSTEM_CLIP_COORDINATES; + vdp1.vram.cmd[0].LINK = 0; + vdp1.vram.cmd[0].XC = 319; + vdp1.vram.cmd[0].YC = 239; + + vdp1.vram.cmd[1].CTRL = CTRL__JP__JUMP_NEXT | CTRL__COMM__LOCAL_COORDINATE; + vdp1.vram.cmd[1].LINK = 0; + vdp1.vram.cmd[1].XA = 0; + vdp1.vram.cmd[1].YA = 0; + + vdp1.vram.cmd[2].CTRL = CTRL__JP__JUMP_NEXT | CTRL__COMM__NORMAL_SPRITE; + vdp1.vram.cmd[2].LINK = 0; + // The "end code" is 0xf, which is being used in the mai sprite palette. If + // both transparency and end codes are enabled, it seems there are only 14 + // usable colors in the 4-bit color mode. + vdp1.vram.cmd[2].PMOD = PMOD__ECD | PMOD__COLOR_MODE__LOOKUP_TABLE_16; + // It appears Kronos does not correctly calculate the color address in the + // VDP1 debugger. Kronos will report FFFC when the actual color table address + // in this example is 7FFE0. + vdp1.vram.cmd[2].COLR = COLR__ADDRESS(color_address); // non-palettized (rgb15) color data + vdp1.vram.cmd[2].SRCA = SRCA(character_address); + vdp1.vram.cmd[2].SIZE = SIZE__X(sprite_width) | SIZE__Y(sprite_height); + vdp1.vram.cmd[2].XA = 100; + vdp1.vram.cmd[2].YA = 100; + + vdp1.vram.cmd[3].CTRL = CTRL__END; + + // start drawing (execute the command list) on every frame + vdp1.reg.PTMR = PTMR__PTM__FRAME_CHANGE; + + // + sprite_frame_index = 0; + animation_timer = 0; + sh2_vec[SCU_VEC__V_BLANK_IN] = reinterpret_cast(&v_blank_in); + + // reset/enable V_BLANK_IN interrupt + scu.reg.IST = 0; + scu.reg.IMS = ~(IMS__V_BLANK_IN); +} + +extern "C" +void start(void) +{ + main(); + while (1) {} +}