dword far*ptr=(dword far*)vga_state.vga_graphics_ram;//VGA; /* used for faster screen clearing */\r
vga_write_sequencer(2/*map mask register*/,0xf/*all 4 planes*/);\r
for(i = 0;i < 0x4000; i++) ptr[i] = 0x0000; // 0x4000 x dword = 64KB\r
+ /* fix up the palette and everything */\r
+ modexPalBlack(); //reset the palette~\r
}\r
break;\r
}\r
-\r
-// gv->video.page[0].ti.tw = gv->video.page[0].sw/TILEWH;\r
-// gv->video.page[0].ti.th = gv->video.page[0].sh/TILEWH;\r
-\r
- //TODO MAKE FLEXIBLE~\r
-// gv->video.page[0].ti.tilemidposscreenx = gv->video.page[0].ti.tilesw;\r
-// gv->video.page[0].ti.tilemidposscreeny = (gv->video.page[0].ti.tilesh/2)+1;\r
}\r
\r
void\r
\r
/* handle the case where we just update */\r
if(iter == 0) {\r
- modexPalUpdate1(palette);\r
+ modexPalUpdate(palette);\r
return;\r
}\r
\r
tmppal[i] = 63;\r
}\r
}\r
- modexPalUpdate1(tmppal);\r
+ modexPalUpdate(tmppal);\r
iter--;\r
dim += fade;\r
}\r
}\r
\r
\r
-byte *\r
+/*byte *\r
modexNewPal() {\r
byte *ptr;\r
- ptr = malloc(PAL_SIZE);\r
+ ptr = m a l l o c(PAL_SIZE);\r
\r
- /* handle errors */\r
+ // handle errors\r
if(!ptr) {\r
printf("Could not allocate palette.\n");\r
}\r
\r
return ptr;\r
-}\r
+}*/\r
\r
\r
void\r
-modexLoadPalFile(byte *filename, byte **palette) {\r
+modexLoadPalFile(byte *filename, byte *palette) {\r
FILE *file;\r
byte *ptr;\r
\r
- /* free the palette if it exists */\r
- if(*palette) {\r
- free(*palette);\r
- }\r
+ // free the palette if it exists\r
+ //if(*palette) { free(*palette); }\r
\r
- /* allocate the new palette */\r
- *palette = modexNewPal();\r
+ // allocate the new palette\r
+ //*palette = modexNewPal();\r
\r
- /* open the file */\r
+ // open the file\r
file = fopen(filename, "rb");\r
if(!file) {\r
- printf("Could not open palette file: %s\n", filename);\r
+ printf("Could not open palette file: %s\n", filename);\r
}\r
\r
/* read the file */\r
- ptr = *palette;\r
+ ptr = palette;\r
while(!feof(file)) {\r
*ptr++ = fgetc(file);\r
}\r
\r
\r
void VL_LoadPalFile(const char *filename, byte *palette)\r
+{\r
+ VL_LoadPalFilewithoffset(filename, palette, 0);\r
+}\r
+\r
+void VL_LoadPalFilewithoffset(const char *filename, byte *palette, word o)\r
{\r
int fd;\r
\r
fd = open(filename,O_RDONLY|O_BINARY);\r
if (fd >= 0) {\r
- word i;\r
-\r
read(fd,palette, PAL_SIZE);\r
close(fd);\r
\r
- vga_palette_lseek(0);\r
- for (i=0;i < 256;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2);\r
+ VL_UpdatePaletteWrite(palette, o);\r
}\r
}\r
\r
+void VL_UpdatePaletteWrite(byte *palette, word o)\r
+{\r
+ word i;\r
+ vga_palette_lseek(/*1+*/o);\r
+ for (i=o;i < 256-o;i++) vga_palette_write(palette[(i*3)+0]>>2,palette[(i*3)+1]>>2,palette[(i*3)+2]>>2);\r
+}\r
\r
void\r
modexSavePalFile(char *filename, byte *pal) {\r
\r
\r
/* utility */\r
-void\r
-modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqoffset)\r
-{\r
- byte *p = bmp->palette;\r
- word w=0;\r
- word q=0;\r
- word qq=0;\r
- static word a[PAL_SIZE]; //palette array of change values!\r
- word z=0, aq=0, aa=0, pp=0;\r
-\r
- //modexWaitBorder();\r
- vga_wait_for_vsync();\r
- if((*i)==0)\r
- {\r
- memset(a, -1, sizeof(a));\r
- outp(PAL_WRITE_REG, 0); /* start at the beginning of palette */\r
- }\r
- else if(qp==0)\r
- {\r
- q=(*i);\r
- }\r
- else\r
- {\r
- q=(*i);\r
- qq=(*i)/3;\r
-// printf("q: %02d\n", (q));\r
-// printf("qq: %02d\n", (qq));\r
- //printf(" (*i)-q=%02d\n", (*i)-q);\r
- outp(PAL_WRITE_REG, qq); /* start at the beginning of palette */\r
- }\r
- if((*i)<PAL_SIZE/2 && w==0)\r
- {\r
- for(; (*i)<PAL_SIZE/2; (*i)++)\r
- {\r
- //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]))\r
-//____ 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\r
- 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]))\r
- {\r
- w++;\r
- break;\r
- }\r
- else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3))\r
- {\r
- //printf("qp=%d\n", qp);\r
- //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]);\r
- printf(" %d's color=%d\n", (*i), (a[qp])-(bmp->offset*3)+qp);\r
- //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit!\r
- if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; }\r
- }\r
- else\r
- {\r
- if(bmp->offset==0 && (*i)<3 && q==0) outp(PAL_DATA_REG, 0);\r
- else\r
- if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]);\r
- else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]);\r
- printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); }\r
- }\r
- }\r
- //if(qp>0) printf("qp=%d\n", qp);\r
- //if(qp>0) printf(" (*i)=%d\n", (*i)/3);\r
- }\r
- //modexWaitBorder(); /* waits one retrace -- less flicker */\r
- vga_wait_for_vsync();\r
- if((*i)>=PAL_SIZE/2 && w==0)\r
- {\r
- for(; (*i)<PAL_SIZE; (*i)++)\r
- {\r
-//____ 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\r
- 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]))\r
- {\r
- w++;\r
- break;\r
- }\r
- else if(qp>0 && (*i)>=(qp) && (*i)<((qp)+3))\r
- {\r
- //printf("qp=%d\n", qp);\r
- //printf(" (*i)=%d a[%d]=%d\n", (*i), qp, a[qp]);\r
- printf(" %d's color=%d\n", (*i), (a[qp]-(bmp->offset*3)+qp));\r
- //outp(PAL_DATA_REG, p[((a[qp])-(bmp->offset*3)+qp)]);// fix this shit!\r
- if((*i)+1==(qp)+3){ w++; /*(*i)++;*/ break; }\r
- }\r
- else\r
- {\r
- if(qp==0) outp(PAL_DATA_REG, p[(*i)-q]);\r
- else{ //outp(PAL_DATA_REG, p[((*i)-(bmp->offset*3)+qp)]);\r
- printf("p[]=%d qp=%d p[]-qp=%d\n", ((*i)-(bmp->offset*3)), qp, ((*i)-(bmp->offset*3))+qp); }\r
- }\r
- }\r
- //printf(" (*i)=%d\n", (*i)/3);\r
- }\r
-\r
-printf("\nqqqqqqqq\n\n");\r
-\r
- //palette checker~\r
- if(q>0 && qp==0)\r
- {\r
- long lq;\r
- long bufSize = (bmp->width * bmp->height);\r
- pp = q;\r
- //printf("1(*i)=%02d\n", (*i)/3);\r
- //printf("1z=%02d\n", z/3);\r
- modexchkcolor(bmp, &q, &a, &aa, &z, i);\r
- //printf("2(*i)=%02d\n", (*i)/3);\r
- //printf("2z=%02d\n", z/3);\r
- aq=0;\r
-aqpee:\r
- while(aq<=aa)\r
- {\r
-// printf("a[%02d]=(%d)\n", aq, a[aq]);\r
- if(a[aq]==-1) aq++;\r
- else { aqoffset++; break; }\r
- }\r
-//update the image data here!\r
- for(lq=0; lq<bufSize; lq++)\r
- {\r
- /*\r
- note to self\r
- use a[qp] instead of bmp->offset for this spot!\r
- NO! wwww\r
- */\r
-\r
- /*\r
- Facking bloody point the values of the changed palette to correct values.... major confusion! wwww\r
- */\r
-\r
- //(offset/bmp->offset)*bmp->offset\r
-\r
-\r
- //printf("%02d ",bmp->data[lq]+bmp->offset);\r
- //if(lq > 0 && lq%bmp->width==0) printf("\n");\r
- //printf("%02d_", bmp->data[lq]+bmp->offset);\r
- /*if(bmp->data[lq]+bmp->offset==aq)\r
- {\r
- //printf("%02d", bmp->data[lq]);\r
- //printf("\n%02d\n", bmp->offset);\r
- printf("aq=%02d ", aq);\r
- printf("a[aq]=%02d ", a[aq]);\r
- printf("a[aq]+aqpp=%02d ", a[aq]+aqpp);\r
- printf("a[aq]-aqpp=%02d\n", a[aq]-aqpp);\r
- //bmp->data[lq]=((bmp->data[lq]+bmp->offset)-a[aq]);\r
-//++++ bmp->data[lq]=a[aq]-aqpp;\r
-// printf("_%d ", bmp->data[lq]);\r
- //if(lq > 0 && lq%bmp->width==0) printf("\n");\r
- }\r
- else if(bmp->data[lq]+bmp->offset < ((*i)/3)-aqpp)\r
- {\r
- if(bmp->data[lq]+bmp->offset >= aq)\r
- {\r
- bmp->data[lq]=(bmp->data[lq]+bmp->offset)-aqpp;//-((z-(*i))/3);\r
- //printf("_%d ", bmp->data[lq]+bmp->offset)-aqpp-((z-(*i))/3);\r
- }\r
- else bmp->data[lq]+=(bmp->offset-aqpp);\r
- }*/\r
-\r
- //printf("%02d`", bmp->data[lq]);\r
- //if(lq > 0 && lq%bmp->width==0) printf("\n");\r
- }\r
-\r
-//printf(" aq=%02d\n", aq);\r
-//printf(" aa=%02d\n", aa);\r
-\r
- //update the palette~\r
- modexPalUpdate(bmp, &pp, aq, aqoffset);\r
- (*i)=pp;\r
-\r
- if(aq<aa){ pp=q; aq++; goto aqpee; }\r
- }\r
-}\r
+//moved to 16_vlpal.c\r
\r
void\r
-modexPalUpdate1(byte *p)\r
+modexPalUpdate(byte *p)\r
{\r
int i;\r
//modexWaitBorder();\r
outp(PAL_DATA_REG, col);\r
}\r
\r
-//color checker~\r
-//i want to make another vesion that checks the palette when the palette is being appened~\r
-void modexchkcolor(bitmap_t *bmp, word *q, word *a, word *aa, word *z, word *i/*, word *offset*/)\r
-{\r
- byte *pal;\r
- word zz=0;\r
- pal = modexNewPal();\r
- modexPalSave(pal);\r
- //printf("q: %02d\n", (*q));\r
- printf("chkcolor start~\n");\r
- printf("1 (*z): %d\n", (*z)/3);\r
- printf("1 (*i): %d\n", (*i)/3);\r
-// printf("1 offset of color in palette (*q): %d\n", (*q)/3);\r
- printf("wwwwwwwwwwwwwwww\n");\r
- //check palette for dups\r
- for(; (*z)<PAL_SIZE; (*z)+=3)\r
- {\r
- //printf("\n z: %d\n", (*z));\r
- //printf(" q: %d\n", (*q));\r
- //printf(" z+q: %d\n\n", ((*z)+(*q)));\r
- //if((*z)%3==0)\r
- //{\r
-//---- if(pal[(*z)]==pal[(*z)+3] && pal[(*z)+1]==pal[(*z)+4] && pal[(*z)+2]==pal[(*z)+5])\r
- if((*z)==(*i))\r
- {\r
-// printf("\n%d [%02d][%02d][%02d]\n", (*z), pal[(*z)], pal[(*z)+1], pal[(*z)+2]);\r
-// printf("%d [%02d][%02d][%02d]\n\n", (*z)+3, pal[(*z)+3], pal[(*z)+4], pal[(*z)+5]);\r
-//0000 (*z)-=3;\r
- break;\r
- }\r
- else for(zz=0; zz<(*q); zz+=3)\r
- {\r
- //printf("zz: %02d\n", zz/3);\r
- if(zz%3==0)\r
- {\r
- if(pal[((*z)+(*q))]==pal[((*z)+(*q))+3] && pal[((*z)+(*q))+1]==pal[((*z)+(*q))+4] && pal[((*z)+(*q))+2]==pal[((*z)+(*q))+5]) //break if duplicate colors found in palette because it have reached the end of the current data of the palette\r
- {\r
-// (*z)-=3;\r
-// (*i)-=3;\r
-// printf("\nzq1:%d[%02d][%02d][%02d]\n", (zz+q), pal[(zz+q)], pal[(zz+q)+1], pal[(zz+q)+2]);\r
-// printf("zq2:%d[%02d][%02d][%02d]\n\n", (zz+q)+3, pal[(zz+q)+3], pal[(zz+q)+4], pal[(zz+q)+5]);\r
- break;\r
- }\r
- else if(pal[zz]==pal[((*z)+(*q))] && pal[zz+1]==pal[((*z)+(*q))+1] && pal[zz+2]==pal[((*z)+(*q))+2])\r
- {\r
-// printf("\n\nwwwwwwwwwwwwwwww\n");\r
-// printf(" zq: %d [%02d][%02d][%02d] value that is needing to be changed~\n", ((*z)+(*q))/3, pal[((*z)+(*q))], pal[((*z)+(*q))+1], pal[((*z)+(*q))+2]);\r
-// printf(" zz: %d [%02d][%02d][%02d] value that the previous value is going to change to~\n", (zz)/3, pal[zz], pal[zz+1], pal[zz+2]);\r
-// //printf(" zv: %d [%02d][%02d][%02d] wwww\n", (zz-z+q)/3, pal[(zz-z+q)], pal[(zz-z+q)+1], pal[(zz-z+q)+2]);\r
-// printf(" z : %d [%02d][%02d][%02d] offset value~\n", (*z)/3, pal[(*z)], pal[(*z)+1], pal[(*z)+2]);\r
-//++++ (*i)--;\r
-// (*z)--;\r
- //expand dong here\r
-/*\r
-planned features that i plan to implement~\r
-image that has values on the pallete list!\r
-wwww\r
-no... wait.... no wwww\r
-*/\r
- //for(zzii=0; zzii<3; zzii++)\r
- //{\r
- //printf("z+q: %d\n\n", ((*z)+(*q)));\r
- a[(((*z)+(*q)))]=zz;\r
- //}\r
- (*aa)=(((*z)+(*q)));\r
- printf("!! a[%02d]: %d\n", (((*z)+(*q))/3), zz/3);\r
-// printf("\n aa: %d\n\n", (*aa));\r
-// printf(" a[%02d]=(%02d) offset array i think the palette should be updated again~\n", ((*z)+(*q))/3, a[((*z)+(*q))/3]);\r
-// printf("wwwwwwwwwwwwwwww\n\n");\r
- }\r
- /*else\r
- {\r
- printf("================\n");\r
- printf("zq: %d [%02d][%02d][%02d]\n", ((*z)+(*q))/3, pal[((*z)+(*q))], pal[((*z)+(*q))+1], pal[((*z)+(*q))+2]);\r
- printf("zz: %d [%02d][%02d][%02d]\n", (zz)/3, pal[zz], pal[zz+1], pal[zz+2]);\r
- printf("z : %d [%02d][%02d][%02d]\n", (*z)/3, pal[(*z)], pal[(*z)+1], pal[(*z)+2]);\r
- printf("================\n");\r
- }*/\r
- //printf("[%d]", (zz+q));\r
- }\r
- }\r
- }\r
- printf("wwwwwwwwwwwwwwww\n");\r
- printf("2 (*z): %d\n", (*z)/3);\r
- printf("2 (*i): %d\n", (*i)/3);\r
-// printf("2 offset of color in palette (*q): %d\n", (*q)/3);\r
- printf("chkcolor end~\n");\r
- free(pal);\r
-}\r
-\r
void modexputPixel(page_t *page, int x, int y, byte color)\r
{\r
word pageOff = (word) page->data;\r
}\r
}\r
\r
-void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str)\r
+void modexprint(page_t *page, sword x, sword y, word t, boolean tlsw, word col, word bgcol, const byte *str)\r
{\r
word s, o, w;\r
- word x_draw = x;\r
+ word x_draw;\r
//word addr = (word) romFontsData.l;\r
- word addrq = (page->width/4) * y + (x / 4) + ((word)page->data);\r
- word addrr = addrq;\r
+ word addrq;\r
+ word addrr;\r
byte c;\r
\r
+ if(tlsw){ x-=page->tlx; y-=page->tly; }\r
+ x_draw = x/4;\r
+ addrq = (page->stridew) * y + (word)(x_draw) +\r
+ ((word)page->data);\r
+ addrr = addrq;\r
s=romFonts[t].seg;\r
o=romFonts[t].off;\r
w=romFonts[t].charSize;\r
\r
for(; *str != '\0'; str++)\r
{\r
- c = (*str);\r
- if(c=='\n')\r
- {\r
- x = x_draw;\r
- romFontsData.chw = 0;\r
- addrq += (page->width / 4) * 8;\r
- addrr = addrq;\r
- y += 8;\r
- continue;\r
- }\r
+ c = (*str);\r
+ if(c=='\n')\r
+ {\r
+ x = x_draw;\r
+ romFontsData.chw = 0;\r
+ addrq += (page->stridew) * 8;\r
+ addrr = addrq;\r
+ y += 8;\r
+ continue;\r
+ }\r
\r
// load the character into romFontsData.l\r
// no need for inline assembly!\r
x_draw += 8; /* track X for edge of screen */\r
addrr += 2; /* move 8 pixels over (2 x 4 planar pixels per byte) */\r
}\r
+ //printf("print xy:%dx%d tlxy:%dx%d\n", x, y, page->tlx, page->tly);\r
}\r
\r
void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str)\r
int palq=(mult)*TILEWH;\r
int palcol=0;\r
int palx, paly;\r
- for(paly=0; paly<palq; paly+=mult){\r
- for(palx=0; palx<palq; palx+=mult){\r
+ for(paly=TILEWH*8; paly<palq+TILEWH*8; paly+=mult){\r
+ for(palx=TILEWH*12; palx<palq+TILEWH*12; palx+=mult){\r
modexClearRegion(pee, palx+TILEWH, paly+TILEWH, mult, mult, palcol);\r
palcol++;\r
}\r
\r
}\r
\r
+void\r
+modexWaitBorder_end()\r
+{\r
+ while(!(inp(INPUT_STATUS_1) & 8)) {\r
+ // spin\r
+ }\r
+\r
+}\r
+\r
//\r
// printings of video memory information\r
//\r