Many thanks for the info, very useful!!
----- Original Message -----
From: "Eric Auer" <[EMAIL PROTECTED]>
Sent: Friday, September 26, 2008 1:59 AM
Subject: Re: [Freedos-user] required BIOS services FAQ item
> Hi Hans,
>> I just updated my BIOS to report
>> any unsupported INT/service calls,
> Can you give a short overview of your hardware
I am using an FPGA based 80188/6 processor + a number of standard
peripherals such as 8259 PIC, 146818 RTC, ATA/CF interface, 8239 DMAC, 16550
UART, 8255 PIO and a 7 segment LCD display.
Although I use a commercial version a "light 8088 version" can be downloaded
from here :
The processor fits in a small FPGA and can be synthesised using the free
vendor synthesis tools (QNS/XST). Clock speed is round the 40MHz for a
modern Xilinx/Altera FPGA.
> and of the functions your BIOS already does support? :-)
For the BIOS I have implemented a number of basic I/O calls such that one
can use a DOSbox for development. I also implemented a simple debugger, the
(old) source can be downloaded from here:
All the BIOS I/O calls (e.g. INT10,0E, INT21,01,03,09 etc) are redirected to
one of the serial ports since my system does not have a keyboard or display
(the same will be required when running FreeDOS).
I have recently updated the BIOS with a number of INT13 calls such as the
basic services 00/02/03/08/25 and 3 extended calls (41/42/43). I did not
implement extended service 48 since none of the virtual machines (VMWare,
Virtual PC 2007, Bochs) seems to support it (return error code 01). I assume
that service 08 is sufficient to get the system up and running and/or the OS
use service 25 to get the drive parameters and then build their own
Just to be on the safe side the BIOS also builds an SPDT hard disk table
located at 40:E0-40:EF and pointed to by int41h. I wasn't sure were to store
this table and/or if FreeDOS requires it. The basic call 02/03 are
translated to LBA before passing to an Compact Flash card in ATA mode. There
is no support for a floppy or second hard disk.
The BIOS sets up one of the timers to generate the 18.2Hz timer tick. The
RTC is used for the date/clock functions (INT1A).
Some Bios Data Area (40:00-40:ff) is filled in such as equipment list etc.
Your email it very useful since it is not easy to figure out what is
required for this area.
I though that I was getting close to invoking that magic int19, but looking
at your list it seems there is still some way to go :-(
> I cannot resist answering before the FAQ is up
> again (still needs config fixes after SF update)
> so here you go... It's also "fresher". Enjoy :-).
> Here is the summary of the summary first: Provide
> 40:0e, 1e, 6c, 71, 96, int 08, 11-12, 1c (easy),
> set int 1e geometry info, int 10 func 0e, int 1a
> func 0-5, int 13 func 0-3/8, int 16 func 0-2, if
> 102+ keys FreeDOS also uses int 16 func 10-12 :-).
> Optional: int 13 func 5, d, 15-18, 41-43, 48 and
> int 14 func 0-3, int 17 func 0-2 - provide stubs!
> Int 15 functions 87, 88 and maybe c0, 24: HIMEMX
> but "func 88 + A20 always on" should be enough...
> Some extra 40:nn for keyboard and textscreen and
> more int 10 func and b800:0 make more apps happy.
> Overview BIOS services versus FreeDOS kernel: DOS
> overwrites int 20-2f and some others, some drivers
> assume the first IRQs to be at int 08-0f and the
> usual 8086 CPU exception numbers 0-6 are assumed.
> RAM usage starts at 50:nn or 70:nn, is tweakable.
> Int 1e floppy data and 40:6c timer should be more
> or less related to reality, also int 08 / int 1c.
> Core int 10 screen functions: 0e TTY, occasionally
> others (00 set mode, 02 / 09 cursor and print...)
> but DOS *apps* and shell may require some more.
> Config option "screen" uses int 10 func. 00 / 11.
> Core int 16 keyboard functions: 0-2 but if you do
> have 100+ keys you should also support 10-12, this
> is detected by testing "40:96 and 10" flag but you
> can force to 86 key compat mode with SWITCHES=/K.
> Core int 13 disk functions: 0-3 and 8, some more can
> return dummy values: LBA check, format, change check
> and similar... FreeDOS can probe drives 0-1, 80-87,
> be prepared to get probes for drives you do not have,
> simply return a suitable error code... The dummy-able
> other int 13 functions: 05, 0d (?), 15-18, 41-43, 48.
> Core simple functions: int 11 / int 12 / int 19 to
> get some flags / memory size / do reboot (optional).
> Int 11 and 12 basically only return a flag bitmask.
> Core communication functions: int 14 and int 17 for
> COM / LPT only used if they exist according to int 11.
> Int 14 func 0 to 3 and int 17 func 0 to 2 are used
> when accessing COM / LPT and when initing them.
> Core time functions: int 1a functions 0 / 2 / 4 at
> boot, functions 1 / 3 / 5 if you change date/time,
> also timer tick count at 40:6c and maybe int 8 / 1c.
> Minimal CPU: 8086, 286 or 386 depending on compile
> time option. Recommended is 386 with int 15 for ext
> RAM size info so you can use HIMEM for HMA and the
> "XMS swap" of our command.com :-). HIMEM might also
> use PS/2 A20 access and RAM copy (both int 15) and
> mouse drivers can use PS/2 int 15 mouse stuff...
> Several DOS apps will be happy if you have a text
> screen buffer at b800:0 and some of the 40:xx BIOS
> data. The kernel uses very little 40:xx data itself:
> IF you use the full screen config sys menu, you
> need int 10 function 02 and 06 and the 40:4a and
> 40:84 values. Using numlock / keybuf config sys
> OPTIONS modify 40:17 and 40:1a/1e and 40:80/82.
> EBDA move OPTION uses 40:0e / 40:13. Ctrl Break
> handling *uses* 40:71... Treating 1 drive as both
> A: and B: uses 50:04. Boot drive is at 50:e0 and
> timer tick is *expected* at 40:6c. The 50:xx are
> written by DOS but 40:xx are expected from BIOS.
> This SF.Net email is sponsored by the Moblin Your Move Developer's
> Build the coolest Linux based applications with Moblin SDK & win great
> Grand prize is a trip for two to an Open Source event anywhere in the
> Freedos-user mailing list
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
Freedos-user mailing list