ASMB,R,L,C HED RFAEX 91700-16125 REV A * (C) HEWLETT-PACKARD CO. 1976 NAM RFAEX,18,30 91700-16125 REV A 760212 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 EXT EXEC IFZ EXT DBUG XIF A EQU 0 B EQU 1 * EXTERNALS FOR REMOTE FILE ACCESS-LEVEL 1 EXT NAMF,FCONT,LOCF,APOSN EXT CREAT,PURGE,OPEN,WRITF EXT READF,POSNT,RWNDF,CLOSE EXT FSTAT EXT D65SV EXT D65CL,#RXCL * SPC 5 * * RFAEX * SOURCE:91700-18125 * BINARY:91700-16125 * SHANE DICKEY * JULY 30,1974 * * DATE MODIFIED : JANUARY 1976 * * MODIFIED BY JEAN-PIERRE BAUDOUIN * * * Z OPTION INCLUDES DBUG PACKAGE SPC 5 RFAEX NOP * * GET THE I/O CLASS FOR THIS MONITOR SAET UP BY LSTEN * START LDA B,I IS P1 = I/O CLASS? IFZ CPA D99 IF 99 GO INTO DBUG JMP *+3 AND TERMINATE-IF REAL CALL- JMP GET * JSB DBUG SET UP DBUG DEF *+1 * JSB EXEC SAVE RESOURCES AND TERMINATE DEF *+4 DEF D6 DEF ZERO DEF D1 * JMP START LSTEN CALL STARTS HERE XIF * * ISSUE GET ON I/O CLASS * GET JSB EXEC THIS GET WILL SUSPEND DEF *+5 RFAEX UNTIL RFAM WRITES DEF D21 IN ITS CLASS DEF #RXCL THE REQUEST PARMB WILL BE DEF IRBUF IN THE IRBUF BUFFER AREA DEF IRBFL * * * PARMB+24=LU * * MOVE FILE NAME TO FSNAM FROM PARMB * * LDB PARMB ADB D6 * JSB PIKUP GET 1ST TWO CHARS STA FSNAM * JSB PIKUP THEN NEXT TWO STA FSNAM+1 * JSB PIKUP STA FSNAM+2 * LDA PARMB ADA D22 * LDB A,I GET CURRENT DCB ADDRESS RSS RESOLVE THE INDIRECT LDB B,I RBL,CLE,SLB,ERB JMP *-2 STB CDCBA * INA INA THEN GET LU # LDB A,I STB FSTLU * * THE ORIGINAL CALL IS RECONSTRUCTED * THE PREPROCESS FLAG IS CHECKED TO DETERMINE * IF THERE IS ANY PREPROCESSING TO BE DONE * AN EXAMPLE OF THIS WOULD BE THE GATHERING OF * A DATA BUFFER BEFORE EXECUTION OF A FILE WRITE * ALSO ERROR CHECKING CAN BE DONE IN PREPROCESS S/R * FOLLOWING THE PREPROCESS THE RECONSTITUTED CALL * IS EXECUTED AND STATUS IS RETURNED TO RFAEX BY FMP * IT IS THE RETURN OF THIS STATUS INFORMA- * TION THAT COMPRISES THE MAJOR PART OF POST- * PROCESSING, OF COURSE OTHER TYPES OF POSTPROCESSES * CAN BE ACCOMPLISHED. AN EXAMPLE IS THE WRITING OF * AN ACQUIRED DATA BUFFER TO THE TERMINAL FOLLOWING * A DATA READ * * * ISOLATE THE FUNCTION CODE LDA PARMB ADA D2 LDA A,I AND MSK0 MASK OUT UPPER BYTE ADA BASE STA FCODE * * * * CLEAR THE JSB BUFFER TO ZEROS AT THE START * LDB DM20 SET UP A COUNTER TO STB CONTR CLEAR 20 WORDS OF THE JSB BUFFER LDA JSBFA TO 0-THEN SET UP START ADDRESS STA AJSBF TO CLEAR CLA LOOP7 STA AJSBF,I CLEAR A WORD * * INCREMENT COUNTERS * * ISZ AJSBF ISZ CONTR JMP LOOP7 IF NOT DONE DO NEXT ONE * * PICK UP THE LU# FROM THE FST AND PUT IT IN FSTLU * * * RECONSTRUCT THE CALL * LDA PARMB BUILD A POINTER TO THE ADA D6 1ST USER PARAMETER IN STA BLOKA PARMB & STORE IT IN BLOKA LDA PRMSA BUILD A POINTER TO THE ASSEMBLY STA APRMS AREA & SAVE IT-ACTUAL PARAMETERS' LDA JSBFA BUILD A POINTER TO THE JSB STA AJSBF ASSEMBLY AREA LDA FCODE GET FCODE TO CHECK IF IT IS IN THE ADA M1 THE GOOD RANGE. SSA JMP CODER FCODE < 150, ERROR ADA M13 SSA,RSS JMP CODER FCODE > 162, ERROR * LDA FCODE USE CODE AS INDEX IN THE FMGR ADA JSBTA ROUTINES TABLE ADA M1 LDA A,I PICK UP THE ADDRESS OF THE STA AJSBF,I S/R THAT WILL SERVICE ISZ AJSBF THIS REQUEST AND PUT IT ISZ AJSBF IN THE JSB TABLE SPC 2 * AFTER PUTTING IN THE JSB STEP PAST DEF RETURN *(THIS WILL BE COMPUTED AND FILLED IN LATER) * INITIALIZE PARAMETER COUNTER TO DO SAME * * CLA THIS WILL BE INCREMENTED STA PRCNT SPC 2 * BEFORE THE BUFFER IS BUILT FROM PARMB IT MAY * NEED A "MASSAGE" THIS WILL PICK UP ODD-BALL * PARAMETERS LIKE DCB WORK AREA POINTERS THAT * ARE NOT IN THE PARMB REQUEST-THE FOLLOWING * CODE ISOLATES THE ADDRESS OF THIS "MASSAGE" S/R * AND TRANSFERS TO IT. * * LDA PREPA ADA FCODE * * EXECUTE PREPROCESSING S/R * LDB D6 SET UP ERROR REGISTER LDA A,I JSB A,I * * * * PICK UP THE LOCATION OF THE NEXT CONTROL BYTE * JSB PRE7 COMPUTE "DEF RTRN" AS LAST STEP * * THE CALLING SEQUENCE IS COMPLETE-EXECUTE IT!!! * SET THE NO DATA TO BE RETURNED FLAG-NOMINAL CASE * * CLA STA DATA2 SPC 3 * EXECUTE THE CALL * * JSB JSBUF-1 STA SAVEA SAVE A AND B REGISTERS TO PASS THEM BACK TO STB SAVEB THE USER IN WORDS +2 AND +3 OF THE REPLY PARMB. SPC 2 * AFTER THE REQUEST IS EXECUTED THE POST PROCESSING * S/R WILL BE EXECUTED IN A MANNER ANALOGOUS TO THAT * SHOWN ABOVE FOR PREPROCESSING * * SET UP & CALL S/R THAT CONTROLS POSTPROCESSING * * LDA PSTPA ADA FCODE INDEX IN THE POST PROCESSING TABLE LDA A,I GET THE PROPER ADDRESS JSB A,I GO EXECUTE THE ROUTINE * * RETURN IERR TO RFAM THROUGH CDCB FOR POSTPROCESSING * OF ALL REQUESTS EXCEPT FSTAT (NO DCB IN CDCB) * LDA FCODE GET REQUEST TYPE CPA D13 IS IT A FSTAT CALL? JMP PAST YES SKIP IT LDA FERR GET IERR AS RETURNED LDB CDCBA GET CDCB ADDRESS ADB D145 STEP TO IERR WORD STA B,I AND STORE SPC 2 * IF THE DATA FLAG IS SET THE DATA MUST BE * RETURNED BEFORE THE STATUS REPLY CAN BE SENT BACK * IS THIS A REQUEST FROM A MOD BBL TERMINAL? * IF SO NO REPLY CAN BE RETURNED * * PAST LDA DATA2 SZA * * DETERMINE WHICH TYPE OF REPLY IS TO BE RETURNED * JMP *+3 JSB SDREQ JMP QUITS JSB SDATA SEND THE DATA BACK JSB SDREQ SEND THE PREV FORMATTED REQUEST * * * TERMINATE. THIS WILL REACTIVATE RFAM WHICH IS WAITING * ON A SCHEDULE (RFAEX) WITH WAIT. * * QUITS JSB EXEC DEF *+2 DEF D6 HED RFAEX: PREPROC. * (C) HEWLETT-PACKARD CO. 1976 SPC 5 PRE1 NOP * THIS S/R INSERTS DCB & IERR INTO CALL * LDA CDCBA PICK UP THE DCB ADDRESS INA STEP PAST FLAG WORD STA AJSBF,I ISZ AJSBF STORE IT & INCREMENT POINTER LDA FERRA PICK UP THE ERROR POINTER STA AJSBF,I & STORE IT * ISZ AJSBF * ISZ PRCNT INCREMENT THE PRAMETER COUNT ISZ PRCNT * LDA BLOKA PICK UP THE CONTROL BYTE ADDRESS IOR MSK5 ADD JUSTIFICATION FLAG STA PRAM1 JMP PRE1,I SPC 5 PRE2 NOP * INSERT DATA BUFFER RECORD ADDRESS LDA DABFA PICK UP DATA BUFFER ADDRESS STA AJSBF,I AND INSERT IT IN THE NEXT JSB ISZ AJSBF BUFFER SLOT-INCREMENT JSB BUFR ISZ PRCNT POINTER & PARAMETER COUNT * NOTE PRAM1 HASN'T BEEN SET UP JMP PRE2,I SPC 5 PRE3 NOP * USED FOR CREATE,PURGE,OPEN,RENAME JSB PRE1 INSERT DCB & IERR JSB STAND ADD STANDARD PARAMETERS JMP PRE3,I SPC 5 PRE4 NOP * MOVE PARMB POINTER PAST FILE NAME LDA BLOKA ADA D3 STA BLOKA * GETCB SETUP STA PRAM1 JMP PRE4,I SPC 5 * PRE5 NOP * USED FOR POSITION RECORD,CLOSE FILE,FILE CONTROL * LOCATE RECORD,ABS. PON RECORD JSB PRE1 INSERT DCB,IERR JSB PRE4 MOVE POINTER PAST FILE NAME * IS THIS CALL FOR RLOCF? IF NOT NEED ONLY * SET UP STANDARD PARAMETERS AND EXIT LDA FCODE PICK UP THE REQUEST FUNCTION CPA D11 CODE AND COMPARE TO 11 (RLOCF) RSS JMP PRE5A * SET UP THE STORAGE FOR THE 7 RETURNED RLOCF * PARAMETERS AND EXIT * LDA DM7 STA CONTR * LDA LOBSA LOOPL STA AJSBF,I INA ISZ AJSBF ISZ PRCNT ISZ CONTR JMP LOOPL JMP PRE5,I & RETURN * SET UP TO STRIP THE STANDARD PARAMETERS PRE5A JSB STAND JMP PRE5,I SPC 5 * PRE6 NOP * WRITE PREPROCESS S/R JSB PRE1 INSERT DCB & ERROR ADDRESS JSB PRE2 INSERT DATA RECORD ADDRESS JSB PRE4 MOVE PAST NAME JSB STAND GET STANDARD PARAMS JSB PRE8 READ DATA RECORD JMP PRE6,I & RETURN SPC 5 * PRE7 NOP * THIS IS THE LAST PREPROCESSING S/R CALLED * BY EACH REQUEST * IT COMPUTES "DEF RTRN" LDA JSBFA PICK UP THE ADDRESS OF THE ADA PRCNT JSB BUFFER & ADD THE # OF PARMS ADA D2 ALREADY INSERTED THEN ADD 1 FOR LDB JSBFA THE DEF RTRN & 1 FOR1ST FREE INB WORD THE FIND SLOT FOR DEF RTRN STA B,I AND INSERT IT FINALLY JMP PRE7,I RETURN SPC 5 PRE8 NOP * CHECK THE RECORD SIZE JSB SIZE * IT IS OK SO SET UP TO READ THE DATA * SET UP EXACT WORD LENGTH LDA PARMB ADA D5 LDA A,I STA IDBFL * * BUILD MODE LDA FSTLU GET THE COMM. LU AND MSK2 KEEP ONLY THE LU IOR MSK3 INSERT DATA ONLY CODE STA IMODE SAVE FOR D65CL CALL * PICK UP THE DATA * * JSB D65CL DEF *+7 DEF IRWR READ REQUEST DEF IMODE DEF DABUF DATA BUFFER DEF IDBFL BUFFER LENGTH DEF IRBUF+33 PASS TIME-TAGS TO DRIVER DEF IRBUF+34 * JMP ABERR ERROR RETURN * JMP PRE8,I NO,RETURN SPC 5 SPC 5 PRE10 NOP JSB PRE1 GET DCB & ERROR LOC JSB PRE2 GET DATA RECORD ADDRESS JSB PRE4 MOVE POINTER PAST NAME JSB STAND GET STANDARD PARAMETERS JSB SIZE * IF IT PASSES MUSTER THEN THE REQUEST IS COMPLETE * AND LOOKS OK SO EXIT BACK TO TO EXECUTE THE REQUEST JMP PRE10,I SPC 5 PRE11 NOP * USED FOR STATUS JSB PRE2 LDA D124 STA IDBFL JMP PRE11,I HED RFAEX: POST PROC. * (C) HEWLETT-PACKARD CO. 1976 PST1 NOP * NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL * REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM * USED BY ALL REMOTE FMP & EXEC CALLS * NOTE THAT THERE ARE NO CONTROL BYTES * IN THE RETURNED BUFFER LDA PARMB PICK UP THE ADDRESS TO RETURN ADA D2 THE VALUES TO STA BLOKA * LDA SAVEA PICK UP SAVED A REG CONTENTS STA BLOKA,I ISZ BLOKA LDA SAVEB PICK UP SAVED B REG CONTENTS STA BLOKA,I ISZ BLOKA * ADJUST THE RETURNED PARAMETER COUNT LDA D4 STA RPCNT JMP PST1,I SPC 5 PST2 NOP * SET THE DATA COUNT * GET THE TRANSMISSION LOG LDA JSBFA ADA D6 LDA A,I LDA A,I STA BLOKA,I ISZ BLOKA ISZ RPCNT * * SET THE DATA TOO FLAG * CLA,INA STA DATA2 JMP PST2,I SPC 5 PST4 NOP JSB PST1 * RETURN THE 124 WORD DISC DIRECTORY FROM LOGICAL * UNIT # 2 FOR THE FILE STATUS FMP COMMAND * SET THE DATA TOO FLAG CLA,INA STA DATA2 JMP PST4,I SPC 5 PST6 NOP * RETURN IERR LDA FERRA,I STA BLOKA,I ISZ BLOKA ISZ RPCNT JMP PST6,I SPC 5 * PST7 NOP * RETURN A & B & IERR JSB PST1 JSB PST6 JMP PST7,I SPC 5 PST10 NOP * READ POST-PROCESSER JSB PST7 JSB PST2 JMP PST10,I SPC 5 PST12 NOP * THIS S/R RETURNED FIVE OPTIONAL LOCATION PARAMS * THE CALL IS SEARCHED AND A PARAMETER IS ASSEMBLED * FOR EACH DEF IN THE CALL THE PROCESS ENDS WHEN A * ZERO IS ENCOUNTERED IN THE JSB BUFFER JSB PST7 FIRST PUT IN A,B,IERR * LDA DM7 STA CONTR * LDB LOBSA LOOP9 LDA B,I * STA BLOKA,I * INB ISZ BLOKA ISZ RPCNT ISZ CONTR JMP LOOP9 JMP PST12,I SPC 5 SPC 5 HED RFAEX: EXEC PREPROC. * (C) HEWLETT-PACKARD CO. 1976 SPC 5 SPC 5 HED RFAEX: UTILITY S'R'S * (C) HEWLETT-PACKARD CO. 1976 STUFF NOP * NOTE THAT THE E REG NEED BESET UP AT THE START ONLY * THEREAFTER (SINCE THE CHARACTERS ARE PICKED UP IN * PAIRS) THE START OF EACH WORD IS IN THE * RELATIVE LOCATION-& THUS E IS OK FOREVERMORE * INCREMENT NUMBER OF ASSEMBLED PARAMETERS * CHECK THE CHAR COUNT FOR "EVENESS" LDB D10 SET UP THE ERROR REGISTER LDA PRMLP SLA JMP ERR ISZ PRCNT * THE LOOP COUNTER IS ALREADY TO GO-PRMLP LDA APRMS PICK UP THE ADDRESS OF THE STA AJSBF,I PARAMETER TO BE BUILT & PUT * IT IN THE JSB BUFFER * INCREMENT "DEF PARAM" POINTER (JSB BUFFER) ISZ AJSBF * * NOW THE INITIAL CHARACTER MUST BE LOCATED LDA BLOKA PICK UP 1ST CHAR LOCATION SSA RIGHT JUSTIFIED? CCE,RSS NO-SET E REG TO 1 CLE YES-SET E REG TO 0 * NOW CLEAR BYTE POINTER AND MSK1 CLEAR SIGN & STORE STA BLOKA POINTER TO NEXT PARAMETER * PICK UP 1ST CHARACTER AGAN4 LDA BLOKA,I PICK UP 1ST CHAR OF PAIR SEZ,RSS AND LEFT JUSTIFY IT ALF,ALF IF REQUIRED AND MSK6 STA PRM4 * PICK UP 2ND CHAR SEZ,RSS HAVE WE CROSSED A WORD BOUNDARY? * NOTE 2ND CHAR IS OPPOSITE JUSTIFICATION OF 1ST 1 ISZ BLOKA YES-INCREMENT SOURCE ADDRESS * LDA BLOKA,I PICK UP CHAR & RIGHT JUSTIFY IT SEZ,RSS IF REQUIRED BEFORE THE MERGING ALF,ALF OF THE TWO CHARS. AND MSK0 * NOW MERGE THE TWO CHARS & STORE THEM IOR PRM4 STA APRMS,I ISZ APRMS * NOW A "DEF PRAM" & AT LEAST ONE PARAM WORD * HAVE BEEN ASSEMBLED-DETERMINE IF THERE ARE * MORE CHARACTERS IN THIS STRING SEZ HAVE WE CROSSED A WORD BOUNDARY ? ISZ BLOKA YET-IF SO INCREMENT STORAGE ISZ PRMLP INCREMENT THE ISZ PRMLP CHARACTER COUNT-ARE THERE MORE? JMP AGAN4 YES-SET UP TO GET TWO MORE * WE ARE DONE WITH THIS CHAR SET UP ADDRESS OF * NEXT CONTROL CHAR TO BE EXTRACTED BY GETCB * LDA BLOKA PICK UP CONTROL CHAR ADDRESS-NOW SEZ IS IT IN THE HIGH ORDER BYTE? IF IOR MSK5 LEFT JUSTIFIED BIT 15=1 & SET IT STA PRAM1 UP FOR THE GETCB CALL TO FOLLOW JMP STUFF,I AND EXIT SPC 5 SDREQ NOP SEND THE REPLY WITH STATUS * AS A REQUEST * * SET THE PARMB RETURN FLAG LDA IRBUF PICK UP THE STREAM TYPE IOR MSK7 OR IN THE REPLY FLAG STA IRBUF & RETURN TO THE PARMB AND B4000 ISOLATE THE F BIT LDB IRBFL GET F LENGTH (35) SZA,RSS F BIT SET ? LDB RPCNT NO, GET SHORT, COMPUTED LENGTH STB LENGT SAVE * * THIS S/R ASSUMES THAT PREVIOUS POST PROCESSING * S/R HAVE SET UP THE REQUEST BUFFER TO BE SENT * IN REPLY TO THE ORIGIONAL REQUEST LDA FSTLU GET COMM. LU AND MSK2 STA IMODE * REPLIES ARE TRANSMITTED SPECIAL OPEN LOOP * & NO DMA AT THE TERMINAL IS ASSUMED JSB D65SV SEND REQUEST REPLY TO TERMINAL DEF *+7 DEF IRWW DEF IMODE DEF IRBUF DEF LENGT BUFFER LENGTH DEF DUMMY DEF DUMMY * JMP ABERR ERROR RETURN * JMP SDREQ,I NO, RETURN SPC 5 SIZE NOP * FIRST PICK UP THE # OF DATA WORDS LDA PARMB ADA D5 LDA A,I * IS IT ZERO-ERROR IF IT IS SZA,RSS JMP ERR1 * IS IT NEGATIVE-ERROR IF IT IS SSA JMP ERR1 * IT'S POSITIVE BUT IS IT GREATER THAN 128 WORDS * LONG?-ERROR IF IT IS STA IDBFL SAVE DATA BUFFER LENGTH CMA,INA ADA DABFL SSA JMP ERR1 JMP SIZE,I SPC 5 SDATA NOP * * SET UP THE TRANSMIT DATA ONLY CALL MODE * AND INSERT IT IN THE CALL * LDA FSTLU GET COMM. LU AND MSK2 IOR MSK3 SEND DATA ONLY STA IMODE * * EXECUTE THE CALL JSB D65CL DEF *+7 DEF IRWW WRITE DEF IMODE DATA ONLY DEF DABUF DATA BUFFER DEF IDBFL BUFFER LENGTH DEF IRBUF+33 PASS TIME-TAGS TO DRIVER DEF IRBUF+34 * JMP ABERR ERROR RETURN * JMP SDATA,I NO, RETURN SPC 5 SPC 3 CODER LDB MD25 JMP ERR SPC 3 * * D6 PREPROCESSING ERROR * D7 POSTPROCESSING ERROR * D11 SIZE ERROR ERR STB SAVEB * * NOTE THAT THE RETURN IS BUILT IN THE ORIGINAL * REQUEST BUFFER BEHIND DATA TYPE & SUBSTREAM * USED BY ALL REMOTE RFA CALLS * NOTE THAT THERE ARE NO CONTROL BYTES * IN THE RETURNED BUFFER * DETERMINE IF THIS ERROR OCCURED DURING AN RFA READ * OR WRITE IF SO A STOP COMMAND MUST BE SENT TO CLEAR OUT * THE DATA RECORD ON THE LINE LDA PARMB ISOLATE THE FUNCTION CODE ADA D2 LDA A,I AND MSK0 ADA BASE NORMALIZE IT CPA D4 IS IT A 4 (REMOTE WRITE) JMP STOP YES SEND STOP CPA D5 NO-IS IT A 5 (REMOTE READ) JMP STOP YES SEND STOP-ALL OTHERS CONTINUE JMP GO OTHERWISE BUILD ERROR REPLY STOP LDA FSTLU GET COMM. LU AND MSK2 STA FSTLU * JSB D65CL SEND STOP DEF *+7 DEF ICR CONTROL REQUEST DEF FSTLU STOP DEF DUMMY DEF DUMMY DEF DUMMY DEF DUMMY * JMP ABERR ERROR RETURN * GO LDA PARMB ADA D2 THE VALUES TO STA BLOKA * * SET UP A -1 FOR THE A REG. RETURN * THIS WILL ALERT THE TERM. THAT AN ERROR REPLY * IS BEING SENT LDA SAVEA STA BLOKA,I ISZ BLOKA * PICK UP THE B REG. (ERROR TYPE) LDA SAVEB STB IRBUF+4 SAVE THE ERROR CODE IN THE ERROR RETURN OF THE PARMB * * SET THE REPLY FLAG LDA IRBUF PICK UP THE STREAM WORD IOR MSK7 OR IN THE REPLY FLAG STA IRBUF & RESTORE TO THE BUFFER AND B4000 ISOLATE THE F BIT LDB IRBFL GET F LENGTH (D35) SZA,RSS F BIT SET ? LDB D25 NO, GET SHORT LENGTH STB LENGT SAVE FOR CALL * LDA FSTLU SET UP DRIVER MODE AND MSK2 STA IMODE * REPLIES ARE TRANSMITTED SPECIAL OPEN LOOP * & NO DMA AT THE TERMINAL IS ASSUMED * JSB D65SV SEND REQUEST REPLY TO TERMINAL DEF *+7 DEF IRWW WRITE DEF IMODE DEF IRBUF DEF LENGT DEF DUMMY DEF DUMMY * JMP ABERR ERROR RETURN * * LDA SAVEB GET ERROR CODE AGAIN ABEND LDB CDCBA GET ADDRSS OF CURRENT DCB ADB D145 STEP TO ERROR WORD STA B,I SAVE ERROR CODE JSB EXEC TERMINATE TO REACTIVATE RFAM DEF *+2 DEF D6 SPC 5 ERR1 LDA D11 JMP ERR SPC 5 ABERR DST SSA SAVE DRIVER ERROR RETURN * OUTPUT ERROR MESSAGE * LDA B CONVERT ERROR # IOR B#60 TO ASCII STA COMER+6 FOR OUTPUT * JSB EXEC OUTPUT ERROR MESSAGE DEF *+5 DEF D2 DEF D1 DEF COMER DEF COMEL *