Skip to content

Releases: Baron-von-Riedesel/HX

v2.22pre1

31 Aug 15:28
Compare
Choose a tag to compare
v2.22pre1 Pre-release
Pre-release

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

12 Feb 17:54
Compare
Choose a tag to compare

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

28 Jan 08:20
Compare
Choose a tag to compare

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

02 Apr 10:00
Compare
Choose a tag to compare

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

01 Nov 17:28
4f46d12
Compare
Choose a tag to compare

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 ).