Format of DOS 4.0-6.0 swappable data area |
Offset | Size | Description | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
-34 |
BYTE |
printer echo flag
|
|||||||||||||||||||||
-31 |
BYTE |
current switch character (ignored by DOS 5+) | |||||||||||||||||||||
-30 |
BYTE |
current memory allocation strategy (see AH=58h) | |||||||||||||||||||||
-28 |
BYTE |
incremented on each INT 21/AX=5E01h call | |||||||||||||||||||||
-27 |
16 BYTEs |
machine name set by INT 21/AX=5E01h | |||||||||||||||||||||
-11 |
5 WORDs |
zero-terminated list of offsets which need to be patched to enable critical-section calls (see INT 2A/AH=80h) (all offsets are 0D0Ch, but this list is still present for DOS 3.x compatibility) | |||||||||||||||||||||
-1 |
BYTE |
unused padding | |||||||||||||||||||||
Note: |
The above data is not actually part of the SDA, and is much more likely to change between DOS versions/OEMs than data in the SDA itself. |
||||||||||||||||||||||
---start of actual SDA--- |
|||||||||||||||||||||||
00h |
BYTE |
critical error flag ("ErrorMode") | |||||||||||||||||||||
01h |
BYTE |
InDOS flag (count of active INT 21 calls) | |||||||||||||||||||||
02h |
BYTE |
drive on which current critical error occurred or FFh (DR DOS 3.41/5.0 set this to 00h when no critical error) | |||||||||||||||||||||
03h |
BYTE |
locus of last error | |||||||||||||||||||||
04h |
WORD |
extended error code of last error | |||||||||||||||||||||
06h |
BYTE |
suggested action for last error | |||||||||||||||||||||
07h |
BYTE |
class of last error | |||||||||||||||||||||
08h |
DWORD |
ES:DI pointer for last error | |||||||||||||||||||||
0Ch |
DWORD |
current DTA (Disk Transfer Address)
|
|||||||||||||||||||||
10h |
WORD |
current PSP | |||||||||||||||||||||
12h |
WORD |
stores SP across an INT 23 | |||||||||||||||||||||
14h |
WORD |
return code from last process termination (zerod after reading with AH=4Dh) | |||||||||||||||||||||
16h |
BYTE |
current drive | |||||||||||||||||||||
17h |
BYTE |
extended break flag | |||||||||||||||||||||
18h |
BYTE |
flag: code page switching | |||||||||||||||||||||
19h |
BYTE |
flag: copy of previous byte in case of INT 24 Abort | |||||||||||||||||||||
---remainder need only be swapped if in DOS--- |
|||||||||||||||||||||||
1Ah |
WORD |
value of AX on call to INT 21
|
|||||||||||||||||||||
1Ch |
WORD |
PSP segment for sharing/network (0000h = local) | |||||||||||||||||||||
1Eh |
WORD |
network machine number for sharing/network (0000h = local) | |||||||||||||||||||||
20h |
WORD |
first usable memory block found when allocating memory | |||||||||||||||||||||
22h |
WORD |
best usable memory block found when allocating memory | |||||||||||||||||||||
24h |
WORD |
last usable memory block found when allocating memory | |||||||||||||||||||||
26h |
WORD |
memory size in paragraphs (used only during initialization) | |||||||||||||||||||||
28h |
WORD |
last entry checked during directory search | |||||||||||||||||||||
2Ah |
BYTE |
flag: nonzero if INT 24 Fail | |||||||||||||||||||||
2Bh |
BYTE |
flags: allowable INT 24 responses (passed to INT 24 in AH) | |||||||||||||||||||||
2Ch |
BYTE |
flag: do not set directory if nonzero | |||||||||||||||||||||
2Dh |
BYTE |
flag: program aborted by ^C | |||||||||||||||||||||
2Eh |
BYTE |
flag: allow embedded blanks in FCB may also allow use of "*" wildcard in FCBs |
|||||||||||||||||||||
2Fh |
BYTE |
padding (unused) | |||||||||||||||||||||
30h |
BYTE |
day of month | |||||||||||||||||||||
31h |
BYTE |
month | |||||||||||||||||||||
32h |
WORD |
year - 1980 | |||||||||||||||||||||
34h |
WORD |
number of days since 01jan1980 | |||||||||||||||||||||
36h |
BYTE |
day of week
|
|||||||||||||||||||||
37h |
BYTE |
flag: console swapped during read from device | |||||||||||||||||||||
38h |
BYTE |
flag: safe to call INT 28 if nonzero | |||||||||||||||||||||
39h |
BYTE |
flag: abort currently in progress, turn INT 24 Abort into Fail | |||||||||||||||||||||
3Ah |
30 BYTEs |
device driver request header (see #02597 at INT 2F/AX=0802h) for device calls | |||||||||||||||||||||
58h |
DWORD |
pointer to device driver entry point (used in calling driver) | |||||||||||||||||||||
5Ch |
22 BYTEs |
device driver request header for I/O calls | |||||||||||||||||||||
72h |
14 BYTEs |
device driver request header for disk status check (also includes following eight bytes for some calls) | |||||||||||||||||||||
80h |
DWORD |
pointer to device I/O buffer | |||||||||||||||||||||
84h |
WORD |
part of request header at 72h | |||||||||||||||||||||
86h |
WORD |
part of request header at 72h (0) | |||||||||||||||||||||
88h |
BYTE |
type of PSP copy
|
|||||||||||||||||||||
89h |
DWORD |
start offset of file region to lock/unlock | |||||||||||||||||||||
8Dh |
DWORD |
length of file region to lock/unlock | |||||||||||||||||||||
91h |
BYTE |
padding (unused) | |||||||||||||||||||||
92h |
3 BYTEs |
24-bit user number (see AH=30h) | |||||||||||||||||||||
95h |
BYTE |
OEM number (see #01394 at AH=30h) | |||||||||||||||||||||
96h |
6 BYTEs |
CLOCK$ transfer record (see #01688 at AX=5D06h) | |||||||||||||||||||||
9Ch |
BYTE |
device I/O buffer for single-byte I/O functions | |||||||||||||||||||||
9Dh |
BYTE |
padding | |||||||||||||||||||||
9Eh |
128 BYTEs |
buffer for filename | |||||||||||||||||||||
11Eh |
128 BYTEs |
buffer for filename (rename destination name) | |||||||||||||||||||||
19Eh |
21 BYTEs |
findfirst/findnext search data block (see #01626 at AH=4Eh) | |||||||||||||||||||||
1B3h |
32 BYTEs |
directory entry for found file (see #01394 at AH=11h) | |||||||||||||||||||||
1D3h |
88 BYTEs |
copy of current directory structure for drive being accessed | |||||||||||||||||||||
22Bh |
11 BYTEs |
FCB-format filename for device name comparison | |||||||||||||||||||||
236h |
BYTE |
terminating NUL for above filename | |||||||||||||||||||||
237h |
11 BYTEs |
wildcard destination specification for rename (FCB format) | |||||||||||||||||||||
242h |
BYTE |
terminating NUL for above filespec | |||||||||||||||||||||
243h |
BYTE |
padding??? | |||||||||||||||||||||
244h |
WORD |
destination starting sector (cluster???) | |||||||||||||||||||||
246h |
5 BYTEs |
extra space to allow a directory entry to be stored starting at offset 22Bh | |||||||||||||||||||||
24Bh |
BYTE |
extended FCB file attributes | |||||||||||||||||||||
24Ch |
BYTE | type of FCB
|
|||||||||||||||||||||
24Dh |
BYTE | directory search attributes | |||||||||||||||||||||
24Eh |
BYTE | file open/access mode | |||||||||||||||||||||
24Fh |
BYTE | flag: nonzero if file was deleted | |||||||||||||||||||||
250h |
BYTE | flag: device name found on rename, or file not found | |||||||||||||||||||||
251h |
BYTE | flag: splice file name and directory name together | |||||||||||||||||||||
252h |
BYTE | flag indicating how DOS function was invoked
|
|||||||||||||||||||||
253h |
BYTE | sector position within cluster | |||||||||||||||||||||
254h |
BYTE | flag: translating sector/cluster | |||||||||||||||||||||
255h |
BYTE | flag:
|
|||||||||||||||||||||
256h |
BYTE | current working drive number | |||||||||||||||||||||
257h |
BYTE | cluster factor | |||||||||||||||||||||
258h |
BYTE | "sda_CLUSSPLIT" flag: cluster split between two FAT sectors | |||||||||||||||||||||
259h |
BYTE | line edit (AH=0Ah) insert mode flag (nonzero = on) | |||||||||||||||||||||
25Ah |
BYTE | canonicalized filename referred to existing file/dir if FFh | |||||||||||||||||||||
25Bh |
BYTE | volume ID flag | |||||||||||||||||||||
25Ch |
BYTE | type of process termination (00h-03h) (see AH=4Dh) | |||||||||||||||||||||
25Dh |
BYTE | unused (padding for alignment) | |||||||||||||||||||||
25Eh |
BYTE |
file create flag (00h = no, search only) | |||||||||||||||||||||
25Fh |
BYTE |
value for deleted file's first byte:
|
|||||||||||||||||||||
260h |
DWORD |
pointer to Drive Parameter Block for critical error invocation | |||||||||||||||||||||
264h |
DWORD |
pointer to stack frame containing user registers on INT 21 | |||||||||||||||||||||
268h |
WORD |
stores SP across INT 24 | |||||||||||||||||||||
26Ah |
DWORD |
pointer to DOS Drive Parameter Block for ??? | |||||||||||||||||||||
26Eh |
WORD |
segment of disk buffer | |||||||||||||||||||||
270h |
DWORD |
saving partial cluster number | |||||||||||||||||||||
274h |
WORD |
"sda_PREREAD"
|
|||||||||||||||||||||
276h |
WORD |
temporary used in allocating disk space | |||||||||||||||||||||
278h |
BYTE |
Media ID byte returned by AH=1Bh,1Ch | |||||||||||||||||||||
279h |
BYTE |
unused | |||||||||||||||||||||
27Ah |
DWORD |
pointer to device header if filename is character device | |||||||||||||||||||||
27Eh |
DWORD |
pointer to current SFT | |||||||||||||||||||||
282h |
DWORD |
pointer to current directory structure for drive being accessed | |||||||||||||||||||||
286h |
DWORD |
pointer to caller's FCB | |||||||||||||||||||||
28Ah |
WORD |
SFT index to which file being opened will refer | |||||||||||||||||||||
28Ch |
WORD |
temporary storage for file handle | |||||||||||||||||||||
28Eh |
DWORD |
pointer to JFT entry (for file being opened) in process handle table (see #01378 at AH=26h) | |||||||||||||||||||||
292h |
WORD |
"sda_WFP_START" offset in DOS DS of first filename argument | |||||||||||||||||||||
294h |
WORD |
"sda_REN_WFP" offset in DOS DS of second filename argument | |||||||||||||||||||||
296h |
WORD |
offset of last component in pathname or FFFFh | |||||||||||||||||||||
298h |
WORD |
offset of transfer address to add | |||||||||||||||||||||
29Ah |
WORD |
last relative cluster within file being accessed | |||||||||||||||||||||
29Ch |
WORD |
temp: absolute cluster number being accessed | |||||||||||||||||||||
29Eh |
DWORD |
directory sector number | |||||||||||||||||||||
2A2h |
WORD |
directory cluster number | |||||||||||||||||||||
2A4h |
DWORD |
current relative sector number within file | |||||||||||||||||||||
2A8h |
DWORD |
current sector number (number of previously written sectors) | |||||||||||||||||||||
2ACh |
WORD |
current byte offset within sector | |||||||||||||||||||||
2AEh |
DWORD |
current offset in file | |||||||||||||||||||||
2B2h |
WORD |
number of bytes in first sector | |||||||||||||||||||||
2B4h |
WORD |
bytes in partial last sector | |||||||||||||||||||||
2B6h |
WORD |
number of whole sectors | |||||||||||||||||||||
2B8h |
WORD |
free file cluster entry | |||||||||||||||||||||
2BAh |
WORD |
last file cluster entry | |||||||||||||||||||||
2BCh |
WORD |
next file cluster number | |||||||||||||||||||||
2BEh |
DWORD |
number of bytes appended to file | |||||||||||||||||||||
2C2h |
DWORD |
pointer to current work disk buffer | |||||||||||||||||||||
2C6h |
DWORD |
pointer to working SFT | |||||||||||||||||||||
2CAh |
WORD |
used by INT 21 dispatcher to store caller's BX | |||||||||||||||||||||
2CCh |
WORD |
used by INT 21 dispatcher to store caller's DS | |||||||||||||||||||||
2CEh |
WORD |
temporary storage while saving/restoring caller's registers | |||||||||||||||||||||
2D0h |
DWORD |
pointer to prev call frame (offset 264h) if INT 21 reentered also switched to for duration of INT 24 |
|||||||||||||||||||||
2D4h |
WORD |
open mode/action for INT 21/AX=6C00h | |||||||||||||||||||||
2D6h |
BYTE |
extended open conditional flag set to 00h by INT 21h dispatcher, 02h when a read is performed, and 01h or 03h by INT 21/AX=6C00h |
|||||||||||||||||||||
2D7h |
WORD |
extended open I/O mode | |||||||||||||||||||||
2D9h |
DWORD |
stored ES:DI for AX=6C00h | |||||||||||||||||||||
2DDh |
WORD |
extended file open action code (see #01770 at AX=6C00h) | |||||||||||||||||||||
2DFh |
WORD |
extended file open attributes (see #01769 at AX=6C00h) | |||||||||||||||||||||
2E1h |
WORD |
extended file open file mode (see AX=6C00h) | |||||||||||||||||||||
2E3h |
DWORD |
pointer to filename to open (see AX=6C00h) | |||||||||||||||||||||
2E7h |
WORD |
high word of 32-bit sector number, or temp data buffer size from disk buffer | |||||||||||||||||||||
2E9h |
WORD |
"sda_OffsetMagicPatch" | |||||||||||||||||||||
2EBh |
BYTE |
disk full on >32M partition when set to 01h | |||||||||||||||||||||
2ECh |
WORD |
stores DS during call to [List-of-Lists + 37h] | |||||||||||||||||||||
2EEh |
WORD |
temporary storage (various uses) | |||||||||||||||||||||
2F0h |
BYTE |
storage for drive error | |||||||||||||||||||||
2F1h |
WORD |
DOS 3.4 (European MS-DOS 4.00) bit flags | |||||||||||||||||||||
2F3h |
DWORD |
pointer to user-supplied filename | |||||||||||||||||||||
2F7h |
DWORD |
pointer to user-supplied rename destination filename | |||||||||||||||||||||
2FBh |
WORD |
stores SS during call to [List-of-Lists + 37h] and INT 25,26 | |||||||||||||||||||||
2FDh |
WORD |
stores SP during call to [List-of-Lists + 37h] and INT 25,26 | |||||||||||||||||||||
2FFh |
BYTE |
flag, nonzero if stack switched in calling [List-of-Lists+37h] | |||||||||||||||||||||
300h |
21 BYTEs |
FindFirst search data for source file(s) of a rename operation (see #01626 at AH=4Eh) | |||||||||||||||||||||
315h |
32 BYTEs |
directory entry for file being renamed (see #01352 at AH=11h) | |||||||||||||||||||||
335h |
331 BYTEs |
critical error stack | |||||||||||||||||||||
480h |
384 BYTEs |
disk stack (functions greater than 0Ch, INT 25,INT 26) | |||||||||||||||||||||
600h |
384 BYTEs |
character I/O stack (functions 01h through 0Ch) | |||||||||||||||||||||
780h |
BYTE |
device driver lookahead flag (usually printer) (see AH=64h"DOS 3.2+") | |||||||||||||||||||||
781h |
BYTE |
volume change flag | |||||||||||||||||||||
782h |
BYTE |
flag: virtual file open | |||||||||||||||||||||
783h |
BYTE |
fastseek drive | |||||||||||||||||||||
784h |
WORD |
fastseek first cluster number | |||||||||||||||||||||
786h |
WORD |
fastseek logical cluster number | |||||||||||||||||||||
788h |
WORD |
fastseek returned logical cluster number | |||||||||||||||||||||
78Ah |
WORD |
temporary location of DOS@SYSINIT | |||||||||||||||||||||
---MSDOS 7.1+ (FAT32)--- |
|||||||||||||||||||||||
78Ch |
47 BYTEs |
??? | |||||||||||||||||||||
7BBh |
BYTE |
flag: absolute disk read/write type
|
|||||||||||||||||||||
7BCh |
WORD |
high word of directory cluster number at offset 2A2h | |||||||||||||||||||||
7BEh |
WORD |
high word of cluster number at offset 29Ch | |||||||||||||||||||||
7C0h |
WORD |
high word of next file cluster number at offset 2BCh | |||||||||||||||||||||
7C2h |
WORD |
high word of last relative cluster number at offset 29Ah | |||||||||||||||||||||
7C4h |
WORD |
high word of temp at offset 276h | |||||||||||||||||||||
7C6h |
WORD |
high word of offset 244h | |||||||||||||||||||||
7C8h |
WORD |
high word of EBX | |||||||||||||||||||||
7CAh |
WORD |
high word of EDX used by "PACK" | |||||||||||||||||||||
7CCh |
WORD |
high word of EDI used by "UNPACK" | |||||||||||||||||||||
7CEh |
WORD |
high word of EBX used by "SETDIRSRCH" | |||||||||||||||||||||
7D0h |
WORD |
high word of ECX used by "FREECLUSTER" | |||||||||||||||||||||
7D2h |
WORD |
high word of EDI used by "GETEOF" | |||||||||||||||||||||
7D4h |
3 WORDs |
??? |
Note: |
The only fields which remain valid BETWEEN calls to INT 21h are those in the initial "swap-always" portion of the SDA. |
See Also: |