|
|
1.1 root 1: #include <jerq.h>
2: #include <layer.h>
3: #include <jerqproc.h>
4: #include <font.h>
5:
6: char *patchedspot;
7: char patch;
8: char * itox();
9: extern long traploc;
10: extern short traptype;
11: extern Layer *whichlayer();
12: extern Texture eightball;
13: struct Proc *debugger;
14:
15: #define RESET 0
16: #define PROCESS 1
17: #define STACK 2
18: #define NORMAL 3
19:
20: char *trapmsg[]={
21: "",
22: "Process",
23: "Stack",
24: 0, /* Normal, handled by next table */
25: };
26: char *normalmsg[]={
27: /* 0*/ "Zero divide",
28: #define TRACE 1
29: /* 1*/ "Trace trap",
30: /* 2*/ "Illegal opcode",
31: /* 3*/ "Reserved opcode",
32: /* 4*/ "Invalid address mode",
33: /* 5*/ "Memory fault",
34: /* 6*/ "Gate vector fault",
35: /* 7*/ "Illegal level change",
36: /* 8*/ "Reserved data type",
37: /* 9*/ "Integer overflow",
38: /*10*/ "Privileged opcode",
39: /*11*/ 0,
40: /*12*/ 0,
41: /*13*/ 0,
42: #define BRKPT 14
43: /*14*/ "Breakpoint trap",
44: /*15*/ "Privileged register",
45: };
46: /* Called at spl7() */
47: trap(type,bad_pc,bad_psw,psw_bad,bad_pcbp)
48: register int type;
49: register char **bad_pc;
50: register *bad_psw;
51: register int psw_bad;
52: int bad_pcbp;
53: {
54: register int isc=((psw_bad >> 3) & 0xf);
55:
56: if(patchedspot){
57: *patchedspot=patch;
58: patchedspot=0;
59: }
60: spl0();
61: P->state|=ZOMBIE;
62: P->traploc=bad_pc; /* for debugger */
63: P->traptype=bad_psw;
64: if(debugger && (type==NORMAL) && ((isc==TRACE)||(isc==BRKPT))){
65: sw(0); /* BPT or trace */
66: /* ZOMBIE bit is now off; we are free to continue */
67: return;
68: }
69: P->nchars=0;
70: P->cbufpin=P->cbufpout=P->cbuf;
71: if(type==NORMAL)
72: copy(normalmsg[isc]? normalmsg[isc] : "Undefined normal exception");
73: else{
74: copy(trapmsg[type]);
75: if(type==PROCESS){
76: copy(" psw: 0x");
77: copy(itox(psw_bad));
78: }else{
79: copy(" exception #0x");
80: copy(itox(isc));
81: }
82: }
83: copy(" at 0x");
84: copy(itox((unsigned long)(*bad_pc-P->text)));
85: *P->cbufpin='\0';
86: if(P-proctab<=1) /* DEMUX, CONTROL */
87: error(P-proctab==0? "demux" : "control", P->cbuf);
88: /* let the user Delete to kill the Unix process */
89: shutdown(P);
90: P->state&=~ZOMBIE;
91: Urequest(MOUSE);
92: Ucursswitch(&eightball);
93: P->state|=ZOMBIE;
94: mesg(P->cbuf);
95: for(;;)
96: sw(0); /* ZOMBIE ==> will never return, but in case of pi */
97: }
98:
99: copy(s)
100: register char *s;
101: {
102: register unsigned char *p=P->cbufpin;
103:
104: while(*s){
105: *p++= *s++;
106: P->nchars++;
107: if(p>=&P->cbuf[sizeof(P->cbuf)])
108: p=P->cbuf;
109: }
110: P->cbufpin=p;
111: }
112:
113: char *
114: itox(n)
115: register unsigned long n;
116: {
117: static char hex[10];
118: register char *hp;
119: hp= &hex[sizeof hex];
120: *--hp='\0';
121: if(n>0)
122: do{
123: if((*--hp=(n&0xf)+'0') > '9')
124: *hp+='A'-'9'-1;
125: n>>=4;
126: }while(n);
127: else
128: *--hp='0';
129: return hp;
130: }
131: error(s1, s2)
132: char *s1, *s2;
133: {
134: char buf[64];
135: rectf(&display, Rect(0, 0, 600, 50), F_OR);
136: strcpy(buf, s1);
137: strcat(buf, ": ");
138: strcat(buf, s2);
139: string(&defont, buf, &display, Pt(10, 20), F_XOR);
140: P->state|=ZOMBIE;
141: sw(0);
142: }
143: /*
144: **info(s)
145: ** char *s;
146: **{
147: ** register i;
148: ** jrectf(Rect(XMAX-300, YMAX-50, XMAX, YMAX), F_CLR);
149: ** string(&defont, s, &display, Pt(XMAX-290, YMAX-30), F_XOR);
150: **}
151: **buzz(n)
152: **{
153: ** register i;
154: ** while(n--)
155: ** for(i=0; i<200000; i++)
156: ** ;
157: **}
158: **sstep(s)
159: ** char * s;
160: **{
161: ** jrectf(Rect(XMAX-300, YMAX-50, XMAX, YMAX), F_CLR);
162: ** string(&defont, s, &display, Pt(XMAX-290, YMAX-30), F_XOR);
163: ** do; while(button12()==0);
164: ** if(button1())
165: ** (*(long *)0)=0;
166: ** do; while(button12());
167: ** *DADDR = 156*(1024/4);
168: ** jrectf(Rect(XMAX-300, YMAX-50, XMAX, YMAX), F_XOR);
169: **}
170: **help(s, n)
171: ** char *s;
172: ** unsigned long n;
173: **{
174: ** static char buf[64];
175: ** strcpy(buf, s);
176: ** strcat(buf, itox(n));
177: ** sstep(buf);
178: **}
179: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.