Part of the challenge of writing an operating system is to accommodate the differences between machines - some of which are documented and some are not. It is not practical or desirable to document every permutation as there are too many. However, it can be useful to have an overview of what characteristics exist in the field.
The tables linked to below show the characteristics of real machines as found by testing. They reveal the kind of differences your OS will have to deal with if it is to run on a variety of machines.
Using the Tables
The simplest way to make use of the findings linked to below is to read any notes accompanying the tables. If you want further detail check the tables themselves. They may be most usefully read in columns. Pick a heading and read down the column noting the differences. As needed check the left hand column to see which machine has that characteristic. For example,
- The Boot-Time Registers table has a column showing where the stack is located when the boot sector gets control. Addresses are given as segmented and then for convenience the effective address of the top of the stack is given in decimal. Note that some machines place the stack at 0x400 which is the top of the interrupt vector table. You will want to relocate the stack before making heavy use of it so you don't overwrite used interrupt vectors. As can be seen there is no agreement over where the initial stack is placed.
- As a second example, in the Boot-Time A20 table note the different A20 control methods supported. As can be seen, there is no one method which is implemented by all machines. Nor can the BIOS report be relied upon to indicate which methods are available. Therefore any code to enable A20 will have to allow for the differences.
- Reading horizontally can sometimes be useful. For an example of that see the Boot-Time A20 table footnote.
Notes on the tables
- blank cells - indicate data not available which may be added later as more information comes to light
- not applic - means not applicable
- Boot-Time Registers
- A20 at Boot
- A20 Controls
- A20 Support in the BIOS
- System Control Port A
- CMOS and RTC
- BIOS Timer Support
- Keyboard Support in the BIOS
- KBC Output Port