MAKEROM(8)

πŸ“¦ version 0.10.2, in nixos 26.05, nixpkgs unstable

πŸŽ€ makerom(8) β€” Make bootrom image πŸŽ€

Okay so this is the makerom(8) page from the System Manager's Manual, and bestie, it's giving bootrom-building main character energy. πŸ’… No cap β€” makerom makes a netboot bootrom, either interactively or in batch mode, and we're gonna get into every single detail. Periodt.

🌸 NAME 🌸

makerom β€” Make bootrom image

✨ SYNOPSIS ✨

makerom [OPTIONS]

πŸ¦‹ DESCRIPTION πŸ¦‹

makerom generates a netboot bootrom either interactively or in batch mode. The whole glow-up pipeline is: first it concatenates the bootrom kernel file with the network driver interface and the network driver (like packet or NDIS driver), then it compresses the resulting image, and then it concatenates that with either the floppy or the rom loader stubs. That's the magic trick, and it ate. ✨

πŸ’– OPTIONS πŸ’–

  • -b, --batch-sys SYS β€” Lets makerom operate in batch mode. It will look up the given system name in a database and generate a bootrom according to the specifications given in the database entry. If this option is not given, makerom will operate in interactive mode, asking the user about all required parameters on the console. 🫢
  • -C, --config-file FILE β€” Specifies the pathname of the configuration file. If this option is not given, the value of the NETBOOT_CONFIG environment variable or a compiled-in default will be used.
  • -d, --drivers FILE β€” Specifies the pathname of the network driver information file. If this option is not given, the name will be taken from the main configuration file, or a compiled-in default will be used.
  • -D, --database FILE|DBSPEC β€” Pathname of database file (or database specification) to be used together with the -b or --batch-sys options. If this option is not given, the value of the NETBOOT_DATABASE environment variable or a compiled-in default will be used. See the netboot(5) man page for a further explanation of database specifications. πŸ‘‘
  • -F, --logfile β€” Name of log file to write debugging output to. The default is to print all verbose output to stdout. πŸ’¬
  • -h, --help β€” Print short usage information.
  • -H, --home-dir β€” Specifies the home directory. If this command line option is not given, either the homedir configuration file parameter or the current user's home directory will be used.
  • -m, --md5sums FILE β€” Specifies the path name of a file containing the MD5 checksums of the currently installed network drivers (MD5 checksum database file). 🧚
  • -N, --datadir DIR β€” Specifies the directory where makerom looks for the files required for generating a new bootrom. If this option is not given, the value of the NETBOOT_DATA environment variable or a compiled-in default will be used.
  • -L, --libdir DIR β€” This directory holds system-dependant data files for makerom. The default value is either given by the NETBOOT_LIB environment variable or it is a compiled-in default.
  • -v, --version β€” Print version information.
  • -x, --verbose β€” Increase verbosity level. πŸ”₯

🌸 INTERACTIVE MODE 🌸

When no -b or --batch-sys option has been specified on the command line, makerom will operate in interactive mode. It will ask for all the information necessary to build a bootrom for the target client. Of course it will only ask those questions which are really required for proper operation of the bootrom. Most questions have a list of allowed values given in round brackets. The default answer, which will be taken when you just press Enter, is printed in square brackets. Entering a question mark β€” ? β€” will print a short help text. πŸŽ€

πŸŽ€ CONFIGURATION FILE πŸŽ€

