• Please review our updated Terms and Rules here

How to force reset of configuration data (ESCD) when there is not a BIOS option

feipoa

Experienced Member
Joined
Mar 7, 2011
Messages
71
Location
Canada
I have a PCI-based 486 motherboard with a BIOS based on AWARD 4.51PG. I would like to force a reset of the configuration data (ESCD) at POST every time I boot. The BIOS does not have an option to reset the configuration data. The only means I know how to do this is to physically swap the order of my PCI cards each time I want to boot. Does anyone know a hack which I can do to achieve this? Not even the RTC reset jumper clears the PCI configuration data.
 
Last edited:
For troubleshooting purposes, and if necessary, an all-else-fails solution.
 
It may vary from motherboard+BIOS vendor, but with Phoenix BIOS, the ESCD data was stored in the 2nd (extended) bank of CMOS, accessible through IO ports 0x72/0x73.
The RTC clear jumper might only be clearing the primary bank of storage. If the ESCD data is stored there, you could probably clear it by simply writing a stray byte into it which would corrupt the checksum.
 
Invoking RCLR' and RESET' on the RTC module does not clear the configuration data; it only clears the CMOS settings that the user inputs and the date. Intereting to note that the Dallas DS12887 module lacks the pin to clear the RTC, you need the DS12887A version for this function. If I remove the voltage programming jumper for the EEPROM BIOS, it prevents the ESCD from getting written. So presumably I could freshly flash my BIOS to the EEPROM and leave the program jumper off, but that is still not what I am after.

Could you instruct me on how I would go about clearing the bootblock(s) via writing to 0x72/0x73? Alternately, is there a DOS program which will clear out the bootblocks?
 
You can use this tool that I wrote:
http://www.waste.org/~winkles/SNOOP.zip
to poke around in a lot of HW devices on your 486 machine. It's a DOS program that works best from real mode.
It has the ability to display and edit both CMOS banks. Editing either should wreck the checksum, thus forcing the data to be recalculated, likely with a nasty message from the BIOS.

It sounds like you've determined that the ESCD data is stored in your motherboards EEPROM instead- this tool will not help with that, and discovering how your eeprom is written to is going to be a bigger task- your write protect jumper might be the best way after all.
 
Yes, configuration data is being written directly to the EEPROM. Many socket 7 motherboards have the option to "reset configuration data". They have AWARD 4.51PG. Does anyone know how to integrate that part of the code into my 486's AWARD 4.51PG BIOS?
 
awdbedit and modbin both work with my BIOS, however there does not exisit an option in either of these programs, hidden or otherwise, which show ESCD support.
 
We're quickly running out of options that I can think of....

Are there ISA slots on this board? I am thinking about a PnP ISA cards that had their own upgrade utility to allow you to change IO and IRQ settings, etc. I would think that using that utility to change the sound card might cause the ESCD data to require to be updated on the next reboot.

Otherwise, you may need to start writing some custom software to do the work. You'll need to download the datasheet for the eeprom you have and see what it takes to erase a sector/block on it. Depending on the eeprom type, that might be a huge pain in the cheeks and you may be thwarted by the motherboard's control over certain voltages that have to be present to erase. (Vpp)

If you have access to a flash bios upgrade tool for your motherboard, there may be some disassembly work and some routines to leverage in there.
 
Actually, uniflash allows for erasing/programming the bootblock (where ESCD resides) and the CMOS block. I can probably locate the Uniflash source code and extract/modify the code such that I have a command line program which just erases the bootblock(s). This sounds like a stressful endevour though. I'm not quite up to that just yet. Does anyone know of a DOS program which will erase just the bootblock?
 
Hmmm. "bootblock" to me means an area in the EEPROM that has a very small crisis recovery routine in it that allows a customer to undo a BIOS upgrade gone wrong. This is most certainly not where Phoenix BIOS stored ESCD data, at least not on any machine I worked on. The bootblock was written once and verified good and then the BIOS never touched it again. We likely even turned on software erase protection steps on that chunk of flash. That said, there may be multiple blocks (or sectors) in the flash device, one of which is used for ESCD.

Do you have a link to the eeprom datasheet?
 
I have several 1-MBit EEPROM chips, all of which function the same, as far as I can tell, with the exception of 12 V or 5 V for programming. The Intel P28F001, for example, mentions:
-One 8 KB Boot Block w/Lock Out
-Two 4 KB Parameter Blocks
-One 112 KB Main Block

I beleive the ESCD is in either the 8 KB or the 4 KB block.
 
I would think that one of the 4k blocks is where the ESCD data resides.

I have to clear out a few more cobwebs to remember the specifics, but I believe the eeprom is mapped at the top of memory (at 4Gb) and then mirrored at ffff:0000 for BIOS services. The mirrored address at ffff:0000 is likely read-only, so you will have to perform eeprom operations in high memory. Using the above linked snoop tool, you should be able to browse memory both in seg:eek:ff mode as well as 32bit flat memory, provided you've booted clean (no memory managers in config.sys). What I would do is look at address ffff:0 in snoop and make note of what the first few bytes are. Then go into 32bit mode and look at/around address fffffff0 (press ctrl-j to jump to a specific address, or scroll from address 0 to wrap back to the top of memory) and see if the same data pattern is there. If it is, you've found a direct map to the eeprom. You can use standard up/down/pgup/pgdown controls in snoop to browse the memory viewer. From there, providing you have the correct power state for Vpp, you should be able to write specific 1-byte commands to the eeprom and get responses from it. I would poke around using snoop to write the device ID command to the eeprom to make sure you've found the communication mechanism before trying to erase anything!
 
Thank you for your suggestions. I will look into your procedure if I fail in the following.

It seems that AWDFLASH has the ability to:

/CC = clear cmos data after programming

/CD = clear dmi data after programming

/CP = clear PnP (ESCD) data after programming

/E = return to DOS when programming is done

/LD = destroy cmos checksum and no system halt for first reboot after programming

/SB = skip bootblock programming

/PN = no flash programming

/WB = flashes the BIOS Boot Block

/R= reset system after programming

I can use this in command-line. I have already modified my BIOS image with modbin to set all the desired default values so that I do not need to enter CMOS and reset them. If this procedure works, I can run this at boot and use /R to reset after programming. I have an external programmer and extra EEPROM chips, so I am not too worried about injuring one EEPROM chip.
 
Back
Top