ASMB,R,L,C RTML3 * NAME: RTML3 RTE-M SEGMENTED GENERATOR-LOADER (SEGMENT 3) * SOURCE: 91740-18048 * RELOC: 91740-16048 * PGMR: MIKE SCHOENDORF * * *************************************************************** * * (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 HEWLETT-PACKARD COMPANY. * * *************************************************************** * * * * HED RTE-M SYSTEM GENERATOR-LOADER NAM RTML3,5 91740-16048 REV 1926 790426 * * ENTRY POINT NAMES ENT ENTPT,FIXUP * * EXTERNAL REFERENCE NAMES EXT AB#RT,ABRC1,ABREC,ADDRS,ADTRP EXT ATABL,BLINE,BPAGA,BPLOC EXT CLFL3,COML,COMOR,CONSL EXT CONV,CPAGE,DBTAD,DCB3 EXT DIAG2,ERREX,ER#OR EXT EXEC0,FFLAG,FT#ME EXT FUT1,FUT2,FUT3,FUT4 EXT FUTI,FUTP,FWABP,FWAC EXT FWAM,IDCB,IERR#,IN#CK EXT JLU,LBF10,LBUF5,LBUF#,LBUFA EXT LDGEN,LDSG3,LENGT,LER3 EXT LER5,LIBFL,LINTP,LISTO,LNKDR EXT LOCFS,LST,LST1,LST2 EXT LST3,LST4,LST5,LSTA EXT LSTI,LSTP,LSTPX,LSTUL,LWABP EXT LWAC,LWAM,MAPS,.MEM6 EXT MLOCC,MOVEX,NAMR.,NBUF,NBUFT,NSCAN EXT NXTCM,OPT.3,OTMES,PACK#,PLK,PLKS,PLK4 EXT PRINT,PUNCH,QGETC,RBTA EXT RBTO,READ#,RIC,RT.LC,RTMLC,SCAN EXT SCP,SERFG,SERNM,SSTBL,SYMOV EXT TYOFF,TYPRO,UEXFL,WRTBT,?XFER EXT XNAM,XNAMA,ZPRIV,ZRENT * EXT PNAMA,PNZQZ,PRAMS * EXT EXEC,POSNT EXT DU#MY * * * A EQU 0 B EQU 1 ERROR EQU ER#OR FTIME EQU FT#ME INDCK EQU IN#CK ABORT EQU AB#RT IERR EQU IERR# LBUF EQU LBUF# LOCC EQU MLOCC PACK EQU PACK# READ EQU READ# SUP ************************************************************************ * * THIS SEGMENT OF THE RTE-M SEGMENTED LOADER AND GENERATOR * PERFORMS ALL MODULE RELOCATION. CONTROL IS RETURNED TO * LOADER SEGMENT 2 FOR PROCESSING NEXT COMMAND. * ******************************************************************** SKP RTML3 NOP NOP LDA LBUF2 REMOVE JSB INDCK INDIRECT STA LBUF2 ADDRESSES LDA LBUF7 FOR JSB INDCK DEFS STA LBUF7 LDA NBUF6 JSB INDCK STA NBUF6 LDA LDSG3 WHERE GO FLAG SZA,RSS JMP LDRIN GO RELOCATE MODULE LDA LDGEN SZA,RSS JMP RTMLC GO PUT ENTRY IN LST JMP RT.LC * HED *** ROUTINES FOR PROCESSING RECORDS ****** SKP ***** * ** NAM RECORD PROCESSOR *** RIC = 1 * * THIS ROUTINE IS CALLED TO ASSIGN SPACE FOR A PROGRAM * TO BE LOADED. THE NAM RECORD IS MOVED FROM LBUF TO * NBUF BEFORE THIS ROUTINE IS CALLED. * SPECIAL CONVENTIONS APPLY TO FORTRAN AND ALGOL * PROGRAMS. IN A FORTRAN PROGRAM (IDENTIFIED BY 1 IN * SIGN POSITION OF WORD 7 OF NAM RECORD) THE PROGRAM * LENGTH IN WORD 7 MAY BE GREATER THAN THE ACTUAL LENGTH. * THEREFORE THE UPPER BOUND IS NOT SET UNTIL LOADING * OF DATA BLOCKS. ***** NAMR NOP LDA NBUF+10 CHECK BASE PAGE LENGTH SSA JMP ILBP ILLEGAL BASE PAGE LENGTH(<0) CLA STA CPLIN CURRENT PAGE LINK POINTER (NEXT LINK) STA CPSTR CURRENT PAGE LINK POINTER (FIRST LINK) LDA LDGEN LOADER OR GENERATOR CALLING SZA,RSS JMP NM5 GENERATOR CALLING LDA FTIME FIRST TIME THRU? SZA JMP NM5 NO, DON'T OUTPUT TYOFF RECORD LDA B2 SET ADDRESS OF TIE-OFF RECORD STA ABRC1 * OUTPUT 2 WORD TIE-OFF RECORD FOR USER PROGRAMS ONLY. * THE FIRST WORD OF THE TIE-OFF RECORD IS DEPENDENT * ON WHERE THE PROGRAM RESIDES (MEMORY RESIDENT OR IN * A PARTITION AND IF EITHER SYSTEM COMMON OR SSGA IS * MAPPED INTO THE SYSTEM. LDA SCP SSGA/SYSTEM COMMON/PARTITION AND B7 LDB 0 LDA B4 SZB,RSS CLA,INA MEM RES/NO SSGA/NO SYS COMMON CPB B1 CLA PARTITION/NO SSGA/NO COMMON CPB B2 LDA B2 MEM RES/SYS COMMON/NO SSGA CPB B3 LDA B2 PARTITION/SYS COMMON/NO SSGA STA 1 LDA SCP AND B1 RAR SET BIT 15 IF PARTITION LOAD IOR 1 LDB FWAM JSB TYOFF OUTPUT 2 WORD RECORD FOR PROGRAM ISZ FTIME SET FOR NO MORE TYOFFS FOR NOW NM5 LDB NBUF+11 GET COMMON LENGTH. SZB,RSS JMP NM1 NO COMMON LDA FWAC SZA,RSS JMP NM6 ALLOCATE 1ST COMMON CMA,INA ADA LWAC INA STA COML CMB,INB ADB A CHECK FOR COMMON LENGTH OVERFLOW SSB,RSS JMP NM1 LENGTH GOOD LDB COMOV COMMON BLOCK ERROR JMP ERREX SPC 2 NM6 STB COML ALLOCATE 1ST COMMON LDA LOCC MOVE PROGRAM RELOCATION BASE UP. STA FWAC ADA COML STA LWAC INA STA LOCC RESET LOCATION COUNTER NM1 LDA BPLOC SET LOWER BOUND OF BASE PAGE AREA STA HLINK SAVE UPPER BOUND OF BPA FOR SYS MODS STA BPPTR INITIALIZE BASE PAGE POINTER LDA LOCC SET LOWER BOUND OF PROGRAM AREA STA PAPTR INITIALIZE PROGRAM AREA POINTER LDA FWAC STA COMOR LDA NBUF+9 GET PROGRAM LENGTH STA FTNFL SET FORTRAN LOADING FLAG - BIT 15 CPA M1 ALGOL PROGRAM? JMP NAMR,I YES. LIMITS SET DURING LOADING. * * ALLOCATE BASE PAGE STORAGE * LDA NBUF+10 GET BASE PAGE AGAIN SZA,RSS IF NO BP ALLOCATION, JMP NM2 CHECK FOR PROGRAM ALLOCATION LDB LNKDR GET LINK DIRECTION FLAG CPB M1 SYSTEM OR USER LINKS JMP NM3 SYSTEM LINKS ADA BPLOC COMPUTE LAST LOCATION & STA B CHECK FOR OVERFLOW ADA M1 CMA,INA ADA LWABP SSA NEGATIVE MEANS OVERFLOW JMP LER4 OF BASE PAGE AREA STB BPPTR SET UPPER LIMIT B. P. JSB MLINK SET LINKS TO 100000 * * ALLOCATE PROGRAM AREA STORAGE * NM2 LDA NBUF+9 GET PROGRAM LENGTH SZA,RSS IF PROGRAM LENGTH = 0, JMP NAMR,I LDA LOCC GET LOCATION COUNTER AND M2000 ON BASE PAGE? SZA JMP NM4 NO LDA LOCC GET LOCATION COUNTER ADA NBUF+9 ADD PROGRAM LENGTH AND B1777 ONLY INTERESTED IN THAT ON BASE PAGE CMA,INA ADA LOCC STA BLINK COUNTER FOR PUTTING 100000 IN LINK TABLE LDA C1000 LDB LOCC ADB BPAGA GET ADDRESS OF 1ST WORD IN LINK TABLE STA 1,I INB GET ADDRESS OF NEXT WORD IN LINK TABLE ISZ BLINK DONE? JMP *-3 NO NM4 LDA LINTP GET LINKS IN CURRENT PAGE FLAG SZA,RSS JMP NCPLN NO CURRENT PAGE LINKS LDA NBUF+9 GET PROGRAM LENGTH AND UDFE CLEAR FORTRAN BIT STA MIN1 LDA LOCC GET PROGRAM RELOCATION BASE AND B1777 CLEAR PAGE BITS ADA MIN1 ADA M2000 SSA DOES PROGRAM CROSS PAGE BOUNDARY? JMP NCPLN NO, CURRENT PAGE LINKS ARE NOT NEEDED STA 1 CMA,INA DETERMINE NUMBER OF CURRENT ADA MIN1 PAGE LINKS NEEDED INA MIN(A:2,B):4, WHERE A = LENGTH ARS OF PROGRAM ON CURRENT PAGE AND STA MIN1 B = REST OF PROGRAM CMA,INA ADA 1 SSA,RSS LDB MIN1 ADB B3 BRS,BRS LDA LOCC GET PROGRAM RELOCATION BASE STA CPLIN STA CPSTR ADA B ADD CURENT PAGE LINK LENGTH STA LOCC SET NEW PROGRAM RELOCATION BASE STA LLINK LAST LINK NCPLN LDB FTNFL COMPILER-GENERATED? SSB JMP NAMR,I YES,LIMITS SET DURING DBL PROCESSING LDA NBUF+9 GET PROGRAM LENGTH ADA LOCC COMPUTE HIGH ADDRESS & STA B CHECK FOR OVERFLOW CMA,INA INA ADA LWAM SSA NEGATIVE RESULT MEANS OVERFLOW JMP LER3 MEMORY OVERFLOW ERROR STB PAPTR SET UPPER BOUND JMP NAMR,I SPC 1 NM3 ADA FWABP COMPUTE LAST CMA,INA LOCATION AND INA CHECK FOR ADA BPLOC OVERFLOW SSA NEGATIVE MEANS OVERFLOW JMP LER4 OF BASE PAGE AREA ADA M1 SET UPPER LIMIT ADA FWABP STA BPPTR JSB MLINK SET LINKS TO 100000 LDA BPPTR INA SAVE BASE PAGE RELOCATION BASE FOR STA BPLOC SYSTEM MODULES JMP NM2 * * ILBP LDB ILBPL ILLEGAL BASE PAGE LENGTH (<0) JMP ERREX * * LER4 LDB BPGOV LINKAGE AREA OVERFLOW JMP ERREX * * SPC 1 CPLIN NOP CPSTR NOP BLINK NOP FTNFL NOP 2^15 = 1 IF FORTRAN/ALGOL LLINK NOP MIN1 NOP * B1 OCT 1 B2 OCT 2 B3 OCT 3 B1777 OCT 1777 C1000 OCT 100000 M2000 OCT -2000 UDFE OCT 77777 * BPGOV DEF *+1 OCT 6 ASC 3,BPG OV * COMOV DEF *+1 OCT 6 ASC 3,COM OV * DEBUG DEF *+1 ASC 3,DEBUG * ILBPL DEF *+1 OCT 6 ASC 3,IL BPL SKP * * SUBROUTINE TO PUT ENTRY POINT IN LST * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF ENTRY POINT + 3 * JSB ENTPT * * RETURN: CONTENTS OF A AND B DESTROYED. * ENTPT NOP ADB M3 ADJUST ADDRESS OF ENTRY POINT CLA STA PTYPE STA ENTS SET FOR SUBROUTINE CALL JSB ENTI JMP ENT01 LDB SYMOV SYSTEM OVERFLOW JMP ERREX EXIT * ENT01 LDA LST3,I AND UPCM ZERO OUT EXT ID NO. IF ANY STA LST3,I JMP ENTPT,I * M3 DEC -3 * * SUBROUTINE TO PUT 100000 IN LINK TABLE. THIS PREVENTS * THIS AREA FROM BEING USED AS LINKS. * MLINK NOP LDA NBUF+10 GET BASE PAGE LENGTH CMA,INA STA BLINK COUNTER FOR PUTTING 100000 IN LINK TABLE LDA C1000 LDB BPAGA GET ADDRESS OF 1ST WORD IN LINK TABLE ADB BPLOC STA 1,I ADB LNKDR GET ADDRESS OF NEXT WORD IN LINK TABLE ISZ BLINK DONE ? JMP *-3 NO JMP MLINK,I YES, EXIT * SKP SPC 2 ***** * ** ENT ** EXT RECORD PROCESSORS * * ENT RECORD PROCESSOR (RIC = 2) * EXT RECORD PROCESSOR (RIC = 4) * * PURPOSE OF THIS SECTION IS TO PROCESS ENTRY POINTS * AND EXTERNAL SYMBOLS, ADD SYMBOLS TO THE * LOADER SYMBOL TABLE, AND * SET A FLAG IF AN ENTRY POINT FROM A LIBRARY * LOAD MATCHES AN UNDEFINED EXTERNAL SYMBOL. * CONTROL RETURNED FROM THIS SECTION TO -LDRIN-. * * WORDS USED FOR TEMPORARY STORAGE: * * LBUF - RECORD TYPE FLAG: 1 = ENT, 0 = EXT * LBUF+1 - NEGATIVE COUNT OF ENT/EXT ENTRIES IN RECORD. * LBUF+2 - FIRST WORD ADDRESS OF CURRENT ENTRY. ***** ENTI NOP ENTR CLA,INA,RSS ENT: FLAG=1 EXTR CLA EXT: FLAG=0 STA LBUF SAVE RECORD TYPE LDA LBUF+1 GET AND ISOLATE AND B77 RECORD ITEM COUNT. CMA,INA SET NEGATIVE FOR STA LBUF+1 COUNTER IN PROCESSING LDA ENTS =0 IF CALLED AS A SUBROUTINE SZA LDB LBUFA SET LBUF+2 = ADDRESS OF ADB B3 FIRST ENTRY STB LBUF+2 IN RECORD ENTX1 JSB SSTBL SEARCH SYMBOL TABLE JMP ENTX6 END OF LST - MAKE NEW ENTRY LDA LBUF IF RECORD TYPE SZA,RSS JMP EXT0 IS EXT, GO POST ORDINAL. * * SYMBOL MATCH IN ENT RECORD * LDA UDFE IS ENT DEFINED? CPA LST4,I JMP ENT21 NO. SET VALUE FROM RECORD. LDB SERFG YES, LOADING FROM LIBRARY SZB JMP ENTX5 IGNORE DUPLICATE FROM LIBRARY. LDB DUENT JSB DIAG2 COMPLAIN ABOUT DUPLICATE LDB LBUF+2 ADB B2 LDA 1,I AND UPCM IOR B40 STA 1,I LDB LBUF+2 LDA B5 PRINT "OFFENDING" ENT SYMBOL JSB PRINT LDA LENGT LDB ADDRS JSB MAPS JMP ENTX5 * DUENT DEF *+1 OCT 6 ASC 3,DU ENT * * ADD ENTRY POINT ADDRESS TO LST ENTRY. * ENT21 JSB CKTYM CHECK IF MODULE TYPE ALLOWED CLA CLEAR "LIBRARY LOAD" FLAG. STA SERFG ENT22 LDA B,I GET WORD 3 OF RECORD ENTRY STA LST3,I AND STORE IN LST WORD 3. INB GET WORD 4 OF RECORD ENTRY LDB B,I (ENTRY VALUE). AND B7 ISOLATE RELOCATION INDICATOR CPA B3 ABSOLUTE? JMP ENT24 YES CPA B4 MICROCODE REPLACEMENT? JMP ENT24 YES CMB NEGATE TO INDICATE NEW ENTRY ENT23 STB LST4,I SAVE IN LST FOR LATER ACTION. LDB PTYPE SZB,RSS TYPE 7 OR 8 MODULE? JMP ENTX5 NO LDA D8 ADA LST3,I FLAG TYPE 7 OR 8 MODULES IN LST STA LST3,I * * ENTRY FROM INPUT LOADING * * * ADVANCE TO NEXT RECORD ITEM * ENTX5 LDA ENTS =0 IF CALLED AS A SUBROUTINE SZA,RSS JMP ENTI,I LDB LBUF+2 GET OLD RECORD ENTRY ADDRESS ADB B3 ADD 3 FOR NEXT EXT ENTRY. ADB LBUF ADD ONE MORE FOR ENT RECORD. STB LBUF+2 SET ADDRESS OF NEXT ENTRY. ISZ LBUF+1 INDEX ENTRY COUNT - JMP ENTX1 MORE TO PROCESS. JMP LDRIN FINISHED- GET NEXT RECORD. * ENT24 CMA,INA STA LST5,I SAVE -TYPE IN LST5 LDA LST3,I ZERO OUT RP AND AB INDICATORS AND UPCM STA LST3,I JMP ENT23 * * NO MATCH IN LST FOR RECORD ENTRY SYMBOL - ADD * NEW ENTRY - CHECK FIRST FOR MEMORY CONFLICT. * * ENTX6 LDA LST5 SAVE UPPER LIMIT OF LST STA LSTUL LDB FFLAG SZB,RSS ANY 0 ENTRIES IN LST? JMP ENTX7 NO LDA TYPRO USER PROGRAM? SZA,RSS JMP ENTX7 YES LDA LIBFL SEARCHING? CPA B1 JMP ENTX7 YES STB LST5 CCA STA LSTPX JSB LSTP SET LST ENTRY ADDRESSES NOP JMP ENTX9 ENTX7 ISZ LSTA,I ADD 1 TO LST ENTRY COUNT ENTX9 LDB ENTS =0 IF CALLED AS SUBROUTINE LDA LST5 CMA ADA FUT4 SSA JMP ENTX2 OVERFLOW LDB LBUF+2 (B) = RECORD ENTRY ADDR. LDA B,I MOVE WORDS 1 AND 2 OF RECORD STA LST1,I ENTRY TO WORDS INB 1 AND 2 NEW LST ENTRY LDA B,I (WORD 3 WILL BE SET LATER) STA LST2,I INB (B) = ADDR. OF WORD 3, REC. ENTRY LDA UDFE STA LST4,I DENOTE UNDEFINED. CLA STA LST5,I DENOTE NO LINK ASSIGNED LDA LBUF GET RECORD TYPE FLAG SZA JMP ENT22 ENT; GO POST VALUE. EXT0 JSB CKTYM CHECK IF MODULE TYPE ALLOWED LDA B,I GET WORD 3 OF RECORD ENTRY, STA LST3,I STORE TO POST EXT ORDINAL. LDA LST5,I SSA ABSOLUTE OR MICROCODE REPLACEMENT JMP ENTX5 YES LDA LST5,I HAS A LINK ALREADY BEEN ASSIGNED? SZA JMP ENTX5 YES, CONTINUE PROCESSING LDA LST4,I NO, ALLOCATE ONE CPA UDFE LINK ROUTINE RECOGNIZES UNDEFINED AS CLA 0 IN .A.(VALUE OF SYMBOL PARAM) JSB LINK ALLOCATE THE LINK STB LST5,I AND UPDATE SYMBOL TABLE JSB ENTCK CHECK TO MARK LINK FOR DELETION JMP ENTX5 DON'T DELETE LDB LST5,I GET LINK CCE ELB,RBR SET BIT 15 STB LST5,I JMP ENTX5 THEN CONTINUE ENTX2 SZB JMP LER5 OVERFLOW, LOADER SUBCONTROL ISZ ENTI JMP ENTI,I ERROR EXIT * * B40 OCT 40 B77 OCT 77 D8 DEC 8 * ENTS NOP =0 IF SUBROUTINE SKP ***** * ** RELEN ** RELOCATE ENTRY POINT ADDRESS * CALLING SEQUENCE: (B) = UNRELOCATED ENT VALUE * (A)=CONTENTS OF LST3(RELOCATION BASE) * JSB RELEN * RETURN: (A) = LINK ADDRESS, IF ANY * (B) = RELOCATED ENT ADDRESS * * PURPOSE: RELOCATES ENT ADDRESS AS DESIGNATED * BY THE RELOCATION FIELD (R) IN BITS * 00-01 OF (LST3). 0 = PROGRAM, 1 = BASE * PAGE, 2 = COMMON, 3 = ABSOLUTE. * ALSO POSTS VALUE IN LINK TABLE. * BITS 07-00 OF (LST3) ARE CLEARED. ***** RELEN NOP ENTRY/EXIT POINT STB SAVE1 LDB LST5,I MICROCODE REPLACEMENT OR ABSOLUTE? SSB JMP RE3 LDB SAVE1 AND B7 GET R-FIELD ADA RBTO ADB A,I RELOCATE SYMBOL VALUE STB LST4,I POST ENTRY VALUE IN LST. LDA LST5,I SZA,RSS JMP RE3 ADA BPAGA C174 STB A,I POST VALUE IN LINK TABLE LDA FWABP IF LINK IS LESS THAN FWABP CMA,INA GO OUTPUT IT NOW ADA LST5,I SSA JMP RE7 YES, GO OUTPUT RE3 JSB FIXUP DO FIXUP JMP RELEN,I FIXUP NOP LDB LINTP STB SAVE1 SAVE LINKING TYPE CLB STB LINTP SET LINKING TO BASE PAGE JSB FUTI INITIALIZE FIXUP PROCESSOR RE2 JSB FUTP SET FIXUP ENTRY ADDRESS JMP RE1 EXIT, NO MORE FIXUPS SATISFIED LDA FUT4,I DOES FIXUP ADDRESS = CPA LST1 ANY LST ADDRESS? RSS JMP RE2 NO, GET NEXT ONE LDB FUT1,I GET LOAD ADDRESS STB ABRC1 STORE FOR OUTPUTTING STB LBUF CPA M1 .ZRNT FIXUP? JMP RE6 YES LDA LST4,I GET ENTRY VALUE LDB LST5,I CPB MD4 MICROCODE REPLACEMENT? JMP RE5 YES CPB M3 ABSOLUTE? JMP RE8 YES LDB FUT2,I SZB,RSS JMP RE8 DEF SSB JMP RE8 INDIRECT LDB FUT3,I ANY OFFSET? SZB JMP RE8 YES JMP RE9 NO, DON'T OUTPUT FIXUP RE8 CCA SET TO EXTERNAL STA NBUF+1 LDB FUT2,I GET INSTRUCTION STB NBUF+2 LDB LST4,I GET VALUE OF ENTRY POINT ADB FUT3,I ADD OFFSET JSB SPLIC BUILD INSTRUCTION, ALLOC. LINK IF NEC. RE5 JSB PACK STORE INSTRUCTION FOR OUTPUTTING JSB PUNCH OUTPUT THE ABSOLUTE RECORD RE9 CLA CLEAR THE FIXUP TABLE ENTRY SO THAT STA FUT1,I IT CAN BE REUSED STA FUT2,I STA FUT3,I STA FUT4,I JMP RE2 RE1 LDA BLANK PUT BLANK BACK IN BUFFER STA LBUF LDA SAVE1 RESTORE LINK TYPE STA LINTP JMP FIXUP,I EXIT * RE6 LDA FUT2,I GET INSTRUCTION JMP RE5 GO STORE * RE7 LDA BPAGA STORE OFFSET FOR OUTPUTTING STA PLKS LDA LST5,I SAVE LOAD ADDRESS STA PLK4 LDB 0 UPPER ADDRESS JSB PLK GO OUTPUT LINK JMP RE3 GO DO FIXUP * SAVE1 NOP * M1 DEC -1 MD4 DEC -4 * BLANK ASC 1, SKP HED DBL RECORD PROCESSING * DATA BLOCK RECORD PROCESSOR (RIC = 3) SPC 2 * THIS SECTION RELOCATES THE LOAD ADDRESS OF A DATA * BLOCK AND RELOCATES AND STORES THE WORDS IN IT. * * A RELOCATION BYTE IS ASSOCIATED WITH EACH * INSTRUCTION OR DATA WORD IN A DBL RECORD. * THIS 3-BIT BYTE CONTAINS ONE OF THE * FOLLOWING RELOCATION INDICATORS: SPC 1 * 000 - ABSOLUTE * 001 - PROGRAM RELOCATABLE * 010 - BASE PAGE RELOCATABLE * 011 - COMMON RELOCATABLE * 100 - EXTERNAL SYMBOL REFERENCE (NO OFFSET) * 101 - TWO-WORD GROUP. WORD 1 CONTAINS OPCODE, * RELOCATION BYTE FOR OFFSET, AND AN OPTIONAL * EXTERNAL SYMBOL ORDINAL. WORD 2 CONTAINS THE * OFFSET (ADDRESS). THE RELOCATION BYTE CAN BE: * 00 - PROGRAM * 01 - BASE PAGE * 10 - COMMON * 11 - ABSOLUTE * 110 - BYTE RELOCATABLE * * THIS SECTION USES THE RELOCATION BASE * TABLE (RBT) TO RELOCATE THE LOAD * ADDRESS AND DATA WORDS. THE RELOCATION * BASES IN THE RBT ARE SET BY THE NAM * RECORD PROCESSOR. THE TABLE IS STRUCTURED * AS: * RBTA DEF *+1 * RBT OCT 0 (ABSOLUTE) * PREL (PROGRAM ORIGIN - FWA) * BPREL (BASE PAGE ORIGIN (FROM ORB) * COMOR (COMMON AREA ORIGIN) * OCT 0 (ABSOLUTE AGAIN) * * IF A FORTRAN GENERATED PROGRAM IS BEING LOADED, * A CHECK FOR MEMORY OVERFLOW IS MADE BEFORE * EACH DBL RECORD IS PROCESSED. IF OVERFLOW OCCURS, * AN IMMEDIATE TERMINATION OF LOADING IS MADE * BY TRANSFERRING TO THE ERROR ROUTINE. OTHERWISE, * THE NEW FWA OF THE MEMORY AREA IS SET AND * LOADING CONTINUES. THE DBL RECORDS FOR A FTN * OBJECT PROGRAM ARE GENERATED IN ASCENDING * ORDER - I.E. THE LOAD ADDRESS OF EACH DBL RECORD * IS LARGER THAN THE PREVIOUS - AND THE LAST DBL * RECORD LOADED IS THE LAST PROGRAM SEGMENT (I.E., * A BSS DOES NOT FOLLOW) SO THE NEW FWA OF AVAIL. * MEMORY IS KNOWN AFTER THE LAST DBL RECORD IS * PROCESSED. ******************************************************************** SPC 2 ***** * ** DBL RECORD PROCESSOR * ***** SPC 2