Re: [OT] Crazy idea: Design open-source graphics chip

From: Helge Hafting
Date: Fri Jan 30 2004 - 15:58:07 EST


On Fri, Jan 30, 2004 at 12:40:38PM -0500, Timothy Miller wrote:
>
>
> Maciej W. Rozycki wrote:
> >On Fri, 30 Jan 2004, Timothy Miller wrote:
> >
> >
> >>>Another reason to drop VGA then - money.
> >>
> >>As soon as PC BIOS's don't require it, we can drop it.
> >
PC bioses don't need VGA and never did!
They use the int 0x10 handler provided by the graphichs card bios.
When you make the card - you get to write that bios. No problem!

I once used a dec rainbow - a pc with an ibm-incompatible screen.
The display memory was organized as a linked list of lines instead
of an array of characters. It came with its own special version
of msdos 2.11. Few ordinary dos programs would run on it,
beause most tried to access the "standard" 80x25 array instead
of using msdos for io. Those who did the right thing worked, though.

(An odd machine in other ways too - it had a z80 controlling the
floppies and a 8088 controlling the screen and harddisk.
Early 80's asymmetric multiprocessor :-)


> >
> > No PC BIOS recognizes a VGA. The PC/AT firmware uses int 0x10 to
> >communicate with the console and as long as there is a handler there,
> >console output works. Most systems will actually run without a handler,
> >too, but they'll usually complain to the speaker. The handler is provided
> >by the ROM firmware of the primary graphics adapter.
> >
> > Old PC/AT firmware actually did recognize a few display adapters, namely
> >the CGA and the MDA which had no own firmware. These days support for
> >these option is often absent, even though the setup program may provide an
> >option to select between CGA40/CGA80/MDA/none (the latter being equivalent
> >to an option such as an EGA or a VGA, providing its own firmware).
> >
>
> You're not entirely correct here. I attempted to write a VGA BIOS for a
> card which did not have hardware support for 80x25 text.
>
> I first tried intercepting int 0x10. I quickly discovered that most DOS
> programs bypass int 0x10 and write directly to the display memory. As a
> result, very little of what should have displayed actually did.
>
Sure, but we're not interested in "most dos programs", are we?
The pc bios bootup will work, it uses int 0x10.
lilo output will work.
linux kernel console output will work
X will work, either with the generic framebuffer driver, or with
a proper driver written for the open hardware.

> Next, I tried hanging off this timer interrupt. I had two copies of the
> text display, "now" and "what it was before". I would compare the
> characters and render any differences. This worked quite well for DOS,
> but the instant ANY OS switched to protected mode, they took over the
> interrupt and all console messages stopped. Actually, the same was true
> for int 0x10.
>
If you want DOS application compatibility or windows compatibility
then you might need VGA. But you started out talking about
open hardware for linux - and then you really don't need vga at all.
Not even an initial 80x25 character array. A kernel without vga
support (but some other console like fbcon) works fine.

> Even just the DOS shell command-line tends to bypass int 0x10 and write
> directly to display memory.
>
Depends on what version of dos, but you can always get freedos for which
source code is available - if dos matters to you. It is something
I only ever use for flashing bios upgrades.

> Furthermore, 640x480x16 simply won't happen at all without direct
> hardware support. Some things rely on that (or mode X or whatever) for
> initial splash screens.
>
Not in linux. Of course you can reserve the legacy vga memory region
and just live with the loss of splash screens in dos.

> In the PC world, too many assumptions are made about the hardware for
> any kind of software emulation to work.
>
Not in the pc world. The pc is only hardware.
The problem is the microsoft os world, but supporting that _isn't
necessary_ when you don't plan on high volumes. I guess you
could get windows going - it uses proper display drivers these days
even if the installer doesn't. Install with vga card, swap driver,
shutdown, swap cards, power-on or some such.

> The suggestion that a general-purpose CPU on the graphics card could be
> used to emulate it is correct, but the logic area of the general-purpose
> CPU is greater than that of the dedicated VGA hardware. Furthermore,
> you can't just "stick a Z80 onto the board", because multi-chip
> solutions up the board cost too much.

Thanks for the information, seems I don't know enough about board
manufacturing.


Helge Hafting
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/