]> 4ch.mooo.com Git - 16.git/blobdiff - 16/dos_gfx.cpp
modified: 16/DOS_GFX.EXE
[16.git] / 16 / dos_gfx.cpp
index 5f31ad4ef6faf3d55eda112fbe71e8a5695e19c3..836382c80d4e324ceb5dee1ae36b6458455f6a9a 100644 (file)
@@ -6,20 +6,20 @@
  *\r
  * Simple graphics library to accompany the article\r
  * \r
- *                     INTRODUCTION TO MODE X.\r
+ *                                       INTRODUCTION TO MODE X.\r
  * \r
  * This library provides the basic functions for initializing and using\r
  * unchained (planar) 256-color VGA modes.  Currently supported are:\r
  *\r
- *     - 320x200\r
- *     - 320x240\r
+ *       - 320x200\r
+ *       - 320x240\r
  *\r
  * Functions are provided for:\r
  *\r
- *     - initializing one of the available modes\r
- *     - setting the start address of the VGA refresh data\r
- *     - setting active and visible display pages\r
- *     - writing and reading a single pixel to/from video memory\r
+ *       - initializing one of the available modes\r
+ *       - setting the start address of the VGA refresh data\r
+ *       - setting active and visible display pages\r
+ *       - writing and reading a single pixel to/from video memory\r
  *\r
  * The library is provided as a demonstration only, and is not claimed\r
  * to be particularly efficient or suited for any purpose.  It has only\r
@@ -32,7 +32,7 @@
  * Thanks go out to various helpful netters who spotted the 0xE7 bug\r
  * in the set320x240x256() function!\r
  *\r
- * modified by sparky4 so it can be compiled in open watcom ^^\r
+ * Modified by sparky4 so it can be compiled in open watcom ^^\r
  */\r
 \r
 \r
@@ -56,7 +56,8 @@
 \r
 //code from old library!\r
 /*src\lib\*/\r
-#include "dos_gfx.h"\r
+#include "dos_gfx.h"
+#include "lib\x\modex.h"\r
 \r
 int old_mode;\r
 //color \82Ä\82·\82Æ\r
@@ -76,10 +77,10 @@ byte coor;
 /*\r
  * Define the port addresses of some VGA registers.\r
  */\r
-#define CRTC_ADDR      0x3d4   /* Base port of the CRT Controller (color) */\r
+#define CRTC_ADDR         0x3d4   /* Base port of the CRT Controller (color) */\r
 \r
-#define SEQU_ADDR      0x3c4   /* Base port of the Sequencer */\r
-#define GRAC_ADDR      0x3ce   /* Base port of the Graphics Controller */\r
+#define SEQU_ADDR         0x3c4   /* Base port of the Sequencer */\r
+#define GRAC_ADDR         0x3ce   /* Base port of the Graphics Controller */\r
 \r
 \r
 /*\r
@@ -105,56 +106,56 @@ unsigned actStart, visStart;
 \r
 /*\r
  * set320x200x256_X()\r
- *     sets mode 13h, then turns it into an unchained (planar), 4-page\r
- *     320x200x256 mode.\r
+ *       sets mode 13h, then turns it into an unchained (planar), 4-page\r
+ *       320x200x256 mode.\r
  */\r
 void set320x200x256_X(void)\r
