ASMB,Q,C HED 3000 REQUEST CONVERTER (C) HEWLETT-PACKARD CO. NAM RQCNV,19,25 91750-16171 REV.2013 800903 MEF 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,$RNTB,$OPSY,RNRQ,DTACH,PGMAD EXT #RSAX,#TST,#NULL,#LDEF,#TBRN,#RSM,#NODE EXT #RQCV,#QRN,#RPCV,#QXCL EXT D$TST,D$MXR,D$MAX EXT .CAX,.MVW SPC 2 UNL NEXT 5 LINES ARE FOR PRODUCTION ENGINEERING * NAME: RQCNV *SOURCE: 91750-18171 * RELOC: 91750-16171 * PGMR: DMT LST **************************** RQCNV ******************************* * * * SOURCE: 91750-18171 * * * * BINARY: 91750-16171 * * * * PROGRAMMER: JIM HARTSELL * * * * FEBRUARY 14, 1977 * * * *----------------------------------------------------------------* * * * MODIFIED BY DMT BEGINNING NOVEMBER 7, 1978 * * FOR DS/1000 ENHANCEMENTS. * * MODIFIED BY JDH [790222] FOR DS REQUEST * * EQUATED OFFSETS. * * * ****************************************************************** SPC 2 * * RQCNV IS THE INTERFACE TO THE DS/1000 SLAVE MONITORS FOR REQUESTS * ORIGINATING FROM THE HP 3000. ALL INCOMING REQUESTS ARE CONVERTED * TO DS/1000 FORMATS FOR PROCESSING AT THE RTE SYSTEM. * A EQU 0 B EQU 1 XEQT EQU 1717B SUP SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV 2013 791213 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, DINIT, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * DSTIO, LUMAP, #CMGT, INCNV, OTCNV, RMTIO * * RSM, DLGON, #DISM, #DSSM, #MSSM, #SCSM, #UPSM * ****************************************************************** * ***!!!!! THE ORDER OF THE FIRST 8 WORDS (#STR THRU #LVL) IS * ***!!!!! FIXED BY THE REQUIREMENT THAT THE STREAM, ADDRESSES * ***!!!!! ERROR CODES & LEVEL # ALWAYS BE IN THE SAME PLACE, * ***!!!!! REGARDLESS OF MESSAGE FORMAT. THIS ALSO MAKES * ***!!!!! STORE-AND-FORWARD CODE MUCH SIMPLER. * #STR EQU 0 STREAM WORD. #SEQ EQU #STR+1 SEQUENCE NUMBER. #SRC EQU #SEQ+1 SOURCE NODE #. #DST EQU #SRC+1 DEST. NODE #. #EC1 EQU #DST+1 REPLY ECOD1. #EC2 EQU #EC1+1 REPLY ECOD2. #ENO EQU #EC2+1 NUMBER OF NODE REPORTING ERROR. #ECQ EQU #ENO+1 ERROR CODE QUALIFIER (BITS 4 TO 7) #LVL EQU #ECQ MESSAGE FORMAT LEVEL (BITS 0 TO 3) * #MAS EQU #LVL+1 MA "SEND" SEQ. # #MAR EQU #MAS+1 MA "RECV" SEQ. # #MAC EQU #MAR+1 MA "CANCEL" FLAGS #HCT EQU #MAC+1 HOP COUNT #SID EQU #HCT+1 SESSION ID WORD * #EHD EQU #SID LAST ITEM OF HEADER #MHD EQU #EHD+1 MINIMUM HEADER SIZE #REQ EQU #MHD START OF REQUEST SPECIFIC AREA #REP EQU #MHD START OF REPLY SPECIFIC AREA * #MXR EQU #MHD+24 <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>> #LSZ EQU 2 <<< SIZE OF LOCAL APPENDAGE AREA >>> * ****************************************************************** * * GLBLK-END SKP * RFBLK-START * ****************************************************************** * * * R F A B L O C K REV 2013 791119 * * * * OFFSETS INTO DS/1000 RFA MESSAGE BUFFERS, USED BY: * * * * RFMST, RFAM1, RFAM2, REMAT, RQCNV, RPCNV * * * ****************************************************************** * * OFFSETS INTO RFA REQUEST BUFFERS. * #FCN EQU #REQ RFA FUNCTION CODE. #DCB EQU #FCN+1 DCB/FILENAME AREA. #IRC EQU #DCB+3 DAPOS: IREC #IRB EQU #IRC+1 IRB #XIB EQU #IRC+2 IRB (DXAPO) #IOF EQU #IRB+1 IOFF #XIO EQU #XIB+2 IOFF (DXAPO) #ITR EQU #DCB+3 DCLOS: ITRUN #IC1 EQU #DCB+3 DCONT: ICON1 #IC2 EQU #IC1+1 ICON2 #ICR EQU #DCB+3 DCRET,DNAME,DOPEN,DPURG: ICR(1) #ID EQU #ICR+1 IDSEG #ISC EQU #ID+1 ISECU #SIZ EQU #ISC+1 DCRET: ISIZE(1) #SZ2 EQU #SIZ+1 ISIZE(2) #XRS EQU #SIZ+2 RECSZ (DXCRE) #TYP EQU #SZ2+1 ITYPE #XTY EQU #XRS+2 ITYPE (DXCRE) #NNM EQU #ISC+1 DNAME: NNAME #IOP EQU #ISC+1 DOPEN: IOPTN #NUR EQU #DCB+3 DPOSN: NUR #IR EQU #NUR+1 IR #XIR EQU #NUR+2 IR (DXPOS) #IL EQU #DCB+3 DREAD,DWRIT: IL #NUM EQU #IL+1 NUM #LEN EQU #FCN+1 DSTAT: ILEN #FOR EQU #LEN+1 IFORM #OPT EQU #FOR+1 IOP #NOD EQU #ICR+1 "FLUSH" REQUEST: NODE NUMBER * * OFFSETS INTO RFA REPLY BUFFERS. * #RFD EQU #REP DCRET,DOPEN: RFAMD ENTRY # #JSZ EQU #RFD+1 DCRET: JSIZE (DXCRE) #LOG EQU #REP DREAD: XLOG #REC EQU #REP DLOCF: IREC #RB EQU #REC+1 IRB #XRB EQU #REC+2 IRB (DXLOC) #OFF EQU #RB+1 IOFF #XOF EQU #XRB+2 IOFF (DXLOC) #JSC EQU #OFF+1 JSECT #XJS EQU #XOF+1 JSECT (DXLOC) #JLU EQU #JSC+1 JLU #XJL EQU #XJS+2 JLU (DXLOC) #JTY EQU #JLU+1 JTY #XJT EQU #XJL+1 JTY (DXLOC) #JRC EQU #JTY+1 JREC #XJR EQU #XJT+1 JREC (DXLOC) #IAD EQU #REP DSTAT: IADD * * MAXIMUM SIZE OF RFA REQUEST/REPLY BUFFER. * #RLW EQU #MHD+13 M A X I M U M S I Z E ! ! ! * * RFBLK-END SKP * DXBLK-START * ****************************************************************** * * * D E X E C B L O C K REV 2013 800221 * * * * OFFSETS INTO DS/1000 DEXEC MESSAGE BUFFERS, USED BY: * * * * DEXEC, EXECM, EXECW, RQCNV, RPCNV, FLOAD, REMAT * * * ****************************************************************** * * OFFSETS INTO DEXEC REQUEST BUFFERS. * #ICD EQU #REQ ICODE FOR DEXEC(ALL) #CNW EQU #ICD+1 CONWD FOR DEXEC(1,2,3,13) #CWX EQU #CNW+1 DLUEX EXTENSION FOR DEXEC(1,2,3,13) #BFL EQU #CWX+1 IBUFL FOR DEXEC(1,2) #PM1 EQU #BFL+1 IPRM1 FOR DEXEC(1,2) #PM2 EQU #PM1+1 IPRM2 FOR DEXEC(1,2) #ZOF EQU #PM1 Z-BUFFER OFFSET FOR DEXEC(1,2,3,13) #ZLN EQU #PM2 Z-BUFFER LENGTH FOR DEXEC(1,2,3,13) #PR2 EQU #PM2+1 2ND OPT. PARAMETER FOR DEXEC(3) [RTE-L]. #KEY EQU #PR2+1 KEYWORD(RN) FOR DEXEC(1,2,3) [RTE-L]. #PRM EQU #CWX+1 IPRAM FOR DEXEC(3) #PGN EQU #ICD+1 PRGNM FOR DEXEC(6,9,10,12,23,24,99) #INU EQU #PGN+3 INUMB FOR DEXEC(6) #DPM EQU #INU+1 PARMS FOR DEXEC(6) (5-WORD AREA) #PMS EQU #PGN+3 PARMS FOR DEXEC(9,10,23,24)(5-WORD AREA) #IBF EQU #PMS+5 IBUFR FOR DEXEC(9,10,23,24) #IBL EQU #IBF+1 IBUFL FOR DEXEC(9,10,23,24) #FNO EQU #IBL+1 FNOD FOR DEXEC(9) (APLDR) #RSL EQU #PGN+3 IRESL FOR DEXEC(12) #MPL EQU #RSL+1 MTPLE FOR DEXEC(12) #HRS EQU #MPL+1 IHRS FOR DEXEC(12) #MIN EQU #HRS+1 IMIN FOR DEXEC(12) #SEC EQU #MIN+1 ISECS FOR DEXEC(12) #MSC EQU #SEC+1 MSECS FOR DEXEC(12) #PAR EQU #ICD+1 PARTI FOR DEXEC(25) (PARTITION #) #IST EQU #PGN+3 ISTAT FOR DEXEC(99) * * OFFSETS INTO DEXEC REPLY BUFFERS. * #EQ5 EQU #EC1 EQT 5 FOR DEXEC(1,2,3) #XML EQU #EC2 TRANSMISSION LOG (DEXEC 1,2) #RPM EQU #REP PRAMS FOR DEXEC(9,23) (5-WORD AREA) #TMS EQU #REP MSEC FOR DEXEC(11) #TSC EQU #TMS+1 SEC FOR DEXEC(11) #TMN EQU #TSC+1 MIN FOR DEXEC(11) #THR EQU #TMN+1 HRS FOR DEXEC(11) #TDA EQU #THR+1 DAY FOR DEXEC(11) #TYR EQU #TDA+1 YEAR FOR DEXEC(11) #ST1 EQU #REP ISTA1 FOR DEXEC(13) #ST2 EQU #ST1+1 ISTA2 FOR DEXEC(13) #ST3 EQU #ST2+1 ISTA3 FOR DEXEC(13) #ST4 EQU #ST3+1 ISTA4 FOR DEXEC(13) [RTE-L]. #PAG EQU #REP IPAGE FOR DEXEC(25) #IPN EQU #PAG+1 IPNUM FOR DEXEC(25) #PST EQU #IPN+1 ISTAT FOR DEXEC(25) #KST EQU #REP ISTAT FOR DEXEC(99) * * MAXIMUM SIZE OF DEXEC REQUEST/REPLY BUFFER. * #DLW EQU #MHD+11+#LSZ M A X I M U M S I Z E ! ! ! * * MAXIMUM SIZE OF DEXEC/EXECM DATA BUFFER. * #DBS EQU 512 M A X I M U M S I Z E ! ! ! * * DXBLK-END SKP * PPBLK-START * ****************************************************************** * * * P T O P B L O C K REV 2013 791119 * * * * OFFSETS INTO DS/1000 PTOP MESSAGE BUFFERS, USED BY: * * * * POPEN, PTOPM, GET/ACEPT/REJCT, RQCNV, RPCNV, DINIT, REMAT * * #SCSM * ****************************************************************** * * OFFSETS INTO PTOP REQUEST AND REPLY BUFFERS. * #FCD EQU #REP FUNCTION CODE. #PCB EQU #FCD+1 PCB AREA (3 WORDS). #TAG EQU #PCB+3 TAG AREA (20 WORDS). * * MAXIMUM SIZE OF PTOP REQUEST/REPLY BUFFER. * #PLW EQU #MXR M A X I M U M S I Z E ! ! ! * * PPBLK-END SPC 3 * OPBLK-START * ****************************************************************** * * * O P R E Q B L O C K REV 2013 791119 * * * * OFFSETS INTO DS/1000 OPREQ MESSAGE BUFFERS, USED BY: * * * * DMESS, OPERM, RQCNV, RPCNV * * RSM, DLGON, #MSSM, #UPSM * ****************************************************************** * * OFFSETS INTO OPREQ REQUEST AND REPLY BUFFERS. * #CML EQU #REQ COMMAND LENGTH. #CMS EQU #CML+1 COMMAND STRING. #LGC EQU #CMS+1 LOGON REQUEST CODE #LNL EQU #LGC+1 LENGTH OF USER NAME #LUN EQU #LNL+1 LOGON USER NAME * #RLN EQU #REP REPLY LENGTH. #MSG EQU #RLN+1 REPLY MESSAGE. * * MAXIMUM SIZE OF OPREQ REQUEST/REPLY BUFFER. * #OLW EQU #CMS+23 M A X I M U M S I Z E ! ! ! * * OPBLK-END SKP RQCNV LDA $OPSY RAR,SLA IS THIS AN RTE-III OR IV? RSSI RSS YES. JMP GET NO. LDB RSSI GET "RSS" INSTRUCTION. STB MODI2 MODIFY TO DO CROSS-MAP LOAD. STB MODI3 MODIFY TO DO CROSS-MAP STORE. CLB LDA MWII MODIFY TO DO "MWI" DST DMS2 CROSS-MAP MOVE. LDA MWFI MODIFY TO DO "MWF" DST DMS3 CROSS-MAP MOVE. * JSB DTACH DETACH FROM POSSIBLE SESSION. DEF *+1 * ************************************************************ * * * MAIN PROCESSING SECTION FOR ALL REQUESTS FROM THE 3000. * * * ************************************************************ * GET EQU * * JSB EXEC WAIT FOR A REQUEST. DEF *+5 DEF CLS21 DEF #RQCV RQCNV'S I/O CLASS. ARQ0 DEF T+CLS3 3000 REQUEST BUFFER. DEF D$MXR NOP IGNORE ERRORS. * STB RCVLN SAVE ACTUAL # WORDS RECEIVED. CLA CLEAR TST POINTER INTO S.A.M. STA TSTAD STA T+STR1 CLEAR LOCAL TST HEADER. STA T+LSEQ STA T+HCLS STA T+MCLS STA T+FNCD STA T+MASK * LDA D#RQB CLEAR DS/1000 REQUEST BUFFER AREA. STA TEMP LDB C#MXR CMB,INB CLA CLR STA TEMP,I ISZ TEMP INB,SZB JMP CLR * **** EVENTUALLY, BREAK SHOULD BE HANDLED BY REMOTE SESSION MONITOR **** LDA T+CLS3 CHECK FOR MESSAGE CLASS 6, AND B377 STREAM 22 OCTAL (BREAK). ALF,ALF STA B LDA T+STR3 AND B377 IOR B CPA M6S22 JMP SNRP1 YES. JUST SEND A REPLY. * * 3000 SENDS DSLINE REQUEST FOLLOWING HELLO. IT WILL BE STREAM 22, * BUT MAY BE EITHER CLASS 3 OR 7. * CPA M3S22 JMP SNRP1 CPA M7S22 JMP SNRP1 * * CHECK TRANSACTION STATUS TABLE (TST) FOR MATCHING SEQUENCE # * IN 8-WORD FIXED-FORMAT HEADER. A MATCH WILL BE FOUND FOR * RFA/P-TO-P/DEXEC WRITE AND READ CONTINUATIONS. NOTE THAT * THE CONTINUATION BIT IS NOT SET IF THIS IS THE LAST ONE. * DLD #TST GET TST ADDR AND # OF ENTRIES. STA TEMP CMB,INB STB TEMP1 SZA SZB,RSS JMP REJCT REJECT IF NO TST. (SHOULDN'T HAPPEN) * TSTLP LDB TEMP CHECK NEXT ENTRY. JSB LODWD ENTRY IN USE? SZA,RSS JMP NXTST NO. GO ON TO NEXT ENTRY. INB YES. JSB LODWD (CROSS) LOAD LOCAL SEQ. #. CPA T+SEQ3 JMP CONT1 MATCH. GO PROCESS CONTINUATION. * NXTST LDB TEMP BUMP TO NEXT ENTRY. ADB TSTLN STB TEMP ISZ TEMP1 JMP TSTLP * * NO TST ENTRY. PERFORM "GRPM" FUNCTIONS FOR NEW REQUEST. * LDA T+CLS3 IF WORD COUNT BYTE = 8 ALF,ALF AND B377 CPA D8 RSS JMP OK1 LDA T+STR3 AND CONTINUATION BIT IS SET, RAL,RAL THIS IS A RESIDUAL CONTINUATION SSA REQUEST AFTER A TIMEOUT. JMP REJCT * OK1 LDB #NULL SZB,RSS ANY TCBS AVAILABLE? JMP REJCT NO. REJECT. * LDA T+CLS3 GET 3000 MESSAGE CLASS. AND B377 STA TEMP1 LDA T+STR3 GET 3000 STREAM TYPE. AND B377 STA TEMP2 * LDB MAPTB MAP DS/3000 MSG CLASS AND MAPLP STB TEMP STREAM TO DS/1000 STREAM. LDA B,I GET NEXT MAP TABLE ENTRY. CPA N1 JMP REJCT NOT IN TABLE. CPA TEMP1 COMPARE MESSAGE CLASS. RSS JMP NMACH NO MATCH ON THIS ONE. * INB MATCH. LDA B,I COMPARE DS/3000 STREAM TYPE. SZA IF TABLE ENTRY = 0, IT'S A MATCH. CPA TEMP2 NON-ZERO: TEST IT. JMP MATCH MATCH. GO GET DS/1000 STREAM TYPE. * NMACH LDB TEMP BUMP TO NEXT MAP TABLE ENTRY. ADB D3 JMP MAPLP CONTINUE SEARCH. * MATCH INB LDA B,I GET DS/1000 STREAM TYPE. STA T+STR1 * IOR BIT3K ADD 3000 BIT AND STA RQB+#STR STORE IN REQ BUFFER. * LDA T+STR1 ADA #LDEF ADA D2 POINT TO LIST HEADER POINTER. LDB A,I POINT TO LIST HEADER. INB LDA B,I STA T+MCLS SAVE MONITOR'S CLASS #. INB LDA B,I GET FIRST WORD OF NAME. RAL,CLE,ERA SZA,RSS IF MONITOR NOT ENABLED, JMP REJCT REJECT REQUEST. STA NAME SAVE FIRST TWO CHARACTERS. INB GET REST DLD B,I OF NAME. DST NAME+1 STORE. JSB PGMAD GET STATUS. DEF *+2 DEF NAME SZA NOT FOUND OR CPB D4 AVAILABLE MEMORY SUSPEND? JMP REJCT YES. REJECT THE REQUEST. * LDB $RNTA RSS LDB B,I RESOLVE INDIRECT. RBL,CLE,SLB,ERB JMP *-2 LDA #QRN GET QUIESCENT RN. AND B377 ISOLATE TABLE INDEX. ADB A COMPUTE POSITION IN RN TABLE. LDA B,I GET IT. AND B377 SZA QUIESCING? JMP REJCT YES. SEND IT BACK. * STA RQB+#EC1 CLEAR STA RQB+#EC2 UNUSED STA RQB+#ENO DS/1000 STA RQB+#MAS HEADER STA RQB+#MAR WORDS. STA RQB+#MAC STA RQB+#HCT * LDA #NODE STA RQB+#SRC SET SOURCE AND STA RQB+#DST DESTINATION NODES = LOCAL. * CLA,INA STA RQB+#LVL FORMAT LEVEL = 1. * LDA T+PRC3 SET SESSION ID WORD. STA RQB+#SID * JSB #RSAX BUILD TCB FOR THIS STREAM. DEF *+5 DEF D3 DEF D0 PASS ORIGINATORS SEQUENCE # DEF T+STR1 & STREAM DEF RQB+#SRC & ORIGIN NODE #. * SSB OK? JMP REJCT NO. STA RQB+#SEQ YES. STORE SEQ # IN RQB. STA T+LSEQ SAVE FOR TST ENTRY. * INB SET "3K" BIT IN WORD 2 OF TCB. JSB LODWD IOR BIT14 JSB STRWD ADB D2 LDA T+LSEQ STORE "LOCAL SEQ #" AS JSB STRWD "ORIG SEQ #" IN TCB. * LDB #NULL IF WE USED SZB LAST TCB, JMP OK JSB RNRQ LOCK TABLE DEF *+4 ACCESS RN DEF LGNW [GLOBAL LOCK] DEF #TBRN [NO WAIT] DEF TEMP [NO ABORT] * * IF CONTINUATION BIT IS SET IN DS/3000 REQUEST, ALLOCATE * A HOLDING CLASS FOR COLLECTION OF DATA BLOCKS BEFORE * PASSING REQUEST TO DS/1000 MONITOR. * OK LDA T+STR3 BIT 13 OF STREAM WORD RAL,RAL IS CONTINUATION BIT. SSA,RSS JMP CONV NO CONTINUATION. * LDA B1315 INITIALIZE CLASS # FOR STA T+HCLS NO RELEASE & NO WAIT. * JSB EXEC QUICK ALLOCATE - NO ABORT. DEF *+5 DEF CLS19 CLASS CONTROL. DEF D0 LU = "BIT BUCKET" FOR ALLOCATION. DEF D0 DUMMY PARAM FOR ALLOCATION. DEF T+HCLS CLASS NUMBER STORAGE ADDRESS. JMP REJCT ERROR. * JSB EXEC COMPLETE PREVIOUS ALLOC. REQUEST. DEF *+5 DEF CLS21 CLASS GET - NO ABORT. DEF T+HCLS DEF D0 DEF D0 JMP REJCT ERROR. * * CONVERT DS/3000 REQUEST TO DS/1000 FORMAT. * CONV JSB D1000 * STA RQLEN SAVE LENGTH OF DS/1000 REQUEST. * * BUILD ENTRY IN TRANSACTION STATUS TABLE (TST). * DLD #TST FIND EMPTY SLOT (AVAIL. ENTRY). STA TEMP CMB,INB STB TEMP1 BLOOP LDB TEMP CHECK NEXT ENTRY. JSB LODWD CROSS LOAD WORD 1. SZA,RSS ZERO? JMP STTST YES. (B) = ADDR IN S.A.M. * LDB TEMP NO. GO TO NEXT ENTRY. ADB TSTLN STB TEMP ISZ TEMP1 JMP BLOOP JMP REJCT NO AVAILABLE ENTRY. * STTST STB TSTAD SAVE ADDR OF TST ENTRY IN S.A.M. LDA TSTLN LENGTH OF A TST ENTRY. JSB .CAX PREPARE FOR A DMS "MWI". LDA LTSTA GET LOCAL TST AREA ADDRESS. JSB $LIBR NOP DMS2 JSB .MVW MOVE ENTRY TO TST [DMS: "MVI"]. DEF TSTLN NOP JSB $LIBX DEF *+1 DEF *+1 * LDB ARQ0 PREPARE FOR DATA ADDRESS POINTER. LDA T+CLS3 IS THERE DATA? ALF,ALF AND B377 ADB A STB DABUF SET ADDR OF POSSIBLE DATA. ADA N8 CMA,INA LDB T+BYT3 INB BRS ADA B STA DALEN SAVE LENGTH OF DATA (OR ZERO). * * CHECK IF THERE WILL BE A CONTINUATION OF DATA. * LDA T+STR3 CONTINUATION BIT SET IN RAL,RAL DS/3000 REQUEST? SSA JMP CONT2 YES. GO USE HOLDING CLASS. * PUT LDA RQB+#SID IF DESTINATION AND B377 SESSION ID SZA HASN'T BEEN SET, JMP PUT1 LDA #RSM AND THIS NODE RAL,CLE,ERA HAS REMOTE SZA SESSION MONITOR, STA T+MCLS WRITE TO RSM. * PUT1 LDA RQLEN ADD SIZE OF ADA C#LSZ LOCAL APPENDAGE STA RQLEN (MONITOR WILL REMOVE). * * CLASS WRITE THE DS/1000 REQUEST TO REQUIRED MONITOR. * JSB EXEC DO CLASS WRITE/READ. DEF *+8 DEF CLS20 NO ABORT. DEF CONWX CONTROL WORD W/"Z" BIT & "WRITE". DEF DABUF,I DATA ADDRESS. DEF DALEN DATA LENGTH (COULD BE ZERO). DEF RQB REQUEST ADDRESS. DEF RQLEN REQUEST LENGTH. DEF T+MCLS I/O CLASS OF MONITOR. JMP REJCT ERROR RETURN. * JMP GET GO GET NEXT REQUEST. SKP * * PROCESS CONTINUATION REQUEST. * CONT1 LDA TEMP SAVE ADDR OF TST ENTRY IN S.A.M. STA TSTAD * LDA T+CLS3 IF REQUEST IS A ALF,ALF CONTINUATION AND B377 WITHOUT DATA, ADA N8 CLE,ELA CMA,INA ADA T+BYT3 SZA PASS IT TO RPCNV. JMP CONRQ (OTHERWISE PROCESS CONT.) SPC 1 ************************************************************ * * * LET RPCNV HANDLE INTERMEDIATE CONTINUATION REQUESTS FOR * * DREAD/PREAD/DEXEC(1). * * * ************************************************************ * JSB EXEC CLASS WRITE/READ TO RPCNV. DEF *+8 DEF CLS20 NO ABORT. DEF D0 SEND ONLY ONE BUFFER. DEF T+CLS3 DS/3000 CONT. REQ. DEF D8 # OF WORDS. DEF D8 FLAG TO RPCNV. DEF TSTAD TST ENTRY ADDR. DEF #RPCV REPLY CONVERTER CLASS. JMP REJCT ERROR RETURN. JMP GET GET NEXT REQUEST. SPC 1 ************************************************************ * * * SECONDARY SECTION FOR DWRIT/PWRIT/DEXEC(2) WHEN DATA * * RECORD LENGTH IS GREATER THAN 256 WORDS (CONTINUATIONS). * * * ************************************************************ * CONRQ LDA D6 MOVE 1ST 6 WORDS OF TST ENTRY JSB .CAX TO LOCAL TST STORAGE AREA. LDA TSTAD LDB LTSTA JSB $LIBR NOP DMS3 JSB .MVW MOVE: [DMS: "MWF"]. DEF D6 NOP JSB $LIBX DEF *+1 DEF *+1 * JSB #RSAX IS SLAVE TCB STILL AROUND? DEF *+4 DEF D5 DEF T+LSEQ DEF T+STR1 * SSB JMP REJCT NO! REJECT. * LDB ARQ0 YES. SET DATA POINTER & LENGTH. LDA T+CLS3 ALF,ALF AND B377 ADB A STB DABUF ADA N8 CMA,INA LDB T+BYT3 INB BRS ADA B STA DALEN * JMP CONT3 GO STACK THE DATA BLOCK. * * WRITE DS/1000 REQUEST TO HOLDING CLASS. LOCAL TST STORAGE * AREA CONTAINS APPLICABLE TST ENTRY. * CONT2 JSB EXEC WRITE THE DS/1000 REQUEST TO DEF *+8 THE HOLDING CLASS. DEF CLS20 DEF D0 DEF RQB ADDRESS OF REQUEST. DEF RQLEN LENGTH. DEF RQLEN DEF D0 DEF T+HCLS JMP REJCT ERROR. * * WRITE THE DATA BLOCK TO THE HOLDING CLASS. LOCAL TST * STORAGE AREA CONTAINS APPLICABLE TST ENTRY. * CONT3 JSB EXEC WRITE DATA BLOCK TO HOLDING CLASS. DEF *+8 DEF CLS20 DEF D0 DEF DABUF,I ADDRESS OF DATA. DEF DALEN LENGTH OF THIS BLOCK. DEF DALEN DEF D0 DEF T+HCLS JMP REJCT ERROR. * LDA T+STR3 CONTINUATION BIT SET (IS THERE MORE?). RAL,RAL SSA,RSS JMP GATHR NO. GO PREPARE FOR MONITOR. * * SEND INTERMEDIATE REPLY FOR THIS CONTINUATION REQUEST. * LDA T+LSEQ STORE LOCAL SEQUENCE NUMBER. STA T+SEQ3 SNRP1 LDA T+STR3 SET REPLY BIT. IOR BIT15 STA T+STR3 SNREP LDA T+CLS3 SET WDCNT = 8. AND B377 IOR LFT8 STA T+CLS3 LDA T+PRC3 REVERSE PROCESS NUMBERS. ALF,ALF STA T+PRC3 CLA SET N = 0. STA T+BYT3 * LDA #QXCL SSA JMP GET LINE IS DISCONNECTED. IGNORE. * JSB EXEC WRITE "REPLY" TO QUEX'S CLASS. DEF *+8 DEF CLS20 DEF D0 DEF T+CLS3 DEF D8 DEF D8 DEF D0 DEF #QXCL JMP REJCT ERROR. * JMP GET GO WAIT FOR CONTINUATION. * * GATHER DS/1000 REQUEST AND DATA BLOCKS FOR * PASSAGE TO DS/1000 SLAVE MONITOR. * GATHR JSB EXEC GET DS/1000 REQUEST. DEF *+6 DEF CLS21 DEF T+HCLS NO WAIT, NO RELEASE. DEF RQB DEF C#MXR DEF LOG JMP REJCT ERROR. * SSA ANYTHING THERE? JMP REJCT NO. * LDA LOG STA RQLEN SAVE LEN OF DS/1000 REQUEST. * LDA ARQ8 INIT DATA BUFFER POINTER. STA DABUF SET POINTER TO DATA. STA TEMP CLA INIT TOTAL DATA LENGTH. STA DALEN * GDATA CMA,INA SUBTRACT DATA LENGTH ADA D$MAX FROM MAX BUFFER LENGTH STA TEMP1 TO GET REMAINING LENGTH. * JSB EXEC GET A DATA BLOCK. DEF *+6 DEF CLS21 DEF T+HCLS NO WAIT, NO RELEASE. DEF TEMP,I DATA BUFFER POINTER. DEF TEMP1 REMAINING BUFFER LENGTH. DEF LOG JMP REJCT ERROR. * SSA,RSS ANYTHING THERE? JMP ADJST YES. LDA DALEN NO. DID WE GET ANY DATA? SZA,RSS JMP REJCT NO. REJECT. JSB RLEAS YES. RELEASE HOLDING CLASS. JMP PUT GO SEND REQUEST TO MONITOR. * ADJST LDA TEMP ADJUST FOR NEXT DATA BLOCK. ADA LOG STA TEMP LDA DALEN ADA LOG STA DALEN * JMP GDATA GET MORE DATA. SKP * * SEND A "REJECT" REPLY TO THE 3000 FOR THIS REQUEST. * LOCAL TST STORAGE AREA CONTAINS CURRENT TST 6-WORD HEADER * AND FIXED-FORMAT HEADER FROM CURRENT REQUEST. "TSTAD" * CONTAINS ADDRESS OF TST ENTRY IN S.A.M. * REJCT LDB TSTAD DELETE TST ENTRY IN S.A.M. CLA SZB SKIP IF NO TST CREATED. JSB STRWD * LDA T+LSEQ WAS SLAVE TCB CREATED? SZA,RSS JMP HLD NO. * JSB #RSAX YES. DELETE SLAVE TCB. DEF *+4 DEF D7 DEF T+LSEQ DEF T+STR1 * HLD LDA T+HCLS HOLDING CLASS ALLOCATED? SZA JSB RLEAS YES. RELEASE IT. * LDA T+STR3 SET REJECT BIT IN REQUEST. IOR BIT14 AND NBT13 CLEAR CONTINUATION BIT. STA T+STR3 LDA D8 STA RQLEN LDA T+LSEQ STORE LOCAL SEQUENCE NUMBER. STA T+SEQ3 JMP SNREP GO SEND REJECT REPLY. SKP * * SUBROUTINE TO FLUSH AND RELEASE THE HOLDING CLASS. * RLEAS NOP * CREPT CCA SET RELEASE RE-TRY SWITCH STA TEMP TO -1. * CLRTN JSB EXEC RELEASE CLASS NUMBER. DEF *+5 DEF CLS21 NO ABORT. DEF T+HCLS HOLDING CLASS #. DEF D0 DEF D0 RSS * ISZ TEMP RELEASE PROCESSING COMPLETED? JMP RLEND YES. INA,SZA NO. ARE ALL PENDING REQUESTS CLEARED? JMP CREPT NO. CONTINUE TO CLEAR REQUESTS. * LDA T+HCLS YES. SET FOR DE-ALLOCATE. AND CLMSK STA T+HCLS JMP CLRTN DO FINAL DEALLOCATION. * RLEND CLA CLEAR SLOT IN LOCAL TST. STA T+HCLS LDB TSTAD IF TST ENTRY EXISTS, SZB,RSS JMP RLEAS,I ADB D2 CLEAR SLOT THERE, TOO. JSB STRWD JMP RLEAS,I RETURN TO CALLER. SKP * * 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 * MWII MWI * MWFI MWF 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 SKP ************************************************************** * * * SUBROUTINE TO CONVERT DS/3000 REQUESTS TO DS/1000 FORMAT. * * * ************************************************************** * D1000 NOP * * KEY OFF 3000 MESSAGE CLASS NUMBER. * LDA T+CLS3 AND B377 ISOLATE MESSAGE CLASS. ADA N3 SUBRACT 3. LDB D5 JSB BNDCK CHECK RANGE: 0 - 5. ADA JTAB1 TABLE ADDRESS + MESSAGE CLASS. LDA A,I LDB T+STR3 GET DS/3000 STREAM WORD. JMP A,I GO TO MESSAGE CLASS PROCESSORS. * JTAB1 DEF *+1 DEF MSCL3 OPERATOR COMMAND. DEF MSCL4 PREAD/PWRIT/PCONT. DEF MSCL5 $STDLIST/$STDIN. DEF MSCL6 HELLO/BYE/KILL DEF MSCL7 POPEN/PCLOS. DEF MSCL8 RFA/DEXEC. * ************************************************ * MESSAGE CLASS 3 ..... OPERATOR COMMANDS. * ************************************************ * MSCL3 LDA T+BYT3 STORE COMMAND LENGTH. STA RQB+#CML (+ BYTES) INA ARS CONVERT +BYTES TO +WORDS. STA TEMP * CMA,INA CHECK LENGTH AGAINST LIMIT. ADA MXCMD SSA JMP REJCT COMMAND IS TOO LONG. REJECT. * LDA ARQ8 MOVE ASCII COMMAND. LDB CMDA JSB .MVW DEF TEMP NOP * LDA TEMP SET LENGTH OF DS/1000 REQUEST. ADA L#CML JMP D1000,I RETURN. * ************************************************ * MESSAGE CLASS 4 ..... PREAD/PWRIT/PCONT. * ************************************************ * MSCL4 LDA B GET DS/3000 STREAM WORD. AND B377 ISOLATE STREAM. ADA NB22 SUBRACT 22 OCTAL. LDB D2 JSB BNDCK CHECK RANGE: 0 - 2. ADA D2 FORM PTOP FCODE. STA RQB+#FCD STORE IN REQUEST. STA T+FNCD STORE IN TST ENTRY. * LDA ARQ10 MOVE PCB AND TAG FIELD. LDB PCBA JSB .MVW DEF D23 NOP * LDA T+FNCD CPA D4 JMP MSC4A SKIP IF PCONT. LDA T+APN1 CHECK FOR DATA LIMIT. JSB LIMCK STB RQB+#PCB+2 STORE IL PARAM IN RQB. * MSC4A LDA C#PLW SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * ************************************************ * MESSAGE CLASS 5 ..... $STDLIST/$STDIN * ************************************************ * * SEND SHORT DS/1000 HEADER TO CNSLM AND PUT ENTIRE * DS/3000 REQUEST AS DATA BUFFER. * MSCL5 LDA ARQ0 SET CLASS I/O STA DABUF DATA ADDRESS, LDA RCVLN STA DALEN DATA LENGTH, LDA D7 STA RQLEN AND REQUEST LENGTH. JMP PUT1 PASS ON TO "CNSLM". * ************************************************ * MESSAGE CLASS 6 ..... HELLO/BYE/KILL. * ************************************************ * MSCL6 LDA #RSM GET REMOTE SESSION MONITOR'S RAL,CLE,ERA CLASS. IF NOT PRESENT, SZA,RSS REJECT THE REQUEST. JMP REJCT * STA T+MCLS STORE CLASS NUMBER IN TST. LDA T+STR3 AND B377 ISOLATE STREAM. CPA B20 STREAM 20 JMP HELLO IS HELLO. CPA B21 STREAM 21 JMP BYE IS BYE. CPA B27 STREAM 27 JMP BYE IS KILL. JMP REJCT REJECT OTHERS. * HELLO LDA T+BYT3 GET # OF BYTES. ADA N6 SUBTRACT "HELLO". STA RQB+#LNL STORE IN DS/1000 HEADER. SZA IF LENGTH IF ZERO, SSA OR NEGATIVE, JMP REJCT REJECT. INA CONVERT CLE,ERA TO WORDS. STA TEMP * CMA,INA CHECK LENGTH AGAINST LIMIT. ADA MXUSR SSA JMP REJCT ACCOUNT IS TOO LONG. REJECT. * LDA ARQ11 ACCOUNT NAME SOURCE LDB ACTA AND DESTINATION. JSB .MVW MOVE ACCOUNT. DEF TEMP NOP CLA,INA SET ICODE = 1. JMP STCOD * BYE CLA,INA LENGTH OF MSG STA TEMP IS ONE WORD. LDA RQB+#SID STORE DESTINATION SESSION AND B377 IN BUFFER AND STA RQB+#LNL CLEAR DESTINATION XOR RQB+#SID IN SESSION ID WORD. STA RQB+#SID CLA SET ICODE = 0 * STCOD STA RQB+#LGC STORE ICODE. LDA D2 SET COMMAND STA RQB+#CML LENGTH TO 2. LDA "XX" STORE STA RQB+#CMS "XX". LDA TEMP SET UP ADA L#LNL LENGTH. JMP D1000,I RETURN. * ************************************************ * MESSAGE CLASS 7, STREAM 21 ..... POPEN/PCLOS.* ************************************************ * MSCL7 LDA T+APN2 GET DS/3000 "RFA" CODE. AND B377 ADA NB25 SUBTRACT 25 OCTAL. LDB D1 JSB BNDCK CHECK RANGE: 0 - 1. SZA JMP PCLOS * * CONVERT POPEN REQUEST. * LDA POCLO STORE PTOP FCODE STA RQB+#FCD (POPEN WITH CLONE). STA T+FNCD STORE IN TST ENTRY. * LDA ARQ11 MOVE PROGRAM NAME. LDB PCBA JSB .MVW DEF D3 NOP LDA ARQ29 MOVE TAG FIELD. LDB PCBA ADB D3 JSB .MVW DEF D20 NOP * LDA T+AP47 STORE POPEN MASK IN TST ENTRY. STA T+MASK * LDA C#PLW SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * * CONVERT PCLOS REQUEST. * PCLOS LDA D5 STORE PTOP FCODE. STA RQB+#FCD STA T+FNCD STORE IN TST ENTRY. * LDA ARQ11 MOVE PCB. LDB PCBA JSB .MVW DEF D3 NOP * LDA L#PCB SET LENGTH OF DS/1000 REQUEST. JMP D1000,I * ************************************************ * MESSAGE CLASS 8, STREAM 20 ..... RFA. * ************************************************ * MSCL8 LDA B AND B377 CPA B20 RSS JMP STM21 STREAM 21 IS DEXEC. LDA ARQ12 MOVE DCB (GARBAGE FOR DSTAT). LDB NAMA JSB .MVW DEF D3 NOP * LDA T+APNG GET FCN CODE FROM DS/3000 REQUEST. ADA N150 SUBRACT 150. LDB D12 JSB BNDCK CHECK RANGE: 0 - 12. ADA JMAP1 TABLE ADDRESS + 3000 FCN CODE. LDA A,I GET DS/1000 FCN CODE. STA RQB+#FCN STORE IN DS/1000 REQUEST. STA T+FNCD STORE IN TST ENTRY. * ADA JTAB3 TABLE ADDRESS + 1000 FCN CODE. LDB A,I LDA XEQT GET ID SEG ADDR OF RQCNV (DUMMY). JMP B,I GO CONVERT THE RFA REQUEST. * JMAP1 DEF *+1 DS/3000 - DS/1000 FCN MAPPING TABLE. D3 DEC 3 DCRET D8 DEC 8 DPURG D6 DEC 6 DOPEN D12 DEC 12 DWRIT DEC 9 DREAD D7 DEC 7 DPOSN DEC 11 DWIND D1 DEC 1 DCLOS D5 DEC 5 DNAME D2 DEC 2 DCONT D4 DEC 4 DLOCF D0 DEC 0 DAPOS DEC 10 DSTAT * JTAB3 DEF *+1 TABLE OF CONVERSION ROUTINE ADDRESSES. DEF DAPOS DEF DCLOS DEF DCONT DEF DCRET DEF DLOCF DEF DNAME DEF DOPEN DEF DPOSN DEF DPURG DEF DREAD DEF DSTAT DEF DWIND DEF DWRIT * * CONVERT DS/3000 RFA REQUEST TO DS/1000 FORMAT. * DAPOS STA RQB+#DCB LDA T+APN7 MOVE RECNUM PARAM. STA RQB+#IRC LDA T+APN8 MOVE REL BLOCK PARAM. STA RQB+#IRB LDA T+APN9 MOVE BLOCK OFFSET PARAM. STA RQB+#IOF * LDA L#IOF SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DCLOS STA RQB+#DCB LDA T+APN7 MOVE ITRUN PARAM. STA RQB+#ITR LDA L#ITR SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DCONT STA RQB+#DCB DLD T+APN7 MOVE ICON1, ICON2 DST RQB+#IC1 * LDA L#IC2 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DCRET STA RQB+#ID LDA T+AP11 MOVE ICR PARAM. STA RQB+#ICR LDA T+AP10 MOVE ISECU PARAM. STA RQB+#ISC DLD T+APN7 MOVE ISIZE(1), ISIZE(2). DST RQB+#SIZ LDA T+APN9 MOVE ITYPE PARAM. STA RQB+#TYP * LDA L#TYP SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DLOCF STA RQB+#DCB LDA L#DCB SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DNAME STA RQB+#ID LDA T+AP11 MOVE ICR PARAM. STA RQB+#ICR LDA T+AP10 MOVE ISECU PARAM. STA RQB+#ISC DLD T+APN7 MOVE NEWNAME PARAM. DST RQB+#NNM LDA T+APN9 STA RQB+#NNM+2 * LDA L#NNM SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DOPEN STA RQB+#ID LDA T+APN9 MOVE ICR PARAM. STA RQB+#ICR LDA T+APN8 MOVE ISECU PARAM. STA RQB+#ISC LDA T+APN7 MOVE IOPTN PARAM. STA RQB+#IOP * LDA L#IOP SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DPOSN STA RQB+#DCB LDA T+APN7 MOVE NUR PARAM. STA RQB+#NUR LDA T+APN8 MOVE ICR PARAM. STA RQB+#IR * LDA L#IR SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DPURG STA RQB+#ID LDA T+APN8 MOVE ICR PARAM. STA RQB+#ICR LDA T+APN7 MOVE ISECU PARAM. STA RQB+#ISC * LDA L#ISC SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DREAD STA RQB+#DCB LDA T+APN7 MOVE IL PARAM. STA RQB+#IL LDA T+APN9 MOVE NUM PARAM. STA RQB+#NUM * LDA L#NUM SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DSTAT CLA CLEAR STA RQB+#FOR IFORM STA RQB+#OPT AND IOP LDA D125 ILEN IS STA RQB+#LEN 125. * LDA L#XXX SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DWIND STA RQB+#DCB LDA L#DCB SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. .q * DWRIT STA RQB+#DCB LDA T+APN7 MOVE IL PARAM. STA RQB+#IL LDA T+APN8 MOVE NUM PARAM. STA RQB+#NUM * LDA T+APN2 CHECK FOR DATA LIMIT. JSB LIMCK * LDA L#NUM SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * ************************************************ * MESSAGE CLASS 8, STREAM 21 ..... DEXEC. * ************************************************ * STM21 LDA T+APN4 GET RCODE FROM DS/3000 REQUEST. ADA N1 SUBTRACT 1. LDB D12 JSB BNDCK CHECK RANGE: 0 - 12. LDB A STORE RCODE IN TST ENTRY. INB STB T+FNCD STB RQB+#ICD STORE RCODE FOR DS/1000. ADA JTAB4 TABLE ADDRESS + RCODE. LDA A,I JMP A,I GO CONVERT THE DEXEC REQUEST. * JTAB4 DEF *+1 TABLE OF CONVERSION ROUTINE ADDRESSES. DEF DEX1 READ DEF DEX1 WRITE (SAME AS READ) DEF DEX3 I/O CONTROL. DEF REJCT DEF REJCT DEF REJCT DEF REJCT DEF REJCT DEF REJCT DEF DEX10 SCHEDULE DEF DEX11 TIME DEF DEX12 EXECUTION TIME DEF DEX13 I/O STATUS * * CONVERT DS/3000 DEXEC REQUEST TO DS/1000 FORMAT. * DEX1 LDA T+APN5 MOVE ICNWD PARAM. STA RQB+#CNW LDA T+APN6 MOVE IBUFL PARAM. STA RQB+#BFL DLD T+APN7 MOVE IPRM1, IPRM2. DST RQB+#PM1 * LDA T+APN2 CHECK FOR DATA LIMIT. JSB LIMCK * LDA L#PM2 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX3 LDA T+APN5 MOVE ICNWD PARAM. STA RQB+#CNW LDA T+APN6 MOVE IPRAM STA RQB+#PRM * LDA L#PRM SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX10 LDA ARQ13 MOVE PROG NAME & 5 PARAMS. LDB NAMA JSB .MVW DEF D8 NOP * LDA L#PMS SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX11 LDA L#TYR SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX12 LDA ARQ13 MOVE PROGRAM NAME. LDB NAMA JSB .MVW DEF D3 NOP DLD T+APN8 MOVE IRESL, MULT PARAMS. DST RQB+#RSL LDA T+AP10 MOVE IOFST/IHRS PARAM. STA RQB+#HRS SSA JMP DX12A NEGATIVE - DONE WITH THIS ONE. * DLD T+AP11 MOVE MINS, ISECS. DST RQB+#MIN LDA T+AP13 MOVE MSECS. STA RQB+#MSC LDA L#MSC SET LENGTH OF DS 1000 REQUEST. RSS * DX12A LDA L#HRS SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. * DEX13 LDA T+APN5 MOVE ICNWD PARAM. STA RQB+#CNW * LDA L#ST3 SET LENGTH OF DS/1000 REQUEST. JMP D1000,I RETURN. SKP * * SUBROUTINE TO CHECK IF INDEX IS WITHIN SPECIFIED RANGE. * (A) = INDEX (PRESERVED) (B) = UPPER LIMIT. * REQUEST IS REJECTED IF 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 STA B SAVE WORD COUNT IN B-REG. CMA,INA ADA D$MAX SSA JMP REJCT EXCEEDS LIMIT. REJECT. JMP LIMCK,I SKP * * CONSTANTS AND WORKING STORAGE. * * MAPPING TABLE BETWEEN DS/3000 AND DS/1000 STREAM TYPES. * * WORD 1 = DS/3000 MESSAGE CLASS. * WORD 2 = DS/3000 STREAM (0 = DON'T CARE). * WORD 3 = DS/1000 STREAM TYPE. * MAPTB DEF *+1 OCT 3,20,7 RTE COMMANDS - OPERM OCT 4,0,4 SLAVE PREAD/PWRIT/PCONT - PTOPM OCT 5,0,2 UNREQUESTED I/O - CNSLM OCT 6,0,7 HELLO/BYE/KILL - OPERM/RSM OCT 7,21,4 SLAVE POPEN/PCLOS - PTOPM OCT 10,20,6 RTE FMP RFA - RFAM OCT 10,21,5 REMOTE EXEC (DEXEC) - EXECM OCT -1 DELIMITER FOR MAP TABLE. * LGNW OCT 140002 USED FOR RN LOCK POCLO OCT 20001 CODE FOR POPEN WITH CLONE. B20 OCT 20 B21 OCT 21 B377 OCT 377 B1315 OCT 120000 BIT14 OCT 40000 BIT15 OCT 100000 BIT3K OCT 110000 "3K" & LEVEL BITS FOR DS/1K STREAM WORD NBT13 OCT 157777 ALL BUT BIT 13. CLMSK OCT 117777 LFT8 BYT 10,0 DECIMAL 8, LEFT BYTE. CONWX OCT 10100 CLS19 DEF 19,I CLS20 DEF 20,I CLS21 DEF 21,I M3S22 BYT 3,22 CLASS 3, STREAM 22. M6S22 BYT 6,22 CLASS 6, STREAM 22. M7S22 BYT 7,22 CLASS 7, STREAM 22. D20 DEC 20 D23 DEC 23 D125 DEC 125 B27 EQU D23 N1 DEC -1 N3 DEC -3 N5 DEC -5 N6 DEC -6 N8 DEC -8 N150 DEC -150 NB22 OCT -22 NB25 OCT -25 "XX" ASC 1,XX $RNTA DEF $RNTB LOG NOP NAME BSS 3 TEMP NOP TEMP1 NOP TEMP2 NOP RCVLN NOP RQLEN NOP DABUF NOP DALEN NOP * C#PLW ABS #PLW L#CML ABS #CML+1 L#LNL ABS #LNL+1 L#PCB ABS #PCB+3 L#IOF ABS #IOF+1 L#ITR ABS #ITR+1 L#IC2 ABS #IC2+1 L#TYP ABS #TYP+1 L#DCB ABS #DCB+3 L#NNM ABS #NNM+3 L#IOP ABS #IOP+1 L#IR ABS #IR+1 L#ISC ABS #ISC+1 L#NUM ABS #NUM+1 L#XXX ABS #OPT+1 L#PM2 ABS #PM2+1 L#PRM ABS #PRM+1 L#PMS ABS #PMS+5 L#TYR ABS #TYR+1 L#MSC ABS #MSC+1 L#HRS ABS #HRS+1 L#ST3 ABS #ST3+1 C#LSZ ABS #LSZ * C#MXR ABS #MXR MAX LENGTH OF DS/1000 REQUEST. RQB BSS #MXR DS/1000 REQUEST BUFFER. D#RQB DEF RQB NAMA DEF RQB+#DCB PCBA DEF RQB+#PCB CMDA DEF RQB+#CMS ACTA DEF RQB+#LUN * MXCMD ABS #OLW-#CMS MAXIMUM LENGTH OF COMMAND STRING. MXUSR ABS #OLW-#LUN MAXIMUM LENGTH OF ACCOUNT IN HELLO. * TSTAD NOP ADDR OF TST ENTRY IN S.A.M. TSTLN DEC 14 LENGTH OF TST ENTRY. LTSTA DEF T+STR1 ADDR OF LOCAL TST AREA. SPC 1 * OFFSETS INTO LOCAL TST AND DS/3000 REQUEST BUFFER: T EQU D$TST STR1 EQU 0 DS/1000 STREAM LSEQ EQU 1 LOCAL SEQUENCE NO HCLS EQU 2 HOLDING CLASS NO MCLS EQU 3 MONITOR CLASS NO FNCD EQU 4 FUNCTION CODE MASK EQU 5 POPEN MASK WORD CLS3 EQU 6 DS/3000 CLASS STR3 EQU 8 DS/3000 STREAM PRC3 EQU 10 PROCESS NUMBERS SEQ3 EQU 11 SEQUENCE NUMBER BYT3 EQU 13 BYTE COUNT APNG EQU 14 APPENDAGE APN1 EQU 15 APPENDAGE WORD 1 APN2 EQU 16 APPENDAGE WORD 2 APN3 EQU 17 APPENDAGE WORD 3 APN4 EQU 18 APPENDAGE WORD 4 APN5 EQU 19 APPENDAGE WORD 5 APN6 EQU 20 APPENDAGE WORD 6 APN7 EQU 21 APPENDAGE WORD 7 APN8 EQU 22 APPENDAGE WORD 8 APN9 EQU 23 APPENDAGE WORD 9 AP10 EQU 24 APPENDAGE WORD 10 AP11 EQU 25 APPENDAGE WORD 11 AP13 EQU 27 APPENDAGE WORD 13 AP21 EQU 35 APPENDAGE WORD 21 AP47 EQU 61 APPENDAGE WORD 47 * ARQ8 DEF T+APNG ARQ10 DEF T+APN2 ARQ11 DEF T+APN3 ARQ12 DEF T+APN4 ARQ13 DEF T+APN5 ARQ29 DEF T+AP21 * BSS 0 ******** SIZE OF RQCNV ************ * END RQCNV