The RMP is used to manage tables of variable length entities. It appears in a number of situations, particularly those that required ASCII strings, such as file names, to be managed.
Pointers
CharDevRMPRec
CharDevRMPRec
rbheadr RMP Header Structure.
┌────────────────┬──────┬──────┬────┬────────────────────────────────────────┐│Field Name │Offset│Length│Type│Description │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_size │+0 │2 │W │total size of segment │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_free_size │+2 │2 │W │amount of free space │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_1st_free │+4 │2 │W │link to first free block in seg │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_last_free │+6 │2 │W │start of last free block │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_hkh │+8 │4 │D │heap handle │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_flags │+c │4 │D │PG alloc/realloc flags │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_hobowner │+10 │2 │W │hobowner │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_hobmte │+12 │2 │W │hobmte │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_first │+14 │n │S │start of first record │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rb_sz_field │+n+0 │2 │W │size of 'record size field' │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ │+n+2 │n-2 │S │record data │ └────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
rbfree RMP Free Record Structure.
┌────────────────┬──────┬──────┬────┬────────────────────────────────────────┐ │Field Name │Offset│Length│Type│Description │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rf_size │+0 │2 │W │free block size (high bit set) │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rf_prev_free │+2 │2 │W │link to prev free block in seg │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rf_next_free │+4 │2 │W │link to next free block in seg │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ └────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
rparm RMP Handle Structure.
┌────────────────┬──────┬──────┬────┬────────────────────────────────────────┐ │Field Name │Offset│Length│Type│Description │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rp_flags │+0 │1 │B │flags │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ │+1 │1 │B │unused │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │rp_selector │+2 │2 │W │GDT selector to use │ └────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
rp_flags flag definitions.
┌────────────┬────────┬────────────────────────────────────────┐ │Name │Bit Mask│Description │ ├────────────┼────────┼────────────────────────────────────────┤ │RPF_BUSY │0x01 │Segment busy flag │ ├────────────┼────────┼────────────────────────────────────────┤ │RPF_WAITING │0x02 │Somebody waiting flag │ ├────────────┼────────┼────────────────────────────────────────┤ │RPF_ALLOC │0x04 │Segment allocated flag │ └────────────┴────────┴────────────────────────────────────────┘