]> 4ch.mooo.com Git - 16.git/commitdiff
renamed: 16/PCX_LIB.ZIP -> 16/PCX_LIB/PCX_LIB.ZIP
authorsparky4 <sparky4@cock.li>
Fri, 25 Jul 2014 14:22:58 +0000 (09:22 -0500)
committersparky4 <sparky4@cock.li>
Fri, 25 Jul 2014 14:22:58 +0000 (09:22 -0500)
modified:   16/Project 16.bfproject
new file:   16/TEST.C
modified:   16/dos_gfx.h
new file:   16/ed.pcx
new file:   16/gfx.pal
renamed:    16/modex16/modex16.c -> 16/lib/MODEX16.C
modified:   16/lib/MODEX16.H
modified:   16/lib/TYPES.H
new file:   16/lib/types.h
new file:   16/makefile
modified:   16/modex16/MODEX16.C
modified:   16/modex16/MODEX16.H
new file:   16/modex16/PALVIEW.EXE
modified:   16/modex16/PCXTEST.C
modified:   16/modex16/PCXTEST.EXE
modified:   16/modex16/TEST.C
modified:   16/modex16/TEST.EXE
new file:   16/modex16/TEST2.EXE
deleted:    16/modex16/modex16.h
modified:   16/modex16/pcxtest.c
deleted:    16/modex16/pcxtest.exe
modified:   16/modex16/test.c
deleted:    16/modex16/test.exe
modified:   16/modex16/test2.c
deleted:    16/modex16/test2.exe

27 files changed:
16/PCX_LIB/PCX_LIB.ZIP [moved from 16/PCX_LIB.ZIP with 100% similarity]
16/Project 16.bfproject
16/TEST.C [new file with mode: 0644]
16/dos_gfx.h
16/ed.pcx [new file with mode: 0644]
16/gfx.pal [new file with mode: 0644]
16/lib/MODEX16.C
16/lib/MODEX16.H
16/lib/TYPES.H
16/lib/types.h [new file with mode: 0644]
16/makefile [new file with mode: 0644]
16/modex16/MODEX16.C
16/modex16/MODEX16.H
16/modex16/PALVIEW.EXE [new file with mode: 0644]
16/modex16/PCXTEST.C
16/modex16/PCXTEST.EXE
16/modex16/TEST.C
16/modex16/TEST.EXE
16/modex16/TEST2.EXE [new file with mode: 0644]
16/modex16/modex16.c [deleted file]
16/modex16/modex16.h [deleted file]
16/modex16/pcxtest.c
16/modex16/pcxtest.exe [deleted file]
16/modex16/test.c
16/modex16/test.exe [deleted file]
16/modex16/test2.c
16/modex16/test2.exe [deleted file]

similarity index 100%
rename from 16/PCX_LIB.ZIP
rename to 16/PCX_LIB/PCX_LIB.ZIP
index 2e220aa5cbc9f39bec2ce8b8cc9bc00d44301c1e..63ad23d17cf762ccf9a2a5359e1510ec6e43c377 100644 (file)
@@ -1,19 +1,19 @@
 c2e.convert_special: 0
 e2c.convert_num: 0
-openfiles: /dos/z/16/16/dos_gfx.cpp:150:0:0:
-openfiles: /dos/z/16/16/dos_gfx.h:156:0:0:
-openfiles: /dos/z/16/16/dos_kb.c:1039:46:0:
-openfiles: /dos/z/16/16/dos_kb.h:23:0:0:
+openfiles: /dos/z/16/16/dos_gfx.cpp:187:0:0:
+openfiles: /dos/z/16/16/dos_gfx.h:116:0:0:
+openfiles: /dos/z/16/16/dos_kb.c:217:0:0:
+openfiles: /dos/z/16/16/dos_kb.h:161:0:0:
 openfiles: /dos/z/16/16/lib/lib_com.cpp:2:0:0:
 openfiles: /dos/z/16/16/lib/lib_com.h:160:0:0:
 openfiles: /dos/z/16/16/scroll.txt:5256:4537:0:
 openfiles: /dos/z/16/16/project16.txt:8063:6091:0:
 openfiles: /dos/z/16/16/16.txt:0:0:0:
-openfiles: /dos/z/16/16/lib/x/MODEX.H:5511:4684:0:
-openfiles: /dos/z/16/16/modex16/PCXTEST.C:1143:421:0:
-openfiles: /dos/z/16/16/lib/MODEX16.C:141:0:0:
-openfiles: /dos/z/16/16/lib/MODEX16.H:444:0:0:
-openfiles: /dos/z/16/16/lib/TYPES.H:277:0:1:
+openfiles: /dos/z/16/16/lib/x/MODEX.H:5511:2798:0:
+openfiles: /dos/z/16/16/modex16/PCXTEST.C:794:497:0:
+openfiles: /dos/z/16/16/lib/MODEX16.C:2334:1895:0:
+openfiles: /dos/z/16/16/lib/MODEX16.H:2926:2348:0:
+openfiles: /dos/z/16/16/TEST.C:335:0:1:
 snr_recursion_level: 0
 convertcolumn_horizontally: 0
 adv_open_matchname: 0
@@ -28,13 +28,15 @@ c2e.convert_iso: 0
 opendir: file:///dos/z/16/16/lib
 wrap_text_default: 0
 bookmarks_filename_mode: 1
-ssearch_text: bitmap_t
-snr_casesens: 0
+ssearch_text: gq
+snr_casesens: 1
 view_blocks: 1
 name: project 16
 replacelist: てすと
 replacelist: \t
 replacelist: putPixel_X
+replacelist: SCREEN_WIDTH
+replacelist: SCREEN_HEIGHT
 fb_show_hidden_f: 0
 editor_tab_width: 4
 show_visible_spacing: 1
@@ -48,11 +50,6 @@ ssearch_regex: 0
 e2c.convert_iso: 0
 ssearch_casesens: 0
 charmap_block: 1
-recent_files: file:///dos/z/4x4_16/tauron/C_SRC/TESTS.CPP
-recent_files: file:///dos/z/4x4_16/tauron/C_SRC/MODES.CPP
-recent_files: file:///dos/z/4x4_16/tauron/C_SRC/FONT1.H
-recent_files: file:///dos/z/4x4_16/tauron/C_SRC/FONT2.H
-recent_files: file:///dos/z/4x4_16/tile.c
 recent_files: file:///dos/z/4x4_16/tile.h
 recent_files: file:///dos/z/16/16/lib_com.cpp
 recent_files: file:///dos/z/16/16/lib_com.h
@@ -75,18 +72,7 @@ recent_files: file:///dos/z/16/16/lib/x/MODEX.DEF
 recent_files: file:///dos/z/4x4_16/modex/DEMO01.PAS
 recent_files: file:///dos/z/16/16/lib/x/MXCR.ASM
 recent_files: file:///dos/z/4x4_16/modex/DEMO07.PAS
-recent_files: file:///dos/z/16/16/modex16/PCXTEST.C
-recent_files: file:///dos/z/16/16/dos_gfx.cpp
-recent_files: file:///dos/z/16/16/dos_gfx.h
-recent_files: file:///dos/z/16/16/dos_kb.c
-recent_files: file:///dos/z/16/16/dos_kb.h
-recent_files: file:///dos/z/16/16/lib/lib_com.cpp
-recent_files: file:///dos/z/16/16/lib/lib_com.h
-recent_files: file:///dos/z/16/16/scroll.txt
-recent_files: file:///dos/z/16/16/project16.txt
-recent_files: file:///dos/z/16/16/16.txt
 recent_files: file:///dos/z/16/16/scrasm/MAIN.ASM
-recent_files: file:///dos/z/16/16/lib/x/MODEX.H
 recent_files: file:///dos/z/16/16/lib/x/MXBB.ASM
 recent_files: file:///dos/z/16/src/lib/dos_gfx.h
 recent_files: file:///dos/z/16/16/lib/intro/lib.c
@@ -95,9 +81,25 @@ recent_files: file:///dos/z/16/16/modex16/MODEX16.H
 recent_files: file:///dos/z/16/16/modex16/MODEX16.C
 recent_files: file:///dos/z/4x4_16/w_modex/MODEX.CPP
 recent_files: file:///dos/z/16/16/TYPES.H
-recent_files: file:///dos/z/16/16/lib/MODEX16.H
 recent_files: file:///dos/z/16/16/lib/TYPES.H
+recent_files: file:///dos/z/16/16/dos_gfx.cpp
+recent_files: file:///dos/z/16/16/dos_gfx.h
+recent_files: file:///dos/z/16/16/lib/lib_com.h
+recent_files: file:///dos/z/16/16/dos_kb.c
+recent_files: file:///dos/z/16/16/dos_kb.h
+recent_files: file:///dos/z/16/16/lib/lib_com.cpp
+recent_files: file:///dos/z/16/16/scroll.txt
 recent_files: file:///dos/z/16/16/lib/MODEX16.C
+recent_files: file:///dos/z/16/16/project16.txt
+recent_files: file:///dos/z/16/16/lib/MODEX16.H
+recent_files: file:///dos/z/16/16/lib/x/MODEX.H
+recent_files: file:///dos/z/16/16/16.txt
+recent_files: file:///dos/z/16/16/modex16/PCXTEST.C
+recent_files: file:///dos/z/16/16/test.c
+recent_files: file:///dos/z/16/16/TEST.C
+recent_files: file:///dos/z/16/16/MODEX16.H
+recent_files: file:///dos/z/16/16/MODEX16.C
+recent_files: file:///dos/z/16/16/lib/types.h
 snr_replacetype: 0
 savedir: file:///dos/z/16/16/lib
 spell_check_default: 1
@@ -109,21 +111,21 @@ snr_escape_chars: 0
 htmlbar_view: 0
 spell_lang: en
 ssearch_dotmatchall: 0
