From 0fd6f3d210d87e6b1eb1924bb16f945f1d1bf42e Mon Sep 17 00:00:00 2001
From: sparky4 <sparky4@4ch.maidlab.jp>
Date: Thu, 29 May 2014 12:56:46 -0500
Subject: [PATCH] 	modified:   16/DOS_GFX.EXE 	modified:  
 16/DOS_GFX.OBJ 	modified:   16/Project 16.bfproject 	modified:  
 16/dos_gfx.cpp 	modified:   16/dos_gfx.h 	modified:  
 16/lib/intro/lib.c

---
 16/DOS_GFX.EXE          | Bin 34858 -> 30934 bytes
 16/DOS_GFX.OBJ          | Bin 7743 -> 4716 bytes
 16/Project 16.bfproject |  45 ++--
 16/dos_gfx.cpp          | 479 +++++-----------------------------------
 16/dos_gfx.h            |  14 +-
 16/lib/intro/lib.c      | 299 +++++++++++++++++++++----
 6 files changed, 348 insertions(+), 489 deletions(-)

diff --git a/16/DOS_GFX.EXE b/16/DOS_GFX.EXE
index 3b6fc2ba12bcfc5ba6e7ba682a4d53c58d7da63c..e835c57b6eab14fddb2072881a329fcc3066e68e 100644
GIT binary patch
delta 16564
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
WMH#ACFv?DCLk&sM0pY>8%l|)+K{}uS

delta 20567
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
aobW~Z2GY=v1tQ&S;m?Tl4}Jqd!v6=xCh;-=

diff --git a/16/DOS_GFX.OBJ b/16/DOS_GFX.OBJ
index 1f08446c10199f66ec768c718f1ee711d943d824..56298e2a462e71f14776bf532c535aef44d0274d 100644
GIT binary patch
delta 3039
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
Tjh0?_xN1*b#4PIR)Rq4OQUb;-

literal 7743
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

diff --git a/16/Project 16.bfproject b/16/Project 16.bfproject
index abdd2559..f743508d 100644
--- a/16/Project 16.bfproject	
+++ b/16/Project 16.bfproject	
@@ -1,18 +1,21 @@
 c2e.convert_special: 0
 e2c.convert_num: 0
-openfiles: /dos/z/16/16/dos_gfx.cpp:19173:18568:0:
-openfiles: /dos/z/16/16/dos_gfx.h:141:0:0:
+openfiles: /dos/z/16/16/dos_gfx.cpp:8331:7953:1:
+openfiles: /dos/z/16/16/dos_gfx.h:477:0:0:
 openfiles: /dos/z/16/16/dos_kb.c:892:395:0:
 openfiles: /dos/z/16/16/dos_kb.h:60:0:0:
 openfiles: /dos/z/16/16/lib/lib_com.cpp:0:0:0:
 openfiles: /dos/z/16/16/lib/lib_com.h:2553:1416:0:
 openfiles: /dos/z/16/16/scroll.txt:5307:5080:0:
-openfiles: /dos/z/16/16/project16.txt:1675:950:0:
+openfiles: /dos/z/16/16/project16.txt:8161:7174:0:
 openfiles: /dos/z/16/16/16.txt:0:0:0:
-openfiles: /dos/z/16/16/lib/x/MODEX.H:2945:2439:0:
+openfiles: /dos/z/16/16/lib/x/MODEX.H:3331:2278:0:
 openfiles: /dos/z/16/16/lib/x/MODEX.DEF:4471:3131:0:
 openfiles: /dos/z/16/16/lib/x/MAKEFILE:1186:782:0:
-openfiles: /dos/z/4x4_16/modex/DEMO07.PAS:1095:490:0:
+openfiles: /dos/z/4x4_16/modex/DEMO07.PAS:985:490:0:
+openfiles: /dos/z/16/16/lib/intro/lib.c:2417:1910:0:
+openfiles: /dos/z/16/src/lib/dos_gfx.cpp:2384:0:0:
+openfiles: /dos/z/16/src/lib/dos_gfx.h:0:0:0:
 snr_recursion_level: 0
 convertcolumn_horizontally: 0
 adv_open_matchname: 0
@@ -24,15 +27,16 @@ view_left_panel: 0
 default_mime_type: text/plain
 e2c.convert_xml: 1
 c2e.convert_iso: 0
-opendir: file:///dos/z/4x4_16/modex
+opendir: file:///dos/z/16/src/lib
 wrap_text_default: 0
 bookmarks_filename_mode: 1