-       {\r
-       union REGS r;\r
-\r
-       /* Set VGA BIOS mode 13h: */\r
-       r.x.ax = 0x0013;\r
-       int86(0x10, &r, &r);\r
-\r
-       /* Turn off the Chain-4 bit (bit 3 at index 4, port 0x3c4): */\r
-       outpw(SEQU_ADDR, 0x0604);\r
-\r
-       /* Turn off word mode, by setting the Mode Control register\r
-       of the CRT Controller (index 0x17, port 0x3d4): */\r
-       outpw(CRTC_ADDR, 0xE317);\r
-\r
-       /* Turn off doubleword mode, by setting the Underline Location\r
-          register (index 0x14, port 0x3d4): */\r
-       outpw(CRTC_ADDR, 0x0014);\r
-\r
-       /* Clear entire video memory, by selecting all four planes, then\r
-          writing 0 to entire segment. */\r
-       outpw(SEQU_ADDR, 0x0F02);\r
-       memset(vga+1, 0, 0xffff); /* stupid size_t exactly 1 too small */\r
-       vga[0] = 0;\r
-\r
-       /* Update the global variables to reflect dimensions of this\r
-          mode.  This is needed by most future drawing operations. */\r
-       width           = 320;\r
-       height  = 200;\r
-\r
-       /* Each byte addresses four pixels, so the width of a scan line\r
-          in *bytes* is one fourth of the number of pixels on a line. */\r
-       widthBytes = width / 4;\r
-\r
-       /* By default we want screen refreshing and drawing operations\r
-          to be based at offset 0 in the video segment. */\r
-       actStart = visStart = 0;\r
-       }\r
+               {\r
+               union REGS r;\r
+\r
+               /* Set VGA BIOS mode 13h: */\r
+               r.x.ax = 0x0013;\r
+               int86(0x10, &r, &r);\r
+\r
+               /* Turn off the Chain-4 bit (bit 3 at index 4, port 0x3c4): */\r
+               outpw(SEQU_ADDR, 0x0604);\r
+\r
+               /* Turn off word mode, by setting the Mode Control register\r
+               of the CRT Controller (index 0x17, port 0x3d4): */\r
+               outpw(CRTC_ADDR, 0xE317);\r
+\r
+               /* Turn off doubleword mode, by setting the Underline Location\r
+                  register (index 0x14, port 0x3d4): */\r
+               outpw(CRTC_ADDR, 0x0014);\r
+\r
+               /* Clear entire video memory, by selecting all four planes, then\r
+                  writing 0 to entire segment. */\r
+               outpw(SEQU_ADDR, 0x0F02);\r
+               memset(vga+1, 0, 0xffff); /* stupid size_t exactly 1 too small */\r
+               vga[0] = 0;\r
+\r
+               /* Update the global variables to reflect dimensions of this\r
+                  mode.  This is needed by most future drawing operations. */\r
+               width              = 320;\r
+               height  = 200;\r
+\r
+               /* Each byte addresses four pixels, so the width of a scan line\r
+                  in *bytes* is one fourth of the number of pixels on a line. */\r
+               widthBytes = width / 4;\r
+\r
+               /* By default we want screen refreshing and drawing operations\r
+                  to be based at offset 0 in the video segment. */\r
+               actStart = visStart = 0;\r
+               }\r
 \r
 /*\r
  * setActiveStart() tells our graphics operations which address in video\r
  * memory should be considered the top left corner.\r
  */\r
 void setActiveStart(unsigned offset)\r
-       {\r
-       actStart = offset;\r
-       }\r
+               {\r
+               actStart = offset;\r
+               }\r
 \r
 /*\r
  * setVisibleStart() tells the VGA from which byte to fetch the first\r
@@ -165,13 +166,13 @@ void setActiveStart(unsigned offset)
  * set, but before the low byte is set, which produces a bad flicker.\r
  */\r
 void setVisibleStart(unsigned offset)\r
-       {\r
-       visStart = offset;\r
-       outpw(CRTC_ADDR, 0x0C);         /* set high byte */\r
-       outpw(CRTC_ADDR+1, visStart >> 8);\r
-       outpw(CRTC_ADDR, 0x0D);         /* set low byte */\r
-       outpw(CRTC_ADDR+1, visStart & 0xff);\r
-       }\r
+               {\r
+               visStart = offset;\r
+               outpw(CRTC_ADDR, 0x0C);          /* set high byte */\r
+               outpw(CRTC_ADDR+1, visStart >> 8);\r
+               outpw(CRTC_ADDR, 0x0D);          /* set low byte */\r
+               outpw(CRTC_ADDR+1, visStart & 0xff);\r
+               }\r
 \r
 /*\r
  * setXXXPage() sets the specified page by multiplying the page number\r
@@ -180,128 +181,105 @@ void setVisibleStart(unsigned offset)
  * function.  The first page is number 0.\r
  */\r
 void setActivePage(int page)\r
-       {\r
-       setActiveStart(page * widthBytes * height);\r
-       }\r
+               {\r
+               setActiveStart(page * widthBytes * height);\r
+               }\r
 \r
 void setVisiblePage(int page)\r
-       {\r
-       setVisibleStart(page * widthBytes * height);\r
-       }\r
+               {\r
+               setVisibleStart(page * widthBytes * height);\r
+               }\r
 \r
 void putPixel_X(int x, int y, byte color)\r
