ASMB,R,L,C HED #TAM 91703-16104 * (C) HEWLETT PACKARD CO. 1976 NAM #TAM 91703-16104 REV A 760329 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 BCS TO RUN IN RTEII * *SOURCE PART # 91703-18104 * *REL PART # 91703-16104 * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 09-30-74 * *MODIFIED BY: BOB SHATZER (04-07-75) * DAN GIBBONS (01-08-76) * ************************************************** SPC 1 * * THIS SUBROUTINE INTERFACES A BCS USER TO THE * D.65 COMMUNICATIONS DRIVER. * ENT #TAM,$C.LU,TMOUT,INT65 * EXT .IOC.,XEQT * * DURING GENERATION, THE USER MUST SPECIFY THE DATA RATE OF HIS * PARTICULAR COMMUNICATIONS LINE IN ORDER FOR THE I/O TIMEOUT * VALUES TO BE SET UP PROPERLY. THIS IS DONE BY DESIGNATING A * DIFFERENT UNIT NUMBER FOR EACH DATA RATE, AS FOLLOWS: * * UNIT # DATA RATE I/O CARD * * 0 1 MEG 12665 * 1 150 12773 * 2 300 12773 * 3 600 12773 * 4 1200 12773 * 5 2400 12773 * 6 4800 12773 * 7 9600 12773 * * IF THE USER'S MODEM RATE IS NOT AS SPECIFIED, THE NEXT SLOWEST * RATE SHOULD BE USED. * * THE SETUP IS DONE BY AN INITIALIZATION CALL TO #TAM, AS SHOWN * BELOW. THIS CALL MUST BE MADE PRIOR TO THE FIRST USAGE OF THE * COMM LINK BY THE SATELLITE OR CENTRAL. IF D.65 IS NOT CONFIGURED * INTO THE SYSTEM, #TAM WILL HALT AT THE END OF THE INITIALIZATION * ATTEMPT (HLT 13B). #TAM IS INITIALIZED UPON ITS FIRST ENTRY,SO * THE INITIALIZATION CALL NEED NOT BE MADE PRIOR TO A CALL TO #TAM. * * ON RETURN TO THE CALLER IF COMPLETED IMMEDIATELY, THE A * REGISTER CONTAINS THE STATUS CODE AND THE B * REGISTER WILL POINT TO THE BUFFER. * * STATUS CODES: * * -3 COMMUNICATIONS I/O ERROR. * -1 REQUEST COMPLETED, NO ERRORS. * 0 REQUEST BEING PROCESSED. * 1 ILLEGAL TAM REQUEST CODE. * 2 COMMUNICATIONS LINE DOWN OR XMSN ERROR. * 3 NOT ENOUGH PARAMS IN TAM CALL. * 4 ILLEGAL REQUEST LENGTH RECEIVED * 5 RFA BUSY (REQUEST OVERFLOW AT REMOTE). * * FOR ERROR STATUS BITS SET IN EQT: * * 61 - BIT 2 LENGTH ERROR . * 62 - BIT 3 ILLEGAL STOP SENT..HAVE RETRIED * 63 - BIT 4 SIMULTANEOUS REQUEST. * * (60-63 DECIMAL = 74-77 OCTAL) * * CALLING * SEQUENCES: * A-REG. = 1 FOR SEND/RECV "REQUEST". * = 0 FOR SEND/RECV "DATA". * * PUT DATA STREAM: * * JSB #TAM * DEF *+4 * DEC 6 * DEF DATA BUFFER * DEC BUFFER LENGTH (NEGATIVE BYTES) * * * GET DATA STREAM: * * JSB #TAM * DEF *+4 * DEC 5 * DEF DATA BUFFER * DEC BUFFER LENGTH (NEGATIVE BYTES) * * * EXTENDED PUT, CONVERSATIONAL - * * TRANSMIT REQUEST AND RECEIVE OR TRANSMIT DATA * (SPECIAL INTERFACE TO D.65 FOR REMOTE CALLS * THAT INVOLVE A DATA BUFFER): * * (A) = 0 FOR RECEIVE DATA * (A) = 1 FOR TRANSMIT DATA * * JSB #TAM * DEF *+6 * DEC 8 * DEF REQUEST BUFFER ADDRESS * DEC REQ. BUFFER LENGTH (NEG. BYTES) * DEF DATA BUFFER ADDRESS * DEC DATA BUFFER LENGTH (NEGATIVE BYTES) * * * TRANSMIT STOP REPLY: * * JSB #TAM * DEF *+2 * DEC 2 * * * INITIALIZE: * * JSB #TAM * DEF *+2 * OCT 0 * * REGISTERS ARE MEANINGLESS UPON ENTRY AND EXIT FROM THIS CALL. * * NOTE THAT THIS CALL MUST BE MADE PRIOR TO USAGE OF THE COM- * MUNICATIONS LINK BY EITHER THE SATELLITE OR CENTRAL. * * #TAM NOP INA STA IMODE SAVE REQUEST/DATA CODE. * THERE JSB $INIT GO AND INITIALIZE I/O LDA D0 GET A NOP STA THERE AND OVERLAY INITIALIZATION CALL * LDA #TAM LDB A,I SAVE RETURN ADDRESS. STB RETRN INA LDB A,I (B) = REQUEST CODE STB RCODE INA STA PARAD ADDR OF PARAMETER LIST * CMA,INA ADA RETRN (A) = NUMBER OF PARAMETERS STA N.PRM * CPB D0 INITIALIZE? JMP RETRN,I YES - RETURN, SINCE IT'S BEEN DONE CPB D2 STOP REPLY? JMP STOP YES, TAKE SHORTCUT. LDA PARAD FETCH BUFFER ADDRESS. JSB INDCK STA TRA1 PLACE INTO IOC CALL. STA RTNB PSEUDO STMID ADDR. ISZ PARAD LDA PARAD,I FETCH BUFFER LENGTH. CMA,INA CONVERT TO WORDS SLA INA RAR STA TRA2 * LDA N.PRM LDB RCODE IS THIS A GET OR A PUT? CPB D5 JMP RECV GET DATA STREAM. CPB D6 JMP SEND PUT DATA STREAM. CPB D8 JMP CNVER PUT, CONVERSATIONAL * CLA,INA ILLEGAL REQUEST CODE. JMP ERRXT ERR3 LDA D3 NOT ENOUGH PARAMETERS SUPPLIED. JMP ERRXT SPC 3 $INIT NOP LDA B7 CONFIGURE IOC CALL. STA $C.LU INITIALIZE LU COUNTER. LDB XEQT GET ADDRESS OF EQT TABLE LDA B,I FETCH # EQT ENTRIES. CMA,INA STA CNTR ADB D2 FETCH FWA FIRST EQT,WORD 2. CNF1 LDA B,I AND EQTM MASK ALL BUT EQT TYPE CPA D65C IS IT D.65? JMP CNF2 YES. ADB D4 NO, LOOK AT NEXT EQT. ISZ $C.LU BUMP LU COUNTER. ISZ CNTR JMP CNF1 HLT 13B NO D.65 EQT. JMP *-1 * CNF2 ADB MD1 GET TO EQT WORD1 LDA B,I ALF,ALF RAL,RAL AND B7 ISOLATE UNIT NUMBER ADA TMTBL ADD TO TIMEOUT TABLE ADDRESS LDA A,I GET T/O VALUE FROM TABLE STA TMOUT AND SET UP TIMEOUT VALUE * LDA SCNWD SET LU IN STATUS CALL. AND MSK IOR $C.LU STA SCNWD LDA STOPC SET LU IN STOP CALL. AND MSK IOR $C.LU STA STOPC LDA $C.LU SET LU IN CLEAR I/O CALL. STA CLCNW JMP $INIT,I RETURN * * THE FOLLOWING IS A TABLE OF TIMEOUT VALUES FOR EACH COMM LINK * DATA RATE. THE VALUES ARE -2(N+1) WHERE N IS THE NUMBER OF * THREE SECOND INTERVALS REQUIRED TO HANDLE A 512 WORD REQUEST * AND DATA CALL OVER 2000 MILES OF COMMUNICATIONS LINE. THIS * TABLE IS INDEXED BY THE UNIT NUMBER SPECIFIED IN THE D.65 * EQT AT GENERATION TIME. * TMTBL DEF *+1 DEC -3 12665 CARD (1 MEGABIT) DEC -106 12773 CARD (150 BPS) DEC -61 300 BPS DEC -38 600 BPS DEC -27 1200 BPS DEC -21 2400 BPS DEC -19 4800 BPS DEC -17 9600 BPS * SPC 5 CNVER CPA D4 CHECK PARAM COUNT. RSS JMP ERR3 NOT ENOUGH PARAMS. * LDA TRA1 STA TRAA LDA TRA2 STA TRAB * ISZ PARAD GET DATA BUFFER ADDR. LDA PARAD JSB INDCK STA TRA3 * ISZ PARAD LDA PARAD,I FETCH DATA BUFFER LENGTH CMA,INA CONVERT TO WORDS. SLA INA RAR STA TRA4 LDA TRA STA TRA1 LDA D4 STA TRA2 * LDA IMODE LDB SRAD SEND REQUEST AND DATA COMMAND JMP DIO GO PROCESS REQUEST AND DATA SPC 5 SEND CPA D2 CHECK PARAM COUNT. RSS JMP ERR3 NOT ENOUGH PARAMETERS. * LDA D2 GET MODE WORD LDB DATA GET FOR DATA TRANSFER CPA IMODE IS IT A DATA REQUEST LDB REQ NO...READ REQUEST JMP DIO GO DO IT SPC 5 RECV CPA D2 CHECK PARAM COUNT. RSS JMP ERR3 NOT ENOUGH PARAMS. * LDB REQ GET REQUEST CONTROL WORD LDA B1 GET RECEIVE FLAG...DATA FLAG CPA IMODE DATA OR REQUEST? LDB DATA DATA JMP DIO SPC 3 STOP CLA STA CONWD SET CONWD=0...FAKE READ FOR WAIT INTERVAL JSB .IOC. SEND STOP REPLY. STOPC OCT 30400 JMP *-2 JMP DIO1 SPC 3 * * DIO...A REG CONTAINS READ WRITE FLAG * 1=READ 2=WRITE * B REG CONTAINS SUBMODE * 100=REQ AND DATA 200=DATA 300=REQ * DIO ALF,ALF GET READ WRITE FLAG TO BIT 12 ALF IOR $C.LU MASK IN LU IOR B MASK IN SUBMODE STA CONWD SAVE CONTROL WORD LDA MD10 MAX OF 10 RETRYS ON PARITY OR SIMULTANEOUS REQ. STA PARCT SAVE IN DOWN COUNTER * DIO0 JSB GOIOC PERFORM D.65 IOC CALL. DIO1 LDB TMOUT GET TIMEOUT VALUE STB DELAY SAVE IN DOWN COUNTER CLA STA DEL JSB STATS WAIT FOR COMPLETION. JSB SETER SET TAM ERROR CODE. JMP DIO0 RE-TRY SPC 3 ERRXT BSS 0 LDB RTNB (B) = ADDR OF STMID. JMP RETRN,I SPC 3 GOIOC NOP JSB .IOC. RECEIVE OR TRANSMIT CONWD OCT 0 DATA OR REQUEST. JMP *-2 TRA1 NOP TRA2 NOP JMP GOIOC,I * STATS NOP JSB .IOC. STATUS CALL. SCNWD OCT 40000 SSA,RSS JMP SCN * ISZ DEL COUNT TIME. JMP STATS+1 ISZ DELAY JMP STATS+1 * JSB .IOC. TIME OUT...CLEAR I-O CLCNW OCT 0 LDA B200 FORCE "LINE DOWN " ERROR" * SCN ALF,ALF BIT 6 (NO REQ RECV) SET? RAL SSA JMP GOIOC+1 YES, REPEAT READ CALL. ALF,ALF NO. RAR * JMP STATS,I * SETER NOP (A) = EQT STATUS. AND B377 MASK OFF ALL BUT STATUS CPA D8 SEE IF STOP SENT INB,SZB IF SO,WAS LENGTH=-1 RSS NO..NO STOP, OR LENGTH NOT -1 CLA,INA YES,LEGAL STOP. TREAT SAME AS NO ERRORS SLA BIT 0 LDB MD1 NO ERRORS REQUEST COMPLETED RAR,SLA BIT 1 LDB D4 REQ NOT ACCEPTED...LENGTH ERROR RAR,SLA BIT 2 LDB B75 NO DATA...DATA CALL WITHOUT REQ RAR,SLA BIT 3 LDB B76 ILLEGAL STOP SENT. REPORT AFTER RETRY RAR,SLA BIT 4 LDB B77 SIMULTANEOUS REQUEST. RAR,SLA BIT 5 LDB MD3 PARITY ERROR. RAR,SLA BIT 6 LDB B74 NO REQUEST RECEIVED. RAR,SLA BIT 7 LDB D2 BROKEN LINE CPB B76 ILLEGAL STOP? RSS YES...RETRY CPB B77 SIMULTANEOUS REQUEST? RSS YES..ONE OF THE THREE JMP *+3 NO...IRRECOVERABLE ERROR ISZ PARCT INCREMENT PARITY COUNT RSS RE-TRY ISZ SETER GIVE CONTROL BACK TO USER LDA B JMP SETER,I SPC 1 B377 OCT 377 SPC 1 * INDCK NOP LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I SPC 1 INT65 NOP DUMMY TO SATISFY D.65 EXT JMP INT65,I SKP * CONSTANTS AND WORKING STORAGE. * TMOUT NOP IMODE OCT 0 DATA XMSN MODE, DRIVER SUBMODE. TRA DEF *+1 TRAA OCT 0 ADDR OF DATA BUFFER. TRAB OCT 0 BUFFER LENGTH. TRA3 OCT 0 TRA4 OCT 0 $C.LU OCT 0 LOGICAL UNIT OF REMOTE COMPUTER. DATA OCT 200 DATA SUBMODE REQ OCT 300 REQUEST SUBMODE SRAD OCT 100 REQUEST AND DATA SUBMODE MSK OCT 177700 DEL NOP DELAY NOP PARCT NOP A EQU 0 B EQU 1 RETRN OCT 0 CALLER'S RETURN ADDRESS. RCODE OCT 0 REQUEST CODE. PARAD OCT 0 ADDR OF PARAMETER LIST. N.PRM OCT 0 NUMBER OF PARAMETERS. RTNB OCT 0 (B) RETURNED BY TAM. CNTR OCT 0 MD1 DEC -1 MD3 DEC -3 MD10 DEC -10 D0 OCT 0 B1 OCT 1 D2 OCT 2 D3 OCT 3 D4 OCT 4 D5 OCT 5 D6 OCT 6 B7 OCT 7 B200 EQU DATA NEED OCTAL 200 D8 DEC 8 D65C OCT 32400 EQTM OCT 77400 B74 OCT 74 B75 OCT 75 B76 OCT 76 B77 OCT 77 * BSS 0 * END