Merge branch 'unxed-dkrnl32-cp-utf8'
Recent Commits to HX:master (5)
-
Merge branch 'unxed-dkrnl32-cp-utf8'
-
hdpmi: add int 31h, ax=507h extension (set PCD/PWT flags); XMS hook i…
hdpmi: add int 31h, ax=507h extension (set PCD/PWT flags); XMS hook improved for A20 enable
-
a20gate: comment added
a20gate: comment added
-
HX#76: move UTF-8 conversions into WC2UTF8.ASM
HX#76: move UTF-8 conversions into WC2UTF8.ASM Assisted-by: OpenAI GPT-6 Luna
-
hdpmi: add int 31h, ax=507h extension (set PCD/PWT flags); XMS hook i…
hdpmi: add int 31h, ax=507h extension (set PCD/PWT flags); XMS hook improved for A20 enable
-
DKRNL32: CP_UTF8 in MultiByteToWideChar, WideCharToMultiByte, GetCPInfo
DKRNL32: CP_UTF8 in MultiByteToWideChar, WideCharToMultiByte, GetCPInfo First of the small PRs proposed in Baron-von-Riedesel/HX#75. Until now, MultiByteToWideChar and WideCharToMultiByte ignored the code page: bytes were zero-extended to WCHARs, and WCHARs were truncated to their low byte. A Win32 program that keeps its text in UTF-8 (CP_UTF8, 65001) got garbage for anything outside ASCII. With this change, CP_UTF8 is converted for real (WC2MB.ASM): - UTF-8 <-> UTF-16, with surrogate pairs for U+10000..U+10FFFF; - ill-formed input (overlong forms, encoded surrogates, values above U+10FFFF, truncated sequences, stray continuation bytes, unpaired surrogates) is replaced by U+FFFD exactly as Windows does it, including how many U+FFFD it gives. With MB_ERR_INVALID_CHARS / WC_ERR_INVALID_CHARS the call fails with ERROR_NO_UNICODE_TRANSLATION, and a too small buffer is reported first, also as on Windows; - length -1, size queries (buffer size 0) and ERROR_INSUFFICIENT_BUFFER behave as on Windows. GetCPInfo(CP_UTF8) now reports MaxCharSize = 4 (GETCPINF.ASM). All other code pages (CP_ACP, CP_OEMCP, ...) behave exactly as before. Mapping them through the DOS code page table is left for a separate PR. Testing: a differential test on GitHub Actions (windows-latest). WC2MB.ASM and GETCPINF.ASM are assembled with JWasm 2.20 using the flags of SrcEmu/DKRNL32/MAKEFILE (release and _DEBUG), then linked into a Win32 test program. Every case runs through both DKRNL32 and the kernel32 of Windows, and the result, the output and the last error must match. The test also checks that other code pages are unchanged. Test and workflow: https://github.com/unxed/sandbox/tree/main/hx-utf8. The full DKRNL32.DLL build and a run under HX itself were not done. DKRNLHIS.TXT is not touched, so that you can number the version yourself. AI disclosure: this change (code, test and this text) was written by the Claude Opus 5.5 model (Anthropic), working under the Lunobot instructions (https://github.com/unxed/lunobot) on the go2dos project (https://github.com/unxed/go2dos), at the request of the fork owner (@unxed). *Lunobot-1 (node 19d368003c6c048e43dbec70; LNX; Claude Opus 5.5)* Assisted-by: Claude Opus 5.5 (Anthropic) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-
v2.24pre1
v2.24pre1
-
hdpmi: fixed int 31h, ax=300h/301h/302h for rmSP=0, rmSS!=0
hdpmi: fixed int 31h, ax=300h/301h/302h for rmSP=0, rmSS!=0
-
hdpmi: leave NMIs masked when routing them to real-mode
hdpmi: leave NMIs masked when routing them to real-mode
-
hdpmi: real-mode calls 300/301/302 won't modify std real-mode DS/ES/F…
hdpmi: real-mode calls 300/301/302 won't modify std real-mode DS/ES/FS/GS
-
hdpmi: VCPI pm calls made NMI-safe
hdpmi: VCPI pm calls made NMI-safe
-
hdpmi: VCPI pm calls made NMI-safe
hdpmi: VCPI pm calls made NMI-safe
-
hdpmi: VCPI pm calls made NMI-safe
hdpmi: VCPI pm calls made NMI-safe
-
hdpmi: VCPI pm calls made NMI-safe
hdpmi: VCPI pm calls made NMI-safe
-
HDPMI: optional NMI-safe variant - switch ?NMISAFE
HDPMI: optional NMI-safe variant - switch ?NMISAFE
-
hdpmi: introduced HDPMIGBL struct
hdpmi: introduced HDPMIGBL struct
-
dkrnl32: fixed GetTempFileNameW
dkrnl32: fixed GetTempFileNameW
-
OW support: check for DOS extender in HX DOS32 startup code
OW support: check for DOS extender in HX DOS32 startup code
-
v2.23
v2.23
-
hdpmi: fixed int 31h, ax=301h/302h
hdpmi: fixed int 31h, ax=301h/302h
-
hdpmi: clear TF on entry PL0 PM since int 96h is optional now
hdpmi: clear TF on entry PL0 PM since int 96h is optional now
-
hdpmi, fixed regression v3.22: don't mask interrupts during exc display
hdpmi, fixed regression v3.22: don't mask interrupts during exc display
-
hxhelp: protect memory access for addresses with PL3 GDT selector
hxhelp: protect memory access for addresses with PL3 GDT selector
-
HDPMI=8192: run an Int3 on client's initial switch to pm
HDPMI=8192: run an Int3 on client's initial switch to pm
-
hdpmi: clear TF when calling CLI/STI handlers (IOPL=0 variant only)
hdpmi: clear TF when calling CLI/STI handlers (IOPL=0 variant only)
-
dosx: do no longer rely to be started from inside the Windows directory
dosx: do no longer rely to be started from inside the Windows directory