ASMB,L,R,C HED RFAM2 * SINGLE DCB - RFA MONITOR * (C) HEWLETT-PACKARD CO. 1977 NAM RFAM,19,30 91740-16003 REV 1740 771019 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. 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 SPC 2 **************************************************************** * * SINGLE DCB VERSION OF RFA MONITOR * * SOURCE PART # 91740-18003 REV 1740 * * REL PART # 91740-16003 REV 1740 * * WRITTEN BY: CHUCK WHELAN * * DATE WRITTEN: DEC 1976 * * MODIFIED BY: * * DATE MODIFIED: * *************************************************************** SPC 2 EXT EXEC,D65GT,D65SV EXT APOSN,CLOSE,FCONT,CREAT,LOCF,NAMF EXT OPEN,POSNT,PURGE,READF,FSTAT,RWNDF EXT WRITF,#NODE SUP * BUFSZ EQU 128 MAXIMUM DATA BUFFER * SPC 3 ICLAS NOP RFAM2 LDA B,I GET THE CLASS STA ICLAS HED RFAM: ACTIVATOR * (C) HEWLETT-PACKARD CO. 1977 * * WE COME HERE INITIALLY AND EACH TIME A REQUEST HAS BEEN PROCESSED. * GO JSB D65GT WAIT FOR A REQUEST TO COME DEF *+6 DEF ICLAS CLASS # DEF REQST BUFFER DEF D14 MAXIMUM LENGTH OF THE INCOMING BUFFER DTBFA DEF DTBFR DATA BUFFER ADDRESS DEF BUFLN MAXIMUM DATA LENGTH JMP ERR53 MUST BE A LENGTH ERROR * STA RQLN SAVE THE REQUEST LENGTH LDA REQST+4 GET THE FUNCTION CODE SSA CHECK FOR VALIDITY JMP ERR25 <0, NO GOOD ADA DM14 CHECK UPPER BOUND SSA,RSS JMP ERR25 >13, NO GOOD EITHER * * SINCE FUNCTION CODE LOOKS OK, WE USE IT AS INDEX IN A TABLE * TO GO TO THE PROPER PREPROCESSING. * CLA STA IERR LDA REQST+4 GET FCODE AGAIN ADA JSBTB LDA 0,I STA CALLI SET UP "JSB" ADR LDA REQST+4 ADA BRNCH ADD TO THE BEGINNING OF THE BRANCH TABLE JMP A,I GO EXECUTE THE PREPROCESSING HED RFAM: ORIENTATION * (C) HEWLETT-PACKARD CO. 1977 * * * WE WILL TRY TO DESCRIBE HERE THE FLOW OF OPERATIONS * IN THIS PROGRAM. * * * * 1. EACH REQUEST IS PROCESSED IN 4 PHASES: * - PREPROCESS * - FMP CALL BUILDING * - EXECUTION OF THE FMP CALL * - POSTPROCESS * * THE CHOICE OF THE PROCESSOR IS MADE EACH TIME BY USING * THE REQUEST CODE AS AN INDEX IN A BRANCH TABLE. * * * 2. PREPROCESSING * THE READER SHOULD FIND IN THE PREPROCESSING BRANCH TABLE * (BRNCH) THE LABEL AT WHICH THE CURRENT PREPROCESS WILL START. * * * * 3. FMP CALL FORMATING. * THE TABLE WE WILL USE TO SELECT A PROCESSOR IS BLDTB. * IN THIS PART WE ONLY SET THE ADDRESSES OF THE PARAMETERS * IN THE CALL BUFFER. * * * 4. POSTPROCESSING * ON COMPLETION OF THE FMP CALL WE GO TO "DONE" WHERE THE * SELECTION OF THE PREPROCESSOR IS DONE THROUGH THE TABLE * PSTBL. * * PST05 USED FOR DNAME AND DPURG * IF THE FILE WAS OPEN BEFORE THE FMP CALL AND THE CALL * WAS EXECUTED WITHOUT ERROR, THE CURRENT RFAMD ENTRY * IS DELETED. * * PST04 USED FOR DCRET * IF THE ICR WAS NOT SPECIFIED IN THIS REQUEST, SET THE * PROPER CRN VALUE IN THE RFAMD ENTRY. * IN ANY CASE, FIND THE RFAMD ENTRY # AND PASS IT TO * THE USER. * * PST00 USED FOR DSTAT * SET THE DATA LENGTH TO 125 WORDS. * * PST02 USED FOR DREAD * SET THE DATA LENGTH * * PST03 USED FOR DOPEN * IF THE ICR WAS SPECIFIED IN THE REQUEST, THE RFAMD * ENTRY # IS SET IN THE REQST, AND THE REPLY IS SENT. * IF THE ICR WAS NOT SPECIFIED IN THE REQUEST, THE * LEGALITY OF THIS OPEN IS CHECKED, AND EITHER: * - REJECTED (ERR -08) THE TYPE OF THE OPEN MAY HAVE * BE RESTORED * - ACCEPTED, THE CRN IS SET IN THE RFAMD ENTRY AND THE ENTRY * NUMBER IS SET IN THE REQST. * THE REPLY IS SENT. * * * 5. IF THE OPERATION WAS A SUCCESSFUL CLOSE, THE CURRENT RFAMD * ENTRY IS DELETED. * * * * HED RFAM: PREPROCESSING * (C) HEWLETT-PACKARD CO. 1977 SPC 3 * * HERE ON A "DCRET" BRN3 LDA %NAME CURRENT DCB ID SZA IS ENTRY AVAILABLE? JMP ERR28 NO, GIVE ERROR -28 * BRN31 LDB FNAMA LDA NAMA MVW D5 SET UP CURRENT ENTRY: NAME, CRN, ID SEG LDA REQST+2 GET ORIGINATOR'S NODE STA %NODE & SAVE IN LOCAL ENTRY JMP BUILD CURRENT ENTRY IS ALL SET! SPC 3 * * HERE ON A DOPEN * BRN4 JSB CKENT SET CRN, CHECK NAME, NODE, AND ID JMP BRN31 OK OR CURRENT ENTRY IS EMPTY SPC 3 * * PROCESSOR FOR FLUSH * BRN6 LDB FNAMA LDA NAMA CMW D3 COMPARE NAME WITH CURRENT ENTRY JMP *+3 MATCHES NOP JMP ERR11 DOESN'T MATCH, GIVE DCB NOT OPEN * LDB REQST+9 CPB DM1 CLOSE ALL? JMP BUILD YES, DO IT CPB %NODE IS IT THE ASSIGNED NODE? JMP BUILD YES, FLUSH IT JMP ERR11 NO, GIVE DCB NOT OPEN SPC 3 * * HERE FOR DPURG AND DNAME * BRN8 JSB CKENT CHECK NAME, NODE, AND ID STA TMPAD VALUE=0 IF NO CURRENT ENTRY JMP BUILD OK TO PROCEED SPC 3 * * * HERE FOR DSTAT. THIS IS A SPECIAL CALL, IT DOES NOT * NEED ANY DCB. SPECIAL TREATMENT. * BRN10 JSB FSTAT DEF *+2 DEF DTBFR STATUS BUFFER * LDB D125 SET THE LENGTH OF THE JMP REPLY+1 DATA BUFFER & RETURN SPC 3 * * ENTER HERE FOR FUNCTIONS WHICH MUST ALREADY HAVE OPEN DCB * BRN1 LDB %NAME LDA REQST+6 CPA %SEQ IS IT CORRECT ENTRY NUMBER? SZB,RSS YES, IS ENTRY STILL OPEN? JMP ERR26 ANSWER TO EITHER IS NO, GIVE -26 SKP SPC 3 * HERE WE BRANCH TO THE PROPER CALL SETUP ROUTINE. * BUILD LDA DCBA STA LDCB INITIALIZE DCB ADDR IN CALL LDA NAMA STA LDCB+2 INITIALIZE ADDR OF FILE NAME ADA D6 STA LDCB+3 INITIALIZE ADDR OF SIZE/OPTNL PARAM LDB PARAM GET ADDR OF PARAMETER DESTINATION LDA REQST+4 GET FCODE AGAIN ADA BLDTB MAP IN "BUILD" TABLE JMP A,I GO PREPARE THE CALL TO FMP * SPC 3 * * CALL BUILDER FOR DWRIT * BLD12 LDA DTBFA STA LDCB+2 SET BUFFER ADDRESS IN CALL INB SPC 3 * * CALL BUILDER FOR DAPOS,DCLOS,DCONT,DPOSN,DWIND,FLUSH * BLD0 LDA RQLN REQUEST LENGTH ADA DM7 COMPUTE # OF PARAMETERS + 1 CAX LDA LENA =REQST+7 * BLDCM DSX DECREMENT COUNT INA,RSS JMP BLD01 DONE MOVING PARAMETER "DEF"S * BLDC2 STA 1,I STORE "DEF" IN CALL SEQUENCE INB JMP BLDCM ITERATE SPC 3 * * CALL BUILDER FOR DCRET * BLD3 LDA TYPEA ADDR OF TYPE STA LDCB+4 * LDB D3 * * THE FOLLOWING PART IS COMMON TO DCRET, DNAME,DOPEN * AND DPURG, IT SETS THE SECURITY CODE AND THE CRN IN THE CALL * BLD31 ADB PARAM COMPUTE ADDR WITHIN CALL LDA SECUA GET ADDRESS OF ISECU STA B,I SET IT IN THE CALL LDA CRA GET ADDRESS OF ICR INB STEP TO NEXT PARAM IN CALL STA B,I SET IT IN THE CALL LDA A,I GET CRN SZA PRESENT ? INB YES, PUSH B TO NEXT JMP BLD01 DONE HERE, GO COMPLETE AND CALL SPC 3 * * CALL BUILDER FOR DLOCF * BLD4 LDX D7 SET COUNTER LDA LENA PARAMETERS START AT REQST+7 JMP BLDC2 GO SET-UP "DEF"S TO PARAMETERS SPC 3 * * CALL BUILDER FOR DNAME * BLD5 LDB D2 LDA TMPAD WAS THE FILE ALREADY OPEN ? SZA JMP BLD31 YES, DCB ADDRESS ALREADY SET JMP BLD81 NO, USE DATA BUFFER AS DCB SPACE. SPC 3 * * CALL BUILDER FOR DOPEN * * BLD6 CLB SET "FILE NOT OPEN" STB %DCB+9 STATUS * LDB D2 JMP BLD31 GO COMPLETE THE CALL SPC 3 * * CALL BUILDER FOR DPURG * BLD8 LDA NAMA GET FILE NAME ADDRESS STA LDCB+2 SET IT IN CALL CLB,INB BLD81 LDA DTBFA GET THE ADDRESS OF THE DATA BUFFER STA LDCB USE IT AS THE DCB ADDRESS FOR THIS CALL JMP BLD31 GO COMPLETE SPC 3 * * CALL BUILDER FOR DREAD * BLD9 LDA REQST+8 REQUESTED DREAD LENGTH CMA,INA ADA BUFLN BUFFER SIZE - REQUESTED LENGTH SSA BUFFER EXCEEDED? JMP ERR53 YES, GIVE LENGTH ERROR LDA DTBFA GET ADDRESS OF DATA BUFFER STA LDCB+2 SET IT IN CALL CLB STB REQST+7 PRE-INITIALIZE RETURNED LENGTH LDA CRA GET ADDRESS OF REQUEST LENGTH LDB LENA ALWAYS PASS LEN BACK. GET ITS ADDR DST LDCB+3 INA LDB A,I GET NUM SZB,RSS PRESENT ? JMP BLD91 NO STA LDCB+5 YES, SET IN CALL CLB,INB GET A 1 BLD91 ADB PARAM FIND RETURN ADDRESS ADB D3 * * WRAP-UP PREPROCESSING * BLD01 STB CALL+1 SET THE RETURN ADDRESS CLA STA 1,I CLEAN OUT REST OF CALL INB CPB RTN MORE? JMP CALL NO, GO EXECUTE FMGR CALL JMP *-4 YES HED RFAM: POSTPROCESSING * (C) HEWLETT-PACKARD CO. 1977 * * POSTPROCESS FOR DNAME AND DPURG * PST05 CLB CPB TMPAD WAS IT AN ALREADY OPEN FILE ? JMP REPLY NO LDA IERR GET COMPLETION CODE SSA,RSS ERROR ? STB %NAME NO, DELETE THE OLD ENTRY JMP REPLY SEND THE REPLY SPC 2 * * POSTPROCESS FOR DCRET AND DOPEN * PST04 LDA IERR SSA ANY ERROR ? JMP CLENT YES, JUST CLEAR OUT CURRENT ENTRY * LDA REQST+8 GET ICR SZA SPECIFIED ? JMP PST41 YES * LDA %DCB NO, GET 1ST WORD OF DCB AND B77 GET DISC LU CMA,INA STA REQST+8 REPLACE IN THE REQST PST41 JSB LUCR TRANSFORM INTO CRN STB %CRN SET IT * ISZ %SEQ BUMP CURRENT SEQUENCE NUMBER NOP LDA %SEQ STA REQST+7 SAVE IT IN REQUEST JMP REPLY SPC 2 * * WE COME HERE AFTER A DREAD * PST02 LDB REQST+7 GET LENGTH OF DATA SSB SKIP IF NOT EOF CLB ELSE DO ZERO LENGTH XFER JMP REPLY+1 SPC 2 * * POST PROCESS FOR FLUSH * PST08 CLA,INA ONE FLUSHED ENTRY STA IERR SET AS COMPLETION CODE * CLENT CLB STB %NAME CLEAN OUT CURRENT ENTRY HED RFAM: SEND REPLY * (C) HEWLETT-PACKARD CO. 1977 * * POST-PROCESSING COMPLETED, SET-UP TO SEND REPLY * REPLY CLB SET FOR NO DATA RETURNED STB LENGT LDA #NODE GET LOCAL NODE # STA REQST+6 SET AS COMPLETION LOCATION LDA IERR SET THE COMPLETION CODE STA REQST+5 IN THE REQST LDA REQST GET THE STREAM TYPE IOR BIT14 SET THE REPLY BIT STA REQST REPLACE * LDA REQST+4 GET THE ICODE ADA LNTBL INDEX IN THE REPLY LENGTH TABLE LDA A,I GET THE LENGTH STA RQLN SET THE LENGTH * * THE REPLY REQST IS READY, SEND IT BACK * JSB D65SV DEF *+5 DEF REQST DEF RQLN REQST LENGTH DEF DTBFR DATA BUFFER DEF LENGT LENGTH * NOP IGNORE THE ERROR RETURN FROM D65SV * * IF THE OPERATION WAS A DCLOS, AND IT WORKED PROPERLY, WE * HAVE TO DELETE THE RFAMD ENTRY. * LDA REQST+4 GET OPCODE FOR THE LAST TIME CPA D1 DCLOS ? CLB,RSS JMP PST06 * * LDA IERR GET COMPLETION CODE SSA,RSS ERROR ? STB %NAME NO, CLEAR OUT CURRENT ENTRY * PST06 LDX DM9 GET A COUNTER CLB GET A 0 PST07 SBX REQST+14 CLEAN THE OPTIONAL AREA ISX JMP PST07 CONTINUE JMP GO GET NEXT REQUEST. HED RFAM: UTILITY ROUTINES * (C) HEWLETT-PACKARD CO. 1977 * * THIS ROUTINE CHECKS FILE NAME, CARTRIDGE REFERENCE, NODE, AND * ID SEGMENT ADDRESS IN THE NEW REQUEST AND RETURNS IF THEY * MATCH THE CURRENT ENTRY * CKENT NOP JSB LUCR CONVERT POSSIBLE LU TO CRN LDA %NAME SZA,RSS CURRENT ENTRY AVAILABLE JMP CKENT,I YES LDA REQST+2 CPA %NODE NODES MATCH? RSS YES JMP ERR28 NO, GIVE NO TABLE SPACE ERROR? SZB,RSS WAS CRN SPECIFIED LDB %CRN NO, USE CURRENT ENTRY'S CRN STB REQST+8 LDB FNAMA LDA NAMA CMW D5 COMPARE NAME,CRN, & ID SEGMENT ADDRS JMP CKENT,I MATCHED OK NOP JMP ERR28 DOESN'T MATCH, GIVE NO TABLE SPACE ERROR * * THIS ROUTINE WILL TRANSFORM A NEGATIVE DISC LU * INTO A CARTRIDGE NUMBER. BOTH INPUT AND RESULTS * ARE PASSED VIA REQST+8. THE RESULT WILL ALSO BE * FOUND IN B REGISTER. IF AN ERROR IS DISCOVERED * WE WILL DIRECTLY JUMP TO THE ERROR ROUTINE. * LUCR NOP LDB REQST+8 SSB,RSS IS IT AN LU? JMP LUCR,I NO * CMB,INB YES, MAKE IT POSITIVE AND STB DTBFR SET UP STATUS CALL. * JSB EXEC GET EQUIPMENT-TYPE CODE DEF *+4 DEF D13I DEF DTBFR USE DTBFR FOR CONWD DEF DTBFR+1 AND EQT5. JMP ERR06 ILLEGAL LU * LDA DTBFR+1 GET EQT5 ALF,ALF AND B77 ISOLATE EQUIP-TYPE CODE LDB REQST+8 IF DVR05 (CTU SYSTEM), CPA D5 RETURN WITH JMP LUCR,I B = -LU. * JSB FSTAT GET INFO ON THE CURRENTLY DEF *+2 MOUNTED CARTRIGES. DBFAD DEF DTBFR SEND THE INFO IN THE DATA BUFFER * LDA DBFAD DCB BUFFER ADDR LP84 LDB 0,I GET W1 OF ENTRY CMB,INB CPB REQST+8 IS IT OUR LU? JMP FND84 YES SZB,RSS END OF TABLE ? JMP ERR06 YES, ILLEGAL DISC LU ADA D4 PUSH THE ADDR TO THE NEXT ENTRY JMP LP84 CONTINUE * FND84 ADA D2 STEP TO THE CRN LDB 0,I GET IT STB REQST+8 SET IT IN THE REQST JMP LUCR,I SPC 3 * * THIS IS THE SKELETON OF THE FMP CALL * PARAM DEF LDCB+2 DEF LDCB CALL JSB CALLI,I CALL FMP ROUTINE NOP DEF RTRN LDCB DEF %DCB ADDRESS OF DCB IF ANY DEF IERR ERROR REP 8 NOP * DONE LDA REQST+4 GET FCODE ADA PSTBL POST-PROCESSING TABLE JMP 0,I JUMP TO POST-PROCESSOR RTN DEF DONE * CALLI NOP ADR OF FMP CALL SPC 3 ERR06 JSB ERRXX DEC -6 ERR11 JSB ERRXX DEC -11 ERR25 JSB ERRXX DEC -25 ERR26 JSB ERRXX DEC -26 ERR28 JSB ERRXX DEC -28 ERR53 JSB ERRXX DEC -53 * ERRXX NOP LDA ERRXX,I STA IERR SET THE ERROR CODE IN THE REPLY JMP REPLY AND SHIP IT. SPC 3 HED RFAM: DATA AREA * (C) HEWLETT-PACKARD CO. 1977 A EQU 0 B EQU 1 SPC 2 **** DEFINE CURRENT OPEN RFAM ENTRY **** %NAME DEC 0,0,0 %CRN NOP %IDSG NOP %NODE NOP %SEQ NOP **** END OF CURRENT ENTRY **** SPC 2 DM14 DEC -14 DM9 DEC -9 DM7 DEC -7 DM1 DEC -1 D1 DEC 1 D2 DEC 2 D3 DEC 3 D4 DEC 4 D5 DEC 5 D6 DEC 6 D13I OCT 100015 D125 DEC 125 BUFLN ABS BUFSZ BIT14 OCT 40000 B77 OCT 77 FNAMA DEF %NAME NAMA DEF REQST+5 ADDR OF THE FILE NAME LENA DEF REQST+7 ADDR OF LENGTH CRA DEF REQST+8 ADDR OF THE ICR SECUA DEF REQST+10 ADDR OF ISECU TYPEA DEF REQST+13 ADDR OF TYPE DCBA DEF %DCB * * VARIABLES LENGT NOP IERR NOP TMPAD NOP RQLN NOP REQUEST LENGTH HED RFAM: TABLES * (C) HEWLETT-PACKARD CO. 1977 BRNCH DEF *+1,I DEF BRN1 DAPOS DEF BRN1 DCLOS DEF BRN1 DCONT DEF BRN3 DCRET DEF BRN1 DLOCF DEF BRN8 DNAME DEF BRN4 DOPEN DEF BRN1 DPOSN DEF BRN8 DPURG DEF BRN1 DREAD DEF BRN10 DSTAT DEF BRN1 DWIND DEF BRN1 DWRIT DEF BRN6 FLUSH * JSBTB DEF *+1 DEF APOSN DEF CLOSE DEF FCONT DEF CREAT DEF LOCF DEF NAMF DEF OPEN DEF POSNT DEF PURGE DEF READF NOP DEF RWNDF DEF WRITF DEF CLOSE FLUSH * BLDTB DEF *+1,I CALL BUILDING TABLE DEF BLD0 DAPOS DEF BLD0 DCLOS DEF BLD0 DCONT DEF BLD3 DCRET DEF BLD4 DLOCF DEF BLD5 DNAME DEF BLD6 DOPEN DEF BLD0 DPOSN DEF BLD8 DPURG DEF BLD9 DREAD NOP DEF BLD0 DWIND DEF BLD12 DWRIT DEF BLD0 FLUSH * SPC 3 LNTBL DEF *+1 REPLY LENGTH TABLE D7 DEC 7 DAPOS DEC 7 DCLOS DEC 7 DCONT DEC 8 DCRET D14 DEC 14 DLOCF DEC 7 DNAME DEC 8 DOPEN DEC 7 DPOSN DEC 7 DPURG DEC 8 DREAD DEC 7 DSTAT DEC 7 DWIND DEC 7 DWRIT DEC 7 FLUSH SPC 3 PSTBL DEF *+1,I POST PROCESSING TABLE DEF REPLY DAPOS DEF REPLY DCLOS DEF REPLY DCONT DEF PST04 DCRET DEF REPLY DLOCF DEF PST05 DNAME DEF PST04 DOPEN DEF REPLY DPOSN DEF PST05 DPURG DEF PST02 DREAD NOP DEF REPLY DWIND DEF REPLY DWRIT DEF PST08 FLUSH HED RFAM: BUFFERS * (C) HEWLET-PACKARD CO. 1977 REQST REP 14 NOP * DTBFR BSS BUFSZ %DCB BSS 144 * SIZE EQU * * END RFAM2