-searchlist: main
-searchlist: word
-searchlist: syte
-searchlist: unsigned short
-searchlist: syte
-searchlist: unsigned int
-searchlist: #include "src\\lib\\lib_com.h"
-searchlist: word
-searchlist: sy
-searchlist: word
+searchlist: modexen
+searchlist: modexClearRegion(page_t *page, (SW-palq)+palx+32, paly+32, TILEWH, TILEWH, palcol);
+searchlist: mx
+searchlist: sw
+searchlist: SW
+searchlist: SH
+searchlist: QUADWH
+searchlist: pdump
+searchlist: #include "modex16.h"\r\n#include <stdio.h>\r\n\r\nword far* clock= (word far*) 0x046C; /* 18.2hz clock */\r\n\r\nvoid main() {\r\n#include "modex16.h"\r\n#include <stdio.h>\r\n\r\nword far* clock= (word far*) 0x046C; /* 18.2hz clock */\r\n\r\nvoid main() {\r\n
+searchlist: extern
 searchlist: VGA
-searchlist: Page
-searchlist: modexll
-searchlist: load
-searchlist: bitmap_t
+searchlist: vga
+searchlist: clock
+searchlist: setvideo
+searchlist: gq
 autocomplete: 1
 outputb_show_all_output: 0
 bookmarks_show_mode: 0
@@ -157,7 +159,7 @@ c2e.convert_xml: 1
 editor_indent_wspaces: 0
 view_cline: 0
 snr_type: 0
-snr_scope: 3
+snr_scope: 0
 bmarksearchmode: 0
 view_main_toolbar: 1
 e2c.convert_symbol: 0
diff --git a/16/TEST.C b/16/TEST.C
new file mode 100644 (file)
index 0000000..86cbf42
--- /dev/null
+++ b/16/TEST.C
@@ -0,0 +1,334 @@
+#include "lib\modex16.h"\r
+#include <stdio.h>
+
+#include <stdlib.h>\r
+//#include <iostream.h>
+\r
+word far* clock= (word far*) 0x046C; /* 18.2hz clock */\r
+
+//color てすと\r
+short gq = LGQ;
+
+page_t page, page2;
+
+//てすと\r
+short bakax = 0, bakay = 0;\r
+sword xx = 0, yy = 0, sx = 0, sy = 0;\r
+byte coor;\r
+
+//byte *vga = (byte *) MK_FP(0xA000, 0);
+\r
+/*\r
+ * Comment out the following #define if you don't want the testing main()\r
+ * to be included.\r
+ */\r
+//#define TILE
+
+\r
+/*void pdump(){\r
+       int mult=(QUADWH)/2;\r
+       int palq=(mult)*16;\r
+       int palcol=0;\r
+       for(int paly=0; paly<palq; paly+=mult){\r
+               for(int palx=0; palx<palq; palx+=mult){\r
+                               //mxFillBox((SCREEN_WIDTH-palq)+palx+32, paly+32, TILEWH, TILEWH, palcol, OP_SET);
+                               modexClearRegion(page_t *page, (SCREEN_WIDTH-palq)+palx+32, paly+32, TILEWH, TILEWH, palcol);\r
+                       palcol++;\r
+               }\r
+       }\r
+}\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//                                                                                                                                              //\r
+// cls() - This clears the screen to the specified color, on the VGA or on //\r
+//              the Virtual screen.                                                                                     //\r
+//                                                                                                                                              //\r
+/////////////////////////////////////////////////////////////////////////////\r
+void cls(byte color, byte *Where){\r
+               _fmemset(Where, color, VW*(VH*2));\r
+}\r
+\r
+//color てすと\r
+short colortest(){\r
+               if(gq < NUM_COLORS){\r
+                               cls(gq, vga);\r
+                               gq++;\r
+               }else gq = 0;\r
+               return gq;\r
+}\r
+\r
+//color てすと\r
+short colorz(){\r
+               if(gq <= HGQ){\r
+//----           cls(gq, vaddr);\r
+                               cls(gq, vga);\r
+                               gq++;\r
+               }else gq = LGQ;\r
+               return gq;\r
+}\r
+\r
+//slow spectrum down\r
+void ssd(short svq){\r
+               if(sy < SCREEN_HEIGHT+1){\r
+                               if(sx < SCREEN_WIDTH+1){\r
+                                               //plotpixel(xx, yy, coor, vga);\r
+                                               //ppf(sx, sy, coor, vga);\r
+                                               //mxPutPixel(sx, sy, coor);
+                                               modexClearRegion(page_t *page, sx, sy, 1, 1, coor);
+                                               //printf("%d %d %d %d¥n", sx, sy, svq, coor);\r
+                                               sx++;\r
+                               }else sx = 0;\r
+                               if(sx == SCREEN_WIDTH){\r
+                                               sy++;\r
+                                               if(svq == 7) coor++;\r
+                                               if(sy == SCREEN_HEIGHT && svq == 8) coor = rand()%NUM_COLORS;\r
+                               }\r
+               }else sy = 0;\r
+}*/\r
+\r
+/*-----------ding-------------*/\r
+short ding(int q){\r
+
+               page=modexDefaultPage();\r
+               page2 = modexNextPage(&page);\r
+               page.width += 32;\r
+               page.height += 32;
+               short d3y;\r
+\r
+//++++  if(q <= 4 && q!=2 && gq == BONK-1) coor = rand()%HGQ;\r
+               if((q == 2\r
+               ||q==4\r
+               ||q==16\r
+               ) && gq == BONK){\r
+                                               if(coor < HGQ && coor < LGQ) coor = LGQ;\r
+                                               if(coor < HGQ){\r
+                                                               coor++;\r
+                               }else{ coor = LGQ;\r
+                                               bakax = rand()%3; bakay = rand()%3;\r
+                               }\r
+               }\r
+\r
+//             if(q==8){ colorz(); return gq; /*mxOutText(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "bakapi");*/ }else\r
+//             if(q==10){ ssd(q); /*printf("%d¥n", coor);*/ }else\r
+//             if(q==5){ colortest(); return gq; }else\r
+//             if(q==11){ colorz(); delay(100); return gq; }\r
+/*             if(q==6){\r
+                               coor = rand()%NUM_COLORS;\r
+                               cls(coor, vga);\r
+                               //updatevbuff();\r
+               }\r
+\r
+               /f(q==7||q==9){\r
+                               if(gq <= HGQ){\r
+                                               if(q == 7) ssd(q);\r
+                                               if(q == 9){ ssd(q); coor++; }\r
+                                               gq++;\r
+                               }else gq = LGQ;\r
+               }*/\r
+               if((q<5 && gq<BONK) || (q==16 && gq<BONK)){ // the number variable make the colors more noticable\r
+                               if(q==1){\r
+                                               if(xx==VW){bakax=0;}\r
+                                               if(xx==0){bakax=1;}\r
+                                               if(yy==VH){bakay=0;}\r
+                                               if(yy==0){bakay=1;}\r
+                               }else if(q==3){\r
+                                               if(xx!=VW||yy!=VH){\r
+                                                               if(xx==0){bakax=1;bakay=-1;d3y=1;}\r
+                                                               if(yy==0){bakax=1;bakay=0;d3y=1;}\r
+                                                               if(xx==VW){bakax=-1;bakay=-1;d3y=1;}\r
+                                                               if(yy==VH){bakax=1;bakay=0;d3y=1;}\r
+                                               }else if(xx==VW&&yy==VH) xx=yy=0;\r
+                               }\r
+                               if(q==3){\r
+                                               if(d3y){\r
+                                                               if(bakay<0){\r
+                                                                               yy--;\r
+                                                                               d3y--;\r
+                                                               }else\r
+                                                               if(bakay>0){\r
+                                                                               yy++;\r
+                                                                               d3y--;\r
+                                                               }\r
+                                               }\r
+                                               if(bakax<0){\r
+                                                               xx--;\r
+                                               }else\r
+                                               if(bakax>0){\r
+                                                               xx++;\r
+                                               }\r
+                               }else{\r
+                                               if(q==16)\r
+                                               {\r
+                                                               if(!bakax){\r
+                                                                       xx--;\r
+                                                               }else if(bakax>0){\r
+                                                                       xx++;\r
+                                                               }\r
+                                                               if(!bakay){\r
+                                                                       yy--;\r
+                                                               }else if(bakay>0){\r
+                                                                       yy++;\r
+                                                               }\r
+                                               }else{\r
+                                                               if(!bakax){\r
+                                                                       #ifdef TILE\r
+                                                                       xx-=TILEWH;\r
+                                                                       #else\r
+                                                                       xx--;\r
+                                                                       #endif\r
+                                                               }else if(bakax>1){\r
+                                                                       #ifdef TILE\r
+                                                                       xx+=TILEWH;\r
+                                                                       #else\r
+                                                                       xx++;\r
+                                                                       #endif\r
+                                                               }\r
+                                                               if(!bakay){\r
+                                                                       #ifdef TILE\r
+                                                                       yy-=TILEWH;\r
+                                                                       #else\r
+                                                                       yy--;\r
+                                                                       #endif\r
+                                                               }else if(bakay>1){\r
+                                                                       #ifdef TILE\r
+                                                                       yy+=TILEWH;\r
+                                                                       #else\r
+                                                                       yy++;\r
+                                                                       #endif\r
+                                                               }\r
+                                               }\r
+                               }\r
+                               // fixer\r
+                               if(q!=16){\r
+                                       #ifdef TILE\r
+                                               if(xx<0) xx=(VW-TILEWH);\r
+                                               if(yy<0) yy=(VH-TILEWH);\r
+                                               if(xx>(VW-TILEWH)) xx=0;\r
+                                               if(yy>(VH-TILEWH)/*+(TILEWH*BUFFMX)*/) yy=0;\r
+                                       #else\r
+                                               if(xx<0) xx=VW;\r
+                                               if(yy<0) yy=VH;\r
+                                               if(xx>VW) xx=0;\r
+                                               if(yy>VH) yy=0;\r
+                                       #endif\r
+                               }\r
+\r
+//interesting effects\r
+                               if(q==16)\r
+                               {\r
+                               short tx=0,ty=0;\r
+                               tx+=xx+16;\r
+                               ty+=yy+16;\r
+                               //mxPutPixel(tx, ty, coor);
+                               modexClearRegion(page_t *page, tx, ty, 1, 1, coor);
+                               //printf("%d %d %d %d %d %d¥n", xx, yy, tx, ty, TILEWH);\r
+\r
+                               // plot the pixel\r
+                               }else{\r
+                                       #ifdef TILE\r
+                                       //mxFillBox(xx, yy, TILEWH, TILEWH, coor, OP_SET);
+                                       modexClearRegion(page_t *page, xx, yy, TILEWH, TILEWH, coor);\r
+                                       #else\r
+                                       //mxPutPixel(xx, yy, coor);
+                                       modexClearRegion(page_t *page, xx, yy, 1, 1, coor);\r
+                                       #endif\r
+                               } \r
+\r
+                               if(q==2)\r
+                               #ifdef TILE\r
+                                       //mxFillBox((rand()*TILEWH)%VW, (rand()*TILEWH)%(VH), TILEWH, TILEWH, 0, OP_SET);
+                                       modexClearRegion(page_t *page, (rand()*TILEWH)%VW, (rand()*TILEWH)%(VH), TILEWH, TILEWH, 0);\r
+                               #else\r
+                                       //mxPutPixel(rand()%VW, rand()%(VH), 0);
+                                       modexClearRegion(page_t *page, rand()%VW, rand()%(VH), 1, 1, 0);\r
+                               #endif\r
+                               if(q==16) //mxPutPixel(rand()%VW, rand()%(VH), 0);
+                                       modexClearRegion(page_t *page, rand()%VW, rand()%(VH), 1, 1, 0);\r
+                               if(q==2||q==4||q==16){ bakax = rand()%3; bakay = rand()%3; }  //random 3 switch\r
+                               gq++;\r
+//if(xx<0||xx>320||yy<0||yy>(SCREEN_HEIGHT*3))\r
+//       printf("%d %d %d %d %d¥n", xx, yy, coor, bakax, bakay);\r
+               }else gq = LGQ;\r
+               return gq;\r
+}\r
+\r
+void main() {\r
+    int i, j;\r
+    bitmap_t bmp;\r
+    word start, end;
+       //page_t page, page2;\r
+    float elapsed;\r
+    byte *pal, *pal2=NULL;\r
+\r
+       /* load pcx file */\r
+       bmp = modexLoadPcx("ed.pcx");\r
+\r
+    /* load our palette */\r
+    modexLoadPalFile("gfx.pal", &pal2);\r
+\r
+    /* save the palette */\r
+    pal  = modexNewPal();\r
+    modexPalSave(pal);\r
+    modexFadeOff(1, pal);\r
+    modexPalBlack();\r
+\r
+    setvideo(1);\r
+    modexPalBlack();\r
+\r
+    /* set up the page, but with 16 pixels on all borders in offscreen mem */\r
+    page=modexDefaultPage();\r
+    page2 = modexNextPage(&page);\r
+    page.width += 32;\r
+    page.height += 32;\r
+\r
+\r
+    /* fill the page with one color, but with a black border */\r
+    modexShowPage(&page2);\r
+    modexClearRegion(&page, 16, 16, SCREEN_WIDTH, SCREEN_HEIGHT, 128);\r
+    modexClearRegion(&page, 32, 32, SCREEN_WIDTH-32, SCREEN_HEIGHT-32, 42);\r
+    modexClearRegion(&page, 48, 48, SCREEN_WIDTH-64, SCREEN_HEIGHT-64, 128);\r
+    modexShowPage(&page);\r
+\r
+    modexDrawSprite(&page, 20, 20, &bmp);\r
+    //modexDrawBmp(&page, xb, yb, &bmp);\r
+\r
+    /* fade in */\r
+    modexFadeOn(1, pal2);\r
+\r
+\r
+    start = *clock;\r
+    //for(i=0; i<5; i++) {\r
+    while (!kbhit()){  /* Wait for a keystroke                         */\r
+       /* go right */\r
+       for(j=0; j<32; j++) {\r
+           page.dx++;\r
+           modexShowPage(&page);\r
+       }\r
+       /* go left */\r
+       for(j=0; j<32; j++) {\r
+           page.dx--;\r
+           modexShowPage(&page);\r
+       }\r
+       /* go up */\r
+       for(j=0; j<32; j++) {\r
+           page.dy++;\r
+           modexShowPage(&page);\r
+       }\r
+\r
+       /* go down */\r
+       for(j=0; j<32; j++) {\r
+           page.dy--;\r
+           modexShowPage(&page);\r
+       }\r
+    }\r
+\r
+    (void) getch();   /* Clear the keyboard buffer                    */\r
+    end = *clock;\r
+\r
+    /* fade back to text mode */\r
+    modexFadeOff(1, pal2);\r
+    modexPalBlack();\r
+    setvideo(0);\r
+    modexPalBlack();\r
+    modexFadeOn(1, pal);\r
+}\r
index 6c59aa787b9a6cdab2a2a58087037dd7d67cced0..cb47dc91dc18abeeb9479cee67a650c225495384 100644 (file)
@@ -4,7 +4,7 @@
 #include <stdlib.h>\r
 #include "lib\lib_com.h"
 #include "lib\x\modex.h"
