]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_vl.c
showing row and colum drawing i optimized it to only draw at the end of walk. this...
[16.git] / src / lib / 16_vl.c
index 07eb939ffa5ebc7d2aa2523c00605c842104ff3b..59ce49aa30117061d9f2ecff29346c9829efd15b 100755 (executable)
@@ -1,5 +1,5 @@
 /* Project 16 Source Code~\r
- * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
+ * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
  *\r
  * This file is part of Project 16.\r
  *\r
@@ -249,9 +249,9 @@ modexNextPageFlexibleSize(page_t *p, word x, word y)
        result.tilesw=result.width/TILEWH;\r
        result.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
@@ -284,14 +285,20 @@ 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->sp=video->p=0;\r
        video->r=1;\r
+       video->vh=video->page[0].height+video->page[1].height+video->page[3].height-8;//+video->page[2].height\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
 \r
        //setup the buffersize\r
        video->page[0].dx=video->page[0].dy=\r
@@ -333,8 +340,6 @@ modexShowPage(page_t *page) {
        outp(AC_INDEX, 0x33);\r
        outp(AC_INDEX, (page[0].dx & 0x03) << 1);\r
 }\r
-\r
-//another variant\r
 //args: page, vertical sync switch, screen resolution switch, page0 switch\r
 void\r
 VL_ShowPage(page_t *page, boolean vsync, boolean sr) {\r
@@ -1254,6 +1259,56 @@ void modexcls(page_t *page, byte color, byte *Where)
        _fmemset(Where, color, page->width*(page->height)/4);\r
 }\r
 \r
+//\r
+// pattern filler from joncampbell123's code\r
+//\r
+void VL_PatternDraw(video_t *video, word pn, boolean sw, boolean allsw)\r
+{\r
+       unsigned int i,j,o,     d,h,s;\r
+       word w;\r
+\r
+       switch(sw)\r
+       {\r
+               case 0:\r
+                       w=vga_state.vga_width;\r
+                       d=0;\r
+                       s=vga_state.vga_stride;\r
+                       switch(allsw)\r
+                       {\r
+                               case 0:\r
+                                       h=vga_state.vga_height;\r
+                               break;\r
+                               case 1:\r
+                                       h=video->vh;\r
+                               break;\r
+                       }\r
+               break;\r
+               default:\r
+                       w=video->page[pn].width;\r
+                       d=(0x10000UL - (uint16_t)video->page[pn].data);\r
+                       s=video->page[pn].stridew;\r
+                       switch(allsw)\r
+                       {\r
+                               case 0:\r
+                                       h=video->page[pn].height;\r
+                               break;\r
+                               case 1:\r
+                                       if(!pn) h=video->vh;\r
+                                       else h=video->page[pn].height;\r
+                               break;\r
+                       }\r
+               break;\r
+       }\r
+\r
+       /* fill screen/pattern with a distinctive pattern */\r
+       for (i=0;i < w;i++) {\r
+               o = (i >> 2) + d;\r
+               vga_write_sequencer(0x02/*map mask*/,1 << (i&3));\r
+               for (j=0;j < h;j++,o += s)\r
+                       vga_state.vga_graphics_ram[o] = (i^j)&15; // VRL samples put all colors in first 15!\r
+       }\r
+}\r
+\r
 void\r
 modexWaitBorder() {\r
        while(inp(INPUT_STATUS_1)  & 8)  {\r
@@ -1265,18 +1320,28 @@ modexWaitBorder() {
        }\r
 }\r
 \r
-void modexprintmeminfo(video_t *v)\r
+//\r
+// printings of video memory information\r
+//\r
+void VL_PrintmodexmemInfo(video_t *v)\r
 {\r
        byte i;\r
-       printf("video memory remaining: %u\n", v->vmem_remain);\r
-       printf("page ");\r
+\r
+//     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
+\r
+       printf("  Free Video Memory: %u\n", v->vmem_remain);\r
+       printf("  page");\r
        for(i=0; i<v->num_of_pages;i++)\r
        {\r
                printf("        [%u]=", i);\r
                printf("(%Fp)", (v->page[i].data));\r
                printf(" size=%u        ", v->page[i].pagesize);\r
-               printf("w=%lu  h=%lu ", (unsigned long)v->page[i].width, (unsigned long)v->page[i].height);\r
-               printf("sw=%lu  sh=%lu ", (unsigned long)v->page[i].sw, (unsigned long)v->page[i].sh);\r
+               printf("w=%-3lu  h=%-3lu ", (unsigned long)v->page[i].width, (unsigned long)v->page[i].height);\r
+               printf("sw=%-3lu  sh=%-3lu ", (unsigned long)v->page[i].sw, (unsigned long)v->page[i].sh);\r
                printf("pi=%u", v->page[i].pi);\r
                printf("\n");\r
        }\r