ASMB,Q,R,C HED * DVA66 91750-18107 REV.2013 NAM DVA66 91750-16107 REV.2013 800724 (IV, M) EXT $LIST ENT IA66,CA66 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: DVA66 * SOURCE: 91750-18107 * RELOC: 91750-16107 * PGMR: JOHN LAMPING * * WRITTEN BY JOHN LAMPING [FEBRUARY 1979] * * 21MX 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 ************************************************** * * * SYSTEM SECTION * * * ************************************************** SPC 2 **** **** * *** ENTRY PART: HANDLE DRIVER ENTRY *** * **** **** SPC 1 * * DO CONFIGURATION OF DRIVER * IA66 NOP CLB GET INITIATE FLAG JMP S1A CA66 NOP CCB GET NO INITIATE FLAG S1A STB ENTRY RECORD WHERE WE CAME FROM LDB SCTPT CONFIGURE CARD I/O JSB IOCON INSTRUCTIONS LDA EQT2,I IS A CCB DEFFERRED ENTRY SSA PENDING? STB EQT15,I YES, RESTORE TIMEOUT LDA EQT13,I GET EQT EXTENSION ADDRESS CPA XTBEG ALREADY POINTING THERE? JMP S1A2 YES, BE LAZY LDB MXTLN 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 SCCLF STA SRVOK LDB INTBA FIND INB WHICH STB TEMP1 DCPC LDB EQT1 CHANNEL CPB INTBA,I WE LDA .6 HAVE CPB TEMP1,I IF LDA .7 ANY LDB EQT12,I CHECKING CPB INTBA,I BOTH LDA .6 EQT'S CPB TEMP1,I LDA .7 STA DCHAN RECORD IT LDB DCTPT GET DCPC INSTRUCTIONS POINTER SZA DO WE HAVE DCPC? JSB IOCON YES, CONFIGURE DCPC INSTRUCTIONS * * HANDLE FIRST DRIVER ENTRY * LDA EQT4,I HAVE WE BEEN ON THIS EQT BEFORE ALF,SLA (DRIVER PROCESSES TIMEOUT BIT SET)? JMP S1C YES LDA EQT12,I NO, IS THE EQT EXTENSION ADA MXTLN OF THE RIGHT SIZE? CCE,SZA,RSS JMP S1B YES, PROCEED LDA .3 NO, DO ERROR ISZ CA66 OR CONTIUNE JMP EXIT7 RETURN S1B STA FBITS,I CLEAR ALL FLAGS LDA EQT4,I TELL SYSTEM THAT IOR B30K WE CAN HANDLE STA EQT4,I TIMEOUT AND POWER-FAIL LDA RINIA SET STA RCONT,I PROCESS LDA WINIA RESTART STA WCONT,I ADDRESSES LDB EQT1 PUT IN OUR ADB .15 LINK TO THE STB EQT12,I OTHER EQT ADB .3 SET DRIVER LDA B,I PROCESSES TIMEOUT IOR B30K AND POWERFAIL STA B,I IN OTHER EQT ADB .8 MAKE OTHER LDA EQT1 EQT POINT STA B,I TO US INB MAKE HIM LDA EQT13,I HAVE OUR STA B,I EXTENSION * * DETERMINE TYPE OF ENTRY, HANDLE IT * S1C LDA ENTRY ENTRY THROUGH SZA,RSS IA66? JMP S1C2 YES LDA EQT4,I NO, DID AND MB4K1 TIMEOUT CPA EQT4,I OCCUR JMP S1C1 NO * * HANDLE TIMEOUT * STA EQT4,I YES, CLEAR TIMEOUT FLAG LDA FBITS,I MEDIUM ALF,ALF LENGTH RAL,SLA TIMEOUT? ISZ TGONE+MT-MT YES, FLAG IT CMA,SSA,SLA MEDIUM OR SHORT TIMEOUT? RAR,SLA NO, LONG TIMEOUT CLEAR? JMP INIT YES, HANDLE NORMALLY JMP SICK+ST-ST+LT-LT NO, BAD TROUBLES MB4K1 ABS -4000B-1 MB36 OCT -36 * * HANDLE CONTINUE ENTRY * S1C1 LDA FBITS,I HAS THE LINE BEEN AND BUSYB CONNECTED SZA,RSS OR ARE WE TRYING? JMP EXIT NO, IGNORE INTERRUPT SC101 STF SCODE PUT BACK FLAG JMP CONTN PROCESS THIS INTERRUPT S1C2 LDA EQT5,I WAS INITIATE ENTRY SSA REALLY POWER-FAIL? JMP PFAIL YES, THE CARD WILL INFORM US SPC 1 **** **** * *** COMMAND PART: IDENTIFY AND VERIFY COMMAND *** * **** **** LDA EQT6,I GET REQUEST AND B7703 ISOLATE FUNCTION/SUBFUNCTION CPA .3 CLEAR REQUEST? JMP S2B YES LDB EQT11,I ALREADY DOING A SZB COMMAND ON THIS EQT? JMP S2A14 YES, RTE IS GIVING US DCPC 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 EQT7,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 EQT9,I PARAMETER FOR SECURITY CODE CCE,RSS RIGHT JMP S2A6 WRONG! LDA FMISC,I GET OUR AND LUB LU TIMES 32 ALF,ELA PLUS 1 CPA EQT10,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 EQT6,I YES, ELA,ALF CLASS I/O ERA AND DOUBLE SSA,SLA,RSS BUFFERED? JMP S2A6 NO, ERROR LDA EQT10,I YES, SECOND BUFFER ADA M2 AT LEAST SSA TWO WORDS? JMP S2A6 NO, ERROR CCA YES, ADA EQT10,I POINT TO ADA EQT9,I LAST WORD STA TEMP1 SAVE POINTER LDA FMISC,I GET AND LUB LU XOR TEMP1,I MERGE INTO SLB LAST WORD OF BUFFER 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 EQT11,I INDICATE WHO DOES THIS COMMAND RAL,RAL POSITION FLAG IOR FBITS+WP-WP,I SET COMMAND PENDING FLAG CPA FBITS,I REQUEST ALREADY PENDING? JMP S2A8 YES, REJECT THIS ONE STA FBITS,I SET PENDING FLAG S2A14 LDA EQT11,I INDICATE ONLY COMPLETIONS STA SRVOK ON THIS EQT ARE ALLOWED 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 EQT JSB STAT SET STATUS CCA SET COMPLETION STA SSERV FLAG JMP EXIT GO RESTORE TIMEOUTS .15 DEC 15 B17 EQU .15 B7703 OCT 7703 B777 OCT 777 * * HANDLE CLEAR (ABORT) REQUESTS * S2B LDA FBITS,I GET FLAGS WORD LDB EQT11,I SET PROPER IOR B+WA-WA REQUEST ABORTED BIT CMB REQUEST STB SSERV COMPLETION RBL,RBL CLEAR PROPER AND B+WP-WP REQUEST PENDING BIT STA FBITS,I SAVE NEW FLAGS JMP INIT ENTER MAIN CODE * * 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 EQTST THE CORRECT COMMAND LDB EQT8,I GET LENGTH STB TEMP3 OF FIRST BUFFER LDB EQT7,I GET POINTER STB TEMP2 TO BUFFER LDA EQT6,I GET REQUEST 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 EQT9,I GET OPTIONAL PARAMETER JMP CMDA2 CMDA1 SLA,RSS ARE WE TO IGNORE FIRST BUFFER? JMP CMDA3 NO CLB YES, SET LENGTH STB TEMP3 TO ZERO LDB EQT9,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 EQT10,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 EQT12,I SEE IF INA RTE IS ABOUT LDA A,I TO ENTER US IOR EQT2,I WITH A DEFFERRED SSA,RSS ENTRY JMP EXIT1 NO LDA FBITS,I YES, CLEAR ALL AND XTNB TIMEOUTS STA FBITS,I CCB SAY DON'T SET TIMEOUTS JMP EXIT2 EXIT1 LDA FBITS,I GET TIMEOUT FLAGS CLB RAL,RAL RECONNECT AFTER SLA,ALF POWER FAIL? LDB VLONG+RC-RC YES SET A TIMEOUT RAL,RAL 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 EXIT2 STB TEMP1 SAVE TIMEOUT VALUE LDA SSERV DO WE NEED TO ASK FOR SZA SYSTEM SERVICE? JMP EXIT8 YES LDA SRVOK NO, MAKE SURE THE EQT JSB EQTST IS SET BACK UP IF ENTERED AT I.66 CLA DO CONTINUE RETURN JMP EXIT4 EXIT8 SSA,RSS DO WE ASK FOR DCPC? JMP EXIT3 YES CMA NO, SET UP JSB EQTST RIGHT EQT QUEUE LDB EQT5,I GET STATUS LDA EQT6,I IS REQUEST IOR B100 A WRITE CPA EQT6,I REQUEST? ADB .4 YES, SET NOT READ BIT AND B600 IS REQUEST SZA NON-DS? ADB .8 YES, SET NON-DS BIT STB EQT5,I SET STATUS CLB CLEAR SERVER PROCESS FLAG STB EQT11,I IN EQT LDA .4 GET COMPLETION RETURN CODE JMP EXIT5 GO DO COMPLETION RETURN EXIT3 CPA .8 RETURN DCPC? JMP EXIT9 YES JSB EQTST GET CORRECT EQT LDA .5 ASK FOR DCPC RSS EXIT9 LDA .6 RELEASE DCPC ISZ CA66 DCPC EXIT EXIT4 ISZ CA66 CONTINUE EXIT EXIT5 LDB EQT12,I POINT TO TIMER WORD ADB .14 OF OTHER EQT STB TEMP2 LDB TEMP1 GET TIMEOUT VALUE CMB,SSB,INB,RSS MAKE NEGATIVE JMP EXIT0 NOT SUPPOSSED TO SET TIMEOUT STB TEMP2,I SET TIMEOUT CLB SAY NO TIMEOUT ON STB EQT15,I CURRENT EQT EXIT0 LDB EQT5,I RECORD IF THIS RBR,RBR IS A ERB READ LDB RLEN1,I GET POSSIBLE TRANSMISSION LOG SEZ,RSS WRITE OR SZB,RSS DS 1 READ? LDB EQT8,I YES, USE REQUEST LENGTH EXIT7 ISZ ENTRY GO OUT THE WAY JMP IA66,I WE CAME IN CPA .4 TRANSFORM COMPLETION CLA REQUEST JMP CA66,I .14 DEC 14 SPC 1 * * SET UP EQT SERVED BY PROCESS INDICATED BY A * EQTST NOP SZA DO WE WANT THE CURRENT EQT? CPA EQT11,I OR DO WE HAVE THE RIGHT EQT? JMP EQTST,I YES, NOTHING TO DO LDA EQT12,I SET UP POINTERS LDB M15 TO OTHER EQT STB TEMP2 LDB EQT1A EQTS1 STA B,I INA INB CPB EQ111 LDB EQ12A ISZ TEMP2 JMP EQTS1 JMP EQTST,I WE ARE DONE * M15 DEC -15 EQT1A DEF EQT1 EQ111 DEF EQT11+1 EQ12A DEF EQT12 * * CONFIGURE I/O INSTRUCTIONS * IOCON NOP XOR B,I COMPUTE DIFFERENCE WITH OLD CODE SZA,RSS ARE WE ALREADY CONFIGURED RIGHT? JMP IOCON,I YES, NOTHING TO DO STA TEMP1 NO, SAVE DIFFERENCE IOCO1 LDA B,I GET WORD TO CONFIGURE CPA M1 END OF LIST? JMP IOCON,I YES, DONE XOR TEMP1 NO, SET NEW VALUE STA B,I OF WORD INB MOVE TO NEXT WORD JMP IOCO1 * * SET STATUS OF REQUEST ON ACTIVE PROCESS * STAT NOP ALF SET STATUS IN SZA PROPER ADA .2 FORM STA IOCON 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 EQTST EQT LDA EQT5,I UPDATE AND MB400 STATUS IOR IOCON STA EQT5,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 M10 DEC -10 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$ SC201 LIA SCODE,C FIRST WORD IS LENGTH STA RLEN1,I OF FIRST BUFFER JSB WFLG$ SECOND WORD SC202 LIA SCODE,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 $LIST SCHEDULE R3A3 OCT 701 PROGRAM DEF R3A5 R3A4 DEF QUEUE NAME = QUEUE DEF FNMBR SECURITY CODE SO QUEUE IS HAPPY DEF TEMP1 LU DEF TEMP2 BUFFER DEF TEMP3 LENGTHS DEF TEMP4 MESSAGE TYPE R3A5 SZA SCHEDULED OK? JMP R3A6 NO STB R3A4 YES, MODIFY CALL SO NEXT TIME CLA,INA WE WILL USE STA R3A3 ID SEGMENT POINTER R3A6 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 EQT9,I 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 REQUEST? 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 DCPC 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 CMA,INA WE MUST SKIP ADA TEMP3 FOR A DS 1 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 GET STATUS 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 YES, 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 JSB RDCP$ GET DCPC 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 TELL CARD THAT ADA RDSIZ,I WE WANT TO JSB OTCM$ READ IN THE FRAME LDA RPTRY,I SET DCPC STARTING ADDRESS STA TEMP2 WITH INPUT BIT SET ADA RDSIZ,I UPDATE STA RPTRY,I BUFFER POINTER LDA RDSIZ,I SET DCPC CMA,INA TRANSFER STA TEMP3 LENGTH ADA RLEN2,I SAY HOW MANY WORDS STA RLEN2,I MUST STILL BE READ CLA SAY NO STA RDSIZ,I FRAME READY JSB DCPC$ START UP DCPC * * WAIT FOR TRANSFER TO FINISH, HANDLE EXCEPTIONS * R4E JSB WTRN$ WAIT FOR TERMINATION 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 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 JSB UNLK$ RELEASE DCPC IF WE HAVE SOME 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 COMMING LDA EQT14,I GET OUR TIMEOUT VALUE CMA,INA AS A POSITIVE QUANTITY SC301 OTA SCODE,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 M60 DEC -60 * * SEND OUTPUT TRANSFER COMMAND * W2D JSB RDCP$ GET DCPC 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 JSB OTCM$ SEND COMMAND * * START UP DCPC * W2E 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 WFLG$ JSB CMDAT SEND LENGTH JSB WTRN$ COMMAND ABORTED LDA TEMP3 OF FIRST SC303 OTA SCODE,C BUFFER JSB WFLG$ JSB CMDAT SEND LENGTH JSB WTRN$ COMMAND ABORTED LDA TEMP4 OF SECOND SC304 OTA SCODE,C BUFFER LDA WFSIZ,I MAX DCPC TRANSFER NOW ADA M2 IS TWO LESS THAN JMP W2E2 MAX FRAME SIZE W2E1 LDA WFSIZ,I GET MAX DCPC 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 DCPC STB TEMP2 STARTING ADDRESS ADB A ADJUST BUFFER STB WPTR,I POINTER CMA,INA SET DCPC STA TEMP3 WORD COUNT ADA WLEN,I UPDATE NUMBER OF WORDS STA WLEN,I THAT MUST BE TRANSFERRED JSB DCPC$ START DCPC * * WAIT FOR DCPC TO FINISH OR ABORT, HANDLE IT * W2F JSB WTRN$ WAIT FOR DCPC TO FINISH JMP W2B DO NEXT FRAME 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 EQT12,I IS THIS CMB,INB THE ADB EQT12 FIRST SSB,RSS EQT? 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 M3NB ABS -RC-ND-100000B+FW-FW-1 * * 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 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 FLAG LINE UP FOR DS 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 IS INA ONE IOR !SIDT TELL CARD JSB OTCM$ ABOUT TYPE JSB WCOM$ OF DATA JSB RDCP$ GET DCPC JSB CMDAT GET BACK INFO JMP W3G COMMAND ABORTED, BACK OFF LDA TEMP3 GET BUFFER LENGTH LDB TEMP1 INPUT CMB,CCE,SLB OR OUTPUT RAL,ERA TRANSFER JSB OTCM$ TELL CARD LDA TEMP3 SET LENGTH CMA,INA NEGATIVE STA TEMP3 FOR DCPC LDA TEMP2 SET ADDRESS CCE,SLB,RSS WITH RAL,ERA DIRECTION STA TEMP2 BIT JSB DCPC$ START DCPC 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 AND .7 EXCEPT DCPC RETURN 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 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 LDB DCHAN DO WE HAVE A SZB,RSS DCPC CHANNEL? JMP UNLK$,I NO, DONE ADB M6 YES, CLEAR ADB INTBA THE CLA ALLOCATION STA B,I WORD STA DCHAN SAY DCPC NOT AVAILABLE LDA SSERV REMEMBER IOR SRVOK LDB .8 TO TELL SZA,RSS SYSTEM STB SSERV ABOUT CHANNEL JMP UNLK$,I M6 DEC -6 SPC 1 * * REQUEST DCPC * RDCP$ NOP LDA ACTIV HAS THE AND FBITS+WA-WA,I CURRENT REQUEST SZA BEEN ABORTED? JMP RDCP$,I YES, PRETEND WE GOT DCPC LDA DCHAN DO WE HAVE SZA DCPC? JMP RDCP$,I YES, NO WORK LDA ACTIV HAVE WE JSB EQTST ALREADY LDA EQT5,I ASKED FOR RAL A DCPC SSA,SLA CHANNEL? JMP RDCP1 YES, WAIT LDB ACTIV NO, GET WHO WE WANT LDA SSERV SYSTEM SERVICE IOR SRVOK NOT ALLOWED SZA,RSS OR ALREADY NEEDED? STB SSERV NO, ASK FOR DCPC SZA ISZ RENTR YES, ASK TO TRY AGAIN RDCP1 ISZ SCCLF TELL SUSP TO CLEAR FLAG ON CARD SC404 STF SCODE BUT SET IT IN CASE LDB RDCP$ SUSPEND THIS JMP SUSPB PROCESS SPC 1 * * WAIT FOR DCPC TRANSFER TO FINISH OR BE ABORTED * IF ABORTED, STOP DCPC, 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 DC409 SFS DCPCH DCPC FINISH? JMP SUSPB NO, WAIT SC413 SFS SCODE YES, CARD FINISH? JMP SUSPB NO, WAIT JMP WTRN$,I YES WTRN1 EQU * LDA !ABDM GET ABORT DMA COMMAND SC407 OTA SCODE,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 EQU * SC408 STC SCODE,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 SC401 OTA SCODE SEND THE COMMAND SC402 STC SCODE,C TELL THE CARD IT IS A COMMAND JMP OTCM$,I SPC 1 * * SET UP AND START DCPC * DCPC$ NOP LDA ACTIV HAS THE AND FBITS+WA-WA,I CURRENT REQUEST SZA BEEN ABORTED? JMP DCPC$,I YES, PRETEND WE ARE DONE LDA DCPCC SET DC401 OTA DCPCH CONTROL WORD DC402 CLC DCPCL SET LDA TEMP2 MEMORY DC403 OTA DCPCL ADDRESS DC404 STC DCPCL SET LDA TEMP3 WORD DC405 OTA DCPCL COUNT DC406 STC DCPCH,C START DCPC DC407 CLC DCPCH PREVENT INTERRUPTS JMP DCPC$,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 SC405 LIA SCODE 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 SC403 SFS SCODE 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 SC409 CLF SCODE ALLOW ANOTHER INTERRUPT SC410 LIA SCODE GET CARD'S RESPONSE SSA POWER FAIL? JMP SICK YES, GET HIM BACK ON HIS FEET SZA AN ACKNOWLEDGEMENT? 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 SCCLF NEED TO CLEAR FLAG CMA,SLA,RSS ON CARD? LDA RENTR MAYBE, DO WE WANT SZA,RSS RE-ENTRY SC411 CLF SCODE NO, CLEAR FLAG 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 LDB SCCLF LONG TIMEOUT SZB,RSS UNLESS WAITING STA FBITS,I FOR DCPC JMP EXIT SPC 1 * * PROCESS DRIVER ENTRY FROM CARD INTERRUPT * CONTN JSB BSYCK BACKPLANE LOCKED? JMP GO YES, NONE OF OUR BUSINESS SC406 LIA SCODE 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 SEE IF WE MUST FLAG CONNECT 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 * SC412 LIA SCODE 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? 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 RECOVERY LDA RSERA RESTART STA RCONT,I ADDRESSES LDA DCHAN STOP DCPC SZA IF WE HAVE DC410 STF DCPCH A CHANNEL JMP GO SKP ************************************************** * * * TEMPORARIES AND CONSTANTS * * * ************************************************** SPC 2 * * EQT 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 MXTLN ABS XTBEG-* 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 SCCLF BSS 1 ONE SAYS DO CLF TO CARD ON EXIT DCHAN BSS 1 DCPC CHANNEL ASSIGNED TO DRIVER, IF ANY RENTR BSS 1 NON-ZERO SAYS DRIVER REENTRY REQUESTED TEMP1 BSS 1 FOUR WORD TEMPORARY AREA FOR ACTIVE TEMP2 BSS 1 PROCESS, USED FOR DCPC CONFIGURATION TEMP3 BSS 1 AMONG OTHER THINGS TEMP4 BSS 1 SPC 1 * * DRIVER CONFIGURATION VARIABLES * SCCON ABS SCODE SELECT CODE FOR WHICH DRIVER IS CONFIGURED DCCON ABS DCPCH DCPC CHANNEL FOR WHICH DRIVER IS CONFIGURED SPC 1 * * SYSTEM BASE PAGE EQUIVALENCES * INTBA EQU 1654B EQT1 EQU 1660B EQT2 EQU EQT1+1 EQT3 EQU EQT2+1 EQT4 EQU EQT3+1 EQT5 EQU EQT4+1 EQT6 EQU EQT5+1 EQT7 EQU EQT6+1 EQT8 EQU EQT7+1 EQT9 EQU EQT8+1 EQT10 EQU EQT9+1 EQT11 EQU EQT10+1 EQT12 EQU 1771B EQT13 EQU EQT12+1 EQT14 EQU EQT13+1 EQT15 EQU EQT14+1 SPC 1 * * FBITS BIT EQUIVALENCES * FW EQU 000000B WAIT FOR READ FOR FRONT PANEL MESSAGES * SHOULD BE 100000B 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 SCODE EQU 0 DCPCL EQU 2 DCPCH EQU 6 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 DEF 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 .50 DEC 50 B77 OCT 77 B100 OCT 100 B377 OCT 377 B400 OCT 400 B600 OCT 600 B1000 OCT 1000 B4000 OCT 4000 B7777 OCT 7777 B10K OCT 10000 B30K OCT 30000 B40K OCT 40000 BIT15 OCT 100000 MB1K1 ABS -1000B-1 MB400 OCT -400 M20 DEC -20 M5 DEC -5 M3 DEC -3 M2 DEC -2 M1 DEC -1 SPC 1 * * I/O CHANNEL RECONFIGURATION TABLE * SCTPT DEF *+1,I DEF SCCON DEF SC101 DEF SC201 DEF SC202 DEF SC301 DEF SC303 DEF SC304 DEF SC401 DEF SC402 DEF SC403 DEF SC404 DEF SC405 DEF SC406 DEF SC407 DEF SC408 DEF SC409 DEF SC410 DEF SC411 DEF SC412 DEF SC413 DEF M1 SPC 1 * * DCPC CHANNEL RECONFIGURATION TABLE * DCTPT DEF *+1,I DEF DCCON DEF DC401 DEF DC402 DEF DC403 DEF DC404 DEF DC405 DEF DC406 DEF DC407 DEF DC409 DEF DC410 DEF M1 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 * DCPCC EQU SCCON DCPC CONTROL WORD * !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 43001 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 VLONG DEC 3000 30 SECOND TIMEOUT RRLIM DEC -20 READ RETRY LIMIT FNMBR DEC 29150 SECURITY CODE FOR QUEUE RINIA DEF RINI WINIA DEF WINI RSERA DEF RSER WSERA DEF WSER WPFLA DEF WPFL 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 EQU B10K+AC-AC NDB EQU B4000+ND-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 WANB EQU M3+WA-WA SPC 3 BSS 0 FIND HOW MUCH SPACE WE TAKE END