Besides the [general] section, makerom also uses the [makerom:general] section of the configuration file. It contains general definitions only required by makerom. It can contain the following parameters:

  • driverdb β€” Specification of the network driver information database. If missing, the default will be to read the text file //netboot.drivers. See netboot(5) about how to setup a database specification.
  • md5sums β€” Pathname of the MD5 checksum database file. This file should contain the MD5 checksums of all network drivers which are currently installed. The format of this file is the same as produced by the GNU md5sum(1) program. If the md5sums option is missing, the default will be //netdrvr/MD5SUMS. You can specify more than one file with this parameter. All file names have to be separated by a colon character. makerom will search all MD5 checksum files in sequence when checking for a specific network driver file. πŸ”
  • bindir β€” Specifies the directory where makerom can find the bootrom kernel, network driver interface and rom loader binary files. The default is //binaries.
  • netdrvdir β€” Specifies the directory where the network drivers can be found. All non-absolute network driver pathnames are relative to the value of this parameter. Its default value is //netdrvr.
  • utilsdir β€” This parameter specifies the directory where utility files (like the packet driver debugger) can be found. If this parameter is missing, the default //misc://utils will be used. πŸ› οΈ
  • kernel β€” Pathname of bootrom kernel file. The default is kernel.bin.
  • rom β€” Pathname of rom loader file. The default is rom.bin.
  • floppy β€” Pathname of floppy loader file. The default is floppy.bin.

If a file name specified in this section of the configuration file is not absolute, it will be treated as relative to the value of the binary directory parameter. For example, if the bindir parameter has the value //binaries, the main netboot directory is /usr/local/lib/netboot and the kernel parameter has the value kernel.bin, then the resulting file name which makerom will look up is /usr/local/lib/netboot/binaries/kernel.bin. 🫢

πŸ¦‹ SYSTEMS DATABASE πŸ¦‹

The makerom records in the systems database use [makerom:<system name>] for the tag names. They can contain the following parameters:

🌈 General bootrom parameters 🌈

makerom can generate several output files in one run, all for the same client but with different loaders. The following parameters are used for every output file:

  • kernel β€” Specifies the name of the kernel file to be used. If the name starts with two slashes these get replaced by the name of the general netboot directory. This parameter is required. ⭐
  • bustype β€” Specifies the bus type of the network card on which the resulting bootrom should run. The allowed values for this parameter are ISA, EISA, MCA and PCI. If this parameter is not given, ISA will be assumed.
  • pcivendor β€” Specifies the PCI vendor ID used by the network card. This value can be given as a decimal number or as a hexadecimal number if prefixed with 0x. For example, Intel has the vendor ID 0x8086 assigned. This number will also be used by other vendors if their network cards use an Intel chipset. The pcivendor parameter is required for PCI network cards.
  • pcidevice β€” Specifies the PCI device ID used by the network card. Like the PCI vendor ID this value can be given as a decimal or hexadecimal number. For example, the Intel EtherExpress Pro/10 PCI network card uses 0x1226 as its ID. This parameter is required for PCI network cards. πŸ’…
  • pnpdevid β€” Specifies the device ID for non-PCI network cards. This parameter is required for ISA-PnP, EISA and MCA cards. Its value has to have a total length of 7 characters, with the first 3 characters being upper letters and the last 4 characters being hexadecimal digits. For example, an Intel EtherExpress 16 ISA card has been assigned an ID of PNP812D. makerom is not able to check that this ID is correct, or even required or suitable for the bus type selected. ⚠️
  • krnflags β€” These flags modify the behaviour of the bootrom kernel. The value to this option is a string which consists of comma-separated flag names. If a flag name appears in the string, that corresponding flag is set. The following flags are defined:
    • nouid β€” Prevents the bootrom to send a client UID. This might be necessary if the booted operating system also does not send a client UID, or it sends a different UID causing the bootrom and the operating system to receive different IP addresses from the DHCP server. This option has no effect when a BOOTP server is in use instead of a DHCP server. πŸ™ˆ
    • opts β€” Lets the bootrom send an option request list with a DHCP request.
    • nobpext β€” Prevents the bootrom to load a BOOTP extension file via TFTP. This flag gets ignored with a DHCP server.
  • netdrvr β€” Specifies the pathname of the network driver interface file to be used. If this pathname starts with two slashes, these slashes get replaced by the name of the main netboot directory. Otherwise, if the pathname is not absolute, it is taken to be relative to the binaries directory as specified in the main configuration file. This parameter is required. 🧚
  • netdrvtype β€” Type of network driver interface that is supported by the interface file given with the netdrvr parameter. The allowed values are packet driver, ndis driver and undi driver. This parameter is required.
  • netdrvflags β€” This is an integer value which is passed as a flag word to the network driver interface. The meaning of the different flags depend on the type of the network driver interface. Currently, only flags for the packet driver interface are supported:
    • 0x0001 β€” Skip the hardware reset of the network card. This is needed for some buggy packet drivers which do not implement the hardware reset properly. πŸ”§
    • 0x0002 β€” Do not use receive mode 0 of the packet driver. This receive mode turns off the network card receiver. However, some buggy packet drivers turn off the receiver permanently, and even turn off the transmit unit permanently without the ability to turn them on again when needed. When using this flag, mode 0 will never be used and will be simulated in software instead of hardware.
    • 0x0004 β€” Override the IRQ found by the bootrom network driver interface code with the IRQ number given through the system PCI configuration. This is only necessary for some older PCI network cards for which the driver does not properly configure the interrupt setting. πŸ’œ

