|
|
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 __SYS_MACHINE_H__
11: #define __SYS_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.