v2.20 HDPMI - ixed: 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.