/* SCCSID = @(#)vm.h 4.2 86/07/21 */ /* * vm.h * * The following macros are used to define * the virtual memory model. */ /* Definition for FPN type (file page number */ typedef unsigned short FPN; #define LG2FPN 1 /* Length of long in bits */ #define LONGLN (BYTELN*sizeof(long)) /* Log (base 2) of page size */ #define LG2PAG 9 /* Log (base 2) of memory size */ #define LG2MEM 31 /* Length of page in bytes */ #define PAGLEN (1U << LG2PAG) /* Page offset of virtual address */ #define OFFSET(x) ((short)((x) & ~(~0L << LG2PAG))) /* Page number of virtual address */ #define PAGE(x) ((x) >> LG2PAG) /* Virtual address of page table entry for some virtual address x */ #define PTADDR(x) (((x) >> (LG2PAG - LG2FPN)) & (~0L << LG2FPN)) /* Page number of page table entry for some virtual address x */ #define PTPAGE(x) ((x) >> (LG2PAG + LG2PAG - LG2FPN)) /* Upper virtual address limit of PT0 */ #define LG2LP0 (LG2MEM - LG2PAG + LG2FPN) #define LIMPT0 (1L << LG2LP0) /* Upper virtual address limit of PT1 */ #define LG2LP1 (LG2LP0 - LG2PAG + LG2FPN) #define LIMPT1 (1L << LG2LP1) /* Upper virtual address limit of PT2 */ #define LG2LP2 (LG2LP1 - LG2PAG + LG2FPN) #define LIMPT2 (1L << LG2LP2) /* Length of PT2 in entries (longs) */ #define PT2LEN (1L << (LG2LP1 - LG2PAG)) /* Maximum number of page buffers (hash table can be chars if MAXBUF <= 128) */ #if CPU386 #define MAXBUF 128 #elif OSEGEXE #define MAXBUF 96 #else #define MAXBUF 64 #endif /* Virtual memory area definitions */ /* * REMEMBER !!!!!!!!!!!!!!!!!! * * EVERY item you store in virtual memory MUST !!!!! * meet the condition PAGLEN % sizeof(your-item) == 0. */ #define AREASYMS LIMPT0 /* Symbol table VM area start */ #define AREASRCLIN (AREASYMS + (RBMAX << SYMSCALE)) /* $$SRCLINES area start */ #define AREAPROPLST (AREASRCLIN + (1L << 20)) #define AREABAKPAT (AREAPROPLST + LXIVK) #if EXE386 /* Begin area definitions for linear-executable */ #define AREAIMPS (AREABAKPAT + LXIVK) /* Imported names table area */ #define AREAEAT (AREAIMPS + 10*MEGABYTE) /* Export Address Table area */ #define AREAEATAUX (AREAEAT + MEGABYTE) /* Auxiliary Data Table area */ #define AREAEP (AREAEATAUX + MEGABYTE) /* Entry point area */ #define LG2BKT 6 /* Log of hash bucket size */ #define BKTLEN (1 << LG2BKT) /* Bucket length in bytes */ #define AREAHRC (AREAEP + (LXIVK * sizeof(EPTYPE))) /* Chained relocation hash tables */ #define AREARC (AREAHRC + MEGABYTE) /* Chained relocation hash buckets */ #define AREANAMEPTR (AREARC + ((long) BKTLEN << WORDLN)) /* Export Name Pointer Table */ #define NAMEPTRSIZE MEGABYTE /* 1Mb */ #define AREAORD (AREANAMEPTR + NAMEPTRSIZE) /* Export Ordinal Table */ #define ORDTABSIZE 8*LXIVK /* 0.5Mb */ #define AREAEXPNAME (AREAORD + ORDTABSIZE) /* Export Name Table */ #define EXPNAMESIZE 64*MEGABYTE /* 64Mb */ #define AREAST (AREAEXPNAME + EXPNAMESIZE) #define AREAMOD (AREAST + LXIVK) /* Module Reference Table Area */ #define AREAHD (AREAMOD + MEGABYTE) #define AREAPDIR (AREAHD + MEGABYTE) #define AREAIMPMOD (AREAPDIR + MEGABYTE) #define AREAFPAGE (AREAIMPMOD + MEGABYTE) #define AREACV (AREAFPAGE + MEGABYTE) #define AREASORT (AREACV + (32*MEGABYTE)) #define AREAEXESTR (AREASORT + LXIVK) #define AREACONTRIBUTION (AREAEXESTR + LXIVK) #define AREAPAGERANGE (AREACONTRIBUTION + LXIVK) #define AREACVDNT (AREAPAGERANGE + (8*MEGABYTE)) #define AREAFSA (AREACVDNT + LXIVK) /* Segment area start */ #define AREASA(sa) (mpsaVMArea[sa]) /* Virtual address of nth object */ #define AREAFREE (0xffffffffL) /* First free VM address */ #else /* Begin area definitions for protect-mode exes */ #define AREANRNT (AREABAKPAT + LXIVK) #define AREARNT (AREANRNT + LXIVK) #define AREAIMPS (AREARNT + LXIVK) /* Imported names table area */ #define AREAET (AREAIMPS + LXIVK) /* Entry Table area */ #define AREAEP (AREAET + LXIVK)/* Entry point area */ #define LG2BKT 6 /* Log of hash bucket size */ #define BKTLEN (1 << LG2BKT) /* Bucket length in bytes */ #define AREAHRC (AREAEP + (LXIVK * sizeof(EPTYPE))) /* Chained relocation hash tables */ #define AREARC (AREAHRC + ((long) SAMAX * PAGLEN / 2)) /* Chained relocation hash buckets */ #define AREAST (AREARC + ((long) BKTLEN << WORDLN)) #define AREAMOD (AREAST + LXIVK)/* Module Reference Table Area */ #define AREASORT (AREAMOD + LXIVK) #define AREAEXESTR (AREASORT + (LXIVK << 2)) #define AREACONTRIBUTION (AREAEXESTR + LXIVK) #define AREACVDNT (AREACONTRIBUTION + LXIVK) #define AREAFSA (AREACVDNT + LXIVK) #define AREASA(sa) (AREAFSA + ((long) (sa) << WORDLN)) /* Virtual address of nth segment */ #define AREAFREE (AREAFSA + ((long) SAMAX << WORDLN)) /* First free VM address */ #define AREACV (AREAPACKRGRLE + MEGABYTE) #endif /* Virtual memory area definitions for DOS 3 exes */ #define AREAFSG AREAFSA /* Segment area start */ #define AREARGRLE (AREAFSG + ((long) GSNMAX << 16)) /* Relocation table area start */ #define LG2ARLE 17 /* Log (base 2) of reloc table size */ #define AREAPACKRGRLE (AREARGRLE + (IOVMAX * (1L << LG2ARLE))) /* Packed relocation area start */ #define VPLIB1ST (1L << (LG2MEM - LG2PAG)) /* First page of library area * NOTE: This page number cannot * be derived from any legal virtual * address. Libraries will always be * accessed by page number. */ /* Index of virtual page touched most recently */ short picur;