3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/kd/mda.c
6 * PURPOSE: Support for debugging using an MDA card.
8 * PROGRAMMERS: David Welch <welch@cwcom.net>
11 /* INCLUDES ******************************************************************/
14 #include "../dbg/kdb.h"
16 /* VARIABLES ***************************************************************/
18 STATIC ULONG MdaIndexPort
;
19 STATIC ULONG MdaValuePort
;
20 STATIC ULONG MdaStatusPort
;
21 STATIC ULONG MdaGfxPort
;
22 STATIC ULONG MdaModePort
;
23 STATIC PUSHORT VideoBuffer
;
25 #define MDA_COLUMNS (80)
26 #define MDA_LINES (25)
28 STATIC ULONG MdaCursorX
, MdaCursorY
;
30 /* PRIVATE FUNCTIONS ********************************************************/
34 KdWriteByteMDA(ULONG Reg
, ULONG Value
)
36 WRITE_PORT_UCHAR((PUCHAR
)MdaIndexPort
, (CHAR
)Reg
);
37 WRITE_PORT_UCHAR((PUCHAR
)MdaValuePort
, (CHAR
)Value
);
41 KdWriteWordMDA(ULONG Reg
, ULONG Value
)
43 WRITE_PORT_UCHAR((PUCHAR
)MdaIndexPort
, (CHAR
)Reg
);
44 WRITE_PORT_UCHAR((PUCHAR
)MdaValuePort
, (CHAR
)(Value
>> 8));
45 WRITE_PORT_UCHAR((PUCHAR
)MdaIndexPort
, (CHAR
)(Reg
+ 1));
46 WRITE_PORT_UCHAR((PUCHAR
)MdaValuePort
, (CHAR
)(Value
& 0xFF));
53 /* Setup the variables for the various port addresses. */
57 MdaStatusPort
= 0x3ba;
60 VideoBuffer
= (PUSHORT
)(0xff3b0000);
62 MdaCursorX
= MdaCursorY
= 0;
68 memmove(&VideoBuffer
[(MDA_COLUMNS
* 0) + 0],
69 &VideoBuffer
[(MDA_COLUMNS
* 1) + 0],
70 MDA_COLUMNS
* (MDA_LINES
- 1) * 2);
71 memset(&VideoBuffer
[(MDA_COLUMNS
* (MDA_LINES
- 1)) + 0], 0,
80 if (MdaCursorY
== (MDA_LINES
- 1))
91 VideoBuffer
[(MdaCursorY
* MDA_COLUMNS
) + MdaCursorX
] = (Ch
& 0xFF) | 0x0700;
93 if (MdaCursorX
== (MDA_COLUMNS
- 1))
95 if (MdaCursorY
== (MDA_LINES
- 1))