THE UNIVERSITY OF TENNESSEE
Computer Science Department
8 Ayres Hall
Knoxville, TN 37916 USA
Telephone (615) 974-5067


ASSIST-V
Program Logic Manual

Charles E. Hughes
Charles P. Pfleeger

CS-77-25      May 1978

The work described here was supported by the National Science Foundation, under grant SER 76-14494.


TABLE OF CONTENTS

  1. SYSGEN PARAMETERS
    1. Parameters for ASSIST-V Only
    2. Time, Records and Page Control
    3. Main Storage Management
  2. ASSEMBLING ASSIST-V
  3. JCL REQUIREMENTS DURING EXECUTION
  4. ASSIST-V MODULE OVERVIEW
    1. The Main Interpreter and XOPC Handling
    2. Channel-Level I/O Simulation
  5. OUTPUT PRODUCED
    1. Header Line
    2. Source, XREF, and Output
    3. Termination Statistics and Dump
  6. CHANGING ASSIST-V
  7. DEBUGGING ASSIST-V
    1. Debugging Aids
    2. Known Bugs
    3. What to Do in Case of an Error
BIBLIOGRAPHY
APPENDIX A - ASSIST-V SYSGEN PARAMETERS
APPENDIX B - OVERLAY STRUCTURE
APPENDIX C - FORMAT OF DEVICE TABLE
APPENDIX D - SAMPLE JCL

PURPOSE

This document is intended for the person who will be creating and maintaining a version of ASSIST-V. It contains information on how to assemble a version of ASSIST-V tailored to the needs of a particular installation, how to modify ASSIST-V, and how to diagnose and correct problems that might arise.


I. SYSGEN PARAMETERS

The first step in bringing up a version of ASSIST-V is to set a series of parameters internal to ASSIST-V, configuring a version of ASSIST-V that meets the needs of a particular installation. The majority of parameters that may be set are also parameters within standard ASSIST, so any installation that has generated a version of ASSIST may want to refer to the settings used for that version. A description of ASSIST parameters is contained in the ASSIST Program Logic Manual [3]. Appendix A contains the full list of parameters in ASSIST-V, and their default values. This section will discuss the main parameters used in ASSIST-V.

A. Parameters For ASSIST-V Only

One SETB variable controls whether or not virtual simulation code will be generated in a version of ASSIST; this variable is &$VIRT. A setting of 1 implies a virtual simulation version of ASSIST is to be generated. Three additional SETA variables must also be set for creation of a proper ASSIST-V module. The variables are &$VI#MPX, &$VI#DSK, and &$VI#DRM, which are the maximum number of multiplexer (reader and printer), movable head disk, and fixed head storage (drum) devices that may exist in the version of ASSIST-V. These variables must be at least as large as the number of each type of device to be generated; they can, however, be greater than needed.

If the value of &$VIRT is 1, then the values of &$PRIVOP and &$EXINT will be forced to 1. (These two variables control whether or not privileged operations are to be simulated, and whether or not the optional extended interpreter is to be used. For both of these, the value 1 implies yes.)

B. Time, Records and Page Control

ASSIST monitors the amount of job time used during assembly and execution of a program, as well as the amount of output produced during this time. This is done so that in the event a user program exceeds these limits, ASSIST can terminate the user, print a dump of part of the user's storage, and halt before ASSIST is terminated by the operating system. There are four groups of parameters that control checking of time, lines of output ("records"), pages of output produced, and number of instructions simulated during user program execution. With the exception of instructions, each of these groups has three phases of counting going on during a run: an overall count, a limit on execution of the user program (excluding program assembly or source listing), and an amount reserved for a program dump.

Parameters associated with limitations on the user program are listed below. Two forms of each parameter, a -DF (default) form and a -MX (maximum) form, are given. The default (-DF) will be in effect unless the user codes an overriding parameter on the JCL EXEC card, or on the ASSIST $JOB card. In no event may an overriding value exceed the maximum (-MX) value, however.

           Parameter                       Meaning

           &$TDF &$TMX    total  amount  of  time  (in   seconds)   for   assembly,
                          execution, and dump, allowed for this job.
           &$TXDF &$TXMX  maximum  amount of time allowed for execution of the user
                          program
           &$TDDF &$TDMX  amount of time reserved from user execution  time  for  a
                          termination dump, if one is needed
           &$RDF &$RMX    total number of records (lines) of printed output allowed
                          for assembly, execution, and dump
           &$RXDF &$RXMX  maximum  number  of  records allowed to be printed during
                          execution of the user program
           &$RDDF &$RDMX  number of records reserved to print a user dump,  if  the
                          program terminates abnormally
           &$PMX &$PDF    total  number  of page ejects (either explicit or because
                          the last line on a page has been filled) during assembly,
                          user program execution, and dump
           &$PXDF &$PXMX  maximum number of page ejects allowed during execution of
                          the user program.
           &$PDDF &$PDMX  number of whole pages of output reserved for  a  dump  in
                          case a program terminates abnormally
           &$IDF &$IMX    maximum  number  of  instructions whose execution will be
                          simulated during user program execution

The maximum values for these parameters should always be set higher than the largest user program could possibly need, since once assembled into a version of ASSIST-V, they cannot be changed. The default values should be set low enough to trap inadvertent loops in a user program, no higher than any corresponding operating system limit, but high enough that most programs will execute without needing to modify the parameters.

Both records and pages are counted. Some installations count pages of printed output, and others count records; both seek to limit programs in runaway printing loops. Some installations set one of these reasonably low while effectively disabling the other with high values; thus only one type of count is then in effect. One installation, for example, has a high-priority job category in which execution time is limited to 30 seconds, and output lines are limited at 2000. Pages of printed output are not monitored. That installation chose the following settings.

           &$TDF='30'       &$RDF=2000      &$PDF=100      &$IDF=999999
           &$TMX='1000'     &$RMX=10000     &$PMX=100      &$IMX=999999
           &$TXDF='1000'    &$RXDF=1800     &$PXDF=15
           &$TXMX='1000'    &$RXMX=10000    &$PXMX=100
           &$TDDF='.1'      &$RDDF=100      &$PDDF=1
           &$TDMX='10'      &$RDMX=10000    &$PDMX=100

Because execution time was to be monitored, this installation decided to use a very high value for number of instructions of simulated execution. Similarly, because output records would be counted, the number of page ejects was decided to be allowed to be very high. The exception to this was for the number of page ejects during execution, which was placed rather low to terminate a user who inadvertently printed one line per page (through use of a carriage control character of '1' instead of ' ', for example).

A comment is in order on the method for determining limits during execution of a user program. The maximum for TX, RX or PX is either the &$TXDF, &$RXDF, &$PXDF (default) value, or the value supplied by the user by TX=, RX= or PX= on the JCL EXEC card or the ASSIST $JOB card. (A user-supplied value always takes precedence over a default value.) However, the limit for these items cannot exceed the overall limit through T, R or P, from &$TDF or T=, etc. Thus the limit during execution is the smaller of (a) the amount remaining of the resource, or (b) the maximum for TX, RX, or PX, both reduced by the amount to be reserved for a dump. For example, assume that a job is being run using all of the above parameter settings, that the user has not specified any R, RX, or RD values, and that 800 lines were printed during assembly (headers, source listing, cross reference, error messages). The limit on records produced during execution will be

2000 - (800 used) - (100 for dump) = 1100.

This limit exists in spite of a default RX value of 1800, because only 1100 remain from the overall limit of 2000 records.

C. Main Storage Management

ASSIST-V and ASSIST operate in an interpretive mode, so a major part of the monitor remains in core during program execution. ASSIST does much of its own storage management, but some cooperation will help ASSIST to run in a smaller area. ASSIST-V running at the University of Tennessee requires approximately 72K bytes for the ASSIST-V package itself, plus space for buffers and for the user program. A non-overlaid version of ASSIST-V can operate in any region of size 96K or above, although a larger region is preferable. Selecting space management options involves a number of competing values. In this section we will explain what we have observed, without claiming that our choices are optimal.

