]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/modex16.c
well, we could avoid some crashiness by saving/restoring CPU registers
[16.git] / src / lib / modex16.c
index c6bb04fdac450d71ae7a28c6bbfb52c0cd8d3db1..6a5b27994f5549b8c1e80e141fab486627389662 100755 (executable)
@@ -148,11 +148,14 @@ void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv)
                }\r
                break;\r
        }\r
-       gv->video.page[0].tilesw = gv->video.page[0].sw/TILEWH;\r
-       gv->video.page[0].tilesh = gv->video.page[0].sh/TILEWH;\r
+\r
+//     gv->video.page[0].tw = gv->video.page[0].sw/TILEWH;\r
+//     gv->video.page[0].th = gv->video.page[0].sh/TILEWH;\r
+\r
        //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.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
@@ -167,7 +170,9 @@ modexDefaultPage(page_t *p)
     page_t page;\r
 \r
     /* default page values */\r
-    page.data = vga_state.vga_graphics_ram;//VGA;\r
+       //page.data = VGA;\r
+       //page.data = (byte far *)(vga_state.vga_graphics_ram);\r
+       page.data = (vga_state.vga_graphics_ram);\r
     page.dx = 0;\r
     page.dy = 0;\r
        page.sw = p->sw;\r
@@ -176,11 +181,11 @@ modexDefaultPage(page_t *p)
        page.height = p->sh+TILEWHD;\r
        page.tw = page.sw/TILEWH;\r
        page.th = page.sh/TILEWH;\r
+       page.tilesw=page.width/TILEWH;\r
+       page.tilesh=page.height/TILEWH;\r
        page.tilemidposscreenx = page.tw/2;\r
        page.tilemidposscreeny = (page.th/2)+1;\r
-       page.tilesw=p->tilesw;\r
-       page.tilesh=p->tilesh;\r
-       page.pagesize = (sdiword)page.width*page.height;\r
+       page.pagesize = (sdiword)(page.width/4)*page.height;\r
        page.id = 0;\r
 \r
     return page;\r
@@ -193,13 +198,15 @@ page_t
 modexNextPage(page_t *p) {\r
     page_t result;\r
 \r
-    result.data = p->data + (byte)(p->width/4)*p->height;\r
+    result.data = p->data + (p->pagesize);\r
     result.dx = 0;\r
     result.dy = 0;\r
     result.width = p->width;\r
     result.height = p->height;\r
-       result.tw = p->width/TILEWH;\r
-       result.th = p->height/TILEWH;\r
+       result.tw = p->tw;\r
+       result.th = p->th;\r
+       result.tilesw = p->tilesw;\r
+       result.tilesh = p->tilesh;\r
        result.id = p->id+1;\r
        result.pagesize = p->pagesize;\r
 \r
@@ -212,15 +219,17 @@ modexNextPageFlexibleSize(page_t *p, word x, word y)
 {\r
        page_t result;\r
 \r
-       result.data = p->data + (byte)(p->width/4)*p->height;  /* compute the offset */\r
+       result.data = p->data + (p->pagesize);  /* compute the offset */\r
        result.dx = 0;\r
        result.dy = 0;\r
        result.width = x;\r
        result.height = y;\r
-       result.tw = p->width/TILEWH;\r
-       result.th = p->height/TILEWH;\r
+       result.tw = result.sw/TILEWH;\r
+       result.th = result.sh/TILEWH;\r
+       result.tilesw=result.width/TILEWH;\r
+       result.tilesh=result.height/TILEWH;\r
        result.id = p->id+1;\r
-       result.pagesize = (sdiword)result.width*result.height;\r
+       result.pagesize = (sdiword)(result.width/4)*result.height;\r
 \r
        return result;\r
 }\r
@@ -228,12 +237,12 @@ modexNextPageFlexibleSize(page_t *p, word x, word y)
 void modexCalcVmemRemain(video_t *video)\r
 {\r
        byte i;\r
-       printf("\n\n    1st vmem_remain=%ld\n", video->vmem_remain);\r
+       //printf("\n\n  1st vmem_remain=%ld\n", video->vmem_remain);\r
        for(i=0; i<=video->num_of_pages-1; i++)\r
        {\r
                video->vmem_remain-=video->page[i].pagesize;\r
-               printf("                [%u], video->page[i].pagesize=%ld\n", i, video->page[i].pagesize);\r
-               printf("                [%u], vmem_remain=%ld\n", i, video->vmem_remain);\r
+               //printf("              [%u], video->page[i].pagesize=%ld\n", i, video->page[i].pagesize);\r
+               //printf("              [%u], vmem_remain=%ld\n", i, video->vmem_remain);\r
        }\r
 }\r
 \r
@@ -243,8 +252,8 @@ void modexHiganbanaPageSetup(video_t *video)
        (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
-       (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), video->page[0].width, video->page[0].sh-40);    video->num_of_pages++;\r
-       (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), TILEWH, TILEWH);        video->num_of_pages++;\r
+       //(video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), video->page[0].width, video->page[0].sh-40);  video->num_of_pages++;\r
+       //(video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), TILEWH, TILEWH);      video->num_of_pages++;\r
        modexCalcVmemRemain(video);\r
        video->p=0;\r
 }\r
@@ -315,6 +324,14 @@ modexClearRegion(page_t *page, int x, int y, int w, int h, byte  color) {
     }\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
                MOV AX, SCREEN_SEG      ; go to the VGA memory\r
                MOV ES, AX\r
                MOV DI, poffset  ; go to the first pixel\r
@@ -348,6 +365,14 @@ modexClearRegion(page_t *page, int x, int y, int w, int h, byte  color) {
                ADD DI, nextRow  ; go to the next row\r
                DEC h\r
                JNZ SCAN_START\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