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: |