
     >> Relesae 0.07a- December 2000
	-partially fixed bug for true color modes.
	 The system will work fine with:
	 5:5:5:1 = 15bit direct color video memory organisation
	 5:6:5:0 = 16bit direct color video memory organisation
	 8:8:8:8 = 32bit direct color video memory organisation
	 ----------------------------------------------------------------------
	 However the system will behave erratically with:
	 8:8:8:0 = 24bit direct color video memory organisation
	 (please do not specify a 24bit color mode)
	 or any other direct color organisation like 6:5:5:0 etc,
	 but I do not know if such direct color modes are really possible.
	 ----------------------------------------------------------------------
	 Futhermore YUV video memory organisation modes could have
	 their colors exchanged.
	 ----------------------------------------------------------------------
	 All the trucolor interface will be fixed soon for any mode
	 and video memory organisation.
	 The SVGA color palette will be extended to 16.8 mln colors,
	 now you can only chose from 262144 colors (standard VGA palette).
	 Most SVGA cards use the direct color memory model with
	 the bits per pixel field that is supported in this release.

-------------------------------------------------------------------------------

     >> Release 0.07 - December 2000
	-removed any copyright notice (you can use it or parts of it
	 anywhere you want) but common courtesy requires that you mention at least
	 my name and the original package if you port large parts of the library
	 to your own library programs.
	 Note however, that you do not have to mention anything if you do not
	 modify the library (you simply use the functions as an interface).
	-added Howto.txt file with How To Build info.
	-Important: this is a C/C++ version of the package.
	 Assembler programmers must adjust the stack after calling a function.
	 Look at the assembler example for more info.
	-any drawing function can be called in any Bits Per Pixel mode.
	 That includes any text and primitives (lines, circles, triangles).
	 Any mode (8/15/16/24/32 bit per pixel can be used if available through
	 VESA)!!!
	 WARNING: The truecolor interface (24/32 bit) doesn't work as expected,
	 but the highcolor (15/16 bit) and 256 color is OK.
	 The TRUECOLOR interface will be fixed in next release.
	-easy support for high and true color by the use of CreateColor function.
	-corrected IncreaseResolution and DecreaseResolution.
	 (press '+' and '-' during the second scene to check it out).
	-corrected triangle drawing function (completely different).
	-corrected documentation on multi buffering.
	-removed doc on tripple buffering (that was not a good explanation!)
	-removed non-important functions.

-------------------------------------------------------------------------------

     >> Release 0.06 - September 2000
	-fixed important bug in VESA 1.2 support (sorry...)
	 I usually use VESA 2.0 and I forgot to test it with VESA 1.2

-------------------------------------------------------------------------------

     >> Release 0.05 - September 2000
	-Added C/C++ support (many changes in existing functions).
	-Updated documentation.
	-Fixed bugs PutPixel, GetPixel, PutText, ScrollText, PutTextHicolor.
	-Corrected extremely important bug in Flip procedure (page flipping
	 with real mode interface).

-------------------------------------------------------------------------------

     >> Release 0.04a - August 2000
        -I totally removed the MOD and WAV playing routines, because I wasn't
         sure wheather I could include them in my package even in modified
         form but leaving the original author copyright.
	-Therefore there is no need for Sound Blaster to run the test program.

-------------------------------------------------------------------------------

     >> Release 0.04 - August 2000
	-corrected bug in DecreaseResolution (vesa.asm) now when you are in
	 a non standard resolution (not defined in the buffer) the system 
	 will not issue an error (hung itself).
	-added support for system virtual buffer (vesa 1.2 and below)
	 this is called simulated page flipping and it also works when there
	 is only one page available (like in 1280x1024x256 on a 2MB SVGA card)
	 The way the system will behave is as follows:
         1.Try double buffering in video memory using PMODE interface and LFB.
         2.Try double buffering in video memory with RM interface and LFB.
         3.Try double buffering in system memory with Linear Frame Buffering.
         4.Try double buffering in system memory with Bank Switching method.
         The first method is the fastest and the last one the sloooooowest.
	-corrected important errors in the VESA 1.2 support code (vesa.asm).
        -corrected very important bug in PutVESAScreen (for VESA 1.2).
	-corrected bug in test.asm (free memory allocated for PCX image).
	-corrected a few non important bugs + some cosmetic changes.
	-short info in vesa.txt file about porting the page flipping system
	 to 3d or 2d drawing engines that support virtual screen.

-------------------------------------------------------------------------------
     >> Release 0.03 - August 2000
	-corrected documentation info in manual.doc, vesa.asm and draw.asm file
	 removed pushad/popad from those functions (edi must be returned)
	 WriteWordSVGA, WriteWordSVGAHicolor (added EDI info)
	 PutText, PutTextHicolor (added EDI info)
	-removed include file errors.inc form modload.asm file
	-a few cosmetic changes (like displaying the current SVGA resolution)
	-corrected important bug in DecreaseResolution (vesa.asm)
	 now it works with all interfaces (RAW/XMS/VCPI/DPMI/Windows)

