]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/modex16.c
rendering comparisons are made ^^
[16.git] / src / lib / modex16.c
index 1e6a2fcc430942e03e88be8ba3abec0ffb00acf1..0da6bb1c8a98777d15d56298658600a7798d34cf 100755 (executable)
@@ -62,7 +62,12 @@ void VGAmodeX(sword vq, boolean cmem, global_game_variables_t *gv)
 static void\r
 vgaSetMode(byte mode)\r
 {\r
-  int10_setmode(mode);\r
+       union REGS regs;\r
+\r
+       regs.h.ah = SET_MODE;\r
+       regs.h.al = mode;\r
+       int86(VIDEO_INT, &regs, &regs);\r
+  //int10_setmode(mode);\r
 }\r
 \r
 //---------------------------------------------------\r
@@ -85,12 +90,14 @@ void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv)
 \r
        vgaSetMode(VGA_256_COLOR_MODE);\r
        vga_enable_256color_modex();\r
-       /* reprogram the CRT controller */\r
-//     outp(CRTC_INDEX, 0x11); /* VSync End reg contains register write prot */\r
-//     outp(CRTC_DATA, 0x7f);  /* get current write protect on varios regs */\r
+\r
        update_state_from_vga();\r
        vga_read_crtc_mode(&cm);\r
 \r
+       /* reprogram the CRT controller */\r
+       //outp(CRTC_INDEX, 0x11); /* VSync End reg contains register write prot */\r
+       //outp(CRTC_DATA, 0x7f);  /* get current write protect on varios regs */\r
+\r
        switch(vq)\r
        {\r
                case 1:\r
@@ -112,7 +119,7 @@ void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv)
                        cm.horizontal_total=0x5f + 5; /* CRTC[0]             -5 */\r
                        cm.horizontal_display_end=0x4f + 1; /* CRTC[1]       -1 */\r
                        cm.horizontal_blank_start=0x50 + 1; /* CRTC[2] */\r
-                       cm.horizontal_blank_end=0x82 + 1;   /* CRTC[3] bit 0-4 & CRTC[5] bit 7 */\r
+//                     cm.horizontal_blank_end=0x82 + 1;   /* CRTC[3] bit 0-4 & CRTC[5] bit 7 *///skewing ^^;\r
                        cm.horizontal_start_retrace=0x54;/* CRTC[4] */\r
                        cm.horizontal_end_retrace=0x80; /* CRTC[5] bit 0-4 */\r
                        //cm.horizontal_start_delay_after_total=0x3e; /* CRTC[3] bit 5-6 */\r
@@ -265,6 +272,7 @@ void modexHiganbanaPageSetup(video_t *video)
        (video->page[0]) = modexDefaultPage(&(video->page[0])); video->num_of_pages++;  //video->page[0].width += (TILEWHD); video->page[0].height += (TILEWHD);\r
        (video->page[1]) = modexNextPage(&(video->page[0]));    video->num_of_pages++;\r
        (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), TILEWH*4, TILEWH*4);            video->num_of_pages++;\r
+//     (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].width, 176);     video->num_of_pages++;\r
        (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].sw, 208);        video->num_of_pages++;\r
 //     (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), video->page[0].width, 172);     video->num_of_pages++;\r
 //     (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), 72, 128);               video->num_of_pages++;\r
@@ -335,6 +343,8 @@ modexClearRegion(page_t *page, int x, int y, int w, int h, byte  color) {
       right=0x0f;\r
     }\r
 \r
