From: sparky4 Date: Mon, 30 Mar 2015 02:03:30 +0000 (-0500) Subject: Having issues with updating palette~ >< X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=382c52a610e89948ad695a356879daf54653bb4c;p=16.git Having issues with updating palette~ >< modified: data/g.pal modified: pcxtest.exe modified: scroll.exe modified: src/lib/modex16.c modified: src/lib/modex16.h modified: src/pcxtest.c modified: src/scroll.c modified: test.exe modified: test2.exe --- diff --git a/data/g.pal b/data/g.pal index 7ac648dc..c6ab01c5 100644 Binary files a/data/g.pal and b/data/g.pal differ diff --git a/pcxtest.exe b/pcxtest.exe index 3e96654a..deaf73ac 100644 Binary files a/pcxtest.exe and b/pcxtest.exe differ diff --git a/scroll.exe b/scroll.exe index df1a82f4..770b479d 100644 Binary files a/scroll.exe and b/scroll.exe differ diff --git a/src/lib/modex16.c b/src/lib/modex16.c index 398cb662..c3a808aa 100644 --- a/src/lib/modex16.c +++ b/src/lib/modex16.c @@ -591,64 +591,211 @@ modexPalWhite() { /* utility */ void -modexPalUpdate(bitmap_t *bmp, word *i) +modexPalUpdate(bitmap_t *bmp, word *i, word qp) { byte *p = bmp->palette; word w=0; word q=0; - long lq; - long bufSize = (bmp->width * bmp->height); + + if(qp>0) printf("(*i)=%02d\n", (*i)/3); + modexWaitBorder(); if((*i)==0) outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ - else q=(*i); + else if(qp==0) q=(*i);// else outp(PAL_WRITE_REG, (*i)); 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])) { // printf("[%d]", p[((*i)-q)]); printf("[%d]", p[((*i)-q)+1]); printf("[%d]", p[((*i)-q)+2]); printf("[%d]", p[((*i)-q)+3]); printf("[%d]", p[((*i)-q)+4]); printf("[%d]", p[((*i)-q)+5]); printf(" %d [%d]\n", (*i), p[((*i)-q)]); - //printf(" 1st break\n"); w++; - //(*i)=(*i)+3; break; } else { outp(PAL_DATA_REG, p[(*i)-q]); -// if((*i)>(88*3)) printf(" %d %d\n", (*i), p[(*i)]); } } } modexWaitBorder(); /* waits one retrace -- less flicker */ if((*i)>=PAL_SIZE/2 && w==0) { - //printf(" 2nd half\n"); 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])) { // printf("[%d]", p[((*i)-q)]); printf("[%d]", p[((*i)-q)+1]); printf("[%d]", p[((*i)-q)+2]); printf("[%d]", p[((*i)-q)+3]); printf("[%d]", p[((*i)-q)+4]); printf("[%d]", p[((*i)-q)+5]); printf(" %d [%d]\n", (*i), p[((*i)-q)]); - //printf(" 1st break\n"); w++; - //(*i)=(*i)+3; break; } else { outp(PAL_DATA_REG, p[(*i)-q]); -// if((*i)>(88*3)) printf(" %d %d\n", (*i), p[(*i)]); } } } - if((*i)>0) + + + //palette checker~ + if(q>0 && qp==0) + { + static word a[256] = { 0 }; + long lq; + long bufSize = (bmp->width * bmp->height); + byte *pal; + word z, zz=0,aq=0,aa=0,pp=0,aqpp=0,spee=0,ppp=0; + pal = modexNewPal(); + modexPalSave(pal); + //q-=3; + printf("q: %02d\n", (q/3)); + //check palette for dups + for(z=0; zdata[lq]+=bmp->offset; - printf("%02d", bmp->data[lq]); - if(lq%bmp->width==0) printf("\n"); + if(bmp->data[lq]+bmp->offset==aq) + { + //printf("%02d", bmp->data[lq]); + //printf("\n%02d\n", bmp->offset); + //printf("%02d\n", a[aq]); + bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]); + } + else if(bmp->data[lq]+bmp->offset < z/3){ bmp->data[lq]+=bmp->offset; } + //printf("%02d ", bmp->data[lq]); + //if(lq > 0 && lq%bmp->width==0) printf("\n"); + } + +// if(spee==0) +// { + while(pp<=aqpp) + { + //if(pp<(z-1)) + /*printf("pp=%02d ", pp/3); + printf("bmp: [%d]", bmp->palette[pp-q]); + printf("[%d]", bmp->palette[(pp-q)+1]); + printf("[%d]\n", bmp->palette[(pp-q)+2]);*/ + if(((pp/3)==aq || spee>0)) + { + printf("spee=%d\n", spee); + printf(" pp=%02d ", pp/3); + printf("old bmp: [%d]", bmp->palette[(pp-ppp)]); + printf("[%d]", bmp->palette[(pp-ppp)+1]); + printf("[%d]\n", bmp->palette[(pp-ppp)+2]); + //if(spee==0) printf("\npp=%02d\n\n", pp/3); + bmp->palette[(pp-ppp)]= bmp->palette[(pp-ppp)+3]; + bmp->palette[(pp-ppp)+1]= bmp->palette[(pp-ppp)+4]; + bmp->palette[(pp-ppp)+2]= bmp->palette[(pp-ppp)+5]; + if(spee==0) spee++; + } +/* bmp->palette[pp]= bmp->palette[pp+3]; + bmp->palette[pp+1]= bmp->palette[pp+4]; + bmp->palette[pp+2]= bmp->palette[pp+5];*/ + printf(" pp=%02d ", pp/3); + printf(" bmp: [%d]", bmp->palette[(pp-ppp)]); + printf("[%d]", bmp->palette[(pp-ppp)+1]); + printf("[%d]\n", bmp->palette[(pp-ppp)+2]); +/* printf("bmp: [%d]", bmp->palette[pp]); + printf("[%d]", bmp->palette[pp+1]); + printf("[%d]\n", bmp->palette[pp+2]);*/ + //aqpp=(pp-q); + //else if(pp==(z-1)) bmp->palette[pp]=0; + pp+=3; + } +// spee++; + printf("aqpp= %02d\n", aqpp/3); + //printf("&aqpp= %02d\n", &aqpp); + //printf("q= %02d\n", q/3); + //printf("z= %02d\n", z/3); + //printf("&q= %02d\n", &q); + //modexPalUpdate(bmp, &q, 1); + //modexPalUpdate(bmp, &, 1); +// if(pp<=aqpp) + //modexPalUpdate(bmp, &ppp, 1); + modexPalUpdate(bmp, 0, 1); +// } + +// modexPalUpdate(bmp, 0, 1); + + if(aqdata->offset=(paloffset/3); - modexPalUpdate(map.tiles->data, &paloffset); + modexPalUpdate(map.tiles->data, &paloffset, 0); //printf("wwww: %d\n", map.tiles->data->offset); //printf("2: %d\n", paloffset); //printf(" %d\n", sizeof(map.tiles->data->(*data))); diff --git a/test.exe b/test.exe index e99821fd..0bf81152 100644 Binary files a/test.exe and b/test.exe differ diff --git a/test2.exe b/test2.exe index 508ff301..e6d30e9d 100644 Binary files a/test2.exe and b/test2.exe differ