assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 1 system communications region preface program break 3772 common length 0 v count bits 5 primary symdef entry intp 0 itmout 230 itest 13 iwrite 61 istat 127 istbrk 261 globsw 12 cvaddr 1705 adbyte 3627 getcmt 2211 end of binary card 00000001 intend 3772 secondary symdef entry mcall 2164 mcal2 2174 .chain 0 x.002. 40 x.004. 106 x.006. 155 x.009. 207 x.012. 234 x.014. 375 end of binary card 00000002 block length symref 1 ctrl 2 denq 3 hcfg 4 hdcw 5 ldcw 6 mmsg 7 hgeti 10 mincd 11 mincs 12 trace end of binary card 00000003 13 brkhit 14 frebuf assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 2 system communications region 15 frelbf 16 fremem 17 getbuf 20 getmem 21 gettib 22 lctlck 23 meterc 24 mupdat end of binary card 00000004 25 puteco 26 secdsp 27 setcct 30 setime 31 setptw end of binary card 00000005 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 3 system communications region 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 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 4 system communications region 11 lbl ,interpreter 12 13 ******************************************************************************** 14 * 15 * modified 79 jul 29 by art beattie to use real tib address in trace calls 16 * and call 'setptw' in 'itmout' routine. 17 * modified 81 jan 16 by robert coren to add metering op blocks 18 * 19 ******************************************************************************** 20 21 22 pcc on 23 pmc off 24 editp on 25 symdef intp 26 symdef itmout,itest,iwrite,istat,istbrk 27 symdef globsw 28 symdef cvaddr 29 symdef adbyte 30 symdef getcmt 31 symdef intend end of interpreter 32 symdef -mcall 33 symdef -mcal2 34 pmc save,on 00000 35 comreg assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 5 system communications region ttls system communications region ********************************** * system communication region * ********************************** 000640 .crldt set 416 date and time of binding 000644 .crbdt set 420 date and time of bootloading 000650 .crbuf set 424 starting address of buffer area 000651 .crmem set 425 last location of memory 000652 .crnbf set 426 number of buffers available 000653 .criom set 427 start of iom table 000654 .crnhs set 428 number of hsla's configured 000655 .crnls set 429 number of lsla's configured 000656 .crcon set 430 console enabled flag 000657 .crmod set 431 starting address of module chain 000660 .crnxa set 432 ptr to next avaliable buffer 000661 .crtra set 433 trace entry enable mask 000662 .crtrb set 434 base address of trace table 000663 .crtrc set 435 next available location in trace table 000664 .crreg set 436 disaster fault register storage location 000665 .crttb set 437 location of tib table 000666 .crtte set 438 location of end of tib table 000667 .crdly set 439 head of delay table chain 000670 .crver set 440 mcs version number, 4 chars 000672 .crbrk set 442 addr of breakpoint control table 000673 .crtsw set 443 if non-zero, tracing will cease 000674 .crnxs set 444 next free small block 000675 .crnbs set 445 number of buffers devoted to small space assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 6 system communications region 000676 .crcct set 446 address of first cct descriptor 000677 .crskd set 447 address of scheduler data block 000700 .cretb set 448 list of echo-negotiation bit tables 000701 .crcpt set 449 address of cpu page table 000702 .crpte set 450 address of variable cpu page table entry 000703 .crtsz set 451 size of trace data buffer 000704 .crmet set 452 non-zero if metering enabled 000705 .crtdt set 453 address of tib for t&d executive channel 000706 .crbtm set 454 address of time meters for getbuf/frebuf 000760 .crcpr set 496 copyright notice 00000 36 tib assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 7 terminal information block (tib) ttls terminal information block (tib) 000000 t.stat equ 0 holds current line status 000001 t.flg equ t.stat+1 flag word 000002 t.flg2 equ t.flg+1 second word of flags 000003 t.cur equ t.flg2+1 current address in control table 000004 t.line equ t.cur+1 10 bit line number 000005 t.icp equ t.line+1 first buffer in input chain 000006 t.ilst equ t.icp+1 last buffer in input chain 000007 t.icpl equ t.ilst+1 count of buffers in icp chain 000010 t.icch equ t.icpl+1 address of next input character 000011 t.elnk equ t.icch+1 link to tib extension 000011 t.rcp equ t.elnk replay chain pointer (share t.elnk) 000012 t.ocp equ t.elnk+1 addr of output chain from cs 000013 t.ocur equ t.ocp+1 addr of current output buffer 000014 t.olst equ t.ocur+1 addr of last buffer in output chain 000015 t.occh equ t.olst+1 addr of next output character 000016 t.ocnt equ t.occh+1 count of buffers in t.ocur 000017 t.type equ t.ocnt+1 line type 000020 t.time equ t.type+1 time at which next timeout will occur 000022 t.reta equ t.time+2 return address from calsub 000023 t.dcwa equ t.reta+1 addr of dcw list to 'execute' 000024 t.dcwl equ t.dcwa+1 length of dcw list 000025 t.echo equ t.dcwl+1 echo buffer address 000026 t.dcp equ t.echo+1 addr of message chain for cs 000027 t.dlst equ t.dcp+1 last buffer in messge chain for cs 000030 t.ftse equ t.dlst+1 first time slot entry in lsla table assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 8 terminal information block (tib) 000030 t.sfcm equ t.ftse pointer to sfcm for hsla lines 000031 t.bcnt equ t.ftse+1 counting temporary 000032 t.brkp equ t.bcnt+1 pointer to current break list 000033 t.pos equ t.brkp+1 current carriage position 000034 t.char equ t.pos+1 pending line control char (lsla only) 000034 t.ecch equ t.char address of current echo char (hsla only) 000035 t.cntr equ t.char+1 counter for control tables 000036 t.flg3 equ t.cntr+1 third word of flags 000037 t.dtp equ t.flg3+1 pointer to delay table for this line 000040 t.frmc equ t.dtp+1 framing chars (2 chars) 000041 t.dcpl equ t.frmc+1 number of buffers in dcp chain 000042 t.scll equ t.dcpl+1 screenline length left, for echo neg. 000043 t.sncc equ t.scll+1 echo negotiation sync ctr. 000044 t.entp equ t.sncc+1 echo negotiation break table ptr 000045 t.ifch equ t.entp+1 input flow control characters 000046 t.ofch equ t.ifch+1 output flow control characters 000047 t.omct equ t.ofch+1 output message count (for flow control) 000050 t.itim equ t.omct+1 time of last call to inproc (2 words) 000052 t.metr equ t.itim+2 address of metering area 000053 t.leng equ t.metr+1 length of a tib ******************************** * t.stat bits ******************************** 000001 tsfcd bool 000001 carrier detect 000002 tsfcts bool 000002 clear to send 000004 tsfdsr bool 000004 data set ready assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 9 terminal information block (tib) 000010 tsfsrc bool 000010 supervisory receive 000020 tsfst bool 000020 store status 000040 tsfmrk bool 000040 send marker status 000100 tsftrm bool 000100 send terminate status 000200 tsfrcv bool 000200 receive mode 000400 tsfxmt bool 000400 transmit mode 001000 tsfbrk bool 001000 send line break 002000 tsfdtr bool 002000 data terminal ready 004000 tsfsxt bool 004000 supervisory transmit 004000 tsftre bool 004000 tally runout enable (hdlc) 010000 tsfrts bool 010000 request to send 020000 tsfcrq bool 020000 acu call request ******************************** * tib flags -- t.flg ******************************** 000001 tfwrit bool 000001 output chain present 000002 tfbel bool 000002 send bell as next echoed character 000004 tffdpx bool 000004 full duplex mode 000010 tfkybd bool 000010 keyboard addressed 000020 tfprtr bool 000020 printer addressed 000040 tfhang bool 000040 hangup this line 000100 tflisn bool 000100 answer the phone 000200 tfquit bool 000200 send nl on line break 000400 tfctrl bool 000400 do kybd/printer addressing 001000 tflfec bool 001000 do lf echo on cr assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 10 terminal information block (tib) 002000 tfcrec bool 002000 do cr echo on lf 004000 tftbec bool 004000 do space echo on tab 010000 tfwabt bool 010000 do write abort 020000 tfauto bool 020000 this is hsla autobaud line 040000 tfeotx bool 040000 eot expected from 2741 100000 tfisus bool 100000 input suspended 200000 tfecpx bool 200000 echoplex mode 400000 tfosus bool 400000 output suspended ******************************** * second word of tib flags ******************************** 000001 tfxhld bool 000001 hold transmit on 000002 tfdild bool 000002 terminal is dialed up 000004 tfercv bool 000004 enter receive mode 000010 tfrabt bool 000010 do read abort 000020 tfacu bool 000020 do dial out 000040 tfifc bool 000040 input flow control mode 000100 tfofc bool 000100 output flow control mode 000200 tfupsf bool 000200 terminal is upshifted now 000400 tfrply bool 000400 replay mode 001000 tfrpon bool 001000 replay is occurring now 002000 tfplit bool 002000 polite mode 004000 tfblak bool 004000 asynchronous block acknowledgement 010000 tfcrcv bool 010000 'control' receive mode 020000 tfmrcv bool 020000 'message' receive mode 040000 tffrmi bool 040000 frame mode assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 11 terminal information block (tib) 100000 tffip bool 100000 frame in progress 200000 tfsftr bool 200000 terminal is shifting device 400000 tfpfnl bool 400000 line is in prefixnl mode ********************************* * third word of tib flags ********************************* 000001 tfbkpt bool 000001 line is stopped at breakpoint 000002 tfitim bool 000002 timeout if input stops 000004 tfkpar bool 000004 keep parity bits 000010 tfecho bool 000010 echoing has priority over output (lsla) 000020 tfbral bool 000020 break on all characters 000040 tfsked bool 000040 input timeout routine scheduled 000100 tf8in bool 000100 don't strip input parity 000200 tf8out bool 000200 don't strip output parity 000400 tfoddp bool 000400 odd parity 002000 tfsoip bool 002000 suspension of output in progress 004000 tforp bool 004000 output resume pending (waiting until tro) ********************************* * redefined tib flags in t.flg ********************************* 000020 tfdlup equ tfprtr line is on dialup modem 00000 37 meters assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 12 system-wide meters ttls system-wide meters 000720 .mdilc set 464 cumulative no. of channels dialed 000722 .mdilu set 466 updates of .mdilc 000724 .mspav set 468 cumulative space available 000726 .mspau set 470 updates of .mspav 000730 .mimbx set 472 cumulative number of mbxes in use 000732 .mimbu set 474 updates of .mimbx 000734 .mndil set 476 current no. of channels dialed 000735 .malof set 477 number of space allocation failures 000736 .mdias set 478 abnormal dia status 000737 .mpool set 479 total size of buffer pool (in words) 000740 .mbufa set 480 number of buffer allocations 000742 .mbfpa set 482 number of buffers pre-allocated 000744 .mupab set 484 used a pre-allocated buffer 000746 .mpanf set 486 no pre-allocated buffer available 000030 .mleng equ .mpanf+2-.mdilc length of system-wide meters assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 13 per-channel meters ttls per-channel meters meters for all channels 000000 m.dql equ 0 cumulative length of dia request queue 000002 m.dqu equ m.dql+2 updates of m.dql 000004 m.nst equ m.dqu+2 cumulative no. of pending status 000006 m.nsu equ m.nst+2 updates of m.nst 000010 m.over equ m.nsu+2 output overlaps 000011 m.par equ m.over+1 parity errors 000012 m.ssqo equ m.par+1 software status queue overflows 000013 m.hsqo equ m.ssqo+1 hardware status queue overflows 000014 m.inaf equ m.hsqo+1 input allocation failures 000015 m.cql equ m.inaf+1 current length of dia request queue 000016 m.exh equ m.cql+1 exhaust status 000020 m.xte equ m.exh+2 software xte status 000022 m.leng equ m.xte+2 length of common meters (must be even) additional meters for asynchronous channels 000022 m.prex equ m.leng pre-exhaust status 000024 m.ebof equ m.prex+2 echo buffer overflows 000026 m.quit equ m.ebof+2 bell-quits 000030 m.asyl equ m.quit+2 total length of asynchronous meters (must be even) additional meters for synchronous channels 000022 m.nim equ m.leng number of input messages 000024 m.iml equ m.nim+2 cumulative length of input 000026 m.mini equ m.iml+2 minimum length of input message assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 14 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 00000 38 sfcm hsla pcc save,off assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 15 sfcm for hsla 000000 sf.hcm equ 0 addr of hwcm 000001 sf.nxa equ sf.hcm+1 addr of next available queue entry 000002 sf.nxp equ sf.nxa+1 addr of next queue entry to process 000003 sf.tly equ sf.nxp+1 tally of status queue 000004 sf.tib equ sf.tly+1 addr of tib for this line 000005 sf.flg equ sf.tib+1 flag word 000006 sf.ib0 equ sf.flg+1 pointer to input buffer 1 000007 sf.ib1 equ sf.ib0+1 pointer to input buffer 2 000010 sf.ob0 equ sf.ib1+1 pointer to output buffer 1 000011 sf.ob1 equ sf.ob0+1 pointer to output buffer 2 000012 sf.pcw equ sf.ob1+1 current pcw 2nd word 000013 sf.cct equ sf.pcw+1 cct addr for this line, if non-zero 000014 sf.rct equ sf.cct+1 repeat count for status queue overflows 000015 sf.hsl equ sf.rct+1 address of hsla table entry for this line 000016 sf.bsz equ sf.hsl+1 max buffer size 000017 sf.fbs equ sf.bsz+1 buffer size to be used during frame input 000020 sf.mms equ sf.fbs+1 maximum synchronous message size 000020 sf.csz equ sf.mms current asynchronous buffer size 000021 sf.rms equ sf.mms+1 remaining unallocated message length 000021 sf.nic equ sf.rms char. address of next asynchronous input 000022 sf.noc equ sf.nic+1 char address of next asynchronous output 000023 sf.ssl equ sf.noc+1 number of entries in software status queu 000024 sf.cfg equ sf.ssl+1 2 words for config pcw 000026 sf.sta equ sf.cfg+2 hardware status q, sicw here 000005 sfhsiz equ 5 number of entries in hardware status buf room for 6 status words assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 16 sfcm for hsla 000042 sf.est equ sf.sta+sfhsiz*2+2 000042 sf.hln equ sf.est 000042 sf.waq equ sf.est wrap around queue, software status q 000012 sfssq equ 10 length of "short" software status queue 000024 sflsq equ 20 length of "long" software status queue (used for hdlc and bisync lines) 000054 sf.sln equ sf.hln+sfssq 000066 sf.lln equ sf.hln+sflsq sfcm flag definitions 000001 sffskd bool 000001 status processor is scheduled 000002 sffcii bool 000002 on if alternate input icw is active 000004 sffcoi bool 000004 on if alternate output icw is active 000010 sffisc bool 000010 inactive subchannel flag 000020 sffsct bool 000020 short cct flag 000040 sffebd bool 000040 ebcdic data code on this line 000100 sffech bool 000100 tab, cr, lf echo going on now 000200 sffdct bool 000200 dynamic (sharable) cct in use for channel 000400 sffstp bool 000400 stop channel, rxmit done 002000 sffbsc bool 002000 binary synchronous device 004000 sffsqo bool 004000 status queue overflow pending 010000 sffsyn bool 010000 any synchronous line type 020000 sffmsp bool 020000 marker status pending 040000 sffofr bool 040000 old setting of tffrmi (lines up on tffrmi 100000 sffnib bool 100000 need to allocate new input buffer(s) 200000 sffssb bool 200000 copied alternate buffer back to output ch 400000 sffhdl bool 400000 uses hdlc channel board assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 17 sfcm for hsla 000002 sfhmk equ 2 x-or mask to switch icw addrs 000001 sfbfmk equ 1 x-or mask to switch i-or-ob1/2 addrs pcc restore 00000 39 devtab assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 18 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 00000 40 buffer assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 19 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 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 20 symbol definitions 41 ttls symbol definitions 42 symref ctrl 43 symref secdsp,setime,frelbf 44 symref denq,meterc 45 symref hdcw,ldcw 46 symref hgeti 47 symref hcfg 48 symref trace 49 symref getbuf,frebuf 50 symref getmem,fremem 51 symref brkhit 52 symref lctlck 53 symref setcct 54 symref puteco 55 symref setptw set up variable cpu page table word 56 symref gettib 57 symref mincs,mincd,mupdat,mmsg 58 777004 59 statop bool 777004 status op code 777003 60 waitop bool 777003 wait op code 000112 61 accin equ 74 accept input mailbox op code 000105 62 sndout bool 105 send output mailbox op code 000104 63 sparms bool 104 send params opcode 000040 64 space bool 040 ascii space char 000015 65 cr bool 015 ascii carriage return 000034 66 upshft bool 034 ebcdic up-shift 000037 67 dnshft bool 037 ebcdic down-shift 000074 68 ibmeot bool 074 ebcdic eot 777776 69 ntfwrt bool /tfwrit for turning tfwrit off 776777 70 ntfrpn bool /tfrpon for turning tfrpon off 001000 71 hslafl bool 001000 72 73 74 memory trace types 75 000001 76 mt.tst equ 1 000002 77 mt.wrt equ 2 000003 78 mt.sta equ 3 000004 79 mt.tim equ 4 000005 80 mt.blk equ 5 81 82 tracing switches 83 000040 84 tr.ent bool 040 000100 85 tr.blk bool 100 86 000001 87 ct.dev equ 1 offset in control tables of pointer 88 to device table entry pointers 00000 89 intp null 00000 90 start intp,3 symdef -.chain assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 21 symbol definitions crsm save,off 00000 even ine '3','',2 000003 modnum equ 3 00000 000003 0 .chain dec 3 ife '3','',1 crsm restore 00001 314563 0 bci 2,intp 00002 472020 0 00003 0 00000 1 ind intp 00004 010201 0 date 00005 001002 0 ine '.001.','',1 00006 330000 0 bci 4,.001. 00007 013320 0 00010 202020 0 00011 202020 0 91 pmc restore 92 00012 000000 0 93 globsw oct 0 "global swtches" word assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 22 itest entry for test-state 94 ttls itest entry for test-state 95 96 * this entry called by dia_man for test-state 97 * 98 * input: 99 * x1 - virtual tib address 100 00013 101 itest subr ite,(x1,x2,x3,a,q) 102 00035 1 07 004 0 103 lda t.line,1 get line number 00036 4 10 301 337 104 tsy a.c002-*,* (gettib) get real tib address in a 00037 0332 00 0 105 cax2 put in x2 for trace 106 00040 107 trace mt.tst,tr.ent,(x2,t.cur(1)) 108 * end of binary card 00000006 00052 4 10 204 256 109 tsy iinchk-*,* make sure entry is valid 00053 0 71 004 57 110 tra ite001-* at breakpoint, ignore call 00054 2 03 003 0 111 ldx2 3,2 get branch point for test-state 00055 0 74 002 57 112 tze ite001-* never mind if there isn't one 00056 4 10 201 257 113 tsy iintrp-*,* call interp to do work 00057 114 ite001 return itest assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 23 iwrite entry for output 115 ttls iwrite entry for output 116 117 * entry for write, called by dia_man when output is to be sent 118 * 119 * input: 120 * x1 - virtual tib address 121 00061 122 iwrite subr iwr,(x1,x2,x3,a,q) 123 00103 1 07 004 0 124 lda t.line,1 get line number 00104 4 10 233 337 125 tsy a.c002-*,* (gettib) get real tib address in a 00105 0332 00 0 126 cax2 put in x2 for trace 127 00106 128 trace mt.wrt,tr.ent,(x2,t.cur(1)) 129 * 00120 4 10 136 256 130 tsy iinchk-*,* 00121 0 71 004 125 131 tra iwr001-* at breakpoint, ignore call 00122 2 03 002 0 132 ldx2 2,2 get branch point for write 00123 0 74 002 125 133 tze 2 if any end of binary card 00000007 00124 4 10 133 257 134 tsy iintrp-*,* 00125 135 iwr001 return iwrite 136 * assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 24 istat entry to process status 137 ttls istat entry to process status 138 * 139 * entry called by hsla_man or lsla_man with standard 140 * status word in a register and virtual tib address in x1. 141 * checks op blocks following current wait to see if any 142 * status tests succeed, and if so, calls interp to proceed. 143 * if a non-status block is encountered before any of the status 144 * matches, then return, doing nothing. 145 * 00127 146 istat subr ist,(x1,x2,x3,a,q) 00151 0 17 056 227 147 sta istsav-* hang on to status word 148 00152 1 07 004 0 149 lda t.line,1 get line number 00153 4 10 164 337 150 tsy a.c002-*,* (gettib) get real tib address in a 00154 0332 00 0 151 cax2 put in x2 for trace 152 00155 153 trace mt.sta,tr.ent,(x2,t.cur(1),istsav) 00172 4 10 064 256 154 tsy iinchk-*,* make sure its ok 00173 0 71 030 223 155 tra istbak-* at breakpoint, ignore call 00174 156 ist010 null 00174 273 004 0 157 iacx2 4 get next op block 00175 2 07 000 0 158 lda 0,2 get type code 00176 0 27 027 225 159 cmpa l.a001-* check against status op code end of binary card 00000008 00177 0 74 002 201 160 tze ist020-* okay, go ahead 161 00200 0 71 023 223 162 tra istbak-* no status blocks to check 163 * 00201 164 ist020 null 00201 0 07 026 227 165 lda istsav-* get status back in a 00202 2 31 003 0 166 cana 3,2 check "off" bits 00203 0 64 771 174 167 tnz ist010-* if not all off, get next status 00204 2 34 002 0 168 ana 2,2 ok, get "on" bits 00205 2 27 002 0 169 cmpa 2,2 are they all on? 00206 0 64 766 174 170 tnz ist010-* that didn't work either 171 * 172 * fell through, get branch point and call 00207 173 trace mt.blk,tr.blk,(x2,l.a002) 00221 2 03 001 0 174 ldx2 1,2 interp 00222 4 10 035 257 175 tsy iintrp-*,* 00223 176 istbak null 00223 177 return istat 178 * 00225 777004 0 179 l.a001 vfd o18/statop 00226 000004 0 180 l.a002 oct 4 constant for status op block type 00227 181 istsav bss 1 saved status 182 * assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 25 itmout entry for processing timeouts 183 ttls itmout entry for processing timeouts 184 * 185 * called by secondary dispatcher 186 * 187 * input: 188 * x1 - real tib address 189 00230 190 itmout null 191 00230 2332 00 0 192 cx1a get real tib address in a 00231 0 17 027 260 193 sta itmtib-* save real tib address for trace 00232 4 10 104 336 194 tsy a.c001-*,* (setptw) virtualize it 00233 4332 00 0 195 cax1 put virtual tib address in x1 196 00234 197 trace mt.tim,tr.ent,(itmtib,t.cur(1)) 198 end of binary card 00000009 00247 4 10 007 256 199 tsy iinchk-*,* set up 00250 4 71 005 255 200 tra iscdsp-*,* in breakpoint, ignore call 201 * 00251 2 03 001 0 202 ldx2 1,2 get timeout branch if any 00252 0 74 002 254 203 tze 2 00253 4 10 004 257 204 tsy iintrp-*,* and do it 00254 4 71 001 255 205 tra iscdsp-*,* back to secondary dispatcher 206 * 00255 0 26000 3 207 iscdsp ind secdsp secondary dispatcher 00256 0 00310 1 208 iinchk ind inchek interpreter entry validation 00257 0 00343 1 209 iintrp ind interp main interpreter subroutine 210 00260 211 itmtib bss 1 saves real tib address assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 26 istbrk entry for restarting from breakpoint 212 ttls istbrk entry for restarting from breakpoint 213 00261 214 istbrk subr ibk,(x1,x2,x3) 00275 0 17 012 307 215 sta brkopc-* may contain the real op to execute 00276 4 10 760 256 216 tsy iinchk-*,* do std setup 00277 0 71 003 302 217 tra ibk001-* at breakpoint, good 00300 0 56 007 307 218 stz brkopc-* not at breakpoint, cleanup 00301 0 71 004 305 219 tra ibkret-* and return 220 00302 0 07 040 342 221 ibk001 lda l.c003-* =^tfbkpt 00303 1 32 036 0 222 ansa t.flg3,1 not at break anymore 00304 4 10 753 257 223 tsy iintrp-*,* call intpreter 00305 224 ibkret return istbrk 225 00307 000000 0 226 brkopc oct 0 real op to exec when starting from break assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 27 inchek subroutine to validate and set up at entry 227 ttls inchek subroutine to validate and set up at entry 228 * 229 * this subroutine makes sure everything is legal at entry to 230 * interpreter, and puts address of current wait block in x2 231 * 00310 232 inchek subr inc,(a) 233 * end of binary card 00000010 00316 2332 00 0 234 cx1a make sure x1 is non-zero 00317 0 64 002 321 235 tnz 2 00320 236 die 1 237 * 00321 1 03 003 0 238 ldx2 t.cur,1 get pointer to current wait blk 00322 0 64 002 324 239 tnz 2 which had better be non-zero 00323 240 die 2 241 00324 1 07 036 0 242 lda t.flg3,1 see if at break 00325 0 31 014 341 243 cana l.c002-* =tfbkpt 00326 0 64 006 334 244 tnz incret-* at break, take nonskip return 245 * 00327 2 07 000 0 246 lda 0,2 get op block type 00330 0 27 010 340 247 cmpa l.c001-* which should be "wait" 00331 0 74 002 333 248 tze 2 00332 249 die 3 00333 0 76 755 310 250 aos inchek-* take skip return 251 * 00334 252 incret return inchek 253 * 00336 0 31000 3 254 a.c001 ind setptw set up variable cpu page table word 00337 0 21000 3 255 a.c002 ind gettib 256 00340 777003 0 257 l.c001 vfd o18/waitop 00341 000001 0 258 l.c002 vfd o18/tfbkpt 00342 777776 0 259 l.c003 vfd o18//tfbkpt assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 28 interp subroutine processes most control blocks 260 ttls interp subroutine processes most control blocks 261 * 262 * interp: main subroutine of control table interpreter, called 263 * tib address in x1 and pointer to first block to process in 264 * x2. starts at top for every fresh op block 265 * 00343 266 interp subr int,(x2,x3) 267 00354 0 20 733 307 268 szn brkopc-* op to exec from bkpt restart? 00355 0 74 004 361 269 tze int010-* no 00356 0 07 731 307 270 lda brkopc-* yes, pick it up 00357 0 56 730 307 271 stz brkopc-* 00360 0 71 002 362 272 tra int011-* 273 * 00361 274 int010 null head of main loop 00361 2 07 000 0 275 lda 0,2 get op block type 00362 0335 11 0 276 int011 lrs 9 extend high-order 9 bits 00363 422 777 0 277 icmpa -1 which must be all on 00364 0 74 002 366 278 tze 2 00365 279 die 4 end of binary card 00000011 280 * isolate type so as to use 281 * jump table 00366 6337 11 0 282 qrl 9 get it in low-order 00367 7333 00 0 283 cqa of a 00370 0 74 003 373 284 tze int020-* zero is not allowed 00371 422 106 0 285 icmpa maxop it can't be too big either 00372 0 75 002 374 286 tmi 2 00373 287 int020 null 00373 288 die 8 289 * now we'll load type into x3 and use it 290 * to index jump table 00374 4333 00 0 291 cax3 00375 292 trace mt.blk,tr.blk,(x2,x3) 00406 0 40 002 410 293 adcx3 int030-* add address of head of jump table 00407 7 71 000 0 294 tra 0,3* and go through indirect word 295 * 00410 0 00410 1 296 int030 zero * address of jump table 297 * jump table follows 00411 0 00520 1 298 ind int100 (01) goto 00412 0 00522 1 299 ind int200 (02) iftyp 00413 0 00531 1 300 ind int300 (03) wait 00414 0 00536 1 301 ind int400 (04) status 00415 0 00537 1 302 ind int500 (05) dcwlst 00416 0 00542 1 303 ind int600 (06) setime 00417 0 00547 1 304 ind int700 (07) gotype 00420 0 00563 1 305 ind int800 (10) setflg 00421 0 00571 1 306 ind int900 (11) clrflg 00422 0 00601 1 307 ind in1000 (12) tstflg 00423 0 00615 1 308 ind in1100 (13) dmpout 00424 0 00702 1 309 ind in1200 (14) signal assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 29 interp subroutine processes most control blocks 00425 0 00707 1 310 ind in1300 (15) meter 00426 0 00516 1 311 ind intbak (16) waitm just returns 00427 0 00714 1 312 ind in1500 (17) sendin 00430 0 00727 1 313 ind in1600 (20) tstwrt 00431 0 00737 1 314 ind in1700 (21) tstglb 00432 0 00750 1 315 ind in1800 (22) setype 00433 0 00762 1 316 ind in1900 (23) scntr end of binary card 00000012 00434 0 00766 1 317 ind in2000 (24) acntr 00435 0 00774 1 318 ind in2100 (25) tcntr 00436 0 01022 1 319 ind in2200 (26) getext 00437 0 01040 1 320 ind in2300 (27) retext 00440 0 01050 1 321 ind in2400 (30) inscan 00441 0 01054 1 322 ind in2500 (31) outscn 00442 0 01062 1 323 ind in2600 (32) bldmsg 00443 0 01107 1 324 ind in2700 (33) dumpin 00444 0 01117 1 325 ind in2800 (34) setchr 00445 0 01137 1 326 ind in2900 (35) cmpchr 00446 0 01160 1 327 ind in3000 (36) calsub 00447 0 01174 1 328 ind in3100 (37) retsub 00450 0 01207 1 329 ind in3200 (40) holdot 00451 0 01225 1 330 ind in3300 (41) ifhsla 00452 0 01234 1 331 ind in3400 (42) config 00453 0 01244 1 332 ind in3500 (43) ckinpt 00454 0 01332 1 333 ind in3600 (44) gtinpt 00455 0 01447 1 334 ind in3700 (45) replay 00456 0 01457 1 335 ind in3800 (46) dmprpy 00457 0 01467 1 336 ind in3900 (47) prepnl 00460 0 01547 1 337 ind in4000 (50) tstrpy 00461 0 01555 1 338 ind in4100 (51) echo 00462 0 01561 1 339 ind in4200 (52) setcct 00463 0 01570 1 340 ind in4300 (53) dmpmsg 00464 0 01615 1 341 ind in4400 (54) setlcl 00465 0 01623 1 342 ind in4500 (55) addlcl 00466 0 01633 1 343 ind in4600 (56) tstlcl 00467 0 01644 1 344 ind in4700 (57) setlcf 00470 0 01652 1 345 ind in4800 (60) clrlcf 00471 0 01661 1 346 ind in4900 (61) tstlcf 00472 0 01673 1 347 ind in5000 (62) setlcv 00473 0 01724 1 348 ind in5100 (63) calasm 00474 0 01740 1 349 ind in5200 (64) bkptop 00475 0 01745 1 350 ind in5300 (65) linctl 00476 0 01772 1 351 ind in5400 (66) linsta 00477 0 02004 1 352 ind in5500 (67) tstlcv 00500 0 02021 1 353 ind in5600 (70) nullop 00501 0 02023 1 354 ind in5700 (71) unwind 00502 0 02026 1 355 ind in5800 (72) settmv end of binary card 00000013 00503 0 02021 1 356 ind in5600 (73) retpms obsolete (ind to nullop) 00504 0 02033 1 357 ind in6000 (74) gotov 00505 0 02037 1 358 ind in6100 (75) gocase assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 30 interp subroutine processes most control blocks 00506 0 02136 1 359 ind in6200 (76) setfld 00507 0 02142 1 360 ind in6300 (77) addfld 00510 0 02150 1 361 ind in6400 (100) tstfld 00511 0 02157 1 362 ind in6500 (101) meter1 00512 0 02161 1 363 ind in6600 (102) meter2 00513 0 02163 1 364 ind in6700 (103) meteru 00514 0 02174 1 365 ind in6800 (104) meterm 00515 0 01074 1 366 ind in2620 (105) bldims 000106 367 maxop equ *-int030 defines end of table 368 * 00516 369 intbak null return point 00516 370 return interp 371 * 372 * 373 * 374 * 00520 375 int100 null goto 00520 2 03 001 0 376 ldx2 1,2 get address from block 00521 0 71 640 361 377 tra int010-* and go around again 378 * 379 * test terminal type 380 * iftype , 381 * 00522 382 int200 null 00522 2 07 001 0 383 lda 1,2 get terminal type test value 00523 1 27 017 0 384 cmpa t.type,1 vs tib terminal type 00524 0 74 003 527 385 tze int210-* equal 00525 273 003 0 386 iacx2 3 go to next block 00526 0 71 633 361 387 tra int010-* 00527 2 03 002 0 388 int210 ldx2 2,2 get new block address 00530 0 71 631 361 389 tra int010-* 390 * 391 * 00531 392 int300 null wait 00531 0 20 266 1017 393 szn incall-* check if still in called subroutine 00532 0 74 002 534 394 tze 2 00533 395 die 13 wait block executed between call and retu 00534 1 13 003 0 396 stx2 t.cur,1 store pointer to wait block in 00535 0 71 761 516 397 tra intbak-* tib and return 398 * 399 * 00536 400 int400 null status is illegal except after wait 00536 401 die 5 402 * 403 * 00537 404 int500 null dcwlst, handled by subroutine 00537 4 10 002 541 405 tsy idcwc-*,* 00540 0 71 621 361 406 tra int010-* 407 * 00541 0 02304 1 408 idcwc ind dcwcnt 409 * assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 31 interp subroutine processes most control blocks 410 * 00542 411 int600 null setime 00542 2 07 001 0 412 lda 1,2 get interval 00543 4 10 003 546 413 int601 tsy istime-*,* 00544 273 002 0 414 iacx2 2 bump to next block 00545 0 71 614 361 415 tra int010-* 00546 0 30000 3 416 istime ind setime scheduler entry to set timer 417 * 418 * 00547 419 int700 null gotype 00547 1 47 017 0 420 ldq t.type,1 make sure terminal type code 00550 0 74 002 552 421 tze int710-* is positive 00551 0 65 002 553 422 tpl 2 00552 423 int710 null 00552 424 die 12 end of binary card 00000014 425 * 00553 273 001 0 426 int720 iacx2 1 advance to branch point 00554 2 07 000 0 427 lda 0,2 get branch point 00555 0 75 775 552 428 tmi int710-* end of list 00556 573 777 0 429 iaq -1 decrement count 00557 0 74 002 561 430 tze int730-* found branch point 00560 0 71 773 553 431 tra int720-* loop 00561 0332 00 0 432 int730 cax2 get new address 00562 0 71 577 361 433 tra int010-* and process it 434 * 435 * 00563 436 int800 null setflg 00563 2 07 001 0 437 lda 1,2 get word of flags to turn on 00564 1 72 001 0 438 orsa t.flg,1 and do it 00565 2 07 002 0 439 lda 2,2 same for second word 00566 1 72 002 0 440 orsa t.flg2,1 00567 273 003 0 441 iacx2 3 bump to next block 00570 0 71 571 361 442 tra int010-* 443 * 444 * 00571 445 int900 null clrflg 00571 2 07 001 0 446 lda 1,2 get word of flags to turn off 00572 322 777 0 447 iera -1 complement it 00573 1 32 001 0 448 ansa t.flg,1 turn off specified tib flags 00574 2 07 002 0 449 lda 2,2 get second word 00575 322 777 0 450 iera -1 complement it 00576 1 32 002 0 451 ansa t.flg2,1 turn these off,too 00577 273 003 0 452 iacx2 3 on to the next 00600 0 71 561 361 453 tra int010-* 454 * 455 * 00601 456 in1000 null tstflg 00601 2 07 002 0 457 lda 2,2 get flags to test 00602 1 34 001 0 458 ana t.flg,1 isolate them from tib flag word 00603 2 27 002 0 459 cmpa 2,2 are they all on? assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 32 interp subroutine processes most control blocks 00604 0 64 007 613 460 tnz in1010-* 00605 2 07 003 0 461 lda 3,2 get second word to test 00606 1 34 002 0 462 ana t.flg2,1 00607 2 27 003 0 463 cmpa 3,2 are they all on too? 00610 0 64 003 613 464 tnz in1010-* 00611 2 03 001 0 465 ldx2 1,2 yes, get new op block address 00612 0 71 547 361 466 tra int010-* 00613 467 in1010 null 00613 273 004 0 468 iacx2 4 no, bump to next block 00614 0 71 545 361 469 tra int010-* 470 * 471 * 00615 472 in1100 null dmpout 00615 0 56 204 1021 473 stz sndflg-* initialize this 00616 1 41 012 0 474 ldx3 t.ocp,1 get output chain pointer 00617 0 74 034 653 475 tze in1110-* and if its non-zero, free chain 00620 3 07 001 0 476 lda bf.flg,3 get buffer flags end of binary card 00000015 00621 0 31 174 1015 477 cana l.d007-* =hold output buffers flag 00622 0 74 026 650 478 tze in1108-* no - normal dmpout 00623 0 31 171 1014 479 in1104 cana l.d006-* =last buffer in message flag 00624 0 64 005 631 480 tnz in1106-* yes - release partial chain 00625 3 41 000 0 481 ldx3 bf.nxt,3 get forward link 00626 0 74 013 641 482 tze in1107-* end of chain - treat as normal dmpout 00627 3 07 001 0 483 lda bf.flg,3 get buffer flags 00630 0 71 773 623 484 tra in1104-* 00631 3 07 000 0 485 in1106 lda bf.nxt,3 get forward link 00632 3 56 000 0 486 stz bf.nxt,3 unlink rest of chain 00633 1 41 012 0 487 ldx3 t.ocp,1 get output chain pointer 00634 1 17 012 0 488 sta t.ocp,1 establish new output chain 00635 4 10 044 701 489 tsy ifrel-*,* release first message in chain 00636 1 56 013 0 490 stz t.ocur,1 void current buffer stuff 00637 1 56 014 0 491 stz t.olst,1 00640 0 71 037 677 492 tra in1140-* 493 00641 0 76 160 1021 494 in1107 aos sndflg-* make sure about sndout 00642 1 41 012 0 495 ldx3 t.ocp,1 get ptr to chain 00643 4 10 036 701 496 tsy ifrel-*,* free chain 00644 1 56 012 0 497 stz t.ocp,1 zero ptr 00645 1 56 013 0 498 stz t.ocur,1 00646 1 56 014 0 499 stz t.olst,1 00647 0 71 016 665 500 tra in1120-* 501 00650 4 10 031 701 502 in1108 tsy ifrel-*,* 00651 1 56 012 0 503 stz t.ocp,1 00652 0 76 147 1021 504 aos sndflg-* we must do "send output" if t.ocp chain was freed 00653 505 in1110 null 506 do the same for chain being 00653 1 41 013 0 507 ldx3 t.ocur,1 output currently 00654 0 74 011 665 508 tze in1120-* 00655 4 10 024 701 509 tsy ifrel-*,* assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 33 interp subroutine processes most control blocks 00656 1 56 013 0 510 stz t.ocur,1 00657 1 56 014 0 511 stz t.olst,1 00660 1 07 004 0 512 lda t.line,1 hsla line? 00661 0 31 135 1016 513 cana l.d010-* =hslafl 00662 0 74 003 665 514 tze in1120-* no 00663 1 41 030 0 515 ldx3 t.sfcm,1 yes, we'll need sfcm address 00664 3 56 022 0 516 stz sf.noc,3 not partway through an output buffer now 517 00665 518 in1120 null 00665 0 20 134 1021 519 szn sndflg-* did we free t.ocp chain? 00666 0 64 004 672 520 tnz in1125-* yes, queue "send output" 00667 673 002 0 521 ila bufthr if we threw away more than "threshold" buffers, end of binary card 00000016 00670 1 27 016 0 522 cmpa t.ocnt,1 we'll have to ask for more output 00671 0 65 003 674 523 tpl in1130-* 00672 524 in1125 null 00672 473 105 0 525 ilq sndout 00673 4 10 013 706 526 tsy idenq-*,* dia enqueueing routine 00674 527 in1130 null 00674 1 56 016 0 528 stz t.ocnt,1 no buffers in write chain now 00675 0 07 113 1010 529 lda l.d002-* ^tfwrit 00676 1 32 001 0 530 ansa t.flg,1 tfwrit must be turned off 00677 531 in1140 null 00677 273 001 0 532 iacx2 1 bump to next block 00700 0 71 461 361 533 tra int010-* 00701 0 15000 3 534 ifrel ind frelbf free buffer chain subroutine 535 * 536 * 00702 537 in1200 null signal 00702 2 47 001 0 538 ldq 1,2 get signal type 00703 4 10 003 706 539 tsy idenq-*,* call dia queuing routine 00704 273 002 0 540 iacx2 2 bump to next block 00705 0 71 454 361 541 tra int010-* 00706 0 02000 3 542 idenq ind denq dia enqueuing routine 543 * 544 * 00707 545 in1300 null meter 00707 2 47 001 0 546 ldq 1,2 get meter type 00710 4 10 003 713 547 tsy imetrc-*,* and call metering utility 00711 273 002 0 548 iacx2 2 next block 00712 0 71 447 361 549 tra int010-* 00713 0 23000 3 550 imetrc ind meterc 551 * 552 * 00714 553 in1500 null sendin 00714 1 41 005 0 554 ldx3 t.icp,1 get input chain pointer 00715 0 74 010 725 555 tze in1520-* forget it if zero 00716 1 61 006 0 556 cmpx3 t.ilst,1 see if there's only 1 buffer 00717 0 64 004 723 557 tnz in1510-* no, send the chain 00720 3 07 001 0 558 lda bf.tly,3 otherwise make sure tally 00721 0 34 066 1007 559 ana l.d001-* is non-zero assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 34 interp subroutine processes most control blocks 00722 0 74 003 725 560 tze in1520-* 561 * 00723 562 in1510 null 00723 473 112 0 563 ilq accin put "accept input" opcode in q 00724 4 10 762 706 564 tsy idenq-*,* for dia enqueuing routine 565 * 00725 566 in1520 null 00725 273 001 0 567 iacx2 1 next block 00726 0 71 433 361 568 tra int010-* 569 * 570 * 571 * 00727 572 in1600 null tstwrt 00727 1 20 012 0 573 szn t.ocp,1 is there an output chain 00730 0 64 003 733 574 tnz in1605-* 00731 1 20 013 0 575 szn t.ocur,1 or is there one we're working on now? 00732 0 74 003 735 576 tze in1610-* 00733 577 in1605 null 00733 2 03 001 0 578 ldx2 1,2 yes, get branch address 00734 0 71 425 361 579 tra int010-* 00735 580 in1610 null no, go to next block 00735 273 002 0 581 iacx2 2 00736 0 71 423 361 582 tra int010-* 583 * 584 * 00737 585 in1700 null tstglb end of binary card 00000017 00737 4 07 010 747 586 lda iglob-*,* pick up global switches 00740 2 34 001 0 587 ana 1,2 isolate the one(s) we're testing 00741 2 27 001 0 588 cmpa 1,2 all on? 00742 0 64 003 745 589 tnz in1710-* 00743 2 03 002 0 590 ldx2 2,2 yes, get new op block addr. 00744 0 71 415 361 591 tra int010-* 00745 273 003 0 592 in1710 iacx2 3 fail, get next block 00746 0 71 413 361 593 tra int010-* 00747 0 00012 1 594 iglob ind globsw 595 * 596 * 00750 597 in1800 null setype 00750 2 07 001 0 598 lda 1,2 get new type from op block 00751 1 17 017 0 599 sta t.type,1 set it in tib 00752 0 41 034 1006 600 ldx3 a.d004-* addr (ctrl) 00753 3 41 001 0 601 ldx3 ct.dev,3 get pointer to device tables 00754 1 40 017 0 602 adcx3 t.type,1 indexed by line type 00755 3 41 777 0 603 ldx3 -1,3 subtract 1 for 0 origin 00756 373 010 0 604 iacx3 dt.brk add in offset of break table 00757 1 50 032 0 605 stx3 t.brkp,1 update break table address 00760 273 002 0 606 iacx2 2 next block 00761 0 71 400 361 607 tra int010-* 608 * 00762 609 in1900 null scntr (set counter) assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 35 interp subroutine processes most control blocks 00762 2 07 001 0 610 lda 1,2 get new value 00763 1 17 035 0 611 sta t.cntr,1 store it in counter 00764 273 002 0 612 iacx2 2 next block 00765 4 71 072 1057 613 tra iin010-*,* 614 * 00766 615 in2000 null acntr (add to counter) 00766 1 07 035 0 616 lda t.cntr,1 origional value 00767 2 47 001 0 617 ldq 1,2 increment 00770 4 10 013 1003 618 tsy a.d001-*,* =addnov 00771 1 17 035 0 619 sta t.cntr,1 00772 273 002 0 620 iacx2 2 next block 00773 4 71 064 1057 621 tra iin010-*,* 622 * 00774 623 in2100 null tcntr (test counter) 00774 2 07 001 0 624 lda 1,2 get test value 00775 1 27 035 0 625 cmpa t.cntr,1 same as counter? 00776 0 74 003 1001 626 tze in2110-* 00777 273 003 0 627 iacx2 3 no, go to next block 01000 4 71 057 1057 628 tra iin010-*,* 01001 629 in2110 null 01001 2 03 002 0 630 ldx2 2,2 yes, get new block address 01002 4 71 055 1057 631 tra iin010-*,* 632 633 634 01003 0 02253 1 635 a.d001 ind addnov 01004 0 20000 3 636 a.d002 ind getmem 01005 0 16000 3 637 a.d003 ind fremem end of binary card 00000018 01006 0 01000 3 638 a.d004 ind ctrl 01007 000777 0 639 l.d001 vfd 18/buftmk buffer tally mask 01010 777776 0 640 l.d002 vfd 18/ntfwrt 01011 400000 0 641 l.d003 oct 400000 extension buffer in use flag 01012 000077 0 642 l.d004 oct 77 sub-buffer tally mask 01013 000777 0 643 l.d005 oct 777 mask for right half 01014 040000 0 644 l.d006 vfd 18/bfflst last buffer in message flag 01015 001000 0 645 l.d007 vfd 18/bffhld hold output buffers flag 646 *l.d008 unused 647 *l.d009 unused 01016 001000 0 648 l.d010 vfd 18/hslafl 649 01017 000000 0 650 incall oct 0 hold area - return point from called subr 01020 0 15000 3 651 ifrlbf ind frelbf free linked chain of buffers subroutine 652 653 01021 654 sndflg bss 1 indicates whether to do "send output" on dmpout 655 * 656 * get tib extension 657 * getext < # words needed>, 658 * 01022 1 20 011 0 659 in2200 szn t.elnk,1 does line have extension? assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 36 interp subroutine processes most control blocks 01023 0 74 002 1025 660 tze 2 no 01024 661 die 14 die 01025 2 47 001 0 662 ldq 1,2 number of words needed 01026 573 001 0 663 iaq 1 +1 for length word 01027 4 10 755 1004 664 tsy a.d002-*,* =getmem 01030 0 71 006 1036 665 tra in2210-* no room 01031 2 07 001 0 666 lda 1,2 length requested 01032 3 17 000 0 667 sta 0,3 save in extension 01033 1 50 011 0 668 stx3 t.elnk,1 save extension address 01034 273 003 0 669 iacx2 3 skip 3 words for this opblock 01035 4 71 022 1057 670 tra iin010-*,* and go to next 01036 2 03 002 0 671 in2210 ldx2 2,2 take failure return 01037 4 71 020 1057 672 tra iin010-*,* 673 * 674 * return a tib extension 675 * retext 676 * 01040 1 41 011 0 677 in2300 ldx3 t.elnk,1 get address 01041 0 74 005 1046 678 tze in2310-* none, do nothing 01042 1 56 011 0 679 stz t.elnk,1 no longer has ext 01043 3 47 000 0 680 ldq 0,3 length 01044 573 001 0 681 iaq 1 plus control word 01045 4 10 740 1005 682 tsy a.d003-*,* =fremem 01046 273 001 0 683 in2310 iacx2 1 01047 4 71 010 1057 684 tra iin010-*,* 685 * 686 * input scan 687 * inscan
, 688 * 01050 673 000 0 689 in2400 ila 0 get input scan indicator 01051 4 10 002 1053 690 tsy iscnop-*,* call scan subroutine 01052 4 71 005 1057 691 tra iin010-*,* 01053 0 02603 1 692 iscnop ind scanop 693 * 694 * output scan 695 * outscn
, 696 * end of binary card 00000019 01054 673 001 0 697 in2500 ila 1 get output scan indicator 01055 4 10 776 1053 698 tsy iscnop-*,* call scan subroutine 01056 4 71 001 1057 699 tra iin010-*,* 700 * 701 * 702 * 01057 0 00361 1 703 iin010 ind int010 01060 0 03703 1 704 ibldut ind bldutl 01061 0 03627 1 705 iadbyt ind adbyte 706 * 707 * build output message 708 * bldmsg
, 709 * assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 37 interp subroutine processes most control blocks 01062 710 in2600 null 01062 4 10 776 1060 711 tsy ibldut-*,* (=bldutl) build the message 01063 0 71 022 1105 712 tra in2670-* failed 01064 1 07 012 0 713 lda t.ocp,1 get output chain pointer 01065 0 64 004 1071 714 tnz in2610-* 01066 1 50 012 0 715 stx3 t.ocp,1 place output chain pointer 716 01067 273 003 0 717 in2605 iacx2 3 go to next block 01070 4 71 767 1057 718 tra iin010-*,* 719 01071 3 17 000 0 720 in2610 sta bf.nxt,3 01072 1 50 012 0 721 stx3 t.ocp,1 01073 0 71 774 1067 722 tra in2605-* 723 * 724 * build input message 725 * bldims
, 726 * 01074 727 in2620 null 01074 4 10 764 1060 728 tsy ibldut-*,* (=bldutl) build the message 01075 0 71 010 1105 729 tra in2670-* failed 01076 1 07 005 0 730 lda t.icp,1 get input chain pointer 01077 0 64 003 1102 731 tnz in2630-* 01100 1 50 005 0 732 stx3 t.icp,1 place input chain pointer 01101 0 71 766 1067 733 tra in2605-* return 734 01102 3 17 000 0 735 in2630 sta bf.nxt,3 01103 1 50 005 0 736 stx3 t.icp,1 01104 0 71 763 1067 737 tra in2605-* 738 * 739 * here for failing bldmsg 740 * 01105 2 03 002 0 741 in2670 ldx2 2,2 get failure block address 01106 4 71 751 1057 742 tra iin010-*,* 743 * 744 * dump input chain 745 * dumpin 746 * 01107 1 41 005 0 747 in2700 ldx3 t.icp,1 get input chain ptr 01110 0 74 005 1115 748 tze in2710-* no chain 01111 4 10 707 1020 749 tsy ifrlbf-*,* free input chain 01112 1 56 005 0 750 stz t.icp,1 zero chain pointer 01113 1 56 006 0 751 stz t.ilst,1 zero pointer to last buffer 01114 1 56 007 0 752 stz t.icpl,1 01115 273 001 0 753 in2710 iacx2 1 go to next block 01116 4 71 741 1057 754 tra iin010-*,* 755 * 756 * set byte value in tib extension 757 * setchr , 758 * 01117 2 07 001 0 759 in2800 lda 1,2 get byte positions 01120 2337 11 0 760 arl 9 isolate dest byte assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 38 interp subroutine processes most control blocks 01121 4 10 740 1061 761 tsy iadbyt-*,* get its byte adress 01122 762 die 15 not tib extension byte end of binary card 00000020 01123 0 50 012 1135 763 stx3 in2850-* save - dest address 01124 2 07 001 0 764 lda 1,2 01125 0 34 666 1013 765 ana l.d005-* =o777 - isolate source byte 01126 4 10 733 1061 766 tsy iadbyt-*,* get its address 01127 0 71 002 1131 767 tra in2810-* not 46x value 01130 3 07 200 0 768 lda 0,3,b.0 get source byte 01131 0 41 004 1135 769 in2810 ldx3 in2850-* get dest byte address 01132 3 17 200 0 770 sta 0,3,b.0 place in tib byte 01133 273 002 0 771 iacx2 2 go to next block 01134 4 71 723 1057 772 tra iin010-*,* 01135 773 in2850 bss 1 destination byte address 01136 774 in2860 bss 1 source byte address 775 * 776 * compare bytes 777 * cmpchr ,, 778 * 01137 2 07 001 0 779 in2900 lda 1,2 get byte positions 01140 2337 11 0 780 arl 9 isolate source byte 01141 4 10 720 1061 781 tsy iadbyt-*,* get its byte address 01142 0 71 002 1144 782 tra in2910-* not 46x value 01143 3 07 200 0 783 lda 0,3,b.0 get source byte 01144 0 17 772 1136 784 in2910 sta in2860-* save for compare 01145 2 07 001 0 785 lda 1,2 01146 0 34 645 1013 786 ana l.d005-* =o777 - isolate test value 01147 4 10 712 1061 787 tsy iadbyt-*,* get its address 01150 0 71 002 1152 788 tra in2920-* not 46x value 01151 3 07 200 0 789 lda 0,3,b.0 get test value 01152 0 27 764 1136 790 in2920 cmpa in2860-* vs source byte 01153 0 74 003 1156 791 tze in2930-* equal 01154 273 003 0 792 iacx2 3 go to next block 01155 4 71 702 1057 793 tra iin010-*,* 01156 2 03 002 0 794 in2930 ldx2 2,2 get equal block address 01157 4 71 700 1057 795 tra iin010-*,* 796 * 797 * call subroutine 798 * calsub 799 * 01160 0 20 637 1017 800 in3000 szn incall-* check return point 01161 0 74 002 1163 801 tze 2 ok - not in use 01162 802 die 13 multiple subroutine calls 01163 2 07 001 0 803 lda 1,2 get entry point block address 01164 273 002 0 804 iacx2 2 01165 1 20 022 0 805 szn t.reta,1 tib return addr used yet? 01166 0 64 003 1171 806 tnz in3001-* yes 01167 1 13 022 0 807 stx2 t.reta,1 01170 0 71 002 1172 808 tra in3002-* 01171 0 13 626 1017 809 in3001 stx2 incall-* save return point end of binary card 00000021 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 39 interp subroutine processes most control blocks 01172 0332 00 0 810 in3002 cax2 go to subroutine 01173 4 71 664 1057 811 tra iin010-*,* 812 * 813 * return from subroutine 814 * retsub 815 * 01174 0 20 623 1017 816 in3100 szn incall-* check second return point 01175 0 74 004 1201 817 tze in3101-* not in use 01176 0 03 621 1017 818 ldx2 incall-* 01177 0 56 620 1017 819 stz incall-* 01200 4 71 657 1057 820 tra iin010-*,* 01201 1 20 022 0 821 in3101 szn t.reta,1 check first return point 01202 0 64 002 1204 822 tnz 2 01203 823 die 13 01204 1 03 022 0 824 ldx2 t.reta,1 01205 1 56 022 0 825 stz t.reta,1 01206 4 71 651 1057 826 tra iin010-*,* 827 * 828 * set hold output buffer flag 829 * holdot 830 * 01207 1 41 012 0 831 in3200 ldx3 t.ocp,1 get output chain pointer 01210 0 64 003 1213 832 tnz in3220-* 01211 273 001 0 833 in3210 iacx2 1 go to next block 01212 4 71 645 1057 834 tra iin010-*,* 01213 0 07 011 1224 835 in3220 lda in3290-* get hold output buffer flag 01214 3 72 001 0 836 orsa bf.flg,3 set on in buffer 01215 3 07 001 0 837 lda bf.flg,3 01216 0 34 005 1223 838 ana in3280-* check for last buffer in message 01217 0 64 772 1211 839 tnz in3210-* yes 01220 3 41 000 0 840 ldx3 bf.nxt,3 get forward pointer 01221 0 74 770 1211 841 tze in3210-* 01222 0 71 771 1213 842 tra in3220-* 843 01223 040000 0 844 in3280 vfd 18/bfflst last buffer in message flag 01224 001000 0 845 in3290 vfd 18/bffhld hold output buffer flag 846 * 847 * test for hsla line 848 * ifhsla 849 * 01225 850 in3300 null ifhsla 01225 1 07 004 0 851 lda t.line,1 get line number to find out if hsla line 01226 2337 11 0 852 arl 9 get hsla bit down at end 01227 0 74 003 1232 853 tze in3310-* not hsla 01230 2 03 001 0 854 ldx2 1,2 is hsla, get branch point 01231 4 71 626 1057 855 tra iin010-*,* go get new block 01232 856 in3310 null not hsla 01232 273 002 0 857 iacx2 2 go to next block 01233 4 71 624 1057 858 tra iin010-*,* 859 * 860 * reconfigure operation for hsla's assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 40 interp subroutine processes most control blocks 861 * config 862 * 01234 863 in3400 null config 01234 1 07 004 0 864 lda t.line,1 be sure hsla 01235 2337 11 0 865 arl 9 01236 0 64 002 1240 866 tnz 2 01237 867 die 16 01240 273 001 0 868 iacx2 1 point at first sub-op end of binary card 00000022 01241 4 10 002 1243 869 tsy icnfg-*,* config block processed by subroutine 01242 4 71 615 1057 870 tra iin010-*,* and continue with next op block 871 01243 0 03000 3 872 icnfg ind hcfg subroutine to process config block 873 * 874 * check for partial input line for channel 875 * ckinpt 876 * 01244 877 in3500 null ckinpt 01244 1 41 005 0 878 ldx3 t.icp,1 is there an input chain? 01245 0 74 011 1256 879 tze in3510-* no, check for hsla 01246 3 07 001 0 880 lda bf.tly,3 yes, see if it's more than just cr 01247 0 34 166 1435 881 ana l.g001-* (=buftmk) isolate tally in first buffer 01250 773 776 0 882 iaa -2 is it more than 1? 01251 0 65 057 1330 883 tpl in3595-* yes, there's a partial line 884 (otherwise result would have been negative) 01252 3333 00 0 885 cx3a no, get pointer to first character 01253 0 06 170 1443 886 ada l.g007-* bf.dta,b.0 01254 4333 00 0 887 cax3 in order to 01255 0 71 013 1270 888 tra in3520-* check to see if it's carriage return 889 01256 1 07 004 0 890 in3510 lda t.line,1 01257 2337 11 0 891 arl 9 is it an hsla line? 01260 0 74 046 1326 892 tze in3590-* no, there's no input 893 01261 0 41 136 1417 894 ldx3 a.g001-* (=indblk) 2 word arg blk for hgeti 01262 4 10 136 1420 895 tsy a.g002-*,* (=hgeti) call routine to check input 01263 0 07 133 1416 896 lda indblk+1-* any chars in buffer? 01264 0 74 042 1326 897 tze in3590-* no, at left margin 01265 422 001 0 898 icmpa 1 more than one char? 01266 0 64 042 1330 899 tnz in3595-* yes, we have partial input 01267 0 41 126 1415 900 ldx3 indblk-* no, look at character 01270 3 07 200 0 901 in3520 lda 0,3,b.0 pick up the char 01271 022 177 0 902 iana 127 strip off parity 01272 0 17 154 1446 903 sta tmpchr-* hang on to it 01273 422 015 0 904 icmpa cr is it carriage return? 01274 0 74 032 1326 905 tze in3590-* yes, no partial input 01275 422 034 0 906 icmpa upshft case shift character? 01276 0 74 030 1326 907 tze in3590-* yes, doesn't count 01277 422 037 0 908 icmpa dnshft or lower shift? 01300 0 74 026 1326 909 tze in3590-* yes, don't count it either 01301 1 07 002 0 910 lda t.flg2,1 check for output flow control chars assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 41 interp subroutine processes most control blocks 01302 0 31 142 1444 911 cana l.g008-* tfofc 01303 0 74 014 1317 912 tze in3540-* mode not on, skip it 01304 1 47 046 0 913 ldq t.ofch,1 get the chars 01305 0 31 140 1445 914 cana l.g009-* tfblak 01306 0 64 005 1313 915 tnz in3530-* if block ack, don't check 1st char 01307 7333 00 0 916 cqa end of binary card 00000023 01310 2337 11 0 917 arl 9 suspend character 01311 0 27 135 1446 918 cmpa tmpchr-* got it? 01312 0 74 014 1326 919 tze in3590-* yes, doesn't count 01313 0334 33 0 920 in3530 lls 27 isolate resume/ack char 01314 2337 11 0 921 arl 9 01315 0 27 131 1446 922 cmpa tmpchr-* 01316 0 74 010 1326 923 tze in3590-* it is one, don't count it 01317 1 07 017 0 924 in3540 lda t.type,1 is this a 2741? 01320 422 003 0 925 icmpa 3 01321 0 64 007 1330 926 tnz in3595-* no, don't check further 01322 0 07 124 1446 927 lda tmpchr-* get character back into a 01323 022 077 0 928 iana 63 mask off shift 01324 422 074 0 929 icmpa ibmeot is it an eot? 01325 0 64 003 1330 930 tnz in3595-* no, we have partial input 931 01326 2 03 001 0 932 in3590 ldx2 1,2 get fail addr, no partial line 01327 4 71 072 1421 933 tra a.g003-*,* (=int010) return 934 01330 273 002 0 935 in3595 iacx2 2 all well, partial input ready 01331 4 71 070 1421 936 tra a.g003-*,* (=int010) return 937 * 938 * routine to scoop up input and make output chain at t.rcp 939 * gtinpt 940 * 01332 941 in3600 null 01332 0 13 061 1413 942 stx2 in3694-* save x2 value 943 01333 4 10 071 1424 944 tsy a.g006-*,* (=getcmt) get pointer to cmt 945 returned in x2 01334 2 07 201 0 946 lda 1,2,b.0 get tab from cmt 01335 4 17 070 1425 947 sta a.g007-*,* (tabchr) save for copybf 01336 2 07 301 0 948 lda 1,2,b.1 likewise backspace 01337 4 17 067 1426 949 sta a.g008-*,* (bschar) 950 01340 1 07 017 0 951 lda t.type,1 is it a 1050 or 2741? 01341 422 002 0 952 icmpa 2 (1050) 01342 0 74 003 1345 953 tze in3602-* 01343 422 003 0 954 icmpa 3 (2741) 01344 0 64 003 1347 955 tnz in3603-* 01345 673 075 0 956 in3602 ila 61 yes, use ebcdic pad 01346 0 71 002 1350 957 tra in3604-* 958 01347 673 000 0 959 in3603 ila 0 no, use ascii pad 01350 4 17 056 1426 960 in3604 sta a.g008-*,* (delchr) save for copybf assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 42 interp subroutine processes most control blocks 01351 1 56 011 0 961 stz t.rcp,1 to initialize 962 01352 1 03 005 0 963 ldx2 t.icp,1 get ptr to head of input chain 01353 0 74 016 1371 964 tze in3650-* none, check hsla 965 01354 2 07 001 0 966 in3610 lda bf.tly,2 get the output buffer tally 01355 0 34 060 1435 967 ana l.g001-* (=buftmk) mask tally 01356 6333 00 0 968 caq hold on to it end of binary card 00000024 01357 0 13 035 1414 969 stx2 in3695-* save original buffer pointer 01360 3332 00 0 970 cx2a move pointer to first char 01361 0 06 062 1443 971 ada l.g007-* bf.dta,b.0 01362 0332 00 0 972 cax2 01363 7333 00 0 973 cqa get tally back 01364 4 10 044 1430 974 tsy a.g010-*,* (copybf) copy it into replay chain 975 01365 0 03 027 1414 976 ldx2 in3695-* restore x2 with buffer pointer 01366 2 03 000 0 977 ldx2 bf.nxt,2 get fwd ptr in this buffer 01367 0 64 765 1354 978 tnz in3610-* enter copy loop if another buffer 01370 0 50 022 1412 979 stx3 in3693-* save pointer to last buffer 980 01371 1 07 004 0 981 in3650 lda t.line,1 special code for hsla's 01372 2337 11 0 982 arl 9 we are done if its an lsla 01373 0 74 011 1404 983 tze in3680-* we are. 984 01374 0 41 023 1417 985 ldx3 a.g001-* (=indblk) 2 word arg blk 01375 4 10 023 1420 986 tsy a.g002-*,* (=hgeti) get input ptrs and tally 01376 0 20 020 1416 987 szn indblk+1-* any input at all? 01377 0 74 005 1404 988 tze in3680-* no, done 989 01400 0 07 016 1416 990 lda indblk+1-* get the tally 991 01401 0 03 014 1415 992 ldx2 indblk-* get ptr to input bffr 01402 4 10 026 1430 993 tsy a.g010-*,* (copybf) copy this stuff 01403 0 71 002 1405 994 tra 2 buffer address is in x3 already 995 01404 0 41 006 1412 996 in3680 ldx3 in3693-* get ptr to last buffer in chain 01405 0 07 033 1440 997 lda l.g004-* (=bffrpy) get replay flag 01406 3 72 001 0 998 orsa bf.flg,3 set in buffer 999 01407 0 03 004 1413 1000 ldx2 in3694-* 01410 273 001 0 1001 iacx2 1 skip this block 01411 4 71 010 1421 1002 tra a.g003-*,* (=int010) 1003 01412 1004 in3693 bss 1 1005 01413 1006 in3694 bss 1 01414 1007 in3695 bss 1 01415 1008 indblk bss 2 1009 01417 0 01415 1 1010 a.g001 ind indblk assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 43 interp subroutine processes most control blocks 01420 0 07000 3 1011 a.g002 ind hgeti 01421 0 00361 1 1012 a.g003 ind int010 01422 0 17000 3 1013 a.g004 ind getbuf 01423 0 15000 3 1014 a.g005 ind frelbf 01424 0 02211 1 1015 a.g006 ind getcmt 01425 0 02600 1 1016 a.g007 ind tabchr in copybf 01426 0 02601 1 1017 a.g008 ind delchr in copybf 01427 0 02602 1 1018 a.g009 ind bschar in copybf 01430 0 02414 1 1019 a.g010 ind copybf subroutine to copy input buffer into replay buffe end of binary card 00000025 01431 0 02253 1 1020 a.g011 ind addnov 01432 0 25000 3 1021 a.g012 ind puteco 01433 0 14000 3 1022 a.g013 ind frebuf 01434 0 27000 3 1023 a.g014 ind setcct hsla mans cct setter 1024 01435 000777 0 1025 l.g001 vfd 18/buftmk 01436 2 00000 0 1026 l.g002 ind 0,b.0 01437 000777 0 1027 l.g003 oct 000777 01440 004000 0 1028 l.g004 vfd 18/bffrpy 01441 776777 0 1029 l.g005 vfd 18/ntfrpn 01442 020000 0 1030 l.g006 vfd 18/bffbrk 01443 2 00002 0 1031 l.g007 zero bf.dta,b.0 01444 000100 0 1032 l.g008 vfd 18/tfofc 01445 004000 0 1033 l.g009 vfd 18/tfblak 1034 01446 1035 tmpchr bss 1 temporary storage for test char 1036 * 1037 * op to make gtinpt chain the real output chain 1038 * replay 1039 * 01447 1040 in3700 null replay 01447 1 41 011 0 1041 ldx3 t.rcp,1 get replay chain ptr 01450 1 20 012 0 1042 szn t.ocp,1 make sure no output ready now 01451 0 74 002 1453 1043 tze 2 01452 1044 die 17 1045 01453 1 50 012 0 1046 stx3 t.ocp,1 set as head of chain 01454 1 56 011 0 1047 stz t.rcp,1 zero replay chain ptr 1048 01455 273 001 0 1049 iacx2 1 next block please 01456 4 71 743 1421 1050 tra a.g003-*,* (=int010) 1051 * 1052 * dump the replay chain, if any 1053 * dmprpy 1054 * 01457 1055 in3800 null dmprpy 01457 1 41 011 0 1056 ldx3 t.rcp,1 get ptr 01460 0 74 003 1463 1057 tze in3810-* none, done 1058 01461 4 10 742 1423 1059 tsy a.g005-*,* (=frelbf) 01462 1 56 011 0 1060 stz t.rcp,1 freed assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 44 interp subroutine processes most control blocks 1061 01463 273 001 0 1062 in3810 iacx2 1 next block 01464 0 07 755 1441 1063 lda l.g005-* =^tfrpon 01465 1 32 002 0 1064 ansa t.flg2,1 replay not on now 01466 4 71 733 1421 1065 tra a.g003-*,* (=int010) 1066 * 1067 * op to prepare newline and delays for output now 1068 * prepnl 1069 * 01467 1070 in3900 null 01467 473 040 0 1071 ilq bufsiz allocate buffer for the nl 01470 4 10 732 1422 1072 tsy a.g004-*,* (=getbuf) 01471 1073 die 18 1074 01472 0 50 052 1544 1075 stx3 in3991-* save addr of buffer 01473 0 13 052 1545 1076 stx2 in3992-* save x2 for awhile 1077 01474 0 56 052 1546 1078 stz in3993-* init the tally for the buffer 1079 01475 3333 00 0 1080 cx3a setup x3 with char addressing too 01476 773 002 0 1081 iaa bf.dta offset of data in buffer end of binary card 00000026 01477 0 37 737 1436 1082 ora l.g002-* (=0,b.0) char bits 01500 4333 00 0 1083 cax3 back into x3 1084 01501 4 10 723 1424 1085 tsy a.g006-*,* (getcmt) get cmt pointer 01502 2 07 300 0 1086 lda 0,2,b.1 get the cr char from the cmt 01503 0 27 734 1437 1087 cmpa l.g003-* (=000777) no char? 01504 0 74 004 1510 1088 tze in3910-* yes, dont use it 1089 01505 3 17 200 0 1090 sta 0,3,b.0 put cr into buffer 01506 373 300 0 1091 iacx3 0,b.1 bump ptr 01507 0 76 037 1546 1092 aos in3993-* bump tally 1093 01510 2 07 200 0 1094 in3910 lda 0,2,b.0 get the nl char 01511 3 17 200 0 1095 sta 0,3,b.0 put the char into the buffer 01512 373 300 0 1096 iacx3 0,b.1 bump the ptr 01513 0 76 033 1546 1097 aos in3993-* bump the tally 1098 01514 473 000 0 1099 ilq 0 get the pad for ascii (null) 1100 01515 1 07 017 0 1101 lda t.type,1 get the type of this guy 01516 422 002 0 1102 icmpa 2 is it 1050? 01517 0 74 003 1522 1103 tze in3913-* yes 01520 422 003 0 1104 icmpa 3 is it 2741? 01521 0 64 004 1525 1105 tnz in3915-* no 01522 673 757 0 1106 in3913 ila -17 more delays for ebcdic types 01523 473 075 0 1107 ilq 61 octal 75 is idle for 1050/2741 01524 0 71 002 1526 1108 tra in3920-* 1109 01525 673 770 0 1110 in3915 ila -8 get the count of pads to send assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 45 interp subroutine processes most control blocks 01526 3 57 200 0 1111 in3920 stq 0,3,b.0 deposit for idle 01527 373 300 0 1112 iacx3 0,b.1 bump ptr 01530 0 76 016 1546 1113 aos in3993-* count tally 01531 773 001 0 1114 iaa 1 decrement count 01532 0 64 774 1526 1115 tnz in3920-* loop 1116 01533 0 41 011 1544 1117 ldx3 in3991-* reload ptr to buffer 01534 0 07 012 1546 1118 lda in3993-* get the correct tally 01535 3 17 001 0 1119 sta bf.tly,3 save in buffer 1120 01536 1 07 012 0 1121 lda t.ocp,1 get head of chain 01537 3 17 000 0 1122 sta bf.nxt,3 make head ptr nxt in our buffer 01540 1 50 012 0 1123 stx3 t.ocp,1 make us head now 1124 01541 0 03 004 1545 1125 ldx2 in3992-* reload op block ptr 01542 273 001 0 1126 iacx2 1 skip the block 01543 4 71 656 1421 1127 tra a.g003-*,* (=int010) 1128 01544 1129 in3991 bss 1 01545 1130 in3992 bss 1 01546 1131 in3993 bss 1 1132 * 1133 * op to test replay chain ptr 1134 * tstrpy 1135 * 01547 1136 in4000 null end of binary card 00000027 01547 1 20 011 0 1137 szn t.rcp,1 any replay chain? 01550 0 64 003 1553 1138 tnz in4010-* yes 1139 01551 2 03 001 0 1140 ldx2 1,2 no, take fail addr 01552 4 71 647 1421 1141 tra a.g003-*,* (=int010) 1142 01553 273 002 0 1143 in4010 iacx2 2 ok skip block 01554 4 71 645 1421 1144 tra a.g003-*,* (=int010) 1145 * 1146 * op to insert char in echo buffer 1147 * echo 1148 * 01555 1149 in4100 null 01555 2 47 001 0 1150 ldq 1,2 get character 01556 4 10 654 1432 1151 tsy a.g012-*,* (=puteco) 01557 273 002 0 1152 iacx2 2 next op block 01560 4 71 641 1421 1153 tra a.g003-*,* (=int010) 1154 * 1155 * initialize cct to specific table 1156 * setcct 1157 * 000010 1158 h.baw equ 8 base address word in hwcm 1159 * 01561 1 07 004 0 1160 in4200 lda t.line,1 be sure it is hsla assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 46 interp subroutine processes most control blocks 01562 2337 11 0 1161 arl 9 01563 0 74 003 1566 1162 tze in4201-* lsla, ignore 01564 2 07 001 0 1163 lda 1,2 get arg 01565 4 10 647 1434 1164 tsy a.g014-*,* =setcct 01566 273 002 0 1165 in4201 iacx2 2 go to next op block 01567 4 71 632 1421 1166 tra a.g003-*,* (=int010) 1167 * 1168 * dump input message up to break char 1169 * dmpmsg 1170 * 01570 1 41 005 0 1171 in4300 ldx3 t.icp,1 get head of input chain 01571 0 74 016 1607 1172 tze in4310-* there isn't any, we're done 01572 3 07 001 0 1173 lda bf.flg,3 find out if this is end 01573 0 34 647 1442 1174 ana l.g006-* =bffbrk 01574 0 17 020 1614 1175 sta in4390-* save for later 01575 3 07 000 0 1176 lda bf.nxt,3 get forward pointer 01576 1 17 005 0 1177 sta t.icp,1 new head of chain 01577 3 07 001 0 1178 lda bf.siz,3 get buffer size 01600 2337 17 0 1179 arl 15 size-1 01601 322 777 0 1180 iera -1 add 1 and negate 01602 1 16 007 0 1181 asa t.icpl,1 subtract from chain length 01603 473 000 0 1182 ilq 0 01604 4 10 627 1433 1183 tsy a.g013-*,* frebuf 01605 0 20 007 1614 1184 szn in4390-* was it last in message? 01606 0 74 762 1570 1185 tze in4300-* no, look at new head 01607 1 20 005 0 1186 in4310 szn t.icp,1 is head of chain zero? 01610 0 64 002 1612 1187 tnz 2 no, that's cool 01611 1 56 006 0 1188 stz t.ilst,1 make sure no one thinks there's a chain 01612 273 001 0 1189 iacx2 1 done, go to next block 01613 4 71 606 1421 1190 tra a.g003-*,* =int010 1191 01614 1192 in4390 bss 1 used to hold latest value of bffbrk 1193 * 1194 * setlcl - set a local variable 1195 * end of binary card 00000028 01615 2 41 001 0 1196 in4400 ldx3 1,2 addr of variable 01616 0 10 067 1705 1197 tsy cvaddr-* get real address 01617 2 07 002 0 1198 lda 2,2 new value 01620 3 17 000 0 1199 sta 0,3 this is the job 01621 273 003 0 1200 iacx2 3 01622 4 71 577 1421 1201 tra a.g003-*,* =int010 1202 * 1203 * addlcl - add value to a local variable 1204 * 01623 2 41 001 0 1205 in4500 ldx3 1,2 addr of variable 01624 0 10 061 1705 1206 tsy cvaddr-* 01625 3 07 000 0 1207 lda 0,3 starting value 01626 2 47 002 0 1208 ldq 2,2 increvemt 01627 4 10 602 1431 1209 tsy a.g011-*,* (addnov) do the add 01630 3 17 000 0 1210 sta 0,3 and store result assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 47 interp subroutine processes most control blocks 01631 273 003 0 1211 iacx2 3 01632 4 71 567 1421 1212 tra a.g003-*,* =int010 1213 * 1214 * tstlcl - test local variable and goto if equal 1215 * 01633 2 41 001 0 1216 in4600 ldx3 1,2 addr of variable 01634 0 10 051 1705 1217 tsy cvaddr-* 01635 2 07 002 0 1218 lda 2,2 test val 01636 3 27 000 0 1219 cmpa 0,3 01637 0 74 003 1642 1220 tze in4601-* do the goto 01640 273 004 0 1221 iacx2 4 01641 4 71 560 1421 1222 tra a.g003-*,* =int010 01642 2 03 003 0 1223 in4601 ldx2 3,2 get branch addr 01643 4 71 556 1421 1224 tra a.g003-*,* =int010 1225 * 1226 * setlcf - set flag in local variable 1227 * 01644 2 41 001 0 1228 in4700 ldx3 1,2 addr of variable 01645 0 10 040 1705 1229 tsy cvaddr-* 01646 2 07 002 0 1230 lda 2,2 new bits to set 01647 3 72 000 0 1231 orsa 0,3 set them 01650 273 003 0 1232 iacx2 3 01651 4 71 550 1421 1233 tra a.g003-*,* =int010 1234 * 1235 * clrlcf - clear flag in local variable 1236 * 01652 2 41 001 0 1237 in4800 ldx3 1,2 addr of variable 01653 0 10 032 1705 1238 tsy cvaddr-* 01654 673 777 0 1239 ila -1 01655 2 35 002 0 1240 era 2,2 get invverted mask 01656 3 32 000 0 1241 ansa 0,3 turn off bits 01657 273 003 0 1242 iacx2 3 01660 4 71 541 1421 1243 tra a.g003-*,* =int010 1244 * 1245 * tstlcf - test flag in local variable and goto if on 1246 * 01661 2 41 001 0 1247 in4900 ldx3 1,2 addr of variable 01662 0 10 023 1705 1248 tsy cvaddr-* 01663 2 07 002 0 1249 lda 2,2 bits to test end of binary card 00000029 01664 3 34 000 0 1250 ana 0,3 test them 01665 2 27 002 0 1251 cmpa 2,2 all on? 01666 0 74 003 1671 1252 tze in4901-* yes 01667 273 004 0 1253 iacx2 4 01670 4 71 531 1421 1254 tra a.g003-*,* =int010 01671 2 03 003 0 1255 in4901 ldx2 3,2 get place to go 01672 4 71 527 1421 1256 tra a.g003-*,* =int010 1257 * 1258 * setlcv - set local variable from another one 1259 * 01673 2 41 001 0 1260 in5000 ldx3 1,2 address of target assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 48 interp subroutine processes most control blocks 01674 0 10 011 1705 1261 tsy cvaddr-* 01675 0 50 007 1704 1262 stx3 in5001-* 01676 2 41 002 0 1263 ldx3 2,2 address of source 01677 0 10 006 1705 1264 tsy cvaddr-* 01700 3 07 000 0 1265 lda 0,3 pick up data 01701 4 17 003 1704 1266 sta in5001-*,* 01702 273 003 0 1267 iacx2 3 01703 4 71 516 1421 1268 tra a.g003-*,* =int010 01704 1269 in5001 bss 1 1270 * 1271 * subroutine to get address of local variables. 1272 * a positve number is a real address. 1273 * a negative number is a tib externion offset, and is converted 1274 * to a real address. 1275 * entered with address in x3 1276 * 01705 1277 cvaddr subr cva 01710 3333 00 0 1278 cx3a 01711 422 000 0 1279 icmpa 0 test for minus 01712 0 65 010 1722 1280 tpl cvaret-* normal address 01713 1 20 011 0 1281 szn t.elnk,1 be sure there is tib extension 01714 0 64 002 1716 1282 tnz 2 01715 1283 die 14 01716 322 777 0 1284 iera -1 invert offset 01717 773 001 0 1285 iaa 1 01720 1 06 011 0 1286 ada t.elnk,1 now have real address 01721 4333 00 0 1287 cax3 01722 1288 cvaret return cvaddr 1289 * 1290 * calasm - call an assembler subr from control tables 1291 * 01724 3332 00 0 1292 in5100 cx2a 01725 773 003 0 1293 iaa 3 get param list addr 01726 4333 00 0 1294 cax3 store here for call 01727 2 06 002 0 1295 ada 2,2 get addr of opblock after params 01730 0 17 007 1737 1296 sta in5101-* save for return 01731 2 03 002 0 1297 ldx2 2,2 load param count end of binary card 00000030 01732 7 10 776 0 1298 tsy -2,3* and call subr 01733 3332 00 0 1299 cx2a check return value 01734 4 64 465 1421 1300 tnz a.g003-*,* subr set return addr 01735 0 03 002 1737 1301 ldx2 in5101-* continue in line 01736 4 71 463 1421 1302 tra a.g003-*,* =int010 01737 1303 in5101 bss 1 1304 * 1305 * bkptop - breakpoint ecountered 1306 * 01740 4 10 276 2236 1307 in5200 tsy a.h002-*,* =brkhit, see what to do 01741 4 71 276 2237 1308 tra a.h003-*,* =int011, dont break, a contains op 01742 0 07 266 2230 1309 lda l.h002-* =tfbkpt, set break flag 01743 1 72 036 0 1310 orsa t.flg3,1 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 49 interp subroutine processes most control blocks 01744 4 71 274 2240 1311 tra a.h004-*,* =int300, exit thru wait opblock 1312 * 1313 * linctl - checks to see if test state call was caused 1314 * by a line_control order from cs 1315 * 01745 4 10 274 2241 1316 in5300 tsy a.h005-*,* =lctlck, dia man entry to check 01746 0 71 021 1767 1317 tra in5301-* not a line control call 01747 0 50 022 1771 1318 stx3 in5302-* save temporarily 01750 2 41 001 0 1319 ldx3 1,2 where to store data 01751 0 10 734 1705 1320 tsy cvaddr-* 01752 3332 00 0 1321 cx2a save opblock addr 01753 0 03 016 1771 1322 ldx2 in5302-* address of line_control data 01754 2 47 000 0 1323 ldq 0,2 copy 4 words 01755 3 57 000 0 1324 stq 0,3 01756 2 47 001 0 1325 ldq 1,2 01757 3 57 001 0 1326 stq 1,3 01760 2 47 002 0 1327 ldq 2,2 01761 3 57 002 0 1328 stq 2,3 01762 2 47 003 0 1329 ldq 3,2 01763 3 57 003 0 1330 stq 3,3 01764 773 003 0 1331 iaa 3 address of next opblock 01765 0332 00 0 1332 cax2 01766 4 71 433 1421 1333 tra a.g003-*,* =int010 01767 2 03 002 0 1334 in5301 ldx2 2,2 take failuure addr 01770 4 71 431 1421 1335 tra a.g003-*,* 01771 1336 in5302 bss 1 1337 * 1338 * linsta - line status to send signal to cs 1339 * 01772 2 41 001 0 1340 in5400 ldx3 1,2 addr of data 01773 0 10 712 1705 1341 tsy cvaddr-* 01774 0 13 775 1771 1342 stx2 in5302-* save opblock addr 01775 3333 00 0 1343 cx3a 01776 0332 00 0 1344 cax2 end of binary card 00000031 01777 0 47 232 2231 1345 ldq l.h003-* =004124, linsta code with wordcount=4 02000 4 10 242 2242 1346 tsy a.h006-*,* =denq 02001 0 03 770 1771 1347 ldx2 in5302-* current opblock 02002 273 002 0 1348 iacx2 2 advance to next 02003 4 71 416 1421 1349 tra a.g003-*,* 1350 * 1351 * tstlcv - compares two variables and does goto if equal 1352 * 02004 2 41 001 0 1353 in5500 ldx3 1,2 addr of first 02005 0 10 700 1705 1354 tsy cvaddr-* 02006 0 50 012 2020 1355 stx3 in5501-* save first addr 02007 2 41 002 0 1356 ldx3 2,2 addr of second 02010 0 10 675 1705 1357 tsy cvaddr-* 02011 3 07 000 0 1358 lda 0,3 get second value 02012 4 27 006 2020 1359 cmpa in5501-*,* compare to first 02013 0 74 003 2016 1360 tze in5502-* got a match assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 50 interp subroutine processes most control blocks 02014 273 004 0 1361 iacx2 4 on to next op 02015 4 71 404 1421 1362 tra a.g003-*,* =int010 02016 2 03 003 0 1363 in5502 ldx2 3,2 get success addr 02017 4 71 402 1421 1364 tra a.g003-*,* =int010 02020 1365 in5501 bss 1 1366 * 1367 * nullop - a no-operation, do nothing 1368 * 02021 273 001 0 1369 in5600 iacx2 1 02022 4 71 223 2245 1370 tra a.h009-*,* =int010 1371 * 1372 * unwind - zeores all subroutine return addresses to return 1373 * highest level. 1374 * 02023 4 56 220 2243 1375 in5700 stz a.h007-*,* =incall 02024 1 56 022 0 1376 stz t.reta,1 02025 0 71 774 2021 1377 tra in5600-* 1378 * 1379 * settmv - set time from a variable 1380 * 02026 2 41 001 0 1381 in5800 ldx3 1,2 get variable address 02027 0 10 656 1705 1382 tsy cvaddr-* 02030 3 07 000 0 1383 lda 0,3 pick up time 02031 4 71 213 2244 1384 tra a.h008-*,* =int601, join setime path 1385 * 1386 * retpms - return parameters 1387 * 1388 * in5900 null return p 1389 * ilq sparms put return params opcode in q 1390 * tsy idenk-*,* for dia enqueueing routine 1391 * iacx2 1 skip this block 1392 * tra a.h009-*,* (=int010) 02032 0 02000 3 1393 idenk ind denq dia enqueueing routine 1394 * 1395 * gotov - go to a variable 1396 * 02033 2 41 001 0 1397 in6000 ldx3 1,2 get variable address 02034 0 10 651 1705 1398 tsy cvaddr-* 02035 3 03 000 0 1399 ldx2 0,3 get target address 02036 4 71 207 2245 1400 tra a.h009-*,* =int010 1401 1402 * 1403 * gocase - goto computed on case basis 1404 * 02037 1405 in6100 null goto computed on case 02037 0 13 065 2124 1406 stx2 gocsva-* save opblock table ic 02040 2 07 001 0 1407 lda 1,2 get varriable addr 02041 0 17 070 2131 1408 sta gocval-* save this addr in temp loc 02042 0 34 066 2130 1409 ana gocmsk-* see if tib ext is char or word 02043 0 27 065 2130 1410 cmpa gocmsk-* see if o760 02044 0 64 007 2053 1411 tnz in6101-* if not char in tib assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 51 interp subroutine processes most control blocks end of binary card 00000032 02045 0 07 064 2131 1412 lda gocval-* word, so get addr from cvaddr 02046 0 37 061 2127 1413 ora gocend-* get this to a full o777xxx 02047 4333 00 0 1414 cax3 move this addr to x3 02050 0 10 635 1705 1415 tsy cvaddr-* go get the real address 02051 3 07 000 0 1416 lda 0,3 get value of this varriable 02052 0 71 005 2057 1417 tra in6102-* have addr so go do rest 02053 0 07 056 2131 1418 in6101 lda gocval-* char so go get that addr 02054 4 10 057 2133 1419 tsy goctib-*,* get real addr 02055 0 71 002 2057 1420 tra in6102-* literal, so have value 02056 3 07 200 0 1421 lda 0,3,b.0 go get value from tib 02057 0 17 052 2131 1422 in6102 sta gocval-* so store it 02060 2 07 002 0 1423 lda 2,2 get addr compare list 02061 0 37 054 2135 1424 ora gocbyt-* set for byte addressing 02062 0 17 043 2125 1425 sta gocvls-* save addr in word 02063 2 41 003 0 1426 ldx3 3,2 get addr of jmp list 02064 0 03 041 2125 1427 ldx2 gocvls-* get addr of cmp list to an index 02065 0 07 042 2127 1428 in6103 lda gocend-* get ond of list marker 02066 3 27 000 0 1429 cmpa 0,3 check for end of string 02067 0 74 032 2121 1430 tze in6107-* if end return 02070 2 07 200 0 1431 lda 0,2,b.0 get char from cmp list 02071 0 27 041 2132 1432 cmpa goclsn-* see if end of value list 02072 0 74 027 2121 1433 tze in6107-* end so return 02073 0 50 033 2126 1434 stx3 gocjls-* save our jmp addr, we need x3 02074 0 34 034 2130 1435 ana gocmsk-* o760, see if char or word 02075 0 27 033 2130 1436 cmpa gocmsk-* see if word (o760) 02076 0 64 007 2105 1437 tnz in6104-* if not char, tib ext word 02077 2 07 200 0 1438 lda 0,2,b.0 word so get value back to get 02100 0 37 027 2127 1439 ora gocend-* get to a full o777xxx 02101 4333 00 0 1440 cax3 move addr to x3 for cvaddr 02102 0 10 603 1705 1441 tsy cvaddr-* go get real addr 02103 3 07 000 0 1442 lda 0,3 get value of varriable 02104 0 71 005 2111 1443 tra in6105-* go do it 02105 2 07 200 0 1444 in6104 lda 0,2,b.0 char so go get it. 02106 4 10 025 2133 1445 tsy goctib-*,* get tib ext addr if needed 02107 0 71 002 2111 1446 tra in6105-* literal so have it 02110 3 07 200 0 1447 lda 0,3,b.0 get real value from tib ext 02111 1448 in6105 null do rest of this entry 02111 0 41 015 2126 1449 ldx3 gocjls-* load our jmp list back 02112 0 27 017 2131 1450 cmpa gocval-* compare two values 02113 0 74 004 2117 1451 tze in6106-* if equal found it end of binary card 00000033 02114 273 300 0 1452 iacx2 0,b.1 incr x2 to next character 02115 373 001 0 1453 iacx3 1 incr our index counter 02116 0 71 747 2065 1454 tra in6103-* try next value to compare 02117 1455 in6106 null found our value 02117 3 03 000 0 1456 ldx2 0,3 set x2 to the jmp addr 02120 4 71 125 2245 1457 tra a.h009-*,* go return =int010 02121 1458 in6107 null value not in our table 02121 0 03 003 2124 1459 ldx2 gocsva-* get old opblock table ic 02122 273 004 0 1460 iacx2 4 incr x2 to next opblock in table assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 52 interp subroutine processes most control blocks 02123 4 71 122 2245 1461 tra a.h009-*,* go return =int010 02124 1462 gocsva bss 1 temp of old x2 02125 1463 gocvls bss 1 varriable list addr 02126 1464 gocjls bss 1 jump list addr 02127 777000 0 1465 gocend oct 777000 end of list records 02130 000760 0 1466 gocmsk oct 760 mask for char or word tib ext 02131 1467 gocval bss 1 store value to match 02132 000777 0 1468 goclsn oct 000777 end of chrstr list 02133 0 03627 1 1469 goctib ind adbyte get character from tib 02134 1470 gocsvt bss 1 save area 02135 2 00000 0 1471 gocbyt zero 0,b.0 set to byte addressing 1472 1473 02136 1474 in6200 null setfld 02136 2 07 002 0 1475 lda 2,2 get value to set 02137 6 17 001 0 1476 sta 1,2* store it (op block indirects through x1) 02140 273 003 0 1477 iacx2 3 on to next 02141 4 71 104 2245 1478 tra a.h009-*,* int010 1479 02142 1480 in6300 null addfld 02142 6 07 001 0 1481 lda 1,2* get contents of tib field 02143 2 47 002 0 1482 ldq 2,2 get increment 02144 4 10 102 2246 1483 tsy a.h010-*,* addnov 02145 6 17 001 0 1484 sta 1,2* result to tib field (op block indirects through 02146 273 003 0 1485 iacx2 3 on to next 02147 4 71 076 2245 1486 tra a.h009-*,* int010 1487 02150 1488 in6400 null tstfld 02150 2 07 002 0 1489 lda 2,2 get value to test against 02151 6 27 001 0 1490 cmpa 1,2* compare it to field 02152 0 74 003 2155 1491 tze in6410-* equal, branch 02153 273 004 0 1492 iacx2 4 else advance to next block 02154 4 71 071 2245 1493 tra a.h009-*,* int010 02155 2 03 003 0 1494 in6410 ldx2 3,2 get branch address 02156 4 71 067 2245 1495 tra a.h009-*,* (int010) go to it 1496 02157 1497 in6500 null meter1 (add to single-word meter) 02157 0 07 070 2247 1498 lda a.h011-* addr (mincs) 02160 0 71 004 2164 1499 tra mjoin-* 1500 02161 1501 in6600 null meter2 (add to double-word meter) 02161 0 07 067 2250 1502 lda a.h012-* addr(mincd) end of binary card 00000034 02162 0 71 002 2164 1503 tra mjoin-* 1504 02163 1505 in6700 null meteru (update meter & meter count) 02163 0 07 066 2251 1506 lda a.h013-* addr (mupdat) 02164 1507 mjoin null a contains address of subroutine 02164 0 71 006 2172 1508 mcall tra mret-* patched to nop by bind_fnp if metering enabled 02165 0 17 023 2210 1509 sta mentry-* 02166 1 07 052 0 1510 lda t.metr,1 get pointer to metering area assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 53 interp subroutine processes most control blocks 02167 2 06 001 0 1511 ada 1,2 plus offset of specified meter 02170 2 47 002 0 1512 ldq 2,2 get increment from op block 02171 4 10 017 2210 1513 tsy mentry-*,* call subroutine 02172 273 003 0 1514 mret iacx2 3 next op block 02173 4 71 052 2245 1515 tra a.h009-*,* int010 1516 02174 1517 in6800 null meterm (meter synchronous message) 02174 0 71 012 2206 1518 mcal2 tra mret2-* ***see note at mcall 02175 1 07 052 0 1519 lda t.metr,1 get pointer to metering area 02176 2 20 001 0 1520 szn 1,2 input or output? 02177 0 64 004 2203 1521 tnz in6810-* output 02200 773 022 0 1522 iaa m.nim input, get correct offset 02201 1 41 005 0 1523 ldx3 t.icp,1 and buffer pointer 02202 0 71 003 2205 1524 tra in6820-* 02203 773 030 0 1525 in6810 iaa m.nom get offset for output metering 02204 1 41 012 0 1526 ldx3 t.ocp,1 and buffer pointer 02205 4 10 045 2252 1527 in6820 tsy a.h014-*,* mmsg 02206 273 002 0 1528 mret2 iacx2 2 next op block 02207 4 71 036 2245 1529 tra a.h009-*,* int010 1530 1531 02210 0 00000 0 1532 mentry ind 0 set to address of appropriate metering routine assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 54 subroutine to get address of carriage movement table 1533 ttls subroutine to get address of carriage movement table 1534 02211 1535 getcmt subr get 1536 02214 0 03 021 2235 1537 ldx2 a.h001-* (=ctrl) get addr of base of ctrl 02215 2 07 001 0 1538 lda ct.dev,2 to get ptr to device tables 02216 1 06 017 0 1539 ada t.type,1 add in the type of this guy 02217 773 777 0 1540 iaa -1 correct for zero offset 02220 0332 00 0 1541 cax2 get ptr to ptr to correct devtbl 02221 2 07 000 0 1542 lda 0,2 now have ptr to devtbl 02222 773 005 0 1543 iaa dt.cmt add in offset of cmt 02223 0 37 004 2227 1544 ora l.h001-* (=0,b.0) add in char addressing 02224 0332 00 0 1545 cax2 put into x2 02225 1546 return getcmt 1547 02227 2 00000 0 1548 l.h001 zero 0,b.0 02230 000001 0 1549 l.h002 vfd o18/tfbkpt end of binary card 00000035 02231 004124 0 1550 l.h003 oct 004124 02232 004000 0 1551 l.h004 oct 004000 02233 400000 0 1552 l.h005 oct 400000 02234 377777 0 1553 l.h006 oct 377777 02235 0 01000 3 1554 a.h001 ind ctrl 02236 0 13000 3 1555 a.h002 ind brkhit 02237 0 00362 1 1556 a.h003 ind int011 02240 0 00531 1 1557 a.h004 ind int300 02241 0 22000 3 1558 a.h005 ind lctlck 02242 0 02000 3 1559 a.h006 ind denq 02243 0 01017 1 1560 a.h007 ind incall 02244 0 00543 1 1561 a.h008 ind int601 02245 0 00361 1 1562 a.h009 ind int010 02246 0 02253 1 1563 a.h010 ind addnov 02247 0 11000 3 1564 a.h011 ind mincs 02250 0 10000 3 1565 a.h012 ind mincd 02251 0 24000 3 1566 a.h013 ind mupdat 02252 0 06000 3 1567 a.h014 ind mmsg assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 55 addnov - add the q to the a without causing overflow 1568 ttls addnov - add the q to the a without causing overflow 1569 02253 1570 addnov subr ano,(i) 02261 0 17 022 2303 1571 sta anosva-* save "a" temporarily 02262 0 07 776 2260 1572 lda anosi-* get indicators 02263 0 37 747 2232 1573 ora l.h004-* =004000, inhibit overflow 02264 0 17 016 2302 1574 sta anotmp-* 02265 0 44 015 2302 1575 ldi anotmp-* 02266 0 57 014 2302 1576 stq anotmp-* the addend 02267 0 07 014 2303 1577 lda anosva-* 02270 0 06 012 2302 1578 ada anotmp-* why we're here 02271 0 55 002 2273 1579 tov 2 failed 02272 0 71 006 2300 1580 tra anoret-* add ok, return 02273 773 000 0 1581 iaa 0 02274 0 75 003 2277 1582 tmi annovp-* answer was minus, set to +infinity 02275 0 07 736 2233 1583 lda l.h005-* =400000 02276 0 71 002 2300 1584 tra anoret-* end of binary card 00000036 02277 0 07 735 2234 1585 annovp lda l.h006-* =377777 02300 1586 anoret return addnov 02302 1587 anotmp bss 1 02303 1588 anosva bss 1 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 56 dcwcnt subroutine counts words in dcwlst op block 1589 ttls dcwcnt subroutine counts words in dcwlst op block 1590 * 02304 1591 dcwcnt subr dcw 1592 * 1593 * calculates number of words in dcwlst op block and calls 1594 * appropriate subroutine to process it 1595 * 000006 1596 maxdcw equ 6 1597 1598 02307 273 001 0 1599 iacx2 1 point to first subop 02310 1 13 023 0 1600 stx2 t.dcwa,1 store starting address 1601 * 02311 1602 dcw010 null head of word-counting loop 02311 2 07 000 0 1603 lda 0,2 get next word 02312 2337 11 0 1604 arl 9 isolate subop code 02313 0 27 076 2411 1605 cmpa l.e005-* (=o777) are all 9 bits on? 02314 0 74 052 2366 1606 tze dcw080-* yes, all through with dcwlst 02315 2337 06 0 1607 arl 6 isolate 3 high-order bits 02316 422 001 0 1608 icmpa 1 die if less than 1 02317 0 75 005 2324 1609 tmi dcw020-* 02320 422 003 0 1610 icmpa 3 if output, handle specifically 02321 0 74 006 2327 1611 tze dcw030-* 02322 422 006 0 1612 icmpa maxdcw check against maximum value 02323 0 75 002 2325 1613 tmi 2 less is okay 02324 1614 dcw020 null unrecognizable subop 02324 1615 die 6 1616 here if 1, 2, 4, or 5, just go to next word 02325 273 001 0 1617 iacx2 1 02326 0 71 763 2311 1618 tra dcw010-* 1619 * 02327 1620 dcw030 null output subop, count chars. 02327 3332 00 0 1621 cx2a switch x2 to 9-bit byte addr. 02330 0 37 055 2405 1622 ora l.e001-* 0,b.0 02331 0332 00 0 1623 cax2 02332 1624 dcw040 null 02332 273 300 0 1625 iacx2 0,b.1 next character 02333 1626 dcw050 null 02333 2 07 200 0 1627 lda 0,2,b.0 pick up char. 02334 0 27 052 2406 1628 cmpa l.e002-* =o000477 02335 0 74 024 2361 1629 tze dcw070-* end of output subop 02336 0 27 051 2407 1630 cmpa l.e003-* (=o000400) literal? 02337 0 75 773 2332 1631 tmi dcw040-* yes, get next char. 02340 0 35 047 2407 1632 era l.e003-* else turn off high-order bit 02341 422 001 0 1633 icmpa 1 check for printer 02342 0 74 770 2332 1634 tze dcw040-* or keyboard addressing 02343 422 002 0 1635 icmpa 2 and go to next char 02344 0 74 766 2332 1636 tze dcw040-* in either case 1637 * 02345 422 003 0 1638 icmpa 3 splice in output chain? end of binary card 00000037 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 57 dcwcnt subroutine counts words in dcwlst op block 02346 0 64 006 2354 1639 tnz dcw060-* 02347 273 300 0 1640 iacx2 0,b.1 if so, next char. must be 02350 2 07 200 0 1641 lda 0,2,b.0 "end f output" or we die 02351 0 27 035 2406 1642 cmpa l.e002-* =o000477 02352 0 74 007 2361 1643 tze dcw070-* 02353 1644 die 7 1645 * 02354 1646 dcw060 null 02354 422 004 0 1647 icmpa 4 repeat? 02355 0 74 002 2357 1648 tze 2 it had better be 02356 1649 die 6 02357 273 301 0 1650 iacx2 1,b.1 bump x2 by 3 chars 02360 0 71 753 2333 1651 tra dcw050-* 1652 * 02361 1653 dcw070 null end of output subop 02361 3332 00 0 1654 cx2a restore word addressing to x2 02362 0 34 026 2410 1655 ana l.e004-* =o077777 02363 0332 00 0 1656 cax2 02364 273 001 0 1657 iacx2 1 go to next word 02365 0 71 724 2311 1658 tra dcw010-* 1659 * 02366 1660 dcw080 null end of dcwlst 02366 0 07 025 2413 1661 lda l.e007-* (o777000) 02367 1 32 024 0 1662 ansa t.dcwl,1 zero t.dcwl but preserve skip count in upper char 02370 3332 00 0 1663 cx2a calculate dcwlst length 02371 1 26 023 0 1664 sba t.dcwa,1 02372 1 72 024 0 1665 orsa t.dcwl,1 and put it in tib 02373 1 07 004 0 1666 lda t.line,1 get high-order bit of 02374 2337 11 0 1667 arl 9 line number 02375 0 74 003 2400 1668 tze dcw090-* 02376 4 10 005 2403 1669 tsy ihdcw-*,* hsla 02377 0 71 002 2401 1670 tra dcwbak-* 02400 1671 dcw090 null 02400 4 10 004 2404 1672 tsy ildcw-*,* lsla 1673 * 02401 1674 dcwbak return dcwcnt 1675 * 1676 * 02403 0 04000 3 1677 ihdcw ind hdcw hsla dcwlst processor 02404 0 05000 3 1678 ildcw ind ldcw lsla dcwlst processor 1679 * 02405 2 00000 0 1680 l.e001 zero 0,b.0 to switch to char addressing 02406 000477 0 1681 l.e002 oct 477 02407 000400 0 1682 l.e003 oct 400 02410 077777 0 1683 l.e004 oct 77777 02411 000777 0 1684 l.e005 oct 777 02412 000514 0 1685 l.e006 oct 514 control string byte - seteom 02413 777000 0 1686 l.e007 oct 777000 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 58 subroutines for copying into replay chain 1687 ttls subroutines for copying into replay chain 1688 02414 1689 copybf subr cop,(x2) end of binary card 00000038 1690 1691 this routine is called to copy an input buffer 1692 into the replay chain 1693 inputs: 1694 x2 points to input buffer 1695 a contains buffer tally 1696 1697 outputs: 1698 x3 points to last buffer in replay chain 1699 02422 322 777 0 1700 iera -1 negate the tally 02423 773 001 0 1701 iaa 1 02424 0 17 146 2572 1702 sta citly-* save it 1703 02425 1 20 011 0 1704 szn t.rcp,1 have we started building the chain yet? 02426 0 64 006 2434 1705 tnz cop010-* yes 02427 0 10 112 2541 1706 tsy cgetbf-* no, get a buffer to start it with 1707 02430 0 56 144 2574 1708 stz cpos-* column position starts at zero 02431 673 012 0 1709 ila 10 first tab stop is 10 02432 0 17 143 2575 1710 sta ctab-* 02433 0 71 002 2435 1711 tra cop030-* 1712 02434 0 41 143 2577 1713 cop010 ldx3 clchar-* get pointer to next place to store char 1714 02435 2 47 200 0 1715 cop030 ldq 0,2,b.0 get the character 02436 0 67 142 2600 1716 cmpq tabchr-* is it a tab? 02437 0 64 026 2465 1717 tnz cop070-* no 02440 1 07 001 0 1718 lda t.flg,1 yes, are we in tab echo? 02441 0 31 130 2571 1719 cana l.i003-* =tftbec 02442 0 64 010 2452 1720 tnz cop050-* yes 02443 0 10 050 2513 1721 tsy cpchar-* no, put tab in buffer 02444 0 47 135 2601 1722 ldq delchr-* now we'll put in delays for the real tab 02445 673 003 0 1723 ila 3 three of 'em 1724 02446 0 10 045 2513 1725 cop040 tsy cpchar-* put one in replay buffer 02447 773 777 0 1726 iaa -1 02450 0 64 776 2446 1727 tnz cop040-* do another if not finished 1728 02451 0 71 033 2504 1729 tra cop090-* ok, done with this char 1730 02452 0 07 123 2575 1731 cop050 lda ctab-* we're in tab echo, how many spaces? 02453 0 26 121 2574 1732 sba cpos-* this many 02454 473 040 0 1733 ilq space 02455 0 10 036 2513 1734 cop060 tsy cpchar-* put it in 02456 773 777 0 1735 iaa -1 more? 02457 0 64 776 2455 1736 tnz cop060-* yes assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 59 subroutines for copying into replay chain 1737 02460 0 07 115 2575 1738 lda ctab-* update column position 02461 0 17 113 2574 1739 sta cpos-* 02462 773 012 0 1740 iaa 10 end of binary card 00000039 02463 0 17 112 2575 1741 sta ctab-* and next tab stop 02464 0 71 020 2504 1742 tra cop090-* 1743 02465 0 10 026 2513 1744 cop070 tsy cpchar-* not a tab, store it 02466 1 07 001 0 1745 lda t.flg,1 tab echo? 02467 0 31 102 2571 1746 cana l.i003-* =tftbec 02470 0 74 014 2504 1747 tze cop090-* 02471 0 07 103 2574 1748 lda cpos-* yes, update position 02472 0 67 110 2602 1749 cmpq bschar-* which way did we go? 02473 0 64 003 2476 1750 tnz cop080-* 02474 773 777 0 1751 iaa -1 backspace 02475 0 71 002 2477 1752 tra 2 02476 773 001 0 1753 cop080 iaa 1 forward 02477 0 17 075 2574 1754 sta cpos-* 02500 0 27 075 2575 1755 cmpa ctab-* did we reach next tab stop? 02501 0 75 003 2504 1756 tmi cop090-* 02502 673 012 0 1757 ila 10 yes, update tab stop 02503 0 16 072 2575 1758 asa ctab-* 1759 02504 273 300 0 1760 cop090 iacx2 0,b.1 bump input pointer 02505 0 76 065 2572 1761 aos citly-* have we done it all? 02506 0 64 727 2435 1762 tnz cop030-* no, get next char 1763 02507 0 50 070 2577 1764 stx3 clchar-* done, save character position in buffer 02510 0 41 066 2576 1765 ldx3 clast-* return buffer pointer for gtinpt 02511 1766 return copybf assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 60 subroutines for copying into replay chain 1767 eject 02513 1768 cpchar subr cpc,(a,q,x2) 1769 1770 this subroutine stores the character 1771 passed in the q into the replay chain 1772 pointed into by x3, updating x3 as appropriate 1773 02527 0 20 044 2573 1774 szn cotly-* is there room? 02530 0 64 002 2532 1775 tnz cpc010-* yes 02531 0 10 010 2541 1776 tsy cgetbf-* no, get a buffer 1777 x3, cotly, and clast are also updated now 02532 3 57 200 0 1778 cpc010 stq 0,3,b.0 end of binary card 00000040 02533 373 300 0 1779 iacx3 0,b.1 02534 0 76 037 2573 1780 aos cotly-* 02535 0 03 041 2576 1781 ldx2 clast-* get buffer pointer 02536 2 76 001 0 1782 aos bf.tly,2 keep tally accurate 02537 1783 return cpchar assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 61 subroutines for copying into replay chain 1784 eject 02541 1785 cgetbf subr cge,(q) 1786 1787 this subroutine allocates a buffer 1788 for adding to the replay chain 1789 address at which first char is to be stored 1790 is returned in x3 1791 02547 473 040 0 1792 ilq bufsiz 02550 4 10 017 2567 1793 tsy a.i001-*,* getbuf 02551 1794 die 18 bad news if we couldn't get one 1795 02552 673 704 0 1796 ila -bufnch initialize negative tally 02553 0 17 020 2573 1797 sta cotly-* 1798 02554 1 20 011 0 1799 szn t.rcp,1 is there a chain already? 02555 0 64 003 2560 1800 tnz cge010-* yes, ok 02556 1 50 011 0 1801 stx3 t.rcp,1 no, this is the beginning of it 02557 0 71 002 2561 1802 tra 2 02560 4 50 016 2576 1803 cge010 stx3 clast-*,* set forward pointer in preceding buffer 02561 0 50 015 2576 1804 stx3 clast-* this is last one now 1805 02562 3333 00 0 1806 cx3a point to beginning of data 02563 0 06 005 2570 1807 ada l.i001-* =bf.dta,b.0 02564 4333 00 0 1808 cax3 02565 1809 return cgetbf 1810 1811 02567 0 17000 3 1812 a.i001 ind getbuf 1813 02570 2 00002 0 1814 l.i001 zero bf.dta,b.0 1815 *l.i002 unused 02571 004000 0 1816 l.i003 vfd 18/tftbec 1817 02572 1818 citly bss 1 residual source tally (negative) 02573 1819 cotly bss 1 residual target tally (negative) 02574 1820 cpos bss 1 current column position 02575 1821 ctab bss 1 next tab stop 02576 1822 clast bss 1 pointer to last buffer in replay chain 02577 1823 clchar bss 1 pointer to next place for replay character 1824 02600 1825 tabchr bss 1 tab character for this terminal 02601 1826 delchr bss 1 pad character 02602 1827 bschar bss 1 backspace assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 62 scanop subroutine processes both inscan and outscn block 1828 ttls scanop subroutine processes both inscan and outscn block 1829 * 02603 1830 scanop subr sca 1831 * 02606 4 17 247 3055 1832 sta isctyp-*,* set scan type 02607 4 13 245 3054 1833 stx2 iscsx2-*,* save x2 value during scan end of binary card 00000041 02610 2 07 001 0 1834 lda 1,2 get control string address 02611 0 37 231 3042 1835 ora l.u001-* 0,b.0 02612 4 17 240 3052 1836 sta iscstr-*,* save control string byte address 02613 1837 sca000 null get next byte from control string 02613 4 10 240 3053 1838 tsy iscnxt-*,* via subroutine 02614 4 71 160 2774 1839 tra a.a004-*,* (sca260) end of control string 02615 0 71 002 2617 1840 tra sca004-* control byte = 5xx 02616 0 71 042 2660 1841 tra sca001-* error - literal in control string 1842 02617 0 34 224 3043 1843 sca004 ana l.u002-* =o77 - isolate scan subop 02620 0 64 002 2622 1844 tnz 2 zero not allowed 02621 1845 die 15 error in control string 1846 02622 422 030 0 1847 icmpa sca003 check for max subop 02623 0 75 002 2625 1848 tmi 2 02624 1849 die 15 error in control string 02625 4333 00 0 1850 cax3 02626 0 40 002 2630 1851 adcx3 sca002-* add address of jump table 02627 7 71 000 0 1852 tra 0,3* go to subop routine 02630 0 02630 1 1853 sca002 zero * address of jump table 1854 * subop jump table 02631 0 02661 1 1855 ind sca010 match for equal 02632 0 02671 1 1856 ind sca020 search for char 02633 0 02716 1 1857 ind sca030 ignore 02634 0 03005 1 1858 ind sca040 start bcc computation 02635 0 03011 1 1859 ind sca050 find end of chain 02636 0 03014 1 1860 ind sca060 compare bcc 02637 0 03025 1 1861 ind sca070 compare with mask 02640 0 03061 1 1862 ind sca080 rescan 02641 0 03005 1 1863 ind sca090 start lrc computation 02642 0 03063 1 1864 ind sca100 insert lrc 02643 0 03014 1 1865 ind sca110 compare lrc 02644 0 03074 1 1866 ind sca120 set last buffer in message flag 02645 0 03100 1 1867 ind sca130 replace current char 02646 0 03106 1 1868 ind sca140 compare with list 02647 0 03126 1 1869 ind sca150 move byte 02650 0 03144 1 1870 ind sca160 move byte with mask 02651 0 03155 1 1871 ind sca170 count chars 02652 0 03166 1 1872 ind sca180 search for match on either of two values 02653 0 03213 1 1873 ind sca190 turn on bits in char 02654 0 03223 1 1874 ind sca200 turn off bits in char 02655 0 03234 1 1875 ind sca210 check sync termination char 02656 0 03313 1 1876 ind sca220 move last two chars in message to tib extension end of binary card 00000042 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 63 scanop subroutine processes both inscan and outscn block 02657 0 02711 1 1877 ind sca230 skip to next char, update block check 000030 1878 sca003 equ *-sca002 defines end of jump table 1879 02660 1880 sca001 die 15 error in control string assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 64 scanop subroutine processes both inscan and outscn block 1881 eject 02661 1882 sca010 null match for equal 02661 4 10 175 3056 1883 tsy ischkc-*,* get compare value 02662 1884 die 15 error in control string 02663 0 17 125 3010 1885 sta scwrk1-* save byte for compare 02664 4 10 173 3057 1886 tsy isgtch-*,* pick up char. 02665 4 71 110 2775 1887 tra a.a005-*,* (=sca300) no char, forget it 1888 * 02666 0 27 122 3010 1889 cmpa scwrk1-* see if it's the match char 02667 4 64 106 2775 1890 tnz a.a005-*,* (=sca300) no 02670 0 71 723 2613 1891 tra sca000-* yes 1892 * 1893 * 1894 * 1895 * 02671 1896 sca020 null search for char 02671 4 10 165 3056 1897 tsy ischkc-*,* get search value 02672 1898 die 15 error in control string 02673 0 17 115 3010 1899 sta scwrk1-* save for compare 02674 4 10 163 3057 1900 tsy isgtch-*,* get char, without bumping pointer 02675 4 71 100 2775 1901 tra a.a005-*,* (=sca300) if any 02676 1902 sca022 null 02676 4 20 103 3001 1903 szn a.a009-*,* (=scbccf) are we in process of block check 02677 0 74 002 2701 1904 tze 2 02700 4 62 100 3000 1905 ersa a.a008-*,* (=scbcc) yes, do it 02701 0 27 107 3010 1906 cmpa scwrk1-* check against search char. 02702 0 74 711 2613 1907 tze sca000-* got it 02703 4 20 074 2777 1908 szn a.a007-*,* (=sccntf) are we in process of char count 02704 0 74 002 2706 1909 tze 2 no 02705 4 10 071 2776 1910 tsy a.a006-*,* (=scount) go ahead and count this char 02706 4 10 152 3060 1911 tsy iscnex-*,* no match, bump pointer 02707 4 71 066 2775 1912 tra a.a005-*,* (=sca300) if not possible, fail 02710 0 71 766 2676 1913 tra sca022-* else, go look at char 1914 * 1915 * 1916 * 02711 1917 sca230 null skip char, but update block check 02711 4 20 070 3001 1918 szn a.a009-*,* (=scbccf) block check in progress ? 02712 0 74 004 2716 1919 tze sca030-* no 02713 4 10 144 3057 1920 tsy isgtch-*,* get current char 02714 4 71 061 2775 1921 tra a.a005-*,* (=sca300) end of data 02715 4 62 063 3000 1922 ersa a.a008-*,* (=scbcc) update block check 1923 02716 1924 sca030 null ignore 02716 4 10 142 3060 1925 tsy iscnex-*,* skip over next char. 02717 0 71 005 2724 1926 tra sca032-* trying to skip past end, add more room 02720 4 20 057 2777 1927 sca031 szn a.a007-*,* (=sccntf) are we in process of char count 02721 0 74 002 2723 1928 tze 2 no 02722 4 10 054 2776 1929 tsy a.a006-*,* (=scount) go ahead and count this char 02723 0 71 670 2613 1930 tra sca000-* 1931 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 65 scanop subroutine processes both inscan and outscn block 02724 4 20 131 3055 1932 sca032 szn isctyp-*,* check scan type 02725 4 74 050 2775 1933 tze a.a005-*,* (=sca300) inscan, fail can't add 1934 end of binary card 00000043 02726 4 41 043 2771 1935 ldx3 a.a001-*,* (=pbufp) 02727 3 07 001 0 1936 lda bf.tly,3 get buffer tally 02730 0 34 036 2766 1937 ana l.k001-* (=buftmk) leave only tally 02731 422 074 0 1938 icmpa bufnch compare to max tally 02732 0 75 030 2762 1939 tmi sca033-* ok, will fit here 1940 02733 3 07 001 0 1941 lda bf.flg,3 get buffer flags 02734 0 34 033 2767 1942 ana l.k002-* (=bfflst) save last flag 02735 0 17 047 3004 1943 sta scasva-* 02736 322 777 0 1944 iera -1 invert it 02737 3 32 001 0 1945 ansa bf.flg,3 make sure its off 1946 02740 0 50 043 3003 1947 stx3 scasvn-* save addr of current last buffer 02741 473 040 0 1948 ilq bufsiz get a new one 02742 4 10 625 2567 1949 tsy a.i001-*,* =getbuf 02743 4 71 032 2775 1950 tra a.a005-*,* =sca300, scan fails 02744 4 07 037 3003 1951 lda scasvn-*,* foward pointer from old last pointer 02745 3 17 000 0 1952 sta bf.nxt,3 chain after current buffer 02746 4 50 035 3003 1953 stx3 scasvn-*,* make old last buffer point at current 1954 02747 0 07 035 3004 1955 lda scasva-* get saved a 02750 3 17 001 0 1956 sta bf.flg,3 set last flag same as before 1957 02751 673 001 0 1958 ila 1 02752 4 17 020 2772 1959 sta a.a002-*,* (=ptally) and set to one 02753 3333 00 0 1960 cx3a get ptr to buffer 02754 773 002 0 1961 iaa bf.dta add offset to data 02755 0 37 013 2770 1962 ora l.k003-* point to data 02756 4 17 015 2773 1963 sta a.a003-*,* (=pdatp) store 02757 4 50 012 2771 1964 stx3 a.a001-*,* (=pbufp) save buffer addr too 1965 02760 3 76 001 0 1966 aos bf.tly,3 bump tally up one 02761 0 71 737 2720 1967 tra sca031-* 1968 02762 3 76 001 0 1969 sca033 aos bf.tly,3 02763 4 10 075 3060 1970 tsy iscnex-*,* now bump pointers, we made room 02764 1971 die 15 die if room not found 02765 0 71 733 2720 1972 tra sca031-* 1973 02766 000777 0 1974 l.k001 vfd 18/buftmk 02767 040000 0 1975 l.k002 vfd 18/bfflst 02770 2 00000 0 1976 l.k003 zero 0,b.0 for character addressing 02771 0 03624 1 1977 a.a001 ind pbufp 02772 0 03625 1 1978 a.a002 ind ptally 02773 0 03626 1 1979 a.a003 ind pdatp 02774 0 03347 1 1980 a.a004 ind sca260 end of binary card 00000044 assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 66 scanop subroutine processes both inscan and outscn block 02775 0 03353 1 1981 a.a005 ind sca300 02776 0 03403 1 1982 a.a006 ind scount 02777 0 03401 1 1983 a.a007 ind sccntf 03000 0 03372 1 1984 a.a008 ind scbcc 03001 0 03373 1 1985 a.a009 ind scbccf 03002 0 03566 1 1986 a.a010 ind scend 03003 1987 scasvn bss 1 03004 1988 scasva bss 1 1989 * 1990 * 1991 * 03005 1992 sca040 null start bcc computation 03005 1993 sca090 null start lrc computation 03005 0 76 366 3373 1994 aos scbccf-* turn flag on 03006 0 56 364 3372 1995 stz scbcc-* initialize block check char 03007 0 71 604 2613 1996 tra sca000-* all done 1997 * 03010 1998 scwrk1 bss 1 work area 1999 * 2000 * 2001 * 03011 2002 sca050 null find end of chain 03011 4 10 771 3002 2003 tsy a.a010-*,* (scend) 03012 0 71 341 3353 2004 tra sca300-* wasn't any chain 03013 0 71 600 2613 2005 tra sca000-* ok, get next byte 2006 * 2007 * 2008 * 03014 2009 sca060 null compare bcc 03014 2010 sca110 null compare lrc 03014 0 20 357 3373 2011 szn scbccf-* make sure we were doing it 03015 0 64 002 3017 2012 tnz 2 03016 2013 die 10 2014 * 03017 0 56 354 3373 2015 stz scbccf-* turn off flag 03020 4 10 025 3045 2016 tsy a.u002-*,* (=sgtchr) get next char 03021 0 71 332 3353 2017 tra sca300-* if any 2018 * 03022 0 27 350 3372 2019 cmpa scbcc-* is block check correct? 03023 0 64 330 3353 2020 tnz sca300-* no 03024 0 71 567 2613 2021 tra sca000-* yes 2022 * 2023 * 2024 * 03025 2025 sca070 null compare with mask 03025 4 10 017 3044 2026 tsy a.u001-*,* (=schkcc) get compare value 03026 2027 die 15 error in control string 03027 0 17 017 3046 2028 sta scwrk2-* save compare value 03030 4 10 014 3044 2029 tsy a.u001-*,* (=schkcc) get mask value 03031 2030 die 15 error in control string 03032 0 17 015 3047 2031 sta scwrk3-* save mask value assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 67 scanop subroutine processes both inscan and outscn block 03033 0 32 013 3046 2032 ansa scwrk2-* mask compare value 2033 * 03034 4 10 011 3045 2034 tsy a.u002-*,* (=sgtchr) get next char 03035 0 71 316 3353 2035 tra sca300-* if we can 03036 0 34 011 3047 2036 ana scwrk3-* apply the mask 03037 0 27 007 3046 2037 cmpa scwrk2-* match? 03040 0 64 313 3353 2038 tnz sca300-* no, fail 03041 0 71 552 2613 2039 tra sca000-* 2040 * 03042 2 00000 0 2041 l.u001 zero 0,b.0 end of binary card 00000045 03043 000077 0 2042 l.u002 oct 77 03044 0 03461 1 2043 a.u001 ind schkcc 03045 0 03447 1 2044 a.u002 ind sgtchr 2045 03046 2046 scwrk2 bss 1 work area 03047 2047 scwrk3 bss 1 03050 2048 scwrk4 bss 1 03051 0 03624 1 2049 ipbufp ind pbufp 03052 0 03377 1 2050 iscstr ind sccstr 03053 0 03541 1 2051 iscnxt ind sccnxt 03054 0 03376 1 2052 iscsx2 ind scsvx2 03055 0 03375 1 2053 isctyp ind scntyp 03056 0 03461 1 2054 ischkc ind schkcc 03057 0 03447 1 2055 isgtch ind sgtchr 03060 0 03500 1 2056 iscnex ind scnext 2057 * 2058 * 2059 * 03061 2060 sca080 null rescan - initialize pointers and flags 03061 0 10 343 3424 2061 tsy scinit-* call scan init subroutine 03062 0 71 531 2613 2062 tra sca000-* 2063 * 2064 * 2065 * 03063 2066 sca100 null insert lrc 2067 03063 0 20 310 3373 2068 szn scbccf-* were we doing bcc? 03064 0 64 002 3066 2069 tnz 2 ok 03065 2070 die 15 no, kill it 2071 03066 0 56 305 3373 2072 stz scbccf-* clear flag, used bcc value 03067 0 10 360 3447 2073 tsy sgtchr-* get addr of byte 03070 2074 die 15 error in control string 2075 03071 0 07 301 3372 2076 lda scbcc-* get bcc value 03072 3 17 200 0 2077 sta 0,3,b.0 put into msg 03073 0 71 520 2613 2078 tra sca000-* 2079 * 2080 * 2081 * assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 68 scanop subroutine processes both inscan and outscn block 03074 2082 sca120 null set last buffer in message flag 03074 4 41 675 2771 2083 ldx3 a.a001-*,* (=pbufp) get addr of current buffer 03075 0 07 270 3365 2084 lda l.s008-* (=bfflst) get last buffer in message flag 03076 3 72 001 0 2085 orsa bf.flg,3 turn it on 03077 0 71 514 2613 2086 tra sca000-* 2087 * 2088 * 2089 * 03100 2090 sca130 null replace current char 03100 0 10 347 3447 2091 tsy sgtchr-* get byte address of next char in chain 03101 0 71 252 3353 2092 tra sca300-* none 03102 0 10 357 3461 2093 tsy schkcc-* get replace value 03103 2094 die 15 error in control string 03104 3 17 200 0 2095 sta 0,3,b.0 replace current char 03105 0 71 506 2613 2096 tra sca000-* 2097 * 2098 * 2099 * 03106 2100 sca140 null compare with list 03106 0 10 341 3447 2101 tsy sgtchr-* get next char in chain 03107 0 71 244 3353 2102 tra sca300-* none - failure 03110 0 17 737 3047 2103 sta scwrk3-* save for compare 03111 4 10 260 3371 2104 sca144 tsy a.s003-*,* (=sccnxt) get value from control string 03112 0 71 241 3353 2105 tra sca300-* end of control string - failure end of binary card 00000046 03113 0 71 240 3353 2106 tra sca300-* 5xx - failure 03114 4 10 254 3370 2107 tsy a.s002-*,* (=adbyte) check for 46x 03115 0 71 002 3117 2108 tra sca148-* not 46x 03116 3 07 200 0 2109 lda 0,3,b.0 get tib byte value 03117 0 27 730 3047 2110 sca148 cmpa scwrk3-* match? 03120 0 74 002 3122 2111 tze sca146-* yes 03121 0 71 770 3111 2112 tra sca144-* keep looking 03122 4 10 247 3371 2113 sca146 tsy a.s003-*,* (=sccnxt) just pass by values 03123 0 71 224 3347 2114 tra sca260-* end of control string 03124 0 71 473 2617 2115 tra sca004-* 5xx 03125 0 71 775 3122 2116 tra sca146-* 2117 * 2118 * 2119 * 03126 2120 sca150 null move byte 03126 4 10 243 3371 2121 tsy a.s003-*,* (=sccnxt) get 46x value 03127 0 71 001 3130 2122 tra 1 03130 2123 sca152 die 15 error - must be 46x 03131 4 10 237 3370 2124 tsy a.s002-*,* (=adbyte) get byte address 03132 0 71 776 3130 2125 tra sca152-* not 46x 03133 0 50 713 3046 2126 stx3 scwrk2-* save byte address 03134 673 777 0 2127 ila -1 03135 0 17 712 3047 2128 sca154 sta scwrk3-* prime mask area 03136 0 10 311 3447 2129 tsy sgtchr-* get next char and address 03137 0 71 214 3353 2130 tra sca300-* none 03140 0 34 707 3047 2131 ana scwrk3-* mask char assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 69 scanop subroutine processes both inscan and outscn block 03141 0 41 705 3046 2132 ldx3 scwrk2-* get byte address 03142 3 17 200 0 2133 sta 0,3,b.0 place in tib 03143 0 71 450 2613 2134 tra sca000-* 2135 * 2136 * 2137 * 03144 2138 sca160 null move byte with mask 03144 0 10 375 3541 2139 tsy sccnxt-* get 46x value 03145 0 71 001 3146 2140 tra 1 03146 2141 sca162 die 15 error - must be 46x 03147 4 10 221 3370 2142 tsy a.s002-*,* (=adbyte) get byte address 03150 0 71 776 3146 2143 tra sca162-* not 46x 03151 0 50 675 3046 2144 stx3 scwrk2-* save byte address 03152 0 10 307 3461 2145 tsy schkcc-* get mask value 03153 0 71 773 3146 2146 tra sca162-* error - in control string 03154 0 71 761 3135 2147 tra sca154-* same as move byte 2148 * 2149 * 2150 * 03155 2151 sca170 null count chars 03155 0 10 364 3541 2152 tsy sccnxt-* get 46x value 03156 0 71 001 3157 2153 tra 1 03157 2154 sca172 die 15 error - must be 46x 03160 4 10 210 3370 2155 tsy a.s002-*,* (=adbyte) get byte address 03161 0 71 776 3157 2156 tra sca172-* not 46x end of binary card 00000047 03162 0 50 216 3400 2157 stx3 sccnta-* save byte address for count accumulation 03163 3 56 200 0 2158 stz 0,3,b.0 zero count in tib 03164 0 76 215 3401 2159 aos sccntf-* set count flag 03165 0 71 426 2613 2160 tra sca000-* 2161 * 2162 * 2163 * 03166 2164 sca180 null search for match on either of two values 03166 0 10 273 3461 2165 tsy schkcc-* get first search value 03167 2166 die 15 error in control string 03170 0 17 657 3047 2167 sta scwrk3-* save for compare 03171 0 10 270 3461 2168 tsy schkcc-* get second search value 03172 2169 die 15 03173 0 17 655 3050 2170 sta scwrk4-* 03174 0 10 253 3447 2171 tsy sgtchr-* get char, w/o bumping ptr 03175 0 71 156 3353 2172 tra sca300-* fail if none 03176 2173 sca182 null 03176 0 20 175 3373 2174 szn scbccf-* are we in process of block check 03177 0 74 002 3201 2175 tze 2 03200 0 62 172 3372 2176 ersa scbcc-* yes, do it 03201 0 27 646 3047 2177 cmpa scwrk3-* check vs first value 03202 0 74 411 2613 2178 tze sca000-* got it 03203 0 27 645 3050 2179 cmpa scwrk4-* check vs second value 03204 0 74 407 2613 2180 tze sca000-* got it 03205 0 20 174 3401 2181 szn sccntf-* are we in process of char count assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 70 scanop subroutine processes both inscan and outscn block 03206 0 74 002 3210 2182 tze 2 03207 0 10 174 3403 2183 tsy scount-* go ahead and count this char 03210 4 10 650 3060 2184 tsy iscnex-*,* no match, bump ptr 03211 0 71 142 3353 2185 tra sca300-* fail, no more chars 03212 0 71 764 3176 2186 tra sca182-* else, go look at char 2187 * 2188 * 2189 * 03213 2190 sca190 null turn on bits in char 03213 0 10 246 3461 2191 tsy schkcc-* get bit pattern 03214 2192 die 15 error - in control string 03215 0 17 631 3046 2193 sta scwrk2-* save 03216 0 10 231 3447 2194 tsy sgtchr-* get next char address 03217 0 71 134 3353 2195 tra sca300-* no next char 03220 0 07 626 3046 2196 lda scwrk2-* get bit pattern 03221 3 72 200 0 2197 orsa 0,3,b.0 turn on bits 03222 4 71 145 3367 2198 tra a.s001-*,* (=sca000) done 2199 * 2200 * 2201 * 03223 2202 sca200 null turn off bits in char 03223 0 10 236 3461 2203 tsy schkcc-* get bit pattern 03224 2204 die 15 error in control string 03225 0 17 621 3046 2205 sta scwrk2-* save 03226 0 10 221 3447 2206 tsy sgtchr-* get next char address 03227 0 71 124 3353 2207 tra sca300-* no next char 03230 0 07 616 3046 2208 lda scwrk2-* get bit pattern end of binary card 00000048 03231 3 72 200 0 2209 orsa 0,3,b.0 turn bits on 03232 3 62 200 0 2210 ersa 0,3,b.0 now really turn them off 03233 4 71 134 3367 2211 tra a.s001-*,* (=sca000) 2212 * 2213 * 2214 * 03234 0 10 225 3461 2215 sca210 tsy schkcc-* get char from control string 03235 2216 die 15 error in control string 03236 0 17 612 3050 2217 sta scwrk4-* save for compare 03237 0 56 053 3312 2218 stz sca216-* reset flag 2219 03240 0 41 364 3624 2220 sca215 ldx3 pbufp-* get ptr to head of list 03241 0 56 141 3402 2221 stz sccbuf-* zero prev buf ptr 03242 3 07 001 0 2222 sca211 lda bf.flg,3 get flag bits 03243 0 31 122 3365 2223 cana l.s008-* (=bfflst) last buffer in msg? 03244 0 64 006 3252 2224 tnz sca212-* yes, use this buffer 2225 03245 3 20 000 0 2226 szn bf.nxt,3 more in chain? 03246 0 74 004 3252 2227 tze sca212-* no, use this one 2228 03247 0 50 133 3402 2229 stx3 sccbuf-* save ptr to this buffer 03250 3 41 000 0 2230 ldx3 bf.nxt,3 bump to next 03251 0 71 771 3242 2231 tra sca211-* assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 71 scanop subroutine processes both inscan and outscn block 2232 03252 0 50 352 3624 2233 sca212 stx3 pbufp-* remember where we are 03253 3333 00 0 2234 cx3a copy to a 03254 773 002 0 2235 iaa bf.dta point at data 03255 0 37 102 3357 2236 ora l.s002-* with char addressing 03256 0 17 350 3626 2237 sta pdatp-* save 2238 03257 3 07 001 0 2239 lda bf.tly,3 get tally in buffer 03260 0 34 076 3356 2240 ana l.s001-* (=buftmk) only tally 03261 422 002 0 2241 icmpa 2 at least two chars in this buffer? 03262 0 75 020 3302 2242 tmi sca214-* no, must use prev buffer 2243 03263 773 776 0 2244 iaa -2 backup to look at term char 03264 2335 01 0 2245 lrl 1 divide by two (save bit) 03265 0 16 341 3626 2246 asa pdatp-* add into ptr 03266 0 41 340 3626 2247 ldx3 pdatp-* get it 2248 03267 0334 01 0 2249 lls 1 get bit back 03270 222 001 0 2250 icana 1 on? 03271 0 74 003 3274 2251 tze sca213-* ok as is 2252 03272 373 300 0 2253 iacx3 0,b.1 bump ptr to odd char 03273 0 50 333 3626 2254 stx3 pdatp-* save ptr always 03274 0 20 016 3312 2255 sca213 szn sca216-* check flag 03275 0 64 035 3332 2256 tnz sca224-* move 2 chars 03276 3 07 200 0 2257 lda 0,3,b.0 get the supposed term char 03277 0 27 551 3050 2258 cmpa scwrk4-* is this it? end of binary card 00000049 03300 4 74 067 3367 2259 tze a.s001-*,* (=sca000) yes, we got it... 2260 03301 0 71 052 3353 2261 tra sca300-* fail 2262 2263 since we know bcc was in last buffer, etx must be 2264 last char in this buffer. 2265 03302 0 07 100 3402 2266 sca214 lda sccbuf-* get ptr to next-to-last buffer 03303 0 74 050 3353 2267 tze sca300-* fail - not two chars in message 03304 773 037 0 2268 iaa bufsiz-1 point to last word 03305 0 06 061 3366 2269 ada l.s009-* (=0,b.1) and last char 03306 4333 00 0 2270 cax3 copy to index reg 03307 0 20 003 3312 2271 szn sca216-* check flag 03310 0 64 027 3337 2272 tnz sca226-* move 2 chars 03311 0 71 763 3274 2273 tra sca213-* make the test 2274 * 03312 2275 sca216 bss 1 flag for move last two chars to tib 2276 * 2277 * 2278 * 03313 2279 sca220 null move last two chars to tib extension 03313 0 56 777 3312 2280 stz sca216-* reset flag 03314 0 10 225 3541 2281 tsy sccnxt-* get 46x value assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 72 scanop subroutine processes both inscan and outscn block 03315 0 71 001 3316 2282 tra 1 not 46x 03316 2283 sca222 die 15 error in control string 03317 0 10 310 3627 2284 tsy adbyte-* get byte address 03320 0 71 776 3316 2285 tra sca222-* not 46x 03321 0 50 526 3047 2286 stx3 scwrk3-* save first char addr 03322 0 10 217 3541 2287 tsy sccnxt-* get second 46x value 03323 0 71 773 3316 2288 tra sca222-* not 46x 03324 0 71 772 3316 2289 tra sca222-* not 46x 03325 0 10 302 3627 2290 tsy adbyte-* get byte addr 03326 0 71 770 3316 2291 tra sca222-* not 46x 03327 0 50 521 3050 2292 stx3 scwrk4-* save second char addr 03330 0 76 762 3312 2293 aos sca216-* set flag 03331 0 71 707 3240 2294 tra sca215-* do search for last chars 03332 2295 sca224 null return from search 03332 3 07 200 0 2296 lda 0,3,b.0 get second to last char 03333 373 300 0 2297 iacx3 0,b.1 bump to next char 03334 0 50 272 3626 2298 stx3 pdatp-* always save current ptr 03335 3 47 200 0 2299 ldq 0,3,b.0 get last char 03336 0 71 004 3342 2300 tra sca227-* store into tib ext 03337 2301 sca226 null return - last two chars split between buffers 03337 3 07 200 0 2302 lda 0,3,b.0 get second to last char 03340 0 41 266 3626 2303 ldx3 pdatp-* get data ptr - last buffer 03341 3 47 200 0 2304 ldq 0,3,b.0 get last char 03342 2305 sca227 null store two chars into tib ext 03342 0 41 505 3047 2306 ldx3 scwrk3-* place to store next to last 03343 3 17 200 0 2307 sta 0,3,b.0 into tib ext 03344 0 41 504 3050 2308 ldx3 scwrk4-* and last char 03345 3 57 200 0 2309 stq 0,3,b.0 into tib ext, too end of binary card 00000050 03346 4 71 021 3367 2310 tra a.s001-*,* (=sca000)done 2311 * 2312 * 2313 * 03347 2314 sca260 null scan was a success 03347 0 03 027 3376 2315 ldx2 scsvx2-* get scan block address 03350 273 003 0 2316 iacx2 3 go to next block 03351 2317 scabak null 03351 2318 return scanop 2319 * 2320 * 2321 * 03353 2322 sca300 null general scan failure 03353 0 03 023 3376 2323 ldx2 scsvx2-* get scan block address 03354 2 03 002 0 2324 ldx2 2,2 get branch point 03355 0 71 774 3351 2325 tra scabak-* 2326 * 2327 * 03356 000777 0 2328 l.s001 vfd 18/buftmk buffer tally mask 03357 2 00000 0 2329 l.s002 zero 0,b.0 for char addressing 03360 077777 0 2330 l.s003 oct 77777 for word addressing 03361 000077 0 2331 l.s004 oct 77 mask for 5xx values assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 73 scanop subroutine processes both inscan and outscn block 03362 000777 0 2332 l.s005 oct 777 end of control string designator 03363 000700 0 2333 l.s006 oct 700 5xx mask 03364 000500 0 2334 l.s007 oct 500 test value 03365 040000 0 2335 l.s008 vfd 18/bfflst last buffer in message flag 03366 3 00000 0 2336 l.s009 ind 0,b.1 03367 0 02613 1 2337 a.s001 ind sca000 03370 0 03627 1 2338 a.s002 ind adbyte 03371 0 03541 1 2339 a.s003 ind sccnxt 2340 03372 2341 scbcc bss 1 cumulative block check char 03373 2342 scbccf bss 1 block check in progress flag 03374 2343 tmask bss 1 place to save masked char. 03375 2344 scntyp bss 1 input or output scan indicator 2345 =0, input scan 2346 =1, output scan 03376 2347 scsvx2 bss 1 save area for scan block address 03377 2348 sccstr bss 1 control string byte address 03400 2349 sccnta bss 1 byte address - char count accumulation 03401 2350 sccntf bss 1 char count in progress flag 03402 2351 sccbuf bss 1 ptr to next-to-last buffer assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 74 utilities for scan 2352 ttls utilities for scan 2353 * 2354 * scount increments tib extension byte designated by count scan subop 2355 * max accumulated count = 511 2356 * 03403 2357 scount subr sco,(a,x3) 03414 0 41 764 3400 2358 ldx3 sccnta-* get accumulation byte address 03415 3 07 200 0 2359 lda 0,3,b.0 get accumulation byte 03416 773 001 0 2360 iaa 1 increment it 03417 0 34 743 3362 2361 ana l.s005-* =o777 03420 0 74 002 3422 2362 tze 2 overflow 03421 3 17 200 0 2363 sta 0,3,b.0 place it back in tib 03422 2364 return scount 2365 * 2366 * scinit subroutine initializes scan pointers 2367 * 03424 2368 scinit subr sci end of binary card 00000051 03427 1 07 005 0 2369 lda t.icp,1 get input chain pointer 03430 0 20 745 3375 2370 szn scntyp-* check scan type - input or output 03431 0 74 002 3433 2371 tze sci010-* input 03432 1 07 012 0 2372 lda t.ocp,1 get output chain pointer 03433 2373 sci010 null 03433 0 17 171 3624 2374 sta pbufp-* 03434 0 20 170 3624 2375 szn pbufp-* 03435 0 74 006 3443 2376 tze scibak-* no chain, forget it 03436 0 56 167 3625 2377 stz ptally-* zero out scan tallies 03437 0 76 166 3625 2378 aos ptally-* pointing at char now 03440 773 002 0 2379 iaa bf.dta point to data 03441 0 37 716 3357 2380 ora l.s002-* 0,b.0 03442 0 17 164 3626 2381 sta pdatp-* save data pointers 03443 2382 scibak null 03443 0 56 730 3373 2383 stz scbccf-* zero block check flag 03444 0 56 735 3401 2384 stz sccntf-* zero char count in progress flag 03445 2385 return scinit 2386 * 2387 * sgtchr uses pointers to find current char and return it in a 2388 * it does not advance the pointers 2389 * output - return1 = no more chars 2390 * return2 = current char in a 2391 * 03447 2392 sgtchr subr sgt 03452 0 20 152 3624 2393 szn pbufp-* check buffer pointer 03453 0 74 004 3457 2394 tze sgtbak-* none exists 2395 03454 0 41 152 3626 2396 ldx3 pdatp-* 03455 3 07 200 0 2397 lda 0,3,b.0 03456 0 76 771 3447 2398 aos sgtchr-* did it 2399 03457 2400 sgtbak return sgtchr 2401 * assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 75 utilities for scan 2402 * schkcc gets next byte from control string and checks for 777,5xx values 2403 * if byte = 46x then its tib value is returned in a 2404 * output - return1 = byte in a = 777 or 5xx 2405 * return2 = byte in a 2406 * 03461 2407 schkcc subr sch,(x3) 03467 0 10 052 3541 2408 tsy sccnxt-* get control string byte 03470 0 71 006 3476 2409 tra schbak-* 777 03471 0 71 005 3476 2410 tra schbak-* 5xx end of binary card 00000052 03472 0 10 135 3627 2411 tsy adbyte-* check for 46x 03473 0 71 002 3475 2412 tra sch020-* not 46x 03474 3 07 200 0 2413 lda 0,3,b.0 get byte value 03475 0 76 764 3461 2414 sch020 aos schkcc-* return2 03476 2415 schbak null 03476 2416 return schkcc 2417 * 2418 * scnext bumps character pointers 2419 * returns to location after call if no more chars, 2420 * otherwise puts char in a and returns two locations past call 2421 * 03500 2422 scnext subr scn,(x3) 2423 * 03506 0 41 116 3624 2424 ldx3 pbufp-* any buffer at all? 03507 0 74 030 3537 2425 tze scnbak-* no, done 2426 03510 3 07 001 0 2427 lda bf.tly,3 get the buffer tally 03511 0 34 645 3356 2428 ana l.s001-* (=buftmk) only tally 03512 0 27 113 3625 2429 cmpa ptally-* any chars left to look at? 03513 0 75 002 3515 2430 tmi 2 no, over the limit now 03514 0 64 015 3531 2431 tnz scn020-* yes, process 2432 03515 3 07 001 0 2433 lda bf.flg,3 get flag bits 03516 0 31 647 3365 2434 cana l.s008-* (=bfflst) last buffer in msg? 03517 0 64 020 3537 2435 tnz scnbak-* yes, done 2436 03520 3 07 000 0 2437 lda bf.nxt,3 get fwd ptr 03521 0 74 016 3537 2438 tze scnbak-* none, give up 2439 03522 0 17 102 3624 2440 sta pbufp-* new buffer 03523 773 002 0 2441 iaa bf.dta nake ptr to data 03524 0 37 633 3357 2442 ora l.s002-* add in char addressing 03525 0 17 101 3626 2443 sta pdatp-* save ptr 03526 0 56 077 3625 2444 stz ptally-* 03527 4333 00 0 2445 cax3 copy ptr to x3 03530 0 71 004 3534 2446 tra scn030-* finish up 2447 03531 0 41 075 3626 2448 scn020 ldx3 pdatp-* load ptr to char 03532 373 300 0 2449 iacx3 0,b.1 bump it 03533 0 50 073 3626 2450 stx3 pdatp-* save 03534 0 76 071 3625 2451 scn030 aos ptally-* bump tally assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 76 utilities for scan 03535 3 07 200 0 2452 lda 0,3,b.0 load char 2453 03536 0 76 742 3500 2454 aos scnext-* indicate good bump 03537 2455 scnbak return scnext end of binary card 00000053 2456 * 2457 * sccnxt places next byte from scan control string into a 2458 * output - return1 = end of control string - byte in a = 777 2459 * return2 = byte in a = 5xx 2460 * return3 = byte in a = xxx 2461 * 03541 2462 sccnxt subr scc,(x2) 03547 0 03 630 3377 2463 ldx2 sccstr-* get control string byte address 03550 2 07 200 0 2464 lda 0,2,b.0 get control string byte 03551 0 27 611 3362 2465 cmpa l.s005-* =o777 03552 0 74 012 3564 2466 tze sccbak-* end of control string 03553 273 300 0 2467 iacx2 0,b.1 advance to next byte 03554 0 13 623 3377 2468 stx2 sccstr-* save 03555 6333 00 0 2469 caq 03556 0 34 605 3363 2470 ana l.s006-* =o700 03557 0 27 605 3364 2471 cmpa l.s007-* =o500 - scan subop designator 03560 0 74 002 3562 2472 tze scc010-* 03561 0 76 760 3541 2473 aos sccnxt-* return 3 03562 0 76 757 3541 2474 scc010 aos sccnxt-* return 2 03563 7333 00 0 2475 cqa retrieve control string byte 03564 2476 sccbak return sccnxt 2477 * 2478 * 2479 * scend implements the end-of-chain subop, setting 2480 * the pointers to the last character in the chain 2481 * output - return1 = no chain 2482 * return2 = found it 2483 * 03566 2484 scend subr sce 03571 0 41 033 3624 2485 ldx3 pbufp-* get buffer pointer 03572 0 74 027 3621 2486 tze scebak-* fail if no chain 03573 3 07 001 0 2487 sce010 lda bf.flg,3 see if this is last one 03574 0 31 102 3676 2488 cana l.t006-* bfflst 03575 0 64 005 3602 2489 tnz sce020-* yes it is 03576 3 20 000 0 2490 szn bf.nxt,3 not marked as such, is there another? 03577 0 74 003 3602 2491 tze sce020-* no, use this one 03600 3 41 000 0 2492 ldx3 bf.nxt,3 yes, on to next 03601 0 71 772 3573 2493 tra sce010-* 03602 2494 sce020 null 03602 0 50 022 3624 2495 stx3 pbufp-* this is current one now 03603 3 07 001 0 2496 lda bf.tly,3 get tally 03604 0 34 073 3677 2497 ana l.t007-* buftmk 03605 0 17 020 3625 2498 sta ptally-* 2499 end of binary card 00000054 03606 773 777 0 2500 iaa -1 less one for last char assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 77 utilities for scan 03607 2335 01 0 2501 lrl 1 divide by two to get word offset 03610 0 06 014 3624 2502 ada pbufp-* make a pointer out of it 03611 0 06 067 3700 2503 ada l.t008-* bf.dta,b.0 03612 4333 00 0 2504 cax3 put into x3 for now 03613 0334 01 0 2505 lls 1 get low order bit back 03614 222 001 0 2506 icana 1 is low order bit on? 03615 0 74 002 3617 2507 tze 2 nope, ok 03616 373 300 0 2508 iacx3 0,b.1 bump by one char 03617 0 50 007 3626 2509 stx3 pdatp-* 03620 0 76 746 3566 2510 aos scend-* bump return pointer 03621 2511 scebak return scend 2512 * 2513 * 2514 * 03623 233100 0 03624 2515 even 2516 permanent scan pointers 03624 2517 pbufp bss 1 03625 2518 ptally bss 1 03626 2519 pdatp bss 1 2520 * 2521 * subroutine to form an address in q of a byte in tib extension 2522 * input - a = char value from scan control string 2523 * output - return1 = char value not 46x 2524 * return2 = x3 contains byte address 2525 * 03627 2526 adbyte subr adb,(a) 03635 6333 00 0 2527 caq save input value 03636 0 34 033 3671 2528 ana l.t001-* =o760 - check for 46x 03637 0 27 033 3672 2529 cmpa l.t002-* =o460 03640 0 74 002 3642 2530 tze adb010-* ok - form byte address 03641 0 71 025 3666 2531 tra adbbak-* input not 46x 03642 1 41 011 0 2532 adb010 ldx3 t.elnk,1 get tib extension address 03643 0 64 002 3645 2533 tnz 2 one exists 03644 2534 adb020 die 14 03645 3 07 000 0 2535 lda 0,3 get length 03646 0336 01 0 2536 als 1 times 2 = char count 03647 0 17 021 3670 2537 sta adb100-* 03650 7333 00 0 2538 cqa 03651 0 34 023 3674 2539 ana l.t004-* =o17 - isolate byte designator 03652 0 27 016 3670 2540 cmpa adb100-* vs max + 1 byte position 03653 0 75 002 3655 2541 tmi 2 ok - within range 03654 0 71 770 3644 2542 tra adb020-* end of binary card 00000055 03655 6333 00 0 2543 caq 03656 3333 00 0 2544 cx3a 03657 0 37 016 3675 2545 ora l.t005-* =0,b.1 - make into byte address 03660 4333 00 0 2546 cax3 03661 373 300 0 2547 adb030 iacx3 0,b.1 advance address - one byte 03662 573 777 0 2548 iaq -1 decrement byte position 03663 0 75 002 3665 2549 tmi adb040-* all done assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 78 utilities for scan 03664 0 71 775 3661 2550 tra adb030-* 03665 2551 adb040 null 03665 0 76 742 3627 2552 aos adbyte-* advance return point 03666 2553 adbbak return adbyte 03670 2554 adb100 bss 1 work area 2555 2556 03671 000760 0 2557 l.t001 oct 760 mask 03672 000460 0 2558 l.t002 oct 460 byte position designator 03673 000077 0 2559 l.t003 oct 77 sub-buffer tally mask 03674 000017 0 2560 l.t004 oct 17 byte position mask 03675 3 00000 0 2561 l.t005 zero 0,b.1 address advance value 03676 040000 0 2562 l.t006 vfd 18/bfflst 03677 000777 0 2563 l.t007 vfd 18/buftmk 03700 2 00002 0 2564 l.t008 zero bf.dta,b.0 03701 2 00000 0 2565 l.t009 zero 0,b.0 03702 000514 0 2566 l.t010 oct 514 seteom 2567 * 2568 * utility to build a message 2569 * 03703 2570 bldutl subr bld 03706 473 040 0 2571 ilq bufsiz 03707 4 10 061 3770 2572 tsy a.m003-*,* (=getbuf) get a bufsiz buffer 03710 0 71 044 3754 2573 tra bldret-* no buffers available 03711 0 50 052 3763 2574 stx3 bld092-* save address 2575 03712 3333 00 0 2576 cx3a 03713 0 06 765 3700 2577 ada l.t008-* (=bf.dta,b.0) point to data 03714 0 17 050 3764 2578 sta bld096-* save 2579 03715 2 07 001 0 2580 lda 1,2 get control string address 03716 0 37 763 3701 2581 ora l.t009-* (=0,b.0) 03717 4 17 047 3766 2582 sta a.m001-*,* (=sccstr) save for sccnxt subroutine 2583 03720 673 704 0 2584 ila -bufnch max number chars in buffer 03721 0 17 044 3765 2585 sta bld098-* save for count down 03722 0 56 040 3762 2586 stz bld090-* zero tally count end of binary card 00000056 03723 4 10 044 3767 2587 bld010 tsy a.m002-*,* (=sccnxt) get next byte from control string 03724 0 71 023 3747 2588 tra bld040-* end of control string 03725 0 71 014 3741 2589 tra bld030-* control byte = 5xx 03726 0 10 701 3627 2590 tsy adbyte-* literal or tib byte? 03727 0 71 002 3731 2591 tra bld020-* must be a literal, store it 03730 3 07 200 0 2592 lda 0,3,b.0 get the char from the tib 03731 0 41 033 3764 2593 bld020 ldx3 bld096-* get ptr to data in buffer 03732 3 17 200 0 2594 sta 0,3,b.0 store char in buffer 03733 373 300 0 2595 iacx3 0,b.1 bump ptr 03734 0 50 030 3764 2596 stx3 bld096-* 2597 03735 0 76 025 3762 2598 aos bld090-* bump tally 03736 0 76 027 3765 2599 aos bld098-* decrement max tally assm 01 12-10-82 15.892 intp -- control table interpreter for mcs/fnp page 79 utilities for scan 03737 0 74 017 3756 2600 tze bld050-* control string too long 03740 0 71 763 3723 2601 tra bld010-* ok, get next byte 2602 03741 0 27 741 3702 2603 bld030 cmpa l.t010-* (=o514) - check for seteom 03742 0 64 014 3756 2604 tnz bld050-* error - not seteom 2605 03743 0 41 020 3763 2606 ldx3 bld092-* get buffer address 03744 0 07 732 3676 2607 lda l.t006-* (=bfflst) get last buffer in message flag 03745 3 72 001 0 2608 orsa bf.flg,3 set on in buffer 03746 0 71 755 3723 2609 tra bld010-* 2610 03747 0 41 014 3763 2611 bld040 ldx3 bld092-* get buffer address 03750 0 07 012 3762 2612 lda bld090-* get tally count 03751 0 74 005 3756 2613 tze bld050-* no chars placed in buffer 03752 3 72 001 0 2614 orsa bf.tly,3 place tally in buffer 03753 0 76 730 3703 2615 aos bldutl-* successful return 03754 2616 bldret return bldutl 2617 03756 0 41 005 3763 2618 bld050 ldx3 bld092-* get buffer address 03757 473 000 0 2619 ilq 0 03760 4 10 011 3771 2620 tsy a.m004-*,* (=frebuf) return buffer - error or not used 03761 0 71 773 3754 2621 tra bldret-* 2622 03762 2623 bld090 bss 1 tally count 03763 2624 bld092 bss 1 save area - buffer address 03764 2625 bld096 bss 1 save area - data pointer 03765 2626 bld098 bss 1 max tally count 2627 03766 0 03377 1 2628 a.m001 ind sccstr 03767 0 03541 1 2629 a.m002 ind sccnxt 03770 0 17000 3 2630 a.m003 ind getbuf 03771 0 14000 3 2631 a.m004 ind frebuf 2632 * 03772 2633 intend null end of binary card 00000057 2634 end 3772 is the next available location. 355map version/assembly dates gmpa 770711/071177 gmpb 770711/071177 gmpc 770711/071177 there were no warning flags in the above assembly assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 80 octal symbol references by sequence no. 112 accin 61 61 563 3642 adb010 2532 2530 2532 3644 adb020 2534 2534 2542 3661 adb030 2547 2547 2550 3665 adb040 2551 2549 2551 3670 adb100 2554 2537 2540 2554 3666 adbbak 2553 2531 2553 3627 adbyte 2526 29 705 1469 2284 2290 2338 2411 2526 2552 2553 2590 2253 addnov 1570 635 1020 1563 1570 1586 2771 a.a001 1977 1935 1964 1977 2083 2772 a.a002 1978 1959 1978 2773 a.a003 1979 1963 1979 2774 a.a004 1980 1839 1980 2775 a.a005 1981 1887 1890 1901 1912 1921 1933 1950 1981 2776 a.a006 1982 1910 1929 1982 2777 a.a007 1983 1908 1927 1983 3000 a.a008 1984 1905 1922 1984 3001 a.a009 1985 1903 1918 1985 3002 a.a010 1986 1986 2003 336 a.c001 254 194 254 337 a.c002 255 104 125 150 255 1003 a.d001 635 618 635 1004 a.d002 636 636 664 1005 a.d003 637 637 682 1006 a.d004 638 600 638 1417 a.g001 1010 894 985 1010 1420 a.g002 1011 895 986 1011 1421 a.g003 1012 933 936 1002 1012 1050 1065 1127 1141 1144 1153 1166 1190 1201 1212 1222 1224 1233 1243 1254 1256 1268 1300 1302 1333 1335 1349 1362 1364 1422 a.g004 1013 1013 1072 1423 a.g005 1014 1014 1059 1424 a.g006 1015 944 1015 1085 1425 a.g007 1016 947 1016 1426 a.g008 1017 949 960 1017 1430 a.g010 1019 974 993 1019 1431 a.g011 1020 1020 1209 1432 a.g012 1021 1021 1151 1433 a.g013 1022 1022 1183 1434 a.g014 1023 1023 1164 2235 a.h001 1554 1537 1554 2236 a.h002 1555 1307 1555 2237 a.h003 1556 1308 1556 2240 a.h004 1557 1311 1557 2241 a.h005 1558 1316 1558 2242 a.h006 1559 1346 1559 2243 a.h007 1560 1375 1560 2244 a.h008 1561 1384 1561 2245 a.h009 1562 1370 1400 1457 1461 1478 1486 1493 1495 1515 1529 1562 2246 a.h010 1563 1483 1563 2247 a.h011 1564 1498 1564 2250 a.h012 1565 1502 1565 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 81 octal symbol references by sequence no. 2251 a.h013 1566 1506 1566 2252 a.h014 1567 1527 1567 2567 a.i001 1812 1793 1812 1949 3766 a.m001 2628 2582 2628 3767 a.m002 2629 2587 2629 3770 a.m003 2630 2572 2630 3771 a.m004 2631 2620 2631 3367 a.s001 2337 2198 2211 2259 2310 2337 3370 a.s002 2338 2107 2124 2142 2155 2338 3371 a.s003 2339 2104 2113 2121 2339 3044 a.u001 2043 2026 2029 2043 3045 a.u002 2044 2016 2034 2044 2277 annovp 1585 1582 1585 2300 anoret 1586 1580 1584 1586 2260 anosi 1570 1570 1572 2303 anosva 1588 1571 1577 1588 2302 anotmp 1587 1574 1575 1576 1578 1587 20000 bffbrk 40 40 1030 1000 bffhld 40 40 645 845 40000 bfflst 40 40 644 844 1975 2335 2562 4000 bffrpy 40 40 1028 2 bf.dta 40 40 1031 1081 1814 1961 2235 2379 2441 2564 1 bf.flg 40 40 476 483 836 837 998 1173 1941 1945 1956 2085 2222 2433 2487 2608 0 bf.nxt 40 40 481 485 486 720 735 840 977 1122 1176 1952 2226 2230 2437 2490 2492 1 bf.siz 40 40 1178 1 bf.tly 40 40 558 880 966 1119 1782 1936 1966 1969 2239 2427 2496 2614 2 b.0 768 770 783 789 901 946 1026 1031 1090 1094 1095 1111 1421 1431 1438 1444 1447 1471 1548 1627 1641 1680 1715 1778 1814 1976 2041 2077 2095 2109 2133 2158 2197 2209 2210 2257 2296 2299 2302 2304 2307 2309 2329 2359 2363 2397 2413 2452 2464 2564 2565 2592 2594 3 b.1 948 1086 1091 1096 1112 1452 1625 1640 1650 1760 1779 2253 2297 2336 2449 2467 2508 2547 2561 2595 3723 bld010 2587 2587 2601 2609 3731 bld020 2593 2591 2593 3741 bld030 2603 2589 2603 3747 bld040 2611 2588 2611 3756 bld050 2618 2600 2604 2613 2618 3762 bld090 2623 2586 2598 2612 2623 3763 bld092 2624 2574 2606 2611 2618 2624 3764 bld096 2625 2578 2593 2596 2625 3765 bld098 2626 2585 2599 2626 3754 bldret 2616 2573 2616 2621 3703 bldutl 2570 704 2570 2615 2616 13 brkhit 51 1555 307 brkopc 226 215 218 226 268 270 271 2602 bschar 1827 1018 1749 1827 74 bufnch 40 40 1796 1938 2584 40 bufsiz 40 40 1071 1792 1948 2268 2571 2 bufthr 40 40 521 777 buftmk 40 40 639 1025 1974 2328 2563 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 82 octal symbol references by sequence no. 2560 cge010 1803 1800 1803 2541 cgetbf 1785 1706 1776 1785 1809 2572 citly 1818 1702 1761 1818 2576 clast 1822 1765 1781 1803 1804 1822 2577 clchar 1823 1713 1764 1823 2434 cop010 1713 1705 1713 2435 cop030 1715 1711 1715 1762 2446 cop040 1725 1725 1727 2452 cop050 1731 1720 1731 2455 cop060 1734 1734 1736 2465 cop070 1744 1717 1744 2476 cop080 1753 1750 1753 2504 cop090 1760 1729 1742 1747 1756 1760 2414 copybf 1689 1019 1689 1766 2573 cotly 1819 1774 1780 1797 1819 2532 cpc010 1778 1775 1778 2513 cpchar 1768 1721 1725 1734 1744 1768 1783 2574 cpos 1820 1708 1732 1739 1748 1754 1820 15 cr 65 65 904 2575 ctab 1821 1710 1731 1738 1741 1755 1758 1821 1 ct.dev 87 87 601 1538 1 ctrl 42 638 1554 1705 cvaddr 1277 28 1197 1206 1217 1229 1238 1248 1261 1264 1277 1288 1320 1341 1354 1357 1382 1398 1415 1441 1722 cvaret 1288 1280 1288 2311 dcw010 1602 1602 1618 1658 2324 dcw020 1614 1609 1614 2327 dcw030 1620 1611 1620 2332 dcw040 1624 1624 1631 1634 1636 2333 dcw050 1626 1626 1651 2354 dcw060 1646 1639 1646 2361 dcw070 1653 1629 1643 1653 2366 dcw080 1660 1606 1660 2400 dcw090 1671 1668 1671 2401 dcwbak 1674 1670 1674 2304 dcwcnt 1591 408 1591 1674 2601 delchr 1826 1017 1722 1826 2 denq 44 542 1393 1559 37 dnshft 67 67 908 10 dt.brk 39 39 604 5 dt.cmt 39 39 1543 14 frebuf 49 1022 2631 15 frelbf 43 534 651 1014 16 fremem 50 637 17 getbuf 49 1013 1812 2630 2211 getcmt 1535 30 1015 1535 1546 20 getmem 50 636 21 gettib 56 255 12 globsw 93 27 93 594 2135 gocbyt 1471 1424 1471 2127 gocend 1465 1413 1428 1439 1465 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 83 octal symbol references by sequence no. 2126 gocjls 1464 1434 1449 1464 2132 goclsn 1468 1432 1468 2130 gocmsk 1466 1409 1410 1435 1436 1466 2124 gocsva 1462 1406 1459 1462 2133 goctib 1469 1419 1445 1469 2131 gocval 1467 1408 1412 1418 1422 1450 1467 2125 gocvls 1463 1425 1427 1463 3 hcfg 47 872 4 hdcw 45 1677 7 hgeti 46 1011 1000 hslafl 71 71 648 1061 iadbyt 705 705 761 766 781 787 302 ibk001 221 217 221 305 ibkret 224 219 224 1060 ibldut 704 704 711 728 74 ibmeot 68 68 929 1243 icnfg 872 869 872 541 idcwc 408 405 408 706 idenq 542 526 539 542 564 701 ifrel 534 489 496 502 509 534 1020 ifrlbf 651 651 749 747 iglob 594 586 594 2403 ihdcw 1677 1669 1677 1057 iin010 703 613 621 628 631 670 672 684 691 699 703 718 742 754 772 793 795 811 820 826 834 855 858 870 256 iinchk 208 109 130 154 199 208 216 257 iintrp 209 113 134 175 204 209 223 2404 ildcw 1678 1672 1678 713 imetrc 550 547 550 601 in1000 456 307 456 613 in1010 467 460 464 467 615 in1100 472 308 472 623 in1104 479 479 484 631 in1106 485 480 485 641 in1107 494 482 494 650 in1108 502 478 502 653 in1110 505 475 505 665 in1120 518 500 508 514 518 672 in1125 524 520 524 674 in1130 527 523 527 677 in1140 531 492 531 702 in1200 537 309 537 707 in1300 545 310 545 714 in1500 553 312 553 723 in1510 562 557 562 725 in1520 566 555 560 566 727 in1600 572 313 572 733 in1605 577 574 577 735 in1610 580 576 580 737 in1700 585 314 585 745 in1710 592 589 592 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 84 octal symbol references by sequence no. 750 in1800 597 315 597 762 in1900 609 316 609 766 in2000 615 317 615 774 in2100 623 318 623 1001 in2110 629 626 629 1022 in2200 659 319 659 1036 in2210 671 665 671 1040 in2300 677 320 677 1046 in2310 683 678 683 1050 in2400 689 321 689 1054 in2500 697 322 697 1062 in2600 710 323 710 1067 in2605 717 717 722 733 737 1071 in2610 720 714 720 1074 in2620 727 366 727 1102 in2630 735 731 735 1105 in2670 741 712 729 741 1107 in2700 747 324 747 1115 in2710 753 748 753 1117 in2800 759 325 759 1131 in2810 769 767 769 1135 in2850 773 763 769 773 1136 in2860 774 774 784 790 1137 in2900 779 326 779 1144 in2910 784 782 784 1152 in2920 790 788 790 1156 in2930 794 791 794 1160 in3000 800 327 800 1171 in3001 809 806 809 1172 in3002 810 808 810 1174 in3100 816 328 816 1201 in3101 821 817 821 1207 in3200 831 329 831 1211 in3210 833 833 839 841 1213 in3220 835 832 835 842 1223 in3280 844 838 844 1224 in3290 845 835 845 1225 in3300 850 330 850 1232 in3310 856 853 856 1234 in3400 863 331 863 1244 in3500 877 332 877 1256 in3510 890 879 890 1270 in3520 901 888 901 1313 in3530 920 915 920 1317 in3540 924 912 924 1326 in3590 932 892 897 905 907 909 919 923 932 1330 in3595 935 883 899 926 930 935 1332 in3600 941 333 941 1345 in3602 956 953 956 1347 in3603 959 955 959 1350 in3604 960 957 960 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 85 octal symbol references by sequence no. 1354 in3610 966 966 978 1371 in3650 981 964 981 1404 in3680 996 983 988 996 1412 in3693 1004 979 996 1004 1413 in3694 1006 942 1000 1006 1414 in3695 1007 969 976 1007 1447 in3700 1040 334 1040 1457 in3800 1055 335 1055 1463 in3810 1062 1057 1062 1467 in3900 1070 336 1070 1510 in3910 1094 1088 1094 1522 in3913 1106 1103 1106 1525 in3915 1110 1105 1110 1526 in3920 1111 1108 1111 1115 1544 in3991 1129 1075 1117 1129 1545 in3992 1130 1076 1125 1130 1546 in3993 1131 1078 1092 1097 1113 1118 1131 1547 in4000 1136 337 1136 1553 in4010 1143 1138 1143 1555 in4100 1149 338 1149 1561 in4200 1160 339 1160 1566 in4201 1165 1162 1165 1570 in4300 1171 340 1171 1185 1607 in4310 1186 1172 1186 1614 in4390 1192 1175 1184 1192 1615 in4400 1196 341 1196 1623 in4500 1205 342 1205 1633 in4600 1216 343 1216 1642 in4601 1223 1220 1223 1644 in4700 1228 344 1228 1652 in4800 1237 345 1237 1661 in4900 1247 346 1247 1671 in4901 1255 1252 1255 1673 in5000 1260 347 1260 1704 in5001 1269 1262 1266 1269 1724 in5100 1292 348 1292 1737 in5101 1303 1296 1301 1303 1740 in5200 1307 349 1307 1745 in5300 1316 350 1316 1767 in5301 1334 1317 1334 1771 in5302 1336 1318 1322 1336 1342 1347 1772 in5400 1340 351 1340 2004 in5500 1353 352 1353 2020 in5501 1365 1355 1359 1365 2016 in5502 1363 1360 1363 2021 in5600 1369 353 356 1369 1377 2023 in5700 1375 354 1375 2026 in5800 1381 355 1381 2033 in6000 1397 357 1397 2037 in6100 1405 358 1405 2053 in6101 1418 1411 1418 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 86 octal symbol references by sequence no. 2057 in6102 1422 1417 1420 1422 2065 in6103 1428 1428 1454 2105 in6104 1444 1437 1444 2111 in6105 1448 1443 1446 1448 2117 in6106 1455 1451 1455 2121 in6107 1458 1430 1433 1458 2136 in6200 1474 359 1474 2142 in6300 1480 360 1480 2150 in6400 1488 361 1488 2155 in6410 1494 1491 1494 2157 in6500 1497 362 1497 2161 in6600 1501 363 1501 2163 in6700 1505 364 1505 2174 in6800 1517 365 1517 2203 in6810 1525 1521 1525 2205 in6820 1527 1524 1527 1017 incall 650 393 650 800 809 816 818 819 1560 310 inchek 232 208 232 250 252 334 incret 252 244 252 1415 indblk 1008 896 900 987 990 992 1008 1010 361 int010 274 269 274 377 387 389 406 415 433 442 453 466 469 533 541 549 568 579 582 591 593 607 703 1012 1562 362 int011 276 272 276 1556 373 int020 287 284 287 410 int030 296 293 296 367 520 int100 375 298 375 522 int200 382 299 382 527 int210 388 385 388 531 int300 392 300 392 1557 536 int400 400 301 400 537 int500 404 302 404 542 int600 411 303 411 543 int601 413 413 1561 547 int700 419 304 419 552 int710 423 421 423 428 553 int720 426 426 431 561 int730 432 430 432 563 int800 436 305 436 571 int900 445 306 445 516 intbak 369 311 369 397 3772 intend 2633 31 2633 343 interp 266 209 266 370 0 intp 89 25 89 90 255 iscdsp 207 200 205 207 3056 ischkc 2054 1883 1897 2054 3060 iscnex 2056 1911 1925 1970 2056 2184 1053 iscnop 692 690 692 698 3053 iscnxt 2051 1838 2051 3052 iscstr 2050 1836 2050 3054 iscsx2 2052 1833 2052 3055 isctyp 2053 1832 1932 2053 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 87 octal symbol references by sequence no. 3057 isgtch 2055 1886 1900 1920 2055 174 ist010 156 156 167 170 201 ist020 164 160 164 127 istat 146 26 146 177 223 istbak 176 155 162 176 261 istbrk 214 26 214 224 546 istime 416 413 416 227 istsav 181 147 153 165 181 57 ite001 114 110 112 114 13 itest 101 26 101 114 230 itmout 190 26 190 260 itmtib 211 193 197 211 125 iwr001 135 131 135 61 iwrite 122 26 122 135 22 lctlck 52 1558 5 ldcw 45 1678 225 l.a001 179 159 179 226 l.a002 180 173 180 340 l.c001 257 247 257 341 l.c002 258 243 258 342 l.c003 259 221 259 1007 l.d001 639 559 639 1010 l.d002 640 529 640 1013 l.d005 643 643 765 786 1014 l.d006 644 479 644 1015 l.d007 645 477 645 1016 l.d010 648 513 648 2405 l.e001 1680 1622 1680 2406 l.e002 1681 1628 1642 1681 2407 l.e003 1682 1630 1632 1682 2410 l.e004 1683 1655 1683 2411 l.e005 1684 1605 1684 2413 l.e007 1686 1661 1686 1435 l.g001 1025 881 967 1025 1436 l.g002 1026 1026 1082 1437 l.g003 1027 1027 1087 1440 l.g004 1028 997 1028 1441 l.g005 1029 1029 1063 1442 l.g006 1030 1030 1174 1443 l.g007 1031 886 971 1031 1444 l.g008 1032 911 1032 1445 l.g009 1033 914 1033 2227 l.h001 1548 1544 1548 2230 l.h002 1549 1309 1549 2231 l.h003 1550 1345 1550 2232 l.h004 1551 1551 1573 2233 l.h005 1552 1552 1583 2234 l.h006 1553 1553 1585 2570 l.i001 1814 1807 1814 2571 l.i003 1816 1719 1746 1816 2766 l.k001 1974 1937 1974 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 88 octal symbol references by sequence no. 2767 l.k002 1975 1942 1975 2770 l.k003 1976 1962 1976 3356 l.s001 2328 2240 2328 2428 3357 l.s002 2329 2236 2329 2380 2442 3362 l.s005 2332 2332 2361 2465 3363 l.s006 2333 2333 2470 3364 l.s007 2334 2334 2471 3365 l.s008 2335 2084 2223 2335 2434 3366 l.s009 2336 2269 2336 3671 l.t001 2557 2528 2557 3672 l.t002 2558 2529 2558 3674 l.t004 2560 2539 2560 3675 l.t005 2561 2545 2561 3676 l.t006 2562 2488 2562 2607 3677 l.t007 2563 2497 2563 3700 l.t008 2564 2503 2564 2577 3701 l.t009 2565 2565 2581 3702 l.t010 2566 2566 2603 3042 l.u001 2041 1835 2041 3043 l.u002 2042 1843 2042 0 macwk1 2570 101 114 122 135 146 177 214 224 232 252 266 370 1277 1288 1535 1546 1570 1586 1591 1674 1689 1766 1768 1783 1785 1809 1830 2318 2357 2364 2368 2385 2392 2400 2407 2416 2422 2455 2462 2476 2484 2511 2526 2553 2570 2616 1 macwk2 2570 101 122 146 214 232 266 1277 1535 1570 1591 1689 1768 1785 1830 2357 2368 2392 2407 2422 2462 2484 2526 2570 2 macwk3 292 107 128 153 173 197 292 6 macwk4 292 107 128 153 173 197 292 6 maxdcw 1596 1596 1612 106 maxop 367 285 367 2174 mcal2 1518 33 1518 2164 mcall 1508 32 1508 2210 mentry 1532 1509 1513 1532 23 meterc 44 550 10 mincd 57 1565 11 mincs 57 1564 22 m.nim 37 37 1522 30 m.nom 37 37 1525 2164 mjoin 1507 1499 1503 1507 6 mmsg 57 1567 3 modnum 90 90 107 128 153 173 197 236 240 249 279 288 292 395 401 424 661 762 802 823 867 1044 1073 1283 1615 1644 1649 1794 1845 1849 1880 1884 1898 1971 2013 2027 2030 2070 2074 2094 2123 2141 2154 2166 2169 2192 2204 2216 2283 2534 2206 mret2 1528 1518 1528 2172 mret 1514 1508 1514 5 mt.blk 80 80 173 292 3 mt.sta 78 78 153 4 mt.tim 79 79 197 1 mt.tst 76 76 107 2 mt.wrt 77 77 128 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 89 octal symbol references by sequence no. 24 mupdat 57 1566 776777 ntfrpn 70 70 1029 777776 ntfwrt 69 69 640 3624 pbufp 2517 1977 2049 2220 2233 2374 2375 2393 2424 2440 2485 2495 2502 2517 3626 pdatp 2519 1979 2237 2246 2247 2254 2298 2303 2381 2396 2443 2448 2450 2509 2519 3625 ptally 2518 1978 2377 2378 2429 2444 2451 2498 2518 25 puteco 54 1021 2613 sca000 1837 1837 1891 1907 1930 1996 2005 2021 2039 2062 2078 2086 2096 2134 2160 2178 2180 2337 2660 sca001 1880 1841 1880 2630 sca002 1853 1851 1853 1878 30 sca003 1878 1847 1878 2617 sca004 1843 1840 1843 2115 2661 sca010 1882 1855 1882 2671 sca020 1896 1856 1896 2676 sca022 1902 1902 1913 2716 sca030 1924 1857 1919 1924 2720 sca031 1927 1927 1967 1972 2724 sca032 1932 1926 1932 2762 sca033 1969 1939 1969 3005 sca040 1992 1858 1992 3011 sca050 2002 1859 2002 3014 sca060 2009 1860 2009 3025 sca070 2025 1861 2025 3061 sca080 2060 1862 2060 3005 sca090 1993 1863 1993 3063 sca100 2066 1864 2066 3014 sca110 2010 1865 2010 3074 sca120 2082 1866 2082 3100 sca130 2090 1867 2090 3106 sca140 2100 1868 2100 3111 sca144 2104 2104 2112 3122 sca146 2113 2111 2113 2116 3117 sca148 2110 2108 2110 3126 sca150 2120 1869 2120 3130 sca152 2123 2123 2125 3135 sca154 2128 2128 2147 3144 sca160 2138 1870 2138 3146 sca162 2141 2141 2143 2146 3155 sca170 2151 1871 2151 3157 sca172 2154 2154 2156 3166 sca180 2164 1872 2164 3176 sca182 2173 2173 2186 3213 sca190 2190 1873 2190 3223 sca200 2202 1874 2202 3234 sca210 2215 1875 2215 3242 sca211 2222 2222 2231 3252 sca212 2233 2224 2227 2233 3274 sca213 2255 2251 2255 2273 3302 sca214 2266 2242 2266 3240 sca215 2220 2220 2294 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 90 octal symbol references by sequence no. 3312 sca216 2275 2218 2255 2271 2275 2280 2293 3313 sca220 2279 1876 2279 3316 sca222 2283 2283 2285 2288 2289 2291 3332 sca224 2295 2256 2295 3337 sca226 2301 2272 2301 3342 sca227 2305 2300 2305 2711 sca230 1917 1877 1917 3347 sca260 2314 1980 2114 2314 3353 sca300 2322 1981 2004 2017 2020 2035 2038 2092 2102 2105 2106 2130 2172 2185 2195 2207 2261 2267 2322 3351 scabak 2317 2317 2325 2603 scanop 1830 692 1830 2318 3004 scasva 1988 1943 1955 1988 3003 scasvn 1987 1947 1951 1953 1987 3372 scbcc 2341 1984 1995 2019 2076 2176 2341 3373 scbccf 2342 1985 1994 2011 2015 2068 2072 2174 2342 2383 3562 scc010 2474 2472 2474 3564 sccbak 2476 2466 2476 3402 sccbuf 2351 2221 2229 2266 2351 3400 sccnta 2349 2157 2349 2358 3401 sccntf 2350 1983 2159 2181 2350 2384 3541 sccnxt 2462 2051 2139 2152 2281 2287 2339 2408 2462 2473 2474 2476 2629 3377 sccstr 2348 2050 2348 2463 2468 2628 3573 sce010 2487 2487 2493 3602 sce020 2494 2489 2491 2494 3621 scebak 2511 2486 2511 3566 scend 2484 1986 2484 2510 2511 3475 sch020 2414 2412 2414 3476 schbak 2415 2409 2410 2415 3461 schkcc 2407 2043 2054 2093 2145 2165 2168 2191 2203 2215 2407 2414 2416 3433 sci010 2373 2371 2373 3443 scibak 2382 2376 2382 3424 scinit 2368 2061 2368 2385 3531 scn020 2448 2431 2448 3534 scn030 2451 2446 2451 3537 scnbak 2455 2425 2435 2438 2455 3500 scnext 2422 2056 2422 2454 2455 3375 scntyp 2344 2053 2344 2370 3403 scount 2357 1982 2183 2357 2364 3376 scsvx2 2347 2052 2315 2323 2347 3010 scwrk1 1998 1885 1889 1899 1906 1998 3046 scwrk2 2046 2028 2032 2037 2046 2126 2132 2144 2193 2196 2205 2208 3047 scwrk3 2047 2031 2036 2047 2103 2110 2128 2131 2167 2177 2286 2306 3050 scwrk4 2048 2048 2170 2179 2217 2258 2292 2308 26 secdsp 43 207 27 setcct 53 1023 30 setime 43 416 31 setptw 55 254 22 sf.noc 38 38 516 3457 sgtbak 2400 2394 2400 3447 sgtchr 2392 2044 2055 2073 2091 2101 2129 2171 2194 2206 2392 2398 2400 assm 01 12-10-82 15.903 intp -- control table interpreter for mcs/fnp page 91 octal symbol references by sequence no. 1021 sndflg 654 473 494 504 519 654 105 sndout 62 62 525 40 space 64 64 1733 777004 statop 59 59 179 2600 tabchr 1825 1016 1716 1825 1 tfbkpt 36 36 258 259 1549 4000 tfblak 36 36 1033 100 tfofc 36 36 1032 1000 tfrpon 36 36 70 4000 tftbec 36 36 1816 1 tfwrit 36 36 69 32 t.brkp 36 36 605 35 t.cntr 36 36 611 616 619 625 3 t.cur 36 36 107 128 153 197 238 396 23 t.dcwa 36 36 1600 1664 24 t.dcwl 36 36 1662 1665 11 t.elnk 36 36 659 668 677 679 1281 1286 2532 2 t.flg2 36 36 440 451 462 910 1064 36 t.flg3 36 36 222 242 1310 1 t.flg 36 36 438 448 458 530 1718 1745 5 t.icp 36 36 554 730 732 736 747 750 878 963 1171 1177 1186 1523 2369 7 t.icpl 36 36 752 1181 6 t.ilst 36 36 556 751 1188 4 t.line 36 36 103 124 149 512 851 864 890 981 1160 1666 52 t.metr 36 36 1510 1519 16 t.ocnt 36 36 522 528 12 t.ocp 36 36 474 487 488 495 497 503 573 713 715 721 831 1042 1046 1121 1123 1526 2372 13 t.ocur 36 36 490 498 507 510 575 46 t.ofch 36 36 913 14 t.olst 36 36 491 499 511 11 t.rcp 36 36 961 1041 1047 1056 1060 1137 1704 1799 1801 22 t.reta 36 36 805 807 821 824 825 1376 30 t.sfcm 36 36 515 17 t.type 36 36 384 420 599 602 924 951 1101 1539 1446 tmpchr 1035 903 918 922 927 1035 12 trace 48 107 128 153 173 197 292 100 tr.blk 85 85 173 292 40 tr.ent 84 84 107 128 153 197 34 upshft 66 66 906 777003 waitop 60 60 257 ** 47584 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