DOS Days

American Megatrends, Inc.

American Megatrends, Inc., also commonly abbreviated to AMI, were a BIOS manufacturer during the early PC / DOS era. The company started out in 1985 designing complete PC motherboards for early clone PC manufacturers, including Dell. This however, was shortlived, and the company moved fully into developing the BIOS firmware for motherboard manufacturers.

AMI BIOS 286 (1990)

Some early 286 clone motherboards used this BIOS.


An example of the AMI 286-BIOS startup screen and CMOS Setup Utility main menu

 

AMI BIOS Color (1992)

The 1992 release of the AMI BIOS Color is probably the one you've seen the most if you've built a 486 PC before. It was very common, and shared a lot of similarities to the Award BIOS of the same era.


An example of the AMI 286-BIOS startup screen and CMOS Setup Utility main menu

 

WinBIOS (1993)

Love it or hate it (I'm in the latter group), AMI decided to up the ante in 1993 with a 'Windows-esque' interface for their new BIOS for 1993. It was mouse-driven if a mouse was detected.

AMI didn't use version numbers in a traditional sense. Their 80s and 90s BIOS were identified by the core release date (not to be confused with the OEM's release date). The first WinBIOS core appears to have been 15th December 1993. While the WinBIOS was released in late 1993, almost all the boards date from 1994 and newer. The latest boards I've seen with the WinBIOS are SuperMicro boards from 1998-99.


An example of the AMI WinBIOS startup screen and CMOS Setup Utility main menu

 

HiFlex BIOS (1996)

AMI moved away from the Windows-like interface in 1996, returning to a simpler text-based CMOS setup utility. I suspect this was because it was much quicker and easier to add in the many custom revisions needed for each manufacturer's motherboard - it probably also kept the needed EPROM storage capacity low.


An example of the AMI HiFlex BIOS startup screen and CMOS Setup Utility main menu

 

AMI BIOS 6.31

AMI BIOS 7.xx

 

AMI BIOS 8

This was their final version of a true BIOS, before shifting to the new UEFI (Unified Extensible Firmware Interface) standard.

 

AMI BIOS Beep Codes

The PC BIOS has always used beep codes to indicate an issue during the startup process. This is because a potential problem may occur before the video card has been initialised, so is used to provide an audible indication until the display is ready.

Beeps Problem Area Details
1 short beep Memory DRAM refresh failure - either the programmable interrupt timer or programmable interrupt controller has failed.
2 short beeps Memory Memory parity error in the first 64 KB of memory. Check your DRAM ICs for any that have failed.
3 short beeps Memory First 64 KB of memory has failed. Check your DRAM ICs for any that have failed.
4 short beeps System timer (motherboard) The system clock/timer IC has failed, or there is a memory error in the first bank of memory.
5 short beeps CPU The microprocessor has failed.
6 short beeps Keyboard The keyboard controller has failed, causing no Gate A20 signal to be sent to the CPU to put it into protected mode.
7 short beeps CPU Virtual mode processor exception has been generated by the CPU due to a fault in the CPU or motherboard.
8 short beeps Video card Display memory read/write error. The video card is either faulty or is missing.
9 short beeps ROM (motherboard) The BIOS ROM checksum does not match. The BIOS ROM may be defective.
10 short beeps BIOS CMOS shutdown register read/write failure - potentially a fault with the BIOS.
11 short beeps Level 2 cache (motherboard) Cache error - check your motherboard L2 cache for faults.
1 long, 2 short Video card An error was detected in the video BIOS ROM, or a horizontal retrace failure has been encountered.
1 long, 3 short Memory The memory test above the first 64 KB failed. Check your DRAM ICs for any that have failed.
1 long, 8 short Video card Display test failure. The video card is either faulty or is missing.
2 short BIOS POST failure. One of the hardware tests during POST failed.
1 long BIOS POST has passed all tests.

 

AMI BIOS POST Codes

During the Power-On Self Test (POST) process, the BIOS outputs the current part of the process to port 80h. This can be picked up by a POST code analyzer card, which you'll see being used in a lot of my articles. These analyzer cards are cheap to buy, and are well worth the money if you ever need to diagnose a fault with your PC failing to get through to begin booting.

The codes below are in listed in the order in which they are processed during startup:

