#include #include #include "registers.h" #include "wine.h" #include "miscemu.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((context->sc_eax >> 8) & 0xff) { case 0x10: /* share is installed */ EAX = (EAX & 0xffffff00) | 0xff; 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(context->sc_eax & 0xff) { case 0x00: /* return 'major/minor' for MSWin 3.1 */ dprintf_int(stddeb,"do_int2f_16 // return 'major/minor' for MSWin 3.1 !\n"); context->sc_eax = 0x0310; return 1; case 0x86: /* operating in protected mode under DPMI */ dprintf_int(stddeb,"do_int2f_16 // operating in protected mode under DPMI !\n"); context->sc_eax = 0x0000; return 1; case 0x87: dprintf_int(stddeb,"do_int2f_16 // return DPMI flags !\n"); context->sc_eax = 0x0000; /* DPMI Installed */ context->sc_ebx = 0x0001; /* 32bits available */ context->sc_ecx = 0x04; /* processor 486 */ context->sc_edx = 0x0100; /* DPMI major/minor */ context->sc_esi = 0; /* # of para. of DOS */ /* extended private data */ return 1; default: IntBarf(0x2f, context); } return 1; }