I'm not sure how that's done. This is entirely speculative.
In either case, it seems you need access to 16-bit RM or
16-bit PM, such as with a DOS .com or a via a custom
bootloader at 0:7C00h from floppy, CDROM, or USB, or 16-bit
PM via DPMI host in DOS or 16-bit PM Windows code (perhaps
"Standard Mode" on earlier versions, like version 3.0).
1) first method
far call PnP function 42h read ESCD
far call PnP function 43h write ESCD
It's possible that reading and then writing will do the
trick, i.e., update the ESCD upon next boot, but I simply
don't know if it will and I can't confirm. It might.
It might not.
There seem to be two documents by Phoenix, Compaq,
and Intel that define how to call those functions:
"Plug and Play BIOS Specification"
http://download.intel.com/support/motherboards/desktop/sb/pnpbiosspecificationv10a.pdf
"Extended System Configuration Data Specification"
http://www.singlix.com/trdos/escd.pdf
These say you need to search the BIOS on 16-byte boundaries
to find ASCII "$PnP" - without quotes - which indicates the
*possible* start of a data structure. Of course, if there
is no "$PnP" in the BIOS, it's definately not a PNP capable
machine. After finding the "$PnP" signature, you then perform
a checksum on the data structure. If the checksum is valid,
you can use the data in the structure. The structure contains
a 16-bit RM code segment and offset and 16-bit PM code base
address and offset for the far call above. As well as code
segments and offsets, the structure also has data offsets
needed for the supported modes. You must construct a
selector for 16-bit PM. I'm not sure what to do if
the checksum is invalid.
2) second method
Also, RBIL (Ralf Brown Interrupt List) lists these calls as
available on Int 1Ah for Intel BIOS/motherboards:
Int 1Ah,AX=B400h Installation check
Int 1Ah,AX=B401h Get default config table
Int 1Ah,AX=B402h Copy and verify config table (? optional)
Int 1Ah,AX=B403h Store ESCD table in NVRAM
RBIL Int 1Ah,Ah=B4h functions via DJGPP's website
http://www.delorie.com/djgpp/doc/rbinter/ix/1A/B4.html
Those functions are documented in Intel's document:
"Plug and Play BIOS Extensions Design Guide"
This document was part of a software package called:
"Plug and Play BIOS Enhancement Kit"
That package is _only_ available to OEMs and BIOS vendors ...
There is no information in RBIL if these functions became
standard in other BIOSes.
If attempting to use the BIOS functions, only call the
next call, if the prior call succeeds, i.e., carry flag
clear or AX set to zero. You might want to set the carry
prior to each call as an additional safety measure.
Note that RBIL says B403h and B402h need DS:SI to point
to the configuration table. However, RBIL says B401h
returns the address of the configuration table in EDI.
I'm not sure what format EDI is and there doesn't seem
to be any information on how EDI is converted to DS:SI.
B402h is called "copy and verify". I'm not sure what
the "verify" does, but it might be worth calling B402h
after B401h, if "verify" does something useful.
Unfortunately, since I don't have that document and they
aren't part of any other BIOS, PNP, or PCI standards and
protocols, I'm unable to clarify:
a) whether EDI can be broken into DS and SI
b) whether RBIL's information on B401h returning EDI is
correct, e.g., instead of DS:SI
c) if "verify" of B402h does anything useful
d) correct parameters and functionality of these calls
3) you tried those and something is wrong with your ESCD ...
I'm not sure what will happen if bad ESCD data is written
to NVRAM. About the only thing you can reset at that point
are the BIOS settings, but they should probably only be
reset after you've reset the motherboard's CMOS.
So, I'd be prepared to power down, unplug the machine, wait
fifteen seconds to allow the power supply's capacitors to
completely drain their stored power. A good way to verify
that is to turn numlock LED on (visible) prior to powerdown
and unplug the power cord. Once you're sure that the only
power source to the motherboard is the CMOS battery, unplug
the the CMOS jumper. This will usually be a 3-pin header
with the jumper connected to two pins. Connect the
unconnected pin and the nearest pin, usually the middle pin,
for a few seconds with the jumper. E.g., if 2 and 3 are
connected, connect 1 and 2. The short will reset the
motherboard CMOS BIOS settings. This header should be
marked, but may be difficult to see. It's usually near
the edge of the motherboard, nearest to the CMOS battery.
The CMOS battery looks like a disc, watch battery. Check
the diagram in the motherboard manual to be sure. After
the CMOS has been cleared, reset the jumper, power up,
boot again, enter your BIOS, set the BIOS settings again,
save, boot again.
Good luck,
Rod Pemberton