]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_vl.c
made a new function modexMVSetup() and made scroller use dx and dy on page[0].dx
[16.git] / src / lib / 16_vl.c
index 0c8c5571fd7db83be30f5ba79917755f94616d21..0e2bfcf064f83b93f52bd8832826c906da2d2cf9 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
@@ -292,19 +292,92 @@ void modexHiganbanaPageSetup(video_t *video)
        modexCalcVmemRemain(video);\r
        video->p=0;\r
        video->r=1;\r
+\r
+       //setup the buffersize\r
+       video->page[0].dy=video->page[0].dx=TILEWH;\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
 }\r
 \r
+//\r
+// move page to appropriate part and show it\r
+//\r
 void\r
 modexShowPage(page_t *page) {\r
-       word high_address;\r
-       word low_address;\r
-       word offset;\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
+       crtcOffset = page->width >> 3;\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
+//+=+=                                                                         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
+//+=+=                                                                         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
+// testing version of void modexShowPage()\r
+//\r
+void\r
+modexShowPage_(page_t *page)\r
+{\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
+       crtcOffset = page->sw >> 3;\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
+//+=+=                                                                         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
+//+=+=                                                                         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
+void\r
+modexShowPageVsync(page_t *page) {\r
+       word high_address, low_address, offset;\r
        byte crtcOffset;\r
 \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
@@ -313,24 +386,24 @@ modexShowPage(page_t *page) {
        low_address  = LOW_ADDRESS  | (offset << 8);\r
 \r
        /* wait for appropriate timing and then program CRTC */\r
-       //while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE));\r
+       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
-       //while (!(inp(INPUT_STATUS_1) & VRETRACE));\r
+       /* wait for one retrace */\r
+       while (!(inp(INPUT_STATUS_1) & VRETRACE));\r
 \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
 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