Input/Output Block (IOB) Fields
The input/output block (IOB) is not automatically constructed by a macro instruction; it must be defined as a series of constants and be on a word boundary. For unit-record and tape devices, the IOB is 32 bytes long. For direct access, teleprocessing, and graphic devices, 8 additional bytes must be provided. Use the system mapping macro IEZIOB, which expands into a DSECT, to help in constructing an IOB. IEZIOB fields that are not described here are not part of the programming interface.
In Figure 1 the shaded areas indicate fields in which you must specify information. The other fields are used by the system and must be defined as all zeros. You cannot place information into these fields, but you can examine them.
- IOBSENS0
- IOBSENS1
- IOBECBCC
- IOBCSW
- IOBSIOCC
- IOBCMD31

- IOBFLAG1 (1 byte)
- Set bit positions 0, 1,
6, and 7. One-bits in positions 0 and 1 (IOBDATCH and IOBCMDCH) indicate
data chaining and command chaining, respectively. (If you specify
both data chaining and command chaining, the system does not use error
recovery routines except for the direct access and tape devices.)
If an I/O error occurs while your channel program executes, a failure
to set the chaining bits in the IOB that correspond to those in the
CCW might make successful error recovery impossible. The integrity
of your data could be compromised.
A one-bit in position 6 (IOBUNREL) indicates that the channel program is not a related request; that is, the channel program is not related to any other channel program. See bits 2 and 3 of IOBFLAG2 below.
If you intend to issue an EXCP or XDAP macro with a BSAM, QSAM, or BPAM DCB, you should turn on bit 7 (IOBSPSVC) to prevent access-method appendages from processing the I/O request.
- IOBFLAG2 (1 byte)
- If you set bit 6 in the IOBFLAG1 field to zero, bits 2 and 3 (IOBRRT3
and IOBRRT2) in this field must then be set to one of the following:
- 00, if any channel program or appendage associated with a related request might modify this IOB or channel program.
- 01, if the conditions requiring a 00 setting do not apply, but the CHE or ABE appendage might retry this channel program if it completes normally or with the unit-exception or wrong-length-record bits on in the CSW.
- 10 in all other cases.
The combinations of bits 2 and 3 represent related requests,known as type 1 (00), type 2 (01), and type 3 (10). The type you use determines how much the system can overlap the processing of related requests. Type 3 allows the greatest overlap, normally making it possible to quickly reuse a device after a channel-end interruption. (Related requests that were executed on a pre-MVS system are executed as type-1 requests if not modified.)
- IOBSENS0 and IOBSENS1 (2 bytes)
- are set by the system when a unit check occurs. These are the
first two sense bytes. Occasionally, the system is unable to obtain
any sense bytes because of unit checks when sense commands are issued.
In this case, the system simulates sense bytes by moving X'10FE' to
IOBSENS0 and IOBSENS1. The first six of these 16 bits have these device-independent meanings:
The last ten of these 16 bits have device-dependent meanings. See appropriate hardware documentation.1... .... Command reject .1.. .... Intervention required ..1. .... Bus out check ...1 .... Equipment check .... 1... Data check .... .1.. OverrunIf you wish to retrieve more than two sense bytes, supply an IOBE and IEDB as described in Interruption Handling and Error Recovery Procedures.
- IOBECBCC (1 byte)
- The first byte of the completion code for the channel program. The system places this code in the high-order byte of the event control block when the channel program is posted complete. The completion codes and their meanings are listed under Event Control Block (ECB) Fields.
- IOBECBPB (3 bytes)
- The address of the 4-byte event control block (ECB) you have provided. The ECB always must be below the 16 MB line. If your program runs in 24-bit, it can use the symbol IOBECBPT, which is four bytes beginning at IOBECBCC but you might want to preserve IOBECBCC.
- IOBFLAG3 (1 byte) and IOBCSW (7 bytes)
- The system stores status information in these eight bytes. See IOBFLAG3 and IOBCSW Format for Different Channel Program Types.
- IOBSIOCC (1 byte)
- If the channel program uses format 0 CCWs, bits 2 and 3 contain the start subchannel (SSCH)
condition code for the instruction the system issues to start the channel program.
If this is a format 1 CCW channel program or is a zHPF channel program, then field IOBSIOCC is redefined as field IOBSTART, which contains the four byte starting address of the channel program to be executed. (The IOBE field IOBESIOC is used instead of IOBSIOCC.)
- IOBSTRTB (3 bytes)
- If the channel program uses format 0 CCWs, the three byte starting address of the channel program to be executed. If you supply an IOBE with the IOBEFMT1 bit on, see the above note for IOBSIOCC.
- IOBFLAG4 (1 byte)
- Set bit 3 (IOBCEF) to indicate whether you are supplying an IOB
common extension (IOBE). If this bit is 1, then register 0 contains
the IOBE address when you issue EXCP or EXCPVR.
Refer to Requesting Extended Error Information and Requesting Different Levels of ERP Processing.
You must set IOBCEF on if you want to use format 1 CCWs, 64 bit IDAWS, MIDAWS, or a zHPF channel program.
- IOBDCBPB (3 bytes)
- The address of the DCB of the data set to be read or written by the channel program. The DCB always must be below the line. You can use IOBDCBPT to address the whole word but it is best to preserve the bits in the high order byte.
- Reserved (1 byte)
- Used by the system.
- IOBRESTR+1 (3 bytes)
- If a related channel program is permanently in error, this field is used to chain together IOBs that represent dependent channel programs. To learn more about the conditions under which the chain is built, see Purging and restoring I/O requests (PURGE and RESTORE macros).
- IOBINCAM (2 bytes)
- For magnetic tape, the amount by which the system increments the block count (DCBBLKCT) field in the device-dependent portion of the DCB. You can alter these bytes at any time. For forward operations, these bytes should contain a binary positive integer (usually +1); for backward operations, they should contain a binary negative integer. When these bytes are not used, all zeros must be specified. See Figure 3.
- IOBERRCT (2 bytes)
- Used by the system.
- IOBSEEK (first byte, M)
- For direct access devices, the extent entry in the data extent block that is associated with the channel program (0 indicates the first entry; 1 indicates the second, and so forth). For teleprocessing and graphic devices, it contains the UCB index.
- IOBSEEK (last 7 bytes, BBCCHHR)
- For direct access devices, the seek address for your channel program.