-       {\r
-       /* Each address accesses four neighboring pixels, so set\r
-          Write Plane Enable according to which pixel we want\r
-          to modify.  The plane is determined by the two least\r
-          significant bits of the x-coordinate: */\r
-       outp(0x3c4, 0x02);\r
-       outp(0x3c5, 0x01 << (x & 3));\r
-\r
-       /* The offset of the pixel into the video segment is\r
-          offset = (width * y + x) / 4, and write the given\r
-          color to the plane we selected above.  Heed the active\r
-          page start selection. */\r
-       vga[(unsigned)(widthBytes * y) + (x / 4) + actStart] = color;\r
+               {\r
+               /* Each address accesses four neighboring pixels, so set\r
+                  Write Plane Enable according to which pixel we want\r
+                  to modify.  The plane is determined by the two least\r
+                  significant bits of the x-coordinate: */\r
+               outp(0x3c4, 0x02);\r
+               outp(0x3c5, 0x01 << (x & 3));\r
+\r
+               /* The offset of the pixel into the video segment is\r
+                  offset = (width * y + x) / 4, and write the given\r
+                  color to the plane we selected above.  Heed the active\r
+                  page start selection. */\r
+               vga[(unsigned)(widthBytes * y) + (x / 4) + actStart] = color;\r
 \r
-       }\r
+               }\r
 \r
 byte getPixel_X(int x, int y)\r
-       {\r
-       /* Select the plane from which we must read the pixel color: */\r
-       outpw(GRAC_ADDR, 0x04);\r
-       outpw(GRAC_ADDR+1, x & 3);\r
+               {\r
+               /* Select the plane from which we must read the pixel color: */\r
+               outpw(GRAC_ADDR, 0x04);\r
+               outpw(GRAC_ADDR+1, x & 3);\r
 \r
-       return vga[(unsigned)(widthBytes * y) + (x / 4) + actStart];\r
+               return vga[(unsigned)(widthBytes * y) + (x / 4) + actStart];\r
 \r
-       }\r
+               }\r
 \r
 void set320x240x256_X(void)\r
-       {\r
-       /* Set the unchained version of mode 13h: */\r
-       set320x200x256_X();\r
-\r
-       /* Modify the vertical sync polarity bits in the Misc. Output\r
-          Register to achieve square aspect ratio: */\r
-       outp(0x3C2, 0xE3);\r
-\r
-       /* Modify the vertical timing registers to reflect the increased\r
-          vertical resolution, and to center the image as good as\r
-          possible: */\r
-       outpw(0x3D4, 0x2C11);           /* turn off write protect */\r
-       outpw(0x3D4, 0x0D06);           /* vertical total */\r
-       outpw(0x3D4, 0x3E07);           /* overflow register */\r
-       outpw(0x3D4, 0xEA10);           /* vertical retrace start */\r
-       outpw(0x3D4, 0xAC11);           /* vertical retrace end AND wr.prot */\r
-       outpw(0x3D4, 0xDF12);           /* vertical display enable end */\r
-       outpw(0x3D4, 0xE715);           /* start vertical blanking */\r
-       outpw(0x3D4, 0x0616);           /* end vertical blanking */\r
-\r
-       /* Update mode info, so future operations are aware of the\r
-          resolution */\r
-       height = 240;\r
-\r
-       }\r
-
-
-/*tile*/
-// This is Bresenham's Line Drawing Algorithm\r
-void drawline(int x1, int y1, int x2, int y2, char col)\r
-{\r
-       int d, x, y, ax, ay, sx, sy, dx, dy;\r
-\r
-       dx = x2-x1;\r
-       ax = ABS(dx) << 1;\r
-       sx = SGN(dx);\r
-       dy = y2-y1;\r
-       ay = ABS(dy) << 1;\r
-       sy = SGN(dy);\r
-\r
-       x = x1;\r
-       y = y1;\r
-       if( ax > ay )\r
-       {\r
-               d = ay - (ax >> 1);\r
-               while( x != x2 )\r
-               {\r
-                       putPixel_X( x, y, col );\r
-                       if( d >= 0 )\r
-                       {\r
-                               y += sy;\r
-                               d -= ax;\r
-                       }\r
-               x += sx;\r
-               d += ay;\r
-               }\r
-       }\r
-       else\r
-       {\r
-               d = ax - (ay >> 1);\r
-               while( y != y2 )\r
                {\r
-                       putPixel_X( x, y, col );\r
-                       if( d >= 0 )\r
-                       {\r
-                               x += sx;\r
-                               d -= ay;\r
-                       }\r
-                       y += sy;\r
-                       d += ax;\r
-               }\r
-       }\r
-       return;\r
-}\r
+               /* Set the unchained version of mode 13h: */\r
+               set320x200x256_X();\r
+\r
+               /* Modify the vertical sync polarity bits in the Misc. Output\r
+                  Register to achieve square aspect ratio: */\r
+               outp(0x3C2, 0xE3);\r
+\r
+               /* Modify the vertical timing registers to reflect the increased\r
+                  vertical resolution, and to center the image as good as\r
+                  possible: */\r
+               outpw(0x3D4, 0x2C11);              /* turn off write protect */\r
+               outpw(0x3D4, 0x0D06);              /* vertical total */\r
+               outpw(0x3D4, 0x3E07);              /* overflow register */\r
+               outpw(0x3D4, 0xEA10);              /* vertical retrace start */\r
+               outpw(0x3D4, 0xAC11);              /* vertical retrace end AND wr.prot */\r
+               outpw(0x3D4, 0xDF12);              /* vertical display enable end */\r
+               outpw(0x3D4, 0xE715);              /* start vertical blanking */\r
+               outpw(0x3D4, 0x0616);              /* end vertical blanking */\r
+\r
+               /* Update mode info, so future operations are aware of the\r
+                  resolution */\r
+               height = 240;\r
 \r
