Release 941227
[wine/multimedia.git] / miscemu / int25.c
blob54cdbc65ceba99430d0dc0b5ec14cd9f1c213ae0
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "registers.h"
5 #include "msdos.h"
6 #include "segmem.h"
7 #include "wine.h"
8 #include "miscemu.h"
9 #include "stddebug.h"
10 /* #define DEBUG_INT */
11 #include "debug.h"
13 int do_int25(struct sigcontext_struct *context)
15 BYTE *dataptr = SAFEMAKEPTR(DS, BX);
16 DWORD begin, length;
18 if (CX == 0xffff) {
19 begin = getdword(dataptr);
20 length = getword(&dataptr[4]);
21 dataptr = (BYTE *) getdword(&dataptr[6]);
23 } else {
24 begin = DX;
25 length = CX;
27 dprintf_int(stdnimp, "int25: abs diskread, drive %d, sector %ld, "
28 "count %ld, buffer %d\n", EAX & 0xff, begin, length, (int) dataptr);
30 memset(dataptr, 0, length * 512);
32 if (begin == 0 && length > 1)
33 *(dataptr + 512) = 0xf8;
35 if (begin == 1)
36 *dataptr = 0xf8;
38 ResetCflag;
40 /* push flags on stack */
41 SP -= sizeof(WORD);
42 setword(SAFEMAKEPTR(SS,SP), (WORD) EFL);
44 return 1;