|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 16128 (0x3f00)
Types: TextFile
Names: »kkmt«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »kkmt«
82.03.17. 08.48. pascal version 1980.06.17
1
2 program masterprocess (input,output);
3
4 label 10,20,30,40,50,60,70,80,90;
5
6 const m1=' '; m2=' '; m3=' '; m4=' '; m5=' ';
7 m6=' '; m7=' '; m8=' '; m9=' ';
8 m10=' ';
9 one_shift_22 = 4194304;
10 one_shift_23 = -8388608;
11 three_shift_12=12288;
12 mirror = 8388603;
13 buf_stack_top=200;
14 first_proc=-14;
15 first_buff=-10;
16
17 type halfword = -2048 .. 2047;
18 linkb = ^mes_buf;
19 linkp = ^proc_descr;
20 linkw1 = ^w1_area;
21 linkw3 = ^w3_area;
22 bsclaims = record
23 key0,key1,key2,key3: record slices,entries: integer;
24 end;
25 end;
26 base = record lower,upper: integer; end;
27 link = record next,prev: integer; end;
28 size = record first,last: integer; end;
29 save = record addr,g20,g21,g22,g23,g24,b18,b19:integer; end;
30 i_lev = packed record mon,user: halfword; end;
31
32 proc_descr= record
33 pda_oc: integer;
34 type_oc: 0 .. 5;
35 pda_master: integer;
36 ci:packed record comp_no,i_claim:halfword; end;
37 cpu_mask:packed record running,allowed: halfword; end;
38 proc_base: base;
39 kind: 0 .. 64;
40 name: alfa;
41 ss: packed record stopcount,state:halfword; end;
42 id_bit:packed record rel,bit: halfword;
43 end;
44 event: link;
45 time_slice: link;
46 addr_space: size;
47 claims: packed record buff,area,ip,func_m:halfword end;
48 priority: -1 .. 8388606;
49 mode: integer;
50 int_mask: integer;
51 userexc,useresc,i_cpa,i_base: integer;
52 wr_limits: size;
53 int_level: i_lev;
54 parent: integer;
55 quantum: integer;
56 runtime,starttime,startwait: real;
57 waitaddr: integer;
58 cat_base,max_base,std_base: base;
59 w0,w1,w2,w3: integer;
60 status,ic,cause,sb: integer;
61 curr_cpa,curr_base: integer;
62 curr_wr_lim: size;
63 curr_int_level: i_lev;
64 save_area: save;
65 drum,drum1,disc,disc1,disc2,disc3: bsclaims;
66 end;
67
68 mes_buf = record
69 addr_oc: integer;
70 r_s:packed record rec,sen:halfword; end;
71 rec_oc: integer;
72 sen_oc: integer;
73 flag_w2: integer;
74 buf: link;
75 receiver: integer;
76 sender: integer;
77 om:packed record op,mode:halfword; end;
78 m8,m10,m12,m14,m16,m18,m20,m22: integer;
79 end;
80 w1_area = record
81 addr_space: size;
82 claims:packed record buf,area:halfword end;
83 internal_oc: integer;
84 p_type: integer;
85 max: base;
86 std: base;
87 claims_oc:packed record
88 buf,area,ip,func:halfword;
89 end;
90 end;
91
92 w3_area = record name: alfa;
93 table_addr: integer;
94 end;
95 var proc:linkp;
96 buf,buf1:linkb;
97 pw1:linkw1;
98 pw3:linkw3;
99 sysrec_addr,wreg2,
100 computer_no,buf_a1,res1,res2,res3,f_a_buf1,buff_addr1,
101 buf_pointer,f_a_pw1,f_a_pw3,buff_addr,this_comp_no,xx,m_p_n,
102 pda_this_proc,systrm_addr,addr,f_a_proc,f_a_buf,res:integer;
103 mess: arrayÆ1..8Å of integer;
104 answ: arrayÆ1..8Å of integer;
105 buf_stack: arrayÆ1..200Å of integer;
106 sysdma,name1,wreg1,wreg3:alfa;
107 procedure move_buff(var a,ba:integer);
108 0 begin
109 1 sendfurther(a,ba);
********* ^101
110 end;
111 procedure stack_buf(a:integer);
112 0 begin
113 1 xx:=buf_stackÆbuf_pointerÅ;
114 2 buf_stackÆbuf_pointerÅ:=a;
115 3 buf_pointer:=xx;
116 end;
117
118 0 begin
119 1 buf_pointer:=1;
120 2 for xx:=1 to buf_stack_top do
121 3 buf_stackÆxxÅ:=xx+1;
122 4 buf_stackÆbuf_stack_topÅ:=1;
123 5 this_comp_no:=0;
124 6 systrm_addr:=description('systrm');
********* ^101
125 7 sysrec_addr:=description('sysrec');
********* ^101
126 8 pda_this_proc:=description('master');
********* ^101
127 9 f_a_proc:=firstaddress(proc);
********* ^101
128 10 f_a_pw1:=firstaddress(pw1);
********* ^101
129 11 f_a_pw3:=firstaddress(pw3);
********* ^101
130 12 f_a_buf:=firstaddress(buf);
********* ^101
131 13 f_a_buf1:=firstaddress(buf1);
********* ^101
132 14 sysdma:='sysdma';
133 15 10:
134 16 buff_addr:=0;
135 17 res:=waitevent(buff_addr);
********* ^101
136 18 addr:=buff_addr+first_buff;
137 19 wordstore(f_a_buf,addr);
********* ^101
138 20
139 21 (* res=1 normal answer to this proc
140 22
141 23 res=0 message from
142 24 1) monitor at this computer
143 25 2) a master process (another computer)
144 26 a) to a real process (this computer)
145 27 (i) message
146 28 (ii) answer
147 29 b) to master (this computer)
148 30 3) systrm at this computer
149 31 4) a useal process to
150 32 a) a mirror process (this computer)
151 33 b) master process (another computer)
152 34 c) master process (this computer)
153 35 *)
154 36
155 37 if res=1 then goto 20; (* answer to this proc*)
156 38
157 39 if buf^.m8>=one_shift_22 then
158 40 begin
159 41 if buf^.rec_oc=-1 then
160 42 goto 30; (*moncall this computer else*)
161 43 goto 40 (*moncall another computer*)
162 44 end;
163 45
164 46 if buf^.receiver=pda_this_proc then goto 50; (*message to master*)
165 47
166 48 if buf^.addr_oc=1 then goto 90; (*command is transmitted*)
167 49
168 50 if buf^.addr_oc=-1 then
169 51 begin
170 52 stack_buf(buff_addr);
171 53 goto 10;
172 54 end; (*stack buffer*)
173 55
174 56 if buf^.addr_oc=-2 then goto 60; (*transfer rejected*)
175 57
176 58 if (buf^.addr_oc>0) and (buf^.receiver>10) then
177 59 goto 70; (*message from another computer*)
178 60
179 61 (* else a buffer (answer or message) from an useal process (this computer)
180 62 to a mirror process (a real process on another computer) *)
181 63
182 64 if buf^.receiver>10 then
183 65 begin
184 66 addr:=buf^.receiver+first_proc;
185 67 wordstore(f_a_proc,addr);
********* ^101
186 68 if proc^.pda_master<>pda_this_proc then goto 80; (*reject message*)
187 69 buf^.addr_oc:=buff_addr;
188 70 buf^.r_s.sen:=this_comp_no;
189 71 buf^.r_s.rec:=proc^.ci.comp_no;
190 72 buf^.rec_oc:=proc^.pda_oc;
191 73 addr:=buf^.sender+first_proc;
192 74 wordstore(f_a_proc,addr);
********* ^101
193 75 buf^.sen_oc:=proc^.pda_oc;
194 76 end;
195 77 move_buff(systrm_addr,buff_addr);
196 78 goto 10; (* wait event *)
197 79
198 80 20: (*answer to this proc *)
199 81 goto 10; (* wait event*)
200 82
201 83 30: (* moncall this computer *)
202 84 buf^.r_s.sen:=computer_no;
203 85 m_p_n:=buf^.m8-one_shift_22;
204 86 wordstore(f_a_pw1,buf^.m12);
********* ^101
205 87 wordstore(f_a_pw3,buf^.m16);
********* ^101
206 88 if (m_p_n<>64) or ((m_p_n=64) and (pw1^.p_type=mirror)) then
207 89 begin
208 90 buf^.r_s.rec:=pw1^.p_type-one_shift_23;
209 91 buf^.r_s.sen:=this_comp_no;
210 92 move_buff(systrm_addr,buff_addr);
211 93 end;
212 94 if m_p_n=56 then
213 95 begin
214 96 (* create an internal mirrorprocess (this computer) *)
215 97 pw1^.p_type:=0;
216 98 wreg3:=pw3^.name;
217 99 buf^.m10:=createinternalprocess(wreg3,ord(pw1));
********* ^101
218 100 wordstore(f_a_proc,pw3^.table_addr);
********* ^101
219 101 proc^.type_oc:=5;
220 102 proc^.pda_master:=pda_this_proc;
221 103 end;
222 104 stack_buf(buff_addr);
223 105 goto 10;
224 106
225 107 40: (* moncall another computer *)
226 108 messÆ5Å:=buf^.r_s.sen;
227 109 messÆ1Å:=three_shift_12;
228 110 if buf^.m8-one_shift_22=64 then
229 111 begin
230 112 messÆ2Å:=ord(pw1);
231 113 messÆ3Å:=messÆ2Å+18;
232 114 messÆ4Å:=buf^.m12;
233 115 buf_a1:=sendmessage(wreg2,sysdma,mess);
********* ^101
234 116 res1:=waitanswer(buf_a1,answ);
********* ^101
235 117 end;
236 118 messÆ2Å:=ord(pw3);
237 119 messÆ3Å:=messÆ2Å+10;
238 120 messÆ4Å:=buf^.m16;
239 121 buf_a1:=sendmessage(wreg2,sysdma,mess);
********* ^101
240 122 res2:=waitanswer(buf_a1,answ);
********* ^101
241 123 wreg3:=pw3^.name;
242 124
243 125 case (buf^.m8-one_shift_22) of
244 126 56: res3:=createinternalprocess(wreg3,pw1^);
********* ^101
245 127 (*58: res3:=startinternalprocess(wreg3);*)
246 128 (*60: res3:=modyfiinternalprocess(wreg3);*)
247 129 (*62: res3:=stopinternalprocess(wreg3);*)
248 130 64: res3:=removeprocess(wreg3);
********* ^101
249 131 end;
250 132 goto 10;
251 133
252 134 50: (*command*)
253 135 if buf^.om.op in Æ2,4,5,6,7,8,10,12Å then
254 136 begin
255 137 move_buff(systrm_addr,buff_addr);
256 138 stack_buf(buff_addr);
257 139 goto 10; (*wait event*)
258 140 end else goto 80; (*message rejected*)
259 141
260 142 60: (*disconnected*)
261 143 sendanswer(4,buff_addr,answ);
********* ^101
262 144
263 145 70: (* message from another computer *)
264 146 if buf^.receiver>10 then
265 147 begin (* a message *)
266 148 xx:=buf^.sen_oc;
267 149 buf^.sen_oc:=buf^.sender;
268 150 buf^.sender:=xx;
269 151 xx:=buf^.rec_oc;
270 152 buf^.rec_oc:=buf^.receiver;
271 153 buf^.receiver:=xx;
272 154 move_buff(buf^.receiver,buff_addr);
273 155 end else
274 156 begin (* an answer *)
275 157 buff_addr1:=0;
276 158 repeat buff_addr1:=buff_addr1+1 until
277 159 (buff_addr1>buf_stack_top) or (buf_stackÆbuff_addr1Å=buf^.addr_oc);
278 160 if buff_addr1>buf_stack_top then
279 161 begin writeln('buffer error',buf^.addr_oc); goto 10 end;
280 162 addr:=buff_addr+first_buff;
281 163 wordstore(f_a_buf1,addr);
********* ^101
282 164 buf1^.addr_oc:=buf^.addr_oc;
283 165 buf1^.r_s.sen:=buf^.r_s.sen;
284 166 buf1^.r_s.rec:=buf^.r_s.rec;
285 167 buf1^.rec_oc:=buf^.receiver;
286 168 buf1^.sen_oc:=buf^.sender;
287 169 buf1^.flag_w2:=buf^.flag_w2;
288 170 buf1^.receiver:=buf^.receiver;
289 171 buf1^.sender:=buf^.sen_oc;
290 172 buf1^.om.op:=buf^.om.op;
291 173 buf1^.om.mode:=buf^.om.mode;
292 174 buf1^.m8:=buf^.m8; buf1^.m10:=buf^.m10; buf1^.m12:=buf^.m12;
293 175 buf1^.m14:=buf^.m14; buf1^.m16:=buf^.m16; buf1^.m18:=buf^.m18;
294 176 buf1^.m20:=buf^.m20; buf1^.m22:=buf^.m22;
295 177 move_buff(sysrec_addr,buff_addr);
296 178 move_buff(buf^.sender,buff_addr1);
297 179 end;
298 180 goto 10;
299 181 80: (*message rejected*)
300 182 sendanswer(2,buff_addr,answ);
********* ^101
301 183 goto 10; (* wait event *)
302 184
303 185 90: (*command is transmitted*)
304 186 sendanswer(1,buff_addr,answ);
********* ^101
305 187 goto 10;
306 end.
\f
number of errors : 27
number of warnings: 0
error description
101: identifier not declared
end
blocksread = 261
***scope user master unknown
▶EOF◀