2 * PROJECT: ReactOS Console Text-Mode Device Driver
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Loading specific fonts into VGA.
5 * COPYRIGHT: Copyright 2008-2019 Aleksey Bragin (aleksey@reactos.org)
6 * Copyright 2008-2019 Colin Finck (mail@colinfinck.de)
7 * Copyright 2008-2019 Christoph von Wittich (christoph_vw@reactos.org)
10 /* INCLUDES ***************************************************************/
15 // FIXME: For the moment we support only a fixed 256-char 8-bit font.
18 VOID
OpenBitPlane(VOID
);
19 VOID
CloseBitPlane(VOID
);
20 VOID
LoadFont(_In_ PUCHAR Bitplane
, _In_ PUCHAR FontBitfield
);
22 /* FUNCTIONS ****************************************************************/
26 _In_ PUCHAR FontBitfield
)
28 PHYSICAL_ADDRESS BaseAddress
;
31 /* open bit plane for font table access */
34 /* get pointer to video memory */
35 BaseAddress
.QuadPart
= BITPLANE_BASE
;
36 Bitplane
= (PUCHAR
)MmMapIoSpace(BaseAddress
, 0xFFFF, MmNonCached
);
38 LoadFont(Bitplane
, FontBitfield
);
40 MmUnmapIoSpace(Bitplane
, 0xFFFF);
46 /* PRIVATE FUNCTIONS *********************************************************/
48 /* Font-load specific funcs */
52 /* disable interrupts */
56 WRITE_PORT_UCHAR(SEQ_COMMAND
, SEQ_RESET
); WRITE_PORT_UCHAR(SEQ_DATA
, 0x01);
57 WRITE_PORT_UCHAR(SEQ_COMMAND
, SEQ_ENABLE_WRT_PLANE
); WRITE_PORT_UCHAR(SEQ_DATA
, 0x04);
58 WRITE_PORT_UCHAR(SEQ_COMMAND
, SEQ_MEM_MODE
); WRITE_PORT_UCHAR(SEQ_DATA
, 0x07);
59 WRITE_PORT_UCHAR(SEQ_COMMAND
, SEQ_RESET
); WRITE_PORT_UCHAR(SEQ_DATA
, 0x03);
62 WRITE_PORT_UCHAR(GCT_COMMAND
, GCT_READ_PLANE
); WRITE_PORT_UCHAR(GCT_DATA
, 0x02);
63 WRITE_PORT_UCHAR(GCT_COMMAND
, GCT_RW_MODES
); WRITE_PORT_UCHAR(GCT_DATA
, 0x00);
64 WRITE_PORT_UCHAR(GCT_COMMAND
, GCT_GRAPH_MODE
); WRITE_PORT_UCHAR(GCT_DATA
, 0x00);
66 /* enable interrupts */
73 /* disable interrupts */
77 WRITE_PORT_UCHAR(SEQ_COMMAND
, SEQ_RESET
); WRITE_PORT_UCHAR(SEQ_DATA
, 0x01);
78 WRITE_PORT_UCHAR(SEQ_COMMAND
, SEQ_ENABLE_WRT_PLANE
); WRITE_PORT_UCHAR(SEQ_DATA
, 0x03);
79 WRITE_PORT_UCHAR(SEQ_COMMAND
, SEQ_MEM_MODE
); WRITE_PORT_UCHAR(SEQ_DATA
, 0x03);
80 WRITE_PORT_UCHAR(SEQ_COMMAND
, SEQ_RESET
); WRITE_PORT_UCHAR(SEQ_DATA
, 0x03);
83 WRITE_PORT_UCHAR(GCT_COMMAND
, GCT_READ_PLANE
); WRITE_PORT_UCHAR(GCT_DATA
, 0x00);
84 WRITE_PORT_UCHAR(GCT_COMMAND
, GCT_RW_MODES
); WRITE_PORT_UCHAR(GCT_DATA
, 0x10);
85 WRITE_PORT_UCHAR(GCT_COMMAND
, GCT_GRAPH_MODE
); WRITE_PORT_UCHAR(GCT_DATA
, 0x0e);
87 /* enable interrupts */
94 _In_ PUCHAR FontBitfield
)
98 for (i
= 0; i
< 256; i
++)
100 for (j
= 0; j
< 8; j
++)
102 *Bitplane
= FontBitfield
[i
* 8 + j
];
107 for (j
= 8; j
< 32; j
++)