michigan terminal system (mts) v6.0 installation notes for hercules v3.07
I've wanted to play with MTS for quite some time, but it's only just recently that the source, binary tape images and documentation were released for public consumption. I've had a lot of fun getting MTS up and running and I put together the following page to distill all the installation documentation down and get you through some potential snags.
You can download the MTS binary tape images from Bitsavers.
You can download the official MTS documentation and other published ephemera from Bitsavers.
1. Set up a Hercules configuration file like the following:
LOADPARM  ........

# .-----------------------------Device number
# |     .-----------------------Device type
# |     |       .---------------File name
# |     |       |
# V     V       V
#---    ----    --------------------

0180    3420
0181    3420
0182    3480
0183    3480

0260    3380    dasd/mts600.3380

0009    3270    console
0001    3270    *
0002    3270    *
0003    3270    *
0004    3270    *

000E    1403    mvslog.txt
What's this all about? Basically what we've done is configure Hercules to emulate an IBM 3090, which is one of the later machines supported by MTS (development ceased in the late 1980s or early 1990s). Just for fun, and to test the claim that MTS will support up to 8 CPUs (it does), we've configured same, although I don't believe any system so large was ever built historically. 128 MB of main memory is configured, which I believe is generally consistent with 3090 minimums.

We define a few tape devices, both 3420 and 3480, because some of the tape images seem to like one device, while some will only work with the other. I'll note explicitly when that happens later on down the page as it comes up during the installation.

One 3380 disk drive is defined on which to install MTS and subsequently boot from.

Five 3270 terminals are defined. One will be used for the system console, the other four will be used for timesharing sessions.

One 1403 printer was defined in case it was required for test or debug (it turned out to be not required). It can also serve as a way to get textual data out of MTS.

Besides the number of defined CPUs, this is a pretty basic system configuration. It's certainly possible to grow from here and emulate a system with greater capacity, but the configuration above is realistically the bare minimum required to get you started running MTS.

N.B. For historical purists: I do know "technically" a 3090 is an ESA/370 system but this is not an option in Hercules and setting ARCHMODE to ESA/390 seems to make both Hercules and MTS happy.
2. Build the DASD device. We can fit the full MTS D6.0 release and layered products with plenty of space left over on one 3380 unit:
dasdinit -a dasd/mts600.3380 3380 MTS600
3. Start Hercules:
hercules -f mts.cnf
4. Load the first DR tape into the first 3420 tape drive.
devinit 0180 mts/d6.0/d6.0dr1.aws
5. Connect your TN3270 emulator to port 3270 on the machine running Hercules.

6. IPL the emulator

ipl 0180
7. Wait for the prompt "Do you want to run the current system (yes or no)?" in the 3270 window.

8. At the Hercules console, type:

devinit 0181 mts/d6.0/d6.0util.aws
Note that you need to mount the utility tape on a 3420 device or else MTS will throw errors when trying to read it (just a bug in this distribution, I guess).

9. In the 3270 window, type:

run *ipl.mp.ndsk addr=0181
10. When prompted about the time, just type "ok" and hit RETURN.

11. At the message:

DMGR Volume MTS600 not found. "RETRY" to retry, "CANCEL" if unavailable
type "CANCEL" and hit RETURN.

12. You should see:

DMGR ERROR - Can't add PVN 1.
This is normal, ignore it.

13. Type:

and hit RETURN. You should see the first two lines at the top of the screen change to show some system statistics.

14. Type:

and hit RETURN.

15. Type:

16. You will see:
"*MACRTNS": hardware error or software inconsistency.
Enter a new file/device name, "CANCEL", or "HELP".
This is normal.

17. Type "CANCEL" and hit RETURN.

18. At the Hercules console, load another copy of the UTIL tape on a 3480 device:

devinit 0182 mts/d6.0/d6.0util.aws
It's important to use a 3480 device to read the tape this time, otherwise MTS will throw an error when you try to run DASDI (some sort of bug in this release, I guess).

19. Attach to the utility tape:

$GET >T902
20. Initialize the disk volume onto which you will be restoring MTS:
D400 MTS600 VX 1 IPL
Wait while the disk is formatted. When done (prompted to "Enter next input line") , type:
21. Restore the D6.0 system from the DR tapes to the disk:
Go back to the Hercules console and load another copy of the DR1 tape on a 3480 device (it's picky):
devinit 0183 mts/d6.0/d6.0dr1.aws
Note that you will need to use a 3480 type device for all three of the DR tapes to successfully read them.

Then go back to the 3270 window and continue:

D400 MTS600
Wait a while for the first DR tape to copy to disk.

When the first tape is finished, go back to the Hercules console and load the second DR tape:

devinit 0183 mts/d6.0/d6.0dr2.aws
Then go back to the 3270 window and continue:
Wait for the second DR tape to copy to disk.

When the third tape is finished, go back to the Hercules console and load the third DR tape:

devinit 0183 mts/d6.0/d6.0dr3.aws
Then go back to the the 3270 window and continue:
Wait for the third tape to copy. When it is all done, you should see a message:
Volume labels are unchanged: 75598 data pages copied, 0 relocations
Enter "FROM" device type (DISK/TAPE)
At that point, exit DISKCOPY
22. This should complete the installation of MTS to the disk. Go back to the Hercules console and exit:
(Should we do SHUTDOWN ALL in MTS first? I didn't do it and it didn't seem to hurt anything. Docs are unclear)

23. Restart Hercules, reconnect your 3270 and IPL from the disk. At the Hercules console, type:

ipl 0260
24. At the prompt,
"Do you want to run the current system (yes or no)?"
run name=*ipl.mp
When prompted for the time, type "ok" and hit RETURN.

25. When prompted for initials and reason for reloading, say something descriptive:

stc initial system ipl
and hit RETURN

26. You will receive a message about some devices found to be missing at IPL time. Clear the alert by sending PA2 in your TN3270 emulator.

27. Start up MTS:

mts *las
If you want to run more 3270 terminals for timesharing sessions (you should have at least one in addition to the console), it's recommended to connect them up before typing mts *las at the console.

I have found that as long as MTS is running and terminal ports (as defined in the Hercules configuration file) are available, further TN3270 sessions may be established at any time on port 3270 after MTS has started with no problem. If the signon screen does not immediately appear, try sending PA1 or a few carriage returns.

At this point, you should see the MTS signon screen on the non-console 3270 sessions.

28. On one of the non-console terminals, go ahead and sign on to MTS! You basically have two options at signon time. The first is to sign in using a privileged account i.e. mts or acc or net or host or oper or sys (and so on) that will give you special access on different portions of the system. The second is to simply sign in with a user level account. There are a number of user level accounts created by default on D6.0 i.e. st01 ... st99.

signon mts
signon st01
If you signed on to one of the privileged accounts (i.e. mts, acc, etc) you first get a password prompt for that. By default in D6.0, the password is "aardvarks". You will subsequently be required to enter credentials for a valid user level account as well! At the ID? prompt, enter a valid user level account i.e. st01.

If you signed on with a user level account to begin with, you will land directly at the user level password prompt.

Enter the corresponding password for the user level account when prompted i.e. st01 will be the password for account st01.

NOTE: All default user level accounts and passwords follow the same format, so the second account is st02 with password st02, the third is st03 with a password of st03 and so forth.

29. Now you have a working MTS 6.0 starter system! The signon and signoff commands log you in and out and help will give you an excellent full screen interactive help system.

In general, to learn about commands built in to the MTS command interpreter, look in Section 3 of the online help system, MTS_Commands. To learn more about the layered products such as compilers and other applications, look in Section 5 of the online help system, Public_Files.

There is a fair amount of layered software included in the D6.0 MTS distribution including a working *FORUM and at least twenty or thirty compilers and assemblers (although a few of them are broken) so we can enjoy MTS in some depth.

30. Example: List files in your user area

# f

31. Example: Show running tasks

# sy ta

  - Job # Job Name  JobTbl    VP    Status
  - 00006      PDP 00056D20      Dormant      ;
  - 00002 OPERATOR 00056E80    1 Dormant      ; DS01
  - 00003     DMGR 00056FE0      ?Wt FF22C028 ; D400
  - 00038      MTS 000572A0   98 Monitor Idle  MAIL WMTS *MGR;
  - 00028       MM 00057400   13 Monitor Idle  NETP NONE  PIP;
  - 00033      MTS 00057560  315 DE Wait DS03  ST01 ST01; DS03
  - 00032      MTS 000576C0   40 Ready         ST01 ST01; DS02
  - 00018      MTS 00057820  117 Privileged    SYS. WOPN *CMD;
  - 00012     JOBS 00057980    1 Time Wait      MAS;
  - 00034      MTS 00057AE0   19 DE Wait DS04  DS04; DS04
  - 00039      MTS 00058060   52 TLNT Manager  HOST WMTS *TCM;
  -     656 pages in use.

32. Example: Stat users and jobs

# sy u
  - There are   5 terminal users,   0 batch jobs,   1 available lines,
  - and   5 non-MTS jobs using  1935 virtual pages and  2476 real pages.

33. Example: Stat machine type (consistent with our Hercules configuration)

# di machine
  Mode: 370-XA  Model: IBM 3090//FD  Serial number: 611.

34. Example: Print the contents of a file to the terminal

# l hello.c

       1     #include 
       2     int main(void);
       3     int main(void) {
       4          printf("hello, world\n");
       5          return 0;
       6     }

35. Example: Run BASIC

# run *basic
# Execution begins   23:55:54
:/open test
&  "TEST" has been created.
: 10 for i = 1 to 10
: 20 print i
: 30 next i
: /list
  10 for i = 1 to 10
  20 print i
  30 next i
& End-Of-File
+  Program Ends
&  Off at 23:57:41 on 07-20-87
# Execution terminated   23:57:41  T=0.15

36. Example: Run LISP

# run *utilisp
# Execution begins   00:06:57
> (plus 2 3)
> (quit)
# Execution terminated   00:33:19  T=0.161

37. Example: Enter, compile and run a PL/1 program

# create hello.pl1
  File "HELLO.PL1" has been created.
# edit hello.pl1
: insert
? MESSAGE = 'Hello, world!';
: close
: end of file
# create hello.exe
  File "HELLO.EXE" has been created.
# run *pl1f scards=hello.pl1 spunch=hello.exe par=deck
# Execution begins   21:49:41


# Execution terminated   21:49:44  T=0.422
# run hello.exe+*pl1flib
# Execution begins   21:50:36
  Hello, world!
# Execution terminated   21:50:37  T=0.006

38. Example: Enter, compile and run a FORTRAN program

# create test2.for
  File "TEST2.FOR" has been created.
# edit test2.for
: insert
?     1 FORMAT (F7.2,F6.3)
?     2 FORMAT (5H HYP=,F7.2,4H A=,F6.3,8H SIDEA=,F7.2,8H SIDEB=,F7.2)
?    10 READ 1,HYP,A
?       IF (HYP-99999.99) 20,30,30
?    20 RADA=A/57.29578
?       GO TO 10
?    30 STOP
?       END
: close
: end of file
# create test2.exe
  File "TEST2.EXE" has been created.
# run *ftn scards=test2.for spunch=test2.exe par=deck
# Execution begins   22:36:26
  No errors in MAIN
# Execution terminated   22:36:26  T=0.094
# run test2.exe
# Execution begins   22:45:42
  HYP=   5.00 A=,76.000 SIDEA=,   1.21 SIDEB=,   4.85
  HYP=   1.00 A=,45.000 SIDEA=,   0.71 SIDEB=,   0.71
  end of file

39. When ready to shut the system down, go to the MTS console and type:

and hit RETURN. Wait until the message "SHUTDOWN Shutdown All complete." is received, then issue "quit" from the Hercules console.

NOTE: If you want to start MTS on the operator console, type the command:

Then log in using the "SIGNON" command as usual.

Note that if the system gets away from you, the "PA1" key seems to serve as interrupt. PA2 seems to serve as end-of-file. A "long" PA2 can often dump you out of something confusing back to the MTS command interpreter. It's helpful to have a TN3270 emulator that can send PF1-PF16 and PA1-3 for full MTS functionality (TCP3270 works great on Windows while x3270 has been confirmed to work well on UNIX).

NOTE: At some point, set the default "kernel" that is run when the system is IPL'd. Sign on as user MTS and do either of:
# ren *ipl.mp *ipl.0

# dup *ipl.mp *ipl.0
If prompted to confirm, just reply with "OK" and hit RETURN.

After this is done, you can just answer "yes" to the following prompt when IPLing the system:

"Do you want to run the current system (yes or no)?"
In general, I have found MTS to be a great operating system to work with. Designed and implemented in the late 1960s as one of the first virtual memory timesharing systems, it feels every bit as fluid and interactive as operating systems created decades later. Casually compared to other operating systems for the IBM 360/370 platform, MTS seems much more flexible and powerful than CMS while being magnitudes more intuitive than TSO. Straightforward to install, administer and use, MTS was revolutionary when released and provided cutting edge capabilities to users for decades at sites that ran it in production.