Yes, now posted: https://cid-fc758a5a91b91301.skydrive.live.com/browse.aspx/Public/VirtualTap e
Regards Rob > -----Original Message----- > From: [email protected] [mailto:simh-boun...@trailing- > edge.com] On Behalf Of Armistead, Jason > Sent: 29 March 2010 13:35 > To: [email protected] > Subject: Re: [Simh] Converting VMS BACKUP saveset file to SIMH tape > file > > 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: [email protected] [mailto:simh-boun...@trailing- > edge.com] On Behalf Of Rob Jarratt > Sent: Sunday, 28 March 2010 3:00 PM > To: 'Edward Berry'; [email protected] > 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: [email protected] [mailto:simh-boun...@trailing- > > edge.com] On Behalf Of Edward Berry > > Sent: 28 March 2010 19:25 > > Cc: [email protected] > > 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 > > [email protected] > > http://mailman.trailing-edge.com/mailman/listinfo/simh > > _______________________________________________ > Simh mailing list > [email protected] > http://mailman.trailing-edge.com/mailman/listinfo/simh > _______________________________________________ > Simh mailing list > [email protected] > http://mailman.trailing-edge.com/mailman/listinfo/simh _______________________________________________ Simh mailing list [email protected] http://mailman.trailing-edge.com/mailman/listinfo/simh
