The work described here was supported by the National Science Foundation, under grant SER 76-14494.
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.
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.
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.)
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.
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.
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.
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.)
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
[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.
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