💾 Archived View for gemini.spam.works › mirrors › textfiles › programming › biosdiag.man captured on 2022-04-29 at 00:27:40.

View Raw

More Information

⬅️ Previous capture (2020-10-31)

-=-=-=-=-=-=-



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 at0: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
------------------------------------------------------------------------


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.