+/*
+ * PROJECT: ReactOS Boot Loader
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: boot/armllb/hw/video.c
+ * PURPOSE: LLB Video Output Routines
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+
+#include "precomp.h"
+
+CHAR LlbHwBootFont[] =
+{
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x7e,0x81,0xa5,0x81,0xbd,0x99,0x81,0x7e,
+ 0x7e,0xff,0xdb,0xff,0xc3,0xe7,0xff,0x7e,
+ 0x6c,0xfe,0xfe,0xfe,0x7c,0x38,0x10,0x00,
+ 0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,0x00,
+ 0x38,0x7c,0x38,0xfe,0xfe,0x7c,0x38,0x7c,
+ 0x10,0x10,0x38,0x7c,0xfe,0x7c,0x38,0x7c,
+ 0x00,0x00,0x18,0x3c,0x3c,0x18,0x00,0x00,
+ 0xff,0xff,0xe7,0xc3,0xc3,0xe7,0xff,0xff,
+ 0x00,0x3c,0x66,0x42,0x42,0x66,0x3c,0x00,
+ 0xff,0xc3,0x99,0xbd,0xbd,0x99,0xc3,0xff,
+ 0x0f,0x07,0x0f,0x7d,0xcc,0xcc,0xcc,0x78,
+ 0x3c,0x66,0x66,0x66,0x3c,0x18,0x7e,0x18,
+ 0x3f,0x33,0x3f,0x30,0x30,0x70,0xf0,0xe0,
+ 0x7f,0x63,0x7f,0x63,0x63,0x67,0xe6,0xc0,
+ 0x99,0x5a,0x3c,0xe7,0xe7,0x3c,0x5a,0x99,
+ 0x80,0xe0,0xf8,0xfe,0xf8,0xe0,0x80,0x00,
+ 0x02,0x0e,0x3e,0xfe,0x3e,0x0e,0x02,0x00,
+ 0x18,0x3c,0x7e,0x18,0x18,0x7e,0x3c,0x18,
+ 0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x00,
+ 0x7f,0xdb,0xdb,0x7b,0x1b,0x1b,0x1b,0x00,
+ 0x3e,0x63,0x38,0x6c,0x6c,0x38,0xcc,0x78,
+ 0x00,0x00,0x00,0x00,0x7e,0x7e,0x7e,0x00,
+ 0x18,0x3c,0x7e,0x18,0x7e,0x3c,0x18,0xff,
+ 0x18,0x3c,0x7e,0x18,0x18,0x18,0x18,0x00,
+ 0x18,0x18,0x18,0x18,0x7e,0x3c,0x18,0x00,
+ 0x00,0x18,0x0c,0xfe,0x0c,0x18,0x00,0x00,
+ 0x00,0x30,0x60,0xfe,0x60,0x30,0x00,0x00,
+ 0x00,0x00,0xc0,0xc0,0xc0,0xfe,0x00,0x00,
+ 0x00,0x24,0x66,0xff,0x66,0x24,0x00,0x00,
+ 0x00,0x18,0x3c,0x7e,0xff,0xff,0x00,0x00,
+ 0x00,0xff,0xff,0x7e,0x3c,0x18,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00,
+ 0x6c,0x6c,0x6c,0x00,0x00,0x00,0x00,0x00,
+ 0x6c,0x6c,0xfe,0x6c,0xfe,0x6c,0x6c,0x00,
+ 0x30,0x7c,0xc0,0x78,0x0c,0xf8,0x30,0x00,
+ 0x00,0xc6,0xcc,0x18,0x30,0x66,0xc6,0x00,
+ 0x38,0x6c,0x38,0x76,0xdc,0xcc,0x76,0x00,
+ 0x60,0x60,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00,
+ 0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00,
+ 0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,
+ 0x00,0x30,0x30,0xfc,0x30,0x30,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,
+ 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,
+ 0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00,
+ 0x7c,0xc6,0xce,0xde,0xf6,0xe6,0x7c,0x00,
+ 0x30,0x70,0x30,0x30,0x30,0x30,0xfc,0x00,
+ 0x78,0xcc,0x0c,0x38,0x60,0xcc,0xfc,0x00,
+ 0x78,0xcc,0x0c,0x38,0x0c,0xcc,0x78,0x00,
+ 0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x1e,0x00,
+ 0xfc,0xc0,0xf8,0x0c,0x0c,0xcc,0x78,0x00,
+ 0x38,0x60,0xc0,0xf8,0xcc,0xcc,0x78,0x00,
+ 0xfc,0xcc,0x0c,0x18,0x30,0x30,0x30,0x00,
+ 0x78,0xcc,0xcc,0x78,0xcc,0xcc,0x78,0x00,
+ 0x78,0xcc,0xcc,0x7c,0x0c,0x18,0x70,0x00,
+ 0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,
+ 0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x60,
+ 0x18,0x30,0x60,0xc0,0x60,0x30,0x18,0x00,
+ 0x00,0x00,0xfc,0x00,0x00,0xfc,0x00,0x00,
+ 0x60,0x30,0x18,0x0c,0x18,0x30,0x60,0x00,
+ 0x78,0xcc,0x0c,0x18,0x30,0x00,0x30,0x00,
+ 0x7c,0xc6,0xde,0xde,0xde,0xc0,0x78,0x00,
+ 0x30,0x78,0xcc,0xcc,0xfc,0xcc,0xcc,0x00,
+ 0xfc,0x66,0x66,0x7c,0x66,0x66,0xfc,0x00,
+ 0x3c,0x66,0xc0,0xc0,0xc0,0x66,0x3c,0x00,
+ 0xf8,0x6c,0x66,0x66,0x66,0x6c,0xf8,0x00,
+ 0xfe,0x62,0x68,0x78,0x68,0x62,0xfe,0x00,
+ 0xfe,0x62,0x68,0x78,0x68,0x60,0xf0,0x00,
+ 0x3c,0x66,0xc0,0xc0,0xce,0x66,0x3e,0x00,
+ 0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,0xcc,0x00,
+ 0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
+ 0x1e,0x0c,0x0c,0x0c,0xcc,0xcc,0x78,0x00,
+ 0xe6,0x66,0x6c,0x78,0x6c,0x66,0xe6,0x00,
+ 0xf0,0x60,0x60,0x60,0x62,0x66,0xfe,0x00,
+ 0xc6,0xee,0xfe,0xfe,0xd6,0xc6,0xc6,0x00,
+ 0xc6,0xe6,0xf6,0xde,0xce,0xc6,0xc6,0x00,
+ 0x38,0x6c,0xc6,0xc6,0xc6,0x6c,0x38,0x00,
+ 0xfc,0x66,0x66,0x7c,0x60,0x60,0xf0,0x00,
+ 0x78,0xcc,0xcc,0xcc,0xdc,0x78,0x1c,0x00,
+ 0xfc,0x66,0x66,0x7c,0x6c,0x66,0xe6,0x00,
+ 0x78,0xcc,0xe0,0x70,0x1c,0xcc,0x78,0x00,
+ 0xfc,0xb4,0x30,0x30,0x30,0x30,0x78,0x00,
+ 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xfc,0x00,
+ 0xcc,0xcc,0xcc,0xcc,0xcc,0x78,0x30,0x00,
+ 0xc6,0xc6,0xc6,0xd6,0xfe,0xee,0xc6,0x00,
+ 0xc6,0xc6,0x6c,0x38,0x38,0x6c,0xc6,0x00,
+ 0xcc,0xcc,0xcc,0x78,0x30,0x30,0x78,0x00,
+ 0xfe,0xc6,0x8c,0x18,0x32,0x66,0xfe,0x00,
+ 0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00,
+ 0xc0,0x60,0x30,0x18,0x0c,0x06,0x02,0x00,
+ 0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00,
+ 0x10,0x38,0x6c,0xc6,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,
+ 0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x78,0x0c,0x7c,0xcc,0x76,0x00,
+ 0xe0,0x60,0x60,0x7c,0x66,0x66,0xdc,0x00,
+ 0x00,0x00,0x78,0xcc,0xc0,0xcc,0x78,0x00,
+ 0x1c,0x0c,0x0c,0x7c,0xcc,0xcc,0x76,0x00,
+ 0x00,0x00,0x78,0xcc,0xfc,0xc0,0x78,0x00,
+ 0x38,0x6c,0x60,0xf0,0x60,0x60,0xf0,0x00,
+ 0x00,0x00,0x76,0xcc,0xcc,0x7c,0x0c,0xf8,
+ 0xe0,0x60,0x6c,0x76,0x66,0x66,0xe6,0x00,
+ 0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00,
+ 0x0c,0x00,0x0c,0x0c,0x0c,0xcc,0xcc,0x78,
+ 0xe0,0x60,0x66,0x6c,0x78,0x6c,0xe6,0x00,
+ 0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
+ 0x00,0x00,0xcc,0xfe,0xfe,0xd6,0xc6,0x00,
+ 0x00,0x00,0xf8,0xcc,0xcc,0xcc,0xcc,0x00,
+ 0x00,0x00,0x78,0xcc,0xcc,0xcc,0x78,0x00,
+ 0x00,0x00,0xdc,0x66,0x66,0x7c,0x60,0xf0,
+ 0x00,0x00,0x76,0xcc,0xcc,0x7c,0x0c,0x1e,
+ 0x00,0x00,0xdc,0x76,0x66,0x60,0xf0,0x00,
+ 0x00,0x00,0x7c,0xc0,0x78,0x0c,0xf8,0x00,
+ 0x10,0x30,0x7c,0x30,0x30,0x34,0x18,0x00,
+ 0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x76,0x00,
+ 0x00,0x00,0xcc,0xcc,0xcc,0x78,0x30,0x00,
+ 0x00,0x00,0xc6,0xd6,0xfe,0xfe,0x6c,0x00,
+ 0x00,0x00,0xc6,0x6c,0x38,0x6c,0xc6,0x00,
+ 0x00,0x00,0xcc,0xcc,0xcc,0x7c,0x0c,0xf8,
+ 0x00,0x00,0xfc,0x98,0x30,0x64,0xfc,0x00,
+ 0x1c,0x30,0x30,0xe0,0x30,0x30,0x1c,0x00,
+ 0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,
+ 0xe0,0x30,0x30,0x1c,0x30,0x30,0xe0,0x00,
+ 0x76,0xdc,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x10,0x38,0x6c,0xc6,0xc6,0xfe,0x00,
+ 0x78,0xcc,0xc0,0xcc,0x78,0x18,0x0c,0x78,
+ 0x00,0xcc,0x00,0xcc,0xcc,0xcc,0x7e,0x00,
+ 0x1c,0x00,0x78,0xcc,0xfc,0xc0,0x78,0x00,
+ 0x7e,0xc3,0x3c,0x06,0x3e,0x66,0x3f,0x00,
+ 0xcc,0x00,0x78,0x0c,0x7c,0xcc,0x7e,0x00,
+ 0xe0,0x00,0x78,0x0c,0x7c,0xcc,0x7e,0x00,
+ 0x30,0x30,0x78,0x0c,0x7c,0xcc,0x7e,0x00,
+ 0x00,0x00,0x78,0xc0,0xc0,0x78,0x0c,0x38,
+ 0x7e,0xc3,0x3c,0x66,0x7e,0x60,0x3c,0x00,
+ 0xcc,0x00,0x78,0xcc,0xfc,0xc0,0x78,0x00,
+ 0xe0,0x00,0x78,0xcc,0xfc,0xc0,0x78,0x00,
+ 0xcc,0x00,0x70,0x30,0x30,0x30,0x78,0x00,
+ 0x7c,0xc6,0x38,0x18,0x18,0x18,0x3c,0x00,
+ 0xe0,0x00,0x70,0x30,0x30,0x30,0x78,0x00,
+ 0xc6,0x38,0x6c,0xc6,0xfe,0xc6,0xc6,0x00,
+ 0x30,0x30,0x00,0x78,0xcc,0xfc,0xcc,0x00,
+ 0x1c,0x00,0xfc,0x60,0x78,0x60,0xfc,0x00,
+ 0x00,0x00,0x7f,0x0c,0x7f,0xcc,0x7f,0x00,
+ 0x3e,0x6c,0xcc,0xfe,0xcc,0xcc,0xce,0x00,
+ 0x78,0xcc,0x00,0x78,0xcc,0xcc,0x78,0x00,
+ 0x00,0xcc,0x00,0x78,0xcc,0xcc,0x78,0x00,
+ 0x00,0xe0,0x00,0x78,0xcc,0xcc,0x78,0x00,
+ 0x78,0xcc,0x00,0xcc,0xcc,0xcc,0x7e,0x00,
+ 0x00,0xe0,0x00,0xcc,0xcc,0xcc,0x7e,0x00,
+ 0x00,0xcc,0x00,0xcc,0xcc,0x7c,0x0c,0xf8,
+ 0xc3,0x18,0x3c,0x66,0x66,0x3c,0x18,0x00,
+ 0xcc,0x00,0xcc,0xcc,0xcc,0xcc,0x78,0x00,
+ 0x18,0x18,0x7e,0xc0,0xc0,0x7e,0x18,0x18,
+ 0x38,0x6c,0x64,0xf0,0x60,0xe6,0xfc,0x00,
+ 0xcc,0xcc,0x78,0xfc,0x30,0xfc,0x30,0x30,
+ 0xf8,0xcc,0xcc,0xfa,0xc6,0xcf,0xc6,0xc7,
+ 0x0e,0x1b,0x18,0x3c,0x18,0x18,0xd8,0x70,
+ 0x1c,0x00,0x78,0x0c,0x7c,0xcc,0x7e,0x00,
+ 0x38,0x00,0x70,0x30,0x30,0x30,0x78,0x00,
+ 0x00,0x1c,0x00,0x78,0xcc,0xcc,0x78,0x00,
+ 0x00,0x1c,0x00,0xcc,0xcc,0xcc,0x7e,0x00,
+ 0x00,0xf8,0x00,0xf8,0xcc,0xcc,0xcc,0x00,
+ 0xfc,0x00,0xcc,0xec,0xfc,0xdc,0xcc,0x00,
+ 0x3c,0x6c,0x6c,0x3e,0x00,0x7e,0x00,0x00,
+ 0x38,0x6c,0x6c,0x38,0x00,0x7c,0x00,0x00,
+ 0x30,0x00,0x30,0x60,0xc0,0xcc,0x78,0x00,
+ 0x00,0x00,0x00,0xfc,0xc0,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0xfc,0x0c,0x0c,0x00,0x00,
+ 0xc3,0xc6,0xcc,0xde,0x33,0x66,0xcc,0x0f,
+ 0xc3,0xc6,0xcc,0xdb,0x37,0x6f,0xcf,0x03,
+ 0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x00,
+ 0x00,0x33,0x66,0xcc,0x66,0x33,0x00,0x00,
+ 0x00,0xcc,0x66,0x33,0x66,0xcc,0x00,0x00,
+ 0x22,0x88,0x22,0x88,0x22,0x88,0x22,0x88,
+ 0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
+ 0xdb,0x77,0xdb,0xee,0xdb,0x77,0xdb,0xee,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0xf8,0x18,0x18,0x18,
+ 0x18,0x18,0xf8,0x18,0xf8,0x18,0x18,0x18,
+ 0x36,0x36,0x36,0x36,0xf6,0x36,0x36,0x36,
+ 0x00,0x00,0x00,0x00,0xfe,0x36,0x36,0x36,
+ 0x00,0x00,0xf8,0x18,0xf8,0x18,0x18,0x18,
+ 0x36,0x36,0xf6,0x06,0xf6,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+ 0x00,0x00,0xfe,0x06,0xf6,0x36,0x36,0x36,
+ 0x36,0x36,0xf6,0x06,0xfe,0x00,0x00,0x00,
+ 0x36,0x36,0x36,0x36,0xfe,0x00,0x00,0x00,
+ 0x18,0x18,0xf8,0x18,0xf8,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf8,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x1f,0x00,0x00,0x00,
+ 0x18,0x18,0x18,0x18,0xff,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xff,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x1f,0x18,0x18,0x18,
+ 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+ 0x18,0x18,0x18,0x18,0xff,0x18,0x18,0x18,
+ 0x18,0x18,0x1f,0x18,0x1f,0x18,0x18,0x18,
+ 0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,
+ 0x36,0x36,0x37,0x30,0x3f,0x00,0x00,0x00,
+ 0x00,0x00,0x3f,0x30,0x37,0x36,0x36,0x36,
+ 0x36,0x36,0xf7,0x00,0xff,0x00,0x00,0x00,
+ 0x00,0x00,0xff,0x00,0xf7,0x36,0x36,0x36,
+ 0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36,
+ 0x00,0x00,0xff,0x00,0xff,0x00,0x00,0x00,
+ 0x36,0x36,0xf7,0x00,0xf7,0x36,0x36,0x36,
+ 0x18,0x18,0xff,0x00,0xff,0x00,0x00,0x00,
+ 0x36,0x36,0x36,0x36,0xff,0x00,0x00,0x00,
+ 0x00,0x00,0xff,0x00,0xff,0x18,0x18,0x18,
+ 0x00,0x00,0x00,0x00,0xff,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0x3f,0x00,0x00,0x00,
+ 0x18,0x18,0x1f,0x18,0x1f,0x00,0x00,0x00,
+ 0x00,0x00,0x1f,0x18,0x1f,0x18,0x18,0x18,
+ 0x00,0x00,0x00,0x00,0x3f,0x36,0x36,0x36,
+ 0x36,0x36,0x36,0x36,0xff,0x36,0x36,0x36,
+ 0x18,0x18,0xff,0x18,0xff,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0xf8,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x1f,0x18,0x18,0x18,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
+ 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
+ 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
+ 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x76,0xdc,0xc8,0xdc,0x76,0x00,
+ 0x00,0x78,0xcc,0xf8,0xcc,0xf8,0xc0,0xc0,
+ 0x00,0xfc,0xcc,0xc0,0xc0,0xc0,0xc0,0x00,
+ 0x00,0xfe,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,
+ 0xfc,0xcc,0x60,0x30,0x60,0xcc,0xfc,0x00,
+ 0x00,0x00,0x7e,0xd8,0xd8,0xd8,0x70,0x00,
+ 0x00,0x66,0x66,0x66,0x66,0x7c,0x60,0xc0,
+ 0x00,0x76,0xdc,0x18,0x18,0x18,0x18,0x00,
+ 0xfc,0x30,0x78,0xcc,0xcc,0x78,0x30,0xfc,
+ 0x38,0x6c,0xc6,0xfe,0xc6,0x6c,0x38,0x00,
+ 0x38,0x6c,0xc6,0xc6,0x6c,0x6c,0xee,0x00,
+ 0x1c,0x30,0x18,0x7c,0xcc,0xcc,0x78,0x00,
+ 0x00,0x00,0x7e,0xdb,0xdb,0x7e,0x00,0x00,
+ 0x06,0x0c,0x7e,0xdb,0xdb,0x7e,0x60,0xc0,
+ 0x38,0x60,0xc0,0xf8,0xc0,0x60,0x38,0x00,
+ 0x78,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,
+ 0x00,0xfc,0x00,0xfc,0x00,0xfc,0x00,0x00,
+ 0x30,0x30,0xfc,0x30,0x30,0x00,0xfc,0x00,
+ 0x60,0x30,0x18,0x30,0x60,0x00,0xfc,0x00,
+ 0x18,0x30,0x60,0x30,0x18,0x00,0xfc,0x00,
+ 0x0e,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,
+ 0x18,0x18,0x18,0x18,0x18,0xd8,0xd8,0x70,
+ 0x30,0x30,0x00,0xfc,0x00,0x30,0x30,0x00,
+ 0x00,0x76,0xdc,0x00,0x76,0xdc,0x00,0x00,
+ 0x38,0x6c,0x6c,0x38,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+ 0x0f,0x0c,0x0c,0x0c,0xec,0x6c,0x3c,0x1c,
+ 0x78,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x00,
+ 0x70,0x18,0x30,0x60,0x78,0x00,0x00,0x00,
+ 0x00,0x00,0x3c,0x3c,0x3c,0x3c,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+
+ULONG ScreenCursor;
+
+VOID
+NTAPI
+LlbVideoDrawChar(IN CHAR c,
+ IN ULONG cx,
+ IN ULONG cy,
+ IN USHORT Color,
+ IN USHORT BackColor)
+{
+ PUSHORT Buffer;
+ PCHAR Pixels;
+ CHAR Line;
+ ULONG x, y, ScreenWidth;
+ PUSHORT VideoBuffer;
+
+ /* Get screen width and frame buffer */
+ ScreenWidth = LlbHwGetScreenWidth();
+ VideoBuffer = LlbHwGetFrameBuffer();
+
+ /* Compute starting address on-screen and in the character-array */
+ buffer = VideoBuffer + ScreenWidth * cy + cx;
+ pixels = LlbHwBootFont + c * 8;
+
+ /* Loop y pixels */
+ for (y = 0; y < 8; y++)
+ {
+ /* Loop x pixels */
+ Line = *Pixels++;
+ for (x = 7; x >= 0; x--)
+ {
+ /* Draw either a character or background pixel */
+ Buffer[x] = (Line & 1) ? Color : BackColor;
+ Line >>= 1;
+ }
+
+ /* Next line */
+ Buffer += ScreenWidth;
+ }
+}
+
+VOID
+NTAPI
+LlbVideoClearScreen(VOID)
+{
+ ULONG ScreenSize, p;
+ ULONG BackColor;
+ PUSHORT VideoBuffer;
+
+ /* Get frame buffer and reset cursor position */
+ VideoBuffer = LlbHwGetFrameBuffer();
+ ScreenCursor = 0;
+
+ /* Backcolor on this machine */
+ BackColor = LlbHwVideoCreateColor(14, 0, 82);
+ BackColor = (BackColor << 16) | BackColor;
+
+ /* Screen size on this machine */
+ ScreenSize = LlbHwGetScreenWidth() * LlbHwGetScreenHeight();
+
+ /* Clear the screen with the given color */
+ for (p = 0; p < ScreenSize * 2; p += 4)
+ {
+ *(PULONG)((PCHAR)VideoBuffer + p) = BackColor;
+ }
+}
+
+VOID
+NTAPI
+LlbVideoPutChar(IN CHAR c)
+{
+ ULONG cx, cy, CharsPerLine, BackColor;
+
+ /* Forecolor on this machine */
+ BackColor = LlbHwVideoCreateColor(14, 0, 82);
+
+ /* Amount of characters in a line */
+ CharsPerLine = LlbHwGetScreenWidth() / 8;
+
+ /* Handle new line and scrolling */
+ if (c == '\n')
+ {
+ /* Move a line down */
+ ScreenCursor += CharsPerLine - (ScreenCursor % CharsPerLine);
+
+ /* FIXME: Scrolling */
+ }
+ else
+ {
+ /* Calculate character position from pixel position */
+ cy = (ScreenCursor / CharsPerLine) * 8;
+ cx = (ScreenCursor % CharsPerLine) * 8;
+
+ /* Draw the character and increment the cursor */
+ LlbVideoDrawChar(c, cx, cy, 0xFFFF, BackColor);
+ ScreenCursor++;
+ }
+}
+
+/* EOF */