Copy To High Memory

Once we have determined the highest memory address available we can copy our loader code into high memory.

*
* RELOCATE LOADER TO HIGH MEMORY
*
         LA    R2,LOADER          ADDRESS OF ROUTINE TO RELOCATE
         LA    R3,LOADERLN        LENGTH OF ROUTINE TO RELOCATE
         LR    R4,R9              HIGH MEM ADDRESS
         SR    R4,R3              BACK UP LENGTH OF CODE
         S     R4,M32K            LEAVE A 32K BUFFER
         N     R4,MASK            START ON A CLEAN BOUNDRY
         LR    R8,R4              SAVE START ADDRESS IN R8
*
         LA    R1,256             MAX MVC LENGTH

We start by loading the address of our loader routine into Register 2 and the length of the routine into Register 3.  We copy the highest memory address into Register 4 and then subtract the length of the code.  Because we use the storage immediately following our  loader code for the disk I/O buffer we subtract out another 32k leaving more then plenty of room.  Finally we use a logical AND to start loading on an even boundary (we at least have to start on a double word boundary to avoid alignment errors).  Finally save the beginning load address into Register 8 (so we can branch to it when relocation is completed) and we set Register 1 to 256 or the maximum length for a MVC instruction.

MCOPY    DS    0H
         CR    R3,R1              CHECK FOR MAX LEGNTH
         BL    MCOPY010           NO - SHORT MOVE
*
         MVC   0(256,R4),0(R2)    MOVE 256 BYTES
         AR    R2,R1              NEXT AREA
         AR    R4,R1                       TO MOVE
         SR    R3,R1              ADJUST LENGTH
         B     MCOPY              LOOP BACK
*
*
MCOPY010 DS    0H
         LTR   R3,R3              CHECK FOR ANYTHING TO MOVE
         BZ    MCOPY020           ALL DONE
*
         BCTR  R3,0               SUBTRACT ONE FOR EXECUTE
         EX    R3,MVC             COPY LAST OF DATA
*
MCOPY020 DS    0H
         LR    R15,R8             ADDRESS OF RELOCATED LOADER
         BR    R15                BRANCH TO IT

The copy routine is pretty straight forward.  First we check to see if we have at least 256 bytes left to copy.  If not we branch to MCOPY010 to handle a short move.   We then copy 256 bytes of data, increment our source and target pointers, and then decrement the remaining length.

When we finally have less than 256 bytes to copy we must first check that there is at least one byte to move.  We then subtract one from the length and use an Executed Move Characters to copy the remainder of the data.

Finally we branch to the routine we just moved.

 *
 M32K     DC    A(1024*32)         * CONSTANT 32K
 MASK     DC    A(X'00FFF000')     * BOUNDARY MASK
 MVC      MVC   0(1,R4),0(R2)      * EXECUTED INSTRUCTION

Finally we define our constants.

It is important to point out that we don’t do any relocation of pointers for the routine we copy to high memory.  It is important that when we write the code for our loader we avoid using any relocatable constants.  For example if we used something like:

PTR      DC    A(BUFFER)

we would generate a relocatable constant.  Once we copied the routine to high memory the address pointer would still refer to the original location in low memory.  Instead we need to calculate the pointer address at run time and instead use something like:

         LA    R2,BUFFER
         ST    R2,PTR  
PTR      DC    A(0)

This will give us the proper value in our pointer.

The Assembler output will help  us determine if we have used any relocatable addresses in our program.  Near the end of the assembly listing we find the Relocation Dictionary.  It provides us with a list of all the relocatable symbols in the program and the address where it is located.  If we find any relocatable symbols that are contained within our code to be relocated we can then go back to the source and correct the problem.

                                     RELOCATION DICTIONARY
 POS.ID   REL.ID   FLAGS   ADDRESS
  0001     0001      08     000005
  0001     0001      08     000D81
  0001     0001      08     000D89
  0001     0001      08     000D91
  0001     0001      08     000D99

[Next – Nucleus Load Module Loader]

Determine Memory Size

In order to relocate to high memory we must first determine how much memory is available.  Hercules allows us to define a memory size from 1 to 16 megabytes in 1 megabyte increments.

To determine the memory we have available at IPL time we will simply scan through all memory beginning at location zero until we reach 16 Meg or we get an error attempting to access memory.

We will use the SSK (Set Storage Key) instruction to test for vaild storage.  It has the format SSK R1,R2.  Bits 21-27 of R2 specify a 2k (2048) block memory.  The storage key is set to the value specified by bits 24-30 of R1.  If the storage block does not exist an Access Specification interrupt is generated.

By using the SSK instruction we not only determine how much memory is available but we also set the access key for all memory to zero.

 *
 *
          LA    R2,0
          LA    R3,0
          L     R4,=A(X'01000000')   16 MEG
          LA    R1,2048              2K
 *
          MVC   104(8),=A(0,MDONE) PROGRAM CHECK NEW PSW
 *
 MLOOP    DS    0H
          SSK   R2,R3              SET STORAGE KEY
          AR    R3,R1              NEXT 2K PAGE
          CR    R3,R4              HIT 16 MEG?
          BL    MLOOP              LOOP BACK
 *
 MDONE    DS    0H
          MVC   104(8),=A(X'00020000',X'00010BAD') PC NEW PSW
 *
 *

We start by setting our access key value to zero in Register 2.  We set the initial address in Register 3 to zero (storage location zero).  Register 4 is set to the maximum memory size (16 Meg) and Register 1 is set to 2k for our increment value.

Before beginning the loop we specify a New Program Check PSW.  If a program check interruption occurs, the CPU will load the value contained at location 104 into the PSW.  Here we specify a PSW with MDONE as the instruction address value.  If a program check occurs it will effectively cause a branch to the label MDONE.

The loop is very simple.  We use the SSK instruction to set the storage key of a 2k block of storage.  If the storage address does not exist a program check interruption occurs which causes a branch in execution to MDONE.  If the SSK was successful we add 2k to the address, check to see if we have reached the maximum memory size (16 Meg) and then loop back.

When we reach MDONE either because of a program check interruption or because fell through the branch, Register 3 contains the high memory address and tells us how much memory is available.

The first thing we need to do is to set a new program check PSW.  Here we load a PSW with the wait bit set and an error code of x’010BAD’.  If we failed to specify a new program check PSW and a a program check  occurred, we could possibly end up in an endless loop.

*
         ST    R3,WORK4           SAVE MEMORY SIZE
         UNPK  WORK8(9),WORK4(5)  UNPACK
         TR    WORK8,TRTAB-C'0'   MAKE PRINTABLE
*
*
         LR    R1,R3              COPY MEMORY SIZE
         SLR   R0,R0
         D     R0,=A(X'00100000')  DIVIDE BY 1MEG
         CVD   R1,DOUBLE          SAVE RESULT AS DECIMAL
         ED    EDWK,DOUBLE+6
         MVC   MEMSIZE2,EDWK+1
*
*
         MVC   MEMSIZE1,WORK8     MOVE IN MEMORY SIZE
*
         @PRINT MSG1,LEN=L'MSG1
         @PRINT MSG2,LEN=L'MSG2
         @PRINT MSG1,LEN=L'MSG1
*
*
         LPSW   DONE
*

For testing we can us UNPK and then TR to get a printable hex value.  We then divide the max memory size by 1 Meg, and use CVD and ED to get a decimal value.  These values are moved into our print line and then printed.

DONE     DC    A(X'00020000',X'0099FACE')   WAIT STATE PSW
*                                                                      

MSG1     DC    C'*****************************************************'
MSG2     DC    CL132' '
         ORG   MSG2
         DC    C'  MEMORY SIZE=X'''
