# Hercules Version 3: Installation and Operation

## Contents

Installation Procedure

- Building from source
- Pre-built binaries

Configuration Procedure

Creating DASD volumes

Operating Procedure

- Starting Hercules
- Using the keyboard
- Panel commands
- The .RC ("run commands") file
- HAO ("Hercules Automatic Operator")

Technical Support

## Installation Procedure

### Building from source - Windows

1. Download the distribution file hercules-3.12.zip
2. (optional) If you want your executable to support compressed DASD or the Hercules Automatic Operator (HAO), also download these packages:
   - zlib-1.2.5.zip for gzip compression
   - bzip2-1.0.6.zip for bzip2 compression
   - pcre-8.20.zip for regular expressions (required to support HAO)
3. Hercules for Windows is built using the Microsoft Visual C (MSVC) compiler. Refer to file README.WIN32 or README.WIN64 for details.

### Building from source - Mac OS X

1. Install Xcode from the App Store.
2. Install Homebrew using the procedure described at http://brew.sh/
3. Use these commands to install pre-requisite software:
   `brew install autoconf`
   `brew install automake`
   `brew install gnu-sed`
   `automake --add-missing`
4. Proceed with Building from source - Linux and Mac OS X below.

### Building from source - Linux and Mac OS X

1. Download the distribution file hercules-3.12.tar.gz
   Note: By downloading this file you agree to the terms of the Q Public Licence.

2. Use these commands to unzip the distribution file:

       tar xvzf ../hercules-3.12.tar.gz
       cd hercules-3.12

3. Verify you have all of the correct versions of all of the required packages installed:

   `./util/bldlvlck`

4. Configure Hercules for your system:

   `./configure`

   By default, the configure script will attempt to guess appropriate compiler optimization flags for your system. If its guesses turn out to be wrong, you can disable all optimization by passing the `--disable-optimization` option to configure, or specify your own optimization flags with `--enable-optimization=FLAGS`

   For additional configuration options, run: `./configure --help`

5. Build the executables:

   `make`

6. Install the programs: as root:

   `make install`

Important: You must use at least version 3.00 of the gcc compiler and the glibc2 library. Refer to the Hercules Frequently-Asked Questions page for required compiler and other software levels.

### Installing pre-built binaries for Mac OS X:

Homebrew may be used to install Hercules on a Mac with an Intel processor and OS X 10.5 or above.

1. Homebrew requires Xcode which can be installed from the App Store.
2. Install Homebrew using the procedure described at http://brew.sh/
3. Enter these commands at a terminal prompt:
   `brew help`
   `brew doctor`
   `brew install hercules`

### Installing pre-built binaries for Windows:

1. Download one of the following packages
   - http://downloads.hercules-390.eu/hercules-3.12-w32.msi Windows 32-bit Installer package
   - http://downloads.hercules-390.eu/hercules-3.12-w64.msi Windows 64-bit Installer package
   - http://downloads.hercules-390.eu/hercules-3.12-w32.zip Windows 32-bit binaries
   - http://downloads.hercules-390.eu/hercules-3.12-w64.zip Windows 64-bit binaries
2. You may also want to install Fish's Hercules GUI for Windows. You can get it from http://www.softdevlabs.com/Hercules/hercgui-index.html.

## Configuration Procedure

You will need to amend the configuration file hercules.cnf to reflect your device layout and intended mode of operation (S/370, ESA/390, or z/Architecture). See the Hercules Configuration File page for a complete description.

## Creating DASD volumes

The Creating Hercules DASD page describes various methods of creating and loading virtual DASD volumes. The compressed CKD DASD support is described in this page.

## Operating Procedure

Note: If you intend to run any licensed software on your PC using Hercules, it is your responsibility to ensure that you do not violate the software vendor's licensing terms.

#### Starting Hercules

To start Hercules enter this command at the Unix or Windows command prompt: ``

        hercules  [ -f filename ]
                  [ -d ]
                  [ -p dyndir ]  [[-l dynmod ] ... ]
                  [ > logfile ]

where:

`filename`

  is the name of the configuration file. The default, if none is specified, is hercules.cnf. The default may be overridden via the `HERCULES_CNF` environment variable.

`-d`

  specifies that Hercules is to be run in 'daemon' mode, wherein it runs invisibly with no attached console.

`dyndir`

  is the directory from which dynamic modules are to be loaded. The default depends on the host platform on which Hercules is being run. This option overrides the default.

`dynmod`

  is the name of an additional dynamic module to be loaded at startup. More than one additional module may be specified, although each must be preceded with the `-l` option specifier.