-void drawrect(int x1, int y1, int x2, int y2, char color)\r
-{
-       drawline(x1,y1,x2,y1,color);\r
-       drawline(x1,y2,x2,y2,color);\r
-       drawline(x1,y1,x1,y2,color);\r
-       drawline(x2,y1,x2,y2+1,color);\r
-}
+               }\r
 \r
 \r
 /*-----------XXXX-------------*/\r
+/*tile*/\r
+void putColorBox_X(int x, int y, int w, int h, byte color) {\r
+       outp(0x3c4, 0x02);\r
+\r
+       int curx, cury;\r
+       unsigned drawptr;\r
+       for (curx=x; curx<(x+w); curx++) {\r
+               outp(0x3c5, 0x01 << (curx & 3));\r
+               drawptr = (unsigned)(widthBytes * y) + (curx / 4) + actStart;\r
+               for (cury=0; cury<h; cury++) {\r
+                       vga[drawptr] = color;\r
+                       drawptr += widthBytes;\r
+               }\r
+       }\r
+}\r
+/*OFFSET = 0\r
+WHILE NOT FINISHED DO\r
+  OFFSET = OFFSET + 80\r
+  IF OFFSET >= (200 * 80) THEN OFFSET = 0\r
+  DRAW TO ROW 200\r
+  SET VGA OFFSET = OFFSET\r
+  DRAW TO ROW -1 (was row 0 before scroll)\r
+END WHILE*//*\r
+void scrolly(){\r
+       int OFFSET = 0\r
+       WHILE NOT FINISHED DO\r
+               OFFSET = OFFSET + 80\r
+               IF OFFSET >= (240 * 80) THEN OFFSET = 0\r
+               RAW TO ROW 240\r
+               SET VGA OFFSET = OFFSET\r
+               DRAW TO ROW -1 (was row 0 before scroll)\r
+       }\r
+}\r
+*/\r
 //---------------------------------------------------\r
 //\r
 // Use the bios to get the address of the 8x8 font\r
@@ -312,252 +290,256 @@ void drawrect(int x1, int y1, int x2, int y2, char color)
 int far *\r
 getFont()\r
 {\r
-    union REGPACK rg;\r
-    int seg;\r
-    int off;\r
-    memset(&rg, 0, sizeof(rg));\r
-\r
-    rg.w.ax = 0x1130;\r
-    rg.h.bh = 0x03;\r
-    intr(0x10, &rg);\r
-    seg = rg.w.es;\r
-    off = rg.w.bp;\r
-    \r
-\r
-    return (int far *)MK_FP(seg, off);\r
+       union REGPACK rg;\r
+       int seg;\r
+       int off;\r
+       memset(&rg, 0, sizeof(rg));\r
+\r
+       rg.w.ax = 0x1130;\r
+       rg.h.bh = 0x03;\r
+       intr(0x10, &rg);\r
+       seg = rg.w.es;\r
+       off = rg.w.bp;\r
+       \r
+\r
+       return (int far *)MK_FP(seg, off);\r
 }\r
 \r
 void drawChar(int x, int y, int color, byte c)\r
 {\r
-       int i, j;\r
-       int mask;\r
-       int far *font = getFont() + (c * 8);\r
-\r
-       for (i = 0; i < 8; i++)\r
-       {\r
-               mask = *font;\r
-               for (j = 0; j < 8; j++)\r
+               int i, j;\r
+               int mask;\r
+               int far *font = getFont() + (c * 8);\r
+\r
+               for (i = 0; i < 8; i++)\r
                {\r
-                       if (mask & 0x80)\r
-                       {\r
-                               //pixel(x + j, y + i, color);\r
-                               putPixel_X(x + j, y + i, color);\r
-                       }\r
-                       mask <<= 1;\r
+                               mask = *font;\r
+                               for (j = 0; j < 8; j++)\r
+                               {\r
+                                               if (mask & 0x80)\r
+                                               {\r
+                                                               //pixel(x + j, y + i, color);\r
+                                                               putPixel_X(x + j, y + i, color);\r
+                                               }\r
+                                               mask <<= 1;\r
+                               }\r
+                               font++;\r
                }\r
-               font++;\r
-       }\r
 }\r
 \r
 void drawText(int x, int y, int color, byte string)\r
 {\r
-       while (string)\r
-       {\r
-               drawChar(x, y, color, string);\r
-               x += 8;\r
-               string++;\r
-       }\r
+               while (string)\r
+               {\r
+                               drawChar(x, y, color, string);\r
+                               x += 8;\r
+                               string++;\r
+               }\r
 }\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //                                                                         //\r
