]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_vl.c
fucking show page i need to make a very special version of it wwww
[16.git] / src / lib / 16_vl.c
index 9369ce49ab7b2c2e88c086962684dae117fd00c0..82ca46f6d5166145dd39643c88bc8b4569fa6d42 100755 (executable)
@@ -213,8 +213,8 @@ modexNextPage(page_t *p) {
        page_t result;\r
 \r
        result.data = p->data + (p->pagesize);\r
-       result.dx = 0;\r
-       result.dy = 0;\r
+       result.dx = p->dx;      // not used anymore we use page[0].dx\r
+       result.dy = p->dy;      // not used anymore we use page[0].dy\r
        result.sw = p->sw;\r
        result.sh = p->sh;\r
        result.width = p->width;\r
@@ -238,8 +238,8 @@ modexNextPageFlexibleSize(page_t *p, word x, word y)
        page_t result;\r
 \r
        result.data = p->data + (p->pagesize);  /* compute the offset */\r
-       result.dx = 0;\r
-       result.dy = 0;\r
+       result.dx = 0;  // not used anymore we use page[0].dx\r
+       result.dy = 0;  // not used anymore we use page[0].dy\r
        result.sw = x;\r
        result.sh = y;\r
        result.width = x;\r
@@ -294,7 +294,7 @@ void modexHiganbanaPageSetup(video_t *video)
        video->r=1;\r
 \r
        //setup the buffersize\r
-       video->page[0].dy=video->page[0].dx=\r
+       video->page[0].dx=video->page[0].dy=\r
                video->page[1].dx=video->page[1].dy=TILEWH;     // 1 tile size buffer\r
        video->page[2].dx=video->page[2].dy=\r
                video->page[3].dx=video->page[3].dy=0;          // cache pages are buffer wwww\r
@@ -310,8 +310,8 @@ modexShowPage(page_t *page) {
 \r
        /* calculate offset */\r
        offset = (word) page->data;\r
-       offset += page->dy * (page->width >> 2 );\r
-       offset += page->dx >> 2;\r
+       offset += page[0].dy * (page->width >> 2 );\r
+       offset += page[0].dx >> 2;\r
 \r
        /* calculate crtcOffset according to virtual width */\r
        crtcOffset = page->width >> 3;\r
@@ -331,7 +331,7 @@ modexShowPage(page_t *page) {
 \r
        /* do PEL panning here */\r
        outp(AC_INDEX, 0x33);\r
-       outp(AC_INDEX, (page->dx & 0x03) << 1);\r
+       outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
 }\r
 \r
 //\r
@@ -345,8 +345,8 @@ modexShowPage_(page_t *page)
 \r
        /* calculate offset */\r
        offset = (word) page->data;\r
-       offset += page->dy * (page->width >> 2 );\r
-       offset += page->dx >> 2;\r
+       offset += page[0].dy * (page->width >> 2 );\r
+       offset += page[0].dx >> 2;\r
 \r
        /* calculate crtcOffset according to virtual width */\r
        crtcOffset = page->sw >> 3;\r
@@ -366,13 +366,57 @@ modexShowPage_(page_t *page)
 \r
        /* do PEL panning here */\r
        outp(AC_INDEX, 0x33);\r
-       outp(AC_INDEX, (page->dx & 0x03) << 1);\r
+       outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
 }\r
 \r
+//yet another variant\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
+       offset = (word) page->data;\r
+       offset += page[0].dy * (page->width >> 2 );\r
+       offset += page[0].dx >> 2;\r
+\r
+       /* calculate crtcOffset according to virtual width */\r
+       switch(sr)\r
+       {\r
+               case 1:\r
+                       crtcOffset = page->sw >> 3;\r
+               break;\r
+               default:\r
+               case 0:\r
+                       crtcOffset = page->width >> 3;\r
+               break;\r
+       }\r
+\r
+       high_address = HIGH_ADDRESS | (offset & 0xff00);\r
+       low_address  = LOW_ADDRESS  | (offset << 8);\r
+\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
+       if(vsync) while (!(inp(INPUT_STATUS_1) & VRETRACE));\r
+\r
+       /* do PEL panning here */\r
+       outp(AC_INDEX, 0x33);\r
+       outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
+}\r
+\r
+//=============================================================================\r
+\r
 void\r
 modexPanPage(page_t *page, int dx, int dy) {\r
-       page->dx = dx;\r
-       page->dy = dy;\r
+       page[0].dx = dx;\r
+       page[0].dy = dy;\r
 }\r
 \r
 void\r
@@ -662,6 +706,23 @@ modexLoadPalFile(byte *filename, byte **palette) {
 }\r
 \r
 \r
+void VL_LoadPalFile(const char *filename, byte *palette)\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,768);\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
+       }\r
+}\r
+\r
+\r
 void\r
 modexSavePalFile(char *filename, byte *pal) {\r
        //unsigned int i;\r