X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fmodex16.c;h=79d1b26005dd83165f652f81fcf073e8f144f95f;hb=56bb29bded61d906400612e14b81f2d5f34b7600;hp=398cb662cbfa9af05d44cf89a4f39a2691e5ae0d;hpb=16df343f5f221379f8c534c93de21f565d1ee7fa;p=16.git diff --git a/src/lib/modex16.c b/src/lib/modex16.c index 398cb662..79d1b260 100644 --- a/src/lib/modex16.c +++ b/src/lib/modex16.c @@ -591,64 +591,224 @@ modexPalWhite() { /* utility */ void -modexPalUpdate(bitmap_t *bmp, word *i) +modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqpp) { byte *p = bmp->palette; word w=0; word q=0; - long lq; - long bufSize = (bmp->width * bmp->height); + word qq=0; + word ii; + static word a[256] = { 0 }; + word z=0,aq=0,aa=0; + word pp=0,spee=0,ppee=0; + sword aqpw; + +// if(qp>0) printf("(*i)=%02d\n", (*i)); 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 + { + q=(*i); + qq=(*i)/3; +// printf("q: %02d\n", (q)); +// printf("qq: %02d\n", (qq)); + //printf(" (*i)-q=%02d\n", (*i)-q); +// printf("================\n"); + 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) || ((qp>0)&&((*i)-(bmp->offset*3))%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"); + if(qp>0) + { + (*i)-=(aqpp*3); + aqpw=aqpp-1; + outp(PAL_WRITE_REG, qq+(((*i)+(aqpw*3)-(bmp->offset*3))/3)); + for(ii=aqpp; ii>0; ii--) + { + outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))]); + outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3)+1)-(bmp->offset*3))]); + outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3)+2)-(bmp->offset*3))]); +// printf("position = %d\n", qq+(((*i)+(aqpw*3)-(bmp->offset*3))/3)); +/*if(qp>0){ //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("[%d]", p[((((*i)+((aqpp-ii)*3)))-(bmp->offset*3))]); +printf("[%d]", p[((((*i)+((aqpp-ii)*3))+1)-(bmp->offset*3))]); +printf("[%d] | ", p[((((*i)+((aqpp-ii)*3))+2)-(bmp->offset*3))]); +printf("[%d]", p[((((*i)+((aqpp-ii)*3))+3)-(bmp->offset*3))]); +printf("[%d]", p[((((*i)+((aqpp-ii)*3))+4)-(bmp->offset*3))]); +printf("[%d]", p[((((*i)+((aqpp-ii)*3))+5)-(bmp->offset*3))]); +printf(" %d [%d]\n",((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))/3, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))]); }*/ + //printf("%d\n", ((*i)+((ii)*3))/3); + //printf("ii=%d\n", ii); + //printf("aqpp=%d\n", aqpp); + //printf(" %d\n", ((*i)+((aqpp-ii)*3))/3); + } + //printf(" %d\n",((((*i)+((aqpp-ii)*3)))-(bmp->offset*3))); + //printf(" %d\n",((((*i)+((aqpp-ii)*3))+1)-(bmp->offset*3))); + //printf(" %d\n",((((*i)+((aqpp-ii)*3))+2)-(bmp->offset*3))); + //printf("(*i)=%d\n", (*i)); + } + //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)]); 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(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))]); } } } 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) || ((qp>0)&&((*i)-(bmp->offset*3))%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"); + if(qp>0) + { + (*i)-=(aqpp*3); + aqpw=aqpp-1; + outp(PAL_WRITE_REG, qq+(((*i)+(aqpw*3)-(bmp->offset*3))/3)); + for(ii=aqpp; ii>0; ii--) + { + outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))]); + outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3)+1)-(bmp->offset*3))]); + outp(PAL_DATA_REG, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3)+2)-(bmp->offset*3))]); +// printf("position = %d\n", qq+(((*i)+(aqpw*3)-(bmp->offset*3))/3)); +/*if(qp>0){ //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("[%d]", p[((((*i)+((aqpp-ii)*3)))-(bmp->offset*3))]); +printf("[%d]", p[((((*i)+((aqpp-ii)*3))+1)-(bmp->offset*3))]); +printf("[%d] | ", p[((((*i)+((aqpp-ii)*3))+2)-(bmp->offset*3))]); +printf("[%d]", p[((((*i)+((aqpp-ii)*3))+3)-(bmp->offset*3))]); +printf("[%d]", p[((((*i)+((aqpp-ii)*3))+4)-(bmp->offset*3))]); +printf("[%d]", p[((((*i)+((aqpp-ii)*3))+5)-(bmp->offset*3))]); +printf(" %d [%d]\n",((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))/3, p[((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))]); }*/ + //printf("%d\n", ((*i)+((ii)*3))/3); + //printf("ii=%d\n", ii); + //printf("aqpp=%d\n", aqpp); + //printf(" %d\n", ((*i)+((aqpp-ii)*3))/3); + } + //printf(" %d\n",((((*i)+((aqpp-ii)*3)))-(bmp->offset*3))); + //printf(" %d\n",((((*i)+((aqpp-ii)*3))+1)-(bmp->offset*3))); + //printf(" %d\n",((((*i)+((aqpp-ii)*3))+2)-(bmp->offset*3))); + //printf("(*i)=%d\n", (*i)); + } + //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)]); 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(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); + else outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3))]); } } } - if((*i)>0) + + //palette checker~ + if(q>0 && qp==0) + { + long lq; + long bufSize = (bmp->width * bmp->height); + chkcolor(bmp, &q, &a, &aa, &z); + + /*printf("z=%d\n", z/3); + printf("q+z=%d\n", (q+z)/3); + printf("z-ppee=%d\n", (z-ppee)/3); + printf("q=%d\n", q/3); + printf("aa=%d\n", aa);*/ + + aq=0; pp = q; ppee=q; +aqpee: + while(aq<=aa) + { + //printf("a[%02d]=(%d)", aq, a[aq]); + if(a[aq]==0) aq++; + else{ aqpp++; break; } + } + +/* printf("aq=%02d\n", aq); + printf("z=%02d\n", z/3); + printf("(z/3)-aqpp=%02d\n", (z/3)-aqpp); + printf("aqpp=%02d\n", aqpp);*/ + for(lq=0; lqdata[lq]+=bmp->offset; - printf("%02d", bmp->data[lq]); - if(lq%bmp->width==0) printf("\n"); + if(bmp->data[lq]+bmp->offset==aq) + { + //printf("\n%02d\n", bmp->data[lq]); + //printf("\n%02d\n", bmp->offset); + //printf("\naq= %02d\n", aq); + //printf("a[aq]= %02d\n", a[aq]); + //bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]); + bmp->data[lq]=a[aq]; + //printf("_%d \n", bmp->data[lq]); + } + else if(bmp->data[lq]+bmp->offset < (z/3)-aqpp) + { + if(bmp->data[lq]+bmp->offset >= aq) bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp; + else bmp->data[lq]+=(bmp->offset); + } + + //printf("%02d ", bmp->data[lq]); + //if(lq > 0 && lq%bmp->width==0) printf("\n"); + } + + while(pp<=(aq*3)) + { + if(((pp/3)==aq || spee>0)) + { + /*printf("spee=%d\n", spee); + printf(" pp=%02d ", pp/3); + printf("old bmp: [%d]", bmp->palette[(pp-ppee)]); + printf("[%d]", bmp->palette[(pp-ppee)+1]); + printf("[%d]\n", bmp->palette[(pp-ppee)+2]);*/ + //if(spee==0) printf("\npp=%02d\n\n", pp/3); + bmp->palette[(pp-ppee)]= bmp->palette[(pp-ppee)+3]; + bmp->palette[(pp-ppee)+1]= bmp->palette[(pp-ppee)+4]; + bmp->palette[(pp-ppee)+2]= bmp->palette[(pp-ppee)+5]; + if(spee==0) spee++; + } + /*printf(" pp=%02d ", pp/3); + printf(" bmp: [%d]", bmp->palette[(pp-ppee)]); + printf("[%d]", bmp->palette[(pp-ppee)+1]); + printf("[%d]\n", bmp->palette[(pp-ppee)+2]);*/ + pp+=3; + } + + //update the palette~ + //printf(" aqpp= %d\n", aqpp); + modexPalUpdate(bmp, &ppee, 1, aqpp); + (*i)=ppee; + //printf(" aqpp= %d\n", aqpp); + //printf(" ppee= %d\n", ppee); + + /*printf(".\n"); + printf("aqpp= %02d\n", aqpp/3); + printf("aq= %02d\n", aq); + printf("aa= %02d\n", aa); + printf(" ppee= %02d\n", ppee);*/ + + if(aq