]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/modex16.c
wwww
[16.git] / src / lib / modex16.c
old mode 100644 (file)
new mode 100755 (executable)
index b1e6d51..45ad93c
@@ -29,14 +29,14 @@ byte far* VGA=(byte far*) 0xA0000000;   /* this points to video memory. */
 \r
 static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette);\r
 static byte tmppal[PAL_SIZE];\r
-int old_mode;\r
+//int old_mode;\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //                                                                                                                                                                                                                                             //\r
 // setvideo() - This function Manages the video modes                                                                                          //\r
 //                                                                                                                                                                                                                                             //\r
 /////////////////////////////////////////////////////////////////////////////\r
-void VGAmodeX(sword vq)\r
+void VGAmodeX(sword vq, global_game_variables_t *gv)\r
 {\r
        union REGS in, out;\r
 \r
@@ -45,7 +45,7 @@ void VGAmodeX(sword vq)
                // change to the video mode we were in before we switched to mode 13h\r
                modexLeave();\r
                in.h.ah = 0x00;\r
-               in.h.al = old_mode;\r
+               in.h.al = gv->old_mode;\r
                int86(0x10, &in, &out);\r
 \r
        }\r
@@ -54,7 +54,7 @@ void VGAmodeX(sword vq)
                // get old video mode\r
                in.h.ah = 0xf;\r
                int86(0x10, &in, &out);\r
-               old_mode = out.h.al;\r
+               gv->old_mode = out.h.al;\r
                // enter mode\r
                modexEnter();\r
        }\r
@@ -151,19 +151,19 @@ page_t
 modexNextPage(page_t *p) {\r
     page_t result;\r
 \r
-    result.data = p->data + (p->width/4)*p->height;  /* compute the offset */\r
+    result.data = p->data + (p->width/4)*p->height;\r
     result.dx = 0;\r
     result.dy = 0;\r
     result.width = p->width;\r
     result.height = p->height;\r
         result.id = p->id+1;\r
-\r
+       //result = modexNextPageFlexibleSize(&p, p->width, p->height);\r
     return result;\r
 }\r
 \r
 //next page with defined dimentions~\r
 page_t\r
-modexNextPage0(page_t *p, word x, word y)\r
+modexNextPageFlexibleSize(page_t *p, word x, word y)\r
 {\r
         page_t result;\r
 \r
@@ -284,24 +284,46 @@ modexClearRegion(page_t *page, int x, int y, int w, int h, byte  color) {
 void\r
 oldDrawBmp(byte far* page, int x, int y, bitmap_t *bmp, byte sprite)\r
 {\r
-        byte plane;\r
-        word px, py;\r
-        word offset;\r
-\r
-        /* TODO Make this fast.  It's SLOOOOOOW */\r
-        for(plane=0; plane < 4; plane++) {\r
-                modexSelectPlane(PLANE(plane+x));\r
-                for(px = plane; px < bmp->width; px+=4) {\r
-                        offset=px;\r
-                        for(py=0; py<bmp->height; py++) {\r
-                        if(!sprite || bmp->data[offset])\r
-                                page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset];\r
-                        offset+=bmp->width;\r
-                        }\r
-                }\r
-        }\r
+       byte plane;\r
+       word px, py;\r
+       word offset;\r
+\r
+       /* TODO Make this fast.  It's SLOOOOOOW */\r
+       for(plane=0; plane < 4; plane++) {\r
+               modexSelectPlane(PLANE(plane+x));\r
+               for(px = plane; px < bmp->width; px+=4) {\r
+                       offset=px;\r
+                       for(py=0; py<bmp->height; py++) {\r
+                       if(!sprite || bmp->data[offset])\r
+                               page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset];\r
+                       offset+=bmp->width;\r
+                       }\r
+               }\r
+       }\r
 }\r
 \r
+void\r
+CDrawBmp(byte far* vgamem, page_t* page, int x, int y, bitmap_t *bmp, byte sprite)\r
+{\r
+       byte plane;\r
+       word px, py;\r
+       word offset=0;\r
+\r
+\r
+       /* TODO Make this fast.  It's SLOOOOOOW */\r
+       for(plane=0; plane < 4; plane++) {\r
+               modexSelectPlane(PLANE(plane+x));\r
+               for(px = plane; px < bmp->width; px+=4) {\r
+                       offset=px;\r
+                       for(py=0; py<bmp->height; py++) {\r
+                       if(!sprite || bmp->data[offset])\r
+                               //modexputPixel(page, x+px, y+py, bmp->data[offset]);\r
+                               vgamem[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset];\r
+                       offset+=bmp->width;\r
+                       }\r
+               }\r
+       }\r
+}\r
 \r
 void\r
 modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp) {\r
@@ -314,7 +336,7 @@ void
 modexDrawBmpRegion(page_t *page, int x, int y,\r
                    int rx, int ry, int rw, int rh, bitmap_t *bmp) {\r
     word poffset = (word) page->data  + y*(page->width/4) + x/4;\r
-    byte *data = bmp->data;//+bmp->offset;\r
+    byte far *data = bmp->data;//+bmp->offset;\r
     word bmpOffset = (word) data + ry * bmp->width + rx;\r
     word width = rw;\r
     word height = rh;\r
@@ -325,6 +347,10 @@ modexDrawBmpRegion(page_t *page, int x, int y,
     word rowCounter;\r
     byte planeCounter = 4;\r
 \r
+/*     printf("bmp->data=%Fp\n",bmp->data);\r
+       printf("*bmp->data=%Fp\n",*(bmp->data));\r
+       printf("&bmp->data=%Fp\n",&(bmp->data));*/\r
+\r
         //code is a bit slow here\r
     __asm {\r
                 MOV AX, SCREEN_SEG      ; go to the VGA memory\r
@@ -1162,6 +1188,21 @@ void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, c
        }\r
 }\r
 \r
+/////////////////////////////////////////////////////////////////////////////\r
+//                                                                                                                                              //\r
+// cls() - This clears the screen to the specified color, on the VGA or on //\r
+//              the Virtual screen.                                                                                     //\r
+//                                                                                                                                              //\r
+/////////////////////////////////////////////////////////////////////////////\r
+void cls(page_t *page, byte color, byte *Where)\r
+{\r
+       //modexClearRegion(page, 0, 0, page->width, page->height, color);\r
+       /* set map mask to all 4 planes */\r
+       outpw(SC_INDEX, 0xff02);\r
+       //_fmemset(VGA, color, 16000);\r
+       _fmemset(Where, color, page->width*(page->height));\r
+}\r
+\r
 void\r
 modexWaitBorder() {\r
     while(inp(INPUT_STATUS_1)  & 8)  {\r