ASMB,L,R,C HED 3000 REPLY CONVERTER (C) HEWLETT-PACKARD CO. 1980 NAM RPCNV,19,25 91741-16005 REV 2026 800314 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 EXT EXEC,$LIBR,$LIBX,D65GT EXT #RPCV,#QXCL,#TST,$OPSY SPC 1 **************************** RPCNV ******************************* * * * SOURCE: 91741-18005 * * * * BINARY: 91741-16005 * * * * PROGRAMMER: JIM HARTSELL * * * * FEBRUARY 28, 1977 * * * *----------------------------------------------------------------* * * * MODIFIED BY DMT BEGINNING NOVEMBER 7, 1978 * * * *----------------------------------------------------------------* * BIG FIXES: * * CHECK PROPER WORD FOR CONTINUATION REJECT [800314] DMT * ****************************************************************** SPC 1 * D EQU 256 MAX DATA PER 3000 DATA REPLY. L EQU 304 MAXIMUM LINE BUFFER SIZE. DBL EQU 512 MAXIMUM SLAVE DATA LENGTH. * * RPCNV IS THE INTERFACE TO THE DS/1000 SLAVE MONITORS FOR REPLIES * DESTINED FOR THE HP 3000. ALL OUTGOING REPLIES ARE CONVERTED * TO DS/3000 FORMATS. * SUP A EQU 0 B EQU 1 SKP RPCNV LDA $OPSY RAR,SLA IS THIS AN RTE-III OR IV? RSSI RSS YES. JMP SETCL NO. LDB RSSI GET "RSS" INSTRUCTION. STB MODI2 MODIFY TO DO CROSS-MAP LOAD. STB MODI3 MODIFY TO DO CROSS-MAP STORE. DLD MWFI MODIFY TO DO "MWF" DST DMS3 CROSS-MAP MOVE. * SETCL LDA #RPCV SET BIT IOR B60K TO SAVE STA CLASS BUFFER. * ************************************************************ * * * MAIN PROCESSING SECTION FOR ALL REPLIES FOR THE 3000. * * * ************************************************************ * GET EQU * JSB EXEC LOOK AT THE CLASS. DEF *+7 DEF D21 DEF CLASS DEF RQBUF DEF D8 DEF PARM1 DEF PARM2 * LDA PARM1 IF IT'S NOT AN CPA D8 INTERMEDIATE CONTINUATION RSS REQUEST, JMP DO65G PICK UP VIA D65GT. * LDA CLASS CLEAR "SAVE BUFFER" ALR,RAR FLAG IN CLASS. STA TEMP JSB EXEC DO DUMMY "GET" DEF *+5 TO RELEASE DEF D21 BUFFER. DEF TEMP DEF DABUF DEF D0 * LDB PARM2 GET TST ADDRESS. STB TSTAD ADB D2 GET HOLDING CLASS JSB LODWD FROM S.A.M. STA HLDCL ADB D9 GET ORIGINAL SEQUENCE JSB LODWD NUMBER FROM S.A.M. STA RQ5 * LDA RQ2 IF 3000 AND BIT14 REJECTED, SZA JMP RLTST RELEASE TST. * JMP PSTUP DO PRELIMINARY SET-UP. SPC 1 * BUFFER CAME FROM DS/1000 MONITOR. DO65G JSB D65GT PICK UP BUFFER DEF *+6 FROM DS/1000 SLAVE MONITORS. DEF #RPCV RPCNV'S I/O CLASS. DEF PARMB 1000 REPLY BUFFER. DEF PRMBL MAXIMUM LENGTH. DBUFA DEF DABUF DEF MAXDA JMP GET ERROR RETURN. * STA RQLOG SAVE REPLY LENGTH. STB TCNT SAVE LENGTH OF DATA RECEIVED. * * SEARCH TRANSACTION STATUS TABLE (TST) FOR MATCHING SEQUENCE # * IN 8-WORD FIXED-FORMAT HEADER. * DLD #TST GET TST ADDR AND # OF ENTRIES. STA TEMP CMB,INB STB TEMP1 SZA SZB,RSS JMP GET FORGET IT IF NO TST. * TSTLP LDB TEMP CHECK NEXT ENTRY. JSB LODWD VALID ENTRY? SZA,RSS JMP NXTST NO. GO CHECK NEXT ENTRY. INB YES. JSB LODWD (CROSS) LOAD LOCAL SEQ. #. CPA PARMB+1 JMP CONV MATCH. GO PROCESS REPLY. * NXTST LDB TEMP BUMP TO NEXT ENTRY. ADB TSTLN STB TEMP ISZ TEMP1 JMP TSTLP JMP GET NOT FOUND. * * MOVE TST ENTRY FROM S.A.M. TO LOCAL STORAGE AREA. * (THIS IS 8-WORD HEADER BELONGING TO THIS REPLY.) * CONV LDA TEMP SAVE ADDR OF TST ENTRY IN S.A.M. STA TSTAD LDA TSTLN MOVE TST ENTRY TO LOCAL STORAGE. CAX LDA TSTAD LDB LTSTA DMS3 MVW TSTLN MOVE: [DMS: "MWF"]. * * PERFORM PRELIMINARY SET-UP OF FIXED FORMAT HEADER. * PSTUP LDA RQ2 AND NOT13 CLEAR CONTINUATION BIT. IOR BIT15 SET REPLY BIT. STA RQ2 LDA RQ4 REVERSE PROCESS NUMBERS. ALF,ALF STA RQ4 * LDA PARM1 DS/3000 CONTINUATION REQUEST? CPA D8 JMP CONRQ YES. GET DATA OFF BUFFER. * LDA RQLOG IF UPLIN DETECTED A TIMEOUT CPA D2 ON THIS REQUEST, JMP REJCT REJECT IT. * * IF OPERATOR COMMAND REPLY, PROCESS INTERVENING $STDLIST MESSAGE. * LDA PARMB AND B17 CPA D7 RSS JMP CONV1 NOT A COMMAND REPLY. * LDA PARMB+7 IF NO ASCII SZA,RSS REPLY MESSAGE, JMP CONV1 DON'T DO THE $STDLIST. * LDA RQ4 SAVE 3000 PROCESS NUMBERS. STA SVFTO AND B377 SET "FROM PROCESS NO." STA RQ4 ZERO. (NO 3000 REPLY) LDA RQ0 SAVE 3000 MESSAGE CLASS. STA SVMCL LDA RQ2 SAVE 3000 STREAM TYPE. STA SVSTR (REPLY BIT IS SET) LDA D5 BUILD $STDLIST REQUEST. STA RQ0 MESSAGE CLASS = 5. LDA B20 STA RQ2 STREAM = 20. CLA CLEAR CONTROL WORDS. STA RQ8 STA RQ9 LDA PARMB+7 GET LENGTH OF ASCII REPLY MSG. ADA D2 ADD # CONTROL WORDS. ALS STA RQ7 STORE BYTE COUNT. ARS ADA D8 STA RQLEN SAVE LENGTH OF REQUEST. ALF,ALF STA B LDA RQ0 STORE WORD COUNT. AND B377 IOR B STA RQ0 * LDA PCBA MOVE ASCII REPLY MESSAGE. LDB ARQ10 MVW PARMB+7 * JSB SEND WRITE $STDLIST TO QUEX. JMP RLTST ERROR RTN: LINE DISCONNECTED. * LDA SVMCL RESTORE 3000 MESSAGE CLASS. STA RQ0 LDA SVSTR RESTORE 3000 STREAM. STA RQ2 LDA SVFTO RESTORE 3000 PROCESS NUMBERS. STA RQ4 * * CONVERT DS/1000 REPLY TO DS/3000 FORMAT. * CONV1 CLA CLEAR "DATA IN STA INPLC PLACE" FLAG. JSB D1000 MAKE CONVERSION. * STA RQ7 STORE BYTE LENGTH. INA STORE WORD COUNT BYTE. ARS ADA D8 STA RQLEN SAVE LEN OF DS/3000 REPLY. ALF,ALF STA B LDA RQ0 AND B377 IOR B STA RQ0 * * CHECK IF THERE IS DATA IN THIS REPLY. * LDA TCNT IS THERE DATA? SZA JMP CONT1 YES. GO PREPARE DATA REPLY. * * CLASS WRITE THE DS/3000 REPLY TO QUEX'S I-O CLASS. * PUT JSB SEND DO CLASS WRITE/READ. NOP IGNORE ERROR RETURN. * * RELEASE TST ENTRY IN S.A.M. * RLTST LDA HLDCL LEAVING A HOLDING CLASS? SZA,RSS JMP STO0 NO. SET 1ST WORD TO 0. * JSB EXEC GET BUFFER OFF DEF *+5 HOLDING CLASS DEF CLS21 AND DEALLOCATE. DEF HLDCL DEF TEMP DEF D0 NOP (IGNORE ERRORS.) * STO0 LDB TSTAD CLA SZB (MAKE SURE ADDR IS GOOD!) JSB STRWD * JMP GET DONE WITH THIS REPLY. SPC 5 ************************************************************ * * * INTERMEDIATE CONTINUATION REQUEST RECEIVED FOR DS/3000 * * DREAD/PREAD/DEXEC(1) DATA REPLIES. * * * ************************************************************ * CONRQ JSB EXEC READ DATA. DEF *+6 DEF CLS21 DEF HLDCL (DE-ALLOCATE) DEF RQ8 DEF MAXDA DEF TCNT # WORDS REMAINING. JMP REJCT ERROR. * ISZ INPLC DATA IS IN PLACE. CLA RESET BYTE STA RQ7 COUNT AND CLEAR STA HLDCL CLASS NUMBER IN LDB TSTAD LOCAL AND ADB D2 SAM TST. JSB STRWD LDA RQ0 RESET AND B377 WORD IOR UP8 COUNT. STA RQ0 SPC 1 ************************************************************ * * * SECONDARY SECTION FOR DREAD/PREAD/DEXEC(1) DATA REPLIES. * * * ************************************************************ * * PROCESS DATA REPLIES (POSSIBLE CONTINUATIONS). * CONT1 LDA TCNT TOTAL # DATA WORDS REMAINING. STA DALEN CMA,INA ADA BLKLN WILL IT ALL FIT IN THIS REPLY? SSA,RSS JMP CONT3 YES. * LDA BLKLN NO. SET BLOCK LENGTH TO MAX. STA DALEN LDA RQ2 SET CONTINUATION BIT. IOR BIT13 STA RQ2 LDA LCSEQ SET RTE SEQUENCE # SO CONT. STA RQ5 REQUEST WILL GO TO RPCNV. * CONT3 LDA RQ0 STORE HEADER + ALF,ALF APPENDAGE LENGTH. AND B377 STA APLEN ADA DALEN CALCULATE STA RQLEN TOTAL LENGTH. * LDA INPLC IF "DATA IN PLACE" SZA FLAG IS SET, JMP CONT4 DON'T NEED TO MOVE DATA. * LDB ARQ0 FIND WHERE TO PUT THE DATA ADB APLEN IN THE DS/3000 REPLY. LDA DBUFA MVW DALEN MOVE THE NEXT DATA BLOCK. * CONT4 LDA DALEN UPDATE REPLY BYTE COUNT. ALS ADA RQ7 STA RQ7 * JSB SEND WRITE REPLY TO QUEX. JMP RLTST ERROR RTN: LINE DISCONNECTED. * LDA DALEN REDUCE TCNT BY DALEN. CMA,INA ADA TCNT STA TCNT SZA,RSS ANY MORE DATA BLOCKS? JMP RLTST NO. GO RELEASE TST ENTRY. * * ALLOCATE A HOLDING CLASS AND WRITE DATA. * LDA BIT15 INITIALIZE CLASS # FOR STA HLDCL NO WAIT. * LDA DBUFA CALCULATE ADDRESS ADA DALEN OF REMAINING DATA. STA DTADR * JSB EXEC WRITE DATA BLOCK TO HOLDING CLASS. DEF *+8 DEF CLS20 DEF D0 DTADR DEF *-* ADDRESS OF REMAINING DATA. DEF TCNT LENGTH OF THIS BLOCK. DEF TCNT DEF D0 DEF HLDCL JMP REJCT ERROR. * LDB TSTAD SET HOLDING CLASS ADB D2 NUMBER IN TST. LDA HLDCL JSB STRWD * JMP GET GET NEXT REPLY. SKP * * SEND A "REJECT" REPLY TO THE 3000 FOR THIS REQUEST. * LOCAL TST STORAGE AREA CONTAINS CURRENT TST 4-WORD HEADER * AND FIXED-FORMAT HEADER FROM CURRENT REQUEST. "TSTAD" * CONTAINS ADDRESS OF TST ENTRY IN S.A.M. * REJCT LDA RQ2 SET REJECT BIT IN REQUEST. IOR BIT14 STA RQ2 LDA RQ7 SET LENGTH OF REPLY. INA CLE,ERA ADA D8 STA RQLEN JMP PUT GO SEND REJECT REPLY & RELEASE TST. SPC 5 * * SUBROUTINE TO SAVE RESOURCES AND TERMINATE UNTIL * RE-SCHEDULED BY QUEX WHEN INTERMEDIATE REPLY ARRIVES. * * * SUBROUTINE TO LOAD FROM ALTERNATE MAP (IF RTE-III OR IV). * LODWD NOP MODI2 LDA B,I (RSS IF DMS SYSTEM) JMP LODWD,I RETURN IF RTE-II. XLA B,I LOAD WORD FROM ALTERNATE MAP. JMP LODWD,I * MWFI MWF NOP SPC 3 * * SUBROUTINE TO STORE INTO ALTERNATE MAP (IF RTE-III OR IV). * STRWD NOP JSB $LIBR NOP MODI3 STA B,I (RSS IF DMS SYSTEM) JMP OUT XSA B,I STORE WORD INTO ALTERNATE MAP. OUT JSB $LIBX DEF STRWD RETURN TO CALLER. SKP * * SUBROUTINE TO WRITE TO QUEX'S I/O CLASS. * SEND NOP * LDA #QXCL IF DISCONNECTED, SSA TAKE ERROR RETURN. JMP SEND,I * JSB EXEC DO CLASS WRITE/READ. DEF *+8 DEF CLS20 NO ABORT. DEF D0 DEF RQBUF REPLY ADDRESS. DEF RQLEN REPLY LENGTH. DEF RQLEN DEF D0 DEF #QXCL I/O CLASS OF QUEX. JMP RLTST ERROR RETURN. * ISZ SEND TAKE NORMAL RETURN. JMP SEND,I RETURN TO CALLER. SKP Pl * ************************************************************** * * * SUBROUTINE TO CONVERT DS/1000 REPLIES TO DS/3000 FORMAT. * * * ************************************************************** * D1000 NOP LDA PARMB ISOLATE STREAM TYPE. AND B377 ADA N4 SUBRACT 4. LDB D3 JSB BNDCK CHECK RANGE: 0 - 3. ADA JTAB1 TABLE ADDRESS + STREAM TYPE. LDA A,I JMP A,I GO TO MESSAGE CLASS PROCESSORS. * JTAB1 DEF *+1 DEF MSCL4 PTOP. DEF MSC8B DEXEC. DEF MSC8A RFA. DEF MSCL3 OPERATOR COMMAND. * ************************************************ * MESSAGE CLASS 3 ..... OPERATOR COMMANDS. * ************************************************ * MSCL3 CLA SET (A) = BYTE COUNT. JMP D1000,I RETURN. * ************************************************ * MESSAGE CLASS 4 ..... PREAD/PWRIT/PCONT.* ************************************************ * MESSAGE CLASS 7, STREAM 21 ..... POPEN/PCLOS.* ************************************************ * MSCL4 LDA PARMB+7 PCLOS REPLY? AND B17 CPA D5 JMP SBC YES. * LDA PARMB+5 MAP DS/1000 ERROR CODES TO DS/3000. LDB BIT15 SET DEFAULT TO "CCE". CPA N41 LDB CL209 MAP -41 TO CCL & 209. CPA N42 LDB CL205 MAP -42 TO CCL & 205. CPA N44 LDB CL213 MAP -44 TO CCL & 213. CPA N45 LDB CL216 MAP -45 TO CCL & 216. STB RQ8 STORE IN DS/3000 REPLY. * LDA SB21 INIT. STREAM TO 100021B. STA RQ2 * LDB MASK IF POPEN REPLY, LDA FCNCD CPA D1 STB RQ33 MOVE MASK WORD TO DS/3000 REPLY. * LDA B26 SET ACCEPT/REJECT STREAM TYPE. LDB PARMB+7 SSB LDA B27 IOR BIT15 SET REPLY BIT. STA RQ2 ELA,CLE,ERA LDB D211 IF REJECT, CPA B27 STB RQ8 STORE CCG & 211. * CLA CLEAR UNUSED WORD. STA RQ9 * LDA PCBA MOVE PCB & TAG. LDB ARQ10 MVW D23 * ISZ INPLC SET "DATA IN PLACE" FLAG. * SBC LDA FCNCD SET REPLY BYTE COUNT. AND B17 ADA N1 ADA JTAB2 LDA A,I RETURN (A) = BYTE CNT W/O DATA. JMP D1000,I * JTAB2 DEF *+1 DEC 52 POPEN. DEC 50 PREAD. DEC 50 PWRIT. DEC 50 PCONT. DEC 0 PCLOS. * ************************************************ * MESSAGE CLASS 8, STREAM 20 ..... RFA. * ************************************************ * MSC8A LDB PARMB+5 MOVE IERR TO "A-REG", IERR. STB RQ8 STB RQ10 * CLA SSB IF ERROR, SKIP RFAMD #. JMP MSCA1 LDB FCNCD IF DCRET OR DOPEN, MOVE CPB D3 RFAMD ENTRY # TO "B-REG" SLOT. LDA PARMB+7 CPB D6 LDA PARMB+7 MSCA1 STA RQ9 * CPB D9 CHECK FOR ADDITIONAL PROCESSING. JMP DREAD CPB D4 JMP DLOCF CPB D10 JMP DSTAT * LDA D6 NONE OF THE ABOVE. JMP D1000,I RETURN WITH (A) = BYTE COUNT. * DREAD LDA PARMB+7 MOVE LEN PARAM. LDB PARMB+5 SSB CLA STA RQ11 LDA D8 JMP D1000,I RETURN WITH (A) = BYTE COUNT. * DLOCF LDA PMB7A MOVE DLOCF PARAMS. LDB ARQ11 MVW D7 LDA D20 JMP D1000,I RETURN WITH (A) = BYTE COUNT. * DSTAT CLA STA RQ8 STA RQ9 LDA D4 JMP D1000,I RETURN WITH (A) = BYTE COUNT. * ************************************************ * MESSAGE CLASS 8, STREAM 21 ..... DEXEC. * ************************************************ * MSC8B DLD PARMB+4 MOVE A&B-REG RETURN VALUES. DST RQ8 * CLA MOVE ADDITIONAL VALUES. LDB FCNCD CPB D11 LDA D5 CPB D13 LDA D2 STA TEMP # ADDITIONAL WORDS. * SZA,RSS JMP FRBC NONE TO MOVE. * LDA PMB7A LDB ARQ10 MVW TEMP * FRBC LDA TEMP FIND RESULTING BYTE COUNT. ADA D2 ALS JMP D1000,I RETURN WITH (A) = BYTE COUNT. SKP * * SUBROUTINE TO CHECK IF INDEX IS WITHIN SPECIFIED RANGE. * (A) = INDEX (PRESERVED) (B) = UPPER LIMIT. * REQUEST IS REJECTED OF OUT OF BOUNDS. * BNDCK NOP STA LOC SAVE A-REGISTER. SSA JMP REJCT REJECT IF NEGATIVE. CMA,INA ADA B SSA JMP REJCT REJECT IF BEYOND LIMIT. LDA LOC RESTORE A-REGISTER. JMP BNDCK,I RETURN. * LOC OCT 0 SPC 3 * * SUBROUTINE TO CHECK IF DATA LENGTH EXCEEDS DS/1000 LIMIT. * LIMCK NOP (A) = TCOUNT: -BYTES OR +WORDS. SSA,RSS JMP LIM1 + WORDS. CMA,INA - BYTES. CONVERT TO +WORDS. INA ARS LIM1 CMA,INA ADA MAXDA SSA JMP REJCT EXCEEDS LIMIT. REJECT. JMP LIMCK,I SKP * * CONSTANTS AND WORKING STORAGE. * D0 DEC 0 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 D7 DEC 7 D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D13 DEC 13 D20 DEC 20 D21 DEC 21 D23 DEC 23 D211 DEC 211 B17 OCT 17 B20 OCT 20 B26 OCT 26 B27 EQU D23 B377 OCT 377 B60K OCT 60000 UP8 BYT 10,0 DECIMAL 8, LEFT BYTE. BIT13 OCT 20000 BIT14 OCT 40000 BIT15 OCT 100000 NOT13 OCT 157777 SB21 OCT 100021 CLS20 DEF 20,I CLS21 DEF 21,I CL205 OCT 040315 CL209 OCT 040321 CL213 OCT 040325 CL216 OCT 040330 N1 DEC -1 N4 DEC -4 N41 DEC -41 N42 DEC -42 N44 DEC -44 N45 DEC -45 CLASS NOP PARM1 NOP PARM2 NOP INPLC NOP SVMCL NOP SVSTR NOP SVFTO NOP TEMP NOP TEMP1 NOP RQLOG NOP RQLEN NOP APLEN NOP DALEN NOP TCNT NOP * PRMBL DEC 31 MAX LENGTH OF DS/1000 REQUEST. PARMB BSS 31 DS/1000 REQUEST BUFFER. PMB7A DEF PARMB+7 PCBA DEF PARMB+8 * TSTAD NOP ADDR OF TST ENTRY IN S.A.M. TSTLN DEC 14 LENGTH OF TST ENTRY. LTSTA DEF STREM ADDR OF LOCAL TST AREA. ******************************************************************** STREM NOP * * DS/1000 STREAM TYPE * LCSEQ NOP * L * LOCAL SEQUENCE NUMBER * HLDCL NOP * O T * HOLDING CLASS NUMBER * NOP * C S * MONITOR CLASS NUMBER * FCNCD NOP * A T * CALL TYPE * MASK NOP * L * MASK WORD FOR POPEN * RQBUF BSS 8 * * DS/3000 FIXED FORMAT HEADER * ******************************************************************** BSS L-8 PLUS REQUEST BUFFER. BSS DBL-L+33 MORE ROOM FOR DATA BUFFER. DABUF EQU RQBUF+33 FWA OF DATA BUFFER AREA. * MAXDA ABS DBL BLKLN ABS D * RQ0 EQU RQBUF RQ2 EQU RQBUF+2 RQ4 EQU RQBUF+4 RQ5 EQU RQBUF+5 RQ7 EQU RQBUF+7 RQ8 EQU RQBUF+8 RQ9 EQU RQBUF+9 RQ10 EQU RQBUF+10 RQ11 EQU RQBUF+11 RQ33 EQU RQBUF+33 * ARQ0 DEF RQ0 ARQ10 DEF RQ10 ARQ11 DEF RQ11 * BSS 0 ******** SIZE OF RPCNV ************ * END RPCNV