From ab635b211f958b626a608ecd283d05aef2d649aa Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Sat, 14 Nov 1998 18:33:34 +0000 Subject: [PATCH] Added stubs for several VxDs / interrupts. --- if1632/wprocs.spec | 5 ++- msdos/Makefile.in | 1 + msdos/int2f.c | 6 ++++ msdos/int41.c | 50 ++++++++++++++++++++++++++++++ msdos/vxd.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 5 files changed, 146 insertions(+), 5 deletions(-) create mode 100644 msdos/int41.c diff --git a/if1632/wprocs.spec b/if1632/wprocs.spec index 230e995de53..8f6b0baf37e 100644 --- a/if1632/wprocs.spec +++ b/if1632/wprocs.spec @@ -85,7 +85,7 @@ type win16 162 register INT_Int3eHandler(word) BUILTIN_DefaultIntHandler 163 register INT_Int3fHandler(word) BUILTIN_DefaultIntHandler 164 register INT_Int40Handler(word) BUILTIN_DefaultIntHandler -165 register INT_Int41Handler(word) BUILTIN_DefaultIntHandler +165 register INT_Int41Handler(word) INT_Int41Handler 166 register INT_Int42Handler(word) BUILTIN_DefaultIntHandler 167 register INT_Int43Handler(word) BUILTIN_DefaultIntHandler 168 register INT_Int44Handler(word) BUILTIN_DefaultIntHandler @@ -285,10 +285,13 @@ type win16 405 register VXD_Timer() VXD_Timer 409 register VXD_Reboot() VXD_Reboot 410 register VXD_VDD() VXD_VDD +412 register VXD_VMD() VXD_VMD 414 register VXD_Comm() VXD_Comm #415 register VXD_Printer() VXD_Printer 423 register VXD_Shell() VXD_Shell 433 register VXD_PageFile() VXD_PageFile +438 register VXD_APM() VXD_APM 445 register VXD_Win32s() VXD_Win32s 451 register VXD_ConfigMG() VXD_ConfigMG +455 register VXD_Enable() VXD_Enable 1490 register VXD_TimerAPI() VXD_TimerAPI diff --git a/msdos/Makefile.in b/msdos/Makefile.in index 36b15b8ac2f..06d1288f208 100644 --- a/msdos/Makefile.in +++ b/msdos/Makefile.in @@ -27,6 +27,7 @@ C_SRCS = \ int2a.c \ int2f.c \ int3d.c \ + int41.c \ int4b.c \ int5c.c \ interrupts.c \ diff --git a/msdos/int2f.c b/msdos/int2f.c index 43e74177656..522f1df1cfd 100644 --- a/msdos/int2f.c +++ b/msdos/int2f.c @@ -158,6 +158,8 @@ void WINAPI INT_Int2fHandler( CONTEXT *context ) break; /* not installed */ case 0x12: /* realtime compression interface */ break; /* not installed */ + case 0x32: /* patch IO.SYS (???) */ + break; /* we have no IO.SYS, so we can't patch it :-/ */ default: INT_BARF( context, 0x2f ); } @@ -252,6 +254,10 @@ static void do_int2f_16( CONTEXT *context ) CX_reg(context) = (GetWinFlags() & WF_ENHANCED) ? 3 : 2; break; + case 0x0b: /* Identify Windows-aware TSRs */ + /* we don't have any pre-Windows TSRs */ + break; + case 0x11: /* Get Shell Parameters - (SHELL= in CONFIG.SYS) */ /* We can mock this up. But not today... */ FIXME(int, "Get Shell Parameters\n"); diff --git a/msdos/int41.c b/msdos/int41.c new file mode 100644 index 00000000000..1f4d2f37b56 --- /dev/null +++ b/msdos/int41.c @@ -0,0 +1,50 @@ +/* + * DOS interrupt 41h handler -- Windows Kernel Debugger + * + * Check debugsys.inc from the DDK for docu. + */ + +#include "miscemu.h" + +/*********************************************************************** + * INT_Int41Handler + * + */ +void WINAPI INT_Int41Handler( CONTEXT *context ) +{ + if ( ISV86(context) ) + { + /* Real-mode debugger services */ + switch ( AX_reg(context) ) + { + default: + INT_BARF( context, 0x41 ); + break; + } + } + else + { + /* Protected-mode debugger services */ + switch ( AX_reg(context) ) + { + case 0x50: + case 0x150: + case 0x51: + case 0x52: + case 0x152: + case 0x59: + case 0x5a: + case 0x5b: + case 0x5c: + case 0x5d: + /* Notifies the debugger of a lot of stuff. We simply ignore it + for now, but some of the info might actually be useful ... */ + break; + + default: + INT_BARF( context, 0x41 ); + break; + } + } +} + diff --git a/msdos/vxd.c b/msdos/vxd.c index 35eaeeb7ab5..39744d37c1e 100644 --- a/msdos/vxd.c +++ b/msdos/vxd.c @@ -134,7 +134,7 @@ void VXD_VDD ( CONTEXT *context ) { unsigned service = AX_reg(context); - TRACE(vxd,"[%04x] VMM \n", (UINT16)service); + TRACE(vxd,"[%04x] VDD \n", (UINT16)service); switch(service) { @@ -149,6 +149,27 @@ void VXD_VDD ( CONTEXT *context ) } /*********************************************************************** + * VXD_VMD + */ +void VXD_VMD ( CONTEXT *context ) +{ + unsigned service = AX_reg(context); + + TRACE(vxd,"[%04x] VMD \n", (UINT16)service); + + switch(service) + { + case 0x0000: /* version */ + AX_reg(context) = VXD_WinVersion(); + RESET_CFLAG(context); + break; + + default: + VXD_BARF( context, "VMD" ); + } +} + +/*********************************************************************** * VXD_Shell */ void WINAPI VXD_Shell( CONTEXT *context ) @@ -170,7 +191,6 @@ void WINAPI VXD_Shell( CONTEXT *context ) case 0x0003: case 0x0004: case 0x0005: - TRACE(vxd,"VxD Shell: EDX = %08lx\n",EDX_reg(context)); VXD_BARF( context, "shell" ); break; @@ -200,9 +220,28 @@ void WINAPI VXD_Shell( CONTEXT *context ) case 0x0014: case 0x0015: case 0x0016: + VXD_BARF( context, "SHELL" ); + break; + + /* the new Win95 shell API */ + case 0x0100: /* get version */ + AX_reg(context) = VXD_WinVersion(); + break; + + case 0x0104: /* retrieve Hook_Properties list */ + case 0x0105: /* call Hook_Properties callbacks */ + VXD_BARF( context, "SHELL" ); + break; + + case 0x0106: /* install timeout callback */ + TRACE( vxd, "VxD Shell: ignoring shell callback (%ld sec.)\n", + EBX_reg( context ) ); + SET_CFLAG(context); + break; + + case 0x0107: /* get version of any VxD */ default: - TRACE(vxd,"VxD Shell: EDX = %08lx\n",EDX_reg(context)); - VXD_BARF( context, "shell"); + VXD_BARF( context, "SHELL" ); break; } } @@ -322,6 +361,48 @@ void VXD_ConfigMG ( CONTEXT *context ) } /*********************************************************************** + * VXD_Enable + */ +void VXD_Enable ( CONTEXT *context ) +{ + unsigned service = AX_reg(context); + + TRACE(vxd,"[%04x] Enable \n", (UINT16)service); + + switch(service) + { + case 0x0000: /* version */ + AX_reg(context) = VXD_WinVersion(); + RESET_CFLAG(context); + break; + + default: + VXD_BARF( context, "ENABLE" ); + } +} + +/*********************************************************************** + * VXD_APM + */ +void VXD_APM ( CONTEXT *context ) +{ + unsigned service = AX_reg(context); + + TRACE(vxd,"[%04x] APM \n", (UINT16)service); + + switch(service) + { + case 0x0000: /* version */ + AX_reg(context) = VXD_WinVersion(); + RESET_CFLAG(context); + break; + + default: + VXD_BARF( context, "APM" ); + } +} + +/*********************************************************************** * VXD_Win32s * * This is an implementation of the services of the Win32s VxD. -- 2.11.4.GIT