-ssearch_text: mxSetClip(
+ssearch_text: put
 snr_casesens: 0
 view_blocks: 1
 name: project 16
 replacelist: てすと
 replacelist: \t
+replacelist: putPixel_X
 fb_show_hidden_f: 0
 editor_tab_width: 4
 show_visible_spacing: 1
@@ -74,19 +78,22 @@ recent_files: file:///dos/z/16/16/x.bat
 recent_files: file:///dos/z/16/16/xx.bat
 recent_files: file:///dos/z/16/16/lib/x/MXVS.ASM
 recent_files: file:///dos/z/16/16/lib/x/MXPN.ASM
-recent_files: file:///dos/z/16/16/dos_gfx.cpp
-recent_files: file:///dos/z/16/16/lib/lib_com.cpp
 recent_files: file:///dos/z/16/16/dos_gfx.h
-recent_files: file:///dos/z/16/16/project16.txt
-recent_files: file:///dos/z/16/16/dos_kb.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/dos_gfx.cpp
+recent_files: file:///dos/z/16/16/lib/x/MODEX.H
 recent_files: file:///dos/z/16/16/lib/x/MODEX.DEF
 recent_files: file:///dos/z/16/16/16.txt
-recent_files: file:///dos/z/16/16/lib/x/MODEX.H
-recent_files: file:///dos/z/16/16/lib/lib_com.h
-recent_files: file:///dos/z/4x4_16/modex/DEMO07.PAS
 recent_files: file:///dos/z/16/16/lib/x/MAKEFILE
+recent_files: file:///dos/z/4x4_16/modex/DEMO07.PAS
+recent_files: file:///dos/z/16/16/lib/intro/lib.c
+recent_files: file:///dos/z/16/src/lib/dos_gfx.cpp
+recent_files: file:///dos/z/16/src/lib/dos_gfx.h
 snr_replacetype: 0
 savedir: file:///dos/z/16/16
 spell_check_default: 1
@@ -98,11 +105,6 @@ snr_escape_chars: 0
 htmlbar_view: 0
 spell_lang: en
 ssearch_dotmatchall: 0
-searchlist: mspai
-searchlist: mspan
-searchlist: mspab
-searchlist: mpab
-searchlist: mxpab
 searchlist: mxpan
 searchlist: gets
 searchlist: mxset
@@ -113,6 +115,11 @@ searchlist: setvir
 searchlist: virtual
 searchlist: STEPS
 searchlist: mxSetClip( TRUE );
+searchlist: world_matrix
+searchlist: mxPutPixel
+searchlist: setactive
+searchlist: vga
+searchlist: put
 autocomplete: 1
 outputb_show_all_output: 0
 bookmarks_show_mode: 0
diff --git a/16/dos_gfx.cpp b/16/dos_gfx.cpp
index 1aec6780..e14c5c49 100644
--- a/16/dos_gfx.cpp
+++ b/16/dos_gfx.cpp
@@ -1,60 +1,5 @@
-/*
- * LIB.C v1.2a
- *
- * by Robert Schmidt
- * (C)1993 Ztiff Zox Softwear
- *
- * Simple graphics library to accompany the article
- * 
- *					  INTRODUCTION TO MODE X.
- * 
- * This library provides the basic functions for initializing and using
- * unchained (planar) 256-color VGA modes.  Currently supported are:
- *
- *	  - 320x200
- *	  - 320x240
- *
- * Functions are provided for:
- *
- *	  - initializing one of the available modes
- *	  - setting the start address of the VGA refresh data
- *	  - setting active and visible display pages
- *	  - writing and reading a single pixel to/from video memory
- *
- * The library is provided as a demonstration only, and is not claimed
- * to be particularly efficient or suited for any purpose.  It has only
- * been tested with Borland C++ 3.1 by the author.  Comments on success
- * or disaster with other compilers are welcome.
- *
- * This file is public domain.  Do with it whatever you'd like, but
- * please don't distribute it without the article.
- *
- * Thanks go out to various helpful netters who spotted the 0xE7 bug
- * in the set320x240x256() function!
- *
- * Modified by sparky4 so it can be compiled in open watcom ^^
- */
-
-
-
-
-/*
- * We 'require' a large data model simply to get rid of explicit 'far'
- * pointers and compiler specific '_fmemset()' functions and the likes.
- */
-#if !defined(__COMPACT__)
-# if !defined(__LARGE__)
-#  if !defined(__HUGE__)
-#   error Large data model required!  Try compiling with 'wcc -0 -ml lib.c'.
-#  endif
-# endif
-#endif
-
-#include <dos.h>
-#include <mem.h>
-#include <conio.h>
-
-//code from old library!
+//DOS Graphics thingy by sparky4 licence GPL v2
+//a special thanks to everyone to release source code for mode X
 /*src\lib\*/
 #include "dos_gfx.h"
 
@@ -65,7 +10,9 @@ int gq = LGQ;
 int q = 0;
 int bakax = 0, bakay = 0;
 cord xx = rand()&0%320, yy = rand()&0%240, sx = 0, sy = 0;
-byte coor;
+byte coor;
+
+byte *vga = (byte *) MK_FP(0xA000, 0);
 
 /*
  * Comment out the following #define if you don't want the testing main()
@@ -73,240 +20,6 @@ byte coor;
  */
 #define TESTING
 
-/*
- * Define the port addresses of some VGA registers.
- */
-#define CRTC_ADDR	   0x3d4   /* Base port of the CRT Controller (color) */
-
-#define SEQU_ADDR	   0x3c4   /* Base port of the Sequencer */
-#define GRAC_ADDR	   0x3ce   /* Base port of the Graphics Controller */
-#define STATUS_ADDR     0x3DA
-
-
-/*
- * Make a far pointer to the VGA graphics buffer segment.  Your compiler
- * might not have the MK_FP macro, but you'll figure something out.
- */
-byte *vga = (byte *) MK_FP(0xA000, 0);
-
-
-/*
- * width and height should specify the mode dimensions.  widthBytes
- * specify the width of a line in addressable bytes.
- */
-unsigned width, height, widthBytes;
-
-/*
- * actStart specifies the start of the page being accessed by
- * drawing operations.  visStart specifies the contents of the Screen
- * Start register, i.e. the start of the visible page.
- */
-unsigned actStart, visStart;
-
-/*
- * set320x200x256_X()
- *	  sets mode 13h, then turns it into an unchained (planar), 4-page
- *	  320x200x256 mode.
- */
-void set320x200x256_X(void)
-		{
-		union REGS r;
-
-		/* Set VGA BIOS mode 13h: */
-		r.x.ax = 0x0013;
-		int86(0x10, &r, &r);
-
-		/* Turn off the Chain-4 bit (bit 3 at index 4, port 0x3c4): */
-		outpw(SEQU_ADDR, 0x0604);
-
-		/* Turn off word mode, by setting the Mode Control register
-		of the CRT Controller (index 0x17, port 0x3d4): */
-		outpw(CRTC_ADDR, 0xE317);
-
-		/* Turn off doubleword mode, by setting the Underline Location
-		   register (index 0x14, port 0x3d4): */
-		outpw(CRTC_ADDR, 0x0014);
-
-		/* Clear entire video memory, by selecting all four planes, then
-		   writing 0 to entire segment. */
-		outpw(SEQU_ADDR, 0x0F02);
-		memset(vga+1, 0, 0xffff); /* stupid size_t exactly 1 too small */
-		vga[0] = 0;
-
-		/* Update the global variables to reflect dimensions of this
-		   mode.  This is needed by most future drawing operations. */
-		width		   = 320;
-		height  = 200;
-
-		/* Each byte addresses four pixels, so the width of a scan line
-		   in *bytes* is one fourth of the number of pixels on a line. */
-		widthBytes = width / 4;
-
-		/* By default we want screen refreshing and drawing operations
-		   to be based at offset 0 in the video segment. */
-		actStart = visStart = 0;
-
-		}
-
-/*
- * setActiveStart() tells our graphics operations which address in video
- * memory should be considered the top left corner.
- */
-void setActiveStart(unsigned offset)
-		{
-		actStart = offset;
-		}
-
-/*
- * setVisibleStart() tells the VGA from which byte to fetch the first
- * pixel when starting refresh at the top of the screen.  This version
- * won't look very well in time critical situations (games for
- * instance) as the register outputs are not synchronized with the
- * screen refresh.  This refresh might start when the high byte is
- * set, but before the low byte is set, which produces a bad flicker.
- */
-void setVisibleStart(unsigned offset)
-		{
-		visStart = offset;
-		outpw(CRTC_ADDR, 0x0C);		 /* set high byte */
-		outpw(CRTC_ADDR+1, visStart >> 8);
-		outpw(CRTC_ADDR, 0x0D);		 /* set low byte */
-		outpw(CRTC_ADDR+1, visStart & 0xff);
-		}
-
-/*
- * setXXXPage() sets the specified page by multiplying the page number
- * with the size of one page at the current resolution, then handing the
- * resulting offset value over to the corresponding setXXXStart()
- * function.  The first page is number 0.
- */
-void setActivePage(int page)
-		{
-		setActiveStart(page * widthBytes * height);
-		}
-
-void setVisiblePage(int page)
-		{
-		setVisibleStart(page * widthBytes * height);
-		}
-
-void putPixel_X(int x, int y, byte color)
-		{
-		/* Each address accesses four neighboring pixels, so set
-		   Write Plane Enable according to which pixel we want
-		   to modify.  The plane is determined by the two least
-		   significant bits of the x-coordinate: */
-		outp(0x3c4, 0x02);
-		outp(0x3c5, 0x01 << (x & 3));
-
-		/* The offset of the pixel into the video segment is
-		   offset = (width * y + x) / 4, and write the given
-		   color to the plane we selected above.  Heed the active
-		   page start selection. */
-		vga[(unsigned)(widthBytes * y) + (x / 4) + actStart] = color;
-
-		}
-
-byte getPixel_X(int x, int y)
-		{
-		/* Select the plane from which we must read the pixel color: */
-		outpw(GRAC_ADDR, 0x04);
-		outpw(GRAC_ADDR+1, x & 3);
-
-		return vga[(unsigned)(widthBytes * y) + (x / 4) + actStart];
-
-		}
-
-void set320x240x256_X(void)
-		{
-		/* Set the unchained version of mode 13h: */
-		set320x200x256_X();
-
-		/* Modify the vertical sync polarity bits in the Misc. Output
-		   Register to achieve square aspect ratio: */
-		outp(0x3C2, 0xE3);
-
-		/* Modify the vertical timing registers to reflect the increased
-		   vertical resolution, and to center the image as good as
-		   possible: */
-		outpw(0x3D4, 0x2C11);		   /* turn off write protect */
-		outpw(0x3D4, 0x0D06);		   /* vertical total */
-		outpw(0x3D4, 0x3E07);		   /* overflow register */
-		outpw(0x3D4, 0xEA10);		   /* vertical retrace start */
-		outpw(0x3D4, 0xAC11);		   /* vertical retrace end AND wr.prot */
-		outpw(0x3D4, 0xDF12);		   /* vertical display enable end */
-		outpw(0x3D4, 0xE715);		   /* start vertical blanking */
-		outpw(0x3D4, 0x0616);		   /* end vertical blanking */
-
-		/* Update mode info, so future operations are aware of the
-		   resolution */
-		height = 240;
-
-		}
-
-
-/*-----------XXXX-------------*/
-
-/////////////////////////////////////////////////////////////////////////////
-//                                                                         //
-// WaitRetrace() - This waits until you are in a Verticle Retrace.         //
-//                                                                         //
-/////////////////////////////////////////////////////////////////////////////
-void wait_for_retrace(void)
-{
-    while (!(inp(STATUS_ADDR) & 0x08));
-}
-
-/*tile*/
-//king_crimson's code
-void putColorBox_X(int x, int y, int w, int h, byte color) {
-	outp(0x3c4, 0x02);
-
-	int curx, cury;
-	unsigned drawptr;
-	for (curx=x; curx<(x+w); curx++) {
-		outp(0x3c5, 0x01 << (curx & 3));
-		drawptr = (unsigned)(widthBytes * y) + (curx / 4) + actStart;
-		for (cury=0; cury<h; cury++) {
-			vga[drawptr] = color;
-			drawptr += widthBytes;
-		}
-	}
-}
-
-void vScroll(int rows)
-{
-	// Scrolling = current start + (rows * bytes in a row)
-	setVisibleStart(visStart + (rows * width));
-}
-
-void scrolly(int bongy)
-{
-	int boingy=0;
-	if(bongy<0)
-		boingy=-1;
-	else if(bongy>0)
-		boingy=1;
-
-	for(int ti=0;ti<TILEWH;ti++)
-	{
-		delay(1);
-		vScroll(boingy);
-	}
-}
-
-//king_crimson's code
-void hScroll(int Cols) {
-	wait_for_retrace();
-	outp(0x3C0, 0x13);
-	outp(0x3C0, Cols & 3);
-	outp(0x3D4, 0x13);
-	outp(0x3D5, Cols >> 2);
-	outp(0x3D4, Cols);
-	//setVisibleStart(visStart + (Cols * height));
-	setVisibleStart(visStart + (Cols * width));
-}
-
 /////////////////////////////////////////////////////////////////////////////
 //                                                                         //
 // setvideo() - This function Manages the video modes					  //
@@ -332,15 +45,12 @@ void setvideo(/*byte mode, */int vq){
 				// enter mode
 				mxInit();
 				mxSetMode( MX_320x240 );
-				width=320;
-				height=240;
-//				mxSetVirtualScreen(width+(width/4), height+(height/4));
-//				mxSetVirtualScreen(width*2, height*2);
-				//set320x240x256_X();
-				mxSetVirtualScreen(560,420);
-//				mxSetVirtualScreen((640-(TILEWH*2)),(480-(TILEWH*2)));
+//				mxSetVirtualScreen(SW+(SW/4), SH+(SH/4));
+//				mxSetVirtualScreen(SW*2, SH*2);
+				mxSetVirtualScreen(VW,VH);
+//				mxSetVirtualScreen((640-(TILEWH*4)),(480-(TILEWH*4)));
 				mxSetClip(0);
-				//mxSetClipRegion(0, 0, width, height);
+				//mxSetClipRegion(0, 0, SW, SH);
 		}
 }
 
