Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
3fa613cf
Commit
3fa613cf
authored
Aug 31, 2002
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved internal context macros out of winnt.h.
Added SET_AX etc. macros to avoid non-portable pointer manipulations.
parent
c08aa31f
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
359 additions
and
331 deletions
+359
-331
thunk.c
dlls/kernel/thunk.c
+14
-13
win87em.c
dlls/kernel/win87em.c
+15
-16
windebug.c
dlls/kernel/windebug.c
+1
-0
devices.c
dlls/winedos/devices.c
+2
-0
dosaspi.c
dlls/winedos/dosaspi.c
+2
-2
dosexe.h
dlls/winedos/dosexe.h
+2
-0
int10.c
dlls/winedos/int10.c
+41
-40
int16.c
dlls/winedos/int16.c
+23
-14
int17.c
dlls/winedos/int17.c
+2
-2
int21.c
dlls/winedos/int21.c
+21
-18
int33.c
dlls/winedos/int33.c
+14
-14
int67.c
dlls/winedos/int67.c
+30
-30
xms.c
dlls/winedos/xms.c
+13
-13
relay.c
if1632/relay.c
+9
-9
snoop.c
if1632/snoop.c
+4
-2
miscemu.h
include/miscemu.h
+41
-3
winnt.h
include/winnt.h
+0
-26
task.c
loader/task.c
+1
-1
system.c
misc/system.c
+1
-3
dosmem.c
msdos/dosmem.c
+0
-2
dpmi.c
msdos/dpmi.c
+37
-33
int11.c
msdos/int11.c
+1
-2
int12.c
msdos/int12.c
+1
-1
int15.c
msdos/int15.c
+11
-11
int1a.c
msdos/int1a.c
+10
-10
int21.c
msdos/int21.c
+0
-0
int25.c
msdos/int25.c
+1
-2
int26.c
msdos/int26.c
+1
-1
int2f.c
msdos/int2f.c
+28
-30
int4b.c
msdos/int4b.c
+1
-1
int5c.c
msdos/int5c.c
+2
-2
vxd.c
msdos/vxd.c
+22
-22
device.c
win32/device.c
+2
-2
input.c
windows/input.c
+6
-6
No files found.
dlls/kernel/thunk.c
View file @
3fa613cf
...
...
@@ -40,6 +40,7 @@
#include "flatthunk.h"
#include "heap.h"
#include "module.h"
#include "miscemu.h"
#include "selectors.h"
#include "stackframe.h"
#include "task.h"
...
...
@@ -1459,8 +1460,8 @@ void WINAPI C16ThkSL01(CONTEXT86 *context)
else
{
WORD
*
stack
=
MapSL
(
MAKESEGPTR
(
context
->
SegSs
,
LOWORD
(
context
->
Esp
))
);
DX_reg
(
context
)
=
HIWORD
(
td
->
apiDB
[
targetNr
].
errorReturnValue
);
AX_reg
(
context
)
=
LOWORD
(
td
->
apiDB
[
targetNr
].
errorReturnValue
);
SET_DX
(
context
,
HIWORD
(
td
->
apiDB
[
targetNr
].
errorReturnValue
)
);
SET_AX
(
context
,
LOWORD
(
td
->
apiDB
[
targetNr
].
errorReturnValue
)
);
context
->
Eip
=
stack
[
2
];
context
->
SegCs
=
stack
[
3
];
context
->
Esp
+=
td
->
apiDB
[
targetNr
].
nrArgBytes
+
4
;
...
...
@@ -1858,10 +1859,10 @@ void WINAPI CBClientGlueSL( CONTEXT86 *context )
LPWORD
stackLin
=
MapSL
(
stackSeg
);
SEGPTR
glue
,
*
glueTab
;
stackLin
[
3
]
=
BP_reg
(
context
)
;
stackLin
[
2
]
=
SI_reg
(
context
)
;
stackLin
[
1
]
=
DI_reg
(
context
)
;
stackLin
[
0
]
=
context
->
SegDs
;
stackLin
[
3
]
=
(
WORD
)
context
->
Ebp
;
stackLin
[
2
]
=
(
WORD
)
context
->
Esi
;
stackLin
[
1
]
=
(
WORD
)
context
->
Edi
;
stackLin
[
0
]
=
(
WORD
)
context
->
SegDs
;
context
->
Ebp
=
OFFSETOF
(
stackSeg
)
+
6
;
context
->
Esp
=
OFFSETOF
(
stackSeg
)
-
4
;
...
...
@@ -1882,7 +1883,7 @@ void WINAPI CBClientThunkSL( CONTEXT86 *context )
{
/* Call 32-bit relay code */
LPWORD
args
=
MapSL
(
MAKESEGPTR
(
context
->
SegSs
,
BP_reg
(
context
)
)
);
LPWORD
args
=
MapSL
(
MAKESEGPTR
(
context
->
SegSs
,
LOWORD
(
context
->
Ebp
)
)
);
FARPROC
proc
=
CBClientRelay32
[
args
[
2
]
][
args
[
1
]
];
context
->
Eax
=
CALL32_CBClient
(
proc
,
args
,
&
context
->
Esi
);
...
...
@@ -1896,7 +1897,7 @@ void WINAPI CBClientThunkSLEx( CONTEXT86 *context )
{
/* Call 32-bit relay code */
LPWORD
args
=
MapSL
(
MAKESEGPTR
(
context
->
SegSs
,
BP_reg
(
context
)
)
);
LPWORD
args
=
MapSL
(
MAKESEGPTR
(
context
->
SegSs
,
LOWORD
(
context
->
Ebp
)
)
);
FARPROC
proc
=
CBClientRelay32
[
args
[
2
]
][
args
[
1
]
];
INT
nArgs
;
LPWORD
stackLin
;
...
...
@@ -1905,9 +1906,9 @@ void WINAPI CBClientThunkSLEx( CONTEXT86 *context )
/* Restore registers saved by CBClientGlueSL */
stackLin
=
(
LPWORD
)((
LPBYTE
)
CURRENT_STACK16
+
sizeof
(
STACK16FRAME
)
-
4
);
BP_reg
(
context
)
=
stackLin
[
3
];
S
I_reg
(
context
)
=
stackLin
[
2
]
;
DI_reg
(
context
)
=
stackLin
[
1
]
;
context
->
Ebp
=
(
context
->
Ebp
&
~
0xffff
)
|
stackLin
[
3
];
S
ET_SI
(
context
,
stackLin
[
2
]
)
;
SET_DI
(
context
,
stackLin
[
1
]
)
;
context
->
SegDs
=
stackLin
[
0
];
context
->
Esp
+=
16
+
nArgs
;
...
...
@@ -2064,7 +2065,7 @@ void WINAPI Catch16( LPCATCHBUF lpbuf, CONTEXT86 *context )
lpbuf
[
6
]
=
context
->
SegDs
;
lpbuf
[
7
]
=
0
;
lpbuf
[
8
]
=
context
->
SegSs
;
AX_reg
(
context
)
=
0
;
/* Return 0 */
SET_AX
(
context
,
0
)
;
/* Return 0 */
}
...
...
@@ -2080,7 +2081,7 @@ void WINAPI Throw16( LPCATCHBUF lpbuf, INT16 retval, CONTEXT86 *context )
STACK32FRAME
*
frame32
;
TEB
*
teb
=
NtCurrentTeb
();
AX_reg
(
context
)
=
retval
;
SET_AX
(
context
,
retval
)
;
/* Find the frame32 corresponding to the frame16 we are jumping to */
pFrame
=
THREAD_STACK16
(
teb
);
...
...
dlls/kernel/win87em.c
View file @
3fa613cf
...
...
@@ -59,7 +59,7 @@ static WORD Inthandler02hVar = 1;
static
void
WIN87_ClearCtrlWord
(
CONTEXT86
*
context
)
{
AX_reg
(
context
)
=
0
;
SET_AX
(
context
,
0
)
;
if
(
Installed
)
#ifdef __i386__
__asm__
(
"fclex"
);
...
...
@@ -72,7 +72,7 @@ static void WIN87_ClearCtrlWord( CONTEXT86 *context )
static
void
WIN87_SetCtrlWord
(
CONTEXT86
*
context
)
{
CtrlWord_1
=
AX_reg
(
context
);
AX_reg
(
context
)
&=
0xff3c
;
context
->
Eax
&=
~
0x00c3
;
if
(
Installed
)
{
CtrlWord_Internal
=
AX_reg
(
context
);
#ifdef __i386__
...
...
@@ -91,7 +91,7 @@ void WIN87_Init( CONTEXT86 *context )
#endif
}
StackBottom
=
StackTop
;
AX_reg
(
context
)
=
0x1332
;
SET_AX
(
context
,
0x1332
)
;
WIN87_SetCtrlWord
(
context
);
WIN87_ClearCtrlWord
(
context
);
}
...
...
@@ -115,7 +115,7 @@ void WINAPI WIN87_fpmath( CONTEXT86 *context )
InstallIntVecs02hAnd75h();
#endif
WIN87_Init
(
context
);
AX_reg
(
context
)
=
0
;
SET_AX
(
context
,
0
)
;
break
;
case
1
:
/* Init Emulator */
...
...
@@ -144,7 +144,7 @@ void WINAPI WIN87_fpmath( CONTEXT86 *context )
break
;
case
5
:
/* return internal control word in AX */
AX_reg
(
context
)
=
CtrlWord_1
;
SET_AX
(
context
,
CtrlWord_1
)
;
break
;
case
6
:
/* round top of stack to integer using method AX & 0x0C00 */
...
...
@@ -179,21 +179,20 @@ void WINAPI WIN87_fpmath( CONTEXT86 *context )
/* FIXME: could someone who really understands asm() fix this please? --AJ */
/* __asm__("fistp %0;wait" : "=m" (dw) : : "memory"); */
TRACE
(
"On top of stack was %ld
\n
"
,
dw
);
AX_reg
(
context
)
=
LOWORD
(
dw
);
DX_reg
(
context
)
=
HIWORD
(
dw
);
SET_AX
(
context
,
LOWORD
(
dw
)
);
SET_DX
(
context
,
HIWORD
(
dw
)
);
}
break
;
case
8
:
/* restore internal status words from emulator status word */
AX_reg
(
context
)
=
0
;
SET_AX
(
context
,
0
)
;
if
(
Installed
)
{
#ifdef __i386__
__asm__
(
"fstsw %0;wait"
:
"=m"
(
StatusWord_1
));
#endif
AL_reg
(
context
)
=
(
BYTE
)
StatusWord_1
&
0x3f
;
SET_AL
(
context
,
(
BYTE
)
StatusWord_1
&
0x3f
)
;
}
AX_reg
(
context
)
|=
StatusWord_2
;
AX_reg
(
context
)
&=
0x1fff
;
context
->
Eax
=
(
context
->
Eax
|
StatusWord_2
)
&
~
0xe000
;
StatusWord_2
=
AX_reg
(
context
);
break
;
...
...
@@ -202,12 +201,12 @@ void WINAPI WIN87_fpmath( CONTEXT86 *context )
break
;
case
10
:
/* dunno. but looks like returning nr. of things on stack in AX */
AX_reg
(
context
)
=
0
;
SET_AX
(
context
,
0
)
;
break
;
case
11
:
/* just returns the installed flag in DX:AX */
DX_reg
(
context
)
=
0
;
AX_reg
(
context
)
=
Installed
;
SET_DX
(
context
,
0
)
;
SET_AX
(
context
,
Installed
)
;
break
;
case
12
:
/* save AX in some internal state var */
...
...
@@ -216,7 +215,8 @@ void WINAPI WIN87_fpmath( CONTEXT86 *context )
default:
/* error. Say that loud and clear */
FIXME
(
"unhandled switch %d
\n
"
,
BX_reg
(
context
));
AX_reg
(
context
)
=
DX_reg
(
context
)
=
0xFFFF
;
SET_AX
(
context
,
0xFFFF
);
SET_DX
(
context
,
0xFFFF
);
break
;
}
}
...
...
@@ -248,4 +248,3 @@ void WINAPI WIN87_WinEm87Save(void *pWin87EmSaveArea, int cbWin87EmSaveArea)
FIXME
(
"(%p,%d), stub !
\n
"
,
pWin87EmSaveArea
,
cbWin87EmSaveArea
);
}
dlls/kernel/windebug.c
View file @
3fa613cf
...
...
@@ -22,6 +22,7 @@
#include <stdlib.h>
#include "windef.h"
#include "module.h"
#include "miscemu.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
dll
);
...
...
dlls/winedos/devices.c
View file @
3fa613cf
...
...
@@ -148,6 +148,8 @@ typedef struct
#define DOS_DATASEG_OFF(xxx) FIELD_OFFSET(DOS_DATASEG, xxx)
DWORD
DOS_LOLSeg
;
struct
_DOS_LISTOFLISTS
*
DOSMEM_LOL
()
{
return
PTR_REAL_TO_LIN
(
HIWORD
(
DOS_LOLSeg
),
0
);
...
...
dlls/winedos/dosaspi.c
View file @
3fa613cf
...
...
@@ -219,12 +219,12 @@ void WINAPI DOSVM_ASPIHandler( CONTEXT86 *context )
*
p
=
DPMI_AllocInternalRMCB
(
ASPI_DOS_func
);
TRACE
(
"allocated real mode proc %p
\n
"
,
*
p
);
AX_reg
(
context
)
=
CX_reg
(
context
);
SET_AX
(
context
,
CX_reg
(
context
)
);
return
;
}
error_exit:
/* Return some error... General Failure sounds okay */
AX_reg
(
context
)
=
ERROR_GEN_FAILURE
;
SET_AX
(
context
,
ERROR_GEN_FAILURE
)
;
SET_CFLAG
(
context
);
}
dlls/winedos/dosexe.h
View file @
3fa613cf
...
...
@@ -38,6 +38,7 @@ typedef void (*DOSRELAY)(CONTEXT86*,void*);
extern
WORD
DOSVM_psp
;
/* psp of current DOS task */
extern
WORD
DOSVM_retval
;
/* return value of previous DOS task */
extern
DWORD
DOS_LOLSeg
;
#if defined(linux) && defined(__i386__)
#define MZ_SUPPORTED
...
...
@@ -74,6 +75,7 @@ extern int DOSDEV_Read(DWORD dev, DWORD buf, int buflen);
extern
int
DOSDEV_Write
(
DWORD
dev
,
DWORD
buf
,
int
buflen
,
int
verify
);
extern
int
DOSDEV_IoctlRead
(
DWORD
dev
,
DWORD
buf
,
int
buflen
);
extern
int
DOSDEV_IoctlWrite
(
DWORD
dev
,
DWORD
buf
,
int
buflen
);
extern
struct
_DOS_LISTOFLISTS
*
DOSMEM_LOL
();
/* dma.c */
extern
int
DMA_Transfer
(
int
channel
,
int
reqlength
,
void
*
buffer
);
...
...
dlls/winedos/int10.c
View file @
3fa613cf
...
...
@@ -93,14 +93,14 @@ static void DOSVM_Int10Handler_VESA( CONTEXT86 *context )
memcpy
(
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegEs
,
context
->
Edi
),
(
char
*
)
BIOS_SYS
+
DOSMEM_GetBiosSysStructOffset
(
OFF_VESAINFO
),
sizeof
(
VESAINFO
));
AL_reg
(
context
)
=
0x4f
;
AH_reg
(
context
)
=
0x00
;
/* 0x00 = successful 0x01 = failed */
SET_AL
(
context
,
0x4f
)
;
SET_AH
(
context
,
0x00
)
;
/* 0x00 = successful 0x01 = failed */
break
;
case
0x01
:
/* GET SuperVGA MODE INFORMATION */
FIXME
(
"VESA GET SuperVGA Mode Information - Not supported
\n
"
);
AL_reg
(
context
)
=
0x4f
;
AH_reg
(
context
)
=
0x01
;
/* 0x00 = successful 0x01 = failed */
SET_AL
(
context
,
0x4f
)
;
SET_AH
(
context
,
0x01
)
;
/* 0x00 = successful 0x01 = failed */
break
;
case
0x02
:
/* SET SuperVGA VIDEO MODE */
...
...
@@ -240,14 +240,14 @@ static void DOSVM_Int10Handler_VESA( CONTEXT86 *context )
FIXME
(
"VESA Set Video Mode (0x%x) - Not Supported
\n
"
,
BX_reg
(
context
));
}
data
->
VideoMode
=
BX_reg
(
context
);
AL_reg
(
context
)
=
0x4f
;
AH_reg
(
context
)
=
0x00
;
SET_AL
(
context
,
0x4f
)
;
SET_AH
(
context
,
0x00
)
;
break
;
case
0x03
:
/* VESA SuperVGA BIOS - GET CURRENT VIDEO MODE */
AL_reg
(
context
)
=
0x4f
;
AH_reg
(
context
)
=
0x00
;
/* should probly check if a vesa mode has ben set */
BX_reg
(
context
)
=
data
->
VideoMode
;
SET_AL
(
context
,
0x4f
)
;
SET_AH
(
context
,
0x00
)
;
/* should probly check if a vesa mode has ben set */
SET_BX
(
context
,
data
->
VideoMode
)
;
break
;
case
0x04
:
/* VESA SuperVGA BIOS - SAVE/RESTORE SuperVGA VIDEO STATE */
...
...
@@ -264,20 +264,20 @@ static void DOSVM_Int10Handler_VESA( CONTEXT86 *context )
*/
switch
(
BH_reg
(
context
))
{
case
0x00
:
/* select video memory window */
AL_reg
(
context
)
=
0x4f
;
/* function supported */
SET_AL
(
context
,
0x4f
)
;
/* function supported */
if
(
BL_reg
(
context
)
==
0
)
{
VGA_SetWindowStart
(
DX_reg
(
context
)
*
64
*
1024
);
AH_reg
(
context
)
=
0x00
;
/* status: successful */
SET_AH
(
context
,
0x00
)
;
/* status: successful */
}
else
AH_reg
(
context
)
=
0x01
;
/* status: failed */
SET_AH
(
context
,
0x01
)
;
/* status: failed */
break
;
case
0x01
:
/* get video memory window */
AL_reg
(
context
)
=
0x4f
;
/* function supported */
SET_AL
(
context
,
0x4f
)
;
/* function supported */
if
(
BL_reg
(
context
)
==
0
)
{
DX_reg
(
context
)
=
VGA_GetWindowStart
()
/
64
/
1024
;
AH_reg
(
context
)
=
0x00
;
/* status: successful */
SET_DX
(
context
,
VGA_GetWindowStart
()
/
64
/
1024
)
;
SET_AH
(
context
,
0x00
)
;
/* status: successful */
}
else
AH_reg
(
context
)
=
0x01
;
/* status: failed */
SET_AH
(
context
,
0x01
)
;
/* status: failed */
break
;
default:
INT_BARF
(
context
,
0x10
);
...
...
@@ -321,7 +321,7 @@ static void DOSVM_Int10Handler_VESA( CONTEXT86 *context )
/* There's no reason to really support this */
/* is there?....................(A.C.) */
TRACE
(
"Just report the video not hercules compatible
\n
"
);
DX_reg
(
context
)
=
0xffff
;
SET_DX
(
context
,
0xffff
)
;
break
;
case
0xff
:
/* Turn VESA ON/OFF */
...
...
@@ -358,7 +358,7 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
}
/* FIXME: Should we keep the bit 7 in the Bios Data memory? */
AL_reg
(
context
)
&=
~
0x80
;
context
->
Eax
&=
~
0x80
;
switch
(
AL_reg
(
context
))
{
case
0x00
:
/* 40x25 */
...
...
@@ -437,17 +437,17 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
unsigned
row
,
col
;
TRACE
(
"Get cursor position and size (page %d)
\n
"
,
BH_reg
(
context
));
CX_reg
(
context
)
=
data
->
VideoCursorType
;
SET_CX
(
context
,
data
->
VideoCursorType
)
;
BIOS_GetCursorPos
(
data
,
BH_reg
(
context
),
&
col
,
&
row
);
DH_reg
(
context
)
=
row
;
DL_reg
(
context
)
=
col
;
SET_DH
(
context
,
row
)
;
SET_DL
(
context
,
col
)
;
TRACE
(
"Cursor Position: %d %d
\n
"
,
DH_reg
(
context
),
DL_reg
(
context
));
}
break
;
case
0x04
:
/* READ LIGHT PEN POSITION */
FIXME
(
"Read Light Pen Position - Not Supported
\n
"
);
AH_reg
(
context
)
=
0x00
;
/* Not down */
SET_AH
(
context
,
0x00
)
;
/* Not down */
break
;
case
0x05
:
/* SELECT ACTIVE DISPLAY PAGE */
...
...
@@ -483,13 +483,16 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
{
FIXME
(
"Read character and attribute at cursor position -"
" Can't read from non-0 page
\n
"
);
AL_reg
(
context
)
=
' '
;
/* That page is blank */
AH_reg
(
context
)
=
7
;
SET_AL
(
context
,
' '
)
;
/* That page is blank */
SET_AH
(
context
,
7
)
;
}
else
{
BYTE
ascii
,
attr
;
TRACE
(
"Read Character and Attribute at Cursor Position
\n
"
);
VGA_GetCharacterAtCursor
(
&
AL_reg
(
context
),
&
AH_reg
(
context
));
VGA_GetCharacterAtCursor
(
&
ascii
,
&
attr
);
SET_AL
(
context
,
ascii
);
SET_AH
(
context
,
attr
);
}
}
break
;
...
...
@@ -563,9 +566,9 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
case
0x0f
:
/* GET CURRENT VIDEO MODE */
TRACE
(
"Get current video mode
\n
"
);
/* Note: This should not be a constant value. */
AL_reg
(
context
)
=
data
->
VideoMode
;
AH_reg
(
context
)
=
data
->
VideoColumns
;
BH_reg
(
context
)
=
0
;
/* Display page 0 */
SET_AL
(
context
,
data
->
VideoMode
)
;
SET_AH
(
context
,
data
->
VideoColumns
)
;
SET_BH
(
context
,
0
)
;
/* Display page 0 */
break
;
case
0x10
:
...
...
@@ -595,11 +598,11 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
case
0x07
:
/* GET INDIVIDUAL PALETTE REGISTER - A.C.*/
TRACE
(
"Get Individual Palette Register 0x0%x
\n
"
,
BL_reg
(
context
));
/* BL is register to read [ 0-15 ] BH is return value */
BH_reg
(
context
)
=
VGA_GetColor16
((
int
)
BL_reg
(
context
)
);
SET_BH
(
context
,
VGA_GetColor16
((
int
)
BL_reg
(
context
))
);
break
;
case
0x08
:
/* READ OVERSCAN (BORDER COLOR) REGISTER - A.C. */
TRACE
(
"Read Overscan (Border Color) Register
\n
"
);
BH_reg
(
context
)
=
VGA_GetColor16
(
16
);
SET_BH
(
context
,
VGA_GetColor16
(
16
)
);
break
;
case
0x09
:
/* READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER - A.C.*/
TRACE
(
"Read All Palette Registers and Overscan Register
\n
"
);
...
...
@@ -719,11 +722,9 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
switch
BL_reg
(
context
)
{
case
0x10
:
/* GET EGA INFO */
TRACE
(
"EGA info requested
\n
"
);
BH_reg
(
context
)
=
0x00
;
/* Color screen */
BL_reg
(
context
)
=
data
->
ModeOptions
>>
5
;
/* EGA memory size */
CX_reg
(
context
)
=
data
->
FeatureBitsSwitches
;
SET_BH
(
context
,
0x00
);
/* Color screen */
SET_BL
(
context
,
data
->
ModeOptions
>>
5
);
/* EGA memory size */
SET_CX
(
context
,
data
->
FeatureBitsSwitches
);
break
;
case
0x20
:
/* ALTERNATE PRTSC */
FIXME
(
"Install Alternate Print Screen - Not Supported
\n
"
);
...
...
@@ -767,9 +768,9 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
switch
AL_reg
(
context
)
{
case
0x00
:
/* GET DISPLAY COMBINATION CODE */
TRACE
(
"Get Display Combination Code
\n
"
);
AX_reg
(
context
)
=
0x001a
;
BL_reg
(
context
)
=
0x08
;
/* VGA w/ color analog display */
BH_reg
(
context
)
=
0x00
;
/* No secondary hardware */
SET_AX
(
context
,
0x001a
)
;
SET_BL
(
context
,
0x08
)
;
/* VGA w/ color analog display */
SET_BH
(
context
,
0x00
)
;
/* No secondary hardware */
break
;
case
0x01
:
/* SET DISPLAY COMBINATION CODE */
FIXME
(
"Set Display Combination Code - Not Supported
\n
"
);
...
...
@@ -785,7 +786,7 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
TRACE
(
"Get functionality/state information
\n
"
);
if
(
BX_reg
(
context
)
==
0x0
)
{
AL_reg
(
context
)
=
0x1b
;
SET_AL
(
context
,
0x1b
)
;
/* Copy state information structure to ES:DI */
memcpy
(
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegEs
,
context
->
Edi
),
(
char
*
)
BIOS_SYS
+
DOSMEM_GetBiosSysStructOffset
(
OFF_VIDEOSTATE
),
sizeof
(
VIDEOSTATE
));
...
...
@@ -800,7 +801,7 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
/* There's no reason to really support this */
/* is there?....................(A.C.) */
TRACE
(
"Just report the video not hercules compatible
\n
"
);
DX_reg
(
context
)
=
0xffff
;
SET_DX
(
context
,
0xffff
)
;
break
;
case
0x4f
:
/* VESA */
...
...
dlls/winedos/int16.c
View file @
3fa613cf
...
...
@@ -51,13 +51,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(int);
void
WINAPI
DOSVM_Int16Handler
(
CONTEXT86
*
context
)
{
BYTE
ascii
,
scan
;
switch
AH_reg
(
context
)
{
case
0x00
:
/* Get Keystroke */
/* Returns: AH = Scan code
AL = ASCII character */
TRACE
(
"Get Keystroke
\n
"
);
DOSVM_Int16ReadChar
(
&
AL_reg
(
context
),
&
AH_reg
(
context
),
FALSE
);
DOSVM_Int16ReadChar
(
&
ascii
,
&
scan
,
FALSE
);
SET_AL
(
context
,
ascii
);
SET_AH
(
context
,
scan
);
break
;
case
0x01
:
/* Check for Keystroke */
...
...
@@ -65,12 +68,14 @@ void WINAPI DOSVM_Int16Handler( CONTEXT86 *context )
/* AH = Scan code */
/* AL = ASCII character */
TRACE
(
"Check for Keystroke
\n
"
);
if
(
!
DOSVM_Int16ReadChar
(
&
AL_reg
(
context
),
&
AH_reg
(
context
)
,
TRUE
))
if
(
!
DOSVM_Int16ReadChar
(
&
ascii
,
&
scan
,
TRUE
))
{
SET_ZFLAG
(
context
);
}
else
{
SET_AL
(
context
,
ascii
);
SET_AH
(
context
,
scan
);
RESET_ZFLAG
(
context
);
}
/* don't miss the opportunity to break some tight timing loop in DOS
...
...
@@ -79,24 +84,24 @@ void WINAPI DOSVM_Int16Handler( CONTEXT86 *context )
break
;
case
0x02
:
/* Get Shift Flags */
AL_reg
(
context
)
=
0
;
SET_AL
(
context
,
0
)
;
if
(
GetAsyncKeyState
(
VK_RSHIFT
))
AL_reg
(
context
)
|=
0x01
;
context
->
Eax
|=
0x01
;
if
(
GetAsyncKeyState
(
VK_LSHIFT
))
AL_reg
(
context
)
|=
0x02
;
context
->
Eax
|=
0x02
;
if
(
GetAsyncKeyState
(
VK_LCONTROL
)
||
GetAsyncKeyState
(
VK_RCONTROL
))
AL_reg
(
context
)
|=
0x04
;
context
->
Eax
|=
0x04
;
if
(
GetAsyncKeyState
(
VK_LMENU
)
||
GetAsyncKeyState
(
VK_RMENU
))
AL_reg
(
context
)
|=
0x08
;
context
->
Eax
|=
0x08
;
if
(
GetAsyncKeyState
(
VK_SCROLL
))
AL_reg
(
context
)
|=
0x10
;
context
->
Eax
|=
0x10
;
if
(
GetAsyncKeyState
(
VK_NUMLOCK
))
AL_reg
(
context
)
|=
0x20
;
context
->
Eax
|=
0x20
;
if
(
GetAsyncKeyState
(
VK_CAPITAL
))
AL_reg
(
context
)
|=
0x40
;
context
->
Eax
|=
0x40
;
if
(
GetAsyncKeyState
(
VK_INSERT
))
AL_reg
(
context
)
|=
0x80
;
context
->
Eax
|=
0x80
;
TRACE
(
"Get Shift Flags: returning 0x%02x
\n
"
,
AL_reg
(
context
));
break
;
...
...
@@ -107,7 +112,7 @@ void WINAPI DOSVM_Int16Handler( CONTEXT86 *context )
case
0x09
:
/* Get Keyboard Functionality */
FIXME
(
"Get Keyboard Functionality - Not Supported
\n
"
);
/* As a temporary measure, say that "nothing" is supported... */
AL_reg
(
context
)
=
0
;
SET_AL
(
context
,
0
)
;
break
;
case
0x0a
:
/* Get Keyboard ID */
...
...
@@ -118,7 +123,9 @@ void WINAPI DOSVM_Int16Handler( CONTEXT86 *context )
TRACE
(
"Get Enhanced Keystroke - Partially supported
\n
"
);
/* Returns: AH = Scan code
AL = ASCII character */
DOSVM_Int16ReadChar
(
&
AL_reg
(
context
),
&
AH_reg
(
context
),
FALSE
);
DOSVM_Int16ReadChar
(
&
ascii
,
&
scan
,
FALSE
);
SET_AL
(
context
,
ascii
);
SET_AH
(
context
,
scan
);
break
;
...
...
@@ -127,12 +134,14 @@ void WINAPI DOSVM_Int16Handler( CONTEXT86 *context )
/* AH = Scan code */
/* AL = ASCII character */
TRACE
(
"Check for Enhanced Keystroke - Partially supported
\n
"
);
if
(
!
DOSVM_Int16ReadChar
(
&
AL_reg
(
context
),
&
AH_reg
(
context
)
,
TRUE
))
if
(
!
DOSVM_Int16ReadChar
(
&
ascii
,
&
scan
,
TRUE
))
{
SET_ZFLAG
(
context
);
}
else
{
SET_AL
(
context
,
ascii
);
SET_AH
(
context
,
scan
);
RESET_ZFLAG
(
context
);
}
break
;
...
...
dlls/winedos/int17.c
View file @
3fa613cf
...
...
@@ -38,13 +38,13 @@ void WINAPI DOSVM_Int17Handler( CONTEXT86 *context )
{
case
0x01
:
/* PRINTER - INITIALIZE */
FIXME
(
"Initialize Printer - Not Supported
\n
"
);
AH_reg
(
context
)
=
0
;
/* time out */
SET_AH
(
context
,
0
)
;
/* time out */
break
;
case
0x02
:
/* PRINTER - GET STATUS */
FIXME
(
"Get Printer Status - Not Supported
\n
"
);
break
;
default:
AH_reg
(
context
)
=
0
;
/* time out */
SET_AH
(
context
,
0
)
;
/* time out */
INT_BARF
(
context
,
0x17
);
}
}
dlls/winedos/int21.c
View file @
3fa613cf
...
...
@@ -55,7 +55,7 @@ void WINAPI DOSVM_Int21Handler_Ioctl( CONTEXT86 *context )
CX_reg
(
context
),
DX_reg
(
context
));
if
(
!
CX_reg
(
context
))
{
AX_reg
(
context
)
=
1
;
SET_AX
(
context
,
1
)
;
SET_CFLAG
(
context
);
break
;
}
...
...
@@ -76,6 +76,7 @@ void WINAPI DOSVM_Int21Handler_Ioctl( CONTEXT86 *context )
*/
void
WINAPI
DOSVM_Int21Handler
(
CONTEXT86
*
context
)
{
BYTE
ascii
;
RESET_CFLAG
(
context
);
/* Not sure if this is a good idea */
if
(
AH_reg
(
context
)
==
0x0c
)
/* FLUSH BUFFER AND READ STANDARD INPUT */
...
...
@@ -91,7 +92,7 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
if
(
al
!=
0x01
&&
al
!=
0x06
&&
al
!=
0x07
&&
al
!=
0x08
&&
al
!=
0x0a
)
return
;
AH_reg
(
context
)
=
al
;
SET_AH
(
context
,
al
)
;
}
switch
(
AH_reg
(
context
))
...
...
@@ -103,9 +104,10 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
case
0x01
:
/* READ CHARACTER FROM STANDARD INPUT, WITH ECHO */
TRACE
(
"DIRECT CHARACTER INPUT WITH ECHO
\n
"
);
DOSVM_Int16ReadChar
(
&
AL_reg
(
context
),
NULL
,
FALSE
);
DOSVM_Int16ReadChar
(
&
ascii
,
NULL
,
FALSE
);
SET_AL
(
context
,
ascii
);
DOSVM_PutChar
(
AL_reg
(
context
));
break
;
break
;
case
0x02
:
/* WRITE CHARACTER TO STANDARD OUTPUT */
TRACE
(
"Write Character to Standard Output
\n
"
);
...
...
@@ -119,21 +121,20 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
TRACE
(
"Direct Console Input
\n
"
);
if
(
scan
)
{
/* return pending scancode */
AL_reg
(
context
)
=
scan
;
SET_AL
(
context
,
scan
)
;
RESET_ZFLAG
(
context
);
scan
=
0
;
}
else
{
char
ascii
;
if
(
DOSVM_Int16ReadChar
(
&
ascii
,
&
scan
,
TRUE
))
{
DOSVM_Int16ReadChar
(
&
ascii
,
&
scan
,
FALSE
);
/* return ASCII code */
AL_reg
(
context
)
=
ascii
;
SET_AL
(
context
,
ascii
)
;
RESET_ZFLAG
(
context
);
/* return scan code on next call only if ascii==0 */
if
(
ascii
)
scan
=
0
;
}
else
{
/* nothing pending, clear everything */
AL_reg
(
context
)
=
0
;
SET_AL
(
context
,
0
)
;
SET_ZFLAG
(
context
);
scan
=
0
;
/* just in case */
}
...
...
@@ -147,22 +148,24 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
case
0x07
:
/* DIRECT CHARACTER INPUT WITHOUT ECHO */
/* FIXME: Use DOSDEV_Peek/Read(DOSDEV_Console(),...) !! */
TRACE
(
"DIRECT CHARACTER INPUT WITHOUT ECHO
\n
"
);
DOSVM_Int16ReadChar
(
&
AL_reg
(
context
),
NULL
,
FALSE
);
DOSVM_Int16ReadChar
(
&
ascii
,
NULL
,
FALSE
);
SET_AL
(
context
,
ascii
);
break
;
case
0x08
:
/* CHARACTER INPUT WITHOUT ECHO */
/* FIXME: Use DOSDEV_Peek/Read(DOSDEV_Console(),...) !! */
TRACE
(
"CHARACTER INPUT WITHOUT ECHO
\n
"
);
DOSVM_Int16ReadChar
(
&
AL_reg
(
context
),
NULL
,
FALSE
);
DOSVM_Int16ReadChar
(
&
ascii
,
NULL
,
FALSE
);
SET_AL
(
context
,
ascii
);
break
;
case
0x0b
:
/* GET STDIN STATUS */
{
BIOSDATA
*
data
=
BIOS_DATA
;
if
(
data
->
FirstKbdCharPtr
==
data
->
NextKbdCharPtr
)
AL_reg
(
context
)
=
0
;
SET_AL
(
context
,
0
)
;
else
AL_reg
(
context
)
=
0xff
;
SET_AL
(
context
,
0xff
)
;
}
break
;
...
...
@@ -176,7 +179,7 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
{
FARPROC16
addr
=
DOSVM_GetRMHandler
(
AL_reg
(
context
)
);
context
->
SegEs
=
SELECTOROF
(
addr
);
BX_reg
(
context
)
=
OFFSETOF
(
addr
);
SET_BX
(
context
,
OFFSETOF
(
addr
)
);
}
break
;
...
...
@@ -203,7 +206,7 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
if
(
!
MZ_Exec
(
context
,
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegDs
,
context
->
Edx
),
AL_reg
(
context
),
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegEs
,
context
->
Ebx
)
))
{
AX_reg
(
context
)
=
GetLastError
(
);
SET_AX
(
context
,
GetLastError
()
);
SET_CFLAG
(
context
);
}
break
;
...
...
@@ -215,7 +218,7 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
case
0x4d
:
/* GET RETURN CODE */
TRACE
(
"GET RETURN CODE (ERRORLEVEL)
\n
"
);
AX_reg
(
context
)
=
DOSVM_retval
;
SET_AX
(
context
,
DOSVM_retval
)
;
DOSVM_retval
=
0
;
break
;
...
...
@@ -228,14 +231,14 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
TRACE
(
"GET CURRENT PROCESS ID (GET PSP ADDRESS)
\n
"
);
/* FIXME: should we return the original DOS PSP upon */
/* Windows startup ? */
BX_reg
(
context
)
=
DOSVM_psp
;
SET_BX
(
context
,
DOSVM_psp
)
;
break
;
case
0x52
:
/* "SYSVARS" - GET LIST OF LISTS */
TRACE
(
"SYSVARS - GET LIST OF LISTS
\n
"
);
{
context
->
SegEs
=
HIWORD
(
DOS_LOLSeg
);
BX_reg
(
context
)
=
FIELD_OFFSET
(
DOS_LISTOFLISTS
,
ptr_first_DPB
);
SET_BX
(
context
,
FIELD_OFFSET
(
DOS_LISTOFLISTS
,
ptr_first_DPB
)
);
}
break
;
...
...
@@ -243,7 +246,7 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
TRACE
(
"GET CURRENT PSP ADDRESS
\n
"
);
/* FIXME: should we return the original DOS PSP upon */
/* Windows startup ? */
BX_reg
(
context
)
=
DOSVM_psp
;
SET_BX
(
context
,
DOSVM_psp
)
;
break
;
default:
...
...
dlls/winedos/int33.c
View file @
3fa613cf
...
...
@@ -51,8 +51,8 @@ void WINAPI DOSVM_Int33Handler( CONTEXT86 *context )
switch
(
LOWORD
(
context
->
Eax
))
{
case
0x00
:
TRACE
(
"Reset mouse driver and request status
\n
"
);
AX_reg
(
context
)
=
0xFFFF
;
/* installed */
BX_reg
(
context
)
=
3
;
/* # of buttons */
SET_AX
(
context
,
0xFFFF
)
;
/* installed */
SET_BX
(
context
,
3
)
;
/* # of buttons */
memset
(
&
mouse_info
,
0
,
sizeof
(
mouse_info
)
);
/* Set the default mickey/pixel ratio */
mouse_info
.
HMPratio
=
8
;
...
...
@@ -67,9 +67,9 @@ void WINAPI DOSVM_Int33Handler( CONTEXT86 *context )
case
0x03
:
TRACE
(
"Return mouse position and button status: (%ld,%ld) and %ld
\n
"
,
mouse_info
.
x
,
mouse_info
.
y
,
mouse_info
.
but
);
BX_reg
(
context
)
=
mouse_info
.
but
;
CX_reg
(
context
)
=
mouse_info
.
x
;
DX_reg
(
context
)
=
mouse_info
.
y
;
SET_BX
(
context
,
mouse_info
.
but
)
;
SET_CX
(
context
,
mouse_info
.
x
)
;
SET_DX
(
context
,
mouse_info
.
y
)
;
break
;
case
0x04
:
FIXME
(
"Position mouse cursor
\n
"
);
...
...
@@ -78,17 +78,17 @@ void WINAPI DOSVM_Int33Handler( CONTEXT86 *context )
TRACE
(
"Return Mouse button press Information for %s mouse button
\n
"
,
BX_reg
(
context
)
?
"right"
:
"left"
);
if
(
BX_reg
(
context
))
{
BX_reg
(
context
)
=
mouse_info
.
rbcount
;
SET_BX
(
context
,
mouse_info
.
rbcount
)
;
mouse_info
.
rbcount
=
0
;
CX_reg
(
context
)
=
mouse_info
.
rlastx
;
DX_reg
(
context
)
=
mouse_info
.
rlasty
;
SET_CX
(
context
,
mouse_info
.
rlastx
)
;
SET_DX
(
context
,
mouse_info
.
rlasty
)
;
}
else
{
BX_reg
(
context
)
=
mouse_info
.
lbcount
;
SET_BX
(
context
,
mouse_info
.
lbcount
)
;
mouse_info
.
lbcount
=
0
;
CX_reg
(
context
)
=
mouse_info
.
llastx
;
DX_reg
(
context
)
=
mouse_info
.
llasty
;
SET_CX
(
context
,
mouse_info
.
llastx
)
;
SET_DX
(
context
,
mouse_info
.
llasty
)
;
}
AX_reg
(
context
)
=
mouse_info
.
but
;
SET_AX
(
context
,
mouse_info
.
but
)
;
break
;
case
0x07
:
FIXME
(
"Define horizontal mouse cursor range
\n
"
);
...
...
@@ -104,8 +104,8 @@ void WINAPI DOSVM_Int33Handler( CONTEXT86 *context )
break
;
case
0x0B
:
TRACE
(
"Read Mouse motion counters
\n
"
);
CX_reg
(
context
)
=
(
mouse_info
.
x
-
mouse_info
.
oldx
)
*
(
mouse_info
.
HMPratio
/
8
);
DX_reg
(
context
)
=
(
mouse_info
.
y
-
mouse_info
.
oldy
)
*
(
mouse_info
.
VMPratio
/
8
);
SET_CX
(
context
,
(
mouse_info
.
x
-
mouse_info
.
oldx
)
*
(
mouse_info
.
HMPratio
/
8
)
);
SET_DX
(
context
,
(
mouse_info
.
y
-
mouse_info
.
oldy
)
*
(
mouse_info
.
VMPratio
/
8
)
);
mouse_info
.
oldx
=
mouse_info
.
x
;
mouse_info
.
oldy
=
mouse_info
.
y
;
break
;
...
...
dlls/winedos/int67.c
View file @
3fa613cf
...
...
@@ -118,20 +118,20 @@ static void EMS_alloc( CONTEXT86 *context )
hindex
++
;
if
(
hindex
==
EMS_MAX_HANDLES
)
{
AH_reg
(
context
)
=
0x85
;
/* status: no more handles available */
SET_AH
(
context
,
0x85
)
;
/* status: no more handles available */
}
else
{
int
pages
=
BX_reg
(
context
);
void
*
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
pages
*
EMS_PAGE_SIZE
);
if
(
!
buffer
)
{
AH_reg
(
context
)
=
0x88
;
/* status: insufficient pages available */
SET_AH
(
context
,
0x88
)
;
/* status: insufficient pages available */
}
else
{
EMS_record
->
handle
[
hindex
].
address
=
buffer
;
EMS_record
->
handle
[
hindex
].
pages
=
pages
;
EMS_record
->
used_pages
+=
pages
;
DX_reg
(
context
)
=
hindex
;
/* handle to allocated memory*/
AH_reg
(
context
)
=
0
;
/* status: ok */
SET_DX
(
context
,
hindex
)
;
/* handle to allocated memory*/
SET_AH
(
context
,
0
)
;
/* status: ok */
}
}
}
...
...
@@ -146,7 +146,7 @@ static void EMS_access_name( CONTEXT86 *context )
char
*
ptr
;
int
hindex
=
DX_reg
(
context
);
if
(
hindex
<
0
||
hindex
>=
EMS_MAX_HANDLES
)
{
AH_reg
(
context
)
=
0x83
;
/* invalid handle */
SET_AH
(
context
,
0x83
)
;
/* invalid handle */
return
;
}
...
...
@@ -154,13 +154,13 @@ static void EMS_access_name( CONTEXT86 *context )
case
0x00
:
/* get name */
ptr
=
PTR_REAL_TO_LIN
(
context
->
SegEs
,
DI_reg
(
context
));
memcpy
(
ptr
,
EMS_record
->
handle
[
hindex
].
name
,
8
);
AH_reg
(
context
)
=
0
;
SET_AH
(
context
,
0
)
;
break
;
case
0x01
:
/* set name */
ptr
=
PTR_REAL_TO_LIN
(
context
->
SegDs
,
SI_reg
(
context
));
memcpy
(
EMS_record
->
handle
[
hindex
].
name
,
ptr
,
8
);
AH_reg
(
context
)
=
0
;
SET_AH
(
context
,
0
)
;
break
;
default:
...
...
@@ -241,7 +241,7 @@ static void EMS_map_multiple( CONTEXT86 *context )
status
=
0x8f
;
/* status: undefined subfunction */
}
AH_reg
(
context
)
=
status
;
SET_AH
(
context
,
status
)
;
}
/**********************************************************************
...
...
@@ -255,12 +255,12 @@ static void EMS_free( CONTEXT86 *context )
int
i
;
if
(
hindex
<
0
||
hindex
>=
EMS_MAX_HANDLES
)
{
AH_reg
(
context
)
=
0x83
;
/* status: invalid handle */
SET_AH
(
context
,
0x83
)
;
/* status: invalid handle */
return
;
}
if
(
!
EMS_record
->
handle
[
hindex
].
address
)
{
AH_reg
(
context
)
=
0
;
/* status: ok */
SET_AH
(
context
,
0
)
;
/* status: ok */
return
;
}
...
...
@@ -275,7 +275,7 @@ static void EMS_free( CONTEXT86 *context )
HeapFree
(
GetProcessHeap
(),
0
,
EMS_record
->
handle
[
hindex
].
address
);
EMS_record
->
handle
[
hindex
].
address
=
0
;
AH_reg
(
context
)
=
0
;
/* status: ok */
SET_AH
(
context
,
0
)
;
/* status: ok */
}
/**********************************************************************
...
...
@@ -293,7 +293,7 @@ static void EMS_save_context( CONTEXT86 *context )
EMS_record
->
mapping_save_area
[
h
][
i
].
logical_page
=
EMS_record
->
mapping
[
i
].
logical_page
;
}
AX_reg
(
context
)
=
0
;
/* status: ok */
SET_AX
(
context
,
0
)
;
/* status: ok */
}
...
...
@@ -312,12 +312,12 @@ static void EMS_restore_context( CONTEXT86 *context )
int
logical_page
=
EMS_record
->
mapping_save_area
[
handle
][
i
].
logical_page
;
if
(
EMS_map
(
i
,
hindex
,
logical_page
))
{
AX_reg
(
context
)
=
0x8e
;
/* status: restore of mapping context failed */
SET_AX
(
context
,
0x8e
)
;
/* status: restore of mapping context failed */
return
;
}
}
AX_reg
(
context
)
=
0
;
/* status: ok */
SET_AX
(
context
,
0
)
;
/* status: ok */
}
/**********************************************************************
...
...
@@ -330,23 +330,23 @@ void WINAPI DOSVM_Int67Handler( CONTEXT86 *context )
switch
AH_reg
(
context
)
{
case
0x40
:
/* EMS - GET MANAGER STATUS */
AH_reg
(
context
)
=
0
;
/* status: ok */
SET_AH
(
context
,
0
)
;
/* status: ok */
break
;
case
0x41
:
/* EMS - GET PAGE FRAME SEGMENT */
EMS_init
();
BX_reg
(
context
)
=
EMS_record
->
frame_selector
;
/* segment of page frame */
AH_reg
(
context
)
=
0
;
/* status: ok */
SET_BX
(
context
,
EMS_record
->
frame_selector
)
;
/* segment of page frame */
SET_AH
(
context
,
0
)
;
/* status: ok */
break
;
case
0x42
:
/* EMS - GET NUMBER OF PAGES */
EMS_init
();
/* unallocated 16k pages */
BX_reg
(
context
)
=
EMS_MAX_PAGES
-
EMS_record
->
used_pages
;
SET_BX
(
context
,
EMS_MAX_PAGES
-
EMS_record
->
used_pages
)
;
/* total number of 16k pages */
DX_reg
(
context
)
=
EMS_MAX_PAGES
;
SET_DX
(
context
,
EMS_MAX_PAGES
)
;
/* status: ok */
AH_reg
(
context
)
=
0
;
SET_AH
(
context
,
0
)
;
break
;
case
0x43
:
/* EMS - GET HANDLE AND ALLOCATE MEMORY */
...
...
@@ -356,7 +356,7 @@ void WINAPI DOSVM_Int67Handler( CONTEXT86 *context )
case
0x44
:
/* EMS - MAP MEMORY */
EMS_init
();
AH_reg
(
context
)
=
EMS_map
(
AL_reg
(
context
),
DX_reg
(
context
),
BX_reg
(
context
)
);
SET_AH
(
context
,
EMS_map
(
AL_reg
(
context
),
DX_reg
(
context
),
BX_reg
(
context
)
)
);
break
;
case
0x45
:
/* EMS - RELEASE HANDLE AND MEMORY */
...
...
@@ -365,8 +365,8 @@ void WINAPI DOSVM_Int67Handler( CONTEXT86 *context )
break
;
case
0x46
:
/* EMS - GET EMM VERSION */
AL_reg
(
context
)
=
0x40
;
/* version 4.0 */
AH_reg
(
context
)
=
0
;
/* status: ok */
SET_AL
(
context
,
0x40
)
;
/* version 4.0 */
SET_AH
(
context
,
0
)
;
/* status: ok */
break
;
case
0x47
:
/* EMS - SAVE MAPPING CONTEXT */
...
...
@@ -385,8 +385,8 @@ void WINAPI DOSVM_Int67Handler( CONTEXT86 *context )
break
;
case
0x4b
:
/* EMS - GET NUMBER OF EMM HANDLES */
BX_reg
(
context
)
=
EMS_MAX_HANDLES
;
/* EMM handles */
AH_reg
(
context
)
=
0
;
/* status: ok */
SET_BX
(
context
,
EMS_MAX_HANDLES
)
;
/* EMM handles */
SET_AH
(
context
,
0
)
;
/* status: ok */
break
;
case
0x4c
:
/* EMS - GET PAGES OWNED BY HANDLE */
...
...
@@ -423,11 +423,11 @@ void WINAPI DOSVM_Int67Handler( CONTEXT86 *context )
if
(
AL_reg
(
context
)
==
0x01
)
{
EMS_init
();
/* unallocated raw pages */
BX_reg
(
context
)
=
EMS_MAX_PAGES
-
EMS_record
->
used_pages
;
SET_BX
(
context
,
EMS_MAX_PAGES
-
EMS_record
->
used_pages
)
;
/* total number raw pages */
DX_reg
(
context
)
=
EMS_MAX_PAGES
;
SET_DX
(
context
,
EMS_MAX_PAGES
)
;
/* status: ok */
AH_reg
(
context
)
=
0
;
SET_AH
(
context
,
0
)
;
}
else
INT_BARF
(
context
,
0x67
);
break
;
...
...
@@ -454,7 +454,7 @@ void WINAPI EMS_Ioctl_Handler( CONTEXT86 *context )
switch
AL_reg
(
context
)
{
case
0x00
:
/* IOCTL - GET DEVICE INFORMATION */
RESET_CFLAG
(
context
);
/* operation was successful */
DX_reg
(
context
)
=
0x4080
;
/* bit 14 (support ioctl read) and
SET_DX
(
context
,
0x4080
)
;
/* bit 14 (support ioctl read) and
* bit 7 (is_device) */
break
;
...
...
@@ -471,7 +471,7 @@ void WINAPI EMS_Ioctl_Handler( CONTEXT86 *context )
case
0x07
:
/* IOCTL - GET OUTPUT STATUS */
RESET_CFLAG
(
context
);
/* operation was successful */
AL_reg
(
context
)
=
0xff
;
/* device is ready */
SET_AL
(
context
,
0xff
)
;
/* device is ready */
break
;
default:
...
...
dlls/winedos/xms.c
View file @
3fa613cf
...
...
@@ -61,9 +61,9 @@ void WINAPI XMS_Handler( CONTEXT86 *context )
{
case
0x00
:
/* Get XMS version number */
TRACE
(
"get XMS version number
\n
"
);
AX_reg
(
context
)
=
0x0200
;
/* 2.0 */
BX_reg
(
context
)
=
0x0000
;
/* internal revision */
DX_reg
(
context
)
=
0x0001
;
/* HMA exists */
SET_AX
(
context
,
0x0200
)
;
/* 2.0 */
SET_BX
(
context
,
0x0000
)
;
/* internal revision */
SET_DX
(
context
,
0x0001
)
;
/* HMA exists */
break
;
case
0x08
:
/* Query Free Extended Memory */
{
...
...
@@ -71,25 +71,25 @@ void WINAPI XMS_Handler( CONTEXT86 *context )
TRACE
(
"query free extended memory
\n
"
);
GlobalMemoryStatus
(
&
status
);
AX_reg
(
context
)
=
DX_reg
(
context
)
=
status
.
dwAvailVirtual
>>
10
;
SET_DX
(
context
,
status
.
dwAvailVirtual
>>
10
);
SET_AX
(
context
,
status
.
dwAvailVirtual
>>
10
);
TRACE
(
"returning largest %dK, total %dK
\n
"
,
AX_reg
(
context
),
DX_reg
(
context
));
}
break
;
case
0x09
:
/* Allocate Extended Memory Block */
TRACE
(
"allocate extended memory block (%dK)
\n
"
,
DX_reg
(
context
));
DX_reg
(
context
)
=
GlobalAlloc16
(
GMEM_MOVEABLE
,
(
DWORD
)
DX_reg
(
context
)
<<
10
);
AX_reg
(
context
)
=
DX_reg
(
context
)
?
1
:
0
;
if
(
!
DX_reg
(
context
))
BL_reg
(
context
)
=
0xA0
;
/* out of memory */
SET_DX
(
context
,
GlobalAlloc16
(
GMEM_MOVEABLE
,
(
DWORD
)
DX_reg
(
context
)
<<
10
)
);
SET_AX
(
context
,
DX_reg
(
context
)
?
1
:
0
);
if
(
!
DX_reg
(
context
))
SET_BL
(
context
,
0xA0
);
/* out of memory */
break
;
case
0x0a
:
/* Free Extended Memory Block */
TRACE
(
"free extended memory block %04x
\n
"
,
DX_reg
(
context
));
if
(
!
DX_reg
(
context
)
||
GlobalFree16
(
DX_reg
(
context
)))
{
AX_reg
(
context
)
=
0
;
/* failure */
BL_reg
(
context
)
=
0xa2
;
/* invalid handle */
SET_AX
(
context
,
0
)
;
/* failure */
SET_BL
(
context
,
0xa2
)
;
/* invalid handle */
}
else
AX_reg
(
context
)
=
1
;
/* success */
SET_AX
(
context
,
1
)
;
/* success */
break
;
case
0x0b
:
/* Move Extended Memory Block */
{
...
...
@@ -106,8 +106,8 @@ void WINAPI XMS_Handler( CONTEXT86 *context )
}
default:
INT_BARF
(
context
,
0x31
);
AX_reg
(
context
)
=
0x0000
;
/* failure */
BL_reg
(
context
)
=
0x80
;
/* function not implemented */
SET_AX
(
context
,
0x0000
)
;
/* failure */
SET_BL
(
context
,
0x80
)
;
/* function not implemented */
break
;
}
}
if1632/relay.c
View file @
3fa613cf
...
...
@@ -349,8 +349,8 @@ void RELAY_DebugCallFrom16( CONTEXT86 *context )
if
(
call
->
arg_types
[
0
]
&
ARG_REGISTER
)
DPRINTF
(
" AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x EFL=%08lx
\n
"
,
AX_reg
(
context
),
BX_reg
(
context
),
CX_reg
(
context
)
,
DX_reg
(
context
),
SI_reg
(
context
),
DI_reg
(
context
)
,
(
WORD
)
context
->
Eax
,
(
WORD
)
context
->
Ebx
,
(
WORD
)
context
->
Ecx
,
(
WORD
)
context
->
Edx
,
(
WORD
)
context
->
Esi
,
(
WORD
)
context
->
Edi
,
(
WORD
)
context
->
SegEs
,
context
->
EFlags
);
SYSLEVEL_CheckNotLevel
(
2
);
...
...
@@ -379,8 +379,8 @@ void RELAY_DebugCallFrom16Ret( CONTEXT86 *context, int ret_val )
DPRINTF
(
"retval=none ret=%04x:%04x ds=%04x
\n
"
,
(
WORD
)
context
->
SegCs
,
LOWORD
(
context
->
Eip
),
(
WORD
)
context
->
SegDs
);
DPRINTF
(
" AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x EFL=%08lx
\n
"
,
AX_reg
(
context
),
BX_reg
(
context
),
CX_reg
(
context
)
,
DX_reg
(
context
),
SI_reg
(
context
),
DI_reg
(
context
)
,
(
WORD
)
context
->
Eax
,
(
WORD
)
context
->
Ebx
,
(
WORD
)
context
->
Ecx
,
(
WORD
)
context
->
Edx
,
(
WORD
)
context
->
Esi
,
(
WORD
)
context
->
Edi
,
(
WORD
)
context
->
SegEs
,
context
->
EFlags
);
}
else
if
(
call
->
arg_types
[
0
]
&
ARG_RET16
)
...
...
@@ -427,9 +427,9 @@ void RELAY_DebugCallTo16( LPVOID target, int nb_args, BOOL reg_func )
DPRINTF
(
") ss:sp=%04x:%04x"
,
SELECTOROF
(
teb
->
cur_stack
),
OFFSETOF
(
teb
->
cur_stack
)
);
DPRINTF
(
" ax=%04x bx=%04x cx=%04x dx=%04x si=%04x di=%04x bp=%04x es=%04x fs=%04x
\n
"
,
AX_reg
(
context
),
BX_reg
(
context
),
CX_reg
(
context
)
,
DX_reg
(
context
),
SI_reg
(
context
),
DI_reg
(
context
)
,
BP_reg
(
context
)
,
(
WORD
)
context
->
SegEs
,
(
WORD
)
context
->
SegFs
);
(
WORD
)
context
->
Eax
,
(
WORD
)
context
->
Ebx
,
(
WORD
)
context
->
Ecx
,
(
WORD
)
context
->
Edx
,
(
WORD
)
context
->
Esi
,
(
WORD
)
context
->
Edi
,
(
WORD
)
context
->
Ebp
,
(
WORD
)
context
->
SegEs
,
(
WORD
)
context
->
SegFs
);
}
else
{
...
...
@@ -468,8 +468,8 @@ void RELAY_DebugCallTo16Ret( BOOL reg_func, int ret_val )
SELECTOROF
(
NtCurrentTeb
()
->
cur_stack
),
OFFSETOF
(
NtCurrentTeb
()
->
cur_stack
));
DPRINTF
(
" ax=%04x bx=%04x cx=%04x dx=%04x bp=%04x sp=%04x
\n
"
,
AX_reg
(
context
),
BX_reg
(
context
),
CX_reg
(
context
)
,
DX_reg
(
context
),
BP_reg
(
context
),
LOWORD
(
context
->
Esp
)
);
(
WORD
)
context
->
Eax
,
(
WORD
)
context
->
Ebx
,
(
WORD
)
context
->
Ecx
,
(
WORD
)
context
->
Edx
,
(
WORD
)
context
->
Ebp
,
(
WORD
)
context
->
Esp
);
}
SYSLEVEL_CheckNotLevel
(
2
);
...
...
if1632/snoop.c
View file @
3fa613cf
...
...
@@ -330,14 +330,16 @@ void WINAPI SNOOP16_Return(FARPROC proc, LPBYTE args, CONTEXT86 *context) {
if
(
max
!=
ret
->
dll
->
funs
[
ret
->
ordinal
].
nrofargs
)
DPRINTF
(
" ..."
);
DPRINTF
(
") retval = %04x:%04x ret=%04x:%04x
\n
"
,
DX_reg
(
context
),
AX_reg
(
context
),
HIWORD
(
ret
->
origreturn
),
LOWORD
(
ret
->
origreturn
)
(
WORD
)
context
->
Edx
,(
WORD
)
context
->
Eax
,
HIWORD
(
ret
->
origreturn
),
LOWORD
(
ret
->
origreturn
)
);
HeapFree
(
GetProcessHeap
(),
0
,
ret
->
args
);
ret
->
args
=
NULL
;
}
else
DPRINTF
(
"RET %s.%ld: %s() retval = %04x:%04x ret=%04x:%04x
\n
"
,
ret
->
dll
->
name
,
ret
->
ordinal
,
ret
->
dll
->
funs
[
ret
->
ordinal
].
name
,
DX_reg
(
context
),
AX_reg
(
context
),
HIWORD
(
ret
->
origreturn
),
LOWORD
(
ret
->
origreturn
)
(
WORD
)
context
->
Edx
,(
WORD
)
context
->
Eax
,
HIWORD
(
ret
->
origreturn
),
LOWORD
(
ret
->
origreturn
)
);
ret
->
origreturn
=
NULL
;
/* mark as empty */
}
...
...
include/miscemu.h
View file @
3fa613cf
...
...
@@ -163,9 +163,6 @@ extern WORD DOSMEM_xms_seg;
extern
WORD
DOSMEM_dpmi_seg
;
extern
WORD
DOSMEM_dpmi_sel
;
extern
DWORD
DOS_LOLSeg
;
extern
struct
_DOS_LISTOFLISTS
*
DOSMEM_LOL
();
extern
BOOL
DOSMEM_Init
(
BOOL
);
extern
void
DOSMEM_Tick
(
WORD
timer
);
extern
WORD
DOSMEM_AllocSelector
(
WORD
);
...
...
@@ -277,4 +274,45 @@ extern char IO_pp_init(void);
LOWORD((context)->Ecx), LOWORD((context)->Edx), LOWORD((context)->Esi), \
LOWORD((context)->Edi), (WORD)(context)->SegDs, (WORD)(context)->SegEs )
/* Macros for easier access to i386 context registers */
#define AX_reg(context) ((WORD)(context)->Eax)
#define BX_reg(context) ((WORD)(context)->Ebx)
#define CX_reg(context) ((WORD)(context)->Ecx)
#define DX_reg(context) ((WORD)(context)->Edx)
#define SI_reg(context) ((WORD)(context)->Esi)
#define DI_reg(context) ((WORD)(context)->Edi)
#define AL_reg(context) ((BYTE)(context)->Eax)
#define AH_reg(context) ((BYTE)((context)->Eax >> 8))
#define BL_reg(context) ((BYTE)(context)->Ebx)
#define BH_reg(context) ((BYTE)((context)->Ebx >> 8))
#define CL_reg(context) ((BYTE)(context)->Ecx)
#define CH_reg(context) ((BYTE)((context)->Ecx >> 8))
#define DL_reg(context) ((BYTE)(context)->Edx)
#define DH_reg(context) ((BYTE)((context)->Edx >> 8))
#define SET_CFLAG(context) ((context)->EFlags |= 0x0001)
#define RESET_CFLAG(context) ((context)->EFlags &= ~0x0001)
#define SET_ZFLAG(context) ((context)->EFlags |= 0x0040)
#define RESET_ZFLAG(context) ((context)->EFlags &= ~0x0040)
#define ISV86(context) ((context)->EFlags & 0x00020000)
#define SET_AX(context,val) ((context)->Eax = ((context)->Eax & ~0xffff) | (WORD)(val))
#define SET_BX(context,val) ((context)->Ebx = ((context)->Ebx & ~0xffff) | (WORD)(val))
#define SET_CX(context,val) ((context)->Ecx = ((context)->Ecx & ~0xffff) | (WORD)(val))
#define SET_DX(context,val) ((context)->Edx = ((context)->Edx & ~0xffff) | (WORD)(val))
#define SET_SI(context,val) ((context)->Esi = ((context)->Esi & ~0xffff) | (WORD)(val))
#define SET_DI(context,val) ((context)->Edi = ((context)->Edi & ~0xffff) | (WORD)(val))
#define SET_AL(context,val) ((context)->Eax = ((context)->Eax & ~0xff) | (BYTE)(val))
#define SET_BL(context,val) ((context)->Ebx = ((context)->Ebx & ~0xff) | (BYTE)(val))
#define SET_CL(context,val) ((context)->Ecx = ((context)->Ecx & ~0xff) | (BYTE)(val))
#define SET_DL(context,val) ((context)->Edx = ((context)->Edx & ~0xff) | (BYTE)(val))
#define SET_AH(context,val) ((context)->Eax = ((context)->Eax & ~0xff00) | (((BYTE)(val)) << 8))
#define SET_BH(context,val) ((context)->Ebx = ((context)->Ebx & ~0xff00) | (((BYTE)(val)) << 8))
#define SET_CH(context,val) ((context)->Ecx = ((context)->Ecx & ~0xff00) | (((BYTE)(val)) << 8))
#define SET_DH(context,val) ((context)->Edx = ((context)->Edx & ~0xff00) | (((BYTE)(val)) << 8))
#endif
/* __WINE_MISCEMU_H */
include/winnt.h
View file @
3fa613cf
...
...
@@ -1084,32 +1084,6 @@ typedef CONTEXT *PCONTEXT;
#ifdef __WINE__
/* Macros for easier access to i386 context registers */
#define AX_reg(context) (*(WORD*)&(context)->Eax)
#define BX_reg(context) (*(WORD*)&(context)->Ebx)
#define CX_reg(context) (*(WORD*)&(context)->Ecx)
#define DX_reg(context) (*(WORD*)&(context)->Edx)
#define SI_reg(context) (*(WORD*)&(context)->Esi)
#define DI_reg(context) (*(WORD*)&(context)->Edi)
#define BP_reg(context) (*(WORD*)&(context)->Ebp)
#define AL_reg(context) (*(BYTE*)&(context)->Eax)
#define AH_reg(context) (*((BYTE*)&(context)->Eax + 1))
#define BL_reg(context) (*(BYTE*)&(context)->Ebx)
#define BH_reg(context) (*((BYTE*)&(context)->Ebx + 1))
#define CL_reg(context) (*(BYTE*)&(context)->Ecx)
#define CH_reg(context) (*((BYTE*)&(context)->Ecx + 1))
#define DL_reg(context) (*(BYTE*)&(context)->Edx)
#define DH_reg(context) (*((BYTE*)&(context)->Edx + 1))
#define SET_CFLAG(context) ((context)->EFlags |= 0x0001)
#define RESET_CFLAG(context) ((context)->EFlags &= ~0x0001)
#define SET_ZFLAG(context) ((context)->EFlags |= 0x0040)
#define RESET_ZFLAG(context) ((context)->EFlags &= ~0x0040)
#define ISV86(context) ((context)->EFlags & 0x00020000)
/* Macros to retrieve the current context */
#ifdef __i386__
...
...
loader/task.c
View file @
3fa613cf
...
...
@@ -1135,7 +1135,7 @@ void WINAPI SwitchStackBack16( CONTEXT86 *context )
/* Pop bp from the previous stack */
BP_reg
(
context
)
=
*
(
WORD
*
)
MapSL
(
pData
->
old_ss_sp
);
context
->
Ebp
=
(
context
->
Ebp
&
~
0xffff
)
|
*
(
WORD
*
)
MapSL
(
pData
->
old_ss_sp
);
pData
->
old_ss_sp
+=
sizeof
(
WORD
);
/* Switch back to the old stack */
...
...
misc/system.c
View file @
3fa613cf
...
...
@@ -169,8 +169,7 @@ static void call_timer_proc16( WORD timer )
context
.
Eip
=
OFFSETOF
(
proc
);
context
.
Ebp
=
OFFSETOF
(
NtCurrentTeb
()
->
cur_stack
)
+
(
WORD
)
&
((
STACK16FRAME
*
)
0
)
->
bp
;
AX_reg
(
&
context
)
=
timer
;
context
.
Eax
=
timer
;
wine_call_to_16_regs_short
(
&
context
,
0
);
}
...
...
@@ -247,4 +246,3 @@ void WINAPI Restore80x87State16( const char *ptr )
__asm__
(
".byte 0x66; frstor %0"
:
:
"m"
(
ptr
)
);
#endif
}
msdos/dosmem.c
View file @
3fa613cf
...
...
@@ -91,8 +91,6 @@ WORD DOSMEM_xms_seg;
WORD
DOSMEM_dpmi_seg
;
WORD
DOSMEM_dpmi_sel
;
DWORD
DOS_LOLSeg
;
/***********************************************************************
* DOSMEM_MemoryTop
*
...
...
msdos/dpmi.c
View file @
3fa613cf
...
...
@@ -344,8 +344,8 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
}
else
{
CX_reg
(
context
)
=
HIWORD
(
W32S_WINE2APP
(
dw
)
);
DX_reg
(
context
)
=
LOWORD
(
W32S_WINE2APP
(
dw
)
);
SET_CX
(
context
,
HIWORD
(
W32S_WINE2APP
(
dw
))
);
SET_DX
(
context
,
LOWORD
(
W32S_WINE2APP
(
dw
))
);
}
break
;
...
...
@@ -373,9 +373,9 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
case
0x000a
:
/* Allocate selector alias */
TRACE
(
"allocate selector alias (0x%04x)
\n
"
,
BX_reg
(
context
));
if
(
!
(
AX_reg
(
context
)
=
AllocCStoDSAlias16
(
BX_reg
(
context
)
)))
if
(
!
SET_AX
(
context
,
AllocCStoDSAlias16
(
BX_reg
(
context
)
)))
{
AX_reg
(
context
)
=
0x8011
;
/* descriptor unavailable */
SET_AX
(
context
,
0x8011
)
;
/* descriptor unavailable */
SET_CFLAG
(
context
);
}
break
;
...
...
@@ -401,18 +401,18 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
case
0x000d
:
/* Allocate specific LDT descriptor */
FIXME
(
"allocate descriptor (0x%04x), stub!
\n
"
,
BX_reg
(
context
));
AX_reg
(
context
)
=
0x8011
;
/* descriptor unavailable */
SET_AX
(
context
,
0x8011
)
;
/* descriptor unavailable */
SET_CFLAG
(
context
);
break
;
case
0x0100
:
/* Allocate DOS memory block */
TRACE
(
"allocate DOS memory block (0x%x paragraphs)
\n
"
,
BX_reg
(
context
));
dw
=
GlobalDOSAlloc16
((
DWORD
)
BX_reg
(
context
)
<<
4
);
if
(
dw
)
{
AX_reg
(
context
)
=
HIWORD
(
dw
);
DX_reg
(
context
)
=
LOWORD
(
dw
);
SET_AX
(
context
,
HIWORD
(
dw
)
);
SET_DX
(
context
,
LOWORD
(
dw
)
);
}
else
{
AX_reg
(
context
)
=
0x0008
;
/* insufficient memory */
BX_reg
(
context
)
=
DOSMEM_Available
()
>>
4
;
SET_AX
(
context
,
0x0008
)
;
/* insufficient memory */
SET_BX
(
context
,
DOSMEM_Available
()
>>
4
)
;
SET_CFLAG
(
context
);
}
break
;
...
...
@@ -420,7 +420,7 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
TRACE
(
"free DOS memory block (0x%04x)
\n
"
,
DX_reg
(
context
));
dw
=
GlobalDOSFree16
(
DX_reg
(
context
));
if
(
!
dw
)
{
AX_reg
(
context
)
=
0x0009
;
/* memory block address invalid */
SET_AX
(
context
,
0x0009
)
;
/* memory block address invalid */
SET_CFLAG
(
context
);
}
break
;
...
...
@@ -436,8 +436,8 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
case
0x0204
:
/* Get protected mode interrupt vector */
TRACE
(
"get protected mode interrupt handler (0x%02x), stub!
\n
"
,
BL_reg
(
context
));
dw
=
(
DWORD
)
INT_GetPMHandler
(
BL_reg
(
context
)
);
CX_reg
(
context
)
=
HIWORD
(
dw
);
DX_reg
(
context
)
=
LOWORD
(
dw
);
SET_CX
(
context
,
HIWORD
(
dw
)
);
SET_DX
(
context
,
LOWORD
(
dw
)
);
break
;
case
0x0205
:
/* Set protected mode interrupt vector */
...
...
@@ -470,23 +470,23 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
case
0x0305
:
/* Get State Save/Restore Addresses */
TRACE
(
"get state save/restore addresses
\n
"
);
/* we probably won't need this kind of state saving */
AX_reg
(
context
)
=
0
;
SET_AX
(
context
,
0
)
;
/* real mode: just point to the lret */
BX_reg
(
context
)
=
DOSMEM_wrap_seg
;
SET_BX
(
context
,
DOSMEM_wrap_seg
)
;
context
->
Ecx
=
2
;
/* protected mode: don't have any handler yet... */
FIXME
(
"no protected-mode dummy state save/restore handler yet
\n
"
);
S
I_reg
(
context
)
=
0
;
S
ET_SI
(
context
,
0
)
;
context
->
Edi
=
0
;
break
;
case
0x0306
:
/* Get Raw Mode Switch Addresses */
TRACE
(
"get raw mode switch addresses
\n
"
);
/* real mode, point to standard DPMI return wrapper */
BX_reg
(
context
)
=
DOSMEM_wrap_seg
;
SET_BX
(
context
,
DOSMEM_wrap_seg
)
;
context
->
Ecx
=
0
;
/* protected mode, point to DPMI call wrapper */
S
I_reg
(
context
)
=
DOSMEM_dpmi_sel
;
S
ET_SI
(
context
,
DOSMEM_dpmi_sel
)
;
context
->
Edi
=
8
;
/* offset of the INT 0x31 call */
break
;
case
0x0400
:
/* Get DPMI version */
...
...
@@ -495,10 +495,10 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
SYSTEM_INFO
si
;
GetSystemInfo
(
&
si
);
AX_reg
(
context
)
=
0x005a
;
/* DPMI version 0.90 */
BX_reg
(
context
)
=
0x0005
;
/* Flags: 32-bit, virtual memory */
CL_reg
(
context
)
=
si
.
wProcessorLevel
;
DX_reg
(
context
)
=
0x0102
;
/* Master/slave interrupt controller base*/
SET_AX
(
context
,
0x005a
)
;
/* DPMI version 0.90 */
SET_BX
(
context
,
0x0005
)
;
/* Flags: 32-bit, virtual memory */
SET_CL
(
context
,
si
.
wProcessorLevel
)
;
SET_DX
(
context
,
0x0102
)
;
/* Master/slave interrupt controller base*/
break
;
}
case
0x0500
:
/* Get free memory information */
...
...
@@ -519,11 +519,13 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
TRACE
(
"allocate memory block (%ld)
\n
"
,
MAKELONG
(
CX_reg
(
context
),
BX_reg
(
context
)));
if
(
!
(
ptr
=
(
BYTE
*
)
DPMI_xalloc
(
MAKELONG
(
CX_reg
(
context
),
BX_reg
(
context
)))))
{
AX_reg
(
context
)
=
0x8012
;
/* linear memory not available */
SET_AX
(
context
,
0x8012
)
;
/* linear memory not available */
SET_CFLAG
(
context
);
}
else
{
BX_reg
(
context
)
=
SI_reg
(
context
)
=
HIWORD
(
W32S_WINE2APP
(
ptr
));
CX_reg
(
context
)
=
DI_reg
(
context
)
=
LOWORD
(
W32S_WINE2APP
(
ptr
));
SET_BX
(
context
,
HIWORD
(
W32S_WINE2APP
(
ptr
))
);
SET_CX
(
context
,
LOWORD
(
W32S_WINE2APP
(
ptr
))
);
SET_SI
(
context
,
HIWORD
(
W32S_WINE2APP
(
ptr
))
);
SET_DI
(
context
,
LOWORD
(
W32S_WINE2APP
(
ptr
))
);
}
break
;
...
...
@@ -541,11 +543,13 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
(
void
*
)
W32S_APP2WINE
(
MAKELONG
(
DI_reg
(
context
),
SI_reg
(
context
))),
MAKELONG
(
CX_reg
(
context
),
BX_reg
(
context
)))))
{
AX_reg
(
context
)
=
0x8012
;
/* linear memory not available */
SET_AX
(
context
,
0x8012
)
;
/* linear memory not available */
SET_CFLAG
(
context
);
}
else
{
BX_reg
(
context
)
=
SI_reg
(
context
)
=
HIWORD
(
W32S_WINE2APP
(
ptr
));
CX_reg
(
context
)
=
DI_reg
(
context
)
=
LOWORD
(
W32S_WINE2APP
(
ptr
));
SET_BX
(
context
,
HIWORD
(
W32S_WINE2APP
(
ptr
))
);
SET_CX
(
context
,
LOWORD
(
W32S_WINE2APP
(
ptr
))
);
SET_SI
(
context
,
HIWORD
(
W32S_WINE2APP
(
ptr
))
);
SET_DI
(
context
,
LOWORD
(
W32S_WINE2APP
(
ptr
))
);
}
break
;
...
...
@@ -571,8 +575,8 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
case
0x0604
:
/* Get page size */
TRACE
(
"get pagesize
\n
"
);
BX_reg
(
context
)
=
0
;
CX_reg
(
context
)
=
getpagesize
(
);
SET_BX
(
context
,
0
)
;
SET_CX
(
context
,
getpagesize
()
);
break
;
case
0x0702
:
/* Mark page as demand-paging candidate */
...
...
@@ -587,20 +591,20 @@ void WINAPI INT_Int31Handler( CONTEXT86 *context )
FIXME
(
"map real to linear (0x%08lx)
\n
"
,
MAKELONG
(
CX_reg
(
context
),
BX_reg
(
context
)));
if
(
!
(
ptr
=
DOSMEM_MapRealToLinear
(
MAKELONG
(
CX_reg
(
context
),
BX_reg
(
context
)))))
{
AX_reg
(
context
)
=
0x8021
;
SET_AX
(
context
,
0x8021
)
;
SET_CFLAG
(
context
);
}
else
{
BX_reg
(
context
)
=
HIWORD
(
W32S_WINE2APP
(
ptr
)
);
CX_reg
(
context
)
=
LOWORD
(
W32S_WINE2APP
(
ptr
)
);
SET_BX
(
context
,
HIWORD
(
W32S_WINE2APP
(
ptr
))
);
SET_CX
(
context
,
LOWORD
(
W32S_WINE2APP
(
ptr
))
);
RESET_CFLAG
(
context
);
}
break
;
default:
INT_BARF
(
context
,
0x31
);
AX_reg
(
context
)
=
0x8001
;
/* unsupported function */
SET_AX
(
context
,
0x8001
)
;
/* unsupported function */
SET_CFLAG
(
context
);
break
;
}
...
...
msdos/int11.c
View file @
3fa613cf
...
...
@@ -98,6 +98,5 @@ void WINAPI INT_Int11Handler( CONTEXT86 *context )
if
(
parallelports
>
3
)
/* 2 bits -- maximum value = 3 */
parallelports
=
3
;
AX_reg
(
context
)
=
(
diskdrives
<<
6
)
|
(
serialports
<<
9
)
|
(
parallelports
<<
14
)
|
0x02
;
SET_AX
(
context
,
(
diskdrives
<<
6
)
|
(
serialports
<<
9
)
|
(
parallelports
<<
14
)
|
0x02
);
}
msdos/int12.c
View file @
3fa613cf
...
...
@@ -11,5 +11,5 @@
*/
void
WINAPI
INT_Int12Handler
(
CONTEXT86
*
context
)
{
AX_reg
(
context
)
=
640
;
SET_AX
(
context
,
640
)
;
}
msdos/int15.c
View file @
3fa613cf
...
...
@@ -41,13 +41,13 @@ void WINAPI INT_Int15Handler( CONTEXT86 *context )
switch
(
DX_reg
(
context
))
{
case
0x0
:
/* read joystick switches */
AL_reg
(
context
)
=
0x0
;
/* all switches open */
SET_AL
(
context
,
0x0
)
;
/* all switches open */
break
;
case
0x1
:
/* read joystick position */
AX_reg
(
context
)
=
0x0
;
BX_reg
(
context
)
=
0x0
;
CX_reg
(
context
)
=
0x0
;
DX_reg
(
context
)
=
0x0
;
SET_AX
(
context
,
0x0
)
;
SET_BX
(
context
,
0x0
)
;
SET_CX
(
context
,
0x0
)
;
SET_DX
(
context
,
0x0
)
;
break
;
default:
INT_BARF
(
context
,
0x15
);
...
...
@@ -59,7 +59,7 @@ void WINAPI INT_Int15Handler( CONTEXT86 *context )
break
;
case
0x88
:
/* get size of memory above 1 M */
AX_reg
(
context
)
=
64
;
/* FIXME: are 64K ok? */
SET_AX
(
context
,
64
)
;
/* FIXME: are 64K ok? */
RESET_CFLAG
(
context
);
break
;
...
...
@@ -68,8 +68,8 @@ void WINAPI INT_Int15Handler( CONTEXT86 *context )
context
->
SegEs
=
0xf000
;
else
context
->
SegEs
=
DOSMEM_BiosSysSeg
;
BX_reg
(
context
)
=
0xe6f5
;
AH_reg
(
context
)
=
0x0
;
SET_BX
(
context
,
0xe6f5
)
;
SET_AH
(
context
,
0x0
)
;
RESET_CFLAG
(
context
);
break
;
case
0xc2
:
...
...
@@ -89,16 +89,16 @@ void WINAPI INT_Int15Handler( CONTEXT86 *context )
INT_BARF
(
context
,
0x15
);
break
;
}
AH_reg
(
context
)
=
0x00
;
/* successful */
SET_AH
(
context
,
0x00
)
;
/* successful */
break
;
case
0x02
:
/* Set Sampling Rate */
/* BH = sampling rate */
FIXME
(
"Set Sampling Rate - not implemented
\n
"
);
AH_reg
(
context
)
=
0x00
;
/* successful */
SET_AH
(
context
,
0x00
)
;
/* successful */
break
;
case
0x04
:
/* Get Pointing Device Type */
FIXME
(
"Get Pointing Device Type - not implemented
\n
"
);
BH_reg
(
context
)
=
0x01
;
/*Device id FIXME what is it supposed to be?*/
SET_BH
(
context
,
0x01
)
;
/*Device id FIXME what is it supposed to be?*/
break
;
default:
INT_BARF
(
context
,
0x15
);
...
...
msdos/int1a.c
View file @
3fa613cf
...
...
@@ -75,9 +75,9 @@ void WINAPI INT_Int1aHandler( CONTEXT86 *context )
{
case
0x00
:
ticks
=
INT1A_GetTicksSinceMidnight
();
CX_reg
(
context
)
=
HIWORD
(
ticks
);
DX_reg
(
context
)
=
LOWORD
(
ticks
);
AX_reg
(
context
)
=
0
;
/* No midnight rollover */
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
;
...
...
@@ -85,17 +85,17 @@ void WINAPI INT_Int1aHandler( CONTEXT86 *context )
ltime
=
time
(
NULL
);
bdtime
=
localtime
(
&
ltime
);
CX_reg
(
context
)
=
(
BIN_TO_BCD
(
bdtime
->
tm_hour
)
<<
8
)
|
BIN_TO_BCD
(
bdtime
->
tm_min
);
DX_reg
(
context
)
=
(
BIN_TO_BCD
(
bdtime
->
tm_sec
)
<<
8
);
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
(
&
ltime
);
CX_reg
(
context
)
=
(
BIN_TO_BCD
(
bdtime
->
tm_year
/
100
)
<<
8
)
|
BIN_TO_BCD
((
bdtime
->
tm_year
-
1900
)
%
100
);
DX_reg
(
context
)
=
(
BIN_TO_BCD
(
bdtime
->
tm_mon
)
<<
8
)
|
BIN_TO_BCD
(
bdtime
->
tm_mday
);
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 */
...
...
msdos/int21.c
View file @
3fa613cf
This diff is collapsed.
Click to expand it.
msdos/int25.c
View file @
3fa613cf
...
...
@@ -47,7 +47,7 @@ void WINAPI INT_Int25Handler( CONTEXT86 *context )
if
(
!
DRIVE_IsValid
(
LOBYTE
(
context
->
Eax
)))
{
SET_CFLAG
(
context
);
AX_reg
(
context
)
=
0x0201
;
/* unknown unit */
SET_AX
(
context
,
0x0201
)
;
/* unknown unit */
return
;
}
...
...
@@ -70,4 +70,3 @@ void WINAPI INT_Int25Handler( CONTEXT86 *context )
DRIVE_RawRead
(
LOBYTE
(
context
->
Eax
),
begin
,
length
,
dataptr
,
TRUE
);
RESET_CFLAG
(
context
);
}
msdos/int26.c
View file @
3fa613cf
...
...
@@ -45,7 +45,7 @@ void WINAPI INT_Int26Handler( CONTEXT86 *context )
if
(
!
DRIVE_IsValid
(
LOBYTE
(
context
->
Eax
)))
{
SET_CFLAG
(
context
);
AX_reg
(
context
)
=
0x0201
;
/* unknown unit */
SET_AX
(
context
,
0x0201
)
;
/* unknown unit */
return
;
}
...
...
msdos/int2f.c
View file @
3fa613cf
...
...
@@ -53,7 +53,7 @@ void WINAPI INT_Int2fHandler( CONTEXT86 *context )
switch
(
AH_reg
(
context
))
{
case
0x10
:
AL_reg
(
context
)
=
0xff
;
/* share is installed */
SET_AL
(
context
,
0xff
)
;
/* share is installed */
break
;
case
0x11
:
/* Network Redirector / IFSFUNC */
...
...
@@ -93,7 +93,7 @@ void WINAPI INT_Int2fHandler( CONTEXT86 *context )
case
0x04
:
case
0x06
:
context
->
SegEs
=
0x0001
;
DI_reg
(
context
)
=
0x0000
;
SET_DI
(
context
,
0x0000
)
;
break
;
case
0x08
:
FIXME
(
"No real-mode handler for errors yet! (bye!)
\n
"
);
...
...
@@ -125,12 +125,12 @@ void WINAPI INT_Int2fHandler( CONTEXT86 *context )
{
case
0x00
:
/* XMS v2+ installation check */
WARN
(
"XMS is not fully implemented
\n
"
);
AL_reg
(
context
)
=
0x80
;
SET_AL
(
context
,
0x80
)
;
break
;
case
0x10
:
/* XMS v2+ get driver address */
{
context
->
SegEs
=
DOSMEM_xms_seg
;
BX_reg
(
context
)
=
0
;
SET_BX
(
context
,
0
)
;
break
;
}
default:
...
...
@@ -138,7 +138,7 @@ void WINAPI INT_Int2fHandler( CONTEXT86 *context )
}
#else
FIXME
(
"check for XMS (not supported)
\n
"
);
AL_reg
(
context
)
=
0x42
;
/* != 0x80 */
SET_AL
(
context
,
0x42
)
;
/* != 0x80 */
#endif
break
;
...
...
@@ -194,7 +194,7 @@ void WINAPI INT_Int2fHandler( CONTEXT86 *context )
switch
(
LOBYTE
(
context
->
Eax
))
{
case
0x01
:
/* check if redirected drive */
AL_reg
(
context
)
=
0
;
/* not redirected */
SET_AL
(
context
,
0
)
;
/* not redirected */
break
;
default:
INT_BARF
(
context
,
0x2f
);
...
...
@@ -204,7 +204,7 @@ void WINAPI INT_Int2fHandler( CONTEXT86 *context )
switch
(
LOBYTE
(
context
->
Eax
))
{
case
0x0
:
/* Low-level Netware installation check AL=0 not installed.*/
AL_reg
(
context
)
=
0
;
SET_AL
(
context
,
0
)
;
break
;
case
0x20
:
/* Get VLM Call Address */
/* return nothing -> NetWare not installed */
...
...
@@ -215,7 +215,7 @@ void WINAPI INT_Int2fHandler( CONTEXT86 *context )
}
break
;
case
0xb7
:
/* append */
AL_reg
(
context
)
=
0
;
/* not installed */
SET_AL
(
context
,
0
)
;
/* not installed */
break
;
case
0xb8
:
/* network */
switch
(
LOBYTE
(
context
->
Eax
))
...
...
@@ -229,7 +229,7 @@ void WINAPI INT_Int2fHandler( CONTEXT86 *context )
}
break
;
case
0xbd
:
/* some Novell network install check ??? */
AX_reg
(
context
)
=
0xa5a5
;
/* pretend to have Novell IPX installed */
SET_AX
(
context
,
0xa5a5
)
;
/* pretend to have Novell IPX installed */
break
;
case
0xbf
:
/* REDIRIFS.EXE */
switch
(
LOBYTE
(
context
->
Eax
))
...
...
@@ -298,15 +298,13 @@ static void do_int2f_16( CONTEXT86 *context )
switch
(
LOBYTE
(
context
->
Eax
))
{
case
0x00
:
/* Windows enhanced mode installation check */
AX_reg
(
context
)
=
(
GetWinFlags16
()
&
WF_ENHANCED
)
?
LOWORD
(
GetVersion16
())
:
0
;
SET_AX
(
context
,
(
GetWinFlags16
()
&
WF_ENHANCED
)
?
LOWORD
(
GetVersion16
())
:
0
);
break
;
case
0x0a
:
/* Get Windows version and type */
AX_reg
(
context
)
=
0
;
BX_reg
(
context
)
=
(
LOWORD
(
GetVersion16
())
<<
8
)
|
(
LOWORD
(
GetVersion16
())
>>
8
);
CX_reg
(
context
)
=
(
GetWinFlags16
()
&
WF_ENHANCED
)
?
3
:
2
;
SET_AX
(
context
,
0
);
SET_BX
(
context
,
(
LOWORD
(
GetVersion16
())
<<
8
)
|
(
LOWORD
(
GetVersion16
())
>>
8
)
);
SET_CX
(
context
,
(
GetWinFlags16
()
&
WF_ENHANCED
)
?
3
:
2
);
break
;
case
0x0b
:
/* Identify Windows-aware TSRs */
...
...
@@ -331,7 +329,7 @@ static void do_int2f_16( CONTEXT86 *context )
* *doesn't* use 100% CPU...
*/
Sleep
(
55
);
/* just wait 55ms (one "timer tick") for now. */
AL_reg
(
context
)
=
0
;
SET_AL
(
context
,
0
)
;
break
;
case
0x81
:
/* Begin critical section. */
...
...
@@ -348,7 +346,7 @@ static void do_int2f_16( CONTEXT86 *context )
* According to Ralf Brown's Interrupt List, never return 0. But it
* seems to work okay (returning 0), just to be sure we return 1.
*/
BX_reg
(
context
)
=
1
;
/* VM 1 is probably the System VM */
SET_BX
(
context
,
1
)
;
/* VM 1 is probably the System VM */
break
;
case
0x84
:
/* Get device API entry point */
...
...
@@ -359,25 +357,25 @@ static void do_int2f_16( CONTEXT86 *context )
if
(
!
addr
)
/* not supported */
ERR
(
"Accessing unknown VxD %04x - Expect a failure now.
\n
"
,
BX_reg
(
context
)
);
context
->
SegEs
=
SELECTOROF
(
addr
);
DI_reg
(
context
)
=
OFFSETOF
(
addr
);
SET_DI
(
context
,
OFFSETOF
(
addr
)
);
}
break
;
case
0x86
:
/* DPMI detect mode */
AX_reg
(
context
)
=
0
;
/* Running under DPMI */
SET_AX
(
context
,
0
)
;
/* Running under DPMI */
break
;
case
0x87
:
/* DPMI installation check */
{
SYSTEM_INFO
si
;
GetSystemInfo
(
&
si
);
AX_reg
(
context
)
=
0x0000
;
/* DPMI Installed */
BX_reg
(
context
)
=
0x0001
;
/* 32bits available */
CL_reg
(
context
)
=
si
.
wProcessorLevel
;
DX_reg
(
context
)
=
0x005a
;
/* DPMI major/minor 0.90 */
S
I_reg
(
context
)
=
0
;
/* # of para. of DOS extended private data */
SET_AX
(
context
,
0x0000
)
;
/* DPMI Installed */
SET_BX
(
context
,
0x0001
)
;
/* 32bits available */
SET_CL
(
context
,
si
.
wProcessorLevel
)
;
SET_DX
(
context
,
0x005a
)
;
/* DPMI major/minor 0.90 */
S
ET_SI
(
context
,
0
)
;
/* # of para. of DOS extended private data */
context
->
SegEs
=
DOSMEM_dpmi_seg
;
DI_reg
(
context
)
=
0
;
/* ES:DI is DPMI switch entry point */
SET_DI
(
context
,
0
)
;
/* ES:DI is DPMI switch entry point */
break
;
}
case
0x8a
:
/* DPMI get vendor-specific API entry point. */
...
...
@@ -477,17 +475,17 @@ static void MSCDEX_Handler(CONTEXT86* context)
}
}
TRACE
(
"Installation check: %d cdroms, starting at %d
\n
"
,
count
,
drive
);
BX_reg
(
context
)
=
count
;
CX_reg
(
context
)
=
(
drive
<
26
)
?
drive
:
0
;
SET_BX
(
context
,
count
)
;
SET_CX
(
context
,
(
drive
<
26
)
?
drive
:
0
)
;
break
;
case
0x0B
:
/* drive check */
AX_reg
(
context
)
=
is_cdrom
(
CX_reg
(
context
)
);
BX_reg
(
context
)
=
0xADAD
;
SET_AX
(
context
,
is_cdrom
(
CX_reg
(
context
))
);
SET_BX
(
context
,
0xADAD
)
;
break
;
case
0x0C
:
/* get version */
BX_reg
(
context
)
=
0x020a
;
SET_BX
(
context
,
0x020a
)
;
TRACE
(
"Version number => %04x
\n
"
,
BX_reg
(
context
));
break
;
...
...
msdos/int4b.c
View file @
3fa613cf
...
...
@@ -20,7 +20,7 @@ void WINAPI INT_Int4bHandler( CONTEXT86 *context )
if
(
AL_reg
(
context
)
!=
0x02
)
/* if not install check */
{
SET_CFLAG
(
context
);
AL_reg
(
context
)
=
0x0f
;
/* function is not implemented */
SET_AL
(
context
,
0x0f
)
;
/* function is not implemented */
}
break
;
default:
...
...
msdos/int5c.c
View file @
3fa613cf
...
...
@@ -35,6 +35,6 @@ void WINAPI NetBIOSCall16( CONTEXT86 *context )
BYTE
*
ptr
;
ptr
=
MapSL
(
MAKESEGPTR
(
context
->
SegEs
,
BX_reg
(
context
))
);
FIXME
(
"(%p): command code %02x (ignored)
\n
"
,
context
,
*
ptr
);
AL_reg
(
context
)
=
*
(
ptr
+
0x01
)
=
0xFB
;
/* NetBIOS emulator not found */
*
(
ptr
+
0x01
)
=
0xFB
;
/* NetBIOS emulator not found */
SET_AL
(
context
,
0xFB
);
}
msdos/vxd.c
View file @
3fa613cf
...
...
@@ -72,13 +72,13 @@ void WINAPI VXD_VMM ( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
case
0x026d
:
/* Get_Debug_Flag '/m' */
case
0x026e
:
/* Get_Debug_Flag '/n' */
AL_reg
(
context
)
=
0
;
SET_AL
(
context
,
0
)
;
RESET_CFLAG
(
context
);
break
;
...
...
@@ -102,13 +102,13 @@ void WINAPI VXD_PageFile( CONTEXT86 *context )
{
case
0x00
:
/* get version, is this windows version? */
TRACE
(
"returning version
\n
"
);
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
case
0x01
:
/* get swap file info */
TRACE
(
"VxD PageFile: returning swap file info
\n
"
);
AX_reg
(
context
)
=
0x00
;
/* paging disabled */
SET_AX
(
context
,
0x00
)
;
/* paging disabled */
context
->
Ecx
=
0
;
/* maximum size of paging file */
/* FIXME: do I touch DS:SI or DS:DI? */
RESET_CFLAG
(
context
);
...
...
@@ -145,7 +145,7 @@ void WINAPI VXD_Reboot ( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -166,7 +166,7 @@ void WINAPI VXD_VDD ( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -187,7 +187,7 @@ void WINAPI VXD_VMD ( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -209,8 +209,8 @@ void WINAPI VXD_VXDLoader( CONTEXT86 *context )
{
case
0x0000
:
/* get version */
TRACE
(
"returning version
\n
"
);
AX_reg
(
context
)
=
0x0000
;
DX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
0x0000
)
;
SET_DX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -218,21 +218,21 @@ void WINAPI VXD_VXDLoader( CONTEXT86 *context )
FIXME
(
"load device %04lx:%04x (%s)
\n
"
,
context
->
SegDs
,
DX_reg
(
context
),
debugstr_a
(
MapSL
(
MAKESEGPTR
(
context
->
SegDs
,
DX_reg
(
context
)))));
AX_reg
(
context
)
=
0x0000
;
SET_AX
(
context
,
0x0000
)
;
context
->
SegEs
=
0x0000
;
DI_reg
(
context
)
=
0x0000
;
SET_DI
(
context
,
0x0000
)
;
RESET_CFLAG
(
context
);
break
;
case
0x0002
:
/* unload device */
FIXME
(
"unload device (%08lx)
\n
"
,
context
->
Ebx
);
AX_reg
(
context
)
=
0x0000
;
SET_AX
(
context
,
0x0000
)
;
RESET_CFLAG
(
context
);
break
;
default:
VXD_BARF
(
context
,
"VXDLDR"
);
AX_reg
(
context
)
=
0x000B
;
/* invalid function number */
SET_AX
(
context
,
0x000B
)
;
/* invalid function number */
SET_CFLAG
(
context
);
break
;
}
...
...
@@ -251,7 +251,7 @@ void WINAPI VXD_Shell( CONTEXT86 *context )
{
case
0x0000
:
TRACE
(
"returning version
\n
"
);
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
context
->
Ebx
=
1
;
/* system VM Handle */
break
;
...
...
@@ -310,7 +310,7 @@ void WINAPI VXD_Shell( CONTEXT86 *context )
/* the new Win95 shell API */
case
0x0100
:
/* get version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
break
;
case
0x0104
:
/* retrieve Hook_Properties list */
...
...
@@ -344,7 +344,7 @@ void WINAPI VXD_Comm( CONTEXT86 *context )
{
case
0x0000
:
/* get version */
TRACE
(
"returning version
\n
"
);
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -368,7 +368,7 @@ void WINAPI VXD_Timer( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -404,7 +404,7 @@ void WINAPI VXD_TimerAPI ( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -415,7 +415,7 @@ void WINAPI VXD_TimerAPI ( CONTEXT86 *context )
CreateSystemTimer
(
55
,
System_Time_Tick
);
}
AX_reg
(
context
)
=
System_Time_Selector
;
SET_AX
(
context
,
System_Time_Selector
)
;
RESET_CFLAG
(
context
);
break
;
...
...
@@ -436,7 +436,7 @@ void WINAPI VXD_ConfigMG ( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -457,7 +457,7 @@ void WINAPI VXD_Enable ( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
@@ -478,7 +478,7 @@ void WINAPI VXD_APM ( CONTEXT86 *context )
switch
(
service
)
{
case
0x0000
:
/* version */
AX_reg
(
context
)
=
VXD_WinVersion
(
);
SET_AX
(
context
,
VXD_WinVersion
()
);
RESET_CFLAG
(
context
);
break
;
...
...
win32/device.c
View file @
3fa613cf
...
...
@@ -1080,8 +1080,8 @@ static DWORD VxDCall_VWin32( DWORD service, CONTEXT86 *context )
TRACE
(
"Int31/DPMI dispatch(%08lx)
\n
"
,
callnum
);
AX_reg
(
context
)
=
callnum
;
CX_reg
(
context
)
=
parm
;
SET_AX
(
context
,
callnum
)
;
SET_CX
(
context
,
parm
)
;
INT_Int31Handler
(
context
);
return
LOWORD
(
context
->
Eax
);
...
...
windows/input.c
View file @
3fa613cf
...
...
@@ -369,11 +369,11 @@ void WINAPI keybd_event16( CONTEXT86 *context )
{
DWORD
dwFlags
=
0
;
if
(
AH_reg
(
context
)
&
0x80
)
dwFlags
|=
KEYEVENTF_KEYUP
;
if
(
BH_reg
(
context
)
&
1
)
dwFlags
|=
KEYEVENTF_EXTENDEDKEY
;
if
(
HIBYTE
(
context
->
Eax
)
&
0x80
)
dwFlags
|=
KEYEVENTF_KEYUP
;
if
(
HIBYTE
(
context
->
Ebx
)
&
0x01
)
dwFlags
|=
KEYEVENTF_EXTENDEDKEY
;
keybd_event
(
AL_reg
(
context
),
BL_reg
(
context
),
dwFlags
,
MAKELONG
(
SI_reg
(
context
),
DI_reg
(
context
))
);
keybd_event
(
LOBYTE
(
context
->
Eax
),
LOBYTE
(
context
->
Ebx
),
dwFlags
,
MAKELONG
(
LOWORD
(
context
->
Esi
),
LOWORD
(
context
->
Edi
))
);
}
...
...
@@ -401,8 +401,8 @@ void WINAPI mouse_event( DWORD dwFlags, DWORD dx, DWORD dy,
*/
void
WINAPI
mouse_event16
(
CONTEXT86
*
context
)
{
mouse_event
(
AX_reg
(
context
),
BX_reg
(
context
),
CX_reg
(
context
),
DX_reg
(
context
),
MAKELONG
(
SI_reg
(
context
),
DI_reg
(
context
)
)
);
mouse_event
(
LOWORD
(
context
->
Eax
),
LOWORD
(
context
->
Ebx
),
LOWORD
(
context
->
Ecx
),
LOWORD
(
context
->
Edx
),
MAKELONG
(
context
->
Esi
,
context
->
Edi
)
);
}
/***********************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment