assm 01 12-10-82 15.995 multics/fnp scheduler and timer manager page 1 preface this program will be loaded mod 8 program break 2372 common length 0 v count bits 5 primary symdef entry sked 0 invp 32 mdisp 127 msdsp 137 dspqur 613 secdsp 1410 g3wjt 555 simclk 2100 setime 1646 etrip 1537 end of binary card 00000001 timrjt 2202 skdata 1634 etrmon 1645 etrint 1644 idloop 164 idlend 173 idlint 1627 idlcnt 174 idlmax 1640 idlmin 1642 end of binary card 00000002 skdms1 1432 skdms2 1667 skdms3 2064 skdms4 122 skdms5 250 skdms6 1475 skdms7 1526 secondary symdef entry .chain 20 x.002. 71 x.007. 1675 end of binary card 00000003 x.010. 2214 block length symref 1 lip assm 01 12-10-82 15.995 multics/fnp scheduler and timer manager page 2 2 tdip 3 chkiv 4 dmail 5 dterm 6 hintr 7 icmon 10 trace 11 consol end of binary card 00000004 12 frelbf 13 getbuf 14 gettib 15 itmout 16 setptw end of binary card 00000005 assm 01 12-10-82 15.995 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 12-10-82 15.995 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 idloop address of start of idle loop 48 symdef idlend address of end of idle loop 49 symdef idlint idle metering interval (used by init) 50 symdef idlcnt idle loop count (used by init) 51 symdef idlmax idle loop maximum count (set by init) 52 symdef idlmin idle loop minimum count (set by init) 53 symdef skdms1 scheduler memory switch one 54 symdef skdms2 scheduler memory switch two 55 symdef skdms3 scheduler memory switch three 56 symdef skdms4 scheduler memory switch four 57 symdef skdms5 scheduler memory switch five 58 symdef skdms6 scheduler memory switch six 59 symdef skdms7 scheduler memory switch seven 60 61 symref trace 62 symref chkiv 63 symref hintr 64 symref dterm 65 symref dmail 66 symref lip assm 01 12-10-82 15.995 multics/fnp scheduler and timer manager page 5 67 symref consol 68 symref tdip 69 symref getbuf 70 symref frelbf 71 symref itmout 72 symref icmon 73 symref gettib 74 symref setptw set up variable cpu page table word 75 76 00000 78 systm assm 01 12-10-82 16.006 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 12-10-82 16.006 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 12-10-82 16.006 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 12-10-82 16.006 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 12-10-82 16.006 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 12-10-82 16.006 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 12-10-82 16.006 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 12-10-82 16.006 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 12-10-82 16.006 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 79 tib assm 01 12-10-82 16.006 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 12-10-82 16.006 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.leng equ t.metr+1 length of a tib ******************************** * t.stat bits ******************************** 000001 tsfcd bool 000001 carrier detect 000002 tsfcts bool 000002 clear to send 000004 tsfdsr bool 000004 data set ready assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 17 terminal information block (tib) 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 001000 tflfec bool 001000 do lf echo on cr 002000 tfcrec bool 002000 do cr echo on lf assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 18 terminal information block (tib) 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 040000 tffrmi bool 040000 frame mode 100000 tffip bool 100000 frame in progress assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 19 terminal information block (tib) 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 002000 tfsoip bool 002000 suspension of output in progress 004000 tforp bool 004000 output resume pending (waiting until tro) ********************************* * redefined tib flags in t.flg ********************************* 000020 tfdlup equ tfprtr line is on dialup modem 00000 80 hwcm assm 01 12-10-82 16.006 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 81 comreg assm 01 12-10-82 16.006 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 12-10-82 16.006 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 000760 .crcpr set 496 copyright notice assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 23 symbol definitions 84 dsptab symbol definitions 85 000000 86 crtwd equ 0 control word 000001 87 prent equ 1 primary entry point 000002 88 scent equ 2 secondary entry point 000003 89 rqcnt equ 3 request count 90 91 where the control word has the following 92 format: 93 94 bit - 0 ** request bit 95 1 ** execution bit 96 2 ** secondary entry pt. present 97 3-17 ** suppression bits 98 99 100 dattab symbol definitions 101 000000 102 stadd equ 0 starting add. for list of data 000001 103 entcnt equ 1 entry count 000002 104 excnt equ 2 exit count 000003 105 msk equ 3 count mask 106 107 108 dispatcher queuer symbol definitions 109 000000 110 dqlink equ 0 link word 000001 111 dqrtn equ 1 routine address 000002 112 dqx1 equ 2 x1 - passed to routine when run 000003 113 dqpri equ 3 priority 114 000012 115 nmqlk equ 10 number of permanent queue links 000024 116 nmdqlk equ 20 number of permanent delay queue links 117 118 assigned locations in interrupt saver blocks 119 000000 120 intx1 equ 0 x1 000001 121 intx2 equ 1 x2 000002 122 intx3 equ 2 x3 000003 123 inta equ 3 a reg. 000004 124 intq equ 4 q reg. 000005 125 intir equ 5 indicator reg. 000006 126 intic equ 6 ic at interrupt 000007 127 intptw equ 7 cpu ptw at interrupt 128 129 130 miscellaneous 131 000040 132 bufsiz equ 32 000010 133 dqlpb equ bufsiz/4 dispatcher links/buffer 134 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 24 symbol definitions 000005 135 modtmr equ 5 136 137 control word symbol definitions 138 400000 139 rqstbt bool 400000 request bit 200000 140 exctbt bool 200000 execute bit 100000 141 scdent bool 100000 secondary entry present 077777 142 suprmk bool /rqstbt*/exctbt*/scdent suppress 143 144 mask bits for jump table data 145 740000 146 iocmk bool 740000 mask for ioc# 030000 147 clmmk bool 30000 mask for clm# 007600 148 clmsmk bool 7600 mask for clmsc# 000077 149 modmk bool 77 mask for mod# 150 151 dispatcher priority definitions 152 000007 153 intpri bool 7 priority of interpreter 000004 154 itpri bool 4 interval timer priority 155 00000 156 base 8 temporary for debugging assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 25 trace types and switches 158 000001 159 tt.int equ 1 trace interrupts 000002 160 tt.idl equ 2 trace idle time 000003 161 tt.run equ 3 trace running of interrupt rtn 000004 162 tt.rst equ 4 trace restart of interrupted routine 000005 163 tt.rnq equ 5 trace running of queued routine 000006 164 tt.set equ 6 trace set timer calls 000007 165 tt.itr equ 7 trace interval timer runouts 000010 166 tt.que equ 8 trace dspqur entries 167 168 000002 169 ts.int bool 000002 000004 170 ts.skd bool 000004 000010 171 ts.tim bool 000010 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 26 various scheduler macros 173 174 mpy macro (multiplier location-*) 175 mpf #1 176 lrl 1 177 endm mpy 178 179 180 dvd macro (divisor location-*) 181 qls 1 182 dvf #1 183 endm dvd 184 185 186 dspm macro 187 oct 0 188 zero #1 189 oct 0,0 190 endm 191 192 193 chkivs macro 194 tsy 2,* 195 tra 2 196 ind chkiv 197 endm chkivs 198 199 200 datm macro 201 pcc save,off 202 pmc save,off 203 offset set 0 204 count set 0 205 pmc restore 206 dattab null 207 idrp #1 208 zero data+offset 209 dec 0,0,#1 210 pmc save,off 211 offset set offset+#1 212 count set count+1 213 pmc restore 214 idrp 215 odd 216 savtab bss 8*count 217 rem 218 data bss offset 219 pcc restore 220 endm assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 27 various scheduler macros 222 cmpaq macro 223 crsm off 224 ife '#2','',2 225 cmpa #1 226 ife 1,2,1 227 cmpa #1,#2 228 tnz 2 229 ife '#2','',2 230 cmpq #1+1 231 ife 1,2,1 232 cmpq #1+1,#2 233 crsm on 234 endm cmpaq 235 236 237 tblk macro (number of blocks to create) 238 tcnt set #1-1 239 dup 2,tcnt 240 zero *+2 241 oct 0 242 oct 0,0 243 endm tblk 244 245 246 dlyblk macro (number of blocks to create) 247 dcnt set #1-1 248 dup 4,dcnt 249 zero *+6 250 oct 0 251 oct 0,0 252 oct 0,0 253 oct 0,0 254 oct 0,0 255 oct 0,0 256 endm dlyblk assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 28 links macro 258 259 this macro is used to generate linked buffers. 260 the calling sequence is 261 262 links n,l 263 264 n is the number of buffers to generate 265 l is the length of each buffer 266 the first word of each buffer points to the 267 first word of the next buffer. the last 268 buffer has a pointer of zero 269 270 links macro 271 pmc save,off 272 dup 2,#1-1 273 zero *+#2 274 bss #2-1 275 zero 0 276 bss #2-1 277 pmc restore 278 endm links assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 29 common area for invp, savreg and mdisp 280 00000 281 sked null 282 00000 283 even 00000 000000 0 284 indreg oct indicator register save-store 00001 000000 0 285 icreg oct ic of the interrupt 00002 000000 0 286 modsv oct temporary save locations 00003 000000 0 287 dtsv oct x 00004 000000 0 288 asv oct x 00005 000000 0 289 x1sv oct x 00006 000000 0 290 zerow oct a zero word (always) 00007 400000 0 291 reqbt vfd 18/rqstbt request bit 00010 200000 0 292 excmsk vfd 18/exctbt execute bit 00011 100000 0 293 secmsk vfd 18/scdent secondary entry present 00012 077777 0 294 supmsk vfd 18/suprmk suppression mask 00013 000000 0 295 dstnum oct number of interrupted module 296 00014 0 00262 1 297 dspta zero dsptab address of dsptab 00015 0 00323 1 298 datta zero dattab " " dattab 00016 0 00363 1 299 savra zero savtab address of savtab(must start on odd loc.) 00017 1 00262 1 300 dspi ind dsptab,1 indirect word for dsptab 301 302 at end of dsptab insert: 303 dspsz zero *-dsptab 304 305 00020 306 start sked,1 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 30 interrupt vector processor 308 309 *********************************************************** 310 * 311 * invp 312 * 313 * input 314 * address of third word of jump table 315 * stored in invp. 316 * 317 * format of jump table: 318 * 319 * 1 - zero (ic at interrupt) 320 * 2 - tsy invp-* 321 * 3 - ioc#, clm#, clmsc#, mod# 322 * 323 * bit # 4 , 2 , 5 , 7 324 * 325 *********************************************************** 00032 0 00000 0 326 invp zero add. of third word of jump table 00033 0 54 745 0 327 sti indreg-* save indicator register 00034 3331 00 0 328 inh inhibit on 00035 0 17 747 4 329 sta asv-* temp. save a register 00036 0 53 747 5 330 stx1 x1sv-* and x1 register 331 332 * chkivs 333 00037 0 43 773 32 334 ldx1 invp-* 00040 1 07 000 0 335 lda 0,1 have ioc#,clmx#,clmsc#,mod# 00041 0 17 742 3 336 sta dtsv-* save for later 00042 1 43 776 0 337 ldx1 -2,1 have ic at interrupt 00043 0 53 736 1 338 stx1 icreg-* save it 339 00044 022 077 0 340 iana modmk mask out all but mod# 00045 773 777 0 341 iaa -1 subtract 1 from mod# 00046 0336 02 0 342 als 2 mult. mod# by 4 end of binary card 00000006 00047 0 17 733 2 343 sta modsv-* save it 344 00050 0 06 744 14 345 ada dspta-* find right place in dsptab 00051 4332 00 0 346 cax1 have dsptab add. + 4 x mod# 347 00052 0 07 735 7 348 lda reqbt-* 00053 1 72 000 0 349 orsa crtwd,1 set request bit on for this mod 00054 1 76 003 0 350 aos rqcnt,1 add 1 to request count 351 00055 0 43 740 15 352 ldx1 datta-* 00056 0 42 724 2 353 adcx1 modsv-* have dattab add. + 4 x mod# 00057 1 07 001 0 354 lda entcnt,1 entry count 00060 1 27 003 0 355 cmpa msk,1 compare to que size 00061 0 75 003 64 356 tmi invp5-* ok 357 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 31 interrupt vector processor 00062 1 56 001 0 358 stz entcnt,1 reset 00063 673 000 0 359 ila 0 this too 360 00064 1 06 000 0 361 invp5 ada stadd,1 address of list + entry count 00065 1 76 001 0 362 aos entcnt,1 add 1 to entry count 00066 4332 00 0 363 cax1 00067 0 07 714 3 364 lda dtsv-* get the saved data 00070 1 17 000 0 365 sta 0,1 store it 366 367 if requested, trace (1) the ic at the interrupt 368 and (2) the third word of the jump table. 369 00071 370 trace tt.int,ts.int,(icreg,dtsv) 371 372 m a s t e r s a v e r 373 00104 0 07 707 13 374 lda dstnum-* get mod# 00105 0 74 032 137 375 tze msdsp-* were in the dispatcher on the interrupt 376 00106 773 777 0 377 iaa -1 mod# is one more than position in dsptab 00107 0336 03 0 378 als 3 mult. mod# by 8 00110 4332 00 0 379 cax1 00111 0 42 705 16 380 adcx1 savra-* savtab + 8 x mod# 00112 0 07 672 4 381 lda asv-* get original contents of a 00113 1 13 001 0 382 stx2 intx2,1 store x2 00114 0 03 671 5 383 ldx2 x1sv-* get orig. contents of x1 00115 1 13 000 0 384 stx2 intx1,1 end of binary card 00000007 00116 1 50 002 0 385 stx3 intx3,1 00117 1 14 003 0 386 staq inta,1 00120 0 04 660 0 387 ldaq indreg-* get indicator and ic 00121 1 14 005 0 388 staq intir,1 store indicator and ic 00122 0 71 003 125 389 skdms4 tra invp10-* set to nop by init if 64k is configured 00123 4 07 003 126 390 lda a.a001-*,* (.crpte,*) get current page table entry 00124 1 17 007 0 391 sta intptw,1 store page table entry 392 00125 393 invp10 null 00125 0 71 012 137 394 tra msdsp-* go to master dispatcher 395 396 00126 4 00702 0 397 a.a001 ind .crpte,* variable cpu page table entry assm 01 12-10-82 16.006 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 00127 402 mdisp null 00127 3331 00 0 403 inh inhibit on 00130 0 07 663 13 404 lda dstnum-* get mod# 00131 773 777 0 405 iaa -1 subtract one 00132 0336 02 0 406 als 2 mult. by 4 00133 4332 00 0 407 cax1 00134 0 42 660 14 408 adcx1 dspta-* dsptab address + 4 x mod# 00135 0 07 653 10 409 lda excmsk-* execute mask 00136 1 62 000 0 410 ersa crtwd,1 turn off execute mask 411 412 normal entry point from master saver 413 00137 414 msdsp null 00137 0 56 654 13 415 stz dstnum-* set to 0 - are in master dispatcher 00140 7331 00 0 416 eni allow interrupts 417 * chkivs 00141 2331 00 0 418 nop 00142 2331 00 0 419 nop 420 00143 0 43 643 6 421 msds5 ldx1 zerow-* zero x1 422 00144 423 msrch null 00144 4 07 653 17 424 lda dspi-*,* examine dsptab (control words) 00145 0 74 007 154 425 tze nxmd-* nothing on at all 426 00146 0 31 642 10 427 cana excmsk-* was mod interrupted? 00147 0 64 050 217 428 tnz hvint-* yes 429 00150 0 31 642 12 430 cana supmsk-* is it suppressed? 00151 0 64 003 154 431 tnz nxmd-* yes - continue search 432 00152 0 31 635 7 433 cana reqbt-* is it requested? 00153 0 64 025 200 434 tnz hvreq-* yes 435 00154 173 004 0 436 nxmd iacx1 4 increment x1 by 4 00155 0 63 145 322 437 cmpx1 dspsz-* are we at the end of table ?? 00156 0 64 766 144 438 tnz msrch-* no 439 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 33 idle routine 441 442 trace state at start of idle 443 00157 012 000 0 444 rier read interrupt enable registers 00160 0 17 017 177 445 sta tcrier-* save for use in trace 00161 0 54 015 176 446 sti tcint-* save indicators register 447 448 * trace tt.idl,ts.int,(tcint,tcrier) 449 00162 2331 00 0 450 nop 00163 2331 00 0 451 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 00164 673 000 0 461 idloop ila 0 get a doubleword 1 end of binary card 00000008 00165 473 001 0 462 ilq 1 00166 3331 00 0 463 inh have to protect load/store sequence 00167 0 15 005 174 464 adaq idlcnt-* increment counter 00170 0 14 004 174 465 staq idlcnt-* 00171 7331 00 0 466 eni ok 00172 0 71 772 164 467 tra idloop-* go around again until interrupted 00173 468 idlend null so icmon can locate idle loop 469 00173 233100 0 00174 470 even 00174 471 idlcnt bss 2 00176 472 tcint bss 1 00177 473 tcrier bss 1 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 34 run the requested routine 475 00200 2332 00 0 476 hvreq cx1a get the dsptab offset 00201 0337 02 0 477 ars 2 divide by 4 00202 773 001 0 478 iaa 1 increment by 1 479 00203 3331 00 0 480 inh inhibit 00204 0 17 607 13 481 sta dstnum-* set dstnum to mod# (1,2,3,,,) 00205 0 42 607 14 482 adcx1 dspta-* address of dsptab + c(x1) 00206 673 777 0 483 ila -1 00207 1 16 003 0 484 asa rqcnt,1 subtract 1 from rqcnt 00210 0 64 003 213 485 tnz hv1-* did request count go to zero? 486 00211 0 07 576 7 487 lda reqbt-* yes -- set request bit to 0 00212 1 62 000 0 488 ersa crtwd,1 489 00213 0 07 575 10 490 hv1 lda excmsk-* set execute bit 00214 1 72 000 0 491 orsa crtwd,1 492 493 * chkivs 494 495 * trace tt.run,ts.int,(prent(1)) 496 00215 0 44 571 6 497 ldi zerow-* initialize the indicator register 00216 5 71 001 0 498 tra prent,1* go to routine assm 01 12-10-82 16.006 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 00217 0 53 566 5 505 hvint stx1 x1sv-* save for awhile 00220 473 000 0 506 ilq 0 initialize q 00221 0 31 570 11 507 cana secmsk-* is there a secondary entry point? 00222 0 74 004 226 508 tze noscp-* no 509 00223 473 001 0 510 ilq 1 have a secondary entry 00224 0 42 570 14 511 adcx1 dspta-* have desired 4 word block in dsptab 00225 1 03 002 0 512 ldx2 scent,1 get secondary entry point 513 00226 0 07 557 5 514 noscp lda x1sv-* get the dsptab offset again 00227 0336 01 0 515 als 1 mult. by 2 -- number is now 00230 4332 00 0 516 cax1 mod 8 for use in accessing savtab 00231 0 42 565 16 517 adcx1 savra-* desired block in savtab 00232 0337 03 0 518 ars 3 divide by 8 to get mod# 00233 773 001 0 519 iaa 1 add 1, have mod# (1,2,3...) 520 00234 573 000 0 521 iaq 0 did we find secondary entry? 00235 0 74 005 242 522 tze ictr-* no 523 end of binary card 00000009 00236 1 41 006 0 524 ldx3 intic,1 yes - get ic at interrupt 00237 2 50 000 0 525 stx3 0,2 store as first word of secondary routine 00240 273 001 0 526 iacx2 1 00241 0 71 002 243 527 tra ictr5-* 528 00242 1 03 006 0 529 ictr ldx2 intic,1 ic at interrupt 530 00243 0 13 536 1 531 ictr5 stx2 icreg-* store for transfer 00244 0332 00 0 532 cax2 mod# in x2 533 534 * trace tt.rst,tt.int,(icreg) 535 00245 1 41 002 0 536 ldx3 intx3,1 restore registers -- x3 00246 1 07 005 0 537 lda intir,1 get indicator register 00247 0 17 531 0 538 sta indreg-* save 00250 0 71 003 253 539 skdms5 tra hvint8-* set to nop by init if 64k is configured 00251 1 07 007 0 540 lda intptw,1 restore page table word 00252 4 17 654 126 541 sta a.a001-*,* (.crpte,*) 542 00253 543 hvint8 null 00253 1 04 003 0 544 ldaq inta,1 restore a and q reg. 00254 3331 00 0 545 inh 00255 0 13 536 13 546 stx2 dstnum-* set dstnum to mod# 00256 1 03 001 0 547 ldx2 intx2,1 restore x2 00257 1 43 000 0 548 ldx1 intx1,1 and x1 549 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 36 return to interrupted module 550 00260 0 44 520 0 551 ldi indreg-* load indicator reg. 00261 4 71 520 1 552 tra icreg-*,* restart the interrupted routine assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 37 master dispatcher tables 554 00262 556 even 00262 557 dsptab null 00262 558 dspm lip lsla_man, module 1 00262 000000 0 oct 0 00263 0 01000 3 zero lip 00264 000000 0 oct 0,0 00265 000000 0 00266 559 dspm dterm dia_man terminate, module 2 00266 000000 0 oct 0 00267 0 05000 3 zero dterm 00270 000000 0 oct 0,0 00271 000000 0 00272 560 dspm dmail dia_man special, module 3 00272 000000 0 oct 0 00273 0 04000 3 zero dmail 00274 000000 0 oct 0,0 00275 000000 0 00276 561 dspm hintr hsla_man, module 4 00276 000000 0 oct 0 00277 0 06000 3 zero hintr 00300 000000 0 oct 0,0 00301 000000 0 00302 562 dspm itrout timer_manager, module 5 00302 000000 0 oct 0 00303 0 02171 1 zero itrout 00304 000000 0 oct 0,0 end of binary card 00000010 00305 000000 0 00306 563 dspm consol console_man, module 6 00306 000000 0 oct 0 00307 0 11000 3 zero consol 00310 000000 0 oct 0,0 00311 000000 0 00312 564 dspm tdip colts (t&d), module 7 00312 000000 0 oct 0 00313 0 02000 3 zero tdip 00314 000000 0 oct 0,0 00315 000000 0 00316 100000 0 565 scdspa vfd 18/scdent 00317 0 01410 1 566 zero secdsp 00320 0 01451 1 567 zero intsv 00321 000000 0 568 oct 0 569 00322 0 00040 0 570 dspsz zero *-dsptab assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 38 master dispatcher tables 00323 572 datm (8,2,8,8,2,3,2,1) pcc save,off 00323 dattab null 00323 0 00463 1 zero data+offset 00324 000000 0 dec 0,0,8 00325 000000 0 00326 000010 0 00327 0 00473 1 zero data+offset 00330 000000 0 dec 0,0,2 00331 000000 0 00332 000002 0 00333 0 00475 1 zero data+offset 00334 000000 0 dec 0,0,8 00335 000000 0 00336 000010 0 00337 0 00505 1 zero data+offset 00340 000000 0 dec 0,0,8 00341 000000 0 00342 000010 0 00343 0 00515 1 zero data+offset 00344 000000 0 dec 0,0,2 00345 000000 0 00346 000002 0 00347 0 00517 1 zero data+offset 00350 000000 0 dec 0,0,3 00351 000000 0 00352 000003 0 00353 0 00522 1 zero data+offset end of binary card 00000011 00354 000000 0 dec 0,0,2 00355 000000 0 00356 000002 0 00357 0 00524 1 zero data+offset 00360 000000 0 dec 0,0,1 00361 000000 0 00362 000001 0 00363 odd 00363 savtab bss 8*count 00463 data bss offset pcc restore 00525 574 odd 00525 575 grph bss 8 00535 576 grpm bss 8 00545 577 grpl bss 8 578 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 39 retrieve jump table data 580 581 ******************************************************* 582 * 583 * g3wjt 584 * load q register with saved third word 585 * of jump table and set up registers 586 * x2 and x3 as shown: 587 * 588 * x2 - software communication region 589 * x3 - hardware communication region 590 * 591 * calling sequence - 592 * 593 * tsy g3wjt-* 594 * return 595 * 596 ********************************************************* 597 00555 598 g3wjt subr g3w,(inh) 599 00564 4 07 025 611 600 lda a.c001-*,* (=dstnum) get mod number of him 00565 773 777 0 601 iaa -1 subtract one 00566 0336 02 0 602 als 2 mult. by 4 00567 0 06 023 612 603 ada a.c002-* (=dattab) have respective 4 word block 00570 4332 00 0 604 cax1 in dattab 605 00571 1 03 002 0 606 ldx2 excnt,1 exit count 00572 1 23 003 0 607 cmpx2 msk,1 compare to length of que 00573 0 64 003 576 608 tnz g3wjt5-* ok 609 00574 1 56 002 0 610 stz excnt,1 reset it 00575 1 03 002 0 611 ldx2 excnt,1 zero x2 also 612 00576 1 02 000 0 613 g3wjt5 adcx2 stadd,1 address of list + exit count 00577 1 76 002 0 614 aos excnt,1 increment exit count 00600 2 47 000 0 615 ldq 0,2 data (ioc#,clm#,clmsc#,mod#) 00601 7333 00 0 616 cqa 00602 0 34 006 610 617 ana l.c001-* (=037600) mask out clm# and clmsc# 00603 0337 03 0 618 ars 3 convert to relative address 00604 4333 00 0 619 cax3 x3 - hardware communication region 00605 3 03 011 0 620 ldx2 h.sfcm,3 x2 - software communication region 621 00606 622 return g3wjt return to caller 623 00610 037600 0 624 l.c001 oct 37600 mask for clm# and subchannel # 625 00611 0 00013 1 626 a.c001 zero dstnum pointer to interupted module number end of binary card 00000012 00612 0 00323 1 627 a.c002 zero dattab pointer to dattab assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 40 dispatcher queuer 629 630 ******************************************************************** 631 * 632 * dspqur 633 * inputs 634 * ar -- time delay/priority 635 * qr -- routine name 636 * x1 -- passed to routine when run 637 * outputs 638 * none 639 * registers altered - a,q 640 * 641 ********************************************************************** 642 00613 643 dspqur subr qur,(a,q,x1,x2,x3,inh) 644 645 * trace tt.que,ts.skd,(qursa,qursq,x1) 646 00641 0 07 772 633 647 lda qursa-* 00642 0 47 772 634 648 ldq qursq-* restore a and q 00643 222 700 0 649 icana -64 (777700) entry for delayed queuer? 00644 0 64 120 764 650 tnz delayq-* yes 651 00645 0 03 042 707 652 ldx2 lnkptr-* get link from available chain 00646 0 64 003 651 653 tnz dspq2-* unless chain is exhausted 00647 4 10 113 762 654 tsy a.d010-*,* (=getqlk) get and format a new block 00650 0 00704 1 655 ind lnkchn 656 00651 2 17 003 0 657 dspq2 sta dqpri,2 store priority into link 00652 2 57 001 0 658 stq dqrtn,2 store routine into link 00653 2 53 002 0 659 stx1 dqx1,2 store x1 into link 00654 2 47 000 0 660 ldq dqlink,2 detatch link from remainder of 00655 0 57 032 707 661 stq lnkptr-* availible chain 662 00656 0 47 102 760 663 ldq a.d001-* (=dque) get address of pointer 00657 0 57 023 702 664 stq dtmp1-* to dispatcher queue chain 665 00660 0 41 023 703 666 ldx3 dque-* get start of chain 00661 0 64 003 664 667 tnz dspq6-* good chain, start search 668 00662 2 56 000 0 669 stz dqlink,2 make link end of chain 00663 0 71 007 672 670 tra dspq12-* 671 00664 3 27 003 0 672 dspq6 cmpa dqpri,3 search chain until lower priority end of binary card 00000013 00665 0 45 004 671 673 tnc dspq10-* is found 00666 0 50 014 702 674 stx3 dtmp1-* not yet - save previous link 00667 3 41 000 0 675 ldx3 dqlink,3 get next 00670 0 64 774 664 676 tnz dspq6-* test for end of chain assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 41 dispatcher queuer 00671 2 50 000 0 678 dspq10 stx3 dqlink,2 put the foward pointer into new link 679 00672 4 13 010 702 680 dspq12 stx2 dtmp1-*,* make previous link point at new one 00673 0 03 066 761 681 ldx2 a.d002-* get address of secondary disp. block 682 00674 0 07 067 763 683 lda l.d001-* (=rqstbt) get request bit 00675 2 72 000 0 684 orsa crtwd,2 set request bit on for secondary disp. 00676 673 001 0 685 ila 1 00677 2 17 003 0 686 sta rqcnt,2 set request count to one 687 00700 688 dspq20 null 00700 689 return dspqur return to caller 690 00702 000000 0 691 dtmp1 oct 0 temp for workspace 692 00703 0 00000 0 693 dque zero 0 pointer to the dispatcher que chain 694 695 00704 0 00000 0 696 lnkchn ind 0 extra buffer chain 00705 0 00012 0 697 ind nmqlk number of permanent links 00706 0 00000 0 698 ind 0 number of calls on getqlk 00707 0 00710 1 699 lnkptr ind *+1 pointer to available link chain 00710 700 links nmqlk,4 generate permanent links end of binary card 00000014 701 00760 0 00703 1 702 a.d001 ind dque 00761 0 00316 1 703 a.d002 ind scdspa 00762 0 01311 1 704 a.d010 ind getqlk 705 00763 400000 0 706 l.d001 vfd 18/rqstbt assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 42 delayq -- time delay queuer routine 708 ************************************************************************ 709 * the function of this routine is identical to the normal queuer 710 * routine "dspqur" with the following single exception -- 711 * 712 * the routine to be queued will be queued only after 713 * the specified time interval has elapsed. 714 * 715 * the calling sequence is also identical to that of the normal queuer 716 * except that bits 0-11 of the accumulator are non-zero and represent 717 * the desired time delay before the routine is actually queued. 718 * 719 * inputs-- 720 * ar(00-11)= desired time delay, in seconds 721 * ar(12-17)= priority 722 * qr = routine address 723 * x1 = will be passed to routine when run 724 * 725 * outputs -- none 726 * 727 ************************************************************************ 728 00764 729 delayq null transfered to by dspqur 730 00764 073 077 0 731 sel tmch select timer channel 00765 4 60 316 1303 732 cioc a.e006-*,* (=mskpcw) mask the interval timer 733 00766 4 07 312 1300 734 lda a.e003-*,* (=itmb) get the timer value 00767 0 17 110 1077 735 sta dtimer+1-* save it 736 00770 4 04 311 1301 737 ldaq a.e004-*,* (=simclk) get the simulated clock 00771 0 24 105 1076 738 sbaq dtimer-* get the current time 00772 0 14 106 1100 739 staq curtim-* and save it away 740 00773 0 41 112 1105 741 ldx3 dfree-* get ptr to free chain 00774 0 64 002 776 742 tnz 2 all ok 00775 743 die 1 no more delay queue buffers 744 00776 3 07 000 0 745 lda dfwd,3 get fwd ptr from first blk 00777 0 17 106 1105 746 sta dfree-* put into free ptr, taking blk 747 01000 0 07 633 633 748 lda qursa-* restore a reg 01001 022 077 0 749 iana 63 leave priority 01002 3 17 005 0 750 sta dpri,3 put into block 01003 0 07 631 634 751 lda qursq-* get the routine addr 01004 3 17 001 0 752 sta drtn,3 save in block 01005 0 43 630 635 753 ldx1 qursx1-* get the value of x1 01006 3 53 004 0 754 stx1 dx1,3 save in block, also 01007 0 07 624 633 755 lda qursa-* get time value 01010 0337 06 0 756 ars 6 shift down 01011 757 mpy l.e002-* (=1000) in to milliseconds 01013 0 15 065 1100 758 adaq curtim-* add in current time assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 43 delayq -- time delay queuer routine 01014 3 14 002 0 759 staq dtime,3 and put into block 01015 0 14 065 1102 760 staq ntime-* save local copy 761 end of binary card 00000015 01016 0 50 261 1277 762 stx3 dnew-* save addr of new block 01017 0 07 263 1302 763 lda a.e005-* (=dnext) get addr of next ptr 01020 0 17 256 1276 764 sta dlasta-* save it also 765 01021 0 41 063 1104 766 ldx3 dnext-* get the next ptr, head of chain 01022 0 74 015 1037 767 tze dqr020-* no chain, start one 768 01023 0 04 057 1102 769 dqr010 ldaq ntime-* get the new time 01024 770 cmpaq dtime,3 is ntime < dtime? 01027 0 45 010 1037 771 tnc dqr020-* yes, chain in here 772 01030 0 50 246 1276 773 stx3 dlasta-* save addr of this block 01031 3 41 000 0 774 ldx3 dfwd,3 bump to next block 01032 0 64 771 1023 775 tnz dqr010-* loop for more 776 01033 0 41 244 1277 777 ldx3 dnew-* get ptr to new block 01034 4 50 242 1276 778 stx3 dlasta-*,* store into fwd of last block 01035 3 56 000 0 779 stz dfwd,3 zero fwd ptr, end of chain 01036 0 71 005 1043 780 tra dqr030-* all done 781 01037 3333 00 0 782 dqr020 cx3a save addr of current block 01040 0 41 237 1277 783 ldx3 dnew-* get addr of new block 01041 4 50 235 1276 784 stx3 dlasta-*,* put into last block fwd ptr 01042 3 17 000 0 785 sta dfwd,3 chain ahead to next block 786 01043 4 20 243 1306 787 dqr030 szn a.e009-*,* (=itrint) has interval timer run out? 01044 0 64 031 1075 788 tnz dqr060-* yes, all done, will be set later 789 01045 0 41 037 1104 790 ldx3 dnext-* get ptr to first block 01046 4 20 237 1305 791 szn a.e008-*,* (=runing) is the clock runing? 01047 0 74 006 1055 792 tze dqr032-* no, just start it 793 01050 4 04 231 1301 794 ldaq a.e004-*,* (=simclk) get the simclk 01051 795 cmpaq dtime,3 is simclk < dtime? 01054 0 45 016 1072 796 tnc dqr050-* yes, go start clock 797 01055 3 04 002 0 798 dqr032 ldaq dtime,3 get the time in block 01056 0 24 022 1100 799 sbaq curtim-* subtract current time, leaving interval 01057 0 64 004 1063 800 tnz dqr035-* zero interval, bad 801 01060 673 000 0 802 ila 0 set to very small one 01061 473 001 0 803 ilq 1 like 1 or so 01062 0 71 005 1067 804 tra dqr040-* done 805 01063 773 000 0 806 dqr035 iaa 0 set the indicators 01064 0 74 003 1067 807 tze dqr040-* less than max, set clock 808 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 44 delayq -- time delay queuer routine end of binary card 00000016 01065 673 001 0 809 ila 1 get the max value for clock 01066 473 000 0 810 ilq 0 into the aq 811 01067 4 57 211 1300 812 dqr040 stq a.e003-*,* (=itmb) set the interval timer 01070 0 15 010 1100 813 adaq curtim-* get the new simclk time 01071 4 14 210 1301 814 staq a.e004-*,* (=simclk) and save it 815 01072 073 077 0 816 dqr050 sel tmch select the timer channel 01073 4 60 211 1304 817 cioc a.e007-*,* (=runpcw) start the timer 01074 4 76 211 1305 818 aos a.e008-*,* (=runing) it is running now 819 01075 0 71 603 700 820 dqr060 tra dspq20-* restore registers and return 821 822 01076 823 even 01076 000000 0 824 dtimer oct 0,0 interval timer value 01077 000000 0 01100 000000 0 825 curtim oct 0,0 current time 01101 000000 0 01102 000000 0 826 ntime oct 0,0 new time for new block 01103 000000 0 827 01104 000000 0 828 dnext oct 0 ptr to chain of active blocks 01105 0 01106 1 829 dfree ind dlyque ptr to chain of free blocks 830 01106 831 dlyque dlyblk nmdqlk end of binary card 00000019 832 01276 000000 0 833 dlasta oct 0 01277 000000 0 834 dnew oct 0 835 836 01300 0 00450 0 837 a.e003 ind itmb 01301 0 02100 1 838 a.e004 ind simclk 01302 0 01104 1 839 a.e005 ind dnext 01303 0 02074 1 840 a.e006 ind mskpcw 01304 0 02076 1 841 a.e007 ind runpcw 01305 0 02110 1 842 a.e008 ind runing 01306 0 02175 1 843 a.e009 ind itrint 01307 0 12000 3 844 a.e012 ind frelbf 845 01310 001750 0 846 l.e002 dec 1000 847 848 equates for a delay queue block 849 000000 850 dfwd equ 0 000001 851 drtn equ 1 000002 852 dtime equ 2 000004 853 dx1 equ 4 000005 854 dpri equ 5 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 45 emergency queue link routines 856 857 ************************************************************ 858 * the function of this subroutine is to fetch and format 859 * buffers needed by the normal queuer. the address of 860 * the first word of the new link chain is returned 861 * in x2 on exit. 862 ************************************************************ 863 01311 864 getqlk subr sub,(a,q) 865 end of binary card 00000020 01322 473 040 0 866 ilq bufsiz set size of buffer desired 01323 4 10 175 1520 867 tsy a.i004-*,* (=getbuf) get a buffer 01324 868 die 1 ** error - no more buffers ** 01325 4 03 764 1311 869 ldx2 getqlk-*,* get pointer to link control words 01326 2 76 002 0 870 aos 2,2 increment call count 01327 2 07 000 0 871 lda 0,2 get the extended chain 01330 3 17 000 0 872 sta 0,3 link it to the new buffer 01331 2 50 000 0 873 stx3 0,2 set new chain pointer 01332 373 004 0 874 iacx3 4 compute first link address 01333 3333 00 0 875 cx3a save link address in x2 01334 0332 00 0 876 cax2 01335 473 006 0 877 ilq dqlpb-2 number of links to link 878 01336 373 004 0 879 get010 iacx3 4 move to next link 01337 3 50 774 0 880 stx3 -4,3 save new pointer in link 01340 573 777 0 881 iaq -1 bump loop control counter 01341 0 64 775 1336 882 tnz get010-* process next unless done 883 01342 3 56 000 0 884 stz 0,3 yes, reset last link pointer to zero 01343 0 76 746 1311 885 aos getqlk-* increment return address 886 01344 887 return getqlk return to caller assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 46 emergency queue link routines 889 890 ************************************************************ 891 * this routine returns to available space the 892 * buffers used by the queuer routines 893 ************************************************************ 894 01346 895 relqlk subr rel,(x1,x2,x3,inh) 896 01366 4 43 760 1346 897 ldx1 relqlk-*,* get pointer to link control words 01367 1 47 001 0 898 ldq 1,1 get number of permanent links 01370 573 777 0 899 iaq -1 01371 2332 00 0 900 cx1a 01372 773 004 0 901 iaa 4 compute address of first link end of binary card 00000021 01373 1 17 003 0 902 sta 3,1 set new link chain pointer 01374 0332 00 0 903 cax2 904 01375 273 004 0 905 rel010 iacx2 4 step address to next link 01376 2 13 774 0 906 stx2 -4,2 link it to previous link 01377 573 777 0 907 iaq -1 decrement link count 01400 0 64 775 1375 908 tnz rel010-* process next unless done 909 01401 2 56 000 0 910 stz 0,2 zero last link pointer 01402 1 41 000 0 911 ldx3 0,1 get the buffer chain 01403 1 56 000 0 912 stz 0,1 clear pointer to it 01404 4 10 703 1307 913 tsy a.e012-*,* (=frelbf) release the chain 914 01405 0 76 741 1346 915 aos relqlk-* increment return address 916 01406 917 return relqlk return to caller assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 47 e v e n t d i s p a t c h e r 919 920 ************************************************************* 921 * 922 * purpose - dispatch routines from a queued list 923 * 924 * calling sequence - tra secdsp-* 925 * 926 * input 927 * dque - points to top of 928 * queued chain 929 * dlink - points to avail. chain 930 * prdrt - set to minus one 931 * 932 * output 933 * x1 - contains saved value 934 * x3 - contains link address 935 * prdrt - contains priority 936 * shifted 3 right 937 * 938 ************************************************************* 939 01410 940 secdsp null 941 942 * chkivs 943 01410 3331 00 0 944 inh inhibit on 01411 673 777 0 945 ila -1 set to minus 01412 0 17 027 1441 946 sta prdrt-* in the disp. routine 01413 4 41 031 1444 947 ldx3 a.h002-*,* (=dque) get queue pointer 01414 0 64 006 1422 948 tnz dspr10-* process next entry 949 01415 4 20 030 1445 950 szn a.h003-*,* (=lnkchn) queue empty - any buffers to release 01416 4 74 025 1443 951 tze a.h001-*,* no - return to master dispatcher 01417 0 10 727 1346 952 tsy relqlk-* yes - release them 01420 0 00704 1 953 ind lnkchn 01421 0 71 767 1410 954 tra secdsp-* process new entry in queue 955 01422 3 07 000 0 956 dspr10 lda dqlink,3 get link address of first rtn queued 01423 4 17 021 1444 957 sta a.h002-*,* (=dque) update queue pointer 01424 4 47 022 1446 958 ldq a.h004-*,* (=lnkptr) pres. disp. routine pointer 01425 3 57 000 0 959 stq dqlink,3 store in queue link 01426 4 50 020 1446 960 stx3 a.h004-*,* (=lnkptr) place on top of availible list 01427 3 07 003 0 961 lda dqpri,3 get priority 01430 0337 03 0 962 ars 3 shift right (0,1,2...) 01431 0 17 010 1441 963 sta prdrt-* 964 965 * trace tt.rnq,ts.skd,(dqrtn(3)) 966 01432 0 71 003 1435 967 skdms1 tra dspr20-* set to nop by init if 64k is configured 01433 673 100 0 968 ila pte.s turn on security bit in ptw so any reference will 01434 4 72 013 1447 969 orsa a.h005-*,* (.crpte,*) cause a store fault assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 48 e v e n t d i s p a t c h e r 970 01435 971 dspr20 null 01435 3 43 002 0 972 ldx1 dqx1,3 saved value in x1 01436 0 53 004 1442 973 stx1 svx1-* save for interrupt 01437 0 44 011 1450 974 ldi l.h001-* (=0) initialize indicator register 01440 7 71 001 0 975 tra dqrtn,3* go execute 976 977 01441 400000 0 978 prdrt oct 400000 end of binary card 00000022 01442 0 00000 0 979 svx1 zero 980 01443 0 00127 1 981 a.h001 ind mdisp 01444 0 00703 1 982 a.h002 ind dque 01445 0 00704 1 983 a.h003 ind lnkchn 01446 0 00707 1 984 a.h004 ind lnkptr 01447 4 00702 0 985 a.h005 ind .crpte,* variable cpu page table entry 986 01450 000000 0 987 l.h001 oct 0 988 000100 989 pte.s bool 100 page table entry security bit assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 49 secondary level s a v e r 991 992 ****************************************************************** 993 * 994 * purpose - save all registers of the interrupted 995 * routine in the following block 996 * format: 997 * 998 * note: block must start at an 999 * odd location 1000 * 1001 * word contents 1002 * 0 x1 1003 * 1 x2 1004 * 2 x3 1005 * 3 a reg. 1006 * 4 q reg. 1007 * 5 ind. reg. 1008 * 6 ic at interrupt 1009 * 7 page table word 1010 * 1011 * 1012 * each priority group has its own 7 word 1013 * block. after all saves; get interrupted 1014 * routine's priority, tib address and 1015 * queue. 1016 * 1017 ****************************************************************** 1018 01451 0 00000 0 1019 intsv zero will contain ic at interrupt on entry 1020 from master dispatcher 01452 0 54 036 1510 1021 sti sv1-* save ind. register 01453 3331 00 0 1022 inh inhibit on 01454 0 20 765 1441 1023 szn prdrt-* were we in dispatched routine? 01455 0 75 031 1506 1024 tmi int020-* no 01456 0 64 004 1462 1025 tnz svrg-* yes- save registers and queue 1026 01457 0 44 031 1510 1027 ldi sv1-* priority is 0 -- skip queueing 01460 7331 00 0 1028 eni 01461 4 71 770 1451 1029 tra intsv-*,* go to point of interrupt 1030 01462 0 53 027 1511 1031 svrg stx1 sv2-* save registers in respective group 01463 0 43 756 1441 1032 ldx1 prdrt-* get priority ( 0,1,2,... 01464 4 43 032 1516 1033 ldx1 a.i002-*,* (=grptbl,1) load x1 with add. of group 01465 1 14 003 0 1034 staq inta,1 store a and q reg. in word 3 and 4 01466 1 13 001 0 1035 stx2 intx2,1 " x2 in word 1 01467 1 50 002 0 1036 stx3 intx3,1 " x3 " " 2 01470 0 04 020 1510 1037 ldaq sv1-* load ind. reg. and x1 in aq 01471 1 17 005 0 1038 sta intir,1 indicator register 01472 1 57 000 0 1039 stq intx1,1 x1 saved in word 0 01473 0 07 756 1451 1040 lda intsv-* ic at interrupt 01474 1 17 006 0 1041 sta intic,1 save in block assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 50 secondary level s a v e r 01475 0 71 003 1500 1042 skdms6 tra int010-* set to nop by init if 64k is configured 01476 4 07 751 1447 1043 lda a.h005-*,* (.crpte,*) get current ptw 01477 1 17 007 0 1044 sta intptw,1 save page table word 1045 01500 1046 int010 null 01500 0 07 741 1441 1047 lda prdrt-* get priority 1048 01501 0336 03 0 1049 als 3 reposition ( 0-7,10-17,... 01502 0 47 015 1517 1050 ldq a.i003-* (=restor) add. of restore routine 01503 0 43 737 1442 1051 ldx1 svx1-* restore x1 for restorer 01504 4 10 011 1515 1052 tsy a.i001-*,* (=dspqur) call queuer 1053 01505 7331 00 0 1054 eni 01506 0 71 702 1410 1055 int020 tra secdsp-* return to event dispatcher 1056 01507 233100 0 01510 1057 even 01510 000000 0 1058 sv1 oct 0 start at even location end of binary card 00000023 01511 000000 0 1059 sv2 oct 0 1060 01512 0 00525 1 1061 grptbl zero grph points to priority group - h 01513 0 00535 1 1062 zero grpm " " " " m 01514 0 00545 1 1063 zero grpl " " " " l 1064 01515 0 00613 1 1065 a.i001 ind dspqur 01516 1 01512 1 1066 a.i002 ind grptbl,1 01517 0 01521 1 1067 a.i003 ind restor 01520 0 13000 3 1068 a.i004 ind getbuf assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 51 r e s t o r e r 1070 1071 ****************************************************************** 1072 * 1073 * entered from the dispatcher. 1074 * restores all registers and transfers to 1075 * the interrupted routine via ic (word 6 1076 * of block). 1077 * 1078 ****************************************************************** 1079 01521 1080 restor null 01521 3331 00 0 1081 inh 01522 0 43 717 1441 1082 ldx1 prdrt-* get priority ( 0,1,2,.. 01523 4 43 773 1516 1083 ldx1 a.i002-*,* (=grptbl) load x1 with add. of chain 01524 1 04 005 0 1084 ldaq intir,1 load ind. reg. and ic at interrupt 01525 0 14 763 1510 1085 staq sv1-* store temp 01526 0 71 003 1531 1086 skdms7 tra rstr10-* set to nop by init if 64k is configured 01527 1 07 007 0 1087 lda intptw,1 restore page table entry 01530 4 17 717 1447 1088 sta a.h005-*,* (.crpte,*) 1089 01531 1090 rstr10 null 01531 1 04 003 0 1091 ldaq inta,1 restore a and q 01532 1 03 001 0 1092 ldx2 intx2,1 restore x2 01533 1 41 002 0 1093 ldx3 intx3,1 restore x3 01534 1 43 000 0 1094 ldx1 intx1,1 restore x1 01535 0 44 753 1510 1095 ldi sv1-* restore indicator register 01536 4 71 753 1511 1096 tra sv2-*,* go finish it assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 52 etrip -- elapsed timer rollover interrupt processor 1098 ************************************************************************ 1099 * this routine is implemented directly from the interrupt vector. 1100 * 1101 * this routine handles elapsed timer runouts. it is responsible for idle 1102 * time metering and calling the instruction counter monitor if the latter 1103 * is enabled. the idle meter interval is established at initialization 1104 * time, and is normally one second. the ic monitor interval is dynamically 1105 * configurable, and is apt to be shorter. 1106 * 1107 * when this routine finds that the idle meter interval has expired, it 1108 * updates the running total of the idle loop counter so that user-ring 1109 * programs can determine an average idle time. 1110 * 1111 * the idle loop is run for one meter interval during initialization, to 1112 * establish a maximum value for the counter. 1113 ************************************************************************ 1114 01537 1115 etrip subr etr,(inh,a,q) 01554 0 44 054 1630 1116 ldi l.o001-* (=024000o) inhibit overflow as well 01555 0 07 050 1625 1117 lda etrprv-* last setting of elapsed timer 01556 0 74 032 1610 1118 tze etr035-* this is first time, don't meter 01557 0 27 050 1627 1119 cmpa idlint-* was it a full idle time interval? 01560 0 65 006 1566 1120 tpl etr010-* yes, meter idle count end of binary card 00000024 01561 0 06 045 1626 1121 ada etrcum-* no, has idle interval passed since we 01562 0 27 045 1627 1122 cmpa idlint-* last recorded it? 01563 0 65 003 1566 1123 tpl etr010-* yes, meter idle now 01564 0 17 042 1626 1124 sta etrcum-* no, update cumulative time 01565 0 71 026 1613 1125 tra etr040-* check for ic monitoring 1126 01566 4 04 043 1631 1127 etr010 ldaq a.o001-*,* idlcnt 01567 1128 cmpaq idlmin-* new minimum? 01572 0 65 003 1575 1129 tpl etr020-* no 01573 0 14 047 1642 1130 staq idlmin-* yes, store it 01574 0 71 006 1602 1131 tra etr030-* don't check for max 01575 1132 etr020 cmpaq idlmax-* new maximum? 01600 0 75 002 1602 1133 tmi etr030-* no 01601 0 14 037 1640 1134 staq idlmax-* yes, record it 01602 0 15 032 1634 1135 etr030 adaq idlcum-* increment cumulative count 01603 0 14 031 1634 1136 staq idlcum-* save result 01604 673 000 0 1137 ila 0 get a double-word 1 01605 473 001 0 1138 ilq 1 01606 0 15 030 1636 1139 adaq idlinc-* to update count of idle meters 01607 0 14 027 1636 1140 staq idlinc-* 01610 1141 etr035 null now zero the counter. note that a reg 01610 473 000 0 1142 ilq 0 contains 0 no matter how we got here 01611 4 14 020 1631 1143 staq a.o001-*,* idlcnt 01612 0 56 014 1626 1144 stz etrcum-* starting new idle interval 1145 01613 0 20 032 1645 1146 etr040 szn etrmon-* ic monitoring in effect? 01614 0 74 002 1616 1147 tze etr050-* no, skip it assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 53 etrip -- elapsed timer rollover interrupt processor 01615 4 10 015 1632 1148 tsy a.o002-*,* (icmon) yes, call routine 01616 0 07 026 1644 1149 etr050 lda etrint-* new interval value 01617 4 17 014 1633 1150 sta a.o003-*,* (etmb) to elapsed timer mailbox 01620 322 777 0 1151 iera -1 convert to positive number 01621 773 001 0 1152 iaa 1 01622 0 17 003 1625 1153 sta etrprv-* save for next time 01623 1154 return etrip 1155 1156 01625 1157 etrprv bss 1 most recent setting of elapsed timer 01626 1158 etrcum bss 1 time since last idle measurement 01627 001750 0 1159 idlint dec 1000 default idle meter interval (1 second) 1160 end of binary card 00000025 01630 024000 0 1161 l.o001 oct 024000 inhibit interrupts and overflow 01631 0 00174 1 1162 a.o001 ind idlcnt counter kept by idle loop 01632 0 07000 3 1163 a.o002 ind icmon address of ic monitoring routine 01633 0 00451 0 1164 a.o003 ind etmb address of elapsed timer 1165 1166 * the following data is pointed to .crskd in the comm region 1167 * ring 4 multics software knows the format of this data 1168 01634 1169 even 01634 1170 skdata null 01634 000000 0 1171 idlcum oct 0,0 cumulative value of idle counter 01635 000000 0 01636 000000 0 1172 idlinc oct 0,0 count of increments to ildcum 01637 000000 0 01640 000000 0 1173 idlmax oct 0,0 max value of counter 01641 000000 0 01642 000000 0 1174 idlmin oct 0,0 min value of counter 01643 000000 0 01644 776030 0 1175 etrint dec -1000 interrupt every second (may be changed) 01645 000000 0 1176 etrmon oct 0 address of data block in ic metering module 1177 (if configured) assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 54 setime -- routine to set time-outs for tib lines 1179 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1180 * 1181 * setime 1182 * 1183 * setime is a routine called by the control tables 1184 * via the interpreter to set time-outs for the various ttys 1185 * so that the line can be prodded every so often to determine 1186 * its state. 1187 * 1188 * upon entry: 1189 * x1 - virtual tib address for this line 1190 * a - time to wait in seconds 1191 * - or zero to reset a timer 1192 * 1193 * returns: 1194 * with a timer set to queue itmout when it goes off. 1195 * 1196 * notes: 1197 * if a timer is already running for the line it will 1198 * just be reset to the new value. 1199 * 1200 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1201 01646 1202 setime subr set,(x1,x2,x3,a) 1203 01665 073 077 0 1204 sel tmch select the timer channel 01666 0 60 206 2074 1205 cioc mskpcw-* mask the timer now 1206 01667 0 71 003 1672 1207 skdms2 tra set005-* set to nop by init if 64k is configured 01670 4 07 557 1447 1208 lda a.h005-*,* (.crpte,*) get current cpu page table entry 01671 0 17 200 2071 1209 sta savpte-* save it for return 1210 01672 1211 set005 null 01672 1 07 004 0 1212 lda t.line,1 get the line number 01673 4 10 266 2161 1213 tsy a.l002-*,* (gettib) get real tib address 01674 0 17 176 2072 1214 sta strtib-* save it for trace call 1215 01675 1216 trace tt.set,ts.tim,(setsa,strtib) end of binary card 00000026 1217 01710 4 07 256 2166 1218 lda a.l007-*,* (=itmb) get the value of the interval timer 01711 0 17 174 2105 1219 sta itimer+1-* store it away 1220 01712 0 04 166 2100 1221 ldaq simclk-* get the simulated clock value 01713 0 24 171 2104 1222 sbaq itimer-* subtract interval timer value 01714 0 14 166 2102 1223 staq ctime-* store as current time 1224 01715 0 41 174 2111 1225 ldx3 tnext-* get the next ptr 01716 0 74 017 1735 1226 tze set030-* none in queue 1227 01717 0 07 246 2165 1228 lda a.l006-* (=tnext) save addr of next ptr assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 55 setime -- routine to set time-outs for tib lines 01720 0 17 234 2154 1229 sta tlasta-* in tlasta for now 01721 0 07 151 2072 1230 lda strtib-* get real tib address 1231 01722 3 27 001 0 1232 set010 cmpa ttib,3 is this the same tib? 01723 0 74 005 1730 1233 tze set020-* yes, process 1234 01724 0 50 230 2154 1235 stx3 tlasta-* save addr of this block 01725 3 41 000 0 1236 ldx3 tfwd,3 get fwd ptr 01726 0 74 007 1735 1237 tze set030-* end of queue, done 01727 0 71 773 1722 1238 tra set010-* loop for more 1239 01730 3 07 000 0 1240 set020 lda tfwd,3 get the fwd ptr 01731 4 17 223 2154 1241 sta tlasta-*,* and store in last blk 01732 0 07 160 2112 1242 lda tfree-* get free ptr 01733 3 17 000 0 1243 sta tfwd,3 put into this block 01734 0 50 156 2112 1244 stx3 tfree-* reset free, putting this on head 1245 01735 0 07 727 1664 1246 set030 lda setsa-* restore a reg value 01736 0 74 065 2023 1247 tze set080-* zero, no new value to set 01737 0 65 005 1744 1248 tpl set031-* positive, value in seconds 01740 673 000 0 1249 ila 0 01741 473 000 0 1250 ilq 0 01742 0 66 722 1664 1251 sbq setsa-* compute positive milliseconds 01743 0 71 003 1746 1252 tra set032-* 1253 01744 1254 set031 mpy l.l001-* (=1000) convert to milliseconds 01746 0 15 134 2102 1255 set032 adaq ctime-* add in current time 01747 0 14 137 2106 1256 staq time-* save as expected timeout time end of binary card 00000027 01750 1 14 020 0 1257 staq t.time,1 update into tib 1258 01751 0 41 141 2112 1259 ldx3 tfree-* get ptr to free block 01752 0 64 015 1767 1260 tnz set050-* good, we have one 1261 01753 473 040 0 1262 ilq bufsiz load buffer size 01754 4 10 544 1520 1263 tsy a.i004-*,* (=getbuf) get the needed buffer 01755 1264 die 1 01756 0 50 134 2112 1265 stx3 tfree-* save its address 1266 01757 673 036 0 1267 ila bufsiz-2 get size minus two 01760 0337 01 0 1268 ars 1 divide by two 01761 373 002 0 1269 set040 iacx3 2 bump to next block 01762 3 50 776 0 1270 stx3 -2,3 store its addr in last fwd ptr 01763 773 777 0 1271 iaa -1 decrement count 01764 0 64 775 1761 1272 tnz set040-* loop for more 1273 01765 3 56 000 0 1274 stz 0,3 zero the last fwd ptr 01766 0 41 124 2112 1275 ldx3 tfree-* get the free ptr again 1276 01767 3 07 000 0 1277 set050 lda tfwd,3 take the block 01770 0 17 122 2112 1278 sta tfree-* update free ptr assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 56 setime -- routine to set time-outs for tib lines 01771 0 07 101 2072 1279 lda strtib-* get real tib address 01772 3 17 001 0 1280 sta ttib,3 save real tib address in blk 1281 01773 0 50 160 2153 1282 stx3 tcur-* save addr of new block 01774 0 07 171 2165 1283 lda a.l006-* (=tnext) save addr of next ptr 01775 0 17 157 2154 1284 sta tlasta-* for later reference 01776 0 41 113 2111 1285 ldx3 tnext-* get addr of chain 01777 0 74 020 2017 1286 tze set070-* no chain here 1287 02000 3 07 001 0 1288 set060 lda ttib,3 get real tib address from blk 02001 4 10 157 2160 1289 tsy a.l001-*,* (setptw) virtualize it 02002 4332 00 0 1290 cax1 put virtual tib address in x1 02003 0 04 103 2106 1291 ldaq time-* get the new time value 02004 1292 cmpaq t.time,1 is time < t.time? 02007 0 45 010 2017 1293 tnc set070-* yes, chain new block here 1294 02010 0 50 144 2154 1295 stx3 tlasta-* save addr of this blk 02011 3 41 000 0 1296 ldx3 tfwd,3 bump to next blk 02012 0 64 766 2000 1297 tnz set060-* loop if more blks to look at 1298 02013 0 41 140 2153 1299 ldx3 tcur-* pick up addr of new blk 02014 4 50 140 2154 1300 stx3 tlasta-*,* store in fwd ptr of last blk 02015 3 56 000 0 1301 stz tfwd,3 zero fwd ptr of this one 02016 0 71 005 2023 1302 tra set080-* continue 1303 end of binary card 00000028 02017 3333 00 0 1304 set070 cx3a save addr of next blk 02020 0 41 133 2153 1305 ldx3 tcur-* pick up addr of new blk 02021 4 50 133 2154 1306 stx3 tlasta-*,* store in fwd ptr of last blk 02022 3 17 000 0 1307 sta tfwd,3 reset fwd ptr of this blk 1308 02023 0 20 152 2175 1309 set080 szn itrint-* has interval timer run out? 02024 0 64 040 2064 1310 tnz set110-* yes, will be set later... 1311 02025 0 41 064 2111 1312 ldx3 tnext-* pick up next ptr again 02026 0 64 004 2032 1313 tnz set081-* there are tib entries 02027 0 20 061 2110 1314 szn runing-* timer runing? 02030 0 74 034 2064 1315 tze set110-* no, nothing at all to do 02031 0 71 030 2061 1316 tra set100-* yes, just restart from current value 1317 02032 3 07 001 0 1318 set081 lda ttib,3 get real tib address from first blk 02033 4 10 125 2160 1319 tsy a.l001-*,* (setptw) virtualize it 02034 4332 00 0 1320 cax1 put virtual tib address in x1 02035 0 20 053 2110 1321 szn runing-* is the clock running now? 02036 0 74 006 2044 1322 tze set082-* no, just set it 1323 02037 0 04 041 2100 1324 ldaq simclk-* get the simulated clk value 02040 1325 cmpaq t.time,1 is simclk < t.time? 02043 0 45 016 2061 1326 tnc set100-* yes, all set 1327 02044 1 04 020 0 1328 set082 ldaq t.time,1 get the tib time assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 57 setime -- routine to set time-outs for tib lines 02045 0 24 035 2102 1329 sbaq ctime-* subtract current time 02046 0 64 004 2052 1330 tnz set085-* 1331 02047 673 000 0 1332 ila 0 set clock to very small number 02050 473 001 0 1333 ilq 1 so we will get interrupt 02051 0 71 005 2056 1334 tra set090-* 1335 02052 773 000 0 1336 set085 iaa 0 set the indicators 02053 0 74 003 2056 1337 tze set090-* less than max, set clock 1338 02054 673 001 0 1339 ila 1 set max timer value in aq 02055 473 000 0 1340 ilq 0 all zeros in q 1341 02056 4 57 110 2166 1342 set090 stq a.l007-*,* (=itmb) reset the clock 1343 02057 0 15 023 2102 1344 adaq ctime-* add in current time to get new 02060 0 14 020 2100 1345 staq simclk-* simulated clock time, and store 1346 02061 073 077 0 1347 set100 sel tmch select the timer channel 02062 0 60 014 2076 1348 cioc runpcw-* run clock run 02063 0 76 025 2110 1349 aos runing-* is running now 1350 02064 1351 set110 null 02064 0 71 003 2067 1352 skdms3 tra set120-* set to nop by init if 64k is configured 02065 0 07 004 2071 1353 lda savpte-* get orig page table entry end of binary card 00000029 02066 4 17 102 2170 1354 sta a.l009-*,* (.crpte,*) restore page table entry 1355 02067 1356 set120 null 02067 1357 return setime 1358 1359 02071 1360 savpte bss 1 saves variable page table entry 02072 1361 strtib bss 1 saves real tib address 1362 02073 233100 0 02074 1363 even 02074 000000 0 1364 mskpcw vfd 18/0 02075 010000 0 1365 vfd 5/0,1/1,12/0 02076 000000 0 1366 runpcw vfd 18/0 02077 000000 0 1367 vfd 18/0 1368 02100 000000 0 1369 simclk oct 0,0 02101 000000 0 02102 000000 0 1370 ctime oct 0,0 02103 000000 0 02104 000000 0 1371 itimer oct 0,0 02105 000000 0 02106 000000 0 1372 time oct 0,0 02107 000000 0 1373 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 58 setime -- routine to set time-outs for tib lines 02110 000000 0 1374 runing oct 0 1375 02111 000000 0 1376 tnext oct 0 02112 0 02113 1 1377 tfree ind tque 1378 02113 1379 tque tblk 16 end of binary card 00000030 1380 1381 equates for the symbols in a tque entry 1382 000000 1383 tfwd equ 0 000001 1384 ttib equ 1 1385 1386 02153 000000 0 1387 tcur oct 0 02154 000000 0 1388 tlasta oct 0 1389 1390 02155 001750 0 1391 l.l001 dec 1000 02156 1392 even 02156 000007 0 1393 l.l002 vfd 18/intpri 02157 0 15000 3 1394 ind itmout 1395 02160 0 16000 3 1396 a.l001 ind setptw set up variable cpu page table word 02161 0 14000 3 1397 a.l002 ind gettib 02162 0 00613 1 1398 a.l003 ind dspqur 02163 0 01104 1 1399 a.l004 ind dnext 02164 0 01105 1 1400 a.l005 ind dfree 02165 0 02111 1 1401 a.l006 ind tnext 02166 0 00450 0 1402 a.l007 ind itmb 02167 0 01410 1 1403 a.l008 ind secdsp 02170 4 00702 0 1404 a.l009 ind .crpte,* variable cpu page table entry assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 59 itrout -- interval timer runout interrupt processor 1406 1407 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1408 * 1409 * itrout 1410 * 1411 * this routine handles the interval timer runout 1412 * interrupt and schedules the itrip routine to 1413 * handle the processing of the timouts. 1414 * 1415 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1416 02171 0 04 005 2176 1417 itrout ldaq l.m001-* get the priority and routine 1418 don't care whats in x1 02172 4 10 006 2200 1419 tsy a.m001-*,* (=dspqur) queue to run 1420 02173 0 76 002 2175 1421 aos itrint-* interval timer has run out. 1422 02174 4 71 005 2201 1423 tra a.m002-*,* (=mdisp) return to master dispatcher 1424 02175 000000 0 1425 itrint oct 0 02176 1426 even 02176 0 00004 0 1427 l.m001 zero itpri 02177 0 02206 1 1428 ind itrip 1429 02200 0 00613 1 1430 a.m001 ind dspqur 02201 0 00127 1 1431 a.m002 ind mdisp 1432 1433 1434 jump table for interval timer runout 1435 02202 0 00000 0 1436 timrjt zero 02203 4 10 002 2205 1437 tsy .invp-*,* end of binary card 00000031 02204 000005 0 1438 vfd 18/modtmr 1439 02205 0 00032 1 1440 .invp ind invp assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 60 itrip - interval timer processor 1442 1443 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1444 * 1445 * itrip 1446 * 1447 * this routine does the actual processing for 1448 * the interval timer runout. it finds all people 1449 * in the tib and delayq lists who have reached 1450 * the requested time. 1451 * 1452 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1453 02206 1454 itrip null called by dispatcher 1455 02206 0 56 767 2175 1456 stz itrint-* we have handled interrupt now 02207 0 56 701 2110 1457 stz runing-* not running now 02210 673 000 0 1458 ila 0 get a very small number in aq 02211 473 002 0 1459 ilq 2 to use as fudge in finding timouts 02212 0 15 666 2100 1460 adaq simclk-* get the real time of this 02213 0 14 667 2102 1461 staq ctime-* and save as current time 1462 02214 1463 trace tt.itr,ts.tim,(ctime,ctime+1) 1464 02227 0 41 662 2111 1465 ldx3 tnext-* get ptr to tib list 02230 0 74 024 2254 1466 tze itr020-* no tibs in tib list 1467 02231 3 07 001 0 1468 itr010 lda ttib,3 get ptr to first tib in list 02232 4 10 726 2160 1469 tsy a.l001-*,* (setptw) virtualize it 02233 4332 00 0 1470 cax1 put virtual tib address in x1 02234 0 04 646 2102 1471 ldaq ctime-* get current time 02235 1472 cmpaq t.time,1 is ctime < t.time? 02240 0 45 014 2254 1473 tnc itr020-* yes, all done 1474 no, give timeout 02241 3 43 001 0 1475 ldx1 ttib,3 need real tib address for dspqur 02242 0 04 714 2156 1476 ldaq l.l002-* get priority and addr of itmout 02243 4 10 717 2162 1477 tsy a.l003-*,* (=dspqur) queue it up, real tib in x1 1478 02244 3 07 000 0 1479 lda tfwd,3 save old fwd ptr 02245 0 47 645 2112 1480 ldq tfree-* get the free ptr 02246 3 57 000 0 1481 stq tfwd,3 save as fwd ptr of this one 02247 0 50 643 2112 1482 stx3 tfree-* make this one first free 1483 02250 4333 00 0 1484 cax3 bump to next block 02251 0 50 640 2111 1485 stx3 tnext-* point the que head at this blk 02252 373 000 0 1486 iacx3 0 set the indicators end of binary card 00000032 02253 0 64 756 2231 1487 tnz itr010-* loop if more blks to look at 1488 02254 4 41 707 2163 1489 itr020 ldx3 a.l004-*,* (=dnext) get delayq next ptr 02255 0 74 022 2277 1490 tze itr040-* none in queue now 1491 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 61 itrip - interval timer processor 02256 0 04 624 2102 1492 itr030 ldaq ctime-* get the current time 02257 1493 cmpaq dtime,3 compare: is ctime < dtime? 02262 0 45 015 2277 1494 tnc itr040-* yes, all done 1495 no, give time out 02263 3 07 005 0 1496 lda dpri,3 get the priority 02264 3 47 001 0 1497 ldq drtn,3 and the routine addr 02265 3 43 004 0 1498 ldx1 dx1,3 and his value in x1 02266 4 10 674 2162 1499 tsy a.l003-*,* (=dspqur) and queue him to run 1500 02267 3 07 000 0 1501 lda dfwd,3 get the fwd ptr in this blk 02270 4 47 674 2164 1502 ldq a.l005-*,* (=dfree) get the free ptr 02271 3 57 000 0 1503 stq dfwd,3 and put into this blk 02272 4 50 672 2164 1504 stx3 a.l005-*,* (=dfree) and put this on at top 1505 02273 4333 00 0 1506 cax3 bump to next guy in list 02274 4 50 667 2163 1507 stx3 a.l004-*,* (=dnext) point head at this one 02275 373 000 0 1508 iacx3 0 set the indicators 02276 0 64 760 2256 1509 tnz itr030-* loop for more work 1510 02277 0 56 067 2366 1511 itr040 stz itrsw-* zero the switch word 1512 02300 0 20 611 2111 1513 szn tnext-* any tibs in tib list? 02301 0 74 003 2304 1514 tze 3 no 1515 02302 673 001 0 1516 ila 1 yes, set bit 02303 0 72 063 2366 1517 orsa itrsw-* 1518 02304 4 20 657 2163 1519 szn a.l004-*,* (=dnext) any entries in delayq? 02305 0 74 003 2310 1520 tze 3 no 1521 02306 673 002 0 1522 ila 2 yes, set other bit 02307 0 72 057 2366 1523 orsa itrsw-* 1524 02310 0 41 056 2366 1525 ldx3 itrsw-* load the switch word 02311 4 71 057 2370 1526 tra a.n001-*,* (=itrtbl,3*) use as index to label array 1527 02312 0 02316 1 1528 itrtbl ind itr041 no timers needed 02313 0 02322 1 1529 ind itr042 only tib timers set 02314 0 02330 1 1530 ind itr043 only delayq timers on 02315 0 02333 1 1531 ind itr044 both set, compare 1532 02316 673 000 0 1533 itr041 ila 0 set standard time for clock 02317 0 47 050 2367 1534 ldq l.n001-* (=60*1000) so we idle for a minute 02320 0 15 562 2102 1535 adaq ctime-* add it in so we can subtract it out 02321 0 71 025 2346 1536 tra itr050-* set clock 1537 end of binary card 00000033 02322 0 41 567 2111 1538 itr042 ldx3 tnext-* get ptr to first tib entry 02323 3 07 001 0 1539 lda ttib,3 get real tib address 02324 4 10 634 2160 1540 tsy a.l001-*,* (setptw) virtualize it 02325 4332 00 0 1541 cax1 put virtual tib address in x1 assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 62 itrip - interval timer processor 02326 1 04 020 0 1542 ldaq t.time,1 have tib time 02327 0 71 017 2346 1543 tra itr050-* set clock 1544 02330 4 41 633 2163 1545 itr043 ldx3 a.l004-*,* (=dnext) get ptr to delayq list 02331 3 04 002 0 1546 ldaq dtime,3 get first delayq time 02332 0 71 014 2346 1547 tra itr050-* set clock 1548 02333 0 41 556 2111 1549 itr044 ldx3 tnext-* get ptr to tib list 02334 3 07 001 0 1550 lda ttib,3 get real ptr to first tib in list 02335 4 10 623 2160 1551 tsy a.l001-*,* (setptw) virtualize it 02336 4332 00 0 1552 cax1 put virtual tib address in x1 02337 1 04 020 0 1553 ldaq t.time,1 get the tib time 1554 02340 4 41 623 2163 1555 ldx3 a.l004-*,* (=dnext) get ptr to delay list 02341 1556 cmpaq dtime,3 is t.time < dtime? 02344 0 45 002 2346 1557 tnc itr050-* yes, all set 1558 02345 3 04 002 0 1559 ldaq dtime,3 get the delay q time instead 1560 02346 0 24 534 2102 1561 itr050 sbaq ctime-* subtract current time to get interval 02347 0 64 004 2353 1562 tnz itr055-* non-zero, all set 1563 02350 673 000 0 1564 ila 0 set to a very 02351 473 001 0 1565 ilq 1 small number to get interrupt 02352 0 71 005 2357 1566 tra itr060-* 1567 02353 773 000 0 1568 itr055 iaa 0 set indicators 02354 0 74 003 2357 1569 tze itr060-* less than max timer values, all set 1570 02355 673 001 0 1571 ila 1 set max value allowed 02356 473 000 0 1572 ilq 0 1573 02357 4 57 607 2166 1574 itr060 stq a.l007-*,* (=itmb) put into timer loc 02360 0 15 522 2102 1575 adaq ctime-* get next simclk time 02361 0 14 517 2100 1576 staq simclk-* and save it away 1577 02362 073 077 0 1578 sel tmch select timer 02363 0 60 513 2076 1579 cioc runpcw-* start the clock, run, run, run. 02364 0 76 524 2110 1580 aos runing-* running again 1581 02365 4 71 602 2167 1582 itr070 tra a.l008-*,* (=secdsp) return dispatcher 1583 02366 1584 itrsw bss 1 1585 02367 165140 0 1586 l.n001 dec 60000 1587 end of binary card 00000034 02370 7 02312 1 1588 a.n001 ind itrtbl,3* end of binary card 00000035 1589 end 2372 is the next available location. assm 01 12-10-82 16.006 multics/fnp scheduler and timer manager page 63 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 12-10-82 16.015 multics/fnp scheduler and timer manager page 64 octal symbol references by sequence no. 126 a.a001 397 390 397 541 611 a.c001 626 600 626 612 a.c002 627 603 627 760 a.d001 702 663 702 761 a.d002 703 681 703 762 a.d010 704 654 704 1300 a.e003 837 734 812 837 1301 a.e004 838 737 794 814 838 1302 a.e005 839 763 839 1303 a.e006 840 732 840 1304 a.e007 841 817 841 1305 a.e008 842 791 818 842 1306 a.e009 843 787 843 1307 a.e012 844 844 913 1443 a.h001 981 951 981 1444 a.h002 982 947 957 982 1445 a.h003 983 950 983 1446 a.h004 984 958 960 984 1447 a.h005 985 969 985 1043 1088 1208 1515 a.i001 1065 1052 1065 1516 a.i002 1066 1033 1066 1083 1517 a.i003 1067 1050 1067 1520 a.i004 1068 867 1068 1263 2160 a.l001 1396 1289 1319 1396 1469 1540 1551 2161 a.l002 1397 1213 1397 2162 a.l003 1398 1398 1477 1499 2163 a.l004 1399 1399 1489 1507 1519 1545 1555 2164 a.l005 1400 1400 1502 1504 2165 a.l006 1401 1228 1283 1401 2166 a.l007 1402 1218 1342 1402 1574 2167 a.l008 1403 1403 1582 2170 a.l009 1404 1354 1404 2200 a.m001 1430 1419 1430 2201 a.m002 1431 1423 1431 2370 a.n001 1588 1526 1588 1631 a.o001 1162 1127 1143 1162 1632 a.o002 1163 1148 1163 1633 a.o003 1164 1150 1164 4 asv 288 288 329 381 40 bufsiz 132 132 133 866 1262 1267 3 chkiv 62 11 consol 67 563 0 crtwd 86 86 349 410 488 491 684 2102 ctime 1370 1223 1255 1329 1344 1370 1461 1463 1471 1492 1535 1561 1575 1100 curtim 825 739 758 799 813 825 15 datta 298 298 352 323 dattab 572 298 572 627 764 delayq 729 650 729 1105 dfree 829 741 746 829 1400 0 dfwd 850 745 774 779 785 850 1501 1503 1276 dlasta 833 764 773 778 784 833 assm 01 12-10-82 16.015 multics/fnp scheduler and timer manager page 65 octal symbol references by sequence no. 1106 dlyque 831 829 831 4 dmail 65 560 1277 dnew 834 762 777 783 834 1104 dnext 828 766 790 828 839 1399 5 dpri 854 750 854 1496 0 dqlink 110 110 660 669 675 678 956 959 10 dqlpb 133 133 877 3 dqpri 113 113 657 672 961 1023 dqr010 769 769 775 1037 dqr020 782 767 771 782 1043 dqr030 787 780 787 1055 dqr032 798 792 798 1063 dqr035 806 800 806 1067 dqr040 812 804 807 812 1072 dqr050 816 796 816 1075 dqr060 820 788 820 1 dqrtn 111 111 658 975 703 dque 693 666 693 702 982 2 dqx1 112 112 659 972 1 drtn 851 752 851 1497 17 dspi 300 300 424 671 dspq10 678 673 678 672 dspq12 680 670 680 700 dspq20 688 688 820 651 dspq2 657 653 657 664 dspq6 672 667 672 676 613 dspqur 643 38 643 689 1065 1398 1430 1422 dspr10 956 948 956 1435 dspr20 971 967 971 322 dspsz 570 437 570 14 dspta 297 297 345 408 482 511 262 dsptab 557 297 300 557 570 13 dstnum 295 295 374 404 415 481 546 626 5 dterm 64 559 2 dtime 852 759 770 795 798 852 1493 1546 1556 1559 1076 dtimer 824 735 738 824 702 dtmp1 691 664 674 680 691 3 dtsv 287 287 336 364 370 4 dx1 853 754 853 1498 1 entcnt 103 103 354 358 362 451 etmb 78 78 1164 1566 etr010 1127 1120 1123 1127 1575 etr020 1132 1129 1132 1602 etr030 1135 1131 1133 1135 1610 etr035 1141 1118 1141 1613 etr040 1146 1125 1146 1616 etr050 1149 1147 1149 1626 etrcum 1158 1121 1124 1144 1158 1644 etrint 1175 46 1149 1175 1537 etrip 1115 42 1115 1154 1645 etrmon 1176 45 1146 1176 assm 01 12-10-82 16.015 multics/fnp scheduler and timer manager page 66 octal symbol references by sequence no. 1625 etrprv 1157 1117 1153 1157 10 excmsk 292 292 409 427 490 2 excnt 104 104 606 610 611 614 200000 exctbt 140 140 142 292 12 frelbf 70 844 576 g3wjt5 613 608 613 555 g3wjt 598 39 598 622 1336 get010 879 879 882 13 getbuf 69 1068 1311 getqlk 864 704 864 869 885 887 14 gettib 73 1397 525 grph 575 575 1061 545 grpl 577 577 1063 535 grpm 576 576 1062 1512 grptbl 1061 1061 1066 6 hintr 63 561 11 h.sfcm 80 80 620 213 hv1 490 485 490 253 hvint8 543 539 543 217 hvint 505 428 505 200 hvreq 476 434 476 7 icmon 72 1163 1 icreg 285 285 338 370 531 552 243 ictr5 531 527 531 242 ictr 529 522 529 174 idlcnt 471 50 464 465 471 1162 1634 idlcum 1171 1135 1136 1171 173 idlend 468 48 468 1636 idlinc 1172 1139 1140 1172 1627 idlint 1159 49 1119 1122 1159 1640 idlmax 1173 51 1132 1134 1173 1642 idlmin 1174 52 1128 1130 1174 164 idloop 461 47 461 467 0 indreg 284 284 327 387 538 551 1500 int010 1046 1042 1046 1506 int020 1055 1024 1055 3 inta 123 123 386 544 1034 1091 6 intic 126 126 524 529 1041 5 intir 125 125 388 537 1038 1084 7 intpri 153 153 1393 7 intptw 127 127 391 540 1044 1087 1451 intsv 1019 567 1019 1029 1040 0 intx1 120 120 384 548 1039 1094 1 intx2 121 121 382 547 1035 1092 2 intx3 122 122 385 536 1036 1093 125 invp10 393 389 393 64 invp5 361 356 361 32 invp 326 37 326 334 1440 2104 itimer 1371 1219 1222 1371 450 itmb 78 78 837 1402 15 itmout 71 1394 assm 01 12-10-82 16.015 multics/fnp scheduler and timer manager page 67 octal symbol references by sequence no. 4 itpri 154 154 1427 2231 itr010 1468 1468 1487 2254 itr020 1489 1466 1473 1489 2256 itr030 1492 1492 1509 2277 itr040 1511 1490 1494 1511 2316 itr041 1533 1528 1533 2322 itr042 1538 1529 1538 2330 itr043 1545 1530 1545 2333 itr044 1549 1531 1549 2346 itr050 1561 1536 1543 1547 1557 1561 2353 itr055 1568 1562 1568 2357 itr060 1574 1566 1569 1574 2175 itrint 1425 843 1309 1421 1425 1456 2206 itrip 1454 1428 1454 2171 itrout 1417 562 1417 2366 itrsw 1584 1511 1517 1523 1525 1584 2312 itrtbl 1528 1528 1588 702 .crpte 81 81 397 985 1404 2205 .invp 1440 1437 1440 1 lip 66 558 610 l.c001 624 617 624 763 l.d001 706 683 706 1310 l.e002 846 757 846 1450 l.h001 987 974 987 2155 l.l001 1391 1254 1391 2156 l.l002 1393 1393 1476 2176 l.m001 1427 1417 1427 2367 l.n001 1586 1534 1586 1630 l.o001 1161 1116 1161 704 lnkchn 696 655 696 953 983 707 lnkptr 699 652 661 699 984 4 macwk1 1202 598 622 643 689 864 887 895 917 1115 1154 1202 1357 11 macwk2 1202 598 643 864 895 1115 1202 2 macwk3 1463 370 1216 1463 6 macwk4 1463 370 1216 1463 127 mdisp 402 37 402 981 1431 77 modmk 149 149 340 1 modnum 306 306 370 743 868 1216 1264 1463 2 modsv 286 286 343 353 5 modtmr 135 135 1438 137 msdsp 414 37 375 394 414 3 msk 105 105 355 607 2074 mskpcw 1364 840 1205 1364 144 msrch 423 423 438 24 nmdqlk 116 116 831 12 nmqlk 115 115 697 700 226 noscp 514 508 514 1102 ntime 826 760 769 826 154 nxmd 436 425 431 436 1441 prdrt 978 946 963 978 1023 1032 1047 1082 1 prent 87 87 498 assm 01 12-10-82 16.015 multics/fnp scheduler and timer manager page 68 octal symbol references by sequence no. 100 pte.s 989 968 989 633 qursa 643 643 647 748 755 634 qursq 643 643 648 751 635 qursx1 643 643 753 1375 rel010 905 905 908 1346 relqlk 895 895 897 915 917 952 7 reqbt 291 291 348 433 487 1521 restor 1080 1067 1080 3 rqcnt 89 89 350 484 686 400000 rqstbt 139 139 142 291 706 1531 rstr10 1090 1086 1090 2110 runing 1374 842 1314 1321 1349 1374 1457 1580 2076 runpcw 1366 841 1348 1366 1579 2071 savpte 1360 1209 1353 1360 16 savra 299 299 380 517 363 savtab 572 299 572 100000 scdent 141 141 142 293 565 316 scdspa 565 565 703 2 scent 88 88 512 1410 secdsp 940 38 566 940 954 1055 1403 11 secmsk 293 293 507 1672 set005 1211 1207 1211 1722 set010 1232 1232 1238 1730 set020 1240 1233 1240 1735 set030 1246 1226 1237 1246 1744 set031 1254 1248 1254 1746 set032 1255 1252 1255 1761 set040 1269 1269 1272 1767 set050 1277 1260 1277 2000 set060 1288 1288 1297 2017 set070 1304 1286 1293 1304 2023 set080 1309 1247 1302 1309 2032 set081 1318 1313 1318 2044 set082 1328 1322 1328 2052 set085 1336 1330 1336 2056 set090 1342 1334 1337 1342 2061 set100 1347 1316 1326 1347 2064 set110 1351 1310 1315 1351 2067 set120 1356 1352 1356 1646 setime 1202 41 1202 1357 16 setptw 74 1396 1664 setsa 1202 1202 1216 1246 1251 2100 simclk 1369 40 838 1221 1324 1345 1369 1460 1576 1634 skdata 1170 44 1170 1432 skdms1 967 53 967 1667 skdms2 1207 54 1207 2064 skdms3 1352 55 1352 122 skdms4 389 56 389 250 skdms5 539 57 539 1475 skdms6 1042 58 1042 1526 skdms7 1086 59 1086 assm 01 12-10-82 16.015 multics/fnp scheduler and timer manager page 69 octal symbol references by sequence no. 0 sked 281 36 281 306 0 stadd 102 102 361 613 2072 strtib 1361 1214 1216 1230 1279 1361 12 supmsk 294 294 430 77777 suprmk 142 142 294 1510 sv1 1058 1021 1027 1037 1058 1085 1095 1511 sv2 1059 1031 1059 1096 1462 svrg 1031 1025 1031 1442 svx1 979 973 979 1051 176 tcint 472 446 472 177 tcrier 473 445 473 2153 tcur 1387 1282 1299 1305 1387 2 tdip 68 564 2112 tfree 1377 1242 1244 1259 1265 1275 1278 1377 1480 1482 0 tfwd 1383 1236 1240 1243 1277 1296 1301 1307 1383 1479 1481 2106 time 1372 1256 1291 1372 2202 timrjt 1436 43 1436 4 t.line 79 79 1212 20 t.time 79 79 1257 1292 1325 1328 1472 1542 1553 2154 tlasta 1388 1229 1235 1241 1284 1295 1300 1306 1388 77 tmch 78 78 731 816 1204 1347 1578 2111 tnext 1376 1225 1285 1312 1376 1401 1465 1485 1513 1538 1549 2113 tque 1379 1377 1379 10 trace 61 370 1216 1463 2 ts.int 169 169 370 10 ts.tim 171 171 1216 1463 1 ttib 1384 1232 1280 1288 1318 1384 1468 1475 1539 1550 1 tt.int 159 159 370 7 tt.itr 165 165 1463 6 tt.set 164 164 1216 5 x1sv 289 289 330 383 505 514 6 zerow 290 290 421 497 ** 47335 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