OSDN Git Service

added stuff to help me study 0.exe it is a complex program wwww what is getting to...
authorsparky4 <sparky4@cock.li>
Mon, 9 Jan 2017 18:12:47 +0000 (12:12 -0600)
committersparky4 <sparky4@cock.li>
Mon, 9 Jan 2017 18:12:47 +0000 (12:12 -0600)
src/0.c
src/lib/16_vl.c
src/lib/16_vl.h
src/lib/scroll16.c
src/lib/scroll16.h
src/scroll.c
src/tesuto.h

diff --git a/src/0.c b/src/0.c
index 47a0e29..635a4f3 100755 (executable)
--- a/src/0.c
+++ b/src/0.c
@@ -10,7 +10,7 @@
 #define FILENAME_1 "data/spri/chikyuu.vrl"\r
 #define FILENAME_2 "data/spri/chikyuu.pal"\r
 \r
-//#define PATTERN\r
+#define PATTERN\r
 #define INITTNUM 1\r
 \r
 static unsigned char palette[768];\r
@@ -180,6 +180,8 @@ int main(int argc,char **argv)
                                player[0].q = 1; player[0].d = 2;\r
                                x=y=0;\r
                                xdir=ydir=1;\r
+                               TESTBG;\r
+                               DRAWCORNERBOXES;\r
                        } //R\r
                        FUNCTIONKEYFUNCTIONS0EXE;\r
 \r
index 9369ce4..652ef89 100755 (executable)
@@ -370,6 +370,37 @@ modexShowPage_(page_t *page)
 }\r
 \r
 void\r
+modexShowPageVsync(page_t *page) {\r
+       word high_address, low_address, offset;\r
+       byte crtcOffset;\r
+\r
+       /* calculate offset */\r
+       offset = (word) page->data;\r
+       offset += page->dy * (page->width >> 2 );\r
+       offset += page->dx >> 2;\r
+\r
+       /* calculate crtcOffset according to virtual width */\r
+       crtcOffset = page->width >> 3;\r
+\r
+       high_address = HIGH_ADDRESS | (offset & 0xff00);\r
+       low_address  = LOW_ADDRESS  | (offset << 8);\r
+\r
+       /* wait for appropriate timing and then program CRTC */\r
+       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
+       while (!(inp(INPUT_STATUS_1) & VRETRACE));\r
+\r
+       /* do PEL panning here */\r
+       outp(AC_INDEX, 0x33);\r
+       outp(AC_INDEX, (page->dx & 0x03) << 1);\r
+}\r
+\r
+void\r
 modexPanPage(page_t *page, int dx, int dy) {\r
        page->dx = dx;\r
        page->dy = dy;\r
index 2562f21..36f2069 100755 (executable)
@@ -105,6 +105,7 @@ void modexCalcVmemRemain(video_t *video);
 void modexHiganbanaPageSetup(video_t *video);\r
 void modexShowPage(page_t *page);\r
 void modexShowPage_(page_t *page);\r
+void modexShowPageVsync(page_t *page);\r
 void modexPanPage(page_t *page, int dx, int dy);\r
 void modexSelectPlane(byte plane);\r
 void modexClearRegion(page_t *page, int x, int y, int w, int h, byte color);\r
index e1221f8..c30c8ac 100755 (executable)
@@ -214,7 +214,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
 }\r
 \r
 //panning page\r
