1 2 #pragma once 3 4 extern PUSHORT VgaArmBase; 5 6 #define LCDTIMING0_PPL(x) ((((x) / 16 - 1) & 0x3f) << 2) 7 #define LCDTIMING1_LPP(x) (((x) & 0x3ff) - 1) 8 #define LCDCONTROL_LCDPWR (1 << 11) 9 #define LCDCONTROL_LCDEN (1) 10 #define LCDCONTROL_LCDBPP(x) (((x) & 7) << 1) 11 #define LCDCONTROL_LCDTFT (1 << 5) 12 13 #define PL110_LCDTIMING0 (PVOID)0xE0020000 14 #define PL110_LCDTIMING1 (PVOID)0xE0020004 15 #define PL110_LCDTIMING2 (PVOID)0xE0020008 16 #define PL110_LCDUPBASE (PVOID)0xE0020010 17 #define PL110_LCDLPBASE (PVOID)0xE0020014 18 #define PL110_LCDCONTROL (PVOID)0xE0020018 19 20 #define READ_REGISTER_ULONG(r) (*(volatile ULONG * const)(r)) 21 #define WRITE_REGISTER_ULONG(r, v) (*(volatile ULONG *)(r) = (v)) 22 23 #define READ_REGISTER_USHORT(r) (*(volatile USHORT * const)(r)) 24 #define WRITE_REGISTER_USHORT(r, v) (*(volatile USHORT *)(r) = (v)) 25 26 FORCEINLINE 27 USHORT 28 VidpBuildColor( 29 _In_ UCHAR Color) 30 { 31 UCHAR Red, Green, Blue; 32 33 /* Extract color components */ 34 Red = GetRValue(DefaultPalette[Color]) >> 3; 35 Green = GetGValue(DefaultPalette[Color]) >> 3; 36 Blue = GetBValue(DefaultPalette[Color]) >> 3; 37 38 /* Build the 16-bit color mask */ 39 return ((Red & 0x1F) << 11) | ((Green & 0x1F) << 6) | ((Blue & 0x1F)); 40 } 41 42 VOID 43 NTAPI 44 InitPaletteWithTable( 45 _In_ PULONG Table, 46 _In_ ULONG Count); 47 48 FORCEINLINE 49 VOID 50 SetPixel( 51 _In_ ULONG Left, 52 _In_ ULONG Top, 53 _In_ UCHAR Color) 54 { 55 PUSHORT PixelPosition; 56 57 /* Calculate the pixel position */ 58 PixelPosition = &VgaArmBase[Left + (Top * SCREEN_WIDTH)]; 59 60 /* Set our color */ 61 WRITE_REGISTER_USHORT(PixelPosition, VidpBuildColor(Color)); 62 } 63 64 VOID 65 NTAPI 66 PreserveRow( 67 _In_ ULONG CurrentTop, 68 _In_ ULONG TopDelta, 69 _In_ BOOLEAN Restore); 70 71 VOID 72 NTAPI 73 DoScroll( 74 _In_ ULONG Scroll); 75 76 VOID 77 NTAPI 78 DisplayCharacter( 79 _In_ CHAR Character, 80 _In_ ULONG Left, 81 _In_ ULONG Top, 82 _In_ ULONG TextColor, 83 _In_ ULONG BackColor); 84