okay so the netdrvflags parameter has to be computed by adding the relevant values mentioned above πŸ’…. And listen β€” any other value for packet drivers, plus all values for any other network driver interface, is silently ignored. No warning, no drama, just vibes and a shrug πŸ™ˆ.


πŸŽ€ Bootrom loader parameters

With these parameters you can specify up to three different output files for the same bootrom. Like, imagine you want output files with different hex encoding, or one output file for burning into a flash EPROM (that's the rom loader) and another for writing onto a floppy (that's the floppy loader). Same bootrom, different fits. Iconic, honestly ✨.

  • loaderX β€” specifies the file names of all bootrom loaders. makerom will create a bootrom image file for each rom loader specified 🫢. The X in the variable name can be a number from 1 to 3. For each loaderX variable there has to be a corresponding outnameX variable as well. Normal substitution for the main netboot directory will occur.
  • outnameX β€” specifies the names of the bootrom image files created with the rom loaders πŸ’–. For each loaderX parameter there has to be a corresponding outnameX parameter. They're a package deal, bestie.
  • outsizeX β€” this specifies the size of the output file outnameX in kB. Using this parameter, it's possible to write a smaller bootrom into a much larger EPROM β€” for example, to fill one EPROM with more than one option rom image πŸ‘‘. If this parameter is missing, the size of a rom output file will be determined so that it will fit into the smallest possible EPROM. It will be ignored for the floppy bootrom loader.
  • outtypeX β€” this is an enumeration parameter which specifies the format of the output file generated for each bootrom image given in outnameX 🌈. The following values are recognized:
    • binary β€” raw binary for programming an EPROM
    • intel hex β€” bootrom image will be converted to Intel hex format for use with EPROM programmers which require this format
    • motorola hex β€” bootrom image will be converted to Motorola EXORmacs hex format for use with EPROM programmers which require this format
    • tektronix hex β€” bootrom image will be converted to Tektronix hex format for use with EPROM programmers which require this format
    • bios β€” raw binary for inclusion into a system BIOS. Heads up though: the netboot package currently doesn't provide any tools for actually including the resulting output file into the BIOS πŸ™ˆ. You have to use tools provided by the manufacturer of your BIOS and/or system board (for example amibcp.exe for an AMI BIOS, or the open source program awardmod for different Award BIOS versions).
    • flash β€” the bootrom image will be prepended by a special boot loader which allows it to be booted using a bootrom πŸ”₯. It will then program a FlashCard or a Flash EPROM on the network card with the new bootrom image. This method can be used to easily update the bootrom in a diskless client without unmounting the cover β€” main character energy, fr fr. It doesn't make sense to use this output type with the floppy boot loader. Therefore, the loaderX parameter has to specify a rom loader when using the flash output file type. makerom will not check for this condition β€” so that's on you, bestie 😭.
  • ldoptsX β€” specify options for loaderX. By default, all options are false unless explicitly specified with this parameter. All option names are separated by a comma and have to be given in all lower case. Their order within the parameter argument string doesn't matter πŸ’…. The following options are available:
    • useint18 β€” if this option is given, the bootrom will use interrupt 18h for startup, which is the BASIC startup vector on old PC's. This interrupt gets called by the BIOS when it can't find a bootable floppy or hard disk partition πŸŽ€. If this option is not given, the bootrom will use interrupt 19h instead, which is the PC bootstrap interrupt. In this case, the system will not seek any hard disks in the system for a bootable partition (but will still check the first floppy drive), and immediately start the netboot process. Choices were made, and honestly? Valid ✨.
    • nobbs β€” with this option it's possible to disable support for the BIOS Boot Specification (BBS) in the bootrom. Using BBS, the BIOS is able to determine the order of devices on which to search for an operating system 🌸. If the BIOS does not support BBS, the bootrom will automatically disable BBS support. However, some BIOS do implement BBS support incorrectly, and the bootrom is not able to determine such a situation πŸ’€. In those cases this option can be used. Only select it if the bootrom does not start up on reset. The default is to enable BBS support.
    • bootask β€” if this option is given, the bootrom will ask the user if it should continue with the network boot process or not upon startup πŸ™‹β€β™€οΈ. Consent, but make it firmware.
    • asktime β€” this option should be followed by an equal sign and a number between 0 and 31. It specifies the time the bootrom will wait for a user to press a key when the bootask option (see above) is specified ⏳. A value of 0 means to wait forever. It is the default. If the bootask option is not given, the asktime option has no effect.
    • devnum β€” with this option it's possible to specify a certain network card if more than one card of the same type is installed in the client system πŸ¦‹. The card numbers range from 1 to 7. If the value of this option is zero, the bootrom will instead use that network card on which it is installed.

