ASMB,R *USE 'ASMB,R,N' (RTE-M II) OR 'ASMB,R,Z' (RTE-M III) * * IFN OPTION * NAME: $MEX2 * SOURCE: 92064-18007 * RELOC: PART OF 92064-16002 * PROGMR: E.J.W. BASED ON RTE-III VERSIONS G.A.A.,L.W.A.,D.L.S. * * IFZ OPTION * NAME : $MEX3 * SOURCE: 92064-18007 * RELOC: PART OF 92064-16003 * PROGMR: E.J.W. BASED ON RTE-III VERSIONS G.A.A.,L.W.A.,D.L.S. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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. * * **************************************************************** * * IFN * BEGIN NON-DMS CODE *************** NAM $MEX2 92064-16002 REV.2001 791012 *** END NON-DMS CODE *************** XIF IFZ ***** BEGIN DMS CODE *************** NAM $MEX3 92064-16003 REV.2001 791012 ******* END DMS CODE *************** XIF * * ENT EXEC,$ERMG,$RQST ENT $LIBR,$LIBX ENT $ERAB,$PVCN,$REIO,$RSRE,$ABRE ENT $PWR5,$SGAF SPC 1 IFZ ******* BEGIN DMS CODE ******** ENT $MVBF EXT $MATA,$MRMP,$MSBF ******* END DMS CODE ********** XIF SPC 1 * EXT $CVT3,$SYMG,$LIST,$XEQ EXT $RENT,$ABRT,$IDNO EXT $CGRN,$ALC,$RTN SPC 1 IFN * BEGIN NON-DMS CODE *************** EXT .MVW *** END NON-DMS CODE *************** XIF SPC 1 SUP A EQU 0 B EQU 1 MIC SVR,105620B,2 MIC RSR,105621B,2 * ***** < EXEC > PROGRAM DESCRIPTION ***** * * THE PRIMARY FUNCTION OF THIS PROGRAM IS * TO PROVIDE GENERAL CHECKING AND EXAMINATION * OF SYSTEM SERVICE REQUESTS AND TO CALL THE * APPROPRIATE PROCESSING ROUTINE IN OTHER * SECTIONS OF THE REAL-TIME EXECUTIVE. * * THIS PROGRAM IS CALLED DIRECTLY FROM THE * CENTRAL INTERRUPT CONTROL SECTION * WHEN A MEMORY PROTECT VIOLATION IS ACKNOWLEDGED. * ALL SYSTEM REQUESTS BY A USER PROGRAM CAUSE A * PROTECT VIOLATION. * * SYSTEM REQUEST FORMAT: * ---------------------- * * THE GENERAL FORMAT OF A SYSTEM REQUEST IS * A BLOCK CONTAINING AN EXECUTABLE INSTRUCTION * TO GAIN ENTRY TO THE EXECUTIVE AND AN ADDRESS * LIST OF PARAMETERS. THE FIRST PARAMETER IS * A NUMERIC CODE IDENTIFYING THE REQUEST TYPE. * THE LENGTH OF THE PARAMETER LIST VARIES * ACCORDING TO THE AMOUNT OF INFORMATION RE- * QUIRED FOR EACH REQUEST (OR VARIATIONS WITHIN * A SINGLE REQUEST). THIS FORMAT ALLOWS SYSTEM * REQUESTS TO BE SPECIFIED IN A FORTRAN CALL * STATEMENT IN ADDITION TO ASSEMBLY LANGUAGE FORMAT. * * CALL EXEC (P1,P2,...PN) * * OR * * EXT EXEC * JSB EXEC (CAUSES MEMORY PROTECT VIOLATION) * DEF *+1+N DEFINE EXIT POINT, N= # PARAMETERS * DEF RCODE DEFINE REQUEST CODE * DEF P1 DEFINE PARAMETER LIST, 1 TO N * . * . (PARAMETERS MAY BE INDIRECTLY * . REFERENCED, E.G. DEF P3,I) * DEF PN * - EXIT POINT - * * RCODE DEC N * P1 DEC/OCT/DEF,ETC TO DEFINE A VLAUE * * * RE-ENTRANT LIBRARY REQUEST * -------------------------- * * THE SYSTEM LIBRARY (RESIDENT) CONTAINS * PROGRAMS STRUCTURED IN 'RE-ENTRANT' FORMAT * OR IN 'PRIVILEGED' EXECUTION FORMAT. * * - RE-ENTRANT FORMAT ALLOWS A LIBRARY * PROGRAM TO BE RE-ENTERED BY A CALL FROM * A HIGHER-PRIORITY PROGRAM DURING THE * PROCESSING OF A CALL FROM A LOWER-PRIORITY * PROGRAM. * * - PRIVILEGED EXECUTION FORMAT ALLOWS A * SHORT-RUNNING LIBRARY PROGRAM TO BE EXECUTED * WITH THE INTERRUPT SYSTEM DISABLED. * * * * MEMORY PROTECT ERROR: * --------------------- * * IF THE INSTRUCTION CAUSING THE PROTECT VIOLATION * IS NOT A JSB EXEC OR A JSB TO LIBRARY * PROGRAM, THEN A USER PROGRAM ERROR IS * ASSUMED. A DIAGNOSTIC IS OUTPUT TO THE SYSTEM * TELETYPE LISTING THE PROGRAM NAME AND ADDRESS * OF VIOLATING INSTRUCTION AND THE PROGRAM IS * SET DORMANT IN THE PROGRAM ABORT PROCEDURE. * SKP ************DMS INSTRUCTIONS***************** EXEC NOP HLT 0 PROTECTION AGAINST DIRECT CALL. * $RQST LIB 5 GET ADDRESS OF VIOLATION. LIA 4 DO NOT REARRANGE!!! CPA D4 POWER FAIL? LDB $PWR5 YES, USE LAST INTERRUPT ADDR. STF 5 REENABLE PARITY ERROR OPTION. STB VADR SAVE VIOLATION ADDRESS. STB XSUSP,I SET AS POINT OF SUSPENSION. STB $LIBR SAVE (P+1) OF ISZ $LIBR CALL. WE ARE IN USER MAP! SPC 1 IFZ ******* BEGIN DMS CODE ******** SFC 5 IF FLAG CLEAR,NOT DMS VIOL JMP DMSER ******* END DMS CODE ********** XIF SPC 1 RBL,CLE,SLB,ERB CHECK FOR PARITY ERROR. HLT 5 HALT IF PARITY ERROR! LDA B,I GET WORD. AND B074K ISOLATE INSTR. CODE. CPA JSBI IF INSTRUCTION IS JSB RSS CHECK OPERAND ADDRESS. JMP MPERR -MEMORY PROTECT ERROR- LDA B,I CHECK FOR EFFECTIVE AND B2000 ADDRESS SZA LINK THRU CURRENT PAGE? LDA VADR YES, USE CURRENT PAGE BITS XOR VADR,I MIRGE THE PAGE OFFSET AND G76 UNDER THE RULES OF WOO. XOR VADR,I NOW HAVE THE ADDRESS RAL,CLE,SLA,ERA IF INDIRECT INDR LDA A,I GET NEXT LEVEL RAL,CLE,SLA,ERA WATCH OUT FOR JTS'S INDIRECTS JMP INDR * CPA EXECA -EXEC-. JMP R0 YES, REQUEST TO BE ANALYSED. CPA LIBRA -LIBRARY ROUTINE CALLING FOR JMP LIBRC RE-ENTRANT OR PRIVILEGED RUN. CPA LIBXA -LIBRARY ROUTINE RETURNING JMP LIBXC TO CALLER. * * CHECK FOR USER CALL TO LIBRARY PROGRAM * STA B SAVE OPERAND ADDRESS. LDA LBORG SUBTRACT LIBRARY CMA,CLE,INA AREA ORIGIN FROM ADA B OPERAND ADDRESS. LDA B (E = 0 IF SYSTEM VIOLATION ) CMA,SEZ,CLE,INA SKIP IF VIOLATION ALREADY ELSE ADA $SGAF TEST FOR ABOVE LIB. SEZ,RSS IF NOT CALL TO LIBRARY RESIDENT, JMP MPERR THEN VALID MEMORY PROTECT ERROR. LDA $LIBR -CALL TO LIBRARY. STA B,I SET (P+1) ADDRESS IN ENTRY POINT ADB D2 SET (P+1) OF STB $LIBR JSB $LIBR IN -$LIBR-. JMP LIBRC - TRANSFER TO $LIBR SECTION SPC 1 $SGAF NOP SSGA START ADR JSBI JSB 0 B074K OCT 074000 G76 OCT 76000 EXECA DEF EXEC RQP2A DEF RQP2 VADR NOP $PWR5 NOP ADDR OF INTERRUPT BEFORE POWER FAIL DM9 DEC -9 * * ANALYZE SYSTEM REQUEST * R0 LDA $LIBR,I (A) = RETURN ADDRESS OF JSB EXEC. ISZ $LIBR SET $LIBR TO FIRST PRAM. (RQ) ADDRESS. STA RQRTN SAVE IN BASE PAGE LDB $LIBR CACULATE THE NUMBER OF CMB,CLE PARAMETERS IN REQUEST ADB A LESS THE REQUEST CODE. STB RQCNT AND SAVE # OF ACTUAL PARAMETERS. STB A STB CNT CMB,SEZ,CME SKIP IF RETURN IS BAD (< JSB +2) * ADA DM9 CLA,SEZ JMP RQERR ERROR IF >8. * STA RQP2 ZERO STA RQP3 PARAMETER STA RQP4 STA RQP5 ADDRESS STA RQP6 STA RQP7 AREA STA RQP8 STA RQP9 * * * CHECK LEGALITY OF REQUEST CODE * LDA $LIBR GET ADDR OF THE REQ PARAM LDA A,I RAL,CLE,SLA,ERA REMOVE INDIRECTS JMP *-2 LDA A,I GET ACTUAL REQ CODE LDB XEQT COMPUTE ADB D15 THE STATUS WORD STB TEMP3 ADDRESS AND SAVE LDB B,I GET STATUS RAL,CLE,ERA PUT ABORT OPTION BIT RBL,ERB IN SIGN OF STATUS STB TEMP3,I AND RESET IN ID-SEG. SSB IF OPTION SELECTED ISZ RQRTN STEP RETURN ADDRESS. STA RQP1 SAVE THE REQUEST CODE. SZA IF ZERO SKIP TO REJECT ADA CODE# IF RQUEST CODE IF NOT DEFINED SSA,RSS -THEN JMP RQERR TOUGH LUCK, YOU'RE A DEAD DUCK! * ADA RQTBL GET ADDRESS OF PROCESSOR TO A LDA A,I GET ADDRESS SZA,RSS IF NOT LOADED JMP RQERR THEN REQUEST CODE ERROR * STA VADR SAVE THE ADDRESS * * TEST EACH PRAMETER FOR BEING BELOW THE FENCE IF * THE CALL CAUSES A STORE TO THE AREA DEFINED. * LDB RQP1 USE REQUEST CODE CLE,ERB TO INDEX INTO ADB RQTBL THE BY NAME TABLE LDA B,I GET THE FLAG WORD SEZ,RSS IF EVEN REQUEST, ROTATE BITS ALF,ALF TO USE HIGH HALF STA FLAGS * ISZ $LIBR LDA $LIBR GET ADDR OF 2ND PARAM LDB RQP2A GET ADDR OF 2ND BP PARAM MIC1 JMP NOMC2 -LRR- IF HAVE MICROCODE * OCT 105622 MACRO CALL FOR LRR CNT OCT 0 COUNT OF PARAMS LEFT FLAGS OCT 0 BITS FOR PARAM ADDR CHECK DEF FENCE ADDR OF FENCE WORD RSS ERROR RETURN JMP VADR,I SUCCESSFUL RETURN * SZB,RSS JMP ER1 JMP RQERR * NOMC2 STB TEMP2 SAVE BP PTR LDA CNT CMA,INA,SZA,RSS NEGATE COUNT JMP VADR,I DO REQ. IF 0 PARAMS STA CNT * R3 LDA $LIBR GET ADDR OF PARAM ADDR R1D1 LDA A,I GET ACTUAL PARAM ADDR SZA CPA D1 IS IT POINTING TO A OR B REGS? JMP RQERR YES, ERROR. RAL,CLE,SLA,ERA INDIRECT? JMP R1D1 GO GET DIRECT ADDR * STA TEMP2,I SAVE DIRECT ADDR ON BP CMA,CLE READY TO SUBTR FROM FENCE LDB FLAGS SLB,RBR NEED TO TEST AGAINST MP FENCE? ADA FENCE YES, SUBTRACT STB FLAGS SAVE SHIFTED FLAG BITS CLB,SEZ PARAM ADDR < FENCE? JMP ER1 YES, RQ00 ERROR * ISZ $LIBR INCRE TO NEXT USER PARAM ISZ TEMP2 INCRE TO NEXT BP LOC ISZ CNT DONE YET? JMP R3 NO JMP VADR,I YES, DO THE REQUEST * ER1 LDA RQ1 SET A FOR ERROR JMP $ERAB GO SEND 'RQ00' ERROR SPC 1 D1 DEC 1 D2 DEC 2 D15 DEC 15 CODE# ABS TBL-TBLE-1 NEGATIVE OF NUMBER OF REQUEST+1 RQTBL DEF TBLE ADDRESS INDIRECT OF LAST + 1. HED ** SUPERVISORY CONTROL OF LIBRARY PROGRAM EXECUTION ** * * SUPERVISORY CONTROL OF PROGRAM LIBRARY EXECUTION * * ALL LIBRARY PROGRAMS REFERENCED BY USER PROGRAMS * IN THE SYSTEM ARE COMBINED IN A BLOCK OF MEMORY * WHICH IS PROTECTED FROM THE REAL-TIME AREA. THE * LIBRARY AREA IS IMMEDIATELY BELOW THE RT AREA * AND JUST ABOVE THE SYSTEM AREA. * * A USER LIBRARY CALL CAUSES A PROTECT VIOLATION. * THIS SECTION FACILITATES ENTRY INTO THE LIBRARY * PROGRAM BY PERFORMING THE NECESSARY PROCESSING * FOR RE-ENTRANCY OR OPERATING THE PROGRAM WITH H= * THE INTERRUPT SYSTEM TURNED OFF FOR A 'PRIVILEGED' * EXECUTION PROGRAM. * * RE-ENTRANT OR PRIVILEGED PROGRAM FORMAT: * ---------------------------------------- * * ENTRY NOP * JSB $LIBR * DEF TDB (OR 'NOP' IF PRIVILEGED) * - FIRST INSTRUCTION FOR FUNCTION - * - CODE * - TO * - PERFORM * - PROGRAM FUNCTION * EXIT JSB $LIBX * DEF TDB (OR DEF ENTRY IF PRIVILEGED) * DEC N RETURN ADJUSTMENT FOR RE-ENTRANT * - * TDB NOP HOLDS SYSTEM POINTER TO ID-EXTENSION. * DEC N LENGTH OF TEMPORARY DATA BLOCK * NOP RETURN ADDRESS OF CALL. * - BLOCK USED FOR * HOLDING TEMPORARY * VALUES GENERATED * BY THE ROUTINE. * * * < $LIBR> IS ENTERED WHEN A LIBRARY * PROGRAM IS CALLED. IF THE CALLED * PROGRAM IS 'RE-ENTRANT' AND IS CALLED * DURING THE PROCESSING OF A PREVIOUS * CALL, THE TEMPORARY-DATA-BLOCK IS * MOVED INTO A BLOCK IN AVAILABLE MEMORY * BEFORE THE ROUTINE IS ENTERED. * * PVEXC JSB RSTR JMP LIBRX * LIBRA DEF $LIBR * $LIBR NOP DIRECT ENTRY HAS TO BE PRIV. STA XA,I AND GOING DEEPER LDA $LIBR,I MAKE SURE SZA AND IF GOING RENT JMP MPERR SEND SOUTH INSTEAD. * LIBRX LDA XA,I RESTORE AND RETURN ISZ $LIBR SET RIGHT ADDRESS ISZ $PVCN AND STEP THE DEPTH COUNTER JMP $LIBR,I RETURN TO USER * LIBRC LDB $LIBR,I GET (P+2) OF -$LIBR- CALL. SZB,RSS IF (P+2) = 0, THEN CALLED PROGRAM JMP PVEXC IS IN 'PRIVILEGED' FORMAT. * * STB TEMP1 SAVE -TDB- ADDRESS. LDA B,I GET WORD 1 OF DATA BLOCK. LDA A,I GET ID SEG ADDRESS OR ZERO RAL,CLE,ERA REMOVE POSSIBLE SIGN BIT CPA XEQT RECURSIVE ENTRY? JMP ERE01 YES GO ABORT HIM INB STEP TO LENGTH WORD IN TDB SZA IF BLOCK IN USE GET LENGTH LDA B,I ELSE ADA D4 USE JUST FOUR WORDS STA TEMP4 SAVE LENGTH FOR ALLOCATE CALL LDB DHED GET POINTER TO HEAD OF RENT LDA XEQT LIST ADA D20 CHECK IF ALREADY IN LIST STA TEMP3 SAVE ID-SEG POINTER LDA A,I GET THE STATUS WORD ALF,RAL BIT 10 IS RENT BIT SSA,RSS IF CLEAR THEN THIS IS FIRST ENTRY JMP RE2 SO GO SET UP * LDB XEQT NOT FIRST ENTRY SO FIND OTHERS JSB FINDL USING FINDL ROUTINE JMP ERE01 LIST ERROR ABORT THE PGM ADB D3 STEP TO SUB QUE HED RE2 STB TEMP2 SET POINTER TO LIST HEAD * JSB $ALC ALLOCATE THE MEMORY TEMP4 NOP NUMBER OF WORDS REQUIRED JMP NVRM IF NEVER ANY MEMORY, TRY 4 ONLY JMP LB05 NO MEMORY NOW, SUSPEND. CCE ALLOC DONE. * CPB TEMP4 DID WE GET THE REQUESTED NUMBER? B40 CLE YES CLEAR E AS A FLAG * SPC 1 IFN ******* BEGIN NON-DMS CODE **** LDB TEMP2,I GET OLD POINTER STA TEMP2,I SET NEW BLOCK ADDRESS STB A,I LINK OLD BLOCKS INTO THE LIST ******* END NON-DMS CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN DMS CODE ******** XLB TEMP2,I GET OLD POINTER XSA TEMP2,I SET NEW BLOCK ADDRESS XSB A,I LINK OLD BLOCKS INTO THE LIST ******* END DMS CODE ********** XIF SPC 1 LDB XEQT GET THE ID-SEG ADDRESS SEZ,INA STEP A AND SKIP IF EXACT ALLOCATION ADB SIGN ELSE ADD SIGN BIT TO ID-ADDRESS SPC 1 IFN ******* BEGIN NON-DMS CODE **** STB A,I SET IN WORD 2 ******* END NON-DMS CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN DMS CODE ******** XSB A,I SET IN WORD 2 ******* END DMS CODE ********** XIF SPC 1 STA TEMP4 SET TDB ADDRESS POINTER INA SET TO WORD 3 ADDRESS LDB TEMP1 SET TDB ADDRESS IN WORD THREE SPC 1 IFN ******* BEGIN NON-DMS CODE **** STB A,I ******* END NON-DMS CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN DMS CODE ******** XSB A,I ******* END DMS CODE ********** XIF SPC 1 INA CLEAR CLB WORD SPC 1 IFN ******* BEGIN NON-DMS CODE **** STB A,I FOUR ******* END NON-DMS CODE ****** XIF SPC 1 SPC 1 IFZ ******* BEGIN DMS CODE ******** XSB A,I FOUR ******* END DMS CODE ********** XIF SPC 1 * LDB TEMP1,I IF BLOCK AVAILABLE THEN SZB,RSS SKIP THE JMP RE4 MOVE * SEZ,INA SET A TO SAVE BLOCK ADDRESS INA (EXTRA WORD USED IN ID-EXTENSION) LDB TEMP1 DIG THE TDB SIZE OUT CLE,INB OF THE TDB LDB B,I AND SET IN B JSB MTDB MOVE OUT THE TDB RE4 LDA TEMP4 GET THE ADDRESS OF THE ID-SEG. ADDRESS STA TEMP1,I AND SET IN THE TDB LDA TEMP3,I GET THE ID-STATUS WORD IOR B2000 SET THE RENT BIT STA TEMP3,I RESTORE THE WORD LDB TEMP1 (B) = ADDR. OF TDB. ADB D2 SET LDA $LIBR (P+1) ADA DM2 OF ORIGINAL LDA A,I CALL IN STA B,I WORD 3 OF TDB IN PROGRAM. ISZ $LIBR SET TO FIRST INSTR IN LIB. PROG. * LDB $LIBR SET RETURN ADDRESS STB XSUSP,I IN THE ID-SEG. JMP $RENT RETURN TO THE DISPATCHER $PVCN NOP * * REJECT SECTION CAUSED BY NO MEMORY * AVAILABLE FOR -TDB-. CALLING USER PROGRAM * IS SUSPENDED BACK TO POINT OF CALL AND * LINKED INTO MEMORY SUSPENSION LIST. * NVRM LDA D4 NEVER ENOUGH MEMORY, REQUEST 4 NEXT TIME STA XTEMP,I LB5 JSB $LIST SUSPEND OCT 504 PROGRAM JMP $XEQ TRANSFER TO EXECUTE SECTION. * LB05 LDA $LIBR NO MEMORY ON SECOND LEVEL ADA DM2 REENTRANT CALL, GET PROPER RETURN CCB ADDRESS SO THAT WE REMAKE CALL ADB A,I STB XSUSP,I JMP LB5 * * * * $LIBX EXIT PROCESSOR FOR RENT/PRIV LIB ROUTINES * * < $LIBX> IS ENTERED WHEN A LIBRARY * PROGRAM TERMINATES ITS EXECUTION. A * TEMPORARY DATA BLOCK IS MOVED BACK * INTO THE LIBRARY PROGRAM, IF REQUIRED, * BEFORE RETURN TO THE ORIGINAL CALLER. * * LIBXA DEF $LIBX * $LIBX NOP NON MP ENTRY - MUST BE STA XA,I RETURNING FORM PRIV. SUB. LDA $PVCN SUBTRACT ONE FORM THE COUNT CMA,INA WITH OUT AFFECTING CMA,SZA,RSS "E" ($PVCN >0 ) JMP LB10 IF NOT STILL PRIV. JMP * STA $PVCN STILL PRIV. SET THE COUNTER BACK LDA $LIBX,I TRACK DOWN THE RETURN LDA A,I ADDRESS STA $LIBX AND SET IT LDA XA,I RESTORE A AND JMP $LIBX,I RETURN * LB10 STA $PVCN RETURN NON PRIV. SET COUNTER STB XB,I TO ZERO AND FINISH THE REG. SAVE ERA,ALS E SOC O INA STA XEO,I LDA $LIBX,I GET THE LDA A,I RETURN ADDRESS STA XSUSP,I AND SAVE IT IFN SAVXY JMP $RENT (CXA IF MX CPU) XIF IFZ CXA XIF CYB SAVE THE X,Y REGS. DST XI,I IN THE X,Y SAVE AREA JMP $RENT NOW GO SET THE FENCE * * * RE-ENTRANT PROGRAM RETURNING TO USER CALL. * LIBXC LDB $LIBR,I SET -TDB- ADDRESS. STB TEMP1 IN TEMP1. ISZ $LIBR SET TO (P+2) OF CALL TO -$LIBX-. ADB D2 GET LDA B,I RETURN POINT ADJUSTMENT. ADA $LIBR,I ADD TO (P+1) OF LIBRARY CALL STA XSUSP,I AND SET FOR RETURN TO USER. * LDB XEQT GET ID EXTENSION JSB FINDL ADDRESS JMP MPERR NOT FOUND??? JMP LB14 START SEARCH * LB15 SEZ,CCE,RSS FIND NEXT ENTRY ADDRESS ADB D3 STB TEMP5 SAVE POINTER SPC 1 IFN ******* BEGIN NON-DMS CODE **** LDB B,I GET ADDRESS ******* END NON-DMS CODE ****** XIF SPC 1 IFZ ******* BEGIN DMS CODE ******** XLB B,I GET ADDRESS ******* END DMS CODE ********** XIF SPC 1 LB14 STB A GET ADDRESS OF INA ID WORD CPA TEMP1,I THIS ONE?? RSS YES GO DO IT JMP LB15 NO TRY NEXT ONE * STB TEMP2 SAVE BLOCK ADDRESS SPC 1 IFN ******* BEGIN NON-DMS CODE **** LDB B,I RELINK THE BLOCKS STB TEMP5,I ******* END NON-DMS CODE ****** XIF SPC 1 IFZ ******* BEGIN DMS CODE ******** XLB B,I RELINK THE BLOCKS XSB TEMP5,I ******* END DMS CODE ********** XIF SPC 1 JSB RTN4 RETURN THE ID-EXTENSION JMP $RENT TDB = 0, GO TO CHECK RETURN. * SKP * SUBROUTINES: AND USED FOR * SAVING AND RESTORING REGISTERS * IN LIBRARY PROGRAM PROCESSING. * SAVER NOP MIC3 JMP MIC4 OR STA XA,I IF NO MICRO STB XB,I ERA,ALS SOC INA STA XEO,I SPC 1 IFN * BEGIN NON-DMS CODE *************** MX3 JMP SAVER,I RETURN IF NOT MX, CXA IF MX *** END NON-DMS CODE *************** XIF SPC 1 IFZ ***** BEGIN DMS CODE *************** CYB ******* END DMS CODE *************** XIF SPC 1 DST XI,I JMP SAVER,I * MIC4 SVR XA,I XI,I SAVE REGS MICRO CALL JMP SAVER,I RETURN * RSTR NOP MIC5 JMP MIC6 OR LDA XEO,I IF NO MICRO CLO SLA,ELA STF 1 SPC 1 IFN * BEGIN NON-DMS CODE *************** MX4 JMP NMX4 IF NOT MX, DLD IF MX DEF XI,I *** END NON-DMS CODE *************** XIF SPC 1 IFZ ***** BEGIN DMS CODE *************** DLD XI,I ******* END DMS CODE *************** XIF SPC 1 CAX CBY NMX4 LDA XA,I LDB XB,I JMP RSTR,I RETURN * MIC6 RSR XA,I XI,I RESTORE REGS MICRO CALL JMP RSTR,I RETURN *