ASSIST begins execution by executing a GETMAIN macro to obtain all storage remaining in the region in which it runs. This dynamic space is used for the symbol table, for generated object code, and for storing the source program between passes of the assembly. After obtaining all space, ASSIST returns an amount to the operating system to use for buffers during execution. The amount of space returned is governed by &$FREE, &$FREEMN and FREE= on EXEC and $JOB cards. &$FREE is the default to be returned; &$FREEMN is the minimum amount to be returned, and FREE= is the user-requested amount. &$FREEMN=2048 is an absolute minimum. We have found that &$FREE=6144 or =8192 is a reasonable value to use if macro libraries are being accessed and the disk is being used for intermediate source text storage. These values will vary depending on the blocking factor of the library, the size of disk buffers, and the number of other devices to be opened.

The use of disk intermediate storage seems to help storage management problems (which are identified by the ASSIST messages AS999: dynamic storage exceeded, and AM003: storage overflow before execution). In order to use intermediate disk space, the parameter &$DISKU should be set =1 (allowing the user to choose whether or not to use intermediate disk) or =2 (forcing intermediate disk space on each run). Parameter &$BLEN should be set to the desired block size for this data set, and &$FREE or FREE= should be raised by that amount to account for another buffer needed. The header line on any ASSIST-V run shows the settings of &$DISKU and &$FREE.

Another technique for improving storage management is to delete unneeded features of ASSIST. For example, support exists for conversion from 026 to 029 keypunches, although one installation may have only model 029 machines. It will save a bit of space to eliminate this unneeded option (&$KP26=0). We have found that the floating point instruction set is not important for the types of programs for which ASSIST-V was designed. Therefore, we customarily eliminate all support for the floating point instructions and registers (&$FLOTA=0, &$FLOTAX=0, &$FLOTE=0, &$FLOTEX=0). Similarly, since ASSIST-V simulates an IBM S/360, it is not necessary to support the code that will permit assembly and simulated execution of the S/370-only instructions such as ICM, CLCL, etc. Our standard running version eliminates this option (&$P370=0, &$P370A=0, &$S370=0, &$S370A=0). Similarly, we do not use the replacement facility during ASSIST-V runs, and so we commonly eliminate the REPL option (&$REPL=0).

Deletion of these unneeded options reduces the size of the ASSIST-V version, and permits larger programs to be run under ASSIST-V. Appendix A contains the list of all sysgen parameters that may be set to configure a version of ASSIST-V, along with their default settings.

Another techniques that reduces main storage requirements is to run ASSIST-V as an overlay program. The linkage editor control statements in Appendix B show one way this can be done.

II. ASSEMBLING ASSIST-V

A series of 6 data sets that comprise the source code of ASSIST-V are provided on the distribution tape. These data sets are files 11 through 16, having data set names SOURCE1 through SOURCE6. The contents of these files is as for standard ASSIST: SOURCE1 contains the set symbols, macro definitions and DSECTs needed in order to assemble any part of ASSIST-V. SOURCE2 contains the monitor and support modules. SOURCE3 is the basic assembler. SOURCE4 contains the replacement monitor. SOURCE5 contains the macro processor. SOURCE6 contains the interpreter that simulates execution of the user program. These may be assembled separately, in any combination, except that SOURCE1 must be assembled with each other group.

The values selected for sysgen parameters as described above must also be supplied to each assembly. This is most commonly done by use of the macro ASSYSGEN. This macro is called once per assembly, just after setting internal default values for the set symbols, and prior to using their values. The values of the set symbols may be changed by coding a local version of ASSYSGEN. This macro should contain a GBLA, GBLB or GBLC statement for each sysgen set symbol to be changed. A SETA, SETB or SETC should then be listed giving the new value. The macro need contain nothing else. This macro is then placed in a partitioned data set and concatenated to the standard macro library used in assembly. Sample JCL to place such a macro in a library is shown in Appendix D.

To assemble ASSIST-V with Assembler G requires a region of 256K to make an assembly, using up to 4 minutes on a S/360-65. Sample JCL to create a version of ASSIST-V is shown in Appendix D. To facilitate multiple assemblies, ASSIST-V is supplied without an END statement. This will cause an error during assembly, but does not prevent successful creation of an object module. Similarly, if no ASSYSGEN macro is provided, this will cause an assembly error, but will not cause problems with the object code.

III. JCL REQUIREMENTS DURING EXECUTION

Following is a sample of a cataloged procedure for ASSIST-V.

           //GO     EXEC  PGM=ASSISTV
           //STEPLIB  DD  DSN=steplibname,DISP=SHR
           //*            ASSIST-V SIMULATED DEVICES
           //VIRTDSK1 DD  UNIT=SYSDA,SPACE=(1692,80)
           //VIRTDRM1 DD  UNIT=SYSDA,SPACE=(2048,20)
           //VIRTPRT1 DD  SYSOUT=A,DCB=(RECFM=FBM,LRECL=133,BLKSIZE=133)
           //VIRTPRT2 DD  SYSOUT=A,DCB=(RECFM=FBM,LRECL=133,BLKSIZE=133)
           //*            STANDARD DATA SETS
           //FT06F001 DD  SYSOUT=A
           //FT07F001 DD  SYSOUT=B
           //FT08F001 DD  UNIT=SYSDA,SPACE=(TRK,(10,10))
           //SYSLIB   DD  DSN=SYS1.MACLIB,DISP=SHR
           //FT05F001 DD  DDNAME=INPUT

VIRTDSK1 is the single disk having device address X'101'; VIRTDRM1 is the drum at address X'201'. The two printers, X'00E' and X'00F', respectively, are identified by the VIRTPRT1 and VIRTPRT2 statements. In addition, two data sets for readers X'00C' and X'00D' should be provided through names VIRTRDR1 and VIRTRDR2. These data sets are for the I/O operations performed through channel level I/O.

Additional data sets are used during assembly of an ASSIST-V program. These are SYSIN for the user's source program; FT06F001 for source listing, cross reference, output from XPRNT and XDUMP, and termination messages; FT07F001 for punched output, from an object deck or from XPNCH; FT08F001 for intermediate disk storage during assembly (needed only if &$DISKU>0); SYSLIB for user ability to call library macros; and FT05F001 for execution time input through XREAD's. (The names for these data sets are controlled through variables &$IOUNIT and may be changed at SYSGEN time.)

IV. ASSIST-V MODULE OVERVIEW

The simulated execution time package of ASSIST-V consists of three principal modules, plus a group of support modules. The three primary modules are VIRTIO (source code sequence numbers 80000000 to 80099999) which handles all simulated channel I/O, EIOPCS (source code 81000000 to 81009999) which handles all XOPC instructions, and EXECUT (source code 83000000 to 88999999) which is the interpreter for machine instructions. Support routines include XXXXDECI (conversions), XXXXIOCO (standard I/O support), XXXXSNAP (dump and XDUMP printing), XXXXSPIE (monitors program interrupts), XXXXGET/XXXXPUT (extended I/O support), and VIDAIO (direct access I/O interface package).

A. The Main Interpreter and XOPC Handling

EIOPCS is called by EXECUT each time an XOPC (extended OP code--see [1] and [2]) executed. After performing the function necessary for the particular XOPC, this routine returns to EXECUT, using the condition code and a flag to indicate success or failure.

EXECUT is the main interpreter. It is invoked by the monitor ASSIST after a successful assembly. EXECUT consists of a set of initialization code, a fetch-decode-execute loop, and a set of termination code.

The initialization section sets the event list and the pending interrupt list to empty.

The main interpreter loop (source code 83578000) selects the next instruction to be executed and updates the PSW. The time of the previous instruction and any other delay time is accumulated to give a value of the current simulated time. The table VITIMTAB (source code 88000020 to 88000510), which is indexed by opcode, contains the simulated execution time of each instruction. There are two values for each opcode. The first of these is the "base" time of the instruction. For most instructions, this is simply the execution time of the instruction; for instructions that have variable execution times, such as SS instructions, shifts, and branches, this first value is the minimal time for the instruction's execution. The second value is an increment factor. For most instructions this value is zero; for variable time instructions, however, it is the time for each unit of work performed during execution, where a "unit of work" is a single byte moved, a hex digit shifted, etc. The interpreter uses this table to determine the amount of simulated time the preceding instruction took, thereby determining the current simulation time.

The timer (memory location X'50') is decremented if one or more timer units have passed since it was last decremented. If the timer passes from positive or zero to negative, an external interrupt is signalled in VIPEND. The event list is scanned to determine if there are any events to occur at the current simulated time, and if so, they are performed. Finally VIPEND is checked against the current system mask in the PSW to see if any pending interrupts can now be accepted; if so they cause storing of an old and fetching of a new PSW. A PSW swap is noted in both the instruction trace stack and the branch trace stack; furthermore, if desired the PSW swap is indicated in trace output.