🧚 Packet driver parameters

These parameters are only used with the packet driver interface.

  • pktdrvidx β€” specifies the index number of the packet driver in the list of programs to load (see below).
  • progX β€” specifies the file names of programs to be loaded by the bootrom, including the packet driver πŸ’œ. The X in the parameter name can be a number from 0 to 7. For each progX parameter there has to be a corresponding argsX parameter as well. If the file name is not absolute it will be treated as relative to the utilities directory β€” except for the packet driver itself (identified by the pktdrvidx parameter), which is relative to the network driver directory πŸ‘€.
  • argsX β€” command line arguments for program progX.
  • minsizeX β€” specifies the run-time size of program progX in bytes.
  • maxsizeX β€” specifies the load size of program progX in bytes.

πŸ’œ NDIS driver parameters

These parameters are only used with the NDIS driver interface.

  • protini β€” specifies the pathname of a protocol.ini file, which will be parsed by makerom πŸ“. The bootrom will later use the parsed protocol.ini file to simulate a protocol manager to the NDIS driver. The protocol.ini file has to have at least the entry for the NDIS driver used by the bootrom. This entry has to have at least a drivername specification, which has to be set according to what the NDIS driver expects. Typical protocol.ini files for your NDIS driver can usually be found at the same place where you got your driver binary πŸ‘‘. For a further explanation of the format of the protocol.ini file, see the netboot documentation.
  • ndisdrvidx β€” specifies the index number of the NDIS driver in the list of programs to load (see below).
  • progX, argsX, minsizeX, maxsizeX β€” these four parameters have the same meaning for the NDIS driver interface as for the packet driver interface mentioned above πŸ’–. However, an NDIS driver is usually unable to accept a command line, so you should leave the corresponding argsX option empty.

🌸 UNDI driver parameters

These parameters are only used with the UNDI driver interface.

  • undiprog β€” specifies the file name of the UNDI driver binary. If it's not absolute it will be treated as relative to the directory specified by the netdrvr parameter in the main configuration file ✨.

