From e9c4e5ae58a1460509506a57b26c45b930933477 Mon Sep 17 00:00:00 2001 From: "E. C. Masloch" Date: Wed, 11 Nov 2026 20:37:30 +0100 Subject: [PATCH 1/3] order DOS uses of INT 30 and 31 first --- .../INT 30 MS Windows 31 PROTECTEDMODE CALLBACK.txt | 2 +- ...OT A VECTOR DOS 1 FAR JMP instruction for CPMstyle calls.txt | 2 +- ... 31 VIRUS Vacsina series INSTALLATION CHECK NOT A VECTOR.txt | 2 +- .../INT 31 overwritten by CPM jump instruction in INT 30.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/Interrupt List/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction/INT 30 MS Windows 31 PROTECTEDMODE CALLBACK.txt b/source/Interrupt List/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction/INT 30 MS Windows 31 PROTECTEDMODE CALLBACK.txt index 8ca7a900..bb84917e 100644 --- a/source/Interrupt List/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction/INT 30 MS Windows 31 PROTECTEDMODE CALLBACK.txt +++ b/source/Interrupt List/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction/INT 30 MS Windows 31 PROTECTEDMODE CALLBACK.txt @@ -1,6 +1,6 @@ ---------------------------------------------------------------------------- Unique ID: 30 - Sort As: 30+01 + Sort As: 30+02 Category: W MS Windows Flag: P available only in protected mode ---------------------------------------------------------------------------- diff --git a/source/Interrupt List/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction for CPMstyle calls.txt b/source/Interrupt List/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction for CPMstyle calls.txt index 65796ee6..55f6848d 100644 --- a/source/Interrupt List/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction for CPMstyle calls.txt +++ b/source/Interrupt List/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction/INT 30 NOT A VECTOR DOS 1 FAR JMP instruction for CPMstyle calls.txt @@ -1,6 +1,6 @@ ---------------------------------------------------------------------------- Unique ID: 30 - Sort As: 30+02 + Sort As: 30+01 Category: D DOS kernel Flag: n/a ---------------------------------------------------------------------------- diff --git a/source/Interrupt List/INT 31 DOS PROTECTED MODE INTERFACE/INT 31 VIRUS Vacsina series INSTALLATION CHECK NOT A VECTOR.txt b/source/Interrupt List/INT 31 DOS PROTECTED MODE INTERFACE/INT 31 VIRUS Vacsina series INSTALLATION CHECK NOT A VECTOR.txt index 29432184..1aa9ed73 100644 --- a/source/Interrupt List/INT 31 DOS PROTECTED MODE INTERFACE/INT 31 VIRUS Vacsina series INSTALLATION CHECK NOT A VECTOR.txt +++ b/source/Interrupt List/INT 31 DOS PROTECTED MODE INTERFACE/INT 31 VIRUS Vacsina series INSTALLATION CHECK NOT A VECTOR.txt @@ -1,6 +1,6 @@ ---------------------------------------------------------------------------- Unique ID: 31 - Sort As: 31+01 + Sort As: 31+02 Category: v virus/antivirus Flag: n/a ---------------------------------------------------------------------------- diff --git a/source/Interrupt List/INT 31 DOS PROTECTED MODE INTERFACE/INT 31 overwritten by CPM jump instruction in INT 30.txt b/source/Interrupt List/INT 31 DOS PROTECTED MODE INTERFACE/INT 31 overwritten by CPM jump instruction in INT 30.txt index 3d0e03c0..92c3732a 100644 --- a/source/Interrupt List/INT 31 DOS PROTECTED MODE INTERFACE/INT 31 overwritten by CPM jump instruction in INT 30.txt +++ b/source/Interrupt List/INT 31 DOS PROTECTED MODE INTERFACE/INT 31 overwritten by CPM jump instruction in INT 30.txt @@ -1,6 +1,6 @@ ---------------------------------------------------------------------------- Unique ID: 31 - Sort As: 31+02 + Sort As: 31+01 Category: D DOS kernel Flag: n/a ---------------------------------------------------------------------------- From 0debd59a1484c2d16e9011393fdae181f9e3105f Mon Sep 17 00:00:00 2001 From: "E. C. Masloch" Date: Wed, 11 Nov 2026 20:38:44 +0100 Subject: [PATCH 2/3] 21.52: add to MCB comments, empty, no overflow, DOSDATA, LH, split --- ...152 DOS 2 internal SYSVARS GET LIST OF LISTS.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/source/Interrupt List/INT 21 DOS Function Calls/INT 2152 DOS 2 internal SYSVARS GET LIST OF LISTS.txt b/source/Interrupt List/INT 21 DOS Function Calls/INT 2152 DOS 2 internal SYSVARS GET LIST OF LISTS.txt index d9c6bc12..e74d2a7d 100644 --- a/source/Interrupt List/INT 21 DOS Function Calls/INT 2152 DOS 2 internal SYSVARS GET LIST OF LISTS.txt +++ b/source/Interrupt List/INT 21 DOS Function Calls/INT 2152 DOS 2 internal SYSVARS GET LIST OF LISTS.txt @@ -166,13 +166,22 @@ Offset Size Description (Table 01628) 0Ch WORD "smcbLink", not used yet (planned to be an owner segment) 0Eh WORD reserved Notes: the next MCB is at segment (current + size + 1) - under DOS 3.1+, the first memory block is the DOS data segment, + an MCB may contain all-zeroes in the word 03h. such an MCB may be + created by explicitly allocating an empty memory block, resizing an + existing block to a zero size, or by operations on surrounding MCBs. + it is expected that every subsequent MCB is stored at a higher segment + than a prior MCB, ie that the size in word 03h doesn't overflow. + under DOS 3.1+, the first block is a segment of DOS data structures, containing installable drivers, buffers, etc. Under DOS 4.0+ it is divided into subsegments, each with its own memory control block (see #01633), the first of which is at offset 0000h. + the DOS data segment (see INT 2F/AX=1203h) is typically in front of + the first MCB, except in lDOS (optionally) and DR-DOS v7 for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes 08h and 09h. "SC" is system code or locked-out inter-UMB memory, "SD" is system data, device drivers, etc. + MS-DOS v6 LH may allocate excluded UMBs using owner 8 and the name + filled with "HIDDEN " (two trailing blanks, not NULs) Some versions of DR DOS use only seven characters of the program name, placing a NUL in the eighth byte. lDOS S MCBs are heavily used by lDOS (lMS-DOS and lRxDOS), only device @@ -187,6 +196,8 @@ Notes: the next MCB is at segment (current + size + 1) it is reported that some versions of command.com free memory blocks used transiently from code running in those very blocks, thus running in free memory for a bit after this point. + lDOS source texts note that splitting MCBs is the only operation that + creates new MCBs, everything else operates on existing MCBs. SeeAlso: #01630,#01632,#01633 (Table 01629) From bfa4234c1775e472ce1899f69cff6da8fec372c1 Mon Sep 17 00:00:00 2001 From: "E. C. Masloch" Date: Wed, 11 Nov 2026 20:39:53 +0100 Subject: [PATCH 3/3] 2F.AE01: expand with sysparse entry, FreeCOM bugs --- ...01 DOS 33 internal INSTALLABLE COMMAND EXECUTE.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/Interrupt List/INT 2F Multiplex/internal/INT 2FAE01 DOS 33 internal INSTALLABLE COMMAND EXECUTE.txt b/source/Interrupt List/INT 2F Multiplex/internal/INT 2FAE01 DOS 33 internal INSTALLABLE COMMAND EXECUTE.txt index 8a173846..a35957de 100644 --- a/source/Interrupt List/INT 2F Multiplex/internal/INT 2FAE01 DOS 33 internal INSTALLABLE COMMAND EXECUTE.txt +++ b/source/Interrupt List/INT 2F Multiplex/internal/INT 2FAE01 DOS 33 internal INSTALLABLE COMMAND EXECUTE.txt @@ -8,9 +8,11 @@ INT 2F U - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE AX = AE01h DX = magic value FFFFh CH = 00h - CL = length of command name (4DOS v4.0) + CL = length of command name (4DOS v4.0, MS-DOS v4.01) DS:BX -> command line buffer (see #02977) DS:SI -> command name buffer (see #02978) + (at least in MS-DOS v4.01, v6.22) ES:DI -> far callable command.com + "sysparse" entrypoint (this is called by APPEND) Return: DS:SI buffer updated if length byte is nonzero, the following bytes contain the uppercase internal command to execute and the command line buffer contains the @@ -25,5 +27,10 @@ BUGS: Novell DOS 7.0's COMMAND.COM (prior to Update 12) will attempt to run command name buffer to "REM" followed by enough blanks to pad out the original command's length, which will also work with MS-DOS 6. (from padgett@tccslr.dnet.mmc.com) + FreeCOM and SvarCOM pass DI = 0, and may crash if used with MS-DOS + APPEND because APPEND may try to call into the "sysparse" entry. + FreeCOM's sources (lib/mux_ae.c) comment on the setting DI = 0 as + "Magic value 4dos v4" so it is possible that 4DOS also crashes. + FreeCOM passes in CX minus command line length (DS:BX) rather than + plus the command name length (DS:SI). SeeAlso: AX=AE00h -