Copyright  Robert J. Amstadt, 1993.  All code is provided without
warranty.  It is my intent to cover this code with the Gnu Public
License.

So here goes release 0.2.0 of the Windows loader.  It will do some 
relocations and then run the program.  I have successfully loaded 
the Windows solitaire game.  Try it.  It currently stops a call to
GetObject().

WHAT'S NEW with version 0.2.0:
    - Alexandre Julliard has provided a replacement for the Tcl code.
      The new code uses Xlib and Xt directly with no intervening
      interpretted language.  This should reduce the learning
      curve for casual hackers.
    - I changed all GLOBAL_ names to Global.

WHAT'S NEW with version 0.1.1:
    - I have completed global memory allocation, but I don't like it.
      It is not 100% compatible with Windows.  I need some more kernel
      modifications for 100% compatibility.
    - Alexandre Julliard has provided written better emulation for
      the Windows message queue.

WHAT'S NEW with version 0.1.0:
    - Latest patches from Alexandre Julliard.
    - minor bug fix in if1632.S

WHAT'S NEW with version 0.0.5:
    - Patches from Alexandre Julliard.  Some integration with Tcl.
    - Generic interface for callback procedures.  This will allow
      callbacks into DLLs.
    - MakeProcInstance() has been implemented but untested.

WHAT'S NEW with version 0.0.4:
    - Eric Youngdale modified wine.c and selector.c to allow loading
      of Windows DLLs.
    - Added global memory allocation routines (GlobalAlloc, GlobalFree,
      and GlobalLock)
    - Bitmap resource loading into global memory.

WHAT'S NEW with version 0.0.3:
    - Fixed bug with sector sizes.
    - Registers at program startup are now set correctly.
    - Segment fixups for relocatable-segment internal entry points.
    - Fixed bug in DOS PSP structure.
    - Some resource loading is done.
    - Added "return" ordinal type to build program.
    - Added comment capability to build program.

WHAT'S NEW with version 0.0.2:

    - Again thanks to Eric Youngdale for some very useful comments.
    - The Windows startup code created by Micrsoft C 7.0 now runs 
      to completion.
    - Added a new patch to the kernel to increase the usable size of
      the ldt to the full 32 entries currently allowed.
    - Imported name relocations are now supported.
    - Source code for my infamous test program is now included.
    - A handful of basic Windows functions are now emulated.  See
      "kernel.spec" for examples of how to use the build program.

WHAT'S NEW with version 0.0.1:

    - Eric Youngdale contributed countless improvements in memory
      efficiency, bug fixes, and relocation.
    - The build program has been completed.  It now lets you specify
      how the main DLL entry point should interface to your emulation
      library routines.  A brief description of how to build these
      specifications is included in the file "build-spec.txt".
    - The code to dispatch builtin DLL calls is complete, but untested.

TODO:

    - Segment fixup code completion.
    - Trap and handle DOS and DPMI calls.
    - GlobalAlloc of code segments.
    - Rewrite global memory support including kernel mods to allow
      application to mess with page map.
    - complete and improve local heap allocation.
    - Handle self-loading applications.
    - Resource loading

INSTALLATION:

    Uncompress and untar this archive into the directory of your
choice.  The file "ldt.tar" contains a necessary kernel patch against
Linux 0.99.10.  "ldt.tar" is unchanged from the version released
with release 0.0.2.  In the directory /usr/src/linux (or whereever 
you keep your kernel sources), untar this file it contains three files:

	kernel/ldt.c
		- This is source for a new system call.
	
	include/linux/ldt.h
		- This contains structures defining the system call
		  interface.

	ldt.patch
		- This is a patch that must be applied to the kernel.
		  It updates two header files, and the kernel Makefile.

Or follow the same procedure with "ldt512.tar".  This file contains
Eric Youngdales patches for ALPHA-pl11.  These patches give the
emulator 512 ldt entries instead of the 32 available with the older
patch kit.

BUILD:

    The documentation for the build program is in the file build-spec.txt

FINALE:

Good luck,

	If you successfully add anything, please send me a copy.

Bob Amstadt
bob@amscons.com