🌈 minsize and maxsize parameters

All DOS file specifications (those used with the packet and NDIS driver interfaces) use minsize and maxsize parameters. With these parameters it's possible to optimize the memory usage of the bootrom β€” especially when programs get loaded in addition to the network driver binary πŸ”₯. All these parameters are optional, and if any of them is missing, makerom tries to find a suitable default value (which can sometimes be wrong 😭). No cap.

  • minsize β€” this parameter specifies the run-time size of the program or network driver in bytes. If a program terminates normally, its minsize value is zero. Only if the program or driver stays resident in memory should the minsize value be larger than zero πŸ’…. You can determine it by running the program under plain DOS, and then inspect the memory usage using the mem /c command. Add 1024 bytes for the PSP and for a safety margin to the number of bytes printed by the mem command 🫢.
  • maxsize β€” okay so this is literally the number of bytes you're allocating so the program or driver can load. For EXE type programs you usually don't need to set this yourself, because makerom can read their memory needs straight out of the file header. COM type programs are a lil messier though. Usually it's enough to take the size of the program or driver binary file and add, say, 4096 bytes for PSP and stack to get the maxsize value. The real amount of memory required might differ because stacks have needs, but 4096 is probably a good stack-size assumption. If you don't give this parameter, makerom assumes a stacksize requirement of 1024 bytes by default. If that's too small β€” like your program or network driver crashes when the bootrom starts it β€” you have to use a larger maxsize parameter. Especially if the COM type program has been compressed (for example with PKLITE, a popular executable compressor), this assumption might be wrong and you'll need a larger maxsize value. πŸ’…

Since minsize gives the runtime size of a network driver, its value should only be smaller than maxsize if the driver really shrinks after it gets loaded. Sometimes a network driver actually increases in size because it has to allocate some internal buffer memory. In that case, minsize should have the same value as maxsize, and both should be large enough to hold the memory requirements of the network driver. Since makerom is unable to detect this condition, you should NOT let it assume default values here β€” specify the sizes correctly. 🫢

If makerom can't automatically detect your network driver (for example because you're running it in batch mode, or the driver isn't mentioned in the network driver information database), you should run your packet driver under plain DOS first to find out its memory requirements and necessary command line options. If your network driver doesn't load under plain DOS, it will most likely not load in a bootrom either. 😭

🌐 NETWORK DRIVER INFORMATION DATABASE 🌐

The Driver Information Database contains definitions for all network driver interface files. It also contains definitions for a large number of different pre-known network drivers. However, it will only be used in interactive mode. When using makerom in batch mode, you have to specify all necessary parameters within the systems database using the record format mentioned above. ✨

Also note that not all network drivers named in the database files distributed with netboot are included in this package due to copyright reasons. In fact, most of the drivers mentioned in the database are manufacturer-provided network drivers, which can usually be found on the driver disks shipped with a network card, or on the manufacturer FTP or HTML server. For a listing of some network card manufacturers, see the netboot home page on http://netboot.sourceforge.net. It also contains direct links to some pages where you can find the latest drivers. πŸ¦‹

🧚 Network driver interface file definitions

For each network card, the netboot bootrom doesn't only require a network driver β€” it also requires an interface file for that driver. Currently, files are provided for the following interfaces: packet driver, NDIS driver and UNDI driver. For each interface a separate section has to be specified in the database. The sections are named [netdrv:<interface>] with the interface name being one of pktdrv, ndis or undi. Note that like with all other configuration files, these names have to be given in all lower case. Each section can have the following parameters:

  • description β€” specifies a description string for the interface. This string will be printed in interactive mode when more than one interface is available for a certain network card.
  • filename β€” specifies the name of the binary file for the interface. If this file name is not absolute, it will be assumed to be relative to the binary directory as specified in the main configuration file.
  • directory β€” specifies the directory or colon-separated directories where network drivers can be found for the interface.
  • pattern β€” when printing a listing of the directories specified with the directory parameter, only files that match the given patterns will be printed. All patterns in the value of this parameter have to be separated by colons. These patterns are like the simple command line patterns used by the shell, instead of regular expressions. A star character serves as a wildcard. 🌟

