assm 01 07-08-86 13.161 fnp utility programs for mcs page 1 preface this program will be loaded mod 8 program break 6526 common length 0 v count bits 5 primary symdef entry util 0 meterc 3701 metert 3727 gettib 1320 exist 12 hfv 13 ignore 544 badint 33 iomflt 35 conabt 37 end of binary card 00000001 octasc 1303 conchn 334 outprc 3204 fulbuf 3655 chkiv 1364 utsave 312 puteco 2636 inproc 1430 move 2504 setptw 4222 end of binary card 00000002 setbpt 4241 cvabs 4275 mvpgsc 4347 mvpgtg 4367 mvplmm 4514 conman 765 getbuf 4515 frebuf 5155 frelbf 5625 getubf 5343 end of binary card 00000003 getbfh 5343 frebfh 5570 getmem 4626 fremem 5244 fresml 6434 getbfm 5056 fpsel 230 obsel 1220 bfcksw 5342 assm 01 07-08-86 13.161 fnp utility programs for mcs page 2 secondary symdef entry .chain 0 end of binary card 00000004 m.004. 2050 m.009. 3006 m.012. 3103 m.019. 4550 x.023. 4565 m.028. 4616 x.032. 4661 m.037. 4725 m.042. 5005 x.046. 5211 end of binary card 00000005 x.051. 5272 m.056. 5425 m.060. 5472 x.064. 5501 m.069. 5527 x.073. 5641 x.078. 5765 block length symref 1 ctrl 2 denq 3 dmbx end of binary card 00000006 4 wcon 5 derrq 6 istat 7 itest 10 mincd 11 mincs 12 trace 13 contip 14 dicell 15 dspqur end of binary card 00000007 16 ecgifl 17 hcheck 20 mupdat 21 secdsp 22 simclk end of binary card 00000008 assm 01 07-08-86 13.161 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 11 lbl ,utilities assm 01 07-08-86 13.161 fnp utility programs for mcs page 4 13 *************************************************************************** 14 * 15 * note: cs means "central system" 16 * 17 *************************************************************************** 18 * change list 19 * 20 * modified on july 24, 1972 by rbs to add code to handle dia 21 * 22 * modified october 1974 by rsc for new system 23 * 24 * modified july 4 1979 by bsg for echo negotiation 25 * 26 * modified 1979 august 23 by art beattie to add 'setptw', 'mvpgsc' and 27 * 'mvpgtg' routines. 28 * 29 * modified january 19, 1981 by robert coren to add metering 30 * 31 * modified march 1982 by robert coren to add space management in high 32 * memory 33 * 34 *************************************************************************** 35 36 * history comments: 37 * 1) change(86-04-23,coren), approve(86-04-23,mcr7300), 38 * audit(86-05-19,beattie): 39 * modified november 1984 by robert coren to suppress check for eighth bit 40 * before looking character up in echo break table. 41 * end history comments 42 43 44 pcc on 45 pmc off 46 detail on 47 editp on 48 49 50 symdef util 51 52 system service package 53 symdef meterc counting meter subroutine 54 symdef metert timing meter subroutine 55 symdef gettib get a tib address 56 symdef exist * summary of iom channels that exist 57 symdef hfv hardware fault vector entry base address 58 symdef ignore ignore interrupts routine 59 symdef badint extraneous interrupts routine 60 symdef iomflt iom channel fault routine 61 symdef conabt console operator abort 62 symdef octasc binary-octal ascii routine 63 symdef conchn console channel number 64 symdef outprc subroutine to process "output" subop assm 01 07-08-86 13.161 fnp utility programs for mcs page 5 65 symdef fulbuf subroutine to check if a buffer is full 66 symdef chkiv checks interrupt vectors 67 symdef utsave place where registers get saved 68 symdef puteco subroutine to add char to echo buffer 69 symdef inproc subroutine to copy chars into input buffers 70 symdef move looks up chars in carriage movement table 71 symdef setptw converts absolute address to a virtual address 72 symdef setbpt converts buffer address to virtual 73 symdef cvabs converts a virtual address to absolute 74 symdef mvpgsc move data paging source address 75 symdef mvpgtg move data paging target address 76 symdef mvplmm move paged lower memory maximum address 77 symdef conman set to -1 by init if console_man is in image 78 79 symdef getbuf 80 symdef frebuf 81 symdef frelbf 82 symdef getubf 83 symdef getbfh get a buffer in high memory 84 symdef frebfh free a buffer in high memory 85 symdef getmem 86 symdef fremem 87 symdef fresml 88 symdef getbfm interrupt time metering area 89 symdef fpsel 'sel' instructions patched by init 90 symdef obsel 91 92 symref dicell cs interrupt cells 93 symref dmbx cs mailbox address 94 symref contip interrupt processor for console terminate 95 symref wcon routine to write on console 96 symref ctrl control tables 97 symref istat status entry of interpreter 98 symref itest test-state entry of interpreter 99 symref trace 100 symref ecgifl accept-input queuer 101 symref denq dia enqueuing routine 102 symref derrq dia error message queue 103 symref hcheck hsla_man starts echoing 104 symref simclk simulated clock value 105 symref dspqur dispatcher queuer 106 symref secdsp secondary dispatcher 107 symref mincs 108 symref mincd 109 symref mupdat 110 111 112 pmc save,on 00000 113 util null 00000 114 start util,4 symdef -.chain crsm save,off assm 01 07-08-86 13.161 fnp utility programs for mcs page 6 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 000700 0 date 00005 101006 0 ine '.001.','',1 00006 330000 0 bci 4,.001. 00007 013320 0 00010 202020 0 00011 202020 0 115 116 assm 01 07-08-86 13.165 fnp utility programs for mcs page 7 multiply and divide macros 117 ttls multiply and divide macros 118 119 mpy macro (multiplier loca tion-*) 120 mpf #1 121 lrl 1 122 endm mpy 123 124 125 dvd macro (divisor locatio n-*) 126 qls 1 127 dvf #1 128 endm dvd 129 00012 130 systm assm 01 07-08-86 13.165 fnp utility programs for mcs page 8 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 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 07-08-86 13.165 fnp utility programs for mcs page 9 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 000003 dis0 set 3 dia special - 0 000023 dis1 set 19 dia special - 1 000043 dis2 set 35 dia special - 2 000063 dis3 set 51 dia special - 3 000103 dis4 set 67 dia special - 4 000123 dis5 set 83 dia special - 5 000143 dis6 set 99 dia special - 6 000163 dis7 set 115 dia special - 7 000203 dis8 set 131 dia special - 8 000223 dis9 set 147 dia special - 9 000243 dis10 set 163 dia special - 10 000263 dis11 set 179 dia special - 11 000303 dis12 set 195 dia special - 12 000323 dis13 set 211 dia special - 13 000343 dis14 set 227 dia special - 14 000363 dis15 set 243 dia special - 15 000140 h1ft set 96 hsla 1 fault assm 01 07-08-86 13.165 fnp utility programs for mcs page 10 datanet configuration description 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 000144 h1a6 set 100 hsla 1 subch 6 active terminate vector assm 01 07-08-86 13.165 fnp utility programs for mcs page 11 datanet configuration description 000145 h1a22 set 101 hsla 1 subch 22 active terminate vector 000146 h1c6 set 102 hsla 1 subch 6 config terminate vector 000147 h1c22 set 103 hsla 1 subch 22 config terminate vector 000164 h1a7 set 116 hsla 1 subch 7 active terminate vector 000165 h1a23 set 117 hsla 1 subch 23 active terminate vector 000166 h1c7 set 118 hsla 1 subch 7 config terminate vector 000167 h1c23 set 119 hsla 1 subch 23 config terminate vector 000204 h1a8 set 132 hsla 1 subch 8 active terminate vector 000205 h1a24 set 133 hsla 1 subch 24 active terminate vector 000206 h1c8 set 134 hsla 1 subch 8 config terminate vector 000207 h1c24 set 135 hsla 1 subch 24 config terminate vector 000224 h1a9 set 148 hsla 1 subch 9 active terminate vector 000225 h1a25 set 149 hsla 1 subch 25 active terminate vector 000226 h1c9 set 150 hsla 1 subch 9 config terminate vector 000227 h1c25 set 151 hsla 1 subch 25 config terminate vector 000244 h1a10 set 164 hsla 1 subch 10 active terminate vector 000245 h1a26 set 165 hsla 1 subch 26 active terminate vector 000246 h1c10 set 166 hsla 1 subch 10 config terminate vector 000247 h1c26 set 167 hsla 1 subch 26 config terminate vector 000264 h1a11 set 180 hsla 1 subch 11 active terminate vector 000265 h1a27 set 181 hsla 1 subch 27 active terminate vector 000266 h1c11 set 182 hsla 1 subch 11 config terminate vector 000267 h1c27 set 183 hsla 1 subch 27 config terminate vector 000304 h1a12 set 196 hsla 1 subch 12 active terminate vector 000305 h1a28 set 197 hsla 1 subch 28 active terminate vector assm 01 07-08-86 13.165 fnp utility programs for mcs page 12 datanet configuration description 000306 h1c12 set 198 hsla 1 subch 12 config terminate vector 000307 h1c28 set 199 hsla 1 subch 28 config terminate vector 000324 h1a13 set 212 hsla 1 subch 13 active terminate vector 000325 h1a29 set 213 hsla 1 subch 29 active terminate vector 000326 h1c13 set 214 hsla 1 subch 13 config terminate vector 000327 h1c29 set 215 hsla 1 subch 29 config terminate vector 000344 h1a14 set 228 hsla 1 subch 14 active terminate vector 000345 h1a30 set 229 hsla 1 subch 30 active terminate vector 000346 h1c14 set 230 hsla 1 subch 14 config terminate vector 000347 h1c30 set 231 hsla 1 subch 30 config terminate vector 000364 h1a15 set 244 hsla 1 subch 15 active terminate vector 000365 h1a31 set 245 hsla 1 subch 31 active terminate vector 000366 h1c15 set 246 hsla 1 subch 15 config terminate vector 000367 h1c31 set 247 hsla 1 subch 31 config terminate vector 000220 l1ft set 144 lsla 1 fault 000221 l1a set 145 lsla 1 active terminate vector 000222 l1c set 146 lsla 1 configuration terminate vector 000240 l2ft set 160 lsla 2 fault 000241 l2a set 161 lsla 2 active terminate vector 000242 l2c set 162 lsla 2 configuration terminate vector 000260 l3ft set 176 lsla 3 fault 000261 l3a set 177 lsla 3 active terminate vector 000262 l3c set 178 lsla 3 configuration terminate vector 000300 l4ft set 192 lsla 4 fault 000301 l4a set 193 lsla 4 active terminate vector assm 01 07-08-86 13.165 fnp utility programs for mcs page 13 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 07-08-86 13.165 fnp utility programs for mcs page 14 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 assm 01 07-08-86 13.165 fnp utility programs for mcs page 15 datanet configuration description 000427 h2fts set 279 hsla 2 fault status word 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 07-08-86 13.165 fnp utility programs for mcs page 16 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 131 00012 132 comreg assm 01 07-08-86 13.165 fnp utility programs for mcs page 17 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 07-08-86 13.165 fnp utility programs for mcs page 18 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 000707 .crnxe set 455 next available space in extended memory 000710 .crbpe set 456 buffer paging window table entry 000760 .crcpr set 496 copyright notice 133 00012 134 tib assm 01 07-08-86 13.165 fnp utility programs for mcs page 19 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 assm 01 07-08-86 13.165 fnp utility programs for mcs page 20 terminal information block (tib) 000030 t.ftse equ t.dlst+1 first time slot entry in lsla table 000030 t.sfcm equ t.ftse pointer to sfcm for hsla lines 000031 t.bcnt equ t.ftse+1 counting temporary 000032 t.brkp equ t.bcnt+1 pointer to current break list 000033 t.pos equ t.brkp+1 current carriage position 000034 t.char equ t.pos+1 pending line control char (lsla only) 000034 t.ecch equ t.char address of current echo char (hsla only) 000035 t.cntr equ t.char+1 counter for control tables 000036 t.flg3 equ t.cntr+1 third word of flags 000037 t.dtp equ t.flg3+1 pointer to delay table for this line 000040 t.frmc equ t.dtp+1 framing chars (2 chars) 000041 t.dcpl equ t.frmc+1 number of buffers in dcp chain 000042 t.scll equ t.dcpl+1 screenline length left, for echo neg. 000043 t.sncc equ t.scll+1 echo negotiation sync ctr. 000044 t.entp equ t.sncc+1 echo negotiation break table ptr 000045 t.ifch equ t.entp+1 input flow control characters 000046 t.ofch equ t.ifch+1 output flow control characters 000047 t.omct equ t.ofch+1 output message count (for flow control) 000050 t.itim equ t.omct+1 time of last call to inproc (2 words) 000052 t.metr equ t.itim+2 address of metering area 000053 t.abf0 equ t.metr+1 absolute address of first permanent buffe 000054 t.abf1 equ t.abf0+1 absolute address of first permanent buffe 000055 t.leng equ t.abf1+1 length of a tib ******************************** * t.stat bits ******************************** assm 01 07-08-86 13.165 fnp utility programs for mcs page 21 terminal information block (tib) 000001 tsfcd bool 000001 carrier detect 000002 tsfcts bool 000002 clear to send 000004 tsfdsr bool 000004 data set ready 000010 tsfsrc bool 000010 supervisory receive 000020 tsfst bool 000020 store status 000040 tsfmrk bool 000040 send marker status 000100 tsftrm bool 000100 send terminate status 000200 tsfrcv bool 000200 receive mode 000400 tsfxmt bool 000400 transmit mode 001000 tsfbrk bool 001000 send line break 002000 tsfdtr bool 002000 data terminal ready 004000 tsfsxt bool 004000 supervisory transmit 004000 tsftre bool 004000 tally runout enable (hdlc) 010000 tsfrts bool 010000 request to send 020000 tsfcrq bool 020000 acu call request ******************************** * tib flags -- t.flg ******************************** 000001 tfwrit bool 000001 output chain present 000002 tfbel bool 000002 send bell as next echoed character 000004 tffdpx bool 000004 full duplex mode 000010 tfkybd bool 000010 keyboard addressed 000020 tfprtr bool 000020 printer addressed 000040 tfhang bool 000040 hangup this line 000100 tflisn bool 000100 answer the phone assm 01 07-08-86 13.165 fnp utility programs for mcs page 22 terminal information block (tib) 000200 tfquit bool 000200 send nl on line break 000400 tfctrl bool 000400 do kybd/printer addressing 001000 tflfec bool 001000 do lf echo on cr 002000 tfcrec bool 002000 do cr echo on lf 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 assm 01 07-08-86 13.165 fnp utility programs for mcs page 23 terminal information block (tib) 004000 tfblak bool 004000 asynchronous block acknowledgement 010000 tfcrcv bool 010000 'control' receive mode 020000 tfmrcv bool 020000 'message' receive mode 040000 tffrmi bool 040000 frame mode 100000 tffip bool 100000 frame in progress 200000 tfsftr bool 200000 terminal is shifting device 400000 tfpfnl bool 400000 line is in prefixnl mode ********************************* * third word of tib flags ********************************* 000001 tfbkpt bool 000001 line is stopped at breakpoint 000002 tfitim bool 000002 timeout if input stops 000004 tfkpar bool 000004 keep parity bits 000010 tfecho bool 000010 echoing has priority over output (lsla) 000020 tfbral bool 000020 break on all characters 000040 tfsked bool 000040 input timeout routine scheduled 000100 tf8in bool 000100 don't strip input parity 000200 tf8out bool 000200 don't strip output parity 000400 tfoddp bool 000400 odd parity 001000 tfabf0 bool 001000 t.afb0 available 010000 tfabf1 bool 010000 t.abf1 available 020000 tfmask bool 020000 channel has been masked for excessive int 040000 tfinq bool 040000 input is queued for the channel ********************************* assm 01 07-08-86 13.165 fnp utility programs for mcs page 24 terminal information block (tib) * redefined tib flags in t.flg ********************************* 000020 tfdlup equ tfprtr line is on dialup modem 135 00012 136 meters assm 01 07-08-86 13.165 fnp utility programs for mcs page 25 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 000750 .mblow set 488 buffer allocated in low memory 000030 .mleng equ .mpanf+2-.mdilc length of system-wide meters assm 01 07-08-86 13.165 fnp utility programs for mcs page 26 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 07-08-86 13.165 fnp utility programs for mcs page 27 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 137 00012 138 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) 139 00012 140 sfcm hsla pcc save,off assm 01 07-08-86 13.165 fnp utility programs for mcs page 28 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 **not used** char address of next asynchr 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 (primary) 000005 sfhsiz equ 5 number of entries in hardware status buf assm 01 07-08-86 13.165 fnp utility programs for mcs page 29 sfcm for hsla room for 6 status words 000042 sf.est equ sf.sta+sfhsiz*2+2 000042 sf.shq equ sf.est hardware status q, sicw here (secondary) room for 6 more status word 000056 sf.ast equ sf.shq+sfhsiz*2+2 000056 sf.hln equ sf.ast 000056 sf.waq equ sf.ast 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) 000070 sf.sln equ sf.hln+sfssq 000102 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 001000 sffcai bool 001000 on if altermate status queue is active 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 assm 01 07-08-86 13.165 fnp utility programs for mcs page 30 sfcm for hsla 040000 sffofr bool 040000 old setting of tffrmi (lines up on tffrmi 100000 sffnib bool 100000 need to allocate new input buffer(s) 400000 sffhdl bool 400000 uses hdlc channel board 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 141 00012 142 buffer assm 01 07-08-86 13.165 fnp utility programs for mcs page 31 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 assm 01 07-08-86 13.165 fnp utility programs for mcs page 32 buffer format 143 00012 144 devtab assm 01 07-08-86 13.165 fnp utility programs for mcs page 33 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 145 00012 146 dlytbl assm 01 07-08-86 13.165 fnp utility programs for mcs page 34 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 147 00012 148 csbits assm 01 07-08-86 13.165 fnp utility programs for mcs page 35 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 assm 01 07-08-86 13.165 fnp utility programs for mcs page 36 control and status bits 000002 c.rcrq bool 000002 reset call request 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) assm 01 07-08-86 13.165 fnp utility programs for mcs page 37 control and status bits 040000 s.isd bool 040000 idle state detect (hdlc) 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 149 assm 01 07-08-86 13.165 fnp utility programs for mcs page 38 control and status bits 150 pmc restore assm 01 07-08-86 13.165 fnp utility programs for mcs page 39 miscellaneous symbols 151 ttls miscellaneous symbols 152 153 ************************************************************************ 154 * miscellaneous 155 ************************************************************************ 156 157 002000 158 k equ 1024 000007 159 itprty equ 7 priority for timeout routine 160 000020 161 bcdspc bool 20 162 000000 163 null bool 000 000040 164 space bool 040 000040 165 blank equ space 000011 166 ht bool 011 000011 167 tab equ ht 000012 168 lf bool 012 000015 169 cr bool 015 000177 170 rubout bool 177 171 000077 172 mask6 bool 077 000177 173 mask7 bool 177 174 001000 175 hslafl bool 1000 176 return flags from inproc 000001 177 reteco bool 001 char(s) put in echo buffer 000002 178 retsus bool 002 output-suspend character 000004 179 retres bool 004 output-resume character 180 000002 181 oct002 bool 002 000003 182 oct003 bool 003 000005 183 oct005 bool 005 000007 184 oct007 bool 007 000017 185 oct017 bool 017 000020 186 oct020 bool 020 000177 187 oct177 bool 177 000105 188 sndout bool 105 "send output" mailbox opcode 000115 189 errmsg bool 115 "error message" mailbox opcode 190 000037 191 fbdevc bool 37 device code mask 000015 192 fcdevc equ 13 device code lsb position 000001 193 dclock bool 01 device code for fnp's clocks 000006 194 dprint bool 06 device code for printer 000002 195 ddia bool 02 device code for dia 000005 196 dcon bool 05 device code for console 197 777777 198 brkall equ -1 break on every character 777776 199 brkctl equ -2 break on all control characters 777775 200 brknxt equ -3 break on char after specifed char assm 01 07-08-86 13.165 fnp utility programs for mcs page 40 miscellaneous symbols 201 000001 202 ct.dev equ 1 offset in ctrl of array of device table addrs 203 204 205 206 get and release buffer symbol definitions 207 000000 208 adrs equ 0 address 000001 209 wrdsz equ 1 number of words in buffer 000002 210 fwdpt equ 2 forward pointer 000003 211 bckpt equ 3 backward pointer 212 213 214 trace types 215 000001 216 mt.get equ 1 allocating single buffer 000002 217 mt.fre equ 2 freeing single buffer 000003 218 mt.gtc equ 3 allocating buffer chain 000004 219 mt.frc equ 4 freeing buffer chain 220 221 assm 01 07-08-86 13.165 fnp utility programs for mcs page 41 miscellaneous external values 222 ttls miscellaneous external values 223 224 ************************************************************************ 225 * 226 * miscellaneous values shared by several modules, but kept here 227 * for simplicity. 228 * 229 ************************************************************************ 230 231 232 233 ********************************************** 234 * 235 * "exist" -- a summary of which iom chans 236 * init found to exist. the mapping 237 * used herein is: if bit n is on, the channel 238 * n has a valid channel attached to it. 239 * 240 ********************************************** 241 242 00012 243 exist bss 1 244 245 assm 01 07-08-86 13.165 fnp utility programs for mcs page 42 fault processing routines 246 ttls fault processing routines 247 ********************************************************* 248 * first level fault processing 249 ********************************************************* 250 00013 251 hfv null 00013 0 00000 0 252 f0 ind ** pf 00014 0 10 025 41 253 tsy fp-* 00015 0 00000 0 254 f1 ind ** po 00016 0 10 023 41 255 tsy fp-* 00017 0 00000 0 256 f2 ind ** mp 00020 0 10 021 41 257 tsy fp-* 00021 0 00000 0 258 f3 ind ** op 00022 0 10 017 41 259 tsy fp-* 00023 0 00000 0 260 f4 ind ** ov 00024 0 10 015 41 261 tsy fp-* 00025 0 00000 0 262 f5 ind ** im 00026 0 10 013 41 263 tsy fp-* 00027 0 00000 0 264 f6 ind ** dc 00030 0 10 011 41 265 tsy fp-* 00031 0 00000 0 266 f7 ind ** ii 00032 0 10 007 41 267 tsy fp-* 268 269 the following "fault entry points" are not caused by any 270 of the eight above processor faults. they are entered 271 by software which detects the indicated condition. 272 00033 0 00000 0 273 badint ind ** xi -- extraneous interrupt 00034 0 10 005 41 274 tsy fp-* 00035 0 00000 0 275 iomflt ind ** cf -- iom channel fault 00036 0 10 003 41 276 tsy fp-* 00037 0 00000 0 277 conabt ind ** cn -- console operator abort 00040 0 10 001 41 278 tsy fp-* assm 01 07-08-86 13.165 fnp utility programs for mcs page 43 fault processing routines 279 eject 280 ********************************************************* 281 * second level fault processing 282 ********************************************************* 283 00041 0 00000 0 284 fp ind ** 00042 0 54 251 313 285 sti save+1-* save indicator register 00043 0 44 245 310 286 ldi fp.inh-* set "inh" and parity inh 00044 0 14 250 314 287 staq save+2-* save registers 00045 0 07 771 36 288 lda iomflt+1-* get iom channel fault vector end of binary card 00000009 00046 0 17 270 336 289 sta fvsave-* and save it 00047 0 07 214 263 290 lda l.a008-* (tsy -1,*) 00050 0 17 766 36 291 sta iomflt+1-* so we don't get clobbered during fault handling 00051 0 53 245 316 292 stx1 save+4-* 00052 0 13 245 317 293 stx2 save+5-* 00053 0 50 245 320 294 stx3 save+6-* 00054 012 000 0 295 rier 00055 0 17 244 321 296 sta save+7-* save interrupt level enable register 00056 4 07 206 264 297 lda a.a001-*,* (etmb) 00057 0 17 243 322 298 sta save+8-* save elapsed timer value 00060 0 43 761 41 299 ldx1 fp-* x1 = address+2 of original ic 00061 1 07 776 0 300 lda -2,1 ar = original ic 00062 0 17 230 312 301 sta save-* save original instruction counter value 302 00063 2332 00 0 303 cx1a compute 00064 0 26 201 265 304 sba a.a002-* (f0+2) fault 00065 2337 01 0 305 arl 1 number 00066 0 17 235 323 306 sta fltnum-* and save 307 00067 422 011 0 308 icmpa 9 is it an iom channel fault? 00070 0 64 034 124 309 tnz fp006-* no, continue 00071 0 41 210 301 310 ldx3 a.a012-* addr(tyfts), fault status for chan 0 00072 3 07 000 0 311 lda 0,3 get fault status 00073 0 74 004 77 312 tze fp001-* not chan 0, check hsla channels 00074 422 014 0 313 icmpa 12 is status o14 on chan 0? 00075 0 64 027 124 314 tnz fp006-* no, go ahead and crash 00076 0 71 012 110 315 tra fp004-* yes, queue error message and resume work 316 00077 317 fp001 null check for hsla parity error 00077 0 41 206 305 318 ldx3 a.a016-* addr(h1fts), fault status for hsla 1 00100 319 fp002 null 00100 3 07 000 0 320 lda 0,3 get status 00101 0 64 005 106 321 tnz fp003-* non-zero, take a look at it 00102 373 001 0 322 iacx3 1 zero. was this last hsla fault status? 00103 0 61 203 306 323 cmpx3 a.a017-* addr(h3fts) + 1 00104 0 64 774 100 324 tnz fp002-* no, check next one 00105 0 71 017 124 325 tra fp006-* yes, it's something else, crash 326 00106 327 fp003 null non-zero hsla fault status assm 01 07-08-86 13.165 fnp utility programs for mcs page 44 fault processing routines 00106 0 27 154 262 328 cmpa l.a007-* =o415 (parity) 00107 0 64 015 124 329 tnz fp006-* other bad status, crash 330 00110 331 fp004 null queue error message 00110 0 17 232 342 332 sta rstat-* save fault status 333 00111 673 001 0 334 ila 1 get error message code 00112 0 17 226 340 335 sta rfault-* save 00113 3333 00 0 336 cx3a get address of fault status word 00114 0 26 165 301 337 sba a.a012-* addr(tyfts) -- subtract origin to get chan no. end of binary card 00000010 00115 0 17 224 341 338 sta ric-* 00116 0 56 225 343 339 stz rword-* unused 340 00117 473 115 0 341 ilq errmsg get the opcode for derrq 00120 0 03 163 303 342 ldx2 a.a014-* (=reason) get addr of data 00121 4 10 161 302 343 tsy a.a013-*,* (=derrq) queue the error_message 344 00122 3 56 000 0 345 stz 0,3 zero the fault status so we don't see it again 00123 4 71 161 304 346 tra a.a015-*,* restart the processor 347 00124 0 07 177 323 348 fp006 lda fltnum-* restor the fault number 00125 0336 03 0 349 als 3 00126 0 06 150 276 350 ada a.a009-* (f.name) compute address 00127 4332 00 0 351 cax1 of and 352 get and save fault name 00130 673 774 0 353 ila -4 (four doublewords worth) 00131 0 17 204 335 354 sta fptemp-* 00132 0 03 145 277 355 ldx2 a.a010-* addr(fltnam) 00133 356 fp008 null 00133 1 04 000 0 357 ldaq 0,1 pick up two words 00134 2 14 000 0 358 staq 0,2 store them 00135 173 002 0 359 iacx1 2 bump from and to pointers 00136 273 002 0 360 iacx2 2 00137 0 76 176 335 361 aos fptemp-* done? 00140 0 64 773 133 362 tnz fp008-* no, do it again 363 364 365 366 367 ********************************************************* 368 * mask all hsla's and lsla's 369 ********************************************************* 370 00141 673 006 0 371 ila h1ch starting with first hsla channel 00142 372 fp009 null 00142 4333 00 0 373 cax3 hang on to iom channel no. 00143 0 37 112 255 374 ora l.a002-* (=o730000) "sel" opcode 00144 0 17 001 145 375 sta msksel-* 00145 0 00000 0 376 msksel zero patched with sel instruction assm 01 07-08-86 13.165 fnp utility programs for mcs page 45 fault processing routines 00146 0 60 102 250 377 cioc dispcw-* issue mask pcw 00147 3333 00 0 378 cx3a 00150 773 001 0 379 iaa 1 next iom channel 00151 422 017 0 380 icmpa l6ch+1 finished lsla's? 00152 0 75 770 142 381 tmi fp009-* no, do it again 382 383 384 ********************************************************* 385 * set interrupt level enable register to enable 386 * levels 0, 1, and 2 only. set up ignore iv's 387 * for all devices on levels 0, 1, and 2 except 388 * console. 389 ********************************************************* 390 00153 0 07 101 254 391 lda l.a001-* (=o700000) 00154 052 000 0 392 sier 393 00155 0 41 101 256 394 ldx3 l.a003-* (=o000400) 00156 0 03 116 274 395 ldx2 a.a007-* (sd.iv+48-3) 00157 396 fp010 null 00157 3 04 760 0 397 ldaq -16,3 move iv's for levels 0, 1, and 2 00160 2 17 000 0 398 sta 0,2 to save area (sd.iv) and replace with 00161 2 57 001 0 399 stq 1,2 address of ignore routine 00162 3 07 762 0 400 lda -14,3 00163 2 17 002 0 401 sta 2,2 end of binary card 00000011 00164 0 04 104 270 402 ldaq a.a004-* (ignore) 00165 3 14 760 0 403 staq -16,3 00166 3 17 762 0 404 sta -14,3 00167 273 775 0 405 iacx2 -3 00170 373 760 0 406 iacx3 -16 00171 0 64 766 157 407 tnz fp010-* 408 00172 0 07 142 334 409 lda conchn-* re-initialize console iv's 00173 0 75 005 200 410 tmi fp015-* 00174 0336 04 0 411 als 4 00175 4333 00 0 412 cax3 00176 0 07 077 275 413 lda a.a008-* 00177 3 17 002 0 414 sta 2,3 415 416 417 *************************************************** 418 * use software fault vector to write 419 * farewell message on console 420 *************************************************** 421 00200 422 fp015 null 00200 0 43 123 323 423 ldx1 fltnum-* 00201 0 42 065 266 424 adcx1 a.a003-* (sfv) 00202 5 10 000 0 425 tsy 0,1* assm 01 07-08-86 13.165 fnp utility programs for mcs page 46 fault processing routines 426 427 428 ******************************************************* 429 * send cs reason for crash 430 ******************************************************* 431 432 00203 0 07 120 323 433 lda fltnum-* get fault type code 00204 0 17 134 340 434 sta rfault-* 435 get cs address (word 6 of mailbox header) 00205 4 07 073 300 436 lda a.a011-*,* dmbx 00206 773 006 0 437 iaa 6 00207 0 17 137 346 438 sta dcwlst-* put it in dcw 00210 3336 22 0 439 alp 18 fix parity 00211 0 64 003 214 440 tnz fp16-* odd, nothing to do 00212 0 07 046 260 441 lda l.a005-* parity bits 00213 0 72 134 347 442 orsa dcwlst+1-* 443 00214 444 fp16 null fix parity on second half of dcw 00214 0 07 134 350 445 lda dcwlst+2-* 00215 3336 22 0 446 alp 18 00216 0 64 003 221 447 tnz fp17-* 00217 0 07 041 260 448 lda l.a005-* 00220 0 72 131 351 449 orsa dcwlst+3-* 450 00221 451 fp17 null fix parity in list icw address for pcw 00221 0 07 135 356 452 lda licadr-* 00222 3336 22 0 453 alp 18 00223 0 64 003 226 454 tnz fp18-* 00224 0 47 035 261 455 ldq l.a006-* =o060070 00225 0 71 002 227 456 tra 2 00226 457 fp18 null 00226 473 070 0 458 ilq 56 i.e., o000070 00227 4 14 043 272 459 staq a.a005-*,* dimb (dia pcw mailbox) 460 00230 073 000 0 461 fpsel sel ** 00231 4 60 041 272 462 cioc a.a005-*,* dimb 463 464 465 ********************************************************* 466 * shut down all io devices 467 ********************************************************* 468 00232 4 10 041 273 469 tsy a.a006-*,* (obit) disconnect the cs 470 end of binary card 00000012 00233 0 04 017 252 471 ldaq diapcw-* insert mask pcw into 00234 4 14 036 272 472 staq a.a005-*,* dia pcw mailbox 473 00235 673 020 0 474 ila 16 * pick up number of channels to mask assm 01 07-08-86 13.165 fnp utility programs for mcs page 47 fault processing routines 00236 4333 00 0 475 fp020 cax3 * put current channel num in x3 00237 0 37 016 255 476 ora l.a002-* * (=o730000) get the "sel" op-code 00240 0 17 001 241 477 sta fp030-* * and store for execution 00241 0 00000 0 478 fp030 zero * (altrd) patched to "sel" instruction 00242 0 60 006 250 479 cioc dispcw-* * issue the masking pcw 480 00243 3333 00 0 481 fp.040 cx3a * get current channel into a reg 00244 773 777 0 482 iaa -1 * subtract one from it 00245 0 65 771 236 483 tpl fp020-* * and if still positive, go mask it 484 485 486 00246 0 71 255 523 487 tra stop-* that's all, go to sleep assm 01 07-08-86 13.165 fnp utility programs for mcs page 48 fault processing routines 488 eject 00247 233100 0 00250 489 even 00250 000000 0 490 dispcw oct 0,010000 mask bit on to disable channel 00251 010000 0 00252 000000 0 491 diapcw oct 0,070000 dia pcw with parity bits 00253 070000 0 00254 700000 0 492 l.a001 oct 700000 00255 073000 0 493 l.a002 oct 073000 00256 0 00400 0 494 l.a003 zero 256 00257 0 00020 0 495 l.a004 zero oct020 00260 060000 0 496 l.a005 oct 060000 00261 060070 0 497 l.a006 oct 060070 00262 000415 0 498 l.a007 oct 000415 iom parity fault status 00263 4 10 777 262 499 l.a008 tsy -1,* used to make fault vector into nop 500 00264 0 00451 0 501 a.a001 ind etmb elapsed timer mailbox address 00265 0 00015 1 502 a.a002 zero f0+2 00266 0 00510 1 503 a.a003 zero sfv 00267 233100 0 00270 504 even 00270 0 00544 1 505 a.a004 ind ignore 00271 0 00544 1 506 ind ignore 00272 0 00454 0 507 a.a005 ind dimb dia mailbox address 00273 0 01200 1 508 a.a006 ind obit 00274 0 01175 1 509 a.a007 zero sd.iv+48-3 00275 0 13000 3 510 a.a008 ind contip console terminate interrupt proc. 00276 0 00360 1 511 a.a009 zero f.name 00277 0 00324 1 512 a.a010 zero fltnam 00300 0 03000 3 513 a.a011 ind dmbx 00301 0 00420 0 514 a.a012 ind tyfts end of binary card 00000013 00302 0 05000 3 515 a.a013 ind derrq 00303 0 00340 1 516 a.a014 ind reason 00304 0 00527 1 517 a.a015 ind pwron 00305 0 00426 0 518 a.a016 ind h1fts iom fault status word, hsla 1 00306 0 00431 0 519 a.a017 ind h3fts+1 1 word past iom fault status word for hsla 3 00307 0 00036 1 520 a.a018 ind iomflt+1 to restore branch address 00310 030000 0 521 fp.inh oct 030000 522 00311 233100 0 00312 523 even 00312 524 utsave null symdef symbol 00312 525 save bss 9 (ic, i, a, q, x1, x2, x3, er, et) 00323 526 fltnum bss 1 save current fault number 00324 527 fltnam bss 8 save current fault name 00334 0 00000 0 528 conchn zero tych = console ch no. 00335 529 fptemp bss 1 00336 530 fvsave bss 1 place to save iom channel fault vector 531 assm 01 07-08-86 13.165 fnp utility programs for mcs page 49 fault processing routines 532 00337 233100 0 00340 533 even 00340 534 reason null 72 bits sent to cs to tell why we crashed 00340 535 rfault bss 1 fault type code 00341 536 ric bss 1 instruction counter 00342 537 rstat bss 1 iom fault status if applicable 00343 538 rword bss 1 contents of fault word, or iom channel 539 00344 540 even 00344 1 00346 1 541 lsticw zero dcwlst,w.2 00345 000004 0 542 oct 4 543 544 dcw list for sending reason to cs 00346 0 00000 0 545 dcwlst zero cs address (filled in later) 00347 000075 0 546 oct 75 fnp -> cs opcode (parity added later) 00350 1 00340 1 547 zero reason,w.2 fnp address 00351 000002 0 548 oct 2 tally (parity added later) 00352 0 00000 0 549 zero 00353 060070 0 550 oct 060070 disconnect opcode (with parity) 00354 1 00000 0 551 zero 0,w.2 00355 020000 0 552 oct 020000 (parity) 553 554 00356 555 even 00356 1 00344 1 556 licadr zero lsticw,w.2 557 558 559 00357 233100 0 00360 560 even 00360 160157 0 561 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 562 ascii 8,power on 00371 167145 0 00372 162040 0 end of binary card 00000014 00373 157156 0 00374 040040 0 00375 040040 0 00376 040040 0 00377 040040 0 00400 155145 0 563 ascii 8,memory parity 00401 155157 0 assm 01 07-08-86 13.165 fnp utility programs for mcs page 50 fault processing routines 00402 162171 0 00403 040160 0 00404 141162 0 00405 151164 0 00406 171040 0 00407 040040 0 00410 151154 0 564 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 565 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 566 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 567 ascii 8,divide check 00441 166151 0 end of binary card 00000015 00442 144145 0 00443 040143 0 00444 150145 0 00445 143153 0 00446 040040 0 00447 040040 0 00450 151154 0 568 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 569 ascii 8,extra int 00461 164162 0 00462 141040 0 assm 01 07-08-86 13.165 fnp utility programs for mcs page 51 fault processing routines 00463 151156 0 00464 164040 0 00465 040040 0 00466 040040 0 00467 040040 0 00470 151157 0 570 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 571 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 07-08-86 13.165 fnp utility programs for mcs page 52 fault processing routines 572 eject 573 ********************************************************* 574 * software fault vectors 575 ********************************************************* 576 00510 577 sfv null 00510 0 00544 1 578 ind ignore pf end of binary card 00000016 00511 0 00544 1 579 ind ignore po 00512 0 00646 1 580 ind mempar mp 00513 0 00546 1 581 ind illop op 00514 0 00553 1 582 ind icprt ov 00515 0 00553 1 583 ind icprt im 00516 0 00553 1 584 ind icprt dc 00517 0 00544 1 585 ind ignore ii 00520 0 00544 1 586 ind ignore xi 00521 0 00614 1 587 ind chflt cf 00522 0 00544 1 588 ind ignore cn 589 590 591 assm 01 07-08-86 13.165 fnp utility programs for mcs page 53 fault processing routines 592 eject 593 ************************************************************************ 594 * power off fault processing routine 595 ************************************************************************ 596 00523 597 stop null 00523 598 pwroff null 00523 673 000 0 599 ila 0 disable all interrupts and stop 00524 052 000 0 600 sier 00525 4331 00 0 601 dis 00526 0 71 777 525 602 tra -1 603 604 605 606 ************************************************************************ 607 * power turn on fault processing routine 608 ************************************************************************ 609 00527 610 pwron null 00527 3331 00 0 611 inh 00530 0 07 571 321 612 lda save+7-* restore interrupt level enable register 00531 052 000 0 613 sier 00532 0 07 570 322 614 lda save+8-* restore elapsed timer value 00533 4 17 531 264 615 sta a.a001-*,* (etmb ) 00534 0 07 602 336 616 lda fvsave-* pick up saved iom channel fault vector 00535 4 17 552 307 617 sta a.a018-*,* (iomflt+1) restore it 00536 0 04 556 314 618 ldaq save+2-* restore arithmetic registers 00537 0 43 557 316 619 ldx1 save+4-* 00540 0 03 557 317 620 ldx2 save+5-* 00541 0 41 557 320 621 ldx3 save+6-* 00542 0 44 551 313 622 ldi save+1-* 00543 4 71 547 312 623 tra save-*,* return to point of interruption 624 625 626 627 ************************************************************************ 628 * ignore interrupts routine 629 ************************************************************************ 630 00544 0 00000 0 631 ignore ind ** 00545 4 71 777 544 632 tra -1,* 633 assm 01 07-08-86 13.165 fnp utility programs for mcs page 54 fault processing routines 634 eject 635 ************************************************************************ 636 * routine to print faulting ic (and possibly instruction) 637 * on console 638 ************************************************************************ 639 00546 0 00000 0 640 illop ind ** this entry to print instruction as well 00547 0 76 335 1104 641 aos wflag-* set flag 00550 0 07 776 546 642 lda illop-* copy return point 00551 0 17 002 553 643 sta icprt-* 00552 0 71 003 555 644 tra icp010-* 645 646 this entry to print ic only 647 00553 0 00000 0 648 icprt ind ** 00554 0 56 330 1104 649 stz wflag-* 00555 650 icp010 null both come to here 00555 0 03 170 745 651 ldx2 a.i007-* addr(msgnam) 00556 0 41 165 743 652 ldx3 a.i005-* addr(fltnam) get address of fault name 00557 673 774 0 653 ila -4 4 doublewords worth end of binary card 00000017 00560 0 17 325 1105 654 sta itemp-* to move it into message 00561 655 icp020 null 00561 3 04 000 0 656 ldaq 0,3 00562 2 14 000 0 657 staq 0,2 00563 273 002 0 658 iacx2 2 00564 373 002 0 659 iacx3 2 00565 0 76 320 1105 660 aos itemp-* 00566 0 64 773 561 661 tnz icp020-* if not done, do next two words 662 00567 4 47 155 744 663 ldq a.i006-*,* (save) get ic value 00570 573 777 0 664 iaq -1 really points to next instruction 00571 0 57 314 1105 665 stq itemp-* save it 00572 4 57 160 752 666 stq a.i012-*,* (ric) save for sending to cs 00573 0 41 144 737 667 ldx3 a.i001-* addr(icasci) 668 now convert it to ascii and put it in 00574 4 10 145 741 669 tsy a.i003-*,* octasc 670 00575 0 20 307 1104 671 szn wflag-* write out word too? 00576 0 74 010 606 672 tze icp030-* no, go write on console 673 else convert instruction word 674 to octal ascii and put in message 00577 0 41 306 1105 675 ldx3 itemp-* 00600 3 47 000 0 676 ldq 0,3 got word 00601 4 57 152 753 677 stq a.i013-*,* (rword) save for sending to cs 00602 0 41 136 740 678 ldx3 a.i002-* addr(wdasci) 00603 4 10 136 741 679 tsy a.i003-*,* octasc 680 00604 673 020 0 681 ila 16 increase tally in icw 00605 0 16 162 767 682 asa flticw+1-* assm 01 07-08-86 13.165 fnp utility programs for mcs page 55 fault processing routines 683 00606 684 icp030 null now write on console 00606 0 20 157 765 685 szn conman-* is console_man in image? 00607 4 74 744 553 686 tze icprt-*,* no. skip console stuff and return 00610 4 10 132 742 687 tsy a.i004-*,* (wcon) yes. go do it 00611 0 00766 1 688 zero flticw argument is address of data icw 00612 2331 00 0 689 nop if no console, don't worry 00613 4 71 740 553 690 tra icprt-*,* return to caller 691 692 693 ************************************************************************ 694 * routine to write out message for iom channel fault 695 ************************************************************************ 696 00614 697 chflt subr chf 698 699 write the channel number and 700 associated fault status 701 702 we start by finding a non-zero fault status 00617 473 000 0 703 ilq 0 initialize channel number 00620 0 41 126 746 704 ldx3 a.i008-* addr(iom fault status) 00621 705 chf010 null 00621 3 07 000 0 706 lda 0,3 00622 0 64 004 626 707 tnz chf020-* non-zero, we got it 00623 573 001 0 708 iaq 1 else bump channel number 00624 373 001 0 709 iacx3 1 and fault status pointer 00625 0 71 774 621 710 tra chf010-* and try again 711 00626 712 chf020 null channel no. is in q 00626 0 17 257 1105 713 sta itemp-* save fault status end of binary card 00000018 00627 4 14 122 751 714 staq a.i011-*,* (rstat) save both for sending to cs 00630 0 41 117 747 715 ldx3 a.i009-* addr(chnasc) 00631 4 10 110 741 716 tsy a.i003-*,* (octasc) convert channel no. 717 00632 0 07 251 1103 718 lda chnasc+2-* pick up low-order 2 digits 00633 0 17 206 1041 719 sta chfnum-* put them in console message 720 00634 0 47 251 1105 721 ldq itemp-* get fault status and convert it to ascii 00635 0 41 113 750 722 ldx3 a.i010-* addr(chfst) 00636 4 10 103 741 723 tsy a.i003-*,* octasc 724 now just write the message out 00637 0 20 126 765 725 szn conman-* is console_man in image? 00640 0 74 004 644 726 tze chfret-* no. skip console stuff 00641 4 10 101 742 727 tsy a.i004-*,* (wcon) yes. go do it 00642 0 01024 1 728 zero chficw 00643 2331 00 0 729 nop 730 00644 731 chfret null assm 01 07-08-86 13.165 fnp utility programs for mcs page 56 fault processing routines 00644 732 return chflt 733 734 735 ************************************************************************ 736 * routine to write out memory parity fault message 737 * we will go through all of memory until we find something 738 * that results in parity indicator coming on 739 ************************************************************************ 740 00646 741 mempar subr mmp 00651 0 56 236 1107 742 stz pagbas-* initialize this 00652 4 07 103 755 743 lda a.i015-*,* (.crmem) 00653 0 27 106 761 744 cmpa l.i001-* (=o100000) more than 32k? 00654 0 65 003 657 745 tpl mmp010-* no 00655 0 17 231 1106 746 sta memlst-* then that's the end 00656 0 71 005 663 747 tra mmp020-* 00657 0 07 103 762 748 mmp010 lda l.i002-* (=o077777) more than 32k, first pass will stop th 00660 0 17 226 1106 749 sta memlst-* 00661 4 41 075 756 750 ldx3 a.i016-*,* (.crpte) 00662 3 56 000 0 751 stz 0,3 disable paging for now 00663 0 56 225 1110 752 mmp020 stz tstadr-* start at 0 00664 4 44 070 754 753 ldi a.i014-*,* fp.inh (make sure we start with clean indicators) 00665 4 07 223 1110 754 mmp030 lda tstadr-*,* pick up contents of next word 00666 0 54 223 1111 755 sti tstind-* see what happened to the indicators 00667 0 07 074 763 756 lda l.i003-* =o002000, parity error indicator bit 00670 0 31 221 1111 757 cana tstind-* is it on? 00671 0 64 023 714 758 tnz mmp050-* yes, we found it 00672 0 07 216 1110 759 lda tstadr-* no, we'll advance the address 00673 0 27 213 1106 760 cmpa memlst-* finished this pass? 00674 0 74 003 677 761 tze mmp040-* yes 00675 0 76 213 1110 762 aos tstadr-* no, increment test address end of binary card 00000019 00676 0 71 767 665 763 tra mmp030-* and go around again 764 00677 0 47 210 1107 765 mmp040 ldq pagbas-* see if current address is real or virtual 00700 0 74 003 703 766 tze mmp045-* it's real 00701 573 377 0 767 iaq 255 it's virtual, test for real limit 00702 7333 00 0 768 cqa 00703 4 27 052 755 769 mmp045 cmpa a.i015-*,* (.crmem) have we reached the end? 00704 0 65 017 723 770 tpl mmp060-* yes, we didn't find it 00705 773 001 0 771 iaa 1 else do next page 00706 0 17 201 1107 772 sta pagbas-* this is the base of it 00707 4 10 050 757 773 tsy a.i017-*,* (setptw) 774 note that this is safe because we've tested here 00710 0 17 200 1110 775 sta tstadr-* this is presumably 077400 (virtual page base) 00711 773 377 0 776 iaa 255 this is the last virtual address in it 00712 0 17 174 1106 777 sta memlst-* 00713 0 71 752 665 778 tra mmp030-* start again 779 00714 780 mmp050 null here when we find a parity indicator assm 01 07-08-86 13.165 fnp utility programs for mcs page 57 fault processing routines 00714 0 27 050 764 781 cmpa l.i004-* (o077400) in window? 00715 0 75 007 724 782 tmi mmp070-* no, it's exact 00716 0 20 171 1107 783 szn pagbas-* but we were really there? 00717 0 74 005 724 784 tze mmp070-* yes 00720 0 26 044 764 785 sba l.i004-* else reduce to offset within page 00721 0 06 166 1107 786 ada pagbas-* add page address 00722 0 71 002 724 787 tra mmp070-* this is it 00723 673 777 0 788 mmp060 ila -1 we never found it, use dummy value 00724 4 17 026 752 789 mmp070 sta a.i012-*,* (ric) save it to send to cs 00725 0 20 040 765 790 szn conman-* is there a console? 00726 0 74 007 735 791 tze mmpret-* no, we're done 00727 6333 00 0 792 caq get value in q 00730 0 41 030 760 793 ldx3 a.i018-* addr (mmpadr) 00731 4 10 010 741 794 tsy a.i003-*,* octasc 00732 4 10 010 742 795 tsy a.i004-*,* wcon 00733 0 01056 1 796 zero mmpicw 00734 2331 00 0 797 nop 00735 798 mmpret return mempar 799 800 801 00737 2 01011 1 802 a.i001 zero icasci,b.0 00740 2 01021 1 803 a.i002 zero wdasci,b.0 00741 0 01303 1 804 a.i003 ind octasc binary to octal ascii conversion routine 00742 0 04000 3 805 a.i004 ind wcon console-writing routine 00743 0 00324 1 806 a.i005 ind fltnam 00744 0 00312 1 807 a.i006 ind save contains ic end of binary card 00000020 00745 0 00772 1 808 a.i007 zero msgnam 00746 0 00420 0 809 a.i008 zero fltst iom fault status 00747 2 01101 1 810 a.i009 zero chnasc,b.0 00750 2 01053 1 811 a.i010 zero chfst,b.0 00751 0 00342 1 812 a.i011 ind rstat used in sending crash info to cs 00752 0 00341 1 813 a.i012 ind ric likewise 00753 0 00343 1 814 a.i013 ind rword likewise 00754 0 00310 1 815 a.i014 ind fp.inh 00755 0 00651 0 816 a.i015 ind .crmem 00756 0 00702 0 817 a.i016 ind .crpte 00757 0 04222 1 818 a.i017 ind setptw 00760 2 01076 1 819 a.i018 ind mmpadr,b.0 820 00761 100000 0 821 l.i001 oct 100000 00762 077777 0 822 l.i002 oct 077777 00763 002000 0 823 l.i003 oct 002000 parity error indicator 00764 077400 0 824 l.i004 oct 077400 base of paging 'window' 825 00765 000000 0 826 conman oct 0 set to -1 by init if console_man is in image 827 00766 828 even 00766 2 00771 1 829 flticw icw fltmsg,b.0,38 assm 01 07-08-86 13.165 fnp utility programs for mcs page 58 fault processing routines 00767 000046 0 00770 0 00000 0 830 zero to force fltmsg odd to force msgnam even 831 832 detail save,off 00771 015012 0 833 fltmsg saci cr,lnf 00772 834 msgnam bss 8 fault name 01002 146141 0 835 ascii 7,fault -- ic = 01011 836 icasci bss 3 01014 054040 0 837 ascii 4,, word = 01020 040040 0 838 saci sp,sp 01021 839 wdasci bss 3 840 841 01024 842 even end of binary card 00000021 01024 2 01026 1 843 chficw icw chfmsg,b.0,48 844 01026 015012 0 845 chfmsg saci cr,lnf 01027 151157 0 846 ascii 10,iom fault: ch annel 01041 847 chfnum bss 1 01042 054040 0 848 ascii 9,, fault status - 01053 849 chfst bss 3 850 01056 851 even 01056 2 01060 1 852 mmpicw icw mmpmsg,b.0,34 853 01060 015012 0 854 mmpmsg saci cr,lnf 01061 155145 0 855 ascii 13,memory parity referencing end of binary card 00000022 01076 856 mmpadr bss 3 857 detail restore 858 859 01101 860 chnasc bss 3 01104 861 wflag bss 1 01105 862 itemp bss 1 01106 863 memlst bss 1 last address to test in each pass 01107 864 pagbas bss 1 base of current page 01110 865 tstadr bss 1 adress on which to test parity 01111 866 tstind bss 1 indicators resulting from test 867 868 01112 071006 0 01120 869 eight 01120 870 sd.iv bss 3*16 (level 0, 1, and 2 iv's at time of fault) assm 01 07-08-86 13.165 fnp utility programs for mcs page 59 obit -- notify cs of fnp's death 871 ttls obit -- notify cs of fnp's death 872 ************************************************************************ 873 * 874 * this subroutine will send an "emergency interrupt" to the cs, 875 * thereby indicating that the fnp is about to crash 876 * 877 ************************************************************************ 878 01200 0 00000 0 879 obit ind ** 01201 0 07 022 1223 880 lda obit0-* as a last gesture of politeness, allow 01202 773 777 0 881 iaa -1 the dia to xmt its last message 01203 0 64 777 1202 882 tnz -1 883 01204 4 07 020 1224 884 lda obit1-*,* get emergency interrupt cell 01205 022 007 0 885 iana 7 isolate it 01206 6333 00 0 886 caq put in q 01207 4336 06 0 887 qls 6 position 01210 0 46 016 1226 888 adq obit3-* get interrupt cs command 01211 7333 00 0 889 cqa save this in a 01212 7336 22 0 890 qlp 18 get parity on this word 01213 0 64 002 1215 891 tnz 2 already odd 01214 0 37 013 1227 892 ora obit4-* make odd parity lower 01215 6333 00 0 893 caq put correctly paritized word back in q 01216 0 07 012 1230 894 lda obit5-* load word with 36 bit xfer mode bit on 01217 4 14 006 1225 895 staq obit2-*,* 896 01220 073 000 0 897 obsel sel ** so long, its been good to know you 01221 4 60 004 1225 898 cioc obit2-*,* 01222 4 71 756 1200 899 tra obit-*,* 900 901 902 01223 006654 0 903 obit0 dec 3500 01224 0 14000 3 904 obit1 ind dicell 01225 0 00454 0 905 obit2 ind dimb 01226 000073 0 906 obit3 oct 000073 upper half odd parity and int cs cmd 01227 020000 0 907 obit4 oct 020000 lower half parity bit 01230 1 00000 0 908 obit5 zero 0,w.2 word with 36-bit xfer mode assm 01 07-08-86 13.165 fnp utility programs for mcs page 60 bdecac -- binary-decimal ascii routine 909 ttls bdecac -- binary-decimal ascii routine 910 ************************************************************************ 911 * this routine converts a binary number into four ascii characters which 912 * represent the decimal equivalent of the number. 913 * 914 * the input binary number must be non-negative and <= 9999 (23417, oct). 915 * 916 * calling sequence -- 917 * 918 * c(x3) = ch/wd address of where 1st digit is to be stored. 919 * c(ar) = the binary number to be converted. 920 * tsy bdecac-* 921 * 922 * on return, x3 will point to the position following the 4th digit. 923 ************************************************************************ 924 01231 0 00000 0 925 bdecac ind ** 01232 0 54 023 1255 926 sti bdasvi-* save indicators 01233 3331 00 0 927 inh inhibit interrupts 01234 0 13 022 1256 928 stx2 bdasx2-* save x2 01235 473 774 0 929 ilq -4 set loop counter 01236 0 57 021 1257 930 stq bdactr-* for 4 iterations end of binary card 00000023 01237 0 03 021 1260 931 ldx2 bdacon-* set x2 for 1st conversion constant 932 01240 933 bda1 null 01240 473 000 0 934 ilq 0 clear q-register 01241 0335 16 0 935 lrs 18-1-3 build dividend multiplied by 8 01242 2 21 000 0 936 dvf 0,2 produce a bcd digit in a-register 01243 122 060 0 937 iora 48 (060) convert it to ascii code 01244 3 17 200 0 938 sta 0,3,b.0 store in user's area 01245 7333 00 0 939 cqa 940 01246 373 300 0 941 iacx3 0,b.1 bump pointer to next digit store position 01247 273 001 0 942 iacx2 1 bump pointer to next conversion constant 01250 0 76 007 1257 943 aos bdactr-* ? done this 4 times, yet ? 01251 0 64 767 1240 944 tnz bda1-* nope 945 01252 0 03 004 1256 946 ldx2 bdasx2-* restore x2 01253 0 44 002 1255 947 ldi bdasvi-* restore indicators 01254 4 71 755 1231 948 tra bdecac-*,* restore control to user 949 01255 950 bdasvi bss 1 safe store indicators 01256 951 bdasx2 bss 1 safe store x2 01257 952 bdactr bss 1 loop counter 01260 0 01261 1 953 bdacon zero *+1 conversion constant initial pointer 01261 017500 0 954 dec 8000,6400,5120,4096 01262 014400 0 01263 012000 0 01264 010000 0 assm 01 07-08-86 13.165 fnp utility programs for mcs page 61 octal-to-bcd/ascii subroutines 955 ttls octal-to-bcd/ascii subroutines 956 ************************************************************************ 957 * octbcd/octasc will convert the six octits in the quotient register 958 * into six 6-bit/9-bit bcd/ascii characters and store them in sequential 959 * positions beginning at the address in x3. 960 * 961 * calling sequence -- 962 * 963 * ldq 964 * ldx3 965 * tsy 966 ************************************************************************ 967 01265 0 00000 0 968 octbcd ind ** 01266 0 13 030 1316 969 stx2 octsv-* save x2 01267 0 03 030 1317 970 ldx2 octsv+1-* set x2 = 6 01270 673 000 0 971 ila 0 01271 0334 03 0 972 lls 3 01272 3 17 400 0 973 sta 0,3,c.0 store character 01273 373 500 0 974 iacx3 0,c.1 bump character pointer 01274 273 777 0 975 iacx2 -1 ? finished ? 01275 0 64 773 1270 976 tnz -5 no 01276 673 020 0 977 ila bcdspc yes, store a space 01277 3 17 400 0 978 sta 0,3,c.0 01300 373 500 0 979 iacx3 0,c.1 01301 0 03 015 1316 980 ldx2 octsv-* restore x2 01302 4 71 763 1265 981 tra octbcd-*,* return 982 01303 0 00000 0 983 octasc ind ** 01304 0 13 012 1316 984 stx2 octsv-* save x2 01305 0 03 012 1317 985 ldx2 octsv+1-* set x2 = 6 01306 673 006 0 986 ila 6 end of binary card 00000024 01307 0334 03 0 987 lls 3 01310 3 17 200 0 988 sta 0,3,b.0 store character 01311 373 300 0 989 iacx3 0,b.1 bump character pointer 01312 273 777 0 990 iacx2 -1 ? finished ? 01313 0 64 773 1306 991 tnz -5 no 01314 0 03 002 1316 992 ldx2 octsv-* restore x2 01315 4 71 766 1303 993 tra octasc-*,* return 994 995 01316 996 octsv bss 1 01317 000006 0 997 dec 6 assm 01 07-08-86 13.165 fnp utility programs for mcs page 62 get tib address routine 998 ttls get tib address routine 999 ************************************************************************ 1000 * 1001 * gettib 1002 * 1003 * enter a - multics line number 1004 * 1005 * this routine will take a multics line number and 1006 * convert it to the associated real tib address which will 1007 * be returned in the a. if no tib exists, the 1008 * a will contain 0. in either case, the address of the 1009 * lsla or hsla table entry for the line will be returned 1010 * in the q 1011 * 1012 * a multics line number is a 10 bit value which is right 1013 * justified in the a. the rightmost 6 bits contain the 1014 * slot number/line number (starting with 0), the next 3 bits 1015 * hold the lsla or hsla number (starting with 0) and the 1016 * next bit is 1 if hsla or 0 if lsla 1017 * 1018 * line 1777 is a pseudo-channel used fro communication with 1019 * the colts executive; its tib address is held in .crtdt, 1020 * and it does not have the other associated data bases 1021 * 1022 ************************************************************************ 1023 01320 1024 gettib subr gtb,(inh,x1) 01332 0 27 031 1363 1025 cmpa l.h001-* (=o1777) is this colts channel? 01333 0 74 023 1356 1026 tze gtb020-* yes, special case 01334 2335 06 0 1027 lrl 6 put line number in q 01335 322 010 0 1028 iera 8 flip hsla/lsla flag (1 = lsla now) 01336 222 010 0 1029 icana 8 test for hsla or lsla 01337 0 64 002 1341 1030 tnz 2 it is an lsla 01340 773 005 0 1031 iaa 5 hsla, add to hsla number 01341 773 001 0 1032 iaa 1 add 1 to lsla or hsla no. 01342 0336 01 0 1033 als 1 multiply hsla/lsla number by 2 (iom table entry s 01343 4 06 016 1361 1034 ada a.h001-*,* add iom table base 01344 4332 00 0 1035 cax1 and put in x1 01345 673 000 0 1036 ila 0 clear a 01346 0334 06 0 1037 lls 6 refetch line number 01347 0336 01 0 1038 als 1 times 2 01350 1 06 001 0 1039 ada 1,1 add table base address from iom table entry 01351 4332 00 0 1040 cax1 put addr of word 0 of table entry in x1 01352 1 47 001 0 1041 ldq 1,1 get tib address from table 01353 2334 22 0 1042 llr 18 put tib addr in a, slot addr in q 01354 1043 gtb010 return gettib return to caller end of binary card 00000025 1044 01356 4 07 004 1362 1045 gtb020 lda a.h002-*,* .crtdt 01357 473 000 0 1046 ilq 0 no table entry for colts channel assm 01 07-08-86 13.165 fnp utility programs for mcs page 63 get tib address routine 01360 0 71 774 1354 1047 tra gtb010-* return 1048 01361 0 00653 0 1049 a.h001 ind .criom 01362 0 00705 0 1050 a.h002 ind .crtdt 1051 01363 001777 0 1052 l.h001 oct 1777 assm 01 07-08-86 13.165 fnp utility programs for mcs page 64 chkiv -- procedure to check the interrupt vectors 1053 ttls chkiv -- procedure to check the interrupt vectors 1054 1055 ************************************************************************ 1056 * 1057 * "chkiv" -- procedure to check that the interrupt vectors 1058 * are not destroyed. this procedure does not verify that all iv's are 1059 * correct; it only checks the "reasonableness" of them. 1060 * 1061 * 1062 ************************************************************************ 1063 1064 1065 01364 1066 chkiv subr chk,(inh,a,q,x1) 1067 01404 0 04 022 1426 1068 ldaq chkcnt-* * let us add one to the call counter 01405 0 15 017 1424 1069 adaq chkone-* * add one .. 01406 0 14 020 1426 1070 staq chkcnt-* * and put back 1071 01407 673 000 0 1072 ila 0 01410 4332 00 0 1073 cax1 1074 01411 1 07 000 0 1075 chklp lda 0,1 01412 0 27 011 1423 1076 cmpa chkhgh-* 01413 0 75 006 1421 1077 tmi chkstp-* 01414 173 001 0 1078 iacx1 1 01415 0 63 005 1422 1079 cmpx1 chkmax-* 01416 0 64 773 1411 1080 tnz chklp-* 1081 01417 1082 return chkiv 1083 01421 1084 chkstp die 6 1085 1086 01422 000040 0 1087 chkmax oct 40 * number of locations to check 01423 001000 0 1088 chkhgh oct 1000 * highest number which is not ok 1089 01424 1090 even 01424 000000 0 1091 chkone dec 0,1 * double precision one 01425 000001 0 end of binary card 00000026 01426 000000 0 1092 chkcnt dec 0,0 01427 000000 0 1093 assm 01 07-08-86 13.165 fnp utility programs for mcs page 65 inproc subroutine -- copy chars into input buffers 1094 ttls inproc subroutine -- copy chars into input buffers 1095 1096 called by hsla_man and lsla_man as input characters 1097 arrive in order to put them in input buffers in t.icp 1098 chain; updates t.pos and puts characters in echo buffer 1099 if appropriate, and may present status to the control tables. 1100 implements echoplex, tabecho, echo negotiation, etc. 1101 1102 at entry: 1103 a contains 0 for 7-bit, nonzero for 6-bit chars 1104 q contains number of characters 1105 x3 points to first character 1106 1107 returns in a: 1108 bit 17 on if anything put in echo buffer 1109 bit 16 on if output-suspend char received 1110 bit 15 on if output-resume char received 1111 01430 1112 inproc subr inp,(x1,x2,x3) 1113 01444 773 000 0 1114 iaa 0 6- or 7-bit characters? 01445 0 74 003 1450 1115 tze inp005-* 7 01446 673 077 0 1116 ila mask6 6 01447 0 71 002 1451 1117 tra 2 01450 673 177 0 1118 inp005 ila mask7 01451 0 17 171 1642 1119 sta pmask-* hang on to parity mask 1120 01452 7333 00 0 1121 cqa get character count 01453 4 74 230 1703 1122 tze a.b016-*,* (inpbak) none, nothing to do 01454 322 777 0 1123 iera -1 negate it 01455 773 001 0 1124 iaa 1 01456 0 17 166 1644 1125 sta inrem-* save negative version 01457 0 56 166 1645 1126 stz inecho-* 01460 0 56 166 1646 1127 stz insusp-* 01461 0 56 166 1647 1128 stz inres-* 01462 0 56 174 1656 1129 stz inq-* 1130 01463 0 56 171 1654 1131 stz inpte-* initially 01464 3333 00 0 1132 cx3a find out if input pointer is in buffer window 01465 0 34 253 1740 1133 ana l.b025-* =o077777 (get word part alone) 01466 0 27 257 1745 1134 cmpa l.b030-* =window, general addressing window 01467 0 65 006 1475 1135 tpl inp006-* it's there, therefore not in buffer window 01470 0 27 256 1746 1136 cmpa l.b031-* =bwndow, buffer window 01471 0 75 004 1475 1137 tmi inp006-* below it, in regular low memory 01472 4 03 216 1710 1138 ldx2 a.b022-*,* .crbte 01473 2 07 000 0 1139 lda 0,2 save contents of buffer pte 01474 0 17 160 1654 1140 sta inpte-* 1141 01475 1 07 002 0 1142 inp006 lda t.flg2,1 in iflow now? end of binary card 00000027 assm 01 07-08-86 13.165 fnp utility programs for mcs page 66 inproc subroutine -- copy chars into input buffers 01476 0 31 241 1737 1143 cana l.b022-* (=tfifc) 01477 0 74 024 1523 1144 tze inp010-* 01500 1 07 036 0 1145 lda t.flg3,1 watching the time? 01501 0 31 235 1736 1146 cana l.b021-* =tfitim 01502 0 74 021 1523 1147 tze inp010-* 01503 0 31 237 1742 1148 cana l.b027-* (=tfsked) inptim already scheduled? 01504 0 64 011 1515 1149 tnz inp007-* yes, don't do it again 01505 1 07 004 0 1150 lda t.line,1 we need absolute tib address 01506 4 10 177 1705 1151 tsy a.b019-*,* gettib 01507 4332 00 0 1152 cax1 into x1 for dspqur 01510 0 04 164 1674 1153 ldaq a.b010-* time, priority, address for inptim 01511 4 10 165 1676 1154 tsy a.b011-*,* (dspqur) make sure it runs 01512 0 43 727 1441 1155 ldx1 inpsx1-* get x1 back 01513 0 07 227 1742 1156 lda l.b027-* =tfsked 01514 1 72 036 0 1157 orsa t.flg3,1 it's scheduled now 1158 01515 0 56 143 1660 1159 inp007 stz intime-* initialize for recording current time 01516 4 07 161 1677 1160 lda a.b012-*,* (itmb) get interval timer 01517 0 17 142 1661 1161 sta intime+1-* 01520 4 04 160 1700 1162 ldaq a.b013-*,* (simclk) and time it's due to go off 01521 0 24 137 1660 1163 sbaq intime-* now we have current time 01522 1 14 050 0 1164 staq t.itim,1 hang on to it 1165 01523 0 50 120 1643 1166 inp010 stx3 inchrp-* save char pointer 01524 3 47 200 0 1167 ldq 0,3,b.0 get next char 01525 0 57 123 1650 1168 stq inchar-* 01526 1 07 036 0 1169 lda t.flg3,1 if we're supposed to, 01527 0 31 214 1743 1170 cana l.b028-* (tf8in) 01530 0 64 003 1533 1171 tnz inp012-* 01531 0 07 111 1642 1172 lda pmask-* fix parity on it 01532 0 32 116 1650 1173 ansa inchar-* 01533 0 47 115 1650 1174 inp012 ldq inchar-* save as original value 01534 0 57 115 1651 1175 stq inorig-* in case lfecho changes it 01535 1 07 002 0 1176 lda t.flg2,1 01536 0 31 167 1725 1177 cana l.b012-* (=tffrmi) in frame mode? 01537 0 74 010 1547 1178 tze inp015-* no, don't bother checking 01540 1 07 040 0 1179 lda t.frmc,1 01541 2337 11 0 1180 arl 9 get frame-begin char alone 01542 0 74 003 1545 1181 tze 3 zero (null) means any 01543 0 27 105 1650 1182 cmpa inchar-* is this it? 01544 0 64 003 1547 1183 tnz inp015-* no, check for break end of binary card 00000028 01545 0 07 156 1723 1184 lda l.b010-* =tffip 01546 1 72 002 0 1185 orsa t.flg2,1 frame in progress now 1186 01547 1187 inp015 null 01547 4 10 133 1702 1188 tsy a.b015-*,* (chkofc) see if it's output flow control char 01550 4 71 134 1704 1189 tra a.b017-*,* (inp300) chkofc fully processed the character 01551 0 47 077 1650 1190 ldq inchar-* get character back without parity 1191 now check carriage movement table assm 01 07-08-86 13.165 fnp utility programs for mcs page 67 inproc subroutine -- copy chars into input buffers 01552 1 07 033 0 1192 lda t.pos,1 save old column indicator 01553 0 17 077 1652 1193 sta oldpos-* 01554 4 10 111 1665 1194 tsy a.b004-*,* =addr(move) 01555 0 71 005 1562 1195 tra inp020-* for line feed 01556 0 71 014 1572 1196 tra inp030-* for carriage return 01557 0 71 027 1606 1197 tra inp050-* for tab 01560 0 71 034 1614 1198 tra inp060-* for backspace (do nothing) 01561 0 71 034 1615 1199 tra inp070-* no hit 1200 1201 01562 1202 inp020 null line feed 01562 0 07 131 1713 1203 lda l.b002-* =tfcrec 01563 1 31 001 0 1204 cana t.flg,1 crecho mode? 01564 0 74 050 1634 1205 tze inp100-* 01565 0 20 065 1652 1206 szn oldpos-* were we already in column 0? 01566 0 74 046 1634 1207 tze inp100-* if so, don't echo carriage return 01567 473 015 0 1208 ilq cr put carriage return in echo buffer 01570 4 10 074 1664 1209 tsy a.b003-*,* =addr(puteco) 01571 0 71 043 1634 1210 tra inp100-* 1211 01572 1212 inp030 null carriage return 01572 0 07 122 1714 1213 lda l.b003-* =tflfec 01573 1 31 001 0 1214 cana t.flg,1 lfecho mode? 01574 0 74 040 1634 1215 tze inp100-* 01575 0 07 120 1715 1216 lda l.b004-* =tfecpx 01576 1 31 001 0 1217 cana t.flg,1 echoplex mode? 01577 0 74 003 1602 1218 tze inp040-* no, go ahead 01600 473 015 0 1219 ilq cr else have to echo cr explicitly 01601 4 10 063 1664 1220 tsy a.b003-*,* puteco 01602 1221 inp040 null 01602 473 012 0 1222 ilq lf put line feed in echo buffer 1223 and input buffer 01603 0 57 045 1650 1224 stq inchar-* 01604 4 10 060 1664 1225 tsy a.b003-*,* =addr(puteco) 01605 0 71 143 1750 1226 tra inp110-* 1227 01606 1228 inp050 null tab 01606 0332 00 0 1229 cax2 save space count 01607 0 07 107 1716 1230 lda l.b005-* =tftbec 01610 1 31 001 0 1231 cana t.flg,1 tbecho mode? 01611 0 74 023 1634 1232 tze inp100-* 01612 4 10 052 1664 1233 tsy a.b003-*,* puteco 01613 0 71 135 1750 1234 tra inp110-* don't echoplex it also 1235 01614 1236 inp060 null end of binary card 00000029 01614 0 71 020 1634 1237 tra inp100-* 1238 01615 1239 inp070 null 01615 4 07 052 1667 1240 lda a.b006-*,* mshift (set by move subroutine) assm 01 07-08-86 13.165 fnp utility programs for mcs page 68 inproc subroutine -- copy chars into input buffers 01616 0 74 011 1627 1241 tze inp090-* not a case shift character 01617 422 001 0 1242 icmpa 1 yes, is it up-shift? 01620 0 64 004 1624 1243 tnz inp080-* no 01621 0 07 076 1717 1244 lda l.b006-* =tfupsf 01622 1 72 002 0 1245 orsa t.flg2,1 yes, turn flag on 01623 0 71 011 1634 1246 tra inp100-* 01624 1247 inp080 null down-shift 01624 0 07 074 1720 1248 lda l.b007-* =^tfupsf 01625 1 32 002 0 1249 ansa t.flg2,1 turn flag off 01626 0 71 006 1634 1250 tra inp100-* 1251 01627 1252 inp090 null 01627 0 07 070 1717 1253 lda l.b006-* =tfupsf 01630 1 31 002 0 1254 cana t.flg2,1 are we in uppercase? 01631 0 74 003 1634 1255 tze inp100-* 01632 673 100 0 1256 ila 64 yes, mark character 01633 0 72 015 1650 1257 orsa inchar-* 1258 01634 1259 inp100 null 01634 0 47 014 1650 1260 ldq inchar-* 01635 0 07 060 1715 1261 lda l.b004-* =tfecpx 01636 1 31 001 0 1262 cana t.flg,1 echoplex? 01637 0 74 111 1750 1263 tze inp110-* 1264 yes, put char in echo buffer 01640 4 10 024 1664 1265 tsy a.b003-*,* =addr(puteco) 01641 0 71 107 1750 1266 tra inp110-* branch around literals & storage assm 01 07-08-86 13.165 fnp utility programs for mcs page 69 inproc subroutine -- copy chars into input buffers 1267 eject 01642 1268 pmask bss 1 parity mask 01643 1269 inchrp bss 1 pointer to current character 01644 1270 inrem bss 1 number of characters remaining (negative) 01645 1271 inecho bss 1 nonzero if something put in echo buffer 01646 1272 insusp bss 1 nonzero if output_suspend char received 01647 1273 inres bss 1 nonzero if output_resume char received 01650 1274 inchar bss 1 copy of current character 01651 1275 inorig bss 1 original contents of inchar 01652 1276 oldpos bss 1 original value of t.pos 01653 1277 inenef bss 1 echo negotiation flag 01654 1278 inpte bss 1 buffer pte when we started 01655 1279 inpvir bss 1 temporary storage for virtual address 01656 1280 inq bss 1 nonzero => can append to queued input chain 01657 233100 0 01660 1281 even 01660 1282 intime bss 2 current time 1283 1284 01662 0 06000 3 1285 a.b001 ind istat 01663 0 05343 1 1286 a.b002 ind getubf 01664 0 02636 1 1287 a.b003 ind puteco 01665 0 02504 1 1288 a.b004 ind move 01666 0 03655 1 1289 a.b005 ind fulbuf 01667 0 02634 1 1290 a.b006 ind mshift 01670 0 17000 3 1291 a.b007 ind hcheck 01671 0 03133 1 1292 a.b008 ind echngo 01672 0 16000 3 1293 a.b009 ind ecgifl 01673 233100 0 01674 1294 even 01674 000107 0 1295 a.b010 vfd 12/1,6/itprty 1 second, and priority of inptim 01675 0 02425 1 1296 ind inptim end of binary card 00000030 01676 0 15000 3 1297 a.b011 ind dspqur 01677 0 00450 0 1298 a.b012 ind itmb interval timer mailbox 01700 0 22000 3 1299 a.b013 ind simclk simulated clock value 01701 0 07000 3 1300 a.b014 ind itest 01702 0 02341 1 1301 a.b015 ind chkofc 01703 0 02337 1 1302 a.b016 ind inpbak 01704 0 02305 1 1303 a.b017 ind inp300 1304 *a.b018 unused 01705 0 01320 1 1305 a.b019 ind gettib 01706 0 00652 0 1306 a.b020 ind .crnbf 01707 0 04241 1 1307 a.b021 ind setbpt 01710 0 00710 0 1308 a.b022 ind .crbpe 01711 0 02744 1 1309 a.b023 ind eforce 1310 1311 01712 2 00000 0 1312 l.b001 zero 0,b.0 01713 002000 0 1313 l.b002 vfd 18/tfcrec assm 01 07-08-86 13.165 fnp utility programs for mcs page 70 inproc subroutine -- copy chars into input buffers 01714 001000 0 1314 l.b003 vfd 18/tflfec 01715 200000 0 1315 l.b004 vfd 18/tfecpx 01716 004000 0 1316 l.b005 vfd 18/tftbec 01717 000200 0 1317 l.b006 vfd 18/tfupsf 01720 777577 0 1318 l.b007 vfd o18//tfupsf 01721 004000 0 1319 l.b008 vfd 18/s.exh 01722 000200 0 1320 l.b009 vfd 18/s.prex 01723 100000 0 1321 l.b010 vfd 18/tffip 01724 000777 0 1322 l.b011 oct 000777 01725 040000 0 1323 l.b012 vfd 18/tffrmi 01726 020000 0 1324 l.b013 vfd 18/bffbrk 01727 001000 0 1325 l.b014 vfd 18/s.brch 01730 000020 0 1326 l.b015 vfd 18/tfbral 01731 200000 0 1327 l.b016 vfd 18/tfsftr 01732 777776 0 1328 l.b017 vfd o18//tfwrit 01733 001000 0 1329 l.b018 vfd 18/hslafl 01734 000777 0 1330 l.b019 vfd 18/buftmk 01735 024000 0 1331 l.b020 oct 024000 "inhibit overflow" & "inhibit interrupts" 01736 000002 0 1332 l.b021 vfd 18/tfitim 01737 000040 0 1333 l.b022 vfd 18/tfifc 1334 *l.b023 unused 1335 *l.b024 unused 01740 077777 0 1336 l.b025 oct 077777 01741 100000 0 1337 l.b026 vfd 18/tfisus 01742 000040 0 1338 l.b027 vfd 18/tfsked 01743 000100 0 1339 l.b028 vfd 18/tf8in 01744 000001 0 1340 l.b029 dec 1 for adding to meters end of binary card 00000031 01745 077400 0 1341 l.b030 vfd 18/window 01746 077000 0 1342 l.b031 vfd 18/bwndow 01747 040000 0 1343 l.b032 vfd 18/tfinq assm 01 07-08-86 13.165 fnp utility programs for mcs page 71 inproc subroutine -- copy chars into input buffers 1344 eject 01750 1345 inp110 null 01750 0 56 703 1653 1346 stz inenef-* zero echnego did echo flag. 01751 1 20 042 0 1347 szn t.scll,1 are we echo-negotiating? 01752 0 74 004 1756 1348 tze inp114-* 01753 0 07 675 1650 1349 lda inchar-* hand the character to echngo 01754 4 10 715 1671 1350 tsy a.b008-*,* (echngo) echo negotiably 01755 0 17 676 1653 1351 sta inenef-* remember whether he actually echoed. 01756 1352 inp114 null 01756 1 20 005 0 1353 szn t.icp,1 are we already building an input chain? 01757 0 64 020 1777 1354 tnz inp119-* yes 1355 otherwise we might just want to add to t.dcp 01760 0 20 676 1656 1356 szn inq-* have we done so once already? 01761 0 64 006 1767 1357 tnz inp116-* yes, some of these tests are unnecessary 01762 1 07 036 0 1358 lda t.flg3,1 in breakall mode? 01763 0 31 745 1730 1359 cana l.b015-* tfbral 01764 0 74 021 2005 1360 tze inp120-* no, never mind 01765 0 31 762 1747 1361 cana l.b032-* (tfinq) is it safe to append? 01766 0 74 017 2005 1362 tze inp120-* no, don't try 01767 1 07 027 0 1363 inp116 lda t.dlst,1 get last buffer of queued input 01770 0 74 015 2005 1364 tze inp120-* surprise, there isn't one 01771 4 10 716 1707 1365 tsy a.b021-*,* (setbpt) get its virtual address 01772 4333 00 0 1366 cax3 find out if it's full 01773 4 10 673 1666 1367 tsy a.b005-*,* fulbuf 01774 0 71 011 2005 1368 tra inp120-* it is. oh well, we tried 01775 0 76 661 1656 1369 aos inq-* remember that that's where the character goes 01776 0 71 124 2122 1370 tra inp200-* and skip all the buffer manipulation stuff 1371 01777 1372 inp119 null old chain 01777 1 07 006 0 1373 lda t.ilst,1 find out if last buffer is full 02000 4 10 707 1707 1374 tsy a.b021-*,* (setbpt) convert address to virtual 02001 4333 00 0 1375 cax3 02002 4 10 664 1666 1376 tsy a.b005-*,* fulbuf 02003 0 71 002 2005 1377 tra 2 it is 02004 0 71 077 2103 1378 tra inp190-* it isn't, branch around buffer allocation code 1379 02005 1380 inp120 null check for exhaust condition 02005 0 56 651 1656 1381 stz inq-* can't add to dia chain now 02006 1 07 007 0 1382 lda t.icpl,1 how many buffers have we got so far? 02007 1 06 041 0 1383 ada t.dcpl,1 02010 422 050 0 1384 icmpa bufmax too many? 02011 0 75 006 2017 1385 tmi inp125-* no 02012 1 07 000 0 1386 lda t.stat,1 yes, send exhaust status 02013 022 017 0 1387 iana s.dss common bits only end of binary card 00000032 02014 0 37 705 1721 1388 ora l.b008-* =s.exh 02015 4 10 645 1662 1389 tsy a.b001-*,* =addr(istat) 02016 0 71 024 2042 1390 tra inp140-* 1391 02017 1 07 002 0 1392 inp125 lda t.flg2,1 see if we should request input suspension assm 01 07-08-86 13.165 fnp utility programs for mcs page 72 inproc subroutine -- copy chars into input buffers 02020 0 31 717 1737 1393 cana l.b022-* =tfifc 02021 0 74 012 2033 1394 tze inp130-* mode isn't on, certainly not 02022 1 07 007 0 1395 lda t.icpl,1 chain long enough? 02023 422 024 0 1396 icmpa bufmax/2 02024 0 65 004 2030 1397 tpl inp128-* yes 02025 0336 02 0 1398 als 2 multiply by 4 02026 4 27 660 1706 1399 cmpa a.b020-*,* (.crnbf) more than 1/4 of remaining space? 02027 0 75 004 2033 1400 tmi inp130-* no, skip it 02030 1 47 045 0 1401 inp128 ldq t.ifch,1 yes, get input flow control chars 02031 6337 11 0 1402 qrl 9 get suspend char alone 02032 4 10 657 1711 1403 tsy a.b023-*,* (eforce) into echo buffer 1404 02033 1 07 007 0 1405 inp130 lda t.icpl,1 have we got enough to send no matter what? 02034 422 012 0 1406 icmpa bufpre 02035 0 75 005 2042 1407 tmi inp140-* no 02036 1 07 000 0 1408 lda t.stat,1 yes, signal pre-exhaust status 02037 022 017 0 1409 iana s.dss common bits only 02040 0 37 662 1722 1410 ora l.b009-* s.prex 02041 4 10 621 1662 1411 tsy a.b001-*,* =istat 1412 02042 1413 inp140 null 1414 1415 get a fresh buffer 02042 473 040 0 1416 ilq bufsiz 02043 4 10 620 1663 1417 tsy a.b002-*,* =addr(getubf) 02044 0 71 004 2050 1418 tra inp150-* error, cannot get buffer 02045 1 76 007 0 1419 aos t.icpl,1 increment buffer count 02046 6333 00 0 1420 caq hold on to address 02047 0 71 015 2064 1421 tra inp160-* continue 1422 1423 send exhaust status, forget input char 02050 1424 inp150 cmeter mincs,m.inaf,l.b029-* 1425 02057 1 07 000 0 1426 lda t.stat,1 get tib status bits 02060 022 177 0 1427 iana s.tib common bits only 02061 0 37 640 1721 1428 ora l.b008-* =s.exh 02062 4 10 600 1662 1429 tsy a.b001-*,* =addr(istat) end of binary card 00000033 02063 0 71 222 2305 1430 tra inp300-* go to next slot 1431 02064 1 20 005 0 1432 inp160 szn t.icp,1 new chain or old? 02065 0 74 006 2073 1433 tze inp170-* new 1434 old, chain new buffer on 02066 1 07 006 0 1435 lda t.ilst,1 02067 4 10 620 1707 1436 tsy a.b021-*,* setbpt 02070 0332 00 0 1437 cax2 02071 2 57 000 0 1438 stq bf.nxt,2 02072 0 71 002 2074 1439 tra inp180-* 1440 02073 1441 inp170 null assm 01 07-08-86 13.165 fnp utility programs for mcs page 73 inproc subroutine -- copy chars into input buffers 02073 1 57 005 0 1442 stq t.icp,1 new buffer is input chain head 1443 02074 1444 inp180 null 1445 set new last buffer pointer 02074 1 57 006 0 1446 stq t.ilst,1 02075 7333 00 0 1447 cqa get virtual address 02076 4 10 611 1707 1448 tsy a.b021-*,* setbpt 02077 4333 00 0 1449 cax3 also save it for later 02100 773 002 0 1450 iaa bf.dta to set new character pointer 02101 0 37 611 1712 1451 ora l.b001-* 0,b.0 02102 1 17 010 0 1452 sta t.icch,1 1453 02103 1454 inp190 null 02103 0 50 552 1655 1455 stx3 inpvir-* hang on to virtual buffer address 02104 1 41 010 0 1456 ldx3 t.icch,1 02105 0 07 543 1650 1457 lda inchar-* now put data character in input buffer 02106 3 17 200 0 1458 sta 0,3,b.0 1459 now increment tally 02107 0 41 546 1655 1460 ldx3 inpvir-* 02110 673 001 0 1461 ila 1 add one to tally in last buffer 02111 3 16 001 0 1462 asa bf.tly,3 1463 increment char pointer 02112 1 41 010 0 1464 ldx3 t.icch,1 increment character pointer 02113 373 300 0 1465 iacx3 0,b.1 02114 1 50 010 0 1466 stx3 t.icch,1 1467 02115 1 07 002 0 1468 lda t.flg2,1 check for shifter 02116 0 31 613 1731 1469 cana l.b016-* =tsfstr 02117 0 74 003 2122 1470 tze inp200-* not an ibm type 02120 673 077 0 1471 ila 63 yes it is, mask off possible shift 02121 0 32 527 1650 1472 ansa inchar-* when testing for break 02122 1473 inp200 null 02122 1 07 002 0 1474 lda t.flg2,1 see if we're in a frame 02123 0 31 600 1723 1475 cana l.b010-* =tffip 02124 0 74 006 2132 1476 tze inp210-* nope 02125 1 07 040 0 1477 lda t.frmc,1 yes, get framing chars 02126 0 34 576 1724 1478 ana l.b011-* (=o000777) mask down to frame-end only 02127 0 27 522 1651 1479 cmpa inorig-* is this it? 02130 0 74 053 2203 1480 tze inp250-* yes, break 02131 0 71 154 2305 1481 tra inp300-* no, don't break 1482 02132 1483 inp210 null end of binary card 00000034 02132 1 07 002 0 1484 lda t.flg2,1 check for input_suspend char 02133 0 31 604 1737 1485 cana l.b022-* (=tfifc) if appropriate 02134 0 74 015 2151 1486 tze inp220-* it isn't 02135 1 07 045 0 1487 lda t.ifch,1 get input flow control chars 02136 2335 11 0 1488 lrl 9 suspend in a low, resume in q high 02137 0 27 512 1651 1489 cmpa inorig-* received suspend char? 02140 0 64 011 2151 1490 tnz inp220-* no assm 01 07-08-86 13.165 fnp utility programs for mcs page 74 inproc subroutine -- copy chars into input buffers 02141 1 07 007 0 1491 lda t.icpl,1 yes, should we resume right away? 02142 422 024 0 1492 icmpa bufmax/2 02143 0 75 004 2147 1493 tmi inp215-* yes, chain is short enough 02144 0 07 575 1741 1494 lda l.b026-* =tfisus 02145 1 72 001 0 1495 orsa t.flg,1 else set suspended flag in tib 02146 0 71 003 2151 1496 tra inp220-* 02147 6337 11 0 1497 inp215 qrl 9 get resume char in q low 02150 4 10 541 1711 1498 tsy a.b023-*,* eforce 1499 02151 1 07 036 0 1500 inp220 lda t.flg3,1 get flags 02152 0 31 556 1730 1501 cana l.b015-* =tfbral 02153 0 64 030 2203 1502 tnz inp250-* in breakall mode, break on everything 1503 1504 break list pointed to by t.brkp has maximum of 1505 8 characters, of which first is 1506 either a special code or a count. 02154 1 07 032 0 1507 lda t.brkp,1 get pointer to beginning of break list 02155 0 37 535 1712 1508 ora l.b001-* 0,b.0 02156 4333 00 0 1509 cax3 1510 02157 3 07 200 0 1511 lda 0,3,b.0 get first char of break list 02160 0 74 125 2305 1512 tze inp300-* no break list, no break char. 02161 0336 11 0 1513 als 9 extend high-order bit of char 02162 0337 11 0 1514 ars 9 for immediate compare 1515 02163 422 777 0 1516 icmpa brkall break on every character? 02164 0 74 017 2203 1517 tze inp250-* yes, that includes this one 1518 02165 422 776 0 1519 icmpa brkctl break on all control chars? 02166 0 64 005 2173 1520 tnz inp230-* 02167 0 07 461 1650 1521 lda inchar-* yes, find out if this is one 02170 422 040 0 1522 icmpa blank 02171 0 75 012 2203 1523 tmi inp250-* it is, break 02172 0 71 113 2305 1524 tra inp300-* else don't 1525 02173 1526 inp230 null first char is count of list 02173 6333 00 0 1527 caq get it in q 1528 02174 1529 inp240 null check for match 02174 373 300 0 1530 iacx3 0,b.1 bump to next char in break list 02175 3 07 200 0 1531 lda 0,3,b.0 pick it up 02176 0 27 452 1650 1532 cmpa inchar-* 02177 0 74 004 2203 1533 tze inp250-* this one, break now 1534 get next char in break list 02200 573 777 0 1535 iaq -1 if there are any more end of binary card 00000035 02201 0 74 104 2305 1536 tze inp300-* 02202 0 71 772 2174 1537 tra inp240-* 1538 1539 assm 01 07-08-86 13.165 fnp utility programs for mcs page 75 inproc subroutine -- copy chars into input buffers 02203 1540 inp250 null we have a break char, send appropriate 1541 status to interpreter 02203 0 07 520 1723 1542 lda l.b010-* =tffip (frame in progress) 02204 322 777 0 1543 iera -1 always turned off by break 02205 1 32 002 0 1544 ansa t.flg2,1 1545 02206 1 07 004 0 1546 lda t.line,1 hsla line? 02207 0 31 524 1733 1547 cana l.b018-* =hslafl 02210 0 74 011 2221 1548 tze inp260-* no, skip this 02211 1 03 030 0 1549 ldx2 t.sfcm,1 else have to update input pointer 02212 0 41 431 1643 1550 ldx3 inchrp-* address of char just processed 02213 373 300 0 1551 iacx3 0,b.1 point to next char 02214 2 50 021 0 1552 stx3 sf.nic,2 update pointer in sfcm 02215 0 20 430 1645 1553 szn inecho-* have we put anything in echo buffer? 02216 0 74 003 2221 1554 tze inp260-* no, proceed 02217 0 56 426 1645 1555 stz inecho-* yes, reset flag 02220 4 10 450 1670 1556 tsy a.b007-*,* (hcheck) and tell hsla_man now 1557 02221 1558 inp260 null 02221 1 07 036 0 1559 lda t.flg3,1 check for breakall super-optimization 02222 0 31 506 1730 1560 cana l.b015-* =tfbral 02223 0 74 044 2267 1561 tze inp265-* nope 02224 0 20 427 1653 1562 szn inenef-* did fnp echnego this char? 02225 0 64 056 2303 1563 tnz inp298-* great, don't ship: turn on tfwrit 1564 if there's input on the t.dcp chain that can 1565 be safely appended to (as determined above), 1566 simply put the current character into it; it 1567 will be included in an already queued 1568 accept_input 1569 02226 0 20 430 1656 1570 szn inq-* is there input queued? 02227 0 74 023 2252 1571 tze inp261-* no, never mind 02230 1 07 027 0 1572 lda t.dlst,1 get the last buffer in the queued input 02231 4 10 456 1707 1573 tsy a.b021-*,* (setbpt) get virtual address 02232 0 17 423 1655 1574 sta inpvir-* save it 02233 4333 00 0 1575 cax3 02234 3 07 001 0 1576 lda bf.tly,3 get the current tally 02235 0 34 477 1734 1577 ana l.b019-* buftmk 02236 2335 01 0 1578 lrl 1 get number of words (saving possible odd char) 02237 3 76 001 0 1579 aos bf.tly,3 increment buffer tally 02240 773 002 0 1580 iaa bf.dta account for buffer header 02241 0 06 414 1655 1581 ada inpvir-* add address of origin, we now have word address 02242 0 37 450 1712 1582 ora l.b001-* 0,b.0 02243 4333 00 0 1583 cax3 x3 now points to correct word 02244 573 000 0 1584 iaq 0 was there an odd number of characters? 02245 0 65 002 2247 1585 tpl 2 no 02246 373 300 0 1586 iacx3 0,b.1 yes, advance character pointer 02247 4 07 146 2415 1587 lda a.g008-*,* (inorig) get the current character end of binary card 00000036 02250 3 17 200 0 1588 sta 0,3,b.0 store it in buffer assm 01 07-08-86 13.165 fnp utility programs for mcs page 76 inproc subroutine -- copy chars into input buffers 02251 0 71 034 2305 1589 tra inp300-* done 02252 1590 inp261 null if that didn't work, at least we can 1591 try to avoid running the control tables 1592 1593 breakable chars come one at a time 1594 or the very last in an echoed chain. 1595 at any rate, we are gonna ship. 1596 02252 1 07 006 0 1597 lda t.ilst,1 first char in some buffer, not echoed? 02253 1 27 005 0 1598 cmpa t.icp,1 only buffer in chain? 02254 0 64 011 2265 1599 tnz inp262-* no, leave break bit on or off as was set before. 02255 4 10 432 1707 1600 tsy a.b021-*,* (setbpt) get virtual address 02256 4333 00 0 1601 cax3 02257 3 07 001 0 1602 lda bf.tly,3 check out the tally 02260 0 34 454 1734 1603 ana l.b019-* 02261 422 001 0 1604 icmpa 1 1st char? 02262 0 64 003 2265 1605 tnz inp262-* no, dont mark as break chars 02263 0 07 443 1726 1606 lda l.b013-* otherwise, turn on break flag 02264 3 72 001 0 1607 orsa bf.flg,3 02265 1608 inp262 null 02265 4 10 405 1672 1609 tsy a.b009-*,* (ecgifl), ech(nego) iflush 02266 0 71 017 2305 1610 tra inp300-* 02267 1611 inp265 null 02267 1 07 006 0 1612 lda t.ilst,1 get buffer pointer 02270 4 10 417 1707 1613 tsy a.b021-*,* make it virtual 02271 4333 00 0 1614 cax3 so as to set 02272 0 07 434 1726 1615 lda l.b013-* (=bffbrk) break flag 02273 3 72 001 0 1616 orsa bf.flg,3 02274 1 07 000 0 1617 lda t.stat,1 get tib status 02275 022 017 0 1618 iana s.dss mask down to common bits 02276 0 37 431 1727 1619 ora l.b014-* (=s.brch) set break char received 02277 4 10 117 2416 1620 tsy a.g009-*,* =addr(istat) 02300 1 07 001 0 1621 lda t.flg,1 check for echoplex 02301 0 31 414 1715 1622 cana l.b004-* =tfecpx 02302 0 74 003 2305 1623 tze inp300-* no, we're done 02303 1624 inp298 null here for thoughts that want chance to echo 02303 0 07 427 1732 1625 lda l.b017-* =^tfwrit 02304 1 32 001 0 1626 ansa t.flg,1 turn it off to make sure we get a chance to echo 1627 02305 1628 inp300 null through with that character 02305 1 20 044 0 1629 szn t.entp,1 is there a echnego table? 02306 0 74 007 2315 1630 tze inp310-* no 02307 4 20 110 2417 1631 szn a.g010-*,* (inenef) did echngo echo this char? 02310 0 64 005 2315 1632 tnz inp310-* yes, it was echoed. echngo zeroed sncc 02311 0 54 074 2405 1633 sti inpind-* save indicators - it was not echoed, 02312 0 44 423 1735 1634 ldi l.b020-* inhibit overflow- so count against sync ctr 02313 1 76 043 0 1635 aos t.sncc,1 aos the sync ctr 02314 0 44 071 2405 1636 ldi inpind-* 02315 1637 inp310 null 02315 4 07 103 2420 1638 lda a.g011-*,* (inpte) pte to restore? assm 01 07-08-86 13.165 fnp utility programs for mcs page 77 inproc subroutine -- copy chars into input buffers 02316 0 74 003 2321 1639 tze inp320-* no end of binary card 00000037 02317 4 03 102 2421 1640 ldx2 a.g012-*,* (.crbpe) yes 02320 2 17 000 0 1641 sta 0,2 do it 02321 1642 inp320 null 02321 4 41 071 2412 1643 ldx3 a.g005-*,* (inchrp) recover char pointer 02322 373 300 0 1644 iacx3 0,b.1 go to next 02323 4 76 070 2413 1645 aos a.g006-*,* (inrem) are there any more? 02324 4 75 076 2422 1646 tmi a.g013-*,* (inp010) yes, go do next one 1647 done, set return flags 02325 673 000 0 1648 ila 0 02326 4 20 066 2414 1649 szn a.g007-*,* (inecho) did we put anything in echo buffer? 02327 0 74 002 2331 1650 tze 2 no 02330 122 001 0 1651 iora reteco 02331 4 20 055 2406 1652 szn a.g001-*,* (insusp) found an output_suspend char? 02332 0 74 002 2334 1653 tze 2 no 02333 122 002 0 1654 iora retsus 02334 4 20 053 2407 1655 szn a.g002-*,* (inres) how about output_resume? 02335 0 74 002 2337 1656 tze 2 no 02336 122 004 0 1657 iora retres 1658 02337 1659 inpbak return inproc assm 01 07-08-86 13.165 fnp utility programs for mcs page 78 chkofc -- looks for output flow control chars 1660 ttls chkofc -- looks for output flow control chars 1661 this subroutine looks for output flow control characters 1662 and sets appropriate flags. if it completely processes 1663 the character (i.e., it is not to be echoed or stored) 1664 it returns to the next location; otherwise it returns 1665 one location further on 1666 1667 02341 1668 chkofc subr 02344 1 07 002 0 1669 lda t.flg2,1 oflow mode? 02345 0 31 056 2423 1670 cana l.g001-* =tfofc 02346 0 74 034 2402 1671 tze chk030-* no, forget it 02347 1 07 046 0 1672 lda t.ofch,1 we'll check for output flow control char 02350 2335 11 0 1673 lrl 9 get suspend char. first 02351 4 27 037 2410 1674 cmpa a.g003-*,* (inchar) is it? 02352 0 64 007 2361 1675 tnz chk010-* no, check for resume 02353 1 07 002 0 1676 lda t.flg2,1 yes, see if it's block acknowledgement 02354 0 31 050 2424 1677 cana l.g002-* =tfblak 02355 0 64 004 2361 1678 tnz chk010-* yes, so suspend char isn't interesting 02356 4 76 030 2406 1679 aos a.g001-*,* (insusp) indicate receipt of suspend character 02357 4 56 030 2407 1680 stz a.g002-*,* (inres) overrides any preceding resume char 02360 0 71 023 2403 1681 tra chkret-* don't echo or store char 02361 6337 11 0 1682 chk010 qrl 9 get resume char 02362 4 67 026 2410 1683 cmpq a.g003-*,* (inchar) is our current char one? 02363 0 64 017 2402 1684 tnz chk030-* 02364 1 07 002 0 1685 lda t.flg2,1 yes, block acknowledgement? 02365 0 31 037 2424 1686 cana l.g002-* =tfblak end of binary card 00000038 02366 0 64 004 2372 1687 tnz chk020-* yes, we'll have to adjust message count 02367 4 56 017 2406 1688 stz a.g001-*,* (insusp) overrides any previous suspend character 02370 4 76 017 2407 1689 aos a.g002-*,* (inres) yes, mark that it's to be resumed 02371 0 71 012 2403 1690 tra chkret-* done with char (don't echo or store) 1691 02372 1692 chk020 null ack 02372 1 07 047 0 1693 lda t.omct,1 get outstanding message count 02373 0 74 010 2403 1694 tze chkret-* don't let it go negative 02374 773 777 0 1695 iaa -1 else decrement it 02375 1 17 047 0 1696 sta t.omct,1 02376 422 002 0 1697 icmpa 2 can we resume now? 02377 0 65 004 2403 1698 tpl chkret-* no 02400 4 10 011 2411 1699 tsy a.g004-*,* (itest) yes, tell interpreter 02401 0 71 002 2403 1700 tra chkret-* done with char (don't store or echo) 1701 02402 0 76 737 2341 1702 chk030 aos chkofc-* to return + 1 02403 1703 chkret return chkofc 1704 1705 02405 1706 inpind bss 1 save indicator reg 1707 02406 0 01646 1 1708 a.g001 ind insusp assm 01 07-08-86 13.165 fnp utility programs for mcs page 79 chkofc -- looks for output flow control chars 02407 0 01647 1 1709 a.g002 ind inres 02410 0 01650 1 1710 a.g003 ind inchar 02411 0 07000 3 1711 a.g004 ind itest 02412 0 01643 1 1712 a.g005 ind inchrp 02413 0 01644 1 1713 a.g006 ind inrem 02414 0 01645 1 1714 a.g007 ind inecho 02415 0 01651 1 1715 a.g008 ind inorig 02416 0 06000 3 1716 a.g009 ind istat 02417 0 01653 1 1717 a.g010 ind inenef 02420 0 01654 1 1718 a.g011 ind inpte 02421 0 00710 0 1719 a.g012 ind .crbpe 02422 0 01523 1 1720 a.g013 ind inp010 1721 02423 000100 0 1722 l.g001 vfd 18/tfofc 02424 004000 0 1723 l.g002 vfd 18/tfblak assm 01 07-08-86 13.165 fnp utility programs for mcs page 80 inptim -- subroutine to run 1 second after inproc 1724 ttls inptim -- subroutine to run 1 second after inproc 1725 1726 this subroutine is scheduled by inproc to run one second 1727 later if a channel is in input flow control/timeout 1728 mode. its function is to see if more than half a second 1729 has elapsed since the last time inproc was called on behalf 1730 of the channel, and if so, to send an input_resume 1731 character to it on the assumption that it decided to 1732 suspend input. 1733 1734 x1 contains absolute tib address at entry 1735 1736 02425 1737 inptim null transferred to by secondary dispatcher 02425 2332 00 0 1738 cx1a copy absolute tib address into a 02426 0 17 052 2500 1739 sta ipabs-* save it for possible later call to dspqur 02427 4 10 043 2472 1740 tsy a.e006-*,* (setptw) virtualize it 02430 4332 00 0 1741 cax1 and back into x1 02431 1 04 050 0 1742 ldaq t.itim,1 get the time inproc last ran 02432 4 74 033 2465 1743 tze a.e001-*,* (secdsp) never, forget it 02433 4 07 033 2466 1744 lda a.e002-*,* (itmb) see how much later it is now end of binary card 00000039 02434 0 17 047 2503 1745 sta iptemp+1-* 02435 0 56 045 2502 1746 stz iptemp-* 02436 4 04 031 2467 1747 ldaq a.e003-*,* (simclk) next timer runout time 02437 0 24 043 2502 1748 sbaq iptemp-* result is current time 02440 1 24 050 0 1749 sbaq t.itim,1 how long has it been? 02441 4 75 024 2465 1750 tmi a.e001-*,* hasn't happened yet (unlikely) 02442 773 000 0 1751 iaa 0 more than 2**18 msec?? 02443 0 64 007 2452 1752 tnz itm010-* well, that's sure more than half a second 02444 0 67 031 2475 1753 cmpq l.e001-* 501(10) -- else, was it in fact? 02445 0 65 005 2452 1754 tpl itm010-* yes 1755 else we should check again in a second 02446 4 04 025 2473 1756 ldaq a.e007-*,* time, priority, address of this routine 02447 0 43 031 2500 1757 ldx1 ipabs-* recover absolute tib address 02450 4 10 024 2474 1758 tsy a.e008-*,* (dspqur) make sure we get called again 02451 4 71 014 2465 1759 tra a.e001-*,* (secdsp) done 1760 02452 1 47 045 0 1761 itm010 ldq t.ifch,1 it has been, so send resume char 02453 4336 11 0 1762 qls 9 get rid of suspend char 02454 6337 11 0 1763 qrl 9 02455 4 10 013 2470 1764 tsy a.e004-*,* eforce 02456 0 07 021 2477 1765 lda l.e003-* =^tfsked 02457 1 32 036 0 1766 ansa t.flg3,1 turn off scheduled flag 02460 1 07 004 0 1767 lda t.line,1 hsla line? 02461 0 31 015 2476 1768 cana l.e002-* =hslafl 02462 4 74 003 2465 1769 tze a.e001-*,* (secdsp) no, done 02463 4 10 006 2471 1770 tsy a.e005-*,* (hcheck) yes, make sure echoing happens 02464 4 71 001 2465 1771 tra a.e001-*,* (secdsp) finished now 1772 assm 01 07-08-86 13.165 fnp utility programs for mcs page 81 inptim -- subroutine to run 1 second after inproc 1773 02465 0 21000 3 1774 a.e001 ind secdsp 02466 0 00450 0 1775 a.e002 ind itmb 02467 0 22000 3 1776 a.e003 ind simclk 02470 0 02744 1 1777 a.e004 ind eforce 02471 0 17000 3 1778 a.e005 ind hcheck 02472 0 04222 1 1779 a.e006 ind setptw 02473 0 01674 1 1780 a.e007 ind a.b010 contains word pair for dspqur 02474 0 15000 3 1781 a.e008 ind dspqur 1782 1783 02475 000765 0 1784 l.e001 dec 501 02476 001000 0 1785 l.e002 vfd 18/hslafl 02477 777737 0 1786 l.e003 vfd o18//tfsked 1787 02500 1788 ipabs bss 1 absolute tib address (temp stored here) 02501 233100 0 02502 1789 even 02502 1790 iptemp bss 2 assm 01 07-08-86 13.165 fnp utility programs for mcs page 82 move subroutine does carriage movement 1791 ttls move subroutine does carriage movement 1792 1793 this subroutine looks in carriage movement 1794 table supplied in device table for character 1795 supplied in q reg. 1796 1797 returns: 0 -- linefeed char 1798 1 -- carriage return 1799 2 -- tab (a contains no. of blanks) 1800 3 -- backspace 1801 4 -- no match 1802 1803 tib address assumed in x1 as always 1804 02504 1805 move subr mov,(q,x3) end of binary card 00000040 1806 1807 first find out if we should bother 02515 0 56 117 2634 1808 stz mshift-* initially not a shift char 02516 0 41 114 2632 1809 ldx3 a.m001-* base of control tables 02517 3 41 001 0 1810 ldx3 ct.dev,3 array of device table ptrs 02520 1 40 017 0 1811 adcx3 t.type,1 indexed by terminal type 02521 3 07 777 0 1812 lda -1,3 -1 to convert index to offset 02522 0 37 103 2625 1813 ora l.m001-* (0, b.0) convert to char. addressing 02523 4333 00 0 1814 cax3 x3 now points to device table entry 1815 we want to check against carriage mvmt 1816 characters in device table entry 1817 02524 0 07 104 2630 1818 lda l.m004-* =tfsftr 02525 1 31 002 0 1819 cana t.flg2,1 02526 0 74 003 2531 1820 tze mov005-* not a shifter, only look for carriage movement 02527 673 006 0 1821 ila 6 else we have to look for shifts too 02530 0 71 002 2532 1822 tra mov010-* 02531 1823 mov005 null 02531 673 004 0 1824 ila 4 limit 02532 0 17 103 2635 1825 mov010 sta mlimit-* 02533 673 000 0 1826 ila 0 02534 3 67 205 0 1827 mov012 cmpq dt.cmt,3,b.0 02535 0 74 024 2561 1828 tze mov030-* hit 02536 773 001 0 1829 iaa 1 and increment counter 02537 0 27 076 2635 1830 cmpa mlimit-* end of table? 02540 0 74 003 2543 1831 tze mov020-* no hits 02541 373 300 0 1832 iacx3 0,b.1 not last, bump pointer 02542 0 71 772 2534 1833 tra mov012-* check next char. in table 1834 * 02543 1835 mov020 null not a special carriage mvmt. char. 02543 0 07 065 2630 1836 lda l.m004-* =tfsftr 02544 1 31 002 0 1837 cana t.flg2,1 02545 0 64 006 2553 1838 tnz mov025-* if we don't have an ibm terminal, 02546 7333 00 0 1839 cqa find out if it's a control char. assm 01 07-08-86 13.165 fnp utility programs for mcs page 83 move subroutine does carriage movement 02547 422 177 0 1840 icmpa rubout 02550 0 74 007 2557 1841 tze mov027-* if so, don't bump column pointer 02551 422 040 0 1842 icmpa space 02552 0 75 005 2557 1843 tmi mov027-* end of binary card 00000041 02553 1 07 033 0 1844 mov025 lda t.pos,1 make sure we're not over limit 02554 422 377 0 1845 icmpa 255 02555 0 65 002 2557 1846 tpl 2 we are, don't increment 02556 1 76 033 0 1847 aos t.pos,1 else, push to next column 02557 673 004 0 1848 mov027 ila 4 indicate no hit return 02560 0 71 042 2622 1849 tra movbak-* 1850 * 02561 1851 mov030 null 1852 hit on carriage movement table 02561 422 004 0 1853 icmpa 4 was it a shift character? 02562 0 75 005 2567 1854 tmi mov035-* no, check for something else 02563 773 775 0 1855 iaa -3 yes, reduce it to 1 or 2 02564 0 17 050 2634 1856 sta mshift-* save it for later 02565 673 004 0 1857 ila 4 return as though no hit 02566 0 71 034 2622 1858 tra movbak-* all done (carriage didn't move) 1859 02567 1860 mov035 null 02567 422 002 0 1861 icmpa 2 cr or lf? 02570 0 65 003 2573 1862 tpl mov040-* 02571 1 56 033 0 1863 stz t.pos,1 yes, zero column indicator 02572 0 71 030 2622 1864 tra movbak-* 02573 1865 mov040 null 02573 422 003 0 1866 icmpa 3 backspace? 02574 0 64 007 2603 1867 tnz mov050-* 02575 1 20 033 0 1868 szn t.pos,1 don't decrement column indicator if 02576 0 74 024 2622 1869 tze movbak-* it's already zero 02577 673 777 0 1870 ila -1 02600 1 16 033 0 1871 asa t.pos,1 02601 673 003 0 1872 ila 3 bump return point for backspace 02602 0 71 020 2622 1873 tra movbak-* 1874 * 02603 1875 mov050 null must be tab 02603 673 000 0 1876 ila 0 02604 1 47 033 0 1877 ldq t.pos,1 get mod(t.pos, 10) 02605 0 67 024 2631 1878 cmpq l.m005-* (=255) make sure we're not over limit 02606 0 65 011 2617 1879 tpl mov070-* we are, don't increment t.pos 02607 0 67 017 2626 1880 cmpq l.m002-* =10 02610 0 75 003 2613 1881 tmi mov060-* if it's < 10, don't bother dividing 02611 1882 dvd (l.m002-*) else divide by 10 1883 remainder is in q 02613 1884 mov060 null 02613 0 57 020 2633 1885 stq mtemp-* save mod(t.pos,10) 02614 673 012 0 1886 ila 10 t.pos<-t.pos+10-mod(t.pos,10) 02615 0 26 016 2633 1887 sba mtemp-* 02616 1 16 033 0 1888 asa t.pos,1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 84 move subroutine does carriage movement 02617 0 76 665 2504 1889 mov070 aos move-* bump return pointer for tab return 02620 0 76 664 2504 1890 aos move-* by hand because have to keep space count in a 02621 0 71 002 2623 1891 tra 2 1892 end of binary card 00000042 02622 0 16 662 2504 1893 movbak asa move-* bump return pointer appropriately 02623 1894 return move 1895 1896 02625 2 00000 0 1897 l.m001 zero 0,b.0 02626 000012 0 1898 l.m002 dec 10 02627 207000 0 1899 l.m003 vfd 18/tfcrec+tflfec+tftbec+tfecpx 02630 200000 0 1900 l.m004 vfd 18/tfsftr 02631 000377 0 1901 l.m005 dec 255 02632 0 01000 3 1902 a.m001 ind ctrl address of control tables 02633 1903 mtemp bss 1 temp for saving mod(t.pos,10) 02634 1904 mshift bss 1 char was case shift (1 for upper, 2 for lower) 02635 1905 mlimit bss 1 number of chars to scan in cmt assm 01 07-08-86 13.165 fnp utility programs for mcs page 85 echo buffer subroutines 1906 ttls echo buffer subroutines 1907 echo buffer format 1908 000000 1909 eb.inp equ 0 ptr to next place for input character 000001 1910 eb.out equ 1 ptr to next output character 000002 1911 eb.tly equ 2 current character count (upper half) 000002 1912 eb.dta equ 2 first data char (lower half) 000040 1913 eb.end equ bufsiz end of echo buffer 000073 1914 ebsize equ bufsiz*2-5 maximum number of echo chars 1915 1916 1917 puteco subroutine puts input character in 1918 echo buffer. character is supplied in q 1919 tib address on x1 as usual 1920 if character is ht, space count is in x2 1921 02636 1922 hecho null 02636 1923 lecho null this is the external interface 02636 1924 puteco subr put,(x2,x3,a,q) 1925 02655 1 07 002 0 1926 lda t.flg2,1 frame in progress? 02656 0 31 246 3124 1927 cana l.c006-* =tffip 02657 0 64 063 2742 1928 tnz putbak-* yes, no echoing 1929 02660 0 10 167 3047 1930 tsy putone-* 02661 0 71 061 2742 1931 tra putbak-* if no more room, skip other stuff 1932 02662 1 07 004 0 1933 lda t.line,1 hsla line? 02663 0 31 243 3126 1934 cana l.c008-* =hslafl 02664 0 74 044 2730 1935 tze put070-* no, lsla_man will handle delays later 02665 1 03 037 0 1936 ldx2 t.dtp,1 yes, put delays in echo buffer 02666 0 74 022 2710 1937 tze put039-* no delay table, check tabecho 02667 0 07 765 2654 1938 lda putsq-* get echoed char 02670 422 012 0 1939 icmpa lf linefeed? 02671 0 64 004 2675 1940 tnz put020-* no, try something else 02672 2 07 003 0 1941 lda dl.lf,2 yes, get linefeed delays 02673 0 74 047 2742 1942 tze putbak-* none, skip it end of binary card 00000043 02674 0 71 012 2706 1943 tra put030-* go do it 1944 02675 422 015 0 1945 put020 icmpa cr carriage return? 02676 0 64 013 2711 1946 tnz put040-* nope 02677 2 07 004 0 1947 lda dl.cr,2 get cr delay factor 02700 1948 mpy (a.c002-*,*) oldpos, original column position 02702 0 74 040 2742 1949 tze putbak-* no delays, skip it 02703 4337 11 0 1950 qrs 9 divide by 512 02704 573 003 0 1951 iaq 3 for good measure 02705 7333 00 0 1952 cqa result into a 02706 473 000 0 1953 put030 ilq null delay char 02707 0 71 011 2720 1954 tra put050-* go put nulls in echo buffer assm 01 07-08-86 13.165 fnp utility programs for mcs page 86 echo buffer subroutines 1955 02710 0 07 744 2654 1956 put039 lda putsq-* get character into a again 02711 422 011 0 1957 put040 icmpa tab not cr or lf, is it tab? 02712 0 64 030 2742 1958 tnz putbak-* no, done 02713 1 07 001 0 1959 lda t.flg,1 tab echo? 02714 0 31 207 3123 1960 cana l.c005-* =tftbec 02715 0 74 025 2742 1961 tze putbak-* no, skip it 02716 0 07 733 2651 1962 lda putsx2-* get space count 02717 473 040 0 1963 ilq blank get space char 1964 02720 1965 put050 null here to store blanks or nulls in buffer 02720 322 777 0 1966 iera -1 negate count 02721 773 001 0 1967 iaa 1 02722 0 17 210 3132 1968 sta puttmp-* 02723 0 10 041 2764 1969 put060 tsy putin-* put one in 02724 0 71 016 2742 1970 tra putbak-* buffer full, no more 02725 0 76 205 3132 1971 aos puttmp-* count one 02726 0 75 775 2723 1972 tmi put060-* more, go do them 02727 0 71 013 2742 1973 tra putbak-* no more, finished 1974 02730 1975 put070 null lsla line, may need to restore t.pos 02730 1 07 001 0 1976 lda t.flg,1 echoplex? 02731 0 31 171 3122 1977 cana l.c004-* =tfecpx 02732 0 64 006 2740 1978 tnz put080-* yes 02733 0 31 170 3123 1979 cana l.c005-* (=tftbec) no, try tab echo 02734 0 74 006 2742 1980 tze putbak-* no, done 02735 0 07 717 2654 1981 lda putsq-* get original char again 02736 422 011 0 1982 icmpa ht is it a tab? 02737 0 64 003 2742 1983 tnz putbak-* no, not interesting 02740 4 07 154 3114 1984 put080 lda a.c002-*,* oldpos 02741 1 17 033 0 1985 sta t.pos,1 1986 02742 1987 putbak return puteco end of binary card 00000044 1988 1989 02744 1990 eforce subr efo,(a,q,x3) 1991 1992 short version of puteco that puts the character 1993 in the echo buffer even if in a blk_xfer frame, 1994 and doesn't bother about delays or tabs. called 1995 for such things as input suspend/resume characters. 1996 1997 q contains character to be echoed. 1998 02760 0 10 067 3047 1999 tsy putone-* this actually does all the work 02761 2331 00 0 2000 nop doesn't matter whether or not it succeeds 02762 2001 return eforce assm 01 07-08-86 13.165 fnp utility programs for mcs page 87 putin -- insert a char in the echo buffer 2002 ttls putin -- insert a char in the echo buffer 02764 2003 putin subr pin,(a,q,x2) 2004 2005 this subroutine does the actual insertion in the 2006 echo buffer 2007 2008 q contains character to insert 2009 x3 points to echo buffer 2010 returns to callpoint if echo buffer full, 2011 to one loc. beyond otherwise 2012 03000 3 07 002 0 2013 lda eb.tly,3 see if it's full 03001 2337 11 0 2014 arl 9 03002 422 073 0 2015 icmpa ebsize check against maximum 03003 0 75 013 3016 2016 tmi pin010-* 03004 0 07 115 3121 2017 lda l.c003-* (=tfbel) echo buffer is full, 03005 1 72 001 0 2018 orsa t.flg,1 set flag to send bell 03006 2019 cmeter mincd,m.ebof,l.c011-* meter this end of binary card 00000045 03015 0 71 030 3045 2020 tra pinbak-* and return 03016 2021 pin010 null 03016 0 76 746 2764 2022 aos putin-* bump return pointer 03017 1 07 004 0 2023 lda t.line,1 if hsla line in tabecho, don't store tab 03020 0 31 106 3126 2024 cana l.c008-* =hslafl 03021 0 74 007 3030 2025 tze pin015-* not hsla, as you were 03022 7333 00 0 2026 cqa get character 03023 422 011 0 2027 icmpa tab 03024 0 64 004 3030 2028 tnz pin015-* not tab, go ahead 03025 1 07 001 0 2029 lda t.flg,1 check for tabecho 03026 0 31 075 3123 2030 cana l.c005-* tftbec 03027 0 64 016 3045 2031 tnz pinbak-* don't store it, we'll put in spaces later 03030 2032 pin015 null 03030 3 03 000 0 2033 ldx2 eb.inp,3 get input pointer 2034 we're ready to store char 03031 2 57 200 0 2035 stq 0,2,b.0 do it 03032 273 300 0 2036 iacx2 0,b.1 increment input pointer 03033 3332 00 0 2037 cx2a find out if we went off end 03034 0 31 071 3125 2038 cana l.c007-* =o077777 03035 0 74 003 3040 2039 tze pin020-* we went off end of memory, in fact 03036 0 31 062 3120 2040 cana l.c002-* =o000037 03037 0 64 003 3042 2041 tnz pin030-* 03040 3333 00 0 2042 pin020 cx3a 0 mod 32 (wraparound) 03041 0 06 056 3117 2043 ada l.c001-* so point to beginning again 2044 * 03042 2045 pin030 null 03042 3 17 000 0 2046 sta eb.inp,3 03043 0 07 065 3130 2047 lda l.c010-* =o1000 03044 3 16 002 0 2048 asa eb.tly,3 increment tally 03045 2049 pinbak return putin assm 01 07-08-86 13.165 fnp utility programs for mcs page 88 putone -- set up echo buffer 2050 ttls putone -- set up echo buffer 03047 2051 putone subr puo,(q) 2052 2053 this subroutine allocates an echo buffer (if 2054 necessary) and puts a character in it, updating 2055 the "inecho" flag. it is called by puteco and eforce. 2056 2057 q contains character to echo 2058 on exit, x3 points to the echo buffer if any 2059 returns to callpoint if echo buffer full or no 2060 buffer could be allocated, otherwise to one location 2061 further on 2062 03055 1 07 025 0 2063 lda t.echo,1 is there an echo buffer? 03056 0 74 004 3062 2064 tze puo005-* no, we'll have to get one 03057 4 10 037 3116 2065 tsy a.c004-*,* (setbpt) yes, get virtual address 03060 4333 00 0 2066 cax3 03061 0 71 013 3074 2067 tra puo010-* proceed 2068 set up echo buffer end of binary card 00000046 03062 473 040 0 2069 puo005 ilq bufsiz 03063 4 10 030 3113 2070 tsy a.c001-*,* (getubf) get a buffer 03064 0 71 017 3103 2071 tra puo020-* couldn't get one, never mind 2072 * 03065 1 17 025 0 2073 sta t.echo,1 now we have it, save (absolute) address 03066 0 47 566 2654 2074 ldq putsq-* copy char back to q 03067 3333 00 0 2075 cx3a get (virtual) pointer to 03070 0 06 027 3117 2076 ada l.c001-* first data char. save it in 03071 3 17 000 0 2077 sta eb.inp,3 input and 03072 3 17 001 0 2078 sta eb.out,3 output pointers 03073 3 56 002 0 2079 stz eb.tly,3 initialize tally 03074 0 10 670 2764 2080 puo010 tsy putin-* put the character in 03075 0 71 004 3101 2081 tra puobak-* if no more room, skip other stuff 2082 03076 0 76 751 3047 2083 aos putone-* 03077 673 001 0 2084 ila 1 mark the echoed flag 03100 4 72 015 3115 2085 orsa a.c003-*,* inecho 03101 2086 puobak return putone 2087 03103 2088 puo020 null allocation failure, meter it 03103 2089 cmeter mincs,m.inaf,l.c011-* 03112 0 71 767 3101 2090 tra puobak-* 2091 2092 03113 0 05343 1 2093 a.c001 ind getubf subr to get an unreserved buffer 03114 0 01652 1 2094 a.c002 ind oldpos 03115 0 01645 1 2095 a.c003 ind inecho 03116 0 04241 1 2096 a.c004 ind setbpt 2097 03117 3 00002 0 2098 l.c001 zero eb.dta,b.1 offset of first char. position assm 01 07-08-86 13.165 fnp utility programs for mcs page 89 putone -- set up echo buffer 03120 000037 0 2099 l.c002 oct 37 mask for mod 32 03121 000002 0 2100 l.c003 vfd 18/tfbel 03122 200000 0 2101 l.c004 vfd 18/tfecpx 03123 004000 0 2102 l.c005 vfd 18/tftbec 03124 100000 0 2103 l.c006 vfd 18/tffip 03125 077777 0 2104 l.c007 oct 077777 03126 001000 0 2105 l.c008 vfd 18/hslafl 03127 001000 0 2106 l.c009 vfd 18/tflfec 03130 001000 0 2107 l.c010 oct 1000 end of binary card 00000047 03131 000001 0 2108 l.c011 dec 1 2109 2110 03132 2111 puttmp bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 90 negotiated echo handler 2112 ttls negotiated echo handler 2113 2114 called by inproc when would normally 2115 do echoplex echoing 2116 x1 is tib, return a nonzero if echoed, 0 if did not. 2117 inchar in a 2118 03133 2119 echngo subr eng 2120 03136 0 17 044 3202 2121 sta engich-* 03137 1 07 036 0 2122 lda t.flg3,1 breakall? 03140 0 31 037 3177 2123 cana l.s002-* =tfbral no echo if not 03141 0 74 031 3172 2124 tze eng180-* 03142 1 20 042 0 2125 szn t.scll,1 is there room left to echo? 03143 0 74 027 3172 2126 tze eng180-* no, dont attempt to echo. 03144 0 07 036 3202 2127 lda engich-* take a look at char 2128 2129 check char's bit in table. 2130 03145 022 017 0 2131 iana 15 get low bits 03146 0 06 030 3176 2132 ada l.s001-* build instruction 03147 0 17 011 3160 2133 sta eng020-* 03150 0 07 032 3202 2134 lda engich-* get char 03151 2337 04 0 2135 arl 4 get high bits 03152 0 17 031 3203 2136 sta engtmp-* 03153 1 03 044 0 2137 ldx2 t.entp,1 damn well better be table 03154 0 64 002 3156 2138 tnz 2 or r0 screwed up 03155 2139 die 99 03156 0 02 025 3203 2140 adcx2 engtmp-* build word address 03157 2 07 003 0 2141 lda dl.hsz,2 get table word 03160 2142 eng020 bss 1 test high bit 03161 0 75 011 3172 2143 tmi eng180-* this is a true break, no echo. 2144 2145 now we have to echo this thing. 2146 03162 0 47 020 3202 2147 ldq engich-* 03163 673 000 0 2148 ila 0 03164 0332 00 0 2149 cax2 03165 4 10 014 3201 2150 tsy a.s002-*,* until we have something cleverer 2151 03166 1 56 043 0 2152 stz t.sncc,1 we echoed this char, so zero the 2153 protocol sync count of chars not 2154 echoed since echoed char. 2155 2156 char has been echoed, update line length left. 03167 673 777 0 2157 ila -1 03170 1 16 042 0 2158 asa t.scll,1 decrement line space left 2159 and return nonzero a. 03171 0 71 003 3174 2160 tra engret-* 2161 assm 01 07-08-86 13.165 fnp utility programs for mcs page 91 negotiated echo handler 03172 1 56 042 0 2162 eng180 stz t.scll,1 turn off all further echnego 03173 673 000 0 2163 ila 0 say that we did not echo 2164 inproc will aos t.sncc apropriately 03174 2165 engret return echngo 2166 end of binary card 00000048 03176 0336 00 0 2167 l.s001 als 0 instruction template 03177 000020 0 2168 l.s002 vfd 18/tfbral 03200 0 16000 3 2169 a.s001 ind ecgifl 03201 0 02636 1 2170 a.s002 ind puteco 03202 2171 engich bss 1 03203 2172 engtmp bss 1 2173 assm 01 07-08-86 13.165 fnp utility programs for mcs page 92 outprc subroutine -- for output subop 2174 ttls outprc subroutine -- for output subop 2175 subroutine called by both lsla_man and hsla_man 2176 to process output subop of dcw list 2177 2178 x1 - virtual tib address 2179 000077 2180 opend bool 77 000001 2181 pradd equ 1 000002 2182 kyadd equ 2 000003 2183 outmsg equ 3 000004 2184 repeat equ 4 000004 2185 maxctl equ 4 maximum number of words in addressing string 2186 777000 2187 nbftmk bool /buftmk 2188 2189 03204 2190 outprc subr out,(a,q,x2,x3) 2191 2192 03223 1 07 023 0 2193 lda t.dcwa,1 03224 0 37 252 3476 2194 ora l.o001-* 0,b.0 03225 4333 00 0 2195 cax3 point to first character of "output" 2196 03226 2197 out010 null 03226 373 300 0 2198 iacx3 0,b.1 next char. 03227 3 07 200 0 2199 lda 0,3,b.0 pick it up 03230 0 27 247 3477 2200 cmpa l.o002-* =o000400 03231 0 65 003 3234 2201 tpl out020-* if less than 400(8), 03232 4 10 265 3517 2202 tsy a.o001-*,* literal char is to be inserted in buffer 2203 (insert) 03233 0 71 773 3226 2204 tra out010-* and get next 2205 03234 2206 out020 null 03234 022 377 0 2207 iana 255 we know high-order bit is on, so turn 2208 it off for easier comparison 03235 0 74 213 3450 2209 tze out090-* die if result is zero 2210 03236 422 077 0 2211 icmpa opend 03237 0 74 223 3462 2212 tze out200-* end of subop 2213 03240 422 003 0 2214 icmpa kyadd+1 printer or keyboard addressing? 03241 0 65 046 3307 2215 tpl out050-* 2216 yes, get device table pointer 2217 but first check and make sure tfctrl is on 03242 6333 00 0 2218 caq 03243 0 07 235 3500 2219 lda l.o003-* =tfctrl 03244 1 31 001 0 2220 cana t.flg,1 03245 0 74 761 3226 2221 tze out010-* if it isn't, skip this item 2222 03246 0 03 252 3520 2223 ldx2 a.o002-* address of control tables assm 01 07-08-86 13.165 fnp utility programs for mcs page 93 outprc subroutine -- for output subop end of binary card 00000049 03247 2 03 001 0 2224 ldx2 ct.dev,2 03250 1 02 017 0 2225 adcx2 t.type,1 03251 2 03 777 0 2226 ldx2 -1,2 now points to correct device tab entry 03252 7333 00 0 2227 cqa restore control char 03253 422 002 0 2228 icmpa kyadd 03254 0 74 021 3275 2229 tze out030-* 03255 2 07 003 0 2230 lda dt.prt,2 get pointer to printer addr sequence 03256 1 20 013 0 2231 szn t.ocur,1 if there's already an output chain, 03257 0 74 015 3274 2232 tze out028-* 03260 0 17 234 3514 2233 sta otemp-* put printer addr ahead of it 03261 1 47 012 0 2234 ldq t.ocp,1 which means putting it at head of pending output 03262 1 07 014 0 2235 lda t.olst,1 get end of t.ocur chain 03263 4 10 237 3522 2236 tsy a.o004-*,* (setbpt) virtualize it 03264 0332 00 0 2237 cax2 03265 2 57 000 0 2238 stq bf.nxt,2 hook t.ocp chain on at end 03266 1 07 013 0 2239 lda t.ocur,1 this becomes new t.ocp chain 03267 1 17 012 0 2240 sta t.ocp,1 2241 03270 1 56 013 0 2242 stz t.ocur,1 clear current output chain 03271 1 56 014 0 2243 stz t.olst,1 03272 1 56 016 0 2244 stz t.ocnt,1 2245 03273 0 07 221 3514 2246 lda otemp-* restore a register 03274 2247 out028 null 03274 0 71 002 3276 2248 tra 2 skip over fetch of kybd string 03275 2249 out030 null 03275 2 07 002 0 2250 lda dt.key,2 get keyboard addr sequence 03276 0 37 200 3476 2251 ora l.o001-* 0,b.0 03277 0332 00 0 2252 cax2 point to beginning of string 03300 2 47 200 0 2253 ldq 0,2,b.0 get character count in q 2254 03301 2255 out040 null 03301 273 300 0 2256 iacx2 0,b.1 get next char. 03302 2 07 200 0 2257 lda 0,2,b.0 03303 4 10 214 3517 2258 tsy a.o001-*,* (insert) put it in output buffer 03304 573 777 0 2259 iaq -1 more? 03305 0 64 774 3301 2260 tnz out040-* yes, get next addressing char 03306 0 71 720 3226 2261 tra out010-* else get next output char 2262 03307 2263 out050 null 03307 422 003 0 2264 icmpa outmsg thread output message into chain? 03310 0 64 136 3446 2265 tnz out080-* 2266 yes 03311 0 56 205 3516 2267 stz ohldot-* turn off local flag 03312 1 07 012 0 2268 lda t.ocp,1 get pointer to head of output chain 03313 0 74 126 3441 2269 tze out075-* if there isn't one, nothing to do 03314 6333 00 0 2270 caq save absolute address in q 03315 4 10 205 3522 2271 tsy a.o004-*,* (setbpt) end of binary card 00000050 assm 01 07-08-86 13.165 fnp utility programs for mcs page 94 outprc subroutine -- for output subop 03316 0332 00 0 2272 cax2 get virtual in x2 03317 2 07 001 0 2273 lda bf.flg,2 get buffer flags 03320 0 31 167 3507 2274 cana l.o010-* check hold output buffer flag 03321 0 74 015 3336 2275 tze out054-* not on - usual outmsg 03322 1 56 013 0 2276 stz t.ocur,1 2277 03323 0 76 173 3516 2278 aos ohldot-* turn on local flag 03324 1 57 014 0 2279 out052 stq t.olst,1 03325 0 31 163 3510 2280 cana l.o011-* check last buffer in message flag 03326 0 64 010 3336 2281 tnz out054-* yes - end of partial chain 03327 2 07 000 0 2282 lda bf.nxt,2 advance to next buffer 03330 0 74 006 3336 2283 tze out054-* end of chain 03331 6333 00 0 2284 caq hang on to absolute address 03332 4 10 170 3522 2285 tsy a.o004-*,* (setbpt) virtualize address 03333 0332 00 0 2286 cax2 03334 2 07 001 0 2287 lda bf.flg,2 get buffer flags 03335 0 71 767 3324 2288 tra out052-* loop 03336 1 47 012 0 2289 out054 ldq t.ocp,1 get pointer to output chain 03337 1 20 013 0 2290 szn t.ocur,1 are we currently working on one? 03340 0 64 013 3353 2291 tnz out060-* 03341 1 57 013 0 2292 stq t.ocur,1 no, make head of chain current buffer 03342 7333 00 0 2293 cqa 03343 4 10 157 3522 2294 tsy a.o004-*,* setbpt 03344 773 002 0 2295 iaa bf.dta and point t.occh to first char slot 03345 0 37 131 3476 2296 ora l.o001-* =0,b.0 03346 1 17 015 0 2297 sta t.occh,1 03347 1 07 013 0 2298 lda t.ocur,1 03350 0 20 146 3516 2299 szn ohldot-* check local flag 03351 0 74 011 3362 2300 tze out070-* 03352 0 71 067 3441 2301 tra out075-* skip all this other stuff 2302 03353 2303 out060 null there is a chain, make sure 03353 1 07 014 0 2304 lda t.olst,1 t.olst really points to last buffer 03354 4 10 146 3522 2305 tsy a.o004-*,* (setbpt) get virtual address 03355 0332 00 0 2306 cax2 03356 2 20 000 0 2307 szn bf.nxt,2 03357 0 74 002 3361 2308 tze 2 03360 2309 die 11 2310 03361 2 57 000 0 2311 stq bf.nxt,2 now hook new chain to last buffer 03362 2312 out070 null 03362 1 76 016 0 2313 aos t.ocnt,1 increment output buffer count 03363 7333 00 0 2314 cqa convert to virtual for local storage 03364 4 10 136 3522 2315 tsy a.o004-*,* (setbpt) end of binary card 00000051 03365 0332 00 0 2316 cax2 03366 0 13 127 3515 2317 stx2 obufad-* save this address for later 03367 1 07 002 0 2318 lda t.flg2,1 block-acknowledgement mode? 03370 0 34 116 3506 2319 ana l.o009-* =tfblak+tfofc 03371 0 27 115 3506 2320 cmpa l.o009-* see if they're both on assm 01 07-08-86 13.165 fnp utility programs for mcs page 95 outprc subroutine -- for output subop 03372 0 64 031 3423 2321 tnz out071-* no, proceed 03373 2 07 001 0 2322 lda bf.tly,2 yes, we must check to see if buffer ends in etb 03374 0 34 115 3511 2323 ana l.o012-* buftmk 03375 773 777 0 2324 iaa -1 back up one to get right word 03376 0335 01 0 2325 lrs 1 separate word and char parts of address 03377 0 06 113 3512 2326 ada l.o013-* (bf.dta,b.0) a now points to word of last char 03400 4336 00 0 2327 qls 0 one more char? 03401 0 65 002 3403 2328 tpl 2 no 03402 0 37 111 3513 2329 ora l.o014-* (0,b.1), yes, account for it 03403 0 06 112 3515 2330 ada obufad-* add address of base of buffer 03404 0332 00 0 2331 cax2 x2 now points to last char 03405 1 07 046 0 2332 lda t.ofch,1 get flow control chars 03406 2337 11 0 2333 arl 9 isolate eond-of-block char 03407 2 27 200 0 2334 cmpa 0,2,b.0 is this it? 03410 0 64 013 3423 2335 tnz out071-* no, proceed normally 03411 1 76 047 0 2336 aos t.omct,1 yes, count the message 03412 0 03 103 3515 2337 ldx2 obufad-* and break chain here 03413 3332 00 0 2338 cx2a convert it ot absolute for permanent storage 03414 4 10 107 3523 2339 tsy a.o005-*,* cvabs 03415 1 17 014 0 2340 sta t.olst,1 03416 2 07 000 0 2341 lda bf.nxt,2 keep the remains in t.ocp 03417 1 17 012 0 2342 sta t.ocp,1 03420 2 56 000 0 2343 stz bf.nxt,2 detach the chain 03421 0 74 013 3434 2344 tze out073-* if there is no more, check for sendout 03422 0 71 017 3441 2345 tra out075-* else we're done -- don't turn on tfwrit 03423 0 03 072 3515 2346 out071 ldx2 obufad-* restore current buffer address 03424 2 47 000 0 2347 ldq bf.nxt,2 search chain for new end 03425 0 64 735 3362 2348 tnz out070-* 2349 03426 0 07 057 3505 2350 lda l.o008-* (=tfwrit) turn on tfwrit now 03427 1 72 001 0 2351 orsa t.flg,1 not before. 2352 03430 3332 00 0 2353 cx2a 03431 4 10 072 3523 2354 tsy a.o005-*,* (cvabs) 03432 1 17 014 0 2355 sta t.olst,1 03433 1 56 012 0 2356 stz t.ocp,1 zero output chain pointer to allow 2357 for new one end of binary card 00000052 03434 673 002 0 2358 out073 ila bufthr get output buffer threshold 03435 1 27 016 0 2359 cmpa t.ocnt,1 if we're not over it, 03436 0 75 003 3441 2360 tmi out075-* 03437 473 105 0 2361 ilq sndout ask for more output 03440 4 10 061 3521 2362 tsy a.o003-*,* denq 2363 03441 2364 out075 null 03441 373 300 0 2365 iacx3 0,b.1 get next char 03442 3 07 200 0 2366 lda 0,3,b.0 had better be end of subop 03443 0 27 037 3502 2367 cmpa l.o005-* =477 03444 0 74 016 3462 2368 tze out200-* 03445 2369 die 7 assm 01 07-08-86 13.165 fnp utility programs for mcs page 96 outprc subroutine -- for output subop 2370 03446 2371 out080 null only remaining possibility 03446 422 004 0 2372 icmpa repeat is repeat 03447 0 74 002 3451 2373 tze out100-* 03450 2374 out090 null 03450 2375 die 9 2376 03451 2377 out100 null 03451 3 07 300 0 2378 lda 0,3,b.1 get character to be repeated 03452 373 201 0 2379 iacx3 1,b.0 03453 3 47 200 0 2380 ldq 0,3,b.0 get repeat count 03454 0 64 002 3456 2381 tnz 2 where 0 means 512 03455 0 47 026 3503 2382 ldq l.o006-* =512 2383 03456 2384 out110 null 03456 4 10 041 3517 2385 tsy a.o001-*,* insert 03457 573 777 0 2386 iaq -1 repeat count exhausted? 03460 0 64 776 3456 2387 tnz out110-* no, do it again 03461 0 71 545 3226 2388 tra out010-* yes, get next item 2389 2390 03462 2391 out200 null end of output subop 03462 3333 00 0 2392 cx3a 03463 0 34 021 3504 2393 ana l.o007-* =o077777 convert to word addressing 03464 773 001 0 2394 iaa 1 point to next word 03465 6333 00 0 2395 caq save new address 03466 1 26 023 0 2396 sba t.dcwa,1 get number of words processed 03467 0 17 025 3514 2397 sta otemp-* 03470 1 07 024 0 2398 lda t.dcwl,1 decrement dcw length accordingly 03471 0 26 023 3514 2399 sba otemp-* 03472 1 17 024 0 2400 sta t.dcwl,1 03473 1 57 023 0 2401 stq t.dcwa,1 save new dcw list pointer 03474 2402 return outprc 2403 * 2404 2405 03476 2 00000 0 2406 l.o001 zero 0,b.0 for character addressing 03477 000400 0 2407 l.o002 oct 400 03500 000400 0 2408 l.o003 vfd 18/tfctrl 03501 000004 0 2409 l.o004 vfd 18/maxctl 03502 000477 0 2410 l.o005 oct 477 end of binary card 00000053 03503 001000 0 2411 l.o006 dec 512 03504 077777 0 2412 l.o007 oct 77777 03505 000001 0 2413 l.o008 vfd 18/tfwrit 03506 004100 0 2414 l.o009 vfd 18/tfblak+tfofc 03507 001000 0 2415 l.o010 vfd 18/bffhld hold output buffer flag 03510 040000 0 2416 l.o011 vfd 18/bfflst last buffer in message flag 03511 000777 0 2417 l.o012 vfd 18/buftmk 03512 2 00002 0 2418 l.o013 zero bf.dta,b.0 assm 01 07-08-86 13.165 fnp utility programs for mcs page 97 outprc subroutine -- for output subop 03513 3 00000 0 2419 l.o014 zero 0,b.1 2420 03514 2421 otemp bss 1 temporary storage 03515 2422 obufad bss 1 temporary for buffer address 03516 2423 ohldot bss 1 flag - on if hold output buffers set 2424 03517 0 03524 1 2425 a.o001 ind insert 03520 0 01000 3 2426 a.o002 ind ctrl 03521 0 02000 3 2427 a.o003 ind denq 03522 0 04241 1 2428 a.o004 ind setbpt 03523 0 04275 1 2429 a.o005 ind cvabs 2430 assm 01 07-08-86 13.165 fnp utility programs for mcs page 98 insert -- subroutine to insert a char into output chain 2431 ttls insert -- subroutine to insert a char into output chain 2432 2433 insert called by outprc to insert char (passed in a) 2434 03524 2435 insert subr ins,(a,q,x2,x3) 2436 2437 03543 1 20 013 0 2438 szn t.ocur,1 is there a buffer chain? 03544 0 64 015 3561 2439 tnz ins010-* 2440 no, must allocate a buffer 03545 473 040 0 2441 ilq bufsiz 03546 4 10 105 3653 2442 tsy a.p001-*,* getbfh 03547 2443 die 10 die if we couldn't get one 2444 03550 1 17 013 0 2445 sta t.ocur,1 this is now current buffer 03551 1 17 014 0 2446 sta t.olst,1 last one, too 03552 4 10 102 3654 2447 tsy a.p002-*,* setbpt 03553 4333 00 0 2448 cax3 now have virtual address in a and x3 03554 0 17 076 3652 2449 sta insbuf-* save it for later also end of binary card 00000054 03555 773 002 0 2450 iaa bf.dta point output char. pointer at 03556 0 37 065 3643 2451 ora l.p001-* (0,b.0) first data char of new chain 03557 1 17 015 0 2452 sta t.occh,1 03560 0 71 041 3621 2453 tra ins030-* 2454 03561 2455 ins010 null find out if last buffer is full 03561 1 07 014 0 2456 lda t.olst,1 03562 4 10 072 3654 2457 tsy a.p002-*,* (setbpt) 03563 4333 00 0 2458 cax3 03564 4 10 060 3644 2459 tsy l.p002-*,* =addr(fulbuf) 2460 returns normally if full 2461 or +1 with tally in a 03565 0 71 015 3602 2462 tra ins020-* 03566 0 50 064 3652 2463 stx3 insbuf-* save virtual address for later 03567 0335 01 0 2464 lrs 1 get tally in words but save 03570 0 17 061 3651 2465 sta itemp1-* low-order bit in q 03571 3333 00 0 2466 cx3a 03572 773 002 0 2467 iaa bf.dta 03573 0 06 056 3651 2468 ada itemp1-* 03574 0 37 047 3643 2469 ora l.p001-* 0,b.0 03575 4333 00 0 2470 cax3 03576 4336 00 0 2471 qls 0 was tally odd? 03577 0 65 027 3626 2472 tpl ins040-* 03600 373 300 0 2473 iacx3 0,b.1 yes, bump data pointer 03601 0 71 025 3626 2474 tra ins040-* 2475 03602 2476 ins020 null 03602 473 040 0 2477 ilq bufsiz buffer was full, get another 03603 4 10 050 3653 2478 tsy a.p001-*,* getbfh 03604 2479 die 10 die if we can't assm 01 07-08-86 13.165 fnp utility programs for mcs page 99 insert -- subroutine to insert a char into output chain 2480 03605 6333 00 0 2481 caq hang on to absoute address 03606 1 07 014 0 2482 lda t.olst,1 03607 4 10 045 3654 2483 tsy a.p002-*,* (setbpt) 03610 0332 00 0 2484 cax2 03611 2 57 000 0 2485 stq bf.nxt,2 save in old last buffer's 2486 forward pointer 03612 7333 00 0 2487 cqa have to revirtualize 03613 4 10 041 3654 2488 tsy a.p002-*,* to make sure pte is right 03614 4333 00 0 2489 cax3 save virtual address 03615 0 17 035 3652 2490 sta insbuf-* store it for later also 03616 773 002 0 2491 iaa bf.dta point to first data char 03617 0 37 024 3643 2492 ora l.p001-* 0,b.0 03620 1 57 014 0 2493 stq t.olst,1 set new last buffer 03621 2494 ins030 null mark this buffer as containing control chars 03621 6333 00 0 2495 caq save the a reg. 03622 0 07 026 3650 2496 lda l.p006-* =bffctl 03623 3 72 001 0 2497 orsa bf.flg,3 end of binary card 00000055 03624 7333 00 0 2498 cqa 2499 03625 4333 00 0 2500 cax3 2501 2502 03626 2503 ins040 null x3 points to where char should go 03626 0 07 711 3537 2504 lda inssa-* get the char 03627 3 17 200 0 2505 sta 0,3,b.0 store it in buffer 03630 0 03 022 3652 2506 ldx2 insbuf-* get addressable pointer to buffer 03631 2 07 001 0 2507 lda bf.tly,2 get the old tally 03632 0 34 013 3645 2508 ana l.p003-* =buftmk 03633 773 001 0 2509 iaa 1 bump it 03634 0 17 015 3651 2510 sta itemp1-* save it 03635 0 07 012 3647 2511 lda l.p005-* =^buftmk 03636 2 32 001 0 2512 ansa bf.tly,2 zero out tally field 03637 0 07 012 3651 2513 lda itemp1-* so as to replace it 03640 2 72 001 0 2514 orsa bf.tly,2 03641 2515 return insert 2516 2517 2518 03643 2 00000 0 2519 l.p001 zero 0,b.0 character addressing 03644 0 03655 1 2520 l.p002 ind fulbuf routine to see if buffer full 03645 000777 0 2521 l.p003 vfd 18/buftmk 03646 000004 0 2522 l.p004 dec 4 03647 777000 0 2523 l.p005 vfd 18/nbftmk complement mask for tally 03650 002000 0 2524 l.p006 vfd 18/bffctl 2525 03651 2526 itemp1 bss 1 temporary storage 03652 2527 insbuf bss 1 virtual address of t.olst 2528 assm 01 07-08-86 13.165 fnp utility programs for mcs page 100 insert -- subroutine to insert a char into output chain 03653 0 05343 1 2529 a.p001 ind getbfh buffer allocation routine 03654 0 04241 1 2530 a.p002 ind setbpt 2531 assm 01 07-08-86 13.165 fnp utility programs for mcs page 101 fulbuf subroutine finds out if buffer is full 2532 ttls fulbuf subroutine finds out if buffer is full 2533 2534 this subroutine, passed a buffer address in 2535 x3, looks to see if tally indicates that buffer 2536 is full. 2537 2538 returns to callpoint+1 if buffer is full 2539 else to callpoint+2 with tally in a 2540 03655 2541 fulbuf subr ful 2542 03660 3 07 001 0 2543 lda bf.siz,3 03661 2337 17 0 2544 arl 15 isolate size code 03662 773 001 0 2545 iaa 1 03663 0 01 013 3676 2546 mpf l.f002-* =bufsiz 2547 mpf comes out double so it gives number of chars 03664 0 66 011 3675 2548 sbq l.f001-* =4 (4 chars worth of header) 03665 0 57 013 3700 2549 stq ftemp-* 03666 3 07 001 0 2550 lda bf.tly,3 get tally 03667 0 34 010 3677 2551 ana l.f003-* =buftmk 03670 0 27 010 3700 2552 cmpa ftemp-* tally>=size? 03671 0 65 002 3673 2553 tpl 2 yes, regular return 03672 0 76 763 3655 2554 aos fulbuf-* else return+1 03673 2555 return fulbuf end of binary card 00000056 2556 2557 03675 000004 0 2558 l.f001 dec 4 number words of buffer header 03676 000040 0 2559 l.f002 vfd 18/bufsiz 03677 000777 0 2560 l.f003 vfd 18/buftmk mask for buffer tally 03700 2561 ftemp bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 102 metering subroutines 2562 ttls metering subroutines 2563 2564 ************************************************************************ 2565 * 2566 * meterc -- adds one to a "counting" meter 2567 * 2568 * index of meter to be incremented is passed in q reg. 2569 * 2570 ************************************************************************ 2571 03701 2572 meterc subr mtc,(inh,q,x3) 2573 03716 0 44 047 3765 2574 ldi l.d001-* (o024000) inhibit overflow 03717 0 67 134 4053 2575 cmpq cmax-* is value legal? 03720 0 45 003 3723 2576 tnc mtc010-* 03721 0 76 043 3764 2577 aos meterr-* if not, meter invalid call 03722 0 71 003 3725 2578 tra mtcbak-* and return 2579 03723 2580 mtc010 null 03723 0 41 771 3714 2581 ldx3 mtcsq-* ok, get meter name into x3 03724 4 76 044 3770 2582 aos cmetrs-*,* increment it 03725 2583 mtcbak return meterc 2584 2585 2586 ************************************************************************ 2587 * 2588 * metert -- increments a "time" meter 2589 * 2590 * index of meter is passed in q reg. 2591 * increment (in microseconds) is passed in a reg. 2592 * 2593 ************************************************************************ 2594 03727 2595 metert subr mtt,(inh,a,q,x3) end of binary card 00000057 2596 03747 0 44 016 3765 2597 ldi l.d001-* (o024000) inhibit overflow 03750 0 67 017 3767 2598 cmpq tmax-* is meter index too big? 03751 0 45 003 3754 2599 tnc mtt010-* if so, meter that 03752 0 76 012 3764 2600 aos meterr-* 03753 0 71 007 3762 2601 tra mttbak-* and return 2602 03754 4336 01 0 2603 mtt010 qls 1 multiply by two for indexing 03755 0 57 011 3766 2604 stq mttemp-* (time meters are 2 words each) 03756 0 41 010 3766 2605 ldx3 mttemp-* index into x3 03757 0335 22 0 2606 lrs 18 time into aq 03760 4 15 074 4054 2607 adaq tmetrs-*,* increment meter 03761 4 14 073 4054 2608 staq tmetrs-*,* 03762 2609 mttbak return 2610 assm 01 07-08-86 13.165 fnp utility programs for mcs page 103 metering subroutines 2611 2612 03764 0 00000 0 2613 meterr zero invalid meter count 2614 2615 2616 03765 024000 0 2617 l.d001 oct 024000 "inhibit overflow" & "inhibit interrupts" 2618 2619 03766 2620 mttemp bss 1 03767 0 00062 0 2621 tmax zero tmaxd/2 maximum value for "time" meters 2622 2623 03770 3 03771 1 2624 cmetrs ind *+1,3 "count" meters 03771 2625 bss 50 04053 0 00062 0 2626 cmax zero *-cmetrs-1 maximum value for a count meter 2627 2628 04054 3 04056 1 2629 tmetrs ind tmorg,3 "timing" meters 04055 233100 0 04056 2630 even 04056 2631 tmorg null 04056 2632 bss 100 000144 2633 tmaxd equ *-tmorg assm 01 07-08-86 13.165 fnp utility programs for mcs page 104 virtual/absolute address conversion routines 2634 ttls virtual/absolute address conversion routines 2635 ************************************************************************ 2636 * 2637 * setptw 2638 * converts an 18 bit absolute address to a 15 bit virtual 2639 * address and sets up the page table entry in the cpu page 2640 * table. this routine is only required if more than 32k of 2641 * memory is configured for a dn6670. a 'tra -1' is stored into 2642 * setptw+1 by init if otherwise. 2643 * 2644 * input: 2645 * a reg - 18 bit absolute address 2646 * 2647 * output: 2648 * a reg - 15 bit virtual address 2649 * 2650 * modified registers: none 2651 * 2652 ************************************************************************ 2653 2654 a 'tra -1,*' is stored in setptw+1 by init if 2655 only 32k is configured 04222 2656 setptw subr ptw,(inh,x2) cannot allow interruptions end of binary card 00000058 04234 4 03 104 4340 2657 ldx2 a.v001-*,* .crpte 04235 0 10 025 4262 2658 tsy setpte-* 04236 0 37 104 4342 2659 ora l.v001-* concatenate with window address 04237 2660 return setptw all done 2661 2662 2663 ************************************************************************ 2664 * 2665 * setbpt 2666 * like setptw except used for buffer addresses. sets pte for buffer 2667 * window rather than general address window 2668 * 2669 ************************************************************************ 2670 04241 2671 setbpt subr bpt,(inh,x2) 04253 0 27 071 4344 2672 cmpa l.v003-* =o100000 04254 0 75 004 4260 2673 tmi bptbak-* not in high memory, leave it alone 04255 4 03 064 4341 2674 ldx2 a.v002-*,* .crbpe 04256 0 10 004 4262 2675 tsy setpte-* to do the work 04257 0 37 064 4343 2676 ora l.v002-* (bwndow) concatenate window base 04260 2677 bptbak return setbpt assm 01 07-08-86 13.165 fnp utility programs for mcs page 105 virtual/absolute address conversion routines 2678 eject 2679 ************************************************************************ 2680 * 2681 * setpte 2682 * common subroutine used to set a page table entry 2683 * 2684 * input: 2685 * a reg - 18 bit absolute address 2686 * x2 - address of page table entry 2687 * 2688 * output: 2689 * a reg - low-order 8 bits of virtual address (offset in page) 2690 * 2691 ************************************************************************ 2692 04262 2693 setpte subr spt 04265 0 17 060 4345 2694 sta sargsv-* save to provide offset 04266 022 400 0 2695 iana -256 get page number 04267 122 040 0 2696 iora pte.a turn on active bit 04270 2 17 000 0 2697 sta 0,2 put in relevant page table entry 04271 0 07 054 4345 2698 lda sargsv-* get page offset 04272 022 377 0 2699 iana 255 04273 2700 return setpte 2701 2702 2703 ************************************************************************ 2704 * 2705 * cvabs 2706 * routine to convert virtual address to absolute. 2707 * assumes corresponding page table entry (buffer or tib/sfcm) 2708 * points to correct page. 2709 * 2710 * input: 2711 * a reg - 15-bit virtual address 2712 * 2713 * output: 2714 * a reg - corresponding 18-bit absolute address 2715 * 2716 ************************************************************************ 2717 04275 2718 cvabs subr cva,(inh,q,x2) end of binary card 00000059 04312 0 27 031 4343 2719 cmpa l.v002-* (bwndow) make sure address is in a window 04313 0 75 023 4336 2720 tmi cvabak-* it's below 04314 0 27 030 4344 2721 cmpa l.v003-* (=o100000) not a virtual address at all 04315 0 65 021 4336 2722 tpl cvabak-* it's above 04316 6333 00 0 2723 caq hang on to address 04317 0 27 023 4342 2724 cmpa l.v001-* (window) which window is it in? 04320 0 65 004 4324 2725 tpl cva010-* tib/sfcm 04321 4 03 020 4341 2726 ldx2 a.v002-*,* (.crbpe) buffer assm 01 07-08-86 13.165 fnp utility programs for mcs page 106 virtual/absolute address conversion routines 04322 0 26 021 4343 2727 sba l.v002-* bwndow 04323 0 71 003 4326 2728 tra cva020-* 04324 4 03 014 4340 2729 cva010 ldx2 a.v001-*,* .crpte 04325 0 26 015 4342 2730 sba l.v001-* window 04326 0 17 020 4346 2731 cva020 sta cvaoff-* save offset within page 04327 2 07 000 0 2732 lda 0,2 get real address of page base 04330 222 040 0 2733 icana pte.a make sure it's active 04331 0 64 003 4334 2734 tnz cva030-* yes 04332 7333 00 0 2735 cqa no, restore original address 04333 0 71 003 4336 2736 tra cvabak-* return 04334 2737 cva030 null 04334 022 400 0 2738 iana -256 reduce to address only 04335 0 06 011 4346 2739 ada cvaoff-* add offset 04336 2740 cvabak return cvabs done 2741 000200 2742 pte.r bool 200 page table entry read only bit 000100 2743 pte.s bool 100 page table entry security bit 000040 2744 pte.a bool 40 page table entry active bit 077400 2745 window bool 77400 base address of paged memory 077000 2746 bwndow bool 77000 base address of buffer window 2747 04340 0 00702 0 2748 a.v001 ind .crpte 04341 0 00710 0 2749 a.v002 ind .crbpe 2750 04342 077400 0 2751 l.v001 vfd 18/window 04343 077000 0 2752 l.v002 vfd 18/bwndow 04344 100000 0 2753 l.v003 oct 100000 smallest address outside 32k 2754 04345 000000 0 2755 sargsv oct 0 storage for argument 04346 2756 cvaoff bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 107 move with paging on source or target address 2757 ttls move with paging on source or target address 2758 ************************************************************************ 2759 * 2760 * mvpgsc 2761 * this entry moves a block of data from an absolute location anywhere 2762 * in the fnp memory using the paging mechanism to a target in the lower 2763 * 32k of fnp memory. 2764 * 2765 * mvpgtg 2766 * this entry moves a block of data from the lower 32k of fnp memory 2767 * to a target anywhere in fnp memory using the paging mechanism. 2768 * 2769 * either entry can be directed to cross page boundaries and to start 2770 * and end anywhere in a page. each time a page boundary is crossed 2771 * the page table entry for the virtual window will be initialized. 2772 * 2773 * input registers: 2774 * x2 source address 2775 * x3 target address 2776 * q length of move 2777 * 2778 * output registers: 2779 * none 2780 * 2781 * modified registers: a, q, x2, x3 2782 * 2783 * unmodified registers: x1 2784 * 2785 ************************************************************************ 2786 2787 2788 * 2789 * entry points 2790 04347 2791 mvpgsc subr mps,(inh) end of binary card 00000060 04356 0 07 771 4347 2792 lda mvpgsc-* set up a common return point 04357 0 17 010 4367 2793 sta mvpgtg-* 04360 0 07 775 4355 2794 lda mpssi-* 04361 0 17 014 4375 2795 sta mptsi-* 04362 0 13 126 4510 2796 stx2 mabsad-* save as absolute address to virtualize 04363 0 07 121 4504 2797 lda l.w001-* 'cax2' inst to set up x2 with virtual address 04364 0 17 070 4454 2798 sta mvp080-* 04365 3333 00 0 2799 cx3a for checking non-paged address 04366 0 71 014 4402 2800 tra mvp000-* 2801 04367 2802 mvpgtg subr mpt,(inh) 04376 0 50 112 4510 2803 stx3 mabsad-* save as absolute address to virtualize 04377 0 07 106 4505 2804 lda l.w002-* 'cax3' inst to set up x3 with virtual address 04400 0 17 054 4454 2805 sta mvp080-* assm 01 07-08-86 13.165 fnp utility programs for mcs page 108 move with paging on source or target address 04401 3332 00 0 2806 cx2a for checking non-paged address 2807 * 2808 * check input values 2809 04402 2810 mvp000 null 04402 0 44 105 4507 2811 ldi l.w004-* (=o024000) inhibit overflow for logical adds 04403 0 17 107 4512 2812 sta mtstad-* save for compare 04404 0 57 105 4511 2813 stq mrmlen-* total length of move 04405 0 47 107 4514 2814 ldq mvplmm-* get last legal lower memory address 04406 0 67 104 4512 2815 cmpq mtstad-* is non-paged starting address below 2816 lower memory maximum? 04407 0 65 002 4411 2817 tpl 2 yes 04410 2818 die 14 no. this shouldn't happen 04411 0 06 100 4511 2819 ada mrmlen-* calculate ending non-paged address 04412 773 777 0 2820 iaa -1 04413 0 17 077 4512 2821 sta mtstad-* save for compare 04414 0 67 076 4512 2822 cmpq mtstad-* is non-paged ending address below 2823 lower memory maximum? 04415 0 65 002 4417 2824 tpl 2 yes 04416 2825 die 14 no. this shouldn't happen end of binary card 00000061 04417 4 47 064 4503 2826 ldq a.w001-*,* (.crmem) get last legal absolute address 04420 0 67 070 4510 2827 cmpq mabsad-* is starting absolute address ok? 04421 0 65 002 4423 2828 tpl 2 yes 04422 2829 die 14 no. this shouldn't happen 04423 0 07 065 4510 2830 lda mabsad-* calculate ending absolute address 04424 0 06 065 4511 2831 ada mrmlen-* 04425 773 777 0 2832 iaa -1 04426 0 17 064 4512 2833 sta mtstad-* save for compare 04427 0 67 063 4512 2834 cmpq mtstad-* is this address ok? 04430 0 65 002 4432 2835 tpl 2 yes 04431 2836 die 14 no. this shouldn't happen 04432 0 47 057 4511 2837 ldq mrmlen-* is length of move > 0? 04433 0 64 002 4435 2838 tnz 2 yes 04434 2839 die 1 no. this shouldn't happen 2840 * 2841 * set up length of first move 2842 04435 0 07 053 4510 2843 lda mabsad-* calculate number of words in first page 04436 022 400 0 2844 iana -256 04437 0 06 047 4506 2845 ada l.w003-* (=256) 04440 0 26 050 4510 2846 sba mabsad-* now have it 04441 0 27 050 4511 2847 cmpa mrmlen-* will first pass move all? 04442 0 45 003 4445 2848 tnc mvp020-* no 04443 0 56 046 4511 2849 stz mrmlen-* yes 04444 0 71 006 4452 2850 tra mvp040-* go do it 2851 04445 2852 mvp020 null 04445 6333 00 0 2853 caq length of first move 04446 0 57 045 4513 2854 stq mvllmp-* save it for absolute address update assm 01 07-08-86 13.165 fnp utility programs for mcs page 109 move with paging on source or target address 04447 322 777 0 2855 iera -1 calculate remaining length of total move after 04450 773 001 0 2856 iaa 1 first pass 04451 0 16 040 4511 2857 asa mrmlen-* 2858 04452 2859 mvp040 null 04452 0 07 036 4510 2860 lda mabsad-* setup to virtualize absolute address 2861 * 2862 * virtualize source or target address 2863 04453 2864 mvp060 null outer move loop point 04453 0 10 547 4222 2865 tsy setptw-* virtualize and set ptw 2866 04454 000000 0 2867 mvp080 oct 0 this location is set to 'cax2' or 'cax3' inst 2868 2869 * 2870 * paged move loop 2871 04455 2872 mvp100 null move no more than one page here 04455 2 07 000 0 2873 lda 0,2 get one source word 04456 3 17 000 0 2874 sta 0,3 store in target 04457 273 001 0 2875 iacx2 1 update pointers 04460 373 001 0 2876 iacx3 1 04461 573 777 0 2877 iaq -1 is current page moved? 04462 0 64 773 4455 2878 tnz mvp100-* no. continue move 2879 * 2880 * check if whole move is finished 2881 04463 0 47 026 4511 2882 ldq mrmlen-* has everything been moved? 04464 0 74 015 4501 2883 tze mvpret-* yes. return 2884 * 2885 * update absolute address 2886 04465 0 07 023 4510 2887 lda mabsad-* update absolute address end of binary card 00000062 04466 0 06 025 4513 2888 ada mvllmp-* with length of last move pass 04467 0 17 021 4510 2889 sta mabsad-* 2890 * 2891 * set up length of next move pass 2892 04470 0 66 016 4506 2893 sbq l.w003-* (=256) update length of total remaining move 04471 0 57 020 4511 2894 stq mrmlen-* is it negative? 04472 0 75 004 4476 2895 tmi mvp110-* yes 04473 0 47 013 4506 2896 ldq l.w003-* (=256) no. move a whole page 04474 0 57 017 4513 2897 stq mvllmp-* 04475 0 71 756 4453 2898 tra mvp060-* move some more 2899 04476 2900 mvp110 null 04476 0 46 010 4506 2901 adq l.w003-* (=256) back up last subtract 04477 0 56 012 4511 2902 stz mrmlen-* last pass coming up 04500 0 71 753 4453 2903 tra mvp060-* go do it assm 01 07-08-86 13.165 fnp utility programs for mcs page 110 move with paging on source or target address 2904 04501 2905 mvpret null 04501 2906 return mvpgtg 2907 2908 04503 0 00651 0 2909 a.w001 ind .crmem last legal memory address 2910 04504 0332 00 0 2911 l.w001 cax2 04505 4333 00 0 2912 l.w002 cax3 04506 000400 0 2913 l.w003 dec 256 04507 024000 0 2914 l.w004 oct 024000 inhibit interrupts and overflow 2915 04510 000000 0 2916 mabsad oct 0 absolute address 04511 000000 0 2917 mrmlen oct 0 current remaining total length of move 04512 000000 0 2918 mtstad oct 0 test address value for legalness 04513 000000 0 2919 mvllmp oct 0 length of last move pass 04514 0 00000 0 2920 mvplmm zero move paged lower memory maximum address assm 01 07-08-86 13.165 fnp utility programs for mcs page 111 mcs space management routines 2921 ttls mcs space management routines 2922 ************************************************************************ 2923 * 2924 * format of buffer pool header 2925 * 2926 ************************************************************************ 2927 000000 2928 fp.fst equ 0 pointer to first free block 2929 2930 ************************************************************************ 2931 * 2932 * format of free block 2933 * 2934 ************************************************************************ 2935 000000 2936 fb.nxt equ 0 next block pointer 000001 2937 fb.siz equ 1 size of this block in words assm 01 07-08-86 13.165 fnp utility programs for mcs page 112 mcs space management routines 2938 eject 2939 ************************************************************************ 2940 * 2941 * subroutine to allocate buffer space in low memory. 2942 * the request is rounded up to a 'bufsiz' boundary 2943 * and removed from the full buffer pool. 2944 * 2945 * calling sequence: 2946 * 2947 * q = size of space to allocate 2948 * 2949 * returns: 2950 * 2951 * returns in line if request fails 2952 * takes skip return if request suceeds 2953 * x3 -> space allocated 2954 * 2955 ************************************************************************ 2956 04515 2957 getbuf subr gbf,(inh,a,q,x1) 04535 4 10 211 4746 2958 tsy a.y011-*,* (timein) record time entered 04536 7333 00 0 2959 cqa number of words to allocate end of binary card 00000063 04537 4 10 202 4741 2960 tsy a.y005-*,* (chksiz) check for valid size 04540 773 037 0 2961 iaa bufsiz-1 round to multiple of bufsiz 04541 022 740 0 2962 iana -bufsiz 04542 6333 00 0 2963 caq 04543 0 43 174 4737 2964 ldx1 a.y003-* =addr(.crnxa) start of chain 04544 4 10 176 4742 2965 tsy a.y006-*,* (getspc) allocate the space 04545 0 71 044 4611 2966 tra gbfnsp-* failed 04546 0 76 747 4515 2967 gbfok aos getbuf-* succeeded, setup skip return 04547 0 14 205 4754 2968 staq gbfaq-* safe store aq (smeter uses them) 04550 2969 smeter mincd,.mbufa,l.y001-* 04557 0 04 175 4754 2970 ldaq gbfaq-* restore them 2971 2972 * update .crnbf 2973 04560 0337 05 0 2974 ars bufshf convert from words to buffers 04561 322 777 0 2975 iera -1 complement 04562 773 001 0 2976 iaa 1 04563 4 16 152 4735 2977 asa a.y001-*,* update .crnbf 04564 4 10 164 4750 2978 tsy a.y013-*,* (setsc) set size code and clear buffer 2979 04565 2980 trace mt.get,0,(x3,gbfsq,getbuf,gbfsx1) 2981 04605 673 000 0 2982 gbfbak ila 0 indicate allocation call 04606 4 10 141 4747 2983 tsy a.y012-*,* extime 04607 2984 return getbuf end of binary card 00000064 2985 assm 01 07-08-86 13.165 fnp utility programs for mcs page 113 mcs space management routines 2986 * request for buffers failed. try cleaning up small space 2987 04611 4 10 125 4736 2988 gbfnsp tsy a.y002-*,* (=fresml) this does cleanup 04612 0 71 004 4616 2989 tra gbfng-* didn't do any good 04613 4 10 127 4742 2990 tsy a.y006-*,* (getspc) retry request 04614 0 71 002 4616 2991 tra gbfng-* still fails 04615 0 71 731 4546 2992 tra gbfok-* this made request work 2993 04616 2994 gbfng smeter mincs,.malof,l.y001-* 04625 0 71 760 4605 2995 tra gbfbak-* assm 01 07-08-86 13.165 fnp utility programs for mcs page 114 mcs space management routines 2996 eject 2997 ************************************************************************ 2998 * 2999 * procedure for getting a small amount of memory. the 3000 * calling sequence is the same as for getbuf, except 3001 * the request is rounded to an even number, and the returned 3002 * address will only be on an even boundary 3003 * 3004 ************************************************************************ 3005 04626 3006 getmem subr gtm,(inh,a,q,x1) 04646 4 10 100 4746 3007 tsy a.y011-*,* timein 04647 7333 00 0 3008 cqa word count 04650 4 10 071 4741 3009 tsy a.y005-*,* (chksiz) check for valid size 04651 773 001 0 3010 iaa 1 make it even 04652 022 776 0 3011 iana -2 04653 6333 00 0 3012 gbfsml caq word count 04654 0 43 070 4744 3013 ldx1 a.y009-* =addr(.crnxs) 04655 4 10 065 4742 3014 tsy a.y006-*,* (getspc) look in small space chain 04656 0 71 027 4705 3015 tra gbfail-* not there 04657 0 76 747 4626 3016 aos getmem-* found it, take skip 04660 4 10 071 4751 3017 tsy a.y014-*,* (clrbuf) go clear space 3018 04661 3019 trace mt.get,0,(x3,gtmsq,getmem,gtmsx1) end of binary card 00000065 3020 04701 673 000 0 3021 gtmbak ila 0 indicate allocate call 04702 4 10 045 4747 3022 tsy a.y012-*,* extime 04703 3023 return getmem 3024 3025 * must allocate more buffers for small space 3026 04705 0 17 046 4753 3027 gbfail sta gbftmp-* save word count 04706 773 037 0 3028 iaa bufsiz-1 round to next multiple 04707 022 740 0 3029 iana -bufsiz 04710 6333 00 0 3030 caq 04711 0 43 032 4743 3031 ldx1 a.y007-* =addr(.crnxa) 04712 4 10 030 4742 3032 tsy a.y006-*,* (getspc) get buffer 04713 0 71 012 4725 3033 tra gtmng-* failed, give up 04714 0 43 030 4744 3034 ldx1 a.y009-* =addr(.crnxs) 04715 4 10 023 4740 3035 tsy a.y004-*,* (relspc) free in to small chain 04716 0337 05 0 3036 ars bufshf convert to buffers 04717 4 16 026 4745 3037 asa a.y010-*,* increment .crnbs 04720 322 777 0 3038 iera -1 complement 04721 773 001 0 3039 iaa 1 04722 4 16 013 4735 3040 asa a.y001-*,* decrement .crnbf 04723 0 07 030 4753 3041 lda gbftmp-* get original word count 04724 0 71 727 4653 3042 tra gbfsml-* retry allocate 3043 04725 3044 gtmng smeter mincs,.malof,l.y001-* assm 01 07-08-86 13.165 fnp utility programs for mcs page 115 mcs space management routines end of binary card 00000066 04734 0 71 745 4701 3045 tra gtmbak-* 3046 3047 04735 0 00652 0 3048 a.y001 ind .crnbf 04736 0 06434 1 3049 a.y002 ind fresml 04737 0 00660 0 3050 a.y003 ind .crnxa 04740 0 06324 1 3051 a.y004 ind relspc 04741 0 05327 1 3052 a.y005 ind chksiz 04742 0 06160 1 3053 a.y006 ind getspc 04743 0 00660 0 3054 a.y007 ind .crnxa 3055 *a.y008 unused 04744 0 00674 0 3056 a.y009 ind .crnxs 04745 0 00675 0 3057 a.y010 ind .crnbs 04746 0 04756 1 3058 a.y011 ind timein 04747 0 04765 1 3059 a.y012 ind extime 04750 0 05076 1 3060 a.y013 ind setsc 04751 0 05124 1 3061 a.y014 ind clrbuf 3062 04752 000001 0 3063 l.y001 dec 1 3064 04753 3065 gbftmp bss 1 04754 3066 even 04754 3067 gbfaq bss 2 assm 01 07-08-86 13.165 fnp utility programs for mcs page 116 mcs space management routines 3068 eject 3069 ************************************************************************ 3070 * 3071 * timein: records the elapsed timer at entry so that the time 3072 * spent in the allocation/freeing routines can be metered 3073 * 3074 ************************************************************************ 3075 04756 3076 timein subr tmn 04761 4 07 063 5044 3077 lda a.x001-*,* etmb 04762 0 17 065 5047 3078 sta sttime-* record time of entry 04763 3079 return timein 3080 3081 3082 ************************************************************************ 3083 * 3084 * extime: records elapsed time at exit from 3085 * allocation/freeing routines, for metering. 3086 * also meters current use of buffer pool 3087 * 3088 * input: 3089 * a reg contains 0 for allocate, 1 for free 3090 * 3091 ************************************************************************ 3092 04765 3093 extime subr ext,(a,q,x2) 05001 4 07 734 4735 3094 lda a.y001-*,* (.crnbf) 05002 4 06 743 4745 3095 ada a.y010-*,* (.crnbs) end of binary card 00000067 05003 0336 05 0 3096 als bufshf convert to words for metering 05004 0 17 042 5046 3097 sta savcnt-* 05005 3098 smeter mupdat,.mspav,savcnt-* 3099 3100 measure time spent 05014 4 07 030 5044 3101 lda a.x001-*,* etmb (current elapsed timer value) 05015 0 17 033 5050 3102 sta sttimx-* save it (for debugging) 05016 0 26 031 5047 3103 sba sttime-* a now contains time spent 05017 0 43 757 4776 3104 ldx1 extsa-* get alloc/free indicator 05020 4 03 025 5045 3105 ldx2 a.x002-*,* get pointer to relevant structure 05021 2335 22 0 3106 lrl 18 make time into doubleword 05022 0 14 032 5054 3107 staq loctim-* hang on to it 05023 2 15 000 0 3108 adaq it.tot,2 update running total 05024 2 14 000 0 3109 staq it.tot,2 05025 0 04 027 5054 3110 ldaq loctim-* 05026 2 67 007 0 3111 cmpq it.max,2 new maximum? 05027 0 75 002 5031 3112 tmi 2 05030 2 57 007 0 3113 stq it.max,2 yes, save it 05031 473 001 0 3114 ilq 1 see if it's more than 1 msec. 05032 0 67 023 5055 3115 cmpq loctim+1-* 05033 0 65 005 5040 3116 tpl ext010-* nope assm 01 07-08-86 13.165 fnp utility programs for mcs page 117 mcs space management routines 05034 2 15 004 0 3117 adaq it.gt1,2 yes, add 1 (which happens to be in aq) 05035 2 14 004 0 3118 staq it.gt1,2 to count of same 05036 673 000 0 3119 ila 0 05037 473 001 0 3120 ilq 1 get the one back 05040 2 15 002 0 3121 ext010 adaq it.inc,2 update increment count 05041 2 14 002 0 3122 staq it.inc,2 05042 3123 return extime 3124 3125 05044 0 00451 0 3126 a.x001 ind etmb 05045 1 05051 1 3127 a.x002 ind itaddr,1 3128 05046 3129 savcnt bss 1 number of free words (for metering) 05047 3130 sttime bss 1 elapsed timer reading at entry 05050 3131 sttimx bss 1 elapsed timer reading at exit 05051 0 05056 1 3132 itaddr ind getbfm 05052 0 05066 1 3133 ind frebfm 3134 end of binary card 00000068 05053 233100 0 05054 3135 even 05054 3136 loctim bss 2 elapsed time while in routine 05056 3137 getbfm bss 8 time meters for get calls 05066 3138 frebfm bss 8 time meters for free calls assm 01 07-08-86 13.165 fnp utility programs for mcs page 118 mcs space management routines 3139 eject 3140 ************************************************************************ 3141 * 3142 * subroutine to fill in buffer size code 3143 * and zero the rest of the buffer 3144 * 3145 * input: 3146 * q contains size in words 3147 * x3 points to buffer 3148 * 3149 ************************************************************************ 3150 05076 3151 setsc subr ssc,(a,q,x3) 05112 573 740 0 3152 iaq -32 reduce by one unit 05113 4336 12 0 3153 qls 15-bufshf align in word 05114 3 57 001 0 3154 stq bf.siz,3 05115 3 56 000 0 3155 stz bf.nxt,3 05116 0 07 772 5110 3156 lda sscsq-* total words 05117 773 776 0 3157 iaa -2 number left to clear 05120 373 002 0 3158 iacx3 2 starting address to clear 05121 0 10 003 5124 3159 tsy clrbuf-* 05122 3160 return setsc 3161 3162 ************************************************************************ 3163 * 3164 * subroutine to clear buffer or allocated space 3165 * 3166 * input: 3167 * x3 points to space to be cleared 3168 * a contains number of words to clear 3169 * 3170 ************************************************************************ 3171 05124 3172 clrbuf subr clr,(a,q,x3) 05140 0337 01 0 3173 ars 1 number of double words to clear 05141 322 777 0 3174 iera -1 complement 05142 773 001 0 3175 iaa 1 05143 0 17 011 5154 3176 sta clrtmp-* end of binary card 00000069 05144 673 000 0 3177 ila 0 constants to store 05145 473 000 0 3178 ilq 0 05146 3 14 000 0 3179 clr010 staq 0,3 zero two words 05147 373 002 0 3180 iacx3 2 05150 0 76 004 5154 3181 aos clrtmp-* 05151 0 64 775 5146 3182 tnz clr010-* 05152 3183 return clrbuf 3184 3185 05154 3186 clrtmp bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 119 mcs space management routines 3187 eject 3188 ************************************************************************ 3189 * 3190 * subroutine to free buffer space in low memory 3191 * 3192 * calling sequence: 3193 * 3194 * x3 -> space to be freed 3195 * q = size of space (or 0 meaning use buffer size code) 3196 * 3197 ************************************************************************ 3198 05155 3199 frebuf subr fbf,(inh,a,q,x1) 05175 4 10 124 5321 3200 tsy a.n001-*,* timein 05176 7333 00 0 3201 cqa pick up size 05177 0 64 006 5205 3202 tnz fbf010-* size is given 05200 3 07 001 0 3203 lda fb.siz,3 get size code 05201 2337 17 0 3204 arl 15 05202 773 001 0 3205 iaa 1 number of buffers 05203 0336 05 0 3206 als bufshf convert to words 05204 0 71 004 5210 3207 tra fbf020-* 05205 0 10 122 5327 3208 fbf010 tsy chksiz-* check for valid size 05206 773 037 0 3209 iaa bufsiz-1 round to multiple of bufsiz 05207 022 740 0 3210 iana -bufsiz 05210 0 17 033 5243 3211 fbf020 sta fretmp-* save buffer size temporarily 3212 05211 3213 trace mt.fre,0,(x3,fretmp,frebuf,fbfsx1) end of binary card 00000070 3214 05231 0 07 012 5243 3215 lda fretmp-* 05232 0 43 070 5322 3216 ldx1 a.n002-* =addr(.crnxa) free from full buffer chain 05233 6333 00 0 3217 caq 05234 4 10 067 5323 3218 tsy a.n003-*,* relspc 05235 0337 05 0 3219 ars bufshf get buffer count 05236 4 16 066 5324 3220 asa a.n004-*,* update .crnbf 05237 673 001 0 3221 ila 1 indicate free call 05240 4 10 065 5325 3222 tsy a.n005-*,* extime 05241 3223 return frebuf 3224 05243 3225 fretmp bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 120 mcs space management routines 3226 eject 3227 ************************************************************************ 3228 * 3229 * similiar entry for freeing memory 3230 * 3231 ************************************************************************ 3232 05244 3233 fremem subr frm,(inh,a,q,x1) 05264 4 10 035 5321 3234 tsy a.n001-*,* timein 05265 7333 00 0 3235 cqa word count end of binary card 00000071 05266 0 10 041 5327 3236 tsy chksiz-* check for valid size 05267 773 001 0 3237 iaa 1 make it even 05270 022 776 0 3238 iana -2 05271 0 17 752 5243 3239 sta fretmp-* save size 3240 05272 3241 trace mt.fre,0,(x3,fretmp,fremem,frmsx1) 3242 05312 0 47 731 5243 3243 ldq fretmp-* retrieve size 05313 0 43 013 5326 3244 ldx1 a.n006-* =addr(.crnxs) 05314 4 10 007 5323 3245 tsy a.n003-*,* relspc 05315 673 001 0 3246 ila 1 indicate free call 05316 4 10 007 5325 3247 tsy a.n005-*,* extime 05317 3248 return fremem 3249 3250 05321 0 04756 1 3251 a.n001 ind timein 05322 0 00660 0 3252 a.n002 ind .crnxa 05323 0 06324 1 3253 a.n003 ind relspc 05324 0 00652 0 3254 a.n004 ind .crnbf 05325 0 04765 1 3255 a.n005 ind extime 05326 0 00674 0 3256 a.n006 ind .crnxs assm 01 07-08-86 13.165 fnp utility programs for mcs page 121 mcs space management routines 3257 eject 3258 ************************************************************************ 3259 * 3260 * subroutine to check for a valid buffer size in the a 3261 * 3262 ************************************************************************ 3263 05327 000000 0 3264 chksiz oct 0 05330 0 20 012 5342 3265 szn bfcksw-* should we check? 05331 4 64 776 5327 3266 tnz chksiz-*,* no 05332 422 001 0 3267 icmpa 1 05333 0 65 002 5335 3268 tpl 2 05334 3269 die 1 05335 0 27 004 5341 3270 cmpa maxsiz-* 05336 0 75 002 5340 3271 tmi 2 05337 3272 die 2 end of binary card 00000072 05340 4 71 767 5327 3273 tra chksiz-*,* 3274 05341 0 00401 0 3275 maxsiz ind bfmsiz+1 3276 3277 symdef bfcksw indicates whether calls are checked 3278 05342 000001 0 3279 bfcksw oct 1 start out as no assm 01 07-08-86 13.165 fnp utility programs for mcs page 122 mcs space management routines 3280 eject 3281 ************************************************************************ 3282 * 3283 * getbfh -- get a buffer in extended memory. address boundary 3284 * will be chosen based on buffer size so as to ensure that no 3285 * buffer spans a page boundary 3286 * 3287 * input: 3288 * q -- size in words 3289 * 3290 * output: 3291 * a -- absolute address of allocated buffer 3292 * x3 -- virtual " " " " 3293 * buffer window page table entry set up appropriately 3294 * 3295 ************************************************************************ 3296 05343 3297 getubf null name retained for compatibility 05343 3298 getbfh subr gfh,(inh,q,x1,x2) 05363 4 10 163 5546 3299 tsy a.j007-*,* timein 05364 7333 00 0 3300 cqa hang on to size 05365 4 10 160 5545 3301 tsy a.j006-*,* chksiz 05366 773 037 0 3302 iaa bufsiz-1 05367 022 740 0 3303 iana -bufsiz round size to nearest multiple of bufsiz 05370 6333 00 0 3304 caq this is size we'll use 05371 0 57 161 5552 3305 stq size-* put it in cold storage 05372 673 000 0 3306 ila 0 clear the a 05373 573 777 0 3307 iaq -1 and shift size-1 05374 0334 15 0 3308 lls 18-bufshf so as to get number of bufsiz blocks 05375 0332 00 0 3309 cax2 in order to force appropriate boundary 05376 0 02 144 5542 3310 adcx2 a.j003-* addr (bounds) 05377 2 07 000 0 3311 lda 0,2 get the boundary in the a 05400 0 17 156 5556 3312 sta bndry-* save it 05401 0 56 152 5553 3313 stz prvadr-* initialize 05402 4 07 136 5540 3314 lda a.j001-*,* (.crnxe) start search 05403 0 74 015 5420 3315 tze gfh025-* no extended memory at all 3316 05404 0 17 150 5554 3317 gfh010 sta blkadr-* block we're testing 05405 4 10 134 5541 3318 tsy a.j002-*,* (setbpt) get virtual address 05406 0332 00 0 3319 cax2 05407 0 31 147 5556 3320 cana bndry-* is it properly aligned? end of binary card 00000073 05410 0 64 004 5414 3321 tnz gfh020-* no, go to next free block 05411 2 07 001 0 3322 lda fb.siz,2 yes, is it big enough? 05412 0 27 140 5552 3323 cmpa size-* 05413 0 65 022 5435 3324 tpl gfh030-* yes, use it 3325 look at next block 05414 0 07 140 5554 3326 gfh020 lda blkadr-* save block address as previous 05415 0 17 136 5553 3327 sta prvadr-* 05416 2 07 000 0 3328 lda fb.nxt,2 get next assm 01 07-08-86 13.165 fnp utility programs for mcs page 123 mcs space management routines 05417 0 64 765 5404 3329 tnz gfh010-* if any 3330 no usable blocks in high memory, 3331 try low 05420 0 43 123 5543 3332 gfh025 ldx1 a.j004-* addr (.crnxa) 05421 0 47 131 5552 3333 ldq size-* 05422 4 10 126 5550 3334 tsy a.j009-*,* (getspc) regular space allocating subroutine 05423 0 71 104 5527 3335 tra gfh070-* forget it, no space to be had 05424 0 50 130 5554 3336 stx3 blkadr-* ok 3337 meter instance of having to use low memory 05425 3338 smeter mincs,.mblow,l.j001-* 3339 05434 0 71 026 5462 3340 tra gfh060-* join common code 3341 found usable block in high memory 05435 3342 gfh030 null a contains size 05435 0 13 120 5555 3343 stx2 blkvir-* save virtual address 05436 2 47 000 0 3344 ldq fb.nxt,2 pick up address of next free block 05437 0 26 113 5552 3345 sba size-* size of remainder 05440 0 74 007 5447 3346 tze gfh040-* none 05441 0 02 111 5552 3347 adcx2 size-* this is address of new free block 05442 2 57 000 0 3348 stq fb.nxt,2 put forward pointer in 05443 2 17 001 0 3349 sta fb.siz,2 and size 05444 0 07 110 5554 3350 lda blkadr-* now get absolute address of allocated block 05445 0 06 105 5552 3351 ada size-* 05446 6333 00 0 3352 caq now, however we got here, address 05447 3353 gfh040 null of next block is in q 05447 0 07 104 5553 3354 lda prvadr-* get address of previous block 05450 0 74 010 5460 3355 tze gfh050-* if any 05451 4 10 070 5541 3356 tsy a.j002-*,* (setbpt) make it usable 05452 0332 00 0 3357 cax2 05453 2 57 000 0 3358 stq fb.nxt,2 rethread new next block 05454 0 07 100 5554 3359 lda blkadr-* now get allocated block address back 05455 4 10 064 5541 3360 tsy a.j002-*,* (setbpt) 05456 4333 00 0 3361 cax3 end of binary card 00000074 05457 0 71 003 5462 3362 tra gfh060-* go turn it into a buffer 3363 05460 4 57 060 5540 3364 gfh050 stq a.j001-*,* (.crnxe) new head of free chain 05461 0 41 074 5555 3365 ldx3 blkvir-* we haven't lost its page 05462 0 76 661 5343 3366 gfh060 aos getbfh-* take successful return 05463 0 47 067 5552 3367 ldq size-* set the size code and clear the buffer 05464 4 10 060 5544 3368 tsy a.j005-*,* setsc 3369 now update .crnbf 05465 7333 00 0 3370 cqa get size in a 05466 0337 05 0 3371 ars bufshf convert to buffers 05467 322 777 0 3372 iera -1 complement 05470 773 001 0 3373 iaa 1 05471 4 16 060 5551 3374 asa a.j010-*,* .crnbf 3375 05472 3376 smeter mincd,.mbufa,l.j001-* 3377 assm 01 07-08-86 13.165 fnp utility programs for mcs page 124 mcs space management routines 05501 3378 trace mt.get,0,(blkadr,gfhsq,getbfh,gfhsx1) 3379 05522 673 000 0 3380 gfhbak ila 0 05523 4 10 024 5547 3381 tsy a.j008-*,* extime 05524 0 07 030 5554 3382 lda blkadr-* absolute address as well 05525 3383 return getbfh 3384 05527 3385 gfh070 null failure branch 05527 3386 smeter mincs,.malof,l.j001-* end of binary card 00000075 05536 0 71 764 5522 3387 tra gfhbak-* 3388 3389 05537 000001 0 3390 l.j001 dec 1 3391 05540 0 00707 0 3392 a.j001 ind .crnxe 05541 0 04241 1 3393 a.j002 ind setbpt 05542 0 05557 1 3394 a.j003 ind bounds 05543 0 00660 0 3395 a.j004 ind .crnxa 05544 0 05076 1 3396 a.j005 ind setsc 05545 0 05327 1 3397 a.j006 ind chksiz 05546 0 04756 1 3398 a.j007 ind timein 05547 0 04765 1 3399 a.j008 ind extime 05550 0 06160 1 3400 a.j009 ind getspc 05551 0 00652 0 3401 a.j010 ind .crnbf 3402 05552 3403 size bss 1 05553 3404 prvadr bss 1 05554 3405 blkadr bss 1 05555 3406 blkvir bss 1 05556 3407 bndry bss 1 3408 005557 3409 bounds equ * array of strings for and'ing to ensure 3410 correct boundary -- indexed by buffer size 05557 000037 0 3411 oct 000037 05560 000077 0 3412 oct 000077 05561 000177 0 3413 oct 000177 05562 000177 0 3414 oct 000177 05563 000177 0 3415 oct 000177 05564 000377 0 3416 oct 000377 05565 000377 0 3417 oct 000377 05566 000377 0 3418 oct 000377 05567 000377 0 3419 oct 000377 assm 01 07-08-86 13.165 fnp utility programs for mcs page 125 mcs space management routines 3420 eject 3421 ************************************************************************ 3422 * 3423 * frebfh -- external entry to free a single buffer in high 3424 * memory. internal subroutine frhbuf does most of the real work. 3425 * 3426 * input: 3427 * a contains absolute address of buffer to be freed 3428 * q contains size in words (if zero, use size code in buffer) 3429 * 3430 ************************************************************************ 3431 05570 3432 frebfh subr frb,(a,q,x2,x3) end of binary card 00000076 05607 0 27 102 5711 3433 cmpa l.l001-* (bwndow) is buffer in fact in high memory? 05610 0 45 012 5622 3434 tnc frb010-* no, use frebuf 05611 0332 00 0 3435 cax2 hang on to absolute address 05612 4 10 074 5706 3436 tsy a.l001-*,* setbpt 05613 4333 00 0 3437 cax3 get virtual address in x3 05614 0 07 754 5570 3438 lda frebfh-* save return address 05615 0 17 076 5713 3439 sta frertn-* for trace call 05616 3332 00 0 3440 cx2a get absolute address back in a 05617 4 10 070 5707 3441 tsy a.l002-*,* frhbuf 05620 3442 frbbak return frebfh 3443 05622 4333 00 0 3444 frb010 cax3 address in x3 05623 4 10 065 5710 3445 tsy a.l003-*,* frebuf 05624 0 71 774 5620 3446 tra frbbak-* assm 01 07-08-86 13.165 fnp utility programs for mcs page 126 mcs space management routines 3447 eject 3448 ************************************************************************ 3449 * 3450 * subroutine to free a buffer chain 3451 * 3452 * calling sequence: 3453 * 3454 * a contains absolute address of buffer chain 3455 * 3456 ************************************************************************ 3457 05625 3458 frelbf subr frl,(a,q,x2) 3459 05641 3460 trace mt.frc,0,(frlsa,frelbf,x1,x3) 3461 end of binary card 00000077 05660 0 47 745 5625 3462 ldq frelbf-* for trace calls on individual 05661 0 57 032 5713 3463 stq frertn-* buffers 05662 473 000 0 3464 ilq 0 always use size in buffer 05663 0 07 753 5636 3465 lda frlsa-* 05664 0 27 025 5711 3466 frl010 cmpa l.l001-* (bwndow) is buffer in high memory? 05665 0 75 014 5701 3467 tmi frl030-* no, use frebuf 05666 0332 00 0 3468 cax2 hang on to absolute address 05667 4 10 017 5706 3469 tsy a.l001-*,* setbpt 05670 4333 00 0 3470 cax3 get virtual into x3 05671 3 07 000 0 3471 lda bf.nxt,3 hold forward pointer 05672 0 17 020 5712 3472 sta frlnxt-* hang on to it 05673 3332 00 0 3473 cx2a recover absolute address of buffer 05674 4 10 013 5707 3474 tsy a.l002-*,* (frhbuf) free one buffer 05675 0 07 015 5712 3475 frl020 lda frlnxt-* recover next pointer 05676 0 64 766 5664 3476 tnz frl010-* not at end yet 05677 3477 return frelbf 3478 05701 4333 00 0 3479 frl030 cax3 05702 3 07 000 0 3480 lda bf.nxt,3 05703 0 17 007 5712 3481 sta frlnxt-* 05704 4 10 004 5710 3482 tsy a.l003-*,* frebuf 05705 0 71 770 5675 3483 tra frl020-* 3484 3485 05706 0 04241 1 3486 a.l001 ind setbpt 05707 0 05714 1 3487 a.l002 ind frhbuf 05710 0 05155 1 3488 a.l003 ind frebuf 3489 05711 077000 0 3490 l.l001 vfd 18/bwndow 3491 05712 3492 frlnxt bss 1 05713 3493 frertn bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 127 mcs space management routines 3494 eject 3495 ************************************************************************ 3496 * 3497 * frhbuf -- subroutine to do the real work of freeing a buffer 3498 * in high memory. 3499 * 3500 * input: 3501 * a - absolute address of buffer 3502 * q - size in words 3503 * x3 - virtual address of buffer 3504 * buffer page table entry set up appropriately 3505 * 3506 ************************************************************************ 3507 05714 3508 frhbuf subr frh,(inh,a,q,x1,x2,x3) end of binary card 00000078 05742 0 17 212 6154 3509 sta freadr-* 05743 4 10 202 6145 3510 tsy a.k003-*,* timein 05744 4 03 203 6147 3511 ldx2 a.k005-*,* .crbpe 05745 2 07 000 0 3512 lda 0,2 save pte 05746 0 17 211 6157 3513 sta frepte-* which callers may be counting on 3514 05747 0 56 203 6152 3515 stz frenxt-* initialize 05750 0 56 203 6153 3516 stz freprv-* 05751 7333 00 0 3517 cqa get size 05752 0 64 006 5760 3518 tnz frh005-* if supplied 05753 3 47 001 0 3519 ldq bf.siz,3 else derive it from buffer size code 05754 6337 17 0 3520 qrl 15 05755 573 001 0 3521 iaq 1 05756 4336 05 0 3522 qls bufshf 05757 0 71 004 5763 3523 tra frh007-* 05760 773 037 0 3524 frh005 iaa bufsiz-1 round it to multiple of bufsiz 05761 022 740 0 3525 iana -bufsiz 05762 6333 00 0 3526 caq 05763 3 57 001 0 3527 frh007 stq fb.siz,3 05764 0 57 171 6155 3528 stq fresiz-* 05765 3529 trace mt.fre,0,(freadr,fresiz,frertn,frhsx1) 3530 end of binary card 00000079 06006 4 07 135 6143 3531 lda a.k001-*,* (.crnxe) get head of chain 06007 0 74 127 6136 3532 tze frh060-* no chain at the moment 06010 0 27 144 6154 3533 frh010 cmpa freadr-* see if new block comes before next free one 06011 0 45 022 6033 3534 tnc frh030-* no, look for next block 06012 0 74 130 6142 3535 tze frhdie-* oops, this is already free 06013 0 17 137 6152 3536 sta frenxt-* we've found the first block after the one we're 06014 0332 00 0 3537 cax2 freeing 06015 0 07 137 6154 3538 lda freadr-* get the original one back 06016 4 10 126 6144 3539 tsy a.k002-*,* (setbpt) get the pte right 06017 4333 00 0 3540 cax3 06020 3 13 000 0 3541 stx2 fb.nxt,3 set its forward pointer assm 01 07-08-86 13.165 fnp utility programs for mcs page 128 mcs space management routines 06021 0 07 132 6153 3542 lda freprv-* hook it on to previous one 06022 0 64 004 6026 3543 tnz frh020-* if any 06023 0 07 131 6154 3544 lda freadr-* 06024 4 17 117 6143 3545 sta a.k001-*,* (.crnxe) none, this is head 06025 0 71 047 6074 3546 tra frh050-* combine ahead 3547 06026 4 10 116 6144 3548 frh020 tsy a.k002-*,* (setbpt) get previous block's 06027 4332 00 0 3549 cax1 virtual address 06030 0 07 124 6154 3550 lda freadr-* thread new one to it 06031 1 17 000 0 3551 sta fb.nxt,1 06032 0 71 014 6046 3552 tra frh040-* combine behind 3553 06033 0 17 120 6153 3554 frh030 sta freprv-* save most recent block address 06034 4 10 110 6144 3555 tsy a.k002-*,* (setbpt) get virtual address 06035 4332 00 0 3556 cax1 to look at forward pointer 06036 1 07 000 0 3557 lda fb.nxt,1 06037 0 64 751 6010 3558 tnz frh010-* if any 06040 0 17 112 6152 3559 sta frenxt-* no next pointer, remember that 06041 0 07 113 6154 3560 lda freadr-* thread new one to last found 06042 1 17 000 0 3561 sta fb.nxt,1 06043 4 10 101 6144 3562 tsy a.k002-*,* (setbpt) get new one's virtual 06044 4333 00 0 3563 cax3 address 06045 3 56 000 0 3564 stz fb.nxt,3 set its forward pointer 3565 06046 3566 frh040 null try to combine with previous block 06046 0 07 105 6153 3567 lda freprv-* 06047 6333 00 0 3568 caq 06050 4 10 074 6144 3569 tsy a.k002-*,* setbpt 06051 4333 00 0 3570 cax3 virtual address in x3 06052 3 46 001 0 3571 adq fb.siz,3 end of previous block 06053 0 67 101 6154 3572 cmpq freadr-* does it reach new one? 06054 0 45 020 6074 3573 tnc frh050-* no, can't combine end of binary card 00000080 06055 0 64 065 6142 3574 tnz frhdie-* overlaps! 06056 0 07 075 6153 3575 lda freprv-* make sure they're in same page 06057 0 34 072 6151 3576 ana l.k001-* =o777400 06060 0 17 076 6156 3577 sta frebas-* 06061 0 07 073 6154 3578 lda freadr-* 06062 0 34 067 6151 3579 ana l.k001-* =o777400 06063 0 27 073 6156 3580 cmpa frebas-* 06064 0 64 010 6074 3581 tnz frh050-* they are not, don't combine 06065 0 07 065 6152 3582 lda frenxt-* they are, so previous now points 06066 3 17 000 0 3583 sta fb.nxt,3 to next 06067 3 47 001 0 3584 ldq fb.siz,3 06070 0 46 065 6155 3585 adq fresiz-* and its size increases accordingly 06071 3 57 001 0 3586 stq fb.siz,3 06072 0 07 061 6153 3587 lda freprv-* and this the address of 06073 0 17 061 6154 3588 sta freadr-* the current block 3589 06074 3590 frh050 null try to combine with following block assm 01 07-08-86 13.165 fnp utility programs for mcs page 129 mcs space management routines 06074 0 07 056 6152 3591 lda frenxt-* 06075 0 74 027 6124 3592 tze frhbak-* there is none, we're done 06076 0 34 053 6151 3593 ana l.k001-* =o777400 06077 0 17 057 6156 3594 sta frebas-* save base of next block's page 06100 0 07 054 6154 3595 lda freadr-* 06101 0 34 050 6151 3596 ana l.k001-* 06102 0 27 054 6156 3597 cmpa frebas-* compare with current one 06103 0 64 021 6124 3598 tnz frhbak-* different, can't combine 06104 0 07 050 6154 3599 lda freadr-* get current block 06105 6333 00 0 3600 caq 06106 4 10 036 6144 3601 tsy a.k002-*,* setbpt 06107 4333 00 0 3602 cax3 virtualized 06110 3 46 001 0 3603 adq fb.siz,3 see if it extends to next 06111 0 67 041 6152 3604 cmpq frenxt-* 06112 0 45 012 6124 3605 tnc frhbak-* it doesn't 06113 0 64 027 6142 3606 tnz frhdie-* goes past it! 06114 0 07 036 6152 3607 lda frenxt-* to combine, get virtual address 06115 4 10 027 6144 3608 tsy a.k002-*,* (setbpt) of next block 06116 0332 00 0 3609 cax2 since they're in same page, both 06117 3 07 001 0 3610 lda fb.siz,3 are addressable 06120 2 06 001 0 3611 ada fb.siz,2 so combine their sizes 06121 3 17 001 0 3612 sta fb.siz,3 this is new size of current block 06122 2 07 000 0 3613 lda fb.nxt,2 which points past old next one 06123 3 17 000 0 3614 sta fb.nxt,3 3615 end of binary card 00000081 06124 4 03 023 6147 3616 frhbak ldx2 a.k005-*,* .crbpe 06125 0 07 032 6157 3617 lda frepte-* restore original pte 06126 2 17 000 0 3618 sta 0,2 06127 0 07 026 6155 3619 lda fresiz-* get size so as to update .crnbf 06130 0337 05 0 3620 ars bufshf convert to buffers 06131 4 16 017 6150 3621 asa a.k006-*,* .crnbf 06132 673 001 0 3622 ila 1 mark as free call 06133 4 10 013 6146 3623 tsy a.k004-*,* extime 06134 3624 return frhbuf 3625 06136 0 07 016 6154 3626 frh060 lda freadr-* this is only free block 06137 4 17 004 6143 3627 sta a.k001-*,* .crnxe 06140 3 56 000 0 3628 stz fb.nxt,3 06141 0 71 763 6124 3629 tra frhbak-* 3630 06142 3631 frhdie die 4 free blocks overlap 3632 3633 06143 0 00707 0 3634 a.k001 ind .crnxe 06144 0 04241 1 3635 a.k002 ind setbpt 06145 0 04756 1 3636 a.k003 ind timein 06146 0 04765 1 3637 a.k004 ind extime 06147 0 00710 0 3638 a.k005 ind .crbpe 06150 0 00652 0 3639 a.k006 ind .crnbf assm 01 07-08-86 13.165 fnp utility programs for mcs page 130 mcs space management routines 3640 06151 777400 0 3641 l.k001 oct 777400 3642 06152 3643 frenxt bss 1 06153 3644 freprv bss 1 06154 3645 freadr bss 1 06155 3646 fresiz bss 1 06156 3647 frebas bss 1 06157 3648 frepte bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 131 mcs space management routines 3649 eject 3650 ************************************************************************ 3651 * 3652 * subroutine to find free space of a desired size 3653 * it is unthreaded from the beginning of the smallest block 3654 * large enough to hold it. 3655 * 3656 * calling sequence: 3657 * 3658 * x1 -> buffer pool header 3659 * q = size of space needed, in words 3660 * 3661 * returns: 3662 * 3663 * procedure takes skip return if it succeeds, 3664 * non-skip return if it fails. 3665 * 3666 * x3 -> space allocated 3667 * 3668 ************************************************************************ 3669 06160 3670 getspc subr gsp,(a,x2) 06171 0 56 132 6323 3671 stz prvblk-* initialize some stuff 06172 0 56 032 6224 3672 stz bstblk-* will be addr of smallest block 06173 0 41 031 6224 3673 ldx3 bstblk-* to zero the reg 06174 4 07 031 6225 3674 lda a.z001-*,* =.crmem, bigger that biggest free block 06175 1 03 000 0 3675 ldx2 fp.fst,1 pick up pointer to first free block 06176 0 74 015 6213 3676 gsp040 tze gsp010-* end of chain end of binary card 00000082 06177 2 67 001 0 3677 cmpq fb.siz,2 is this block big enough? 06200 0 74 016 6216 3678 tze gsp020-* exactly right, dont look anymore 06201 0 65 007 6210 3679 tpl gsp030-* too small, skip to next 06202 2 27 001 0 3680 cmpa fb.siz,2 is this a better (smaller) block to use? 06203 0 74 005 6210 3681 tze gsp030-* same, dont use it 06204 0 75 004 6210 3682 tmi gsp030-* already have smaller block 06205 0 13 017 6224 3683 stx2 bstblk-* save pointer to best block 06206 0 41 115 6323 3684 ldx3 prvblk-* rembember best blocks predessor 06207 2 07 001 0 3685 lda fb.siz,2 remember best blocks size 06210 0 13 113 6323 3686 gsp030 stx2 prvblk-* 06211 2 03 000 0 3687 ldx2 fb.nxt,2 step to next block 06212 0 71 764 6176 3688 tra gsp040-* 06213 0 03 011 6224 3689 gsp010 ldx2 bstblk-* get pointer to best block 06214 0 74 006 6222 3690 tze gspret-* no block big enough, take error return 06215 0 50 106 6323 3691 stx3 prvblk-* unthread subr needs this pointer 06216 0 76 742 6160 3692 gsp020 aos getspc-* call will succeed, setup skip return 06217 3332 00 0 3693 cx2a 06220 4333 00 0 3694 cax3 x2-x3 to unthread from beginning of block 06221 0 10 016 6237 3695 tsy unthrd-* unthread selected space 06222 3696 gspret return getspc 3697 assm 01 07-08-86 13.165 fnp utility programs for mcs page 132 mcs space management routines 06224 3698 bstblk bss 1 06225 0 00651 0 3699 a.z001 ind .crmem 06226 0 00660 0 3700 a.z002 ind .crnxa 06227 0 00652 0 3701 a.z003 ind .crnbf 06230 0 00674 0 3702 a.z004 ind .crnxs 06231 0 00675 0 3703 a.z005 ind .crnbs 06232 0 06434 1 3704 a.z006 ind fresml 06233 0 04756 1 3705 a.z007 ind timein 06234 0 00650 0 3706 a.z008 ind .crbuf 06235 0 04765 1 3707 a.z009 ind extime 3708 06236 000001 0 3709 l.z001 dec 1 for metering assm 01 07-08-86 13.165 fnp utility programs for mcs page 133 mcs space management routines 3710 eject 3711 ************************************************************************ 3712 * 3713 * subroutine to unthread space from a free chain 3714 * 3715 * calling sequence: 3716 * 3717 * x1 -> buffer poll header 3718 * x2 -> starting address to unthread 3719 * x3 -> free block space is coming from 3720 * q = size of block to unthread 3721 * prvblk contains address of free block which proceeds 3722 * the block pointed to by x2 3723 * 3724 ************************************************************************ 3725 06237 3726 unthrd subr unt,(a,q,x2,x3) end of binary card 00000083 06256 3 07 001 0 3727 lda fb.siz,3 size of entire block 06257 0 26 774 6253 3728 sba untsq-* amount of space that will be left 06260 0 17 042 6322 3729 sta unttmp-* this number will be useful later 06261 0 74 022 6303 3730 tze untall-* if zero, unthreading entire free block 06262 3332 00 0 3731 cx2a addr of space to unthread 06263 0 26 772 6255 3732 sba untsx3-* amount of space before block unthreaded 06264 0 74 026 6312 3733 tze untbeg-* if 0, unthreding from beginning 06265 0 27 035 6322 3734 cmpa unttmp-* equal to size remaining? 06266 0 74 012 6300 3735 tze untend-* yes, unthreading from end of block 3736 3737 * unthreading from the middle of a free block 3738 06267 3 17 001 0 3739 untmid sta fb.siz,3 size of first partial block 06270 0 46 764 6254 3740 adq untsx2-* compute addr of second partial block 06271 3 07 000 0 3741 lda fb.nxt,3 hold forward pointer 06272 3 57 000 0 3742 stq fb.nxt,3 make first block point to second 06273 3 03 000 0 3743 ldx2 fb.nxt,3 addr of second block 06274 0 47 026 6322 3744 ldq unttmp-* total space in both free blocks 06275 3 66 001 0 3745 sbq fb.siz,3 subtract out size of first block 06276 2 14 000 0 3746 staq fb.nxt,2 update pointer and size 06277 0 71 021 6320 3747 tra untret-* 3748 3749 * unthreading from end of a free block 3750 06300 0 07 022 6322 3751 untend lda unttmp-* new size of partial block 06301 3 17 001 0 3752 sta fb.siz,3 06302 0 71 016 6320 3753 tra untret-* thats all to do 3754 3755 * unthread an entire free block 3756 06303 3 07 000 0 3757 untall lda fb.nxt,3 pick up pointer to next block 06304 0 03 017 6323 3758 untjon ldx2 prvblk-* addr of previous whole block assm 01 07-08-86 13.165 fnp utility programs for mcs page 134 mcs space management routines 06305 0 74 003 6310 3759 tze unthed-* none, unthreading head 06306 2 17 000 0 3760 sta fb.nxt,2 make prev point to next 06307 0 71 011 6320 3761 tra untret-* 06310 1 17 000 0 3762 unthed sta fp.fst,1 new head of chain 06311 0 71 007 6320 3763 tra untret-* 3764 3765 * unthreading from beginning of a free block 3766 06312 0 02 741 6253 3767 untbeg adcx2 untsq-* compute address of new partial block 06313 3 07 000 0 3768 lda fb.nxt,3 it will now point forward 06314 0 47 006 6322 3769 ldq unttmp-* and this will be its size 06315 2 14 000 0 3770 staq fb.nxt,2 update block end of binary card 00000084 06316 3332 00 0 3771 cx2a 06317 0 71 765 6304 3772 tra untjon-* go update preceeding block 3773 06320 3774 untret return unthrd 3775 06322 3776 unttmp bss 1 06323 3777 prvblk bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 135 mcs space management routines 3778 eject 3779 ************************************************************************ 3780 * 3781 * subroutine to free space no longer needed. it is returned to 3782 * the free pool and combined with any adjacent blocks 3783 * 3784 * calling sequence: 3785 * 3786 * x1 -> free pool header 3787 * x3 -> block to free 3788 * q = size of block 3789 * 3790 ************************************************************************ 3791 06324 3792 relspc subr rsp,(a,x2) 06335 3333 00 0 3793 cx3a validate addr >= .crbuf 06336 4 27 676 6234 3794 cmpa a.z008-*,* =.crbuf 06337 0 74 003 6342 3795 tze 3 06340 0 65 002 6342 3796 tpl 2 06341 3797 die 3 06342 3 57 001 0 3798 stq fb.siz,3 free block will need its size 06343 1 03 000 0 3799 ldx2 fp.fst,1 pick up first block pointer 06344 0 64 004 6350 3800 tnz rsp010-* non-null chain 06345 1 50 000 0 3801 stx3 fp.fst,1 freeing only block in chain 06346 3 56 000 0 3802 stz fb.nxt,3 no forward pointer 06347 0 71 060 6427 3803 tra rspret-* 06350 0 56 753 6323 3804 rsp010 stz prvblk-* 06351 0 50 062 6433 3805 stx3 rsptmp-* 06352 3332 00 0 3806 rsp030 cx2a into 'a' for the compare 06353 0 27 060 6433 3807 cmpa rsptmp-* found spot for this block? 06354 0 65 010 6364 3808 tpl rsp020-* yes, goes before this block 06355 0 13 746 6323 3809 stx2 prvblk-* 06356 2 03 000 0 3810 ldx2 fb.nxt,2 step foward 06357 0 64 773 6352 3811 tnz rsp030-* 3812 3813 * free a block which goes at end of chain 3814 06360 0 03 743 6323 3815 ldx2 prvblk-* 06361 2 50 000 0 3816 stx3 fb.nxt,2 make old last point at new last 06362 3 56 000 0 3817 stz fb.nxt,3 make new last the end 06363 0 71 012 6375 3818 tra rsp050-* 3819 3820 * freeing a block that is not at end 3821 06364 0 03 737 6323 3822 rsp020 ldx2 prvblk-* pick up proceeding block end of binary card 00000085 06365 0 64 005 6372 3823 tnz rsp040-* 3824 3825 * block goes at head of chain 3826 assm 01 07-08-86 13.165 fnp utility programs for mcs page 136 mcs space management routines 06366 1 07 000 0 3827 lda fp.fst,1 old head 06367 1 50 000 0 3828 stx3 fp.fst,1 new head 06370 3 17 000 0 3829 sta fb.nxt,3 make new head point at old head 06371 0 71 021 6412 3830 tra rsp060-* 3831 3832 * block goes in middle 3833 06372 2 07 000 0 3834 rsp040 lda fb.nxt,2 forward pointer from prev block 06373 2 50 000 0 3835 stx3 fb.nxt,2 its new pointer is to this block 06374 3 17 000 0 3836 sta fb.nxt,3 forward pointer to next block 3837 3838 * combine new block with preceeding 3839 06375 3332 00 0 3840 rsp050 cx2a address of previous block 06376 2 06 001 0 3841 ada fb.siz,2 calculate end of previous block 06377 0 50 034 6433 3842 stx3 rsptmp-* address of current block 06400 0 27 033 6433 3843 cmpa rsptmp-* check for join 06401 0 75 011 6412 3844 tmi rsp060-* don't join 06402 0 74 002 6404 3845 tze rsp070-* they do 06403 3846 die 4 they overlap 06404 3 07 000 0 3847 rsp070 lda fb.nxt,3 block after current 06405 2 17 000 0 3848 sta fb.nxt,2 make previous point at it 06406 3 07 001 0 3849 lda fb.siz,3 size of current 06407 2 16 001 0 3850 asa fb.siz,2 add into size of previous 06410 3332 00 0 3851 cx2a 06411 4333 00 0 3852 cax3 make x3 point at new combined cuurrent block 3853 3854 * combine current block with following one 3855 06412 3 20 000 0 3856 rsp060 szn fb.nxt,3 last block? 06413 0 74 014 6427 3857 tze rspret-* yes 06414 3333 00 0 3858 cx3a address of current 06415 3 06 001 0 3859 ada fb.siz,3 end of current 06416 3 27 000 0 3860 cmpa fb.nxt,3 does it join with next? 06417 0 75 010 6427 3861 tmi rspret-* no 06420 0 74 002 6422 3862 tze rsp080-* yes 06421 3863 die 4 overlap 06422 3 03 000 0 3864 rsp080 ldx2 fb.nxt,3 address of next block 06423 2 07 001 0 3865 lda fb.siz,2 get next block size 06424 3 16 001 0 3866 asa fb.siz,3 add into current block size 06425 2 07 000 0 3867 lda fb.nxt,2 next blocks follower 06426 3 17 000 0 3868 sta fb.nxt,3 thrad after current 3869 06427 673 777 0 3870 rspret ila -1 put bad addr in x3 06430 4333 00 0 3871 cax3 06431 3872 return relspc 06433 3873 rsptmp bss 1 assm 01 07-08-86 13.165 fnp utility programs for mcs page 137 mcs space management routines 3874 eject 3875 ************************************************************************ 3876 * 3877 * subroutine to scan the small buffer chain and find any space 3878 * that can be recombined into large buffers. it is called when 3879 * we run out of real buffers as a last resort. 3880 * 3881 * return: 3882 * 3883 * will take a skip return if any buffers were freed 3884 * 3885 ************************************************************************ 3886 06434 3887 fresml subr fsm,(a,q,x1,x2,x3) end of binary card 00000086 06456 0 56 046 6524 3888 stz fsmcnt-* zero count of buffers found 06457 0 56 644 6323 3889 fsm040 stz prvblk-* initialze to follow threads 06460 4 41 550 6230 3890 ldx3 a.z004-*,* =addr(.crnxs) next small block 06461 0 74 032 6513 3891 tze fsm010-* empty chain 06462 3333 00 0 3892 fsm050 cx3a start of free block 06463 3 06 001 0 3893 ada fb.siz,3 compute end address 06464 0 17 041 6525 3894 sta fsmtmp-* save 06465 3333 00 0 3895 cx3a 06466 773 037 0 3896 iaa bufsiz-1 round up to next buffer address 06467 022 740 0 3897 iana -bufsiz 06470 0 27 035 6525 3898 cmpa fsmtmp-* does next buffer start in free block? 06471 0 65 017 6510 3899 tpl fsm020-* no 06472 0332 00 0 3900 cax2 save buffer start address 06473 773 040 0 3901 iaa bufsiz compute end of possible buffer address 06474 0 27 031 6525 3902 cmpa fsmtmp-* is buffer complete in block? 06475 0 75 002 6477 3903 tmi fsm030-* yes 06476 0 64 012 6510 3904 tnz fsm020-* no 06477 473 040 0 3905 fsm030 ilq bufsiz setup to unthread the buffer we found 06500 0 43 530 6230 3906 ldx1 a.z004-* =addr(.crnxs) 06501 0 10 536 6237 3907 tsy unthrd-* unthread from current chain 06502 0 43 524 6226 3908 ldx1 a.z002-* =addr(.crnxa) 06503 3332 00 0 3909 cx2a 06504 4333 00 0 3910 cax3 06505 0 10 617 6324 3911 tsy relspc-* free in to regular buffer chain end of binary card 00000087 06506 0 76 016 6524 3912 aos fsmcnt-* count buffers i found 06507 0 71 750 6457 3913 tra fsm040-* and continue 06510 0 50 613 6323 3914 fsm020 stx3 prvblk-* step to next block 06511 3 41 000 0 3915 ldx3 fb.nxt,3 06512 0 64 750 6462 3916 tnz fsm050-* 06513 0 07 011 6524 3917 fsm010 lda fsmcnt-* count of buffers freed 06514 0 74 006 6522 3918 tze fsmret-* none 06515 0 76 717 6434 3919 aos fresml-* can take skip return 06516 4 16 511 6227 3920 asa a.z003-*,* update .crnbf 06517 322 777 0 3921 iera -1 complement count assm 01 07-08-86 13.165 fnp utility programs for mcs page 138 mcs space management routines 06520 773 001 0 3922 iaa 1 06521 4 16 510 6231 3923 asa a.z005-*,* update .crnbs 06522 3924 fsmret return fresml 06524 3925 fsmcnt bss 1 06525 3926 fsmtmp bss 1 end of binary card 00000088 3927 end 6526 is the next available location. 355map version/assembly dates gmpa 801215/123080 gmpb 801215/123080 gmpc 801215/123080 there were no warning flags in the above assembly assm 01 07-08-86 13.169 fnp utility programs for mcs page 139 octal symbol references by sequence no. 264 a.a001 501 297 501 615 265 a.a002 502 304 502 266 a.a003 503 424 503 270 a.a004 505 402 505 272 a.a005 507 459 462 472 507 273 a.a006 508 469 508 274 a.a007 509 395 509 275 a.a008 510 413 510 276 a.a009 511 350 511 277 a.a010 512 355 512 300 a.a011 513 436 513 301 a.a012 514 310 337 514 302 a.a013 515 343 515 303 a.a014 516 342 516 304 a.a015 517 346 517 305 a.a016 518 318 518 306 a.a017 519 323 519 307 a.a018 520 520 617 1662 a.b001 1285 1285 1389 1411 1429 1663 a.b002 1286 1286 1417 1664 a.b003 1287 1209 1220 1225 1233 1265 1287 1665 a.b004 1288 1194 1288 1666 a.b005 1289 1289 1367 1376 1667 a.b006 1290 1240 1290 1670 a.b007 1291 1291 1556 1671 a.b008 1292 1292 1350 1672 a.b009 1293 1293 1609 1674 a.b010 1295 1153 1295 1780 1676 a.b011 1297 1154 1297 1677 a.b012 1298 1160 1298 1700 a.b013 1299 1162 1299 1702 a.b015 1301 1188 1301 1703 a.b016 1302 1122 1302 1704 a.b017 1303 1189 1303 1705 a.b019 1305 1151 1305 1706 a.b020 1306 1306 1399 1707 a.b021 1307 1307 1365 1374 1436 1448 1573 1600 1613 1710 a.b022 1308 1138 1308 1711 a.b023 1309 1309 1403 1498 3113 a.c001 2093 2070 2093 3114 a.c002 2094 1948 1984 2094 3115 a.c003 2095 2085 2095 3116 a.c004 2096 2065 2096 2465 a.e001 1774 1743 1750 1759 1769 1771 1774 2466 a.e002 1775 1744 1775 2467 a.e003 1776 1747 1776 2470 a.e004 1777 1764 1777 2471 a.e005 1778 1770 1778 2472 a.e006 1779 1740 1779 2473 a.e007 1780 1756 1780 assm 01 07-08-86 13.169 fnp utility programs for mcs page 140 octal symbol references by sequence no. 2474 a.e008 1781 1758 1781 2406 a.g001 1708 1652 1679 1688 1708 2407 a.g002 1709 1655 1680 1689 1709 2410 a.g003 1710 1674 1683 1710 2411 a.g004 1711 1699 1711 2412 a.g005 1712 1643 1712 2413 a.g006 1713 1645 1713 2414 a.g007 1714 1649 1714 2415 a.g008 1715 1587 1715 2416 a.g009 1716 1620 1716 2417 a.g010 1717 1631 1717 2420 a.g011 1718 1638 1718 2421 a.g012 1719 1640 1719 2422 a.g013 1720 1646 1720 1361 a.h001 1049 1034 1049 1362 a.h002 1050 1045 1050 737 a.i001 802 667 802 740 a.i002 803 678 803 741 a.i003 804 669 679 716 723 794 804 742 a.i004 805 687 727 795 805 743 a.i005 806 652 806 744 a.i006 807 663 807 745 a.i007 808 651 808 746 a.i008 809 704 809 747 a.i009 810 715 810 750 a.i010 811 722 811 751 a.i011 812 714 812 752 a.i012 813 666 789 813 753 a.i013 814 677 814 754 a.i014 815 753 815 755 a.i015 816 743 769 816 756 a.i016 817 750 817 757 a.i017 818 773 818 760 a.i018 819 793 819 5540 a.j001 3392 3314 3364 3392 5541 a.j002 3393 3318 3356 3360 3393 5542 a.j003 3394 3310 3394 5543 a.j004 3395 3332 3395 5544 a.j005 3396 3368 3396 5545 a.j006 3397 3301 3397 5546 a.j007 3398 3299 3398 5547 a.j008 3399 3381 3399 5550 a.j009 3400 3334 3400 5551 a.j010 3401 3374 3401 6143 a.k001 3634 3531 3545 3627 3634 6144 a.k002 3635 3539 3548 3555 3562 3569 3601 3608 3635 6145 a.k003 3636 3510 3636 6146 a.k004 3637 3623 3637 6147 a.k005 3638 3511 3616 3638 6150 a.k006 3639 3621 3639 assm 01 07-08-86 13.169 fnp utility programs for mcs page 141 octal symbol references by sequence no. 5706 a.l001 3486 3436 3469 3486 5707 a.l002 3487 3441 3474 3487 5710 a.l003 3488 3445 3482 3488 2632 a.m001 1902 1809 1902 5321 a.n001 3251 3200 3234 3251 5322 a.n002 3252 3216 3252 5323 a.n003 3253 3218 3245 3253 5324 a.n004 3254 3220 3254 5325 a.n005 3255 3222 3247 3255 5326 a.n006 3256 3244 3256 3517 a.o001 2425 2202 2258 2385 2425 3520 a.o002 2426 2223 2426 3521 a.o003 2427 2362 2427 3522 a.o004 2428 2236 2271 2285 2294 2305 2315 2428 3523 a.o005 2429 2339 2354 2429 3653 a.p001 2529 2442 2478 2529 3654 a.p002 2530 2447 2457 2483 2488 2530 3201 a.s002 2170 2150 2170 4340 a.v001 2748 2657 2729 2748 4341 a.v002 2749 2674 2726 2749 4503 a.w001 2909 2826 2909 5044 a.x001 3126 3077 3101 3126 5045 a.x002 3127 3105 3127 4735 a.y001 3048 2977 3040 3048 3094 4736 a.y002 3049 2988 3049 4737 a.y003 3050 2964 3050 4740 a.y004 3051 3035 3051 4741 a.y005 3052 2960 3009 3052 4742 a.y006 3053 2965 2990 3014 3032 3053 4743 a.y007 3054 3031 3054 4744 a.y009 3056 3013 3034 3056 4745 a.y010 3057 3037 3057 3095 4746 a.y011 3058 2958 3007 3058 4747 a.y012 3059 2983 3022 3059 4750 a.y013 3060 2978 3060 4751 a.y014 3061 3017 3061 6225 a.z001 3699 3674 3699 6226 a.z002 3700 3700 3908 6227 a.z003 3701 3701 3920 6230 a.z004 3702 3702 3890 3906 6231 a.z005 3703 3703 3923 6234 a.z008 3706 3706 3794 33 badint 273 59 273 20 bcdspc 161 161 977 1240 bda1 933 933 944 1260 bdacon 953 931 953 1257 bdactr 952 930 943 952 1255 bdasvi 950 926 947 950 1256 bdasx2 951 928 946 951 1231 bdecac 925 925 948 assm 01 07-08-86 13.169 fnp utility programs for mcs page 142 octal symbol references by sequence no. 5342 bfcksw 3279 3265 3277 3279 20000 bffbrk 142 142 1324 2000 bffctl 142 142 2524 1000 bffhld 142 142 2415 40000 bfflst 142 142 2416 2 bf.dta 142 142 1450 1580 2295 2418 2450 2467 2491 1 bf.flg 142 142 1607 1616 2273 2287 2497 0 bf.nxt 142 142 1438 2238 2282 2307 2311 2341 2343 2347 2485 3155 3471 3480 1 bf.siz 142 142 2543 3154 3519 1 bf.tly 142 142 1462 1576 1579 1602 2322 2507 2512 2514 2550 400 bfmsiz 142 142 3275 2 b.0 802 803 810 811 819 829 843 852 938 988 1167 1312 1458 1511 1531 1588 1827 1897 2035 2199 2253 2257 2334 2366 2379 2380 2406 2418 2505 2519 3 b.1 941 989 1465 1530 1551 1586 1644 1832 2036 2098 2198 2256 2365 2378 2419 2473 40 blank 165 165 1522 1963 5554 blkadr 3405 3317 3326 3336 3350 3359 3378 3382 3405 5555 blkvir 3406 3343 3365 3406 5556 bndry 3407 3312 3320 3407 5557 bounds 3409 3394 3409 4260 bptbak 2677 2673 2677 777777 brkall 198 198 1516 777776 brkctl 199 199 1519 6224 bstblk 3698 3672 3673 3683 3689 3698 50 bufmax 142 142 1384 1396 1492 12 bufpre 142 142 1406 5 bufshf 142 142 2974 3036 3096 3153 3206 3219 3308 3371 3522 3620 40 bufsiz 142 142 1416 1913 1914 2069 2441 2477 2559 2961 2962 3028 3029 3209 3210 3302 3303 3524 3525 3896 3897 3901 3905 2 bufthr 142 142 2358 777 buftmk 142 142 1330 2187 2417 2521 2560 77000 bwndow 2746 1342 2746 2752 3490 621 chf010 705 705 710 626 chf020 712 707 712 1024 chficw 843 728 843 614 chflt 697 587 697 732 1026 chfmsg 845 843 845 1041 chfnum 847 719 847 644 chfret 731 726 731 1053 chfst 849 811 849 2361 chk010 1682 1675 1678 1682 2372 chk020 1692 1687 1692 2402 chk030 1702 1671 1684 1702 1426 chkcnt 1092 1068 1070 1092 1423 chkhgh 1088 1076 1088 1364 chkiv 1066 66 1066 1082 1411 chklp 1075 1075 1080 1422 chkmax 1087 1079 1087 2341 chkofc 1668 1301 1668 1702 1703 1424 chkone 1091 1069 1091 assm 01 07-08-86 13.169 fnp utility programs for mcs page 143 octal symbol references by sequence no. 2403 chkret 1703 1681 1690 1694 1698 1700 1703 5327 chksiz 3264 3052 3208 3236 3264 3266 3273 3397 1421 chkstp 1084 1077 1084 1101 chnasc 860 718 810 860 4 c.0 973 978 5 c.1 974 979 5146 clr010 3179 3179 3182 5124 clrbuf 3172 3061 3159 3172 3183 5154 clrtmp 3186 3176 3181 3186 4053 cmax 2626 2575 2626 3770 cmetrs 2624 2582 2624 2626 37 conabt 277 61 277 334 conchn 528 63 409 528 765 conman 826 77 685 725 790 826 13 contip 94 510 15 cr 169 169 1208 1219 1945 1 ct.dev 202 202 1810 2224 1 ctrl 96 1902 2426 4324 cva010 2729 2725 2729 4326 cva020 2731 2728 2731 4334 cva030 2737 2734 2737 4336 cvabak 2740 2720 2722 2736 2740 4275 cvabs 2718 73 2429 2718 2740 4346 cvaoff 2756 2731 2739 2756 346 dcwlst 545 438 442 445 449 541 545 2 denq 101 2427 5 derrq 102 515 252 diapcw 491 471 491 14 dicell 92 904 454 dimb 130 130 507 905 250 dispcw 490 377 479 490 4 dl.cr 146 146 1947 3 dl.hsz 146 146 2141 3 dl.lf 146 146 1941 3 dmbx 93 513 15 dspqur 105 1297 1781 5 dt.cmt 144 144 1827 2 dt.key 144 144 2250 3 dt.prt 144 144 2230 2 eb.dta 1912 1912 2098 0 eb.inp 1909 1909 2033 2046 2077 1 eb.out 1910 1910 2078 2 eb.tly 1911 1911 2013 2048 2079 73 ebsize 1914 1914 2015 16 ecgifl 100 1293 2169 3133 echngo 2119 1292 2119 2165 2744 eforce 1990 1309 1777 1990 2001 3160 eng020 2142 2133 2142 3172 eng180 2162 2124 2126 2143 2162 3202 engich 2171 2121 2127 2134 2147 2171 assm 01 07-08-86 13.169 fnp utility programs for mcs page 144 octal symbol references by sequence no. 3174 engret 2165 2160 2165 3203 engtmp 2172 2136 2140 2172 115 errmsg 189 189 341 451 etmb 130 130 501 3126 12 exist 243 56 243 5040 ext010 3121 3116 3121 4765 extime 3093 3059 3093 3123 3255 3399 3637 3707 4776 extsa 3093 3093 3104 13 f0 252 252 502 5205 fbf010 3208 3202 3208 5210 fbf020 3211 3207 3211 5174 fbfsx1 3199 3199 3213 0 fb.nxt 2936 2936 3328 3344 3348 3358 3541 3551 3557 3561 3564 3583 3613 3614 3628 3687 3741 3742 3743 3746 3757 3760 3768 3770 3802 3810 3816 3817 3829 3834 3835 3836 3847 3848 3856 3860 3864 3867 3868 3915 1 fb.siz 2937 2937 3203 3322 3349 3527 3571 3584 3586 3603 3610 3611 3612 3677 3680 3685 3727 3739 3745 3752 3798 3841 3849 3850 3859 3865 3866 3893 360 f.name 561 511 561 766 flticw 829 682 688 829 771 fltmsg 833 829 833 324 fltnam 527 512 527 806 323 fltnum 526 306 348 423 433 526 420 fltst 130 130 809 77 fp001 317 312 317 100 fp002 319 319 324 106 fp003 327 321 327 110 fp004 331 315 331 124 fp006 348 309 314 325 329 348 133 fp008 356 356 362 142 fp009 372 372 381 157 fp010 396 396 407 200 fp015 422 410 422 236 fp020 475 475 483 241 fp030 478 477 478 214 fp16 444 440 444 221 fp17 451 447 451 226 fp18 457 454 457 41 fp 284 253 255 257 259 261 263 265 267 274 276 278 284 299 0 fp.fst 2928 2928 3675 3762 3799 3801 3827 3828 310 fp.inh 521 286 521 815 230 fpsel 461 89 461 335 fptemp 529 354 361 529 5622 frb010 3444 3434 3444 5620 frbbak 3442 3442 3446 6154 freadr 3645 3509 3529 3533 3538 3544 3550 3560 3572 3578 3588 3595 3599 3626 3645 6156 frebas 3647 3577 3580 3594 3597 3647 5570 frebfh 3432 84 3432 3438 3442 5066 frebfm 3138 3133 3138 5155 frebuf 3199 80 3199 3213 3223 3488 5625 frelbf 3458 81 3458 3460 3462 3477 assm 01 07-08-86 13.169 fnp utility programs for mcs page 145 octal symbol references by sequence no. 5244 fremem 3233 86 3233 3241 3248 6152 frenxt 3643 3515 3536 3559 3582 3591 3604 3607 3643 6153 freprv 3644 3516 3542 3554 3567 3575 3587 3644 6157 frepte 3648 3513 3617 3648 5713 frertn 3493 3439 3463 3493 3529 6155 fresiz 3646 3528 3529 3585 3619 3646 6434 fresml 3887 87 3049 3704 3887 3919 3924 5243 fretmp 3225 3211 3213 3215 3225 3239 3241 3243 5760 frh005 3524 3518 3524 5763 frh007 3527 3523 3527 6010 frh010 3533 3533 3558 6026 frh020 3548 3543 3548 6033 frh030 3554 3534 3554 6046 frh040 3566 3552 3566 6074 frh050 3590 3546 3573 3581 3590 6136 frh060 3626 3532 3626 6124 frhbak 3616 3592 3598 3605 3616 3629 5714 frhbuf 3508 3487 3508 3624 6142 frhdie 3631 3535 3574 3606 3631 5737 frhsx1 3508 3508 3529 5664 frl010 3466 3466 3476 5675 frl020 3475 3475 3483 5701 frl030 3479 3467 3479 5712 frlnxt 3492 3472 3475 3481 3492 5636 frlsa 3458 3458 3460 3465 5263 frmsx1 3233 3233 3241 6513 fsm010 3917 3891 3917 6510 fsm020 3914 3899 3904 3914 6477 fsm030 3905 3903 3905 6457 fsm040 3889 3889 3913 6462 fsm050 3892 3892 3916 6524 fsmcnt 3925 3888 3912 3917 3925 6522 fsmret 3924 3918 3924 6525 fsmtmp 3926 3894 3898 3902 3926 3700 ftemp 2561 2549 2552 2561 3655 fulbuf 2541 65 1289 2520 2541 2554 2555 336 fvsave 530 289 530 616 4705 gbfail 3027 3015 3027 4754 gbfaq 3067 2968 2970 3067 4605 gbfbak 2982 2982 2995 4616 gbfng 2994 2989 2991 2994 4611 gbfnsp 2988 2966 2988 4546 gbfok 2967 2967 2992 4653 gbfsml 3012 3012 3042 4533 gbfsq 2957 2957 2980 4534 gbfsx1 2957 2957 2980 4753 gbftmp 3065 3027 3041 3065 5343 getbfh 3298 83 2529 3298 3366 3378 3383 5056 getbfm 3137 88 3132 3137 4515 getbuf 2957 79 2957 2967 2980 2984 assm 01 07-08-86 13.169 fnp utility programs for mcs page 146 octal symbol references by sequence no. 4626 getmem 3006 85 3006 3016 3019 3023 6160 getspc 3670 3053 3400 3670 3692 3696 1320 gettib 1024 55 1024 1043 1305 5343 getubf 3297 82 1286 2093 3297 5404 gfh010 3317 3317 3329 5414 gfh020 3326 3321 3326 5420 gfh025 3332 3315 3332 5435 gfh030 3342 3324 3342 5447 gfh040 3353 3346 3353 5460 gfh050 3364 3355 3364 5462 gfh060 3366 3340 3362 3366 5527 gfh070 3385 3335 3385 5522 gfhbak 3380 3380 3387 5360 gfhsq 3298 3298 3378 5361 gfhsx1 3298 3298 3378 6213 gsp010 3689 3676 3689 6216 gsp020 3692 3678 3692 6210 gsp030 3686 3679 3681 3682 3686 6176 gsp040 3676 3676 3688 6222 gspret 3696 3690 3696 1354 gtb010 1043 1043 1047 1356 gtb020 1045 1026 1045 4701 gtmbak 3021 3021 3045 4725 gtmng 3044 3033 3044 4644 gtmsq 3006 3006 3019 4645 gtmsx1 3006 3006 3019 6 h1ch 130 130 371 426 h1fts 130 130 518 430 h3fts 130 130 519 17 hcheck 103 1291 1778 13 hfv 251 57 251 1000 hslafl 175 175 1329 1785 2105 11 ht 166 166 167 1982 1011 icasci 836 802 836 555 icp010 650 644 650 561 icp020 655 655 661 606 icp030 684 672 684 553 icprt 648 582 583 584 643 648 686 690 544 ignore 631 58 505 506 578 579 585 586 588 631 546 illop 640 581 640 642 1650 inchar 1274 1168 1173 1174 1182 1190 1224 1257 1260 1274 1349 1457 1472 1521 1532 1710 1643 inchrp 1269 1166 1269 1550 1712 1645 inecho 1271 1126 1271 1553 1555 1714 2095 1653 inenef 1277 1277 1346 1351 1562 1717 1651 inorig 1275 1175 1275 1479 1489 1715 1450 inp005 1118 1115 1118 1475 inp006 1142 1135 1137 1142 1515 inp007 1159 1149 1159 1523 inp010 1166 1144 1147 1166 1720 1533 inp012 1174 1171 1174 assm 01 07-08-86 13.169 fnp utility programs for mcs page 147 octal symbol references by sequence no. 1547 inp015 1187 1178 1183 1187 1562 inp020 1202 1195 1202 1572 inp030 1212 1196 1212 1602 inp040 1221 1218 1221 1606 inp050 1228 1197 1228 1614 inp060 1236 1198 1236 1615 inp070 1239 1199 1239 1624 inp080 1247 1243 1247 1627 inp090 1252 1241 1252 1634 inp100 1259 1205 1207 1210 1215 1232 1237 1246 1250 1255 1259 1750 inp110 1345 1226 1234 1263 1266 1345 1756 inp114 1352 1348 1352 1767 inp116 1363 1357 1363 1777 inp119 1372 1354 1372 2005 inp120 1380 1360 1362 1364 1368 1380 2017 inp125 1392 1385 1392 2030 inp128 1401 1397 1401 2033 inp130 1405 1394 1400 1405 2042 inp140 1413 1390 1407 1413 2050 inp150 1424 1418 1424 2064 inp160 1432 1421 1432 2073 inp170 1441 1433 1441 2074 inp180 1444 1439 1444 2103 inp190 1454 1378 1454 2122 inp200 1473 1370 1470 1473 2132 inp210 1483 1476 1483 2147 inp215 1497 1493 1497 2151 inp220 1500 1486 1490 1496 1500 2173 inp230 1526 1520 1526 2174 inp240 1529 1529 1537 2203 inp250 1540 1480 1502 1517 1523 1533 1540 2221 inp260 1558 1548 1554 1558 2252 inp261 1590 1571 1590 2265 inp262 1608 1599 1605 1608 2267 inp265 1611 1561 1611 2303 inp298 1624 1563 1624 2305 inp300 1628 1303 1430 1481 1512 1524 1536 1589 1610 1623 1628 2315 inp310 1637 1630 1632 1637 2321 inp320 1642 1639 1642 2337 inpbak 1659 1302 1659 2405 inpind 1706 1633 1636 1706 1430 inproc 1112 69 1112 1659 1441 inpsx1 1112 1112 1155 1654 inpte 1278 1131 1140 1278 1718 2425 inptim 1737 1296 1737 1655 inpvir 1279 1279 1455 1460 1574 1581 1656 inq 1280 1129 1280 1356 1369 1381 1570 1644 inrem 1270 1125 1270 1713 1647 inres 1273 1128 1273 1709 3561 ins010 2455 2439 2455 assm 01 07-08-86 13.169 fnp utility programs for mcs page 148 octal symbol references by sequence no. 3602 ins020 2476 2462 2476 3621 ins030 2494 2453 2494 3626 ins040 2503 2472 2474 2503 3652 insbuf 2527 2449 2463 2490 2506 2527 3524 insert 2435 2425 2435 2515 3537 inssa 2435 2435 2504 1646 insusp 1272 1127 1272 1708 1660 intime 1282 1159 1161 1163 1282 35 iomflt 275 60 275 288 291 520 2500 ipabs 1788 1739 1757 1788 2502 iptemp 1790 1745 1746 1748 1790 6 istat 97 1285 1716 5051 itaddr 3132 3127 3132 3651 itemp1 2526 2465 2468 2510 2513 2526 1105 itemp 862 654 660 665 675 713 721 862 7 itest 98 1300 1711 4 it.gt1 138 138 3117 3118 2 it.inc 138 138 3121 3122 7 it.max 138 138 3111 3113 0 it.tot 138 138 3108 3109 2452 itm010 1761 1752 1754 1761 450 itmb 130 130 1298 1775 7 itprty 159 159 1295 710 .crbpe 132 132 1308 1719 2749 3638 650 .crbuf 132 132 3706 653 .criom 132 132 1049 651 .crmem 132 132 816 2909 3699 652 .crnbf 132 132 1306 3048 3254 3401 3639 3701 675 .crnbs 132 132 3057 3703 660 .crnxa 132 132 3050 3054 3252 3395 3700 707 .crnxe 132 132 3392 3634 674 .crnxs 132 132 3056 3256 3702 702 .crpte 132 132 817 2748 705 .crtdt 132 132 1050 735 .malof 136 136 2994 3044 3386 750 .mblow 136 136 3338 740 .mbufa 136 136 2969 3376 724 .mspav 136 136 3098 2 kyadd 2182 2182 2214 2228 16 l6ch 130 130 380 12 lf 168 168 1222 1939 356 licadr 556 452 556 254 l.a001 492 391 492 255 l.a002 493 374 476 493 256 l.a003 494 394 494 260 l.a005 496 441 448 496 261 l.a006 497 455 497 262 l.a007 498 328 498 263 l.a008 499 290 499 1712 l.b001 1312 1312 1451 1508 1582 assm 01 07-08-86 13.169 fnp utility programs for mcs page 149 octal symbol references by sequence no. 1713 l.b002 1313 1203 1313 1714 l.b003 1314 1213 1314 1715 l.b004 1315 1216 1261 1315 1622 1716 l.b005 1316 1230 1316 1717 l.b006 1317 1244 1253 1317 1720 l.b007 1318 1248 1318 1721 l.b008 1319 1319 1388 1428 1722 l.b009 1320 1320 1410 1723 l.b010 1321 1184 1321 1475 1542 1724 l.b011 1322 1322 1478 1725 l.b012 1323 1177 1323 1726 l.b013 1324 1324 1606 1615 1727 l.b014 1325 1325 1619 1730 l.b015 1326 1326 1359 1501 1560 1731 l.b016 1327 1327 1469 1732 l.b017 1328 1328 1625 1733 l.b018 1329 1329 1547 1734 l.b019 1330 1330 1577 1603 1735 l.b020 1331 1331 1634 1736 l.b021 1332 1146 1332 1737 l.b022 1333 1143 1333 1393 1485 1740 l.b025 1336 1133 1336 1741 l.b026 1337 1337 1494 1742 l.b027 1338 1148 1156 1338 1743 l.b028 1339 1170 1339 1744 l.b029 1340 1340 1424 1745 l.b030 1341 1134 1341 1746 l.b031 1342 1136 1342 1747 l.b032 1343 1343 1361 3117 l.c001 2098 2043 2076 2098 3120 l.c002 2099 2040 2099 3121 l.c003 2100 2017 2100 3122 l.c004 2101 1977 2101 3123 l.c005 2102 1960 1979 2030 2102 3124 l.c006 2103 1927 2103 3125 l.c007 2104 2038 2104 3126 l.c008 2105 1934 2024 2105 3130 l.c010 2107 2047 2107 3131 l.c011 2108 2019 2089 2108 3765 l.d001 2617 2574 2597 2617 2475 l.e001 1784 1753 1784 2476 l.e002 1785 1768 1785 2477 l.e003 1786 1765 1786 3675 l.f001 2558 2548 2558 3676 l.f002 2559 2546 2559 3677 l.f003 2560 2551 2560 2423 l.g001 1722 1670 1722 2424 l.g002 1723 1677 1686 1723 1363 l.h001 1052 1025 1052 761 l.i001 821 744 821 assm 01 07-08-86 13.169 fnp utility programs for mcs page 150 octal symbol references by sequence no. 762 l.i002 822 748 822 763 l.i003 823 756 823 764 l.i004 824 781 785 824 5537 l.j001 3390 3338 3376 3386 3390 6151 l.k001 3641 3576 3579 3593 3596 3641 5711 l.l001 3490 3433 3466 3490 2625 l.m001 1897 1813 1897 2626 l.m002 1898 1880 1882 1898 2630 l.m004 1900 1818 1836 1900 2631 l.m005 1901 1878 1901 3476 l.o001 2406 2194 2251 2296 2406 3477 l.o002 2407 2200 2407 3500 l.o003 2408 2219 2408 3502 l.o005 2410 2367 2410 3503 l.o006 2411 2382 2411 3504 l.o007 2412 2393 2412 3505 l.o008 2413 2350 2413 3506 l.o009 2414 2319 2320 2414 3507 l.o010 2415 2274 2415 3510 l.o011 2416 2280 2416 3511 l.o012 2417 2323 2417 3512 l.o013 2418 2326 2418 3513 l.o014 2419 2329 2419 3643 l.p001 2519 2451 2469 2492 2519 3644 l.p002 2520 2459 2520 3645 l.p003 2521 2508 2521 3647 l.p005 2523 2511 2523 3650 l.p006 2524 2496 2524 3176 l.s001 2167 2132 2167 3177 l.s002 2168 2123 2168 4342 l.v001 2751 2659 2724 2730 2751 4343 l.v002 2752 2676 2719 2727 2752 4344 l.v003 2753 2672 2721 2753 4504 l.w001 2911 2797 2911 4505 l.w002 2912 2804 2912 4506 l.w003 2913 2845 2893 2896 2901 2913 4507 l.w004 2914 2811 2914 4752 l.y001 3063 2969 2994 3044 3063 5054 loctim 3136 3107 3110 3115 3136 344 lsticw 541 541 556 4510 mabsad 2916 2796 2803 2827 2830 2843 2846 2860 2887 2889 2916 5 macwk1 3887 697 732 741 798 1024 1043 1066 1082 1112 1659 1668 1703 1805 1894 1924 1987 1990 2001 2003 2049 2051 2086 2119 2165 2190 2402 2435 2515 2541 2555 2572 2583 2595 2609 2656 2660 2671 2677 2693 2700 2718 2740 2791 2802 2906 2957 2984 3006 3023 3076 3079 3093 3123 3151 3160 3172 3183 3199 3223 3233 3248 3298 3383 3432 3442 3458 3477 3508 3624 3670 3696 3726 3774 3792 3872 3887 3924 13 macwk2 3887 697 741 1024 1066 1112 1668 1805 1924 1990 2003 2051 2119 2190 2435 2541 2572 2595 2656 2671 2693 2718 2791 2802 2957 3006 3076 3093 3151 3172 3199 3233 3298 3432 3458 3508 3670 3726 3792 3887 assm 01 07-08-86 13.169 fnp utility programs for mcs page 151 octal symbol references by sequence no. 4 macwk3 3529 2980 3019 3213 3241 3378 3460 3529 10 macwk4 3529 2980 3019 3213 3241 3378 3460 3529 77 mask6 172 172 1116 177 mask7 173 173 1118 4 maxctl 2185 2185 2409 5341 maxsiz 3275 3270 3275 1106 memlst 863 746 749 760 777 863 646 mempar 741 580 741 798 3701 meterc 2572 53 2572 2583 3764 meterr 2613 2577 2600 2613 3727 metert 2595 54 2595 10 mincd 108 2019 2969 3376 11 mincs 107 1424 2089 2994 3044 3338 3386 24 m.ebof 136 136 2019 14 m.inaf 136 136 1424 2089 2635 mlimit 1905 1825 1830 1905 657 mmp010 748 745 748 663 mmp020 752 747 752 665 mmp030 754 754 763 778 677 mmp040 765 761 765 703 mmp045 769 766 769 714 mmp050 780 758 780 723 mmp060 788 770 788 724 mmp070 789 782 784 787 789 1076 mmpadr 856 819 856 1056 mmpicw 852 796 852 1060 mmpmsg 854 852 854 735 mmpret 798 791 798 4 modnum 114 114 1084 2139 2309 2369 2375 2443 2479 2818 2825 2829 2836 2839 2980 3019 3213 3241 3269 3272 3378 3460 3529 3631 3797 3846 3863 2531 mov005 1823 1820 1823 2532 mov010 1825 1822 1825 2534 mov012 1827 1827 1833 2543 mov020 1835 1831 1835 2553 mov025 1844 1838 1844 2557 mov027 1848 1841 1843 1848 2561 mov030 1851 1828 1851 2567 mov035 1860 1854 1860 2573 mov040 1865 1862 1865 2603 mov050 1875 1867 1875 2613 mov060 1884 1881 1884 2617 mov070 1889 1879 1889 2622 movbak 1893 1849 1858 1864 1869 1873 1893 2504 move 1805 70 1288 1805 1889 1890 1893 1894 4355 mpssi 2791 2791 2794 4375 mptsi 2802 2795 2802 4511 mrmlen 2917 2813 2819 2831 2837 2847 2849 2857 2882 2894 2902 2917 772 msgnam 834 808 834 2634 mshift 1904 1290 1808 1856 1904 145 msksel 376 375 376 assm 01 07-08-86 13.169 fnp utility programs for mcs page 152 octal symbol references by sequence no. 3723 mtc010 2580 2576 2580 3725 mtcbak 2583 2578 2583 3714 mtcsq 2572 2572 2581 2633 mtemp 1903 1885 1887 1903 4 mt.frc 219 219 3460 2 mt.fre 217 217 3213 3241 3529 1 mt.get 216 216 2980 3019 3378 4512 mtstad 2918 2812 2815 2821 2822 2833 2834 2918 3754 mtt010 2603 2599 2603 3762 mttbak 2609 2601 2609 3766 mttemp 2620 2604 2605 2620 20 mupdat 109 3098 4513 mvllmp 2919 2854 2888 2897 2919 4402 mvp000 2810 2800 2810 4445 mvp020 2852 2848 2852 4452 mvp040 2859 2850 2859 4453 mvp060 2864 2864 2898 2903 4454 mvp080 2867 2798 2805 2867 4455 mvp100 2872 2872 2878 4476 mvp110 2900 2895 2900 4347 mvpgsc 2791 74 2791 2792 4367 mvpgtg 2802 75 2793 2802 2906 4514 mvplmm 2920 76 2814 2920 4501 mvpret 2905 2883 2905 777000 nbftmk 2187 2187 2523 0 null 163 163 1953 1223 obit0 903 880 903 1224 obit1 904 884 904 1225 obit2 905 895 898 905 1226 obit3 906 888 906 1227 obit4 907 892 907 1230 obit5 908 894 908 1200 obit 879 508 879 899 1220 obsel 897 90 897 3515 obufad 2422 2317 2330 2337 2346 2422 20 oct020 186 186 495 1303 octasc 983 62 804 983 993 1265 octbcd 968 968 981 1316 octsv 996 969 970 980 984 985 992 996 3516 ohldot 2423 2267 2278 2299 2423 1652 oldpos 1276 1193 1206 1276 2094 77 opend 2180 2180 2211 3514 otemp 2421 2233 2246 2397 2399 2421 3226 out010 2197 2197 2204 2221 2261 2388 3234 out020 2206 2201 2206 3274 out028 2247 2232 2247 3275 out030 2249 2229 2249 3301 out040 2255 2255 2260 3307 out050 2263 2215 2263 3324 out052 2279 2279 2288 assm 01 07-08-86 13.169 fnp utility programs for mcs page 153 octal symbol references by sequence no. 3336 out054 2289 2275 2281 2283 2289 3353 out060 2303 2291 2303 3362 out070 2312 2300 2312 2348 3423 out071 2346 2321 2335 2346 3434 out073 2358 2344 2358 3441 out075 2364 2269 2301 2345 2360 2364 3446 out080 2371 2265 2371 3450 out090 2374 2209 2374 3451 out100 2377 2373 2377 3456 out110 2384 2384 2387 3462 out200 2391 2212 2368 2391 3 outmsg 2183 2183 2264 3204 outprc 2190 64 2190 2402 1107 pagbas 864 742 765 772 783 786 864 3016 pin010 2021 2016 2021 3030 pin015 2032 2025 2028 2032 3040 pin020 2042 2039 2042 3042 pin030 2045 2041 2045 3045 pinbak 2049 2020 2031 2049 1642 pmask 1268 1119 1172 1268 5553 prvadr 3404 3313 3327 3354 3404 6323 prvblk 3777 3671 3684 3686 3691 3758 3777 3804 3809 3815 3822 3889 3914 40 pte.a 2744 2696 2733 2744 3062 puo005 2069 2064 2069 3074 puo010 2080 2067 2080 3103 puo020 2088 2071 2088 3101 puobak 2086 2081 2086 2090 2675 put020 1945 1940 1945 2706 put030 1953 1943 1953 2710 put039 1956 1937 1956 2711 put040 1957 1946 1957 2720 put050 1965 1954 1965 2723 put060 1969 1969 1972 2730 put070 1975 1935 1975 2740 put080 1984 1978 1984 2742 putbak 1987 1928 1931 1942 1949 1958 1961 1970 1973 1980 1983 1987 2636 puteco 1924 68 1287 1924 1987 2170 2764 putin 2003 1969 2003 2022 2049 2080 3047 putone 2051 1930 1999 2051 2083 2086 2654 putsq 1924 1924 1938 1956 1981 2074 2651 putsx2 1924 1924 1962 3132 puttmp 2111 1968 1971 2111 527 pwron 610 517 610 340 reason 534 516 534 547 6324 relspc 3792 3051 3253 3792 3872 3911 4 repeat 2184 2184 2372 1 reteco 177 177 1651 4 retres 179 179 1657 2 retsus 178 178 1654 340 rfault 535 335 434 535 assm 01 07-08-86 13.169 fnp utility programs for mcs page 154 octal symbol references by sequence no. 341 ric 536 338 536 813 6350 rsp010 3804 3800 3804 6364 rsp020 3822 3808 3822 6352 rsp030 3806 3806 3811 6372 rsp040 3834 3823 3834 6375 rsp050 3840 3818 3840 6412 rsp060 3856 3830 3844 3856 6404 rsp070 3847 3845 3847 6422 rsp080 3864 3862 3864 6427 rspret 3870 3803 3857 3861 3870 6433 rsptmp 3873 3805 3807 3842 3843 3873 342 rstat 537 332 537 812 177 rubout 170 170 1840 343 rword 538 339 538 814 4345 sargsv 2755 2694 2698 2755 5046 savcnt 3129 3097 3098 3129 312 save 525 285 287 292 293 294 296 298 301 525 612 614 618 619 620 621 622 623 807 1120 sd.iv 870 509 870 21 secdsp 106 1774 4241 setbpt 2671 72 1307 2096 2428 2530 2671 2677 3393 3486 3635 4262 setpte 2693 2658 2675 2693 2700 4222 setptw 2656 71 818 1779 2656 2660 2865 5076 setsc 3151 3060 3151 3160 3396 21 sf.nic 140 140 1552 510 sfv 577 503 577 22 simclk 104 1299 1776 5552 size 3403 3305 3323 3333 3345 3347 3351 3367 3403 1000 s.brch 148 148 1325 17 s.dss 148 148 1387 1409 1618 4000 s.exh 148 148 1319 200 s.prex 148 148 1320 177 s.tib 148 148 1427 105 sndout 188 188 2361 40 space 164 164 165 1842 5110 sscsq 3151 3151 3156 523 stop 597 487 597 5047 sttime 3130 3078 3103 3130 5050 sttimx 3131 3102 3131 11 tab 167 167 1957 2027 100 tf8in 134 134 1339 2 tfbel 134 134 2100 4000 tfblak 134 134 1723 2414 20 tfbral 134 134 1326 2168 2000 tfcrec 134 134 1313 1899 400 tfctrl 134 134 2408 200000 tfecpx 134 134 1315 1899 2101 100000 tffip 134 134 1321 2103 40000 tffrmi 134 134 1323 40 tfifc 134 134 1333 assm 01 07-08-86 13.169 fnp utility programs for mcs page 155 octal symbol references by sequence no. 40000 tfinq 134 134 1343 100000 tfisus 134 134 1337 2 tfitim 134 134 1332 1000 tflfec 134 134 1314 1899 2106 100 tfofc 134 134 1722 2414 200000 tfsftr 134 134 1327 1900 40 tfsked 134 134 1338 1786 4000 tftbec 134 134 1316 1899 2102 200 tfupsf 134 134 1317 1318 1 tfwrit 134 134 1328 2413 4756 timein 3076 3058 3076 3079 3251 3398 3636 3705 32 t.brkp 134 134 1507 41 t.dcpl 134 134 1383 23 t.dcwa 134 134 2193 2396 2401 24 t.dcwl 134 134 2398 2400 27 t.dlst 134 134 1363 1572 37 t.dtp 134 134 1936 25 t.echo 134 134 2063 2073 44 t.entp 134 134 1629 2137 2 t.flg2 134 134 1142 1176 1185 1245 1249 1254 1392 1468 1474 1484 1544 1669 1676 1685 1819 1837 1926 2318 36 t.flg3 134 134 1145 1157 1169 1358 1500 1559 1766 2122 1 t.flg 134 134 1204 1214 1217 1231 1262 1495 1621 1626 1959 1976 2018 2029 2220 2351 40 t.frmc 134 134 1179 1477 10 t.icch 134 134 1452 1456 1464 1466 5 t.icp 134 134 1353 1432 1442 1598 7 t.icpl 134 134 1382 1395 1405 1419 1491 45 t.ifch 134 134 1401 1487 1761 6 t.ilst 134 134 1373 1435 1446 1597 1612 50 t.itim 134 134 1164 1742 1749 4 t.line 134 134 1150 1546 1767 1933 2023 52 t.metr 134 134 1424 2019 2089 15 t.occh 134 134 2297 2452 16 t.ocnt 134 134 2244 2313 2359 12 t.ocp 134 134 2234 2240 2268 2289 2342 2356 13 t.ocur 134 134 2231 2239 2242 2276 2290 2292 2298 2438 2445 46 t.ofch 134 134 1672 2332 14 t.olst 134 134 2235 2243 2279 2304 2340 2355 2446 2456 2482 2493 47 t.omct 134 134 1693 1696 2336 33 t.pos 134 134 1192 1844 1847 1863 1868 1871 1877 1888 1985 42 t.scll 134 134 1347 2125 2158 2162 30 t.sfcm 134 134 1549 43 t.sncc 134 134 1635 2152 0 t.stat 134 134 1386 1408 1426 1617 17 t.type 134 134 1811 2225 3767 tmax 2621 2598 2621 144 tmaxd 2633 2621 2633 4054 tmetrs 2629 2607 2608 2629 4056 tmorg 2631 2629 2631 2633 12 trace 99 2980 3019 3213 3241 3378 3460 3529 assm 01 07-08-86 13.169 fnp utility programs for mcs page 156 octal symbol references by sequence no. 1110 tstadr 865 752 754 759 762 775 865 1111 tstind 866 755 757 866 0 tych 130 130 528 420 tyfts 130 130 514 6303 untall 3757 3730 3757 6312 untbeg 3767 3733 3767 6300 untend 3751 3735 3751 6310 unthed 3762 3759 3762 6237 unthrd 3726 3695 3726 3774 3907 6304 untjon 3758 3758 3772 6320 untret 3774 3747 3753 3761 3763 3774 6253 untsq 3726 3726 3728 3767 6254 untsx2 3726 3726 3740 6255 untsx3 3726 3726 3732 6322 unttmp 3776 3729 3734 3744 3751 3769 3776 0 util 113 50 113 114 312 utsave 524 67 524 4 wcon 95 805 1021 wdasci 839 803 839 1104 wflag 861 641 649 671 861 77400 window 2745 1341 2745 2751 1 w.2 541 547 551 556 908 49465 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