[Info-vax] Backup TK50 tapes

David Froble davef at tsoft-inc.com
Wed Feb 27 23:52:02 EST 2013


Johnny Billquist wrote:
> On 2013-02-27 14:07, Stephen Hoffman wrote:
>> On 2013-02-27 03:10:49 +0000, David Froble said:
>>
>>> I'm going to take a guess here and state that the 32K limit was in
>>> VMS.   Specifically, there is a VMS limit of 32K for string lengths.
>>> The string descriptors use 16 bits to specify the string size.  I'm
>>> going to guess that string descriptors might have been used to specify
>>> buffers. 16 bit length, 32 bit address ...
>>
>> There was a limit of 32 KiB for string descriptors, and that old limit
>> is still present on OpenVMS VAX systems.  The limit was lifted on the
>> 64-bit systems at OpenVMS Alpha V7.0, and on OpenVMS I64 systems. Quick
>> C example of 64-bit string descriptors:
>> <http://labs.hoffmanlabs.com/node/787>
> 
> One reason for the restriction on VAX might be because string 
> manipulating instructions actually have a 16-bit field for string 
> lengths, meaning the maximum string length for any VAX instruction is 
> 65535 bytes. Which is one less than 64K. So, a limit of 32K might not be 
> totally unreasonable in software.
> 
>> (Whether it was the size of the tape controller hardware registers or
>> maybe ANSI tape specs or the old 32-bit descriptors that led to the
>> transfer size limit or a general "32-bits is good enough" moment,
>> donno.  Don't really care all that much about the origin of the limit,
>> either, as I'm not booting off tapes, not copying tapes, and have
>> relegated the remaining tapes to long-term archival-storage purposes,
>> for those cases where there are still tape loaders or tape libraries
>> around.  I'll leave that to the retronauts and retrohistorians to 
>> debate.)
> 
> I assume you meant "16-bit" when you wrote "32-bit" above... :-)
> 
>     Johnny
> 

General format of a string descriptor.  One of the bytes is a string 
type code.  There can also be 3 Longword and maybe 4 Longword string 
descriptors.  Can't remember, and don't feel like reading the fine manual.

While described as a string descriptor, the descriptor can be set as a 
fixed length string (to prohibit changes to the length) and used as a 
pointer to a buffer, perhaps created with a "get VM" type of call.  As 
such, the buffer can be accessed as a string by any VMS language that 
provides support for string descriptors.

If treated as an unsigned integer, the size could actually be 65535 I 
guess, and I have no idea why this wasn't done.

0                           31
------------------------------
| Word length | Byte | Byte  |
------------------------------
| Long address of the string |
------------------------------

I do so prefer the old style documentation much better than the new 
style documentation, a bit of C code ....



More information about the Info-vax mailing list