On Tue, Dec 6, 2016 at 2:02 AM, Christian Corti
<cc at informatik.uni-stuttgart.de> wrote:
On Mon, 5 Dec 2016, Glen Slick wrote:
I tried using ImageDisk on a PC to read the two HP 1630 3.5-inch
floppies I have (10304 8085 preprocessor, 10342 HP-IB, RS-232C/V.24,
RS-449 preprocessor). It appeared to be able to read the expected data
just fine. Singled sided disk with 16 256-byte sectors per track
(sector numbers 0 - 15) and 70 tracks.
But it also seemed to detect a sector number 17 with no data in each
track. Is that a normal 9121 low level format? I haven't tried to
write a floppy back out using ImageDisk to see if the result is
readable on a 9121 drive.
Funny that you mention that. I just came across that anomaly yesterday when
I tried to create some disks for the HP150 with 9121 drive; the images are
from the hpmuseum site and are in TeleDisk format.
I had a lot of trouble writing the images back. I wanted to use ImageDisk
instead and tried the TD02IMD tool, but it failed miserably with the error
"Cannot do mixed sector size within track", even with the option M=15 that
should truncate every track after sector number 15.
I found out that a disk formatted in the 9121 has 16 normal sectors
(numbered from 0 to 15) with 256 bytes each (size code 1), and one extra
sector numbered 17 (there's no sector 16) with size code 5.
The solution to TD02IMD was to move the call of remove_sectors() *before*
the three issame() calls. remove_sectors() is responsible to remove the
unwanted sectors greater that 15 with option M=15. With that bugfix TD02IMD
produces a correct IMD file that can be written back without problems, and
the 9121 drive is very happy with that floppy :-)
Christian
That reminded me I ran into this problem 4 years ago and sent this
email to Dave at the time about it. I ended up rebuilding my own
version from the IMD118 source code to fix the problem.
----------
Dave, I have some questions/suggestions about
TD02IMD.COM
In the main routine would it make sense to move the remove_sectors()
call prior to where it does the mixed sector size check? For example,
if the tracks of a disk contain 16 normal and same sized sectors and
there is a 17th garbage sector in the Teledisk image with a different
sector size, would it make sense to be able to use the M= command line
option to filter out and remove sectors that cause image conversion
failure?
// Read each sector, buffer & build maps
for(s=0; s < Thead.Tsectors; ++s)
process_sector();
if(!issame(Smap, Size = Smap[0], Stop)) // 765 cannot
do mixed sector sizes
error("Cannot do mixed sector size within track");
if(!issame(Cmap, Cylinder, Stop)) //
Cylinder map required
Head |= 0x80;
if(!issame(Hmap, Head & 0x0F, Stop)) // Head map required
Head |= 0x40;
// Remove sectors as requested
remove_sectors();
Also, would it be reasonable to add command line options for selecting
a single side of a Teledisk image, and also to limit the maximum track
number?
My motivation for asking these questions comes from trying to convert
some HP-85/86/87 TeleDisk disk images which do appear to have the
garbage sector issue I mentioned above. Plus some of these images
were processed as doubled sided when only one side would actually be
used, and/or process all possible 40 or 80 tracks when only 35 or 70
would actually be used in the original target environment.
For example
TD02IMD.COM chokes on this disk image:
http://www.hpmuseum.net/software/WORDSR80.TD0
I believe the original disk here would only contain 16 valid 256-byte
sectors per track, only one side of valid data, and only 70 valid
tracks of data on the one valid side.
----------