Code Versions < 1990 1990-1993 BIOS Color BIOS WinBIOS
01 NMI disabled and 80286 register test is about to start. NMI disabled and 80286 register test is about to start. CPU flag test NMI disabled
02 80286 register test passed. 80286 register test passed. Power-on delay Power-on delay
03 ROM BIOS checksum test (32Kb from F8000h) passed OK ROM BIOS checksum test (32Kb from E8000h) passed OK Chipset initialization Soft reset power-on
04 8259 programmable interrupt controller has initialized OK Keyboard controller test passed (with and without mouse) Soft/hard reset -
05 CMOS interrupt disabled Chipset initialized. DMA and interrupt controller disabled ROM enable Disable cache
06 Video system disabled and the system timer checks OK Video system disabled and the system timer checks OK ROM BIOS checksum Uncompressed POST code
07 8253/4 programmable-interval timer test OK 8253/4 programmable-interval timer test OK 8042 keyboard controller tested -
08 Delta counter channel 2 OK Delta counter channel 2 initialization complete 8042 keyboard controller tested CMOS checksum / CMOS initialization
09 Delta counter channel 1 OK Delta counter channel 1 initialization complete 8042 keyboard controller tested -
0A Delta counter channel 0 OK Delta counter channel 0 initialization complete 8042 keyboard controller tested CMOS initialization for date and time
0B Parity status cleared Refresh started 8042 protected mode tested Initialization before keyboard batch
0C The refresh and system timer check OK System timer started 8042 keyboard controller tested Batch command to keyboard controller
0D Refresh check OK Refresh check OK 8042 keyboard controller tested, CMOS Verify batch command
0E Refresh period checks OK - - Initialize after KB controller batch
0F - - CMOS initialization Write KB command byte
10 Ready to start 64KB base memory test Ready to start 64KB base memory test CMOS/realtime clock status ok. Pin 23/24 block/unblock command
11 Address line test OK Address line test OK DMA/PIC disable Check for <INS> key command
12 64KB base memory test OK 64KB base memory test OK DMA/PIC initialization DMA/PIC disable
13 System-interrupt vectors initialized - Chipset/memory initialization Chipset initialization
14 8042 keyboard controller checks OK - 8254 PIT timer tested 8254 timer test
15 CMOS read/write test OK ISA BIOS interrupt vectors initialized 8254 PIT channel 2 timer tested -
16 CMOS checksum and battery OK - 8254 PIT channel 1 timer tested -
17 Monochrome video mode OK Monochrome video mode OK 8254 PIT channel 0 timer tested -
18 CGA color mode set OK CGA color mode set OK Memory refresh test (PIC) -
19 Attempting to pass control to video ROM at C0000h Attempting to pass control to video ROM at C0000h Memory refresh test (PIC) Memory refresh test
1A Returned from video ROM Returned from video ROM Check 15-microsecond refresh (PIT) -
1B Display memory read/write test OK Shadow RAM enabled Check 30-microsecond refresh (PIT) -
1C Display memory read/write alternative test OK Display memory read/write alternative test OK - -
1D Video retrace test OK Alternate display memory read/write test OK - -
1E Global equipment byte set for proper video operation Global equipment byte set for proper video operation - -
1F Ready to initialize video system Ready to initialize video system - -
20 Video test OK Finished setting video mode Base 64K memory tested Base 64K memory test
21 Video display OK ROM type 27256 verified Base 64K memory parity tested -
22 The power-on message is displayed The power-on message is displayed Memory Read/Write -
23 - - BIOS vector table initialization Set BIOS stack, setup before int. vector init
24 - - BIOS vector table initialization Interrupt vector initialization
25 - - Turbo check of 8042 keyboard controller Read input port of 9042 chip, clear password
26 - - Global data table for keyboard controller; turbo Initialize global data for turbo switch
27 - - Video mode tested Initialize before setting video mode
28 - - Monochrome tested Set video mode
29 - - Color (CGA) tested -
2A - - Parity-enable tested Initialize BUS
2B - - Optional system ROM’s check start Setup before operational video check
2C - - Video ROM check Control to optional video ROM
2D - - Reinitialize main chipset Proc. after optional video ROM routine
2E - - Video memory tested Display memory Read/Write test if no EGA/VGA
2F - - Video memory tested Display memory Read/Write test
30 Ready to start the virtual-mode memory test Ready to start the virtual-mode memory test Video adapter tested Retrace check
31 Virtual memory mode test started Virtual memory mode test started Alternate video adapter tested Display alternate memory Read/Write check
32 CPU has switched to virtual mode CPU has switched to virtual mode Alternate video adapter tested Alternate display retrace check
33 Testing the memory address lines Testing the memory address lines Video mode tested -
34 Testing the memory address lines Testing the memory address lines Video mode tested Set display mode
35 Lower 1MB of RAM found Lower 1MB of RAM found Initialize BIOS ROM data area -
36 Memory size computation checks OK Memory size computation checks OK Power-on message display -
37 Memory test in progress Memory test in progress Power-on message display Display power-on message
38 Memory below 1MB is initialized Memory below 1MB is initialized Read cursor position Initialize BUS types
39 Memory above 1MB is initialized Memory above 1MB is initialized Display cursor reference Display BUS initialization error messages
3A Memory size is displayed Memory size is displayed Display BIOS setup message Display the hit <DEL> message
3B Ready to test the lower 1MB of RAM Ready to test the lower 1MB of RAM - Virtual modem memory test
3C Memory test of lower 1MB OK Memory test of lower 1MB OK - -
3D Memory test above 1MB OK Memory test above 1MB OK - -
3E Ready to shutdown for real-mode testing Ready to shutdown for real-mode testing - -
3F Shutdown OK- now in real mode Shutdown OK- now in real mode - -
40 Ready to disable gate A20 Cache memory now on. Ready to disable gate A20 Start protected mode tested Prepare descriptor tables
41 A20 line disabled successfully A20 line disabled successfully Build mode entry -
42 Ready to start DMA controller test i486 internal cache turned on CPU enters protected mode Enter virtual mode for memory test
43 - Ready to start DMA controller test Protected mode Interrupt enable Enable Interrupts for diagnostic mode
44     Check descriptor tables Initialize data to check memory wrap at 0:0
45     Check memory size Check memory wrap, find total memory amount
46     Memory Read/Write tested Memory write test
47     Base 640K memory tested 640K base memory write test
48     Check 640K memory size Determine memory below 1MB
49     Check extended memory size Determine memory above 1MB
4A     Verify CMOS extended memory -
4B     Check for soft/hard reset Check for soft reset, clear memory below 1MB
4C     Clear extended memory locations Clear memory above 1MB
4D     Update CMOS memory size Save memory size
4E Address line test OK - Base RAM size displayed Display first 64K memory size
4F System still in real mode - Memory Read/Write test on 640K Sequential and random memory test
50 DMA page register test OK DMA page register test OK Update CMOS on RAM size Displayed memory size
51 Starting DMA controller 1 register test Starting DMA controller 1 register test Extended memory tested Above 1MB memory test
52 DMA controller 1 test passed, starting DMA controller 2 register test DMA controller 1 test passed, starting DMA controller 2 register test. Re-size extended memory Save memory size information
53 DMA controller 2 test passed DMA controller 2 test passed Return CPU to real mode Enter real mode
54 Ready to test latch on DMA controller 1 and 2 Ready to test latch on DMA controller 1 and 2 Restore CPU registers Disable gate A-20 line
55 DMA controller 1 and 2 latch test OK DMA controller 1 and 2 latch test OK A-20 gate disabled -
56 DMA controller 1 and 2 configured OK DMA controller 1 and 2 configured OK BIOS vector recheck -
57 8259 programmable interrupt controller initialized OK 8259 programmable interrupt controller initialized OK BIOS vector check complete Adjust memory size
58 8259 programmable interrupt controller mask register OK - Clear BIOS display setup message Clear hit <DEL> message
59 Master 8259 programmable interrupt controller mask register OK - DMA, PIT tested DMA/PIC test
5A Ready to check timer interrupts - - -
5B Timer interrupt check OK - - -
5C Ready to test keyboard interrupt - - -
5D Error detected in timer or keyboard interrupt - - -
5E 8259 programmable interrupt controller error - - -
5F 8259 programmable interrupt controller OK - - -
60 - - DMA page register tested DMA #1 base register test
61 - - DMA #1 tested -
62 - - DMA #2 tested DMA #2 base register test
63 - - BIOS data area check -
64 - - BIOS data area checked -
65 - - Initialize DMA chips Program DMA unit 1 and 2
66 - - 8259 PIC initialization Initialize 8259 Interrupt controller
67 - - Keyboard tested Keyboard test
70 Start of keyboard test Start of keyboard test - -
71 Keyboard controller Ok Keyboard controller Ok - -
72 Keyboard tested OK Keyboard tested OK. Starting mouse interface test. - -
73 Keyboard global initialization OK Keyboard and mouse global initialization OK - -
74 Floppy setup ready to start Display setup prompt.. Floppy setup ready to start - -
75 Floppy controller setup OK Floppy controller setup OK - -
76 Hard disk setup ready to start Hard disk setup ready to start - -
77 Hard disk controller setup OK Hard disk controller setup OK - -
79 Ready to initialize timer data Ready to initialize timer data - -
7A Verifying CMOS battery power Timer data area initialized - -
7B CMOS battery verified OK CMOS battery verified OK - -
7D Analyzing CMOS RAM size - - -
7E CMOS memory size updated CMOS memory size updated - -
7F Send control to adapter ROM Enable the setup routine if <Delete> is pressed - Enable extended NMI sources
80 Enable the setup routine if <Delete> is pressed Send control to adapter ROM at C800h to DE00h Keyboard reset Stuck key and batch test
81 - Return from adapter ROM Stuck key and batch test Keyboard controller test
82 Printer data initialization is OK Printer data initialization is OK 8042 keyboard controller tested Write command byte, initialize circular buffer
83 RS-232 data initialization is OK RS-232 data initialization is OK Lock key check Lock key check
84 80×87 check and test OK 80×87 check and test OK Compare memory size with CMOS Compare memory size with CMOS
85 Display any soft-error message Display any soft-error message Password/soft error check Password/soft error check
86 Give control to ROM E0000h Give control to ROM E0000h XCMOS/CMOS equipment check Programming before check
87 Return from system ROM - CMOS setup entered Execute CMOS setup
88 - - Reinitialize chipset Programming after setup
89 - - Display power-on message Power-on display
8A - - Display wait and mouse check -
8B - - Shadow any option ROMs Shadow main and video BIOS
8C - - Initialize XCMOS settings Setup options after CMOS setup
8D - - Reset hard/floppy drives Initialize mouse
8E - - Floppy compare to CMOS Reset hard disk controller
8F - - Floppy disk controller initialization Floppy setup
90 - - Hard disk compare to CMOS -
91 - - Hard disk controller initialization Hard disk setup
92 - - BIOS data table check -
93 - - BIOS data check hat halfway -
94 - - Set memory size Base/extended memory size
95 - - Verify display memory Init. PCI/VLB BUS optional ROM’s from C800
96 - - Clear all Interrupts Initialize before C800 optional ROM control
97 - - Optional ROMs check Control to optional ROM
98 - - Clear all Interrupts Processing after optional ROM control
99 - - Setup timer data/RS232 base Setup timer data area/printer base address
9A - - RS232 test; Locate and test serial ports Set RS-232 base address
9B - - Clear all Interrupts Initialize before NPU test
9C - - NPU test NPU initialization
9D - - Clear all Interrupts Initialization after NPU test
9E - - Extended keyboard check Check extended KB, KB ID and num-lock
9F - - Set numlock Issue keyboard ID command
A0 - Program the cache SRAM Keyboard reset Reset keyboard ID flag
A1 - Check for external cache Cache memory test Cache memory test
A2 - Initialize EISA adapter card slots Display any soft errors Display any soft errors
A3 - Test extended NMI in EISA system Set typematic rate -
A4 - - Set memory wait states Program memory wait states
A5 - - Clear screen Clear screen, enable parity NMI
A6 - - Enable parity/NMI -
A7 - - Clear all Interrupts Init. needed before control to E000 ROM
A8 - - Control to ROM at E0000 Control to E000 ROM
A9 - - Clear all Interrupts Init. needed after control to E000 ROM
AA - - Display configuration Display system configuration
B0 - - - Uncompressed SETUP code for hot-key
B1 - - - Copy any code to specific area
C2 - - - Disable NMI, power-on delay
C5 - - - Enable ROM, disable cache
C6 - - - ROM BIOS checksum
C7 - - - CMOS shutdown register test
C8 - - - CMOS shutdown
CA - - - Initialize CMOS date and time
CB - - - Initialization before keyboard batch
CD - - - BAT command to keyboard controller
CE - - - Installation after keyboard controller batch
CF - - - Write keyboard command byte
D1 - - - Check for <INS> key command
D2 - - - Disable DMA and Interrupt controllers
D3 - - - Chipset initialization/auto detect memory
D4 - - - Uncompressed RUNTIME code
D5 - - - RUNTIME code uncompressed
DD - - - Control to shadow RAM at F000:F000
00 Call the Int19 boot loader Call the Int19 boot loader Call the Int19 boot loader Call the Int19 boot loader

 

 

 

