I've been playing around with trying to make larger virtual disks work. I successfully generated an HFE file with 8 sectors per track, which gave a 60% greater capacity, and I successfully booted from such a virtual disk, but when I had the HP write to the virtual disk, the write was corrupted. (Using 9 sectors per track, it also booted, but took more than twice as long as usual so I didn't test that further. Using 10 sectors per track, the ROM disk reading code crashed.) I am now experimenting with 254 track virtual disks using the standard HP 5-sectors-per-track format, with an extra magic track 79 side 0 sector 98, but it will require a patch to the OS to read beyond track 76.
(By the way, even though the disks are formatted to 80 tracks, the OS only allows LIF data in the first 77 tracks. And there is, I think, an off-by-one bug, either in the ROM or the SYSTEM_ software, where the last 256 byte block of the second side of track 76 does not count towards disk capacity.)
In case anybody is curious, I do have more information about the magic track 79, based on reverse engineering of the ROM. Track 79 side 0 must have a sector numbered 98 which contains information about the disk format. The default value is:
Code: Select all
50 02 88 05 03 01 02 01 A3 01 A3 E6 32 16 32
I know what a few of the values mean. The "50" in byte 0 is a marker for the magic sector. Byte 3 specifies the number of sectors per track. Byte 4 specifies sector size, with 03=1024 being the default (smaller sector sizes as possible, but why bother?). AS far as I can see, the ROM ignores all the other values. In standard HP formatting, the data is duplicated on side 1 of the track, and there is a small header on sector 97 of both sides of the track, but this is all ignored by the ROM. So if anybody wants to experiment with custom disk layouts, just make sure you put have a track 79 side 0 sector 98 with the correct values for bytes 0, 3 and 4, and the ROM should recognize it.
After reading 79.0.98, the ROM reads the first sector of the disk (0.0.1) which has the standard LIF header, but it ignores all the data there (including the number of tracks, etc.) except for checking that there is a 0x8000 LIF header, and I think saving the volume name.