`logfile`

  is an optional log file which will receive a copy of all messages displayed on the control panel

Next connect a tn3270 client to the console port (normally port 3270). The client will be connected to the first 3270 device address specified in the configuration file (this should be the master console address). If your master console is a 1052 or 3215, connect a telnet client instead of a tn3270 client.

Now you can enter an ipl command from the control panel.

#### Using the keyboard

The main Hercules screen contains a scrollable list of messages with a command input area and system status line at the bottom of the screen.

To scroll through the messages, use either the Page Up or Page Down keys, the Ctrl + Up Arrow or Ctrl + Down Arrow keys, or the Home or End and/or the Ctrl + Home or Ctrl + End keys.

Important messages are highlighted in a different color (usually red) and are prevented from being scrolled off the screen for two minutes. If Extended Cursor handling is available then important messages currently at the top of the screen can be removed early by moving the cursor to the line containing the message and then pressing enter.

Use the Insert key to switch between insert and overlay mode when typing in the command input area. Use the Home and End keys to move to the first or last character of the command you are typing, or the use the left/right arrow keys to move to a specific character. Use the Escape key to erase the input area.

Pressing Escape when the command input area is already empty causes the screen to switch to the semi-graphical "New Panel" display mode, which shows the overall status of the system and devices.

When in the semi-graphical "New Panel" display mode there is no command input area. Instead, single character "hot keys" are used to issue some of the more common functions such as starting or stopping the CPU. The hot-keys are those which are highlighted. Pressing the '?' key displays brief help information on how to use the semi-graphical panel.

Normal cursor handling
Key | Action
--- | ---
Esc | Erases the contents of the command input area. If the command input area is already empty, switches to semi-graphical New Panel.
Del | Deletes the character at the cursor position.
Backspace | Erases the previous character.
Insert | Toggles between insert mode and overlay mode.
Tab | Attempts to complete the partial file name at the cursor position in the command input area. If more than one possible file exists, a list of matching file names is displayed.
Home | Moves the cursor to the start of the input in the command input area. If the command input area is empty, scrolls the message area to the top.
End | Moves the cursor to the end of the input in the command input area. If the command input area is empty, scrolls the message area to the bottom.
Page Up | Scrolls the message area up one screen.
Page Down | Scrolls the message area down one screen.
Up arrow | Recalls previous command into the input area.
Down arrow | Recalls next command into the input area.
Right arrow | Moves cursor to next character of input area.
Left arrow | Moves cursor to previous character of input area.
Ctrl + Up arrow | Scrolls the message area up one line.
Ctrl + Down arrow | Scrolls the message area down one line.
Ctrl + Home | Scrolls the message area to the top.
Ctrl + End | Scrolls the message area to the bottom.

The following additional keyboard functions are effective when the Hercules Extended Cursor Handling feature (OPTION_EXTCURS) is activated at compile time. At present, this feature is activated on the Windows platform only.

Extended cursor handling
Key | Action
--- | ---
Alt + Up arrow | Moves cursor up one row.
Alt + Down arrow | Moves cursor down one row.
Alt + Right arrow | Moves cursor right one column.
Alt + Left arrow | Moves cursor left one column.
Tab | If cursor is outside the command input area, moves cursor to the start of the input in the command input area. Otherwise behaves as described in previous table.
Home | If cursor is outside the command input area, moves cursor to the start of the input in the command input area. Otherwise behaves as described in previous table.
End | If cursor is outside the command input area, moves cursor to the end of the input in the command input area. Otherwise behaves as described in previous table.

#### Panel commands