-// setvideo() - This function Manages the video modes                      //\r
+// setvideo() - This function Manages the video modes                                    //\r
 //                                                                         //\r
 /////////////////////////////////////////////////////////////////////////////\r
 void setvideo(/*byte mode, */int 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
-\r
-               // enter mode\r
-               set320x240x256_X();\r
-       }\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
+\r
+                               // enter mode\r
+                               set320x240x256_X();\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
+//              the Virtual screen.                                                                                     //\r
+//                                                                                                                                              //\r
 /////////////////////////////////////////////////////////////////////////////\r
 void cls(byte color, byte *Where){\r
-       _fmemset(Where, color, width*height);\r
+               _fmemset(Where, color, width*(height*17));\r
 }\r
 \r
 //color \82Ä\82·\82Æ\r
 int colortest(){\r
-       if(gq < NUM_COLORS){\r
-               cls(gq, vga);\r
-               gq++;\r
-       }else gq = 0;\r
-       return gq;\r
+               if(gq < NUM_COLORS){\r
+                               cls(gq, vga);\r
+                               gq++;\r
+               }else gq = 0;\r
+               return gq;\r
 }\r
 \r
 //color \82Ä\82·\82Æ\r
 int colorz(){\r
-       if(gq < HGQ){\r
-//----         cls(gq, vaddr);\r
-               cls(gq, vga);\r
-               gq++;\r
-       }else gq = LGQ;\r
-       return gq;\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(int svq){\r
-       if(sy < height+1){\r
-               if(sx < width+1){\r
-                       //plotpixel(xx, yy, coor, vga);\r
-                       //ppf(sx, sy, coor, vga);\r
-                       putPixel_X(sx, sy, coor);\r
-                       //printf("%d %d %d %d\n", sx, sy, svq, coor);\r
-                       sx++;\r
-               }else sx = 0;\r
-               if(sx == width){\r
-                       sy++;\r
-                       if(svq == 7) coor++;\r
-                       if(sy == height && svq == 8) coor = rand()%NUM_COLORS;\r
-               }\r
-       }else sy = 0;\r
+               if(sy < height+1){\r
+                               if(sx < width+1){\r
+                                               //plotpixel(xx, yy, coor, vga);\r
+                                               //ppf(sx, sy, coor, vga);\r
+                                               putPixel_X(sx, sy, coor);\r
+                                               //printf("%d %d %d %d\n", sx, sy, svq, coor);\r
+                                               sx++;\r
+                               }else sx = 0;\r
+                               if(sx == width){\r
+                                               sy++;\r
+                                               if(svq == 7) coor++;\r
+                                               if(sy == height && svq == 8) coor = rand()%NUM_COLORS;\r
+                               }\r
+               }else sy = 0;\r
 }\r
 \r
 /*-----------ding-------------*/\r
 int ding(int q){\r
-       setActivePage(0);\r
-       setVisiblePage(0);\r
-       int 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-1){\r
-                       if(coor < HGQ && coor < LGQ) coor = LGQ;\r
-                       if(coor < HGQ-1){\r
-                               coor++;\r
-               }else{ coor = LGQ;\r
-                       bakax = rand()%3; bakay = rand()%3;\r
+               setActivePage(0);\r
+               setVisiblePage(0);\r
+               int 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-1){\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
 \r
-       if(q == 5){ colortest(); return gq; }\r
-       if(q == 10){ colorz(); return gq; }\r
-       if(q == 11){ colorz(); delay(100); return gq; }\r
-       if(q == 8){ ssd(q); /*printf("%d\n", coor);*/ }\r
-       if(q == 6){\r
-               coor = rand()%NUM_COLORS;\r
-//----         cls(coor, vaddr);\r
-               cls(coor, vga);\r
-               //updatevbuff();\r
-       }\r
+               if(q == 8){ colorz(); return gq; }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, vaddr);\r
+                               cls(coor, vga);\r
+                               //updatevbuff();\r
+               }\r
 \r
-       if(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==width){bakax=0;}\r
-                       if(xx==0){bakax=1;}\r
-                       if(yy==height){bakay=0;}\r
-                       if(yy==0){bakay=1;}\r
-               }else if(q==3){\r
-                       if(xx!=width||yy!=height){\r
-                               if(xx==0){bakax=1;bakay=-1;d3y=1;}\r
-                               if(yy==0){bakax=1;bakay=0;d3y=1;}\r
-                               if(xx==width){bakax=-1;bakay=-1;d3y=1;}\r
-                               if(yy==height){bakax=1;bakay=0;d3y=1;}\r
-                       }else if(xx==width&&yy==height) xx=yy=0;\r
+               if(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==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--;//=TILEWH;\r
-                               }else if(bakax>0){\r
-                                       xx++;//=TILEWH;\r
-                               }\r
-                               if(!bakay){\r
-                                       yy--;//=TILEWH;\r
-                               }else if(bakay>0){\r
-                                       yy++;//=TILEWH;\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==width){bakax=0;}\r
+                                               if(xx==0){bakax=1;}\r
+                                               if(yy==height){bakay=0;}\r
+                                               if(yy==0){bakay=1;}\r
+                               }else if(q==3){\r
+                                               if(xx!=width||yy!=height){\r
+                                                               if(xx==0){bakax=1;bakay=-1;d3y=1;}\r
+                                                               if(yy==0){bakax=1;bakay=0;d3y=1;}\r
+                                                               if(xx==width){bakax=-1;bakay=-1;d3y=1;}\r
+                                                               if(yy==height){bakax=1;bakay=0;d3y=1;}\r
+                                               }else if(xx==width&&yy==height) xx=yy=0;\r
                                }\r
-                       }else{\r
-                               if(!bakax){\r
-                                       xx-=TILEWH;\r
-                               }else if(bakax>1){\r
-                                       xx+=TILEWH;\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--;//=TILEWH;\r
+                                                               }else if(bakax>0){\r
+                                                                               xx++;//=TILEWH;\r
+                                                               }\r
+                                                               if(!bakay){\r
+                                                                               yy--;//=TILEWH;\r
+                                                               }else if(bakay>0){\r
+                                                                               yy++;//=TILEWH;\r
+                                                               }\r
+                                               }else{\r
+                                                               if(!bakax){\r
+                                                                               xx-=TILEWH;\r
+                                                               }else if(bakax>1){\r
+                                                                               xx+=TILEWH;\r
+                                                               }\r
+                                                               if(!bakay){\r
+                                                                               yy-=TILEWH;\r
+                                                               }else if(bakay>1){\r
+                                                                               yy+=TILEWH;\r
+                                                               }\r
+                                               }\r
                                }\r