@@ -351,7 +61,7 @@ void setvideo(/*byte mode, */int vq){
 //																		 //
 /////////////////////////////////////////////////////////////////////////////
 void cls(byte color, byte *Where){
-		_fmemset(Where, color, width*(height*17));
+		_fmemset(Where, color, VW*(VH));
 }
 
 //color ‚Ä‚·‚Æ
@@ -375,18 +85,18 @@ int colorz(){
 
 //slow spectrum down
 void ssd(int svq){
-		if(sy < height+1){
-				if(sx < width+1){
+		if(sy < SH+1){
+				if(sx < SW+1){
 						//plotpixel(xx, yy, coor, vga);
 						//ppf(sx, sy, coor, vga);
-						putPixel_X(sx, sy, coor);
+						mxPutPixel(sx, sy, coor);
 						//printf("%d %d %d %d\n", sx, sy, svq, coor);
 						sx++;
 				}else sx = 0;
-				if(sx == width){
+				if(sx == SW){
 						sy++;
 						if(svq == 7) coor++;
-						if(sy == height && svq == 8) coor = rand()%NUM_COLORS;
+						if(sy == SH && svq == 8) coor = rand()%NUM_COLORS;
 				}
 		}else sy = 0;
 }
@@ -394,18 +104,6 @@ void ssd(int svq){
 /*-----------ding-------------*/
 int ding(int q){
 
-/*	if(yy<height){
-		setActivePage(0);
-		setVisiblePage(0);
-	}
-	if((height)<yy<(height*2)){
-		setActivePage(1);
-		setVisiblePage(1);
-	}
-	if((height*2)<yy<(height*3)){
-		setActivePage(2);
-		setVisiblePage(2);
-	}*/
 		int d3y;
 
 //++++  if(q <= 4 && q!=2 && gq == BONK-1) coor = rand()%HGQ;
@@ -414,7 +112,7 @@ int ding(int q){
 		||q==16
 		) && gq == BONK){
 						if(coor < HGQ && coor < LGQ) coor = LGQ;
-						if(coor < HGQ-1){
+						if(coor < HGQ){
 								coor++;
 				}else{ coor = LGQ;
 						bakax = rand()%3; bakay = rand()%3;
@@ -427,7 +125,6 @@ int ding(int q){
 		if(q==11){ colorz(); delay(100); return gq; }
 		if(q==6){
 				coor = rand()%NUM_COLORS;
-//----		  cls(coor, vaddr);
 				cls(coor, vga);
 				//updatevbuff();
 		}
@@ -441,17 +138,17 @@ int ding(int q){
 		}
 		if((q<5 && gq<BONK) || (q==16 && gq<BONK)){ // the number variable make the colors more noticable
 				if(q==1){
-						if(xx==width){bakax=0;}
+						if(xx==SW){bakax=0;}
 						if(xx==0){bakax=1;}
-						if(yy==height){bakay=0;}
+						if(yy==SH){bakay=0;}
 						if(yy==0){bakay=1;}
 				}else if(q==3){
-						if(xx!=width||yy!=height){
+						if(xx!=SW||yy!=SH){
 								if(xx==0){bakax=1;bakay=-1;d3y=1;}
 								if(yy==0){bakax=1;bakay=0;d3y=1;}
-								if(xx==width){bakax=-1;bakay=-1;d3y=1;}
-								if(yy==height){bakax=1;bakay=0;d3y=1;}
-						}else if(xx==width&&yy==height) xx=yy=0;
+								if(xx==SW){bakax=-1;bakay=-1;d3y=1;}
+								if(yy==SH){bakax=1;bakay=0;d3y=1;}
+						}else if(xx==SW&&yy==SH) xx=yy=0;
 				}
 				if(q==3){
 						if(d3y){
@@ -501,12 +198,12 @@ int ding(int q){
 						}
 				}
 				// fixer
-//				if(q!=16){
-						if(xx<0) xx=(560/*-TILEWH*/);
-						if(yy<0) yy=(420/*-TILEWH*/);
-						if(xx>(560/*-TILEWH*/)) xx=0;
-						if(yy>(420/*-TILEWH*/)) yy=0;
-//				}
+				if(q!=16){
+						if(xx<0) xx=(VW/*-TILEWH*/);
+						if(yy<0) yy=(VH/*-TILEWH*/);
+						if(xx>(VW/*-TILEWH*/)) xx=0;
+						if(yy>(VH/*-TILEWH*/)) yy=0;
+				}
 
 //interesting effects
 				if(q==16)
@@ -515,26 +212,19 @@ int ding(int q){
 				tx+=xx+16;
 				ty+=yy+16;
 				mxPutPixel(tx, ty, coor);
-				//drawrect(tx, ty, tx+TILEWH, ty+TILEWH, coor);
 				//printf("%d %d %d %d %d %d\n", xx, yy, tx, ty, TILEWH);
 
 				// plot the pixel
-//----		  ppf(xx, yy, coor, vga);
-				}else /*if(xx>=0 && xx<width && yy>=0 && yy<(height*3))*/{
+				}else{
 //					mxFillBox(xx, yy, TILEWH, TILEWH, coor, 0);
-//++++0000
-//					putPixel_X(xx, yy, coor);
 					mxPutPixel(xx, yy, coor);
 				} 
 
-//----		  if(q==2) ppf(rand()%, rand()%height, 0, vga);
-//				if(q==2) putColorBox_X(rand()%width, rand()%(height*3), TILEWH, TILEWH, 0);
-//++++0000
-				if(q==2) mxPutPixel(rand()%width, rand()%(height*3), 0);
-				if(q==16) mxPutPixel(rand()%width, rand()%(height*3), 0);
+				if(q==2) mxPutPixel(rand()%SW, rand()%(SH*3), 0);
+				if(q==16) mxPutPixel(rand()%SW, rand()%(SH*3), 0);
 				if(q==2||q==4||q==16){ bakax = rand()%3; bakay = rand()%3; }
 				gq++;
-//if(xx<0||xx>320||yy<0||yy>(height*3))
+//if(xx<0||xx>320||yy<0||yy>(SH*3))
 //	  printf("%d %d %d %d %d %d\n", xx, yy, coor, bakax, bakay, getPixel_X(xx,yy));
 //	  printf("%d\n", getPixel_X(xx,yy));
 		}else gq = LGQ;
@@ -546,62 +236,8 @@ int ding(int q){
  * The library testing routines follows below.
  */
 
-
 #ifdef TESTING
 
-#include <stdio.h>
-#include <conio.h>
-
-void doTest(void)
-		{
-		int p, x, y, pages;
-
-		/* This is the way to calculate the number of pages available. */
-		pages = 65536L/(widthBytes*height); // apparently this takes the A000 address
-//		if(height==240) pages++;
-
-//		printf("%d\n", pages);
-
-		for (p = 0; p <= pages; ++p)
-				{
-				setActivePage(p);
-
-				/* On each page draw a single colored border, and dump the palette
-				   onto a small square about the middle of the page. */
-
-				   //{
-						for (x = 0; x <= width; ++x)
-								{
-//								putPixel_X(x, 0, p+1);
-								mxPutPixel(x, 0, p+1);
-								if(p!=pages) mxPutPixel(x, height-1, p+1);
-										else if(height==240) mxPutPixel(x, 99-1, p+1);
-								}
-
-						for (y = 0; y <= height; ++y)
-								{
-								mxPutPixel(0, y, p+1);
-								if(p!=pages) mxPutPixel(width-1, y, p+1);
-										else if(height==240) mxPutPixel(width-1, y, p+1);
-								}
-
-						for (x = 0; x < TILEWH; ++x)
-								for (y = 0; y < TILEWH; ++y)
-										mxPutPixel(x+(p+2)*16, y+(p+2)*TILEWH, x + y*TILEWH);
-						//}
-
-				}
-
-		/* Each pages will now contain a different image.  Let the user cycle
-		   through all the pages by pressing a key. */
-		for (p = 0; p < pages; ++p)
-				{
-				setVisiblePage(p);
-				getch();
-				}
-
-		}
-
 /*
  * Library test (program) entry point.
  */
@@ -617,19 +253,6 @@ int main(void)
 		ypos=0;
 		xdir=1;
 		ydir=1;
-//	  puts("First, have a look at the 320x200 mode.  I will draw some rubbish");
-//	  puts("on all of the four pages, then let you cycle through them by");
-//	  puts("hitting a key on each page.");
-//	  puts("Press a key when ready...");
-//	  getch();
-
-//	  doTest();
-
-//	  puts("Then, check out Mode X, 320x240 with 3 (and a half) pages.");
-//	  puts("Press a key when ready...");
-//	  getch();
-
-//++++0000
 		setvideo(1);
 // screen savers
 
@@ -651,16 +274,28 @@ int main(void)
 		}
 		//end of screen savers
 		//doTest();
-		for (int x = 0; x < width; ++x)
+		for (int x = 0; x < VW; ++x)
 			{
 				mxPutPixel(x, 0, 15);
-				mxPutPixel(x, height-1, 15);
+				mxPutPixel(x, SH-1, 15);
 			}
-		for (int y = 0; y < height; ++y)
+		for (int y = 0; y < VH; ++y)
 			{
 				mxPutPixel(0, y, 15);
-				mxPutPixel(width-1, y, 15);
+				mxPutPixel(SW-1, y, 15);
+			}
+
+		getch();
+		for (int x = 320; x < VW; ++x)
+			{
+				mxPutPixel(x, 0, 15);
+				mxPutPixel(x, VH-1, 15);
 			}
+		for (int y = 240; y < VH; ++y)
+			{
+				mxPutPixel(0, y, 15);
+				mxPutPixel(VW-1, y, 15);
+			}
 		getch();
 		while(!kbhit()){
 //			hScroll(1);
@@ -670,18 +305,18 @@ int main(void)
 			//for(int i=0;i<TILEWH;i++){
 				ding(key);
 				mxPan(xpos,ypos);
-				mxWaitRetrace();
-				xpos=xpos+xdir;
-				ypos=ypos+ydir;
-				if( (xpos>239)  || (xpos<1))xdir=-xdir;
-				if( (ypos>179) || (ypos<1))ydir=-ydir; // { Hit a boundry, change
+				//mxWaitRetrace();
+				xpos+=xdir;
+				ypos+=ydir;
+				if( (xpos>(VW-SW-1))  || (xpos<1)){xdir=-xdir;}
+				if( (ypos>(VH-SH-1)) || (ypos<1)){ydir=-ydir;} // { Hit a boundry, change
 			//    direction! }
 			//}
 		}
 		setvideo(0);
-		printf("wwww\n%dx%d\n", width,height);
-		printf("[%d]\n", mxGetVersion());
-		puts("where to next?  It's your move! wwww");
+		printf("wwww\nResolution: %dx%d\n", SW,SH);
+		printf("Mode X Library Version: %d\n", mxGetVersion());
+		//puts("where to next?  It's your move! wwww");
 		printf("bakapi ver. 1.04.09.04\nis made by sparky4i†ƒÖ…j feel free to use it ^^\nLicence: GPL v2\n");
 		return 0;
 		}
diff --git a/16/dos_gfx.h b/16/dos_gfx.h
index 8fd92704..6c7bbeea 100644
--- a/16/dos_gfx.h
+++ b/16/dos_gfx.h
@@ -16,7 +16,11 @@
 		     // Size =  80 = 2 across, 2 down
 		     // Size = 160 = 4 across, 1 down*/
 //#define VMEM	    0xA000 // = vga
-byte Xfont[2048];
+byte Xfont[2048];
+#define SW	320
+#define SH	240
+#define VW	560
+#define VH	416
 
 //void drawChar(int x, int y, int color, byte c);
 //void drawText(int x, int y, int color, byte string);
@@ -27,10 +31,10 @@ void cls(byte color, byte *Where);
 //void clearscr();
 //void plotpixel(int x, int y, byte color, byte *Where);
 //void plotpixelfast(int x, int y, byte color, byte *Where);
-void putPixel_X(int x, int y, byte color);
-void putColorBox_X(int x, int y, int w, int h, byte color);
-void vScroll(int rows);
-void scrolly(int bong);
+//void putPixel_X(int x, int y, byte color);
+//void putColorBox_X(int x, int y, int w, int h, byte color);
+//void vScroll(int rows);
+//void scrolly(int bong);
 //void wait_for_retrace(void); // Waits for vertical retrace
 //void BlockMove();
 //void eraseplayer(int x, int y);
diff --git a/16/lib/intro/lib.c b/16/lib/intro/lib.c
index 2ee39660..d0e7a83b 100644
--- a/16/lib/intro/lib.c
+++ b/16/lib/intro/lib.c
@@ -1,3 +1,249 @@
+/*
+ * LIB.C v1.2a
+ *
+ * by Robert Schmidt
+ * (C)1993 Ztiff Zox Softwear
+ *
+ * Simple graphics library to accompany the article
+ * 
+ *					  INTRODUCTION TO MODE X.
+ * 
+ * This library provides the basic functions for initializing and using
+ * unchained (planar) 256-color VGA modes.  Currently supported are:
+ *
+ *	  - 320x200
+ *	  - 320x240
+ *
+ * Functions are provided for:
+ *
+ *	  - initializing one of the available modes
+ *	  - setting the start address of the VGA refresh data
+ *	  - setting active and visible display pages
+ *	  - writing and reading a single pixel to/from video memory
+ *
+ * The library is provided as a demonstration only, and is not claimed
+ * to be particularly efficient or suited for any purpose.  It has only
+ * been tested with Borland C++ 3.1 by the author.  Comments on success
+ * or disaster with other compilers are welcome.
+ *
+ * This file is public domain.  Do with it whatever you'd like, but
+ * please don't distribute it without the article.
+ *
+ * Thanks go out to various helpful netters who spotted the 0xE7 bug
+ * in the set320x240x256() function!
+ *
+ * Modified by sparky4 so it can be compiled in open watcom ^^
+ */
+
+
+
+
+/*
+ * We 'require' a large data model simply to get rid of explicit 'far'
+ * pointers and compiler specific '_fmemset()' functions and the likes.
+ */
+#if !defined(__COMPACT__)
+# if !defined(__LARGE__)
+#  if !defined(__HUGE__)
+#   error Large data model required!  Try compiling with 'wcc -0 -ml lib.c'.
+#  endif
+# endif
+#endif
+
+#include <dos.h>
+#include <mem.h>
+#include <conio.h>
+
+//code from old library!
+/*src¥lib¥*/
+#include "dos_gfx.h"
+
+int old_mode;
+//color てすと
+int gq = LGQ;
+//てすと
+int q = 0;
+int bakax = 0, bakay = 0;
+cord xx = rand()&0%320, yy = rand()&0%240, sx = 0, sy = 0;
+byte coor;
+
+/*
+ * Comment out the following #define if you don't want the testing main()
+ * to be included.
+ */
+#define TESTING
+
+/*
+ * Define the port addresses of some VGA registers.
+ */
+#define CRTC_ADDR	   0x3d4   /* Base port of the CRT Controller (color) */
+
+#define SEQU_ADDR	   0x3c4   /* Base port of the Sequencer */
+#define GRAC_ADDR	   0x3ce   /* Base port of the Graphics Controller */
+#define STATUS_ADDR     0x3DA
+
+
+/*
+ * Make a far pointer to the VGA graphics buffer segment.  Your compiler
+ * might not have the MK_FP macro, but you'll figure something out.
+ */
+byte *vga = (byte *) MK_FP(0xA000, 0);
+
+
+/*
+ * width and height should specify the mode dimensions.  widthBytes
+ * specify the width of a line in addressable bytes.
+ */
+unsigned width, height, widthBytes;
+
+/*
+ * actStart specifies the start of the page being accessed by
+ * drawing operations.  visStart specifies the contents of the Screen
+ * Start register, i.e. the start of the visible page.
+ */
+unsigned actStart, visStart;
+
+/*
+ * set320x200x256_X()
+ *	  sets mode 13h, then turns it into an unchained (planar), 4-page
+ *	  320x200x256 mode.
+ */
+void set320x200x256_X(void)
+		{
+		union REGS r;
+
+		/* Set VGA BIOS mode 13h: */
+		r.x.ax = 0x0013;
+		int86(0x10, &r, &r);
+
+		/* Turn off the Chain-4 bit (bit 3 at index 4, port 0x3c4): */
+		outpw(SEQU_ADDR, 0x0604);
+
+		/* Turn off word mode, by setting the Mode Control register
+		of the CRT Controller (index 0x17, port 0x3d4): */
+		outpw(CRTC_ADDR, 0xE317);
+
+		/* Turn off doubleword mode, by setting the Underline Location
+		   register (index 0x14, port 0x3d4): */
+		outpw(CRTC_ADDR, 0x0014);
+
+		/* Clear entire video memory, by selecting all four planes, then
+		   writing 0 to entire segment. */
+		outpw(SEQU_ADDR, 0x0F02);
+		memset(vga+1, 0, 0xffff); /* stupid size_t exactly 1 too small */
+		vga[0] = 0;
+
+		/* Update the global variables to reflect dimensions of this
+		   mode.  This is needed by most future drawing operations. */
+		width		   = 320;
+		height  = 200;
+
+		/* Each byte addresses four pixels, so the width of a scan line
+		   in *bytes* is one fourth of the number of pixels on a line. */
+		widthBytes = width / 4;
+
+		/* By default we want screen refreshing and drawing operations
+		   to be based at offset 0 in the video segment. */
+		actStart = visStart = 0;
+
+		}
+
+/*
+ * setActiveStart() tells our graphics operations which address in video
+ * memory should be considered the top left corner.
+ */
+void setActiveStart(unsigned offset)
+		{
+		actStart = offset;
+		}
+
+/*
+ * setVisibleStart() tells the VGA from which byte to fetch the first
+ * pixel when starting refresh at the top of the screen.  This version
+ * won't look very well in time critical situations (games for
+ * instance) as the register outputs are not synchronized with the
+ * screen refresh.  This refresh might start when the high byte is
+ * set, but before the low byte is set, which produces a bad flicker.
+ */
+void setVisibleStart(unsigned offset)
+		{
+		visStart = offset;
+		outpw(CRTC_ADDR, 0x0C);		 /* set high byte */
+		outpw(CRTC_ADDR+1, visStart >> 8);
+		outpw(CRTC_ADDR, 0x0D);		 /* set low byte */
+		outpw(CRTC_ADDR+1, visStart & 0xff);
+		}
+
+/*
+ * setXXXPage() sets the specified page by multiplying the page number
+ * with the size of one page at the current resolution, then handing the
+ * resulting offset value over to the corresponding setXXXStart()
+ * function.  The first page is number 0.
+ */
+void setActivePage(int page)
+		{
+		setActiveStart(page * widthBytes * height);
+		}
+
+void setVisiblePage(int page)
+		{
+		setVisibleStart(page * widthBytes * height);
+		}
+
+void putPixel_X(int x, int y, byte color)
+		{
+		/* Each address accesses four neighboring pixels, so set
+		   Write Plane Enable according to which pixel we want
+		   to modify.  The plane is determined by the two least
+		   significant bits of the x-coordinate: */
+		outp(0x3c4, 0x02);
+		outp(0x3c5, 0x01 << (x & 3));
+
+		/* The offset of the pixel into the video segment is
+		   offset = (width * y + x) / 4, and write the given
+		   color to the plane we selected above.  Heed the active
+		   page start selection. */
+		vga[(unsigned)(widthBytes * y) + (x / 4) + actStart] = color;
+
+		}
+
+byte getPixel_X(int x, int y)
+		{
+		/* Select the plane from which we must read the pixel color: */
+		outpw(GRAC_ADDR, 0x04);
+		outpw(GRAC_ADDR+1, x & 3);
+
+		return vga[(unsigned)(widthBytes * y) + (x / 4) + actStart];
+
+		}
+
+void set320x240x256_X(void)
+		{
+		/* Set the unchained version of mode 13h: */
+		set320x200x256_X();
+
+		/* Modify the vertical sync polarity bits in the Misc. Output
+		   Register to achieve square aspect ratio: */
+		outp(0x3C2, 0xE3);
+
+		/* Modify the vertical timing registers to reflect the increased
+		   vertical resolution, and to center the image as good as
+		   possible: */
+		outpw(0x3D4, 0x2C11);		   /* turn off write protect */
+		outpw(0x3D4, 0x0D06);		   /* vertical total */
+		outpw(0x3D4, 0x3E07);		   /* overflow register */
+		outpw(0x3D4, 0xEA10);		   /* vertical retrace start */
+		outpw(0x3D4, 0xAC11);		   /* vertical retrace end AND wr.prot */
+		outpw(0x3D4, 0xDF12);		   /* vertical display enable end */
+		outpw(0x3D4, 0xE715);		   /* start vertical blanking */
+		outpw(0x3D4, 0x0616);		   /* end vertical blanking */
+
+		/* Update mode info, so future operations are aware of the
+		   resolution */
+		height = 240;
+
+		}
+
 /*
  * The library testing routines follows below.
  */
@@ -14,9 +260,6 @@ void doTest(void)
 
 		/* This is the way to calculate the number of pages available. */
 		pages = 65536L/(widthBytes*height); // apparently this takes the A000 address
-//		if(height==240) pages++;
-
-//		printf("%d¥n", pages);
 
 		for (p = 0; p <= pages; ++p)
 				{
@@ -28,22 +271,21 @@ void doTest(void)
 				   //{
 						for (x = 0; x <= width; ++x)
 								{
-//								putPixel_X(x, 0, p+1);
-								mxPutPixel(x, 0, p+1);
-								if(p!=pages) mxPutPixel(x, height-1, p+1);
-										else if(height==240) mxPutPixel(x, 99-1, p+1);
+								putPixel_X(x, 0, p+1);
+								if(p!=pages) putPixel_X(x, height-1, p+1);
+										else if(height==240) putPixel_X(x, 99-1, p+1);
 								}
 
 						for (y = 0; y <= height; ++y)
 								{
-								mxPutPixel(0, y, p+1);
-								if(p!=pages) mxPutPixel(width-1, y, p+1);
-										else if(height==240) mxPutPixel(width-1, y, p+1);
+								putPixel_X(0, y, p+1);
+								if(p!=pages) putPixel_X(width-1, y, p+1);
+										else if(height==240) putPixel_X(width-1, y, p+1);
 								}
 
 						for (x = 0; x < TILEWH; ++x)
 								for (y = 0; y < TILEWH; ++y)
-										mxPutPixel(x+(p+2)*16, y+(p+2)*TILEWH, x + y*TILEWH);
+										putPixel_X(x+(p+2)*16, y+(p+2)*TILEWH, x + y*TILEWH);
 						//}
 
 				}
@@ -64,15 +306,11 @@ void doTest(void)
 
 int main(void)
 		{
-		int key,d,xpos,ypos,xdir,ydir;
+		int key,d;
 		//short int temp;
 		// main variables
 		d=1; // switch variable
 		key=4; // default screensaver number
-		xpos=0;
-		ypos=0;
-		xdir=1;
-		ydir=1;
 //	  puts("First, have a look at the 320x200 mode.  I will draw some rubbish");
 //	  puts("on all of the four pages, then let you cycle through them by");
 //	  puts("hitting a key on each page.");
@@ -85,7 +323,6 @@ int main(void)
 //	  puts("Press a key when ready...");
 //	  getch();
 
-//++++0000
 		setvideo(1);
 // screen savers
 
@@ -106,33 +343,9 @@ int main(void)
 			ding(key);
 		}
 		//end of screen savers
-		//doTest();
-		for (int x = 0; x < width; ++x)
-			{
-				mxPutPixel(x, 0, 15);
-				mxPutPixel(x, height-1, 15);
-			}
-		for (int y = 0; y < height; ++y)
-			{
-				mxPutPixel(0, y, 15);
-				mxPutPixel(width-1, y, 15);
-			}
-		getch();
+		doTest();
 		while(!kbhit()){
-//			hScroll(1);
-//			scrolly(1);
-//			vScroll(1);
-//			delay(100);
-			//for(int i=0;i<TILEWH;i++){
-				ding(key);
-				mxPan(xpos,ypos);
-				mxWaitRetrace();
-				xpos=xpos+xdir;
-				ypos=ypos+ydir;
-				if( (xpos>239)  || (xpos<1))xdir=-xdir;
-				if( (ypos>179) || (ypos<1))ydir=-ydir; // { Hit a boundry, change
-			//    direction! }
-			//}
+
 		}
 		setvideo(0);
 		printf("wwww¥n%dx%d¥n", width,height);
-- 
2.39.5