Each instruction opcode is used as an index into a table (EIOPCDTB) of pointers to an instruction control table (EICONTAB). EICONTAB is the table that indicates the manner in which an instruction is to be interpreted. Depending on its type (RR, RX, SI, SS, etc.) the instruction is decoded, and the needed user register values are loaded. The instruction is then simulated. Instruction decoding and execution is monitored for legality, and any condition that would cause a program interrupt is trapped. The occurrence of such a program exception causes VIPEND to be set so that a program interrupt will be simulated. After execution of one instruction, control returns to the main loop head and the fetch-decode-execute cycle repeats.

Any time that normal instruction execution ceases (with bit 14 of the PSW [the wait bit] equal "1"), a discrete time jump occurs. This simply means that the current simulated time is advanced to the next time at which an event is to occur--the timer passing from zero to negative or an I/O interruption happening. If the timer contains a negative value and if there is no I/O in progress, then loading of a PSW containing 1 in bit 14 is recognized as an interminable wait condition, since there are no remaining events to cause a discrete time jump. In this case, the user program is terminated with error V02, excessive wait time.

If the execution of the instruction causes a program termination, either due to normal termination (XOPC 24) or abnormally (such as through time or output overrun, excessive wait time, excessive number of instructions executed, user requested abend, etc.), the exit code is entered (83458000). In this section the final statistics on the simulation are dumped. The final PSW is formed, the internal SPIE is cancelled, a flag may be set to trigger a termination dump, and return occurs to the ASSIST monitor.

ASSIST (main control section) invokes XXXXSNAP to print a termination dump. It then closes open data sets, and halts the run.

B. Channel-Level I/O Simulation

VIRTIO CSECT consists of six logical sections. The first section is called by EXECUT when an HIO, TIO, TCH or SIO opcode is to be executed; it completely handles HIO, TIO and TCH, and it passes control to the third section for SIO handling.

The second section contains all tables and buffers to permit I/O simulation. Each available device has associated with it a table (in the form of DSECT VIDVTABD), called its VIDVTAB. This table indicates the current status of I/O on that channel. There is also a single buffer per device, which represents the current print line or card image, or the direct access track under the current active head. Head calibration is determined by maintaining an indication of the location and time of the last known head position. From the current simulated time and the rotational speed, it is possible to determine where that head presently is. A routine (VIUPDBPT) is invoked to update the buffer pointer each time a direct access device is used.

The third section contains code for initiating activity on an SIO request, as well as continuing with the fetch of the next CCW of a channel program already in progress. This section is also called pass 1 CCW processing. The first or next CCW is fetched and decoded, and the command is examined to determine the point to or from which data transfer will occur, and how long such transfer will take. Each device has a rate at which data is transferred. This time, multiplied by the amount of data to transfer, is the simulated time that this I/O operation will take. The SIO and new CCW processing section of VIRTIO concludes by setting this delay time in the discrete simulator event table (VIEVENT); after the required amount of simulated time has passed, VIRTIO will be reinvoked to complete the I/O operation.

The fourth section of the I/O simulation, also called pass 2 CCW processing, effects transfer of data to or from the user's area. Pass two of VIRTIO is invoked by EXECUT after a time delay as calculated by phase one has occurred. Lengths are checked to verify that the amount of data the user wants to transfer is legitimate. The data transfer occurs, by use of routine VIUSRMOV, which transfers data and checks protection keys of the user storage areas. After a unit record write, the line is printed. After a direct access write, the remainder of the affected record or track is zeroed.

After data transfer is complete, data chaining or command chaining are tested; if in effect, these cause transfer back to pass one for fetching of a new CCW. If neither chaining is on, the end of the channel program occurs, and an I/O interrupt is signalled by means of VIPEND, a series of indications of pending interrupts. Pass two then returns to EXECUT.

The fifth section of the I/O simulator is a group of internal subroutines. These provide utility services such as interface with the BDAM support package, enqueuing entries on the discrete event list, printing a trace of CCW execution, and determining current simulated head position on a direct access device.

The sixth section of the simulator handles presentation of interrupts to the user. Whenever a pending I/O interrupt exists and the user PSW does not have that type of interrupt masked off, VIOINTFX is called by EXECUT to present the CSW and to reset the status of the interrupting device. VIOINTFX returns to EXECUT.

V. OUTPUT PRODUCED

A. Header Line

The header line identifies the version of ASSIST-V that is running, and it gives an indication of the options that were generated into that version. The first information is the version number and data generated.

INS=SDFP7/X=BGHO

indicates the instruction set acceptable to this version. Each letter present indicates a class of instructions that is recognized.

                S indicates the standard S/360 non-privileged machine instructions.
                D indicates the S/360 decimal instructions.
                F indicates the S/360 floating point instructions.
                P indicates the S/360 privileged instructions.
                7 indicates the non-privileged S/370 instructions.

X values indicate which extended instructions are accepted. For more information on these, see [1] and [2].

                B  indicates the "basic" set, including XDECI, XDECO, XREAD, XPRNT,
                     XPNCH, XDUMP, XLIMD.
                G indicates the extended I/O XGET and XPUT instructions.
                H indicates the XHEXI and XHEXO instructions.
                O indicates the XOPC instructions.

