1152 lines
29 KiB
Groff
1152 lines
29 KiB
Groff
|
|
|||
|
|
|||
|
1.0 Power on self test functions
|
|||
|
|
|||
|
|
|||
|
On cold boot or hard reset AMI BIOS performs system diagnostics and
|
|||
|
initialization operations which can be broadly classified into the following :-
|
|||
|
|
|||
|
|
|||
|
Processor register test
|
|||
|
|
|||
|
ROM BIOS checksum check
|
|||
|
|
|||
|
Keyboard controller test
|
|||
|
|
|||
|
CMOS Shutdown register test
|
|||
|
|
|||
|
Channel 2,1,0 timer test
|
|||
|
|
|||
|
Memory refresh test
|
|||
|
|
|||
|
Base 64KB RAM test
|
|||
|
|
|||
|
CACHE memory test
|
|||
|
|
|||
|
CMOS battery, options set, checksum check
|
|||
|
|
|||
|
Display type verification
|
|||
|
|
|||
|
Entering protected mode
|
|||
|
|
|||
|
Address line test and memory size finding
|
|||
|
|
|||
|
Conventional and Extended memory test
|
|||
|
|
|||
|
DMA controller test
|
|||
|
|
|||
|
Keyboard test
|
|||
|
|
|||
|
System configuration verification and setup
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
1.0.1 Processor register test..
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
All processor registers are loaded with values 05555h, 0aaaah, 0cccch,
|
|||
|
0f0f0h and checked if they retain the values.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Registers do not retain the values
|
|||
|
Action: 5 short beeps in an infinite loop. System does not
|
|||
|
proceed further.
|
|||
|
|
|||
|
1.0.2. ROM BIOS Checksum check..
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Word addition of the BIOS ROM starting at F000:8000h till F000:FFFEh is
|
|||
|
taken. The word addition (checksum) should be 0.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Checksum is nonzero
|
|||
|
action: 9 short beeps in an infinite loop. System does not
|
|||
|
proceed further.
|
|||
|
|
|||
|
1.0.3. Keyboard controller test..
|
|||
|
|
|||
|
A keyboard controller BAT command is issued(command 0AAH) and the
|
|||
|
response is checked. Response should be 55H.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Return value <> 55H
|
|||
|
action: 6 short beeps issued in an infinite loop. System does
|
|||
|
not proceed any further.
|
|||
|
|
|||
|
1.0.4. CMOS Shutdown register test..
|
|||
|
|
|||
|
Hex value 55h is written into and read back from CMOS shutdown register
|
|||
|
8fh. The value read back should be 55h. The same test is then performed
|
|||
|
with a hex value 0AAh.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Values read back not same as values written.
|
|||
|
action: Error "CMOS INOPERATIONAL" is registered and the system
|
|||
|
will stop after the display is initialized with the
|
|||
|
above error displayed on the screen.
|
|||
|
|
|||
|
|
|||
|
1.0.5. Channel 2,1,0 timer test..
|
|||
|
|
|||
|
A. Channel 2 timer test..
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Channel 2 timer gate and speaker is disabled and the gate bit is verified to
|
|||
|
see if the gate is still disabled.
|
|||
|
|
|||
|
Channel 2 timer is programmed for 2 byte count. A test value of 55h is
|
|||
|
written to high byte and AAh to low byte of channel 2 timer. Since the
|
|||
|
timer gate is disabled it should retain these values.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: channel 2 timer gate is still enabled
|
|||
|
action: Register "CH-2 timer error" to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
error: The channel 2 timer does not retain the 55h,AAh written
|
|||
|
to it.
|
|||
|
action: Register "CH-2 timer error" to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
B. Channel 2, Channel 1 and Channel 0 delta count test..
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Select channel 2 timer and load with count data 0ffh. Wait for a predefined
|
|||
|
time. Read channel 2 timer value and check if the difference between the
|
|||
|
data written and read is within the tolerance limit. If the operation is
|
|||
|
successful, try the same with count data 0cch.
|
|||
|
|
|||
|
Do the same operations on channel 1 and channel 0 timer in the same
|
|||
|
order.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Channel 2 timer is not counting at all
|
|||
|
action: Register "CH-2 timer error" to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
error: Channel 2 timer in not counting properly. The delta
|
|||
|
diference is not within tolerence limit.
|
|||
|
action: Register "CH-2 timer error" to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
error: Channel 1 timer is not counting at all.
|
|||
|
action: 4 beeps and system halted.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
error: Channel 1 timer count is not within tolerence limit.
|
|||
|
action: 4 beeps and system halted.
|
|||
|
|
|||
|
error: Channel 0 timer is not counting at all.
|
|||
|
action: 4 beeps and system halted.
|
|||
|
|
|||
|
error: Channel 0 timer count is not within tolerence limit.
|
|||
|
action: 4 beeps and system halted.
|
|||
|
|
|||
|
|
|||
|
1.0.6. Refresh test...
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Enable channel 1 (Refresh) timer and channel 0 (System timer). Test refresh
|
|||
|
signal changing from low-to-high and high-to-low with time out count of
|
|||
|
0ffffh.
|
|||
|
|
|||
|
Wait for refresh signal to be high. Use counter 1 to count till refresh
|
|||
|
becomes low. Use counter 2 to count till refresh becomes high. The
|
|||
|
difference between counter 1 and counter 2 should not be more than 6.
|
|||
|
|
|||
|
Possible errors...
|
|||
|
|
|||
|
error: A time out has occured while testing refresh
|
|||
|
low-to-high and high-to-low.
|
|||
|
action: 1 beep in an infinite loop and system does not proceed
|
|||
|
further.
|
|||
|
|
|||
|
error: The difference between counter 1 and counter 2 is more
|
|||
|
than 6.
|
|||
|
action: 1 beep in an infinite loop and the system does not
|
|||
|
proceed further.
|
|||
|
|
|||
|
|
|||
|
1.0.7.Base 64KB RAM test...
|
|||
|
|
|||
|
Procedure...
|
|||
|
|
|||
|
On first 64kb of memory do a Address test, Sequential data write & read
|
|||
|
test, Random data write & read test. After all tests are over read the
|
|||
|
parity port for any parity error which could have occured during the tests.
|
|||
|
|
|||
|
Possible errors...
|
|||
|
|
|||
|
error: Error in address line test
|
|||
|
action: 3 beeps in an infinite loop and system does not proceed
|
|||
|
further.
|
|||
|
|
|||
|
error:: Error in sequential data write & read test
|
|||
|
action: 3 beeps in an infinite loop and system does not proceed
|
|||
|
further.
|
|||
|
|
|||
|
|
|||
|
error: Error in random data write & read test.
|
|||
|
action: 3 beeps in an infinite loop and system does not proceed
|
|||
|
further.
|
|||
|
|
|||
|
error: A parity error has occured during the tests.
|
|||
|
action: 3 beeps in an infinite loop ands the system does not
|
|||
|
proceed further.
|
|||
|
|
|||
|
|
|||
|
1.0.8. Cache memory test...
|
|||
|
|
|||
|
|
|||
|
A. Check the presence of cache memory
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Disable cache memory
|
|||
|
|
|||
|
Take timing to read 32kb memory 9 times and take the minimum value
|
|||
|
|
|||
|
Enable cache memory
|
|||
|
|
|||
|
Take timing to read 32kb memory 9 times and take the minimum value
|
|||
|
|
|||
|
If the minimum value of timing taken with cache on is greater than
|
|||
|
minimum value of timing taken with cache memory off, then indicate in
|
|||
|
global data area that cache memory is not present.
|
|||
|
|
|||
|
If cache memory is found present then with cache on test 32kb of memory.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Error in testing cache memory
|
|||
|
action: Register "CACHE MEMORY BAD, DO NOT ENABLE CACHE" error
|
|||
|
to be displayed on the screen.
|
|||
|
|
|||
|
|
|||
|
B. Test 64kb cache memory
|
|||
|
|
|||
|
Test 1st 32kb cache memory
|
|||
|
|
|||
|
Test 2nd 32kb cache memory
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Error in either 1st or 2nd 32kb cache memory test.
|
|||
|
action: Disable cache and register "CACHE MEMORY BAD, DO NOT
|
|||
|
ENABLE CACHE" error to be displayed on the screen.
|
|||
|
|
|||
|
1.0.9. CMOS battery, options and checksum check...
|
|||
|
|
|||
|
Read CMOS status register (8dh) and check if battery power is on.
|
|||
|
|
|||
|
Read CMOS diagnostic byte and check if CMOS options set.
|
|||
|
|
|||
|
If CMOS battery power is ok and options set then calculate CMOS
|
|||
|
checksum for CMOS registers 10h thru 2dh by a byte addition to a word
|
|||
|
result. Read the checksum word stored in registers 2eh and 2fh and
|
|||
|
compare it with the calculated checksum.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: CMOS battery state is low error.
|
|||
|
action: Register "CMOS battery state low" error to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
error: CMOS system options not set error.
|
|||
|
action: Register "CMOS system option not set" error to be displayed
|
|||
|
before system boot.
|
|||
|
|
|||
|
error: CMOS checksum mismatch
|
|||
|
action: Register "CMOS checksum error" to be displayed before system
|
|||
|
boot.
|
|||
|
|
|||
|
|
|||
|
1.0.10. Display type verification...
|
|||
|
|
|||
|
A. finding out Display type
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Get display switch setting.
|
|||
|
|
|||
|
If display switch mono then segment b000h else segment b800h.
|
|||
|
|
|||
|
Do a display memory sequential write and read test on 4kb of memory.
|
|||
|
|
|||
|
If display memory write and read test ok then do a horizontal and vertical
|
|||
|
retrace test.
|
|||
|
|
|||
|
If memory test ok and all retrace test ok then leave the mode of display to
|
|||
|
what ever is tested and go to check CMOS display type.
|
|||
|
|
|||
|
If memory test error or any retrace test fails then try the other mode. In
|
|||
|
other words if you had color try mono and if you had mono try color.
|
|||
|
|
|||
|
Do a memory test with the new mode.
|
|||
|
|
|||
|
Do horizontal and vertical retrace with the new mode.
|
|||
|
|
|||
|
If memory test ok and all retrace tests ok then leave the mode of display
|
|||
|
to whatever is tested and go to check CMOS display type.
|
|||
|
|
|||
|
if memory test error or retrace test error with the new mode then give one
|
|||
|
long and 8 short beeps and continue after setting the final mode to mono.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: memory test error with new mode set
|
|||
|
action: 1 long beep and 8 short beeps
|
|||
|
|
|||
|
error: retrace test failed with new mode
|
|||
|
action: 1 long beep and 8 short beeps.
|
|||
|
|
|||
|
B. Check CMOS display type and display switch setting
|
|||
|
|
|||
|
Check the final mode set after finding out display type with the display
|
|||
|
switch setting on the motherboard and the display type set in the CMOS by
|
|||
|
the user.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Display switch setting on mother board is not same as what BIOS
|
|||
|
finds out.
|
|||
|
action: Register "Display switch setting not proper" error to be displayed
|
|||
|
before system boot.
|
|||
|
|
|||
|
error: Display type set in CMOS is different from what BIOS has found
|
|||
|
out.
|
|||
|
action: Register "CMOS display type mismatch" error to be displayed
|
|||
|
before
|
|||
|
system boot.
|
|||
|
|
|||
|
|
|||
|
1.0.11. Entering protected mode...
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Get into protected mode using BIOS interrupt 15h function 89h.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Processor not in protected mode
|
|||
|
action: Display "8042 GATE-A20 ERROR, SYSTEM HALTED"
|
|||
|
|
|||
|
error: Virtual mode exception error
|
|||
|
action: 7 beeps in an infinite loop. System does not proceed
|
|||
|
further.
|
|||
|
|
|||
|
1.0.12. Address line test and memory size finding..
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Write a test pattern at 0:0h
|
|||
|
|
|||
|
Starting from bottom of the conventional memory space (640kb boundary) do
|
|||
|
a address line test 64kb at a time and come down till there is a segment
|
|||
|
where address line error is not found. That will be the bottom of the
|
|||
|
conventional memory.
|
|||
|
|
|||
|
Now read back the test pattern at 0:0h. This should be same as the test
|
|||
|
data written at 0:0h before the test was performed. If the test pattern at0:0h is overwritten then there is a address line error because while doing
|
|||
|
address line test, the addresses are generated in such a way that only one
|
|||
|
bit is set in the address line everytime. If there is a failure in that bit of
|
|||
|
address line then the address generated will be 0. So the data written at
|
|||
|
that address will actually be written at 0:0h.
|
|||
|
|
|||
|
Write a test pattern at 0:0h.
|
|||
|
|
|||
|
Starting from the bottom of the Extended memory (16MB boundary) do a
|
|||
|
address line test till there is a segment where address line error is not
|
|||
|
found. That will be the bottom of extended memory.
|
|||
|
|
|||
|
Now read back the data at 0:0h. This should be same as the test data
|
|||
|
written at 0:0h before the test is peformed
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Test data at 0:0h is destroyed while trying to find out
|
|||
|
the conventional memory size.
|
|||
|
action: 3 beeps in a loop and system does not proceed any
|
|||
|
further.
|
|||
|
|
|||
|
error: Test data at 0:0h is destroyed while trying to find out
|
|||
|
the extended memory size.
|
|||
|
action: 3 beeps in an infinite loop and the system does not
|
|||
|
proceed further.
|
|||
|
|
|||
|
|
|||
|
1.0.13. Conventional and Extended memory test..
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Clear all the conventional memory 64kb at a time by filling it with 0.
|
|||
|
|
|||
|
Clear all Extended memory 64kb at a time by filling if with 0.
|
|||
|
|
|||
|
|
|||
|
Starting from 2nd 64kb in conventional memory space do the following 64kb
|
|||
|
at a time for the size of conventional memory found in step 13:-
|
|||
|
|
|||
|
IF <ESC> is pressed
|
|||
|
|
|||
|
skip all test
|
|||
|
|
|||
|
Fill the 64kb memory with 0.
|
|||
|
|
|||
|
Go back to real mode
|
|||
|
|
|||
|
Display memory size tested so far
|
|||
|
|
|||
|
Go back to protected mode
|
|||
|
|
|||
|
ELSE
|
|||
|
|
|||
|
Do a Sequential Write and Read test
|
|||
|
|
|||
|
Do a Random Write and Read test
|
|||
|
|
|||
|
|
|||
|
Check if Parity error is registered during any of the above
|
|||
|
2 tests.
|
|||
|
|
|||
|
Fill memory tested with 0
|
|||
|
|
|||
|
Go back to real mode
|
|||
|
|
|||
|
Display memory size tested so far
|
|||
|
|
|||
|
Go back to protected mode
|
|||
|
|
|||
|
Starting from 1st 64kb in Extended memory space do the following 64kb at
|
|||
|
a time for the size of extended memory found in step 13:-
|
|||
|
|
|||
|
IF <ESC> is pressed
|
|||
|
|
|||
|
Skip all test
|
|||
|
|
|||
|
Fill the memory with 0.
|
|||
|
|
|||
|
Go back to real mode
|
|||
|
|
|||
|
Display memory size tested so far
|
|||
|
|
|||
|
Go back to protected mode
|
|||
|
|
|||
|
|
|||
|
ELSE
|
|||
|
|
|||
|
Do a Sequential Write and Read test
|
|||
|
|
|||
|
Do a Random Write and Read test
|
|||
|
|
|||
|
Check if parity error is registered during any of the above
|
|||
|
2 tests.
|
|||
|
|
|||
|
Fill memory tested with 0
|
|||
|
|
|||
|
Get into real mode
|
|||
|
|
|||
|
Display memory size tested so far
|
|||
|
|
|||
|
Go back to protected mode
|
|||
|
|
|||
|
Possible errors...
|
|||
|
|
|||
|
error: Memory Write and Read test error
|
|||
|
action: 1 long beep and 3 short beeps produced in the speaker.
|
|||
|
The memory size is trimmed to what ever was found good.
|
|||
|
|
|||
|
|
|||
|
error: Parity error registered during Sequential and Random
|
|||
|
test on any 64kb segment.
|
|||
|
action: 1 long beep and 3 short beeps produced in the speaker.
|
|||
|
The memory size is trimmed to what ever was found good.
|
|||
|
|
|||
|
error: Virtual mode exception error has occured
|
|||
|
action: 7 beeps in an infinite loop and system does not proceed
|
|||
|
further.
|
|||
|
|
|||
|
|
|||
|
1.0.14. DMA Controller test
|
|||
|
|
|||
|
4 different patterns are written into and read back from DMA page
|
|||
|
registers 80h thru 8fh. The data read back should be same as the data
|
|||
|
written. The data patterns used are aa55h,55aah,cc0fh,0000h.
|
|||
|
|
|||
|
The same patterns are then written into, read back from DMA unit 1
|
|||
|
registers 00 thru 07. The data read back should be same as the data
|
|||
|
written.
|
|||
|
|
|||
|
The same patterns are them written into, read back from DMA unit 2
|
|||
|
registers C0h thru C7h. The data read back should be same as the data
|
|||
|
written.
|
|||
|
|
|||
|
Possible errors...
|
|||
|
|
|||
|
error: Any one of the DMA page registers did not retain the
|
|||
|
data.
|
|||
|
action: "DMA ERROR, SYSTEM HALTED"
|
|||
|
|
|||
|
error: Any one of the DMA unit 1 registers did not retain the
|
|||
|
data.
|
|||
|
action: "DMA #1 ERROR, SYSTEM HALTED"
|
|||
|
|
|||
|
error: Any one of the DMA unit 2 registers did not ratain the
|
|||
|
data.
|
|||
|
action: "DMA #2 ERROR, SYSTEM HALTED"
|
|||
|
|
|||
|
|
|||
|
1.0.15. Keyboard test
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Output keyboard self test command 0ffh. The keyboard should return 0fah
|
|||
|
and 0aah.
|
|||
|
|
|||
|
If the data returned is 0fah and 0aah then check if any key is stuck on
|
|||
|
the keyboard. This is done by enabling keyboard enable bit, inhibit bit, sys
|
|||
|
bit, output buffer full bit and then checking for output buffer full bit going
|
|||
|
low.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
If any error occured during the above two tests, keyboard interface test is
|
|||
|
performed. This is done by writing command 0abh to keyboard controller
|
|||
|
and reading the response. The response should be 00h.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Keyboard self test command failed but the keyboard
|
|||
|
interface test command was successful.
|
|||
|
action: Register soft error "Keyboard error" to be displayed
|
|||
|
before system boot.
|
|||
|
|
|||
|
error: Keyboard self test command passed, keyboard was found
|
|||
|
to be stuck and keyboard interface command passed.
|
|||
|
action: Register soft error "Keyboard error" to be displayed
|
|||
|
before system boot.
|
|||
|
|
|||
|
error: Keyboard self test command failed or keyboard was found
|
|||
|
stuck and the keyboard interface command failed.
|
|||
|
action: Register "KB/Interface error" to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
1.0.16. System configuration verification and setup
|
|||
|
|
|||
|
A. Floppy disk setup..
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Initialize floppy global data area.
|
|||
|
|
|||
|
reset floppy controller.
|
|||
|
|
|||
|
For floppy drive 0 and 1 try to find out the presence of the drive and then
|
|||
|
sense the drive type in the following manner:-
|
|||
|
|
|||
|
Seek to track 48
|
|||
|
|
|||
|
Seek backwards till track 0
|
|||
|
|
|||
|
If seek to track 0 is not successful then it is a 40 track
|
|||
|
drive which is 360kb. So set global as 360kb disk type.
|
|||
|
|
|||
|
If seek to track 0 is successful, it is a 80 track drive so
|
|||
|
check CMOS for type of drive selected through the SETUP
|
|||
|
program.
|
|||
|
|
|||
|
For 720kb drive set 720kb disk type in global.
|
|||
|
|
|||
|
If 1.2mb or 1.44mb in CMOS, then set 2 or 7 respectively in
|
|||
|
the global which means that media has to be established for
|
|||
|
these drives every time a new disk is put in. This is
|
|||
|
necessary because a 1.2mb drive can take 1.2mb or 360kb disk
|
|||
|
and a 1.44mb drive can take either 720kb or 1.44mb disk.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Possible errors...
|
|||
|
|
|||
|
error: Reset floppy controller failure
|
|||
|
action: Register "FDD controller failure" error to be displayed
|
|||
|
before system boot.
|
|||
|
|
|||
|
B. Hard disk Setup
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Reset hard disk controller.
|
|||
|
|
|||
|
If CMOS bad or no drive type set, skip hard disk check otherwise do hard
|
|||
|
disk tests in following manner:-
|
|||
|
|
|||
|
Redirect Int 13h to Int 40h for floppy and point Int 13h to hard disk
|
|||
|
routines.
|
|||
|
|
|||
|
Depending upon the CMOS Drive type value, point Int 41h and Int 46h
|
|||
|
vectors to ROM drive type parameters for drive C and D respectively.
|
|||
|
|
|||
|
Initialize the global data area for hard disks.
|
|||
|
|
|||
|
Issue controller diagnostics command for the hard disk controller.
|
|||
|
|
|||
|
Set parameters from drive type table for drive 0 and recalibrate on drive 0
|
|||
|
if CMOS type is set for drive 0.
|
|||
|
|
|||
|
Set parameters from drive type table for drive 1 and recalibrate on drive 1
|
|||
|
if CMOS type is set for for drive 1.
|
|||
|
|
|||
|
For drive 0, if CMOS type is set, do verify on each sector in the last
|
|||
|
track. At least one of the sectors in the last track should verify ok.
|
|||
|
|
|||
|
For drive 1, if CMOS isset, do verify on each sector in the last track. At
|
|||
|
least one of the sectors in the last track should verify ok.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Hard disk controller diagnostics failed
|
|||
|
action: Register "HDD controller error" to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
error: Recalibrate on drive 0 failed.
|
|||
|
action: Register "C:Drive failure" error to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
error:: Recalibrate on drive 1 failed.
|
|||
|
action: Register "D:Drive failure" error to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
error: None of the sectors in last track on drive 0 verified
|
|||
|
ok.
|
|||
|
action: Register "C:Drive error" error to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
error: None of the sectors in last track on drive 1 verified
|
|||
|
ok.
|
|||
|
action: Register "D:Drive error" error to be displayed before
|
|||
|
system boot.
|
|||
|
|
|||
|
|
|||
|
C. Memory size verification
|
|||
|
|
|||
|
Procedure...
|
|||
|
|
|||
|
If CMOS battery state is ok and CMOS checksum is ok then do the
|
|||
|
following:-
|
|||
|
|
|||
|
Check Conventional memory size in CMOS with actual memory size found
|
|||
|
out by BIOS.
|
|||
|
|
|||
|
Check Extended memory size in CMOS with actual extended memory size
|
|||
|
found by BIOS.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error:: Actual conventional memory size found by BIOS is not
|
|||
|
same as memory size stored in CMOS.
|
|||
|
action: Register "CMOS memory size mismatch" error to be
|
|||
|
displayed before system boot.
|
|||
|
|
|||
|
error: Actual extended memory size found by BIOS is different
|
|||
|
from memory size stored in CMOS.
|
|||
|
action: Register "CMOS memory size mismatch" error to be
|
|||
|
displayed before system boot.
|
|||
|
|
|||
|
|
|||
|
D. Optional ROM control
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Start from segment C800h segment and continue with an increment of 80h
|
|||
|
till E000h segment with the following operation:-
|
|||
|
|
|||
|
Check if word at offset 0 is 0aa55h.
|
|||
|
|
|||
|
If word at offset 0 is 0aa55h then do the following:-
|
|||
|
|
|||
|
Take the size of the ROM from offset 2. The size should be # of 512 bytes
|
|||
|
in the optional ROM. Now calculate the checksum of the ROM by adding all
|
|||
|
the bytes. The checksum should be 0. If the checksum is 0 then give
|
|||
|
control to the optional ROM at offset 3
|
|||
|
by a FAR CALL.
|
|||
|
|
|||
|
E. Initialize Timer data area
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Check if CMOS battery state ok and CMOS checksum ok. If both of them
|
|||
|
are ok then do the following:-
|
|||
|
|
|||
|
Read real time clock through BIOS interrupt routine 1Ah. Compare the
|
|||
|
hour, minute and second BCD values to find if they are within limit. Hour
|
|||
|
should be <=24, Minute<=60 and second<=60. If they are within limit then
|
|||
|
change them from BCD to Binary value and in terms 1/18th of a second.
|
|||
|
Save them in timer data area which is 2 words and is used by the timer
|
|||
|
routine to update the count in every 1/18th of a second.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Error returned by int 1Ah function.
|
|||
|
action: Register "CMOS time & date not set" to be displayed
|
|||
|
before system boot.
|
|||
|
|
|||
|
error: Hour, minute and seconds not within limit.
|
|||
|
action: Register "CMOS time & date not set" error to be
|
|||
|
displayed before system boot.
|
|||
|
|
|||
|
|
|||
|
E. Setup Printer and RS232 Ports
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Check for presence of printer ports 03bch, 0378h, 0278h by a port pattern
|
|||
|
test. In the port pattern test write values 0aa55h, 55aah, cc00h,0000h to
|
|||
|
these ports in these order and read them back after writing to check if
|
|||
|
they retain the values. For the ports that retain the values, add them to
|
|||
|
the system data area starting at 40h:8.
|
|||
|
|
|||
|
Check for presence of RS232 ports 03f8h, 02f8h, 03e8h, 02e8h in the same
|
|||
|
way as above and add them to the system data area at 40h:0.
|
|||
|
|
|||
|
F. Check for Keyboard lock
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Read keyboard status port and check the keyboard lock bit.
|
|||
|
|
|||
|
Possible errors..
|
|||
|
|
|||
|
error: Keyboard is locked
|
|||
|
action: Register "Keyboard is locked" error to be displayed
|
|||
|
before system boot.
|
|||
|
|
|||
|
G. Display all error messages
|
|||
|
|
|||
|
H. System ROM control
|
|||
|
|
|||
|
Procedure..
|
|||
|
|
|||
|
Check for System ROM at segment e000h in following manner:-
|
|||
|
|
|||
|
Check if at offset 0 the word value is 0aa55h. If the value is 0aa55h then
|
|||
|
calculate a byte checksum for 64kb by adding all bytes. The checksum
|
|||
|
should be 0. If the checksum is zero then give control to the optional ROM
|
|||
|
at offset 3.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
2.0 Classification of error messages..
|
|||
|
|
|||
|
The error messages can be classified into 4 diferent categories
|
|||
|
|
|||
|
Fatal errors through beeps
|
|||
|
|
|||
|
Fatal errors through display
|
|||
|
|
|||
|
Non fatal errors through beeps
|
|||
|
|
|||
|
Non fatal errors through display
|
|||
|
|
|||
|
2.1 Fatal errors through beeps..
|
|||
|
|
|||
|
The fatal errors through beeps are conveyed through a number of beeps in
|
|||
|
an infinite process and there is enough time gap between tow subsequent
|
|||
|
sets of error beeps to calculate the number in each set.
|
|||
|
|
|||
|
2.1.1 One beep (DRAM Refresh failure)
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Refresh test
|
|||
|
|
|||
|
2.1.2 Three beeps (Base 64kb RAM failure)
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Base 64kb RAM test
|
|||
|
|
|||
|
Address test and memory size finding
|
|||
|
|
|||
|
2.1.3 Four beeps (System timer failure)
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Channel 1 timer test
|
|||
|
|
|||
|
Channel 0 timer test
|
|||
|
|
|||
|
2.1.4 Five beeps (Processor failure)
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Processor register test
|
|||
|
|
|||
|
2.1.5 Six beeps (Keyboard controller Gate A20 error)
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Keyboard controller test
|
|||
|
|
|||
|
|
|||
|
2.1.6 Seven beeps (Virtual mode exception error)
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Getting into protected mode
|
|||
|
|
|||
|
Conventional and Extended memory test
|
|||
|
|
|||
|
|
|||
|
2.1.7 Nine beeps (ROM BIOS Checksum failure)
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
ROM BIOS Checksum check
|
|||
|
|
|||
|
|
|||
|
2.2 Fatal errors through display..
|
|||
|
|
|||
|
When these errors are displayed the screen is cleared and after the error
|
|||
|
message display is also followed by a line saying "SYSTEM HALTED"
|
|||
|
|
|||
|
2.2.1 CMOS INOPERATIONAL
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
CMOS Shutdown register test
|
|||
|
|
|||
|
2.2.2 8042 GATE-A20 ERROR
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Getting into protected mode
|
|||
|
|
|||
|
2.2.3 INVALID SWITCH MEMORY FAILURE
|
|||
|
|
|||
|
2.2.4 DMA ERROR
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
DMA Controller page register test
|
|||
|
|
|||
|
2.2.5 DMA #1 ERROR
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
DMA Unit 1 register test
|
|||
|
|
|||
|
2.2.6 DMA #2 ERROR
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
DMA Unit 2 register test
|
|||
|
|
|||
|
|
|||
|
2.3 Non fatal errors through beeps..
|
|||
|
|
|||
|
These errors are displayed as one long beep following by a number of short
|
|||
|
beeps and the system proceeds normally.
|
|||
|
|
|||
|
2.3.1 One long and 3 short beeps
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Conventional and Extended memory test
|
|||
|
|
|||
|
2.3.2 One long and eight short beeps
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Display RAM test and display vertical and horizontal retrace test.
|
|||
|
|
|||
|
2.4 Non fatal errors through display..
|
|||
|
|
|||
|
These types of errors are classified into 2 categories.
|
|||
|
|
|||
|
Ones that wait for F1 key and give the option to run SETUP
|
|||
|
|
|||
|
Ones that wait for F1 key but do not give option to run SETUP
|
|||
|
|
|||
|
2.4.1 Errors waiting fot F1 key and giving option to run SETUP
|
|||
|
|
|||
|
2.4.1.1 CMOS battery state low
|
|||
|
|
|||
|
Ouucrrence..
|
|||
|
|
|||
|
CMOS battery, options set and checksum test
|
|||
|
|
|||
|
2.4.1.2 CMOS system options not set
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
CMOS battery, options set and checksum test
|
|||
|
|
|||
|
2.4.1.3 CMOS ckecksum failure
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
CMOS battery, options set and checksum test
|
|||
|
|
|||
|
2.4.1.4 CMOS display type mismatch
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Display type verification
|
|||
|
|
|||
|
2.4.1.5 CMOS memory size mismatch
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System Configuration verification and setup (Memory size verification)
|
|||
|
|
|||
|
2.4.1.6 CMOS time & date not set
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System configuration verification and setup (Init timer data)
|
|||
|
|
|||
|
|
|||
|
2.4.1.7 C:Drive failure
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System configuration verification and setup (Hard disk setup)
|
|||
|
|
|||
|
2.4.2 Errors waiting for F1 key and not giving the option to run SETUP
|
|||
|
|
|||
|
2.4.2.1 CH-2 timer error
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Channel 2,1,0 timer test
|
|||
|
|
|||
|
2.4.2.2 Keyboard error
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Keyboard test
|
|||
|
|
|||
|
2.4.2.3 KB/Interface error
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Keyboard test
|
|||
|
|
|||
|
2.4.2.4 Display switch setting not proper
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
Display type verification
|
|||
|
|
|||
|
|
|||
|
2.4.2.5 Keyboard is locked ... Unlock it
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System configuration verification and setup (Keyboard lock check)
|
|||
|
|
|||
|
2.4.2.6 FDD controller error
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System configuration verification and setup (floppy disk setup)
|
|||
|
|
|||
|
2.4.2.7 HDD controller failure
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System configuration verification and setup (Hard disk setup)
|
|||
|
|
|||
|
2.4.2.8 C:Drive error
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System configuration verification and setup (Hard disk setup)
|
|||
|
|
|||
|
|
|||
|
2.4.2.9 D:Drive error
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System configuration verification and setup (Hard disk setup)
|
|||
|
|
|||
|
|
|||
|
2.4.2.10 D:Drive failure
|
|||
|
|
|||
|
Occurrence..
|
|||
|
|
|||
|
System configuration verification and setup (Hard disk setup)
|
|||
|
|
|||
|
|
|||
|
Appendix A
|
|||
|
|
|||
|
|
|||
|
Address line test procedure
|
|||
|
|
|||
|
|
|||
|
For the 64kb of memory on test, write and then read data patterns 0ffh
|
|||
|
and 00h at addresses 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
|
|||
|
8192, 16384, 32768. The data read back should be same as that written.
|
|||
|
|
|||
|
Sequential memory Write and Read test
|
|||
|
|
|||
|
For the 64kb of memory on test, use test patterns 8080h, 5555h, 3333h,
|
|||
|
0f0fh in the same order.
|
|||
|
|
|||
|
Take one pattern and write it on the entire 64kb space one word at a time.
|
|||
|
Then compare the 64k space one word at a time with the value written. If
|
|||
|
any word does not retain the value then return error.
|
|||
|
|
|||
|
|
|||
|
Random memory Write and Read test
|
|||
|
|
|||
|
Use a random number generator which generates 16k of random numbers as
|
|||
|
memory addresses and returns a seed between 0 to ffh associated with each
|
|||
|
random addresses generated.
|
|||
|
|
|||
|
Use the random number generator again and read the data from the random
|
|||
|
address. The data read back should be same as the seed returned by the
|
|||
|
random number generator. In short, the BIOS checks wheather the data
|
|||
|
written in 16k random addresses are retained in those memory locations.
|
|||
|
|
|||
|
The random number generator procedure is written in such a way that it
|
|||
|
generates the same sequence of random numbers in the same order every
|
|||
|
time it is called and it also returns a unique seed associated with each
|
|||
|
random number.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Appendix B
|
|||
|
|
|||
|
CMOS RAM USAGE IN AMI MARK II AT BIOS
|
|||
|
|
|||
|
-------------------------------------------------------------------------
|
|||
|
Address Description
|
|||
|
|
|||
|
-------------------------------------------------------------------------
|
|||
|
00-0D *Real-time clock information
|
|||
|
0E *Diagnostics status byte
|
|||
|
0F *Shutdown status byte
|
|||
|
10 Diskett drive type byte - drives A and B
|
|||
|
11 Reserved
|
|||
|
12 Fixed disk type byte - drives C and D (1 - 14)
|
|||
|
13 Reserved
|
|||
|
14 Equipment byte
|
|||
|
15 Base memory byte LOW
|
|||
|
16 Base memory byte HIGH
|
|||
|
17 Expansion memory byte LOW
|
|||
|
18 Expansion memory byte HIGH
|
|||
|
19 Extended fixed disk type - drive C (16 - 255)
|
|||
|
1A Extended fixed disk type - drive D (16 - 255)
|
|||
|
1B-2C!! User defined drive type
|
|||
|
2D Reserved
|
|||
|
2E-2F 2 - byte CMOS Checksum
|
|||
|
30 *Expansion memory size LOW
|
|||
|
31 *Expansion memory size HIGH
|
|||
|
32 *Date century byte
|
|||
|
33 *Information flags (set during power on)
|
|||
|
34-36 Reserved
|
|||
|
37 !! Video and Keyboard installation information
|
|||
|
38 !! Video shadow and memory information
|
|||
|
39-3A!! Segment value for scratch memory used by BIOS for Load all
|
|||
|
translation.
|
|||
|
3B-3F Reserved
|
|||
|
------------------------------------------------------------------------
|
|||
|
|
|||
|
*These bytes are not included in the checksum calculation and are not part
|
|||
|
of the configuration record.
|
|||
|
|
|||
|
!! These are extra bytes used by AMI BIOS.
|
|||
|
|
|||
|
Bytes 1B - 2C (Is used by AMI BIOS released after March 1989)
|
|||
|
_____________________________________________
|
|||
|
|
|||
|
These bytes will store user defined drive types in following format.
|
|||
|
|
|||
|
Drive C User defined type
|
|||
|
|
|||
|
1B,1C Number of cylinders
|
|||
|
1D Number of heads
|
|||
|
|
|||
|
1E,1F Write precom
|
|||
|
|
|||
|
20 Control byte
|
|||
|
21,22 Landing zone
|
|||
|
23 Number of sectors
|
|||
|
|
|||
|
Drive D User defined type
|
|||
|
|
|||
|
24,25 Number of cylinders
|
|||
|
26 Number of heads
|
|||
|
27,28 Write precom
|
|||
|
29 Control byte
|
|||
|
2A,2B Landing zone
|
|||
|
2C Number of sectors
|
|||
|
|
|||
|
|
|||
|
Byte 37
|
|||
|
_____
|
|||
|
|
|||
|
|
|||
|
Bit 0 This bit has meaning only in BIOS released after March
|
|||
|
1989.
|
|||
|
1=Test keyboard
|
|||
|
0=Do not test keyboard
|
|||
|
|
|||
|
Bit 1 This bit has meaning only in BIOS released after March
|
|||
|
1989.
|
|||
|
1=Test Video
|
|||
|
0=Don not test Video
|
|||
|
|
|||
|
Bit 2 Current status of keyboard controller pin 23.
|
|||
|
|
|||
|
Bit 3 Current Status of Keyboard controller pin 24.
|
|||
|
|
|||
|
Bit 4-7 Not used
|
|||
|
|
|||
|
Byte 38
|
|||
|
_____
|
|||
|
|
|||
|
Bit 0-2 Not used
|
|||
|
|
|||
|
Bit 3 1="INS" key has been pressed
|
|||
|
0="INS" key not pressed
|
|||
|
|
|||
|
Bit 4 1=Weitek co-processor present
|
|||
|
0=Weitek co-processor absent
|
|||
|
|
|||
|
Bit 5 1=Enable Video shadow
|
|||
|
0=Disable video shadow
|
|||
|
|
|||
|
Bit 6 1=Relocate 256k memory
|
|||
|
0=Do not relocate 256k memory
|
|||
|
|
|||
|
Bit 7 1=32-bit memory card installed
|
|||
|
0=32-bit memory card not installed
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Byte 39-3A
|
|||
|
________
|
|||
|
|
|||
|
These bytes are used to save the segment value of the memory BIOS is
|
|||
|
going to use for Load all function translation. For MARK II AT Board this
|
|||
|
actually points to BIOS area because BIOS Shadow RAM is enabled.
|
|||
|
|
|||
|
|