First we need to create a Hercules configuration file. I used the configuration file for my MVS system and stripped almost everything out.
# # Configuration file for Hercules CARD80 Stand Alone IPL Program # CPUSERIAL 068068 CPUMODEL 0158 ARCHMODE S/370 MAINSIZE 2 CNSLPORT 8270 NUMCPU 1 # 000C 3505 card80.ipl 000E 1403 card80.txt
There are only a few critical lines in the conf file. We must set ARCHMODE to S/370. We can set MAINSIZE to just about anything since we only use a very small amount of man memory. I set CNSLPORT to 8270 since my Hercules system running MVS uses 3270 as the console port.
We only need to define two devices, our card reader and a printer. The card reader is defined at the standard address for a reader X’00C’ and the printer at X’00E’. The address of the printer must match what we coded in our program we will IPL. The reader is associated with the file created when we punched the output from our program running on MVS. It contains our standalone IPL deck and some data cards. The printer is associated with a file that will receive the output from the printer.
Now we can fire up Hercules and try to IPL.
> hercules -f ./card80.conf > ./card80.log
This will start up a Hercules instance and use our card80.conf file for the configuration. Console messages will be saved in the file card80.log.
17:39:58 Hercules Version 3.06 17:39:58 (c)Copyright 1999-2009 by Roger Bowler, Jan Jaeger, and others 17:39:58 Built on Nov 19 2009 at 14:40:57 17:39:58 Build information: 17:39:58 Modes: S/370 ESA/390 z/Arch 17:39:58 Max CPU Engines: 8 17:39:58 Using setresuid() for setting privileges 17:39:58 Dynamic loading support 17:39:58 Using shared libraries 17:39:58 No External GUI support 17:39:58 HTTP Server support 17:39:58 Regular Expressions support 17:39:58 Automatic Operator support 17:39:58 National Language Support 17:39:58 Machine dependent assists: cmpxchg1 cmpxchg4 cmpxchg8 fetch_dw store_dw multi_byte 17:39:58 Running on mvs Linux-2.6.13-15-default.#1 Tue Sep 13 14:56:15 UTC 2005 i686 UP 17:39:58 HHCHD018I Loadable module directory is /usr/local/lib/hercules 17:39:58 Crypto module loaded (c) Copyright Bernard van der Helm, 2003-2009 17:39:58 Active: Message Security Assist 17:39:58 Message Security Assist Extension 1 17:39:58 Message Security Assist Extension 2 17:39:58 HHCHT001I HTTP listener thread started: tid=40968BB0, pid=4423 17:39:58 HHCHT013I Using HTTPROOT directory "/usr/local/share/hercules/" 17:39:58 HHCHT006I Waiting for HTTP requests on port 8555 17:39:58 HHCCF065I Hercules: tid=4062CDC0, pid=4423, pgid=4422, priority=0 17:39:58 HHCTT002I Timer thread started: tid=41B79BB0, pid=4423, priority=0 17:39:58 HHCCP002I CPU0000 thread started: tid=41A78BB0, pid=4423, priority=15 17:39:58 HHCCP003I CPU0000 architecture mode S/370 17:39:58 HHCPN001I Control panel thread started: tid=4062CDC0, pid=4423 17:39:58 HHCAO001I Hercules Automatic Operator thread started; 17:39:58 tid=41F0BBB0, pri=0, pid=4423
Now we can issue the IPL command to Hercules – IPL 00C
17:40:01 ipl 00c 17:40:01 HHCCP048I 000C:CCW=020004C2 00000050=>F1F0405A 5A5A5A5A 5A5A5A5A 5A5A5A5A 10 !!!!!!!!!!!!! 17:40:01 HHCCP075I 000C:Stat=0E40 Count=0050 =>F1F0405A 5A5A5A5A 5A5A5A5A 5A5A5A5A 10 !!!!!!!!!!!!! 17:40:01 HHCCP076I 000C:Sense=40100000 00000000 00000000 00000000 00000000 00000000 17:40:01 HHCCP077I 000C:Sense=INTREQ MSG 17:40:01 HHCCP011I CPU0000: Disabled wait state 17:40:01 PSW=00020000 80000E40
If all goes well our IPL deck will load into memory and begin execution. The next message we receive is an exceptional condition on the card reader. We can see the CCW “020004C2 00000050” which is an attempt to read 80 (x’50’) bytes of data. A Channel Status of X’0E40′ with a residual count of 80 is returned. (The data F1F0405A5A… is what is in our I/O buffer left over from the last successful read operation.) The CSW indicates: Channel End, Device End, Unit Check, and Incorrect Length. The Unit Check is our clue that there are no more cards in the reader (we hit end-of-file).
We also see that the CPU has entered a Disabled Wait State with a PSW of “00020000 80000E40”. This is a PSW with the Wait Bit set to one. The low order value (normally containing the instruction address) is used as a Wait Code to communicate back with the operator. Our stand alone program simply moved the CSW status into the wait PSW giving us a wait code of x’0E40′.
From these messages we have determined we achieved the expected results and therefore Hercules can now be shut down.
Looking at our printer file (card80.txt) we can verify the results of execution.
01 ***************************************************************************** 02 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 03 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 04 ############################################################################# 05 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 06 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 07 ----------------------------------------------------------------------------- 08 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( 09 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 10 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
All ten data cards have been read from the card reader and then printed on our printer.