]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_vl.c
moved my palette function failure to 16_vlpal.c
[16.git] / src / lib / 16_vl.c
index 057e763cb1cc0ab50afc70929b02884fd15267ba..a0b587236b909dcad7b9bd71de40bb3334f6916b 100755 (executable)
@@ -279,8 +279,14 @@ void modexCalcVmemRemain(video_t *video)
 \r
 void VL_Initofs(video_t *video)\r
 {\r
-       video->ofs.offscreen_ofs =      video->page[0].pagesize+video->page[1].pagesize;//(vga_state.vga_stride * vga_state.vga_height);\r
-       video->ofs.pattern_ofs =        (uint16_t)video->page[2].data;\r
+       if(!video->bgps)\r
+       {\r
+               video->ofs.offscreen_ofs =      video->page[0].pagesize+video->page[1].pagesize;//(vga_state.vga_stride * vga_state.vga_height);\r
+               video->ofs.pattern_ofs =        (uint16_t)video->page[2].data;\r
+       }else{\r
+               video->ofs.offscreen_ofs =      0;\r
+               video->ofs.pattern_ofs =        0;//(uint16_t)video->page[0].data;\r
+       }\r
 }\r
 \r
 void modexHiganbanaPageSetup(video_t *video)\r
@@ -297,17 +303,18 @@ void modexHiganbanaPageSetup(video_t *video)
        (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].width, 96);      video->num_of_pages++;\r
        modexCalcVmemRemain(video);\r
 \r
-       video->sp=video->p=0;\r
-       video->r=1;\r
-       video->vh=video->page[0].height+video->page[1].height+video->page[3].height-8;//+video->page[2].height\r
+       video->sp=video->p =    0;      //showpage\r
+       video->dorender =       1;                      //render\r
+       video->vh=video->page[0].height+video->page[1].height+video->page[2].height+video->page[3].height;\r
 \r
        VL_Initofs(video);\r
        //doslib origi var\r
        video->omemptr=                 vga_state.vga_graphics_ram;\r
        video->vga_draw_stride= vga_state.vga_draw_stride;\r
        video->vga_draw_stride_limit=   vga_state.vga_draw_stride_limit;\r
-       //sprite render switch\r
-       video->rss=0;\r
+       //sprite render switch and bgpreservation switch\r
+       video->rss=             1;\r
+       video->bgps=    1;\r
 \r
        //setup the buffersize\r
        video->page[0].dx=video->page[0].dy=\r
@@ -349,18 +356,19 @@ modexShowPage(page_t *page) {
        outp(AC_INDEX, 0x33);\r
        outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
 }\r
+\r
 //args: page, vertical sync switch, screen resolution switch, page0 switch\r
 void\r
 VL_ShowPage(page_t *page, boolean vsync, boolean sr) {\r
        word high_address, low_address, offset;\r
        byte crtcOffset;\r
 \r
-       /* calculate offset */\r
+       // calculate offset\r
        offset = (word) page->data;\r
-       offset += page[0].dy * (page->width >> 2 );\r
-       offset += page[0].dx >> 2;\r
+       offset += page->dy * (page->width >> 2 );\r
+       offset += page->dx >> 2;\r
 \r
-       /* calculate crtcOffset according to virtual width */\r
+       // calculate crtcOffset according to virtual width\r
        switch(sr)\r
        {\r
                case 1:\r
@@ -375,20 +383,20 @@ VL_ShowPage(page_t *page, boolean vsync, boolean sr) {
        high_address = HIGH_ADDRESS | (offset & 0xff00);\r
        low_address  = LOW_ADDRESS  | (offset << 8);\r
 \r
-       /* wait for appropriate timing and then program CRTC */\r
+       // wait for appropriate timing and then program CRTC\r
        if(vsync) while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE));\r
        outpw(CRTC_INDEX, high_address);\r
        outpw(CRTC_INDEX, low_address);\r
        outp(CRTC_INDEX, 0x13);\r
        outp(CRTC_DATA, crtcOffset);\r
 \r
-       /* wait for one retrace */\r
+       // wait for one retrace\r
        if(vsync) while (!(inp(INPUT_STATUS_1) & VRETRACE));\r
 \r
-       /* do PEL panning here */\r
+       // do PEL panning here\r
        outp(AC_INDEX, 0x33);\r
-       outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
-       vga_state.vga_graphics_ram = (VGA_RAM_PTR)page[0].data;\r
+       outp(AC_INDEX, (page->dx & 0x03) << 1);\r
+       vga_state.vga_graphics_ram = (VGA_RAM_PTR)page->data;\r
 }\r
 \r
 //=============================================================================\r
@@ -609,7 +617,7 @@ fadePalette(sbyte fade, sbyte start, word iter, byte *palette) {
 \r
        /* handle the case where we just update */\r
        if(iter == 0) {\r
-       modexPalUpdate1(palette);\r
+       modexPalUpdate(palette);\r
        return;\r
        }\r
 \r
@@ -622,7 +630,7 @@ fadePalette(sbyte fade, sbyte start, word iter, byte *palette) {
                tmppal[i] = 63;\r
                }\r
        }\r
-       modexPalUpdate1(tmppal);\r
+       modexPalUpdate(tmppal);\r
        iter--;\r
        dim += fade;\r
        }\r
@@ -648,8 +656,7 @@ modexNewPal() {
 \r
        /* handle errors */\r
        if(!ptr) {\r
-       printf("Could not allocate palette.\n");\r
-       exit(-1);\r
+               printf("Could not allocate palette.\n");\r
        }\r
 \r
        return ptr;\r
@@ -673,7 +680,6 @@ modexLoadPalFile(byte *filename, byte **palette) {
        file = fopen(filename, "rb");\r
        if(!file) {\r
        printf("Could not open palette file: %s\n", filename);\r
-       exit(-2);\r
        }\r
 \r
        /* read the file */\r
@@ -694,7 +700,7 @@ void VL_LoadPalFile(const char *filename, byte *palette)
        if (fd >= 0) {\r
                word i;\r
 \r
-               read(fd,palette,768);\r
+               read(fd,palette,        PAL_SIZE);\r
                close(fd);\r
 \r
                vga_palette_lseek(0);\r
@@ -712,7 +718,6 @@ modexSavePalFile(char *filename, byte *pal) {
        file = fopen(filename, "wb");\r
        if(!file) {\r
        printf("Could not open %s for writing\n", filename);\r
-       exit(-2);\r
        }\r
 \r
        /* write the data to the file */\r
@@ -735,177 +740,10 @@ modexPalWhite() {
 \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
@@ -1113,7 +951,7 @@ void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, cons
        word s, o, w;\r
        word x_draw = x;\r
        //word addr = (word) romFontsData.l;\r
-       word addrq = (page->width/4) * y + (x / 4) + ((word)page->data);\r
+       word addrq = (page->stridew) * y + (x / 4) + ((word)page->data);\r
        word addrr = addrq;\r
        byte c;\r
 \r
@@ -1129,7 +967,7 @@ void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, cons
        {\r
                x = x_draw;\r
                romFontsData.chw = 0;\r
-               addrq += (page->width / 4) * 8;\r
+               addrq += (page->stridew) * 8;\r
                addrr = addrq;\r
                y += 8;\r
                continue;\r
@@ -1329,6 +1167,24 @@ modexWaitBorder() {
        }\r
 }\r
 \r
+void\r
+modexWaitBorder_start()\r
+{\r
+       while(inp(INPUT_STATUS_1)  & 8)  {\r
+       // spin\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