Netboot Mailing List (by thread)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 32 kB ROM on 3c509b


On Mon, 29 Sep 2003 03:12:00 +0200, Florian Zumbiehl wrote:
>> Of course this is possible. I also do have the documentation for the
>> 3C509B, and actually this page switching already works for older 3C905B
>> (which do have a bug which requires switching) and also for Intel cards
>> with a 595 chipset (which can only access 8kB in one chunk). It is
>> fairly easy to implement a flash routine into makerom which allows
>> page-switching (the 3C509B allows using Flash EPROMs - for normal EPROMs
>> there is currently no provision for supporting page
> Hu? Why does it matter what memory technology the chip uses?!

Because the page switching algorithm is implemented within the flash EPROM
programmer built into makerom. I would like to keep the base netboot
bootrom code device-independent. The way this works is as follows:

1. makerom takes the base netboot bootrom code, and then adds the device-
   independent UNDI interface (either packet or NDIS) and finally adds
   the network driver.

2. makerom then compresses everything

3. makerom adds a combined loader and decompressor at the beginning of
   the compressed image. There are two possible loaders: a ROM loader
   which hooks up interrupts for starting the bootrom in the bootup phase,
   and a floppy loader which loads the bootrom off a floppy

4. Using makerom you can also select to generate a flashable bootrom. In
   this case, makerom generates a netbootable image from the ROM image
   created in step 3, just like an mknbi program. For this, makerom
   adds the boot image header, and a special Flash loader program,
   and finally the bootrom image itself.

The Flash loader program is device-dependent, and currently supports
3C905B/C, RTL8129 and Intel 80595 chips. When you selected to create
a flashable image using makerom, you can then copy the resulting file
onto your TFTP server, and provide it to a client just like any other
boot image file. Once the client loads the flash image, it starts the
flash loader (like the loader in any other mknbi program). The flash
loader then does the following:

1. Scan for any supported network card

2. For any supported network card, check if it contains a flash EPROM

3. If no network card found, scan the whole memory for a FlashCard (the
   Flash EPROM ISA card for which you can find a schematic in the netboot

4. Select the first network card and Flash chip which matches the bootrom
   image contained in the boot image file as "payload"

5. If the network card requires bank switching, put some space between the
   ROM loader and the compressed rest of the bootrom. The size of this
   space is computed so that the compressed part begins at the start of
   the second bank.

6. Add a network-card specific bank switching code at the end of the ROM
   loader code, and modify the ROM loader code so that the decompression
   routine reads its input using bank switching, once the ROM is really

7. Program the whole thing into the Flash EPROM, using routines which are
   specific for the network card and Flash EPROM type.

Now we do have the new bootrom code in the Flash EPROM. When you now
restart your client, the ROM loader calls the bank switching code to
read the compressed bootrom code off the second and all following banks,
and then finally calls the bootrom kernel.

Of course this doesn't have anything to do with the type of memory. It's
just that all the necessary code is already implemented within the Flash
EPROM programmer.

>> switching). All necessary functions are already there, so it's just a
>> matter of calling a couple of subroutines. However, I don't have the
>> necessary hardware to test it, so it never got into the distri- bution.
>> I do have a 3C509B, but unfortunately it lacks a ROM socket.
> So, you've got some source code that could be used for implementing it,
> which is not public (yet)?

Yes and no. I don't have any code specific for the 3C509B. I downloaded
the technical specs off the 3Com web site, and found that all models of
the 3C509B which do have a ROM socket, allow for using a Flash EPROM. Then
I turned to eBay and got a cheap card, but when it arrived it was a model
without a ROM socket... I didn't care anymore because I still had a
FlashCard available for the intended system.

However, writing the necessary code for the 3C509B shouldn't be difficult.
All it needs is to write some code which allows detection of the 3C509B
(the Crynwr packet driver sources are a great help here) and some code
which serves as the bank switching code (this usually requires to just
set one or two registers - not more than a couple of lines). All the other
necessary framework is already there, published in the latest netboot
release. Take a look into the 82595 flash EPROM programmer: it's fairly
easy to understand, and it took me only 3 or 4 days to write it. You can
find it in the netboot/makerom/flash subdirectory. Or you provide me with
a 3C509B, and I write the necessary Flash programmer including the bank
switching code.

Instead, changing makerom so that it can implement some bank switching
code without the Flash programmer would be a whole lot of work.


Gero Kuhlmann             Tollenbrink 18      Groote Gracht 33       30659 Hannover      26723 Emden                        04921/997561

This Mail was sent to netboot mailing list by:
"Gero Kuhlmann" <>
To get help about this list, send a mail with 'help' as the only string in
it's body to If you have problems with this list,
send a mail to

For requests or suggestions regarding this mailing list archive please write to