From 7b5cabf4fa31032e2b4b5e1c12def2d9d925ceb2 Mon Sep 17 00:00:00 2001 From: ABelliqueux Date: Tue, 22 Dec 2020 19:25:47 +0100 Subject: [PATCH] add sprite example --- TIM/README.md | 39 +++++++++ TIM/TIM16.TIM | Bin 0 -> 66320 bytes TIM/TIM16.png | Bin 0 -> 13944 bytes TIM/TIM16.tim | Bin 0 -> 16404 bytes TIM/TIM4.TIM | Bin 0 -> 15936 bytes TIM/TIM4.png | Bin 0 -> 1091 bytes TIM/TIM4.tim | Bin 0 -> 4160 bytes TIM/TIM8.TIM | Bin 0 -> 33694 bytes TIM/TIM8.png | Bin 0 -> 4250 bytes TIM/TIM8.tim | Bin 0 -> 8736 bytes hello_poly.c | 12 +-- hello_sprt.c | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++ 12 files changed, 277 insertions(+), 6 deletions(-) create mode 100644 TIM/README.md create mode 100644 TIM/TIM16.TIM create mode 100644 TIM/TIM16.png create mode 100644 TIM/TIM16.tim create mode 100644 TIM/TIM4.TIM create mode 100644 TIM/TIM4.png create mode 100644 TIM/TIM4.tim create mode 100644 TIM/TIM8.TIM create mode 100644 TIM/TIM8.png create mode 100644 TIM/TIM8.tim create mode 100644 hello_sprt.c diff --git a/TIM/README.md b/TIM/README.md new file mode 100644 index 0000000..b4e7df7 --- /dev/null +++ b/TIM/README.md @@ -0,0 +1,39 @@ +# TIM files + +Standard bitmap images that can be transferred directly to the PSX VRAM. + +Can be 4bit or 8bit with a CLUT, 16bit or 24 bit in direct color. + +You can access the TIM mode through TIM_IMAGE->mode. +Mode can be : + + * 0: 4bits b0 + * 1: 8 bits b1 + * 2: 16 bits b10 + * 3: 24bits b11 + * 4: mixed b100 + +See [FileFormat47.pdf](http://psx.arthus.net/sdk/Psy-Q/DOCS/FileFormat47.pdf), p.179 + +# Tools + +You can use open source tools : Gimp, Aseprite + +To convert your image files to TIM, use [IMG2TIM](https://github.com/Lameguy64/img2tim) : + + +## 4bpp and 8bpp specificities + +If you want to generate 4bpp and 8bpp TIMs, your original image must be in indexed mode with a palette. + + * For 8bpp, < 256 colors + + * For 4bpp, < 16 colors, and size must be a multiple of 4 + +You can use TIMTOOL.EXE from legacy PsyQ to check your TIM files, or use Lameguy64's [TIMedit](https://github.com/Lameguy64/TIMedit) + + +# Links + + * [TIMexample on psxdev.net](http://www.psxdev.net/forum/viewtopic.php?f=64&t=313) + * [Lameguy64's Github repo](https://github.com/Lameguy64) diff --git a/TIM/TIM16.TIM b/TIM/TIM16.TIM new file mode 100644 index 0000000000000000000000000000000000000000..b4e76cbf52c2f216e7d15b07c5d0dcf6395939e5 GIT binary patch literal 66320 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 literal 0 HcmV?d00001 diff --git a/TIM/TIM16.png b/TIM/TIM16.png new file mode 100644 index 0000000000000000000000000000000000000000..96e4adba2914f696c53976d30bb93a1e28b62c5c GIT binary patch literal 13944 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 F{{Xlco)7>4 literal 0 HcmV?d00001 diff --git a/TIM/TIM4.TIM b/TIM/TIM4.TIM new file mode 100644 index 0000000000000000000000000000000000000000..1cbb21f836c92f1f93018d3e0c9ccd924fea2fc0 GIT binary patch literal 15936 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 JPDHLkV1kM-*2n+= literal 0 HcmV?d00001 diff --git a/TIM/TIM4.tim b/TIM/TIM4.tim new file mode 100644 index 0000000000000000000000000000000000000000..9cb1da888cf6b20de4e717605fbf071ebf593efb GIT binary patch literal 4160 zcmcJOPiQ1X6vlg1#0?&191k8ub{m<41c{V!PYElTNXDg5T~3xYq+)q-;vzkPZ9?1xu=UA(>a=X0m;fByDgumAA;$8Y@o;s+OASe{#Z zx`vR)f}j>$$K-6SR-??rcOl|2bM$SHgS-1AiXuuW9l5iMUp;WFD6)(JygjN z27_5#3aqwQjf-M{@`|MH?4m8dRJ=qr~{uUZL>Hki49 zw#$`CQ1Hl>Bw_0^Oyw)WDSg0G=&$v9G`-flBoKYUX&p@l8^HF#f`k)>)C|1la+dcl z$-s%k-l#>_>lrQ?D81oko!vPPB_RI=xwi>kBv@F9D71=4i1OVcN5u>&d53jJm>7uyxq)_ImYd~RN z#j(dH45D;`PZ-=Rao^yZwCnq)p25wu%*h~Xx4FL@$(_;>T*KV{jm1RUMVvI95&FNfe*lmNmoaOx*L%>pU{Z8R+G!CfdhmVX0Ewoa7=>+4j-z-VT;k!QX^_ z8<*xbeEhAJeZO%WZ!6{EW2H9Z*x`MpkYJP@jz;DpuX=o4jd7{rouTgD8Nq33dDY|X zHuBGh9j%+47y(O5>mI-L$#0N{p>CoZ-p!8RK~YZr;b(V89iR~fg?g0D`#g?^EM=2$ z*ah|U#7Q|CQQy=Y;P?Zxem_M4olxsszoP@1LLOq9Jz0@V%EPjtmOU`N8R_YH;{@dL%;&J2Ez9 z@bqTM8(e=6oKfFuog~TW>EL9LoF?c8C-^gHwXA=VY?a&XBzZvIpQhiH^Suwp1!;XB z-Vbj4zx@0R|3}0>DxdElNp^ML_~Sw*+nIRTehc?k_&*%S(Nld|SHBN{nVjwq`t$Zv zF2)-P>FNH#i{*Ug@o9Q`KmA=@aeR2;y3g+q{GZ9grT^f&^!@ksf8?|LXK?I4-?TfS WlcV~kaUu`EcV_630WMXI>-rakK#Q*c literal 0 HcmV?d00001 diff --git a/TIM/TIM8.TIM b/TIM/TIM8.TIM new file mode 100644 index 0000000000000000000000000000000000000000..062a4360415e24cbed6f07308026dd70d4a0b451 GIT binary patch literal 33694 zcmeHudstT2o$ec;=iSi8T!@uzvSQZz&#KCWyV(%D@!UDY+ih@^1hOPFFq2# zdBNt&U&p^N@JHkSZ?RD}e@4@s{v!@2emwlodDF_4F5VXZ(8zakcV;eI&_8u&&XuC+ zWy>lLR<%5qTy}cxsr7%^{MGu?Pu#a4Q2G9xDUbbC?8&0JsjpOgI{jZ~{e4n({FRD- zN*O$7&B*qm|D89`e$wPM=wiiNLi9JS7r?jSu|5+aI|ChwEBmPI)e;+k4bI{OvBjZM{ z$-FD|&eYEm2d4h(?D(PU^8PkHChub6C*xwK#O999eJFEY@efPals;8Dj&dHk7e@=E$-2Ju1|1^tsy}9!J=Y78K!XIY&{&I5< z{{Puw8R!$$w{KLxeqqON&p@B3JMOrnUmuBS-yP8`G0{D$*0F(#%jx4>H~{loxn!DtP< zb0BzeE|`Gsx+}`vg?PEe*oflt?UhjMVGd-TT+_$H13>&t3X z%8iS^vyamq`wkqaG9u^nkB-q}F?|M`R#4ArWZ%FL)bFrRhx<}%SA6Eh?sF=2@2 zJ0>K{hH&wH2Aast>FR#75Rm`eWuU|Au|pDv`vZny3>Cg(6OsZ3n*o2~5Ihx= zaCgEGNB-7=VxsQo8xwJclJL_ENNj=I{wm(F-lTw8hQ`IjB>2r%AYdfL_K!~R1C2i^ z!E}fI1LMUYvM3FqC(qPL#g6MfcbSnlWGLiYDwBo`v*Ac@Lf=@k$DgP%3>bWu<-^ee zA*u&1qTB{RD}FHPjgF2@bSxMelT2+ECjYQRt8VxcV#PsY2Hy!5ups=4iS_xSda#BA zfOhbH@goxX?A>ntmMUk(@0v4oSWI*r(o}LEAyh7XVdK8t1*d{7OExbJ3|0rie+7x3>$zi0KA_g8>u3uq1d`tj%s%bzTET(lDgaJMXmQsyyAVUldMTut-Q5 zfC1qu8tn03bo7uU#2HX{$&aM(o}oix;_vJiJG z2?GYi4e_h=p?!-xSr~7K(i^?DLEPQ9pxdO#NJLNj#rEjCt!!3V%~be)P49D9JhkXxzw=?MdQ#ElLYi+1jcj;8+LDgPB?KPn_5%>4rgfk-^tDLK;m(C9wj;*oO*5rh`)hp|b$ z9t1YPg!sW&X#bd@q3V4;eVFR)JY;KU?Vb?>xHI-o@Is)CkZ`*!pr9D)lpmYs0U<{A zq*zZ6axdhTT8Ky%4>Rbq$=$akK7xl6)GL;U8I&L1b_xOs{S!z-OsE-zo9JN?tm4+D z+#NkM$L!PRMo(4#T{;I;2o z0>fu(wsU0SAoH*_pYTC^t6uMA;#o$pCe@fqRm(WsDa9($$?{ zydE0qnPYpjRbZ$`FvLU;3oF|Qq>nMhhMlAl8%9P15d8S!7ixvDA4(7fnG@2CZj9vQ zD*zVm&FKkfLTEnd8$H}5$I&p-CS>LHB+@xQdrbED9_IUpg=FQvVY7jebMKh+9t1k{ z!xvI=Gc)k1wcBz}kRSSdu|vW>k}+mnPx9Q#jM1aAddi+DAqb+v?aUO{vvUVQ$QYB` zgDZ>arG3g%2tgcWa_`-cR9-liQ#dwV6Nq2w@ zxQ{g+BEiE5z7b&%WMtkE@Ux5YIrMV|crw00>&6$$}y~ zlpc&v>&6n{DDZi^A{p=oFn#(ILYV9##%fHP5GbRH-ICx

