EEPROM

There is a 2KB EEPROM in this box, which is used to contain ROM monitor settings and (if we were running it, which we're not) settings for HDSware. Unlike many EEPROM chips, this one requires no special unlock sequence; you just write to it and wait for the write to complete. There are no boot blocks or anything like that.

There is a structure to the data in the EEPROM. Failure to heed this will result in the ROM wiping it out due to a bad checksum. The structure is fairly simple. There is a fixed-size header which, among other things, contains the checksum and the amount of space that is taken up by data. Each item (in the data area) has an item header, a zero terminated name, and a value.

The item names are compressed. The items are named in a fashion reminicent of X-11 resources. To save space in the EEPROM, though, each part of the name is looked up in a string table and its corresponding index is stored. That means that we cannot just arbitrarily make up name parts.

The ROM has a feature which looked promising, but actually isn't. It attempts to load a boot configuration file from the TFTP server. That file, if present, would contain parameters of the sort that one would find in the EEPROM. There is one called HDSsetup.SaveToNVM, which, if set to YES should save parameters read from that file (except for those which are the defaults) to the EEPROM. However, it only appears to do so for very few parameters. Basically, just those paremeters which the ROM monitor cares about.

I had hoped to use SaveToNVM to get a kernel command line from a network server into the EEPROM where the kernel would be able to find it, but, since it doesn't work that way, I have a chicken and egg problem. I started to write a device driver to access the EEPROM, but this problem sort of killed the need for it. If I come back to this, I'll probably have to create a second kernel with a ROM filesystem on it just to fetch the command line from the BOOTP server (or somewhere) and write it into the EEPROM; in which case, I would have to finish the device driver.