-void panpagemanual(map_view_t *pip, player_t *player, word pn)\r
+void panPageManual(map_view_t *pip, player_t *player, word pn)\r
 {\r
        switch(player[pn].d)\r
        {\r
@@ -273,6 +273,66 @@ void panpagemanual(map_view_t *pip, player_t *player, word pn)
        //if (player[pn].d!=2) printf("player[%u].d=%u player[%u].q=%u\n", pn, player[pn].d, pn, player[pn].q);\r
 }\r
 \r
+//panning vmem\r
+void panVmemManual(map_view_t *pip, player_t *player, word pn)\r
+{\r
+       switch(player[pn].d)\r
+       {\r
+               //right movement\r
+               case 3:\r
+                       if(pip[pip[0].pan->pn].tx >= 0 && pip[pip[0].pan->pn].tx+pip[pip[0].pan->pn].page->tw < pip[pip[0].pan->pn].page->tilesw)\r
+                       {\r
+                               if(player[pn].q<=player[pn].spt)\r
+                               {\r
+                                       pip[pip[0].pan->pn].page->dx+=4;\r
+                                       modexShowPageVsync(pip[pip[0].pan->pn].page);\r
+                                       player[pn].q++;\r
+                               } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].tx++; }\r
+                       }\r
+               break;\r
+\r
+               //left movement\r
+               case 1:\r
+                       if(pip[pip[0].pan->pn].tx > 0 && pip[pip[0].pan->pn].tx+pip[pip[0].pan->pn].page->tw <= pip[pip[0].pan->pn].page->tilesw)\r
+                       {\r
+                               if(player[pn].q<=player[pn].spt)\r
+                               {\r
+                                       pip[pip[0].pan->pn].page->dx-=4;\r
+                                       modexShowPageVsync(pip[pip[0].pan->pn].page);\r
+                                       player[pn].q++;\r
+                               } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].tx--; }\r
+                       }\r
+               break;\r
+\r
+               //down movement\r
+               case 4:\r
+                       if(pip[pip[0].pan->pn].ty >= 0 && pip[pip[0].pan->pn].ty+pip[pip[0].pan->pn].page->th < pip[pip[0].pan->pn].page->tilesh+pip[pip[1].pan->pn].page->tilesh+pip[pip[2].pan->pn].page->tilesh+pip[pip[3].pan->pn].page->tilesh)\r
+                       {\r
+                               if(player[pn].q<=player[pn].spt)\r
+                               {\r
+                                       pip[pip[0].pan->pn].page->dy+=4;\r
+                                       modexShowPageVsync(pip[pip[0].pan->pn].page);\r
+                                       player[pn].q++;\r
+                               } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].ty++; }\r
+                       }\r
+               break;\r
+\r
+               //up movement\r
+               case 0:\r
+                       if(pip[pip[0].pan->pn].ty > 0 && pip[pip[0].pan->pn].ty+pip[pip[0].pan->pn].page->th <= pip[pip[0].pan->pn].page->tilesh+pip[pip[1].pan->pn].page->tilesh+pip[pip[2].pan->pn].page->tilesh+pip[pip[3].pan->pn].page->tilesh)\r
+                       {\r
+                               if(player[pn].q<=player[pn].spt)\r
+                               {\r
+                                       pip[pip[0].pan->pn].page->dy-=4;\r
+                                       modexShowPageVsync(pip[pip[0].pan->pn].page);\r
+                                       player[pn].q++;\r
+                               } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].ty--; }\r
+                       }\r
+                       break;\r
+       }\r
+       //if (player[pn].d!=2) printf("player[%u].d=%u player[%u].q=%u\n", pn, player[pn].d, pn, player[pn].q);\r
+}\r
+\r
 /*map_t\r
 allocMap(int w, int h) {\r
        map_t result;\r
index 75117f5..a29f1f5 100755 (executable)
@@ -126,7 +126,8 @@ extern char global_temp_status_text[512];
 //map_t allocMap(int w, int h);\r
 //void initMap(map_t *map);\r
 void walk(map_view_t *pip, player_t *player, word pn);\r
-void panpagemanual(map_view_t *pip,  player_t *player, word pn);\r
+void panPageManual(map_view_t *pip,  player_t *player, word pn);\r
+void panVmemManual(map_view_t *pip, player_t *player, word pn);\r
 void near mapScrollRight(map_view_t *mv, player_t *player, word id, word plid);\r
 void near mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid);\r
 void near mapScrollUp(map_view_t *mv, player_t *player, word id, word plid);\r
index 18df0c7..855ffb0 100755 (executable)
@@ -188,7 +188,7 @@ void main(int argc, char *argv[])
        if(!panswitch){\r
                walk(mv, &player, 0);\r
        }else{\r
-               panpagemanual(mv, &player, 0);\r
+               panPageManual(mv, &player, 0);\r
                //printf("      player[0].q: %d", player[0].q); printf("        player[0].d: %d\n", player[0].d);\r
        }\r
 \r
index 6ada8a7..09aca18 100755 (executable)
@@ -10,8 +10,9 @@
 #include <hw/vga/vga.h>\r
 #include <hw/vga/vrl.h>\r
 \r
+//panPageManual(mv, player, 0);\r
 #define PANKEY0EXE \\r
-                       panpagemanual(mv, player, 0); \\r
+                       panVmemManual(mv, player, 0); \\r
                        if(IN_KeyDown(1+1)){ pan.pn=0; modexShowPage(&(gvar.video.page[pan.pn])); } \\r
                        if(IN_KeyDown(2+1)){ pan.pn=1; modexShowPage(&(gvar.video.page[pan.pn])); } \\r
                        if(IN_KeyDown(3+1)){ pan.pn=2; modexShowPage(&(gvar.video.page[pan.pn])); } \\r