
 1. About JLoad

 JLoad is an extension for Jemm (both Jemm386 and JemmEx) which adds the
 following features:
 
 - it loads 32bit flat protected-mode modules (JLM) into Jemm's address space
 - when invoked for the first time it installs a protected-mode API which 
   then can be used by the JLMs.
 
 JLoad can be loaded as a device driver in CONFIG.SYS or from the command
 line. In any case it requires a JLM to be loaded as parameter.
 
 JLoad has some knowledge about Jemm internals. Therefore the versions of
 Jemm and JLoad always must match, else JLoad will refuse to do anything.


 2. Details about JLMs
 
 JLMs can be used for the following tasks:
 
 - implement a protected-mode version of a DOS device driver.
 - implement a protected-mode version of a DOS TSR.
 - provide services for other JLMs (kind of a ring 0 dll).
 - run as a ring 0 protected-mode application which will
   be unloaded automatically after it has its job done.
 - emulate hardware by trapping I/O port access.

 JLMs must be non-segmented and linked as Win32 PE binaries. But despite the
 similiarities, JLMs should not be confused with such binaries. Some of the
 differences are:
 
 - JLMs always run in ring 0 protected-mode.
 - there is no Win32 API (and also no DOS/DPMI API) available.
 - JLMs cannot be linked with Win32 import libraries.

 Because of the fundamental differences, JLMs must be patched after the
 link step with tool PATCHPE. Thus they aren't recognised anymore as Win32
 binaries.

 The only API JLMs can use directly is the one installed by JLoad, which more
 or less is a small subset of the Windows 3x/9x VMM API. This API usually is
 invoked by an INT 20h opcode, followed by two words which determine the
 module and function to be called. The API also allows "nested execution",
 that is, a JLM can indirectly call BIOS or other software interrupts outside
 of the client's context. For details about what functions are implemented
 see files JLM.INC or JLM.H.
 
 There is a strong similiarity between JLMs and Windows 3x/9x VxDs, but there
 are also some major differences:
 
 - Jemm does not support Virtual Machines (VMs) currently.
 - Jemm has no integrated DPMI host. Therefore the client will always be in
   V86-mode. DPMI applications can run only outside of Jemm's context with
   the help of an external DPMI host which runs as VCPI client.
 - JLMs run with interrupts disabled. If they do a lengthy operation or have
   to wait, they must "yield" to allow interrupts to be serviced.

 
 3. Documentation about JLoad's API

 A detailed documentation about the functions implemented by JLoad can be
 found in:
 
 - Win95 DDK, file VMM.HLP
 - Win98 DDK, file OTHER.CHM
 - Win2k DDK, file OTHER.CHM
 

 4. Using 386SWAT
 
 Jemm is compatible with the 386SWAT ring 0 debugger. This debugger is also
 the best choice to find errors in JLMs. However, to catch the most common
 type of errors in protected-mode - GPFs - with 386SWAT, one has to tell 
 386SWAT which GPFs are "expected" and which are not. The following line in 
 386SWAT.PRO should do the trick:
 
 GPSKIP=HLT,INI,IND,INS,OUTI,OUTD,OUTS,CRn
 
 
 5. History
 
 v5.68: bugfix: DMA lock ignored flag to check for 64 kB border crossing.
 v5.60: initial.

 
 6. License
 
 JLoad is FreeWare and can be redistributed.
 
 Japheth
 
