From 02ebe5d276d33d55b9d46fef19a8ef939b7c9743 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Sat, 4 Feb 2017 13:04:37 -0600 Subject: [PATCH] moved my palette function failure to 16_vlpal.c --- MEMINFO.16W | 0 db.exe | Bin 13186 -> 13186 bytes makefile | 5 +- src/lib/16_vl.c | 175 +---------------------------------------- src/lib/16_vl.h | 3 +- src/lib/16_vlpal.c | 191 +++++++++++++++++++++++++++++++++++++++++++++ src/lib/16_vlpal.h | 8 ++ src/lib/doslib | 2 +- src/palettel.c | 4 +- src/pcxtest.c | 2 +- src/pcxtest2.c | 2 +- src/scroll.c | 8 +- src/test.c | 2 +- src/vrstest.c | 2 +- src/zcroll.c | 5 +- wcpu.exe | Bin 13312 -> 13328 bytes 16 files changed, 220 insertions(+), 189 deletions(-) delete mode 100755 MEMINFO.16W create mode 100755 src/lib/16_vlpal.c create mode 100755 src/lib/16_vlpal.h diff --git a/MEMINFO.16W b/MEMINFO.16W deleted file mode 100755 index e69de29b..00000000 diff --git a/db.exe b/db.exe index 457a9fa192d31529e39312c63fcfc8b50357625a..af80cac81c36b2b54df02442584b23793f3cadcb 100755 GIT binary patch delta 801 zcmZvaUr5tY6vyxVd38U3`B8sU@4bg}4)>fh*frQS zJmc2qBQy@gfVTw*kwS!ufHL4wT7;VfIzjgV4}mG5vIwC@pc{w*2_T0=xTjk1*CEsj z3e}HX+Xj5iqk^d3U;r`0~uGLSe*H%%P~q z_3VM-7LKr7r4diE)5;n=#`=_6JR*%MM=>sB)#?yVur2i~w;%iM0uB4$iHkNKA-do> zS>9U?Z$rdt?muCzb=QhM8&5+kv6UDO4UzjRF{2sbkX@v$d}4LJyWiqvtZvrYuA(XCsgkP%hfs6_6!<^ z8aB~Qx}=H^umN3@S}&&|`Wjvj(eJAGWA<6sj2+CPZ^JHjSFgb%?1{cFRo6N*J8U?M zO{~XIcclvIY$5)R9V(lRaP%_gkKPGV-M_{`-&&fQFTIFxVE0FT$1TJMX783O)BE0) zzS~&;N1x0GuB(A6LLnTD(oI#|$dttga62n2{-z!KN`oylyc=R@{1owg!R925wl7x( z*WO5#2ell&$1ap=aEx6mwFx!+aN@_>I!}YrTxmlFz9^+t{FZ4D%BWX@Lu&7Vw)_EMa}2rw delta 822 zcmZ9KZAep57{|}qZhF0Y^Bw2f-85b0aE&<>Wm=Y-6uq#Cikfeq41y$_A5y_#h#ePW zaIjh+xYRyYa3M^n)+`mI=))k1eF{di+1mn*u&rlW6dm|o{^xL?|9Q^yJY#)heclJ7 z$^wLZKp1#gh)@E^S0SVU?ubL8yFdr%LEr}92lV?9ss}CrVITtJG9l5N8sdR-JVKMe zG_VLf2KqG!eFYwZ-y*OBx{wKRqIoSsQ$+|33DuaeSWA~OY&cWkI0rspU}lXB+3f7@ zYH#aUTgXQ8x@b6ytc(W+FYoQ<>8ONfOpM=5{gNCIvu3&=xwOy3xbw|aFD=J@+9o}Q zYv^t15Pn7TWaW5)uWY*9MZY1?Dhu|oMdj58xaoLbflS$g=tS#zJnbPj2yQ?1UPWX zq|0I$Y`3K}LM}_0)AYy73SRYlUflm)Tr8~H?qqeYGYlIOgr2Nb5q>Tl&Xr`S2R?eq zItea>M4t5|KO_Dv=EUUnMughcy*Qf+>gJp{A^+P$MHzEg2JjVwV0 z?IccC<#7V;c_RY>BpnhXt&rsP0O9|(5<1yrceFeTiFOlr zR~i{NZ=j#F1*HatKrB2iE{|4l-q>1Gst;R@60K9zvF2`+!mYhjU-TKesw!6DkWf{u z7OAFLUo76z+Dsx>HyN@_x^~Ff1bG8LM`?eFHM5rW#=dRDSrS0IOL$V!kcLkQV*Sr_ fpalette; - word w=0; - word q=0; - word qq=0; - static word a[PAL_SIZE]; //palette array of change values! - word z=0, aq=0, aa=0, pp=0; - - //modexWaitBorder(); - vga_wait_for_vsync(); - if((*i)==0) - { - memset(a, -1, sizeof(a)); - outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ - } - else if(qp==0) - { - q=(*i); - } - else - { - q=(*i); - qq=(*i)/3; -// printf("q: %02d\n", (q)); -// printf("qq: %02d\n", (qq)); - //printf(" (*i)-q=%02d\n", (*i)-q); - outp(PAL_WRITE_REG, qq); /* start at the beginning of palette */ - } - if((*i)0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else - if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) - { - w++; - break; - } - else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3)) - { - //printf("qp=%d\n", qp); - //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); - printf(" %d's color=%d\n", (*i), (a[qp])-(bmp->offset*3)+qp); - //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit! - if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; } - } - else - { - if(bmp->offset==0 && (*i)<3 && q==0) outp(PAL_DATA_REG, 0); - else - if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); - else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]); - printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); } - } - } - //if(qp>0) printf("qp=%d\n", qp); - //if(qp>0) printf(" (*i)=%d\n", (*i)/3); - } - //modexWaitBorder(); /* waits one retrace -- less flicker */ - vga_wait_for_vsync(); - if((*i)>=PAL_SIZE/2 && w==0) - { - for(; (*i)0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else - if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) - { - w++; - break; - } - else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3)) - { - //printf("qp=%d\n", qp); - //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); - printf(" %d's color=%d\n", (*i), (a[qp]-(bmp->offset*3)+qp)); - //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit! - if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; } - } - else - { - if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); - else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]); - printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); } - } - } - //printf(" (*i)=%d\n", (*i)/3); - } - -printf("\nqqqqqqqq\n\n"); - - //palette checker~ - if(q>0 && qp==0) - { - long lq; - long bufSize = (bmp->width * bmp->height); - pp = q; - //printf("1(*i)=%02d\n", (*i)/3); - //printf("1z=%02d\n", z/3); - modexchkcolor(bmp, &q, &a, &aa, &z, i); - //printf("2(*i)=%02d\n", (*i)/3); - //printf("2z=%02d\n", z/3); - aq=0; -aqpee: - while(aq<=aa) - { -// printf("a[%02d]=(%d)\n", aq, a[aq]); - if(a[aq]==-1) aq++; - else { aqoffset++; break; } - } -//update the image data here! - for(lq=0; lqoffset for this spot! - NO! wwww - */ - - /* - Facking bloody point the values of the changed palette to correct values.... major confusion! wwww - */ - - //(offset/bmp->offset)*bmp->offset - - - //printf("%02d ",bmp->data[lq]+bmp->offset); - //if(lq > 0 && lq%bmp->width==0) printf("\n"); - //printf("%02d_", bmp->data[lq]+bmp->offset); - /*if(bmp->data[lq]+bmp->offset==aq) - { - //printf("%02d", bmp->data[lq]); - //printf("\n%02d\n", bmp->offset); - printf("aq=%02d ", aq); - printf("a[aq]=%02d ", a[aq]); - printf("a[aq]+aqpp=%02d ", a[aq]+aqpp); - printf("a[aq]-aqpp=%02d\n", a[aq]-aqpp); - //bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]); -//++++ bmp->data[lq]=a[aq]-aqpp; -// printf("_%d ", bmp->data[lq]); - //if(lq > 0 && lq%bmp->width==0) printf("\n"); - } - else if(bmp->data[lq]+bmp->offset < ((*i)/3)-aqpp) - { - if(bmp->data[lq]+bmp->offset >= aq) - { - bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp;//-((z-(*i))/3); - //printf("_%d ", bmp->data[lq]+bmp->offset)-aqpp-((z-(*i))/3); - } - else bmp->data[lq]+=(bmp->offset-aqpp); - }*/ - - //printf("%02d`", bmp->data[lq]); - //if(lq > 0 && lq%bmp->width==0) printf("\n"); - } - -//printf(" aq=%02d\n", aq); -//printf(" aa=%02d\n", aa); - - //update the palette~ - modexPalUpdate(bmp, &pp, aq, aqoffset); - (*i)=pp; - - if(aq, or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#include "src/lib/16_vlpal.h" + +void VL_palette(bitmap_t *bmp, word *i, word qp, word aqoffset) +{ + byte *p = bmp->palette; + word w=0; + word q=0; + word qq=0; + static word a[PAL_SIZE]; //palette array of change values! + word z=0, aq=0, aa=0, pp=0; + + //modexWaitBorder(); + vga_wait_for_vsync(); + if((*i)==0) + { + memset(a, -1, sizeof(a)); + outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ + } + else if(qp==0) + { + q=(*i); + } + else + { + q=(*i); + qq=(*i)/3; +// printf("q: %02d\n", (q)); +// printf("qq: %02d\n", (qq)); + //printf(" (*i)-q=%02d\n", (*i)-q); + outp(PAL_WRITE_REG, qq); /* start at the beginning of palette */ + } + if((*i)0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else + if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) + { + w++; + break; + } + else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3)) + { + //printf("qp=%d\n", qp); + //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); + printf(" %d's color=%d\n", (*i), (a[qp])-(bmp->offset*3)+qp); + //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit! + if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; } + } + else + { + if(bmp->offset==0 && (*i)<3 && q==0) outp(PAL_DATA_REG, 0); + else + if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); + else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]); + printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); } + } + } + //if(qp>0) printf("qp=%d\n", qp); + //if(qp>0) printf(" (*i)=%d\n", (*i)/3); + } + //modexWaitBorder(); /* waits one retrace -- less flicker */ + vga_wait_for_vsync(); + if((*i)>=PAL_SIZE/2 && w==0) + { + for(; (*i)0)&&((*i)-q)%3==0 && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) outp(PAL_DATA_REG, p[(*i)-q]); else + if(((((*i)-q)%3==0)) && (p[((*i)-q)]==p[((*i)-q)+3] && p[((*i)-q)+1]==p[((*i)-q)+4] && p[((*i)-q)+2]==p[((*i)-q)+5])) + { + w++; + break; + } + else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3)) + { + //printf("qp=%d\n", qp); + //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); + printf(" %d's color=%d\n", (*i), (a[qp]-(bmp->offset*3)+qp)); + //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit! + if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; } + } + else + { + if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); + else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]); + printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); } + } + } + //printf(" (*i)=%d\n", (*i)/3); + } + +printf("\nqqqqqqqq\n\n"); + + //palette checker~ + if(q>0 && qp==0) + { + long lq; + long bufSize = (bmp->width * bmp->height); + pp = q; + //printf("1(*i)=%02d\n", (*i)/3); + //printf("1z=%02d\n", z/3); + modexchkcolor(bmp, &q, &a, &aa, &z, i); + //printf("2(*i)=%02d\n", (*i)/3); + //printf("2z=%02d\n", z/3); + aq=0; +aqpee: + while(aq<=aa) + { +// printf("a[%02d]=(%d)\n", aq, a[aq]); + if(a[aq]==-1) aq++; + else { aqoffset++; break; } + } +//update the image data here! + for(lq=0; lqoffset for this spot! + NO! wwww + */ + + /* + Facking bloody point the values of the changed palette to correct values.... major confusion! wwww + */ + + //(offset/bmp->offset)*bmp->offset + + + //printf("%02d ",bmp->data[lq]+bmp->offset); + //if(lq > 0 && lq%bmp->width==0) printf("\n"); + //printf("%02d_", bmp->data[lq]+bmp->offset); + /*if(bmp->data[lq]+bmp->offset==aq) + { + //printf("%02d", bmp->data[lq]); + //printf("\n%02d\n", bmp->offset); + printf("aq=%02d ", aq); + printf("a[aq]=%02d ", a[aq]); + printf("a[aq]+aqpp=%02d ", a[aq]+aqpp); + printf("a[aq]-aqpp=%02d\n", a[aq]-aqpp); + //bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]); +//++++ bmp->data[lq]=a[aq]-aqpp; +// printf("_%d ", bmp->data[lq]); + //if(lq > 0 && lq%bmp->width==0) printf("\n"); + } + else if(bmp->data[lq]+bmp->offset < ((*i)/3)-aqpp) + { + if(bmp->data[lq]+bmp->offset >= aq) + { + bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp;//-((z-(*i))/3); + //printf("_%d ", bmp->data[lq]+bmp->offset)-aqpp-((z-(*i))/3); + } + else bmp->data[lq]+=(bmp->offset-aqpp); + }*/ + + //printf("%02d`", bmp->data[lq]); + //if(lq > 0 && lq%bmp->width==0) printf("\n"); + } + +//printf(" aq=%02d\n", aq); +//printf(" aa=%02d\n", aa); + + //update the palette~ + VL_palette(bmp, &pp, aq, aqoffset); + (*i)=pp; + + if(aqpalette); + modexPalUpdate(&PCXBMP->palette); /* clear and draw one sprite and one bitmap */ modexClearRegion(&gvar.video.page[0], 0, 0, gvar.video.page[0].width, gvar.video.page[0].height, 1); diff --git a/src/pcxtest2.c b/src/pcxtest2.c index efebd168..ab6e3b1e 100755 --- a/src/pcxtest2.c +++ b/src/pcxtest2.c @@ -95,7 +95,7 @@ void main() { gvar.video.page[0].sh+=32; /* fix up the palette and everything */ - modexPalUpdate1(bmp.palette); + modexPalUpdate(bmp.palette); /* clear and draw one sprite and one bitmap */ modexClearRegion(&gvar.video.page[0], 0, 0, gvar.video.page[0].sw, gvar.video.page[0].sh, 1); diff --git a/src/scroll.c b/src/scroll.c index de0cefd2..6e7664f0 100755 --- a/src/scroll.c +++ b/src/scroll.c @@ -88,9 +88,9 @@ void main(int argc, char *argv[]) #endif #endif //++++ PCXBMPVAR.offset=(paloffset/3); -//++++ modexPalUpdate1(&PCXBMPVAR, &paloffset, 0, 0); - modexPalUpdate1(&PCXBMP->palette); -//++++0000 modexPalUpdate1(map.tiles->btdata->palette); +//++++ modexPalUpdate(&PCXBMPVAR, &paloffset, 0, 0); + modexPalUpdate(&PCXBMP->palette); +//++++0000 modexPalUpdate(map.tiles->btdata->palette); //printf(" %d\n", sizeof(ptmp->data)); //printf("1: %d\n", paloffset); //++++ map.tiles->data->offset=(paloffset/3); @@ -220,7 +220,7 @@ void main(int argc, char *argv[]) //9 #ifdef FADE - if(IN_KeyDown(10)){ modexPalOverscan(rand()%56); modexPalUpdate1(dpal); IN_UserInput(1,1); } + if(IN_KeyDown(10)){ modexPalOverscan(rand()%56); modexPalUpdate(dpal); IN_UserInput(1,1); } #endif if(IN_KeyDown(sc_R)){ modexPalOverscan(rand()%56); } //r diff --git a/src/test.c b/src/test.c index 839915fc..2f4fd6b5 100755 --- a/src/test.c +++ b/src/test.c @@ -182,7 +182,7 @@ void main(int argc, char *argv[]) for(i=0;i<3;i++) { pal2[i] = rand()%64; - modexPalUpdate1(pal2); + modexPalUpdate(pal2); colo++; if(colo>HGQ) colo=LGQ; } diff --git a/src/vrstest.c b/src/vrstest.c index d006969d..1037b7c9 100755 --- a/src/vrstest.c +++ b/src/vrstest.c @@ -120,7 +120,7 @@ void main() t2 = (*clockw-start)/18.2; /*modexLoadPalFile("data/spri/chikyuu.pal", &pal); - modexPalUpdate1(pal);*/ + modexPalUpdate(pal);*/ //modexClearRegion(&gvar.video.page[0], 0, 0, gvar.video.page[0].width, gvar.video.page[0].height, 2); VL_LoadPalFile("data/spri/chikyuu.pal", &gvar.video.palette); for (i = 0; i < 10; i++){ diff --git a/src/zcroll.c b/src/zcroll.c index 7d586501..c0bd1079 100755 --- a/src/zcroll.c +++ b/src/zcroll.c @@ -110,8 +110,7 @@ void main(int argc, char *argv[]) /* load color palette */ VL_LoadPalFile(bakapee1p, &gvar.video.palette); -// CA_LoadFile("data/spri/"BAKAPEEFILE1".pal", &pal, &gvar); -// modexPalUpdate1(pal); + #ifdef FADE gpal = modexNewPal(); modexPalSave(gpal); @@ -202,7 +201,7 @@ void main(int argc, char *argv[]) VL_LoadPalFile(bakapee1p, &gvar.video.palette); }//JK #ifdef FADE - if(IN_KeyDown(10)){ modexPalOverscan(rand()%56); modexPalUpdate1(dpal); IN_UserInput(1,1); } + if(IN_KeyDown(10)){ modexPalOverscan(rand()%56); modexPalUpdate(dpal); IN_UserInput(1,1); } #endif if(IN_KeyDown(sc_R)){ modexPalOverscan(rand()%56); } //r diff --git a/wcpu.exe b/wcpu.exe index 6a5fae4e3fd918f9bbf60ed7c83cc5b9a7215290..dc69eb74367539890f767ce8868d1d928b5bfdc5 100755 GIT binary patch delta 2421 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 TdMeGCk52+hXQKLKe82n)i=eAd -- 2.39.2