Microsoft

Correct an ACPI error in Event Viewer on Windows XP machines

Windows XP is a bit quirky when there's a difference between the ACPI BIOS and operating system ACPI. We'll describe the cause of the problem and several methods you can use to correct it.


So your company just spent a bunch of money on new systems running Windows XP, yet when your users boot up, they receive this message:
ERROR AMLI: ACPI BIOS is attempting to write to an illegal IO port address (0x70), which lies in the 0x70-0x71 protected address range. This machine has suffered a fatal error and needs to be shutdown as quickly as possible.

They may also receive a variation of this error in the event log, referring to ports other than 0x70-0x71. What does it mean?

The variances between ACPI in the BIOS and in the operating system can cause different outcomes in different systems when simultaneous I/O read/write operations are attempted. These outcomes are usually determined by whether the system’s ACPI BIOS (AML) is compatible with XP or not. In this Daily Feature, I’ll examine this and other errors related to ACPI, the Advanced Configuration and Power Interface. I'll provide some technical background on the problem, and then I'll look at a few remedies.

What is ACPI?
The Advanced Configuration and Power Interface (ACPI) is a part of the BIOS and the operating system. The presence of ACPI in the BIOS on a given system determines whether operating systems of the Windows 2000/XP generation can make full use of features such as Power Management and Plug and Play (PnP).

The Power Management applet, accessed in the Control Panel, lets you control power usage and power savings. For example, you can configure a system to go into hibernation (sleep mode) after a preset time period, or to restore power at the touch of a button.

ACPI has its uses on all systems, but it's particularly beneficial on laptops, where power management can be crucial. ACPI also interacts with PnP and can help PnP routines successfully load drivers for PnP devices.

An error such as the one above involves interaction between the BIOS and the operating system via the Hardware Abstraction Layer (HAL) driver. To fully understand what's going on, let’s take a deeper look at how ACPI in the BIOS (ACPI BIOS) and in the operating system (ACPI OS) talk to each other in situations that might give rise to this error.

Part of Microsoft's development of XP involved finding new ways for ACPI BIOS implementations to access and modify hardware resources. Traditionally, ACPI BIOS implementations try to manipulate hardware resources directly through BIOS code. When the ACPI BIOS tries to access and/or modify the hardware resources at the same time as the operating system, an imbalance arises because these operations can't be synchronized. This imbalance can give rise to system instability and/or a hung machine, which needs to be shut down. It's at this point the user is likely to see an ACPI-related error message such as the one above. In pre-Win2K operating systems, this error would often be unrecoverable, and the machine would crash with a Blue Screen of Death. So, although the error is annoying, at least it's an improvement over the previous situation.

The work to improve this weakness involved identifying which system resources would generate the error, and the result was a list of affected resources called I/O Blocked Ports. This list is shown in Table A.
Table A
Address Function Comments
0x000 - 0x00F DMA Controller 1  
0x020 - 0x021  Programmable Interrupt Controller Access is never allowed*
0x040 - 0x043 System Timer 1  
0x048 - 0x04B Timer 2 Failsafe  
0x070 - 0x071 System CMOS, RTC  
0x074 - 0x076 Extended CMOS  
0x081 - 0x083 DMA1 Page Registers  
0x087 DMA1 CH0 Low Page  
0x089 DMA2 CH2 Low Page  
0x08A - 0x08B DMA2 CH3 Low Page  
0x08F DMA2 Low Page Refresh  
0x090 - 0x091 Arbitration Control Port Card Select Feedback  
0x093 - 0x094 Reserved System Board Setup  
0x096 - 0x097 POS Channel Select  
0x0A0 - 0x0A1 Cascaded Programmable Interrupt Controller Access is never allowed*
0x0C0 - 0x0DF ISA DMA  
0x4D0 - 0x4D1 PIC Edge/Level Control Registers Access is never allowed*
0xCF8 - 0xD00 PCI Configuration Space Access  
*Read or write accesses to these ports are always blocked.
I/O Blocked Ports list

As you can see, the 0x70-0x71 address range appears in the list, and it refers specifically to problems with CMOS/RTC. The ACPI interpreter, which ships with the XP kernel, monitors all events that attempt to read or write to or from the above list of restricted ports. When such an event occurs, there are various possible outcomes:
  • The event log will flag an error stating that the ACPI interpreter has detected such an illegal operation.
  • If the ACPI BIOS code is compatible with XP’s version of ACPI, the operating system will prohibit the read or write from happening, but an error will still be logged in the event viewer.
  • If the BIOS code is compatible only with pre-XP operating systems, XP will attempt to synchronize access to resources, and the read/write events will likely be allowed. However, an error will be logged in the event viewer.

In this last situation, the machine may remain unstable. The exception is when the Programmable Interrupt Controller (PIC) and cascaded PIC are involved in attempted read/writes—these addresses are always blocked because they can induce catastrophic system failure. In multiprocessor configurations, the relevant address register can actually become corrupted.

Some remedies
Now that we’ve looked at how BIOS ACPI and operating system ACPI work (or don't work) together, let’s take a look at how to recover from this error.

Boot problems?
This error shouldn't prevent your system from booting, even if it does demand that it be shut down immediately. If you're having boot problems, it's likely there's at least one other issue involved.

Flash the BIOS
Flashing the BIOS simply means you need to find, download, and apply the latest BIOS update for your motherboard. These updates are usually ready for download from the Web site of your motherboard's manufacturer. If you’re not sure which motherboard and BIOS you’re using, this information is presented on the screen when you first boot a system. Just write it down and go from there.

A potential problem with this solution is that the latest BIOS updates don't always correct these types of ACPI problems. This is because different motherboards run different chipsets, which in turn run different BIOSs, and it’s up to the manufacturer to decide when to release a given update. Whether that BIOS update will actually include the required ACPI version update can be anyone’s guess. For more information, you should contact technical support at your motherboard manufacturer.

Load the default BIOS settings
If flashing the BIOS doesn’t work, you can also try to load the BIOS’s default settings. Most BIOS interfaces have an option to "Load Safe Defaults." This may remedy the situation, or at least give you general stability so that you can tweak various other settings and restore normal operations.

Disable ACPI
A further step is to disable ACPI in the BIOS, although not all BIOSs allow this procedure. If you do, you may lose all ACPI-related functions in the operating system, and you may not be able to boot XP at all. So use this measure with great caution.

Install Windows XP as a ‘Standard PC’
Another reported fix is to install XP as a "Standard PC," which disables ACPI and changes the HAL driver.

More information
For more in-depth information on BIOS ACPI versioning, please check out the Microsoft Windows Platform Development Web site.

Editor's Picks