assm 01 09-23-82 12.190 multics/fnp scheduler and timer manager page 1 preface this program will be loaded mod 8 program break 2436 common length 0 v count bits 5 primary symdef entry sked 0 invp 34 mdisp 136 msdsp 146 dspqur 655 secdsp 1452 g3wjt 617 simclk 2144 setime 1714 etrip 1604 end of binary card 00000001 timrjt 2246 skdata 1702 etrmon 1713 etrint 1712 idlmrk 172 idloop 173 idlend 202 idlint 1674 idlcnt 202 idlmax 1706 end of binary card 00000002 idlmin 1710 secondary symdef entry .chain 22 x.002. 73 x.007. 1742 x.010. 2260 block length symref 1 lip 2 tdip 3 chkiv 4 dmail 5 dterm end of binary card 00000003 6 hintr 7 icmon assm 01 09-23-82 12.190 multics/fnp scheduler and timer manager page 2 10 trace 11 consol 12 frelbf 13 getbuf 14 gettib 15 itmout 16 setptw end of binary card 00000004 assm 01 09-23-82 12.190 multics/fnp scheduler and timer manager page 3 1 * *********************************************************** 2 * * * 3 * * copyright, (c) honeywell information systems inc., 1982 * 4 * * * 5 * * copyright (c) 1972 by massachusetts institute of * 6 * * technology and honeywell information systems, inc. * 7 * * * 8 * *********************************************************** 9 10 lbl ,scheduler assm 01 09-23-82 12.190 multics/fnp scheduler and timer manager page 4 12 pcc off 15 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 16 * 17 * scheduler, sked 18 * 19 * this module is the scheduler and timer manager 20 * for the multics/fnp communications system (mcs). it 21 * handles all interrupts and dispatches routines to 22 * process them. it also will queue routines to be run as soon 23 * as possible or delay for some time before letting them run. 24 * 25 * the timer manager handles the elapsed and interval 26 * timers, and includes mechanisms to support time outs 27 * for the control_tables and the delayed queueing for the 28 * scheduler. 29 * 30 * modified and revised 11/18/74 by mike grady 31 * modified 79 jul 26 by art beattie to add support for 32 * dn6670 extended memory. 33 * 34 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 35 36 symdef sked 37 symdef invp,mdisp,msdsp 38 symdef dspqur,secdsp 39 symdef g3wjt 40 symdef simclk 41 symdef setime 42 symdef etrip 43 symdef timrjt 44 symdef skdata address of scheduler data 45 symdef etrmon pointer to ic monitoring data 46 symdef etrint elapsed timer interval 47 symdef idlmrk address of one before start of idle loop 48 symdef idloop address of start of idle loop 49 symdef idlend address of end of idle loop 50 symdef idlint idle metering interval (used by init) 51 symdef idlcnt idle loop count (used by init) 52 symdef idlmax idle loop maximum count (set by init) 53 symdef idlmin idle loop minimum count (set by init) 54 55 symref trace 56 symref chkiv 57 symref hintr 58 symref dterm 59 symref dmail 60 symref lip 61 symref consol 62 symref tdip 63 symref getbuf 64 symref frelbf 65 symref itmout 66 symref icmon assm 01 09-23-82 12.190 multics/fnp scheduler and timer manager page 5 67 symref gettib 68 symref setptw set up variable cpu page table word 69 70 00000 72 systm assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 6 datanet configuration description 000000 intv set 0 iom interrupt vector base address 000400 intc set 256 program interrupt cell base address 000420 fltst set 272 iom fault status base address 000440 fltv set 288 processor fault vector base address 000450 iomm set 296 iom mailbox base address *************************** * iom channel assignments * *************************** 000000 tych set 0 typewriter channel 000002 lpch set 2 line printer channel 000004 dich set 4 direct interface adaptor 000006 h1ch set 6 high speed line adapter number one 000007 h2ch set 7 high speed line adapter number two 000010 h3ch set 8 high speed line adapter number three 000011 l1ch set 9 low speed line adapter number one 000012 l2ch set 10 low speed line adapter number two 000013 l3ch set 11 low speed line adapter number three 000014 l4ch set 12 low speed line adapter number four 000015 l5ch set 13 low speed line adapter number five 000016 l6ch set 14 low speed line adapter number six 000077 tmch set 63 interval timer channel 000077 swch set 63 data switch channel assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 7 datanet configuration description ************************* * iom interrupt vectors * ************************* 000000 tyft set 0 typewriter fault 000001 tyrq set 1 typewriter request 000002 tytm set 2 typewriter terminate 000040 lpft set 32 line printer fault 000041 lpat set 33 line printer attention 000042 lptm set 34 line printer terminate 000100 dift set 64 dia fault 000102 ditm set 66 dia terminate 000003 dis0 set 3 dia special - 0 000023 dis1 set 19 dia special - 1 000043 dis2 set 35 dia special - 2 000063 dis3 set 51 dia special - 3 000103 dis4 set 67 dia special - 4 000123 dis5 set 83 dia special - 5 000143 dis6 set 99 dia special - 6 000163 dis7 set 115 dia special - 7 000203 dis8 set 131 dia special - 8 000223 dis9 set 147 dia special - 9 000243 dis10 set 163 dia special - 10 000263 dis11 set 179 dia special - 11 000303 dis12 set 195 dia special - 12 000323 dis13 set 211 dia special - 13 000343 dis14 set 227 dia special - 14 000363 dis15 set 243 dia special - 15 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 8 datanet configuration description 000140 h1ft set 96 hsla 1 fault 000004 h1a0 set 4 hsla 1 subch 0 active terminate vector 000005 h1a16 set 5 hsla 1 subch 16 active terminate vector 000006 h1c0 set 6 hsla 1 subch 0 config terminate vector 000007 h1c16 set 7 hsla 1 subch 16 config terminate vector 000024 h1a1 set 20 hsla 1 subch 1 active terminate vector 000025 h1a17 set 21 hsla 1 subch 17 active terminate vector 000026 h1c1 set 22 hsla 1 subch 1 config terminate vector 000027 h1c17 set 23 hsla 1 subch 17 config terminate vector 000044 h1a2 set 36 hsla 1 subch 2 active terminate vector 000045 h1a18 set 37 hsla 1 subch 18 active terminate vector 000046 h1c2 set 38 hsla 1 subch 2 config terminate vector 000047 h1c18 set 39 hsla 1 subch 18 config terminate vector 000064 h1a3 set 52 hsla 1 subch 3 active terminate vector 000065 h1a19 set 53 hsla 1 subch 19 active terminate vector 000066 h1c3 set 54 hsla 1 subch 3 config terminate vector 000067 h1c19 set 55 hsla 1 subch 19 config terminate vector 000104 h1a4 set 68 hsla 1 subch 4 active terminate vector 000105 h1a20 set 69 hsla 1 subch 20 active terminate vector 000106 h1c4 set 70 hsla 1 subch 4 config terminate vector 000107 h1c20 set 71 hsla 1 subch 20 config terminate vector 000124 h1a5 set 84 hsla 1 subch 5 active terminate vector 000125 h1a21 set 85 hsla 1 subch 21 active terminate vector 000126 h1c5 set 86 hsla 1 subch 5 config terminate vector 000127 h1c21 set 87 hsla 1 subch 21 config terminate vector assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 9 datanet configuration description 000144 h1a6 set 100 hsla 1 subch 6 active terminate vector 000145 h1a22 set 101 hsla 1 subch 22 active terminate vector 000146 h1c6 set 102 hsla 1 subch 6 config terminate vector 000147 h1c22 set 103 hsla 1 subch 22 config terminate vector 000164 h1a7 set 116 hsla 1 subch 7 active terminate vector 000165 h1a23 set 117 hsla 1 subch 23 active terminate vector 000166 h1c7 set 118 hsla 1 subch 7 config terminate vector 000167 h1c23 set 119 hsla 1 subch 23 config terminate vector 000204 h1a8 set 132 hsla 1 subch 8 active terminate vector 000205 h1a24 set 133 hsla 1 subch 24 active terminate vector 000206 h1c8 set 134 hsla 1 subch 8 config terminate vector 000207 h1c24 set 135 hsla 1 subch 24 config terminate vector 000224 h1a9 set 148 hsla 1 subch 9 active terminate vector 000225 h1a25 set 149 hsla 1 subch 25 active terminate vector 000226 h1c9 set 150 hsla 1 subch 9 config terminate vector 000227 h1c25 set 151 hsla 1 subch 25 config terminate vector 000244 h1a10 set 164 hsla 1 subch 10 active terminate vector 000245 h1a26 set 165 hsla 1 subch 26 active terminate vector 000246 h1c10 set 166 hsla 1 subch 10 config terminate vector 000247 h1c26 set 167 hsla 1 subch 26 config terminate vector 000264 h1a11 set 180 hsla 1 subch 11 active terminate vector 000265 h1a27 set 181 hsla 1 subch 27 active terminate vector 000266 h1c11 set 182 hsla 1 subch 11 config terminate vector 000267 h1c27 set 183 hsla 1 subch 27 config terminate vector 000304 h1a12 set 196 hsla 1 subch 12 active terminate vector 000305 h1a28 set 197 hsla 1 subch 28 active terminate vector assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 10 datanet configuration description 000306 h1c12 set 198 hsla 1 subch 12 config terminate vector 000307 h1c28 set 199 hsla 1 subch 28 config terminate vector 000324 h1a13 set 212 hsla 1 subch 13 active terminate vector 000325 h1a29 set 213 hsla 1 subch 29 active terminate vector 000326 h1c13 set 214 hsla 1 subch 13 config terminate vector 000327 h1c29 set 215 hsla 1 subch 29 config terminate vector 000344 h1a14 set 228 hsla 1 subch 14 active terminate vector 000345 h1a30 set 229 hsla 1 subch 30 active terminate vector 000346 h1c14 set 230 hsla 1 subch 14 config terminate vector 000347 h1c30 set 231 hsla 1 subch 30 config terminate vector 000364 h1a15 set 244 hsla 1 subch 15 active terminate vector 000365 h1a31 set 245 hsla 1 subch 31 active terminate vector 000366 h1c15 set 246 hsla 1 subch 15 config terminate vector 000367 h1c31 set 247 hsla 1 subch 31 config terminate vector 000220 l1ft set 144 lsla 1 fault 000221 l1a set 145 lsla 1 active terminate vector 000222 l1c set 146 lsla 1 configuration terminate vector 000240 l2ft set 160 lsla 2 fault 000241 l2a set 161 lsla 2 active terminate vector 000242 l2c set 162 lsla 2 configuration terminate vector 000260 l3ft set 176 lsla 3 fault 000261 l3a set 177 lsla 3 active terminate vector 000262 l3c set 178 lsla 3 configuration terminate vector 000300 l4ft set 192 lsla 4 fault 000301 l4a set 193 lsla 4 active terminate vector assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 11 datanet configuration description 000302 l4c set 194 lsla 4 configuration terminate vector 000320 l5ft set 208 lsla 5 fault 000321 l5a set 209 lsla 5 active terminate vector 000322 l5c set 210 lsla 5 configuration terminate vector 000340 l6ft set 224 lsla 6 fault 000341 l6a set 225 lsla 6 active terminate vector 000342 l6c set 226 lsla 6 configuration terminate vector 000360 tmft set 240 timer channel fault 000361 tmro set 241 interval timer runout 000362 etr set 242 elapsed timer roll-over assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 12 datanet configuration description *************************** * program interrupt cells * *************************** 000400 ilev0 set 256 level 0 (common peripheral fault) 000401 ilev1 set 257 level 1 (common peripheral req/attn) 000402 ilev2 set 258 level 2 (common peripheral terminate) 000403 ilev3 set 259 level 3 (dia special) 000404 ilev4 set 260 level 4 (hsla 1 subch 0-15 active) 000405 ilev5 set 261 level 5 (hsla 1 subch 16-31 active) 000406 ilev6 set 262 level 6 (hsla 1 subch 0-15 config) 000407 ilev7 set 263 level 7 (hsla 1 subch 16-31 config) 000410 ilev8 set 264 level 8 (hsla 2 subch 0-15 active) 000411 ilev9 set 265 level 9 (hsla 2 subch 16-31 active) 000412 ilev10 set 266 level 10 (hsla 2 subch 0-15 config) 000413 ilev11 set 267 level 11 (hsla 2 subch 16-31 config) 000414 ilev12 set 268 level 12 (hsla 3 subch 0-15 active) 000415 ilev13 set 269 level 13 (hsla 3 subch 16-31 active) 000416 ilev14 set 270 level 14 (hsla 3 subch 0-15 config) 000417 ilev15 set 271 level 15 (hsla 3 subch 16-31 config) ******************** * iom fault status * ******************** 000420 tyfts set 272 typewriter fault status word 000422 lpfts set 274 line printer fault status word 000424 difts set 276 dia fault status word 000426 h1fts set 278 hsla 1 fault status word 000427 h2fts set 279 hsla 2 fault status word assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 13 datanet configuration description 000430 h3fts set 280 hsla 3 fault status word 000431 l1fts set 281 lsla 1 fault status word 000432 l2fts set 282 lsla 2 fault status word 000433 l3fts set 283 lsla 3 fault status word 000434 l4fts set 284 lsla 4 fault status word 000435 l5fts set 285 lsla 5 fault status word 000436 l6fts set 286 lsla 6 fault status word 000437 tmfts set 287 timer fault status word *************************** * processor fault vectors * *************************** 000440 suflt set 288 startup fault 000441 sdflt set 289 shutdown fault 000442 parflt set 290 memory parity fault 000443 iopflt set 291 illegal operation fault 000444 ovflt set 292 overflow fault 000445 memflt set 293 illegal memory operation fault 000446 dvflt set 294 divide check fault 000447 ipiflt set 295 illegal program interrupt fault assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 14 datanet configuration description ************************************ * iom mailbox communication region * ************************************ 000450 itmb set 296 interval timer mailbox 000451 etmb set 297 elapsed timer mailbox 000454 dimb set 300 dia pcw mailbox 000456 dist set 302 dia status icw mailbox 000460 tyst set 304 typewriter status icw mailbox 000462 tyicw set 306 typewriter data icw mailbox 000470 lpst set 312 line printer status icw mailbox 000472 lpicw set 314 line printer data icw mailbox 000475 cptp set 317 cpu page table pointer 000476 yelcnt set 318 memory yellow counter (edac corected erro 000500 l1mb set 320 lsla 1 mailbox base address 000520 l2mb set 336 lsla 2 mailbox base address 000540 l3mb set 352 lsla 3 mailbox base address 000560 l4mb set 368 lsla 4 mailbox base address 000600 l5mb set 384 lsla 5 mailbox base address 000620 l6mb set 400 lsla 6 mailbox base address 001000 h1mb set 512 hsla 1 mailbox base address 002000 h2mb set 1024 hsla 2 mailbox base address 003000 h3mb set 1536 hsla 3 mailbox base address 002000 .end. set 1024 end of iom mailbox communication region 00000 73 tib assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 15 terminal information block (tib) 000000 t.stat equ 0 holds current line status 000001 t.flg equ t.stat+1 flag word 000002 t.flg2 equ t.flg+1 second word of flags 000003 t.cur equ t.flg2+1 current address in control table 000004 t.line equ t.cur+1 10 bit line number 000005 t.icp equ t.line+1 first buffer in input chain 000006 t.ilst equ t.icp+1 last buffer in input chain 000007 t.icpl equ t.ilst+1 count of buffers in icp chain 000010 t.icch equ t.icpl+1 address of next input character 000011 t.elnk equ t.icch+1 link to tib extension 000011 t.rcp equ t.elnk replay chain pointer (share t.elnk) 000012 t.ocp equ t.elnk+1 addr of output chain from cs 000013 t.ocur equ t.ocp+1 addr of current output buffer 000014 t.olst equ t.ocur+1 addr of last buffer in output chain 000015 t.occh equ t.olst+1 addr of next output character 000016 t.ocnt equ t.occh+1 count of buffers in t.ocur 000017 t.type equ t.ocnt+1 line type 000020 t.time equ t.type+1 time at which next timeout will occur 000022 t.reta equ t.time+2 return address from calsub 000023 t.dcwa equ t.reta+1 addr of dcw list to 'execute' 000024 t.dcwl equ t.dcwa+1 length of dcw list 000025 t.echo equ t.dcwl+1 echo buffer address 000026 t.dcp equ t.echo+1 addr of message chain for cs 000027 t.dlst equ t.dcp+1 last buffer in messge chain for cs 000030 t.ftse equ t.dlst+1 first time slot entry in lsla table assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 16 terminal information block (tib) 000030 t.sfcm equ t.ftse pointer to sfcm for hsla lines 000031 t.bcnt equ t.ftse+1 counting temporary 000032 t.brkp equ t.bcnt+1 pointer to current break list 000033 t.pos equ t.brkp+1 current carriage position 000034 t.char equ t.pos+1 pending line control char (lsla only) 000034 t.ecch equ t.char address of current echo char (hsla only) 000035 t.cntr equ t.char+1 counter for control tables 000036 t.flg3 equ t.cntr+1 third word of flags 000037 t.dtp equ t.flg3+1 pointer to delay table for this line 000040 t.frmc equ t.dtp+1 framing chars (2 chars) 000041 t.dcpl equ t.frmc+1 number of buffers in dcp chain 000042 t.scll equ t.dcpl+1 screenline length left, for echo neg. 000043 t.sncc equ t.scll+1 echo negotiation sync ctr. 000044 t.entp equ t.sncc+1 echo negotiation break table ptr 000045 t.ifch equ t.entp+1 input flow control characters 000046 t.ofch equ t.ifch+1 output flow control characters 000047 t.omct equ t.ofch+1 output message count (for flow control) 000050 t.itim equ t.omct+1 time of last call to inproc (2 words) 000052 t.metr equ t.itim+2 address of metering area 000053 t.abf0 equ t.metr+1 absolute address of first permanent buffe 000054 t.abf1 equ t.abf0+1 absolute address of first permanent buffe 000055 t.leng equ t.abf1+1 length of a tib ******************************** * t.stat bits ******************************** 000001 tsfcd bool 000001 carrier detect assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 17 terminal information block (tib) 000002 tsfcts bool 000002 clear to send 000004 tsfdsr bool 000004 data set ready 000010 tsfsrc bool 000010 supervisory receive 000020 tsfst bool 000020 store status 000040 tsfmrk bool 000040 send marker status 000100 tsftrm bool 000100 send terminate status 000200 tsfrcv bool 000200 receive mode 000400 tsfxmt bool 000400 transmit mode 001000 tsfbrk bool 001000 send line break 002000 tsfdtr bool 002000 data terminal ready 004000 tsfsxt bool 004000 supervisory transmit 004000 tsftre bool 004000 tally runout enable (hdlc) 010000 tsfrts bool 010000 request to send 020000 tsfcrq bool 020000 acu call request ******************************** * tib flags -- t.flg ******************************** 000001 tfwrit bool 000001 output chain present 000002 tfbel bool 000002 send bell as next echoed character 000004 tffdpx bool 000004 full duplex mode 000010 tfkybd bool 000010 keyboard addressed 000020 tfprtr bool 000020 printer addressed 000040 tfhang bool 000040 hangup this line 000100 tflisn bool 000100 answer the phone 000200 tfquit bool 000200 send nl on line break 000400 tfctrl bool 000400 do kybd/printer addressing assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 18 terminal information block (tib) 001000 tflfec bool 001000 do lf echo on cr 002000 tfcrec bool 002000 do cr echo on lf 004000 tftbec bool 004000 do space echo on tab 010000 tfwabt bool 010000 do write abort 020000 tfauto bool 020000 this is hsla autobaud line 040000 tfeotx bool 040000 eot expected from 2741 100000 tfisus bool 100000 input suspended 200000 tfecpx bool 200000 echoplex mode 400000 tfosus bool 400000 output suspended ******************************** * second word of tib flags ******************************** 000001 tfxhld bool 000001 hold transmit on 000002 tfdild bool 000002 terminal is dialed up 000004 tfercv bool 000004 enter receive mode 000010 tfrabt bool 000010 do read abort 000020 tfacu bool 000020 do dial out 000040 tfifc bool 000040 input flow control mode 000100 tfofc bool 000100 output flow control mode 000200 tfupsf bool 000200 terminal is upshifted now 000400 tfrply bool 000400 replay mode 001000 tfrpon bool 001000 replay is occurring now 002000 tfplit bool 002000 polite mode 004000 tfblak bool 004000 asynchronous block acknowledgement 010000 tfcrcv bool 010000 'control' receive mode 020000 tfmrcv bool 020000 'message' receive mode assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 19 terminal information block (tib) 040000 tffrmi bool 040000 frame mode 100000 tffip bool 100000 frame in progress 200000 tfsftr bool 200000 terminal is shifting device 400000 tfpfnl bool 400000 line is in prefixnl mode ********************************* * third word of tib flags ********************************* 000001 tfbkpt bool 000001 line is stopped at breakpoint 000002 tfitim bool 000002 timeout if input stops 000004 tfkpar bool 000004 keep parity bits 000010 tfecho bool 000010 echoing has priority over output (lsla) 000020 tfbral bool 000020 break on all characters 000040 tfsked bool 000040 input timeout routine scheduled 000100 tf8in bool 000100 don't strip input parity 000200 tf8out bool 000200 don't strip output parity 000400 tfoddp bool 000400 odd parity 001000 tfabf0 bool 001000 t.afb0 available 002000 tfsoip bool 002000 suspension of output in progress 004000 tforp bool 004000 output resume pending (waiting until tro) 010000 tfabf1 bool 010000 t.abf1 available 020000 tfmask bool 020000 channel has been masked for excessive int ********************************* * redefined tib flags in t.flg ********************************* 000020 tfdlup equ tfprtr line is on dialup modem 00000 74 hwcm assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 20 hardware comm. region (hwcm) 000000 h.ric0 equ 0 primary receive icw 000002 h.ric1 equ 2 alternate receive icw 000004 h.sic0 equ 4 primary send icw 000006 h.sic1 equ 6 alternate send icw 000010 h.baw equ 8 base address word 000011 h.sfcm equ 9 software comm. region address 000012 h.mask equ 10 mask register 000014 h.aicw equ 12 active status icw 000016 h.cnfg equ 14 configuration status 00000 75 comreg assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 21 system communications region ********************************** * system communication region * ********************************** 000640 .crldt set 416 date and time of binding 000644 .crbdt set 420 date and time of bootloading 000650 .crbuf set 424 starting address of buffer area 000651 .crmem set 425 last location of memory 000652 .crnbf set 426 number of buffers available 000653 .criom set 427 start of iom table 000654 .crnhs set 428 number of hsla's configured 000655 .crnls set 429 number of lsla's configured 000656 .crcon set 430 console enabled flag 000657 .crmod set 431 starting address of module chain 000660 .crnxa set 432 ptr to next avaliable buffer 000661 .crtra set 433 trace entry enable mask 000662 .crtrb set 434 base address of trace table 000663 .crtrc set 435 next available location in trace table 000664 .crreg set 436 disaster fault register storage location 000665 .crttb set 437 location of tib table 000666 .crtte set 438 location of end of tib table 000667 .crdly set 439 head of delay table chain 000670 .crver set 440 mcs version number, 4 chars 000672 .crbrk set 442 addr of breakpoint control table 000673 .crtsw set 443 if non-zero, tracing will cease 000674 .crnxs set 444 next free small block 000675 .crnbs set 445 number of buffers devoted to small space 000676 .crcct set 446 address of first cct descriptor assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 22 system communications region 000677 .crskd set 447 address of scheduler data block 000700 .cretb set 448 list of echo-negotiation bit tables 000701 .crcpt set 449 address of cpu page table 000702 .crpte set 450 address of variable cpu page table entry 000703 .crtsz set 451 size of trace data buffer 000704 .crmet set 452 non-zero if metering enabled 000705 .crtdt set 453 address of tib for t&d executive channel 000706 .crbtm set 454 address of time meters for getbuf/frebuf 000707 .crnxe set 455 next available space in extended memory 000710 .crbpe set 456 buffer paging window table entry 000760 .crcpr set 496 copyright notice assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 23 symbol definitions 78 dsptab symbol definitions 79 000000 80 crtwd equ 0 control word 000001 81 prent equ 1 primary entry point 000002 82 scent equ 2 secondary entry point 000003 83 rqcnt equ 3 request count 84 85 where the control word has the following 86 format: 87 88 bit - 0 ** request bit 89 1 ** execution bit 90 2 ** secondary entry pt. present 91 3-17 ** suppression bits 92 93 94 dattab symbol definitions 95 000000 96 stadd equ 0 starting add. for list of data 000001 97 entcnt equ 1 entry count 000002 98 excnt equ 2 exit count 000003 99 msk equ 3 count mask 100 101 102 dispatcher queuer symbol definitions 103 000000 104 dqlink equ 0 link word 000001 105 dqrtn equ 1 routine address 000002 106 dqx1 equ 2 x1 - passed to routine when run 000003 107 dqpri equ 3 priority 108 000012 109 nmqlk equ 10 number of permanent queue links 000024 110 nmdqlk equ 20 number of permanent delay queue links 111 112 assigned locations in interrupt saver blocks 113 000000 114 intx1 equ 0 x1 000001 115 intx2 equ 1 x2 000002 116 intx3 equ 2 x3 000003 117 inta equ 3 a reg. 000004 118 intq equ 4 q reg. 000005 119 intir equ 5 indicator reg. 000006 120 intic equ 6 ic at interrupt 000007 121 intptw equ 7 cpu ptw at interrupt 000010 122 intbpw equ 8 buffering ptw at interrupt 123 124 125 miscellaneous 126 000040 127 bufsiz equ 32 000010 128 dqlpb equ bufsiz/4 dispatcher links/buffer assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 24 symbol definitions 129 000005 130 modtmr equ 5 131 132 control word symbol definitions 133 400000 134 rqstbt bool 400000 request bit 200000 135 exctbt bool 200000 execute bit 100000 136 scdent bool 100000 secondary entry present 077777 137 suprmk bool /rqstbt*/exctbt*/scdent suppress 138 139 mask bits for jump table data 140 740000 141 iocmk bool 740000 mask for ioc# 030000 142 clmmk bool 30000 mask for clm# 007600 143 clmsmk bool 7600 mask for clmsc# 000077 144 modmk bool 77 mask for mod# 145 146 dispatcher priority definitions 147 000007 148 intpri bool 7 priority of interpreter 000004 149 itpri bool 4 interval timer priority 150 00000 151 base 8 temporary for debugging assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 25 trace types and switches 153 000001 154 tt.int equ 1 trace interrupts 000002 155 tt.idl equ 2 trace idle time 000003 156 tt.run equ 3 trace running of interrupt rtn 000004 157 tt.rst equ 4 trace restart of interrupted routine 000005 158 tt.rnq equ 5 trace running of queued routine 000006 159 tt.set equ 6 trace set timer calls 000007 160 tt.itr equ 7 trace interval timer runouts 000010 161 tt.que equ 8 trace dspqur entries 162 163 000002 164 ts.int bool 000002 000004 165 ts.skd bool 000004 000010 166 ts.tim bool 000010 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 26 various scheduler macros 168 169 mpy macro (multiplier location-*) 170 mpf #1 171 lrl 1 172 endm mpy 173 174 175 dvd macro (divisor location-*) 176 qls 1 177 dvf #1 178 endm dvd 179 180 181 dspm macro 182 oct 0 183 zero #1 184 oct 0,0 185 endm 186 187 188 chkivs macro 189 tsy 2,* 190 tra 2 191 ind chkiv 192 endm chkivs 193 194 195 datm macro 196 pcc save,off 197 pmc save,off 198 offset set 0 199 count set 0 200 pmc restore 201 dattab null 202 idrp #1 203 zero data+offset 204 dec 0,0,#1 205 pmc save,off 206 offset set offset+#1 207 count set count+1 208 pmc restore 209 idrp 210 odd 211 savtab bss 10*count 212 rem 213 data bss offset 214 pcc restore 215 endm assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 27 various scheduler macros 217 cmpaq macro 218 crsm off 219 ife '#2','',2 220 cmpa #1 221 ife 1,2,1 222 cmpa #1,#2 223 tnz 2 224 ife '#2','',2 225 cmpq #1+1 226 ife 1,2,1 227 cmpq #1+1,#2 228 crsm on 229 endm cmpaq 230 231 232 tblk macro (number of blocks to create) 233 tcnt set #1-1 234 dup 2,tcnt 235 zero *+2 236 oct 0 237 oct 0,0 238 endm tblk 239 240 241 dlyblk macro (number of blocks to create) 242 dcnt set #1-1 243 dup 4,dcnt 244 zero *+6 245 oct 0 246 oct 0,0 247 oct 0,0 248 oct 0,0 249 oct 0,0 250 oct 0,0 251 endm dlyblk assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 28 links macro 253 254 this macro is used to generate linked buffers. 255 the calling sequence is 256 257 links n,l 258 259 n is the number of buffers to generate 260 l is the length of each buffer 261 the first word of each buffer points to the 262 first word of the next buffer. the last 263 buffer has a pointer of zero 264 265 links macro 266 pmc save,off 267 dup 2,#1-1 268 zero *+#2 269 bss #2-1 270 zero 0 271 bss #2-1 272 pmc restore 273 endm links assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 29 common area for invp, savreg and mdisp 275 00000 276 sked null 277 00000 278 even 00000 000000 0 279 indreg oct indicator register save-store 00001 000000 0 280 icreg oct ic of the interrupt 00002 000000 0 281 modsv oct temporary save locations 00003 000000 0 282 dtsv oct x 00004 000000 0 283 asv oct x 00005 000000 0 284 qsv oct x 00006 000000 0 285 x1sv oct x 00007 000000 0 286 zerow oct a zero word (always) 00010 400000 0 287 reqbt vfd 18/rqstbt request bit 00011 200000 0 288 excmsk vfd 18/exctbt execute bit 00012 100000 0 289 secmsk vfd 18/scdent secondary entry present 00013 077777 0 290 supmsk vfd 18/suprmk suppression mask 00014 000000 0 291 dstnum oct number of interrupted module 292 00015 0 00276 1 293 dspta zero dsptab address of dsptab 00016 0 00337 1 294 datta zero dattab " " dattab 00017 0 00377 1 295 savra zero savtab address of savtab(must start on odd loc.) 00020 1 00276 1 296 dspi ind dsptab,1 indirect word for dsptab 297 298 at end of dsptab insert: 299 dspsz zero *-dsptab 300 301 00021 302 start sked,1 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 30 interrupt vector processor 304 305 *********************************************************** 306 * 307 * invp 308 * 309 * input 310 * address of third word of jump table 311 * stored in invp. 312 * 313 * format of jump table: 314 * 315 * 1 - zero (ic at interrupt) 316 * 2 - tsy invp-* 317 * 3 - ioc#, clm#, clmsc#, mod# 318 * 319 * bit # 4 , 2 , 5 , 7 320 * 321 *********************************************************** 00034 0 00000 0 322 invp zero add. of third word of jump table 00035 0 54 743 0 323 sti indreg-* save indicator register 00036 3331 00 0 324 inh inhibit on 00037 0 14 745 4 325 staq asv-* temp. save a register 00040 0 53 746 6 326 stx1 x1sv-* and x1 register 327 328 * chkivs 329 00041 0 43 773 34 330 ldx1 invp-* 00042 1 07 000 0 331 lda 0,1 have ioc#,clmx#,clmsc#,mod# 00043 0 17 740 3 332 sta dtsv-* save for later 00044 1 43 776 0 333 ldx1 -2,1 have ic at interrupt 00045 0 53 734 1 334 stx1 icreg-* save it 335 00046 022 077 0 336 iana modmk mask out all but mod# end of binary card 00000005 00047 773 777 0 337 iaa -1 subtract 1 from mod# 00050 0336 02 0 338 als 2 mult. mod# by 4 00051 0 17 731 2 339 sta modsv-* save it 340 00052 0 06 743 15 341 ada dspta-* find right place in dsptab 00053 4332 00 0 342 cax1 have dsptab add. + 4 x mod# 343 00054 0 07 734 10 344 lda reqbt-* 00055 1 72 000 0 345 orsa crtwd,1 set request bit on for this mod 00056 1 76 003 0 346 aos rqcnt,1 add 1 to request count 347 00057 0 43 737 16 348 ldx1 datta-* 00060 0 42 722 2 349 adcx1 modsv-* have dattab add. + 4 x mod# 00061 1 07 001 0 350 lda entcnt,1 entry count 00062 1 27 003 0 351 cmpa msk,1 compare to que size 00063 0 75 003 66 352 tmi invp5-* ok 353 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 31 interrupt vector processor 00064 1 56 001 0 354 stz entcnt,1 reset 00065 673 000 0 355 ila 0 this too 356 00066 1 06 000 0 357 invp5 ada stadd,1 address of list + entry count 00067 1 76 001 0 358 aos entcnt,1 add 1 to entry count 00070 4332 00 0 359 cax1 00071 0 07 712 3 360 lda dtsv-* get the saved data 00072 1 17 000 0 361 sta 0,1 store it 362 363 if requested, trace (1) the ic at the interrupt 364 and (2) the third word of the jump table. 365 00073 366 trace tt.int,ts.int,(icreg,dtsv) 367 368 m a s t e r s a v e r 369 00106 0 07 706 14 370 lda dstnum-* get mod# 00107 0 74 037 146 371 tze msdsp-* were in the dispatcher on the interrupt 372 00110 773 777 0 373 iaa -1 mod# is one more than position in dsptab 00111 374 mpy (l.a001-*) mult. mod# by 10 00113 7333 00 0 375 cqa 00114 4332 00 0 376 cax1 00115 0 42 702 17 377 adcx1 savra-* savtab + 10 x mod# end of binary card 00000006 00116 0 04 666 4 378 ldaq asv-* get original contents of aq 00117 1 13 001 0 379 stx2 intx2,1 store x2 00120 0 03 666 6 380 ldx2 x1sv-* get orig. contents of x1 00121 1 13 000 0 381 stx2 intx1,1 00122 1 50 002 0 382 stx3 intx3,1 00123 1 14 003 0 383 staq inta,1 00124 0 04 654 0 384 ldaq indreg-* get indicator and ic 00125 1 14 005 0 385 staq intir,1 store indicator and ic 00126 4 07 005 133 386 lda a.a001-*,* (.crpte,*) get current page table entry 00127 1 17 007 0 387 sta intptw,1 store page table entry 00130 4 07 004 134 388 lda a.a002-*,* (.crbpe,*) likewise buffer pte 00131 1 17 010 0 389 sta intbpw,1 390 00132 0 71 014 146 391 tra msdsp-* go to master dispatcher 392 393 00133 4 00702 0 394 a.a001 ind .crpte,* variable cpu page table entry 00134 4 00710 0 395 a.a002 ind .crbpe,* 396 00135 000012 0 397 l.a001 dec 10 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 32 m a s t e r d i s p a t c h e r 399 400 entry on completion of dispatched routine 401 00136 402 mdisp null 00136 3331 00 0 403 inh inhibit on 00137 0 07 655 14 404 lda dstnum-* get mod# 00140 773 777 0 405 iaa -1 subtract one 00141 0336 02 0 406 als 2 mult. by 4 00142 4332 00 0 407 cax1 00143 0 42 652 15 408 adcx1 dspta-* dsptab address + 4 x mod# 00144 0 07 645 11 409 lda excmsk-* execute mask 00145 1 62 000 0 410 ersa crtwd,1 turn off execute mask 411 412 normal entry point from master saver 413 00146 414 msdsp null 00146 0 56 646 14 415 stz dstnum-* set to 0 - are in master dispatcher 00147 7331 00 0 416 eni allow interrupts 417 * chkivs 00150 2331 00 0 418 nop 00151 2331 00 0 419 nop 420 00152 0 43 635 7 421 msds5 ldx1 zerow-* zero x1 422 00153 423 msrch null 00153 4 07 645 20 424 lda dspi-*,* examine dsptab (control words) 00154 0 74 007 163 425 tze nxmd-* nothing on at all 426 00155 0 31 634 11 427 cana excmsk-* was mod interrupted? 00156 0 64 047 225 428 tnz hvint-* yes 429 00157 0 31 634 13 430 cana supmsk-* is it suppressed? 00160 0 64 003 163 431 tnz nxmd-* yes - continue search 432 00161 0 31 627 10 433 cana reqbt-* is it requested? 00162 0 64 024 206 434 tnz hvreq-* yes 435 00163 173 004 0 436 nxmd iacx1 4 increment x1 by 4 00164 0 63 152 336 437 cmpx1 dspsz-* are we at the end of table ?? end of binary card 00000007 00165 0 64 766 153 438 tnz msrch-* no 439 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 33 idle routine 441 442 trace state at start of idle 443 00166 012 000 0 444 rier read interrupt enable registers 00167 0 17 016 205 445 sta tcrier-* save for use in trace 00170 0 54 014 204 446 sti tcint-* save indicators register 447 448 * trace tt.idl,ts.int,(tcint,tcrier) 449 00171 2331 00 0 450 nop 00172 2331 00 0 451 idlmrk nop 452 ********************************************************************** 453 * 454 * idle loop increments a counter continuously, which permits 455 * metering of idle time by comparing counter to value to its 456 * maximum value (which is established during initialization by 457 * running the idle loop for a second) 458 * 459 ********************************************************************** 460 00173 673 000 0 461 idloop ila 0 get a doubleword 1 00174 473 001 0 462 ilq 1 00175 3331 00 0 463 inh have to protect load/store sequence 00176 0 15 004 202 464 adaq idlcnt-* increment counter 00177 0 14 003 202 465 staq idlcnt-* 00200 7331 00 0 466 eni ok 00201 0 71 772 173 467 tra idloop-* go around again until interrupted 00202 468 idlend null so icmon can locate idle loop 469 00202 470 even 00202 471 idlcnt bss 2 00204 472 tcint bss 1 00205 473 tcrier bss 1 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 34 run the requested routine 475 00206 2332 00 0 476 hvreq cx1a get the dsptab offset 00207 0337 02 0 477 ars 2 divide by 4 00210 773 001 0 478 iaa 1 increment by 1 479 00211 3331 00 0 480 inh inhibit 00212 0 17 602 14 481 sta dstnum-* set dstnum to mod# (1,2,3,,,) 00213 0 42 602 15 482 adcx1 dspta-* address of dsptab + c(x1) 00214 673 777 0 483 ila -1 00215 1 16 003 0 484 asa rqcnt,1 subtract 1 from rqcnt 00216 0 64 003 221 485 tnz hv1-* did request count go to zero? 486 00217 0 07 571 10 487 lda reqbt-* yes -- set request bit to 0 00220 1 62 000 0 488 ersa crtwd,1 489 00221 0 07 570 11 490 hv1 lda excmsk-* set execute bit 00222 1 72 000 0 491 orsa crtwd,1 492 493 * chkivs 494 495 * trace tt.run,ts.int,(prent(1)) 496 00223 0 44 564 7 497 ldi zerow-* initialize the indicator register 00224 5 71 001 0 498 tra prent,1* go to routine assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 35 return to interrupted module 500 501 module was interrupted: restore registers and 502 transfer to point of interrupt or secondary 503 entry point if present. 504 00225 0 53 561 6 505 hvint stx1 x1sv-* save for awhile 00226 0 56 047 275 506 stz hvsec-* initialize 00227 0 31 563 12 507 cana secmsk-* is there a secondary entry point? 00230 0 74 004 234 508 tze noscp-* no 509 00231 0 76 044 275 510 aos hvsec-* have a secondary entry 00232 0 42 563 15 511 adcx1 dspta-* have desired 4 word block in dsptab 00233 1 03 002 0 512 ldx2 scent,1 get secondary entry point 513 00234 0 07 552 6 514 noscp lda x1sv-* get the dsptab offset again 00235 0337 02 0 515 ars 2 divide by 4 to module offset 00236 516 mpy (l.a001-*) multiply by 10 end of binary card 00000008 00240 7333 00 0 517 cqa 00241 4332 00 0 518 cax1 for use in accessing savtab 00242 0 42 555 17 519 adcx1 savra-* desired block in savtab 00243 0 07 543 6 520 lda x1sv-* recover dsptab offset once more 00244 0337 02 0 521 ars 2 convert to module offset 00245 773 001 0 522 iaa 1 add 1, have mod# (1,2,3...) 523 00246 0 20 027 275 524 szn hvsec-* did we find secondary entry? 00247 0 74 005 254 525 tze ictr-* no 526 00250 1 41 006 0 527 ldx3 intic,1 yes - get ic at interrupt 00251 2 50 000 0 528 stx3 0,2 store as first word of secondary routine 00252 273 001 0 529 iacx2 1 00253 0 71 002 255 530 tra ictr5-* 531 00254 1 03 006 0 532 ictr ldx2 intic,1 ic at interrupt 533 00255 0 13 524 1 534 ictr5 stx2 icreg-* store for transfer 00256 0332 00 0 535 cax2 mod# in x2 536 537 * trace tt.rst,tt.int,(icreg) 538 00257 1 41 002 0 539 ldx3 intx3,1 restore registers -- x3 00260 1 07 005 0 540 lda intir,1 get indicator register 00261 0 17 517 0 541 sta indreg-* save 00262 1 07 007 0 542 lda intptw,1 restore page table word 00263 4 17 650 133 543 sta a.a001-*,* (.crpte,*) 00264 1 07 010 0 544 lda intbpw,1 and buffer page table word 00265 4 17 647 134 545 sta a.a002-*,* (.crbpe,*) 546 00266 1 04 003 0 547 ldaq inta,1 restore a and q reg. 00267 3331 00 0 548 inh 00270 0 13 524 14 549 stx2 dstnum-* set dstnum to mod# assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 36 return to interrupted module 00271 1 03 001 0 550 ldx2 intx2,1 restore x2 00272 1 43 000 0 551 ldx1 intx1,1 and x1 552 553 00273 0 44 505 0 554 ldi indreg-* load indicator reg. 00274 4 71 505 1 555 tra icreg-*,* restart the interrupted routine 556 557 00275 558 hvsec bss 1 indicates whether we have secondary entry assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 37 master dispatcher tables 560 00276 562 even 00276 563 dsptab null 00276 564 dspm lip lsla_man, module 1 00276 000000 0 oct 0 00277 0 01000 3 zero lip 00300 000000 0 oct 0,0 00301 000000 0 00302 565 dspm dterm dia_man terminate, module 2 00302 000000 0 oct 0 00303 0 05000 3 zero dterm end of binary card 00000009 00304 000000 0 oct 0,0 00305 000000 0 00306 566 dspm dmail dia_man special, module 3 00306 000000 0 oct 0 00307 0 04000 3 zero dmail 00310 000000 0 oct 0,0 00311 000000 0 00312 567 dspm hintr hsla_man, module 4 00312 000000 0 oct 0 00313 0 06000 3 zero hintr 00314 000000 0 oct 0,0 00315 000000 0 00316 568 dspm itrout timer_manager, module 5 00316 000000 0 oct 0 00317 0 02235 1 zero itrout 00320 000000 0 oct 0,0 00321 000000 0 00322 569 dspm consol console_man, module 6 00322 000000 0 oct 0 00323 0 11000 3 zero consol 00324 000000 0 oct 0,0 00325 000000 0 00326 570 dspm tdip colts (t&d), module 7 00326 000000 0 oct 0 00327 0 02000 3 zero tdip 00330 000000 0 oct 0,0 00331 000000 0 00332 100000 0 571 scdspa vfd 18/scdent 00333 0 01452 1 572 zero secdsp 00334 0 01514 1 573 zero intsv 00335 000000 0 574 oct 0 575 00336 0 00040 0 576 dspsz zero *-dsptab assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 38 master dispatcher tables 00337 578 datm (8,2,8,8,2,3,2,1) pcc save,off 00337 dattab null 00337 0 00517 1 zero data+offset 00340 000000 0 dec 0,0,8 00341 000000 0 00342 000010 0 00343 0 00527 1 zero data+offset 00344 000000 0 dec 0,0,2 00345 000000 0 00346 000002 0 00347 0 00531 1 zero data+offset 00350 000000 0 dec 0,0,8 00351 000000 0 00352 000010 0 end of binary card 00000010 00353 0 00541 1 zero data+offset 00354 000000 0 dec 0,0,8 00355 000000 0 00356 000010 0 00357 0 00551 1 zero data+offset 00360 000000 0 dec 0,0,2 00361 000000 0 00362 000002 0 00363 0 00553 1 zero data+offset 00364 000000 0 dec 0,0,3 00365 000000 0 00366 000003 0 00367 0 00556 1 zero data+offset 00370 000000 0 dec 0,0,2 00371 000000 0 00372 000002 0 00373 0 00560 1 zero data+offset 00374 000000 0 dec 0,0,1 00375 000000 0 00376 000001 0 00377 odd 00377 savtab bss 10*count 00517 data bss offset pcc restore 00561 580 odd 00561 581 grph bss 10 00573 582 grpm bss 10 00605 583 grpl bss 10 584 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 39 retrieve jump table data 586 587 ******************************************************* 588 * 589 * g3wjt 590 * load q register with saved third word 591 * of jump table and set up registers 592 * x2 and x3 as shown: 593 * 594 * x2 - software communication region 595 * x3 - hardware communication region 596 * 597 * calling sequence - 598 * 599 * tsy g3wjt-* 600 * return 601 * 602 ********************************************************* 603 00617 604 g3wjt subr g3w,(inh) 605 00626 4 07 025 653 606 lda a.c001-*,* (=dstnum) get mod number of him 00627 773 777 0 607 iaa -1 subtract one 00630 0336 02 0 608 als 2 mult. by 4 00631 0 06 023 654 609 ada a.c002-* (=dattab) have respective 4 word block 00632 4332 00 0 610 cax1 in dattab 611 00633 1 03 002 0 612 ldx2 excnt,1 exit count 00634 1 23 003 0 613 cmpx2 msk,1 compare to length of que 00635 0 64 003 640 614 tnz g3wjt5-* ok 615 00636 1 56 002 0 616 stz excnt,1 reset it end of binary card 00000011 00637 1 03 002 0 617 ldx2 excnt,1 zero x2 also 618 00640 1 02 000 0 619 g3wjt5 adcx2 stadd,1 address of list + exit count 00641 1 76 002 0 620 aos excnt,1 increment exit count 00642 2 47 000 0 621 ldq 0,2 data (ioc#,clm#,clmsc#,mod#) 00643 7333 00 0 622 cqa 00644 0 34 006 652 623 ana l.c001-* (=037600) mask out clm# and clmsc# 00645 0337 03 0 624 ars 3 convert to relative address 00646 4333 00 0 625 cax3 x3 - hardware communication region 00647 3 03 011 0 626 ldx2 h.sfcm,3 x2 - software communication region 627 00650 628 return g3wjt return to caller 629 00652 037600 0 630 l.c001 oct 37600 mask for clm# and subchannel # 631 00653 0 00014 1 632 a.c001 zero dstnum pointer to interupted module number 00654 0 00337 1 633 a.c002 zero dattab pointer to dattab assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 40 dispatcher queuer 635 636 ******************************************************************** 637 * 638 * dspqur 639 * inputs 640 * ar -- time delay/priority 641 * qr -- routine name 642 * x1 -- passed to routine when run 643 * outputs 644 * none 645 * registers altered - a,q 646 * 647 ********************************************************************** 648 00655 649 dspqur subr qur,(a,q,x1,x2,x3,inh) 650 651 * trace tt.que,ts.skd,(qursa,qursq,x1) 652 00703 0 07 772 675 653 lda qursa-* 00704 0 47 772 676 654 ldq qursq-* restore a and q 00705 222 700 0 655 icana -64 (777700) entry for delayed queuer? 00706 0 64 120 1026 656 tnz delayq-* yes 657 00707 0 03 042 751 658 ldx2 lnkptr-* get link from available chain 00710 0 64 003 713 659 tnz dspq2-* unless chain is exhausted 00711 4 10 113 1024 660 tsy a.d010-*,* (=getqlk) get and format a new block end of binary card 00000012 00712 0 00746 1 661 ind lnkchn 662 00713 2 17 003 0 663 dspq2 sta dqpri,2 store priority into link 00714 2 57 001 0 664 stq dqrtn,2 store routine into link 00715 2 53 002 0 665 stx1 dqx1,2 store x1 into link 00716 2 47 000 0 666 ldq dqlink,2 detatch link from remainder of 00717 0 57 032 751 667 stq lnkptr-* availible chain 668 00720 0 47 102 1022 669 ldq a.d001-* (=dque) get address of pointer 00721 0 57 023 744 670 stq dtmp1-* to dispatcher queue chain 671 00722 0 41 023 745 672 ldx3 dque-* get start of chain 00723 0 64 003 726 673 tnz dspq6-* good chain, start search 674 00724 2 56 000 0 675 stz dqlink,2 make link end of chain 00725 0 71 007 734 676 tra dspq12-* 677 00726 3 27 003 0 678 dspq6 cmpa dqpri,3 search chain until lower priority 00727 0 45 004 733 679 tnc dspq10-* is found 00730 0 50 014 744 680 stx3 dtmp1-* not yet - save previous link 00731 3 41 000 0 681 ldx3 dqlink,3 get next 00732 0 64 774 726 682 tnz dspq6-* test for end of chain assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 41 dispatcher queuer 00733 2 50 000 0 684 dspq10 stx3 dqlink,2 put the foward pointer into new link 685 00734 4 13 010 744 686 dspq12 stx2 dtmp1-*,* make previous link point at new one 00735 0 03 066 1023 687 ldx2 a.d002-* get address of secondary disp. block 688 00736 0 07 067 1025 689 lda l.d001-* (=rqstbt) get request bit 00737 2 72 000 0 690 orsa crtwd,2 set request bit on for secondary disp. 00740 673 001 0 691 ila 1 00741 2 17 003 0 692 sta rqcnt,2 set request count to one 693 00742 694 dspq20 null 00742 695 return dspqur return to caller 696 00744 000000 0 697 dtmp1 oct 0 temp for workspace 698 00745 0 00000 0 699 dque zero 0 pointer to the dispatcher que chain 700 701 00746 0 00000 0 702 lnkchn ind 0 extra buffer chain 00747 0 00012 0 703 ind nmqlk number of permanent links 00750 0 00000 0 704 ind 0 number of calls on getqlk 00751 0 00752 1 705 lnkptr ind *+1 pointer to available link chain 00752 706 links nmqlk,4 generate permanent links end of binary card 00000013 707 01022 0 00745 1 708 a.d001 ind dque 01023 0 00332 1 709 a.d002 ind scdspa 01024 0 01353 1 710 a.d010 ind getqlk 711 01025 400000 0 712 l.d001 vfd 18/rqstbt assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 42 delayq -- time delay queuer routine 714 ************************************************************************ 715 * the function of this routine is identical to the normal queuer 716 * routine "dspqur" with the following single exception -- 717 * 718 * the routine to be queued will be queued only after 719 * the specified time interval has elapsed. 720 * 721 * the calling sequence is also identical to that of the normal queuer 722 * except that bits 0-11 of the accumulator are non-zero and represent 723 * the desired time delay before the routine is actually queued. 724 * 725 * inputs-- 726 * ar(00-11)= desired time delay, in seconds 727 * ar(12-17)= priority 728 * qr = routine address 729 * x1 = will be passed to routine when run 730 * 731 * outputs -- none 732 * 733 ************************************************************************ 734 01026 735 delayq null transfered to by dspqur 736 01026 073 077 0 737 sel tmch select timer channel 01027 4 60 316 1345 738 cioc a.e006-*,* (=mskpcw) mask the interval timer 739 01030 4 07 312 1342 740 lda a.e003-*,* (=itmb) get the timer value 01031 0 17 110 1141 741 sta dtimer+1-* save it 742 01032 4 04 311 1343 743 ldaq a.e004-*,* (=simclk) get the simulated clock 01033 0 24 105 1140 744 sbaq dtimer-* get the current time 01034 0 14 106 1142 745 staq curtim-* and save it away 746 01035 0 41 112 1147 747 ldx3 dfree-* get ptr to free chain 01036 0 64 002 1040 748 tnz 2 all ok 01037 749 die 1 no more delay queue buffers 750 01040 3 07 000 0 751 lda dfwd,3 get fwd ptr from first blk 01041 0 17 106 1147 752 sta dfree-* put into free ptr, taking blk 753 01042 0 07 633 675 754 lda qursa-* restore a reg 01043 022 077 0 755 iana 63 leave priority end of binary card 00000014 01044 3 17 005 0 756 sta dpri,3 put into block 01045 0 07 631 676 757 lda qursq-* get the routine addr 01046 3 17 001 0 758 sta drtn,3 save in block 01047 0 43 630 677 759 ldx1 qursx1-* get the value of x1 01050 3 53 004 0 760 stx1 dx1,3 save in block, also 01051 0 07 624 675 761 lda qursa-* get time value 01052 0337 06 0 762 ars 6 shift down 01053 763 mpy l.e002-* (=1000) in to milliseconds assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 43 delayq -- time delay queuer routine 01055 0 15 065 1142 764 adaq curtim-* add in current time 01056 3 14 002 0 765 staq dtime,3 and put into block 01057 0 14 065 1144 766 staq ntime-* save local copy 767 01060 0 50 261 1341 768 stx3 dnew-* save addr of new block 01061 0 07 263 1344 769 lda a.e005-* (=dnext) get addr of next ptr 01062 0 17 256 1340 770 sta dlasta-* save it also 771 01063 0 41 063 1146 772 ldx3 dnext-* get the next ptr, head of chain 01064 0 74 015 1101 773 tze dqr020-* no chain, start one 774 01065 0 04 057 1144 775 dqr010 ldaq ntime-* get the new time 01066 776 cmpaq dtime,3 is ntime < dtime? 01071 0 45 010 1101 777 tnc dqr020-* yes, chain in here 778 01072 0 50 246 1340 779 stx3 dlasta-* save addr of this block 01073 3 41 000 0 780 ldx3 dfwd,3 bump to next block 01074 0 64 771 1065 781 tnz dqr010-* loop for more 782 01075 0 41 244 1341 783 ldx3 dnew-* get ptr to new block 01076 4 50 242 1340 784 stx3 dlasta-*,* store into fwd of last block 01077 3 56 000 0 785 stz dfwd,3 zero fwd ptr, end of chain 01100 0 71 005 1105 786 tra dqr030-* all done 787 01101 3333 00 0 788 dqr020 cx3a save addr of current block 01102 0 41 237 1341 789 ldx3 dnew-* get addr of new block 01103 4 50 235 1340 790 stx3 dlasta-*,* put into last block fwd ptr 01104 3 17 000 0 791 sta dfwd,3 chain ahead to next block 792 01105 4 20 243 1350 793 dqr030 szn a.e009-*,* (=itrint) has interval timer run out? 01106 0 64 031 1137 794 tnz dqr060-* yes, all done, will be set later 795 01107 0 41 037 1146 796 ldx3 dnext-* get ptr to first block 01110 4 20 237 1347 797 szn a.e008-*,* (=runing) is the clock runing? 01111 0 74 006 1117 798 tze dqr032-* no, just start it 799 01112 4 04 231 1343 800 ldaq a.e004-*,* (=simclk) get the simclk 01113 801 cmpaq dtime,3 is simclk < dtime? end of binary card 00000015 01116 0 45 016 1134 802 tnc dqr050-* yes, go start clock 803 01117 3 04 002 0 804 dqr032 ldaq dtime,3 get the time in block 01120 0 24 022 1142 805 sbaq curtim-* subtract current time, leaving interval 01121 0 64 004 1125 806 tnz dqr035-* zero interval, bad 807 01122 673 000 0 808 ila 0 set to very small one 01123 473 001 0 809 ilq 1 like 1 or so 01124 0 71 005 1131 810 tra dqr040-* done 811 01125 773 000 0 812 dqr035 iaa 0 set the indicators 01126 0 74 003 1131 813 tze dqr040-* less than max, set clock assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 44 delayq -- time delay queuer routine 814 01127 673 001 0 815 ila 1 get the max value for clock 01130 473 000 0 816 ilq 0 into the aq 817 01131 4 57 211 1342 818 dqr040 stq a.e003-*,* (=itmb) set the interval timer 01132 0 15 010 1142 819 adaq curtim-* get the new simclk time 01133 4 14 210 1343 820 staq a.e004-*,* (=simclk) and save it 821 01134 073 077 0 822 dqr050 sel tmch select the timer channel 01135 4 60 211 1346 823 cioc a.e007-*,* (=runpcw) start the timer 01136 4 76 211 1347 824 aos a.e008-*,* (=runing) it is running now 825 01137 0 71 603 742 826 dqr060 tra dspq20-* restore registers and return 827 828 01140 829 even 01140 000000 0 830 dtimer oct 0,0 interval timer value 01141 000000 0 01142 000000 0 831 curtim oct 0,0 current time 01143 000000 0 01144 000000 0 832 ntime oct 0,0 new time for new block 01145 000000 0 833 01146 000000 0 834 dnext oct 0 ptr to chain of active blocks 01147 0 01150 1 835 dfree ind dlyque ptr to chain of free blocks 836 01150 837 dlyque dlyblk nmdqlk end of binary card 00000018 838 01340 000000 0 839 dlasta oct 0 01341 000000 0 840 dnew oct 0 841 842 01342 0 00450 0 843 a.e003 ind itmb 01343 0 02144 1 844 a.e004 ind simclk 01344 0 01146 1 845 a.e005 ind dnext 01345 0 02140 1 846 a.e006 ind mskpcw 01346 0 02142 1 847 a.e007 ind runpcw end of binary card 00000019 01347 0 02154 1 848 a.e008 ind runing 01350 0 02241 1 849 a.e009 ind itrint 01351 0 12000 3 850 a.e012 ind frelbf 851 01352 001750 0 852 l.e002 dec 1000 853 854 equates for a delay queue block 855 000000 856 dfwd equ 0 000001 857 drtn equ 1 000002 858 dtime equ 2 000004 859 dx1 equ 4 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 45 delayq -- time delay queuer routine 000005 860 dpri equ 5 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 46 emergency queue link routines 862 863 ************************************************************ 864 * the function of this subroutine is to fetch and format 865 * buffers needed by the normal queuer. the address of 866 * the first word of the new link chain is returned 867 * in x2 on exit. 868 ************************************************************ 869 01353 870 getqlk subr sub,(a,q) 871 01364 473 040 0 872 ilq bufsiz set size of buffer desired 01365 4 10 177 1564 873 tsy a.i004-*,* (=getbuf) get a buffer 01366 874 die 1 ** error - no more buffers ** 01367 4 03 764 1353 875 ldx2 getqlk-*,* get pointer to link control words 01370 2 76 002 0 876 aos 2,2 increment call count 01371 2 07 000 0 877 lda 0,2 get the extended chain 01372 3 17 000 0 878 sta 0,3 link it to the new buffer 01373 2 50 000 0 879 stx3 0,2 set new chain pointer 01374 373 004 0 880 iacx3 4 compute first link address 01375 3333 00 0 881 cx3a save link address in x2 01376 0332 00 0 882 cax2 01377 473 006 0 883 ilq dqlpb-2 number of links to link 884 01400 373 004 0 885 get010 iacx3 4 move to next link 01401 3 50 774 0 886 stx3 -4,3 save new pointer in link 01402 573 777 0 887 iaq -1 bump loop control counter 01403 0 64 775 1400 888 tnz get010-* process next unless done 889 01404 3 56 000 0 890 stz 0,3 yes, reset last link pointer to zero 01405 0 76 746 1353 891 aos getqlk-* increment return address 892 01406 893 return getqlk return to caller assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 47 emergency queue link routines 895 896 ************************************************************ 897 * this routine returns to available space the 898 * buffers used by the queuer routines 899 ************************************************************ 900 01410 901 relqlk subr rel,(x1,x2,x3,inh) end of binary card 00000020 902 01430 4 43 760 1410 903 ldx1 relqlk-*,* get pointer to link control words 01431 1 47 001 0 904 ldq 1,1 get number of permanent links 01432 573 777 0 905 iaq -1 01433 2332 00 0 906 cx1a 01434 773 004 0 907 iaa 4 compute address of first link 01435 1 17 003 0 908 sta 3,1 set new link chain pointer 01436 0332 00 0 909 cax2 910 01437 273 004 0 911 rel010 iacx2 4 step address to next link 01440 2 13 774 0 912 stx2 -4,2 link it to previous link 01441 573 777 0 913 iaq -1 decrement link count 01442 0 64 775 1437 914 tnz rel010-* process next unless done 915 01443 2 56 000 0 916 stz 0,2 zero last link pointer 01444 1 07 000 0 917 lda 0,1 get the buffer chain 01445 1 56 000 0 918 stz 0,1 clear pointer to it 01446 4 10 703 1351 919 tsy a.e012-*,* (=frelbf) release the chain 920 01447 0 76 741 1410 921 aos relqlk-* increment return address 922 01450 923 return relqlk return to caller assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 48 e v e n t d i s p a t c h e r 925 926 ************************************************************* 927 * 928 * purpose - dispatch routines from a queued list 929 * 930 * calling sequence - tra secdsp-* 931 * 932 * input 933 * dque - points to top of 934 * queued chain 935 * dlink - points to avail. chain 936 * prdrt - set to minus one 937 * 938 * output 939 * x1 - contains saved value 940 * x3 - contains link address 941 * prdrt - contains priority 942 * shifted 3 right 943 * 944 ************************************************************* 945 01452 946 secdsp null 947 948 * chkivs 949 01452 3331 00 0 950 inh inhibit on 01453 673 777 0 951 ila -1 set to minus 01454 0 17 027 1503 952 sta prdrt-* in the disp. routine 01455 4 41 031 1506 953 ldx3 a.h002-*,* (=dque) get queue pointer 01456 0 64 006 1464 954 tnz dspr10-* process next entry 955 01457 4 20 030 1507 956 szn a.h003-*,* (=lnkchn) queue empty - any buffers to release 01460 4 74 025 1505 957 tze a.h001-*,* no - return to master dispatcher 01461 0 10 727 1410 958 tsy relqlk-* yes - release them 01462 0 00746 1 959 ind lnkchn 01463 0 71 767 1452 960 tra secdsp-* process new entry in queue 961 01464 3 07 000 0 962 dspr10 lda dqlink,3 get link address of first rtn queued 01465 4 17 021 1506 963 sta a.h002-*,* (=dque) update queue pointer 01466 4 47 022 1510 964 ldq a.h004-*,* (=lnkptr) pres. disp. routine pointer end of binary card 00000021 01467 3 57 000 0 965 stq dqlink,3 store in queue link 01470 4 50 020 1510 966 stx3 a.h004-*,* (=lnkptr) place on top of availible list 01471 3 07 003 0 967 lda dqpri,3 get priority 01472 0337 03 0 968 ars 3 shift right (0,1,2...) 01473 0 17 010 1503 969 sta prdrt-* 970 971 * trace tt.rnq,ts.skd,(dqrtn(3)) 972 01474 673 100 0 973 ila pte.s turn on security bit in ptws so any reference wil 01475 4 72 014 1511 974 orsa a.h005-*,* (.crpte,*) cause a store fault assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 49 e v e n t d i s p a t c h e r 01476 4 72 014 1512 975 orsa a.h006-*,* (.crbpe,*) 976 01477 3 43 002 0 977 ldx1 dqx1,3 saved value in x1 01500 0 53 004 1504 978 stx1 svx1-* save for interrupt 01501 0 44 012 1513 979 ldi l.h001-* (=0) initialize indicator register 01502 7 71 001 0 980 tra dqrtn,3* go execute 981 982 01503 400000 0 983 prdrt oct 400000 01504 0 00000 0 984 svx1 zero 985 01505 0 00136 1 986 a.h001 ind mdisp 01506 0 00745 1 987 a.h002 ind dque 01507 0 00746 1 988 a.h003 ind lnkchn 01510 0 00751 1 989 a.h004 ind lnkptr 01511 4 00702 0 990 a.h005 ind .crpte,* variable cpu page table entry 01512 4 00710 0 991 a.h006 ind .crbpe,* buffering page table entry 992 01513 000000 0 993 l.h001 oct 0 994 000100 995 pte.s bool 100 page table entry security bit assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 50 secondary level s a v e r 997 998 ****************************************************************** 999 * 1000 * purpose - save all registers of the interrupted 1001 * routine in the following block 1002 * format: 1003 * 1004 * note: block must start at an 1005 * odd location 1006 * 1007 * word contents 1008 * 0 x1 1009 * 1 x2 1010 * 2 x3 1011 * 3 a reg. 1012 * 4 q reg. 1013 * 5 ind. reg. 1014 * 6 ic at interrupt 1015 * 7 page table word 1016 * 1017 * 1018 * each priority group has its own 7 word 1019 * block. after all saves; get interrupted 1020 * routine's priority, tib address and 1021 * queue. 1022 * 1023 ****************************************************************** 1024 01514 0 00000 0 1025 intsv zero will contain ic at interrupt on entry 1026 from master dispatcher 01515 0 54 037 1554 1027 sti sv1-* save ind. register 01516 3331 00 0 1028 inh inhibit on 01517 0 20 764 1503 1029 szn prdrt-* were we in dispatched routine? 01520 0 75 032 1552 1030 tmi int020-* no 01521 0 64 004 1525 1031 tnz svrg-* yes- save registers and queue 1032 01522 0 44 032 1554 1033 ldi sv1-* priority is 0 -- skip queueing 01523 7331 00 0 1034 eni 01524 4 71 770 1514 1035 tra intsv-*,* go to point of interrupt 1036 01525 0 53 030 1555 1037 svrg stx1 sv2-* save registers in respective group 01526 0 43 755 1503 1038 ldx1 prdrt-* get priority ( 0,1,2,... 01527 4 43 033 1562 1039 ldx1 a.i002-*,* (=grptbl,1) load x1 with add. of group 01530 1 14 003 0 1040 staq inta,1 store a and q reg. in word 3 and 4 01531 1 13 001 0 1041 stx2 intx2,1 " x2 in word 1 01532 1 50 002 0 1042 stx3 intx3,1 " x3 " " 2 01533 0 04 021 1554 1043 ldaq sv1-* load ind. reg. and x1 in aq 01534 1 17 005 0 1044 sta intir,1 indicator register 01535 1 57 000 0 1045 stq intx1,1 x1 saved in word 0 end of binary card 00000022 01536 0 07 756 1514 1046 lda intsv-* ic at interrupt assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 51 secondary level s a v e r 01537 1 17 006 0 1047 sta intic,1 save in block 01540 4 07 751 1511 1048 lda a.h005-*,* (.crpte,*) get current ptw 01541 1 17 007 0 1049 sta intptw,1 save page table word 01542 4 07 750 1512 1050 lda a.h006-*,* (.crbpe,*) 01543 1 17 010 0 1051 sta intbpw,1 and buffer ptw 1052 01544 0 07 737 1503 1053 lda prdrt-* get priority 1054 01545 0336 03 0 1055 als 3 reposition ( 0-7,10-17,... 01546 0 47 015 1563 1056 ldq a.i003-* (=restor) add. of restore routine 01547 0 43 735 1504 1057 ldx1 svx1-* restore x1 for restorer 01550 4 10 011 1561 1058 tsy a.i001-*,* (=dspqur) call queuer 1059 01551 7331 00 0 1060 eni 01552 0 71 700 1452 1061 int020 tra secdsp-* return to event dispatcher 1062 01553 233100 0 01554 1063 even 01554 000000 0 1064 sv1 oct 0 start at even location 01555 000000 0 1065 sv2 oct 0 1066 01556 0 00561 1 1067 grptbl zero grph points to priority group - h 01557 0 00573 1 1068 zero grpm " " " " m 01560 0 00605 1 1069 zero grpl " " " " l 1070 01561 0 00655 1 1071 a.i001 ind dspqur 01562 1 01556 1 1072 a.i002 ind grptbl,1 01563 0 01565 1 1073 a.i003 ind restor 01564 0 13000 3 1074 a.i004 ind getbuf assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 52 r e s t o r e r 1076 1077 ****************************************************************** 1078 * 1079 * entered from the dispatcher. 1080 * restores all registers and transfers to 1081 * the interrupted routine via ic (word 6 1082 * of block). 1083 * 1084 ****************************************************************** 1085 01565 1086 restor null 01565 3331 00 0 1087 inh 01566 0 43 715 1503 1088 ldx1 prdrt-* get priority ( 0,1,2,.. 01567 4 43 773 1562 1089 ldx1 a.i002-*,* (=grptbl) load x1 with add. of chain 01570 1 04 005 0 1090 ldaq intir,1 load ind. reg. and ic at interrupt 01571 0 14 763 1554 1091 staq sv1-* store temp 01572 1 07 007 0 1092 lda intptw,1 restore page table entry 01573 4 17 716 1511 1093 sta a.h005-*,* (.crpte,*) 01574 1 07 010 0 1094 lda intbpw,1 01575 4 17 715 1512 1095 sta a.h006-*,* (.crbpe,*) 1096 01576 1 04 003 0 1097 ldaq inta,1 restore a and q 01577 1 03 001 0 1098 ldx2 intx2,1 restore x2 01600 1 41 002 0 1099 ldx3 intx3,1 restore x3 01601 1 43 000 0 1100 ldx1 intx1,1 restore x1 01602 0 44 752 1554 1101 ldi sv1-* restore indicator register 01603 4 71 752 1555 1102 tra sv2-*,* go finish it assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 53 etrip -- elapsed timer rollover interrupt processor 1104 ************************************************************************ 1105 * this routine is implemented directly from the interrupt vector. 1106 * 1107 * this routine handles elapsed timer runouts. it is responsible for idle 1108 * time metering and calling the instruction counter monitor if the latter 1109 * is enabled. the idle meter interval is established at initialization 1110 * time, and is normally one second. the ic monitor interval is dynamically 1111 * configurable, and is apt to be shorter. 1112 * 1113 * when this routine finds that the idle meter interval has expired, it 1114 * updates the running total of the idle loop counter so that user-ring 1115 * programs can determine an average idle time. 1116 * 1117 * the idle loop is run for one meter interval during initialization, to 1118 * establish a maximum value for the counter. 1119 ************************************************************************ 1120 01604 1121 etrip subr etr,(inh,a,q) end of binary card 00000023 01621 0 44 054 1675 1122 ldi l.o001-* (=024000o) inhibit overflow as well 01622 0 07 050 1672 1123 lda etrprv-* last setting of elapsed timer 01623 0 74 032 1655 1124 tze etr035-* this is first time, don't meter 01624 0 27 050 1674 1125 cmpa idlint-* was it a full idle time interval? 01625 0 65 006 1633 1126 tpl etr010-* yes, meter idle count 01626 0 06 045 1673 1127 ada etrcum-* no, has idle interval passed since we 01627 0 27 045 1674 1128 cmpa idlint-* last recorded it? 01630 0 65 003 1633 1129 tpl etr010-* yes, meter idle now 01631 0 17 042 1673 1130 sta etrcum-* no, update cumulative time 01632 0 71 026 1660 1131 tra etr040-* check for ic monitoring 1132 01633 4 04 043 1676 1133 etr010 ldaq a.o001-*,* idlcnt 01634 1134 cmpaq idlmin-* new minimum? 01637 0 65 003 1642 1135 tpl etr020-* no 01640 0 14 050 1710 1136 staq idlmin-* yes, store it 01641 0 71 006 1647 1137 tra etr030-* don't check for max 01642 1138 etr020 cmpaq idlmax-* new maximum? 01645 0 75 002 1647 1139 tmi etr030-* no 01646 0 14 040 1706 1140 staq idlmax-* yes, record it 01647 0 15 033 1702 1141 etr030 adaq idlcum-* increment cumulative count 01650 0 14 032 1702 1142 staq idlcum-* save result 01651 673 000 0 1143 ila 0 get a double-word 1 01652 473 001 0 1144 ilq 1 01653 0 15 031 1704 1145 adaq idlinc-* to update count of idle meters 01654 0 14 030 1704 1146 staq idlinc-* 01655 1147 etr035 null now zero the counter. note that a reg end of binary card 00000024 01655 473 000 0 1148 ilq 0 contains 0 no matter how we got here 01656 4 14 020 1676 1149 staq a.o001-*,* idlcnt 01657 0 56 014 1673 1150 stz etrcum-* starting new idle interval 1151 01660 0 20 033 1713 1152 etr040 szn etrmon-* ic monitoring in effect? assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 54 etrip -- elapsed timer rollover interrupt processor 01661 0 74 002 1663 1153 tze etr050-* no, skip it 01662 4 10 015 1677 1154 tsy a.o002-*,* (icmon) yes, call routine 01663 0 07 027 1712 1155 etr050 lda etrint-* new interval value 01664 4 17 014 1700 1156 sta a.o003-*,* (etmb) to elapsed timer mailbox 01665 322 777 0 1157 iera -1 convert to positive number 01666 773 001 0 1158 iaa 1 01667 0 17 003 1672 1159 sta etrprv-* save for next time 01670 1160 return etrip 1161 1162 01672 1163 etrprv bss 1 most recent setting of elapsed timer 01673 1164 etrcum bss 1 time since last idle measurement 01674 001750 0 1165 idlint dec 1000 default idle meter interval (1 second) 1166 01675 024000 0 1167 l.o001 oct 024000 inhibit interrupts and overflow 1168 01676 0 00202 1 1169 a.o001 ind idlcnt counter kept by idle loop 01677 0 07000 3 1170 a.o002 ind icmon address of ic monitoring routine 01700 0 00451 0 1171 a.o003 ind etmb address of elapsed timer 1172 1173 * the following data is pointed to .crskd in the comm region 1174 * ring 4 multics software knows the format of this data 1175 01701 233100 0 01702 1176 even 01702 1177 skdata null 01702 000000 0 1178 idlcum oct 0,0 cumulative value of idle counter 01703 000000 0 01704 000000 0 1179 idlinc oct 0,0 count of increments to ildcum 01705 000000 0 01706 000000 0 1180 idlmax oct 0,0 max value of counter 01707 000000 0 01710 000000 0 1181 idlmin oct 0,0 min value of counter 01711 000000 0 01712 776030 0 1182 etrint dec -1000 interrupt every second (may be changed) 01713 000000 0 1183 etrmon oct 0 address of data block in ic metering module 1184 (if configured) assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 55 setime -- routine to set time-outs for tib lines 1186 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1187 * 1188 * setime 1189 * 1190 * setime is a routine called by the control tables 1191 * via the interpreter to set time-outs for the various ttys 1192 * so that the line can be prodded every so often to determine 1193 * its state. 1194 * 1195 * upon entry: 1196 * x1 - virtual tib address for this line 1197 * a - time to wait in seconds 1198 * - or zero to reset a timer 1199 * 1200 * returns: 1201 * with a timer set to queue itmout when it goes off. 1202 * 1203 * notes: 1204 * if a timer is already running for the line it will 1205 * just be reset to the new value. 1206 * 1207 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1208 01714 1209 setime subr set,(x1,x2,x3,a) end of binary card 00000025 1210 01733 073 077 0 1211 sel tmch select the timer channel 01734 0 60 204 2140 1212 cioc mskpcw-* mask the timer now 1213 01735 4 07 554 1511 1214 lda a.h005-*,* (.crpte,*) get current cpu page table entry 01736 0 17 177 2135 1215 sta savpte-* save it for return 1216 01737 1 07 004 0 1217 lda t.line,1 get the line number 01740 4 10 265 2225 1218 tsy a.l002-*,* (gettib) get real tib address 01741 0 17 175 2136 1219 sta strtib-* save it for trace call 1220 01742 1221 trace tt.set,ts.tim,(setsa,strtib) 1222 01755 4 07 255 2232 1223 lda a.l007-*,* (=itmb) get the value of the interval timer 01756 0 17 173 2151 1224 sta itimer+1-* store it away 1225 01757 0 04 165 2144 1226 ldaq simclk-* get the simulated clock value 01760 0 24 170 2150 1227 sbaq itimer-* subtract interval timer value 01761 0 14 165 2146 1228 staq ctime-* store as current time 1229 01762 0 41 173 2155 1230 ldx3 tnext-* get the next ptr 01763 0 74 017 2002 1231 tze set030-* none in queue 1232 01764 0 07 245 2231 1233 lda a.l006-* (=tnext) save addr of next ptr 01765 0 17 233 2220 1234 sta tlasta-* in tlasta for now 01766 0 07 150 2136 1235 lda strtib-* get real tib address assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 56 setime -- routine to set time-outs for tib lines 1236 01767 3 27 001 0 1237 set010 cmpa ttib,3 is this the same tib? 01770 0 74 005 1775 1238 tze set020-* yes, process 1239 01771 0 50 227 2220 1240 stx3 tlasta-* save addr of this block 01772 3 41 000 0 1241 ldx3 tfwd,3 get fwd ptr 01773 0 74 007 2002 1242 tze set030-* end of queue, done 01774 0 71 773 1767 1243 tra set010-* loop for more 1244 end of binary card 00000026 01775 3 07 000 0 1245 set020 lda tfwd,3 get the fwd ptr 01776 4 17 222 2220 1246 sta tlasta-*,* and store in last blk 01777 0 07 157 2156 1247 lda tfree-* get free ptr 02000 3 17 000 0 1248 sta tfwd,3 put into this block 02001 0 50 155 2156 1249 stx3 tfree-* reset free, putting this on head 1250 02002 0 07 730 1732 1251 set030 lda setsa-* restore a reg value 02003 0 74 065 2070 1252 tze set080-* zero, no new value to set 02004 0 65 005 2011 1253 tpl set031-* positive, value in seconds 02005 673 000 0 1254 ila 0 02006 473 000 0 1255 ilq 0 02007 0 66 723 1732 1256 sbq setsa-* compute positive milliseconds 02010 0 71 003 2013 1257 tra set032-* 1258 02011 1259 set031 mpy l.l001-* (=1000) convert to milliseconds 02013 0 15 133 2146 1260 set032 adaq ctime-* add in current time 02014 0 14 136 2152 1261 staq time-* save as expected timeout time 02015 1 14 020 0 1262 staq t.time,1 update into tib 1263 02016 0 41 140 2156 1264 ldx3 tfree-* get ptr to free block 02017 0 64 015 2034 1265 tnz set050-* good, we have one 1266 02020 473 040 0 1267 ilq bufsiz load buffer size 02021 4 10 543 1564 1268 tsy a.i004-*,* (=getbuf) get the needed buffer 02022 1269 die 1 02023 0 50 133 2156 1270 stx3 tfree-* save its address 1271 02024 673 036 0 1272 ila bufsiz-2 get size minus two 02025 0337 01 0 1273 ars 1 divide by two 02026 373 002 0 1274 set040 iacx3 2 bump to next block 02027 3 50 776 0 1275 stx3 -2,3 store its addr in last fwd ptr 02030 773 777 0 1276 iaa -1 decrement count 02031 0 64 775 2026 1277 tnz set040-* loop for more 1278 02032 3 56 000 0 1279 stz 0,3 zero the last fwd ptr 02033 0 41 123 2156 1280 ldx3 tfree-* get the free ptr again 1281 02034 3 07 000 0 1282 set050 lda tfwd,3 take the block 02035 0 17 121 2156 1283 sta tfree-* update free ptr 02036 0 07 100 2136 1284 lda strtib-* get real tib address 02037 3 17 001 0 1285 sta ttib,3 save real tib address in blk assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 57 setime -- routine to set time-outs for tib lines 1286 02040 0 50 157 2217 1287 stx3 tcur-* save addr of new block 02041 0 07 170 2231 1288 lda a.l006-* (=tnext) save addr of next ptr 02042 0 17 156 2220 1289 sta tlasta-* for later reference 02043 0 41 112 2155 1290 ldx3 tnext-* get addr of chain end of binary card 00000027 02044 0 74 020 2064 1291 tze set070-* no chain here 1292 02045 3 07 001 0 1293 set060 lda ttib,3 get real tib address from blk 02046 4 10 156 2224 1294 tsy a.l001-*,* (setptw) virtualize it 02047 4332 00 0 1295 cax1 put virtual tib address in x1 02050 0 04 102 2152 1296 ldaq time-* get the new time value 02051 1297 cmpaq t.time,1 is time < t.time? 02054 0 45 010 2064 1298 tnc set070-* yes, chain new block here 1299 02055 0 50 143 2220 1300 stx3 tlasta-* save addr of this blk 02056 3 41 000 0 1301 ldx3 tfwd,3 bump to next blk 02057 0 64 766 2045 1302 tnz set060-* loop if more blks to look at 1303 02060 0 41 137 2217 1304 ldx3 tcur-* pick up addr of new blk 02061 4 50 137 2220 1305 stx3 tlasta-*,* store in fwd ptr of last blk 02062 3 56 000 0 1306 stz tfwd,3 zero fwd ptr of this one 02063 0 71 005 2070 1307 tra set080-* continue 1308 02064 3333 00 0 1309 set070 cx3a save addr of next blk 02065 0 41 132 2217 1310 ldx3 tcur-* pick up addr of new blk 02066 4 50 132 2220 1311 stx3 tlasta-*,* store in fwd ptr of last blk 02067 3 17 000 0 1312 sta tfwd,3 reset fwd ptr of this blk 1313 02070 0 20 151 2241 1314 set080 szn itrint-* has interval timer run out? 02071 0 64 040 2131 1315 tnz set110-* yes, will be set later... 1316 02072 0 41 063 2155 1317 ldx3 tnext-* pick up next ptr again 02073 0 64 004 2077 1318 tnz set081-* there are tib entries 02074 0 20 060 2154 1319 szn runing-* timer runing? 02075 0 74 034 2131 1320 tze set110-* no, nothing at all to do 02076 0 71 030 2126 1321 tra set100-* yes, just restart from current value 1322 02077 3 07 001 0 1323 set081 lda ttib,3 get real tib address from first blk 02100 4 10 124 2224 1324 tsy a.l001-*,* (setptw) virtualize it 02101 4332 00 0 1325 cax1 put virtual tib address in x1 02102 0 20 052 2154 1326 szn runing-* is the clock running now? 02103 0 74 006 2111 1327 tze set082-* no, just set it 1328 02104 0 04 040 2144 1329 ldaq simclk-* get the simulated clk value 02105 1330 cmpaq t.time,1 is simclk < t.time? 02110 0 45 016 2126 1331 tnc set100-* yes, all set 1332 02111 1 04 020 0 1333 set082 ldaq t.time,1 get the tib time 02112 0 24 034 2146 1334 sbaq ctime-* subtract current time end of binary card 00000028 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 58 setime -- routine to set time-outs for tib lines 02113 0 64 004 2117 1335 tnz set085-* 1336 02114 673 000 0 1337 ila 0 set clock to very small number 02115 473 001 0 1338 ilq 1 so we will get interrupt 02116 0 71 005 2123 1339 tra set090-* 1340 02117 773 000 0 1341 set085 iaa 0 set the indicators 02120 0 74 003 2123 1342 tze set090-* less than max, set clock 1343 02121 673 001 0 1344 ila 1 set max timer value in aq 02122 473 000 0 1345 ilq 0 all zeros in q 1346 02123 4 57 107 2232 1347 set090 stq a.l007-*,* (=itmb) reset the clock 1348 02124 0 15 022 2146 1349 adaq ctime-* add in current time to get new 02125 0 14 017 2144 1350 staq simclk-* simulated clock time, and store 1351 02126 073 077 0 1352 set100 sel tmch select the timer channel 02127 0 60 013 2142 1353 cioc runpcw-* run clock run 02130 0 76 024 2154 1354 aos runing-* is running now 1355 02131 1356 set110 null 02131 0 07 004 2135 1357 lda savpte-* get orig page table entry 02132 4 17 102 2234 1358 sta a.l009-*,* (.crpte,*) restore page table entry 1359 02133 1360 return setime 1361 1362 02135 1363 savpte bss 1 saves variable page table entry 02136 1364 strtib bss 1 saves real tib address 1365 02137 233100 0 02140 1366 even 02140 000000 0 1367 mskpcw vfd 18/0 02141 010000 0 1368 vfd 5/0,1/1,12/0 02142 000000 0 1369 runpcw vfd 18/0 02143 000000 0 1370 vfd 18/0 1371 02144 000000 0 1372 simclk oct 0,0 02145 000000 0 02146 000000 0 1373 ctime oct 0,0 02147 000000 0 02150 000000 0 1374 itimer oct 0,0 02151 000000 0 02152 000000 0 1375 time oct 0,0 02153 000000 0 1376 02154 000000 0 1377 runing oct 0 1378 02155 000000 0 1379 tnext oct 0 02156 0 02157 1 1380 tfree ind tque assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 59 setime -- routine to set time-outs for tib lines 1381 02157 1382 tque tblk 16 end of binary card 00000029 1383 1384 equates for the symbols in a tque entry 1385 000000 1386 tfwd equ 0 000001 1387 ttib equ 1 1388 1389 02217 000000 0 1390 tcur oct 0 02220 000000 0 1391 tlasta oct 0 1392 1393 02221 001750 0 1394 l.l001 dec 1000 02222 1395 even 02222 000007 0 1396 l.l002 vfd 18/intpri 02223 0 15000 3 1397 ind itmout 1398 02224 0 16000 3 1399 a.l001 ind setptw set up variable cpu page table word 02225 0 14000 3 1400 a.l002 ind gettib 02226 0 00655 1 1401 a.l003 ind dspqur 02227 0 01146 1 1402 a.l004 ind dnext 02230 0 01147 1 1403 a.l005 ind dfree end of binary card 00000030 02231 0 02155 1 1404 a.l006 ind tnext 02232 0 00450 0 1405 a.l007 ind itmb 02233 0 01452 1 1406 a.l008 ind secdsp 02234 4 00702 0 1407 a.l009 ind .crpte,* variable cpu page table entry assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 60 itrout -- interval timer runout interrupt processor 1409 1410 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1411 * 1412 * itrout 1413 * 1414 * this routine handles the interval timer runout 1415 * interrupt and schedules the itrip routine to 1416 * handle the processing of the timouts. 1417 * 1418 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1419 02235 0 04 005 2242 1420 itrout ldaq l.m001-* get the priority and routine 1421 don't care whats in x1 02236 4 10 006 2244 1422 tsy a.m001-*,* (=dspqur) queue to run 1423 02237 0 76 002 2241 1424 aos itrint-* interval timer has run out. 1425 02240 4 71 005 2245 1426 tra a.m002-*,* (=mdisp) return to master dispatcher 1427 02241 000000 0 1428 itrint oct 0 02242 1429 even 02242 0 00004 0 1430 l.m001 zero itpri 02243 0 02252 1 1431 ind itrip 1432 02244 0 00655 1 1433 a.m001 ind dspqur 02245 0 00136 1 1434 a.m002 ind mdisp 1435 1436 1437 jump table for interval timer runout 1438 02246 0 00000 0 1439 timrjt zero 02247 4 10 002 2251 1440 tsy .invp-*,* 02250 000005 0 1441 vfd 18/modtmr 1442 02251 0 00034 1 1443 .invp ind invp assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 61 itrip - interval timer processor 1445 1446 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1447 * 1448 * itrip 1449 * 1450 * this routine does the actual processing for 1451 * the interval timer runout. it finds all people 1452 * in the tib and delayq lists who have reached 1453 * the requested time. 1454 * 1455 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1456 02252 1457 itrip null called by dispatcher 1458 02252 0 56 767 2241 1459 stz itrint-* we have handled interrupt now 02253 0 56 701 2154 1460 stz runing-* not running now 02254 673 000 0 1461 ila 0 get a very small number in aq 02255 473 002 0 1462 ilq 2 to use as fudge in finding timouts 02256 0 15 666 2144 1463 adaq simclk-* get the real time of this 02257 0 14 667 2146 1464 staq ctime-* and save as current time 1465 02260 1466 trace tt.itr,ts.tim,(ctime,ctime+1) 1467 02273 0 41 662 2155 1468 ldx3 tnext-* get ptr to tib list 02274 0 74 024 2320 1469 tze itr020-* no tibs in tib list 1470 02275 3 07 001 0 1471 itr010 lda ttib,3 get ptr to first tib in list 02276 4 10 726 2224 1472 tsy a.l001-*,* (setptw) virtualize it 02277 4332 00 0 1473 cax1 put virtual tib address in x1 end of binary card 00000031 02300 0 04 646 2146 1474 ldaq ctime-* get current time 02301 1475 cmpaq t.time,1 is ctime < t.time? 02304 0 45 014 2320 1476 tnc itr020-* yes, all done 1477 no, give timeout 02305 3 43 001 0 1478 ldx1 ttib,3 need real tib address for dspqur 02306 0 04 714 2222 1479 ldaq l.l002-* get priority and addr of itmout 02307 4 10 717 2226 1480 tsy a.l003-*,* (=dspqur) queue it up, real tib in x1 1481 02310 3 07 000 0 1482 lda tfwd,3 save old fwd ptr 02311 0 47 645 2156 1483 ldq tfree-* get the free ptr 02312 3 57 000 0 1484 stq tfwd,3 save as fwd ptr of this one 02313 0 50 643 2156 1485 stx3 tfree-* make this one first free 1486 02314 4333 00 0 1487 cax3 bump to next block 02315 0 50 640 2155 1488 stx3 tnext-* point the que head at this blk 02316 373 000 0 1489 iacx3 0 set the indicators 02317 0 64 756 2275 1490 tnz itr010-* loop if more blks to look at 1491 02320 4 41 707 2227 1492 itr020 ldx3 a.l004-*,* (=dnext) get delayq next ptr 02321 0 74 022 2343 1493 tze itr040-* none in queue now 1494 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 62 itrip - interval timer processor 02322 0 04 624 2146 1495 itr030 ldaq ctime-* get the current time 02323 1496 cmpaq dtime,3 compare: is ctime < dtime? 02326 0 45 015 2343 1497 tnc itr040-* yes, all done 1498 no, give time out 02327 3 07 005 0 1499 lda dpri,3 get the priority 02330 3 47 001 0 1500 ldq drtn,3 and the routine addr 02331 3 43 004 0 1501 ldx1 dx1,3 and his value in x1 02332 4 10 674 2226 1502 tsy a.l003-*,* (=dspqur) and queue him to run 1503 02333 3 07 000 0 1504 lda dfwd,3 get the fwd ptr in this blk 02334 4 47 674 2230 1505 ldq a.l005-*,* (=dfree) get the free ptr 02335 3 57 000 0 1506 stq dfwd,3 and put into this blk 02336 4 50 672 2230 1507 stx3 a.l005-*,* (=dfree) and put this on at top 1508 02337 4333 00 0 1509 cax3 bump to next guy in list 02340 4 50 667 2227 1510 stx3 a.l004-*,* (=dnext) point head at this one 02341 373 000 0 1511 iacx3 0 set the indicators 02342 0 64 760 2322 1512 tnz itr030-* loop for more work 1513 02343 0 56 067 2432 1514 itr040 stz itrsw-* zero the switch word 1515 02344 0 20 611 2155 1516 szn tnext-* any tibs in tib list? 02345 0 74 003 2350 1517 tze 3 no 1518 02346 673 001 0 1519 ila 1 yes, set bit end of binary card 00000032 02347 0 72 063 2432 1520 orsa itrsw-* 1521 02350 4 20 657 2227 1522 szn a.l004-*,* (=dnext) any entries in delayq? 02351 0 74 003 2354 1523 tze 3 no 1524 02352 673 002 0 1525 ila 2 yes, set other bit 02353 0 72 057 2432 1526 orsa itrsw-* 1527 02354 0 41 056 2432 1528 ldx3 itrsw-* load the switch word 02355 4 71 057 2434 1529 tra a.n001-*,* (=itrtbl,3*) use as index to label array 1530 02356 0 02362 1 1531 itrtbl ind itr041 no timers needed 02357 0 02366 1 1532 ind itr042 only tib timers set 02360 0 02374 1 1533 ind itr043 only delayq timers on 02361 0 02377 1 1534 ind itr044 both set, compare 1535 02362 673 000 0 1536 itr041 ila 0 set standard time for clock 02363 0 47 050 2433 1537 ldq l.n001-* (=60*1000) so we idle for a minute 02364 0 15 562 2146 1538 adaq ctime-* add it in so we can subtract it out 02365 0 71 025 2412 1539 tra itr050-* set clock 1540 02366 0 41 567 2155 1541 itr042 ldx3 tnext-* get ptr to first tib entry 02367 3 07 001 0 1542 lda ttib,3 get real tib address 02370 4 10 634 2224 1543 tsy a.l001-*,* (setptw) virtualize it 02371 4332 00 0 1544 cax1 put virtual tib address in x1 assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 63 itrip - interval timer processor 02372 1 04 020 0 1545 ldaq t.time,1 have tib time 02373 0 71 017 2412 1546 tra itr050-* set clock 1547 02374 4 41 633 2227 1548 itr043 ldx3 a.l004-*,* (=dnext) get ptr to delayq list 02375 3 04 002 0 1549 ldaq dtime,3 get first delayq time 02376 0 71 014 2412 1550 tra itr050-* set clock 1551 02377 0 41 556 2155 1552 itr044 ldx3 tnext-* get ptr to tib list 02400 3 07 001 0 1553 lda ttib,3 get real ptr to first tib in list 02401 4 10 623 2224 1554 tsy a.l001-*,* (setptw) virtualize it 02402 4332 00 0 1555 cax1 put virtual tib address in x1 02403 1 04 020 0 1556 ldaq t.time,1 get the tib time 1557 02404 4 41 623 2227 1558 ldx3 a.l004-*,* (=dnext) get ptr to delay list 02405 1559 cmpaq dtime,3 is t.time < dtime? 02410 0 45 002 2412 1560 tnc itr050-* yes, all set 1561 02411 3 04 002 0 1562 ldaq dtime,3 get the delay q time instead 1563 02412 0 24 534 2146 1564 itr050 sbaq ctime-* subtract current time to get interval 02413 0 64 004 2417 1565 tnz itr055-* non-zero, all set 1566 02414 673 000 0 1567 ila 0 set to a very 02415 473 001 0 1568 ilq 1 small number to get interrupt end of binary card 00000033 02416 0 71 005 2423 1569 tra itr060-* 1570 02417 773 000 0 1571 itr055 iaa 0 set indicators 02420 0 74 003 2423 1572 tze itr060-* less than max timer values, all set 1573 02421 673 001 0 1574 ila 1 set max value allowed 02422 473 000 0 1575 ilq 0 1576 02423 4 57 607 2232 1577 itr060 stq a.l007-*,* (=itmb) put into timer loc 02424 0 15 522 2146 1578 adaq ctime-* get next simclk time 02425 0 14 517 2144 1579 staq simclk-* and save it away 1580 02426 073 077 0 1581 sel tmch select timer 02427 0 60 513 2142 1582 cioc runpcw-* start the clock, run, run, run. 02430 0 76 524 2154 1583 aos runing-* running again 1584 02431 4 71 602 2233 1585 itr070 tra a.l008-*,* (=secdsp) return dispatcher 1586 02432 1587 itrsw bss 1 1588 02433 165140 0 1589 l.n001 dec 60000 1590 02434 7 02356 1 1591 a.n001 ind itrtbl,3* end of binary card 00000034 1592 end 2436 is the next available location. assm 01 09-23-82 12.194 multics/fnp scheduler and timer manager page 64 itrip - interval timer processor 355map version/assembly dates gmpa 770711/071177 gmpb 770711/071177 gmpc 770711/071177 there were no warning flags in the above assembly assm 01 09-23-82 12.196 multics/fnp scheduler and timer manager page 65 octal symbol references by sequence no. 133 a.a001 394 386 394 543 134 a.a002 395 388 395 545 653 a.c001 632 606 632 654 a.c002 633 609 633 1022 a.d001 708 669 708 1023 a.d002 709 687 709 1024 a.d010 710 660 710 1342 a.e003 843 740 818 843 1343 a.e004 844 743 800 820 844 1344 a.e005 845 769 845 1345 a.e006 846 738 846 1346 a.e007 847 823 847 1347 a.e008 848 797 824 848 1350 a.e009 849 793 849 1351 a.e012 850 850 919 1505 a.h001 986 957 986 1506 a.h002 987 953 963 987 1507 a.h003 988 956 988 1510 a.h004 989 964 966 989 1511 a.h005 990 974 990 1048 1093 1214 1512 a.h006 991 975 991 1050 1095 1561 a.i001 1071 1058 1071 1562 a.i002 1072 1039 1072 1089 1563 a.i003 1073 1056 1073 1564 a.i004 1074 873 1074 1268 2224 a.l001 1399 1294 1324 1399 1472 1543 1554 2225 a.l002 1400 1218 1400 2226 a.l003 1401 1401 1480 1502 2227 a.l004 1402 1402 1492 1510 1522 1548 1558 2230 a.l005 1403 1403 1505 1507 2231 a.l006 1404 1233 1288 1404 2232 a.l007 1405 1223 1347 1405 1577 2233 a.l008 1406 1406 1585 2234 a.l009 1407 1358 1407 2244 a.m001 1433 1422 1433 2245 a.m002 1434 1426 1434 2434 a.n001 1591 1529 1591 1676 a.o001 1169 1133 1149 1169 1677 a.o002 1170 1154 1170 1700 a.o003 1171 1156 1171 4 asv 283 283 325 378 40 bufsiz 127 127 128 872 1267 1272 3 chkiv 56 11 consol 61 569 0 crtwd 80 80 345 410 488 491 690 2146 ctime 1373 1228 1260 1334 1349 1373 1464 1466 1474 1495 1538 1564 1578 1142 curtim 831 745 764 805 819 831 16 datta 294 294 348 337 dattab 578 294 578 633 1026 delayq 735 656 735 1147 dfree 835 747 752 835 1403 assm 01 09-23-82 12.196 multics/fnp scheduler and timer manager page 66 octal symbol references by sequence no. 0 dfwd 856 751 780 785 791 856 1504 1506 1340 dlasta 839 770 779 784 790 839 1150 dlyque 837 835 837 4 dmail 59 566 1341 dnew 840 768 783 789 840 1146 dnext 834 772 796 834 845 1402 5 dpri 860 756 860 1499 0 dqlink 104 104 666 675 681 684 962 965 10 dqlpb 128 128 883 3 dqpri 107 107 663 678 967 1065 dqr010 775 775 781 1101 dqr020 788 773 777 788 1105 dqr030 793 786 793 1117 dqr032 804 798 804 1125 dqr035 812 806 812 1131 dqr040 818 810 813 818 1134 dqr050 822 802 822 1137 dqr060 826 794 826 1 dqrtn 105 105 664 980 745 dque 699 672 699 708 987 2 dqx1 106 106 665 977 1 drtn 857 758 857 1500 20 dspi 296 296 424 733 dspq10 684 679 684 734 dspq12 686 676 686 742 dspq20 694 694 826 713 dspq2 663 659 663 726 dspq6 678 673 678 682 655 dspqur 649 38 649 695 1071 1401 1433 1464 dspr10 962 954 962 336 dspsz 576 437 576 15 dspta 293 293 341 408 482 511 276 dsptab 563 293 296 563 576 14 dstnum 291 291 370 404 415 481 549 632 5 dterm 58 565 2 dtime 858 765 776 801 804 858 1496 1549 1559 1562 1140 dtimer 830 741 744 830 744 dtmp1 697 670 680 686 697 3 dtsv 282 282 332 360 366 4 dx1 859 760 859 1501 1 entcnt 97 97 350 354 358 451 etmb 72 72 1171 1633 etr010 1133 1126 1129 1133 1642 etr020 1138 1135 1138 1647 etr030 1141 1137 1139 1141 1655 etr035 1147 1124 1147 1660 etr040 1152 1131 1152 1663 etr050 1155 1153 1155 1673 etrcum 1164 1127 1130 1150 1164 1712 etrint 1182 46 1155 1182 1604 etrip 1121 42 1121 1160 assm 01 09-23-82 12.196 multics/fnp scheduler and timer manager page 67 octal symbol references by sequence no. 1713 etrmon 1183 45 1152 1183 1672 etrprv 1163 1123 1159 1163 11 excmsk 288 288 409 427 490 2 excnt 98 98 612 616 617 620 200000 exctbt 135 135 137 288 12 frelbf 64 850 640 g3wjt5 619 614 619 617 g3wjt 604 39 604 628 1400 get010 885 885 888 13 getbuf 63 1074 1353 getqlk 870 710 870 875 891 893 14 gettib 67 1400 561 grph 581 581 1067 605 grpl 583 583 1069 573 grpm 582 582 1068 1556 grptbl 1067 1067 1072 6 hintr 57 567 11 h.sfcm 74 74 626 221 hv1 490 485 490 225 hvint 505 428 505 206 hvreq 476 434 476 275 hvsec 558 506 510 524 558 7 icmon 66 1170 1 icreg 280 280 334 366 534 555 255 ictr5 534 530 534 254 ictr 532 525 532 202 idlcnt 471 51 464 465 471 1169 1702 idlcum 1178 1141 1142 1178 202 idlend 468 49 468 1704 idlinc 1179 1145 1146 1179 1674 idlint 1165 50 1125 1128 1165 1706 idlmax 1180 52 1138 1140 1180 1710 idlmin 1181 53 1134 1136 1181 172 idlmrk 451 47 451 173 idloop 461 48 461 467 0 indreg 279 279 323 384 541 554 1552 int020 1061 1030 1061 3 inta 117 117 383 547 1040 1097 10 intbpw 122 122 389 544 1051 1094 6 intic 120 120 527 532 1047 5 intir 119 119 385 540 1044 1090 7 intpri 148 148 1396 7 intptw 121 121 387 542 1049 1092 1514 intsv 1025 573 1025 1035 1046 0 intx1 114 114 381 551 1045 1100 1 intx2 115 115 379 550 1041 1098 2 intx3 116 116 382 539 1042 1099 66 invp5 357 352 357 34 invp 322 37 322 330 1443 2150 itimer 1374 1224 1227 1374 450 itmb 72 72 843 1405 assm 01 09-23-82 12.196 multics/fnp scheduler and timer manager page 68 octal symbol references by sequence no. 15 itmout 65 1397 4 itpri 149 149 1430 2275 itr010 1471 1471 1490 2320 itr020 1492 1469 1476 1492 2322 itr030 1495 1495 1512 2343 itr040 1514 1493 1497 1514 2362 itr041 1536 1531 1536 2366 itr042 1541 1532 1541 2374 itr043 1548 1533 1548 2377 itr044 1552 1534 1552 2412 itr050 1564 1539 1546 1550 1560 1564 2417 itr055 1571 1565 1571 2423 itr060 1577 1569 1572 1577 2241 itrint 1428 849 1314 1424 1428 1459 2252 itrip 1457 1431 1457 2235 itrout 1420 568 1420 2432 itrsw 1587 1514 1520 1526 1528 1587 2356 itrtbl 1531 1531 1591 710 .crbpe 75 75 395 991 702 .crpte 75 75 394 990 1407 2251 .invp 1443 1440 1443 1 lip 60 564 135 l.a001 397 374 397 516 652 l.c001 630 623 630 1025 l.d001 712 689 712 1352 l.e002 852 763 852 1513 l.h001 993 979 993 2221 l.l001 1394 1259 1394 2222 l.l002 1396 1396 1479 2242 l.m001 1430 1420 1430 2433 l.n001 1589 1537 1589 1675 l.o001 1167 1122 1167 746 lnkchn 702 661 702 959 988 751 lnkptr 705 658 667 705 989 4 macwk1 1209 604 628 649 695 870 893 901 923 1121 1160 1209 1360 11 macwk2 1209 604 649 870 901 1121 1209 2 macwk3 1466 366 1221 1466 6 macwk4 1466 366 1221 1466 136 mdisp 402 37 402 986 1434 77 modmk 144 144 336 1 modnum 302 302 366 749 874 1221 1269 1466 2 modsv 281 281 339 349 5 modtmr 130 130 1441 146 msdsp 414 37 371 391 414 3 msk 99 99 351 613 2140 mskpcw 1367 846 1212 1367 153 msrch 423 423 438 24 nmdqlk 110 110 837 12 nmqlk 109 109 703 706 234 noscp 514 508 514 1144 ntime 832 766 775 832 assm 01 09-23-82 12.196 multics/fnp scheduler and timer manager page 69 octal symbol references by sequence no. 163 nxmd 436 425 431 436 1503 prdrt 983 952 969 983 1029 1038 1053 1088 1 prent 81 81 498 100 pte.s 995 973 995 675 qursa 649 649 653 754 761 676 qursq 649 649 654 757 677 qursx1 649 649 759 1437 rel010 911 911 914 1410 relqlk 901 901 903 921 923 958 10 reqbt 287 287 344 433 487 1565 restor 1086 1073 1086 3 rqcnt 83 83 346 484 692 400000 rqstbt 134 134 137 287 712 2154 runing 1377 848 1319 1326 1354 1377 1460 1583 2142 runpcw 1369 847 1353 1369 1582 2135 savpte 1363 1215 1357 1363 17 savra 295 295 377 519 377 savtab 578 295 578 100000 scdent 136 136 137 289 571 332 scdspa 571 571 709 2 scent 82 82 512 1452 secdsp 946 38 572 946 960 1061 1406 12 secmsk 289 289 507 1767 set010 1237 1237 1243 1775 set020 1245 1238 1245 2002 set030 1251 1231 1242 1251 2011 set031 1259 1253 1259 2013 set032 1260 1257 1260 2026 set040 1274 1274 1277 2034 set050 1282 1265 1282 2045 set060 1293 1293 1302 2064 set070 1309 1291 1298 1309 2070 set080 1314 1252 1307 1314 2077 set081 1323 1318 1323 2111 set082 1333 1327 1333 2117 set085 1341 1335 1341 2123 set090 1347 1339 1342 1347 2126 set100 1352 1321 1331 1352 2131 set110 1356 1315 1320 1356 1714 setime 1209 41 1209 1360 16 setptw 68 1399 1732 setsa 1209 1209 1221 1251 1256 2144 simclk 1372 40 844 1226 1329 1350 1372 1463 1579 1702 skdata 1177 44 1177 0 sked 276 36 276 302 0 stadd 96 96 357 619 2136 strtib 1364 1219 1221 1235 1284 1364 13 supmsk 290 290 430 77777 suprmk 137 137 290 1554 sv1 1064 1027 1033 1043 1064 1091 1101 1555 sv2 1065 1037 1065 1102 assm 01 09-23-82 12.196 multics/fnp scheduler and timer manager page 70 octal symbol references by sequence no. 1525 svrg 1037 1031 1037 1504 svx1 984 978 984 1057 204 tcint 472 446 472 205 tcrier 473 445 473 2217 tcur 1390 1287 1304 1310 1390 2 tdip 62 570 2156 tfree 1380 1247 1249 1264 1270 1280 1283 1380 1483 1485 0 tfwd 1386 1241 1245 1248 1282 1301 1306 1312 1386 1482 1484 2152 time 1375 1261 1296 1375 2246 timrjt 1439 43 1439 4 t.line 73 73 1217 20 t.time 73 73 1262 1297 1330 1333 1475 1545 1556 2220 tlasta 1391 1234 1240 1246 1289 1300 1305 1311 1391 77 tmch 72 72 737 822 1211 1352 1581 2155 tnext 1379 1230 1290 1317 1379 1404 1468 1488 1516 1541 1552 2157 tque 1382 1380 1382 10 trace 55 366 1221 1466 2 ts.int 164 164 366 10 ts.tim 166 166 1221 1466 1 ttib 1387 1237 1285 1293 1323 1387 1471 1478 1542 1553 1 tt.int 154 154 366 7 tt.itr 160 160 1466 6 tt.set 159 159 1221 6 x1sv 285 285 326 380 505 514 520 7 zerow 286 286 421 497 ** 47524 words of memory were used by 355map for this assembly. ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved