ASMB,R,L,C HED @DEQ - 91705-16103 * (C) HEWLETT-PACKARD CO. 1976 NAM @DEQ,6 91705-16103 REV A 760323 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 * * @DEQ * SOURCE: 91705-18103 * BINARY: 91705-16103 * JIM HARTSELL * AUG. 30, 1974 * * RE-ENTRANT SUBROUTINE FOR RTE-C SATELLITE * RESIDENT LIBRARY TO PROCESS COMPLETION * OF A REMOTE CALL TO THE CENTRAL STATION. * * CALLING SEQUENCE: (CALLED BY @REFA, @INTR) * * JSB @DEQ * OCT QUEUE ENTRY ADDR * OCT ICODE * ERROR RETURN * NORMAL RETURN * * WHERE: * ICODE = 0 USED BY @REFA FOR NORMAL * COMPLETION. IF ERROR RETURN, * THE REPLY BUFFER WILL CONTAIN * AN ASCII ERROR MESSAGE. * * = 1 USED BY @INTR TO * RETURN A QUEUE ENTRY TO THE * DORMANT LIST WHEN A USER HAS * BEEN ABORTED BEFORE HIS * REQUEST HAS COMPLETED SERVICE. * NORMAL RETURN ALWAYS TAKEN. * ENT @DEQ * EXT $LIBR,$LIBX EXT %DORM,%ACT * A EQU 0 B EQU 1 * **************************************** * * BEGIN TEMPORARY DATA BLOCK. * TDB NOP DEC 14 LENGTH OF BLOCK. RETRN NOP RETURN ADDR OF CALLER. TEMP1 NOP TEMPORARY DATA. TEMP2 NOP TEMP3 NOP RTNFG NOP FLAG RETURNED IN E-REG. FCN NOP FUNCTION CODE. REPLY NOP ADDR OF REPLY BUFFER. P.PTR NOP PTR TO USER CALL PARAMS. I.PTR NOP PTR TO REPLY BUFR PARAMS. CALL NOP ADDR OF USER CALL +1. * PASSED PARAMETERS: QENT NOP ADDR OF QUEUE ENTRY. ICODE NOP REQUEST CODE. * * END OF TEMPORARY DATA BLOCK. * **************************************** * * @DEQ NOP ENTRY POINT. * JSB $LIBR SAVE TEMPORARY DATA. DEF TDB * JSB $LIBR NOP * LDA @DEQ,I FETCH CALL PARAMETERS. STA QENT ISZ @DEQ LDA @DEQ,I STA ICODE ISZ @DEQ LDA @DEQ STA RETRN SET RETURN ADDRESS. * JSB $LIBX DEF *+1 DEF *+1 * * CHECK REQUEST CODE. * CLA STA RTNFG LDA ICODE SZA IF NON-ZERO, JMP DEQUE ABORT THE REQUEST. * * NORMAL COMPLETION OF REMOTE REQUEST. * LDB QENT GET FUNCTION CODE. ADB B7 (FROM QUEUE ENTRY) LDA B,I AND B377 MASK. STA FCN SAVE. * INB SAVE ADDR OF USER CALL. LDA B,I STA CALL ADA B2 SET POINTER TO USER CALL STA P.PTR PARAMETERS (IERR OR ICODE). * INB SAVE ADDR OF REPLY BUFFER. LDA B,I STA REPLY * ADA B4 SET POINTER TO REPLY BUFFER STA I.PTR RETURN PARAMETERS. * LDA FCN TEST FUNCTION CODE. CPA D9 JMP .GTLU GETLU. CPA D10 JMP .DLST DLIST. SZA,RSS JMP .DNLD DOWN-LOAD. CPA D200 JMP .RMCN REMOTE CONTROL. ADA MD150 SSA JMP .PTOP ADA MD13 SZA,RSS JMP .EXEC * * REMOTE FILE ACCESS COMPLETION. * LDA REPLY IF A-REG SLOT IS NON-ZERO, ADA B2 STORE THE ERROR CODE IN LDB A,I THE IERR SLOT OF REPLY BUFFER. ADA B2 SZB STB A,I * LDA I.PTR,I PASS IERR TO USER CALL, LDB FCN EXCEPT FOR DSTAT. CPB D162 RSS JSB RWORD ISZ I.PTR * SSA IF IERR WAS NEGATIVE, DON'T JMP DEQUE PASS OTHER RETURN PARAMS. * LDB FCN CPB D154 REMOTE FILE READ? RSS JMP CMPL1 NO. ISZ P.PTR MOVE PARAM POINTER. ISZ P.PTR LDA I.PTR,I RETURN XMSN LOG. JSB RWORD JMP DEQUE * CMPL1 CPB D160 LOCATE REMOTE RECORD? RSS JMP DEQUE NO. LDB MD7 YES. RETURN N PARAMS. JSB PINTG JMP DEQUE * * REMOTE EXEC CALL COMPLETION. * .EXEC LDA REPLY CHECK A-REG SLOT OF REPLY ADA B2 BUFFER FOR ERROR CODES. LDA A,I * LDB AS.01 CPA MD51 JMP SETER LINE DOWN. CPA MD10 JMP MSSNG MISSING PARAM. * CPA MD1 ERROR FROM CENTRAL? JMP CMPL6 YES * LDB AS.02 CPA MD52 JMP SETER PARITY ERROR. * LDB AS.00 CPA MD103 JMP SETER SOFTWARE BUG! * CPA AS.IO CENTRAL I/O ERROR. JMP BOUNC * CPA AS.SC CENTRAL SCHEDULE ERROR. JMP BOUNC * CPA AS.DS DS ERROR. JMP BOUNC * CPA AS.RQ ILLEGAL REQUEST CODE. JMP BOUNC * LDA P.PTR,I GET REQUEST CODE. JSB INDCK LDA A,I STA TEMP3 ELA,CLE,ERA TAKE OFF SIGN BIT. ISZ P.PTR SKIP PAST IT. * CPA D11 REMOTE TIME CALL? RSS JMP CMPL2 NO. LDA MD5 YES. RETURN TIME ARRAY. JSB PNWDS JMP CMPL3 GO DE-QUE THE ENTRY. * CMPL2 CPA D13 REMOTE I/O STATUS? RSS JMP CMPL3 NO. ISZ P.PTR YES. SKIP OVER CONTROL WORD. LDB MD2 JSB PINTG PASS PARAMETERS. * CMPL3 LDA TEMP3 TAKE NORMAL RETURN IF SIGN BIT SSA SET. ISZ RTNFG JMP DEQUE * CMPL6 LDA REPLY ADA B3 LDA 0,I GET REPLY+3 CPA D11 LENGTH ERROR? RSS YES JMP MSSNG TREAT AS IO01 LDB AS.03 GIVE DS03 JMP SETER * * PROGRAM TO PROGRAM COMMUNICATION COMPLETION. * .PTOP LDA I.PTR BACK UP REPLY BUFFER POINTER. ADA MD2 STA I.PTR CLA PREPARE FOR NO ERROR. LDB I.PTR,I GET FLAG WORD. SSB INA SET IERR=1 IF REJECTED. ISZ I.PTR LDB I.PTR,I GET ERROR WORD. SZB RETURN 0 OR 1 IF NO ERROR. LDA B HAD ERROR. RETURN NEG CODE. CPA MD11 MAP ERROR CODES. LDA MD44 CPA MD10 LDA MD40 CPA MD51 LDA MD47 CPA MD52 LDA MD48 STA I.PTR,I JSB RWORD ISZ I.PTR ISZ I.PTR * LDA P.PTR RESET POINTER TO PCB AREA. ADA MD2 STA P.PTR * LDA MD3 IF POPEN, MOVE ID INFO TO PCB. LDB FCN CPB B1 JSB PNWDS * ISZ P.PTR SET POINTER TO ITAG PARAM. ISZ P.PTR LDB P.PTR LDA FCN CPA B1 ADJUST REPLY POINTER. JMP *+4 ISZ I.PTR ISZ I.PTR ISZ I.PTR * CPA B4 JMP PTP1 ADB B2 STB P.PTR * PTP1 LDA MD10 PASS TAG FIELD TO USER. JSB PNWDS * JSB DEQ DE-QUE THE REQUEST. LDB REPLY RETURN A = IERR. ADB B3 LDA B,I CLE JMP EXIT * * SPECIAL DLIST CALL COMPLETION. * .DLST LDA P.PTR MOVE PARAM POINTER. ADA B6 STA P.PTR * LSTLD LDA I.PTR BACK UP REPLY BUFFER POINTER. ADA MD2 STA I.PTR * LDB MD3 PASS 3 PARAMS TO USER. JSB PINTG * JMP DEQUE * * SPECIAL DOWN-LOAD CALL COMPLETION. * .GTLU BSS 0 .DNLD LDA P.PTR ADA MD1 STA P.PTR * LDA REPLY CHECK FOR XMSN ERRORS. ADA B3 LDA A,I LDB AS.01 CPA MD51 JMP SETER LINE DOWN. LDB AS.00 CPA MD103 JMP SETER SYSTEM ERROR. * JMP LSTLD * * SPECIAL REMOTE CONTROL COMPLETION. * .RMCN LDA P.PTR BACK UP PARAM POINTER. ADA MD1 STA P.PTR ISZ I.PTR BUMP REPLY BUFFER POINTER. LDA I.PTR,I RETURN MESSAGE LENGTH. JSB RWORD ISZ I.PTR LDA MD19 RETURN ASCII MESSAGE. JSB PNWDS JMP DEQUE * * STORE ASCII ERROR CODES IN REPLY BUFFER. * (FOR REMOTE EXEC AND DOWN-LOAD CALLS) * MSSNG CCE,RSS SETER CLE LDA REPLY REPLY BUFFER ADDRIN B-REG ADA B2 3RD WORD STA ERDST+1 SAVE ADDR FOR ERROR CODE STORE LDA AS.DS "DS". SEZ LDA AS.IO "IO" ERDST DST * SET ASCII ERROR CODE * LDA FCN CHECK FOR DOWN-LOAD. SZA,RSS JMP EMESG * BOUNC LDA P.PTR,I CHECK SIGN BIT OF RCODE. JSB INDCK LDA A,I SSA,RSS IS IT SET? JMP EMESG NO. ABORT THE USER. * DEQUE JSB DEQ DE-QUE THE REQUEST. * * * SET THE A AND B REGISTERS TO THEIR VALUE AFTER * THE REMOTE CALL WAS EXECUTED AT CENTRAL. * LDA RTNFG SET E IF NORMAL DEXEC RETURN ERA WHEN RCODE SIGN BIT SET. LDB REPLY ADB B2 DLD 1,I GET REGS FROM REPLY BUFFER * * EXIT TO CALLER VIA NORMAL RETURN. * EXIT JSB $LIBX RESTORE TEMPORARY DATA BLOCK. DEF TDB DEC 1 * * GENERATE AN ERROR MESSAGE OF THE FORM * * IOXXR PRGNM ADDR * PRGNM ABORTED -OR- PRGNM SUSPEND * * IN THE REPLY BUFFER AND RETURN VIA ERROR EXIT. * EMESG LDA REPLY SET STORE POINTER. STA I.PTR * ADA B2 LDB MD2 JSB PACK STORE "IOXX". * LDA AS.R STORE "R" SUFFIX IF NOT DSP ERROR. LDB REPLY,I CPB AS.DS LDA BLANK STA I.PTR,I ISZ I.PTR * LDA XEQT,I GET ADDR OF PROGRAM NAME ADA D12 LDB MD3 IN ID SEGMENT. JSB PACK STORE "PRGNM". * LDB CALL GET ADDR OF VIOLATING ADB MD1 USER CALL. LDA I.PTR ADDRESS OF ASCII STORAGE. JSB CONV CONVERT TO ASCII OCTAL & STORE. STA I.PTR SET STORE POINTER. * LDA CRLF STORE CR/LF. STA I.PTR,I ISZ I.PTR * LDA XEQT,I STORE PROGRAM NAME AGAIN ADA D12 LDB MD3 IN SECOND LINE. JSB PACK * LDB REPLY ADDR OF REPLY BUFFER. LDA B,I WORD 1. CPA AS.DS = "DS" ? JMP WORD2 YES. GO CHECK WORD 2. ABRT LDA ABMSG NO. STORE "ABORTED". LDB MD4 JSB PACK JSB DEQ DE-QUE THE REQUEST. CLA JMP EREX * WORD2 INB LDA B,I WORD 2. CPA AS.01 = "01" ? RSS JMP ABRT NO. STORE "ABORTED". LDA SUMSG YES. STORE "SUSPEND". LDB MD4 JSB PACK CLA,INA * EREX JSB $LIBX RESTORE TDB AND TAKE DEF TDB ERROR EXIT. DEC 0 HED @DEQ - UTILITY SUBROUTINES * (C) HEWLETT PACKARD CO. 1976 * SUBROUTINE TO RETURN COMPLETED ACTIVE QUEUE ENTRY TO * THE DORMANT LIST. * DEQ NOP JSB $LIBR DISABLE THE INTERRUPT SYSTEM. NOP * LDA %DORM FIND END OF DORMANT LIST. CLB JSB FINDR * LDA QENT LINK TO RELEASED ENTRY. STA B,I * LDA %ACT FIND PREVIOUS ACTIVE ENTRY. LDB QENT LDB B,I JSB FINDR * LDB QENT LINK IT AROUND RELEASED ENTRY. LDB B,I (IF IT WAS NOT THE LAST ENTRY SZA IN THE ACTIVE LIST) STB A,I CLA CLEAR LINK IN RELEASED ENTRY. LDB QENT STA B,I INB CLEAR FLAG WORD. STA B,I * JSB $LIBX ENABLE INTERRUPT SYSTEM. DEF DEQ RETURN. * * SUBROUTINE TO FIND END OF LIST OR PARTICULAR * ENTRY IN THE PARMB REQUEST QUEUE. THIS ROUTINE * IS CALLED WITH THE INTERRUPT SYSTEM DISABLED. * ENTRY: (A) = ADDR OF PTR TO TOP OF LIST. * (B) = 0 FOR END OF LIST, OR * = LINK WORD FOR PARTICULAR ENTRY. * JSB FINDR * RETURN: (A) = ADDR OF PREVIOUS ENTRY. * (B) = ADDR OF ENTRY. * FINDR NOP STB TEMP3 CLB STB TEMP2 INITIAL PREVIOUS ENTRY. * F1 LDB A,I FETCH NEXT ENTRY. CPB TEMP3 DESIRED ENTRY? JMP F2 YES. STA TEMP2 NO. KEEP TRACK. STB A JMP F1 * F2 LDB A ADDR OF ENTRY. LDA TEMP2 ADDR OF PREVIOUS ENTRY. JMP FINDR,I RETURN. * * PASS N-WORD PARAM TO USER PROGRAM. * (DOES NOT BUMP P.PTR) * PNWDS NOP STA TEMP1 NEGATIVE WORD COUNT. JSB PCHEK IS PARAM SPECIFIED? JMP PNWDS,I NO. IGNORE THE CALL. LDA P.PTR,I GET PARAM ADDRESS. JSB INDCK TLOOP LDB I.PTR,I MOVE N WORDS. STB A,I ISZ I.PTR INA ISZ TEMP1 JMP TLOOP JMP PNWDS,I * * PASS N PARAMS TO USER PROGRAM. (B) = -N. * PINTG NOP STB TEMP2 PLOOP LDA I.PTR,I JSB RWORD ISZ I.PTR ISZ TEMP2 JMP PLOOP JMP PINTG,I * * PASS A-REG CONTENTS TO USER PARAMETER, IF SPECIFIED. * RWORD NOP STA TEMP1 JSB PCHEK IS PARAM SPECIFIED? JMP RWORD,I NO. IGNORE THE CALL. LDB TEMP1 YES. LDA P.PTR,I JSB INDCK STB A,I LDA TEMP1 ISZ P.PTR JMP RWORD,I * * TEST WHETHER THE USER HAS SPECIFIED A PARAMETER. * JSB PCHEK * ERROR RETURN (PARAM NOT GIVEN) * NORMAL RETURN * PCHEK NOP LDA P.PTR PARAM ADDRESS. CMA,INA ADA CALL,I RETURN ADDRESS. ADA MD1 SSA,RSS ISZ PCHEK JMP PCHEK,I * * RESOLVE INDIRECT PARAMETER ADDRESSES. * INDCK NOP RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I * * MOVE WORDS TO USER REPLY BUFFER. * (A) = SOURCE ADDR, (B) = NEGATIVE WORD COUNT. * PACK NOP STB TEMP1 CLOOP LDB A,I STB I.PTR,I INA ISZ I.PTR ISZ TEMP1 JMP CLOOP JMP PACK,I * * CONVERT 15-BIT BINARY NUMBER TO 6 CHARACTER * (LEADING BLANK) ASCII FORM OF OCTAL. * CONV NOP STA TEMP1 SAVE STORAGE ADDRESS. RBL POSITION FIRST DIGIT TO BITS 15-13. LDA MD3 STA TEMP2 CONVERT COUNTER = -3. LDA B40 MAKE FIRST CHAR A SPACE. CONV1 ALF,ALF ROTATE CAHR TO UPPER POSITION STA TEMP3 AND SAVE. BLF,RBR POSITION NEXT DIGIT TO BITS 2-0. LDA B AND B7 ISOLATE DIGIT. IOR B60 MAKE AN ASCII CHAR (60-67). IOR TEMP3 PACK IN UPPER CHAR STA TEMP1,I AND STORE IN STORAGE AREA. ISZ TEMP1 BUMP STORAGE ADDRESS. BLF,RBR ROTATE NEXT DIGIT TO LOW BYTE. LDA B ISOLATE CHAR IN LOW A. AND B7 IOR B60 MAKE AN ASCII CHAR. ISZ TEMP2 BUMP CONVERT COUNTER. JMP CONV1 NOT FINISHED. LDA TEMP1 FINISHED. SET (A) = NEXT STORAGE JMP CONV,I AREA WORD ADDRESS, AND EXIT. HED @DEQ - STORAGE FOR CONSTANTS * (C) HEWLETT PACKARD CO. 1976 XEQT OCT 1717 ID SEG ADDR OF CURRENT PROGRAM. B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B6 OCT 6 B7 OCT 7 B40 OCT 40 B60 OCT 60 B377 OCT 377 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 D154 DEC 154 D160 DEC 160 D162 DEC 162 D200 DEC 200 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 MD5 DEC -5 MD7 DEC -7 MD10 DEC -10 MD11 DEC -11 MD13 DEC -13 MD19 DEC -19 MD40 DEC -40 MD44 DEC -44 MD47 DEC -47 MD48 DEC -48 MD51 DEC -51 MD52 DEC -52 MD53 DEC -53 MD103 DEC -103 MD150 DEC -150 AS.00 ASC 1,00 AS.01 ASC 1,01 AS.02 ASC 1,02 AS.03 ASC 1,03 AS.IO ASC 1,IO AS.SC ASC 1,SC AS.DS ASC 1,DS AS.R ASC 1,R AS.RQ ASC 1,RQ BLANK ASC 1, CRLF OCT 6412 ABMSG DEF ABORT ABORT ASC 4, ABORTED SUMSG DEF SUSP SUSP ASC 4, SUSPEND * SIZE EQU * * END