#include #include #include "registers.h" #include "wine.h" #include "msdos.h" #include "miscemu.h" #include "options.h" #include "stddebug.h" /* #define DEBUG_INT */ #include "debug.h" int do_int2f_16(struct sigcontext_struct *context); int do_int2f(struct sigcontext_struct *context) { dprintf_int(stddeb,"int2f: AX %04x, BX %04x, CX %04x, DX %04x, " "SI %04x, DI %04x, DS %04x, ES %04x\n", AX, BX, CX, DX, SI, DI, DS, ES); switch(AH) { case 0x10: AL = 0xff; /* share is installed */ break; case 0x15: /* mscdex */ /* ignore requests */ return 1; case 0x16: return do_int2f_16(context); default: IntBarf(0x2f, context); }; return 1; } int do_int2f_16(struct sigcontext_struct *context) { switch(AL) { case 0x00: /* Windows enhanced mode installation check */ AX = Options.enhanced ? WINVERSION : 0; break; case 0x0a: /* Get Windows version and type */ AX = 0; BX = (WINVERSION >> 8) | ((WINVERSION << 8) & 0xff00); CX = Options.enhanced ? 3 : 2; break; case 0x86: /* DPMI detect mode */ AX = 0; /* Running under DPMI */ break; case 0x87: /* DPMI installation check */ AX = 0x0000; /* DPMI Installed */ BX = 0x0001; /* 32bits available */ CX = 0x04; /* processor 486 */ DX = 0x0009; /* DPMI major/minor 0.9 */ SI = 0; /* # of para. of DOS extended private data */ ES = 0; /* ES:DI is DPMI switch entry point */ DI = 0; break; default: IntBarf(0x2f, context); } return 1; }