ASMB,R,L,C,F HED %TAM 91704-16108 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM %TAM,7 91704-16108 REV A 760309 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. 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 SPC 1 ***************************************** * *%TAM TERMINAL ACCESS MONITOR FOR RTE-B * *SOURCE PART # 91704-18108 REV A * *REL PART # 91704-16108 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 8-22-74 * *MODIFIED BY: JEAN-PIERRE BAUDOUIN * *DATE MODIFIED: MAR 1976 * ***************************************** SUP SPC 2 * SUBROUTINE TO DO ALL REMOTE COMMUNICATION * ALL CALLS STARTING AT THE REMOTE TERMINAL WILL * GO THRU HERE. * CALLING SEQUENCE * JSB %TAM * DEF REPLY BUFFER ADDRESS * DEF PRM ADDRESS * A REG=0REQ ONLY, NOT 0 REQ AND DATA * E REG=READ/WRITE FLAG * SPC 3 * DEFINE ENTRY POINTS SPC 2 ENT %TAM,STCK,RWAIT SPC 2 * DEFINE EXTERNALS EXT REPLA,INDCK,FRPLY EXT CLU,M7,M1,EXEC,B377 EXT B200,WAIT EXT CLINE,DBSY EXT $TIME,#TIME SPC 2 * DEFINE A AND B REG SPC 1 A EQU 0 B EQU 1 SKP * * HERE IS WHERE WE START * %TAM NOP STA SAVEA A CONTAINS A PARAMETER!!!! SAVE IT LDA CLU AND B77 STA CNWD LDA SAVEA RESTORE THE PARAMETER CLB,INB SET FOR READ SEZ WRITE? INB YES STB DIRCT SAVE DIRECTION FLAG STA B GET REQ/DATA FLAF IN B REG LDA %TAM,I GET REPLY ADDRESS JSB INDCK INDIRECT IT STA REPLA SAVE REPLY ADDRESS FOR REPLY LDA M7 GET RETRY COUNT STA RTRYC SAVE IN DOWN COUNTER CLA STA FRPLY CLEAR OUT WAIT FLAG ISZ %TAM GET TO PRAM ADDRESS LDA %TAM,I GET ADDRESS OF PRAMS ISZ %TAM SET FOR RETURN JSB INDCK INDIRECT IT SZB SEND REQ AND DATA? JMP %TAM2 YES LDB A,I GET REQ ADDRESS STB REQA SAVE BUFFER ADDRESS LDA DIRCT GET DIRECTION IOR BIT15 SET THE NO ABORT BIT STA IRW LDA REQA,I GET WORD 1 OF BUFFER IOR BIT11 SET FRIENDLY BIT STA REQA,I LDA REQA GET PARMB ADDRESS ADA D33 STEP TO TIME TAGS LDB $TIME GET 1ST WORD STB A,I SET IN PARMB STB #TIME SAVE FOR RETURN TEST INA LDB $TIME+1 SAME FOR 2ND WORD STB A,I STB #TIME+1 RQRTY ISZ RTRYC MAX NUMBER OF RETRYS? JMP *+3 NO LDA STWRD GET STATUS WORD JMP %TAM,I RETURN * * MAKE EXEC CALL SEND REQUEST * LDA DBSY WAIT TILL EVERYBODY DONE SZA JMP *-2 JSB EXEC DEF *+5 DEF IRW DEF CNWD REQA NOP REQL DEF D35 JMP RQRTY LINE ERROR JSB STCK DO STATUS CHECKING JMP STCK1 NO ERRORS..WAIT FOR RESPONSE JMP RQRTY ERROR RETRY JMP %TAM,I TERMINATE...TIME OUT OR STOP SPC 3 * * HERE FOR SEND REQ AND DATA * %TAM2 LDB A,I STB DTAD SAVE DATA ADDRESS INA STA DTL SAVE DATA LENGTH INA LDB A,I STB REQDA REQUEST ADDRESS ADB D33 STEP TO TIME TAGS LDA $TIME GET 1ST TIME WORD STA B,I SET IN PARMB STA #TIME SAVE FOR REPLY TEST INB SAME FOR 2ND WORD LDA $TIME+1 STA B,I STA #TIME+1 LDA REQDA,I GET 1ST WORD OF REQUEST IOR BIT11 SET FRIENDLY BIT STA REQDA,I * LDA DIRCT GET DIRECTION OF DATA LDB B200 CPA D1 DATA READ LDB B100 LDA CLU GET THE LU AND B77 CLEAN IT IOR B SET THE PROPER CONTROL STA CNWD SET CONTROL RDRTY ISZ RTRYC MAX NUMBER OF RETRYS? JMP *+3 NO....CONTINUE LDA STWRD GET STATUS WORD JMP %TAM,I RETURN...WITH ERROR * * MAKE EXEC CALL...REQ AND DATA * LDA DBSY WAIT FOR LINE CLEAR SZA JMP *-2 JSB EXEC DEF *+7 DEF D2I REQ & DATA DEF CNWD REQDA NOP DEF D35 DEF DTAD DTL NOP JMP RDRTY ERROR RETURN JSB STCK CHECK STATUS JMP STCK1 ALL OK JMP RDRTY ERROR...RETRY CPA B10 TIME OUT OR STOP? JMP %TAM,I TIME OUT...GET OUT JMP STCK1 STOP RECIEVED SPC 2 * * HERE WE WAIT FOR REPLY * STCK1 JSB RWAIT GO WAIT FOR RESPONSE DST SABRG SAVE THE REGISTERS LDA REPLA,I GET W0 OF THE PARMB AND BIT13 GET BUZY BIT SZA,RSS SET ? JMP NBZY NO, OK CLB WE WAIT ISZ B SOME TIME JMP *-1 BEFORE RETRYING ISZ B WAIT SOME MORE JMP *-1 LDA REPLA,I GET W0 AGAIN AND NBT13 MASK OFF THE BUSY BIT STA REPLA,I REPLACE JMP RQRTY GO RETRY * NBZY DLD SABRG RESTORE THE REGISTERS JMP %TAM,I RETURN SKP * * SUBROUTINE TO CHECK STATUS OF CALL * CALLING SEQUENCE * JSB STCK * JMP ALL OK * JMP RETRY * JMP STOP RETURN * A REG CONTAINS STATUS WORD * B REG CONTAINS THE LENGTH * RTRYC MUST BE SET BEFORE CALLED * IF MAX NUMBER OF RETRYS FAILS WILL ABORT BASIC * STCK NOP AND B377 MASK ALL BUT STATUS SLA ALL OK? JMP STCK,I YES...RETURN ISZ STCK NO...SET FOR RETRY STA STWRD SAVE STATUS WORD SPC 2 * CHECK INDIVIDUAL STATUS BITS FOR ERROR SPC 1 RAR,SLA,RAR CHECK FOR DRIVER BUSY JMP STCK3 BUSY...GO WAIT TRY AGAIN RAR,SLA TIMEOUT? JMP STCK6 YES...TREAT AS STOP...CLEAR LINE RAR,SLA CHECK FOR STOP OR OUT OF SYNC JMP STCK5 GO CHECK RAR,SLA ILLEGAL LENGTH JMP OUT SHOULD NEVER GET HERE.CLEAR LINE-ERR=-51 RAR,SLA PARITY ERROR? JMP STCK3 YES...WAIT AND RETYR RAR,SLA LINE DOWN? RSS YES...TRY "UPING" THE LINE JMP OUT SHOULD NEVER GET HERE.CLEAR LINE-ERR=-51 LDB MD2 STB CNTR2 STCK2 JSB CLINE GO CLEAR THE LINE SLA ALL OK? JMP STCK,I YES...RETRY ISZ CNTR2 RSS JMP OUT+1 * * IF WE ARE UNABLE TO CLEAR LINE * TELL WORLD, WAIT 144 MS * AND TRY CLEARING THE LINE AGAIN. * STAY HERE UNTIL THE LINE CAN BE CLEARED... * LDB B200 WAIT 144 MS AND TRY AGAIN JSB WAIT JMP STCK2 TRY AGAIN SPC 2 STCK3 CLB SET TO WAIT AWHILE INB,SZB JMP *-1 LDA STWRD GET STATUS JMP STCK,I RETURN...RETRY SPC 2 STCK5 CPB M1 LEGAL STOP? JMP STCK7 YES...TERMINATE AND TELL THEM JMP STCK3 NO...WAIT AWHILE AND RETRY SPC 2 STCK6 JSB CLINE TIMEOUT, CLEAR LINE STCK7 LDA STWRD GET STATUS WORD ISZ STCK AND RETURN LIKE A STOP JMP STCK,I AND RETURN SKP * * SUBROUTINE TO WAIT FOR COMPLETION * * CALLING SEQUENCE * JSB RWAIT * JMP RECEIVED VALUE * * THIS ROUTINE IS GOING TO TEST A REPLY FLAG. * IT HAS A TIME OUT SET UP SO THAT IT WILL WAIT * FOR THE REPLY A MAXIMUM OF 10 TIMES THE LINE * TIME OUT. * * RWAIT NOP JSB SEARC SEARCH THE EQT TABLE FOR DVR65 CLA GET A NOP STA *-2 THE SEARCH IS NEEDED ONLY ONCE LDB EQENT GET ADDRESS OF EQT ENTRY ADB D13 STEP TO THE TIME OUT WORD LDA B,I GET IT ADA MD1 STA TIMUT SAVE LOOK LDA FRPLY DID THE REPLY ARRIVE ? SZA,RSS JMP WASTE NO, GO WASTE SOME TIME (100MS) DST SABRG SAVE THE REGISTERS CLB YES, CLEAN THE REPLY FLAG STB FRPLY LDA REPLA GET REPLY ADDRESS ADA D33 STEP TO TIME TAGS DLD A,I GET THEM CPA #TIME IS THIS THE RIGHT REPLY ? RSS JMP NOGD NO, IGNORE IT CPB #TIME+1 RSS YES JMP NOGD MISMATCH, IGNORE THIS REPLY DLD SABRG FIRST RESTORE THE REGISTERS JMP RWAIT,I NOW RETURN * WASTE ISZ TIMUT DID WE TIME OUT ? RSS NO JMP OUT YES LDA LENGT STA CNTR ISZ CNTR JMP *-1 JMP LOOK WE SPENT 100 MS HERE, THAT'S ENOUGH * OUT JSB CLINE CLEAR THE LINE LDA MD51 GET A STATUS BACK TO THE CALLER JMP RWAIT,I RETURN SPC 3 * * WE COME HERE IF A REPLY ARRIVES WITH THE WRONG * TIME TAGS. IF DATA IS PENDING (PTOP) WE SEND A * STOP TO CANCEL IT. * NOGD LDB EQENT GET ADDRESS OF EQT ENTRY ADB D11 STEP TO WORD 12 LDA B,I GET WORD 12 AND B1773 MASK OUT THE DP BIT (BIT 8) SZA,RSS DATA PENDING ? JMP LOOK NO, WAIT FOR NEXT REPLY LDA CLU YES, GET PREPARED FOR A SEND STOP AND B77 STA CNWD JSB EXEC SEND A STOP DEF *+3 DEF D3 CONTROL REQUEST DEF CNWD STOP ON COM. LINE. * JMP LOOK GO WAIT FOR NEXT REPLY SPC 3 * * THIS ROUTINE WILL SEARCH THE EQT TABLE FOR THE * ENTRY OF THE COMM LINE. * THE ADDRESS OF THE 1ST WORD OF THE ENTRY IS STORED * IN EQENT. * SEARC NOP LDA B1651,I GET # OF EQT ENTRIES CMA,INA NEGATE STA EQT# AND SAVE AS A COUNTER LDB B1650,I GET @ OF 1ST EQT ENTRY ADB D4 STEP TO WORD 5 OF 1ST ENTRY * LOOP1 LDA B,I GET A WORD 5 ALF,ALF RIGHT JUSTIFY THE TYPE AND B77 ISOLATE THE EQT TYPE CPA B65 IS IT THE COMM.LINE JMP FOUND YES (DVR65) ADB D15 STEP TO NEXT ENTRY ISZ EQT# INCREMENT COUNT JMP LOOP1 HLT 2 IF WE COME HERE, IT MEANS THAT THERE IS NO * NO COMM LINE. WE ARE IN TROUBLE. * FOUND ADB DM4 STEP BACK TO WORD 1 STB EQENT JMP SEARC,I RETURN SPC 3 SKP * * DEFINE STORAGE LOCATIONS * DIRCT NOP RTRYC NOP B10 OCT 10 STWRD NOP CNTR NOP CNTR2 NOP LENGT DEC -10000 MD1 DEC -1 MD2 DEC -2 TIMUT NOP D13 DEC 13 EQT# NOP B65 OCT 65 D15 DEC 15 D4 DEC 4 B1650 OCT 1650 B1651 OCT 1651 MD51 DEC -51 D2I OCT 100002 DTAD NOP B77 OCT 77 B100 OCT 100 CNWD NOP IRW NOP BIT11 OCT 4000 D1 DEC 1 D35 DEC 35 D33 DEC 33 SABRG BSS 2 BIT13 OCT 20000 BIT15 OCT 100000 NBT13 OCT 15777 SAVEA NOP EQENT NOP B1773 OCT 177377 D11 DEC 11 D3 DEC 3 DM4 DEC -4 * END