THIS FILE IS DAMAGED SEE COMPANION ldd_listings/mcs/dia_man.list 000013 l3ch set 11 low speed line adapter number three 000014 l4ch set 12 low speed line adapter number four 000015 l5ch set 13 low speed line adapter number five 000016 l6ch set 14 low speed line adapter number six 000077 tmch set 63 interval timer channel 000077 swch set 63 data switch channel assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 9 datanet configuration description eject ************************* * iom interrupt vectors * ************************* 000000 tyft set 0 typewriter fault 000001 tyrq set 1 typewriter request 000002 tytm set 2 typewriter terminate 000040 lpft set 32 line printer fault 000041 lpat set 33 line printer attention 000042 lptm set 34 line printer terminate 000100 dift set 64 dia fault 000102 ditm set 66 dia terminate 000003 dis0 set 3 dia special - 0 000023 dis1 set 19 dia special - 1 000043 dis2 set 35 dia special - 2 000063 dis3 set 51 dia special - 3 000103 dis4 set 67 dia special - 4 000123 dis5 set 83 dia special - 5 000143 dis6 set 99 dia special - 6 000163 dis7 set 115 dia special - 7 000203 dis8 set 131 dia special - 8 000223 dis9 set 147 dia special - 9 000243 dis10 set 163 dia special - 10 000263 dis11 set 179 dia special - 11 000303 dis12 set 195 dia special - 12 000323 dis13 set 211 dia special - 13 000343 dis14 set 227 dia special - 14 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 10 datanet configuration description 000363 dis15 set 243 dia special - 15 000140 h1ft set 96 hsla 1 fault 000004 h1a0 set 4 hsla 1 subch 0 active terminate vector 000005 h1a16 set 5 hsla 1 subch 16 active terminate vector 000006 h1c0 set 6 hsla 1 subch 0 config terminate vector 000007 h1c16 set 7 hsla 1 subch 16 config terminate vector 000024 h1a1 set 20 hsla 1 subch 1 active terminate vector 000025 h1a17 set 21 hsla 1 subch 17 active terminate vector 000026 h1c1 set 22 hsla 1 subch 1 config terminate vector 000027 h1c17 set 23 hsla 1 subch 17 config terminate vector 000044 h1a2 set 36 hsla 1 subch 2 active terminate vector 000045 h1a18 set 37 hsla 1 subch 18 active terminate vector 000046 h1c2 set 38 hsla 1 subch 2 config terminate vector 000047 h1c18 set 39 hsla 1 subch 18 config terminate vector 000064 h1a3 set 52 hsla 1 subch 3 active terminate vector 000065 h1a19 set 53 hsla 1 subch 19 active terminate vector 000066 h1c3 set 54 hsla 1 subch 3 config terminate vector 000067 h1c19 set 55 hsla 1 subch 19 config terminate vector 000104 h1a4 set 68 hsla 1 subch 4 active terminate vector 000105 h1a20 set 69 hsla 1 subch 20 active terminate vector 000106 h1c4 set 70 hsla 1 subch 4 config terminate vector 000107 h1c20 set 71 hsla 1 subch 20 config terminate vector 000124 h1a5 set 84 hsla 1 subch 5 active terminate vector 000125 h1a21 set 85 hsla 1 subch 21 active terminate vector 000126 h1c5 set 86 hsla 1 subch 5 config terminate vector 000127 h1c21 set 87 hsla 1 subch 21 config terminate vector assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 11 datanet configuration description 000144 h1a6 set 100 hsla 1 subch 6 active terminate vector 000145 h1a22 set 101 hsla 1 subch 22 active terminate vector 000146 h1c6 set 102 hsla 1 subch 6 config terminate vector 000147 h1c22 set 103 hsla 1 subch 22 config terminate vector 000164 h1a7 set 116 hsla 1 subch 7 active terminate vector 000165 h1a23 set 117 hsla 1 subch 23 active terminate vector 000166 h1c7 set 118 hsla 1 subch 7 config terminate vector 000167 h1c23 set 119 hsla 1 subch 23 config terminate vector 000204 h1a8 set 132 hsla 1 subch 8 active terminate vector 000205 h1a24 set 133 hsla 1 subch 24 active terminate vector 000206 h1c8 set 134 hsla 1 subch 8 config terminate vector 000207 h1c24 set 135 hsla 1 subch 24 config terminate vector 000224 h1a9 set 148 hsla 1 subch 9 active terminate vector 000225 h1a25 set 149 hsla 1 subch 25 active terminate vector 000226 h1c9 set 150 hsla 1 subch 9 config terminate vector 000227 h1c25 set 151 hsla 1 subch 25 config terminate vector 000244 h1a10 set 164 hsla 1 subch 10 active terminate vector 000245 h1a26 set 165 hsla 1 subch 26 active terminate vector 000246 h1c10 set 166 hsla 1 subch 10 config terminate vector 000247 h1c26 set 167 hsla 1 subch 26 config terminate vector 000264 h1a11 set 180 hsla 1 subch 11 active terminate vector 000265 h1a27 set 181 hsla 1 subch 27 active terminate vector 000266 h1c11 set 182 hsla 1 subch 11 config terminate vector 000267 h1c27 set 183 hsla 1 subch 27 config terminate vector 000304 h1a12 set 196 hsla 1 subch 12 active terminate vector assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 12 datanet configuration description 000305 h1a28 set 197 hsla 1 subch 28 active terminate vector 000306 h1c12 set 198 hsla 1 subch 12 config terminate vector 000307 h1c28 set 199 hsla 1 subch 28 config terminate vector 000324 h1a13 set 212 hsla 1 subch 13 active terminate vector 000325 h1a29 set 213 hsla 1 subch 29 active terminate vector 000326 h1c13 set 214 hsla 1 subch 13 config terminate vector 000327 h1c29 set 215 hsla 1 433 tze dte040-* if it's zero, nothing to do 00076 422 015 0 434 icmpa tcmax if it's over maximum 00077 0 75 002 101 435 tmi 2 we die 00100 436 dte020 die 4 00101 422 010 0 437 icmpa tcinmb did we write a mailbox with input? 00102 4 74 012 114 438 tze a.a002-*,* (mdisp) yes, don't do anything until we hear 439 more from multics 440 00103 422 012 0 441 icmpa tcreq one of the ones we have to act on? 00104 0 65 004 110 442 tpl dte030-* no, just go unlock 443 yes, schedule transaction processor 00105 0 04 023 130 444 ldaq l.a002-* priority and address of dtrans 00106 4 10 010 116 445 tsy a.a004-*,* dspqur 00107 4 71 005 114 446 tra a.a002-*,* back to master dispatcher 447 00110 448 dte030 null nothing to do, unlock dia and call gate 00110 4 10 007 117 449 tsy a.a005-*,* unlock 00111 450 dte040 null 00111 4 10 007 120 451 tsy a.a006-*,* gate 00112 4 71 002 114 452 tra a.a002-*,* back to master dispatcher 453 454 455 00113 0 01564 1 456 a.a001 ind tcword transaction control word 00114 0 07000 3 457 a.a002 ind mdisp master dispatcher end of binary card 00000009 00115 0 05656 1 458 a.a003 ind conect 00116 0 14000 3 459 a.a004 ind dspqur scheduling routine 00117 0 05640 1 460 a.a005 ind unlock 00120 0 00500 1 461 a.a006 ind gate 00121 0 00137 1 462 a.a007 ind sterr 00122 0 01113 1 463 a.a008 ind derrq 00123 0 05161 1 464 a.a009 ind shinp short input flag 00124 3 00621 1 465 a.a010 ind mbxfre,3 for marking fnp mailboxes free 00125 2 00142 1 466 a.a011 ind badsts,2 index into bad status table 467 00126 468 even 00126 000001 0 469 l.a001 oct 1,0 good status from dia assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 46 dterm -- handles terminate interrupts from dia 00127 000000 0 00130 0 00000 0 470 l.a002 zero dtprty priority and address for 00131 0 01201 1 471 ind dtrans scheduling dtrans 00132 777640 0 472 l.a003 vfd 18/fatal non-restartable dia errors 00133 000001 0 473 l.a004 dec 1 474 475 00134 000001 0 476 iopend dec 1 indicates whether i/o is pending 477 but set to 1 so first call to gate will happen 478 00135 233100 0 00136 479 even 00136 000000 0 480 errcnt oct 0 count of dia i/o errors 00137 000002 0 481 sterr dec 2 command data for reporting dia error 00140 000001 0 482 stat oct 1,0 place where dia status is to go 00141 000000 0 00142 483 badsts bss 12 bad status table 00156 000000 0 484 bdstct oct 0 number of consecutive errors in table 485 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 47 dmail -- handler for mailbox interrupt 486 ttls dmail -- handler for mailbox interrupt 487 488 this entry handles interrupt that comes in when 489 mailbox is read from cs 490 491 it queues the mailbox for later processing 492 00157 493 dmail null get 3rd word of jump table 00157 4 10 231 410 494 tsy a.b001-*,* g3wjt 495 word is in q 00160 0334 13 0 496 lls 11 shift mailbox number into a low 00161 022 037 0 497 iana mnmask mask out rest of word 00162 422 014 0 498 icmpa 12 is it to be read or just freed? 00163 0 75 020 203 499 tmi dma010-* read 00164 4 20 737 123 500 szn a.a009-*,* (shinp) is there short input pending? 00165 0 74 016 203 501 tze dma010-* no, deal with it later 00166 4332 00 0 502 cax1 save mailbox number for trace 00167 773 764 0 503 iaa -12 get mailbox # in range 0-3 00170 4333 00 0 504 cax3 mark it free now 00171 4 07 733 124 505 lda a.a010-*,* mbxfre,3 00172 422 102 0 506 icmpa inmbx is this the one? 00173 0 64 011 204 507 tnz dma012-* no, free mailbox later 508 else do it now 00174 4 56 730 124 509 stz a.a010-*,* mbxfre,3 00175 4 56 726 123 510 stz a.a009-*,* zero the flag now end of binary card 00000010 00176 673 777 0 511 ila -1 and decrement mbx use count 00177 4 16 232 431 512 asa a.b018-*,* mbused 00200 0 04 730 130 513 ldaq l.a002-* scheduling stuff for dtrans 00201 4 10 715 116 514 tsy a.a004-*,* dspqur -- make sure transaction processor runs 00202 0 71 017 221 515 tra dma020-* done 00203 516 dma010 null 00203 4332 00 0 517 cax1 get mailbox no. into x1 00204 0 10 027 233 518 dma012 tsy upmbq-* update the mailbox queue 519 00205 2332 00 0 520 cx1a get mailbox no. again 00206 422 010 0 521 icmpa 8 ours originally? 00207 0 75 012 221 522 tmi dma020-* no, done 00210 773 770 0 523 iaa -8 get it in range 0-3 00211 4333 00 0 524 cax3 yes, look at saved opcode 00212 4 07 712 124 525 lda a.a010-*,* mbxfre,3 00213 422 102 0 526 icmpa inmbx input in mailbox? 00214 0 64 005 221 527 tnz dma020-* no 528 yes, it must have been rejected 00215 4 20 706 123 529 szn a.a009-*,* (shinp) were we working on it now? 00216 0 74 003 221 530 tze dma020-* no, worry about it later 00217 4 56 704 123 531 stz a.a009-*,* yes, clear the flag now 00220 4 10 677 117 532 tsy a.a005-*,* (unlock) make sure mailbox gets read 533 00221 534 dma020 null 00221 535 trace mt.mbx,tr.int,(x1) assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 48 dmail -- handler for mailbox interrupt 00230 4 71 161 411 536 tra a.b002-*,* return to master dispatcher 537 538 539 rpmbx is scheduled to cause reprocessing of a mailbox 540 because of lack of buffer space. to the rest of dia_man, 541 it will appear that an interrupt was received for the 542 mailbox and handled by dmail 543 544 mailbox number is in x1 545 00231 546 rpmbx null 00231 0 10 002 233 547 tsy upmbq-* update mailbox queue 00232 4 71 174 426 548 tra a.b015-*,* return to secondary dispatcher 549 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 49 upmbq -- update mailbox queue 550 ttls upmbq -- update mailbox queue 551 552 mailbox number to be added to queue of mailboxes to be 553 processed is passed in x1 554 00233 555 upmbq subr upm,(inh,x1) 556 end of binary card 00000011 00245 0 03 172 437 557 ldx2 mbqnxa-* get offset of next available slot 00246 4 07 157 425 558 lda a.b014-*,* in mailbox queue 00247 422 777 0 559 icmpa -1 is it free? 00250 0 64 004 254 560 tnz upm010-* it had better be 00251 0 07 165 436 561 lda mbqcnt-* get count, which had better be <16 00252 422 020 0 562 icmpa 16 00253 0 75 002 255 563 tmi upm020-* 00254 564 upm010 die 1 mailbox queue overflowed 565 00255 566 upm020 null 00255 0 76 161 436 567 aos mbqcnt-* increment queue count 00256 4 53 147 425 568 stx1 a.b014-*,* store number in queue entry 569 00257 0 76 160 437 570 aos mbqnxa-* bump "next available" pointer 00260 673 017 0 571 ila mqmask make it mod 16 00261 0 32 156 437 572 ansa mbqnxa-* 573 00262 4 10 130 412 574 tsy a.b003-*,* gate (to schedule dgetwk) 00263 575 return upmbq 576 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 50 rdmbx -- subroutine to read mailbox from cs 577 ttls rdmbx -- subroutine to read mailbox from cs 578 579 this subroutine is called by dgetwk when mailbox 580 queue count is non-zero in order to read a mailbox from 581 the cs. the number of the mailbox is picked up from the 582 "next-to-process" entry of the mailbox queue 583 584 the routine is entered with interrupts inhibited, 585 x1 points to saved copy of indicators for reenabling them 586 00265 587 rdmbx subr rdm,(x2,x3) 588 00276 0 07 140 436 589 lda mbqcnt-* get mailbox queue count 00277 0 64 002 301 590 tnz 2 if it's zero, 00300 591 die 5 we screwed up somehow 592 00301 773 777 0 593 iaa -1 decrement it 00302 0 17 134 436 594 sta mbqcnt-* 00303 0 03 135 440 595 ldx2 mbqnxt-* get pointer to next entry to process 00304 4 47 121 425 596 ldq a.b014-*,* pick up mailbox number 00305 673 777 0 597 ila -1 and mark the entry as free 00306 4 17 117 425 598 sta a.b014-*,* 00307 0 76 131 440 599 aos mbqnxt-* bump the "next-to-process" pointer 00310 673 017 0 600 ila mqmask force it mod 16 00311 0 32 127 440 601 ansa mbqnxt-* 00312 7333 00 0 602 cqa get mailbox number 00313 0 75 003 316 603 tmi rdm010-* make sure it's in range of end of binary card 00000012 00314 422 020 0 604 icmpa 16 0-15 00315 0 75 002 317 605 tmi 2 00316 606 rdm010 die 6 00317 422 014 0 607 icmpa 12 mailbox to be read or just freed? 00320 0 75 014 334 608 tmi rdm020-* read 00321 773 764 0 609 iaa -12 freed, get number to be 0-3 00322 4333 00 0 610 cax3 to use as index to freed words 00323 4 56 104 427 611 stz a.b016-*,* mbxfre,3 00324 673 777 0 612 ila -1 and decrement mbx use count 00325 4 16 104 431 613 asa a.b018-*,* mbused 00326 1 44 000 0 614 ldi 0,1 ****enable interrupts now 00327 673 013 0 615 ila tcfree set tcword to "freed mailbox" 00330 4 17 073 423 616 sta a.b012-*,* tcword 617 00331 4 10 077 430 618 tsy a.b017-*,* unlock 00332 4 10 060 412 619 tsy a.b003-*,* (gate) make sure dgtwrk runs 00333 0 71 053 406 620 tra rdmbak-* done 00334 621 rdm020 null we are to read mailbox 622 save mailbox number 00334 4 17 063 417 623 sta a.b008-*,* mbxno 00335 422 010 0 624 icmpa 8 fnp's or cs's? 00336 0 75 011 347 625 tmi rdm030-* his 00337 773 770 0 626 iaa -8 ours, make it 0 to 3 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 51 rdmbx -- subroutine to read mailbox from cs 00340 627 mpy l.b001-* (fmbxsz/2) get size 00342 573 110 0 628 iaq mh.fsb and correct offset 00343 0 57 072 435 629 stq mbxadr-* 00344 673 034 0 630 ila fmbxsz/2 size again 00345 0 17 066 433 631 sta rdsize-* save it for later 00346 0 71 006 354 632 tra rdm040-* 00347 633 rdm030 null 00347 0336 03 0 634 als 3 multiply mbx no by 8 for addressing 00350 773 010 0 635 iaa mh.sub get full offset in mailbox area 00351 0 17 064 435 636 sta mbxadr-* save it 00352 673 010 0 637 ila 8 get correct size for cs-controlled mailbox 00353 0 17 060 433 638 sta rdsize-* 00354 639 rdm040 null 640 00354 1 44 000 0 641 ldi 0,1 ****enable interrupts 00355 4 56 036 413 642 stz a.b004-*,* count of consecutive checksum errors 643 00356 644 trace mt.rmb,tr.mbx,(a.b008-*(*)) end of binary card 00000013 645 646 now set up dcw list to read the mailbox 647 00366 0 41 026 414 648 ldx3 a.b005-* get address of dcw area 00367 4 07 027 416 649 lda a.b007-*,* (csmbx) get cs mailbox header addr 00370 0 06 045 435 650 ada mbxadr-* add mailbox offset 00371 473 076 0 651 ilq diactf get cs -> fnp opcode 00372 3 14 000 0 652 staq 0,3 653 00373 0 47 040 433 654 ldq rdsize-* tally for reading mailbox 00374 0 07 021 415 655 lda a.b006-* addr(savmbx), w.2 00375 3 14 002 0 656 staq 2,3 657 658 save dcw list address for conect subroutine 00376 4 50 022 420 659 stx3 a.b009-*,* dcwadr 00377 373 004 0 660 iacx3 4 point to next place for dcw 00400 4 10 022 422 661 tsy a.b011-*,* (bdisc) set up disconnect dcw 662 save tally for conect subroutine 00401 673 004 0 663 ila 4 00402 4 17 017 421 664 sta a.b010-*,* dcwlen 665 666 dcws are all set up 667 set transaction control word 668 to "mailbox read" 669 00403 673 003 0 670 ila tcmbxr 00404 4 17 017 423 671 sta a.b012-*,* tcword 672 00405 4 10 017 424 673 tsy a.b013-*,* conect 00406 674 rdmbak return rdmbx assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 52 rdmbx -- subroutine to read mailbox from cs 675 eject 00410 0 04000 3 676 a.b001 ind g3wjt get 3rd word of jump table 00411 0 07000 3 677 a.b002 ind mdisp master dispatcher 00412 0 00500 1 678 a.b003 ind gate 00413 0 01643 1 679 a.b004 ind ckecnt count of consecutive checksum errors 00414 0 05750 1 680 a.b005 ind dcws static dcw list 00415 1 02462 1 681 a.b006 zero savmbx,w.2 fnp's copy of last-read mailbox 00416 0 06450 1 682 a.b007 ind csmbx cs address of mailbox header 00417 0 06355 1 683 a.b008 ind mbxno mailbox number 00420 0 05746 1 684 a.b009 ind dcwadr conect's address of dcw list 00421 0 05747 1 685 a.b010 ind dcwlen conect's dcw tally 00422 0 05604 1 686 a.b011 ind bdisc subroutine to build a disconnect dcw 00423 0 01564 1 687 a.b012 ind tcword transaction control word 00424 0 05656 1 688 a.b013 ind conect subroutine to connect to dia 00425 2 00460 1 689 a.b014 ind mbqhed,2 for accessing mailbox queue entries 00426 0 33000 3 690 a.b015 ind secdsp secondary dispatcher 00427 3 00621 1 691 a.b016 ind mbxfre,3 00430 0 05640 1 692 a.b017 ind unlock end of binary card 00000014 00431 0 00625 1 693 a.b018 ind mbused 694 695 00432 0 00034 0 696 l.b001 zero fmbxsz/2 697 698 00433 699 rdsize bss 1 size of this mailbox in 36-bit words 00434 700 dmsvi bss 1 place to save indicators 00435 701 mbxadr bss 1 offset for cs address of mailbox 00436 000000 0 702 mbqcnt oct 0 mailbox queue count 00437 000000 0 703 mbqnxa oct 0 next available entry in mailbox queue 00440 000000 0 704 mbqnxt oct 0 next entry in mailbox queue to process 705 706 00441 071017 0 00460 707 base 16 708 mailbox queue 00460 777777 0 709 mbqhed dec -1,-1,-1,-1,-1,-1,-1,-1 00461 777777 0 00462 777777 0 00463 777777 0 00464 777777 0 00465 777777 0 00466 777777 0 00467 777777 0 00470 777777 0 710 dec -1,-1,-1,-1,-1,-1,-1,-1 00471 777777 0 00472 777777 0 00473 777777 0 00474 777777 0 00475 777777 0 00476 777777 0 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 53 rdmbx -- subroutine to read mailbox from cs 00477 777777 0 711 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 54 gate -- subroutine to schedule dgetwk 712 ttls gate -- subroutine to schedule dgetwk 713 714 subroutine called when a task is completed to make 715 sure that dgetwk gets scheduled. dgetwk will figure 716 out if there's more work to do 717 718 if dgetwk is already scheduled, we won't bother 719 00500 720 gate subr gat,(inh,a,q) 721 00515 0 20 111 626 722 szn gqued-* see if it's already queued end of binary card 00000015 00516 0 64 004 522 723 tnz gatbak-* it is, just return 724 00517 0 76 107 626 725 aos gqued-* else mark it queued now 00520 0 04 076 616 726 ldaq l.c001-* get dgetwk's priority and address 00521 4 10 050 571 727 tsy a.c001-*,* (dspqur) and schedule it 728 00522 729 gatbak return gate 730 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 55 dgetwk -- reads or requests a mailbox 731 ttls dgetwk -- reads or requests a mailbox 732 733 this routine is scheduled by gate to find out 734 if there's anything to do 735 (more mailboxes to read or request) 736 737 if the dia lock is locked we will do nothing 738 739 00524 740 dgetwk null 00524 0 54 103 627 741 sti dgsvi-* hold on to indicators 00525 3331 00 0 742 inh ****inhibit interrupts 743 00526 744 smeter mupdat,.mimbx,mbused-* good time to update this 745 00535 0 56 071 626 746 stz gqued-* turn off "dgetwk queued" flag 00536 4 20 034 572 747 szn a.c002-*,* (=dilock) is dia already locked? 00537 0 64 030 567 748 tnz dgebak-* if it is, return 00540 4 10 033 573 749 tsy a.c003-*,* (=lock) else, lock it 750 00541 4 20 043 604 751 szn a.c014-*,* (mbqcnt) any mailboxes waiting to be read? 00542 0 74 004 546 752 tze dge005-* no, don't bother 00543 0 43 043 606 753 ldx1 a.c016-* (dgsvi) get address of where indicators are store 00544 4 10 041 605 754 tsy a.c015-*,* (rdmbx) go read the mailbox 00545 4 71 043 610 755 tra a.c018-*,* and return to secondary dispatcher 756 00546 0 20 052 620 757 dge005 szn qcnt-* anything in the queue? 00547 0 74 017 566 758 tze dge030-* no, nothing to do 00550 0 41 041 611 759 ldx3 a.c019-* addr (mbxfre) 00551 673 774 0 760 ila -4 check if any are free 00552 3 20 000 0 761 dge010 szn 0,3 this one? 00553 0 74 005 560 762 tze dge020-* yes 00554 773 001 0 763 iaa 1 no, are there more? 00555 0 74 011 566 764 tze dge030-* no, we'll have to deal with it later 00556 373 001 0 765 iacx3 1 look at next 00557 0 71 773 552 766 tra dge010-* 767 00560 0 76 045 625 768 dge020 aos mbused-* keep count of mailboxes in use 00561 773 014 0 769 iaa 12 make it in range 8-11 00562 4 17 030 612 770 sta a.c020-*,* mbxno 00563 0 41 031 614 771 ldx3 a.c022-* addr (savmbx) 00564 4 10 027 613 772 tsy a.c021-*,* filmbx end of binary card 00000016 00565 0 71 002 567 773 tra dgebak-* all done 774 if we come here, nothing to do 00566 775 dge030 null so just clear dia lock and return 00566 4 10 021 607 776 tsy a.c017-*,* unlock 777 00567 778 dgebak null 00567 0 44 040 627 779 ldi dgsvi-* ****restore indicators (to enable) 00570 4 71 020 610 780 tra a.c018-*,* return to secondary dispatcher assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 56 dgetwk -- reads or requests a mailbox 781 782 783 00571 0 14000 3 784 a.c001 ind dspqur scheduling routine 00572 0 05655 1 785 a.c002 ind dilock dia lock 00573 0 05622 1 786 a.c003 ind lock locking subroutine 00574 0 01564 1 787 a.c004 ind tcword transaction control word 00575 0 05750 1 788 a.c006 ind dcws static area for building dcw list 00576 0 05746 1 789 a.c007 ind dcwadr address of dcw list (for conect) 00577 0 05747 1 790 a.c008 ind dcwlen length of dcw list (36-bit words) 791 *a.c009 unused 00600 0 06450 1 792 a.c010 ind csmbx cs mailbox header address 00601 0 05572 1 793 a.c011 ind bint subroutine to build interrupt dcw 00602 0 05604 1 794 a.c012 ind bdisc subroutine to build disconnect dcw 00603 0 05656 1 795 a.c013 ind conect subroutine to do connect to dia 00604 0 00436 1 796 a.c014 ind mbqcnt mailbox queue count 00605 0 00265 1 797 a.c015 ind rdmbx subroutine to read a mailbox from cs 00606 0 00627 1 798 a.c016 ind dgsvi saved indicators (to pass to rdmbx) 00607 0 05640 1 799 a.c017 ind unlock unlocking subroutine 00610 0 33000 3 800 a.c018 ind secdsp secondary dispatcher 00611 0 00621 1 801 a.c019 ind mbxfre 00612 0 06355 1 802 a.c020 ind mbxno 00613 0 03375 1 803 a.c021 ind filmbx 00614 0 02462 1 804 a.c022 ind savmbx mailbox save area 805 00615 004000 0 806 l.c002 oct 004000 for masking overflow 00616 807 even 00616 0 00001 0 808 l.c001 zero gtprty priority and address 00617 0 00524 1 809 ind dgetwk for scheduling dgetwk 810 00620 811 even 00620 000000 0 812 qcnt oct 0 00621 813 mbxfre bss 4 words marked to show fnp mailboxes in use 00625 000000 0 814 mbused oct 0 number of inbound mailboxes now in use 00626 000000 0 815 gqued oct 0 "dgetwk is queued" flag 00627 816 dgsvi bss 1 place to save indicators 817 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 57 denq -- subroutine to add entry to dia i/o queue 818 ttls denq -- subroutine to add entry to dia i/o queue 819 820 this subroutine is called from outside dia_man 821 to queue a request for dia i/o. 822 823 separate queues are maintained for each 824 line; a list of tibs and queue pointers is maintained 825 for finding the queue for each line. 826 827 we will update the mailbox request count as long as 828 there are no "accept input" requests already 829 on the queue for this line; but there may never be more 830 than one mailbox request outstanding for an "accept input" 831 opcode for any line. 832 833 if a quit or a hangup is queued, and there is a 834 rejected "accept input" at the head of 835 the queue, all accept inputs are cleansed from the queue 836 to ensure that the quit or hangup gets sent. 837 838 at entry: 839 840 q: opcode to be put in mailbox 841 x1: virtual tib address 842 843 the opcode is stored in queue element 844 845 queue consists of chained buffers, each pointing 846 to next buffer 847 elements are processed first in, first out 848 00630 849 denq subr den,(a,q,x2,x3) end of binary card 00000017 00647 0 56 134 1003 850 stz noai-* initialize 00650 1 07 004 0 851 lda t.line,1 save line number for trace 00651 4 17 230 1101 852 sta a.d013-*,* (curqln) 00652 2332 00 0 853 cx1a need real tib address in a 00653 0 71 004 657 854 diams1 tra den010-* set to a nop by init if 64k is configured 00654 1 03 030 0 855 ldx2 t.sfcm,1 assume this is an hsla tib 00655 2 03 015 0 856 ldx2 sf.hsl,2 get hsla table entry for this channel 00656 2 07 001 0 857 lda ht.tib,2 this is the real tib address 858 00657 859 den010 null 00657 4 10 213 1072 860 tsy a.d006-*,* getque 861 address of this tib's entry in list is in x2 00660 4 10 213 1073 862 tsy a.d007-*,* (getqai) find first accept input in queue 00661 0 71 002 663 863 tra den060-* none, so must update request count 00662 0 71 004 666 864 tra den070-* adding entry after a previous accept input 865 so no need to update request count 866 00663 867 den060 null add one to queue entry count assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 58 denq -- subroutine to add entry to dia i/o queue 00663 0 76 120 1003 868 aos noai-* there's no accept input now 00664 4 76 211 1075 869 aos a.d009-*,* (qcnt) 00665 4 10 203 1070 870 tsy a.d003-*,* (gate) make sure dgetwk gets scheduled 871 to process queue 00666 0 03 757 645 872 den070 ldx2 densx2-* get pointer to data 00667 0 47 755 644 873 ldq densq-* and origional opcode 00670 4 10 206 1076 874 tsy a.d010-*,* (adqent) update queue 875 00671 7333 00 0 876 cqa get opcode in a 00672 422 112 0 877 icmpa accin is opcode "accept input"? 00673 0 64 067 762 878 tnz den140-* 00674 673 001 0 879 ila 1 get double-precision 1 00675 2335 22 0 880 lrl 18 00676 0 20 105 1003 881 szn noai-* first accept input for this line? 00677 0 64 004 703 882 tnz den080-* yes 00700 0 15 104 1004 883 adaq prevai-* no, meter presence of previous one 00701 0 14 103 1004 884 staq prevai-* 00702 0 71 003 705 885 tra den090-* 00703 0 15 103 1006 886 den080 adaq nprvai-* meter addition of accept input without one alread 00704 0 14 102 1006 887 staq nprvai-* 00705 1 07 005 0 888 den090 lda t.icp,1 get pointer to head of chain end of binary card 00000018 00706 0 64 002 710 889 tnz 2 (which must exist) 00707 890 die 19 891 00710 1 41 027 0 892 ldx3 t.dlst,1 get last buffer of previous chain 00711 0 74 003 714 893 tze den120-* if any 894 hook new chain onto 00712 3 17 000 0 895 sta bf.nxt,3 previous one 00713 0 71 002 715 896 tra den130-* 00714 897 den120 null 898 no old chain, set up new chain pointer 00714 1 17 026 0 899 sta t.dcp,1 00715 900 den130 null 00715 4333 00 0 901 cax3 00716 0 56 064 1002 902 stz denbuf-* init buffer count 00717 0 56 173 1112 903 stz accum-* start counter 00720 3 07 001 0 904 den132 lda bf.siz,3 count the number of 32-word blocks 00721 2337 17 0 905 arl 15 get size code in low-order 3 bits 00722 773 001 0 906 iaa 1 00723 1 16 041 0 907 asa t.dcpl,1 save length of t.dcp chain 00724 3 20 000 0 908 szn bf.nxt,3 is this last buffer in chain? 00725 0 74 024 751 909 tze den135-* yes, go mark it 00726 3 07 001 0 910 lda bf.flg,3 is this the end of a message? 00727 0 31 153 1102 911 cana l.d001-* =bfflst 00730 0 64 016 746 912 tnz den133-* yes, break chain here 00731 3 07 001 0 913 lda bf.tly,3 no, increment running tally 00732 0 34 156 1110 914 ana l.d007-* =buftmk 00733 0 06 157 1112 915 ada accum-* new result 00734 0 27 155 1111 916 cmpa l.d008-* more than max chain length? 00735 0 65 011 746 917 tpl den133-* yes assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 59 denq -- subroutine to add entry to dia i/o queue 00736 0 17 154 1112 918 sta accum-* no, save new running tally 00737 0 07 043 1002 919 lda denbuf-* get buffer count 00740 773 001 0 920 iaa 1 increment 00741 422 030 0 921 icmpa maxchn more than max number of buffers ? 00742 0 65 004 746 922 tpl den133-* yes 00743 0 17 037 1002 923 sta denbuf-* save new buffer count 00744 3 41 000 0 924 ldx3 bf.nxt,3 and check next 00745 0 71 753 720 925 tra den132-* 926 00746 0 03 677 645 927 den133 ldx2 densx2-* put another accept input in queue 00747 0 47 675 644 928 ldq densq-* 00750 4 10 126 1076 929 tsy a.d010-*,* (=adqent) 930 00751 0 07 131 1102 931 den135 lda l.d001-* =bfflst 00752 3 72 001 0 932 orsa bf.flg,3 mark buffer as last in request 00753 3 07 000 0 933 lda bf.nxt,3 are there more? 00754 0 64 741 715 934 tnz den130-* yes, start counting again end of binary card 00000019 00755 1 50 027 0 935 stx3 t.dlst,1 else mark end of chain 936 00756 1 56 005 0 937 stz t.icp,1 zero out tib fields so lsla_man or 00757 1 56 006 0 938 stz t.ilst,1 hsla_man can start new chain 00760 1 56 007 0 939 stz t.icpl,1 00761 0 71 017 1000 940 tra denbak-* all done 941 00762 942 den140 null is it quit or hangup? 00762 422 113 0 943 icmpa brkcon check for quit 00763 0 74 003 766 944 tze den150-* yup 00764 422 101 0 945 icmpa lindis no, check for hangup 00765 0 64 013 1000 946 tnz denbak-* neither, we're all done 00766 947 den150 null we must cleanse any accept inputs from the queue 00766 1 56 042 0 948 stz t.scll,1 turn off echo negotiation 00767 4 10 104 1073 949 tsy a.d007-*,* (getqai) are there any? 00770 0 71 010 1000 950 tra denbak-* no, forget it 00771 2 07 000 0 951 lda 0,2 yes, has it been rejected? 00772 0 31 114 1106 952 cana l.d005-* =rejflg 00773 0 64 004 777 953 tnz den160-* 00774 0 37 113 1107 954 ora l.d006-* (=quitfl) if not, mark there's a quit 00775 2 17 000 0 955 sta 0,2 behind it in case it does get rejected 00776 0 71 002 1000 956 tra denbak-* 957 00777 958 den160 null cleanse the queue 00777 4 10 075 1074 959 tsy a.d008-*,* cleanq 960 01000 961 denbak return denq 962 01002 963 denbuf bss 1 01003 964 noai bss 1 01004 965 even 01004 966 prevai bss 2 count of accept inputs when one already 967 present for the same channel assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 60 denq -- subroutine to add entry to dia i/o queue 01006 968 nprvai bss 2 count of accept inputs added to queue 969 without one already present assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 61 deque -- remove an accept input from an i/o queue 970 ttls deque -- remove an accept input from an i/o queue 971 972 the first item in the relevant line's i/o queue 973 must be an "accept input"; it will be removed from the 974 queue, and the mailbox request count will be updated 975 976 x1: virtual tib address 977 01010 978 deque subr deq,(a,q,x1,x2,x3) 979 01032 4 07 127 1161 980 lda a.n001-*,* (tibadr) get real tib address end of binary card 00000020 01033 4 10 037 1072 981 tsy a.d006-*,* (getque) 982 x2 -> tib table entry 01034 4 10 037 1073 983 tsy a.d007-*,* (=getqai) find first accept input 01035 984 die 16 none is fatal 01036 4 20 041 1077 985 szn a.d011-*,* (=nnonai) be sure no other entries before accin 01037 0 74 002 1041 986 tze 2 ok 01040 987 die 16 988 01041 4 10 037 1100 989 tsy a.d012-*,* (dlqent) free accept input entry 990 01042 4 10 031 1073 991 tsy a.d007-*,* (=getqai) find first accin in new queue 01043 0 71 003 1046 992 tra deq010-* none 01044 673 001 0 993 ila 1 must add 1 to req cnt for accin 01045 0 71 002 1047 994 tra 2 01046 673 000 0 995 deq010 ila 0 01047 4 06 030 1077 996 ada a.d011-*,* (=nnonai) add in entries before accin 01050 0 74 002 1052 997 tze deqbak-* no requests in queue, return 01051 4 16 024 1075 998 asa a.d009-*,* qcnt 999 01052 1000 deqbak null all done 01052 1001 return deque assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 62 dretry -- scheduled to retry accept input 1002 ttls dretry -- scheduled to retry accept input 1003 1004 this entry is scheduled if an attempt to send 1005 input to the cs was rejected for lack of 1006 buffer space. it turns off the "rejected" flag 1007 in the first "accept input" entry for the tib 1008 pointed to by x1, and puts out a request for one mailbox 1009 1010 if there is no rejected request queued for this 1011 line, we will do nothing 1012 1013 x1 - real tib address 1014 01054 1015 dretry null 1016 01054 2332 00 0 1017 cx1a need real tib address in a 01055 4 10 015 1072 1018 tsy a.d006-*,* getque 01056 4 10 015 1073 1019 tsy a.d007-*,* (=getqai) find first accept input 01057 0 71 010 1067 1020 tra drebak-* none, return 01060 2 07 000 0 1021 lda 0,2 pick up queue entry 01061 0 31 025 1106 1022 cana l.d005-* (=rejflg) has it been rejected? 01062 0 74 005 1067 1023 tze drebak-* no, queue must have been cleaned 1024 we have one 01063 0 07 022 1105 1025 lda l.d004-* =nretry 01064 2 32 000 0 1026 ansa 0,2 zero "retry" flag 01065 4 76 010 1075 1027 aos a.d009-*,* (qcnt) add one to count of queue entries 01066 4 10 002 1070 1028 tsy a.d003-*,* (gate) schedule dgetwk 01067 4 71 002 1071 1029 drebak tra a.d005-*,* return to secondary dispatcher 1030 1031 01070 0 00500 1 1032 a.d003 ind gate 01071 0 33000 3 1033 a.d005 ind secdsp secondary dispatcher 01072 0 04635 1 1034 a.d006 ind getque subroutine to find entry in tib queue list 01073 0 07023 1 1035 a.d007 ind getqai subr thats finds first accin in queue 01074 0 04712 1 1036 a.d008 ind cleanq cleans accept inputs out of queue 01075 0 00620 1 1037 a.d009 ind qcnt count of pending queue entries 01076 0 06463 1 1038 a.d010 ind adqent subr that adds entry to end of queue 01077 0 06462 1 1039 a.d011 ind nnonai counter set by getqai subr that indicates 1040 the number of entries before the first accin 01100 0 06636 1 1041 a.d012 ind dlqent subr that deletes entry from the queue 01101 0 06461 1 1042 a.d013 ind curqln line number for trace 1043 1044 end of binary card 00000021 01102 040000 0 1045 l.d001 vfd 18/bfflst 01103 000037 0 1046 l.d002 oct 37 for checking 0 mod 32 01104 004000 0 1047 l.d003 oct 004000 inhibit overflow indicator 01105 177777 0 1048 l.d004 vfd 18/nretry 01106 200000 0 1049 l.d005 vfd 18/rejflg 01107 100000 0 1050 l.d006 vfd 18/quitfl 01110 000777 0 1051 l.d007 vfd 18/buftmk assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 63 dretry -- scheduled to retry accept input 01111 004000 0 1052 l.d008 dec 2048 arbitrary maximum chain length 1053 1054 01112 1055 accum bss 1 running length of chain in characters 1056 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 64 derrq -- subroutine to add entry to error message queue 1057 ttls derrq -- subroutine to add entry to error message queue 1058 1059 this subroutine adds an entry to a special i/o 1060 queue for error messages. each entry contains an 1061 opcode and 4 words (72 bits) of command data to be 1062 passed to the cs 1063 queue is allocated in buffers of which second word is zero, 1064 leaving room for 6 five-word entries 1065 1066 because this routine can be called at interrupt 1067 time, it must save and restore the variables used 1068 to describe the current request queue 1069 1070 at entry: 1071 1072 q: opcode 1073 x2: address of command data 1074 01113 1075 derrq subr der,(inh,a,q,x2,x3) 1076 01136 4 07 027 1165 1077 lda a.n005-*,* =curque 01137 4 47 742 1101 1078 ldq a.d013-*,* =curqln 01140 0 14 036 1176 1079 staq tcurq-* save these in temporary 01141 4 07 030 1171 1080 lda a.n009-*,* =curqbf 01142 0 17 036 1200 1081 sta tcurbf-* this too 1082 01143 4 56 736 1101 1083 stz a.d013-*,* =curqln, zero line number 01144 0 07 020 1164 1084 lda a.n004-* get address of simulated tib table entry 01145 4 17 020 1165 1085 sta a.n005-*,* (curque) 1086 01146 0 47 765 1133 1087 ldq dersq-* restore opcode to q 01147 0 46 023 1172 1088 adq l.n002-* (=004000) indicate 4 words of data 01150 4 10 726 1076 1089 tsy a.d010-*,* (adqent) add entry to error queue 01151 4 76 011 1162 1090 aos a.n002-*,* qcnt 1091 now restore common values 01152 0 04 024 1176 1092 ldaq tcurq-* end of binary card 00000022 01153 4 17 012 1165 1093 sta a.n005-*,* =curque 01154 4 57 725 1101 1094 stq a.d013-*,* =curqln 01155 0 07 023 1200 1095 lda tcurbf-* 01156 4 17 013 1171 1096 sta a.n009-*,* =curqbf 01157 1097 return derrq 1098 1099 01161 0 02255 1 1100 a.n001 ind tibadr 01162 0 00620 1 1101 a.n002 ind qcnt 01163 0 17000 3 1102 a.n003 ind fremem 01164 0 01173 1 1103 a.n004 ind errqtb 01165 0 06457 1 1104 a.n005 ind curque 01166 0 02261 1 1105 a.n006 ind pchbuf 01167 0 02262 1 1106 a.n007 ind pchadr assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 65 derrq -- subroutine to add entry to error message queue 01170 0 02263 1 1107 a.n008 ind pchlen 01171 0 06460 1 1108 a.n009 ind curqbf 1109 01172 004000 0 1110 l.n002 oct 004000 1111 1112 * the following two words simuulate a tib table entry for 1113 * the dia error queue. the first word corresponds to the 1114 * tib address word, but is not used here. the second word 1115 * points to the first buffer in the queue. 1116 01173 000000 0 1117 errqtb oct 0 01174 000000 0 1118 errqbf oct 0 01175 233100 0 01176 1119 even 01176 1120 tcurq bss 1 temporary for saving curque 01177 1121 tcurln bss 1 likewise for curqln 01200 1122 tcurbf bss 1 likewise for curqbf assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 66 dtrans -- transaction processor 1123 ttls dtrans -- transaction processor 1124 1125 this subroutine is scheduled after dia i/o is finished 1126 in order to process the results of the i/o 1127 1128 the transaction control word (tcword) 1129 indicates what was just done 1130 1131 dia lock is locked at entry 1132 01201 1133 dtrans null 01201 0 07 363 1564 1134 lda tcword-* get transaction control word 01202 0 74 160 1362 1135 tze dtr100-* do nothing if it's zero 01203 422 012 0 1136 icmpa tcreq is its value one that requires action? 01204 0 65 156 1362 1137 tpl dtr100-* no, go away 1138 01205 4 07 754 1161 1139 lda a.n001-*,* (tibadr) get real address of relevant tib 01206 4 10 323 1531 1140 tsy a.e019-*,* (setptw) virtualize it 01207 4332 00 0 1141 cax1 need it in x1 1142 01210 0 07 354 1564 1143 lda tcword-* get tcword back in a 01211 422 001 0 1144 icmpa tcdcwl did we read dcw list? 01212 0 64 007 1221 1145 tnz dtr010-* if not, try something else 1146 if so, set up dcw list to read the data 01213 4 10 275 1510 1147 tsy a.e001-*,* (rddata) 01214 0 71 155 1371 1148 tra dtr200-* error return (buffer allocation failed) 01215 673 002 0 1149 ila tcdata reset transaction control word 01216 0 17 346 1564 1150 sta tcword-* to "read data" 01217 4 10 272 1511 1151 tsy a.e002-*,* (conect) do the connect 01220 4 71 272 1512 1152 tra a.e003-*,* return to secondary dispatcher 1153 01221 1154 dtr010 null 01221 422 002 0 1155 icmpa tcdata did we read data? 01222 0 64 012 1234 1156 tnz dtr050-* if not, try something else end of binary card 00000023 01223 0 56 345 1570 1157 stz bflag-* indicate not blast write 01224 0 10 153 1377 1158 tsy write-* set up chains and notify control tables 1159 1160 01225 0 20 345 1572 1161 szn sndflg-* immediate send output response? 01226 0 74 132 1360 1162 tze dtr090-* no, just free mailbox and return 01227 0 41 314 1543 1163 ldx3 a.e033-* addr (savmbx) 01230 3 76 004 0 1164 aos sm.cd,3 turn on send output flag in mbx 01231 3333 00 0 1165 cx3a 01232 4 10 312 1544 1166 tsy a.e034-*,* (wmbx) write mailbox back 01233 4 71 257 1512 1167 tra a.e003-*,* (secdsp) and done 1168 01234 1169 dtr050 null 01234 422 003 0 1170 icmpa tcmbxr did we read a mailbox? 01235 0 64 003 1240 1171 tnz dtr060-* 01236 4 10 266 1524 1172 tsy a.e014-*,* (decmbx) yes, go decode it assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 67 dtrans -- transaction processor 01237 4 71 253 1512 1173 tra a.e003-*,* that's all 1174 01240 1175 dtr060 null 01240 422 005 0 1176 icmpa tcblst did we read blast message? 01241 0 64 044 1305 1177 tnz dtr080-* 01242 0 41 324 1566 1178 ldx3 blbuf-* yes, get buffer address 1179 01243 373 100 0 1180 iacx3 2*bufsiz save address of second buffer 01244 0 50 323 1567 1181 stx3 blbuf2-* 01245 0 76 323 1570 1182 aos bflag-* so write will know this is blast 1183 01246 4 03 272 1540 1184 ldx2 a.e029-*,* .crttb 1185 start scanning all tibs 01247 1186 dtr065 null 01247 2 07 000 0 1187 lda qtib,2 this is the real tib address 01250 4 10 261 1531 1188 tsy a.e019-*,* (setptw) virtualize it 01251 4332 00 0 1189 cax1 put in x1 01252 1 07 000 0 1190 lda t.stat,1 find out if it's dialed up 01253 0 34 306 1561 1191 ana l.e010-* tsfcd+tsfdsr 01254 0 27 305 1561 1192 cmpa l.e010-* carrier and dsr both on? 01255 0 64 021 1276 1193 tnz dtr075-* not dialed up, look at next 1194 01256 1 07 017 0 1195 lda t.type,1 get line type 01257 422 010 0 1196 icmpa 8 tn1200 on 202c? 01260 0 74 012 1272 1197 tze dtr070-* yes, treat like ascii 01261 422 005 0 1198 icmpa 5 regular terminal type (1-4)? 01262 0 65 014 1276 1199 tpl dtr075-* no, look at next tib 01263 422 002 0 1200 icmpa 2 is it ibm-type? 01264 0 74 003 1267 1201 tze dtr068-* it's 1050 01265 422 003 0 1202 icmpa 3 if not, 2741? 01266 0 64 004 1272 1203 tnz dtr070-* no 01267 0 41 300 1567 1204 dtr068 ldx3 blbuf2-* yes, point to ebcdic buffer 01270 673 001 0 1205 ila 1 set ebcdic indicator 01271 0 71 003 1274 1206 tra dtr072-* 1207 end of binary card 00000024 01272 0 41 274 1566 1208 dtr070 ldx3 blbuf-* ascii, point to ascii buffer 01273 673 000 0 1209 ila 0 set ascii indicator 01274 0 10 277 1573 1210 dtr072 tsy gblast-* allocate output buffers 01275 0 10 102 1377 1211 tsy write-* update output chain, tell control tables 1212 01276 273 002 0 1213 dtr075 iacx2 2 look at next entry in tib list 01277 4 23 242 1541 1214 cmpx2 a.e030-*,* (.crtte) reached end? 01300 0 64 747 1247 1215 tnz dtr065-* no, look at next tib 01301 473 300 0 1216 ilq 6*bufsiz yes, free message buffers 01302 0 41 264 1566 1217 ldx3 blbuf-* 01303 4 10 230 1533 1218 tsy a.e024-*,* (frebuf) 1219 01304 0 71 054 1360 1220 tra dtr090-* free mailbox and return 1221 01305 422 006 0 1222 dtr080 icmpa tcpchm patching memory? assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 68 dtrans -- transaction processor 01306 0 64 012 1320 1223 tnz dtr084-* no 01307 4 03 657 1166 1224 ldx2 a.n006-*,* (pchbuf) yes. address of buffer 01310 4 41 657 1167 1225 ldx3 a.n007-*,* (pchadr) address to patch 01311 4 47 657 1170 1226 ldq a.n008-*,* (pchlen) length of patch 01312 4 10 216 1530 1227 tsy a.e018-*,* (mvpgtg) move the patch into place 01313 1228 dtr083 null release buffer 01313 4 41 653 1166 1229 ldx3 a.n006-*,* (pchbuf) memory space to free 01314 4 47 654 1170 1230 ldq a.n008-*,* (pchlen) length of memory space 01315 4 10 646 1163 1231 tsy a.n003-*,* (fremem) 01316 4 10 201 1517 1232 tsy a.e009-*,* (gate) make sure dgetwk runs 01317 0 71 043 1362 1233 tra dtr100-* and done 1234 01320 422 007 0 1235 dtr084 icmpa tcdmpm dumping memory? 01321 0 74 772 1313 1236 tze dtr083-* yes. release temp memory space 1237 01322 422 010 0 1238 dtr085 icmpa tcinmb wrote data in mailbox? 01323 0 64 027 1352 1239 tnz dtr089-* no 01324 1 03 026 0 1240 ldx2 t.dcp,1 yes, must take buffers off chain now 01325 1 41 026 0 1241 ldx3 t.dcp,1 for call to frelbf 01326 0 56 243 1571 1242 stz dnblks-* initialize count 01327 2 07 001 0 1243 dtr086 lda bf.siz,2 get buffer size 01330 2337 17 0 1244 arl 15 in 32-word blocks 01331 773 001 0 1245 iaa 1 01332 0 16 237 1571 1246 asa dnblks-* update count 01333 2 07 001 0 1247 lda bf.flg,2 this the last one? 01334 0 31 217 1553 1248 cana l.e005-* bfflst 01335 0 64 005 1342 1249 tnz dtr088-* yes 01336 2 07 000 0 1250 lda bf.nxt,2 look at next 01337 0 74 003 1342 1251 tze dtr088-* aren't any 01340 0332 00 0 1252 cax2 end of binary card 00000025 01341 0 71 766 1327 1253 tra dtr086-* 01342 0 47 227 1571 1254 dtr088 ldq dnblks-* get block count 01343 4 10 164 1527 1255 tsy a.e017-*,* (instrp) take them off t.dcp chain 01344 4 10 150 1514 1256 tsy a.e005-*,* (frelbf) 01345 4 10 161 1526 1257 tsy a.e016-*,* (deque) remove accin from queue now 01346 673 013 0 1258 ila tcfree set transaction control word to indicate 01347 0 17 215 1564 1259 sta tcword-* end of transaction 01350 4 10 147 1517 1260 tsy a.e009-*,* (gate) make sure dgetwk runs 01351 0 71 011 1362 1261 tra dtr100-* done with transaction 1262 01352 422 011 0 1263 dtr089 icmpa tcmetr sent metering info? 01353 0 64 011 1364 1264 tnz dtr150-* 01354 4 41 171 1545 1265 ldx3 a.e035-*,* (gmebuf) get address of temporary buffer 01355 4 47 171 1546 1266 ldq a.e036-*,* (gmesiz) 01356 4 10 605 1163 1267 tsy a.n003-*,* (fremem) we're through with it now 01357 0 71 001 1360 1268 tra dtr090-* free mailbox and return 1269 01360 1270 dtr090 null free mailbox and return 01360 4 10 143 1523 1271 tsy a.e013-*,* frembx 01361 4 71 131 1512 1272 tra a.e003-*,* and return to secondary dispatcher assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 69 dtrans -- transaction processor 1273 01362 1274 dtr100 null nothing to do, unlock dia lock 01362 4 10 150 1532 1275 tsy a.e023-*,* unlock 01363 4 71 127 1512 1276 tra a.e003-*,* return to secondary dispatcher 1277 01364 1278 dtr150 null by default, we wrote data to cs 1279 free buffer chain that was sent 01364 4 41 141 1525 1280 ldx3 a.e015-*,* oldhed 01365 4 10 127 1514 1281 tsy a.e005-*,* frelbf 01366 4 10 140 1526 1282 tsy a.e016-*,* (deque) remove accin from queue now 01367 4 10 130 1517 1283 tsy a.e009-*,* (gate) make sure dgetwk runs 01370 0 71 772 1362 1284 tra dtr100-* unlock & return 1285 1286 01371 1287 dtr200 null attempt to allocate output buffers failed 1288 we will schedule rpmbx to reprocess the 1289 mailbox after 6 seconds 01371 4 43 145 1536 1290 ldx1 a.e027-*,* mbxno 01372 0 04 164 1556 1291 ldaq l.e008-* time, priority, and address of rpmbx 01373 4 10 144 1537 1292 tsy a.e028-*,* dspqur 01374 673 015 0 1293 ila tcmax set transaction control word to illegal value 01375 0 17 167 1564 1294 sta tcword-* 01376 0 71 764 1362 1295 tra dtr100-* assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 70 write -- subroutine to set up for sending output 1296 ttls write -- subroutine to set up for sending output 01377 1297 write subr wri,(x2) 01405 0 56 165 1572 1298 stz sndflg-* 01406 0 07 141 1547 1299 lda l.e001-* =tfwrit end of binary card 00000026 01407 1 31 001 0 1300 cana t.flg,1 output in progress? 01410 0 74 012 1422 1301 tze wri005-* no, check t.ocp chain 01411 1 07 002 0 1302 lda t.flg2,1 else see if it's in block acknowledge 01412 0 34 146 1560 1303 ana l.e009-* =tfblak+tfofc 01413 0 27 145 1560 1304 cmpa l.e009-* both on? 01414 0 74 006 1422 1305 tze wri005-* yes, don't chain to t.ocur 01415 1 03 025 0 1306 ldx2 t.echo,1 else check if there's pending echoing 01416 0 74 030 1446 1307 tze wri040-* obviously not, chain new stuff on 01417 2 07 002 0 1308 lda eb.tly,2 there's an echo buffer, anything in it? 01420 2337 11 0 1309 arl 9 isolate tally 01421 0 74 025 1446 1310 tze wri040-* no, chain new stuff on 01422 1311 wri005 null else check current chain pointer 01422 1 03 012 0 1312 ldx2 t.ocp,1 load the pointer 01423 0 64 004 1427 1313 tnz wri010-* already there, must chain on here too 1314 none, just set ptr 01424 4 07 071 1515 1315 lda a.e007-*,* =rhead (set by rddata) 01425 1 17 012 0 1316 sta t.ocp,1 new output chain 01426 0 71 016 1444 1317 tra wri030-* skip out 1318 01427 2 20 000 0 1319 wri010 szn bf.nxt,2 any forward ptr this block? 01430 0 74 003 1433 1320 tze wri020-* no, chain in here 01431 2 03 000 0 1321 ldx2 bf.nxt,2 chain to next block 01432 0 71 775 1427 1322 tra wri010-* loop 1323 01433 1324 wri020 null 01433 1325 cmeter mincs,m.over,l.e012-* 1326 01442 4 07 053 1515 1327 lda a.e007-*,* (=rhead) get head of new chain 01443 2 17 000 0 1328 sta bf.nxt,2 reset forward ptr in block 1329 01444 1330 wri030 null call "write" entry of control table interpreter 01444 4 10 054 1520 1331 tsy a.e010-*,* iwrite 01445 0 71 041 1506 1332 tra wribak-* 1333 01446 1334 wri040 null write is in progress 01446 1 20 013 0 1335 szn t.ocur,1 make sure there's a real live chain 01447 0 64 002 1451 1336 tnz 2 01450 1337 die 20 there had better be 1338 01451 1339 cmeter mincs,m.over,l.e012-* end of binary card 00000027 1340 hook new output chain onto active chain 01460 1 03 014 0 1341 ldx2 t.olst,1 get old last buffer 01461 4 07 034 1515 1342 lda a.e007-*,* =rhead (head of new data) 01462 2 17 000 0 1343 sta bf.nxt,2 attach new chain 01463 4 07 033 1516 1344 lda a.e008-*,* =rtail assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 71 write -- subroutine to set up for sending output 01464 1 17 014 0 1345 sta t.olst,1 update "last buffer" 1346 update output chain buffer count 01465 4 07 047 1534 1347 lda a.e025-*,* ndcws (same as number of new buffers) 01466 1 16 016 0 1348 asa t.ocnt,1 01467 0 20 101 1570 1349 szn bflag-* is this for blast? 01470 0 64 005 1475 1350 tnz wri050-* yes, don't check for threshold 01471 673 002 0 1351 ila bufthr is count over threshold now? 01472 1 27 016 0 1352 cmpa t.ocnt,1 01473 0 75 002 1475 1353 tmi wri050-* yes, it's all right 01474 0 76 076 1572 1354 aos sndflg-* no, ask for more output 1355 01475 1356 wri050 null 01475 1 07 017 0 1357 lda t.type,1 is this colts executive channel? 01476 422 023 0 1358 icmpa ttcolt 01477 0 74 007 1506 1359 tze wribak-* yes, don't call anybody 01500 1 07 004 0 1360 lda t.line,1 get line number to find out if it's 1361 hsla or lsla 01501 0 31 047 1550 1362 cana l.e002-* =hslafl 1363 call relevant "output available" entry 01502 0 64 003 1505 1364 tnz wri060-* 01503 4 10 016 1521 1365 tsy a.e011-*,* loutav 01504 0 71 002 1506 1366 tra wribak-* 01505 4 10 015 1522 1367 wri060 tsy a.e012-*,* houtav 01506 1368 wribak return write assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 72 storage for dtrans and write 1369 ttls storage for dtrans and write 1370 01510 0 05415 1 1371 a.e001 ind rddata subroutine to set up dcw lists to read data 01511 0 05656 1 1372 a.e002 ind conect 01512 0 33000 3 1373 a.e003 ind secdsp secondary dispatcher 01513 0 05746 1 1374 a.e004 ind dcwadr address of last-used dcw list 01514 0 16000 3 1375 a.e005 ind frelbf subroutine to free a linked list of input buffers 01515 0 05526 1 1376 a.e007 ind rhead head of buffer chain allocated by rddata 01516 0 05527 1 1377 a.e008 ind rtail tail " " " " " " 01517 0 00500 1 1378 a.e009 ind gate 01520 0 26000 3 1379 a.e010 ind iwrite 01521 0 27000 3 1380 a.e011 ind loutav lsla "output available" subroutine 01522 0 25000 3 1381 a.e012 ind houtav hsla " " " 01523 0 06233 1 1382 a.e013 ind frembx 01524 0 01644 1 1383 a.e014 ind decmbx end of binary card 00000028 01525 0 05355 1 1384 a.e015 ind oldhed old head of input chain just sent 01526 0 01010 1 1385 a.e016 ind deque 01527 0 05323 1 1386 a.e017 ind instrp 01530 0 32000 3 1387 a.e018 ind mvpgtg move data paging target subroutine 01531 0 34000 3 1388 a.e019 ind setptw set page table word 01532 0 05640 1 1389 a.e023 ind unlock 01533 0 15000 3 1390 a.e024 ind frebuf subroutine to free a single buffer 01534 0 05525 1 1391 a.e025 ind ndcws same as number of buffers read in 01535 0 00630 1 1392 a.e026 ind denq 01536 0 06355 1 1393 a.e027 ind mbxno 01537 0 14000 3 1394 a.e028 ind dspqur 01540 0 00665 0 1395 a.e029 ind .crttb head of tib list 01541 0 00666 0 1396 a.e030 ind .crtte end of tib list 01542 0 20000 3 1397 a.e032 ind getbuf 01543 0 02462 1 1398 a.e033 ind savmbx 01544 0 06130 1 1399 a.e034 ind wmbx 01545 0 04101 1 1400 a.e035 ind gmebuf 01546 0 04102 1 1401 a.e036 ind gmesiz 1402 1403 01547 000001 0 1404 l.e001 vfd 18/tfwrit 01550 001000 0 1405 l.e002 vfd 18/hslafl 01551 000037 0 1406 l.e003 oct 37 for testing 0 mod 32 01552 004000 0 1407 l.e004 oct 004000 inhibit overflow indicator 01553 040000 0 1408 l.e005 vfd 18/bfflst 01554 777776 0 1409 l.e007 vfd 18/ntfwrt 01555 233100 0 01556 1410 even 01556 000101 0 1411 l.e008 vfd 12/1,6/rtprty 01557 0 00231 1 1412 ind rpmbx for scheduling rpmbx after 1 second 1413 01560 004100 0 1414 l.e009 vfd 18/tfblak+tfofc 01561 000005 0 1415 l.e010 vfd 18/tsfcd+tsfdsr 01562 000004 0 1416 l.e011 vfd 18/gbfbla "blast" flag (for utilities) 01563 000001 0 1417 l.e012 dec 1 for meter increment assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 73 storage for dtrans and write 1418 1419 01564 000000 0 1420 tcword oct 0 transaction control word 01565 1421 dtrsvi bss 1 for saving indicators 1422 blast buffers are three consecutive 1423 double-size buffers 1424 first is ascii, second is ebcdic, 1425 third is correspondence 01566 1426 blbuf bss 1 address of blast buffers 01567 1427 blbuf2 bss 1 address of ebcdic blast buffers 01570 1428 bflag bss 1 flag indicating blast call 01571 1429 dnblks bss 1 number of 32-word blocks to take off chain assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 74 gblast -- subroutine to allocate buffers for blast output 1430 ttls gblast -- subroutine to allocate buffers for blast output 01572 1431 sndflg bss 1 1432 1433 this subroutine allocates the buffer(s) to be use 1434 to send a blast message to a particular line 1435 one double-size buffer is sent to ascii lines, 1436 or two to ebcdic lines. 1437 1438 the message is copied into the allocated buffers 1439 1440 inputs: 1441 x3 points to source for message 1442 a is 0 for ascii or 1 for ebcdic 1443 01573 1444 gblast subr gbl,(x2) 1445 end of binary card 00000029 01601 0 17 036 1637 1446 sta tflag-* save arguments 01602 0 50 036 1640 1447 stx3 gsrce-* 1448 01603 473 100 0 1449 ilq 2*bufsiz get double buffer size 01604 0 20 033 1637 1450 szn tflag-* ebcdic? 01605 0 74 002 1607 1451 tze 2 no 01606 4336 01 0 1452 qls 1 yes, double it again 01607 4 10 733 1542 1453 tsy a.e032-*,* getbuf 01610 1454 die 10 if we can't get buffers, forget it 1455 01611 0 50 030 1641 1456 stx3 gtarg-* store target address 01612 0 03 026 1640 1457 ldx2 gsrce-* 01613 0 57 027 1642 1458 stq gsize-* 01614 2 04 000 0 1459 gbl010 ldaq 0,2 get two words of source 01615 3 14 000 0 1460 staq 0,3 put them in target buffer 01616 273 002 0 1461 iacx2 2 01617 373 002 0 1462 iacx3 2 01620 673 776 0 1463 ila -2 reduce count 01621 0 16 021 1642 1464 asa gsize-* 01622 0 64 772 1614 1465 tnz gbl010-* not exhausted, go around again 1466 01623 0 41 016 1641 1467 ldx3 gtarg-* get address of head buffer 01624 4 50 671 1515 1468 stx3 a.e007-*,* (rhead) where write will look for it 01625 3333 00 0 1469 cx3a 01626 0 20 011 1637 1470 szn tflag-* ascii or ebcdic? 01627 0 74 004 1633 1471 tze gbl020-* ascii 01630 773 100 0 1472 iaa 2*bufsiz ebcdic, set forward pointer 01631 3 17 000 0 1473 sta bf.nxt,3 01632 0 71 002 1634 1474 tra 2 01633 3 56 000 0 1475 gbl020 stz bf.nxt,3 ascii, only one buffer 01634 4 17 662 1516 1476 sta a.e008-*,* (rtail) 01635 1477 return gblast 1478 1479 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 75 gblast -- subroutine to allocate buffers for blast output 01637 1480 tflag bss 1 ascii/ebcdic flag 01640 1481 gsrce bss 1 address of source characters 01641 1482 gtarg bss 1 address of target buffer 01642 1483 gsize bss 1 size of target buffer 1484 01643 000000 0 1485 ckecnt oct 0 consecutive checksum error count assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 76 decmbx -- routine to decode a mailbox from the cs 1486 ttls decmbx -- routine to decode a mailbox from the cs 1487 1488 this routine is called if transaction control word 1489 indicates that a mailbox has been read from the cs. 1490 it will interpret the mailbox that has been read into 1491 "savmbx" and take appropriate action depending on the 1492 i/o command and opcode in the mailbox 1493 1494 01644 1495 decmbx subr dec 01647 0 41 340 2207 1496 ldx3 a.f018-* =addr(savmbx) 01650 3 07 000 0 1497 lda sm.lno,3 get line number from mailbox 01651 0 34 363 2234 1498 ana l.f001-* =smlmsk end of binary card 00000030 01652 0 64 003 1655 1499 tnz dec005-* there's really a line number 01653 4 56 333 2206 1500 stz a.f017-*,* (tibadr) use 0 01654 0 71 004 1660 1501 tra dec010-* there's a 0 in the a for x1 01655 1502 dec005 null convert to tib address 01655 4 10 313 2170 1503 tsy a.f003-*,* gettib 01656 4 17 330 2206 1504 sta a.f017-*,* (tibadr) save real tib address 01657 4 10 652 1531 1505 tsy a.e019-*,* (setptw) virtualize it 01660 4332 00 0 1506 dec010 cax1 x1 gets virtual tib address 1507 pick up i/o command 01661 3 47 003 0 1508 ldq sm.op,3 get i/o command and opcode 01662 673 000 0 1509 ila 0 01663 0334 11 0 1510 lls 9 01664 0 17 372 2256 1511 sta opcode-* save opcode 1512 01665 673 000 0 1513 ila 0 01666 0334 11 0 1514 lls 9 get i/o command into a 01667 422 003 0 1515 icmpa wcd write command data? 01670 0 64 374 2264 1516 tnz dec210-* no, check for something else 1517 yes, search wcd table to determine 1518 where to go 01671 1519 trace mt.wcd,tr.mbx,(a.f023-*(*),opcode,sm.lno(3)) 1520 01707 0 03 262 2171 1521 ldx2 a.f004-* (wcdtab) 01710 0 07 346 2256 1522 lda opcode-* 01711 1523 dec015 null 01711 2 27 000 0 1524 cmpa 0,2 check opcode against table entry 01712 6 74 001 0 1525 tze 1,2* if it matches, go where table says 01713 273 002 0 1526 iacx2 2 else check next entry 01714 4 23 301 2215 1527 cmpx2 a.f025-*,* (wcdend) reached end? 01715 0 64 774 1711 1528 tnz dec015-* no, look at next entry 01716 1529 die 8 else invalid 1530 1531 01717 1532 dec020 null terminal accepted 01717 0 20 336 2255 1533 szn tibadr-* is this line really configured? 01720 0 74 207 2127 1534 tze dec100-* if not, forget it 01721 473 105 0 1535 ilq sndout queue "send output" assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 77 decmbx -- routine to decode a mailbox from the cs end of binary card 00000031 01722 4 10 250 2172 1536 tsy a.f005-*,* denq 01723 0 71 204 2127 1537 tra dec100-* 1538 01724 1539 dec030 null disconnect line 01724 0 20 331 2255 1540 szn tibadr-* is there a tib? 01725 0 74 202 2127 1541 tze dec100-* no, don't try to do anything 01726 0 07 307 2235 1542 lda l.f002-* (tfhang) 01727 1 72 001 0 1543 orsa t.flg,1 hang it up 01730 0 07 306 2236 1544 lda l.f003-* (ntflsn) 01731 1 32 001 0 1545 ansa t.flg,1 turn off listen flag 1546 call test-state entry of interpreter 01732 4 10 241 2173 1547 tsy a.f006-*,* (itest) 01733 0 71 174 2127 1548 tra dec100-* 1549 01734 1550 dec040 null disconnect all lines 01734 0 07 303 2237 1551 lda l.f004-* (gbfhng) turn on "hung up" flag 01735 4 72 237 2174 1552 orsa a.f007-*,* globsw 1553 now hang up all dialed-up lines 01736 4 03 244 2202 1554 ldx2 a.f013-*,* (.crttb) 1555 01737 1556 dec045 null 01737 2 07 000 0 1557 lda qtib,2 get real tib address 01740 4 10 571 1531 1558 tsy a.e019-*,* (setptw) virtualize it 01741 4332 00 0 1559 cax1 put virtual tib address in x1 01742 0 07 273 2235 1560 lda l.f002-* (tfhang) 01743 1 72 001 0 1561 orsa t.flg,1 set hangup flag in tib 01744 4 10 227 2173 1562 tsy a.f006-*,* (itest) 1563 01745 273 002 0 1564 iacx2 2 look at next entry in tib list 01746 4 23 261 2227 1565 cmpx2 a.f039-*,* (.crtte) reached end? 01747 0 64 770 1737 1566 tnz dec045-* no, go around again 01750 0 71 157 2127 1567 tra dec100-* 1568 01751 1569 dec046 null don't accept calls 01751 0 07 267 2240 1570 lda l.f005-* (gbfup) 01752 322 777 0 1571 iera -1 complement it 01753 4 32 221 2174 1572 ansa a.f007-*,* (globsw) turn it off 01754 0 71 153 2127 1573 tra dec100-* that's all 1574 01755 1575 dec050 null accept calls 1576 turn global "cs up" switch on 01755 0 07 263 2240 1577 lda l.f005-* (gbfup) 01756 4 72 216 2174 1578 orsa a.f007-*,* (globsw) 01757 3 07 004 0 1579 lda sm.cd,3 get buffer limit for input 01760 4 17 237 2217 1580 sta a.f029-*,* (blimit) save for future use 1581 now call itest for all lines in case they need to 1582 start listening again 01761 4 03 221 2202 1583 ldx2 a.f013-*,* .crttb 01762 2 07 000 0 1584 dec054 lda qtib,2 get tib address 01763 0 74 004 1767 1585 tze dec055-* none, skip it assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 78 decmbx -- routine to decode a mailbox from the cs 01764 4 10 545 1531 1586 tsy a.e019-*,* setptw 01765 4332 00 0 1587 cax1 now have virtual tib address 01766 4 10 205 2173 1588 tsy a.f006-*,* itest 01767 273 002 0 1589 dec055 iacx2 2 next entry in tib list 01770 4 23 237 2227 1590 cmpx2 a.f039-*,* (.crtte) reached the end? end of binary card 00000032 01771 0 64 771 1762 1591 tnz dec054-* no, do the next one 01772 0 71 135 2127 1592 tra dec100-* 1593 01773 1594 dec060 null reject request 1595 i.e. cs didn't have room for input 1596 we will schedule retry routine to retry 1597 "accept input" one second from now 01773 4 10 202 2175 1598 tsy a.f008-*,* reject 01774 0 71 133 2127 1599 tra dec100-* 1600 01775 1601 dec065 null enter receive mode 01775 0 20 260 2255 1602 szn tibadr-* not if no line 01776 0 74 131 2127 1603 tze dec100-* 01777 0 07 253 2252 1604 lda l.f015-* (tfercv) 02000 1 72 002 0 1605 orsa t.flg2,1 turn on flag (in second word) 02001 4 10 172 2173 1606 tsy a.f006-*,* (itest) tell interpreter 02002 0 71 125 2127 1607 tra dec100-* done 1608 02003 1609 dec070 null terminal rejected 02003 0 20 252 2255 1610 szn tibadr-* don't try to hang up nonexistent line 02004 0 74 123 2127 1611 tze dec100-* 02005 0 07 230 2235 1612 lda l.f002-* (tfhang) 02006 1 72 001 0 1613 orsa t.flg,1 hang it up, tell interpreter 02007 4 10 164 2173 1614 tsy a.f006-*,* (itest) 02010 0 71 117 2127 1615 tra dec100-* done 1616 02011 1617 dec075 null set line type 02011 0 20 244 2255 1618 szn tibadr-* if no line, skip it 02012 0 74 115 2127 1619 tze dec100-* 02013 3 07 004 0 1620 lda sm.cd,3 get new type 02014 1 17 017 0 1621 sta t.type,1 set it in tib 02015 0 71 112 2127 1622 tra dec100-* that's all 1623 02016 1624 dec080 null checksum error 02016 673 000 0 1625 ila 0 rewrite same mailbox as last time 02017 4 10 160 2177 1626 tsy a.f010-*,* wmbx 02020 4 71 176 2216 1627 tra a.f026-*,* (decbak) return now 1628 02021 1629 dec085 null blast message 02021 4 10 207 2230 1630 tsy a.f040-*,* (rblast) sets up dcw to read msg 02022 673 005 0 1631 ila tcblst set transaction control word 02023 4 17 166 2211 1632 sta a.f021-*,* (tcword) 02024 4 10 143 2167 1633 tsy a.f002-*,* (conect) 02025 4 71 171 2216 1634 tra a.f026-*,* (decbak) 1635 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 79 decmbx -- routine to decode a mailbox from the cs 02026 1636 dec090 null alter parameters, done by subroutine 02026 0 20 227 2255 1637 szn tibadr-* but not if there's no line 02027 0 74 100 2127 1638 tze dec100-* 02030 4 10 146 2176 1639 tsy a.f009-*,* (alterp) 02031 0 71 076 2127 1640 tra dec100-* done 1641 02032 1642 dec095 null dial out request 02032 0 20 223 2255 1643 szn tibadr-* but not if there's no line 02033 0 74 074 2127 1644 tze dec100-* 02034 4 10 164 2220 1645 tsy a.f032-*,* (acusr) done by subroutine 02035 0 71 072 2127 1646 tra dec100-* 1647 02036 1648 dec096 null dump memory 02036 0 50 221 2257 1649 stx3 dctemp-* save mailbox address 02037 3 47 007 0 1650 ldq sm.cd+3,3 get length of area to dump end of binary card 00000033 02040 0 57 223 2263 1651 stq pchlen-* so memory space can be freed later 02041 4 10 140 2201 1652 tsy a.f012-*,* (getmem) get equal amount of memory space 02042 1653 die 10 failed 02043 0 50 216 2261 1654 stx3 pchbuf-* save address of buffer 02044 0 41 213 2257 1655 ldx3 dctemp-* retrieve mailbox address 1656 copy memory to dump into buffer, it may come 1657 from upper 32k 02045 3 03 006 0 1658 ldx2 sm.cd+2,3 get source address 02046 3 47 007 0 1659 ldq sm.cd+3,3 get length of memory to be dumped 02047 0 41 212 2261 1660 ldx3 pchbuf-* get address of target 02050 4 10 133 2203 1661 tsy a.f014-*,* (mvpgsc) move data paging source 1662 02051 0 41 206 2257 1663 ldx3 dctemp-* retrieve mailbox address 02052 0 07 207 2261 1664 lda pchbuf-* put buffer address in mailbox 02053 3 17 006 0 1665 sta sm.cd+2,3 02054 673 007 0 1666 ila tcdmpm set tcword for dump_fnp order 02055 4 17 134 2211 1667 sta a.f021-*,* (tcword) 02056 473 075 0 1668 ilq diaftc we'll be writing to cs 02057 0 71 020 2077 1669 tra dec098-* enter common code with patch_fnp order 1670 02060 1671 dec097 null patch memory 02060 0 50 177 2257 1672 stx3 dctemp-* save mailbox addr 02061 3 47 007 0 1673 ldq sm.cd+3,3 get length of area to patch 02062 4 10 117 2201 1674 tsy a.f012-*,* (getmem) get equal amount of memory space 02063 1675 die 10 failed 02064 0 50 175 2261 1676 stx3 pchbuf-* save address of patch buffer 02065 3333 00 0 1677 cx3a 02066 0 41 171 2257 1678 ldx3 dctemp-* get mailbox addr back 02067 3 47 006 0 1679 ldq sm.cd+2,3 fnp address to patch 02070 0 57 172 2262 1680 stq pchadr-* save 02071 3 17 006 0 1681 sta sm.cd+2,3 setup transfer to temp buffer 02072 3 47 007 0 1682 ldq sm.cd+3,3 get length in words 02073 0 57 170 2263 1683 stq pchlen-* and save 02074 673 006 0 1684 ila tcpchm set tcword for patch_fnp order 02075 4 17 114 2211 1685 sta a.f021-*,* (tcword) assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 80 decmbx -- routine to decode a mailbox from the cs 02076 473 076 0 1686 ilq diactf we'll be reading from cs 02077 0 03 122 2221 1687 dec098 ldx2 a.f033-* (dcws) 02100 4 13 122 2222 1688 stx2 a.f034-*,* (dcwadr) 02101 673 012 0 1689 ila 10 space for five dcws 02102 4 17 121 2223 1690 sta a.f035-*,* (dcwlen) 1691 get cs address 02103 3 07 005 0 1692 lda sm.cd+1,3 bottom 18 bits anyway 02104 2 14 000 0 1693 staq 0,2 store along with opcode (set above) 02105 3 07 004 0 1694 lda sm.cd,3 high-order 6 bits of cs address? 02106 0 74 003 2111 1695 tze dec099-* not there end of binary card 00000034 02107 0336 06 0 1696 als 6 yes, put in dcw (24-29) 02110 2 72 001 0 1697 orsa 1,2 1698 02111 1699 dec099 null 02111 3 04 006 0 1700 ldaq sm.cd+2,3 get fnp address and tally 02112 0 37 141 2253 1701 ora l.f016-* (0,w.2) 02113 573 001 0 1702 iaq 1 convert tally to 36-bit words 02114 4337 01 0 1703 qrs 1 02115 2 14 002 0 1704 staq 2,2 put them in dcw 02116 3332 00 0 1705 cx2a get dcw address 02117 773 004 0 1706 iaa 4 updated 02120 4333 00 0 1707 cax3 into x3 1708 free the mailbox (can't use frembx because 1709 it assumes a new dcw list) 02121 4 10 103 2224 1710 tsy a.f036-*,* (wtimw) 02122 4 10 103 2225 1711 tsy a.f037-*,* (bint) 02123 373 004 0 1712 iacx3 4 02124 4 10 102 2226 1713 tsy a.f038-*,* (bdisc) 02125 4 10 042 2167 1714 tsy a.f002-*,* (conect) 02126 4 71 070 2216 1715 tra a.f026-*,* (decbak) done 1716 02127 1717 dec100 null through with wcd, free the mailbox 02127 4 10 051 2200 1718 tsy a.f011-*,* (frembx) 02130 4 71 066 2216 1719 tra a.f026-*,* (decbak) and return 1720 02131 1721 dec101 null msgsiz 02131 1 07 004 0 1722 lda t.line,1 find out if hsla line 02132 0 31 110 2242 1723 cana l.f007-* hslafl 02133 0 74 774 2127 1724 tze dec100-* it isn't, ignore this mailbox 02134 1 03 030 0 1725 ldx2 t.sfcm,1 get sfcm address 02135 3 07 004 0 1726 lda sm.cd,3 get new message size 02136 2 17 020 0 1727 sta sf.mms,2 save it 02137 0 71 770 2127 1728 tra dec100-* done 1729 02140 1730 dec105 null fnp_break order 02140 4 10 071 2231 1731 tsy a.f041-*,* (=brkptr) subr to do break point request 02141 0 71 766 2127 1732 tra dec100-* done 1733 02142 0 50 116 2260 1734 dec106 stx3 lctlmb-* line_control - save mbx addr 02143 4 10 030 2173 1735 tsy a.f006-*,* make test state call assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 81 decmbx -- routine to decode a mailbox from the cs 02144 0 56 114 2260 1736 stz lctlmb-* this means line_control done 02145 0 71 762 2127 1737 tra dec100-* 1738 02146 1739 dec107 null set_delay 02146 0 20 107 2255 1740 szn tibadr-* any line? 02147 0 74 760 2127 1741 tze dec100-* not really 02150 3333 00 0 1742 cx3a get pointer to 02151 773 004 0 1743 iaa sm.cd command data 02152 0332 00 0 1744 cax2 into x2 02153 4 10 057 2232 1745 tsy a.f044-*,* makdly 02154 0 71 753 2127 1746 tra dec100-* 1747 02155 1748 dec300 null set framing chars 02155 0 20 100 2255 1749 szn tibadr-* forget it if no line end of binary card 00000035 02156 0 74 751 2127 1750 tze dec100-* 02157 3 07 004 0 1751 lda sm.cd,3 get the characters 02160 1 17 040 0 1752 sta t.frmc,1 save in tib 02161 1 07 004 0 1753 lda t.line,1 02162 0 31 060 2242 1754 cana l.f007-* =hslafl 02163 0 74 744 2127 1755 tze dec100-* not hsla line, don't bother 02164 4 10 047 2233 1756 tsy a.f048-*,* =hmode 02165 0 71 742 2127 1757 tra dec100-* 1758 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 82 decmbx -- routine to decode a mailbox from the cs 1759 eject 02166 0 03756 1 1760 a.f001 ind gmeter sets up dcw list to report meters 02167 0 05656 1 1761 a.f002 ind conect 02170 0 22000 3 1762 a.f003 ind gettib translates line number to tib 02171 0 02552 1 1763 a.f004 ind wcdtab branch table for wcd opcodes 02172 0 00630 1 1764 a.f005 ind denq 02173 0 06000 3 1765 a.f006 ind itest interpreter's "test_state" entry 02174 0 24000 3 1766 a.f007 ind globsw global switch word 02175 0 04652 1 1767 a.f008 ind reject 02176 0 02664 1 1768 a.f009 ind alterp subroutine for "alter parameters" 02177 0 06130 1 1769 a.f010 ind wmbx 02200 0 06233 1 1770 a.f011 ind frembx 02201 0 21000 3 1771 a.f012 ind getmem 02202 0 00665 0 1772 a.f013 ind .crttb head of tib list 02203 0 31000 3 1773 a.f014 ind mvpgsc move data paging source subroutine 02204 0 04377 1 1774 a.f015 ind ecgifl echo negotiation input flush 02205 0 04327 1 1775 a.f016 ind makecn 02206 0 02255 1 1776 a.f017 ind tibadr some places can't quite reach it 02207 0 02462 1 1777 a.f018 ind savmbx 02210 0 05362 1 1778 a.f019 ind rddcw 02211 0 01564 1 1779 a.f021 ind tcword transaction control word 02212 0 05214 1 1780 a.f022 ind indata subroutine to set up dcws for sending 1781 input to cs 02213 0 06355 1 1782 a.f023 ind mbxno 02214 0 00704 0 1783 a.f024 ind .crmet 02215 0 02646 1 1784 a.f025 ind wcdend 02216 0 02347 1 1785 a.f026 ind decbak return from this routine 1786 *a.f027 unused 02217 0 05360 1 1787 a.f029 ind blimit 1788 *a.f030 unused 1789 02220 0 04444 1 1790 a.f032 ind acusr for starting acu 02221 0 05750 1 1791 a.f033 ind dcws standard dcw area 02222 0 05746 1 1792 a.f034 ind dcwadr 02223 0 05747 1 1793 a.f035 ind dcwlen 02224 0 06301 1 1794 a.f036 ind wtimw updates timw end of binary card 00000036 02225 0 05572 1 1795 a.f037 ind bint builds interrupt dcw 02226 0 05604 1 1796 a.f038 ind bdisc builds disconnect dcw 02227 0 00666 0 1797 a.f039 ind .crtte end of tib list 02230 0 04411 1 1798 a.f040 ind rblast 02231 0 13000 3 1799 a.f041 ind brkptr break point request handler 1800 *a.f042 unused 1801 *a.f043 unused 02232 0 04104 1 1802 a.f044 ind makdly 1803 *a.f045 unused 1804 *a.f046 unused 1805 *a.f047 unused 02233 0 05000 3 1806 a.f048 ind hmode subr that handles mode change for hsla lines 1807 1808 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 83 decmbx -- routine to decode a mailbox from the cs 02234 001777 0 1809 l.f001 vfd 18/smlmsk 02235 000040 0 1810 l.f002 vfd 18/tfhang 02236 777677 0 1811 l.f003 vfd 18/ntflsn 02237 000002 0 1812 l.f004 vfd 18/gbfhng 02240 000001 0 1813 l.f005 vfd 18/gbfup 02241 004100 0 1814 l.f006 vfd 18/tfblak+tfofc 02242 001000 0 1815 l.f007 vfd 18/hslafl 02243 000700 0 1816 l.f008 vfd 18/lnmask 02244 177777 0 1817 l.f009 vfd 18/nretry 02245 000002 0 1818 l.f010 vfd 18/tfitim 02246 004000 0 1819 l.f011 vfd 18/tfblak 02247 777775 0 1820 l.f012 vfd o18//tfitim 02250 000400 0 1821 l.f013 vfd 18/tfctrl 02251 773777 0 1822 l.f014 vfd o18//tfblak 02252 000004 0 1823 l.f015 vfd 18/tfercv 02253 1 00000 0 1824 l.f016 zero 0,w.2 1825 *l.f017 unused 02254 000002 0 1826 l.f018 vfd 18/tfdild 1827 *l.f019 unused 1828 1829 02255 1830 tibadr bss 1 real address of currently relevant tib 02256 1831 opcode bss 1 opcode from mailbox 02257 1832 dctemp bss 1 temporary 02260 000000 0 1833 lctlmb oct 0 contains mbx addr during line_control order 02261 1834 pchbuf bss 1 address of patch buffer 02262 1835 pchadr bss 1 address being patched 02263 1836 pchlen bss 1 number of words to patch assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 84 decmbx -- routine to decode a mailbox from the cs 1837 eject 02264 1838 dec210 null not wcd 02264 422 004 0 1839 icmpa wtx write text? 02265 0 64 034 2321 1840 tnz dec230-* no, try rtx 02266 0 07 770 2256 1841 lda opcode-* yes, get opcode 02267 422 012 0 1842 icmpa accout must be accept output or 02270 0 74 004 2274 1843 tze dec220-* accept last output 02271 422 013 0 1844 icmpa aclout 02272 0 74 002 2274 1845 tze dec220-* 02273 1846 die 8 otherwise, forget it 1847 02274 1848 dec220 null set up to read dcw list 1849 02274 1850 trace mt.wtx,tr.mbx,(a.f023-*(*),sm.lno(3),sm.adr+1(3)) end of binary card 00000037 1851 02312 0 20 743 2255 1852 szn tibadr-* is there really a line? 02313 0 74 614 2127 1853 tze dec100-* if not, just free mailbox and return 1854 02314 4 10 674 2210 1855 tsy a.f019-*,* rddcw 1856 1857 set transaction control word to 02315 673 001 0 1858 ila tcdcwl "dcw list read" 02316 4 17 673 2211 1859 sta a.f021-*,* tcword 02317 4 10 650 2167 1860 tsy a.f002-*,* conect 02320 0 71 027 2347 1861 tra decbak-* and return 1862 1863 02321 1864 dec230 null i/o command is rtx or invalid 02321 422 002 0 1865 icmpa rtx 02322 0 74 002 2324 1866 tze 2 02323 1867 die 17 1868 1869 it's rtx, opcode must be 02324 0 07 732 2256 1870 lda opcode-* input accepted 02325 422 005 0 1871 icmpa inacc 02326 0 74 002 2330 1872 tze 2 02327 1873 die 8 1874 02330 1875 trace mt.rtx,tr.mbx,(a.f023-*(*),sm.lno(3)) 1876 1877 put together dcw list for transmitting input 1878 to cs 02343 4 10 647 2212 1879 tsy a.f022-*,* indata 1880 02344 673 004 0 1881 ila tcwrd set transaction control word to "wrote data" 02345 4 17 644 2211 1882 sta a.f021-*,* tcword end of binary card 00000038 02346 4 10 621 2167 1883 tsy a.f002-*,* conect 1884 02347 1885 decbak return decmbx assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 85 decmbx -- routine to decode a mailbox from the cs 1886 02351 1887 dec350 null set echnego break table 02351 0 20 704 2255 1888 szn tibadr-* 02352 0 74 555 2127 1889 tze dec100-* no line? 02353 3333 00 0 1890 cx3a copy data 02354 773 004 0 1891 iaa sm.cd 02355 0332 00 0 1892 cax2 02356 4 10 627 2205 1893 tsy a.f016-*,* (makecn) 02357 0 71 550 2127 1894 tra dec100-* 1895 02360 1896 dec360 null start echo negotiation 1897 which has the option to refuse echnegooin 1898 by zeroing t.scll for any reason whatsoever. 02360 0 20 675 2255 1899 szn tibadr-* 02361 0 74 546 2127 1900 tze dec100-* no line 02362 1 03 025 0 1901 ldx2 t.echo,1 is there pending echoing? 02363 0 74 004 2367 1902 tze dec370-* no 02364 2 07 002 0 1903 lda eb.tly,2 maybe 02365 2337 11 0 1904 arl 9 isolate tally to make sure 02366 0 64 014 2402 1905 tnz dec380-* yes, can't echnego 02367 1 20 026 0 1906 dec370 szn t.dcp,1 is there a dia-queued input chain? 02370 0 64 012 2402 1907 tnz dec380-* yes, don't negotiate 02371 4 10 613 2204 1908 tsy a.f015-*,* (engifl) get icp chain queued 02372 1 20 044 0 1909 szn t.entp,1 make sure there had better be a table 02373 0 74 007 2402 1910 tze dec380-* punt if not 02374 3 07 004 0 1911 lda sm.cd,3 get # of chars seen by ring 0 02375 1 27 043 0 1912 cmpa t.sncc,1 is it the same as # of chars we sent out? 02376 0 64 004 2402 1913 tnz dec380-* no, can't echnego 02377 3 07 005 0 1914 lda sm.cd+1,3 get screen length left, 0 works too. 02400 1 17 042 0 1915 sta t.scll,1 ok, we're echo negotiating 02401 0 71 526 2127 1916 tra dec100-* 02402 1917 dec380 null fail to start echo negotiation 02402 1 56 042 0 1918 stz t.scll,1 shoulda been zero anyway for engogo 02403 0 71 524 2127 1919 tra dec100-* 1920 02404 1921 dec400 null stop echo negotiation 02404 0 20 651 2255 1922 szn tibadr-* 02405 0 74 522 2127 1923 tze dec100-* 02406 4 10 576 2204 1924 tsy a.f015-*,* get queued stuff out 02407 473 107 0 1925 ilq engaof acknowledge_echnego_stop 02410 4 10 562 2172 1926 tsy a.f005-*,* (denq) send one 02411 0 71 771 2402 1927 tra dec380-* turn off negotiation 1928 02412 1929 dec440 null init echo negotiation 02412 0 20 643 2255 1930 szn tibadr-* 02413 0 74 514 2127 1931 tze dec100-* no line? 02414 4 10 570 2204 1932 tsy a.f015-*,* get the act synchronized end of binary card 00000039 02415 1 56 043 0 1933 stz t.sncc,1 synchronize ctrs 02416 473 106 0 1934 ilq engain acknowledge_echnego_init 02417 4 10 553 2172 1935 tsy a.f005-*,* (denq) assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 86 decmbx -- routine to decode a mailbox from the cs 02420 0 71 507 2127 1936 tra dec100-* 1937 02421 1938 dec450 null set input flow control chars 02421 3 07 004 0 1939 lda sm.cd,3 get the characters 02422 1 17 045 0 1940 sta t.ifch,1 02423 3 20 005 0 1941 szn sm.cd+1,3 timeout options specified? 02424 0 74 004 2430 1942 tze dec455-* no 02425 0 07 620 2245 1943 lda l.f010-* =tfitim 02426 1 72 036 0 1944 orsa t.flg3,1 yes, set it in tib 02427 0 71 500 2127 1945 tra dec100-* 02430 0 07 617 2247 1946 dec455 lda l.f012-* =^tfitim 02431 1 32 036 0 1947 ansa t.flg3,1 otherwise, turn it off 02432 0 71 475 2127 1948 tra dec100-* 1949 02433 1950 dec460 null set output flow control chars 02433 3 07 004 0 1951 lda sm.cd,3 get the chars 02434 1 27 046 0 1952 cmpa t.ofch,1 have they changed? 02435 0 74 003 2440 1953 tze dec462-* no, may not want to reinitialize 02436 1 17 046 0 1954 sta t.ofch,1 else store them 02437 0 71 005 2444 1955 tra dec463-* and skip other test 02440 1 07 002 0 1956 dec462 lda t.flg2,1 check for modes already on 02441 0 34 600 2241 1957 ana l.f006-* =tfblak+tfofc 02442 0 27 577 2241 1958 cmpa l.f006-* both on? 02443 0 74 002 2445 1959 tze dec464-* yes, don't initialize block count 02444 1 56 047 0 1960 dec463 stz t.omct,1 initialize message count 02445 3 20 005 0 1961 dec464 szn sm.cd+1,3 block acknowledgement protocol? 02446 0 74 004 2452 1962 tze dec465-* no 02447 0 07 577 2246 1963 lda l.f011-* =tfblak 02450 1 72 002 0 1964 orsa t.flg2,1 yes, set it in tib 02451 0 71 456 2127 1965 tra dec100-* 02452 0 07 577 2251 1966 dec465 lda l.f014-* =^tfblak 02453 1 32 002 0 1967 ansa t.flg2,1 otherwise, turn it off 02454 0 71 453 2127 1968 tra dec100-* 1969 02455 1970 dec470 null report meters 02455 4 20 537 2214 1971 szn a.f024-*,* (.crmet) is metering enabled? 02456 0 74 451 2127 1972 tze dec100-* no, just free mailbox 02457 4 10 507 2166 1973 tsy a.f001-*,* gmeter subroutine does it all 02460 0 71 667 2347 1974 tra decbak-* 1975 1976 02461 233100 0 02462 1977 even 02462 1978 savmbx bss fmbxsz copy of input mailbox 1979 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 87 decmbx -- routine to decode a mailbox from the cs 1980 eject 1981 1982 this macro is used to set up a branch table fo 1983 mailbox opcodes. it generates a word containing 1984 the opcode to be checked for, and a word containing 1985 the address to branch to for that opcode. 1986 1987 optab macro c,m 1988 zero #1 1989 ind #2 1990 rem 1991 endm optab 1992 02552 1993 wcdtab null table of locations for transfer 1994 on wcd opcodes 02552 1995 optab termac,dec020 end of binary card 00000040 02554 1996 optab dislin,dec030 02556 1997 optab disall,dec040 02560 1998 optab accall,dec050 02562 1999 optab rejreq,dec060 02564 2000 optab entrcv,dec065 02566 2001 optab trmrej,dec070 02570 2002 optab setcls,dec075 02572 2003 optab cserr,dec080 02574 2004 optab alter,dec090 02576 2005 optab blast,dec085 02600 2006 optab disacc,dec100 02602 2007 optab incomp,dec100 02604 2008 optab frmchr,dec300 02606 2009 optab brack,dec100 02610 2010 optab dodial,dec095 02612 2011 optab dmpmem,dec096 02614 2012 optab pchmem,dec097 02616 2013 optab brkpnt,dec105 02620 2014 optab noacc,dec046 end of binary card 00000041 02622 2015 optab linctl,dec106 02624 2016 optab setdly,dec107 02626 2017 optab msgsiz,dec101 02630 2018 optab engstb,dec350 02632 2019 optab engogo,dec360 02634 2020 optab engoff,dec400 02636 2021 optab engini,dec440 02640 2022 optab infcc,dec450 02642 2023 optab outfcc,dec460 02644 2024 optab rmeter,dec470 02646 0 02646 1 2025 wcdend zero * to mark end of table 2026 2027 2028 * assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 88 decmbx -- routine to decode a mailbox from the cs 2029 * this subroutine is called by a linctl opblock to see if the 2030 * current test state call is caused by a line_control 2031 * order. the convention is that during a line_control order, 2032 * "lctlmb" is non-zero, and contains the mailbox addr 2033 * 02647 2034 lctlck subr lct,(a) 02655 4 07 315 3172 2035 lda a.g007-*,* =lctlmb, pick up mailbox addr 02656 0 74 004 2662 2036 tze lctret-* not line contorl 02657 773 004 0 2037 iaa sm.cd get addr of data 02660 4333 00 0 2038 cax3 02661 0 76 766 2647 2039 aos lctlck-* take skip return 02662 2040 lctret return lctlck assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 89 alterp -- subroutine to handle "alter parameters" 2041 ttls alterp -- subroutine to handle "alter parameters" 2042 2043 2044 this subroutine does whatever is necessary when an 2045 "alter parameters" opcode is sent from the cs 2046 2047 the subcommand to be performed is in the first 9 2048 bits of the command data in the mailbox 2049 for most of the subcommands currently implemented, 2050 the low-order bit of the first word of command 2051 data indicates "on" or "off" 2052 2053 at entry: 2054 x1 -- virtual tib address 2055 x3 -- mailbox address 2056 02664 2057 alterp subr alt 2058 02667 2059 trace mt.alt,tr.mbx,(sm.cd(3)) end of binary card 00000042 2060 02677 0 56 333 3232 2061 stz caltst-* initialize "call itest" flag 02700 0 56 333 3233 2062 stz chmode-* and "call hmode" flag 02701 0 56 333 3234 2063 stz checho-* and "change acho mode" flag 02702 0 07 272 3174 2064 lda a.g009-* =t.flg,1 02703 0 17 334 3237 2065 sta flgptr-* initialize pointer to t.flg 02704 1 07 017 0 2066 lda t.type,1 is this colts executive channel? 02705 422 023 0 2067 icmpa ttcolt if so, we use a much shorter 02706 0 74 243 3151 2068 tze alt500-* list of subcommands 02707 3 07 004 0 2069 lda sm.cd,3 get first 18 bits of command data 02710 2335 11 0 2070 lrl 9 isolate subcommand 02711 0 03 253 3164 2071 ldx2 a.g001-* addr(alttab) 02712 2072 alt010 null 02712 2 27 000 0 2073 cmpa 0,2 does subcommand match table entry? 02713 6 74 001 0 2074 tze 1,2* yes, go process it 02714 273 002 0 2075 iacx2 2 no, check next 02715 4 23 261 3176 2076 cmpx2 a.g011-*,* (altend) if not at end of table 02716 0 64 774 2712 2077 tnz alt010-* 02717 2078 die 8 else die 2079 02720 2080 alt020 null crecho 02720 0 07 260 3200 2081 lda l.g001-* =tfcrec 02721 0 71 067 3010 2082 tra alt135-* join common code 2083 02722 2084 alt030 null lfecho 02722 0 07 257 3201 2085 lda l.g002-* =tflfec 02723 0 71 065 3010 2086 tra alt135-* 2087 02724 2088 alt040 null tbecho 02724 0 07 256 3202 2089 lda l.g003-* =tftbec 02725 0 71 064 3011 2090 tra alt140-* assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 90 alterp -- subroutine to handle "alter parameters" 2091 02726 2092 alt050 null handle quit 02726 0 07 255 3203 2093 lda l.g004-* =tfquit 02727 0 71 063 3012 2094 tra alt150-* 2095 02730 2096 alt060 null listen 02730 4 10 247 3177 2097 tsy a.g012-*,* (setsiz) pick up buffer size from mailbox 02731 0 07 253 3204 2098 lda l.g005-* =tflisn 02732 0 76 300 3232 2099 aos caltst-* call itest when done 2100 02733 0 71 057 3012 2101 tra alt150-* 2102 02734 2103 alt070 null lock 02734 0 07 253 3207 2104 lda l.g008-* =tfctrl end of binary card 00000043 02735 0 71 055 3012 2105 tra alt150-* 2106 02736 2107 alt080 null full duplex 02736 0 07 252 3210 2108 lda l.g009-* =tffdpx 02737 0 71 053 3012 2109 tra alt150-* 2110 02740 2111 alt090 null change-string 02740 0 71 222 3162 2112 tra altbak-* that's all 2113 02741 2114 alt100 null who-are-you 2115 must start control tables at special place 2116 to read answerback 02741 0 07 243 3204 2117 lda l.g005-* =tflisn 02742 1 31 001 0 2118 cana t.flg,1 if line isn't listening, 02743 0 74 217 3162 2119 tze altbak-* don't bother 2120 02744 673 774 0 2121 ila -wruinc check list of line types for which wru is no good 02745 0 03 223 3170 2122 ldx2 a.g005-* addr(wrutbl) 02746 1 47 017 0 2123 ldq t.type,1 2124 02747 2 67 000 0 2125 alt101 cmpq 0,2 is this one? 02750 0 74 007 2757 2126 tze alt102-* yes 02751 273 001 0 2127 iacx2 1 look at next 02752 773 001 0 2128 iaa 1 exhausted table? 02753 0 64 774 2747 2129 tnz alt101-* no 2130 02754 473 114 0 2131 ilq wrutim send "wru timeout" right away 02755 4 10 214 3171 2132 tsy a.g006-*,* denq 02756 0 71 204 3162 2133 tra altbak-* 2134 02757 0 03 210 3167 2135 alt102 ldx2 a.g004-* addr(ctrl) 02760 2 07 004 0 2136 lda ct.wru,2 address of special wait block 02761 1 17 003 0 2137 sta t.cur,1 tell interpreter to start there 02762 1 56 022 0 2138 stz t.reta,1 in case we yanked it out of subr 02763 4 10 202 3165 2139 tsy a.g002-*,* itest 02764 0 71 176 3162 2140 tra altbak-* assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 91 alterp -- subroutine to handle "alter parameters" 2141 02765 2142 alt110 null echoplex mode 02765 0 07 225 3212 2143 lda l.g011-* =tfecpx 02766 0 71 022 3010 2144 tra alt135-* 2145 02767 2146 alt120 null framei mode 02767 1 07 004 0 2147 lda t.line,1 hsla line? 02770 0 31 221 3211 2148 cana l.g010-* =hslafl 02771 0 74 013 3004 2149 tze alt125-* no, buffer sizes are uninteresting 02772 6337 00 0 2150 qrl 0 check the flag 02773 0 74 011 3004 2151 tze alt125-* turning it off, no buffer sizes 02774 1 03 030 0 2152 ldx2 t.sfcm,1 get sfcm address 02775 3 07 005 0 2153 lda sm.cd+1,3 get intermediate buffer size 02776 0 10 340 3336 2154 tsy rndsiz-* get it in words 02777 2 17 016 0 2155 sta sf.bsz,2 save it 03000 3 07 006 0 2156 lda sm.cd+2,3 get size to be used during frame 03001 0 74 002 3003 2157 tze 2 if any 03002 0 10 334 3336 2158 tsy rndsiz-* in words 03003 2 17 017 0 2159 sta sf.fbs,2 save it 2160 03004 2161 alt125 null end of binary card 00000044 03004 673 001 0 2162 ila t.flg2-t.flg 03005 0 16 232 3237 2163 asa flgptr-* update flgptr to point to t.flg2 03006 0 07 213 3221 2164 lda l.g018-* tffrmi 03007 0 71 002 3011 2165 tra alt140-* 2166 03010 0 76 224 3234 2167 alt135 aos checho-* echoing mode changed 2168 03011 2169 alt140 null 03011 0 76 222 3233 2170 aos chmode-* 2171 03012 2172 alt150 null flag on or off? 03012 6337 00 0 2173 qrl 0 03013 0 74 003 3016 2174 tze alt160-* 03014 4 72 223 3237 2175 orsa flgptr-*,* on 03015 0 71 003 3020 2176 tra alt170-* 03016 2177 alt160 null off 03016 322 777 0 2178 iera -1 03017 4 32 220 3237 2179 ansa flgptr-*,* 2180 03020 2181 alt170 null mode changed? 03020 0 20 213 3233 2182 szn chmode-* 03021 0 74 014 3035 2183 tze alt180-* no 03022 1 07 004 0 2184 lda t.line,1 yes, hsla line? 03023 0 31 166 3211 2185 cana l.g010-* hslafl 03024 0 74 002 3026 2186 tze alt175-* no 03025 4 10 141 3166 2187 tsy a.g003-*,* call hmode 2188 03026 0 20 206 3234 2189 alt175 szn checho-* did we change an echoing mode? 03027 0 74 006 3035 2190 tze alt180-* no assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 92 alterp -- subroutine to handle "alter parameters" 03030 1 07 001 0 2191 lda t.flg,1 03031 0 31 166 3217 2192 cana l.g016-* tflfec+tfcrec+tfecpx 03032 0 64 003 3035 2193 tnz alt180-* echoing not all off 03033 4 10 140 3173 2194 tsy a.g008-*,* (deldly) we have stopped echoing, remove delay ta 03034 1 56 037 0 2195 stz t.dtp,1 2196 03035 2197 alt180 null call itest? 03035 0 20 175 3232 2198 szn caltst-* 03036 0 74 124 3162 2199 tze altbak-* no,return 03037 4 10 126 3165 2200 tsy a.g002-*,* itest 03040 0 71 122 3162 2201 tra altbak-* 2202 03041 2203 alt190 null dump input 03041 0 07 153 3214 2204 lda l.g013-* =tfrabt 03042 1 72 002 0 2205 orsa t.flg2,1 set read abort flag 03043 4 10 122 3165 2206 tsy a.g002-*,* itest 03044 0 71 116 3162 2207 tra altbak-* 2208 03045 2209 alt200 null dump output 03045 0 07 140 3205 2210 lda l.g006-* =tfwabt 03046 1 72 001 0 2211 orsa t.flg,1 on 03047 0 07 137 3206 2212 lda l.g007-* =^tfwrit 03050 1 32 001 0 2213 ansa t.flg,1 tfwrit off 03051 4 10 114 3165 2214 tsy a.g002-*,* itest 03052 0 71 110 3162 2215 tra altbak-* 2216 03053 2217 alt210 null xmit hold end of binary card 00000045 03053 0 07 140 3213 2218 lda l.g012-* =tfxhld 03054 6337 00 0 2219 qrl 0 on or off? 03055 0 74 003 3060 2220 tze alt220-* 03056 1 72 002 0 2221 orsa t.flg2,1 on, just do it 03057 0 71 103 3162 2222 tra altbak-* 03060 2223 alt220 null off, we'll have to do test-state also 03060 322 777 0 2224 iera -1 03061 1 32 002 0 2225 ansa t.flg2,1 turn flag off 03062 4 10 103 3165 2226 tsy a.g002-*,* itest 03063 0 71 077 3162 2227 tra altbak-* 2228 03064 2229 alt230 null replay mode 03064 0 07 131 3215 2230 lda l.g014-* (=tfrply) get bit 2231 03065 6337 00 0 2232 alt240 qrl 0 on or off? 03066 0 74 003 3071 2233 tze alt245-* off, do it 03067 1 72 002 0 2234 orsa t.flg2,1 turn it on 03070 0 71 072 3162 2235 tra altbak-* 2236 03071 2237 alt245 null 03071 322 777 0 2238 iera -1 invert flag bit 03072 1 32 002 0 2239 ansa t.flg2,1 turn it off 03073 0 71 067 3162 2240 tra altbak-* assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 93 alterp -- subroutine to handle "alter parameters" 2241 03074 2242 alt250 null polite mode 03074 0 07 122 3216 2243 lda l.g015-* (=tfplit) get the bit 03075 0 71 770 3065 2244 tra alt240-* common code to set second flag word bits 2245 03076 2246 alt260 null set buffer size 03076 0 10 253 3351 2247 tsy setsiz-* just do it 03077 0 71 063 3162 2248 tra altbak-* and begone 2249 03100 2250 alt270 null breakall mode 03100 673 035 0 2251 ila t.flg3-t.flg 03101 0 16 136 3237 2252 asa flgptr-* make flgptr point to t.flg3 03102 0 07 120 3222 2253 lda l.g019-* (=tfbral) prepare to set breakall flag 03103 0 71 706 3011 2254 tra alt140-* 2255 03104 2256 alt280 null prefixnl mode 03104 673 001 0 2257 ila t.flg2-t.flg 03105 0 16 132 3237 2258 asa flgptr-* 03106 0 07 115 3223 2259 lda l.g020-* (=tfpfnl) 03107 0 71 703 3012 2260 tra alt150-* 2261 03110 2262 alt290 null iflow mode 03110 673 001 0 2263 ila t.flg2-t.flg make flgptr point to t.flg2 03111 0 16 126 3237 2264 asa flgptr-* 03112 1 07 004 0 2265 lda t.line,1 is it hsla line? 03113 0 31 076 3211 2266 cana l.g010-* =hslafl 03114 0 74 005 3121 2267 tze alt295-* 03115 1 03 030 0 2268 ldx2 t.sfcm,1 if so, have to update buffer size 03116 3 07 005 0 2269 lda sm.cd+1,3 get it from mailbox 03117 0 10 217 3336 2270 tsy rndsiz-* 03120 2 17 017 0 2271 sta sf.fbs,2 03121 0 07 103 3224 2272 alt295 lda l.g021-* =tfifc end of binary card 00000046 03122 0 71 667 3011 2273 tra alt140-* go set it 2274 03123 2275 alt300 null oflow mode 03123 673 001 0 2276 ila t.flg2-t.flg make flgptr point at t.flg2 03124 0 16 113 3237 2277 asa flgptr-* 03125 0 07 100 3225 2278 lda l.g022-* =tfofc 03126 0 71 663 3011 2279 tra alt140-* go do it 2280 03127 2281 alt310 null odd parity 03127 673 035 0 2282 ila t.flg3-t.flg make flgptr point at t.flg3 03130 0 16 107 3237 2283 asa flgptr-* 03131 0 07 076 3227 2284 lda l.g024-* =tfoddp 03132 0 71 657 3011 2285 tra alt140-* 2286 03133 2287 alt320 null no input parity 03133 673 035 0 2288 ila t.flg3-t.flg make flgptr point at t.flg3 03134 0 16 103 3237 2289 asa flgptr-* 03135 0 07 073 3230 2290 lda l.g025-* =tf8in assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 94 alterp -- subroutine to handle "alter parameters" 03136 0 71 654 3012 2291 tra alt150-* 2292 03137 2293 alt330 null no output parity 03137 673 035 0 2294 ila t.flg3-t.flg make flgptr point at t.flg3 03140 0 16 077 3237 2295 asa flgptr-* 03141 0 07 070 3231 2296 lda l.g026-* =tf8out 03142 0 71 647 3011 2297 tra alt140-* 2298 2299 03143 2300 alt400 null send line break 2301 must start control tables at special place 2302 to send line break 2303 03143 0 03 024 3167 2304 ldx2 a.g004-* addr(ctrl) 03144 2 07 006 0 2305 lda ct.brk,2 address of special wait block 03145 1 17 003 0 2306 sta t.cur,1 tell interpreter to start there 03146 1 56 022 0 2307 stz t.reta,1 in case we yanked it out of subr 03147 4 10 016 3165 2308 tsy a.g002-*,* itest 03150 0 71 012 3162 2309 tra altbak-* 2310 03151 2311 alt500 null come here for colts channel 03151 3 07 004 0 2312 lda sm.cd,3 get ifrst 18 bits of command data 03152 2335 11 0 2313 lrl 9 isolate subcommand 03153 0 03 022 3175 2314 ldx2 a.g010-* addr (alctab) 03154 2315 alt510 null 03154 2 27 000 0 2316 cmpa 0,2 does subcommand match table entry? 03155 6 74 001 0 2317 tze 1,2* yes, go process it 03156 273 002 0 2318 iacx2 2 no, check next 03157 0 23 152 3331 2319 cmpx2 alcend-* reached end of table? 03160 0 64 774 3154 2320 tnz alt510-* no, look again 03161 0 71 001 3162 2321 tra altbak-* ignore any not in table 2322 03162 2323 altbak return alterp 2324 2325 2326 03164 0 03240 1 2327 a.g001 ind alttab 03165 0 06000 3 2328 a.g002 ind itest "test_state" entry of interpreter 03166 0 05000 3 2329 a.g003 ind hmode "change-mode" entry of hsla_man 03167 0 01000 3 2330 a.g004 ind ctrl 03170 0 03332 1 2331 a.g005 ind wrutbl table of invalid "wru" line types end of binary card 00000047 03171 0 00630 1 2332 a.g006 ind denq 03172 0 02260 1 2333 a.g007 ind lctlmb 03173 0 04145 1 2334 a.g008 ind deldly 03174 1 00001 0 2335 a.g009 ind t.flg,1 used to set up address variable for flag word 03175 0 03323 1 2336 a.g010 ind alctab 03176 0 03322 1 2337 a.g011 ind altend 03177 0 03351 1 2338 a.g012 ind setsiz 2339 03200 002000 0 2340 l.g001 vfd 18/tfcrec assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 95 alterp -- subroutine to handle "alter parameters" 03201 001000 0 2341 l.g002 vfd 18/tflfec 03202 004000 0 2342 l.g003 vfd 18/tftbec 03203 000200 0 2343 l.g004 vfd 18/tfquit 03204 000100 0 2344 l.g005 vfd 18/tflisn 03205 010000 0 2345 l.g006 vfd 18/tfwabt 03206 777776 0 2346 l.g007 vfd 18/ntfwrt 03207 000400 0 2347 l.g008 vfd 18/tfctrl 03210 000004 0 2348 l.g009 vfd 18/tffdpx 03211 001000 0 2349 l.g010 vfd 18/hslafl 03212 200000 0 2350 l.g011 vfd 18/tfecpx 03213 000001 0 2351 l.g012 vfd 18/tfxhld 03214 000010 0 2352 l.g013 vfd 18/tfrabt 03215 000400 0 2353 l.g014 vfd 18/tfrply 03216 002000 0 2354 l.g015 vfd 18/tfplit 03217 203000 0 2355 l.g016 vfd 18/tflfec+tfcrec+tfecpx 03220 000400 0 2356 l.g017 vfd 18/bfmsiz 03221 040000 0 2357 l.g018 vfd 18/tffrmi 03222 000020 0 2358 l.g019 vfd 18/tfbral 03223 400000 0 2359 l.g020 vfd 18/tfpfnl 03224 000040 0 2360 l.g021 vfd 18/tfifc 03225 000100 0 2361 l.g022 vfd 18/tfofc 03226 004000 0 2362 l.g023 vfd 18/tfblak 03227 000400 0 2363 l.g024 vfd 18/tfoddp 03230 000100 0 2364 l.g025 vfd 18/tf8in 03231 000200 0 2365 l.g026 vfd 18/tf8out 2366 2367 03232 2368 caltst bss 1 flag indicating whether to call itest 03233 2369 chmode bss 1 flag indicating mode change 03234 2370 checho bss 1 flag indicating echo-mode change 03235 2371 altemp bss 1 temporary storage 03236 2372 atemp2 bss 1 more temporary storage 03237 0 00000 0 2373 flgptr ind ** this will be set with x1 modification 2374 2375 003240 2376 alttab equ * branch table for alter parameters subcommands 2377 03240 2378 optab alcrec,alt020 03242 2379 optab allfec,alt030 end of binary card 00000048 03244 2380 optab altbec,alt040 03246 2381 optab alquit,alt050 03250 2382 optab allisn,alt060 03252 2383 optab allock,alt070 03254 2384 optab alfdpx,alt080 03256 2385 optab alchng,alt090 03260 2386 optab alwru,alt100 03262 2387 optab alecpx,alt110 03264 2388 optab aldpin,alt190 03266 2389 optab aldump,alt200 03270 2390 optab alxhld,alt210 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 96 alterp -- subroutine to handle "alter parameters" 03272 2391 optab alrply,alt230 03274 2392 optab alplit,alt250 03276 2393 optab alfrmi,alt120 03300 2394 optab alsetb,alt260 03302 2395 optab albral,alt270 03304 2396 optab alpfnl,alt280 03306 2397 optab alifc,alt290 03310 2398 optab alofc,alt300 03312 2399 optab aloddp,alt310 end of binary card 00000049 03314 2400 optab al8in,alt320 03316 2401 optab al8out,alt330 03320 2402 optab albrk,alt400 03322 0 03322 1 2403 altend zero * marks end of table 2404 2405 003323 2406 alctab equ * branch table used for colts channel 03323 2407 optab allisn,alt060 03325 2408 optab aldpin,alt190 03327 2409 optab aldump,alt200 03331 0 03331 1 2410 alcend zero * marks end of table 2411 2412 table of line types for which wru is allowed 03332 000001 0 2413 wrutbl dec 1 ascii 03333 000002 0 2414 dec 2 1050 03334 000003 0 2415 dec 3 2741 03335 000010 0 2416 dec 8 202c6 000004 2417 wruinc equ *-wrutbl length of table assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 97 rndsiz -- subroutine to convert buffer size to words 2418 ttls rndsiz -- subroutine to convert buffer size to words 2419 2420 this subroutine takes a buffer size in characters 2421 and returns it in words rounded up to the next 2422 multiple of 32 2423 2424 input: 2425 a -- chars per buffer 2426 2427 output: 2428 a -- buffer size in words 2429 2430 03336 2431 rndsiz subr rnd 03341 773 107 0 2432 iaa 71 round up to multiple of 32 words 03342 0337 06 0 2433 ars 6 03343 0336 05 0 2434 als 5 convert to words 03344 0 27 654 3220 2435 cmpa l.g017-* (bfmsiz) respect upper limit 03345 0 75 002 3347 2436 tmi 2 03346 0 07 652 3220 2437 lda l.g017-* 03347 2438 return rndsiz 2439 2440 2441 * setsiz -- subroutine to set buffer size in sfcm 2442 2443 2444 copy input buffer size from mailbox to sf.bsz for 2445 listen order or set_buffer_size order (dialout) 2446 2447 input: 2448 x1 -- virtual tib address 2449 x3 -- submailbox address 2450 2451 output: 2452 buffer size stored in sf.bsz 2453 zero stored in sf.mms 2454 2455 03351 2456 setsiz subr set,(q,x2) end of binary card 00000050 03362 1 07 004 0 2457 lda t.line,1 is this an hsla line? 03363 0 31 626 3211 2458 cana l.g010-* hslafl 03364 0 74 007 3373 2459 tze setbak-* no, don't bother with sfcm stuff 03365 1 03 030 0 2460 ldx2 t.sfcm,1 03366 0 74 005 3373 2461 tze setbak-* better leave it alone if no sfcm 03367 3 07 005 0 2462 lda sm.cd+1,3 get buffer size in chars 03370 0 10 746 3336 2463 tsy rndsiz-* get it in words rounded up to multiple of 32 03371 2 17 016 0 2464 sta sf.bsz,2 save size in sfcm 03372 2 56 020 0 2465 stz sf.mms,2 start clean 03373 2466 setbak return setsiz assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 98 filmbx -- subroutine to fill fnp-controlled mailbox from 2467 ttls filmbx -- subroutine to fill fnp-controlled mailbox from i/o queu 2468 2469 2470 this routine is called by dgetwk if the i/o queue 2471 non-empty and there's a free mailbox for sending 2472 2473 x3: mailbox save area address 2474 2475 03375 2476 filmbx subr fil 2477 start by getting request from i/o queue 03400 4 10 277 3677 2478 tsy a.v027-*,* (fetch) 03401 2 07 000 0 2479 lda 0,2 pick up opcode word from queue 03402 0 17 322 3724 2480 sta filopc-* 03403 0 13 320 3723 2481 stx2 filtmp-* save queue address 03404 0336 11 0 2482 als 9 put opcode in mailbox 03405 122 001 0 2483 iora rcd with rcd 03406 3 17 003 0 2484 sta sm.op,3 03407 3 56 002 0 2485 stz sm.cdl,3 initialize command data length to zero 03410 3 56 000 0 2486 stz sm.lno,3 likewise line number 03411 673 777 0 2487 ila -1 correct the queue count 03412 4 16 253 3665 2488 asa a.v004-*,* (qcnt) 03413 0 07 311 3724 2489 lda filopc-* pick up opcode again 03414 0 34 306 3722 2490 ana l.v019-* (=007000) see if any data words 03415 0 74 016 3433 2491 tze fil020-* none 03416 0337 11 0 2492 ars 9 compute nwords 03417 6333 00 0 2493 caq 03420 3333 00 0 2494 cx3a 03421 773 004 0 2495 iaa sm.cd point at beginning of command data 03422 4332 00 0 2496 cax1 03423 0 03 300 3723 2497 ldx2 filtmp-* get opcode back 03424 2498 fil010 null 03424 2 07 001 0 2499 lda 1,2 pick up word from queue 03425 1 17 000 0 2500 sta 0,1 store in mailbox 03426 573 777 0 2501 iaq -1 03427 0 74 004 3433 2502 tze fil020-* all words moved in 03430 173 001 0 2503 iacx1 1 bump pointers end of binary card 00000051 03431 273 001 0 2504 iacx2 1 03432 0 71 772 3424 2505 tra fil010-* 2506 03433 2507 fil020 null now dequeue the error message 03433 0 07 271 3724 2508 lda filopc-* pick up original opcode 03434 022 377 0 2509 iana 255 03435 0 17 267 3724 2510 sta filopc-* save masked version 03436 422 115 0 2511 icmpa errmsg sending an error message? 03437 0 64 005 3444 2512 tnz fil030-* no 03440 0 03 263 3723 2513 ldx2 filtmp-* addr of q entry 03441 0 43 250 3711 2514 ldx1 l.v004-* (=0) so dlqent will know not to meter 03442 4 10 237 3701 2515 tsy a.v042-*,* (=dlqent) delete it 03443 0 71 210 3653 2516 tra fil120-* done assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 99 filmbx -- subroutine to fill fnp-controlled mailbox from 2517 03444 4 43 236 3702 2518 fil030 ldx1 a.v043-*,* address of current queue 03445 1 07 000 0 2519 lda qtib,1 get real tib addrss 03446 4 17 214 3662 2520 sta a.v001-*,* (tibadr) save real tib address 03447 4 10 220 3667 2521 tsy a.v006-*,* (setptw) virtualize it 03450 4332 00 0 2522 cax1 put virtual tib address in x1 03451 1 07 004 0 2523 lda t.line,1 put line number in mailbox 03452 3 72 000 0 2524 orsa sm.lno,3 2525 now deal with opcode 03453 0 07 251 3724 2526 lda filopc-* 03454 422 112 0 2527 icmpa accin "accept input"? 03455 0 74 160 3635 2528 tze fil100-* yes, go do special stuff 03456 0 03 245 3723 2529 ldx2 filtmp-* get queue address 03457 4 10 222 3701 2530 tsy a.v042-*,* (=dlqent) and free it 2531 03460 2532 trace mt.ouq,tr.que,(filtmp,filopc,t.line(1)) 2533 03476 0 07 226 3724 2534 lda filopc-* get op code again 03477 0 03 173 3672 2535 ldx2 a.v015-* addr(rcdtab) 03500 2536 fil040 null search table for opcode 03500 2 27 000 0 2537 cmpa 0,2 if found, end of binary card 00000052 03501 6 74 001 0 2538 tze 1,2* branch according to table 03502 273 002 0 2539 iacx2 2 else go to next entry 03503 0 23 252 3755 2540 cmpx2 rcdend-* table exhausted? 03504 0 64 774 3500 2541 tnz fil040-* 03505 2542 die 8 yes, invalid opcode 2543 2544 03506 2545 fil050 null accept new terminal 2546 03506 2547 smeter mincs,.mndil,l.v001-* 03515 2548 smeter mupdat,.mdilc,(a.v007-*(*)) 2549 03524 1 07 017 0 2550 lda t.type,1 pass type back as command data 03525 3 56 004 0 2551 stz sm.cd,3 cs looks at 36 bits 03526 3 17 005 0 2552 sta sm.cd+1,3 03527 3 56 006 0 2553 stz sm.cd+2,3 zero second 36 bits of command data 03530 3 56 007 0 2554 stz sm.cd+3,3 03531 0 07 167 3720 2555 lda l.v017-* (=tfauto) 03532 1 31 001 0 2556 cana t.flg,1 is the an autobaud line? 03533 0 74 012 3545 2557 tze fil060-* no 03534 1 03 030 0 2558 ldx2 t.sfcm,1 address of software com region 03535 2 03 015 0 2559 ldx2 sf.hsl,2 address of hsla table 03536 2 07 000 0 2560 lda ht.flg,2 flag word 03537 022 017 0 2561 iana htfspd isolate speed 03540 773 777 0 2562 iaa -1 compute cs speed index 03541 422 007 0 2563 icmpa 7 less then 1200? 03542 0 75 002 3544 2564 tmi 2 yes 03543 773 777 0 2565 iaa -1 further fudge (multics does not know 1050 baud) 03544 3 17 007 0 2566 sta sm.cd+3,3 and store in command data assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 100 filmbx -- subroutine to fill fnp-controlled mailbox from 03545 673 014 0 2567 fil060 ila 12 set command data length also 03546 3 17 002 0 2568 sta sm.cdl,3 03547 0 07 152 3721 2569 lda l.v018-* tfdild end of binary card 00000053 03550 1 72 002 0 2570 orsa t.flg2,1 mark it dialed up now 03551 0 71 102 3653 2571 tra fil120-* 2572 03552 2573 fil070 null line disconnected 2574 turn off listen flag in tib 03552 0 07 136 3710 2575 lda l.v003-* =^tflisn 03553 1 32 001 0 2576 ansa t.flg,1 03554 0 07 137 3713 2577 lda l.v010-* get permanent t.flg bits 03555 1 32 001 0 2578 ansa t.flg,1 turn off all the others 03556 0 07 136 3714 2579 lda l.v011-* get permanent t.flg2 bits 03557 1 32 002 0 2580 ansa t.flg2,1 turn off all the others 03560 0 07 137 3717 2581 lda l.v014-* get permanent t.flg3 bits 03561 1 32 036 0 2582 ansa t.flg3,1 turn off all the others 2583 2584 if this type of line has tfctrl by default, 2585 leave it on 03562 0 41 114 3676 2586 ldx3 a.v024-* addr(ctrl) 03563 3 41 001 0 2587 ldx3 ct.dev,3 array of device table addresses 03564 1 40 017 0 2588 adcx3 t.type,1 indexed by device type 03565 3 41 777 0 2589 ldx3 -1,3 (which starts at 1, not 0) 2590 x3 -> relevant device table entry 03566 0 07 127 3715 2591 lda l.v012-* dtfctl 03567 3 31 004 0 2592 cana dt.flg,3 should tfctrl be on? 03570 0 74 003 3573 2593 tze fil080-* no, leave it off 03571 0 07 125 3716 2594 lda l.v013-* =tfctrl 03572 1 72 001 0 2595 orsa t.flg,1 turn it on 2596 03573 2597 fil080 null 03573 1 41 025 0 2598 ldx3 t.echo,1 is there an echo buffer? 03574 0 74 004 3600 2599 tze fil090-* 03575 473 040 0 2600 ilq bufsiz if so, free it 03576 4 10 075 3673 2601 tsy a.v016-*,* frebuf 03577 1 56 025 0 2602 stz t.echo,1 2603 03600 2604 fil090 null 03600 4 10 103 3703 2605 tsy a.v045-*,* (deldly) get rid of any delay table 03601 1 56 037 0 2606 stz t.dtp,1 and remember that it's gone 03602 4 10 103 3705 2607 tsy a.v047-*,* (deletb) free echnego tbl if any 03603 1 56 044 0 2608 stz t.entp,1 and remember that it's gone 03604 1 56 042 0 2609 stz t.scll,1 turn off pendant echo negotiation 03605 1 56 043 0 2610 stz t.sncc,1 clear this for good luck 2611 03606 2612 smeter mincs,.mndil,l.v002-* 03615 2613 smeter mupdat,.mdilc,(a.v007-*(*)) end of binary card 00000054 2614 if hsla line, free cct buffer if any 03624 1 07 004 0 2615 lda t.line,1 is it hsla line? assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 101 filmbx -- subroutine to fill fnp-controlled mailbox from 03625 0 31 065 3712 2616 cana l.v007-* =hslafl 03626 0 74 025 3653 2617 tze fil120-* if not, don't bother 03627 1 07 017 0 2618 lda t.type,1 make sure it's a real channel 03630 422 023 0 2619 icmpa ttcolt and not just colts executive 03631 0 74 022 3653 2620 tze fil120-* nope 03632 473 000 0 2621 ilq 0 03633 4 10 051 3704 2622 tsy a.v046-*,* shrcct 03634 0 71 017 3653 2623 tra fil120-* that's it for disconnected line 2624 2625 03635 2626 fil100 null accept input 03635 673 011 0 2627 ila 9 command data will be 54 bits 03636 3 17 002 0 2628 sta sm.cdl,3 2629 get count of input characters to put in cmd 03637 4 10 035 3674 2630 tsy a.v017-*,* (incnt) data 2631 03640 4 07 040 3700 2632 lda a.v030-*,* (.crnbf) get number of buffers left 03641 3 17 001 0 2633 sta sm.fre,3 tell multics what it is 03642 4 20 024 3666 2634 szn a.v005-*,* (shinp) was it short input? 03643 0 74 010 3653 2635 tze fil120-* no 03644 673 102 0 2636 ila inmbx yes, reset opcode 03645 0 17 057 3724 2637 sta filopc-* 03646 0 71 005 3653 2638 tra fil120-* 2639 2640 03647 2641 fil110 null send output 03647 673 011 0 2642 ila 9 54 bits of command data 03650 3 17 002 0 2643 sta sm.cdl,3 because we will put buffer count in same 2644 place as for accept input 03651 4 07 027 3700 2645 lda a.v030-*,* (.crnbf) get number of buffers remaining 03652 3 17 001 0 2646 sta sm.fre,3 2647 2648 03653 2649 fil120 null finished with rcd, now write mailbox 2650 back to cs 03653 0 07 051 3724 2651 lda filopc-* 03654 4 03 007 3663 2652 ldx2 a.v002-*,* mbxno 03655 4 17 007 3664 2653 sta a.v003-*,* mbxfre-8,2 (mark mailbox with current opcode) 03656 0 07 017 3675 2654 lda a.v018-* addr(savmb) 03657 4 10 012 3671 2655 tsy a.v010-*,* wmbx 03660 2656 filbak return filmbx assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 102 filmbx -- subroutine to fill fnp-controlled mailbox from 2657 eject 2658 2659 03662 0 02255 1 2660 a.v001 ind tibadr 03663 0 06355 1 2661 a.v002 ind mbxno 03664 2 00611 1 2662 a.v003 ind mbxfre-8,2 03665 0 00620 1 2663 a.v004 ind qcnt end of binary card 00000055 03666 0 05161 1 2664 a.v005 ind shinp 03667 0 34000 3 2665 a.v006 ind setptw set up variable cpu page table word 03670 0 00734 0 2666 a.v007 ind .mndil 2667 *a.v008 unused 2668 *a.v009 unused 03671 0 06130 1 2669 a.v010 ind wmbx 03672 0 03725 1 2670 a.v015 ind rcdtab branch table for rcd opcodes 03673 0 15000 3 2671 a.v016 ind frebuf 03674 0 04767 1 2672 a.v017 ind incnt subroutine to count input characters 03675 0 02462 1 2673 a.v018 ind savmbx 03676 0 01000 3 2674 a.v024 ind ctrl 03677 0 04544 1 2675 a.v027 ind fetch 03700 0 00652 0 2676 a.v030 ind .crnbf 03701 0 06636 1 2677 a.v042 ind dlqent 03702 0 06457 1 2678 a.v043 ind curque 03703 0 04145 1 2679 a.v045 ind deldly 03704 0 35000 3 2680 a.v046 ind shrcct subr that shares or releases cct 03705 0 04361 1 2681 a.v047 ind deletb 2682 2683 03706 000001 0 2684 l.v001 dec 1 03707 777777 0 2685 l.v002 dec -1 03710 777677 0 2686 l.v003 vfd 18/ntflsn 03711 000000 0 2687 l.v004 dec 0 03712 001000 0 2688 l.v007 vfd 18/hslafl 03713 020020 0 2689 l.v010 vfd 18/tfdlup+tfauto 03714 200000 0 2690 l.v011 vfd 18/tfsftr 03715 000001 0 2691 l.v012 vfd 18/dtfctl 03716 000400 0 2692 l.v013 vfd 18/tfctrl 03717 000401 0 2693 l.v014 vfd 18/tfbkpt+tfoddp 03720 020000 0 2694 l.v017 vfd 18/tfauto 03721 000002 0 2695 l.v018 vfd 18/tfdild 03722 007000 0 2696 l.v019 oct 007000 2697 2698 03723 2699 filtmp bss 1 03724 2700 filopc bss 1 2701 2702 03725 2703 rcdtab null branch table for rcd opcodes 2704 03725 2705 optab acctrm,fil050 03727 2706 optab lindis,fil070 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 103 filmbx -- subroutine to fill fnp-controlled mailbox from 03731 2707 optab sndout,fil110 03733 2708 optab brkcon,fil120 03735 2709 optab wrutim,fil120 end of binary card 00000056 03737 2710 optab acupwi,fil120 03741 2711 optab acudlo,fil120 03743 2712 optab acuacr,fil120 03745 2713 optab acung,fil120 03747 2714 optab linsta,fil120 03751 2715 optab engain,fil120 03753 2716 optab engaof,fil120 03755 0 03755 1 2717 rcdend zero * to mark end of table 2718 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 104 gmeter -- report meters to cs 2719 ttls gmeter -- report meters to cs 2720 2721 this subroutine sets up a dcw list to copy either 2722 per-channel or fnp-wide meters in response to a 2723 report-meters mailbox. the meters are copied to a 2724 temporary buffer both to avoid having them paged out and 2725 to make sure a consistent copy is sent. 2726 2727 at entry: 2728 x1 contains address of tib (or tibadr = 0 if for whole fnp) 2729 x3 points to mailbox; sm.cd in mailbox contains address 2730 of cs buffer 2731 03756 2732 gmeter subr gme,(x2,x3) 03767 4 20 075 4064 2733 szn a.s001-*,* (tibadr) for a subchannel? 03770 0 74 005 3775 2734 tze gme010-* no 03771 1 03 052 0 2735 ldx2 t.metr,1 yes, get pointer to its meters 03772 473 056 0 2736 ilq m.synl this is how much space they take up 03773 0 57 110 4103 2737 stq gmelen-* 03774 0 71 005 4001 2738 tra gme020-* 03775 0 03 070 4065 2739 gme010 ldx2 a.s002-* whole fnp, get addr (.mdilc) 03776 473 030 0 2740 ilq .mleng size of metering area 03777 0 57 104 4103 2741 stq gmelen-* this is how much to copy 04000 573 016 0 2742 iaq 14 extra stuff copied from elsewhere 04001 0 57 101 4102 2743 gme020 stq gmesiz-* save size 04002 4 10 064 4066 2744 tsy a.s003-*,* getmem 04003 2745 die 10 please not end of binary card 00000057 04004 0 50 075 4101 2746 stx3 gmebuf-* save address of buffer 04005 0 47 076 4103 2747 ldq gmelen-* get copying length 04006 2 07 000 0 2748 gme030 lda 0,2 copy a word 04007 3 17 000 0 2749 sta 0,3 04010 273 001 0 2750 iacx2 1 move to next 04011 373 001 0 2751 iacx3 1 04012 573 777 0 2752 iaq -1 any more? 04013 0 64 773 4006 2753 tnz gme030-* yes 2754 04014 4 20 050 4064 2755 szn a.s001-*,* (tibadr) for a subchannel? 04015 0 64 021 4036 2756 tnz gme040-* yes 2757 no, fill in some extra fnp-wide stuff 04016 0 03 057 4075 2758 ldx2 a.s010-* addr (.crbdt) 04017 2 04 000 0 2759 ldaq 0,2 get bootload time 04020 3 14 000 0 2760 staq 0,3 04021 2 04 002 0 2761 ldaq 2,2 all 4 words of it 04022 3 14 002 0 2762 staq 2,3 04023 4 03 053 4076 2763 ldx2 a.s011-*,* (.crsked) get pointer to idle meters 04024 2 04 000 0 2764 ldaq 0,2 this is 8 words 04025 3 14 004 0 2765 staq 4,3 04026 2 04 002 0 2766 ldaq 2,2 04027 3 14 006 0 2767 staq 6,3 04030 2 04 004 0 2768 ldaq 4,2 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 105 gmeter -- report meters to cs 04031 3 14 010 0 2769 staq 8,3 04032 2 04 006 0 2770 ldaq 6,2 04033 3 14 012 0 2771 staq 10,3 04034 4 04 043 4077 2772 ldaq a.s012-*,* (yelcnt) get edac error count 04035 3 14 014 0 2773 staq 12,3 2774 04036 0 03 031 4067 2775 gme040 ldx2 a.s004-* addr (dcws) -- put dcw list in usual place 04037 4 13 031 4070 2776 stx2 a.s005-*,* dcwadr 04040 673 004 0 2777 ila 4 set length 04041 4 17 030 4071 2778 sta a.s006-*,* dcwlen 2779 04042 0 41 724 3766 2780 ldx3 gmesx3-* get mailbox pointer 04043 3 07 004 0 2781 lda sm.cd,3 get cs address 04044 473 075 0 2782 ilq diaftc fnp -> cs transfer 04045 2 14 000 0 2783 staq 0,2 04046 0 07 033 4101 2784 lda gmebuf-* get pointer to data 04047 0 37 031 4100 2785 ora l.s001-* 0,w.2 for dia 04050 0 47 032 4102 2786 ldq gmesiz-* get data length 04051 4337 01 0 2787 qrs 1 in 36-bit words 04052 2 14 002 0 2788 staq 2,2 rest of dcw end of binary card 00000058 04053 273 004 0 2789 iacx2 4 point to place for next dcw 04054 3332 00 0 2790 cx2a but bdisc wants it in x3 04055 4333 00 0 2791 cax3 04056 4 10 014 4072 2792 tsy a.s007-*,* (bdisc) disconnect dcw 04057 673 011 0 2793 ila tcmetr set transaction control word 04060 4 17 013 4073 2794 sta a.s008-*,* tcword 04061 4 10 013 4074 2795 tsy a.s009-*,* conect 04062 2796 return gmeter 2797 2798 04064 0 02255 1 2799 a.s001 ind tibadr 04065 0 00720 0 2800 a.s002 ind .mdilc 04066 0 21000 3 2801 a.s003 ind getmem 04067 0 05750 1 2802 a.s004 ind dcws 04070 0 05746 1 2803 a.s005 ind dcwadr 04071 0 05747 1 2804 a.s006 ind dcwlen 04072 0 05604 1 2805 a.s007 ind bdisc 04073 0 01564 1 2806 a.s008 ind tcword 04074 0 05656 1 2807 a.s009 ind conect 04075 0 00644 0 2808 a.s010 ind .crbdt 04076 0 00677 0 2809 a.s011 ind .crskd 04077 0 00476 0 2810 a.s012 ind yelcnt 2811 04100 1 00000 0 2812 l.s001 zero 0,w.2 2813 2814 04101 2815 gmebuf bss 1 address of temporary space for meters 04102 2816 gmesiz bss 1 size of same 04103 2817 gmelen bss 1 length to copy from metering area assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 106 makdly -- allocate new delay table 2818 ttls makdly -- allocate new delay table 2819 2820 this subroutine takes a list of delay values and associates 2821 them with a given line. it does this by searching the chain of de 2822 tables starting at .crdly, and if it finds one matching the 2823 supplied values it increases its reference count; if 2824 none is found, it chains a new one on to the end. t.dtp is 2825 updated accordingly. 2826 2827 input: 2828 x1 -> virtual tib address 2829 x2 -> array of 6 delay values 2830 2831 04104 2832 makdly subr mak,(x2,x3) 2833 04115 473 006 0 2834 ilq dl.siz-dl.hsz count of values 04116 0 41 775 4113 2835 ldx3 maksx2-* use x3 for tbl clobberably 04117 3 20 000 0 2836 mak010 szn 0,3 find out if all are zero 04120 0 64 007 4127 2837 tnz mak020-* clearly not 04121 373 001 0 2838 iacx3 1 check next 04122 573 777 0 2839 iaq -1 are there more? end of binary card 00000059 04123 0 64 774 4117 2840 tnz mak010-* yes 04124 673 000 0 2841 ila 0 04125 4333 00 0 2842 cax3 indicate no table 04126 0 71 010 4136 2843 tra mak030-* and go delete old one 2844 04127 2845 mak020 null 04127 0 41 070 4217 2846 ldx3 a.p001-* addr (.crdly) -- start looking at existing tables 04130 473 006 0 2847 ilq dl.siz-dl.hsz table size 04131 4 10 071 4222 2848 tsy a.p004-*,* (=cmptbl) x2 -> table 04132 0 71 010 4142 2849 tra mak040-* didnt find it, x3 is last 2850 come here if corresponding table already exists 04133 1 61 037 0 2851 cmpx3 t.dtp,1 already in use by this line? 04134 0 74 004 4140 2852 tze makret-* yes, nothing to do 04135 3 76 002 0 2853 aos dl.rfc,3 up the reference count 2854 04136 2855 mak030 null here to update t.dtp and free old table 04136 0 10 007 4145 2856 tsy deldly-* free old one 04137 1 50 037 0 2857 stx3 t.dtp,1 save it in tib 2858 04140 2859 makret return makdly 04142 2860 mak040 null table does not already exist 04142 473 011 0 2861 ilq dl.siz allocate a new block 04143 4 10 055 4220 2862 tsy a.p002-*,* =newtbl 04144 0 71 772 4136 2863 tra mak030-* 2864 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 107 deldly -- free delay table 2865 ttls deldly -- free delay table 2866 2867 frees delay table pointed to by t.dtp 2868 if reference count > 1, just reduces it 2869 2870 x1 -> virtual tib address 2871 2872 04145 2873 deldly subr dld,(x3) 2874 04153 473 011 0 2875 ilq dl.siz use delay tbl size 04154 2332 00 0 2876 cx1a use t.dtp 04155 773 037 0 2877 iaa t.dtp 04156 4333 00 0 2878 cax3 get tbl ptr in x3 04157 0 10 003 4162 2879 tsy deltbl-* 04160 2880 return deldly 2881 2882 delete any table 2883 delay or echnego 2884 x1 = tib (not used) 2885 x3 = ptr to tib tbl ptr word 2886 q = size of table (for fremem) 2887 04162 2888 deltbl subr del,(x1,x2,x3,q) end of binary card 00000060 04201 3 41 000 0 2889 ldx3 0,3 is there an old table? 04202 0 74 013 4215 2890 tze delret-* no, forget it 2891 04203 3 07 002 0 2892 lda dl.rfc,3 anyone else using it? 04204 773 777 0 2893 iaa -1 04205 3 17 002 0 2894 sta dl.rfc,3 decrement ref count 04206 0 64 007 4215 2895 tnz delret-* someone else wants it, leave it alone 2896 04207 3 43 001 0 2897 ldx1 dl.bck,3 get pointer to previous block 04210 3 03 000 0 2898 ldx2 dl.fwd,3 and next one 04211 0 74 002 4213 2899 tze 2 is no next one 04212 2 53 001 0 2900 stx1 dl.bck,2 if there is, attach it to previous one 04213 1 13 000 0 2901 stx2 dl.fwd,1 correct previous block's forward ptr 2902 note: even if freed block is first one, its 2903 backptr points to .crdly or .cretb 2904 2905 q has right size at this point. 04214 4 10 005 4221 2906 tsy a.p003-*,* =fremem 2907 04215 2908 delret return deltbl 2909 2910 2911 04217 0 00667 0 2912 a.p001 ind .crdly 04220 0 04262 1 2913 a.p002 ind newtbl 04221 0 17000 3 2914 a.p003 ind fremem assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 108 deldly -- free delay table 04222 0 04223 1 2915 a.p004 ind cmptbl 2916 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 109 table sharing routines 2917 ttls table sharing routines 2918 2919 compare tables for sharing 2920 x1 => tib (saved, not used) 2921 x2 => values in table 2922 x3 -> chain head 2923 q = size of table data 2924 04223 2925 cmptbl subr cmt,(x2,q) 2926 04234 2927 cmt010 null 04234 3 07 000 0 2928 lda 0,3 get next in chain 04235 0 74 022 4257 2929 tze cmt050-* there are no more 04236 0 17 023 4261 2930 sta cmtbuf-* 04237 4333 00 0 2931 cax3 find out if this one matches new one 04240 373 003 0 2932 iacx3 dl.hsz start at first value 04241 2 07 000 0 2933 cmt020 lda 0,2 end of binary card 00000061 04242 3 27 000 0 2934 cmpa 0,3 values equal? 04243 0 74 005 4250 2935 tze cmt030-* yes, look at next 04244 0 41 015 4261 2936 ldx3 cmtbuf-* no, see if there are more in chain 04245 0 03 765 4232 2937 ldx2 cmtsx2-* restore pointer to first value 04246 0 47 765 4233 2938 ldq cmtsq-* restore count 04247 0 71 765 4234 2939 tra cmt010-* 2940 04250 573 777 0 2941 cmt030 iaq -1 checked all values? 04251 0 74 004 4255 2942 tze cmt040-* yes, we've found matching table 04252 273 001 0 2943 iacx2 1 no, move to next value 04253 373 001 0 2944 iacx3 1 04254 0 71 765 4241 2945 tra cmt020-* and test again 2946 04255 0 41 004 4261 2947 cmt040 ldx3 cmtbuf-* 04256 0 76 745 4223 2948 aos cmptbl-* 04257 2949 cmt050 return cmptbl 2950 04261 2951 cmtbuf bss 1 2952 2953 2954 subr to allocate a new table 2955 x2 -> table data 2956 x3 -> end of previous chain 2957 q = data size, incl.header 2958 return x3 -> new block 2959 04262 2960 newtbl subr nwt,(x2,x3,q) 2961 04276 4 10 027 4325 2962 tsy a.p501-*,* =getmem 04277 2963 die 10 if we can't get one, horrors. 04300 0 50 026 4326 2964 stx3 nwttmp-* this is the new one 2965 04301 0 03 773 4274 2966 ldx2 nwtsx3-* thread it to previous one assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 110 table sharing routines 04302 3 13 001 0 2967 stx2 dl.bck,3 04303 2 50 000 0 2968 stx3 dl.fwd,2 04304 673 001 0 2969 ila 1 initialize reference count 04305 3 17 002 0 2970 sta dl.rfc,3 04306 373 003 0 2971 iacx3 dl.hsz point to first value 04307 0 03 764 4273 2972 ldx2 nwtsx2-* restore pointer to supplied values 04310 0 47 765 4275 2973 ldq nwtsq-* get table length end of binary card 00000062 04311 573 775 0 2974 iaq -dl.hsz dont copy the header! 04312 2 07 000 0 2975 nwt010 lda 0,2 04313 3 17 000 0 2976 sta 0,3 04314 573 777 0 2977 iaq -1 got 'em all ? 04315 0 74 004 4321 2978 tze nwt020-* yes 04316 273 001 0 2979 iacx2 1 no, get another 04317 373 001 0 2980 iacx3 1 04320 0 71 772 4312 2981 tra nwt010-* 04321 2982 nwt020 null 04321 0 41 005 4326 2983 ldx3 nwttmp-* 04322 0 50 752 4274 2984 stx3 nwtsx3-* 04323 2985 return newtbl 2986 04325 0 21000 3 2987 a.p501 ind getmem 04326 2988 nwttmp bss 1 2989 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 111 makecn - make echnego table 2990 ttls makecn - make echnego table 2991 2992 make an echo negotiation bit table 2993 try to share it like a delay table 2994 2995 04327 2996 makecn subr mnt,(x2,x3) 2997 04340 2998 mnt010 null 04340 0 41 016 4356 2999 ldx3 a.y001-* addr (.cretb) -- start looking at existing tables 04341 473 010 0 3000 ilq 8 table size 04342 4 10 015 4357 3001 tsy a.y002-*,* (=cmptbl) x2 -> table 04343 0 71 010 4353 3002 tra mnt040-* didnt find it, x3 is last 3003 come here if corresponding table already exists 04344 1 61 044 0 3004 cmpx3 t.entp,1 already in use by this line? 04345 0 74 004 4351 3005 tze mnt030-* yes, nothing to do 04346 3 76 002 0 3006 aos dl.rfc,3 up the reference count 3007 04347 3008 mnt020 null here to update t.dtp and free old table 04347 0 10 012 4361 3009 tsy deletb-* free old one 04350 1 50 044 0 3010 stx3 t.entp,1 save it in tib 3011 04351 3012 mnt030 return makecn 04353 3013 mnt040 null table does not already exist 04353 473 013 0 3014 ilq dl.hsz+8 allocate a new block 04354 4 10 004 4360 3015 tsy a.y003-*,* =newtbl 04355 0 71 772 4347 3016 tra mnt020-* 3017 3018 04356 0 00700 0 3019 a.y001 ind .cretb end of binary card 00000063 04357 0 04223 1 3020 a.y002 ind cmptbl 04360 0 04262 1 3021 a.y003 ind newtbl 3022 3023 free echo negotiation table 04361 3024 deletb subr dle,(x3) 3025 04367 473 013 0 3026 ilq dl.hsz+8 04370 2332 00 0 3027 cx1a 04371 773 044 0 3028 iaa t.entp 04372 4333 00 0 3029 cax3 04373 4 10 003 4376 3030 tsy a.y501-*,* (=deltbl) 04374 3031 return deletb 3032 04376 0 04162 1 3033 a.y501 ind deltbl 3034 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 112 ecgifl -- echnego input flush (to 6180) 3035 ttls ecgifl -- echnego input flush (to 6180) 3036 send icp chains off to dcp chain (dia queue) 3037 so echnego sync requests work. 3038 04377 3039 ecgifl subr ecf 3040 04402 1 20 005 0 3041 szn t.icp,1 do we have an icp chain? 04403 0 74 003 4406 3042 tze ecfret-* 04404 473 112 0 3043 ilq accin send accept input 04405 4 10 003 4410 3044 tsy a.y601-*,* (denq) 04406 3045 ecfret return ecgifl 3046 04410 0 00630 1 3047 a.y601 ind denq 3048 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 113 rblast -- subroutine to set up dcw for reading blast mess 3049 ttls rblast -- subroutine to set up dcw for reading blast message 3050 3051 mailbox address passed in x3 3052 address field of mailbox (word 10) points to 3053 6-buffer area containing blast message in three languages 3054 (two buffers per message) 3055 04411 3056 rblast subr rbl,(x3) 04417 0 03 114 4533 3057 ldx2 a.t003-* (dcws) 04420 4 13 114 4534 3058 stx2 a.t004-*,* (dcwadr) tell conect to use usual dcw place 04421 673 004 0 3059 ila 4 04422 4 17 113 4535 3060 sta a.t005-*,* dcwlen 3061 04423 3 07 012 0 3062 lda sm.adr,3 get cs address end of binary card 00000064 04424 473 076 0 3063 ilq diactf read cs opcode 04425 2 14 000 0 3064 staq 0,2 into dcw 04426 473 300 0 3065 ilq 6*bufsiz get three double buffers together 04427 4 10 102 4531 3066 tsy a.t001-*,* (getbuf) 04430 3067 die 10 oh my god 04431 4 50 106 4537 3068 stx3 a.t007-*,* (blbuf) for dtrans 04432 3333 00 0 3069 cx3a get fnp address for dcw 04433 0 37 110 4543 3070 ora l.t004-* (0,w.2) 04434 473 140 0 3071 ilq 3*bufsiz 3 buffers worth of 36-bit words 04435 2 14 002 0 3072 staq 2,2 put in dcw 04436 273 004 0 3073 iacx2 4 next dcw 04437 3332 00 0 3074 cx2a 04440 4333 00 0 3075 cax3 into x3 for bdisc 04441 4 10 075 4536 3076 tsy a.t006-*,* (bdisc) build disconnect dcw 04442 3077 return rblast done assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 114 acusr -- subroutine to handle dial out request 3078 ttls acusr -- subroutine to handle dial out request 3079 3080 this routine sets the tfacu flag in the tib and then 3081 it copies the phone number that has been passed 3082 to the fnp in the command data portion of the mailbox 3083 into a buffer (coverting the 6bit bcd into 9bit) 3084 and invokes the control table interpreter at the test state 3085 entry. 3086 04444 3087 acusr subr acu 3088 04447 3089 trace mt.acu,tr.mbx,(sm.cdl(3),sm.cd(3),sm.cd+1(3),sm.cd+2(3),s 04447 3090 etc m.cd+3(3)) 3091 04473 0 07 045 4540 3092 lda l.t001-* (tfacu) 04474 1 72 002 0 3093 orsa t.flg2,1 set flag on 3094 now to get a buffer 04475 3 47 002 0 3095 ldq sm.cdl,3 get number of digits end of binary card 00000065 04476 0 65 002 4500 3096 tpl acu010-* must be at least 1 digit 04477 3097 die 8 bad acu request, stop 3098 04500 3099 acu010 null 04500 3333 00 0 3100 cx3a getbuf restores all but x3 04501 0332 00 0 3101 cax2 x2 will contain addr of mailbox 04502 473 040 0 3102 ilq bufsiz get a buffers worth 04503 4 10 026 4531 3103 tsy a.t001-*,* (getbuf) 04504 3104 die 10 no buffers means bad problems 04505 1 50 012 0 3105 stx3 t.ocp,1 remember addr of buffer 04506 2 47 002 0 3106 ldq sm.cdl,2 get number of digits 04507 3 57 001 0 3107 stq 1,3 store as tally in buffer 04510 373 002 0 3108 iacx3 bf.dta set x3 to addr of data part of buffer 04511 273 004 0 3109 iacx2 sm.cd set x2 to addr of command data part of mailbox 3110 3111 now to copy 6bit chars from mailbox into 3112 9bit chars in buffer. number of characters 3113 to move is in q. 3114 04512 3332 00 0 3115 cx2a 04513 0 37 026 4541 3116 ora l.t002-* (0,c.0) change x2 to 6bit chars 04514 0332 00 0 3117 cax2 04515 3333 00 0 3118 cx3a 04516 0 37 024 4542 3119 ora l.t003-* (0,b.0) change x3 to 9bit chars 04517 4333 00 0 3120 cax3 3121 04520 3122 acumvc null 04520 2 07 400 0 3123 lda 0,2,c.0 load 6bits right justified (other bits of q are z 04521 3 17 200 0 3124 sta 0,3,b.0 store rightmost 9bits 04522 273 500 0 3125 iacx2 0,c.1 move 1 char to right 04523 373 300 0 3126 iacx3 0,b.1 move 1 byte to right 04524 573 777 0 3127 iaq -1 decrement count of digits remaining assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 115 acusr -- subroutine to handle dial out request 04525 0 65 773 4520 3128 tpl acumvc-* stop when count goes to zero 04526 4 10 004 4532 3129 tsy a.t002-*,* (itest) 04527 3130 return acusr 3131 04531 0 20000 3 3132 a.t001 ind getbuf 04532 0 06000 3 3133 a.t002 ind itest "test_state" entry of interpreter 04533 0 05750 1 3134 a.t003 ind dcws 04534 0 05746 1 3135 a.t004 ind dcwadr 04535 0 05747 1 3136 a.t005 ind dcwlen 04536 0 05604 1 3137 a.t006 ind bdisc 04537 0 01566 1 3138 a.t007 ind blbuf place to store address of blast buffers 3139 04540 000020 0 3140 l.t001 vfd 18/tfacu 04541 4 00000 0 3141 l.t002 zero 0,c.0 for setting '6bit char mode' 04542 2 00000 0 3142 l.t003 zero 0,b.0 for setting '9bit char mode' 04543 1 00000 0 3143 l.t004 zero 0,w.2 for setting 36-bit mode 3144 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 116 fetch -- subroutine to get next item to satisfy an rcd 3145 ttls fetch -- subroutine to get next item to satisfy an rcd 3146 3147 this routine first checks error message queue; 3148 otherwise entry is taken from queue for a tib 3149 inputs: none 3150 3151 outputs: 3152 x2: pointer to queue entry 3153 04544 3154 fetch subr fet,(a,q,x3) end of binary card 00000066 3155 04560 4 20 044 4624 3156 szn a.o001-*,* (=errqbf) anyting in error queue? 04561 0 74 004 4565 3157 tze fet010-* no 04562 0 07 043 4625 3158 lda a.o002-* (=errqtb) addr of simulated tib table 04563 4 17 046 4631 3159 sta a.o007-*,* (=curque) 04564 0 71 016 4602 3160 tra fet050-* 3161 04565 3162 fet010 null 04565 0 03 047 4634 3163 ldx2 dqcur-* look at tib table entry whose turn it is 04566 0 64 002 4570 3164 tnz fet020-* if it's never been set, 04567 4 03 040 4627 3165 ldx2 a.o004-*,* set it to .crttb 04570 3166 fet020 null 04570 4 23 036 4626 3167 cmpx2 a.o003-*,* (.crtte) time to wrap around? 04571 0 64 002 4573 3168 tnz 2 04572 4 03 035 4627 3169 ldx2 a.o004-*,* .crttb 3170 04573 2 20 001 0 3171 szn qbuf,2 is there a queue for this line? 04574 0 64 005 4601 3172 tnz fet040-* yes, go get something out of it 04575 3173 fet030 null 04575 273 002 0 3174 iacx2 2 look at next tib entry 04576 0 23 036 4634 3175 cmpx2 dqcur-* have we gone all the way around? 04577 0 64 771 4570 3176 tnz fet020-* 04600 3177 die 9 yes, spurious rcd 3178 04601 4 13 030 4631 3179 fet040 stx2 a.o007-*,* (=curque) save current tib table entry 04602 4 10 030 4632 3180 fet050 tsy a.o008-*,* (=getqhd) get head of queue 04603 3181 die 8 queue can't be empty 3182 04604 2 07 000 0 3183 lda 0,2 pick up first word of entry 04605 0 65 003 4610 3184 tpl fet060-* not already picked up 04606 4 03 023 4631 3185 ldx2 a.o007-*,* pick up current queue 04607 0 71 766 4575 3186 tra fet030-* back tp bump to next 04610 022 377 0 3187 fet060 iana 255 mask down to opcode 04611 0 64 002 4613 3188 tnz 2 make sure it's more or less legal 04612 3189 die 8 3190 04613 0 07 020 4633 3191 lda l.o001-* (=400000) set active bit 04614 2 72 000 0 3192 orsa 0,2 end of binary card 00000067 04615 4 41 014 4631 3193 ldx3 a.o007-*,* (curque) get current tib table entry assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 117 fetch -- subroutine to get next item to satisfy an rcd 04616 0 61 007 4625 3194 cmpx3 a.o002-* (errqtb) is it error queue? 04617 0 74 003 4622 3195 tze fetbak-* yes 04620 373 002 0 3196 iacx3 2 bump i/o queue to next tib 04621 0 50 013 4634 3197 stx3 dqcur-* 04622 3198 fetbak return fetch 3199 3200 04624 0 01174 1 3201 a.o001 ind errqbf 04625 0 01173 1 3202 a.o002 ind errqtb 04626 0 00666 0 3203 a.o003 ind .crtte 04627 0 00665 0 3204 a.o004 ind .crttb 3205 04630 0 06636 1 3206 a.o006 ind dlqent 04631 0 06457 1 3207 a.o007 ind curque 04632 0 06742 1 3208 a.o008 ind getqhd 3209 04633 400000 0 3210 l.o001 oct 400000 3211 04634 0 00000 0 3212 dqcur ind 0 pointer to entry in tib table whose turn it is assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 118 getque -- finds entry in tib i/o queue list 3213 ttls getque -- finds entry in tib i/o queue list 3214 3215 this subroutine finds the entry in the tib i/o queue list 3216 for a given tib 3217 3218 input: 3219 a: real tib address 3220 3221 output: 3222 x2: address of entry in list 3223 3224 if there is none, we will crash 3225 04635 3226 getque subr gtq 3227 04640 4 03 767 4627 3228 ldx2 a.o004-*,* (.crttb) get pointer to tib table base 04641 3229 gtq010 null 04641 2 27 000 0 3230 cmpa qtib,2 is this the one? 04642 0 74 005 4647 3231 tze gtqbak-* yes, we got it 04643 273 002 0 3232 iacx2 2 no, look at next 04644 4 23 762 4626 3233 cmpx2 a.o003-*,* (.crtte) 04645 0 64 774 4641 3234 tnz gtq010-* if there are any more 04646 3235 die 22 else crash 3236 04647 4 13 762 4631 3237 gtqbak stx2 a.o007-*,* (=curque) save current queue addr 04650 3238 return getque assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 119 reject -- subroutine to reschedule rejected accept input 3239 ttls reject -- subroutine to reschedule rejected accept input 3240 3241 this subroutine finds the rejected accept input for the tib 3242 pointed to by x1, marks it "rejected", and schedules 3243 dretry routine to try it again a second later 3244 3245 x1 - virtual tib address 3246 04652 3247 reject subr rej 04655 4 07 023 4700 3248 lda a.q001-*,* (tibadr) need real tib address for getque 04656 0 10 757 4635 3249 tsy getque-* 3250 x2 -> tib queue entry 04657 4 10 024 4703 3251 tsy a.q004-*,* (=getqai) find first accept input 04660 3252 die 16 better be one 04661 4 20 023 4704 3253 szn a.q005-*,* (=nonnai) better be nothing before it 04662 0 74 002 4664 3254 tze 2 04663 3255 die 16 3256 end of binary card 00000068 04664 2 07 000 0 3257 lda 0,2 is there a quit or hangup behind it? 04665 0 31 020 4705 3258 cana l.q001-* =quitfl 04666 0 74 003 4671 3259 tze rej040-* no 04667 4 10 012 4701 3260 tsy a.q002-*,* (cleanq) yes, remove all accept inputs 3261 from queue 04670 0 71 006 4676 3262 tra rejbak-* 3263 04671 3264 rej040 null mark entry rejected 04671 0 37 015 4706 3265 ora l.q002-* =rejflg 04672 2 17 000 0 3266 sta 0,2 04673 4 43 005 4700 3267 ldx1 a.q001-*,* (tibadr) need real address for dspqur 04674 0 04 014 4710 3268 ldaq l.q003-* delay time, priority, and address of dretry 04675 4 10 005 4702 3269 tsy a.q003-*,* dspqur 3270 04676 3271 rejbak return reject 3272 3273 04700 0 02255 1 3274 a.q001 ind tibadr real tib address 04701 0 04712 1 3275 a.q002 ind cleanq 04702 0 14000 3 3276 a.q003 ind dspqur 04703 0 07023 1 3277 a.q004 ind getqai 04704 0 06462 1 3278 a.q005 ind nnonai 3279 04705 100000 0 3280 l.q001 vfd 18/quitfl 04706 200000 0 3281 l.q002 vfd 18/rejflg 04707 233100 0 04710 3282 even 04710 000101 0 3283 l.q003 vfd 12/1,6/rtprty delay time, priority, and address 04711 0 01054 1 3284 ind dretry for scheduling dretry assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 120 cleanq -- remove accept inputs from queue with a reject 3285 ttls cleanq -- remove accept inputs from queue with a reject 3286 3287 this routine is called to remove all accept input requests 3288 from a line's i/o queue so that quits and hangups will go 3289 through although an input request has been rejected 3290 3291 input: 3292 x1: virtual tib address 3293 x2: address of first accept input in queue 3294 04712 3295 cleanq subr cle,(a,q,x2,x3) 3296 04731 1 41 026 0 3297 ldx3 t.dcp,1 free any input chain(s) 04732 0 74 005 4737 3298 tze cle003-* 04733 4 10 027 4762 3299 tsy a.r001-*,* frelbf 04734 1 56 026 0 3300 stz t.dcp,1 end of binary card 00000069 04735 1 56 027 0 3301 stz t.dlst,1 04736 1 56 041 0 3302 stz t.dcpl,1 04737 3303 cle003 null 04737 1 41 005 0 3304 ldx3 t.icp,1 04740 0 74 005 4745 3305 tze cle006-* 04741 4 10 021 4762 3306 tsy a.r001-*,* 04742 1 56 005 0 3307 stz t.icp,1 04743 1 56 006 0 3308 stz t.ilst,1 04744 1 56 007 0 3309 stz t.icpl,1 3310 04745 3311 cle006 null 04745 4 07 737 4704 3312 lda a.q005-*,* (=nnonai) number of queue entries before first ac 04746 0 17 020 4766 3313 sta savnai-* will need this in a second 04747 4 10 015 4764 3314 tsy a.r003-*,* (=dlqent) delete the accept inpuut 04750 4 10 015 4765 3315 cle010 tsy a.r004-*,* (=getqai) find first accept input again 04751 0 71 003 4754 3316 tra cle020-* none, queue is clean 04752 4 10 012 4764 3317 tsy a.r003-*,* (=dlqent) delete this accept input 04753 0 71 775 4750 3318 tra cle010-* back to find another 04754 4 07 730 4704 3319 cle020 lda a.q005-*,* (=nnonai) this is total entries now in queue 04755 0 26 011 4766 3320 sba savnai-* subtract out number before the first accin 3321 that used to be there and get the number 3322 if new mailboxes needed 04756 0 74 002 4760 3323 tze 2 were none, do nothing 04757 4 16 004 4763 3324 asa a.r002-*,* qcnt 3325 04760 3326 return cleanq 3327 3328 04762 0 16000 3 3329 a.r001 ind frelbf 04763 0 00620 1 3330 a.r002 ind qcnt 04764 0 06636 1 3331 a.r003 ind dlqent 04765 0 07023 1 3332 a.r004 ind getqai 3333 04766 3334 savnai bss 1 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 121 incnt -- subroutine to get input character count 3335 ttls incnt -- subroutine to get input character count 3336 3337 this subroutine gets count of input characters 3338 for "accept input" in order to send the count to the 3339 cs 3340 it also sets the "break" flag in the mailbox if appropriate 3341 3342 x1 -- virtual tib address 3343 x3 -- mailbox address 3344 04767 3345 incnt subr inc,(x2,x3) 3346 05000 1 03 026 0 3347 ldx2 t.dcp,1 point to beginning of input chain 05001 0 56 153 5154 3348 stz icount-* initialize character count 05002 0 56 153 5155 3349 stz iflags-* and break char flag end of binary card 00000070 05003 0 56 150 5153 3350 stz nbufs-* and buffer count 05004 0 07 136 5142 3351 lda a.h001-* addr (tallys) 05005 0 17 155 5162 3352 sta tallyp-* initialize temporary tally array pointer 3353 05006 3354 inc010 null 05006 0 76 145 5153 3355 aos nbufs-* bump buffer count 05007 2 07 001 0 3356 lda bf.tly,2 get tally from buffer 05010 0 34 134 5144 3357 ana l.h001-* =buftmk 05011 0 64 002 5013 3358 tnz 2 if it's zero, something's very wrong 05012 3359 die 21 3360 05013 0 16 141 5154 3361 asa icount-* add it into count 05014 4 17 146 5162 3362 sta tallyp-*,* save it in temporary array 05015 0 76 145 5162 3363 aos tallyp-* bump array pointer 05016 2 07 001 0 3364 lda bf.flg,2 is break flag in buffer on? 05017 0 31 126 5145 3365 cana l.h002-* =bffbrk 05020 0 74 003 5023 3366 tze inc020-* 05021 473 001 0 3367 ilq 1 05022 0 57 133 5155 3368 stq iflags-* yes, turn it on in mailbox 3369 05023 3370 inc020 null last buffer? 05023 0 31 123 5146 3371 cana l.h003-* =bfflst 05024 0 74 113 5137 3372 tze inc030-* no, go to next 3373 else we're done 05025 3374 trace mt.inc,tr.que,(icount,t.line(1)) 3375 05040 1 20 012 0 3376 szn t.ocp,1 is there any kind of output chain? 05041 0 64 003 5044 3377 tnz inc025-* 05042 1 20 013 0 3378 szn t.ocur,1 05043 0 74 003 5046 3379 tze inc040-* no 3380 05044 673 002 0 3381 inc025 ila 2 yes, set flag in command data 05045 0 72 110 5155 3382 orsa iflags-* 3383 05046 0 07 107 5155 3384 inc040 lda iflags-* store flags assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 122 incnt -- subroutine to get input character count 05047 3 17 066 0 3385 sta sm.fcd,3 05050 0 07 104 5154 3386 lda icount-* get total char count 05051 422 144 0 3387 icmpa mbxmax will it fit in mailbox? end of binary card 00000071 05052 0 75 021 5073 3388 tmi inc050-* yes, go copy the data 05053 3 17 002 0 3389 sta sm.ict,3 no, put the char count in the mbx 05054 0 07 067 5143 3390 lda a.h002-* addr (sm.dcw)+1 05055 0 17 106 5163 3391 sta incdcw-* initialize pointer to dcws in mbx 05056 673 000 0 3392 ila 0 05057 0 47 074 5153 3393 ldq nbufs-* get number of buffers in chain 05060 3 14 004 0 3394 staq sm.nbf,3 put it in mbx 3395 we'll count it in q 05061 0 07 061 5142 3396 lda a.h001-* reinitialize pointer to temp array of tallies 05062 0 17 100 5162 3397 sta tallyp-* 3398 05063 4 07 077 5162 3399 inc045 lda tallyp-*,* get next tally 05064 4 17 077 5163 3400 sta incdcw-*,* store it in mbx 05065 573 777 0 3401 iaq -1 count it 05066 0 74 047 5135 3402 tze incbak-* finished when we reach zero 05067 0 76 073 5162 3403 aos tallyp-* bump pointers 05070 673 002 0 3404 ila 2 05071 0 16 072 5163 3405 asa incdcw-* 05072 0 71 771 5063 3406 tra inc045-* back for next one 3407 05073 673 102 0 3408 inc050 ila inmbx change opcode 05074 0336 11 0 3409 als 9 to "input in mailbox" 05075 122 001 0 3410 iora rcd (keep it rcd) 05076 3 17 003 0 3411 sta sm.op,3 05077 3333 00 0 3412 cx3a 05100 0 06 050 5150 3413 ada l.h006-* (sm.dat,b.0) point x3 at mailbox data area 05101 4333 00 0 3414 cax3 05102 1 03 026 0 3415 ldx2 t.dcp,1 point x2 at input chain 05103 0 13 252 5355 3416 stx2 oldhed-* save it for later freeing 05104 0 56 050 5154 3417 stz icount-* start count over 05105 2 07 001 0 3418 inc060 lda bf.tly,2 05106 0 34 036 5144 3419 ana l.h001-* buftmk 05107 0 16 045 5154 3420 asa icount-* keep count of total number 05110 0 13 050 5160 3421 stx2 ibufp-* remember current buffer address 05111 6333 00 0 3422 caq hold running count in q 05112 3332 00 0 3423 cx2a 05113 0 06 036 5151 3424 ada l.h007-* (bf.dta,b.0) get pointer to data in buffer 05114 0332 00 0 3425 cax2 05115 2 07 200 0 3426 inc080 lda 0,2,b.0 get a character form the buffer 05116 3 17 200 0 3427 sta 0,3,b.0 store it in mailbox 05117 273 300 0 3428 iacx2 0,b.1 bump pointers 05120 373 300 0 3429 iacx3 0,b.1 end of binary card 00000072 05121 573 777 0 3430 iaq -1 count the character 05122 0 64 773 5115 3431 tnz inc080-* if more, go get the next one 05123 0 03 035 5160 3432 ldx2 ibufp-* no more, get buffer pointer back in x2 05124 2 07 001 0 3433 lda bf.flg,2 last one? assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 123 incnt -- subroutine to get input character count 05125 0 31 021 5146 3434 cana l.h003-* bfflst 05126 0 64 003 5131 3435 tnz inc090-* yes, wrap it up 05127 2 03 000 0 3436 ldx2 bf.nxt,2 no, get forward pointer 05130 0 71 755 5105 3437 tra inc060-* process next buffer 3438 05131 3439 inc090 null 05131 0 07 023 5154 3440 lda icount-* get final count 05132 0 41 645 4777 3441 ldx3 incsx3-* get saved mailbox address 05133 3 17 002 0 3442 sta sm.ict,3 05134 0 76 025 5161 3443 aos shinp-* set flag showing short input in progress 3444 05135 3445 incbak return incnt 3446 05137 3447 inc030 null 05137 2 03 000 0 3448 ldx2 bf.nxt,2 05140 0 64 646 5006 3449 tnz inc010-* go process next buffer 3450 if there isn't one, something's wrong 05141 3451 die 11 3452 3453 3454 3455 05142 0 05164 1 3456 a.h001 ind tallys pointer to tally array 05143 3 00007 0 3457 a.h002 ind sm.dcw+1,3 pointer to lower half of dcws 3458 3459 05144 000777 0 3460 l.h001 vfd 18/buftmk 05145 020000 0 3461 l.h002 vfd 18/bffbrk 05146 040000 0 3462 l.h003 vfd 18/bfflst 05147 777774 0 3463 l.h004 oct 777774 3464 *l.h005 unused 05150 2 00004 0 3465 l.h006 zero sm.dat,b.0 05151 2 00002 0 3466 l.h007 zero bf.dta,b.0 05152 777000 0 3467 l.h008 oct 777000 3468 05153 3469 nbufs bss 1 number of buffers processed so far 05154 3470 icount bss 1 number of characters processed 05155 3471 iflags bss 1 flags for sending back to multics 05156 3472 increm bss 1 amount by which tally has beeen adjusted 05157 3473 itally bss 1 05160 3474 ibufp bss 1 05161 3475 shinp bss 1 global dia_man flag indicating short input transa 05162 3476 tallyp bss 1 pointer to current element of tally array 05163 3477 incdcw bss 1 pointer to current pseudo-dcw in mailbox 05164 3478 tallys bss 24 temporary array of buffer tallies assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 124 indata -- sets up dcw list for rtx 3479 ttls indata -- sets up dcw list for rtx 3480 3481 this subroutine sets up a dcw list for sending 3482 an input chain to the cs 3483 the mailbox in "savmbx" has the following information 3484 in (18-bit) words 8-11: 3485 3486 word 8: second address or 0 3487 word 9: second tally or 0 3488 word 10: data address 3489 word 11: tally 3490 3491 words 8 and 9 are only used if cs is supplying 3492 two addresses because of wraparound in its circular 3493 input buffer 3494 3495 tallies are in characters 3496 3497 x1: virtual tib address 3498 05214 3499 indata subr ind 05217 0 41 124 5343 3500 ldx3 a.i001-* addr(dcws) 05220 4 50 124 5344 3501 stx3 a.i002-*,* dcwadr 05221 0 50 135 5356 3502 stx3 curdcw-* initialize dcw pointer 05222 4 56 123 5345 3503 stz a.i003-*,* initialize dcwlen 05223 0 41 123 5346 3504 ldx3 a.i004-* addr(savmbx) -- get mailbox address 3505 05224 1 03 026 0 3506 ldx2 t.dcp,1 get pointer to first buffer 05225 0 13 130 5355 3507 stx2 oldhed-* hang on to it for later freeing 05226 373 006 0 3508 iacx3 sm.dcw point to dcw array in mbx end of binary card 00000073 05227 0 50 130 5357 3509 stx3 pdcwa-* 05230 0 56 131 5361 3510 stz nblks-* initialize this too 3511 05231 3512 ind010 null 05231 2 07 001 0 3513 lda bf.siz,2 find out how many blocks long this buffer is 05232 2337 17 0 3514 arl 15 05233 773 001 0 3515 iaa 1 05234 0 16 125 5361 3516 asa nblks-* keep running count 05235 2 07 001 0 3517 lda bf.tly,2 get buffer tally 05236 0 34 114 5352 3518 ana l.i001-* =buftmk 05237 6333 00 0 3519 caq put tally in q 05240 3332 00 0 3520 cx2a 05241 773 002 0 3521 iaa bf.dta get fnp address in a 05242 0 10 022 5264 3522 tsy indcw-* make the dcw 3523 05243 2 07 001 0 3524 lda bf.flg,2 is this last buffer? 05244 0 31 107 5353 3525 cana l.i002-* =bfflst 05245 0 64 004 5251 3526 tnz ind050-* yes,finish up 05246 2 03 000 0 3527 ldx2 bf.nxt,2 no, get next buffer 05247 0 64 762 5231 3528 tnz ind010-* assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 125 indata -- sets up dcw list for rtx 05250 3529 die 11 bad news if there isn't one 3530 05251 3531 ind050 null no more input buffers 05251 0 47 110 5361 3532 ldq nblks-* 05252 0 10 051 5323 3533 tsy instrp-* take buffers of dcp chain 05253 0 41 103 5356 3534 ldx3 curdcw-* get dcw address 3535 to set timw bit 3536 and make interrupt and disconnect dcws 05254 4 10 075 5351 3537 tsy a.i007-*,* wtimw (which updates x3 itself) 05255 4 10 072 5347 3538 tsy a.i005-*,* bint 05256 373 004 0 3539 iacx3 4 05257 4 10 071 5350 3540 tsy a.i006-*,* bdisc 05260 673 010 0 3541 ila 8 update dcw length 05261 4 16 064 5345 3542 asa a.i003-*,* dcwlen 05262 3543 return indata all done 3544 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 126 indcw -- build dcw for indata 3545 ttls indcw -- build dcw for indata 3546 3547 input: 3548 a -- fnp address 3549 q -- tally in characters 3550 3551 curdcw contains address of dcw to be built 3552 pdcwa contains pointer to next pseudo-dcw 3553 containing cs address 3554 both of these are to be updated 3555 as is dcwlen (no. of 36-bit words in dcw list) 3556 05264 3557 indcw subr inw,(a,q,x3) 3558 end of binary card 00000074 05300 0 41 056 5356 3559 ldx3 curdcw-* get dcw pointer 05301 573 003 0 3560 iaq 3 convert tally to words 05302 4337 02 0 3561 qrs 2 (words = (char+3)/4) 05303 0 37 051 5354 3562 ora l.i003-* 0,w.2 05304 3 14 002 0 3563 staq 2,3 put tally and fnp address in dcw 05305 4 04 052 5357 3564 ldaq pdcwa-*,* get next absolute cs address 05306 2334 06 0 3565 llr 6 get low-order 18 bits in a 05307 4336 14 0 3566 qls 12 isolate high-order part of address 05310 6337 06 0 3567 qrl 6 it ends up in bits 24-29 of dcw 05311 3 14 000 0 3568 staq 0,3 store in dcw 3569 05312 673 075 0 3570 ila diaftc get opcode (fnp -> cs transfer) 05313 3 72 001 0 3571 orsa 1,3 store in dcw 05314 673 004 0 3572 ila 4 05315 0 16 041 5356 3573 asa curdcw-* update dcw pointer 05316 673 002 0 3574 ila 2 and list length 05317 4 16 026 5345 3575 asa a.i003-*,* dcwlen 05320 0 16 037 5357 3576 asa pdcwa-* 05321 3577 return indcw that's all assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 127 instrp -- subroutine to strip input buffers of t.dcp chai 3578 ttls instrp -- subroutine to strip input buffers of t.dcp chain 3579 3580 removes input buffers that have been sent from t.dcp chain 3581 and adjusts t.dcpl accordingly 3582 3583 input: 3584 q -- number of buffers in chain sent 3585 05323 3586 instrp subr ins,(q) 05331 1 07 041 0 3587 lda t.dcpl,1 we've removed some blocks from t.dcp chain 05332 0 26 776 5330 3588 sba inssq-* this many 05333 1 17 041 0 3589 sta t.dcpl,1 05334 2 07 000 0 3590 lda bf.nxt,2 save next-pointer from last buffer 05335 1 17 026 0 3591 sta t.dcp,1 will be head of next input chain 05336 0 64 002 5340 3592 tnz 2 if there isn't another chain, 05337 1 56 027 0 3593 stz t.dlst,1 kill tail pointer 05340 2 56 000 0 3594 stz bf.nxt,2 zero next-pointer so chain can be freed 05341 3595 return instrp assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 128 storage for indata and indcw 3596 ttls storage for indata and indcw 3597 05343 0 05750 1 3598 a.i001 ind dcws 05344 0 05746 1 3599 a.i002 ind dcwadr 05345 0 05747 1 3600 a.i003 ind dcwlen end of binary card 00000075 05346 0 02462 1 3601 a.i004 ind savmbx 05347 0 05572 1 3602 a.i005 ind bint 05350 0 05604 1 3603 a.i006 ind bdisc 05351 0 06301 1 3604 a.i007 ind wtimw 3605 3606 05352 000777 0 3607 l.i001 vfd 18/buftmk 05353 040000 0 3608 l.i002 vfd 18/bfflst 05354 1 00000 0 3609 l.i003 zero 0,w.2 36-bit addressing 3610 3611 05355 3612 oldhed bss 1 head of input chain being sent 05356 3613 curdcw bss 1 address of current dcw 05357 3614 pdcwa bss 1 address of current pseudo-dcw in mailbox 05360 3615 blimit bss 1 highest allowed cs address + one 05361 3616 nblks bss 1 number of 32-word blocks used by input chain 3617 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 129 rddcw -- set up dcw list to read cs dcw list 3618 ttls rddcw -- set up dcw list to read cs dcw list 3619 3620 this subroutine is called when a decoded mailbox 3621 contains a wtx command 3622 3623 the mailbox contains (in words 10-11) the address 3624 and length (in 36-bit words) of a cs dcw list 3625 for transmitting the output data 3626 3627 this routine creates dia dcw list to read the cs 3628 dcw list (the "pseudo-dcws") into a static area 3629 3630 x3 contains the mailbox address 3631 05362 3632 rddcw subr rdw,(x3) 3633 set up dcw address and length for conect 05370 0 03 123 5513 3634 ldx2 a.j001-* addr(dcws) 05371 4 13 123 5514 3635 stx2 a.j002-*,* dcwadr 05372 673 004 0 3636 ila 4 05373 4 17 122 5515 3637 sta a.j003-*,* dcwlen 3638 05374 3 04 012 0 3639 ldaq sm.adr,3 get address and length of cs dcw list 05375 0 27 763 5360 3640 cmpa blimit-* make sure it's probably in buffer area 05376 0 45 016 5414 3641 tnc rdw010-* it isn't 05377 0 57 126 5525 3642 stq ndcws-* save length 05400 2 57 003 0 3643 stq 3,2 put tally in dcw 05401 473 076 0 3644 ilq diactf get cs->fnp transfer opcode 05402 2 14 000 0 3645 staq 0,2 put it in dcw 3646 05403 0 07 115 5520 3647 lda a.j006-* get address of pseudo-dcw area (pdcws) 05404 0 37 120 5524 3648 ora l.j002-* (0,w.2) drop in 36-bit addressing 05405 2 17 002 0 3649 sta 2,2 put in fnp address of dcw 3650 05406 273 004 0 3651 iacx2 4 bump dcw pointer 05407 3332 00 0 3652 cx2a copy it into x3 to make disconnect dcw 05410 4333 00 0 3653 cax3 05411 4 10 106 5517 3654 tsy a.j005-*,* bdisc 05412 3655 rdwbak return rddcw all done 3656 05414 3657 rdw010 die 20 3658 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 130 rddata -- set up dcw list to read output data 3659 ttls rddata -- set up dcw list to read output data 3660 3661 this subroutine uses the pseudo-dcws read from 3662 the cs by rddcw to set up a dia dcw list for 3663 reading in the output data itself 3664 3665 the dcws will be built in a static area (dcws) and 3666 a chain of buffers will be allocated for the data 3667 05415 3668 rddata subr rdd end of binary card 00000076 3669 05420 0 43 073 5513 3670 ldx1 a.j001-* (dcws) get address of dcw list area 05421 4 53 073 5514 3671 stx1 a.j002-*,* (dcwadr) setup dcw list address for conect 05422 0 07 103 5525 3672 lda ndcws-* length of dcw list is 05423 773 001 0 3673 iaa 1 2*(ndcws+1) because of disconnect dcw 05424 0336 01 0 3674 als 1 05425 4 17 070 5515 3675 sta a.j003-*,* (dcwlen) setup dcw list length for conect 3676 05426 0 03 072 5520 3677 ldx2 a.j006-* get pointer to first pseudo-dcw 05427 0 56 077 5526 3678 stz rhead-* init head of chain addr 05430 0 56 077 5527 3679 stz rtail-* init tail of chain addr 05431 0 07 074 5525 3680 lda ndcws-* get number of dcws 05432 322 777 0 3681 iera -1 negate it 05433 773 001 0 3682 iaa 1 05434 0 17 074 5530 3683 sta dcwcnt-* init loop counter 3684 05435 3685 rdd010 null 05435 2 47 001 0 3686 ldq 1,2 get character tally 05436 0 64 002 5440 3687 tnz 2 zero ain't posssible 05437 3688 die 20 05440 573 103 0 3689 iaq 67 4 chars overhead + 63 to round up 05441 4337 06 0 3690 qrs 6 divide by 64 (chars per buffer) 05442 4336 05 0 3691 qls bufshf multiply by words per buffer 05443 4 10 053 5516 3692 tsy a.j004-*,* getubf 05444 0 71 042 5506 3693 tra rdd030-* failed, go clean up 05445 3333 00 0 3694 cx3a put new buffer addr in a 05446 0 41 061 5527 3695 ldx3 rtail-* get addr of prev buffer 05447 0 74 003 5452 3696 tze rdd015-* no prev buffer 05450 3 17 000 0 3697 sta bf.nxt,3 chain to next buffer 05451 0 71 002 5453 3698 tra 2 05452 0 17 054 5526 3699 rdd015 sta rhead-* save head of chain 05453 0 17 054 5527 3700 sta rtail-* save tail of chain 05454 4333 00 0 3701 cax3 put new buffer addr in x3 3702 05455 2 07 000 0 3703 lda 0,2 get cs address from pseudo-dcw 05456 0 74 034 5512 3704 tze rdd040-* zero address is unlikely to be right 05457 0 27 701 5360 3705 cmpa blimit-* so is one below the buffer area 05460 0 45 032 5512 3706 tnc rdd040-* 05461 473 076 0 3707 ilq diactf cs -> fnp transfer opcode 05462 1 14 000 0 3708 staq 0,1 put in dcw assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 131 rddata -- set up dcw list to read output data 05463 2 07 001 0 3709 lda 1,2 get character tally 05464 3 72 001 0 3710 orsa bf.tly,3 put it in buffer 05465 773 003 0 3711 iaa 3 convert to words end of binary card 00000077 05466 0335 24 0 3712 lrs 20 and put in q 05467 3333 00 0 3713 cx3a 05470 773 002 0 3714 iaa bf.dta get pointer to output buffer data 05471 0 37 033 5524 3715 ora l.j002-* 0,w.2 05472 1 14 002 0 3716 staq 2,1 put fnp address and tally in dcw 3717 05473 173 004 0 3718 iacx1 4 point to next place for dcw 05474 0 76 034 5530 3719 aos dcwcnt-* increment loop counter 05475 0 74 003 5500 3720 tze rdd020-* done if zero 05476 273 002 0 3721 iacx2 2 get addr of next pseudo-dcw 05477 0 71 736 5435 3722 tra rdd010-* build next dcw 3723 05500 3724 rdd020 null through building dcws 3725 except for disconnect 05500 2332 00 0 3726 cx1a put addr of next dcw ... 05501 4333 00 0 3727 cax3 in x3 (for bdisc) 05502 4 10 015 5517 3728 tsy a.j005-*,* bdisc 05503 0 76 712 5415 3729 aos rddata-* give success return 3730 05504 3731 rddbak return rddata 3732 05506 3733 rdd030 null couldn't allocate enough data buffers 05506 0 41 020 5526 3734 ldx3 rhead-* must free data buffers 05507 0 74 775 5504 3735 tze rddbak-* none allocated yet 05510 4 10 012 5522 3736 tsy a.j008-*,* frelbf 05511 0 71 773 5504 3737 tra rddbak-* cleanup and take error exit 3738 05512 3739 rdd040 die 20 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 132 storage for rddcw and rddata 3740 ttls storage for rddcw and rddata 3741 05513 0 05750 1 3742 a.j001 ind dcws static dcw list area 05514 0 05746 1 3743 a.j002 ind dcwadr conect's address of base of dcw list 05515 0 05747 1 3744 a.j003 ind dcwlen length of dcw list (36-bit words) 05516 0 23000 3 3745 a.j004 ind getubf subroutine to get an unreserved buffer 05517 0 05604 1 3746 a.j005 ind bdisc subroutine to make a disconnect dcw 05520 0 05532 1 3747 a.j006 ind pdcws address of static pseudo-dcw area 05521 0 15000 3 3748 a.j007 ind frebuf subroutine to release a single buffer 05522 0 16000 3 3749 a.j008 ind frelbf subroutine to free linked list of buffers 3750 3751 05523 000777 0 3752 l.j001 vfd 18/buftmk 05524 1 00000 0 3753 l.j002 zero 0,w.2 36-bit addressing 3754 3755 05525 3756 ndcws bss 1 number of cs dcws in list 05526 3757 rhead bss 1 address of head of allocated output chain 05527 3758 rtail bss 1 address of last buffer in allocated chain 05530 3759 dcwcnt bss 1 dcw loop counter 05531 233100 0 05532 3760 even 05532 3761 pdcws bss 16*2 space for reading in pseudo-dcws assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 133 bint -- builds an "interrupt cs" dcw 3762 ttls bint -- builds an "interrupt cs" dcw 3763 3764 interrupt cell assignment has been set by init 3765 from configuration status 3766 3767 x3 points to dcw to be built 3768 05572 3769 bint subr bin 3770 end of binary card 00000078 05575 0 04 023 5620 3771 ldaq intdcw-* get interrupt cell and opcode 05576 3 14 000 0 3772 staq 0,3 05577 0 07 020 5617 3773 lda l.z001-* 0,w.2 05600 473 000 0 3774 ilq 0 05601 3 14 002 0 3775 staq 2,3 this stuff will be ignored, but should be 36-bit 05602 3776 return bint 3777 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 134 bdisc -- builds a "disconnect" dcw 3778 ttls bdisc -- builds a "disconnect" dcw 3779 3780 a "disconnect" dcw will be put at the address 3781 pointed to by x3 3782 05604 3783 bdisc subr bdi 3784 05607 673 000 0 3785 ila 0 05610 473 070 0 3786 ilq diadis disconnect opcode 05611 3 14 000 0 3787 staq 0,3 05612 0 07 005 5617 3788 lda l.z001-* 0,w.2 (make unused fnp address 36-bit addressing) 05613 473 000 0 3789 ilq 0 05614 3 14 002 0 3790 staq 2,3 05615 3791 return bdisc 3792 05617 1 00000 0 3793 l.z001 zero 0,w.2 3794 05620 3795 even 05620 000000 0 3796 intdcw oct 0 05621 000073 0 3797 dindcw vfd 12/0,6/diainc interrupt cell is or'ed in at init time 3798 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 135 lock and unlock -- control the dia lock 3799 ttls lock and unlock -- control the dia lock 3800 3801 no new dia activity is initiated while the dia 3802 lock is locked 3803 05622 3804 lock subr loc,(inh) 3805 05631 0 20 024 5655 3806 szn dilock-* lock already locked? 05632 0 74 002 5634 3807 tze 2 05633 3808 die 14 yes, we shouldn't be locking it again 3809 05634 0 07 766 5622 3810 lda lock-* no, lock it with address of caller 05635 0 17 020 5655 3811 sta dilock-* 05636 3812 return lock 3813 3814 3815 05640 3816 unlock subr unl,(inh) end of binary card 00000079 3817 05647 0 20 006 5655 3818 szn dilock-* is it unlocked? 05650 0 64 002 5652 3819 tnz 2 05651 3820 die 15 then we shouldn't be trying to unlock it 3821 05652 0 56 003 5655 3822 stz dilock-* unlock it now 05653 3823 return unlock 3824 3825 05655 000000 0 3826 dilock oct 0 dia lock 3827 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 136 conect -- connect to the dia 3828 ttls conect -- connect to the dia 3829 3830 this subroutine is called when it's time to 3831 do a connect to the dia 3832 3833 it must: 3834 store the address and tally (36-bit words) 3835 of the dcw list in the list icw 3836 3837 calculate parity on all the dcws in the list 3838 3839 put the list icw address in the pcw mailbox 3840 3841 issue the connect 3842 3843 dcwadr is preset with the address of the dcw list 3844 dcwlen is preset with the number of 36-bit words 3845 this is so that in case of an i/o error we can 3846 just use the same dcw list again 3847 05656 3848 conect subr con,(inh) 3849 05665 4 07 044 5731 3850 lda a.k003-*,* globsw 05666 0 31 051 5737 3851 cana l.k005-* (gbfhng) is anyone listening at other end? 05667 0 64 036 5725 3852 tnz conbak-* no, don't bother doing connect 3853 05670 0 07 056 5746 3854 lda dcwadr-* get pointer to head of list 05671 0332 00 0 3855 cax2 05672 0 37 044 5736 3856 ora l.k004-* 0.w,2 05673 0 47 054 5747 3857 ldq dcwlen-* get length 05674 0 14 044 5740 3858 staq lsticw-* 3859 3860 now calculate parity on dcws 3861 set bit 21 to be odd parity with bits 0-17 3862 then set bit 22 to be odd parity with bits 18-35 3863 05675 3864 con010 null 05675 0 07 036 5733 3865 lda l.k001-* =npbits 05676 2 32 001 0 3866 ansa 1,2 turn them both off first 05677 2 07 000 0 3867 lda 0,2 get high-order word 05700 3336 22 0 3868 alp 18 get parity 05701 0 64 003 5704 3869 tnz con020-* already odd, do nothing 05702 0 07 032 5734 3870 lda l.k002-* =pupper 05703 2 72 001 0 3871 orsa 1,2 or on upper parity bit 3872 05704 3873 con020 null 05704 2 07 001 0 3874 lda 1,2 get second word 05705 3336 22 0 3875 alp 18 05706 0 64 003 5711 3876 tnz con030-* if already odd, don't bother it 05707 0 07 026 5735 3877 lda l.k003-* =plower end of binary card 00000080 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 137 conect -- connect to the dia 05710 2 72 001 0 3878 orsa 1,2 or on lower parity bit 3879 05711 3880 con030 null on to next dcw word 05711 573 777 0 3881 iaq -1 any more? 05712 0 74 003 5715 3882 tze con040-* 05713 273 002 0 3883 iacx2 2 yes, bump pointer 05714 0 71 761 5675 3884 tra con010-* go around again 3885 05715 3886 con040 null parity all set 05715 0 04 027 5744 3887 ldaq licadr-* get address and parity of list icw 05716 4 14 011 5727 3888 staq a.k001-*,* (dimb) dia pcw mailbox 3889 refresh status icw 05717 0 04 023 5742 3890 ldaq sticw-* clean status icw model 05720 4 14 010 5730 3891 staq a.k002-*,* (dist) dia status icw 05721 673 001 0 3892 ila 1 indicate that connect is pending 05722 4 17 010 5732 3893 sta a.k004-*,* iopend 3894 3895 05723 073 004 0 3896 sel dich 05724 4 60 003 5727 3897 cioc a.k001-*,* dimb (dia pcw mailbox) 3898 that's it 05725 3899 conbak return conect 3900 3901 05727 0 00454 0 3902 a.k001 ind dimb dia pcw mailbox 05730 0 00456 0 3903 a.k002 ind dist 05731 0 24000 3 3904 a.k003 ind globsw 05732 0 00134 1 3905 a.k004 ind iopend 3906 05733 717777 0 3907 l.k001 vfd 18/npbits 05734 040000 0 3908 l.k002 vfd 18/pupper 05735 020000 0 3909 l.k003 vfd 18/plower 05736 1 00000 0 3910 l.k004 zero 0,w.2 36-bit addressing 05737 000002 0 3911 l.k005 vfd 18/gbfhng 3912 3913 05740 3914 even 05740 1 05750 1 3915 lsticw icw dcws,w.2,4 list icw 05741 000004 0 05742 3916 dlist null init uses this to do parity calculations 05742 1 00140 1 3917 sticw icw stat,w.2,1,1 dia status icw template 05743 010001 0 3918 with exhaust bit so we always see latest one 3919 05744 3920 even 05744 1 05740 1 3921 licadr zero lsticw,w.2 list icw address 05745 000070 0 3922 oct 70 init will or in parity 3923 05746 3924 dcwadr bss 1 address of dcw list 05747 3925 dcwlen bss 1 length of dcw list (36-bit words) 05750 3926 even assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 138 conect -- connect to the dia 05750 3927 dcws bss 4*28 place where most dcw lists are created 3928 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 139 wmbx -- write a mailbox to the cs 3929 ttls wmbx -- write a mailbox to the cs 3930 3931 this subroutine writes a mailbox to the cs after 3932 computing the checksum and storing it in the mailbox 3933 3934 a contains address of mailbox to be written, which 3935 will first be copied into swmbx 3936 if a is 0, mailbox is already in swmbx, and 3937 is being rewritten because of checksum error 3938 3939 mailbox number in mbxno will be used by wtimw 3940 to determine what bit to set in cs's 3941 "terminate interrupt multiplex word" (timw) 3942 and the mailbox size 3943 06130 3944 wmbx subr wmb 3945 06133 4333 00 0 3946 cax3 get mailbox address 06134 0 74 023 6157 3947 tze wmb020-* if zero, use swmbx 3948 else we'll copy it in 06135 0 07 220 6355 3949 lda mbxno-* 06136 422 010 0 3950 icmpa 8 fnp or cs origin? end of binary card 00000081 06137 0 75 003 6142 3951 tmi 3 cs 06140 673 744 0 3952 ila -fmbxsz/2 fnp, use large size 06141 0 71 002 6143 3953 tra 2 06142 673 770 0 3954 ila -8 get repetition count 06143 0 17 211 6354 3955 sta rcnt-* 06144 322 777 0 3956 iera -1 now make it positive 06145 773 001 0 3957 iaa 1 06146 0 17 203 6351 3958 sta wsize-* 06147 0 03 160 6327 3959 ldx2 a.l001-* addr(swmbx) 3960 06150 3961 wmb010 null 06150 3 04 000 0 3962 ldaq 0,3 pick up two words of mailbox 06151 2 14 000 0 3963 staq 0,2 copy them 06152 0 76 202 6354 3964 aos rcnt-* is that all? 06153 0 74 004 6157 3965 tze wmb020-* 06154 273 002 0 3966 iacx2 2 no, bump input and output pointers 06155 373 002 0 3967 iacx3 2 06156 0 71 772 6150 3968 tra wmb010-* do it again 3969 06157 3970 wmb020 null set transaction control word 06157 4 20 161 6340 3971 szn a.l011-*,* shinp 06160 0 74 003 6163 3972 tze 3 if "short input", set it to 06161 673 010 0 3973 ila tcinmb "sent input in mailbox" 06162 0 71 002 6164 3974 tra 2 else, set it 06163 673 014 0 3975 ila tcwmbx to "wrote mailbox" 06164 4 17 144 6330 3976 sta a.l002-*,* tcword 3977 3978 now set up dcw list assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 140 wmbx -- write a mailbox to the cs 06165 3979 trace mt.wmb,tr.mbx,(mbxno) 3980 06175 0 41 134 6331 3981 ldx3 a.l004-* addr(dcws) 06176 4 50 134 6332 3982 stx3 a.l005-*,* dcwadr 06177 673 012 0 3983 ila 10 10 words of dcws 06200 4 17 133 6333 3984 sta a.l006-*,* dcwlen 3985 06201 0 07 154 6355 3986 lda mbxno-* get mailbox number 06202 422 010 0 3987 icmpa 8 cs mailbox? 06203 0 75 007 6212 3988 tmi wmb030-* yes 06204 773 770 0 3989 iaa -8 no, get it in range 0-3 06205 3990 mpy l.l004-* (fmbxsz) use fnp size end of binary card 00000082 06207 7333 00 0 3991 cqa 06210 773 110 0 3992 iaa mh.fsb add base of fnp mailbox area 06211 0 71 003 6214 3993 tra wmb040-* 06212 3994 wmb030 null 06212 0336 03 0 3995 als 3 for cs mailbox, use mailbox no. times 8 06213 773 010 0 3996 iaa mh.sub and offset of submailbox 0 06214 3997 wmb040 null 06214 0 06 234 6450 3998 ada csmbx-* add address of cs mailbox header 06215 473 075 0 3999 ilq diaftc fnp->cs transfer opcode 06216 3 14 000 0 4000 staq 0,3 cs address and opcode into dcw 4001 06217 0 07 110 6327 4002 lda a.l001-* get addr(swmbx) in a 06220 0 37 125 6345 4003 ora l.l001-* 0,w.2 06221 0 47 130 6351 4004 ldq wsize-* tally for writing mailbox 06222 3 14 002 0 4005 staq 2,3 into dcw 06223 373 004 0 4006 iacx3 4 point to next dcw 4007 call subroutine to update timw 06224 0 10 055 6301 4008 tsy wtimw-* 4009 dcw pointer is also updated 4010 now put in interrupt and disconnect dcws 06225 4 10 107 6334 4011 tsy a.l007-*,* bint 06226 373 004 0 4012 iacx3 4 06227 4 10 106 6335 4013 tsy a.l008-*,* bdisc 4014 all done, now just connect 06230 4 10 106 6336 4015 tsy a.l009-*,* conect 06231 4016 return wmbx 4017 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 141 frembx -- tells cs a mailbox is free 4018 ttls frembx -- tells cs a mailbox is free 4019 4020 this subroutine sets up a dcw list to or on 4021 the bit corresponding to a mailbox being frees in the 4022 cs's "terminate interrupt multiplex word" (timw) 4023 06233 4024 frembx subr fre 4025 set transaction control word 06236 673 013 0 4026 ila tcfree to "mailbox freed" 06237 4 17 071 6330 4027 sta a.l002-*,* tcword 4028 06240 4029 trace mt.fre,tr.mbx,(mbxno) 4030 06250 0 07 105 6355 4031 lda mbxno-* cs or fnp mailbox? 06251 422 010 0 4032 icmpa 8 06252 0 75 014 6266 4033 tmi fre010-* cs end of binary card 00000083 06253 422 014 0 4034 icmpa 12 fnp, rewritten or not? 06254 0 75 002 6256 4035 tmi 2 yes 06255 773 774 0 4036 iaa -4 no, get number in range 8-11 06256 773 770 0 4037 iaa -8 now get it in range 0-3 06257 4333 00 0 4038 cax3 06260 4 56 061 6341 4039 stz a.l012-*,* (mbxfre,3) mark it free 06261 673 777 0 4040 ila -1 decrement used count 06262 4 16 062 6344 4041 asa a.l015-*,* mbused 06263 4 10 057 6342 4042 tsy a.l013-*,* (unlock) unlock dia now 06264 4 10 057 6343 4043 tsy a.l014-*,* (gate) make sure dgetwk runs 06265 0 71 012 6277 4044 tra frebak-* no need to tell multics anything 06266 4045 fre010 null 06266 0 41 043 6331 4046 ldx3 a.l004-* addr(dcws) 06267 4 50 043 6332 4047 stx3 a.l005-*,* dcwadr 06270 673 010 0 4048 ila 8 8 words of dcws 06271 4 17 042 6333 4049 sta a.l006-*,* dcwlen 06272 0 10 007 6301 4050 tsy wtimw-* set up dcws to update timw 4051 set up interrupt and disconnect dcws 06273 4 10 041 6334 4052 tsy a.l007-*,* bint 06274 373 004 0 4053 iacx3 4 06275 4 10 040 6335 4054 tsy a.l008-*,* bdisc 4055 do connect now 06276 4 10 040 6336 4056 tsy a.l009-*,* conect 06277 4057 frebak return frembx 4058 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 142 wtimw -- sets up dcws to update timw 4059 ttls wtimw -- sets up dcws to update timw 4060 4061 this subroutine sets up dcws to "or" in a bit 4062 corresponding to the mailbox number in "mbxno" 4063 to the cs's "terminate interrupt multiplex word" (timw) 4064 4065 we will use the dia opcode "transfer gate", which means 4066 "read and clear cs and or fnp", 4067 followed by fnp->cs transfer 4068 4069 x3 contains address of first dcw to be built 4070 on return it will point to next free spot in dcw list 4071 06301 4072 wtimw subr wti 4073 06304 0 07 042 6346 4074 lda l.l002-* "arl 0" instruction 06305 0 37 050 6355 4075 ora mbxno-* make it "arl [mbxno]" 06306 0 17 002 6310 4076 sta wti010-* store it where we'll execute it 4077 get high-order bit for shifting 06307 0 07 040 6347 4078 lda l.l003-* =400000 4079 shift it 06310 0 00000 0 4080 wti010 zero shift instruction goes here 06311 0 17 041 6352 4081 sta timw-* result will be new timw 4082 now set up dcws 06312 0 07 136 6450 4083 lda csmbx-* cs address of mailbox header 06313 773 002 0 4084 iaa mh.tim +offset of timw 06314 473 065 0 4085 ilq diatrg "transfer gate" opcode 06315 3 14 000 0 4086 staq 0,3 06316 473 075 0 4087 ilq diaftc second dcw is same but with fnp->cs transfer 06317 3 14 004 0 4088 staq 4,3 4089 06320 0 07 017 6337 4090 lda a.l010-* addr(timw),w.2 06321 473 001 0 4091 ilq 1 tally of one 36-bit word end of binary card 00000084 06322 3 14 002 0 4092 staq 2,3 this is for both dcws 06323 3 14 006 0 4093 staq 6,3 4094 06324 373 010 0 4095 iacx3 8 update dcw pointer 06325 4096 return wtimw that's all 4097 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 143 storage for wmbx, frembx, wtimw 4098 ttls storage for wmbx, frembx, wtimw 4099 06327 0 06356 1 4100 a.l001 ind swmbx 06330 0 01564 1 4101 a.l002 ind tcword 4102 *a.l003 unused 06331 0 05750 1 4103 a.l004 ind dcws 06332 0 05746 1 4104 a.l005 ind dcwadr 06333 0 05747 1 4105 a.l006 ind dcwlen 06334 0 05572 1 4106 a.l007 ind bint 06335 0 05604 1 4107 a.l008 ind bdisc 06336 0 05656 1 4108 a.l009 ind conect 06337 1 06352 1 4109 a.l010 zero timw,w.2 06340 0 05161 1 4110 a.l011 ind shinp "short input" flag 06341 3 00621 1 4111 a.l012 ind mbxfre,3 06342 0 05640 1 4112 a.l013 ind unlock 06343 0 00500 1 4113 a.l014 ind gate 06344 0 00625 1 4114 a.l015 ind mbused 4115 4116 06345 1 00000 0 4117 l.l001 zero 0,w.2 06346 2337 00 0 4118 l.l002 arl 0 template for shift of [mbxno] bits 06347 400000 0 4119 l.l003 oct 400000 06350 0 00034 0 4120 l.l004 zero fmbxsz/2 4121 4122 06351 4123 wsize bss 1 size of this mailbox (in 36-bit words) 06352 4124 even 06352 4125 timw bss 2 fnp's copy of cs timw 06354 4126 rcnt bss 1 repetition count for copying mailbox 06355 4127 mbxno bss 1 mailbox number 4128 06356 4129 even 06356 4130 swmbx bss 56 mailbox to be written 4131 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 144 dia configuration region 4132 ttls dia configuration region 4133 4134 06446 4135 even 06446 000000 0 4136 cspab oct port a and port b 06447 000000 0 4137 cspcd oct port c and port d 06450 000000 0 4138 csmbx oct cs mailbox address 06451 000000 0 4139 csics oct cs interrupt cell switch 06452 000000 0 4140 cslwa oct lower address bounds switches 4141 (bits 0-8) 06453 000000 0 4142 csupc oct upper address bounds switches 4143 (bits 0-8) 4144 bit 15 - store timer 4145 bit 16 - address bounds 06454 000000 0 4146 zerwd oct 0,0 36 bit zero word for end-of-file 06455 000000 0 06456 000000 0 4147 cssca oct cs system controller address 4148 006451 4149 dicell equ csics 006450 4150 dmbx equ csmbx 006446 4151 diconf equ cspab assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 145 subroutines to manage dia queues 4152 ttls subroutines to manage dia queues 4153 4154 ************************************************************ 4155 * 4156 * one dia queue is maintained for each tib as well 4157 * as one for ean error queue. 4158 * each queue consists of buffers linked 4159 * together with as many entries as will fit in each 4160 * buffer. 4161 * 4162 * format of first word of a dia queue entry 4163 * 4164 * ******************************* 4165 * * * * * 4166 * * flags * cnt * opcode * 4167 * * * * * 4168 * ******************************* 4169 * 0 5 6 8 9 17 4170 * 4171 * followed by the number of data words specified in count 4172 * 4173 * format of a buffer in the dia queue 4174 * 4175 * word 0 (qbnext) - address of next buffer in chain 4176 * 0 specifies end of chain 4177 * word 1 (qbcnt) - number of entries in this buffer 4178 * word 2 (qbfree) - address of first word in this buffer 4179 * word 3 (qbdata) - queue entries start here 4180 * 4181 ************************************************************ 4182 4183 * define buffer addresses 4184 000000 4185 qbnext equ 0 addr of next buffer 000001 4186 qbcnt equ 1 number of entries in this buffer 000002 4187 qbfree equ 2 address of first free word 000003 4188 qbdata equ 3 data starts here 4189 4190 * the queue handling routines set and/or depend on the 4191 * following variables: 4192 06457 4193 curque bss 1 must contain the address of the tib 4194 table entry for the current queue 06460 4195 curqbf bss 1 address of buffer that contains current 4196 queue entry 06461 4197 curqln bss 1 current line number, set for trace 06462 4198 nnonai bss 1 set by getqai to indicate the number 4199 if non-accept input queue entries 4200 before the first accept input entry assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 146 subroutines to manage dia queues 4201 eject 4202 ************************************************************ 4203 * 4204 * adqent - subroutine to add a new entry to a dia queue 4205 * 4206 * at input, the q contains the dia opcode in the lower 4207 * half and, if data is to be passed, the word count 4208 * in the upper half. if the word count is non-0, 4209 * x2 must contain the address of the data. 4210 * 4211 * this subroutine can be called by derrq at interrupt time, 4212 * and therefore must run inhibited 4213 * 4214 * there are no outputs. 4215 * 4216 ************************************************************ 4217 06463 4218 adqent subr adq,(inh,a,q,x2,x3) end of binary card 00000085 06506 7333 00 0 4219 cqa first word of queue entry 06507 0337 11 0 4220 ars 9 get word count 06510 773 001 0 4221 iaa 1 allow 1 word for opcode 06511 0 17 117 6630 4222 sta adqsnw-* save number of words required 4223 4224 * the new entry goes in the last buffer, so find it 4225 06512 0 03 745 6457 4226 ldx2 curque-* tib table entry 06513 2 41 001 0 4227 ldx3 qbuf,2 get buffer pointer 06514 0 74 016 6532 4228 tze adq010-* no buffers, go allocate one 06515 3 20 000 0 4229 adq030 szn qbnext,3 is this last buffer? 06516 0 74 003 6521 4230 tze adq020-* yes 06517 3 41 000 0 4231 ldx3 qbnext,3 follow thread 06520 0 71 775 6515 4232 tra adq030-* 4233 4234 * last buffer found, see if entry will fit 4235 06521 3333 00 0 4236 adq020 cx3a buffer address 06522 773 040 0 4237 iaa bufsiz compute end of buffer addr 06523 0 17 106 6631 4238 sta adqtmp-* save temoporarily 06524 3 07 002 0 4239 lda qbfree,3 address of first free word 06525 0 74 005 6532 4240 tze adq010-* (would have gone to 0 if off the end of memory) 06526 0 06 102 6630 4241 ada adqsnw-* plus number of words required 06527 0 27 102 6631 4242 cmpa adqtmp-* will entry fit 06530 0 65 002 6532 4243 tpl adq010-* nope 06531 0 71 016 6547 4244 tra adq040-* last buffer is fine 4245 4246 * must allocate a new buffer for this entry 4247 06532 0 50 077 6631 4248 adq010 stx3 adqtmp-* save last buffer address 06533 473 040 0 4249 ilq bufsiz 06534 4 10 076 6632 4250 tsy a.u001-*,* (=getbuf) allocate new buffer assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 147 subroutines to manage dia queues 06535 4251 die 10 06536 3333 00 0 4252 cx3a new buffer address 06537 773 003 0 4253 iaa qbdata starting address for data end of binary card 00000086 06540 3 17 002 0 4254 sta qbfree,3 save in buffer 06541 2 20 001 0 4255 szn qbuf,2 is this the first buffer for queue? 06542 0 74 004 6546 4256 tze adq050-* yes 06543 0 03 066 6631 4257 ldx2 adqtmp-* get pointer to old last buffer 06544 2 50 000 0 4258 stx3 qbnext,2 complete chain 06545 0 71 002 6547 4259 tra adq040-* 06546 2 50 001 0 4260 adq050 stx3 qbuf,2 store as first buffer in chain 4261 4262 * now a buffer has been found where the entry will fit 4263 06547 0 50 711 6460 4264 adq040 stx3 curqbf-* this is the new current buffer 06550 3 41 002 0 4265 ldx3 qbfree,3 address of first free word 4266 06551 4267 trace mt.inq,tr.que,(x3,adqsq,curqln) 4268 06566 0 07 715 6503 4269 lda adqsq-* pick up opcode from save area 06567 3 17 000 0 4270 sta 0,3 store in queue 06570 373 001 0 4271 iacx3 1 and bump pointer 06571 0337 11 0 4272 ars 9 get number of data words to copy 06572 0 74 010 6602 4273 tze adq060-* none 06573 0 03 711 6504 4274 ldx2 adqsx2-* get their address 06574 2 47 000 0 4275 adq070 ldq 0,2 get a word 06575 3 57 000 0 4276 stq 0,3 copy it 06576 273 001 0 4277 iacx2 1 bump pointers 06577 373 001 0 4278 iacx3 1 06600 773 777 0 4279 iaa -1 06601 0 64 773 6574 4280 tnz adq070-* loop til copied 06602 0 03 656 6460 4281 adq060 ldx2 curqbf-* start of this buffer 06603 2 50 002 0 4282 stx3 qbfree,2 updata next free pointer 06604 2 76 001 0 4283 aos qbcnt,2 count this entry 06605 0 20 654 6461 4284 szn curqln-* was this for s apecific line? 06606 0 74 020 6626 4285 tze adqbak-* no, skip metering 4286 06607 1 41 052 0 4287 ldx3 t.metr,1 06610 4288 cmeter mincs,m.cql,l.u001-* end of binary card 00000087 06617 4289 cmeter mupdat,m.dql,(m.cql(3)) 4290 06626 4291 adqbak return adqent all done 4292 06630 4293 adqsnw bss 1 06631 4294 adqtmp bss 1 4295 06632 0 20000 3 4296 a.u001 ind getbuf 06633 0 15000 3 4297 a.u002 ind frebuf 4298 4299 assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 148 subroutines to manage dia queues 06634 000001 0 4300 l.u001 dec 1 for metering 06635 777777 0 4301 l.u002 dec -1 likewise assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 149 subroutines to manage dia queues 4302 eject 4303 ************************************************************ 4304 * 4305 * dlqent - suboutine to delete an entry for the queue. 4306 * the entry may be anywhere in the queue. if the 4307 * entry deleted is the last in its buffer, the 4308 * buffer is freed also. 4309 * 4310 * input - x2 must point at entry to delete 4311 * 4312 ************************************************************ 4313 06636 4314 dlqent subr dlq,(a,q,x2,x3) 4315 06655 2332 00 0 4316 cx1a for a specific line? 06656 0 74 020 6676 4317 tze dlq005-* no, no metering 06657 1 41 052 0 4318 ldx3 t.metr,1 06660 4319 cmeter mincs,m.cql,l.u002-* end of binary card 00000088 06667 4320 cmeter mupdat,m.dql,(m.cql(3)) 4321 06676 0 41 562 6460 4322 dlq005 ldx3 curqbf-* start of buffer 06677 673 777 0 4323 ila -1 must decmerentcount 06700 3 16 001 0 4324 asa qbcnt,3 06701 0 74 020 6721 4325 tze dlq010-* last entry in queue, just free buffer 4326 06702 2 07 000 0 4327 lda 0,2 pick up opcode word 06703 2 56 000 0 4328 stz 0,2 and clear it 06704 273 001 0 4329 iacx2 1 bump pointer 06705 0337 11 0 4330 ars 9 get word count 06706 022 007 0 4331 iana 7 06707 0 74 005 6714 4332 tze dlq020-* there are none 06710 2 56 000 0 4333 dlq030 stz 0,2 clear data words 06711 273 001 0 4334 iacx2 1 note: this becomes 0 rather than 100000 06712 773 777 0 4335 iaa -1 06713 0 64 775 6710 4336 tnz dlq030-* loop over all words 06714 3 23 002 0 4337 dlq020 cmpx2 qbfree,3 was this last entry in buffer? 06715 0 64 023 6740 4338 tnz dlqret-* no 06716 0 07 735 6653 4339 lda dlqsx2-* get origional entry pointer 06717 3 17 002 0 4340 sta qbfree,3 and update free pointer 06720 0 71 020 6740 4341 tra dlqret-* and done 4342 4343 * deleting the only entry in the buffer, so just free buffer 4344 06721 3 03 000 0 4345 dlq010 ldx2 qbnext,3 hold onto pointer to next buffer 06722 473 040 0 4346 ilq bufsiz 06723 4 10 710 6633 4347 tsy a.u002-*,* (=frebuf) free this buffer 4348 4349 * rethread the buffer chain 4350 06724 0 07 534 6460 4351 lda curqbf-* addr of buffer just freed assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 150 subroutines to manage dia queues 06725 0 41 532 6457 4352 ldx3 curque-* tib table entry 06726 3 27 001 0 4353 cmpa qbuf,3 did we free first buffer in chain 06727 0 64 003 6732 4354 tnz dlq040-* no end of binary card 00000089 06730 3 13 001 0 4355 stx2 qbuf,3 yes, next buffer now first 06731 0 71 007 6740 4356 tra dlqret-* 06732 3 41 001 0 4357 dlq040 ldx3 qbuf,3 follow buffer trail 06733 3 27 000 0 4358 dlq060 cmpa qbnext,3 does this buffer point to one just freed? 06734 0 74 003 6737 4359 tze dlq050-* yes 06735 3 41 000 0 4360 ldx3 qbnext,3 06736 0 71 775 6733 4361 tra dlq060-* 06737 3 13 000 0 4362 dlq050 stx2 qbnext,3 thread out freed buffer 06740 4363 dlqret return dlqent assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 151 subroutines to manage dia queues 4364 eject 4365 ************************************************************ 4366 * 4367 * getqhd - subroutine to find first entry in a dia queue. 4368 * 4369 * no inputs 4370 * 4371 * output - if queue empty, return is inline 4372 * otherwise, a skip return is done, and x2 will point to the 4373 * first entry. 4374 * 4375 ************************************************************ 4376 06742 4377 getqhd subr ghd 4378 06745 0 03 512 6457 4379 ldx2 curque-* current tib table 06746 2 03 001 0 4380 ldx2 qbuf,2 first buffer 06747 0 74 010 6757 4381 tze ghdret-* quque empty 06750 0 13 510 6460 4382 stx2 curqbf-* this becomes current buffer 06751 273 003 0 4383 iacx2 qbdata data starts here 06752 2 20 000 0 4384 szn 0,2 first entry here? 06753 0 64 003 6756 4385 tnz ghd010-* yes, all done 06754 0 10 005 6761 4386 tsy getqnx-* find next entry 06755 0 71 002 6757 4387 tra ghdret-* no entries 06756 0 76 764 6742 4388 ghd010 aos getqhd-* found entry, so skip 06757 4389 ghdret return getqhd 4390 4391 4392 ************************************************************ 4393 * 4394 * getqnx - subroutine that finds the next entry in the 4395 * dia queue. 4396 * 4397 * input - x2 pointers to current entry 4398 * 4399 * output - if no more entries, return is in line 4400 * otherwise a skip is done and x2 pointrs at the next entry 4401 * 4402 ************************************************************ 4403 06761 4404 getqnx subr gnx,(a) 4405 06767 2 07 000 0 4406 lda 0,2 pick up current entry 06770 0 74 006 6776 4407 tze gnx020-* null 06771 273 001 0 4408 iacx2 1 over opcode 06772 0337 11 0 4409 ars 9 get word count 06773 022 007 0 4410 iana 7 06774 0 17 026 7022 4411 sta gnxsav-* 06775 0 02 025 7022 4412 adcx2 gnxsav-* skip over that too end of binary card 00000090 06776 0 07 462 6460 4413 gnx020 lda curqbf-* start of current buffer assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 152 subroutines to manage dia queues 06777 773 040 0 4414 iaa bufsiz comput end address 07000 0 17 022 7022 4415 sta gnxsav-* 07001 3332 00 0 4416 cx2a 07002 0 27 020 7022 4417 gnx030 cmpa gnxsav-* end of buffer? 07003 0 75 007 7012 4418 tmi gnx010-* no 07004 0 03 454 6460 4419 ldx2 curqbf-* start of buffer 07005 2 03 000 0 4420 ldx2 qbnext,2 step to next 07006 0 74 012 7020 4421 tze gnxret-* no more buffers, done 07007 0 13 451 6460 4422 stx2 curqbf-* 07010 273 003 0 4423 iacx2 qbdata 07011 0 71 765 6776 4424 tra gnx020-* 07012 2 20 000 0 4425 gnx010 szn 0,2 found good entry? 07013 0 64 004 7017 4426 tnz gnx040-* yes 07014 773 001 0 4427 iaa 1 over zero word 07015 0332 00 0 4428 cax2 had to add in a in case we went off end 07016 0 71 764 7002 4429 tra gnx030-* 07017 0 76 742 6761 4430 gnx040 aos getqnx-* found one, so skip 07020 4431 gnxret return getqnx 07022 4432 gnxsav bss 1 4433 4434 4435 ************************************************************ 4436 * 4437 * getqai - subroutine to find first accept input in queue 4438 * 4439 * output - x2 pointers to accept input, if found, and 4440 * a skip return is made. if not found, the return is inline. 4441 * the variable nnonai is set to the number of queue 4442 * entries skipped over. 4443 * 4444 ************************************************************ 4445 07023 4446 getqai subr gai,(a) 4447 07031 0 56 431 6462 4448 stz nnonai-* zero counter initially 07032 0 10 710 6742 4449 tsy getqhd-* get head of queue 07033 0 71 012 7045 4450 tra gairet-* empty 07034 2 07 000 0 4451 gai020 lda 0,2 pick up opcode 07035 022 377 0 4452 iana 255 07036 422 112 0 4453 icmpa accin found it? 07037 0 74 005 7044 4454 tze gai010-* yes 07040 0 76 422 6462 4455 aos nnonai-* count something else 07041 0 10 720 6761 4456 tsy getqnx-* onward to next 07042 0 71 003 7045 4457 tra gairet-* reached end end of binary card 00000091 07043 0 71 771 7034 4458 tra gai020-* check for accin 07044 0 76 757 7023 4459 gai010 aos getqai-* skip return, found accin 07045 4460 gairet return getqai assm 01 12-10-82 15.771 multics/fnp direct interface adapter -- dia_man page 153 j u m p t a b l e s 4461 ttls j u m p t a b l e s 4462 4463 4464 format: 4465 4466 word 0 return addr after interrupt processed 4467 word 1 place to go on interrupt (in dia_man) 4468 word 2 ioc#,channel#,module#(3) 4469 4470 07047 4471 diajt null used to find jump tables for setting up iv's 07047 0 00000 0 4472 jmptm zero terminate 07050 4 10 062 7132 4473 tsy ivp-*,* 07051 200002 0 4474 vfd 4/dich,8/0,6/trmmod 4475 4476 mailbox requests 07052 4477 jumptb (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) end of binary card 00000092 4478 07132 0 03000 3 4479 ivp zero invp 4480 4481 007133 4482 enddia equ * end of binary card 00000093 4483 end 7134 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.787 multics/fnp direct interface adapter -- dia_man page 154 octal symbol references by sequence no. 4 accall 205 205 1998 112 accin 205 205 877 2527 3043 4453 12 accout 205 205 1842 100 acctrm 205 205 2705 1112 accum 1055 903 915 918 1055 13 aclout 205 205 1844 4500 acu010 3099 3096 3099 122 acuacr 205 205 2712 121 acudlo 205 205 2711 4520 acumvc 3122 3122 3128 123 acung 205 205 2713 120 acupwi 205 205 2710 4444 acusr 3087 1790 3087 3130 6532 adq010 4248 4228 4240 4243 4248 6521 adq020 4236 4230 4236 6515 adq030 4229 4229 4232 6547 adq040 4264 4244 4259 4264 6546 adq050 4260 4256 4260 6602 adq060 4281 4273 4281 6574 adq070 4275 4275 4280 6626 adqbak 4291 4285 4291 6463 adqent 4218 1038 4218 4291 6630 adqsnw 4293 4222 4241 4293 6503 adqsq 4218 4218 4267 4269 6504 adqsx2 4218 4218 4274 6631 adqtmp 4294 4238 4242 4248 4257 4294 113 a.a001 456 429 431 456 114 a.a002 457 420 426 438 446 452 457 115 a.a003 458 419 458 116 a.a004 459 445 459 514 117 a.a005 460 449 460 532 120 a.a006 461 451 461 121 a.a007 462 412 462 122 a.a008 463 413 463 123 a.a009 464 464 500 510 529 531 124 a.a010 465 465 505 509 525 125 a.a011 466 394 466 410 a.b001 676 494 676 411 a.b002 677 536 677 412 a.b003 678 574 619 678 413 a.b004 679 642 679 414 a.b005 680 648 680 415 a.b006 681 655 681 416 a.b007 682 649 682 417 a.b008 683 623 644 683 420 a.b009 684 659 684 421 a.b010 685 664 685 422 a.b011 686 661 686 423 a.b012 687 616 671 687 424 a.b013 688 673 688 425 a.b014 689 558 568 596 598 689 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 155 octal symbol references by sequence no. 426 a.b015 690 548 690 427 a.b016 691 611 691 430 a.b017 692 618 692 431 a.b018 693 512 613 693 571 a.c001 784 727 784 572 a.c002 785 747 785 573 a.c003 786 749 786 604 a.c014 796 751 796 605 a.c015 797 754 797 606 a.c016 798 753 798 607 a.c017 799 776 799 610 a.c018 800 755 780 800 611 a.c019 801 759 801 612 a.c020 802 770 802 613 a.c021 803 772 803 614 a.c022 804 771 804 1070 a.d003 1032 870 1028 1032 1071 a.d005 1033 1029 1033 1072 a.d006 1034 860 981 1018 1034 1073 a.d007 1035 862 949 983 991 1019 1035 1074 a.d008 1036 959 1036 1075 a.d009 1037 869 998 1027 1037 1076 a.d010 1038 874 929 1038 1089 1077 a.d011 1039 985 996 1039 1100 a.d012 1041 989 1041 1101 a.d013 1042 852 1042 1078 1083 1094 1510 a.e001 1371 1147 1371 1511 a.e002 1372 1151 1372 1512 a.e003 1373 1152 1167 1173 1272 1276 1373 1514 a.e005 1375 1256 1281 1375 1515 a.e007 1376 1315 1327 1342 1376 1468 1516 a.e008 1377 1344 1377 1476 1517 a.e009 1378 1232 1260 1283 1378 1520 a.e010 1379 1331 1379 1521 a.e011 1380 1365 1380 1522 a.e012 1381 1367 1381 1523 a.e013 1382 1271 1382 1524 a.e014 1383 1172 1383 1525 a.e015 1384 1280 1384 1526 a.e016 1385 1257 1282 1385 1527 a.e017 1386 1255 1386 1530 a.e018 1387 1227 1387 1531 a.e019 1388 1140 1188 1388 1505 1558 1586 1532 a.e023 1389 1275 1389 1533 a.e024 1390 1218 1390 1534 a.e025 1391 1347 1391 1536 a.e027 1393 1290 1393 1537 a.e028 1394 1292 1394 1540 a.e029 1395 1184 1395 1541 a.e030 1396 1214 1396 1542 a.e032 1397 1397 1453 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 156 octal symbol references by sequence no. 1543 a.e033 1398 1163 1398 1544 a.e034 1399 1166 1399 1545 a.e035 1400 1265 1400 1546 a.e036 1401 1266 1401 2166 a.f001 1760 1760 1973 2167 a.f002 1761 1633 1714 1761 1860 1883 2170 a.f003 1762 1503 1762 2171 a.f004 1763 1521 1763 2172 a.f005 1764 1536 1764 1926 1935 2173 a.f006 1765 1547 1562 1588 1606 1614 1735 1765 2174 a.f007 1766 1552 1572 1578 1766 2175 a.f008 1767 1598 1767 2176 a.f009 1768 1639 1768 2177 a.f010 1769 1626 1769 2200 a.f011 1770 1718 1770 2201 a.f012 1771 1652 1674 1771 2202 a.f013 1772 1554 1583 1772 2203 a.f014 1773 1661 1773 2204 a.f015 1774 1774 1908 1924 1932 2205 a.f016 1775 1775 1893 2206 a.f017 1776 1500 1504 1776 2207 a.f018 1777 1496 1777 2210 a.f019 1778 1778 1855 2211 a.f021 1779 1632 1667 1685 1779 1859 1882 2212 a.f022 1780 1780 1879 2213 a.f023 1782 1519 1782 1850 1875 2214 a.f024 1783 1783 1971 2215 a.f025 1784 1527 1784 2216 a.f026 1785 1627 1634 1715 1719 1785 2217 a.f029 1787 1580 1787 2220 a.f032 1790 1645 1790 2221 a.f033 1791 1687 1791 2222 a.f034 1792 1688 1792 2223 a.f035 1793 1690 1793 2224 a.f036 1794 1710 1794 2225 a.f037 1795 1711 1795 2226 a.f038 1796 1713 1796 2227 a.f039 1797 1565 1590 1797 2230 a.f040 1798 1630 1798 2231 a.f041 1799 1731 1799 2232 a.f044 1802 1745 1802 2233 a.f048 1806 1756 1806 3164 a.g001 2327 2071 2327 3165 a.g002 2328 2139 2200 2206 2214 2226 2308 2328 3166 a.g003 2329 2187 2329 3167 a.g004 2330 2135 2304 2330 3170 a.g005 2331 2122 2331 3171 a.g006 2332 2132 2332 3172 a.g007 2333 2035 2333 3173 a.g008 2334 2194 2334 3174 a.g009 2335 2064 2335 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 157 octal symbol references by sequence no. 3175 a.g010 2336 2314 2336 3176 a.g011 2337 2076 2337 3177 a.g012 2338 2097 2338 5142 a.h001 3456 3351 3396 3456 5143 a.h002 3457 3390 3457 5343 a.i001 3598 3500 3598 5344 a.i002 3599 3501 3599 5345 a.i003 3600 3503 3542 3575 3600 5346 a.i004 3601 3504 3601 5347 a.i005 3602 3538 3602 5350 a.i006 3603 3540 3603 5351 a.i007 3604 3537 3604 5513 a.j001 3742 3634 3670 3742 5514 a.j002 3743 3635 3671 3743 5515 a.j003 3744 3637 3675 3744 5516 a.j004 3745 3692 3745 5517 a.j005 3746 3654 3728 3746 5520 a.j006 3747 3647 3677 3747 5522 a.j008 3749 3736 3749 5727 a.k001 3902 3888 3897 3902 5730 a.k002 3903 3891 3903 5731 a.k003 3904 3850 3904 5732 a.k004 3905 3893 3905 6327 a.l001 4100 3959 4002 4100 6330 a.l002 4101 3976 4027 4101 6331 a.l004 4103 3981 4046 4103 6332 a.l005 4104 3982 4047 4104 6333 a.l006 4105 3984 4049 4105 6334 a.l007 4106 4011 4052 4106 6335 a.l008 4107 4013 4054 4107 6336 a.l009 4108 4015 4056 4108 6337 a.l010 4109 4090 4109 6340 a.l011 4110 3971 4110 6341 a.l012 4111 4039 4111 6342 a.l013 4112 4042 4112 6343 a.l014 4113 4043 4113 6344 a.l015 4114 4041 4114 1161 a.n001 1100 980 1100 1139 1162 a.n002 1101 1090 1101 1163 a.n003 1102 1102 1231 1267 1164 a.n004 1103 1084 1103 1165 a.n005 1104 1077 1085 1093 1104 1166 a.n006 1105 1105 1224 1229 1167 a.n007 1106 1106 1225 1170 a.n008 1107 1107 1226 1230 1171 a.n009 1108 1080 1096 1108 4624 a.o001 3201 3156 3201 4625 a.o002 3202 3158 3194 3202 4626 a.o003 3203 3167 3203 3233 4627 a.o004 3204 3165 3169 3204 3228 4631 a.o007 3207 3159 3179 3185 3193 3207 3237 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 158 octal symbol references by sequence no. 4632 a.o008 3208 3180 3208 4217 a.p001 2912 2846 2912 4220 a.p002 2913 2862 2913 4221 a.p003 2914 2906 2914 4222 a.p004 2915 2848 2915 4325 a.p501 2987 2962 2987 4700 a.q001 3274 3248 3267 3274 4701 a.q002 3275 3260 3275 4702 a.q003 3276 3269 3276 4703 a.q004 3277 3251 3277 4704 a.q005 3278 3253 3278 3312 3319 4762 a.r001 3329 3299 3306 3329 4763 a.r002 3330 3324 3330 4764 a.r003 3331 3314 3317 3331 4765 a.r004 3332 3315 3332 4064 a.s001 2799 2733 2755 2799 4065 a.s002 2800 2739 2800 4066 a.s003 2801 2744 2801 4067 a.s004 2802 2775 2802 4070 a.s005 2803 2776 2803 4071 a.s006 2804 2778 2804 4072 a.s007 2805 2792 2805 4073 a.s008 2806 2794 2806 4074 a.s009 2807 2795 2807 4075 a.s010 2808 2758 2808 4076 a.s011 2809 2763 2809 4077 a.s012 2810 2772 2810 4531 a.t001 3132 3066 3103 3132 4532 a.t002 3133 3129 3133 4533 a.t003 3134 3057 3134 4534 a.t004 3135 3058 3135 4535 a.t005 3136 3060 3136 4536 a.t006 3137 3076 3137 4537 a.t007 3138 3068 3138 6632 a.u001 4296 4250 4296 6633 a.u002 4297 4297 4347 3662 a.v001 2660 2520 2660 3663 a.v002 2661 2652 2661 3664 a.v003 2662 2653 2662 3665 a.v004 2663 2488 2663 3666 a.v005 2664 2634 2664 3667 a.v006 2665 2521 2665 3670 a.v007 2666 2548 2613 2666 3671 a.v010 2669 2655 2669 3672 a.v015 2670 2535 2670 3673 a.v016 2671 2601 2671 3674 a.v017 2672 2630 2672 3675 a.v018 2673 2654 2673 3676 a.v024 2674 2586 2674 3677 a.v027 2675 2478 2675 3700 a.v030 2676 2632 2645 2676 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 159 octal symbol references by sequence no. 3701 a.v042 2677 2515 2530 2677 3702 a.v043 2678 2518 2678 3703 a.v045 2679 2605 2679 3704 a.v046 2680 2622 2680 3705 a.v047 2681 2607 2681 4356 a.y001 3019 2999 3019 4357 a.y002 3020 3001 3020 4360 a.y003 3021 3015 3021 4376 a.y501 3033 3030 3033 4410 a.y601 3047 3044 3047 40 al8in 207 207 2400 41 al8out 207 207 2401 33 albral 207 207 2395 4 albrk 207 207 2402 3331 alcend 2410 2319 2410 22 alchng 207 207 2385 10 alcrec 207 207 2378 3323 alctab 2406 2336 2406 26 aldpin 207 207 2388 2408 15 aldump 207 207 2389 2409 24 alecpx 207 207 2387 3 alfdpx 207 207 2384 31 alfrmi 207 207 2393 35 alifc 207 207 2397 11 allfec 207 207 2379 20 allisn 207 207 2382 2407 12 allock 207 207 2383 37 aloddp 207 207 2399 36 alofc 207 207 2398 34 alpfnl 207 207 2396 30 alplit 207 207 2392 21 alquit 207 207 2381 27 alrply 207 207 2391 32 alsetb 207 207 2394 2712 alt010 2072 2072 2077 2720 alt020 2080 2080 2378 2722 alt030 2084 2084 2379 2724 alt040 2088 2088 2380 2726 alt050 2092 2092 2381 2730 alt060 2096 2096 2382 2407 2734 alt070 2103 2103 2383 2736 alt080 2107 2107 2384 2740 alt090 2111 2111 2385 2741 alt100 2114 2114 2386 2747 alt101 2125 2125 2129 2757 alt102 2135 2126 2135 2765 alt110 2142 2142 2387 2767 alt120 2146 2146 2393 3004 alt125 2161 2149 2151 2161 3010 alt135 2167 2082 2086 2144 2167 3011 alt140 2169 2090 2165 2169 2254 2273 2279 2285 2297 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 160 octal symbol references by sequence no. 3012 alt150 2172 2094 2101 2105 2109 2172 2260 2291 3016 alt160 2177 2174 2177 3020 alt170 2181 2176 2181 3026 alt175 2189 2186 2189 3035 alt180 2197 2183 2190 2193 2197 3041 alt190 2203 2203 2388 2408 3045 alt200 2209 2209 2389 2409 3053 alt210 2217 2217 2390 3060 alt220 2223 2220 2223 3064 alt230 2229 2229 2391 3065 alt240 2232 2232 2244 3071 alt245 2237 2233 2237 3074 alt250 2242 2242 2392 3076 alt260 2246 2246 2394 3100 alt270 2250 2250 2395 3104 alt280 2256 2256 2396 3110 alt290 2262 2262 2397 3121 alt295 2272 2267 2272 3123 alt300 2275 2275 2398 3127 alt310 2281 2281 2399 3133 alt320 2287 2287 2400 3137 alt330 2293 2293 2401 3143 alt400 2300 2300 2402 3151 alt500 2311 2068 2311 3154 alt510 2315 2315 2320 3162 altbak 2323 2112 2119 2133 2140 2199 2201 2207 2215 2222 2227 2235 2240 2248 2309 2321 2323 16 altbec 207 207 2380 3322 altend 2403 2337 2403 42 alter 205 205 2004 2664 alterp 2057 1768 2057 2323 3240 alttab 2376 2327 2376 23 alwru 207 207 2386 25 alxhld 207 207 2390 142 badsts 483 466 483 5604 bdisc 3783 686 794 1796 2805 3137 3603 3746 3783 3791 4107 156 bdstct 484 397 484 20000 bffbrk 196 196 3461 40000 bfflst 196 196 1045 1408 3462 3608 2 bf.dta 196 196 3108 3466 3521 3714 1 bf.flg 196 196 910 932 1247 3364 3433 3524 0 bf.nxt 196 196 895 908 924 933 1250 1319 1321 1328 1343 1473 1475 3436 3448 3527 3590 3594 3697 1 bf.siz 196 196 904 1243 3513 1 bf.tly 196 196 913 3356 3418 3517 3710 1570 bflag 1428 1157 1182 1349 1428 400 bfmsiz 196 196 2356 5572 bint 3769 793 1795 3602 3769 3776 4106 2 b.0 3124 3142 3426 3427 3465 3466 3 b.1 3126 3428 3429 11 blast 205 205 2005 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 161 octal symbol references by sequence no. 1567 blbuf2 1427 1181 1204 1427 1566 blbuf 1426 1178 1208 1217 1426 3138 5360 blimit 3615 1787 3615 3640 3705 35 brack 205 205 2009 113 brkcon 205 205 943 2708 25 brkpnt 205 205 2013 13 brkptr 147 1799 5 bufshf 196 196 3691 40 bufsiz 196 196 1180 1216 1449 1472 2600 3065 3071 3102 4237 4249 4346 4414 2 bufthr 196 196 1351 777 buftmk 196 196 1051 3460 3607 3752 3232 caltst 2368 2061 2099 2198 2368 3234 checho 2370 2063 2167 2189 2370 3233 chmode 2369 2062 2170 2182 2369 4 c.0 3123 3141 5 c.1 3125 1643 ckecnt 1485 679 1485 4737 cle003 3303 3298 3303 4745 cle006 3311 3305 3311 4750 cle010 3315 3315 3318 4754 cle020 3319 3316 3319 4712 cleanq 3295 1036 3275 3295 3326 4223 cmptbl 2925 2915 2925 2948 2949 3020 4234 cmt010 2927 2927 2939 4241 cmt020 2933 2933 2945 4250 cmt030 2941 2935 2941 4255 cmt040 2947 2942 2947 4257 cmt050 2949 2929 2949 4261 cmtbuf 2951 2930 2936 2947 2951 4233 cmtsq 2925 2925 2938 4232 cmtsx2 2925 2925 2937 5675 con010 3864 3864 3884 5704 con020 3873 3869 3873 5711 con030 3880 3876 3880 5715 con040 3886 3882 3886 5725 conbak 3899 3852 3899 5656 conect 3848 458 688 795 1372 1761 2807 3848 3899 4108 43 cserr 205 205 2003 6451 csics 4139 4139 4149 6450 csmbx 4138 682 792 3998 4083 4138 4150 6446 cspab 4136 4136 4151 6 ct.brk 364 364 2305 1 ct.dev 360 360 2587 4 ct.wru 362 362 2136 1 ctrl 146 2330 2674 5356 curdcw 3613 3502 3534 3559 3573 3613 6460 curqbf 4195 1108 4195 4264 4281 4322 4351 4382 4413 4419 4422 6461 curqln 4197 1042 4197 4267 4284 6457 curque 4193 1104 2678 3207 4193 4226 4352 4379 2257 dctemp 1832 1649 1655 1663 1672 1678 1832 5746 dcwadr 3924 684 789 1374 1792 2803 3135 3599 3743 3854 3924 4104 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 162 octal symbol references by sequence no. 5530 dcwcnt 3759 3683 3719 3759 5747 dcwlen 3925 685 790 1793 2804 3136 3600 3744 3857 3925 4105 5750 dcws 3927 680 788 1791 2802 3134 3598 3742 3915 3927 4103 1655 dec005 1502 1499 1502 1660 dec010 1506 1501 1506 1711 dec015 1523 1523 1528 1717 dec020 1532 1532 1995 1724 dec030 1539 1539 1996 1734 dec040 1550 1550 1997 1737 dec045 1556 1556 1566 1751 dec046 1569 1569 2014 1755 dec050 1575 1575 1998 1762 dec054 1584 1584 1591 1767 dec055 1589 1585 1589 1773 dec060 1594 1594 1999 1775 dec065 1601 1601 2000 2003 dec070 1609 1609 2001 2011 dec075 1617 1617 2002 2016 dec080 1624 1624 2003 2021 dec085 1629 1629 2005 2026 dec090 1636 1636 2004 2032 dec095 1642 1642 2010 2036 dec096 1648 1648 2011 2060 dec097 1671 1671 2012 2077 dec098 1687 1669 1687 2111 dec099 1699 1695 1699 2127 dec100 1717 1534 1537 1541 1548 1567 1573 1592 1599 1603 1607 1611 1615 1619 1622 1638 1640 1644 1646 1717 1724 1728 1732 1737 1741 1746 1750 1755 1757 1853 1889 1894 1900 1916 1919 1923 1931 1936 1945 1948 1965 1968 1972 2006 2007 2009 2131 dec101 1721 1721 2017 2140 dec105 1730 1730 2013 2142 dec106 1734 1734 2015 2146 dec107 1739 1739 2016 2264 dec210 1838 1516 1838 2274 dec220 1848 1843 1845 1848 2321 dec230 1864 1840 1864 2155 dec300 1748 1748 2008 2351 dec350 1887 1887 2018 2360 dec360 1896 1896 2019 2367 dec370 1906 1902 1906 2402 dec380 1917 1905 1907 1910 1913 1917 1927 2404 dec400 1921 1921 2020 2412 dec440 1929 1929 2021 2421 dec450 1938 1938 2022 2430 dec455 1946 1942 1946 2433 dec460 1950 1950 2023 2440 dec462 1956 1953 1956 2444 dec463 1960 1955 1960 2445 dec464 1961 1959 1961 2452 dec465 1966 1962 1966 2455 dec470 1970 1970 2024 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 163 octal symbol references by sequence no. 2347 decbak 1885 1785 1861 1885 1974 1644 decmbx 1495 1383 1495 1885 4145 deldly 2873 2334 2679 2856 2873 2880 4361 deletb 3024 2681 3009 3024 3031 4215 delret 2908 2890 2895 2908 4162 deltbl 2888 2879 2888 2908 3033 657 den010 859 854 859 663 den060 867 863 867 666 den070 872 864 872 703 den080 886 882 886 705 den090 888 885 888 714 den120 897 893 897 715 den130 900 896 900 934 720 den132 904 904 925 746 den133 927 912 917 922 927 751 den135 931 909 931 762 den140 942 878 942 766 den150 947 944 947 777 den160 958 953 958 1000 denbak 961 940 946 950 956 961 1002 denbuf 963 902 919 923 963 630 denq 849 116 849 961 1392 1764 2332 3047 644 densq 849 849 873 928 645 densx2 849 849 872 927 1046 deq010 995 992 995 1052 deqbak 1000 997 1000 1010 deque 978 978 1001 1385 1113 derrq 1075 120 463 1075 1097 1133 dersq 1075 1075 1087 546 dge005 757 752 757 552 dge010 761 761 766 560 dge020 768 762 768 566 dge030 775 758 764 775 567 dgebak 778 748 773 778 524 dgetwk 740 740 809 627 dgsvi 816 741 779 798 816 0 dia 366 113 366 367 76 diactf 240 240 651 1686 3063 3644 3707 70 diadis 234 234 3786 75 diaftc 239 239 1668 2782 3570 3999 4087 73 diainc 237 237 3797 7047 diajt 4471 121 4471 653 diams1 854 126 854 65 diatrg 233 233 4085 6451 dicell 4149 118 4149 4 dich 182 182 3896 4474 4477 6446 diconf 4151 123 4151 5655 dilock 3826 785 3806 3811 3818 3822 3826 454 dimb 182 182 3902 5621 dindcw 3797 117 3797 21 disacc 205 205 2006 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 164 octal symbol references by sequence no. 2 disall 205 205 1997 1 dislin 205 205 1996 456 dist 182 182 3903 5742 dlist 3916 122 3916 1 dl.bck 194 194 2897 2900 2967 0 dl.fwd 194 194 2898 2901 2968 3 dl.hsz 194 194 2834 2847 2932 2971 2974 3014 3026 2 dl.rfc 194 194 2853 2892 2894 2970 3006 11 dl.siz 194 194 2834 2847 2861 2875 6676 dlq005 4322 4317 4322 6721 dlq010 4345 4325 4345 6714 dlq020 4337 4332 4337 6710 dlq030 4333 4333 4336 6732 dlq040 4357 4354 4357 6737 dlq050 4362 4359 4362 6733 dlq060 4358 4358 4361 6636 dlqent 4314 1041 2677 3206 3331 4314 4363 6740 dlqret 4363 4338 4341 4356 4363 6653 dlqsx2 4314 4314 4339 203 dma010 516 499 501 516 204 dma012 518 507 518 221 dma020 534 515 522 527 530 534 157 dmail 493 115 493 6450 dmbx 4150 119 4150 23 dmpmem 205 205 2011 1571 dnblks 1429 1242 1246 1254 1429 14 dodial 205 205 2010 4634 dqcur 3212 3163 3175 3197 3212 1067 drebak 1029 1020 1023 1029 1054 dretry 1015 1015 3284 14 dspqur 130 459 784 1394 3276 17 dte005 388 385 388 57 dte010 423 387 423 100 dte020 436 432 436 110 dte030 448 442 448 111 dte040 450 433 450 12 dterm 380 114 380 1 dtfctl 192 192 2691 4 dt.flg 192 192 2592 0 dtprty 266 266 470 1221 dtr010 1154 1145 1154 1234 dtr050 1169 1156 1169 1240 dtr060 1175 1171 1175 1247 dtr065 1186 1186 1215 1267 dtr068 1204 1201 1204 1272 dtr070 1208 1197 1203 1208 1274 dtr072 1210 1206 1210 1276 dtr075 1213 1193 1199 1213 1305 dtr080 1222 1177 1222 1313 dtr083 1228 1228 1236 1320 dtr084 1235 1223 1235 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 165 octal symbol references by sequence no. 1327 dtr086 1243 1243 1253 1342 dtr088 1254 1249 1251 1254 1352 dtr089 1263 1239 1263 1360 dtr090 1270 1162 1220 1268 1270 1362 dtr100 1274 1135 1137 1233 1261 1274 1284 1295 1364 dtr150 1278 1264 1278 1371 dtr200 1287 1148 1287 1201 dtrans 1133 471 1133 2 eb.tly 261 261 1308 1903 4406 ecfret 3045 3042 3045 4377 ecgifl 3039 124 1774 3039 3045 106 engain 205 205 1934 2715 107 engaof 205 205 1925 2716 33 engini 205 205 2021 32 engoff 205 205 2020 31 engogo 205 205 2019 30 engstb 205 205 2018 7 entrcv 205 205 2000 136 errcnt 480 390 395 404 410 424 480 115 errmsg 205 205 411 2511 1174 errqbf 1118 1118 3201 1173 errqtb 1117 1103 1117 3202 777640 fatal 255 255 472 4565 fet010 3162 3157 3162 4570 fet020 3166 3164 3166 3176 4575 fet030 3173 3173 3186 4601 fet040 3179 3172 3179 4602 fet050 3180 3160 3180 4610 fet060 3187 3184 3187 4622 fetbak 3198 3195 3198 4544 fetch 3154 2675 3154 3198 3424 fil010 2498 2498 2505 3433 fil020 2507 2491 2502 2507 3444 fil030 2518 2512 2518 3500 fil040 2536 2536 2541 3506 fil050 2545 2545 2705 3545 fil060 2567 2557 2567 3552 fil070 2573 2573 2706 3573 fil080 2597 2593 2597 3600 fil090 2604 2599 2604 3635 fil100 2626 2528 2626 3647 fil110 2641 2641 2707 3653 fil120 2649 2516 2571 2617 2620 2623 2635 2638 2649 2708 2709 2710 2711 2712 2713 2714 2715 2716 3375 filmbx 2476 803 2476 2656 3724 filopc 2700 2480 2489 2508 2510 2526 2532 2534 2637 2651 2700 3723 filtmp 2699 2481 2497 2513 2529 2532 2699 3237 flgptr 2373 2065 2163 2175 2179 2252 2258 2264 2277 2283 2289 2295 2373 70 fmbxsz 327 327 630 696 1978 3952 4120 6266 fre010 4045 4033 4045 6277 frebak 4057 4044 4057 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 166 octal symbol references by sequence no. 15 frebuf 134 1390 2671 3748 4297 16 frelbf 135 1375 3329 3749 6233 frembx 4024 1382 1770 4024 4057 17 fremem 137 1102 2914 10 frmchr 205 205 2008 4 g3wjt 131 676 7044 gai010 4459 4454 4459 7034 gai020 4451 4451 4458 7045 gairet 4460 4450 4457 4460 522 gatbak 729 723 729 500 gate 720 461 678 720 729 1032 1378 4113 4 gbfbla 198 198 1416 2 gbfhng 198 198 1812 3911 1 gbfup 198 198 1813 1614 gbl010 1459 1459 1465 1633 gbl020 1475 1471 1475 1573 gblast 1444 1210 1444 1477 20 getbuf 132 1397 3132 4296 21 getmem 136 1771 2801 2987 7023 getqai 4446 1035 3277 3332 4446 4459 4460 6742 getqhd 4377 3208 4377 4388 4389 4449 6761 getqnx 4404 4386 4404 4430 4431 4456 4635 getque 3226 1034 3226 3238 3249 22 gettib 138 1762 23 getubf 133 3745 6756 ghd010 4388 4385 4388 6757 ghdret 4389 4381 4387 4389 24 globsw 139 1766 3904 3775 gme010 2739 2734 2739 4001 gme020 2743 2738 2743 4006 gme030 2748 2748 2753 4036 gme040 2775 2756 2775 4101 gmebuf 2815 1400 2746 2784 2815 4103 gmelen 2817 2737 2741 2747 2817 4102 gmesiz 2816 1401 2743 2786 2816 3766 gmesx3 2732 2732 2780 3756 gmeter 2732 1760 2732 2796 7012 gnx010 4425 4418 4425 6776 gnx020 4413 4407 4413 4424 7002 gnx030 4417 4417 4429 7017 gnx040 4430 4426 4430 7020 gnxret 4431 4421 4431 7022 gnxsav 4432 4411 4412 4415 4417 4432 626 gqued 815 722 725 746 815 1642 gsize 1483 1458 1464 1483 1640 gsrce 1481 1447 1457 1481 1641 gtarg 1482 1456 1467 1482 1 gtprty 267 267 268 808 4641 gtq010 3229 3229 3234 4647 gtqbak 3237 3231 3237 2 hcfg 152 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 167 octal symbol references by sequence no. 5 hmode 144 1806 2329 25 houtav 142 1381 1000 hslafl 249 249 1405 1815 2349 2688 17 htfspd 200 200 2561 0 ht.flg 200 200 2560 1 ht.tib 200 200 857 5160 ibufp 3474 3421 3432 3474 5154 icount 3470 3348 3361 3374 3386 3417 3420 3440 3470 5155 iflags 3471 3349 3368 3382 3384 3471 5 inacc 205 205 1871 5006 inc010 3354 3354 3449 5023 inc020 3370 3366 3370 5044 inc025 3381 3377 3381 5137 inc030 3447 3372 3447 5046 inc040 3384 3379 3384 5063 inc045 3399 3399 3406 5073 inc050 3408 3388 3408 5105 inc060 3418 3418 3437 5115 inc080 3426 3426 3431 5131 inc090 3439 3435 3439 5135 incbak 3445 3402 3445 5163 incdcw 3477 3391 3400 3405 3477 4767 incnt 3345 2672 3345 3445 22 incomp 205 205 2007 4777 incsx3 3345 3345 3441 5231 ind010 3512 3512 3528 5251 ind050 3531 3526 3531 5214 indata 3499 1780 3499 3543 5264 indcw 3557 3522 3557 3577 36 infcc 205 205 2022 102 inmbx 205 205 506 526 2636 3408 5330 inssq 3586 3586 3588 5323 instrp 3586 1386 3533 3586 3595 5620 intdcw 3796 3771 3796 3 invp 143 4479 134 iopend 476 417 425 427 476 3905 6 itest 141 1765 2328 3133 7132 ivp 4479 4473 4477 4479 26 iwrite 140 1379 644 .crbdt 184 184 2808 667 .crdly 184 184 2912 700 .cretb 184 184 3019 704 .crmet 184 184 1783 652 .crnbf 184 184 2676 677 .crskd 184 184 2809 665 .crttb 184 184 1395 1772 3204 666 .crtte 184 184 1396 1797 3203 736 .mdias 190 190 415 720 .mdilc 190 190 2548 2613 2800 730 .mimbx 190 190 744 30 .mleng 190 190 2740 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 168 octal symbol references by sequence no. 734 .mndil 190 190 2547 2612 2666 2647 lctlck 2034 125 2034 2039 2040 2260 lctlmb 1833 1734 1736 1833 2333 2662 lctret 2040 2036 2040 5744 licadr 3921 3887 3921 26 linctl 205 205 2015 101 lindis 205 205 945 2706 124 linsta 205 205 2714 130 l.a002 470 444 470 513 132 l.a003 472 400 472 133 l.a004 473 415 473 432 l.b001 696 627 696 616 l.c001 808 726 808 1102 l.d001 1045 911 931 1045 1105 l.d004 1048 1025 1048 1106 l.d005 1049 952 1022 1049 1107 l.d006 1050 954 1050 1110 l.d007 1051 914 1051 1111 l.d008 1052 916 1052 1547 l.e001 1404 1299 1404 1550 l.e002 1405 1362 1405 1553 l.e005 1408 1248 1408 1556 l.e008 1411 1291 1411 1560 l.e009 1414 1303 1304 1414 1561 l.e010 1415 1191 1192 1415 1563 l.e012 1417 1325 1339 1417 2234 l.f001 1809 1498 1809 2235 l.f002 1810 1542 1560 1612 1810 2236 l.f003 1811 1544 1811 2237 l.f004 1812 1551 1812 2240 l.f005 1813 1570 1577 1813 2241 l.f006 1814 1814 1957 1958 2242 l.f007 1815 1723 1754 1815 2245 l.f010 1818 1818 1943 2246 l.f011 1819 1819 1963 2247 l.f012 1820 1820 1946 2251 l.f014 1822 1822 1966 2252 l.f015 1823 1604 1823 2253 l.f016 1824 1701 1824 3200 l.g001 2340 2081 2340 3201 l.g002 2341 2085 2341 3202 l.g003 2342 2089 2342 3203 l.g004 2343 2093 2343 3204 l.g005 2344 2098 2117 2344 3205 l.g006 2345 2210 2345 3206 l.g007 2346 2212 2346 3207 l.g008 2347 2104 2347 3210 l.g009 2348 2108 2348 3211 l.g010 2349 2148 2185 2266 2349 2458 3212 l.g011 2350 2143 2350 3213 l.g012 2351 2218 2351 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 169 octal symbol references by sequence no. 3214 l.g013 2352 2204 2352 3215 l.g014 2353 2230 2353 3216 l.g015 2354 2243 2354 3217 l.g016 2355 2192 2355 3220 l.g017 2356 2356 2435 2437 3221 l.g018 2357 2164 2357 3222 l.g019 2358 2253 2358 3223 l.g020 2359 2259 2359 3224 l.g021 2360 2272 2360 3225 l.g022 2361 2278 2361 3227 l.g024 2363 2284 2363 3230 l.g025 2364 2290 2364 3231 l.g026 2365 2296 2365 5144 l.h001 3460 3357 3419 3460 5145 l.h002 3461 3365 3461 5146 l.h003 3462 3371 3434 3462 5150 l.h006 3465 3413 3465 5151 l.h007 3466 3424 3466 5352 l.i001 3607 3518 3607 5353 l.i002 3608 3525 3608 5354 l.i003 3609 3562 3609 5524 l.j002 3753 3648 3715 3753 5733 l.k001 3907 3865 3907 5734 l.k002 3908 3870 3908 5735 l.k003 3909 3877 3909 5736 l.k004 3910 3856 3910 5737 l.k005 3911 3851 3911 6345 l.l001 4117 4003 4117 6346 l.l002 4118 4074 4118 6347 l.l003 4119 4078 4119 6350 l.l004 4120 3990 4120 1172 l.n002 1110 1088 1110 4633 l.o001 3210 3191 3210 4705 l.q001 3280 3258 3280 4706 l.q002 3281 3265 3281 4710 l.q003 3283 3268 3283 4100 l.s001 2812 2785 2812 4540 l.t001 3140 3092 3140 4541 l.t002 3141 3116 3141 4542 l.t003 3142 3119 3142 4543 l.t004 3143 3070 3143 6634 l.u001 4300 4288 4300 6635 l.u002 4301 4301 4319 3706 l.v001 2684 2547 2684 3707 l.v002 2685 2612 2685 3710 l.v003 2686 2575 2686 3711 l.v004 2687 2514 2687 3712 l.v007 2688 2616 2688 3713 l.v010 2689 2577 2689 3714 l.v011 2690 2579 2690 3715 l.v012 2691 2591 2691 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 170 octal symbol references by sequence no. 3716 l.v013 2692 2594 2692 3717 l.v014 2693 2581 2693 3720 l.v017 2694 2555 2694 3721 l.v018 2695 2569 2695 3722 l.v019 2696 2490 2696 5617 l.z001 3793 3773 3788 3793 700 lnmask 247 247 1816 5622 lock 3804 786 3804 3810 3812 27 loutav 142 1380 5740 lsticw 3915 3858 3915 3921 1 macwk1 4446 555 575 587 674 720 729 849 961 978 1001 1075 1097 1297 1368 1444 1477 1495 1885 2034 2040 2057 2323 2431 2438 2456 2466 2476 2656 2732 2796 2832 2859 2873 2880 2888 2908 2925 2949 2960 2985 2996 3012 3024 3031 3039 3045 3056 3077 3087 3130 3154 3198 3226 3238 3247 3271 3295 3326 3345 3445 3499 3543 3557 3577 3586 3595 3632 3655 3668 3731 3769 3776 3783 3791 3804 3812 3816 3823 3848 3899 3944 4016 4024 4057 4072 4096 4218 4291 4314 4363 4377 4389 4404 4431 4446 4460 3 macwk2 4446 555 587 720 849 978 1075 1297 1444 1495 2034 2057 2431 2456 2476 2732 2832 2873 2888 2925 2960 2996 3024 3039 3056 3087 3154 3226 3247 3295 3345 3499 3557 3586 3632 3668 3769 3783 3804 3816 3848 3944 4024 4072 4218 4314 4377 4404 4446 3 macwk3 4267 429 535 644 1519 1850 1875 2059 2532 3090 3374 3979 4029 4267 7 macwk4 4267 429 535 644 1519 1850 1875 2059 2532 3090 3374 3979 4029 4267 4117 mak010 2836 2836 2840 4127 mak020 2845 2837 2845 4136 mak030 2855 2843 2855 2863 4142 mak040 2860 2849 2860 4104 makdly 2832 1802 2832 2859 4327 makecn 2996 1775 2996 3012 4140 makret 2859 2852 2859 4113 maksx2 2832 2832 2835 30 maxchn 259 259 921 5 maxerr 257 257 405 436 mbqcnt 702 561 567 589 594 702 796 460 mbqhed 709 689 709 437 mbqnxa 703 557 570 572 703 440 mbqnxt 704 595 599 601 704 625 mbused 814 693 744 768 814 4114 435 mbxadr 701 629 636 650 701 621 mbxfre 813 465 691 801 813 2662 4111 144 mbxmax 319 319 3387 3 mbxmod 335 335 4477 6355 mbxno 4127 683 802 1393 1782 2661 3949 3979 3986 4029 4031 4075 4127 7 mdisp 128 457 677 1 mh.cnt 287 287 288 110 mh.fsb 291 291 628 3992 0 mh.pcw 286 286 287 290 10 mh.sub 290 290 291 635 3996 2 mh.tim 288 288 289 4084 10 mincd 154 11 mincs 153 415 1325 1339 2547 2612 4288 4319 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 171 octal symbol references by sequence no. 15 m.cql 190 190 4288 4289 4319 4320 0 m.dql 190 190 4289 4320 10 m.over 190 190 1325 1339 56 m.synl 190 190 2736 37 mnmask 272 272 497 4347 mnt020 3008 3008 3016 4351 mnt030 3012 3005 3012 4353 mnt040 3013 3002 3013 2 modnum 367 367 402 407 429 436 535 564 591 606 644 890 984 987 1337 1454 1519 1529 1653 1675 1846 1850 1867 1873 1875 2059 2078 2532 2542 2745 2963 3067 3090 3097 3104 3177 3181 3189 3235 3252 3255 3359 3374 3451 3529 3657 3688 3739 3808 3820 3979 4029 4251 4267 17 mqmask 271 271 571 600 27 msgsiz 205 205 2017 15 mt.acu 352 352 3090 14 mt.alt 351 351 2059 11 mt.fre 348 348 4029 7 mt.inc 346 346 3374 4 mt.inq 343 343 4267 2 mt.mbx 341 341 535 6 mt.ouq 345 345 2532 3 mt.rmb 342 342 644 13 mt.rtx 350 350 1875 1 mt.trm 340 340 429 5 mt.wcd 344 344 1519 10 mt.wmb 347 347 3979 12 mt.wtx 349 349 1850 30 mupdat 155 744 2548 2613 4289 4320 31 mvpgsc 150 1773 32 mvpgtg 151 1387 5361 nblks 3616 3510 3516 3532 3616 5153 nbufs 3469 3350 3355 3393 3469 5525 ndcws 3756 1391 3642 3672 3680 3756 4262 newtbl 2960 2913 2960 2985 3021 6462 nnonai 4198 1039 3278 4198 4448 4455 3 noacc 205 205 2014 1003 noai 964 850 868 881 964 717777 npbits 280 280 3907 1006 nprvai 968 886 887 968 177777 nretry 253 253 1048 1817 777677 ntflsn 245 245 1811 2686 777776 ntfwrt 254 254 1409 2346 4312 nwt010 2975 2975 2981 4321 nwt020 2982 2978 2982 4275 nwtsq 2960 2960 2973 4273 nwtsx2 2960 2960 2972 4274 nwtsx3 2960 2960 2966 2984 4326 nwttmp 2988 2964 2983 2988 5355 oldhed 3612 1384 3416 3507 3612 2256 opcode 1831 1511 1519 1522 1831 1841 1870 37 outfcc 205 205 2023 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 172 octal symbol references by sequence no. 2262 pchadr 1835 1106 1680 1835 2261 pchbuf 1834 1105 1654 1660 1664 1676 1834 2263 pchlen 1836 1107 1651 1683 1836 24 pchmem 205 205 2012 5357 pdcwa 3614 3509 3564 3576 3614 5532 pdcws 3761 3747 3761 20000 plower 279 279 280 3909 1004 prevai 966 883 884 966 40000 pupper 278 278 280 3908 1 qbcnt 4186 4186 4283 4324 3 qbdata 4188 4188 4253 4383 4423 2 qbfree 4187 4187 4239 4254 4265 4282 4337 4340 0 qbnext 4185 4185 4229 4231 4258 4345 4358 4360 4362 4420 1 qbuf 264 264 3171 4227 4255 4260 4353 4355 4357 4380 620 qcnt 812 757 812 1037 1101 2663 3330 0 qtib 263 263 1187 1557 1584 2519 3230 100000 quitfl 252 252 1050 3280 4411 rblast 3056 1798 3056 3077 1 rcd 205 205 2483 3410 3755 rcdend 2717 2540 2717 3725 rcdtab 2703 2670 2703 6354 rcnt 4126 3955 3964 4126 5435 rdd010 3685 3685 3722 5452 rdd015 3699 3696 3699 5500 rdd020 3724 3720 3724 5506 rdd030 3733 3693 3733 5512 rdd040 3739 3704 3706 3739 5415 rddata 3668 1371 3668 3729 3731 5504 rddbak 3731 3731 3735 3737 5362 rddcw 3632 1778 3632 3655 316 rdm010 606 603 606 334 rdm020 621 608 621 347 rdm030 633 625 633 354 rdm040 639 632 639 406 rdmbak 674 620 674 265 rdmbx 587 587 674 797 433 rdsize 699 631 638 654 699 5414 rdw010 3657 3641 3657 4671 rej040 3264 3259 3264 4676 rejbak 3271 3262 3271 4652 reject 3247 1767 3247 3271 200000 rejflg 251 251 253 1049 3281 16 rejreq 205 205 1999 400000 retry 250 250 253 5526 rhead 3757 1376 3678 3699 3734 3757 44 rmeter 205 205 2024 3336 rndsiz 2431 2154 2158 2270 2431 2438 2463 231 rpmbx 546 546 1412 5527 rtail 3758 1377 3679 3695 3700 3758 1 rtprty 268 268 1411 3283 2 rtx 205 205 1865 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 173 octal symbol references by sequence no. 2462 savmbx 1978 681 804 1398 1777 1978 2673 3601 4766 savnai 3334 3313 3320 3334 33 secdsp 129 690 800 1033 1373 3373 setbak 2466 2459 2461 2466 6 setcls 205 205 2002 45 setdly 205 205 2016 34 setptw 149 1388 2665 3351 setsiz 2456 2247 2338 2456 2466 16 sf.bsz 188 188 2155 2464 17 sf.fbs 188 188 2159 2271 15 sf.hsl 188 188 856 2559 20 sf.mms 188 188 1727 2465 5161 shinp 3475 464 2664 3443 3475 4110 35 shrcct 148 2680 12 sm.adr 302 302 303 1850 3062 3639 4 sm.cd 301 301 302 310 1164 1579 1620 1650 1658 1659 1665 1673 1679 1681 1682 1692 1694 1700 1726 1743 1751 1891 1911 1914 1939 1941 1951 1961 2037 2059 2069 2153 2156 2269 2312 2462 2495 2551 2552 2553 2554 2566 2781 3090 3109 2 sm.cdl 299 299 300 309 2485 2568 2628 2643 3090 3095 3106 4 sm.dat 310 310 311 319 3465 6 sm.dcw 317 317 3457 3508 66 sm.fcd 311 311 319 3385 1 sm.fre 298 298 299 2633 2646 2 sm.ict 309 309 3389 3442 13 sm.len 303 303 304 0 sm.lno 297 297 298 1497 1519 1850 1875 2486 2524 4 sm.nbf 316 316 3394 3 sm.op 300 300 301 1508 2484 3411 1777 smlmsk 322 322 1809 1572 sndflg 1431 1161 1298 1354 1431 105 sndout 205 205 1535 2707 140 stat 482 383 386 393 399 482 3917 137 sterr 481 462 481 5742 sticw 3917 3890 3917 6356 swmbx 4130 4100 4130 5162 tallyp 3476 3352 3362 3363 3397 3399 3403 3476 5164 tallys 3478 3456 3478 5 tcblst 218 218 1176 1631 2 tcdata 215 215 1149 1155 1 tcdcwl 214 214 1144 1858 7 tcdmpm 220 220 1235 1666 13 tcfree 224 224 615 1258 4026 10 tcinmb 221 221 437 1238 3973 15 tcmax 227 227 434 1293 3 tcmbxr 216 216 670 1170 11 tcmetr 222 222 1263 2793 6 tcpchm 219 219 1222 1684 12 tcreq 223 223 441 1136 1200 tcurbf 1122 1081 1095 1122 1176 tcurq 1120 1079 1092 1120 14 tcwmbx 225 225 3975 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 174 octal symbol references by sequence no. 1564 tcword 1420 456 687 787 1134 1143 1150 1259 1294 1420 1779 2806 4101 4 tcwrd 217 217 1881 0 termac 205 205 1995 100 tf8in 186 186 2364 200 tf8out 186 186 2365 20 tfacu 186 186 246 3140 20000 tfauto 186 186 2689 2694 1 tfbkpt 186 186 2693 4000 tfblak 186 186 1414 1814 1819 1822 2362 20 tfbral 186 186 2358 2000 tfcrec 186 186 2340 2355 400 tfctrl 186 186 1821 2347 2692 2 tfdild 186 186 1826 2695 20 tfdlup 186 186 2689 200000 tfecpx 186 186 2350 2355 4 tfercv 186 186 1823 4 tffdpx 186 186 2348 40000 tffrmi 186 186 2357 40 tfhang 186 186 1810 40 tfifc 186 186 2360 2 tfitim 186 186 1818 1820 1637 tflag 1480 1446 1450 1470 1480 1000 tflfec 186 186 2341 2355 100 tflisn 186 186 245 2344 400 tfoddp 186 186 2363 2693 100 tfofc 186 186 1414 1814 2361 400000 tfpfnl 186 186 2359 2000 tfplit 186 186 2354 200 tfquit 186 186 2343 10 tfrabt 186 186 2352 400 tfrply 186 186 2353 200000 tfsftr 186 186 2690 4000 tftbec 186 186 2342 10000 tfwabt 186 186 2345 1 tfwrit 186 186 254 1404 1 tfxhld 186 186 2351 2255 tibadr 1830 1100 1533 1540 1602 1610 1618 1637 1643 1740 1749 1776 1830 1852 1888 1899 1922 1930 2660 2799 3274 6352 timw 4125 4081 4109 4125 3 t.cur 186 186 2137 2306 26 t.dcp 186 186 899 1240 1241 1906 3297 3300 3347 3415 3506 3591 41 t.dcpl 186 186 907 3302 3587 3589 27 t.dlst 186 186 892 935 3301 3593 37 t.dtp 186 186 2195 2606 2851 2857 2877 25 t.echo 186 186 1306 1901 2598 2602 44 t.entp 186 186 1909 2608 3004 3010 3028 2 t.flg2 186 186 1302 1605 1956 1964 1967 2162 2205 2221 2225 2234 2239 2257 2263 2276 2570 2580 3093 36 t.flg3 186 186 1944 1947 2251 2282 2288 2294 2582 1 t.flg 186 186 1300 1543 1545 1561 1613 2118 2162 2191 2211 2213 2251 2257 2263 2276 2282 2288 2294 2335 2556 2576 2578 2595 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 175 octal symbol references by sequence no. 40 t.frmc 186 186 1752 5 t.icp 186 186 888 937 3041 3304 3307 7 t.icpl 186 186 939 3309 45 t.ifch 186 186 1940 6 t.ilst 186 186 938 3308 4 t.line 186 186 851 1360 1722 1753 2147 2184 2265 2457 2523 2532 2615 3374 52 t.metr 186 186 1325 1339 2735 4287 4288 4289 4318 4319 4320 16 t.ocnt 186 186 1348 1352 12 t.ocp 186 186 1312 1316 3105 3376 13 t.ocur 186 186 1335 3378 46 t.ofch 186 186 1952 1954 14 t.olst 186 186 1341 1345 47 t.omct 186 186 1960 22 t.reta 186 186 2138 2307 42 t.scll 186 186 948 1915 1918 2609 30 t.sfcm 186 186 855 1725 2152 2268 2460 2558 43 t.sncc 186 186 1912 1933 2610 0 t.stat 186 186 1190 17 t.type 186 186 1195 1357 1621 2066 2123 2550 2588 2618 12 trace 145 429 535 644 1519 1850 1875 2059 2532 3090 3374 3979 4029 4267 10 tr.int 358 358 429 535 4 tr.mbx 357 357 644 1519 1850 1875 2059 3090 3979 4029 2 tr.que 356 356 2532 3374 4267 2 trmmod 334 334 4474 20 trmrej 205 205 2001 1 tsfcd 186 186 1415 4 tsfdsr 186 186 1415 23 ttcolt 332 332 1358 2067 2619 5640 unlock 3816 460 692 799 1389 3816 3823 4112 254 upm010 564 560 564 255 upm020 566 563 566 233 upmbq 555 518 547 555 575 3 wcd 205 205 1515 2646 wcdend 2025 1784 2025 2552 wcdtab 1993 1763 1993 1 w.2 681 1824 2812 3143 3609 3753 3793 3910 3915 3917 3921 4109 4117 6150 wmb010 3961 3961 3968 6157 wmb020 3970 3947 3965 3970 6212 wmb030 3994 3988 3994 6214 wmb040 3997 3993 3997 6130 wmbx 3944 1399 1769 2669 3944 4016 1422 wri005 1311 1301 1305 1311 1427 wri010 1319 1313 1319 1322 1433 wri020 1324 1320 1324 1444 wri030 1330 1317 1330 1446 wri040 1334 1307 1310 1334 1475 wri050 1356 1350 1353 1356 1505 wri060 1367 1364 1367 1506 wribak 1368 1332 1359 1366 1368 1377 write 1297 1158 1211 1297 1368 4 wruinc 2417 2121 2417 assm 01 12-10-82 15.787 multics/fnp direct interface adapter -- dia_man page 176 octal symbol references by sequence no. 3332 wrutbl 2413 2331 2413 2417 114 wrutim 205 205 2131 2709 6351 wsize 4123 3958 4004 4123 6310 wti010 4080 4076 4080 6301 wtimw 4072 1794 3604 4008 4050 4072 4096 4 wtx 205 205 1839 476 yelcnt 182 182 2810 ** 49395 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