Mail Archives: djgpp/1994/03/29/15:33:15
The VESA graphics driver built into go32 v1.11(.maint4) does not work
with my SVGA: the VESA modes reported by VESAget(Mode)Info are not
added to the list of supported graphics modes. Tracing go32 with DOS
DEBUG.EXE revealed the following reason:
The VESA BIOS of this (Cirrus Logic True Color) VGA returns the list of
video modes (to which VgaInfoBlock.VideoModePtr points) in the same 256
byte area as the VgaInfoBlock itself (in the reserved or unused part starting
at offset 0x12). This list is then used by do_driver_init() to call
VESAgetModeInfo for each mode. However, VESAgetModeInfo uses the same
256 byte area as VESAgetInfo and thus overwrites the list, still being in
use.
The driver should use different areas for both data blocks or make a local
copy of the video mode list (similar to ndrivers/vesainfo.com, which works
correctly with my VGA).
As a temporary solution I have patched vesadrv.vdr to use different data
areas. For those who have the same problem: you have to change the bytes at
offset 0e3h, 0f8h and 0103h from 0dh to 0eh and increase the file size
by 0100h. This can be done with debug for example:
debug vesadrv.vdr < patch.inp
---------- patch.inp ----------
n vesadrv2.vdr
e1e3
e
e1f8
e
e203
e
ffe6l100 0
rcx
fe6
w
q
-------------------------------
Of course you have to set the driver option of the GO32 environment variable
to point to the patched driver.
BTW, there is also a bug in the (obsolete?) vesainfo.c version in the
libgrx/drivers directory:
the ModeInfoBlock structure is not padded to 256 byte. If the VESA BIOS
writes all 256 bytes (not only the currently defined lower part), the program
crashes, which is exactly what happens with my SVGA.
Bye,
Stefan.
--
stefan AT lis DOT e-technik DOT tu-muenchen DOT de
- Raw text -