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