The following is what is displayed on the Hercules harware console (HMC) in response to the '?' command being entered. Please note that it may not be completely accurate or up-to-date. Please enter the '?' command for yourself for a more complete, accurate and up-to-date list of supported panel commands.

      Command      Description...
      -------      -----------------------------------------------
      ?            list all commands
      help         command specific help

      *            (log comment to syslog)

      message      display message on console a la VM
      msg          same as message
      msgnoh       same as message - no header

      hst          history of commands
      hao          Hercules Automatic Operator
      log          direct log output
      logopt       change log options
      version      display version information

      quit         terminate the emulator
      exit         (synonym for 'quit')

      cpu          define target cpu for panel display and commands

      start        start CPU (or printer device if argument given)
      stop         stop CPU (or printer device if argument given)

      startall     start all CPU's
      stopall      stop all CPU's

      cf           configure current CPU online or offline
      cfall        configure all CPU's online or offline

      .reply       scp command
      !message     scp priority messsage
      ssd          Signal Shutdown

      ptt          display pthread trace

      i            generate I/O attention interrupt for device
      ext          generate external interrupt
      restart      generate restart interrupt
      archmode     set architecture mode
      loadparm     set IPL parameter

      ipl          IPL Normal from device xxxx
      iplc         IPL Clear from device xxxx
      sysreset     Issue SYSTEM Reset manual operation
      sysclear     Issue SYSTEM Clear Reset manual operation
      store        store CPU status at absolute zero

      psw          display or alter program status word
      gpr          display or alter general purpose registers
      fpr          display floating point registers
      fpc          display floating point control register
      cr           display or alter control registers
      ar           display access registers
      pr           display prefix register
      timerint     display or set timers update interval
      clocks       display tod clkc and cpu timer
      ipending     display pending interrupts
      ds           display subchannel
      r            display or alter real storage
      v            display or alter virtual storage
      u            disassemble storage
      devtmax      display or set max device threads
      k            display cckd internal trace

      attach       configure device
      detach       remove device
      define       rename device
      devinit      reinitialize device
      devlist      list device or all devices

      qd           query dasd

      automount    show/update allowable tape automount directories

      scsimount    automatic SCSI tape mounts

      cd           change directory
      pwd          print working directory
      sh           shell command

      cache        cache command
      cckd         cckd command
      shrd         shrd command
      conkpalv     display/alter console TCP keep-alive settings
      quiet        toggle automatic refresh of panel display data

      t            instruction trace
      t+           instruction trace on
      t-           instruction trace off
      t?           instruction trace query
      s            instruction stepping
      s+           instruction stepping on
      s-           instruction stepping off
      s?           instruction stepping query
      b            set breakpoint
      b+           set breakpoint
      b-           delete breakpoint
      g            turn off instruction stepping and start CPU

      ostailor     trace program interrupts
      pgmtrace     trace program interrupts
      savecore     save a core image to file
      loadcore     load a core image file
      loadtext     load a text deck file

      ldmod        load a module
      rmmod        delete a module
      lsmod        list dynamic modules
      lsdep        list module dependencies

      iodelay      display or set I/O delay value
      ctc          enable/disable CTC debugging
      toddrag      display or set TOD clock drag factor
      panrate      display or set rate at which console refreshes
      msghld       display or set the timeout of held messages
      syncio       display syncio devices statistics
      maxrates     display maximum observed MIPS/SIOS rate for the
                   defined interval or define a new reporting interval

      defsym       Define symbol
      script       Run a sequence of panel commands contained in a file
      cscript      Cancels a running script thread

      evm          ECPS:VM Commands (Deprecated)
      ecpsvm       ECPS:VM Commands

      aea          Display AEA tables
      aia          Display AIA fields
      tlb          Display TLB tables

      sizeof       Display size of structures

      suspend      Suspend hercules
      resume       Resume hercules

      herclogo     Read a new hercules logo file

      traceopt     Instruction trace display options

      cmdtgt       Specify the command target

      herc         Hercules command

      scp          Send scp command

      pscp         Send prio message scp command

      sf+dev       add shadow file
      sf-dev       delete shadow file
      sfc          compress shadow files
      sfk          check shadow files
      sfd          display shadow file stats

      t{+/-}dev    turn CCW tracing on/off
      s{+/-}dev    turn CCW stepping on/off
      t{+/-}CKD    turn CKD_KEY tracing on/off
      f{+/-}adr    mark frames unusable/usable

The ipl command may also be used to perform a load from cdrom or server. For example if a standard SuSE S/390 Linux distribution CD is loaded and mounted on /cdrom for example, this cdrom may then be ipl-ed by: ipl /cdrom/suse.ins

The attach and detach commands are used to dynamically add or remove devices from the configuration, and the define command can be used to alter the device number of an existing device.

The devinit command can be used to reopen an existing device. The args (if specified) override the arguments specified in the configuration file for this device. The device type cannot be changed and must not be specified. This command can be used to rewind a tape, to mount a new tape or disk image file on an existing device, to load a new card deck into a reader, or to close and reopen a printer or punch device.

In single-step mode, pressing the enter key will advance to the next instruction.

There is also an alternate semi-graphical control panel. Press Esc to switch between the command line format and the semi-graphical format. Press ? to obtain help in either control panel.

Some commands also offer additional help information regarding their syntax, etc. Enter "`help <command name>`" to display this additional help information. (Note: not every command supports help)

When a command is prefixed with '-', the the command will not be redisplayed at the console. This can be used in scripts and is also used internally when commands are to be invoked without being redisplayed at the panel.

#### The hercules.rc (run-commands) file

Hercules also supports the ability to automatically execute panel commands upon startup via the 'run-commands' file. If the run-commands file is found to exist when Hercules starts, each line contained within it is read and interpreted as a panel command exactly as if the command were entered from the HMC system console.

The default filename for the run-commands file is "hercules.rc", but may be overridden by setting the "`HERCULES_RC`" environment variable to the desired filename.

Except for the 'pause' command (see paragraph further below), each command read from the run-commands file is logged to the console preceded by a '> ' (greater-than sign) character so you can easily distinguish between panel commands entered from the keyboard from those entered via the .rc file.

Lines starting with '`#`' are treated as "silent comments" and are thus not logged to the console. Line starting with '`*`' however are treated as "loud comments" and will be logged.

In addition to being able to execute any valid panel command (including the 'sh' shell command) via the run-commands file, an additional '`pause nnn`' command is supported in order to introduce a brief delay before reading and processing the next line in the file. The value `nnn` can be any number from 1 to 999 and specifies the number of seconds to delay before reading the next line. Creative use of the run-commands file can completely automate Hercules startup.

#### The "Hercules Automatic Operator" (HAO) Facility

The Hercules Automatic Operator (HAO) feature is a facility which can automatically issue panel commands in response to specific messages appearing on the Hercules console.

To use the Hercules Automatic Operator facility, you first define a "rule" consisting of a "target" and an associated "command". The "target" is a regular expression pattern used to match against the text of the various messages that Hercules issues as it runs. Whenever a match is found, the rule "fires" and its associated command is automatically issued.

The Hercules Automatic Operator facility only operates on messages issued to the Hercules console. These messages may originate from Hercules itself, or from the guest operating system via the SCP SYSCONS interface or via the integrated console printer-keyboard (3215-C or 1052-C). HAO cannot intercept messages issued by the guest operating system to its own terminals.

##### Defining a Rule

To define a HAO rule, enter the command:

       hao tgt target

to define the rule's "target" match pattern followed by the command:

       hao cmd command

to define the rule's associated panel-command.

The target is a regular expression as defined by your host platform. When running on Linux, Hercules uses POSIX Extended Regular Expression syntax. On a Windows platform, regular expression support is provided by Perl Compatible Regular Expression (PCRE). The HAO facility can only be used if regular expression support was included in Hercules at build time.

The associated command is whatever valid Hercules panel command you wish to issue in response to a message being issued that matches the given target pattern.

##### Substituting substrings in the command

The command may contain special variables $1, $2, etc, which will be replaced by the values of "capturing groups" in the match pattern. A capturing group is a part of the regular expression enclosed in parentheses which is matched with text in the target message. In this way, commands may be constructed which contain substrings extracted from the message which triggered the command.

The following special variables are recognized:

- `$1` to `$9` - the text which matched the 1st to 9th capturing group in the target regular expression
- `$`` - the text preceding the regular expression match
- `$'` - the text following the regular expression match
- `$$` - replaced by a single dollar sign

Note that substitution of a $n variable does not occur if there are fewer than n capturing groups in the regular expression.

As an example, the rule below issues the command 'i 001F' in response to the message HHCTE014I 3270 device 001F client 127.0.0.1 connection reset:

       hao tgt HHCTE014I 3270 device ([0-9A-F]{3,4})
       hao cmd i $1

Another example, shown below, illustrates how the dot matrix display of a 3480 tape unit might be used to implement an automatic tape library:

       hao tgt HHCTA010I ([0-9A-F]{4}): Now Displays: (?:".{8}" / )?"M([A-Z0-9]{1,6})\s*S"
       hao cmd devinit $1 /u/tapes/$2.awstape

##### Other commands and limitations

To delete a fully or partially defined HAO rule, first use the 'hao list' command to list all of the defined (or partially defined) rules, and then use the 'hao del nnn' command to delete the specific rule identified by nnn (all rules are assigned numbers as they are defined and are thus identified by their numeric value). Optionally, you can delete all defined or partially defined rules by issuing the command 'hao clear'.

The current implementation limits the total number of defined rules to 64. This limit may be raised by increasing the value of the HAO_MAXRULE constant in hao.c and rebuilding Hercules.

All defined rules are checked for a match each time Hercules issues a message. There is no way to specify "stop processing subsequent rules". If a message is issued that matches two or more rules, each associated command is then issued in sequence.

## Technical Support

For technical support, please see the Hercules Technical Support page.

Last updated $Date$ $Revision$