Commit fd33517a authored by Jukka Heinonen's avatar Jukka Heinonen Committed by Alexandre Julliard

Added support for DOS EMS memory.

parent 42dcd97e
......@@ -21,6 +21,7 @@ C_SRCS = \
int29.c \
int31.c \
int33.c \
int67.c \
ioports.c \
module.c \
vga.c \
......
......@@ -92,6 +92,10 @@ extern void WINAPI DOSVM_Int31Handler(CONTEXT86*);
extern void WINAPI DOSVM_Int33Handler(CONTEXT86*);
extern void WINAPI DOSVM_Int33Message(UINT,WPARAM,LPARAM);
/* int67.c */
extern void WINAPI DOSVM_Int67Handler(CONTEXT86*);
extern void WINAPI EMS_Ioctl_Handler(CONTEXT86*);
/* xms.c */
extern void WINAPI XMS_Handler(CONTEXT86*);
......
......@@ -603,7 +603,13 @@ static const INTPROC real_mode_handlers[] =
/* 18 */ 0, 0, INT_Int1aHandler, 0, 0, 0, 0, 0,
/* 20 */ DOSVM_Int20Handler, DOSVM_Int21Handler, 0, 0, 0, INT_Int25Handler, 0, 0,
/* 28 */ 0, DOSVM_Int29Handler, INT_Int2aHandler, 0, 0, 0, 0, INT_Int2fHandler,
/* 30 */ 0, DOSVM_Int31Handler, 0, DOSVM_Int33Handler
/* 30 */ 0, DOSVM_Int31Handler, 0, DOSVM_Int33Handler, 0, 0, 0, 0,
/* 38 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 40 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 48 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 50 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 58 */ 0, 0, 0, 0, 0, 0, 0, 0,
/* 60 */ 0, 0, 0, 0, 0, 0, 0, DOSVM_Int67Handler
};
......
......@@ -12,10 +12,41 @@
#include "miscemu.h"
#include "msdos.h"
#include "console.h"
#include "file.h"
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(int21);
void WINAPI DOSVM_Int21Handler_Ioctl( CONTEXT86 *context )
{
const DOS_DEVICE *dev = DOSFS_GetDeviceByHandle(
DosFileHandleToWin32Handle(BX_reg(context)) );
if (dev && !strcasecmp( dev->name, "EMMXXXX0" )) {
EMS_Ioctl_Handler(context);
return;
}
switch (AL_reg(context))
{
case 0x0b: /* SET SHARING RETRY COUNT */
TRACE("IOCTL - SET SHARING RETRY COUNT pause %d retries %d\n",
CX_reg(context), DX_reg(context));
if (!CX_reg(context))
{
AX_reg(context) = 1;
SET_CFLAG(context);
break;
}
DOSMEM_LOL()->sharing_retry_delay = CX_reg(context);
if (!DX_reg(context))
DOSMEM_LOL()->sharing_retry_count = DX_reg(context);
RESET_CFLAG(context);
break;
default:
DOS3Call( context );
}
}
/***********************************************************************
* DOSVM_Int21Handler
......@@ -114,23 +145,7 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
break;
case 0x44: /* IOCTL */
switch (AL_reg(context))
{
case 0x0b: /* SET SHARING RETRY COUNT */
TRACE("IOCTL - SET SHARING RETRY COUNT pause %d retries %d\n",
CX_reg(context), DX_reg(context));
if (!CX_reg(context))
{
AX_reg(context) = 1;
SET_CFLAG(context);
break;
}
DOSMEM_LOL()->sharing_retry_delay = CX_reg(context);
if (!DX_reg(context))
DOSMEM_LOL()->sharing_retry_count = DX_reg(context);
RESET_CFLAG(context);
break;
}
DOSVM_Int21Handler_Ioctl( context );
break;
case 0x4b: /* "EXEC" - LOAD AND/OR EXECUTE PROGRAM */
......
......@@ -78,7 +78,8 @@ static const DOS_DEVICE DOSFS_Devices[] =
{ "COM3", 0x80c0 },
{ "COM4", 0x80c0 },
{ "SCSIMGR$", 0xc0c0 },
{ "HPSCAN", 0xc0c0 }
{ "HPSCAN", 0xc0c0 },
{ "EMMXXXX0", 0x0000 }
};
#define GET_DRIVE(path) \
......@@ -786,7 +787,8 @@ HANDLE DOSFS_OpenDevice( const char *name, DWORD access, DWORD attributes, LPSEC
return handle;
}
if (!strcmp(DOSFS_Devices[i].name,"SCSIMGR$") ||
!strcmp(DOSFS_Devices[i].name,"HPSCAN"))
!strcmp(DOSFS_Devices[i].name,"HPSCAN") ||
!strcmp(DOSFS_Devices[i].name,"EMMXXXX0"))
{
return FILE_CreateDevice( i, access, sa );
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment