From f27ba1129a0ffa8b2b0b68b0df4f6b022822233e Mon Sep 17 00:00:00 2001 From: lephe Date: Sat, 7 May 2016 12:10:47 +0200 Subject: [PATCH] Finished rewriting bopti, except for Checker. Removed .gitlab-ci.yml because of non-successful runner tests. --- .gitlab-ci.yml | 3 --- Makefile | 2 +- ginttest.c | 10 ++++++---- ginttest.g1a | Bin 14124 -> 14328 bytes libc.a | Bin 1770 -> 1770 bytes libgint.a | Bin 25114 -> 25286 bytes resources/bitmap_opt.bmp | Bin 2810 -> 2810 bytes src/bopti.c | 28 +++++++++++++++++++++++++++- 8 files changed, 34 insertions(+), 9 deletions(-) delete mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 9be67b4..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,3 +0,0 @@ -build: - script: - - make diff --git a/Makefile b/Makefile index a4f7209..e368635 100644 --- a/Makefile +++ b/Makefile @@ -80,7 +80,7 @@ ginttest.g1a: libgint.a $(src-app) $(res-app) $(ob) -R .comment -R .bss -O binary $(elf) $(bin) $(wr) $(bin) -o ginttest.g1a -i icon.bmp @ echo "\033[32;1mBinary file size: "`stat -c %s $(bin)`" bytes\033[0m" -# @ sh3eb-elf-objdump -h build/ginttest.elf + @ sh3eb-elf-objdump -h build/ginttest.elf diff --git a/ginttest.c b/ginttest.c index c0c4a78..f918f8c 100644 --- a/ginttest.c +++ b/ginttest.c @@ -296,18 +296,19 @@ void bitmap_test(void) enum BlendingMode blend = Blend_Or; uint32_t a32 = 0xffffffff; + int black_bg = 0; int key; while(1) { dclear(); - if(blend != Blend_Or) dreverse_area(0, 0, 127, 63); + if(black_bg) dreverse_area(0, 0, 127, 63); dimage(opt, 0, 57, Blend_Invert); dimage(sprites, 2 & a32, 2, blend); - dimage(sybl, 98 & a32, 4, blend); - dimage(sybl2, 98 & a32, 24, blend); + dimage(sybl, 30 & a32, 40, blend); + dimage(sybl2, 62 & a32, 40, blend); dupdate(); @@ -318,7 +319,8 @@ void bitmap_test(void) if(key == KEY_F2) blend = Blend_And; if(key == KEY_F3) blend = Blend_Invert; - if(key == KEY_F4) a32 ^= 31; + if(key == KEY_F4) black_bg = !black_bg; + if(key == KEY_F5) a32 ^= 31; } return; diff --git a/ginttest.g1a b/ginttest.g1a index 923559a4f2a2161d04cd5e28e178e5765a509f94..076483fed459a670ee8cefec74dfcecda9e0c6e6 100644 GIT binary patch delta 1817 zcmZWqeN0nV6upZ~PJ@)1#|g;h3`?mRx6$@=oUzjM#I z_q=m*f48r@b#jm93kvOQ$)_7W!g!LKz?U$~ zohNjwA3}&tFGVadiCBpgu^9l1hg2fb?wa*UNK%=#2(f9$5Syb16a%~fH%Ch9QgVWj zqJr~C%5eqPEfHWmA?0DLkPYGro=RDaag2W?bsf$!AApP`?7Rr<0q#d^<}L0RdBqoF zUSozgn|+bi@djaE&}S_rL<9 zxZr-=260_@#RKux|BGwGb}>FXdW5z}n4MWKp(yb!E-Jd*t~^pYXYaHtkNPCyWWFm{ zuoaxMKIv?y;H$dtBkuc3z(Ayk$Z%R+1x#aB=VF=3&& zFSVy+P(O8ntJm$Bvj%iDuI6v)4q-Wjv`{2&@?&l3B8f7D^t+Vhd;`Fhd$Qn;Y>!2@0%)(YpP*zEorCdtSVLDNjk@? zc+nJ1x)qI?Yrm&)dAj4yD58ySg>$O4gI+~T=tcBb1*48T0fN1L+UUG@HCYk~5RCb> zu4a0Z=4gRyd=%CF_4LGw{Dw0t^LKT4d5_Q{Y0b3x1B9DDEfJ99rZZk{D0#h;@VWWm z-$O|DgY))!!}fU2%0XYm-NdI(mn&YttAc@{!&1jztsTyUYl79&GP|B$+Ky|+ON9N& z&K|nRF=--?%6+AxY<4HSiI&8!#7>ZpC*how|Kj+2N2co^mU?!I&A&>U-a` zT%NtUG^*?*Y9@oemx{8BvIA?PWK_zi1=9$MPSxHm(-)^XCW~xi$%Z_-u#qn}G${6! z71}l$XuH=!^P4n*uS?s!-!@!{xV^#{`pwmvN&ghgS}=XY)zG_J-#pmVvE$5B@hZjo z8_wHJ9nFI<8((jzQXIgJiNlyZ-+8u8>W=%RzQC}b2#xISgCcfBag-3)5oM@{Q3u|P zxSe;l4c1JxEM7+zzE7Y0y`=t*e419%7P^r649TI0%*J@_?UpMyQE@4fyZI)52REFQ z9p9j6$EzZN#9^uPwrjjFpH{ty8{>}n{v>-jATah&)7FWGuS4Ct4FO+alpI6Xr2ln& zJ-N~b-I}Tm+w!WH!Alk~UxgQ6M>~bq4$qZfhBxzwzWHQxJsgveI=#MUd%RlFhF85D zAljv&l~BeRzcg?In!4Hiwop7mg|;y2qU@uxF=gnxYee%~p{vc$j8UP!Yd9p|9;ePF zOI|-W%&5=B7&{31BB_+ZbunDv^(HG`XoNd$29axffr~lEl581VHEl2NT{1<$C&RPU zsx}|+qu)=4@!Gr?g1-^g9OHsZEx4QSUD}3yDSJ_qyb`?)cuT$)O{7$!lW6XDk$CrV z7jf3qg>y{6mtk(2k5PTWG>t8&*4i$sHKReJ)*4jL$8LgQ28e8%V<1$kRDXda2%`){ cpo8$q+JN{=R$fZf-sAV?Whulk)MS>K#ISL zCBBum7I1Pk;IMhX;RN7b8v~s797zH69D97xhLa?f@H*gPY5}LSAaNq;Lej~T_|9dz zJ1B*Yuf_ABj_<+!=kz?6X*QK_mx(%sN6K)$tOpr) zyfPAtH6mN#D;xI8mW^yj#bB`pTZW&}u2*Du4g#roH>(@{#c2(}+8{tgfRv=D-$*LH zgQS#GsGFzj?WVJY+2~?e7y~#xjYNlpLt;i!u-G?!$ztF1Xae+T zI`n6d^q|}WNPpJ~?)9{SL4bUE#B_XHOeG}wCow6QwvVUeiP74=$YcQkcuw9ZF#=AJ z#XIC1C5TI05&uwrR)V4xB;WelehK2GSjiKyM^g+fVrn#yy(qju`~=dQ(bVN4+W>zd z)*wM-Vh4mfu>nc6b_$UZ2|ecrmD`|Mpc6J?@~eYz9ON3t5&);17pmwFAf_$ihgD}K zC=uPsA5Lt1`Sc`_fkuH!+7G1&QX!Ibr_iBphNfLjZ1-e{y;fJr-YD#0?`|g}BRfDY zIGTQD7;>LFGj=JBW{ejT^>Kcr>%kfFk36lHPr(2S10{Wbx zcSamlLexUO>=4ZAa*uyVSY{jgtwGx}PR$S|HKT8a_L*#dQ@H&nCet#nAy3Mz^OnCV z<86O)v`@nsM;Wa&)0nyZl+ZUGDBUA$pY)^B5KPP?&FX1Te(ZO)*55Ex-`^#7#-H3$ zeW$t0UX%o5T+`W{t zx#$HZj#6BHUp`nzpDTJ^AlmoSKDRHFl)peJWN=h+Gf@m z8O0G;8L$MJ!W)3w&zd|(cg&(1C66f2my=laub%I#%O265&nKa$tR~>GXW#Ug**MR7 z)`Ujn3`r3e0GHg!o)`_WpRwJ$^Vw^M2=+#uoxST6UT73BJ^3NvQd^KSa!hrKOF4)a zYjeea1y+UU8H&>o)+XXYmNtZ;-}731T3qU-R`5rs7v>qp09s>COY=_s3fLxe=nuf! zeefLEirGNLAsg6)m4a>XG+M32YYNx*eoTC;>6`spb3E#z<`d##?-G{W+r5X%y<9-w zFDyWMkD|A`Un{8QE#^YY diff --git a/libc.a b/libc.a index 5af40679f3942db5591d73e281f48b63275d40a2..fdab1e246183244671ddee5bbd54e90723472ab9 100644 GIT binary patch delta 39 kcmaFG`-*ph44avushNTCM5P=kYvYt6CMa_=5A!`{0OOYm#{d8T delta 39 jcmaFG`-*ph44bK`1rSbD%7L;rPAOu7GB@)u-(v;<=FZA@EL7(Vy*7TR41jE)w!mQ%s8PC9NsWPpGJI}&iP^|pdo!Q8Gb6ewK`{=hM* zNsVJ+-JRae7{iYeqKT2vWj8_ppv(A3h)N_~H13CKsRKe83569#x7NEcLjB`O-kj%o z&w0=LJUKb%>nUVr8o4e_IjJr#DK7au@9FWs0ciT4XuS=)ujjEVIG=*r&5EDP!>9SjhZ##O3@s$`cQ#VTdQ7a%8 z&*izM(&JRmEQEsJzlUd_sS1Z5&3||ND|ppoe;Flr3{R>@^*b8rER+jq6dv==)@2)F zW`DInlLN(d2kAz5)PY};2NM)-5mo;N5nZ}|YZ<^?3MXSuH>`v_cnIDtaxLq(XjHX2 zoJ&4kNR$O=l*k)CY>YQ#4;C3VmVxQfdz-H-%_HT?PPc=#hq`!9kz#;GDR!6_0=zXc zqLY|N3JQW4krk3JfncopNtLuTO~0*GgcIgMsJ5^= znHm3}O075}gBnLZWE-++*K|d%;}`Q}fO3Sw;4gzy1n+sp2jW)@=BaL}&2M$Lk2FQ< z@S2C@y47v-b8MqVR)>Fx=r{Wi)h*9Ay%-f4!05#R)VI_EM}j=U*Q55XJv%UZUCahL`3p_;hu0zyuO$P#H@@0wf#r4>L(u~xR7SxoS+ zy@mH9l>s{1hmq@s4Yd*;yo6XH`bbYgb%zcS8lUyuP4l#Gv|C22gMu(v!S-FRCdw6@ zTY0_gd|~|wuE!zb?);He&=GRF?UUXNhvJcAu*D S*>}NOntn)m!C86h4)!mrVW6Y{ delta 991 zcmX?hlyTM(#tAZPrluB_W~LLB{%RUAFofa3v1|+s5WLxgaT_y8qp5|-`?yZ6rN2?Ft!Z;A}$#Fh-4pJJVGW4u6~E|D^8f26}na|5Vq;&7lvW{Ft&^1IjCOK z$uj(sn+;tWx#S@ZS5PoCFfc$O%}h*yJPV7-hA!GntRE)-^UJEwEY@H4>bL&3>}368 zo@?~4d2{GL^H-`r!tpPm_@ul%$At!YZ}}((Zu!cKb(%Be_w=SIG6nt$`s27J;Fpoi zNqGg1ekOVK1*<$ogMKGAJ8~FF$cuRj_6N(W9O5WbkIeiNL>){#!oiXVO<%a3uJjhiJD>(C1eS(O+V| zTI<;8oVPifS?5GQQ^Mv2>mM^PzYF~2ENgkZ7sOxsl!5hL;73>4v`?zmmqQ;U zq-NIX<9(0L@U#A&Q!EIzp)K&(Fa$3p>Q@&1H|9IqK(u{``8`^Q1XmM7rH zoB!4tiQI(>KC(&LKDr*F{SWjHakj_&W|VT|u#tJkkl1`vKjU%U<=n#ycyok1T~n{5 z#sFRRnEjvY-n37i+!c&A4ZX+eSP~X@u=Kz0U|Rnn^;-Y>2MK}SlbVBn=SVwo7|yvZ z7hC_G>z}-kyt2HZ{1p8|Kx>4PKSh4bx%`g7(uRRE;c&{~^u^Eqv(EG8u4A-#(EqK5 zCGca=XG0x%!CJ=TPXV8b|JyS3Kh`%|-xT@9SiGC{wZQthub5J=uHTs&`&wfC^jD1Q zW79sZ54JqM-bP<&y_G&Np(B8P+h&)bgN%$Oli5PFn3y^y8-;B1WvXFd;ADg-VrpPu zV1cn)7#NtKZ00pc>y2_j^K-L2w=9rwNEYJ94@~JQl RSPuCSc8(3kJ`?+k1pxicMEL*! diff --git a/resources/bitmap_opt.bmp b/resources/bitmap_opt.bmp index d3eb2328782b8ef0ff921ed9463e96fd123270af..66fe7226214989872cf70e3ec0f55d8a21608ce7 100644 GIT binary patch literal 2810 zcmeH^F-}843`7GB5|lKYCk+)1=b)pb;($33O&Id{BWt{i&?2g2rFF*M@w1ccpFVDP zr}L)xqWi9UqkFY`P*kq>`#bKbps;^@e%wWIG!^hzB~U8Md=VW z_g^o}J*{MMW`x>Ub>Acil|O8xSYr@kgq;#yV;&NCT8KK5orbXxnVZJf_B?FK?c8uh!j*1 zweX9)pO9Z-<@=8*8b_y&tm90UtZq6^lv{O3jDaA|NaH^kMI@vcW_d8YljpfNpx-< zPiJD@!Z1o$6Dg6~g30h@GHnpK`780K`e!nDxs;}tqd7iwiuH@<}%FbifZpvJ_q z5X_=RQYm0Cr=wLC0$@s5Q!+&Y3%(v)vsJ#e%{DZ! z9Yzbr`7RtWWGz>R8wl*oZz$~8^5ywH0wWtxS1ep8^CJ6?EAebVv)-me zCL=v1vbK7X1VhkVDUCjkOJ`5&!g5S3wHbGQ&*#>>dNPQa{br*I^D Rwjw5HdHS>e?)>F1@Cgpt7LNb` diff --git a/src/bopti.c b/src/bopti.c index 19725fd..81a3794 100644 --- a/src/bopti.c +++ b/src/bopti.c @@ -187,7 +187,7 @@ static void bopti_rest_nover(const unsigned char *rest, int x, int y, int vram_offset = (y << 2) + (x >> 5); int row; - // We *have* shift > 0 because of this function's 'no overlap' + // We *have* shift >= 0 because of this function's 'no overlap' // requirement. int shift_base = (4 - element_size) << 3; int shift = shift_base - (x & 31); @@ -213,6 +213,32 @@ static void bopti_rest(const unsigned char *rest, int x, int y, int width, bopti_rest_nover(rest, x, y, width, height, mode); return; } + + int element_size = (width > 16) ? (4) : (width > 8) ? (2) : (1); + int vram_offset = (y << 2) + (x >> 5); + int row; + + int shift_base = (4 - element_size) << 3; + int shift1 = (x & 31) - shift_base; + int shift2 = shift_base + 32 - (x & 31); + + uint32_t and_mask_0 = 0xffffffff >> (x & 31); + uint32_t and_mask_1 = 0xffffffff << (64 - width - (x & 31)); + + uint32_t row_data, operator; + + for(row = 0; row < height; row++) + { + row_data = bopti_rest_get(&rest, element_size); + + operator = row_data >> shift1; + bopti_op(vram_offset, operator, and_mask_0, mode); + + operator = row_data << shift2; + bopti_op(vram_offset + 1, operator, and_mask_1, mode); + + vram_offset += 4; + } } /*