PATCH: MSDOS VGA mode
Marcus Meissner
marcus at jet.franken.de
Sat Jun 23 16:33:17 CDT 2001
On Fri, Jun 22, 2001 at 02:44:06PM +0200, Ove Kaaven wrote:
>
> On Fri, 22 Jun 2001, Marcus Meissner wrote:
>
> > Not really, I do see int9 delivered to monkey1.exe and monkey1.exe in turn
> > doing inb(0x60) and the +io debugging giving back the correct scancode
> > (0x1c on press and 0x9c on release).
>
> After reading the scancode, however, it determintes that it was not a
> cursor key, so it passes it on to the DOS int9 handler for default
> processing there. Then it expects the keypress to appear in the BIOS
> keyboard buffer.
I forgot I am also using the following additional patch (probably slightly
incorrect for special keys):
Index: dosvm.c
===================================================================
RCS file: /home/wine/wine/dlls/winedos/dosvm.c,v
retrieving revision 1.6
diff -u -r1.6 dosvm.c
--- dosvm.c 2001/05/14 20:09:38 1.6
+++ dosvm.c 2001/06/23 06:49:02
@@ -388,6 +388,7 @@
static void DOSVM_ProcessMessage(MSG *msg)
{
BYTE scan = 0;
+ BYTE xchar;
TRACE_(int)("got message %04x, wparam=%08x, lparam=%08lx\n",msg->message,msg->wParam,msg->lParam);
if ((msg->message>=WM_MOUSEFIRST)&&
@@ -408,7 +409,8 @@
* should check for them */
INT_Int09SendScan(0xE0,0);
}
- INT_Int09SendScan(scan,0);
+ xchar = msg->wParam & 0xff;
+ INT_Int09SendScan(scan,xchar);
break;
}
}
This code is putting 0x0d/0x1c pairs into the keyboard buffer.
> (You might have seen that if you also ran --debugmsg +int)
I see those, and I see it appended to the keyboard buffer (even looking
directly at the DOS image under /tmp/filexxxxx).
However, monkey1.exe does not seem to read out this buffer, some
keypresses later it is full. The BIOS data structures appear all ok.
Trace snippet:
trace:int:DOSVM_SendQueuedEvent dispatching IRQ 1
trace:int:DOSVM_SendQueuedEvent clearing Pending flag
trace:int:IO_inport 1-byte value from port 0x60
trace:int:IO_inport returning ( 0x1c )
0x60 < 1c @ 201a:1632
trace:int:DOSVM_SimulateInt builtin interrupt 09 has been branched to
trace:int:INT_Int09Handler scan=1c
fixme:int16:INT_Int16AddChar (0d,1c)
fixme:int16:INT_Int16AddChar (0d,1c) at offset 30
trace:int:DOSVM_PIC_ioport_out received EOI for current IRQ, clearing
trace:int:DOSVM_PIC_ioport_out another event pending, signalling dosmod
trace:int:DOSVM_Process DOS module caught signal 12
trace:int:DOSVM_Process setting Pending flag, interrupts are currently enabled
trace:int:DOSVM_SendQueuedEvent dispatching IRQ 1
trace:int:DOSVM_SendQueuedEvent clearing Pending flag
trace:int:IO_inport 1-byte value from port 0x60
trace:int:IO_inport returning ( 0x9c )
0x60 < 9c @ 201a:1632
trace:int:DOSVM_SimulateInt builtin interrupt 09 has been branched to
trace:int:INT_Int09Handler scan=9c
trace:int:DOSVM_PIC_ioport_out received EOI for current IRQ, clearing
Very puzzling.
> I think we managed to get monkey island to start by fixing that keyboard
> code. However, because of that annoying wineserver assertion failure, no
> DOS apps like this run with my code anymore, so I can't check. Unless you
> want to fix the wineserver assertion at server/console.c line 194, so
> CONSOLE_make_complex can run in one thread while another winedos thread
> keeps waiting for input?
I do not get that assertion? I get keyboard input directly from the
DirectDraw window with above message loop.
Ciao, Marcus
More information about the wine-devel
mailing list