ASMB,R,L,C HED GET 91700-16136 REV A * (C) HEWLETT-PACKARD CO 1976 NAM GET,7 91700-16136 REV A 760330 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 ENT GET,ACEPT,REJCT,FINIS EXT EXEC EXT .ENTR EXT D65SV EXT CNUMO EXT #ST04 SPC 5 * * GETS * SOURCE:91700-18136 * BINARY:91700-16136 * SHANE DICKEY * JULY 30,1974 * * MODIFIED FOR DS-1B' BY CHUCK WHELAN NOV 14,1975 * SPC 5 * THESE LIBRARY SUBROUTINES ARE USED IN CONJUNCTION * WITH THE PROGRAM TO PROGRAM COMMUNICATION MONITOR * PTOPM TO AFFECT COMMUNICATION WITH SATELLITE PROGRAMS * THEY CONTAIN THE FOUR SLAVE ENTRY POINTS (GET * ACCEPT,AND REJECT AND FINIS) THAT MAY BE ENTERED * BY A PROGRAM IN SLAVE MODE WHICH IS COMMUNICATING * WITH A PROGRAM IN MASTER MODE. * FOR A FURTHER DISCUSSION OF WHAT EACH OF THESE * ENTRY POINTS DOES SEE THE REMARKS UNDER THE SPECIFIC * ENTRY POINT BELOW. * * * THE SUBROUTINES REQUIRE THAT THE USER ENTER * THEM IN A CONTROLLED SEQUENCE. THAT IS TO SAY GET * MUST BE ENTERED FIRST AND * EITHER ACCEPT OR REJECT MUST BE ENTERED SECOND. THIS SEQUENCE IS * REPEATED FOR EACH INCOMING MASTER COMMAND * IT IS NOT DIFFICULT TO IMAGINE THE CONFUSION * THAT RESULTS IF AN ACCEPT REQUEST IS ISSUED ON A REQUEST * NOT YET RECIEVED AND OTHER ANALOGOUS SEQUENCE ERRORS * ALL OF THIS IS KEPT STRAIGHT BY MANIPULATION OF THE VARIABLE * "NEXT" WHICH IS INITIALIZED TO ONE AND MAINTAINED BY THE SUBROUTINE * THE STATES OF THE VARIABLE ARE AS FOLLOWS: * NEXT =1 IMPLIES "GET" CALL REQUIRED NEXT * NEXT=2 IMPLIES ACCEPT/REJ CALL REQUIRED NEXT * * FINIS MAY BE ISSUED AT ANY TIME HED "GET" PROCESSING * (C) HEWLETT-PACKARD CO 1976 ICLAS NOP IERR NOP IFUN NOP ITAG NOP IL NOP SPC 5 GET NOP SPC 5 * ENTRY HERE SIGNIFIES THAT THE USER SUBROUTINE HAS COMPLETED THE * PROCESSING OF THE LAST CALL AND WISHES TO INTERROGATE HIS I/O * CLASS TO DETERMINE IF THERE ARE ANY MORE REQUESTS * TO BE PROCESSED. IF MORE REQUESTS HAVE BEEN QUED UP ON THE * CLASS THE ONE ON THE TOP OF THE STACK WILL BE PASSED TO THE * USER.IF THERE ARE NO OUTSTANDING REQUESTS THE USER * WILL BE I/O SUSPENDED UNTIL A REQUEST IS RECEIVED * BY THE MONITOR AND PLACED IN THE USER'S I/O CLASS. SPC 5 * SAVE INPUT PARAMETERS JSB .ENTR PICK UP THE PARAMETERS PASSED DEF ICLAS LDB DIL GET SIZE CHECK DEF STB CLEAR LDB GET RETURN ADDR STB EXIT LDB IERR SET UP ERROR PRAM ADDR STB ERRM1 LDA IL ADDRESS SZA,RSS LAST ONE REQ. THERE? JMP ERPAR NO-ERROR CLA,INA LDB ERCOM CPB M47 COMM ERROR OCCURRED LAST XACTION? STA NEXT YES, RESET SEQ INDICATOR CPA NEXT CHECK FOR LEGAL SEQUENCE RSS JMP ERSEQ TAKE ERROR EXIT IF SEQUENCE ERR STA ERCOM * LDA ICLAS,I SET UP THIS USER'S I/O CLASS STA MYCLS JSB EXEC ISSUE GET ON I/O CLASS DEF *+5 DEF D21 DEF MYCLS DEF IRBUF DEF IRBFL * * PASS THE TAG TO THE USER * LDA ITAG SET UP THE TAG FIELD LOCATION STA TAGPR FOR TRANSFER * * MOVE TAG FIELD FROM PARMB TO USER AREA * LDA M10 STA CONTR 10 WORD COUNTER LDA IRBF8 GET1 LDB 0,I STB TAGPR,I STORE WORD IN USER AREA INA ISZ TAGPR BUMP POINTERS ISZ CONTR JMP GET1 ITERATE * GET FUNCTION CODE FROM THE PARMB & USE AS A SWITCH LDA IRBUF+2 GET FUNCTION CODE AND O7 STA FCODE SAVE FUNCTION CODE * SET FUNCTION CODE SO USER WILL KNOW WHAT HE GOT * STA IFUN,I RETURN RECEIVED FUNCTION CODE LDB IRBUF+18 DATA BUFFER LENGTH RAR,SLA SKIP UNLESS READ OR WRITE STB IL,I RETURN LENGTH TO CALLER * RETURN TO THE USER ISZ NEXT SET SEQ INDICATOR * SET IERR FLAG CLB RETURN "NO ERROR" FLAG STB IERR,I TO THE USER STB IL JMP GET,I RETURN TO USER HED "ACCEPT" PROCESSING * (C) HEWLETT-PACKARD CO 1976 AITAG NOP AIERR NOP AIBUF NOP * * ENTRY HERE SIGNIFIES THAT THE LAST REQUEST EXAMINED * WAS AN ACCEPTABLE ONE AND THE REQUEST WAS TO BE HONORED * * THE ACTION TO BE ACCOMPLISHED FOR AN ACCEPT REQUEST * VARIES AS TO THE TYPE OF REQUEST WHICH WAS LAST RECEIVED * ACCEPT REQUESTS ARE PERFORMED FOR ALL FOUR MASTER REQUESTS * EXIT EQU * ACEPT NOP JSB .ENTR PICK UP CALLING PARAMETERS FROM DEF AITAG THE USER * LDB DAIER GET SIZE CHECK LOCATION STB CLEAR * * CHECK FOR ERRORS & MOVE TAG FIELD TO PARMB * DLD AITAG JSB PUTAG * LDA AIBUF SZA STA DATAD SET DATA ADDRESS CLB STB AIERR CLEAR FOR PARAM CK NEXT TIME LDA FCODE RAR,SLA SKIP IF OPEN OR CONTROL(DO REQ ONLY) RSS JMP ACPFG LDB READZ CONWD FOR READ (REQ & WRITE DATA) SSA SKIP IF PREAD LDB WRITZ CONWD FOR WRITE (REQ & READ DATA) LDA AIBUF SZA,RSS WAS DATA BUFFER SPECIFIED JMP ERPAR NO, INSUFFICIENT PARAMS * ACPFG LDA IRBUF+2 SET ACCEPT FLAG IN PARMB IOR BIT14 * * REMAINDER OF THIS SECTION IS SHARED BY "ACEPT" AND "REJCT" * DVR STA IRBUF+2 LDA IRBUF ALF,ELA LDA IRBFL LENGTH=35 WORDS IF FRIENDLY SEZ,RSS TEST FRIENDLY BIT LDA D25 IT'S UNFRIENDLY STA RQLEN LDA IRBUF IOR BIT14 SET REPLY BIT STA IRBUF LDA IRBUF+24 AND B77 IOR 1 INCLUDE DRIVER REQUEST TYPE STA CONWD CONFIGURE CALL FOR LU & OP TYPE LDA D2 CPB WRITZ IS IT SEND REQ & RCV DATA? CLA,INA YES, OP IS READ STA D2T * JSB D65SV DO CALL TO DRIVER THRU D65SV DEF *+7 DEF D2T DEF CONWD DEF IRBUF DEF RQLEN DATAD DEF DUMMY DEF IRBUF+18 JMP ERRAC COMMUNICATION ERROR ALF,ALF ALF,SLA CHECK FOR STOP RECEIVED JMP ERRAC IT WAS, DATA WAS REJECTED * CLA,INA STA NEXT LDA ERRM1,I RETRN STA ERCOM SAVE RETURN STATUS CLB JMP EXIT,I RETURN FROM ACEPT/REJCT TO CALLER * ERRAC LDA M47 ERROR STATUS= -47 STA ERRM1,I JMP RETRN HED "REJECT" PROCESSING * (C) HEWLETT-PACKARD CO 1976P JITAG NOP JIERR NOP * * ENTRY HERE IS SIMILAR TO THAT FOR THE ACCEPT OPTION * EXCEPT THE REQUEST HAS BEEN DETERMINED NOT TO BE FROM A VALID * SATELLITE AND MUST BE REJECTED. AGAIN THE LOGIC * IS BROKEN UP INTO FOUR SUBCLASSES ACCORDING TO THE TYPE * OF REQUEST BEING REJECTED * REJCT NOP JSB .ENTR PICK UP USER PARAMETERS DEF JITAG LDB DJIER STB CLEAR SET UP SIZE CHECK LOCATION LDB REJCT PICK UP RETURN ADDR STB EXIT * * CHECK FOR ERRORS & MOVE TAG FIELD TO PARMB * DLD JITAG JSB PUTAG * LDA FCODE PICK UP TYPE OF REQUEST RAR,SLA RSS SKIP IF READ OR WRITE FUNCTION JMP REJ4 * LDA IRBUF+24 GET LU IOR BIT6 STA D2T SET UP CONTROL BIT * SEND ENABLE LISTEN REQUEST TO DRIVER JSB EXEC DEF *+3 DEF D3 DEF D2T * REJ4 LDA IRBUF+2 ADA D4 MODIFY CODE * SET THE PARMB REJECT FLAG FOR PTOPM IOR MSK5 CLB DO WRITE REQUEST ONLY STB JIERR CLEAR FOR PARAM CK NEXT TIME JMP DVR NOW SEND REPLY & EXIT HED "FINISH" PROCESSING * (C) HEWLETT-PACKARD CO 1976 FINIS NOP * GET NAME OF PROGRAM TO BE FINISHED * (THE ONE THAT THIS S-R IS APPENDED TO ) LDA B1717,I GET ID SEGMENT OF CURRENTLY ADA D12 EXECUTING PROGRAM & STEP TO NAME LDB A,I GET FIRST 2 CHARS OF NAME STB IRBUF+5 & MOVE TO PARMB * INA LDB A,I GET 2ND TWO STB IRBUF+6 & SAVE AWAY * INA GET 3RD TWO LDA 0,I AND MSK1 MASK OUT ID SEG STATUS BITS IOR B40 STA IRBUF+7 AND SAVE * CLA,INA STA NEXT RESET SEQUENCE INDICATOR * * SET FUNCTION CODE REPLY FLAG & ACCEPT/REJECT FLAG * LDA HCODE STA IRBUF+2 * * SEND IT TO THE MONITOR * SO THIS PROGRAM CAN BE REMOVED FROM THE ACTIVE LIST * LDA #ST04+1 GET CLASS # FOR PTOPM RAL,CLE,ERA CLEAR OFF SIGN BIT STA PTOP * JSB EXEC SEND THE REQUEST BACK TO PTOPM DEF *+8 DEF D20 DEF ZERO DEF IRBUF DEF IRBFL DEF DUMMY DEF DUMMY DEF PTOP ISZ FINIS JMP FINIS,I RETURN HED UTILITY SUBROUTINES/DATA AREA * (C) HEWLETT-PACKARD CO 1976 * * THIS SUBROUTINE CHECKS FOR CALL ERRORS & RETURNS A MODIFIED * PARMB TO THE SATELLITE MASTER PROGRAM * PUTAG NOP DST TAGPR STORE ADDRS OF TAG FIELD & ERROR FLAG SZB,RSS SKIP IF ERROR DEF WAS PASSED JMP ERPAR OTHERWISE ERROR IN CALL LDA NEXT CHECK SEQUENCE CPA D2 CLA,RSS OK JMP ERSEQ ERROR, NOT TIME FOR ACEPT/REJCT STA ERRM1,I CLEAR ERROR FLAG LDA M10 BUILD A TEN WORD COUNTER STA CONTR LDA IRBF8 BUILD AN ADDRESS IN THE PARMB * PUT1 LDB TAGPR,I PUT A WORD IN PARMB STB A,I INA INCREMENT ISZ TAGPR POINTERS ISZ CONTR DONE WITH MOVE? JMP PUT1 AND BRANCH BACK IF NOT DONE JMP PUTAG,I ON COMPLETION RETURN SPC 5 ERSEQ LDA M46 -46 = SEQUENCE ERROR RSS ERPAR LDA M40 -40 = INSUFFICIENT PARAMETERS STA ERRM1,I RETURN ERROR TO USER CLB CLEAR PARAM SIZE CHECK WORD STB CLEAR,I JMP EXIT,I AND RETURN SPC 5 ERR1 NOP STA SSA SAVE DRIVER STATUS LDA B1717,I GET THE NAME OF THE PROGRAM ADA D12 THIS S/R IS APPENDED TO LDB A,I FROM THE ID SEGMENT STB COMER+6 & SAVE IN THE OUTPUT * INA BUFFER LDB A,I STB COMER+7 * INA LDB A,I LDA B AND MSK1 STRIP OFF STATUS BITS STA COMER+8 * JSB CNUMO CONVERT STATUS WORD TO ASCII DEF *+3 DEF SSA DEF CNBUF RESULTING ASCII * JSB EXEC OUTPUT DRIVER ERROR DEF *+5 MESSAGE DEF D2 DEF D1 DEF COMER * DEF COMEL JMP ERR1,I & RETURN * * DATA AREA * CONTR NOP FCODE NOP CONWD NOP MYCLS NOP NEXT DEC 1 ERCOM NOP TAGPR DEC 0,0 ERRM1 EQU TAGPR+1 A EQU 0 B EQU 1 M10 DEC -10 D2T NOP BIT6 OCT 100 BIT14 OCT 40000 B40 OCT 40 B77 OCT 77 READZ OCT 10200 REQ & WRITE DATA + Z BIT WRITZ OCT 10100 REQ & READ DATA + Z BIT ZERO OCT 0 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D20 DEC 20 D21 DEC 21 D25 DEC 25 IRBFL DEC 35 RQLEN NOP MSK1 OCT 177400 B1717 OCT 1717 D12 DEC 12 HCODE OCT 40211 MSK5 OCT 100000 O7 OCT 7 PTOP OCT 100004 M46 DEC -46 M47 DEC -47 CLEAR NOP M40 DEC -40 IRBF8 DEF IRBUF+8 DJIER DEF JIERR DAIER DEF AIERR DIL DEF IL * IRBUF EQU * * BSS 35 THIS BUFFER IS ZEROED UNL REP 35 NOP LST CNBUF BSS 3 COMER ASC 7,COMM ERROR - SSA NOP COMEL DEC -16 DUMMY NOP END