How to create CDROM IPL Images

If you have any comments, updates or otherwise, please send email to Jan Jaeger


 A CDROM IPL image consists of 2 or more files, one descriptor file (.INS suffix) and one or more image parts that must be loaded into main storage. The descriptor file is a clear text file which contains file names and the storage addresses at which they are to be loaded.

The iplable images are made using the hercules 390 emulator.

A procedure exist for the following programs:

  • FDR
  • DDRXA
  • DF/DSS

  • All samples are based on iplable card images, but the same procedure should work in principle for other image types (non fixed 80) such as tape or dasd.
     

    Hercules configuration

    #
    # Configuration to build CDROM IPL images
    #
    CPUSERIAL 030201
    CPUMODEL  3090
    MAINSIZE  64
    OSTAILOR  QUIET
    PANRATE   SLOW
    ARCHMODE  ESA/390
    PGMPRDOS  LICENCED
    #---    ----    --------------------
    000C    3505    *
    00F2    3270
    

    FDR SAR

    FDR SAR has no bootstrap loader, the entire card deck is loaded by the IPL CCW chain. In this sample the card image is contained in fdr53.bin.  As there is no bootstrap loader, the only thing we need to do is to zero the ipl ioid.
    jj@linux390:~/sa> hercules
    Command ==> devinit c fdr53.bin
    Command ==> s+
    Command ==> ipl c
    Command ==> r b8=00000000
    Command ==> savecore fdrsar.img
    Command ==> quit
    jj@linux390:~/sa> echo "* FDR SAR" > fdrsar.ins
    jj@linux390:~/sa> echo "fdrsar.img 0x00000000" >> fdrsar.ins
    
    

    DDRXA

    DDRXA used the 3card loader, which will use the address on the end card as start address.  We can determine the start address by displaying the end card using xxd.  By setting a breakpoint on the start address, we will stop processing when the entire card image is loaded.  We must subsequently modify the ipl / restart psw to the start address, and zero the ioid.
    jj@linux390:~/sa> xxd -E ddrxa.bin | tail
    00191e0: 02d9 d3c4 4040 4040 4040 0020 4040 4040  .RLD      ..
    00191f0: 0001 0001 0c00 feac 0001 0001 0c00 feb0  ................
    0019200: 0001 0001 0c00 feb4 0001 0001 0c00 feb8  ................
    0019210: 4040 4040 4040 4040 4040 4040 4040 4040
    0019220: 4040 4040 4040 4040 f0f0 f0f0 f1f2 f8f2          00001282
    0019230: 02c5 d5c4 4000 03c8 4040 4040 4040 4040  .END ..H
                            ^^^^
                            start address
    0019240: 4040 4040 4040 4040 4040 4040 4040 4040
    0019250: 40d7 d9c5 d3d6 c1c4 4040 4040 4040 40f0   PRELOAD       0
    0019260: f0f3 f4f1 4040 4040 4040 4040 4040 4040  0341
    0019270: 4040 4040 4040 4040 f0f0 f0f0 f1f2 f8f3          00001283
    
    jj@linux390:~/sa> hercules
    Command ==> devinit c ddrxa.bin
    Command ==> b 3c8
    Command ==> ipl c
    Command ==> psw
    PSW=00080000 000003C8
    Command ==> r 0=00080000000003c8
    Command ==> r b8=00000000
    Command ==> savecore ddr.img
    Command ==> quit
    jj@linux390:~/sa> echo "* DDRXA" > ddrxa.ins
    jj@linux390:~/sa> echo "ddrxa.img 0x00000000" >> ddrxa.ins


    DF/DSS

    DF/DSS is a little more complicated, as it has a more advanced loader.  A trace has shown that the loader loads DF/DSS at hex address 20000.  By setting a breakpoint at that address we can use the same procedure as for DDRXA.
    jj@linux390:~/sa> hercules
    Command ==> devinit c dss.bin
    Command ==> b 20000
    Command ==> ipl c
    Command ==> psw
    PSW=000C3000 00020000
    Command ==> r 0=000c300000020000
    Command ==> r b8=00000000
    Command ==> savecore dss.img
    Command ==> quit
    jj@linux390:~/sa> echo "* DSS SAR" > dss.ins
    jj@linux390:~/sa> echo "dss.img 0x00000000" >> dss.ins