|
|
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: 124416 (0x1e600)
Types: TextFile
Names: »tmount«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦0b92c64d5⟧ »ctb«
└─⟦this⟧
(bmount = set 1 disc
bmount = slang proc.options
scope user bmount
print bmount integer words.4 0.6
)
b. w.
p.1
; kll 17.11.71 boss 2, psjob, mount, ...1...
s0=0, s1=0
; Watchdog sends a message to the remoter process in the monitor
; and gets the answer when the remote buttom is pressed on a mt-
; station. Watchdog scans the stations treated by boss and if one
; is found in the state unidentified document mounted, an operation
; is sent to the corresponding remoter corutine.
; The remoter reads and writes labels on tapes when they are moun-
; ted as demanded by the operator. If a psjob has ordered a tape
; the remoter will send an operation when it is mounted.
; The psjob, mount receives all messages from job concerning mount
; and release of tapes. The psjob is using an action-state algo-
; rithm to reserve and release stations, include or exclude jobs
; as users and correspond with the operator.
; The rewinder can rewind or unload tapes on demand from a psjob.
; In that way the psjob does not need to wait for the rewinding
; itself.
s. f16,g50 b. b130 , s20 , t20 w.;
f14, f15 ;
77 12 16, 133 ; version id:
m. boss 2 tmount
b. a1 w. ;
; g1 length psjob mount g2 entry length station table
; g3 start tape table g4 entry length tape table
; g5 length tape table g6 length mount table
; g7 reserved state g8 start station table
; g9 rel mount spec g10 rel mount ring
; g11 rel mount tape g12 rel suspend
; g13 rel release g14 rel tape ready
; g15 start remoter g16 rel entry remoter
; g17 length remoter g18 start label page
; g19 start watchdog g20 length watchdog
; g21 rel entry watchdog g22 start rewinder
; g23 length rewinder g24 rel entry rewinder
; g25 start device list g26 start commandio, name, label
; g27 length name, label g28 rel entry name
; g29 rel entry label
; s-names are used for relatives in station table
; t-names are used for relatives in tape table
f0: b1., b3., b5., b6., b8., b10., b11., b14., b15., b16., b17.
b18., b20., b21., b22., b23., b24., b25., b28., b29., b37.
b30., b31., b32., b33., b34., b35., b36., b39., b40., b41., b42.
b43., b44., b45., b46., b47., b48., b49., b50., b58., b59.
b60., b61., b62., b63., b64., b65., b66., b67., b70., b71., b72.
b73., b74., b75., b77., b78., b79., b80., b81., b82., b84.
b86., b87., b91., b92., b93., b96., b97., b101.,b102.,b103.,b113.,b114.
b111.,b115.,b116.,b117.,b118.,b119.,b120.,b122.,b123.,b51., b52.
b124.,b125.,b126.,b127.
b53., b54., b55., b56., b7.
f2., f3., f4., f5., f6., f7., f8., f9., f10., f12., f13., f16.
0 ;
al. w3 f0. ; w3:= program base;
rl. w2 a1. ;
jl. x2+a1. ; goto init;
a1: f1. ;
e. ;
\f
; kll 27.7.71 boss 2, psjob, mount, ...2...
; Content:
; c1 10 first action
; c2 10 next action
; c3 10 end action
; c4 11 mount special
; c5 12 mount tape
; c6 11 mount ring
; c7 12 suspend
; c8 12 release
; c9 12 tape ready
; c10 13 mount work
; c11 12 search ready tapes
; c12 15 search station
; c13 17 include user
; c14 17 exclude user
; c15 16 remove reservation
; c16 18 reserve station (implies evt. stop job)
; c17 18 stop
; c18 18 proc banker
; c19 19 proc unload
; c20 19 unload
; c21 19 rewind
; c22 20 mount ring
; c23 20 remove ring
; c24 20 display(mount tape)
; c25 15 start job
; c26 15 answer
; c27 18 reserve tape entry
; c28 18 account mount
; c29 15 clear job number
; c30 22 release request line
; c31 19 alarm
; c32 21 proc search name
; c33 23 check work tape exists
; c34 23 check named tape exist
; c35 25 check ring
; c36 24 check station kind
; c38 20 display(mount on special)
; c39 19 release tape entry
; c40 17 not special station
; c41 17 not ordered special
; c42 17 reject mount ring
; c43 17 tape stealer
; c44 17 stations exceeded
; c45 17 suspendings exceeded
; c46 18 release station
; c47 17 tape used by other job
; c48 19 get station
; c49 22 init tape entry
; c50 25 check ring work
; c51 23 action(d4)
; c52 25 set spec device nr
; c53 23 check mount special after mount
; c54 17 mount special after mount
; c56 24 mount on special
; c57 16 change station
; c58 14 finis next
; c59 15 mount
; c60 25 alarm param
; c61 25 alarm param(index)
; c62 24 move bit
; c63 16 search min state
; c64 25 fp syntax
\f
; kll 27.7.71 boss 2, psjob, mount, ...3...
; mount table
; dummy entry in tape table
g8=2 ; start station table
; station table format:
s0 = 0 , s1 = 1 ; device, tape ref
s2 = 2 , s3 = 3 ; label mode < 6 + state, tape kind
s4 = 4 ; project number
s6 = 6 ; descr addr for user
s8 = 8 , s9 = 9 ; rel sem, free and standard
s10 = 10 ; operation: chain
s12 = 12 ;
s14 = 14 ; remoter buf
s16 = 16 ;
g2=18 ; entry length
; state 0: local 3: in use
; 1: named local 4: remoted
; 2: labelled local 5: unreadable
; tape kind 0: work no ring 1: work with ring
; 2: named work no ring 3: named work with ring
; 4: project no ring 5: project with ring
; 6: reserved no ring 7: reserved with ring
; free and standard 1<0: standard else special
; 1<1: reserved to operator else free
g3=g2*e25+g8 ; end station and start tape table
; tape table format:
t0 = 0 , t1 = 1 ; state, station ref
t2 = 2 ; job nr
t4 = 4 ; request line addr
t6 = 6 , t7 = 7 ; abs device, psjob rel
t8 = 8 ; name
t16 = 16 ; name table addr
g4=18 ; entry length
; abs device: spec device nr or 0 for standard stations
; request line addr: 0 == no request line
; even == request line being removed (may contain rel return etc.)
; odd == virt request line addr
g5=g4*e27 ; length tape table
g6=g5+g3 ; end tape table and length of page
; The mounter treates 3 different claims:
; stations : simultaneously used standard stations
; mounts : number of tape mounts
; suspends : simultaneously suspended work tapes
; The page descriptions are used to
; page 1 : mount table
; page 3 : job description
; page 4 : operation
\f
; kll 27.7.71 boss 2, psjob, mount, ...4...
g31: b. c70, d10 w. b. j160 h.
; 0: free
j0=k-g31, c28, c49, c30, c52, c26, c12, 80; mount special
j1=k-g31, c28, c49, c30, c52, c17, c12, 130; mount special wait
j2=k-g31, c28, c49, c30, c16, c25, c12, 80; mount named
j3=k-g31, c28, c49, c30, c17, c16, c12, 130; mount named wait
j4=k-g31, c28, c49, c30, c16, c25, c12, 60; mount work
j5=k-g31, c28, c49, c30, c17, c16, c12, 120; mount work wait
j6=k-g31; c26, 0; mount ring
j7=k-g31; c26, 0; suspend
j8=k-g31, c26, 0; release
j9=k-g31, c11, 0; tape ready
; 10: not wanted mounted named
j10=k-g31, c28, c52, c36, g38, c30, c12, c26, 110; mount special
j11=k-g31, c28, c52, c36, g40, c30, c12, c17, c13, c25, 150; mount special wait
j12=k-g31, c28, c16, c36, g38, c30, c12, c25, 110; mount named
j13=k-g31, c28, c16, c36, g40, c30, c12, c17, c13, c25, 150; mount named wait
j14=k-g31; c31 ; mount work
j15=k-g31, c31 ; mount work wait
j16=k-g31; c26, 10; mount ring
j17=k-g31; c26, 10; suspend
j18=k-g31, c26, 10; release
j19=k-g31, c11, 10; tape ready
; 20: not wanted mounted work
j20=k-g31, c28, c52, c36, g38, c30, c12, c26, 110; mount special
j21=k-g31, c28, c52, c36, g40, c30, c12, c17, c13, c25, 150; mount special wait
j22=k-g31, c28, c16, c36, g37, c30, c12, c25, 100; mount named
j23=k-g31, c28, c16, c36, g39, c30, c12, c17, c13, c25, 140; mount named wait
j24=k-g31, c28, c16, c36, g36, c30, c12, c25, 90; mount work
j25=k-g31, c28, c16, c36, g39, c30, c12, c17, c13, c25, 140; mount work wait
j26=k-g31; c26, 20; mount ring
j27=k-g31; c26, 20; suspend
j28=k-g31, c26, 20; release
j29=k-g31, c11, 20; tape ready
; 30: suspended not mounted work
j30=k-g31, c28, c52, c26, c12, c39, 80; mount special
j31=k-g31, c28, c52, c17, c12, c39, 130; mount special wait
j32=k-g31, c28, c16, c25, c12, c39, 70; mount named
j33=k-g31, c28, c17, c16, c12, c39, 120; mount named wait
j34=k-g31; c31 ; mount work
j35=k-g31, c31 ; mount work wait
j36=k-g31; c26, 30; mount ring
j37=k-g31, c26, 30; suspend
j38=k-g31, c26, c29, c39, 0; release
j39=k-g31, c11, 40; tape ready
\f
; kll 27.7.71 boss 2, psjob, mount, ...5...
; 40: suspended mounted work
j40=k-g31, c28, c52, c30, c39, c36, g38, c12, c26, 110; mount special
j41=k-g31, c28, c52, c30, c39, c36, g40, c12, c17, c13, c25, 150; mount special wait
j42=k-g31, c28, c16, c30, c39, c36, g37, c12, c25, 100; mount named
j43=k-g31, c28, c16, c30, c39, c36, g39, c12, c17, c13, c25, 140; mount named wait
j44=k-g31; c31 ; mount work
j45=k-g31, c31 ; mount work wait
j46=k-g31; c26, 40; mount ring
j47=k-g31, c26, 40; suspend
j48=k-g31, c26, c29, c39, 20; release
j49=k-g31, c11, 40; tape ready
; 50: suspended mounted named
j50=k-g31, c28, c52, c30, c36, g38, c12, c26, 110; mount special
j51=k-g31, c28, c52, c30, c36, g40, c12, c17, c13, c25, 150; mount special wait
j52=k-g31, c28, c16, c30, c36, g38, c12, c25, 110; mount named
j53=k-g31, c28, c16, c30, c36, g40, c12, c17, c13, c25, 150; mount named wait
j54=k-g31; c31 ; mount work
j55=k-g31, c31 ; mount work wait
j56=k-g31; c26, 50; mount ring
j57=k-g31, c26, 50; suspend
j58=k-g31, c26, c29, 10; release
j59=k-g31, c11, 50; tape ready
; 60: ordered not mounted work name zero allowed
j60=k-g31, c53, c26, 80; mount special
j61=k-g31, c53, c17, 130; mount special wait
j62=k-g31, c26, 60; mount named
j63=k-g31, c17, 120; mount named wait
j64=k-g31, c31 ; mount work
j65=k-g31, c17, 120; mount work wait
j66=k-g31, c26, 60; mount ring
j67=k-g31, c26, c15, c46, c30, c27, 30; suspend
j68=k-g31, c26, c15, c46, c30, c29, 0; release
j69=k-g31, c36, g41, c62, c11, 90; tape ready
; 70: ordered not mounted work name zero not allowed
j70=k-g31, c53, c26, 80; mount special
j71=k-g31, c53, c17, 130; mount special wait
j72=k-g31, c26, 70; mount named
j73=k-g31, c17, 120; mount named wait
j74=k-g31; c31 ; mount work
j75=k-g31, c31 ; mount work wait
j76=k-g31, c26, 70; mount ring
j77=k-g31, c26, c15, c46, c30, c27, 30; suspend
j78=k-g31, c26, c15, c46, c30, c29, 0; release
j79=k-g31, c36, g42, c62, c11, 100; tape ready
\f
; kll 27.7.71 boss 2, psjob, mount, ...6...
; 80: ordered not mounted named
j80=k-g31, c53, c26, 80; mount special
j81=k-g31, c53, c17, 130; mount special wait
j82=k-g31, c26, 80; mount named
j83=k-g31, c17, 130; mount named wait
j84=k-g31; c31 ; mount work
j85=k-g31, c31 ; mount work wait
j86=k-g31, c26, 80; mount ring
j87=k-g31; c26, c15, c46, c30, c29, 0; suspend
j88=k-g31, c26, c15, c46, c30, c29, 0; release
j89=k-g31, c36, g43, c62, c11, 110; tape ready
; 90: ordered mounted work name zero allowed
j90=k-g31, c53, c26, 110; mount special
j91=k-g31, c53, c17, c13, c25, 150; mount special wait
j92=k-g31, c26, 90; mount named
j93=k-g31, c36, g44, c17, c13, c25, 140; mount named wait
j94=k-g31, c31 ; mount work
j95=k-g31, c36, g44, c17, c13, c25, 140; mount work wait
j96=k-g31, c26, 90; mount ring
j97=k-g31; c26, c15, c46, c29, 20; suspend
j98=k-g31, c26, c15, c46, c29, 20; release
j99=k-g31, c11, 90; tape ready
; 100: ordered mounted work name zero not allowed
j100=k-g31, c53, c26, 110; mount special
j101=k-g31, c53, c17, c13, c25, 150; mount special wait
j102=k-g31, c26, 100; mount named
j103=k-g31, c36, g44, c17, c13, c25, 140; mount named wait
j104=k-g31; c31 ; mount work
j105=k-g31, c31 ; mount work wait
j106=k-g31, c26, 100; mount ring
j107=k-g31, c27, c26, c15, c46, 40; suspend
j108=k-g31, c26, c15, c46, c29, 20; release
j109=k-g31, c11, 100; tape ready
; 110: ordered mounted named
j110=k-g31, c53, c26, 110; mount special
j111=k-g31, c53, c17, c13, c25, 150; mount special wait
j112=k-g31, c26, 110; mount named
j113=k-g31, c36, g45, c17, c13, c25, 150; mount named wait
j114=k-g31; c31 ; mount work
j115=k-g31, c31 ; mount work wait
j116=k-g31, c26, 110; mount ring
j117=k-g31, c26, c15, c46, 50; suspend
j118=k-g31, c26, c15, c46, c29, 10; release
j119=k-g31, c11, 110; tape ready
\f
; kll 17.11.71 boss 2, psjob, mount, ...7...
; 120: waited not mounted work
j120=k-g31; c64 ; mount special
j121=k-g31; c64 ; mount special wait
j122=k-g31; c64 ; mount named
j123=k-g31; c64 ; mount named wait
j124=k-g31; c64 ; mount work
j125=k-g31; c64 ; mount work wait
j126=k-g31; c64 ; mount ring
j127=k-g31; c64 ; suspend
j128=k-g31, c64, c17, 120; release
j129=k-g31, c36, g46, c13, c25, c62, c11, 140; tape ready
; 130: waited not mounted named
j130=k-g31; c64 ; mount special
j131=k-g31; c64 ; mount special wait
j132=k-g31; c64 ; mount named
j133=k-g31; c64 ; mount named wait
j134=k-g31; c64 ; mount work
j135=k-g31; c64 ; mount work wait
j136=k-g31; c64 ; mount ring
j137=k-g31; c64 ; suspend
j138=k-g31, c64, c17, 130; release
j139=k-g31, c36, g47, c13, c25, c62, c11, 150; tape ready
; 140: waited mounted work
j140=k-g31, c53, c33, c14, c26, c30, c59, 80; mount special
j141=k-g31, c53, c33, c14, c17, c30, c59, 130; mount special wait
j142=k-g31, c33, c14, c26, c30, c59, 70; mount named
j143=k-g31, c33, c14, c17, c30, c59, 120; mount named wait
j144=k-g31; c31 ; mount work
j145=k-g31, c31 ; mount work wait
j146=k-g31, c50, c14, c17, c20, c30, c22, 120; mount ring
j147=k-g31, c14, c27, c26, c15, c46, c30, c21, 40; suspend
j148=k-g31, c14, c26, c15, c46, c21, c30, c29, 20; release
j149=k-g31, c11, 140; tape ready
; 150: waited mounted named
j150=k-g31, c53, c34, c14, c26, c30, c59, 80; mount special
j151=k-g31, c53, c34, c14, c17, c30, c59, 130; mount special wait
j152=k-g31, c34, c14, c26, c30, c59, 80; mount named
j153=k-g31, c34, c14, c17, c30, c59, 130; mount named wait
j154=k-g31; c31 ; mount work
j155=k-g31, c31 ; mount work wait
j156=k-g31, c35, c14, c17, c20, c30, c22, 130; mount ring
j157=k-g31, c14, c26, c15, c46, c30, c21, 50; suspend
j158=k-g31, c14, c26, c15, c46, c21, c30, c29, 10; release
j159=k-g31, c11, 150; tape ready
\f
; kll 20.3.72 boss 2, psjob, mount, ...8...
b19=k-g31 ; action matrix:
; mount mount mount mount mount mount mount sus- rel- tape
; spec spec named named work work ring pend ease ready
; wait wait wait
; state:
j0 , j1 , j2 , j3 , j4 , j5 , j6 , j7 , j8 , j9 ; 0
j10 , j11 , j12 , j13 , j14 , j15 , j16 , j17 , j18 , j19 ; 10
j20 , j21 , j22 , j23 , j24 , j25 , j26 , j27 , j28 , j29 ; 20
j30 , j31 , j32 , j33 , j34 , j35 , j36 , j37 , j38 , j39 ; 30
j40 , j41 , j42 , j43 , j44 , j45 , j46 , j47 , j48 , j49 ; 40
j50 , j51 , j52 , j53 , j54 , j55 , j56 , j57 , j58 , j59 ; 50
j60 , j61 , j62 , j63 , j64 , j65 , j66 , j67 , j68 , j69 ; 60
j70 , j71 , j72 , j73 , j74 , j75 , j76 , j77 , j78 , j79 ; 70
j80 , j81 , j82 , j83 , j84 , j85 , j86 , j87 , j88 , j89 ; 80
j90 , j91 , j92 , j93 , j94 , j95 , j96 , j97 , j98 , j99 ; 90
j100, j101, j102, j103, j104, j105, j106, j107, j108, j109 ; 100
j110, j111, j112, j113, j114, j115, j116, j117, j118, j119 ; 110
j120, j121, j122, j123, j124, j125, j126, j127, j128, j129 ; 120
j130, j131, j132, j133, j134, j135, j136, j137, j138, j139 ; 130
j140, j141, j142, j143, j144, j145, j146, j147, j148, j149 ; 140
j150, j151, j152, j153, j154, j155, j156, j157, j158, j159 ; 150
g7=k-b19-g31 w. ; reserved state
e. ; end j-names
b. j25 h. ; finis actions:
j0 =k-g31, c29, c58, 0; state 0 , 30
j1 =k-g31, c29, c58, 10; state 10, 50
j2 =k-g31, c29, c58, 20; state 20, 40
j6 =k-g31, c15, c46, c30, c29, c58, 0; state 60, 70, 80, 120,130
j9 =k-g31, c15, c46, c29, c58, 20; state 90,100
j11=k-g31, c15, c46, c29, c58, 10; state 110
j14=k-g31, c15, c46, c21, c29, c58, 20; state 140
j15=k-g31, c15, c46, c21, c29, c58, 10; state 150
g33=k-g31, j0,j1,j2,j0,j2,j1,j6,j6,j6,j9,j9,j11,j6,j6,j14,j15
g34=k-g31, c20, c23, 130; remove ring actions
g35=k-g31, 150, 140; check ring
g36=k-g31, c20, c30, c12, c11, c25, 60; move tape from spec
g37=k-g31, c20, c30, c12, c25, 70; to standard or opposite:
g38=k-g31, c20, c30, c12, c25, 80;
g39=k-g31, c17, c20, c30, c12, 120;
g40=k-g31, c17, c20, c30, c12, 130;
g41=k-g31, c20, c30, c59, c11, 60;
g42=k-g31, c20, c30, c59, c11, 70;
g43=k-g31, c20, c30, c59, c11, 80;
g44=k-g31, c17, c20, c30, c59, 120;
g45=k-g31, c17, c20, c30, c59, 130;
g46=k-g31, c20, c30, c59, c11,120;
g47=k-g31, c20, c30, c59, c11,130;
w.e.
g32=k-g31 ; length of page
w.
\f
; kll 27.7.71 boss 2, psjob, mount, ...9...
; job descr page:
d1=0 ; index
d2=2 ; action
d3=4 ; old state
d4=6, d5=8, d6=10 ; work
d8=12 ; tape name used by alarms
d9=20 ; spec device used by alarms
d0=22 ; message address
d7=24 ; work
; 324 psjob nr 336 rest mounts
; 325 dump area spec 337 rest suspends
; 326 project nr 338 job file descr
; 327 job nr 339 finis cause
; 328 job name 340 special mask
; 329 + 2 341 sender table addr
; 330 + 6 342 process descr addr job
; 331 psjob sem rel
; 332 psjob operation
; 333 + 2
; 334 + 4: psjob buf
; 335 + 6
b0: 0, r.5 ; page addresses
50<12 + 0 ; page ident: psmount
b1: 1 ; send and wait
b3: 3 ; lock
b4: 10 ; constant
b5: 5 ; lock chained
b6: 6 ; open chained
b7: 21 ; private output
b8: 8 ; page jump
b9: <: :> ; spaces
b10: 427 ; rel finis(finis cause)
b11: 26 ; current descr
b12: 0 ; work
b13: 0 ; work
b26: 0 ; work
b68: 0 ; work
b27: 2 ; constant
b14: 320 ; psjob io point: virt
b15: 321 ; rel
b16: 426 ; break point: virt
b17: 361 ; rel
b54: 473 ; banker kill point: virt
b55: 364 ; rel
b62: 417 ; finis point: virt
b63: 478 ; rel
b18: 52 ; request free
b20: 51 ; request que
b57: 0 ; rewinder que
b38: 0 ; rewinder operation
\f
; kll 27.7.71 boss 2, psjob, mount, ...10...
b. a9 w. ;
c1: dl. w3 b0.+6 ; first action: w1=operation code (0-9)
rl w2 x2+4 ; save message addr;
rs w2 x3+d0 ;
rl. w2 b0.+6 ;
rl. w3 b0.+2 ;
wa w3 x2+d1 ;
bz w0 x3+t0 ;
jd -1 ; w0=state(tape), w1=operation code
rs w0 x2+d3 ; save old state;
ba w1 x3+t0 ; w1:= w1 + state(index);
al w0 g7 ;
se. w3 (b0.+2) ; if index <> dummy then
hs w0 x3+t0 ; state(index):= reserved;
wa. w1 b0.+8 ;
bz w0 x1+b19 ;
rs w0 x2+d2 ; action:= action matrix(w1);
rl.w2 b0.+2, al w2 x2+g8
a0:al w1 x2, sl w1 x3+g3, am (:g4-g2:)<6+1,alw0 g2<6+18,jl.w3(b7.)
sl w2 x3+g3, am g4-g2,al w2 x2+g2,am. (b0.+2),sh w2 g6-g2
jl. a0.
c2: rl. w3 b0.+2 ; next action:
rl. w2 b0.+6 ;
rl w1 x2+d2 ; w1:= action;
al w1 x1+1 ; action:= action+1;
rs w1 x2+d2 ;
wa. w1 b0.+8 ;
bz w1 x1-1 ; w1:= action table(w1);
rlw0x2+d1,jd-1 ; w0=index, w1=action
sl w1 g7 ; if w1 >= first action then
jl. x1+b0. ; goto w1;
wa w3 x2+d1 ;
hs w1 x3+t0 ; state(index):= w1;
c3: rl. w2 b0.+6 ; end action:
rl. w1 (b11.) ; w1:= current description;
ld w0 -100 ;
ds w0 x1+14 ; page 2:= page 3:= page 4:= 0;
rs w0 x1+10 ;
a1: rl w0 x2+338 ;
rs w0 x1+8 ; page 1:= job file descr;
dl. w3 b15. ;
jl. (b8.) ; page jump(io);
b21=a1+1, e. ;
\f
; kll 17.11.71 boss 2, psjob, mount, ...11...
b. a9, j4 w. ;
c4: jl. w3 c60. ; mount special: alarm param;
al w1 x3-g2 ; w1:= station:= station base;
a1: al w1 x1+g2 ; rep: station:= station + length;
sl w1 x3+g3-g8 ; if station > last then
jl. c40. ; goto not special station;
bz w0 x1+g8 ; if device(station)<>
se w0 (x2+14) ; device(message) then
jl. a1. ; goto rep;
bz w0 x1+g8+s9 ;
sz w0 1 ; if station not special then
jl. c40. ; goto not special station;
al w0 0 ;
ws. w1 b0.+2 ;
wd. w1 a3. ;
ac w1 x1-e17 ; shift:= number of devices - station nr rel;
rs. w1 b12. ;
am. (b0.+6) ;
j1: dl w1 +340 ; w0.w1:= device word<shift;
ld. w1 (b12.) ;
sl w0 0 ; if bit 0 in w0 = 0 then
jl. c41. ; goto not ordered special;
jl. w1 c32. ; search name;
al w1 0 ; w1:= 0;
a2: am. (b0.+4) ; add wait:
rl w2 +4 ; w2:= message addr;
rl w0 x2+8 ;
sz w0 1 ; if wait then
al w1 x1+1 ; w1:= w1 + 1;
jl. c1. ; goto first action;
c6: jl. w3 c60. ; mount ring message: alarm param;
jl. w1 c32. ; search name;
wa w3 x2+d1 ; w3:= tape(index);
bl w0 x3+t1 ;
al w1 6 ; w1:= 6;
sn w0 0 ; if station ref = empty then
jl. c1. ; goto first action;
ba w3 x3+t1 ; w3:= station(w3);
bz w0 x3+s3 ;
j2: rl w2 x2+326 ; w2:= project nr;
se w2 (x3+s4) ; if project(w3) = project
sh w0 3 ; or work tape then
jl. c1. ; goto first action;
jl. c42. ; goto reject mount ring;
a3: g2 ;
g9=c4-b0, g10=c6-b0 ; rel entries
\f
; kll 17.11.71 boss 2, psjob, mount, ...12...
c5: jl. w3 c60. ; mount tape: alarm param;
rl w0 x2+16 ;
sn w0 0 ; if name = 0 then
jl. c10. ; goto mount work;
jl. w1 c32. ; search name;
al w1 2 ; w1:= 2;
jl. a2. ; goto add wait;
c7: jl. w3 c60. ; suspend: alarm param;
jl. w1 c32. ; search name;
al w1 7 ; w1:= 7;
jl. c1. ; goto first action;
c8: jl. w3 c60. ; release: alarm param;
jl. w1 c32. ; search name;
al w1 8 ; w1:= 8;
jl. c1. ; goto first action;
c11=k-b0 ; search ready tapes:
rl w1 x2+d2 ;
am. (b0.+8) ;
bz w0 x1 ; comment set tape in new state;
wa w3 x2+d1 ;
hs w0 x3+t0 ; state(index):= state(action);
a7: rl. w2 b0.+6 ; scan stations:
rl. w3 b0.+2 ;
al w1 x3+g8-g2 ; w1:= station:= station base;
a6: al w1 x1+g2 ; rep: station:= station + 1;
sl w1 x3+g3 ; if station > last then
jl. c3. ; goto end action;
bz w0 x1+s2 ;
se w0 4 ; if station not remoted then
jl. a6. ; goto rep;
ba w1 x1+s1 ;
rl w0 x1+t2 ; if job nr(tape(station)) <>
ba w1 x1+t1 ; job nr(job descr) then
j3: se w0 (x2+327) ; goto rep;
jl. a6. ;
al w0 3 ;
hs w0 x1+s2 ; station state:= in use;
ba w1 x1+s1 ; w1:= tape(station);
ws. w1 b0.+2 ;
rs w1 x2+d1 ; index:= tape(station);
jl. w3 c61. ; alarm param(index);
al w1 9 ; w1:= 9;
jl. c1. ; goto first action;
c9: rl. w1 b0.+4 ; tape ready:
rl w2 x1+4 ;
jl. w3 (b6.) ; open chained(remoter buf, op);
jl. a7. ; goto scan stations;
b22=j1+1, b23=j2+1, b24=j3+1
e. ;
g11=c5-b0, g12=c7-b0, g13=c8-b0, g14=c9-b0 ; rel entries
\f
; kll 17.11.71 boss 2, psjob, mount, ...13...
b. a9, j4 w. ;
c10: ; mount work
al w3 x3+g6 ;
rs. w3 b12. ; limit:= top tape table entry;
al w3 x3-g5-g4 ; w3:= abs index:= start tape table;
rl w0 x2+8 ;
rl. w2 b0.+6 ; w2:= job descr;
al w1 0 ;
rs w1 x2+d1 ; index:= dummy;
sz w0 1 ; if wait then
jl. a2. ; goto search work wait;
al w1 4 ; w1:= 4;
a1: al w3 x3+g4 ; search work rep:
sl. w3 (b12.) ; w3:= abs index:= abs index + length;
jl. c1. ; if abs index >= limit then goto first action;
bz w0 x3+t0 ; w0:= state(abs index);
se w0 20 ; if state <> 20 then
jl. a1. ; goto search work rep;
jl. a7. ; goto found;
a2: al w1 -1 ; search work wait: w1:= max:= -1;
a3: al w3 x3+g4 ; rep: w3:= abs index:= abs index + length;
sl. w3 (b12.) ; if abs index > limit then
jl. a5. ; goto work wait found;
bz w0 x3+t0 ; w0:= state(abs index);
sh w0 x1 ; if state < max then
jl. a3. ; goto rep;
sn w0 20 ; if state = 20 then
jl. a4. ; goto ok;
se w0 60 ;
sn w0 90 ; if state = 60 or state = 90
jl. 4 ; and
jl. a3. ; jobnr(abs index) = jobnr(job descr)
j1: rl w0 x2+327 ; then goto ok else goto rep;
se w0 (x3+t2) ;
jl. a3. ;
a4: bz w1 x3+t0 ; ok: max:= state(abs index);
rs w3 x2+d4 ; save abs index;
jl. a3. ; goto rep;
a5: rl w3 x2+d4 ; work wait found:
al w0 5 ; abs index:= saved abs index;
rx w0 2 ; w1:= 5;
sn w0 -1 ; if max = -1 then
jl. c1. ; goto first action;
a7: ; found:
j2: rl w0 x2+327 ;
rs w0 x3+t2 ; job nr(index):= job nr(descr);
j3: rl w0 x2+331 ;
rs w0 x3+t6 ; psjobrel(index):= psjobnr(descr);
ws. w3 b0.+2 ;
rs w3 x2+d1 ; index:= abs index - mount table;
jl. c1. ; goto first action(w1);
b25=j1+1, b66=j2+1, b67=j3+1
e. ;
\f
; kll 17.3.72 boss 2, psjob, mount, ...14...
b. a9 ,j9 w. ;
g30=k-b0 ; finis mount:
rl. w2 b0.+6 ;
al w3 x3+g3 ; tape:= first tape;
a0: bz w1 x3+t0 ; rep:
rl w0 x3+t2 ;
se w1 g7 ; if state(tape) = reserved or
j9: se w0 (x2+327) ; jobnr(tape) <> job nr on descr then
jl. a1. ; goto next;
al w0 g7 ; action:= action table(state(index));
hs w0 x3+t0 ;
al w0 0 ;
wd. w1 b4. ;
am. (b0.+8) ;
bz w0 x1+g33 ; state(tape):= reserved;
ws. w3 b0.+2 ;
ds w0 x2+d2 ; index:= relative tape;
jl. c2. ; goto next action;
c58=k-b0 ; finis next:
wa w3 x2+d1 ; tape:= abs tape index;
rl w1 x2+d2 ;
wa. w1 b0.+8 ;
bz w1 x1 ; state(tape):= state(action);
hs w1 x3+t0 ;
jd-1
a1: al w3 x3+g4 ; next:
am. (b0.+2) ; tape:= tape + 1;
se w3 +g6 ; if tape <> top then
jl. a0. ; goto rep;
rl. w2 (b11.) ;
al w0 0 ; page 3:= 0;
rx w0 x2+12 ; page 1:= descr;
rs w0 x2+14 ; page 4:= descr;
rs w0 x2+8 ;
dl. w3 b63. ;
jl. (b8.) ; page jump(finis);
b64=j9+1
e. ;
\f
; kll 27.7.71 boss 2, psjob, mount, ...15...
b. a9, j5 w. ;
c12=k-b0 ; search station:
al w0 1 ;
jl. w1 c57. ; change station(free standard);
rl. w2 b0.+6 ;
bz w0 x1+s1 ;
se w0 0 ; if tape(station) <> 0 then
jl. a6. ; goto test unload;
a5: ; after unload:
rl. w3 b0.+2 ;
c59=k-b0 ; mount:
wa w3 x2+d1 ;
bz w0 x3+t1 ;
se w0 0 ; if station(index) <> 0 then
jl. c2. ; goto next action else
bz w1 x3+t6 ; if
se w1 0 ; special station then
jl. c56. ; goto mount on special else
jl. c24. ; goto display(mount tape);
a6: ba w1 x1+s1 ; test unload:
rl w3 x1+t4 ; w1:= tape(station);
bz w0 x1+t0 ;
sn w3 0 ; if request(w1) <> 0 or
sn w0 g7 ; state(w1) = reserved then
jl. a5. ; goto after unload;
ws. w1 b0.+2 ;
rx w1 x2+d1 ; save index;
rs w1 x2+d7 ; index:= w1;
jl. w1 c19. ; unload(index);
rl. w2 b0.+6 ; w2:= job descr;
rl w0 x2+d7 ;
rs w0 x2+d1 ; index:= saved index;
jl. a5. ; goto after unload;
c25=k-b0 ; start job:
rl. w1 (b11.) ;
rl w1 x1+12 ; w1:= page 3;
j2: al w1 x1+325 ; w1:= dump area spec;
al w0 16 ;
jl. w3 c18. ; banker(start job, w1);
rl. w2 b0.+6 ; w2:= job descr;
c26=k-b0 ; answer:
wa w3 x2+d1 ;
al w1 x3+t8 ; w1:= name(index);
j3: rl w3 x2+341 ; w3:= sender table addr;
al w2 0 ; w2:= message(sender table);
rx w2 x3+8 ; message(sender table):= 0;
al w0 1 ; result:= 1;
sl w2 2 ; if answer pending then
jd 1<11+22; send answer;
jl. c2. ; goto next action;
c29=k-b0 ; clear job nr:
wa w3 x2+d1 ;
al w0 0 ; job nr(index):= 0;
rs w0 x3+t2 ;
rs w0 x3+t6+t7-t7; spec device:= psjob rel:= 0;
jl. c2. ; goto next action;
b28=j2+1, b29=j3+1
e. ;
\f
; kll 13.3.72 boss 2, psjob, mount, ...16...
b. a9, j9 w. ;
c15=k-b0 ; remove reservation:
al. w1 c2. ; return:= next action;
al w0 3 ; change station(reserved standard);
c57: ; change station:
; entry: w0 = searched state, w1 = link, w2 = descr, w3 = mount table.
; exit: w1 = station.
ds. w1 b13. ;
al w1 x3+g8+e26*g2; w1:= first special station;
wa w3 x2+d1 ; w3:= tape(index);
bz w2 x3+t6 ;
sn w2 0 ; if abs device(w3) = o then
jl. a2. ; goto standard;
a1: bz w0 x1+s0 ;
sn w0 x2 ; for w1:= all special stations do
jl. a5. ; if device(w1) = abs device then
al w1 x1+g2 ; goto found;
jl. a1. ;
a2: al w1 x3 ; standard:
ba w1 x1+t1 ; w1:= station(w3);
bz w2 x1+s9 ;
se w1 x3 ; if station ref(w3) empty or
se w0 x2 ; state(w1) <> searched state then
jl. w1 c63. ; w1 := search min state(searched state);
a5: bz w2 x1+s9 ; found:
lx. w2 b27. ; exchange reserved bit(w1);
hs w2 x1+s9 ;
jl. (b13.) ; goto return;
c63: rs. w1 b68. ; search min state(searched state):
rl. w3 b0.+2 ;
al w1 x3+g8 ; w1:= station:= station table;
al w0 g7+1 ; w0:= min state:= max state + 1;
a3: bz w2 x1+s9 ; rep:
se. w2 (b12.) ; if state(w1) <> search state then
jl. a4. ; goto next;
al w2 x1 ;
ba w2 x2+s1 ; if tape ref(w1) = 0 then
sn w2 x1 ; goto return;
jl. (b68.) ;
bz w2 x2+t0 ; if tape state(station) < min state
sh w0 x2 ; then
jl. a4. ; begin save station;
rs. w1 b26. ; min state:= tape state(station);
al w0 x2 ; end;
a4: al w1 x1+g2 ; next: station:= station + 1;
sh w1 x3+g3-2 ; if station <= last then
jl. a3. ; goto rep;
rl. w1 b26. ;
;***** test begin
sn w0 g7+1 ; if no station is in the searched state then
c.-1, o112, z. ; (bossfault xref)
jd -112 ; bossfault xref;
;***** test end
jl. (b68.) ; goto return;
e. ;
\f
; kll 17.11.71 boss 2, psjob, mount, ...17...
b. a5, j2 w. ;
c13=k-b0 ; include user:
am (66) ; nb: w3=ref dummy entry in mount table
dl w1 +74 ;
jd 1<11+72; set catbase(boss maxbase);
jl. w1 c48. ; get station;
rl w1 x3+s4 ;
bz w0 x3+s3 ;
j2: se w1 (x2+326) ; if project(tape) = job project or
sh w0 4 ; work tape or project no ring then
jl. a2. ; goto ok;
sl w0 6 ; if reserved then
jl. c43. ; goto tape stealer;
al w0 g34 ; action:= remove ring actions;
rs w0 x2+d2 ;
jl. c2. ; goto next action;
a2: rl w0 x2+342 ; ok:
rs w0 x3+s6 ; user(station):= descr addr for user;
ba w3 x3+s1 ; w3:= tape(index);
al w3 x3+t8 ;
jd 1<11+6 ; initialize process;
al w2 x3 ; w2:= name(index);
al. w1 a4. ;
jl. w3 (b1.) ; send and wait(sense tape);
rl. w2 b0.+6 ;
am -2 ;
c14=k-b0 ; exclude user:
al w0 -1<11+14;
hs. w0 a3. ;
am (66) ; nb: w3=ref dummy entry in mount table;
dl w1 +74 ;
jd 1<11+72; set catbase (boss maxbase);
jl. w1 c48. ; get station;
bz w1 x3+s0 ; w1:= device(station(index));
ba w3 x3+s1 ; w3:= tape(index);
al w3 x3+t8 ;
jd 1<11+10; release process;
j1: al w3 x2+328 ; w3:= job name;
h. jd , a3: ; in- or exclude user;
w. se w0 0 ; if result <> 0 then
c.-1, o50, z. ; (bossfault xref)
jd -50 ; goto alarm;
jl. c2. ; goto next action;
\f
; kll 04.04.73 boss 2, psjob, mount, ...17a...
c43: al w0 150 ; 12: tape stealer:
rs w0 x2+d3 ; old tape state:= 150;
am -11 ;
c54: am 9 ; 23: mount special after mount:
c45: am 1 ; 14: suspendings exceeded:
c44: al w1 -3 ; 13: stations exceeded:
rl. w3 b0.+2 ;
rl. w2 b0.+6 ;
rl w0 x2+d3 ; state(tape):= saved old state;
wa w3 x2+d1 ;
hs w0 x3+t0 ;
am x1 ;
c47: am 5 ; 16: tape used by other job:
c42: am 1 ; 11: reject mount ring:
c41: am 1 ; 10: not ordered special:
c40: al w0 9 ; 9: not special station:
rl. w2 b0.+6 ;
j0: hs w0 x2+339 ; set finis cause;
rl. w2 (b11.) ;
al w0 0 ; page 3:= 0;
rs w0 x2+14 ; page 4:= 0;
rx w0 x2+12 ; page 1:= job descr;
rs w0 x2+8 ;
dl. w3 b17. ;
jl. (b8.) ; goto break;
a4: 0 ; sense message;
b56=j0+1, b30=j1+1, b37=j2+1, b53=a2+1
e. ;
\f
; kll 17.11.71 boss 2, psjob, mount, ...18...
b. j9 w. ;
c46=k-b0, am 1 ; release station:
c16=k-b0, al w0 6 ; reserve station: w0:= opcode;
wa w3 x2+d1 ;
bz w3 x3+t6 ; if spec device(index) then
se w3 0 ;
jl. c2. ; goto next action;
al w1 1 ; w1:= banker param;
jl. w3 c18. ; banker(w0);
rl. w2 b0.+6 ;
ba. w2 b52. ;
bz w1 x2+2 ; w1:=killed;
bz w0 x2+5 ; w0:=exceeded;
sn w0 0 ; if exceeded then
jl. c44. ; goto stations exceeded;
se w1 0 ; if not killed then
jl. c2. ; goto next action;
rl. w2 b0.+6 ;
rl w0 x2+d3 ;
wa w3 x2+d1 ; state(tape):= saved old state;
hs w0 x3+t0 ;
rl. w2 (b11.) ; w2:=current desc;
al w1 0 ;
rs w1 x2+8 ; page1:=0;
rx w1 x2+12 ; page3:=0;
rs w1 x2+14 ; page4:= job desc;
dl. w3 b55. ;
jl. (b8.) ; page jump(banker kill);
c17=k-b0, al w0 17 ; stop:
al. w3 c2. ; return:= next action;
c18: ws. w3 b0. ; banker(w0):
rs w3 x2+d4 ; rel return:= w3 - page 0;
j6: rs w1 x2+349 ; param:= w1;
j7: al w1 x2+335 ; w1:= operation;
hs w0 x1+2 ; code:= w0;
rl. w2 b31. ;
jl. w3 (b6.) ; open chained(banker que);
rl. w2 b0.+6 ;
rl w3 x2+d4 ;
wa. w3 b0. ; return:= rel return + page 0;
j2: rl w2 x2+334 ;
jl. (b3.) ; lock(psjob buf);
c27=k-b0 ; reserve tape table entry:
j3: bl w1 x2+337 ;
sh w1 0 ; if rest suspends < 1 then
jl. c45. ; goto suspendings exceeded;
al w1 x1-1 ;
j4: hs w1 x2+337 ; rest suspends:= rest suspends - 1;
jl. c2. ; goto next action;
c28=k-b0 ; account mount:
j1: bl w1 x2+336 ;
al w1 x1-1 ; rest mounts:= rest mounts - 1;
j5: hs w1 x2+336 ;
jl. c2. ; goto next action;
b31: 67 ; banker que
b32=j1+1, b33=j2+1, b34=j3+1, b35=j4+1, b36=j5+1
b51=j6+1, b52=j7+1
e. ;
\f
; kll 17.11.71 boss 2, psjob, mount, ...19...
b. f1 w. b. a5, j5 w. ; procedure unload:
c19: al w0 2 ; operation:= unload;
ws. w1 b0. ; rel return:= w1 - page 0;
rl. w3 b0.+2 ;
jl. a1. ; goto rewinder operation;
c20=k-b0, am 1 ; unload:
c21=k-b0, al w0 1 ; rewind:
al w1 c2-b0 ; rel return:= next action;
a1: ds w1 x2+d5 ; rewinder operation:
jl. w1 c48. ; get station;
bz w1 x3+s8 ; w1:= relativ sem(station);
rs w1 x2+d6 ; save relativ sem(station);
wa. w1 b38. ; sem:= rewinder buf + w1;
al w2 x1 ;
jl. w3 (b5.) ; lock chained(sem);
rl. w2 b0.+6 ; w2:= job descr;
rl w0 x2+d4 ;
rs w0 x1+2 ; operation code:= saved code;
se w0 2 ; if saved code = unload then
jl. a2. ; begin
wa w3 x2+d1 ; w3:= tape(index);
al w1 x3 ; w1:= station(w3);
ba w1 x1+t1 ; tape state(w3):=
sn w1 x3 ; if tape already released then
c.-1, o59, z. ; (bossfault xref)
jd -59 ; bossfault 59
al w0 0 ; station ref(w3):=
hs w0 x1+s2 ; station state(w1):=
hs w0 x1+s1 ; tape ref(w1):= 0;
hs w0 x3+t1 ;
bz w1 x3+t0 ; tape state(w3):= remove(old state);
wd. w1 b4. ;
bz. w1 x1+j3. ;
hs w1 x3+t0 ; end;
a2: dl w2 x2+d6 ;
wa. w2 b57. ; sem:= saved rel sem + rewinder que;
al. w3 x1+b0. ; return:= rel return + page 0;
rl. w1 b0.+4 ; operation:= page 2;
jl. (b6.) ; open chained(sem, operation);
h. ; 0, 10, 20, 30, 40, 50, 60, 70, 80, 90,100,110,120,130,140,150,160
j3: 0, 0, 0, 30, 30, 0, 60, 70, 80, 60, 70, 80,120,130,140,150,160
f1: 5 w.
c48: wa w3 x2+d1 ; get station:
al w0 x3 ;
ba w3 x3+t1 ; w3:= station(tape(index));
se w0 x3 ; if station ref(tape) <> 0 then
jl x1 ; goto return else
jl. c2. ; goto next action;
c39=k-b0 ; release tape table entry:
j1: bl w1 x2+337 ;
al w1 x1+1 ; rest suspends:= rest suspends + 1;
j2: hs w1 x2+337 ;
jl. c2. ; goto next action;
c31=k-b0 ; alarm:
dl w1 x2+d2 ; w0:= index; w1:= action;
c.-1, o51, z. ; (bossfault xref)
jd -51 ; goto boss alarm;
b39=j1+1, b40=j2+1
e. ;
\f
; kll 27.7.71 boss 2, psjob, mount, ...20...
b. a5, j9 w. ;
a4: <: mounts exceeded:>
c22=k-b0, am 8 ; mount ring:
c23=k-b0, am 7 ; remove ring:
c38: am 1 ; display(mount on special):
c24: al w0 a1 ; display(mount tape):
rs w0 x2+d4 ; save text addr;
rl. w2 b18. ;
jl. w3 (b5.) ; lock chained(request free);
rl. w2 b18. ; w2:=request free sem;
am. (b0.+6) ;
wa w3 +d1 ; w0:=old request line;
rl w0 x3+t4 ;
sn w0 0 ; if w0<>0 then
jl. a0. ; begin
sz w0 1 ; if w0 not even then
c.-1, o54, z. ; (bossfault xref)
jd -54 ; bossfault 54
jl. w3 (b6.) ; else
jl. c2. ; regret the request (tape has just been remoted)
a0: rl. w2 b0.+6 ; w2:=job descr;
j1: dl w0 x2+329 ;
lo. w0 b9. ; spaces;
lo. w3 b9. ;
ds w0 x1+8 ; job name
j2: dl w0 x2+330 ;
lo. w0 b9. ; spaces;
lo. w3 b9. ;
ds w0 x1+12 ; job name
rl w2 x2+d4 ; w2:= saved text rel;
dl. w0 x2+b0.+2 ;
ds w0 x1+16 ; text
dl. w0 x2+b0.+6 ;
ds w0 x1+20 ; text
so w2 1 ; if special then
jl. a2. ; begin
am. (b0.+6) ;
dl w0 +d7 ; move(on <device>);
ds w0 x1+32 ; length:= 28;
am 4 ; end
a2: al w3 24 ; else length:=24;
al w2 1<3+1<1 ;
ds w3 x1+4 ; code:=insert line;
rl. w2 b0.+6 ;
j3: bl w0 x2+336 ;
sl w0 0 ; if rest mounts <0 then
jl. a3. ; begin
ba. w0 f1. ;
j4: hs w0 x2+336 ; rest mounts:= rest mounts+ 5;
j5: bl w0 x2+344 ;
ba. w0 f1. ; mounts:= mounts+ 5;
j6: hs w0 x2+344 ;
al w2 x3+12 ; length:=length+12;
rs w2 x1+4 ;
wa w2 2 ; move <: mounts exceeded:>
dl.a4.+2,dsx2-4,dl.a4.+6,dsx2,dl.a4.+10,dsx2+4
a3: rl. w2 b0.+2 ; end;
am. (b0.+6) ;
wa w2 +d1 ; w2:= tape(index);
rl. w3 (b11.) ;
rl w0 x3+10 ;
rx w0 x2+t4 ; request(w2):= virt operation;
dl w0 x2+t8+2 ;
ds w0 x1+24 ; tape name
dl w0 x2+t8+6 ;
ds w0 x1+28 ; tape name
rl. w2 b20. ;
jl. w3 (b6.) ; open chained(request que);
jl. c2. ; goto next action;
a1=k-b0, <:mount tape remove ring mount ring :>
b41=j1+1, b42=j2+1, b58=j3+1, b59=j4+1, b60=j5+1, b61=j6+1
e.e. ;
\f
; kll 17.11.71 boss 2, psjob, mount, ...21...
b. a9, j5 w. ; procedure search name:
; entry: w0 = irr, w1 = return, w2 = message, w3 = mount table.
; exit: w0 = undef, w1 = undef, w2 = job descr, w3 = mount table.
c32: rs. w1 b12. ; save return;
al w3 x3+g6-2 ; save limit of tape table;
rs. w3 b13. ;
al w3 x3-g5-g4+2; w3:= abs index:= base tape table;
a1: al w3 x3+g4 ; rep:
sl. w3 (b13.) ; w3:= abs index:= abs index + length;
jl. a3. ; if abs index > limit then goto not found;
bz w0 x3+t0 ; w0:= state(abs index);
se w0 g7 ; if state=reserved
sn w0 0 ; or state = 0 then
jl. a1. ; goto rep;
a2: dl w1 x2+18 ; if name(message) <>
sn w0 (x3+t8) ; name(abs index)
se w1 (x3+t8+2) ;
jl. a1. ; then goto rep;
dl w1 x2+22 ;
sn w0 (x3+t8+4) ;
se w1 (x3+t8+6) ;
jl. a1. ; comment name found: ;
rl. w2 b0.+6 ; w2:= job descr;
j1: rl w0 x2+327 ;
rl w1 x3+t2 ; if job nr(abs index) = 0 then
sn w1 0 ; job nr(abs index):= job nr(descr);
rs w0 x3+t2 ;
se w0 (x3+t2) ; if job nr(abs index) <> job nr(descr) then
jl. a6. ; goto used;
j4: rl w0 x2+331 ;
hs w0 x3+t7 ; psjobrel(abs index):= psjob rel(descr);
jl. a4. ; goto found;
a3: rl. w3 b0.+2 ; not found: abs index:= dummy entry;
a4: ws. w3 b0.+2 ; found:
rl. w2 b0.+6 ; w2:= job descr;
rs w3 x2+d1 ; index:= abs index - mount table;
rl. w3 b0.+2 ; w3:= mount table;
jl. (b12.) ; goto return;
a6: ws. w3 b0.+2 ; used:
rs w3 x2+d1 ; index:= abs index - mount table;
jl. c47. ; goto tape used by other job;
\f
; kll 20.3.72 boss 2, psjob, mount, ...22...
c49=k-b0 ; init tape entry:
al w3 x3+g3-g4 ; w3:= abs index:= base of tape table;
a5: al w3 x3+g4 ; rep:
bz w0 x3+t0 ; abs index:= abs index + length;
se w0 0 ; or state(abs index)<> free then
jl. a5. ; goto rep;
al w0 g7 ;
hs w0 x3+t0 ; state(abs index):= reserved;
j2: rl w1 x2+327 ;
rs w1 x3+t2 ; job nr(abs index):= job nr(descr);
j3: rl w1 x2+331 ;
rs w1 x3+t6 ; psjob rel(abs index):= psjob rel(descr);
rl w2 x2+d0 ;
dl w1 x2+18 ; name (abs index):= name(message);
ds w1 x3+t8+2 ;
dl w1 x2+22 ;
ds w1 x3+t8+6 ;
rl. w2 b0.+6 ;
ws. w3 b0.+2 ; index:= abs index - page 1;
rs w3 x2+d1 ;
jl. c2. ; goto next action;
b43=j1+1, b44=j2+1, b45=j3+1, b65=j4+1
e. ;
b. a3, j6 w. ;
c30=k-b0 ; release request line:
al w0 1 ; code:= release request;
wa w3 x2+d1 ;
rl w1 x3+t4 ;
so w1 1 ; if no pending request line then
jl. c2. ; goto next action;
al w1 2 ; request := request(tape)
rx w1 x3+t4 ; request(tape) := even (i.e. being removed);
j1: rs w0 x2+333 ; op + 2:= code;
j2: rs w1 x2+335 ; op + 6:= request;
j3: al w1 x2+332 ;
rl. w2 b20. ;
jl. w3 (b6.) ; open chained(request que);
rl. w1 b0.+6 ;
j4: rl w2 x1+334 ;
jl. w3 (b3.) ; lock(psjob buf);
rl. w2 b0.+6 ;
wa w3 x2+d1 ; w3 := abs tape entry;
al w0 0 ;
rs w0 x3+t4 ; request(tape) := 0 (i.e. removed);
jl. c2. ; goto next action;
\f
; kll 20.3.72 boss 2, psjob, mount, ...23...
c33=k-b0, am 1 ; check work tape exists:
c34=k-b0, al w0 g35 ; check named tape exists:
rs w0 x2+d4 ; d4:= save state pointer;
am (66) ; nb: w3=ref dummy entry in mount table;
dl w1 +74 ;
jd 1<11+72; set catbase(boss maxbase);
wa w3 x2+d1 ;
al w3 x3+t8 ; w3:= name(index);
jd 1<11+4 ;
se w0 0 ; if process(w3) exists then
jl. a2. ; goto skip actions;
al w1 x3-t8 ;
ba w1 x1+t1 ; w1 := station ref;
hs w0 x3-t8+t1 ; station(tape) := 0;
sn w1 x3-t8 ; if station ref empty then
jl. c2. ; goto next action;
hs w0 x1+s1 ; tape(station) := 0;
hs w0 x1+s2 ; station state:= 0;
jl. c2. ; goto next action;
a2: ; skip actions:
bz w0 x3-t8+t1 ;
sn w0 0 ; if station ref not empty then
jl. c51. ; begin
ba w3 x3-t8+t1 ;
bz w1 x3-t8+s0 ; w1:= device(station(index));
j5: al w3 x2+328 ; w3:= job name;
jd 1<11+12; include user;
se w0 0 ; if result <> 0 then
c.-1, o52, z. ; (bossfault xref)
jd -52 ; goto boss alarm;
; end;
c51: rl w0 x2+d4 ; action(d4):
rs w0 x2+d2 ; action:= d4;
rl. w3 b0.+2 ; w3:= mount table;
jl. b0.+c26; goto answer;
c53=k-b0 ; check mount spec after mount:
wa w3 x2+d1 ; w3:= tape(index);
rl w1 x2+d0 ; w1:= message addr;
bz w0 x3+t6 ;
se w0 (x1+14) ; if abs device <> device in message then
jl. c54. ; goto mount spec after mount else
jl. c2. ; goto next action;
b46=j1+1, b47=j2+1, b48=j3+1, b49=j4+1, b50=j5+1
e. ;
\f
; kll 17.11.71 boss 2, psjob, mount, ...24...
b. a9 w. ;
c36=k-b0 ; check station kind:
rl w1 x2+d2 ;
al w1 x1+1 ; action:= action + 1;
rs w1 x2+d2 ;
jl. w1 c48. ; get station;
bz w1 x3+s9 ;
bz w0 x3+s0 ; w0:= device(station);
ba w3 x3+s1 ; w3:=tape(index);
bs w0 x3+t6 ;
sn w0 0 ; if device(station) = abs station then
jl. c2. ; goto next action;
bz w0 x3+t6 ;
sz w1 1 ; if station kind = standard
se w0 0 ; and abs station = 0
jl. 4 ; then
jl. c2. ; goto next action;
rl w1 x2+d2 ;
am. (b0.+8) ; action:= alternative
bz w1 x1-1 ; actions(action);
rs w1 x2+d2 ;
jl. c2. ; goto next action;
c56: ; mount special: w1 = device.
al w0 0 ; convert device to text form: ;
wd. w1 b4. ; w0:= device mod 10; w1:= device // 10;
ls w1 8 ; w1:= w1 < 8 + w0;
lo w1 0 ; add text bits to w1;
lo. w1 a5. ;
rl. w0 a6. ;
ds w1 x2+d7 ; save text: on <device>
rl. w3 b0.+2 ;
jl. c38. ; goto display(mount on special);
a5: <: 00:> ;
a6: <: on:> ;
c62=k-b0 ; move bit:
jl. w1 c48. ; get station;
bz w0 x3+s9 ;
se w0 1 ; if special or reserved then
jl. c2. ; goto next action;
al w0 3 ;
rs. w0 b12. ;
jl. w1 c63. ; w1 := search min state(reserved standard);
rl. w2 b0.+6 ;
al w0 1 ;
hs w0 x1+s9 ; free and standard.w1 := free standard;
jl. w1 c48. ;
al w0 3 ;
hs w0 x3+s9 ; free and standard.station(index) := reserved std;
jl. c2. ; goto next action;
e. ;
\f
; kll 20.3.72 boss 2, psjob, mount, ...25...
b. a9,j9 w. ;
c52=k-b0 ; set spec device nr:
rl w1 x2+d0 ; w1:= message addr;
rl w0 x1+14 ;
wa w3 x2+d1 ; spec device(index):= device(message);
hs w0 x3+t6 ;
jl. c2. ; goto next action;
c50=k-b0, am 1 ; check ring work:
c35=k-b0, al w0 g35 ; check ring:
rs w0 x2+d4 ;
wa w3 x2+d1 ; w3:= tape(index);
al w1 x3 ; w1:= station(tape);
ba w1 x1+t1 ;
bz w0 x1+s3 ; w0:= tape kind;
se w1 x3 ; if tape not mounted or
so w0 1 ; no ring then
jl. c2. ; goto next action else
jl. c51. ; goto action(d4);
; entry: w3 = return. exit: w2 = message addr, w3 = mount table
c60: am. (b0.+4) ; alarm params:
rl w2 +4 ; w2:= message addr; first of text = w2 + 8 + 8.
a1: rs. w3 b12. ; move text:
rl. w3 b0.+6 ; w3 := job descr;
dl w1 x2+8+10 ; move text from w2 + 16, + 18, + 20, + 22
ds w1 x3+d8+2 ;
dl w1 x2+8+14 ; to text param field on descr;
ds w1 x3+d8+6 ;
rl w0 x2+8+6 ;
rs w0 x3+d9 ; move device param in message to descr;
rl. w3 b0.+2 ; w3:= mount table;
jl. (b12.) ; goto return;
c61: am. (b0.+2) ; alarm params (index):
al w2 x1+t8-8-8 ; w2:= tape(index) + t8 - (8+8); tape name is tape(index) + t8;
; (note: 8+8 is the displacement used in move text)
jl. a1. ;
c64=k-b0 ; fp syntax:
j1: bz w0 x2+339 ;
sn w0 0 ; if finis cause undef then
jl. c2. ; goto next action;
rl w0 x2+d3 ;
wa w3 x2+d1 ; tape state:= saved old state;
hs w0 x3+t0 ; comment after a provoke break fp has sent
rl. w2 (b11.) ; a mount message to a tape in state 130 or 140;
al w0 0 ;
rs w0 x2+14 ; page 3:= 0;
rx w0 x2+12 ; page 4:= 0;
rs w0 x2+8 ; page 1:= job descr;
rl. w2 b62. ;
rl. w3 b10. ;
jl. (b8.) ; page jump(finis(finis cause));
b127=j1+1
e. ;
i.e. ;
g1=k-b0 ; length of page;
\f
; kll 27.7.71 boss 2, remoter, ...26...
; Contents:
; c0 28 wait operation
; c1 28 name or label state 0
; c2 28 name or label state 1, 2
; c3 29 name or label state 3, 4
; c4 29 name or label state 5
; c5 30 remote pressed state 0
; c6 32 remote pressed state 1, 2
; c7 32 remote pressed state 3, 4
; c8 32 remote pressed state 5
; c9 33 search name
; c10 34 save operation
; c11 34 sense ring
; c12 35 answer commandio ok
; c13 35 answer commandio not ok
; c14 35 answer watch dog
; c15 35 find and link empty tape entry
; c16 35 link
; c17 35 link of tape entry
; c18 36 remove request
; c19 36 name station
; c20 37 write label
; c21 39 add stopped, word defect
; c22 40 erase
; c23 40 exclude user
; c24 41 input (mode)
; c25 41 check ciffer 3
; c26 41 check ciffer 2
; c27 41 check ciffer 1
; c28 41 reserve label read
; c29 41 reserve label write
; c30 41 release label read
; c31 41 release label write
; c32 43 not found
; c33 43 unwriteable
; c34 43 mount ring
; c35 35 unmount tape
; c36 43 write name syntax
; c37 43 name illegal
; c38 43 unreadable
; c39 43 c38 - c36
; c40 29 return from input(mode)
; c41 41 check ciffer or letter 3
; c42 41 check ciffer or letter 2
; c43 41 check ciffer or letter 1
; c44 43 not wanted
; c45 40 local
; c46 41 rewind tape
\f
; kll 27.7.71 boss 2, remoter, ...27...
b. b40, c50 w. ;
g15: b0: 0,r.5 ; page addresses
52<12 + 0 ; page ident: remoter
b1: 0 ; sense message
b2: 3<12 ; input
b3: 0 ; (saved return from c45)
b4: 0 ;
b5: 5<12 ; output, mode
b6: 0 ;
b7: 0 ;
b8: 6<12 ; erase
b9: 8<12, 3 ; backspace block
b10: 8<12, 4 ; rewind
b11: 8<12, 5 ; unload
b12: 10<12 ; output mark
b13: 10 ;
b14: 533328 ; 48'4 + 48'3 + 48'2 + 48'1 + 48
b15: 255 ; last 8 bits
b16: 1<15 ; test writing enabled
b17: 1<16 ; tapemark
b18: 45<18+61+1<14; hard - parity
b19: 63<18+61+1<14; hard
b20: 28 ; label length
b21: <:VOL:> ,b22: <:mt :>
b23: <: :> ,b24: <:000:>
b25: <: 00:> ,b26: <:0 :>
b27: <: on:> ,b28: <: w p r :>
b29: <:<0>mt:> ,b36: <:1 :>
b30: h. 0,4 ; input modes
b31=k-b30 w. ; max modus
c. -e25, b84=k, b86=k+2 z. ;
b32: 0, b33: 0, b34: 0, b35: 0 ; work
b37: 0 ; work
b38: 63 ; mask
b70: 1 ; send and wait
b71: 9 ; send and wait slow
b72: 3 ; lock
b73: 4 ; open
b74: 5 ; lock chained
b75: 6 ; open chained
b77: 26 ; current descr
b78: 51 ; request que
b79: 52 ; request free
b80: h. e25*e13, 19 w.; remoter que
b81: h. i45*e13, 19 w.; remote operation
b82: 63 ; psjob que
b83: 0 ; virt label read
b84=k, h. e13, 19 w.; label read sem
b85: 0 ; virt label write
b86=k, h. e13, 19 w.; label write sem
b87: 21 ; private output
\f
; kll 27.7.71 boss 2, remoter, ...28...
; the job of the remoter is to read labels on tapes when they
; are mounted and to find the corresponding psjob and tell what
; has happened. On operator request the remoter will name or
; name and write label on special tape stations. All error
; situations are reported to the operator.
; The remoter uses its page description like this:
; page 1 station entry in mount table
; page 2
; page 3 tape table
; page 4 answer sem or label buf or saved state
b. a9 w. ;
c0: rl. w3 b0.+2 ; wait operation:
rl. w2 b0.+6 ;
al w2 x2-g3+g8 ;
a0: al w1 x2 ;
sl. w1 (b0.+6) ;
am (:g4-g2:)<6+1;
al w0 g2<6+18;
jl. w3 (b87.) ;
sl. w2 (b0.+6) ;
am g4-g2 ;
al w2 x2+g2 ;
am. (b0.+6) ;
sh w2 g5-1 ;
jl. a0. ;
rl. w2 b80. ;
ba w2 x3+s8 ; sem:= remoter que + rel semaphor;
jl. w3 (b74.) ; lock chained(sem, buf);
g16=k-b0 ; rel first time entry;
rl. w2 (b77.) ;
rl w0 x1+4 ;
rs w0 x2+14 ; page 4:= answer sem;
bz w2 x3+s2 ; w2:= station state;
la. w2 b38. ;
rl w0 x1+2 ; w0:= operation code;
jd -1 ;
se w0 3 ;
am a2 ; if operation code = 3 then
bz. w2 x2+a1. ; goto remote pressed(station state) else
jl. x2+b0. ; goto name or label(station state);
;state: 0, 1, 2, 3, 4, 5
a1: h. c5, c6, c6, c7, c7, c8 ; remote pressed (code= 3)
a2=k-a1, c1, c2, c2, c3, c3, c4 ; name or label (code<>3)
w.
c1=k-b0 ; name or label state 0:
jl. w2 c15. ; find and link empty tape entry;
c2=k-b0 ; name or label state 1, 2:
jl. w2 c10. ; save operation;
jl. w3 c12. ; answer commandio ok;
jl. w2 c18. ; remove request;
jl. c48. ; goto wait operation (c0.) via operator request (c48.) ;
e. ;
\f
; kll 27.7.71 boss 2, remoter, ...29...
b. a5 w. ;
c3=k-b0 ; name or label state 3, 4:
; comment the actions until c4 must be undividable.
ba w3 x3+s1 ; get tapeaddres;
al w3 x3+t8 ; get tapenameaddres;
jd 1<11+64; remove process;
rl. w3 b0.+2 ; w3:= station
se w0 0 ; if process removed
sn w0 3 ; or removed by another then
jl. a1. ; continue label-name funktion;
al. w3 c0. ; else answer commandio: not-ok (c13.)
jl. c13. ; and continue at c0. (wait-operation).
a1: jl. w2 c23. ; exclude user;
ba w3 x3+s1 ;
al w0 0 ;
rx w0 x3+t4 ; save request addr and clear;
rs. w0 b37. ;
rl. w3 b0.+2 ;
jl. w2 c35. ; unmount tape;
jl. w2 c15. ; find and link empty tape entry;
ba w3 x3+s1 ;
rl. w0 b37. ;
rs w0 x3+t4 ; request addr:= saved request addr;
rl. w3 b0.+2 ;
rl. w1 b0.+4 ; w1:=operation;
jl. b0.+c2 ; goto name or label state 1, 2;
c4=k-b0 ; name or label state 5:
jl. w2 c10. ; save operation;
jl. w3 c12. ; answer commandio ok;
jl. w2 c18. ; remove request;
jl. w2 c19. ; name station;
ba w3 x3+s1 ;
al w2 x3+t8 ; ref name;
al. w1 b1. ;
jl. w3 (b70.) ; send and wait(sense tape);
so w0 1<1 ; if not normal answer then
jl. c0. ; goto wait; comment local;
jl. w2 c20. ; write label;
jl. c9. ; goto search name;
e. ;
\f
; kll 27.7.71 boss 2, remoter, ...30...
b. a9 w. ;
c5=k-b0 ; remote pressed state 0:
jl. w2 c15. ; find and link empty tape entry;
al w0 0 ;
ba w3 x3+s1 ;
rs w0 x3+t8 ; name(tape(station)):= 0;
rl. w3 b0.+2 ;
jl. w2 c19. ; name station;
jl. w3 c14. ; answer watch dog;
jl. w2 c18. ; remove request;
jl. w2 c11. ; sense ring;
jl. w3 c28. ; reserve label read;
ld w1 -100 ; mode:= parity count:= 0;
ds w1 x3+s12+s10-s10;
; read:
a1: jl. c24. ; input(mode);
c40: sz w0 1<5 ; if not exist then
jl. a6. ; goto local;
sz. w0 (b18.) ; if status and hard-parity <> 0 then
jl. a5. ; goto mode count;
la. w0 b19. ;
sn w0 0 ; if status and hard = 0 then
jl. a4. ; goto status ok;
rl w1 x3+s12 ;
al w1 x1+1 ; parity count:= parity count + 1;
rs w1 x3+s12 ;
sl w1 10 ; if parity count > 9 then
jl. c38. ; goto unreadable else
jl. a1. ; goto read;
a5: rl w1 x3+s10 ; mode count:
al w1 x1+1 ; mode:= mode + 1;
rs w1 x3+s10 ;
sl w1 b31 ; if mode >= max mode then
jl. c38. ; goto unreadable else
jl. a1. ; goto read;
a6: jl. w3 c30. ; local: release label read;
jl. w2 c45. ; call local;
jl. c0. ; goto wait operation;
a4: rl w1 x1+2 ; status ok:
se w1 56 ; if bytes transferred <> 56 then
jl. c38. ; goto unreadable;
rl. w3 b0.+8 ; w3:= label;
dl w1 x3+2 ;
ls w1 -16 ;
sn. w0 (b21.) ; if character(1:4) <> VOL1 then
se w1 49 ;
jl. c38. ; goto unreadable;
e. ;
\f
; kll 3.1.72 boss 2, remoter, ...31...
; project number:
; the ciffer values correspond to the label
rl w0 x3+24 ; shown on page 41.
jl. w1 c26. ; check ciffer 2;
rl w2 0 ; w2:= 3;
al w2 x2-48 ;
rl w0 x3+24 ;
jl. w1 c27. ; check ciffer 1;
wm. w2 b13. ;
wa w2 0 ; w2:= w2 * 10 + 1;
rl w0 x3+26 ;
jl. w1 c25. ; check ciffer 3;
wm. w2 b13. ;
wa w2 0 ; w2:= w2 * 10 + 0;
rl w0 x3+26 ;
jl. w1 c26. ; check ciffer 2;
wm. w2 b13. ;
wa w2 0 ; w2:= w2 * 10 + 4;
rl w0 x3+26 ;
jl. w1 c27. ; check ciffer 1;
wm. w2 b13. ;
wa w2 0 ; w2:= w2 * 10 + 9;
rl w0 x3+28 ;
jl. w1 c25. ; check ciffer 3;
wm. w2 b13. ; w2:= w2 * 10 + 3;
wa w2 0 ; comment a ciffer is 48 + value;
ws. w2 b14. ; w2:= w2 - 5333328;
rl. w3 b0.+2 ; w3:= station;
rs w2 x3+s4 ; project(station):= w2;
rl. w2 b0.+8 ; w2:= label;
rl w0 x2+6 ;
al w1 -1 ; w1:= -1;
ls w0 -8 ;
la. w0 b15. ; w0:= tape kind position;
sn w0 119 ;
al w1 0 ; if w0 = w then w1 := 0 else
sn w0 32 ;
al w1 2 ; if w0 = <sp> then w1:= 2;
sn w0 112 ;
al w1 4 ; if w0 = p then w1:= 4 else
sn w0 114 ;
al w1 6 ; if w0 = r then w1:= 6;
sn w1 -1 ; if w1 = -1 then
jl. c38. ; goto unreadable;
hl w0 x3+s3 ;
sz w0 1 ; if writing enable then
al w1 x1+1 ; w1:= w1 + 1;
hs w1 x3+s3 ; tape kind:= w1;
\f
; kll 3.1.72 boss 2, remoter, ...32...
; tape name:
ba w3 x3+s1 ; w3:= tape;
rl w0 x2+2 ;
jl. w1 c42. ; check ciffer or letter 2;
lo. w0 b22. ;
rs w0 x3+t8 ; tape name + 0:= <:mt2:>;
rl w0 x2+2 ;
jl. w1 c41. ; check ciffer or letter 1;
ls w0 16 ;
rs. w0 b32. ; save 8;
rl w0 x2+4 ;
jl. w1 c25. ; check ciffer 3;
ls w0 8 ;
rs. w0 b33. ; save 5;
rl w0 x2+4 ;
jl. w1 c26. ; check ciffer 2;
lo. w0 b32. ;
lo. w0 b33. ;
rs w0 x3+t8+2 ; tape name + 2:= <:850:>;
rl w0 x2+4 ;
jl. w1 c27. ; check ciffer 1;
ls w0 16 ;
rs. w0 b32. ; save 6;
rl w0 x2+6 ;
jl. w1 c25. ; check ciffer 3;
ls w0 8 ;
lo. w0 b32. ;
rs w0 x3+t8+4 ; tape name + 4:= <:64<0>:>;
al w0 0 ;
rs w0 x3+t8+6 ; tape name + 6:= 0;
jl. w3 c46. ; rewind tape
jl. w3 c30. ; release label read;
jl. w2 c19. ; name station;
jl. c9. ; goto search name;
c6=k-b0 ; remote pressed state 1, 2:
jl. w3 c14. ; answer watch dog;
jl. w2 c18. ; remove request;
jl. w2 c19. ; name station;
jl. w2 c11. ; sense ring;
jl. w2 c20. ; write label;
jl. c9. ; goto search name;
c7=k-b0 ; remote pressed state 3, 4:
jl. w2 c23. ; exclude user;
jl. w2 c18. ; remove request;
jl. w2 c35. ; unmount tape;
jl. b0.+c5 ; goto remote pressed state 0;
c8=k-b0 ; remote pressed state 5:
jl. w2 c18. ; remove request;
jl. w2 c17. ; link of tape entry;
jl. b0.+c5 ; goto remote pressed state 0;
\f
; kll 27.7.71 boss 2, remoter, ...33...
b. a5 w. ;
c9: rl. w2 b0.+6 ; search name:
al w2 x2+g5 ;
rs. w2 b32. ; save tape table top;
al w2 x2-g5-g4 ; w2:= tape:= tape table base;
ba w3 x3+s1 ; w3:= old tape;
al w3 x3+t8 ; w3:= tape name;
jd 1<11+10; release process;
al w3 x3-t8 ; w3:= old tape;
a1: al w2 x2+g4 ; next tape: tape:= tape + length;
sl. w2 (b32.) ; if tape >= tape table top then
jl. a3. ; goto search work tape;
rl w0 x2+t0+t1-t1; if tape state = 0 or
sl w0 2047 ; tape ref <> 0 then
sz w0 2047 ;
jl. a1. ; goto next tape;
dl w1 x3+t8+2 ;
sn w1 (x2+t8+2) ; if name part(old tape)<>
se w0 (x2+t8) ; name part(tape) then
jl. a1. ; goto next tape;
dl w1 x3+t8+6 ;
sn w1 (x2+t8+6) ; if name part(old tape) <>
se w0 (x2+t8+4) ; name part(tape) then
jl. a1. ; goto next tape;
a2: rl w0 x3+t16 ; found:
rs w0 x2+t16 ; name table(new):=name table(old);
al w0 0 ;
rs w0 x3+t0+t1-t1; state(old tape) := station(old tape) := 0;
rl. w3 b0.+2 ; w3:= station;
jl. w1 c16. ; link(w2, station);
al w0 4 ;
hs w0 x3+s2 ; station state:= remoted;
jl. w2 c18. ; remove request;
rl. w2 b81. ;
ba w3 x3+s1 ;
sn. w3 (b0.+2) ; if tape gone then
c.-1, o110, z. ; (bossfault xref)
jd -110 ; bossfault;
ba w2 x3+t7 ; w2:= remote op(rel psjob);
rl w0 x2 ;
rl w1 x3+t2 ;
sn w1 0 ; if jobnr(index) = 0 then
jl. c32. ; goto not found;
sh w0 0 ; if w2 > 0 then
jl. c0. ; begin
al w0 2 ; request(tape) := even (i.e. reserve the tape);
rs w0 x3+t4 ;
jl. w3 (b74.) ; lock chained(w2);
rl. w2 b82. ; comment w1 = operation;
ba w3 x3+s1 ; w2:= psjob que(rel psjob);
sn. w3 (b0.+2) ; if tape gone then
c.-1, o111, z. ; (bossfault xref)
jd -111 ; bossfault
al w0 0 ; request(tape) := 0 (i.e. release the tape entry);
rs w0 x3+t4 ;
ba w2 x3+t7 ; open chained(w2, w1);
jl. w3 (b75.) ; end;
ba w3 x3+s1 ;
sn. w3 (b0.+2) ; if tape ref(station) = 0 then
jl. c0. ; goto wait;
bz w0 x3+t0 ; if tape wanted then
sl w0 60 ;
jl. c0. ; goto wait else
jl. c44. ; goto not wanted;
\f
; kll 27.7.71 boss 2, remoter, ...34...
a3: rl. w1 b0.+2 ; search work tape:
bz w0 x1+s3 ;
sl w0 2 ; if not work tape then
jl. c32. ; goto not found;
rl. w2 b0.+6 ; w2:= tape:= tape table base;
a4: sl. w2 (b32.) ; rep: if tape < top then
jl. c32. ; goto not found;
bz w0 x2+t0 ;
se w0 60 ; if state = 60 or
sn w0 120 ; state = 120 then
jl. a5. ; goto work found;
al w2 x2+g4 ; tape:= tape + length;
jl. a4. ; goto rep;
a5: dl w1 x3+t8+2 ; work found:
ds w1 x2+t8+2 ;
dl w1 x3+t8+6 ; move tape name from old tape
ds w1 x2+t8+6 ; to tape;
jl. a2. ; goto found;
c10: ; save operation:
; entry: w0 = irr, w1 = operation, w2 = return, w3 = irr.
; exit: w0 = undef, w1 = operation, w2 = undef, w3 = station.
rs. w2 b32. ; save return;
rl. w2 b0.+2 ; w2:= station;
rl w3 x1+2 ;
al w0 x3-2 ;
ls w0 6 ;
sl w3 3 ; if operation code > label
al w3 2 ; then operation code:= label;
lo w3 0 ;
ls w3 12 ; station state:= label mode < 6 + operation code;
hl w3 x1+17 ;
bz w0 x2+s3 ; tape kind(station):= tape kind(op)
sz w0 1 ; + writing enabled;
al w3 x3+1 ;
rl w0 x1+14 ; project(station):= project(op);
ds w0 x2+s2-s2+s3-s3+s4;
ba w2 x2+s1 ; w2:= tape(station);
dl w0 x1+8 ;
ds w0 x2+t8+2 ; move name(operation) to
dl w0 x1+12 ; name(tape(station));
ds w0 x2+t8+6 ;
rl. w3 b0.+2 ; w3:= station;
jl. (b32.) ; goto saved return;
c11: ; sense ring:
; entry: w0 = irr, w1 = irr, w2 = return, w3 = station.
; exit: w0 = undef, w1 = undef, w2 = undef, w3 = station.
ws. w2 b0. ; w2:= return - page 0;
rs w2 x3+s10 ; save relativ return;
ba w3 x3+s1 ;
al w2 x3+t8 ; w2:=tape name;
al. w1 b1. ;
jl. w3 (b70.) ; send and wait(sense);
al w1 -1<1 ;
la w1 x3+s3 ;
sz. w0 (b16.) ; if writing enable then
al w1 x1+1 ; tape kind:= tape kind + ring;
hs w1 x3+s3 ;
rl w2 x3+s10 ;
rl. w3 b0.+2 ; w3:= station;
jl. x2+b0. ; goto relativ return + page 0;
e. ;
\f
; kll 9.2.72 boss 2, remoter, ...35...
b. a5 w. ;
; answer commandio:
; entry: w0 = irr, w1 = operation, w2 = irr, w3 = return.
; exit: w0 = undef, w1 = undef, w2 = undef, w3 = station.
c12: al w0 0 ; ok:
rs w0 x1+2 ; code:= 0;
c13: al w0 0 ; not ok:
rl. w2 (b77.) ;
rs w0 x2+10 ; page 2:= 0;
rl w2 x2+14 ; w2:= answer sem;
jl. (b73.) ; open(w2); return to w3;
c14=c13 ; answer watchdog;
c15: ; find and link empty tape entry:
; entry: w0 = irr, w1 = irr, w2 = return, w3 = station.
; exit: w0 = undef, w1 = unch, w2 = undef, w3 = station.
ds. w2 b33. ; save w1, return;
rl. w2 b0.+6 ; w2:= tape:= tape table start;
a1: bz w0 x2+t0 ; rep:
sn w0 0 ; if state(tape) = 0 then
jl. a3. ; goto reserve and link;
al w2 x2+g4 ; tape:= tape + length;
jl. a1. ; goto rep;
a3: al w1 g7 ; reserve and link:
hs w1 x2+t0 ; state(tape):= reserved;
a2: al w1 x2 ; link tape:
ws w1 6 ; w1:= tape - station;
hs w1 x3+s1 ; tape ref(station):= w1;
ac w1 x1 ;
hs w1 x2+t1 ; station ref(tape):= - w1;
rl. w1 b32. ; reestablish w1;
jl. (b33.) ; goto saved return;
c16: ; link: w1 = return, w2 = tape, w3 = station.
rs. w1 b33. ; save return;
jl. a2. ; goto link tape;
c17: ; link off tape entry:
; entry: w0 = irr, w1 = irr, w2 = return, w3 = station.
; exit: w0 = 0, w1 = undef, w2 = unch, w3 = station.
al w1 x3 ; w1:= tape(station);
ba w1 x3+s1 ;
sn w1 x3 ; if tape already linked off then
c.-1, o56, z. ; (bossfault xref)
jd -56 ; bossfault 56
al w0 0 ; state(w1):= 0;
rs w0 x1+t0+t1-t1; station(w1):= 0;
hs w0 x3+s1 ; tape(station) := 0;
jl x2 ; goto return;
c35: ; unmount tape:
; entry: w0 = irr, w1 = irr, w2 = return, w3 = station
; exit: w0 = undef, w1 = undef, w2 = unch, w3 = station.
al w1 x3 ;
ba w3 x3+s1 ; w3:= tape(station);
sn w1 x3 ; if tape linked off then bossfault 57
c.-1, o57, z. ; (bossfault xref)
jd -57 ;
al w0 0 ;
hs w0 x1+s1 ; station ref:=
hs w0 x3+t1 ; tape ref:= 0;
bz w1 x3+t0 ;
wd. w1 b13. ;
bz. w1 x1+a4. ; state(w1):= remove(old state);
hs w1 x3+t0 ;
rl. w3 b0.+2 ; w3:=station;
jl x2 ; goto return;
h. a4: 0, 0, 0, 30, 30, 0, 60, 70, 80, 60, 70, 80,120,130,140,150,160 w.
e. ;
\f
; kll 27.7.71 boss 2, remoter, ...36...
b. a5 w. ;
c18: ; remove request:
; entry: w0 = irr, w1 = irr, w2 = return, w3 = station.
; exit: w0 = undef, w1 = undef, w2 = undef, w3 = station.
al w1 x3+s10 ; w1:= remoter operation;
ba w3 x3+s1 ;
rl w0 x3+t4 ; w0:= request line(tape);
sz w0 1 ; if not pending request then
jl. a1. ; begin
rl. w3 b0.+2 ; w3:= station;
jl x2 ; goto return;
; end;
a1: ws. w2 b0. ;
rs w2 x3+t4 ; request(tape) := even (i.e. being removed);
rs w2 x1-s10+s6 ; save rel return in user descr addr;
rs w0 x1+6 ; save request line in operation;
al w0 1 ; operation code:= remove line;
rs w0 x1+2 ;
rl. w2 b78. ;
jl. w3 (b75.) ; open chained(request que, w1);
rl w2 x3+s14 ; w2:= request buf;
jl. w3 (b72.) ; lock(remoter buf);
al w0 0 ;
ba w3 x3+s1 ;
se. w3 (b0.+2) ; if tape ref(station) <> 0 then
rs w0 x3+t4 ; request(tape) := 0 (i.e. free);
rl. w3 b0.+2 ;
rl w2 x3+s6 ;
jl. x2+b0. ; goto save rel return + page 0;
c19: ; name station:
; entry: w0 = irr, w1 = irr, w2 = return
; exit: w0 = undef, w1 = undef, w2 = undef, w3 = station.
am (66) ;
dl w1 +74 ; w0, w1:= max interval;
al. w3 b1. ;
jd 1<11+72; set catalog base;
rl. w3 b0.+2 ; w3:= station;
bz w1 x3+s0 ; w1:= device;
ba w3 x3+s1 ;
al w3 x3+t8 ; w3:= tape name(station);
jd 1<11+6 ; initialize process;
jd 1<11+4 ; w0:=lookup process;
sn w0 0 ; if not exist then
jl. a2. ; goto create;
am (74) ; if nametable(device) does not
am x1 ; address the same
se w0 (x1) ; process description then
jl. a2. ; goto create;
rl. w3 b0.+2 ; w3:= station;
jl x2 ; goto return;
a2: jd 1<11+54; w1:=create peripheral process;
rl w1 0 ;
jd 1<11+6 ; initialize process;
rl. w3 b0.+2 ; w3:= station;
se w1 5 ; if result = 5 or
sn w1 0 ; result = 0 then
jl x2 ; goto return;
se w1 3 ;
sn w1 6 ; if result = 3 or result = 6 then
jl. c37. ; goto name illegal;
c.-1, o53, z. ; (bossfault xref)
jd -53 ; goto boss alarm;
e. ;
\f
; kll 3.1.72 boss 2, remoter, ...37...
c20: ; write label:
; entry: w0 = irr, w1 = irr, w2 = return, w3 = station.
; exit: w0 = undef, w1 = undef, w2 = undef, w3 = station.
bz w0 x3+s2 ;
la. w0 b38. ;
se w0 2 ; if station state = named then
jl x2 ; goto return;
bz w0 x3+s3 ;
so w0 1 ; if no ring then
jl. c34. ; goto mount ring;
ws. w2 b0. ;
rs w2 x3+s10 ; save relativ return;
jl. w3 c29. ; reserve label write;
; project number:
; the ciffer values correspond to the label shown on page 19.
rl w2 x3+s4 ; w2:= project nr;
rl. w3 b0.+8 ; w3:= label write;
al w1 0 ;
wd. w2 b13. ; w1:= 5;
ld w1 40 ; w0:= 5<16 or <:0 :>;
lo. w0 b26. ;
rs w0 x3+28 ; label + 28:= w0;
rl. w0 b24. ; w0:= <:000:>;
wd. w2 b13. ; w1:= 9;
lo w0 2 ; w0:= w0 or 9;
al w1 0 ;
wd. w2 b13. ; w1:= 4;
ls w1 8 ;
lo w0 2 ; w0:= w0 or 4<8;
al w1 0 ;
wd. w2 b13. ; w1:= 0;
ls w1 16 ;
lo w0 2 ;
rs w0 x3+26 ; label + 26:= w0 or 0<16;
rl. w0 b25. ; w0:= <: 00:>;
al w1 0 ;
wd. w2 b13. ; w1:= 1;
lo w0 2 ; w0:= w0 or 1;
ls w2 8 ;
lo w0 4 ;
rs w0 x3+24 ; label + 24:= w0 or 3<8;
\f
; kll 3.1.72 boss 2, remoter, ...38...
; comment tape name as on page 41.
rl. w2 b0.+2 ;
bz w1 x2+s3 ;
rl. w0 x1+b28. ; label + 6:= case tape kind of
rs w0 x3+6 ; (<: w :>, <: :>, <: p :>, <: r :>);
ba w2 x2+s1 ;
rl w0 x2+t8+4 ;
jl. w1 c26. ; check ciffer 2;
ls w0 16 ;
lo w0 x3+6 ; label + 6:= label + 6 or <:4 :>;
rs w0 x3+6 ;
rl w0 x2+t8+4 ;
jl. w1 c25. ; check ciffer 3;
rs. w0 b32. ; save 6;
rl w0 x2+t8+2 ;
jl. w1 c27. ; check ciffer 1;
rs. w0 b33. ; save 0;
rl w0 x2+t8+2 ;
jl. w1 c26. ; check ciffer 2;
ls w0 8 ;
lo. w0 b33. ; w0:= <: 50:>;
ls w0 8 ;
lo. w0 b32. ; w0:= <:506:>;
rs w0 x3+4 ; label + 4:= w0;
rl w0 x2+t8+2 ;
jl. w1 c43. ; check ciffer or letter 3;
rs. w0 b32. ; save 8;
rl w0 x2+t8 ;
jl. w1 c41. ; check ciffer or letter 1;
ls w0 8 ;
lo. w0 b32. ;
lo. w0 b36. ; label + 2:= <:128:>;
rs w0 x3+2 ;
rl w0 x2+t8 ;
ls w0 -8 ;
se. w0 (b29.) ; if name + 0 shift - 8 <> <: mt:> then
jl. c36. ; goto write name syntax;
dl w1 x2+t8+6 ;
ls w0 16 ; if rest of name <> 0 then
sn w0 0 ;
se w1 0 ; goto write name syntax;
jl. c36. ;
\f
; kll 27.7.71 boss 2, remoter, ...39...
b. a5 w. ;
rl. w3 b0.+2 ;
al w0 -1 ; erase limit:= -1;
rs w0 x3+s12 ;
ba w3 x3+s1 ;
al w2 x3+t8 ; w2:= tape name;
al. w1 b10. ;
jl. w3 (b70.) ; send and wait(rewind);
a1: jl. w2 c22. ; write again:
rl. w1 b0.+8 ; erase;
al w2 x1+54 ; first addr:= label write page;
ds. w2 b7. ; last addr:= first addr + 54;
bz w0 x3+s2 ;
ls w0 -6 ; output mode:= label mode;
hs. w0 b5.+1 ;
ba w3 x3+s1 ;
al w2 x3+t8 ; w2:= tape name;
al. w1 b5. ; w1:= message;
jl. w3 (b71.) ; send and wait slow(output);
sz w0 1<5 ; if not exist then
jl. a3. ; goto local;
jl. w2 c21. ; add stopped, word defect;
sz. w0 (b19.) ; if status and hard then
jl. a1. ; goto write again;
a4: al w0 -1 ;
rs w0 x3+s12 ; erase limit:= -1;
a2: jl. w2 c22. ; write tape mark:
ba w3 x3+s1 ; erase;
al w2 x3+t8 ; w2:= tape name;
al. w1 b12. ;
jl. w3 (b70.) ; send and wait(write mark);
sz. w0 (b17.) ; if no tape mark or
sz. w0 (b19.) ; hard error then
jl. a2. ; goto write tape mark;
rl w2 x1+6 ; w2:=file number from answer;
jd -1
sh w2 i99-1 ; if first tape mark then
jl. a4. ; write another tape mark;
jl. w3 c46. ; rewind tape;
rl w3 x3+s10 ;
wa. w3 b0. ; return:= saved return + page 0;
jl. c31. ; release label write;
c21: ds. w2 b33. ; add stopped, word defect:
dl w2 x1+4 ; save w1, return;
se w1 56 ; if bytes transferred <> 56 then
ba. w0 1 ; add hard error;
al w1 0 ;
wd. w2 b20. ; if characters transferred mod 28
se w1 0 ; <> 0 then
ba. w0 1 ; add hard error;
rl. w1 b32. ; w1:= saved w1;
jl. (b33.) ; goto saved return;
a3: jl. w3 c31. ; local: release label write;
jl. w2 c45. ; call local;
jl. c0. ; goto wait operation;
e. ;
\f
; kll 27.7.71 boss 2, remoter, ...40...
b. a5 w. ;
c22: bl w1 x3+s12 ; erase:
al w1 x1+1 ; erase:= erase limit:=
sl w1 5 ; erase limit + 1;
jl. c33. ; if erase limit > 4 then
hs w1 x3+s12 ; goto unwritable;
hs w1 x3+s12+1 ;
sh w1 0 ; if erase limit < 1 then
jl x2 ; goto return;
ws. w2 b0. ;
rs w2 x3+s16 ; save relativ return;
ba w3 x3+s1 ;
al w2 x3+t8 ; w2:= tape name(station);
al. w1 b9. ;
jl. w3 (b70.) ; send and wait(back space block);
a1: bl w1 x3+s12+1 ; rep:
al w1 x1-1 ;
hs w1 x3+s12+1 ; erase:= erase - 1;
ba w3 x3+s1 ;
al w2 x3+t8 ; w2:= tape name;
al. w1 b8. ;
jl. w3 (b70.) ; send and wait(erase);
bz w1 x3+s12+1 ; w1:= erase;
sl w1 1 ; if erase > 0 then
jl. a1. ; goto rep;
rl w1 x3+s16 ;
jl. x1+b0. ; goto saved relativ return + page 0;
c23: ; exclude user:
; entry: w0 = irr, w1 = irr, w2 = return, w3 = station.
; exit: w0 = undef, w1 = undef, w2 = unch, w3 = station.
rx w2 x3+s6 ;
dl w1 x2+4 ;
ds. w1 b33. ; move job process;
se w2 0 ; because of changed microprogram conventions;
dl w1 x2+8 ; name(descr addr);
ds. w1 b35. ;
rx w2 x3+s6 ;
bz w1 x3+s0 ; w1:= device;
al. w3 b32. ; w3:= job name;
jd 1<11+14; exclude user;
rl. w3 b0.+2 ; w3:= station;
jl x2 ; goto return;
; entry: w0 = irr, w1 = irr, w2 = return, w3 = station,
; exit: w0 = undef, w1 = undef, w2 = undef, w3 = station.
c45: rs. w2 b3. ; local:
jl. w2 c17. ; link off tape entry;
hs w0 x3+s2 ; station state:= local;
jl. (b3.) ; goto return;
e. ;
\f
; kll 17.11.71 boss 2, remoter, ...41...
b. a5 w.
c24: ; input(mode):
; w3 = station, mode = x3+10.
al. w3 c47. ; w3:=return
c46: rl. w2 b0.+2 ; rewind tape: w3=return
ba w2 x2+s1 ; w2:=tape(station)
al w2 x2+t8 ; w2:=tape name
al. w1 b10. ;
jl. (b70.) ; send and wait(rewind);
c47: dl w2 x3+s12+s10-s10; w2:= parity count;
bz. w1 x1+b30. ; w1:= mode table(mode);
sl w2 5 ; if parity count > 4 then
al w1 x1+2 ; w1:= w1 + even;
hs. w1 b2.+1 ; mode(message):= w1;
rl. w1 b0.+8 ;
al w2 x1+54 ; first addr:= page 4;
ds. w2 b4. ; last addr:= first addr + 54;
ba w3 x3+s1 ;
al w2 x3+t8 ; w2:= tape name(station);
al. w1 b2. ;
jl. w3 (b71.) ; send and wait slow(input);
jl. w2 c21. ; add stopped, word defect;
jl. c40. ; goto return;
c25: ls w0 -8 ; check ciffer 3:
c26: ls w0 -8 ; check ciffer 2:
c27: la. w0 b15. ; check ciffer 1:
sn w0 32 ; if char = space then
al w0 48 ; char:= zero;
a1: sh w0 57 ; if ciffer > 47 and
sh w0 47 ; ciffer < 58 then
jl. 4 ; goto return;
jl x1 ; if called from write then
sh. w1 c20. ; goto write name syntax else
am c39 ; goto unreadable;
jl. c36. ;
c43: ls w0 -8 ; check ciffer or letter 3:
c42: ls w0 -8 ; check ciffer or letter 2:
c41: la. w0 b15. ; check ciffer or letter 1:
sh w0 125 ; if letter>125
sh w0 96 ; or letter<97 then
jl. a1. ; goto check ciffer else
jl x1 ; goto return;
c28: am b84-b86; reserve label read:
c29: dl. w1 b86. ; reserve label write:
rl. w2 (b77.) ;
rs w0 x2+14 ; page 4:= label read or write;
al w2 x1 ;
jl. (b72.) ; lock(label read or write);
c30: am b84-b86; release label read:
c31: rl. w2 b86. ; release label write:
al w0 0 ;
rl. w1 (b77.) ; page 4:= 0;
rs w0 x1+14 ;
jl. (b73.) ; open(label read or write);
e.
\f
; kll 27.7.71 boss 2, remoter, ...42...
b. a10 w. ;
a0: rl. w2 b79. ; display(saved text addr):
jl. w3 (b72.) ; lock chained(request free);
rl w2 x3+s10 ; w2:= saved text addr;
dl. w0 x2+b0.+2 ;
ds w0 x1+8 ; move text part;
dl. w0 x2+b0.+6 ;
ds w0 x1+12 ; move text part;
dl. w0 x2+b0.+10 ;
ds w0 x1+4 ; move(operation, length);
so w3 1<1 ; if operation = insert line then
jl. a1. ;
sz w3 1 ;
jl. a1. ; begin
rl. w3 b0.+2 ;
ba w3 x3+s1 ;
rl. w2 (b77.) ; request line(tape):=
rl w2 x2+10 ; virt addr request line(page 2);
rx w2 x3+t4 ;
se w2 0 ; if old request <> 0 then
c.-1, o55, z. ; (bossfault xref)
jd -55 ; boss fault 55;
sh w0 12 ; if length > 12 then
jl. a1. ; begin
al w2 x3+t8 ; w2:= tape name;
rl. w0 b23. ;
rs w0 x1+18 ;
dl w0 x2+2 ; move tape name;
ds w0 x1+22 ;
dl w0 x2+6 ; end;
ds w0 x1+26 ; end;
a1: am. (b0.+2) ; w3:= device nr;
bz w3 +s0 ;
; test fidifut ***************
sn w3 0 ; if device no = 00 then
c.-1, o58, z. ; (bossfault xref)
jd -58 ; bossfault 58
; test slut ******************
al w2 0 ;
wd. w3 b13. ; comment convert device nr
ls w3 8 ; to text form;
lo w3 4 ;
lo. w3 b25. ;
rl. w2 b27. ;
ds w3 x1+16 ; save(on <device>);
rl. w2 b78. ;
jl. w3 (b75.) ; open chained(request que);
jl. c0. ; goto wait;
a10=k-b0,<:labelcommand:>,2,22,<:namecommand :>,2,22
a2=k-b0,<:not wanted :>,2,22,<:no label :>,1<3+1<1,12
a3=k-b0,<:mount ring :>,1<3+1<1,12,<:too bad tape:>,3,12
a4=k-b0,<:label name :>,2,22
a5=k-b0,<:name illegal:>,2,22,a6=12
\f
; kll 27.7.71 boss 2, remoter, ...43...
c48: zl w1 x3+s2 ; (zl == bz)
la. w1 b38. ; w1:= state extract 6;
sn w1 1 ; if namecommand
am a6 ; then nametext
al w0 a10 ; else labeltext
rs w0 x3+s10 ; save text addres
jl. a0. ; display(label or name-command)
c32: rl. w3 b0.+2 ; not found:
bz w0 x3+s3 ; w0:= tape state;
bz w1 x3+s9 ; w1:= free and standard;
ba w3 x3+s1 ; w3 := tape;
sz w1 1 ; tape state:= if special or
sl w0 2 ; named then
am -10 ; not wanted mounted named else
al w0 20 ; not wanted mounted work;
hs w0 x3+t0 ; not wanted:
c44: al w1 3 ; new station state:= in use;
rl. w3 b0.+2 ; w3:= station;
jl. a8. ; goto display(not wanted);
c33: jl. w3 c31. ; unwriteable:
jl. w2 c45. ; call local;
am a6 ; release label write;
c34: al w0 a3 ; mount ring:
rs w0 x3+s10 ; save text addr;
al. w1 b11. ;
ba w3 x3+s1 ;
al w2 x3+t8 ; w2:= tape name;
jl. w3 (b70.) ; send and wait(unload);
jl. a0. ; goto display(saved text addr);
c36: jl. w3 c46. ; write name syntax: rewind tape;
jl. w3 c31. ;
am a4-a5 ; release label write;
c37: al w0 a5 ; name illegal:
a7: al w1 5 ; new state:= unreadable;
jl. a9. ; display(<:label name :> or <:name illegal:>);
c38: jl. w3 c46. ; unreadable: rewind tape
jl. w3 c30. ; release label read
al w1 5 ; new state:= 5;
am a6 ; display(<:no label :>);
a8: al w0 a2 ; display(<:not wanted :>);
a9: rs w0 x3+s10 ; save text addr;
hs w1 x3+s2 ; station state:= new state;
jl. a0. ;
c39=c38-c36 ; used in check ciffer on page 16.
e. ;
g17=k-b0 ; length remoter;
\f
; kll 27.7.71 boss 2, remoter, ...44...
; Label write page format:
;
; The fields containing i and r are not changed
; The fields containing n, k, p are set before writing every new label.
; A page called label read of the same length is used to read labels
; into.
; The content of the n and p field in the example is used in the com-
; ments to the read and write label actions.
; A tape with the following label has number 285064, is a project tape
; for project 310495.
; When it is mounted it will get the name mt285064 so that it can be
; used in an algol program after the call open(z, 18, <:mt285064:>, 0);
g18: ;
<:VOL:> ; 0: iii i ISO standard
<:128:> ; 2: inn
<:506:> ; 4: nnn n tape number
<:4p :> ; 6: nki k tape kind
<: :> ; 8: iii
<: :> ; 10: iii
<: :> ; 12: iii
<: :> ; 14: iii
<: :> ; 16: iii
<: :> ; 18: iii
<: :> ; 20: iii
<: :> ; 22: iii
<: 31:> ; 24: ipp p project number
<:049:> ; 26: ppp
<:5 :> ; 28: pii
<: :> ; 30: iii
<: :> ; 32: iii
<: :> ; 34: iii
<: :> ; 36: iii
<: :> ; 38: iii
<: :> ; 40: iii
<: :> ; 42: iii
<: :> ; 44: iii
<: :> ; 46: iii
<: :> ; 48: iii
<: :> ; 50: iii
<: <94>:> ; 52: iir r RC standard
<:<94><94><94>:> ; 54: rrr circonflex
i.e. ; end c, end b names
\f
; kll 17.11.71 boss 2, rewinder, ...45...
; The page descriptions are used as variables and contain:
; page 1: own description addr
; page 3: saved operation, device * 2
; page 4: relativ rewinder
b. b9, c0 w. ;
b0: 0, r.5 ; page descriptions
54<12 + 0 ; page ident: rewinder
b91: 1 ; send and wait
b92: 5 ; lock chained
b93: 6 ; open chained
b4: 0, r.5 ; tape name
8<12, 5 ; unload: code <> 1
b5: 8<12, 4 ; rewind: code = 1
; if stations = 0 then else
b96: h. e25*e13, 19 ; rewinder que and
b97: e25*e13, 19 w. ; rewinder buf;
c0: rl. w2 b96. ; wait operation:
wa. w2 b0.+8 ;
jl. w3 (b92.) ; lock chained(rewinder que + rel rewinder);
g24=k-b0 ; first time start:
rl w0 x1+2 ;
hs w0 x3+12 ; page 3:= operation code;
rl. w2 b97. ;
wa. w2 b0.+8 ;
jl. w3 (b93.) ; open chained(rewinder buf + rel rewinder);
bz. w1 b0.+7 ; w1:= device * 2;
wa w1 74 ;
rs. w1 b4.+8 ; set name table addr;
rl w2 x1 ;
dl w1 x2+4 ;
ds. w1 b4.+2 ; move tape name;
dl w1 x2+8 ;
ds. w1 b4.+6 ;
al. w3 b4. ;
jd 1<11+6 ; initialize process;
bz. w1 b0.+6 ; w1:= saved operation;
se w1 1 ; if saved operation = 2 then
am -4 ; w1:= unload else
al. w1 b5. ; w1:= rewind;
al. w2 b4. ; w2:= name addr;
jl. w3 (b91.) ; send and wait;
al. w3 b4. ;
jd 1<11+10; release process;
jl. c0. ; goto wait operation;
g22=b0 ; start
g23=k-b0 ; length
e. ;
\f
; kll 27.7.71 boss 2, watchdog, ...46...
b. a4, b20 w. ;
b0: 0, r.5 ; page addresses
56<12 + 0 ; page ident: watchdog
b101: 1 ; send and wait
b102: 5 ; lock
b103: 6 ; open chained
b105: 0, c.e25-1, r.e25, z.; station table
b6: e13>1 ; semaphor descr length
b107: 0 ; remoterque
b9: <:remoter:>, 0, 0 ;
b110:<:clock:>, 0, 0, 0;
b11: 0, i33 ; clock message
b15: 0 ; operation: chain
3 ; code
b111:c. -e25, 0 z. ; if stations = 0 then
h. e13, 19 w. ; else watchdog buf;
b17: 0 ; saved station
a0: al. w1 b11. ; wait remote:
al. w2 b9. ;
jl. w3 (b101.) ; send and wait(remoter);
al w2 0 ; station:= first station;
a1: rl. w0 (x2+b105.) ; rep:
sn w0 2 ; if state(station) = unident mounted
jl. a3. ; then remote(station);
a2: al w2 x2+2 ; station:= station + 1;
sh w2 e25*2-1; if station <= last station then
jl. a1. ; goto rep;
al. w1 b11. ;
al. w2 b110. ;
jl. w3 (b101.) ; send and wait(clock);
jl. a0. ; goto wait remote;
a3: rs. w2 b17. ; remote(station):
wm. w2 b6. ; save station;
wa. w2 b107. ; w2:= remoter que(station);
al. w1 b15. ; w1:= operation;
jl. w3 (b103.) ; open chained;
rl. w2 b111. ;
jl. w3 (b102.) ; lock(watch dog buf);
rl. w2 b17. ; w2:= saved station;
jl. a2. ; return;
g19=b0 ; start
g20=k-b0 ; length
g21=a0-b0 ; rel entry
e. ;
\f
; kll 25.8.71 boss 2, commandio, name, label, ...47...
; the parameters are packed as shown by the central logic of
; commandio. the name and label actions transform the parame-
; ters to an operation and send it to the remoter given by the
; device nr parameter.
; parameters: operation:
; +0
; +2
;
; +4 device nr
; +6 = value (integer) +0 chain
; +8 +2 code: name or label
; +10 +4 answer sem
;
; +12 +6
; +14 tape name +8 tape name
; +16 (text) +10
; +18 +12
;
; +20 +14 project number
; +22 tape kind +16 tape kind
; +24 (text)
; +26
;
; +28 project nr
; +30 = value (integer)
; +32
; +34
c. 31-i46 ; if parameter space < 4 then
m. i46 must be >= 32 ; write(i46 must be >= 32);
z. ;
b. a19, b5, j5 w. ;
b0: 0, r.5 ; page descriptions
58<12 + 0 ; page ident: commandio, name label
b1: e13 ; sem descr length
b113: 3 ; lock
b114: 6 ; open chained
b115: 8 ; page jump
b116: 0 ; remoter que
b117: 162 ; virt alarm print
b118: 204 ; rel
b119: 202 ; virt after action
b120: 203 ; rel
g25: ; start of device list
b121: h.0, c.e25-1, r.e25, z.w. ; device list
b124: 4 ; open
\f
; kll 3.12.71 boss 2, commandio, name, label, ...48...
a13: am 2 ; nrze:
a12: am 2 ; nrz:
a11: am 2 ; even:
a1: am 1 ; label:
a2: al w0 1 ; name:
j1: rl w1 x3+236 ; answer sem:= commandio buf;
ds w1 x3+10 ; code:= name or label;
dl w1 x3+22 ; w0:= tape kind on text form;
se w0 -1 ; if kind param empty then
jl. a7. ; begin
al w1 2 ; w1:= kind:= 2;
al w0 0 ; project:= 0;
jl. a8. ; end else
a7: ld w1 -16 ; begin
se w1 0 ; if second char <> 0 then
jl. a4. ; goto kind error;
al w1 -1 ; w1:= -1;
sn w0 119 ;
al w1 0 ; if w0 = <:w:> then w1:= 0 else
sn w0 112 ;
al w1 4 ; if w0 = <:p:> then w1:=4 else
sn w0 114 ;
al w1 6 ; if w0 = <:r:> then w1:= 6;
sn w1 -1 ;
jl. a4. ; if w1:= -1 then goto kind error;
rl w0 x3+28 ; if project param empty then
se w0 -1 ; begin
jl. a9. ;
al w0 0 ; project:= 0;
se w1 0 ; if kind <> work then goto private missing
jl. a10. ; end;
a9: rl w0 x3+30 ; end;
a8: ds w1 x3+22 ; set kind, project;
al w2 0 ; i:= 0;
a3: bz. w0 x2+b121. ; rep:
sn w0 (x3+6) ; if device param = device(i) then
jl. a6. ; goto device found;
al w2 x2+1 ; i:= i+1;
sh w2 e25-1 ; if i <= max device index then
jl. a3. ; goto rep;
\f
; kll 24.9.72 boss 2, commandio, name, label, ...48.a...
am 17-33 ; device error:
a10: am 33-18 ; project number missing:
a5: am 18-16 ; tape used:
a4: al w0 16 ; kind error:
rs w0 x3+4 ;
dl. w3 b118. ; alarm print(device error
jl. (b115.) ; or kind error);
a6: wm. w2 b1. ; device found:
wa. w2 b116. ; sem:= i * sem length + remoter que;
rs w2 x3+6 ;
b125=k+1
rl w2 x3+221 ; beware of deadlock.
jl. w3 (b124.) ; open(terminal reserve);
rl w2 x3+6 ; w2:=sem;
al w1 x3+6 ;
jl. w3 (b114.) ; open chained(sem, operation);
j2: rl w2 x3+236 ;
jl. w3 (b113.) ; lock(commandio buf);
b126=k+1
rl w2 x3+221 ;
jl. w3 (b113.) ; lock (terminal reserve);
rl w0 x3+8 ;
se w0 0 ; if not ok then
jl. a5. ; goto tape used;
dl. w3 b120. ;
jl. (b115.) ; page jump(after action);
b122=j1+1, b123=j2+1
g26=b0, g27=k-b0, g28=a2-b0, g29=a1-b0
g48=a11-b0, g49=a12-b0, g50=a13-b0
e. ;
\f
; kll 27.7.71 boss 2, mounter init, ...49...
b. j25, a9 w. ;
j1: g15. ;
j2: f0. ;
j3: 0, r.8 ; work
j4: 0, r.3 ; remote or rewinder op
j5: 0 ; index in watch dog table
j6: -1 ; index in device list
j7: 0 ; virt station table index
j8: 0 ; abs station table index
j9: 0 ; virt tape table
j12: g1 ; length psjob mount
j13: 0 ; virt remoter
j14: g17 ; length remoter
j15: 0 ; virt rewinder
j16: 0 ; virt watch dog
j17:h. 60<3+e93, g24 ; rel entry: rewinder
j18: 7<3+e87, g21 ; watchdog
j19: 80<3+e94, g16 w.; remoter
j20: 0 ; rel semaphor
f2: c. -e25, 0 z. ; if stations = 0 then else
h. e12, 18 ; descr: watchdog
f3: e25*e12, 18 ; remoter
f4: e25*e12, 18 w. ; rewinder
f5: 12 ; reserve virt
f6: 13 ; output virt
f7: 15 ; end init
f8: 14 ; simulate lock
f9: 24 ; put in activ que
f10: 0 ; external list
f12: 27 ; carriage return
f13:h.e25*e13, 19 w. ; remoter buf
f1: c. -e25 ; if no tape stations then
jl. w3 (f7.) ; goto end init;
m. no tape stations ;
z. ;
dl. w1 b97. ;
ds w1 x3+b38-f0 ; move rewinder buf, que to psjob;
al. w1 j3. ; comment set name table addr
al. w3 b110. ; in clock name in watch dog;
jd 1<11+16; send message(clock);
jd 1<11+18; wait answer;
am -2000 ;
rl. w0 b80.+2000; set remoter que in
rs. w0 b107. ; watch dog and
rs. w0 b116. ; commandio;
al w0 1 ;
am -2000 ;
rs. w0 (b84.+2000); label read sem:= label write sem:= 1;
am -2000 ;
rs. w0 (b86.+2000);
\f
; kll 17.11.71 boss 2, mounter init, ...50...
al w0 i87 ;
al w1 56 ;
jl. w3 (f5.) ; reserve virt label read;
al w2 x2+1 ;
am -2000 ;
rs. w2 b83.+2000;
jl. w3 (f5.) ; reserve virt label write;
al w2 x2+1 ;
am -2000 ;
rs. w2 b85.+2000;
al. w0 g18. ;
jl. w3 (f6.) ; output label write;
al w0 i82 ;
al w1 g6 ;
jl. w3 (f5.) ; reserve virt mount table;
al w2 x2+1 ;
al w1 x2+g3 ;
rs. w1 j9. ;
rs. w2 j10. ;
al w1 x2+g8 ;
rs. w1 j7. ; virt station index:= start station table;
al w0 i98 ;
al w1 g32 ;
jl. w3 (f5.) ; reserve virt action table;
rs. w2 j23. ;
rl. w3 j2. ;
al. w0 x3+g31-f0+j2.;
jl. w3 (f6.) ; output virt action table;
al w0 i83 ;
rl. w1 j12. ;
jl. w3 (f5.) ; reserve virt psjob mount ;
rs. w2 j11. ;
rl. w3 j2. ;
al. w0 x3+b0-f0+j2.;
jl. w3 (f6.) ; output virt psjob mount;
al w0 i84 ;
rl. w1 j14. ;
jl. w3 (f5.) ; reserve virt remoter;
rs. w2 j13. ;
rl. w3 j1. ;
al. w0 x3+j1. ;
jl. w3 (f6.) ; output virt remoter;
al w0 i85 ;
al w1 g23 ;
jl. w3 (f5.) ; reserve virt rewinder;
al w2 x2+1 ; add writing;
rs. w2 j15. ;
al. w0 g22. ;
jl. w3 (f6.) ; output virt rewinder;
al w0 i86 ;
al w1 g20 ;
jl. w3 (f5.) ; reserve virt watchdog;
al w2 x2+1 ;
rs. w2 j16. ;
al w0 i90 ;
al w1 g27 ;
jl. w3 (f5.) ; reserve virt name, label;
al. w0 g26. ;
jl. w3 (f6.) ; output virt name, label;
rs. w2 j21. ;
\f
; kll 27.7.71 boss 2, mounter init, ...51...
ld w1 -100 ;
al w2 g6-2 ;
a4: ds. w1 x2+f11. ; clear mount table;
al w2 x2-4 ;
sl w2 3 ;
jl. a4. ;
al. w1 f11. ;
al w1 x1+g8 ;
rs. w1 j8. ; abs station index:= start station table;
jl. w3 (f12.) ; carriage return;
a1: rl. w2 j6. ; next device:
al w2 x2+1 ; w2:= index device list;
rs. w2 j6. ; index:= index+1;
sl w2 e25 ; if w2 > last device then
jl. a2. ; goto end devices;
rl. w1 j8. ; w1:= abs station table index;
bz. w3 x2+g25. ;
ls w3 12 ; device(w1):= device(index);
rs w3 x1+s0+s1-s1;
rl. w0 j20. ; rel sem, standard(w1):=
ls w0 12 ; rel sem + if standard
sh w2 e26-1 ; station then 1 else 0;
ba. w0 1 ;
rs w0 x1+s8+s9-s9;
rl. w0 f13. ;
wa. w0 j20. ; set remoter buf
rs w0 x1+s14 ; in station table;
al w1 x1+g2 ; abs station table index:= w1 + length;
rs. w1 j8. ;
rl. w2 j6. ; w2:= device index;
bz. w3 x2+g25. ;
ls w3 1 ; w3:= device(index) * 2;
rl. w1 f4. ; w1:= rewinder descr;
rl. w0 j20. ; page 3:= device * 2;
ds w0 x1+14 ; page 4:= rel semaphor;
wa w3 74 ;
rl w3 x3 ;
al w0 x3+22 ; watch dog table(index):=
rl. w3 j5. ; state addr(device);
rs. w0 x3+b105. ;
al w3 x3+2 ; index:= index + 2;
rs. w3 j5. ;
rl. w0 j15. ; page 0:= virt rewinder;
ds w1 x1+8 ; page 1:= rewinder descr;
rl. w0 j17. ;
rs w0 x1+4 ; rel entry rewinder;
rl. w2 b96. ;
wa. w2 j20. ; w2:= rewinder que + rel sem;
jl. w3 (f8.) ; simulate lock(w1, w2);
al w1 x1+e12 ;
rs. w1 f4. ; rewinder descr:= rewinder descr + length;
\f
; kll 17.11.71 boss 2, mounter init, ...52...
al w0 i88 ;
al w1 4 ;
jl. w3 (f5.) ; reserve virt rewinder op;
al. w0 j4. ;
jl. w3 (f6.) ; output rewinder operation;
rl. w3 b97. ;
wa. w3 j20. ; w3:= rewinder buf + rel sem;
al w1 x2 ;
ds w2 x3+4 ; first(w3):= last(w3):= virt new op;
al w0 1 ;
rs w0 x3 ; rewinder buf:= 1;
rl. w1 f3. ;
al w2 x1+e12 ; w1:= remoter;
rs. w2 f3. ; remoter:= remoter + length;
rl. w0 j9. ;
rs w0 x1+12 ; page 3:= tape table;
rl. w3 j7. ;
rl. w2 j13. ; page 0:= virt remoter;
ds w3 x1+8 ; page 1:= virt station entry;
al w3 x3+g2 ; virt station entry:=
rs. w3 j7. ; virt station entry + length;
rl. w0 j19. ;
rs w0 x1+4 ; rel return remoter;
am -1000 ;
rl. w2 b80.+1000; w2:= remoter que + rel sem;
wa. w2 j20. ;
jl. w3 (f8.) ; simulate lock(w1, w2);
rl. w1 j20. ;
al w1 x1+e13 ; rel semaphor:= rel semaphor + length;
rs. w1 j20. ;
bl. w2 j17. ;
al w2 x2+1<3 ; next rewinder
hs. w2 j17. ;
bl. w2 j19. ;
al w2 x2+1<3 ; next remoter
hs. w2 j19. ;
jl. a1. ; goto next device;
\f
; lkn 76.05.10 mounter init. ...53...
a2: dl. w1 b97. ;
rs. w0 j22. ;
rs. w1 j24. ;
al w1 (:g32+511:)>9 ; ext(509):=size of action table
al w1 x1+(:g6+511:)>9 ; +size of mount table
al w1 x1+(:g1+511:)>9 ; +length of psjob mount code
rs. w1 j25. ; (length in segments)
jl. w3 (2) ; set externals;
f16: 40 ;
j22: 0 , 77 ; rewinder buf
j24: 0 , 59 ; rewinder que
j21: 0 , 296 ; virt name, label
g28, 297 ; rel name
g29, 298 ; rel label
g7 , 322 ; reserved state tape table
j23: 0 , 311 ; virt action table
j10: 0 , 312 ; virt mount table
j11: 0 , 313 ; virt psjob mount
g9 , 314 ; rel mount special
g10, 315 ; rel mount ring
g48, 487 ; rel even on label page
g49, 488 ; rel nrz on label page
g50, 489 ; rel nrze on label page
g11, 316 ; rel mount tape
g12, 317 ; rel suspend
g13, 318 ; rel release
g14, 319 ; rel tape ready
g30, 477 ; rel finis mount
j25: 0 , 509 ; length of tables (in segments)
0 , -1000 ; end of externals
\f
; lkn 76.05.10 mounter init ...54...
al w1 i45*e13-e13; rel sem:=
rs. w1 j20. ; (psjobs - 1) * sem length;
al w1 1 ; code(remote op):= 1;
rs. w1 j4.+2 ;
jl. w3 (f12.) ; carriage return;
a3: al w0 i89 ; rep:
al w1 6 ;
jl. w3 (f5.) ; reserve remoter op;
al w2 x2+1 ; writing;
rl. w1 j20. ;
am -1000 ;
wa. w1 b81.+1000; w1:= remote buf + rel sem;
al w0 1 ;
rs w0 x1 ; sem(w1):= 1;
al w3 x2 ;
ds w3 x1+4 ; first(w1):= last(w1):= virt remote op;
rs. w1 j4.+4 ; sem(remote op):= w1;
al w1 6 ;
al. w0 j4. ;
jl. w3 (f6.) ; output virt(remote op);
rl. w1 j20. ;
al w1 x1-e13 ;
rs. w1 j20. ; rel sem:= rel sem - 1;
sl w1 0 ; if rel sem >= 0 then
jl. a3. ; goto rep;
jl. w3 (f12.) ; carriage return;
al. w0 g19. ;
al w1 g20 ;
rl. w2 j16. ;
jl. w3 (f6.) ; output virt(watch dog);
rl. w1 f2. ;
rs w2 x1+6 ; page 0:= virt watch dog;
rl. w0 j18. ;
rs w0 x1+4 ; rel entry;
jl. w3 (f9.) ; put in active que(w1);
al. w0 f11. ;
al w1 g6 ;
rl. w2 j10. ;
jl. w3 (f6.) ; output mount table;
\f
; kll 17.11.71 boss 2, mounter init, ...55...
rl. w1 a7. ; next:= w0;
a0: bz. w1 x1+g25. ; unload next:
al. w3 j3. ; w3:= ref name;
al w0 0 ; w1:= device(next);
rs w0 x3 ; name:= 0;
jd 1<11+54; create peripheral process;
jd 1<11+6 ; initialize process;
al. w1 a6. ;
jd 1<11+16; send message (unload);
al. w1 j3. ;
jd 1<11+18; wait answer;
rl. w1 a7. ;
al w1 x1+1 ; next:= next + 1;
rs. w1 a7. ;
sh w1 e25-1 ; if next < stations then
jl. a0. ; goto unload next;
jl. (f7.) ; goto end init;
a6: 8<12, 5 ; unload message
a7: 0 ; next
; the station list in options is a byte list containing the device
; numbers of the stations. during slang translation this list is
; copied to the binary mounter segment by j.code. during initiali-
; sation this is transformed to a list of state addresses for the
; stations and placed in a table on page 0 of the watch dog. the
; list is also used to initialise the device numbers in the station
; part of the mount table.
f11: 0, 0 ; mount table
b. a2 w. ; j.code:
a0: rl w1 x2 ; reduce segment
al w1 x1+a2 ; with length of
rs w1 x2 ; j.code;
c. e25-1
al w1 e25-1 ;
a1: am. (j2.) ; rep:
bz. w0 x1+e24-f0+j2.;
hs. w0 x1+g25. ; move station list
al w1 x1-1 ; from options to
sl w1 0 ; binary name, label segment;
jl. a1. ;
z.
al w0 0 ;
al w2 0 ;
jl x3 ; return to slang;
jl. a0. ; goto j.code;
a2=a0-k ; length of j.code;
j.e. ; jump;
e. ; end j-names;
i.e. ;
f14=s0, f15=s1 ; final chacksums
i.e. ; end g and f-names;
e. e. ; end options, tmount;
▶EOF◀