ASPLM010-1 00000000 3.0/B 00002000 March, 1974 00004000 00006000 ASSIST SYSTEM 00008000 PROGRAM LOGIC MANUAL 00010000 00012000 Program&Documentation: John R. Mashey 00014000 Project Supervision : Graham Campbell 00016000 PSU Computer Science Department 00018000 00020000 00022000 This manual contains various information describing the internal 00024000 structure and techniques used in the ASSIST system. It includes details00026000 required for maintenance and extension of the system, describes the 00028000 purposes and methods of all the modules in the system, and in general, 00030000 is required reading for any person performing modification of the system00032000 Depending on the intentions of the reader, certain sections of this 00034000 manual should be consulted. All readers should begin by reading the 00036000 following section GUIDES TO EFFECTIVE USE and also the section 00038000 INTRODUCTION. 00040000 00042000 00044000 GUIDES TO EFFECTIVE USE 00046000 00048000 This section essentially describes how to use this manual properly,00050000 and should be consulted before reading any other section or examining 00052000 the ASSIST source program. 00054000 00056000 A. WHO is to use this manual? 00058000 00060000 This manual is definitely required reading for any person desiring 00062000 modifications to the ASSIST source program for any reason. This 00064000 category includes maintenance of ASSIST, extensions and additional 00066000 features to be added to ASSIST, and modifications for handling 00068000 programs for a given installation in a different manner than provided 00070000 for already. It also includes improvements in the code used internally,00072000 and any modifications needed to run ASSIST in an operating system 00074000 environment not currently allowed. 00076000 00078000 Some sections of this manual may be useful to the system 00080000 administrator, as they can aid him in determining the system resource 00082000 requirements needed to make effective use of ASSIST, and in deciding 00084000 which of the available options should be included in a given generation 00086000 of ASSIST for his installation. 00088000 00090000 The more general sections of this manual should be useful to the 00092000 instructor of computer science who wishes to provide his students with 00094000 an example of a system for discussion, or with possible programming 00096000 projects for them to do. 00098000 , 00100000 ASPLM010-2 00102000 00104000 B. WHAT does this manual contain? 00106000 00108000 Each major part of this manual describes one major division of the 00110000 ASSIST program. Section A. of each part gives a general summary of the 00112000 input, output, and overall control logic for the modules of that part. 00114000 Entry point hierarchy tables included here show the structure and 00116000 calling relationships among the various program components. Section 00118000 B. of each part then gives more detailed information about each module 00120000 in the given part of system. In general, the information is presented 00122000 in each section in order from most general to most specific, to 00124000 facilitate easy location of any given module or any code performing any 00126000 particular function. 00128000 00130000 The Appendices present detailed information which either concerns 00132000 many of the program modules in ASSIST, or whose nature is such to 00134000 special consideration or treatment independent of the rest of the 00136000 manual. The information in the Appendices should be especially useful 00138000 to any person performing modifcation to the ASSIST source program. 00140000 00142000 C. WHEN should this manual be used? 00144000 00146000 This manual may be consulted before generation of an ASSIST system 00148000 is performed, in order to insure that the desired options are present. 00150000 This manual definitely should be examined before reading the source 00152000 program of ASSIST. While the source program contains extensive internal00154000 documentation, overall structure is detailed in this manual, and 00156000 provides the easiest method of locating anything in the source program. 00158000 00160000 D. WHERE does this manual fit into the literature? 00162000 00164000 The documentation for the ASSIST system consists of the following: 00166000 00168000 ASSIST INTRODUCTORY ASSEMBLER USER'S MANUAL 00170000 This manual gives all necessary information required to run jobs 00172000 under ASSIST, describes the subset of S/360 Assembler Language accepted 00174000 by ASSIST, and describes the output produced by ASSIST. THE USER'S 00176000 MANUAL SHOULD BE EXAMINED BEFORE ANY OTHER DOCUMENTATION. 00178000 00180000 ASSIST ASSEMBLER REPLACEMENT USER'S GUIDE 00182000 This manual gives the information required to run a replacement 00184000 program for a module of ASSIST. It shows deck setup, debugging aids, 00186000 register conventions, and error messages. It should be examined by 00188000 any instructor making use of ASSIST for replacement assignments. 00190000 00192000 ASSIST SYSTEM DISTRIBUTION WRITEUP 00194000 This manual supplies the procedures required for generating an 00196000 ASSIST system for given options and requirements. Concerning options 00198000 available for generation, it briefly notes the most likely combinations 00200000 which may be used. For unusual circumstances, the reader is referrred 00202000 to the ASSIST PROGRAM LOGIC MANUAL for further details on options. 00204000 , 00206000 ASPLM010-3 00208000 00210000 E. HOW should this manual be used by various groups of people? 00212000 00214000 The reader intending to examine the ASSIST source program should 00216000 consult the following: 00218000 INTRODUCTION 00220000 APPENDIX I. GENERAL CONVENTIONS AND INFORMATION 00222000 PART I - MAIN CONTROL AND SERVICE PROGRAMS - Section A. 00224000 Depending on area of interest, any of PARTs I-IV and any of 00226000 the Appendices. 00228000 ASSIST source listing - should include at least an assembly 00230000 listing, and possibly a utility listing of the complete source00232000 00234000 The reader desiring more detailed information about generation 00236000 options than supplied by the ASSIST SYSTEM GENERATION MANUAL should 00238000 examine the following sections: 00240000 INTRODUCTION 00242000 APPENDIX II. SET VARIABLES AND CONDITIONAL ASSEMBLY 00244000 APPENDIX VII. SYSTEM RESOURCE REQUIREMENTS, JOB CONTROL LANGUAGE 00246000 APPENDIX VIII. TIME AND RECORDS PROCESSING 00248000 00250000 The reader desiring only a general idea of the internal workings of00252000 ASSIST should read these sections: 00254000 INTRODUCTION 00256000 Section A. of PARTs I. II, III, and possibly IV. (These sections 00258000 describe the overall control logic of each major division of 00260000 the system.) 00262000 00264000 INTRODUCTION 00266000 00268000 ASSIST (Assembler System for Student Instruction and Systems 00270000 Teaching) is a small, high-speed, low-overhead assembler/interpreter 00272000 system especially suitable for student use. It consists of five main 00274000 components, which are as follows: 00276000 I. Main control and service programs 00278000 This includes a job monitor, input/output routines, scanning 00280000 and conversion modules, and a debugging/dumping program. 00282000 It may include object deck punch and loader routines. 00284000 II. Assembler for a subset of S/360 Assembler Langugage 00286000 This component of the system assembles user source program and00288000 creates resulting object program in memory. 00290000 III. Interpreter for S/360 object code 00292000 This module interpretively executes user object programs, 00294000 permitting complete control of the user program, in addition 00296000 to execution of special debugging instructions. 00298000 IV. Replace monitor 00300000 V. Macro Processor 00302000 Supports inline macros, open code conditional assembly. 00304000 , 00306000 ASPLM010-4 00308000 00310000 TABLE OF CONTENTS 00312000 ***NOTE*** certain portions of this manual are not currently 00314000 available (such as 110, 210, and 500). In general, these deal with 00316000 program logic inside individual modules. The reader should consult the 00318000 comments in Appendix V, or the source program itself, which contains 00320000 fairly heavy documentation (28 per cent comment cards). 00322000 00324000 GUIDES TO EFFECTIVE USE........................................ 010-1 00326000 INTRODUCTION................................................... 010-3 00328000 TABLE OF CONTENTS.............................................. 010-4 00330000 00332000 PART I - MAIN CONTROL AND SERVICE PROGRAMS..................... 100-1 00334000 00336000 A.OVERALL CONTROL LOGIC........................................ 100-1 00338000 1. INPUT..................................................... 100-1 00340000 2. OUTPUT.................................................... 100-2 00342000 3. OVERALL CONTROL LOGIC SUMMARY............................. 100-3 00344000 4. ENTRY POINT HIERARCHY TABLE............................... 100-6 00346000 00348000 B. ROUTINE/SUBROUTINE LOGIC.................................... 110-1 00350000 1. ASSIST - ASSIST System Main Control Program............... 00352000 2. AOBJDK - Punch and Load Object Decks...................... 00354000 3. APARMS - ASSIST PARM Field Analysis Routine............... 00356000 4. XXXXDECI - Decimal Input Conversion....................... 00358000 5. XXXXDECO - Decimal Output Conversion...................... 00360000 6. XXXXIOCO - Input/Output Control........................... 00362000 7. XXXXSNAP - Debugging Output, Completion Dump.............. 00364000 8. XXXXHEXI - Hexadecimal input conversion.......... 00366000 9. XXXXHEXO - Hexadecimal output conversion......... 00368000 10. XXXXSPIE - SPIE handeling module................. 00370000 11. XDDGET/XDDPUT - monitor for XGET/XPUT............ 00372000 12. XXXXGET - Input module for XGET.................. 00374000 13. XXXXPUT - Output module for XPUT................. 00376000 , 00378000 ASPLM010-5 00380000 00382000 PART II - THE ASSEMBLER........................................ 200-1 00384000 00386000 A. OVERALL CONTROL LOGIC....................................... 200-1 00388000 1. INPUT..................................................... 200-1 00390000 2. OUTPUT.................................................... 200-2 00392000 3. OVERALL CONTROL LOGIC SUMMARY............................. 200-3 00394000 4. ENTRY POINT HIERARCHY TABLE............................... 200-5 00396000 00398000 B. ROUTINE/SUBROUTINE LOGIC.................................... 210-1 00400000 1. BROPS2 - Base register processing......................... 00402000 2. CACONS - A-type constant processing....................... 00404000 3. CBCONS - B-type constant processing....................... 00406000 4. CCCONS - C-type constant processing....................... 00408000 5. CDECNS - D&E-type constant processing..................... 00410000 6. CFHCNS - F&H-type constant processing..................... 00412000 7. CNDTL2 - PASS II constant processing control.............. 00414000 8. CODTL1 - PASS I constant processing control.............. 00416000 9. CPCONS - P-type constant processing....................... 00418000 10. CVCONS - V-type constant processing....................... 00420000 11. CXCONS - X-type constant processing....................... 00422000 12. CZCONS - Z-type constant processing....................... 00424000 13. ERRORS - Error code/scan pointer flagging................. 00426000 14. ESDOPR - External symbol dictionary operations............ 00428000 15. EVALUT - General expression evaluation.................... 00430000 16. IAMOP1 - Pass I machine operations processing............. 00432000 17. IBASM1 - Pass I assembler operations processing........... 00434000 18. ICMOP2 - Pass II machine operations processing............ 00436000 19. IDASM2 - Pass II assembler operations processing.......... 00438000 20. INPUT1 - Read source cards, construct record blocks....... 00440000 21. LTOPRS - Literal constant table operations................ 00442000 22. MOCON1 - Pass I main control program...................... 00444000 23. MPCON0 - Assembler overall main control program........... 00446000 24. MTCON2 - Pass II main control program..................... 00448000 25. OPCOD1 - Mnemonic operation code lookup................... 00450000 26. OUTPUT - Format and print assembly listing................ 00452000 27. SCANRS - Scanning utility programs........................ 00454000 28. SDTERM - Self-defining term evaluation.................... 00456000 29. SYMOPS - Symbol table operations.......................... 00458000 30. UTOPRS - Utility data set simulation...................... 00460000 00462000 C. TABLE CONTROL SECTIONS...................................... 00464000 1. VWXTABL - Assembler main communication table.............. 00466000 , 00468000 ASPLM010-6 00470000 00472000 PART III - THE INTERPRETER..................................... 400-1 00474000 00476000 A. OVERALL CONTROL LOGIC....................................... 400-1 00478000 1. INPUT..................................................... 400-1 00480000 2. OUTPUT.................................................... 400-2 00482000 3. OVERALL CONTROL LOGIC SUMMARY............................. 400-3 00484000 4. ENTRY POINT HIERARCHY TABLE............................... 400-3 00486000 00488000 B. ROUTINE/SUBROUTINE LOGIC.................................... 400-4 00490000 1. EXECUT - S/360 object code interpreter.................... 400-4 00492000 00494000 C. OPTIONAL EXTENDED INTERPRETER............................... 400-5 00496000 00498000 PART IV - THE REPLACE MONITOR 00500000 00502000 A. OVERALL CONTROL LOGIC....................................... 500-1 00504000 1. INPUT..................................................... 00506000 2. OUTPUT.................................................... 00508000 3. OVERALL CONTROL LOGIC SUMMARY............................. 00510000 4. ENTRY POINT HIERARCHY TABLE............................... 00512000 00514000 B. ROUTINE/SUBROUTINE LOGIC.................................... 00516000 1. REMONI - Replace monitor control.......................... 00518000 00520000 C. TABLE CONTROL SECTIONS...................................... 00522000 1. RFSYMS - Replacable entry point names..................... 00524000 00526000 00528000 PART V. THE MACRO PROCESSOR. 00530000 00532000 PART VI. - THE CROSS REFERENCE FACILITY........................ 580-1 00534000 00536000 , 00538000 ASPLM010-7 00540000 00542000 APPENDIX I. GENERAL CONVENTIONS AND INFORMATION................ 600-1 00544000 00546000 A. PROGRAM DOCUMENTATION....................................... 600-1 00548000 B. REGISTER AND SUBROUTINE LINKAGE CONVENTIONS................. 600-3 00550000 C. NAMING CONVENTIONS.......................................... 600-5 00552000 D. CODING CONVENTIONS AND TYPICAL TECHNIQUES................... 600-6 00554000 00556000 00558000 APPENDIX II. SET VARIABLES AND CONDITIONAL ASSEMBLY............ 610-1 00560000 00562000 00564000 APPENDIX III. DUMMY SECTIONS AND TABLES........................ 620-1 00566000 00568000 00570000 APPENDIX IV. MACRO INSTRUCTIONS................................ 630-1 00572000 00574000 00576000 APPENDIX V. ENTRY AND EXIT CONDITIONS.......................... 640-1 00578000 00580000 00582000 APPENDIX VI. INTERNAL DEBUGGING AIDS........................... 660-1 00584000 00586000 A. GENERATION OF DEBUG CODE.................................... 660-1 00588000 B. SET SYMBOLS AND MACROS USED IN DEBUGGING.................... 660-2 00590000 C. INDIVIDUAL SECTIONS DEBUGGING CODE DESCRIPTION.............. 660-3 00592000 1. MAIN CONTROL AND SERVICE SUBPROGRAMS...................... 660-3 00594000 2. THE ASSEMBLER............................................. 660-5 00596000 3. THE INTERPRETER........................................... 662-1 00598000 4. THE REPLACE MONITOR....................................... 662-2 00600000 00602000 00604000 APPENDIX VII. SYSTEM RESOURCE REQUIREMENTS,JOB CONTROL LANGUAGE 670-1 00606000 00608000 A. SYSTEM RESOURCE REQUIREMENTS................................ 670-1 00610000 B. JOB CONTROL LANGUAGE........................................ 670-3 00612000 C. OPTIONAL FACILITY STORAGE REQUIREMENTS...................... 670-4 00614000 D. USING ASSIST EFFECTIVELY IN DIFFERENT ENVIRONMENTS.......... 670-5 00616000 00618000 APPENDIX VIII. TIME, RECORDS, PAGES CONTROL.................... 680-1 00620000 00622000 A. TIME, RECORDS, PAGES CONTROL ALGORITHM...................... 680-2 00624000 B. RECOMMENDED OPTIONS AND MODIFICATION METHODS................ 680-4 00626000 , 00628000 ASPLM100-1 00630000 00632000 PART I - MAIN CONTROL AND SERVICE PROGRAMS 00634000 00636000 This part of the ASSIST Program Logic Manual describes both the 00638000 overall flow of control and structure of the ASSIST system, and details 00640000 of various service programs which may be used during execution. The 00642000 service subprograms noted include both those which are normally only 00644000 called from the main program, and those which are available for use 00646000 by any other module in the ASSIST system. 00648000 00650000 The following sections detail the input to and output from the 00652000 entire ASSIST system, the overall logic of the main program ASSIST, and 00654000 a hierarchy chart showing calling relationships between entry points 00656000 in the system. Following these sections are given more detailed 00658000 descriptions of each module in the control and service program group. 00660000 00662000 A.OVERALL CONTROL LOGIC 00664000 00666000 1. INPUT 00668000 00670000 a. USER SOURCE PROGRAM/OBJECT PROGRAM 00672000 00674000 The user source program, written in assembler language, is read 00676000 from a card reader, using a DDNAME of SYSIN. This is the only required 00678000 input to ASSIST. Some versions of ASSIST may contain a module used to 00680000 load object decks (AOBJIN), in which case an object deck takes the place00682000 of a source deck. 00684000 00686000 b. USER DATA (OPTIONAL) 00688000 00690000 (Optional) data is read during user program execution, from a card 00692000 reader, using a DDNAME of FT05F001, if possible. For jobs using the 00694000 BATCH option, or if two readers are not available (as in an OS-PCP 00696000 system), any data cards provided must follow the user source program, 00698000 prefixed by a $ENTRY card. Any number of user jobs may be batched. 00700000 00702000 c. USER PARM FIELD (OPTIONAL) 00704000 00706000 ASSIST expects the operating system to provide to it the contents 00708000 of the PARM field from the user EXEC card, following standard OS/360 00710000 conventions for accessing PARM fields. The user may request various 00712000 options through the use of this field. The reader is directed to the 00714000 following writeup for a listing of the available options: 00716000 00718000 ASSIST INTRODUCTORY USER'S MANUAL - PART III. 00720000 00722000 If ASSIST is generated to provide the replacement feature, i.e., 00724000 &$REPL>0, the following should be consulted for additional options: 00726000 00728000 ASSIST ASSEMBLER REPLACEMENT USER'S GUIDE 00730000 , 00732000 ASPLM100-2 00734000 00736000 2. OUTPUT 00738000 00740000 a. PRINTED OUTPUT 00742000 00744000 ASSIST prints all output on a line printer, using a DDNAME of 00746000 FT06F001. The printed output may require up to 133 characters, 00748000 including carriage control, although most output requires no more than 00750000 121 characters. The following output may be printed: 00752000 1) USER PROGRAM ASSEMBLY LISTING 00754000 2) USER PROGRAM PRINTED OUTPUT 00756000 3) USER PROGRAM COMPLETION DUMP 00758000 4) VARIOUS HEADINGS AND STATISTICAL INFORMATION 00760000 00762000 b. PUNCHED OUTPUT 00764000 00766000 The user program may request that cards be punched during its 00768000 execution. If possible, cards are actually punched, using the DDNAME 00770000 FT07F001. If a DCB cannot be opened to this DDNAME, or if the NOPUNCH 00772000 PARM option is used, any card images produced will not be punched, but 00774000 will be printed instead. It is also possible to create an ASSIST which 00776000 deletes all punching code, thus saving space. A version of ASSIST can 00778000 be generated possessing the ability to punch object decks also. 00780000 00782000 The reader should refer to the following writeup for a detailed 00784000 description of the output produced by ASSIST, including the effects of 00786000 various PARM options: 00788000 00790000 ASSIST INTRODUCTORY USER'S MANUAL - PART III, PART IV. 00792000 00794000 The reader should also refer to APPENDIX VII of this manual, which 00796000 details the system resources and job control language required to use 00798000 ASSIST. Briefly, ASSIST can function effectively with one card reader, 00800000 one line printer, less than 30K bytes of memory for program, and a 00802000 variable amount of storage for workareas and user program, approximately00804000 50-90 bytes per source statement. No intermediate storage is required. 00806000 if all possible options are allowed (as of version 2.1/A), the assist 00808000 program requires approximately 62K bytes. This is larger thean almost 00810000 any version which would actually be run, since few installations would 00812000 use all options. 00814000 , 00816000 ASPLM100-3 00818000 00820000 3. OVERALL CONTROL LOGIC SUMMARY 00822000 00824000 The following summarizes the overall flow of control in the entire 00826000 ASSIST system. Since overall control resides entirely in the control 00828000 section ASSIST, this section is essentially a brief summary of the later00830000 section B.1 of this part. This section can be used to get a quick 00832000 overview, while the later section describes the ASSIST control section 00834000 in more detail. 00836000 00838000 a. ENTIRE RUN INITIALIZATION 00840000 00842000 After receiving control from the operating system, ASSIST first 00844000 sets initial values for any flags which may be required to be set at 00846000 this time. 00848000 Certain operations occur only 1 time for an entire ASSIST run, and 00850000 are thus described here, although they occur after the first case of the00852000 processing described in b. below. These include calling INSUB ASMSINIT,00854000 which obtains the largest single block of free storage available, then 00856000 returns some to the operating system for buffers, modules, etc. The 00858000 value returned can be controlled by the PARM field FREE= option. 00860000 ASSIST then calls entry XXXXINIT of csect XXXXIOCO. This entry 00862000 OPENs the DCB's for the source reader (SYSIN) and line printer 00864000 (FT06F001), and sets flags in AJOBCON denoting the success or failure of00866000 OPENing the two DCB's. If either fails, ASSIST writes a message to that00868000 effect on the system log, then terminates with a condition code of 16. 00870000 00872000 b. ASSEMBLY/EXECUTION/DUMP CYCLE (1 $JOB) 00874000 00876000 ASSIST now makes 3 or 4 calls to routine APARMS, which is used to 00878000 scan optional parameters (see PART III of USER'S MANUAL). The first 00880000 call supplies default values and absolute limits on numerical options, 00882000 and the second call processes the invoking PARM field, if any exists. 00884000 If this is the first time through this process, the actions described 00886000 above in a. are performed to initialize memory and i/o modules. 00888000 (This is done in the order given in order to allow optional parameters 00890000 to influence this initialization). 00892000 At this point, ASSIST determines whether a BATCH run is in 00894000 progress. If so, it reads cards until a $JOB card is found (INSUB 00896000 ASFLUSH), and calls APARMS with the parameters on the first such card 00898000 encountered, thus allowing user's in BATCH mode to supply options. 00900000 APARMS is called a third time (NOBATCH) or fourth time (BATCH) to 00902000 supply default values for any numerical options. 00904000 As described in APPENDIX VIII, time, records, and pages limits are 00906000 calculated, the ASSIST header line printed on a new page, and either the00908000 invoking PARM field (NOBATCH) or $JOB card (BATCH) added. 00910000 00912000 c. ASSEMBLY OF USER PROGRAM (OR LOAD OF OBJECT DECK) 00914000 00916000 ASSIST then sets up the assembler control table (VWXTABL csect, 00918000 AVWXTABL dsect) for use by the assembler component of the system. This 00920000 includes setting limits on the memory available to the assembler, 00922000 placing the address of the table control section into the appropriate 00924000 register (R12), and initializing any flag values which may have been 00926000 provided by the user PARM field. In addition, an STIMER macro may be 00928000 set to interrupt if the user overruns his time limit. The assembler 00930000 main program (MPCON0) is then called to assemble the user program, and 00932000 load the resulting object code into the beginning of the single large 00934000 workarea used by the system. 00936000 , 00938000 ASPLM100-4 00940000 00942000 If the user specified the OBJIN option (thus showing that an object00944000 deck is supplied in place of the source deck), ASSIST skips the actions 00946000 described above and calls AOBJIN to load the object deck (assuming that 00948000 ASSIST has been generated to allow this option.) 00950000 00952000 After the user program has been assembled, ASSIST tests to see if 00954000 the user did not desire execution of his program, or if the program has 00956000 become unexecutable because it contained too many errors. In this case,00958000 execution and completion dumping are skipped, and section f. is done. 00960000 00962000 d. USER PROGRAM EXECUTION 00964000 00966000 If a BATCH run is in progress, ASSIST requires that a $ENTRY card 00968000 be supplied after the user program to initiate execution, so it reads 00970000 cards until one is found. If a $JOB card is found first, it returns 00972000 to section b and begins processing of next run. 00974000 00976000 Using various values from the assembler control table AVWXTABL, 00978000 ASSIST creates an execution control block (ECONTROL), which contains all00980000 necessary information for describing the user program and how it should 00982000 be treated. This table is actually located in a part of the assembler 00984000 control table, to save space. After initializing such values as the 00986000 pseudo registers, Program Status Word, etc, in ECONTROL, ASSIST calls 00988000 entry XXXXSNIN of csect XXXXSNAP, which performs any needed 00990000 initialization for this csect, which is used to perform execution-time 00992000 register and storage dumping. ASSIST tests to make sure that neither 00994000 the time limit nor the record limit have already been exceeded during 00996000 assembly. If so, user program execution is skipped, and section f. is 00998000 done. 01000000 ASSIST flags the user program in execution, and calls EXECUT, 01002000 which is an interpreter for S/360 object code. The user program is then01004000 interpretively executed. The interpreter may call entries XXXXREAD, 01006000 XXXXPNCH, and XXXXPRNT of csect XXXXIOCO to read cards, punch cards, and01008000 print lines for the executing user program. EXECUT may also call csects01010000 XXXXDECI and XXXXDECO to perform decimal conversions for the user, and 01012000 may call XXXXSNAP csect to supply execution-time dumps of registers and 01014000 storage. 01016000 Interpretation of the user object program continues until some 01018000 error occurs, or until the program branches to the location originally 01020000 given to it as a return address. Errors include program interrupts, 01022000 overrrun of instruction count limit, overrun of record limit, and 01024000 possibly overrun of time limit (See section H. for this). After setting 01026000 appropriate condition flags, EXECUT returns control to ASSIST. 01028000 01030000 e. USER PROGRAM COMPLETION DUMP 01032000 01034000 If user execution terminated properly, a message is printed to this01036000 effect. Otherwise, XXXXSNAP csect is called using a special type of 01038000 call to the XSNAP macro, which produces a user completion dump instead 01040000 of normal XSNAP output. Depending on options supplied by the user, 01042000 XXXXSNAP prints either a full dump (Program Status Word, Completion 01044000 Completion Code, Instruction Trace, User Registers, and User Storage), 01046000 or a short dump (all parts of a full dump except User Storage). 01048000 , 01050000 ASPLM100-5 01052000 01054000 f. BATCH RUN TESTING 01056000 01058000 ASSIST prints a message if the user has exceeded either a time or 01060000 record limit. If the run is not a BATCH run, ASSIST terminates (see 01062000 section g.) 01064000 ASSIST now returns to section b to search for the next $JOB card. 01066000 If ASSIST ever encounters either a real end-file or a $STOP card while 01068000 searching for a $JOB or $ENTRY card, the run is terminated at that 01070000 point. 01072000 01074000 g. TERMINATION 01076000 01078000 ASSIST calls XXXXFINI entry of XXXXIOCO, which closes all DCB's 01080000 which have been OPENed. The return code is set to 0 to indicate a 01082000 successful run, and all acquired storage is returned to the operating 01084000 system. ASSIST then returns control to the calling program. 01086000 01088000 h. TIMER RUNOUT PROCESSING 01090000 01092000 If ASSIST is generated with one of the options providing timing 01094000 for a user program, an STIMER exit routine may be executed. If this 01096000 occurs, the exit routine tests a flag to determine if the system is 01098000 currently executing a user program. If so, a flag is set in the 01100000 execution control block ECONTROL. The interpreter EXECUT tests this 01102000 flag after every successful branch by a user program, and terminates 01104000 user program execution if the flag has been set. 01106000 If the user program was still being assembled, ASSIST sets the 01108000 'STOP' flag in the assembler control table, which terminates assembly 01110000 when the next statement is encountered during either assembly passes. 01112000 ASSIST also sets the 'RECORDS EXCEEDED' flag, which is tested by 01114000 the printer/punch i/o modules. This is sufficient to terminate the 01116000 user dump if it is being produced. 01118000 See APPENDIX VIII for a complete description of timer/records/pages 01120000 control, as a number of different effects can be obtained by using 01122000 various combinations of generation options and PARM values. 01124000 , 01126000 ASPLM100-6 01128000 01130000 4. ENTRY POINT HIERARCHY TABLE 01132000 01134000 The following lists all entry names which may be called duirng 01136000 the course of an entire ASSIST run, excluding internal modules of the 01138000 assembler section of ASSIST, which has its own table (see PART II, 01140000 section A.4.) The entries are listed in order by level, where the 01142000 level is the maximum number of modules in a calling chain above the 01144000 given module, i.e., ASSIST has a level of 0 because it is the main 01146000 program. The entries are listed first by level, then alphabetically 01148000 within each level. Under each entry are listed the entries it may call,01150000 first by level, then in alphabetical order. Certain entries may only 01152000 be called by use of certain macro instructions, in which case the macro 01154000 names are also given. Any entry which calls no others is flagged with 01156000 an asterisk, for ease of use in tracing calling chains. 01158000 01160000 LEVEL 0 ENTRIES 01162000 01164000 ASSIST - ASSIST system main control program 01166000 1 AOBJIN, AODECK, APARMS, EXECUT, MPCON0, XXXXFINI*, XXXXINIT*, 01168000 XXXXSNIN* 01170000 $SORC(XXXXSORC)*, XSNAP(XXXXSNAP) 01172000 3 $PRNT(XXXXPRNT)* 01174000 01176000 01178000 LEVEL 1 ENTRIES 01180000 01182000 01184000 AOBJIN - Object Deck Input (only if &$OBJIN=1) 01186000 2 $SORC(XXXXSORC)*, XSNAP(XXXXSNAP) 01188000 3 $PRNT(XXXXPRNT)* 01190000 01192000 AODECK - Object Deck Punch (only if &$DECK=1) 01194000 2 $PNCH(XXXPNCH)* 01196000 2 $READ(XXXXREAD)*, XSNAP(XXXXSNAP) 01198000 APARMS - ASSIST PARM field analysis routine 01200000 2 XDECI(XXXXDECI)* 01202000 01204000 EXECUT - ASSIST S/360 object code interpreter 01206000 2 XDECI(XXXXDECI)*, XDECO(XXXXDECO)*, XHEXI(XXXXHEXI)* 01208000 2 XHEXO(XXXXHEXO)*, $PNCH(XXXXPNCH)*, XSNAP(XXXXSNAP) 01210000 2 XSNAP(XXXXSNAP) 01212000 3 $PRNT(XXXXPRNT)* 01214000 01216000 MPCON0 - ASSIST assembler main control program 01218000 (**Note, the following list includes any entries called by any01220000 sections of the ASSIST assembler. See assembler hierarchy 01222000 table in Part II, section A.4. for details). 01224000 01226000 1 REFAKE (only if &$REPL>0. Also note that this call only 01228000 occurs during a replace run, and does not appear in the 01230000 actual call sequence, due to adcon modification.) 01232000 2 RESYMB*(&$REPL=2), $SORC(XXXXSORC)* 01234000 3 $PRNT(XXXXPRNT)* 01236000 , 01238000 ASPLM100-7 01240000 01242000 REENDA - Post Assembly Replace Monitor (only if &$REPL>0) 01244000 3 $PRNT(XXXXPRNT)* 01246000 7 SYFIND* (entry point inside csect SYMOPS of the assembler) 01248000 01250000 REFAKE - Replace Monitor Call Interception (only if &$REPL>0) 01252000 2 XDECO(XXXXDECO)*, XSNAP(XXXXSNAP) 01254000 3 $PRNT(XXXXPRNT)* 01256000 01258000 REINTA - Pre-Assembly Replace Monitor (only if &$REPL>0) 01260000 01262000 XXXXFINI* - Finish up input/output control - CLOSE DCB's 01264000 01266000 XXXXINIT* - Initialize input/output control - OPEN DCB's 01268000 01270000 XXXXSNIN* - Initialize XXXXSNAP module before user execution. 01272000 01274000 01276000 LEVEL 2 ENTRIES 01278000 01280000 RESYMB* - Replace Monitor Call Allowed Lookup (only if &$REPL=2) 01282000 01284000 XXXXDECI* - Decimal Input Service Program (XDECI macro) 01286000 01288000 XXXXDECO* - Decimal Output Service Program (XDECO macro) 01290000 01292000 XXXXHEXI* - Hexadecimal Input Service Program (XHEXI macro) 01294000 01296000 XXXXHEXO* - Hexadecimal Output Service Program (XHEXO macro) 01298000 01300000 XXXXPNCH* - Punch card service program ($PNCH macro) 01302000 01304000 XXXXREAD* - Read data card service program ($READ macro) 01306000 01308000 XXXXSNAP - Create debugging output, completion dump (XSNAP macro) 01310000 3 $PRNT(XXXXPRNT)* 01312000 01314000 XXXXSORC* - Read source card service program ($SORC macro) 01316000 01318000 01320000 LEVEL 3 ENTRIES: 01322000 01324000 XXXXPRNT* - Print a line service program ($PRNT macro) 01326000 , 01328000 ASPLM200-1 01330000 PART II - THE ASSEMBLER 01332000 01334000 The assembler section of ASSIST is a high-speed two-pass assembler 01336000 which produces an object program directly in memory, ready to be 01338000 interpretively executed. For the assembler language accepted by this 01340000 assembler, see the ASSIST INTRODUCTORY USER'S MANUAL. This section of 01342000 the manual gives first an overview of the internal workings of the 01344000 assembler, then descriptions of the logic for each separate control 01346000 section in the assembler. 01348000 01350000 A. OVERALL CONTROL LOGIC 01352000 01354000 1. INPUT 01356000 01358000 a. Address of primary assembler table (AVWXTABL DSECT). 01360000 01362000 The calling program passes to the main program of the assembler the 01364000 address of a table which contains all communications areas, address 01366000 constants, useful constants, and some workareas. The calling program 01368000 fills in some values before calling the assembler. These values 01370000 include the following: 01372000 Two words are given the values of low and high limits of a single 01374000 large workarea which may be used by the assembler. 01376000 Two bytes are given values of various bit flags which determine 01378000 exactly what running mode the assembler will use, and what options 01380000 will be in effect. 01382000 A halfword is given the value of the maximum number of errors 01384000 which can occur and still permit execution. 01386000 01388000 b. Deck of assembly language source cards. 01390000 01392000 The assembler source deck is read using the $SORC macro. This deck is 01394000 terminated by an END card, end-of-file indicator, or ASSIST internal 01396000 control card ($JOB, $ENTRY, or $STOP card used in BATCH run). 01398000 , 01400000 ASPLM200-2 01402000 01404000 2. OUTPUT 01406000 01408000 a. Source listing. 01410000 01412000 The ASSIST source listing resembles the standard assembler listing 01414000 very closely, but may be omitted if the NOLIST option is specified. 01416000 All statements which are flagged are always printed, regardless of the 01418000 status of print control. 01420000 The assembler prints various statistics at the end of the listing 01422000 which note the numbers of errors and warnings, and describe the amount 01424000 of core storage required to perform the assembly. 01426000 01428000 b. Object program. 01430000 01432000 The object program is produced at the beginning of the dynamic workarea,01434000 and is ready for execution at the end of the assembly. The object 01436000 program is not created if NOLOAD is specified in the user PARM field. 01438000 The assembler also stops producing code if the number of errors exceeds 01440000 the limit at any time. 01442000 01444000 c. Values in main assembler table. 01446000 01448000 The assembler sets various flags and values in the main assembler table,01450000 whose address was passed to it originally. These values are then used 01452000 by the calling program, and include the following: 01454000 Two bytes of flag bits (same as those passed in, but with more 01456000 bits possibly set). One bit notes whether the assembled program should 01458000 be permitted to be interpreted. 01460000 Two words give the real low and high limits of the assembled 01462000 program in memory. 01464000 Two words give the low and high limits of the program as assembled,01466000 i.e. the addresses appearing in the user assembly listing. 01468000 One word gives the relocation factor applied to the user program 01470000 addresses to obtain the corresponding real addresses in memory. 01472000 One word gives the entry point address in the user program, which 01474000 is either the first byte of the user program or an address given on a 01476000 user END card. 01478000 A halfword gives the number of statements in the assembly, for 01480000 possible use in calculating assembly rates. 01482000 01484000 The assembler does not return a return code in register 15; all 01486000 information to be returned is placed in the main assembler table. 01488000 , 01490000 ASPLM200-3 01492000 01494000 3. OVERALL CONTROL LOGIC SUMMARY 01496000 01498000 a. MPCON0 - ASSEMBLER MAIN PROGRAM 01500000 01502000 The main program initializes some areas of the main assembler 01504000 table AVWXTABL, sets a SPIE to trap interrupts, initializes the program 01506000 mask, and then calls the remaining subroutines. After printing the 01508000 storage usage, it returns control to the calling program. 01510000 MPCON0 calls all entry points in the assembler which are required 01512000 to be called in a fixed order. The entry points then fall into the 01514000 following groups: 01516000 1) PASS I initialization entries. 01518000 2) PASS I main control (MOCON1 csect). 01520000 3) PASS I ending, PASS II initialization entries. 01522000 4) PASS II main control (MTCON2 csect). 01524000 5) PASS II ending entries. 01526000 01528000 b. MOCON1 - PASS I MAIN CONTROL PROGRAM 01530000 01532000 MOCON1 receives control after all initialization has been done, 01534000 both for the overall assembly, and for each subroutine requiring it. 01536000 It then controls the first pass of the assembly, causing source cards 01538000 to be read and scanned until an END card is found, after which it 01540000 returns control to the main program MPCON0. 01542000 01544000 MOCON1 begins the cycle for each source statement by calling the 01546000 entry INCARD, which reads a source statement, and builds the required 01548000 record blocks for the statement. The record blocks include a block 01550000 for the source image and required flags (RSBLOCK), an optional block 01552000 for continuations and sequence numbers (RSCBLK), an optional block for 01554000 error code/scan pointer pairs (REBLK), and an optional block for 01556000 information depending on the type of operation code (RCODBLK). The 01558000 RSBLOCK for a statement includes bit flags which note the existence of 01560000 any other blocks for a statement. INCARD builds an RSBLOCK and possibly01562000 an RSCBLK if required. If it encounters an end-of-file indication 01564000 while reading, it creates a dummy END card, since MOCON1 executes until 01566000 it finds an END card. 01568000 01570000 MOCON1 now checks the current statement for being a comment card, 01572000 and scans for a label on the statement. If a legal label is found, it 01574000 calls SYENT1 to enter the label into the symbol table (but does not 01576000 define the symbol at this time). The address of a label in the symbol 01578000 table is saved in the main assembler table, where it can be accessed by 01580000 other modules. 01582000 01584000 MOCON1 now scans for an operation code in the statement. If one 01586000 is found, it calls OPFIND to determine whether the opcode is legal, and 01588000 if so, which one it is. OPFIND returns the address of an opcode control01590000 table entry (OPCODTB), which contains various flag values (3 bytes). 01592000 Among other things, the first two bits of one of the bytes determines 01594000 what type of instruction has been found. 01596000 01598000 MOCON1 now scans for an operand field, setting the scan pointer to 01600000 the address of the first blank after the opcode if there is no operand. 01602000 , 01604000 ASPLM200-4 01606000 01608000 The type of instruction is determined, and the proper second-level 01610000 subroutine is called to process the statement (IAMOP1 for machine 01612000 operations, IBASM1 for assembler statements). Each second-level program01614000 performs any location counter alignment required for the statement, 01616000 performs some scanning of the statement, depending on its type, and 01618000 determines the total length of the statement to be added to the location01620000 counter. Each creates a record code block for variable data (RCODBLK), 01622000 and returns the address of it to MOCON1. 01624000 01626000 MOCON1 completes the RCODBLK by placing the beginning location 01628000 counter value for the statement in the block, and also places this value01630000 in the symbol table entry for the statement label, if there was one. 01632000 The location counter is incremented, and UTPUT1 is ccalled to save all o01634000 the record blocks which exist for the statement. If the statement was 01636000 an END statement, MOCON1 returns control to MPCON0; otherwise it repeats01638000 the above process for the next statement. 01640000 01642000 See part V. for MACRO Processing description in MOCON1. 01644000 01646000 c. MTCON2 - PASS II MAIN CONTROL PROGRAM 01648000 01650000 MTCON2 is called after all of the PASS I ending routines and PASS 01652000 II initialization routines have been called. After brief initialization01654000 of its own, it enters a loop, one time for each statement. 01656000 01658000 MTCON2 first calls UTGET2, which returns either an indication that 01660000 no statements are left to assembler, or the addresses of all existing 01662000 record blocks for the next statement. UTGET2 also restores the record 01664000 error block (REBLK) to its place in AVWXTABL (AVREBLK), if the REBLK 01666000 already exists. 01668000 01670000 MTCON2 tests for the existence of a record code block (RCODBLK). 01672000 If none exists, the statement was either a comment or had an unknown 01674000 opcode, so MTCON2 just calls OUTPT2 to format and print the statement, 01676000 since no further processing can be done for it. If an RCDOBLK exists, 01678000 MTCON2 sets the location counter form the value saved in it, sets the 01680000 scan pointer to the scan pointer saved in the RSBLOCK, and then calls 01682000 the appropriate second-level routine to process the statement. 01684000 01686000 The second-level routine (ICMOP2 for machine instructions, IDASM2 01688000 for assembler instructions), performs any required operand processing, 01690000 then calls UTPUT2 to load any assembled object code, and OUTPT2 to 01692000 format and print the statement, with any error messages required. 01694000 01696000 After all statements have been processed, MTCON2 aligns the highest01698000 location counter value to a doubleword boundary, then returns control to01700000 MPCON0. 01702000 , 01704000 ASPLM200-5 01706000 01708000 4. ENTRY POINT HIERARCHY TABLE 01710000 01712000 The following table lists all entry points called during the course01714000 of an assembly. The entries are listed in order by level, where the 01716000 level of a module is defined to be the maximum number of modules in a 01718000 calling chain above the given module, i.e. the main program has a level 01720000 of 0. The entries are listed first by level, then in alphabetical 01722000 order within each level. Under each module are listed the entries that 01724000 it may call, by level, then by alphabetical order. Names preceded by 01726000 'M' instead of a level number are names of macros which call intrinsic 01728000 modules, whose names are also given. For ease of use, any entry which 01730000 calls no others in the assembler is flagged with an asterisk. 01732000 01734000 LEVEL 0 ENTRIES 01736000 01738000 MPCON0 - assembler main control program 01740000 1 BRINIT*, ESINT1*, LTINT1*, LTEND1*, MOCON1, MTCON2, OPINIT*, 01742000 1 OUEND*,OUINT*,SYEND2*,SYINT1*,UTEND2,UTINT1,UTEND1 01744000 6 ERRTAG* 01746000 M $PRNT(XXXXPRNT) 01748000 01750000 01752000 LEVEL 1 ENTRIES 01754000 01756000 01758000 ESINT1* - pre-pass I external symbol module initialization 01760000 01762000 LTEND1* - end of pass I for literal table processor 01764000 01766000 LTINT1* - pre-pass I literal table processor initialization 01768000 01770000 MOCON1 - Pass I main control program 01772000 2 IAMOP1, IBASM1, INCARD, OPFIND*, UTPUT1* 01774000 4 SYENT1* 01776000 5 ERRLAB 01778000 6 ERRTAG* 01780000 M $PRNT(XXXXPRNT) 01782000 01784000 MTCON2 - Pass II main control program 01786000 2 ICMOP2, IDASM2, UTGET2* 01788000 5 OUTPT2* 01790000 01792000 OPINIT* - initialize opcode table processor 01794000 01796000 OUEND2* - end of assembly for output formatting processor 01798000 M $PRNT(XXXXPRNT) 01800000 01802000 OUINT1* - pre-pass I output processor initialization 01804000 01806000 SYEND2* - end of assembly for symbol table processor 01808000 01810000 SYINT1* - pre-pass I symbol table initialization 01812000 01814000 UTEND2 - end of assembly for utilities module (code production) 01816000 5 UTPUT2* 01818000 01820000 UTEND1* - terminate pass I, initiate pass II for storage utilities 01822000 3 XXXXDKE1 01824000 01826000 UTINT1* - pass I initialize utilities routines 01828000 3 XXXXDKOP 01830000 , 01832000 ASPLM200-6 01834000 01836000 LEVEL 2 ENTRIES 01838000 01840000 IAMOP1 - Pass I machine instruction scanning 01842000 3 LTENT1, SCANEQ 01844000 6 ERRTAG* 01846000 01848000 IBASM1 - Pass II assembler instruction scanning and processing 01850000 3 ESCSEC*, ESENX1, LTDMP1* 01852000 4 CODTL1 01854000 5 CCCON1*, ERRLAB 01856000 6 ERRTAG*, EVALUT 01858000 7 SDBCDX, SYFIND* 01860000 8 SDDTRM* 01862000 01864000 ICMOP2 - Pass II machine instructions - operand scanning, assembly01866000 3 BRDISP*, LTGET2* 01868000 5 OUTPT2*, UTPUT2* 01870000 6 ERRTAG*, EVALUT 01872000 7 SDBCDX, SYFIND* 01874000 8 SDDTRM 01876000 01878000 IDASM2 - Pass II assembler instructions - scanning and assembly 01880000 3 BRDROP*, BRUSIN*, ESENX2, LTDMP2 01882000 4 CNDTL2 01884000 5 CCCON2*, OUTPT2*, UTPUT2* 01886000 6 ERRTAG*, EVALUT 01888000 01890000 INCARD - input ofsource cards, construction of record blocks 01892000 6 ERRTAG* 01894000 M $SORC(XXXXSORC) 01896000 01898000 OPFIND* - look up opcode in opcode table 01900000 01902000 UTGET2* - Pass II retrieval of record block addresses 01904000 3 XXXXDKRD 01906000 01908000 UTPUT1* - Pass I saving of record blocks in dynamic workarea 01910000 3 XXXXDKWT 01912000 01914000 LEVEL 3 ENTRIES 01916000 01918000 BRDISP* - decode address into base-displacement form 01920000 01922000 BRDROP* - drop a register from base register availability 01924000 01926000 BRUSIN* - allow a given register to be used as a base register 01928000 01930000 ESCSEC* - external symbol manipulation - START, CSECT, DSECT 01932000 01934000 ESENX1 - ENTRY, EXTRN processing during Pass I 01936000 4 SYENT1* 01938000 01940000 ESENX2 - ENTRY, EXTRN processing during Pass II 01942000 4 SYENT1* 01944000 6 ERRTAG* 01946000 01948000 LTDMP1* - calculate literal pool length during Pass I 01950000 01952000 LTDMP2 - have a literal pool assembled and printed during Pass II 01954000 4 CNDTL2 01956000 , 01958000 01960000 ASPLM200-7 01962000 LTGET2* - retrieve program address of a given literal, Pass II 01964000 01966000 LTENT1 - scan literal during Pass I, enter into literal table 01968000 4 CODTL1 01970000 01972000 LTGET2* - retrieve program address of a given literal, Pass II 01974000 01976000 SCANEQ - scan expression until = or blank found 01978000 7 SDBCDX 01980000 01982000 XXXXDKE1-terminate write phase, initiate read phase during 01984000 disk utility run 01986000 01988000 XXXXDKOP-initialize disk utility during disk utility run 01990000 01992000 XXXXDKRD-read a buffer from disk during disk utility run 01994000 01996000 XXXXDKWT-write a buffer to disk during disk utility run 01998000 02000000 02002000 LEVEL 4 ENTRIES 02004000 02006000 CNDTL2 - assemble code for DC or literal constant, have it printed02008000 5 CACON2, CBCON2*, CCCON2*, CFHCN2*, CPCON2*, CVCON2, CXCON2*,02010000 5 CZCON2*, OUTPT2*, UTPUT2* 02012000 6 CDECN2, ERRTAG* 02014000 02016000 CODTL1 - scan DS, DC, literal constant, build CNCBLOCK for it02018000 5 CACON1, CBCON1*, CCCON1*, CDECN1*, CFHCN1*, CPCON1*, CVCON1*,02020000 5 CXCON1*, CZCON1* 02022000 6 ERRTAG*, EVALUT 02024000 8 SDDTRM* 02026000 02028000 SYENT1* - enter symbol in symbol table return @ table entry for it02030000 02032000 02034000 LEVEL 5 ENTRIES 02036000 02038000 CACON1 - Pass I A-type constant processor 02040000 6 SCANCO 02042000 02044000 CACON2 - pass II A-type constant processor 02046000 6 EVALUT 02048000 02050000 CBCON1* - pass I B-type constant processor 02052000 02054000 CBCON2* - pass II B-type constant processor 02056000 02058000 CCCON1* - pass I C-type constant processor 02060000 02062000 CCCON2* - pass II C-type constant processor 02064000 02066000 CDECN1 - pass I D and E-type constant processor 02068000 6 CDECN2 02070000 02072000 CFHCN1* - pass I F- and H-type constant processor 02074000 02076000 CFHCN2* - pass II F- and H-type constant processor 02078000 02080000 CPCON1* - pass I P-type constant processor 02082000 , 02084000 ASPLM200-8 02086000 02088000 CPCON2* - pass II P-type constant processor 02090000 02092000 CVCON1* - pass I V-type constant processor 02094000 02096000 CVCON2 - pass II V-type constant processor 02098000 7 SYFIND* 02100000 02102000 CXCON1* - pass I X-type constant processor 02104000 02106000 CXCON2* - pass I X-type constant processor 02108000 02110000 CZCON1* - pass I Z-type constant processor 02112000 02114000 CZCON2* - pass II Z-type constant processor 02116000 02118000 ERRLAB - flag a label error, saving scan pointer 02120000 6 ERRTAG* 02122000 02124000 OUTPT2* - format and print a statement, with error messages02126000 M $PRNT(XXXXPRNT) 02128000 02130000 UTPUT2* - load and duplicate object code, filling unused space02132000 02134000 02136000 LEVEL 6 ENTRIES 02138000 02140000 CDECN2 - pass II D- and E-type constant processor 02142000 8 SDDTRM* 02144000 02146000 ERRTAG* - create and save a scan pointer/error code pair02148000 02150000 EVALUT - general expression evaluator routine 02152000 7 SDBCDX*, SYFIND* 02154000 02156000 SCANCO - scan expression until comma or blank found 02158000 7 SDBCDX* 02160000 02162000 02164000 LEVEL 7 ENTRIES 02166000 02168000 SDBCDX - determine type of self-defining term, call right processor02170000 8 SDBTRM*, SDCTRM*, SDDTRM*, SDXTRM* 02172000 02174000 SYFIND* - find symbol in symbol table, return @ table entry, if any02176000 02178000 02180000 LEVEL 8 ENTRIES 02182000 02184000 SDBTRM* - evaluate binary self-defining term 02186000 02188000 SDCTRM* - evaluate character self-defining term 02190000 02192000 SDDTRM* - evaluate decimal self-defining term 02194000 02196000 SDXTRM* - evaluate hexadecimal self-defining term 02198000 , 02200000 ASPLM400-1 02202000 02204000 PART III - THE INTERPRETER 02206000 02208000 The interpreter section of ASSIST is a program which interpretively02210000 executes S/360 object code. It can perform all of the standard02212000 instruction set, and may permit decimal and floating point operations if02214000 these are desired. Although privileged operations and SVC calls are not02216000 performed at the current time, conditional code exists in the program02218000 for decoding them, and branching to individual sections of code to do02220000 each individual instruction. The interpreter also allows a number of02222000 simple I/O, debugging, and conversion pseudo instructions, which can be02224000 handled as macro instructions by regular S/360 assemblers, thus02226000 maintaining compatibility. 02228000 02230000 A. OVERALL CONTROL LOGIC 02232000 02234000 1. INPUT 02236000 02238000 a. ADDRESS OF EXECUTION CONTROL BLOCK (ECONTROL) 02240000 02242000 All execution parameters and workareas are contained in one block,02244000 which is passed to the interpreter by the calling program. This design02246000 makes for flexible use of the interpreter for several differing02248000 purposes, and keeps the interface between the interpreter and the rest02250000 of the system at a minimum. This table contains the following items of02252000 special importance, in addition to other things: 02254000 02256000 A block of four simulated floating point registers. The values02258000 here are used to initialize the real floating point registers, and the02260000 registers are stored back here when execution is completed. 02262000 02264000 A block of 16 simulated general purpose registers. These contain02266000 the initial values of the user registers on input, contain the contents02268000 of the user registers during execution, and are used to produce the02270000 completion dump after execution terminates. 02272000 02274000 A simulated Program Status Word. 02276000 02278000 Various byte flags for execution mode, special error codes, debug02280000 control, and completion dump condtrol. 02282000 02284000 Two instruction count limits, the first giving the maximum number02286000 of instructions to be executed, and the second for decrementing and02288000 testing. 02290000 02292000 Two addresses giving the lower and upper limits for a storage to02294000 be printed in a completion dump. These addresses may be changed during02296000 user program execution by execution of an XLIMD pseudo instruction.02298000 , 02300000 ASPLM400-2 02302000 02304000 A block of six addresses originally created by the ASSIST02306000 assembler, which describe the storage limits (both real and as given in02308000 the assembly listing), entry point address, and execution-time02310000 relocation factor for the user program. 02312000 02314000 An instruction stack (actually a circular linked list), in which02316000 is kept the last ten instructions done, with their addresses. This is02318000 used by the completion dump routine to produce an instruction trace.02320000 02322000 Various other work words and execution-time values are also kept02324000 in ECONTROL. 02326000 02328000 b. DECK OF DATA CARDS 02330000 02332000 An (optional) deck of data cards may be read by the interpreter02334000 for the user program. An XREAD pseudo instruction in a user program02336000 causes execution of the code generated by a $READ macro in the02338000 interpreter, which obtains the next card, or gives an end-of-file02340000 indication. Under no circumstances is it possible for the user02342000 program to read beyond the end-of-file. 02344000 02346000 2. OUtPUT 02348000 02350000 a. PRINTED OUTPUT 02352000 02354000 The interpreter may have output printed, either using a $PRNT02356000 macro in response to an XPRNT insruction in the user program, or using02358000 an XSNAP macro to perform services requested by an XDUMP instruction.02360000 02362000 b. PUNCHED OUTPUT 02364000 02366000 The interpreter may have cards punched, using an $PNCH macro when02368000 the user program contains an XPNCH pseudo instruction. Note that in02370000 some circumstances, the cards to be punched may be listed on the02372000 printer instead. See the INTRODUCTORY ASSEMBLER USER's MANUAL, part02374000 III, regarding the NOPUNCH option in the user PARM field. 02376000 02378000 c. VALUES IN THE EXECUTION CONTROL BLOCK (ECONTROL) 02380000 02382000 The interpreter sets various flags and values in the execution02384000 control block. These values may then be tested by the calling program02386000 to determine the reason for completion, and are used by the completion02388000 dump program to produce its output. Most of the variables were noted02390000 above in section A.1.a of this part. Others include the following:02392000 02394000 Special error flag byte, which notes either a normal termination02396000 by a return to the address originally supplied to the user program as a02398000 return address, or else a code indicating one of several special02400000 completion codes (such as exceeding time or records, branch out of02402000 range, and others of type COMPLETION CODE ASSIST = ). 02404000 02406000 The address of a completion code/error message block, which may02408000 be used by the completion dump routine. 02410000 , 02412000 ASPLM400-3 02414000 02416000 3. OVERALL CONTROL LOGIC SUMMARY 02418000 02420000 The interpreter begins by initializing various values in the02422000 execution control block ECONTROL, and setting registers for its own use.02424000 After all initialization is complete, the actual interpretation begins.02426000 02428000 The next instruction to be executed is fetched from user storage,02430000 and placed in the next instruction stack entry (ECSTACKD), along with02432000 the address of the instruction, condition code, and program mask. Some02434000 preliminary decoding is done, which increments the location counter by02436000 the length of the instruction, and sets up registers with several codes02438000 indicating actions to be performed for the instruction. A four-way02440000 branch is taken to separate the instructions into the following types:02442000 RR, RX, SI-RS, SS, each of which has a primary decoding section.02444000 02446000 At the primary decoding section for each type, common processing02448000 for all instructions of that type is performed. This includes decoding02450000 register addresses, some fetching of simulated register values, decoding02452000 operand addresses, and checking of storage addresses for legality. After02454000 this has been done, each primary decoding section branches to one of a02456000 number of secondary decoding sections belonging to it. Each of these02458000 sections completes the interpretation for a single instruction, or for a02460000 group of instructions which can be handled in the same way. After this02462000 has been done, control passes back to code for checking legality of a02464000 successful branch, or to code for checking instruction count limit02466000 excession. The next instruction is fetched, and the cycle repeats.02468000 02470000 Certain instructions can cause a call to an external routine. These02472000 include all the X-macro pseudo instructions, and any SVC calls.02474000 02476000 02478000 4. ENTRY POINT HIERARCHY TABLE 02480000 02482000 As of 11/30/70, the interpeter consists of only one control02484000 section, and has no other internal modules. External module calls are02486000 shown by the overall hierarchy chart (Part I.A.4.). This section is02488000 included only for possible future use with SVC routines or special I/O02490000 routines which may be added. 02492000 , 02494000 ASPLM400-5 02496000 C. OPTIONAL EXTENDED INTERPRETER 02498000 02500000 1. OVERVIEW. 02502000 02504000 The ASSIST Optional Extended Interpreter (EXECUT) was designed with02506000 two important ideas in mind: 02508000 02510000 This interpreter would be more table driven in nature than 02512000 the original interpreter. The flow of program logic would 02514000 center around one large decoding table. This table although 02516000 enlarging and slowing down the interpreter slightly, would 02518000 make program logic easier to follow and update. 02520000 02522000 The Optional Interpreter would support more s/360 -S/370 02524000 instructions as well as a new pseudo instruction, XOPC. 02526000 02528000 Overall program speed and program size were considered secondary in this02530000 design. 02532000 02534000 MACRO USAGE: 02536000 $SAVE - Used to save registers. 02538000 $RETURN - Used to restore registers. 02540000 $SPIE - Catch execution time interrupts. 02542000 EIXTAB - Create a secondary displacement table entry. 02544000 EITAB - Create a main table entry. 02546000 02548000 DSECT USAGE: 02550000 ECONTROL - Main interpreter interface with ASSIST system.02552000 ECSTACKD - Structure of instructions executed stack. 02554000 ECBRSTAK - Structure of stack of branch instructions. 02556000 , 02558000 ASPLM400-6 02560000 02562000 2. DECODING TABLES. 02564000 02566000 The logic of EXECUT (new extended) centers around two tables02568000 EIOPCDTB and EICONTAB. The first table, EIOPCDTB, is a 256 byte02570000 secondary control table ordered according to opcodes. Each byte of the02572000 table contains an index into the main control table EICONTAB. Bytes02574000 of the secondary control table corresponding to invalid opcodes contain02576000 entries pointing to special EICONTAB entries in the top of the main02578000 table. This allows for easy checking of operation exceptions.02580000 The main contol table, EICONTAB, contains entries for every02582000 instruction (grouped or singularly) which are used in the decoding of02584000 each individual interpreted instruction. Each main table entry is 802586000 bytes in length. The first byte contains miscellaneous decoding flags;02588000 which machines the instruction is allowed to run on, does the02590000 instruction have an extended opcode, is the instruction a privileged02592000 instruction? The second byte of each table entry contains the length of02594000 the given instruction and is used in updating the ASSIST PSW. The third02596000 byte of each table entry contains flags telling about the kind of02598000 storage checking to be performed on the first and second operands of the02600000 instruction. The fourth byte of each table entry describes the type of02602000 storage alignment needed by the given instruction. The fifth byte of02604000 each table entry describes the type of register specification needed02606000 by the instruction (even or odd). The sixth table byte is a flag02608000 telling where in the instruction the length of storage being 02610000 modified is located. Bytes 7 and 8 of the table represent a halfword02612000 displacement past program label EISPEJMP. This displacement is used in02614000 branching to the special routine which actually interprets each02616000 instruction. 02618000 These two tables are located at the bottom of the interpreter.02620000 The secondary control table (EIOPCDTB) is created using repeated calls02622000 to the EIXTAB macro. The main control table (EICONTAB) is created using02624000 repeated calls to the EITAB macro. 02626000 , 02628000 ASPLM400-7 02630000 02632000 3. OVERALL PROGRAM LOGIC FLOW 02634000 02636000 Execut is called from the main control program (ASSIST). At02638000 entry to Execut, register 10 has the address of the ECONTROL block.02640000 Two base registers are used, R13 first then R12. Initialization of02642000 the instruction stacks is performed along with other initialization02644000 of the fake user registers and some work areas. 02646000 After initialization, decoding and interpretation of the first02648000 instruction begins. Each instruction is interpreted in the same02650000 manner, as follows: The instruction is inserted into the instruction02652000 stack and the ASSIST instruction counter is decremented checking for02654000 a timer run out. The opcode of the instruction is used as an index02656000 into the secondary control table (EIOPCDTB). The one byte value02658000 in this table is multiplied by 8 and is used as an index into the02660000 main table (EICONTAB). The main table entry for the instruction02662000 being interpreted is moved into an 8 byte work area (EICTNTRY). The02664000 decoding of the instruction entails checking which flag bits of the02666000 table entry are active. Several internal subroutines are executed02668000 to do checking not performed in the main decoding loop. The names02670000 of these and a short description follow: 02672000 02674000 EICHKST - Used when a privileged operation is found to check02676000 if the interpreter is in the Supervisor State 02678000 EITRIC - Used to provide the instruction trace (if enabled)02680000 and count instructions for the Instruction 02682000 Execution Count Facility (if enabled) 02684000 EIBASDSP - Used to calculate an address from the base-displacement02686000 found in the instruction 02688000 EIMSFCHK - Used to check fetch and store addresses to see if02690000 they are in the program area. 02692000 02694000 Following the common decoding process bytes 7 and 8 of the02696000 main table entry for a given instruction are loaded into a register02698000 (R1). A branch on this displacement passed program label EISPEJMP02700000 is made to execute the special routine associated with each instruction.02702000 The instructions were grouped where ever possible with regard02704000 to the special routines (i.e. 1 special routine may be used to02706000 interpret many instructions). Register usage in EXECUT remains the02708000 same no matter what the instruction. The opcode of the instruction02710000 being interpreted is moved into an instruction of the same format,02712000 where ever possible, and is actually executed. A spie is used02714000 to catch the user interrupts possible which were not already 02716000 checked for. 02718000 After each instruction is interpreted, control is passed02720000 back to the top of the main decoding loop and this entire process02722000 is repeated. 02724000 , 02726000 ASPLM550-1 02728000 02730000 ASSIST MACRO PROCESSOR INTERFACE SPECIFICATIONS 02732000 02734000 This section specifies the interfaces between the macro processsor 02736000 modules and the remainder of the ASSIST assembler, also noting variables02738000 which may be of use to the macro processor, or are needed for various 02740000 communications. The following items are given: MODULES, SET VARIABLES,02742000 VARIABLES, PARAMETERS. 02744000 02746000 **************************** INDEX TO THIS SECTION *********************02748000 02750000 MODULES 02752000 02754000 MACINT 1 - 02 02756000 MACRO1 1 - 03 02758000 MEXPND 1 - 09 02760000 , 02762000 ASPLM550-2 02764000 02766000 MODULES 02768000 02770000 MACINT 02772000 02774000 MACINT is called 1 time by MPCON0 before Pass 1 of the assembly is 02776000 begun. Any required initialization can be performed at this time. 02778000 Internal initialization should be omitted if ASSIST is not in MACRO 02780000 mode, and such code should be omitted, particularly any which obtains 02782000 working storage. The following test can be used: 02784000 02786000 TM AVTAGSM,AJOMACRO 02788000 BZ NOINIT skip initialiation 02790000 02792000 Even if no macro processing is done in a given run, the following 02794000 initialization is REQUIRED, if the macro processor is generated at all: 02796000 02798000 1. The fullwords AVGEN1CD and AVGEN2CD should be set = AVADDHIH. 02800000 This is required for checking purposes in INCARD and UTPUT1. During 02802000 processing of macro expansions, AVGEN2CD contains the address of the 02804000 first byte of the last (temporally) generated statement blocks from 02806000 MEXPND, while AVGEN1CD contains the address of the byte beyond the first02808000 one created, so that INCARD works backwards until AVGEN1CD <= AVGEN2CD. 02810000 02812000 2. Any global translate tables modified by any macro code must be 02814000 set to their correct values (with exception of 64 bytes of AWZEROS 02816000 beginning at AWZEROS+C' '). This allows for possiblity of interrupt 02818000 for time or space during a BATCH run. 02820000 , 02822000 ASPLM550-3 02824000 02826000 02828000 MACRO1 02830000 02832000 MACRO1 can be called under any of the following circumstances: 02834000 02836000 1. When a MACRO command is encountered in the input source 02838000 program, MACRO1 is called to read and process the entire macro 02840000 definition which follows. 02842000 02844000 2. If ASSIST is generated with the macro library facility, MACRO1 02846000 may be called to scan a macro definition which is obtained from a 02848000 macro library. MACRO1's processing is essentially the same as for 1. 02850000 This type of processing is caused by finding an *SYSLIB card. 02852000 02854000 3. When a macro-type command (GBLx, LCLx, ACTR, SETx, AIF, AGO, 02856000 etc) is discovered in open code, MACRO1 may be called to scan it, and 02858000 perform desired action, which may include having a number of cards read 02860000 for a forward branch of an AGO or AIF. 02862000 02864000 4. If a statement is discovered containing a SET symbol, MACRO1 02866000 can be called to have it scanned and appropriately expanded. 02868000 02870000 ENTRY CONDITIONS 02872000 02874000 REGISTERS 02876000 02878000 RA = scan pointer to first byte of OPERAND field, if any. If no 02880000 operand is present, = @ 2nd blank beyond the opcode. 02882000 02884000 RC = @ OPCODTB entry for the statement, if any exists (i.e., for 02886000 cases 1, 2, 3, but not 4). 02888000 02890000 AVWXTABL VARIABLES 02892000 02894000 AVREBPT = @ REBLK for stmt, if errors exist in it already. 02896000 02898000 AVRSBPT = @ RSBLOCK for the statement, which includes various flags02900000 and the source statement itself. 02902000 02904000 AVRSCPT = @ RSCBLK for the statement, if it is continued or has 02906000 sequence numbers. 02908000 02910000 AVSOLAST = @ last blank before the afterquote. 02912000 02914000 AVOULNCN = 3-byte, packed decimal number of CURRENT statement, 02916000 not next statement, can be used for diagnostics. 02918000 02920000 AVPRINT1 gives current print conditions, maybe tested to check on 02922000 allowability of MACRO definition: 02924000 02926000 TM AVPRINT1,AVPRSAVE 02928000 BO NOTALLOWED 02930000 , 02932000 ASPLM550-4 02934000 02936000 AVTAGSM contains various flag bits of interest to macro proc. 02938000 Flag AJOMACRO is definitely on (else MACRO1 will never be called). 02940000 Flag AJOMACRG is on if Assembler G options allowed (FUTURE USE******). 02942000 Flag AJOMACRH is on if Assembler H options allowed (FUTURE USE******). 02944000 Flag AJOMACSL is on if user desired to obtain macros from library. 02946000 02948000 02950000 02952000 02954000 EXIT CONDITIONS 02956000 02958000 REGISTERS 02960000 02962000 RB = return code showing action to be taken by MOCON1. 02964000 02966000 = 0 ==> MOCON1 should call INCARD to obtain the next source 02968000 cardimage fromthe card reader. This requires that MACRO1 has totally 02970000 disposed of the current source card residing in RSBLOCK, etc. This 02972000 is normal return for 1, 2, and 3(except AIF, AGO branches). 02974000 02976000 = 4 ==> the current statement exists in the usual record block 02978000 area, is probably a generated statement, or the statement found when 02980000 doing a forward read for open code AIF/AGO. It should essentially be 02982000 processed as though it had just been read via INCARD, altough the 02984000 processing may differ slightly for the two cases given, i.e., the stmt 02986000 may or may not be a generated statement. This return would be a 02988000 normal return for case 3 (AIF, AGO) and case 4. 02990000 02992000 = 8 ==> a statement exists in the usual record block position, 02994000 but UTPUT1 should be called immediately to store it away, i.e., it 02996000 probably has appropriate errors attached. This could occur for any 02998000 macro-type statement found out of order (MACRO, GBL, LCL, etc), or 03000000 perhaps for error messages caused by errors in AIF/AGOing in open 03002000 code. This would be an abnormal return from cases 1,2,3. 03004000 03006000 SUMMARY OF POSSIBLE RETURN CODES FOR THE CASES 03008000 03010000 CASE 0 4 8 03012000 1 NORMAL NO ORDER ERROR 03014000 2 NORMAL NO ORDER ERROR 03016000 3 NORMAL NORMAL(AIF,AGO) ORDER ERROR, OTHER ERROR 03018000 4 NO NORMAL NO 03020000 , 03022000 ASPLM550-5 03024000 03026000 GENERAL NOTES ON MACRO1 03028000 03030000 MACRO1 should allocate space when needed from the low end of 03032000 the dynamic area, using $ALLOCL, so that this space may eventually be 03034000 overlaid with object code. 03036000 03038000 When scanning a macro definition, opcodes may be discovered which 03040000 are not defined. These should be added to the list of macro names, but 03042000 marked as not yet defined. It is expected that they will either turn 03044000 up later in the user program, or else (if SYSLIB option exists), be 03046000 probably found in the library. 03048000 03050000 When a macro prototype is scanned, the name of the macro might 03052000 already be in the macro table, so that a new block should not be 03054000 gotten for the macro, but he existing one used instead. Double defn 03056000 of a macro occurs only when a prototype is found, and it is already 03058000 actually defined, not just present in the table. 03060000 , 03062000 ASPLM550-6 03064000 03066000 INDIVIDUAL CASES FOR CALLING MACRO1 03068000 03070000 1. MACRO STATEMENT FOUND IN INPUT. 03072000 03074000 MACRO1 identifies the opcode as MACRO, by checking the OPCTYPE 03076000 flag in the OPCODTB passed to it. It should check to make sure that 03078000 MACRO is allowed at that point. If not, it should return immediately 03080000 noting that the statement is out of order. 03082000 03084000 Assuming the MACRO statement is accepted, it should be printed 03086000 via OUTPT2, and the prototype statement obtained via INCARD, and 03088000 scanned. Three cases exist for the name of the macro: 03090000 03092000 a. It may not have been encountered before at all. In this case,03094000 it should be added to the list of macros, marked as DEFINED, and the 03096000 appropriate control block filled in as scanning the definition 03098000 continues. 03100000 03102000 b. It may have been previously defined. An error message should 03104000 be issued, and rest of the macro scanned. 03106000 03108000 c. It may be present in the macro list, but NOT defined. This 03110000 would occur when an undefined opcode is encountered during a previous 03112000 macro definition, and so is added to the list, but marked undefined. 03114000 The control block for the macro should be then marked defined, and 03116000 processing continued as though the name had not yet been seen. 03118000 03120000 After scanning the prototype and printing it via OUTPT2, MACRO1 03122000 should call INCARD repeatedly to obtai1the rest of the definition, 03124000 allocating storage for control blocks as needed from dynamic-low, 03126000 using $ALLOCL. 03128000 03130000 Note: when calling OUTPT2, the following setup is appropriate: 03132000 03134000 RB = $OUCOMM : notes that no location counter, etc is needed. 03136000 03138000 RSBFLAG: actual statements: do not modify. 03140000 : special error messages: $RSBNPNN+$RSBMERR . 03142000 03144000 03146000 03148000 03150000 2. MACRO FROM SYSLIB 03152000 03154000 This situation is handled exactly as is a macro from the input 03156000 stream. The only difference is that the PRINT is turned OFF by the 03158000 macro library processor, so that the macro definitions do not get 03160000 printed by OUTPT2. 03162000 , 03164000 ASPLM550-7 03166000 03168000 3. MACRO-TYPE COMMAND IN OPEN CODE 03170000 03172000 MACRO1 is called when anything identified as a conditional 03174000 assembly statement is found. The actions taken are as follows: 03176000 (NOTE: RSBFLAG should be marked $RSBNP## for all stmts) 03178000 03180000 a. GBLx, LCLx, ACTR 03182000 Check for proper order, flag if incorrect, using ERRTAG, and set 03184000 RSBFLAG with $RSBNP##, so that the statement will be numbered, but will 03186000 not be processed except to be printed during Pass 2. Return with RB =8 03188000 so that MOCON1 will call UTPUT1 and then get next statement. 03190000 03192000 If statement order is acceptable, perform required actions. 03194000 Storage maybe allocated using $ALLOCL from dynamic-low, or if desired, 03196000 using $ALLOCH from dynamic-high, with low being much preferred. 03198000 03200000 When the statement is processed, it should be passed to OUTPT2 03202000 and printed (RB=$OUCOMM). 03204000 03206000 b. SETx 03208000 03210000 The statement is scanned, and the indicated action performed. If 03212000 any errors exist, they may be flagged using ERRTAG, and return should 03214000 be made with RB =8, and also, the RSBFLAG should be flagged $RSBNP##. 03216000 03218000 03220000 c. AIF, AGO 03222000 03224000 The statement is scanned, and indicated action performed. AIF's 03226000 which fail are treated exactly as are SETx. 03228000 03230000 AGO's and successful AIF's cause the following actions to occur: 03232000 First, UTPUT1 is called to save the current AIF/AGO stmt (whose RSBFLAG 03234000 should be marked $RSBNP##). Next, INCARD is called until the desired 03236000 sequence symbol is discovered, at which point return should be made 03238000 with RB = 4, thus allowing MOCON1 to treat the current statement as the 03240000 one just read. 03242000 03244000 NOTE: if an end-of-file is encountered by INCARD, it will 03246000 generate an END card automatically (and will do this every time that 03248000 it is called after an end-file occurs). Thus, MACRO1 may just flag 03250000 the END card with an appropriate message (ERRTAG), and return normally 03252000 (RB = 4). This message may be omitted, since it might be obvious what 03254000 has occurred. 03256000 , 03258000 ASPLM550-8 03260000 03262000 4. STATEMENT WITH POSSIBLE SUBSTITUTION OF SET VARIABLE 03264000 03266000 In this case, RC (OPCODTB ptr) = 0. The statement should be 03268000 scanned, and substitution performed if needed. If any is actually done 03270000 the original statement should have its RSBFLAG marked $RSBNPNN, and 03272000 should be passed to UTPUT1 to save it. Then it can be expanded, thus 03274000 creating a new RSBLOCK overlaying the previous one, which should be 03276000 marked $RSBGENR, not only to show that it is generated, but also to 03278000 stop macro-type statements from being generated. Return is made with 03280000 RB = 4, so that the generated statement is scanned and processed 03282000 appropriately. 03284000 03286000 , 03288000 ASPLM550-9 03290000 03292000 MEXPND 03294000 03296000 This module is called by MOCON1 to expand macro calls, and is only 03298000 called under the following circumstances: 03300000 03302000 1. An unknown opcode is encountered. 03304000 03306000 2. It is not already a generated statement (i.e., $RSBGENR is not 03308000 already set on in RSBFLAG). 03310000 03312000 3. AVTAGSM is flagged with AJOMACRO. 03314000 03316000 When called, MEXPND may check for the opcode being a defined macro 03318000 immediately, and return with RB = $ERIVOPC if it is not. If it is set, 03320000 MOCON1 flags it using ERRTAG and continues. Possible expansion is 03322000 shown by RB = 0 on return. If desired, MEXPND may set RB = 0 always 03324000 and always show the outer level macro as a generated statement. 03326000 03328000 If the call is for a defined macro, MEXPND expands it as follows: 03330000 03332000 1. Workareas and stack space are allocated as desired, from the 03334000 dynamic-low area, with no restrictions on boundary alignment of the 03336000 pointer AVADDLOW. 03338000 03340000 2. Space is reserved for an error message statement immediately 03342000 below the current address in AVADDHIH. This may be used if macro 03344000 expansion causes an overflow. 03346000 03348000 3. Initialization is done as desired for the entire macro nest 03350000 expansion. This includes initializing a variable to 0, to be used as 03352000 a counter for macro nest level, to be compared to AVMMNEST as a limit. 03354000 This counter is incremented by 1 every time a macro is called, and 03356000 decremented for each MEND or MEXIT. 03358000 03360000 4. Processing of the outer macro and any inner macros begins. 03362000 03364000 MEXPND places generated statements in the dynamic-high area, 03366000 with the first generated statement at the highest actual memory address,03368000 working lower as statements are generated. When exgenerating statements03370000 MEXPND does the following: 03372000 03374000 1. Sets AVGEN1CD = AVGEN2CD = AVADDHIH (@ lowest used byte so far, 03376000 always on fullword boundary). AVGEN1CD will then remain unchanged. 03378000 Macro call is scanned 03380000 2. For each statement generated, appropriate information is placed 03382000 starting at the address (AVGEN2CD) - 1, and working backwards, as 03384000 described below. At the end of processing for each statement, AVGEN2CD 03386000 should contain the address of the (temporally) last byte of information 03388000 saved, i.e., the lowest address of usable information. During this 03390000 process, AVADDHIH should NOT be modified. It may also be desirable to 03392000 create a dummy first block, in order to allow for symbol table/literal 03394000 table expansion from AVADDHIH downward, without running over generated 03396000 statements. 03398000 , 03400000 ASPLM550-10 03402000 03404000 3. ERROR HANDLING: if the MACTR, MNEST, or MNEST counters are 03406000 overrrun during expansion, an appropriate message should be generated 03408000 and placed as a generated statement, withe flags $RSBNPNN+$RSBMERR, 03410000 or at least $RSBNPNN, with latter case used if it is not to be counted 03412000 as an actual error. 03414000 03416000 If storage overflow occurs, MEXPND should cancel the entire nest 03418000 of genrated code, and place an appropriate message as a generated stmt, 03420000 so that the user will be informed. It should also set the AVOVERFL 03422000 bit on in AVTAGS3, s that a message will be printed at the end of the 03424000 assembly. 03426000 03428000 03430000 ENTRY CONDITIONS 03432000 03434000 REGISTERS 03436000 RA = scan pointer to first character of the opocde. 03438000 03440000 VARIABLES 03442000 03444000 AVSOLAST is set appropriately, as limit to scanning required. 03446000 03448000 03450000 EXIT CONDITIONS 03452000 03454000 RB = 0 ==> 0 or more generated statements exist in dynamic-high 03456000 and MOCON1 should call INCARD continue calling INCARD to obtain them. 03458000 03460000 RB = nonzero value ==> error in macro call statement which 03462000 prevents it from being expanded, such as being an undefined or 03464000 invalid opocde, or any other reason which prevents expansion. In this 03466000 case, RB = error code to be supplied to ERRTAG, and RA = scan pointer 03468000 to the error. MOCON1 will flag the statement immediately, and call 03470000 UTPUT1 to save it. Also, the RSBFLAG should be set to show 03472000 RSBNP##. 03474000 03476000 , 03478000 ASPLM550-11 03480000 03482000 FORMAT OF GENERATED STATEMENT BLOCKS 03484000 03486000 The following describes the layout of generated statements. 03488000 AVGEN1CD contains the address of the first byte following the last 03490000 byte generated for the first statement generated, while AVGEN2CD has 03492000 the address of the first byte of the last statement generated, so 03494000 that AVGEN2CD <= AVGEN1CD . 03496000 03498000 03500000 Essentially, an information block for a generated statement 03502000 consists (in descending order of addresses) of the fixed part of an 03504000 RSBLOCK (slightly modified), the variable part of one (source stmt), 03506000 and optionally, the error code/scan pointer sections of a REBLK, if 03508000 there are any such errors in the statement. 03510000 03512000 The following gives the layout of the block. The ADDRESS field 03514000 is given relative to the ORIGINAL value of AVGEN2CD, before the code 03516000 was generated. 03518000 03520000 ADDRESS NAME(if any) description 03522000 --------- ---------- ------------------------------------------03524000 -1 RSBSCAN reserved for future use 03526000 -2 RSBNUM = length-1 of REBLK, if exists, i.e., 03528000 will become REBLN. 03530000 -3 RSBFLAG flag byte for RSBLOCK (see notes below) 03532000 -4 RSBLENG length-1 of generated statement. This 03534000 value + RSB$L will become the actual 03536000 RSBLENG for the generated statement. 03538000 03540000 -5 last byte of generated statement 03542000 -5-(RSBLENG) first byte of generated statement 03544000 03546000 -5-(RSBLENG)-1 last byte of REBLK, if exists 03548000 -5-(RSBLENG)-1-(RSBNUM) first byte of error code/scan ptr part 03550000 of REBLK. RSBNUM will become REBLN. 03552000 03554000 NOTE: this setup assumes RSB$L = 4 (length of RSBLOCK fixed section). 03556000 03558000 NOTES ON RSBLFAG: the following are possible combinations of flags 03560000 in RSBFLAG, with what they are used for: 03562000 03564000 $RSBGENR normal generated statements, with no local 03566000 (ERRTAG) errors attached already. No REBLK 03568000 exists inthis case. 03570000 $RSBNP## a macro call, will not be further processed, 03572000 but will be numbered. Also COMMENTS cards. 03574000 $RSBNPNN+$RSBMERR a special error message, will not be further 03576000 processed expcet for printing, but is printed 03578000 specially, as error message. 03580000 03582000 $RSBGENR+$REBX like $RSBGEBR, except some normal errors are 03584000 are already attached. 03586000 $RSBNP##+$REBX for any illegal statment such as illega 03588000 opcode, so that MOCON1 doesn't waste time 03590000 looking it up again. 03592000 , 03594000 ASPLM600-1 03596000 03598000 APPENDIX I: GENERAL CONVENTIONS AND INFORMATION 03600000 03602000 A. PROGRAM DOCUMENTATION 03604000 03606000 1. PHILOSOPHY AND GENERAL DESCRIPTION 03608000 In general, the documentation philosphy followed inside ASSIST is 03610000 to put as much documentation as possible inside the source program 03612000 to keep it from being separated from the program, and to keep it in 03614000 machine-readable form. Commments cards are set up in such a way that 03616000 comments of a global nature (e.g. subroutine entry/exit conventions, 03618000 dummy section descriptions, etc.) can easily be extracted from the 03620000 source program and printed in summary form. 03622000 ASSIST documentation is reasonably heavy. Approximately 20 % of 03624000 all source cards in the system are comments cards. At least 95 % of all03626000 machine instructions and macro calls have comments with them. Many 03628000 assembler instructions and conditional assembly instructions also have 03630000 comments. 03632000 In addition to comments, program readability is aided by liberal 03634000 use of SPACE, EJECT, and TITLE cards to block off logical parts of 03636000 the program. Every control section, and most macros and dummy sections 03638000 are titled. 03640000 03642000 2. INTERNAL DOCUMENTATION FOR SUMMARY USE 03644000 03646000 Certain sections of the system have comments cards which are not 03648000 only useful for understanding the sections to which they belong, but 03650000 which may be required as part of a summary. These sections include 03652000 control sections, dummy sections, entry points, internal subroutines, 03654000 and macro instruction definitions. In general, the most important 03656000 comments for a section immediately precede it, and are completely 03658000 blocked off by special characters, in order to make them stand out. 03660000 The general form of summary documentation is as follows: 03662000 03664000 **--> atype: objectname brief statement of purpose * 03666000 * descriptive information * 03668000 * delimiter line (*'s, .'s. or +'s). * 03670000 03672000 atype gives the type of object described, and is one of the 03674000 following: CSECT, DSECT, ENTRY, INSUB, or MACRO . 03676000 objectname gives the name of the section being described. 03678000 03680000 Each of the different types uses certain character combinations 03682000 to flag the information in the block and make it easy to pick out the 03684000 comments cards containing important information of a given sort. 03686000 The differences are as follows: 03688000 03690000 atype first 2 characters delimiter cards, margins 03692000 CSECT *. . 03694000 DSECT *. . 03696000 ENTRY *. . 03698000 INSUB *+ + 03700000 MACRO .* * 03702000 , 03704000 , 03706000 ASPLM580-1 03708000 **--> CSECT: XREFA CROSS REFERENCE CONTROL SECTION................... 03710000 *. WRITTEN BY ALICE FELTE,ALAN ARTZ, AND RICH LONG . 03712000 *. ---SPRING/SUMMER 1973 . 03714000 *. . 03716000 *. THIS CSECT IS THE MAIN CONTROL SECTION FOR THE CROSS REFERENCE . 03718000 *. FOR ASSIST. IT HAS THREE ENTRY POINTS WHICH WILL BE DESCRIBED LATER. 03720000 *. THIS ROUTINE CONTROLS ALL THE CROSS-REFERENCE FACILITY IF IT IS TO . 03722000 *. BE GENERATED. THE FIRST PASS THE FLAGS AND LOCATION COUNTER ARE . 03724000 *. INITIALIZED--XRINT1. SPACE IS ALLOCATED FOR THE CROSS-REFERENCE . 03726000 *. ENTRIES AND NECESSARY FLAGS ARE SET FOR THE SECOND PASS--XRINT2. . 03728000 *. THE *XREF CARD WILL BE SCANNED BY XRSCAN. . 03730000 *. . 03732000 *. XRINT1: PASS ONE INITIALIZATION . 03734000 *. CALLED FROM MPCON0. . 03736000 *. 1) INITIALIZE THE ADDITIONAL LOCATION COUNTER, . 03738000 *. AVXRLNCN, TO 1. . 03740000 *. 2) INITIALIZE THE COUNTER, AVXRCNT, FOR THE NUMBER OF . 03742000 *. REFERENCES TO 0. . 03744000 *. . 03746000 *. XRINT2: PASS TWO INITIALIZATION . 03748000 *. CALLED FROM MTCON2. . 03750000 *. 1) ALLOCATE SPACE USING THE MACRO $ALLOCH TO THE . 03752000 *. DSECT, XREFTAB, SIZE * THE NUMBER OF REFERENCES . 03754000 *. TO BE COLLECTED AND INITIALIZE ALL SPACE TO 0. . 03756000 *. 2) SET AVXRLAVS TO FIRST FREE NODE. . 03758000 *. 3) SET HEADER NODE FOR THE TREE STRUCTRUE EQUAL TO 0. . 03760000 *. . 03762000 *. XRSCAN: CARD SCANNING ROUTINE. . 03764000 *. A FLAG IS PASSED IN A REGISTER TO DETERMINE WHICH . 03766000 *. PASS IS BEING PROCESSED. FOR THE FIRST PASS, SCAN THE . 03768000 *. CARD AND SET THE SD FLAG ACCORDINGLY. FOR THE SECOND . 03770000 *. PASS, SCAN THE CARD AND SET THE SR FLAG ACCORDINGLY. . 03772000 *. . 03774000 *...................................................................... 03776000 03778000 **--> ENTRY: XRINT1 PASS ONE INITIALIZATION........................ 03780000 *. THIS IS CALLED FROM MPCON0 ONLY ONCE . 03782000 *. MODULE DESCRIPTION-- . 03784000 *. INITIALIZES AVXRLNCT, THE ADDITIONAL LINE COUNTER, TO 1 . 03786000 *. AND AVXRCNT, COUNTER FOR THE NUMBER OF REFERENCES FOUND, TO 0. 03788000 *. . 03790000 *...................................................................... 03792000 , 03794000 ASPLM580-2 03796000 **--> ENTRY: XRINT2 PASS TWO INITIALIZATION........................ 03798000 *. THIS IS CALLED FROM MPCON0 ONLY ONCE. . 03800000 *. MODULE DESCRIPTION-- . 03802000 *. ALLOCATES A BLOCK OF SPACE USING $ALLOCH WHERE THE SIZE . 03804000 *. IS AVXRCNT * XRSIZE. IT SET AVXRLAVS TO THE ADDRESS OF THE . 03806000 *. BEGINNING OF THE BLOCK OR FIRST FREE NODE AS RETURNED BY . 03808000 *. $ALLOCH. IT ALSO SETS AVXRHEAD, THE HEADER POINTING TO THE . 03810000 *. FIRST ENTRY IN THE TREE, EQUAL TO 0. . 03812000 *. . 03814000 *...................................................................... 03816000 03818000 **--> ENTRY: XRSCAN CARD SCANNING ROUTINE.......................... 03820000 *. THIS IS CALLED FROM MOCON1 AND MTCON2 TO SCANN THE *XREF CARD. 03822000 *. . 03824000 *. ENTRY CONDITIONS-- RA @ TO BEGIN *XREF PARM SCAN . 03826000 *. RD IDX TO SET FLAGS(0=PASS 1,8=PASS 2) . 03828000 *. . 03830000 *. MODULE DESCRIPTION-- . 03832000 *. CHECK TO SEE WHICH PASS IT IS IN. DEPENDING ON WHICH . 03834000 *. PASS IT IS, THE *XREF CARD IS SCANNED AND THE FLAGS SET. . 03836000 *. IF IT IS PASS ONE, THE CARD IS SCANNED FOR SD=. IF IT . 03838000 *. NOT THERE, AVXRFLAG IS NOT CHANGED. IF IT IS, CHECK FOR . 03840000 *. LEGAL VALUES OF *, 0, OR 1. IF IT IS NONE OF THESE THREE, . 03842000 *. THE STATEMENT IS FLAGGED WITH A SYNTAX ERROR. IF IT IS A . 03844000 *. LEGAL VALUE, THE AVXRFLAG IS SET ACCORDINGLY. . 03846000 *. IF IT IS PASS TWO, THE CARD IS SCANNED SR= AND IS . 03848000 *. PROCESSED SIMILARLY TO SD= ABOVE. . 03850000 *. . 03852000 *...................................................................... 03854000 , 03856000 ASPLM580-3 03858000 **--> CSECT: XRCOLL COLLECTION ROUTINE............................. 03860000 *. THIS IS CALLED BY SYFIND AFTER IT IS FOUND THAT THE SYMBOL . 03862000 *. IS DEFINED AND THE REFERENCE IS TO BE COLLECTED. . 03864000 *. . 03866000 *. ENTRY CONDITIONS-- RA HAS THE ADDRESS OF THE SYMBOL IN THE . 03868000 *. SYMBOL TABLE. . 03870000 *. . 03872000 *. MODULE DESCRIPTION-- . 03874000 *. AVXRHEAD HAS THE ADDRESS OF THE FIRST NODE IN THE TREE. . 03876000 *. AVXRLAVS HAS THE ADDRESS OF THE FIRST AVAILABEL FREE NODE . 03878000 *. . 03880000 *. THE FOLLOWING ALGORITHM IS FROM "THE ART OF COMPUTER . 03882000 *. PROGRAMMING" VOL. 1 'FUNDAMENTAL ALGORITHMS' BY DONALD KNUTH. 03884000 *. CHECK HEADER 'AVXRHEAD' FOR EMPTY TREE(= 0). IF EMPTY, . 03886000 *. EXECUTE INSUB 'XRCLAVS' TO GET FREE NODE FOR PROCESSING. . 03888000 *. 'XRCLAVS' INSERTS SYMBOL AND INITIALIZES LINKS IN NODES--- . 03890000 *. LEFT LINK=0,RIGHT KINK=-1 (ODD DISPLACEMENT IMPOSSIBLE, NEGA-. 03892000 *. TIVE TO SIMPLIFY CHECKS IN XRPRNT ROUTINE). IF NOT EMPTY, . 03894000 *. DETERMINE WHETHER OR NOT A NODE HAS ALREADY BEEN CREATED FOR . 03896000 *. THE PRESENT SYMBOL BY COMPARING THE ADDRESS OF THE SYMBOL . 03898000 *. IN REG RA TO THE ADDRESSES OF SYMBOLS ALREADY IN THE TREE . 03900000 *. NODES. IF EQUAL, PROCESS THE REFERENCE (DESCRIBED LATER). . 03902000 *. OTHERWISE, COMPARE ACTUAL SYMBOLS TO DETERMINE WHERE IN THE . 03904000 *. TREE THE NEWLY CREATED NODE SHOULD BE INSERTED. IF THE NEW . 03906000 *. SYMBOL IS SMALLER IN VALUE THAN THAT OF A NODE IN TREE, THE . 03908000 *. COMPARISON CONTINUES WITH IT'S LEFT SUBTREE. IF LARGER, COM-. 03910000 *. PARISON CONTINUES WITH RIGHT SUBTREE. WHEN A ZERO LEFT LINK . 03912000 *. IS FOUND, OR NEGATIVE RIGHT LINK, THE LINK IS CHANGED TO . 03914000 *. POINT TO THE NODE WHICH WILL CONTAIN THE INFO FOR THE NEW . 03916000 *. SYMBOL(NODE FETCHED AND INITIALIZED BY 'XRCLAVS'. . 03918000 *. . 03920000 *. PROCESSING THE REFERENCES: . 03922000 *. ONCE THE SYMBOL IS PLACED IN THE TREE, THE REFERENCE . 03924000 *. MUST BE ENTERED IN A BLOCK OF REFERENCES. THIS IS DONE IN . 03926000 *. THE FOLLOWING MANNER: . 03928000 *. 1) IF THE PTR TO THE BLOCK OF REFERENCES IS NULL . 03930000 *. (I.E. FIRST REFERENCE), A BLOCK MUST BE . 03932000 *. ALLOCATED AND THE ADDRESS PLACED IN THE POINTER . 03934000 *. OF THE XREFTAB. . 03936000 *. 2) IF IT IS NOT NULL, THE POINTER IS AN ADDRESS AND . 03938000 *. THE BLOCK CAN BE LOCATED. . 03940000 *. . 03942000 *. 3) THE FIRST FULLWORD OF THE REFERENCE-BLOCK . 03944000 *. CONTAINS EITHER: . 03946000 *. A) THE NUMBER OF SLOTS LEFT IN THE BLOCK. . 03948000 *. THE REFERENCE MAY BE ENTERED IN THE BLOCK, THE . 03950000 *. NUMBER OF SLOTS IS DECREMENTED BY 1. . 03952000 *. B) NEGATIVE ADDRESS OF AN ADDITIONAL BLOCK . 03954000 *. C) ZERO, MEANING A NEW BLOCK MUST BE ALLOCATED. . 03956000 *. ALLOCATE A NEW BLOCK AND SET THE POINTER IN . 03958000 *. PRECEDING BLOCK TO IT (NEGATIVE ADDRESS). THEN . 03960000 *. A) MAY BE FOLLOWED. . 03962000 *...................................................................... 03964000 , 03966000 ASPLM580-4 03968000 * * * * REGISTER USAGE: XRCOLL * * * * * * * * * * * * * * * * * * * * 03970000 * R0= X'0000FFFF' USED TO INITIALIZE NODE LINKS * 03972000 * RW= @ NODE IN XREF LIST BEING CHECKED (@ XREFTAB) * 03974000 * RX= @ SYMSECT OF SYMBOL ALREADY IN XREF TABLE * 03976000 * RA= @ SYMSECT OF SYMBOL TO BE CHECKED IN XREFTAB * 03978000 * RB= @ BEGIN OF XREF TABLE (FROM WHICH OFFSETS COMPUTED) * 03980000 * RC,RD,RE,RY,RZ WORK REGISTERS * 03982000 * R14= INTERNAL LINKAGE * 03984000 * R15= BASE REGISTER * 03986000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 03988000 03990000 *.--> INSUB: XRCLAVS . . . . . . . . . . . . . . . . . . . . . . . . . 03992000 *. GET THE FIRST FREE NODE FROM THE LIST OF AVAILABLE . 03994000 *. SPACE, AVXRLAVS. SETS AVXRLAVS TO POINT TO THE NEW FIRST . 03996000 *. FREE NODE. STORES THE ADDRESS OF THE SUMBOL'S SYMSECT ENTRY . 03998000 *. IN THE NEW NODE. . 04000000 *. RW HAS THE ADDRESS OF THE NEW NODE . 04002000 *. RX HAS ADDRESS OF OLD NODE . 04004000 *. LEFT LINK INITIALIZED TO ZERO; RIGHT LINK TO -1 . 04006000 *. NOTE: IT IS POSSIBLE TO HAVE THREAD OF A NODE POINT BACK TO . 04008000 *. ROOT NODE WHICH HAS INDEX DISPLACEMENT OF ZERO. SINCE -0 IS . 04010000 *. NOT DISTINGUISHABLE FROM +0, THE END OF THE TREE IS DENOTED . 04012000 *. BY -1 VICE 0 . 04014000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 04016000 04018000 **--> CSECT: XRPRNT PRINT ROUTINE.................................. 04020000 *. CALLED FROM MPCON0 TO PRINT OUT THE CROSS REFERENCE. . 04022000 *. THE COMPRESS BIT OF AVXRFLAG IS TESTED BY AVXRCOMP TO . 04024000 *. DETERMINE WHICH FORMAT TO USE FOR PRINTING. IF IT IS OFF, . 04026000 *. EACH REFERENCE SYMBOL IS PRINTED ON A NEW LINE. IF IT IS ON,. 04028000 *. THE REFERENCED LABELS ARE PRINTED MORE THAN ONE PER LINE IF . 04030000 *. THERE IS ROOM. . 04032000 *. THE FOLLOWING ALGORITHM IS FROM "THE ART OF COMPUTER . 04034000 *. PROGRAMMING" VOL. 1 'FUNDAMENTAL ALGORITHMS' BY DONALD KNUTH. 04036000 *. THE TREE IS THEN TRAVERSED IN POSTORDER. . 04038000 *. GET THE ADDRESS OF THE FIRST NODE IN THE TREE FROM . 04040000 *. AVXRHEAD. IF IT IS 0, PRINT A MESSAGE THAT NO SYMBOLS . 04042000 *. HAVE BEEN REFERENCED. IF IT IS NOT 0, FOLLOW THE LEFT . 04044000 *. LINKS UNTIL IT IS 0. THEN PRINT THE SYMBOL FROM THE . 04046000 *. NODE AND ALL ITS REFERENCES. NOTE: A NEGATIVE . 04048000 *. REFERENCE IS A MODIFY AND A POSITIVE REFERENCE IS A . 04050000 *. FETCH. IT IS PRINTED ACCORDING TO THE FORMAT DESCRIBED . 04052000 *. ABOVE. . 04054000 *. THEN THE RIGHT LINK IS CHECKED. IF IT IS -1,WE ARE . 04056000 *. AT THE END OF THE TREE AND RETURN TO ASSIST. . 04058000 *. IF IT IS LESS THAN -1,IT IS A THREAD BACK TO A NODE. . 04060000 *. GET THE POSITIVE ADDRESS OF THE NODE, PRINT THE SYMBOL . 04062000 *. AND ITS REFERENCES. CHECK THE RIGHT LINK AGAIN. . 04064000 *. IF IT IS POSITIVE, IT IS THE ADDRESS OF THE NEXT NODE. . 04066000 *. GO TO THAT NODE AND CHECK ITS LEFT LINK AS ABOVE. . 04068000 *. . 04070000 *...................................................................... 04072000 , 04074000 ASPLM580-5 04076000 * * * * REGISTER USAGE: XRPRNT * * * * * * * * * * * * * * * * * * * * 04078000 * RW= @ CURRENT XREFTAB ENTRY PROCESSED * 04080000 * R0= LAST @ TO START STMT # (COMPRESSED OUTPUT) * 04082000 * R2= -1 DENOTES END OF TREE * 04084000 * RA= LAST @ TO START A SYMBOL (COMPRESSED OUTPUT) * 04086000 * RB= @ XREFBLK BEING PROCESSED * 04088000 * RC,RD,RZ WORK REGISTERS * 04090000 * RE= @ OF 1ST ELEMENT (BASE FROM WHICH OFFSETS GIVEN) * 04092000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 04094000 04096000 *.--> INSUB: XRPRLINE PRINTS A LINE OF REFERENCES . . . . . . . . 04098000 *. SETS RZ TO POINT TO THE BEGINNING OF THE LINE. CLEAR . 04100000 *. OUTPUT LINE TO ALL BLANKS. . 04102000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 04104000 04106000 *.--> INSUB: XRPNUMSL . . . . . . . . . . . . . . . . . . . . . . . . . 04108000 *. GETS INDEX TO 1ST REFERENCE OF BLOCK, INDEX TO LAST REFERENCE. 04110000 *. TO PRINT, AND VALUE FROM XRBLKNUM TO USE AS FLAG FOR TEST FOR. 04112000 *. ADDITIONAL BLOCKS LATER IN MAIN SECTION OF CODE. . 04114000 *. RX= INDEX TO 1ST REFERENCE TO BE PRINTED . 04116000 *. RD= INDEX TO LAST REFERENCE TO BE PRINTED . 04118000 *. RY= FLAG USED LATER(IF - THERE IS AN ADDITIONAL BLOCK) . 04120000 *...................................................................... 04122000 SPACE 2 04124000 , 04126000 ASPLM600-2 04128000 04130000 a. CSECT 04132000 Each of the different types of blocks may contain certain specific 04134000 kinds of information, in addition to general descriptive text. These 04136000 are also coded in specific ways to facilitate future production of 04138000 lists and indices. The individual types are described as follows: 04140000 The information in a CSECT block generally describes overall 04142000 properties of the control section. In some cases, the text may be 04144000 very short, if the control section has a large number of entry points 04146000 with a fair amount of comments. If all of the entry points of a csect 04148000 call the same subroutines, use the same set of dummy sections, or use 04150000 the same set of macros, these will be noted in the block for the csect. 04152000 If the csect is itself an entry point, the block may contain any of the 04154000 information described below under ENTRY. 04156000 04158000 b. DSECT 04160000 In addition to descriptive text, a DSECT block may contain any of 04162000 the following types of comments cards: 04164000 04166000 *. LOCATION: where in the program the data described by the . 04168000 dsect resides, such as in a specific table of a csect. 04170000 04172000 *. NAMES: notes the first 2-3 characters which begin all . 04174000 names belonging to the dsect. 04176000 04178000 *. GENERATION: if this dummy section describes a data block . 04180000 which is generated (all or in part) by a specific macro, the macro 04182000 name(s) used are noted here. 04184000 04186000 c. ENTRY 04188000 In addition to descriptive information giving the purpose of the 04190000 subroutine and possibly when it is called, any or all of the following 04192000 may appear if appropriate: 04194000 04196000 *. ENTRY CONDITIONS . 04198000 Following this statement is a list of the entry conditions for the 04200000 entry point, usually consisting of a list of the parameter registers for04202000 the entry point and their usage. 04204000 04206000 *. EXIT CONDITIONS . 04208000 This statement precedes a list of the exit conditions for the 04210000 entry, which is normally a list of parameter registers and their usage. 04212000 04214000 *. CALLS list of entry point names, separated by commas. . 04216000 A CALLS statement gives an alphabetical list of all entry points 04218000 which may be called by this subroutine (when entered form the entry 04220000 point associated with the block), with the exception of the special 04222000 subroutines which can only be called by macro expansions and thus do 04224000 not necessarily follow normal linkage conventions. These include 04226000 the input/output and debugging modules (XXXXREAD, XXXXSNAP, etc). 04228000 One or more CALLS statements may be needed to complete the list. 04230000 04232000 *. USES DSECTS: list of dummy sections referenced inside the 04234000 section of code, in alphabetical order. 04236000 04238000 *. USES MACROS: list of highest-level macros used by the 04240000 section of code, in alphabetical order. 04242000 04244000 *. NAMES: description of any additonal restrictions on 04246000 the labels used in this section of code. 04248000 , 04250000 ASPLM600-3 04252000 04254000 d. INSUB (INternal SUBroutine) 04256000 Internal subroutine comments normally include a brief explanation 04258000 of the section's purpose, followed by ENTRY CONDITIONS and EXIT 04260000 CONDITIONS, specified similar to those of an ENTRY. 04262000 Note, as of 9/1/70, many internal subroutines do not completely 04264000 follow the standard format, using '+' signs as delimiters, since this 04266000 was only started recently. 04268000 04270000 e. MACRO 04272000 Macro documentation includes a brief statement of the purpose and 04274000 usage of the macro, with a list of the macro parameters. If the macro 04276000 uses other macros, the following is included: 04278000 04280000 .* USES MACROS: list of all macros directly called. * 04282000 04284000 04286000 B. REGISTER AND SUBROUTINE LINKAGE CONVENTIONS 04288000 04290000 1. REGISTER EQUATE SYMBOLS 04292000 In order to facilitiate debugging and comprehensibility of the 04294000 program, symbolic registers are always used inside ASSIST. A number of 04296000 different sets of register equate symbols are provided, and they are 04298000 as follows: 04300000 04302000 a. ABSOLUTE REGISTER EQUATES 04304000 The standard set of equates of R0-R15 for general purpose 04306000 registers 0-15, and the set of equates F0-F6 for the floating point 04308000 registers 0-6 are included, and these symbols are used whenever more 04310000 symbolic equates are not approriate. For instance, these are always 04312000 used for registers 0, 1, and 2, since they have special properties. 04314000 04316000 b. SYMBOLIC REGISTER EQUATES (MAINLY FOR THE ASSEMBLER) 04318000 The following set of equates is provided mainly for use inside the 04320000 ASSIST assembler, but they may also be used by other parts of the 04322000 system which communicate with the assembler: 04324000 04326000 RW EQU R3 GENERAL WORK REGISTER 1 04328000 RX EQU R4 GENERAL WORK REGISTER 2 04330000 RY EQU R6 GENERAL WORK REGISTER 3 04332000 RZ EQU R6 GENERAL WORK REGISTER 4 04334000 04336000 RA EQU R7 PARAMETER REGISTER 1 04338000 This register is commonly used as a scan pointer register 04340000 inside the assembler. 04342000 RB EQU R8 PARAMETER REGISTER 2 04344000 This register is commonly used to pass a control value to 04346000 a subroutine, and on return, almost always contains either 04348000 an error code, or a zero to show no errors. 04350000 RC EQU R9 PARAMETER REGISTER 3 04352000 This register is most often used in the assembler for passing 04354000 a 24-bit value (such as the result of an expression or a 04356000 self-defining term). 04358000 RD EQU R10 PARAMETER REGISTER 4 04360000 RE EQU R11 PARAMETER REGISTER 5 04362000 Registers RD and RE may be used for subroutines needing more 04364000 than two or three arguments, but are more commonly used as 04366000 work temporary work registers. 04368000 , 04370000 ASPLM600-4 04372000 04374000 RAT EQU R12 ASSEMBLER TABLE POINTER-READ ONLY 04376000 This register points the main assembler table (VWXTABL csect, 04378000 AVWXTABL dsect) during an assembly. No subroutine in the 04380000 assembler may modify this register. 04382000 RSA EQU R13 SAVE AREA POINTER/BASE REG FOR SOME 04384000 This register is used to point to an OS/360 save area, for 04386000 any subroutine which may call another. Almost all subroutines04388000 use this as a base register if they are not lowest-level 04390000 routines. 04392000 RET EQU R14 RETURN ADDRESS USED IN CALLS 04394000 This is used in subroutine linkage for the return address to 04396000 a calling program. This symbol is generally used whenever 04398000 subroutine linkage is being set up, while R14 is used when the04400000 register is being used as a temporary work register. 04402000 REP EQU R15 ENTRY POINT ADDRESS/OFTEN USED BASE 04404000 This register is used to hold the entry point address for all 04406000 subroutines in the assembler. Lowest-level routines usually 04408000 use this as a base register. In other routines, this may be 04410000 used as a local work register, in which case the symbol R15 04412000 is normally coded. 04414000 04416000 c. OTHER REGISTER EQUATE SYMBOLS 04418000 04420000 In addition to the two main sets of equates mentioned above, the 04422000 ASSIST interpreter EXECUT has a local set of equates, and several 04424000 routines of the assembler have a few register equates also. These 04426000 sets are not currently used outside the control sections to which they 04428000 belong. 04430000 04432000 2. LINKAGE CONVENTIONS - THE ASSEMBLER 04434000 04436000 The linkage conventions inside the ASSIST assembler consist of 04438000 a few modifications to the standard OS/360 linkage conventions, which 04440000 have been changed mainly to save time and space. The differences are 04442000 as follows: 04444000 04446000 a. Registers R0-R6 (or R0-R2, RW-RZ) are protected across any 04448000 calling sequence and must be restored if changed. R14 (RET) must also 04450000 be restored if changed before returning. 04452000 04454000 b.Register R12(RAT) may not be changed by any routine. 04456000 04458000 c. Registers R7-R11 (RA-RE) are used for parameters and temporary 04460000 work registers, and are not protected at all across calls. No routine 04462000 ever requires more than five arguments, so these five registers are 04464000 sufficient. 04466000 04468000 d. Except for the above, all normal OS/360 conventions are followed04470000 regarding save area linkage requirements and usage. In general, most 04472000 routine only save as many registers as required. Lowest-level routines 04474000 use R15 as a base, and do not perfrom save area linkage, other routines 04476000 usually use R13 as a base and save area pointer. Many of the lowest- 04478000 level routines save no more than one or two registers. 04480000 , 04482000 ASPLM600-5 04484000 04486000 C. NAMING CONVENTIONS 04488000 04490000 1. CONTROL SECTIONS 04492000 04494000 All labels in a control section begin with the first two characters04496000 of the control section name. The single exception to this rule is the 04498000 csect VWXTABL, which contains names beginning with V, W, and X. 04500000 All normal csect and entry point names are six characters long, 04502000 except for those in the intrinsic routines which are only callable by 04504000 macro expansions. These are all eight characters long, and begin with 04506000 the characters 'XXXX' (such as XXXXSNAP, XXXXIOCO, etc). 04508000 In the assembler portion of ASSIST, entry points used only in the 04510000 first or second assembly pass end either with a 1 or 2, respectively. 04512000 04514000 2. DUMMY SECTIONS 04516000 04518000 All labels in a dummy section begin with the first two-three 04520000 characters of the dummy section name. Dummy sections used only inside 04522000 one control section normally use the first two characters of its name, 04524000 followed by a third character to distinguish the dummy section. The 04526000 single exception to this rule is the dsect AVWXTABL, which contains 04528000 symbols beginning with AV, AW, and AX. 04530000 04532000 3. MACROS 04534000 04536000 In general, macro names beginning with the character $ are global 04538000 macros, and are liable to be used in more than one control section. A 04540000 macro used only in one control section begins with the first two 04542000 characters of the control section name. In addition, all the X-macros 04544000 (XSNAP, XSAVE, XIDENT, etc) are also global macros, and do not follow 04546000 the above conventions because they already existed before ASSIST was 04548000 written. 04550000 Any macro which calls an intrinsic routine ends with the same four 04552000 characters as the entry point which it calls (such as XSNAP-XXXXSNAP, 04554000 $READ-XXXXREAD, XDECI-XXXXDECI, etc). 04556000 04558000 4. SET SYMBOLS 04560000 04562000 Set symbols used in ASSIST are of two kinds: the first are directly04564000 given values to indicate the options desired for an ASSIST generation. 04566000 Their names all begin '&$'. The second kind are for internal usage, 04568000 and may be indirectly set from values given by the first type. There 04570000 are no restrictions on the names of these symbols. 04572000 04574000 5. REGISTERS 04576000 04578000 Register equate symbols normally begin with 'R', but a few routines04580000 have some local equates, which begin with the first two characters of 04582000 the control section in which they are used. 04584000 04586000 6. MISCELLANEOUS INFORMATION 04588000 04590000 In general, symbols beginning with '$' are of a global nature. In 04592000 addition, no symbols contain the characters '@' or '#', which are 04594000 reserved for future expansions of ASSIST. 04596000 , 04598000 ASPLM600-6 04600000 04602000 D. CODING CONVENTIONS AND TYPICAL TECHNIQUES 04604000 04606000 1. SYMBOLIC CODING 04608000 04610000 Symbolic programming is used heavily in ASSIST. Register equates 04612000 are always used, and equate symbols are provided for most lengths. Very04614000 few nonsymbolic lengths are used anwhere in the code. 04616000 Since code modifcation is used in ASSIST to save time and space, 04618000 the following rules are followed to make the code readable: 04620000 a. All instructions modified during execution contain either of the04622000 symbols $ or $CHN in the fields modified. If an opcode is modified, 04624000 one of these symbols is added to the first operand field. 04626000 b. All modified instructions are labeled if they are modified by 04628000 any instructions other than the ones immediately preceding or following 04630000 the modified instruction. 04632000 04634000 2. TABLE MACROS 04636000 04638000 In order to facilitate changes in forms of large tables, almost all04640000 tables have entries generated macros instructions. This is especially 04642000 useful for tables which often have new entries added (such as the PARM 04644000 field table in csect APARMS, or the opcode table in csect OPCOD1). 04646000 One table macro which is used very heavily is the $AL2 macro, 04648000 which generates a list of halfword offset values of labels from a given 04650000 base label. Jumps are then taken by selecting one of the offset values,04652000 using codes which are multiples of two, then taking an indexed branch 04654000 to the base label. This technique is used instead of the more common 04656000 multiple-of-four codes and branch table method, because it is at worse 04658000 only slightly slower, and uses only half the space. 04660000 04662000 3. NONOBVIOUS CODE 04664000 04666000 In general, the code is written in a reasonably straightforward 04668000 fashion. However, in order to fulfill all the conflicting goals of 04670000 ASSIST (high speed, small space, replacibility of assembler modules, 04672000 linkage conventions close to OS/360 ones, and provision for future I/O 04674000 simulators requiring large space), some sections of code are now 04676000 optimized in a nonobvious way. 04678000 a. Some instructions are modified during execution. As mentioned 04680000 above under SYMBOLIC CODING, all modified instructions use the symbols 04682000 $ or $CHN to make this fact clear. 04684000 b. Most routines save and restore only those registers required, 04686000 and some routines have every single register allocated at some points 04688000 in their execution. The register allocation comments at the beginning 04690000 of such routines describes this however, so that free registers can 04692000 be found if needed. 04694000 c. Some routines use the knowledge of the order of variables to 04696000 move values around with less instructions, particularly LM and STM. 04698000 The order dependencies are always noted where the variables are defined.04700000 d. In general, excessively optimized or tricky code is confined 04702000 within a single control section, with its interface to remaining 04704000 sections defined in a simple way. 04706000 , 04708000 ASPLM610-1 04710000 04712000 APPENDIX II. SET VARIABLES AND CONDITIONAL ASSEMBLY 04714000 04716000 In order to to make possible the creation of ASSIST programs with 04718000 differing sets of options at a minimum cost in memory, conditional 04720000 assembly is heavily used throughout the ASSIST source program. The 04722000 following lists the set variables which are used to control conditional 04724000 assembly and includes their types and meanings of their possible values.04726000 04728000 VARIABLE TYPE VALUES AND DESCRIPTIONS 04730000 04732000 &$ACCT GBLB =0 no accounting discrimination is possible 04734000 =1 accounting discrimination is possible. 04736000 This option is a future use option which can be used to include 04738000 code to discriminate between different account numbers, thus allowing 04740000 different classes differing program capabilities and options. 04742000 **NOTE** LOCALLY WRITTEN CODE MUST BE ADDED FOR THIS OPTION. 04744000 04746000 04748000 &$ALIGN GBLB =0 Model provides data alignment(360's) 04750000 =1 does not require alignment(360/85&370's) 04752000 04754000 &$ASMLVL GBLB =0 ASSIST is being assembled for a DOS system. 04756000 =1 ASSIST is being assembled for an OS system. 04758000 As of 08/20/71 (version 1.2/A1S1), the DOS modifications are being 04760000 added, but are not yet available for distribution. 04762000 04764000 &$BLEN GBLA =# set to length of buffer(in bytes) 04766000 04768000 &$BUFNO GBLA =# set to number of buffers(>0) 04770000 04772000 &$BLEN and &$BUFNO are required for a disk utility version of 04774000 ASSIST. Can never be set to 0. Must be present if &$DISKU > 0 04776000 04778000 &$CMPRS GBLB =0 the CMPRS listing option is not provided. 04780000 =1 code is provided for the CMPRS listing option, 04782000 which allows printing two columns of statements per 04784000 page, reducing the assembly listing by 50%. 04786000 If it =1, code is added to csects APARMS and OUTPUT. 04788000 04790000 &$COMNT GBLA =0 no COMNT option is available. 04792000 =# the COMNT option is available, and if coded, 04794000 or if &$ACCT=1 and a given account number is used, 04796000 will count the number of comments on machine 04798000 instructions. User execution is not allowed if less04800000 than # per cent have comments on them. 04802000 If >0, code is added to APARMS, IAMOP1, and OUTPUT csects. 04804000 04806000 &$DATARD GBLB =0 only 1 card reader (SYSIN) exists. 04808000 =1 2 card readers exist, user program can read 04810000 cards from different DDNAME than assembler source 04812000 or object program. 04814000 This option adds code to XXXXIOCO. 04816000 , 04818000 ASPLM610-2 04820000 04822000 &$DEBUG GBLB =0 debugging code is allowed to be generated in 04824000 ASSIST modules. 04826000 =1 debugging code is not generated inside ASSIST. 04828000 This set variable interacts with other variables and macros to 04830000 control generation of conditional debugging code. See set variables 04832000 &DEBUG, &ID, and &TRACE, and macros $DBG and XSRTR. APPENDIX VI 04834000 gives full details on ASSIST internal debugging aids. 04836000 04838000 &$DECK GBLB =0 no object decks can be produced. 04840000 =1 an object deck can be punched (entrypoint 04842000 AODECK in AOBJDK exists). 04844000 Adds code in ASSIST, AOBJDK. 04846000 04848000 &$DECSA GBLB =0 assembler does not include code for decimal 04850000 instruction set. 04852000 =1 assembler recognizes and assembles decimal 04854000 instructions. 04856000 04858000 &$DECSM GBLB =0 the machine on which ASSIST is to run does not 04860000 have the decimal instruction set option. 04862000 =1 the machine on which ASSIST is to run does 04864000 have the decimal option. 04866000 As of 9/15/70, ASSIST requires the decimal instruction set. Some 04868000 sections of code (particularly csects ASSIST and OUTPUT) use decimal 04870000 instructions for convenience. This set variable is provided for future 04872000 use in adding alternate code to let ASSIST run without this feature. 04874000 04876000 &$DISKU GBLA =0 no intermediate disk code generated. 04878000 =1 becomes user option, DISKU/NODISKU. 04880000 =2 always disk intermediate storage. 04882000 if >0, code is added to XXXXIOCO, and UTOPRS. 04884000 04886000 &$DSKDV GBLC =Device Number for DISKU option, only 04888000 used when &$DISKU=0 and DOS system 04890000 **default='2314'** 04892000 04894000 04896000 &$ERNUM GBLA = value of highest-numbered error equate symbol, 04898000 normally = 2 * number of different equate symbols. 04900000 This variable is used by macro $SERR to create equate values at 04902000 first, and later to generate space for a pointer table in OUTPUT csect. 04904000 , 04906000 ASPLM610-3 04908000 04910000 &$FLOTA GBLB =0 the ASSIST assembler does not include code 04912000 and tables for the floating point instructions. 04914000 =1 the ASSIST assembler will recognize and 04916000 assemble the floating point instructions. 04918000 04920000 &$FLOTAX GBLB =0 the ASSIST assembler does not include code 04922000 and tables for the extended floating point 04924000 instruction set. 04926000 =1 the ASSIST assembler will recognize and 04928000 assemble extended floating point instructions. 04930000 04932000 &$FLOTE GBLB =0 ASSIST interpreter EXECUT will not execute 04934000 floating point instructions. 04936000 =1 ASSIST interpreter will execute floating 04938000 point instructions. 04940000 &$FLOTE is set to 0 if either &$FLOTA or &$FLOTM have that value, 04942000 i.e., the interpreter will not contain code to perform floating point 04944000 operations unless the assembler accepts the opcodes for them and the 04946000 computer has the hardware to perform them. 04948000 04950000 &$FLOTEX GBLB =0 the ASSIST interpreter EXECUT will not execute 04952000 extended floating point instructions. 04954000 =1 the ASSIST interpreter will execute extended 04956000 floating point instructions. 04958000 &$FLOTEX is set to 0 if &$FLOTMX has that value, i.e. the 04960000 interpreter will not contain code to perform extended floating point 04962000 operations unless the machine has the hardware to perform them. 04964000 04966000 &$FLOTM GBLB =0 machine on which ASSIST is to run does not have04968000 floating point instructions set. 04970000 =1 machine does have floating point insructions. 04972000 The only part of the ASSIST assembler using floating point 04974000 instructions is csect CDECNS (Floating point constant processor). This 04976000 section could be rewritten using only fixed-point operations, depending 04978000 on the value of &$FLOTM, for machines not having floating point, but 04980000 with users wanting to use D and E constants. 04982000 04984000 &$FLOTMX GBLB =0 machine on which ASSIST is to run does not have04986000 extended floating point instruction set. 04988000 =1 machine does have extended floating point 04990000 instructions. 04992000 04994000 &$FREE GBLA default value of FREE= parameter, should be set to 04996000 the minimum value which releases enough space for 04998000 operating system for buffers and modules to support 05000000 whatever i/o devices are allowed. 05002000 05004000 &$GENDAT GBLC = date given version of ASSIST generated, in form 05006000 mo/dy/yr. Becomes part of ASSIST header line. 05008000 05010000 &$HEXI GBLB =0 ASSIST interpreter EXECUT will not execute the 05012000 XHEXI instruction. 05014000 =1 The XHEXI instruction will be executed. 05016000 05018000 &$HEXO GBLB =0 ASSIST interpreter EXECUT will not execute the 05020000 XHEXO instruction. 05022000 05024000 &$IDF, GBLA = default and maximum possible values of I= option. 05026000 &$IMX If desired ASSIST has any kind of timer, these 05028000 values should be set very high so that the timing 05030000 control variables are used to stop loops instead. 05032000 , 05034000 ASPLM610-4 05036000 05038000 &$IOUNIT GBLC Specifies the ddname or file names used for 05040000 standard I/O (not including XGET/XPUT). 05042000 05044000 05046000 # USE OS DEFAULT DOS DEFAULT 05048000 05050000 1* Primary Card Input SYSIN(QSAM-GM) SYSIPT(DTFCD) 05052000 2 Secondary Input FT05f001(QSAM_GM) SYSRDS(DTFCD) 05054000 3* Printer FT06F001(QSAM-PL) SYSLST(DTFPR) 05056000 4 Punch FT07F001(QSAM-PL) SYSPCH(DTFCD) 05058000 5 Disk Intermediate FT08F001(BSAM) SYS001(DTFSD) 05060000 6 Macro Library SYSLIB(BPAM) N.A. 05062000 7 FOR FUTURE USE 05064000 8 FOR FUTURE USE 05066000 05068000 * Denotes Required Dataset ( Access Method/DTF) 05070000 05072000 &$KP26 GBLB =0 only 029 keypunch decks can be accepted. 05074000 =1 ASSIST responds to the KP=26 option, and can 05076000 translate incoming 026 keypunch decks correctly. 05078000 05080000 &$LDF, GBLA = default and maximum possible values of the L= 05082000 &$LMX parameter, only meaningful if &$PAGE=1. These are 05084000 normally set to the maximum possible number of lines05086000 on an actual page (usually 63). 05088000 05090000 &$MACOPC GBLB =1 Open code conditional assembly 05092000 allowed(if &$MACROS=1) 05094000 =0 No open code allowed 05096000 05098000 &$MACROS GBLB =0 the assembler part of ASSIST should not contain05100000 code for processing user-written macro instructions.05102000 =1 the ASSIST assembler should contain code to 05104000 process user-written macros. 05106000 05108000 &$MACROG,H,V GBLB NO asmg,h,v 05110000 FOR FUTURE USE 05112000 05114000 &$MACSIZ GBLA = address of byte 1 byte beyond maximum address of 05116000 the computer. **ONLY REQUIRED IN NON-OS/360 systems05118000 since ASSIST obtains this information from OS/360 05120000 CVT. 05122000 05124000 &$MACSLB GBLB =1 Macro library search implemented 05126000 =0 No macro library search 05128000 05130000 &$MCHNE GBLC Type of machine(for header only) 05132000 05134000 &$MODEL GBLA = model number of S/360 for which the system is 05136000 being assembled. 05138000 This variable is used to identify output, and is also provided for 05140000 future use in generating code optimized for different models, and for 05142000 modified versions for use with S/370 rather than S/360. 05144000 05146000 &$OBJIN GBLB =0 ASSIST cannot load object decks. 05148000 =1 object decks can be loaded. 05150000 This option adds code to ASSIST, and creates entry AOBJIN of csect 05152000 AOBJDK. 05154000 05156000 &$OPTMS GBLA = value from 0 to 9 indicating the degreee of space 05158000 versus speed optimization in the code generated for 05160000 ASSIST. Lower values generate smaller, but slower 05162000 versions of ASSIST. 05164000 This variable mainly affects sections of code in ICMOP2 and IDASM2.05166000 A small value causes the code in these sections to be generated to be 05168000 general and small, rather than special case oriented and larger. If 05170000 &$OPTMS is less than 3, error codes only are printed, saving about 1K of05172000 memory devoted to error messages in csect OUTPUT. &$OPTMS is also used 05174000 to set the value of &$SYHASH (for symbol table). Also, if &$OPTMS<3, 05176000 error messages are not printed, just the error numbers, and this change 05178000 saves approximately 1K by itself. 05180000 , 05182000 ASPLM610-5 05184000 05186000 &$PAGE GBLB =0 no page control code exists. 05188000 =1 page control code exists, and various options 05190000 are added (CPAGE, L=, P=, PD=, PX=, SS, SSD, SSX). 05192000 This option adds code to ASSIST, XXXXIOCO. 05194000 05196000 &$PDF, GBLA = default and maximum possible values of P= 05198000 &$PMX option (i.e., total number of pages allowed for 1 05200000 $JOB run in a BATCH or whole run otherwise). 05202000 Only meaningful if &$PAGE=1 05204000 05206000 &$PDDF, GBLA = default and maximum possible values for the PD=05208000 &$PDMX option (number of pages saved for user completion 05210000 dump). Only meaningful if &$PAGE=1. 05212000 05214000 &$PRIVOP GBLB =0 privileged operation codes are not accepted. 05216000 =1 privileged operation codes are assembled, and 05218000 recognized by the interpreter EXECUT. 05220000 This variable affects the opcode tables in OPCOD1 and a few lines 05222000 of code in ICMOP2 devoted to analysis of the operand forms needed only 05224000 by privileged operations.It also affects code in the interpreter EXECUT.05226000 05228000 &$PUNCH GBLB =0 no real card punch exists in ASSIST. 05230000 Attempted punching will be simulated. 05232000 =1 real card punch exists. 05234000 This adds code to XXXXIOCO. 05236000 05238000 &$PXDF, GBLA = default and maximum possible values for the PX=05240000 &$PXMX option (number of pages allowed for user execution 05242000 plus completion dump). Meaningful if &$PAGE=1. 05244000 05246000 &$P370 GBLB =0 the ASSIST interpreter EXECUT will not allow 05248000 S/370 privileged operations. 05250000 =1 the ASSIST interpreter will recognize S/370 05252000 privileged operation codes. 05254000 This variable affects only code in the interpreter. Its value is 05256000 set depending upon the value of &$PRIVOP and &$S370. If &$PRIVOP = 1 05258000 (i.e. the user wants privileged operations) and &$S370 ^= 0 (i.e. the 05260000 user wants some type of S/370 interpretation) then &$P370 is set to 1. 05262000 Else it is set to 0. 05264000 05266000 &$P370A GBLB =0 the ASSIST assembler will not permit 05268000 S/370 privileged operation codes. 05270000 =1 the ASSIST assembler will recognize 05272000 and assemble S/370 privileged operations. 05274000 This variable affects the opcode table in OPCOD1 and a few 05276000 lines of code in ICMOP2 needed only for S/370 privileged operation 05278000 codes. It is set to 1 if the values of &$PRIVOP and &$S370A 05280000 are both 1 (i.e. the user wants privileged operation codes and also 05282000 wants S/370 operation codes). Else it is set to 0. 05284000 , 05286000 ASPLM610-6 05288000 05290000 &$RDF, GBLA = default and maximum values of R= option (total 05292000 &$RMX output lines and cards during 1 $JOB run). 05294000 05296000 &$RDDF, GBLA = default and maximum values of RD= option (number 05298000 &$RDMX of output records to be reserved to provide a user 05300000 completion dump). 05302000 05304000 &$RECORD GBLA =0 or 1 record limit handling is done using the 05306000 values of R=, RD=, and RX= options only. 05308000 =2 record limit processing may involve the use of 05310000 the $TIRC macro (RECREM operand). This option 05312000 should only be used if there is a way to obtain the 05314000 actual number of records remaining for a job during 05316000 execution. The $TIRC macro may have to be modified 05318000 to accomplish this at a particular installation. 05320000 This variable affects only csect ASSIST. 05322000 05324000 &$RELOC GBLB =0 assembler will not contain code to relocate 05326000 a program to actual location in memory. 05328000 =1 assembler will contain code to relocate user 05330000 program to the area in memory where it actually is. 05332000 The program can be run with store-only protection. 05334000 This option is required to =1 if &$REPL>0, since the Replace 05336000 Monitor cannot handle programs unless they are relocated. 05338000 The only csect affected is UTOPRS. Code is added to test for the 05340000 replace option being used, in which case flags are set to simulate the 05342000 existence of a START card with the address in memory where the user 05344000 program will be loaded, which permits relocation to be done with no 05346000 other extra code in ASSIST. 05348000 05350000 &$REPL GBLB =0 ASSIST will not contain code for the replace 05352000 process. 05354000 =1 ASSIST will recognize the REPL option, 05356000 and will contain the code (csects REMONI, RFSYMS, 05358000 and modifications to ASSIST csect) to 05360000 perform dynamic replacement of control sections in 05362000 the ASSIST assembler. See PART IV of this manual. 05364000 This option allows module to be replaced as long as 05366000 they need not call other modules. 05368000 =2 as for =1, except that the extra code is added 05370000 to permit a replacement program to make calls to 05372000 existing ASSIST assembler modules. 05374000 , 05376000 ASPLM610-7 05378000 05380000 &$RXDF, GBLA = default and maximum values of RX= option (total 05382000 &$RXMX output records allowed for user execution plus dump 05384000 together). 05386000 &$SPECIO GBLB =0 no special I/O operations are recognized. 05388000 =1 special I/O operations are recognized by the 05390000 assembler (opcode type = $IS). 05392000 As of 9/15/70, this is a future use option for including code to 05394000 simulate I/O operations in core, using QSAM type commands. At this 05396000 time, the assembler part of this code does not exist, although some of 05398000 the code for scanning JCL and building control tables does. See thesis 05400000 paper of Harry McGuire, PSU. 05402000 05404000 &$SYHASH GBLA = number of fullwords in the initial pointer 05406000 table used by symbol table handler SYMOPS csect, and05408000 allocated in the high end of the dynamic workarea. 05410000 This value varies from 8 to 64, and is set depending on the value 05412000 of &$OPTMS, depending on space requirements. See beginning of csect 05414000 SYMOPS for details on how this value is set. 05416000 05418000 &$SYSTEM GBLC = operating system being used. This value is noted 05420000 on the printed output from ASSIST. It is also used 05422000 to set the value of &$ASMLVL, depending on whether 05424000 the first two characters of &$SYSTEM are 'OS' or 05426000 not. 05428000 As of 9/15/70, this should have one of the values: OS-PCP, OS-MFT, 05430000 or OS-MVT, or DOS. 05432000 05434000 &$S370 GBLA =0 the ASSIST interpreter EXECUT will not execute 05436000 IBM S/370 instructions. 05438000 =1 the ASSIST interpreter will interpret S/370 05440000 instructions making free use of the S/370 05442000 instruction set. 05444000 =2 the ASSIST interpreter will interpret S/370 05446000 instructions using only standard S/360 instructions.05448000 05450000 &$S370A GBLB =0 the ASSIST assembler will not include code 05452000 for the S/370 instruction set. 05454000 =1 the ASSIST assembler will recognize and 05456000 assemble standard S/370 instructions. 05458000 05460000 &$TDF, GBLC = default and maximum possible values which can 05462000 &$TMX be used as the T= option (i.e. total time for 1 05464000 $JOB .) Specified to millisec. if desired. 05466000 Effective only if &$TIMER>0. 05468000 05470000 &$TDDF, GBLC = default and maximum possible values of TD= 05472000 &$TDMX option (time in seconds saved for execution dump). 05474000 Can be specified to millisecond accuracy, and is 05476000 meaningful only if &$TIMER>0. 05478000 05480000 &$TIMER GBLA =0 no timing is done at all. 05482000 =1 timing is done using only the IBM STIMER and 05484000 TTIMER macros. 05486000 =2 timing is done using a local macro to find at 05488000 execution time the remaining time left for a job. 05490000 This option affects code in APARMS, ASSIST, and EXECUT. 05492000 It also enables use of T=, TD=, and TX= option values. 05494000 , 05496000 ASPLM610-8 05498000 05500000 &$TXDF, GBLC = default and maximum values of TX= option, (i.e.05502000 &$TXMX time for user program execution+dump together). 05504000 Effective only if &$TIMER>0, and can be specified to05506000 millisecond accuracy if desired. 05508000 05510000 05512000 &$VERSLV GBLC = version and level of ASSIST being generated. 05514000 This value is printed by ASSIST to identify itself and aid in 05516000 detection of errors...as of 2/1/73, this has the value '2.1/A'. 05518000 05520000 &$XIOS GBLB =0 the x-macro pseudo instructions are not 05522000 assembled by the ASSIST assembler. 05524000 =1 the x-macro instructions are assembled and 05526000 interpreted. 05528000 This value affects the following instructions: XDECI, XDECO, XDUMP,05530000 XHEXI, XHEXO, XLIMD, XPNCH, XPRNT, XREAD, which are all handled as in- 05532000 structions by ASSIST, and are macro instrcuctions under OS/360 assembler05534000 As of 9/15/70, this value should be 1, since there is no other way to 05536000 perform input/output at this time. This value affects the opcode table 05538000 in the csect OPCOD1, scanning code in ICMOP2, and execution code in 05540000 EXECUT. 05542000 05544000 &$XXIOS GBLB =1 XGET/XPUT are not allowed 05546000 =0 XGET/XPUT allowed 05548000 05550000 &X$DDMOR GBLB =1 standard ddnames only 05552000 =0 allow user's own ddnames 05554000 only if &$XXIOS=0 05556000 certain names listed in XDDTABLE 05558000 05560000 05562000 05564000 05566000 05568000 05570000 05572000 &DEBUG GBLC = hexadecimal value used by XSRTR macro for flag 05574000 testing. See macros $DBG and XSRTR, and APPENDIX 05576000 VI for full explantion. 05578000 05580000 &ID GBLC = value to be used for identification at an entry05582000 point in a control section. Has value '*', in which 05584000 case all entry points have identifications, or value05586000 'NO', in which case none of them do. This is set 05588000 depending on value of &$DEBUG. See macro $SAVE and 05590000 APPENDIX VI for expanations. 05592000 05594000 &TRACE GBLC = control value for snaps generated by $SAVE and 05596000 $RETURN macros at entry and exit points. 05598000 05600000 = NO no trace code is generated at all 05602000 = * a trace message is printed 05604000 = SNAP GP registers are printed, with message 05606000 05608000 See also Appendix VI for a full explanation of usage. 05610000 , 05612000 ASPLM620- 1 05614000 05616000 APPENDIX III. DUMMY SECTIONS AND TABLES 01/31/73 - 2.1/A 05618000 05620000 AJOBCON 03440100 2 05622000 AOBJCARD 05098030 2 05624000 APCBLK 04552200 2 05626000 AVWXTABL 02878020 2 05628000 CNCBLOCK 02721000 3 05630000 CONBLK 10366100 3 05632000 ECONTROL 03572100 3 05634000 ECSTACKD 03712200 3 05636000 ERCOMPCD 03420100 4 05638000 EVCTDSCT 11486100 4 05640000 ICBLOCK 02663100 4 05642000 IHADCB 07552100 4 05644000 LTBASETB 16288050 4 05646000 LTLENTRY 16310100 4 05648000 MACLIB 02876250 5 05650000 MCBOPRST 41335000 5 05652000 MCBSTRMS 41250000 5 05654000 MCBSU 41025000 5 05656000 MCGLBDCT 40785000 5 05658000 MCLCLDPV 40875000 5 05660000 MCOPQUAD 41160000 5 05662000 MCPARENT 40940000 5 05664000 MCPAROPR 41500000 5 05666000 MCPARSUB 41570000 5 05668000 MCSEQ 41095000 5 05670000 MSGBLOCK 02877300 5 05672000 MXPNTSAV 41385000 5 05674000 OPCODTB 02269100 5 05676000 OUCMPRSD 18748060 6 05678000 OUSTMTIM 18748900 6 05680000 RCODBLK 02776100 6 05682000 REBLK 02801000 6 05684000 RECORBLK 30004000 6 05686000 RFSYMBLK 30082000 7 05688000 RSBLOCK 02811500 7 05690000 RSCBLK 02848100 7 05692000 RSOURCE 02864100 7 05694000 SYMSECT 02689100 7 05696000 X$SLOTFO 02317244 7 05698000 XDECIB 07150600 7 05700000 XDECOB 07151080 8 05702000 XHEXIB 07151590 8 05704000 XHEXOB 07151845 8 05706000 XIOBLOCK 07540000 8 05708000 XSPIEBLK 08563175 8 05710000 XXSNAPC 07556200 8 05712000 , 05714000 ASPLM620- 2 05716000 05718000 **--> DSECT: AJOBCON MAIN JOB CONTROL TABLE. . . . . . . . . . . . . 05720000 *. THIS DSECT PROVIDES THE PRIMARY COMMUNICATION TABLE USED . 05722000 *. BY THE MAIN PROGRAM ASSIST, THE I/O ROUTINES(XXXXIOCO), THE . 05724000 *. PARM FIELD ANALYZER (APARMS), THE MAIN PROGRAM OF THE . 05726000 *. ASSEMBLER (MPCON0), AND THE REPLACE MONITOR (REMONI). IT . 05728000 *. PROVIDES FOR GLOBAL FLAG VALUES DEALING WITH THE OVERALL . 05730000 *. JOB IN PROGRESS, PARM FIELD VALUES, USEFUL CONSTANTS, BLANKS,. 05732000 *. ZEROES, WORKAREAS, AND DYNAMIC STORAGE AREA LIMITS. . 05734000 *. LOCATION: IN TABLE ASJOBCON OF CSECT ASSIST. . 05736000 *. NAMES: AJ------ . 05738000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05740000 05742000 **--> DSECT: AOBJCARD IMAGE OF OBJECT DECK CARD . . . . . . . . . . . 05744000 *. THIS DSECT DESCRIBES 1 CARD OF AN ASSIST OBJECT DECK. THE . 05746000 *. DECK FORMAT IS COMPATIBLE WITH NORMAL S/360 OBJECT DECKS, SO THAT . 05748000 *. THEY CAN BE USED UNDER SOME CIRCUMSTANCES. THEY ARE HOWEVER . 05750000 *. SIMPLER, IN ORDER TO ALLOW FOR PRODUCTION OF THEM FROM STUDENT- . 05752000 *. COMPILERS, I.E. XPL. LATER VERSIONS OF THE LOADER MAY PERMIT . 05754000 *. MORE COMPLEX OBJECT DECKS, BUT AS OF 9/01/71, THE ONLY TYPES OF . 05756000 *. OBJECT DECK CARDS RECOGNIZED ARE TXT AND END CARDS. . 05758000 *. NAMES: AO------ . 05760000 *. REFERENCE: ASSEMBLER(F) PROGRAMMER'S GUIDE - GC26-3756-4 . 05762000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05764000 05766000 **--> DSECT: APCBLK APARMS PARM CODE BLOCK. . . . . . . . . . . . . 05768000 *. THIS BLOCK DESCRIBES A PARM OPTION TABLE, GIVING THE NAME OF . 05770000 *. THE PARM, A FLAG BYTE, AND AN OFFSET ADDRESS TO A PROCESSING . 05772000 *. SECTION OF CODE IN CSECT APARMS. IT IS USED ONLY IN APARMS. . 05774000 *. LOCATION: INSIDE TABLE APBPARMA IN CSECT APARMS. . 05776000 *. GENERATION: EACH APCBLK IS CREATED BY 1 CALL TO APCGN MACRO. . 05778000 *. NAMES: APC----- . 05780000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05782000 05784000 **--> DSECT: AVWXTABL MAIN CONTROL TABLE FOR THE ASSEMBLER. . . . . . 05786000 *. THIS DSECT IS USED BY ALMOST ALL SUBROUTINES OF THE ASSEMBLER. 05788000 *. FOR COMMUNICATION, COMMON CONSTANTS, AND WORKAREAS, AND IS . 05790000 *. ALSO USED SOMEWHAT BY THE MAIN PROGRAM ASSIST AND THE . 05792000 *. REPLACE MONITOR REMONI. . 05794000 *. LOCATION: CSECT VWXTABL, WITH SAME NAMES PREFIXED WITH 'A'. . 05796000 *. NAMES: AX------,AW------,AV------ (DEPENDS ON SECTION) . 05798000 *. THIS DSECT CONTAINS THE FOLLOWING SECTIONS: . 05800000 *. . 05802000 *. 1. ADDRESS CONSTANTS(NAMES: AX, FOLLOWED BY ENTRY NAME). 05804000 *. THIS SECTION CONTAINS 1 ADDRESS CONSTANT FOR EVERY CALLABLE . 05806000 *. ENTRY POINT IN THE ASSIST ASSEMBLER. THESE ARE READ-ONLY, . 05808000 *. EXCEPT DURING A REPLACE RUN, IN WHICH THE ADCONS FOR A . 05810000 *. SINGLE CSECT ARE TEMPORARILY MODIFIED. THE LABEL AX$BASE IS . 05812000 *. USED AS A BASE ADDRESS FOR THE CALCULATION OF OFFSETS TO . 05814000 *. INDIVIDUAL ADCONS, FOR THOSE ROUTINES REQUIRING TABLE-DRIVEN . 05816000 *. CALLING SEQUENCES (CNDTL2,CODTL1,MPCON0,REMONI). NOTE THAT . 05818000 *. ALL ENTRY POINTS HAVE 6-CHARACTER NAMES. THE MACRO $CALL . 05820000 *. IS USED IN CONJUNCTION WITH THIS PART OF AVWXTABL. . 05822000 *. . 05824000 *. 2. CONSTANT VALUES (NAMES: AW------) . 05826000 *. THIS SECTION CONTAINS USEFUL CONSTANT VALUES, SUCH AS . 05828000 *. ZEROES, BLANKS, MASK VALUES, TRANSLATE TABLES, EDIT PATTERNS.. 05830000 *. ALL VALUES ARE READ-ONLY, EXCEPT THAT ANY ROUTINE MAY . 05832000 , 05834000 ASPLM620- 3 05836000 05838000 *. MODIFY PART OF THIS SECTION IF IT RESTORES IT BEFORE . 05840000 *. ALLOWING ANOTHER SUBROUTINE TO GAIN CONTROL. TRANSLATE . 05842000 *. TABLES INCLUDE ONES FOR SCANNING DECIMAL NUMBERS AND MACHINE . 05844000 *. INPUT CONVERSION - HEX TO BINARY, SCANNING SYMBOLS AND . 05846000 *. INSTRUCTION OPERANDS, SCANNING HEXADECIMAL CONSTANTS, DOING . 05848000 *. GENERAL EXPRESSIONS, CONVERTING BINARY TO OUPUT HEXADECIMAL. . 05850000 *. GENERATION: SECTION AWCONADS IS CREATED BY MACRO WCONG. . 05852000 *. . 05854000 *. 3. VARIABLES (NAMES: AV------) . 05856000 *. THIS SECTION CONTAINS ALL VARIABLE AREAS USED FOR . 05858000 *. COMMUNICATION INSIDE THE ASSIST ASSEMBLER, IN ADDITION TO . 05860000 *. VARIOUS WORKAREAS, WHICH MAY BE OVERLAPPED TO SAVE SPACE. . 05862000 *. THE AREAS PROVIDED INCLUDE THE RECORD BLOCKS, LOCATION . 05864000 *. COUNTER VALUES, CURRENT SECTION ID, CURRENT DYNAMIC STORAGE . 05866000 *. AREA LIMITS, AND VARIOUS FLAGS. TEMPORARY WORKAREAS ARE . 05868000 *. SUPPLIED, ALL WITH 'WORK' INCLUDED IN THEIR NAMES, WHICH . 05870000 *. CAN BE USED BY ANY ROUTINE , BUT ARE NOT SAFE ACROSS A . 05872000 *. SUBROUTINE CALL. NOTE THAT THIS SECTION REQUIRES EQU SYMBOLS. 05874000 *. FROM CNCBLOCK AND THE RECORD BLOCKS TO ASSEMBLE CORRECTLY. . 05876000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05878000 05880000 **--> DSECT: CNCBLOCK CONSTANT CODE BLOCK-DC'S, LITERALS. . . . . . . 05882000 *. LOCATION: EACH CNCBLOCK IS CREATED IN AREA COBLK OF CODTL1. . 05884000 *. 1 OR MORE CNCBLOCKS MAY BECOME PART OF THE RCODBLK CREATED . 05886000 *. IN AREA IBRCB BY IBASM1, AND 1 CNCBLOCK BECOMES PART OF THE . 05888000 *. ENTRY FOR EACH DISTINCT LITERAL(SEE LTLENTRY DSECT, LTOPRS . 05890000 *. CSECT.) . 05892000 *. NAMES: CNC----- . 05894000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05896000 05898000 **--> DSECT: CONBLK CONSTANT DESCRIPTOR CODES BLOCK(CODTL1) . . . . 05900000 *. THIS BLOCK CONTAINS DATA FOR A GIVEN CONSTANT TYPE, AND IS . 05902000 *. USED BY ASSEMBLER SUBR. CODTL1 IN SCANNING CONSTANTS AND . 05904000 *. BUILDING CNCBLOCKS DURING ASSEMBLY PASS 1. THE DATA . 05906000 *. GIVEN INCLUDES A FLAG BYTE, DEFAULT LENGTH-1, LEFT AND . 05908000 *. RIGHT DELIMITER CHARACTERS REQUIRED FOR THE CONSTANT, AND . 05910000 *. MINIMUM AND MAXIMUM VALUES FOR THE LENGTH-1 OF THE CONSTANT. . 05912000 *. THE FLAG BYTE, WITH MODIFICATIONS, BECOMES THE CNCTYPE BYTE . 05914000 *. OF THE CNCBLOCK CREATED FOR EACH CONSTANT OPERAND. . 05916000 *. LOCATION: TABLE CONTABL OF CSECT CODTL1 . 05918000 *. GENERATION: 1 CALL TO MACRO CONG CREATES A CONBLK ENTRY. . 05920000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05922000 05924000 **--> DSECT: ECONTROL EXECUTION CONTROL BLOCK . . . . . . . . . . . . 05926000 *. THIS BLOCK CONTAINS ALL DATA REQUIRED TO DESCRIBE A USER . 05928000 *. PROGRAM TO BE EXECUTED BY THE ASSIST INTERPRETER (EXECUT). . 05930000 *. IT CONTAINS SIMULATED USER REGISTERS AND PROGRAM STATUS WORD,. 05932000 *. AN INSTRUCTION STACK , POINTERS TO THE USER PROGRAM CODE, . 05934000 *. AND VARIOUS FLAGS DESCRIBING THE RUNNING MODE AND OPTIONS . 05936000 *. ALLOWED TO THE USER PROGRAM. IT IS CREATED FROM INFORMATION . 05938000 *. FROM THE ASSEMBLER, THE USER PARM FIELD, AND FROM THE . 05940000 *. OPTIONS IN ASSIST, AND IS MODIFIED BY EXECUT. IT ALSO . 05942000 *. PROVIDES ALL DATA NEEDED BY XXXXSNAP TO DO A USER DUMP. . 05944000 *. LOCATION: IN HIGH END OF DYNAMIC CORE AREA. . 05946000 *. NAMES: EC------ . 05948000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05950000 , 05952000 ASPLM620- 4 05954000 05956000 **--> DSECT: ECSTACKD SINGLE ENTRY IN ECONTROL INSTRUCTION STACK. . . 05958000 *. THE ECONTROL INSTRUCTION STACK IS A CIRCULAR LINKED LIST . 05960000 *. WHICH ALWAYS CONTAINS DATA ON UP TO THE LAST 10 INSTRUCTIONS . 05962000 *. INTERPRETED DURING EXECUTION. IT IS FILLED IN BY EXECUT, AND. 05964000 *. IS USED BY XXXXSNAP TO PROVIDE THE INSTRUCTION TRACE PART . 05966000 *. OF A USER COMPLETION DUMP. . 05968000 *. LOCATION: INSIDE AREA ECINSTAC IN DSECT ECONTROL. . 05970000 *. NAMES: EC------ (SAME AS ECONTROL NAME CHARACTERS) . 05972000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05974000 05976000 **--> DSECT: ERCOMPCD COMPLETION CODE/ERROR MESSAGE BLOCK . . . . . . 05978000 *. THIS GIVES FORMAT OF 1 COMPLETION CODE/MESSAGE BLOCK FOR . 05980000 *. USE IN A USER COMPLETION DUMP BY SUBROUTINE XXXXSNAP. THE . 05982000 *. ADDRESS OF THE APPROPRIATE BLOCK IS PLACED INTO WORD ECERRAD . 05984000 *. IN DSECT ECONTROL, AND IS USED THEN BY XXXXSNAP TO PRINT THE . 05986000 *. INFORMATION IN THE ERCOMPCD BLOCK. . 05988000 *. LOCATION: INSIDE EXECUT, WILL BE ELSEWHERE(FUTURE). . 05990000 *. GENERATION: 1 BLOCK CREATED BY 1 CALL TO $ERCGN MACRO. . 05992000 *. NAMES: ERC----- . 05994000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 05996000 05998000 **--> DSECT: EVCTDSCT EVALUT TRANSITION TABLE ENTRY . . . . . . . . . 06000000 *. THIS DESCRIBES 1 ENTRY IN 1 ROW OF THE GENERAL EXPRESSION . 06002000 *. EVALUATOR EVALUT, AND GIVES A SECTION OFFSET @ TO USE, AND . 06004000 *. EITHER A NEXT STATE(ROW) IN TABLE OR AN ERROR CODE FOR AN . 06006000 *. ILLEGAL CURRENT STATE/CURRENT VALUE COMBINATION. . 06008000 *. LOCATION: TABLE EVCTAB IN CSECT EVALUT. . 06010000 *. GENERATION: 1 ROW OF EVCTDSCTS IS GENERATED BY 1 EVCG MACRO. . 06012000 *. NAMES: EVCT---- . 06014000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06016000 06018000 **--> DSECT: ICBLOCK MACHINE INSTRUCTION OBJECT CODE BLOCK. . . . . 06020000 *. THIS DSECT IS USED TO TRANSMIT DATA FROM ICMOP2 CSECT TO . 06022000 *. OUTPT2 FOR PRINTING MACHINE INSTRUCTIONS. . 06024000 *. LOCATION: TABLE ICYBLOCK IN CSECT ICMOP2 OF ASSEMBLER. . 06026000 *. NAMES: ICB----- . 06028000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06030000 06032000 **--> DSECT: IHADCB DATA CONTROL BLOCK DSECT. . . . . . . . . . . . 06034000 *. DCB DSECT USED BY PARTS OF XXXXIOCO. . 06036000 *. GENERATION: DCBD MACRO . 06038000 *. LOCATION: XXSODCB,XXREDCB,XXPNDCB,XXPRDCB . 06040000 *. NAMES: DCB----- . 06042000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06044000 06046000 **--> DSECT: LTBASETB LITERAL POOL BASE TABLE - 1 FOR EACH POOL . . . 06048000 *. ONE LTBASETB IS CREATED FOR EACH LITERAL POOL, BY LTINT1 OR . 06050000 *. LTDMP1. THE TOTAL # CREATED = # LTORGS + 2, WHICH INCLUDES . 06052000 *. 1 FOR THE END STMT, AND 1 EXTRA 1 FOR CODE SIMPLIFICATION. . 06054000 *. WHEN LTDMP1 IS CALLED, IT FILLS IN THE SECTION ID OF THE . 06056000 *. SECTION WHERE THE POOL WILL BE ASSEMBLED, THE BEGINNING @ OF . 06058000 *. THE POOL, AND THE OFFSET @ VALUES FROM THE BEGINNING @ TO . 06060000 *. EACH LITERAL IN THE POOL. IN ADDITION TO ADDRESS AND SECTION. 06062000 *. ID, THE LTBASETB ALSO CONTAINS THE LIST HEADS FOR 4 LISTS . 06064000 *. OF LITERAL ENTRIES (LTLENTRY BLOCKS). USED ONLY IN LTOPRS. . 06066000 *. LOCATION: HIGH END OF DYNAMIC AREA ($ALLOCH MACRO). . 06068000 *. NAMES: LTB----- . 06070000 , 06072000 ASPLM620- 5 06074000 06076000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06078000 06080000 **--> DSECT: LTLENTRY LITERAL TABLE ENTRY FOR EACH LITERAL. . . . . . 06082000 *. 1 LTLENTRY BLOCK IS CREATED BY LTENT1 FOR EACH UNIQUE . 06084000 *. LITERAL IN A GIVEN LITERAL POOL. THE LTLENTRY BLOCKS ARE . 06086000 *. ORGANIZED IN 4 LINKED LISTS, WITH LIST HEADS IN THE CURRENT . 06088000 *. LTBASETB BLOCK. EACH LTLENTRY INCLUDES THE OFFSET FROM THE . 06090000 *. BEGINNING OF THE CURRENT LITERAL POOL @ (ENTERED BY LTDMP1), . 06092000 *. A COMPLETE CNCBLOCK DESCRIBING THE LITERAL CONSTANT, AND THE . 06094000 *. CONSTANT IN CHARACTER FORM. LTGET2 USES THESE BLOCKS TO . 06096000 *. DETERMINE THE USER PROGRAM ADDRESS FOR ANY DESIRED LITERAL, . 06098000 *. AND LTDMP2 USES THEM TO PRINT LITERAL POOL LISTING AND . 06100000 *. HAVE THE CODE ASSEMBLED FOR THE POOL. USED ONLY IN LTOPRS. . 06102000 *. LOCATION: HIGH END OF DYNAMIC AREA ($ALLOCH MACRO). . 06104000 *. NAMES: LTL----- . 06106000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06108000 06110000 **--> DSECT: MACLIB THIS DSECT GIVES THE FORMAT OF A MACRO * 06112000 *. LIBRARY ENTRY. * 06114000 *. * 06116000 *.********************************************************************* 06118000 06120000 *.--> DSECT: MCBOPRST FORMAT OF OPERATOR STACK ENTRY * 06122000 *. * 06124000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06126000 06128000 **--> DSECT: MCBSTRMS FORMAT OF TWO BSU'S FOR EASE * 06130000 *. OF MANIPULATION IN TERM STACK * 06132000 *. * 06134000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06136000 06138000 **--> DSECT: MCBSU FORMAT OF BASIC SYNTACTIC UNIT * 06140000 *. * 06142000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06144000 06146000 **--> DSECT: MCGLBDCT FORMAT FOR GLOBAL DICTIONARY ENTRY * 06148000 *. * 06150000 *.********************************************************************* 06152000 06154000 **--> DSECT: MCLCLDPV FORMAT FOR LOCAL DICTIONARY DOPE VECTOR * 06156000 *. * 06158000 *.********************************************************************* 06160000 06162000 **--> DSECT: MCOPQUAD FORMAT OF ONE OP ENTRY. MACRO DEFINITIONS * 06164000 *. ARE TRANSLATED INTO ONE OPS FOR SUBSEQUENT INTERPRETATION * 06166000 *. * 06168000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06170000 06172000 **--> DSECT: MCPARENT FORMAT FOR SYMBOLIC PARAMETER ENTRY * 06174000 *. * 06176000 *.********************************************************************* 06178000 06180000 **--> DSECT: MCPAROPR FORMAT FOR SYMBOLIC PARAMETER DICTIONARY * 06182000 *. ENTRY. ONE ENTRY FOR EACH SYM PARAM ON ENTRY TO MEXPND * 06184000 *. * 06186000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06188000 , 06190000 ASPLM620- 6 06192000 06194000 **--> DSECT: MCPARSUB FORMAT FOR DICT ENTRY FOR SUBLIST OPRNDS * 06196000 *. ONE ENTRY FOR EACH ELEMENT OF SUBLIST OF SYM PARAM ENTRY * 06198000 *. * 06200000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06202000 06204000 **--> DSECT: MCSEQ FORMAT OF SEQUENCE SYMBOL ENTRY * 06206000 *. * 06208000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06210000 06212000 **--> DSECT: MSGBLOCK ERROR MESSAGE BLOCK * * * * * * * * * * *S 06214000 06216000 **--> DSECT: MXPNTSAV CONTROL FOR LEVEL OF MACRO EXPANSION * * S 06218000 *. ONE IS ALLOCATED FOR EACH LEVEL OF MACRO CALL A 06220000 *. NAMES:MXP_____ A 06222000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06224000 06226000 **--> DSECT: OPCODTB DESCRIBES 1 ENTRY IN OPOCDE TABLE . . . . . . . 06228000 *. LOCATION: ELEMENTS OF TABLE IN CSECT OPCOD1 OF ASSEMLBER. . 06230000 *. GENERATION: 1 CALL TO MACRO OPG CREATES AN ELEMENT. . 06232000 *. SECTIONS OPCTYPE,OPCHEX,OPCMASK CORRESPOND TO SIMILARLY-NAMED. 06234000 *. SECTIONS OF DUMMY SECTION RCODBLK. SEE CSECT OPCOD1. . 06236000 *. NAMES: OPC----- . 06238000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06240000 06242000 **--> DSECT: OUCMPRSD CONTROL BLOCK FOR OUTPUT CMPRS OPTION . . . . . 06244000 *. THIS BLOCK DESCRIBES AREA USED BY OUTPT2 WHEN DOING THE . 06246000 *. CMPRS LISTING OPTION (2 STMTS/LINE). IT CONTAINS VARIABLES, . 06248000 *. FLAGS, AND SPACE FOR $OU#NORM PARTIAL CARD IMAGES, WHICH . 06250000 *. ARE SAVED AND USED FOR THE LEFT-HAND-SIDE OF THE PAGE. . 06252000 *. THIS BLOCK IS ALLOCATED SPACE ONLY IF THE CMPRS PARM IS . 06254000 *. USED. THE @ OUCMPRSD IS STORED IN OUCMPRAD VARIABLE. . 06256000 *. LOCATION: IN DYNAMIC AREA, ACQUIRED BY $ALLOCH IN OUINT1. . 06258000 *. NAMES: OUCM---- . 06260000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06262000 06264000 **--> DSECT: OUSTMTIM STATEMENT IMAGE USED IN OUTPUT . . . . . . . . 06266000 *. USED IN CMPRS OPTION HANDLER OF OUTPT2 TO ACCESS PORTIONS . 06268000 *. OF INCOMING STATEMENTS TO BE SAVED. . 06270000 *. NAMES: OUST---- . 06272000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06274000 06276000 **--> DSECT: RCODBLK RECORD CODE BLOCK - VARIABLE DATA FOR STMT. . . 06278000 *. AN RCODBLK IS CREATED BY EITHER IAMOP1 OR IBASM1 DURING . 06280000 *. ASSEMBLER PASS 1 FOR EVERY STATEMENT WITH AN ACCEPTABLE . 06282000 *. OPERATION CODE. IT CONTAINS VARIABLE INFORMATION WHICH . 06284000 *. DEPENDS ON THE TYPE OF INSTRUCTION, AND MAY INCLUDE HEX . 06286000 *. MACHINE CODES AND MASKS, ALIGNMENT INFORMATION, LITERAL . 06288000 *. ADDRESSES, EQU SYMBOL ADDRESSES, AND 1 -10 CNCBLOCKS FOR DC . 06290000 *. COMMANDS. THE MOST COMMON LENGTHS ARE 8 AND 12. . 06292000 *. LOCATION: CREATED IN AREA IARCB(IN IAMOP1) OR IBRCB(IN . 06294000 *. IBASM1). STORED IN LOW AREA AFTER ITS RSBLOCK BY UTPUT1. . 06296000 *. FOR MACHINE INSTRUCTIONS, MOVED TO ICRCB(IN ICMOP2) IN PASS 2. 06298000 *. NAMES: RC------ . 06300000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06302000 , 06304000 ASPLM620- 7 06306000 06308000 **--> DSECT: REBLK SCAN POINTER/ERROR CODE PAIR BLOCK. . . . . . . 06310000 *. LOCATION: AVREBLK(AVWXTABL DSECT), CREATED BY ERRTAG SUBR. . 06312000 *. MOVED INTO LOW AREA FOLLOWING CORRESPONDING RCODBLK. MOVED . 06314000 *. BY UTGET2 BACK INTO AVREBLK AREA IN AVWXTABL DURING PASS 2. . 06316000 *. *NOTE* ONLY EXIST FOR STATEMENTS HAVING 1 OR MORE ERRORS OR . 06318000 *. WARNING MESSAGES ATTACHED TO IT. . 06320000 *. NAMES: REB----- . 06322000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06324000 06326000 **--> DSECT: RECORBLK REPLACE MODULE-DESCRIBES 1 REAL-REPLACE PAIR. . 06328000 *. THIS DSECT DESCRIBES 1 ENTRY IN THE TABLE RECORRAD. . 06330000 *. WHEN AN ENTRY POINT IS REPLACED, A RECORBLK IS CREATED FOR . 06332000 *. IT AND FILLED WITH VALUES FROM THE ENTRY POINT'S RFSYMBLK. . 06334000 *. THE ENTRY ADDRESS OF THE NEW ENTRY IS FOUND FROM THE SYMBOL . 06336000 *. TABLE (WHICH STILL EXISTS), AND IS SAVED INTO THE RECFPSW . 06338000 *. FIELD (OR A -1 PLACED HERE TO SHOW THE ENTRY COULD NOT BE . 06340000 *. FOUND IN THE USER PROGRAM). USING THE RECAXAD FIELD, WHICH . 06342000 *. POINTS TO THE ADCON IN AVWXTABL OF THE REAL ROUTINE, THE REAL. 06344000 *. ADCON IS SAVED IN RECADRE, AND IT IS REPLACED BY THE ADDRESS . 06346000 *. OF REFAKE. A CODE IS PLACED INTO THE HI-ORDER BYTE OF THE . 06348000 *. WORD IN AVWXTABL, WHICH IS USED BY REFAKE TO IDENTIFY WHICH . 06350000 *. ENTRY IS CALLED. . 06352000 *. AT THE END OF A REPLACE RUN, THE REAL ADCONS ARE MOVED . 06354000 *. BACK TO THEIR PROPER PLACES IN AVWXTABL, USING THE RECAXAD . 06356000 *. FIELD OF EACH RECORBLK ELEMENT IN THE RECORRAD TABLE. . 06358000 *. **NOTE** FIRST SECTION OF DSECT SAME AS DSECT RFSYMBLK. . 06360000 *. LOCATION: CSECT REMONI, TABLE RECORRAD. . 06362000 *. NAMES: REC----- . 06364000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06366000 06368000 **--> DSECT: RFSYMBLK REPLACE MODULE: 1 ENTRY IN TABLE CSECT RFSYMS . 06370000 *. EACH SECTION OF RFSYMS GIVES EITHER A REPLACABLE . 06372000 *. CSECT NAME OR ONE OF ITS ENTRY POINT NAMES. THE ENTRY . 06374000 *. POINT ELEMENTS CONTAIN VARIOUS POINTERS WHICH ARE USED TO . 06376000 *. GIVE OFFSET ADDRESSES FOR REAL ENTRY ADDRESS CONSTANTS OR . 06378000 *. FOR VARIOUS CHECKING CODE IN THE REPLACE MONITOR. . 06380000 *. **NOTE** THIS DSECT IS SAME AS FIRST PART OF RECORBLK DSECT. . 06382000 *. GENERATION: 1 CALL TO RFSGN MACRO CREATS 1 CSECT ELEMENT . 06384000 *. AND 1 TO REC$MAX ENTRY ELEMENTS. . 06386000 *. LOCATION: CSECT RFSYMS. . 06388000 *. NAMES: RFS----- . 06390000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06392000 06394000 **--> DSECT: RSBLOCK RECORD SOURCE BLOCK-SOURCE CODE, FLAGS. . . . . 06396000 *. AN RSBLOCK IS CREATED FOR EVERY SOURCE STATEMENT BY INCARD . 06398000 *. AND CONTAINS DATA COMMON TO EVERY STATEMENT, SUCH AS 1-3 . 06400000 *. SOURCE CARD IMAGES, FLAGS FOR EXISTENCE OF OTHER RECORD . 06402000 *. BLOCKS. ONLY RECORD BLOCK NECESSARY FOR A SOURCE STATEMENT. . 06404000 *. LOCATION: CREATED IN AVRSBLOC (AVWXTABL DSECT) BY INCARD, . 06406000 *. WITH MODIFICATION BY ERRTAG AND MOCON1. MOVED TO LOW END . 06408000 *. OF FREEAREA BY UTPUT1, AND REMAINS THERE. . 06410000 *. NAMES: RSB----- . 06412000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06414000 , 06416000 ASPLM620- 8 06418000 06420000 **--> DSECT: RSCBLK RECORD SOURCE-CONTINUATIONS, SEQUENCE #'S . . . 06422000 *. CREATED BY INCARD FOR ANY STATEMENT HAVING EITHER SEQUENCE . 06424000 *. NUMBERS OR CONTINUATION PUNCHES. . 06426000 *. LOCATION: CREATED BY INCARD IN AVRSCBLK(AVWXTABL) DURING . 06428000 *. ASSEMBLY PASS 1. MOVED TO LOW END OF DYNAMIC AREA BY UTPUT1, . 06430000 *. FOLLOWING CORRESPONDING REBLK(IF ONE EXISTS). REMAINS IN . 06432000 *. THAT AREA FOR REST OF PROCESSING. . 06434000 *. NAMES: RSC----- . 06436000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06438000 06440000 **--> DSECT: RSOURCE DESCRIPTION OF A SINGLE SOURCE CARD . . . . . . 06442000 *. USED FOR INPUT PROCESSING BY SUBROUTINE INCARD. . 06444000 *. LOCATION: AVRSBLOC(AVWXTABL) DURING CREATION OF RSBLOCK. . 06446000 *. NAMES: RSO----- . 06448000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06450000 06452000 **--> DSECT: SYMSECT ASSEMBLER SYMBOL TABLE ENTRY. . . . . . . . . . 06454000 *. CREATED BY ENTRY SYENT1 OF CSECT SYMOPS, AND HAS VALUES ADDED. 06456000 *. BY MOCON1,IBASM1, FOR VALUE, SECTION ID, LENGTH ATTRIBUTE, . 06458000 *. AND BY ESDOPRS FOR SPECIAL ATTRIBUTES(CSECT,ETC). . 06460000 *. LOCATION: FREEAREA HIGH END ($ALLOCH'D). . 06462000 *. NAMES: SY------ . 06464000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06466000 06468000 **--> DSECT: X$SLOTFORMAT FOR XGET-XPUT MONITOR TABLE . . . . . . . . . 06470000 * USED IN XDDGET AND XDDPUT TO CONTROL USE OF CERTAIN . 06472000 * DD NAMES BY USER WITH XGET-XPUT PERMITTED. . 06474000 * . 06476000 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06478000 06480000 **--> DSECT: XDECIB CONTROL BLOCK CREATED BY XDECI MACRO. . . . . . 06482000 *. AN XDECIB IS CREATED BY EACH CALL TO THE XDECI MACRO, AND . 06484000 *. CONTAINS THE @ XXXXDECI, SAVEWORDS FOR REGS R14,R15,R0, AND . 06486000 *. WORDS FOR RETURN VALUES FOR REGISTER R1, AND THE ARGUMENT REG. 06488000 *. THIS DSECT IS USED ONLY IN MODULE XXXXDECI. . 06490000 *. GENERATION: XDECI . 06492000 *. NAMES: XDECI--- . 06494000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06496000 06498000 **--> DSECT: XDECOB CONTROL BLOCK CREATED BY XDECO. . . . . . . . . 06500000 *. AN XDECOB IS CREATED FOR EACH XDECO CALL, AND CONTAINS THE . 06502000 *. @ XXXXDECO MODULE, SAVE WORDS FOR REGS R14,R15,R0, AND A . 06504000 *. WORD FOR THE VALUE TO BE CONVERTED TO DECIMAL. . 06506000 *. XDECOB IS USED ONLY IN CSECT XXXXDECO. . 06508000 *. GENERATION: XDECO . 06510000 *. NAMES: XDECO--- . 06512000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06514000 06516000 *.--> DSECT: XHEXIB CONTROL BLOCK CREATE BY XHEXI . . . . . . . . . . 06518000 *. AN XHEXIB IS CREATED FOR XHEXI CALL, AND CONTAINS THE . 06520000 *.@ XXXXHEXI MODULE, SAVE WORDS R14,R15, R0, AND A WORD VALUE THAT HAS. 06522000 *. BEEN CONVERTED . 06524000 *. XHEXI IS USED ONLY IN CSECT XXXXHEXI . 06526000 *. GENERATION XHEXI . 06528000 *. NAMES XHEXI___ . 06530000 *. . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06532000 , 06534000 ASPLM620- 9 06536000 06538000 *.--> DSECT: XHEXOB CONTROL BLOCK CREATED BY XHEXO. . . . . . . . . . 06540000 *. AN XHEXOB IS CREATED FOR XHEXO CALL, AND CONTAINS THE @ . 06542000 *. XXXXHEXO MODULE, SAVE WORDS FOR R14-R2 AND THE PLACE TO RETURN . 06544000 *. XHEXOB IS USED ONLY IN CSECT XXXXHEXO. . 06546000 *. GENERATION: XXXXHEXO . 06548000 *. NAMES: XHEXO---- . 06550000 *. . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06552000 06554000 **--> DSECT: XIOBLOCK CONTROL BLOCK FOR INPUT/OUTPUT MACROS . . . . . 06556000 *. THIS BLOCK IS CREATED FOR ANY I/O MACRO BY THE INNER MACRO . 06558000 *. XIONR, AND CONTAINS THE ADCON FOR THE DESIRED I/O ENTRYPT, . 06560000 *. SAVE WORDS FOR MODFIED REGS R14,R15,R0, AND THE LENGTH FOR . 06562000 *. THE I/O AREA TO BE READ OR WRITTEN. . 06564000 *. THIS DSECT IS ONLY USED IN CSECT XXXXIOCO. . 06566000 *. GENERATION: BY MACRO XIONR (FOR $READ,$SORC,$PRNT,$PNCH). . 06568000 *. NAMES: XIO----- . 06570000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06572000 06574000 **--> DSECT: XSPIEBLK INTERRUPT COMMUNICATIONS CONTROL BLOCK . . . . 06576000 *. THIS BLOCK CONTAINS EXIT ADDRESSES AND INTERRUPT MASKS FOR . 06578000 *. USE IN HANDLING THE 15 PROGRAM EXCEPTIONS. THE INTERRUPT . 06580000 *. MASK IS EXTENDED TO A FULLWORD FOR EASE OF TESTING AGAINST . 06582000 *. THE INTERRUPTS THAT WERE DESIRED TO BE TRAPPED. THE EXIT . 06584000 *. ADDRESS IS OF LENGTH 3 FOR CHANGING THE PSW(ONLY 3 BYTE @ . 06586000 *. LOCATION: INSIDE $SPIE MACRO EXPANSION . 06588000 *. GENERATION: ONE XSPIEBLK IS GENERATED FOR EVERY $SPIE . 06590000 *. EXPANSION EXCEPT LINKAGE TERMINATION & RESTORATION . 06592000 *. NAMES: XSP----- . 06594000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06596000 06598000 **--> DSECT: XXSNAPC CONTROL BLOCK USED BY THE XSNAP MACRO . . . . . 06600000 *. THIS BLOCK IS CREATED BY EVERY PRINTING XSNAP MACRO. IT . 06602000 *. CONTAINS THE EXACT CONTENTS OF THE GP REGISTERS BEFORE THE . 06604000 *. XSNAP WAS CALLED, A FLAG BYTE INDICATING DESIRED OUTPUT AND . 06606000 *. SPECIAL OPTIONS, THE NUMBER OF ADDRESS PAIRS USED IN THE . 06608000 *. XSNAP STORAGE= OPERAND, THE ADDRESS PAIRS THEMSELVES, AND . 06610000 *. THE ADDRESS CONSTANT FOR XXXXSNAP. THE BYTE XXSFLAGS MAY . 06612000 *. HAVE SEVERAL BITS TURNED ON REQUESTING SPECIAL ASSIST . 06614000 *. SERVICES, SUCH AS USER DEBUGGING OUTPUT AND USER DUMP. THE . 06616000 *. BITS ARE SUPPLIED BY XSNAP OPERAND T(3), AND HAVE . 06618000 *. MEANING ONLY WHEN USED INSIDE ASSIST WITH THE SPECIAL ASSIST . 06620000 *. VERSION OF THE CSECT XXXXSNAP. . 06622000 *. GENERATION: XSNAP MACRO, WITH T= ANY TYPE BUT ST OR STORE. . 06624000 *. NAMES: XXS----- . 06626000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 06628000 , 06630000 ASPLM630- 1 06632000 06634000 APPENDIX IV. MACRO INSTRUCTIONS 01/31/73 - 2.1/A 06636000 06638000 &MALLOCH 01628240 3 06640000 &MALLOCL 01628040 3 06642000 $ALIGN 01433000 3 06644000 $ALIGR 01477000 3 06646000 $ALLOCH 01578000 3 06648000 $ALLOCL 01604000 3 06650000 $AL2 01325000 3 06652000 $CALL 01268400 3 06654000 $CKALN 01495000 3 06656000 $DALLOCH 01633000 4 06658000 $DBG 01305000 4 06660000 $DISK 01189500 4 06662000 $ERCGN 01196000 4 06664000 $GLOC 01511000 4 06666000 $GTAD 01778000 4 06668000 $LV 01789000 4 06670000 $MSG 01210530 4 06672000 $PNCH 01217500 4 06674000 $PRNT 01231000 4 06676000 $READ 01244500 4 06678000 $RETURN 01280400 5 06680000 $SAVE 01292400 5 06682000 $SCOF 01535000 5 06684000 $SCPT 01557000 5 06686000 $SDEF 01663000 5 06688000 $SERR 01680400 5 06690000 $SETRT 01717000 5 06692000 $SLOC 01523000 5 06694000 $SORC 01257000 5 06696000 $SPIE 01362230 5 06698000 $STV 01817000 6 06700000 $TIRC 02061000 6 06702000 APCGN 02102120 6 06704000 ASPAGE 02156200 7 06706000 ASPRNT 02120060 7 06708000 ASRECL 02156750 7 06710000 ASTIME 02125000 7 06712000 ASTIMR 02158300 7 06714000 CONG 01833000 7 06716000 EVCG 01853000 7 06718000 IBPRTAB 01880200 8 06720000 ICT 01915000 8 06722000 OPG 01929000 8 06724000 OPGT 01999000 8 06726000 REPRNT 02028080 8 06728000 RFSGN 02028340 8 06730000 WCONG 02035000 8 06732000 XCALL 02163000 9 06734000 XCHAR 00009000 9 06736000 XDECI 00034080 9 06738000 XDECO 00034640 9 06740000 XGET 01262056 9 06742000 XHEXI HE 00035080 9 06744000 XHEXO HE 00035360 9 06746000 XIDENT 00041500 10 06748000 , 06750000 ASPLM630- 2 06752000 06754000 XIONR 00077000 10 06756000 XLOOK 00145000 10 06758000 XMUSE 00185000 10 06760000 XPUT 01262090 10 06762000 XRETURN 00339000 10 06764000 XSAVE 00507000 10 06766000 XSNAP 00787000 10 06768000 XSRNR 01089000 11 06770000 XSRTR 01371000 11 06772000 XXDKEDCB 01189060 11 06774000 , 06776000 ASPLM630- 3 06778000 06780000 .*--> MACRO: &MALLOCH GET CORE IN HIGH FREEAREA. SAME AS &ALLOCH * 06782000 .* EXCEPT USES AVGEN2CD AS HIGH END POINTER. USED IN MEXPND * 06784000 .* &R IS REG NEW USEABLE @ APPEARS IN * 06786000 .* &L GIVES REGISTER DESIRED LENGTH ISIN * 06788000 .* &OVRFL IS BRANCH @ IF OVERFLOW OCCURS * 06790000 .* * 06792000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06794000 06796000 .*--> MACRO: &MALLOCL GET CORE IN LOW FREEAREA. SAME AS &ALLOCL * 06798000 .* EXCEPT USES AVGEN2CD AS POINTER TO FREE HIGH AREA. USED IN * 06800000 .* MEXPND * 06802000 .* * 06804000 .* &R GIVES REGISTER WHERE ADDRESS OF NEW USEABLE AREA APPEARS * 06806000 .* &L GIVES REGISTER CONTAINING LENGTH DESIRED * 06808000 .* &OVRFL IS @ TO BE BRANCHED TO IF OVERFLOW * 06810000 .* &LENG IS THE LENGTH TO BE ALLOCATED *S 06812000 .* * 06814000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06816000 06818000 .*--> MACRO: $ALIGN GET,ALIGN, RESTORE UPDATED LOCATION COUNTER. * 06820000 .* USED TO ALIGN LOCATION COUNTER TO H, F, OR D BOUNDARIES. * 06822000 .* &R WILL CONTAIN ALIGNED VALUE OF LOCATION COUNTER * 06824000 .* &A GIVES ALIGNMENT REQUIRED , IF IN PARENTHESES, GIVES REG, * 06826000 .* IF NOT, GIVES DECIMAL NUMBER 1-3-7 FOR H,F,D ALIGN * 06828000 .* &TAG IF CODED-MEANS THAT LOCATION COUNTER IS ALREADY IN &R. * 06830000 .* USES MACROS: $ALIGR,$GLOC,$SLOC * 06832000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06834000 06836000 .*--> MACRO: $ALIGR ALIGN VALUE IN REGISTER (USUALLY LOCCNTR). * 06838000 .* ALIGN REGISTER MACRO-ALIGN REGISTER &R TO BOUNDARY GIVEN * 06840000 .* BY VALUE IN REG &A, WHICH HAS 1,3,7 ETC IN IT. * 06842000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06844000 06846000 .*--> MACRO: $ALLOCH GET CORE IN FREEAREA HIGH END (ASSEMLBER). * 06848000 .* &R IS REGISTER NEW USABLE ADDRESS APPEARS IN. * 06850000 .* &L GIVES REGISTER LENGTH DESIRED IS IN. * 06852000 .* &OVRFL IS ADDRESS TO BE BRANCHED TO IF OVERFLOW OCCURS. * 06854000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06856000 06858000 .*--> MACRO: $ALLOCL GET CORE IN LOW FREEAREA (IN ASSEMBLER). * 06860000 .* &R GIVES REGISTER WHERE ADDRESS OF NEW USABLE AREA APPEARS * 06862000 .* &L GIVES REGISTER CONTAINING THE LENGTH DESIRED. * 06864000 .* &OVRFL IS ADDRESS TO BE BRANCHED TO IF OVERFLOW OCCURS. * 06866000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06868000 06870000 .*--> MACRO: $AL2 CREATE HALFWORD ADDRESS OFFSET TABLE. * 06872000 .* USED TO GENERATE LIST OF AL2 ADDRESS CONSTANTS WHICH * 06874000 .* CONTAIN THE RELATIVE ADDRESS OF EACH ITEM IN &LIST FROM &BASE* 06876000 .* &OFSET GIVES A NUMBER TO BE ADDED OR SUBTRACTED WHEN SETTING * 06878000 .* UP THE EQU FOR THE LABEL,SO THAT INDEXING MAY START ANYWHERE * 06880000 .* &L IS CODED IF THE OFFSET LIST SHOULD BE PRECEDED BY LENGTH * 06882000 .* SET UP FOR BXLE . * 06884000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06886000 , 06888000 ASPLM630- 4 06890000 06892000 .*--> MACRO: $CALL SUBROUTINE CALL INSIDE ASSIST ASSEMBLER. * 06894000 .* &ENTRY ENTRY POINT NAME TO BE CALLED, OS LINKAGE. * 06896000 .* **NOTE** GENERATES NAME WITH AX PREFIX, SO CAN ONLY BE USED * 06898000 .* INSIDE ASSEMBLER WHERE AVWXTABL USING HOLDS. * 06900000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06902000 06904000 .*--> MACRO: $CKALN CHECK LOC-COUNTER ALIGNMENT, BRANCH IF SO. * 06906000 .* USED TO CHECK ALIGNMENT - &MASK IS 1-3-7, &B IS BRANCH LOC * 06908000 .* IF LOCATION COUNTER IS PROPERLY ALIGNED. * 06910000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06912000 06914000 .*--> MACRO: $DALLOCH RETURN CORE-HIGH FREEAREA (IN ASSEMBLER) * 06916000 .* *NOTE* THIS IS A STACK POP TO BE USED WITH $ALLOCH (PUSH) FOR* 06918000 .* FUTURE USE IN MACRO ASSEMBLER. AS OF 8/9/70 IT IS UNUSED. * 06920000 .* &R IS A WORK REGISTER, WHICH WILL BE DESTROYED * 06922000 .* &L REPRESENTS THE LENGTH. IF 1ST CHAR IS '(', WILL BE * 06924000 .* TAKEN AS REGISTER CONTAINING THE LENGTH, OTHER WISE TO * 06926000 .* BE AN ACTUAL LENGTH TO BE ADDED. * 06928000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06930000 06932000 .*--> MACRO: $DBG SET TRACE, DEBUGGING SET VARIABLES FOR ASM. * 06934000 .* &D HEX FLAG BYTE FOR USE IN TM INSTRUCTION. * 06936000 .* &T IS TRACE MODE FOR AN XSNAP = NO,*,SNAP. * 06938000 .* SEE MACROS $RETURN,$SAVE,XSRTR FOR GENERATION OF TRACE CODE * 06940000 * ON ROUTINE ENTRY/EXIT. SEE ALSO ASSIST PROGRAM LOGIC MANUAL. * 06942000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06944000 06946000 .*--> MACRO: $DISK CALL DISK UTILITY * * * * * * * * * * * * * * * 06948000 .* $DISK CALLS MACRO XIONR TO SET UP A BRANCH TO A DISK * 06950000 .* UTILITY ROUTINE. * 06952000 .* USES MACRO: XIONR * 06954000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06956000 06958000 .*--> MACRO: $ERCGN GENERATE COMPLETION CODE BLOCK FOR XXXXSNAP * 06960000 .* EACH CALL CREATES 1 ENTRY DESCRIBED BY DSECT ERCOMPCD. * 06962000 .* &CODE CHARACTER VALUE OF ERROR CODE NUMBER. * 06964000 .* &MSSG ERROR MESSAGE TO BE PRINTED * 06966000 .* &TYPE TYPE OF COMPLETION CODE - SYSTEM, ASSIST, OR USER. * 06968000 .* *NOTE* IF &$OPTMS = 0, NO MESSAGE WILL BE GENED, ONLY CODE. * 06970000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06972000 06974000 .*--> MACRO: $GLOC GET LOCATION COUNTER INTO REGISTER. * 06976000 .* GET LOCATION COUNTER MACRO-PUTS LOCCNTR VALUE IN &RG * 06978000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06980000 06982000 .*--> MACRO: $GTAD LOAD ADCON INTO REGISTER FORM AVWXTABL. * 06984000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06986000 06988000 .*--> MACRO: $LV LOAD VARIABLE LENGTH VALUE INTO REGISTER(ASMB)* 06990000 .* LOAD VARIABLE - PLACES &L BYTES IN &RG FROM &AD * 06992000 .* HIGH ORDER BYTES ARE ZEROED, USES AVFWORK1 * 06994000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 06996000 06998000 .*--> MACRO: $MSG USED TO GENERATE LINE IN MSG TABLE A 07000000 * &NMBR IS MESSAGE # (3 DIGITS) S 07002000 .* &MSG IS QUOTED STRING OF MESSAGE A 07004000 .* &FLAG IS FLAG BYTE A 07006000 , 07008000 ASPLM630- 5 07010000 07012000 .* GENERATES:(LENGTH-1 OF MSG) U BYTE +3 FOR LENGTH OF MSG A 07014000 .* (FLAG BYTE) 1 BYTE S 07016000 .* CHAR FORM OF NMBR 3 BYTES S 07018000 07020000 .*--> MACRO: $PNCH PUNCH A CARD, BRANCH IF RECORD OVERFLOW * 07022000 .* &XAREA,&XNUM-SEE XIONR MACRO FOR EXPLANATION, OR XPNCH WRTUP * 07024000 .* &OVER IS LABEL TO BE BRANCHED TO IF RECORDS EXCEED LIMIT. * 07026000 .* USES MACROS: XIONR * 07028000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07030000 07032000 .*--> MACRO: $PRNT PRINT A LINE, BRANCH IF RECORD OVERFLOWE. * 07034000 .* &XAREA,&XNUM-SEE XIONR MACRO FOR EXPLANATION, OR XPRNT WRITUP* 07036000 .* &OVER IS LABEL TO BE BRANCHED TO IF RECORDS EXCEED LIMIT. * 07038000 .* USES MACROS: XIONR * 07040000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07042000 07044000 .*--> MACRO: $READ READ CARD DURING EXECUTION, BRANCH IF EOF. * 07046000 .* &XAREA,&XNUM-SEE XIONR MACRO FOR EXPLANATION, OR XREAD WRITUP* 07048000 .* &EOF LABEL TO BE BRANCHED TO IF END-FILE OCCURS. * 07050000 .* USES MACROS: XIONR * 07052000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07054000 07056000 .*--> MACRO: $RETURN RETURN FROM SUBROUTINE, OS LINKAGE. * 07058000 .* SUPPLIES EXTRA DEBUGGING CONTROL AND DEFAULTS TO XRETURN. * 07060000 .* USES MACROS: XRETURN * 07062000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07064000 07066000 .*--> MACRO: $SAVE SUBROUTINE ENTRY SETUP, OS LINKAGE. * 07068000 .* SUPPLIES EXTRA DEBUGGING CONTROL AND DEFAULTS TO XSAVE MACRO.* 07070000 .* USES MACROS: XSAVE * 07072000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07074000 07076000 .*--> MACRO: $SCOF CONVERT REGISTER SCAN POINTER TO OFFSET VALUE.* 07078000 .* SCAN POINTER OFFSET MACRO - PLACE SCAN POINTER REGISTER &SCP * 07080000 .* INTO WORK REGISTER &RG, FIND OFFSET, AND STORE IT INTO &BYTE * 07082000 .* IF &BYTE SPECIFIED. &AD= WORD GIVING BEGINNING @ FOR OFFSET.* 07084000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07086000 07088000 .*--> MACRO: $SCPT CONVERT OFFSET TO A SCAN POINTER @ INTO REG. * 07090000 .* GET SCAN POINTER ADDRESS FROM OFFSET-OFFSET IS IN &BYTE,ADDR * 07092000 .* IS CREATED IN &RG. &AD GIVES BEGINNING @ OF FIELD. * 07094000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07096000 07098000 .*--> MACRO: $SDEF STORE VALUES IN SYMBOL TABLE ENTRY, FLAG DEFN.* 07100000 .* &RVAL REGISTER CONTAINING SYMBOL VALUE. * 07102000 .* &RESD REGISTER CONTAINING SECTION ID OF SYMBOL. * 07104000 .* &RLENG REGISTER CONTAINING LENGTH ATTRIBUTE-1 FOR SYMBOL.** 07106000 .* *NOTE* SYMSECT DSECT MUST HAVE VALID USING AT TIME OF CALL. * 07108000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07110000 07112000 .*--> MACRO: $SERR SET ERROR CODE MESSAGES AND EQU SYMBOLS. * 07114000 .* CALLED 2 TIMES FOR EACH ERROR EQU, 1 TIME TO SET UP EQU, 1 * 07116000 .* TIME TO CREATE ERROR MESSAGE DC'S IN CSECT OUTPUT OF ASMBLER.* 07118000 .* &ERR IS LAST 5 CHARACTERS OF ERROR MESSAGE EQU SYMBOL. * 07120000 .* &MSG IS THE ERROR MESSAGE ASSOCIATED WITH THE EQU. * 07122000 .* &NM IS THE ERROR CODE FOR EXTERNAL USE - AS###. * 07124000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07126000 , 07128000 ASPLM630- 6 07130000 07132000 .*--> MACRO: $SETRT SET UP TRT TABLE FOR SCANNING IN ASSEMLBER. * 07134000 .* USED INSIDE ASSIST ASSEMBLER TO CREATE TEMPORARY TRT TABLE IN* 07136000 .* COMMON AREA AWTZTAB (WHICH CONTAINS 256 HEX 0'S). * 07138000 .* &LIST IS LIST OF CHARACTER/VALUE PAIRS, WITH CHARACTERS * 07140000 .* ENCLOSED IN QUOTES. CORRESPONDONG VALUES ARE MOVED INTO * 07142000 .* CORRESPON:ING LOCATIONS IN 256-BYTE TABLE OF ZEROS. * 07144000 .* IF VALUE IS OMITTED, ZERO IS ASSUMED. * 07146000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07148000 07150000 .*--> MACRO: $SLOC SET LOCATION COUNTER TO REGISTER VALUE. * 07152000 .* SET LOCATION COUNTER MACRO - SETS &RG AS LOCCNTR VALUE * 07154000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07156000 07158000 .*--> MACRO: $SORC READ ASSEMBLER SOURCE CARD, BRANCH IF EOF. * 07160000 .* &XAREA,&XNUM-SEE XIONR MACRO FOR EXPLANATION, OR XREAD WRITUP* 07162000 .* &EOF LABEL TO BE BRANCHED TO IF END-FILE OCCURS. * 07164000 .* USES MACROS: XIONR * 07166000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07168000 07170000 .*--> MACRO: $SPIE INTERRUPT COMMUNICATIONS * * * * * * * * * 07172000 .* SCOTT A. SMITH - FALL 1971. * 07174000 .* MAY BE USED BY OS OR DOS SYSTEMS TO SPECIFY THE ADDRESS * 07176000 .* OF AN INTERRUPTION EXIT ROUTINE AND TO SPECIFY THE PROGRAM * 07178000 .* INTERRUPT TYPES THAT ARE TO CAUSE THE EXIT ROUTINE TO BE * 07180000 .* GIVEN CONTROL. * 07182000 .* &EXIT LABEL TO BE BRANCHED TO FOR THE INTERRUPTION * 07184000 .* EXIT. ADDRESS MAY BE IN A REGISTER. * 07186000 .* &TYPES A LIST OF INTERRUPTION TYPES TO CATCH. IF THIS * 07188000 .* IS NOT SPECIFIED, A DEFAULT VALUE OF ((1,15)) * 07190000 .* IS ASSUMED. THE FORM OF THIS OPERAND IS A LIST * 07192000 .* OF OPERANDS SEPARATED BY COMMAS. THE LIST ITSELF * 07194000 .* IS ENCLOSED IN PARENTHESES WITH EACH OPERAND * 07196000 .* SPECIFYING A GROUP OF INTERRUPT TYPES TO CATCH. * 07198000 .* EACH OF THESE IS EITHER A SINGLE INTEGER BETWEEN * 07200000 .* 1 AND 15, OR A PAIR OF INTEGERS BETWEEN 1 & 15 * 07202000 .* REPRESENTING AN INCLUSIVE RANGE OF INTERRUPTS. * 07204000 .* EACH PAIR IS ENCLOSED IN PARENTHESES * 07206000 .* &ACTION= SPECIFIES THE ACTION THIS MACRO IS TO TAKE. * 07208000 .* -->INIT: IDENTIFIES THIS AS AN INITIAL $SPIE CALL * 07210000 .* AND INITIALIZATION IS TO BE PERFORMED. * 07212000 .* -->CR: CREATE A NEW $SPIE COMMUNICATION, BUT DO * 07214000 .* NOT REINITIALIZE. * 07216000 .* -->(RS,(REG)) RESTORE A PREVIOUS $SPIE COMMUNICATION * 07218000 .* LINK USING THE XSPIEBLK AT THE ADDRESS IN THE * 07220000 .* REGISTER. ALL OTHER PARAMETERS ARE IGNORED * 07222000 .* ***DEFAULT***INIT * 07224000 .* &CE= THIS SPECIFIES AN OPTIONAL CALLABLE EXIT WHICH * 07226000 .* MAY RECEIVE TEMPORARY CONTROL IMMEDIATELY FOLLOW- * 07228000 .* ING AN INTERRUPT. THIS EXIT MUST RETURN. * 07230000 .* *REGISTERS 14,15,0,1 ARE DESTROYED BY THIS MACRO* * 07232000 .** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07234000 07236000 .*--> MACRO: $STV STORE VARIABLE LENGTH VALUE FROM REGISTER (AS)* 07238000 .* STORE VARIABLE MACRO-STORES &L BYTES FROM LOW ORDER END OF * 07240000 .* REGISTER &RG INTO ADDRESS &AD. * 07242000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07244000 , 07246000 ASPLM630- 7 07248000 07250000 .*--> MACRO: $TIRC GET TIME/RECORDS DATA FROM OPERATING SYSTEM. * 07252000 .* THIS MACRO USES PSU SVC CALL 250 TO OBTAIN TIME OR * 07254000 .* RECORDS INFORMATION. &TYPE IS TIMREM,TIMUSE,RECREM,RECUSE. * 07256000 .* RESULT IS RETURNED IN R0, IN EITHER RECORDS, OR IN TIMER * 07258000 .* UNITS OF 26.04 MICROSECOND. DESTROYS R0,R1,R15. * 07260000 .* *NOTE* MAY HAVE TO BE REWRITTEN FOR LOCAL CONDITONS. * 07262000 .* &TYPE CAN ALSO BE OF FORM (NAME,ADDR) WHERE ADDR IS AN * 07264000 .* RX-TYPE ADDRESS, AT WHICH THE MACRO PLACES THE FOLLOWING: * 07266000 .* BYTES 0-4 : ACCOUNT NUMBER .... INFORMATION FROM * 07268000 .* BYTES 5-12 : JOB NAME .... FROM * 07270000 .* BYTES 13-32 : PROGRAMMER NAME .... JOB CARD * 07272000 .* THIS FORM NEEDED ONLY IF &$ACCT=1, AND IS COMPLETELY LOCAL * 07274000 .* TO PSU CC, THUS MUST BE REWRITTEN IF USED ELSEWHERE. * 07276000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07278000 07280000 .*--> MACRO: APCGN GENERATE 1 APCBLK ELEMENT IN APARMS . . . . . . 07282000 .* GENERATES BLOCK FOR PARM OPTION SCANNING CONTROL, DEPENDING . 07284000 .* ON DESIRED CHARACTERISTICS OF THE PARM. MAY SKIP GENERATION . 07286000 .* IF THE REQUIRED OPTION DOES NOT EXIST IN PARTICULAR SYSTEM. . 07288000 .* ***SEE DSECT APCBLK AND CSECT APARMS (FROM LABEL APFOUND) . 07290000 .* FOR FURTHER INFORMATION ON HANDLING OF BLOCK CREATED BY THIS.. 07292000 .* &PARM NAME OF THE PARM OPTION. . 07294000 .* &AJOFS NAME OF VARIABLE IN AJOBCON TO BE SET BY THIS PARM . 07296000 .* &BITS VALUE USED TO SET FLAG FOR YES/NO TYPE PARMS. . 07298000 .* IF =PARM AND NOT CALL TYPE, SHOULD BE GIVEN VALUE 0. . 07300000 .* &G,&GC USED TO CONTROL GENERATION. GENERATION IS SKIPPED . 07302000 .* IF &G EQ &GC, THUS ALLOWING CONDITIONAL ASSEMBLY OF PARMS. . 07304000 .* &C THRU &Y GIVE TYPE BITS TO BE PLACED INTO APCFLAG. EACH . 07306000 .* CORRESPONDS TO 1 OR MORE EQU SYMBOLS, AS LISTED. . 07308000 .* &C =1 IF PARM IS NONSTANDARD AND A ROUTINE MUST BE CALLED.. 07310000 .* APPLIES ONLY TO =VALUE TYPE PARMS. THE ROUTINE CALLED MUST . 07312000 .* BE NAMED APA&PARM. (APCCALL) . 07314000 .* &N =1 IF VALUE CANNOT BE GIVEN ANOTHER VALUE ONCE IT HAS . 07316000 .* BEEN SET ONCE. MAY BE USED BY ANY PARM TYPE.(APCNRSET) . 07318000 .* &D =1 IF PARM IS PARM=DECIMAL VALUE. IF THIS IS CODED . 07320000 .* AND PARM IS NOT A SPECIAL CALL TYPE, THEN IT IS ASSUMED THAT . 07322000 .* THE VALUE CONVERTED IS TO BE STORED AS A FULLWORD AT THE . 07324000 .* GIVEN VARIABLE LOCATION IN AJOBCON. (APCD) . 07326000 .* &I1 =1 IF PARM IS A YES/NO TYPE AND 1BIT ON CORRESPONDS . 07328000 .* TO A YES VALUE (1BIT MEANS NO OTHERWISE). (APCYES1B) . 07330000 .* =1 IF PARM IS =DECIMAL # PARM, AND MAY NEVER BE . 07332000 .* INCREMENTED AFTER IT HAS BEEN SET (BUT MAY BE DECREASED). . 07334000 .* USED PARTICULARLY FOR TIME/RECORDS LIMITS. (APCNINCR) . 07336000 .* &Y =1 IF THE PARM IS A YES/NO TYPE. OTHERWISE, IT IS . 07338000 .* AN =PARM OF SOME SORT. (APCYESNO) . 07340000 .* &LK DENOTES WHICH OF THE POSSIBLE CALLS IS ALLOWED TO SET . 07342000 .* A VALUE FOR THE GIVEN PARM. CONSISTS OF 3 BITS: ###, WITH . 07344000 .* MEANINGS AS FOLLOW: . 07346000 .* 100 CAN BE SET BY LIMIT OR DEFAULT VALUE (APCSETLD) . 07348000 .* 010 CAN BE SET FROM THE PARM FIELD (APCSETP) . 07350000 .* 001 CAN BE SET BY USER FROM $JOB CARD (APCSETU) . 07352000 .* THIS MACRO USED ONLY IN APARMS CSECT. . 07354000 .* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 07356000 , 07358000 ASPLM630- 8 07360000 07362000 .*--> MACRO: ASPAGE LINK TO SECTION OF PAGE CONTROL CODE . . . . . 07364000 .* &CODE IS TWO-DIGIT # GIVING DESIRED SECTION OF PAGE CONTROL . 07366000 .* CALL IS GENERATED ONLY IF &$PAGE = 1. . 07368000 .* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 07370000 07372000 .*--> MACRO: ASPRNT PRINT LINE INSIDE MAIN PROG ASSIST. * * * * * * 07374000 .*. ASPRNT SETS UP R0=@ LINE, R1=LENG, CLLS INSUB ASASPRNT OF * 07376000 .* ASSIST. MODIFIES REGS R0,R1,R14. * 07378000 .*. &XAREA,&XNUM SAME AS THOSE FOR $PRNT = @, LENGTH TO PRINT. * 07380000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07382000 07384000 .*--> MACRO: ASRECL LINK TO RECORD LIMIT CONTROL CODE . . . . . . . 07386000 .* &CODE IS TWO DIGIT NUMBER GIVING SECTION OF ASRECL## CALLED . 07388000 .* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 07390000 07392000 .*--> MACRO: ASTIME UPDATE TIMER,PRINT TIMING MESSAGES(ASSIST). * 07394000 .* &ASH NAME OF MESSAGE, IF OMIITED UPDATE TIMER ONLY. * 07396000 .* &VALUE NAME OF VALUE TO BE CONVERTED, OMITTED-NO 2ND PART * 07398000 .* *NOTE* ONLY USABLE INSIDE MAIN PROGRAM ASSIST. * 07400000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07402000 07404000 .*--> MACRO: ASTIMR LINK TO TIMER ROUTINES IN MAIN PROGRAM ASSIST * 07406000 .* ASTIMR ALLOWS FOR CONDITIONAL GENERATION OF CALLS TO * 07408000 .* VARIOUS TIMING MODULES INSIDE ASSIST MAIN PROGRAM, DEPENDING * 07410000 .* ON THE DESIRED TIMING METHOD BEING USED. * 07412000 .* &CODE IS 2-DIGIT CODE, GIVING SECTION OF ASTIMR TO BE CALLED* 07414000 .* &TLEVEL IS 0,1,2. NO CODE IS CREATED IF &$TIMER<&TLEVEL. * 07416000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07418000 07420000 .*--> MACRO: CONG GENERATE CONSTANT CODE TABLE (CSECT CODTL1). * 07422000 .* USED IN CODTL1 OF ASSEMBLER TO PRODUCE 1 ENTRY IN * 07424000 .* CONSTANT DESCRIPTION BLOCK. SEE CONBLK DSECT IN CODTL1. * 07426000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07428000 07430000 .*--> MACRO: EVCG CREATE ROW OF TRANSITION TABLE (CSECT EVALUT) * 07432000 .* &L LIST OF PAIRS- JUMP LABEL,(ERROR CODE OR STATE #). * 07434000 .* CREATES 1 ROW OF TABLE EVCTAB IN GENERAL EXPRESSION EVALUATOR* 07436000 .* CSECT EVALUT. SEE EVCTDSCT DSECT FOR ENTRIES IN EACH ROW. * 07438000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07440000 07442000 .*--> MACRO: IBPRTAB GENERATE 1 BLOCK FOR PRINT SCAN LIST . . . . . 07444000 .*. USED ONLY IN IBASM1. CREATES 1 BLOCK: DSECT IBPSCECT . 07446000 .*. &OP OPERAND NAME (ON, OFF, ETC). . 07448000 .*. &VO VALUE TO BE OR'D INTO PRINT BYTE: BIT TO SET ON.OFF. 07450000 .*. &VX VALUE TO BE XOR'D INTO PRINT CONTROL: EITHER 0 . 07452000 .*. IF BIT ON (&VX OMITTED), OR SAME AS &VO IF * CODED.. 07454000 .*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 07456000 07458000 .*--> MACRO: ICT CREATE CONTROL CODES(ICYFLAG) VALUES(ICMOP2). * 07460000 .* &TYPE TYPE OF INSTRUCTION FORMAT ($RR,$RX,ETC). * 07462000 .* &VALUE VALUE OF CODE REQUIRED FOR TABLE. * 07464000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07466000 07468000 .*--> MACRO: OPG CREATE 1 ENTRY IN ASM OPCODE TABLE (OPCOD1). * 07470000 .* THE GENERATED ENTRY IS DESCRIBED BY DSECT OPCODTB. * 07472000 .* GENERATES THE 4 FIELDS OF AN OPCODTB ENTRY - OPCTYPE,OPCHEX, * 07474000 .* OPCMASK, AND OPCMNEM. IF &HEX OR &MASK ARE OMITTED,THEY * 07476000 , 07478000 ASPLM630- 9 07480000 07482000 .* ARE ASSUMED TO BE 0. &CODE IS USED FOR INSTRUCTIONS WHICH * 07484000 .* MAY NOT BE GENERATED. IF USED , IT IS 'D' FOR DECIMAL INSTS, * 07486000 .* 'F' FOR FLOATING POINT INSTRUCTIONS, AND 'P' FOR PRIVILEGED * 07488000 .* OPERATIONS. IF THE SPECIFIED TYPE IS NOT TO BE GENERATED, * 07490000 .* THE APPROPRIATE GLOBAL VARIABLE WILL HAVE BEEN SET, AND THE * 07492000 .* OPCODTB ENTRY WILL NOT BE CREATED. * 07494000 .* &CODE = 'M' FOR MACRO OPCODES. * 07496000 .* &CODE = 'FX' FOR EXTENDED FLOATING POINT OPCODES. * 07498000 .* &CODE = 'S370' FOR NON-PRIVILEGED S/370 OPCODESS. * 07500000 .* &CODE = 'P370' FOR PRIVILEGED S/370 OPCODES. * 07502000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07504000 07506000 .*--> MACRO: OPGT CREATE 2ND LEVEL OPCODE PTR TABLES (OPCOD1). * 07508000 .* USES MACROS: $AL2 * 07510000 .* NOTE &OPNGN VALUES WERE SET BY OPG MACRO. CALLED 1 TIME ONLY.* 07512000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07514000 07516000 .*--> MACRO: REPRNT PRINT MESSAGE MACRO FOR REMONI USE . . . . . . 07518000 .*. &MSG GIVES RX-TYPE ADDRESS OF MESSAGE TO BE PRINTED. . 07520000 .*. &MSGL GIVES LENGTH OF THE MESSAGE TO BE PRINTED. . 07522000 .*. MODIFIES REGISTERS R7, R8, R14. . 07524000 .*. CALLS INSUB REXPRINT. . 07526000 .*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 07528000 07530000 .*--> MACRO: RFSGN GENERATE 1 ENTRY OF REPLACE NAME TABLE(RFSYMS). 07532000 .*. RFSGN MACRO IS USED TO GENERATE THE PRIMARY TABLE . 07534000 .*. OF CSECT NAMES AND THEIR ENTRY POINT NAMES, WHICH IS USED TO . 07536000 .*. DO REPLACEMENT AND CHECKING OF STUDENT-WRITTEN CSECTS. . 07538000 .*. IF &$REPL=2 AND TYPE=2, RFSGN CREATES AN ELEMENT IN . 07540000 .*. THE SECOND SECTION OF RFSYMS, WHICH DESCRIBES A CALLABLE . 07542000 .*. ENTRYPOINT IN REAL ASSIST ROUTINES. . 07544000 .*. &CSECT NAMES A CSECT WHICH CAN BE REPLACED. . 07546000 .*. IF TYPE=2, NAMES A CALLABLE ENTRY FOR 2ND SECTION. . 07548000 .*. &ENTRY IS A LIST OF 1 OR MORE ENTRY POINT NAMES IN &CSECT.. 07550000 .*. IF TYPE=2, THIS ONE IS OMITTED. . 07552000 .*. &TYPE = 1 IF &CSECT MAY CALL OTHER CSECTS, OMITTED IF NOT. 07554000 .*. =2 IF CALL IS TO CREATE CALLABLE ENTRY ELEMENT. . 07556000 .*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 07558000 07560000 .*--> MACRO: WCONG CREATE OFFSETS TO CONSTANT SUBR ADCONS-VWXTABL* 07562000 .* CREATE WCONADS TABLE IN VWXTABL FOR USE OF CODTL1 AND CNDTL2 * 07564000 .* IN DOING TABLE-DRIVEN CONSTANT PROCESSING. CALLED 1 TIME ONLY* 07566000 .* &C LIST OF CONSTANT TYPES ALLOWED. (A,B,C, ETC). * 07568000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07570000 07572000 .*--> MACRO: XCALL SUBROUTINE CALL, OS LINKAGE, LITERAL FORM. * 07574000 .* &ENTRY NAME OF ENTRYPOINT TO BE CALLED. * 07576000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07578000 07580000 .*--> MACRO: XCHAR RETURN SAFE RIGHT-END SUBSTRING OF A STRING. * 07582000 .* JOHN R. MASHEY-JULY 1969-360/67* 07584000 .* THIS MACRO RETURNS IN &XXCHAR THE &NUM CHARACTERS TAKEN FROM * 07586000 .* THE RIGHT END OF THE CHARACTER STRING &STRING, WITHOUT * 07588000 .* BLOWING UP IF THERE ARE LESS THAN &NUM CHARS IN &STRING. * 07590000 .* THIS MACRO IS USED BY XSAVE,XRETURN, AND XSRNR * 07592000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07594000 , 07596000 ASPLM630- 10 07598000 07600000 .*--> MACRO: XDECI EXTENDED DECIMAL INPUT CONVERSION * * * * * * * 07602000 .* EXTENDED DECIMAL INPUT MACRO - ENABLES PROGRAMS * 07604000 .* WRITTEN FOR ASSIST TO BE RUN UNDER OS/360 DIRECTLY. * 07606000 .* USES MODULE XXXXDECI TO SCAN DECIMAL STRING BEGINNING AT * 07608000 .* &ADDRESS, CONVERT ITS VALUE INTO REGISTER ®, AND SET * 07610000 .* REGISTER R1 AS A SCAN POINTER TO THE DELIMITER FOLLOWING THE * 07612000 .* STRING OF DECIMAL DIGITS. THE CONDITION CODE IS SET BY THE * 07614000 .* VALUE IN ®, UNLESS AN ERROR OCCURRS, IN WHICH CASE CC=3. * 07616000 .* SEE ASSIST USER MANUAL FOR USAGE INSTRUCTIONS. * 07618000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07620000 07622000 .*--> MACRO: XDECO EXTENDED DECIMAL OUTPUT CONVERSION* * * * * * * 07624000 .* USES MODULE XXXXDECO TO CONVERT VALUE IN REGISTER ® TO * 07626000 .* AN EDITED 12-BYTE FIELD, WITH SIGN, AT LOCATION &ADDRESS. * 07628000 .* EXTENDED DECIMAL OUTPUT MACRO - ENABLES PROGRAMS * 07630000 .* WRITTEN FOR ASSIST TO BE RUN UNDER OS/360 DIRECTLY. * 07632000 .* SEE ASSIST USER MANUAL FOR USAGE INSTRUCTIONS. * 07634000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07636000 07638000 .*--> MACRO: XGET GET RECORD OFF OF &DDNAME FILE . . . . . . . . . * 07640000 .* RICHARD FOWLER AUG, 1972 V.5.0 * 07642000 .* MACRO FOR EASY READING OFF OF ANY DD FILE, READS &XNUM * 07644000 .* CHARACTERS. CONDITION CODE SET TO 0 NORMALLY, OR TO 1 ON * 07646000 .* END OF FILE. GENERATION CONTROLLED BY &XGETST. * 07648000 .* EXECUTION ASSUMES REG 1 POINTS TO DD NAME * 07650000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** 07652000 07654000 .*--> MACRO: XHEXI HEXADECIMAL INPUT CONVERSION MACRO. * 07656000 .* WRITTEN BY ALAN ARTZ 4/17/72 * 07658000 .* THIS MACRO TAKES THE VALUE STARTING AT THE ADDRESS GIVEN BY * 07660000 .* &ADDR AND CONVERTS IT AND PUTS THE HEXADECIMAL VALUE IN ®. * 07662000 .* IF THERE ARE MORE THAN 8 DIGITS, R1 POINTS TO THE 9TH AND THE * 07664000 .* FIRST 8 ARE CONVERTED. IF THERE IS A NON-BLANK, NON-HEX DIGIT * 07666000 .* FOUND, R1 POINTS TO THAT CHARACTER AND THE CC=3, OTHERWISE CC SET * 07668000 .* BY VALUE IN REG. * 07670000 .* * 07672000 .* CALLS MODULE XXXXHEXI TO DO THE ACTUAL CONVERSIONS * 07674000 .********************************************************************** 07676000 07678000 .*--> MACRO: XHEXO HEXADECIMAL OUTPUT CONVERSION MACRO * 07680000 .* WRITTEN BY ALAN ARTZ 4/17/72 * 07682000 .* THIS MACRO TAKES THE VALUE IN & REG AND CONVERTS IT TO * 07684000 .* PRINTABLE FORM. * 07686000 .* IT PUTS THE CONVERTED VALUE IN AN EIGHT BYTE AREA STARTING AT* 07688000 .* THE ADDRESS GIVEN IN &ADDR. * 07690000 .* THE CONDITION CODE IS NOT CHANGED AND NETHER ARE THE REGISTERS* 07692000 .* * 07694000 .* CALLS MODULE XXXXHEXO TO DO THE ACTUAL CONVERSIONS. * 07696000 .********************************************************************** 07698000 07700000 .*--> MACRO: XIDENT IDENTIFY ENTRY POINT FOR XSAVE,$SAVE. * 07702000 .* MACRO USED BY XSAVE TO PRODUCE ID AT AN ENTRY POINT. WILL * 07704000 .* USE THE FIRST NON-NULL OPERAND PASSED TO IT AS THE ID. * 07706000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07708000 , 07710000 ASPLM630- 11 07712000 07714000 .*--> MACRO: XIONR INNER MACRO-$READ,$PNCH,$PRNT,$SORC * 07716000 .* ALSO XGET,XPUT,$GET,AND$PUT * 07718000 .* JOHN R. MASHEY - FEB 1970 - V.4.0 * 07720000 .* XIONR IS USED BY XIOPAK MACROS XREAD,XPRNT,XPNCH TO SET UP * 07722000 .* THE REQUIRED CODE FOR CALLING THEIR RESPECTIVE SUBROUTINES. * 07724000 .* *** ARGUMENTS *** * 07726000 .* XNAME THE NAME OF THE I/O ROUTINE TO BE CALLED. * 07728000 .* XNUM THE LENGTH OF XAREA TO BE PRINTED,PUNCHED,ETC. * 07730000 .* XAREA THE AREA ON WHICH I/O OPERATION TO BE PERFORMED. * 07732000 .* MAY BE SPECIFIED BY (0) OR (R0). * 07734000 .* XDEFT DEFAULT VALUE OF XNUM TO BE USED, IF IT IS OMITTED * 07736000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07738000 07740000 .*--> MACRO: XLOOK FIND POSITION OF ELEMENT IN LIST. * 07742000 .* JOHN R. MASHEY - FEB 1970 - V.4.0 * 07744000 .* MACRO TO FIND AND RETURN POSTION OF ARGUMENT IN A SUBLIST. * 07746000 .* &ARG1 ARGUMENT TO BE SEARCHED FOR * 07748000 .* &ARGL LIST OF ARGUMENTS FOR &ARG1 TO BE CHECKED FOR IN * 07750000 .* &XXLOOK THE FIRST POSITION IN &ARGL IN WHICH &ARG1 IS * 07752000 .* FOUND, IF ANY. IF &ARG1 IS NOT IN &ARGL, &XXLOOK = 0. * 07754000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07756000 07758000 .*--> MACRO: XMUSE BASE REGISTER SETUP MACRO FOR XSAVE * 07760000 .* JOHN R. MASHEY - FEB 1970 - V.4.0 * 07762000 .* THIS MACRO IS CALLED BY XSAVE TO HANDLE BR AND AD OPERANDS, * 07764000 .* AND PRODUCE APPROPRIATE USINGS. &BR AND &AD ARE FROM XSAVE. * 07766000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07768000 07770000 .*--> MACRO: XPUT PUT A RECORD ONTO FILE &DDNAME . . . . . * 07772000 .* RICHARD FOWLER AUG 1972 V.5.0 * 07774000 .* MACRO FOR EASY PRINTING ONTO ANY DD FILE RECORD LENGTH=&XNUM * 07776000 .* IF PRINT FILE, THE FIRST CHARACTER IS USED AS CARRIAGE CONTROL 07778000 .* GENERATION CONTROLLED BY &XPUST * 07780000 .* EXECUTION ASSUMES REG 1 POINTS TO DD NAME * 07782000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** 07784000 07786000 .*--> MACRO: XRETURN GENERAL RETURN MACRO, OS LINKAGE * 07788000 .* JOHN R. MASHEY - FEB 1970 - V.4.0 * 07790000 .* EXTENDED RETURN MACRO - SEE PSU CC WRITEUP - XSAVE/XRETURN * 07792000 .* FOR EXPLANATION AND USE OF OPERANDS. * 07794000 .* USES MACROS: FREEMAIN,XCHAR,XSRNR * 07796000 .** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07798000 07800000 .*--> MACRO: XSAVE EXTENDED SAVE MACRO - OS LINKAGE. * 07802000 .* JOHN R. MASHEY - FEB 1970 - V.4.0 * 07804000 .* EXTENDED SAVE MACRO - SEE PSU CC WRITEUP - XSAVE/XRETURN * 07806000 .* FOR DESCRIPTION OF ARGUMENTS FOR THIS MACRO * 07808000 .* USES MACROS: GETMAIN,XCHAR,XIDENT,XLOOK,XMUSE,XSRNT,XSRTR * 07810000 .** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07812000 07814000 .*--> MACRO: XSNAP EXTENDED SNAP MACRO-DEBUGGING-DUMPING. * 07816000 .* JOHN R. MASHEY - FEB 1970 - V.4.0 * 07818000 .* XSNAP IS USED FOR STORING,PRINTING OF REGISTERS AND ANY * 07820000 .* OTHER ADDRESSIBLE AREAS. XSNAP HARMS NO REGISTERS,CAN BE USED* 07822000 .* IN ANY NUMBER OF CSECTS IN 1 ASSEMBLY,AND PRINTS REGISTERS * 07824000 .* EXACTLY AS THEY ARE WHEN THE XSNAP IS CALLED. XSNAP * 07826000 .* ACTION MAY BE MADE CONDITIONAL EITHER AT ASSEMBLY TIME OR * 07828000 , 07830000 ASPLM630- 12 07832000 07834000 .* DURING EXECUTE TIME. SEE WRITEUP FOR OPERAND DESCRIPTION. * 07836000 .* USES MACROS: XLOOK * 07838000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07840000 07842000 .*--> MACRO: XSRNR SAVE/RESTORE REGISTERS FOR XSAVE/XRETURN * 07844000 .* JOHN R. MASHEY- FEB 1970 - V.4.0 * 07846000 .* THIS MACRO IS USED BY XSAVE AND XRETURN TO SET UP * 07848000 .* REGISTER SAVING AND RESTORATION. * 07850000 .* &OP IS THE OPCODE TO BE USED. I.E. EITHER L OR ST. * 07852000 .* &RG IS 1 OPERAND FROM THE &RGS OPERAND USED BY XSAVE AND * 07854000 .* XRETURN. IT IS EITHER 1 REGISTER, OR A PAIR OF REGS * 07856000 .* SEPARATED BY A DASH. * 07858000 .* &NO15 =0 STATES THAT A RETURN CODE IS CURRENTLY IN REG 15 * 07860000 .* AND SHOULD NOT BE DISTURBED, REGARDLESS OF HOW THE REGS* 07862000 .* ARE SPECIFIED. * 07864000 .* USES MACROS: XCHAR * 07866000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07868000 07870000 .*--> MACRO: XSRTR CREATE SPECIAL ASSIST ENTRY/EXIT TRACE CODE. * 07872000 .* JOHN R. MASHEY-JULY 1969-360/67* 07874000 .* THIS MACRO IS USED BY XSAVE AND XRETURN TO GENERATE THE * 07876000 .* TRACE CODE CALLS TO XPRNT OR XSNAP, IF THE TR OPERAND IS USED* 07878000 .* *NOTE* THIS IS MODIFIED VERSION FOR USE IN ASSIST ONLY. * 07880000 .* USES MACROS: XSNAP * 07882000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07884000 07886000 .*--> MACRO: XXDKEDCB GENERATE TABLE OF DECBS FOR DISK UTILITY * * * * 07888000 .* THIS MACRO GENERATES A LINKED TABLE OF DECBS. * 07890000 .* THE BUFFER ADDRESSES ARE PLACED IN THE DECB BY XXXXDKOP * 07892000 .* USES MACRO: WRITE * 07894000 .* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 07896000 , 07898000 ASPLM640- 1 07900000 07902000 APPENDIX V. ENTRY AND EXIT CONDITIONS 01/31/73 - 2.1/A 07904000 THE ENTRY POINTS ARE LISTED ALPHABETICALLY BY CSECT NAME. 07906000 07908000 AOBJDK 05098480 3 07910000 APARMS 04577050 5 07912000 ASSIST 03751000 6 07914000 BROPS2 08566000 7 07916000 CACONS 08738000 8 07918000 CBCONS 08846000 9 07920000 CCCONS 08992000 10 07922000 CDECNS 09156000 11 07924000 CFHCNS 09406000 12 07926000 CNDTL2 09584000 13 07928000 CODTL1 09886000 14 07930000 CPCONS 10388000 15 07932000 CVCONS 10586000 16 07934000 CXCONS 10712000 17 07936000 CZCONS 10858000 18 07938000 ERRORS 11044000 19 07940000 ESDOPRS 11138000 20 07942000 EVALUT 11520000 21 07944000 EXECUT 05102440 22 07946000 IAMOP1 12316000 23 07948000 IBASM1 12466000 24 07950000 ICMOP2 13414000 25 07952000 IDASM2 14844000 26 07954000 INPUT1 15418000 27 07956000 LTOPRS 15678000 28 07958000 MACFND 46210000 30 07960000 MACINT 41655000 31 07962000 MACLEX 52520000 32 07964000 MACRO1 42025000 33 07966000 MACSCN 43945000 34 07968000 MCATRM 47620000 35 07970000 MCBODY 47910000 36 07972000 MCDTRM 47020000 37 07974000 MCGNCD 55805000 38 07976000 MCGTST 47255000 39 07978000 MCSCOP 45330000 40 07980000 MCSYSR 46655000 41 07982000 MCVSCN 46405000 42 07984000 MEXPND 57695000 43 07986000 MOCON1 16346000 44 07988000 MPCON0 16714000 45 07990000 MTCON2 16962000 46 07992000 MXERRM 66130000 47 07994000 MXINST 60535100 48 07996000 MXMVSR 66690000 49 07998000 OPCOD1 17070000 50 08000000 OUTPUT 17754000 51 08002000 REMONI 30144000 52 08004000 RFSYSMS 32790000 54 08006000 SCANRS 18752000 55 08008000 SDTERM 18880100 56 08010000 SYMOPS 19196000 57 08012000 UTOPRS 19492000 58 08014000 VWXTABL 20008100 60 08016000 , 08018000 ASPLM640- 2 08020000 08022000 XDDGET(E 07152012 61 08024000 XDDTABLE 07151958 62 08026000 XXDDFINI 07152220 63 08028000 XXXXDECI 07150020 64 08030000 XXXXDECO 07150750 65 08032000 XXXXHEXI 07151220 66 08034000 XXXXHEXO 07151670 67 08036000 XXXXIOCO 07164000 68 08038000 XXXXSNAP 07674050 72 08040000 XXXXSPIE 08562505 73 08042000 , 08044000 ASPLM640- 3 08046000 08048000 **--> CSECT: AOBJDK OBJECT DECK HANDLING MODULE . . . . . . . . . . 08050000 *. JOHN R. MASHEY - 09/01/71 . 08052000 *. THE TWO ENTRIES OF AOBJDK ARE USED TO LOAD OR PUNCH OBJECT . 08054000 *. DECKS WHICH ARE SUBSETS OF NORMAL S/360 DECKS. THE TWO ENTRIES . 08056000 *. MAY OR MAY NOT EXIST, DEPENDING ON FLAGS &$DECK AND &$OBJIN. . 08058000 *. USES DSECTS: AOBJCARD,AVWXTABL . 08060000 *. USES MACROS: $RETURN,$SAVE . 08062000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08064000 08066000 **--> INSUB: AOBDUMP DUMP CURRENT USER CARDIMAGE + + + + + + + + + + 08068000 08070000 **--> INSUB: AOBHEXCO CONVERT VALUES TO EDITED HEXADECIMAL + + + + + 08072000 08074000 **--> ENTRY: AOBJIN LOAD OBJECT DECK . . . . . . . . . . . . . . . 08076000 *. ENTRY CONDITIONS . 08078000 *. R12(RAT) = @ ASSEMBLER CONTROL TABLE (AVWXTABL). . 08080000 *. EXIT CONDITIONS . 08082000 *. AVRADL,AVRADH,AVRELOC,AVFENTER,AVLOCLOW,AVLOCHIH ARE SET UP . 08084000 *. AS THEY WOULD HAVE BEEN HAD THE PROGRAM BEEN ASSEMBLED. . 08086000 *. AVTAGS1 IS FLAGGED WITH AJNLOAD IF SOME ERROR OCCURRED. . 08088000 *. NAMES: AOB----- . 08090000 *. USES MACROS: $PRNT,$RETURN,$SAVE,$SORC,XSNAP . 08092000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08094000 08096000 **--> INSUB: AOBPRINT PRINT 1 LINE OF OUTPUT MESSAGE + + + + + + + + 08098000 08100000 **--> ENTRY: AODECK PUNCH OBJECT DECK FOLLOWING ASSEMBLY . . . . . 08102000 *. AODECK IS CALLED FOLLOWING A SUCCESSFUL ASS 08104000 *. IF THE DECK OPTION IS SPECIFIED, AODECK IS CALLED FOLLOWING . 08106000 *. A SUCCESSFULL ASSEMBLY TO PUNCH THE USER PROGRAM OUT IN OBJECT . 08108000 *. DECK FORM. THE DECK PUNCHED CONTAINS 1 OR MORE TXT CARDS AND . 08110000 *. 1 END CARD, AND FOLLOWS S/360 DECK FORMAT FAIRLY CLOSELY. . 08112000 *. **NOTE** THIS FACILITY IS VERY PRIMITIVE, AND THE DECKS . 08114000 *. PRODUCED CANNOT REALLY BE USED FOR ANYTHING BUT INPUT TO ASSIST, . 08116000 *. SINCE THERE IS NEITHER EXTERNAL SYMBOL DICTIONARY NOR RELOCATION . 08118000 *. DICTIONARY PRODUC D. ALSO, SINCE THE ENTIRE USER PROGRAM IS . 08120000 *. PUNCHED, OBJECT CARDS ARE PRODUCED FOR SPACE CONTAINING ONLY DS . 08122000 *. LOCATIONS. IN SOME CASES, THIS COULD CAUSE HUGE DECKS TO BE . 08124000 *. PUNCHED. IF A BETTER SETUP IS DESIRED, ASSEMBLER MODULE UTOPRS . 08126000 *. COULD BE CHANGED TO PRODUCE SMALLER DECKS, ALTHOUGH RLD ENTRIES . 08128000 *. WOULD STILL BE DIFFICULT TO PRODUCE. . 08130000 *. **NOTE** THE MOST LIKELY USE FOR THIS OPTION IS TO PRODUCE . 08132000 *. OBJECT DECKS TO BE USED AS UTILITY PROGRAMS FROM RJE TERMINALS. . 08134000 *. ENTRY CONDITIONS . 08136000 *. R12(RAT) = @ ASSEMBLER CONTROL TABLE (AVWXTABL). . 08138000 *. USES MACROS: $PNCH,$RETURN,$SAVE . 08140000 *. NAMES: AOD----- . 08142000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08144000 * SPACE 1 08146000 * * * * * * * * REGISTER USAGE FOR AODECK * * * * * * * * * * * * * * * 08148000 * R4 = @ CURRENT BLOCK OF CODE TO BE PUNCHED (INIT = AVRADL). * 08150000 * R5 = CURRENT LENGTH OF CODE REMAINING (INIT =AVRADH-AVRADL) * 08152000 * R6 = BASE REGISTER * 08154000 * R7 = @ AOBJCARD : OBJECT CARD OUTPUT IMAGE * 08156000 * R8 = CURRENT @ OF CODE TO PUNCHED (USER PROGRAM RELATIVE). * 08158000 * R9 = L'AOTCODE = LENGTH OF NORMAL(ALL BUT LAST) CODE ON CARD * 08160000 * R12(RAT)= @ ASSEMBLER CONTROL TABLE (AVWXTABL). * 08162000 , 08164000 ASPLM640- 4 08166000 08168000 * R13= @ CALLING PROGRAM'S SAVE AREA, UNCHANGED * 08170000 * R14= INTERNAL LINK REGISTER * 08172000 * ALL OTHERS ARE UNUSED * 08174000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 08176000 08178000 **--> INSUB: AODPUNCH PUNCH 1 OBJECT CARD FOR AODECK + + + + + + + + 08180000 , 08182000 ASPLM640- 5 08184000 08186000 **--> CSECT: APARMS USER PARM FIELD PROCESSING CSECT. . . . . . . . 08188000 *. SCANS USER PARM FIELD, SETS VALUES IN AJOBCON DSECT. . 08190000 *. ENTRY CONDITIONS . 08192000 *. R9 = @ OF ACTUAL PARM FIELD CHARACTER STRING. . 08194000 *. R10= LENGTH OF PARM FIELD AT 0(R9). . 08196000 *. R11= ADDRESS OF AJOBCON DUMMY SECTION AREA. . 08198000 *. EXIT CONDITIONS . 08200000 *. AJOPARM IN AJOBCON NOW HAS USER PARM FIELD, RIGHT-PADDED WITH ' '.. 08202000 *. VARIOUS FLAGS IN AJOBCON ARE NOW SET(SEE CODE STARTING AT APAJUMP). 08204000 *. USES DSECTS: AJOBCON,APCBLK . 08206000 *. USES MACROS: $DBG,$RETURN,$SAVE,$TIRC,APCGN,XDECI . 08208000 *. *NOTE* AS OF 8/12/70, THIS PROGRAM IS MORE GENERAL THAN . 08210000 *. CURRENTLY NEEDED, TO ALLOW FOR FUTURE NEW PARM OPTIONS. . 08212000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08214000 08216000 **--> INSUB: APDECON CONVERT DECIMAL PARM VALUE + + + + + + + + + + 08218000 , 08220000 ASPLM640- 6 08222000 08224000 **--> CSECT: ASSIST MONITOR CONTROL PROGRAM FOR THE ASSIST SYSTEM . 08226000 *. ENTRY CONDITIONS . 08228000 *. R1= @ POINTER TO OS LENGTH/PARM FIELD AREA. . 08230000 *. CALLS AOBJIN,AODECK,APARMS,EXECUT,MPCON0,REENDA,REINTA . 08232000 *. CALLS XXXXFINI,XXXXINIT . 08234000 *. USES DSECTS: AJOBCON,AVWXTABL,ECONTROL . 08236000 *. USES MACROS: $DBG,$PRNT,$RETURN,$SAVE,$SORC,$TIRC . 08238000 *. USES MACROS: ASPAGE,ASPRNT,ASRECL,ASTIME,ASTIMR . 08240000 *. USES MACROS: FREEMAIN,GETMAIN,STIMER,TTIMER,XCALL,XSNAP,WTL . 08242000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08244000 08246000 **--> INSUB: ASASPRNT CALLED BY ASPRNT MACRO TO PRINT A LINE. + + + + 08248000 08250000 **--> INSUB: ASFLUSH FLUSH CARD RDR UNTIL NEXT COMMAND CARD + + + + 08252000 08254000 **--> INSUB: ASMSFINI FREE CURRENT DYNAMIC STORAGE AREA + + + + + + + + 08256000 08258000 **--> INSUB: ASMSINIT MAIN STORAGE INITIALIZATION + + + + + + + + + + 08260000 08262000 **--> INSUB: ASPAGE## PAGE CONTROL CODE FOR PAGE MODE LIMITS + + + + 08264000 08266000 **--> INSUB: ASRECL## RECORD LIMIT CONTROL + + + + + + + + + + + + + 08268000 08270000 **--> INSUB: ASTIMER UPDATE TIMER,PRINT ELAPSED TIME,MESSAGE + + + + 08272000 08274000 *+--> INSUB: ASTIMR## TIMING SERVICES IN ASSIST MAIN PROGRAM. + + + + 08276000 08278000 **--> INSUB: ASTIMSET SET INTERVAL TIMER ROUTINE + + + + + + + + + + 08280000 08282000 **--> INSUB: ASTRP16 COMPUTE VALUES FOR BEFORE EXECUTION + + + + + + 08284000 , 08286000 ASPLM640- 7 08288000 08290000 **--> CSECT: BROPS2 2 ALL BASE REGISTER OPERATIONS - ALL PASS 2 . . 08292000 *. USES DSECTS: AVWXTABL . 08294000 *. USES MACROS: $RETURN,$SAVE . 08296000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08298000 08300000 **--> ENTRY: BRDISP 2 GIVEN VALUE&ESDID, RETURN BASE-DISPLACEMENT . 08302000 *. ENTRY CONDITIONS . 08304000 *. RA = ADDRESS VALUE TO BE DECOMPOSED TO BASE-DISPLACEMENT (24 BITS). 08306000 *. RB = ESDID OF ADDRESS TO BE DECOMPOSED - LOW ORDER BYTE . 08308000 *. VALUE IS FROM 1-255. 0 CAN BE USED TO MARK NONUSABLE. . 08310000 *. EXIT CONDITIONS . 08312000 *. RA = BASE-DISPLACEMENT FORM OF ADDRESS, IF ADDRESSABLE . 08314000 *. RB = 0 NORMAL RETURN - ADDRESS WAS DECOMPOSABLE . 08316000 *. = ^0 ADDRESSIBILITY ERROR(NO REG,OR DISP TOO LARGE) . 08318000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08320000 08322000 **--> ENTRY: BRDROP 2 DROP A REGISTER FROM USING. . . . . . . . . . 08324000 *. ENTRY CONDITIONS . 08326000 *. RA = NUMBER OF REGISTER TO BE DROPPED FROM USING - = 0-15 . 08328000 *. EXIT CONDITIONS . 08330000 *. RB = 0 THE REGISTER WAS CURRENTLY USABLE . 08332000 *. RB = ^0 THE REGISTER WAS NOT CURRENTLY IN USE . 08334000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08336000 08338000 **--> ENTRY: BRINIT 2 INITIALIZE BASE REGISTER TABLES . . . . . . . 08340000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08342000 08344000 **--> ENTRY: BRUSIN 2 ENTER A REGISTER-VALUE PAIR . . . . . . . . . 08346000 *. ENTRY CONDITIONS . 08348000 *. RA = NUMBER OF REGISTER FOR WHICH USING TO BE SET UP = 0-15 . 08350000 *. RB = ADDRESS DECLARED IN USING FOR GIVEN REGISTER = 0-2**24-1 . 08352000 *. RC = ESDID OF THE USING VALUE, IN LOW ORDER BYTE = 1-255 . 08354000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08356000 , 08358000 ASPLM640- 8 08360000 08362000 **--> CSECT: CACONS 1-2 PROCESS A-TYPE ADDRESS CONSTANTS. . . . . . . 08364000 *. USES DSECTS: AVWXTABL . 08366000 *. USES MACROS: $CALL,$RETURN,$SAVE . 08368000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08370000 08372000 **--> ENTRY: CACON1 SCAN ACON, BUT DO NOT ASSEMBLE VALUE. . . . . . 08374000 *. ENTRY CONDITIONS . 08376000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08378000 *. EXIT CONDITIONS . 08380000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08382000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08384000 *. RB = NONZERO ==> ILLEGAL CONSTANT ($ERINVCN) . 08386000 *. CALLS SCANCO . 08388000 *. **NOTE** EXPRESSION ENDING IN ) INSIDE MULTIPLE CONSTANT . 08390000 *. WILL BE PROCESSED IMPROPERLY, SUCH AS DC A(B+(C),D) . . 08392000 *. THE CHARACTERS C) ARE TREATED AS END OF THE ACON. . 08394000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08396000 08398000 **--> ENTRY: CACON2 1-2 SCAN ACON, ASSEMBLE VALUE . . . . . . . . . . 08400000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08402000 *. RB = LENGTH-1 OF 1 CONSTANT OF 1 OPERAND TO BE ASSEMBLED . 08404000 *. EXIT CONDITIONS . 08406000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08408000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08410000 *. RB = NONZERO VALUE - ERROR CODE (FROM EVALUT) . 08412000 *. = $ERRELOC IF SECTION ID IS A DSECT, WHICH IS NOT ALLOWED. . 08414000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08416000 *. RD = ESDID OF CONSTANT, IF =0 ==> ABSOLUTE EXPRESSION . 08418000 *. CALLS EVALUT . 08420000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08422000 , 08424000 ASPLM640- 9 08426000 08428000 **--> CSECT: CBCONS 1-2 PROCESS BINARY CONSTANTS. . . . . . . . . . . 08430000 *. USES DSECTS: AVWXTABL . 08432000 *. USES MACROS: $RETURN,$SAVE . 08434000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08436000 08438000 **--> ENTRY: CBCON1 1 SCAN B CONSTANT, DO NOT ASSEMBLE. . . . . . . 08440000 *. ENTRY CONDITIONS . 08442000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08444000 *. EXIT CONDITIONS . 08446000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08448000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08450000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08452000 *. RC = NUMBER OF BYTES REQUIRED FOR CONSTANT . 08454000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08456000 08458000 **--> ENTRY: CBCON2 1-2 ASSEMBLE BINARY CONSTANT. . . . . . . . . . . 08460000 *. ENTRY CONDITIONS . 08462000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08464000 *. RB = LENGTH-1 OF 1 CONSTANT OF 1 OPERAND TO BE ASSEMBLED . 08466000 *. EXIT CONDITIONS . 08468000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08470000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08472000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08474000 , 08476000 ASPLM640- 10 08478000 08480000 **--> CSECT: CCCONS 1-2 PROCESS CHARACTER TYPE CONSTANTS. . . . . . . 08482000 *. USES DSECTS: AVWXTABL . 08484000 *. USES MACROS: $RETURN,$SAVE . 08486000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08488000 08490000 **--> ENTRY: CCCON1 1 SCAN,RETURN LENGTH,DO NOT ASSEMBLE. . . . . . 08492000 *. ENTRY CONDITIONS . 08494000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08496000 *. EXIT CONDITIONS . 08498000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08500000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08502000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08504000 *. RC = NUMBER OF BYTES REQUIRED FOR CONSTANT . 08506000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08508000 08510000 **--> ENTRY: CCCON2 2 SCAN, ASSEMBLE. . . . . . . . . . . . . . . . 08512000 *. ENTRY CONDITIONS . 08514000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08516000 *. RB = LENGTH-1 OF 1 CONSTANT OF 1 OPERAND TO BE ASSEMBLED . 08518000 *. EXIT CONDITIONS . 08520000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08522000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08524000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08526000 , 08528000 ASPLM640- 11 08530000 08532000 **--> CSECT: CDECNS 1-2 PROCESS D&E TYPE CONSTS . . . . . . . . . . . 08534000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08536000 08538000 **--> ENTRY: CDECN1 1 SCAN, BUT DO NOT ASSEMBLE D OR E TYPE CONSTS. 08540000 *. ENTRY CONDITIONS . 08542000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08544000 *. EXIT CONDITIONS . 08546000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08548000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08550000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08552000 *. CALLS CDECN2 . 08554000 *. USES DSECTS: AVWXTABL . 08556000 *. USES MACROS: $RETURN,$SAVE . 08558000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08560000 08562000 **--> ENTRY: CDECN2 1-2 SCAN,ASSEMBLE D&E TYPE CONSTANTS. . . . . . . 08564000 *. ENTRY CONDITIONS . 08566000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08568000 *. RB = LENGTH-1 OF 1 CONSTANT OF 1 OPERAND TO BE ASSEMBLED . 08570000 *. EXIT CONDITIONS . 08572000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08574000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08576000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08578000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08580000 *. CALLS SDDTRM . 08582000 *. USES DSECTS: AVWXTABL . 08584000 *. USES MACROS: $CALL,$RETURN,$SAVE . 08586000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08588000 , 08590000 ASPLM640- 12 08592000 08594000 **--> CSECT: CFHCNS 1-2 PROCESS FULLWORD-HALFWORD CONSTANTS . . . . . 08596000 *. USES DSECTS: AVWXTABL . 08598000 *. USES MACROS: $RETURN,$SAVE . 08600000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08602000 08604000 **--> ENTRY: CFHCN1 1 SCAN CONST, DO NOT ASSEMBLE . . . . . . . . . 08606000 *. ENTRY CONDITIONS . 08608000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08610000 *. EXIT CONDITIONS . 08612000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08614000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08616000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08618000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08620000 08622000 **--> ENTRY: CFHCN2 2 ASSEMBLE F OR H CONST . . . . . . . . . . . . 08624000 *. ENTRY CONDITIONS . 08626000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08628000 *. RB = LENGTH-1 OF 1 CONSTANT OF 1 OPERAND TO BE ASSEMBLED . 08630000 *. EXIT CONDITIONS . 08632000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08634000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08636000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08638000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08640000 *. **NOTE** - THIS ROUTINE WILL ASSEMBLE VALUES INTO F OR H * 08642000 *. CONSTANTS OF LENGTH 1-8, BUT THE VALUE OF ANY CONSTANT MUST * 08644000 *. BE OF SIZE TO FIT INTO 1 FULLWORD, I.E. THE OTHER FULLWORD * 08646000 *. MUST EITHER BE ALL 0'S OR ALL 1'S (BINARY). . * 08648000 *. **NOTE** IT IS POSSIBLE FOR THIS ROUTINE TO CAUSE A FIXED PT * 08650000 *. OVERFLOW, WHICH WILL CAUGHT AND LAGGED BY SPIE MONITOR IN * 08652000 *. MAIN PROGRAM MPCON0. * 08654000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08656000 , 08658000 ASPLM640- 13 08660000 08662000 **--> CSECT: CNDTL2 2 CONSTANT PROCESSOR CONTROL - PASS 2 . . . . . 08664000 *. ENTRY CONDITIONS . 08666000 *. RB = NUMBER OF CONSTANT CONTROL BLOCKS TO BE PROCESSED . 08668000 *. RC = ADDRESS OF FIRST OR ONLY CNCBLOCK TO BE DONE . 08670000 *. CALLS CACON2,CBCON2,CCCON2,CDECN2,CFHCN2,CPCON2,CVCON2,CXCON2. 08672000 *. CALLS CZCON2,ERRTAG,OUTPT2,UTPUT2 . 08674000 *. USES DSECTS: AVWXTABL,CNCBLOCK . 08676000 *. USES MACROS: $ALIGR,$CALL,$GLOC,$GTAD,$RETURN,$SAVE . 08678000 *. USES MACROS: $SCPT,$SLOC . 08680000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08682000 , 08684000 ASPLM640- 14 08686000 08688000 **--> CSECT: CODTL1 1 SCAN DUPFAC,TYPE,LENGTH-CALL C ROUTINES . . . 08690000 *. ENTRY CONDITIONS . 08692000 *. RA = SCAN POINTER TO DUPLICATION FACTOR OR CONSTANT TYPE . 08694000 *. RB = 0 CONSTANT IS IN A DEFINE STORAGE STMT . 08696000 *. RB = 4 CONSTANT IS IN A DC STATEMENT . 08698000 *. RB = 8 CONSTANT IS A LITERAL - (I.E. DUPLFAC ^= 0, DECIMALS) . 08700000 *. EXIT CONDITIONS . 08702000 *. RA = SCAN POINTER TO DELIMITER FOLLOWING CONSTANT . 08704000 *. RB = 0 LEGAL SPECIFICATION OF CONSTANT . 08706000 *. RB = NONZERO VALUE - ERROR CODE - ILLEGAL . 08708000 *. RC = ADDRESS OF A CONSTANT CONTROL BLOCK . 08710000 *. RE = TOTAL LENGTH OF OPERAND,INCLUDING MULTIPLE OPERANDS,IF ANY . 08712000 *. CALLS CACON1,CBCON1,CCCON1,CDECN1,CFHCN1,CPCON1,CVCON1,CXCON1. 08714000 *. CALLS CZCON1,EVALUT,SDDTRM . 08716000 *. USES DSECTS: AVWXTABL,CONBLK . 08718000 *. USES MACROS: $CALL,$GTAD,$RETURN,$SAVE,$SCOF,CONG 08720000 * NOTE RESTRICTIONS - DUPLICATION FACTOR AND TOTAL LENGTH MUST * 08722000 * BOTH BE ABLE TO FIT IN HALFWORD EACH. LENGTH MAY BE GREATER * 08724000 * THAN 256 FOR A DS,BUT LENGTH ATTRIBUTE WILL NOT BE CORRECT * 08726000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08728000 , 08730000 ASPLM640- 15 08732000 08734000 **--> CSECT: CPCONS 1-2 PROCESS PACKED CONSTANTS. . . . . . . . . . . 08736000 *. USES DSECTS: AVWXTABL . 08738000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08740000 08742000 **--> ENTRY: CPCON1 1 SCAN,DO NOT ASSEMBLE PACKED CONSTATNT . . . . 08744000 *. ENTRY CONDITIONS . 08746000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08748000 *. EXIT CONDITIONS . 08750000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08752000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08754000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08756000 *. RC = NUMBER OF BYTES REQUIRED FOR CONSTANT . 08758000 *. USES MACROS: $RETURN,$SAVE . 08760000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08762000 08764000 **--> ENTRY: CPCON2 1-2 SCAN AND ASSEMBLE P TYPE CONSTANT . . . . . . 08766000 *. ENTRY CONDITIONS . 08768000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08770000 *. RB = LENGTH-1 OF 1 CONSTANT OF 1 OPERAND TO BE ASSEMBLED . 08772000 *. EXIT CONDITIONS . 08774000 *. RA = SCAN POINTER TO DELIMITER ENDING SCAN . 08776000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08778000 *. USES MACROS: $RETURN,$SAVE,$SETRT . 08780000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08782000 , 08784000 ASPLM640- 16 08786000 08788000 **--> CSECT: CVCONS 1-2 PROCESS V-TYPE ADCONS . . . . . . . . . . . . 08790000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08792000 08794000 **--> ENTRY: CVCON1 1 SCAN V-TYPE CONST, NO ASSEMBLE. . . . . . . . 08796000 *. ENTRY CONDITIONS . 08798000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08800000 *. EXIT CONDITIONS . 08802000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08804000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08806000 *. RB = NONZERO VALUE - ILLEGAL SYMBOL ($ERINVSY) . 08808000 *. USES DSECTS: AVWXTABL . 08810000 *. USES MACROS: $RETURN,$SAVE . 08812000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08814000 08816000 **--> ENTRY: CVCON2 2 SCAN&ASSEMBLE VCON. . . . . . . . . . . . . . 08818000 *. ENTRY CONDITIONS . 08820000 *. RA = SCAN POINTER TO FIRST CHARACTER OF VCON. . 08822000 *. EXIT CONDITIONS . 08824000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08826000 *. RB = 0 ==> NO ERRORS, NONZERO ==> ERROR CODE . 08828000 *. = NONZERO ERROR CODE ($ERUNRV OR $ERRELOC). . 08830000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08832000 *. CALLS SYFIND . 08834000 *. CALLS RESYMB (ONLY IF &$REPL=2 AND EXTRN SYMBOL USED). . 08836000 *. USES DSECTS: AVWXTABL,SYMSECT . 08838000 *. USES MACROS: $CALL,$RETURN,$SAVE . 08840000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08842000 , 08844000 ASPLM640- 17 08846000 08848000 **--> CSECT: CXCONS 1-2 PROCESS HEXADECIMAL CONSTANTS . . . . . . . . 08850000 *. USES DSECTS: AVWXTABL . 08852000 *. USES MACROS: $RETURN,$SAVE . 08854000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08856000 08858000 **--> ENTRY: CXCON1 1 SCAN HEX CONST, DO NOT ASSEMBLE . . . . . . . 08860000 *. ENTRY CONDITIONS . 08862000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08864000 *. EXIT CONDITIONS . 08866000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08868000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08870000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08872000 *. RC = NUMBER OF BYTES REQUIRED FOR CONSTANT . 08874000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08876000 08878000 **--> ENTRY: CXCON2 1-2 ASSEMBLE HEX CONSTANT . . . . . . . . . . . . 08880000 *. ENTRY CONDITIONS . 08882000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08884000 *. RB = LENGTH-1 OF 1 CONSTANT OF 1 OPERAND TO BE ASSEMBLED . 08886000 *. EXIT CONDITIONS . 08888000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08890000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08892000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08894000 , 08896000 ASPLM640- 18 08898000 08900000 **--> CSECT: CZCONS 1-2 PROCESS ZONED CONSTS. . . . . . . . . . . . . 08902000 *. USES DSECTS: AVWXTABL . 08904000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08906000 08908000 **--> ENTRY: CZCON1 1 SCAN, BUT DO NOT ASSEMBLE . . . . . . . . . . 08910000 *. ENTRY CONDITIONS . 08912000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08914000 *. EXIT CONDITIONS . 08916000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08918000 *. RB = 0 CONSTANT WAS LEGAL, NO ERRORS . 08920000 *. RB = NONZERO VALUE FOR ERROR CODE - INVALID CONSTANT - ($ERINVCN) . 08922000 *. RC = NUMBER OF BYTES REQUIRED FOR CONSTANT . 08924000 *. USES MACROS: $RETURN,$SAVE . 08926000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08928000 08930000 **--> ENTRY: CZCON2 1-2 SCAN AND ASSEMBLE Z-TYPE CONSTANT . . . . . . 08932000 *. ENTRY CONDITIONS . 08934000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHAR AFTER PREVIOUS DELIMETER) . 08936000 *. RB = LENGTH-1 OF 1 CONSTANT OF 1 OPERAND TO BE ASSEMBLED . 08938000 *. EXIT CONDITIONS . 08940000 *. RA = SCAN POINTER (ADDRESS OF DELIMITER STOPPING SCAN, OR ERROR) . 08942000 *. RC = ADDRESS OF PROPERLY ASSEMBLED CONSTANT . 08944000 *. USES MACROS: $RETURN,$SAVE,$SETRT . 08946000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08948000 , 08950000 ASPLM640- 19 08952000 08954000 **--> CSECT: ERRORS 1-2 ERROR FLAGGING ROUTINES . . . . . . . . . . . 08956000 *. ENTRY CONDITIONS . 08958000 *. RA = SCAN POINTER TO CAUSE OF ERROR . 08960000 *. RB = ERROR CODE . 08962000 *. EXIT CONDITIONS . 08964000 *. RA,RB ARE UNCHANGED BY ERRTAG OR ERRLAB . 08966000 *. USES DSECTS: AVWXTABL,RSBLOCK . 08968000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08970000 08972000 **--> ENTRY: ERRLAB FLAG ERROR FOR A LABEL. . . . . . . . . . . . 08974000 *. ENTRY CONDITIONS-EXIT CONDITIONS - SEE CSECT ERRORS . 08976000 *. CALLS ERRTAG . 08978000 *. USES MACROS: $CALL,$RETURN,$SAVE . 08980000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08982000 08984000 **--> ENTRY: ERRTAG FLAG ERROR AT SCAN POINTER POSITION . . . . . 08986000 *. ENTRY CONDITIONS-EXIT CONDITIONS - SEE CSECT ERRORS . 08988000 *. USES MACROS: $RETURN,$SAVE,$SCOF . 08990000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 08992000 , 08994000 ASPLM640- 20 08996000 08998000 **--> CSECT: ESDOPRS 1-2 EXTERNAL SYMBOL DICTIONARY&ESDID OPERATIONS . 09000000 *. THIS MODULE HANDLES ALL FLAGGING AND CHECKING OF SECTION . 09002000 *. AND EXTERNAL ATTRIBUTES, INCLUDING FLAGGING SYMBOL TABLE . 09004000 *. ENTRIES AND MANIPULATING LOCATION COUNTERS AND SECTION IDS. . 09006000 *. USES DSECTS: AVWXTABL,SYSMSECT . 09008000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09010000 09012000 **--> ENTRY: ESCSEC DECLARE A CONTROL SECTION OR DUMMY SECTION. . 09014000 *. ENTRY CONDITIONS . 09016000 *. RB = 0 ==> CSECT . 09018000 *. = 2 ==> DSECT . 09020000 *. = 4 ==> START . 09022000 *. RC = VALUE TO BE USED TO SET LOCATION COUNTER(START ONLY,RB=4) . 09024000 *. EXIT CONDITIONS . 09026000 *. RB = 0 ==> NO ERRORS. ^=0 ==> AN ERROR CODE TO BE SET . 09028000 *. RB = NONZERO VALUE - ERROR CODE - ($ERDPCSE) . 09030000 *. AVCESDID IS INCREMENTED BY 1 OR 2 FOR NEXT VALUE OF REQUIRED TYPE. 09032000 *. I.E. CSECTS HAVE EVEN VALUES, DSECTS ODD ONES. . 09034000 *. LOCATION COUNTERS ARE MODIFIED (AVLOCHIH,AVLOCNTR). . 09036000 *. USES MACROS: $ALIGR,$AL2,$GLOC,$RETURN,$SAVE,$SLOC . 09038000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09040000 09042000 **--> ENTRY: ESENX1 ENTRY AND EXTRN STATEMENTS- PASS 1. . . . . . 09044000 *. ENTRY CONDITIONS . 09046000 *. RA = SCAN POINTER . 09048000 *. RB = 0 ==> ENTRY . 09050000 *. = 2 ==> EXTRN . 09052000 *. EXIT CONDITIONS . 09054000 *. RA = SCAN POINTER TO BLANK FOLLOWING OPERAND FIELD, OR ERROR . 09056000 *. RB = 0 ==> NO ERRORS. ^= 0 ==> ERROR CODE TO BE SET . 09058000 *. RB = NONZERO VALUE - ERROR CODE - ($ERINVDM,$ERINVSY) . 09060000 *. ALL LABEL'S IN STMT HAVE SYMSECTS FLAGGED APPROPRIATELY. . 09062000 *. CALLS SYENT1 . 09064000 *. USES MACROS: $CALL,$GTAD,$RETURN,$SAVE . 09066000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09068000 09070000 **--> ENTRY: ESENX2 ENTRY AND EXTRN STATEMENTS - PASS 2 . . . . . 09072000 *. CHECKS ENTRY/EXTRN STATEMENTS FOR CONFLICTS, ERRORS. . 09074000 *. ENTRY AND EXIT CONDITIONS EXACTLY SAME AS ESENX1 . 09076000 *. EXCEPT EXIT VALUE OF RB MEANS NOTHING. . 09078000 *. CALLS ERRTAG,SYENT1 . 09080000 *. USES MACROS: $CALL,$GTAD,$RETURN,$SAVE . 09082000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09084000 09086000 **--> ENTRY: ESINT1 INITIALIZATION . PASS 1 . . . . . . . . . . . 09088000 *. THIS SECTION FOR COMPLETENESS, FUTURE USE. DOES NOTHING 8/70.. 09090000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09092000 , 09094000 ASPLM640- 21 09096000 09098000 **--> CSECT: EVALUT 1-2 GENERAL EXPRESSION EVALUATION ROUTINE . . . . 09100000 *. ENTRY CONDITIONS . 09102000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHARACTER OF EXPRESSION) . 09104000 *. EXIT CONDITIONS . 09106000 *. RA = SCAN POINTER TO DELIMITER STOPPING SCAN, OR ERROR . 09108000 *. RB = 0 ==> EXPRESSION GOOD, = NONZERO VALUE==>ERROR CODE . 09110000 *. RC = VALUE OF EXPRESSION, IF IT WAS GOOD . 09112000 *. RD = 0 ==> EXPRESSION WAS AN ABSOLUTE EXPRESSION . 09114000 *. = ESDID FOR A RELOCATABLE EXPRESSION (1-255) . 09116000 *. RE = LENGTH ATTRIBUTE - 1 OF EXPRESSION. . 09118000 *. CALLS SDBCDX,SYFIND . 09120000 *. USES DSECTS: AVWXTABL,EVCTDSCT,RCODBLK,RSBLOCK,SYMSECT . 09122000 *. USES MACROS: $CALL,$GLOC,$RETURN,$SAVE,EVCG . 09124000 *. . 09126000 *. **NOTE** SEE IBM PLM Y26-3700-0, PP. 45-47. EVALUT SOMEWHAT . 09128000 *. RESEMBLES IEUF7V-EXPRESSION EVALUATION ROUTINE. NOTE EVALUT . 09130000 *. HAS 1 LESS STATE SETTING, SINCE IEUF7V COND=0 IS UNNEEDED. . 09132000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09134000 , 09136000 ASPLM640- 22 09138000 09140000 **--> CSECT: EXECUT 3 INTERPRETER SECTION . . . . . . . . . . . . . 09142000 *. EXECUT PERFORMS ALL 360 INSTRUCTION SIMULATION DURING . 09144000 *. INTERPRETIVE EXECUTION OF THE USER PROGRAM. ALL CONTROL . 09146000 *. VALUES FOR THIS MODULE ARE CONTAINED IN DSECT ECONTROL, WHICH. 09148000 *. IS PASSED TO EXECUT BY THE CALLING PROGRAM. THE INSTRUCTION.. 09150000 *. SET SIMULATED INCLUDES THE FOLLOWING: . 09152000 *. 1. STANDARD INSTRUCTION SET . 09154000 *. 2. DECIMAL INSTRUCTION SET (IF PRESENT ON MACHINE). . 09156000 *. 3. FLOATING POINT INSTRUCTIONS (OPTIONAL). . 09158000 *. 4. X-MACRO PSEUDO INSTRUCTIONS - XDUMP, XLIMD, . 09160000 *. XPNCH, XPRNT, XREAD. . 09162000 *. THE PRIVILEGED OPERATIONS MAY BE DECODED TO THE POINT OF . 09164000 *. BRANCHING TO INDIVIDUAL INSTRUCTION HANDLERS, BUT THEY ARE . 09166000 *. ARE FLAGGED WITH AN 0C2 INTERRUPT AT PRESENT, AND ARE NOT . 09168000 *. INTERPRETED FURTHER. THE CODE PRESENT IS FOR FUTURE USE. . 09170000 *. THE SVC INSTRUCTION IS CURRENTLY FLAGGED WITH AN 0C2 IF. 09172000 *. USED, BUT CODE EXISTS TO HANDLE ALL SVC CALLS IN A TABLE- . 09174000 *. DRIVEN WAY, USING THE @ OF AN SVC CONTROL TABLE PASSED IN THE. 09176000 *. WORD ECSVCADS IN ECONTROL. AS OF 8/2/70, THERE ARE NOT SVC . 09178000 *. ROUTINES, BUT THE CODE EXISTS FOR FUTURE USE. . 09180000 *. GENERAL CODE IS ALSO PROVIDED FOR ANY ADDITIONAL NEW . 09182000 *. INSTRUCTIONS OR I/O SIMULATORS BY THE SECTION EXCALL, WHICH . 09184000 *. ALLOWS CALLS TO EXTERNAL ROUTINES (WHICH WOULD BE USED BY . 09186000 *. ANY SVC CALLS, IF THERE ARE ANY). . 09188000 *. ENTRY CONDITIONS . 09190000 *. R10= @ ECONTROL - EXECUTION CONTROL BLOCK. . 09192000 *. ECONTROL CONTAINS ALL INITIAL VALUES FOR REGS,LIMITS,ETC. . 09194000 *. EXIT CONDITIONS . 09196000 *. ECINTCOD CONTAINS INTERRRUPT CODE, IF PROGRAM INTERRUPT. . 09198000 *. ECFLAG1 CONTAINS SPECIAL COMPLETION CODE, IF ANY. . 09200000 *. ECERRAD = ADDRESS OF AN ERCOMPCD ERROR COMPLETION CODE BLOCK . 09202000 *. ECONTROL CONTAINS ALL OTHER VALUES NEEDED FOR A COMPLETION DUMP.. 09204000 *. USES DSECTS: ECONTROL,ECSTACKD . 09206000 *. USES MACROS: $AL2,$ERCGN,$PNCH,$PRNT,$READ,$RETURN,$SAVE . 09208000 *. USES MACROS: $SPIE, XDECI, XDECO, XSNAP . 09210000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09212000 , 09214000 ASPLM640- 23 09216000 09218000 **--> CSECT: IAMOP1 1 MACHINE OPERATIONS - PASS 1 . . . . . . . . . 09220000 *. THIS IS 1 OF 2 PASS 1,LEVEL 2 PROGRAMS. IT PERFORMS ALL . 09222000 *. PASS 1 MACHINE INSTRUCTION PROCESSING, INCLUDING ALIGNMENT . 09224000 *. OF THE LOCATION COUNTER, SCANNING FOR LITERAL CONSTANTS, . 09226000 *. AND BUILDING AN RCODBLK FOR THE STATEMENT. THE RCODBLK . 09228000 *. INCLUDES THE INSTRUCTION FORMAT TYPE, THE MACHINE CODE FOR . 09230000 *. THE GIVEN INSTRUCTION, MASK (EXTENDED MNEMONICS), FLAGS . 09232000 *. AND ALIGNMENT VALUES NEEDED, THE LENGTH ATTRIBUTE-1 FOR THE . 09234000 *. INSTRUCTION, AND THE ADDRESS OF A LITERAL CONSTANT IN THE . 09236000 *. LITERAL TABLE, IF THERE IS ONE USED. . 09238000 *. ENTRY CONDITIONS . 09240000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHARACTER OF OPERAND FIELD) . 09242000 *. RC = ADDRESS OF OPCODE CONTROL TABLE ENTRY FOR OPCODE USED . 09244000 *. EXIT CONDITIONS . 09246000 *. RB = 0 NO ERRORS WERE ENCOUNTERED . 09248000 *. = >0 ERRORS WERE FOUND IN STATEMENT . 09250000 *. RC = @ RECORD CODE BLOCK(RCODBLK) FOR THE STATEMENT. . 09252000 *. THE RCODBLK HAS ALL VALUES FILLED IN EXCEPT RCLOC(IARCLOC). . 09254000 *. RD = LENGTH OF CODE - TO BE ADDED AFTER ALIGNMENT DONE . 09256000 *. CALLS ERRTAG,LTENT1,SCANEQ . 09258000 *. USES DSECTS: AVWXTABL,OPCODTB . 09260000 *. USES MACROS: $CALL,$CKALN,$GLOC,$LTENT1,$RETURN,$SAVE,$SLOC . 09262000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09264000 , 09266000 ASPLM640- 24 09268000 09270000 **--> CSECT: IBASM1 1 ASSEMBLER INSTRUCTIONS - PASS 1 . . . . . . . 09272000 *. THIS MODULE IS 1 OF THE 2 PASS 1,LEVEL 2 ROUTINES OF THE . 09274000 *. ASSIST ASSEMBLER. IT PERFORMS ALL PROCESSING FOR ASSEMBLER . 09276000 *. INSTRUCTIONS DURING PASS 1, INCLUDING SCANNING, MODIFYING . 09278000 * LOCATION COUNTERS, AND BUILDING AN RCODBLK FOR THE STMT. . 09280000 *. ENTRY CONDITIONS . 09282000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHARACTER OF OPERAND FIELD) . 09284000 *. RC = ADDRESS OF OPCODE CONTROL TABLE ENTRY FOR OPCODE USED . 09286000 *. EXIT CONDITIONS . 09288000 *. RB = 0 NO ERRORS WERE ENCOUNTERED . 09290000 *. = >0 ERRORS WERE FOUND IN STATEMENT . 09292000 *. RC = ADDRESS OF RECORD CODE BLOCK (RCB) . 09294000 *. RD = LENGTH OF CODE - TO BE ADDED AFTER ALIGNMENT DONE . 09296000 *. CALLS CCCON1,CODTL1,ERRLAB,ERRTAG,ESCSEC,ESENX1 . 09298000 *. CALLS EVALUT,LTDMP1,SDBCDX,SDDTRM . 09300000 *. USES DSECTS: AVWXTABL,CNCBLOCK,IBPSECT,OPCODTB,SYMSECT . 09302000 *. USES MACROS: $AL2,$ALIGR,$CALL,$CKALN,$GLOC,$RETURN,$SAVE . 09304000 *. USES MACROS: $SDEF,$SLOC,IBPRTAB . 09306000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09308000 , 09310000 ASPLM640- 25 09312000 09314000 **--> CSECT: ICMOP2 2 MACHINE OPERATIONS - PASS 2 . . . . . . . . . 09316000 *. THIS MODULE IS 1 OF THE 2 PASS 2,LEVEL 2 ROUTINES IN THE . 09318000 *. ASSIST ASSEMBLER. IT PROCESSES ALL MACHINE INSTRUCTIONS IN . 09320000 *. THE SECOND PASS, SCANNING ALL THE OPERAND FIELDS AND CREATING. 09322000 *. THE OBJECT CODE FOR THEM. IT ALSO DOES THE SETUP REQUIREED . 09324000 *. FOR OUTPT2 TO PRODUCE THE PRINTED LISTING. THIS ROUTINE HAS . 09326000 *. MANY SPECIAL-CASE SECTIONS WHICH ARE USED FOR SPEED, AND . 09328000 *. WHICH COULD USE LESS SPACE IF CALLS TO THE GENERAL EXPRESSION. 09330000 *. EVALUATOR EVALUT WERE USED INSTEAD. . 09332000 *. ENTRY CONDITIONS . 09334000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHARACTER OF OPERAND FIELD) . 09336000 *. RC = ADDRESS OF RECORD CODE BLOCK(RCODBLK) FOR STATEMENT . 09338000 *. RE = ADDRESS OF RECORD SOURCE BLOCK(RSBLOCK) FOR STATEMENT . 09340000 *. CALLS BRDISP,ERRTAG,EVALUT,LTGET2,SDBCDX,SDDTRM . 09342000 *. CALLS SDBCDX,SYFIND,OUTPT2,UTPT2 . 09344000 *. USES MACROS: $AL2,$CALL,$GLOC,$RETURN,$SAVE,ICT . 09346000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09348000 , 09350000 ASPLM640- 26 09352000 09354000 **--> CSECT: IDASM2 2 ASSEMBLER INSTRUCTIONS - PASS 2 . . . . . . . 09356000 *. THIS MODULE IS 1 OF THE 2 PASS 2,LEVEL 2 ROUTINES IN THE . 09358000 *. ASSIST ASSEMBLER. IT PERFORMS ALL PROCESSING OF ASSEMBLER . 09360000 *. INSTRUCTIONS IN THE SECOND PASS. IT PRODUCES SOME OBJECT . 09362000 *. CODE, AND DOES SETUP FOR PRINTING. MOST OF THE WORK HAS . 09364000 *. ALREADY BEEN DONE IN THE CORREPONDING PASS 1 MODULE, IBASM1. . 09366000 *. ENTRY CONDITIONS . 09368000 *. RA = SCAN POINTER (ADDRESS OF 1ST CHARACTER OF OPERAND FIELD) . 09370000 *. RC = ADDRESS OF RECORD CODE BLOCK(RCODBLK) FOR STATEMENT . 09372000 *. RE = ADDRESS OF RECORD SOURCE BLOCK(RSBLOCK) FOR STATEMENT . 09374000 *. CALLS BRDROP,BRUSIN,CCCON2,CNDTL2,ERRTAG,ESENX2,EVALUT,LTDMP2. 09376000 *. CALLS OUTPT2,UTPUT2 . 09378000 *. USES DSECTS: AVWXTABL,RCODBLK,RSBLOCK,SYMSECT . 09380000 *. USES MACROS: $AL2,$CALL,$GLOC,$RETURN,$SAVE,$SDEF,$STV . 09382000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09384000 09386000 **--> INSUB: IDEVAL EVALUATE RELOCATABLE EXPRESSION + + + + + + + + 09388000 09390000 **--> INSUB: IDREGET CONVERT REGISTER, CHECK VALIDITY + + + + + + + 09392000 , 09394000 ASPLM640- 27 09396000 09398000 **--> CSECT: INPUT1 1 INPUT AND MANIPULATION OF SOURCE CARDS. . . . 09400000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09402000 09404000 **--> ENTRY: INCARD CALLED TO GET CARD AND CREATE RSBLOCK . . . . 09406000 *. THIS ENTRY READS 1 STATEMENT (1-3 CARDS), AND SETS UP THE . 09408000 *. RECORD BLOCKS RSBLOCK, AND RSCBLK (IF CONTINUATIONS OR . 09410000 *. SEQUENCE NUMBERS ARE USED). IT IS CALLED DURING PASS 1 OF . 09412000 *. THE ASSEMBLY. IF AN ENDFILE INDICATION IS ENCOUNTERED, IT . 09414000 *. CREATES A PSEUDO ENDCARD, SINCE THE MAIN PROGRAM OF PASS 1 . 09416000 *. MOCON1 ONLY STOPS AFTER AN END CARD IS FOUND. AS OF 8/17/70,. 09418000 *. INCARD IS THE ONLY ASSEMBLER ENTRY DOING CARD READING. . 09420000 *. IN SETTING UP THE RSBLOCK, INCARD CONCATENATES THE SECTIONS . 09422000 *. OF A CONTINUED STATEMENT, AND REMOVES BLANKS TO SOME DEGREE . 09424000 *. FROM THE TRAILING EDGE OF THE STATEMENT. IT ALSO INSERTS . 09426000 *. THE 3 CHARACTERS BLANK,APOSTROPHE,BLANK AFTER THE LAST . 09428000 *. NONBLANK CHARACTER IN THE SOURCE STATEMENT. THIS IS CRUCIAL . 09430000 *. TO THE PROPER SCANNING OF THE SOURCE STATEMENT WITHOUT . 09432000 *. REQUIRING LENGTHS TO BE CARRIED FROM ROUTINE TO ROUTINE. . 09434000 *. . 09436000 *. IF THE MACRO PROCESSOR EXISTS (&$MACROS=1), INCARD . 09438000 *. ALSO HANDLES RECOVERY OF GENERATED STMTS (CREATED BY MEXPND .. 09440000 *. IN THE DYNAMIC-HIGH AREA). . 09442000 *. IF A MACRO LIBRARY FACILITY EXISTS (&$MACSLB=1), . 09444000 *. INCARD CAN BE SWITCHED TO READ FROM IT, INSTEAD OF $SORC. . 09446000 *. EXIT CONDITIONS . 09448000 *. RA = SCAN PTR TO ERROR, ONLY IF RB ^= 0. NO MEANING IF RB = 0. . 09450000 *. RB = 0 NO ERRORS FOUND IN STATEMENT BY INCARD . 09452000 *. RB = ERROR CODE (NONZERO) OF ERROR. RA HAS SCAN PTR OF IT. . 09454000 *. AVSOLAST = @ BLANK IMMEDIATELY BEFORE ' IN THE 4-BYTE FIELDWHICH . 09456000 *. INCARD PLACES AFTER THE SOURCE STMT TO STOP SCANNING OVERRUN.. 09458000 *. USES DSECTS: AVWXTABL,RSBLOCK,RSCBLK,RSOURCE . 09460000 *. USES MACROS: $RETURN,$SAVE,$SORC . 09462000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09464000 09466000 **--> INSUB: INCRSMV SAVE CON/SEQNO INTO RSCBLK + + + + + + + + + + 09468000 , 09470000 ASPLM640- 28 09472000 09474000 **--> CSECT: LTOPRS 1-2 ALL LITERAL TABLE OPERATIONS. . . . . . . . . 09476000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09478000 09480000 **--> ENTRY: LTDMP1 1 DUMP LITERALS ON FINDING LTORG AND END. . . . 09482000 *. LTDMP1 IS CALLED BY IBASM1 TO FIND LENGTH OF THE CURRENT . 09484000 *. LITERRAL POOL, AND AVANCE THE CURRENT POOL PTR TO THE NEXT 1.. 09486000 *. EXIT CONDITIONS . 09488000 *. RA = TOTAL LENGTH REQUIRED FOR THE LITERAL BLOCK . 09490000 *. CALLS MOSTOP . 09492000 *. USES DSECTS: AVWXTABL,LTBASETB,LTLENTRY . 09494000 *. USES MACROS: $ALIGN,$ALLOCH,$CALL,$GLOC,$RETURN,$SAVE . 09496000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09498000 09500000 **--> ENTRY: LTDMP2 2 DUMP LITERALS IN PASS 2 . . . . . . . . . . . 09502000 *. LTDMP2 IS CALLED BY IDASM2 DURING PASS 2, WHENEVER A LTORG . 09504000 *. OR END STMT IS FOUND, TO PRODUCE THE OBJECT CODE AND LISTING . 09506000 *. OF ANY LITERALS IN THE CURRENT LITERAL POOL. THE CURRENT . 09508000 *. POOL BASE POINTER IS ADVANCED TO THE NEXT LTBASETB. . 09510000 *. CALLS CNDTL2 . 09512000 *. USES DSECTS: AVWXTABL,LTBASETB,LTLENTRY . 09514000 *. USES MACROS: $CALL,$GLOC,$RETURN,$SAVE,$SLOC . 09516000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09518000 09520000 **--> ENTRY: LTEND1 1 CLEANUP AFTER PHASE 1 PREPARE FOR PHASE 2 . . 09522000 *. THIS ENTRY SETS UP FOR ASSEMBLER PASS 2 LITERAL PROCESSING. . 09524000 *. USES MACROS: $RETURN,$SAVE . 09526000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09528000 09530000 **--> ENTRY: LTENT1 1 ENTER A LITERAL INTO THE TABLE. . . . . . . . 09532000 *. THIS ENTRY IS CALLED DURING PASS 1 TO SCAN A LITERAL BY . 09534000 *. IAMOP1. THE LITERAL IS SCANNED BY CODTL1, AND IT IS ENTERED . 09536000 *. IF IT IS NOT ALREADY PRESENT. NOTE THAT NO DUPLICATES . 09538000 *. ARE EVER KEPT IN THE SAME POOL, EVEN FOR A-TYPE CONSTANTS . 09540000 *. WITH LOCATION COUNTER REFERENCES. . 09542000 *. ENTRY CONDITIONS . 09544000 *. RA = SCAN POINTER (ADDRESS OF = IN LITERAL) . 09546000 *. EXIT CONDITIONS . 09548000 *. RA = SCAN POINTER (ADDRESS OF ERROR OR DELIMETER) . 09550000 *. RB = 0 IF LITERAL LEGAL, ERROR CODE OTHER WISE . 09552000 *. RC = ADDRESS OF LITERAL TABLE ENTRY . 09554000 *. CALLS CODTL1,MOSTOP . 09556000 *. USES DSECTS: AVWXTABL,CNCBLOCK,LTBASETB,LTLENTRY,RSBLOCK . 09558000 *. USES MACROS: $ALLOCH,$CALL,$RETURN,$SAVE,$SCPT . 09560000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09562000 09564000 **--> ENTRY: LTGET2 2 GET ADDRESS OF LITERAL IN ASSEMBLY. . . . . . 09566000 *. LTGET2 IS CALLED BY ICMOP2 EACH TIME A LITERAL IS FOUND IN . 09568000 *. SCANNING MACHINE INST OPERANDS DURING PASS 2. IT RETURNS THE . 09570000 *. ATTRIBUTES OF THE LITERAL, INCLUDING THE USER PROGRAM @ FOR . 09572000 *. THE LITERAL, THE SECTION ID OF THE LITERAL, AND THE LENGTH . 09574000 *. ATTRIBUTE OF THE LITERAL. ICMOP2 SUPPLIES A POINTER TO THE . 09576000 *. LTLENTRY OF THE LITERAL, WHICH HAD BEEN SAVED IN THE . 09578000 *. STATEMENT'S RCODBLK . . 09580000 *. ENTRY CONDITIONS . 09582000 *. RA = SCAN POINTER TO 1ST CHAR OF LITERAL = . 09584000 *. RC = @ LITERAL TABLE ENTRY IN LITERAL TABLE(WAS SAVED IN RCB) . 09586000 *. EXIT CONDITIONS . 09588000 , 09590000 ASPLM640- 29 09592000 09594000 *. RA = SCAN POINTER TO CHARACTER AFTER LITERAL . 09596000 *. RB = ESDID OF CSECT IN WHICH LITERAL EXISTS . 09598000 *. RC = ADDRESS OF LITERAL (PROGRAM ADDRESS-FOR LISTING,ETC) . 09600000 *. RD = IMPLIED LENGTH-1 OF THE LITERAL(LOW ORDER BYTE, OTHERS INDTR). 09602000 *. USES DSECTS: AVWXTABL,LTBASETB,LTLENTRY . 09604000 *. USES MACROS: $RETURN,$SAVE . 09606000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09608000 09610000 **--> ENTRY: LTINT1 1 INITIALIZE LITERAL TABLE IF NEEDED. . . . . . 09612000 *. ALLOCATES AND ZEROS 1ST LITERAL POOL BASE TABLE. INITS 1ST AND * 09614000 *. CURRENT BLOCK POINTERS TO 1ST LTBASETB. * 09616000 *. CALLS MOSTOP . 09618000 *. USES DSECTS: AVWXTABL,LTBASETB . 09620000 *. USES MACROS: $ALLOCH,$RETURN,$SAVE . 09622000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09624000 , 09626000 ASPLM640- 30 09628000 09630000 **--> CSECT: MACFND THIS ROUTINE IS GENERAL SEARCH PROCEDURE * 09632000 *. WHICH CAN SCAN THE MACRO LIBRARY, GLOBAL AND LOCAL * 09634000 *. DICTIONARIES AND THE SYMBOLIC PARAMETER LIST. THE CALLING * 09636000 *. ROUTINE DETERMINES WHICH LIBRARY BY PLACING THE APPROPRIATE * 09638000 *. POINTER IN RC. * 09640000 *. * 09642000 *. ENTRY CONDITIONS * 09644000 *. RC = @ OF FIRST ENTRY OF LIST TO BE SEARCHED * 09646000 *. * 09648000 *. EXIT CONDITIONS * 09650000 *. RB = 0 IF ENTRY IS FOUND * 09652000 *. = $ERUNDEF IF ENTRY IS NOT FOUND * 09654000 *. RC = @ OF ENTRY IF FOUND ELSE @ OF FINAL ENTRY IF NOT FOUND * 09656000 *. USES MACROS: $SAVE, $RETURN * 09658000 *. USES DSECTS: MACLIB, AVWXTABL * 09660000 *. * 09662000 *.REGISTER USAGE A 09664000 *.RC-MACLIB BASE REGISTER, LIST TO BE SEARCHED A 09666000 *.RAT- MAIN TABLE DSECT USING A 09668000 *.RB-RETURN REGISTER A 09670000 *. A 09672000 *. NAMES=MACFN___ A 09674000 *. A 09676000 *. * 09678000 *.********************************************************************* 09680000 , 09682000 ASPLM640- 31 09684000 09686000 **--> CSECT: MACINT THIS ROUTINE IS CALLED IN INITIALIZATION * 09688000 *. PHASE OF ASSIST. IT PERFORMS CERTAIN REQUIRED STORAGE * 09690000 *. ALLOCATION AND SETS POINTERS AVGEN1CD AND AVGEN2CD. * 09692000 *. OVERFLOW MESSAGE FOR GENERAL USE IS ALSO CREATED. * 09694000 *. G.M.CAMPBELL - SUMMER - 1972 * 09696000 *. * 09698000 *. USES MACROS: $ALLOCL, $SAVE, $RETURN, $CALL * 09700000 *. USES DSECTS: AVWXTABL * 09702000 *. * 09704000 *. REGISTER USAGE: S 09706000 *. WORK REGS: RA,RB S 09708000 *. * 09710000 *.********************************************************************* 09712000 09714000 **--> INSUB: MCINITOV OVERFLOW ROUTINE + + + + + + + + + + + + +S 09716000 , 09718000 ASPLM640- 32 09720000 09722000 **--> CSECT: MACLEX THIS PROCEDURE SCANS A MCRO STATEMENT AND * 09724000 *. CONVERTS IT INTO BSU'S. ALSO CHECKS FOR SUCH ERRORS AS TWO * 09726000 *. TERMS OR TWO OPERATORS IN A ROW. WHERE NECESSARY IT INSERTS* 09728000 *. CATENATION OPERATORS WHERE CATENATION IS IMPLICIT * 09730000 *. * 09732000 *. ENTRY CONDITIONS * 09734000 *. RA = @ OF FIRST CHARACTER OF EXPRESSION * 09736000 *. RC = @ ON NEXT AVAILABLE BSU IN WORKSPACE * 09738000 *. * 09740000 *. EXIT CONDITIONS * 09742000 *. RA = @ OF DELIM PAST EXPRESSION IF NO ERROR * 09744000 *. = @ OF ERROR IF ERROR PRESENT * 09746000 *. RB = 0 IF OKAY * 09748000 *. = $ERMSSGE IF ERROR * 09750000 *. RC = @ OF NEXT AVAILABLE SPACE FOR BSU * 09752000 *. * 09754000 *. CALLS MCGTST,MCDTRM,SDBCDX,MCSYSR,MCATRM,MCGTST * 09756000 *. USES DSECTS: AVWXTABL,MCBSU,MCPARENT,MCGLBDCT,MCLCLDPV * 09758000 *. USES MACROS: $SAVE,$RETURN,$ALLOCL,$SCOF,$SCPT,$CALL,$SETRT * 09760000 *. * 09762000 *. REGISTER USAGE A 09764000 *. WORK REGS: R0,R1,R2,RY,RZ,RB,RC,RE A 09766000 *. USED FOR TRT: R1,R2 A 09768000 *. RW-BASE REG FOR BSU A 09770000 *. R13 BASE REG FOR THIS CSECT A 09772000 *. RAT- BASE REGISTER FOR MAIN TABLE A 09774000 *. RX-UNUSED A 09776000 *. RD-? A 09778000 *. A 09780000 *** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 09782000 09784000 **--> INSUB: MCLXBMP BUMP POINTER + + + + + + + + + + + + + + +S 09786000 09788000 **--> INSUB: MCLXCATI ROUTINE TO INSERT CONCATINATION + + + + + + +A 09790000 , 09792000 ASPLM640- 33 09794000 09796000 **--> CSECT: MACRO1 CALLED BY MAIN CONTROL WHEN MACRO OPCODE * 09798000 *. ENCOUNTERED. AT PRESENT (DEC 31, 1971) ONLY MACRO * 09800000 *. DEFINITIONS ARE ALLOWED, NO CONDITIONAL ASSEMBLY. MACRO1 * 09802000 *. CREATES ENTRY IN MACLIB FOR FUTURE EXPANSION BY MEXPND * 09804000 *. ENTRY CONDITIONS * 09806000 *. RA = SCAN POINTER @ OF OPERAND * 09808000 *. RC = @ OPCODTB ENTRY FOR OPERATION * 09810000 *. * 09812000 *. CALLS MACSCN,OUTPT2,MACFND,ERRTAG,ERRLAB,MCVSCN,MCSCOP, * 09814000 *. MCBODY * 09816000 *. USES MACROS: $SAVE,$RETURN,$CALL,$ALLOCL * 09818000 *. USES DSECTS: RSBLOCK,OPCODTB,AVWXTABL,MACLIB,MCPARENT * 09820000 *. * 09822000 *. REGISTER USAGE: S 09824000 *. WORK REGS: R0,R1,R2,RA,RB,RD,RE S 09826000 *. BASE REGS: RAT,RW,RX,RY,R13,RC S 09828000 *. UNUSED: RZ S 09830000 *. S 09832000 *.********************************************************************* 09834000 09836000 **--> INSUB: MACRORD MACRO READER + + + + + + + + + + + + + + +S 09838000 , 09840000 ASPLM640- 34 09842000 09844000 **--> CSECT: MACSCN SCANS MACRO INSTRUCTION STATEMENT. IDENTIFIES * 09846000 *. LABEL, OPCODE, OPERAND AND COMMENT (IF ANY) FIELDS. * 09848000 *. LOCATION OF EACH FIELD STORED IN AVMFLD_. LENGTH OF EACH * 09850000 *. FIELD STORED IN AVMFLDL_. TYPE OF EACH FIELD PLACED IN * 09852000 *. AVMFLDT_. FIELDS ARE SET TO ZERO IF NOT PRESENT. * 09854000 *. AVMFLDT1 CONTAINS '&' IF VARIABLE SYMBOL AND '.' IF SEQUENCE* 09856000 *. SYMBOL ELSE ZERO. AVMFLDT2 CONTAINS 'I' IF OPCODE IS * 09858000 *. SUSPECTED MACRO INSTRUCTION, 'M' IF MACRO OPCODE (AIF, * 09860000 *. AGO, SETA, ETC), 'O' IF OPCODE IS REGULAR ASSEMBLER OR * 09862000 *. MACHINE INSTRUCION AND X'00' IF ANYTHING ELSE. * 09864000 *. SCANS NON STND CONTINUATION FILDS AND PLACES VALUES IN * 09866000 *. AVMFLD5 THRU AVMFLD8 * 09868000 *. * 09870000 *. ENTRY CONDITIONS * 09872000 *. RA = @ OF FIRST CAHARACTER OF STATEMENT * 09874000 *. EXIT CONDITIONS * 09876000 *. RA = SAME AS ENTRY CONDITIONS * 09878000 *. RB = 4 IF COMMENT STATEMENT, 8 IF MACRO COMMENT, ELSE ZERO * 09880000 *. RC = @ OF OPCODTB ENTRY IF OPCODE = M OR O * 09882000 *. * 09884000 *. USES MACROS: $CALL, $SAVE, $RETURN, $SETRT * 09886000 *. USES DSECTS: AVWXTABL, OPCODTB * 09888000 *. CALLS ERRTAG,MCATRM,OPFIND S 09890000 *. NAMES: MAC----- OR MC------ S 09892000 *. BASE REGS: R13,RAT,RX,RC S* 09894000 *. WORK REGS: R1,R2,RA,RB,RW,RZ S* 09896000 *.********************************************************************* 09898000 09900000 **--> INSUB: MACSCBLN SCAN FOR NON-BLANK CHAR + + + + + + + + +S 09902000 09904000 **--> INSUB: MACSCHEK CHECK FOR NON-STD COND CARD + + + + + + +S 09906000 09908000 **--> INSUB: MACSCMMT SCAN COMMENT FIELD + + + + + + + + + + + +S 09910000 09912000 **--> INSUB: MACSCOPR FIND AND SCAN OPERAND + + + + + + + + + ++S 09914000 09916000 **--> INSUB: MACSCSTR SCAN ARBITRARY STRING + + + + + + + + + +S 09918000 , 09920000 ASPLM641- 35 09922000 09924000 **--> CSECT: MCATRM THIS ROUTINE SCANS A TERM AND DETERMINES * 09926000 *. WHETHER IT IS A VALID ATTRIBUTE, IE I', K', L', N', S' OR T'* 09928000 *. THE LENGTH (L'), SCALE (S') AND INTEGER (I') ATTRIBUTES ARE * 09930000 *. NOT IMPLEMENTED AND ARE SO FLAGGED. * 09932000 *. * 09934000 *. ENTRY CONDITIONS * 09936000 *. RA = @ OF FIRST CHAR OF TERM * 09938000 *. * 09940000 *. EXIT CONDITIONS * 09942000 *. RA = @ OF DELIM PAST QUOTE IF VALID ATTRIBUTE ELSE SAME AS * 09944000 *. ENTRY. * 09946000 *. RB = 0 IF ATTRIBUTE * 09948000 *. = -4 IF NOT ATTRIBUTE * 09950000 *. = $ERMESSAGE IF NOT IMPLEMENTED * 09952000 *. RC = TYPE OF ATTRIBUTE * 09954000 *. * 09956000 *. USES MACROS: $SAVE, $RETURN * 09958000 *. USES DSECTS: AVWXTABL * 09960000 *. * 09962000 *.********************************************************************* 09964000 , 09966000 ASPLM641- 36 09968000 09970000 **--> CSECT: MCBODY PROCESSES THE BODY OF MACRO DEFINITION. * 09972000 *. CALLED FORM MACRO1 AFTRR PROTOTYPE STATEMENT PROCESSED. * 09974000 *. INITIALIZES LOCAL DICTIONARY FOR CURRENT DEFINITION. * 09976000 *. PROCESSES EACH STATEMENT TILL MEND STATEMENT ENCOUNTERED. * 09978000 *. TERMINATES AND RETURNS AT THAT POINT * 09980000 *. * 09982000 *. IN OPEN-CODE MODE, ($MCOCFL1 ON IN MCLBFLG2), * 09984000 *. MCBODY ONLY PROCESSES STMT IN RSBLOCK * 09986000 *. IF AVPRSAVE IS SET IN AVPRINT1, IT CALL MXMVSR * 09988000 *. TO SAVE STMT IN HIGH AREA, ELSE IT PRINTS IT IMMEDIATELY * 09990000 *. ENTRY CONDITIONS * 09992000 *. RC = @ OF MACLIB ENTRY OF CURRENT MACRO DEFINITION * 09994000 *. * 09996000 *. USES MACROS: $SAVE,$RETURN,$CALL,$ALLOCL,$ALLOCH,$SCOF, * 09998000 *. $SETRT * 10000000 *. USES DSECTS: AVWXTABL,MACLIB,MCLCLDPV,OPCODTB,RSBLOCK,MCBSU,* 10002000 *. MCSEQ,MCGLBDCT,MCOPQUAD * 10004000 *. CALLS INCARD,ERRTAG,MACSCN,ERRLAB,MCVSCN,MACFND,SDDTRM, * 10006000 *. MCSYSR,MACLEX,MCGTST,OUTPT2,MCGNCD * 10008000 *. * 10010000 *. REGISTER USAGE ************************* A 10012000 *.R13- BASE REGISTER AND SAVEAREA POINTER A 10014000 *.RAT-MAIN TABLE DSECT USING A 10016000 *.RX- MACLIB DSECT USING A 10018000 *.RY- LOCAL DICTIONARY DSECT UING A 10020000 *.RZ-OPCODE TABLE DSECT USING A 10022000 *.RB,RE,RA- WORK REGISTERS A 10024000 *.R1,R2 USED IN TRT'S A 10026000 *.RET- RETURN REGISTER USED FOR INSUBS A 10028000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10030000 10032000 **--> INSUB: MCBDBMP BUMPS BSU POINTER + + + + + + + + + + + + +A 10034000 10036000 **--> INSUB: MCBDCATI CREATE CONCOT BSU+ + + + + + + + + + + + + + +A 10038000 10040000 **--> INSUB: MCBDFLD CREATES A PRINT BSU+ + + + + + + + + + + + + + +A 10042000 10044000 **--> INSUB: MCBDPR PRINT STATEMENTS + + + + + + + + + + + + + + +A 10046000 10048000 **--> INSUB: MCBDSCAN SCANS STATEMENTS IN A MOCOR DEFINITION + + + + +A 10050000 10052000 **--> INSUB: MCBDSCFN LOOKS FOR FIELDS + + + + + + + + + + + + + +A 10054000 10056000 **--> INSUB: MCB01 CHECK LCLX,BLX FOR LABEL, OPCODE + + + + + + J 10058000 10060000 **--> INSUB: MCB02 OBTAIN DIMENSION OF GBLX OR LCLX STMT + + + + J 10062000 10064000 **--> INSUB: MCB03: CHECK DIMENSION SIZE FOR GBLX,LCLX+ + + + + + + + J 10066000 , 10068000 ASPLM641- 37 10070000 10072000 **--> CSECT: MCDTRM DECIMAL CONSTANT CONVERSION. MCDTRM DECIDES * 10074000 *. SCAN POINTER IS POINTING AT LEGAL DECIAMAL TERM AND IF SO, * 10076000 *. CONVERTS TO BINARY FORM. HANDLES VALUES UP TO 2**31-1 * 10078000 *. * 10080000 *. ENTRY CONDITIONS * 10082000 *. RA = @ OF FIRST CHAR OF TERM * 10084000 *. * 10086000 *. EXIT CONDITIONS * 10088000 *. RA = @ OF DELIMITER BEYOND CONSTANT * 10090000 *. = SAME AS ENTRY IF ERROR * 10092000 *. RB = 0 IF CONSTANT WAS LEGAL * 10094000 *. = $ER MSSGE IF ILLEGAL TERM * 10096000 *. RC = VALUE OF CONSTANT, 0 TO 2**31-1 * 10098000 *. * 10100000 *. USES DSECTS: AVWXTABL * 10102000 *. USES MACROS: $SAVE, $RETURN * 10104000 *.REGISTER USAGE A 10106000 *.R12 -BASE REG A 10108000 *.RAT-MAIN TABLE DSECT USING A 10110000 *.RD- SCAN POINTER A 10112000 *. A 10114000 *.NAMES=MCD_____ A 10116000 *. A 10118000 *** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10120000 , 10122000 ASPLM641- 38 10124000 10126000 **--> CSECT: MCGNCD CONVERTS STRING OF BSU'S TO INTERNAL CODE * 10128000 *. IN ONE-OP FORM. ONE-OPS ARE QUADRUPLES WITH OPRTR, TWO * 10130000 *. OPRNDS AND RESULT FIELD. ADDRESS OF CURRENT GENERATED INST* 10132000 *. IS IN AVMCRINS. GEERATED CODE IS POINTED TO BY MCCODLNK * 10134000 *. FIELD IN MACLIB. BSU STRING LOCATED IN AVMWRK1 * 10136000 *. * 10138000 *. ENTRY CONDITIONS * 10140000 *. RC = @ OF CURRENT MACLIB ENTRY * 10142000 *. * 10144000 *. USES MACROS: $CALL,$SAVE,$RETURN,$SCOF,$SCPT,$ALLOCL,$ALLOCH* 10146000 *. USES DSECTS: AVWXTABL,MCBSU,MCBSTRMS,MCBOPRST,MCOPQUAD, * 10148000 *. MACLIB,MCSEQ * 10150000 *. CALLS MACFND, ERRTAG, * 10152000 *. * 10154000 *. REGISTER USAGE: S 10156000 *. WORK REGS: R0,R1,RA,RB,RC,RE S 10158000 *. TRT BYTE REG: R2 S 10160000 *. RW - BASE REG FOR BSU S 10162000 *. RX - BASE REG FOR OPRND STACK S 10164000 *. RY - BASE REG FOR OPRTR STACK S 10166000 *. RZ - BASE REG FOR ONE-OP ENTRY S 10168000 *. RAT - BASE REG FOR MAIN TABLE S 10170000 *. R1 - BASE REG FOR MACLIB S 10172000 *. RD - UNUSED S 10174000 *. S 10176000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10178000 10180000 **--> INSUB: MCGNALLO ALLOCATE LOW CORE + + + + + + + + + + + +S 10182000 10184000 **--> INSUB: MCMVTRMS CREATE ONE BINARY ONE-OP + + + + + + + + +S 10186000 10188000 **--> INSUB: MCSEQSCN ENTER SEQ SYMBOL IN DICT + + + + + + + + +S 10190000 , 10192000 ASPLM641- 39 10194000 10196000 **--> CSECT: MCGTST THIS ROUTINE TAKES A STRING AS DELINEATED BY * 10198000 *. BEGINNING AND END POINTERS, OBTAINS STORAGE DYNAMICALLY AND * 10200000 *. MOVES THE STING. IF INSIDE QUOTES DOUBLE QUOTES WILL BE * 10202000 *. CRUNCHED TO ONE QUOTE * 10204000 *. * 10206000 *. ENTRY CONDITIONS * 10208000 *. RA = @ OF FIRST CAHRACTER OF STRING * 10210000 *. RB = @ OF DELIMITER PAST STRING * 10212000 *. * 10214000 *. EXIT CONDITIONS * 10216000 *. RA = @ OF DELIMITER PAST STRING * 10218000 *. RC = @ OF STRING IN NEW STORAGE * 10220000 *. RD = LENGTH OF STRING * 10222000 *. * 10224000 *. USES MACROS: $SAVE, $RETURN, $ALLOCL * 10226000 *. USES DSECTS: AVWXTABL * 10228000 *. * 10230000 *. REGISTER USAGE A 10232000 *. RAT-MAIN TABLE USING A 10234000 *. RA,RB,RC,RD-AS IN ENTR/EXIT CONDITIONS A 10236000 *. RE,R1,R3-WORK REGISTERS A 10238000 *** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10240000 , 10242000 ASPLM641- 40 10244000 10246000 **--> CSECT: MCSCOP THIS ROUTINE SCANS A MACRO INSTRUCTION * 10248000 *. OPERAND. THE OPERAND MUST CONFORM TO A STANDARD VALUE AS * 10250000 *. LAID DOWN IN SECTION 8 OF IBM GC28-2514 * 10252000 *. * 10254000 *. ENTRY CONDITIONS * 10256000 *. AVMBYTE1: FLAG $MSBLIST EXPECTED SET IF ALREADY INSIDE SUBLISS 10258000 *. * 10260000 *. EXIT CONDITIONS * 10262000 *. RA = DELIM PAST OPRND IF STND VALUE ELSE POINTS AT ERROR * 10264000 *. RB = 0 IF STANDARD VALUE ELSE $ER MESSAGE * 10266000 *. RC = LENGTH OF OPERAND IF OKAY * 10268000 *. RD = TYPE OF OPERAND. IN THIS CASE TYPE WILL BE ONE OF * 10270000 *. 'O' (NULL), 'N' (SELF-DEFINING TERM) OR 'U' (ALL OTHERS) * 10272000 *. CAN BE 'S' AFTER SCANNING (1ST SUBPOPERAND S 10274000 *. RE = VALUE OF SELF DEFINING TERM * 10276000 *. AVMBYTE1: FLAG $MINQUOT HAS INDETERMINATE VALUE. S 10278000 *. USES MACROS: $SAVE, $RETURN, $SETRT, $CALL * 10280000 *. USES DSECTS: AVWXTABL * 10282000 *. CALLS SDBCDX * 10284000 *. * 10286000 *.********************************************************************* 10288000 10290000 **--> INSUB: MCSET# MODIFY TRT TABLE AWTZTAB + + + + + + + + + + S 10292000 , 10294000 ASPLM641- 41 10296000 10298000 **--> CSECT: MCSYSR SCANS SUSPECTED VARIABLE SYMBOL FOR LEGALITY. * 10300000 *. IF VARIABLE SYMBOL THEN PLACES IN AVMSYMBL. THEN SEARCHES * 10302000 *. GLOBAL, LOCAL AND SYMBOLIC PARAMETER DICTIONARIES FOR SYMBOL* 10304000 *. * 10306000 *. ENTRY CONDITIONS * 10308000 *. RA = @ OF FIRST CHARACTER OF SYMBOL * 10310000 *. * 10312000 *. EXIT CONDITIONS * 10314000 *. RA = @ OF DELIMITER PAST VARIABLE SYMBOL IF OKAY * 10316000 *. = SAME AS ENTRY IF NOT VARIABLE SYMBOL OR IF NOT FOUND * 10318000 *. RB = $ERUNDEF IF SYMBOL IS NOT FOUND * 10320000 *. RB = 0 IF SYMBOL IS FOUND IN ONE OF THE DICTIONARIES * 10322000 *. = SET TO -4 IF RA DOES NOT POINT AT VARIABLE SYMBOL * 10324000 *. RC = POINTER TO SYMBOL ENTRY IF FOUND * 10326000 *. RD = $GLOBAL IF SYMBOL PRESENT IN GLOBAL DICTIONARY * 10328000 *. = $LOCAL IF SYMBOL FOUND IN LOCAL DICTIONARY * 10330000 *. = $SYMPAR IF SYMBOL IS SYMBOLIC PARAMETER * 10332000 *. = $SYSTEM IF SYMBOL IS SYTEM VARIABLE * 10334000 *. * 10336000 *. USES MACROS: $CALL, $SAVE, $RETURN * 10338000 *. USES DSECTS: MCGLBDCT, MACLIB,AVWXTABL * 10340000 *. CALLS MCVSCN, MACFND * 10342000 *. A 10344000 *.REGISTER USAGE *************** A 10346000 *.R13 -BASE REGISTER AND SAVEAREA POINTER A 10348000 *.RC- BASE REGISTER FOR GLOBAL DSECT A 10350000 *.RX- BASE REGISER FOR MACRO DICTIONARY A 10352000 *. A 10354000 *.NAMES=MCSY____ A 10356000 *. A 10358000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10360000 , 10362000 ASPLM641- 42 10364000 10366000 **--> CSECT: MCVSCN THIS ROUTINE SCANS A STRING AND CHECKS * 10368000 *. FOR A LEGAL VARIABLE SYMBOL. IF OKAY, SYMBOL IS MOVED INTO * 10370000 *. AVMSYMBL IN AVWXTABL WHERE IT WILL BE UTILIZED IN SEARCHES. * 10372000 *. * 10374000 *. ENTRY CONDITIONS * 10376000 *. RA = @ OF FIRST CHARACTER OF STRING * 10378000 *. * 10380000 *. EXIT CONDITIONS * 10382000 *. RA = @ OF DELIMITER PAST SYMBOL IF LEGAL * 10384000 *. = SAME AS ENTRY IF NOT VARIABLE SYMBOL * 10386000 *. RB = 0 IF OKAY, <0 IF NOT VARIABLE SYMBOL, * 10388000 *. = $ER MESSAGE IF ILLEGAL SYMBOL * 10390000 *. USES MACROS: $SAVE, $RETURN * 10392000 *. USES DSECTS: AVWXTABL * 10394000 *. * 10396000 *.REGISTER USAGE A 10398000 *.RAT- MAIN TABLE DSECT USING A 10400000 *.R1,R2 USED IN TRT'S A 10402000 *.RB- SET AS IN EXIT CONDITIONS ABOVE A 10404000 *. A 10406000 *.NAMES=MCVS____ A 10408000 *. A 10410000 *.********************************************************************* 10412000 , 10414000 ASPLM641- 43 10416000 10418000 **--> CSECT: MEXPND EXPANDS MACRO DEFINITION. RECURSIVE. ACQUIRES * 10420000 *. STORAGE FROM LOW DYNAMIC AREA FOR STANDARD SAVE AREA AND * 10422000 *. LOCAL VARIABLES. RELEASES STORAGE ON EXIT. PUTS GENERATED * 10424000 *. STATEMENTS IN HIGH STORAGE. AVGEN1CD POINTS TO FIRST BYTE * 10426000 *. AFTER FIRST STATEMENT. AVGEN1CD POINTS TO 1ST BYTE OF LAST * 10428000 *. STATEMENT GENERATED * 10430000 *. * 10432000 *. USES MACROS: $MALLOCL, $MALLOCH, $CALL, $SAVE, $RETURN, * 10434000 *. $AL2 * 10436000 *. USES DSECTS: MACLIB, MCGLBDCT, MCOPQUAD, MCPAROPR, MCPARSUB * 10438000 *. AVWXTABL, MXPNTSAV, MCPARENT, RSBLOCK * 10440000 *. CALLS ERRTAG, MCSCOP,MXMVSR,MACSCN,MACFND,MXMVSR,MXERRM, * 10442000 *. ERRTAG,MEXPND,DECTRM * 10444000 *. * 10446000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10448000 10450000 **--> INSUB: MXPNOSYM DETERMINS IF STRING IS ORDINARY + + + + +S 10452000 10454000 **--> INSUB: MXPNRDR + + + + + + + + + + + + + + + + + + + + + + + +S 10456000 10458000 **--> INSUB: MXPNSBSC + + + + + + + + + + + + + + + + + + + + + + + +S 10460000 10462000 **--> INSUB: MXPOPKPR + + + + + + + + + + + + + + + + + + + + + + + +S 10464000 10466000 **--> INSUB: MXPOPSCN + + + + + + + + + + + + + + + + + + + + + + + +S 10468000 , 10470000 ASPLM641- 44 10472000 10474000 **--> CSECT: MOCON1 1 MAIN CONTROL - ASSEMBLER PASS 1 . . . . . . . 10476000 *. MOCON1 PROVIDES OVERALL CONTROL FOR PASS 1 OF THE ASSIST . 10478000 *. ASSEMBLER, AND SUPERVISES OR PERFORMS THE FOLLOWING: . 10480000 *. 1. READING INPUT CARDS, CREATING RECORD BLOCKS (INCARD). . 10482000 *. 2. SCANNING LABELS, ENTERING THEM IN SYMBOL TABLE(SYENT1). . 10484000 *. 3. SCANNING CARD FOR THE OPCODE, IF ANY. . 10486000 *. 4. FINDING OPCODE IN OPCODE TABLE (OPFIND). . 10488000 *. 5. SCANNING FOR OPERAND FIELD, SAVING SCAN POINTER. . 10490000 *. 6. 2ND LEVEL INSTRUCTION PROCESSING (IAMOP1,IBASM1). . 10492000 *. 7. DEFINING ATTRIBUTES, VALUE OF LABEL, IF REQUIRED. . 10494000 *. 8. UPDATING LOCATION COUNTER TO NEXT LOCATION. . 10496000 *. 9. STORING RECORD BLOCKS FOR STMT (UTPUT1). . 10498000 *. . 10500000 *. NOTE: PRINT CONTROL/COMMENTS STMTS ARE PROCESSED COMPLETELY . 10502000 *. DURING PASS 1 AND NOT SAVED, IF POSSIBLE. . 10504000 *. . 10506000 *. CALLS ERRLAB,ERRTAG,IAMOP1,IBASM1,INCARD,OPFIND,SYENT1,UTPUT1. 10508000 *. CALLS OUTPT2 . 10510000 *. USES DSECTS: AVWXTABL,OPCODTB,RCODBLK,RSBLOCK . 10512000 *. USES MACROS: $CALL,$GLOC,$GTAD,$PRNT,$RETURN,$SAVE . 10514000 *. USES MACROS: $SCOF,$SDEF,$SLOC . 10516000 *. CALLS ERRLAB,ERRTAG,IAMOP1,IBASM1,INCARD,OPFIND,SYENT1 . 10518000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10520000 10522000 **--> INSUB: MOOPAMPC CHECK STATEMENT FOR SET VARIABLE SUBSTITUTION *J 10524000 10526000 **--> ENTRY: MOSTOP CALLED IF DISASTROUS ERROR OCCURS IN PASS 1 . . 10528000 *. RESTORES CONDITIONS FOR MOCON1, NOTE OVERFLOW OCCURRENCE. . 10530000 *. ENDS EXECUTION FOR PASS 1, FLAGGING PROGRAM NONEXECUTABLE. . 10532000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10534000 , 10536000 ASPLM641- 45 10538000 10540000 **--> CSECT: MPCON0 0 MAIN PROGRAM CONTROL-INIT,SET UP TABLES,ETC.. 10542000 *. MPCON0 INITIALIZES AVWXTABL DSECT VALUES FOR WHOLE ASSEMBLY, . 10544000 *. SETS A $SPIE TO INTERCEPT SOME TYPES OF INTERRUPTS, SETS THE . 10546000 *. PROGRAM AMSK TO ONLY HAVE FIXED-OVERFLOW INTRPTS, AND CALLS . 10548000 *. ALL THE SUBROUTINES REQUIRED FOR AN ASSEMBLY IN A TABLE- . 10550000 *. DRIVEN MANNER, USING A LIST OF POINTERS TO ADDRESS CONSTNATS.. 10552000 *. AFTER THE ASSEMBLY IS COMPLETED, IT PRINTS VARIOUS STATISTICS. 10554000 *. AND THEN RETURNS CONTROL TO THE ASSIST MONITOR. NOTE THAT . 10556000 *. MPCON0 IS THE ONLY CSECT IN THE ASSEMBLER WHICH ACTUALLY . 10558000 *. REFERS TO AJOBCON, ALTHOUGH OTHERS USE EQU FLAGS FROM IT. . 10560000 *. ENTRY CONDITIONS . 10562000 * R12(RAT)= @ VWXTABL CSECT, INITIALIZED BY ASSIST CONTROL PROG. . 10564000 * AVAJOBPT,AVECONPT HAVE BEEN INITIALIZED IF NEEDED BY ASSIST. . 10566000 *. CALLS ESINT1,LTINT1,OPINIT,SYINT1,UTINT1,OUINT1,MOCON1 . 10568000 *. CALLS LTEND1,UTEND1,BRINIT,MTCON2 . 10570000 *. CALLS OUEND2,SYEND2,UTEND2 . 10572000 *. USES DSECTS: AVWXTABL . 10574000 *. USES MACROS: $AL2, $CALL, $PRNT, $RETURN, $SAVE, $SPIE . 10576000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10578000 , 10580000 ASPLM641- 46 10582000 10584000 **--> CSECT: MTCON2 2 MAIN CONTROL - ASSEMBLER PASS 2 . . . . . . . 10586000 *. MTCON2 IS THE CONTROL PROGRAM FOR THE 2ND PASS OF THE ASSIST . 10588000 *. OF THE ASSIST ASSEMBLER. IT IS RELATIVELY SMALL, SINCE . 10590000 *. MOST OF THE WORK HAS BEEN DONE IN PASS 1. IT PERFORMS OR . 10592000 *. SUPERVISES THE FOLLOWING ACTIONS, FOR EACH SOURCE STMT: . 10594000 *. 1. RETRIEVES POINTERS TO THE RECORD BLOCKS (UTGET2). . 10596000 *. 2. SETS UP THE LOCATION COUNTER AND OPERAND SCAN POINTER. . 10598000 *. 3. CALLS 2ND LEVEL INSTRUCTION PROCESSORS(ICMOP2,IDASM2). . 10600000 *. 4. PRINTS ANY STATEMENT WITH NO RCODBLK (OUTPT2). . 10602000 *. FINISH BY ROUNDING UP LENGTH OF PROG TO DOUBLEWORD BOUNDARY. . 10604000 *. CALLS ICMOP2,IDASM2,OUTPT2,UTGET2 . 10606000 *. USES DSECTS: AVWXTABL,RCODBLK,RSBLOCK . 10608000 *. USES MACROS: $CALL,$RETURN,$SAVE,$SLOC . 10610000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10612000 , 10614000 ASPLM641- 47 10616000 10618000 **--> CSECT: MXERRM CALLED DURING MACRO GENERATION TO GENERATE * 10620000 *. ERROR MESSAGES NOT HANDLED BY ERRTAG * 10622000 *. * 10624000 *. ENTRY CONDITIONS * 10626000 *. RA-SCAN PTR A 10628000 *. RB = ERROR TYPE * 10630000 *. RC = OPERAND VALUE OR LOCATION * 10632000 *. RD = LENGTH OF STRING IF CHAR VALUE * 10634000 *. RE-@ MXPNTSACV A 10636000 *. * 10638000 *. EXIT CONDITIONS A 10640000 *. RB=0 ==> OK A 10642000 *. RB=4 ==> STORAGE OVERFLOW CAUSED MESSAGE SELECTED IS PLACED A 10644000 *. IN RSBLOCK, THEN MOVED OUT TO HIGH AREA BY MXMVSR A 10646000 *. A 10648000 *. USES MACROS: $CALL, $AL2, $SAVE, $RETURN * 10650000 *. CALLS MXMVSR * 10652000 *. USES DSECTS: RSBLOCK, MXPNTSAV, MCOPQUAD, AVWXTABL * 10654000 *. * 10656000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10658000 , 10660000 ASPLM641- 48 10662000 10664000 **--> CSECT: MXINST EXECUTE INSTRUCTIONS IN MACRO DEF *S 10666000 *. ENTRY CONDITIONS: *S 10668000 *. RC = @ MXPNTSAV *S 10670000 *. EXIT CONDITIONS: *S 10672000 *. RB = 0 MEND OR MEXIT FOUND *S 10674000 *. 4 INNER MACRO CALL *S 10676000 *. 8 KILL THIS MACRO NEST *S 10678000 *. 12 KILL ALL MACROS *S 10680000 *. 16 STORAGE OVERFLOW *S 10682000 *. *S 10684000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **S 10686000 10688000 **--> INSUB: MXADDR THIS ROUTINE ACCEPTS A ONE-OP + + + + + + +S 10690000 10692000 **--> INSUB: MXARITH MXARITH PRODUCES ARITH ONE-OP A 10694000 10696000 **--> INSUB: MXINERRM CALLS MXERRM TO HANDLE ERROR MESSAGES + +S 10698000 , 10700000 ASPLM641- 49 10702000 10704000 **--> CSECT: MXMVSR MOVES GENERATED STMT FROM RSBLOCK TO HIGH FREE * 10706000 *. AREA. AVGEN2CD POINTS TO BEGINNING OF STMT * 10708000 *. * 10710000 *. EXIT CONDITIONS * 10712000 *. RB = ZERO IF OKAY ELSE 4 IF OVERFLOW * 10714000 *. * 10716000 *. USES MACROS: $SAVE, $RETURN, $MALLOCH * 10718000 *. USES DSECTS RSBLOCK,REBLK,AVGEN1CD,AVGEN2CD A 10720000 *. * 10722000 *. REGISTER USAGES A 10724000 *. RAT-MAIN TABLE USING A 10726000 *. RW-SOURCE BLK USING A 10728000 *. RX-ERROR BLK USING A 10730000 *. R1,RB-BYTE REGISTERS A 10732000 *. RA-WORK REGISTER A 10734000 *. A 10736000 *.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10738000 , 10740000 ASPLM641- 50 10742000 10744000 **--> CSECT: OPCOD1 1 OPCODE TABLES AND LOOKUP CODE . . . . . . . . 10746000 *. THIS MODULE CONTAINS THE CODE,TABLES TO IDENTIFY OPCODES. . 10748000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10750000 10752000 **--> ENTRY: OPFIND 1 LOOK UP AN OPCODE . . . . . . . . . . . . . . 10754000 *. ENTRY CONDITIONS . 10756000 *. RA = SCAN POINTER TO 1ST CHARACTER OF OPCODE . 10758000 *. EXIT CONDITIONS . 10760000 *. RA = SCAN POINTER TO 1ST BLANK FOLLOWING LEGAL OPCODE,OR SAME AS O. 10762000 *. ENTRY IF OPCODE WAS NOT RECOGNIZED. . 10764000 *. RB = 0 IF THE OPCODE WAS FOUND IN OPCODE TABLE . 10766000 *. RB = NONZERO VALUE - ERROR CODE FOR ILLEGAL OPCODE ($ERIVOPC) . 10768000 *. RC = ADDRESS OF OPCODTB ENTRY FOR THE OPCODE, IF IT WAS FOUND . 10770000 *. USES DSECTS: AVWXTABL,OPCODTB . 10772000 *. USES MACROS: $RETURN,$SAVE,OPG,OPGT . 10774000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10776000 10778000 **--> ENTRY: OPINIT 1 INITILIAZE OPCODE ROUTINE IF NEEDED . . . . . 10780000 *. AS OF 8/17/70, THIS ENTRY DOES NOTHING. IT IS INCLUDED FOR . 10782000 *. COMPLETENESS, POSSIBLE MODIFICATION REQUIRING INITIALIZATION.. 10784000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10786000 , 10788000 ASPLM641- 51 10790000 10792000 **--> CSECT: OUTPUT PRINTED LISTING ROUTINE . . . . . . . . . . . 10794000 *. OUTPUT HANDLES THE FORMATTING AND PRINTING OF THE ASSEMBLY . 10796000 *. LISTING FOR THE ASSIST ASSEMBLER. . 10798000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10800000 10802000 **--> ENTRY: OUEND2 2 PRINT ENDING STATISTICS FOR ASSMBLY . . . . . 10804000 *. OUEND2 IS CALLED AT THE END OF THE ASSEMBLY TO PRINT SUMMARY . 10806000 *. OF ERRORS AND WARNINGS ISSUED. FIRST LINE PRINTED GIVES . 10808000 *. TOTAL # OF STMTS FLAGGED, TOTAL # ERRORS, TOTAL # WARNINGS. . 10810000 *. IF MAXIMUM # ERRORS IS EXCEEDED, ANOTHER LINE IS PRINTED. . 10812000 *. USES DSECTS: AVWXTABL . 10814000 *. USES MACROS: $PRNT,$RETURN,$SAVE . 10816000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10818000 10820000 **--> ENTRY: OUINT1 1 INITIALIZATION ENTRY - CALLED BEFORE PASS 1 . 10822000 *. OUINT1 IS CALLED TO INITIALIZE FLAG VALUES AND COUNTERS . 10824000 *. USED IN OUTPUT, INCLUDING LISTING CONTROL, STATEMENT #, . 10826000 *. PAGE COUNT, WITHIN-PAGE LINE COUNT, AND TITLE AREA. . 10828000 *. USES DSECTS: AVWXTABL . 10830000 *. USES MACROS: $RETURN,$SAVE . 10832000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10834000 10836000 **--> INSUB: OUTLNSA/ PRINT 1 LINE (WITH HEADING IF NEEDED)+ + + 10838000 10840000 **--> ENTRY: OUTPUT2 PRINT 1 STATEMENT,WITH CODE AS NEEDED,ERROR . 10842000 *. OUTPT2 PRINTS 1 STATEMENT, WITH ANY ERROR MESSAGES NEEDED, . 10844000 *. PRINTS TITLES AND HEADINGS WHEN REQUIRED, PERFORMS PAGE AND . 10846000 *. LINE COUNTING, MAINTAINS LISTING CONTROL STATUS, AND KEEPS . 10848000 *. COUNTS OF NUMBER OF STATEMENTS FLAGGED, TOTAL # ERRORS, . 10850000 *. TOTAL # WARNING MESSAGES. . 10852000 *. ENTRY CONDITIONS . 10854000 *. RB = PRIMARY CALL TYPE CODE . 10856000 *. = 0 ($OUMACH) MACHINE INSTRUCTIONS . 10858000 *. = 2 ($OUCONS) CONSTANTS,CNOPS,ETC. PRINT LOCATION COUNTER,CO. 10860000 *. = 4 ($OULIST) - LISTING CONTROL - EJECT,SPACE,PRINT,TITLE . 10862000 *. = 6 ($OUCOMM) - COMMENTS,ETC.-DO NOT HAVE LOCATION COUNTER . 10864000 *. RC = AN INFORMATION ADDRESS OF SOME TYPE . 10866000 *. = @ OBJECT CODE (RB=0,2) . 10868000 *. = @ # LINES TO SPACE (RB=4,RE=0) . 10870000 *. = @ PRINT CONTROL CODE BYTE (RB=4,RE=2) I.E. PRINT . 10872000 *. = @ TITLE CODE (RB=4,RE=4) . 10874000 *. RD = #-1 OF BYTES OF OBJECT CODE OR TITLE . 10876000 *. RE = SECONDARY CODE OR ADDRESS . 10878000 *. = SECONDARY CODE FOR LISTING CONTROL OPERATIONS . 10880000 *. = 0 SPACE OR EJECT . 10882000 *. = 2 PRINT . 10884000 *. = 4 TITLE . 10886000 *. USES DSECTS: AVWXTABL,ICBLOCK,RCODBLK,RSBLOCK,RSCBLK,REBLK . 10888000 *. USES MACROS: $AL2,$PRNT,$RETURN,$SAVE,$SERR . 10890000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10892000 10894000 **--> INSUB: OUXCMINT ENTRY POINT FOR CMPRS HANDLING + + + + + + + + 10896000 10898000 **--> INSUB: OUXPRNT LOW-LEVEL PRINT ROUTINE- 121-BYTE LINE + + + + 10900000 , 10902000 ASPLM641- 52 10904000 10906000 **--> CSECT: REMONI REPLACE MONITOR CONTROL PROGRAM . . . . . . . . 10908000 *. REMONI HANDLES MOST OF THE DETIALS REQUIRED FOR A STUDENT TO . 10910000 *. WRITE AN ASSIST CSECT, HAVE IT ASSEMBLED BY ASSIST, AND THEN RUN . 10912000 *. A TEST PROGRAM. THE ENTRYPOINTS OF HIS PROGRAM ARE CALLED ALONG . 10914000 *. WITH THE ORIGINALS, AND HIS RESULTS CHECKED FOR ACCURACY. WHILE . 10916000 *. ADDRESS CONSTANT MODIFCATION IS PERFORMED, THE ENTIRE PROCESS IS . 10918000 *. STILL A SERIALLY RESUABLE PROGRAM. SEE THE ASSIST REPLACE USER'S . 10920000 *. GUIDE FOR DETAILS ON USING THE REPLACE MONITOR. . 10922000 *. NAMES: RE------ MAIN CODE BODY AND INSUBS. . 10924000 *. NAMES: RG------ CHECKING CODE FOR RETURN VALUES. . 10926000 *. NAMES: RH------ EXTERNAL CALL CHECKING (&$REPL=2) . 10928000 *. CALLS SYFIND . 10930000 *. USES DSECTS: AJOBCON,AVWXTABL,ECONTROL,RECORBLK,RFSYMBLK . 10932000 *. USES MACROS: $CALL,$PRNT,$RETURN,$SAVE,REPRNT,XDECO,XSNAP . 10934000 *. . 10936000 *. OVERALL REGISTER CONVENTIONS AND USAGE. . 10938000 *. R0,R1,R2,R3,R4,R15 WORK REGISTERS . 10940000 *. R5 = @ RECORBLK ELEMENT FOR CURRENT ENTRY BEING PROCESSED. . 10942000 *. R6 = BASE REGISTER FOR MAIN CODE OF EACH REMONI ENTRY POINT. . 10944000 *. R7,R8 USUAL PARAMETER REGS FOR INTERNAL SUBROUTINES. . 10946000 *. R9 = LINK REGISTER FOR INSUBS WHICH MUST CALL OTHERS WITH R14. . 10948000 *. R10= @ ECONTROL (EXECUTION CONTROL BLOCK, USER PSEUDO REGISTERS. . 10950000 *. R11= @ AJOBCON DSECT (MAIN JOB CONTROL TABLE) . 10952000 *. R12(RAT)= @ VWXTABL CSECT (AVWXTABL DSECT). . 10954000 *. R13= SAVE AREA ADDRESS, BASE REGISTER FOR DATA, INTERNAL SUBRS. . 10956000 *. R14= INTERNAL LINK REGISTER. LOCAL WORK REGISTER. . 10958000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10960000 10962000 **--> ENTRY: REENDA REPLACE MODULE: POST-ASSEMBLY PROCESSING . . . 10964000 *. REENDA IS CALLED JUST AFTER AN ASSEMBLY IS COMPLETED. . 10966000 *. IF THE RUN IS NOT A REPLACE RUN, NOTHING IS DONE. . 10968000 *. IF IT IS REPLACE PHASE A, THE ASSEMBLED PROGRAM WAS A REPLACE. 10970000 *. VERSION OF AN ASSIST MODULE, SO CHECK AND MODIFY ASSEMBLER ADCONS.. 10972000 *. IF THE RUN IS IN PHASE B, THE ASSEMBLY JUST FINISHED WAS . 10974000 *. A TEST PROGRAM, SO PRINT PERFORMANCE STATISTICS FOR THE MODULE. . 10976000 *. ENTRY CONDITIONS . 10978000 *. R11= @ AJOBCON (MAIN JOB CONTROL BLOCK). . 10980000 *. R12(RAT)= @ VWXTABL CSECT (AVWXTABL DSECT). . 10982000 *. CALLS SYFIND . 10984000 *. USES DSECTS: AJOBCON,AVWXTABL,RECORBLK,RFSYMBLK,SYMSECT . 10986000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10988000 10990000 **--> INSUB: REEXDECO CONVERT NUMBER TO DECIMAL + + + + + + + + + + 10992000 10994000 **--> ENTRY: REFAKE INTERCEPT REPLACED CALLS, CHECK REAL/USER . . . 10996000 *. ENTRY CONDITIONS . 10998000 *. R15(BITS 0-7)= OFFSET CODE # FOR SPECIFIC ENTRY BEING CALLED. . 11000000 *. R0-R14 ARE AS DESCRIBED IN ASSEMBLER CALLING CONVENTIONS. . 11002000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11004000 11006000 **--> INSUB: REFRFC TEST ECRFLAG AND PRINT NEEDED INFOR + + + + + + 11008000 11010000 **--> INSUB: REGCRARE USING RERGEFLG, FLAG AND PRINT REG MSG + + + + 11012000 11014000 **--> INSUB: REGC1213 CHECK USER REGS 12-13,FLAG RERGEFLG + + + + + + 11016000 11018000 **--> ENTRY: REINTA INITIALZE BEFORE ASSEMBLER CALLED . . . . . . . 11020000 , 11022000 ASPLM641- 53 11024000 11026000 *. THIS ENTRY IS CALLED 1 TIME BEFORE ASSIST ASSEMBLER IS CALLED. 11028000 *. IT CHECKS FOR PRESENCE OF REAL ADDRESS CONSTANTS IN VWXTABL, AND . 11030000 *. REPLACES THEM IF THEY HAVE BEEN MODIFIED IN PREVIOUS REPLACE RUN. . 11032000 *. IT ALSO MAY SET FLAGS IN AVWXTABL IF THE SYSTEM IS IN . 11034000 *. REPLACE PHASE A (ASSEMBLE REPLACEMENT PROGRAM AND LINK IT). . 11036000 *. ENTRY CONDITIONS . 11038000 *. R11= @ AJOBCON (MAIN JOB CONTROL BLOCK). . 11040000 *. R12(RAT)= @ VWXTABL CSECT (AVWXTABL DSECT). . 11042000 *. . 11044000 *. AVWXTABL: HAS BEEN COMPLETELY INITIALIZED BY MAIN PROGRAM ASSIST. . 11046000 *. THIS PERMITS REINTA TO MODIFY ASSEMBLER CONTROL FLAGS IF . 11048000 *. NEEDED TO MAKE ASSEMBLER PERFORM REQUIRED ACTIONS. . 11050000 *. USES DSECTS: AJOBCON,AVWXTABL . 11052000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11054000 11056000 *+--> INSUB: REREAL REPLACE REAL ADCONS IN VWXTABL IF NOT THERE. + 11058000 11060000 **--> INSUB: REREGS FORMAT PARAMETER REGS AND PRINT THEM + + + + + 11062000 11064000 **--> ENTRY: RESYMB ENTER CODE IN SYMBOL TABLE OF CALLABLE ENTRY. . 11066000 *. RESYMB IS CALLED FROM CVCON2 IF A SYMBOL FLAGGED EXTRN IS . 11068000 *. USED IN A VCON. IT PLACES A CODE INTO THE SYVALUE ENTRY OF THE . 11070000 *. SYMBOLS SYMSECT. THIS CODE (THE OFFSET TO A CALLABLE ENTRY . 11072000 *. ELEMENT IN THE SECOND SECTION OF RFSYMS), IS USED FOR CHECKING . 11074000 *. WHEN THE USER PROGRAM ACTUALLY CALLS THE ROUTINE. . 11076000 *. ENTRY CONDITIONS . 11078000 *. RA = @ SYMSECT FOR THE EXTRN SYMBOL. . 11080000 *. ALL OTHER REGS: SAME AS ASSEMBLER REGISTER CONVENTIONS. . 11082000 *. EXIT CONDITIONS . 11084000 *. RA = @ SAME SYMSECT, BUT CODE HAS BEEN ENTERED IN SYVALUE. . 11086000 *. RB = 0 IF SYMBOL WAS LEGITAMATE. . 11088000 *. = 4 IF SYMBOL WAS NOT LEGITAMETE ENTRY TO BE CALLED. . 11090000 *. NAMES: RES----- . 11092000 *. USES DSECTS: RFSYMBLK,SYMSECT . 11094000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11096000 11098000 **--> INSUB: REXCON3 CONVERT 3 BYTES OF REGISTER R7 TO HEX. + + + + 11100000 11102000 **--> INSUB: REXPRINT PRINT MESSAGE + + + + + + + + + + + + + + + + + 11104000 11106000 **--> INSUB: RGENTS CHECK USER VALUES IN PARAMETER REGISTERS+ + + + 11108000 11110000 **--> INSUB: RGRAADDR CHECK LEGITAMACY OF SCAN PTR RA + + + + + + + + 11112000 11114000 **--> INSUB: RGRCADDR CHECK RC FOR @ INSIDE USER PROG.+ + + + + + + + 11116000 11118000 **--> INSUB: RHENTS CHECK PARM REGS PASSED TO CALLED PROGRAM+ + + + 11120000 11122000 **--> INSUB: RHRAADDR CHECK RA FOR REASONABLE @ + + + + + + + + + + + 11124000 , 11126000 ASPLM641- 54 11128000 11130000 **--> CSECT: RFSYSMS TABLE OF CSECT-ENTRY NAMES-REPLACE . . . . . . 11132000 *. RFYSMS (SECT.1) HAS AN ELEMENT FOR EACH CSECT WHICH CAN. 11134000 *. BE DYNAMMICALLY REPLACED BY A USER-WRITTEN ROUTINE. EACH . 11136000 *. ELEMENT CONTAINS THE NAME OF THE CSECT, THE NUMBER OF . 11138000 *. ENTRY POINTS IN IT, AND A LIST OF ENTRY POINT NAMES AND . 11140000 *. OFFSETS TO THEIR ADCONS IN AVWXTABL, SO THEY CAN BE CHANGED. . 11142000 *. THE 2ND SECTION IS PRESENT IF &$REPL=2. IT LISTS ALL . 11144000 *. ENTRYPOINTS WHICH CAN BE CALLED FROMA USER PROGRAM, WITH . 11146000 *. OFFSET @ PTRS TO THEIR ADCONS IN AVWXTABL, AND TO CODE IN . 11148000 *. SECTION RHENTS OF REMONI. THIS CODE IS USED TO CHECK THE . 11150000 *. REGISTERS PASSED BY THE USER TO THE CALLED PROGRAM. . 11152000 *. THE 3RD SECTION IS ALSO PRESENT ONLY IF &$REPL=2. IT . 11154000 *. HAS LABELS OF THE FORM RI&CSECT, WITH &CSECT BEING ONE WHICH . 11156000 *. NOT ONLY CAN BE REPLACED, BUT CAN ALSO CALL OTHER ROUTINES. . 11158000 *. EACH ELEMNT CONTAINS A HALFWORD WITH THE NUMBER OF DIFFERENT . 11160000 *. SUBROUTINE ENTRIES WHICH THIS CSECT IS PERMITTED TO CALL, . 11162000 *. FOLOWED BY THAT # OFFSET VALUES TO THE ELEMENTS IN THE 2ND . 11164000 *. SECTION OF THOSE ENTRIES IT CAN CALL. REMONI OBTAINS AN . 11166000 *. OFFSET FROM RFSYMS TO RI&CSECT FROM THE RFSYMBLK BELONGING . 11168000 *. TO THAT CSECT. NOTE, IF A CSECT CAN CALL NO OTHER, THE . 11170000 *. VALUE SAVED IS = 0. . 11172000 *. NAMES: RF------ . 11174000 *. NAMES: RI------ (IN SECTION 3, IF &$REPL=2) 11176000 *. DSECT RFSYMBLK IS USED TO DESCRIBE EACH ENTRY IN SECTS.1&2. . 11178000 *. USES MACROS: $AL2,RFSGN . 11180000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11182000 , 11184000 ASPLM641- 55 11186000 11188000 **--> CSECT: SCANRS 1-2 SCANNING ROUTINES . . . . . . . . . . . . . . 11190000 *. SCANRS CONTAINS VARIOUS UTILITY SCANNING ROUTINES. ALL 3 . 11192000 *. ENTRIES TERMINATE SCANNING ON FINDING A BLANK. 1 ENTRY ALSO . 11194000 *. STOPS FOR A COMMA, AND THE OTHER STOPS FOR AN EQUALS SIGN. . 11196000 *. ****NOTE**** THIS ROUTINE MODIFIES TABLE AWTZTAB IN AVWXTABL.. 11198000 *. IT MAY THEN CALL SDBCDX WITHOUT RESETTING THE TABLE. THIS . 11200000 *. IS AN EXCEPTION TO THE RULE OF NOT PERMITTING MODIFICATION . 11202000 *. TO AV------ SECTIONS WHEN CALLING ANOTHER MODULE. . 11204000 *. CALLS SDBCDX . 11206000 *. USES DSECTS: AVWXTABL . 11208000 *. USES MACROS: $CALL,$RETURN,$SAVE,$SETRT . 11210000 *. NAMES: SCAN---- . 11212000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11214000 11216000 **--> ENTRY: SCANBL SCAN TO BLANK ONLY. . . . . . . . . . . . . . 11218000 *. ENTRY AND EXIT CONDITIONS SAME AS SCANEQ . 11220000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11222000 11224000 **--> ENTRY: SCANCO SCAN TO COMMA OR BLANK (USED BY A-TYPE ADCON. 11226000 *. ENTRY AND EXIT CONDITIONS SAME AS SCANEQ . 11228000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11230000 11232000 **--> ENTRY: SCANEQ SCAN TO = OR BLANK(USED BY IAMOP1 FOR LITERA. 11234000 *. ENTRY CONDITIONS . 11236000 *. RA = SCAN POINTER . 11238000 *. EXIT CONDITIONS . 11240000 *. RA = SCAN POINTER TO = OR BLANK, OR ERROR IF ANY . 11242000 *. RB = 0 IF SCAN OK, = ERROR CODE IF ERROR FOUND(IN SELF-DEF TRM). 11244000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11246000 , 11248000 ASPLM641- 56 11250000 11252000 **--> CSECT: SDTERM SELF-DEFINING TERM CONVERSIONS. . . . . . . . . 11254000 *. SDTERM INCLUDES AN ENTRY POINT FOR CONVERTING EACH TYPE OF . 11256000 *. SELF-DEFINING TERM, AND AN ENTRY POINT WHICH FIRST DECIDES . 11258000 *. WHICH TYPE(IF ANY) THE SCAN POINTER IS POINTING AT, THEN . 11260000 *. BRANCHES TO THE CORRECT SECTION TO CONVERT THE TERM. . 11262000 *. USES DSECTS: AVWXTABL . 11264000 *. USES MACROS: $RETURN,$SAVE . 11266000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11268000 11270000 **--> ENTRY: SDBCDX 1-2 DETERMINE TYPE OF SELF-DEFINING TERM-CHECK. . 11272000 *. DECIDE TYPE OF SELF-DEFINING TERM, BRANCH TO RIGHT SECTION. . 11274000 *. ENTRY CONDITIONS . 11276000 *. RA = SCAN POINTER TO BEGINNING OF TERM- TO C,B,X, OR 1ST DIGIT . 11278000 *. EXIT CONDITIONS . 11280000 *. RA = SCAN POINTER TO DELIMITER BEYOND TERM,(NOT ' ENDING B,C,X) . 11282000 *. RB = 0 SELF DEFINING TERM WAS LEGAL . 11284000 *. EB = >0 - ERROR CODE - ILLEGAL TERM ($ERSDINV) . 11286000 *. RB = -4 ==> SCAN POINTER DID NOT POINT AT SELF-DEFINING TERM . 11288000 *. RC = VALUE OF SELF-DEFINING TERM, FROM 0 TO 2**24-1 . 11290000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11292000 11294000 **--> ENTRY: SDBTRM 1-2 SCAN, COMPUTE BINARY SELF-DEFINING TERM . . . 11296000 *. ENTRY,EXIT CONDITONS SAME AS SDBCDX, EXCEPT RB >= 0 ON EXIT. . 11298000 *. NAMES: SDB----- . 11300000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11302000 11304000 **--> ENTRY: SDCTRM 1-2 SCAN, COMPUTE CHARACTER SELF-DEFINING TERM. . 11306000 *. ENTRY,EXIT CONDITONS SAME AS SDBCDX, EXCEPT RB >= 0 ON EXIT. . 11308000 *. NAMES: SDC----- . 11310000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11312000 11314000 **--> ENTRY: SDDTRM 1-2 CHECK OR CONVERT DECIMAL SELF-DEFINING TERM . 11316000 *. ENTRY,EXIT CONDITONS SAME AS SDBCDX, EXCEPT RB >= 0 ON EXIT. . 11318000 *. NAMES: SDD----- . 11320000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11322000 11324000 **--> ENTRY: SDXTRM 1-2 SCAN, COMPUTE HEXADECIMAL SELF-DEFINING TERM. 11326000 *. ENTRY,EXIT CONDITONS SAME AS SDBCDX, EXCEPT RB >= 0 ON EXIT. . 11328000 *. NAMES: SDX----- . 11330000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11332000 , 11334000 ASPLM641- 57 11336000 11338000 **--> CSECT: SYMOPS 1-2 ALL NORMAL SYMBOL TABLE OPERATIONS. . . . . . 11340000 *. SYMOPS BUILDS, MAINTAINS, AND RETRIEVES FROM THE SYMBOL . 11342000 *. TABLE OF THE ASSIST ASSEMBLER. THE SYMBOL TABLE IS A VIRUTAL. 11344000 *. SCATTER TABLE, WITH CHAIN ORDERING BY A SECONDARY HASH CODE. . 11346000 *. ALL SYMBOLS ARE HASHED INTO A SMALL PRIMARY POINTER TABLE. . 11348000 *. EACH WORD IN THE PRIMARY TABLE POINTS TO A LINKED LIST OF . 11350000 *. SYMBOLS HASHING TO THAT LOCATION IN THE PRIMARY TABLE. THE . 11352000 *. SYMBOLS ARE ORDERED ON THE LIST IN DESCENDING ORDER BY THE . 11354000 *. VALUE OF A SECOND HASH CODE, WHICH IS KEPT IN THE LINK . 11356000 *. POINTER POINTING TO THE SYMBOL TO WHICH IT BELONGS. THIS . 11358000 *. METHOD IS USED BECAUSE MAKES NO ASSUMPTIONS ABOUT THE FINAL . 11360000 *. SIZE OF THE FINAL SYMBOL TABLE, PERMITTING ALLOCATION OF . 11362000 *. ENTRIES FROM THE DYNAMIC AREA. IT ALSO PERMITS A VERY FAST . 11364000 *. (3 FAST INSTRUCTIONS) MAJOR SEARCH LOOP, WHICH STILL GIVES . 11366000 *. GOOD PERFORMACNE EVEN WITH A SMALL INITIAL POINTER TABLE . 11368000 *. AND LONG LISTS OF SYMBOLS. . 11370000 *. CALLS MOSTOP . 11372000 *. USES DSECTS: AVWXTABL,SYMSECT . 11374000 *. USES MACROS: $ALLOCH,$CALL,$RETURN,$SAVE . 11376000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11378000 11380000 **--> ENTRY: SYEND2 2 CLEANUP AT END OF PASS 2. . . . . . . . . . . 11382000 *. *** FUTURE USE - WILL COMPUTE SYMBOL TABLE STATISTICS. . 11384000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11386000 11388000 **--> ENTRY: SYENT1 1 ENTER A SYMBOL INTO TABLE,RETURN ADDRESS. . . 11390000 *. ENTRY CONDITIONS . 11392000 *. RA = SCAN POINTER TO FIRST CHARACTER OF THE SYMBOL . 11394000 *. RB = NUMBER OF CHARACTERS IN THE SYMBOL = 1 - 8 . 11396000 *. EXIT CONDITIONS . 11398000 *. RA = ADDRESS IN THE SYMBOL TABLE WHERE SYMBOL IS . 11400000 *. RB = 0 THE SYMBOL WAS ALREADY PRESENT IN THE TABLE . 11402000 *. = 4 THE SYMBOL WAS NOT ALREADY PRESENT IN THE TABLE . 11404000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11406000 11408000 **--> ENTRY: SYFIND 1-2 LOOK UP SYMBOL,REPORT PRESENCE/ADDRESS. . . . 11410000 *. ENTRY CONDITIONS . 11412000 *. RA = SCAN POINTER TO FIRST CHARACTER OF THE SYMBOL . 11414000 *. RB = NUMBER OF CHARACTERS IN THE SYMBOL = 1 - 8 . 11416000 *. EXIT CONDITIONS . 11418000 *. RA = ADDRESS OF THE SYMBOL IN THE SYMBOL TABLE, IF IT IS THERE . 11420000 *. RB = 0 THE SYMBOL IS IN THE TABLE . 11422000 *. = 4 THE SYMBOL IS NOT IN THE TABLE . 11424000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11426000 11428000 **--> ENTRY: SYINT1 1 INITIALIZE SYMBOL TABLE . . . . . . . . . . . 11430000 *. OBTAINS SPACE FOR INITIAL POINTER TABLE, ZEROES IT. . 11432000 *. ALSO SAVES THE ADDRESS OF THE INITIAL POINTER TABLE. . 11434000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11436000 , 11438000 ASPLM641- 58 11440000 11442000 **--> CSECT: UTOPRS 1-2 UTILITY DATA SET ROUTINES . . . . . . . . . . 11444000 *. THIS MODULE PERFORMS ALL THE HANDLING WHICH WOULD . 11446000 *. NORMALLY BE DONE USING SECONDARY STORAGE FOR INTERMEDIATE . 11448000 *. SOURCE RECORDS AND FOR OBJECT CODE. IT USES THE LOWER END . 11450000 *. OF THE DYNAMIC CORE AREA TO STORE THE RECORD BLOCKS (RSBLOCK,. 11452000 *. RSCBLK,REBLK) RESULTING FROM THE SOURCE PROGRAM, AND PLACING . 11454000 *. THEM DURING PASS 1 SO THAT THE OBJECT CODE CAN BE OVERLAID . 11456000 *. INTO THE SAME AREA. I.E. IN NO CASE WILL THE RECORDS BLOCKS . 11458000 *. FOR A SOURCE STATEMENT BE PLACED NEARER THE BEGINNING OF THE . 11460000 *. AREA THAN THE OBJECT CODE RESULTING FROM THE STATEMENT. . 11462000 *. . 11464000 *. CODE FOR THIS MODULE DEPENDS HEAVILY ON &$DISKU, WHICH . 11466000 *. CAN ALLOW UTOPRS TO USE DISK FOR INTERMEDIATE STORAGE. . 11468000 *. &$DISKU = 0 ==> EVERYTHING IN CORE (NORMAL ASSIST). . 11470000 *. &$DISKU = 1 ==> USER HAS INCROEE/DISK OPTION (DISKU,NODISKU) . 11472000 *. &$DISKU = 2 ==> ALWAYS GO TO DISK, NO INCORE CODE EXISTS. . 11474000 *. . 11476000 *. USES MACROS: $DISK,$RETURN,$SAVE . 11478000 *. CALLS XXXXDKOP,XXXXDKRD,XXXXDKE1,XXXXDKWT . 11480000 *. USES DSECTS: AVWXTABL . 11482000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11484000 11486000 **--> ENTRY: UTEND1 1 END PASS 1, PREPARE FOR PASS 2 OF ASSEMBLER . 11488000 *. UTEND1 RESETS CORE POINTERS AND CALCULATES RELOCATION FACTOR.. 11490000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11492000 11494000 **--> ENTRY: UTEND2 2 CLEANUP AFTER PHASE 2 DONE. . . . . . . . . . 11496000 *. UTEND2 IS CALLED AT THE END OF ASSEMBLY PASS 2. IT ASSURES . 11498000 *. THAT ANY DS STATEMENTS ENDING THE PROGRAM WILL BE FILLED IN . 11500000 *. WITH 5'S, LIKE ANY OTHER DS'S FOLLOWED BY CODE (THE VERY LAST. 11502000 *. STRING OF DS'S MAY NOT BE CAUGHT BY UTPUT2). IT DOES THIS BY. 11504000 *. CALLING UTPUT2 WITH SOME NONEXISTENT OBJECT CODE. . 11506000 *. CALLS UTPUT2 . 11508000 *. USES DSECTS: AVWXTABL . 11510000 *. USES MACROS: $SAVE . 11512000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11514000 11516000 **--> ENTRY: UTGET2 2 GET FROM UTILITY DUIRNG PASS 2. . . . . . . . 11518000 *. UTGET2 IS CALLED DURING PASS 2 TO RETRIEVE THE ADDRESSES OF . 11520000 *. THE SET OF RECORD BLOCKS BELONGING TO THE NEXT STATEMENT. A . 11522000 *. CHECK IS REQUIRED FOR ANY OFFSET ADJUSTMENT MADE BY UTPUT1, . 11524000 *. WHICH MADE SURE THAT NO RECORD BLOCK COULD BE OVERLAID BY . 11526000 *. ITS OWN CODE. 11528000 *. EXIT CONDITIONS . 11530000 *. RC = @ RSBLOCK (THE ONLY BLOCK DEFINITELY PRESENT). . 11532000 *. RE = 0 NORMAL RETURN. RE = 4 ==> END-FO-FILE-QUIT . 11534000 *. AVRSBPT,AVRCBPT,AVRSCPT NOW POINT TO THEIR BLOCKS, IF THEY EXIST. . 11536000 *. AVREBLK HAS HAD THE REBLK MOVED INTO IT, IF THERE WAS ONE. . 11538000 *. AVREBPT IS NOT CHANGED, STILL POINTS AT AVREBLK, AS ALWAYS. . 11540000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11542000 11544000 **--> ENTRY: UTINT1 1 INITIALIZE UTILITY ROUTINES . . . . . . . . . 11546000 *. INITIALIZES UT POINTER TO BEGINNING OF RECORD BLOCK AREA. . 11548000 *. USES DSECTS: AVWXTABL . 11550000 *. USES MACROS: $RETURN,$SAVE . 11552000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11554000 11556000 , 11558000 ASPLM641- 59 11560000 11562000 **--> INSUB: UTPMOVE MOVE 1 RECORD BLOCK INTO DYNAMIC AREA + + + + + 11564000 11566000 **--> ENTRY: UTPUT1 1 WRITE TO UTILITY DURING PASS 1. . . . . . . . 11568000 *. UTPUT1 MOVES ALL EXISISTING RECORD BLOCKS FOR A STATEMENT . 11570000 *. INTO THE LOW END OF THE DYNAMIC CORE AREA, AT THE END OF . 11572000 *. PROCESSING EACH STATEMENT DURING PASS 1. THE BLOCKS ARE . 11574000 *. NEVER PLACED CLOSER TO THE BEGINNING OF THE RECORD BLOCK . 11576000 *. AREA THAN ANY OBJECT CODE WHICH COULD BE PRODUCED BY THE . 11578000 *. STATEMENT. THIS MAKES IT SAFE IN PASS 2 TO JUST MOVE . 11580000 *. OBJECT CODE INTO THE SAME OVERALL AREA, WITH NO FEAR OF . 11582000 *. OVERWRITING RECORD BLOCKS STILL NEEDED FOR THE SAME OR . 11584000 *. LATER STATEMENTS. THE BLOCKS ARE PLACED IN THIS ORDER: . 11586000 *. RSBLOCK, (RCODBLK), (REBLK), (RSCBLK) WITH THE BLOCKS . 11588000 *. IN ( ) PLACED IF THEY EXIST. **NOTE** BLOCKS RSBLOCK AND . 11590000 *. RCODBLK ARE ALWAYS ALIGNED TO FULLWORD BOUNDARY. . 11592000 *. CALLS MOSTOP . 11594000 *. USES DSECTS: AVWXTABL,RSBLOCK . 11596000 *. USES MACROS: $ALIGR,$CALL,$GLOC,$RETURN,$SAVE . 11598000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11600000 11602000 **--> ENTRY: UTPUT2 PRODUCES AND RELOCATES OBJECT CODE. . . . . . 11604000 *. UTPUT2 MOVES OBJECT CODE PRODUCED BY THE ASSEMBLER INTO IT . 11606000 *. PROPER LOCATION IN THE OBJECT PROGRAM, APPLYING DUPLICATION . 11608000 *. FACTOR AT THIS TIME, IF NECESSARY. BECAUSE OF THE WAY THE . 11610000 *. ASSIST INTERPRETER EXECUT WORKS, AND BECAUSE OF THE PSEUDO . 11612000 *. START CARD USED BY THE REPLACE MONITOR, NO RELOCATION NEED . 11614000 *. EVER BE DONE BY THIS PROGRAM, MAKING IT FAST AND SMALL. THE . 11616000 *. MODULE ALSO FILLS IN AREAS OF THE OBJECT PROGRAM HAVING NO . 11618000 *. CODE WITH CHARACTER 5'S, WHICH HELP REDUCE THE SIZE OF ANY . 11620000 *. COMPLETION DUMPS, AND AID DEBUGGING (X'F5F5F5' SHOWS UP . 11622000 * DISTINCTIVELY IN A DUMP, AND IS NOT A LEGAL INSTRUCTION). . 11624000 *. ENTRY CONDITIONS . 11626000 *. RA = PROGRAM LOCATION COUNTER OF THE OBJECT CODE . 11628000 *. RC = @ ASSEMBLED CODE IN MEMORY . 11630000 *. RD = LENGTH-1 OF OBJECT CODE . 11632000 *. RE = DUPLICATION FACTOR FOR THE CODE - 1 OR GREATER . 11634000 *. USES DSECTS: AVWXTABL . 11636000 *. USES MACROS: $RETURN,$SAVE . 11638000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11640000 , 11642000 ASPLM641- 60 11644000 11646000 **--> CSECT: VWXTABL MAIN ASSEMBLER COMMUNICATION TABLE. . . . . . . 11648000 *. THIS IS ACTUAL TABLE THAT AVWXTABL DSECT CORREPSONDS TO. . 11650000 *. SEE AVWXTABL COMMENTS FOR DESCRIPTION. . 11652000 *. USES MACROS: WCONG . 11654000 *. NAMES: X------, W------, V------ . 11656000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11658000 , 11660000 ASPLM641- 61 11662000 11664000 **--> CSECT: XDDGET(ENTRY XDDPUT) * * * * * * * * * * * * * * * * * * * 11666000 * XGET - XPUT MONITOR. USES TABLE XDDTABDE TO CONTROL * 11668000 * I/O THROUGH USER CALLS TO XGET & XPUT. * 11670000 * CALLS $READ,$PRNT,$PNCH,XGET,XPUT MACROES. * 11672000 * E.X. * 11674000 * THE MONITOR WILL NOT PERMIT A USER TO XGET A $READ FILE, * 11676000 * INSTEAD, THE MONITOR WILL CALL $READ AND THE USER WILL * 11678000 * NOT KNOW ABOUT IT. * 11680000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 11682000 , 11684000 ASPLM641- 62 11686000 11688000 **--> CSECT: XDDTABLE * * * * * * * * * * * * * * * * * * * * * * * * * 11690000 * CONTAINS INFORMATION ON EACH FILE FOR THE MONITOR * 11692000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 11694000 , 11696000 ASPLM641- 63 11698000 11700000 **--> CSECT: XXDDFINI CLOSES XGET-XPUT FILES* * * * * * * * * * * * * * 11702000 * LIKE XXXXFINI, CALLED AT SAME TIME. * 11704000 * BUT CLOSES ONLY THE FILES NANDLED BY XGET-XPUT * 11706000 * * 11708000 * SEARCH TABLE 'XDDTABLE FOR FILES THAT ARE OPEN AND ARE HANDLED 11710000 * BY XGET-XPUT. * 11712000 * WHEN FOUND, CLOSE THEM THROUGH XGET-XPUT. BLANK OUT FIRST BYTE 11714000 * OF NAME IN TABLE. IF NOY PERMANENT, AND NOT OPEN, * 11716000 * JUST WIPR OOT FIRST BYEE. * 11718000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 11720000 , 11722000 ASPLM641- 64 11724000 11726000 **--> CSECT: XXXXDECI EXTENDED DECIMAL INPUT CONVERSION MODULE. . . . 11728000 *. XXXXDECI IS CALLED BY MACRO XDECI TO PERFORM SCANNING AND . 11730000 *. CONVERSION OF DECIMAL STRINGS. . 11732000 *. ENTRY CONDITIONS . 11734000 *. R14= ADDRESS OF XDECIB DSECT CREATED BY CALLING XDECI. . 11736000 *. R15= ENTRY POINT ADDRESS (=V(XXXXDECI) . 11738000 *. EXIT CONDITIONS . 11740000 *. XDECIR1,XDECIRV VALUES ARE FILLED IN FOR REGS. . 11742000 *. CC IS SET ACCORDING TO SIGN OF RESULT, OR = 3 IF ERROR. . 11744000 *. USES DSECTS: XDECIB . 11746000 *. NAMES: XXDI---- . 11748000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11750000 , 11752000 ASPLM641- 65 11754000 11756000 **--> CSECT: XXXXDECO EXTENDED DECIMAL OUTPUT CONVERSION MODULE . . . 11758000 *. XXXXDECO IS CALLED BY MACRO XDECO TO CONVERT A REGISTER . 11760000 *. VALUE TO EDITED DECIMAL, IN A 12-BYTE AREA, WITH SIGN. . 11762000 *. ENTRY CONDITIONS . 11764000 *. R14= ADDRESS OF XDECOB DSECT CREATED BY XDECO . 11766000 *. R15= ENTRY POINT ADDRESS (=V(XXXDECO) . 11768000 *. EXIT CONDITIONS . 11770000 *. EDITED 12-BYTE RESULT OF REGISTER ARGUMENT STORED AT ADDRESS ARG. . 11772000 *. USES DSECTS: XDECOB . 11774000 *. NAMES: XXDO---- . 11776000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11778000 , 11780000 ASPLM641- 66 11782000 11784000 **--> CSECT: XXXXHEXIEXTENDED HEXADECIMAL INPUT CONVERSION MODULE . . . 11786000 *. XXXXHEXI IS CALLED BY MACRO XHEXI TO SCAN THE INPUT STRING . 11788000 *. AND CONVERT IT TO HEXADECIMAL INPUT. . 11790000 *. ENTRY CONDITIONS . 11792000 *. R14= ADDRESS OF A STORAGE AREA WITH R14-R1 STORED . 11794000 *. R15= ENTRY POINT ADDRESS (V(XXXXHEXI)) . 11796000 *. R0= ADDRESS OF STRING TO BE SCANNED. . 11798000 *. EXIT CONDITIONS: . 11800000 *. VALUE OF CONVERTED STRING IN STORAGE AREA POINTED TO BY R14, . 11802000 *. STORED IN 16 PASSED R14 OR IN XHEXINUM. . 11804000 *. R1= ENDING ADDRESS OF STRING, I.E. FIRST NON-HEXADECIMAL DIGIT. . 11806000 *. CC SET=3 IF ERROR . 11808000 *. USES DSECT XHEXIB. . 11810000 *. NAMES: XXHI____ . 11812000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11814000 , 11816000 ASPLM641- 67 11818000 11820000 *.--> CSECT: XXXXHEXOEXTENDED HEXADECIMAL OUTPUT CONVERSION MODULE . .. 11822000 *. XXXXHEXO IS CALLED BY MACRO XHEXO TO CONVERT A REGISTER VALUE. 11824000 *. TO EDITED HEXADECIMAL IN AN 8-BYTE AREA. . 11826000 *. ENTRY CONDITIONS: . 11828000 *. R14= ADDRESS OF SAVEAREA FOR CALLING MACRO . 11830000 *. R15= ENTRY POINT ADDRESS. . 11832000 *. R0 ADDRESS OF AREA WHERE CONVERTE STRING GOES . 11834000 *. REGISTER VALUE IN XHEXOREG . 11836000 *. EXIT CONDITIONS: . 11838000 *. 8-BYTE CONVERTED NUMBER OF REGISTER ARGUMENT STORED AT ADDRESS . 11840000 *. ARGUMENT . 11842000 *. USES DSECT XHEXOB. . 11844000 *. NAMES:XXHO---- . 11846000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11848000 , 11850000 ASPLM641- 68 11852000 11854000 **--> CSECT: XXXXIOCO ASSIST INPUT/OUTPUT CONTROL PROCESSING. . . . . 11856000 * XXXXIOCO CONTAINS ALL ACTUAL INPUT/OUTPUT OPERATIONS. * 11858000 * XXXXINIT AND XXXXFINI ARE USUALLY CALLED ONCE EACH, TO * 11860000 * PERFORM INITIALIZATION AND TERMINATION RESPECTIVELY. * 11862000 * THE ENTRIES XXXXSORC,XXXXREAD,XXXXPNCH,XXXXPRNT ARE CALLED * 11864000 * TO READ SOURCE CARDS,READ DATA CARDS, PUNCH CARDS, OR PRINT * 11866000 * LINES DURING EXECUTION. THE DCB'S FOR READ AND PNCH ARE NOT * 11868000 * OPENED UNLESS THEY ARE USED, AND IF USED WITHOUT WORKABLE * 11870000 * OPEN'S, THEY DEFAULT BACK TO SORC AND PRNT, RESPECTIVELY. * 11872000 * THESE 4 ENTIRES SHARE A COMMON BASE REGISTER (R13,ALSO @ SAVE* 11874000 * AREA), COMMON VALUES OF R11 (@ AJOBCON) AND R12 ( CONSTANT 1)* 11876000 * COMMON EXIT CODE. SORC AND READ SHARE SOME COMMON CODE (GET)* 11878000 * AND PNCH AND PRNT SHARE SOME COMMON CODE (PUT). * 11880000 * THESE ROUTINES ARE DESIGNED TO ACCEPT THE XIOBLOCK SET UP BY * 11882000 *. THE XIONR MACRO($READ,$PRNT,$PNCH,$SORC). LOCATE MODE IS . 11884000 * USED TO MINIMIZE MOVEMENT OF CARD AND LINE IMAGES. * 11886000 *. *NOTE* REMOTE OPEN/CLOSE PARM LISTS ARE USED TO SAVE SPACE. . 11888000 *. UNDER A DOS SYSTEM, NO SUCH LIST EXISTS DUE TO THE NON- . 11890000 *. EXISTENCE OF MACRO EXECUTE FORMS FOR THE CLOSING OF DTF'S . 11892000 *. USES MACROS: DCB,DCBD(OS) .OR. DTF--(DOS) (OVERALL USE) . 11894000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11896000 11898000 **--> INSUB: XXFIXUP UPDATE BCB POINTERS TO NEXT BUFFER + + + + + + 11900000 11902000 **--> INSUB: XXIOPENO OPEN OPTIONAL DATA SET, FIX FLAGS + + + + + + + 11904000 11906000 **--> ENTRY: XXXXDKE1 COMPLETE PASS1 PROCESSING, SET UP FOR PASS 2 . 11908000 *. XXXXDKE1 IS CALLED FROM UTEND1. XXXXDKE1 WRITES LAST BUFFER . 11910000 *. OR IF NO PREVIOUS WRITES WERE PERFORMED, PASSES UTGET2 THE . 11912000 *. INITIALE ADDRESS OF THE ONLY BUFFER USED. IF AT LEAST 1 . 11914000 *. WRITE TO DISK WAS DONE, XXXXDKE1POINTS THE DISK TO START . 11916000 *. AND READS N-1 BUFFERS FROM THE DISK AND SETS UP FOR . 11918000 *. PASS 2 OF THE ASSIST ASSEMBLER. . 11920000 *. . 11922000 *. REGISTER ASSIGNMENTS . 11924000 *. R14-> XIOBLOCK POINTER REGISTER . 11926000 *. R15-> TEMP. BASE REGISTER . 11928000 *. R2-> COUNTER WORK REGISTER . 11930000 *. R3-> DECB POINTER . 11932000 *. R4-> BUFFER POINTER . 11934000 *. R8-> WORK REGISTER . 11936000 *. . 11938000 *. USES DSECTS:XXIOBLOCK, AVWXTABL . 11940000 *. USES MACROS: READ, WRITE, POINT, CHECK . 11942000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11944000 11946000 **--> ENTRY: XXXXDKOP INITIALIZES FOR DISK UTILITY RUN . . . . . .. 11948000 *. ALL XXXXDK ENTRIES BY RICHARD FORD, PAUL WEISSER. . 11950000 *. XXXXDKOPIS CALLED FROM UTINT1 IF THE DISK UTILITY OPTION . 11952000 *. IS ENABLED. IT PERFORMS A STANDARD FORM OPEN ON THE DISK . 11954000 *. UTILITY DCB, INITIALIZES ANY VARIABLES USED BY THE DISK . 11956000 *. UTILITY ROUTINES. XXXXDKOP ALSO COMPLETES THE DECB'S CREATED . 11958000 *. FOR BUFFER POOL MANAGEMENT BY FILLING IN THE RESPECTIVE . 11960000 *. BUFFER ADDRESS. IN BATCH MODE XXXXDKOP RESETS THE DISK DATA . 11962000 *. SET WITH A POINT MACRO INSTRUCTION. . 11964000 *. . 11966000 *. . 11968000 , 11970000 ASPLM642- 69 11972000 11974000 *. REGISTER ASSIGNMENTS . 11976000 *. R13-> SAVE AREA POINTER . 11978000 *. R14-> XIOBLOCK POINTER REGISTER . 11980000 *. R15-> TEMP. BASE REGISTER . 11982000 *. R0-> HOLDS LOW END POINTER TO BUFFER AREA . 11984000 *. R1-> WORK REGISTER . 11986000 *. R3-> HOLDS NUMBER OF BUFFERS FOR LOOP CONTROL . 11988000 *. R7-> BASE REGISTER FOR AVWXTABL . 11990000 *. . 11992000 *. USES MACROS: POINT (OS), POINTS (DOS) . 11994000 *. USES DSECTS: AVWXTABL, XXIOBLOCK . 11996000 *. . 11998000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12000000 12002000 **--> ENTRY: XXXXDKR RETURN A SET OF RECORD BLOCKS TO UTGET2 . . . . . 12004000 *. XXXXDKRD IS CALLED BY UTGET2 WHEN IT HAS COMPLETED . 12006000 *. PROCESSING A SET OF RECORD BLOCKS. XXXXDKRD RETURNS THE . 12008000 *. ADDRESS OF THE NEXT BUFFER TO BE PROCESSD VIA THE BUFFER . 12010000 *. CONTROL BLOCK AND RE-FILLS THE BUFFER WHICH WAS JUST . 12012000 *. PROCESSED. WHEN ALL BLOCKS HAVE BEEN READ, XXXXDKRD CON- . 12014000 *. TINUES TO ACCEPT CALLS UNTIL ALL BUFFERS HAVE BEEN . 12016000 *. PROCESSED, AT WHICH TIME AN END-OF-FILE INDICATION . 12018000 *. (CC=1) IS RETURNED. . 12020000 *. . 12022000 *. REGISTER ASSIGNMENTS . 12024000 *. R13-> BASE REGISTER AND SAVE AREA POINTER . 12026000 *. R14-> XIOBLOCK POINTER REGISTER . 12028000 *. R15-> TEMP. BASE REGISTER . 12030000 *. R2-> WORK REGISTER FOR COUNTER . 12032000 *. R3-> DECB POINTER . 12034000 *. R4-> BUFFER POINTER . 12036000 *. . 12038000 *. USES MACROS: READ, CHECK . 12040000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12042000 12044000 **--> ENTRY: XXXXDKWT WRITE A FULL BUFFER TO DISK . . . . . . . . 12046000 *. XXXXDKWT IS CALLED FROM UTPUT1 WHEN PASS1 HAS FILLED A . 12048000 *. BUFFER. XXXXDKWT WRITEESTHE BUFFER TO DISK AND UPDATES . 12050000 *. THE BUFFER MANAGEMENT TABLE WHICH RETURNS THE ADDRESS OF . 12052000 *. THE NEXT AVAILABLE BUFFER TO UTPUT1. . 12054000 *. . 12056000 *. REGISTER ASSIGNMENTS . 12058000 *. R13-> BASE REGISTER AND SAVE AREA POINTER . 12060000 *. R14-> XIOBLOCK POINTER REGISTER . 12062000 *. R15-> TEMP. BASE REGISTER . 12064000 *. R3-> POINTER TO CURRENT DECB . 12066000 *. R4-> BUFFER POINTER . 12068000 *. R5-> BUFFER LENGTH USED ACCUMULATOR . 12070000 *. R6-> POINTER TO OLD DECB . 12072000 *. . 12074000 *. USES DSECTS: AVWXTABL, XXIOBLOCK . 12076000 *. USES MACROS: WRITE, CHECK . 12078000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12080000 12082000 **--> ENTRY: XXXXFINI CLOSE ALL DCB'S WHICH ARE OPEN. . . . . . . . . 12084000 *. XXXXFINI USES THE OPEN/CLOSE PARM LIST BUILT DURING EXECUTION. 12086000 *. TO CLOSE ALL DCB'S CURRENTLY OPEN. USES 1 EXECUTE TYPE OPEN.. 12088000 , 12090000 ASPLM642- 70 12092000 12094000 *. DOS GENERATIONS HAVE NO OPEN/CLOSE LIST, SO A CHECK MUST BE . 12096000 *. MADE TO SEE WHICH DCB'S MUST BE CLOSED. . 12098000 *. ENTRY CONDITIONS . 12100000 *. R11= @ AJOBCON DUMMY SECTION . 12102000 *. EXIT CONDITIONS . 12104000 *. AJIO-- FLAGS ARE ALL ZEROED OUT. . 12106000 *. USES DSECTS: AJOBCON . 12108000 *. USES MACROS: $RETURN,$SAVE,CLOSE . 12110000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12112000 12114000 **--> ENTRY: XXXXINIT INITIAL OPEN FOR READER/PRINTER . . . . . . . . 12116000 *. OPENS PRINTER,SOURCE CARD RDR. INITIALIZES XXIOCPTR, WHICH . 12118000 *. ALWAYS HAS BEGINNING @ OF OPEN/CLOSE PARM LIST (OS GEN. ONLY). 12120000 *. ENTRY CONDITIONS . 12122000 *. R11= @ AJOBCON DUMMY SECTION . 12124000 *. AJIO-- FLAGS IN AJOBCON ARE ALL ZEROS. . 12126000 *. EXIT CONDITIONS . 12128000 *. AJIOSO,AJIOPR FLAGGED WITH AJIOPEN IF DCB'S OPEN)D PROPERLY. . 12130000 *. USES MACROS: $RETURN,$SAVE,OPEN . 12132000 *. USES DSECT: AJOBCON . 12134000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12136000 12138000 **--> ENTRY: XXXXPNCH PUNCH A CARD, OPENING IF REQUIRED . . . . . . . 12140000 *. CALLED BY $PNCH MACRO TO PUNCH A CARD (DDNAME FT07F001). IF . 12142000 *. THE DCB XXPNDCB CANNOT BE OPENED, OR IF NOPUNCH WAS USED IN . 12144000 *. THE USER PARM FIELD, THE CARD IS PRINTED (DDNAME FT06F001) . 12146000 *. WITH ' CARD-->' PRECEDING IT TO NOTE USAGE. . 12148000 *. ENTRY CONDITIONS - SAME AS ENTRY XXXXREAD . 12150000 *. EXIT CONDITIONS . 12152000 *. CC= 0 NORMAL RETURN, CARD WAS PUNCHED OR RPINTED . 12154000 *. CC= 1 RECORD LIMIT HAS BEEN EXCEEDED, CARD PUNCHED ANYWAY . 12156000 *. USES DSECTS: AJOBCON,IHADCB,XIOBLOCK . 12158000 *. USES MACROS: OPEN,PUT . 12160000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12162000 12164000 **--> ENTRY: XXXXPRNT PRINT ONE LINE OF OUTPUT. . . . . . . . . . . . 12166000 *. CALLED BY $PRNT MACRO TO PRINT 1 LINE, USING DDNAME FT06F001.. 12168000 *. ENTRY CONDITIONS - SAME AS ENTRY XXXXREAD . 12170000 *. EXIT CONDITIONS - SAME AS XXXXPNCH . 12172000 *. USES DSECTS: AJOBCON,IHADCB,XIOBLOCK . 12174000 *. USES MACROS: PUT . 12176000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12178000 12180000 **--> ENTRY: XXXXREAD READ 1 CARD AT USER EXECUTION TIME. . . . . . . 12182000 *. OPENS CARD READER(DDNAME FT05F001) IF NOT ALREADY OPEN, OR . 12184000 *. USES OPEN READER (DDNAME FT00F001) TO GET 1 CARD, USING THE . 12186000 *. COMMON CODE SECTION XXIOGET. IF NODATA WAS SPECIFIED IN THE . 12188000 *. USER PARM FIELD, NO OPEN WILL BE DONE FOR FT05F001, BUT . 12190000 *. SYSIN WILL BE USED INSTEAD. CALLED BY $READ MACRO. . 12192000 *. ENTRY CONDITIONS . 12194000 *. R0 = @ I/O AREA WHERE DATA TO BE READ/WRITTEN . 12196000 *. R14= @ XIOBLOCK CREATED BY THE CALLING XIONR MACRO. . 12198000 *. R15= ENTRY POINT ADDRESS . 12200000 *. EXIT CONDITIONS . 12202000 *. CC= 0 NORMAL RETURN, CARD WAS READ AND TRANSFERRED TO USER . 12204000 *. CC= 1 ENDFILE ON READER. IF ASSIST JCL, SAVED IN AJOBCON. . 12206000 *. USES MACROS: GET,OPEN . 12208000 , 12210000 ASPLM642- 71 12212000 12214000 *. USES DSECTS: AJOBCON,XIOBLOCK . 12216000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12218000 12220000 **--> ENTRY: XXXXSORC READ A CARD DURING ASSEMBLY TIME. . . . . . . . 12222000 *. CALLED BY MACRO $SORC TO READ CARD FOR ASSEMBLER, USING . 12224000 *. ALREADY OPEN DCB (DDNAME SYSIN). . 12226000 *. ENTRY CONDITIONS - SAME AS THOSE FOR ENTRY XXXXREAD. . 12228000 *. EXIT CONDITIONS - SAME AS THOSE FOR ENTRY XXXXREAD. . 12230000 *. USES DSECTS: AJOBCON,XIOBLOCK . 12232000 *. USES MACROS: GET . 12234000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12236000 , 12238000 ASPLM642- 72 12240000 12242000 **--> CSECT: XXXXSNAP DEBUGGING OUTPUT, COMPLETION DUMP . . . . . . . 12244000 *. THIS MODULE PROVIDES ALL REGISTER AND STORAGE DUMPING FOR . 12246000 *. DEBUGGING PURPOSES, BOTH FOR INTERNAL ASSIST DEBUGGING, AND . 12248000 *. FOR USER PROGRAMS DURING EXECUTION. IT IS CALLED BY THE . 12250000 *. MACRO XSNAP (XDUMP PSEUDO-INSTRUCTION FOR USER PROGRAMS), . 12252000 *. AND PRODUCES A USER DUMP OR DEBUGGING OUPUT IF THE CALLING . 12254000 *. XSNAP SPECIFIED A BINARY VALUE FOR OPERAND T(3). . 12256000 *. ENTRY CONDITIONS . 12258000 *. SEE XSNAP CONTROL BLOCK AND POINTERS ON ENTRY TO XSNAP COMMENTS. . 12260000 *. ALSO, IF SPECIAL ASSIST OUTPUT IS DESIRED I.E. T(3) IS USED, THE . 12262000 *. WORD IN XXSRGSAV WHERE REGISTER R10 WAS SAVED MUST CONTAIN THE . 12264000 *. ADDRESS OF THE ECONTROL DUMMY SECTION, WHICH SUPPLIES VALUES . 12266000 *. EXIT CONDITIONS . 12268000 *. ALL REGISTERS AND CONDITION CODE ARE RESTORED TO ORIGINAL VALUES . 12270000 *. AFTER EXECUTION OF THE INSTRUCTION AT THE RETURN POINT. . 12272000 *. USES DSECTS: ECONTROL,XXSNAPC . 12274000 *. USES MACROS: $PRNT(IF &$DEBUG=1), OPEN,PUT(IF&$DEBUG=0) . 12276000 *. NAMES: XX------ , ALL NAMES ADDED FOR ASSIST: XXAS---- . 12278000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12280000 12282000 **--> ENTRY: XXXXSNIN XXXXSNAP INITIALIZATION ENTRY . . . . . . . . . 12284000 *. CALLED TO INITIALIZE 'XSNAP - CALL' NUMBER TO 1 (IN CASE . 12286000 *. BATCHED RUNS ARE USED). . 12288000 *. ENTRY CONDITIONS . 12290000 *. R14= RETURN ADDRESS . 12292000 *. R15= @ XXXXSNIN . 12294000 *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12296000 , 12298000 ASPLM642- 73 12300000 12302000 **--> CSECT: XXXXSPIE INTERRUPT CONTROL & COMMUNICATIONS . . . . 12304000 * SCOTT A SMITH - FALL 1971. . 12306000 *. THIS IS CALLED ONLY FROM THE MACRO EXPANSION OF $SPIE. IT . 12308000 *. CONTAINS THE ONLY MACROS THAT CAUSE LINKAGE TO BE SET UP . 12310000 *. BETWEEN THE SUPERVISOR AND THE EXIT ROUTINE FOR INTERRUPT . 12312000 *. HANDLING. THE INITIAL COMMUNICATIONS ARE NEVER MADE UNLESS . 12314000 *. AT LEAST ONE $SPIE IS EXPANDED. ONLY ONE ACTUAL SUPERVISOR . 12316000 *. CALL IS NECESSARY. ALL OTHER $SPIE EXPANSIONS JUST MANI- . 12318000 *. PULATE THE CONTROL BLOCKS GENERATED BY THAT EXPANSION. . 12320000 *. **NOTE** XXXXSPIE CONTAINS THE ONLY OCCURENCES OF THE . 12322000 *. MACROS SPIE (OS) OR STXIT (DOS) . 12324000 *. NAMES: XSP----- . 12326000 *. . 12328000 *. THIS ENTRY HANDLES THE UPDATING OF THE POINTER TO THE . 12330000 *. ACTIVE XSPIEBLK . . 12332000 *. ENTRY CONDITIONS . 12334000 *. R1 = @ NEWLY CREATED ACTIVE XSPIEBLK (OR RESTORED XSPIEBLK) . 12336000 *. R14= RETURN ADDRESS . 12338000 *. R15= @ ENTRY POINT . 12340000 *. EXIT CONDITIONS . 12342000 *. R1 = @ LAST PREVIOUS ACTIVE XSPIEBLK . 12344000 *. = 0 , IF NO PREVIOUS XSPIEBLK'S EXISTED . 12346000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12348000 12350000 **--> INSUB: XXXXSPEX INTERRUPT EXIT ROUTINE * 12352000 12354000 **--> ENTRY: XXXXSPIN INITIALIZATION OF INTERRUPT COMMUNICATIONS. . 12356000 *. THE ONLY NECESSARY SPIE(OS) OR STXIT(DOS) IS EXECUTED HERE . 12358000 *. TO CATCH ALL INTERRUPTS AND TO REQUEST THE RETURN OF CONTROL . 12360000 *. TO THE SAME EXIT ROUTINE HANDLER. AS SUBSEQUENT $SPIE'S . 12362000 *. ARE ISSUED, NO SVC IS NEEDED; JUST AN ANALYSIS OF THE . 12364000 *. STATUS OF THE ACTIVE CONTROL BLOCK(XSPIEBLK) BY THE COMMON . 12366000 *. INTERRUPT EXIT ROUTINE. . 12368000 *. USES MACROS: SPIE(OS) OR STXIT(DOS),$SAVE,$RETURN . 12370000 *. ENTRY CONDITIONS . 12372000 *. R14= RETURN ADDRESS . 12374000 *. R15= @ ENTRY POINT . 12376000 *.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12378000 , 12380000 ASPLM660-1 12382000 12384000 APPENDIX VI. INTERNAL DEBUGGING AIDS 12386000 12388000 ASSIST contains various debugging facilities to be used by any 12390000 programmer making modifications to the ASSIST source program. A macro 12392000 is provided for dumping registers and storage, conditional on flags 12394000 set at execution time. Program tracing may be performed, again 12396000 depending on execution-time flag settings. Debugging flags may be set 12398000 by supplying a value to the DEBUG option of the user PARM field, 12400000 during either pass of the assembly, or during user program execution. 12402000 This appendix supplies the programmer with the information needed to 12404000 create a debug version of ASSIST, make use of the debug code already 12406000 in the ASSIST program, and possibly write additional debugging code of 12408000 his own. 12410000 12412000 A. GENERATION OF DEBUG CODE 12414000 12416000 All debug code currently provided in ASSIST is controlled by a 12418000 single SET symbol, &$DEBUG, as follows: 12420000 12422000 &$DEBUG=1 No debugging code is generated anywhere in ASSIST. 12424000 12426000 &$DEBUG=0 Debugging code is generated in many sections of 12428000 ASSIST, depending on local requirements. 12430000 12432000 All debugging output is done using the macro XSNAP, which includes 12434000 performing tests on data flags before actually producing output. This 12436000 macro is used by itself in some places, and is also called to perform 12438000 tracing functions on entry and exit to some subroutines. The usage of 12440000 this macro is described in a separate writeup. Briefly, it prints 12442000 labeled output which can show the registers, any number of storage 12444000 areas, and information such as the PSW where it was called from, 12446000 without destroying any registers or the condition code. If needed, 12448000 it can make execution-time tests to determine whether or not output 12450000 should be printed. 12452000 12454000 It is suggested that any additional debugging code added to 12456000 ASSIST should be made conditional on the value of &$DEBUG, or at 12458000 least upon another SET variable, in order to maintain a source 12460000 program with large quantities of debugging code in it which can be 12462000 completely suppressed for creation of a production system. 12464000 , 12466000 ASPLM660-2 12468000 12470000 B. SET SYMBOLS AND MACROS USED IN DEBUGGING 12472000 12474000 This section describes debugging SET symbols, macros, and the 12476000 interactions among them. 12478000 12480000 1. SET SYMBOLS 12482000 The following are also listed in Appendix II. 12484000 12486000 a. &DEBUG 12488000 This symbol is set by the macro $DBG, and always contains a 12490000 character string which is a hexadecimal self-defining term. It is 12492000 used by the XSNAP macro called by the XSRTR macro in a TM instruction. 12494000 12496000 b. &TRACE 12498000 This symbol gives the type of tracing to be performed at 12500000 subroutine entry/exit. It is set by $DBG macro, and contains one of 12502000 the following three values: 12504000 NO no trace code will be generated by an XSRTR macro. 12506000 * the XSNAP called by XSRTR will do nothing but print a 12508000 message noting entry/exit of the given routine. 12510000 SNAP the XSNAP will not only print the message as above, but 12512000 will also print out the GP registers. 12514000 12516000 2. MACROS 12518000 12520000 a. $DBG 12522000 This macro is called to set the values of &DEBUG and &TRACE, which 12524000 will be used as set by all $SAVE and $RETURN macro calls, until the 12526000 next $DBG call is made. In most cases, $DBG is called one time at the 12528000 beginning of each control section, to set the debugging output desired 12530000 during that section. 12532000 12534000 b. $RETURN 12536000 This is the extended RETURN macro for exiting from a subroutine. 12538000 It calls macro XRETURN, supplying certain defaults. XRETURN calls 12540000 XSRTR macro, which generates any tracing code required. 12542000 12544000 c. $SAVE 12546000 This is an extended SAVE macro, which calls XSAVE macro, which 12548000 then calls XSRTR to generate any trace code required. 12550000 12552000 d. XSNAP 12554000 This is the primary debugging macro, and is a slightly modified 12556000 version of the XSNAP macro which can be used by anyone writing in 12558000 assembler. It is used both by itself, and as an inner macro for XSRTR 12560000 to generate all debugging code. It generates a call to the module 12562000 XXXXSNAP to perform any output formatting and printing. All XSNAP 12564000 calls in a section of code can be nullified by setting the GBLB 12566000 variable &XSNAPST to 1, with the exception of the XSNAP calls which 12568000 have a value in the third position of the T= operand. These calls 12570000 are always generated, since they are used to produce completion dumps 12572000 or user execution-time debugging dumps. 12574000 12576000 e. XSRTR 12578000 This macro is called to create trace code for $SAVE or $RETURN, 12580000 and is a modified version of the normal one. No trace code is created 12582000 if &$DEBUG=1, or if &TRACE=NO. The XSNAP call it creates performs a 12584000 TM AVDEBUG,&DEBUG , so it is currently used only in the assembler. 12586000 , 12588000 ASPLM660-3 12590000 12592000 C. INDIVIDUAL SECTION DEBUGGING CODE DESCRIPTION 12594000 12596000 For each major portion of the ASSIST program, this section notes 12598000 the debug flags used, the methods by which they are set, how they are 12600000 tested, and every place in each control section where debugging output 12602000 may be produced. It also notes any other debugging code present. 12604000 Please recall that none of the code mentioned below is generated if 12606000 &$DEBUG is set to 1 , i.e., a pure production program. If necessary, 12608000 &$DEBUG can be changed at various places, in order to produce debug 12610000 code in some sections but not in others. However, the current version 12612000 does not do this anywhere. 12614000 12616000 1. MAIN CONTROL AND SERVICE SUBPROGRAMS 12618000 12620000 a. FLAG BYTE: AJODEBUG (in AJOBCON dsect) 12622000 12624000 b. FLAG SETTING: supply the following option in the PARM field on 12626000 the EXEC card of a user program: 12628000 12630000 DEBUG=decimal# 12632000 12634000 A debug version of APARMS accepts this option, and stores the last byte 12636000 of the number's value into the byte AJODEBUG for later use. 12638000 12640000 c. FLAG TESTING: various XSNAP calls perform Test under Mask 12642000 instructions referencing AJODEBUG, to determine if output should be 12644000 produced or not, i.e. use operand IF=(AJODEBUG,O,mask,TM) . 12646000 12648000 d. DEBUG OUTPUT LOCATIONS: the following lists all debug output 12650000 code in this section of ASSIST, describing locations, test values used, 12652000 and output produced. 12654000 12656000 CSECT MASK VALUE(HEX) OUTPUT LABEL/LOCATION/OUTPUT PRODUCED/PURPOSE 12658000 12660000 ASSIST 08 'AFTER TIME/RECORDS SET' 12662000 immediately after PARM field has been printed, 12664000 near label ASPNP. 12666000 prints registers, all of AJOBCON control block 12668000 This is used to show the status of all overall job12670000 control values, after time and records limits have 12672000 been set, and PARM field scanned. 12674000 12676000 ASSIST 02 'ECONTROL BEFORE EXECUT' 12678000 after ECONTROL section has been completely filled 12680000 in before user program is executed, between labels 12682000 ASEXECAL and ASDUMPCL. 12684000 prints registers, all of ECONTROL dummy section. 12686000 This is used to show complete status of user 12688000 program ,just before execution. 12690000 12692000 ASSIST 04 'USER STORAGE BEFORE EXEC(FAKE ADDR)' 12694000 after ECONTROL section has been completed, just 12696000 after just previous output code. 12698000 prints all of user storage, giving the addresses 12700000 as they are in the assembly listing. 12702000 This is used to make sure the assembler has done 12704000 assembly and loading the user program properly. 12706000 , 12708000 ASPLM660-4 12710000 12712000 CSECT MASK VALUE(DEC) OUTPUT LABEL/LOCATION/OUTPUT PRODUCED/PURPOSE 12714000 12716000 APARMS 01 'APMSCAN' 12718000 after label APMSCAN, i.e., just before scanning 12720000 of next option in the PARM field is done. 12722000 prints registers, section of AJOBCON from AJOPARMA12724000 to AJIOFLAG, sufficient to get flags set here. 12726000 This is used to check scanning and conversion 12728000 code inside APARMS. 12730000 12732000 APARMS 01 'APFOUND' 12734000 after label APFOUND, i.e., after an option has bee12736000 scanned and found in the table of legal options. 12738000 prints registers, and the APCBLK of the option 12740000 found (APCBLK contains the option name and flags). 12742000 This is used to check table lookup, and make sure 12744000 all registers are set correctly. 12746000 12748000 12750000 e. ADDITIONAL DEBUG CODE (PRODUCES NO OUTPUT) 12752000 12754000 The following lists code which is conditional on &$DEBUG, but 12756000 produces no output. Note that some of this code may be absolutely 12758000 necessary to allow setting of debug flags. 12760000 12762000 CSECT PURPOSE/LOCATION/DESCRIPTION 12764000 12766000 ASSIST Zero memory. 12768000 just before label ASJINIT, after the single large 12770000 block of memory has been obtained for a workarea. 12772000 Zeroes workarea, which is useful for debugging, and 12774000 also minimizes size of any dump caused. 12776000