iProgramInCpp wrote:
VGA 640x480x16 is way too slow.
It is not. See
The Incredible Machine for example.
iProgramInCpp wrote:
What can I do?
Be more specific. First, what do you mean by 640x480x16?
- 16 colours? Then no VESA (nor BIOS as a matter of fact) needed, you can program the
VGA registers directly with IN/OUT (you will need proper SEQ and CRTC values calculated from the
timings for the desired mode). The
svgalib under Linux does this. Another example is
modex.c, which sets 320x240x256, a resolution not available via standard BIOS. Programming VGA registers should work on all VGA compatible video cards, but not on newer video cards (most notably on UEFI machines, where VGA register emulation is probably not available any more). If VGA 16 colour is what you meant, then don't switch planes for every pixel, only once per refresh.
- 16 bits? That uses a linear frame buffer, so there's no hardware slow-down at all. In this case video mode switching has nothing to do with refresh speed. You can't set a 16 bit mode without BIOS, unless you have a native driver. Technically BIOS is a set of drivers which provides you a common real mode interface for every peripheral.
Because both 640x480x16 (colours, 0x12) and 640x480x16 (bits, 0x111) are standard SVGA modes, you can set them up with exactly the same way, with exactly the same "Set Video Mode" BIOS function, no VESA BIOS (AH=0x4F) function needed. The only difference is, 16 bits mode is specific to every video chip, there's no common register set therefore no common IN/OUT alternative.
Cheers,
bzt