MCB - DOS Memory Control Block Format
Offset Size Description
00 byte 'M' 4Dh member of a MCB chain, (not last)
'Z' 5Ah indicates last entry in MCB chain
other values cause "Memory Allocation Failure" on exit
01 word PSP segment address of MCB owner (Process Id)
possible values:
0 = free
8 = Allocated by DOS before first user pgm loaded
other = Process Id/PSP segment address of owner
03 word number of paras related to this MCB (excluding MCB)
05 11bytes reserved
08 8bytes ASCII program name, NULL terminated if less than max
length (DOS 4.x+)
10 nbytes first byte of actual allocated memory block
- to find the first MCB in the chain, use INT 21,52
- DOS 3.1+ the first memory block contains the DOS data segment
ie., installable drivers, buffers, etc
- DOS 4.x the first memory block is divided into subsegments,
with their own memory control blocks; offset 0000h is the first
- the 'M' and 'Z' are said to represent Mark Zbikowski
- the MCB chain is often referred to as a linked list, but
technically isn't
DOS 4.x Initial Data Segment Subsegment Control Blocks:
Offset Size Description
00 byte subsegment type
'D' device driver
'E' device driver appendage
'I' Installable File System driver
'F' FILES= control block storage area (for FILES>5)
'X' FCBS= control block storage area, if present
'C' BUFFERS EMS workspace area if BUFFERS /X is used
'B' BUFFERS= storage area
'L' LASTDRIVE= current directory structure array
'S' STACKS= code/data area, if present (see below)
01 word paragraph of subsegment start
03 word subsegment size in paragraphs
05 3bytes unused
08 types "D" and "I", filename of driver loaded driver
- see INT 21,48 INT 21,49 INT 21,4A