ASMB,R,L,C HED * ID.66 91750-18126 REV.2013 NAM ID.66 91750-16126 REV.2013 800724 (L) EXT $IF2,$IF5,$IF7,$IFTX,$DV1,$DV4,$DV6,$DV13 EXT $DV15,$DV16,$DV17,$DV18,$DV19,$DV20 EXT $DIOC,$XQSB,$DMPR ENT ID.66 SPC 2 * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT PACKARD COMPANY. * * **************************************************************** SPC 2 * NAME: ID.66 * SOURCE: 91750-18126 * RELOC: 91750-16126 * PGMR: JOHN LAMPING * * WRITTEN BY JOHN LAMPING [APRIL 1979] * * L-SERIES PSI DS/1000 DRIVER * * NOTE: WHENEVER KNOWLEDGE OF THE BIT POSITION OF A FLAG IS USED * BUT NO REFERENCE TO THE FLAG WOULD OTHERWISE BE GENERATED, * THE LABEL OF THE FLAG IS DOUBLE REFERENCED. ( +FL-FL ) SPC 2 ************************************************** * * * TEMPORARIES AND CONSTANTS * * * ************************************************** SPC 2 * * IFT EXTENSION POINTERS * XTBEG EQU * RPTRY DEF *-XTBEG RETRY COUNTER / => NEXT WORD TO READ RLEN1 DEF *-XTBEG BUFFER LENGTH / - WORDS TO SKIP RLEN2 DEF *-XTBEG BUFFER LENGTH / WORDS TO READ RDSIZ DEF *-XTBEG LENGTH OF FRAME READY ON CARD WPTR DEF *-XTBEG => NEXT WORD TO WRITE WLEN DEF *-XTBEG LENGTH OF WRITE BUFFERS WFSIZ DEF *-XTBEG MAXIMUM PSI FRAME SIZE WBUFS DEF *-XTBEG NUMBER OF ALLOCATED OUTPUT BUFFERS * - NUMBER OF TIMEOUTS LEFT IF CARD * HAS BEEN ASKED TO ALLOCATE BUFFERS RCONT DEF *-XTBEG READ PROCESS CONTINUATION ADDRESS WCONT DEF *-XTBEG WRITE PROCESS CONTINUATION ADDRESS * THE ABOVE TWO WORDS MUST BE IN ORDER FBITS DEF *-XTBEG FLAG BITS FMISC DEF *-XTBEG MISCELLANEOUS INFORMATION TRIPL DEF *-XTBEG DMA TRIPLE AREA (SIX WORDS) MXTPL ABS XTBEG-* MXTLN ABS XTBEG-TRIPL-6 XTPTR DEF XTBEG SPC 1 * * TEMPORARY VARIABLES * SSERV BSS 1 SYSTEM SERVICE REQUEST * -3 = COMPLETE WRITE PROCESS REQUEST * -2 = COMPLETE READ PROCESS REQUEST * -1 = COMPLETE CURRENT REQUEST * 0 = NO SYSTEM SERVICE * 1 = REQUEST DCPC FOR READ PROCESS * 2 = REQUEST DCPC FOR WRITE PROCESS * 8 = RELEASE DCPC SRVOK BSS 1 PROCESS ALLOWED TO DO COMPLETION RETURN * 0 IF ANY SYSTEM SERVICE OK ACTIV BSS 1 WHICH PROCESS IS ACTIVE * 1=READ, 2=WRITE ADV BSS 1 -1 SAYS ACTIVATE OTHER PROCESS ENTRY BSS 1 DRIVER ENTERED AT CA66 IF -1, IA66 IF 0 TGONE BSS 1 ONE IFF MEDIUM TIMEOUT EXPIRED RENTR BSS 1 NON-ZERO SAYS DRIVER REENTRY REQUESTED FNMBR DEC 29150 SECURITY CODE (TEMP1 MUST BE NEXT) TEMP1 BSS 1 SIX WORD TEMPORARY AREA FOR ACTIVE TEMP2 BSS 1 PROCESS, USED FOR SCHEDULING QUEUE TEMP3 BSS 1 AMONG OTHER THINGS TEMP4 BSS 1 TEMP5 BSS 1 TEMP6 BSS 1 SPC 1 * * FBITS BIT EQUIVALENCES * FW EQU 000000B WAIT FOR READ FOR FRONT PANEL MESSAGES * SHOULD BE 10000B RC EQU 40000B RECONNECTION AFTER POWER-FAIL WANTED SE EQU 20000B SEVERE ERROR OCCURRED ON CARD AC EQU 10000B CARD HAS BEEN ASKED TO CONNECT ND EQU 4000B LINK IS IN NON-DS MODE SM EQU 2000B START OF DS 1 MESSAGE LC EQU 1000B LINE IS LOGICALLY CONNECTED LT EQU 400B LONG TIMEOUT RUNNING MT EQU 200B MEDIUM TIMEOUT RUNNING ST EQU 100B SHORT TIMEOUT RUNNING WL EQU 40B BACKPLANE LOCKED TO WRITE PROCESS RL EQU 20B BACKPLANE LOCKED TO READ PROCESS * BOTH SET SAY BACKPLANE BUSY WP EQU 10B WRITE REQUEST PENDING RP EQU 4B READ REQUEST PENDING WA EQU 2B REQUEST ON WRITE PROCESS ABORTED RA EQU 1B REQUEST ON READ PROCESS ABORTED SPC 1 * * FMISC BIT EQUIVALENCES * TW EQU 60000B CARD OUTPUT MESSAGE TYPE * SHOULD BE 160000B TR EQU 16000B CARD INPUT MESSAGE TYPE FM EQU 1000B FRONT PANEL MESSAGE SEEN CI EQU 400B MUST SEND CONNECT INDICATION LU EQU 377B LOGICAL UNIT NUMBER OF CARD SPC 1 * * OTHER EQUIVALENCES * A EQU 0 B EQU 1 CDATA EQU 30B CDMA0 EQU 20B CDMA1 EQU CDMA0+1 CDMA2 EQU CDMA0+2 CDMA3 EQU CDMA0+3 CFPFG EQU 24B SET TO -1 IF CARD USED BY FRONT PANEL SPC 1 * * DECIMAL AND OCTAL CONSTANTS * .0 DEC 0 .1 DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 .5 DEC 5 .6 DEC 6 .7 DEC 7 .8 DEC 8 B10 EQU .8 .9 DEC 9 B11 EQU .9 .10 DEC 10 B12 EQU .10 B13 OCT 13 .15 DEC 15 B17 EQU .15 .50 DEC 50 B77 OCT 77 B100 OCT 100 B200 OCT 200 B377 OCT 377 B400 OCT 400 B600 OCT 600 B777 OCT 777 B1000 OCT 1000 B2000 OCT 2000 B7703 OCT 7703 B7777 OCT 7777 B10K OCT 10000 B40K OCT 40000 BIT15 OCT 100000 MB1K1 ABS -1000B-1 MB400 OCT -400 M60 DEC -60 MB36 OCT -36 M20 DEC -20 M10 DEC -10 M5 DEC -5 M3 DEC -3 M2 DEC -2 M1 DEC -1 SPC 1 * * ERROR CODES * #LFAL EQU .1 #TMOT EQU .2 #LBUS EQU .3 #MEAB EQU .4 #NOIN EQU B10 #WRMD EQU B11 #ILRQ EQU B12 #RBUS EQU .5 #SERR EQU B13 SPC 1 * * CARD COMMANDS * !NOOP EQU B40K NO OPERATION (CANCELS UNSOLICITED INPUT) !UNST OCT 50000 ENABLE UNSOLICITED STATUS INPUT !UNDS OCT 45401 ABORT UNCOLICITED STATUS INPUT !ABDM OCT 45402 ABORT DMA TRANSFER !OTBF OCT 43000 ALLOCATE OUTPUT BUFFERS !NMT OCT 40400 NEW MESSAGE TYPE !OTTR EQU BIT15 OUTPUT DATA TRANSFER !SMB EQU B10K START OF MESSAGE BIT FOR !OTTR !INTR EQU .0 INPUT DATA TRANSFER !RSET OCT 57400 RESET !MIFL OCT 42400 WHAT IS MAXIMUM I FIELD? !R2WD OCT 45002 READ 2 WORDS FROM BUFFER !TIME OCT 140401 SET CARD TIMEOUT !CNCT OCT 41400 CONNECT !DSCN OCT 41000 DISCONNECT !DCRD OCT 46000 DISCARD INPUT FRAME !ADBP OCT 52400 ADVANCE BUFFER POINTER !PWUP OCT 77400 POWER UP ACKNOWLEDGE !BRK OCT 50400 SEND BREAK FRAME !SIDT OCT 44000 SET INTERNAL DATA TYPE !STGD OCT 135336 GOOD POWER UP STATUS !STG2 OCT 177164 OTHER GOOD POWER UP STATUS SPC 1 * * PARAMATERS AND POINTERS * SHORT EQU .10 COUNTER FOR SHORT TIME MDIUM EQU .50 MEDIUM TIMEOUT LONG DEC 1500 15 SECOND TIMEOUT RRLIM DEC -20 READ RETRY LIMIT RINIA DEF RINI WINIA DEF WINI RSERA DEF RSER WSERA DEF WSER SEVERE ERROR RECOVERY ADDRESS WPFLA DEF WPFL POWER FAIL RECOVERY ADDRESS WFPRA DEF WFPR FRONT PANEL RECOVERY ADDRESS RCNTA DEF RCONT-1,I QUEUE ASC 3,QUEUE PROGRAM THAT MAKES READ REQUESTS SPC 1 * * BIT MASKS * TRB ABS TR FMB EQU B1000+FM-FM CIB EQU B400+CI-CI LUB EQU B377+LU-LU FWB EQU BIT15+FW-FW RCB ABS RC SEB ABS SE ACB ABS AC NDB ABS ND SMB ABS SM LCB EQU B1000+LC-LC LTB ABS LT MTB ABS MT STB EQU B100+ST-ST WPB EQU .8+WP-WP RPB EQU .4+RP-RP WALCB ABS WA+LC LCRCB ABS LC+RC M4B ABS LC+RC+ND+100000B+FW-FW BUSYB ABS AC+WP+RP+WL+RL TWB ABS 160000B+TW-TW FMNB EQU MB1K1+FM-FM CINB ABS -CI-1 PWUPB ABS SE+RC+WP+RP WLRLB ABS WL+RL SERCN ABS -SE-RC-1 XTNB ABS -ST-MT-LT-1 XCNB ABS -AC-RC-LC-1 LCNB EQU MB1K1+LC-LC RPNB EQU M5+RP-RP M3NB ABS -RC-ND-10000B+FW-FW-1 WANB EQU M3+WA-WA SKP ************************************************** * * * SYSTEM SECTION * * * ************************************************** SPC 2 **** **** * *** ENTRY PART: HANDLE DRIVER ENTRY *** * **** **** SPC 1 * * DO CONFIGURATION OF DRIVER * ID.66 NOP AND .7 GET JUST GOOD STUFF STA ENTRY REMEMBER WHY WE ARE HERE LDA $IFTX GET IFT EXTENSION ADDRESS CPA XTBEG ALREADY POINTING THERE? JMP S1A2 YES, BE LAZY LDB MXTPL NO, GET NUMBER OF WORDS STB TEMP1 WE MUST SET LDB XTPTR GET POINTER TO FIRST S1A1 STA B,I CONFIGURE WORD INA ADVANCE INB POINTERS ISZ TEMP1 DONE? JMP S1A1 NO, WORK SOME MORE S1A2 CLA CLEAR STA SSERV DRIVER STA ACTIV STATUS STA TGONE TEMPORARY STA RENTR VARIABLES STA SRVOK * * HANDLE FIRST DRIVER ENTRY * LDA $IF7,I HAVE WE BEEN ON THIS ALF,RAL IFT BEFORE SSA,RSS (FIRST ENTRY FLAG CLEAR)? JMP S1C YES LDA $IF7,I AND B377 IS IFT EXTENSION ADA MXTLN OF THE CCE,SZA,RSS RIGHT SIZE? JMP S1B YES, PROCEED LDA .50 NO, SAY ERROR SO SOMEBODY STA $DV16,I WILL GET THE IDEA CLA DO COMPLETION JMP ID.66,I RETURN S1B STA RDSIZ,I CLEAR CRITICAL STA WBUFS,I IFT EXTENSION WORDS STA FBITS,I CLEAR ALL FLAGS LDA $IF7,I CLEAR XOR B2000 FIRST ENTRY STA $IF7,I FLAG LDA RINIA SET STA RCONT,I PROCESS LDA WINIA RESTART STA WCONT,I ADDRESSES * * DETERMINE TYPE OF ENTRY, HANDLE IT * S1C LDA ENTRY INITIATE SLA,RAR OR TIMEOUT ENTRY? JMP S1C0 YES SLA,RAR NO, CONTINUE? JMP S1C1 YES SLA NO, POWER FAIL JMP PFAIL YES, HANDLE THAT * * HANDLE ABORT REQUESTS * LDA $DV20,I FIND WHICH ALF,ALF PROCESS WAS AND .3 SERVING THIS LDB A DVT LDA FBITS,I SET HIS IOR B+WA-WA ABORT BIT CMB REQUEST STB SSERV COMPLETION RBL,RBL CLEAR PROPER AND B+WP-WP PENDING BIT STA FBITS,I SAVE NEW FLAGS JMP INIT ENTER MAIN CODE * * HANDLE TIMEOUT * S1C0 SLA,RSS TIMEOUT? JMP S1C2 NO, INITIATE ENTRY LDA FBITS,I MEDIUM ALF,ALF LENGTH RAL,SLA TIMEOUT? ISZ TGONE+MT-MT YES, FLAG IT CMA,SSA,SLA MEDIUM OR SHORT TIMEOUT? JMP SICK+ST-ST NO, BAD TROUBLES JMP INIT YES, HANDLE NORMALLY * * HANDLE CONTINUE ENTRY * S1C1 SFC CDMA2 DMA PARITY ERROR? JMP $DMPR YES, REPORT LDA FBITS,I HAS THE LINE BEEN AND BUSYB INITIALIZED SZA OR ARE WE TRYING? JMP CONTN YES, PROCESS THIS INTERRUPT CLF CDATA NO, TURN OFF FLAG JMP EXIT IGNORE INTERRUPT SPC 1 **** **** * *** COMMAND PART: IDENTIFY AND VERIFY COMMAND *** * **** **** S1C2 LDA $DV15,I GET REQUEST AND B7703 ISOLATE FUNCTION/SUBFUNCTION CLB RRR 6 ISOLATE FUNCTION CODE BLF,RBL IS REQUEST TYPE SSB,SLB,RSS CONTROL REQUEST? JMP S2A1 NO, READ OR WRITE ADA MB36 YES, IS FUNCTION CODE SSA,RSS UNDER 36B? JMP S2A9 NO, INDICATE IF LINK IS UP ADA .6 YES, IS IT SSA UNDER 30B? JMP S2A6 YES, ILLEGAL LDB $DV16,I GET OPTIONAL PARAMETER ARS IS REQUEST SET DS/NON-DS MODE? SZA OR SET/CLEAR FRONT PANEL WAIT CPB FNMBR YES, IS SECURITY CODE WRONG? CCB,RSS NO, ALL IS COOL, GET PHONY MESSAGE TYPE JMP S2A6 YES, DUMP THIS DUDE S2A13 LDA .2 JMP S2A4 SET WRITE FLAG S2A1 AND B77 GET MESSAGE TYPE AND DIRECTION LDB A SAVE IT ARS GET JUST TYPE CPA B17 READ/WRITE SPECIAL DATA? JMP S2A13 YES CPA .3 BREAK FRAME SLB,RSS DATA TYPE WRITE? JMP S2A11 NO LDA FNMBR YES, CHECK FIRST CPA $DV18,I PARAMETER FOR SECURITY CODE CCE,RSS RIGHT JMP S2A6 WRONG! LDA FMISC,I GET OUT AND LUB LU TIMES 32 ALF,ELA PLUS 1 CPA $DV19,I EQUAL TO SECOND PARAMETER? JMP S2A12 YES, PROCEED JMP S2A6 NO, NO FOOLING US S2A11 SZA DS 1 CPA B10 MESSAGE RSS TYPE? JMP S2A10 NO LDA $DV15,I YES, ELA,ALF CLASS I/O ERA AND DOUBLE SSA,SLA,RSS BUFFERED? JMP S2A6 NO, ERROR LDA $DV19,I YES, SECOND BUFFER ADA M2 AT LEAST SSA TWO WORDS? JMP S2A6 NO, ERROR CCA YES, ADA $DV19,I POINT TO ADA $DV18,I LAST WORD STA TEMP1 SAVE POINTER LDA FMISC,I GET AND LUB LU XOR TEMP1,I GET REST OF SLB LAST WORD AND B777 UNLESS IT IS A READ XOR TEMP1,I IN WHICH CASE JUST STORE STA TEMP1,I STUFF IT CLA RESTORE TYPE S2A10 ADA M5 IS TYPE SSA,RSS TOO BIG? JMP S2A6 YES, ERROR S2A12 CLA,INA SLB,RSS IS REQUEST A READ? JMP S2A4 YES LDA FBITS+ND-ND,I NO, WRITE, ALF GET NON DS ALLOWED IOR FBITS+FW-FW,I IN SIGN BIT RBR,RBR DS 1 OR DS 2 CMB,SSB,SLB MESSAGE TYPE? CMA YES SSA,RSS MODES MATCH? JMP S2A5 NO, ERROR LDA .2 GET WRITE FLAG LDB FBITS+AC-AC,I ARE WE BLF,SLB INITIALIZED? JMP S2A4 YES LDA #NOIN NO, STOP THIS JMP S2A7 IMPOSTOR S2A4 STA SRVOK INDICATE COMPLETION LIMITATION ALF,ALF INDICATE IOR $DV20,I WHO WILL DO STA $DV20,I THIS COMMAND LDA SRVOK SET COMMAND RAL,RAL PENDING IOR FBITS+WP-WP,I FLAG CPA FBITS,I REQUEST ALREADY PENDING? JMP S2A8 YES, REJECT THIS ONE STA FBITS,I SET PENDING FLAG JMP INIT ENTER MAIN CODE S2A8 LDA #LBUS LOCAL BUSY ERROR SAYS JMP S2A7 TOO MUCH TO HANDLE S2A9 LDA FBITS,I DETERMINE WHTEHER WE AND M4B ARE READY FOR A DS 1 MESSAGE LDB WBUFS,I HAVE WE GIVEN UP CPB M1 ON GETTING A BUFFER? CLA YES, NOT READY CPA LCRCB OTHERWISE READY? CLA,RSS YES, GOOD STATUS S2A5 LDA #WRMD WRONG MODE ERROR RSS S2A6 LDA #ILRQ GET ILLEGAL REQUEST STATUS S2A7 CLB SAY CURRENT STB ACTIV DVT JSB STAT SET STATUS CCA SET COMPLETION STA SSERV FLAG JMP EXIT GO RESTORE TIMEOUTS * * PUT INFORMATION ON COMMAND FOR ACTIVE PROCESS IN TEMP1 : TEMP4 * NO SKIP RETURN IF REQUEST HAS BEEN ABORTED * SKIP RETURN WITH TEMPS VALID IF REQUEST STILL PENDING * CMDAT NOP LDA ACTIV HAS AND FBITS+WA-WA,I REQUEST BEEN SZA ABORTED? JMP CMDAT,I YES, NO SKIP RETURN ISZ CMDAT NO, PREPARE SKIP RETURN LDA ACTIV MAKE SURE WE HAVE JSB DVTST THE CORRECT COMMAND LDA $DV15,I GET REQUEST LDB $DV17,I GET LENGTH STB TEMP3 OF FIRST BUFFER LDB $DV16,I GET POINTER STB TEMP2 TO BUFFER ALF,ALF ARE BITS RAR,RAR NINE AND TEN SSA,SLA,RSS SET? JMP CMDA1 NO, MUST BE READ OR WRITE ALF ISOLATE OPTION PART AND .7 OF FUNCTION CODE CMA MAKE NEGATIVE FOR COMMAND TYPE LDB $DV18,I GET OPTIONAL PARAMTER JMP CMDA2 CMDA1 SLA,RSS ARE WE TO IGNORE FIRST BUFFER? JMP CMDA3 NO CLB YES, SET LENGTH STB TEMP3 TO ZERO LDB $DV18,I SET POINTER STB TEMP2 TO SECOND BUFFER CMDA3 ALF,RAR GET BITS 9, 8, AND 7 OF FUNCTION CODE AND .7 WHICH ARE MESSAGE TYPE LDB $DV19,I GET LENGTH OF SECOND BUFFER ADB M2 WITHOUT LU WORD SZA DS 1 MESSAGE TYPE? CLB NO, IGNORE SECOND BUFFER CMDA2 STB TEMP4 STORE SECOND LENGTH / OPTIONAL PARAMETER STA TEMP1 STORE MESSAGE TYPE / COMMAND JMP CMDAT,I THAT'S ALL FOLKS SPC 1 **** **** * *** EXIT PART: LEAVE DRIVER, REQUEST / RELEASE RESOURCES *** * **** **** EXIT LDA FBITS,I GET TIMEOUT FLAGS CLB ALF,ALF LONG SLA TIMEOUT? LDB LONG+LT-LT YES RAL,SLA MEDIUM TIMEOUT? LDB MDIUM+MT-MT YES RAL,SLA SHORT TIMEOUT? LDB SHORT+ST-ST YES CMB,INB MAKE TIMEOUT NEGATIVE STB TEMP1 SAVE TIMEOUT VALUE LDA SSERV DO WE NEED TO ASK FOR SZA,RSS A COMPLETION RETURN? JMP EXIT4 NO CMA YES, SET UP JSB DVTST RIGHT DVT LDB $DV6,I GET STATUS LDA $DV15,I IS REQUEST IOR B100 A WRITE CPA $DV15,I REQUEST? ADB .4 YES, SET NOT READ BIT AND B600 IS REQUEST SZA NON-DS? ADB .8 YES, SET NON-DS BIT STB $DV6,I SET STATUS LDA $DV20,I CLEAR PROCESS AND B377 SERVER STA $DV20,I FLAG CLA SAY NO STA $DV16,I ERROR JMP EXIT5 EXIT4 LDA ENTRY WERE WE ENTERED CLE,ERA ON ABORT SZA,RSS OR INITIATE? JMP EXIT7 YES ISZ ID.66 NO, DO PHYSICAL WAIT EXIT5 CLA,RSS EXIT7 LDA .8 GET PHONY DONE REQUEST LDB TEMP1 SET STB $IF2,I TIMEOUT SZB ACTIVATE IT INA IF ANY JMP ID.66,I RETURN FROM WHENCE WE CAME SPC 1 * * SET UP DVT SERVED BY PROCESS INDICATED BY A * DVTST NOP SZA,RSS DO WE WANT THE CURRENT DVT? JMP DVTST,I YES LDB $IF5,I MAKE CPB $DV1 SURE JMP DVTS1 WE HAVE STA DVTMP ONE OF CLA,INA OUR OWN JSB $DIOC DVT'S LDA DVTMP DVTS1 ALF,ALF IS THIS DVT AND $DV20,I BEING SERVED BY SZA THE PROPER PROCESS? JMP DVTST,I YES LDB $IF5,I NO, GO TO LDA .5 THE OTHER JSB $DIOC DVT JMP DVTST,I DVTMP BSS 1 * * SET STATUS OF REQUEST ON ACTIVE PROCESS * STAT NOP ALF SET STATUS IN SZA PROPER ADA .2 FORM STA CMDAT SAVE IT LDA ACTIV HAS REQUEST AND FBITS+WA-WA,I BEEN SZA ABORTED? JMP STAT,I YES, DO NOTHING LDA ACTIV GET RIGHT JSB DVTST DVT LDA $DV6,I UPDATE AND MB400 STATUS IOR CMDAT STA $DV6,I JMP STAT,I ALL DONE SKP ************************************************** * * * READ SECTION * * * ************************************************** SPC 2 **** **** * *** PART -1: SEVERE ERROR RECOVERY *** * **** **** RSER EQU * LDA FBITS,I IS A AND RPB READ REQUEST SZA,RSS PENDING? JMP RINI NO JSB COMPL YES, COMPLETE IT LDA #SERR DECLARE A SEVERE JSB STAT ERROR SPC 1 **** **** * *** PART 0: INITIALIZE FOR READING *** * **** **** RINI CLA SAY NO FRAME STA RDSIZ,I PENDING SPC 1 **** **** * *** PART 1: WAIT FOR FRAME *** * **** **** R1 LDA M10 SET TIMEOUT STA RPTRY,I COUNTER R1A LDA FMISC,I NEED TO TELL AND CIB HIGHER LEVELS ABOUT SZA CONNECT? JMP R2D YES LDA RDSIZ,I FRAME SZA READY? JMP R2 YES LDA FBITS,I NO, CLEAR ERA,CLE,ELA READ ABORTED BIT STA FBITS+RA-RA,I JUST IN CASE AND RPNB READ CPA FBITS,I PENDING? JMP R1D NO AND ACB YES, ARE WE AUTHORIZED SZA,RSS TO CONNECT? JMP R1B NO, ERROR JSB CMDAT GET READ'S NOP LDA TEMP1 MESSAGE TYPE CPA .4 DS 2 TYPE? JMP R1D YES, DON'T TIME HIM LDA TGONE DID A SZA TIMEOUT OCCUR? ISZ RPTRY,I YES, TOO MANY? JMP R1C NO LDA #TMOT YES, BOUNCE THIS RSS REQUEST WITH TIMEOUT R1B LDA #NOIN NOT INITIALIZED JSB STAT INDICATE ERROR JSB COMPL DUMP REQUEST JMP R1 TRY AGAIN R1C LDA FBITS,I REQUEST IOR MTB TIMEOUT STA FBITS,I R1D JSB SUSP WAIT JMP R1A SEE WHAT HAPPENED SPC 1 **** **** * *** PART 2: DETERMINE MESSAGE PARAMETERS *** * **** **** R2 LDA FMISC,I IS MESSAGE AND TRB TYPE SZA,RSS DS 1? JMP R2A YES LDA RDSIZ,I NO, FIRST BUFFER STA RLEN1,I LENGTH IS FRAME SIZE CLA SECOND BUFFER LENGTH IS ZERO JMP R2E * * DS MESSAGE, GET TOTAL LENGTHS FROM FIRST TWO WORDS * R2A JSB LOCK GRAB BACKPLANE LDB RDSIZ,I IS FRAME ADB M3 AT LEAST LDA FBITS,I THREE WORDS LONG AND SMB AND IS START SSB,INB,RSS OF MESSAGE SZA,RSS BIT SET? JMP R2B NO, THROW THE BUM OUT STB RDSIZ,I SAY BUFFER TWO WORDS SHORTER LDA !R2WD TELL CARD THAT WE WANT JSB OTCM$ TO READ IN TWO WORDS JSB WFLG$ LIA CDATA,C FIRST WORD IS LENGTH STA RLEN1,I OF FIRST BUFFER JSB WFLG$ SECOND WORD LIA CDATA,C IS LENGTH STA RLEN2,I OF SECOND BUFFER ARS IS SECOND BUFFER SZA SHORTER THAN 2 WORDS? JMP R2C NO, GOOD * * ILLEGAL FRAME, THROW IT AWAY * R2B LDA !DCRD TELL CARD JSB OTCM$ TO THROW JSB WCOM$ OUT FRAME JSB UNLK$ CLA NO MORE STA RDSIZ,I FRAME PENDING JMP R1 TRY AGAIN * R2C JSB UNLK$ GIVE BACK BACKPLANE JMP R3 * * SEND CONNECT INDICATION REQUEST TO HIGHER UPS * R2D CLA REQUEST STA RLEN1,I CONNECT R2E STA RLEN2,I INDICATION SPC 1 **** **** * *** PART 3: GET A READ REQUEST *** * **** **** R3 CLA CLEAR OUT STA RPTRY,I RETRY COUNTER * * WAIT FOR A READ REQUEST, MAKE ONE IF NEEDED * R3A LDA FBITS+RA-RA,I CLEAR READ ABORTED BIT ERA,CLE,ELA IN CASE IT WAS SET STA FBITS,I FROM BEFORE AND RPB IS A READ REQUEST SZA PENDING? JMP R3B YES, DO OUR STUFF LDB RLEN1,I IS THIS A ADB RLEN2,I CONNECT SZB,RSS INDICATION? JMP R3A2 YES, DS 1 MESSAGE TYPE LDA FBITS,I AND RCB IS THIS A SZA,RSS 3000 CALL? JMP R3B2 YES, WAIT FOR QUEZ LDB FMISC,I GET AND RRL 6+TR-TR SAVE AND .7 MESSAGE R3A2 STA TEMP4 TYPE CPA .2 FRONT PANEL RSS MESSAGE TYPE? JMP R3A1 NO LDA FBITS+FW-FW,I YES, IN FRONT PANEL SSA WAIT MODE? JMP R3B2 YES, WAIT LDA FMISC,I NO, IS THIS THE AND FMB FIRST FRONT PANEL SZA MESSAGE SEEN? JMP R3B4 NO, DISCARD IT R3A1 LDB RLEN1,I GET LENGTHS LDA RLEN2,I OF BUFFERS STA TEMP3 SAVE SECOND LENGTH SZA IS SECOND LENGTH LDA RPTRY,I NON-ZERO AND IS ADA RRLIM RETRY COUNTER SSA,RSS BIG? CLB YES, DUMP FIRST BUFFER STB TEMP2 SAVE FIRST LENGTH LDA FMISC,I SAVE AND LUB LU IOR BIT15 INDICATING SECOND EQT STA TEMP1 JSB $XQSB SCHEDULE DEF QUEUE PROGRAM DEF FNMBR WITH PARAMETERS DEC 0 LDA FBITS,I ASK FOR IOR STB QUICK STA FBITS,I TIMEOUT JSB SUSP WAIT JMP R3A SEE IF A GOOD THING HAPPENED * * HANDLE NO SAM REQUESTS * R3B CLA SET JSB STAT GOOD STATUS JSB CMDAT FIND OUT ABOUT REQUEST JMP R1 REQUEST ABORTED LDA TEMP3 IS IT A IOR TEMP4 NO SAM SZA REQUEST? JMP R3C NO JSB COMPL MAYBE, DO A COMPLETION JSB CMDAT IS THIS JMP R1 REQUEST ABORTED LDA TEMP1 A CONNECT SZA,RSS INDICATION? JMP R3B3 YES LDA $DV18,I NO, DOES THIS SAY CPA .1 BAD LENGTHS? JMP R3B4 YES, TOSS OUT FRAME CLB CLEAR RETRY COUNTER CPA .2 IF DS/1000 STB RPTRY,I IS ILL JSB LOCK WAIT FOR BACKPLANE JSB UNLK$ TO QUIET DOWN LDA FBITS,I ASK FOR IOR MTB MEDIUM STA FBITS,I TIMEOUT R3B2 JSB SUSP WAIT FOR SOMETHING LDA TGONE INCREMENT ADA RPTRY,I RETRY COUNTER STA RPTRY,I IF TIMEOUT OCCURRED JMP R3A TRY AGAIN R3B3 LDA FMISC,I CLEAR "MUST AND CINB TELL ABOUT STA FMISC,I CONNECT" BIT LDA RLEN1,I WERE WE IOR RLEN2,I LOOKING FOR A SZA CONNECT INDICATION? JMP R3A NO, WAIT FOR READ JMP R1 DONE R3B4 JSB LOCK GRAB BACKPLANE JMP R2B GO TOSS FRAME * * MAKE SURE COMMAND IS LEGAL * R3C LDA FMISC,I DO READ RRR 10+TR-TR MESSAGE TYPE XOR TEMP1 AND FRAME AND .7 TYPE SZA AGREE? JMP R3C1 NO, ERROR LDB TEMP1 DS 1 SZB MESSAGE TYPE? JMP R3C3 NO, TAKE ANYTHING LDA TEMP4 SECOND CPA RLEN2,I LENGTHS RSS EQUAL? JMP R3C1 NO, COMPLAIN LDA TEMP3 FIRST LENGTHS CPA RLEN1,I EQUAL? JMP R4 YES, GOOD SZA,RSS NO, IS REQUEST FOR ZERO WORDS? JMP R3C2 YES, SORT OF GOOD R3C1 JSB COMPL CLAIM LDA #WRMD ILLEGAL JSB STAT REQUEST JMP R3A TRY AGAIN R3C2 LDA #RBUS SET STATUS TO JSB STAT LOCAL BUSY JMP R4 R3C3 LDA FMISC,I INDICATE IOR FMB FRONT PANEL MESSAGE CPB .2 IF THAT IS STA FMISC,I WHAT WE HAVE SPC 1 **** **** * *** PART 4: READ DATA *** * **** **** * * SET UP RLEN1, RLEN2, RPTRY * R4 LDA TEMP2 SET BUFFER POINTER IOR BIT15 WITH DMA INPUT STA RPTRY,I DIRECTION BIT LDA TEMP3 SET COMBINED ADA TEMP4 LENGTHS TO READ ADA BIT15 AND START OF MESSAGE BIT STA RLEN2,I ALLOWED FLAG LDB TEMP1 GET MESSAGE TYPE LDA RLEN1,I GET THE NUMBER OF WORDS IN FIRST BUFFER SZB SET TRANSMISSION LOG STA $DV17,I TO REAL LENGTH FOR NOT DS 1 CMA,INA GET NUMBER OF WORDS TO SKIP ADA TEMP3 FOR A DS 1 TYPE MESSAGE SZB,RSS DS 1 MESSAGE? STA RLEN1,I YES, RECORD SKIP COUNT * * WAIT FOR A FRAME TO ARRIVE, HANDLE EXCEPTIONS * R4B LDA RLEN2,I DO WE NEED SZA,RSS TO READ MORE WORDS? JMP R4F NO, WE ARE DONE R4B1 JSB CMDAT REQUEST STILL PENDING? JMP R1 NO, ABORTED LDB RDSIZ,I IS A SZB FRAME READY? JMP R4C YES LDA FBITS,I AND LCB IS THE LINK SZA,RSS LOGICALLY CONNECTED? JMP R4B2 NO, GO STOP THE READ JSB SUSP WAIT FOR SOME SIGNIFICANT EVENT JMP R4B1 TRY AGAIN R4B2 JSB COMPL REQUEST COMPLETION LDA #LFAL LINE FAILURE JSB STAT IS THE STATUS JMP R1 TRY AGAIN * * MAKE SURE WE HAVE A GOOD LOOKING FRAME * R4C LDA FMISC,I DO INPUT RRR 10+TR-TR MESSAGE TYPE XOR TEMP1 AND COMMAND AND .7 TYPE SZA AGREE? JMP R4C1 NO, ERROR LDA RLEN2,I GET START OF MESSAGE RAL,CLE,ERA ALLOWED INDICATOR STA RLEN2,I CLEAR IT LDA FBITS,I IS START AND SMB OF MESSAGE CME BIT SET AND SEZ,SZA NOT ALLOWED? JMP R4C1 YES, THAT'S BAD LDB RLEN1,I SSB,RSS CLB IS THE ADB RDSIZ,I FRAME SIZE CMB,INB BIGGER THAN ADB RLEN2,I THE NUMBER OF SSB,RSS WORDS WE WANT? JMP R4C2 NO, GOOD R4C1 JSB COMPL YES, COMPLETE THIS REQUEST LDA #MEAB BLAME THINGS ON JSB STAT THE OTHER SIDE JMP R1 GO GET BACK IN SYNC R4C2 JSB LOCK WE WILL NEED THE BACKPLANE * * DO SOMETHING WITH THIS FRAME * R4D LDA RLEN1,I DO WE SSA,RSS NEED CLA TO ADA RDSIZ,I SKIP THE LDB A ENTIRE CMA,SSA,INA,SZA FRAME? JMP R4D1 NO STB RLEN1,I UPDATE COUNT CLA NO FRAME STA RDSIZ,I READY NOW LDA !DCRD TELL CARD JSB OTCM$ TO DUMP JSB WCOM$ FRAME JMP R4E1 R4D1 STB RDSIZ,I UPDATE FRAME SIZE R4D2 LDA RLEN1,I DO WE NEED CMA,SSA,INA TO SKIP SOME WORDS? JMP R4D3 NO ADA MB400 YES, SKIP SSA,RSS AT MOST CCA 255 ADA B400 WORDS LDB A UPDATE ADB RLEN1,I SKIP STB RLEN1,I COUNT IOR !ADBP TELL JSB OTCM$ CARD JSB WCOM$ WAIT FOR CARD TO FINISH JMP R4D2 SEE IF WE MUST SKIP MORE R4D3 LDA !INTR COMPUTE ADA RDSIZ,I COMMAND TO STA TEMP6 READ IN THE FRAME LDA TRIPL SET POINTER STA TEMP5 TO TRIPLE AREA LDA RPTRY,I SET DMA STARTING ADDRESS STA TEMP1 WITH INPUT BIT SET ADA RDSIZ,I UPDATE STA RPTRY,I BUFFER POINTER LDA RDSIZ,I SET DMA CMA,INA TRANSFER STA TEMP2 LENGTH ADA RLEN2,I SAY HOW MANY WORDS STA RLEN2,I MUST STILL BE READ CLA SAY NO STA RDSIZ,I FRAME READY JSB DMA$ SET UP TRIPLE, START UP DMA * * WAIT FOR TRANSFER TO FINISH, HANDLE EXCEPTIONS * R4E JSB WTRN$ WAIT FOR TRANSFER TO FINISH R4E1 JSB UNLK$ UNLOCK BACKPLANE LDA FMISC,I IS AND TRB MESSAGE TYPE SZA,RSS DS 1? JMP R4B YES, GET NEXT FRAME * * ENTIRE MESSAGE HAS BEEN READ, COMPLETE * R4F JSB COMPL DONE AT LAST JMP R1 BACK FOR MORE WORK SKP ************************************************** * * * WRITE SECTION * * * ************************************************** SPC 2 **** **** * *** PART -1: HANDLE POWER-FAIL AND SEVERE ERROR *** * **** **** WSER EQU * SEVERE ERROR RECOVERY LDA FBITS,I REQUEST ON AND WPB WRITE SZA,RSS PROCESS? JMP W1C NO JSB COMPL YES, DUMP IT LDA #SERR WITH NASTY JSB STAT ERROR W1C JSB SUSP WAIT FOR A NEW COMMAND LDA FBITS,I DID A CONFIGURATION AND WPB COMMAND SZA,RSS ARRIVE? JMP W1C NO, WAIT SOME MORE LDA FBITS,I CLEAR SICK CARD AND SERCN AND AUTOMATIC RECONNECT STA FBITS,I FLAGS WFPR EQU * FRONT PANEL RECOVERY JSB LOCK RESERVE BACKPLANE LDA !RSET RESET JSB OTCM$ CARD JSB WFLG$ WAIT FOR HIM TO RECOVER RSS WPFL EQU * POWER FAIL RECOVERY JSB LOCK KEEP THINGS FOR OURSELVES LDA !PWUP TELL CARD THAT JSB OTCM$ WE UNDERSTAND JSB WCOM$ HIS TROUBLES RSS SPC 1 **** **** * *** PART 0: HANDLE STARTUP OF CARD *** * **** **** WINI JSB LOCK LOCK THINGS UP CLA SAY NO BUFFERS STA WBUFS,I READY LDA FMISC,I SET WRITE TYPE IOR TWB UNDEFINED AND CINB AND NO CONNECT STA FMISC,I INDICATION NEEDED LDA FBITS,I AUTOMATIC AND RCB RECONNECTION? SZA,RSS JMP W1D NO, DON'T BOTHER LDA !CNCT TELL CARD JSB OTCM$ TO CONNECT JSB WCOM$ ONCE MORE LDA FBITS,I SET IOR ACB ASKED TO CONNECT STA FBITS,I FLAG W1D LDA !TIME TELL JSB OTCM$ CARD JSB WFLG$ THAT TIMEOUT IS COMING JSB DVTST GET OUR LDA $DV13,I TIMEOUT VALUE CMA,INA AS A POSITIVE QUANTITY OTA CDATA,C TELL CARD JSB WCOM$ ABOUT IT JSB UNLK$ GIVE BACK BACKPLANE **** **** * *** PART 1: WAIT FOR SOMETHING TO DO *** * **** **** W1 LDA FBITS,I IS A REQUEST PENDING AND WPB FOR THE WRITE PROCESS SZA TO EXECUTE? JMP W1A YES, GO DO OUR THING JSB SUSP NO, WAIT FOR SOMETHING TO HAPPEN JMP W1 W1A CLA SET GOOD JSB STAT STATUS LDA FBITS,I CLEAR WRITE ABORT BIT AND WANB IN CASE IT WAS STA FBITS,I SET FROM BEFORE JSB LOCK WE ARE GOING TO NEED THE BACKPLANE JSB CMDAT GET COMMAND JMP W3D ABORTED LDB TEMP1 TYPE CCE,SSB SPECIAL COMMAND? JMP W3 YES, GO TO PART 3 CPB .3 SEND BREAK MESSAGE? JMP W3C YES, DO THAT SPC 1 **** **** * *** PART 2: SEND WRITE DATA *** * **** **** * * SET MESSAGE TYPE * W2 LDA FMISC,I GET CARD'S ALF,RAR CURRENT AND .7+TW-TW OUTPUT TYPE CPA TEMP1 MATCH? JMP W2A YES, WE CAN SAVE SOME WORK LDA FMISC,I NO, SET TW ALF,RAR TO NEW RRR 3+TW-TW MESSAGE TYPE STA FMISC,I LDA TEMP1 GET BACK MESSAGE TYPE ADA !NMT MAKE COMMAND TO TELL CARD JSB OTCM$ TELL IT JSB WCOM$ WAIT FOR IT TO FINISH JSB CMDAT RESTORE COMMAND INFORMATION JMP W3D COMMAND ABORTED * * GET MESSAGE PARAMETERS * W2A LDA TEMP2 GET POINTER TO START OF BUFFERS LDB TEMP1 SET SIGN BIT CCE,SZB,RSS IF MESSAGE TYPE RAL,ERA IS DS STA WPTR,I SAVE POINTER LDA TEMP3 GET LENGTH OF FIRST BUFFER ADA TEMP4 ADD LENGTH OF SECOND BUFFER STA WLEN,I SAVE NUMBER OF WORDS TO WRITE * * TRANSFER EACH FRAME * W2B LDA WLEN,I MORE DATA TO CCE,SZA,RSS WRITE OUT? JMP W3D NO, ALL DONE * * WAIT FOR BUFFER TO BE READY OR ERROR CONDITION * THE BACKPLANE IS LOCKED IFF E IS SET * W2C LDA FBITS,I WRITE REQUEST ABORTED AND WALCB OR LINE LOGICALLY CPA LCB DISCONNECTED? JMP W2C0 NO, SO FAR SO GOOD SEZ GIVE BACK BACKPLANE JSB UNLK$ IF WE HAVE IT LDA #LFAL LINE FAILURE STATUS JMP W2C5 REPORT W2C0 LDA WBUFS,I HAVE WE ASKED SSA FOR A OUTPUT BUFFER? JMP W2C2 YES, WAIT SOME MORE SEZ,RSS NO, GRAB BACKPLANE JSB LOCK IF WE DON'T HAVE IT LDA WBUFS,I SEE HOW MANY BUFFERS WE HAVE SZA ARE THERE ANY? JMP W2C1 YES, FILL ONE UP CLB NO, COMPUTE LDA WLEN,I HOW MANY BUFFERS DIV WFSIZ,I WE WILL NEED AND B77 ADA !OTBF ASK JSB OTCM$ FOR JSB WCOM$ BUFFERS W2C1 ADA M1 GET HOW MANY STA WBUFS,I MINUS ONE CCE,SSA,RSS DID WE GET ANY? JMP W2D YES, FILL ONE UP LDA M60 SET TIMEOUT STA WBUFS,I LIMIT W2C2 SEZ GIVE BACK BACKPLANE JSB UNLK$ IF WE HAVE IT LDA WBUFS,I IS TIME INA,SZA,RSS UP? JMP W2C3 YES, ERROR LDB TGONE NO, DID TIMEOUT SZB OCCUR? STA WBUFS,I YES, COUNT IT LDA FBITS,I ASK FOR IOR MTB MEDIUM STA FBITS,I TIMEOUT JSB SUSP WAIT FOR SOMETHING CLE SAY WE DON'T OWN THE BACKPLANE JMP W2C SEE WHAT WE GOT W2C3 LDA #RBUS REMOTE BUSY W2C5 JSB STAT STATUS JSB COMPL JMP W1 WAIT FOR A NEW REQUEST * * SEND OUTPUT TRANSFER COMMAND * W2D LDA WLEN,I GET LENGTH CPA WFSIZ,I LAST FRAME CANNOT BE FULL SIZE ADA M1 SO WE CAN DETECT DUPLICATE FRAMES LDB WPTR,I ADD TWO WORDS TO LENGTH SSB IF LENGTH WORDS MUST BE ADA .2 WRITTEN OUT LDB WFSIZ,I IS LENGTH CMB GREATER THAN ADB A MAXIMUM FRAME SSB,RSS SIZE? LDA WFSIZ,I YES, USE MAX FRAME SIZE ADA !OTTR MAKE OUTPUT TRANSFER COMMAND LDB WPTR,I IS THIS FRAME SSB START OF DS 1 MESSAGE? ADA !SMB YES, SET START OF MESSAGE BIT STA TEMP6 SAVE COMMAND * * START UP DMA * W2E LDA TRIPL SET POINTER STA TEMP5 TO TRIPLE AREA LDA WPTR,I DO WE HAVE TO SEND SSA,RSS LENGTH WORDS? JMP W2E1 NO ELA,CLE,ERA YES, BUT WE WON'T STA WPTR,I ANY MORE JSB CMDAT GET OUR DVT SET UP JMP W3D NOT THERE ANY MORE LDA TEMP4 PUT LENGTHS IN DVT STA $DV18,I WHERE THEY WILL BE SAFE LDA TEMP3 WHILE DMA IS STA $DV17,I RUNNING LDA $DV17 SET ADDRESS STA TEMP1 OF LENGTH WORDS LDA M2 MUST WRITE STA TEMP2 TWO LENGTH WORDS LDA BIT15 SET UP JSB TRPL$ TRIPLE LDA WFSIZ,I MAX DMA TRANSFER NOW ADA M2 IS TWO LESS THAN JMP W2E2 MAX FRAME SIZE W2E1 LDA WFSIZ,I GET MAX DMA TRANSFER CPA WLEN,I LAST FRAME CANNOT BE FULL SIZE ADA M1 SO WE CAN DETECT DUPLICATE FRAMES W2E2 LDB WLEN,I BIGGER CMB THAN ADB A WORDS TO SSB,RSS WRITE? LDA WLEN,I YES, USE WORDS TO WRITE LDB WPTR,I SET DMA STB TEMP1 STARTING ADDRESS ADB A ADJUST BUFFER STB WPTR,I POINTER CMA,INA SET DMA STA TEMP2 WORD COUNT ADA WLEN,I UPDATE NUMBER OF WORDS STA WLEN,I THAT MUST BE TRANSFERRED LDA B400 USE AUTO LDB TRIPL MODE IF CPB TEMP5 SECOND CLA TRIPLE JSB DMA$ SET UP TRIPLE AND START DMA * * WAIT FOR DMA TO FINISH OR ABORT, HANDLE IT * W2F JSB WTRN$ WAIT FOR DONE JMP W2B SEE IF THERE IS MORE TO SEND SPC 1 **** **** * *** PART 3: PROCESS CONTROL COMMANDS *** * **** **** W3 ERB,RBR GET LAST THREE BITS OF FUNCTION CODE CMB,CME,SZB WAS COMMAND 30 OR 31? JMP W3B NO * * PROCESS INITIALIZE LINK * SEZ REALLY INITIALIZE LINK? JMP W3A NO, MUST BE CLEAR LINK LDA #ILRQ GET POSSIBLE ERROR LDB $DV4,I GET POINTER ELB,CLE,ERB TO OTHER DVT CMB,INB IS THIS ADB $DV1 THE FIRST SSB,RSS DVT? JMP W3F NO, REJECT LDA TEMP2 GET AND LUB THE LU LDB ACB RECONNECT ALLOWED CPA TEMP2 ONLY FOR TYPE 0 ADB RCB CONNECT XOR FMISC,I PUT LU AND LUB WHERE WE XOR FMISC,I CAN GET IT STA FMISC,I LATER LDA FBITS,I CLEAR FUNNY FLAGS AND M3NB ADD ASKED TO CONNECT, IOR B AND RECONNECT IF NECESSARY STA FBITS,I SAVE FLAGS LDA TEMP2 GET ALF,ALF CONNECT AND B377 TYPE IOR !CNCT TELL JSB OTCM$ CARD JSB WCOM$ TO CONNECT LDB A SAVE RESPONSE LDA #NOIN GET POSSIBLE ERROR SZB CONNECT OK? JMP W3F NO, COMPLAIN LDA !MIFL ASK CARD JSB OTCM$ WHAT THE LARGEST JSB WCOM$ BUFFER SIZE IS STA WFSIZ,I SAVE ANSWER JSB UNLK$ RELEASE BACKPLANE JSB COMPL COMPLETE JSB LOCK GET BACK BACKPLANE JMP W1D UPDATE CARD'S TIMEOUT * * PROCESS CLEAR LINK * W3A LDA FBITS,I SAY AND XCNB NOT ASKED TO CONNECT STA FBITS,I NOT CONNECTED, AND NO RECONNECT LDA !DSCN TELL CARD JSB OTCM$ TO HANG UP JSB WCOM$ HEAR ME, OH CARD JMP W3D COMPLETE * * PROCESS SET/CLEAR MODE COMMANDS * W3B SSB,SLB REALLY SET/CLEAR MODE COMMAND? JMP W3E NO, MUST BE READ/WRITE FUNNY STUFF LDA NDB GET APPROPRIATE BIT SLB FOR THIS LDA FWB COMMAND XOR FBITS,I GET THE REST OF THE BITS SEZ,RSS CLEAR BIT? AND FBITS,I YES SEZ SET BIT? IOR FBITS,I YES STA FBITS,I SAVE NEW BITS JSB CIBCK SEE IF WE MUST ANNOUNCE NEW STATE JMP W3D * * PROCESS SEND BREAK * W3C LDA !BRK GET STOMP ON NEIGHBOR COMMAND JSB OTCM$ TELL CARD JSB WCOM$ TO SEND BREAK SZA,RSS DID THINGS GO WELL? JMP W3D YES LDA #LFAL NO, TELL W3F JSB STAT PROBLEMS W3D JSB UNLK$ JSB COMPL REQUEST COMPLETION JMP W1 BACK TO MAIN LOOP * * READ OR WRITE CONFIGURATION DATA * W3E LDA TEMP4 GET AND B377 DATA TYPE SZA,RSS DEFAULT TYPE INA IS ONE IOR !SIDT TELL CARD JSB OTCM$ ABOUT TYPE JSB WFLG$ OF DATA JSB CMDAT GET BACK INFO JMP W3G REQUEST ABORTED, BACK OFF LDA TRIPL SET POINTER STA TEMP5 TO TRIPLE AREA LDA TEMP3 GET BUFFER LENGTH LDB TEMP1 INPUT CMB,CCE,SLB OR OUTPUT RAL,ERA TRANSFER STA TEMP6 PUT IT WHERE DMA$ LOOKS LDA TEMP2 SET ADDRESS CCE,SLB,RSS WITH RAL,ERA DIRECTION STA TEMP1 BIT LDA TEMP3 SET LENGTH CMA,INA NEGATIVE STA TEMP2 FOR DMA CLA STANDARD CONTROL WORD JSB DMA$ START DMA JSB WTRN$ WAIT FOR COMPLETION JMP W3D COMPLETE W3G LDA !SIDT SET CARD BACK JSB OTCM$ TO ORDINARY JSB WCOM$ DATA TRANSFER JMP W3D SKP ************************************************** * * * BACKPLANE SECTION * * * ************************************************** SPC 2 * * REQUEST COMPLETION RETURN * COMPL NOP LDA ACTIV+WA-WA AND FBITS,I IS THE ABORT BIT OF THE SZA,RSS ACTIVE PROCESS SET? JMP COMP1 NO XOR FBITS,I YES, CLEAR IT AND RETURN, STA FBITS,I A COMPLETION RETURN HAS ALREADY JMP COMPL,I BEEN REQUESTED COMP1 LDA SRVOK DO WE WANT WHAT CPA ACTIV WE CAN'T HAVE CLA OR HAS A IOR SSERV SYSTEM SERVICE SZA,RSS ALREADY BEEN REQUESTED? JMP COMP2 NO ISZ RENTR YES, REQUEST DRIVER REENTRY LDB COMPL SUSPEND THIS JMP SUSPB PROCESS COMP2 LDA ACTIV SET UP THE CMA SERVICE STA SSERV WORD RAL,RAL CLEAR THE PROPER AND FBITS+WP-WP,I REQUEST PENDING STA FBITS,I BIT JMP COMPL,I SPC 1 * * LOCK THE BACKPLANE * LOCK NOP LDB LOCK GET RETURN ADDRESS JSB BSYCK CAN WE HAVE THE BACKPLANE? JMP SUSPB NO, GO WAIT FOR IT LDA ACTIV+WL-WL ALF SET THE BACKPLANE IOR FBITS,I LOCKED TO OUR STA FBITS,I PROCESS JMP LOCK,I TELL OUR GOOD NEWS SPC 1 * * UNLOCK THE BACKPLANE * UNLK$ NOP LDA ACTIV+WL-WL CLEAR THE ALF CORRECT XOR FBITS,I BACKPLANE LOCK STA FBITS,I FLAG CCA MAKE SURE THE NEXT PROCESS STA ADV IS ACTIVATED WHEN WE SUSPEND JMP UNLK$,I SPC 1 * * WAIT FOR DMA TRANSFER TO FINISH OR BE ABORTED * IF ABORTED, STOP DMA, TELL CARD, AND RETURN TO R1 OR W1 * WTRN$ NOP LDA FBITS+WA-WA,I AND ACTIV HAS THIS TRANSFER SZA BEEN ABORTED? JMP WTRN1 YES, TUBE IT LDB WTRN$ NO, GET SUSPEND ADDRESS SFS CDMA0 DMA FINISH? JMP SUSPB NO, WAIT CLF CDMA0 YES, STOP FURTHER INTERRUPTS JMP WTRN$,I RETURN WTRN1 CLC CDMA1 STOP DMA LDA !ABDM GET ABORT DMA COMMAND OTA CDATA,C SEND IT WTRN2 LDA MTB ASK FOR IOR FBITS,I HALF SECOND STA FBITS,I TIMEOUT JSB WAIT HAS THE CARD SET THE FLAG? RSS NO JMP WTRN3 YES JSB SUSP WAIT FOR CARD'S DMA TO DO SOMETHING LDA TGONE TIMEOUT? SZA,RSS IF YES, THEN DMA MUST HAVE FINISHED JMP WTRN2 NO, KEEP WAITING WTRN3 STC CDATA,C INDICATE COMMAND TO CARD JSB WFLG$ WAIT FOR HIM TO FINISH JSB UNLK$ RELEASE BACKPLANE LDA ACTIV RETURN TO CPA .2 THE CORRECT JMP W1 PROCESS CLB FIXING RDSIZ STB RDSIZ,I IF FROM JMP R1 READ PROCESS SPC 1 * * OUTPUT A COMMAND TO THE CARD * OTCM$ NOP OTA CDATA SEND THE COMMAND STC CDATA,C TELL THE CARD IT IS A COMMAND JMP OTCM$,I SPC 1 * * SET UP A DMA TRIPLE * TEMP5 => LOCATION TO STORE TRIPLE * TEMP1 = DATA ADDRESS WITH SIGN SET FOR READ * TEMP2 = NEGATIVE TRANSFER LENGTH * A = CONTROL WORD 1 WITHOUT IN BIT * TRPL$ NOP LDB TEMP1 GET DATA ADDRESS RBL,CLE,SLB,ERB CLEAR ADDRESS SIGN ADA B200 SET 'IN' IF READ DESIRED STA TEMP5,I SET CONT 1 ISZ TEMP5 SET STB TEMP5,I CONT 2 ISZ TEMP5 LDA TEMP2 SET STA TEMP5,I CONT 3 ISZ TEMP5 ADVANCE POINTER FOR NEXT TRIPLE JMP TRPL$,I SPC 1 * * SET UP TRIPLE, START DMA, DO COMMAND IN TEMP6 * DMA$ NOP JSB TRPL$ SET UP A TRIPLE LDA ACTIV REQUEST ON AND FBITS+WA-WA,I CURRENT PROCESS SZA ABORTED? JMP DMA1 YES, JUST DO COMMAND LDA TRIPL SET SELF CONFIGURATION OTA CDMA0 ADDRESS STC CDMA0,C START SELF CONFIGURATION DMA1 LDA TEMP6 TELL CARD JSB OTCM$ TO DO COMMAND JMP DMA$,I SPC 1 * * WAIT FOR FLAG FROM CARD * WFLG$ NOP LDB WFLG$ GET RETURN ADDRESS JSB WAIT FLAG SET? JMP SUSPB NO, SUSPEND JMP WFLG$,I YES, RETURN SPC 1 * * WAIT FOR RESPONSE TO COMMAND, MAKE SURE RESPONSE * IS GOOD, RETURN RESPONSE IN A * WCOM$ NOP LDB WCOM$ GET RETURN ADDRESS JSB WAIT FLAG SET? JMP SUSPB NO, SUSPEND LIA CDATA YES, GET ANSWER SSA FAILURE BIT SET? JMP SICK YES, MUST BE POWERFAIL OR WORSE JMP WCOM$,I NO, MUST BE OK SPC 1 * * WAIT A SHORT TIME FOR FLAG * SKIP RETURN IF FLAG IS SET, B IS UNCHANGED * WAIT NOP LDA M20 GET SHORT TIME COUNTER WAIT1 INA,SZA,RSS TIME UP? JMP WAIT,I YES, THAT'S ALL SFS CDATA NO, FLAG SET? JMP WAIT1 NO, WAIT SOME MORE ISZ WAIT YES, SAY FLAG SET JMP WAIT,I RETURN SPC 1 * * CHECK FOR BACKPLANE NO LONGER BUSY * SKIP RETURN IF SO, B IS UNCHANGED * BSYCK NOP LDA FBITS,I GET LOCK AND WLRLB FLAGS SZA,RSS ANY LOCK? JMP BSYC2 NO, SAY SO CPA WLRLB YES, LOCKED TO BACKPLANE? BSYC1 JSB WAIT YES, HAS CARD RESPONDED? JMP BSYCK,I NO, STILL LOCKED UP CLF CDATA ALLOW ANOTHER INTERRUPT LIA CDATA GET CARD'S RESPONSE SSA POWER FAIL? JMP SICK YES, GET HIM BACK ON HIS FEET SZA AN ACKNOWLEDGMENT? JMP BSYC1 NO, GIVE HIM ANOTHER CHANCE LDA FBITS,I YES, CLEAR XOR WLRLB LOCK STA FBITS,I FLAGS BSYC2 ISZ BSYCK SAY NOT BUSY JMP BSYCK,I RETURN TO POINT OF ORIGIN SPC 1 * * SUSPEND ACTIVE PROCESS, ACTIVATE OTHER ONE OR SET UP * BACKPLANE FOR DRIVER EXIT AND EXIT * SUSP NOP LDB SUSP RETURN ADDRESS IS RSS PROCESS CONTINUATION ADDRESS SUSPB ADB M1 ALTERNATE ENTRY, B IS ADDRESS + 1 LDA ACTIV SAVE CPA .1 RESTART STB RCONT,I ADDRESS CPA .2 IN CORRECT STB WCONT,I WORD ISZ ADV SHOULD WE ACTIVATE OTHER PROCESS? JMP SUSP1 NO, PREPARE BACKPLANE TO EXIT XOR .3 YES, ADJUST SUSP3 STA ACTIV ACTIVE PROCESS INDICATOR ADA RCNTA JUMP TO LDB A,I NEW JMP B,I PROCESS SUSP1 LDA FBITS,I IS AND WLRLB BACKPLANE SZA LOCKED? JMP SUSP4 YES, KEEP OUR HANDS OFF LDA !UNST GET UNSOLICITED STATUS INPUT COMMAND LDB RENTR DRIVER REENTRY SZB,RSS REQUESTED? JMP SUSP2 NO LDA FBITS,I YES, SET BACKPLANE IOR WLRLB BUSY FLAGS IOR LTB AND REQUEST STA FBITS,I TIMEOUT LDA !NOOP GET NO-OP COMMAND SUSP2 JSB OTCM$ SEND OUR PARTING COMMAND JMP EXIT RETURN TO THE SYSTEM SUSP4 LDA FBITS,I BACKPLANE LOCKED, IOR LTB REQUEST STA FBITS,I LONG TIMEOUT JMP EXIT SPC 1 * * PROCESS DRIVER ENTRY FROM CARD INTERRUPT * CONTN LIA CFPFG HAS THE FRONT PANEL SZA USED OUR CARD? JMP RSTRT YES, RESET JSB BSYCK BACKPLANE LOCKED? JMP GO YES, NONE OF OUR BUSINESS LIA CDATA GET CARD'S RESPONSE SSA FAILURE? JMP SICK YES, MUST BE POWERFAIL OR WORSE LDB A SAVE INPUT RBL,RBL SCRAMBLE SOME BITS SLB,RSS UNSOLICITED INPUT? JMP GO NO, MUST HAVE BEEN A NO-OP RBL,SLB,RBL YES, INCOMMING FRAGMENT? JMP CONT1 YES RBL,SLB NO, NEW MESSAGE TYPE? JMP CONT2 YES RBL,SLB,BLF NO, OUTPUT BUFFER READY? JMP CONT3 YES LDA FBITS,I NO, STATUS CHANGE, GET FLAGS RBL,RBL RBL,SLB DISCONNECT, TRYING TO RECONNECT? AND LCNB YES, RECORD IT RBL,SLB COMPLETE DISCONNECT? AND XCNB YES, RECORD IT RBL,SLB CONNECT? IOR LCB YES, RECORD CONNECT STA FBITS,I SAVE NEW STATUS JSB CIBCK TELL HIGHER UPS IF NECESSARY JMP CONT4 CONT1 AND B7777 SET STA RDSIZ,I FRAGMENT SIZE LDA FBITS,I RECORD IOR SMB START OF SLB,RSS MESSAGE XOR SMB BIT STA FBITS,I VALUE JMP CONT4 CONT2 RRL 10+TR-TR MOVE TYPE TO PROPER FIELD XOR FMISC,I PUT IT IN AND TRB THE REST OF XOR FMISC,I THE WORD STA FMISC,I SAVE NEW TYPE JMP CONT4 CONT3 AND B77 GET NUMBER OF BUFFERS LDB WBUFS,I GET OLD NUMBER OF BUFFERS STA WBUFS,I SAVE NEW NUMBER OF BUFFERS LDA FBITS,I GET FLAGS IN CASE CPB M1 HAD WE GIVEN UP ON GETTING A BUFFER? JSB CIBCK YES, TELL RE-ROUTING THE GOOD NEWS CONT4 JMP GO START THINGS UP SPC 1 * * SET FLAG TO SEND INDICATION OF LINE UP TO HIGHER UPS * IF THE LINE IS NOW READY FOR DS/1000 TRAFFIC * ON ENTRY A MUST EQUAL FBITS,I * CIBCK NOP AND M4B ISOLATE RC, LC, FW, ND LDB A SAVE THEM LDA WBUFS,I HAVE WE GIVEN UP CPA M1 ON GETTING A BUFFER? CLB YES, THEN WE ARE NOT READY LDA FMISC,I GET THE INFO AND FMNB SAY NO FRONT PANEL MESSAGE CPB LCRCB READY FOR DS/1000 TRAFFIC? IOR CIB YES, SET FLAG STA FMISC,I PUT IT ALL BACK JMP CIBCK,I FIN SPC 1 * * PROCESS DRIVER ENTRY NOT FROM CARD INTERRUPT * PFAIL LDA .3 SAY NO SYSTEM SERVICE STA SRVOK AVAILABLE INIT LDA FBITS,I AND WLRLB BACKPLANE SZA LOCKED? JMP GO YES, NONE OF OUR BUSINESS LDA !UNDS NO, GET DISABLE UNSOLICITED INPUT JSB OTCM$ SEND CANCEL COMMAND LDA FBITS,I INDICATE IOR WLRLB BACKPLANE STA FBITS,I BUSY SPC 1 * * START UP WRITE PROCESS * GO LDA FBITS,I CLEAR AND XTNB TIMEOUT STA FBITS,I REQUEST BITS CCA TELL SUSP TO ACTIVATE READ PROCESS STA ADV WHEN WRITE PROCESS SUSPENDS LDA .2 START UP WITH JMP SUSP3 WRITE (RIGHT) PROCESS SPC 1 * * HANDLE UNEXPECTED TIMEOUT * SICK EQU * LIA CDATA GET WHAT THE CARD HAS TO SAY LDB WPFLA GET POWERFAIL RECOVERY ADDRESS CPA !STGD RECOVERY FROM POWER-FAIL? CLA,RSS YES CPA !STG2 OTHER GOOD STATUS? RSTR1 CLA,RSS YES LDA SEB NO, THE CARD IS SICK SZA IF SICK, MUST USE LDB WSERA SEVERE ERROR RECOVERY ADDRESS IOR FBITS,I BESTOW THE BUSTED BOARD BIT IF SICK AND PWUPB AND SAVE SE, WP, RP, AND RC STA FBITS,I SAVE NEW BITS STB WCONT,I SET WRITE RECOVERY ADDRESS LDA RSERA SET READ STA RCONT,I RECOVERY ADDRESS CLC CDMA1 SUSPEND DMA CLC CDMA3 STOP DMA COLD JMP GO SPC 1 * * RESET CARD AFTER FRONT PANEL HAS USED IT * RSTRT CLA CLEAR 'BEEN IN OTA CFPFG FRONT PANEL' FLAG LDB WFPRA GET FRONT PANEL RECOVERY ADDRESS JMP RSTR1 ENTER RECOVERY CODE SPC 3 BSS 0 FIND HOW MUCH SPACE WE TAKE END