This rather boring patch moves a bunch of simple interrupt handlers to winedos. Changelog: Move simple interrupt handlers to winedos. Index: dlls/winedos/Makefile.in =================================================================== RCS file: /home/wine/wine/dlls/winedos/Makefile.in,v retrieving revision 1.16 diff -u -r1.16 Makefile.in --- dlls/winedos/Makefile.in 30 Oct 2002 23:40:13 -0000 1.16 +++ dlls/winedos/Makefile.in 7 Nov 2002 17:20:51 -0000 @@ -15,16 +15,23 @@ dma.c \ dosaspi.c \ dosvm.c \ + fpu.c \ int09.c \ int10.c \ + int12.c \ + int13.c \ int16.c \ int17.c \ int19.c \ + int1a.c \ int20.c \ int21.c \ int29.c \ + int2a.c \ int31.c \ int33.c \ + int41.c \ + int4b.c \ int67.c \ interrupts.c \ ioports.c \ Index: dlls/winedos/interrupts.c =================================================================== RCS file: /home/wine/wine/dlls/winedos/interrupts.c,v retrieving revision 1.6 diff -u -r1.6 interrupts.c --- dlls/winedos/interrupts.c 6 Nov 2002 21:56:52 -0000 1.6 +++ dlls/winedos/interrupts.c 7 Nov 2002 17:22:36 -0000 @@ -26,27 +26,10 @@ /*********************************************************************** * DOSVM_Int11Handler (WINEDOS16.117) - * DOSVM_Int12Handler (WINEDOS16.118) - * DOSVM_Int13Handler (WINEDOS16.119) * DOSVM_Int15Handler (WINEDOS16.121) - * DOSVM_Int1aHandler (WINEDOS16.126) * DOSVM_Int25Handler (WINEDOS16.137) * DOSVM_Int26Handler (WINEDOS16.138) - * DOSVM_Int2aHandler (WINEDOS16.142) * DOSVM_Int2fHandler (WINEDOS16.147) - * DOSVM_Int34Handler (WINEDOS16.152) - * DOSVM_Int35Handler (WINEDOS16.153) - * DOSVM_Int36Handler (WINEDOS16.154) - * DOSVM_Int37Handler (WINEDOS16.155) - * DOSVM_Int38Handler (WINEDOS16.156) - * DOSVM_Int39Handler (WINEDOS16.157) - * DOSVM_Int3aHandler (WINEDOS16.158) - * DOSVM_Int3bHandler (WINEDOS16.159) - * DOSVM_Int3cHandler (WINEDOS16.160) - * DOSVM_Int3dHandler (WINEDOS16.161) - * DOSVM_Int3eHandler (WINEDOS16.162) - * DOSVM_Int41Handler (WINEDOS16.165) - * DOSVM_Int4bHandler (WINEDOS16.175) * DOSVM_Int5cHandler (WINEDOS16.192) * * FIXME: Interrupt handlers for interrupts implemented in other DLLs. @@ -54,27 +37,10 @@ * been moved to winedos. */ void WINAPI DOSVM_Int11Handler( CONTEXT86 *context ) { INT_Int11Handler(context); } -void WINAPI DOSVM_Int12Handler( CONTEXT86 *context ) { INT_Int12Handler(context); } -void WINAPI DOSVM_Int13Handler( CONTEXT86 *context ) { INT_Int13Handler(context); } void WINAPI DOSVM_Int15Handler( CONTEXT86 *context ) { INT_Int15Handler(context); } -void WINAPI DOSVM_Int1aHandler( CONTEXT86 *context ) { INT_Int1aHandler(context); } void WINAPI DOSVM_Int25Handler( CONTEXT86 *context ) { INT_Int25Handler(context); } void WINAPI DOSVM_Int26Handler( CONTEXT86 *context ) { INT_Int26Handler(context); } -void WINAPI DOSVM_Int2aHandler( CONTEXT86 *context ) { INT_Int2aHandler(context); } void WINAPI DOSVM_Int2fHandler( CONTEXT86 *context ) { INT_Int2fHandler(context); } -void WINAPI DOSVM_Int34Handler( CONTEXT86 *context ) { INT_Int34Handler(context); } -void WINAPI DOSVM_Int35Handler( CONTEXT86 *context ) { INT_Int35Handler(context); } -void WINAPI DOSVM_Int36Handler( CONTEXT86 *context ) { INT_Int36Handler(context); } -void WINAPI DOSVM_Int37Handler( CONTEXT86 *context ) { INT_Int37Handler(context); } -void WINAPI DOSVM_Int38Handler( CONTEXT86 *context ) { INT_Int38Handler(context); } -void WINAPI DOSVM_Int39Handler( CONTEXT86 *context ) { INT_Int39Handler(context); } -void WINAPI DOSVM_Int3aHandler( CONTEXT86 *context ) { INT_Int3aHandler(context); } -void WINAPI DOSVM_Int3bHandler( CONTEXT86 *context ) { INT_Int3bHandler(context); } -void WINAPI DOSVM_Int3cHandler( CONTEXT86 *context ) { INT_Int3cHandler(context); } -void WINAPI DOSVM_Int3dHandler( CONTEXT86 *context ) { INT_Int3dHandler(context); } -void WINAPI DOSVM_Int3eHandler( CONTEXT86 *context ) { INT_Int3eHandler(context); } -void WINAPI DOSVM_Int41Handler( CONTEXT86 *context ) { INT_Int41Handler(context); } -void WINAPI DOSVM_Int4bHandler( CONTEXT86 *context ) { INT_Int4bHandler(context); } void WINAPI DOSVM_Int5cHandler( CONTEXT86 *context ) { NetBIOSCall16(context); } static FARPROC16 DOSVM_Vectors16[256]; Index: dlls/winedos/dosexe.h =================================================================== RCS file: /home/wine/wine/dlls/winedos/dosexe.h,v retrieving revision 1.12 diff -u -r1.12 dosexe.h --- dlls/winedos/dosexe.h 28 Oct 2002 20:12:40 -0000 1.12 +++ dlls/winedos/dosexe.h 7 Nov 2002 17:23:50 -0000 @@ -83,6 +83,19 @@ extern void DMA_ioport_out( WORD port, BYTE val ); extern BYTE DMA_ioport_in( WORD port ); +/* fpu.c */ +extern void WINAPI DOSVM_Int34Handler(CONTEXT86*); +extern void WINAPI DOSVM_Int35Handler(CONTEXT86*); +extern void WINAPI DOSVM_Int36Handler(CONTEXT86*); +extern void WINAPI DOSVM_Int37Handler(CONTEXT86*); +extern void WINAPI DOSVM_Int38Handler(CONTEXT86*); +extern void WINAPI DOSVM_Int39Handler(CONTEXT86*); +extern void WINAPI DOSVM_Int3aHandler(CONTEXT86*); +extern void WINAPI DOSVM_Int3bHandler(CONTEXT86*); +extern void WINAPI DOSVM_Int3cHandler(CONTEXT86*); +extern void WINAPI DOSVM_Int3dHandler(CONTEXT86*); +extern void WINAPI DOSVM_Int3eHandler(CONTEXT86*); + /* int09.c */ extern void WINAPI DOSVM_Int09Handler(CONTEXT86*); extern void WINAPI DOSVM_Int09SendScan(BYTE scan,BYTE ascii); @@ -92,6 +105,15 @@ extern void WINAPI DOSVM_Int10Handler(CONTEXT86*); extern void WINAPI DOSVM_PutChar(BYTE ascii); +/* int12.c */ +extern void WINAPI DOSVM_Int12Handler(CONTEXT86*); + +/* int13.c */ +extern void WINAPI DOSVM_Int13Handler(CONTEXT86*); + +/* int1a.c */ +extern void WINAPI DOSVM_Int1aHandler(CONTEXT86*); + /* int16.c */ extern void WINAPI DOSVM_Int16Handler(CONTEXT86*); extern int WINAPI DOSVM_Int16ReadChar(BYTE*ascii,BYTE*scan,BOOL peek); @@ -112,6 +134,9 @@ /* int29.c */ extern void WINAPI DOSVM_Int29Handler(CONTEXT86*); +/* int2a.c */ +extern void WINAPI DOSVM_Int2aHandler(CONTEXT86*); + /* int31.c */ extern void WINAPI DOSVM_Int31Handler(CONTEXT86*); extern BOOL DOSVM_IsDos32(void); @@ -120,6 +145,12 @@ extern void WINAPI DOSVM_Int33Handler(CONTEXT86*); extern void WINAPI DOSVM_Int33Message(UINT,WPARAM,LPARAM); extern void WINAPI DOSVM_Int33Console(MOUSE_EVENT_RECORD*); + +/* int41.c */ +extern void WINAPI DOSVM_Int41Handler(CONTEXT86*); + +/* int4b.c */ +extern void WINAPI DOSVM_Int4bHandler(CONTEXT86*); /* int67.c */ extern void WINAPI DOSVM_Int67Handler(CONTEXT86*); --- /dev/null Thu Jan 1 02:00:00 1970 +++ dlls/winedos/fpu.c Thu Nov 7 18:19:22 2002 @@ -0,0 +1,240 @@ +/* + * DOS interrupt 34->3e handlers. All FPU interrupt code should be + * moved into this file. + * + * Copyright 2002 Robert 'Admiral' Coeyman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdlib.h> +#include "msdos.h" +#include "miscemu.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(int); + +/* + * The actual work is done by a single routine. + */ + +static void FPU_ModifyCode(CONTEXT86 *context, BYTE Opcode); + + +/********************************************************************** + * DOSVM_Int34Handler (WINEDOS16.152) + * + * Handler for int 34 (FLOATING POINT EMULATION - Opcode 0xd8). + * + * The interrupt list isn't specific about what this interrupt + * actually does. [ interrup.m ] + */ +void WINAPI DOSVM_Int34Handler(CONTEXT86 *context) +{ + TRACE("Int 0x34 called-- FP opcode 0xd8"); + FPU_ModifyCode(context, 0xd8); +} + + +/********************************************************************** + * DOSVM_Int35Handler (WINEDOS16.153) + * + * Handler for int 35 (FLOATING POINT EMULATION - Opcode 0xd9). + * + * The interrupt list isn't specific about what this interrupt + * actually does. [ interrup.m ] + */ +void WINAPI DOSVM_Int35Handler(CONTEXT86 *context) +{ + TRACE("Int 0x35 called-- FP opcode 0xd9"); + FPU_ModifyCode(context, 0xd9); +} + + +/********************************************************************** + * DOSVM_Int36Handler (WINEDOS16.154) + * + * Handler for int 36 (FLOATING POINT EMULATION - Opcode 0xda). + * + * The interrupt list isn't specific about what this interrupt + * actually does. [ interrup.m ] + */ +void WINAPI DOSVM_Int36Handler(CONTEXT86 *context) +{ + TRACE("Int 0x36 called-- FP opcode 0xda"); + FPU_ModifyCode(context, 0xda); +} + + +/********************************************************************** + * DOSVM_Int37Handler (WINEDOS16.155) + * + * Handler for int 37 (FLOATING POINT EMULATION - Opcode 0xdb). + * + * The interrupt list isn't specific about what this interrupt + * actually does. [ interrup.m ] + */ +void WINAPI DOSVM_Int37Handler(CONTEXT86 *context) +{ + TRACE("Int 0x37 called-- FP opcode 0xdb"); + FPU_ModifyCode(context, 0xdb); +} + + +/********************************************************************** + * DOSVM_Int38Handler (WINEDOS16.156) + * + * Handler for int 38 (FLOATING POINT EMULATION - Opcode 0xdc). + * + * Between versions 3.0 and 5.01, the original PC-MOS API call that + * was here was moved to int 0xd4. + * + * The interrupt list isn't specific about what this interrupt + * actually does. [ interrup.m ] + */ +void WINAPI DOSVM_Int38Handler(CONTEXT86 *context) +{ + TRACE("Int 0x38 called-- FP opcode 0xdc"); + FPU_ModifyCode(context, 0xdc); +} + + +/********************************************************************** + * DOSVM_Int39Handler (WINEDOS16.157) + * + * Handler for int 39 (FLOATING POINT EMULATION - Opcode 0xdd). + * + * The interrupt list isn't specific about what this interrupt + * actually does. [ interrup.m ] + */ +void WINAPI DOSVM_Int39Handler(CONTEXT86 *context) +{ + TRACE("Int 0x39 called-- FP opcode 0xdd"); + FPU_ModifyCode(context, 0xdd); +} + + +/********************************************************************** + * DOSVM_Int3aHandler (WINEDOS16.158) + * + * Handler for int 3a (FLOATING POINT EMULATION - Opcode 0xde). + * + * The interrupt list isn't specific about what this interrupt + * actually does. [ interrup.m ] + */ +void WINAPI DOSVM_Int3aHandler(CONTEXT86 *context) +{ + TRACE("Int 0x3a called-- FP opcode 0xde"); + FPU_ModifyCode(context, 0xde); +} + + +/********************************************************************** + * DOSVM_Int3bHandler (WINEDOS16.159) + * + * Handler for int 3B (FLOATING POINT EMULATION - Opcode 0xdf). + * + * The interrupt list isn't specific about what this interrupt + * actually does. [ interrup.m ] + */ +void WINAPI DOSVM_Int3bHandler(CONTEXT86 *context) +{ + TRACE("Int 0x3b called-- FP opcode 0xdf"); + FPU_ModifyCode(context, 0xdf); +} + + +/********************************************************************** + * DOSVM_Int3cHandler (WINEDOS16.160) + * + * Handler for int 3C (FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE). + * + * Generated code is CD 3C xy mm ... (CD = int | 3C = this interrupt) + * xy is a modified ESC code and mm is the modR/M byte. + * xy byte seems to be encoded as ss011xxx or ss000xxx + * ss= segment override. + * 00 -> DS + * 01 -> SS + * 10 -> CS + * 11 -> ES + * + * 11011xxx should be the opcode instruction. + */ +void WINAPI DOSVM_Int3cHandler(CONTEXT86 *context) +{ + FIXME("Int 3C NOT Implemented"); + INT_BARF(context, 0x3c); +} + + +/********************************************************************** + * DOSVM_Int3dHandler (WINEDOS16.161) + * + * Handler for int 3D (FLOATING POINT EMULATION - Standalone FWAIT). + * + * Opcode 0x90 is a NOP. It just fills space where the 3D was. + */ +void WINAPI DOSVM_Int3dHandler(CONTEXT86 *context) +{ + TRACE("Int 0x3d called-- Standalone FWAIT"); + FPU_ModifyCode(context, 0x90); +} + + +/********************************************************************** + * DOSVM_Int3eHandler (WINEDOS16.162) + * + * FLOATING POINT EMULATION -- Borland "Shortcut" call. + * The two bytes following the int 3E instruction are + * the subcode and a NOP ( 0x90 ), except for subcodes DC and DE + * where the second byte is the register count. + * + * Direct access 4.0 modifies and does not restore this vector. + * + */ +void WINAPI DOSVM_Int3eHandler(CONTEXT86 *context) +{ + FIXME("Int 3E NOT Implemented"); + INT_BARF(context, 0x3e); +} + + +/********************************************************************** + * FPU_ModifyCode + * + * This is the function that inserts the 0x9b fwait instruction + * and the actual FPU opcode into the program. + * -A.C. + * + * Code thanks to Ove Kaaven + */ +static void FPU_ModifyCode(CONTEXT86 *context, BYTE Opcode) +{ + WORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp); + BYTE *code = CTX_SEG_OFF_TO_LIN(context, stack[1], stack[0]); + + /* + * All *NIX systems should have a real or kernel emulated FPU. + */ + + code[-2] = 0x9b; /* The fwait instruction */ + code[-1] = Opcode; /* Insert the opcode */ + + if ( stack[0] < 2 ) FIXME("Backed up over a segment boundry in FPU code."); + + stack[0] -= 2; /* back up the return address 2 bytes */ + + TRACE("Modified code in FPU int call to 0x9b 0x%x",Opcode); +} --- /dev/null Thu Jan 1 02:00:00 1970 +++ dlls/winedos/int12.c Thu Nov 7 18:31:10 2002 @@ -0,0 +1,15 @@ +/* + * BIOS interrupt 12h handler + */ + +#include "miscemu.h" + +/********************************************************************** + * DOSVM_Int12Handler (WINEDOS16.118) + * + * Handler for int 12h (get memory size). + */ +void WINAPI DOSVM_Int12Handler( CONTEXT86 *context ) +{ + SET_AX( context, 640 ); +} --- /dev/null Thu Jan 1 02:00:00 1970 +++ dlls/winedos/int13.c Thu Nov 7 18:32:26 2002 @@ -0,0 +1,100 @@ +/* + * BIOS interrupt 13h handler + * + * Copyright 1997 Andreas Mohr + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" + +#include <stdlib.h> +#include <sys/types.h> +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#include "winbase.h" +#include "winioctl.h" +#include "miscemu.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(int); + +static void DIOCRegs_2_CONTEXT( DIOC_REGISTERS *pIn, CONTEXT86 *pCxt ) +{ + memset( pCxt, 0, sizeof(*pCxt) ); + /* Note: segment registers == 0 means that CTX_SEG_OFF_TO_LIN + will interpret 32-bit register contents as linear pointers */ + + pCxt->ContextFlags=CONTEXT86_INTEGER|CONTEXT86_CONTROL; + pCxt->Eax = pIn->reg_EAX; + pCxt->Ebx = pIn->reg_EBX; + pCxt->Ecx = pIn->reg_ECX; + pCxt->Edx = pIn->reg_EDX; + pCxt->Esi = pIn->reg_ESI; + pCxt->Edi = pIn->reg_EDI; + + /* FIXME: Only partial CONTEXT86_CONTROL */ + pCxt->EFlags = pIn->reg_Flags; +} + +static void CONTEXT_2_DIOCRegs( CONTEXT86 *pCxt, DIOC_REGISTERS *pOut ) +{ + memset( pOut, 0, sizeof(DIOC_REGISTERS) ); + + pOut->reg_EAX = pCxt->Eax; + pOut->reg_EBX = pCxt->Ebx; + pOut->reg_ECX = pCxt->Ecx; + pOut->reg_EDX = pCxt->Edx; + pOut->reg_ESI = pCxt->Esi; + pOut->reg_EDI = pCxt->Edi; + + /* FIXME: Only partial CONTEXT86_CONTROL */ + pOut->reg_Flags = pCxt->EFlags; +} + +/********************************************************************** + * DOSVM_Int13Handler (WINEDOS16.119) + * + * Handler for int 13h (disk I/O). + */ +void WINAPI DOSVM_Int13Handler( CONTEXT86 *context ) +{ + HANDLE hVWin32; + DIOC_REGISTERS regs; + DWORD dwRet; + + hVWin32 = CreateFileA("\\\\.\\VWIN32", GENERIC_READ|GENERIC_WRITE, + 0, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0); + + if(hVWin32!=INVALID_HANDLE_VALUE) + { + CONTEXT_2_DIOCRegs( context, ®s); + + if(!DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_INT13, + ®s, sizeof regs, ®s, sizeof regs, &dwRet, NULL)) + DIOCRegs_2_CONTEXT(®s, context); + else + SET_CFLAG(context); + + CloseHandle(hVWin32); + } + else + { + ERR("Failed to open device VWIN32\n"); + SET_CFLAG(context); + } +} --- /dev/null Thu Jan 1 02:00:00 1970 +++ dlls/winedos/int1a.c Thu Nov 7 18:30:31 2002 @@ -0,0 +1,128 @@ +/* + * BIOS interrupt 1ah handler + * + * Copyright 1993 Erik Bos + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" +#include "wine/port.h" + +#include <time.h> +#ifdef HAVE_SYS_TIME_H +# include <sys/time.h> +#endif +#include <stdlib.h> +#include "miscemu.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(int); + +#define BCD_TO_BIN(x) ((x&15) + (x>>4)*10) +#define BIN_TO_BCD(x) ((x%10) + ((x/10)<<4)) + + +/********************************************************************** + * INT1A_GetTicksSinceMidnight + * + * Return number of clock ticks since midnight. + */ +DWORD INT1A_GetTicksSinceMidnight(void) +{ + struct tm *bdtime; + struct timeval tvs; + time_t seconds; + + /* This should give us the (approximately) correct + * 18.206 clock ticks per second since midnight. + */ + gettimeofday( &tvs, NULL ); + seconds = tvs.tv_sec; + bdtime = localtime( &seconds ); + return (((bdtime->tm_hour * 3600 + bdtime->tm_min * 60 + + bdtime->tm_sec) * 18206) / 1000) + + (tvs.tv_usec / 54927); +} + + +/********************************************************************** + * DOSVM_Int1aHandler (WINEDOS16.126) + * + * Handler for int 1ah + * 0x00 - 0x07 - date and time + * 0x?? - 0x?? - Microsoft Real Time Compression Interface + */ +void WINAPI DOSVM_Int1aHandler( CONTEXT86 *context ) +{ + time_t ltime; + DWORD ticks; + struct tm *bdtime; + + switch(AH_reg(context)) + { + case 0x00: + ticks = INT1A_GetTicksSinceMidnight(); + SET_CX( context, HIWORD(ticks) ); + SET_DX( context, LOWORD(ticks) ); + SET_AX( context, 0 ); /* No midnight rollover */ + TRACE("int1a: AH=00 -- ticks=%ld\n", ticks); + break; + + case 0x02: + ltime = time(NULL); + bdtime = localtime(<ime); + + SET_CX( context, (BIN_TO_BCD(bdtime->tm_hour)<<8) | + BIN_TO_BCD(bdtime->tm_min) ); + SET_DX( context, (BIN_TO_BCD(bdtime->tm_sec)<<8) ); + + case 0x04: + ltime = time(NULL); + bdtime = localtime(<ime); + SET_CX( context, (BIN_TO_BCD(bdtime->tm_year/100)<<8) | + BIN_TO_BCD((bdtime->tm_year-1900)%100) ); + SET_DX( context, (BIN_TO_BCD(bdtime->tm_mon)<<8) | + BIN_TO_BCD(bdtime->tm_mday) ); + break; + + /* setting the time,date or RTC is not allow -EB */ + case 0x01: + /* set system time */ + case 0x03: + /* set RTC time */ + case 0x05: + /* set RTC date */ + case 0x06: + /* set ALARM */ + case 0x07: + /* cancel ALARM */ + break; + + case 0xb0: /* Microsoft Real Time Compression */ + switch AL_reg(context) + { + case 0x01: + /* not present */ + break; + default: + INT_BARF(context, 0x1a); + } + break; + + default: + INT_BARF( context, 0x1a ); + } +} --- /dev/null Thu Jan 1 02:00:00 1970 +++ dlls/winedos/int2a.c Thu Nov 7 18:29:49 2002 @@ -0,0 +1,27 @@ +/* + * DOS interrupt 2ah handler + */ + +#include <stdlib.h> +#include "msdos.h" +#include "miscemu.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(int); + +/********************************************************************** + * DOSVM_Int2aHandler (WINEDOS16.142) + * + * Handler for int 2ah (network). + */ +void WINAPI DOSVM_Int2aHandler( CONTEXT86 *context ) +{ + switch(AH_reg(context)) + { + case 0x00: /* NETWORK INSTALLATION CHECK */ + break; + + default: + INT_BARF( context, 0x2a ); + } +} --- /dev/null Thu Jan 1 02:00:00 1970 +++ dlls/winedos/int41.c Thu Nov 7 18:23:05 2002 @@ -0,0 +1,71 @@ +/* + * DOS interrupt 41h handler -- Windows Kernel Debugger + * + * Check debugsys.inc from the DDK for docu. + * + * Copyright 1998 Ulrich Weigand + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdio.h> +#include "miscemu.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(int); + +/*********************************************************************** + * DOSVM_Int41Handler (WINEDOS16.165) + * + */ +void WINAPI DOSVM_Int41Handler( CONTEXT86 *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 0x4f: + 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; + } + } +} + --- /dev/null Thu Jan 1 02:00:00 1970 +++ dlls/winedos/int4b.c Thu Nov 7 18:27:13 2002 @@ -0,0 +1,29 @@ +/* + * DOS interrupt 4bh handler + */ + +#include <stdio.h> +#include "miscemu.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(int); + +/*********************************************************************** + * DOSVM_Int4bHandler (WINEDOS16.175) + * + */ +void WINAPI DOSVM_Int4bHandler( CONTEXT86 *context ) +{ + switch(AH_reg(context)) + { + case 0x81: /* Virtual DMA Spec (IBM SCSI interface) */ + if(AL_reg(context) != 0x02) /* if not install check */ + { + SET_CFLAG(context); + SET_AL( context, 0x0f ); /* function is not implemented */ + } + break; + default: + INT_BARF(context, 0x4b); + } +} -- Jukka Heinonen <http://www.iki.fi/jhei/>