ASMB,R,L,C HED REMOTE EXEC-CALL INTERFACE*(C) HEWLETT-PACKARD CO. 1976* * NAM DEXEC,7 91700-16128 REV.A 760116 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 1 EXT D65AB EXT EXEC EXT D65MS EXT .ENTR * ENT DEXEC SUP * DEXEC * SOURCE:91700-18128 * BINARY:91700-16128 * SHANE DICKEY * AUGUST 1,1974 * * MODIFIED BY J. P. BAUDOUIN * MODIFIED 18 JUN 75 * * MODIFIED BY: CHW [ 01-16-76 ] * SPC 2 * DEXEC NOP LDA DEXEC GET THE RETURN POINTER. STA EXIT SAVE FOR '.ENTR' PROCESSING. LDA MD10 CLEAR THE PARAMETER AREA LDB APRMS TO FACILITATE CHECKING JSB CLERR FOR MISSING PARAMETERS. * JMP GETPR GO TO OBTAIN PARAMETER ADDRESSES. * PRAMS REP 10 NOP SPC 5 EXIT NOP GETPR JSB .ENTR DEF PRAMS * CLA STA ERRFG STA RCXMT LDA MD35 LDB IRBFA JSB CLERR * LDA PRAMS,I * * IS LU = 0? IF SO LOCAL CENTRAL CALL * SZA,RSS LOCAL EXEC CALL? JMP LEXEC YES AND B77 STA IRBUF+24 LDA IRBFA LDB STREM SET UP 1ST PARMB WORD-STREAM TYPE STB A,I * ADA D5 STEP TO WORD 6 OF PARMB STA AIRBF UNDER CONSTRUCTION & CONTINUE * * COMPUTE # OF PARAMETERS * CLA LDB APRMS STB PRMSA GET ADDRESS OF FIRST PASSED PARM * LOOP2 LDB PRMSA,I IS IT THERE (NONZERO) SZB,RSS JMP OUT NO-DONE GET OUT INA YES-INCREMENT PARM COUNT ISZ PRMSA STEP TO NEXT PRAM JMP LOOP2 * OUT ADA M1 DECREMENT TO ACCOUNT FOR IDEST NOT SHIPPED STA PRMS# STA AIRBF,I ISZ AIRBF * * INSERT ICODE INTO PARMB * LDA PRAMS+1,I STA AIRBF,I AND MSK0 STRIP SIGN BIT & SAVE STA ICODE ISZ AIRBF * * SET UP POINTER TO NEXT PARMB ADDRESS TO FILL * LDA AIRBF STA PONTR * * SET UP PARMB BUFFER FILL SUBROUTINE * LDA ICODE LDB D1 ADA M14 SSA,RSS JSB ERR LDA ICODE ZERO? SZA,RSS JSB ERR YES SSA NEGATIVE? JSB ERR YES * * PICK UP THE PROCESSOR * ADA SUBAD LDA A,I * JSB A,I * * DVR65 DRIVER CALL * JSB STUP GO TO SET UP THE MASTER REQUEST. * * THE CALL TO 'D65MS' WILL : * 1) GET AN I/O CLASS * 2) COMPLETE WORD 2 OF PARMB (CLASS) * 3) SEND THE REQUEST * 4) AWAIT THE REPLY * 5) RETURN REPLY TO CALLER FOR EXAMINATION * 6) RETURN CONTROL TO CALLER * * JSB D65MS GO TO THE MASTER-REQUEST INTERFACE. DEF *+8 DEF RCXMT REQUEST CODE DEF CONWD CONTROL WORD (ERROR/Z/MODE/LU #) DEF IRBUF REQUEST BUFFER DEF IRBFL REQUEST LENGTH DEF BUFF,I DATA BUFFER--IF ANY DEF BUFL DATA LENGTH--IF ANY DEF TEMP ERROR-REPORT ADDRESS JMP MSERR * ERROR DETECTED BY 'D65MS'--REPORT IT. * LDB D1 GET ERROR CODE LDA ICODE AND ICODE FOR INDEX ADA PUBAD THEN ADD TABLE START LDA A,I GET PROCESSOR ADDRESS JSB A,I & GO DO IT * SKP * ERRORS SIGNIFIED BY AN ASCII DS,SC,IO (OR) RQ IN THE * PARMB + 5 WORD ON RETURN * IF SIGN BIT SET ON ICODE-RETURN TO USER * OTHERWISE KICK HIM OFF * RETURN THE STATUS * CHECK FOR SATELLITE DETECTED ERROR * LDB D2 SET UP ERROR CODE LDA IRBUF+6 SET UP TERMINALS ERROR RESPONSE STA MSG4+1 IN CASE AN ERROR EXISTS LDA IRBUF+5 STA MSG4 CPA DS IS IT AN ASCII "DS"? JSB ERR YES CPA SC A "SC"? JSB ERR YES CPA IO AN "IO" JSB ERR YES CPA RQ AN"RQ"? JSB ERR YES CPA IL AN "IL" JSB ERR YES * * WELL WE MADE IT * CLEAR THE ENTRY ARRAY, AFTER SETTING CORRECT EXIT POINT. * LDA PRAMS+1,I GET THE USER'S REQUEST CODE. SSA IF THE SIGN-BIT WAS SET, PREPARE ISZ EXIT FOR RETURN TO USER AT P+2. LDA MD10 LDB APRMS JSB CLERR * * RETURN * LDA IRBUF+5 LDB IRBUF+6 JMP EXIT,I HED PARMB CONSTRUCTION ARRAY * (C) HEWLETT-PACKARD CO. 1976 * ICOD1 NOP * * READ S/R * CLA,INA STA RCXMT JSB FILL JMP ICOD1,I SPC 1 ICOD2 NOP * * WRITE S/R * LDA D2 STA RCXMT JSB FILL JMP ICOD2,I SPC 1 ICOD3 NOP * * CONTROL CALL * PICK UP THE CONTROL WORD * LDA PRAMS+2,I STA PONTR,I * ISZ PONTR INCREMENT STORAGE ADDRESS LDA PRAMS+3,I OPTIONAL PARAMETER PRESENT? SZA,RSS JMP ICOD3,I NO EXIT STA PONTR,I AND PUT IN PARMB JMP ICOD3,I SPC 1 ICD10 NOP * * SCHEDULE CALL * JSB NAME * * NOW SET UP TO MOVE OPTIONAL PARAMETERS IN * LDA D5 BUILD LOOP COUNTER CMA,INA STA CONTR LDA APRMS ADA D3 STEP TO DEF TO 1ST ONE LOOP3 LDB A,I GET IT'S ADDRESS SZB,RSS IS IT THERE? JMP ICD10,I NO-EXIT LDB B,I STB PONTR,I ISZ PONTR INA ISZ CONTR JMP LOOP3 JMP ICD10,I ICD11 NOP * * TIME-NO PARAMETERS * LDA D2 STA IRBUF+5 JMP ICD11,I SPC 5 ICD12 NOP * JSB NAME GET PROGRAM NAME LDA APRMS LOOK AT "IOFST" PRAM.IF - THIS IS ADA D5 INITIAL OFFSET VERSION OF CALL LDA A,I LDA A,I * SSA,RSS WHICH ONE IS IT? JMP ABSRT ABSOLUTE START TIME! LDA D3 INITIAL OFFSET! CMA,INA STA CONTR SET UP COUNTER JMP STRT4 AND GO PROCESS ABSRT LDA D6 SET UP COUNTER CMA,INA STA CONTR * STRT4 LDA APRMS ADA D3 LOOP4 LDB A,I GET ADDRESS OF DEF THEN DEF LDB B,I THE PARAMETER IT'SELF STB PONTR,I & PUT IN PARMB ISZ PONTR INA INCREMENT POINTERS ISZ CONTR & IF NOT DONE DO IT AGAIN JMP LOOP4 JMP ICD12,I SPC 1 ICD13 NOP * * STATUS-PICK UP CONTROL WORD * LDA PRAMS+2,I STA PONTR,I JMP ICD13,I SKP * LOCAL EXEC-CALL EXECUTION ARRAY * EXSR NOP JSB EXEC DEF NOP DEFS REP 8 NOP SEZ ANY EXEC-DETECTED ERRORS? JMP MSERR YES. GO TO PROCESS. DST SAVEA SAVE FOR RETURN TO USER. LDA PRAMS+1,I GET THE USER'S REQUEST CODE. SSA IF THE SIGN-BIT WAS SET, ISZ EXIT SET FOR RETURN TO USER AT P+2. JMP EXSR,I RETURN TO THE CALLER. * MSERR DST MSG4 SAVE THE ASCII ERROR CODES. LDB D2 SET FLAG TO RETURN THE ERROR CODE. RSS BYPASS THE 'ERR' ENTRY POINT. * ERR NOP STB SAVEB SAVE ERROR CODE LDA PRAMS+1,I RETURN CONTROL TO USER IF SSA ICODE SIGN BIT SET JMP ERR1 * * OUTPUT MESSAGE TO CONSOLE AND TERMINATE USER * 1 IMPLIES ICODE ERROR-RQ ERROR * 2 IMPLIES SATELLITE RETURNED ERROR * 3 IMPLIES DATA LENGTH ERROR * GET PROGRAM NAME * LDB MESGA LDA SAVEB ADA M1 ADA A ADB A * * CALCULATE ABORTION ADDRESS * LDA PRMS# GET ADDRESS OF USERS JSB ADA D3 CMA,INA ADA EXIT * SKP * OUTPUT ERROR MESSAGE & TERMINATE * JSB D65AB * * A REGISTER = JSB ADDRESS * B REGISTER = ADDRESS OF MESSAGE BUFFER * ERR1 LDA MESGA LDB SAVEB ADB M1 ADB B ADA B DLD A,I JMP EXIT,I * SPC 2 * * BUILD PARAMETERS FOR 'D65MS' * STUP NOP MASTER CALL SETUP S/R LDA D2 PREPARE FOR REQUEST-ONLY. LDB RCXMT IF THIS IS A REQUEST & DATA CALL, SZB,RSS THEN SKIP; ELSE, STA RCXMT SET REQUEST CODE FOR WRITE. BLF POSITION DRIVER MODE RBL,RBL TO . LDA IRBUF+24 GET THE LOGICAL UNIT NUMBER. IOR MSK2 INCLUDE THE ERROR-RETURN FLAG, IOR B AND THE DRIVER MODE. SZB IF THIS IS A REQUEST & DATA CALL, IOR ZBIT THEN SET THE DOUBLE BUFFER BIT(#12). STA CONWD SAVE THE CONFIGURED CONTROL WORD. LDA PRMS# GET ADDRESS OF USER'S JSB ADA D3 CMA,INA ADA EXIT STA TEMP AND SAVE AS ERROR-REPORT ADDRESS. JMP STUP,I RETURN TO MAKE THE CALL TO D65MS. * SKP CLERR NOP STA CONTR SAVE LOOP COUNTER STB PRMSA SAVE DESTINATION POINTER CLB LOOP6 STB PRMSA,I CLEAR A WORD ISZ PRMSA ISZ CONTR JMP LOOP6 CONTINUE TIL DONE JMP CLERR,I AND RETURN SPC 1 LEXEC LDA MD8 LDB DEFA STB ADEF JSB CLERR * * DON'T LET LOCAL SMESG THROUGH * LDB D1 LDA PRAMS+1,I AND MSK0 CPA D14 JSB ERR IOR MSK2 STA RCODE * LDA APRMS ADA D1 STA PRMSA * LDA MD8 STA CONTR LDA DEFRC CLB,RSS * LOOP7 LDA PRMSA,I SZA,RSS DONE IF PARAMETER IS ZERO JMP DONE7 STA ADEF,I INB ISZ PRMSA ISZ ADEF ISZ CONTR JMP LOOP7 * DONE7 INB ADB DEFB STB DEF LDA ERRIN GET ERROR-DETECTED INSTRUCTION(CCE,RSS). STA B,I STORE IN ERROR RETURN LOCATION. INB POINT TO NORMAL RETURN LOCATION. LDA ERRIN+1 GET NORMAL-RETURN INSTRUCTION (CLE). STA B,I STORE IN NORMAL-RETURN LOCATION. * JSB EXSR * DLD SAVEA GET FOR RETURN TO USER. JMP EXIT,I ERRIN CCE,RSS CLE DEFRC DEF RCODE RCODE NOP * FILL NOP LDA APRMS GET DATA BUFFER ADDRESS ADA D3 LDB A,I STB BUFF INA LDB A,I GET DATA BUFFER LENGTH LDB B,I STB IRBUF+8 SSB CHARACTERS? JMP CHAR2 YES STB IRBUF+11 NO WORDS SAVE # TO USE AT OTHER STB BUFF+1 END JMP FILL3 THEN CONTINUE * CHAR2 CMB,INB CONVERT TO + CHARS SLB & ROUND UP INB THEN CONVERT TO WORDS BRS STB IRBUF+11 STB BUFF+1 FILL3 LDA B LDB D3 SZA,RSS JSB ERR ADA MD513 SSA,RSS JSB ERR * * INSERT CONWD & OPTIONAL WORDS * (IF PRESENT) IN PARMB * LDA PRAMS+2,I STA PONTR,I ISZ PONTR ISZ PONTR * LDA PRAMS+5 SZA,RSS JMP FILL,I LDA A,I STA PONTR,I ISZ PONTR * LDA PRAMS+6 SZA,RSS JMP FILL,I LDA A,I STA PONTR,I ISZ PONTR JMP FILL,I SPC 5 NAME NOP LDA PRAMS+2 LDB A,I GET 1ST 2 CHARS OF PROG STB PONTR,I NAME & PUT IN PARMB ISZ PONTR INA STEP TO NEXT TWO * LDB A,I STB PONTR,I AND DO IT AGAIN ISZ PONTR INA * LDB A,I THEN AGAIN STB PONTR,I ISZ PONTR JMP NAME,I SPC 5 IPODX NOP * * DUMMY S/R USED FOR NULL POSTPROCESSES * JMP IPODX,I SPC 5 IPD11 NOP * * TIME RETURN TIME VALUES * LDA IRBFA ADA D7 STA AIRBF GET ADDRESS OF RETURNED TIME * LDA D5 CMA,INA BUILD COUNTER STA CONTR * LDA APRMS GET DEF TO BSS ADA D2 LDA A,I * LOOP5 LDB AIRBF,I STB A,I INA ISZ AIRBF GET A WORD & RETURN IT ISZ CONTR INCREMENT POINTERS JMP LOOP5 & DO IT AGAIN IF NEEDED JMP IPD11,I SPC 5 IPD13 NOP * * STATUS RETURN TWO STATUS WORDS * LDA APRMS ADA D3 LDA A,I GET 1ST STATUS WORD LDB IRBUF+7 STB A,I AND RETURN IT TO USER * LDA APRMS ADA D4 GET 2ND WORD LDB A,I SZB,RSS JMP IPD13,I LDB IRBUF+8 LDA A,I STB A,I * JMP IPD13,I SPC 5 HED CONSTANTS AND STORAGE * (C) HEWLETT-PACKARD CO. 1976 * SUBAD DEF SUBS-1 SUBS DEF ICOD1 DEF ICOD2 DEF ICOD3 DEF ERR DEF ERR DEF ERR DEF ERR DEF ERR DEF ERR DEF ICD10 DEF ICD11 DEF ICD12 DEF ICD13 * * PUBAD DEF PSUBS-1 PSUBS DEF IPODX DEF IPODX DEF IPODX DEF ERR DEF ERR DEF ERR DEF ERR DEF ERR DEF ERR DEF IPODX DEF IPD11 TIME DEF IPODX DEF IPD13 STATUS * * B77 OCT 77 D1 DEC 1 D2 DEC 2 D3 DEC 3 M1 DEC -1 A EQU 0 B EQU 1 PRMSA NOP APRMS DEF PRAMS MD35 DEC -35 IRBFA DEF IRBUF IRBUF BSS 35 CONTR NOP AIRBF NOP STREM DEC 5 D6 DEC 6 D7 DEC 7 PONTR NOP ICODE NOP D4 DEC 4 D5 DEC 5 IRBFL DEC 35 * SKP * THE FOLLOWING TWO STATEMENTS ARE TOGETHER!! * BUFF DEF TEMP NOP BUFL EQU BUFF+1 DEFA DEF DEFS DEFB DEF DEF MD8 DEC -8 M14 DEC -14 MD513 DEC -513 MD10 DEC -10 D14 DEC 14 RCXMT NOP CONWD NOP ZBIT OCT 10000 DS ASC 1,DS SC ASC 1,SC IO ASC 1,IO RQ ASC 1,RQ IL ASC 1,IL SAVEA NOP SAVEB NOP ERRFG NOP MESGA DEF MSG1 * * DO NOT REARRANGE THE FOLLOWING MESSAGE BUFFERS * MSG1 ASC 2,RQ MSG4 ASC 2, ADEF NOP MSK0 OCT 77777 TEMP NOP PRMS# NOP MSK2 OCT 100000 END