Release 950727
[wine] / miscemu / int13.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "registers.h"
4 #include "wine.h"
5 #include "miscemu.h"
6 #include "stddebug.h"
7 /* #define DEBUG_INT */
8 #include "debug.h"
9
10
11 /**********************************************************************
12  *          INT_Int13Handler
13  *
14  * Handler for int 13h (disk I/O).
15  */
16 void INT_Int13Handler( struct sigcontext_struct sigcontext )
17 {
18 #define context (&sigcontext)
19     switch(AH)
20     {
21         case 0x00:                            /* RESET DISK SYSTEM     */
22         case 0x04:                            /* VERIFY DISK SECTOR(S) */
23                 AH = 0;
24                 break;
25                
26         case 0x05:                                     /* FORMAT TRACK */
27                 AH = 0x0c;
28                 SetCflag;
29                 break;
30
31         case 0x06:             /* FORMAT TRACK AND SET BAD SECTOR FLAGS */
32         case 0x07:             /* FORMAT DRIVE STARTING AT GIVEN TRACK  */ 
33                 AH = 0x0c;
34                 break;
35
36         case 0x08:                              /* GET DRIVE PARAMETERS  */
37                 AH = (DL & 0x80) ? 0x07 : 0x01;
38                 SetCflag;
39                 break;
40
41         case 0x09:         /* INITIALIZE CONTROLLER WITH DRIVE PARAMETERS */
42         case 0x0c:         /* SEEK TO CYLINDER                            */
43         case 0x0d:         /* RESET HARD DISKS                            */
44         case 0x10:         /* CHECK IF DRIVE READY                        */
45         case 0x11:         /* RECALIBRATE DRIVE                           */
46         case 0x14:         /* CONTROLLER INTERNAL DIAGNOSTIC              */
47                 AH = 0;
48                 break;
49
50         case 0x0e:                    /* READ SECTOR BUFFER (XT only)      */
51         case 0x0f:                    /* WRITE SECTOR BUFFER (XT only)     */
52         case 0x12:                    /* CONTROLLER RAM DIAGNOSTIC (XT,PS) */
53         case 0x13:                    /* DRIVE DIAGNOSTIC (XT,PS)          */
54                 AH = 0x01;
55                 SetCflag;
56                 break;
57
58         default:
59                 INT_BARF( 0x13 );
60     }
61 #undef context
62 }