en:docs:dos:api:int21:26

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
en:docs:dos:api:int21:26 [2020/12/09 03:13] – created prokusheven:docs:dos:api:int21:26 [2024/05/02 03:52] (current) – prokushev
Line 25: Line 25:
 ===== Notes ===== ===== Notes =====
  
-  new PSP is updated with memory size information; INTs 22h, 23h, 24h +new PSP is updated with memory size information; INTs 22h, 23h, 24h taken from interrupt vector table; the parent PSP field is set to 0 
-          taken from interrupt vector table; the parent PSP field is set to 0 + 
-        (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to +(DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to copy 
-          copy +           
-BUG:    DR DOS 6.0 original releases 05/1991 & 08/1991 had a problem where the +BUG:    DR DOS 6.0 original releases 05/1991 & 08/1991 had a problem where the segment from which the PSP was copied was incorrect so that the PSP was not filled correctly and did not contain the command tail.  The DR DOS 6.0 BDOS patch "PAT312" English (1992/01/07, XDIR /C: A0C6h) and later "full" rebuilds fix this problem (see INT 21/AX=4452h).
-          segment from which the PSP was copied was incorrect so that the PSP +
-          was not filled correctly and did not contain the command tail.  The +
-          DR DOS 6.0 BDOS patch "PAT312" English (1992/01/07, XDIR /C: A0C6h) +
-          and later "full" rebuilds fix this problem (see INT 21/AX=4452h).+
  
 Format of Program Segment Prefix (PSP): Format of Program Segment Prefix (PSP):
-Offset  Size    Description     (Table 01378) + 
- 00h  2 BYTEs   INT 20 instruction for CP/M CALL 0 program termination +^ Offset ^ Size ^ Description ^ 
-                the CDh 20h here is often used as a signature for a valid PSP +| 00h | 2 BYTEs | INT 20 instruction for CP/M CALL 0 program termination the CDh 20h here is often used as a signature for a valid PSP | 
- 02h    WORD    segment of first byte beyond memory allocated to program +| 02h | WORD | segment of first byte beyond memory allocated to program | 
- 04h    BYTE    (DOS) unused filler +| 04h | BYTE | (DOS) unused filler, (OS/2) count of fake DOS version returns | 
-                (OS/2) count of fake DOS version returns +| 05h | BYTE | CP/M CALL 5 service request (FAR CALL to absolute 000C0h) BUG: (DOS 2+ DEBUG) PSPs created by DEBUG point at 000BEh | 
- 05h    BYTE    CP/M CALL 5 service request (FAR CALL to absolute 000C0h) +| 06h | WORD | CP/M compatibility--size of first segment for .COM files | 
-                BUG: (DOS 2+ DEBUG) PSPs created by DEBUG point at 000BEh +| 08h | 2 BYTEs | remainder of FAR JMP at 05h | 
- 06h    WORD    CP/M compatibility--size of first segment for .COM files +| 0Ah | DWORD | stored INT 22 termination address | 
- 08h  2 BYTEs   remainder of FAR JMP at 05h +| 0Eh | DWORD | stored INT 23 control-Break handler address | 
- 0Ah    DWORD   stored INT 22 termination address +| 12h | DWORD | DOS 1.1+ stored INT 24 critical error handler address | 
- 0Eh    DWORD   stored INT 23 control-Break handler address +| 16h | WORD | segment of parent PSP | 
- 12h    DWORD   DOS 1.1+ stored INT 24 critical error handler address +| 18h | 20 BYTEs | DOS 2+ Job File Table, one byte per file handle, FFh = closed | 
- 16h    WORD    segment of parent PSP +| 2Ch | WORD | DOS 2+ segment of environment for process (see #01379) | 
- 18h 20 BYTEs   DOS 2+ Job File Table, one byte per file handle, FFh = closed +| 2Eh | DWORD | DOS 2+ process's SS:SP on entry to last INT 21 call | 
- 2Ch    WORD    DOS 2+ segment of environment for process (see #01379) +| 32h | WORD | DOS 3+ number of entries in JFT (default 20) | 
- 2Eh    DWORD   DOS 2+ process's SS:SP on entry to last INT 21 call +| 34h | DWORD | DOS 3+ pointer to JFT (default PSP:0018h) | 
- 32h    WORD    DOS 3+ number of entries in JFT (default 20) +| 38h | DWORD | DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x) used by SHARE in DOS 3.3 | 
- 34h    DWORD   DOS 3+ pointer to JFT (default PSP:0018h) +| 3Ch | BYTE | DOS 4+ (DBCS) interim console flag (see AX=6301h) Novell DOS 7 DBCS interim flag as set with AX=6301h (possibly also used by Far East MS-DOS 3.2-3.3) | 
- 38h    DWORD   DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x) +| 3Dh | BYTE | (APPEND) TrueName flag (see INT 2F/AX=B711h) | 
-                used by SHARE in DOS 3.3 +| 3Eh | BYTE | (Novell NetWare) flag: next byte initialized if CEh (OS/2) capabilities flag | 
- 3Ch    BYTE    DOS 4+ (DBCS) interim console flag (see AX=6301h) +| 3Fh | BYTE | (Novell NetWare) Novell task number if previous byte is CEh | 
-                Novell DOS 7 DBCS interim flag as set with AX=6301h +| 40h | 2 BYTEs | DOS 5+ version to return on INT 21/AH=30h | 
-                (possibly also used by Far East MS-DOS 3.2-3.3) +| 42h | WORD | (MSWindows3) selector of next PSP (PDB) in linked list Windows keeps a linked list of Windows programs only | 
- 3Dh    BYTE    (APPEND) TrueName flag (see INT 2F/AX=B711h) +| 44h | WORD | (MSWindows3) "PDB_Partition" | 
- 3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh +| 46h | WORD | (MSWindows3) "PDB_NextPDB" | 
-                (OS/2) capabilities flag +| 48h | BYTE | (MSWindows3) bit 0 set if non-Windows application (WINOLDAP) | 
- 3Fh    BYTE    (Novell NetWare) Novell task number if previous byte is CEh +| 49h | BYTE | unused by DOS versions <= 6.00 | 
- 40h  2 BYTEs   DOS 5+ version to return on INT 21/AH=30h +| 4Ch | WORD | (MSWindows3) "PDB_EntryStack" | 
- 42h    WORD    (MSWindows3) selector of next PSP (PDB) in linked list +| 4Eh | 2 BYTEs | unused by DOS versions <= 6.00 | 
-                Windows keeps a linked list of Windows programs only +| 50h | 3 BYTEs | DOS 2+ service request (INT 21/RETF instructions) | 
- 44h    WORD    (MSWindows3) "PDB_Partition" +| 53h | 2 BYTEs | unused in DOS versions <= 6.00 | 
- 46h    WORD    (MSWindows3) "PDB_NextPDB" +| 55h | 7 BYTEs | unused in DOS versions <= 6.00; can be used to make first FCB into an extended FCB | 
- 48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP) +| 5Ch | 16 BYTEs | first default FCB, filled in from first commandline argument overwrites second FCB if opened | 
- 49h    BYTE    unused by DOS versions <= 6.00 +| 6Ch | 16 BYTEs | second default FCB, filled in from second commandline argument overwrites beginning of commandline if opened | 
- 4Ch    WORD    (MSWindows3) "PDB_EntryStack" +| 7Ch | 4 BYTEs | unused | 
- 4Eh  2 BYTEs   unused by DOS versions <= 6.00 +| 80h | 128 BYTEs | commandline / default DTA. command tail is BYTE for length of tail, N BYTEs for the tail, followed by a BYTE containing 0Dh | 
- 50h  3 BYTEs   DOS 2+ service request (INT 21/RETF instructions) + 
- 53h  2 BYTEs   unused in DOS versions <= 6.00 +Notes:  in DOS v3+, the limit on simultaneously open files may be increased by allocating memory for a new open file table, filling it with FFh, copying the first 20 bytes from the default table, and adjusting the pointer and count at 34h and 32h.  However, DOS will only copy the first 20 file handles into a child PSP (including the one created on EXEC). 
- 55h  7 BYTEs   unused in DOS versions <= 6.00; can be used to make first FCB + 
-                  into an extended FCB +in an OS/2 DOS box, values of D0h-FEh in the open file table indicate device drivers 
- 5Ch 16 BYTEs   first default FCB, filled in from first commandline argument + 
-                overwrites second FCB if opened +network redirectors based on the original MS-Net implementation use values of 80h-FEh in the open file table to indicate remote files; Novell NetWare also uses values from FEh down to 80h or one more than FILES= (whichever is greater) to indicate remote files (except on OS/2, where is uses CFh down to 80h) 
- 6Ch 16 BYTEs   second default FCB, filled in from second commandline argument + 
-                  overwrites beginning of commandline if opened +MS-DOS 5.00 incorrectly fills the FCB fields when loading a program high; the first FCB is empty and the second contains the first parameter 
- 7Ch  4 BYTEs   unused + 
- 80h 128 BYTEs  commandline / default DTA +some DOS extenders place protected-mode values in various PSP fields such as the "parent" field, which can confuse PSP walkers.  Always check either for the CDh 20h signature or that the suspected PSP is at the beginning of a memory block which owns itself (the preceding paragraph should be a valid MCB with "owner" the same as the suspected PSP). 
-                command tail is BYTE for length of tail, N BYTEs for the tail, + 
-                  followed by a BYTE containing 0Dh +Novell NetWare updates the fields at offsets 3Eh and 3Fh without checking that a legal PSP segment is current; see AH=50h for further discussion 
-Notes:  in DOS v3+, the limit on simultaneously open files may be increased by + 
-          allocating memory for a new open file table, filling it with FFh, +for 4DOS and Windows95, the command tail may be more than 126 characters; in that case, the length byte will be set to 7Fh (with an 0Dh in the  127th position at offset FFh), and the first 126 characters will be stored in the PSP, with the entire command line in the environment variable CMDLINE; under at least some versions of 4DOS, the byte at offset FFh is *not* set to 0Dh, so there is no terminating carriage return in the PSP's command tail. 
-          copying the first 20 bytes from the default table, and adjusting the + 
-          pointer and count at 34h and 32h.  However, DOS will only copy the +BUG:    When shelling out from the Borland Pascal 7.00 IDE, overly-long command lines will not be delimited by a 0Dh character, and the length byte is set to 80h!  A workaround is to always patch in a 0Dh at the last position of the command line buffer before scanning the command line.
-          first 20 file handles into a child PSP (including the one created on +
-          EXEC). +
-        in an OS/2 DOS box, values of D0h-FEh in the open file table indicate +
-          device drivers +
-        network redirectors based on the original MS-Net implementation use +
-          values of 80h-FEh in the open file table to indicate remote files; +
-          Novell NetWare also uses values from FEh down to 80h or one more than +
-          FILES= (whichever is greater) to indicate remote files (except on +
-          OS/2, where is uses CFh down to 80h) +
-        MS-DOS 5.00 incorrectly fills the FCB fields when loading a program +
-          high; the first FCB is empty and the second contains the first +
-          parameter +
-        some DOS extenders place protected-mode values in various PSP fields +
-          such as the "parent" field, which can confuse PSP walkers.  Always +
-          check either for the CDh 20h signature or that the suspected PSP is +
-          at the beginning of a memory block which owns itself (the preceding +
-          paragraph should be a valid MCB with "owner" the same as the +
-          suspected PSP). +
-        Novell NetWare updates the fields at offsets 3Eh and 3Fh without +
-          checking that a legal PSP segment is current; see AH=50h for further +
-          discussion +
-        for 4DOS and Windows95, the command tail may be more than 126 +
-          characters; in that case, the length byte will be set to 7Fh (with +
-          an 0Dh in the  127th position at offset FFh), and the first 126 +
-          characters will be stored in the PSP, with the entire command line +
-          in the environment variable CMDLINE; under at least some versions +
-          of 4DOS, the byte at offset FFh is *not* set to 0Dh, so there is no +
-          terminating carriage return in the PSP's command tail. +
-BUG:    When shelling out from the Borland Pascal 7.00 IDE, overly-long +
-          command lines will not be delimited by a 0Dh character, and the +
-          length byte is set to 80h!  A workaround is to always patch in a +
-          0Dh at the last position of the command line buffer before scanning +
-          the command line.+
  
 Format of environment block: Format of environment block:
-Offset  Size    Description     (Table 01379) + 
- 00h  N BYTEs   first environment variable, ASCIZ string of form "var=value" +^ Offset ^ Size ^ Description ^ 
-      N BYTEs   second environment variable, ASCIZ string +| 00h | N BYTEs | first environment variable, ASCIZ string of form "var=value" | 
-        ... +| ::: | N BYTEs | second environment variable, ASCIZ string | 
-      N BYTEs   last environment variable, ASCIZ string of form "var=value" +| ::: | ... | 
-        BYTE    00h +| ::: | N BYTEs | last environment variable, ASCIZ string of form "var=value" | 
----DOS 3.0+ --- +| ::: | BYTE | 00h | 
-        WORD    number of strings following environment (normally 1) +| ---DOS 3.0+ --- ||| 
-      N BYTEs   ASCIZ full pathname of program owning this environment +| ... | WORD | number of strings following environment (normally 1) | 
-                other strings may follow+| ::: | N BYTEs | ASCIZ full pathname of program owning this environment other strings may follow |
                    
 ===== See also ===== ===== See also =====
  
-AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h+AH=[[en:docs:dos:api:int21:4b|4Bh]],AH=[[en:docs:dos:api:int21:50|50h]],AH=[[en:docs:dos:api:int21:51|51h]],AH=[[en:docs:dos:api:int21:55|55h]],AH=[[en:docs:dos:api:int21:62|62h]],AH=[[en:docs:dos:api:int21:67|67h]]
  
 ===== Note ===== ===== Note =====