#include #include #include "registers.h" #include "msdos.h" #include "ldt.h" #include "wine.h" #include "miscemu.h" #include "dos_fs.h" #include "stddebug.h" /* #define DEBUG_INT */ #include "debug.h" /********************************************************************** * INT_Int26Handler * * Handler for int 26h (absolute disk read). */ void INT_Int26Handler( struct sigcontext_struct context ) { BYTE *dataptr = PTR_SEG_OFF_TO_LIN( DS_reg(&context), BX_reg(&context) ); DWORD begin, length; if (!DOS_ValidDrive(AL_reg(&context))) { SET_CFLAG(&context); AX_reg(&context) = 0x0101; /* unknown unit */ return; } if (CX_reg(&context) == 0xffff) { begin = getdword(dataptr); length = getword(&dataptr[4]); dataptr = (BYTE *) PTR_SEG_TO_LIN(getdword(&dataptr[6])); } else { begin = DX_reg(&context); length = CX_reg(&context); } dprintf_int( stdnimp,"int26: abs diskwrite, drive %d, sector %ld, " "count %ld, buffer %d\n", AL_reg(&context), begin, length, (int) dataptr ); RESET_CFLAG(&context); }