πŸ’³ Network card descriptions

A network card description contains parameters that describe the hardware and are common for all drivers for a certain NIC. The section names are constructed as [card:<nicname>] where <nicname> specifies a unique name for a network card. If more than one section with the same NIC name appears in the database, the information used is the one that comes last. A network card section can contain the following parameters:

  • description β€” specifies a descriptive text for the network card. It will be printed in interactive mode in the listing of supported network cards.
  • bustype β€” specifies the host bus type of the network card. If a card gets manufactured with different bus types, a separate section with a distinct <nicname> has to be written for each type. This parameter can have one of the following values: ISA, EISA, MCA and PCI.
  • pcivendor β€” if this NIC is a PCI card, this parameter specifies the PCI vendor ID. It has to be a numerical value, and can be given in hex if prefixed by "0x".
  • pcidevice β€” specifies the PCI device ID. This parameter also has to be numerical.
  • pnpdevid β€” specifies the PNP device ID, which is a string of 7 characters. The first 3 characters have to be upper case letters, and the last 4 characters have to be hexadecimal digits. This parameter is required if the NIC is a ISA/PnP, EISA or MCA card. However, makerom is not able to check if this parameter really is required or suitable for the card or bus type selected. πŸ’€
  • usedriver β€” if no network driver has been specified for this NIC, then it is possible to use the network driver descriptions of a different NIC using this parameter. It specifies the <nicname> of that network card whose driver descriptions should be used.

πŸš— Network driver descriptions

Following a network card description, there can be one or more network driver description sections. Each such section has to have a name of [driver:<nicname>] with <nicname> being the same name as the one for the card description it belongs to. It is allowed to specify more than one driver description for a certain NIC. Each driver description section can have the following parameters:

  • driverdesc β€” specifies a descriptive string for the driver. This string will be printed in interactive mode if more than one driver for a selected network card has been found.
  • drvtype β€” specifies the interface type supported for this driver. This enumeration parameter can have one of the following values: packet driver, ndis driver and undi driver. makerom will select the proper interface binary file according to this parameter.
  • file β€” file name of the network driver binary. If this file name is not absolute, it will be looked up by using the search directory path specified in the interface description relevant for this network driver.
  • params β€” specifies the hardware parameters which makerom should ask the user about in interactive mode. This parameter is required when wildcards are used with cmdline and protini as described below. All parameter values have to be separated by commas. The following values are known:
    • HW_IRQ β€” hardware IRQ number
    • IO_ADDR β€” I/O port address
    • BASE_MEM β€” base memory segment for shared RAM
    • AUI_TYPE β€” type of network connector to be used
    • DMA_NUM β€” DMA channel number

Note that in contrast to all other enumeration values used with the netboot configuration files, these parameter values are all upper case. πŸ‘‘

  • cmdline β€” for packet drivers, a command line is required. This parameter specifies the string to be used for it. This string can contain wildcards for certain values:
    • %S, %s β€” gets replaced by the default software packet driver interrupt number. This number is fixed and can't be changed.
    • %H, %h β€” gets replaced by the hardware interrupt number as entered by the user. makerom will only ask for a hardware interrupt number if the HW_IRQ option has been given with the params parameter.
    • %A, %a β€” gets replaced by the I/O port address as entered by the user. makerom will only ask for a I/O port address if the IO_ADDR option has been given with the params parameter.
    • %M, %m β€” gets replaced by the base memory segment as entered by the user. makerom will only ask for a base memory segment if the BASE_MEM option has been given with the params parameter.
    • %D, %d β€” gets replaced by the DMA channel number as entered by the user. makerom will only ask for a DMA channel number if the DMA_NUM option has been given with the params parameter.
    • %t β€” gets replaced by the AUI type number as entered by the user. makerom will only ask for a AUI type number if the AUI_TYPE option has been given with the params parameter.

