Contents of the EDDTV400.DOC file
Extended Drive Description Tables for the IBM AT
When the IBM/PC was introduced, there was no fixed disk
option available from IBM. Several third party vendors
produced add-on fixed drives, but there were no standards as
far as addressing, interrupts used, etc. This led to much
confusion. The situation got a little better when the IBM
PC/XT was introduced. A set of standards on BIOS
interfacing, interrupts used, addressing, etc. was set. The
fixed disk description was stored in the fixed disk BIOS
contained on the fixed disk controller card. There was not,
however a standard set of disk description tables defined.
Each controller BIOS had it's own set of tables. Some
vendors OEM'd controllers and burned their own eproms with
undocumented table entries. This has caused many problems
when adding or replacing a fixed drive.
Next came the IBM AT. The AT BIOS contained support for a
fixed disk in the standard BIOS. A setup program was
supplied that stored the hard drive type in the CMOS
configuration ram. When the machine was booted, the BIOS
would read the drive type from cmos and use this as an index
into a table of drive descriptions. This made life easier
when adding a hard drive...or did it? IBM supplied only 14
drive types in the original BIOS. When the newer AT 339 came
out the number of drive types was expanded to 47, but only
22 entries were usable, with the other entries marked
reserved and filled in with zeros. Again your options were
With the falling prices of fixed drives, their popularity
increased, and everyone wanted to add one or more to their
system. Many users found the 32mb size restriction
unacceptable and wanted to attach very large drives to their
systems, but no drive type was supplied in the BIOS and DOS
did not support them.
The most popular solution to the problem of limited drive
types is through software. Device drivers are loaded at boot
time and redefine the fixed drives. This solution has been
very effective, but has some problems. You must boot off the
fixed drive or have the driver on any floppy use for booting
to properly access the fixed drive. Some operating systems
other than DOS may not be supported by the device driver.
Another option is by placing code in to eproms and using the
two extra sockets on the system board to contain a BIOS
extension that defines the fixed drives during the power on
self test (POST) sequence. This should remove the dependence
on software drivers for defining drive tables.
I chose the BIOS extension option as the preferred solution
in my case and began looking at some commercially available
products. All were found to be unacceptable for various
reasons. One vendor required I purchase two sets minimum. I
thought that was ridiculous, I only had one machine! Some
were priced much too high for a single set and others added
only a few drive type entries beyond what was already
defined. Being a hacker at heart, I decided if you want
something done, you might as well do it yourself. I then
began work in ernest on what I call Extended Drive
Description Tables or EDDT.
I purchased the IBM AT Technical Reference and began
studying the BIOS source code listings. It soon became clear
that it was not difficult to do what I wanted. During POST
the BIOS searches absolute addresses E0000 through EFFFF in
sixty four kilobyte blocks for a valid system board rom. A
valid rom is define as follows:
BYTE 0-1 55 AA
BYTE 2 NOT DEFINED
BYTE 3 ENTRY POINT FOR A FAR CALL
If the 55AA is located, a checksum is calculated, and, if it
is correct, a call is done to the entry point. At this time
the add on rom is in control and may initialize itself. A
closer look at the BIOS listings shows that the add on rom
code is called right after the fixed drives are initialized.
This was both good news and bad news. It was good news
because all the BIOS functions of the fixed disk interrupt
(interrupt 13H) would be available, but the bad news was the
BIOS had already attempted to initialize the hard drive for
which it may have an inaccurate description, and get errors.
My next problem was where do I get a setup program that
describes any new drive types I put in my roms? You guessed
it - do it yourself time again. I discovered that the
original AT's used CMOS byte 12H to contain the drive type
for both drive zero and drive one, using four bits for each.
When the number of drive types was expanded, if a F was
stored for a drive type, it indicated that this was an
extended drive type. Extended drive types were stored in
CMOS bytes 19H and 1AH. this allowed for a maximum of 255
different drive types to be defined.
Closer examination of the BIOS listings revealed that if
CMOS byte 12H was non-zero, the POST routine would invoke
the fixed disk initialization routines. These routines would
initialize the interrupt vectors, making the services of
interrupt 13H available, and if the drive type for drive
zero was zero, no initialization of the fixed drives would
be attempted. My setup program would the store a 01H in byte
12H and the EDDT drive types in bytes 19H and 1AH.
HANGE FOR EDDTV400
After testing on AWARD BIOS Version 2.09 and PHOENIX BIOS
version 3.03 showed that they failed to initialize the
Interrupt 13H vectors for hard disk support if Fixed Drive 0
was a 0 in CMOS, a change was made in the way the types are
setup. A dummy drive type is needed for these BIOS's. The
dummy type is chosen by ESETUP40 according to the following
IN ORDER TO INITIALIZE INTERRUPT 13H ON SOME
AT COMPATIBLES FIXED DRIVE 0 MUST BE DEFINED
IN CMOS. SINCE THE ACTUAL DRIVE MAY NOT HAVE
A CORRESPONDING IBM DRIVE TYPE WE MUST PICK
ONE THAT MEETS THE FOLLOWING CRITERIA:
(1) THE TYPE DEFINED MUST HAVE LESS THAT OR
EQUAL TO THE PHYSICAL DRIVE'S NUMBER OF
HEADS _AND_ NUMBER OF CYLINDERS.
(2) IF THE PHYSICAL DRIVE HAS MORE THAN 8
HEADS THE TYPE USED MUST HAVE A CONTROL
BYTE VALUE OF 08H OR IT MUST NOT USE
For a drive of 8 or less heads the dummy type is 1, for a
drive of more than 8 heads the dummy type is 6. EDDTV400 has
been tested successfully with the above mentioned BIOS's
after this change was implemented.
When the EDDT add on rom code got control, it could look up
the drive types in it's internal table, issue the set drive
characteristics interrupt 13H function and then run the
diagnostics on the fixed drives. As long as I was running
diagnostics I decided to output some information about what
was being tested and the status codes returned. I dislike
the standard IBM error code that doesn't tell you anything
about what failed so displayed is the BIOS interrupt 13H
function code, a description of the service requested and
the return code. If the return code is non-zero the system
pauses until you press a key to continue so you may make a
note of the error information provided. the diagnostics are
similar to, but more extensive than those in the IBM POST.
So far I have made over 140 drive type entries, and provided
a macro to allow for easy expansion of the table. To add a
drive type just code an additional EDDT macro and reassemble
the EDDTV400 rom module and the ESETUP40.EXE setup program.
To install EDDTV400 perform the following steps:
(1) Assemble EDDTV400 and ESETUP40
(2) Link EDDTV400 and ESETUP40
(3) Use EXE2BIN to produce EDDTV400.BIN
(4) Next use the software provided with most Eprom
burners to checksum EDDTV400.BIN and split it in
to odd and even bytes.
(5) Program the odd and even bytes into 2 27256
(6) Insert the Eproms into the empty sockets on the
I am including here two files, EDDTV400.EVN and
EDDTV400.ODD. These contain the code required for the odd
and even files for the system as coded with the included
tables. You can just burn the EPROMS and install them. Pick
your drive type out of the table and run ESETUP40.
Here are some common questions and answers.
EDDTV400 - Extended Drive Description Tables
WHAT IS EDDTV400 ?
EDDTV400 is a system to allow many more hard drive types
than contained in the IBM AT rom set. Currently about 120
different drive types are defined. This covers every hard
drive for which I have the data.
HOW IS EDDTV400 DIFFERENT FROM SPEEDSTOR, VFEATURE,
DISKMANAGER, ETC. ?
The packages mentioned are SOFTWARE device drivers. They
must be loaded into RAM when you boot your system. They must
reside on the fixed disk or diskette you boot from. The main
portion of EDDTV400 resides in ROM. EDDTV400 is active even
when you boot from a floppy. There is no software device
WILL EDDTV400 PARTITION MY LARGE HARD DRIVE ?
No, but with EDDTV400 and DOS 3.30's built-in partitioning
feature, you can partition large drives with no additional
HOW DO I INSTALL EDDTV400 ?
First you assemble the source code for EDDTV400, then, using
an EPROM burner and associated software, burn the code into
two 27256 (200ns reccommended). These go into the two empty
sockets on the IBM AT motherboard. Next boot from a floppy
and run EDSETUP3 and define your hard drive types from the
EDDTV400 list of drive types. Now re-boot and run FORMAT,
FDISK, etc. just like any hard drive you are installing.
DOES EDDTV400 REPLACE THE IBM BIOS ROUTINES ?
No, EDDTV400 just initializes the hard drive table pointer
interrupt vectors to point to his tables. He does do the
diagnostics like the IBM BIOS, but he tells you what he's
doing, and displays the actual status codes received to
assist in diagnosing a drive/controller problem.
IS EDDTV400 COMPATIBLE WITH CLONES ?
If they are really compatible, it should be. EDDTV400 was
tested on an IBM AT 339 with the 11/15/85 BIOS installed. An
examination of the source listings of the other IBM BIOS
releases doesn't reveal any incompatibilities, but I could
only test with what I had. Additional testing for Version
4.00 indicates compatibility with AWARD 2.09 and PHOENIX
WHAT DID YOU HAVE ?
I have an IBM AT 339, Miniscribe 6053, and CMI CM-6426. The
Miniscribe is a 40MB drive and the CMI is a 20MB.
WILL EDDTV400 HURT MY DRIVE ?
I don't think so, but, like all free software and most
commercial products, there is no warranty.
IS EDDTV400 PUBLIC DOMAIN ?
No, EDDTV400 is NOT public domain. I have included a
COPYRIGHT notice to protect my work. You may use EDDTV400
but DO NOT SELL IT. I doubt if there is any money to be made
with this, but if there is, I want it. I put many hours in
writing the code and don't want to lose too much control.
WHAT DO I NEED TO ASSEMBLE EDDTV400?
I used the Microsoft Macro Assembler Version 5.00. A few
version specific directives were used.
WHERE DO I GET HELP ??
If you call me (601 992 0577) at a decent hour (7pm to 11pm
CST) I'll try and answer questions. NO WARRANTY is provided.
I would like to know of problems however, and if I have time
I'll try and fix any problems IF I HAVE TIME!
WILL YOU BURN THE EPROMS FOR ME?
If you make it worth my while. I am not a company. I do not
keep vast quantities of eproms on hand. I'd probably
consider it for $75.00 or so. I would have to order the
eproms and the burn them. I would do this but NO WARRANTY
would be provided. I'm a hobbyist (the good kind of hacker).
I'm making this available AT NO COST. If it doesn't work in
your system I can't be held liable.
(601 992 0577)
183 Bellegrove Circle
Brandon, MS 39042