|
|
1.1 ! root 1: /* (-lgl ! 2: * COHERENT Version 3.0 ! 3: * Copyright (c) 1982, 1990 by Mark Williams Company. ! 4: * All rights reserved. May not be copied without permission. ! 5: -lgl) */ ! 6: /* ! 7: * Machine dependent definitions. ! 8: * 8086/8088 Coherent, IBM PC. ! 9: */ ! 10: #ifndef MACHINE_H ! 11: #define MACHINE_H MACHINE_H ! 12: ! 13: #include <sys/const.h> ! 14: #include <sys/types.h> ! 15: ! 16: /* ! 17: * Offsets for registers. ! 18: */ ! 19: #define OIP -3 ! 20: ! 21: /* ! 22: * Alloc definitions. ! 23: */ ! 24: #define align(p) ((ALL *) ((int) (p) & ~1)) ! 25: #define link(p) align((p)->a_link) ! 26: #define tstfree(p) (((int) (p)->a_link&1) == 0) ! 27: #define setfree(p) ((p)->a_link = (int) (p)->a_link & ~1) ! 28: #define setused(p) ((p)->a_link = (int) (p)->a_link | 1) ! 29: ! 30: /* ! 31: * Functions. ! 32: * blockn - block number from byte number ! 33: * blocko - block offset from byte number ! 34: * nbnrem - offset into indirect block from block number ! 35: * nbndiv - residual indirect mapping from block number ! 36: * btocru - byte to click (saddr_t) rounding up ! 37: * btocrd - byte to click rounding down ! 38: * bruc - byte rounded up to click boundary ! 39: * ctob - click to byte ! 40: * ctokrd - click to Kbyte rounding down ! 41: * stod - saddr_t to daddr_t conversion for swapper. ! 42: */ ! 43: #define blockn(n) ((n)>>9) ! 44: #define blocko(n) ((n)&(512-1)) ! 45: #define nbnrem(b) ((int)(b)&(128-1)) ! 46: #define nbndiv(b) ((b)>>7) ! 47: /* A click is a 16 byte paragraph, but they are allocated in chunks ! 48: * of 512 bytes so that disk and memory segments have same granularity. ! 49: */ ! 50: /* The following macros are no longer valid in protected mode. ! 51: * #define btocru(n) ((saddr_t) (((n+511)>>9) << 5)) ! 52: * #define btocrd(n) ((saddr_t) ((n)>>4)) ! 53: * #define bruc(n) ((n+511)&~511) ! 54: * #define ctob(n) ((n)<<4) ! 55: * #define ctokrd(n) ((n)>>6) ! 56: * #define stod(n) ((daddr_t)((n)>>5)) ! 57: */ ! 58: ! 59: /* ! 60: * Simple functions. ! 61: */ ! 62: #define msetppc(v) (((int *)((char *)&u+UPASIZE))[OIP] = (v)) ! 63: #define sxalloc(s, f) ((f&SFHIGH)?shalloc(s):smalloc(s)) ! 64: #define vsegpair(v) (v),sds ! 65: ! 66: /* The following macro is no longer valid in protected mode. ! 67: * #define psegpair(p) (int)((p)&0xF),((int)((p)>>4)) ! 68: */ ! 69: ! 70: /* ! 71: * For mapping auxiliary segment in exec. ! 72: */ ! 73: #define asave(o) ! 74: #define arest(o) ! 75: #define abase(s) (sas=s, 0) ! 76: #define adone(s) ! 77: ! 78: /* ! 79: * Buffers are not mapped. ! 80: */ ! 81: #define bsave(o) ! 82: #define brest(o) ! 83: #define bmapv(p) ! 84: #define bconv(p) (p) ! 85: /* #define bvirt(p) (p-ctob(sds)) */ ! 86: ! 87: /* ! 88: * Clist are not mapped. ! 89: */ ! 90: #define csave(o) ! 91: #define crest(o) ! 92: #define cmapv(p) ! 93: #define cconv(p) (p) ! 94: #define cvirt(p) ((CLIST *)(p)) ! 95: ! 96: /* ! 97: * Drivers are not mapped. ! 98: */ ! 99: #define dsave(o) ! 100: #define drest(o) ! 101: #define dmapv(s) ! 102: #define dvirt() 0 ! 103: #define dcopy(dst,src) ! 104: ! 105: /* ! 106: * Register structure. ! 107: */ ! 108: typedef union mreg_u { ! 109: unsigned m_reg[]; ! 110: unsigned m_int; ! 111: } MREG; ! 112: ! 113: /* ! 114: * Segmenation prototype. ! 115: */ ! 116: typedef struct mproto { ! 117: saddr_t *mp_cbp; ! 118: saddr_t *mp_dbp; ! 119: unsigned mp_csl; ! 120: unsigned mp_dsl; ! 121: vaddr_t mp_svb; ! 122: vaddr_t mp_svl; ! 123: } MPROTO; ! 124: ! 125: /* ! 126: * Set jump and return structure. ! 127: */ ! 128: typedef struct menv_s { ! 129: int me_di; ! 130: int me_si; ! 131: int me_bp; ! 132: int me_sp; ! 133: int me_pc; ! 134: int me_fw; ! 135: int me_depth; /* Stack depth */ ! 136: } MENV; ! 137: ! 138: /* ! 139: * Context structure. ! 140: */ ! 141: typedef struct mcon_s { ! 142: int mc_di; ! 143: int mc_si; ! 144: int mc_bp; ! 145: int mc_sp; ! 146: int mc_pc; ! 147: int mc_fw; ! 148: int mc_depth; /* Stack depth */ ! 149: } MCON; ! 150: ! 151: /* ! 152: * General register structure. ! 153: */ ! 154: typedef struct mgen { ! 155: } MGEN; ! 156: ! 157: #ifdef KERNEL ! 158: /* ! 159: * Global variables. ! 160: */ ! 161: extern unsigned sas; /* System auxiliary segment */ ! 162: extern unsigned scs; /* System code segment */ ! 163: extern unsigned sds; /* System data segment */ ! 164: ! 165: extern saddr_t uasa; /* Currently active uarea segment */ ! 166: #endif ! 167: ! 168: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.