\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
// 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
// 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
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
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
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
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
}\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