assm 01 12-10-82 16.057 fnp utility programs for mcs page 1 preface this program will be loaded mod 8 program break 5310 common length 0 v count bits 5 primary symdef entry util 0 meterc 3516 metert 3544 gettib 1320 exist 12 hfv 13 ignore 544 badint 33 iomflt 35 conabt 37 end of binary card 00000001 octasc 1303 conchn 334 outprc 3062 fulbuf 3472 chkiv 1364 utsave 312 puteco 2516 inproc 1430 move 2364 setptw 4036 end of binary card 00000002 mvpgsc 4061 mvpgtg 4101 mvplmm 4224 conman 765 getbuf 4250 frebuf 4566 frelbf 4706 getubf 4225 getmem 4352 fremem 4635 end of binary card 00000003 fresml 5216 getbfm 4546 bfcksw 4705 secondary symdef entry .chain 0 m.004. 2004 m.009. 2666 m.012. 2760 assm 01 12-10-82 16.057 fnp utility programs for mcs page 2 m.018. 4264 x.022. 4322 m.027. 4461 end of binary card 00000004 m.031. 4475 x.035. 4603 x.040. 4644 x.045. 4717 block length symref 1 ctrl 2 denq 3 dmbx 4 wcon 5 derrq 6 istat end of binary card 00000005 7 itest 10 mincd 11 mincs 12 trace 13 contip 14 dicell 15 dspqur 16 ecgifl 17 hcheck 20 mupdat end of binary card 00000006 21 secdsp 22 simclk end of binary card 00000007 assm 01 12-10-82 16.057 fnp utility programs for mcs 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 ,utilities assm 01 12-10-82 16.057 fnp utility programs for mcs page 4 12 *************************************************************************** 13 * 14 * note: cs means "central system" 15 * 16 *************************************************************************** 17 * change list 18 * 19 * modified on july 24, 1972 by rbs to add code to handle dia 20 * 21 * modified october 1974 by rsc for new system 22 * 23 * modified july 4 1979 by bsg for echo negotiation 24 * 25 * modified 1979 august 23 by art beattie to add 'setptw', 'mvpgsc' and 26 * 'mvpgtg' routines. 27 * 28 * modified january 19, 1981 by robert coren to add metering 29 *************************************************************************** 30 31 32 pcc on 33 pmc off 34 detail on 35 editp on 36 37 38 symdef util 39 40 system service package 41 symdef meterc counting meter subroutine 42 symdef metert timing meter subroutine 43 symdef gettib get a tib address 44 symdef exist * summary of iom channels that exist 45 symdef hfv hardware fault vector entry base address 46 symdef ignore ignore interrupts routine 47 symdef badint extraneous interrupts routine 48 symdef iomflt iom channel fault routine 49 symdef conabt console operator abort 50 symdef octasc binary-octal ascii routine 51 symdef conchn console channel number 52 symdef outprc subroutine to process "output" subop 53 symdef fulbuf subroutine to check if a buffer is full 54 symdef chkiv checks interrupt vectors 55 symdef utsave place where registers get saved 56 symdef puteco subroutine to add char to echo buffer 57 symdef inproc subroutine to copy chars into input buffers 58 symdef move looks up chars in carriage movement table 59 symdef setptw converts absolute address to a virtual address 60 symdef mvpgsc move data paging source address 61 symdef mvpgtg move data paging target address 62 symdef mvplmm move paged lower memory maximum address 63 symdef conman set to -1 by init if console_man is in image 64 assm 01 12-10-82 16.057 fnp utility programs for mcs page 5 65 symdef getbuf 66 symdef frebuf 67 symdef frelbf 68 symdef getubf 69 symdef getmem 70 symdef fremem 71 symdef fresml 72 symdef getbfm interrupt time metering area 73 74 symref dicell cs interrupt cells 75 symref dmbx cs mailbox address 76 symref contip interrupt processor for console terminate 77 symref wcon routine to write on console 78 symref ctrl control tables 79 symref istat status entry of interpreter 80 symref itest test-state entry of interpreter 81 symref trace 82 symref ecgifl accept-input queuer 83 symref denq dia enqueuing routine 84 symref derrq dia error message queue 85 symref hcheck hsla_man starts echoing 86 symref simclk simulated clock value 87 symref dspqur dispatcher queuer 88 symref secdsp secondary dispatcher 89 symref mincs 90 symref mincd 91 symref mupdat 92 93 94 pmc save,on 00000 95 util null 00000 96 start util,4 symdef -.chain crsm save,off 00000 even ine '4','',2 000004 modnum equ 4 00000 000004 0 .chain dec 4 ife '4','',1 crsm restore 00001 646331 0 bci 2,util 00002 432020 0 00003 0 00000 1 ind util 00004 010201 0 date 00005 001002 0 ine '.001.','',1 00006 330000 0 bci 4,.001. 00007 013320 0 00010 202020 0 00011 202020 0 97 98 assm 01 12-10-82 16.070 fnp utility programs for mcs page 6 multiply and divide macros 99 ttls multiply and divide macros 100 101 mpy macro (multiplier loca tion-*) 102 mpf #1 103 lrl 1 104 endm mpy 105 106 107 dvd macro (divisor locatio n-*) 108 qls 1 109 dvf #1 110 endm dvd 111 00012 112 systm assm 01 12-10-82 16.070 fnp utility programs for mcs page 7 datanet configuration description ttls 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.070 fnp utility programs for mcs page 8 datanet configuration description eject ************************* * 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 assm 01 12-10-82 16.070 fnp utility programs for mcs page 9 datanet configuration description 000363 dis15 set 243 dia special - 15 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.070 fnp utility programs for mcs page 10 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 assm 01 12-10-82 16.070 fnp utility programs for mcs page 11 datanet configuration description 000305 h1a28 set 197 hsla 1 subch 28 active terminate vector 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.070 fnp utility programs for mcs page 12 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.070 fnp utility programs for mcs page 13 datanet configuration description eject 1 *************************** * 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.070 fnp utility programs for mcs page 14 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.070 fnp utility programs for mcs page 15 datanet configuration description eject ************************************ * 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 113 00012 114 comreg assm 01 12-10-82 16.070 fnp utility programs for mcs page 16 system communications region ttls 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 assm 01 12-10-82 16.070 fnp utility programs for mcs page 17 system communications region 000676 .crcct set 446 address of first cct descriptor 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 115 00012 116 tib assm 01 12-10-82 16.070 fnp utility programs for mcs page 18 terminal information block (tib) ttls 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.070 fnp utility programs for mcs page 19 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.070 fnp utility programs for mcs page 20 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 assm 01 12-10-82 16.070 fnp utility programs for mcs page 21 terminal information block (tib) 002000 tfcrec bool 002000 do cr echo on lf 004000 tftbec bool 004000 do space echo on tab 010000 tfwabt bool 010000 do write abort 020000 tfauto bool 020000 this is hsla autobaud line 040000 tfeotx bool 040000 eot expected from 2741 100000 tfisus bool 100000 input suspended 200000 tfecpx bool 200000 echoplex mode 400000 tfosus bool 400000 output suspended ******************************** * second word of tib flags ******************************** 000001 tfxhld bool 000001 hold transmit on 000002 tfdild bool 000002 terminal is dialed up 000004 tfercv bool 000004 enter receive mode 000010 tfrabt bool 000010 do read abort 000020 tfacu bool 000020 do dial out 000040 tfifc bool 000040 input flow control mode 000100 tfofc bool 000100 output flow control mode 000200 tfupsf bool 000200 terminal is upshifted now 000400 tfrply bool 000400 replay mode 001000 tfrpon bool 001000 replay is occurring now 002000 tfplit bool 002000 polite mode 004000 tfblak bool 004000 asynchronous block acknowledgement 010000 tfcrcv bool 010000 'control' receive mode 020000 tfmrcv bool 020000 'message' receive mode 040000 tffrmi bool 040000 frame mode assm 01 12-10-82 16.070 fnp utility programs for mcs page 22 terminal information block (tib) 100000 tffip bool 100000 frame in progress 200000 tfsftr bool 200000 terminal is shifting device 400000 tfpfnl bool 400000 line is in prefixnl mode ********************************* * third word of tib flags ********************************* 000001 tfbkpt bool 000001 line is stopped at breakpoint 000002 tfitim bool 000002 timeout if input stops 000004 tfkpar bool 000004 keep parity bits 000010 tfecho bool 000010 echoing has priority over output (lsla) 000020 tfbral bool 000020 break on all characters 000040 tfsked bool 000040 input timeout routine scheduled 000100 tf8in bool 000100 don't strip input parity 000200 tf8out bool 000200 don't strip output parity 000400 tfoddp bool 000400 odd parity 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 117 00012 118 meters assm 01 12-10-82 16.070 fnp utility programs for mcs page 23 system-wide meters ttls system-wide meters 000720 .mdilc set 464 cumulative no. of channels dialed 000722 .mdilu set 466 updates of .mdilc 000724 .mspav set 468 cumulative space available 000726 .mspau set 470 updates of .mspav 000730 .mimbx set 472 cumulative number of mbxes in use 000732 .mimbu set 474 updates of .mimbx 000734 .mndil set 476 current no. of channels dialed 000735 .malof set 477 number of space allocation failures 000736 .mdias set 478 abnormal dia status 000737 .mpool set 479 total size of buffer pool (in words) 000740 .mbufa set 480 number of buffer allocations 000742 .mbfpa set 482 number of buffers pre-allocated 000744 .mupab set 484 used a pre-allocated buffer 000746 .mpanf set 486 no pre-allocated buffer available 000030 .mleng equ .mpanf+2-.mdilc length of system-wide meters assm 01 12-10-82 16.070 fnp utility programs for mcs page 24 per-channel meters ttls per-channel meters meters for all channels 000000 m.dql equ 0 cumulative length of dia request queue 000002 m.dqu equ m.dql+2 updates of m.dql 000004 m.nst equ m.dqu+2 cumulative no. of pending status 000006 m.nsu equ m.nst+2 updates of m.nst 000010 m.over equ m.nsu+2 output overlaps 000011 m.par equ m.over+1 parity errors 000012 m.ssqo equ m.par+1 software status queue overflows 000013 m.hsqo equ m.ssqo+1 hardware status queue overflows 000014 m.inaf equ m.hsqo+1 input allocation failures 000015 m.cql equ m.inaf+1 current length of dia request queue 000016 m.exh equ m.cql+1 exhaust status 000020 m.xte equ m.exh+2 software xte status 000022 m.leng equ m.xte+2 length of common meters (must be even) additional meters for asynchronous channels 000022 m.prex equ m.leng pre-exhaust status 000024 m.ebof equ m.prex+2 echo buffer overflows 000026 m.quit equ m.ebof+2 bell-quits 000030 m.asyl equ m.quit+2 total length of asynchronous meters (must be even) additional meters for synchronous channels 000022 m.nim equ m.leng number of input messages 000024 m.iml equ m.nim+2 cumulative length of input 000026 m.mini equ m.iml+2 minimum length of input message assm 01 12-10-82 16.070 fnp utility programs for mcs page 25 per-channel meters 000027 m.maxi equ m.mini+1 maximum length of input message 000030 m.nom equ m.maxi+1 number of output messages 000032 m.oml equ m.nom+2 cumulative length of output 000034 m.mino equ m.oml+2 minimum length of output message 000035 m.maxo equ m.mino+1 maximum length of output message 000036 m.cnt1 equ m.maxo+1 first type of counter 000040 m.cnt2 equ m.cnt1+2 second type of counter 000042 m.cnt3 equ m.cnt2+2 third type of counter 000044 m.cnt4 equ m.cnt3+2 fourth type of counter 000046 m.cnt5 equ m.cnt4+2 fifth type of counter 000050 m.cnt6 equ m.cnt5+2 sixth type of counter 000052 m.cnt7 equ m.cnt6+2 seventh type of counter 000054 m.cnt8 equ m.cnt7+2 eighth type of counter 000056 m.synl equ m.cnt8+2 total length of synchronous meters 119 00012 120 intm ********************************************** * structure describing meters of time spent in * inhibited routines ********************************************** 000000 it.tot equ 0 running total of time spent 000002 it.inc equ 2 number of updates to it.tot 000004 it.gt1 equ 4 number of times time spent was > 1 msec 000007 it.max equ 7 maximum time spent in one invocation (right half of doubleword) 121 00012 122 sfcm hsla pcc save,off assm 01 12-10-82 16.070 fnp utility programs for mcs page 26 sfcm for hsla 000000 sf.hcm equ 0 addr of hwcm 000001 sf.nxa equ sf.hcm+1 addr of next available queue entry 000002 sf.nxp equ sf.nxa+1 addr of next queue entry to process 000003 sf.tly equ sf.nxp+1 tally of status queue 000004 sf.tib equ sf.tly+1 addr of tib for this line 000005 sf.flg equ sf.tib+1 flag word 000006 sf.ib0 equ sf.flg+1 pointer to input buffer 1 000007 sf.ib1 equ sf.ib0+1 pointer to input buffer 2 000010 sf.ob0 equ sf.ib1+1 pointer to output buffer 1 000011 sf.ob1 equ sf.ob0+1 pointer to output buffer 2 000012 sf.pcw equ sf.ob1+1 current pcw 2nd word 000013 sf.cct equ sf.pcw+1 cct addr for this line, if non-zero 000014 sf.rct equ sf.cct+1 repeat count for status queue overflows 000015 sf.hsl equ sf.rct+1 address of hsla table entry for this line 000016 sf.bsz equ sf.hsl+1 max buffer size 000017 sf.fbs equ sf.bsz+1 buffer size to be used during frame input 000020 sf.mms equ sf.fbs+1 maximum synchronous message size 000020 sf.csz equ sf.mms current asynchronous buffer size 000021 sf.rms equ sf.mms+1 remaining unallocated message length 000021 sf.nic equ sf.rms char. address of next asynchronous input 000022 sf.noc equ sf.nic+1 char address of next asynchronous output 000023 sf.ssl equ sf.noc+1 number of entries in software status queu 000024 sf.cfg equ sf.ssl+1 2 words for config pcw 000026 sf.sta equ sf.cfg+2 hardware status q, sicw here 000005 sfhsiz equ 5 number of entries in hardware status buf room for 6 status words assm 01 12-10-82 16.070 fnp utility programs for mcs page 27 sfcm for hsla 000042 sf.est equ sf.sta+sfhsiz*2+2 000042 sf.hln equ sf.est 000042 sf.waq equ sf.est wrap around queue, software status q 000012 sfssq equ 10 length of "short" software status queue 000024 sflsq equ 20 length of "long" software status queue (used for hdlc and bisync lines) 000054 sf.sln equ sf.hln+sfssq 000066 sf.lln equ sf.hln+sflsq sfcm flag definitions 000001 sffskd bool 000001 status processor is scheduled 000002 sffcii bool 000002 on if alternate input icw is active 000004 sffcoi bool 000004 on if alternate output icw is active 000010 sffisc bool 000010 inactive subchannel flag 000020 sffsct bool 000020 short cct flag 000040 sffebd bool 000040 ebcdic data code on this line 000100 sffech bool 000100 tab, cr, lf echo going on now 000200 sffdct bool 000200 dynamic (sharable) cct in use for channel 000400 sffstp bool 000400 stop channel, rxmit done 002000 sffbsc bool 002000 binary synchronous device 004000 sffsqo bool 004000 status queue overflow pending 010000 sffsyn bool 010000 any synchronous line type 020000 sffmsp bool 020000 marker status pending 040000 sffofr bool 040000 old setting of tffrmi (lines up on tffrmi 100000 sffnib bool 100000 need to allocate new input buffer(s) 200000 sffssb bool 200000 copied alternate buffer back to output ch 400000 sffhdl bool 400000 uses hdlc channel board assm 01 12-10-82 16.070 fnp utility programs for mcs page 28 sfcm for hsla 000002 sfhmk equ 2 x-or mask to switch icw addrs 000001 sfbfmk equ 1 x-or mask to switch i-or-ob1/2 addrs pcc restore 123 00012 124 buffer assm 01 12-10-82 16.070 fnp utility programs for mcs page 29 buffer format ttls buffer format 000000 bf.nxt equ 0 address of next buffer in chain 000001 bf.siz equ bf.nxt+1 size of buffer (bits0-2) 000001 bf.flg equ bf.nxt+1 flags (bits3-8) 000001 bf.tly equ bf.nxt+1 tally of buffer (bits9-17) 000002 bf.dta equ bf.siz+1 start of data 000040 bufsiz equ 32 buffer size 000074 bufnch equ bufsiz*2-4 number of data characters in a buffer 000050 bufmax equ 40 maximum number of input buffers 000012 bufpre equ 10 number of buffers to trigger pre-exhaust 000005 bufshf equ 5 number of bits shifted to divide by bufsi 000024 bufres equ 20 number of reserved buffers 700000 bufsmk bool 700000 mask to isolate bf.siz 077000 buffmk bool 077000 mask to isolate bf.flg 000777 buftmk bool 000777 mask to isolate bf.tly 000002 bufthr equ 2 threshold at which to send send_output 000400 bfmsiz equ 256 maximum buffer size in words ******************************** * buffer flags ******************************** 040000 bfflst bool 040000 last buffer in message 020000 bffbrk bool 020000 buffer contains break character 010000 bfftra bool 010000 throw away this buffer when done inputtin 004000 bffrpy bool 004000 buffer is last in replay chain 002000 bffctl bool 002000 buffer consists of keybd/prtr control 001000 bffhld bool 001000 hold output buffer until dmpout 125 assm 01 12-10-82 16.070 fnp utility programs for mcs page 30 buffer format 00012 126 devtab assm 01 12-10-82 16.070 fnp utility programs for mcs page 31 device table entry (devtab) ttls device table entry (devtab) two characters used alternately for 000000 dt.seq equ 0 sequencing 000001 dt.cct equ dt.seq+1 address of default cct (hsla only) address of array of keyboard addressing 000002 dt.key equ dt.cct+1 sequences address of array of printer addressing 000003 dt.prt equ dt.key+1 sequences 000004 dt.flg equ dt.prt+1 flags(one word) 000005 dt.cmt equ dt.flg+1 carriage movement table (6 chars) 000010 dt.brk equ dt.cmt+3 default break list (4 words) (lsla only) flags 000001 dtfctl bool 000001 default setting of tfctrl (in tib) 000002 dtfsct bool 000002 default setting of short cct flag 000004 dtfsft bool 000004 default setting of tfsftr 127 00012 128 dlytbl assm 01 12-10-82 16.070 fnp utility programs for mcs page 32 delay table entry (dlytbl) ttls delay table entry (dlytbl) 000000 dl.fwd equ 0 forward pointer 000001 dl.bck equ 1 back pointer 000002 dl.rfc equ 2 reference count 000003 dl.hsz equ 3 header size - also for echnego tables. 000003 dl.lf equ 3 delays for line feed 000004 dl.cr equ 4 per-column delay factor for carriage retu 000005 dl.tba equ 5 initial delay for tab 000006 dl.tbb equ 6 per-column delay factor for tab 000007 dl.bs equ 7 delays for backspace 000010 dl.ff equ 8 delays for form feed 000011 dl.siz equ 9 size of table entry 129 00012 130 csbits assm 01 12-10-82 16.070 fnp utility programs for mcs page 33 control and status bits ttls control and status bits control bits 000001 c.srec bool 000001 set receive mode 000002 c.rrec bool 000002 reset receive mode 000004 c.sxmt bool 000004 set transmit mode 000010 c.rxmt bool 000010 reset transmit mode 000020 c.sdtr bool 000020 set data terminal ready 000040 c.rdtr bool 000040 reset data terminal ready 000100 c.ssup bool 000100 set supervisory transmit mode 000100 c.stre bool 000100 set tally runout enable (hdlc) 000200 c.rsup bool 000200 reset supervisory transmit mode 000200 c.rtre bool 000200 reset tally runout enable (hdlc) 000400 c.stat bool 000400 store status 001000 c.sbrk bool 001000 send line break 002000 c.smrk bool 002000 store marker status 004000 c.strm bool 004000 store terminate status 010000 c.srqs bool 010000 set request to send 020000 c.rrqs bool 020000 reset request to send 040000 c.pad bool 040000 unused 100000 c.cmd bool 100000 indicates cmd subop 400000 c.scmd bool 400000 indicates supplementary cmd subop the following must be used in the optional fields to the cmd (or contrl) macros in the control_tables 000001 c.scrq bool 000001 set call request 000002 c.rcrq bool 000002 reset call request assm 01 12-10-82 16.070 fnp utility programs for mcs page 34 control and status bits status bits 000001 s.cd bool 000001 carrier detect 000002 s.cts bool 000002 clear to send 000004 s.dsr bool 000004 data set ready 000010 s.sprc bool 000010 supervisory receive mode 000020 s.st bool 000020 status requested 000040 s.mark bool 000040 marker status 000100 s.term bool 000100 terminate status 000200 s.prex bool 000200 pre-exhaust 000400 s.brk bool 000400 line break received 001000 s.brch bool 001000 break character received 002000 s.ring bool 002000 ring 004000 s.exh bool 004000 exhaust status 010000 s.prty bool 010000 parity error 010000 s.fcse bool 010000 frame check sequence error (hdlc) 020000 s.xte bool 020000 transfer timing error 040000 s.pwi bool 040000 acu power indicator 100000 s.dlo bool 100000 acu data line occupied 200000 s.acr bool 200000 acu abandon call and retry 400000 s.ads bool 400000 acu raised data set status the following four bits share the values of acu status but can never be misinterpreted. 040000 s.rto bool 040000 receive time out (bsc) 040000 s.isd bool 040000 idle state detect (hdlc) assm 01 12-10-82 16.070 fnp utility programs for mcs page 35 control and status bits 100000 s.rbt bool 100000 receive block termination (bsc & hdlc) 200000 s.bmk bool 200000 marker status (bsc) 200000 s.rabt bool 200000 receive abort (hdlc) 400000 s.bdmk bool 400000 delayed marker status (bsc) 400000 s.pbyt bool 400000 partial byte (hdlc) bits in common between standard status 000177 s.tib bool 000177 and tib status dataset status bits in standard status 000017 s.dss bool 000017 and tib status asynchronous configuration bits 000001 fg.icw bool 000001 icw (two send icw's) 000002 fg.lpr bool 000002 lateral parity receive 000004 fg.lps bool 000004 lateral parity send 000010 fg.lpo bool 000010 lateral parity odd 000020 fg.5bt bool 000020 5-bit character mode 000040 fg.6bt bool 000040 6-bit character mode 000100 fg.7bt bool 000100 7-bit character mode 000200 fg.8bt bool 000200 8-bit character mode 000400 fg.beb bool 000400 ebcdic mode (bsc) 000400 fg.itf bool 000400 interfame time fill (hdlc) 001000 fg.btr bool 001000 transparent mode (bsc) 002000 fg.cct bool 002000 enable cct 131 132 pmc restore assm 01 12-10-82 16.070 fnp utility programs for mcs page 36 miscellaneous symbols 133 ttls miscellaneous symbols 134 135 ************************************************************************ 136 * miscellaneous 137 ************************************************************************ 138 139 002000 140 k equ 1024 000007 141 itprty equ 7 priority for timeout routine 142 000020 143 bcdspc bool 20 144 000000 145 null bool 000 000040 146 space bool 040 000040 147 blank equ space 000011 148 ht bool 011 000011 149 tab equ ht 000012 150 lf bool 012 000015 151 cr bool 015 000177 152 rubout bool 177 153 000077 154 mask6 bool 077 000177 155 mask7 bool 177 156 001000 157 hslafl bool 1000 158 return flags from inproc 000001 159 reteco bool 001 char(s) put in echo buffer 000002 160 retsus bool 002 output-suspend character 000004 161 retres bool 004 output-resume character 162 000002 163 oct002 bool 002 000003 164 oct003 bool 003 000005 165 oct005 bool 005 000007 166 oct007 bool 007 000017 167 oct017 bool 017 000020 168 oct020 bool 020 000177 169 oct177 bool 177 000105 170 sndout bool 105 "send output" mailbox opcode 000115 171 errmsg bool 115 "error message" mailbox opcode 172 000037 173 fbdevc bool 37 device code mask 000015 174 fcdevc equ 13 device code lsb position 000001 175 dclock bool 01 device code for fnp's clocks 000006 176 dprint bool 06 device code for printer 000002 177 ddia bool 02 device code for dia 000005 178 dcon bool 05 device code for console 179 777777 180 brkall equ -1 break on every character 777776 181 brkctl equ -2 break on all control characters 777775 182 brknxt equ -3 break on char after specifed char 183 assm 01 12-10-82 16.070 fnp utility programs for mcs page 37 miscellaneous symbols 000001 184 ct.dev equ 1 offset in ctrl of array of device table addrs 185 186 187 188 get and release buffer symbol definitions 189 000000 190 adrs equ 0 address 000001 191 wrdsz equ 1 number of words in buffer 000002 192 fwdpt equ 2 forward pointer 000003 193 bckpt equ 3 backward pointer 194 195 196 trace types 197 000001 198 mt.get equ 1 allocating single buffer 000002 199 mt.fre equ 2 freeing single buffer 000003 200 mt.gtc equ 3 allocating buffer chain 000004 201 mt.frc equ 4 freeing buffer chain 202 203 assm 01 12-10-82 16.070 fnp utility programs for mcs page 38 miscellaneous external values 204 ttls miscellaneous external values 205 206 ************************************************************************ 207 * 208 * miscellaneous values shared by several modules, but kept here 209 * for simplicity. 210 * 211 ************************************************************************ 212 213 214 215 ********************************************** 216 * 217 * "exist" -- a summary of which iom chans 218 * init found to exist. the mapping 219 * used herein is: if bit n is on, the channel 220 * n has a valid channel attached to it. 221 * 222 ********************************************** 223 224 00012 225 exist bss 1 226 227 assm 01 12-10-82 16.070 fnp utility programs for mcs page 39 fault processing routines 228 ttls fault processing routines 229 ********************************************************* 230 * first level fault processing 231 ********************************************************* 232 00013 233 hfv null 00013 0 00000 0 234 f0 ind ** pf 00014 0 10 025 41 235 tsy fp-* 00015 0 00000 0 236 f1 ind ** po 00016 0 10 023 41 237 tsy fp-* 00017 0 00000 0 238 f2 ind ** mp 00020 0 10 021 41 239 tsy fp-* 00021 0 00000 0 240 f3 ind ** op 00022 0 10 017 41 241 tsy fp-* 00023 0 00000 0 242 f4 ind ** ov 00024 0 10 015 41 243 tsy fp-* 00025 0 00000 0 244 f5 ind ** im 00026 0 10 013 41 245 tsy fp-* 00027 0 00000 0 246 f6 ind ** dc 00030 0 10 011 41 247 tsy fp-* 00031 0 00000 0 248 f7 ind ** ii 00032 0 10 007 41 249 tsy fp-* 250 251 the following "fault entry points" are not caused by any 252 of the eight above processor faults. they are entered 253 by software which detects the indicated condition. 254 00033 0 00000 0 255 badint ind ** xi -- extraneous interrupt 00034 0 10 005 41 256 tsy fp-* 00035 0 00000 0 257 iomflt ind ** cf -- iom channel fault 00036 0 10 003 41 258 tsy fp-* 00037 0 00000 0 259 conabt ind ** cn -- console operator abort 00040 0 10 001 41 260 tsy fp-* assm 01 12-10-82 16.070 fnp utility programs for mcs page 40 fault processing routines 261 eject 262 ********************************************************* 263 * second level fault processing 264 ********************************************************* 265 00041 0 00000 0 266 fp ind ** 00042 0 54 251 313 267 sti save+1-* save indicator register 00043 0 44 245 310 268 ldi fp.inh-* set "inh" and parity inh 00044 0 14 250 314 269 staq save+2-* save registers 00045 0 07 771 36 270 lda iomflt+1-* get iom channel fault vector end of binary card 00000008 00046 0 17 270 336 271 sta fvsave-* and save it 00047 0 07 214 263 272 lda l.a008-* (tsy -1,*) 00050 0 17 766 36 273 sta iomflt+1-* so we don't get clobbered during fault handling 00051 0 53 245 316 274 stx1 save+4-* 00052 0 13 245 317 275 stx2 save+5-* 00053 0 50 245 320 276 stx3 save+6-* 00054 012 000 0 277 rier 00055 0 17 244 321 278 sta save+7-* save interrupt level enable register 00056 4 07 206 264 279 lda a.a001-*,* (etmb) 00057 0 17 243 322 280 sta save+8-* save elapsed timer value 00060 0 43 761 41 281 ldx1 fp-* x1 = address+2 of original ic 00061 1 07 776 0 282 lda -2,1 ar = original ic 00062 0 17 230 312 283 sta save-* save original instruction counter value 284 00063 2332 00 0 285 cx1a compute 00064 0 26 201 265 286 sba a.a002-* (f0+2) fault 00065 2337 01 0 287 arl 1 number 00066 0 17 235 323 288 sta fltnum-* and save 289 00067 422 011 0 290 icmpa 9 is it an iom channel fault? 00070 0 64 034 124 291 tnz fp006-* no, continue 00071 0 41 210 301 292 ldx3 a.a012-* addr(tyfts), fault status for chan 0 00072 3 07 000 0 293 lda 0,3 get fault status 00073 0 74 004 77 294 tze fp001-* not chan 0, check hsla channels 00074 422 014 0 295 icmpa 12 is status o14 on chan 0? 00075 0 64 027 124 296 tnz fp006-* no, go ahead and crash 00076 0 71 012 110 297 tra fp004-* yes, queue error message and resume work 298 00077 299 fp001 null check for hsla parity error 00077 0 41 206 305 300 ldx3 a.a016-* addr(h1fts), fault status for hsla 1 00100 301 fp002 null 00100 3 07 000 0 302 lda 0,3 get status 00101 0 64 005 106 303 tnz fp003-* non-zero, take a look at it 00102 373 001 0 304 iacx3 1 zero. was this last hsla fault status? 00103 0 61 203 306 305 cmpx3 a.a017-* addr(h3fts) + 1 00104 0 64 774 100 306 tnz fp002-* no, check next one 00105 0 71 017 124 307 tra fp006-* yes, it's something else, crash 308 00106 309 fp003 null non-zero hsla fault status 00106 0 27 154 262 310 cmpa l.a007-* =o415 (parity) assm 01 12-10-82 16.070 fnp utility programs for mcs page 41 fault processing routines 00107 0 64 015 124 311 tnz fp006-* other bad status, crash 312 00110 313 fp004 null queue error message 00110 0 17 232 342 314 sta rstat-* save fault status 315 00111 673 001 0 316 ila 1 get error message code 00112 0 17 226 340 317 sta rfault-* save 00113 3333 00 0 318 cx3a get address of fault status word 00114 0 26 165 301 319 sba a.a012-* addr(tyfts) -- subtract origin to get chan no. end of binary card 00000009 00115 0 17 224 341 320 sta ric-* 00116 0 56 225 343 321 stz rword-* unused 322 00117 473 115 0 323 ilq errmsg get the opcode for derrq 00120 0 03 163 303 324 ldx2 a.a014-* (=reason) get addr of data 00121 4 10 161 302 325 tsy a.a013-*,* (=derrq) queue the error_message 326 00122 3 56 000 0 327 stz 0,3 zero the fault status so we don't see it again 00123 4 71 161 304 328 tra a.a015-*,* restart the processor 329 00124 0 07 177 323 330 fp006 lda fltnum-* restor the fault number 00125 0336 03 0 331 als 3 00126 0 06 150 276 332 ada a.a009-* (f.name) compute address 00127 4332 00 0 333 cax1 of and 334 get and save fault name 00130 673 774 0 335 ila -4 (four doublewords worth) 00131 0 17 204 335 336 sta fptemp-* 00132 0 03 145 277 337 ldx2 a.a010-* addr(fltnam) 00133 338 fp008 null 00133 1 04 000 0 339 ldaq 0,1 pick up two words 00134 2 14 000 0 340 staq 0,2 store them 00135 173 002 0 341 iacx1 2 bump from and to pointers 00136 273 002 0 342 iacx2 2 00137 0 76 176 335 343 aos fptemp-* done? 00140 0 64 773 133 344 tnz fp008-* no, do it again 345 346 347 348 349 ********************************************************* 350 * mask all hsla's and lsla's 351 ********************************************************* 352 00141 673 006 0 353 ila h1ch starting with first hsla channel 00142 354 fp009 null 00142 4333 00 0 355 cax3 hang on to iom channel no. 00143 0 37 112 255 356 ora l.a002-* (=o730000) "sel" opcode 00144 0 17 001 145 357 sta msksel-* 00145 0 00000 0 358 msksel zero patched with sel instruction 00146 0 60 102 250 359 cioc dispcw-* issue mask pcw 00147 3333 00 0 360 cx3a assm 01 12-10-82 16.070 fnp utility programs for mcs page 42 fault processing routines 00150 773 001 0 361 iaa 1 next iom channel 00151 422 017 0 362 icmpa l6ch+1 finished lsla's? 00152 0 75 770 142 363 tmi fp009-* no, do it again 364 365 366 ********************************************************* 367 * set interrupt level enable register to enable 368 * levels 0, 1, and 2 only. set up ignore iv's 369 * for all devices on levels 0, 1, and 2 except 370 * console. 371 ********************************************************* 372 00153 0 07 101 254 373 lda l.a001-* (=o700000) 00154 052 000 0 374 sier 375 00155 0 41 101 256 376 ldx3 l.a003-* (=o000400) 00156 0 03 116 274 377 ldx2 a.a007-* (sd.iv+48-3) 00157 378 fp010 null 00157 3 04 760 0 379 ldaq -16,3 move iv's for levels 0, 1, and 2 00160 2 17 000 0 380 sta 0,2 to save area (sd.iv) and replace with 00161 2 57 001 0 381 stq 1,2 address of ignore routine 00162 3 07 762 0 382 lda -14,3 00163 2 17 002 0 383 sta 2,2 end of binary card 00000010 00164 0 04 104 270 384 ldaq a.a004-* (ignore) 00165 3 14 760 0 385 staq -16,3 00166 3 17 762 0 386 sta -14,3 00167 273 775 0 387 iacx2 -3 00170 373 760 0 388 iacx3 -16 00171 0 64 766 157 389 tnz fp010-* 390 00172 0 07 142 334 391 lda conchn-* re-initialize console iv's 00173 0 75 005 200 392 tmi fp015-* 00174 0336 04 0 393 als 4 00175 4333 00 0 394 cax3 00176 0 07 077 275 395 lda a.a008-* 00177 3 17 002 0 396 sta 2,3 397 398 399 *************************************************** 400 * use software fault vector to write 401 * farewell message on console 402 *************************************************** 403 00200 404 fp015 null 00200 0 43 123 323 405 ldx1 fltnum-* 00201 0 42 065 266 406 adcx1 a.a003-* (sfv) 00202 5 10 000 0 407 tsy 0,1* 408 409 410 ******************************************************* assm 01 12-10-82 16.070 fnp utility programs for mcs page 43 fault processing routines 411 * send cs reason for crash 412 ******************************************************* 413 414 00203 0 07 120 323 415 lda fltnum-* get fault type code 00204 0 17 134 340 416 sta rfault-* 417 get cs address (word 6 of mailbox header) 00205 4 07 073 300 418 lda a.a011-*,* dmbx 00206 773 006 0 419 iaa 6 00207 0 17 137 346 420 sta dcwlst-* put it in dcw 00210 3336 22 0 421 alp 18 fix parity 00211 0 64 003 214 422 tnz fp16-* odd, nothing to do 00212 0 07 046 260 423 lda l.a005-* parity bits 00213 0 72 134 347 424 orsa dcwlst+1-* 425 00214 426 fp16 null fix parity on second half of dcw 00214 0 07 134 350 427 lda dcwlst+2-* 00215 3336 22 0 428 alp 18 00216 0 64 003 221 429 tnz fp17-* 00217 0 07 041 260 430 lda l.a005-* 00220 0 72 131 351 431 orsa dcwlst+3-* 432 00221 433 fp17 null fix parity in list icw address for pcw 00221 0 07 135 356 434 lda licadr-* 00222 3336 22 0 435 alp 18 00223 0 64 003 226 436 tnz fp18-* 00224 0 47 035 261 437 ldq l.a006-* =o060070 00225 0 71 002 227 438 tra 2 00226 439 fp18 null 00226 473 070 0 440 ilq 56 i.e., o000070 00227 4 14 043 272 441 staq a.a005-*,* dimb (dia pcw mailbox) 442 00230 073 004 0 443 sel dich 00231 4 60 041 272 444 cioc a.a005-*,* dimb 445 446 447 ********************************************************* 448 * shut down all io devices 449 ********************************************************* 450 00232 4 10 041 273 451 tsy a.a006-*,* (obit) disconnect the cs 452 end of binary card 00000011 00233 0 04 017 252 453 ldaq diapcw-* insert mask pcw into 00234 4 14 036 272 454 staq a.a005-*,* dia pcw mailbox 455 00235 673 020 0 456 ila 16 * pick up number of channels to mask 00236 4333 00 0 457 fp020 cax3 * put current channel num in x3 00237 0 37 016 255 458 ora l.a002-* * (=o730000) get the "sel" op-code 00240 0 17 001 241 459 sta fp030-* * and store for execution 00241 0 00000 0 460 fp030 zero * (altrd) patched to "sel" instruction assm 01 12-10-82 16.070 fnp utility programs for mcs page 44 fault processing routines 00242 0 60 006 250 461 cioc dispcw-* * issue the masking pcw 462 00243 3333 00 0 463 fp.040 cx3a * get current channel into a reg 00244 773 777 0 464 iaa -1 * subtract one from it 00245 0 65 771 236 465 tpl fp020-* * and if still positive, go mask it 466 467 468 00246 0 71 255 523 469 tra stop-* that's all, go to sleep assm 01 12-10-82 16.070 fnp utility programs for mcs page 45 fault processing routines 470 eject 00247 233100 0 00250 471 even 00250 000000 0 472 dispcw oct 0,010000 mask bit on to disable channel 00251 010000 0 00252 000000 0 473 diapcw oct 0,070000 dia pcw with parity bits 00253 070000 0 00254 700000 0 474 l.a001 oct 700000 00255 073000 0 475 l.a002 oct 073000 00256 0 00400 0 476 l.a003 zero 256 00257 0 00020 0 477 l.a004 zero oct020 00260 060000 0 478 l.a005 oct 060000 00261 060070 0 479 l.a006 oct 060070 00262 000415 0 480 l.a007 oct 000415 iom parity fault status 00263 4 10 777 262 481 l.a008 tsy -1,* used to make fault vector into nop 482 00264 0 00451 0 483 a.a001 ind etmb elapsed timer mailbox address 00265 0 00015 1 484 a.a002 zero f0+2 00266 0 00510 1 485 a.a003 zero sfv 00267 233100 0 00270 486 even 00270 0 00544 1 487 a.a004 ind ignore 00271 0 00544 1 488 ind ignore 00272 0 00454 0 489 a.a005 ind dimb dia mailbox address 00273 0 01200 1 490 a.a006 ind obit 00274 0 01175 1 491 a.a007 zero sd.iv+48-3 00275 0 13000 3 492 a.a008 ind contip console terminate interrupt proc. 00276 0 00360 1 493 a.a009 zero f.name 00277 0 00324 1 494 a.a010 zero fltnam 00300 0 03000 3 495 a.a011 ind dmbx 00301 0 00420 0 496 a.a012 ind tyfts end of binary card 00000012 00302 0 05000 3 497 a.a013 ind derrq 00303 0 00340 1 498 a.a014 ind reason 00304 0 00527 1 499 a.a015 ind pwron 00305 0 00426 0 500 a.a016 ind h1fts iom fault status word, hsla 1 00306 0 00431 0 501 a.a017 ind h3fts+1 1 word past iom fault status word for hsla 3 00307 0 00036 1 502 a.a018 ind iomflt+1 to restore branch address 00310 030000 0 503 fp.inh oct 030000 504 00311 233100 0 00312 505 even 00312 506 utsave null symdef symbol 00312 507 save bss 9 (ic, i, a, q, x1, x2, x3, er, et) 00323 508 fltnum bss 1 save current fault number 00324 509 fltnam bss 8 save current fault name 00334 0 00000 0 510 conchn zero tych = console ch no. 00335 511 fptemp bss 1 00336 512 fvsave bss 1 place to save iom channel fault vector 513 514 assm 01 12-10-82 16.070 fnp utility programs for mcs page 46 fault processing routines 00337 233100 0 00340 515 even 00340 516 reason null 72 bits sent to cs to tell why we crashed 00340 517 rfault bss 1 fault type code 00341 518 ric bss 1 instruction counter 00342 519 rstat bss 1 iom fault status if applicable 00343 520 rword bss 1 contents of fault word, or iom channel 521 00344 522 even 00344 1 00346 1 523 lsticw zero dcwlst,w.2 00345 000004 0 524 oct 4 525 526 dcw list for sending reason to cs 00346 0 00000 0 527 dcwlst zero cs address (filled in later) 00347 000075 0 528 oct 75 fnp -> cs opcode (parity added later) 00350 1 00340 1 529 zero reason,w.2 fnp address 00351 000002 0 530 oct 2 tally (parity added later) 00352 0 00000 0 531 zero 00353 060070 0 532 oct 060070 disconnect opcode (with parity) 00354 1 00000 0 533 zero 0,w.2 00355 020000 0 534 oct 020000 (parity) 535 536 00356 537 even 00356 1 00344 1 538 licadr zero lsticw,w.2 539 540 541 00357 233100 0 00360 542 even 00360 160157 0 543 f.name ascii 8,power off fault mnemonic names 00361 167145 0 00362 162040 0 00363 157146 0 00364 146040 0 00365 040040 0 00366 040040 0 00367 146141 0 00370 160157 0 544 ascii 8,power on 00371 167145 0 00372 162040 0 end of binary card 00000013 00373 157156 0 00374 040040 0 00375 040040 0 00376 040040 0 00377 040040 0 00400 155145 0 545 ascii 8,memory parity 00401 155157 0 00402 162171 0 00403 040160 0 assm 01 12-10-82 16.070 fnp utility programs for mcs page 47 fault processing routines 00404 141162 0 00405 151164 0 00406 171040 0 00407 040040 0 00410 151154 0 546 ascii 8,illegal opcode 00411 154145 0 00412 147141 0 00413 154040 0 00414 157160 0 00415 143157 0 00416 144145 0 00417 040040 0 00420 157166 0 547 ascii 8,overflow 00421 145162 0 00422 146154 0 00423 157167 0 00424 040040 0 00425 040040 0 00426 040040 0 00427 040040 0 00430 163164 0 548 ascii 8,store fault 00431 157162 0 00432 145040 0 00433 146141 0 00434 165154 0 00435 164040 0 00436 040040 0 00437 040040 0 00440 144151 0 549 ascii 8,divide check 00441 166151 0 end of binary card 00000014 00442 144145 0 00443 040143 0 00444 150145 0 00445 143153 0 00446 040040 0 00447 040040 0 00450 151154 0 550 ascii 8,illegal int 00451 154145 0 00452 147141 0 00453 154040 0 00454 151156 0 00455 164040 0 00456 040040 0 00457 040040 0 00460 145170 0 551 ascii 8,extra int 00461 164162 0 00462 141040 0 00463 151156 0 00464 164040 0 00465 040040 0 assm 01 12-10-82 16.070 fnp utility programs for mcs page 48 fault processing routines 00466 040040 0 00467 040040 0 00470 151157 0 552 ascii 8,iom fault 00471 155040 0 00472 146141 0 00473 165154 0 00474 164040 0 00475 040040 0 00476 040040 0 00477 040040 0 00500 143157 0 553 ascii 8,console abort 00501 156163 0 00502 157154 0 00503 145040 0 00504 141142 0 00505 157162 0 00506 164040 0 00507 040040 0 assm 01 12-10-82 16.070 fnp utility programs for mcs page 49 fault processing routines 554 eject 555 ********************************************************* 556 * software fault vectors 557 ********************************************************* 558 00510 559 sfv null 00510 0 00544 1 560 ind ignore pf end of binary card 00000015 00511 0 00544 1 561 ind ignore po 00512 0 00646 1 562 ind mempar mp 00513 0 00546 1 563 ind illop op 00514 0 00553 1 564 ind icprt ov 00515 0 00553 1 565 ind icprt im 00516 0 00553 1 566 ind icprt dc 00517 0 00544 1 567 ind ignore ii 00520 0 00544 1 568 ind ignore xi 00521 0 00614 1 569 ind chflt cf 00522 0 00544 1 570 ind ignore cn 571 572 573 assm 01 12-10-82 16.070 fnp utility programs for mcs page 50 fault processing routines 574 eject 575 ************************************************************************ 576 * power off fault processing routine 577 ************************************************************************ 578 00523 579 stop null 00523 580 pwroff null 00523 673 000 0 581 ila 0 disable all interrupts and stop 00524 052 000 0 582 sier 00525 4331 00 0 583 dis 00526 0 71 777 525 584 tra -1 585 586 587 588 ************************************************************************ 589 * power turn on fault processing routine 590 ************************************************************************ 591 00527 592 pwron null 00527 3331 00 0 593 inh 00530 0 07 571 321 594 lda save+7-* restore interrupt level enable register 00531 052 000 0 595 sier 00532 0 07 570 322 596 lda save+8-* restore elapsed timer value 00533 4 17 531 264 597 sta a.a001-*,* (etmb ) 00534 0 07 602 336 598 lda fvsave-* pick up saved iom channel fault vector 00535 4 17 552 307 599 sta a.a018-*,* (iomflt+1) restore it 00536 0 04 556 314 600 ldaq save+2-* restore arithmetic registers 00537 0 43 557 316 601 ldx1 save+4-* 00540 0 03 557 317 602 ldx2 save+5-* 00541 0 41 557 320 603 ldx3 save+6-* 00542 0 44 551 313 604 ldi save+1-* 00543 4 71 547 312 605 tra save-*,* return to point of interruption 606 607 608 609 ************************************************************************ 610 * ignore interrupts routine 611 ************************************************************************ 612 00544 0 00000 0 613 ignore ind ** 00545 4 71 777 544 614 tra -1,* 615 assm 01 12-10-82 16.070 fnp utility programs for mcs page 51 fault processing routines 616 eject 617 ************************************************************************ 618 * routine to print faulting ic (and possibly instruction) 619 * on console 620 ************************************************************************ 621 00546 0 00000 0 622 illop ind ** this entry to print instruction as well 00547 0 76 335 1104 623 aos wflag-* set flag 00550 0 07 776 546 624 lda illop-* copy return point 00551 0 17 002 553 625 sta icprt-* 00552 0 71 003 555 626 tra icp010-* 627 628 this entry to print ic only 629 00553 0 00000 0 630 icprt ind ** 00554 0 56 330 1104 631 stz wflag-* 00555 632 icp010 null both come to here 00555 0 03 170 745 633 ldx2 a.i007-* addr(msgnam) 00556 0 41 165 743 634 ldx3 a.i005-* addr(fltnam) get address of fault name 00557 673 774 0 635 ila -4 4 doublewords worth end of binary card 00000016 00560 0 17 325 1105 636 sta itemp-* to move it into message 00561 637 icp020 null 00561 3 04 000 0 638 ldaq 0,3 00562 2 14 000 0 639 staq 0,2 00563 273 002 0 640 iacx2 2 00564 373 002 0 641 iacx3 2 00565 0 76 320 1105 642 aos itemp-* 00566 0 64 773 561 643 tnz icp020-* if not done, do next two words 644 00567 4 47 155 744 645 ldq a.i006-*,* (save) get ic value 00570 573 777 0 646 iaq -1 really points to next instruction 00571 0 57 314 1105 647 stq itemp-* save it 00572 4 57 160 752 648 stq a.i012-*,* (ric) save for sending to cs 00573 0 41 144 737 649 ldx3 a.i001-* addr(icasci) 650 now convert it to ascii and put it in 00574 4 10 145 741 651 tsy a.i003-*,* octasc 652 00575 0 20 307 1104 653 szn wflag-* write out word too? 00576 0 74 010 606 654 tze icp030-* no, go write on console 655 else convert instruction word 656 to octal ascii and put in message 00577 0 41 306 1105 657 ldx3 itemp-* 00600 3 47 000 0 658 ldq 0,3 got word 00601 4 57 152 753 659 stq a.i013-*,* (rword) save for sending to cs 00602 0 41 136 740 660 ldx3 a.i002-* addr(wdasci) 00603 4 10 136 741 661 tsy a.i003-*,* octasc 662 00604 673 020 0 663 ila 16 increase tally in icw 00605 0 16 162 767 664 asa flticw+1-* 665 assm 01 12-10-82 16.070 fnp utility programs for mcs page 52 fault processing routines 00606 666 icp030 null now write on console 00606 0 20 157 765 667 szn conman-* is console_man in image? 00607 4 74 744 553 668 tze icprt-*,* no. skip console stuff and return 00610 4 10 132 742 669 tsy a.i004-*,* (wcon) yes. go do it 00611 0 00766 1 670 zero flticw argument is address of data icw 00612 2331 00 0 671 nop if no console, don't worry 00613 4 71 740 553 672 tra icprt-*,* return to caller 673 674 675 ************************************************************************ 676 * routine to write out message for iom channel fault 677 ************************************************************************ 678 00614 679 chflt subr chf 680 681 write the channel number and 682 associated fault status 683 684 we start by finding a non-zero fault status 00617 473 000 0 685 ilq 0 initialize channel number 00620 0 41 126 746 686 ldx3 a.i008-* addr(iom fault status) 00621 687 chf010 null 00621 3 07 000 0 688 lda 0,3 00622 0 64 004 626 689 tnz chf020-* non-zero, we got it 00623 573 001 0 690 iaq 1 else bump channel number 00624 373 001 0 691 iacx3 1 and fault status pointer 00625 0 71 774 621 692 tra chf010-* and try again 693 00626 694 chf020 null channel no. is in q 00626 0 17 257 1105 695 sta itemp-* save fault status end of binary card 00000017 00627 4 14 122 751 696 staq a.i011-*,* (rstat) save both for sending to cs 00630 0 41 117 747 697 ldx3 a.i009-* addr(chnasc) 00631 4 10 110 741 698 tsy a.i003-*,* (octasc) convert channel no. 699 00632 0 07 251 1103 700 lda chnasc+2-* pick up low-order 2 digits 00633 0 17 206 1041 701 sta chfnum-* put them in console message 702 00634 0 47 251 1105 703 ldq itemp-* get fault status and convert it to ascii 00635 0 41 113 750 704 ldx3 a.i010-* addr(chfst) 00636 4 10 103 741 705 tsy a.i003-*,* octasc 706 now just write the message out 00637 0 20 126 765 707 szn conman-* is console_man in image? 00640 0 74 004 644 708 tze chfret-* no. skip console stuff 00641 4 10 101 742 709 tsy a.i004-*,* (wcon) yes. go do it 00642 0 01024 1 710 zero chficw 00643 2331 00 0 711 nop 712 00644 713 chfret null 00644 714 return chflt 715 assm 01 12-10-82 16.070 fnp utility programs for mcs page 53 fault processing routines 716 717 ************************************************************************ 718 * routine to write out memory parity fault message 719 * we will go through all of memory until we find something 720 * that results in parity indicator coming on 721 ************************************************************************ 722 00646 723 mempar subr mmp 00651 0 56 236 1107 724 stz pagbas-* initialize this 00652 4 07 103 755 725 lda a.i015-*,* (.crmem) 00653 0 27 106 761 726 cmpa l.i001-* (=o100000) more than 32k? 00654 0 65 003 657 727 tpl mmp010-* no 00655 0 17 231 1106 728 sta memlst-* then that's the end 00656 0 71 005 663 729 tra mmp020-* 00657 0 07 103 762 730 mmp010 lda l.i002-* (=o077777) more than 32k, first pass will stop th 00660 0 17 226 1106 731 sta memlst-* 00661 4 41 075 756 732 ldx3 a.i016-*,* (.crpte) 00662 3 56 000 0 733 stz 0,3 disable paging for now 00663 0 56 225 1110 734 mmp020 stz tstadr-* start at 0 00664 4 44 070 754 735 ldi a.i014-*,* fp.inh (make sure we start with clean indicators) 00665 4 07 223 1110 736 mmp030 lda tstadr-*,* pick up contents of next word 00666 0 54 223 1111 737 sti tstind-* see what happened to the indicators 00667 0 07 074 763 738 lda l.i003-* =o002000, parity error indicator bit 00670 0 31 221 1111 739 cana tstind-* is it on? 00671 0 64 023 714 740 tnz mmp050-* yes, we found it 00672 0 07 216 1110 741 lda tstadr-* no, we'll advance the address 00673 0 27 213 1106 742 cmpa memlst-* finished this pass? 00674 0 74 003 677 743 tze mmp040-* yes 00675 0 76 213 1110 744 aos tstadr-* no, increment test address end of binary card 00000018 00676 0 71 767 665 745 tra mmp030-* and go around again 746 00677 0 47 210 1107 747 mmp040 ldq pagbas-* see if current address is real or virtual 00700 0 74 003 703 748 tze mmp045-* it's real 00701 573 377 0 749 iaq 255 it's virtual, test for real limit 00702 7333 00 0 750 cqa 00703 4 27 052 755 751 mmp045 cmpa a.i015-*,* (.crmem) have we reached the end? 00704 0 65 017 723 752 tpl mmp060-* yes, we didn't find it 00705 773 001 0 753 iaa 1 else do next page 00706 0 17 201 1107 754 sta pagbas-* this is the base of it 00707 4 10 050 757 755 tsy a.i017-*,* (setptw) 756 note that this is safe because we've tested here 00710 0 17 200 1110 757 sta tstadr-* this is presumably 077400 (virtual page base) 00711 773 377 0 758 iaa 255 this is the last virtual address in it 00712 0 17 174 1106 759 sta memlst-* 00713 0 71 752 665 760 tra mmp030-* start again 761 00714 762 mmp050 null here when we find a parity indicator 00714 0 27 050 764 763 cmpa l.i004-* (o077400) in window? 00715 0 75 007 724 764 tmi mmp070-* no, it's exact 00716 0 20 171 1107 765 szn pagbas-* but we were really there? assm 01 12-10-82 16.070 fnp utility programs for mcs page 54 fault processing routines 00717 0 74 005 724 766 tze mmp070-* yes 00720 0 26 044 764 767 sba l.i004-* else reduce to offset within page 00721 0 06 166 1107 768 ada pagbas-* add page address 00722 0 71 002 724 769 tra mmp070-* this is it 00723 673 777 0 770 mmp060 ila -1 we never found it, use dummy value 00724 4 17 026 752 771 mmp070 sta a.i012-*,* (ric) save it to send to cs 00725 0 20 040 765 772 szn conman-* is there a console? 00726 0 74 007 735 773 tze mmpret-* no, we're done 00727 6333 00 0 774 caq get value in q 00730 0 41 030 760 775 ldx3 a.i018-* addr (mmpadr) 00731 4 10 010 741 776 tsy a.i003-*,* octasc 00732 4 10 010 742 777 tsy a.i004-*,* wcon 00733 0 01056 1 778 zero mmpicw 00734 2331 00 0 779 nop 00735 780 mmpret return mempar 781 782 783 00737 2 01011 1 784 a.i001 zero icasci,b.0 00740 2 01021 1 785 a.i002 zero wdasci,b.0 00741 0 01303 1 786 a.i003 ind octasc binary to octal ascii conversion routine 00742 0 04000 3 787 a.i004 ind wcon console-writing routine 00743 0 00324 1 788 a.i005 ind fltnam 00744 0 00312 1 789 a.i006 ind save contains ic end of binary card 00000019 00745 0 00772 1 790 a.i007 zero msgnam 00746 0 00420 0 791 a.i008 zero fltst iom fault status 00747 2 01101 1 792 a.i009 zero chnasc,b.0 00750 2 01053 1 793 a.i010 zero chfst,b.0 00751 0 00342 1 794 a.i011 ind rstat used in sending crash info to cs 00752 0 00341 1 795 a.i012 ind ric likewise 00753 0 00343 1 796 a.i013 ind rword likewise 00754 0 00310 1 797 a.i014 ind fp.inh 00755 0 00651 0 798 a.i015 ind .crmem 00756 0 00702 0 799 a.i016 ind .crpte 00757 0 04036 1 800 a.i017 ind setptw 00760 2 01076 1 801 a.i018 ind mmpadr,b.0 802 00761 100000 0 803 l.i001 oct 100000 00762 077777 0 804 l.i002 oct 077777 00763 002000 0 805 l.i003 oct 002000 parity error indicator 00764 077400 0 806 l.i004 oct 077400 base of paging 'window' 807 00765 000000 0 808 conman oct 0 set to -1 by init if console_man is in image 809 00766 810 even 00766 2 00771 1 811 flticw icw fltmsg,b.0,38 00767 000046 0 00770 0 00000 0 812 zero to force fltmsg odd to force msgnam even 813 814 detail save,off assm 01 12-10-82 16.070 fnp utility programs for mcs page 55 fault processing routines 00771 015012 0 815 fltmsg saci cr,lnf 00772 816 msgnam bss 8 fault name 01002 146141 0 817 ascii 7,fault -- ic = 01011 818 icasci bss 3 01014 054040 0 819 ascii 4,, word = 01020 040040 0 820 saci sp,sp 01021 821 wdasci bss 3 822 823 01024 824 even end of binary card 00000020 01024 2 01026 1 825 chficw icw chfmsg,b.0,48 826 01026 015012 0 827 chfmsg saci cr,lnf 01027 151157 0 828 ascii 10,iom fault: ch annel 01041 829 chfnum bss 1 01042 054040 0 830 ascii 9,, fault status - 01053 831 chfst bss 3 832 01056 833 even 01056 2 01060 1 834 mmpicw icw mmpmsg,b.0,34 835 01060 015012 0 836 mmpmsg saci cr,lnf 01061 155145 0 837 ascii 13,memory parity referencing end of binary card 00000021 01076 838 mmpadr bss 3 839 detail restore 840 841 01101 842 chnasc bss 3 01104 843 wflag bss 1 01105 844 itemp bss 1 01106 845 memlst bss 1 last address to test in each pass 01107 846 pagbas bss 1 base of current page 01110 847 tstadr bss 1 adress on which to test parity 01111 848 tstind bss 1 indicators resulting from test 849 850 01112 071006 0 01120 851 eight 01120 852 sd.iv bss 3*16 (level 0, 1, and 2 iv's at time of fault) assm 01 12-10-82 16.070 fnp utility programs for mcs page 56 obit -- notify cs of fnp's death 853 ttls obit -- notify cs of fnp's death 854 ************************************************************************ 855 * 856 * this subroutine will send an "emergency interrupt" to the cs, 857 * thereby indicating that the fnp is about to crash 858 * 859 ************************************************************************ 860 01200 0 00000 0 861 obit ind ** 01201 0 07 022 1223 862 lda obit0-* as a last gesture of politeness, allow 01202 773 777 0 863 iaa -1 the dia to xmt its last message 01203 0 64 777 1202 864 tnz -1 865 01204 4 07 020 1224 866 lda obit1-*,* get emergency interrupt cell 01205 022 007 0 867 iana 7 isolate it 01206 6333 00 0 868 caq put in q 01207 4336 06 0 869 qls 6 position 01210 0 46 016 1226 870 adq obit3-* get interrupt cs command 01211 7333 00 0 871 cqa save this in a 01212 7336 22 0 872 qlp 18 get parity on this word 01213 0 64 002 1215 873 tnz 2 already odd 01214 0 37 013 1227 874 ora obit4-* make odd parity lower 01215 6333 00 0 875 caq put correctly paritized word back in q 01216 0 07 012 1230 876 lda obit5-* load word with 36 bit xfer mode bit on 01217 4 14 006 1225 877 staq obit2-*,* 878 01220 073 004 0 879 sel dich so long, its been good to know you 01221 4 60 004 1225 880 cioc obit2-*,* 01222 4 71 756 1200 881 tra obit-*,* 882 883 884 01223 006654 0 885 obit0 dec 3500 01224 0 14000 3 886 obit1 ind dicell 01225 0 00454 0 887 obit2 ind dimb 01226 000073 0 888 obit3 oct 000073 upper half odd parity and int cs cmd 01227 020000 0 889 obit4 oct 020000 lower half parity bit 01230 1 00000 0 890 obit5 zero 0,w.2 word with 36-bit xfer mode assm 01 12-10-82 16.070 fnp utility programs for mcs page 57 bdecac -- binary-decimal ascii routine 891 ttls bdecac -- binary-decimal ascii routine 892 ************************************************************************ 893 * this routine converts a binary number into four ascii characters which 894 * represent the decimal equivalent of the number. 895 * 896 * the input binary number must be non-negative and <= 9999 (23417, oct). 897 * 898 * calling sequence -- 899 * 900 * c(x3) = ch/wd address of where 1st digit is to be stored. 901 * c(ar) = the binary number to be converted. 902 * tsy bdecac-* 903 * 904 * on return, x3 will point to the position following the 4th digit. 905 ************************************************************************ 906 01231 0 00000 0 907 bdecac ind ** 01232 0 54 023 1255 908 sti bdasvi-* save indicators 01233 3331 00 0 909 inh inhibit interrupts 01234 0 13 022 1256 910 stx2 bdasx2-* save x2 01235 473 774 0 911 ilq -4 set loop counter 01236 0 57 021 1257 912 stq bdactr-* for 4 iterations end of binary card 00000022 01237 0 03 021 1260 913 ldx2 bdacon-* set x2 for 1st conversion constant 914 01240 915 bda1 null 01240 473 000 0 916 ilq 0 clear q-register 01241 0335 16 0 917 lrs 18-1-3 build dividend multiplied by 8 01242 2 21 000 0 918 dvf 0,2 produce a bcd digit in a-register 01243 122 060 0 919 iora 48 (060) convert it to ascii code 01244 3 17 200 0 920 sta 0,3,b.0 store in user's area 01245 7333 00 0 921 cqa 922 01246 373 300 0 923 iacx3 0,b.1 bump pointer to next digit store position 01247 273 001 0 924 iacx2 1 bump pointer to next conversion constant 01250 0 76 007 1257 925 aos bdactr-* ? done this 4 times, yet ? 01251 0 64 767 1240 926 tnz bda1-* nope 927 01252 0 03 004 1256 928 ldx2 bdasx2-* restore x2 01253 0 44 002 1255 929 ldi bdasvi-* restore indicators 01254 4 71 755 1231 930 tra bdecac-*,* restore control to user 931 01255 932 bdasvi bss 1 safe store indicators 01256 933 bdasx2 bss 1 safe store x2 01257 934 bdactr bss 1 loop counter 01260 0 01261 1 935 bdacon zero *+1 conversion constant initial pointer 01261 017500 0 936 dec 8000,6400,5120,4096 01262 014400 0 01263 012000 0 01264 010000 0 assm 01 12-10-82 16.070 fnp utility programs for mcs page 58 octal-to-bcd/ascii subroutines 937 ttls octal-to-bcd/ascii subroutines 938 ************************************************************************ 939 * octbcd/octasc will convert the six octits in the quotient register 940 * into six 6-bit/9-bit bcd/ascii characters and store them in sequential 941 * positions beginning at the address in x3. 942 * 943 * calling sequence -- 944 * 945 * ldq 946 * ldx3 947 * tsy 948 ************************************************************************ 949 01265 0 00000 0 950 octbcd ind ** 01266 0 13 030 1316 951 stx2 octsv-* save x2 01267 0 03 030 1317 952 ldx2 octsv+1-* set x2 = 6 01270 673 000 0 953 ila 0 01271 0334 03 0 954 lls 3 01272 3 17 400 0 955 sta 0,3,c.0 store character 01273 373 500 0 956 iacx3 0,c.1 bump character pointer 01274 273 777 0 957 iacx2 -1 ? finished ? 01275 0 64 773 1270 958 tnz -5 no 01276 673 020 0 959 ila bcdspc yes, store a space 01277 3 17 400 0 960 sta 0,3,c.0 01300 373 500 0 961 iacx3 0,c.1 01301 0 03 015 1316 962 ldx2 octsv-* restore x2 01302 4 71 763 1265 963 tra octbcd-*,* return 964 01303 0 00000 0 965 octasc ind ** 01304 0 13 012 1316 966 stx2 octsv-* save x2 01305 0 03 012 1317 967 ldx2 octsv+1-* set x2 = 6 01306 673 006 0 968 ila 6 end of binary card 00000023 01307 0334 03 0 969 lls 3 01310 3 17 200 0 970 sta 0,3,b.0 store character 01311 373 300 0 971 iacx3 0,b.1 bump character pointer 01312 273 777 0 972 iacx2 -1 ? finished ? 01313 0 64 773 1306 973 tnz -5 no 01314 0 03 002 1316 974 ldx2 octsv-* restore x2 01315 4 71 766 1303 975 tra octasc-*,* return 976 977 01316 978 octsv bss 1 01317 000006 0 979 dec 6 assm 01 12-10-82 16.070 fnp utility programs for mcs page 59 get tib address routine 980 ttls get tib address routine 981 ************************************************************************ 982 * 983 * gettib 984 * 985 * enter a - multics line number 986 * 987 * this routine will take a multics line number and 988 * convert it to the associated real tib address which will 989 * be returned in the a. if no tib exists, the 990 * a will contain 0. in either case, the address of the 991 * lsla or hsla table entry for the line will be returned 992 * in the q 993 * 994 * a multics line number is a 10 bit value which is right 995 * justified in the a. the rightmost 6 bits contain the 996 * slot number/line number (starting with 0), the next 3 bits 997 * hold the lsla or hsla number (starting with 0) and the 998 * next bit is 1 if hsla or 0 if lsla 999 * 1000 * line 1777 is a pseudo-channel used fro communication with 1001 * the colts executive; its tib address is held in .crtdt, 1002 * and it does not have the other associated data bases 1003 * 1004 ************************************************************************ 1005 01320 1006 gettib subr gtb,(inh,x1) 01332 0 27 031 1363 1007 cmpa l.h001-* (=o1777) is this colts channel? 01333 0 74 023 1356 1008 tze gtb020-* yes, special case 01334 2335 06 0 1009 lrl 6 put line number in q 01335 322 010 0 1010 iera 8 flip hsla/lsla flag (1 = lsla now) 01336 222 010 0 1011 icana 8 test for hsla or lsla 01337 0 64 002 1341 1012 tnz 2 it is an lsla 01340 773 005 0 1013 iaa 5 hsla, add to hsla number 01341 773 001 0 1014 iaa 1 add 1 to lsla or hsla no. 01342 0336 01 0 1015 als 1 multiply hsla/lsla number by 2 (iom table entry s 01343 4 06 016 1361 1016 ada a.h001-*,* add iom table base 01344 4332 00 0 1017 cax1 and put in x1 01345 673 000 0 1018 ila 0 clear a 01346 0334 06 0 1019 lls 6 refetch line number 01347 0336 01 0 1020 als 1 times 2 01350 1 06 001 0 1021 ada 1,1 add table base address from iom table entry 01351 4332 00 0 1022 cax1 put addr of word 0 of table entry in x1 01352 1 47 001 0 1023 ldq 1,1 get tib address from table 01353 2334 22 0 1024 llr 18 put tib addr in a, slot addr in q 01354 1025 gtb010 return gettib return to caller end of binary card 00000024 1026 01356 4 07 004 1362 1027 gtb020 lda a.h002-*,* .crtdt 01357 473 000 0 1028 ilq 0 no table entry for colts channel 01360 0 71 774 1354 1029 tra gtb010-* return assm 01 12-10-82 16.070 fnp utility programs for mcs page 60 get tib address routine 1030 01361 0 00653 0 1031 a.h001 ind .criom 01362 0 00705 0 1032 a.h002 ind .crtdt 1033 01363 001777 0 1034 l.h001 oct 1777 assm 01 12-10-82 16.070 fnp utility programs for mcs page 61 chkiv -- procedure to check the interrupt vectors 1035 ttls chkiv -- procedure to check the interrupt vectors 1036 1037 ************************************************************************ 1038 * 1039 * "chkiv" -- procedure to check that the interrupt vectors 1040 * are not destroyed. this procedure does not verify that all iv's are 1041 * correct; it only checks the "reasonableness" of them. 1042 * 1043 * 1044 ************************************************************************ 1045 1046 1047 01364 1048 chkiv subr chk,(inh,a,q,x1) 1049 01404 0 04 022 1426 1050 ldaq chkcnt-* * let us add one to the call counter 01405 0 15 017 1424 1051 adaq chkone-* * add one .. 01406 0 14 020 1426 1052 staq chkcnt-* * and put back 1053 01407 673 000 0 1054 ila 0 01410 4332 00 0 1055 cax1 1056 01411 1 07 000 0 1057 chklp lda 0,1 01412 0 27 011 1423 1058 cmpa chkhgh-* 01413 0 75 006 1421 1059 tmi chkstp-* 01414 173 001 0 1060 iacx1 1 01415 0 63 005 1422 1061 cmpx1 chkmax-* 01416 0 64 773 1411 1062 tnz chklp-* 1063 01417 1064 return chkiv 1065 01421 1066 chkstp die 6 1067 1068 01422 000040 0 1069 chkmax oct 40 * number of locations to check 01423 001000 0 1070 chkhgh oct 1000 * highest number which is not ok 1071 01424 1072 even 01424 000000 0 1073 chkone dec 0,1 * double precision one 01425 000001 0 end of binary card 00000025 01426 000000 0 1074 chkcnt dec 0,0 01427 000000 0 1075 assm 01 12-10-82 16.070 fnp utility programs for mcs page 62 inproc subroutine -- copy chars into input buffers 1076 ttls inproc subroutine -- copy chars into input buffers 1077 1078 called by hsla_man and lsla_man as input characters 1079 arrive in order to put them in input buffers in t.icp 1080 chain; updates t.pos and puts characters in echo buffer 1081 if appropriate, and may present status to the control tables. 1082 implements echoplex, tabecho, echo negotiation, etc. 1083 1084 at entry: 1085 a contains 0 for 7-bit, nonzero for 6-bit chars 1086 q contains number of characters 1087 x3 points to first character 1088 1089 returns in a: 1090 bit 17 on if anything put in echo buffer 1091 bit 16 on if output-suspend char received 1092 bit 15 on if output-resume char received 1093 01430 1094 inproc subr inp,(x1,x2,x3) 1095 01444 773 000 0 1096 iaa 0 6- or 7-bit characters? 01445 0 74 003 1450 1097 tze inp005-* 7 01446 673 077 0 1098 ila mask6 6 01447 0 71 002 1451 1099 tra 2 01450 673 177 0 1100 inp005 ila mask7 01451 0 17 156 1627 1101 sta pmask-* hang on to parity mask 1102 01452 7333 00 0 1103 cqa get character count 01453 4 74 212 1665 1104 tze a.b016-*,* (inpbak) none, nothing to do 01454 322 777 0 1105 iera -1 negate it 01455 773 001 0 1106 iaa 1 01456 0 17 153 1631 1107 sta inrem-* save negative version 01457 0 56 153 1632 1108 stz inecho-* 01460 0 56 153 1633 1109 stz insusp-* 01461 0 56 153 1634 1110 stz inres-* 1111 01462 1 07 002 0 1112 lda t.flg2,1 in iflow now? 01463 0 31 235 1720 1113 cana l.b022-* (=tfifc) 01464 0 74 024 1510 1114 tze inp010-* 01465 1 07 036 0 1115 lda t.flg3,1 watching the time? 01466 0 31 231 1717 1116 cana l.b021-* =tfitim 01467 0 74 021 1510 1117 tze inp010-* 01470 0 31 234 1724 1118 cana l.b027-* (=tfsked) inptim already scheduled? 01471 0 64 011 1502 1119 tnz inp007-* yes, don't do it again 01472 1 07 004 0 1120 lda t.line,1 we need absolute tib address 01473 4 10 175 1670 1121 tsy a.b019-*,* gettib 01474 4332 00 0 1122 cax1 into x1 for dspqur 01475 0 04 161 1656 1123 ldaq a.b010-* time, priority, address for inptim end of binary card 00000026 01476 4 10 162 1660 1124 tsy a.b011-*,* (dspqur) make sure it runs 01477 0 43 742 1441 1125 ldx1 inpsx1-* get x1 back assm 01 12-10-82 16.070 fnp utility programs for mcs page 63 inproc subroutine -- copy chars into input buffers 01500 0 07 224 1724 1126 lda l.b027-* =tfsked 01501 1 72 036 0 1127 orsa t.flg3,1 it's scheduled now 1128 01502 0 56 140 1642 1129 inp007 stz intime-* initialize for recording current time 01503 4 07 156 1661 1130 lda a.b012-*,* (itmb) get interval timer 01504 0 17 137 1643 1131 sta intime+1-* 01505 4 04 155 1662 1132 ldaq a.b013-*,* (simclk) and time it's due to go off 01506 0 24 134 1642 1133 sbaq intime-* now we have current time 01507 1 14 050 0 1134 staq t.itim,1 hang on to it 1135 01510 0 50 120 1630 1136 inp010 stx3 inchrp-* save char pointer 01511 3 47 200 0 1137 ldq 0,3,b.0 get next char 01512 0 57 123 1635 1138 stq inchar-* 01513 1 07 036 0 1139 lda t.flg3,1 if we're supposed to, 01514 0 31 211 1725 1140 cana l.b028-* (tf8in) 01515 0 64 003 1520 1141 tnz inp012-* 01516 0 07 111 1627 1142 lda pmask-* fix parity on it 01517 0 32 116 1635 1143 ansa inchar-* 01520 0 47 115 1635 1144 inp012 ldq inchar-* save as original value 01521 0 57 115 1636 1145 stq inorig-* in case lfecho changes it 01522 1 07 002 0 1146 lda t.flg2,1 01523 0 31 163 1706 1147 cana l.b012-* (=tffrmi) in frame mode? 01524 0 74 010 1534 1148 tze inp015-* no, don't bother checking 01525 1 07 040 0 1149 lda t.frmc,1 01526 2337 11 0 1150 arl 9 get frame-begin char alone 01527 0 74 003 1532 1151 tze 3 zero (null) means any 01530 0 27 105 1635 1152 cmpa inchar-* is this it? 01531 0 64 003 1534 1153 tnz inp015-* no, check for break 01532 0 07 152 1704 1154 lda l.b010-* =tffip 01533 1 72 002 0 1155 orsa t.flg2,1 frame in progress now 1156 01534 1157 inp015 null 01534 4 10 130 1664 1158 tsy a.b015-*,* (chkofc) see if it's output flow control char 01535 4 71 131 1666 1159 tra a.b017-*,* (inp300) chkofc fully processed the character 01536 0 47 077 1635 1160 ldq inchar-* get character back without parity 1161 now check carriage movement table 01537 1 07 033 0 1162 lda t.pos,1 save old column indicator 01540 0 17 077 1637 1163 sta oldpos-* 01541 4 10 106 1647 1164 tsy a.b004-*,* =addr(move) 01542 0 71 005 1547 1165 tra inp020-* for line feed 01543 0 71 014 1557 1166 tra inp030-* for carriage return 01544 0 71 027 1573 1167 tra inp050-* for tab end of binary card 00000027 01545 0 71 034 1601 1168 tra inp060-* for backspace (do nothing) 01546 0 71 034 1602 1169 tra inp070-* no hit 1170 1171 01547 1172 inp020 null line feed 01547 0 07 125 1674 1173 lda l.b002-* =tfcrec 01550 1 31 001 0 1174 cana t.flg,1 crecho mode? 01551 0 74 050 1621 1175 tze inp100-* assm 01 12-10-82 16.070 fnp utility programs for mcs page 64 inproc subroutine -- copy chars into input buffers 01552 0 20 065 1637 1176 szn oldpos-* were we already in column 0? 01553 0 74 046 1621 1177 tze inp100-* if so, don't echo carriage return 01554 473 015 0 1178 ilq cr put carriage return in echo buffer 01555 4 10 071 1646 1179 tsy a.b003-*,* =addr(puteco) 01556 0 71 043 1621 1180 tra inp100-* 1181 01557 1182 inp030 null carriage return 01557 0 07 116 1675 1183 lda l.b003-* =tflfec 01560 1 31 001 0 1184 cana t.flg,1 lfecho mode? 01561 0 74 040 1621 1185 tze inp100-* 01562 0 07 114 1676 1186 lda l.b004-* =tfecpx 01563 1 31 001 0 1187 cana t.flg,1 echoplex mode? 01564 0 74 003 1567 1188 tze inp040-* no, go ahead 01565 473 015 0 1189 ilq cr else have to echo cr explicitly 01566 4 10 060 1646 1190 tsy a.b003-*,* puteco 01567 1191 inp040 null 01567 473 012 0 1192 ilq lf put line feed in echo buffer 1193 and input buffer 01570 0 57 045 1635 1194 stq inchar-* 01571 4 10 055 1646 1195 tsy a.b003-*,* =addr(puteco) 01572 0 71 135 1727 1196 tra inp110-* 1197 01573 1198 inp050 null tab 01573 0332 00 0 1199 cax2 save space count 01574 0 07 103 1677 1200 lda l.b005-* =tftbec 01575 1 31 001 0 1201 cana t.flg,1 tbecho mode? 01576 0 74 023 1621 1202 tze inp100-* 01577 4 10 047 1646 1203 tsy a.b003-*,* puteco 01600 0 71 127 1727 1204 tra inp110-* don't echoplex it also 1205 01601 1206 inp060 null 01601 0 71 020 1621 1207 tra inp100-* 1208 01602 1209 inp070 null 01602 4 07 047 1651 1210 lda a.b006-*,* mshift (set by move subroutine) 01603 0 74 011 1614 1211 tze inp090-* not a case shift character 01604 422 001 0 1212 icmpa 1 yes, is it up-shift? 01605 0 64 004 1611 1213 tnz inp080-* no 01606 0 07 072 1700 1214 lda l.b006-* =tfupsf 01607 1 72 002 0 1215 orsa t.flg2,1 yes, turn flag on 01610 0 71 011 1621 1216 tra inp100-* 01611 1217 inp080 null down-shift 01611 0 07 070 1701 1218 lda l.b007-* =^tfupsf 01612 1 32 002 0 1219 ansa t.flg2,1 turn flag off 01613 0 71 006 1621 1220 tra inp100-* 1221 01614 1222 inp090 null end of binary card 00000028 01614 0 07 064 1700 1223 lda l.b006-* =tfupsf 01615 1 31 002 0 1224 cana t.flg2,1 are we in uppercase? 01616 0 74 003 1621 1225 tze inp100-* assm 01 12-10-82 16.070 fnp utility programs for mcs page 65 inproc subroutine -- copy chars into input buffers 01617 673 100 0 1226 ila 64 yes, mark character 01620 0 72 015 1635 1227 orsa inchar-* 1228 01621 1229 inp100 null 01621 0 47 014 1635 1230 ldq inchar-* 01622 0 07 054 1676 1231 lda l.b004-* =tfecpx 01623 1 31 001 0 1232 cana t.flg,1 echoplex? 01624 0 74 103 1727 1233 tze inp110-* 1234 yes, put char in echo buffer 01625 4 10 021 1646 1235 tsy a.b003-*,* =addr(puteco) 01626 0 71 101 1727 1236 tra inp110-* branch around literals & storage assm 01 12-10-82 16.070 fnp utility programs for mcs page 66 inproc subroutine -- copy chars into input buffers 1237 eject 01627 1238 pmask bss 1 parity mask 01630 1239 inchrp bss 1 pointer to current character 01631 1240 inrem bss 1 number of characters remaining (negative) 01632 1241 inecho bss 1 nonzero if something put in echo buffer 01633 1242 insusp bss 1 nonzero if output_suspend char received 01634 1243 inres bss 1 nonzero if output_resume char received 01635 1244 inchar bss 1 copy of current character 01636 1245 inorig bss 1 original contents of inchar 01637 1246 oldpos bss 1 original value of t.pos 01640 1247 inpind bss 1 save indicator reg 01641 1248 inenef bss 1 echo negotiation flag 01642 1249 even 01642 1250 intime bss 2 current time 1251 1252 01644 0 06000 3 1253 a.b001 ind istat 01645 0 04225 1 1254 a.b002 ind getubf 01646 0 02516 1 1255 a.b003 ind puteco 01647 0 02364 1 1256 a.b004 ind move 01650 0 03472 1 1257 a.b005 ind fulbuf 01651 0 02514 1 1258 a.b006 ind mshift 01652 0 17000 3 1259 a.b007 ind hcheck 01653 0 03007 1 1260 a.b008 ind echngo 01654 0 16000 3 1261 a.b009 ind ecgifl 01655 233100 0 01656 1262 even 01656 000107 0 1263 a.b010 vfd 12/1,6/itprty 1 second, and priority of inptim 01657 0 02305 1 1264 ind inptim 01660 0 15000 3 1265 a.b011 ind dspqur 01661 0 00450 0 1266 a.b012 ind itmb interval timer mailbox 01662 0 22000 3 1267 a.b013 ind simclk simulated clock value 01663 0 07000 3 1268 a.b014 ind itest 01664 0 02235 1 1269 a.b015 ind chkofc 01665 0 02233 1 1270 a.b016 ind inpbak 01666 0 02205 1 1271 a.b017 ind inp300 01667 0 01510 1 1272 a.b018 ind inp010 01670 0 01320 1 1273 a.b019 ind gettib 01671 0 00652 0 1274 a.b020 ind .crnbf 01672 0 02624 1 1275 a.b021 ind eforce 1276 1277 01673 2 00000 0 1278 l.b001 zero 0,b.0 01674 002000 0 1279 l.b002 vfd 18/tfcrec 01675 001000 0 1280 l.b003 vfd 18/tflfec end of binary card 00000029 01676 200000 0 1281 l.b004 vfd 18/tfecpx 01677 004000 0 1282 l.b005 vfd 18/tftbec 01700 000200 0 1283 l.b006 vfd 18/tfupsf 01701 777577 0 1284 l.b007 vfd o18//tfupsf 01702 004000 0 1285 l.b008 vfd 18/s.exh assm 01 12-10-82 16.070 fnp utility programs for mcs page 67 inproc subroutine -- copy chars into input buffers 01703 000200 0 1286 l.b009 vfd 18/s.prex 01704 100000 0 1287 l.b010 vfd 18/tffip 01705 000777 0 1288 l.b011 oct 000777 01706 040000 0 1289 l.b012 vfd 18/tffrmi 01707 020000 0 1290 l.b013 vfd 18/bffbrk 01710 001000 0 1291 l.b014 vfd 18/s.brch 01711 000020 0 1292 l.b015 vfd 18/tfbral 01712 200000 0 1293 l.b016 vfd 18/tfsftr 01713 777776 0 1294 l.b017 vfd o18//tfwrit 01714 001000 0 1295 l.b018 vfd 18/hslafl 01715 000777 0 1296 l.b019 vfd 18/buftmk 01716 024000 0 1297 l.b020 oct 024000 "inhibit overflow" & "inhibit interrupts" 01717 000002 0 1298 l.b021 vfd 18/tfitim 01720 000040 0 1299 l.b022 vfd 18/tfifc 01721 000100 0 1300 l.b023 vfd 18/tfofc 01722 004000 0 1301 l.b024 vfd 18/tfblak 1302 *l.b025 unused 01723 100000 0 1303 l.b026 vfd 18/tfisus 01724 000040 0 1304 l.b027 vfd 18/tfsked 01725 000100 0 1305 l.b028 vfd 18/tf8in 01726 000001 0 1306 l.b029 dec 1 for adding to meters assm 01 12-10-82 16.070 fnp utility programs for mcs page 68 inproc subroutine -- copy chars into input buffers 1307 eject 01727 1308 inp110 null 01727 0 56 712 1641 1309 stz inenef-* zero echnego did echo flag. 01730 1 20 042 0 1310 szn t.scll,1 are we echo-negotiating? 01731 0 74 004 1735 1311 tze inp114-* 01732 0 07 703 1635 1312 lda inchar-* hand the character to echngo 01733 4 10 720 1653 1313 tsy a.b008-*,* (echngo) echo negotiably 01734 0 17 705 1641 1314 sta inenef-* remember whether he actually echoed. 01735 1315 inp114 null 01735 1 20 005 0 1316 szn t.icp,1 are we already building an input chain? 01736 0 74 005 1743 1317 tze inp120-* no, go start one 1318 1319 old chain 01737 1 41 006 0 1320 ldx3 t.ilst,1 find out if last buffer is full 01740 4 10 710 1650 1321 tsy a.b005-*,* fulbuf 01741 0 71 002 1743 1322 tra 2 it is 01742 0 71 072 2034 1323 tra inp190-* it isn't, branch around buffer allocation code 1324 01743 1325 inp120 null check for exhaust condition 01743 1 07 007 0 1326 lda t.icpl,1 how many buffers have we got so far? 01744 1 06 041 0 1327 ada t.dcpl,1 end of binary card 00000030 01745 422 050 0 1328 icmpa bufmax too many? 01746 0 75 006 1754 1329 tmi inp125-* no 01747 1 07 000 0 1330 lda t.stat,1 yes, send exhaust status 01750 022 017 0 1331 iana s.dss common bits only 01751 0 37 731 1702 1332 ora l.b008-* =s.exh 01752 4 10 672 1644 1333 tsy a.b001-*,* =addr(istat) 01753 0 71 024 1777 1334 tra inp140-* 1335 01754 1 07 002 0 1336 inp125 lda t.flg2,1 see if we should request input suspension 01755 0 31 743 1720 1337 cana l.b022-* =tfifc 01756 0 74 012 1770 1338 tze inp130-* mode isn't on, certainly not 01757 1 07 007 0 1339 lda t.icpl,1 chain long enough? 01760 422 024 0 1340 icmpa bufmax/2 01761 0 65 004 1765 1341 tpl inp128-* yes 01762 0336 02 0 1342 als 2 multiply by 4 01763 4 27 706 1671 1343 cmpa a.b020-*,* (.crnbf) more than 1/4 of remaining space? 01764 0 75 004 1770 1344 tmi inp130-* no, skip it 01765 1 47 045 0 1345 inp128 ldq t.ifch,1 yes, get input flow control chars 01766 6337 11 0 1346 qrl 9 get suspend char alone 01767 4 10 703 1672 1347 tsy a.b021-*,* (eforce) into echo buffer 1348 01770 1 07 007 0 1349 inp130 lda t.icpl,1 have we got enough to send no matter what? 01771 422 012 0 1350 icmpa bufpre 01772 0 75 005 1777 1351 tmi inp140-* no 01773 1 07 000 0 1352 lda t.stat,1 yes, signal pre-exhaust status 01774 022 017 0 1353 iana s.dss common bits only 01775 0 37 706 1703 1354 ora l.b009-* s.prex 01776 4 10 646 1644 1355 tsy a.b001-*,* =istat 1356 assm 01 12-10-82 16.070 fnp utility programs for mcs page 69 inproc subroutine -- copy chars into input buffers 01777 1357 inp140 null 1358 1359 get a fresh buffer 01777 473 040 0 1360 ilq bufsiz 02000 4 10 645 1645 1361 tsy a.b002-*,* =addr(getubf) 02001 0 71 003 2004 1362 tra inp150-* error, cannot get buffer 02002 1 76 007 0 1363 aos t.icpl,1 increment buffer count 02003 0 71 015 2020 1364 tra inp160-* continue 1365 1366 send exhaust status, forget input char 02004 1367 inp150 cmeter mincs,m.inaf,l.b029-* 1368 02013 1 07 000 0 1369 lda t.stat,1 get tib status bits end of binary card 00000031 02014 022 177 0 1370 iana s.tib common bits only 02015 0 37 665 1702 1371 ora l.b008-* =s.exh 02016 4 10 626 1644 1372 tsy a.b001-*,* =addr(istat) 02017 0 71 166 2205 1373 tra inp300-* go to next slot 1374 02020 1 20 005 0 1375 inp160 szn t.icp,1 new chain or old? 02021 0 74 005 2026 1376 tze inp170-* new 1377 old, chain new buffer on 02022 3333 00 0 1378 cx3a 02023 1 41 006 0 1379 ldx3 t.ilst,1 02024 3 17 000 0 1380 sta bf.nxt,3 02025 0 71 003 2030 1381 tra inp180-* 1382 02026 1383 inp170 null 02026 1 50 005 0 1384 stx3 t.icp,1 new buffer is input chain head 02027 3333 00 0 1385 cx3a 1386 02030 1387 inp180 null 1388 set new last buffer pointer 02030 1 17 006 0 1389 sta t.ilst,1 02031 773 002 0 1390 iaa bf.dta and new character pointer 02032 0 37 641 1673 1391 ora l.b001-* 0,b.0 02033 1 17 010 0 1392 sta t.icch,1 1393 02034 1394 inp190 null 02034 1 41 010 0 1395 ldx3 t.icch,1 02035 0 07 600 1635 1396 lda inchar-* now put data character in input buffer 02036 3 17 200 0 1397 sta 0,3,b.0 1398 now increment tally 02037 1 41 006 0 1399 ldx3 t.ilst,1 02040 673 001 0 1400 ila 1 add one to tally in last buffer 02041 3 16 001 0 1401 asa bf.tly,3 1402 increment char pointer 02042 1 41 010 0 1403 ldx3 t.icch,1 increment character pointer 02043 373 300 0 1404 iacx3 0,b.1 02044 1 50 010 0 1405 stx3 t.icch,1 1406 assm 01 12-10-82 16.070 fnp utility programs for mcs page 70 inproc subroutine -- copy chars into input buffers 02045 1 07 002 0 1407 lda t.flg2,1 check for shifter 02046 0 31 644 1712 1408 cana l.b016-* =tsfstr 02047 0 74 003 2052 1409 tze inp200-* not an ibm type 02050 673 077 0 1410 ila 63 yes it is, mask off possible shift 02051 0 32 564 1635 1411 ansa inchar-* when testing for break 02052 1412 inp200 null 02052 1 07 002 0 1413 lda t.flg2,1 see if we're in a frame 02053 0 31 631 1704 1414 cana l.b010-* =tffip 02054 0 74 006 2062 1415 tze inp210-* nope 02055 1 07 040 0 1416 lda t.frmc,1 yes, get framing chars 02056 0 34 627 1705 1417 ana l.b011-* (=o000777) mask down to frame-end only 02057 0 27 557 1636 1418 cmpa inorig-* is this it? 02060 0 74 053 2133 1419 tze inp250-* yes, break 02061 0 71 124 2205 1420 tra inp300-* no, don't break 1421 02062 1422 inp210 null 02062 1 07 002 0 1423 lda t.flg2,1 check for input_suspend char end of binary card 00000032 02063 0 31 635 1720 1424 cana l.b022-* (=tfifc) if appropriate 02064 0 74 015 2101 1425 tze inp220-* it isn't 02065 1 07 045 0 1426 lda t.ifch,1 get input flow control chars 02066 2335 11 0 1427 lrl 9 suspend in a low, resume in q high 02067 0 27 547 1636 1428 cmpa inorig-* received suspend char? 02070 0 64 011 2101 1429 tnz inp220-* no 02071 1 07 007 0 1430 lda t.icpl,1 yes, should we resume right away? 02072 422 024 0 1431 icmpa bufmax/2 02073 0 75 004 2077 1432 tmi inp215-* yes, chain is short enough 02074 0 07 627 1723 1433 lda l.b026-* =tfisus 02075 1 72 001 0 1434 orsa t.flg,1 else set suspended flag in tib 02076 0 71 003 2101 1435 tra inp220-* 02077 6337 11 0 1436 inp215 qrl 9 get resume char in q low 02100 4 10 572 1672 1437 tsy a.b021-*,* eforce 1438 02101 1 07 036 0 1439 inp220 lda t.flg3,1 get flags 02102 0 31 607 1711 1440 cana l.b015-* =tfbral 02103 0 64 030 2133 1441 tnz inp250-* in breakall mode, break on everything 1442 1443 break list pointed to by t.brkp has maximum of 1444 8 characters, of which first is 1445 either a special code or a count. 02104 1 07 032 0 1446 lda t.brkp,1 get pointer to beginning of break list 02105 0 37 566 1673 1447 ora l.b001-* 0,b.0 02106 4333 00 0 1448 cax3 1449 02107 3 07 200 0 1450 lda 0,3,b.0 get first char of break list 02110 0 74 075 2205 1451 tze inp300-* no break list, no break char. 02111 0336 11 0 1452 als 9 extend high-order bit of char 02112 0337 11 0 1453 ars 9 for immediate compare 1454 02113 422 777 0 1455 icmpa brkall break on every character? 02114 0 74 017 2133 1456 tze inp250-* yes, that includes this one assm 01 12-10-82 16.070 fnp utility programs for mcs page 71 inproc subroutine -- copy chars into input buffers 1457 02115 422 776 0 1458 icmpa brkctl break on all control chars? 02116 0 64 005 2123 1459 tnz inp230-* 02117 0 07 516 1635 1460 lda inchar-* yes, find out if this is one 02120 422 040 0 1461 icmpa blank 02121 0 75 012 2133 1462 tmi inp250-* it is, break 02122 0 71 063 2205 1463 tra inp300-* else don't 1464 02123 1465 inp230 null first char is count of list 02123 6333 00 0 1466 caq get it in q 1467 02124 1468 inp240 null check for match 02124 373 300 0 1469 iacx3 0,b.1 bump to next char in break list 02125 3 07 200 0 1470 lda 0,3,b.0 pick it up 02126 0 27 507 1635 1471 cmpa inchar-* 02127 0 74 004 2133 1472 tze inp250-* this one, break now 1473 get next char in break list 02130 573 777 0 1474 iaq -1 if there are any more 02131 0 74 054 2205 1475 tze inp300-* end of binary card 00000033 02132 0 71 772 2124 1476 tra inp240-* 1477 1478 02133 1479 inp250 null we have a break char, send appropriate 1480 status to interpreter 02133 0 07 551 1704 1481 lda l.b010-* =tffip (frame in progress) 02134 322 777 0 1482 iera -1 always turned off by break 02135 1 32 002 0 1483 ansa t.flg2,1 1484 02136 1 07 004 0 1485 lda t.line,1 hsla line? 02137 0 31 555 1714 1486 cana l.b018-* =hslafl 02140 0 74 011 2151 1487 tze inp260-* no, skip this 02141 1 03 030 0 1488 ldx2 t.sfcm,1 else have to update input pointer 02142 0 41 466 1630 1489 ldx3 inchrp-* address of char just processed 02143 373 300 0 1490 iacx3 0,b.1 point to next char 02144 2 50 021 0 1491 stx3 sf.nic,2 update pointer in sfcm 02145 0 20 465 1632 1492 szn inecho-* have we put anything in echo buffer? 02146 0 74 003 2151 1493 tze inp260-* no, proceed 02147 0 56 463 1632 1494 stz inecho-* yes, reset flag 02150 4 10 502 1652 1495 tsy a.b007-*,* (hcheck) and tell hsla_man now 1496 02151 1497 inp260 null 02151 1 07 036 0 1498 lda t.flg3,1 check for breakall super-optimization 02152 0 31 537 1711 1499 cana l.b015-* =tfbral 02153 0 74 016 2171 1500 tze inp265-* nope 02154 0 20 465 1641 1501 szn inenef-* did fnp echnego this char? 02155 0 64 026 2203 1502 tnz inp298-* great, don't ship: turn on tfwrit 1503 1504 breakable chars come one at a time 1505 or the very last in an echoed chain. 1506 at any rate, we are gonna ship. assm 01 12-10-82 16.070 fnp utility programs for mcs page 72 inproc subroutine -- copy chars into input buffers 1507 02156 1 41 006 0 1508 ldx3 t.ilst,1 first char in some buffer, not echoed? 02157 1 61 005 0 1509 cmpx3 t.icp,1 only buffer in chain? 02160 0 64 007 2167 1510 tnz inp262-* no, leave break bit on or off as was set before. 02161 3 07 001 0 1511 lda bf.tly,3 check out the tally 02162 0 34 533 1715 1512 ana l.b019-* 02163 422 001 0 1513 icmpa 1 1st char? 02164 0 64 003 2167 1514 tnz inp262-* no, dont mark as break chars 02165 0 07 522 1707 1515 lda l.b013-* otherwise, turn on break flag 02166 3 72 001 0 1516 orsa bf.flg,3 02167 1517 inp262 null 02167 4 10 465 1654 1518 tsy a.b009-*,* (ecgifl), ech(nego) iflush 02170 0 71 015 2205 1519 tra inp300-* 02171 1520 inp265 null 02171 1 41 006 0 1521 ldx3 t.ilst,1 get buffer pointer so as to set 02172 0 07 515 1707 1522 lda l.b013-* (=bffbrk) break flag 02173 3 72 001 0 1523 orsa bf.flg,3 02174 1 07 000 0 1524 lda t.stat,1 get tib status 02175 022 017 0 1525 iana s.dss mask down to common bits 02176 0 37 512 1710 1526 ora l.b014-* (=s.brch) set break char received 02177 4 10 445 1644 1527 tsy a.b001-*,* =addr(istat) 02200 1 07 001 0 1528 lda t.flg,1 check for echoplex end of binary card 00000034 02201 0 31 475 1676 1529 cana l.b004-* =tfecpx 02202 0 74 003 2205 1530 tze inp300-* no, we're done 02203 1531 inp298 null here for thoughts that want chance to echo 02203 0 07 510 1713 1532 lda l.b017-* =^tfwrit 02204 1 32 001 0 1533 ansa t.flg,1 turn it off to make sure we get a chance to echo 1534 02205 1535 inp300 null through with that character 02205 1 20 044 0 1536 szn t.entp,1 is there a echnego table? 02206 0 74 007 2215 1537 tze inp310-* no 02207 0 20 432 1641 1538 szn inenef-* did echngo echo this char? 02210 0 64 005 2215 1539 tnz inp310-* yes, it was echoed. echngo zeroed sncc 02211 0 54 427 1640 1540 sti inpind-* save indicators - it was not echoed, 02212 0 44 504 1716 1541 ldi l.b020-* inhibit overflow- so count against sync ctr 02213 1 76 043 0 1542 aos t.sncc,1 aos the sync ctr 02214 0 44 424 1640 1543 ldi inpind-* 02215 1544 inp310 null 02215 0 41 413 1630 1545 ldx3 inchrp-* recover char pointer 02216 373 300 0 1546 iacx3 0,b.1 go to next 02217 0 76 412 1631 1547 aos inrem-* are there any more? 02220 4 75 447 1667 1548 tmi a.b018-*,* (inp010) yes, go do next one 1549 done, set return flags 02221 673 000 0 1550 ila 0 02222 0 20 410 1632 1551 szn inecho-* did we put anything in echo buffer? 02223 0 74 002 2225 1552 tze 2 no 02224 122 001 0 1553 iora reteco 02225 0 20 406 1633 1554 szn insusp-* found an output_suspend char? 02226 0 74 002 2230 1555 tze 2 no 02227 122 002 0 1556 iora retsus assm 01 12-10-82 16.070 fnp utility programs for mcs page 73 inproc subroutine -- copy chars into input buffers 02230 0 20 404 1634 1557 szn inres-* how about output_resume? 02231 0 74 002 2233 1558 tze 2 no 02232 122 004 0 1559 iora retres 1560 02233 1561 inpbak return inproc assm 01 12-10-82 16.070 fnp utility programs for mcs page 74 chkofc -- looks for output flow control chars 1562 ttls chkofc -- looks for output flow control chars 1563 this subroutine looks for output flow control characters 1564 and sets appropriate flags. if it completely processes 1565 the character (i.e., it is not to be echoed or stored) 1566 it returns to the next location; otherwise it returns 1567 one location further on 1568 1569 02235 1570 chkofc subr 02240 1 07 002 0 1571 lda t.flg2,1 oflow mode? 02241 0 31 460 1721 1572 cana l.b023-* =tfofc 02242 0 74 034 2276 1573 tze chk030-* no, forget it 02243 1 07 046 0 1574 lda t.ofch,1 we'll check for output flow control char 02244 2335 11 0 1575 lrl 9 get suspend char. first 02245 4 27 036 2303 1576 cmpa a.g003-*,* (inchar) is it? 02246 0 64 007 2255 1577 tnz chk010-* no, check for resume 02247 1 07 002 0 1578 lda t.flg2,1 yes, see if it's block acknowledgement end of binary card 00000035 02250 0 31 452 1722 1579 cana l.b024-* =tfblak 02251 0 64 004 2255 1580 tnz chk010-* yes, so suspend char isn't interesting 02252 4 76 027 2301 1581 aos a.g001-*,* (insusp) indicate receipt of suspend character 02253 4 56 027 2302 1582 stz a.g002-*,* (inres) overrides any preceding resume char 02254 0 71 023 2277 1583 tra chkret-* don't echo or store char 02255 6337 11 0 1584 chk010 qrl 9 get resume char 02256 4 67 025 2303 1585 cmpq a.g003-*,* (inchar) is our current char one? 02257 0 64 017 2276 1586 tnz chk030-* 02260 1 07 002 0 1587 lda t.flg2,1 yes, block acknowledgement? 02261 0 31 441 1722 1588 cana l.b024-* =tfblak 02262 0 64 004 2266 1589 tnz chk020-* yes, we'll have to adjust message count 02263 4 56 016 2301 1590 stz a.g001-*,* (insusp) overrides any previous suspend character 02264 4 76 016 2302 1591 aos a.g002-*,* (inres) yes, mark that it's to be resumed 02265 0 71 012 2277 1592 tra chkret-* done with char (don't echo or store) 1593 02266 1594 chk020 null ack 02266 1 07 047 0 1595 lda t.omct,1 get outstanding message count 02267 0 74 010 2277 1596 tze chkret-* don't let it go negative 02270 773 777 0 1597 iaa -1 else decrement it 02271 1 17 047 0 1598 sta t.omct,1 02272 422 002 0 1599 icmpa 2 can we resume now? 02273 0 65 004 2277 1600 tpl chkret-* no 02274 4 10 010 2304 1601 tsy a.g004-*,* (itest) yes, tell interpreter 02275 0 71 002 2277 1602 tra chkret-* done with char (don't store or echo) 1603 02276 0 76 737 2235 1604 chk030 aos chkofc-* to return + 1 02277 1605 chkret return chkofc 1606 1607 02301 0 01633 1 1608 a.g001 ind insusp 02302 0 01634 1 1609 a.g002 ind inres 02303 0 01635 1 1610 a.g003 ind inchar 02304 0 07000 3 1611 a.g004 ind itest assm 01 12-10-82 16.070 fnp utility programs for mcs page 75 inptim -- subroutine to run 1 second after inproc 1612 ttls inptim -- subroutine to run 1 second after inproc 1613 1614 this subroutine is scheduled by inproc to run one second 1615 later if a channel is in input flow control/timeout 1616 mode. its function is to see if more than half a second 1617 has elapsed since the last time inproc was called on behalf 1618 of the channel, and if so, to send an input_resume 1619 character to it on the assumption that it decided to 1620 suspend input. 1621 1622 x1 contains absolute tib address at entry 1623 1624 02305 1625 inptim null transferred to by secondary dispatcher 02305 2332 00 0 1626 cx1a copy absolute tib address into a 02306 0 17 052 2360 1627 sta ipabs-* save it for possible later call to dspqur 02307 4 10 043 2352 1628 tsy a.e006-*,* (setptw) virtualize it 02310 4332 00 0 1629 cax1 and back into x1 02311 1 04 050 0 1630 ldaq t.itim,1 get the time inproc last ran 02312 4 74 033 2345 1631 tze a.e001-*,* (secdsp) never, forget it 02313 4 07 033 2346 1632 lda a.e002-*,* (itmb) see how much later it is now 02314 0 17 047 2363 1633 sta iptemp+1-* 02315 0 56 045 2362 1634 stz iptemp-* 02316 4 04 031 2347 1635 ldaq a.e003-*,* (simclk) next timer runout time end of binary card 00000036 02317 0 24 043 2362 1636 sbaq iptemp-* result is current time 02320 1 24 050 0 1637 sbaq t.itim,1 how long has it been? 02321 4 75 024 2345 1638 tmi a.e001-*,* hasn't happened yet (unlikely) 02322 773 000 0 1639 iaa 0 more than 2**18 msec?? 02323 0 64 007 2332 1640 tnz itm010-* well, that's sure more than half a second 02324 0 67 031 2355 1641 cmpq l.e001-* 501(10) -- else, was it in fact? 02325 0 65 005 2332 1642 tpl itm010-* yes 1643 else we should check again in a second 02326 4 04 025 2353 1644 ldaq a.e007-*,* time, priority, address of this routine 02327 0 43 031 2360 1645 ldx1 ipabs-* recover absolute tib address 02330 4 10 024 2354 1646 tsy a.e008-*,* (dspqur) make sure we get called again 02331 4 71 014 2345 1647 tra a.e001-*,* (secdsp) done 1648 02332 1 47 045 0 1649 itm010 ldq t.ifch,1 it has been, so send resume char 02333 4336 11 0 1650 qls 9 get rid of suspend char 02334 6337 11 0 1651 qrl 9 02335 4 10 013 2350 1652 tsy a.e004-*,* eforce 02336 0 07 021 2357 1653 lda l.e003-* =^tfsked 02337 1 32 036 0 1654 ansa t.flg3,1 turn off scheduled flag 02340 1 07 004 0 1655 lda t.line,1 hsla line? 02341 0 31 015 2356 1656 cana l.e002-* =hslafl 02342 4 74 003 2345 1657 tze a.e001-*,* (secdsp) no, done 02343 4 10 006 2351 1658 tsy a.e005-*,* (hcheck) yes, make sure echoing happens 02344 4 71 001 2345 1659 tra a.e001-*,* (secdsp) finished now 1660 1661 assm 01 12-10-82 16.070 fnp utility programs for mcs page 76 inptim -- subroutine to run 1 second after inproc 02345 0 21000 3 1662 a.e001 ind secdsp 02346 0 00450 0 1663 a.e002 ind itmb 02347 0 22000 3 1664 a.e003 ind simclk 02350 0 02624 1 1665 a.e004 ind eforce 02351 0 17000 3 1666 a.e005 ind hcheck 02352 0 04036 1 1667 a.e006 ind setptw 02353 0 01656 1 1668 a.e007 ind a.b010 contains word pair for dspqur 02354 0 15000 3 1669 a.e008 ind dspqur 1670 1671 02355 000765 0 1672 l.e001 dec 501 02356 001000 0 1673 l.e002 vfd 18/hslafl 02357 777737 0 1674 l.e003 vfd o18//tfsked 1675 02360 1676 ipabs bss 1 absolute tib address (temp stored here) 02361 233100 0 02362 1677 even 02362 1678 iptemp bss 2 assm 01 12-10-82 16.070 fnp utility programs for mcs page 77 move subroutine does carriage movement 1679 ttls move subroutine does carriage movement 1680 1681 this subroutine looks in carriage movement 1682 table supplied in device table for character 1683 supplied in q reg. 1684 1685 returns: 0 -- linefeed char 1686 1 -- carriage return 1687 2 -- tab (a contains no. of blanks) 1688 3 -- backspace 1689 4 -- no match 1690 1691 tib address assumed in x1 as always 1692 02364 1693 move subr mov,(q,x3) end of binary card 00000037 1694 1695 first find out if we should bother 02375 0 56 117 2514 1696 stz mshift-* initially not a shift char 02376 0 41 114 2512 1697 ldx3 a.m001-* base of control tables 02377 3 41 001 0 1698 ldx3 ct.dev,3 array of device table ptrs 02400 1 40 017 0 1699 adcx3 t.type,1 indexed by terminal type 02401 3 07 777 0 1700 lda -1,3 -1 to convert index to offset 02402 0 37 103 2505 1701 ora l.m001-* (0, b.0) convert to char. addressing 02403 4333 00 0 1702 cax3 x3 now points to device table entry 1703 we want to check against carriage mvmt 1704 characters in device table entry 1705 02404 0 07 104 2510 1706 lda l.m004-* =tfsftr 02405 1 31 002 0 1707 cana t.flg2,1 02406 0 74 003 2411 1708 tze mov005-* not a shifter, only look for carriage movement 02407 673 006 0 1709 ila 6 else we have to look for shifts too 02410 0 71 002 2412 1710 tra mov010-* 02411 1711 mov005 null 02411 673 004 0 1712 ila 4 limit 02412 0 17 103 2515 1713 mov010 sta mlimit-* 02413 673 000 0 1714 ila 0 02414 3 67 205 0 1715 mov012 cmpq dt.cmt,3,b.0 02415 0 74 024 2441 1716 tze mov030-* hit 02416 773 001 0 1717 iaa 1 and increment counter 02417 0 27 076 2515 1718 cmpa mlimit-* end of table? 02420 0 74 003 2423 1719 tze mov020-* no hits 02421 373 300 0 1720 iacx3 0,b.1 not last, bump pointer 02422 0 71 772 2414 1721 tra mov012-* check next char. in table 1722 * 02423 1723 mov020 null not a special carriage mvmt. char. 02423 0 07 065 2510 1724 lda l.m004-* =tfsftr 02424 1 31 002 0 1725 cana t.flg2,1 02425 0 64 006 2433 1726 tnz mov025-* if we don't have an ibm terminal, 02426 7333 00 0 1727 cqa find out if it's a control char. 02427 422 177 0 1728 icmpa rubout assm 01 12-10-82 16.070 fnp utility programs for mcs page 78 move subroutine does carriage movement 02430 0 74 007 2437 1729 tze mov027-* if so, don't bump column pointer 02431 422 040 0 1730 icmpa space 02432 0 75 005 2437 1731 tmi mov027-* 02433 1 07 033 0 1732 mov025 lda t.pos,1 make sure we're not over limit end of binary card 00000038 02434 422 377 0 1733 icmpa 255 02435 0 65 002 2437 1734 tpl 2 we are, don't increment 02436 1 76 033 0 1735 aos t.pos,1 else, push to next column 02437 673 004 0 1736 mov027 ila 4 indicate no hit return 02440 0 71 042 2502 1737 tra movbak-* 1738 * 02441 1739 mov030 null 1740 hit on carriage movement table 02441 422 004 0 1741 icmpa 4 was it a shift character? 02442 0 75 005 2447 1742 tmi mov035-* no, check for something else 02443 773 775 0 1743 iaa -3 yes, reduce it to 1 or 2 02444 0 17 050 2514 1744 sta mshift-* save it for later 02445 673 004 0 1745 ila 4 return as though no hit 02446 0 71 034 2502 1746 tra movbak-* all done (carriage didn't move) 1747 02447 1748 mov035 null 02447 422 002 0 1749 icmpa 2 cr or lf? 02450 0 65 003 2453 1750 tpl mov040-* 02451 1 56 033 0 1751 stz t.pos,1 yes, zero column indicator 02452 0 71 030 2502 1752 tra movbak-* 02453 1753 mov040 null 02453 422 003 0 1754 icmpa 3 backspace? 02454 0 64 007 2463 1755 tnz mov050-* 02455 1 20 033 0 1756 szn t.pos,1 don't decrement column indicator if 02456 0 74 024 2502 1757 tze movbak-* it's already zero 02457 673 777 0 1758 ila -1 02460 1 16 033 0 1759 asa t.pos,1 02461 673 003 0 1760 ila 3 bump return point for backspace 02462 0 71 020 2502 1761 tra movbak-* 1762 * 02463 1763 mov050 null must be tab 02463 673 000 0 1764 ila 0 02464 1 47 033 0 1765 ldq t.pos,1 get mod(t.pos, 10) 02465 0 67 024 2511 1766 cmpq l.m005-* (=255) make sure we're not over limit 02466 0 65 011 2477 1767 tpl mov070-* we are, don't increment t.pos 02467 0 67 017 2506 1768 cmpq l.m002-* =10 02470 0 75 003 2473 1769 tmi mov060-* if it's < 10, don't bother dividing 02471 1770 dvd (l.m002-*) else divide by 10 1771 remainder is in q 02473 1772 mov060 null 02473 0 57 020 2513 1773 stq mtemp-* save mod(t.pos,10) 02474 673 012 0 1774 ila 10 t.pos<-t.pos+10-mod(t.pos,10) 02475 0 26 016 2513 1775 sba mtemp-* 02476 1 16 033 0 1776 asa t.pos,1 02477 0 76 665 2364 1777 mov070 aos move-* bump return pointer for tab return 02500 0 76 664 2364 1778 aos move-* by hand because have to keep space count in a assm 01 12-10-82 16.070 fnp utility programs for mcs page 79 move subroutine does carriage movement 02501 0 71 002 2503 1779 tra 2 1780 02502 0 16 662 2364 1781 movbak asa move-* bump return pointer appropriately 02503 1782 return move end of binary card 00000039 1783 1784 02505 2 00000 0 1785 l.m001 zero 0,b.0 02506 000012 0 1786 l.m002 dec 10 02507 207000 0 1787 l.m003 vfd 18/tfcrec+tflfec+tftbec+tfecpx 02510 200000 0 1788 l.m004 vfd 18/tfsftr 02511 000377 0 1789 l.m005 dec 255 02512 0 01000 3 1790 a.m001 ind ctrl address of control tables 02513 1791 mtemp bss 1 temp for saving mod(t.pos,10) 02514 1792 mshift bss 1 char was case shift (1 for upper, 2 for lower) 02515 1793 mlimit bss 1 number of chars to scan in cmt assm 01 12-10-82 16.070 fnp utility programs for mcs page 80 echo buffer subroutines 1794 ttls echo buffer subroutines 1795 echo buffer format 1796 000000 1797 eb.inp equ 0 ptr to next place for input character 000001 1798 eb.out equ 1 ptr to next output character 000002 1799 eb.tly equ 2 current character count (upper half) 000002 1800 eb.dta equ 2 first data char (lower half) 000040 1801 eb.end equ bufsiz end of echo buffer 000073 1802 ebsize equ bufsiz*2-5 maximum number of echo chars 1803 1804 1805 puteco subroutine puts input character in 1806 echo buffer. character is supplied in q 1807 tib address on x1 as usual 1808 if character is ht, space count is in x2 1809 02516 1810 hecho null 02516 1811 lecho null this is the external interface 02516 1812 puteco subr put,(x2,x3,a,q) 1813 02535 1 07 002 0 1814 lda t.flg2,1 frame in progress? 02536 0 31 242 3000 1815 cana l.c006-* =tffip 02537 0 64 063 2622 1816 tnz putbak-* yes, no echoing 1817 02540 0 10 167 2727 1818 tsy putone-* 02541 0 71 061 2622 1819 tra putbak-* if no more room, skip other stuff 1820 02542 1 07 004 0 1821 lda t.line,1 hsla line? 02543 0 31 237 3002 1822 cana l.c008-* =hslafl 02544 0 74 044 2610 1823 tze put070-* no, lsla_man will handle delays later 02545 1 03 037 0 1824 ldx2 t.dtp,1 yes, put delays in echo buffer 02546 0 74 022 2570 1825 tze put039-* no delay table, check tabecho 02547 0 07 765 2534 1826 lda putsq-* get echoed char 02550 422 012 0 1827 icmpa lf linefeed? 02551 0 64 004 2555 1828 tnz put020-* no, try something else 02552 2 07 003 0 1829 lda dl.lf,2 yes, get linefeed delays 02553 0 74 047 2622 1830 tze putbak-* none, skip it 02554 0 71 012 2566 1831 tra put030-* go do it 1832 end of binary card 00000040 02555 422 015 0 1833 put020 icmpa cr carriage return? 02556 0 64 013 2571 1834 tnz put040-* nope 02557 2 07 004 0 1835 lda dl.cr,2 get cr delay factor 02560 1836 mpy (a.c002-*,*) oldpos, original column position 02562 0 74 040 2622 1837 tze putbak-* no delays, skip it 02563 4337 11 0 1838 qrs 9 divide by 512 02564 573 003 0 1839 iaq 3 for good measure 02565 7333 00 0 1840 cqa result into a 02566 473 000 0 1841 put030 ilq null delay char 02567 0 71 011 2600 1842 tra put050-* go put nulls in echo buffer 1843 assm 01 12-10-82 16.070 fnp utility programs for mcs page 81 echo buffer subroutines 02570 0 07 744 2534 1844 put039 lda putsq-* get character into a again 02571 422 011 0 1845 put040 icmpa tab not cr or lf, is it tab? 02572 0 64 030 2622 1846 tnz putbak-* no, done 02573 1 07 001 0 1847 lda t.flg,1 tab echo? 02574 0 31 203 2777 1848 cana l.c005-* =tftbec 02575 0 74 025 2622 1849 tze putbak-* no, skip it 02576 0 07 733 2531 1850 lda putsx2-* get space count 02577 473 040 0 1851 ilq blank get space char 1852 02600 1853 put050 null here to store blanks or nulls in buffer 02600 322 777 0 1854 iera -1 negate count 02601 773 001 0 1855 iaa 1 02602 0 17 204 3006 1856 sta puttmp-* 02603 0 10 041 2644 1857 put060 tsy putin-* put one in 02604 0 71 016 2622 1858 tra putbak-* buffer full, no more 02605 0 76 201 3006 1859 aos puttmp-* count one 02606 0 75 775 2603 1860 tmi put060-* more, go do them 02607 0 71 013 2622 1861 tra putbak-* no more, finished 1862 02610 1863 put070 null lsla line, may need to restore t.pos 02610 1 07 001 0 1864 lda t.flg,1 echoplex? 02611 0 31 165 2776 1865 cana l.c004-* =tfecpx 02612 0 64 006 2620 1866 tnz put080-* yes 02613 0 31 164 2777 1867 cana l.c005-* (=tftbec) no, try tab echo 02614 0 74 006 2622 1868 tze putbak-* no, done 02615 0 07 717 2534 1869 lda putsq-* get original char again 02616 422 011 0 1870 icmpa ht is it a tab? 02617 0 64 003 2622 1871 tnz putbak-* no, not interesting 02620 4 07 151 2771 1872 put080 lda a.c002-*,* oldpos 02621 1 17 033 0 1873 sta t.pos,1 1874 02622 1875 putbak return puteco 1876 1877 02624 1878 eforce subr efo,(a,q,x3) end of binary card 00000041 1879 1880 short version of puteco that puts the character 1881 in the echo buffer even if in a blk_xfer frame, 1882 and doesn't bother about delays or tabs. called 1883 for such things as input suspend/resume characters. 1884 1885 q contains character to be echoed. 1886 02640 0 10 067 2727 1887 tsy putone-* this actually does all the work 02641 2331 00 0 1888 nop doesn't matter whether or not it succeeds 02642 1889 return eforce assm 01 12-10-82 16.070 fnp utility programs for mcs page 82 putin -- insert a char in the echo buffer 1890 ttls putin -- insert a char in the echo buffer 02644 1891 putin subr pin,(a,q,x2) 1892 1893 this subroutine does the actual insertion in the 1894 echo buffer 1895 1896 q contains character to insert 1897 x3 points to echo buffer 1898 returns to callpoint if echo buffer full, 1899 to one loc. beyond otherwise 1900 02660 3 07 002 0 1901 lda eb.tly,3 see if it's full 02661 2337 11 0 1902 arl 9 02662 422 073 0 1903 icmpa ebsize check against maximum 02663 0 75 013 2676 1904 tmi pin010-* 02664 0 07 111 2775 1905 lda l.c003-* (=tfbel) echo buffer is full, 02665 1 72 001 0 1906 orsa t.flg,1 set flag to send bell 02666 1907 cmeter mincd,m.ebof,l.c011-* meter this end of binary card 00000042 02675 0 71 030 2725 1908 tra pinbak-* and return 02676 1909 pin010 null 02676 0 76 746 2644 1910 aos putin-* bump return pointer 02677 1 07 004 0 1911 lda t.line,1 if hsla line in tabecho, don't store tab 02700 0 31 102 3002 1912 cana l.c008-* =hslafl 02701 0 74 007 2710 1913 tze pin015-* not hsla, as you were 02702 7333 00 0 1914 cqa get character 02703 422 011 0 1915 icmpa tab 02704 0 64 004 2710 1916 tnz pin015-* not tab, go ahead 02705 1 07 001 0 1917 lda t.flg,1 check for tabecho 02706 0 31 071 2777 1918 cana l.c005-* tftbec 02707 0 64 016 2725 1919 tnz pinbak-* don't store it, we'll put in spaces later 02710 1920 pin015 null 02710 3 03 000 0 1921 ldx2 eb.inp,3 get input pointer 1922 we're ready to store char 02711 2 57 200 0 1923 stq 0,2,b.0 do it 02712 273 300 0 1924 iacx2 0,b.1 increment input pointer 02713 3332 00 0 1925 cx2a find out if we went off end 02714 0 31 065 3001 1926 cana l.c007-* =o077777 02715 0 74 003 2720 1927 tze pin020-* we went off end of memory, in fact 02716 0 31 056 2774 1928 cana l.c002-* =o000037 02717 0 64 003 2722 1929 tnz pin030-* 02720 3333 00 0 1930 pin020 cx3a 0 mod 32 (wraparound) 02721 0 06 052 2773 1931 ada l.c001-* so point to beginning again 1932 * 02722 1933 pin030 null 02722 3 17 000 0 1934 sta eb.inp,3 02723 0 07 061 3004 1935 lda l.c010-* =o1000 02724 3 16 002 0 1936 asa eb.tly,3 increment tally 02725 1937 pinbak return putin assm 01 12-10-82 16.070 fnp utility programs for mcs page 83 putone -- set up echo buffer 1938 ttls putone -- set up echo buffer 02727 1939 putone subr puo,(q) 1940 1941 this subroutine allocates an echo buffer (if 1942 necessary) and puts a character in it, updating 1943 the "inecho" flag. it is called by puteco and eforce. 1944 1945 q contains character to echo 1946 on exit, x3 points to the echo buffer if any 1947 returns to callpoint if echo buffer full or no 1948 buffer could be allocated, otherwise to one location 1949 further on 1950 02735 1 41 025 0 1951 ldx3 t.echo,1 is there an echo buffer? 02736 0 64 013 2751 1952 tnz puo010-* yes, proceed 1953 no, we'll have to get one 02737 473 040 0 1954 ilq bufsiz 02740 4 10 030 2770 1955 tsy a.c001-*,* (getubf) get a buffer 02741 0 71 017 2760 1956 tra puo020-* couldn't get one, never mind 1957 * 02742 1 50 025 0 1958 stx3 t.echo,1 now we have it, save address end of binary card 00000043 02743 0 47 571 2534 1959 ldq putsq-* copy char back to q 02744 3333 00 0 1960 cx3a 02745 0 06 026 2773 1961 ada l.c001-* first data char. save it in 02746 3 17 000 0 1962 sta eb.inp,3 input and 02747 3 17 001 0 1963 sta eb.out,3 output pointers 02750 3 56 002 0 1964 stz eb.tly,3 initialize tally 02751 0 10 673 2644 1965 puo010 tsy putin-* put the character in 02752 0 71 004 2756 1966 tra puobak-* if no more room, skip other stuff 1967 02753 0 76 754 2727 1968 aos putone-* 02754 673 001 0 1969 ila 1 mark the echoed flag 02755 4 72 015 2772 1970 orsa a.c003-*,* inecho 02756 1971 puobak return putone 1972 02760 1973 puo020 null allocation failure, meter it 02760 1974 cmeter mincs,m.inaf,l.c011-* 02767 0 71 767 2756 1975 tra puobak-* 1976 1977 02770 0 04225 1 1978 a.c001 ind getubf subr to get an unreserved buffer 02771 0 01637 1 1979 a.c002 ind oldpos 02772 0 01632 1 1980 a.c003 ind inecho 1981 02773 3 00002 0 1982 l.c001 zero eb.dta,b.1 offset of first char. position 02774 000037 0 1983 l.c002 oct 37 mask for mod 32 02775 000002 0 1984 l.c003 vfd 18/tfbel 02776 200000 0 1985 l.c004 vfd 18/tfecpx 02777 004000 0 1986 l.c005 vfd 18/tftbec 03000 100000 0 1987 l.c006 vfd 18/tffip assm 01 12-10-82 16.070 fnp utility programs for mcs page 84 putone -- set up echo buffer 03001 077777 0 1988 l.c007 oct 077777 03002 001000 0 1989 l.c008 vfd 18/hslafl 03003 001000 0 1990 l.c009 vfd 18/tflfec 03004 001000 0 1991 l.c010 oct 1000 03005 000001 0 1992 l.c011 dec 1 1993 1994 03006 1995 puttmp bss 1 assm 01 12-10-82 16.070 fnp utility programs for mcs page 85 negotiated echo handler 1996 ttls negotiated echo handler 1997 1998 called by inproc when would normally 1999 do echoplex echoing 2000 x1 is tib, return a nonzero if echoed, 0 if did not. 2001 inchar in a 2002 03007 2003 echngo subr eng end of binary card 00000044 2004 03012 0 17 046 3060 2005 sta engich-* 03013 1 07 036 0 2006 lda t.flg3,1 breakall? 03014 0 31 041 3055 2007 cana l.s002-* =tfbral no echo if not 03015 0 74 033 3050 2008 tze eng180-* 03016 1 20 042 0 2009 szn t.scll,1 is there room left to echo? 03017 0 74 031 3050 2010 tze eng180-* no, dont attempt to echo. 03020 0 07 040 3060 2011 lda engich-* take a look at char 03021 222 200 0 2012 icana 128 high bit on (meta some day?) 03022 0 64 026 3050 2013 tnz eng180-* yup, can't echo 2014 2015 check char's bit in table. 2016 03023 022 017 0 2017 iana 15 get low bits 03024 0 06 030 3054 2018 ada l.s001-* build instruction 03025 0 17 011 3036 2019 sta eng020-* 03026 0 07 032 3060 2020 lda engich-* get char 03027 2337 04 0 2021 arl 4 get high bits 03030 0 17 031 3061 2022 sta engtmp-* 03031 1 03 044 0 2023 ldx2 t.entp,1 damn well better be table 03032 0 64 002 3034 2024 tnz 2 or r0 screwed up 03033 2025 die 99 03034 0 02 025 3061 2026 adcx2 engtmp-* build word address 03035 2 07 003 0 2027 lda dl.hsz,2 get table word 03036 2028 eng020 bss 1 test high bit 03037 0 75 011 3050 2029 tmi eng180-* this is a true break, no echo. 2030 2031 now we have to echo this thing. 2032 03040 0 47 020 3060 2033 ldq engich-* 03041 673 000 0 2034 ila 0 03042 0332 00 0 2035 cax2 03043 4 10 014 3057 2036 tsy a.s002-*,* until we have something cleverer 2037 03044 1 56 043 0 2038 stz t.sncc,1 we echoed this char, so zero the 2039 protocol sync count of chars not 2040 echoed since echoed char. 2041 2042 char has been echoed, update line length left. 03045 673 777 0 2043 ila -1 03046 1 16 042 0 2044 asa t.scll,1 decrement line space left 2045 and return nonzero a. assm 01 12-10-82 16.070 fnp utility programs for mcs page 86 negotiated echo handler 03047 0 71 003 3052 2046 tra engret-* 2047 03050 1 56 042 0 2048 eng180 stz t.scll,1 turn off all further echnego 03051 673 000 0 2049 ila 0 say that we did not echo 2050 inproc will aos t.sncc apropriately 03052 2051 engret return echngo 2052 03054 0336 00 0 2053 l.s001 als 0 instruction template 03055 000020 0 2054 l.s002 vfd 18/tfbral 03056 0 16000 3 2055 a.s001 ind ecgifl end of binary card 00000045 03057 0 02516 1 2056 a.s002 ind puteco 03060 2057 engich bss 1 03061 2058 engtmp bss 1 2059 assm 01 12-10-82 16.070 fnp utility programs for mcs page 87 outprc subroutine -- for output subop 2060 ttls outprc subroutine -- for output subop 2061 subroutine called by both lsla_man and hsla_man 2062 to process output subop of dcw list 2063 2064 x1 - virtual tib address 2065 000077 2066 opend bool 77 000001 2067 pradd equ 1 000002 2068 kyadd equ 2 000003 2069 outmsg equ 3 000004 2070 repeat equ 4 000004 2071 maxctl equ 4 maximum number of words in addressing string 2072 777000 2073 nbftmk bool /buftmk 2074 2075 03062 2076 outprc subr out,(a,q,x2,x3) 2077 2078 03101 1 07 023 0 2079 lda t.dcwa,1 03102 0 37 231 3333 2080 ora l.o001-* 0,b.0 03103 4333 00 0 2081 cax3 point to first character of "output" 2082 03104 2083 out010 null 03104 373 300 0 2084 iacx3 0,b.1 next char. 03105 3 07 200 0 2085 lda 0,3,b.0 pick it up 03106 0 27 226 3334 2086 cmpa l.o002-* =o000400 03107 0 65 003 3112 2087 tpl out020-* if less than 400(8), 03110 4 10 244 3354 2088 tsy a.o001-*,* literal char is to be inserted in buffer 2089 (insert) 03111 0 71 773 3104 2090 tra out010-* and get next 2091 03112 2092 out020 null 03112 022 377 0 2093 iana 255 we know high-order bit is on, so turn 2094 it off for easier comparison 03113 0 74 172 3305 2095 tze out090-* die if result is zero 2096 03114 422 077 0 2097 icmpa opend 03115 0 74 202 3317 2098 tze out200-* end of subop 2099 03116 422 003 0 2100 icmpa kyadd+1 printer or keyboard addressing? 03117 0 65 044 3163 2101 tpl out050-* 2102 yes, get device table pointer 2103 but first check and make sure tfctrl is on 03120 6333 00 0 2104 caq 03121 0 07 214 3335 2105 lda l.o003-* =tfctrl 03122 1 31 001 0 2106 cana t.flg,1 03123 0 74 761 3104 2107 tze out010-* if it isn't, skip this item 2108 03124 0 03 231 3355 2109 ldx2 a.o002-* address of control tables 03125 2 03 001 0 2110 ldx2 ct.dev,2 assm 01 12-10-82 16.070 fnp utility programs for mcs page 88 outprc subroutine -- for output subop 03126 1 02 017 0 2111 adcx2 t.type,1 03127 2 03 777 0 2112 ldx2 -1,2 now points to correct device tab entry end of binary card 00000046 03130 7333 00 0 2113 cqa restore control char 03131 422 002 0 2114 icmpa kyadd 03132 0 74 017 3151 2115 tze out030-* 03133 2 07 003 0 2116 lda dt.prt,2 get pointer to printer addr sequence 03134 1 20 013 0 2117 szn t.ocur,1 if there's already an output chain, 03135 0 74 013 3150 2118 tze out028-* 03136 0 17 213 3351 2119 sta otemp-* put printer addr ahead of it 03137 1 07 012 0 2120 lda t.ocp,1 which means putting it at head of pending output 03140 1 03 014 0 2121 ldx2 t.olst,1 get end of t.ocur chain 03141 2 17 000 0 2122 sta bf.nxt,2 hook t.ocp chain on at end 03142 1 07 013 0 2123 lda t.ocur,1 this becomes new t.ocp chain 03143 1 17 012 0 2124 sta t.ocp,1 2125 03144 1 56 013 0 2126 stz t.ocur,1 clear current output chain 03145 1 56 014 0 2127 stz t.olst,1 03146 1 56 016 0 2128 stz t.ocnt,1 2129 03147 0 07 202 3351 2130 lda otemp-* restore a register 03150 2131 out028 null 03150 0 71 002 3152 2132 tra 2 skip over fetch of kybd string 03151 2133 out030 null 03151 2 07 002 0 2134 lda dt.key,2 get keyboard addr sequence 03152 0 37 161 3333 2135 ora l.o001-* 0,b.0 03153 0332 00 0 2136 cax2 point to beginning of string 03154 2 47 200 0 2137 ldq 0,2,b.0 get character count in q 2138 03155 2139 out040 null 03155 273 300 0 2140 iacx2 0,b.1 get next char. 03156 2 07 200 0 2141 lda 0,2,b.0 03157 4 10 175 3354 2142 tsy a.o001-*,* (insert) put it in output buffer 03160 573 777 0 2143 iaq -1 more? 03161 0 64 774 3155 2144 tnz out040-* yes, get next addressing char 03162 0 71 722 3104 2145 tra out010-* else get next output char 2146 03163 2147 out050 null 03163 422 003 0 2148 icmpa outmsg thread output message into chain? 03164 0 64 117 3303 2149 tnz out080-* 2150 yes 03165 0 56 166 3353 2151 stz ohldot-* turn off local flag 03166 1 07 012 0 2152 lda t.ocp,1 get pointer to head of output chain 03167 0 74 107 3276 2153 tze out075-* if there isn't one, nothing to do 03170 0332 00 0 2154 cax2 03171 2 07 001 0 2155 lda bf.flg,2 get buffer flags 03172 0 31 152 3344 2156 cana l.o010-* check hold output buffer flag 03173 0 74 012 3205 2157 tze out054-* not on - usual outmsg 03174 1 56 013 0 2158 stz t.ocur,1 2159 03175 0 76 156 3353 2160 aos ohldot-* turn on local flag assm 01 12-10-82 16.070 fnp utility programs for mcs page 89 outprc subroutine -- for output subop 03176 1 13 014 0 2161 out052 stx2 t.olst,1 end of binary card 00000047 03177 0 31 146 3345 2162 cana l.o011-* check last buffer in message flag 03200 0 64 005 3205 2163 tnz out054-* yes - end of partial chain 03201 2 03 000 0 2164 ldx2 bf.nxt,2 advance to next buffer 03202 0 74 003 3205 2165 tze out054-* end of chain 03203 2 07 001 0 2166 lda bf.flg,2 get buffer flags 03204 0 71 772 3176 2167 tra out052-* loop 03205 1 07 012 0 2168 out054 lda t.ocp,1 get pointer to output chain 03206 1 20 013 0 2169 szn t.ocur,1 are we currently working on one? 03207 0 64 011 3220 2170 tnz out060-* 03210 1 17 013 0 2171 sta t.ocur,1 no, make head of chain current buffer 03211 773 002 0 2172 iaa bf.dta and point t.occh to first char slot 03212 0 37 121 3333 2173 ora l.o001-* =0,b.0 03213 1 17 015 0 2174 sta t.occh,1 03214 1 07 013 0 2175 lda t.ocur,1 03215 0 20 136 3353 2176 szn ohldot-* check local flag 03216 0 74 007 3225 2177 tze out070-* 03217 0 71 057 3276 2178 tra out075-* skip all this other stuff 2179 03220 2180 out060 null there is a chain, make sure 03220 1 03 014 0 2181 ldx2 t.olst,1 t.olst really points to last 03221 2 20 000 0 2182 szn bf.nxt,2 buffer 03222 0 74 002 3224 2183 tze 2 03223 2184 die 11 2185 03224 2 17 000 0 2186 sta bf.nxt,2 now hook new chain to last buffer 03225 2187 out070 null 03225 1 76 016 0 2188 aos t.ocnt,1 increment output buffer count 03226 0332 00 0 2189 cax2 03227 0 13 123 3352 2190 stx2 obufad-* save this address for later 03230 1 07 002 0 2191 lda t.flg2,1 block-acknowledgement mode? 03231 0 34 112 3343 2192 ana l.o009-* =tfblak+tfofc 03232 0 27 111 3343 2193 cmpa l.o009-* see if they're both on 03233 0 64 027 3262 2194 tnz out071-* no, proceed 03234 2 07 001 0 2195 lda bf.tly,2 yes, we must check to see if buffer ends in etb 03235 0 34 111 3346 2196 ana l.o012-* buftmk 03236 773 777 0 2197 iaa -1 back up one to get right word 03237 0335 01 0 2198 lrs 1 separate word and char parts of address 03240 0 06 107 3347 2199 ada l.o013-* (bf.dta,b.0) a now points to word of last char 03241 4336 00 0 2200 qls 0 one more char? 03242 0 65 002 3244 2201 tpl 2 no 03243 0 37 105 3350 2202 ora l.o014-* (0,b.1), yes, account for it 03244 0 06 106 3352 2203 ada obufad-* add address of base of buffer 03245 0332 00 0 2204 cax2 x2 now points to last char end of binary card 00000048 03246 1 07 046 0 2205 lda t.ofch,1 get flow control chars 03247 2337 11 0 2206 arl 9 isolate eond-of-block char 03250 2 27 200 0 2207 cmpa 0,2,b.0 is this it? 03251 0 64 011 3262 2208 tnz out071-* no, proceed normally 03252 1 76 047 0 2209 aos t.omct,1 yes, count the message assm 01 12-10-82 16.070 fnp utility programs for mcs page 90 outprc subroutine -- for output subop 03253 0 03 077 3352 2210 ldx2 obufad-* and break chain here 03254 1 13 014 0 2211 stx2 t.olst,1 03255 2 07 000 0 2212 lda bf.nxt,2 keep the remains in t.ocp 03256 1 17 012 0 2213 sta t.ocp,1 03257 2 56 000 0 2214 stz bf.nxt,2 detach the chain 03260 0 74 011 3271 2215 tze out073-* if there is no more, check for sendout 03261 0 71 015 3276 2216 tra out075-* else we're done -- don't turn on tfwrit 03262 0 03 070 3352 2217 out071 ldx2 obufad-* restore current buffer address 03263 2 07 000 0 2218 lda bf.nxt,2 search chain for new end 03264 0 64 741 3225 2219 tnz out070-* 2220 03265 0 07 055 3342 2221 lda l.o008-* (=tfwrit) turn on tfwrit now 03266 1 72 001 0 2222 orsa t.flg,1 not before. 2223 03267 2224 out072 null 03267 1 13 014 0 2225 stx2 t.olst,1 03270 1 56 012 0 2226 stz t.ocp,1 zero output chain pointer to allow 2227 for new one 03271 673 002 0 2228 out073 ila bufthr get output buffer threshold 03272 1 27 016 0 2229 cmpa t.ocnt,1 if we're not over it, 03273 0 75 003 3276 2230 tmi out075-* 03274 473 105 0 2231 ilq sndout ask for more output 03275 4 10 061 3356 2232 tsy a.o003-*,* denq 2233 03276 2234 out075 null 03276 373 300 0 2235 iacx3 0,b.1 get next char 03277 3 07 200 0 2236 lda 0,3,b.0 had better be end of subop 03300 0 27 037 3337 2237 cmpa l.o005-* =477 03301 0 74 016 3317 2238 tze out200-* 03302 2239 die 7 2240 03303 2241 out080 null only remaining possibility 03303 422 004 0 2242 icmpa repeat is repeat 03304 0 74 002 3306 2243 tze out100-* 03305 2244 out090 null 03305 2245 die 9 2246 03306 2247 out100 null 03306 3 07 300 0 2248 lda 0,3,b.1 get character to be repeated 03307 373 201 0 2249 iacx3 1,b.0 03310 3 47 200 0 2250 ldq 0,3,b.0 get repeat count 03311 0 64 002 3313 2251 tnz 2 where 0 means 512 03312 0 47 026 3340 2252 ldq l.o006-* =512 2253 03313 2254 out110 null 03313 4 10 041 3354 2255 tsy a.o001-*,* insert 03314 573 777 0 2256 iaq -1 repeat count exhausted? end of binary card 00000049 03315 0 64 776 3313 2257 tnz out110-* no, do it again 03316 0 71 566 3104 2258 tra out010-* yes, get next item 2259 assm 01 12-10-82 16.070 fnp utility programs for mcs page 91 outprc subroutine -- for output subop 2260 03317 2261 out200 null end of output subop 03317 3333 00 0 2262 cx3a 03320 0 34 021 3341 2263 ana l.o007-* =o077777 convert to word addressing 03321 773 001 0 2264 iaa 1 point to next word 03322 6333 00 0 2265 caq save new address 03323 1 26 023 0 2266 sba t.dcwa,1 get number of words processed 03324 0 17 025 3351 2267 sta otemp-* 03325 1 07 024 0 2268 lda t.dcwl,1 decrement dcw length accordingly 03326 0 26 023 3351 2269 sba otemp-* 03327 1 17 024 0 2270 sta t.dcwl,1 03330 1 57 023 0 2271 stq t.dcwa,1 save new dcw list pointer 03331 2272 return outprc 2273 * 2274 2275 03333 2 00000 0 2276 l.o001 zero 0,b.0 for character addressing 03334 000400 0 2277 l.o002 oct 400 03335 000400 0 2278 l.o003 vfd 18/tfctrl 03336 000004 0 2279 l.o004 vfd 18/maxctl 03337 000477 0 2280 l.o005 oct 477 03340 001000 0 2281 l.o006 dec 512 03341 077777 0 2282 l.o007 oct 77777 03342 000001 0 2283 l.o008 vfd 18/tfwrit 03343 004100 0 2284 l.o009 vfd 18/tfblak+tfofc 03344 001000 0 2285 l.o010 vfd 18/bffhld hold output buffer flag 03345 040000 0 2286 l.o011 vfd 18/bfflst last buffer in message flag 03346 000777 0 2287 l.o012 vfd 18/buftmk 03347 2 00002 0 2288 l.o013 zero bf.dta,b.0 03350 3 00000 0 2289 l.o014 zero 0,b.1 2290 03351 2291 otemp bss 1 temporary storage 03352 2292 obufad bss 1 temporary for buffer address 03353 2293 ohldot bss 1 flag - on if hold output buffers set 2294 03354 0 03357 1 2295 a.o001 ind insert 03355 0 01000 3 2296 a.o002 ind ctrl 03356 0 02000 3 2297 a.o003 ind denq 2298 assm 01 12-10-82 16.070 fnp utility programs for mcs page 92 insert -- subroutine to insert a char into output chain 2299 ttls insert -- subroutine to insert a char into output chain 2300 2301 insert called by outprc to insert char (passed in a) 2302 03357 2303 insert subr ins,(a,q,x2,x3) end of binary card 00000050 2304 2305 03376 1 41 013 0 2306 ldx3 t.ocur,1 is there a buffer chain? 03377 0 64 012 3411 2307 tnz ins010-* 2308 no, must allocate a buffer 03400 473 040 0 2309 ilq bufsiz 03401 4 10 070 3471 2310 tsy a.p001-*,* getbuf 03402 2311 die 10 die if we couldn't get one 2312 03403 1 50 013 0 2313 stx3 t.ocur,1 this is now current buffer 03404 3333 00 0 2314 cx3a 03405 773 002 0 2315 iaa bf.dta point output char. pointer at 03406 0 37 054 3462 2316 ora l.p001-* (0,b.0) first data char of new chain 03407 1 17 015 0 2317 sta t.occh,1 03410 0 71 027 3437 2318 tra ins030-* 2319 03411 2320 ins010 null find out if last buffer is full 03411 1 41 014 0 2321 ldx3 t.olst,1 03412 4 10 051 3463 2322 tsy l.p002-*,* =addr(fulbuf) 2323 returns normally if full 2324 or +1 with tally in a 03413 0 71 014 3427 2325 tra ins020-* 03414 0335 01 0 2326 lrs 1 get tally inwords but save 03415 0 17 053 3470 2327 sta itemp1-* low-order bit in q 03416 3333 00 0 2328 cx3a 03417 773 002 0 2329 iaa bf.dta 03420 0 06 050 3470 2330 ada itemp1-* 03421 0 37 041 3462 2331 ora l.p001-* 0,b.0 03422 4333 00 0 2332 cax3 03423 4336 00 0 2333 qls 0 was tally odd? 03424 0 65 021 3445 2334 tpl ins040-* 03425 373 300 0 2335 iacx3 0,b.1 yes, bump data pointer 03426 0 71 017 3445 2336 tra ins040-* 2337 03427 2338 ins020 null 03427 473 040 0 2339 ilq bufsiz buffer was full, get another 03430 4 10 041 3471 2340 tsy a.p001-*,* getbuf 03431 2341 die 10 die if we can't 2342 03432 1 03 014 0 2343 ldx2 t.olst,1 03433 2 50 000 0 2344 stx3 bf.nxt,2 save in old last buffer's 2345 forward pointer 03434 3333 00 0 2346 cx3a 03435 773 002 0 2347 iaa bf.dta point to first data char end of binary card 00000051 assm 01 12-10-82 16.070 fnp utility programs for mcs page 93 insert -- subroutine to insert a char into output chain 03436 0 37 024 3462 2348 ora l.p001-* 0,b.0 03437 2349 ins030 null 03437 1 50 014 0 2350 stx3 t.olst,1 set new last buffer 2351 mark this buffer as containing control chars 03440 6333 00 0 2352 caq save the a reg. 03441 0 07 026 3467 2353 lda l.p006-* =bffctl 03442 3 72 001 0 2354 orsa bf.flg,3 03443 7333 00 0 2355 cqa 2356 03444 4333 00 0 2357 cax3 2358 2359 03445 2360 ins040 null x3 points to where char should go 03445 0 07 725 3372 2361 lda inssa-* get the char 03446 3 17 200 0 2362 sta 0,3,b.0 store it in buffer 03447 1 03 014 0 2363 ldx2 t.olst,1 03450 2 07 001 0 2364 lda bf.tly,2 get the old tally 03451 0 34 013 3464 2365 ana l.p003-* =buftmk 03452 773 001 0 2366 iaa 1 bump it 03453 0 17 015 3470 2367 sta itemp1-* save it 03454 0 07 012 3466 2368 lda l.p005-* =^buftmk 03455 2 32 001 0 2369 ansa bf.tly,2 zero out tally field 03456 0 07 012 3470 2370 lda itemp1-* so as to replace it 03457 2 72 001 0 2371 orsa bf.tly,2 03460 2372 return insert 2373 2374 2375 03462 2 00000 0 2376 l.p001 zero 0,b.0 character addressing 03463 0 03472 1 2377 l.p002 ind fulbuf routine to see if buffer full 03464 000777 0 2378 l.p003 vfd 18/buftmk 03465 000004 0 2379 l.p004 dec 4 03466 777000 0 2380 l.p005 vfd 18/nbftmk complement mask for tally 03467 002000 0 2381 l.p006 vfd 18/bffctl 2382 03470 2383 itemp1 bss 1 temporary storage 2384 03471 0 04250 1 2385 a.p001 ind getbuf buffer allocation routine 2386 assm 01 12-10-82 16.070 fnp utility programs for mcs page 94 fulbuf subroutine finds out if buffer is full 2387 ttls fulbuf subroutine finds out if buffer is full 2388 2389 this subroutine, passed a buffer address in 2390 x3, looks to see if tally indicates that buffer 2391 is full. 2392 2393 returns to callpoint+1 if buffer is full 2394 else to callpoint+2 with tally in a 2395 03472 2396 fulbuf subr ful 2397 03475 3 07 001 0 2398 lda bf.siz,3 03476 2337 17 0 2399 arl 15 isolate size code 03477 773 001 0 2400 iaa 1 03500 0 01 013 3513 2401 mpf l.f002-* =bufsiz 2402 mpf comes out double so it gives number of chars 03501 0 66 011 3512 2403 sbq l.f001-* =4 (4 chars worth of header) 03502 0 57 013 3515 2404 stq ftemp-* 03503 3 07 001 0 2405 lda bf.tly,3 get tally end of binary card 00000052 03504 0 34 010 3514 2406 ana l.f003-* =buftmk 03505 0 27 010 3515 2407 cmpa ftemp-* tally>=size? 03506 0 65 002 3510 2408 tpl 2 yes, regular return 03507 0 76 763 3472 2409 aos fulbuf-* else return+1 03510 2410 return fulbuf 2411 2412 03512 000004 0 2413 l.f001 dec 4 number words of buffer header 03513 000040 0 2414 l.f002 vfd 18/bufsiz 03514 000777 0 2415 l.f003 vfd 18/buftmk mask for buffer tally 03515 2416 ftemp bss 1 assm 01 12-10-82 16.070 fnp utility programs for mcs page 95 metering subroutines 2417 ttls metering subroutines 2418 2419 ************************************************************************ 2420 * 2421 * meterc -- adds one to a "counting" meter 2422 * 2423 * index of meter to be incremented is passed in q reg. 2424 * 2425 ************************************************************************ 2426 03516 2427 meterc subr mtc,(inh,q,x3) 2428 03533 0 44 047 3602 2429 ldi l.d001-* (o024000) inhibit overflow 03534 0 67 134 3670 2430 cmpq cmax-* is value legal? 03535 0 45 003 3540 2431 tnc mtc010-* 03536 0 76 043 3601 2432 aos meterr-* if not, meter invalid call 03537 0 71 003 3542 2433 tra mtcbak-* and return 2434 03540 2435 mtc010 null 03540 0 41 771 3531 2436 ldx3 mtcsq-* ok, get meter name into x3 03541 4 76 044 3605 2437 aos cmetrs-*,* increment it 03542 2438 mtcbak return meterc 2439 2440 2441 ************************************************************************ 2442 * 2443 * metert -- increments a "time" meter 2444 * 2445 * index of meter is passed in q reg. 2446 * increment (in microseconds) is passed in a reg. 2447 * 2448 ************************************************************************ 2449 03544 2450 metert subr mtt,(inh,a,q,x3) end of binary card 00000053 2451 03564 0 44 016 3602 2452 ldi l.d001-* (o024000) inhibit overflow 03565 0 67 017 3604 2453 cmpq tmax-* is meter index too big? 03566 0 45 003 3571 2454 tnc mtt010-* if so, meter that 03567 0 76 012 3601 2455 aos meterr-* 03570 0 71 007 3577 2456 tra mttbak-* and return 2457 03571 4336 01 0 2458 mtt010 qls 1 multiply by two for indexing 03572 0 57 011 3603 2459 stq mttemp-* (time meters are 2 words each) 03573 0 41 010 3603 2460 ldx3 mttemp-* index into x3 03574 0335 22 0 2461 lrs 18 time into aq 03575 4 15 074 3671 2462 adaq tmetrs-*,* increment meter 03576 4 14 073 3671 2463 staq tmetrs-*,* 03577 2464 mttbak return 2465 2466 assm 01 12-10-82 16.070 fnp utility programs for mcs page 96 metering subroutines 2467 03601 0 00000 0 2468 meterr zero invalid meter count 2469 2470 2471 03602 024000 0 2472 l.d001 oct 024000 "inhibit overflow" & "inhibit interrupts" 2473 2474 03603 2475 mttemp bss 1 03604 0 00062 0 2476 tmax zero tmaxd/2 maximum value for "time" meters 2477 2478 03605 3 03606 1 2479 cmetrs ind *+1,3 "count" meters 03606 2480 bss 50 03670 0 00062 0 2481 cmax zero *-cmetrs-1 maximum value for a count meter 2482 2483 03671 3 03672 1 2484 tmetrs ind tmorg,3 "timing" meters 03672 2485 even 03672 2486 tmorg null 03672 2487 bss 100 000144 2488 tmaxd equ *-tmorg assm 01 12-10-82 16.070 fnp utility programs for mcs page 97 setptw - subroutine converts absolute address to virtual 2489 ttls setptw - subroutine converts absolute address to virtual 2490 ************************************************************************ 2491 * 2492 * setptw 2493 * converts an 18 bit absolute address to a 15 bit virtual 2494 * address and sets up the page table entry in the cpu page 2495 * table. this routine is only required if more than 32k of 2496 * memory is configured for a dn6670. a 'tra -1' is stored into 2497 * setptw+1 by init if otherwise. 2498 * 2499 * input: 2500 * a reg - 18 bit absolute address 2501 * 2502 * output: 2503 * a reg - 15 bit virtual address 2504 * 2505 * modified registers: none 2506 * 2507 ************************************************************************ 2508 2509 a 'tra -1,*' is stored in setptw+1 by init if 2510 64k is not configured 04036 2511 setptw subr ptw,(inh) cannot allow interruptions end of binary card 00000054 04045 0 17 013 4060 2512 sta sargsv-* save to provide offset 04046 022 400 0 2513 iana -256 get page number 04047 122 040 0 2514 iora pte.a turn on active bit 04050 4 17 006 4056 2515 sta a.v001-*,* (.crpte,*) put in cpu page table 04051 0 07 007 4060 2516 lda sargsv-* get page offset 04052 022 377 0 2517 iana 255 04053 0 37 004 4057 2518 ora l.v001-* concatenate with window address 04054 2519 return setptw all done 2520 000200 2521 pte.r bool 200 page table entry read only bit 000100 2522 pte.s bool 100 page table entry security bit 000040 2523 pte.a bool 40 page table entry active bit 077400 2524 window bool 77400 base address of paged memory 2525 04056 4 00702 0 2526 a.v001 ind .crpte,* 2527 04057 077400 0 2528 l.v001 vfd 18/window 2529 04060 000000 0 2530 sargsv oct 0 storage for argument assm 01 12-10-82 16.070 fnp utility programs for mcs page 98 move with paging on source or target address 2531 ttls move with paging on source or target address 2532 ************************************************************************ 2533 * 2534 * mvpgsc 2535 * this entry moves a block of data from an absolute location anywhere 2536 * in the fnp memory using the paging mechanism to a target in the lower 2537 * 32k of fnp memory. 2538 * 2539 * mvpgtg 2540 * this entry moves a block of data from the lower 32k of fnp memory 2541 * to a target anywhere in fnp memory using the paging mechanism. 2542 * 2543 * either entry can be directed to cross page boundaries and to start 2544 * and end anywhere in a page. each time a page boundary is crossed 2545 * the page table entry for the virtual window will be initialized. 2546 * 2547 * input registers: 2548 * x2 source address 2549 * x3 target address 2550 * q length of move 2551 * 2552 * output registers: 2553 * none 2554 * 2555 * modified registers: a, q, x2, x3 2556 * 2557 * unmodified registers: x1 2558 * 2559 ************************************************************************ 2560 2561 2562 * 2563 * entry points 2564 04061 2565 mvpgsc subr mps,(inh) 04070 0 07 771 4061 2566 lda mvpgsc-* set up a common return point 04071 0 17 010 4101 2567 sta mvpgtg-* 04072 0 07 775 4067 2568 lda mpssi-* 04073 0 17 014 4107 2569 sta mptsi-* 04074 0 13 124 4220 2570 stx2 mabsad-* save as absolute address to virtualize 04075 0 07 120 4215 2571 lda l.w001-* 'cax2' inst to set up x2 with virtual address 04076 0 17 067 4165 2572 sta mvp080-* 04077 3333 00 0 2573 cx3a for checking non-paged address 04100 0 71 014 4114 2574 tra mvp000-* 2575 04101 2576 mvpgtg subr mpt,(inh) 04110 0 50 110 4220 2577 stx3 mabsad-* save as absolute address to virtualize 04111 0 07 105 4216 2578 lda l.w002-* 'cax3' inst to set up x3 with virtual address end of binary card 00000055 04112 0 17 053 4165 2579 sta mvp080-* 04113 3332 00 0 2580 cx2a for checking non-paged address assm 01 12-10-82 16.070 fnp utility programs for mcs page 99 move with paging on source or target address 2581 * 2582 * check input values 2583 04114 2584 mvp000 null 04114 0 17 106 4222 2585 sta mtstad-* save for compare 04115 0 57 104 4221 2586 stq mrmlen-* total length of move 04116 0 47 106 4224 2587 ldq mvplmm-* get last legal lower memory address 04117 0 67 103 4222 2588 cmpq mtstad-* is non-paged starting address below 2589 lower memory maximum? 04120 0 65 002 4122 2590 tpl 2 yes 04121 2591 die 14 no. this shouldn't happen 04122 0 06 077 4221 2592 ada mrmlen-* calculate ending non-paged address 04123 773 777 0 2593 iaa -1 04124 0 17 076 4222 2594 sta mtstad-* save for compare 04125 0 67 075 4222 2595 cmpq mtstad-* is non-paged ending address below 2596 lower memory maximum? 04126 0 65 002 4130 2597 tpl 2 yes 04127 2598 die 14 no. this shouldn't happen 04130 4 47 064 4214 2599 ldq a.w001-*,* (.crmem) get last legal absolute address 04131 0 67 067 4220 2600 cmpq mabsad-* is starting absolute address ok? 04132 0 65 002 4134 2601 tpl 2 yes 04133 2602 die 14 no. this shouldn't happen 04134 0 07 064 4220 2603 lda mabsad-* calculate ending absolute address 04135 0 06 064 4221 2604 ada mrmlen-* 04136 773 777 0 2605 iaa -1 04137 0 17 063 4222 2606 sta mtstad-* save for compare 04140 0 67 062 4222 2607 cmpq mtstad-* is this address ok? 04141 0 65 002 4143 2608 tpl 2 yes 04142 2609 die 14 no. this shouldn't happen 04143 0 47 056 4221 2610 ldq mrmlen-* is length of move > 0? 04144 0 64 002 4146 2611 tnz 2 yes 04145 2612 die 1 no. this shouldn't happen 2613 * 2614 * set up length of first move 2615 04146 0 07 052 4220 2616 lda mabsad-* calculate number of words in first page 04147 022 400 0 2617 iana -256 04150 0 06 047 4217 2618 ada l.w003-* (=256) 04151 0 26 047 4220 2619 sba mabsad-* now have it 04152 0 27 047 4221 2620 cmpa mrmlen-* will first pass move all? 04153 0 45 003 4156 2621 tnc mvp020-* no 04154 0 56 045 4221 2622 stz mrmlen-* yes 04155 0 71 006 4163 2623 tra mvp040-* go do it 2624 04156 2625 mvp020 null 04156 6333 00 0 2626 caq length of first move 04157 0 57 044 4223 2627 stq mvllmp-* save it for absolute address update 04160 322 777 0 2628 iera -1 calculate remaining length of total move after end of binary card 00000056 04161 773 001 0 2629 iaa 1 first pass 04162 0 16 037 4221 2630 asa mrmlen-* assm 01 12-10-82 16.070 fnp utility programs for mcs page 100 move with paging on source or target address 2631 04163 2632 mvp040 null 04163 0 07 035 4220 2633 lda mabsad-* setup to virtualize absolute address 2634 * 2635 * virtualize source or target address 2636 04164 2637 mvp060 null outer move loop point 04164 0 10 652 4036 2638 tsy setptw-* virtualize and set ptw 2639 04165 000000 0 2640 mvp080 oct 0 this location is set to 'cax2' or 'cax3' inst 2641 2642 * 2643 * paged move loop 2644 04166 2645 mvp100 null move no more than one page here 04166 2 07 000 0 2646 lda 0,2 get one source word 04167 3 17 000 0 2647 sta 0,3 store in target 04170 273 001 0 2648 iacx2 1 update pointers 04171 373 001 0 2649 iacx3 1 04172 573 777 0 2650 iaq -1 is current page moved? 04173 0 64 773 4166 2651 tnz mvp100-* no. continue move 2652 * 2653 * check if whole move is finished 2654 04174 0 47 025 4221 2655 ldq mrmlen-* has everything been moved? 04175 0 74 015 4212 2656 tze mvpret-* yes. return 2657 * 2658 * update absolute address 2659 04176 0 07 022 4220 2660 lda mabsad-* update absolute address 04177 0 06 024 4223 2661 ada mvllmp-* with length of last move pass 04200 0 17 020 4220 2662 sta mabsad-* 2663 * 2664 * set up length of next move pass 2665 04201 0 66 016 4217 2666 sbq l.w003-* (=256) update length of total remaining move 04202 0 57 017 4221 2667 stq mrmlen-* is it negative? 04203 0 75 004 4207 2668 tmi mvp110-* yes 04204 0 47 013 4217 2669 ldq l.w003-* (=256) no. move a whole page 04205 0 57 016 4223 2670 stq mvllmp-* 04206 0 71 756 4164 2671 tra mvp060-* move some more 2672 04207 2673 mvp110 null 04207 0 46 010 4217 2674 adq l.w003-* (=256) back up last subtract 04210 0 56 011 4221 2675 stz mrmlen-* last pass coming up 04211 0 71 753 4164 2676 tra mvp060-* go do it 2677 04212 2678 mvpret null 04212 2679 return mvpgtg 2680 2681 assm 01 12-10-82 16.070 fnp utility programs for mcs page 101 move with paging on source or target address 04214 0 00651 0 2682 a.w001 ind .crmem last legal memory address 2683 04215 0332 00 0 2684 l.w001 cax2 04216 4333 00 0 2685 l.w002 cax3 04217 000400 0 2686 l.w003 dec 256 2687 04220 000000 0 2688 mabsad oct 0 absolute address 04221 000000 0 2689 mrmlen oct 0 current remaining total length of move 04222 000000 0 2690 mtstad oct 0 test address value for legalness 04223 000000 0 2691 mvllmp oct 0 length of last move pass 04224 0 00000 0 2692 mvplmm zero move paged lower memory maximum address assm 01 12-10-82 16.070 fnp utility programs for mcs page 102 mcs space management routines 2693 ttls mcs space management routines 2694 ************************************************************************ 2695 * 2696 * format of buffer pool header 2697 * 2698 ************************************************************************ 2699 000000 2700 fp.fst equ 0 pointer to first free block 2701 2702 ************************************************************************ 2703 * 2704 * format of free block 2705 * 2706 ************************************************************************ 2707 000000 2708 fb.nxt equ 0 next block pointer 000001 2709 fb.siz equ 1 size of this block in words assm 01 12-10-82 16.070 fnp utility programs for mcs page 103 mcs space management routines 2710 eject 2711 ************************************************************************ 2712 * 2713 * subroutine to allocate buffer space. 2714 * the request is rounded up to an even boundry. if it less than 2715 * 'bufsiz', then it is withdrawn from the small space pool. 2716 * if not smaller than 'bufsiz', it is rounded up to a 'bufsiz' 2717 * boundry and removed from the full buffer pool. 2718 * 2719 * calling sequence: 2720 * 2721 * q = size of space to allocate 2722 * 2723 * returns: 2724 * 2725 * returns in line if request fails 2726 * takes skip return if request suceeds 2727 * x3 -> space allocated 2728 * 2729 ************************************************************************ 2730 04225 000000 0 2731 getubf oct 0 'user' call. no buffers returned if space low 04226 0 10 200 4426 2732 tsy stdsav-* save regs and inhibit 04227 7333 00 0 2733 cqa size requested end of binary card 00000057 04230 4 10 163 4413 2734 tsy a.y005-*,* (chksiz) check for valid size 04231 773 037 0 2735 iaa bufsiz-1 round to bufsiz multiple 04232 022 740 0 2736 iana -bufsiz 04233 0337 05 0 2737 ars bufshf number of buffers being allocated 04234 322 777 0 2738 iera -1 complement 04235 773 001 0 2739 iaa 1 04236 4 06 151 4407 2740 ada a.y001-*,* this gives number buffers left free 04237 422 024 0 2741 icmpa bufres enough to make this allocation? 04240 0 65 012 4252 2742 tpl gbfjoi-* enough, ok 04241 4 26 146 4407 2743 sba a.y001-*,* get back number of buffers requested 04242 4 10 146 4410 2744 tsy a.y002-*,* =fresml, free small space buffers 04243 0 71 216 4461 2745 tra stfail-* that didnt work 04244 4 06 143 4407 2746 ada a.y001-*,* recompute number of buffers left 04245 422 024 0 2747 icmpa bufres enough? 04246 0 65 004 4252 2748 tpl gbfjoi-* yes 04247 0 71 212 4461 2749 tra stfail-* no 2750 04250 000000 0 2751 getbuf oct 0 'system' call. return buffer if possible 04251 0 10 155 4426 2752 tsy stdsav-* save regs and inhibit interrupts 04252 7333 00 0 2753 gbfjoi cqa number of words to allocate 04253 4 10 140 4413 2754 tsy a.y005-*,* (chksiz) check for valid size 04254 773 037 0 2755 iaa bufsiz-1 round to multiple of bufsiz 04255 022 740 0 2756 iana -bufsiz 04256 6333 00 0 2757 caq 04257 0 43 132 4411 2758 ldx1 a.y003-* =addr(.crnxa) start of chain 04260 4 10 134 4414 2759 tsy a.y006-*,* (getspc) allocate the space assm 01 12-10-82 16.070 fnp utility programs for mcs page 104 mcs space management routines 04261 0 71 064 4345 2760 tra gbfnsp-* failed 04262 0 76 172 4454 2761 gbfok aos savert-* suceeded, setup skip return 04263 0 14 141 4424 2762 staq gbfaq-* safe store aq (smeter uses them) 04264 2763 smeter mincd,.mbufa,l.y001-* 04273 0 04 131 4424 2764 ldaq gbfaq-* restore them 2765 2766 * update .crnbf 2767 04274 0337 05 0 2768 ars bufshf convert from words to buffers 04275 322 777 0 2769 iera -1 complemment 04276 773 001 0 2770 iaa 1 end of binary card 00000058 04277 4 16 110 4407 2771 asa a.y001-*,* update .crnbf 2772 2773 * fill in buffer size code 2774 04300 322 777 0 2775 iera -1 based on nbuffers-1 04301 0336 17 0 2776 als 15 align in word 04302 3 17 001 0 2777 sta bf.siz,3 04303 3 56 000 0 2778 stz bf.nxt,3 04304 0 50 142 4446 2779 stx3 savex3-* save address allocated 04305 7333 00 0 2780 cqa total words 04306 773 776 0 2781 iaa -2 number left to clear 04307 373 002 0 2782 iacx3 2 starting address to clear 2783 2784 * clear buffer 2785 04310 0337 01 0 2786 gbfzro ars 1 number of double words to clear 04311 322 777 0 2787 iera -1 complement 04312 773 001 0 2788 iaa 1 04313 0 17 107 4422 2789 sta gbftmp-* 04314 673 000 0 2790 ila 0 constants to store 04315 473 000 0 2791 ilq 0 04316 3 14 000 0 2792 gbfclr staq 0,3 zero two words 04317 373 002 0 2793 iacx3 2 04320 0 76 102 4422 2794 aos gbftmp-* 04321 0 64 775 4316 2795 tnz gbfclr-* 2796 04322 2797 trace mt.get,0,(savex3,saveaq+1,savert,savex1) 2798 04343 0 56 115 4460 2799 stz stfree-* indicate allocation call 04344 0 71 125 4471 2800 tra stdret-* 2801 2802 * request for buffers failed. try cleaning up small space 2803 04345 4 10 043 4410 2804 gbfnsp tsy a.y002-*,* (=fresml) this does cleanup 04346 0 71 113 4461 2805 tra stfail-* didnt do any good 04347 0 10 375 4744 2806 tsy getspc-* retry request end of binary card 00000059 04350 0 71 111 4461 2807 tra stfail-* still fails 04351 0 71 711 4262 2808 tra gbfok-* this made request work assm 01 12-10-82 16.070 fnp utility programs for mcs page 105 mcs space management routines 2809 eject 2810 ************************************************************************ 2811 * 2812 * proceduure for getting a small amount of memory. the 2813 * calling sequewnce is the same as for getbuf, except 2814 * the request is rounded to an even number, and the returned 2815 * address will only be on an even boundry 2816 * 2817 ************************************************************************ 2818 04352 000000 0 2819 getmem oct 0 04353 0 10 053 4426 2820 tsy stdsav-* 04354 7333 00 0 2821 cqa word count 04355 0 10 315 4672 2822 tsy chksiz-* check for valid size 04356 773 001 0 2823 iaa 1 make it even 04357 022 776 0 2824 iana -2 04360 6333 00 0 2825 gbfsml caq word count 04361 0 43 036 4417 2826 ldx1 a.y009-* =addr(.crnxs) 04362 0 10 362 4744 2827 tsy getspc-* look in small space chain 04363 0 71 004 4367 2828 tra gbfail-* not there 04364 0 76 070 4454 2829 aos savert-* found it, take skip 04365 0 50 061 4446 2830 stx3 savex3-* save address allocated 04366 0 71 722 4310 2831 tra gbfzro-* go clear space 2832 2833 * must allocate more buffers for small space 2834 04367 0 17 033 4422 2835 gbfail sta gbftmp-* save word count 04370 773 037 0 2836 iaa bufsiz-1 round to next multiple 04371 022 740 0 2837 iana -bufsiz 04372 6333 00 0 2838 caq 04373 0 43 022 4415 2839 ldx1 a.y007-* =addr(.crnxa) 04374 0 10 350 4744 2840 tsy getspc-* get buffer 04375 0 71 064 4461 2841 tra stfail-* failed, give up 04376 0 43 021 4417 2842 ldx1 a.y009-* =addr(.crnxs) 04377 4 10 013 4412 2843 tsy a.y004-*,* (relspc) free in to small chain 04400 0337 05 0 2844 ars bufshf convert to buffers 04401 4 16 017 4420 2845 asa a.y010-*,* increment .crnbs 04402 322 777 0 2846 iera -1 complement 04403 773 001 0 2847 iaa 1 04404 4 16 012 4416 2848 asa a.y008-*,* decrement .crnbf 04405 0 07 015 4422 2849 lda gbftmp-* get origional word count 04406 0 71 752 4360 2850 tra gbfsml-* retry allocate 2851 2852 04407 0 00652 0 2853 a.y001 ind .crnbf 04410 0 05216 1 2854 a.y002 ind fresml 04411 0 00660 0 2855 a.y003 ind .crnxa 04412 0 05106 1 2856 a.y004 ind relspc 04413 0 04672 1 2857 a.y005 ind chksiz 04414 0 04744 1 2858 a.y006 ind getspc 04415 0 00660 0 2859 a.y007 ind .crnxa assm 01 12-10-82 16.070 fnp utility programs for mcs page 106 mcs space management routines 04416 0 00652 0 2860 a.y008 ind .crnbf end of binary card 00000060 04417 0 00674 0 2861 a.y009 ind .crnxs 04420 0 00675 0 2862 a.y010 ind .crnbs 2863 04421 000001 0 2864 l.y001 dec 1 2865 04422 2866 gbftmp bss 1 04423 233100 0 04424 2867 even 04424 2868 gbfaq bss 2 assm 01 12-10-82 16.070 fnp utility programs for mcs page 107 mcs space management routines 2869 eject 2870 ************************************************************************ 2871 * 2872 * save registers and inhibit 2873 * this procedure is used by the external entries to this 2874 * module to provide a common register saving and restoreing 2875 * sequence, and a common save area 2876 * 2877 ************************************************************************ 2878 04426 000000 0 2879 stdsav oct 0 04427 0 54 020 4447 2880 sti savei-* 04430 0 44 020 4450 2881 ldi inhint-* mask interrupts and overflows 04431 0 14 021 4452 2882 staq saveaq-* 04432 4 07 106 4540 2883 lda a.x001-*,* etmb 04433 0 17 023 4456 2884 sta sttime-* record time of entry 04434 0 53 010 4444 2885 stx1 savex1-* 04435 0 13 010 4445 2886 stx2 savex2-* 04436 673 777 0 2887 ila -1 make x3 invalid at return 04437 0 17 007 4446 2888 sta savex3-* 04440 0 43 766 4426 2889 ldx1 stdsav-* pick up return address 04441 1 07 776 0 2890 lda -2,1 this should be external return addr 04442 0 17 012 4454 2891 sta savert-* save as return address 04443 4 71 763 4426 2892 tra stdsav-*,* 2893 04444 2894 savex1 bss 1 04445 2895 savex2 bss 1 04446 2896 savex3 bss 1 04447 2897 savei bss 1 04450 024000 0 2898 inhint oct 024000 04451 233100 0 04452 2899 even 04452 2900 saveaq bss 2 04454 2901 savert bss 1 04455 2902 savcnt bss 1 number of free words (for metering) 04456 2903 sttime bss 1 elapsed timer reading at entry 04457 2904 sttimx bss 1 elapsed timer reading at exit 04460 2905 stfree bss 1 set to 0 for get call, 1 for free 2906 2907 2908 ************************************************************************ 2909 * 2910 * the return sequence used by callers of stdsav 2911 * 2912 ************************************************************************ 2913 2914 04461 2915 stfail null if allocation failed, meter it 04461 2916 smeter mincs,.malof,l.z001-* 04470 0 56 770 4460 2917 stz stfree-* 2918 assm 01 12-10-82 16.070 fnp utility programs for mcs page 108 mcs space management routines 04471 4 07 725 4416 2919 stdret lda a.y008-*,* (.crnbf) 04472 4 06 726 4420 2920 ada a.y010-*,* (.crnbs) 04473 0336 05 0 2921 als bufshf convert to words for metering end of binary card 00000061 04474 0 17 761 4455 2922 sta savcnt-* 04475 2923 smeter mupdat,.mspav,savcnt-* 2924 2925 measure time spent 04504 4 07 034 4540 2926 lda a.x001-*,* etmb (current elapsed timer value) 04505 0 17 752 4457 2927 sta sttimx-* save it (for debugging) 04506 0 26 750 4456 2928 sba sttime-* a now contains time spent 04507 0 43 751 4460 2929 ldx1 stfree-* get alloc/free indicator 04510 4 03 031 4541 2930 ldx2 a.x002-*,* get pointer to relevant structure 04511 2335 22 0 2931 lrl 18 make time into doubleword 04512 0 14 032 4544 2932 staq loctim-* hang on to it 04513 2 15 000 0 2933 adaq it.tot,2 update running total 04514 2 14 000 0 2934 staq it.tot,2 04515 0 04 027 4544 2935 ldaq loctim-* 04516 2 67 007 0 2936 cmpq it.max,2 new maximum? 04517 0 75 002 4521 2937 tmi 2 04520 2 57 007 0 2938 stq it.max,2 yes, save it 04521 473 001 0 2939 ilq 1 see if it's more than 1 msec. 04522 0 67 023 4545 2940 cmpq loctim+1-* 04523 0 65 005 4530 2941 tpl std100-* nope 04524 2 15 004 0 2942 adaq it.gt1,2 yes, add 1 (which happens to be in aq) 04525 2 14 004 0 2943 staq it.gt1,2 to count of same 04526 673 000 0 2944 ila 0 04527 473 001 0 2945 ilq 1 get the one back 04530 2 15 002 0 2946 std100 adaq it.inc,2 update increment count 04531 2 14 002 0 2947 staq it.inc,2 2948 04532 0 04 720 4452 2949 ldaq saveaq-* restore registers 04533 0 43 711 4444 2950 ldx1 savex1-* 04534 0 03 711 4445 2951 ldx2 savex2-* 04535 0 41 711 4446 2952 ldx3 savex3-* 04536 0 44 711 4447 2953 ldi savei-* 04537 4 71 715 4454 2954 tra savert-*,* and return 2955 2956 04540 0 00451 0 2957 a.x001 ind etmb 04541 1 04542 1 2958 a.x002 ind itaddr,1 2959 04542 0 04546 1 2960 itaddr ind getbfm end of binary card 00000062 04543 0 04556 1 2961 ind frebfm 2962 04544 2963 even 04544 2964 loctim bss 2 elapsed time while in routine 04546 2965 getbfm bss 8 time meters for get calls 04556 2966 frebfm bss 8 time meters for free calls assm 01 12-10-82 16.070 fnp utility programs for mcs page 109 mcs space management routines 2967 eject 2968 ************************************************************************ 2969 * 2970 * subroutine to free buffer space 2971 * 2972 * calling sequence: 2973 * 2974 * x3 -> space to be freed 2975 * q = size of space (or 0 meaning use buffer size code) 2976 * 2977 ************************************************************************ 2978 04566 000000 0 2979 frebuf oct 0 04567 0 10 637 4426 2980 tsy stdsav-* 04570 7333 00 0 2981 cqa pick up size 04571 0 64 006 4577 2982 tnz fbf010-* size is given 04572 3 07 001 0 2983 lda fb.siz,3 get size code 04573 2337 17 0 2984 arl 15 04574 773 001 0 2985 iaa 1 number of buffers 04575 0336 05 0 2986 als bufshf convert to words 04576 0 71 004 4602 2987 tra fbf020-* 04577 0 10 073 4672 2988 fbf010 tsy chksiz-* check for valid size 04600 773 037 0 2989 iaa bufsiz-1 round to multiple of bufsiz 04601 022 740 0 2990 iana -bufsiz 04602 0 17 032 4634 2991 fbf020 sta fretmp-* save buffer size temorarily 2992 04603 2993 trace mt.fre,0,(x3,fretmp,savert,savex1) 2994 04623 0 07 011 4634 2995 lda fretmp-* 04624 0 43 166 5012 2996 ldx1 a.z002-* =addr(.crnxa) free from full buffer chain 04625 6333 00 0 2997 caq 04626 0 10 260 5106 2998 tsy relspc-* 04627 0337 05 0 2999 ars bufshf get buffer count 04630 4 16 163 5013 3000 asa a.z003-*,* update .crnbf 04631 673 001 0 3001 ila 1 indicate free call 04632 0 17 626 4460 3002 sta stfree-* 04633 0 71 636 4471 3003 tra stdret-* and return 3004 04634 3005 fretmp bss 1 assm 01 12-10-82 16.070 fnp utility programs for mcs page 110 mcs space management routines 3006 eject 3007 ************************************************************************ 3008 * 3009 * similiar entry for freeing memory 3010 * 3011 ************************************************************************ 3012 end of binary card 00000063 04635 000000 0 3013 fremem oct 0 04636 0 10 570 4426 3014 tsy stdsav-* 04637 7333 00 0 3015 cqa word count 04640 0 10 032 4672 3016 tsy chksiz-* check for valid size 04641 773 001 0 3017 iaa 1 make it even 04642 022 776 0 3018 iana -2 04643 0 17 771 4634 3019 sta fretmp-* save size 3020 04644 3021 trace mt.fre,0,(x3,fretmp,savert,savex1) 3022 04664 0 47 750 4634 3023 ldq fretmp-* retrieve size 04665 0 43 127 5014 3024 ldx1 a.z004-* =addr(.crnxs) 04666 0 10 220 5106 3025 tsy relspc-* 04667 673 001 0 3026 ila 1 indicate free call 04670 0 17 570 4460 3027 sta stfree-* 04671 0 71 600 4471 3028 tra stdret-* assm 01 12-10-82 16.070 fnp utility programs for mcs page 111 mcs space management routines 3029 eject 3030 ************************************************************************ 3031 * 3032 * subroutine to check for a valid buffer size in the a 3033 * 3034 ************************************************************************ 3035 04672 000000 0 3036 chksiz oct 0 04673 0 20 012 4705 3037 szn bfcksw-* should we check? 04674 4 64 776 4672 3038 tnz chksiz-*,* no 04675 422 001 0 3039 icmpa 1 04676 0 65 002 4700 3040 tpl 2 04677 3041 die 1 04700 0 27 004 4704 3042 cmpa maxsiz-* 04701 0 75 002 4703 3043 tmi 2 04702 3044 die 2 04703 4 71 767 4672 3045 tra chksiz-*,* 3046 04704 0 00401 0 3047 maxsiz ind bfmsiz+1 3048 3049 symdef bfcksw indicates whether calls are checked 3050 04705 000001 0 3051 bfcksw oct 1 start out as no assm 01 12-10-82 16.070 fnp utility programs for mcs page 112 mcs space management routines 3052 eject 3053 ************************************************************************ 3054 * 3055 * subrotuine to free a buffer chain 3056 * 3057 * calling sequcne: 3058 * 3059 * x3 -> buffer chain 3060 * 3061 ************************************************************************ 3062 04706 3063 frelbf subr frl,(a,q) end of binary card 00000064 3064 04717 3065 trace mt.frc,0,(x3,frelbf,x1) 3066 04733 473 000 0 3067 ilq 0 04734 3 07 000 0 3068 frl010 lda bf.nxt,3 hold forward pointer 04735 0 10 631 4566 3069 tsy frebuf-* free one buffer 04736 4333 00 0 3070 cax3 04737 0 64 775 4734 3071 tnz frl010-* not at end yet 04740 673 777 0 3072 ila -1 04741 4333 00 0 3073 cax3 put invalid addr in x3 04742 3074 return frelbf assm 01 12-10-82 16.070 fnp utility programs for mcs page 113 mcs space management routines 3075 eject 3076 ************************************************************************ 3077 * 3078 * subroutine to find free space of a desired size 3079 * it is unthreaded from the beginning of the smallest block 3080 * large enough to hold it. 3081 * 3082 * calling sequence: 3083 * 3084 * x1 -> buffer pool header 3085 * q = size of space needed, in words 3086 * 3087 * returns: 3088 * 3089 * procedure takes skip return if it succeeds, 3090 * non-skip return if it fails. 3091 * 3092 * x3 -> space allocated 3093 * 3094 ************************************************************************ 3095 04744 3096 getspc subr gsp,(a,x2) 04755 0 56 130 5105 3097 stz prvblk-* initialize some stuff end of binary card 00000065 04756 0 56 032 5010 3098 stz bstblk-* will be addr of smallest block 04757 0 41 031 5010 3099 ldx3 bstblk-* to zero the reg 04760 4 07 031 5011 3100 lda a.z001-*,* =.crmem, bigger that biggest free block 04761 1 03 000 0 3101 ldx2 fp.fst,1 pick up pointer to first free block 04762 0 74 015 4777 3102 gsp040 tze gsp010-* end of chain 04763 2 67 001 0 3103 cmpq fb.siz,2 is this block big enough? 04764 0 74 016 5002 3104 tze gsp020-* exactly right, dont look anymore 04765 0 65 007 4774 3105 tpl gsp030-* too small, skip to next 04766 2 27 001 0 3106 cmpa fb.siz,2 is this a better (smaller) block to use? 04767 0 74 005 4774 3107 tze gsp030-* same, dont use it 04770 0 75 004 4774 3108 tmi gsp030-* already have smaller block 04771 0 13 017 5010 3109 stx2 bstblk-* save pointer to best block 04772 0 41 113 5105 3110 ldx3 prvblk-* rembember best blocks predessor 04773 2 07 001 0 3111 lda fb.siz,2 remember best blocks size 04774 0 13 111 5105 3112 gsp030 stx2 prvblk-* 04775 2 03 000 0 3113 ldx2 fb.nxt,2 step to next block 04776 0 71 764 4762 3114 tra gsp040-* 04777 0 03 011 5010 3115 gsp010 ldx2 bstblk-* get pointer to best block 05000 0 74 006 5006 3116 tze gspret-* no block big enough, take error return 05001 0 50 104 5105 3117 stx3 prvblk-* unthread subr needs this pointer 05002 0 76 742 4744 3118 gsp020 aos getspc-* call will succeed, setup skip return 05003 3332 00 0 3119 cx2a 05004 4333 00 0 3120 cax3 x2-x3 to unthread from beginning of block 05005 0 10 014 5021 3121 tsy unthrd-* unthread selected space 05006 3122 gspret return getspc 3123 05010 3124 bstblk bss 1 assm 01 12-10-82 16.070 fnp utility programs for mcs page 114 mcs space management routines 05011 0 00651 0 3125 a.z001 ind .crmem 05012 0 00660 0 3126 a.z002 ind .crnxa 05013 0 00652 0 3127 a.z003 ind .crnbf 05014 0 00674 0 3128 a.z004 ind .crnxs 05015 0 00675 0 3129 a.z005 ind .crnbs 05016 0 05216 1 3130 a.z006 ind fresml 05017 0 00650 0 3131 a.z008 ind .crbuf 3132 05020 000001 0 3133 l.z001 dec 1 for metering assm 01 12-10-82 16.070 fnp utility programs for mcs page 115 mcs space management routines 3134 eject 3135 ************************************************************************ 3136 * 3137 * subroutine to unthread space from a free chain 3138 * 3139 * calling sequence: 3140 * 3141 * x1 -> buffer poll header 3142 * x2 -> starting address to unthread 3143 * x3 -> free block space is coming from 3144 * q = size of block to unthread 3145 * prvblk contains address of free block which proceeds 3146 * the block pointed to by x2 3147 * 3148 ************************************************************************ 3149 05021 3150 unthrd subr unt,(a,q,x2,x3) end of binary card 00000066 05040 3 07 001 0 3151 lda fb.siz,3 size of entire block 05041 0 26 774 5035 3152 sba untsq-* amount of space that will be left 05042 0 17 042 5104 3153 sta unttmp-* this number will be useful later 05043 0 74 022 5065 3154 tze untall-* if zero, unthreading entire free block 05044 3332 00 0 3155 cx2a addr of space to unthread 05045 0 26 772 5037 3156 sba untsx3-* amount of space before block unthreaded 05046 0 74 026 5074 3157 tze untbeg-* if 0, unthreding from beginning 05047 0 27 035 5104 3158 cmpa unttmp-* equal to size remaining? 05050 0 74 012 5062 3159 tze untend-* yes, unthreading from end of block 3160 3161 * unthreading from the middle of a free block 3162 05051 3 17 001 0 3163 untmid sta fb.siz,3 size of first partial block 05052 0 46 764 5036 3164 adq untsx2-* compute addr of second partial block 05053 3 07 000 0 3165 lda fb.nxt,3 hold forward pointer 05054 3 57 000 0 3166 stq fb.nxt,3 make first block point to second 05055 3 03 000 0 3167 ldx2 fb.nxt,3 addr of second block 05056 0 47 026 5104 3168 ldq unttmp-* total space in both free blocks 05057 3 66 001 0 3169 sbq fb.siz,3 subtract out size of first block 05060 2 14 000 0 3170 staq fb.nxt,2 update pointer and size 05061 0 71 021 5102 3171 tra untret-* 3172 3173 * unthreading from end of a free block 3174 05062 0 07 022 5104 3175 untend lda unttmp-* new size of partial block 05063 3 17 001 0 3176 sta fb.siz,3 05064 0 71 016 5102 3177 tra untret-* thats all to do 3178 3179 * unthread an entire free block 3180 05065 3 07 000 0 3181 untall lda fb.nxt,3 pick up pointer to next block 05066 0 03 017 5105 3182 untjon ldx2 prvblk-* addr of previous whole block 05067 0 74 003 5072 3183 tze unthed-* none, unthreading head assm 01 12-10-82 16.070 fnp utility programs for mcs page 116 mcs space management routines 05070 2 17 000 0 3184 sta fb.nxt,2 make prev point to next 05071 0 71 011 5102 3185 tra untret-* 05072 1 17 000 0 3186 unthed sta fp.fst,1 new head of chain 05073 0 71 007 5102 3187 tra untret-* 3188 3189 * unthreading from beginning of a free block 3190 05074 0 02 741 5035 3191 untbeg adcx2 untsq-* compute address of new partial block end of binary card 00000067 05075 3 07 000 0 3192 lda fb.nxt,3 it will now point forward 05076 0 47 006 5104 3193 ldq unttmp-* and this will be its size 05077 2 14 000 0 3194 staq fb.nxt,2 update block 05100 3332 00 0 3195 cx2a 05101 0 71 765 5066 3196 tra untjon-* go update preceeding block 3197 05102 3198 untret return unthrd 3199 05104 3200 unttmp bss 1 05105 3201 prvblk bss 1 assm 01 12-10-82 16.070 fnp utility programs for mcs page 117 mcs space management routines 3202 eject 3203 ************************************************************************ 3204 * 3205 * subroutine to free space no longer needed. it is returned to 3206 * the free pool and combined with any adjacent blocks 3207 * 3208 * calling sequence: 3209 * 3210 * x1 -> free pool header 3211 * x3 -> block to free 3212 * q = size of block 3213 * 3214 ************************************************************************ 3215 05106 3216 relspc subr rsp,(a,x2) 05117 3333 00 0 3217 cx3a validate addr >= .crbuf 05120 4 27 677 5017 3218 cmpa a.z008-*,* =.crbuf 05121 0 74 003 5124 3219 tze 3 05122 0 65 002 5124 3220 tpl 2 05123 3221 die 3 05124 3 57 001 0 3222 stq fb.siz,3 free block will need its size 05125 1 03 000 0 3223 ldx2 fp.fst,1 pick up first block pointer 05126 0 64 004 5132 3224 tnz rsp010-* non-null chain 05127 1 50 000 0 3225 stx3 fp.fst,1 freeing only block in chain 05130 3 56 000 0 3226 stz fb.nxt,3 no forward pointer 05131 0 71 060 5211 3227 tra rspret-* 05132 0 56 753 5105 3228 rsp010 stz prvblk-* 05133 0 50 062 5215 3229 stx3 rsptmp-* 05134 3332 00 0 3230 rsp030 cx2a into 'a' for the compare 05135 0 27 060 5215 3231 cmpa rsptmp-* found spot for this block? 05136 0 65 010 5146 3232 tpl rsp020-* yes, goes before this block 05137 0 13 746 5105 3233 stx2 prvblk-* 05140 2 03 000 0 3234 ldx2 fb.nxt,2 step foward 05141 0 64 773 5134 3235 tnz rsp030-* 3236 3237 * free a block which goes at end of chain 3238 05142 0 03 743 5105 3239 ldx2 prvblk-* 05143 2 50 000 0 3240 stx3 fb.nxt,2 make old last point at new last end of binary card 00000068 05144 3 56 000 0 3241 stz fb.nxt,3 make new last the end 05145 0 71 012 5157 3242 tra rsp050-* 3243 3244 * freeing a block that is not at end 3245 05146 0 03 737 5105 3246 rsp020 ldx2 prvblk-* pick up proceeding block 05147 0 64 005 5154 3247 tnz rsp040-* 3248 3249 * block goes at head of chain 3250 05150 1 07 000 0 3251 lda fp.fst,1 old head assm 01 12-10-82 16.070 fnp utility programs for mcs page 118 mcs space management routines 05151 1 50 000 0 3252 stx3 fp.fst,1 new head 05152 3 17 000 0 3253 sta fb.nxt,3 make new head point at old head 05153 0 71 021 5174 3254 tra rsp060-* 3255 3256 * block goes in middle 3257 05154 2 07 000 0 3258 rsp040 lda fb.nxt,2 forward pointer from prev block 05155 2 50 000 0 3259 stx3 fb.nxt,2 its new pointer is to this block 05156 3 17 000 0 3260 sta fb.nxt,3 forward pointer to next block 3261 3262 * combine new block with preceeding 3263 05157 3332 00 0 3264 rsp050 cx2a address of previous block 05160 2 06 001 0 3265 ada fb.siz,2 calculate end of previous block 05161 0 50 034 5215 3266 stx3 rsptmp-* address of current block 05162 0 27 033 5215 3267 cmpa rsptmp-* check for join 05163 0 75 011 5174 3268 tmi rsp060-* don't join 05164 0 74 002 5166 3269 tze rsp070-* they do 05165 3270 die 4 they overlap 05166 3 07 000 0 3271 rsp070 lda fb.nxt,3 block after current 05167 2 17 000 0 3272 sta fb.nxt,2 make previous point at it 05170 3 07 001 0 3273 lda fb.siz,3 size of current 05171 2 16 001 0 3274 asa fb.siz,2 add into size of previous 05172 3332 00 0 3275 cx2a 05173 4333 00 0 3276 cax3 make x3 point at new combined cuurrent block 3277 3278 * combine current block with following one 3279 05174 3 20 000 0 3280 rsp060 szn fb.nxt,3 last block? 05175 0 74 014 5211 3281 tze rspret-* yes 05176 3333 00 0 3282 cx3a address of current 05177 3 06 001 0 3283 ada fb.siz,3 end of current 05200 3 27 000 0 3284 cmpa fb.nxt,3 does it join with next? 05201 0 75 010 5211 3285 tmi rspret-* no 05202 0 74 002 5204 3286 tze rsp080-* yes 05203 3287 die 4 overlap 05204 3 03 000 0 3288 rsp080 ldx2 fb.nxt,3 address of next block 05205 2 07 001 0 3289 lda fb.siz,2 get next block size 05206 3 16 001 0 3290 asa fb.siz,3 add into current block size 05207 2 07 000 0 3291 lda fb.nxt,2 next blocks follower 05210 3 17 000 0 3292 sta fb.nxt,3 thrad after current 3293 05211 673 777 0 3294 rspret ila -1 put bad addr in x3 05212 4333 00 0 3295 cax3 05213 3296 return relspc end of binary card 00000069 05215 3297 rsptmp bss 1 assm 01 12-10-82 16.070 fnp utility programs for mcs page 119 mcs space management routines 3298 eject 3299 ************************************************************************ 3300 * 3301 * subroutine to scan the small buffer chain and find any space 3302 * that can be recombined into large buffers. it is called when 3303 * we run out of real buffers as a last resort. 3304 * 3305 * return: 3306 * 3307 * will take a skip return if any buffers were freed 3308 * 3309 ************************************************************************ 3310 05216 3311 fresml subr fsm,(a,q,x1,x2,x3) 05240 0 56 046 5306 3312 stz fsmcnt-* zero count of buffers found 05241 0 56 644 5105 3313 fsm040 stz prvblk-* initialze to follow threads 05242 4 41 552 5014 3314 ldx3 a.z004-*,* =addr(.crnxs) next small block 05243 0 74 032 5275 3315 tze fsm010-* empty chain 05244 3333 00 0 3316 fsm050 cx3a start of free block 05245 3 06 001 0 3317 ada fb.siz,3 compute end address 05246 0 17 041 5307 3318 sta fsmtmp-* save 05247 3333 00 0 3319 cx3a 05250 773 037 0 3320 iaa bufsiz-1 round up to next buffer address 05251 022 740 0 3321 iana -bufsiz 05252 0 27 035 5307 3322 cmpa fsmtmp-* does next buffer start in free block? 05253 0 65 017 5272 3323 tpl fsm020-* no 05254 0332 00 0 3324 cax2 save buffer start address 05255 773 040 0 3325 iaa bufsiz compute end of possible buffer address 05256 0 27 031 5307 3326 cmpa fsmtmp-* is buffer complete in block? 05257 0 75 002 5261 3327 tmi fsm030-* yes 05260 0 64 012 5272 3328 tnz fsm020-* no 05261 473 040 0 3329 fsm030 ilq bufsiz setup to unthread the buffer we found 05262 0 43 532 5014 3330 ldx1 a.z004-* =addr(.crnxs) 05263 0 10 536 5021 3331 tsy unthrd-* unthread from current chain end of binary card 00000070 05264 0 43 526 5012 3332 ldx1 a.z002-* =addr(.crnxa) 05265 3332 00 0 3333 cx2a 05266 4333 00 0 3334 cax3 05267 0 10 617 5106 3335 tsy relspc-* free in to regular buffer chain 05270 0 76 016 5306 3336 aos fsmcnt-* count buffers i found 05271 0 71 750 5241 3337 tra fsm040-* and continue 05272 0 50 613 5105 3338 fsm020 stx3 prvblk-* step to next block 05273 3 41 000 0 3339 ldx3 fb.nxt,3 05274 0 64 750 5244 3340 tnz fsm050-* 05275 0 07 011 5306 3341 fsm010 lda fsmcnt-* count of buffers freed 05276 0 74 006 5304 3342 tze fsmret-* none 05277 0 76 717 5216 3343 aos fresml-* can take skip return 05300 4 16 513 5013 3344 asa a.z003-*,* update .crnbf 05301 322 777 0 3345 iera -1 complement count 05302 773 001 0 3346 iaa 1 05303 4 16 512 5015 3347 asa a.z005-*,* update .crnbs assm 01 12-10-82 16.070 fnp utility programs for mcs page 120 mcs space management routines 05304 3348 fsmret return fresml 05306 3349 fsmcnt bss 1 05307 3350 fsmtmp bss 1 end of binary card 00000071 3351 end 5310 is the next available location. 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.079 fnp utility programs for mcs page 121 octal symbol references by sequence no. 264 a.a001 483 279 483 597 265 a.a002 484 286 484 266 a.a003 485 406 485 270 a.a004 487 384 487 272 a.a005 489 441 444 454 489 273 a.a006 490 451 490 274 a.a007 491 377 491 275 a.a008 492 395 492 276 a.a009 493 332 493 277 a.a010 494 337 494 300 a.a011 495 418 495 301 a.a012 496 292 319 496 302 a.a013 497 325 497 303 a.a014 498 324 498 304 a.a015 499 328 499 305 a.a016 500 300 500 306 a.a017 501 305 501 307 a.a018 502 502 599 1644 a.b001 1253 1253 1333 1355 1372 1527 1645 a.b002 1254 1254 1361 1646 a.b003 1255 1179 1190 1195 1203 1235 1255 1647 a.b004 1256 1164 1256 1650 a.b005 1257 1257 1321 1651 a.b006 1258 1210 1258 1652 a.b007 1259 1259 1495 1653 a.b008 1260 1260 1313 1654 a.b009 1261 1261 1518 1656 a.b010 1263 1123 1263 1668 1660 a.b011 1265 1124 1265 1661 a.b012 1266 1130 1266 1662 a.b013 1267 1132 1267 1664 a.b015 1269 1158 1269 1665 a.b016 1270 1104 1270 1666 a.b017 1271 1159 1271 1667 a.b018 1272 1272 1548 1670 a.b019 1273 1121 1273 1671 a.b020 1274 1274 1343 1672 a.b021 1275 1275 1347 1437 2770 a.c001 1978 1955 1978 2771 a.c002 1979 1836 1872 1979 2772 a.c003 1980 1970 1980 2345 a.e001 1662 1631 1638 1647 1657 1659 1662 2346 a.e002 1663 1632 1663 2347 a.e003 1664 1635 1664 2350 a.e004 1665 1652 1665 2351 a.e005 1666 1658 1666 2352 a.e006 1667 1628 1667 2353 a.e007 1668 1644 1668 2354 a.e008 1669 1646 1669 2301 a.g001 1608 1581 1590 1608 2302 a.g002 1609 1582 1591 1609 assm 01 12-10-82 16.079 fnp utility programs for mcs page 122 octal symbol references by sequence no. 2303 a.g003 1610 1576 1585 1610 2304 a.g004 1611 1601 1611 1361 a.h001 1031 1016 1031 1362 a.h002 1032 1027 1032 737 a.i001 784 649 784 740 a.i002 785 660 785 741 a.i003 786 651 661 698 705 776 786 742 a.i004 787 669 709 777 787 743 a.i005 788 634 788 744 a.i006 789 645 789 745 a.i007 790 633 790 746 a.i008 791 686 791 747 a.i009 792 697 792 750 a.i010 793 704 793 751 a.i011 794 696 794 752 a.i012 795 648 771 795 753 a.i013 796 659 796 754 a.i014 797 735 797 755 a.i015 798 725 751 798 756 a.i016 799 732 799 757 a.i017 800 755 800 760 a.i018 801 775 801 2512 a.m001 1790 1697 1790 3354 a.o001 2295 2088 2142 2255 2295 3355 a.o002 2296 2109 2296 3356 a.o003 2297 2232 2297 3471 a.p001 2385 2310 2340 2385 3057 a.s002 2056 2036 2056 4056 a.v001 2526 2515 2526 4214 a.w001 2682 2599 2682 4540 a.x001 2957 2883 2926 2957 4541 a.x002 2958 2930 2958 4407 a.y001 2853 2740 2743 2746 2771 2853 4410 a.y002 2854 2744 2804 2854 4411 a.y003 2855 2758 2855 4412 a.y004 2856 2843 2856 4413 a.y005 2857 2734 2754 2857 4414 a.y006 2858 2759 2858 4415 a.y007 2859 2839 2859 4416 a.y008 2860 2848 2860 2919 4417 a.y009 2861 2826 2842 2861 4420 a.y010 2862 2845 2862 2920 5011 a.z001 3125 3100 3125 5012 a.z002 3126 2996 3126 3332 5013 a.z003 3127 3000 3127 3344 5014 a.z004 3128 3024 3128 3314 3330 5015 a.z005 3129 3129 3347 5017 a.z008 3131 3131 3218 33 badint 255 47 255 20 bcdspc 143 143 959 1240 bda1 915 915 926 assm 01 12-10-82 16.079 fnp utility programs for mcs page 123 octal symbol references by sequence no. 1260 bdacon 935 913 935 1257 bdactr 934 912 925 934 1255 bdasvi 932 908 929 932 1256 bdasx2 933 910 928 933 1231 bdecac 907 907 930 4705 bfcksw 3051 3037 3049 3051 20000 bffbrk 124 124 1290 2000 bffctl 124 124 2381 1000 bffhld 124 124 2285 40000 bfflst 124 124 2286 2 bf.dta 124 124 1390 2172 2288 2315 2329 2347 1 bf.flg 124 124 1516 1523 2155 2166 2354 0 bf.nxt 124 124 1380 2122 2164 2182 2186 2212 2214 2218 2344 2778 3068 1 bf.siz 124 124 2398 2777 1 bf.tly 124 124 1401 1511 2195 2364 2369 2371 2405 400 bfmsiz 124 124 3047 2 b.0 784 785 792 793 801 811 825 834 920 970 1137 1278 1397 1450 1470 1715 1785 1923 2085 2137 2141 2207 2236 2249 2250 2276 2288 2362 2376 3 b.1 923 971 1404 1469 1490 1546 1720 1924 1982 2084 2140 2235 2248 2289 2335 40 blank 147 147 1461 1851 777777 brkall 180 180 1455 777776 brkctl 181 181 1458 5010 bstblk 3124 3098 3099 3109 3115 3124 50 bufmax 124 124 1328 1340 1431 12 bufpre 124 124 1350 24 bufres 124 124 2741 2747 5 bufshf 124 124 2737 2768 2844 2921 2986 2999 40 bufsiz 124 124 1360 1801 1802 1954 2309 2339 2414 2735 2736 2755 2756 2836 2837 2989 2990 3320 3321 3325 3329 2 bufthr 124 124 2228 777 buftmk 124 124 1296 2073 2287 2378 2415 621 chf010 687 687 692 626 chf020 694 689 694 1024 chficw 825 710 825 614 chflt 679 569 679 714 1026 chfmsg 827 825 827 1041 chfnum 829 701 829 644 chfret 713 708 713 1053 chfst 831 793 831 2255 chk010 1584 1577 1580 1584 2266 chk020 1594 1589 1594 2276 chk030 1604 1573 1586 1604 1426 chkcnt 1074 1050 1052 1074 1423 chkhgh 1070 1058 1070 1364 chkiv 1048 54 1048 1064 1411 chklp 1057 1057 1062 1422 chkmax 1069 1061 1069 2235 chkofc 1570 1269 1570 1604 1605 1424 chkone 1073 1051 1073 2277 chkret 1605 1583 1592 1596 1600 1602 1605 4672 chksiz 3036 2822 2857 2988 3016 3036 3038 3045 assm 01 12-10-82 16.079 fnp utility programs for mcs page 124 octal symbol references by sequence no. 1421 chkstp 1066 1059 1066 1101 chnasc 842 700 792 842 4 c.0 955 960 5 c.1 956 961 3670 cmax 2481 2430 2481 3605 cmetrs 2479 2437 2479 2481 37 conabt 259 49 259 334 conchn 510 51 391 510 765 conman 808 63 667 707 772 808 13 contip 76 492 15 cr 151 151 1178 1189 1833 1 ct.dev 184 184 1698 2110 1 ctrl 78 1790 2296 346 dcwlst 527 420 424 427 431 523 527 2 denq 83 2297 5 derrq 84 497 252 diapcw 473 453 473 14 dicell 74 886 4 dich 112 112 443 879 454 dimb 112 112 489 887 250 dispcw 472 359 461 472 4 dl.cr 128 128 1835 3 dl.hsz 128 128 2027 3 dl.lf 128 128 1829 3 dmbx 75 495 15 dspqur 87 1265 1669 5 dt.cmt 126 126 1715 2 dt.key 126 126 2134 3 dt.prt 126 126 2116 2 eb.dta 1800 1800 1982 0 eb.inp 1797 1797 1921 1934 1962 1 eb.out 1798 1798 1963 2 eb.tly 1799 1799 1901 1936 1964 73 ebsize 1802 1802 1903 16 ecgifl 82 1261 2055 3007 echngo 2003 1260 2003 2051 2624 eforce 1878 1275 1665 1878 1889 3036 eng020 2028 2019 2028 3050 eng180 2048 2008 2010 2013 2029 2048 3060 engich 2057 2005 2011 2020 2033 2057 3052 engret 2051 2046 2051 3061 engtmp 2058 2022 2026 2058 115 errmsg 171 171 323 451 etmb 112 112 483 2957 12 exist 225 44 225 13 f0 234 234 484 4577 fbf010 2988 2982 2988 4602 fbf020 2991 2987 2991 0 fb.nxt 2708 2708 3113 3165 3166 3167 3170 3181 3184 3192 3194 3226 3234 3240 3241 3253 3258 3259 3260 3271 3272 3280 3284 3288 3291 3292 3339 1 fb.siz 2709 2709 2983 3103 3106 3111 3151 3163 3169 3176 3222 3265 3273 3274 3283 3289 assm 01 12-10-82 16.079 fnp utility programs for mcs page 125 octal symbol references by sequence no. 3290 3317 360 f.name 543 493 543 766 flticw 811 664 670 811 771 fltmsg 815 811 815 324 fltnam 509 494 509 788 323 fltnum 508 288 330 405 415 508 420 fltst 112 112 791 77 fp001 299 294 299 100 fp002 301 301 306 106 fp003 309 303 309 110 fp004 313 297 313 124 fp006 330 291 296 307 311 330 133 fp008 338 338 344 142 fp009 354 354 363 157 fp010 378 378 389 200 fp015 404 392 404 236 fp020 457 457 465 241 fp030 460 459 460 214 fp16 426 422 426 221 fp17 433 429 433 226 fp18 439 436 439 41 fp 266 235 237 239 241 243 245 247 249 256 258 260 266 281 0 fp.fst 2700 2700 3101 3186 3223 3225 3251 3252 310 fp.inh 503 268 503 797 335 fptemp 511 336 343 511 4556 frebfm 2966 2961 2966 4566 frebuf 2979 66 2979 3069 4706 frelbf 3063 67 3063 3065 3074 4635 fremem 3013 70 3013 5216 fresml 3311 71 2854 3130 3311 3343 3348 4634 fretmp 3005 2991 2993 2995 3005 3019 3021 3023 4734 frl010 3068 3068 3071 5275 fsm010 3341 3315 3341 5272 fsm020 3338 3323 3328 3338 5261 fsm030 3329 3327 3329 5241 fsm040 3313 3313 3337 5244 fsm050 3316 3316 3340 5306 fsmcnt 3349 3312 3336 3341 3349 5304 fsmret 3348 3342 3348 5307 fsmtmp 3350 3318 3322 3326 3350 3515 ftemp 2416 2404 2407 2416 3472 fulbuf 2396 53 1257 2377 2396 2409 2410 336 fvsave 512 271 512 598 4367 gbfail 2835 2828 2835 4424 gbfaq 2868 2762 2764 2868 4316 gbfclr 2792 2792 2795 4252 gbfjoi 2753 2742 2748 2753 4345 gbfnsp 2804 2760 2804 4262 gbfok 2761 2761 2808 4360 gbfsml 2825 2825 2850 4422 gbftmp 2866 2789 2794 2835 2849 2866 assm 01 12-10-82 16.079 fnp utility programs for mcs page 126 octal symbol references by sequence no. 4310 gbfzro 2786 2786 2831 4546 getbfm 2965 72 2960 2965 4250 getbuf 2751 65 2385 2751 4352 getmem 2819 69 2819 4744 getspc 3096 2806 2827 2840 2858 3096 3118 3122 1320 gettib 1006 43 1006 1025 1273 4225 getubf 2731 68 1254 1978 2731 4777 gsp010 3115 3102 3115 5002 gsp020 3118 3104 3118 4774 gsp030 3112 3105 3107 3108 3112 4762 gsp040 3102 3102 3114 5006 gspret 3122 3116 3122 1354 gtb010 1025 1025 1029 1356 gtb020 1027 1008 1027 6 h1ch 112 112 353 426 h1fts 112 112 500 430 h3fts 112 112 501 17 hcheck 85 1259 1666 13 hfv 233 45 233 1000 hslafl 157 157 1295 1673 1989 11 ht 148 148 149 1870 1011 icasci 818 784 818 555 icp010 632 626 632 561 icp020 637 637 643 606 icp030 666 654 666 553 icprt 630 564 565 566 625 630 668 672 544 ignore 613 46 487 488 560 561 567 568 570 613 546 illop 622 563 622 624 1635 inchar 1244 1138 1143 1144 1152 1160 1194 1227 1230 1244 1312 1396 1411 1460 1471 1610 1630 inchrp 1239 1136 1239 1489 1545 1632 inecho 1241 1108 1241 1492 1494 1551 1980 1641 inenef 1248 1248 1309 1314 1501 1538 4450 inhint 2898 2881 2898 1636 inorig 1245 1145 1245 1418 1428 1450 inp005 1100 1097 1100 1502 inp007 1129 1119 1129 1510 inp010 1136 1114 1117 1136 1272 1520 inp012 1144 1141 1144 1534 inp015 1157 1148 1153 1157 1547 inp020 1172 1165 1172 1557 inp030 1182 1166 1182 1567 inp040 1191 1188 1191 1573 inp050 1198 1167 1198 1601 inp060 1206 1168 1206 1602 inp070 1209 1169 1209 1611 inp080 1217 1213 1217 1614 inp090 1222 1211 1222 1621 inp100 1229 1175 1177 1180 1185 1202 1207 1216 1220 1225 1229 1727 inp110 1308 1196 1204 1233 1236 1308 1735 inp114 1315 1311 1315 1743 inp120 1325 1317 1325 assm 01 12-10-82 16.079 fnp utility programs for mcs page 127 octal symbol references by sequence no. 1754 inp125 1336 1329 1336 1765 inp128 1345 1341 1345 1770 inp130 1349 1338 1344 1349 1777 inp140 1357 1334 1351 1357 2004 inp150 1367 1362 1367 2020 inp160 1375 1364 1375 2026 inp170 1383 1376 1383 2030 inp180 1387 1381 1387 2034 inp190 1394 1323 1394 2052 inp200 1412 1409 1412 2062 inp210 1422 1415 1422 2077 inp215 1436 1432 1436 2101 inp220 1439 1425 1429 1435 1439 2123 inp230 1465 1459 1465 2124 inp240 1468 1468 1476 2133 inp250 1479 1419 1441 1456 1462 1472 1479 2151 inp260 1497 1487 1493 1497 2167 inp262 1517 1510 1514 1517 2171 inp265 1520 1500 1520 2203 inp298 1531 1502 1531 2205 inp300 1535 1271 1373 1420 1451 1463 1475 1519 1530 1535 2215 inp310 1544 1537 1539 1544 2233 inpbak 1561 1270 1561 1640 inpind 1247 1247 1540 1543 1430 inproc 1094 57 1094 1561 1441 inpsx1 1094 1094 1125 2305 inptim 1625 1264 1625 1631 inrem 1240 1107 1240 1547 1634 inres 1243 1110 1243 1557 1609 3411 ins010 2320 2307 2320 3427 ins020 2338 2325 2338 3437 ins030 2349 2318 2349 3445 ins040 2360 2334 2336 2360 3357 insert 2303 2295 2303 2372 3372 inssa 2303 2303 2361 1633 insusp 1242 1109 1242 1554 1608 1642 intime 1250 1129 1131 1133 1250 35 iomflt 257 48 257 270 273 502 2360 ipabs 1676 1627 1645 1676 2362 iptemp 1678 1633 1634 1636 1678 6 istat 79 1253 4542 itaddr 2960 2958 2960 3470 itemp1 2383 2327 2330 2367 2370 2383 1105 itemp 844 636 642 647 657 695 703 844 7 itest 80 1268 1611 4 it.gt1 120 120 2942 2943 2 it.inc 120 120 2946 2947 7 it.max 120 120 2936 2938 0 it.tot 120 120 2933 2934 2332 itm010 1649 1640 1642 1649 450 itmb 112 112 1266 1663 assm 01 12-10-82 16.079 fnp utility programs for mcs page 128 octal symbol references by sequence no. 7 itprty 141 141 1263 650 .crbuf 114 114 3131 653 .criom 114 114 1031 651 .crmem 114 114 798 2682 3125 652 .crnbf 114 114 1274 2853 2860 3127 675 .crnbs 114 114 2862 3129 660 .crnxa 114 114 2855 2859 3126 674 .crnxs 114 114 2861 3128 702 .crpte 114 114 799 2526 705 .crtdt 114 114 1032 735 .malof 118 118 2916 740 .mbufa 118 118 2763 724 .mspav 118 118 2923 2 kyadd 2068 2068 2100 2114 16 l6ch 112 112 362 12 lf 150 150 1192 1827 356 licadr 538 434 538 254 l.a001 474 373 474 255 l.a002 475 356 458 475 256 l.a003 476 376 476 260 l.a005 478 423 430 478 261 l.a006 479 437 479 262 l.a007 480 310 480 263 l.a008 481 272 481 1673 l.b001 1278 1278 1391 1447 1674 l.b002 1279 1173 1279 1675 l.b003 1280 1183 1280 1676 l.b004 1281 1186 1231 1281 1529 1677 l.b005 1282 1200 1282 1700 l.b006 1283 1214 1223 1283 1701 l.b007 1284 1218 1284 1702 l.b008 1285 1285 1332 1371 1703 l.b009 1286 1286 1354 1704 l.b010 1287 1154 1287 1414 1481 1705 l.b011 1288 1288 1417 1706 l.b012 1289 1147 1289 1707 l.b013 1290 1290 1515 1522 1710 l.b014 1291 1291 1526 1711 l.b015 1292 1292 1440 1499 1712 l.b016 1293 1293 1408 1713 l.b017 1294 1294 1532 1714 l.b018 1295 1295 1486 1715 l.b019 1296 1296 1512 1716 l.b020 1297 1297 1541 1717 l.b021 1298 1116 1298 1720 l.b022 1299 1113 1299 1337 1424 1721 l.b023 1300 1300 1572 1722 l.b024 1301 1301 1579 1588 1723 l.b026 1303 1303 1433 1724 l.b027 1304 1118 1126 1304 1725 l.b028 1305 1140 1305 assm 01 12-10-82 16.079 fnp utility programs for mcs page 129 octal symbol references by sequence no. 1726 l.b029 1306 1306 1367 2773 l.c001 1982 1931 1961 1982 2774 l.c002 1983 1928 1983 2775 l.c003 1984 1905 1984 2776 l.c004 1985 1865 1985 2777 l.c005 1986 1848 1867 1918 1986 3000 l.c006 1987 1815 1987 3001 l.c007 1988 1926 1988 3002 l.c008 1989 1822 1912 1989 3004 l.c010 1991 1935 1991 3005 l.c011 1992 1907 1974 1992 3602 l.d001 2472 2429 2452 2472 2355 l.e001 1672 1641 1672 2356 l.e002 1673 1656 1673 2357 l.e003 1674 1653 1674 3512 l.f001 2413 2403 2413 3513 l.f002 2414 2401 2414 3514 l.f003 2415 2406 2415 1363 l.h001 1034 1007 1034 761 l.i001 803 726 803 762 l.i002 804 730 804 763 l.i003 805 738 805 764 l.i004 806 763 767 806 2505 l.m001 1785 1701 1785 2506 l.m002 1786 1768 1770 1786 2510 l.m004 1788 1706 1724 1788 2511 l.m005 1789 1766 1789 3333 l.o001 2276 2080 2135 2173 2276 3334 l.o002 2277 2086 2277 3335 l.o003 2278 2105 2278 3337 l.o005 2280 2237 2280 3340 l.o006 2281 2252 2281 3341 l.o007 2282 2263 2282 3342 l.o008 2283 2221 2283 3343 l.o009 2284 2192 2193 2284 3344 l.o010 2285 2156 2285 3345 l.o011 2286 2162 2286 3346 l.o012 2287 2196 2287 3347 l.o013 2288 2199 2288 3350 l.o014 2289 2202 2289 3462 l.p001 2376 2316 2331 2348 2376 3463 l.p002 2377 2322 2377 3464 l.p003 2378 2365 2378 3466 l.p005 2380 2368 2380 3467 l.p006 2381 2353 2381 3054 l.s001 2053 2018 2053 3055 l.s002 2054 2007 2054 4057 l.v001 2528 2518 2528 4215 l.w001 2684 2571 2684 4216 l.w002 2685 2578 2685 4217 l.w003 2686 2618 2666 2669 2674 2686 assm 01 12-10-82 16.079 fnp utility programs for mcs page 130 octal symbol references by sequence no. 4421 l.y001 2864 2763 2864 5020 l.z001 3133 2916 3133 4544 loctim 2964 2932 2935 2940 2964 344 lsticw 523 523 538 4220 mabsad 2688 2570 2577 2600 2603 2616 2619 2633 2660 2662 2688 5 macwk1 3311 679 714 723 780 1006 1025 1048 1064 1094 1561 1570 1605 1693 1782 1812 1875 1878 1889 1891 1937 1939 1971 2003 2051 2076 2272 2303 2372 2396 2410 2427 2438 2450 2464 2511 2519 2565 2576 2679 3063 3074 3096 3122 3150 3198 3216 3296 3311 3348 13 macwk2 3311 679 723 1006 1048 1094 1570 1693 1812 1878 1891 1939 2003 2076 2303 2396 2427 2450 2511 2565 2576 3063 3096 3150 3216 3311 3 macwk3 3065 2797 2993 3021 3065 7 macwk4 3065 2797 2993 3021 3065 77 mask6 154 154 1098 177 mask7 155 155 1100 4 maxctl 2071 2071 2279 4704 maxsiz 3047 3042 3047 1106 memlst 845 728 731 742 759 845 646 mempar 723 562 723 780 3516 meterc 2427 41 2427 2438 3601 meterr 2468 2432 2455 2468 3544 metert 2450 42 2450 10 mincd 90 1907 2763 11 mincs 89 1367 1974 2916 24 m.ebof 118 118 1907 14 m.inaf 118 118 1367 1974 2515 mlimit 1793 1713 1718 1793 657 mmp010 730 727 730 663 mmp020 734 729 734 665 mmp030 736 736 745 760 677 mmp040 747 743 747 703 mmp045 751 748 751 714 mmp050 762 740 762 723 mmp060 770 752 770 724 mmp070 771 764 766 769 771 1076 mmpadr 838 801 838 1056 mmpicw 834 778 834 1060 mmpmsg 836 834 836 735 mmpret 780 773 780 4 modnum 96 96 1066 2025 2184 2239 2245 2311 2341 2591 2598 2602 2609 2612 2797 2993 3021 3041 3044 3065 3221 3270 3287 2411 mov005 1711 1708 1711 2412 mov010 1713 1710 1713 2414 mov012 1715 1715 1721 2423 mov020 1723 1719 1723 2433 mov025 1732 1726 1732 2437 mov027 1736 1729 1731 1736 2441 mov030 1739 1716 1739 2447 mov035 1748 1742 1748 2453 mov040 1753 1750 1753 2463 mov050 1763 1755 1763 assm 01 12-10-82 16.079 fnp utility programs for mcs page 131 octal symbol references by sequence no. 2473 mov060 1772 1769 1772 2477 mov070 1777 1767 1777 2502 movbak 1781 1737 1746 1752 1757 1761 1781 2364 move 1693 58 1256 1693 1777 1778 1781 1782 4067 mpssi 2565 2565 2568 4107 mptsi 2576 2569 2576 4221 mrmlen 2689 2586 2592 2604 2610 2620 2622 2630 2655 2667 2675 2689 772 msgnam 816 790 816 2514 mshift 1792 1258 1696 1744 1792 145 msksel 358 357 358 3540 mtc010 2435 2431 2435 3542 mtcbak 2438 2433 2438 3531 mtcsq 2427 2427 2436 2513 mtemp 1791 1773 1775 1791 4 mt.frc 201 201 3065 2 mt.fre 199 199 2993 3021 1 mt.get 198 198 2797 4222 mtstad 2690 2585 2588 2594 2595 2606 2607 2690 3571 mtt010 2458 2454 2458 3577 mttbak 2464 2456 2464 3603 mttemp 2475 2459 2460 2475 20 mupdat 91 2923 4223 mvllmp 2691 2627 2661 2670 2691 4114 mvp000 2584 2574 2584 4156 mvp020 2625 2621 2625 4163 mvp040 2632 2623 2632 4164 mvp060 2637 2637 2671 2676 4165 mvp080 2640 2572 2579 2640 4166 mvp100 2645 2645 2651 4207 mvp110 2673 2668 2673 4061 mvpgsc 2565 60 2565 2566 4101 mvpgtg 2576 61 2567 2576 2679 4224 mvplmm 2692 62 2587 2692 4212 mvpret 2678 2656 2678 777000 nbftmk 2073 2073 2380 0 null 145 145 1841 1223 obit0 885 862 885 1224 obit1 886 866 886 1225 obit2 887 877 880 887 1226 obit3 888 870 888 1227 obit4 889 874 889 1230 obit5 890 876 890 1200 obit 861 490 861 881 3352 obufad 2292 2190 2203 2210 2217 2292 20 oct020 168 168 477 1303 octasc 965 50 786 965 975 1265 octbcd 950 950 963 1316 octsv 978 951 952 962 966 967 974 978 3353 ohldot 2293 2151 2160 2176 2293 1637 oldpos 1246 1163 1176 1246 1979 77 opend 2066 2066 2097 assm 01 12-10-82 16.079 fnp utility programs for mcs page 132 octal symbol references by sequence no. 3351 otemp 2291 2119 2130 2267 2269 2291 3104 out010 2083 2083 2090 2107 2145 2258 3112 out020 2092 2087 2092 3150 out028 2131 2118 2131 3151 out030 2133 2115 2133 3155 out040 2139 2139 2144 3163 out050 2147 2101 2147 3176 out052 2161 2161 2167 3205 out054 2168 2157 2163 2165 2168 3220 out060 2180 2170 2180 3225 out070 2187 2177 2187 2219 3262 out071 2217 2194 2208 2217 3271 out073 2228 2215 2228 3276 out075 2234 2153 2178 2216 2230 2234 3303 out080 2241 2149 2241 3305 out090 2244 2095 2244 3306 out100 2247 2243 2247 3313 out110 2254 2254 2257 3317 out200 2261 2098 2238 2261 3 outmsg 2069 2069 2148 3062 outprc 2076 52 2076 2272 1107 pagbas 846 724 747 754 765 768 846 2676 pin010 1909 1904 1909 2710 pin015 1920 1913 1916 1920 2720 pin020 1930 1927 1930 2722 pin030 1933 1929 1933 2725 pinbak 1937 1908 1919 1937 1627 pmask 1238 1101 1142 1238 5105 prvblk 3201 3097 3110 3112 3117 3182 3201 3228 3233 3239 3246 3313 3338 40 pte.a 2523 2514 2523 2751 puo010 1965 1952 1965 2760 puo020 1973 1956 1973 2756 puobak 1971 1966 1971 1975 2555 put020 1833 1828 1833 2566 put030 1841 1831 1841 2570 put039 1844 1825 1844 2571 put040 1845 1834 1845 2600 put050 1853 1842 1853 2603 put060 1857 1857 1860 2610 put070 1863 1823 1863 2620 put080 1872 1866 1872 2622 putbak 1875 1816 1819 1830 1837 1846 1849 1858 1861 1868 1871 1875 2516 puteco 1812 56 1255 1812 1875 2056 2644 putin 1891 1857 1891 1910 1937 1965 2727 putone 1939 1818 1887 1939 1968 1971 2534 putsq 1812 1812 1826 1844 1869 1959 2531 putsx2 1812 1812 1850 3006 puttmp 1995 1856 1859 1995 527 pwron 592 499 592 340 reason 516 498 516 529 5106 relspc 3216 2856 2998 3025 3216 3296 3335 assm 01 12-10-82 16.079 fnp utility programs for mcs page 133 octal symbol references by sequence no. 4 repeat 2070 2070 2242 1 reteco 159 159 1553 4 retres 161 161 1559 2 retsus 160 160 1556 340 rfault 517 317 416 517 341 ric 518 320 518 795 5132 rsp010 3228 3224 3228 5146 rsp020 3246 3232 3246 5134 rsp030 3230 3230 3235 5154 rsp040 3258 3247 3258 5157 rsp050 3264 3242 3264 5174 rsp060 3280 3254 3268 3280 5166 rsp070 3271 3269 3271 5204 rsp080 3288 3286 3288 5211 rspret 3294 3227 3281 3285 3294 5215 rsptmp 3297 3229 3231 3266 3267 3297 342 rstat 519 314 519 794 177 rubout 152 152 1728 343 rword 520 321 520 796 4060 sargsv 2530 2512 2516 2530 4455 savcnt 2902 2902 2922 2923 312 save 507 267 269 274 275 276 278 280 283 507 594 596 600 601 602 603 604 605 789 4452 saveaq 2900 2797 2882 2900 2949 4447 savei 2897 2880 2897 2953 4454 savert 2901 2761 2797 2829 2891 2901 2954 2993 3021 4444 savex1 2894 2797 2885 2894 2950 2993 3021 4445 savex2 2895 2886 2895 2951 4446 savex3 2896 2779 2797 2830 2888 2896 2952 1120 sd.iv 852 491 852 21 secdsp 88 1662 4036 setptw 2511 59 800 1667 2511 2519 2638 21 sf.nic 122 122 1491 510 sfv 559 485 559 22 simclk 86 1267 1664 1000 s.brch 130 130 1291 17 s.dss 130 130 1331 1353 1525 4000 s.exh 130 130 1285 200 s.prex 130 130 1286 177 s.tib 130 130 1370 105 sndout 170 170 2231 40 space 146 146 147 1730 4530 std100 2946 2941 2946 4471 stdret 2919 2800 2919 3003 3028 4426 stdsav 2879 2732 2752 2820 2879 2889 2892 2980 3014 4461 stfail 2915 2745 2749 2805 2807 2841 2915 4460 stfree 2905 2799 2905 2917 2929 3002 3027 523 stop 579 469 579 4456 sttime 2903 2884 2903 2928 4457 sttimx 2904 2904 2927 11 tab 149 149 1845 1915 assm 01 12-10-82 16.079 fnp utility programs for mcs page 134 octal symbol references by sequence no. 100 tf8in 116 116 1305 2 tfbel 116 116 1984 4000 tfblak 116 116 1301 2284 20 tfbral 116 116 1292 2054 2000 tfcrec 116 116 1279 1787 400 tfctrl 116 116 2278 200000 tfecpx 116 116 1281 1787 1985 100000 tffip 116 116 1287 1987 40000 tffrmi 116 116 1289 40 tfifc 116 116 1299 100000 tfisus 116 116 1303 2 tfitim 116 116 1298 1000 tflfec 116 116 1280 1787 1990 100 tfofc 116 116 1300 2284 200000 tfsftr 116 116 1293 1788 40 tfsked 116 116 1304 1674 4000 tftbec 116 116 1282 1787 1986 200 tfupsf 116 116 1283 1284 1 tfwrit 116 116 1294 2283 32 t.brkp 116 116 1446 41 t.dcpl 116 116 1327 23 t.dcwa 116 116 2079 2266 2271 24 t.dcwl 116 116 2268 2270 37 t.dtp 116 116 1824 25 t.echo 116 116 1951 1958 44 t.entp 116 116 1536 2023 2 t.flg2 116 116 1112 1146 1155 1215 1219 1224 1336 1407 1413 1423 1483 1571 1578 1587 1707 1725 1814 2191 36 t.flg3 116 116 1115 1127 1139 1439 1498 1654 2006 1 t.flg 116 116 1174 1184 1187 1201 1232 1434 1528 1533 1847 1864 1906 1917 2106 2222 40 t.frmc 116 116 1149 1416 10 t.icch 116 116 1392 1395 1403 1405 5 t.icp 116 116 1316 1375 1384 1509 7 t.icpl 116 116 1326 1339 1349 1363 1430 45 t.ifch 116 116 1345 1426 1649 6 t.ilst 116 116 1320 1379 1389 1399 1508 1521 50 t.itim 116 116 1134 1630 1637 4 t.line 116 116 1120 1485 1655 1821 1911 52 t.metr 116 116 1367 1907 1974 15 t.occh 116 116 2174 2317 16 t.ocnt 116 116 2128 2188 2229 12 t.ocp 116 116 2120 2124 2152 2168 2213 2226 13 t.ocur 116 116 2117 2123 2126 2158 2169 2171 2175 2306 2313 46 t.ofch 116 116 1574 2205 14 t.olst 116 116 2121 2127 2161 2181 2211 2225 2321 2343 2350 2363 47 t.omct 116 116 1595 1598 2209 33 t.pos 116 116 1162 1732 1735 1751 1756 1759 1765 1776 1873 42 t.scll 116 116 1310 2009 2044 2048 30 t.sfcm 116 116 1488 43 t.sncc 116 116 1542 2038 0 t.stat 116 116 1330 1352 1369 1524 assm 01 12-10-82 16.079 fnp utility programs for mcs page 135 octal symbol references by sequence no. 17 t.type 116 116 1699 2111 3604 tmax 2476 2453 2476 144 tmaxd 2488 2476 2488 3671 tmetrs 2484 2462 2463 2484 3672 tmorg 2486 2484 2486 2488 12 trace 81 2797 2993 3021 3065 1110 tstadr 847 734 736 741 744 757 847 1111 tstind 848 737 739 848 0 tych 112 112 510 420 tyfts 112 112 496 5065 untall 3181 3154 3181 5074 untbeg 3191 3157 3191 5062 untend 3175 3159 3175 5072 unthed 3186 3183 3186 5021 unthrd 3150 3121 3150 3198 3331 5066 untjon 3182 3182 3196 5102 untret 3198 3171 3177 3185 3187 3198 5035 untsq 3150 3150 3152 3191 5036 untsx2 3150 3150 3164 5037 untsx3 3150 3150 3156 5104 unttmp 3200 3153 3158 3168 3175 3193 3200 0 util 95 38 95 96 312 utsave 506 55 506 4 wcon 77 787 1021 wdasci 821 785 821 1104 wflag 843 623 631 653 843 77400 window 2524 2524 2528 1 w.2 523 529 533 538 890 ** 48406 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