|
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◀