+       //printf("modexClearRegion(x=%u, y=%u, w=%u, h=%u, left=%u, right=%u)\n", x, y, w, h, left, right);\r
+\r
     __asm {\r
            PUSHF\r
            PUSH ES\r
@@ -402,14 +412,21 @@ modexCopyPageRegion(page_t *dest, page_t *src,
 {\r
     word doffset = (word)dest->data + dy*(dest->stridew) + dx/4;\r
     word soffset = (word)src->data + sy*(src->stridew) + sx/4;\r
-    word scans   = vga_state.vga_stride;\r
+    word scans   = vga_state.vga_stride+8;                             //++++0000 the quick and dirty fix of the major issue with p16 video display wwww\r
     word nextSrcRow = src->stridew - scans - 1;\r
     word nextDestRow = dest->stridew - scans - 1;\r
     byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08};  /* clips for rectangles not on 4s */\r
-    byte rclip[] = {0x0f, 0x01, 0x03, 0x07};\r
+    byte rclip[] = {0x00, 0x01, 0x03, 0x07};\r
     byte left = lclip[sx&0x03];\r
     byte right = rclip[(sx+width)&0x03];\r
 \r
+       /* handle the case which requires an extra group */\r
+       if((sx & 0x03) && !((sx+width) & 0x03)) {\r
+               right=0x0f;\r
+       }\r
+\r
+//     printf("modexCopyPageRegion(src->stridew=%u, dest->stridew=%u, sx=%u, sy=%u, dx=%u, dy=%u, width=%u, height=%u, left=%u, right=%u)\n", src->stridew, dest->stridew, sx, sy, dx, dy, width, height, left, right);\r
+\r
     __asm {\r
            PUSHF\r
            PUSH ES\r
@@ -830,7 +847,7 @@ modexPalUpdate0(byte *p)
 }\r
 \r
 void\r
-modexPalOverscan(byte *p, word col)\r
+modexPalOverscan(word col)\r
 {\r
        //modexWaitBorder();\r
        vga_wait_for_vsync();\r
@@ -1124,36 +1141,9 @@ modexWaitBorder() {
        // spin\r
        }\r
 \r
-       while(!(inp(INPUT_STATUS_1)  & 8))  {\r
-       //spin\r
-       }\r
-}\r
-\r
-void bios_cls() {\r
-       VGA_ALPHA_PTR ap;\r
-       VGA_RAM_PTR rp;\r
-       unsigned char m;\r
-\r
-       m = int10_getmode();\r
-       if ((rp=vga_state.vga_graphics_ram) != NULL && !(m <= 3 || m == 7)) {\r
-               unsigned int i,im;\r
-\r
-               im = (FP_SEG(vga_state.vga_graphics_ram_fence) - FP_SEG(vga_state.vga_graphics_ram));\r
-               if (im > 0xFFE) im = 0xFFE;\r
-               im <<= 4;\r
-               for (i=0;i < im;i++) vga_state.vga_graphics_ram[i] = 0;\r
-       }\r
-       else if ((ap=vga_state.vga_alpha_ram) != NULL) {\r
-               unsigned int i,im;\r
-\r
-               im = (FP_SEG(vga_state.vga_alpha_ram_fence) - FP_SEG(vga_state.vga_alpha_ram));\r
-               if (im > 0x7FE) im = 0x7FE;\r
-               im <<= 4 - 1; /* because ptr is type uint16_t */\r
-               for (i=0;i < im;i++) vga_state.vga_alpha_ram[i] = 0x0720;\r
-       }\r
-       else {\r
-               printf("WARNING: bios cls no ptr\n");\r
-       }\r
+//     while(!(inp(INPUT_STATUS_1)  & 8))  {\r
+//     //spin\r
+//     }\r
 }\r
 \r
 void modexprintmeminfo(video_t *v)\r
@@ -1165,8 +1155,8 @@ void modexprintmeminfo(video_t *v)
        {\r
                printf("        [%u]=", i);\r
                printf("(%Fp)", (v->page[i].data));\r
-               printf(" size=%u", v->page[i].pagesize);\r
-               printf(" sw=%lu  sh=%lu ", (unsigned long)v->page[i].sw, (unsigned long)v->page[i].sh);\r
+               printf(" size=%u        ", v->page[i].pagesize);\r
+               printf("sw=%lu  sh=%lu ", (unsigned long)v->page[i].sw, (unsigned long)v->page[i].sh);\r
                printf(" width=%lu  height=%lu", (unsigned long)v->page[i].width, (unsigned long)v->page[i].height);\r
                printf("\n");\r
        }\r