]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_vl.c
fixed wwww now i need to work on map system stuff wwwwwwwwwwwwwww i am also going...
[16.git] / src / lib / 16_vl.c
index 023c440f4ea4248519a99425c35ac79701a57459..ab9a143b045cef28e6188fde8234f4ef3763862e 100755 (executable)
@@ -162,12 +162,12 @@ void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv)
                break;\r
        }\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
+//     gv->video.page[0].ti.tw = gv->video.page[0].sw/TILEWH;\r
+//     gv->video.page[0].ti.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].ti.tilemidposscreenx = gv->video.page[0].ti.tilesw;\r
+//     gv->video.page[0].ti.tilemidposscreeny = (gv->video.page[0].ti.tilesh/2)+1;\r
 }\r
 \r
 void\r
@@ -191,12 +191,12 @@ modexDefaultPage(page_t *p)
        page.sh = p->sh;\r
        page.width = p->sw+TILEWHD;\r
        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.ti.tw = page.sw/TILEWH;\r
+       page.ti.th = page.sh/TILEWH;\r
+       page.ti.tilesw=page.width/TILEWH;\r
+       page.ti.tilesh=page.height/TILEWH;\r
+       page.ti.tilemidposscreenx = page.ti.tw/2;\r
+       page.ti.tilemidposscreeny = (page.ti.th/2)+1;\r
        page.stridew=page.width/4;\r
        page.pagesize = (word)(page.stridew)*page.height;\r
        page.pi=page.width*4;\r
@@ -219,10 +219,10 @@ modexNextPage(page_t *p) {
        result.sh = p->sh;\r
        result.width = p->width;\r
        result.height = p->height;\r
-       result.tw = p->tw;\r
-       result.th = p->th;\r
-       result.tilesw = p->tilesw;\r
-       result.tilesh = p->tilesh;\r
+       result.ti.tw = p->ti.tw;\r
+       result.ti.th = p->ti.th;\r
+       result.ti.tilesw = p->ti.tilesw;\r
+       result.ti.tilesh = p->ti.tilesh;\r
        result.stridew=p->stridew;\r
        result.pagesize = p->pagesize;\r
        result.pi=result.width*4;\r
@@ -244,14 +244,14 @@ modexNextPageFlexibleSize(page_t *p, word x, word y)
        result.sh = y;\r
        result.width = x;\r
        result.height = y;\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.ti.tw = result.sw/TILEWH;\r
+       result.ti.th = result.sh/TILEWH;\r
+       result.ti.tilesw=result.width/TILEWH;\r
+       result.ti.tilesh=result.height/TILEWH;\r
        result.id = p->id+1;\r
-       result.stridew=p->sw/4;//result.width/4;\r
+       result.stridew=result.width/4;//p->sw/4;\r
        result.pagesize = (word)(result.stridew)*result.height;\r
-       switch(result.id)\r
+/*     switch(result.id)\r
        {\r
                case 2:\r
                        result.pi=p->width*4;\r
@@ -259,7 +259,8 @@ modexNextPageFlexibleSize(page_t *p, word x, word y)
                case 3:\r
                        result.pi=p->pi;\r
                break;\r
-       }\r
+       }*/\r
+       result.pi=result.width*4;\r
 \r
        return result;\r
 }\r
@@ -276,6 +277,18 @@ void modexCalcVmemRemain(video_t *video)
        }\r
 }\r
 \r
