DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦8451d9ad9⟧ TextFile

    Length: 16128 (0x3f00)
    Types: TextFile
    Names: »kkmt«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »kkmt« 

TextFile

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◀