|
|
1.1 root 1:
2: /* privileged registers constants (addresses) */
3:
4:
5:
6: .set SBR,0 /*system base register */
7: .set SLR,1 /*system length reg */
8: .set P0BR,2 /*p0 base reg */
9: .set P0LR,3 /*p0 length reg */
10: .set P1BR,4 /*p1 base reg */
11: .set P1LR,5 /*p1 length reg */
12: .set P2BR,6 /*p2 base reg */
13: .set P2LR,7 /*p2 length reg */
14: .set IPL,8 /*int priority level reg */
15: .set MME,9 /*memory mgmt enable reg */
16: .set TBIA,10 /*trans buf invalidate all */
17: /*entries */
18: .set TBIS,11 /*trans buf invalidate single */
19: /*entry */
20: .set DCK,12 /*data cache key */
21: .set CCK,13 /*code cache key */
22: .set PCBB,14 /*process control block base */
23: .set ISP,15 /*interrupt stack pointer */
24: .set SIRR,16 /*software int request reg */
25: .set SISR,17 /*software int summary reg */
26: .set SCBB,18 /*system control block base reg */
27: .set KSP,19 /*kernel stack pointer reg */
28: .set USP,20 /*user stack pointer */
29: .set DCB,21 /*CPU2 DCB */
30: .set PACC,23 /*purge (invalidate) all pages */
31: /*of process in code cache */
32: .set P1DC,24 /*purge one page of data cache */
33: .set PADC,25 /*purge all the pages of */
34: /*process in data cache */
35: .set HISR,26 /* Hardware interrupt summary reg */
36: .set DCR,27 /* Diagnostic control register */
37: .set PDCS,28 /* Purge 1 data cache slot */
38:
39: #
40: #TAHOE program status longword
41: #
42:
43: .set PSL_C,0x00000001 /* carry bit */
44: .set PSL_V,0x00000002 /* overflow bit */
45: .set PSL_Z,0x00000004 /* zero bit */
46: .set Z,0x00000004
47: .set PSL_N,0x00000008 /* negative bit */
48: .set PSL_T,0x00000010 /* trace enable bit */
49: .set PSL_I,0x00000020 /* integer overflow enable bit */
50: .set PSL_EN_OVFL,0x20 /* integer overflow enable bit */
51: .set PSL_EN_UNDFL,0x40 /* floating underflow enable */
52: .set PSL_DBL,0x80 /* dbl precision Accumulator bit */
53: .set PSL_IPL,0x001f0000 /* interrupt priority level */
54: .set PSL_MOD,0x01000000 /* mode = 1 means user */
55: .set PSL_IS,0x04000000 /* interrupt stack */
56: .set PSL_TP,0x40000000 /* trace pending */
57:
58: #
59: # TAHOE page table entry
60: #/
61: .set PG_V,0x8000000
62: .set PG_PROT,0x78000000
63: .set PG_M,0x04000000
64: .set PG_USED,0x02000000
65: .set PG_NC,0x01000000
66: .set PG_PFNUM,0x003fffff
67:
68: .set PG_NOACC,0
69: .set PG_KR,0x40000000
70: .set PG_KW,0x60000000
71: .set PG_URKR,0x50000000
72: .set PG_URKW,0x70000000
73: .set PG_UW,0x78000000
74:
75: #* PCB offsets & diagnostic extension to pcb */
76: #* PCB is at pcb0 */
77:
78:
79: .set PCB_SIZE, 24
80: .set PCB_KSP, 0
81: .set PCB_USP, 4
82: .set PCB_R0, 8
83: .set PCB_R1, 12
84: .set PCB_R2, 16
85: .set PCB_R3, 20
86: .set PCB_R4, 24
87: .set PCB_R5, 28
88: .set PCB_R6, 32
89: .set PCB_R7, 36
90: .set PCB_R8, 40
91: .set PCB_R9, 44
92: .set PCB_R10, 48
93: .set PCB_R11, 52
94: .set PCB_R12, 56
95: .set PCB_R13, 60
96: .set PCB_PC, 64
97: .set PCB_PSL, 68
98: .set PCB_P0BR, 72
99: .set PCB_P0LR, 76
100: .set PCB_P1BR, 80
101: .set PCB_P1LR, 84
102: .set PCB_P2BR, 88
103: .set PCB_P2LR, 92
104: .set PCB_ACCM, 96
105: .set PCB_ACCL, 100
106: #*
107: # Diagnostic pcb extension
108: #/
109: .set PCB_STAT, 104 /*process status,statistics,id,etc*/
110:
111:
112:
113: #* fundamental constants */
114:
115: #*
116: # fundamental constants of the implementation--
117: # cannot be changed easily.
118: #/
119:
120: .set NBPG,1024
121: .set PGOFSET,(NBPG-1) /* byte offset into page */
122: .set PGSHIFT,10 /* LOG2(NBPG) */
123: .set HIGH,0x1f
124:
125:
126: #* SCB offsets */
127: #* SCB is at scb */
128:
129: .set PFVEC,1*4 /*power fail */
130: .set PRVEC,2*4 /*power restore */
131: .set CLOCKVEC,7*4 /*hard clock vector */
132: .set CRVEC,0xa*4 /*console receive */
133: .set CXVEC,44 /*console transmit */
134: .set SIVEC1,0x1e*4 /*software int vec #1 */
135: /*for 2,3,..15, sub 4,8,.. 56 */
136: /*from SIVEC1 */
137: .set BEVEC,0x20*4 /*bus error */
138: .set SYSVEC,0x2b*4 /*system call (kcall) */
139: .set PINSTVEC,0x2c*4 /*privileged instruction fault */
140: .set PRIVSVEC,0x2c*4 /*privileged instruction fault */
141: .set ROVEC,0x2d*4 /*reserved operand fault */
142: .set RAVEC,0x2e*4 /*reserved addressing fault */
143: .set PROTVEC,0x2f*4 /*access control violation */
144: .set TRANS,0x30 /*translation fault vector */
145: .set TRANSVEC,0x30*4 /*translation fault vector */
146: .set KSPVEC,0x31*4 /*kernel stack not valid vector */
147: .set TRACEVEC,0x32*4 /*trace vector */
148: .set BPTVEC,0x33*4 /*break point fault */
149: .set ARITHVEC,0x34*4 /*arithmetic trap */
150: .set ALIGNVEC,0x35*4 /*alignment vector */
151: .set FPMVEC,0x37*4 /*fpp emulation vector */
152: .set IO14VEC,256 /*io vector, ipl #14 */
153: .set IO15VEC,320 /*io vector, ipl #15 */
154: .set IO16VEC,384 /*io vector, ipl #16 */
155: .set IO17VEC,448 /*io vector, ipl #17 */
156:
157: #* SPT (system page table) offsets */
158: #* SPT is at Sysmap */
159:
160: .set SCBPTE,8 /*system control block pte offset*/
161: .set BUFPTE,12 /*buffer pte offset */
162: .set ISPTE,16 /*interrupt stack page 0 */
163: .set IS1PTE,20 /*interrupt stack page 1 */
164: .set SPTPTE,20 /*system page table page 1 */
165: .set SPT1PTE,20 /*system page table page 2 */
166: .set IOMAPPTE,24 /*io map */
167: .set PCBPTE,28 /*process control blocks pte */
168: .set U0P0PTE,32 /*U0 p0pt pte */
169: .set U0P1PTE,36 /*U0 p1pt pte */
170: .set U0P2PTE,40 /*U0 p2pt pte */
171: .set U1P0PTE,44
172: .set U1P1PTE,48
173: .set U1P2PTE,52
174: .set U2P0PTE,56
175: .set U2P1PTE,60
176: .set U2P2PTE,64
177: .set U3P0PTE,68
178: .set U3P1PTE,72
179: .set U3P2PTE,76
180: .set U4P0PTE,80
181: .set U4P1PTE,84
182: .set U4P2PTE,88
183: .set U5P0PTE,92
184: .set U5P1PTE,96
185: .set U5P2PTE,100
186: .set U6P0PTE,104
187: .set U6P1PTE,108
188: .set U6P2PTE,112
189: .set U7P0PTE,116 /*U7 p0pt pte */
190: .set U7P1PTE,120 /*U7 p1pt pte */
191: .set U7P2PTE,124 /*U7 p2pt pte */
192: .set IOB0PTE,128 /*io buffer 0 pte */
193: .set IOB1PTE,132
194: .set IOB2PTE,136
195: .set IOB3PTE,140
196: .set IOB4PTE,144
197: .set IOB5PTE,148
198: .set IOB6PTE,152
199: .set IOB7PTE,156 /*io buffer 7 pte */
200:
201:
202: #* trap.h 4.6 81/03/03 */
203:
204: #*
205: #* Trap type values
206: #/
207:
208: .set RESADFLT,0 /* reserved addressing fault */
209: .set PRIVINFLT,1 /* privileged instruction fault */
210: .set RESOPFLT,2 /* reserved operand fault */
211: .set BPTFLT,3 /* bpt instruction fault */
212: .set ALIGNFLT,4 /* alignment fault */
213: .set SYSCALL,5 /* kcall instruction (syscall trap) */
214: .set ARITHTRAP,6 /* arithmetic trap */
215: .set PROTFLT,7 /* protection fault */
216: .set TRCTRAP,8 /* trace trap */
217: .set TRANSFLT,9 /* translation not valid fault */
218: .set DONE,255
219:
220: #
221: # Event codes
222: #
223: .set RTCLOCK_CODE,7 /* real time clock event */
224: .set RESOP_CODE,0x2d /* reserved operand fault */
225: .set RESAD_CODE,0x2e /* reserved address fault */
226: .set ARITH_CODE,0x34 /* arithmetic fault */
227: .set FPM_CODE,0x37 /* fpp emulation trap */
228: .set INTEGER_OVERFLOW,1 /* code for arith. fault */
229:
230: #
231: # Arithmetic Event types
232: #
233: .set INT_OVFL_CODE,1 /* integer overflow */
234: .set INT_0_DIV_CODE,2 /* integer divide by 0 */
235: .set FLT_0_DIV_CODE,3 /* floating divide by 0 */
236: .set FLT_OVFL_CODE,4 /* floating overflow */
237: .set FLT_UNDFL_CODE,5 /* floating underflow */
238:
239: #
240: # Floating Point Instruction Op-Codes
241: #
242: .set LDF_OP_CODE,0x06 /* sgl load acc. instr */
243: .set LDD_OP_CODE,0x07 /* dbl load acc. instr */
244: .set LNF_OP_CODE,0x16 /* sgl load-neg acc. instr */
245: .set LND_OP_CODE,0x17 /* dbl load-neg acc. instr */
246: .set STF_OP_CODE,0x26 /* sgl store acc. instr */
247: .set STD_OP_CODE,0x27 /* dbl store acc. instr */
248: .set CMPF_OP_CODE,0x36 /* sgl compare instr */
249: .set CMPD_OP_CODE,0x37 /* dbl compare instr */
250: .set CMPF2_OP_CODE,0x46 /* sgl compare 2 instr */
251: .set CMPD2_OP_CODE,0x47 /* dbl compare 2 instr */
252: .set TSTF_OP_CODE,0x56 /* sgl test acc. instr */
253: .set TSTD_OP_CODE,0x57 /* dbl test acc. instr */
254: .set PUSHD_OP_CODE,0x67 /* dbl push acc. instr */
255: .set CVLF_OP_CODE,0x76 /* convert int to sgl instr */
256: .set CVLD_OP_CODE,0x77 /* convert int to dbl instr */
257: .set CVFL_OP_CODE,0x86 /* convert sgl to int instr */
258: .set CVDL_OP_CODE,0x87 /* convert dbl to int instr */
259: .set LDFD_OP_CODE,0x97 /* load sgl to dbl instr */
260: .set CVDF_OP_CODE,0xa6 /* convert dbl to sgl instr */
261: .set NEGF_OP_CODE,0xb6 /* negate sgl acc. instr */
262: .set NEGD_OP_CODE,0xb7 /* negate dbl acc. instr */
263: .set ADDF_OP_CODE,0xc6 /* sgl add instr */
264: .set ADDD_OP_CODE,0xc7 /* dbl add instr */
265: .set SUBF_OP_CODE,0xd6 /* sgl subtract instr */
266: .set SUBD_OP_CODE,0xd7 /* dbl subtract instr */
267: .set MULF_OP_CODE,0xe6 /* sgl multiply instr */
268: .set MULD_OP_CODE,0xe7 /* dbl multiply instr */
269: .set DIVF_OP_CODE,0xf6 /* sgl divide instr */
270: .set DIVD_OP_CODE,0xf7 /* dbl divide instr */
271: .set SINF_OP_CODE,0x05 /* sgl sine instr */
272: .set COSF_OP_CODE,0x15 /* sgl cosine instr */
273: .set ATANF_OP_CODE,0x25 /* sgl arc-tangent instr */
274: .set LOGF_OP_CODE,0x35 /* sgl natural log instr */
275: .set SQRTF_OP_CODE,0x45 /* sgl square root instr */
276: .set EXPF_OP_CODE,0x55 /* sgl "e to the x" instr */
277: .set MULL2_OP_CODE,0x4c /* integer multiply - 2 ops */
278: .set MULL3_OP_CODE,0x5c /* integer multiply - 3 ops */
279:
280:
281: #
282: # Addressing test constants - These must agree with "fpp_defs.h"
283: #
284: .set ADR_ABSOLUTE,1 /* absolute address */
285: .set ADR_LITERAL,2 /* literal -short immediate byte */
286: .set ADR_IM_B,3 /* immediate byte */
287: .set ADR_IM_W,4 /* immediate word */
288: .set ADR_IM_L,5 /* immediate long-word */
289: .set ADR_B_DSP,6 /* byte displ relative */
290: .set ADR_W_DSP,7 /* word displ relative */
291: .set ADR_L_DSP,8 /* long-word displ relative */
292: .set ADR_B_DSP_DEF,9 /* byte displ relative deferred */
293: .set ADR_W_DSP_DEF,10 /* word displ relative deferred */
294: .set ADR_L_DSP_DEF,11 /* L-word displ relative deferred */
295: .set ADR_REG,12 /* direct register */
296: .set ADR_REG_DEF,13 /* register deferred */
297: .set ADR_FP_DEF,14 /* FP deferred */
298: .set ADR_SP_DEF,15 /* SP deferred */
299: .set ADR_PUSH,16 /* auto-decrement SP */
300: .set ADR_POP,17 /* auto-increment SP */
301: .set ADR_POP_DEF,18 /* auto-increment SP deferred */
302: .set ADR_REG_B,19 /* register + byte displ */
303: .set ADR_REG_W,20 /* register + word displ */
304: .set ADR_REG_L,21 /* register + long-word displ */
305: .set ADR_REG_B_DEF,22 /* register + byte displ deferred */
306: .set ADR_REG_W_DEF,23 /* register + word displ deferred */
307: .set ADR_REG_L_DEF,24 /* register + L-word displ deferred */
308: .set ADR_I_FP_DEF,25 /* indexed (frame pointer deferred) */
309: .set ADR_I_L,26 /* indexed (longword displacement) */
310:
311:
312: #*************************************************************************
313: #
314: # Stuff for the Demand Paging , Events, & Addressing Tests
315: #
316: #************************************************************************/
317: .set SGL,1 /* sgl precision data */
318: .set DBL,2 /* dbl precision data */
319: .set ENABLE_EVENTS,0x60 /* enable ovfl & undfl events */
320: .set NONE,0 /* no operand flag */
321: .set LOAD,1 /* read-the-operand flag */
322: .set STORE,2 /* store-the-operand flag */
323:
324: .set NO_EVT_HLT,1 /* halt code: did not Get event */
325: .set EVT_MSK_HLT,2 /* halt code: got masked event */
326: .set BAD_PSL_HLT,3 /* halt code: wrong PSL value */
327: .set PUSH_CNT_HLT,4 /* halt code: wrong # ops on stk */
328: .set PUSH_PSL_HLT,5 /* halt code: bad PSL on stack */
329: .set PUSH_PC_HLT,6 /* halt code: bad PC on stack */
330: .set BAD_REG_HLT,7 /* halt code: bad final register */
331: .set BAD_ACC_HLT,8 /* halt code: bad final Acc. */
332:
333: #
334: # set DMP_PG_0 to the 1st empty page
335: #
336: .set DMP_PG_0,0x36000
337: .set DMP_PG_1,DMP_PG_0+0x400
338: .set DMP_PG_2,DMP_PG_1+0x400
339: .set DMP_PG_3,DMP_PG_2+0x400
340: .set DMP_PG_4,DMP_PG_3+0x400
341: .set DMP_PG_5,DMP_PG_4+0x400
342: .set DMP_PG_6,DMP_PG_5+0x400
343: .set DMP_PG_7,DMP_PG_6+0x400
344: .set DMP_PG_8,DMP_PG_7+0x400
345: .set DMP_PG_9,DMP_PG_8+0x400
346: .set DMP_PG_10,DMP_PG_9+0x400
347: .set DMP_PG_11,DMP_PG_10+0x400
348: .set DMP_PG_12,DMP_PG_11+0x400
349: .set DMP_PG_13,DMP_PG_12+0x400
350:
351: #
352: # test code space for the address / demand page tests
353: #
354: .set START_OF_CODE,DMP_PG_1-20 /* 1st addr of test-code space */
355: .set CODE_BUF_SIZE,40 /* # bytes in test-code space */
356: .set END_OF_CODE,START_OF_CODE+CODE_BUF_SIZE
357:
358: #
359: # data locations used by the event and demand page tests
360: #
361: .set _dmp_byte_op_1,DMP_PG_1+0x40 /* 'byte offset' data */
362: .set _dmp_byte_op_2,DMP_PG_1+0x60 /* 'byte offset' data */
363: .set _dmp_byte_op_3,DMP_PG_1+0x80 /* 'byte offset' data */
364: .set _dmp_op_1,DMP_PG_3-4 /* 1st data word */
365: .set _dmp_op_1_ptr,DMP_PG_4+0x30 /* ptr to 1st data wd */
366: .set _dmp_op_2_ptr,DMP_PG_5+0x30 /* ptr to 2nd data wd */
367: .set _dmp_op_2,DMP_PG_7-4 /* 2nd data word */
368: .set _dmp_op_3,DMP_PG_8 /* 3rd data word */
369: .set _dmp_op_3_ptr,DMP_PG_9+0x30 /* ptr to 3rd data wd */
370: .set _dmp_op_4,DMP_PG_10 /* 4th data (for pipes) */
371: .set _dmp_op_5,DMP_PG_11 /* 5th data (for pipes) */
372: .set _sp_minus,DMP_PG_13-4 /* SP for POPs */
373: .set _sp_page,DMP_PG_13 /* SP page boundary */
374: .set _sp_plus,DMP_PG_13+4 /* SP for PUSHs */
375:
376:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.