MEMSIZE1 DC    CL8'********',C'''  '
MEMSIZE2 DC    CL3'***',C' MEG'
         ORG   ,
*
DOUBLE   DS    D
FSA      DS    18F
WORK4    DS    F
WORK8    DC    CL8'********',C'**'
*
EDWK     DC    X'40202020'
*
TRTAB    DC    C'0123456789ABCDEF'
*

The complete program is available at DBOOT1.

[Next – Copy To High Memory]

IPL From Disk

Now that we understand how to access a file on a disk volume we can look at how to IPL from disk.  Our goal is to write a bootstrap loader that will then load a standard load module from a PDS.

The bootstrap loader will reside on cylinder zero, track zero of our IPL volume.  The initial IPL record is on record 1 and will consist of a PSW and two CCW’s (read data and TIC).  Record two will contain additional CCW’s to read in a block of executable code that will be contained in record 4.  Record 3 is skipped and is reserved for use as the Volume Label (VOL1) record.

Our bootstrap program will relocate itself to high memory then it will search the VTOC for the PDS containing our initial load module.  We will use the name “TXXOS.NUCLEUS” as our data set name.  The initial load module will be named “TXXNUC01”

Once the nucleus is loaded into memory the bootstrap program will transfer control.

We will start by working on the bootstrap loader but will use our Absolute Card Loader.  Once we get the bootstrap loader working properly we will tackle how to set up the IPL records on the disk volume.

[Next – Determine Memory Size]

DISK3 Output

---READ VOLUME LABEL
-----READ FORMAT 4 DSCB
-----FIND FORMAT 1 DSCB 'TXXOS.NUCLEUS'**
-------- IOR --------
00001200  000010A0 03450000 000010B0 0E40002C  ................
00001210  00080000 00000000 00000000 00000101  ................

-------- IOR --------
00001200  000010A0 03450000 000010B0 0E40002C  ................
00001210  00080000 00000000 00000000 00000201  ................

-----READ DIRECTORY BLOCKS
----- READ PDS MEMBER DATA

00001300  20000000 00010010 C1C2E2D3 D6C1C440  ........ABSLOAD.
00001310  00000000 01000358 00035803 58000000  ................

-------- IOR --------
00001200  000010A0 03450000 000010B0 0E400005  ................
00001210  00080000 00000000 00000000 0400033A  ................

00001300  80FA0100 00000000 00000000 00000000  ................
00001310  00000000 00000000 00000000 00000000  ................
00001320  00000000 00000000 00000000 00000000  ................
00001330  00000000 00000000 00000000 00000000  ................
00001340  00000000 00000000 00000000 00000000  ................
00001350  00000000 00000000 00000000 00000000  ................
00001360  00000000 00000000 00000000 00000000  ................
00001370  00000000 00000000 00000000 00000000  ................
00001380  00000000 00000000 00000000 00000000  ................
00001390  00000000 00000000 00000000 00000000  ................
000013A0  00000000 00000000 00000000 00000000  ................
000013B0  00000000 00000000 00000000 00000000  ................
000013C0  00000000 00000000 00000000 00000000  ................
000013D0  00000000 00000000 00000000 00000000  ................
000013E0  00000000 00000000 00000000 00000000  ................
000013F0  00000000 00000000 00000001 00000000  ................

00001300  801102F5 F7F5F2E2 C3F1F0F4 40030810  ...5752SC104....
00001310  338F0000 00000000 00000000 00000000  ................

00001300  80148480 0100F5F7 F4F1E2C3 F1F0F340  ..D...5741SC103.
00001310  02011031 5F000000 00000000 00000000  ....^...........

00001300  01000000 00040000 06000000 40000358  ................
00001310  00010358 5F000000 00000000 00000000  ....^...........

00001300  90ECD00C 18CF4110 C0D05010 D00850D0  ..........&...&.
00001310  100418D1 4510C01C 8F000118 0A134110  ...J............
00001320  C1184100 C17858F0 103005EF 4110C118  A...A..0......A.
00001330  4100C1C8 58F01030 05EF4110 C1184100  ..AH.0......A...
00001340  C21858F0 103005EF 4110C118 4100C268  B..0......A...B.
00001350  58F01030 05EF4110 C1184100 C2B858F0  .0......A...B..0
00001360  103005EF 4510C06C 80000118 0A1458D0  .......%........
00001370  D00498EC D00C1FFF 07FE0000 00000000  ..Q.............
00001380  00000000 00000000 00000000 00000000  ................
00001390  00000000 00000000 00000000 00000000  ................
000013A0  00000000 00000000 00000000 00000000  ................
000013B0  00000000 00000000 00000000 00000000  ................
000013C0  00000000 00000000 00000000 00000000  ................
000013D0  00000000 00000000 00000000 00000000  ................
000013E0  00000000 00000000 00000000 00000000  ................
000013F0  00000000 00000000 00000000 00000000  ................
00001400  00000000 00000000 00000000 00000000  ................
00001410  00000000 00000000 00000000 00000000  ................
00001420  00000000 00000000 00000000 00000001  ................
00001430  00004000 00000001 00000001 80000000  ................
00001440  D7E4D5C3 C8404040 02000050 00000001  PUNCH......&....
00001450  00000001 00000050 00000000 00000001  .......&........
00001460  00000001 00000001 00000050 00000001  ...........&....
00001470  00000000 00000001 00000000 00002050  ...............&
00001480  02002000 60000050 08002000 00000000  ....-..&........
00001490  00000000 00000000 00000000 00000000  ................
000014A0  00000000 00000000 00000000 00000000  ................
000014B0  00000000 00000000 00000000 00000000  ................
000014C0  00000000 00000000 02002050 60000050  ...........&-..&
000014D0  020020A0 60000050 020020F0 20000050  ....-..&...0...&
000014E0  00000000 00000000 00000000 00000000  ................
000014F0  00000000 00000000 00000000 00000000  ................
00001500  00000000 00000000 00000000 00000000  ................
00001510  00000000 00000000 05A01F33 BF330002  ................
00001520  4110A0EE BE17A097 4110A096 50100048  .......P...O&...
00001530  9C003000 4770A0A8 9D003000 4780A02E  .......Y........
00001540  4710A0AC 47F0A01E D501A0D6 00444770  .....0..N..O....
00001550  A09E9502 A0EE4770 A0B0D502 A0D8A0EF  ..N.......N..Q..
00001560  4780A00E D502A0DE A0EF4780 A00ED502  ....N.........N.
00001570  A0DBA0EF 4780A00E D502A0E1 A0EF4780  ........N.......
00001580  A076D502 A0E4A0EF 4780A090 47F0A0B0  ..N..U.......0..
00001590  1F44BF47 A0F34850 A0F80650 4450A08A  .....3.&.8.&.&..
000015A0  47F0A00E D2004000 A0FE8200 00000000  .0..K.....B.....
000015B0  02000000 00000050 D201A0BC 00448200  .......&K.....B.
000015C0  A0B68200 A0BE8200 A0C68200 A0CE0000  ..B...B..FB.....
000015D0  00020000 00990000 00020000 00EE0001  .....R..........
000015E0  00020000 00EE0002 00020000 00EE0003  ................
000015F0  0C00E2E8 D4D9D3C4 C5E2C4E3 E7E3C5D5  ..SYMRLDESDTXTEN
00001600  C4000000 00000000 00000000 00000000  D...............
00001610  00000000 00000000 00000000 00000000  ................
00001620  00000000 00000000 00000000 00000000  ................
00001630  00000000 00000000 00000000 00000000  ................
00001640  00000000 00000000 00000000 00000000  ................
00001650  00000000 00000000 00000000 00000000  ................

00001300  0E000000 0000000C 00000000 00000000  ................
00001310  00010001 09000019 08000069 0A134110  ................

-------- IOR --------
00001200  000010A0 03450000 000010C0 0D004A7D  ...............'
00001210  00000000 00000000 00000000 04000407  ................

*** EOF READING DATA ***

The first and second IOR dumps are a result of searching the VTOC for the FMT1 DSCB for our data set.  Unit Check is set and sense byte 1 has x’08’ indicating record not found.  Our program increments the track number and runs the search again.

We have another IOR that is dumped after our first data block.  Again with UC and sense1 = x’08’ our program has reached the end of the track and needs to start reading on the next sequential track.

The final IOR that is dumped has Unit Exception set indicating an EOF condition.

The data block that are dumped are the contents of a load module.  In this case I used the ABSLOAD load module and simply renamed it to provide some test data.

[Next – IPL From Disk]

DISK3 Assembly Listing – Part 2

                                                                                                               PAGE   12

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

000BDE                              441 WAITIO99 DS    0H                                                       03930000
000BDE                              442 TIOCC1   DS    0H                                                       03940000
000BDE 41F0 0010      00010         443          LA    R15,16                                                   03950000
000BE2 47F0 C3E4      00BE6         444          B     XIOXT                                                    03960000
                                    445 *                                                                       03970000
                                    446 *                                                                       03980000
000BE6                              447 XIOXT    DS    0H                                                       03990000
000BE6 5810 D004      00004         448          L     R1,4(,R13)                                               04000000
000BEA 50F0 1010      00010         449          ST    R15,16(,R1)                                              04010000
                                    450 *                                                                       04020000
000BEE 12FF                         451          LTR   R15,R15                                                  04030000
000BF0 4780 C42A      00C2C         452          BZ    XIOXT10                                                  04040000
                                    453 *                                                                       04050000
                                    454          @PRINT '-------- IOR --------'                                 04060000
000BF4 4110 C853      01055         455+         LA     R1,=C'-------- IOR --------'                            00170000
000BF8 4100 0015      00015         456+         LA     R0,21                                                   00200000
000BFC 41F0 C43C      00C3E         457+         LA     R15,@PRINT                                              00210000
000C00 05EF                         458+         BALR   R14,R15                                                 00220000
                                    459          @DUMP IORB,IORLEN                                              04070000
000C02 4110 C9FE      01200         460+         LA    R1,IORB                                                  00360000
000C06 4100 0012      00012         461+         LA    R0,IORLEN                                                00360000
000C0A 41F0 C496      00C98         462+         LA    R15,@DUMP                                                00080000
000C0E 05EF                         463+         BALR  R14,R15                                                  00090000
                                    464          @PRINT ' '                                                     04080000
000C10 4110 C852      01054         465+         LA     R1,=C' '                                                00170000
000C14 4100 0001      00001         466+         LA     R0,1                                                    00200000
000C18 41F0 C43C      00C3E         467+         LA     R15,@PRINT                                              00210000
000C1C 05EF                         468+         BALR   R14,R15                                                 00220000
                                    469          @PRINT ' '                                                     04090000
000C1E 4110 C852      01054         470+         LA     R1,=C' '                                                00170000
000C22 4100 0001      00001         471+         LA     R0,1                                                    00200000
000C26 41F0 C43C      00C3E         472+         LA     R15,@PRINT                                              00210000
000C2A 05EF                         473+         BALR   R14,R15                                                 00220000
                                    474 *                                                                       04100000
000C2C                              475 XIOXT10  DS    0H                                                       04110000
000C2C 58D0 D004      00004         476          L     R13,4(,R13)                                              04120000
000C30 98EC D00C      0000C         477          LM    R14,R12,12(R13)    RESTORE CALLER'S REGS                 04130000
000C34 07FE                         478          BR    R14                RETURN TO CALLER                      04140000
                                    479 *                                                                       04150000
                                    480 *                                                                       04160000
                                    481 **********************************************************************  04170000
                                    482 *                                                                       04180000
                                    483 *   LOAD WAIT STATE PSW TO HALT EXECUTION                               04190000
                                    484 *                                                                       04200000
                                                                                                               PAGE   13

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                    485 **********************************************************************  04210000
                                    486 *                                                                       04220000
000C36 8200 C8D6      010D8         487 EXIT     LPSW   DONE             LOAD A WAIT PSW                        04230000
000C3A 8200 C8DE      010E0         488 ERREXIT  LPSW   ERRPSW           LOAD A WAIT PSW                        04240000
                                    489 *                                                                       04250000
                                    490 **********************************************************************  04260000
                                    491 *                                                                       04270000
                                    492 *   UTILITY SUBROUTINES                                                 04280000
                                    493 *                                                                       04290000
                                    494 **********************************************************************  04300000
                                    495 *                                                                       04310000
                                    496          PUSH   PRINT                                                   04320000
                                    497 *        PRINT  NOGEN                                                   04330000
                                    498          @PRINT GEN=YES                                                 04340000
000C3E 90EC D00C      0000C         499+@PRINT   STM    R14,R12,12(R13)        SAVE CALLERS REGISTERS           00270000
000C42 1821                         500+         LR     R2,R1                  POINT TO DATA TO PRINT           00280000
000C44 1830                         501+         LR     R3,R0                  LENGTH OF DATA TO PRINT          00290000
000C46 4110 0084      00084         502+         LA     R1,132                 MAX LENGTH WE CAN PRINT          00300000
000C4A 1931                         503+         CR     R3,R1                  TOO BIG                          00310000
000C4C 47D0 C450      00C52         504+         BNH    @002101                NO - BRANCH                      00320000
000C50 1831                         505+         LR     R3,R1                  SET TO MAX                       00330000
000C52                              506+@002101  DS     0H                                                      00340000
000C52 5020 C48E      00C90         507+         ST     R2,@002190             SAVE DATA ADDR INTO CCW          00350000
000C56 9209 C48E      00C90         508+         MVI    @002190,X'09'          PRINT: SINGLE SPACE              00360000
000C5A 5030 C492      00C94         509+         ST     R3,@002190+4           SAVE LENGTH INTO CCW             00370000
000C5E 4110 C48E      00C90         510+         LA     R1,@002190             POINT TO CCW                     00380000
000C62 5010 0048      00048         511+         ST     R1,72                  SAVE INTO CAW                    00390000
000C66 4120 000E      0000E         512+         LA     R2,X'00E'              GET PRINT DEVICE ADDRESS         00400000
000C6A 9C00 2000      00000         513+         SIO    0(R2)                                                   00410000
000C6E 4770 C486      00C88         514+         BNZ    @002181                BRANCH IF ERROR                  00420000
000C72                              515+@002102  DS     0H                                                      00430000
000C72 9D00 2000      00000         516+         TIO    0(R2)                  WAIT FOR I/O TO COMPLETE         00440000
000C76 4780 C480      00C82         517+         BZ     @002103                COMPLETE                         00450000
000C7A 4710 C48A      00C8C         518+         BC     1,@002182              BRANCH IF ERROR                  00460000
000C7E 47F0 C470      00C72         519+         B      @002102                LOOP BACK AND WAIT               00470000
                                    520+*                                                                       00480000
000C82                              521+@002103  DS     0H                                                      00490000
000C82 98EC D00C      0000C         522+         LM     R14,R12,12(R13)        RESTORE REGISTERS                00500000
000C86 07FE                         523+         BR     R14                                                     00510000
                                    524+*                                                                       00520000
000C88 8200 C71E      00F20         525+@002181  LPSW   @ERRPRT1               LOAD WAIT PSW                    00530000
000C8C 8200 C726      00F28         526+@002182  LPSW   @ERRPRT2               LOAD WAIT PSW                    00540000
000C90                              527+         DS     0D                                                      00550000
000C90 0000000000000000             528+@002190  DC     X'00',AL3(0),X'00',X'00',AL2(0)  CCW                    00560000
                                                                                                               PAGE   14

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                    529 *        @CARD  GEN=YES                                                 04350000
                                    530          @DUMP  GEN=YES                                                 04360000
000C98 90EC D00C      0000C         531+@DUMP    STM   R14,R12,12(R13)                                          00140000
000C9C 41F0 C5AE      00DB0         532+         LA    R15,@002280        NEW SAVE AREA                         00150000
000CA0 50F0 D008      00008         533+         ST    R15,8(,R13)                                              00160000
000CA4 50D0 F004      00004         534+         ST    R13,4(,R15)                                              00170000
000CA8 18DF                         535+         LR    R13,R15                                                  00180000
                                    536+*                                                                       00190000
000CAA 18A1                         537+         LR    R10,R1             DATA ADDRESS                          00200000
000CAC 18B0                         538+         LR    R11,R0             LENGTH                                00210000
000CAE 1ABA                         539+         AR    R11,R10            END ADDRESS                           00220000
                                    540+*                                                                       00230000
000CB0 54A0 C606      00E08         541+         N     R10,@002283        ALIGN                                 00240000
000CB4                              542+@002201  DS    0H                                                       00250000
000CB4 9240 C528      00D2A         543+         MVI   @002270,C' '       CLEAR PRINT BUFFER                    00260000
000CB8 D282 C529 C528 00D2B 00D2A   544+         MVC   @002270+1(L'@002270-1),@002270                           00270000
000CBE 50A0 C5F6      00DF8         545+         ST    R10,@002281        ADDRESS                               00280000
000CC2 F384 C5FA C5F6 00DFC 00DF8   546+         UNPK  @002282(9),@002281(5)                                    00290000
000CC8 DC07 C5FA C61A 00DFC 00E1C   547+         TR    @002282(8),@002299-C'0'                                  00300000
000CCE D207 C528 C5FA 00D2A 00DFC   548+         MVC   @002271,@002282                                          00310000
                                    549+*                                                                       00320000
000CD4 D20F C557 A000 00D59 00000   550+         MVC   @002274,0(R10)                                           00330000
000CDA DC0F C557 C60A 00D59 00E0C   551+         TR    @002274,@002298    KEEP ONLY PRINTABLE                   00340000
                                    552+*                                                                       00350000
000CE0 4120 C532      00D34         553+         LA    R2,@002272         FIRST DATA AREA                       00360000
000CE4 4130 0004      00004         554+         LA    R3,4                                                     00370000
000CE8                              555+@002202  DS    0H                                                       00380000
000CE8 D203 C5F6 A000 00DF8 00000   556+         MVC   @002281(4),0(R10)                                        00390000
000CEE F384 C5FA C5F6 00DFC 00DF8   557+         UNPK  @002282(9),@002281(5)                                    00400000
000CF4 DC07 C5FA C61A 00DFC 00E1C   558+         TR    @002282(8),@002299-C'0'                                  00410000
000CFA D207 2000 C5FA 00000 00DFC   559+         MVC   0(8,R2),@002282                                          00420000
000D00 41A0 A004      00004         560+         LA    R10,4(,R10)                                              00430000
000D04 4120 2009      00009         561+         LA    R2,9(,R2)                                                00440000
000D08 4630 C4E6      00CE8         562+         BCT   R3,@002202                                               00450000
                                    563+*                                                                       00460000
                                    564+*                                                                       00470000
000D0C 4110 C528      00D2A         565+         LA    R1,@002270                                               00360000
000D10 4100 0084      00084         566+         LA    R0,132                                                   00360000
000D14 41F0 C43C      00C3E         567+         LA     R15,@PRINT                                              00110000
000D18 05EF                         568+         BALR   R14,R15                                                 00120000
                                    569+*                                                                       00490000
                                    570+*                                                                       00500000
000D1A 19AB                         571+         CR    R10,R11            STILL MORE TO DO                      00510000
000D1C 4740 C4B2      00CB4         572+         BL    @002201            YES - LOOP BACK                       00520000
                                                                                                               PAGE   15

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                    573+*                                                                       00530000
                                    574+*                                                                       00540000
000D20 58D0 D004      00004         575+         L     R13,4(,R13)                                              00550000
000D24 98EC D00C      0000C         576+         LM    R14,R12,12(R13)                                          00560000
000D28 07FE                         577+         BR    R14                                                      00570000
                                    578+*                                                                       00580000
                                    579+*                                                                       00590000
000D2A 4040404040404040             580+@002270  DC    CL132' '                                                 00600000
000DAE                      00D2A   581+         ORG   @002270                                                  00610000
000D2A                              582+@002271  DS    CL8                                                      00620000
000D32                              583+         DS    CL2                                                      00630000
000D34                              584+@002272  DS    CL8,CL1,CL8,CL1,CL8,CL1,CL8,CL2                          00640000
000D59                              585+@002274  DS    CL16                                                     00650000
000D69                      00DAE   586+         ORG   ,                                                        00660000
                                    587+*                                                                       00670000
000DAE 0000
000DB0 0000000000000000             588+@002280  DC    18F'0'                                                   00680000
000DF8 00000000                     589+@002281  DC    F'0'                                                     00690000
000DFC F040404040404040             590+@002282  DC    CL9'0'                                                   00700000
000E08                              591+         DS    0F                                                       00710000
000E08 00FFFFF0                     592+@002283  DC    X'00FFFFF0'                                              00720000
                                    593+*                                                                       00730000
                                    594+*                                                                       00740000
000E0C                              595+@002298  DS    0C                                                       00750000
                                    596+*                 0 1 2 3 4 5 6 7 8 9 A B C D E F                       00760000
000E0C 4B4B4B4B4B4B4B4B             597+         DC    X'4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B'  00                  00770000
000E1C 4B4B4B4B4B4B4B4B             598+         DC    X'4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B'  10                  00780000
000E2C 4B4B4B4B4B4B4B4B             599+         DC    X'4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B'  20                  00790000
000E3C 4B4B4B4B4B4B4B4B             600+         DC    X'4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B'  30                  00800000
000E4C 4B4B4B4B4B4B4B4B             601+         DC    X'4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B'  40                  00810000
000E5C 504B4B4B4B4B4B4B             602+         DC    X'504B4B4B4B4B4B4B4B4B5A5B5C5D5E5F'  50                  00820000
000E6C 60614B4B4B4B4B4B             603+         DC    X'60614B4B4B4B4B4B4B4B6A6B6C6D6E6F'  60                  00830000
000E7C 4B4B4B4B4B4B4B4B             604+         DC    X'4B4B4B4B4B4B4B4B4B4B7A7B7C7D7E7F'  70                  00840000
000E8C 4BC1C2C3C4C5C6C7             605+         DC    X'4BC1C2C3C4C5C6C7C8C94B4B4B4B4B4B'  80                  00850000
000E9C 4BD1D2D3D4D5D6D7             606+         DC    X'4BD1D2D3D4D5D6D7D8D94B4B4B4B4B4B'  90                  00860000
000EAC 4B4BE2E3E4E5E6E7             607+         DC    X'4B4BE2E3E4E5E6E7E8E94B4B4B4B4B4B'  A0                  00870000
000EBC 4B4B4B4B4B4B4B4B             608+         DC    X'4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B'  B0                  00880000
000ECC 4BC1C2C3C4C5C6C7             609+         DC    X'4BC1C2C3C4C5C6C7C8C94B4B4B4B4B4B'  C0                  00890000
000EDC 4BD1D2D3D4D5D6D7             610+         DC    X'4BD1D2D3D4D5D6D7D8D94B4B4B4B4B4B'  D0                  00900000
000EEC 4B4BE2E3E4E5E6E7             611+         DC    X'4B4BE2E3E4E5E6E7E8E94B4B4B4B4B4B'  E0                  00910000
000EFC F0F1F2F3F4F5F6F7             612+         DC    X'F0F1F2F3F4F5F6F7F8F94B4B4B4B4B4B'  F0                  00920000
                                    613+*                                                                       00930000
                                    614+*                                                                       00940000
000F0C F0F1F2F3F4F5F6F7             615+@002299  DC    C'0123456789ABCDEF'                                      00950000
                                                                                                               PAGE   16

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                    616          @ERR  ,                                                        04370000
000F20                              617+         DS   0D                                                        00030000
000F20 0002000000BE0001             618+@ERRPRT1 DC   X'0002000000',X'BE0001'                                   00040000
000F28 0002000000BE0002             619+@ERRPRT2 DC   X'0002000000',X'BE0002'                                   00050000
                                    620          @REGS ,                                                        04380000
                            00000   621+R0       EQU   0                                                        00030000
                            00001   622+R1       EQU   1                                                        00040000
                            00002   623+R2       EQU   2                                                        00050000
                            00003   624+R3       EQU   3                                                        00060000
                            00004   625+R4       EQU   4                                                        00070000
                            00005   626+R5       EQU   5                                                        00080000
                            00006   627+R6       EQU   6                                                        00090000
                            00007   628+R7       EQU   7                                                        00100000
                            00008   629+R8       EQU   8                                                        00110000
                            00009   630+R9       EQU   9                                                        00120000
                            0000A   631+R10      EQU   10                                                       00130000
                            0000B   632+R11      EQU   11                                                       00140000
                            0000C   633+R12      EQU   12                                                       00150000
                            0000D   634+R13      EQU   13                                                       00160000
                            0000E   635+R14      EQU   14                                                       00170000
                            0000F   636+R15      EQU   15                                                       00180000
                                    637          POP   PRINT                                                    04390000
                                    638 *                                                                       04400000
                                    639 **********************************************************************  04410000
                                    640 *                                                                       04420000
000F30                              641          LTORG ,                                                        04430000
000F30 FFFFFFFFFFFFFFFF             642                =XL8'FFFFFFFFFFFFFFFF'
000F38 E3E7E7D5E4C3F2F8             643                =CL8'TXXNUC28'
000F40 5C5C5C40C5D6C640             644                =C'*** EOF READING DATA ***'
000F58 606060D9C5C1C440             645                =C'---READ VOLUME LABEL'
000F6C 00000002                     646                =F'2'
000F70 00000000                     647                =F'0'
000F74 0000001F                     648                =A(X'1F')
000F78 00004A7D                     649                =A(19069)
000F7C 6060606060D9C5C1             650                =C'-----READ DIRECTORY BLOCKS'
000F96 C4C9D9C5C3E3D6D9             651                =C'DIRECTORY ENTRY FOR TXXNUC28 NOT FOUND'
000FBC 606060606040D9C5             652                =C'----- READ PDS MEMBER DATA'
000FD6 5C5C5C40C5D9D9D6             653                =C'*** ERROR READING DATA ***'
000FF0 0C00                         654                =X'0C00'
000FF2 0000000003                   655                =X'0000000003'
000FF7 6060606060D9C5C1             656                =C'-----READ FORMAT 4 DSCB'
00100E 6060606060C6C9D5             657                =C'-----FIND FORMAT 1 DSCB ''TXXOS.NUCLEUS'''
001035 5C5C5C40E3E7E7D6             658                =C'*** TXXOS.NUCLEUS NOT FOUND ***'
001054 40                           659                =C' '
                                                                                                               PAGE   17

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