-//#include "lib\modex16.h" //____\r
+#include "lib\modex16.h" //____\r
 \r
 #define NUM_COLORS     256 // number of colors in vga mode\r
 //static lgq=NUM_COLORS/(1/8)\r
diff --git a/16/ed.pcx b/16/ed.pcx
new file mode 100644 (file)
index 0000000..41e5631
Binary files /dev/null and b/16/ed.pcx differ
diff --git a/16/gfx.pal b/16/gfx.pal
new file mode 100644 (file)
index 0000000..e98ae60
Binary files /dev/null and b/16/gfx.pal differ
index 3bdc3fb75628727a8d9514e0e90e2f3f7a01d2ee..d8b646e6feb945a67057e36229e7043889404d7a 100644 (file)
@@ -92,37 +92,102 @@ modexEnter() {
        ptr[i] = 0x0000;\r
     }\r
 }\r
+
+int old_mode;\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//                                                                         //\r
+// setvideo() - This function Manages the video modes                                    //\r
+//                                                                         //\r
+/////////////////////////////////////////////////////////////////////////////\r
+void setvideo(/*byte mode, */short vq){\r
+               union REGS in, out;\r
+\r
+               if(!vq){ // deinit the video\r
+                               // change to the video mode we were in before we switched to mode 13h\r
+                               in.h.ah = 0x00;\r
+                               in.h.al = old_mode;\r
+                               int86(0x10, &in, &out);\r
+\r
+               }else if(vq==1){ // init the video\r
+                               // get old video mode\r
+                               in.h.ah = 0xf;\r
+                               int86(0x10, &in, &out);\r
+                               old_mode = out.h.al;\r
+                               // enter mode
+                               modexEnter();\r
+               }\r
+}
+\r
+page_t\r
+modexDefaultPage() {\r
+    page_t page;\r
+\r
+    /* default page values */\r
+    page.data = VGA;\r
+    page.dx = 0;\r
+    page.dy = 0;\r
+    page.width = SCREEN_WIDTH;\r
+    page.height = SCREEN_HEIGHT;\r
+\r
+    return page;\r
+}\r
 \r