-------------------------------------------------------------------------------
     >> Release 0.02 - July 2000
	-fixed bug in scanline drawing algorithm (more precise now) - DRAW.ASM
	 procedures : XLine, FTriangle
	-fixed bug is errormsg macro in 'include\error.mac' file
	-added Line algorithm (without clipping)
	-polish text translated to english.
	-detailed documentation for every function in file MANUAL.DOC

*******************************************************************************
	This document explains the use of SVGA graphics procedures.
	You can use this code or part of it in any way you find useful.
	The author (Piotr Ulaszewski) does not take any responsability for
	special, incidental or any other quind of dameges arising out of or
	resulting from the use, misuse or modification of the code.
	Futhermore the author does not take any quind of responsability
	for any text written in this readme.txt file and does not even
	guarantee that anything explained here is really true !!!!!
*******************************************************************************

 WARNING: You must have NASM and a 32-bit linker for DOS to compile this
	sample. You should have a 32-bit C/C++ compiler in order to compile
	the C example.
	NASM is a free assembler and can be downloaded from the internet.
	You can also find 32-bit linkers on the internet (like the Watcom
	linker WLINK).


	This code contains examples of some unfinished procedures I wrote two
 years ago, when learning 32-bit assembly.  I only made a few changes needed
 to release the code.  To use the library (currently in many obj files, but
 you may bind them using a library utility like Borland's Tlib) you must
 include the files:

	For ASM programmers:
		- globals.inc (all library functions available are declared)
		- segments.inc (standard 32bit segment declarations)
		- message.mac (predefined macros that you can use)
		- scans.inc (keyboard scan codes available)
		- int.inc (keyboard handler replacer)

	For C/C++ programmers:
		- scans.h (kayboard scan codes)
		- flip2.h (prototypes for library functions)
		- dpmi.h (dpmi interface in C/C++)
		- extra.h (functions available if you do not have a 32-bit
		  compiler for DOS)

 To link your code with the library (look at the TEST.ASM example) you must
 include all the library obj files (draw.obj, fformats.obj, vesa.obj) and 
 your program - test.obj.  The simplest way of doing it is with WATCOM linker
 (produces LE files) and binds a dos extender directly to the executable.
 But you may also use anither 32bit linker, provided that the dos extender
 binded to the executable is DPMI 0.9 compliant.
 Don't forget to link dpmi.obj and (extra.obj) if you are compiling
 a C/C++ program - t.obj.


	This package includes a drawing module : DRAW.ASM
		- draws lines, triangles, text, scrols text
		  when drawing in video memory it makes sure to stay aligned
		  on dword boundary to be faster.

	The vesa video functions module : VESA.ASM
		- vesa initialization functions
		- page fliping procedure to work with virtual screen,
		  double buffering and vertical refresh checking.

	The file formats utility : FFORMATS.ASM
		- Loading of PCX image and activating PCX palette.


	The file TEST.EXE or T.EXE is a 32-bit example of using most of the
 procedures in 256 colors (8-bit) and 32768 colors (15-bit) SVGA VESA 2.0.
 With double buffering in video memory (like in DirectX) the animation
 in hi-res SVGA modes can be really fast even on 486 with a PCI SVGA card.
 The first scene shows a PCX image in 640x480x256 mode. (nothing unusual).
 The second scene draws a triangle in the backgroung while scrolling vertical
 text in the foreground, the coordinates of the triangle are changed for
 evry frame.
 The third scene is a simple SVGA hicolor test (640x400x32768) or if your
 computer does not support it (320x200x32768).  All the colors are written
 to the virtual buffer the same way for evry frame in order to see the
 framerate. The whole buffer is filled (640x400x32768 = 500Kb of data
 for frame). This would be 1000Kb when taking into account that FLIP must
 clear the virtual buffer.


	The FLIP function in the library uses double buffering only when
 VESA 2.0 allows it.  You will have a front buffer (visible on the screen and
 a back buffer that you can write to.  When you call flip to show the virtual
 screen the pointers are exchanged and a rep stosd is executed on the new
 virtual screen in order to clear it.
	You should use a VESA 2.0 implementation with PMODE interface,
 because it is faster.  To change the SVGA display start, a VESA 2.0 with
 no PMODE interface must switch to real mode in order to execute the command,
 and balancing between real and protected mode for every frame takes additional
 clocks.



						Piotr Ulaszewski
						Suchy Dwor 18a
						Wroclaw
						Poland
						spiderman@poczta.arena.pl


 P.S. The code works fine under any system configuration including Windows 9x.
      But please, do not switch to another application while running under
      Windows 95/98, because when you switch back the display will loose
      it's refresh rate (due to the use of extended VESA modes).
      You can press ESC at any time during the sample to exit.  Simply press
      space to move on to next scene.

      In the first release I forgot to say a word about a DOS Extender
      that I use for all my programs in DOS, blame me...
      Well it's called WDOSX, was written by Michael Tippach, 
      it supports most C/C++ compilers (WATCOM, BORLAND), delphi compilers,
      and verison 96a2 is still completely free...

      If you use parts of my code in your programs, please let me know...
      Tell me what you think.  May be some suggestions on future releases?
      Contact me by Email at spiderman@poczta.arena.pl or simply send me
      a postcard.  You can write in english, french or polish (the choice
      is yours).  However I do not check my Email every day, so be patient...

