Hi Hans,

> 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

> Although I use a commercial version a "light 8088 version" can
> be downloaded from www.ht-lab.com/freecores/cpu8086/cpu86.html

Nice... Includes tiny ROM, SRAM and UART from opencores.org and
SRAM is preloaded with a debugger :-). The non-free version even
has the other peripherals you mention... :-). Your free version
is only free for noncommercial use. Still interesting.

I notice that the size info for "compiled" VHDL FPGA can vary
a lot... The page lists 2300 Xilinx Spartan3 slices, 1100+3100
Xilinx Virtex5 slices, 4500 Altera Cyclone3 LE, 2900+900 LUTS
plus regs on Altera Stratix3, 7700 Actel Axcelerator cells or
10000-11000 Actel ProASIC3 or IgloAGL tiles. Up to 12-110 MHz.

The FAQ says there is no Linux / DOS port available for the
core... Well technically speaking you can use an existing
BIOS and an existing DOS but you are probably buys with the
details of this very project right now :-).

I would suggest renaming the x86 Interrupt List link into
"Ralf Brown's Interrupt List (RBIL) x86 Interrupt List".



> http://www.ht-lab.com/freeutils/mon88/mon88.html
>
> All the BIOS I/O calls (e.g. INT10,0E, INT21,01,03,09 etc)
> are redirected to one of the serial ports since...

Uhm int 21 is not a BIOS call. DOS uses int 10.2 / 9 / e
internally so if you implement those then CON output via
DOS will be okay as well. MS DOS uses int 10.2 / 9 while
FreeDOS uses int 10.e as far as I remember. If you load
NANSI then int 10.2 / 6 / 7 / 9 / e will be used. If you
use NANSI to switch screen modes, int 10.0 / 1 / 1112 / 12
will be used as well. Int 10.12 is used as check for EGA.

> 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...

Are you sure? I would expect that it is supported only for harddisk.

> service 08 is sufficient to get the system up and running and/or
> the OS  use service 25 to get the drive parameters...

Not really - without int 13.48, only CHS access will be used
so you are limited to max 8 GB disk size with a CHS geometry.
I had the impression that int 13.25 is PS/2 specific while
int 13.4n are the recommended functions for LBA drives :-).

> 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 int 41h.

Hmmm I cannot think of any DOS app that uses it. FDISK maybe?

> There is no support for a floppy or second hard disk.

Okay - then check the drive number and return an error for those.

> 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).

Nice.

> looking at your list it seems there is still some way to go :-(

I do not think so... You are probably almost there :-)



> > 40:0e, 1e, 6c, 71, 96,

You already have that... Set 40:0e to 0 to say "no EBDA".

> > int 08, 11-12, 1c (easy)

The timer irq calls int 8 which updates 40:6c and calls int 1c

Int 11 returns AX = BIOS equipment list with flags which tell
how many floppy / LPT / COM ports you have, whether you have
FPU, PS/2 mouse, EGA, joystick. A 386+ can have flags in EAX.

Int 12 returns AX = decimal 640 (hex 280) = amount of low RAM.
You have to tune FreeDOS if you have less than 256 kB or so.

> > 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

I assume you already have those - and you have no floppy
so you do not need to support int 1e I would hope...

> > 102+ keys FreeDOS also uses int 16 func 10-12 :-).

You can say that you have no 102+ keys via the 40:96 flags.

> > Optional: int 13 func 5, d, 15-18, 41-43, 48 and
> > int 14 func 0-3, int 17 func 0-2 - provide stubs!

Stubs are easy: You can return error codes here or
ignore the call and still return an okay status...
You can say via int 11 that you have no LPT / COM.

> > Int 15 functions 87, 88 and maybe c0, 24: HIMEMX
> > but "func 88 + A20 always on" should be enough...

Only if you want to use more than 640 kB of RAM. You
can also try 4DOS instead of our FreeCOM command.com
as ours works best if XMS is available. We also have
some version for 8086 without XMS swap with "CALL /S"
instead ("almost exist shell and restart it from disk
when the app is done") as alternative way to save RAM.

> > Some extra 40:nn for keyboard and textscreen and
> > more int 10 func and b800:0 make more apps happy.

Depends on which apps you use :-)

> > 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.

You say you already have those :-)

> > Several DOS apps will be happy if you have a text
> > screen buffer at b800:0 and some of the 40:xx...

It might be useful to have RAM in the area and some way
to check that for changes, to detect which apps try to
write to the screen via memory instead of using the BIOS.

40:4a / 84 / 17 / 1a / 1e / 80 / 82 / 0e / 13 / 71 / 6c
should probably be set, and 40:0 / 2 / ... / c can be 0.

Eric



-------------------------------------------------------------------------
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
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to