[Simh] Converting VMS BACKUP saveset file to SIMH tape file

Armistead, Jason Jason.Armistead at otis.com
Mon Mar 29 08:34:48 EDT 2010


Hi Rob

Is there source available for this program ?  I'd like to understand how it ticks under the hood.

Thanks,
Jason

-----Original Message-----
From: simh-bounces at trailing-edge.com [mailto:simh-bounces at trailing-edge.com] On Behalf Of Rob Jarratt
Sent: Sunday, 28 March 2010 3:00 PM
To: 'Edward Berry'; simh at trailing-edge.com
Subject: Re: [Simh] Converting VMS BACKUP saveset file to SIMH tape file

The program I wrote will take a binary file and make a SIMH .TAP file out of
it. I have used this to make BACKUP tapes from BACKUP files I have on the
PC.

I have posted the executable and its DLL here:
https://cid-fc758a5a91b91301.skydrive.live.com/browse.aspx/Public/VirtualTap
e. please note that the program requires the .NET Framework 2.0 to be
installed.

To be honest I have forgotten how to use it. I think you select the name of
the .TAP file, select a label and then press the Write ANSI button to select
the files to put on tape.

Regards

Rob

> -----Original Message-----
> From: simh-bounces at trailing-edge.com [mailto:simh-bounces at trailing-
> edge.com] On Behalf Of Edward Berry
> Sent: 28 March 2010 19:25
> Cc: simh at trailing-edge.com
> Subject: Re: [Simh] Converting VMS BACKUP saveset file to SIMH tape
> file
> 
> Rob Jarratt wrote:
> > I have some C# code which may do this. If I can find the code would
> you
> > like to give it a go?
> >
> > Regards
> >
> > Rob
> 
> I would also be interested in getting the code if it resurfaces!
> Does it make a disk file to mount on simh, or a saveset to FTP into
> the simulated filesystem and read as a disk-based saveset?
> 
> 
> I've been dd'ing the savesets from exabyte tapes written by VMS
> to linux (which I realize may not be the same thing as FTP'ing a disk-
> based saveset)
> This requires dividing the file into blocks (see simh_magtape.pdf
> on trailing edge website). For small savesets I was able to use
> Helbig's enblock.c:
> 
> http://www.ba-stuttgart.de/~helbig/os/v6/enblock.c
> with some description at
> http://minnie.tuhs.org/pipermail/tuhs/2003-June/000612.html
> 
> but for large files it was flakey - saveset came out a different size
> each time I ran it.
> Then I found that using fortran to read the saveset image unformatted
> with the correct record length and write it out again, has the same
> effect of blocking the records.
> 
> Then the saveset had to be combined with its header and footer (also
> dd'd
> from the vaxtape), and if it was not the first saveset the header had
> to be prepended with the tape label from the first set. I realize
> this is quite different from what the original poster is doing,
> but in case anyone needs to restore vax tapes to disk images for
> simh I'll put the procedure and code below.
> 
> 
> =======================================================================
> ======
> Restoring vax tapes for simh on a linux machine
> Tape drive for reading the tapes: exabyte eliant
> 
> script for reading tape files to disk (cd to an empty directory before
> running)
> -----------------------------------
> ddvaxtape.csh:
> #!/bin/csh -ef
> #mt -f /dev/nst0 rewind
> mt -f /dev/nst0 setblk 0
> foreach nmbr (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
> \
>   23 24 25 26 27 28 29 30)
> dd if=/dev/nst0 bs=80    of=hdr${nmbr}.dat
> if $nmbr == 1 then
> head -c40 hdr${nmbr}.dat |awk '{print $1}'
> head -c160 hdr${nmbr}.dat |tail -c80 |awk '{print $1,$2}'
> else
> head -c40 hdr${nmbr}.dat |awk '{print $1,$2}'
> #cat hdr${nmbr}.dat |awk '{print $1,$2}'
> endif
> #dd if=/dev/nst0 bs=32768 of=saveset${nmbr}.dat
> dd if=/dev/nst0 bs=65536 of=saveset${nmbr}.dat
> head -c428  saveset${nmbr}.dat |tail -c135
> #head -c444  saveset1.dat |tail -c151
> echo
> #dd if=/dev/nst0    bs=0      of=saveset${nmbr}.dat
> dd if=/dev/nst0 bs=80    of=tail${nmbr}.dat
> mt -f /dev/nst0 status
> #if $status break
> end
> exit
> If the tape has more than 30 savesets, after it finishes
> create a subdirectory and run the program again there
> without the rewind instruction.
> 
> To list the savesets in each file:
> grep EOF tail*.dat
> 
> tail10.dat:EOF1RAXISD1.         BCD3  00010010000100 91353 91353
> 001208DECVMSBACKUP
>   EOF2F3276832768                     M             00
> tail11.dat:EOF1RAXIS2.BCK       BCD3  00010011000100 92024 92024
> 001208DECVMSBACKUP
>   EOF2F3276832768                     M             00
> tail12.dat:EOF1BCIIA.MRC        BCD3  00010012000100 92025 92025
> 000311DECVMSBACKUP
>   EOF2F3276832768                     M             00
> ------------------------------------
> This produces 3 files for each saveset: hdr##.dat, saveset##.dat, and
> tail##.dat
> The first header is longer because it starts with the tape label.
> The saveset##.dat files can be listed and extracted on the linux
> host using the vmsbu utility.
> 
> To use with simh they need to be blocked and recombined with tape
> label, head, and tail.
> http://www.ba-stuttgart.de/~helbig/os/v6/enblock.c will block small
> files
> (or maybe files with small reclength), but for the savesets with
> reclength 32768 I used a fortran snippet (real hack, the file names are
> coded in!
> Also I think you need to redimension (character*32768 line) to match
> the
> reclen param the tape was written with.):
> 
> c****writing in unformatted mode automatically wraps each record in 4-
> byte integers giving
> record size.
> c     record size can be variable
> c
> 	INTEGER*4 IR
> 	character*32768 line
>           OPEN (UNIT=2,FILE='saveset19.dat',STATUS='OLD',recl=32768,
>       .   form='unformatted',access='direct')
>           OPEN (UNIT=3,FILE='saveset19.tpe',STATUS='unknown',
>       .   form='unformatted',access='sequential')
> 	DO 77 IR = 1,50000
> 3       READ(2,rec=ir,err=777)  LINE
> 	write(6,*) ir
>   	write(unit=3) (LINE)
> 77	continue
> 777 	close (3)
> 	end
> 
> (This works when compiled with g77 fortran. I just tried gfortran and
> the file
> comes out larger by about one byte per record, so I suppose it won't
> work)
> 
> 
> now putting it all together ("enblock" here is Helbig's enblock, and
> saveset19.tpe is the output of the fortran blocking):
> 
> #get the tapelabel, from first header, blocked, first 88 bytes:
> cat hdr1.dat | enblock 80 > temp.dat
> dd if=temp.dat  count=88 bs=1 > $syn/simh/VAX/allback.tpe
> #append the appropriate header:
> cat hdr19.dat |enblock 80 >> $syn/simh/VAX/allback.tpe
> #append the saveset:
> cat saveset19.tpe              >> $syn/simh/VAX/allback.tpe
> #put end-of-file label?:
> dd if=/dev/zero bs=1 count=4  >> $syn/simh/VAX/allback.tpe
> #append the tail
> cat tail19.dat | enblock 80 >> $syn/simh/VAX/allback.tpe
> #put extra 4 zero's for end-of-tape
> dd if=/dev/zero bs=1 count=4  >> $syn/simh/VAX/allback.tpe
> 
> #mount it on simh!
> attach tq2 allback.tpe
> c
> BACKUP/List/rewind  mua2:
> _______________________________________________
> Simh mailing list
> Simh at trailing-edge.com
> http://mailman.trailing-edge.com/mailman/listinfo/simh

_______________________________________________
Simh mailing list
Simh at trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh



More information about the Simh mailing list