Upper case wildcards get replaced by a hexadecimal number, while lower case wildcards get replaced by a decimal number. All wildcards used within the command line string (except the %S and %s wildcards which are fixed) have to be specified with the params parameter as described above. Otherwise, their value will not be asked for in interactive mode, and the resulting command line will get unpredictable substitutions. 😭πŸ”₯

bestie, fr fr: if you skip the params setup for a wildcard, makerom is not gonna magically know what to put there β€” and unpredictable substitutions are exactly the kind of chaos we do not want in a bootrom. πŸ’…
  • protini β€” so NDIS drivers need a protocol manager, right? And that manager reads a protocol.ini file. The netboot bootrom simulates this whole mechanism, but it still needs the protocol.ini contents that matter to the NDIS driver. This parameter can point at an actual file name, and then makerom reads that file as a protocol.ini file. It literally does not have to be named protocol.ini β€” any name you like is fine. Alternatively, protini can contain a string value that gets treated as the contents of a protocol.ini file relevant for the NDIS driver. Since that kind of file contents usually needs newlines, the string should best be wrapped in double quotes. Then it can spread across multiple lines, and all newlines between the double quotes get copied into the string verbatim. A protocol.ini file contents β€” whether given as a string or by reading an actual protocol.ini file β€” can use the same wildcards as a packet driver command line. See above for more wildcard explanation, bestie ✨
  • md5sum β€” specifies the MD5 checksum of the network driver binary. With this parameter you can specify different driver information records for different versions of a network driver. If the md5sum parameter is missing in a network driver record, makerom will use that record whenever it is unable to find the network driver file name in the MD5 checksum database file specified in the configuration file or on the command line with the -m command line option. But if an MD5 checksum has been specified for a network driver record with the md5sum parameter, that record will only be used when the file name has been found in the MD5 database file, and the checksum values in the MD5 database file and the checksum given with the md5sum parameter are exactly the same. no cap on the exactness πŸ’…
  • minsize β€” specifies the runtime size of the network driver in bytes. See above for a further explanation of the minsize parameter.
  • maxsize β€” specifies the required number of bytes to load the driver into memory. See above for a further explanation of the maxsize parameter.
  • noreset β€” this is a boolean parameter which specifies if the packet driver interface is allowed to use the NIC hardware reset feature. The default if this parameter is missing is false. This parameter is only necessary for very few packet drivers for which it is known that the hardware reset feature doesn't work correctly.
  • nomode0 β€” some buggy packet drivers do not correctly implement receive mode 0 to turn off the network card receiver, so using this boolean parameter allows to never use receive mode 0 when set to a value of true. Instead this receive mode is simulated in software. iconic workaround behavior tbh 🫢

πŸ—œοΈ COMPRESSED NETWORK DRIVERS πŸ—œοΈ

Some network drivers β€” especially packet drivers β€” have been compressed by the manufacturer. They will decompress themselves when started, and that decompression requires a lot of memory 😭 For EXE type programs, the memory requirement should be encoded into the EXE file header. However, for COM programs there is no such header. makerom tries to identify compressed programs. Currently, it only knows about the PKLITE compressor. All other runtime compressors (like LZEXE or TINYPROG for example) convert COM type programs into EXE files, which have the above mentioned header.

When makerom finds a compressed program it tries to find out how much memory will be required. Unfortunately, at least all PKLITE versions I found have a bug in the compressor which results in an incorrect specification about how much memory is required for the decompression. makerom can only rudimentarily check for this condition, and will print a warning in this case. It will then use a hopefully safe default. Even when makerom does not print this warning, the bootrom might fail on the compressed executable. Therefore, whenever you experience problems running the network driver either in its startup phase or during bootrom operation, you should check if it has been compressed, and decompress it manually if possible. Programs to do so can be found on many DOS software FTP sites, like ftp.simtel.net.