CHECK=T(#-#,X#-#)R(#-#,X#-#)P(#-#,X#-#)C(#)

tells the types of checking in effect and the default and limit values. The letters T, R, P, and C stand for Time, Records, Pages, and Comments, respectively. The values in parentheses indicate the default and maximum values overall (first pair) and during execution (second pair). The R values are in THOUSANDS of records, rounded. C indicates comment checking may occur. This checking will not allow a user program to execute unless x% of the machine instructions have comments. The value of x follows the letter C. If any of the T, R, P, or C groups is missing, no counting is in effect for the corresponding resource.

OPTS=CD(#/#)KMRXV

indicates the optional features generated. Each letter present shows a feature that was generated.

                C indicates compressed source listing (CMPRS).
                D indicates disk utility (DISKU); the first value following is  the
                     setting  of  &$DISKU,  and  the  second  number is the default
                     &$FREE value.
                K indicates support for the 026 keypunch conversion (KP=26).
                M indicates support for the macro processor.  If present,  this  is
                     followed  by  a  letter  (F,  G,  or H) indicating the default
                     MACRO= setting.
                R indicates the support for the replace monitor (REPL).
                X indicates the presence of the cross-reference facility (XREF=).
                V indicates the ability to use virtual machine simulator (VIRT).

The header line precedes each run to identify the version and the optional values generated into this ASSIST-V version.

B. Source, XREF, and Output

The source listing is a standard assembler source listing. As described above, numerous checks are made during assembly to guarantee that the amount of time or output is within predetermined limits. During assembly the "CMPRS" and "SS" options may be invoked to reduce the amount of paper used. CMPRS is a parameter on the JCL EXEC or ASSIST $JOB card. When this parameter is in effect, the listing is "compressed"; that is, the listing is printed in two columns per page, like the two columns of a book. Part of the object code and comments are eliminated in order to condense one line of source to one half line on output. The SS parameter forces normal single spacing during assembly listing, with page ejects replaced by double spaces. This option also reduces paper usage.

The cross reference facility can be used to locate those statements that have the potential to modify a particular location in memory. Any location that is potentially modified by a statement (e.g., X in ST 1,X) is identified in the cross reference listing by a "-" sign preceding the statement number of the statement in which it may be modified. Furthermore, through the use of XOPC's, it is possible to suspend or resume collection of references or monitoring of locations for the cross reference. See [2] for more information on XOPC's and the cross reference facility.

Output directed through XPRNT's and XDUMP's during execution is merged with the output from traces requested by XOPC's. Thus it is possible to monitor the progress of a program by analysis of the order in which these messages occur. Output under channel-level I/O is directed to a different DDname, and thus will not normally be merged with the source listing output.

C. Termination Statistics and Dump

At the completion of an ASSIST-V run, statistics are printed showing the time of the run as well as the amount of CPU and channel activity.

If the run terminated abnormally, or if the user requested one, a termination dump is printed. This dump identifies the final PSW value, the last 10 instructions executed, the last 10 branch instructions executed (with each PSW swap counted as both an instruction and a branch instruction), and the final contents of user registers and memory.

VI. CHANGING ASSIST-V

ASSIST-V is table driven to facilitate user modification. The most obvious changes would be to change instruction timings or the characteristics of I/O pseudo devices. Instruction timings are contained in a table (VITIMTAB) consisting of 256 pairs of halfwords (source code 88000020-88000510). The table is indexed by opcode. Each entry gives a base time and a modifier factor in thousandths of timer units. The base time is the time required for one execution of the instruction, ignoring length for SS instructions, bits shifted for shifts, or success for branches. The modifier factor is the time to be added for each byte done for SS instructions, for each hex digit shifted for shifts, and for unsuccessful branches. The timings in this table presently approximate the timings of a 360/65; however, the user can replace the values in this table as desired.

The current complement and characteristics of the I/O devices are as listed in the ASSIST-V User's Guide [1]. However, the device tables can also be changed at SYSGEN time. Each device is associated with a device table entry; these entries are generated by macro VIDVT, which has parameters &DV@, &TYP, &OPS, &BFLN, &TIME and &TRKS.

           &DV@ is the three hex digit device address.
           &TYP is MPX (multiplexer), DSK (movable  head  disk),  DRM  (fixed  head
                direct access device), or TRM (terminal).¶
           &OPS=  is  a list of one or more operands indicating what operations are
                legal on the device.  The operands may be
                RD - read
                PRT or WRT - write
                CTL - control
                SCH - search
                SK - seek
                SFM - set file mask
           &BFLN= is the length of a device record (printer, reader or terminal) or
                the length of a track
           &TIME= is either one or two values (in timer units); if one value, it is
                the time to transfer one byte (for multiplexer, terminal, and fixed
                head devices); if two values, it is the time to transfer  one  byte
                and  the time to move the access mechanism across one cylinder (for
                movable head devices).
           &TRKS= is the number of cylinders and the number of heads on the  device
                (direct access device only).
				           _________________________

           ¶   There  is  code  for  a  rudimentary  terminal  simulation, in which
           simulated terminal input comes from card  data  sets,  with  each  input
           record  telling  the  delay  until  the  next input card (line) is to be
           received (read).  The terminal output  is  directed  to  printers.   The
           terminal  code  has  been  tested  and  is  supplied  with this ASSIST-V
           version, although  it  is  not  supported  or  publicized  in  documents
           normally available to users.

The label of the macro call is the ddname of the device; it is also the label of the buffer to be used for I/O on this device. The size of this buffer must be as given in &BFLN.

The I/O tables are located in the code between 80020000 and 80029999. If additional devices are added, it is also necessary to provide a buffer in that area. This is done through a call to the BUFFER macro. The label on the BUFFER must be the same as the label on the VIDVT call (which is also the same as the device DDname). Parameters to BUFFER are &DV@, &TYPE, &BFLN, and &FILL=. &DV@ and &BFLN are the same as for VIDVT. &TYPE is the type of device (used only to label the buffer, so it may be any identifying string). &FILL= is a character with which the buffer is to be filled initially. The number of devices of each type must not exceed the setting of &$VI#MPX, &$VI#DSK, &$VI#DRM, or &$VI#TRM.

The table of recognized opcodes is given at 80017530-80017990. This table should be kept in ascending order by opcode. For multiplexer devices, this table gives the time to execute the operation.

VII. DEBUGGING WITH ASSIST-V

A. Debugging Aids

ASSIST-V has been in use at several installations since Fall 1976, and a number of the bugs have thus been shaken out of it. However, there is still the probability that errors may occur. These will generally occur in the run-time simulator section. The XOPC's for instruction tracing and CCW tracing may be used to isolate the source of the error. Section V of this document contains a brief overview of the various sections of the ASSIST-V package to facilitate tracing errors in run-time routines.

The I/O simulation section contains a special debugging aid. If the user program register 0 contains the value X'FF00FF00', and if the user program issues an SIO to a nonexistent device, the current contents of the tables and buffers in the I/O interpreter are dumped on the standard printer. The first portion of this dump contains tables indicating the status of I/O operations on all devices. The form of this data is as in the DSECT VIDVTABD, which is shown in Appendix C. Among other things, these tables contain the most recent CCW and CSW settings, as well as a pointer to the next byte to be transferred on this device. The second portion of the dump contains the contents of each simulated device I/O buffer. For the unit record devices, this buffer will contain the contents of the current card or line image; for direct access devices, this buffer contains the values on the track currently under the simulated device head. (The ability to examine the current track has also been found useful in debugging user programs.)

This tool can also locate ASSIST-V errors. Any time user register 0 containts X'FF00FF00' and ASSIST-V causes a program interruption (0C- error) that is not attributable to the user program, both the ASSIST-V portion of the ECONTROL table and the current ASSIST-V registers are snapped. The low-order byte of register 1 contains a code that indicates in which module (EXECUT, EIOPCS, VIDAIO, VIRTIO pass 1, VIRTIO pass 2, or VIOINTFX) execution was in progress. Furthermore, if execution was in one of the simulated I/O modules (the last three listed above), contents of the I/O device tables are also snapped.

B. Known Bugs

There are a few known inconsistencies with ASSIST-V. Work is underway to try to eliminate these for a future release of ASSIST-V. Following are the known ASSIST-V bugs.

  1. The macro processor consumes core memory and can make assemblies using a large number of macros require a large region. The use of DISKU, combined with a moderate setting of FREE= can reduce this problem. A new macro processor is currently being designed and implemented.

  2. Simulated time for Write R0 on direct access devices seems to advance the simulated time as if one full disk revolution had occurred. This problem is being investigated.

  3. During CSW tracing if maximum user records are exceeded, no exceptional handling will occur. However, the next time trace or XPRNT output from another source is attempted, the user program will be terminated, as expected. Thus, the only serious problem is the unlikely case where the user causes ASSIST-V to repeatedly display the CSW with no other I/O being displayed. But, since displaying of the CSW can occur only if other instructions are being executed or if PSW swaps are occurring, either time or maximum instructions is bound to run out, thereby halting the user program safely. The CSW swaps exceeding record limits will not be printed.

C. What to Do in Case of an Error

Please notify us of any problems encountered with ASSIST-V. We will try to help you through your problem. However, we can make better use of your time and give you more specific advice if you will carefully analyze the symptoms of your error and be prepared with a precise listing of the circumstances that cause the error. We usually need to know the full set of SYSGEN parameters under which your version of ASSIST-V was generated, as well as relevant supporting data, such as results of instruction traces, exact contents of input data, contents of the current track, and other data that may pinpoint the error. You are encouraged to attempt to trace your error through the source code of ASSIST-V and to call on us to help you in this trace. In general, the more specific you can be about the problem you are having, the better able we are to help you fix it.

BIBLIOGRAPHY

           [1] Hughes,  C.E.  and Pfleeger, C.P., ASSIST-V User's Guide.  Technical
                report CS 77-24, The  University  of  Tennessee,  Computer  Science
                Department, Knoxville, TN, 1978.

           [2] Mashey,  J.R.,  ASSIST  Introductory  Assembler  User's  Manual.  The
                Pennsylvania State University, Computation Center, University Park,
                PA, 1970.

           [3] Mashey, J.R. ASSIST Program Logic Manual.   The  Pennsylvania  State
                University, Computation Center, University Park, PA 16802, 1970.

APPENDIX A - ASSIST-V SYSGEN PARAMETERS


                    TITLE '*** GLOBAL SET SYMBOLS AND EQUATES ***'           02170000
           ** GLOBAL SET VARIABLES - SYSGEN TYPE - &$------                * 02172000
              GBLB  &$ACCT              =1 => ACCOUNT DISCRIMINATION POSSIBL 02173000
              GBLB  &$ALIGN             =0 ==> MODEL REQUIRES DATA ALIGNED   02173500
           *                            =1 ==> MODEL DOES NOT REQUIRE ALIGN  02173510
              GBLB  &$ASMLVL            =0==>DOS,=1==>OS                     02174000
              GBLC  &$BATCH             LIMIT/DFLT: BATCH(DOS) - NOBATCH(OS) 02174500
              GBLC  &$BTCC(4)           BATCH CONTROL CARD ITEMS: SEE SETC'S 02174550
              GBLA  &$BLEN              SET TO BUFFER LENGTH IN BYTES        02174600
              GBLA  &$BUFNO             THE NUMBER OF BUFFERS                02174700
              GBLB  &$CMPRS             =0 NO CMPRS CODE, =1 CMPRS OPTION    02175000
              GBLA  &$COMNT             >0 COMMENT CHECK (&$COMNT =% REQ)    02175500
              GBLB  &$DATARD            =0 SOURCE,DATA THRU SYSIN ONLY(WATFV 02175750
           *                            =1 DATA MAY BE READ FROM FT05F001    02175760
           *                            (I.E.- SINGLE JOB PROCESSING-PSU)    02175770
              GBLB  &$DECSA             SHOULD ASSEMBLER PERMIT DECIMALS     02176000
              GBLB  &$DECSM             DOES MACHINE HAVE DECIMALS           02178000
              GBLB  &$DECK              =0 NO OBJ DECKS PUNCHED. =1 CAN DO   02179000
              GBLB  &$DMPAG             =1 BEGIN DUMP ON NEW PAGE, 0=> NO  J 02179050
              GBLC  &$DSKUDV            DEVICE TYPE FOR DISK UTILITY         02179100
              GBLA  &$DISKU             0=NO DISK UTILITY, 1=USER OPTION     02179200
           *                                2=ALWAYS DISK                    02179600
              GBLB  &$FLOTA             SHOULD ASSEMBLER ALLOW FLOATING PT   02180000
              GBLB  &$FLOTAX            SHOULD ASSEMBLER ALLOW EXTENDED FP'S 02181000
              GBLB  &$DEBUG             0==>DEBUG MODE, 1==> PRODUCTION MODE 02182000
              GBLA  &$ERNUM             # DIFFERENT ERROR MESSAGES           02184000
              GBLB  &$EXINT             INTERPRETER VERSION: 1=REGULAR,      02185000
           *                            1=EXTENDED INTERPRETER               02185005
              GBLB  &$FLOTE             =1==> WILL INTERPRET FLT,0==> NO     02186000
              GBLB  &$FLOTEX            =1==> WILL INTERPRET EX FP'S,0==> NO 02187000
              GBLB  &$FLOTM             =1==> MACHINE HAS FLTING PT,0==> NO  02188000
              GBLB  &$FLOTMX            =1==> MACHINE HAS EX FP'S,0==> NO    02188100
              GBLA  &$FREE,&$FREEMN     DEFAULT FREE=, MINIMUM FREE= (80A) J 02188250
              GBLC  &$GENDAT            GENERATATION DATE FOR THIS ASSIST    02188500
              GBLB  &$HASPBT            =1 HASP AUTOBATCH CODE SUPPORTED   J 02188550
              GBLB  &$HEXO              =1==> HEXO ALLOWED,=0==> NOT ALLOWED 02188600
              GBLB  &$HEXI              =1==> HEXI ALLOWED,=0==> NOT ALLOWED 02188700
              GBLA  &$IDF,&$IMX         DEFAULT,MAXIMUM I= # INSTRUCTIONS    02189000
              GBLC  &$IOUNIT(8)         GLOBAL SUBLISTED VARIABLE FOR        02189050
           *                            DDNAMES IN DCB'S AND DTF'S           02189055
           *                                                                 02189060
           *  &$IOUNIT(1)= PRIMARY INPUT, OS=> SYSIN, DOS=> SYSIPT           02189070
           *  &$IOUNIT(2)= SECONDARY INPUT, OS=> FT05F001, DOS=> SYSRDR      02189080
           *  &$IOUNIT(3)= PRINTER, OS=>FT06F001, DOS=> SYSLST               02189090
           *  &$IOUNIT(4)= PUNCH, OS=> FT07F001, DOS=> SYSPCH                02189100
           *  &$IOUNIT(5)= DISK INTERMEDIATE, OS=>FT08F001, DOS=> IJSYS01    02189110
           *  &$IOUNIT(6)= MACRO LIBRARY, OS=> SYSLIB, DOS=> N/A             02189120
           *  &$IOUNIT(7)= FUTURE USE                                        02189130
           *  &$IOUNIT(8)= FUTURE USE                                        02189140
              GBLB  &$KP26              =1 ALLOW KP=26 OR KP=29 OPTION       02189500
           *                            =0 ALLOW ONLY 029 KEYPUNCH CARDS     02189510
              GBLA  &$LDF,&$LMX         DEFAULT,MAX L= # LINES/PAGE          02189600
              GBLB  &$MACOPC            =1 ==> ALLOW OPEN CODE COND ASMBL    02189940
              GBLB  &$MACROG            =1 ==> ADD ASM G FEATURES TO ASM F   02189950
              GBLB  &$MACROH            =1 ==> ADD SOME ASM H FEATURES TO F  02189980
              GBLB  &$MACROV            OS/VS SUPPORT                        02189990
              GBLB  &$MACROS            MACRO/CONDITIONAL ASSEMBLY ALLOWED   02190000
              GBLC  &$MACDF             DEFAULT VALUE OF MACRO=      CPP     02190002
           *        **NOTE** BASIC MACRO FACILITY IS ASSEMBLER F COMPATIBLE. 02190005
              GBLB  &$MACSLB            =1 ==> MACRO LIBRARY ALLOWED         02190100
              GBLC  &$MCHNE             MACHINE GENERATION OF EQUIPMENT      02190200
              GBLA  &$MMACTR            LOCAL ACTR INITIAL VALUE DEFAULT     02190300
              GBLA  &$MMNEST            MACRO NEST LIMIT DEFAULT             02190400
              GBLA  &$MMSTMG            GLOBAL MACRO STMT LIMIT DEFAULT      02190500
              GBLA  &$MODEL             MODEL NUMBER OF 360/370 BEING RUN ON 02192000
              GBLB  &$OBJIN             =0 CANNOT READ OBJECT DECK. =1 CAN   02193000
              GBLA  &$OPTMS             OPTIMIZE - 0==> MEMORY, 9==> SPEED   02194000
              GBLB  &$PAGE              =0 NO PAGE COUNT/CONTROL CODE EXISTS 02195000
           *                            =1 PAGE CONTROL &OPTIONS ALLOWED     02195010
              GBLA  &$PDF,&$PMX         DEFAULT,MAX P= # PAGES LIMIT         02195400
              GBLA  &$PDDF,&$PDMX       DEFAULT,MAX PD= # PAGES FOR DUMP     02195500
              GBLB  &$PRIVOP            =0==>NO PRIV OPS, =1==> PRIV OPS OK  02196000
              GBLA  &$PRTSIZ            MAX # CHARS IN PRINT LINE FOR ASM    02196200
              GBLB  &$PUNCH             =0 WE DON'T ACTUALLY HAVE CARD PUNCH 02196400
           *                            =1 REAL PUNCH EXISTS, POSSIBLE USE   02196500
              GBLA  &$PXDF,&$PXMX       DEFAULT,MAX PX= PAGES FOR EXECUTION  02196600
              GBLB  &$P370              =1 WILL INTERPRET PRIVELEGED S/370   02196650
              GBLB  &$P370A             SHOULD ASSEMBLER PERMIT PRIV S/370'S 02196700
              GBLA  &$RDF,&$RMX         DEFAULT,MAX R= TOTAL # RECORDS       02197000
              GBLA  &$RDDF,&$RDMX       DEFAULT,MAX RD= RECORDS FOR DUMP     02197300
              GBLA  &$RECORD            0=NO OUTPUT COUNT, 1=COUNT FROM R=   02197600
           *                            AND &$R--, 2=USE RECORDS REMAINING   02197605
           *                            FROM JOB                             02197610
              GBLB  &$RECOVR            (ONLY USED FOR &$RECORD=2).          02197700
           *        =0 => R= DOES NOT OVERRIDE $TIRC VALUE, =1 => IT DOES.   02197705
              GBLB  &$RELOC             =0==> NO RELOCATION CODE GENERATED   02198000
              GBLA  &$REPL              0=> NO REPL,1=> LIMITED,2=> FULL     02200000
              GBLA  &$RXDF,&$RXMX       DEFAULT,MAX RD= RECORDS FOR EXECUTE  02201000
              GBLB  &$SPECIO            SPECIAL ROUTINES EXIST(TYPE=$IS+)    02202000
              GBLA  &$SYHASH            SIZE OF INITIAL PTR TABLE FOR SYMOPS 02204000
              GBLC  &$SYSTEM            SYSTEM BEGIN RUN - DOS,PCP,MFT,MVT   02206000
              GBLA  &$S370              =0==> NO S/370 INSTR INTERPRETED     02206500
           *                            =1==> S/370 INSTR INTERPRETED ON 370 02206600
           *                            =2==> S/370 INSTR INTERPRETED ON 360 02206700
              GBLB  &$S370A             SHOULD ASSEMBLER PERMIT SYSTEM 370'S 02206800
              GBLC  &$TDF,&$TMX         DEFAULT,MAX T= TOTAL TIME FOR RUN    02207000
              GBLC  &$TDDF,&$TDMX       DEFAULT,MAX TD= TIME FOR DUMP        02207500
              GBLA  &$TIMER             0=NO TIME CHECK, 1=TIME FROM T= AND  02208000
           *                            &$T--, 2=USE JOB TIME REMAINING      02210000
              GBLC  &$TXDF,&$TXMX       DEFAULT,MAX TX= TIME FOR EXECUTION   02211000
              GBLC  &$VERSLV            VERSION #.LEVEL #                    02212000
              GBLB  &$VIRT              ALLOW VIRTUAL MACHINE SIMULATION     02213000
              GBLC  &VIDV@(8)           ADDRESSES OF HEAD PROTRACT DISKS     02213100
              GBLA  &$VI#MPX,&$VI#DRM,&$VI#DSK,&$VI#TRM  UPPER BOUND ON NO. +02213200
                          OF MPX,   DRUMS    DISKS   TERMINALS               02213210
              GBLA  &VIDSK@#,&$VI#DA    CURRENT NUMBER OF DISKS AND DASD'S   02213300
              GBLA  &$VIDSKF            LINE NUMBER OF FIRST DISK STAT LINE  02213400
              GBLB  &$XIOS              =0==>NO XIO MACROS,=1==>XIO MACROS   02214000
              GBLB  &$XREF              CONTROL GENERATION OF XREF FACILITY  02214100
           *                            =1 FULL XREF, =0 NO XREF AT ALL      02214110
              GBLA  &$XREFDF(3)         DEFAULT VALUES FOR FLAGS             02214120
           *  &$XREFDF(1)=0       NO XREF(OTHERS =3MEANS COMPRESSED LISTING  02214130
           *  &$XREFDF(2)=3       COLLECT MODIFY AND FETCH DEFN              02214140
           *  &$XREFDF(3)=3       COLLECT REFERENCES MODIFY/FETCH            02214150
              GBLA  &$XREF#B            NUMBER OF SLOTS FOR XREF BLKS        02214155
              GBLB  &$XXIOS             =0==>XGET-XPUT MACROS,=1==> NO       02214500
              GBLB  &X$DDMOR          ALLOW USER OWN DDNAMES:=1==>YES,0==>NO 02214510
           ** GLOBAL SET VARIABLES - INTERNAL TYPE -                       * 02216000
              GBLC  &DEBUG              DEBUG NUMBER FOR TESTING AVDEBUG     02218000
              GBLC  &ID                 IDENT GENERATION CONTROL             02220000
              GBLC  &TRACE              SPECIFIES FORM OF TRACE-SNAP,*,NO    02222000


           **** DEFAULT VALUES FOR ASSIST-V DISTRIBUTION ******************

           &$BTCC(1) SETC '$'           CONTROL CHAR FOR BATCH CARDS         02223100
           &$BTCC(2) SETC 'JOB'         JOB BEGINNING INDICATOR              02223102
           &$BTCC(3) SETC 'ENTRY'       BEGIN INPUT DATA; = '' IF NONE USED  02223104
           &$BTCC(4) SETC 'STOP'        TERMINATOR INDICATOR                 02223106
           &$BLEN   SETA  3120          QUARTER TRACK FOR 3330 PACK          02224250
           &$BLEN   SETA  4*(&$BLEN/4)        ROUND BLEN DOWN TO FWD MULT    02224251
           &$BUFNO  SETA  2             SET FOR 2 BUFFERS                    02224750
           &$CMPRS  SETB  0             DISALLOW CMPRS OPTION                02225000
           &$COMNT  SETA  0             DISALLOW COMMENT COUNTING OPTION     02225500
           &$DATARD SETB  (1)           ALLOW SINGLE JOB/TWO RDRS            02226000
           &$DEBUG  SETB  (1)           FOR QUICK RUN, KILL GENERATION       02228000
           &$DECK   SETB  (1)           ALLOW OBJECT DECKS TO BE PUNCHED     02229000
           &$DECSA  SETB  (1)           ASSEMBLER WILL ACCEPT DECIMAL INSTS  02230000
           &$DECSM  SETB  (1)           HARDWARE HAS DECIMAL INSTRUCTIONS    02232000
           &$DISKU  SETA  1             SET FOR USER OPTION ON DISK UTILITY  02233000
           &$DMPAG  SETB  0             HAVE DUMP START AFTER 2 SPACES       02233200
           &$EXINT  SETB  1             USE EXTENDED INTERPRETER       L     02233500
           &$FLOTA  SETB  0             DISALLOW ASMBLY OF F.P. INSTRS.      02234000
           &$FLOTAX SETB  0             DISALLOW ASMBLY OF EXT. F.P. INSTRS. 02235000
           &$FLOTE  SETB  0             DISALLOW EXEC. OF F.P. INSTRS.       02236000
           &$FLOTEX SETB  0             DISALLOW EXEC. OF EXT. F.P. INSTRS.  02237000
           &$FLOTM  SETB  (0)           ELIMINATE F.P. REGS HARDWARE         02238000
           &$FLOTMX SETB  (0)           HARDWARE HASN'T GOT EXTENDED F. P.   02238100
           &$FREE   SETA  6144          RETURN  6K TO OS                     02238200
           &$FREEMN SETA  2048          MINIMUM ALLOWED FREE=;  *****NOTE    02238210
           *        IF YOU HAVE 80A ABEND'S OFTEN, RAISE THIS AS NEEDED***   02238211
           &$GENDAT SETC  '5/1/78'      ASSIST-V DISTRIBUTION VERSION        02238400
           &$IDF    SETA  100000        DEFAULT 100,000 INSTRS. LIMIT        02238500
           &$IMX    SETA  100000        MAX OF 100,000 INSTRS.               02239000
           &$KP26   SETB  0             DELETE SUPPORT OF 026 KEYPUNCH       02239200
           &$LDF    SETA  61            DEFAULT 61 LINES PER PAGE            02239600
           &$LMX    SETA  999           MAX 999 LINES/PAGE                   02239800
           *        MACRO SETS: ONLY SIGNIFICANT IF &$MACROS=1.              02239850
           &$MACDF  SETC  'F'           DEFAULT MACRO=F                      02239855
           &$MACOPC SETB  1             ALLOW OPEN CODE, AT LEAST FOR TEST   02239860
           &$MACROS SETB  1             ALLOW MACROS TO BE PROC ESSED        02239880
           &$MACROG SETB  0             NO ASM G CODE ***NOT SUPPORTED YET** 02239890
           &$MACROH SETB  0             NO ASM H CODE ***NOT SUPPORTED YET** 02239900
           &$MACROV SETB  0             NO OS/VS ASSEMBLER SUPPORT YET       02239910
           &$MACSLB SETB  1             ALLOW MACRO LIBRARY FETCH            02239920
           &$MCHNE  SETC  '360'         SYSTEM RUNS ON A 360                 02239925
           &$MMACTR SETA  200           DEFAULT ACTR VALUE = 200             02239930
           &$MMNEST SETA  15            DEFAULT LIMIT OF 15 DEEP IN MACS     02239940
           &$MMSTMG SETA  4000          DEFAULT MAXIMUM TOTAL 4000 MAC STMTS 02239950
           &$MODEL  SETA  65            DEFAULT HARDWARE IS A 360/65         02240000
           &$OBJIN  SETB  (1)           ALLOW OBJECT DECKS TO BE READ        02241000
           &$OPTMS  SETA  4             MEDIUM OPTIMIZATION                  02244000
           &$PAGE   SETB  (1)           ALLOW ALL PAGE CONTROL OPTIONS       02244050
           &$PDF    SETA  40            DEFAULT 40 PAGES/BATCH               02244100
           &$PMX    SETA  400           MAX. 400 PAGES/BATCH                 02244150
           &$PDDF   SETA  1             NORMAL DUMP-JUST FIRST PAGE          02244200
           &$PDMX   SETA  40            MAX. 40 PAGES FOR DUMP               02244250
           &$PRIVOP SETB  1             ALLOW ALL PRIVILEGED OPERATIONS      02244280
           &$PRTSIZ SETA  133           PRINTER HAS 133 COLUMNS              02244285
           &$PUNCH  SETB  (1)           A REAL PUNCH EXISTS                  02244300
           &$PXDF   SETA  15            DEFAULT ALLOW ONLY 15 PP. EXEC       02244350
           &$PXMX   SETA  400           MAX EXEC PAGES = 400                 02244400
           &$RDF    SETA  1980          DEFAULT R=1980 (25 PAGES)            02244450
           &$RMX    SETA  20000         MAX. 20 K LINES/BATCH                02244500
           &$RDDF   SETA  75            DEFAULT 75 LINES SAVED FOR DUMP      02245000
           &$RDMX   SETA  3000          MAX. RECORDS SAVED FOR DUMP          02245200
           &$RECORD SETA  1             LIMIT OUTPUT BY R= AND &$R--         02245400
           &$RELOC  SETB  (1)           NEED RELOC SINCE WE HAVE REPL        02245440
           &$REPL   SETA  0             DELETE REPLACE OPTION                02245460
           &$RXDF   SETA  1500          DEFAULT RX=1500                      02245600
           &$RXMX   SETA  20000         MAXIMUM RX VALUE OF 20000            02245800
           &$SYSTEM SETC  'OS-MVT'      SYSTEM IS OS OPTION MVT              02246000
           &$S370   SETA  0             RUN NO S/370 INSTRS.                 02247000
           &$S370A  SETB  0             ASSEMBLE NO S/370 INSTRS.            02247100
           &$XIOS   SETB  (1)           ALLOW X MACROS                       02248000
           &$XXIOS  SETB  0             ALLOW XGET - XPUT                    02248200
           &X$DDMOR SETB  0             ALLOW USER OWN DD NAMES              02248210
           &$HEXI   SETB  (1)           XHEXI ALLOWED THIS ASSEMBLY          02249000
           &$HEXO   SETB  (1)           XHEXO ALLOWED                        02249500
           &$TDF    SETC  '30'          DEFAULT RUN 30 SECONDS               02250000
           &$TMX    SETC  '300'         MAX JOB SECS 300 (=5 MINS.--LONG)    02250500
           &$TDDF   SETC  '.1'          DEFAULT TIME FOR DUMP                02251000
           &$TDMX   SETC  '10'          MAXIMUM TIME FOR A DUMP              02251500
           &$TIMER  SETA  1             LIMIT TIME BY T=, &$T--              02252000
           &$TXDF   SETC  '1000'        DEFAULT HIGH SINCE TIMREM USED       02253000
           &$TXMX   SETC  '1000'        MAX EXEC SECS HIGH (1000)            02253100
           *        VIRT SETS: MEANINGFUL ONLY IF &$VIRT=1 (SIMULATOR)       02253200
           &$VIRT   SETB  (1)           SIMULATE "BARE" (VIRTUAL) 360        02253210
           &$VI#MPX SETA  4             4 READERS/PRINTERS MAX               02253220
           &$VI#DSK SETA  2             ALLOW MAX OF 2 DISKS                 02253230
           &$VI#DRM SETA  2             ALLOW MAX OF 2 DRUMS                 02253240
           &$VI#TRM SETA  0             ALLOW NO TERMINALS                   02253250
           &$VERSLV SETC  'V2.1'        VERSION LEVEL  (5/1/78)              02253500
           &$XREF   SETB  1             ALLOW CROSS REFERENCE                02253510
           &$XREFDF(1) SETA  3          PSU TESTING                          02253520
           &$XREFDF(2) SETA  3          COLLECT ALL MOD/FETCH DEFN           02253530
           &$XREFDF(3) SETA  3          COLLECT ALL MOD/FETCH REFERENCES     02253540
           &$XREF#B SETA  10            ALLOCATE 10 SLOTS/BLOCK              02253545
           &$BATCH  SETC  'NOBATCH'    DEFAULT FOR OS IS NOBATCH             02257185
           &$IOUNIT(1)  SETC  'SYSIN'         SET OS PRIMARY INPUT           02257190
           &$IOUNIT(2)  SETC  'FT05F001'      SET OS SECONDARY INPUT         02257200
           &$IOUNIT(3)  SETC  'FT06F001'      SET OS PRINTER                 02257210
           &$IOUNIT(4)  SETC  'FT07F001'      SET OS PUNCH                   02257220
           &$IOUNIT(5)  SETC  'FT08F001'      SET OS DISK INTERMEDIATE       02257230
           &$IOUNIT(6)  SETC  'SYSLIB'        SET OS MACRO LIBRARY           02257240
           &ID      SETC  'NO'          SET NO ID FOR TIME BEING             02258000
                    ASSYSGEN ,          CALL TO POSSIBLY RESET SET VARIABLES 02265100
           &$ASMLVL SETB  ('&$SYSTEM'(1,2) EQ 'OS') SET LEVEL OF ASSEMBLER   02254000
           &$FLOTE  SETB  (&$FLOTE AND &$FLOTM)   KILL GEN IF NO FLOATS      02256000
           &$FLOTEX SETB  (&$FLOTEX AND &$FLOTMX) KILL GEN IF NO XTD FLTS    02257000
           &$P370   SETB  (&$PRIVOP AND (&$S370 NE 2))   ALLOW PRIV 370 OPS  02265200
           &$P370A  SETB  (&$PRIVOP AND &$S370A)         ONLY IF SIMUL. 370  02265300
           &$ALIGN  SETB  (&$ALIGN OR (&$S370 EQ 1 OR &$MODEL EQ 85))       *02265400
                                        SOFTWARE ALIGNMENT CHECK IF ON 370   02265450
           &$MACSLB SETB  (&$MACSLB AND &$MACROS)  LIBRARY ONLY IF MACROS    02265500
           &$RELOC  SETB  (&$RELOC OR (&$REPL NE 0))  REPL NEEDS RELOC       02265600
           &$HASPBT SETB  (&$HASPBT AND &$ASMLVL)  HASP NEEDS OS LEVEL       02265700


APPENDIX B - OVERLAY STRUCTURE

INSERT ASSIST,XXXXDECI,XXXXIOCO,XXXXSNAP,XXXXSPIE,VWXTABL INSERT XDDTABLE,XXXXGET,XXXXPUT OVERLAY FIRST INSERT EXECUT,XXXXDECO,XDDGET,XXXXHEXI,XXXXHEXO INSERT VIRTIO,VIDAIO,EIOPCS OVERLAY FIRST INSERT APARMS OVERLAY FIRST INSERT CACONS,CBCONS,CCCONS,CDECNS,CFHCNS,CPCONS,CVCONS,CXCONS INSERT CZCONS,ESDOPR,EVALUT,LTOPRS,MPCON0,OUTPUT,SDTERM,SYMOPS INSERT UTOPRS,XREFA,ERRORS OVERLAY SECOND INSERT CODTL1,IAMOP1,IBASM1,INPUT1,MOCON1,OPCOD1,SCANRS INSERT MACINT,MACFND,MACSCN,MCATRM,MCDTRM,MCGTST,MCSCOP,MCSYSR INSERT MCSYSR,MCVSCN,MXERRM,MXINST,MXMVSR INSERT MACLEX,MACRO1,MCBODY,MCGNCD INSERT MEXPND OVERLAY SECOND INSERT BROPS2,CNDTL2,ICMOP2,IDASM2,MTCON2,XRCOLL OVERLAY SECOND INSERT XRPRNT OVERLAY FIRST INSERT XXDDFINI OVERLAY FIRST INSERT AOBJDK ENTRY ASSIST NAME ASSISTV

APPENDIX C - FORMAT OF DEVICE TABLE

VIDVTABD DSECT , FORMAT DEVICE TABLE ENTRY * PART 1: DEVICE NAME, ADDRESS, TYPE * VIDVDDNM DS XL8 DEVICE DDNAME 0000 VIDVTCH# DS 1X CHANNEL NUMBER 0008 VIDVTDV# DS 1X DEVICE NUMBER 0009 VICHTIX DS AL1 (VICHT#NN-VICHT#0) PTR. TO CHANNEL INFO BYTES 000A VIDVTIX DS AL1 (VIDVT#NN-VIDVTAB) PTR TO PTR TO THIS DEVICE 000B VIDVCMSK DS B SYS MASK BIT FOR PEND, STATUS 000C DS 1X PAD 000D * DEVICE TYPE: MULTIPLEX, DIRECT ACCESS, OR TERMINAL * VIDVTYP DS 1X 000E VIDVMPX EQU B'10000000' (VIDVTYP)==> MULTIPLEXOR DEVICE VIDVDRM EQU B'01000000' (VIDVTYP)==> DRUM (FIXED HEAD) DEV. VIDVDSK EQU B'00100000' (VIDVTYP)==> DISK (MOVE. HEAD) DEV. VIDVDA EQU VIDVDRM+VIDVDSK (VIDVTYP)==> ANY DIRECT ACCESS DEV. VIDVTRM EQU B'00010000' (VIDVTYP)==> TERMINAL * OPERATIONS LEGAL ON THIS DEVICE * VIDVTOPS DS B 000F VIDVRD EQU B'10000000' (VIDVTOPS)==> READER VIDVPRT EQU B'01000000' (VIDVTOPS)==> PRINTER VIDVWRT EQU VIDVPRT (VIDVTOPS)==> ANY WRITABLE DEVICE VIDVSCH EQU B'00100000' (VIDVTOPS)==> SEARCH VIDVCTL EQU B'00001000' (VIDVTOPS)==> CONTROL VIDVSFM EQU B'00000100' (VIDVTOPS)==> SET FILE MASK VIDVSK EQU B'00000010' (VIDVTOPS)==> SEEK * PART 2: CHANNEL STATUS WORD * VICHTCSW DS XL8 CSW FIELD 0010 * PART 3: CHANNEL COMMAND WORD * VICHCCW DS XL8 LATEST CCW 0018 * PART 4: DEVICE CURRENT STATUS * VIDVTST DS 1X FLAG ONE: DEVICE STATUS 0020 VIDVAVL EQU B'10000000' (VIDVTST)==> DEVICE AVAILABLE VIDVWORK EQU B'01000000' (VIDVTST)==> DEVICE WORKING VIDVIPND EQU B'00100000' (VIDVTST)==> INTER. PENDING AT DEV VIDVOPEN EQU B'00010000' (VIDVTST)==> (REAL) DEVICE OPEN VIDVEOF EQU B'00001000' (VIDVTST)==> DEVICE END REACHED * EOF & OPEN==> EOF THIS READ * * EOF & NOT OPEN ==> PRIOR EOF * VIDVHALT EQU B'00000100' (VIDVTST)==> HALT I/O ACCEPTED VIDVCD EQU B'00000010' (VIDVTST)==> CHAIN DATA IN LAST CCW VIDVIX2 EQU B'00000001' (VIDVTST)==> PASSED 2 INDEX POINTS * SECOND STATUS BYTE: TYPE OF OPERATION, CHAINING STATE * VIDVTST2 DS B 0021 VIDV2RD EQU VIDVRD (VIDVTST2)==> READ IN PROGRESS VIDV2WRT EQU VIDVWRT (VIDVTST2)==> WRITE IN PROGRESS VIDV2PRT EQU VIDV2WRT (VIDVTST2)==>PRINT IN PROGRESS VIDV2SCH EQU VIDVSCH (VIDVTST2)==> SEARCH IN PROGRESS VIDVFMIH EQU B'00010000' (VIDVTST2)==> SFM INHIBITED * NEXT 4 BITS SHOW FROM WHAT OP. CURRENT ONE IS CHAINED * VICHNCKD EQU B'00001000' (VIDVTST2)==> FROM WRITE C-K-D VICHNSID EQU B'00000100' (VIDVTST2)==> FROM SEARCH ID = VICHNSKY EQU B'00000010' (VIDVTST2)==> FROM SEARCH KEY = VICHNSHA EQU B'00000001' (VIDVTST2)==> FROM SEARCH HOME @ DS XL2 TWO PAD BYTES 0022 * PART 5: BUFFER INFORMATION * VIDVBFAD DS A ADDR OF BUFFER FOR THIS DEVICE 0024 VIDVBFPT DS AL2 PTR W/IN BUFFER TO NEXT BYTE 0028 VIDVBFLN DS H LENGTH OF BUFFER 002A VIDVTTIM DS H TIME TO TRANSFER 1 BYTE 002C VIDVATIM DS H TIME TO CROSS 1 CYLINDER 002E * PART 6: VARIABLE DATA FOR DIFFERENT DEVICE TYPES * VIDVTVAR EQU * 0030 * TERMINAL VARIABLE DATA * VIDVDDNO DS CL8 DDNAME FOR TERMINAL OUTPUT 0030 VIDVDTLN DS H LENGTH OF DATA IN TERM RECORD 0038 DS H PRESERVE FULLWORD ALIGNMENT 003A * DIRECT ACCESS DEVICE VARIABLE DATA * ORG VIDVTVAR REUSE VARIABLE BLOCK SPACE 0030 * TIMINGS AND ROTATIONAL POSITION DETERMINATION * VIDVSCPT DS AL2 PTR TO SEEK/CYL COUNT WORDS 0030 VIDVTFM DS X FILE MASK FROM LAST SFM 0032 DS 1X RESERVED FOR FUTURE USE 0033 VIDVLTIM DS F LAST TIME KNEW LOC OF DA HEAD 0034 VIDVMXCY DS H MAXIMUM CYL # ON THIS DEVICE 0038 VIDVMXHD DS H MAXIMUM HEAD # OF THIS DEVICE 003A VIDVCRCY DS H CURRENT CYL UNDER ACCESS HEAD 003C VIDVCRHD DS H HEAD CURRENTLY ACTIVE 003E

APPENDIX D - SAMPLE JCL

(1) JCL TO ASSEMBLE ASSIST-V //STEP1 EXEC ASMG,REGION=(256K),PARM='SP=MAX-30K,UB=1' //SYSLIN DD DSN=&&OBMOD1,DISP=(NEW,PASS),SPACE=(TRK,(5,5)), // UNIT=SYSDA //SYSIN DD VOL=(,RETAIN,SER=ASISTV),LABEL=11,DSN=SOURCE1,UNIT=tape // DD VOL=(,RETAIN,SER=ASISTV),LABEL=12,DSN=SOURCE2,UNIT=tape // DD VOL=(,RETAIN,SER=ASISTV),LABEL=13,DSN=SOURCE3,UNIT=tape // DD VOL=(,RETAIN,SER=ASISTV),LABEL=14,DSN=SOURCE4,UNIT=tape // DD VOL=(,RETAIN,SER=ASISTV),LABEL=15,DSN=SOURCE5,UNIT=tape // DD VOL=(,RETAIN,SER=ASISTV),LABEL=16,DSN=SOURCE6,UNIT=tape //STEP2 EXEC LKED //SYSLMOD DD DSN=loadlibname,UNIT=unit,SPACE=space,DISP=disp //SYSLIN DD DSN=&&OBMOD1,DISP=(OLD,DELETE) // DD * ENTRY ASSIST NAME ASSISTV /* (2) JCL TO PLACE ASSYSGEN MACRO IN A MACRO LIBRARY //STEP1 EXEC PGM=IEBUPDTE,PARM=NEW //SYSPRINT DD SYSOUT=A //SYSUT1 DD DSN=&&TLIB,DISP=(NEW,PASS),SPACE=(TRK,(2,2,1)), // UNIT=SYSDA,DCB=(RECFM=FB,LRECL=80,BLKSIZE=400) //SYSIN DD * ./ ADD NAME=ASSYSGEN ./ NUMBER NEW1=1000,INCR=1000 MACRO ASSYSGEN GBLA &$TIMER,&$PRTSIZ &$TIMER SETA 2 SHOW TIMING FROM JOB TIME &$PRTSIZ SETA 121 SHOW PRINTER HAS ONLY 121 POSITIONS MEND ./ ENDUP //STEP2 EXEC ASMG,REGION=256K,PARM='UB=1,SP=MAX-30K' //SYSLIB DD // DD DSN=&&TLIB,DISP=(OLD,DELETE) //SYSLIN DD DSN=&&OBMOD1,DISP=(NEW,PASS),SPACE=(TRK,(5,5)), // UNIT=SYSDA //SYSIN DD VOL=(,RETAIN,SER=ASISTV),LABEL=11,DSN=SOURCE1,UNIT=tape etc., as above