001055 6060606060606060             660                =C'-------- IOR --------'
                                    661 *                                                                       04440000
                                    662 **********************************************************************  04450000
                                    663 *                                                                       04460000
00106A E3E7E7D6E24BD5E4             664 DSNAME   DC    CL44'TXXOS.NUCLEUS'                                      04470000
                                    665 *                                                                       04480000
                                    666 *                                                                       04490000
                                    667 *                                                                       04500000
001098                              668          DS    0D                                                       04510000
001098 0400117820000020             669 CCWSENSE DC    X'04',AL3(SENSE),AL1(@CCW#SLI,0),AL2(32)                 04520000
                                    670 *                                                                       04530000
                                    671 *                                                                       04540000
0010A0                              672          DS    0D                                                       04550000
0010A0 0700121940000006             673 CCWSEEK  DC    X'07',AL3(MBBCCHHR+1),AL1(@CCW#CC),X'00',AL2(6)          04560000
0010A8 3100121B40000005             674 CCWSRCH  DC    X'31',AL3(MBBCCHHR+3),AL1(@CCW#CC),X'00',AL2(5)          04570000
0010B0 080010A840000000             675          DC    X'08',AL3(CCWSRCH),AL1(@CCW#CC),X'00',AL2(0)             04580000
0010B8 0600130020000800             676 CCWREAD  DC    X'06',AL3(INBUF),AL1(@CCW#SLI),X'00',AL2(2048)           04590000
                                    677 *                                                                       04600000
                                    678 *                                                                       04610000
                                    679 *                                                                       04620000
0010C0 0000000000                   680 VTOCADDR DC   XL5'00'        ADDR OF VTOC FROM VOLUME LABEL RECORD      04630000
0010C5 00000000                     681 VTOCEND  DC   XL4'00'        ENDING ADDRESS OF VTOC EXTENT (CCHH)       04640000
0010C9 0000000000                   682 HIWATER  DC   XL5'00'        HIGH WATER DSCB ADDRESS (CCHHR)            04650000
                                    683 *                                                                       04660000
0010CE 00000000                     684 BEGEXT   DC   XL4'00'        BEGINNING CCHH OF DATA SET                 04670000
                                    685 *                                                                       04680000
0010D2 0000                         686 TRKCYL   DC   H'0'           TRACKS/CYLINDER                            04690000
                                    687 *                                                                       04700000
                                    688 *                                                                       04710000
                                    689 **********************************************************************  04720000
                                    690 *                                                                       04730000
                                    691 *   WAIT STATE PSW                                                      04740000
                                    692 *                                                                       04750000
                                    693 **********************************************************************  04760000
                                    694 *                                                                       04770000
0010D8                              695          DS    0D                                                       04780000
0010D8 0002000000000ACE             696 DONE     DC    X'0002000000',X'000ACE'                                  04790000
0010E0 0002000000000BAD             697 ERRPSW   DC    X'0002000000',X'000BAD'                                  04800000
                                    698 *                                                                       04810000
                                    699 **********************************************************************  04820000
                                    700 *   SAVE AREAS                                                          04830000
                                    701 *                                                                       04840000
                                    702 **********************************************************************  04850000
                                    703 *                                                                       04860000
                                                                                                               PAGE   18

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

0010E8                              704 SAVEA    DS    18F                                                      04870000
001130                              705 XIOSAVE  DS    18F                                                      04880000
                                    706 *                                                                       04890000
001178                              707 SENSE    DS    XL32          SENSE I/O BUFFER                           04900000
001198                              708 DSCB1BUF DS    CL96          DSCB  I/O BUFFER                           04910000
                                    709 *                                                                       04920000
                                    710 *                                                                       04930000
                                    711 **********************************************************************  04940000
                                    712 * IOR (I/O REQUEST) BLOCK                                               04950000
                                    713 *                                                                       04960000
                                    714 **********************************************************************  04970000
0011F8                              715          DS    XL((((*-BEGIN+16)/16)*16)-(*-BEGIN))                     04980000
                                    716 *                                                                       04990000
001200 000010A003450000             717 IORB     DC    A(CCWSEEK),AL2(X'345'),AL2(0),XL8'00',XL2'0'             05000000
                                    718 *                                                                       05010000
                                    719 **********************************************************************  05020000
                                    720 *  MBBCCHHR - BLOCK ID AREA                                             05030000
                                    721 **********************************************************************  05040000
                                    722 *                                                                       05050000
001218                              723          DS    0D                                                       05060000
                                    724 *                                                                       05070000
                                    725 *               +0+1+2+3+4+5+6+7                                        05080000
                                    726 *                 M B B C C H H R                                       05090000
                                    727 **********     X'0000000000000001'                                      05100000
                                    728 *                                                                       05110000
001218                              729 MBBCCHHR DS    0XL8                                                     05120000
001218 000000                       730 MBB      DC    X'000000'                                                05130000
00121B                              731 CCHHR    DS    0XL5                                                     05140000
00121B                              732 CCHH     DS    0CL4                                                     05150000
00121B 0000                         733 CC       DC    X'0000'                                                  05160000
00121D 0000                         734 HH       DC    X'0000'                                                  05170000
00121F 01                           735 R        DC    X'01'                                                    05180000
                                    736 *                                                                       05190000
                                    737 *********************************************************************   05200000
                                    738 *                                                                       05210000
                                    739 *   INBUF - MUST BE LAST                                                05220000
                                    740 *                                                                       05230000
                                    741 *********************************************************************   05240000
                                    742 *                                                                       05250000
001220                              743          DS    0D                                                       05260000
001220                              744          DS    XL((((*-BEGIN+256)/256)*256)-(*-BEGIN))                  05270000
001300                              745 INBUF    DS    0X   L19069                                              05280000
                                    746 *                                                                       05290000
                                    747 *********************************************************************   05300000
                                                                                                               PAGE   19

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                    748 *                                                                       05310000
                                    749 *  XXXXX   XXX   XXXX                                                   05320000
                                    750 *    X    X   X  X   X                                                  05330000
                                    751 *    X    X   X  X   X                                                  05340000
                                    752 *    X    X   X  XXXX                                                   05350000
                                    753 *    X    X   X  X  X                                                   05360000
                                    754 *  XXXXX   XXX   X   X                                                  05370000
                                    755 *                                                                       05380000
                                    756 *********************************************************************   05390000
                                    757 *                                                                       05400000
000000                              758 IOR      DSECT ,                                                        05410000
000000                              759 IORCCW   DS    A             ADDRESS OF CCW                             05420000
000004                              760 IORUNIT  DS    XL2           DEVICE ADDRESS                             05430000
000006                              761 IORSIOCC DS    X             SIO CONDITION CODE                         05440000
000007                              762          DS    X                                                        05450000
000008                              763 IORCSW   DS    XL8           CHANNEL STATUS WORD                        05460000
000010                              764 IORSENS0 DS    X             SENSE BYTE 0                               05470000
000011                              765 IORSENS1 DS    X             SENSE BYTE 1                               05480000
                                    766 *                                                                       05490000
                            00012   767 IORLEN   EQU   *-IOR                                                    05500000
                                    768 *                                                                       05510000
                                    769 *                                                                       05520000
                                    770 *********************************************************************   05530000
                                    771 *                                                                       05540000
                                    772          @CCW  ,                                                        05550000
                            00080   773+@CCW#CD  EQU   X'80'         * CHAIN DATA                               00030000
                            00040   774+@CCW#CC  EQU   X'40'         * COMMAND CHAIN                            00040000
                            00020   775+@CCW#SLI EQU   X'20'         * SUPPRESS LENGTH INDICATION               00050000
                            00010   776+@CCW#SKP EQU   X'10'         * SKIP                                     00060000
                            00008   777+@CCW#PCI EQU   X'08'         * PROGRAM CONTROLLED INTERRUPT             00070000
                            00004   778+@CCW#IDA EQU   X'04'         * INDIRECT ADDRESS                         00080000
                                    779+*                                                                       00090000
                                    780+*                                                                       00100000
000000                              781+@CCW     DSECT ,                                                        00110000
000000                              782+@CCWCMD  DS    X             - COMMAND CODE                             00120000
000001                              783+@CCWDATA DS    AL3           - DATA ADDRESS                             00130000
000004                              784+@CCWFLAG DS    X             - FLAGS                                    00140000
000005                              785+         DS    X             - RESERVED (ZERO)                          00150000
000006                              786+@CCWLEN  DS    AL2 N         - LENGTH                                   00160000
                                    787+*                                                                       00170000
                                    788 *                                                                       05560000
                                    789 *********************************************************************   05570000
                                    790 *                                                                       05580000
                                    791          @DSCB4 ,                                                       05590000
                                                                                                               PAGE   20

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

000000                              792+DSCB4    DSECT ,                                                        00030000
000000                              793+DS4IDFMT DS    X              FORMAT IDENTIFIER X'F4'                   00040000
000001                              794+DS4HPCHR DS    XL5            HIGHEST ADDRESS OF A FORMAT 1 DSCB        00050000
000006                              795+DS4DSREC DS    XL2            NUMBER OF AVAILABLE DSCB'S                00060000
                                    796+*                                                                       00070000
000008                              797+DS4HCCHH DS    XL4            CCHH OF NEXT AVAILABLE ALTERNATE TRK      00080000
00000C                              798+DS4NOATK DS    XL2            NUMBER OF REMAINING ALTERNATE TRACKS      00090000
                                    799+*                                                                       00100000
00000E                              800+DS4VTOCI DS    X              VTOC INDICATORS                           00110000
                            00080   801+DS4DOSBT EQU   X'80'          * DOS BIT                                 00120000
                            00010   802+DS4DSTKP EQU   X'10'          * DOS STACKED BIT                         00130000
                            00008   803+DS4DOCVT EQU   X'08'          * DOS CONVERTED VTOC                      00140000
                            00004   804+DS4DIRF  EQU   X'04'          * DIRF BIT                                00150000
                            00002   805+DS4DICVT EQU   X'02'          * DIRF RECLAIMED                          00160000
                            00001   806+DS4IVTOC EQU   X'01'          * VOLUME USES AN INDEXED VTOC             00170000
                                    807+*                                                                       00180000
00000F                              808+DS4NOEXT DS    X              NUMBER OF EXTENTS IN THE VTOC             00190000
                                    809+*                                                                       00200000
000010                              810+         DS    XL2            RESERVED                                  00210000
000012                              811+DS4DEVCT DS    0XL14          DEVICE CONSTANTS                          00220000
000012                              812+DS4DEVSZ DS    XL4            DEVICE SIZE                               00230000
                                    813+*                            * XL2 CYLS/DEVICE                          00240000
                                    814+*                            * XL2 TRKS/CYL                             00250000
000016                              815+DS4DEVTK DS    XL2            DEVICE TRACK LENGTH                       00260000
000018                              816+DS4DEVOV DS    XL2            KEYED RECORD OVERHEAD                     00270000
00001A                              817+DS4DEVI  DS    X              NON-LAST KEYED RECORD OVERHEAD            00280000
00001B                              818+DS4DEVL  DS    X              LAST KEYED RECORD OVERHEAD                00290000
00001C                              819+DS4DEVK  DS    X              NON-KEYED RECORD OVERHEAD DIFFERENTIAL    00300000
00001D                              820+DS4DEVFG DS    X              FLAG BYTE                                 00310000
                                    821+*                                                                       00320000
00001E                              822+DS4DEVTL DS    XL2            DEVICE TOLERANCE                          00330000
000020                              823+DS4DEVDT DS    X              NUMBER OF DSCB'S PER TRACK                00340000
000021                              824+DS4DEVDB DS    X              NUMBER OF DIRECTORY BLOCKS PER TRACK      00350000
                                    825+*                                                                       00360000
000022                              826+DS4AMTIM DS    XL8            VSAM TIME STAMP                           00370000
                                    827+*                                                                       00380000
00002A                              828+DS4AMCAT DS    0XL3           VSAM CATALOG INDICATOR                    00390000
00002A                              829+DS4VSIND DS    X              VSAM INDICATORS                           00400000
00002B                              830+DS4VSCRA DS    XL2            RELATIVE TRACK LOCATION OF THE CRA        00410000
                                    831+*                                                                       00420000
00002D                              832+DS4R2TIM DS    XL8            VSAM VOLUME/CATALOG MATCH TIME STAMP      00430000
000035                              833+         DS    CL5            RESERVED                                  00440000
                                    834+*                                                                       00450000
00003A                              835+DS4F6PTR DS    CL5            POINTER TO FIRST FORMAT 6 DSCB            00460000
                                                                                                               PAGE   21

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

00003F                              836+DS4VTOCE DS    CL10           VTOC EXTENT DESCRIPTION                   00470000
000049                              837+         DS    XL25           RESERVED                                  00480000
                            00062   838+DS4END   EQU   *                                                        00490000
                                    839 *                                                                       05600000
                                    840 *********************************************************************   05610000
                                    841 *                                                                       05620000
                                    842          END   ,                                                        05630000

[Next – DISK3 Output]

DISK3 Assembly Listing – Part 1

                                                                                                               PAGE    2

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                      1 *********************************************************************   00010000
                                      2 *                                                                       00020000
                                      3 *       XXXX   XXXXX   XXXX  X  X  XXXX                                 00030000
                                      4 *       X   X    X    X      X X       X                                00040000
                                      5 *       X   X    X     XXX   XX    XXXX                                 00050000
                                      6 *       X   X    X        X  X X       X                                00060000
                                      7 *       XXXX   XXXXX  XXXX   X  X  XXXX                                 00070000
                                      8 *                                                                       00080000
                                      9 *********************************************************************   00090000
000000                               10 DISK3    START 0                                                        00100000
000000 0000000000000800              11 STARTPSW DC    X'0000000000',AL3(BEGIN)                                 00110000
                                     12 *                                                                       00120000
                                     13 *                                                                       00130000
000008                      00800    14          ORG   DISK3+2048    BEING AT 2K                                00140000
                                     15 *                                                                       00150000
000800 05C0                          16 BEGIN    BALR  R12,0         SET BASE REGISTER                          00160000
                            00802    17          USING *,R12,R11                                                00170000
                                     18 *                                                                       00180000
000802 41B0 C800      00800          19          LA    R11,2048(,R12)  SET UP                                   00190000
000806 41B0 B800      00800          20          LA    R11,2048(,R11)        SECOND BASE REGISTER               00200000
                                     21 *                                                                       00210000
00080A 41D0 C8E6      010E8          22          LA    R13,SAVEA     FIRST SAVE AREA                            00220000
                                     23 *                                                                       00230000
                                     24 *********************************************************************   00240000
                                     25 * READ THE VOLUME LABLE TO GET THE VTOC BEGINNING ADDRESS               00250000
                                     26 *                                                                       00260000
                                     27 *   VOL1 LABEL RECORD AT CC=00 HH=00 R=3 DATA LENGTH=80                 00270000
                                     28 *********************************************************************   00280000
                                     29 *                                                                       00290000
                                     30          @PRINT '---READ VOLUME LABEL'                                  00300000
00080E 4110 C756      00F58          31+         LA     R1,=C'---READ VOLUME LABEL'                             00170000
000812 4100 0014      00014          32+         LA     R0,20                                                   00200000
000816 41F0 C43C      00C3E          33+         LA     R15,@PRINT                                              00210000
00081A 05EF                          34+         BALR   R14,R15                                                 00220000
                                     35 *                                                                       00310000
00081C 4110 0050      00050          36          LA    R1,80              VOL1 LENGTH                           00320000
000820 5010 C8BA      010BC          37          ST    R1,CCWREAD+4                                             00330000
000824 4110 CAFE      01300          38          LA    R1,INBUF           BUFFER ADDRESS                        00340000
000828 5010 C8B6      010B8          39          ST    R1,CCWREAD                                               00350000
00082C 9206 C8B6      010B8          40          MVI   CCWREAD,X'06'      READ DATA                             00360000
                                     41 *                                                                       00370000
000830 D204 CA19 C7F0 0121B 00FF2    42          MVC   CCHHR(5),=X'0000000003'  CC=00 H=00 R=3 (VOL1)           00380000
                                     43 *                                                                       00390000
000836 4110 C9FE      01200          44          LA    R1,IORB                                                  00400000
                                                                                                               PAGE    3

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

00083A 45E0 C31E      00B20          45          BAL   R14,XIO            EXECUTE THE CCW CHAIN                 00410000
00083E 12FF                          46          LTR   R15,R15                                                  00420000
000840 4770 C438      00C3A          47          BNZ   ERREXIT            BRANCH IF FAILED                      00430000
                                     48 *                                                                       00440000
                                     49 *********************************************************************   00450000
                                     50 * READ THE FMT 4 DSCB                                                   00460000
                                     51 *                                                                       00470000
                                     52 *   VTOC BEGINNING CCHHR FROM VOL1 RECORD                               00480000
                                     53 *********************************************************************   00490000
                                     54 *                                                                       00500000
                                     55          @PRINT '-----READ FORMAT 4 DSCB'                               00510000
000844 4110 C7F5      00FF7          56+         LA     R1,=C'-----READ FORMAT 4 DSCB'                          00170000
000848 4100 0017      00017          57+         LA     R0,23                                                   00200000
00084C 41F0 C43C      00C3E          58+         LA     R15,@PRINT                                              00210000
000850 05EF                          59+         BALR   R14,R15                                                 00220000
                                     60 *                                                                       00520000
000852 D204 C8BE CB09 010C0 0130B    61          MVC   VTOCADDR,INBUF+11  SAVE VTOC ADDRESS FROM VOL RECORD     00530000
                                     62 *                                                                       00540000
000858 D204 CA19 C8BE 0121B 010C0    63          MVC   CCHHR(5),VTOCADDR                                        00550000
                                     64 *                                                                       00560000
00085E 4110 0060      00060          65          LA    R1,96              DSCB DATA LENGTH                      00570000
000862 5010 C8BA      010BC          66          ST    R1,CCWREAD+4                                             00580000
000866 4110 C996      01198          67          LA    R1,DSCB1BUF        I/O BUFFER                            00590000
00086A 5010 C8B6      010B8          68          ST    R1,CCWREAD                                               00600000
00086E 9206 C8B6      010B8          69          MVI   CCWREAD,X'06'      READ DATA                             00610000
                                     70 *                                                                       00620000
000872 4110 C9FE      01200          71          LA    R1,IORB                                                  00630000
000876 45E0 C31E      00B20          72          BAL   R14,XIO            EXECUTE CCW CHAIN                     00640000
00087A 12FF                          73          LTR   R15,R15                                                  00650000
00087C 4770 C438      00C3A          74          BNZ   ERREXIT            BRANCH IF ERROR                       00660000
                                     75 *                                                                       00670000
000880 D203 C8C3 C9D9 010C5 011DB    76          MVC   VTOCEND,DSCB1BUF+67  ENDING CCHH OF VTOC EXTENT          00680000
000886 D204 C8C7 C997 010C9 01199    77          MVC   HIWATER,DSCB1BUF+1   SAVE HIGHT WATER DSCB ADDRESS       00690000
00088C 1F11                          78          SLR   R1,R1                                                    00700000
00088E BF13 C9AA      011AC          79          ICM   R1,B'0011',DSCB1BUF+20  GET TRKS/CYL                     00710000
000892 4010 C8D0      010D2          80          STH   R1,TRKCYL          SAVE TRKS/CYL                         00720000
                                     81 *                                                                       00730000
                                     82 *********************************************************************   00740000
                                     83 * FIND FMT 1 DSCB FOR 'TXXOS.NUCLEUS'                                   00750000
                                     84 *                                                                       00760000
                                     85 *   SEARCH FOR FMT1 DSCB                                                00770000
                                     86 *********************************************************************   00780000
                                     87 *                                                                       00790000
                                     88          @PRINT '-----FIND FORMAT 1 DSCB ''TXXOS.NUCLEUS'''             00800000
                                                                                                               PAGE    4

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

000896 4110 C80C      0100E          89+         LA     R1,=C'-----FIND FORMAT 1 DSCB ''TXXOS.NUCLEUS'''        00170000
00089A 4100 0029      00029          90+         LA     R0,41                                                   00200000
00089E 41F0 C43C      00C3E          91+         LA     R15,@PRINT                                              00210000
0008A2 05EF                          92+         BALR   R14,R15                                                 00220000
                                     93 *                                                                       00810000
0008A4 4110 0060      00060          94          LA    R1,96              DSCB DATA LENGTH                      00820000
0008A8 5010 C8BA      010BC          95          ST    R1,CCWREAD+4                                             00830000
0008AC 4110 CAFE      01300          96          LA    R1,INBUF           I/O BUFFER ADDR                       00840000
0008B0 5010 C8B6      010B8          97          ST    R1,CCWREAD                                               00850000
0008B4 9206 C8B6      010B8          98          MVI   CCWREAD,X'06'      READ DATA                             00860000
                                     99 *                                                                       00870000
0008B8 4110 002C      0002C         100          LA    R1,44              KEY LENGTH FOR DSCB BLOCK             00880000
0008BC 5010 C8AA      010AC         101          ST    R1,CCWSRCH+4                                             00890000
0008C0 9240 C8AA      010AC         102          MVI   CCWSRCH+4,@CCW#CC  + COMMAND CHAIN                       00900000
0008C4 4110 C868      0106A         103          LA    R1,DSNAME          KEY (NAME TO SEARCH FOR)              00910000
0008C8 5010 C8A6      010A8         104          ST    R1,CCWSRCH                                               00920000
0008CC 9229 C8A6      010A8         105          MVI   CCWSRCH,X'29'      SEARCH KEY EQUAL                      00930000
                                    106 *                                                                       00940000
0008D0                              107 FINDLOOP DS    0H                                                       00950000
0008D0 D503 CA19 C8C3 0121B 010C5   108          CLC   CC(4),VTOCEND      CHECK FOR END OF EXTENT               00960000
0008D6 4720 C130      00932         109          BH    DSCBNFND           BRANCH IF WE REACHED THE END          00970000
                                    110 *                                                                       00980000
0008DA 4110 C9FE      01200         111          LA    R1,IORB            ISSUE                                 00990000
0008DE 45E0 C31E      00B20         112          BAL   R14,XIO                 I/O REQUEST                      01000000
                                    113 *                                                                       01010000
0008E2 12FF                         114          LTR   R15,R15            BRANCH IF                             01020000
0008E4 4780 C11C      0091E         115          BZ    DSCBFND                     FOUND                        01030000
                                    116 *                                                                       01040000
0008E8 D503 CA19 C8C7 0121B 010C9   117          CLC   CCHHR(4),HIWATER   HIT HIGH WATER DSCB ADDRESS ?         01050000
0008EE 47B0 C130      00932         118          BNL   DSCBNFND             YES - STOP SEARCH                   01060000
                                    119 *                                                                       01070000
0008F2 1F11                         120          SLR   R1,R1              SET UP TO SEARCH NEXT TRACK           01080000
0008F4 BF13 CA1B      0121D         121          ICM   R1,B'0011',HH      GET TRACK ADDRESS                     01090000
0008F8 4110 1001      00001         122          LA    R1,1(,R1)          ADD ONE                               01100000
0008FC BE13 CA1B      0121D         123          STCM  R1,B'0011',HH      SAVE BACK                             01110000
                                    124 *                                                                       01120000
000900 4910 C8D0      010D2         125          CH    R1,TRKCYL          COMPARE TO TRAKS/CYLINDER             01130000
000904 4740 C0CE      008D0         126          BL    FINDLOOP           LOOP BACK AND TRY AGAIN               01140000
                                    127 *                                                                       01150000
000908 D701 CA1B CA1B 0121D 0121D   128          XC    HH,HH              SET TRACK TO ZERO                     01160000
00090E BF13 CA19      0121B         129          ICM   R1,B'0011',CC      GET CYLINDER                          01170000
000912 4110 1001      00001         130          LA    R1,1(,R1)          ADD ONE                               01180000
000916 BE13 CA19      0121B         131          STCM  R1,B'0011',CC      SAVE BACK                             01190000
00091A 47F0 C0CE      008D0         132          B     FINDLOOP           ...AND LOOP BACK                      01200000

                                                                                                               PAGE    5

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                    133 *                                                                       01210000
                                    134 *                                                                       01220000
                                    135 *                                                                       01230000
00091E                              136 DSCBFND  DS    0H                 FOUND THE DSCB FOR OUR DATA SET       01240000
00091E D203 CA19 CB3D 0121B 0133F   137          MVC   CCHHR(4),INBUF+105+2-44 BEGINNING FIRST EXTENT           01250000
000924 D203 C8CC CA19 010CE 0121B   138          MVC   BEGEXT,CCHHR       SAVE BEGINNING EXTENT ADDRESS         01260000
00092A 9200 CA1D      0121F         139          MVI   R,0                RESET RECORD NUMBER                   01270000
                                    140 *                                                                       01280000
00092E 47F0 C142      00944         141          B     DSCBDONE           NOW READ DATA SET DIR BLOCK           01290000
                                    142 *                                                                       01300000
                                    143 *                                                                       01310000
                                    144 *                                                                       01320000
000932                              145 DSCBNFND DS    0H                                                       01330000
                                    146          @PRINT '*** TXXOS.NUCLEUS NOT FOUND ***'                       01340000
000932 4110 C833      01035         147+         LA     R1,=C'*** TXXOS.NUCLEUS NOT FOUND ***'                  00170000
000936 4100 001F      0001F         148+         LA     R0,31                                                   00200000
00093A 41F0 C43C      00C3E         149+         LA     R15,@PRINT                                              00210000
00093E 05EF                         150+         BALR   R14,R15                                                 00220000
000940 47F0 C434      00C36         151          B     EXIT                                                     01350000
                                    152 *                                                                       01360000
                                    153 *                                                                       01370000
                                    154 *                                                                       01380000
                                    155 *                                                                       01390000
                                    156 *********************************************************************   01400000
                                    157 * NOW READ THE PDS DIRECTORY TO FIND REQUESTED MEMBER                   01410000
                                    158 *                                                                       01420000
                                    159 *   PDS DIR LOCATED AT BEGINNING OF PDS DATA SET                        01430000
                                    160 *********************************************************************   01440000
                                    161 *                                                                       01450000
000944                              162 DSCBDONE DS    0H                                                       01460000
                                    163          @PRINT '-----READ DIRECTORY BLOCKS'                            01470000
000944 4110 C77A      00F7C         164+         LA     R1,=C'-----READ DIRECTORY BLOCKS'                       00170000
000948 4100 001A      0001A         165+         LA     R0,26                                                   00200000
00094C 41F0 C43C      00C3E         166+         LA     R15,@PRINT                                              00210000
000950 05EF                         167+         BALR   R14,R15                                                 00220000
                                    168 *                                                                       01480000
000952 4110 0100      00100         169          LA    R1,256             DIR BLOCK DATA LENGTH                 01490000
000956 5010 C8BA      010BC         170          ST    R1,CCWREAD+4                                             01500000
00095A 4110 CAFE      01300         171          LA    R1,INBUF           I/O BUFFER                            01510000
00095E 5010 C8B6      010B8         172          ST    R1,CCWREAD                                               01520000
000962 9206 C8B6      010B8         173          MVI   CCWREAD,X'06'      READ DATA                             01530000
                                    174 *                                                                       01540000
000966 4110 0005      00005         175          LA    R1,5               BLOCK ID LENGTH                       01550000
00096A 5010 C8AA      010AC         176          ST    R1,CCWSRCH+4                                             01560000
                                                                                                               PAGE    6

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

00096E 9240 C8AA      010AC         177          MVI   CCWSRCH+4,@CCW#CC  COMMAND CHAIN                         01570000
000972 4110 CA19      0121B         178          LA    R1,MBBCCHHR+3      BLOCK ID (CCHHR)                      01580000
000976 5010 C8A6      010A8         179          ST    R1,CCWSRCH                                               01590000
00097A 9231 C8A6      010A8         180          MVI   CCWSRCH,X'31'      SEARCH ID EQUAL                       01600000
                                    181 *                                                                       01610000
                                    182 *                                                                       01620000
00097E                              183 DIRBLOOP DS    0H                                                       01630000
00097E 1F11                         184          SLR   R1,R1                                                    01640000
000980 4310 CA1D      0121F         185          IC    R1,R               GET RECORD NUMBER                     01650000
000984 4110 1001      00001         186          LA    R1,1(,R1)          ADD                                   01660000
000988 4210 CA1D      0121F         187          STC   R1,R                  ONE                                01670000
00098C 4110 C9FE      01200         188          LA    R1,IORB            EXECUTE                               01680000
000990 45E0 C31E      00B20         189          BAL   R14,XIO                   I/O REQUEST                    01690000
                                    190 *                                                                       01700000
000994 12FF                         191          LTR   R15,R15                                                  01710000
000996 4770 C1E0      009E2         192          BNZ   DIREOF             ERR - NOT FOUND                       01720000
                                    193 *                                                                       01730000
                                    194 *                                                                       01740000
00099A 4120 CAFE      01300         195          LA    R2,INBUF           POINTER TO PDS INDEX BLOCK            01750000
00099E 1F33                         196          SLR   R3,R3              GET LENGTH                            01760000
0009A0 BF33 2000      00000         197          ICM   R3,B'0011',0(R2)             USED                        01770000
                                    198 *                                                                       01780000
0009A4 4120 2002      00002         199          LA    R2,2(,R2)          POINT TO FIRST ENTRY                  01790000
0009A8 5B30 C76A      00F6C         200          S     R3,=F'2'           ADJUST LENGTH                         01800000
                                    201 *                                                                       01810000
0009AC                              202 DIRLOOP  DS    0H                                                       01820000
0009AC 5930 C76E      00F70         203          C     R3,=F'0'           MORE DATA AVAILABLE                   01830000
0009B0 47D0 C17C      0097E         204          BNH   DIRBLOOP             NO - READ ANOTHER BLOCK             01840000
                                    205 *                                                                       01850000
0009B4 D507 C72E 2000 00F30 00000   206          CLC   =XL8'FFFFFFFFFFFFFFFF',0(R2)  END OF DIRECTORY?          01860000
0009BA 4780 C1E0      009E2         207          BE    DIREOF                                                   01870000
                                    208 *                                                                       01880000
0009BE D507 C736 2000 00F38 00000   209          CLC   =CL8'TXXNUC28',0(R2) IS THIS OUR ENTRY                   01890000
0009C4 4780 C1F2      009F4         210          BE    DIRFOUND                                                 01900000
                                    211 *                                                                       01910000
0009C8 1F11                         212          SLR   R1,R1                                                    01920000
0009CA BF11 200B      0000B         213          ICM   R1,B'0001',11(R2)  GET C FIELD                           01930000
0009CE 5410 C772      00F74         214          N     R1,=A(X'1F')       GET USER DATA LENGTH                  01940000
0009D2 8910 0001      00001         215          SLL   R1,1               MULTIPLY BY 2                         01950000
                                    216 *                                                                       01960000
0009D6 4110 100C      0000C         217          LA    R1,12(,R1)         ADD IN FIXED LENGTH                   01970000
                                    218 *                                                                       01980000
0009DA 1A21                         219          AR    R2,R1              POINT TO NEXT ENTRY                   01990000
0009DC 1B31                         220          SR    R3,R1              ADJUST LENGTH                         02000000
                                                                                                               PAGE    7

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                    221 *                                                                       02010000
0009DE 47F0 C1AA      009AC         222          B     DIRLOOP            PROCESS NEXT DIR ENTRY                02020000
                                    223 *                                                                       02030000
                                    224 *                                                                       02040000
                                    225 *                                                                       02050000
0009E2                              226 DIREOF   DS    0H                                                       02060000
                                    227          @PRINT 'DIRECTORY ENTRY FOR TXXNUC28 NOT FOUND'                02070000
0009E2 4110 C794      00F96         228+         LA     R1,=C'DIRECTORY ENTRY FOR TXXNUC28 NOT FOUND'           00170000
0009E6 4100 0026      00026         229+         LA     R0,38                                                   00200000
0009EA 41F0 C43C      00C3E         230+         LA     R15,@PRINT                                              00210000
0009EE 05EF                         231+         BALR   R14,R15                                                 00220000
0009F0 47F0 C434      00C36         232          B      EXIT                                                    02080000
                                    233 *                                                                       02090000
                                    234 *                                                                       02100000
                                    235 *                                                                       02110000
                                    236 **********************************************************************  02120000
                                    237 *  NOW WE CAN READ THE DATA FOR THE MEMBER                              02130000
                                    238 *                                                                       02140000
                                    239 *    DIRECTORY ENTRY TTR IS OFFSET TO FIRST DATA RECORD                 02150000
                                    240 **********************************************************************  02160000
                                    241 *                                                                       02170000
0009F4                              242 DIRFOUND DS    0H                                                       02180000
0009F4 1882                         243          LR    R8,R2                   SAVE DIRECTORY ENTRY PTR         02190000
                                    244 *                                                                       02200000
0009F6 1F11                         245          SLR   R1,R1                                                    02210000
0009F8 1F00                         246          SLR   R0,R0                                                    02220000
0009FA 1F22                         247          SLR   R2,R2                                                    02230000
                                    248 *                                                                       02240000
0009FC BF13 C8CE      010D0         249          ICM   R1,B'0011',BEGEXT+2     GET HH OF EXTENT BEGIN           02250000
000A00 BF23 8008      00008         250          ICM   R2,B'0011',8(R8)        GET RELATIVE TT OFFSET           02260000
000A04 1A12                         251          AR    R1,R2                                                    02270000
                                    252 *                                                                       02280000
000A06 48F0 C8D0      010D2         253          LH    R15,TRKCYL              TRACKS/CYLINDER                  02290000
000A0A 1D0F                         254          DR    R0,R15                  GET CYL/TRK OFFSET               02300000
                                    255 *                                                                       02310000
000A0C BF23 C8CC      010CE         256          ICM   R2,B'0011',BEGEXT       GET CC OF EXTENT BEGIN           02320000
000A10 1A21                         257          AR    R2,R1                   GET CC OF FIRST DATA BLK         02330000
000A12 BE23 CA19      0121B         258          STCM  R2,B'0011',CC                                            02340000
                                    259 *                                                                       02350000
000A16 BE03 CA1B      0121D         260          STCM  R0,B'0011',HH                                            02360000
000A1A D200 CA1D 800A 0121F 0000A   261          MVC   R,10(R8)           GET RECORD FROM TTR                   02370000
                                    262 *                                                                       02380000
000A20 5810 C776      00F78         263          L     R1,=A(19069)       MAX BLOCK LENGTH                      02390000
000A24 5010 C8BA      010BC         264          ST    R1,CCWREAD+4                                             02400000
                                                                                                               PAGE    8

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

000A28 9220 C8BA      010BC         265          MVI   CCWREAD+4,@CCW#SLI SUPPRESS INCORRECT LENGTH             02410000
000A2C 4110 CAFE      01300         266          LA    R1,INBUF           I/O BUFFER                            02420000
000A30 5010 C8B6      010B8         267          ST    R1,CCWREAD                                               02430000
000A34 9206 C8B6      010B8         268          MVI   CCWREAD,X'06'      READ DATA                             02440000
                                    269 *                                                                       02450000
000A38 4110 0005      00005         270          LA    R1,5               BLOCK ID LENGTH                       02460000
000A3C 5010 C8AA      010AC         271          ST    R1,CCWSRCH+4                                             02470000
000A40 9240 C8AA      010AC         272          MVI   CCWSRCH+4,@CCW#CC  COMMAND CHAIN                         02480000
000A44 4110 CA19      0121B         273          LA    R1,MBBCCHHR+3      BLOCK ID (CCHHR)                      02490000
000A48 5010 C8A6      010A8         274          ST    R1,CCWSRCH                                               02500000
000A4C 9231 C8A6      010A8         275          MVI   CCWSRCH,X'31'      SEARCH ID EQUAL                       02510000
                                    276 *                                                                       02520000
                                    277          @PRINT '----- READ PDS MEMBER DATA'                            02530000
000A50 4110 C7BA      00FBC         278+         LA     R1,=C'----- READ PDS MEMBER DATA'                       00170000
000A54 4100 001A      0001A         279+         LA     R0,26                                                   00200000
000A58 41F0 C43C      00C3E         280+         LA     R15,@PRINT                                              00210000
000A5C 05EF                         281+         BALR   R14,R15                                                 00220000
                                    282          @PRINT ' '                                                     02540000
000A5E 4110 C852      01054         283+         LA     R1,=C' '                                                00170000
000A62 4100 0001      00001         284+         LA     R0,1                                                    00200000
000A66 41F0 C43C      00C3E         285+         LA     R15,@PRINT                                              00210000
000A6A 05EF                         286+         BALR   R14,R15                                                 00220000
                                    287 *                                                                       02550000
000A6C                              288 BREAD    DS    0H                                                       02560000
000A6C 4110 C9FE      01200         289          LA    R1,IORB            EXECUTE                               02570000
000A70 45E0 C31E      00B20         290          BAL   R14,XIO                   I/O REQUEST                    02580000
                                    291 *                                                                       02590000
000A74 12FF                         292          LTR   R15,R15                                                  02600000
000A76 4770 C2B2      00AB4         293          BNZ   BREAD010           BRANCH IF ERROR                       02610000
                                    294 *                                                                       02620000
000A7A 1F11                         295          SLR   R1,R1                                                    02630000
000A7C 4310 CA1D      0121F         296          IC    R1,R               GET RECORD NUMBER                     02640000
000A80 4110 1001      00001         297          LA    R1,1(,R1)          ADD                                   02650000
000A84 4210 CA1D      0121F         298          STC   R1,R                  ONE                                02660000
                                    299 *                                                                       02670000
000A88 1F33                         300          SLR   R3,R3                                                    02680000
000A8A BF33 C8BC      010BE         301          ICM   R3,B'0011',CCWREAD+6  LENGTH ATTEMPTED TO READ           02690000
000A8E 1F11                         302          SLR   R1,R1                                                    02700000
000A90 BF13 CA0C      0120E         303          ICM   R1,B'0011',IORB+(IORCSW-IOR)+6  GET RESUDUAL LENGTH      02710000
000A94 1B31                         304          SR    R3,R1              CALC ACTUAL BLOCK LENGTH              02720000
                                    305 *                                                                       02730000
                                    306          @DUMP INBUF,(R3)         DUMP THE BLOCK                        02740000
000A96 4110 CAFE      01300         307+         LA    R1,INBUF                                                 00360000
000A9A 1803                         308+         LR    R0,R3                                                    00290000
                                                                                                               PAGE    9

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

000A9C 41F0 C496      00C98         309+         LA    R15,@DUMP                                                00080000
000AA0 05EF                         310+         BALR  R14,R15                                                  00090000
                                    311          @PRINT ' '                                                     02750000
000AA2 4110 C852      01054         312+         LA     R1,=C' '                                                00170000
000AA6 4100 0001      00001         313+         LA     R0,1                                                    00200000
000AAA 41F0 C43C      00C3E         314+         LA     R15,@PRINT                                              00210000
000AAE 05EF                         315+         BALR   R14,R15                                                 00220000
000AB0 47F0 C26A      00A6C         316          B      BREAD             LOOP BACK FOR NEXT BLOCK              02760000
                                    317 *                                                                       02770000
                                    318 *                                                                       02780000
000AB4                              319 BREAD010 DS    0H                                                       02790000
000AB4 9101 CA0A      0120C         320          TM    IORB+(IORCSW-IOR)+4,X'01'   UNIT EXCEPTION?              02800000
000AB8 4710 C30C      00B0E         321          BO    BREAD030           YES - END OF FILE                     02810000
                                    322 *                                                                       02820000
000ABC 9102 CA0A      0120C         323          TM    IORB+(IORCSW-IOR)+4,X'02'   UNIT CHECK?                  02830000
000AC0 47E0 C2FA      00AFC         324          BNO   BREAD020           NO - OTHER ERROR                      02840000
                                    325 *                                                                       02850000
000AC4 9108 CA0F      01211         326          TM    IORB+(IORSENS1-IOR),X'08'  NO RECORD FOUND?              02860000
000AC8 47E0 C2FA      00AFC         327          BNO   BREAD020           NO - OTHER ERROR                      02870000
                                    328 *                                                                       02880000
000ACC 9201 CA1D      0121F         329          MVI   R,1                RESET TO RECORD 1                     02890000
000AD0 1F11                         330          SLR   R1,R1                                                    02900000
000AD2 BF13 CA1B      0121D         331          ICM   R1,B'0011',HH      GET HEAD                              02910000
000AD6 4110 1001      00001         332          LA    R1,1(,R1)          ADD ONE                               02920000
000ADA BE13 CA1B      0121D         333          STCM  R1,B'0011',HH      SAVE IT BACK                          02930000
                                    334 *                                                                       02940000
000ADE 4910 C8D0      010D2         335          CH    R1,TRKCYL          COMPARE TO TRKS/CYL                   02950000
000AE2 4740 C26A      00A6C         336          BL    BREAD              GO READ AGAIN                         02960000
                                    337 *                                                                       02970000
000AE6 D701 CA1B CA1B 0121D 0121D   338          XC    HH,HH              SET HH = 0                            02980000
000AEC BF13 CA19      0121B         339          ICM   R1,B'0011',CC      GET CYLINDER                          02990000
000AF0 4110 1001      00001         340          LA    R1,1(,R1)          ADD ONE                               03000000
000AF4 BE13 CA19      0121B         341          STCM  R1,B'0011',CC      SAVE BACK                             03010000
000AF8 47F0 C26A      00A6C         342          B     BREAD              GO READ AGAIN                         03020000
                                    343 *                                                                       03030000
                                    344 *                                                                       03040000
000AFC                              345 BREAD020 DS    0H                                                       03050000
                                    346          @PRINT '*** ERROR READING DATA ***'                            03060000
000AFC 4110 C7D4      00FD6         347+         LA     R1,=C'*** ERROR READING DATA ***'                       00170000
000B00 4100 001A      0001A         348+         LA     R0,26                                                   00200000
000B04 41F0 C43C      00C3E         349+         LA     R15,@PRINT                                              00210000
000B08 05EF                         350+         BALR   R14,R15                                                 00220000
000B0A 47F0 C434      00C36         351          B     EXIT                                                     03070000
                                    352 *                                                                       03080000
                                                                                                               PAGE   10

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

                                    353 *                                                                       03090000
000B0E                              354 BREAD030 DS    0H                                                       03100000
                                    355          @PRINT '*** EOF READING DATA ***'                              03110000
000B0E 4110 C73E      00F40         356+         LA     R1,=C'*** EOF READING DATA ***'                         00170000
000B12 4100 0018      00018         357+         LA     R0,24                                                   00200000
000B16 41F0 C43C      00C3E         358+         LA     R15,@PRINT                                              00210000
000B1A 05EF                         359+         BALR   R14,R15                                                 00220000
000B1C 47F0 C434      00C36         360          B     EXIT                                                     03120000
                                    361 *                                                                       03130000
                                    362 *                                                                       03140000
                                    363 **********************************************************************  03150000
                                    364 * XIO - PERFORM I/O SUBROUTINE                                          03160000
                                    365 *       R1 = A(IOR) I/O REQUEST BLOCK                                   03170000
                                    366 *       ON EXIT R15 CONTAINS A RETURN CODE                              03180000
                                    367 **********************************************************************  03190000
                                    368 *                                                                       03200000
000B20                              369 XIO      DS    0H                                                       03210000
000B20 90EC D00C      0000C         370          STM   R14,R12,12(R13)    SAVE CALLER'S REGISTERS               03220000
000B24 41E0 C92E      01130         371          LA    R14,XIOSAVE        POINT TO OUR SAVE ADDRESS             03230000
000B28 50E0 D008      00008         372          ST    R14,8(,R13)                                              03240000
000B2C 50D0 E004      00004         373          ST    R13,4(,R14)                                              03250000
000B30 18DE                         374          LR    R13,R14                                                  03260000
                                    375 *                                                                       03270000
000B32 18A1                         376          LR    R10,R1             IOR BLOCK ADDRESS                     03280000
                            00000   377          USING IOR,R10                                                  03290000
                                    378 *                                                                       03300000
000B34 D700 A006 A006 00006 00006   379          XC    IORSIOCC,IORSIOCC                                        03310000
000B3A D701 A010 A010 00010 00010   380          XC    IORSENS0(2),IORSENS0                                     03320000
000B40 D707 A008 A008 00008 00008   381          XC    IORCSW,IORCSW                                            03330000
                                    382 *                                                                       03340000
000B46 5810 A000      00000         383          L     R1,IORCCW          POINT TO CCW  CHAIN                   03350000
000B4A 5010 0048      00048         384          ST    R1,72              SAVE INTO CAW                         03360000
000B4E 1F22                         385          SLR   R2,R2                                                    03370000
000B50 BF23 A004      00004         386          ICM   R2,B'0011',IORUNIT DEVICE ADDRESS                        03380000
000B54 9C00 2000      00000         387          SIO   0(R2)              START I/O                             03390000
000B58 4740 C3D0      00BD2         388          BC    4,SIOCC4           BRANCH IF SIO NOT ACCEPTED            03400000
000B5C 4720 C3C4      00BC6         389          BC    2,SIOCC2           BRANCH IF SIO NOT ACCEPTED            03410000
000B60 4710 C3B8      00BBA         390          BC    1,SIOCC1           BRANCH IF SIO NOT ACCEPTED            03420000
                                    391 *                                                                       03430000
000B64 9D00 2000      00000         392 WAITIO   TIO   0(R2)              WAIT FOR I/O COMPLETION               03440000
000B68 4710 C3DC      00BDE         393          BC    1,TIOCC1           BRANCH IF ERROR                       03450000
000B6C 4770 C362      00B64         394          BC    7,WAITIO           KEEP WAITING...                       03460000
                                    395 *                                                                       03470000
000B70 D207 A008 0040 00008 00040   396          MVC    IORCSW,64         SAVE CSW                              03480000
                                                                                                               PAGE   11

  LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT                                       ASM 0201 15.58 12/08/11

000B76 D501 C7EE A00C 00FF0 0000C   397          CLC    =X'0C00',IORCSW+4 CHANNEL END/DEVICE END                03490000
000B7C 4780 C3B0      00BB2         398          BE     WAITIO20          YES - GOOD COMPLETION                 03500000
000B80 9102 A00C      0000C         399          TM     IORCSW+4,X'02'    UNIT CHECK?                           03510000
000B84 47E0 C3A8      00BAA         400          BNO    WAITIO15          NO - DON'T NEED TO SO SENSE           03520000
                                    401 *                                                                       03530000
                                    402 *                                                                       03540000
000B88 4110 C896      01098         403          LA    R1,CCWSENSE                                              03550000
000B8C 5010 0048      00048         404          ST    R1,72              SAVE INTO CAW                         03560000
000B90 9C00 2000      00000         405          SIO   0(R2)              START I/O                             03570000
000B94 4770 C3DC      00BDE         406          BC    7,WAITIO99         ERROR                                 03580000
                                    407 *                                                                       03590000
000B98 9D00 2000      00000         408 WAITIO10 TIO   0(R2)              WAIT FOR I/O COMPLETION               03600000
000B9C 4710 C3DC      00BDE         409          BC    1,WAITIO99         BRANCH IF ERROR                       03610000
000BA0 4770 C396      00B98         410          BC    7,WAITIO10         KEEP WAITING...                       03620000
                                    411 *                                                                       03630000
000BA4 D201 A010 C976 00010 01178   412          MVC   IORSENS0(2),SENSE  SAVE SENSE BYTES 0 & 1                03640000
000BAA                              413 WAITIO15 DS    0H                 WAIT FOR I/O COMPLETION               03650000
000BAA 41F0 0004      00004         414          LA    R15,4              SET RC=4                              03660000
000BAE 47F0 C3E4      00BE6         415          B     XIOXT                                                    03670000
                                    416 *                                                                       03680000
                                    417 *                                                                       03690000
000BB2                              418 WAITIO20 DS    0H                                                       03700000
000BB2 41F0 0000      00000         419          LA    R15,0                                                    03710000
000BB6 47F0 C3E4      00BE6         420          B     XIOXT                                                    03720000
                                    421 *                                                                       03730000
                                    422 *                                                                       03740000
000BBA                              423 SIOCC1   DS    0H                                                       03750000
000BBA 9201 A006      00006         424          MVI   IORSIOCC,X'01'                                           03760000
000BBE 41F0 0008      00008         425          LA    R15,8                                                    03770000
000BC2 47F0 C3E4      00BE6         426          B     XIOXT                                                    03780000
                                    427 *                                                                       03790000
                                    428 *                                                                       03800000
000BC6                              429 SIOCC2   DS    0H                                                       03810000
000BC6 9202 A006      00006         430          MVI   IORSIOCC,X'02'                                           03820000
000BCA 41F0 0008      00008         431          LA    R15,8                                                    03830000
000BCE 47F0 C3E4      00BE6         432          B     XIOXT                                                    03840000
                                    433 *                                                                       03850000
                                    434 *                                                                       03860000
000BD2                              435 SIOCC4   DS    0H                                                       03870000
000BD2 9204 A006      00006         436          MVI   IORSIOCC,X'04'                                           03880000
000BD6 41F0 0008      00008         437          LA    R15,8                                                    03890000
000BDA 47F0 C3E4      00BE6         438          B     XIOXT                                                    03900000
                                    439 *                                                                       03910000
                                    440 *                                                                       03920000

[Next – DISK3 Assembly Listing – Part 2]

Reading A PDS Member

To read the data for a PDS member we fist have to locate the directory entry that points to the data.  We establish two loops to process through the directory.  The outer loop reads the directory blocks and the inner loop steps through the directory entries contained in the block.

DIRBLOOP DS    0H
         SLR   R1,R1
         IC    R1,R               GET RECORD NUMBER
         LA    R1,1(,R1)          ADD
         STC   R1,R                  ONE
         LA    R1,IORB
         BAL   R14,XIO
*
         LTR   R15,R15
         BNZ   DIREOF
*
*
         LA    R2,INBUF           POINTER TO PDS INDEX RECORD
         SLR   R3,R3              GET LENGTH
         ICM   R3,B'0011',0(R2)             USED
         LA    R2,2(,R2)          POINT TO FIRST ENTRY
         S     R3,=F'2'           ADJUST LENGTH

This code established the processing for the outer loop (Directory Block Loop).  It read through a directory one block at a time.  Register 3 is set to contain the remaining length of data in the block.  Register two is set to point to the next directory entry to be processed.

Our CCW chain for reading the directory blocks is a SEEK, SEARCH ID EQUAL, TIC, READ DATA (length=256).  Because I allocated the data set and specified the number of directory blocks to be less than the number that will fit  on a single track, I know there is no need to increment the track.  In a more general approach we would have to deal with this issue.

DIRLOOP  DS    0H
         C     R3,=F'0'           MORE DATA
         BNH   DIRBLOOP                    AVAILABLE
*
         CLC   =XL8'FFFFFFFFFFFFFFFF',0(R2)  END OF DIRECOTRY?
         BE    DIREOF
*
         CLC   =CL8'TXXNUC28',0(R2) IS THIS OUR ENTRY
         BE    DIRFOUND
*
         SLR   R1,R1
         ICM   R1,B'0001',11(R2)  GET C FIELD
         N     R1,=A(X'1F')       GET USER DATA LENGTH
         SLL   R1,1               MULTIPLY BY 2
         LA    R1,12(,R1)         ADD IN FIXED LENGTH
         AR    R2,R1              POINT TO NEXT ENTRY
         SR    R3,R1              ADJUST LENGTH
         B     DIRLOOP            PROCESS NEXT DIR ENTRY

This is the processing for the inner loop that steps through the directory entries contained in a single directory block.  First we check to see if there is another directory entry to process.  If not we go back to the outer loop and read another block.

If we have and entry to process we check to see if the member name matches the name we are searching for.  If it matches we have found the entry we are looking for.

If it doesn’t match we calculate the length of the user data.  We take the contents of the C field and mask off the top three bits.  This leaves the number of halfwords that make up the user data.  We can shift this value one bit to the left to multiply it by two which results in the number of bytes in the user data.  We add 12 (the length of the member name and the TTRC) to the user data length to get the total length of the entry.  We use this value to point to the next directory entry and to adjust the remaining length of data to process in the block.

Now that we have located the directory entry we have the relative offset (TTR) into the data set where the member data starts.  We can use this and the extent information from the DSCB to point to the first block of data.

For now we will require the data set to only consist of a single extent which will simplify the code to calculate the actual CCHHR.  A more general solution would require handling up to sixteen extents.

         SLR   R2,R2
         SLR   R1,R1
         SLR   R0,R0
         ICM   R2,B'0011',TTRC   Relative Track Offset
         ICM   R1,B'0011',BEGHH  Extent Begin HH
         AR    R1,R2
         ICM   R2,B'0011',BEGCC  Extent Begin CC
         L     R15,TRKCYL        Tracks per Cylinder
         DR    R0,R15            Calculate CC/HH
         AR    R2,R1             Add in Cylinder Offset
         STCM  R2,B'0011',CC     Save CC
         STCM  R0,B'0011',HH     Save HH
         MVC   R(1),TTRC+2       Move In Record Offset

To get the CCHHR for the first record of the member data we add the track offset (TT) value to the beginning head (HH) of the extent.  We then divide by the number of tracks per cylinder.  This give us the cylinder offset which we add to the beginning cylinder of the extent.  The reminder is the track value.  The record value simply copied from the TTR offset to complete the CCHHR value for the first block of data.

[Next – DISK3 Assembly Listing – Part 1]

Partitioned Data Set Access

A Partitioned Data Set (PDS) is a collection of sequential members (files) consisting of  one or more records.  Each member is identified by a name 1 to 8 characters long.  The member names are stored in a directory that is also part of the data set.  The directory consists of one or more records at the beginning of the data set. Each member has an entry in the directory.

The directory entry is made up of the member name, a pointer to the starting  location of the member data and up to 62 bytes of optional user data information.  The directory is maintained in alphameric sorting sequence.

The pointer to the member data is a relative offset within the data set specified as TTR (Track, Record).  The directory entries may be variable in length depending on the length of the optional data.

Directory blocks are keyed records with an eight-byte key.  The key is the last member name contained in the directory block.

Each directory block begins with a two byte count indicating how many bytes are used in the directory block.

The member directory entry has the format:

  • CL8  – Name (Member name)
  • XL3 – TTR (Offset to beginning of member)
  • X      – “C” field
The C field is divided into the groups of bits.
  • Bit 0   – 1=Alias, 0=Not Alias
  • Bits 1-2   – Number of pointers in the user data area
  • Bits 3-7  – Binary number indicating the number of halfwords of user data.

User data length is always a multiple of two and may be 0-62 bytes long.

The end of the directory is indicated by an EOF mark (a record with a data length of zero) which will cause a Unit Exception when read.  Each member is also ended with an EOF mark.

To access a member in a PDS the directory entry for the member is located.  The TTR is then used to locate the first record of the member.  The records for a PDS member are sequential.

Below are two directory blocks.  The first block is full containing seven directory entries.  The second only contains two entries  plus an EOF directory entry with a name of x’FFFFFFFFFFFFFFFF’.


00001200  00FEE3E7 E7D5E4C3 F2F20003 092C0003  ..TXXNUC22......
00001210  0E000000 000002E2 00035803 58000000  .......S........
00001220  88000001 0000E3E7 E7D5E4C3 F2F30003  H.....TXXNUC23..
00001230  112C0003 16000000 000002E2 00035803  ...........S....
00001240  58000000 88000001 0000E3E7 E7D5E4C3  ....H.....TXXNUC
00001250  F2F40003 192C0003 1E000000 000002E2  24.............S
00001260  00035803 58000000 88000001 0000E3E7  ........H.....TX
00001270  E7D5E4C3 F2F50003 212C0003 26000000  XNUC25..........
00001280  000002E2 00035803 58000000 88000001  ...S........H...
00001290  0000E3E7 E7D5E4C3 F2F60003 292C0003  ..TXXNUC26......
000012A0  2E000000 000002E2 00035803 58000000  .......S........
000012B0  88000001 0000E3E7 E7D5E4C3 F2F70003  H.....TXXNUC27..
000012C0  312C0003 36000000 000002E2 00035803  ...........S....
000012D0  58000000 88000001 0000E3E7 E7D5E4C3  ....H.....TXXNUC
000012E0  F2F80003 392C0004 05000000 000002E2  28.............S
000012F0  00035803 58000000 88000001 00000000  ........H.......

00001200  0056E3E7 E7D5E4C3 F2F90004 082C0004  ..TXXNUC29......
00001210  0D000000 000002E2 00035803 58000000  .......S........
00001220  88000001 0000E3E7 E7D5E4C3 F3F00004  H.....TXXNUC30..
00001230  102C0004 15000000 000002E2 00035803  ...........S....
00001240  58000000 88000001 0000FFFF FFFFFFFF  ....H...........
00001250  FFFF0000 00000000 00000000 00000000  ................
00001260  00000000 00000000 00000000 00000000  ................
                          ...
000012F0  00000000 00000000 00000000 00000000  ................

[Next – Reading A PDS Member]

Searching The VTOC

We can optimize our search of the VTOC for a specific Format 1 DSCB using a Search KEY Equal CCW command instead of reading each record and checking to see if it matches our data set name.

In our CCW program we replace our Search ID to a Search KEY Equal command.  We need to change our read from a Read Key/Data to only read the Data.  Here is our CCW program to search a track for a specific DSCB.

       DC    X'07',AL3(MBBCCHHR+1),X'@CCW#CC',X'00',AL2(6)  SEEK Cyl/Trk
       DC    X'29',AL3(DSNAME),X'@CCW#CC',X'00',AL2(44)     Search Key Equal
       DC    X'08',AL3(*-8),X'@CSW#CC',X'00',AL2(0)         TIC
       DC    X'06',AL3(BUFFER),X'00',X'00',AL2(96)          Read Data

If our channel program completes with normal status (Channel End+Device End) then we located and read the DSCB.  If the DSCB was not  located on the track we will receive Channel End + Device End + Unit Check and byte two of the Sense data will have the bit x’08’ set indicating record not found.

If the record is not found we can increment the track address (TT) and search again.  We can continue to search track by track until we reach the end of the VTOC extent.

Actually, we can use the high-water mark in the Format 4 DSCB so we don’t need to search unused tracks.  The field DS4HPCHR contains the highest address of a Format 1 DSCB in the VTOC (the high-water mark).  Once we have searched the track indicated DS4HPCHR we can stop searching.

[Next – Partitioned Data Set Access]

DISK I/O Subroutine

Now that we have successfully managed to read from a DASD device we can build a general purpose subroutine to perform I/O.  We will create a control block to communicate with the I/O routine.  The control block will be called I/O Request (IOR).

IOR      DSECT ,
IORCCW   DS    A             ADDRESS OF CCW
IORUNIT  DS    XL2           DEVICE ADDRESS
IORSIOCC DS    X             SIO CONDITION CODE
         DS    X
IORCSW   DS    XL8           CHANNEL STATUS WORD
IORSENS0 DS    X             SENSE BYTE 0
IORSENS1 DS    X             SENSE BYTE 1
*
IORLEN   EQU   *-IOR

The first two fields are input to the I/O routine and the remainder are output.  The IORCC field points to the CCW chain to execute.  The IORUNIT field contains the device address.  IORSIOCC returns the condition code returned form the SIO instruction.  IORCSW contains a copy of the CSW after the I/O request is complete.  If the I/O operation resulted in a Unit Check condition the I/O subroutine will perform a sense command and save the first two bytes into IORSENS0 and IORSENS1.

The I/O subroutine returns a completion code in Register 15 to indicate the completion status of the I/O request.

  • RC = 0 – The I/O Completed Normally
  • RC = 4 – Exceptional Condition Encountered
  • RC = 8 – I/O Not Initiated (SIO CC Stored)
  • RC = 16 – TIO Error
**********************************************************************
* XIO - PERFORM I/O SUBROUTINE
*       R1 = A(IOR) I/O REQUEST BLOCK
*       ON EXIT R15 CONTAINS A RETURN CODE
**********************************************************************
*
XIO      DS    0H
         STM   R14,R12,12(R13)    SAVE CALLER'S REGISTERS
         LA    R14,XIOSAVE        POINT TO OUR SAVE ADDRESS
         ST    R14,8(,R13)
         ST    R13,4(,R14)
         LR    R13,R14
*
         LR    R10,R1             IOR BLOCK ADDRESS
         USING IOR,R10
*

We begin by saving the callers registers and then establishing a new save area.  The IOR address is copied into Register 10 and mapped against the IOR DSECT.

         XC    IORSIOCC,IORSIOCC
         XC    IORSENS0(2),IORSENS0
         XC    IORCSW,IORCSW

First the output fields in the IOR are cleared.

         L     R1,IORCCW          POINT TO CCW  CHAIN
         ST    R1,72              SAVE INTO CAW
         SLR   R2,R2
         ICM   R2,B'0011',IORUNIT DEVICE ADDRESS
         SIO   0(R2)              START I/O
         BC    4,SIOCC4           BRANCH IF SIO NOT ACCEPTED
         BC    2,SIOCC2           BRANCH IF SIO NOT ACCEPTED
         BC    1,SIOCC1           BRANCH IF SIO NOT ACCEPTED

The CCW address is saved into the CAW and a SIO is issued against the device.  If the SIO did not complete with CC=8 a SIO CC code is stored in the IOR and the return code is set to 8.

WAITIO   TIO   0(R2)              WAIT FOR I/O COMPLETION
         BC    1,TIOCC1           BRANCH IF ERROR
         BC    7,WAITIO           KEEP WAITING...
*
         MVC    IORCSW,64         SAVE CSW
         CLC    =X'0C00',ORCSW+4  CHANNEL END/DEVICE END
         BE     WAITIO20          YES - GOOD COMPLETION
         TM     IORCSW+4,X'02'    UNIT CHECK?
         BNO    WAITIO15          NO - DON'T NEED TO SO SENSE

A TIO loop is executed to wait for the I/O request to complete.  Once the I/O has completed the CSW copied into the IOR.  If any status bits except Channel End and Device End are set it is considered to be an exceptional condition.

If Unit Check was set we fall through to issue a sense command.

         LA    R1,CCWSENSE
         ST    R1,72              SAVE INTO CAW
         SIO   0(R2)              START I/O
         BC    7,WAITIO99         ERROR
*
WAITIO10 TIO   0(R2)              WAIT FOR I/O COMPLETION
         BC    1,WAITIO99         BRANCH IF ERROR
         BC    7,WAITIO10         KEEP WAITING...
*
         MVC   IORSENS0(2),SENSE  SAVE SENSE BYTES 0 & 1
WAITIO15 DS    0H                 WAIT FOR I/O COMPLETION
         LA    R15,4              SET RC=4
         B     XIOXT

The address of the SENSE CCW is stored into the CAW and a SIO is issued to the device.  A TIO loop is used to wait for the Sense I/O to complete.  The first two bytes of the sense data is stored into the IOR.  We can now exit with a return code of 4.

SIOCC1   DS    0H
         MVI   IORSIOCC,X'01'
         LA    R15,8
         B     XIOXT
*
*
SIOCC2   DS    0H
         MVI   IORSIOCC,X'02'
         LA    R15,8
         B     XIOXT
*
*
SIOCC4   DS    0H
         MVI   IORSIOCC,X'04'
         LA    R15,8
         B     XIOXT
*
*
WAITIO99 DS    0H
TIOCC1   DS    0H
         LA    R15,16
         B     XIOXT
*
*
XIOXT    DS    0H
         L     R1,4(,R13)
         ST    R15,16(,R1)
*
         @PRINT '-------- IOR --------'
         @DUMP IORB,IORLEN
         @PRINT ' '
         @PRINT ' '
*
         L     R13,4(,R13)
         LM    R14,R12,12(R13)    RESTORE CALLER'S REGS
         BR    R14                RETURN TO CALLER

We finally end up at XIOXT with a return code set in Register 15.  Here I save the RC into the callers save area so it will be restored into Register 15 before returning to the caller.  For debugging purposes I have included a dump of the IOR Block. (This is why saving the value in Register 15 was necessary)

[Next – Searching The VTOC]