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