+/* returns the next page in contiguous memory\r
+ * the next page will be the same size as p, by default\r
+ */\r
+page_t\r
+modexNextPage(page_t *p) {\r
+    page_t result;\r
 \r
-void\r
-modexLeave() {\r
-    /* TODO restore original mode and palette */\r
-    vgaSetMode(TEXT_MODE);\r
+    result.data = p->data + (p->width/4)*p->height;  /* compute the offset */\r
+    result.dx = 0;\r
+    result.dy = 0;\r
+    result.width = p->width;\r
+    result.height = p->height;\r
+\r
+    return result;\r
 }\r
 \r
 \r
 void\r
-modexShowPage(page_t page) {\r
+modexShowPage(page_t *page) {\r
     word high_address;\r
     word low_address;\r
+    word 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
-    high_address = HIGH_ADDRESS | ((word)(page) & 0xff00);\r
-    low_address  = LOW_ADDRESS  | ((word)(page) << 8);\r
+    /* calculate crtcOffset according to virtual width */\r
+    crtcOffset = page->width >> 3;\r
 \r
-    /* wait for appropriate timing */\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
 \r
 void\r
 modexPanPage(page_t *page, int dx, int dy) {\r
-    /* TODO figure out how the $@#! you do horizontal panning */\r
-    *page += dy * SCREEN_WIDTH;\r
+    page->dx = dx;\r
+    page->dy = dy;\r
 }\r
 \r
 \r
@@ -134,45 +199,219 @@ modexSelectPlane(byte plane) {
 \r
 \r
 void\r
-modexClearRegion(page_t page, int x, int y, int w, int h, byte color) {\r
-    byte plane;\r
-    word endx = x + w;\r
-    word endy = y + h;\r
-    word dx, dy;\r
-\r
-    /* TODO Make this fast.  It's SLOOOOOOW */\r
-    for(plane=0; plane < 4; plane++) {\r
-       modexSelectPlane(PLANE(plane+x));\r
-       for(dx = x; dx < endx; dx+=4) {\r
-           for(dy=y; dy<endy; dy++) {\r
-               page[PAGE_OFFSET(dx, dy)] = color;\r
-           }\r
-       }\r
+modexClearRegion(page_t *page, int x, int y, int w, int h, byte  color) {\r
+    word pageOff = (word) page->data;\r
+    word xoff=x/4;       /* xoffset that begins each row */\r
+    word scanCount=w/4;  /* number of iterations per row (excluding right clip)*/\r
+    word poffset = pageOff + y*(page->width/4) + xoff; /* starting offset */\r
+    word nextRow = page->width/4-scanCount-1;  /* loc of next row */\r
+    byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08};  /* clips for rectangles not on 4s */\r
+    byte rclip[] = {0x00, 0x01, 0x03, 0x07};\r
+    byte left = lclip[x&0x03];\r
+    byte right = rclip[(x+w)&0x03];\r
+\r
+    /* handle the case which requires an extra group */\r
+    if((x & 0x03) && !((x+w) & 0x03)) {\r
+      right=0x0f;\r
+    }\r
+\r
+    __asm {\r
+               MOV AX, SCREEN_SEG      ; go to the VGA memory\r
+               MOV ES, AX\r
+               MOV DI, poffset         ; go to the first pixel\r
+               MOV DX, SC_INDEX        ; point to the map mask\r
+               MOV AL, MAP_MASK\r
+               OUT DX, AL\r
+               INC DX\r
+               MOV AL, color           ; get ready to write colors\r
+       SCAN_START:\r
+               MOV CX, scanCount       ; count the line\r
+               MOV BL, AL              ; remember color\r
+               MOV AL, left            ; do the left clip\r
+               OUT DX, AL              ; set the left clip\r
+               MOV AL, BL              ; restore color\r
+               STOSB                   ; write the color\r
+               DEC CX\r
+               JZ SCAN_DONE            ; handle 1 group stuff\r
+\r
+               ;-- write the main body of the scanline\r
+               MOV BL, AL              ; remember color\r
+               MOV AL, 0x0f            ; write to all pixels\r
+               OUT DX, AL\r
+               MOV AL, BL              ; restore color\r
+               REP STOSB               ; write the color\r
+       SCAN_DONE:\r
+               MOV BL, AL              ; remeber color\r
+               MOV AL, right\r
+               OUT DX, AL              ; do the right clip\r
+               MOV AL, BL              ; restore color\r
+               STOSB                   ; write pixel\r
+               ADD DI, nextRow         ; go to the next row\r
+               DEC h\r
+               JNZ SCAN_START\r
     }\r
 }\r
 \r
 \r
 void\r
-modexDrawBmp(page_t page, int x, int y, bitmap_t *bmp, byte sprite) {\r
-    byte plane;\r
-    word px, py;\r
-    word offset;\r
+modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp) {\r
+    /* draw the region (the entire freakin bitmap) */\r
+    modexDrawBmpRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp);\r
+}\r
 \r
-    /* TODO Make this fast.  It's SLOOOOOOW */\r
-    for(plane=0; plane < 4; plane++) {\r
-       modexSelectPlane(PLANE(plane+x));\r
-       for(px = plane; px < bmp->width; px+=4) {\r
-           offset=px;\r
-           for(py=0; py<bmp->height; py++) {
-               if(!sprite || bmp->data[offset])\r
-                 page[PAGE_OFFSET(x+px, y+py)] = bmp->data[offset];\r
-               offset+=bmp->width;\r
-           }\r
-       }\r
+\r
+void\r
+modexDrawBmpRegion(page_t *page, int x, int y,\r
+                   int rx, int ry, int rw, int rh, bitmap_t *bmp) {\r
+    word poffset = (word) page->data  + y*(page->width/4) + x/4;\r
+    byte *data = bmp->data;\r
+    word bmpOffset = (word) data + ry * bmp->width + rx;\r
+    word width = rw;\r
+    word height = rh;\r
+    byte plane = 1 << ((byte) x & 0x03);\r
+    word scanCount = width/4 + (width%4 ? 1 :0);\r
+    word nextPageRow = page->width/4 - scanCount;\r
+    word nextBmpRow = (word) bmp->width - width;\r
+    word rowCounter;\r
+    byte planeCounter = 4;\r
+\r
+    __asm {\r
+               MOV AX, SCREEN_SEG      ; go to the VGA memory\r
+               MOV ES, AX\r
+\r
+               MOV DX, SC_INDEX        ; point at the map mask register\r
+               MOV AL, MAP_MASK        ;\r
+               OUT DX, AL              ;\r
+\r
+       PLANE_LOOP:\r
+               MOV DX, SC_DATA         ; select the current plane\r
+               MOV AL, plane           ;\r
+               OUT DX, AL              ;\r
+\r
+               ;-- begin plane painting\r
+               MOV AX, height          ; start the row counter\r
+               MOV rowCounter, AX      ; \r
+               MOV DI, poffset         ; go to the first pixel\r
+               MOV SI, bmpOffset       ; go to the bmp pixel\r
+       ROW_LOOP:\r
+               MOV CX, width           ; count the columns\r
+       SCAN_LOOP:\r
+               MOVSB                   ; copy the pixel\r
+               SUB CX, 3               ; we skip the next 3\r
+               ADD SI, 3               ; skip the bmp pixels\r
+               LOOP SCAN_LOOP          ; finish the scan\r
+\r
+               MOV AX, nextPageRow\r
+               ADD DI, AX              ; go to the next row on screen\r
+               MOV AX, nextBmpRow\r
+               ADD SI, AX              ; go to the next row on bmp\r
+\r
+               DEC rowCounter\r
+               JNZ ROW_LOOP            ; do all the rows\r
+               ;-- end plane painting\r
+\r
+               MOV AL, plane           ; advance to the next plane\r
+               SHL AL, 1               ;\r
+               AND AL, 0x0f            ; mask the plane properly\r
+               MOV plane, AL           ; store the plane\r
+\r
+               INC bmpOffset           ; start bmp at the right spot\r
+\r
+               DEC planeCounter\r
+               JNZ PLANE_LOOP          ; do all 4 planes\r
     }\r
 }\r
 \r
 \r
+void\r
+modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp) {\r
+    /* draw the whole sprite */\r
+    modexDrawSpriteRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp);\r
+}\r
+\r
+void\r
+modexDrawSpriteRegion(page_t *page, int x, int y,\r
+                     int rx, int ry, int rw, int rh, bitmap_t *bmp) {\r
+    word poffset = (word)page->data + y*(page->width/4) + x/4;\r
+    byte *data = bmp->data;\r
+    word bmpOffset = (word) data + ry * bmp->width + rx;\r
+    word width = rw;\r
+    word height = rh;\r
+    byte plane = 1 << ((byte) x & 0x03);\r
+    word scanCount = width/4 + (width%4 ? 1 :0);\r
+    word nextPageRow = page->width/4 - scanCount;\r
+    word nextBmpRow = (word) bmp->width - width;\r
+    word rowCounter;\r
+    byte planeCounter = 4;\r
+\r
+    __asm {\r
+               MOV AX, SCREEN_SEG      ; go to the VGA memory\r
+               MOV ES, AX\r
+\r
+               MOV DX, SC_INDEX        ; point at the map mask register\r
+               MOV AL, MAP_MASK        ;\r
+               OUT DX, AL              ;\r
+\r
+       PLANE_LOOP:\r
+               MOV DX, SC_DATA         ; select the current plane\r
+               MOV AL, plane           ;\r
+               OUT DX, AL              ;\r
+\r
+               ;-- begin plane painting\r
+               MOV AX, height          ; start the row counter\r
+               MOV rowCounter, AX      ; \r
+               MOV DI, poffset         ; go to the first pixel\r
+               MOV SI, bmpOffset       ; go to the bmp pixel\r
+       ROW_LOOP:\r
+               MOV CX, width           ; count the columns\r
+       SCAN_LOOP:\r
+               LODSB\r
+               DEC SI\r
+               CMP AL, 0\r
+               JNE DRAW_PIXEL          ; draw non-zero pixels\r
+\r
+               INC DI                  ; skip the transparent pixel\r
+               ADD SI, 1\r
+               JMP NEXT_PIXEL\r
+       DRAW_PIXEL:\r
+               MOVSB                   ; copy the pixel\r
+       NEXT_PIXEL:\r
+               SUB CX, 3               ; we skip the next 3\r
+               ADD SI, 3               ; skip the bmp pixels\r
+               LOOP SCAN_LOOP          ; finish the scan\r
+\r
+               MOV AX, nextPageRow\r
+               ADD DI, AX              ; go to the next row on screen\r
+               MOV AX, nextBmpRow\r
+               ADD SI, AX              ; go to the next row on bmp\r
+\r
+               DEC rowCounter\r
+               JNZ ROW_LOOP            ; do all the rows\r
+               ;-- end plane painting\r
+\r
+               MOV AL, plane           ; advance to the next plane\r
+               SHL AL, 1               ;\r
+               AND AL, 0x0f            ; mask the plane properly\r
+               MOV plane, AL           ; store the plane\r
+\r
+               INC bmpOffset           ; start bmp at the right spot\r
+\r
+               DEC planeCounter\r
+               JNZ PLANE_LOOP          ; do all 4 planes\r
+    }\r
+}\r
+\r
+\r
+void\r
+modexCopyPageRegion(page_t *dest, page_t src,\r
+                   word sx, word sy,\r
+                   word dx, word dy,\r
+                   word width, word height)\r
+{\r
+    /* todo */\r
+}\r
+\r
+\r
 /* fade and flash */\r
 void\r
 modexFadeOn(word fade, byte *palette) {\r
index 880f2c8bd4654fbf5916bf71e08f9b6c1695064d..2adc5c433fe5ed1b6b3f153650d5b447d3cd400d 100644 (file)
@@ -4,12 +4,11 @@
 #ifndef MODEX16_H\r
 #define MODEX16_H\r
 #include <conio.h>\r
-#include "lib\types.h"\r
-\r
+#include "lib\types.h"
+
 /* -========================== Types & Macros ==========================- */\r
 #define PAGE_OFFSET(x,y) (((y)<<6)+((y)<<4)+((x)>>2))\r
 #define PLANE(x) (1<< (x&3))\r
-typedef byte far* page_t;\r
 #define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02)\r
 typedef struct {\r
     byte *data;\r
@@ -18,15 +17,28 @@ typedef struct {
     byte *palette;\r
 } bitmap_t;\r
 \r
+typedef struct {\r
+    byte far* data;    /* the data for the page */\r
+    word dx;           /* col we are viewing on the virtual screen */\r
+    word dy;           /* row we are viewing on the virtual screen */\r
+    word width;                /* virtual width of the page */\r
+    word height;       /* virtual height of the page */\r
+} page_t;\r
+\r
 /* -============================ Functions =============================- */\r
 /* mode switching, page, and plane functions */\r
-void modexEnter();\r
-void modexLeave();\r
-void modexShowPage(page_t page);\r
+void modexEnter();
+void setvideo(/*byte mode, */short vq);\r
+page_t modexDefaultPage();\r
+page_t modexNextPage(page_t *p);\r
+void modexShowPage(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
-void modexDrawBmp(page_t page, int x, int y, bitmap_t *bmp, byte sprite);\r
+void modexClearRegion(page_t *page, int x, int y, int w, int h, byte color);\r
+void modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp);\r
+void modexDrawBmpRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp);\r
+void modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp);\r
+void modexDrawSpriteRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp);\r
 \r
 /* Palette fade and flash effects */\r
 void modexFadeOn(word fade, byte *palette);\r
@@ -49,10 +61,11 @@ void modexPalUpdate(byte *p);
 void modexWaitBorder();\r
 \r
 /* bitmap functions */\r
-bitmap_t modexLoadPcx(char *filename);\r
+bitmap_t modexLoadPcx(char *filename);
 \r
 /* -======================= Constants & Vars ==========================- */\r
 extern byte far*  VGA;  /* The VGA Memory */\r
+#define SCREEN_SEG             0xa000\r
 #define VIDEO_INT              0x10\r
 #define SET_MODE               0x00\r
 #define VGA_256_COLOR_MODE     0x13\r
@@ -61,6 +74,7 @@ extern byte far*  VGA;  /* The VGA Memory */
 #define SCREEN_HEIGHT          240\r
 #define PAGE_SIZE              (word)(SCREEN_WIDTH/4 * SCREEN_HEIGHT)\r
 \r
+#define AC_INDEX               0x03c0\r
 #define SC_INDEX               0x03c4\r
 #define SC_DATA                        0x03c5\r
 #define CRTC_INDEX             0x03d4\r
@@ -75,5 +89,14 @@ extern byte far*  VGA;  /* The VGA Memory */
 #define PAL_READ_REG            0x03C7   /* Color register, read address */\r
 #define PAL_WRITE_REG           0x03C8   /* Color register, write address */\r
 #define PAL_DATA_REG            0x03C9   /* Color register, data port */\r
-#define PAL_SIZE                (256 * 3)\r
+#define PAL_SIZE                (256 * 3)
+
+#define NUM_COLORS     256 // number of colors in vga mode\r
+#define BONK       400\r
+#define LGQ         32\r
+#define HGQ         55\r
+#define TILEWH                 16
+#define QUADWH                 TILEWH/2
+#define VW     (SCREEN_WIDTH+32)\r
+#define VH     (SCREEN_HEIGHT+32)\r
 #endif\r
index f6443b1b02496be26e82c2ead5c655991861308c..039653f2e8cb2b934d62b6f57672e4db493cbf4f 100644 (file)
@@ -8,4 +8,4 @@ typedef unsigned short word;
 typedef unsigned long  dword;\r
 typedef signed char sbyte;\r
 typedef signed short sword;\r
-typedef signed long sdword;
+typedef signed long sdword;\r
diff --git a/16/lib/types.h b/16/lib/types.h
new file mode 100644 (file)
index 0000000..039653f
--- /dev/null
@@ -0,0 +1,11 @@
+/*\r
+ * Just some handy typedefs that make it easier to think about the low\r
+ * level code\r
+ */\r
+\r
+typedef unsigned char byte;\r
+typedef unsigned short word;\r
+typedef unsigned long  dword;\r
+typedef signed char sbyte;\r
+typedef signed short sword;\r
+typedef signed long sdword;\r
diff --git a/16/makefile b/16/makefile
new file mode 100644 (file)
index 0000000..e6469f2
--- /dev/null
@@ -0,0 +1,15 @@
+FLAGS=-0 -d3\r
+all: test.exe\r
+\r
+test.exe: test.obj modex16.obj\r
+       wcl $(FLAGS) test.obj modex16.obj\r
+       \r
+test.obj: test.c lib\modex16.h\r
+       wcl $(FLAGS) -c test.c\r
+       \r
+modex16.obj: lib\modex16.h lib\modex16.c\r
+       wcl $(FLAGS) -c lib\modex16.c\r
+       \r
+clean: \r
+       del *.obj\r
+       del *.exe\r
index bdc089e524a5330fb7bebff27fac01ff86238771..f6ead33e372f8713baa601ad43a5e90cdbfa1495 100644 (file)
@@ -92,14 +92,32 @@ modexEnter() {
        ptr[i] = 0x0000;\r
     }\r
 }\r
-\r
-\r
-void\r
-modexLeave() {\r
-    /* TODO restore original mode and palette */\r
-    vgaSetMode(TEXT_MODE);\r
-}\r
-\r
+
+int old_mode;\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//                                                                         //\r
+// setvideo() - This function Manages the video modes                                    //\r
+//                                                                         //\r
+/////////////////////////////////////////////////////////////////////////////\r
+void setvideo(/*byte mode, */short vq){\r
+               union REGS in, out;\r
+\r
+               if(!vq){ // deinit the video\r
+                               // change to the video mode we were in before we switched to mode 13h\r
+                               in.h.ah = 0x00;\r
+                               in.h.al = old_mode;\r
+                               int86(0x10, &in, &out);\r
+\r
+               }else if(vq==1){ // init the video\r
+                               // get old video mode\r
+                               in.h.ah = 0xf;\r
+                               int86(0x10, &in, &out);\r
+                               old_mode = out.h.al;\r
+                               // enter mode
+                               modexEnter();\r
+               }\r
+}
 \r
 page_t\r
 modexDefaultPage() {\r
index 81960dd8ab4cb979e6685b29e4f00aa5ab503298..cde4cd2f7dcbdf151013ba1a1b1e78f840957f47 100644 (file)
@@ -4,8 +4,8 @@
 #ifndef MODEX16_H\r
 #define MODEX16_H\r
 #include <conio.h>\r
-#include "types.h"\r
-\r
+#include "types.h"
+
 /* -========================== Types & Macros ==========================- */\r
 #define PAGE_OFFSET(x,y) (((y)<<6)+((y)<<4)+((x)>>2))\r
 #define PLANE(x) (1<< (x&3))\r
@@ -27,8 +27,8 @@ typedef struct {
 \r
 /* -============================ Functions =============================- */\r
 /* mode switching, page, and plane functions */\r
-void modexEnter();\r
-void modexLeave();\r
+void modexEnter();
+void setvideo(/*byte mode, */short vq);\r
 page_t modexDefaultPage();\r
 page_t modexNextPage(page_t *p);\r
 void modexShowPage(page_t *page);\r
@@ -61,7 +61,7 @@ void modexPalUpdate(byte *p);
 void modexWaitBorder();\r
 \r
 /* bitmap functions */\r
-bitmap_t modexLoadPcx(char *filename);\r
+bitmap_t modexLoadPcx(char *filename);
 \r
 /* -======================= Constants & Vars ==========================- */\r
 extern byte far*  VGA;  /* The VGA Memory */\r
@@ -89,5 +89,12 @@ extern byte far*  VGA;  /* The VGA Memory */
 #define PAL_READ_REG            0x03C7   /* Color register, read address */\r
 #define PAL_WRITE_REG           0x03C8   /* Color register, write address */\r
 #define PAL_DATA_REG            0x03C9   /* Color register, data port */\r
-#define PAL_SIZE                (256 * 3)\r
+#define PAL_SIZE                (256 * 3)
+
+#define NUM_COLORS     256 // number of colors in vga mode\r
+#define BONK       400\r
+#define LGQ         32\r
+#define HGQ         55\r
+#define TILEWH                 16
+#define QUADWH                 TILEWH/2\r
 #endif\r
diff --git a/16/modex16/PALVIEW.EXE b/16/modex16/PALVIEW.EXE
new file mode 100644 (file)
index 0000000..4c721d3
Binary files /dev/null and b/16/modex16/PALVIEW.EXE differ
index 6b88f5810f11d9241524f673f540f51b6ef420f5..45f783c6da472d4c0b877e7acfc1bbdc08bf5e74 100644 (file)
@@ -33,7 +33,7 @@ void main() {
     page=modexDefaultPage();\r
 \r
     bmp = modexLoadPcx("ed.pcx");\r
-    modexEnter();\r
+    setvideo(1);\r
 \r
     /* fix up the palette and everything */\r
     modexPalUpdate(bmp.palette);\r
@@ -65,7 +65,7 @@ void main() {
       modexDrawSprite(&page, 20, 20, &bmp);\r
     }\r
     t4 = (*clock-start) / 18.2;\r
-    modexLeave();\r
+    setvideo(0);\r
 \r
     printf("Old non-sprite: %f\n", t1);\r
     printf("New non-sprite: %f\n", t2);\r
index d49c06a41c114658e2225a0db03a731cd1ba01dc..e10ce68d90c9b64485fc96982eba8fa685e20fdf 100644 (file)
Binary files a/16/modex16/PCXTEST.EXE and b/16/modex16/PCXTEST.EXE differ
index 2d261b04f2f02da8ad184dca567850b43e3774e8..35909646be44c02ffc0cfe4d7282ffb31368780b 100644 (file)
@@ -3,13 +3,17 @@
 \r
 word far* clock= (word far*) 0x046C; /* 18.2hz clock */\r
 \r
-void main() {\r
+void main() {
+       bitmap_t bmp;\r
     int i, j;\r
     word start, end;\r
     page_t page, page2;\r
     float elapsed;\r
     byte *pal, *pal2=NULL;\r
 \r
+       /* load pcx file */\r
+       bmp = modexLoadPcx("ed.pcx");\r
+\r
     /* load our palette */\r
     modexLoadPalFile("gfx.pal", &pal2);\r
 \r
@@ -19,7 +23,7 @@ void main() {
     modexFadeOff(1, pal);\r
     modexPalBlack();\r
 \r
-    modexEnter();\r
+    setvideo(1);\r
     modexPalBlack();\r
 \r
     /* set up the page, but with 16 pixels on all borders in offscreen mem */\r
@@ -36,12 +40,16 @@ void main() {
     modexClearRegion(&page, 48, 48, SCREEN_WIDTH-64, SCREEN_HEIGHT-64, 128);\r
     modexShowPage(&page);\r
 \r
+    modexDrawSprite(&page, 20, 20, &bmp);\r
+    //modexDrawBmp(&page, xb, yb, &bmp);\r
+\r
     /* fade in */\r
     modexFadeOn(1, pal2);\r
 \r
 \r
     start = *clock;\r
-    for(i=0; i<5; i++) {\r
+    //for(i=0; i<5; i++) {\r
+    while (!kbhit()){  /* Wait for a keystroke                         */\r
        /* go right */\r
        for(j=0; j<32; j++) {\r
            page.dx++;\r
@@ -65,12 +73,13 @@ void main() {
        }\r
     }\r
 \r
+    (void) getch();   /* Clear the keyboard buffer                    */\r
     end = *clock;\r
 \r
     /* fade back to text mode */\r
     modexFadeOff(1, pal2);\r
     modexPalBlack();\r
-    modexLeave();\r
+    setvideo(0);\r
     modexPalBlack();\r
     modexFadeOn(1, pal);\r
 }\r
index 58538eb45049e4184a0d49c99bff593e9ec4f109..d19c48e90ccbf46bfa86989a632ad61093e9e49a 100644 (file)
Binary files a/16/modex16/TEST.EXE and b/16/modex16/TEST.EXE differ
diff --git a/16/modex16/TEST2.EXE b/16/modex16/TEST2.EXE
new file mode 100644 (file)
index 0000000..57c13a9
Binary files /dev/null and b/16/modex16/TEST2.EXE differ
diff --git a/16/modex16/modex16.c b/16/modex16/modex16.c
deleted file mode 100644 (file)
index bdc089e..0000000
+++ /dev/null
@@ -1,641 +0,0 @@
-#include <dos.h>\r
-#include <string.h>\r
-#include <mem.h>\r
-#include <conio.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include "modex16.h"\r
-\r
-\r
-byte far* VGA=(byte far*) 0xA0000000;  /* this points to video memory. */\r
-\r
-static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette);\r
-static byte tmppal[PAL_SIZE];\r
-static struct pcxHeader {\r
-    byte id;\r
-    byte version;\r
-    byte encoding;\r
-    byte bpp;\r
-    word xmin;\r
-    word ymin;\r
-    word xmax;\r
-    word ymax;\r
-    word hres;\r
-    word vres;\r
-    byte pal16[48];\r
-    byte res1;\r
-    word bpplane;\r
-    word palType;\r
-    word hScreenSize;\r
-    word vScreenSize;\r
-    byte padding[54];\r
-};\r
-\r
-\r
-static void\r
-vgaSetMode(byte mode)\r
-{\r
-  union REGS regs;\r
-\r
-  regs.h.ah = SET_MODE;\r
-  regs.h.al = mode;\r
-  int86(VIDEO_INT, &regs, &regs);\r
-}\r
-\r
-\r
-/* -========================= Entry  Points ==========================- */\r
-void\r
-modexEnter() {\r
-    word i;\r
-    dword far*ptr=(dword far*)VGA;      /* used for faster screen clearing */\r
-    word CRTParms[] = {\r
-       0x0d06,         /* vertical total */\r
-       0x3e07,         /* overflow (bit 8 of vertical counts) */\r
-       0x4109,         /* cell height (2 to double-scan */\r
-       0xea10,         /* v sync start */\r
-       0xac11,         /* v sync end and protect cr0-cr7 */\r
-       0xdf12,         /* vertical displayed */\r
-       0x0014,         /* turn off dword mode */\r
-       0xe715,         /* v blank start */\r
-       0x0616,         /* v blank end */\r
-       0xe317          /* turn on byte mode */\r
-    };\r
-    int CRTParmCount = sizeof(CRTParms) / sizeof(CRTParms[0]);\r
-\r
-    /* TODO save current video mode and palette */\r
-    vgaSetMode(VGA_256_COLOR_MODE);\r
-\r
-    /* disable chain4 mode */\r
-    outpw(SC_INDEX, 0x0604);\r
-\r
-    /* synchronous reset while setting Misc Output */\r
-    outpw(SC_INDEX, 0x0100);\r
-\r
-    /* select 25 MHz dot clock & 60 Hz scanning rate */\r
-    outp(MISC_OUTPUT, 0xe3);\r
-\r
-    /* undo reset (restart sequencer) */\r
-    outpw(SC_INDEX, 0x0300);\r
-\r
-    /* reprogram the CRT controller */\r
-    outp(CRTC_INDEX, 0x11); /* VSync End reg contains register write prot */\r
-    outp(CRTC_DATA, 0x7f);  /* get current write protect on varios regs */\r
-\r
-    /* send the CRTParms */\r
-    for(i=0; i<CRTParmCount; i++) {\r
-       outpw(CRTC_INDEX, CRTParms[i]);\r
-    }\r
-\r
-    /* clear video memory */\r
-    outpw(SC_INDEX, 0x0f02);\r
-    for(i=0; i<0x8000; i++) {\r
-       ptr[i] = 0x0000;\r
-    }\r
-}\r
-\r
-\r
-void\r
-modexLeave() {\r
-    /* TODO restore original mode and palette */\r
-    vgaSetMode(TEXT_MODE);\r
-}\r
-\r
-\r
-page_t\r
-modexDefaultPage() {\r
-    page_t page;\r
-\r
-    /* default page values */\r
-    page.data = VGA;\r
-    page.dx = 0;\r
-    page.dy = 0;\r
-    page.width = SCREEN_WIDTH;\r
-    page.height = SCREEN_HEIGHT;\r
-\r
-    return page;\r
-}\r
-\r
-/* returns the next page in contiguous memory\r
- * the next page will be the same size as p, by default\r
- */\r
-page_t\r
-modexNextPage(page_t *p) {\r
-    page_t result;\r
-\r
-    result.data = p->data + (p->width/4)*p->height;  /* compute the offset */\r
-    result.dx = 0;\r
-    result.dy = 0;\r
-    result.width = p->width;\r
-    result.height = p->height;\r
-\r
-    return result;\r
-}\r
-\r
-\r
-void\r
-modexShowPage(page_t *page) {\r
-    word high_address;\r
-    word low_address;\r
-    word 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
-\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
-    word xoff=x/4;       /* xoffset that begins each row */\r
-    word scanCount=w/4;  /* number of iterations per row (excluding right clip)*/\r
-    word poffset = pageOff + y*(page->width/4) + xoff; /* starting offset */\r
-    word nextRow = page->width/4-scanCount-1;  /* loc of next row */\r
-    byte lclip[] = {0x0f, 0x0e, 0x0c, 0x08};  /* clips for rectangles not on 4s */\r
-    byte rclip[] = {0x00, 0x01, 0x03, 0x07};\r
-    byte left = lclip[x&0x03];\r
-    byte right = rclip[(x+w)&0x03];\r
-\r
-    /* handle the case which requires an extra group */\r
-    if((x & 0x03) && !((x+w) & 0x03)) {\r
-      right=0x0f;\r
-    }\r
-\r
-    __asm {\r
-               MOV AX, SCREEN_SEG      ; go to the VGA memory\r
-               MOV ES, AX\r
-               MOV DI, poffset         ; go to the first pixel\r
-               MOV DX, SC_INDEX        ; point to the map mask\r
-               MOV AL, MAP_MASK\r
-               OUT DX, AL\r
-               INC DX\r
-               MOV AL, color           ; get ready to write colors\r
-       SCAN_START:\r
-               MOV CX, scanCount       ; count the line\r
-               MOV BL, AL              ; remember color\r
-               MOV AL, left            ; do the left clip\r
-               OUT DX, AL              ; set the left clip\r
-               MOV AL, BL              ; restore color\r
-               STOSB                   ; write the color\r
-               DEC CX\r
-               JZ SCAN_DONE            ; handle 1 group stuff\r
-\r
-               ;-- write the main body of the scanline\r
-               MOV BL, AL              ; remember color\r
-               MOV AL, 0x0f            ; write to all pixels\r
-               OUT DX, AL\r
-               MOV AL, BL              ; restore color\r
-               REP STOSB               ; write the color\r
-       SCAN_DONE:\r
-               MOV BL, AL              ; remeber color\r
-               MOV AL, right\r
-               OUT DX, AL              ; do the right clip\r
-               MOV AL, BL              ; restore color\r
-               STOSB                   ; write pixel\r
-               ADD DI, nextRow         ; go to the next row\r
-               DEC h\r
-               JNZ SCAN_START\r
-    }\r
-}\r
-\r
-\r
-void\r
-modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp) {\r
-    /* draw the region (the entire freakin bitmap) */\r
-    modexDrawBmpRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp);\r
-}\r
-\r
-\r
-void\r
-modexDrawBmpRegion(page_t *page, int x, int y,\r
-                   int rx, int ry, int rw, int rh, bitmap_t *bmp) {\r
-    word poffset = (word) page->data  + y*(page->width/4) + x/4;\r
-    byte *data = bmp->data;\r
-    word bmpOffset = (word) data + ry * bmp->width + rx;\r
-    word width = rw;\r
-    word height = rh;\r
-    byte plane = 1 << ((byte) x & 0x03);\r
-    word scanCount = width/4 + (width%4 ? 1 :0);\r
-    word nextPageRow = page->width/4 - scanCount;\r
-    word nextBmpRow = (word) bmp->width - width;\r
-    word rowCounter;\r
-    byte planeCounter = 4;\r
-\r
-    __asm {\r
-               MOV AX, SCREEN_SEG      ; go to the VGA memory\r
-               MOV ES, AX\r
-\r
-               MOV DX, SC_INDEX        ; point at the map mask register\r
-               MOV AL, MAP_MASK        ;\r
-               OUT DX, AL              ;\r
-\r
-       PLANE_LOOP:\r
-               MOV DX, SC_DATA         ; select the current plane\r
-               MOV AL, plane           ;\r
-               OUT DX, AL              ;\r
-\r
-               ;-- begin plane painting\r
-               MOV AX, height          ; start the row counter\r
-               MOV rowCounter, AX      ; \r
-               MOV DI, poffset         ; go to the first pixel\r
-               MOV SI, bmpOffset       ; go to the bmp pixel\r
-       ROW_LOOP:\r
-               MOV CX, width           ; count the columns\r
-       SCAN_LOOP:\r
-               MOVSB                   ; copy the pixel\r
-               SUB CX, 3               ; we skip the next 3\r
-               ADD SI, 3               ; skip the bmp pixels\r
-               LOOP SCAN_LOOP          ; finish the scan\r
-\r
-               MOV AX, nextPageRow\r
-               ADD DI, AX              ; go to the next row on screen\r
-               MOV AX, nextBmpRow\r
-               ADD SI, AX              ; go to the next row on bmp\r
-\r
-               DEC rowCounter\r
-               JNZ ROW_LOOP            ; do all the rows\r
-               ;-- end plane painting\r
-\r
-               MOV AL, plane           ; advance to the next plane\r
-               SHL AL, 1               ;\r
-               AND AL, 0x0f            ; mask the plane properly\r
-               MOV plane, AL           ; store the plane\r
-\r
-               INC bmpOffset           ; start bmp at the right spot\r
-\r
-               DEC planeCounter\r
-               JNZ PLANE_LOOP          ; do all 4 planes\r
-    }\r
-}\r
-\r
-\r
-void\r
-modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp) {\r
-    /* draw the whole sprite */\r
-    modexDrawSpriteRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp);\r
-}\r
-\r
-void\r
-modexDrawSpriteRegion(page_t *page, int x, int y,\r
-                     int rx, int ry, int rw, int rh, bitmap_t *bmp) {\r
-    word poffset = (word)page->data + y*(page->width/4) + x/4;\r
-    byte *data = bmp->data;\r
-    word bmpOffset = (word) data + ry * bmp->width + rx;\r
-    word width = rw;\r
-    word height = rh;\r
-    byte plane = 1 << ((byte) x & 0x03);\r
-    word scanCount = width/4 + (width%4 ? 1 :0);\r
-    word nextPageRow = page->width/4 - scanCount;\r
-    word nextBmpRow = (word) bmp->width - width;\r
-    word rowCounter;\r
-    byte planeCounter = 4;\r
-\r
-    __asm {\r
-               MOV AX, SCREEN_SEG      ; go to the VGA memory\r
-               MOV ES, AX\r
-\r
-               MOV DX, SC_INDEX        ; point at the map mask register\r
-               MOV AL, MAP_MASK        ;\r
-               OUT DX, AL              ;\r
-\r
-       PLANE_LOOP:\r
-               MOV DX, SC_DATA         ; select the current plane\r
-               MOV AL, plane           ;\r
-               OUT DX, AL              ;\r
-\r
-               ;-- begin plane painting\r
-               MOV AX, height          ; start the row counter\r
-               MOV rowCounter, AX      ; \r
-               MOV DI, poffset         ; go to the first pixel\r
-               MOV SI, bmpOffset       ; go to the bmp pixel\r
-       ROW_LOOP:\r
-               MOV CX, width           ; count the columns\r
-       SCAN_LOOP:\r
-               LODSB\r
-               DEC SI\r
-               CMP AL, 0\r
-               JNE DRAW_PIXEL          ; draw non-zero pixels\r
-\r
-               INC DI                  ; skip the transparent pixel\r
-               ADD SI, 1\r
-               JMP NEXT_PIXEL\r
-       DRAW_PIXEL:\r
-               MOVSB                   ; copy the pixel\r
-       NEXT_PIXEL:\r
-               SUB CX, 3               ; we skip the next 3\r
-               ADD SI, 3               ; skip the bmp pixels\r
-               LOOP SCAN_LOOP          ; finish the scan\r
-\r
-               MOV AX, nextPageRow\r
-               ADD DI, AX              ; go to the next row on screen\r
-               MOV AX, nextBmpRow\r
-               ADD SI, AX              ; go to the next row on bmp\r
-\r
-               DEC rowCounter\r
-               JNZ ROW_LOOP            ; do all the rows\r
-               ;-- end plane painting\r
-\r
-               MOV AL, plane           ; advance to the next plane\r
-               SHL AL, 1               ;\r
-               AND AL, 0x0f            ; mask the plane properly\r
-               MOV plane, AL           ; store the plane\r
-\r
-               INC bmpOffset           ; start bmp at the right spot\r
-\r
-               DEC planeCounter\r
-               JNZ PLANE_LOOP          ; do all 4 planes\r
-    }\r
-}\r
-\r
-\r
-void\r
-modexCopyPageRegion(page_t *dest, page_t src,\r
-                   word sx, word sy,\r
-                   word dx, word dy,\r
-                   word width, word height)\r
-{\r
-    /* todo */\r
-}\r
-\r
-\r
-/* fade and flash */\r
-void\r
-modexFadeOn(word fade, byte *palette) {\r
-    fadePalette(-fade, 64, 64/fade+1, palette);\r
-}\r
-\r
-\r
-void\r
-modexFadeOff(word fade, byte *palette) {\r
-    fadePalette(fade, 0, 64/fade+1, palette);\r
-}\r
-\r
-\r
-void\r
-modexFlashOn(word fade, byte *palette) {\r
-    fadePalette(fade, -64, 64/fade+1, palette);\r
-}\r
-\r
-\r
-void\r
-modexFlashOff(word fade, byte *palette) {\r
-    fadePalette(-fade, 0, 64/fade+1, palette);\r
-}\r
-\r
-\r
-static void\r
-fadePalette(sbyte fade, sbyte start, word iter, byte *palette) {\r
-    word i;\r
-    byte dim = start;\r
-\r
-    /* handle the case where we just update */\r
-    if(iter == 0) {\r
-       modexPalUpdate(palette);\r
-       return;\r
-    }\r
-\r
-    while(iter > 0) {  /* FadeLoop */\r
-       for(i=0; i<PAL_SIZE; i++) { /* loadpal_loop */\r
-           tmppal[i] = palette[i] - dim;\r
-           if(tmppal[i] > 127) {\r
-               tmppal[i] = 0;\r
-           } else if(tmppal[i] > 63) {\r
-               tmppal[i] = 63;\r
-           }\r
-       }\r
-        modexPalUpdate(tmppal);\r
-       iter--;\r
-       dim += fade;\r
-    }\r
-}\r
-\r
-\r
-/* save and load */\r
-void\r
-modexPalSave(byte *palette) {\r
-    int  i;\r
-\r
-    outp(PAL_READ_REG, 0);     /* start at palette entry 0 */\r
-    for(i=0; i<PAL_SIZE; i++) {\r
-       palette[i] = inp(PAL_DATA_REG); /* read the palette data */\r
-    }\r
-}\r
-\r
-\r
-byte *\r
-modexNewPal() {\r
-    byte *ptr;\r
-    ptr = malloc(PAL_SIZE);\r
-\r
-    /* handle errors */\r
-    if(!ptr) {\r
-       printf("Could not allocate palette.\n");\r
-       exit(-1);\r
-    }\r
-\r
-    return ptr;\r
-}\r
-\r
-\r
-void\r
-modexLoadPalFile(byte *filename, byte **palette) {\r
-    FILE *file;\r
-    byte *ptr;\r
-\r
-    /* free the palette if it exists */\r
-    if(*palette) {\r
-       free(*palette);\r
-    }\r
-\r
-    /* allocate the new palette */\r
-    *palette = modexNewPal();\r
-\r
-    /* open the file */\r
-    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
-    ptr = *palette;\r
-    while(!feof(file)) {\r
-       *ptr++ = fgetc(file);\r
-    }\r
-\r
-    fclose(file);\r
-}\r
-\r
-\r
-void\r
-modexSavePalFile(char *filename, byte *pal) {\r
-    unsigned int i;\r
-    FILE *file;\r
-\r
-    /* open the file for writing */\r
-    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
-    fwrite(pal, 1, PAL_SIZE, file);\r
-    fclose(file);\r
-}\r
-\r
-\r
-/* blanking */\r
-void\r
-modexPalBlack() {\r
-    fadePalette(-1, 64, 1, tmppal);\r
-}\r
-\r
-\r
-void\r
-modexPalWhite() {\r
-    fadePalette(-1, -64, 1, tmppal);\r
-}\r
-\r
-\r
-/* utility */\r
-void\r
-modexPalUpdate(byte *p) {\r
-    int i;\r
-    modexWaitBorder();\r
-    outp(PAL_WRITE_REG, 0);  /* start at the beginning of palette */\r
-    for(i=0; i<PAL_SIZE/2; i++) {\r
-       outp(PAL_DATA_REG, p[i]);\r
-    }\r
-    modexWaitBorder();     /* waits one retrace -- less flicker */\r
-    for(i=PAL_SIZE/2; i<PAL_SIZE; i++) {\r
-       outp(PAL_DATA_REG, p[i]);\r
-    }\r
-}\r
-\r
-\r
-void\r
-modexWaitBorder() {\r
-    while(inp(INPUT_STATUS_1)  & 8)  {\r
-       /* spin */\r
-    }\r
-\r
-    while(!(inp(INPUT_STATUS_1)  & 8))  {\r
-       /* spin */\r
-    }\r
-}\r
-\r
-\r
-bitmap_t\r
-modexLoadPcx(char *filename) {\r
-    FILE *file;\r
-    bitmap_t result;\r
-    struct pcxHeader head;\r
-    long bufSize;\r
-    int index;\r
-    byte count, val;\r
-\r
-    /* open the PCX file for reading */\r
-    file = fopen(filename, "rb");\r
-    if(!file) {\r
-       printf("Could not open %s for reading.\n", filename);\r
-       exit(-2);\r
-    }\r
-\r
-    /* read the header */\r
-    fread(&head, sizeof(char), sizeof(struct pcxHeader), file);\r
-\r
-    /* make sure this  is 8bpp */\r
-    if(head.bpp != 8) {\r
-       printf("I only know how to handle 8bpp pcx files!\n");\r
-       fclose(file);\r
-       exit(-2);\r
-    }\r
-\r
-    /* allocate the buffer */\r
-    result.width = head.xmax - head.xmin + 1;\r
-    result.height = head.ymax - head.ymin + 1;\r
-    bufSize = result.width * result.height;\r
-    result.data = malloc(bufSize);\r
-    if(!result.data) {\r
-       printf("Could not allocate memory for bitmap data.");\r
-       fclose(file);\r
-       exit(-1);\r
-    }\r
-\r
-    /*  read the buffer in */\r
-    index = 0;\r
-    do {\r
-       /* get the run length and the value */\r
-       count = fgetc(file);\r
-       if(0xC0 ==  (count & 0xC0)) { /* this is the run count */\r
-           count &= 0x3f;\r
-           val = fgetc(file);\r
-       } else {\r
-           val = count;\r
-           count = 1;\r
-       }\r
-\r
-       /* write the pixel the specified number of times */\r
-       for(; count && index < bufSize; count--,index++)  {\r
-           result.data[index] = val;\r
-       }\r
-    } while(index < bufSize);\r
-\r
-    /* handle the palette */\r
-    fseek(file, -769, SEEK_END);\r
-    val = fgetc(file);\r
-    result.palette = modexNewPal();\r
-    if(head.version == 5 && val == 12) {\r
-       /* use the vga palette */\r
-       for(index=0; !feof(file) && index < PAL_SIZE; index++) {\r
-           val = fgetc(file);\r
-           result.palette[index] = val >> 2;\r
-       }\r
-    } else {\r
-       /* use the 16 color palette */\r
-       for(index=0; index<48; index++) {\r
-           result.palette[index]  = head.pal16[index];\r
-       }\r
-    }\r
-\r
-    fclose(file);\r
-\r
-    return result;\r
-}\r
diff --git a/16/modex16/modex16.h b/16/modex16/modex16.h
deleted file mode 100644 (file)
index 81960dd..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*\r
- * Functions for handling modex and doing other basic graphics stuff.\r
- */\r
-#ifndef MODEX16_H\r
-#define MODEX16_H\r
-#include <conio.h>\r
-#include "types.h"\r
-\r
-/* -========================== Types & Macros ==========================- */\r
-#define PAGE_OFFSET(x,y) (((y)<<6)+((y)<<4)+((x)>>2))\r
-#define PLANE(x) (1<< (x&3))\r
-#define SELECT_ALL_PLANES() outpw(0x03c4, 0xff02)\r
-typedef struct {\r
-    byte *data;\r
-    word width;\r
-    word height;\r
-    byte *palette;\r
-} bitmap_t;\r
-\r
-typedef struct {\r
-    byte far* data;    /* the data for the page */\r
-    word dx;           /* col we are viewing on the virtual screen */\r
-    word dy;           /* row we are viewing on the virtual screen */\r
-    word width;                /* virtual width of the page */\r
-    word height;       /* virtual height of the page */\r
-} page_t;\r
-\r
-/* -============================ Functions =============================- */\r
-/* mode switching, page, and plane functions */\r
-void modexEnter();\r
-void modexLeave();\r
-page_t modexDefaultPage();\r
-page_t modexNextPage(page_t *p);\r
-void modexShowPage(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
-void modexDrawBmp(page_t *page, int x, int y, bitmap_t *bmp);\r
-void modexDrawBmpRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp);\r
-void modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp);\r
-void modexDrawSpriteRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp);\r
-\r
-/* Palette fade and flash effects */\r
-void modexFadeOn(word fade, byte *palette);\r
-void modexFadeOff(word fade, byte *palette);\r
-void modexFlashOn(word fade, byte *palette);\r
-void modexFlashOff(word fade, byte *palette);\r
-\r
-/* palette loading and saving */\r
-void modexPalSave(byte *palette);\r
-byte *modexNewPal();\r
-void modexLoadPalFile(char *filename, byte **palette);\r
-void modexSavePalFile(char *filename, byte *palette);\r
-\r
-/* fixed palette functions */\r
-void modexPalBlack();\r
-void modexPalWhite();\r
-\r
-/* utility functions */\r
-void modexPalUpdate(byte *p);\r
-void modexWaitBorder();\r
-\r
-/* bitmap functions */\r
-bitmap_t modexLoadPcx(char *filename);\r
-\r
-/* -======================= Constants & Vars ==========================- */\r
-extern byte far*  VGA;  /* The VGA Memory */\r
-#define SCREEN_SEG             0xa000\r
-#define VIDEO_INT              0x10\r
-#define SET_MODE               0x00\r
-#define VGA_256_COLOR_MODE     0x13\r
-#define TEXT_MODE              0x03\r
-#define SCREEN_WIDTH           320\r
-#define SCREEN_HEIGHT          240\r
-#define PAGE_SIZE              (word)(SCREEN_WIDTH/4 * SCREEN_HEIGHT)\r
-\r
-#define AC_INDEX               0x03c0\r
-#define SC_INDEX               0x03c4\r
-#define SC_DATA                        0x03c5\r
-#define CRTC_INDEX             0x03d4\r
-#define CRTC_DATA              0x03d5\r
-#define MISC_OUTPUT            0x03c2\r
-#define HIGH_ADDRESS           0x0C\r
-#define LOW_ADDRESS            0x0D\r
-#define VRETRACE               0x08\r
-#define INPUT_STATUS_1         0x03da\r
-#define DISPLAY_ENABLE         0x01\r
-#define MAP_MASK               0x02\r
-#define PAL_READ_REG            0x03C7   /* Color register, read address */\r
-#define PAL_WRITE_REG           0x03C8   /* Color register, write address */\r
-#define PAL_DATA_REG            0x03C9   /* Color register, data port */\r
-#define PAL_SIZE                (256 * 3)\r
-#endif\r
index 6b88f5810f11d9241524f673f540f51b6ef420f5..45f783c6da472d4c0b877e7acfc1bbdc08bf5e74 100644 (file)
@@ -33,7 +33,7 @@ void main() {
     page=modexDefaultPage();\r
 \r
     bmp = modexLoadPcx("ed.pcx");\r
-    modexEnter();\r
+    setvideo(1);\r
 \r
     /* fix up the palette and everything */\r
     modexPalUpdate(bmp.palette);\r
@@ -65,7 +65,7 @@ void main() {
       modexDrawSprite(&page, 20, 20, &bmp);\r
     }\r
     t4 = (*clock-start) / 18.2;\r
-    modexLeave();\r
+    setvideo(0);\r
 \r
     printf("Old non-sprite: %f\n", t1);\r
     printf("New non-sprite: %f\n", t2);\r
diff --git a/16/modex16/pcxtest.exe b/16/modex16/pcxtest.exe
deleted file mode 100644 (file)
index d49c06a..0000000
Binary files a/16/modex16/pcxtest.exe and /dev/null differ
index 2d261b04f2f02da8ad184dca567850b43e3774e8..35909646be44c02ffc0cfe4d7282ffb31368780b 100644 (file)
@@ -3,13 +3,17 @@
 \r
 word far* clock= (word far*) 0x046C; /* 18.2hz clock */\r
 \r
-void main() {\r
+void main() {
+       bitmap_t bmp;\r
     int i, j;\r
     word start, end;\r
     page_t page, page2;\r
     float elapsed;\r
     byte *pal, *pal2=NULL;\r
 \r
+       /* load pcx file */\r
+       bmp = modexLoadPcx("ed.pcx");\r
+\r
     /* load our palette */\r
     modexLoadPalFile("gfx.pal", &pal2);\r
 \r
@@ -19,7 +23,7 @@ void main() {
     modexFadeOff(1, pal);\r
     modexPalBlack();\r
 \r
-    modexEnter();\r
+    setvideo(1);\r
     modexPalBlack();\r
 \r
     /* set up the page, but with 16 pixels on all borders in offscreen mem */\r
@@ -36,12 +40,16 @@ void main() {
     modexClearRegion(&page, 48, 48, SCREEN_WIDTH-64, SCREEN_HEIGHT-64, 128);\r
     modexShowPage(&page);\r
 \r
+    modexDrawSprite(&page, 20, 20, &bmp);\r
+    //modexDrawBmp(&page, xb, yb, &bmp);\r
+\r
     /* fade in */\r
     modexFadeOn(1, pal2);\r
 \r
 \r
     start = *clock;\r
-    for(i=0; i<5; i++) {\r
+    //for(i=0; i<5; i++) {\r
+    while (!kbhit()){  /* Wait for a keystroke                         */\r
        /* go right */\r
        for(j=0; j<32; j++) {\r
            page.dx++;\r
@@ -65,12 +73,13 @@ void main() {
        }\r
     }\r
 \r
+    (void) getch();   /* Clear the keyboard buffer                    */\r
     end = *clock;\r
 \r
     /* fade back to text mode */\r
     modexFadeOff(1, pal2);\r
     modexPalBlack();\r
-    modexLeave();\r
+    setvideo(0);\r
     modexPalBlack();\r
     modexFadeOn(1, pal);\r
 }\r
diff --git a/16/modex16/test.exe b/16/modex16/test.exe
deleted file mode 100644 (file)
index 58538eb..0000000
Binary files a/16/modex16/test.exe and /dev/null differ
index 19f05e09769e825ec09bb9e630048192dde12f73..a366998084c9cc7553215a86699d1c3ca6762e85 100644 (file)
@@ -10,13 +10,13 @@ void main() {
 \r
     page=modexDefaultPage();\r
 \r
-    modexEnter();\r
+    setvideo(1);\r
     start = *clock;\r
     for(i=0; i<500; i++) {\r
        modexShowPage(&page);\r
     }\r
     t1 = (*clock - start)/18.2;\r
-    modexLeave();\r
+    setvideo(0);\r
 \r
     printf("Time: %f\n", t1);\r
 }\r
diff --git a/16/modex16/test2.exe b/16/modex16/test2.exe
deleted file mode 100644 (file)
index 8b36460..0000000
Binary files a/16/modex16/test2.exe and /dev/null differ