A 9 track magnetic tape, from the Museum of Obsolete Media
In this post we'll look at how to create your own emulated tapes to transfer data between MTS and your host operating system. For an introduction to tapes on MTS take a look back at this earlier article.
You will need to install the
lbltp program on your host OS. This allows reading from and writing to emulated tape files compatible with Hercules.
The version at Bitsavers contains source and executables for Mac and Windows. On Linux, get the latest version from Mike Alexander's SVN repo and build locally:
$ svn checkout https://svn.msalexander.com/repo/utilities/lbltp/trunk lbltp $ cd lbltp $ mkdir build $ cd build $ make -f ../Make/makefile $ sudo cp lbltp /usr/local/bin
Documentation can be found in the
Writeup directory. Type
lbltp to start the program, give it commands at the
Please enter request prompt and type
stop to exit.
Set up a spare tape drive
The starter version of D6.0 comes with a number of tape drives defined and loaded with the distribution tapes. You could use these to mount your own tapes but it is easier to set up a new tape drive.
Make sure MTS and Hercules are shut down then edit the
hercules.cfg file. In the tapes section add a line like this:
0C70 3420 * # User tape drive
This defines a 3420 model tape drive at address 0C70 which corresponds to MTS device T920. The
* means no tape is loaded when Hercules starts up.
Creating a new tape from MTS
Let's create a new tape, mount it for writing and use
*FS to store a couple of files which we can then read from the host OS.
First you will need to create a blank tape file. You can use the
hetinit program that comes with Hercules to do this. Change directory to
Tapes and issue the following command from your host OS:
hetinit -d new.aws NEW
This will create a file
new.aws with tape volume name
Next, issue a mount request for this new tape from MTS:
$mount mts:tape1 9tp *t* vol=NEW ring=in
ring=in parameter as we are going to write to the tape. We are using regular labelled tapes so we don't need the
lbltype=vlo parameter used for distribution tapes.
Switch to the Hercules console and issue a
devinit command to initialise the tape drive with the file:
devinit 0c70 Tapes/new.aws
Go now to the MTS operator's console and respond to the mount request:
OK TAPE1 T920
If all goes well your MTS session will respond that the tape was mounted. You can now run
*FS to add files to the tape. Note the
par=init parameter as this is a new tape:
$run *fs 0=*t* par=init # Execution begins 11:24:36 = save alpha = File 1 "ALPHA(1)" ... has been saved = save gamma = File 2 "GAMMA(1)" ... has been saved = stop = Do you want *FS to dismount the tapes it used? ? yes = "*T*": (MTS.:TAPE1) T920 released. # Execution terminated 11:24:46 T=0.058
Reading the tape from your host OS
You can now use
lbltp to open the tape file and extract files to your host OS. Below is a sample session showing how to do this:
ITD Tape Utility version 1.3 Please Enter Request open new.aws Open input or output tape? input Please Enter Request list Listing for IBM labeled *FS tape NEW FS file 1 ALPHA blks=1 recs=2 bytes=78 FS file 2 GAMMA blks=1 recs=13 bytes=366 Logical End of Tape reached. Please Enter Request copy file=1-2 Copying FS file 1 ALPHA to alpha. 1 blocks 2 records 78 bytes 2 records 80 bytes Copying FS file 2 GAMMA to gamma. 1 blocks 13 records 366 bytes 13 records 379 bytes Please Enter Request stop
lbltp takes care of EBCDIC to ASCII conversion, but line numbers from MTS are not preserved.
Creating a tape from your host OS
Now let's try to do it the other way, creating a tape with some files from your host OS and transferring these into MTS.
One problem is that
lbltp only supports reading
*FS formatted tapes, not writing to them. So we will have to write a regular labelled tape and use lower level tape positioning commands on MTS to extract files.
(I think it should be technically possible to extend
lbltp to support writing
*FS tapes; could be an interesting project.)
lbltp session shows how to create a new tape and add two files. Note that you have to give an explicit
filename command before adding each file to the tape.
ITD Tape Utility version 1.3 Please Enter Request initialize send.aws volume=SEND Please Enter Request filename delta Please Enter Request copy input=delta output Copying file delta to send.aws file 1 DELTA. 3 records 37 bytes 1 blocks 3 records 37 bytes Please Enter Request filename epsilon Please Enter Request copy input=epsilon output Copying file epsilon to send.aws file 2 EPSILON. 4 records 29 bytes 1 blocks 4 records 29 bytes Please Enter Request stop
Reading the tape from MTS
Now we need to mount the tape on MTS. On the Hercules console (note the
devinit 0c70 Tapes/send.aws ro
$mount mts:tape1 9tp *t* vol=SEND
On the MTS operator's console:
OK TAPE1 T920
The tape is now mounted on pseudodevice
*T*. To get a listing of files, there's a useful MTS program called
*LABELSNIFF we can run, giving the tape pseudodevice as parameter 0:
# run *labelsniff 0=*t* # Execution begins 10:50:15 Tape = *t* User ID REL. 10:50:15 19 Sept 1914 Tape name=MTS.:TAPE1 IBM labeled 6250-bpi 9TP Volume=SEND LP=on BLK=on RING=out DTCHK=on RETRY=10 File Block Record Tapelen Record # Data set name count count (feet) format 1 DELTA 1 3 1.10 VBS(32760,32767) 2 EPSILON 1 4 1.08 VBS(32760,32767) Total tape length = 2.18 feet. <*><*><*> End of tape <*><*><*> # Execution terminated 10:50:23 T=0.029
(For those of us who have never used real tapes it's interesting to visualise files having a length in feet!)
Now to extract the files. For each file we will need to use a
$control command to position the tape and then use the MTS
$copy command to read from the tape and write to a file. We will also need to create the files we want to write to. For example:
$control *t* posn=epsilon $create epsilon $copy *t* epsilon
You don't have to copy to a file; if you just wanted to display the file you could do
When finished, you will need to release the tape:
$release *t* # "*T*": (MTS.:TAPE1) T920 released.
MTS Volume 19 has extensive information on using tapes. I also found the tutorial guide made by the UM Computer Centre Introduction to Magnetic Tapes - Getting It on Tape useful.
There's a program on MTS called
*UNIXTAR that looks like it can read and write tar format files, so one alternative that I have not tested is to create a tar file on the host OS, add this as the single file on a tape and use
*UNIXTAR to extract all the files in one step.