Flashing an AMI BIOS

American Megatrends wrote aminf342 and amiflash 8.95, both of which run in DOS for the purpose of flashing BIOS with a core of 6.31 or earlier. For Windows, WinSFI - AMI WinFLASH 3.0.0.6 can also be used for this core or earlier.

For later AMI BIOSes with a core of 7.xx or later, use AFUDOS 4.40 in DOS, AFUWIN 4.48 for Win32, or AFUWINx64 4.48 for Win64.

All of these take a binary .rom file as the new BIOS code.

Note there is always a risk when overwriting an EPROM chip such as the one the BIOS code is stored on. It sounds obvious, but I'll say it anyway: once writing begins, power must be retained until writing is complete. A power cut is probably the most obvious risk here, though if you're overwriting an old EPROM/EEPROM, these ICs do go bad over time. Sometimes multiple successive writes will work in case the first attempt fails. I personally take the chance anyway of using the PC with the BIOS installed and run AWDFLASH or similar, and haven't ever had problems. If you do get into a situation where after an update the PC no longer POSTs, you will need to 'burn' the EPROM/EEPROM using an EPROM burner, such as the TL866 programmer, also commonly seen as the MiniPro, along with the included Windows programming utility, XP8710. For more information on this programmer, see my XT Restoration Project - Part 2.