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

⟦2d9e9a071⟧ TextFile

    Length: 34560 (0x8700)
    Types: TextFile
    Names: »inittxt     «

Derivation

└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
    └─⟦40b1eb8cd⟧ 
        └─⟦this⟧ »inittxt     « 

TextFile

\f

;  tas 1.0 14.05.87        initialize                inittxt    ...1...

;  @(#)inittxt	1.4  (RC International)  7/10/90
;
;********************************************************************
;*********************** initialize *********************************
;********************************************************************

;
; Terminal access system for rc8000 - A/S Regnecentralen
; Erik Poulsen 


;  Revisions historie
;
;  87.01.15  release til betatest
;
;  87.01.14  release 1.0
;
;  89.02.21  side 16 indsat kode til creat link, 
;                    skal understøtte nologin terminaler
;  89.07.11  side 16ff  test ks -xxx fjernet
;
;  89.08.21  tilføget ord i init message fra tas, med max create link messages
;
;  90.03.30  resource kontrol ændret totalt, mangel på core, area og buffer
;            giver ikke break, men der udskrives hvad der mangler
;;







b.  o30,i140,j50,q10     ; begin initialize:
w.
m.init   inittxt  1.4

; list of relativ addr. to initialize points

i0:  i5.,  u10.,  u11.,  u12., u13., u14., u15., u16., 0

; variables

i1:       0              ; own process descr addr
i2:       0              ; abs addr fp start
i3:       0              ; top used own process
i4:       0              ; saved w2
i5:  h.  m30  , i6. w.   ; ref. top used
i6:  h.  m29  , i7. w.   ; ref. first free core
i7:  h.  m31  , i8. w.   ; ref. own pda
i8:  h.  m36  , i9. w.   ; ref. own start time
i9:  h.  m33  , i10. w.  ; ref. word addr testbuffer
i10: h.  m35  , i11. w.  ; ref. current testbuffer
i11: h.  m27  , i12. w.  ; ref. message extention list head
\f

;. tas 1.0 14.05.87        initialize                inittxt    ...2...

i12: h.  m32  , i13. w.  ; ref. parent name
i13: h.  m34  , i14. w.  ; ref. name of testoutput area
i14: h.  m17  , i15. w.  ; ref. reserve buffer
i15: h.  m0   , i16. w.  ; ref. testout
i16: h.  m2   , i17. w.  ; ref. start coroutine
i17: h.  m18  , i18. w.  ; ref. init semaphore
i18: h.  m19  , i19. w.  ; ref. init mailbox
i19: h.  m23  , i21. w.  ; ref. entry CL after init
i20: a10                 ; antal hw i message extention
i21: h.  m25  , i22. w.  ; ref. head active queue
i22: h.  m26  , i23. w.  ; ref. head timer queue
i23: h.  m38  , i24. w.  ; ref. start event procedure table
i24: h.  m39  , i25. w.  ; ref. top event procedure table
i25: h.  m41  , i26. w.  ; ref. testoutput segment number
i26: h.  m42  , i27. w.  ; ref. testbuffer descriptor 1
i27: h.  m43  , i28. w.  ; ref. testbuffer descriptor 2
i28: h.  m44  , i30. w.  ; ref. testoutput active
i29:      0,r.10         ; tail

; testoutput record type 1  ( start up )

i30: h.  m37  , i39. w.  ; code start addr.
i31=k+2,  0,0            ; start time
i32=k+2,  0,0            ; version
i33=k+2,  0,0            ; first,last of process

i34:      0              ; <::>

i39: h.  m16  , i40. w.  ; ref. timer_message
i40: h.  m40  , i41. w.  ; exception addr.
i41: h.  m24  , i44. w.  ; current coroutine

                         ; up-start coroutine descriptor
i42:      0,r.13,1,-1    ; 

i43:      0              ; segments in testoutput area
i44: h.  m1   , i45. w.  ; ref. outblock
i45: h. m125  , i46. w.  ; ref. testoutput area segment no
i46: h.  m20  , i47. w.  ; ref. create_pool
i47: h.  m47  , i48. w.  ; ref. free_att
i48: h.  m48  , i49. w.  ; ref. used_att
i49: h.  m68  , i50. w.  ; ref. cdescr
i50: h.  m63  , i51. w.  ; ref. first_ttda
i51: h.  m64  , i52. w.  ; ref. top_ttda
\f

;. tas 1.0 14.05.87        initialize                inittxt    ...3...

i52: h.  m65  , i53. w.  ; ref. tdescr_pool
i53: h.  m66  , i54. w.  ; ref. used_tdescr
i54: h.  m61  , i55. w.  ; ref. mcltable_base
i55: h.  m62  , i56. w.  ; ref. top_mcltabel
i56: h.  m124 , i57. w.  ; ref. <:tasspool:>
i57: h.  m60  , i58. w.  ; ref. free
i58: h.  m56  , i59. w.  ; ref. segmenttabel_base
i59: h.  m57  , i60. w.  ; ref. areatable_base
i60: h.  m58  , i61. w.  ; ref. top_areatable
i61: h.  m49  , i62. w.  ; ref. coretable_base
i62: h.  m50  , i63. w.  ; ref. coretable_top
i63: h.  m51  , i64. w.  ; ref. coretable_size
i64: h.  m54  , i65. w.  ; ref. free_head
i65: h.  m52  , i66. w.  ; ref. c_entry
i66: h.  m55  , i67. w.  ; ref. corebuffer_base
i67: h. m126  , i68. w.  ; ref. lock_sem
i68: h. m121  , i69. w.  ; ref. std name base for mcl programmer
i69: h. m123  , i75. w.  ; ref. <:tascat:>
i75: h. m161  , i76. w.  ; ref. max_tbuf_size
i76: h.  m67  , i77. w.  ; ref. free_term pool addr
i77: h. m162  , i78. w.  ; ref. std seg i link spool area
i78: h. m100  , i79. w.  ; ref. addr signon text buffer
i79: h. m167  , i80. w.  ; ref. name base for terminal ps processer (max name base)
i80: h. m168  , i81. w.  ; ref. name base for spool/test area
i81: h. m170  , i82. w.  ; ref. <:tem:> navn på ps processen
i82: h. m171  , i83. w.  ; ref. pda for tascat processen
i83: h. m172  , i84. w.  ; ref. antal timeout på term. i mcl
i84: h. m174  , i85. w.  ; ref. systxt pool adresse
i85: h. m175  , i86. w.  ; ref. hw i txt delen af systxt buffer
i86: h. m231  , i87. w.  ; ref. max create pool messages
i87: h. m234  , i88. w.  ; ref. antal frie corebuffere
i88: h. m235  , i89. w.  ; ref. antal frie indgange i mcltable
i89: h. m236  , i90. w.  ; ref. antal frie indgange i terminal type tabel
i90: h. m179  , i91. w.  ; ref. testmaske
i91: h. m237  , i92. w.  ; ref. antal segmenter i spool område
i92: h. m243  , i93. w.  ; ref. coretable_lock semaphor
i93: h. m255  , i94. w.  ; ref. send message til remoter
i94: h. m262  , 0    w.  ; ref. max create link
                         ; end init list

i70:  1<23               ;
i74:  14<12+1            ;

i71:  9<12+1             ; init data message til tascat
i72:  0                  ; first data
\f

;. tas 1.0 14.05.87        initialize                inittxt    ...4...

i73:  0                  ; last data
      0                  ; version
      0                  ;  -


; input område til statup værdier fra tascat

o0:                      ; start buffer

o2:   6                  ; antal cdescr
o3:   1                  ; antal terminal type beskrivelser
o4:   3                  ; antal terminal beskrivelse
o5:   3                  ; antal indgange i mcltable
o6:   <:ttspool:>,0      ; navn på spool area
o7:   15                 ; antal core buffere
o8:   3                  ; antal att event descriptorer
o9:   0                  ; reserve on/off  , send message til remoter
      226050             ; lower 
o10:  226069             ; upper tas std name base for mcl programmer
o11:  6                  ; antal terminal buffere
o12: 100                 ; max_tbuf_size
o13:   3                 ; std seg i link spool area
o14:  90                 ; hw i signon text buffer
      226050             ; lower
o15:  226052             ; upper name base for test/spool area
o16:  <:xtem:>,0,0       ; <:tem:> navn på ps processen
o17:  <:ttest:>,0,0      ; navn på testarea
o18:  0                  ; antal timeout på term i mcl
o19:  0                  ; antal hw til txt i systxt buffer
o20:  0                  ; antal udestående systxt messages
o21:  0                  ; testmaske
o22:  0                  ; max pools efter create pool message
o23:  0                  ; max sessions
o24:  0                  ; max createlinks

o1 = k-2                 ; sidste i buffer

; variable der bruges i forbindelse med create pd message fra TAS

i101: 0, r.4             ; process name til wait message
i102: 0                  ; buf
i103: 20<12 + 0          ; konstant
i104: 0                  ; message area: +0 skal være 10<12+0
i105: 0                  ; ADP device name
i106: 0                  ; -
      0                  ; -
i107: 0                  ; -
i108: 0                  ; lanmain navn
i109: 0                  ; -
      0                  ; -  end message area:
i110: 0                  ; -  altid 0, sidste af lanmain navn
      0                  ; nametable entry            
i111: 6<12+0             ; create link message
      1                  ; device type
      0                  ; device index
      -1                 ; device number
      0                  ; ADP device name
i112: 0                  ; -
      0                  ; -
i113: 0                  ; - end create link message
i114: 0                  ; answer area
i115: 0, r.7

\f

;  tas 1.0 14.05.87        initialize                 inittxt   ...5...

; register content at entry
;
;         called from s    called from fp
;   w0     prim input        
;   w1                      abs addr fp start
;   w2     prim output      command stack top
;   w3     own pda          program name ref

l2:                      ; init entry:
c.a89<0  ; if fp version
m.fp version
      al  w2  x2-2       ;
      rs. w2  i3.        ;   set top own process
      rs. w1  i2.        ;   save abs addr fp start
      am.     (i2.)      ;   get own pda
      rl  w3  h16        ;
z.
      rs. w3  i1.        ;   set own pda
c.(:-a89-1:)<0 ; if not fp version
m.not fp verison
      am.     (i1.)      ;   set first process addr in
      rl  w2  22         ;   first word of process
      rs  w2  x2         ;

; set exception addr
b. i5 w.
      am.     (i0.)      ;
      al. w3  i0.        ;
      al  w0  0          ;
      jd      1<11+0     ;   set_interrupt;
      jl.     i1.        ;
i0:   u0.                ;
i1:
e.
z.  ; not fp version

; set abs addresses in external list

      al. w1  q3.        ;
      jl.     4          ;
j0:   al  w1  x1+2       ;   for p:=first in external list 
      rl  w2  x1         ;       until last do
      se  w2  0          ;   begin
      wa  w2  2          ;     no:=word(p);
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...6...

      rs  w2  x1         ;     if no<>0 then no:=no+p;
      se. w1  q4.        ;     word(p):=no;
      jl.     j0.        ;   end;


; escape routine til at undersøge når der skrives i bestemt adresse

c.a89<5                         ;  if include escape 
m.excape included

b.  i20 w.

      jl.     i8.        ;  skip
      
i0: 0,r.8                ;  dump area
      sz  w2  1          ;  make even
      al  w2  x2-1       ;
      sn. w2  (i2.)      ;  if effektiv adresse = overvåget addr then
      jl.     i1.        ;  goto hit;
      so  w3  2.001000   ;  if escape ikke på ds then
      re.     i0.        ;  return;
      al  w2  x2-2       ;
      se. w2  (i2.)      ;  if eff.addr.<>overvåget then
      re.     i0.        ;  return;
i1:   rl. w1  i3.        ;
      rl. w0  i0.+10     ;  tab(i):=ic;
      rs  w0  x1         ;
      al  w1  x1+2       ;  i:=i+1;
      sl. w1  i5.        ;  if i=top then i:=0;
      al. w1  i4.        ;
      rs. w1  i3.        ;
      re.     i0.        ;  return;
m.escape buffer
i2:   a87                ;  overvåget addr;
i3:   0                  ;  addr i tab;
i4:   0,r.10             ;  tab(0:10);
i5:    

i7:   1<22 + 1<14        ;  excape mode bit=1, escape mask bit 9 = 1
i8:   rl. w0  i2.        ;
      sn  w0  0          ;   
      jl.     i9.        ;
      al. w1  i4.        ;  hvis adresse til at overvåge 
      rs. w1  i3.        ;
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...7...

      rl. w0  i7.        ;  set escape
      al. w3  i0.        ;
      jd      1<11+1     ;
i9:
e.

z.

; initialize via point list

      al. w2  i0.-2      ;
j1:   al  w2  x2+2       ;   for all points in list do
      rs. w2  i4.        ;   begin
      rl  w1  x2         ;
      sn  w1  0          ;
      jl.     j3.        ;
      wa  w2  2          ;
j2:   bz  w3  x2         ;     while chain not empty do
      sl  w3  q5         ;     begin
      je      -80        ;       w2:=addr of elem in chain;
      ls  w3  1          ;       n:=byte(w2);
      rl. w0  x3+q3.     ;       if n>max ext then fault;
      sn  w0  0          ;       if external(n)=0 then fault;
      je      -80        ;
      al  w3  x2         ;       w3 := w2+byte(w2+1); 
      al  w2  x2+1       ;
      ba  w2  x2         ;       word(w2):=external(n);
      rs  w0  x3         ;     end;
      se  w3  x2-1       ;
      jl.     j2.        ;
      rl. w2  i4.        ;
      jl.     j1.        ;   end;
j3:   

c.a89<0  ; if fp version
; set exception addr

      rl. w3  i40.       ; set_in:
      al  w0  0          ;
      jd      1<11+0     ;   set_interrupt;
z.

; set parent name

\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...8...

      am.     (i1.)      ;
      rl  w1  50         ;   w1:=parent pda;
      rl. w2  i12.       ;
      dl  w0  x1+4       ;
      ds  w0  x2+2       ;
      dl  w0  x1+8       ;
      ds  w0  x2+6       ;   move parent name;

; send init data message til tascat

      al. w1  o0.        ;
      al. w2  o1.        ;
      ds. w2  i73.       ;  sæt first og last i massage
      am.     (i30.)     ;  sæt version i message
      dl  w2  4          ;
      ds. w2  i73.+4     ;
      al. w1  i71.       ;
      rl. w3  i69.       ;
c. a89<3  ; if send message
m.init data message included
      jd      1<11+16    ;  send message
      al. w1  i29.       ;
      jd      1<11+18    ;  wait answer
      se  w0  1          ;  if result<>1 then
      je      -15        ;    fault;
      rl. w0  i29.       ;  if answer.result<>0 then
      se  w0  0          ;    fault;
      je      -15        ;
z.

; init variable in CL

c.(:-a89-1:)<0  ; if not fp version
      am.     (i1.)      ;   top used:=top addr - 4 own process
      rl  w1  24         ;
      al  w1  x1-4       ;
      rs. w1  i3.        ;
z.    
      rl. w1  o21.       ;   
      rs. w1  (i90.)     ;   sæt testmaske i CL
      rl. w1  o22.       ;
      rs. w1  (i86.)     ;   sæt max create pool messages i CL
      rl. w1  o24.       ;
      rs. w1  (i94.)     ;   sæt max create links messages i CL
      rl. w1  i3.        ;
      rs. w1  (i5.)      ;   set top used;
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...9...

      al. w1  l3.        ;
      rs. w1  (i6.)      ;   set first free core
      rl. w1  i1.        ;
      rs. w1  (i7.)      ;   set own pda
      dl  w0  x1+74      ;
      ds. w0  (i79.)     ;   set max base = name base for term ps processer
      dl  w0  110        ;
      ds. w0  (i8.)      ;   set own start time;
      dl. w0  o10.       ;
      ds. w0  (i68.)     ;   set std name base for mcl programmer
      dl. w0  o15.       ;
      ds. w0  (i80.)     ;   set name base for test/spool area
      rl. w0  o9.        ;
      rs. w0  (i93.)     ;   set send message til remoter
      rl. w1  i81.       ;
      dl. w0  o16.+2     ;   sæt navn på <:tem:> ps processen
      ds  w0  x1+2       ;
      dl. w0  o16.+6     ;
      ds  w0  x1+6       ;
      rl. w0  o18.       ;   sæt antal timeout perioder på
      sl  w0  2000       ;   terminalen mår mcl læser
      al  w0  2000       ;
      ls  w0  12         ;
      rs. w0  (i83.)     ;
      rl. w3  i69.       ;   sæt pda for tascat processen
      jd      1<11+4     ;    process description
      sn  w0  0          ;   if pda=0 then fault;
      je      -15        ;
      rs. w0  (i82.)     ;
      rl. w1  i21.       ;
      rs  w1  x1         ;   init active queue to empty
      rs  w1  x1+2       ;
      rl. w1  i22.       ;   init timer queue to empty
      rs  w1  x1         ;
      rs  w1  x1+2       ;
      al. w1  i42.       ;
      rs. w1  (i41.)     ;   init current coroutine
      rl. w1  i23.       ;
      jl.     4          ;
j13:  al  w1  x1+2       ;   init event procedure list
      sn. w1  (i24.)     ;
      jl.     j14.       ;
      al  w2  x1         ;
      wa  w2  x1         ;
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...10...

      rs  w2  x1         ;
      jl.     j13.       ;
j14:  rl. w0  o7.        ;
      bs. w0  1          ;      lock_sem value init til antal corebuffere - 1
      rl. w2  i67.       ;
      jl. w3  (i17.)     ;   init_semaphor(lock_sem,init value);
      rl. w0  o13.       ;
      rs. w0  (i77.)     ;   init std seg i link spool area
      al  w0  1          ;
      rl. w2  i92.       ;
      jl. w3  (i17.)     ;   init_semaphor(coretable_lock,1);
      
; reserve testoutput buffers

      al  w1  514        ;
      jl. w3  (i14.)     ;   reserve_buffer(514,first,last);
      sh  w3  -1         ;   manger core sæt first til <0
      al  w1  x3         ;
      al  w2  x2-2       ;   reserve one unused word after buffer;
      am.     (i26.)     ;
      ds  w2  8          ;   set first,last in testbuffer 1 message
      rs. w1  (i9.)      ;   set word addr.
      al  w1  514        ;
      jl. w3  (i14.)     ;   reserve_buffer(514,first,last);
      sh  w3  -1         ;   manger core sæt first til <0
      al  w1  x3         ;
      al  w2  x2-2       ;   reserve one unused word after buffer;
      am.     (i27.)     ;
      ds  w2  8          ;   set first,last in testbuffer 2 message;
      rl. w2  i26.       ;
      rs. w2  (i10.)     ;   current testbuffer is buffer 1

; init message extention list

      rl. w1  o20.       ;   antal udestående systxt buffere
      al  w1  x1+5       ;   + 5 
      wa. w1  o2.        ;   + antal cdescr;
      wm. w1  i20.       ;   * antal hw til hver mess buf ext
      jl. w3  (i14.)     ;   reserve_buffer(w1,first,last);
      sh  w3  -1         ;   manger core skip initialisering
      jl.     j10.       ;
      rs. w1  (i11.)     ;   message extention head := first;
      al  w3  x1         ;   this:=first;
j4:   al  w3  x3+6       ; rep: next:=this+ext size;
      sl  w3  x2         ;   if next <= last then
      jl.     j5.        ;   begin
      rs  w3  x1         ;     elem(this):=next;
      al  w1  x3         ;     this:=next;
      jl.     j4.        ;     goto rep;
j5:   al  w0  0          ;   end;
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...11...

      rs  w0  x1         ;   elem(this):=0;

; set process catalog baser til name base for test/spool area

j10:  dl. w1  (i80.)     ;
      al. w3  i34.       ;   name = <::>
      jd      1<11+72    ;   set catalog base 
      se  w0  0          ;
      je      -17        ;   if result<>ok then fault;

; initialize testoutput

      rl. w3  i13.       ;   flyt navn på test output area til CL
      dl. w1  o17.+2     ;   
      ds  w1  x3+2       ;
      dl. w1  o17.+6     ;
      ds  w1  x3+6       ;
      al. w1  i29.       ;   lookup entry(testareaname,
      jd      1<11+42    ;     tail,result);
      se  w0  0          ;   if unknown then
      jl.     j15.       ;     goto err:
      rl. w0  i29.       ;
      sh  w0  0          ;   if tail.size <=0 then
      jl.     j15.       ;     goto err:
      rs. w0  (i25.)     ;   testarea size:=tail.size;
      rs. w0  i43.       ;
      jd      1<11+92    ;   create entry lock process(testareaname);
      jd      1<11+8     ;   reserve process(testareaname);
      sn  w0  0          ;   if result <> normal then
      jl.     j16.       ;   begin
j15:  al  w1  1          ; err:  testoutput inactive; goto set_in:
      rs. w1  (i28.)     ;   end;
      jl.     j6.        ;
j16:  rl. w1  (i10.)     ;
      al  w0  0          ;   n:=0;
      rs. w0  i4.        ;
j17:  rl  w2  x1+6       ; next segment: w:=first addr current buffer
      al  w0  0          ;   word(w):=0;
      rs  w0  x2         ;   word(w+2):=0;
      rs  w0  x2+2       ;
      jl. w3  (i44.)     ;   outblock;
      rl. w3  i4.        ;   n:=n+1;
      al  w3  x3+1       ;
      rs. w3  i4.        ;
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...12...

      rl. w1  (i10.)     ;
      se. w3  (i43.)     ;   if n<>segments in testarea then
      jl.     j17.       ;   goto next segment;   
      rl  w2  x1+6       ;   w:=first addr current buffer;
      al  w3  0          ;   testbuffer segment no := 0;
      rs  w3  x1+10      ;
      rs. w3  (i45.)     ;
      dl. w0  (i8.)      ;   make test record:
      ds. w0  i31.       ;   set start time;
      am.     (i1.)      ;
      dl  w0  24         ;
      ds. w0  i33.       ;   set first,last of own process
      am.     (i30.)     ;
      dl  w0  4          ;
      ds. w0  i32.       ;   set version;
      rl. w0  i74.       ;   length:=14, type:=1;
      al. w1  i30.       ;   tail:=test start up record;
      jl. w3  (i15.)     ;   testout(length,type,tail);

; reserver og init signon text buffer

j6:   rl. w1  o14.       ;  antal hw i text delen
      al  w1  x1+16      ;  + 16 til hoved
      jl. w3  (i14.)     ;  reserve_buffer(hw, first, last);
ks -44
      sh  w3  -1         ;   manger core skip initialisering
      jl.     j19.       ;
      rs. w1  (i78.)     ;  signon text buffer addr := first;
      al  w0  1          ;
      al  w2  x1         ;
      jl. w3  (i17.)     ;  init_semaphor(signon,1);
      al   w2  9         ;
      ls  w2  12         ;
      al  w2  x2+2       ;  init message i signon buffer
      rs  w2  x1+6       ;
      al  w2  x1+14      ;
      al  w3  x2         ;
      wa. w3  o14.       ;
      ds  w3  x1+10      ;

; reserver og initialize systxt buffer

j19:  rl. w1  o19.       ;   antal hw i txt delen
      rs. w1  (i85.)     ;
      al  w1  x1+14      ;   + 14 til hoved
      al  w0  3          ;   antal 3
      jl. w3  (i46.)     ;   create_pool(systxt pool);
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...13...

      rs. w2  (i84.)     ;

; opret attention event descriptor pool

      al  w1  8          ;  element size
      rl. w0  o8.        ;
      jl. w3  (i46.)     ;  create_pool(antal,size,pool);
      rs. w2  (i47.)     ;  free_att:=pool;
      al  w0  0          ;
      rs. w0  (i48.)     ;  used_att:=0;  /* tom kæde */

; opret pool med ph, th, sm coroutine beskrivelser

      al  w1  q200       ;  q200 er antal hw i cdescr til ph, th, sm
      rl. w0  o2.        ;  antal i startup fil
      jl. w3  (i46.)     ;  create_pool(antal,hw,pool);
      rs. w2  (i49.)     ;  cdescr:=pool;

; opret pool med terminal buffere

      rl. w1  o12.       ;
      rs. w1  (i75.)     ;  sæt max_tbuf_size;
      rl. w0  o11.       ;  antal fra startup
      jl. w3  (i46.)     ;  create_pool(antal,max_tbuf_size,p);
      rs. w2  (i76.)     ;  term_free:=p;
      
; opret og init terminal type beskrivelser

      rl. w0  o3.        ;
      rs. w0  (i89.)     ;  sæt antal i CL
      al  w1  f120       ;  hw:=entry_size * antal;
      wm. w1  o3.        ;  reserve_buffer( hw,
      jl. w3  (i14.)     ;    first,last);
ks -44
      sh  w3  -1         ;   manger core skip initialisering
      jl.     j21.       ;
      al  w2  x2+1       ;  top:=last+1;
      rs. w1  (i50.)     ;  first_ttda:=first;
      rs. w2  (i51.)     ;  top_ttda:=top;
      al  w0  0          ;
      al  w3  -1         ;
j20:  sl  w1  x2         ;  for alle indgange do begin
      jl.     j21.       ;    ttda.type:=-1;
      ds  w0  x1+2       ;    ttda.users:=0;
      al  w1  x1+f120    ;  end;
      jl.     j20.       ;

\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...14...

; opret pool til terminal beskrivelser

j21:  al  w1  f100       ;
      rl. w0  o4.        ;
      wa. w0  o24.       ;  antal := max createlinks + antal terminal beskr.
      jl. w3  (i46.)     ;  cdescr_pool(antal,size,pool);
      rs. w2  (i52.)     ;  tdescr_pool:=pool;
      al  w0  0          ;
      rs. w0  (i53.)     ;  used_tdescr:=0;

; opret mcltable

      rl. w0  o5.        ;
      rs. w0  (i88.)     ;  sæt antal i CL
      al  w1  f90        ;
      wm. w1  o5.        ;  hw:=entry_size * antal;
      jl. w3  (i14.)     ;  reserve_buffer(hw,first,last);
ks -44
      sh  w3  -1         ;   manger core skip initialisering
      jl.     j23.       ;
      al  w2  x2+1       ;  top:=last+1;
      rs. w1  (i54.)     ;  mcltable_base:=first;
      rs. w2  (i55.)     ;  mcltable_top:=top;
      al  w0  0          ;
j22:  sl  w1  x2         ;  for alle indgange do
      jl.     j23.       ;    mcl_entry.pda:=0;
      rs  w0  x1         ;
      al  w1  x1+2       ;
      jl.     j22.       ;

; kontrol af spool area

j23:  rl. w3  i56.       ;  flyt navn fra startup fil til CL;
      al. w2  o6.        ;
      dl  w1  x2+2       ;
      ds  w1  x3+2       ;
      dl  w1  x2+6       ;
      ds  w1  x3+6       ;
      al. w1  i29.       ;  lookup_entry(spoolarea name,
      jd      +1<11+42   ;    tail,result);
      se  w0  0          ;  if unknown then
      je      -14        ;    fault;
      rl. w0  i29.       ;
      sh  w0  0          ;  if tail.size<=0 then
      je      -14        ;    fault;
      rs. w0  (i57.)     ;  free:=tail.size;
      rs. w0  (i91.)     ;  sæt antal segmenter i CL
      rs. w0  (i60.)     ;  top_areatable:=tail.size;
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...15...

      jd      +1<11+92   ;  create entry lock process (area process)
      jd      +1<11+8    ;  reserve_process
      rl. w1  i29.       ;
      al  w1  x1+1       ;
      ls  w1  -1         ;  table_size:=
      ls  w1  1          ;    tail.size rundet op til lige;
      rs. w1  i29.       ;

; opret og init segment table

      jl. w3  (i14.)     ;  reserve_buffer(table_size,first,last);
ks -44
      sh  w3  -1         ;   manger core skip initialisering
      jl.     j25.       ;
      rs. w1  (i58.)     ;  segmenttable_base:=first;
      al  w2  x2+2       ;  top:=last+2;
      al  w0  -1         ;
j24:  sl  w1  x2         ;  for alle indgange do
      jl.     j25.       ;    segmenttabel_entry:=-1;
      hs  w0  x1         ;
      al  w1  x1+1       ;
      jl.     j24.       ;

; opret og init areatable

j25:  rl. w1  i29.       ;
      jl. w3  (i14.)     ;  reserve_buffer(table_size,first,last);
ks -44
      sh  w3  -1         ;   manger core skip initialisering
      jl.     j27.       ;
      al  w2  x2+2       ;  top:=last+2;
      rs. w1  (i59.)     ;  areatable_base:=first;
      al  w0  -1         ;
j26:  sl  w1  x2         ;  for alle indgange do
      jl.     j27.       ;    entry:=-1;
      hs  w0  x1         ;
      al  w1  x1+1       ;
      jl.     j26.       ;

; opret og init coretable

j27:  al  w1  +f80       ;
      wm. w1  o7.        ;  hw:=entry_size * antal;
      jl. w3  (i14.)     ;  reserve_buffer(hw,first,last);
ks -44
      sh  w3  -1         ;   manger core skip initialisering
      jl.     j38.       ;
      al  w2  x2+2       ;  top:=last+2;
      rs. w1  (i61.)     ;  coretable_base:=first;
      rs. w2  (i62.)     ;  coretable_top:=top;
      rl. w0  o7.        ;
      rs. w0  (i63.)     ;  coretable_size:=antal indgange;
      rs. w1  (i65.)     ;  c_entry:=first;
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...16...

      rs. w1  (i64.)     ;  free_head:=first;  prev:=first;
                         ;  /* hægt alle indgange sammen på free_head */
j28:  al  w3  x1+f80     ; rep:  cur:=prev + entry_size;
      sl  w3  x2         ;    if cur >= coretable_top then 
      jl.     j29.       ;      goto ex;
      al  w0  x3         ;    prev.first:= 1<23 + cur;
      wa. w0  i70.       ;    prev:=cur;
      rs  w0  x1         ;    goto rep;
      al  w1  x3         ;
      jl.     j28.       ;
j29:  rl. w0  i70.       ; ex:  prev.first:=1<23;
      rs  w0  x1         ;

; sæt first free core til start af init

      al. w1  i0.        ;
      rs. w1  (i6.)      ;

; opret corebuffer pulje

j38:  rl. w1  o7.        ;
      rs. w1  (i87.)     ;  sæt antal i CL
      ls  w1  9          ;  hw:=antal * 512;
      jl. w3  (i14.)     ;  reserve_buffer(hw,first,last);
ks -44
      rs. w1  (i66.)     ;  corebuffer_base:=first;

; set process catalog baser til max baser

      dl. w1  (i79.)     ;
      al. w3  i34.       ;   name = <::>
      jd      1<11+72    ;   set catalog base 
      se  w0  0          ;
      je      -17        ;   if result<>ok then fault;

; vent på create pd messages fra TAS

j30:  al. w1  i104.      ;  message addr
      al. w3  i101.      ;  name addr
      jd      1<11+20    ;  wait message
      sh  w0  0          ;
      je      -15        ;  hvis ingen buffer så fejl
      rs. w2  i102.      ;  gem buffer addr
      rl. w0  i104.      ;  
      se. w0  (i103.)    ;  hvis første ord ikke er 20<12
      jl.     j35.       ;  send svar til TAS
      dl. w1  i106.      ;
      se  w0  0          ;  hvis første ord i navn er 0 er der ikke flere
      jl.     j31.       ;  send svar til TAS og fortsæt
      rs. w0  i114.      ;
      al  w0  1          ;
      al. w1  i114.      ;
      jd      1<11+22    ;
      jl.     j36.       ;
j31:  ds. w1  i112.      ;  flyt ADP device name til create link message
      dl. w1  i107.      ;
      ds. w1  i113.      ;
      al. w1  i111.      ;
      al. w3  i108.      ;
      al  w0  0          ;
      rs  w0  x3+8       ;  nametable entry = 0;
      jd      1<11+16    ;  send create link message
      sh  w2  0          ;
      je      -12        ;  hvis der mangler buffere så fejl
      al. w1  i114.      ;
      jd      1<11+18    ;  wait answer
      sn  w0  1          ;  hvis result<>ok så send svar til TAS
      jl.     j32.       ;
      rs. w0  i114.      ;
      jl.     j34.       ;
j32:  rl. w1  i114.      ;
      sn  w1  0          ;  hvis status ord i svar ikke er 0
      jl.     j33.       ;  send svar til TAS
      ls  w1  -8         ;
      al  w1  x1+20      ;
      rs. w1  i114.      ;
      jl.     j34.       ;
j33:  al. w3  i105.      ;
      rl. w1  i115.      ;
      jd      1<11+54    ;  create peripheal process(ADP device name);
      sn  w0  0          ;
      jl.     j37.       ;
      rl  w1  0          ;
      al  w1  x1+30      ;
      rs. w1  i114.      ;
      jl.     j34.       ;
j37:  al. w3  i105.      ;  reserve process(ADP device name)
      jd      1<11+8     ;
      sn  w0  0          ;
      jl.     j34.       ;  
      rl  w1  0          ;
      al  w1  x1+10      ;
      rs. w1  i114.      ;
j34:  am      -2         ;
j35:  al  w0  3          ;  send svar til TAS
      rl. w2  i102.      ;
      al. w1  i114.      ;
      jd      1<11+22    ;
      jl.     j30.       ;  hop til vent på næste message fra TAS
j36:

; put coroutine descriptors in active list

      al. w1  q0.        ;
      jl.     4          ;
j7:   al  w1  x1+6       ;   for all coroutines in list do
      rs. w1  i4.        ;
      rl  w2  x1         ;
      sn  w2  0          ;   start_coroutine(priority,ic,corout);
      jl.     j8.        ;
      wa  w2  2          ;
      rl  w0  x1+4       ;
      al  w1  x1+2       ;
      wa  w1  x1         ;
      jl. w3  (i16.)     ;
      rl. w1  i4.        ;
      jl.     j7.        ;

; kontroller at processen er oprettet med nok area og buf claim
\f

;. tas 1.0 14.05.87        initialize                 inittxt   ...17...

j8:   rl. w0  (i5.)      ; w0:=first_free - top_used;
      rl. w2  (i6.)
ks -45
      ws  w0  4          ;
      sh  w0  -1         ;   if missing core then
      jl. w3  j47.       ;      missing core message;

      rl. w2  i1.        ;
      zl  w3  x2+26      ;  w3 processens buf claim
      rl. w1  o22.       ;  w1:= pools efter create pool message
      wa. w1  o8.        ;     + att event descr
      wa. w1  o2.        ;     + cdescr
      wa. w1  o20.       ;     + max systxt ude
      al  w1  x1+2       ;     + 2 til rm, clock
ks -46
      sh  w3  x1-1       ;  if ikke nok buffere then
      jl.     4          ;    error message
      jl.     j11.       ;
      al  w0  x1+1       ;
      jl. w3  j46.       ;
      rl. w2  i1.        ;

j11:  zl  w3  x2+27      ;  w3 processens area claim (area til spool og test er brugt )
      rl. w1  o5.        ;  buf claim := antal mcltable indgange  
      wa. w1  o22.       ;  + pools efter create pool message
      wa. w1  o23.       ;  + max sessions
ks -47
      sh  w3  x1-1       ;  if ikke nok area then
      jl.     4          ;    error message
      jl.     j12.       ;
      al  w0  x1+2       ;
      jl. w3  j45.       ;

; set process catalog baser til std name base for mcl programmer

j12:  dl. w1  (i68.)     ;
      al. w3  i34.       ;   name = <::>
      jd      1<11+72    ;   set catalog base 
      se  w0  0          ;
      je      -17        ;   if result<>ok then fault;

      

; start timer

      al  w0  a3         ;   if sec mellem timerscan > 0 then
      se  w0  0          ;
      jl. w3  (i39.)     ;   timer_message;

; goto CL

      rl. w0  i124.      ;   hvis der har været fejl så stop
      se  w0  0          ;
      jl. w3  j44.       ;

      jl.     (i19.)     ;   goto CL;

; error message rutiner

i121: 16<12 + 1<11        ; missing core message to parent;
      0,<: core missing:>,0 

i122: 16<12 + 1<11        ; missing core message to parent;
      0,<: buf needed:>,0,0 

i123: 16<12 + 1<11        ; missing core message to parent;
      0,<: area needed:>,0,0 

i125: 4<12 + 1    ; break message to parent;
      0,<:break after error:> 

i124: 0

j44:  al  w0  0          ;
      am      i125-i123  ;   stop message
j45:  am      i123-i122  ;   message = area needed
j46:  am      i122-i121  ;   message = buf  needed
j47:  al. w1  i121.      ;   message = core missing
      rs  w0  x1+2       ;
      rs. w3  i124.      ;   send message(parent,mess,buf);
      rl. w3  i12.       ;
j43:  jd      1<11+16    ;   if buffer claim exceeded then
      se  w2  0          ;   begin
      jl.     j42.       ;
j41:  jd      1<11+24    ; no buffers: wait envent;
      se  w0  1          ;     if not answer then
      jl.     j41.       ;     goto no buffers;
      jd      1<11+26    ;     get event; goto send;
      jl.     j43.       ;   end;
j42:  jd      1<11+18    ;   wait answer(result,mes,buf);
      jl.     (i124.)    ;   return;
\f

;  tas 1.0 14.05.87        initialize lists           inittxt   ...18...

; list of coroutines to initialize
; <rel. descr addr>, <rel. start addr>, <priority>

q0:   u9. , u30. , a20   ; init rm coroutine
      0                  ; end list



\f

;  tas 1.0 14.05.87        external list              inittxt   ...19...

p.<:extdeftxt:>

l3 = k  ; first free core

e. ; init
▶EOF◀