It doesn't make sense to use compressed executables anyway, since the final bootrom gets compressed by makerom also. like… why double-compress the vibe? πŸ’€

πŸ“„ PROTOCOL.INI FILES πŸ“„

NDIS drivers require a so called protocol manager which gets simulated by the NDIS interface binary. However, this simulator needs a protocol.ini file like a real protocol manager. makerom parses this protocol.ini file and converts it into a format suitable for the bootrom. The contents of this protocol.ini file has to follow the same rules as layed out in the NDIS specification, published by Microsoft and 3Com.

In general, a protocol.ini file is divided into sections like all netboot configuration files. Each section has to start with a name enclosed in square brackets. Usually, the protocol.ini file used for a bootrom only requires one section for the network driver. All other sections usually found in a DOS protocol.ini file are not required and just increase the size of the bootrom. Especially, it's not necessary to specify a section for the protocol manager. makerom is presently unable to remove those unused sections, so you should not specify them in the first place.

Comments in a protocol.ini file are preceded by a semicolon, and will be removed by makerom internally, so that they don't take up any space in the final bootrom.

Like all netboot configuration files, each section of a protocol.ini file contains several parameters, with each parameter on a seperate line. However, in contrast to the netboot configuration files a protocol.ini file is parsed case-independently. All text in the file gets converted to upper case. A NDIS driver section has to contain at least the drivername parameter, followed by an equal sign and the driver name required by the NDIS driver. This name has to be exactly the one expected by the driver. You can usually find it in the documentation of the network driver. It commonly ends with a dollar sign. Other parameters might be necessary depending on the driver. Common parameters include: iobase, ramaddress and irq. It is also usually possible to define many other parameters for a network driver, like specifying the number of transmit or receive buffers etc.

Please note that when changing these numbers from within a protocol.ini file, the memory requirement of a NDIS driver might change and might require different minsize/maxsize values. For a further description of any additional NDIS driver protocol.ini parameters refer to the documentation which comes with your driver.

πŸ“ FILES πŸ“

For all files mentioned below the physical path might differ according to the configuration of makerom. See the netboot(5) man page for a further explanation of these files.

  • /usr/local/etc/netboot.config β€” Main netboot configuration file.
  • //netboot.drivers β€” Network driver information file, which contains information about various network driver interfaces and network driver binaries.
  • //netdrvr/MD5SUMS β€” Network driver MD5 checksum database.
  • //netboot.db β€” Default database file for specifying system configurations.
  • //binaries/kernel.bin β€” Standard bootrom kernel
  • //binaries/floppy.bin β€” Floppy bootrom loader
  • //binaries/rom.bin β€” Bootrom loader
  • //binaries/netpkt.bin β€” Packet driver interface file
  • //binaries/netndis.bin β€” NDIS driver interface file
  • //binaries/netundi.bin β€” UNDI driver interface file
  • //utils/pktwatch.com β€” Packet driver debugger
  • //netdrvr/pktdrvr/* β€” Packet driver executables
  • //netdrvr/ndis/* β€” NDIS driver executables
  • //netdrvr/undi/* β€” UNDI driver executables

🌈 ENVIRONMENT VARIABLES 🌈

See the netboot(5) man page for a description of all environment variables used by makerom.

πŸ’€ BUGS πŸ’€

None known yet.

πŸ‘€ SEE ALSO πŸ‘€

netboot(5), netboot.config(5), netboot.drivers(5)

πŸ‘‘ AUTHOR πŸ‘‘

makerom was written by Gero Kuhlmann <gero@gkminix.han.de>.


Signing off from the MAKEROM(8) source/version corner, dated 15 Dec 2004 β€” this iconic little manual page ate and left no crumbs, bestie πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from