+void VL_Initofs(video_t *video)\r
+{\r
+       if(!video->bgps)\r
+       {\r
+               video->ofs.offscreen_ofs =      video->page[0].pagesize+video->page[1].pagesize;//(vga_state.vga_stride * vga_state.vga_height);\r
+               video->ofs.pattern_ofs =        (uint16_t)video->page[2].data;\r
+       }else{\r
+               video->ofs.offscreen_ofs =      0;\r
+               video->ofs.pattern_ofs =        0;//(uint16_t)video->page[0].data;\r
+       }\r
+}\r
+\r
 void modexHiganbanaPageSetup(video_t *video)\r
 {\r
        video->vmem_remain=65535U;\r
@@ -284,21 +297,24 @@ void modexHiganbanaPageSetup(video_t *video)
        (video->page[1]) = modexNextPage(&(video->page[0]));    video->num_of_pages++;\r
 //0000 (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), (video->page[0]).width, TILEWH*4);              video->num_of_pages++;\r
 //0000 (video->page[3]) = (video->page[2]);            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
+////   (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].sw, 208);        video->num_of_pages++;\r
+       (video->page[2]) = modexNextPageFlexibleSize(&(video->page[1]), video->page[0].width, 96);      video->num_of_pages++;\r
+       (video->page[3]) = modexNextPageFlexibleSize(&(video->page[2]), video->page[0].width, 96);      video->num_of_pages++;\r
        modexCalcVmemRemain(video);\r
-       video->p=0;\r
-       video->r=1;\r
+\r
+       video->sp=video->p =    0;      //showpage\r
+       video->dorender =       1;                      //render\r
        video->vh=video->page[0].height+video->page[1].height+video->page[2].height+video->page[3].height;\r
+\r
+       VL_Initofs(video);\r
        //doslib origi var\r
        video->omemptr=                 vga_state.vga_graphics_ram;\r
        video->vga_draw_stride= vga_state.vga_draw_stride;\r
        video->vga_draw_stride_limit=   vga_state.vga_draw_stride_limit;\r
-       //sprite render switch\r
-       video->rss=0;\r
+       //sprite render switch and bgpreservation switch\r
+       video->rss=             1;\r
+       video->bgps=    1;\r
 \r
        //setup the buffersize\r
        video->page[0].dx=video->page[0].dy=\r
@@ -340,18 +356,19 @@ modexShowPage(page_t *page) {
        outp(AC_INDEX, 0x33);\r
        outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
 }\r
+\r
 //args: page, vertical sync switch, screen resolution switch, page0 switch\r
 void\r
 VL_ShowPage(page_t *page, boolean vsync, boolean sr) {\r
        word high_address, low_address, offset;\r
        byte crtcOffset;\r
 \r
-       /* calculate offset */\r
+       // calculate offset\r
        offset = (word) page->data;\r
-       offset += page[0].dy * (page->width >> 2 );\r
-       offset += page[0].dx >> 2;\r
+       offset += page->dy * (page->width >> 2 );\r
+       offset += page->dx >> 2;\r
 \r
-       /* calculate crtcOffset according to virtual width */\r
+       // calculate crtcOffset according to virtual width\r
        switch(sr)\r
        {\r
                case 1:\r
@@ -366,20 +383,20 @@ VL_ShowPage(page_t *page, boolean vsync, boolean sr) {
        high_address = HIGH_ADDRESS | (offset & 0xff00);\r
        low_address  = LOW_ADDRESS  | (offset << 8);\r
 \r
-       /* wait for appropriate timing and then program CRTC */\r
+       // wait for appropriate timing and then program CRTC\r
        if(vsync) while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE));\r
        outpw(CRTC_INDEX, high_address);\r
        outpw(CRTC_INDEX, low_address);\r
        outp(CRTC_INDEX, 0x13);\r
        outp(CRTC_DATA, crtcOffset);\r
 \r
-       /* wait for one retrace */\r
+       // wait for one retrace\r
        if(vsync) while (!(inp(INPUT_STATUS_1) & VRETRACE));\r
 \r
-       /* do PEL panning here */\r
+       // do PEL panning here\r
        outp(AC_INDEX, 0x33);\r
-       outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
-       vga_state.vga_graphics_ram = (VGA_RAM_PTR)page[0].data;\r
+       outp(AC_INDEX, (page->dx & 0x03) << 1);\r
+       vga_state.vga_graphics_ram = (VGA_RAM_PTR)page->data;\r
 }\r
 \r
 //=============================================================================\r
@@ -639,8 +656,7 @@ modexNewPal() {
 \r
        /* handle errors */\r
        if(!ptr) {\r
-       printf("Could not allocate palette.\n");\r
-       exit(-1);\r
+               printf("Could not allocate palette.\n");\r
        }\r
 \r
        return ptr;\r
@@ -664,7 +680,6 @@ modexLoadPalFile(byte *filename, byte **palette) {
        file = fopen(filename, "rb");\r
        if(!file) {\r
        printf("Could not open palette file: %s\n", filename);\r
-       exit(-2);\r
        }\r
 \r
        /* read the file */\r
@@ -685,7 +700,7 @@ void VL_LoadPalFile(const char *filename, byte *palette)
        if (fd >= 0) {\r
                word i;\r
 \r
-               read(fd,palette,768);\r
+               read(fd,palette,        PAL_SIZE);\r
                close(fd);\r
 \r
                vga_palette_lseek(0);\r
@@ -703,7 +718,6 @@ modexSavePalFile(char *filename, byte *pal) {
        file = fopen(filename, "wb");\r
        if(!file) {\r
        printf("Could not open %s for writing\n", filename);\r
-       exit(-2);\r
        }\r
 \r
        /* write the data to the file */\r
@@ -1104,7 +1118,7 @@ void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, cons
        word s, o, w;\r
        word x_draw = x;\r
        //word addr = (word) romFontsData.l;\r
-       word addrq = (page->width/4) * y + (x / 4) + ((word)page->data);\r
+       word addrq = (page->stridew) * y + (x / 4) + ((word)page->data);\r
        word addrr = addrq;\r
        byte c;\r
 \r
@@ -1120,7 +1134,7 @@ void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, cons
        {\r
                x = x_draw;\r
                romFontsData.chw = 0;\r
-               addrq += (page->width / 4) * 8;\r
+               addrq += (page->stridew) * 8;\r
                addrr = addrq;\r
                y += 8;\r
                continue;\r
@@ -1256,7 +1270,7 @@ void modexcls(page_t *page, byte color, byte *Where)
        /* 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)/4);\r
+       _fmemset(Where, color, page->stridew*page->height);\r
 }\r
 \r
 //\r
@@ -1320,6 +1334,24 @@ modexWaitBorder() {
        }\r
 }\r
 \r
+void\r
+modexWaitBorder_start()\r
+{\r
+       while(inp(INPUT_STATUS_1)  & 8)  {\r
+       // spin\r
+       }\r
+\r
+}\r
+\r
+void\r
+modexWaitBorder_end()\r
+{\r
+       while(!(inp(INPUT_STATUS_1)  & 8))  {\r
+       // spin\r
+       }\r
+\r
+}\r
+\r
 //\r
 // printings of video memory information\r
 //\r
@@ -1330,8 +1362,8 @@ void VL_PrintmodexmemInfo(video_t *v)
 //     printf("========================================\n");\r
        printf("VL_PrintmodexmemInfo:\n");\r
 //     printf("========================================\n");\r
-       printf("  Virtual Screen: %dx", v->page[0].width);      printf("%d      ", v->page[0].height);  printf("Tile: %dx", v->page[0].tilesw);         printf("%d", v->page[0].tilesh);        printf("=((Virtual Screen)/16)\n");\r
-       printf("        Screen: %dx", v->page[0].sw);           printf("%d      ", v->page[0].sh);              printf("Tile: %dx", v->page[0].tw);                     printf("%d", v->page[0].th);            printf("=((Screen)/16)\n");\r
+       printf("  Virtual Screen: %dx", v->page[0].width);      printf("%d      ", v->page[0].height);  printf("Tile: %dx", v->page[0].ti.tilesw);              printf("%d", v->page[0].ti.tilesh);     printf("=((Virtual Screen)/16)\n");\r
+       printf("          Screen: %dx", v->page[0].sw);         printf("%d      ", v->page[0].sh);              printf("Tile: %dx", v->page[0].ti.tw);                  printf("%d", v->page[0].ti.th);         printf("=((Screen)/16)\n");\r
 \r
        printf("  Free Video Memory: %u\n", v->vmem_remain);\r
        printf("  page");\r