11.07.2015 Views

Program Logic Manual - All about the IBM 1130 Computing System

Program Logic Manual - All about the IBM 1130 Computing System

Program Logic Manual - All about the IBM 1130 Computing System

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

LOCALs AND SOCALsIf during <strong>the</strong> first pass <strong>the</strong> Core Load Builder(phase 4) determines that an Assembler core loadwill not fit into core storage even with any LOCALsthat have been specified, <strong>the</strong> core load buildingprocess is terminated. However, for a FORTRANcore load special overlays (SOCALs) of parts of <strong>the</strong>core load will be created during a second pass ifthis will make <strong>the</strong> core load fit. The decision ofwhe<strong>the</strong>r to proceed with a second pass is made afterphase 4 accounts for <strong>the</strong> sizes of <strong>the</strong> LOCAL area,if any, <strong>the</strong> flipper and its table, and each of <strong>the</strong>SOCALs. If <strong>the</strong> check shows that SOCAL option 1(SOCAL 1 and SOCAL 2) will be insufficient, <strong>the</strong>na fur<strong>the</strong>r check is made for option 2 (all threeSOCALs). If option 2 is still insufficient, processingis terminated; o<strong>the</strong>rwise, a second pass is made.During pass 2, <strong>the</strong> entire core load is builtagain, but, unlike during pass 1, subprograms arerelocated in a special order. First, <strong>the</strong> mainlineand <strong>the</strong> in-core (class 0) subprograms are relocated,followed by: <strong>the</strong> flipper; <strong>the</strong> LOCALs, if any; <strong>the</strong>arithmetic and function (class 1) subprograms; <strong>the</strong>non-disk FIO (class 2) subroutines; and, ifnecessary, <strong>the</strong> disk FIO (class 3) subroutines.The same procedure described above is necessaryif LOCALs are employed without SOCALs. In o<strong>the</strong>rwords, LOCALs, as well as SOCALs, require twopasses.INTERRUPT LEVEL SUBROUTINES (ILSs)After all o<strong>the</strong>r subprograms have been relocated,<strong>the</strong> Interrupt Transfer Vector (ITV) in <strong>the</strong> coreimage header is scanned. Except for <strong>the</strong> entriesfor interrupt levels 2 and 4, a non-zero entrycauses <strong>the</strong> corresponding ILS to be incorporatedinto <strong>the</strong> core load. (ILSO2 and ILSO4, unlesssupplied by <strong>the</strong> user, are a part of <strong>the</strong> ResidentMonitor.) See Interrupt Branch Table, above,for a description of <strong>the</strong> processing of that part ofan ILS.TRANSFER VECTOR (TV)The transfer vector consists of two parts: <strong>the</strong>LIBF TV and <strong>the</strong> CALL TV, The former provides<strong>the</strong> linkage to LIBF subprograms, <strong>the</strong> latter toCALL subprograms. The LIBF TV was created toenable <strong>the</strong> LIBF statement to require only onestorage location during execution. This is desirablebecause <strong>1130</strong> FORTRAN object code contains a veryhigh percentage of calls to subprograms. Longbranches to those subprograms would greatly increasecore requirements for core loads over amethod that employs short branches. By replacing<strong>the</strong> LIBF statement with a short BSI, tag 3, to atransfer vector entry, which could <strong>the</strong>n supply <strong>the</strong>long branch to <strong>the</strong> desired subprogram, this problemis solved. The cost, of course, is that XR3 is takenaway from <strong>the</strong> user and <strong>the</strong> transfer vector is limitedto 255 words, This means <strong>the</strong> LIBF TV has amaximum of 85 3-word entries, two of which become<strong>the</strong> real-number pseudo-accumulator (FAC) and anindicator for certain arithmetic subroutines. Thus,<strong>the</strong> user is limited to LIBFs to not more than 83separate subprogram entry points per core load.There is no <strong>the</strong>oretical limit on <strong>the</strong> number ofCALL entry points per core load, for <strong>the</strong> CALLstatement is replaced by an indirect BSI to <strong>the</strong>desired subprograms. However, <strong>the</strong> number ofCALL and LIBF references combined must notexceed <strong>the</strong> capacity of <strong>the</strong> Load Table, which isapproximately 150 entries.The CALL TV entry is one word only, <strong>the</strong> addressof <strong>the</strong> subprogram entry point. This makes it possibleto replace a CALL statement with an indirectBSI to <strong>the</strong> corresponding CALL TV entry, even though<strong>the</strong> address of <strong>the</strong> subprogram itself may not beknown at <strong>the</strong> time <strong>the</strong> CALL is processed.When stored on disk in disk core image format(DCI), <strong>the</strong> LIBF TV follows <strong>the</strong> last word of <strong>the</strong> lastsubprogram in <strong>the</strong> core load. It may leave one wordvacant between it and <strong>the</strong> CALL TV in order tomake <strong>the</strong> pseudo-accumulator (FAC) begin on anodd boundary. The CALL TV immediately follows<strong>the</strong> indicator entry in <strong>the</strong> LIBF TV. During execution<strong>the</strong> TV extends downward in core storage from<strong>the</strong> lowest-addressed word in COMMON.Whereas <strong>the</strong> CALL TV entry consists of only oneword (<strong>the</strong> address of <strong>the</strong> subprogram), <strong>the</strong> LIBF TVentry consists of three words. The first is a linkword (initially zero), and <strong>the</strong> second and third are along BSC to <strong>the</strong> subprogram entry point.Figure 10 shows <strong>the</strong> layout of <strong>the</strong> transfer vectorin core storage.Linkage to LOCALsThe LOCAL/SOCAL flipper (FLIPR) is included in acore load if that core load requires LOCALs and/orSOCALs. The flipper transfers control to a LOCAL,Section 8. Core Load Builder 37

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!