Releases: Baron-von-Riedesel/HX
Releases · Baron-von-Riedesel/HX
v2.22pre1
hdpmi:
- fixed regression in v3.21: int 25h/26h caused a GPF in ring 0.
- fixed: int 31h, ax=507h: reject all page types except 0, 1 and 3; OTOH,
allow direct transition from "mapped" to "committed". - fixed: RF was lost when an IRQ returned and a stack switch was to happen.
- fixed: hiword(ecx) may have been != 0 in ResizeLDT(), resulting in a severe
host crash. - kernel debugger API ah=45h, int 68h, called if kd detected.
- support for jhdpmi JLM. Support is enabled for both HDPMIxx and HDPMIxxi.
- fixed: VCPI detection was skipped if any tsr responded to Int 2fh, ax=1600h.
- interrupt handling reworked; cmdline option -i removed.
- fixed: option -a (or HDPMI=32) didn't correctly restore region
3FFC000h-3FFF000h of the calling client.
v2.21
hdpmi:
- fixed: reset PAE in CR4 only if ensured cpu is in real-mode - previously
it caused a crash in Qemm if loaded with NOEMS. - IRQ routing: if interrupt hasn't been modified by a client, route IRQ
to the real vector in the IVT, not to the internally stored one. - HDPMIxxi: fixed SimulateIO function.
- HDPMIxxi: max trap ranges doubled ( 4 to 8 ).
- HDPMIxxi.exe are now linked as PE binaries. As with the standard veriants,
this ensures that 32-bit code and data won't share pages. - HDPMIST: option -t added to display TSS infos.
- HDPMIxxi: new API function 9 to trap CLI/STI.
- cmdline option -x got an optional shift factor.
dkrnl32:
- fatal exit if dkrnl32's exception handler detects a 16-bit SS.
- fixed: added missing 3. argument for RtlGetNtVersionNumbers().
v2.20
HDPMI
- fixed: pmstate variable moved to client-specific data region. This
bug was virtually irrelevant up to v3.19, but there it may have caused
a crash followed by DOS memory corruption. - fixed: in int 21h, ax=4Bh translation, try to translate only if al=0,
as it is and was documented. - fixed: in v3.19, if HDPMI=32 wasn't set, the required DOS memory was
reported too high if at least one client was already active. - fixed: raw mode switches to protected-mode didn't set a helper variable
that's used to distinguish IRQs and exceptions. As a consequence,
exceptions were then treated as IRQs, causing a crash. - int 25h/26h, displays in debug version: register esi was modified!
- set error status ax=0211h if int 25h/26h TLB overflow occurs.
- int 25h/26h and int 21h, ax=7305h transfer limit was actually
7.5 kB, since a part of the TLB was used for the diskio packet.
This is now copied to the RMS, so the full TLB is used for sector
transfers. - if exception occurs inside the host's default exception handling
( that tries to execute an int 21h, ax=4Cffh ), the client will
be killed ( and the host, if installed residently, will terminate,
if possible ). - vendor API "HDPMI" now available in release version. Allows to
"disable" host or to switch on/off HDPMI=32. - a disabled host will be reenabled when a client terminates.
- the HDPMI variants that run clients with IOPL=0 have now a full
8 KB IOPB, zeroed. They are included in HXRT, with an "i"-suffix. - enabled kernel debug API for the standard version.
- port trapping API added for HDPMI variants that run clients with IOPL=0.
- fixed: exc 0Dh in ring 0 for hdpmi16 was not detected reliably.
DPMILD32:
- bugfix: the last few bytes of DPMILD32's exit code was executed as 32-bit,
although the code was actually 16-bit; as a result, a wrong DOS exit
code was returned. - ensure the alias descriptor has a limit of -1 when accessing an MCB.
- bugfix: terminating in NTVDM caused fault if DPMILDR=2 wasn't set.
- cleaned debug displays.
- switch DPMILDR=1 removed. Instead, the loader detects if a debugger
is present via Int 41h and runs an Int 3 before program entry. - bugfix: changing value of DPMILDR=8 by API int 21h, ax=4b94h may have
caused the loader not to release the PSP and environment of a task. - switch DPMILDR=256 removed (loading NE dll DEBUGO32.DLL).
DKRNL32
- allow file size > 2 GB if not running on NT platforms
- GetLargestConsoleWindowSize: if current cols exceed "max", use current
BIOS values for rows & cols. - SetConsoleScreenBufferSize will accept current video params.
- int 41h, ax=159h: don't just return, but route this call to next handler.
- if debugger has been detected, don't handle Int 01 or Int 03.
- fixed: if application had no heap, GetCommandLine() failed.
- fixed: IRQ 1 handler didn't always enable interrupts before IRET; if
running with IOPL=0, this may have caused the application to "hang". - fatal exit if dkrnl32's exception handler detects a non-zero-based SS
segment.
v2.19
changes hx v2.19
hdpmi:
- fixed regression in v3.18: HDPMI32 & HDPMI16 couldn't be installed
simultaneously. - fixed regression in v3.18: a raw-mode switch to protected-mode from
code that was called via DPMI function 0x300|1|2 may have caused a
host stack corruption under certain conditions. - fixed in int 31h, ax=801h: the mapped region wasn't found (and hence
an error returned) if bits 0-11 weren't zero. - fixed int 31h, ax=509h: function did just map physical memory; now
it copies PTEs, which was the intention. - fixed int 31h, ax=503h/505h: resizing was rejected if block contained
"mapped" pages (included thru functions 508h/509h). - fixed int 31h, ax=503h/505h: resizing may have failed if the block's
address space was previously used to map a device (int 31h, ax=800h). - bugfix debug version: crash may have occured due to "16-bit" strings
that weren't fully copied. - fixed int 31h, ax=800h: under certain conditions, physical pages in
page pool may have "get lost", if HDPMI was installed residently. - fixed exception handling: in case a client used v1.0 functions to set
an exception handler, the LPMS remained in status "used" after first
exception. - DPMI function 0Eh (get coprocessor state): a 80487 is returned
instead of an 80387 if cpu is 80486+. - CR0.NE flag is no longer modified; that makes cmdline option -t
obsolete. It has been removed, as well as environment switch
HDPMI=32768. Instead, the default handler for interrupt 75h (Irq 0Dh)
will trigger a numeric exception 10h. - error msg "VCPI host has remapped PICs" changed to "VCPI host reports
remapped IRQs". - hdpmi debug displays (debug version only) may have caused an exc 00 if
the current screen resolution had 128 colums. - added HDPMIST.EXE, to display status of currently running HDPMI hosts.
- exhaustion of locked protected-mode stack will exit with fatal error.
- error codes returned in AX for int 31h, ax=503h/505h.
- disabled code for int 2Fh, ax=168a, ds:e/si="VIRTUAL SUPPORT" (32rtm).
- Regress16 directory added - 16-bit test cases.
dpmild32:
- bugfix: in nested execution, PSP may have become invalid, if DPMILDR=8
wasn't set.
dkrnl32:
- (re)enabled support for handling IRQ 0Dh on floating-point exceptions.
This is also an adaption to the changed behavior of HDPMI32.EXE, which
will no longer modify CR0.NE. - GetTickCount64 added.
- GetFileType() will no longer return FILE_TYPE_REMOTE (this value is
"unused" according to docs. - TryEnterCriticalSection added.
- file TIMERHLP, function _GetTimerValue(): interrupts no longer disabled
during PIT register read. - GetModuleHandleExA/W added.
- FindFirstFileExA/W added.
- InitializeSListHead added.
- SystemTimeToTzSpecificLocalTime: lpTimeZone argument wasn't checked
for NULL. - HeapReAlloc: don't reject newSize=0.
- HeapValidate: argument pMem==0 wasn't handled correctly.
- GetLocaleInfoA: added a few locales.
- GetLocaleInfoW: check LOCALE_RETURN_NUMBER flag.
- DeviceIoControl: return correct detection type for physical disk info.
- CreateProcess: if the cmdline was <= 126 bytes, but a previous call
of CreateProcess had a cmdline > 126, the called process got a wrong
cmdline. - GetDriveType: ramdisk on A: or B: wasn't detected.
v2.18
HDPMI:
- bugfix: nested real-mode stack handling did not work reliably
if nesting level was > 1. - bugfix: TLB was not allocated in an UMB if HDPMI itself was loaded
low. - bugfix: options -a and -i were incompatible and caused a crash if
nested execution of two clients occured. - bugfix: int 33h API translation for mouse event procs may not have
worked reliably if the clients did set the event procs concurrently. - bugfix: in exception frame for DPMI v1.0 the field PTE wasn't set
for page faults. - bugfix: int 31h, ax=8 (set limit of descriptor): if limit was >= 1 MB,
it wasn't checked that lowest 12 bits of DX were all 1. - bugfix: if a client allocated large amounts of descriptors and then
launched another client, the descriptors that this new client allocated
weren't automatically released. - HDPMI will now use DOS for its output if an exception occurs.
There is no longer any query if the client or the server is to
be terminated; also, video mode is never altered by the host, making
cmdline switch -k obsolete. - HDPMI does no longer intercept int 09h to detect if ctrl-alt-del
is pressed. Instead it intercepts int 15h, ah=4Fh. This avoids reading
the keyboard controller data port 60h, which should be done by the
keyboard driver only. - the memory handling in "Int15" or "raw" mode has been changed. HDPMI
will now report the amount of memory that was and is not used by a
client as free via Int 15h, ax=E801h. - if option -a is used ( or HDPMI=32 is set ), the first client won't
need additional DOS memory for a "cloned host". - the standard version of HDPMI will now allocate the host stack in
extended memory. The host stack size has been increased from 2 to 4 kB. - HDPMI does no longer respond to int 2Fh, ax=160Ah. So emvironment switch
HDPMI=16384 is obsolete and has been removed. - special register moves are no longer emulated if option -s is given.
- hdpmixx.exe are now linked as PE binaries in the "standard" version. This
ensures that 32-bit code and data won't share pages.
DPMILD32:
- bugfix: if option DPMILDR=8 was set, nested execution failed.
- bugfix: when terminating, segment register SS was temporarily connected
to a 16-bit data descriptor, which may have caused problems if the ring
0 stackpointer was >= 0x10000. - bugfix: if option DPMILDR=8 wasn't set and nested execution occured,
a GPF may have occured after an application has terminated. - linking the loader statically to a binary as a stub ( DPMILD32.BIN )
didn't work.
DKRNL32:
- if DPMI host is HDPMI, exception 0Eh (page faults) handler will be a
DPMI v1.0 handler; thus it gets the value of CR2 by standard means
without relying on special register emulation ( which was disabled in
HDPMI v3.18 with option -s ).