]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/modex16.c
guard asm blocks
[16.git] / src / lib / modex16.c
index 6a5b27994f5549b8c1e80e141fab486627389662..2d4c00242676ffd4401578c3fb6f024599199c21 100755 (executable)
@@ -92,6 +92,9 @@ void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv)
        {\r
                case 1:\r
                        //CRTParmCount = sizeof(ModeX_320x240regs) / sizeof(ModeX_320x240regs[0]);\r
+                       /*for(i=0; i<CRTParmCount; i++) {\r
+                               outpw(CRTC_INDEX, ModeX_320x240regs[i]);\r
+                       }*/\r
                        /* width and height */\r
                        gv->video.page[0].sw = vga_state.vga_width = 320; // VGA lib currently does not update this\r
                        gv->video.page[0].sh = vga_state.vga_height = 240; // VGA lib currently does not update this\r
@@ -155,7 +158,6 @@ void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv)
        //TODO MAKE FLEXIBLE~\r
 //     gv->video.page[0].tilemidposscreenx = gv->video.page[0].tilesw;\r
 //     gv->video.page[0].tilemidposscreeny = (gv->video.page[0].tilesh/2)+1;\r
-       gv->video.num_of_pages=0;\r
 }\r
 \r
 void\r
@@ -249,6 +251,7 @@ void modexCalcVmemRemain(video_t *video)
 void modexHiganbanaPageSetup(video_t *video)\r
 {\r
        video->vmem_remain=262144L;\r
+       video->num_of_pages=0;\r
        (video->page[0]) = modexDefaultPage(&(video->page[0])); video->num_of_pages++;\r
        //video->page[0].width += (TILEWHD); video->page[0].height += (TILEWHD);\r
        (video->page[1]) = modexNextPage(&(video->page[0]));    video->num_of_pages++;\r
@@ -291,21 +294,18 @@ modexShowPage(page_t *page) {
     outp(AC_INDEX, (page->dx & 0x03) << 1);\r
 }\r
 \r
-\r
 void\r
 modexPanPage(page_t *page, int dx, int dy) {\r
     page->dx = dx;\r
     page->dy = dy;\r
 }\r
 \r
-\r
 void\r
 modexSelectPlane(byte plane) {\r
     outp(SC_INDEX, MAP_MASK);    /* select plane */\r
     outp(SC_DATA,  plane);\r
 }\r
 \r
-\r
 void\r
 modexClearRegion(page_t *page, int x, int y, int w, int h, byte  color) {\r
     word pageOff = (word) page->data;\r
@@ -399,6 +399,15 @@ modexCopyPageRegion(page_t *dest, page_t *src,
     byte right = rclip[(sx+width)&0x03];\r
 \r
     __asm {\r
+           PUSHF\r
+           PUSH ES\r
+           PUSH AX\r
+           PUSH BX\r
+           PUSH CX\r
+           PUSH DX\r
+           PUSH SI\r
+           PUSH DI\r
+\r
                MOV AX, SCREEN_SEG      ; work in the vga space\r
                MOV ES, AX            ;\r
                MOV DI, doffset  ;\r
@@ -447,6 +456,15 @@ modexCopyPageRegion(page_t *dest, page_t *src,
                MOV DX, GC_INDEX+1      ; go back to CPU data\r
                MOV AL, 0ffh        ; none from latches\r
                OUT DX, AL            ;\r
+\r
+           POP DI\r
+           POP SI\r
+           POP DX\r
+           POP CX\r
+           POP BX\r
+           POP AX\r
+           POP ES\r
+           POPF\r
     }\r
 }\r
 \r
@@ -1008,6 +1026,15 @@ void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, c
        }\r
        //load the letter 'A'\r
        __asm {\r
+           PUSHF\r
+           PUSH ES\r
+           PUSH AX\r
+           PUSH BX\r
+           PUSH CX\r
+           PUSH DX\r
+           PUSH SI\r
+           PUSH DI\r
+\r
                MOV DI, addr\r
                MOV SI, o\r
                MOV ES, s\r
@@ -1022,6 +1049,15 @@ void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, c
                INC DI\r
                DEC CX\r
                JNZ L1\r
+\r
+           POP DI\r
+           POP SI\r
+           POP DX\r
+           POP CX\r
+           POP BX\r
+           POP AX\r
+           POP ES\r
+           POPF\r
        }\r
 \r
                for(i=0; i<w; i++)\r