|
|
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: 34560 (0x8700)
Types: TextFile
Names: »inittxt «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
└─⟦40b1eb8cd⟧
└─⟦this⟧ »inittxt «
\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◀