-                               if(!bakay){\r
-                                       yy-=TILEWH;\r
-                               }else if(bakay>1){\r
-                                       yy+=TILEWH;\r
-                               }\r
-                       }\r
-               }\r
-               // fixer\r
-               if(q!=16){\r
-                       if(xx<0) xx=width;\r
-                       if(yy<0) yy=height;\r
-                       if(xx>width) xx=0;\r
-                       if(yy>height) yy=0;\r
-               }\r
+                               // fixer\r
+                               //if(q!=16){\r
+                                               if(xx<0) xx=width;\r
+                                               if(yy<0) yy=height;\r
+                                               if(xx>width) xx=0;\r
+                                               if(yy>height) yy=0;\r
+                               //}\r
 \r
 //interesting effects\r
-               if(q==16)\r
-               {\r
-               int tx=0,ty=0;\r
-               tx+=xx+16;\r
-               ty+=yy+16;\r
-               putPixel_X(tx, ty, coor);
-               //drawrect(tx, ty, tx+TILEWH, ty+TILEWH, coor);\r
-               //printf("%d %d %d %d %d %d\n", xx, yy, tx, ty, TILEWH);\r
-\r
-               // plot the pixel\r
-//----         ppf(xx, yy, coor, vga);\r
-//++++0000             putPixel_X(xx, yy, coor);\r
-               }else drawrect(xx, yy, xx+TILEWH-1, yy+TILEWH-1, coor);\r
-//----         if(q==2) ppf(rand()%, rand()%height, 0, vga);\r
-               if(q==2||q==16) putPixel_X(rand()%width, rand()%height, 0);\r
-               if(q==2||q==4||q==16){ bakax = rand()%3; bakay = rand()%3; }\r
-               gq++;\r
+                               if(q==16)\r
+                               {\r
+                               int tx=0,ty=0;\r
+                               tx+=xx+16;\r
+                               ty+=yy+16;\r
+                               putPixel_X(tx, ty, coor);\r
+                               //drawrect(tx, ty, tx+TILEWH, ty+TILEWH, coor);\r
+                               //printf("%d %d %d %d %d %d\n", xx, yy, tx, ty, TILEWH);\r
+\r
+                               // plot the pixel\r
+//----           ppf(xx, yy, coor, vga);\r
+                               }else if(xx>=0 && xx<width && yy>=0 && yy<height){\r
+                                       putColorBox_X(xx, yy, TILEWH, TILEWH, coor);\r
+//++++0000                                     putPixel_X(xx, yy, coor);\r
+                               } \r
+\r
+//----           if(q==2) ppf(rand()%, rand()%height, 0, vga);\r
+                               if(q==2) putColorBox_X(rand()%width, rand()%height, TILEWH, TILEWH, 0);\r
+                               if(q==16) putPixel_X(rand()%width, rand()%height, 0);\r
+                               if(q==2||q==4||q==16){ bakax = rand()%3; bakay = rand()%3; }\r
+                               gq++;\r
 //if(xx<0||xx>320||yy<0||yy>240)\r
