This patch catches all reads and writes to VGA controller and passes them to VGA emulation, which now dumps a message when unsupported registers are accessed. This is because I believe that VGA emulation is the only place that should know what VGA registers Wine supports and what should be done with them. Besides, if this patch is accepted I might even try to add support for few registers ;) The patch also catches 16/32 bit reads and writes to VGA registers and complains to user (some programs really do use 16-bit writes to VGA registers) which is a much better thing to do than to silently ignore these. And finally, for some reason, VGA emulation used a strange set of flags when creating a window for DirectDraw. I changed these flags to those I have seen in nearly all DirectDraw examples so that there won't be problems when DirectDraw code is updated. For example, if OWN_WINDOW is disabled in DirectDraw code, the old flags would have caused problems... Changelog: Redirect all reads and writes to VGA controller to VGA emulation. Catch and report 16/32-bit reads/writes to VGA controller. Use correct flags when creating full screen DirectDraw window for VGA. Index: dlls/winedos/vga.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/vga.c,v retrieving revision 1.13 diff -b -u -r1.13 vga.c --- dlls/winedos/vga.c 31 May 2002 23:40:54 -0000 1.13 +++ dlls/winedos/vga.c 22 Jun 2002 10:11:18 -0000 @@ -269,7 +269,7 @@ return; } if (!vga_hwnd) { - vga_hwnd = CreateWindowExA(0,"STATIC","WINEDOS VGA",WS_POPUP|WS_BORDER|WS_CAPTION|WS_SYS MENU,0,0,par->Xres,par->Yres,0,0,0,NULL); + vga_hwnd = CreateWindowExA(0,"STATIC","WINEDOS VGA",WS_POPUP|WS_VISIBLE,0,0,par->Xres,pa r->Yres,0,0,0,NULL); if (!vga_hwnd) { ERR("Failed to create user window.\n"); IDirectDraw_Release(lpddraw); @@ -768,6 +768,8 @@ palcnt=0; } break; + default: + FIXME("Unsupported VGA register: 0x%04x (value 0x%02x)\n", port, val); } } @@ -789,6 +791,7 @@ break; default: ret=0xff; + FIXME("Unsupported VGA register: 0x%04x\n", port); } return ret; } Index: dlls/winedos/ioports.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/ioports.c,v retrieving revision 1.4 diff -b -u -r1.4 ioports.c --- dlls/winedos/ioports.c 31 May 2002 23:40:54 -0000 1.4 +++ dlls/winedos/ioports.c 22 Jun 2002 10:09:48 -0000 @@ -24,7 +24,9 @@ #include "windef.h" #include "dosexe.h" #include "vga.h" +#include "wine/debug.h" +WINE_DEFAULT_DEBUG_CHANNEL(int); /********************************************************************** * DOSVM_inport @@ -41,8 +43,40 @@ case 0x22e: *res = (DWORD)SB_ioport_in( port ); break; - case 0x3ba: + case 0x3c0: + case 0x3c1: + case 0x3c2: + case 0x3c3: + case 0x3c4: + case 0x3c5: + case 0x3c6: + case 0x3c7: + case 0x3c8: + case 0x3c9: + case 0x3ca: + case 0x3cb: + case 0x3cc: + case 0x3cd: + case 0x3ce: + case 0x3cf: + case 0x3d0: + case 0x3d1: + case 0x3d2: + case 0x3d3: + case 0x3d4: + case 0x3d5: + case 0x3d6: + case 0x3d7: + case 0x3d8: + case 0x3d9: case 0x3da: + case 0x3db: + case 0x3dc: + case 0x3dd: + case 0x3de: + case 0x3df: + if(size > 1) + FIXME("Trying to read more than one byte from VGA!\n"); *res = (DWORD)VGA_ioport_in( port ); break; case 0x00: @@ -102,8 +136,40 @@ case 0x22c: SB_ioport_out( port, (BYTE)value ); break; + case 0x3c0: + case 0x3c1: + case 0x3c2: + case 0x3c3: + case 0x3c4: + case 0x3c5: + case 0x3c6: + case 0x3c7: case 0x3c8: case 0x3c9: + case 0x3ca: + case 0x3cb: + case 0x3cc: + case 0x3cd: + case 0x3ce: + case 0x3cf: + case 0x3d0: + case 0x3d1: + case 0x3d2: + case 0x3d3: + case 0x3d4: + case 0x3d5: + case 0x3d6: + case 0x3d7: + case 0x3d8: + case 0x3d9: + case 0x3da: + case 0x3db: + case 0x3dc: + case 0x3dd: + case 0x3de: + case 0x3df: + if(size > 1) + FIXME("Trying to write more than one byte to VGA!\n"); VGA_ioport_out( port, (BYTE)value ); break; case 0x00: -- Jukka Heinonen <http://www.iki.fi/jhei/>