ReactOS 0.4.16-dev-2132-g3885311
bootvid.c File Reference
#include "precomp.h"
#include <drivers/pc98/video.h>
Include dependency graph for bootvid.c:

Go to the source code of this file.

Macros

#define BYTES_PER_SCANLINE   (SCREEN_WIDTH / 8)
 
#define PEGC_MAX_COLORS   256
 

Functions

static BOOLEAN GraphGetStatus (_In_ UCHAR Status)
 
static BOOLEAN TestMmio (VOID)
 
static BOOLEAN HasPegcController (VOID)
 
static VOID TextSync (VOID)
 
static VOID InitializeDisplay (VOID)
 
static VOID SetPaletteEntryRGB (_In_ ULONG Id, _In_ RGBQUAD Rgb)
 
VOID InitPaletteWithTable (_In_reads_(Count) const ULONG *Table, _In_ ULONG Count)
 
VOID DisplayCharacter (_In_ CHAR Character, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG TextColor, _In_ ULONG BackColor)
 
VOID PreserveRow (_In_ ULONG CurrentTop, _In_ ULONG TopDelta, _In_ BOOLEAN Restore)
 
VOID DoScroll (_In_ ULONG Scroll)
 
BOOLEAN NTAPI VidInitialize (_In_ BOOLEAN SetMode)
 
VOID NTAPI VidCleanUp (VOID)
 
VOID ResetDisplay (_In_ BOOLEAN SetMode)
 