-//     printf("%d %d %d %d %d %d\n", xx, yy, coor, bakax, bakay, getPixel_X(xx,yy));\r
-//     printf("%d\n", getPixel_X(xx,yy));\r
+//       printf("%d %d %d %d %d %d\n", xx, yy, coor, bakax, bakay, getPixel_X(xx,yy));\r
+//       printf("%d\n", getPixel_X(xx,yy));\r
 //0000\r
-//     drawText(0, 0, 15, getPixel_X(xx,yy));\r
-       }else gq = LGQ;\r
-       return gq;\r
+//       drawText(0, 0, 15, getPixel_X(xx,yy));\r
+               }else gq = LGQ;\r
+               return gq;\r
 }\r
 \r
 \r
@@ -572,103 +554,103 @@ int ding(int q){
 #include <conio.h>\r
 \r
 void doTest(void)\r
-       {\r
-       int p, x, y, pages;\r
-\r
-       /* This is the way to calculate the number of pages available. */\r
-       pages = 65536L/(widthBytes*height); // apparently this takes the A000 address\r
+               {\r
+               int p, x, y, pages;\r
 \r
-       printf("%d\n", pages);\r
+               /* This is the way to calculate the number of pages available. */\r
+               pages = 65536L/(widthBytes*height); // apparently this takes the A000 address\r
 \r
-       for (p = 0; p <= pages; ++p)\r
-               {\r
-               setActivePage(p);\r
+               printf("%d\n", pages);\r
 \r
-               /* On each page draw a single colored border, and dump the palette\r
-                  onto a small square about the middle of the page. */\r
-                  \r
-                  //{\r
-                       for (x = 0; x <= width; ++x)\r
+               for (p = 0; p <= pages; ++p)\r
                                {\r
-                               putPixel_X(x, 0, p+1);\r
-                               if(p!=pages) putPixel_X(x, height-1, p+1);\r
-                                       else putPixel_X(x, 99-1, p+1);\r
-                               }\r
+                               setActivePage(p);\r
 \r
-                       for (y = 0; y <= height; ++y)\r
-                               {\r
-                               putPixel_X(0, y, p+1);\r
-                               if(p!=pages) putPixel_X(width-1, y, p+1);\r
-                                       else putPixel_X(width-1, y, p+1);\r
-                               }\r
+                               /* On each page draw a single colored border, and dump the palette\r
+                                  onto a small square about the middle of the page. */\r
 \r
-                       for (x = 0; x < 16; ++x)\r
-                               for (y = 0; y < 16; ++y)\r
-                                       putPixel_X(x+(p+2)*16, y+(p+2)*16, x + y*16);\r
-                       //}\r
+                                  //{\r
+                                               for (x = 0; x <= width; ++x)\r
+                                                               {\r
+                                                               putPixel_X(x, 0, p+1);\r
+                                                               if(p!=pages) putPixel_X(x, height-1, p+1);\r
+                                                                               else putPixel_X(x, 99-1, p+1);\r
+                                                               }\r
 \r
-               drawText(0, 0, 15, p);\r
+                                               for (y = 0; y <= height; ++y)\r
+                                                               {\r
+                                                               putPixel_X(0, y, p+1);\r
+                                                               if(p!=pages) putPixel_X(width-1, y, p+1);\r
+                                                                               else putPixel_X(width-1, y, p+1);\r
+                                                               }\r
 \r
-               }\r
+                                               for (x = 0; x < 16; ++x)\r
+                                                               for (y = 0; y < 16; ++y)\r
+                                                                               putPixel_X(x+(p+2)*16, y+(p+2)*16, x + y*16);\r
+                                               //}\r
 \r
-       /* Each pages will now contain a different image.  Let the user cycle\r
-          through all the pages by pressing a key. */\r
-       for (p = 0; p <= pages; ++p)\r
-               {\r
-               setVisiblePage(p);\r
-               //drawText(0, 240, 15, "bakapi");\r
-               getch();\r
-               }\r
+                               drawText(0, 0, 15, p);\r
 \r
-       }\r
+                               }\r
+\r
+               /* Each pages will now contain a different image.  Let the user cycle\r
+                  through all the pages by pressing a key. */\r
+               for (p = 0; p <= pages; ++p)\r
+                               {\r
+                               setVisiblePage(p);\r
+                               //drawText(0, 240, 15, "bakapi");\r
+                               getch();\r
+                               }\r
+\r
+               }\r
 \r
 /*\r
  * Library test (program) entry point.\r
  */\r
 \r
 int main(void)\r