UxwFdIOV?Jl{?zg{3+omz$`IRh%G!Q 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 V#7i^=n{H<)_%fk@e`nz={|`+~8czTK literal 0 HcmV?d00001 diff --git a/TIM/TIM8.png b/TIM/TIM8.png new file mode 100644 index 0000000000000000000000000000000000000000..ad9b49011af83df4ac4d31a355392abb7b810759 GIT binary patch literal 4250 zcmV;L5M}R)P)8$-Wj8BWIyPE5GO8mx zSUf^FLU3a|F+V|SPe4aTKw?!tL|Hyb_Y^;HJ4{tWP-j0wX+SklMNnBnRB1pukuh0w zJ~DebO=UtggE&RQB}imJOo%pAcRw$qFhj*ALb5AKa6vUxMp=11Mpj2n?;AnfAwc>W zJK7;jW<^2gA46S8MDZOwlsH4wB}Te0IPo7sMofQ!Lod-QK!QXzVM|hlMJ%8^Im#_q zTTfM3PH(n1L0nK=us30WN;rW^Kb%8Acuq`zPC$22La9D)YgJENR)1|(T9Ze7ZGLQBY;BqAPF-a_euk5MhLwP9l75YjfsUGibG&>+l7flo zZf}N(l46vZeT|ckh?1^=i({9Z#e_$Wj+bYfpqGxFh?APAkb0+(nv0sE*p5iMlz8@n ze#4NEs+X1RhJeJEe50VDx1EHlpRdfBkLj6Be6hBKu(yJ;vVOC;?w5&zx4p%vj`O2a z`Jzq6s+P;Di~pif`lD6%rceK-Oa7-)%&?X4t6<8rp8c#;`>a~Ww5;>0mjAD0y}G{T zwSd;Rm;AJA-oKvxyLk7xpXk1!{JwzM#Ifhcr1!<8{>F^(%%(8z6&aU~+ zsqfOM|IncK(yZOs)&13{``EYm+OhuGvj5t&{N1(x-M0VUu>0P;|KPa%;>G&o&i&@Q z_~_#P>(cn_-}mn4{qNlW^ymNg@BaAr`}*EojLichy zZMlz-(xP8w|R`i~9cnkMZ67As}>R9p3 zH{_%8tP8GTL{vr5FXXOh$9@=BQC-ilEoWVo%`D5d)VM0@FI8e?iVs5~N=w!J1&KL3 z%3T$gT3D80*h}@`&T=eUSLYnYHPx<~7LMhO0mBb^&|K*%d9Rd| zqukXieY9a}T59S!P6B`@2QPZUv6mo1+GM3A%9>*SPMmO6!yt~=t!gdRmCe;cSIGQ} ziT{bS&BDYAQ%GXD7D7<2kYZZ7`qti)bK(W@i{_FOs(_LjZ(quN;;1~Fb661pEn*Fg zUYL@R0%0T#945AA|3^i|@@0-iI9t!jV&|xvEE$YEhW#Iv`wFO3IxA!0e6rf|-<qKc?tL($B@Bgz`%= zrJQ@^b_~*|mFDI%$^+nynF7Q2$0TPSZ&n4w;(LIo$aiZ?H#!K;@3 zhRL-)nQRgPm0ocN zsn9$+O1_F1zLrgsIdQXw%Wer!$1fp<@s{PeIYyy?3?>jJBVT@925{2}5m1C@PzxS}J0yI@J zxg6Jdqo=3mCj4Fl0@HrAhgf%Kt30DjlVVer^#Rk_BiglghP}Zb-y}Q<;8p3scT@xCU9?e=X>~;zakA50dfXI*9KFUpXZe% z)Ozwg6x}Z6?Avdz@qn*>kfmgPCVvP{ZC6UUq@^N=F6Ul+&bzK?!a0g(EY1n4AN z1@m2Dl~>*cTvMJ0ZwPV#t-_V=n~EfK(hOAPUv86k0b7^H){!lN+;7r#C>udc7Qj zL2zOWH!%Q2%7f^@c5UQp^OO;QF?Dt4zNqrjR=f$;)AMr&T_7FTd-z0lcj3BVK4fct`M?Z<;h} z0E1yj`l?gHhOE4^al$SC^n$?#(Ap

EAA>%r9NIuqr(~5Jsv20u6xxSPTSC^&tyS zzW@8u^lU0~uIeKc{?uMoY;kknQe$V3c zrRe||*arYZ09*X_*Nx1(Aq@cHCN#qxps4ID1Gyv3+_{uAj zLq;r^CwQ5~H*s?MIekcA@5Q9m>hyYjkY0cHOHc8G&5{B$(IZ?)o;hdEoHu;{dc8j| z0P?Hf#mMJOkzq&-K$`#csbgq`N`RjDYY9Lezuc0Dk~OD}6{7z!We8e-tslH20LpC^ zqA>GWgf77A_*!$SkSI_9fR&!wmMj%d$OC~A#_DZHj;R64%E}7ib#T=o=FEX*W?381CP4LgaofeqO(cW908ReK zU@Kl(aOkp^JHU_T6DPCe^Iq2T#R?qTtB=AWBf|pjc=^ze%;oc|h1{jY5HnL1NlDu- z!;SIdfJhkI3t)s$@G<<(%+cL=Z)IVBgPn+`aV)~{%%`LO3cJRrCFv~ViS$V#7XhvW=)Fw{e-EYVKuwDZABi8HK_synm(}}-1F}b zW0GNhuxT?Nd+gCCXQx@xES9;6k4{LANj@aoEr#^VkorW+~09=cOjUq50Fy!t8P!-fqV zJ_`tAz~3?}Aqok62$F5cSV*`L{fCcEvy6)X8$E0&5E8~%#)XUl6|;tqL=6uR z066gkoxe^G08?z_Lnz-kFEm+AVVYvTJ#b^&U28k#R5BiIPJMvnVB{X-pME+RIl^bZ`hqF0t)C@ryad1z|O<)1Oc|)iy(v`3P^-9 z2IcOyW?J_Vp8|)2c-raI=p#sQlIyvdS+?B2!ksWEl>m$cKtr(8X?O`_R^$M|VF&e2 zeA)MA*?7Q0^v_Jx>QO05 ziB=m0yu$!qD9$gm-KNpd(4l&Xg25(1`|*86_N2Looyy zzy?Vi019{jsU3~m?i8(nw1yo&osQfrn;ekMmoY2bw(qFZc@%!o>{9DFvHjq(-A=x8 zKpB-G@PJI~XaDSveY%TQK?Kk~*qxni-S|PjY(usZ0Ace-A*b(%R&HqHu!1% zWqqJuv}id6&_z%nG!bben3WXPPI?LeneQx0)yi`Ko1*ST8v^)-2M>qT1oi^H8L$-) zur?H*jAdnn6P*zhK(C<$vYv5I;nx=JZij>B0XmTYw9;C@JBt+ZH>|fML{1V(kE@Le&Iqt zed^w=Th~$hVBIZk>(*USenAUU{q(|}DJW|pDA>1t-MaPb#bN7}hF3(wE>N(1xu1Az z3;I_o0(>S?cNPI_Gv$C6wfYx*0qgp3?+wreWxd`Dz{i7t^{Rm7YyG5q<8lIk+^Mf$ znpWwY0A63H6>n|&D9C~FHvX@@0RV}i5&*gy{%X9P|BMIWpLoK(k=&j2!sAB&Y=B-5 w2%YqxNS?E92cXqT&x!m6&FumF{OHmD08%hJJTC%1UH||907*qoM6N<$f@^sHasU7T literal 0 HcmV?d00001 diff --git a/TIM/TIM8.tim b/TIM/TIM8.tim new file mode 100644 index 0000000000000000000000000000000000000000..f8ed8acb41820268330c28de4fc464c82e4f205b GIT binary patch literal 8736 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 literal 0 HcmV?d00001 diff --git a/hello_poly.c b/hello_poly.c index 674a277..e72501d 100644 --- a/hello_poly.c +++ b/hello_poly.c @@ -117,12 +117,12 @@ int main(void) POLY_F4 *poly = {0}; // pointer to a POLY_F4 SVECTOR RotVector = {0, 0, 0}; // Initialize rotation vector {x, y, z} VECTOR MovVector = {CENTERX, CENTERY, 0}; // Initialize translation vector {x, y, z} - - SVECTOR VertPos[4] = { // Set initial vertices position relative to 0,0 - {-32, -32, 1 }, // see here : https://psx.arthus.net/docs/poly_f4.jpg - {-32, 32, 1 }, - { 32, -32, 1 }, - { 32, 32, 1 } + + SVECTOR VertPos[4] = { // Set initial vertices position relative to 0,0 - see here : https://psx.arthus.net/docs/poly_f4.jpg + {-32, -32, 1 }, // Vert 1 + {-32, 32, 1 }, // Vert 2 + { 32, -32, 1 }, // Vert 3 + { 32, 32, 1 } // Vert 4 }; MATRIX PolyMatrix = IDMATRIX; diff --git a/hello_sprt.c b/hello_sprt.c new file mode 100644 index 0000000..d7f63a1 --- /dev/null +++ b/hello_sprt.c @@ -0,0 +1,232 @@ +#include +#include +#include +#include +#include + +#define VMODE 0 // Video Mode : 0 : NTSC, 1: PAL + +#define SCREENXRES 320 +#define SCREENYRES 240 + +#define CENTERX SCREENXRES/2 +#define CENTERY SCREENYRES/2 + +#define MARGINX 32 // margins for text display +#define MARGINY 44 + +#define FONTSIZE 8 * 3 // Text Field Height + +#define OTLEN 8 // Ordering Table Length + +DISPENV disp[2]; // Double buffered DISPENV and DRAWENV +DRAWENV draw[2]; + +u_long ot[2][OTLEN]; // double ordering table of length 8 * 32 = 256 bits / 32 bytes + +char primbuff[2][32768] = {1}; // double primitive buffer of length 32768 * 8 = 262.144 bits / 32,768 Kbytes + +char *nextpri = primbuff[0]; // pointer to the next primitive in primbuff. Initially, points to the first bit of primbuff[0] + +short db = 0; // index of which buffer is used, values 0, 1 + +// Embed TIM files + +// See https://github.com/ABelliqueux/nolibgs_hello_worlds#embedding-binary-data-in-a-ps-exe + +// 16bpp TIM +extern unsigned long _binary_TIM_TIM16_tim_start[]; +extern unsigned long _binary_TIM_TIM16_tim_end[]; +extern unsigned long _binary_TIM_TIM16_tim_length; + +// 8bpp TIM +extern unsigned long _binary_TIM_TIM8_tim_start[]; +extern unsigned long _binary_TIM_TIM8_tim_end[]; +extern unsigned long _binary_TIM_TIM8_TIM_length; + +// 4bpp TIM +extern unsigned long _binary_TIM_TIM4_tim_start[]; +extern unsigned long _binary_TIM_TIM4_tim_end[]; +extern unsigned long _binary_TIM_TIM4_tim_length; + + +TIM_IMAGE TIM_16; +TIM_IMAGE TIM_8; +TIM_IMAGE TIM_4; + + +void LoadTexture(u_long * tim, TIM_IMAGE * tparam){ // This part is from Lameguy64's tutorial series : lameguy64.net/svn/pstutorials/chapter1/3-textures.html login/pw: annoyingmous + OpenTIM(tim); // Open the tim binary data, feed it the address of the data in memory + ReadTIM(tparam); // This read the header of the TIM data and sets the corresponding members of the TIM_IMAGE structure + + LoadImage(tparam->prect, tparam->paddr); // Transfer the data from memory to VRAM at position prect.x, prect.y + DrawSync(0); // Wait for the drawing to end + + if (tparam->mode & 0x8){ // check 4th bit // If 4th bit == 1, TIM has a CLUT + LoadImage(tparam->crect, tparam->caddr); // Load it to VRAM at position crect.x, crect.y + DrawSync(0); // Wait for drawing to end + } +} + +void init(void) +{ + ResetGraph(0); + + SetDefDispEnv(&disp[0], 0, 0, SCREENXRES, SCREENYRES); + SetDefDispEnv(&disp[1], 0, SCREENYRES, SCREENXRES, SCREENYRES); + + SetDefDrawEnv(&draw[0], 0, SCREENYRES, SCREENXRES, SCREENYRES); + SetDefDrawEnv(&draw[1], 0, 0, SCREENXRES, SCREENYRES); + + if (VMODE) + { + SetVideoMode(MODE_PAL); + disp[0].screen.y += 8; + disp[1].screen.y += 8; + } + + setRGB0(&draw[0], 50, 50, 50); + setRGB0(&draw[1], 50, 50, 50); + + draw[0].isbg = 1; + draw[1].isbg = 1; + + PutDispEnv(&disp[db]); + PutDrawEnv(&draw[db]); + + FntLoad(960, 0); + FntOpen(MARGINX, SCREENYRES - MARGINY - FONTSIZE, SCREENXRES - MARGINX * 2, FONTSIZE, 0, 280 ); + + +} + +void display(void) +{ + DrawSync(0); + VSync(0); + + PutDispEnv(&disp[db]); + PutDrawEnv(&draw[db]); + + SetDispMask(1); + + DrawOTag(ot[db] + OTLEN - 1); + + db = !db; + + nextpri = primbuff[db]; +} + + +int main(void) +{ + + SPRT * sprt_16b; // Define 3 pointers to SPRT struct + SPRT * sprt_8b; + SPRT * sprt_4b; + + DR_TPAGE * tpage_16b; // Define 3 pointers to DR_TPAGE struct. We need three because our images are on three + DR_TPAGE * tpage_8b; // different texture pages. + DR_TPAGE * tpage_4b; + + init(); + + LoadTexture(_binary_TIM_TIM16_tim_start, &TIM_16); // Load everything to vram + LoadTexture(_binary_TIM_TIM8_tim_start, &TIM_8); + LoadTexture(_binary_TIM_TIM4_tim_start, &TIM_4); + + while (1) + { + ClearOTagR(ot[db], OTLEN); + + // Loading a 16 bit TIM + + sprt_16b = (SPRT *)nextpri; // Cast whats at nexpri as a SPRT named sprt_16b + + setSprt(sprt_16b); // Initialize the SPRT struct + setRGB0(sprt_16b, 128, 128, 128); // Set RGB color. 128,128,128 is neutral. You can color the image by adjusting these values + setXY0(sprt_16b, 28, MARGINY); // Set sprite position + setWH(sprt_16b, 64, 128 ); // Set sprite width and height + + addPrim(ot[db], sprt_16b); // add the sprite primitive to the ordering table + + nextpri += sizeof(SPRT); // increment nextpri so that it points just after sprt_16b in the primitive buffer + + // Set Texture page for the 16bit tim : 768, 0 - No CLUT + + // Note : You need to use setDrawTPage each time you want to use a texture that's on a different texture page + + tpage_16b = (DR_TPAGE*)nextpri; + + setDrawTPage(tpage_16b, 0, 1, // Set the Texture Page the texture we want resides on. + getTPage(TIM_16.mode&0x3, 0, // Here we are using bitmasking to deduce the picture mode : &0x3 + TIM_16.prect->x, TIM_16.prect->y)); // In binary, 3 is 11, so we only keep the first two bits + // Values can be 00 (0), 01 (1), 10(2), respectively, 4bpp, 8bpp, 15bpp, 24bpp. See Fileformat47.pdf, p.180 + // Similarly, we could use bitmasking to deduce if there is a CLUT by bitmasking the 4th bit : if(TIM_IMAGE.mode & 0x8) LoadImage... : + + addPrim(ot[db], tpage_16b); // add the sprite primitive to the ordering table + + nextpri += sizeof(DR_TPAGE); // Advance next primitive address + + // Loading a 8 bit TIM + + sprt_8b = (SPRT *)nextpri; + + setSprt(sprt_8b); + setRGB0(sprt_8b, 128, 128, 128); + setXY0(sprt_8b, sprt_16b->x0 + sprt_16b->w + 32, MARGINY); + setWH(sprt_8b, 64, 128 ); + setClut(sprt_8b, TIM_8.crect->x, TIM_8.crect->y); // Only difference here is we set the CLUT to the position of the VRAM we loaded the palette earlier (see LoadTexture()) + + addPrim(ot[db], sprt_8b); + + nextpri += sizeof(SPRT); + + // Set Texture page for the 8bit tim : 512, 256 - CLUT is at 0, 480 + + tpage_8b = (DR_TPAGE*)nextpri; + + setDrawTPage(tpage_8b, 0, 1, + getTPage(TIM_8.mode&0x3, 0, + TIM_8.prect->x, TIM_8.prect->y)); + + addPrim(ot[db], tpage_8b); + nextpri += sizeof(DR_TPAGE); + + // Loading a 4 bit TIM + + sprt_4b = (SPRT *)nextpri; + + setSprt(sprt_4b); + setRGB0(sprt_4b, 128, 128, 128); + setXY0(sprt_4b, sprt_8b->x0 + sprt_8b->w + 32, MARGINY); + setWH(sprt_4b, 64, 128 ); + setClut(sprt_4b, TIM_4.crect->x, TIM_4.crect->y); + + addPrim(ot[db], sprt_4b); + + nextpri += sizeof(SPRT); + + // Set Texture page for the 8bit tim : 512, 256 - CLUT is at 0, 480 + + tpage_4b = (DR_TPAGE*)nextpri; + + setDrawTPage(tpage_4b, 0, 1, + getTPage(TIM_4.mode&0x3, 0, + TIM_4.prect->x, TIM_4.prect->y)); + + addPrim(ot[db], tpage_4b); + + nextpri += sizeof(DR_TPAGE); + + FntPrint("16 Bit! "); + FntPrint("8 Bit! "); + FntPrint("4 Bit!\n\n"); + FntPrint("Check VRAM in emu to see the dif"); + + FntFlush(-1); + + display(); + } + return 0; + }