From: Eric A. <e....@jp...> - 2010-11-14 14:32:13
|
Hi! >> I read through the boot code and didn't see and specifics written >> about where the system bios is stored in memory. > > The boot code uses the software interrupts associated with the BIOS to > call BIOS functions. For example, interrupt 16h (BIOS keyboard functions) > and interrupt 13h (BIOS disk access functions). This is why the BIOS's > location is only implicit in the boot code. True. You can read lots of details about all this in RBIL, Ralf Brown's Interrupt List, in HTML or download it as ZIP. >> I'd like to backup a copy >> of the bios and have a look-see through the file. Does anyone have any >> recommended algorithms for such an exploration? While DOS only cares about the 64kB of code at 0xf000:0 which you can easily read, even with DEBUG, a current BIOS contains much more code and data. You would need a special tool to backup and restore it, but often such a tool is already available even for DOS from your BIOS or mainboard vendor. There is also the BIOS of the graphics card, which is often between 32kB and 64kB at 0xc000:0 but that again can be only the tip of the iceberg for a modern graphics card. The remaining BIOS contents are usually near the end of your first 4 GB address space or might even use some paging mechanism where only a part is visible at a time, e.g. during versus after booting, although I think it is more common to have all of the BIOS visible but way after the first 1 MB... The BIOS also has functions to query the memory map: int 0x15 with AX set to 0xe820 is a typical example, but there are a number of others such as AX = 0xe801. Also, the contents of your ACPI tables tell more. For example, here is a Linux cat /proc/iomem excerpt from my own PC: 000c0000-000cebff : Video ROM 000f0000-000fffff : System ROM 3ffd0000-3ffddfff : ACPI Tables 3ffde000-3fffffff : ACPI Non-volatile Storage With lspci -v -v you also see that there is more graphics ROM: 02:00.0 VGA compatible controller: nVidia Corporation... ... [virtual] Expansion ROM at febe0000 [disabled] [size=128K] Disabled means that the VGA BIOS is not visible / active in Linux. You also get to see lots of I/O memory mapped areas listed in lshw but I must say that I know no trivial way to list the system BIOS location in Linux. Maybe RayeR of FreeDOS RomOS knows? For example his page about an AMI BIOS says that during boot, pieces of BIOS are visible at 0xe000:0 and even at lower locations which are used as text or graphics buffer or are in normal DOS memory after boot: http://rayer.ic.cz/romos/romose.htm#TECHDET So if you have a BIOS like that, you cannot backup it from DOS, at least not easily. You would have to block all UMB space and even unmap the graphics RAM first. Then you would have to do some very hardware / chipset specific steps to make the remaning bits of the BIOS visible there before you could backup them. And then still no way to restore, of course. In short: It is better to use dedicated BIOS backup / restore tools as provided by the BIOS or mainboard vendor. Even RayeR does it :-) With a good debugger - such as 386SWAT - you can see that parts of the BIOS are visible after the first 1 MB (at least in my case). A left-over from booting, maybe because BIOSes are often compressed on their chip and are decompressed into a buffer when necessary... Of course using EMM386 or similar would overwrite them if they are just left over from booting. Only if they are permanently active, e.g. at the end of the 4 GB address space, the BIOS marks the area as reserved and drivers such as EMM386 will leave it untouched :-) Regards, Eric |