-       {\r
-       int key,d;\r
-       // main variables\r
-       d=1; // switch variable\r
-       key=4; // default screensaver number\r
-//     puts("First, have a look at the 320x200 mode.  I will draw some rubbish");\r
-//     puts("on all of the four pages, then let you cycle through them by");\r
-//     puts("hitting a key on each page.");\r
-//     puts("Press a key when ready...");\r
-//     getch();\r
-\r
-//     doTest();\r
-\r
-//     puts("Then, check out Mode X, 320x240 with 3 (and a half) pages.");\r
-//     puts("Press a key when ready...");\r
-//     getch();\r
-\r
-       setvideo(1);\r
+               {\r
+               int key,d;\r
+               // main variables\r
+               d=1; // switch variable\r
+               key=4; // default screensaver number\r
+//       puts("First, have a look at the 320x200 mode.  I will draw some rubbish");\r
+//       puts("on all of the four pages, then let you cycle through them by");\r
+//       puts("hitting a key on each page.");\r
+//       puts("Press a key when ready...");\r
+//       getch();\r
+\r
+//       doTest();\r
+\r
+//       puts("Then, check out Mode X, 320x240 with 3 (and a half) pages.");\r
+//       puts("Press a key when ready...");\r
+//       getch();\r
+\r
+               setvideo(1);\r
 // screen savers\r
 \r
 /*while(d!=0){ // on!\r
-               if(!kbhit()){ // conditions of screen saver\r
-                       ding(key);\r
-               }else{\r
-                       setvideo(0);\r
-                       // user imput switch\r
-                       printf("Enter 1, 2, 3, 4, or 6 to run a screensaver, or enter 5 to quit.\n", getch());  // prompt the user\r
-                       scanf("%d", &key);\r
-                       //if(key==3){xx=yy=0;} // crazy screen saver wwww\r
-                       if(key==5) d=0;\r
-                       setvideo(1);\r
+                               if(!kbhit()){ // conditions of screen saver\r
+                                               ding(key);\r
+                               }else{\r
+                                               setvideo(0);\r
+                                               // user imput switch\r
+                                               printf("Enter 1, 2, 3, 4, or 6 to run a screensaver, or enter 5 to quit.\n", getch());  // prompt the user\r
+                                               scanf("%d", &key);\r
+                                               //if(key==3){xx=yy=0;} // crazy screen saver wwww\r
+                                               if(key==5) d=0;\r
+                                               setvideo(1);\r
+                               }\r
+               }*/ // else off\r
+               while(!kbhit()){ // conditions of screen saver\r
+                               ding(4);\r
+               }\r
+               //end of screen savers\r
+               doTest();\r
+               setvideo(0);\r
+               puts("Where to next?  It's your move! wwww");\r
+               printf("bakapi ver. 1.04.09.01\nis made by sparky4\81i\81\86\83Ö\81\85\81j feel free to use it ^^\nLicence: GPL v2\n");\r
+               return 0;\r
                }\r
-       }*/ // else off\r
-       while(!kbhit()){ // conditions of screen saver\r
-               ding(4);\r
-       }\r
-       //end of screen savers\r
-       doTest();\r
-       setvideo(0);\r
-       puts("Where to next?  It's your move! wwww");\r
-       printf("bakapi ver. 1.04.09a\nis made by sparky4\81i\81\86\83Ö\81\85\81j feel free to use it ^^\nLicence: GPL v2\n");\r
-       return 0;\r
-       }\r
 \r
 #endif\r