X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fmodex16.c;h=786cd1faa3072d66e18cc24bcf8925de490dce96;hb=92256c9e07a0866c3b8f2101f5c2522b988eb56e;hp=78b5c36977e5ceaea1e1c4f76d66d53f4a172fdf;hpb=545e0ff364efedefb4c9c850ba6ce0fcddcfb101;p=16.git diff --git a/src/lib/modex16.c b/src/lib/modex16.c index 78b5c369..786cd1fa 100644 --- a/src/lib/modex16.c +++ b/src/lib/modex16.c @@ -591,21 +591,25 @@ modexPalWhite() { /* utility */ void -modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqpp) +modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqoffset) { +//---- static word count=0; byte *p = bmp->palette; word w=0; word q=0; 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; + //word ii; + static word a[PAL_SIZE]; + word z=0, aq=0, aa=0, pp=0; + //sword aqpw; -// if(qp>0) printf("(*i)=%02d\n", (*i)); + //printf("1 (*i)=%02d\n", (*i)/3); modexWaitBorder(); - if((*i)==0) outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */ + 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); @@ -626,47 +630,35 @@ modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqpp) { //if(i%3==0 && (p[i+5]==p[i+4] && p[i+4]==p[i+3] && p[i+3]==p[i+2] && p[i+2]==p[i+1] && p[i+1]==p[i] && p[i+5]==p[i])) //____ if((qp>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])) + 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])) { - 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++; break; } + else if(qp>0 && (*i)>=(qp*3) && (*i)<((qp*3)+3)) + { + /* + note to self + use a[qp] instead of bmp->offset for this spot! + */ + //printf("qp=%d\n", qp); + //printf(" (*i)=%d\n", (*i)/3); + //for(w=(*i); w<()){ + printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]); + printf(" %d's color=%d\n", (*i), (a[qp])*3);//+(aqoffset*3) + outp(PAL_DATA_REG, p[((a[qp])*3)]);// fix this shit! + if((*i)+1==(qp*3)+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))]); + else outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)/*+(aqoffset*3)*/)]); } } + //if(qp>0) printf("qp=%d\n", qp); + if(qp>0) printf(" (*i)=%d\n", (*i)/3); } modexWaitBorder(); /* waits one retrace -- less flicker */ if((*i)>=PAL_SIZE/2 && w==0) @@ -674,139 +666,97 @@ printf(" %d [%d]\n",((((*i)+((aqpp-ii)*3))+((aqpp+ii)*3))-(bmp->offset*3))/3, p[ 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])) + 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])) { - 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++; break; } + else if(qp>0 && (*i)>=(qp*3) && (*i)<((qp*3)+3)) + { + /* + note to self + use a[qp] instead of bmp->offset for this spot! + */ + //printf("qp=%d\n", qp); + //printf(" (*i)=%d\n", (*i)/3); + printf(" (*i)=%d bmp->offset*3=%d (qp*3)=%d\n", (*i), (bmp->offset), (qp)); + printf(" %d's color=%d\n", (*i)/3, ((*i)-(bmp->offset)+(qp*3))); + //printf(" %d's color2=%d\n", (*i)/3, ((*i)-(bmp->offset*3))-(qp*3)); + //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3))+()]); + (*i)++; + break; + } else { if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]); - else outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3))]); + else outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3))+(qp*3)]); } } + //printf(" (*i)=%d\n", (*i)/3); } +// if(q>0) +// printf("2 (*i)=%02d\n", (*i)/3); + //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; + pp = q; + //printf("1(*i)=%02d\n", (*i)/3); + //printf("1z=%02d\n", z/3); + chkcolor(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)", aq, a[aq]); - if(a[aq]==0) aq++; - else{ aqpp++; break; } +// printf("a[%02d]=(%d)\n", aq, a[aq]); + if(a[aq]==-1) aq++; + else { aqoffset++; 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==aq) + //printf("%02d_", bmp->data[lq]+bmp->offset); + /*if(bmp->data[lq]+bmp->offset==aq) { - //printf("\n%02d\n", bmp->data[lq]); + //printf("%02d", bmp->data[lq]); //printf("\n%02d\n", bmp->offset); - //printf("\naq= %02d\n", aq); - //printf("a[aq]= %02d\n", a[aq]); + 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]; - //printf("_%d \n", bmp->data[lq]); +//++++ 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 < (z/3)-aqpp) + 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; - else bmp->data[lq]+=(bmp->offset); - } + 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]); + //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; - } +//printf(" aq=%02d\n", aq); +//printf(" aa=%02d\n", aa); //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