blob: 9e7468c4ff01029d394ff560537f043b03d83673 [file] [log] [blame]
Alexandre Julliard17216f51997-10-12 16:30:17 +00001/*
2 * BIOS interrupt 15h handler
3 */
4
Alexandre Julliard17216f51997-10-12 16:30:17 +00005#include <stdlib.h>
6#include "miscemu.h"
Alexandre Julliard61fece01999-06-26 19:09:08 +00007#include "debugtools.h"
Alexandre Julliard17216f51997-10-12 16:30:17 +00008
Dimitrie O. Paun529da542000-11-27 23:54:25 +00009DEFAULT_DEBUG_CHANNEL(int);
Patrik Stridvallb4b9fae1999-04-19 14:56:29 +000010
Alexandre Julliard17216f51997-10-12 16:30:17 +000011
12/**********************************************************************
Patrik Stridvall3ca98232001-06-20 23:03:14 +000013 * INT_Int15Handler (WPROCS.121)
Alexandre Julliard17216f51997-10-12 16:30:17 +000014 *
Chris Morganc0b2b9e2000-08-20 18:47:48 +000015 * Handler for int 15h
Alexandre Julliard17216f51997-10-12 16:30:17 +000016 */
Alexandre Julliard617955d1999-06-26 18:40:24 +000017void WINAPI INT_Int15Handler( CONTEXT86 *context )
Alexandre Julliard17216f51997-10-12 16:30:17 +000018{
19 switch(AH_reg(context))
20 {
Chris Morganc0b2b9e2000-08-20 18:47:48 +000021 case 0x84: /* read joystick information */
22 FIXME("Read joystick information not implemented\n");
23
24 /* FIXME: report status as if no game port exists */
25 switch(DX_reg(context))
26 {
27 case 0x0: /* read joystick switches */
28 AL_reg(context) = 0x0; /* all switches open */
29 break;
30 case 0x1: /* read joystick position */
31 AX_reg(context) = 0x0;
32 BX_reg(context) = 0x0;
33 CX_reg(context) = 0x0;
34 DX_reg(context) = 0x0;
35 break;
36 default:
37 INT_BARF( context, 0x15 );
38 break;
39 }
40
41 RESET_CFLAG(context);
42
43 break;
44
Alexandre Julliard17216f51997-10-12 16:30:17 +000045 case 0x88: /* get size of memory above 1 M */
46 AX_reg(context) = 64; /* FIXME: are 64K ok? */
47 RESET_CFLAG(context);
48 break;
49
Andreas Mohra7894d91999-01-24 09:32:10 +000050 case 0xc0: /* GET CONFIGURATION */
51 if (ISV86(context)) /* real */
Alexandre Julliardd8fab2e2000-09-25 23:53:07 +000052 context->SegEs = 0xf000;
Andreas Mohra7894d91999-01-24 09:32:10 +000053 else
Alexandre Julliardd8fab2e2000-09-25 23:53:07 +000054 context->SegEs = DOSMEM_BiosSysSeg;
Andreas Mohra7894d91999-01-24 09:32:10 +000055 BX_reg(context) = 0xe6f5;
56 AH_reg(context) = 0x0;
57 RESET_CFLAG(context);
58 break;
Jess Haasd11443e1999-03-17 15:15:14 +000059 case 0xc2:
60 switch(AL_reg(context))
61 {
62 case 0x00: /* Enable-Disable Pointing Device (mouse) */
63 /* BH = newstate, 00h = disabled 01h = enabled */
64 switch(BH_reg(context))
65 {
66 case 0x00:
Alexandre Julliard61fece01999-06-26 19:09:08 +000067 FIXME("Disable Pointing Device - not implemented\n");
Jess Haasd11443e1999-03-17 15:15:14 +000068 break;
69 case 0x01:
Alexandre Julliard61fece01999-06-26 19:09:08 +000070 FIXME("Enable Pointing Device - not implemented\n");
Jess Haasd11443e1999-03-17 15:15:14 +000071 break;
72 default:
73 INT_BARF( context, 0x15 );
74 break;
75 }
76 AH_reg(context) = 0x00; /* successful */
77 break;
78 case 0x02: /* Set Sampling Rate */
79 /* BH = sampling rate */
Alexandre Julliard61fece01999-06-26 19:09:08 +000080 FIXME("Set Sampling Rate - not implemented\n");
Jess Haasd11443e1999-03-17 15:15:14 +000081 AH_reg(context) = 0x00; /* successful */
82 break;
83 case 0x04: /* Get Pointing Device Type */
Alexandre Julliard61fece01999-06-26 19:09:08 +000084 FIXME("Get Pointing Device Type - not implemented\n");
Francois Gouget519346a2000-12-02 20:18:08 +000085 BH_reg(context) = 0x01;/*Device id FIXME what is it supposed to be?*/
Jess Haasd11443e1999-03-17 15:15:14 +000086 break;
87 default:
88 INT_BARF( context, 0x15 );
89 }
90 break;
Andreas Mohra7894d91999-01-24 09:32:10 +000091
Alexandre Julliard17216f51997-10-12 16:30:17 +000092 default:
93 INT_BARF( context, 0x15 );
94 }
95}