VOID NTAPI VidScreenToBufferBlt (_Out_writes_bytes_all_(Delta *Height) PUCHAR Buffer, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
 
VOID NTAPI VidSolidColorFill (_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ UCHAR Color)
 

Variables

static ULONG_PTR PegcControl = 0
 
ULONG_PTR FrameBuffer = 0
 

Macro Definition Documentation

◆ BYTES_PER_SCANLINE

#define BYTES_PER_SCANLINE   (SCREEN_WIDTH / 8)

Definition at line 15 of file bootvid.c.

◆ PEGC_MAX_COLORS

#define PEGC_MAX_COLORS   256

Definition at line 17 of file bootvid.c.

Function Documentation

◆ DisplayCharacter()

VOID DisplayCharacter ( _In_ CHAR  Character,
_In_ ULONG  Left,
_In_ ULONG  Top,
_In_ ULONG  TextColor,
_In_ ULONG  BackColor 
)

Definition at line 272 of file bootvid.c.

278{
279 const UCHAR* FontChar = GetFontPtr(Character);
280 ULONG X, Y, PixelMask;
281
282 for (Y = Top;
284 ++Y, FontChar += FONT_PTR_DELTA)
285 {
286 for (X = Left, PixelMask = 1 << (BOOTCHAR_WIDTH - 1);
287 X < Left + BOOTCHAR_WIDTH;
288 ++X, PixelMask >>= 1)
289 {
290 if (*FontChar & PixelMask)
291 SetPixel(X, Y, (UCHAR)TextColor);
292 else if (BackColor < BV_COLOR_NONE)
293 SetPixel(X, Y, (UCHAR)BackColor);
294 }
295 }
296}
FORCEINLINE VOID SetPixel(_In_ ULONG Left, _In_ ULONG Top, _In_ UCHAR Color)
Definition: bootvid.c:52
static LPHIST_ENTRY Top
Definition: history.c:53
#define Y(I)
#define GetFontPtr(_Char)
Definition: precomp.h:90
#define FONT_PTR_DELTA
Definition: precomp.h:91
#define BOOTCHAR_HEIGHT
Definition: precomp.h:35
#define BOOTCHAR_WIDTH
Definition: precomp.h:36
#define X(b, s)
const UCHAR PixelMask[8]
Definition: vga.c:37
#define BV_COLOR_NONE
Definition: display.h:31
uint32_t ULONG
Definition: typedefs.h:59
unsigned char UCHAR
Definition: xmlstorage.h:181

◆ DoScroll()

VOID DoScroll ( _In_ ULONG  Scroll)

Definition at line 325 of file bootvid.c.

327{
328 USHORT i, Line;
329 PUCHAR Src, Dst;
330 PULONG SrcWide, DstWide;
334
336 {
337 SrcWide = (PULONG)SourceOffset;
338 DstWide = (PULONG)DestinationOffset;
339 for (i = 0; i < PixelCount / sizeof(ULONG); i++)
340 WRITE_REGISTER_ULONG(DstWide++, READ_REGISTER_ULONG(SrcWide++));
341
342 Src = (PUCHAR)SrcWide;
343 Dst = (PUCHAR)DstWide;
344 for (i = 0; i < PixelCount % sizeof(ULONG); i++)
346
349 }
350}
#define WRITE_REGISTER_ULONG(r, v)
Definition: arm.h:11
#define READ_REGISTER_ULONG(r)
Definition: arm.h:10
URECT VidpScrollRegion
Definition: console.c:17
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
ULONG_PTR FrameBuffer
Definition: bootvid.c:20
#define Dst
Definition: mesh.h:153
#define FB_OFFSET(x, y)
Definition: pc98.h:12
#define SCREEN_WIDTH
Definition: pc98video.c:24
unsigned short USHORT
Definition: pedump.c:61
Definition: ncftp.h:79
ULONG Right
Definition: precomp.h:64
ULONG Top
Definition: precomp.h:63
ULONG Bottom
Definition: precomp.h:65
ULONG Left
Definition: precomp.h:62
uint32_t * PULONG
Definition: typedefs.h:59
uint32_t ULONG_PTR
Definition: typedefs.h:65
unsigned char * PUCHAR
Definition: typedefs.h:53
_Must_inspect_result_ _In_ WDFMEMORY _In_ size_t SourceOffset
Definition: wdfmemory.h:320
_Must_inspect_result_ _In_ WDFMEMORY _In_ size_t DestinationOffset
Definition: wdfmemory.h:361
NTKERNELAPI VOID NTAPI WRITE_REGISTER_UCHAR(IN PUCHAR Register, IN UCHAR Value)
NTKERNELAPI UCHAR NTAPI READ_REGISTER_UCHAR(IN PUCHAR Register)

◆ GraphGetStatus()

static BOOLEAN GraphGetStatus ( _In_ UCHAR  Status)
static

Definition at line 25 of file bootvid.c.

27{
29
32
33 return (Result & GRAPH_STATUS_SET) && (Result != 0xFF);
34}
Status
Definition: gdiplustypes.h:25
#define READ_PORT_UCHAR(p)
Definition: pc98vid.h:22
#define WRITE_PORT_UCHAR(p, d)
Definition: pc98vid.h:21
#define GRAPH_IO_i_STATUS
Definition: video.h:346
#define GRAPH_IO_o_STATUS_SELECT
Definition: video.h:350
#define GRAPH_STATUS_SET
Definition: video.h:347
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409

Referenced by HasPegcController().

◆ HasPegcController()

static BOOLEAN HasPegcController ( VOID  )
static

Definition at line 53 of file bootvid.c.

54{
56
58 return TestMmio();
59
65
66 return Success;
67}
unsigned char BOOLEAN
#define FALSE
Definition: types.h:117
@ Success
Definition: eventcreate.c:712
static BOOLEAN TestMmio(VOID)
Definition: bootvid.c:37
static BOOLEAN GraphGetStatus(_In_ UCHAR Status)
Definition: bootvid.c:25
#define GDC2_IO_o_MODE_FLIPFLOP2
Definition: video.h:280
#define GDC2_EGC_FF_PROTECT
Definition: video.h:285
#define GRAPH_STATUS_PEGC
Definition: video.h:352
#define GDC2_EGC_FF_UNPROTECT
Definition: video.h:286
#define GDC2_MODE_PEGC_ENABLE
Definition: video.h:288
#define GDC2_MODE_PEGC_DISABLE
Definition: video.h:287

Referenced by Pc98VidFindAdapter(), and VidInitialize().

◆ InitializeDisplay()

static VOID InitializeDisplay ( VOID  )
static

Definition at line 80 of file bootvid.c.

81{
82 SYNCPARAM SyncParameters;
83 CSRFORMPARAM CursorParameters;
85 PITCHPARAM PitchParameters;
86 PRAMPARAM RamParameters;
87 ZOOMPARAM ZoomParameters;
88 UCHAR RelayState;
89
90 /* RESET, without FIFO check */
93
94 /* Configure chipset */
106
107 /* =========================== MASTER ============================ */
108
109 /* MASTER */
111
112 /* SYNC */
115 SyncParameters.ScreenWidthChars = 80;
116 SyncParameters.HorizontalSyncWidth = 12;
117 SyncParameters.VerticalSyncWidth = 2;
118 SyncParameters.HorizontalFrontPorchWidth = 4;
119 SyncParameters.HorizontalBackPorchWidth = 4;
120 SyncParameters.VerticalFrontPorchWidth = 6;
121 SyncParameters.ScreenWidthLines = 480;
122 SyncParameters.VerticalBackPorchWidth = 37;
124 WRITE_GDC_SYNC((PUCHAR)GDC1_IO_o_PARAM, &SyncParameters);
125
126 /* CSRFORM */
127 CursorParameters.Show = FALSE;
128 CursorParameters.Blink = FALSE;
129 CursorParameters.BlinkRate = 12;
130 CursorParameters.LinesPerRow = 16;
131 CursorParameters.StartScanLine = 0;
132 CursorParameters.EndScanLine = 15;
134 WRITE_GDC_CSRFORM((PUCHAR)GDC1_IO_o_PARAM, &CursorParameters);
135
136 /* PITCH */
137 PitchParameters.WordsPerScanline = BYTES_PER_SCANLINE;
139 WRITE_GDC_PITCH((PUCHAR)GDC1_IO_o_PARAM, &PitchParameters);
140
141 /* PRAM */
142 RamParameters.StartingAddress = 0;
143 RamParameters.Length = 1023;
144 RamParameters.ImageBit = FALSE;
145 RamParameters.WideDisplay = FALSE;
147 WRITE_GDC_PRAM((PUCHAR)GDC1_IO_o_PARAM, &RamParameters);
148
149 /* ZOOM */
150 ZoomParameters.DisplayZoomFactor = 0;
151 ZoomParameters.WritingZoomFactor = 0;
153 WRITE_GDC_ZOOM((PUCHAR)GDC1_IO_o_PARAM, &ZoomParameters);
154
155 /* CSRW */
156 CursorPosition.CursorAddress = 0;
157 CursorPosition.DotAddress = 0;
160
161 /* START */
163
164 /* ============================ SLAVE ============================ */
165
166 /* SLAVE */
168
169 /* SYNC */
173 SyncParameters.ScreenWidthChars = 80;
174 SyncParameters.HorizontalSyncWidth = 12;
175 SyncParameters.VerticalSyncWidth = 2;
176 SyncParameters.HorizontalFrontPorchWidth = 4;
177 SyncParameters.HorizontalBackPorchWidth = 132;
178 SyncParameters.VerticalFrontPorchWidth = 6;
179 SyncParameters.ScreenWidthLines = 480;
180 SyncParameters.VerticalBackPorchWidth = 37;
182 WRITE_GDC_SYNC((PUCHAR)GDC2_IO_o_PARAM, &SyncParameters);
183
184 /* CSRFORM */
185 CursorParameters.Show = FALSE;
186 CursorParameters.Blink = FALSE;
187 CursorParameters.BlinkRate = 0;
188 CursorParameters.LinesPerRow = 1;
189 CursorParameters.StartScanLine = 0;
190 CursorParameters.EndScanLine = 0;
192 WRITE_GDC_CSRFORM((PUCHAR)GDC2_IO_o_PARAM, &CursorParameters);
193
194 /* PITCH */
195 PitchParameters.WordsPerScanline = BYTES_PER_SCANLINE;
197 WRITE_GDC_PITCH((PUCHAR)GDC2_IO_o_PARAM, &PitchParameters);
198
199 /* PRAM */
200 RamParameters.StartingAddress = 0;
201 RamParameters.Length = 1023;
202 RamParameters.ImageBit = TRUE;
203 RamParameters.WideDisplay = FALSE;
205 WRITE_GDC_PRAM((PUCHAR)GDC2_IO_o_PARAM, &RamParameters);
206
207 /* ZOOM */
208 ZoomParameters.DisplayZoomFactor = 0;
209 ZoomParameters.WritingZoomFactor = 0;
211 WRITE_GDC_ZOOM((PUCHAR)GDC2_IO_o_PARAM, &ZoomParameters);
212
213 /* CSRW */
214 CursorPosition.CursorAddress = 0;
215 CursorPosition.DotAddress = 0;
218
219 /* Synchronize the master sync source */
220 TextSync();
221 TextSync();
222 TextSync();
223 TextSync();
224
225 /* Turn off the text layer */
227
228 /* START */
230
231 /* 256 colors */
238
239 /* Select the video source */
243}
#define WRITE_REGISTER_USHORT(r, v)
Definition: arm.h:14
#define TRUE
Definition: types.h:120
static ULONG_PTR PegcControl
Definition: bootvid.c:19
static VOID TextSync(VOID)
Definition: bootvid.c:70
#define BYTES_PER_SCANLINE
Definition: bootvid.c:15
static USHORT CursorPosition
Definition: pc98cons.c:20
#define GDC_COMMAND_PITCH
Definition: video.h:138
#define PEGC_MODE_PACKED
Definition: video.h:421
#define GDC1_IO_o_MODE_FLIPFLOP1
Definition: video.h:238
#define GDC_COMMAND_MASTER
Definition: video.h:200
#define GRAPH_HF_31KHZ
Definition: video.h:362
#define SYNC_VIDEO_FRAMING_NONINTERLACED
Definition: video.h:83
FORCEINLINE VOID WRITE_GDC_CSRFORM(PUCHAR Port, PCSRFORMPARAM CursorParameters)
Definition: video.h:186
#define GDC2_IO_o_COMMAND
Definition: video.h:272
#define SYNC_DISPLAY_MODE_GRAPHICS
Definition: video.h:80
#define GDC2_MODE_ODD_RLINE_SHOW
Definition: video.h:247
#define PEGC_MMIO_MODE
Definition: video.h:420
#define GDC2_MODE_LINES_400
Definition: video.h:301
#define GDC_COMMAND_BCTRL_START
Definition: video.h:73
#define GDC2_CLOCK2_5MHZ
Definition: video.h:308
#define GDC2_IO_o_VIDEO_PAGE_ACCESS
Definition: video.h:274
#define GDC2_MODE_LCD
Definition: video.h:298
#define GDC2_CLOCK1_5MHZ
Definition: video.h:306
#define GDC1_IO_o_COMMAND
Definition: video.h:235
#define PEGC_FB_MAP
Definition: video.h:426
#define PEGC_MMIO_FRAMEBUFFER
Definition: video.h:424
#define GRAPH_VID_SRC_INTERNAL
Definition: video.h:370
FORCEINLINE VOID WRITE_GDC_CSRW(PUCHAR Port, PCSRWPARAM CursorParameters)
Definition: video.h:160
#define GDC2_MODE_GRCG
Definition: video.h:283
#define GDC2_IO_o_VIDEO_PAGE
Definition: video.h:273
#define GRAPH_IO_i_RELAY
Definition: video.h:364
#define GRAPH_IO_o_RELAY
Definition: video.h:368
#define GDC_COMMAND_SLAVE
Definition: video.h:199
FORCEINLINE VOID WRITE_GDC_ZOOM(PUCHAR Port, PZOOMPARAM ZoomParameters)
Definition: video.h:133
#define GDC2_MODE_COLORS_16
Definition: video.h:282
#define GDC_COMMAND_PRAM
Definition: video.h:202
#define GRAPH_SRC_GDC
Definition: video.h:373
FORCEINLINE VOID WRITE_GDC2_COMMAND(UCHAR Command)
Definition: video.h:336
FORCEINLINE VOID WRITE_GDC_PITCH(PUCHAR Port, PPITCHPARAM PitchParameters)
Definition: video.h:146
FORCEINLINE VOID WRITE_GDC_PRAM(PUCHAR Port, PPRAMPARAM RamParameters)
Definition: video.h:213
#define GRAPH_MODE_COLORED
Definition: video.h:241
#define SYNC_DRAW_ONLY_DURING_RETRACE_BLANKING
Definition: video.h:88
#define GDC_COMMAND_ZOOM
Definition: video.h:124
#define SYNC_STATIC_RAM_NO_REFRESH
Definition: video.h:90
#define GRAPH_IO_o_HORIZONTAL_SCAN_RATE
Definition: video.h:360
#define GDC_COMMAND_RESET1
Definition: video.h:68
#define SYNC_DISPLAY_MODE_GRAPHICS_AND_CHARACTERS
Definition: video.h:79
#define GDC1_IO_o_PARAM
Definition: video.h:234
#define GDC2_MODE_LINES_800
Definition: video.h:302
#define GDC_COMMAND_CSRW
Definition: video.h:151
#define SYNC_DRAW_DURING_ACTIVE_DISPLAY_TIME_AND_RETRACE_BLANKING
Definition: video.h:87
FORCEINLINE VOID WRITE_GDC1_COMMAND(UCHAR Command)
Definition: video.h:326
#define GRAPH_RELAY_1
Definition: video.h:366
#define GDC2_IO_o_PARAM
Definition: video.h:271
#define GDC_COMMAND_STOP2
Definition: video.h:70
FORCEINLINE VOID WRITE_GDC_SYNC(PUCHAR Port, PSYNCPARAM SyncParameters)
Definition: video.h:105
#define GDC_COMMAND_SYNC_ON
Definition: video.h:75
#define GRAPH_RELAY_0
Definition: video.h:365
#define GDC_COMMAND_CSRFORM
Definition: video.h:173
UCHAR StartScanLine
Definition: video.h:180
UCHAR LinesPerRow
Definition: video.h:179
BOOLEAN Show
Definition: video.h:176
UCHAR EndScanLine
Definition: video.h:181
BOOLEAN Blink
Definition: video.h:177
UCHAR BlinkRate
Definition: video.h:178
ULONG WordsPerScanline
Definition: video.h:141
ULONG StartingAddress
Definition: video.h:205
USHORT Length
Definition: video.h:206
BOOLEAN ImageBit
Definition: video.h:207
BOOLEAN WideDisplay
Definition: video.h:208
UCHAR HorizontalBackPorchWidth
Definition: video.h:97
UCHAR VerticalBackPorchWidth
Definition: video.h:100
USHORT ScreenWidthLines
Definition: video.h:99
UCHAR ScreenWidthChars
Definition: video.h:93
UCHAR VerticalSyncWidth
Definition: video.h:95
UCHAR HorizontalSyncWidth
Definition: video.h:94
UCHAR VerticalFrontPorchWidth
Definition: video.h:98
UCHAR Flags
Definition: video.h:78
UCHAR HorizontalFrontPorchWidth
Definition: video.h:96
UCHAR WritingZoomFactor
Definition: video.h:128
UCHAR DisplayZoomFactor
Definition: video.h:127
uint16_t * PUSHORT
Definition: typedefs.h:56

Referenced by ResetDisplay().

◆ InitPaletteWithTable()

VOID InitPaletteWithTable ( _In_reads_(Count) const ULONG Table,
_In_ ULONG  Count 
)

Definition at line 257 of file bootvid.c.

260{
261 const ULONG* Entry = Table;
262 ULONG i;
263
264 for (i = 0; i < Count; i++)
266
267 for (i = Count; i < PEGC_MAX_COLORS; i++)
269}
const RGBQUAD VidpDefaultPalette[BV_MAX_COLORS]
Definition: common.c:19
ASMGENDATA Table[]
Definition: genincdata.c:61
#define PEGC_MAX_COLORS
Definition: bootvid.c:17
static VOID SetPaletteEntryRGB(_In_ ULONG Id, _In_ RGBQUAD Rgb)
Definition: bootvid.c:246
int Count
Definition: noreturn.cpp:7
#define BV_COLOR_BLACK
Definition: display.h:15
base of all file and directory entries
Definition: entries.h:83

◆ PreserveRow()

VOID PreserveRow ( _In_ ULONG  CurrentTop,
_In_ ULONG  TopDelta,
_In_ BOOLEAN  Restore 
)

Definition at line 299 of file bootvid.c.

303{
304 PULONG OldPosition, NewPosition;
305 ULONG PixelCount = TopDelta * (SCREEN_WIDTH / sizeof(ULONG));
306
307 if (Restore)
308 {
309 /* Restore the row by copying back the contents saved off-screen */
310 OldPosition = (PULONG)(FrameBuffer + FB_OFFSET(0, SCREEN_HEIGHT));
311 NewPosition = (PULONG)(FrameBuffer + FB_OFFSET(0, CurrentTop));
312 }
313 else
314 {
315 /* Preserve the row by saving its contents off-screen */
316 OldPosition = (PULONG)(FrameBuffer + FB_OFFSET(0, CurrentTop));
317 NewPosition = (PULONG)(FrameBuffer + FB_OFFSET(0, SCREEN_HEIGHT));
318 }
319
320 while (PixelCount--)
321 WRITE_REGISTER_ULONG(NewPosition++, READ_REGISTER_ULONG(OldPosition++));
322}
#define SCREEN_HEIGHT
Definition: pc98video.c:25

◆ ResetDisplay()

VOID ResetDisplay ( _In_ BOOLEAN  SetMode)

Definition at line 394 of file bootvid.c.

396{
397 PULONG PixelsPosition = (PULONG)(FrameBuffer + FB_OFFSET(0, 0));
398 ULONG PixelCount = ((SCREEN_WIDTH * SCREEN_HEIGHT) / sizeof(ULONG)) + 1;
399
400 /* Reset the video mode with HAL if requested */
401 if (SetMode)
403
405
406 /* 640x480 256-color 31 kHz mode */
408
409 /* Re-initialize the palette and fill the screen black */
411 while (PixelCount--)
412 WRITE_REGISTER_ULONG(PixelsPosition++, 0);
413
415}
#define InitializePalette()
Definition: precomp.h:84
static VOID InitializeDisplay(VOID)
Definition: bootvid.c:80
#define HalResetDisplay
Definition: halfuncs.h:45
#define GRAPH_MODE_DISPLAY_ENABLE
Definition: video.h:254
#define GRAPH_MODE_DISPLAY_DISABLE
Definition: video.h:253

◆ SetPaletteEntryRGB()

static VOID SetPaletteEntryRGB ( _In_ ULONG  Id,
_In_ RGBQUAD  Rgb 
)
static

Definition at line 246 of file bootvid.c.

249{
254}
DWORD Id
#define GetBValue(quad)
Definition: precomp.h:82
#define GetGValue(quad)
Definition: precomp.h:81
#define GetRValue(quad)
Definition: precomp.h:80
#define GDC2_IO_o_RED
Definition: video.h:277
#define GDC2_IO_o_GREEN
Definition: video.h:276
#define GDC2_IO_o_PALETTE_INDEX
Definition: video.h:275
#define GDC2_IO_o_BLUE
Definition: video.h:278

Referenced by InitPaletteWithTable().

◆ TestMmio()

static BOOLEAN TestMmio ( VOID  )
static

Definition at line 37 of file bootvid.c.

38{
39 USHORT OldValue, NewValue;
40
42
43 /* Bits [15:1] are not writable */
46
48
49 return !(NewValue & 0x80);
50}
#define READ_REGISTER_USHORT(r)
Definition: arm.h:13

Referenced by HasPegcController().

◆ TextSync()

static VOID TextSync ( VOID  )
static

Definition at line 70 of file bootvid.c.

71{
73 NOTHING;
74
76 NOTHING;
77}
#define NOTHING
Definition: input_list.c:10
#define GDC1_IO_i_STATUS
Definition: video.h:230
#define GDC_STATUS_VSYNC
Definition: video.h:41

Referenced by InitializeDisplay().

◆ VidCleanUp()

VOID NTAPI VidCleanUp ( VOID  )

◆ VidInitialize()

BOOLEAN NTAPI VidInitialize ( _In_ BOOLEAN  SetMode)

Definition at line 356 of file bootvid.c.

358{
360
363 if (!PegcControl)
364 goto Failure;
365
366 if (!HasPegcController())
367 goto Failure;
368
371 if (!FrameBuffer)
372 goto Failure;
373
374 if (SetMode)
376
377 return TRUE;
378
379Failure:
380 if (PegcControl)
382
383 return FALSE;
384}
VOID NTAPI VidResetDisplay(_In_ BOOLEAN SetMode)
Definition: console.c:25
#define ULONG_PTR
Definition: config.h:101
static BOOLEAN HasPegcController(VOID)
Definition: bootvid.c:53
VOID NTAPI MmUnmapIoSpace(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes)
Definition: iosup.c:193
PVOID NTAPI MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
Definition: iosup.c:47
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
Definition: mmfuncs.h:404
#define PEGC_FRAMEBUFFER_SIZE
Definition: video.h:23
#define VRAM_NORMAL_PLANE_I
Definition: video.h:15
#define PEGC_CONTROL_SIZE
Definition: video.h:25
#define PEGC_FRAMEBUFFER_PACKED
Definition: video.h:22
@ MmNonCached
Definition: mmtypes.h:129

◆ VidScreenToBufferBlt()

VOID NTAPI VidScreenToBufferBlt ( _Out_writes_bytes_all_(Delta *Height) PUCHAR  Buffer,
_In_ ULONG  Left,
_In_ ULONG  Top,
_In_ ULONG  Width,
_In_ ULONG  Height,
_In_ ULONG  Delta 
)

Definition at line 419 of file bootvid.c.

426{
427 ULONG X, Y;
429 USHORT Px;
430 PUSHORT PixelsPosition;
431
432 /* Clear the destination buffer */
433 RtlZeroMemory(Buffer, Delta * Height);
434
435 for (Y = 0; Y < Height; Y++)
436 {
437 OutputBuffer = Buffer + Y * Delta;
438 PixelsPosition = (PUSHORT)(FrameBuffer + FB_OFFSET(Left, Top + Y));
439
440 for (X = 0; X < Width; X += sizeof(USHORT))
441 {
442 Px = READ_REGISTER_USHORT(PixelsPosition++);
443 *OutputBuffer++ = (FIRSTBYTE(Px) << 4) | (SECONDBYTE(Px) & 0x0F);
444 }
445 }
446}
Definition: bufpool.h:45
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
Definition: wdfiotarget.h:863
#define SECONDBYTE(VALUE)
Definition: rtlfuncs.h:807
#define FIRSTBYTE(VALUE)
Definition: rtlfuncs.h:806

◆ VidSolidColorFill()

VOID NTAPI VidSolidColorFill ( _In_ ULONG  Left,
_In_ ULONG  Top,
_In_ ULONG  Right,
_In_ ULONG  Bottom,
_In_ UCHAR  Color 
)

Definition at line 450 of file bootvid.c.

456{
457 USHORT i, Line;
458 PUCHAR PixelPtr;
459 PULONG PixelsPtr;
460 ULONG WideColor = (Color << 24) | (Color << 16) | (Color << 8) | Color;
461 USHORT PixelCount = (Right - Left) + 1;
462 ULONG_PTR StartOffset = FrameBuffer + FB_OFFSET(Left, Top);
463
464 for (Line = Top; Line <= Bottom; Line++)
465 {
466 PixelsPtr = (PULONG)StartOffset;
467 for (i = 0; i < PixelCount / sizeof(ULONG); i++)
468 WRITE_REGISTER_ULONG(PixelsPtr++, WideColor);
469
470 PixelPtr = (PUCHAR)PixelsPtr;
471 for (i = 0; i < PixelCount % sizeof(ULONG); i++)
472 WRITE_REGISTER_UCHAR(PixelPtr++, Color);
473
474 StartOffset += SCREEN_WIDTH;
475 }
476}
static LPHIST_ENTRY Bottom
Definition: history.c:54

Variable Documentation

◆ FrameBuffer

◆ PegcControl

ULONG_PTR PegcControl = 0
static

Definition at line 19 of file bootvid.c.

Referenced by InitializeDisplay(), TestMmio(), and VidInitialize().