Screwing up compatibility continues! Here's an idea, let's rename all the kernel exports!
-----Original Message----- From: ros-diffs-bounces@reactos.org [mailto:ros-diffs-bounces@reactos.org] On Behalf Of fireball@svn.reactos.org Sent: Friday, June 15, 2007 3:59 AM To: ros-diffs@reactos.org Subject: [ros-diffs] [fireball] 27186: - Resurrect "old" bootvid. The plan is to * make it working in trunk * add framebuffer support for olpc and xbox kind of devices.
Author: fireball Date: Fri Jun 15 14:58:37 2007 New Revision: 27186
URL: http://svn.reactos.org/svn/reactos?rev=27186&view=rev Log: - Resurrect "old" bootvid. The plan is to * make it working in trunk * add framebuffer support for olpc and xbox kind of devices.
Added: branches/olpc/drivers/base/bootvid/bar.bmp - copied unchanged from r25677, trunk/reactos/drivers/base/bootvid/bar.bmp branches/olpc/drivers/base/bootvid/bootimage.bmp - copied unchanged from r25677, trunk/reactos/drivers/base/bootvid/bootimage.bmp branches/olpc/drivers/base/bootvid/bootvid.h - copied unchanged from r25677, trunk/reactos/drivers/base/bootvid/bootvid.h branches/olpc/drivers/base/bootvid/resource.h - copied unchanged from r25677, trunk/reactos/drivers/base/bootvid/resource.h branches/olpc/drivers/base/bootvid/vid.c - copied unchanged from r25677, trunk/reactos/drivers/base/bootvid/vid.c branches/olpc/drivers/base/bootvid/vid_vga.c - copied unchanged from r25677, trunk/reactos/drivers/base/bootvid/vid_vga.c branches/olpc/drivers/base/bootvid/vid_vgatext.c - copied unchanged from r25677, trunk/reactos/drivers/base/bootvid/vid_vgatext.c branches/olpc/drivers/base/bootvid/vid_xbox.c - copied unchanged from r25677, trunk/reactos/drivers/base/bootvid/vid_xbox.c Removed: branches/olpc/drivers/base/bootvid/bootdata.c branches/olpc/drivers/base/bootvid/precomp.h branches/olpc/drivers/base/bootvid/vga.c Modified: branches/olpc/drivers/base/bootvid/bootvid.c (contents, props changed) branches/olpc/drivers/base/bootvid/bootvid.def (contents, props changed) branches/olpc/drivers/base/bootvid/bootvid.rbuild (contents, props changed) branches/olpc/drivers/base/bootvid/bootvid.rc (contents, props changed)
Removed: branches/olpc/drivers/base/bootvid/bootdata.c URL: http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootda... ============================================================================== --- branches/olpc/drivers/base/bootvid/bootdata.c (original) +++ branches/olpc/drivers/base/bootvid/bootdata.c (removed) @@ -1,309 +1,0 @@ -#include "precomp.h" - -USHORT AT_Initialization[] = -{ - 0x10 | CMD_STREAM_READ, // Major Command = 0x10. Minor Command = 0x08. - 0x3DA, // Index Status 1 Register Port Address - - // - // This Stream performs a USHORT Array Indexed Write at port 0x3C0 - // - 0x20 | 0x01, // Major Command = 0x20. Minor Command = 0x01. - 0x3C0, // Attribute Controller Data Register - 0x10, // Loop Count = 16 (Number of Pallette Entries) - 0x0, // Index to select (Index = 0, palettes) - 0x00, // Palette 0 - 0x01, // Palette 1 - 0x02, // Palette 2 - 0x03, // Palette 3 - 0x04, // Palette 4 - 0x05, // Palette 5 - 0x06, // Palette 6 - 0x07, // Palette 7 - 0x08, // Palette 8 - 0x09, // Palette 9 - 0x0A, // Palette 10 - 0x0B, // Palette 11 - 0x0C, // Palette 12 - 0x0D, // Palette 13 - 0x0E, // Palette 14 - 0x0F, // Palette 15 - - // - // This Stream performs a UCHAR READ of port 0x3DA - // - 0x10 | CMD_STREAM_READ, // Major Command = 0x10. Minor Command = 0x08. - 0x3DA, // Index Status 1 Register Port Address - - // - // This Stream performs a UCHAR WRITE of value 0x20 at port 0x3C0 - // - 0x10 | CMD_STREAM_WRITE, // Major Command = 0x10. Minor Command = 0x00. - 0x3C0, // Attribute Controller Data Register - 0x20, // Set Palette Address Source - - // - // End of Stream Marker - // - 0x0 // End of command stream -}; - -UCHAR FontData[256 * 13] = -{ - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 0 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 13 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 26 - 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 39 - 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 52 - 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 65 - 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 78 - 0x10, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 91 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, // 104 - 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 117 - 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 130 - 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 143 - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 156 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, // 169 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 182 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 195 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 208 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 221 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 234 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 247 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 260 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 273 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 286 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 299 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 312 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 325 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 338 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 351 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 364 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 377 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 390 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 403 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 416 - 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // 429 - 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 442 - 0x00, 0x14, 0x14, 0x14, 0x7F, 0x28, 0xFE, 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, // 455 - 0x10, 0x3C, 0x50, 0x50, 0x70, 0x38, 0x1C, 0x14, 0x14, 0x78, 0x10, 0x00, 0x00, // 468 - 0x00, 0x61, 0x92, 0x94, 0x68, 0x18, 0x16, 0x29, 0x49, 0x86, 0x00, 0x00, 0x00, // 481 - 0x00, 0x18, 0x24, 0x24, 0x38, 0x71, 0x89, 0x8E, 0xC6, 0x7E, 0x00, 0x00, 0x00, // 494 - 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 507 - 0x06, 0x08, 0x10, 0x30, 0x20, 0x20, 0x20, 0x20, 0x30, 0x10, 0x08, 0x06, 0x00, // 520 - 0x60, 0x10, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, // 533 - 0x00, 0x10, 0x52, 0x24, 0x3C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 546 - 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // 559 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10, 0x20, 0x00, // 572 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 585 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, // 598 - 0x01, 0x02, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x40, 0x80, 0x00, // 611 - 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x3C, 0x00, 0x00, 0x00, // 624 - 0x00, 0x30, 0xD0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x00, 0x00, 0x00, // 637 - 0x00, 0x78, 0x04, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7C, 0x00, 0x00, 0x00, // 650 - 0x00, 0x78, 0x04, 0x04, 0x08, 0x30, 0x0C, 0x04, 0x04, 0x78, 0x00, 0x00, 0x00, // 663 - 0x00, 0x08, 0x18, 0x28, 0x28, 0x48, 0x88, 0xFC, 0x08, 0x08, 0x00, 0x00, 0x00, // 676 - 0x00, 0x3C, 0x20, 0x20, 0x38, 0x04, 0x04, 0x04, 0x04, 0x38, 0x00, 0x00, 0x00, // 689 - 0x00, 0x1C, 0x20, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x22, 0x1C, 0x00, 0x00, 0x00, // 702 - 0x00, 0x7E, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00, 0x00, // 715 - 0x00, 0x3C, 0x42, 0x42, 0x24, 0x3C, 0x46, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 728 - 0x00, 0x38, 0x44, 0x42, 0x42, 0x46, 0x3A, 0x02, 0x04, 0x38, 0x00, 0x00, 0x00, // 741 - 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, // 754 - 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10, 0x20, 0x00, // 767 - 0x00, 0x00, 0x00, 0x02, 0x0C, 0x10, 0x60, 0x10, 0x0C, 0x02, 0x00, 0x00, 0x00, // 780 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // 793 - 0x00, 0x00, 0x00, 0x40, 0x30, 0x08, 0x06, 0x08, 0x30, 0x40, 0x00, 0x00, 0x00, // 806 - 0x00, 0x7C, 0x42, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // 819 - 0x00, 0x3C, 0x62, 0xDE, 0xB2, 0xA2, 0xA6, 0x9B, 0x44, 0x3C, 0x00, 0x00, 0x00, // 832 - 0x00, 0x00, 0x18, 0x18, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x81, 0x00, 0x00, 0x00, // 845 - 0x00, 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x42, 0x42, 0x42, 0x7C, 0x00, 0x00, 0x00, // 858 - 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x3E, 0x00, 0x00, 0x00, // 871 - 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x42, 0x42, 0x44, 0x78, 0x00, 0x00, 0x00, // 884 - 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x00, // 897 - 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, // 910 - 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x8E, 0x82, 0x42, 0x3E, 0x00, 0x00, 0x00, // 923 - 0x00, 0x00, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, // 936 - 0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00, 0x00, // 949 - 0x00, 0x00, 0x3C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x78, 0x00, 0x00, 0x00, // 962 - 0x00, 0x00, 0x42, 0x44, 0x48, 0x70, 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, // 975 - 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x00, // 988 - 0x00, 0x00, 0xC6, 0xC6, 0xAA, 0xAA, 0xAA, 0x92, 0x82, 0x82, 0x00, 0x00, 0x00, // 1001 - 0x00, 0x00, 0x42, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x46, 0x42, 0x00, 0x00, 0x00, // 1014 - 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 1027 - 0x00, 0x00, 0x7C, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, // 1040 - 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x06, 0x03, 0x00, // 1053 - 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x78, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, // 1066 - 0x00, 0x00, 0x3E, 0x40, 0x40, 0x38, 0x04, 0x02, 0x02, 0x7C, 0x00, 0x00, 0x00, // 1079 - 0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // 1092 - 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 1105 - 0x00, 0x00, 0x81, 0x42, 0x42, 0x44, 0x24, 0x28, 0x38, 0x10, 0x00, 0x00, 0x00, // 1118 - 0x00, 0x00, 0x81, 0x81, 0x92, 0x5A, 0x5A, 0x6A, 0x66, 0x24, 0x00, 0x00, 0x00, // 1131 - 0x00, 0x00, 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, 0x00, 0x00, 0x00, // 1144 - 0x00, 0x00, 0x82, 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // 1157 - 0x00, 0x00, 0xFE, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0xFE, 0x00, 0x00, 0x00, // 1170 - 0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1E, 0x00, // 1183 - 0x80, 0x40, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x02, 0x02, 0x01, 0x00, // 1196 - 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x78, 0x00, // 1209 - 0x00, 0x08, 0x08, 0x18, 0x14, 0x24, 0x24, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, // 1222 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, // 1235 - 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1248 - 0x00, 0x00, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00, 0x00, 0x00, // 1261 - 0x40, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x62, 0x5C, 0x00, 0x00, 0x00, // 1274 - 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x40, 0x40, 0x20, 0x1E, 0x00, 0x00, 0x00, // 1287 - 0x02, 0x02, 0x02, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, 0x00, // 1300 - 0x00, 0x00, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00, 0x00, 0x00, // 1313 - 0x1E, 0x20, 0x20, 0xFE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, // 1326 - 0x00, 0x00, 0x00, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x02, 0x02, 0x3C, // 1339 - 0x40, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, // 1352 - 0x18, 0x18, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, // 1365 - 0x18, 0x18, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, // 1378 - 0x40, 0x40, 0x40, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, 0x00, 0x00, // 1391 - 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, // 1404 - 0x00, 0x00, 0x00, 0xB6, 0xDA, 0x92, 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, // 1417 - 0x00, 0x00, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, // 1430 - 0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 1443 - 0x00, 0x00, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x62, 0x5C, 0x40, 0x40, 0x40, // 1456 - 0x00, 0x00, 0x00, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x02, 0x02, 0x02, // 1469 - 0x00, 0x00, 0x00, 0x5C, 0x64, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, // 1482 - 0x00, 0x00, 0x00, 0x3C, 0x40, 0x60, 0x18, 0x04, 0x04, 0x78, 0x00, 0x00, 0x00, // 1495 - 0x00, 0x00, 0x20, 0xFC, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1C, 0x00, 0x00, 0x00, // 1508 - 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, 0x00, // 1521 - 0x00, 0x00, 0x00, 0x82, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, // 1534 - 0x00, 0x00, 0x00, 0x81, 0x91, 0x5A, 0x5A, 0x6A, 0x24, 0x24, 0x00, 0x00, 0x00, // 1547 - 0x00, 0x00, 0x00, 0x42, 0x24, 0x18, 0x18, 0x18, 0x24, 0x42, 0x00, 0x00, 0x00, // 1560 - 0x00, 0x00, 0x00, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x10, 0x30, 0xE0, // 1573 - 0x00, 0x00, 0x00, 0x7E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x00, 0x00, 0x00, // 1586 - 0x1C, 0x10, 0x10, 0x10, 0x10, 0x60, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x00, // 1599 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, // 1612 - 0x30, 0x08, 0x08, 0x08, 0x08, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, // 1625 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, // 1638 - 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00, 0x00, 0x00, // 1651 - 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x3E, 0x04, 0x02, 0x06, // 1664 - 0x00, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, 0x00, // 1677 - 0x08, 0x10, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00, 0x00, 0x00, // 1690 - 0x18, 0x24, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00, 0x00, 0x00, // 1703 - 0x00, 0x24, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00, 0x00, 0x00, // 1716 - 0x10, 0x08, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00, 0x00, 0x00, // 1729 - 0x10, 0x28, 0x10, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00, 0x00, 0x00, // 1742 - 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x40, 0x40, 0x20, 0x1E, 0x08, 0x04, 0x0C, // 1755 - 0x18, 0x24, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00, 0x00, 0x00, // 1768 - 0x00, 0x12, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00, 0x00, 0x00, // 1781 - 0x10, 0x08, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00, 0x00, 0x00, // 1794 - 0x00, 0x24, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, // 1807 - 0x18, 0x24, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, // 1820 - 0x10, 0x08, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, // 1833 - 0x24, 0x00, 0x18, 0x18, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x81, 0x00, 0x00, 0x00, // 1846 - 0x10, 0x28, 0x10, 0x28, 0x28, 0x24, 0x44, 0x7E, 0x42, 0x81, 0x00, 0x00, 0x00, // 1859 - 0x08, 0x10, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x00, // 1872 - 0x00, 0x00, 0x00, 0xFC, 0x12, 0x12, 0x7E, 0x90, 0x90, 0x6E, 0x00, 0x00, 0x00, // 1885 - 0x00, 0x00, 0x0F, 0x18, 0x18, 0x28, 0x2E, 0x78, 0x48, 0x8F, 0x00, 0x00, 0x00, // 1898 - 0x18, 0x24, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 1911 - 0x00, 0x24, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 1924 - 0x20, 0x10, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 1937 - 0x18, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, 0x00, // 1950 - 0x20, 0x10, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, 0x00, // 1963 - 0x00, 0x24, 0x00, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x10, 0x30, 0xE0, // 1976 - 0x24, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 1989 - 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 2002 - 0x00, 0x08, 0x1C, 0x28, 0x48, 0x48, 0x48, 0x68, 0x1C, 0x08, 0x00, 0x00, 0x00, // 2015 - 0x00, 0x0E, 0x10, 0x10, 0x10, 0x38, 0x10, 0x10, 0x20, 0x3E, 0x00, 0x00, 0x00, // 2028 - 0x00, 0x81, 0x42, 0x24, 0x18, 0x7C, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00, 0x00, // 2041 - 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x96, 0xBC, 0x94, 0x92, 0x9E, 0x00, 0x00, 0x00, // 2054 - 0x0E, 0x10, 0x10, 0x3C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xE0, // 2067 - 0x08, 0x10, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00, 0x00, 0x00, // 2080 - 0x08, 0x10, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, // 2093 - 0x08, 0x10, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 2106 - 0x08, 0x10, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, 0x00, // 2119 - 0x14, 0x28, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, // 2132 - 0x14, 0x28, 0x42, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x46, 0x42, 0x00, 0x00, 0x00, // 2145 - 0x00, 0x78, 0x08, 0x38, 0x48, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2158 - 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2171 - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x42, 0x3E, 0x00, // 2184 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // 2197 - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // 2210 - 0x00, 0xC4, 0x48, 0x48, 0x50, 0x37, 0x21, 0x43, 0x44, 0x87, 0x00, 0x00, 0x00, // 2223 - 0x00, 0xC4, 0x48, 0x48, 0x50, 0x22, 0x26, 0x4A, 0x4F, 0x82, 0x00, 0x00, 0x00, // 2236 - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, // 2249 - 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x48, 0x24, 0x12, 0x00, 0x00, 0x00, 0x00, // 2262 - 0x00, 0x00, 0x00, 0x00, 0x48, 0x24, 0x12, 0x24, 0x48, 0x00, 0x00, 0x00, 0x00, // 2275 - 0x94, 0x00, 0x00, 0x94, 0x00, 0x94, 0x00, 0x00, 0x94, 0x00, 0x94, 0x00, 0x00, // 2288 - 0x49, 0x94, 0x00, 0x49, 0x94, 0x49, 0x00, 0x94, 0x49, 0x94, 0x49, 0x00, 0x94, // 2301 - 0xFF, 0x94, 0x94, 0xFF, 0x94, 0xFF, 0x94, 0x94, 0xFF, 0x94, 0xFF, 0x94, 0x94, // 2314 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 2327 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 2340 - 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, // 2353 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // 2366 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // 2379 - 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, // 2392 - 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x14, 0x14, 0x14, 0x14, 0x14, // 2405 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // 2418 - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x14, 0x14, 0x14, // 2431 - 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, // 2444 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2457 - 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, // 2470 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 2483 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2496 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2509 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 2522 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 2535 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2548 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 2561 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, // 2574 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // 2587 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, // 2600 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, // 2613 - 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, // 2626 - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, // 2639 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, // 2652 - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, // 2665 - 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, // 2678 - 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, // 2691 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2704 - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, // 2717 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // 2730 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2743 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, // 2756 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, // 2769 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // 2782 - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // 2795 - 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, // 2808 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2821 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 2834 - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 2847 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 2860 - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, // 2873 - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, // 2886 - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2899 - 0x00, 0x00, 0x00, 0x31, 0x49, 0x86, 0x84, 0x84, 0x8A, 0x71, 0x00, 0x00, 0x00, // 2912 - 0x38, 0x48, 0x48, 0x50, 0x50, 0x58, 0x44, 0x42, 0x42, 0x5C, 0x00, 0x00, 0x00, // 2925 - 0x00, 0x00, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, // 2938 - 0x00, 0x00, 0x00, 0x7F, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, // 2951 - 0x00, 0x00, 0xFF, 0x40, 0x20, 0x10, 0x10, 0x20, 0x40, 0xFF, 0x00, 0x00, 0x00, // 2964 - 0x00, 0x00, 0x00, 0x7F, 0x84, 0x84, 0x84, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, // 2977 - 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x66, 0x5A, 0x40, 0x40, 0x40, // 2990 - 0x00, 0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // 3003 - 0x00, 0x00, 0x10, 0x7C, 0x92, 0x92, 0x92, 0x92, 0x7C, 0x10, 0x00, 0x00, 0x00, // 3016 - 0x00, 0x00, 0x38, 0x44, 0x82, 0xBA, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, // 3029 - 0x00, 0x00, 0x7C, 0xC6, 0x82, 0x82, 0x82, 0x84, 0x44, 0xEE, 0x00, 0x00, 0x00, // 3042 - 0x38, 0x40, 0x60, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00, // 3055 - 0x00, 0x00, 0x00, 0x00, 0x66, 0x99, 0x99, 0x99, 0x66, 0x00, 0x00, 0x00, 0x00, // 3068 - 0x10, 0x10, 0x10, 0x7C, 0x92, 0x91, 0x91, 0x91, 0x92, 0x7C, 0x10, 0x10, 0x10, // 3081 - 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x7C, 0x40, 0x60, 0x1E, 0x00, 0x00, 0x00, // 3094 - 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, // 3107 - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, // 3120 - 0x00, 0x00, 0x00, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x00, 0xFE, 0x00, 0x00, 0x00, // 3133 - 0x00, 0x00, 0x40, 0x30, 0x08, 0x06, 0x08, 0x30, 0x40, 0x00, 0x7E, 0x00, 0x00, // 3146 - 0x00, 0x00, 0x02, 0x0C, 0x10, 0x60, 0x10, 0x0C, 0x02, 0x00, 0x7E, 0x00, 0x00, // 3159 - 0x0C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 3172 - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, // 3185 - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, // 3198 - 0x00, 0x00, 0x00, 0x00, 0x72, 0x4E, 0x00, 0x72, 0x4E, 0x00, 0x00, 0x00, 0x00, // 3211 - 0x00, 0x10, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3224 - 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, // 3237 - 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, // 3250 - 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0xC4, 0x28, 0x28, 0x18, 0x10, 0x00, // 3263 - 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3276 - 0x00, 0x3C, 0x04, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3289 - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, // 3302 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 3315 -};
Modified: branches/olpc/drivers/base/bootvid/bootvid.c URL: http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi... ============================================================================== --- branches/olpc/drivers/base/bootvid/bootvid.c (original) +++ branches/olpc/drivers/base/bootvid/bootvid.c Fri Jun 15 14:58:37 2007 @@ -1,475 +1,290 @@ -#include "precomp.h" - -/* PRIVATE FUNCTIONS *********************************************************/ - -BOOLEAN -NTAPI -VgaInterpretCmdStream(IN PUSHORT CmdStream) -{ - PUCHAR Base = (PUCHAR)VgaRegisterBase; - USHORT Cmd; - UCHAR Major, Minor; - USHORT Count; - UCHAR Index; - PUSHORT Buffer; - PUSHORT ShortPort; - PUCHAR Port; - UCHAR Value; - USHORT ShortValue; - - /* First make sure that we have a Command Stream */ - if (!CmdStream) return TRUE; - - /* Loop as long as we have commands */ - while (*CmdStream) - { - /* Get the Major and Minor Function */ - Cmd = *CmdStream; - Major = Cmd & 0xF0; - Minor = Cmd & 0x0F; - - /* Move to the next command */ - CmdStream++; - - /* Check which major function this was */ - if (Major == 0x10) - { - /* Now let's see the minor function */ - if (Minor & CMD_STREAM_READ) - { - /* Now check the sub-type */ - if (Minor & CMD_STREAM_USHORT) - { - /* The port is what is in the stream right now */ - ShortPort = UlongToPtr((ULONG)*CmdStream); - - /* Move to the next command */ - CmdStream++; - - /* Read USHORT from the port */ - READ_PORT_USHORT(PtrToUlong(Base) + ShortPort); - } - else - { - /* The port is what is in the stream right now */ - Port = UlongToPtr((ULONG)*CmdStream); - - /* Move to the next command */ - CmdStream++; - - /* Read UCHAR from the port */ - READ_PORT_UCHAR(PtrToUlong(Base) + Port); - } - } - else if (Minor & CMD_STREAM_WRITE_ARRAY) - { - /* Now check the sub-type */ - if (Minor & CMD_STREAM_USHORT) - { - /* The port is what is in the stream right now */ - ShortPort = UlongToPtr(Cmd); - - /* Move to the next command and get the count */ - Count = *(CmdStream++); - - /* The buffer is what's next in the command stream */ - Buffer = CmdStream++; - - /* Write USHORT to the port */ - WRITE_PORT_BUFFER_USHORT(PtrToUshort(Base) + ShortPort, Buffer, Count); - - /* Move past the buffer in the command stream */ - CmdStream += Count; - } - else - { - /* The port is what is in the stream right now */ - Port = UlongToPtr(Cmd); - - /* Move to the next command and get the count */ - Count = *(CmdStream++); - - /* Add the base to the port */ - Port = PtrToUlong(Port) + Base; - - /* Move to next command */ - CmdStream++; - - /* Loop the cmd array */ - for (; Count; Count--, CmdStream++) - { - /* Get the byte we're writing */ - Value = (UCHAR)*CmdStream; - - /* Write UCHAR to the port */ - WRITE_PORT_UCHAR(Port, Value); - } - } - } - else if (Minor & CMD_STREAM_USHORT) - { - /* Get the ushort we're writing and advance in the stream */ - ShortValue = *CmdStream; - CmdStream++; - - /* Write USHORT to the port (which is in cmd) */ - WRITE_PORT_USHORT((PUSHORT)Base + Cmd, ShortValue); - } - else - { - /* The port is what is in the stream right now */ - Port = UlongToPtr((ULONG)*CmdStream); - - /* Get the uchar we're writing */ - Value = (UCHAR)*++CmdStream; - - /* Move to the next command */ - CmdStream++; - - /* Write UCHAR to the port (which is in cmd) */ - WRITE_PORT_UCHAR(PtrToUlong(Base) + Port, Value); - } - } - else if (Major == 0x20) - { - /* Check the minor function. Note these are not flags anymore. */ - switch (Minor) - { - case 0: - /* The port is what is in the stream right now */ - ShortPort = UlongToPtr(*CmdStream); - - /* Move to the next command and get the count */ - Count = *(CmdStream++); - - /* Move to the next command and get the value to write */ - ShortValue = *(CmdStream++); - - /* Add the base to the port */ - ShortPort = PtrToUlong(ShortPort) + (PUSHORT)Base; - - /* Move to next command */ - CmdStream++; - - /* Make sure we have data */ - if (!ShortValue) continue; - - /* Loop the cmd array */ - for (; Count; Count--, CmdStream++, Value++) - { - /* Get the byte we're writing */ - ShortValue += (*CmdStream) << 8; - - /* Write USHORT to the port */ - WRITE_PORT_USHORT(ShortPort, ShortValue); - } - break; - case 1: - /* The port is what is in the stream right now. Add the base too */ - Port = *CmdStream + Base; - - /* Move to the next command and get the count */ - Count = *++CmdStream; - - /* Move to the next command and get the index to write */ - Index = (UCHAR)*++CmdStream; - - /* Move to next command */ - CmdStream++; - - /* Loop the cmd array */ - for (; Count; Count--, Index++) - { - /* Write the index */ - WRITE_PORT_UCHAR(Port, Index); - - /* Get the byte we're writing */ - Value = (UCHAR)*CmdStream; - - /* Move to next command */ - CmdStream++; - - /* Write UCHAR value to the port */ - WRITE_PORT_UCHAR(Port, Value); - } - break; - case 2: - /* The port is what is in the stream right now. Add the base too */ - Port = *CmdStream + Base; - - /* Read the current value and add the stream data */ - Value = READ_PORT_UCHAR(Port); - Value &= *CmdStream++; - Value ^= *CmdStream++; - - /* Write the value */ - WRITE_PORT_UCHAR(Port, Value); - break; - default: - /* Unknown command, fail */ - return FALSE; - } - } - else if (Major != 0xF0) - { - /* Unknown major function, fail */ - return FALSE; - } - - /* Get the next command */ - Cmd = *CmdStream; - } - - /* If we got here, return success */ - return TRUE; -} - -BOOLEAN -NTAPI -VgaIsPresent(VOID) -{ - UCHAR VgaReg, VgaReg2, VgaReg3; - UCHAR SeqReg, SeqReg2; - UCHAR i; - - /* Read the VGA Address Register */ - VgaReg = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE); - - /* Select Read Map Select Register */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4); - - /* Read it back...it should be 4 */ - if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE)) & 0xF) != 4) return FALSE; - - /* Read the VGA Data Register */ - VgaReg2 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF); - - /* Enable all planes */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 3); - - /* Read it back...it should be 3 */ - if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != 0x3) - { - /* Reset the registers and fail */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0); - return FALSE; - } - - /* Select Bit Mask Register */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8); - - /* Read it back...it should be 8 */ - if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE)) & 0xF) != 8) - { - /* Reset the registers and fail */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0); - return FALSE; - } - - /* Read the VGA Data Register */ - VgaReg3 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF); - - /* Loop bitmasks */ - for (i = 0xBB; i; i >>= 1) - { - /* Set bitmask */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, i); - - /* Read it back...it should be the same */ - if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != i) - { - /* Reset the registers and fail */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0xFF); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0); - return FALSE; - } - } - - /* Select Read Map Select Register */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4); - - /* Read it back...it should be 3 */ - if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != 3) - { - /* Reset the registers and fail */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0xFF); - return FALSE; - } - - /* Write the registers we read earlier */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, VgaReg); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, VgaReg2); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, VgaReg3); - - /* Read sequencer address */ - SeqReg = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4); - - /* Select memory mode register */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4, 4); - - /* Read it back...it should still be 4 */ - if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4)) & 7) != 4) - { - /* Fail */ - return FALSE; - } - - /* Read sequencer Data */ - SeqReg2 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5); - - /* Write null plane */ - WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x100); - - /* Write sequencer flag */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, SeqReg2 ^ 8); - - /* Read it back */ - if ((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5)) != (SeqReg2 ^ 8)) - { - /* Not the same value...restore registers and fail */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, 2); - WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x300); - return FALSE; - } - - /* Now write the registers we read */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, SeqReg2); - WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x300); - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4, SeqReg); - - /* VGA is present! */ - return TRUE; -} - -/* PUBLIC FUNCTIONS **********************************************************/ - /* - * @implemented + * ReactOS Boot video driver + * + * Copyright (C) 2003 Casper S. Hornstroup + * Copyright (C) 2004, 2005 Filip Navara + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ */ -BOOLEAN -NTAPI -VidInitialize(IN BOOLEAN SetMode) -{ - ULONG Context = 0; - PHYSICAL_ADDRESS TranslatedAddress; - PHYSICAL_ADDRESS NullAddress = {{0}}; - ULONG AddressSpace = 1; - BOOLEAN Result; - ULONG_PTR Base; - - /* Make sure that we have a bus translation function */ - if (!HalFindBusAddressTranslation) return FALSE; - - /* Get the VGA Register address */ - Result = HalFindBusAddressTranslation(NullAddress, - &AddressSpace, - &TranslatedAddress, - &Context, - TRUE); - if (!Result) return FALSE; - - /* See if this is I/O Space, which we need to map */ -TryAgain: - if (!AddressSpace) - { - /* Map it */ - Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, 0x400, MmNonCached); - } - else - { - /* The base is the translated address, no need to map I/O space */ - Base = TranslatedAddress.LowPart; - } - - /* Set the VGA Register base and now check if we have a VGA device */ - VgaRegisterBase = Base; - if (VgaIsPresent()) - { - /* Translate the VGA Memory Address */ - NullAddress.LowPart = 0xA0000; - AddressSpace = 0; - Result = HalFindBusAddressTranslation(NullAddress, - &AddressSpace, - &TranslatedAddress, - &Context, - FALSE); - if (Result) - { - /* Success! See if this is I/O Space, which we need to map */ - if (!AddressSpace) - { - /* Map it */ - Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, - 0x20000, - MmNonCached); - } - else - { - /* The base is the translated address, no need to map I/O space */ - Base = TranslatedAddress.LowPart; - } - - /* Set the VGA Memory Base */ - VgaBase = Base; - - /* Now check if we have to set the mode */ - if (SetMode) - { - // - // Reset the display - // - //HalResetDisplay(); - curr_x = 0; - curr_y = 0; - - /* Initialize it */ - VgaInterpretCmdStream(AT_Initialization); - return TRUE; - } - } - } - else - { - /* It's not, so unmap the I/O space if we mapped it */ - if (!AddressSpace) MmUnmapIoSpace((PVOID)VgaRegisterBase, 0x400); - } - - /* If we got here, then we failed...let's try again */ - Result = HalFindBusAddressTranslation(NullAddress, - &AddressSpace, - &TranslatedAddress, - &Context, - TRUE); - if (Result) goto TryAgain; - - /* If we got here, then we failed even past our re-try... */ - return FALSE; -} - -/* - * @implemented - */ -VOID -NTAPI -VidResetDisplay(IN BOOLEAN HalReset) -{ - /* Clear the current position */ - curr_x = 0; - curr_y = 0; - - /* Clear the screen with HAL if we were asked to */ - //if (HalReset) HalResetDisplay(); - - /* Re-initialize the VGA Display */ - VgaInterpretCmdStream(AT_Initialization); - - /* Re-initialize the palette and fill the screen black */ - InitializePalette(); - VidSolidColorFill(0, 0, 639, 479, 0); -} - + +/* INCLUDES ******************************************************************/ + +#include "bootvid.h" +#include "resource.h" + +#define NDEBUG +#include <debug.h> + +//#define USE_PROGRESS_BAR + +/* GLOBALS *******************************************************************/ + +static volatile LONG ShutdownNotify; +static KEVENT ShutdownCompleteEvent; + +/* DATA **********************************************************************/ + +static RGBQUAD _MainPalette[16]; +static UCHAR _Square1[9 * 4]; +static UCHAR _Square2[9 * 4]; +static UCHAR _Square3[9 * 4]; + +/* FUNCTIONS *****************************************************************/ + +static VOID NTAPI +BootVidAnimationThread(PVOID Ignored) +{ + UCHAR PaletteBitmapBuffer[sizeof(BITMAPINFOHEADER) + sizeof(_MainPalette)]; + PBITMAPINFOHEADER PaletteBitmap = (PBITMAPINFOHEADER)PaletteBitmapBuffer; + LPRGBQUAD Palette = (LPRGBQUAD)(PaletteBitmapBuffer + sizeof(BITMAPINFOHEADER)); + ULONG Iteration, Index, ClrUsed; + UINT AnimBarPos; + LARGE_INTEGER Interval; + + /* + * Build a bitmap containing the fade in palette. The palette entries + * are then processed in a loop and set using VidBitBlt function. + */ + + ClrUsed = sizeof(_MainPalette) / sizeof(_MainPalette[0]); + RtlZeroMemory(PaletteBitmap, sizeof(BITMAPINFOHEADER)); + PaletteBitmap->biSize = sizeof(BITMAPINFOHEADER); + PaletteBitmap->biBitCount = 4; + PaletteBitmap->biClrUsed = ClrUsed; + + /* + * Main animation loop. + */ + + for (Iteration = 0, AnimBarPos = 0; !ShutdownNotify; Iteration++) + { + if (Iteration <= PALETTE_FADE_STEPS) + { + for (Index = 0; Index < ClrUsed; Index++) + { + Palette[Index].rgbRed = + _MainPalette[Index].rgbRed * Iteration / PALETTE_FADE_STEPS; + Palette[Index].rgbGreen = + _MainPalette[Index].rgbGreen * Iteration / PALETTE_FADE_STEPS; + Palette[Index].rgbBlue = + _MainPalette[Index].rgbBlue * Iteration / PALETTE_FADE_STEPS; + } + + VidBitBlt(PaletteBitmapBuffer, 0, 0); + } +#ifdef USE_PROGRESS_BAR + else + { + break; + } + + Interval.QuadPart = -PALETTE_FADE_TIME; +#else + +#if 0 + if (AnimBarPos == 0) + { + VidSolidColorFill(0x173, 354, 0x178, 354 + 9, 0); + } + else if (AnimBarPos > 3) + { + VidSolidColorFill(0xe3 + AnimBarPos * 8, 354, + 0xe8 + AnimBarPos * 8, 354 + 9, + 0); + } + + if (AnimBarPos >= 3) + { + VidBufferToScreenBlt(_Square1, 0xeb + AnimBarPos * 8, 354, 6, 9, 4); + } + if (AnimBarPos >= 2 && AnimBarPos <= 16) + { + VidBufferToScreenBlt(_Square2, 0xf3 + AnimBarPos * 8, 354, 6, 9, 4); + } + if (AnimBarPos >= 1 && AnimBarPos <= 15) + { + VidBufferToScreenBlt(_Square3, 0xfb + AnimBarPos * 8, 354, 6, 9, 4); + } +#endif + + if (Iteration <= PALETTE_FADE_STEPS) + { + Interval.QuadPart = -PALETTE_FADE_TIME; + if ((Iteration % 5) == 0) + AnimBarPos++; + } + else + { + Interval.QuadPart = -PALETTE_FADE_TIME * 5; + AnimBarPos++; + } + AnimBarPos = Iteration % 18; +#endif + + /* Wait for a bit. */ + KeDelayExecutionThread(KernelMode, FALSE, &Interval); + } + + DPRINT("Finishing bootvid thread.\n"); + KeSetEvent(&ShutdownCompleteEvent, 0, FALSE); + + PsTerminateSystemThread(0); +} + + +NTSTATUS NTAPI +BootVidDisplayBootLogo(PVOID ImageBase) +{ + PBITMAPINFOHEADER BitmapInfoHeader; + LPRGBQUAD Palette; + static const ULONG BitmapIds[2] = {IDB_BOOTIMAGE, IDB_BAR}; + PUCHAR BitmapData[2]; + ULONG Index; + HANDLE BitmapThreadHandle; + CLIENT_ID BitmapThreadId; + NTSTATUS Status; + + KeInitializeEvent(&ShutdownCompleteEvent, NotificationEvent, FALSE); + + /* + * Get the bitmaps from the executable. + */ + + for (Index = 0; Index < sizeof(BitmapIds) / sizeof(BitmapIds[0]); Index++) + { + PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry; + LDR_RESOURCE_INFO ResourceInfo; + ULONG Size; + + ResourceInfo.Type = /* RT_BITMAP */ 2; + ResourceInfo.Name = BitmapIds[Index]; + ResourceInfo.Language = 0x09; + + Status = LdrFindResource_U( + ImageBase, + &ResourceInfo, + RESOURCE_DATA_LEVEL, + &ResourceDataEntry); + + if (!NT_SUCCESS(Status)) + { + DPRINT("LdrFindResource_U() failed with status 0x%.08x\n", Status); + return Status; + } + + Status = LdrAccessResource( + ImageBase, + ResourceDataEntry, + (PVOID*)&BitmapData[Index], + &Size); + + if (!NT_SUCCESS(Status)) + { + DPRINT("LdrAccessResource() failed with status 0x%.08x\n", Status); + return Status; + } + } + + + /* + * Initialize the graphics output. + */ + + if (!VidInitialize(TRUE)) + { + return STATUS_UNSUCCESSFUL; + } + + /* + * Load the bar bitmap and get the square data from it. + */ + + VidBitBlt(BitmapData[1], 0, 0); + VidScreenToBufferBlt(_Square1, 0, 0, 6, 9, 4); + VidScreenToBufferBlt(_Square2, 8, 0, 6, 9, 4); + VidScreenToBufferBlt(_Square3, 16, 0, 6, 9, 4); + + /* + * Save the main image palette and replace it with black palette, so + * we can do fade in effect later. + */ + + BitmapInfoHeader = (PBITMAPINFOHEADER)BitmapData[0]; + Palette = (LPRGBQUAD)(BitmapData[0] + BitmapInfoHeader->biSize); + RtlCopyMemory(_MainPalette, Palette, sizeof(_MainPalette)); + RtlZeroMemory(Palette, sizeof(_MainPalette)); + + /* + * Display the main image. + */ + + VidBitBlt(BitmapData[0], 0, 0); + + /* + * Start a thread that handles the fade in and bar animation effects. + */ + + Status = PsCreateSystemThread( + &BitmapThreadHandle, + THREAD_ALL_ACCESS, + NULL, + NULL, + &BitmapThreadId, + BootVidAnimationThread, + NULL); + + if (!NT_SUCCESS(Status)) + { + VidCleanUp(); + return Status; + } + + ZwClose(BitmapThreadHandle); + + return STATUS_SUCCESS; +} + + +VOID NTAPI +BootVidUpdateProgress(ULONG Progress) +{ +#ifdef USE_PROGRESS_BAR + if (ShutdownNotify == 0) + { + VidSolidColorFill(0x103, 354, 0x103 + (Progress * 120 / 100), 354 + 9, 1); + } +#endif +} + + +VOID NTAPI +BootVidFinalizeBootLogo(VOID) +{ + InterlockedIncrement(&ShutdownNotify); + DPRINT1("Waiting for bootvid thread to finish.\n"); + KeWaitForSingleObject(&ShutdownCompleteEvent, Executive, KernelMode, + FALSE, NULL); + DPRINT1("Bootvid thread to finish.\n"); + //VidResetDisplay(); +} + + +NTSTATUS STDCALL +DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) +{ + return STATUS_SUCCESS; +}
Propchange: branches/olpc/drivers/base/bootvid/bootvid.c ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.def URL: http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi... ============================================================================== --- branches/olpc/drivers/base/bootvid/bootvid.def (original) +++ branches/olpc/drivers/base/bootvid/bootvid.def Fri Jun 15 14:58:37 2007 @@ -1,15 +1,14 @@ -LIBRARY BOOTVID.DLL +LIBRARY bootvid.sys
EXPORTS -VidBitBlt@12 -VidBufferToScreenBlt@24 -VidCleanUp@0 -VidDisplayString@4 -VidDisplayStringXY -VidInitialize@4 -VidResetDisplay@4 -VidScreenToBufferBlt@24 -VidSetScrollRegion@16 -VidSetTextColor@4 -VidSolidColorFill@20 - +VidInitialize +VidCleanUp +VidResetDisplay +VidBufferToScreenBlt +VidScreenToBufferBlt +VidBitBlt +VidSolidColorFill +VidDisplayString +BootVidDisplayBootLogo +BootVidUpdateProgress +BootVidFinalizeBootLogo
Propchange: branches/olpc/drivers/base/bootvid/bootvid.def ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.rbuild URL: http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi... ============================================================================== --- branches/olpc/drivers/base/bootvid/bootvid.rbuild (original) +++ branches/olpc/drivers/base/bootvid/bootvid.rbuild Fri Jun 15 14:58:37 2007 @@ -2,11 +2,13 @@ <importlibrary definition="bootvid.def"></importlibrary> <bootstrap base="$(CDOUTPUT)" nameoncd="bootvid.dll" /> <include base="bootvid">.</include> - <define name="__USE_W32API" /> + <define name="__USE_W32API" /> <library>ntoskrnl</library> <library>hal</library> <file>bootvid.c</file> - <file>bootdata.c</file> - <file>vga.c</file> + <file>vid.c</file> + <file>vid_vga.c</file> + <file>vid_vgatext.c</file> + <file>vid_xbox.c</file> <file>bootvid.rc</file> -</module> +</module>
Propchange: branches/olpc/drivers/base/bootvid/bootvid.rbuild ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.rc URL: http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi... ============================================================================== --- branches/olpc/drivers/base/bootvid/bootvid.rc (original) +++ branches/olpc/drivers/base/bootvid/bootvid.rc Fri Jun 15 14:58:37 2007 @@ -3,8 +3,12 @@ #include "resource.h"
#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "VGA Boot Driver\0" -#define REACTOS_STR_INTERNAL_NAME "bootvid.dll\0" -#define REACTOS_STR_ORIGINAL_FILENAME "bootvid.dll\0" +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Boot Video\0" +#define REACTOS_STR_INTERNAL_NAME "bootvid\0" +#define REACTOS_STR_ORIGINAL_FILENAME "bootvid.sys\0" +#include <reactos/version.rc>
-#include <reactos/version.rc> +IDB_BOOTIMAGE BITMAP DISCARDABLE "bootimage.bmp" +IDB_BAR BITMAP DISCARDABLE "bar.bmp" + +
Propchange: branches/olpc/drivers/base/bootvid/bootvid.rc ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Removed: branches/olpc/drivers/base/bootvid/precomp.h URL: http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/precom... ============================================================================== --- branches/olpc/drivers/base/bootvid/precomp.h (original) +++ branches/olpc/drivers/base/bootvid/precomp.h (removed) @@ -1,46 +1,0 @@ -#include "ntddk.h" -#include "arc/arc.h" -#include "halfuncs.h" -#include "drivers/bootvid/bootvid.h" - -// -// Command Stream Definitions -// -#define CMD_STREAM_WRITE 0x0 -#define CMD_STREAM_WRITE_ARRAY 0x2 -#define CMD_STREAM_USHORT 0x4 -#define CMD_STREAM_READ 0x8 - -// -// Bitmap Header -// -typedef struct tagBITMAPINFOHEADER -{ - ULONG biSize; - LONG biWidth; - LONG biHeight; - USHORT biPlanes; - USHORT biBitCount; - ULONG biCompression; - ULONG biSizeImage; - LONG biXPelsPerMeter; - LONG biYPelsPerMeter; - ULONG biClrUsed; - ULONG biClrImportant; -} BITMAPINFOHEADER, *PBITMAPINFOHEADER; - -VOID -NTAPI -InitializePalette( - VOID -); - -// -// Globals -// -extern USHORT AT_Initialization[]; -extern ULONG curr_x; -extern ULONG curr_y; -extern ULONG_PTR VgaRegisterBase; -extern ULONG_PTR VgaBase; -extern UCHAR FontData[256 * 13];
Removed: branches/olpc/drivers/base/bootvid/vga.c URL: http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/vga.c?... ============================================================================== --- branches/olpc/drivers/base/bootvid/vga.c (original) +++ branches/olpc/drivers/base/bootvid/vga.c (removed) @@ -1,1274 +1,0 @@ -#include "precomp.h" - -/* GLOBALS *******************************************************************/ - -ULONG ScrollRegion[4] = -{ - 0, - 0, - 640 - 1, - 480 - 1 -}; -UCHAR lMaskTable[8] = -{ - (1 << 8) - (1 << 0), - (1 << 7) - (1 << 0), - (1 << 6) - (1 << 0), - (1 << 5) - (1 << 0), - (1 << 4) - (1 << 0), - (1 << 3) - (1 << 0), - (1 << 2) - (1 << 0), - (1 << 1) - (1 << 0) -}; -UCHAR rMaskTable[8] = -{ - (1 << 7), - (1 << 7)+ (1 << 6), - (1 << 7)+ (1 << 6) + (1 << 5), - (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4), - (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3), - (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2), - (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2) + (1 << 1), - (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2) + (1 << 1) + - (1 << 0), -}; -UCHAR PixelMask[8] = -{ - (1 << 7), - (1 << 6), - (1 << 5), - (1 << 4), - (1 << 3), - (1 << 2), - (1 << 1), - (1 << 0), -}; -ULONG lookup[16] = -{ - 0x0000, - 0x0100, - 0x1000, - 0x1100, - 0x0001, - 0x0101, - 0x1001, - 0x1101, - 0x0010, - 0x0110, - 0x1010, - 0x1110, - 0x0011, - 0x0111, - 0x1011, - 0x1111, -}; - -ULONG TextColor = 0xF; -ULONG curr_x = 0; -ULONG curr_y = 0; -BOOLEAN NextLine = FALSE; -ULONG_PTR VgaRegisterBase = 0; -ULONG_PTR VgaBase = 0; - -/* PRIVATE FUNCTIONS *********************************************************/ - -VOID -NTAPI -ReadWriteMode(UCHAR Mode) -{ - UCHAR Value; - - /* Switch to graphics mode register */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 5); - - /* Get the current register value, minus the current mode */ - Value = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) & 0xF4; - - /* Set the new mode */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, Mode | Value); -} - -VOID -NTAPI -__outpb(IN ULONG Port, - IN ULONG Value) -{ - /* Write to the VGA Register */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + Port, (UCHAR)Value); -} - -VOID -NTAPI -__outpw(IN ULONG Port, - IN ULONG Value) -{ - /* Write to the VGA Register */ - WRITE_PORT_USHORT((PUSHORT)(VgaRegisterBase + Port), (USHORT)Value); -} - -VOID -NTAPI -SetPixel(IN ULONG Left, - IN ULONG Top, - IN UCHAR Color) -{ - PUCHAR PixelPosition; - - /* Calculate the pixel position. */ - PixelPosition = (PUCHAR)VgaBase + (Left >> 3) + (Top * 80); - - /* Switch to mode 10 */ - ReadWriteMode(10); - - /* Clear the 4 planes (we're already in unchained mode here) */ - __outpw(0x3C4, 0xF02); - - /* Select the color don't care register */ - __outpw(0x3CE, 7); - - /* Select the bitmask register and write the mask */ - __outpw(0x3CE, (PixelMask[Left & 7] << 8) | 8); - - /* Read the current pixel value and add our color */ - WRITE_REGISTER_UCHAR(PixelPosition, - READ_REGISTER_UCHAR(PixelPosition) & Color); -} - -VOID -NTAPI -DisplayCharacter(CHAR Character, - ULONG Left, - ULONG Top, - ULONG TextColor, - ULONG BackTextColor) -{ - PUCHAR FontChar; - ULONG i, j, XOffset; - - /* Get the font line for this character */ - FontChar = &FontData[Character * 13 - Top]; - - /* Loop each pixel height */ - i = 13; - do - { - /* Loop each pixel width */ - j = 128; - XOffset = Left; - do - { - /* Check if we should draw this pixel */ - if (FontChar[Top] & (UCHAR)j) - { - /* We do, use the given Text Color */ - SetPixel(XOffset, Top, (UCHAR)TextColor); - } - else if (BackTextColor < 16) - { - /* This is a background pixel. We're drawing it unless it's */ - /* transparent. */ - SetPixel(XOffset, Top, (UCHAR)BackTextColor); - } - - /* Increase X Offset */ - XOffset++; - } while (j >>= 1); - - /* Move to the next Y ordinate */ - Top++; - } while (--i); -} - -VOID -NTAPI -DisplayStringXY(PUCHAR String, - ULONG Left, - ULONG Top, - ULONG TextColor, - ULONG BackColor) -{ - /* Loop every character */ - while (*String) - { - /* Display a character */ - DisplayCharacter(*String, Left, Top, TextColor, BackColor); - - /* Move to next character and next position */ - String++; - Left += 8; - } -} - -VOID -NTAPI -SetPaletteEntryRGB(IN ULONG Id, - IN ULONG Rgb) -{ - PCHAR Colors = (PCHAR)&Rgb; - - /* Set the palette index */ - __outpb(0x3C8, (UCHAR)Id); - - /* Set RGB colors */ - __outpb(0x3C9, Colors[2] >> 2); - __outpb(0x3C9, Colors[1] >> 2); - __outpb(0x3C9, Colors[0] >> 2); -} - -VOID -NTAPI -InitPaletteWithTable(IN PULONG Table, - IN ULONG Count) -{ - ULONG i; - PULONG Entry = Table; - - /* Loop every entry */ - for (i = 0; i < Count; i++, Entry++) - { - /* Set the entry */ - SetPaletteEntryRGB(i, *Entry); - } -} - -VOID -NTAPI -SetPaletteEntry(IN ULONG Id, - IN ULONG PaletteEntry) -{ - /* Set the palette index */ - __outpb(0x3C8, (UCHAR)Id); - - /* Set RGB colors */ - __outpb(0x3C9, PaletteEntry & 0xFF); - __outpb(0x3C9, (PaletteEntry >>= 8) & 0xFF); - __outpb(0x3C9, (PaletteEntry >> 8) & 0xFF); -} - -VOID -NTAPI -InitializePalette(VOID) -{ - ULONG PaletteEntry[16] = {0, - 0x20, - 0x2000, - 0x2020, - 0x200000, - 0x200020, - 0x202000, - 0x202020, - 0x303030, - 0x3F, - 0x3F00, - 0x3F3F, - 0x3F0000, - 0x3F003F, - 0x3F3F00, - 0x3F3F3F}; - ULONG i; - - /* Loop all the entries and set their palettes */ - for (i = 0; i < 16; i++) SetPaletteEntry(i, PaletteEntry[i]); -} - -VOID -NTAPI -VgaScroll(ULONG Scroll) -{ - ULONG Top; - ULONG SourceOffset, DestOffset; - ULONG Offset; - ULONG i, j; - - /* Set memory positions of the scroll */ - SourceOffset = VgaBase + (ScrollRegion[1] * 80) + (ScrollRegion[0] >> 3); - DestOffset = SourceOffset + (Scroll * 80); - - /* Clear the 4 planes */ - __outpw(0x3C4, 0xF02); - - /* Set the bitmask to 0xFF for all 4 planes */ - __outpw(0x3CE, 0xFF08); - - /* Set Mode 1 */ - ReadWriteMode(1); - - /* Save top and check if it's above the bottom */ - Top = ScrollRegion[1]; - if (Top > ScrollRegion[3]) return; - - /* Start loop */ - do - { - /* Set number of bytes to loop and start offset */ - Offset = ScrollRegion[0] >> 3; - j = SourceOffset; - - /* Check if this is part of the scroll region */ - if (Offset <= (ScrollRegion[2] >> 3)) - { - /* Update position */ - i = DestOffset - SourceOffset; - - /* Loop the X axis */ - do - { - /* Write value in the new position so that we can do the scroll */ - WRITE_REGISTER_UCHAR((PUCHAR)j, - READ_REGISTER_UCHAR((PUCHAR)j + i)); - - /* Move to the next memory location to write to */ - j++; - - /* Move to the next byte in the region */ - Offset++; - - /* Make sure we don't go past the scroll region */ - } while (Offset <= (ScrollRegion[2] >> 3)); - } - - /* Move to the next line */ - SourceOffset += 80; - DestOffset += 80; - - /* Increase top */ - Top++; - - /* Make sure we don't go past the scroll region */ - } while (Top <= ScrollRegion[3]); -} - -VOID -NTAPI -PreserveRow(IN ULONG CurrentTop, - IN ULONG TopDelta, - IN BOOLEAN Direction) -{ - PUCHAR Position1, Position2; - ULONG Count; - - /* Clear the 4 planes */ - __outpw(0x3C4, 0xF02); - - /* Set the bitmask to 0xFF for all 4 planes */ - __outpw(0x3CE, 0xFF08); - - /* Set Mode 1 */ - ReadWriteMode(1); - - /* Check which way we're preserving */ - if (Direction) - { - /* Calculate the position in memory for the row */ - Position1 = (PUCHAR)VgaBase + CurrentTop * 80; - Position2 = (PUCHAR)VgaBase + 0x9600; - } - else - { - /* Calculate the position in memory for the row */ - Position1 = (PUCHAR)VgaBase + 0x9600; - Position2 = (PUCHAR)VgaBase + CurrentTop * 80; - } - - /* Set the count and make sure it's above 0 */ - Count = TopDelta * 80; - if (Count) - { - /* Loop every pixel */ - do - { - /* Write the data back on the other position */ - WRITE_REGISTER_UCHAR(Position1, READ_REGISTER_UCHAR(Position2)); - - /* Increase both positions */ - Position2++; - Position1++; - } while (--Count); - } -} - -VOID -NTAPI -BitBlt(IN ULONG Left, - IN ULONG Top, - IN ULONG Width, - IN ULONG Height, - IN PUCHAR Buffer, - IN ULONG BitsPerPixel, - IN ULONG Delta) -{ - ULONG LeftAnd, LeftShifted, LeftPlusOne, LeftPos; - ULONG lMask, rMask; - UCHAR NotlMask; - ULONG Distance; - ULONG DistanceMinusLeftBpp; - ULONG SomeYesNoFlag, SomeYesNoFlag2; - PUCHAR PixelPosition, m; - PUCHAR i, k; - ULONG j; - ULONG x; - ULONG Plane; - UCHAR LeftArray[84]; - PUCHAR CurrentLeft; - PUCHAR l; - ULONG LoopCount; - UCHAR pMask, PlaneShift; - BOOLEAN Odd; - UCHAR Value; - - /* Check if the buffer isn't 4bpp */ - if (BitsPerPixel != 4) - { - /* FIXME: TODO */ - DbgPrint("Unhandled BitBlt\n" - "%lxx%lx @ (%lx,%lx)\n" - "Bits Per Pixel %lx\n" - "Buffer: %p. Delta: %lx\n", - Width, - Height, - Left, - Top, - BitsPerPixel, - Buffer, - Delta); - return; - } - - /* Get the masks and other values */ - LeftAnd = Left & 0x7; - lMask = lMaskTable[LeftAnd]; - Distance = Width + Left; - rMask = rMaskTable[(Distance - 1) & 0x7]; - Left >>= 3; - - /* Set some values */ - SomeYesNoFlag = FALSE; - SomeYesNoFlag2 = FALSE; - Distance = (Distance - 1) >> 3; - DistanceMinusLeftBpp = Distance - Left; - - /* Check if the distance is equal to the left position and add the masks */ - if (Left == Distance) lMask += rMask; - - /* Check if there's no distance offset */ - if (DistanceMinusLeftBpp) - { - /* Set the first flag on */ - SomeYesNoFlag = TRUE; - - /* Decrease offset and check if we still have one */ - if (--DistanceMinusLeftBpp) - { - /* Still have a distance offset */ - SomeYesNoFlag2 = TRUE; - } - } - - /* Calculate initial pixel position */ - PixelPosition = (PUCHAR)VgaBase + (Top * 80) + Left; - - /* Set loop buffer variable */ - i = Buffer; - - /* Switch to mode 0 */ - ReadWriteMode(0); - - /* Leave now if the height is 0 */ - if (Height <= 0) return; - - /* Set more weird values */ - CurrentLeft = &LeftArray[Left]; - NotlMask = ~(UCHAR)lMask; - LeftPlusOne = Left + 1; - LeftShifted = (lMask << 8) | 8; - j = Height; - - /* Start the height loop */ - do - { - /* Start the plane loop */ - Plane = 0; - do - { - /* Clear the current value */ - *CurrentLeft = 0; - LoopCount = 0; - - /* Set the buffer loop variable for this loop */ - k = i; - - /* Calculate plane shift and pixel mask */ - PlaneShift = 1 << Plane; - pMask = PixelMask[LeftAnd]; - - /* Check if we have a width */ - if (Width > 0) - { - /* Loop it */ - l = CurrentLeft; - x = Width; - do - { - /* Check if we're odd and increase the loop count */ - Odd = LoopCount & 1 ? TRUE : FALSE; - LoopCount++; - if (Odd) - { - /* Check for the plane shift */ - if (*k & PlaneShift) - { - /* Write the pixel mask */ - *l |= pMask; - } - - /* Increase buffer position */ - k++; - } - else - { - /* Check for plane shift */ - if ((*k >> 4) & PlaneShift) - { - /* Write the pixel mask */ - *l |= pMask; - } - } - - /* Shift the pixel mask */ - pMask >>= 1; - if (!pMask) - { - /* Move to the next current left position and clear it */ - l++; - *l = 0; - - /* Set the pixel mask to 0x80 */ - pMask = 0x80; - } - } while (--x); - } - - /* Set the plane value */ - __outpw(0x3C4, (1 << (Plane + 8) | 2)); - - /* Select the bitmask register and write the mask */ - __outpw(0x3CE, (USHORT)LeftShifted); - - /* Read the current Pixel value */ - Value = READ_REGISTER_UCHAR(PixelPosition); - - /* Add our mask */ - Value = (Value & NotlMask) | *CurrentLeft; - - /* Set current left for the loop, and write new pixel value */ - LeftPos = LeftPlusOne; - WRITE_REGISTER_UCHAR(PixelPosition, Value); - - /* Set loop pixel position and check if we should loop */ - m = PixelPosition + 1; - if (SomeYesNoFlag2) - { - /* Set the bitmask to 0xFF for all 4 planes */ - __outpw(0x3CE, 0xFF08); - - /* Check if we have any distance left */ - if (DistanceMinusLeftBpp > 0) - { - /* Start looping it */ - x = DistanceMinusLeftBpp; - do - { - /* Write the value */ - WRITE_REGISTER_UCHAR(m, LeftArray[LeftPos]); - - /* Go to the next position */ - m++; - LeftPos++; - } while (--x); - } - } - - /* Check if the first flag is on */ - if (SomeYesNoFlag) - { - /* Set the mask value */ - __outpw(0x3CE, (rMask << 8) | 8); - - /* Read the current Pixel value */ - Value = READ_REGISTER_UCHAR(m); - - /* Add our mask */ - Value = (Value & ~(UCHAR)rMask) | LeftArray[LeftPos]; - - /* Set current left for the loop, and write new pixel value */ - WRITE_REGISTER_UCHAR(m, Value); - } - } while (++Plane < 4); - - /* Update pixel position, buffer and height */ - PixelPosition += 80; - i += Delta; - } while (--j); -} - -VOID -NTAPI -RleBitBlt(IN ULONG Left, - IN ULONG Top, - IN ULONG Width, - IN ULONG Height, - IN PUCHAR Buffer) -{ - ULONG YDelta; - ULONG x; - ULONG RleValue, NewRleValue; - ULONG Color, Color2; - ULONG i, j; - ULONG Code; - - /* Set Y height and current X value and start loop */ - YDelta = Top + Height - 1; - x = Left; - for (;;) - { - /* Get the current value and advance in the buffer */ - RleValue = *Buffer; - Buffer++; - if (RleValue) - { - /* Check if we've gone past the edge */ - if ((x + RleValue) > (Width + Left)) - { - /* Fixeup the pixel value */ - RleValue = Left - x + Width; - } - - /* Get the new value */ - NewRleValue = *Buffer; - - /* Get the two colors */ - Color = NewRleValue >> 4; - Color2 = NewRleValue & 0xF; - - /* Increase buffer positition */ - Buffer++; - - /* Check if we need to do a fill */ - if (Color == Color2) - { - /* Do a fill and continue the loop */ - RleValue += x; - VidSolidColorFill(x, YDelta, RleValue - 1, YDelta, (UCHAR)Color); - x = RleValue; - continue; - } - - /* Check if the pixel value is 1 or below */ - if (RleValue > 1) - { - /* Set loop variables */ - i = (RleValue - 2) / 2 + 1; - do - { - /* Set the pixels */ - SetPixel(x, YDelta, (UCHAR)Color); - x++; - SetPixel(x, YDelta, (UCHAR)Color2); - x++; - - /* Decrease pixel value */ - RleValue -= 2; - } while (--i); - } - - /* Check if there is any value at all */ - if (RleValue) - { - /* Set the pixel and increase posititon */ - SetPixel(x, YDelta, (UCHAR)Color); - x++; - } - - /* Start over */ - continue; - } - - /* Get the current pixel value */ - RleValue = *Buffer; - Code = RleValue; - switch (Code) - { - /* Case 0 */ - case 0: - - /* Set new x value, decrease distance and restart */ - x = Left; - YDelta--; - Buffer++; - continue; - - /* Case 1 */ - case 1: - - /* Done */ - return; - - /* Case 2 */ - case 2: - - /* Set new x value, decrease distance and restart */ - Buffer++; - x += *Buffer; - Buffer++; - YDelta -= *Buffer; - Buffer++; - continue; - - /* Other values */ - default: - - Buffer++; - break; - } - - /* Check if we've gone past the edge */ - if ((x + RleValue) > (Width + Left)) - { - /* Set fixed up loop count */ - i = RleValue - Left - Width + x; - - /* Fixup pixel value */ - RleValue -= i; - } - else - { - /* Clear loop count */ - i = 0; - } - - /* Check the value now */ - if (RleValue > 1) - { - /* Set loop variables */ - j = (RleValue - 2) / 2 + 1; - do - { - /* Get the new value */ - NewRleValue = *Buffer; - - /* Get the two colors */ - Color = NewRleValue >> 4; - Color2 = NewRleValue & 0xF; - - /* Increase buffer position */ - Buffer++; - - /* Set the pixels */ - SetPixel(x, YDelta, (UCHAR)Color); - x++; - SetPixel(x, YDelta, (UCHAR)Color2); - x++; - - /* Decrease pixel value */ - RleValue -= 2; - } while (--j); - } - - /* Check if there is any value at all */ - if (RleValue) - { - /* Set the pixel and increase position */ - Color = *Buffer >> 4; - Buffer++; - SetPixel(x, YDelta, (UCHAR)Color); - x++; - i--; - } - - /* Check loop count now */ - if ((LONG)i > 0) - { - /* Decrease it */ - i--; - - /* Set new position */ - Buffer = Buffer + (i / 2) + 1; - } - - /* Check if we need to increase the buffer */ - if ((ULONG_PTR)Buffer & 1) Buffer++; - } -} - -/* PUBLIC FUNCTIONS **********************************************************/ - -/* - * @implemented - */ -ULONG -NTAPI -VidSetTextColor(ULONG Color) -{ - ULONG OldColor; - - /* Save the old color and set the new one */ - OldColor = TextColor; - TextColor = Color; - return OldColor; -} - -/* - * @implemented - */ -VOID -NTAPI -VidDisplayStringXY(PUCHAR String, - ULONG Left, - ULONG Top, - BOOLEAN Transparent) -{ - ULONG BackColor; - - /* If the caller wanted transparent, then send the special value (16), else */ - /* use our default and call the helper routine. */ - BackColor = (Transparent) ? 16 : 14; - DisplayStringXY(String, Left, Top, 12, BackColor); -} - -/* - * @implemented - */ -VOID -NTAPI -VidSetScrollRegion(ULONG x1, - ULONG y1, - ULONG x2, - ULONG y2) -{ - /* Assert alignment */ - ASSERT((x1 & 0x7) == 0); - ASSERT((x2 & 0x7) == 7); - - /* Set Scroll Region */ - ScrollRegion[0] = x1; - ScrollRegion[1] = y1; - ScrollRegion[2] = x2; - ScrollRegion[3] = y2; - - /* Set current X and Y */ - curr_x = x1; - curr_y = y1; -} - -/* - * @implemented - */ -VOID -NTAPI -VidCleanUp(VOID) -{ - /* Select bit mask register */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8); - - /* Clear it */ - WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 255); -} - -/* - * @implemented - */ -VOID -NTAPI -VidBufferToScreenBlt(IN PUCHAR Buffer, - IN ULONG Left, - IN ULONG Top, - IN ULONG Width, - IN ULONG Height, - IN ULONG Delta) -{ - /* Make sure we have a width and height */ - if (!(Width) || !(Height)) return; - - /* Call the helper function */ - BitBlt(Left, Top, Width, Height, Buffer, 4, Delta); -} - -/* - * @implemented - */ -VOID -NTAPI -VidDisplayString(PUCHAR String) -{ - ULONG TopDelta = 14; - - /* Start looping the string */ - while (*String) - { - /* Treat new-line separately */ - if (*String == '\n') - { - /* Modify Y position */ - curr_y += TopDelta; - if (curr_y >= ScrollRegion[3]) - { - /* Scroll the view */ - VgaScroll(TopDelta); - curr_y -= TopDelta; - - /* Preserve row */ - PreserveRow(curr_y, TopDelta, TRUE); - } - - /* Update current X */ - curr_x = ScrollRegion[0]; - - /* Preseve the current row */ - PreserveRow(curr_y, TopDelta, FALSE); - } - else if (*String == '\r') - { - /* Update current X */ - curr_x = ScrollRegion[0]; - - /* Check if we're being followed by a new line */ - if (String[1] != '\n') NextLine = TRUE; - } - else - { - /* Check if we had a \n\r last time */ - if (NextLine) - { - /* We did, preserve the current row */ - PreserveRow(curr_y, TopDelta, TRUE); - NextLine = FALSE; - } - - /* Display this character */ - DisplayCharacter(*String, curr_x, curr_y, TextColor, 16); - curr_x += 8; - - /* Check if we should scroll */ - if (curr_x > ScrollRegion[2]) - { - /* Update Y position and check if we should scroll it */ - curr_y += TopDelta; - if (curr_y > ScrollRegion[3]) - { - /* Do the scroll */ - VgaScroll(TopDelta); - curr_y -= TopDelta; - - /* Save the row */ - PreserveRow(curr_y, TopDelta, TRUE); - } - - /* Update X */ - curr_x = ScrollRegion[0]; - } - } - - /* Get the next character */ - String++; - } -} - -/* - * @implemented - */ -VOID -NTAPI -VidBitBlt(PUCHAR Buffer, - ULONG Left, - ULONG Top) -{ - PBITMAPINFOHEADER BitmapInfoHeader; - LONG Delta; - PUCHAR BitmapOffset; - - /* Get the Bitmap Header */ - BitmapInfoHeader = (PBITMAPINFOHEADER)Buffer; - - /* Initialize the palette */ - InitPaletteWithTable((PULONG)(Buffer + BitmapInfoHeader->biSize), - (BitmapInfoHeader->biClrUsed) ? - BitmapInfoHeader->biClrUsed : 16); - - /* Make sure we can support this bitmap */ - ASSERT((BitmapInfoHeader->biBitCount * BitmapInfoHeader->biPlanes) <= 4); - - /* Calculate the delta and align it on 32-bytes, then calculate the actual */ - /* start of the bitmap data. */ - Delta = (BitmapInfoHeader->biBitCount * BitmapInfoHeader->biWidth) + 31; - Delta >>= 3; - Delta &= ~3; - BitmapOffset = Buffer + sizeof(BITMAPINFOHEADER) + 16 * sizeof(ULONG); - - /* Check the compression of the bitmap */ - if (BitmapInfoHeader->biCompression == 2) - { - /* Make sure we have a width and a height */ - if ((BitmapInfoHeader->biWidth) && (BitmapInfoHeader->biHeight)) - { - /* We can use RLE Bit Blt */ - RleBitBlt(Left, - Top, - BitmapInfoHeader->biWidth, - BitmapInfoHeader->biHeight, - BitmapOffset); - } - } - else - { - /* Check if the height is negative */ - if (BitmapInfoHeader->biHeight < 0) - { - /* Make it positive in the header */ - BitmapInfoHeader->biHeight *= -1; - } - else - { - /* Update buffer offset */ - BitmapOffset += ((BitmapInfoHeader->biHeight -1) * Delta); - Delta *= -1; - } - - /* Make sure we have a width and a height */ - if ((BitmapInfoHeader->biWidth) && (BitmapInfoHeader->biHeight)) - { - /* Do the BitBlt */ - BitBlt(Left, - Top, - BitmapInfoHeader->biWidth, - BitmapInfoHeader->biHeight, - BitmapOffset, - BitmapInfoHeader->biBitCount, - Delta); - } - } -} - -/* - * @implemented - */ -VOID -NTAPI -VidScreenToBufferBlt(PUCHAR Buffer, - ULONG Left, - ULONG Top, - ULONG Width, - ULONG Height, - ULONG Delta) -{ - ULONG Plane; - ULONG XDistance; - ULONG LeftDelta, RightDelta; - ULONG PixelOffset; - PUCHAR PixelPosition; - PUCHAR k, i; - PULONG m; - UCHAR Value, Value2; - UCHAR a; - ULONG b; - ULONG x, y; - - /* Calculate total distance to copy on X */ - XDistance = Left + Width - 1; - - /* Start at plane 0 */ - Plane = 0; - - /* Calculate the 8-byte left and right deltas */ - LeftDelta = Left & 7; - RightDelta = 8 - LeftDelta; - - /* Clear the destination buffer */ - RtlZeroMemory(Buffer, Delta * Height); - - /* Calculate the pixel offset and convert the X distance into byte form */ - PixelOffset = Top * 80 + (Left >> 3); - XDistance >>= 3; - - /* Loop the 4 planes */ - do - { - /* Set the current pixel position and reset buffer loop variable */ - PixelPosition = (PUCHAR)VgaBase + PixelOffset; - i = Buffer; - - /* Set Mode 0 */ - ReadWriteMode(0); - - /* Set the current plane */ - __outpw(0x3CE, (Plane << 8) | 4); - - /* Make sure we have a height */ - if (Height > 0) - { - /* Start the outer Y loop */ - y = Height; - do - { - /* Read the current value */ - m = (PULONG)i; - Value = READ_REGISTER_UCHAR(PixelPosition); - - /* Set Pixel Position loop variable */ - k = PixelPosition + 1; - - /* Check if we're still within bounds */ - if (Left <= XDistance) - { - /* Start X Inner loop */ - x = (XDistance - Left) + 1; - do - { - /* Read the current value */ - Value2 = READ_REGISTER_UCHAR(k); - - /* Increase pixel position */ - k++; - - /* Do the blt */ - a = Value2 >> (UCHAR)RightDelta; - a |= Value << (UCHAR)LeftDelta; - b = lookup[a & 0xF]; - a >>= 4; - b <<= 16; - b |= lookup[a]; - - /* Save new value to buffer */ - *m |= (b << Plane); - - /* Move to next destination location */ - m++; - - /* Write new value */ - Value = Value2; - } while (--x); - } - - /* Update pixel position */ - PixelPosition += 80; - i += Delta; - } while (--y); - } - } while (++Plane < 4); -} - -/* - * @implemented - */ -VOID -NTAPI -VidSolidColorFill(IN ULONG Left, - IN ULONG Top, - IN ULONG Right, - IN ULONG Bottom, - IN UCHAR Color) -{ - ULONG rMask, lMask; - ULONG LeftOffset, RightOffset, Distance; - PUCHAR Offset; - ULONG i, j; - - /* Get the left and right masks, shifts, and delta */ - LeftOffset = Left >> 3; - lMask = (lMaskTable[Left & 0x7] << 8) | 8; - RightOffset = Right >> 3; - rMask = (rMaskTable[Right & 0x7] << 8) | 8; - Distance = RightOffset - LeftOffset; - - /* If there is no distance, then combine the right and left masks */ - if (!Distance) lMask &= rMask; - - /* Switch to mode 10 */ - ReadWriteMode(10); - - /* Clear the 4 planes (we're already in unchained mode here) */ - __outpw(0x3C4, 0xF02); - - /* Select the color don't care register */ - __outpw(0x3CE, 7); - - /* Calculate pixel position for the read */ - Offset = VgaBase + (Top * 80) + (PUCHAR)LeftOffset; - - /* Select the bitmask register and write the mask */ - __outpw(0x3CE, (USHORT)lMask); - - /* Check if the top coord is below the bottom one */ - if (Top <= Bottom) - { - /* Start looping each line */ - i = (Bottom - Top) + 1; - do - { - /* Read the previous value and add our color */ - WRITE_REGISTER_UCHAR(Offset, READ_REGISTER_UCHAR(Offset) & Color); - - /* Move to the next line */ - Offset += 80; - } while (--i); - } - - /* Check if we have a delta */ - if (Distance) - { - /* Calculate new pixel position */ - Offset = VgaBase + (Top * 80) + (PUCHAR)RightOffset; - Distance--; - - /* Select the bitmask register and write the mask */ - __outpw(0x3CE, (USHORT)rMask); - - /* Check if the top coord is below the bottom one */ - if (Top <= Bottom) - { - /* Start looping each line */ - i = (Bottom - Top) + 1; - do - { - /* Read the previous value and add our color */ - WRITE_REGISTER_UCHAR(Offset, - READ_REGISTER_UCHAR(Offset) & Color); - - /* Move to the next line */ - Offset += 80; - } while (--i); - } - - /* Check if we still have a delta */ - if (Distance) - { - /* Calculate new pixel position */ - Offset = VgaBase + (Top * 80) + (PUCHAR)(LeftOffset + 1); - - /* Set the bitmask to 0xFF for all 4 planes */ - __outpw(0x3CE, 0xFF08); - - /* Check if the top coord is below the bottom one */ - if (Top <= Bottom) - { - /* Start looping each line */ - i = (Bottom - Top) + 1; - do - { - /* Loop the shift delta */ - if (Distance > 0) - { - for (j = Distance; j; Offset++, j--) - { - /* Write the color */ - WRITE_REGISTER_UCHAR(Offset, Color); - } - } - - /* Update position in memory */ - Offset += (80 - Distance); - } while (--i); - } - } - } -} -
Do not add any new hack to reactos, that will create a new hell we already manger getting out from ntoskrnl. it took alex 1-2 year fix.
and we all have been agree not adding any new hacks to reactos, do a proper fix, try figout what it really cause of the problem. some times I stting weeks debug win32k to solv a serten bug. or I can choice write a hack solv it within 5mins. please do proper fix not hacks, even a proper fix leads to allot more problem at moment I can not boot reactos now after all new hacks. thanks allot
----- Original Message ----- From: "Alex Ionescu" ionucu@videotron.ca To: ros-dev@reactos.org Sent: Friday, June 15, 2007 8:51 PM Subject: Re: [ros-dev] [ros-diffs] [fireball] 27186: - Resurrect "old"bootvid. The plan is to * make it working in trunk * addframebuffer support for olpc and xbox kind of devices.
Screwing up compatibility continues! Here's an idea, let's rename all the
kernel exports!
-----Original Message----- From: ros-diffs-bounces@reactos.org [mailto:ros-diffs-bounces@reactos.org]
On Behalf Of fireball@svn.reactos.org
Sent: Friday, June 15, 2007 3:59 AM To: ros-diffs@reactos.org Subject: [ros-diffs] [fireball] 27186: - Resurrect "old" bootvid. The plan
is to * make it working in trunk * add framebuffer support for olpc and xbox kind of devices.
Author: fireball Date: Fri Jun 15 14:58:37 2007 New Revision: 27186
URL: http://svn.reactos.org/svn/reactos?rev=27186&view=rev Log:
- Resurrect "old" bootvid. The plan is to
- make it working in trunk
- add framebuffer support for olpc and xbox kind of devices.
Added: branches/olpc/drivers/base/bootvid/bar.bmp - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/bar.bmp
branches/olpc/drivers/base/bootvid/bootimage.bmp - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/bootimage.bmp
branches/olpc/drivers/base/bootvid/bootvid.h - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/bootvid.h
branches/olpc/drivers/base/bootvid/resource.h - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/resource.h
branches/olpc/drivers/base/bootvid/vid.c - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/vid.c
branches/olpc/drivers/base/bootvid/vid_vga.c - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/vid_vga.c
branches/olpc/drivers/base/bootvid/vid_vgatext.c - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/vid_vgatext.c
branches/olpc/drivers/base/bootvid/vid_xbox.c - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/vid_xbox.c
Removed: branches/olpc/drivers/base/bootvid/bootdata.c branches/olpc/drivers/base/bootvid/precomp.h branches/olpc/drivers/base/bootvid/vga.c Modified: branches/olpc/drivers/base/bootvid/bootvid.c (contents, props
changed)
branches/olpc/drivers/base/bootvid/bootvid.def (contents, props
changed)
branches/olpc/drivers/base/bootvid/bootvid.rbuild (contents, props
changed)
branches/olpc/drivers/base/bootvid/bootvid.rc (contents, props
changed)
Removed: branches/olpc/drivers/base/bootvid/bootdata.c URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootda...
============================================================================ ==
--- branches/olpc/drivers/base/bootvid/bootdata.c (original) +++ branches/olpc/drivers/base/bootvid/bootdata.c (removed) @@ -1,309 +1,0 @@ -#include "precomp.h"
-USHORT AT_Initialization[] = -{
- 0x10 | CMD_STREAM_READ, // Major Command = 0x10. Minor Command =
0x08.
- 0x3DA, // Index Status 1 Register Port Address
- //
- // This Stream performs a USHORT Array Indexed Write at port 0x3C0
- //
- 0x20 | 0x01, // Major Command = 0x20. Minor Command =
0x01.
- 0x3C0, // Attribute Controller Data Register
- 0x10, // Loop Count = 16 (Number of Pallette
Entries)
- 0x0, // Index to select (Index = 0, palettes)
- 0x00, // Palette 0
- 0x01, // Palette 1
- 0x02, // Palette 2
- 0x03, // Palette 3
- 0x04, // Palette 4
- 0x05, // Palette 5
- 0x06, // Palette 6
- 0x07, // Palette 7
- 0x08, // Palette 8
- 0x09, // Palette 9
- 0x0A, // Palette 10
- 0x0B, // Palette 11
- 0x0C, // Palette 12
- 0x0D, // Palette 13
- 0x0E, // Palette 14
- 0x0F, // Palette 15
- //
- // This Stream performs a UCHAR READ of port 0x3DA
- //
- 0x10 | CMD_STREAM_READ, // Major Command = 0x10. Minor Command =
0x08.
- 0x3DA, // Index Status 1 Register Port Address
- //
- // This Stream performs a UCHAR WRITE of value 0x20 at port 0x3C0
- //
- 0x10 | CMD_STREAM_WRITE, // Major Command = 0x10. Minor Command =
0x00.
- 0x3C0, // Attribute Controller Data Register
- 0x20, // Set Palette Address Source
- //
- // End of Stream Marker
- //
- 0x0 // End of command stream
-};
-UCHAR FontData[256 * 13] = -{
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 0
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 13
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 26
- 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 39
- 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 52
- 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 65
- 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 78
- 0x10, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 91
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x10, 0x10, // 104
- 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 117
- 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 130
- 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 143
- 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 156
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x10, // 169
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 182
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 195
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 208
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 221
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 234
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 247
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 260
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 273
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 286
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 299
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 312
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 325
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 338
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 351
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 364
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 377
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 390
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 403
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 416
- 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, // 429
- 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 442
- 0x00, 0x14, 0x14, 0x14, 0x7F, 0x28, 0xFE, 0x50, 0x50, 0x50, 0x00,
0x00, 0x00, // 455
- 0x10, 0x3C, 0x50, 0x50, 0x70, 0x38, 0x1C, 0x14, 0x14, 0x78, 0x10,
0x00, 0x00, // 468
- 0x00, 0x61, 0x92, 0x94, 0x68, 0x18, 0x16, 0x29, 0x49, 0x86, 0x00,
0x00, 0x00, // 481
- 0x00, 0x18, 0x24, 0x24, 0x38, 0x71, 0x89, 0x8E, 0xC6, 0x7E, 0x00,
0x00, 0x00, // 494
- 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 507
- 0x06, 0x08, 0x10, 0x30, 0x20, 0x20, 0x20, 0x20, 0x30, 0x10, 0x08,
0x06, 0x00, // 520
- 0x60, 0x10, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x10,
0x60, 0x00, // 533
- 0x00, 0x10, 0x52, 0x24, 0x3C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 546
- 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, // 559
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10,
0x20, 0x00, // 572
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 585
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00,
0x00, 0x00, // 598
- 0x01, 0x02, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x40,
0x80, 0x00, // 611
- 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x3C, 0x00,
0x00, 0x00, // 624
- 0x00, 0x30, 0xD0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x00,
0x00, 0x00, // 637
- 0x00, 0x78, 0x04, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7C, 0x00,
0x00, 0x00, // 650
- 0x00, 0x78, 0x04, 0x04, 0x08, 0x30, 0x0C, 0x04, 0x04, 0x78, 0x00,
0x00, 0x00, // 663
- 0x00, 0x08, 0x18, 0x28, 0x28, 0x48, 0x88, 0xFC, 0x08, 0x08, 0x00,
0x00, 0x00, // 676
- 0x00, 0x3C, 0x20, 0x20, 0x38, 0x04, 0x04, 0x04, 0x04, 0x38, 0x00,
0x00, 0x00, // 689
- 0x00, 0x1C, 0x20, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x22, 0x1C, 0x00,
0x00, 0x00, // 702
- 0x00, 0x7E, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00,
0x00, 0x00, // 715
- 0x00, 0x3C, 0x42, 0x42, 0x24, 0x3C, 0x46, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 728
- 0x00, 0x38, 0x44, 0x42, 0x42, 0x46, 0x3A, 0x02, 0x04, 0x38, 0x00,
0x00, 0x00, // 741
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
0x00, 0x00, // 754
- 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10,
0x20, 0x00, // 767
- 0x00, 0x00, 0x00, 0x02, 0x0C, 0x10, 0x60, 0x10, 0x0C, 0x02, 0x00,
0x00, 0x00, // 780
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00,
0x00, 0x00, // 793
- 0x00, 0x00, 0x00, 0x40, 0x30, 0x08, 0x06, 0x08, 0x30, 0x40, 0x00,
0x00, 0x00, // 806
- 0x00, 0x7C, 0x42, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, // 819
- 0x00, 0x3C, 0x62, 0xDE, 0xB2, 0xA2, 0xA6, 0x9B, 0x44, 0x3C, 0x00,
0x00, 0x00, // 832
- 0x00, 0x00, 0x18, 0x18, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x81, 0x00,
0x00, 0x00, // 845
- 0x00, 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x42, 0x42, 0x42, 0x7C, 0x00,
0x00, 0x00, // 858
- 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x3E, 0x00,
0x00, 0x00, // 871
- 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x42, 0x42, 0x44, 0x78, 0x00,
0x00, 0x00, // 884
- 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x7E, 0x00,
0x00, 0x00, // 897
- 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, // 910
- 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x8E, 0x82, 0x42, 0x3E, 0x00,
0x00, 0x00, // 923
- 0x00, 0x00, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x00,
0x00, 0x00, // 936
- 0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00,
0x00, 0x00, // 949
- 0x00, 0x00, 0x3C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x78, 0x00,
0x00, 0x00, // 962
- 0x00, 0x00, 0x42, 0x44, 0x48, 0x70, 0x50, 0x48, 0x44, 0x42, 0x00,
0x00, 0x00, // 975
- 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7E, 0x00,
0x00, 0x00, // 988
- 0x00, 0x00, 0xC6, 0xC6, 0xAA, 0xAA, 0xAA, 0x92, 0x82, 0x82, 0x00,
0x00, 0x00, // 1001
- 0x00, 0x00, 0x42, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x46, 0x42, 0x00,
0x00, 0x00, // 1014
- 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00,
0x00, 0x00, // 1027
- 0x00, 0x00, 0x7C, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, // 1040
- 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x06,
0x03, 0x00, // 1053
- 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x78, 0x48, 0x44, 0x42, 0x00,
0x00, 0x00, // 1066
- 0x00, 0x00, 0x3E, 0x40, 0x40, 0x38, 0x04, 0x02, 0x02, 0x7C, 0x00,
0x00, 0x00, // 1079
- 0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, // 1092
- 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1105
- 0x00, 0x00, 0x81, 0x42, 0x42, 0x44, 0x24, 0x28, 0x38, 0x10, 0x00,
0x00, 0x00, // 1118
- 0x00, 0x00, 0x81, 0x81, 0x92, 0x5A, 0x5A, 0x6A, 0x66, 0x24, 0x00,
0x00, 0x00, // 1131
- 0x00, 0x00, 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, 0x00,
0x00, 0x00, // 1144
- 0x00, 0x00, 0x82, 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, // 1157
- 0x00, 0x00, 0xFE, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0xFE, 0x00,
0x00, 0x00, // 1170
- 0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x1E, 0x00, // 1183
- 0x80, 0x40, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x02, 0x02,
0x01, 0x00, // 1196
- 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x78, 0x00, // 1209
- 0x00, 0x08, 0x08, 0x18, 0x14, 0x24, 0x24, 0x42, 0x00, 0x00, 0x00,
0x00, 0x00, // 1222
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, // 1235
- 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 1248
- 0x00, 0x00, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1261
- 0x40, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x62, 0x5C, 0x00,
0x00, 0x00, // 1274
- 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x40, 0x40, 0x20, 0x1E, 0x00,
0x00, 0x00, // 1287
- 0x02, 0x02, 0x02, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1300
- 0x00, 0x00, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1313
- 0x1E, 0x20, 0x20, 0xFE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x00, 0x00, // 1326
- 0x00, 0x00, 0x00, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x02,
0x02, 0x3C, // 1339
- 0x40, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,
0x00, 0x00, // 1352
- 0x18, 0x18, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1365
- 0x18, 0x18, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x70, // 1378
- 0x40, 0x40, 0x40, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00,
0x00, 0x00, // 1391
- 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1404
- 0x00, 0x00, 0x00, 0xB6, 0xDA, 0x92, 0x92, 0x92, 0x92, 0x92, 0x00,
0x00, 0x00, // 1417
- 0x00, 0x00, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,
0x00, 0x00, // 1430
- 0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1443
- 0x00, 0x00, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x62, 0x5C, 0x40,
0x40, 0x40, // 1456
- 0x00, 0x00, 0x00, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x02,
0x02, 0x02, // 1469
- 0x00, 0x00, 0x00, 0x5C, 0x64, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, // 1482
- 0x00, 0x00, 0x00, 0x3C, 0x40, 0x60, 0x18, 0x04, 0x04, 0x78, 0x00,
0x00, 0x00, // 1495
- 0x00, 0x00, 0x20, 0xFC, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1C, 0x00,
0x00, 0x00, // 1508
- 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1521
- 0x00, 0x00, 0x00, 0x82, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x00,
0x00, 0x00, // 1534
- 0x00, 0x00, 0x00, 0x81, 0x91, 0x5A, 0x5A, 0x6A, 0x24, 0x24, 0x00,
0x00, 0x00, // 1547
- 0x00, 0x00, 0x00, 0x42, 0x24, 0x18, 0x18, 0x18, 0x24, 0x42, 0x00,
0x00, 0x00, // 1560
- 0x00, 0x00, 0x00, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x10,
0x30, 0xE0, // 1573
- 0x00, 0x00, 0x00, 0x7E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x00,
0x00, 0x00, // 1586
- 0x1C, 0x10, 0x10, 0x10, 0x10, 0x60, 0x10, 0x10, 0x10, 0x10, 0x10,
0x0C, 0x00, // 1599
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x00, // 1612
- 0x30, 0x08, 0x08, 0x08, 0x08, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08,
0x30, 0x00, // 1625
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, // 1638
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 1651
- 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x3E, 0x04,
0x02, 0x06, // 1664
- 0x00, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1677
- 0x08, 0x10, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1690
- 0x18, 0x24, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1703
- 0x00, 0x24, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1716
- 0x10, 0x08, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1729
- 0x10, 0x28, 0x10, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1742
- 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x40, 0x40, 0x20, 0x1E, 0x08,
0x04, 0x0C, // 1755
- 0x18, 0x24, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1768
- 0x00, 0x12, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1781
- 0x10, 0x08, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1794
- 0x00, 0x24, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1807
- 0x18, 0x24, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1820
- 0x10, 0x08, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1833
- 0x24, 0x00, 0x18, 0x18, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x81, 0x00,
0x00, 0x00, // 1846
- 0x10, 0x28, 0x10, 0x28, 0x28, 0x24, 0x44, 0x7E, 0x42, 0x81, 0x00,
0x00, 0x00, // 1859
- 0x08, 0x10, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x7E, 0x00,
0x00, 0x00, // 1872
- 0x00, 0x00, 0x00, 0xFC, 0x12, 0x12, 0x7E, 0x90, 0x90, 0x6E, 0x00,
0x00, 0x00, // 1885
- 0x00, 0x00, 0x0F, 0x18, 0x18, 0x28, 0x2E, 0x78, 0x48, 0x8F, 0x00,
0x00, 0x00, // 1898
- 0x18, 0x24, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1911
- 0x00, 0x24, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1924
- 0x20, 0x10, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1937
- 0x18, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1950
- 0x20, 0x10, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1963
- 0x00, 0x24, 0x00, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x10,
0x30, 0xE0, // 1976
- 0x24, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00,
0x00, 0x00, // 1989
- 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 2002
- 0x00, 0x08, 0x1C, 0x28, 0x48, 0x48, 0x48, 0x68, 0x1C, 0x08, 0x00,
0x00, 0x00, // 2015
- 0x00, 0x0E, 0x10, 0x10, 0x10, 0x38, 0x10, 0x10, 0x20, 0x3E, 0x00,
0x00, 0x00, // 2028
- 0x00, 0x81, 0x42, 0x24, 0x18, 0x7C, 0x10, 0x7C, 0x10, 0x10, 0x00,
0x00, 0x00, // 2041
- 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x96, 0xBC, 0x94, 0x92, 0x9E, 0x00,
0x00, 0x00, // 2054
- 0x0E, 0x10, 0x10, 0x3C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0xE0, // 2067
- 0x08, 0x10, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 2080
- 0x08, 0x10, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 2093
- 0x08, 0x10, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 2106
- 0x08, 0x10, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 2119
- 0x14, 0x28, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,
0x00, 0x00, // 2132
- 0x14, 0x28, 0x42, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x46, 0x42, 0x00,
0x00, 0x00, // 2145
- 0x00, 0x78, 0x08, 0x38, 0x48, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2158
- 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2171
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x42,
0x3E, 0x00, // 2184
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x40, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, // 2197
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, // 2210
- 0x00, 0xC4, 0x48, 0x48, 0x50, 0x37, 0x21, 0x43, 0x44, 0x87, 0x00,
0x00, 0x00, // 2223
- 0x00, 0xC4, 0x48, 0x48, 0x50, 0x22, 0x26, 0x4A, 0x4F, 0x82, 0x00,
0x00, 0x00, // 2236
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x00, // 2249
- 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x48, 0x24, 0x12, 0x00, 0x00,
0x00, 0x00, // 2262
- 0x00, 0x00, 0x00, 0x00, 0x48, 0x24, 0x12, 0x24, 0x48, 0x00, 0x00,
0x00, 0x00, // 2275
- 0x94, 0x00, 0x00, 0x94, 0x00, 0x94, 0x00, 0x00, 0x94, 0x00, 0x94,
0x00, 0x00, // 2288
- 0x49, 0x94, 0x00, 0x49, 0x94, 0x49, 0x00, 0x94, 0x49, 0x94, 0x49,
0x00, 0x94, // 2301
- 0xFF, 0x94, 0x94, 0xFF, 0x94, 0xFF, 0x94, 0x94, 0xFF, 0x94, 0xFF,
0x94, 0x94, // 2314
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2327
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2340
- 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x10,
0x10, 0x10, // 2353
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2366
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2379
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x10,
0x10, 0x10, // 2392
- 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x14, 0x14, 0x14,
0x14, 0x14, // 2405
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2418
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x14,
0x14, 0x14, // 2431
- 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x00, // 2444
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2457
- 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, // 2470
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2483
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2496
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2509
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2522
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2535
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2548
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2561
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x10,
0x10, 0x10, // 2574
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2587
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, // 2600
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x14, 0x14, 0x14,
0x14, 0x14, // 2613
- 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, // 2626
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, 0x14,
0x14, 0x14, // 2639
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0x14,
0x14, 0x14, // 2652
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, // 2665
- 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14,
0x14, 0x14, // 2678
- 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, // 2691
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2704
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0x10,
0x10, 0x10, // 2717
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2730
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2743
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, // 2756
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x10,
0x10, 0x10, // 2769
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2782
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2795
- 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0x10, 0x10,
0x10, 0x10, // 2808
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2821
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2834
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, // 2847
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, // 2860
- 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0xF0, 0xF0, // 2873
- 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, // 2886
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2899
- 0x00, 0x00, 0x00, 0x31, 0x49, 0x86, 0x84, 0x84, 0x8A, 0x71, 0x00,
0x00, 0x00, // 2912
- 0x38, 0x48, 0x48, 0x50, 0x50, 0x58, 0x44, 0x42, 0x42, 0x5C, 0x00,
0x00, 0x00, // 2925
- 0x00, 0x00, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x00, 0x00, // 2938
- 0x00, 0x00, 0x00, 0x7F, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00,
0x00, 0x00, // 2951
- 0x00, 0x00, 0xFF, 0x40, 0x20, 0x10, 0x10, 0x20, 0x40, 0xFF, 0x00,
0x00, 0x00, // 2964
- 0x00, 0x00, 0x00, 0x7F, 0x84, 0x84, 0x84, 0x84, 0x84, 0x78, 0x00,
0x00, 0x00, // 2977
- 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x66, 0x5A, 0x40,
0x40, 0x40, // 2990
- 0x00, 0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, // 3003
- 0x00, 0x00, 0x10, 0x7C, 0x92, 0x92, 0x92, 0x92, 0x7C, 0x10, 0x00,
0x00, 0x00, // 3016
- 0x00, 0x00, 0x38, 0x44, 0x82, 0xBA, 0x82, 0x82, 0x44, 0x38, 0x00,
0x00, 0x00, // 3029
- 0x00, 0x00, 0x7C, 0xC6, 0x82, 0x82, 0x82, 0x84, 0x44, 0xEE, 0x00,
0x00, 0x00, // 3042
- 0x38, 0x40, 0x60, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 3055
- 0x00, 0x00, 0x00, 0x00, 0x66, 0x99, 0x99, 0x99, 0x66, 0x00, 0x00,
0x00, 0x00, // 3068
- 0x10, 0x10, 0x10, 0x7C, 0x92, 0x91, 0x91, 0x91, 0x92, 0x7C, 0x10,
0x10, 0x10, // 3081
- 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x7C, 0x40, 0x60, 0x1E, 0x00,
0x00, 0x00, // 3094
- 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00,
0x00, 0x00, // 3107
- 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00,
0x00, 0x00, // 3120
- 0x00, 0x00, 0x00, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x00, 0xFE, 0x00,
0x00, 0x00, // 3133
- 0x00, 0x00, 0x40, 0x30, 0x08, 0x06, 0x08, 0x30, 0x40, 0x00, 0x7E,
0x00, 0x00, // 3146
- 0x00, 0x00, 0x02, 0x0C, 0x10, 0x60, 0x10, 0x0C, 0x02, 0x00, 0x7E,
0x00, 0x00, // 3159
- 0x0C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 3172
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x60, // 3185
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, // 3198
- 0x00, 0x00, 0x00, 0x00, 0x72, 0x4E, 0x00, 0x72, 0x4E, 0x00, 0x00,
0x00, 0x00, // 3211
- 0x00, 0x10, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 3224
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, // 3237
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, // 3250
- 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0xC4, 0x28, 0x28, 0x18,
0x10, 0x00, // 3263
- 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 3276
- 0x00, 0x3C, 0x04, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 3289
- 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, // 3302
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00 // 3315
-};
Modified: branches/olpc/drivers/base/bootvid/bootvid.c URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi...
============================================================================ ==
--- branches/olpc/drivers/base/bootvid/bootvid.c (original) +++ branches/olpc/drivers/base/bootvid/bootvid.c Fri Jun 15 14:58:37 2007 @@ -1,475 +1,290 @@ -#include "precomp.h"
-/* PRIVATE FUNCTIONS
*********************************************************/
-BOOLEAN -NTAPI -VgaInterpretCmdStream(IN PUSHORT CmdStream) -{
- PUCHAR Base = (PUCHAR)VgaRegisterBase;
- USHORT Cmd;
- UCHAR Major, Minor;
- USHORT Count;
- UCHAR Index;
- PUSHORT Buffer;
- PUSHORT ShortPort;
- PUCHAR Port;
- UCHAR Value;
- USHORT ShortValue;
- /* First make sure that we have a Command Stream */
- if (!CmdStream) return TRUE;
- /* Loop as long as we have commands */
- while (*CmdStream)
- {
/* Get the Major and Minor Function */Cmd = *CmdStream;Major = Cmd & 0xF0;Minor = Cmd & 0x0F;/* Move to the next command */CmdStream++;/* Check which major function this was */if (Major == 0x10){/* Now let's see the minor function */if (Minor & CMD_STREAM_READ){/* Now check the sub-type */if (Minor & CMD_STREAM_USHORT){/* The port is what is in the stream right now */ShortPort = UlongToPtr((ULONG)*CmdStream);/* Move to the next command */CmdStream++;/* Read USHORT from the port */READ_PORT_USHORT(PtrToUlong(Base) + ShortPort);}else{/* The port is what is in the stream right now */Port = UlongToPtr((ULONG)*CmdStream);/* Move to the next command */CmdStream++;/* Read UCHAR from the port */READ_PORT_UCHAR(PtrToUlong(Base) + Port);}}else if (Minor & CMD_STREAM_WRITE_ARRAY){/* Now check the sub-type */if (Minor & CMD_STREAM_USHORT){/* The port is what is in the stream right now */ShortPort = UlongToPtr(Cmd);/* Move to the next command and get the count */Count = *(CmdStream++);/* The buffer is what's next in the command stream */Buffer = CmdStream++;/* Write USHORT to the port */WRITE_PORT_BUFFER_USHORT(PtrToUshort(Base) +
ShortPort, Buffer, Count);
/* Move past the buffer in the command stream */CmdStream += Count;}else{/* The port is what is in the stream right now */Port = UlongToPtr(Cmd);/* Move to the next command and get the count */Count = *(CmdStream++);/* Add the base to the port */Port = PtrToUlong(Port) + Base;/* Move to next command */CmdStream++;/* Loop the cmd array */for (; Count; Count--, CmdStream++){/* Get the byte we're writing */Value = (UCHAR)*CmdStream;/* Write UCHAR to the port */WRITE_PORT_UCHAR(Port, Value);}}}else if (Minor & CMD_STREAM_USHORT){/* Get the ushort we're writing and advance in the stream
*/
ShortValue = *CmdStream;CmdStream++;/* Write USHORT to the port (which is in cmd) */WRITE_PORT_USHORT((PUSHORT)Base + Cmd, ShortValue);}else{/* The port is what is in the stream right now */Port = UlongToPtr((ULONG)*CmdStream);/* Get the uchar we're writing */Value = (UCHAR)*++CmdStream;/* Move to the next command */CmdStream++;/* Write UCHAR to the port (which is in cmd) */WRITE_PORT_UCHAR(PtrToUlong(Base) + Port, Value);}}else if (Major == 0x20){/* Check the minor function. Note these are not flags
anymore. */
switch (Minor){case 0:/* The port is what is in the stream right now */ShortPort = UlongToPtr(*CmdStream);/* Move to the next command and get the count */Count = *(CmdStream++);/* Move to the next command and get the value to
write */
ShortValue = *(CmdStream++);/* Add the base to the port */ShortPort = PtrToUlong(ShortPort) + (PUSHORT)Base;/* Move to next command */CmdStream++;/* Make sure we have data */if (!ShortValue) continue;/* Loop the cmd array */for (; Count; Count--, CmdStream++, Value++){/* Get the byte we're writing */ShortValue += (*CmdStream) << 8;/* Write USHORT to the port */WRITE_PORT_USHORT(ShortPort, ShortValue);}break;case 1:/* The port is what is in the stream right now. Add
the base too */
Port = *CmdStream + Base;/* Move to the next command and get the count */Count = *++CmdStream;/* Move to the next command and get the index to
write */
Index = (UCHAR)*++CmdStream;/* Move to next command */CmdStream++;/* Loop the cmd array */for (; Count; Count--, Index++){/* Write the index */WRITE_PORT_UCHAR(Port, Index);/* Get the byte we're writing */Value = (UCHAR)*CmdStream;/* Move to next command */CmdStream++;/* Write UCHAR value to the port */WRITE_PORT_UCHAR(Port, Value);}break;case 2:/* The port is what is in the stream right now. Add
the base too */
Port = *CmdStream + Base;/* Read the current value and add the stream data */Value = READ_PORT_UCHAR(Port);Value &= *CmdStream++;Value ^= *CmdStream++;/* Write the value */WRITE_PORT_UCHAR(Port, Value);break;default:/* Unknown command, fail */return FALSE;}}else if (Major != 0xF0){/* Unknown major function, fail */return FALSE;}/* Get the next command */Cmd = *CmdStream;- }
- /* If we got here, return success */
- return TRUE;
-}
-BOOLEAN -NTAPI -VgaIsPresent(VOID) -{
- UCHAR VgaReg, VgaReg2, VgaReg3;
- UCHAR SeqReg, SeqReg2;
- UCHAR i;
- /* Read the VGA Address Register */
- VgaReg = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE);
- /* Select Read Map Select Register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);
- /* Read it back...it should be 4 */
- if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE)) & 0xF) != 4)
return FALSE;
- /* Read the VGA Data Register */
- VgaReg2 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF);
- /* Enable all planes */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 3);
- /* Read it back...it should be 3 */
- if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != 0x3)
- {
/* Reset the registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);return FALSE;- }
- /* Select Bit Mask Register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
- /* Read it back...it should be 8 */
- if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE)) & 0xF) != 8)
- {
/* Reset the registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);return FALSE;- }
- /* Read the VGA Data Register */
- VgaReg3 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF);
- /* Loop bitmasks */
- for (i = 0xBB; i; i >>= 1)
- {
/* Set bitmask */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, i);/* Read it back...it should be the same */if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != i){/* Reset the registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0xFF);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);return FALSE;}- }
- /* Select Read Map Select Register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);
- /* Read it back...it should be 3 */
- if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != 3)
- {
/* Reset the registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0xFF);return FALSE;- }
- /* Write the registers we read earlier */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, VgaReg);
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, VgaReg2);
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, VgaReg3);
- /* Read sequencer address */
- SeqReg = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4);
- /* Select memory mode register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4, 4);
- /* Read it back...it should still be 4 */
- if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4)) & 7) != 4)
- {
/* Fail */return FALSE;- }
- /* Read sequencer Data */
- SeqReg2 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5);
- /* Write null plane */
- WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x100);
- /* Write sequencer flag */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, SeqReg2 ^ 8);
- /* Read it back */
- if ((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5)) != (SeqReg2 ^
8))
- {
/* Not the same value...restore registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, 2);WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x300);return FALSE;- }
- /* Now write the registers we read */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, SeqReg2);
- WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x300);
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4, SeqReg);
- /* VGA is present! */
- return TRUE;
-}
-/* PUBLIC FUNCTIONS
**********************************************************/
/*
- @implemented
- ReactOS Boot video driver
- Copyright (C) 2003 Casper S. Hornstroup
- Copyright (C) 2004, 2005 Filip Navara
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
*/
- $Id$
-BOOLEAN -NTAPI -VidInitialize(IN BOOLEAN SetMode) -{
- ULONG Context = 0;
- PHYSICAL_ADDRESS TranslatedAddress;
- PHYSICAL_ADDRESS NullAddress = {{0}};
- ULONG AddressSpace = 1;
- BOOLEAN Result;
- ULONG_PTR Base;
- /* Make sure that we have a bus translation function */
- if (!HalFindBusAddressTranslation) return FALSE;
- /* Get the VGA Register address */
- Result = HalFindBusAddressTranslation(NullAddress,
&AddressSpace,&TranslatedAddress,&Context,TRUE);- if (!Result) return FALSE;
- /* See if this is I/O Space, which we need to map */
-TryAgain:
- if (!AddressSpace)
- {
/* Map it */Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, 0x400,
MmNonCached);
- }
- else
- {
/* The base is the translated address, no need to map I/O space
*/
Base = TranslatedAddress.LowPart;- }
- /* Set the VGA Register base and now check if we have a VGA device */
- VgaRegisterBase = Base;
- if (VgaIsPresent())
- {
/* Translate the VGA Memory Address */NullAddress.LowPart = 0xA0000;AddressSpace = 0;Result = HalFindBusAddressTranslation(NullAddress,&AddressSpace,&TranslatedAddress,&Context,FALSE);if (Result){/* Success! See if this is I/O Space, which we need to map */if (!AddressSpace){/* Map it */Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress,0x20000,MmNonCached);}else{/* The base is the translated address, no need to map I/O
space */
Base = TranslatedAddress.LowPart;}/* Set the VGA Memory Base */VgaBase = Base;/* Now check if we have to set the mode */if (SetMode){//// Reset the display////HalResetDisplay();curr_x = 0;curr_y = 0;/* Initialize it */VgaInterpretCmdStream(AT_Initialization);return TRUE;}}- }
- else
- {
/* It's not, so unmap the I/O space if we mapped it */if (!AddressSpace) MmUnmapIoSpace((PVOID)VgaRegisterBase, 0x400);- }
- /* If we got here, then we failed...let's try again */
- Result = HalFindBusAddressTranslation(NullAddress,
&AddressSpace,&TranslatedAddress,&Context,TRUE);- if (Result) goto TryAgain;
- /* If we got here, then we failed even past our re-try... */
- return FALSE;
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidResetDisplay(IN BOOLEAN HalReset) -{
- /* Clear the current position */
- curr_x = 0;
- curr_y = 0;
- /* Clear the screen with HAL if we were asked to */
- //if (HalReset) HalResetDisplay();
- /* Re-initialize the VGA Display */
- VgaInterpretCmdStream(AT_Initialization);
- /* Re-initialize the palette and fill the screen black */
- InitializePalette();
- VidSolidColorFill(0, 0, 639, 479, 0);
-}
+/* INCLUDES
******************************************************************/
+#include "bootvid.h" +#include "resource.h"
+#define NDEBUG +#include <debug.h>
+//#define USE_PROGRESS_BAR
+/* GLOBALS
*******************************************************************/
+static volatile LONG ShutdownNotify; +static KEVENT ShutdownCompleteEvent;
+/* DATA
**********************************************************************/
+static RGBQUAD _MainPalette[16]; +static UCHAR _Square1[9 * 4]; +static UCHAR _Square2[9 * 4]; +static UCHAR _Square3[9 * 4];
+/* FUNCTIONS
*****************************************************************/
+static VOID NTAPI +BootVidAnimationThread(PVOID Ignored) +{
- UCHAR PaletteBitmapBuffer[sizeof(BITMAPINFOHEADER) +
sizeof(_MainPalette)];
- PBITMAPINFOHEADER PaletteBitmap =
(PBITMAPINFOHEADER)PaletteBitmapBuffer;
- LPRGBQUAD Palette = (LPRGBQUAD)(PaletteBitmapBuffer +
sizeof(BITMAPINFOHEADER));
- ULONG Iteration, Index, ClrUsed;
- UINT AnimBarPos;
- LARGE_INTEGER Interval;
- /*
- Build a bitmap containing the fade in palette. The palette entries
- are then processed in a loop and set using VidBitBlt function.
- */
- ClrUsed = sizeof(_MainPalette) / sizeof(_MainPalette[0]);
- RtlZeroMemory(PaletteBitmap, sizeof(BITMAPINFOHEADER));
- PaletteBitmap->biSize = sizeof(BITMAPINFOHEADER);
- PaletteBitmap->biBitCount = 4;
- PaletteBitmap->biClrUsed = ClrUsed;
- /*
- Main animation loop.
- */
- for (Iteration = 0, AnimBarPos = 0; !ShutdownNotify; Iteration++)
- {
if (Iteration <= PALETTE_FADE_STEPS){for (Index = 0; Index < ClrUsed; Index++){Palette[Index].rgbRed =_MainPalette[Index].rgbRed * Iteration /
PALETTE_FADE_STEPS;
Palette[Index].rgbGreen =_MainPalette[Index].rgbGreen * Iteration /
PALETTE_FADE_STEPS;
Palette[Index].rgbBlue =_MainPalette[Index].rgbBlue * Iteration /
PALETTE_FADE_STEPS;
}VidBitBlt(PaletteBitmapBuffer, 0, 0);}+#ifdef USE_PROGRESS_BAR
else{break;}Interval.QuadPart = -PALETTE_FADE_TIME;+#else
+#if 0
if (AnimBarPos == 0){VidSolidColorFill(0x173, 354, 0x178, 354 + 9, 0);}else if (AnimBarPos > 3){VidSolidColorFill(0xe3 + AnimBarPos * 8, 354,0xe8 + AnimBarPos * 8, 354 + 9,0);}if (AnimBarPos >= 3){VidBufferToScreenBlt(_Square1, 0xeb + AnimBarPos * 8, 354, 6, 9,
4);
}if (AnimBarPos >= 2 && AnimBarPos <= 16){VidBufferToScreenBlt(_Square2, 0xf3 + AnimBarPos * 8, 354, 6, 9,
4);
}if (AnimBarPos >= 1 && AnimBarPos <= 15){VidBufferToScreenBlt(_Square3, 0xfb + AnimBarPos * 8, 354, 6, 9,
4);
}+#endif
if (Iteration <= PALETTE_FADE_STEPS){Interval.QuadPart = -PALETTE_FADE_TIME;if ((Iteration % 5) == 0)AnimBarPos++;}else{Interval.QuadPart = -PALETTE_FADE_TIME * 5;AnimBarPos++;}AnimBarPos = Iteration % 18;+#endif
/* Wait for a bit. */KeDelayExecutionThread(KernelMode, FALSE, &Interval);- }
- DPRINT("Finishing bootvid thread.\n");
- KeSetEvent(&ShutdownCompleteEvent, 0, FALSE);
- PsTerminateSystemThread(0);
+}
+NTSTATUS NTAPI +BootVidDisplayBootLogo(PVOID ImageBase) +{
- PBITMAPINFOHEADER BitmapInfoHeader;
- LPRGBQUAD Palette;
- static const ULONG BitmapIds[2] = {IDB_BOOTIMAGE, IDB_BAR};
- PUCHAR BitmapData[2];
- ULONG Index;
- HANDLE BitmapThreadHandle;
- CLIENT_ID BitmapThreadId;
- NTSTATUS Status;
- KeInitializeEvent(&ShutdownCompleteEvent, NotificationEvent, FALSE);
- /*
- Get the bitmaps from the executable.
- */
- for (Index = 0; Index < sizeof(BitmapIds) / sizeof(BitmapIds[0]);
Index++)
- {
PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry;LDR_RESOURCE_INFO ResourceInfo;ULONG Size;ResourceInfo.Type = /* RT_BITMAP */ 2;ResourceInfo.Name = BitmapIds[Index];ResourceInfo.Language = 0x09;Status = LdrFindResource_U(ImageBase,&ResourceInfo,RESOURCE_DATA_LEVEL,&ResourceDataEntry);if (!NT_SUCCESS(Status)){DPRINT("LdrFindResource_U() failed with status 0x%.08x\n",
Status);
return Status;}Status = LdrAccessResource(ImageBase,ResourceDataEntry,(PVOID*)&BitmapData[Index],&Size);if (!NT_SUCCESS(Status)){DPRINT("LdrAccessResource() failed with status 0x%.08x\n",
Status);
return Status;}- }
- /*
- Initialize the graphics output.
- */
- if (!VidInitialize(TRUE))
- {
return STATUS_UNSUCCESSFUL;- }
- /*
- Load the bar bitmap and get the square data from it.
- */
- VidBitBlt(BitmapData[1], 0, 0);
- VidScreenToBufferBlt(_Square1, 0, 0, 6, 9, 4);
- VidScreenToBufferBlt(_Square2, 8, 0, 6, 9, 4);
- VidScreenToBufferBlt(_Square3, 16, 0, 6, 9, 4);
- /*
- Save the main image palette and replace it with black palette, so
- we can do fade in effect later.
- */
- BitmapInfoHeader = (PBITMAPINFOHEADER)BitmapData[0];
- Palette = (LPRGBQUAD)(BitmapData[0] + BitmapInfoHeader->biSize);
- RtlCopyMemory(_MainPalette, Palette, sizeof(_MainPalette));
- RtlZeroMemory(Palette, sizeof(_MainPalette));
- /*
- Display the main image.
- */
- VidBitBlt(BitmapData[0], 0, 0);
- /*
- Start a thread that handles the fade in and bar animation effects.
- */
- Status = PsCreateSystemThread(
&BitmapThreadHandle,THREAD_ALL_ACCESS,NULL,NULL,&BitmapThreadId,BootVidAnimationThread,NULL);- if (!NT_SUCCESS(Status))
- {
VidCleanUp();return Status;- }
- ZwClose(BitmapThreadHandle);
- return STATUS_SUCCESS;
+}
+VOID NTAPI +BootVidUpdateProgress(ULONG Progress) +{ +#ifdef USE_PROGRESS_BAR
- if (ShutdownNotify == 0)
- {
VidSolidColorFill(0x103, 354, 0x103 + (Progress * 120 / 100), 354 +
9, 1);
- }
+#endif +}
+VOID NTAPI +BootVidFinalizeBootLogo(VOID) +{
- InterlockedIncrement(&ShutdownNotify);
- DPRINT1("Waiting for bootvid thread to finish.\n");
- KeWaitForSingleObject(&ShutdownCompleteEvent, Executive, KernelMode,
FALSE, NULL);- DPRINT1("Bootvid thread to finish.\n");
- //VidResetDisplay();
+}
+NTSTATUS STDCALL +DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) +{
- return STATUS_SUCCESS;
+}
Propchange: branches/olpc/drivers/base/bootvid/bootvid.c
----
--- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.def URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi...
============================================================================ ==
--- branches/olpc/drivers/base/bootvid/bootvid.def (original) +++ branches/olpc/drivers/base/bootvid/bootvid.def Fri Jun 15 14:58:37
2007
@@ -1,15 +1,14 @@ -LIBRARY BOOTVID.DLL +LIBRARY bootvid.sys
EXPORTS -VidBitBlt@12 -VidBufferToScreenBlt@24 -VidCleanUp@0 -VidDisplayString@4 -VidDisplayStringXY -VidInitialize@4 -VidResetDisplay@4 -VidScreenToBufferBlt@24 -VidSetScrollRegion@16 -VidSetTextColor@4 -VidSolidColorFill@20
+VidInitialize +VidCleanUp +VidResetDisplay +VidBufferToScreenBlt +VidScreenToBufferBlt +VidBitBlt +VidSolidColorFill +VidDisplayString +BootVidDisplayBootLogo +BootVidUpdateProgress +BootVidFinalizeBootLogo
Propchange: branches/olpc/drivers/base/bootvid/bootvid.def
----
--- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.rbuild URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi...
============================================================================ ==
--- branches/olpc/drivers/base/bootvid/bootvid.rbuild (original) +++ branches/olpc/drivers/base/bootvid/bootvid.rbuild Fri Jun 15 14:58:37
2007
@@ -2,11 +2,13 @@ <importlibrary definition="bootvid.def"></importlibrary>
<bootstrap base="$(CDOUTPUT)" nameoncd="bootvid.dll" /> <include base="bootvid">.</include> - <define name="__USE_W32API" /> + <define name="__USE_W32API" /> <library>ntoskrnl</library> <library>hal</library> <file>bootvid.c</file> - <file>bootdata.c</file> - <file>vga.c</file> + <file>vid.c</file> + <file>vid_vga.c</file> + <file>vid_vgatext.c</file> + <file>vid_xbox.c</file> <file>bootvid.rc</file> -</module> +</module>
Propchange: branches/olpc/drivers/base/bootvid/bootvid.rbuild
----
--- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.rc URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi...
============================================================================ ==
--- branches/olpc/drivers/base/bootvid/bootvid.rc (original) +++ branches/olpc/drivers/base/bootvid/bootvid.rc Fri Jun 15 14:58:37 2007 @@ -3,8 +3,12 @@ #include "resource.h"
#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "VGA Boot Driver\0" -#define REACTOS_STR_INTERNAL_NAME "bootvid.dll\0" -#define REACTOS_STR_ORIGINAL_FILENAME "bootvid.dll\0" +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Boot Video\0" +#define REACTOS_STR_INTERNAL_NAME "bootvid\0" +#define REACTOS_STR_ORIGINAL_FILENAME "bootvid.sys\0" +#include <reactos/version.rc>
-#include <reactos/version.rc> +IDB_BOOTIMAGE BITMAP DISCARDABLE "bootimage.bmp" +IDB_BAR BITMAP DISCARDABLE "bar.bmp"
Propchange: branches/olpc/drivers/base/bootvid/bootvid.rc
----
--- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Removed: branches/olpc/drivers/base/bootvid/precomp.h URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/precom...
============================================================================ ==
--- branches/olpc/drivers/base/bootvid/precomp.h (original) +++ branches/olpc/drivers/base/bootvid/precomp.h (removed) @@ -1,46 +1,0 @@ -#include "ntddk.h" -#include "arc/arc.h" -#include "halfuncs.h" -#include "drivers/bootvid/bootvid.h"
-// -// Command Stream Definitions -// -#define CMD_STREAM_WRITE 0x0 -#define CMD_STREAM_WRITE_ARRAY 0x2 -#define CMD_STREAM_USHORT 0x4 -#define CMD_STREAM_READ 0x8
-// -// Bitmap Header -// -typedef struct tagBITMAPINFOHEADER -{
- ULONG biSize;
- LONG biWidth;
- LONG biHeight;
- USHORT biPlanes;
- USHORT biBitCount;
- ULONG biCompression;
- ULONG biSizeImage;
- LONG biXPelsPerMeter;
- LONG biYPelsPerMeter;
- ULONG biClrUsed;
- ULONG biClrImportant;
-} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
-VOID -NTAPI -InitializePalette(
- VOID
-);
-// -// Globals -// -extern USHORT AT_Initialization[]; -extern ULONG curr_x; -extern ULONG curr_y; -extern ULONG_PTR VgaRegisterBase; -extern ULONG_PTR VgaBase; -extern UCHAR FontData[256 * 13];
Removed: branches/olpc/drivers/base/bootvid/vga.c URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/vga.c?...
============================================================================ ==
--- branches/olpc/drivers/base/bootvid/vga.c (original) +++ branches/olpc/drivers/base/bootvid/vga.c (removed) @@ -1,1274 +1,0 @@ -#include "precomp.h"
-/* GLOBALS
*******************************************************************/
-ULONG ScrollRegion[4] = -{
- 0,
- 0,
- 640 - 1,
- 480 - 1
-}; -UCHAR lMaskTable[8] = -{
- (1 << 8) - (1 << 0),
- (1 << 7) - (1 << 0),
- (1 << 6) - (1 << 0),
- (1 << 5) - (1 << 0),
- (1 << 4) - (1 << 0),
- (1 << 3) - (1 << 0),
- (1 << 2) - (1 << 0),
- (1 << 1) - (1 << 0)
-}; -UCHAR rMaskTable[8] = -{
- (1 << 7),
- (1 << 7)+ (1 << 6),
- (1 << 7)+ (1 << 6) + (1 << 5),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2) + (1
<< 1),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2) + (1
<< 1) +
- (1 << 0),
-}; -UCHAR PixelMask[8] = -{
- (1 << 7),
- (1 << 6),
- (1 << 5),
- (1 << 4),
- (1 << 3),
- (1 << 2),
- (1 << 1),
- (1 << 0),
-}; -ULONG lookup[16] = -{
- 0x0000,
- 0x0100,
- 0x1000,
- 0x1100,
- 0x0001,
- 0x0101,
- 0x1001,
- 0x1101,
- 0x0010,
- 0x0110,
- 0x1010,
- 0x1110,
- 0x0011,
- 0x0111,
- 0x1011,
- 0x1111,
-};
-ULONG TextColor = 0xF; -ULONG curr_x = 0; -ULONG curr_y = 0; -BOOLEAN NextLine = FALSE; -ULONG_PTR VgaRegisterBase = 0; -ULONG_PTR VgaBase = 0;
-/* PRIVATE FUNCTIONS
*********************************************************/
-VOID -NTAPI -ReadWriteMode(UCHAR Mode) -{
- UCHAR Value;
- /* Switch to graphics mode register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 5);
- /* Get the current register value, minus the current mode */
- Value = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) & 0xF4;
- /* Set the new mode */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, Mode | Value);
-}
-VOID -NTAPI -__outpb(IN ULONG Port,
IN ULONG Value)-{
- /* Write to the VGA Register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + Port, (UCHAR)Value);
-}
-VOID -NTAPI -__outpw(IN ULONG Port,
IN ULONG Value)-{
- /* Write to the VGA Register */
- WRITE_PORT_USHORT((PUSHORT)(VgaRegisterBase + Port), (USHORT)Value);
-}
-VOID -NTAPI -SetPixel(IN ULONG Left,
IN ULONG Top,IN UCHAR Color)-{
- PUCHAR PixelPosition;
- /* Calculate the pixel position. */
- PixelPosition = (PUCHAR)VgaBase + (Left >> 3) + (Top * 80);
- /* Switch to mode 10 */
- ReadWriteMode(10);
- /* Clear the 4 planes (we're already in unchained mode here) */
- __outpw(0x3C4, 0xF02);
- /* Select the color don't care register */
- __outpw(0x3CE, 7);
- /* Select the bitmask register and write the mask */
- __outpw(0x3CE, (PixelMask[Left & 7] << 8) | 8);
- /* Read the current pixel value and add our color */
- WRITE_REGISTER_UCHAR(PixelPosition,
READ_REGISTER_UCHAR(PixelPosition) & Color);-}
-VOID -NTAPI -DisplayCharacter(CHAR Character,
ULONG Left,ULONG Top,ULONG TextColor,ULONG BackTextColor)-{
- PUCHAR FontChar;
- ULONG i, j, XOffset;
- /* Get the font line for this character */
- FontChar = &FontData[Character * 13 - Top];
- /* Loop each pixel height */
- i = 13;
- do
- {
/* Loop each pixel width */j = 128;XOffset = Left;do{/* Check if we should draw this pixel */if (FontChar[Top] & (UCHAR)j){/* We do, use the given Text Color */SetPixel(XOffset, Top, (UCHAR)TextColor);}else if (BackTextColor < 16){/* This is a background pixel. We're drawing it unless
it's */
/* transparent. */SetPixel(XOffset, Top, (UCHAR)BackTextColor);}/* Increase X Offset */XOffset++;} while (j >>= 1);/* Move to the next Y ordinate */Top++;- } while (--i);
-}
-VOID -NTAPI -DisplayStringXY(PUCHAR String,
ULONG Left,ULONG Top,ULONG TextColor,ULONG BackColor)-{
- /* Loop every character */
- while (*String)
- {
/* Display a character */DisplayCharacter(*String, Left, Top, TextColor, BackColor);/* Move to next character and next position */String++;Left += 8;- }
-}
-VOID -NTAPI -SetPaletteEntryRGB(IN ULONG Id,
IN ULONG Rgb)-{
- PCHAR Colors = (PCHAR)&Rgb;
- /* Set the palette index */
- __outpb(0x3C8, (UCHAR)Id);
- /* Set RGB colors */
- __outpb(0x3C9, Colors[2] >> 2);
- __outpb(0x3C9, Colors[1] >> 2);
- __outpb(0x3C9, Colors[0] >> 2);
-}
-VOID -NTAPI -InitPaletteWithTable(IN PULONG Table,
IN ULONG Count)-{
- ULONG i;
- PULONG Entry = Table;
- /* Loop every entry */
- for (i = 0; i < Count; i++, Entry++)
- {
/* Set the entry */SetPaletteEntryRGB(i, *Entry);- }
-}
-VOID -NTAPI -SetPaletteEntry(IN ULONG Id,
IN ULONG PaletteEntry)-{
- /* Set the palette index */
- __outpb(0x3C8, (UCHAR)Id);
- /* Set RGB colors */
- __outpb(0x3C9, PaletteEntry & 0xFF);
- __outpb(0x3C9, (PaletteEntry >>= 8) & 0xFF);
- __outpb(0x3C9, (PaletteEntry >> 8) & 0xFF);
-}
-VOID -NTAPI -InitializePalette(VOID) -{
- ULONG PaletteEntry[16] = {0,
0x20,0x2000,0x2020,0x200000,0x200020,0x202000,0x202020,0x303030,0x3F,0x3F00,0x3F3F,0x3F0000,0x3F003F,0x3F3F00,0x3F3F3F};- ULONG i;
- /* Loop all the entries and set their palettes */
- for (i = 0; i < 16; i++) SetPaletteEntry(i, PaletteEntry[i]);
-}
-VOID -NTAPI -VgaScroll(ULONG Scroll) -{
- ULONG Top;
- ULONG SourceOffset, DestOffset;
- ULONG Offset;
- ULONG i, j;
- /* Set memory positions of the scroll */
- SourceOffset = VgaBase + (ScrollRegion[1] * 80) + (ScrollRegion[0] >>
3);
- DestOffset = SourceOffset + (Scroll * 80);
- /* Clear the 4 planes */
- __outpw(0x3C4, 0xF02);
- /* Set the bitmask to 0xFF for all 4 planes */
- __outpw(0x3CE, 0xFF08);
- /* Set Mode 1 */
- ReadWriteMode(1);
- /* Save top and check if it's above the bottom */
- Top = ScrollRegion[1];
- if (Top > ScrollRegion[3]) return;
- /* Start loop */
- do
- {
/* Set number of bytes to loop and start offset */Offset = ScrollRegion[0] >> 3;j = SourceOffset;/* Check if this is part of the scroll region */if (Offset <= (ScrollRegion[2] >> 3)){/* Update position */i = DestOffset - SourceOffset;/* Loop the X axis */do{/* Write value in the new position so that we can do the
scroll */
WRITE_REGISTER_UCHAR((PUCHAR)j,READ_REGISTER_UCHAR((PUCHAR)j + i));/* Move to the next memory location to write to */j++;/* Move to the next byte in the region */Offset++;/* Make sure we don't go past the scroll region */} while (Offset <= (ScrollRegion[2] >> 3));}/* Move to the next line */SourceOffset += 80;DestOffset += 80;/* Increase top */Top++;/* Make sure we don't go past the scroll region */- } while (Top <= ScrollRegion[3]);
-}
-VOID -NTAPI -PreserveRow(IN ULONG CurrentTop,
IN ULONG TopDelta,IN BOOLEAN Direction)-{
- PUCHAR Position1, Position2;
- ULONG Count;
- /* Clear the 4 planes */
- __outpw(0x3C4, 0xF02);
- /* Set the bitmask to 0xFF for all 4 planes */
- __outpw(0x3CE, 0xFF08);
- /* Set Mode 1 */
- ReadWriteMode(1);
- /* Check which way we're preserving */
- if (Direction)
- {
/* Calculate the position in memory for the row */Position1 = (PUCHAR)VgaBase + CurrentTop * 80;Position2 = (PUCHAR)VgaBase + 0x9600;- }
- else
- {
/* Calculate the position in memory for the row */Position1 = (PUCHAR)VgaBase + 0x9600;Position2 = (PUCHAR)VgaBase + CurrentTop * 80;- }
- /* Set the count and make sure it's above 0 */
- Count = TopDelta * 80;
- if (Count)
- {
/* Loop every pixel */do{/* Write the data back on the other position */WRITE_REGISTER_UCHAR(Position1,
READ_REGISTER_UCHAR(Position2));
/* Increase both positions */Position2++;Position1++;} while (--Count);- }
-}
-VOID -NTAPI -BitBlt(IN ULONG Left,
IN ULONG Top,IN ULONG Width,IN ULONG Height,IN PUCHAR Buffer,IN ULONG BitsPerPixel,IN ULONG Delta)-{
- ULONG LeftAnd, LeftShifted, LeftPlusOne, LeftPos;
- ULONG lMask, rMask;
- UCHAR NotlMask;
- ULONG Distance;
- ULONG DistanceMinusLeftBpp;
- ULONG SomeYesNoFlag, SomeYesNoFlag2;
- PUCHAR PixelPosition, m;
- PUCHAR i, k;
- ULONG j;
- ULONG x;
- ULONG Plane;
- UCHAR LeftArray[84];
- PUCHAR CurrentLeft;
- PUCHAR l;
- ULONG LoopCount;
- UCHAR pMask, PlaneShift;
- BOOLEAN Odd;
- UCHAR Value;
- /* Check if the buffer isn't 4bpp */
- if (BitsPerPixel != 4)
- {
/* FIXME: TODO */DbgPrint("Unhandled BitBlt\n""%lxx%lx @ (%lx,%lx)\n""Bits Per Pixel %lx\n""Buffer: %p. Delta: %lx\n",Width,Height,Left,Top,BitsPerPixel,Buffer,Delta);return;- }
- /* Get the masks and other values */
- LeftAnd = Left & 0x7;
- lMask = lMaskTable[LeftAnd];
- Distance = Width + Left;
- rMask = rMaskTable[(Distance - 1) & 0x7];
- Left >>= 3;
- /* Set some values */
- SomeYesNoFlag = FALSE;
- SomeYesNoFlag2 = FALSE;
- Distance = (Distance - 1) >> 3;
- DistanceMinusLeftBpp = Distance - Left;
- /* Check if the distance is equal to the left position and add the
masks */
- if (Left == Distance) lMask += rMask;
- /* Check if there's no distance offset */
- if (DistanceMinusLeftBpp)
- {
/* Set the first flag on */SomeYesNoFlag = TRUE;/* Decrease offset and check if we still have one */if (--DistanceMinusLeftBpp){/* Still have a distance offset */SomeYesNoFlag2 = TRUE;}- }
- /* Calculate initial pixel position */
- PixelPosition = (PUCHAR)VgaBase + (Top * 80) + Left;
- /* Set loop buffer variable */
- i = Buffer;
- /* Switch to mode 0 */
- ReadWriteMode(0);
- /* Leave now if the height is 0 */
- if (Height <= 0) return;
- /* Set more weird values */
- CurrentLeft = &LeftArray[Left];
- NotlMask = ~(UCHAR)lMask;
- LeftPlusOne = Left + 1;
- LeftShifted = (lMask << 8) | 8;
- j = Height;
- /* Start the height loop */
- do
- {
/* Start the plane loop */Plane = 0;do{/* Clear the current value */*CurrentLeft = 0;LoopCount = 0;/* Set the buffer loop variable for this loop */k = i;/* Calculate plane shift and pixel mask */PlaneShift = 1 << Plane;pMask = PixelMask[LeftAnd];/* Check if we have a width */if (Width > 0){/* Loop it */l = CurrentLeft;x = Width;do{/* Check if we're odd and increase the loop count */Odd = LoopCount & 1 ? TRUE : FALSE;LoopCount++;if (Odd){/* Check for the plane shift */if (*k & PlaneShift){/* Write the pixel mask */*l |= pMask;}/* Increase buffer position */k++;}else{/* Check for plane shift */if ((*k >> 4) & PlaneShift){/* Write the pixel mask */*l |= pMask;}}/* Shift the pixel mask */pMask >>= 1;if (!pMask){/* Move to the next current left position and
clear it */
l++;*l = 0;/* Set the pixel mask to 0x80 */pMask = 0x80;}} while (--x);}/* Set the plane value */__outpw(0x3C4, (1 << (Plane + 8) | 2));/* Select the bitmask register and write the mask */__outpw(0x3CE, (USHORT)LeftShifted);/* Read the current Pixel value */Value = READ_REGISTER_UCHAR(PixelPosition);/* Add our mask */Value = (Value & NotlMask) | *CurrentLeft;/* Set current left for the loop, and write new pixel value
*/
LeftPos = LeftPlusOne;WRITE_REGISTER_UCHAR(PixelPosition, Value);/* Set loop pixel position and check if we should loop */m = PixelPosition + 1;if (SomeYesNoFlag2){/* Set the bitmask to 0xFF for all 4 planes */__outpw(0x3CE, 0xFF08);/* Check if we have any distance left */if (DistanceMinusLeftBpp > 0){/* Start looping it */x = DistanceMinusLeftBpp;do{/* Write the value */WRITE_REGISTER_UCHAR(m, LeftArray[LeftPos]);/* Go to the next position */m++;LeftPos++;} while (--x);}}/* Check if the first flag is on */if (SomeYesNoFlag){/* Set the mask value */__outpw(0x3CE, (rMask << 8) | 8);/* Read the current Pixel value */Value = READ_REGISTER_UCHAR(m);/* Add our mask */Value = (Value & ~(UCHAR)rMask) | LeftArray[LeftPos];/* Set current left for the loop, and write new pixel
value */
WRITE_REGISTER_UCHAR(m, Value);}} while (++Plane < 4);/* Update pixel position, buffer and height */PixelPosition += 80;i += Delta;- } while (--j);
-}
-VOID -NTAPI -RleBitBlt(IN ULONG Left,
IN ULONG Top,IN ULONG Width,IN ULONG Height,IN PUCHAR Buffer)-{
- ULONG YDelta;
- ULONG x;
- ULONG RleValue, NewRleValue;
- ULONG Color, Color2;
- ULONG i, j;
- ULONG Code;
- /* Set Y height and current X value and start loop */
- YDelta = Top + Height - 1;
- x = Left;
- for (;;)
- {
/* Get the current value and advance in the buffer */RleValue = *Buffer;Buffer++;if (RleValue){/* Check if we've gone past the edge */if ((x + RleValue) > (Width + Left)){/* Fixeup the pixel value */RleValue = Left - x + Width;}/* Get the new value */NewRleValue = *Buffer;/* Get the two colors */Color = NewRleValue >> 4;Color2 = NewRleValue & 0xF;/* Increase buffer positition */Buffer++;/* Check if we need to do a fill */if (Color == Color2){/* Do a fill and continue the loop */RleValue += x;VidSolidColorFill(x, YDelta, RleValue - 1, YDelta,
(UCHAR)Color);
x = RleValue;continue;}/* Check if the pixel value is 1 or below */if (RleValue > 1){/* Set loop variables */i = (RleValue - 2) / 2 + 1;do{/* Set the pixels */SetPixel(x, YDelta, (UCHAR)Color);x++;SetPixel(x, YDelta, (UCHAR)Color2);x++;/* Decrease pixel value */RleValue -= 2;} while (--i);}/* Check if there is any value at all */if (RleValue){/* Set the pixel and increase posititon */SetPixel(x, YDelta, (UCHAR)Color);x++;}/* Start over */continue;}/* Get the current pixel value */RleValue = *Buffer;Code = RleValue;switch (Code){/* Case 0 */case 0:/* Set new x value, decrease distance and restart */x = Left;YDelta--;Buffer++;continue;/* Case 1 */case 1:/* Done */return;/* Case 2 */case 2:/* Set new x value, decrease distance and restart */Buffer++;x += *Buffer;Buffer++;YDelta -= *Buffer;Buffer++;continue;/* Other values */default:Buffer++;break;}/* Check if we've gone past the edge */if ((x + RleValue) > (Width + Left)){/* Set fixed up loop count */i = RleValue - Left - Width + x;/* Fixup pixel value */RleValue -= i;}else{/* Clear loop count */i = 0;}/* Check the value now */if (RleValue > 1){/* Set loop variables */j = (RleValue - 2) / 2 + 1;do{/* Get the new value */NewRleValue = *Buffer;/* Get the two colors */Color = NewRleValue >> 4;Color2 = NewRleValue & 0xF;/* Increase buffer position */Buffer++;/* Set the pixels */SetPixel(x, YDelta, (UCHAR)Color);x++;SetPixel(x, YDelta, (UCHAR)Color2);x++;/* Decrease pixel value */RleValue -= 2;} while (--j);}/* Check if there is any value at all */if (RleValue){/* Set the pixel and increase position */Color = *Buffer >> 4;Buffer++;SetPixel(x, YDelta, (UCHAR)Color);x++;i--;}/* Check loop count now */if ((LONG)i > 0){/* Decrease it */i--;/* Set new position */Buffer = Buffer + (i / 2) + 1;}/* Check if we need to increase the buffer */if ((ULONG_PTR)Buffer & 1) Buffer++;- }
-}
-/* PUBLIC FUNCTIONS
**********************************************************/
-/*
- @implemented
- */
-ULONG -NTAPI -VidSetTextColor(ULONG Color) -{
- ULONG OldColor;
- /* Save the old color and set the new one */
- OldColor = TextColor;
- TextColor = Color;
- return OldColor;
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidDisplayStringXY(PUCHAR String,
ULONG Left,ULONG Top,BOOLEAN Transparent)-{
- ULONG BackColor;
- /* If the caller wanted transparent, then send the special value
(16), else */
- /* use our default and call the helper routine. */
- BackColor = (Transparent) ? 16 : 14;
- DisplayStringXY(String, Left, Top, 12, BackColor);
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidSetScrollRegion(ULONG x1,
ULONG y1,ULONG x2,ULONG y2)-{
- /* Assert alignment */
- ASSERT((x1 & 0x7) == 0);
- ASSERT((x2 & 0x7) == 7);
- /* Set Scroll Region */
- ScrollRegion[0] = x1;
- ScrollRegion[1] = y1;
- ScrollRegion[2] = x2;
- ScrollRegion[3] = y2;
- /* Set current X and Y */
- curr_x = x1;
- curr_y = y1;
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidCleanUp(VOID) -{
- /* Select bit mask register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
- /* Clear it */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 255);
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidBufferToScreenBlt(IN PUCHAR Buffer,
IN ULONG Left,IN ULONG Top,IN ULONG Width,IN ULONG Height,IN ULONG Delta)-{
- /* Make sure we have a width and height */
- if (!(Width) || !(Height)) return;
- /* Call the helper function */
- BitBlt(Left, Top, Width, Height, Buffer, 4, Delta);
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidDisplayString(PUCHAR String) -{
- ULONG TopDelta = 14;
- /* Start looping the string */
- while (*String)
- {
/* Treat new-line separately */if (*String == '\n'){/* Modify Y position */curr_y += TopDelta;if (curr_y >= ScrollRegion[3]){/* Scroll the view */VgaScroll(TopDelta);curr_y -= TopDelta;/* Preserve row */PreserveRow(curr_y, TopDelta, TRUE);}/* Update current X */curr_x = ScrollRegion[0];/* Preseve the current row */PreserveRow(curr_y, TopDelta, FALSE);}else if (*String == '\r'){/* Update current X */curr_x = ScrollRegion[0];/* Check if we're being followed by a new line */if (String[1] != '\n') NextLine = TRUE;}else{/* Check if we had a \n\r last time */if (NextLine){/* We did, preserve the current row */PreserveRow(curr_y, TopDelta, TRUE);NextLine = FALSE;}/* Display this character */DisplayCharacter(*String, curr_x, curr_y, TextColor, 16);curr_x += 8;/* Check if we should scroll */if (curr_x > ScrollRegion[2]){/* Update Y position and check if we should scroll it */curr_y += TopDelta;if (curr_y > ScrollRegion[3]){/* Do the scroll */VgaScroll(TopDelta);curr_y -= TopDelta;/* Save the row */PreserveRow(curr_y, TopDelta, TRUE);}/* Update X */curr_x = ScrollRegion[0];}}/* Get the next character */String++;- }
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidBitBlt(PUCHAR Buffer,
ULONG Left,ULONG Top)-{
- PBITMAPINFOHEADER BitmapInfoHeader;
- LONG Delta;
- PUCHAR BitmapOffset;
- /* Get the Bitmap Header */
- BitmapInfoHeader = (PBITMAPINFOHEADER)Buffer;
- /* Initialize the palette */
- InitPaletteWithTable((PULONG)(Buffer + BitmapInfoHeader->biSize),
(BitmapInfoHeader->biClrUsed) ?BitmapInfoHeader->biClrUsed : 16);- /* Make sure we can support this bitmap */
- ASSERT((BitmapInfoHeader->biBitCount * BitmapInfoHeader->biPlanes) <=
4);
- /* Calculate the delta and align it on 32-bytes, then calculate the
actual */
- /* start of the bitmap data. */
- Delta = (BitmapInfoHeader->biBitCount * BitmapInfoHeader->biWidth) +
31;
- Delta >>= 3;
- Delta &= ~3;
- BitmapOffset = Buffer + sizeof(BITMAPINFOHEADER) + 16 *
sizeof(ULONG);
- /* Check the compression of the bitmap */
- if (BitmapInfoHeader->biCompression == 2)
- {
/* Make sure we have a width and a height */if ((BitmapInfoHeader->biWidth) && (BitmapInfoHeader->biHeight)){/* We can use RLE Bit Blt */RleBitBlt(Left,Top,BitmapInfoHeader->biWidth,BitmapInfoHeader->biHeight,BitmapOffset);}- }
- else
- {
/* Check if the height is negative */if (BitmapInfoHeader->biHeight < 0){/* Make it positive in the header */BitmapInfoHeader->biHeight *= -1;}else{/* Update buffer offset */BitmapOffset += ((BitmapInfoHeader->biHeight -1) * Delta);Delta *= -1;}/* Make sure we have a width and a height */if ((BitmapInfoHeader->biWidth) && (BitmapInfoHeader->biHeight)){/* Do the BitBlt */BitBlt(Left,Top,BitmapInfoHeader->biWidth,BitmapInfoHeader->biHeight,BitmapOffset,BitmapInfoHeader->biBitCount,Delta);}- }
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidScreenToBufferBlt(PUCHAR Buffer,
ULONG Left,ULONG Top,ULONG Width,ULONG Height,ULONG Delta)-{
- ULONG Plane;
- ULONG XDistance;
- ULONG LeftDelta, RightDelta;
- ULONG PixelOffset;
- PUCHAR PixelPosition;
- PUCHAR k, i;
- PULONG m;
- UCHAR Value, Value2;
- UCHAR a;
- ULONG b;
- ULONG x, y;
- /* Calculate total distance to copy on X */
- XDistance = Left + Width - 1;
- /* Start at plane 0 */
- Plane = 0;
- /* Calculate the 8-byte left and right deltas */
- LeftDelta = Left & 7;
- RightDelta = 8 - LeftDelta;
- /* Clear the destination buffer */
- RtlZeroMemory(Buffer, Delta * Height);
- /* Calculate the pixel offset and convert the X distance into byte
form */
- PixelOffset = Top * 80 + (Left >> 3);
- XDistance >>= 3;
- /* Loop the 4 planes */
- do
- {
/* Set the current pixel position and reset buffer loop variable
*/
PixelPosition = (PUCHAR)VgaBase + PixelOffset;i = Buffer;/* Set Mode 0 */ReadWriteMode(0);/* Set the current plane */__outpw(0x3CE, (Plane << 8) | 4);/* Make sure we have a height */if (Height > 0){/* Start the outer Y loop */y = Height;do{/* Read the current value */m = (PULONG)i;Value = READ_REGISTER_UCHAR(PixelPosition);/* Set Pixel Position loop variable */k = PixelPosition + 1;/* Check if we're still within bounds */if (Left <= XDistance){/* Start X Inner loop */x = (XDistance - Left) + 1;do{/* Read the current value */Value2 = READ_REGISTER_UCHAR(k);/* Increase pixel position */k++;/* Do the blt */a = Value2 >> (UCHAR)RightDelta;a |= Value << (UCHAR)LeftDelta;b = lookup[a & 0xF];a >>= 4;b <<= 16;b |= lookup[a];/* Save new value to buffer */*m |= (b << Plane);/* Move to next destination location */m++;/* Write new value */Value = Value2;} while (--x);}/* Update pixel position */PixelPosition += 80;i += Delta;} while (--y);}- } while (++Plane < 4);
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidSolidColorFill(IN ULONG Left,
IN ULONG Top,IN ULONG Right,IN ULONG Bottom,IN UCHAR Color)-{
- ULONG rMask, lMask;
- ULONG LeftOffset, RightOffset, Distance;
- PUCHAR Offset;
- ULONG i, j;
- /* Get the left and right masks, shifts, and delta */
- LeftOffset = Left >> 3;
- lMask = (lMaskTable[Left & 0x7] << 8) | 8;
- RightOffset = Right >> 3;
- rMask = (rMaskTable[Right & 0x7] << 8) | 8;
- Distance = RightOffset - LeftOffset;
- /* If there is no distance, then combine the right and left masks */
- if (!Distance) lMask &= rMask;
- /* Switch to mode 10 */
- ReadWriteMode(10);
- /* Clear the 4 planes (we're already in unchained mode here) */
- __outpw(0x3C4, 0xF02);
- /* Select the color don't care register */
- __outpw(0x3CE, 7);
- /* Calculate pixel position for the read */
- Offset = VgaBase + (Top * 80) + (PUCHAR)LeftOffset;
- /* Select the bitmask register and write the mask */
- __outpw(0x3CE, (USHORT)lMask);
- /* Check if the top coord is below the bottom one */
- if (Top <= Bottom)
- {
/* Start looping each line */i = (Bottom - Top) + 1;do{/* Read the previous value and add our color */WRITE_REGISTER_UCHAR(Offset, READ_REGISTER_UCHAR(Offset) &
Color);
/* Move to the next line */Offset += 80;} while (--i);- }
- /* Check if we have a delta */
- if (Distance)
- {
/* Calculate new pixel position */Offset = VgaBase + (Top * 80) + (PUCHAR)RightOffset;Distance--;/* Select the bitmask register and write the mask */__outpw(0x3CE, (USHORT)rMask);/* Check if the top coord is below the bottom one */if (Top <= Bottom){/* Start looping each line */i = (Bottom - Top) + 1;do{/* Read the previous value and add our color */WRITE_REGISTER_UCHAR(Offset,READ_REGISTER_UCHAR(Offset) &
Color);
/* Move to the next line */Offset += 80;} while (--i);}/* Check if we still have a delta */if (Distance){/* Calculate new pixel position */Offset = VgaBase + (Top * 80) + (PUCHAR)(LeftOffset + 1);/* Set the bitmask to 0xFF for all 4 planes */__outpw(0x3CE, 0xFF08);/* Check if the top coord is below the bottom one */if (Top <= Bottom){/* Start looping each line */i = (Bottom - Top) + 1;do{/* Loop the shift delta */if (Distance > 0){for (j = Distance; j; Offset++, j--){/* Write the color */WRITE_REGISTER_UCHAR(Offset, Color);}}/* Update position in memory */Offset += (80 - Distance);} while (--i);}}- }
-}
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
The problem: the new bootvid needs vga, which the olpc doesn`t have... For the other problem (freeloader import problem): He can't press enter on this machine because of the bios. Perhaps that could be better solved by a new option in freeldr, which make disappear all messages in say 3-5 seconds.
I'm afraid that fireballs sollution is merged into trunk in some time, which would hide this problem indead.
Do not add any new hack to reactos, that will create a new hell we already manger getting out from ntoskrnl. it took alex 1-2 year fix.
and we all have been agree not adding any new hacks to reactos, do a proper fix, try figout what it really cause of the problem. some times I stting weeks debug win32k to solv a serten bug. or I can choice write a hack solv it within 5mins. please do proper fix not hacks, even a proper fix leads to allot more problem at moment I can not boot reactos now after all new hacks. thanks allot
----- Original Message ----- From: "Alex Ionescu" ionucu@videotron.ca To: ros-dev@reactos.org Sent: Friday, June 15, 2007 8:51 PM Subject: Re: [ros-dev] [ros-diffs] [fireball] 27186: - Resurrect "old"bootvid. The plan is to * make it working in trunk * addframebuffer support for olpc and xbox kind of devices.
Screwing up compatibility continues! Here's an idea, let's rename all the
kernel exports!
-----Original Message----- From: ros-diffs-bounces@reactos.org [mailto:ros-diffs-bounces@reactos.org]
On Behalf Of fireball@svn.reactos.org
Sent: Friday, June 15, 2007 3:59 AM To: ros-diffs@reactos.org Subject: [ros-diffs] [fireball] 27186: - Resurrect "old" bootvid. The plan
is to * make it working in trunk * add framebuffer support for olpc and xbox kind of devices.
Author: fireball Date: Fri Jun 15 14:58:37 2007 New Revision: 27186
URL: http://svn.reactos.org/svn/reactos?rev=27186&view=rev Log:
- Resurrect "old" bootvid. The plan is to
- make it working in trunk
- add framebuffer support for olpc and xbox kind of devices.
Added: branches/olpc/drivers/base/bootvid/bar.bmp - copied unchanged from r25677,
trunk/reactos/drivers/base/bootvid/bar.bmp
branches/olpc/drivers/base/bootvid/bootimage.bmp - copied unchanged from r25677,trunk/reactos/drivers/base/bootvid/bootimage.bmp
branches/olpc/drivers/base/bootvid/bootvid.h - copied unchanged from r25677,trunk/reactos/drivers/base/bootvid/bootvid.h
branches/olpc/drivers/base/bootvid/resource.h - copied unchanged from r25677,trunk/reactos/drivers/base/bootvid/resource.h
branches/olpc/drivers/base/bootvid/vid.c - copied unchanged from r25677,trunk/reactos/drivers/base/bootvid/vid.c
branches/olpc/drivers/base/bootvid/vid_vga.c - copied unchanged from r25677,trunk/reactos/drivers/base/bootvid/vid_vga.c
branches/olpc/drivers/base/bootvid/vid_vgatext.c - copied unchanged from r25677,trunk/reactos/drivers/base/bootvid/vid_vgatext.c
branches/olpc/drivers/base/bootvid/vid_xbox.c - copied unchanged from r25677,trunk/reactos/drivers/base/bootvid/vid_xbox.c
Removed: branches/olpc/drivers/base/bootvid/bootdata.c branches/olpc/drivers/base/bootvid/precomp.h branches/olpc/drivers/base/bootvid/vga.c Modified: branches/olpc/drivers/base/bootvid/bootvid.c (contents, props
changed)
branches/olpc/drivers/base/bootvid/bootvid.def (contents, propschanged)
branches/olpc/drivers/base/bootvid/bootvid.rbuild (contents, propschanged)
branches/olpc/drivers/base/bootvid/bootvid.rc (contents, propschanged)
Removed: branches/olpc/drivers/base/bootvid/bootdata.c URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootda...
============================================================================
--- branches/olpc/drivers/base/bootvid/bootdata.c (original) +++ branches/olpc/drivers/base/bootvid/bootdata.c (removed) @@ -1,309 +1,0 @@ -#include "precomp.h"
-USHORT AT_Initialization[] = -{
- 0x10 | CMD_STREAM_READ, // Major Command = 0x10. Minor Command
=
0x08.
- 0x3DA, // Index Status 1 Register Port Address
- //
- // This Stream performs a USHORT Array Indexed Write at port 0x3C0
- //
- 0x20 | 0x01, // Major Command = 0x20. Minor Command
=
0x01.
- 0x3C0, // Attribute Controller Data Register
- 0x10, // Loop Count = 16 (Number of Pallette
Entries)
- 0x0, // Index to select (Index = 0,
palettes)
- 0x00, // Palette 0
- 0x01, // Palette 1
- 0x02, // Palette 2
- 0x03, // Palette 3
- 0x04, // Palette 4
- 0x05, // Palette 5
- 0x06, // Palette 6
- 0x07, // Palette 7
- 0x08, // Palette 8
- 0x09, // Palette 9
- 0x0A, // Palette 10
- 0x0B, // Palette 11
- 0x0C, // Palette 12
- 0x0D, // Palette 13
- 0x0E, // Palette 14
- 0x0F, // Palette 15
- //
- // This Stream performs a UCHAR READ of port 0x3DA
- //
- 0x10 | CMD_STREAM_READ, // Major Command = 0x10. Minor Command
=
0x08.
- 0x3DA, // Index Status 1 Register Port Address
- //
- // This Stream performs a UCHAR WRITE of value 0x20 at port 0x3C0
- //
- 0x10 | CMD_STREAM_WRITE, // Major Command = 0x10. Minor Command
=
0x00.
- 0x3C0, // Attribute Controller Data Register
- 0x20, // Set Palette Address Source
- //
- // End of Stream Marker
- //
- 0x0 // End of command stream
-};
-UCHAR FontData[256 * 13] = -{
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 0
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 13
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 26
- 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 39
- 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 52
- 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 65
- 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 78
- 0x10, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 91
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x10, 0x10, // 104
- 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 117
- 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 130
- 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 143
- 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 156
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x10, // 169
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 182
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 195
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 208
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 221
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 234
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 247
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 260
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 273
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 286
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 299
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 312
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 325
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 338
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 351
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 364
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 377
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 390
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 403
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 416
- 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, // 429
- 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 442
- 0x00, 0x14, 0x14, 0x14, 0x7F, 0x28, 0xFE, 0x50, 0x50, 0x50, 0x00,
0x00, 0x00, // 455
- 0x10, 0x3C, 0x50, 0x50, 0x70, 0x38, 0x1C, 0x14, 0x14, 0x78, 0x10,
0x00, 0x00, // 468
- 0x00, 0x61, 0x92, 0x94, 0x68, 0x18, 0x16, 0x29, 0x49, 0x86, 0x00,
0x00, 0x00, // 481
- 0x00, 0x18, 0x24, 0x24, 0x38, 0x71, 0x89, 0x8E, 0xC6, 0x7E, 0x00,
0x00, 0x00, // 494
- 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 507
- 0x06, 0x08, 0x10, 0x30, 0x20, 0x20, 0x20, 0x20, 0x30, 0x10, 0x08,
0x06, 0x00, // 520
- 0x60, 0x10, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x10,
0x60, 0x00, // 533
- 0x00, 0x10, 0x52, 0x24, 0x3C, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 546
- 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, // 559
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10,
0x20, 0x00, // 572
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 585
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00,
0x00, 0x00, // 598
- 0x01, 0x02, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x40,
0x80, 0x00, // 611
- 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x3C, 0x00,
0x00, 0x00, // 624
- 0x00, 0x30, 0xD0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x00,
0x00, 0x00, // 637
- 0x00, 0x78, 0x04, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7C, 0x00,
0x00, 0x00, // 650
- 0x00, 0x78, 0x04, 0x04, 0x08, 0x30, 0x0C, 0x04, 0x04, 0x78, 0x00,
0x00, 0x00, // 663
- 0x00, 0x08, 0x18, 0x28, 0x28, 0x48, 0x88, 0xFC, 0x08, 0x08, 0x00,
0x00, 0x00, // 676
- 0x00, 0x3C, 0x20, 0x20, 0x38, 0x04, 0x04, 0x04, 0x04, 0x38, 0x00,
0x00, 0x00, // 689
- 0x00, 0x1C, 0x20, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x22, 0x1C, 0x00,
0x00, 0x00, // 702
- 0x00, 0x7E, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00,
0x00, 0x00, // 715
- 0x00, 0x3C, 0x42, 0x42, 0x24, 0x3C, 0x46, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 728
- 0x00, 0x38, 0x44, 0x42, 0x42, 0x46, 0x3A, 0x02, 0x04, 0x38, 0x00,
0x00, 0x00, // 741
- 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
0x00, 0x00, // 754
- 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10,
0x20, 0x00, // 767
- 0x00, 0x00, 0x00, 0x02, 0x0C, 0x10, 0x60, 0x10, 0x0C, 0x02, 0x00,
0x00, 0x00, // 780
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00,
0x00, 0x00, // 793
- 0x00, 0x00, 0x00, 0x40, 0x30, 0x08, 0x06, 0x08, 0x30, 0x40, 0x00,
0x00, 0x00, // 806
- 0x00, 0x7C, 0x42, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, // 819
- 0x00, 0x3C, 0x62, 0xDE, 0xB2, 0xA2, 0xA6, 0x9B, 0x44, 0x3C, 0x00,
0x00, 0x00, // 832
- 0x00, 0x00, 0x18, 0x18, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x81, 0x00,
0x00, 0x00, // 845
- 0x00, 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x42, 0x42, 0x42, 0x7C, 0x00,
0x00, 0x00, // 858
- 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x3E, 0x00,
0x00, 0x00, // 871
- 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x42, 0x42, 0x44, 0x78, 0x00,
0x00, 0x00, // 884
- 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x7E, 0x00,
0x00, 0x00, // 897
- 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, // 910
- 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x8E, 0x82, 0x42, 0x3E, 0x00,
0x00, 0x00, // 923
- 0x00, 0x00, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x00,
0x00, 0x00, // 936
- 0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00,
0x00, 0x00, // 949
- 0x00, 0x00, 0x3C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x78, 0x00,
0x00, 0x00, // 962
- 0x00, 0x00, 0x42, 0x44, 0x48, 0x70, 0x50, 0x48, 0x44, 0x42, 0x00,
0x00, 0x00, // 975
- 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7E, 0x00,
0x00, 0x00, // 988
- 0x00, 0x00, 0xC6, 0xC6, 0xAA, 0xAA, 0xAA, 0x92, 0x82, 0x82, 0x00,
0x00, 0x00, // 1001
- 0x00, 0x00, 0x42, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x46, 0x42, 0x00,
0x00, 0x00, // 1014
- 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00,
0x00, 0x00, // 1027
- 0x00, 0x00, 0x7C, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, // 1040
- 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x06,
0x03, 0x00, // 1053
- 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x78, 0x48, 0x44, 0x42, 0x00,
0x00, 0x00, // 1066
- 0x00, 0x00, 0x3E, 0x40, 0x40, 0x38, 0x04, 0x02, 0x02, 0x7C, 0x00,
0x00, 0x00, // 1079
- 0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, // 1092
- 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1105
- 0x00, 0x00, 0x81, 0x42, 0x42, 0x44, 0x24, 0x28, 0x38, 0x10, 0x00,
0x00, 0x00, // 1118
- 0x00, 0x00, 0x81, 0x81, 0x92, 0x5A, 0x5A, 0x6A, 0x66, 0x24, 0x00,
0x00, 0x00, // 1131
- 0x00, 0x00, 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, 0x00,
0x00, 0x00, // 1144
- 0x00, 0x00, 0x82, 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, // 1157
- 0x00, 0x00, 0xFE, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0xFE, 0x00,
0x00, 0x00, // 1170
- 0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x1E, 0x00, // 1183
- 0x80, 0x40, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x02, 0x02,
0x01, 0x00, // 1196
- 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x78, 0x00, // 1209
- 0x00, 0x08, 0x08, 0x18, 0x14, 0x24, 0x24, 0x42, 0x00, 0x00, 0x00,
0x00, 0x00, // 1222
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x00, // 1235
- 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 1248
- 0x00, 0x00, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1261
- 0x40, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x62, 0x5C, 0x00,
0x00, 0x00, // 1274
- 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x40, 0x40, 0x20, 0x1E, 0x00,
0x00, 0x00, // 1287
- 0x02, 0x02, 0x02, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1300
- 0x00, 0x00, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1313
- 0x1E, 0x20, 0x20, 0xFE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x00, 0x00, // 1326
- 0x00, 0x00, 0x00, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x02,
0x02, 0x3C, // 1339
- 0x40, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,
0x00, 0x00, // 1352
- 0x18, 0x18, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1365
- 0x18, 0x18, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x70, // 1378
- 0x40, 0x40, 0x40, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00,
0x00, 0x00, // 1391
- 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1404
- 0x00, 0x00, 0x00, 0xB6, 0xDA, 0x92, 0x92, 0x92, 0x92, 0x92, 0x00,
0x00, 0x00, // 1417
- 0x00, 0x00, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,
0x00, 0x00, // 1430
- 0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1443
- 0x00, 0x00, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x62, 0x5C, 0x40,
0x40, 0x40, // 1456
- 0x00, 0x00, 0x00, 0x3A, 0x46, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x02,
0x02, 0x02, // 1469
- 0x00, 0x00, 0x00, 0x5C, 0x64, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, // 1482
- 0x00, 0x00, 0x00, 0x3C, 0x40, 0x60, 0x18, 0x04, 0x04, 0x78, 0x00,
0x00, 0x00, // 1495
- 0x00, 0x00, 0x20, 0xFC, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1C, 0x00,
0x00, 0x00, // 1508
- 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1521
- 0x00, 0x00, 0x00, 0x82, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x00,
0x00, 0x00, // 1534
- 0x00, 0x00, 0x00, 0x81, 0x91, 0x5A, 0x5A, 0x6A, 0x24, 0x24, 0x00,
0x00, 0x00, // 1547
- 0x00, 0x00, 0x00, 0x42, 0x24, 0x18, 0x18, 0x18, 0x24, 0x42, 0x00,
0x00, 0x00, // 1560
- 0x00, 0x00, 0x00, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x10,
0x30, 0xE0, // 1573
- 0x00, 0x00, 0x00, 0x7E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x00,
0x00, 0x00, // 1586
- 0x1C, 0x10, 0x10, 0x10, 0x10, 0x60, 0x10, 0x10, 0x10, 0x10, 0x10,
0x0C, 0x00, // 1599
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x00, // 1612
- 0x30, 0x08, 0x08, 0x08, 0x08, 0x06, 0x08, 0x08, 0x08, 0x08, 0x08,
0x30, 0x00, // 1625
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, // 1638
- 0x00, 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x3C, 0x00,
0x00, 0x00, // 1651
- 0x00, 0x00, 0x3E, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x3E, 0x04,
0x02, 0x06, // 1664
- 0x00, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1677
- 0x08, 0x10, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1690
- 0x18, 0x24, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1703
- 0x00, 0x24, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1716
- 0x10, 0x08, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1729
- 0x10, 0x28, 0x10, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 1742
- 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x40, 0x40, 0x20, 0x1E, 0x08,
0x04, 0x0C, // 1755
- 0x18, 0x24, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1768
- 0x00, 0x12, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1781
- 0x10, 0x08, 0x00, 0x3C, 0x22, 0x42, 0x7E, 0x40, 0x40, 0x3E, 0x00,
0x00, 0x00, // 1794
- 0x00, 0x24, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1807
- 0x18, 0x24, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1820
- 0x10, 0x08, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 1833
- 0x24, 0x00, 0x18, 0x18, 0x24, 0x24, 0x24, 0x7E, 0x42, 0x81, 0x00,
0x00, 0x00, // 1846
- 0x10, 0x28, 0x10, 0x28, 0x28, 0x24, 0x44, 0x7E, 0x42, 0x81, 0x00,
0x00, 0x00, // 1859
- 0x08, 0x10, 0x7E, 0x40, 0x40, 0x40, 0x7C, 0x40, 0x40, 0x7E, 0x00,
0x00, 0x00, // 1872
- 0x00, 0x00, 0x00, 0xFC, 0x12, 0x12, 0x7E, 0x90, 0x90, 0x6E, 0x00,
0x00, 0x00, // 1885
- 0x00, 0x00, 0x0F, 0x18, 0x18, 0x28, 0x2E, 0x78, 0x48, 0x8F, 0x00,
0x00, 0x00, // 1898
- 0x18, 0x24, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1911
- 0x00, 0x24, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1924
- 0x20, 0x10, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 1937
- 0x18, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1950
- 0x20, 0x10, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 1963
- 0x00, 0x24, 0x00, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x10,
0x30, 0xE0, // 1976
- 0x24, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00,
0x00, 0x00, // 1989
- 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 2002
- 0x00, 0x08, 0x1C, 0x28, 0x48, 0x48, 0x48, 0x68, 0x1C, 0x08, 0x00,
0x00, 0x00, // 2015
- 0x00, 0x0E, 0x10, 0x10, 0x10, 0x38, 0x10, 0x10, 0x20, 0x3E, 0x00,
0x00, 0x00, // 2028
- 0x00, 0x81, 0x42, 0x24, 0x18, 0x7C, 0x10, 0x7C, 0x10, 0x10, 0x00,
0x00, 0x00, // 2041
- 0x00, 0xE0, 0x90, 0x90, 0xE0, 0x96, 0xBC, 0x94, 0x92, 0x9E, 0x00,
0x00, 0x00, // 2054
- 0x0E, 0x10, 0x10, 0x3C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0xE0, // 2067
- 0x08, 0x10, 0x00, 0x38, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3E, 0x00,
0x00, 0x00, // 2080
- 0x08, 0x10, 0x00, 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, // 2093
- 0x08, 0x10, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 2106
- 0x08, 0x10, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00,
0x00, 0x00, // 2119
- 0x14, 0x28, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,
0x00, 0x00, // 2132
- 0x14, 0x28, 0x42, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x46, 0x42, 0x00,
0x00, 0x00, // 2145
- 0x00, 0x78, 0x08, 0x38, 0x48, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2158
- 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2171
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x42,
0x3E, 0x00, // 2184
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x40, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, // 2197
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, // 2210
- 0x00, 0xC4, 0x48, 0x48, 0x50, 0x37, 0x21, 0x43, 0x44, 0x87, 0x00,
0x00, 0x00, // 2223
- 0x00, 0xC4, 0x48, 0x48, 0x50, 0x22, 0x26, 0x4A, 0x4F, 0x82, 0x00,
0x00, 0x00, // 2236
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x00, // 2249
- 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x48, 0x24, 0x12, 0x00, 0x00,
0x00, 0x00, // 2262
- 0x00, 0x00, 0x00, 0x00, 0x48, 0x24, 0x12, 0x24, 0x48, 0x00, 0x00,
0x00, 0x00, // 2275
- 0x94, 0x00, 0x00, 0x94, 0x00, 0x94, 0x00, 0x00, 0x94, 0x00, 0x94,
0x00, 0x00, // 2288
- 0x49, 0x94, 0x00, 0x49, 0x94, 0x49, 0x00, 0x94, 0x49, 0x94, 0x49,
0x00, 0x94, // 2301
- 0xFF, 0x94, 0x94, 0xFF, 0x94, 0xFF, 0x94, 0x94, 0xFF, 0x94, 0xFF,
0x94, 0x94, // 2314
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2327
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2340
- 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x10,
0x10, 0x10, // 2353
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2366
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2379
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0x10,
0x10, 0x10, // 2392
- 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x14, 0x14, 0x14,
0x14, 0x14, // 2405
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2418
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x14,
0x14, 0x14, // 2431
- 0x14, 0x14, 0x14, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x00, // 2444
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2457
- 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, // 2470
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2483
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2496
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2509
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2522
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2535
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2548
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2561
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x10,
0x10, 0x10, // 2574
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2587
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, // 2600
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x14, 0x14, 0x14,
0x14, 0x14, // 2613
- 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, // 2626
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, 0x14,
0x14, 0x14, // 2639
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0x14,
0x14, 0x14, // 2652
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, // 2665
- 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14,
0x14, 0x14, // 2678
- 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, // 2691
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2704
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0x10,
0x10, 0x10, // 2717
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2730
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2743
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, // 2756
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x10, 0x10, 0x10,
0x10, 0x10, // 2769
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2782
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, // 2795
- 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x10, 0x10, 0x10,
0x10, 0x10, // 2808
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2821
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 2834
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, // 2847
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, // 2860
- 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0xF0, 0xF0, // 2873
- 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, // 2886
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 2899
- 0x00, 0x00, 0x00, 0x31, 0x49, 0x86, 0x84, 0x84, 0x8A, 0x71, 0x00,
0x00, 0x00, // 2912
- 0x38, 0x48, 0x48, 0x50, 0x50, 0x58, 0x44, 0x42, 0x42, 0x5C, 0x00,
0x00, 0x00, // 2925
- 0x00, 0x00, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x00, 0x00, // 2938
- 0x00, 0x00, 0x00, 0x7F, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00,
0x00, 0x00, // 2951
- 0x00, 0x00, 0xFF, 0x40, 0x20, 0x10, 0x10, 0x20, 0x40, 0xFF, 0x00,
0x00, 0x00, // 2964
- 0x00, 0x00, 0x00, 0x7F, 0x84, 0x84, 0x84, 0x84, 0x84, 0x78, 0x00,
0x00, 0x00, // 2977
- 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x66, 0x5A, 0x40,
0x40, 0x40, // 2990
- 0x00, 0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, // 3003
- 0x00, 0x00, 0x10, 0x7C, 0x92, 0x92, 0x92, 0x92, 0x7C, 0x10, 0x00,
0x00, 0x00, // 3016
- 0x00, 0x00, 0x38, 0x44, 0x82, 0xBA, 0x82, 0x82, 0x44, 0x38, 0x00,
0x00, 0x00, // 3029
- 0x00, 0x00, 0x7C, 0xC6, 0x82, 0x82, 0x82, 0x84, 0x44, 0xEE, 0x00,
0x00, 0x00, // 3042
- 0x38, 0x40, 0x60, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00,
0x00, 0x00, // 3055
- 0x00, 0x00, 0x00, 0x00, 0x66, 0x99, 0x99, 0x99, 0x66, 0x00, 0x00,
0x00, 0x00, // 3068
- 0x10, 0x10, 0x10, 0x7C, 0x92, 0x91, 0x91, 0x91, 0x92, 0x7C, 0x10,
0x10, 0x10, // 3081
- 0x00, 0x00, 0x00, 0x1E, 0x20, 0x40, 0x7C, 0x40, 0x60, 0x1E, 0x00,
0x00, 0x00, // 3094
- 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00,
0x00, 0x00, // 3107
- 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00,
0x00, 0x00, // 3120
- 0x00, 0x00, 0x00, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x00, 0xFE, 0x00,
0x00, 0x00, // 3133
- 0x00, 0x00, 0x40, 0x30, 0x08, 0x06, 0x08, 0x30, 0x40, 0x00, 0x7E,
0x00, 0x00, // 3146
- 0x00, 0x00, 0x02, 0x0C, 0x10, 0x60, 0x10, 0x0C, 0x02, 0x00, 0x7E,
0x00, 0x00, // 3159
- 0x0C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, // 3172
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x60, // 3185
- 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, // 3198
- 0x00, 0x00, 0x00, 0x00, 0x72, 0x4E, 0x00, 0x72, 0x4E, 0x00, 0x00,
0x00, 0x00, // 3211
- 0x00, 0x10, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 3224
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, // 3237
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, // 3250
- 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0xC4, 0x28, 0x28, 0x18,
0x10, 0x00, // 3263
- 0x00, 0x3C, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 3276
- 0x00, 0x3C, 0x04, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, // 3289
- 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, // 3302
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00 // 3315
-};
Modified: branches/olpc/drivers/base/bootvid/bootvid.c URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi...
============================================================================
--- branches/olpc/drivers/base/bootvid/bootvid.c (original) +++ branches/olpc/drivers/base/bootvid/bootvid.c Fri Jun 15 14:58:37 2007 @@ -1,475 +1,290 @@ -#include "precomp.h"
-/* PRIVATE FUNCTIONS
*********************************************************/
-BOOLEAN -NTAPI -VgaInterpretCmdStream(IN PUSHORT CmdStream) -{
- PUCHAR Base = (PUCHAR)VgaRegisterBase;
- USHORT Cmd;
- UCHAR Major, Minor;
- USHORT Count;
- UCHAR Index;
- PUSHORT Buffer;
- PUSHORT ShortPort;
- PUCHAR Port;
- UCHAR Value;
- USHORT ShortValue;
- /* First make sure that we have a Command Stream */
- if (!CmdStream) return TRUE;
- /* Loop as long as we have commands */
- while (*CmdStream)
- {
/* Get the Major and Minor Function */Cmd = *CmdStream;Major = Cmd & 0xF0;Minor = Cmd & 0x0F;/* Move to the next command */CmdStream++;/* Check which major function this was */if (Major == 0x10){/* Now let's see the minor function */if (Minor & CMD_STREAM_READ){/* Now check the sub-type */if (Minor & CMD_STREAM_USHORT){/* The port is what is in the stream right now */ShortPort = UlongToPtr((ULONG)*CmdStream);/* Move to the next command */CmdStream++;/* Read USHORT from the port */READ_PORT_USHORT(PtrToUlong(Base) + ShortPort);}else{/* The port is what is in the stream right now */Port = UlongToPtr((ULONG)*CmdStream);/* Move to the next command */CmdStream++;/* Read UCHAR from the port */READ_PORT_UCHAR(PtrToUlong(Base) + Port);}}else if (Minor & CMD_STREAM_WRITE_ARRAY){/* Now check the sub-type */if (Minor & CMD_STREAM_USHORT){/* The port is what is in the stream right now */ShortPort = UlongToPtr(Cmd);/* Move to the next command and get the count */Count = *(CmdStream++);/* The buffer is what's next in the command stream*/
Buffer = CmdStream++;/* Write USHORT to the port */WRITE_PORT_BUFFER_USHORT(PtrToUshort(Base) +ShortPort, Buffer, Count);
/* Move past the buffer in the command stream */CmdStream += Count;}else{/* The port is what is in the stream right now */Port = UlongToPtr(Cmd);/* Move to the next command and get the count */Count = *(CmdStream++);/* Add the base to the port */Port = PtrToUlong(Port) + Base;/* Move to next command */CmdStream++;/* Loop the cmd array */for (; Count; Count--, CmdStream++){/* Get the byte we're writing */Value = (UCHAR)*CmdStream;/* Write UCHAR to the port */WRITE_PORT_UCHAR(Port, Value);}}}else if (Minor & CMD_STREAM_USHORT){/* Get the ushort we're writing and advance in thestream
*/
ShortValue = *CmdStream;CmdStream++;/* Write USHORT to the port (which is in cmd) */WRITE_PORT_USHORT((PUSHORT)Base + Cmd, ShortValue);}else{/* The port is what is in the stream right now */Port = UlongToPtr((ULONG)*CmdStream);/* Get the uchar we're writing */Value = (UCHAR)*++CmdStream;/* Move to the next command */CmdStream++;/* Write UCHAR to the port (which is in cmd) */WRITE_PORT_UCHAR(PtrToUlong(Base) + Port, Value);}}else if (Major == 0x20){/* Check the minor function. Note these are not flagsanymore. */
switch (Minor){case 0:/* The port is what is in the stream right now */ShortPort = UlongToPtr(*CmdStream);/* Move to the next command and get the count */Count = *(CmdStream++);/* Move to the next command and get the value towrite */
ShortValue = *(CmdStream++);/* Add the base to the port */ShortPort = PtrToUlong(ShortPort) + (PUSHORT)Base;/* Move to next command */CmdStream++;/* Make sure we have data */if (!ShortValue) continue;/* Loop the cmd array */for (; Count; Count--, CmdStream++, Value++){/* Get the byte we're writing */ShortValue += (*CmdStream) << 8;/* Write USHORT to the port */WRITE_PORT_USHORT(ShortPort, ShortValue);}break;case 1:/* The port is what is in the stream right now. Addthe base too */
Port = *CmdStream + Base;/* Move to the next command and get the count */Count = *++CmdStream;/* Move to the next command and get the index towrite */
Index = (UCHAR)*++CmdStream;/* Move to next command */CmdStream++;/* Loop the cmd array */for (; Count; Count--, Index++){/* Write the index */WRITE_PORT_UCHAR(Port, Index);/* Get the byte we're writing */Value = (UCHAR)*CmdStream;/* Move to next command */CmdStream++;/* Write UCHAR value to the port */WRITE_PORT_UCHAR(Port, Value);}break;case 2:/* The port is what is in the stream right now. Addthe base too */
Port = *CmdStream + Base;/* Read the current value and add the stream data*/
Value = READ_PORT_UCHAR(Port);Value &= *CmdStream++;Value ^= *CmdStream++;/* Write the value */WRITE_PORT_UCHAR(Port, Value);break;default:/* Unknown command, fail */return FALSE;}}else if (Major != 0xF0){/* Unknown major function, fail */return FALSE;}/* Get the next command */Cmd = *CmdStream;- }
- /* If we got here, return success */
- return TRUE;
-}
-BOOLEAN -NTAPI -VgaIsPresent(VOID) -{
- UCHAR VgaReg, VgaReg2, VgaReg3;
- UCHAR SeqReg, SeqReg2;
- UCHAR i;
- /* Read the VGA Address Register */
- VgaReg = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE);
- /* Select Read Map Select Register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);
- /* Read it back...it should be 4 */
- if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE)) & 0xF) !=
return FALSE;
- /* Read the VGA Data Register */
- VgaReg2 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF);
- /* Enable all planes */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 3);
- /* Read it back...it should be 3 */
- if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != 0x3)
- {
/* Reset the registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);return FALSE;- }
- /* Select Bit Mask Register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
- /* Read it back...it should be 8 */
- if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE)) & 0xF) !=
- {
/* Reset the registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);return FALSE;- }
- /* Read the VGA Data Register */
- VgaReg3 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF);
- /* Loop bitmasks */
- for (i = 0xBB; i; i >>= 1)
- {
/* Set bitmask */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, i);/* Read it back...it should be the same */if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != i){/* Reset the registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0xFF);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);return FALSE;}- }
- /* Select Read Map Select Register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 4);
- /* Read it back...it should be 3 */
- if (READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) != 3)
- {
/* Reset the registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 0xFF);return FALSE;- }
- /* Write the registers we read earlier */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, VgaReg);
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, VgaReg2);
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, VgaReg3);
- /* Read sequencer address */
- SeqReg = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4);
- /* Select memory mode register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4, 4);
- /* Read it back...it should still be 4 */
- if (((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4)) & 7) != 4)
- {
/* Fail */return FALSE;- }
- /* Read sequencer Data */
- SeqReg2 = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5);
- /* Write null plane */
- WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x100);
- /* Write sequencer flag */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, SeqReg2 ^ 8);
- /* Read it back */
- if ((READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5)) != (SeqReg2
^
8))
- {
/* Not the same value...restore registers and fail */WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, 2);WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x300);return FALSE;- }
- /* Now write the registers we read */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C5, SeqReg2);
- WRITE_PORT_USHORT((PUSHORT)VgaRegisterBase + 0x3C4, 0x300);
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3C4, SeqReg);
- /* VGA is present! */
- return TRUE;
-}
-/* PUBLIC FUNCTIONS
**********************************************************/
/*
- @implemented
- ReactOS Boot video driver
- Copyright (C) 2003 Casper S. Hornstroup
- Copyright (C) 2004, 2005 Filip Navara
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307,
USA.
*/
- $Id$
-BOOLEAN -NTAPI -VidInitialize(IN BOOLEAN SetMode) -{
- ULONG Context = 0;
- PHYSICAL_ADDRESS TranslatedAddress;
- PHYSICAL_ADDRESS NullAddress = {{0}};
- ULONG AddressSpace = 1;
- BOOLEAN Result;
- ULONG_PTR Base;
- /* Make sure that we have a bus translation function */
- if (!HalFindBusAddressTranslation) return FALSE;
- /* Get the VGA Register address */
- Result = HalFindBusAddressTranslation(NullAddress,
&AddressSpace,&TranslatedAddress,&Context,TRUE);- if (!Result) return FALSE;
- /* See if this is I/O Space, which we need to map */
-TryAgain:
- if (!AddressSpace)
- {
/* Map it */Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, 0x400,MmNonCached);
- }
- else
- {
/* The base is the translated address, no need to map I/O space*/
Base = TranslatedAddress.LowPart;- }
- /* Set the VGA Register base and now check if we have a VGA device
*/
- VgaRegisterBase = Base;
- if (VgaIsPresent())
- {
/* Translate the VGA Memory Address */NullAddress.LowPart = 0xA0000;AddressSpace = 0;Result = HalFindBusAddressTranslation(NullAddress,&AddressSpace,&TranslatedAddress,&Context,FALSE);if (Result){/* Success! See if this is I/O Space, which we need to map*/
if (!AddressSpace){/* Map it */Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress,0x20000,MmNonCached);}else{/* The base is the translated address, no need to mapI/O
space */
Base = TranslatedAddress.LowPart;}/* Set the VGA Memory Base */VgaBase = Base;/* Now check if we have to set the mode */if (SetMode){//// Reset the display////HalResetDisplay();curr_x = 0;curr_y = 0;/* Initialize it */VgaInterpretCmdStream(AT_Initialization);return TRUE;}}- }
- else
- {
/* It's not, so unmap the I/O space if we mapped it */if (!AddressSpace) MmUnmapIoSpace((PVOID)VgaRegisterBase,0x400);
- }
- /* If we got here, then we failed...let's try again */
- Result = HalFindBusAddressTranslation(NullAddress,
&AddressSpace,&TranslatedAddress,&Context,TRUE);- if (Result) goto TryAgain;
- /* If we got here, then we failed even past our re-try... */
- return FALSE;
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidResetDisplay(IN BOOLEAN HalReset) -{
- /* Clear the current position */
- curr_x = 0;
- curr_y = 0;
- /* Clear the screen with HAL if we were asked to */
- //if (HalReset) HalResetDisplay();
- /* Re-initialize the VGA Display */
- VgaInterpretCmdStream(AT_Initialization);
- /* Re-initialize the palette and fill the screen black */
- InitializePalette();
- VidSolidColorFill(0, 0, 639, 479, 0);
-}
+/* INCLUDES
******************************************************************/
+#include "bootvid.h" +#include "resource.h"
+#define NDEBUG +#include <debug.h>
+//#define USE_PROGRESS_BAR
+/* GLOBALS
*******************************************************************/
+static volatile LONG ShutdownNotify; +static KEVENT ShutdownCompleteEvent;
+/* DATA
**********************************************************************/
+static RGBQUAD _MainPalette[16]; +static UCHAR _Square1[9 * 4]; +static UCHAR _Square2[9 * 4]; +static UCHAR _Square3[9 * 4];
+/* FUNCTIONS
*****************************************************************/
+static VOID NTAPI +BootVidAnimationThread(PVOID Ignored) +{
- UCHAR PaletteBitmapBuffer[sizeof(BITMAPINFOHEADER) +
sizeof(_MainPalette)];
- PBITMAPINFOHEADER PaletteBitmap =
(PBITMAPINFOHEADER)PaletteBitmapBuffer;
- LPRGBQUAD Palette = (LPRGBQUAD)(PaletteBitmapBuffer +
sizeof(BITMAPINFOHEADER));
- ULONG Iteration, Index, ClrUsed;
- UINT AnimBarPos;
- LARGE_INTEGER Interval;
- /*
- Build a bitmap containing the fade in palette. The palette
entries
- are then processed in a loop and set using VidBitBlt function.
- */
- ClrUsed = sizeof(_MainPalette) / sizeof(_MainPalette[0]);
- RtlZeroMemory(PaletteBitmap, sizeof(BITMAPINFOHEADER));
- PaletteBitmap->biSize = sizeof(BITMAPINFOHEADER);
- PaletteBitmap->biBitCount = 4;
- PaletteBitmap->biClrUsed = ClrUsed;
- /*
- Main animation loop.
- */
- for (Iteration = 0, AnimBarPos = 0; !ShutdownNotify; Iteration++)
- {
if (Iteration <= PALETTE_FADE_STEPS){for (Index = 0; Index < ClrUsed; Index++){Palette[Index].rgbRed =_MainPalette[Index].rgbRed * Iteration /PALETTE_FADE_STEPS;
Palette[Index].rgbGreen =_MainPalette[Index].rgbGreen * Iteration /PALETTE_FADE_STEPS;
Palette[Index].rgbBlue =_MainPalette[Index].rgbBlue * Iteration /PALETTE_FADE_STEPS;
}VidBitBlt(PaletteBitmapBuffer, 0, 0);}+#ifdef USE_PROGRESS_BAR
else{break;}Interval.QuadPart = -PALETTE_FADE_TIME;+#else
+#if 0
if (AnimBarPos == 0){VidSolidColorFill(0x173, 354, 0x178, 354 + 9, 0);}else if (AnimBarPos > 3){VidSolidColorFill(0xe3 + AnimBarPos * 8, 354,0xe8 + AnimBarPos * 8, 354 + 9,0);}if (AnimBarPos >= 3){VidBufferToScreenBlt(_Square1, 0xeb + AnimBarPos * 8, 354, 6,9,
4);
}if (AnimBarPos >= 2 && AnimBarPos <= 16){VidBufferToScreenBlt(_Square2, 0xf3 + AnimBarPos * 8, 354, 6,9,
4);
}if (AnimBarPos >= 1 && AnimBarPos <= 15){VidBufferToScreenBlt(_Square3, 0xfb + AnimBarPos * 8, 354, 6,9,
4);
}+#endif
if (Iteration <= PALETTE_FADE_STEPS){Interval.QuadPart = -PALETTE_FADE_TIME;if ((Iteration % 5) == 0)AnimBarPos++;}else{Interval.QuadPart = -PALETTE_FADE_TIME * 5;AnimBarPos++;}AnimBarPos = Iteration % 18;+#endif
/* Wait for a bit. */KeDelayExecutionThread(KernelMode, FALSE, &Interval);- }
- DPRINT("Finishing bootvid thread.\n");
- KeSetEvent(&ShutdownCompleteEvent, 0, FALSE);
- PsTerminateSystemThread(0);
+}
+NTSTATUS NTAPI +BootVidDisplayBootLogo(PVOID ImageBase) +{
- PBITMAPINFOHEADER BitmapInfoHeader;
- LPRGBQUAD Palette;
- static const ULONG BitmapIds[2] = {IDB_BOOTIMAGE, IDB_BAR};
- PUCHAR BitmapData[2];
- ULONG Index;
- HANDLE BitmapThreadHandle;
- CLIENT_ID BitmapThreadId;
- NTSTATUS Status;
- KeInitializeEvent(&ShutdownCompleteEvent, NotificationEvent, FALSE);
- /*
- Get the bitmaps from the executable.
- */
- for (Index = 0; Index < sizeof(BitmapIds) / sizeof(BitmapIds[0]);
Index++)
- {
PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry;LDR_RESOURCE_INFO ResourceInfo;ULONG Size;ResourceInfo.Type = /* RT_BITMAP */ 2;ResourceInfo.Name = BitmapIds[Index];ResourceInfo.Language = 0x09;Status = LdrFindResource_U(ImageBase,&ResourceInfo,RESOURCE_DATA_LEVEL,&ResourceDataEntry);if (!NT_SUCCESS(Status)){DPRINT("LdrFindResource_U() failed with status 0x%.08x\n",Status);
return Status;}Status = LdrAccessResource(ImageBase,ResourceDataEntry,(PVOID*)&BitmapData[Index],&Size);if (!NT_SUCCESS(Status)){DPRINT("LdrAccessResource() failed with status 0x%.08x\n",Status);
return Status;}- }
- /*
- Initialize the graphics output.
- */
- if (!VidInitialize(TRUE))
- {
return STATUS_UNSUCCESSFUL;- }
- /*
- Load the bar bitmap and get the square data from it.
- */
- VidBitBlt(BitmapData[1], 0, 0);
- VidScreenToBufferBlt(_Square1, 0, 0, 6, 9, 4);
- VidScreenToBufferBlt(_Square2, 8, 0, 6, 9, 4);
- VidScreenToBufferBlt(_Square3, 16, 0, 6, 9, 4);
- /*
- Save the main image palette and replace it with black palette, so
- we can do fade in effect later.
- */
- BitmapInfoHeader = (PBITMAPINFOHEADER)BitmapData[0];
- Palette = (LPRGBQUAD)(BitmapData[0] + BitmapInfoHeader->biSize);
- RtlCopyMemory(_MainPalette, Palette, sizeof(_MainPalette));
- RtlZeroMemory(Palette, sizeof(_MainPalette));
- /*
- Display the main image.
- */
- VidBitBlt(BitmapData[0], 0, 0);
- /*
- Start a thread that handles the fade in and bar animation
effects.
- */
- Status = PsCreateSystemThread(
&BitmapThreadHandle,THREAD_ALL_ACCESS,NULL,NULL,&BitmapThreadId,BootVidAnimationThread,NULL);- if (!NT_SUCCESS(Status))
- {
VidCleanUp();return Status;- }
- ZwClose(BitmapThreadHandle);
- return STATUS_SUCCESS;
+}
+VOID NTAPI +BootVidUpdateProgress(ULONG Progress) +{ +#ifdef USE_PROGRESS_BAR
- if (ShutdownNotify == 0)
- {
VidSolidColorFill(0x103, 354, 0x103 + (Progress * 120 / 100), 3549, 1);
- }
+#endif +}
+VOID NTAPI +BootVidFinalizeBootLogo(VOID) +{
- InterlockedIncrement(&ShutdownNotify);
- DPRINT1("Waiting for bootvid thread to finish.\n");
- KeWaitForSingleObject(&ShutdownCompleteEvent, Executive, KernelMode,
FALSE, NULL);- DPRINT1("Bootvid thread to finish.\n");
- //VidResetDisplay();
+}
+NTSTATUS STDCALL +DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) +{
- return STATUS_SUCCESS;
+}
Propchange: branches/olpc/drivers/base/bootvid/bootvid.c
--- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.def URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi...
============================================================================
--- branches/olpc/drivers/base/bootvid/bootvid.def (original) +++ branches/olpc/drivers/base/bootvid/bootvid.def Fri Jun 15 14:58:37
2007
@@ -1,15 +1,14 @@ -LIBRARY BOOTVID.DLL +LIBRARY bootvid.sys
EXPORTS -VidBitBlt@12 -VidBufferToScreenBlt@24 -VidCleanUp@0 -VidDisplayString@4 -VidDisplayStringXY -VidInitialize@4 -VidResetDisplay@4 -VidScreenToBufferBlt@24 -VidSetScrollRegion@16 -VidSetTextColor@4 -VidSolidColorFill@20
+VidInitialize +VidCleanUp +VidResetDisplay +VidBufferToScreenBlt +VidScreenToBufferBlt +VidBitBlt +VidSolidColorFill +VidDisplayString +BootVidDisplayBootLogo +BootVidUpdateProgress +BootVidFinalizeBootLogo
Propchange: branches/olpc/drivers/base/bootvid/bootvid.def
--- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.rbuild URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi...
============================================================================
--- branches/olpc/drivers/base/bootvid/bootvid.rbuild (original) +++ branches/olpc/drivers/base/bootvid/bootvid.rbuild Fri Jun 15 14:58:37
2007
@@ -2,11 +2,13 @@ <importlibrary definition="bootvid.def"></importlibrary>
<bootstrap base="$(CDOUTPUT)" nameoncd="bootvid.dll" /> <include base="bootvid">.</include> - <define name="__USE_W32API" /> + <define name="__USE_W32API" /> <library>ntoskrnl</library> <library>hal</library> <file>bootvid.c</file> - <file>bootdata.c</file> - <file>vga.c</file> + <file>vid.c</file> + <file>vid_vga.c</file> + <file>vid_vgatext.c</file> + <file>vid_xbox.c</file> <file>bootvid.rc</file> -</module> +</module>
Propchange: branches/olpc/drivers/base/bootvid/bootvid.rbuild
--- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Modified: branches/olpc/drivers/base/bootvid/bootvid.rc URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/bootvi...
============================================================================
--- branches/olpc/drivers/base/bootvid/bootvid.rc (original) +++ branches/olpc/drivers/base/bootvid/bootvid.rc Fri Jun 15 14:58:37 2007 @@ -3,8 +3,12 @@ #include "resource.h"
#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "VGA Boot Driver\0" -#define REACTOS_STR_INTERNAL_NAME "bootvid.dll\0" -#define REACTOS_STR_ORIGINAL_FILENAME "bootvid.dll\0" +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Boot Video\0" +#define REACTOS_STR_INTERNAL_NAME "bootvid\0" +#define REACTOS_STR_ORIGINAL_FILENAME "bootvid.sys\0" +#include <reactos/version.rc>
-#include <reactos/version.rc> +IDB_BOOTIMAGE BITMAP DISCARDABLE "bootimage.bmp" +IDB_BAR BITMAP DISCARDABLE "bar.bmp"
Propchange: branches/olpc/drivers/base/bootvid/bootvid.rc
--- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
Removed: branches/olpc/drivers/base/bootvid/precomp.h URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/precom...
============================================================================
--- branches/olpc/drivers/base/bootvid/precomp.h (original) +++ branches/olpc/drivers/base/bootvid/precomp.h (removed) @@ -1,46 +1,0 @@ -#include "ntddk.h" -#include "arc/arc.h" -#include "halfuncs.h" -#include "drivers/bootvid/bootvid.h"
-// -// Command Stream Definitions -// -#define CMD_STREAM_WRITE 0x0 -#define CMD_STREAM_WRITE_ARRAY 0x2 -#define CMD_STREAM_USHORT 0x4 -#define CMD_STREAM_READ 0x8
-// -// Bitmap Header -// -typedef struct tagBITMAPINFOHEADER -{
- ULONG biSize;
- LONG biWidth;
- LONG biHeight;
- USHORT biPlanes;
- USHORT biBitCount;
- ULONG biCompression;
- ULONG biSizeImage;
- LONG biXPelsPerMeter;
- LONG biYPelsPerMeter;
- ULONG biClrUsed;
- ULONG biClrImportant;
-} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
-VOID -NTAPI -InitializePalette(
- VOID
-);
-// -// Globals -// -extern USHORT AT_Initialization[]; -extern ULONG curr_x; -extern ULONG curr_y; -extern ULONG_PTR VgaRegisterBase; -extern ULONG_PTR VgaBase; -extern UCHAR FontData[256 * 13];
Removed: branches/olpc/drivers/base/bootvid/vga.c URL:
http://svn.reactos.org/svn/reactos/branches/olpc/drivers/base/bootvid/vga.c?...
============================================================================
--- branches/olpc/drivers/base/bootvid/vga.c (original) +++ branches/olpc/drivers/base/bootvid/vga.c (removed) @@ -1,1274 +1,0 @@ -#include "precomp.h"
-/* GLOBALS
*******************************************************************/
-ULONG ScrollRegion[4] = -{
- 0,
- 0,
- 640 - 1,
- 480 - 1
-}; -UCHAR lMaskTable[8] = -{
- (1 << 8) - (1 << 0),
- (1 << 7) - (1 << 0),
- (1 << 6) - (1 << 0),
- (1 << 5) - (1 << 0),
- (1 << 4) - (1 << 0),
- (1 << 3) - (1 << 0),
- (1 << 2) - (1 << 0),
- (1 << 1) - (1 << 0)
-}; -UCHAR rMaskTable[8] = -{
- (1 << 7),
- (1 << 7)+ (1 << 6),
- (1 << 7)+ (1 << 6) + (1 << 5),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2) + (1
<< 1),
- (1 << 7)+ (1 << 6) + (1 << 5) + (1 << 4) + (1 << 3) + (1 << 2) + (1
<< 1) +
- (1 << 0),
-}; -UCHAR PixelMask[8] = -{
- (1 << 7),
- (1 << 6),
- (1 << 5),
- (1 << 4),
- (1 << 3),
- (1 << 2),
- (1 << 1),
- (1 << 0),
-}; -ULONG lookup[16] = -{
- 0x0000,
- 0x0100,
- 0x1000,
- 0x1100,
- 0x0001,
- 0x0101,
- 0x1001,
- 0x1101,
- 0x0010,
- 0x0110,
- 0x1010,
- 0x1110,
- 0x0011,
- 0x0111,
- 0x1011,
- 0x1111,
-};
-ULONG TextColor = 0xF; -ULONG curr_x = 0; -ULONG curr_y = 0; -BOOLEAN NextLine = FALSE; -ULONG_PTR VgaRegisterBase = 0; -ULONG_PTR VgaBase = 0;
-/* PRIVATE FUNCTIONS
*********************************************************/
-VOID -NTAPI -ReadWriteMode(UCHAR Mode) -{
- UCHAR Value;
- /* Switch to graphics mode register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 5);
- /* Get the current register value, minus the current mode */
- Value = READ_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF) & 0xF4;
- /* Set the new mode */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, Mode | Value);
-}
-VOID -NTAPI -__outpb(IN ULONG Port,
IN ULONG Value)-{
- /* Write to the VGA Register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + Port, (UCHAR)Value);
-}
-VOID -NTAPI -__outpw(IN ULONG Port,
IN ULONG Value)-{
- /* Write to the VGA Register */
- WRITE_PORT_USHORT((PUSHORT)(VgaRegisterBase + Port),
(USHORT)Value); -}
-VOID -NTAPI -SetPixel(IN ULONG Left,
IN ULONG Top,IN UCHAR Color)-{
- PUCHAR PixelPosition;
- /* Calculate the pixel position. */
- PixelPosition = (PUCHAR)VgaBase + (Left >> 3) + (Top * 80);
- /* Switch to mode 10 */
- ReadWriteMode(10);
- /* Clear the 4 planes (we're already in unchained mode here) */
- __outpw(0x3C4, 0xF02);
- /* Select the color don't care register */
- __outpw(0x3CE, 7);
- /* Select the bitmask register and write the mask */
- __outpw(0x3CE, (PixelMask[Left & 7] << 8) | 8);
- /* Read the current pixel value and add our color */
- WRITE_REGISTER_UCHAR(PixelPosition,
READ_REGISTER_UCHAR(PixelPosition) & Color);-}
-VOID -NTAPI -DisplayCharacter(CHAR Character,
ULONG Left,ULONG Top,ULONG TextColor,ULONG BackTextColor)-{
- PUCHAR FontChar;
- ULONG i, j, XOffset;
- /* Get the font line for this character */
- FontChar = &FontData[Character * 13 - Top];
- /* Loop each pixel height */
- i = 13;
- do
- {
/* Loop each pixel width */j = 128;XOffset = Left;do{/* Check if we should draw this pixel */if (FontChar[Top] & (UCHAR)j){/* We do, use the given Text Color */SetPixel(XOffset, Top, (UCHAR)TextColor);}else if (BackTextColor < 16){/* This is a background pixel. We're drawing it unlessit's */
/* transparent. */SetPixel(XOffset, Top, (UCHAR)BackTextColor);}/* Increase X Offset */XOffset++;} while (j >>= 1);/* Move to the next Y ordinate */Top++;- } while (--i);
-}
-VOID -NTAPI -DisplayStringXY(PUCHAR String,
ULONG Left,ULONG Top,ULONG TextColor,ULONG BackColor)-{
- /* Loop every character */
- while (*String)
- {
/* Display a character */DisplayCharacter(*String, Left, Top, TextColor, BackColor);/* Move to next character and next position */String++;Left += 8;- }
-}
-VOID -NTAPI -SetPaletteEntryRGB(IN ULONG Id,
IN ULONG Rgb)-{
- PCHAR Colors = (PCHAR)&Rgb;
- /* Set the palette index */
- __outpb(0x3C8, (UCHAR)Id);
- /* Set RGB colors */
- __outpb(0x3C9, Colors[2] >> 2);
- __outpb(0x3C9, Colors[1] >> 2);
- __outpb(0x3C9, Colors[0] >> 2);
-}
-VOID -NTAPI -InitPaletteWithTable(IN PULONG Table,
IN ULONG Count)-{
- ULONG i;
- PULONG Entry = Table;
- /* Loop every entry */
- for (i = 0; i < Count; i++, Entry++)
- {
/* Set the entry */SetPaletteEntryRGB(i, *Entry);- }
-}
-VOID -NTAPI -SetPaletteEntry(IN ULONG Id,
IN ULONG PaletteEntry)-{
- /* Set the palette index */
- __outpb(0x3C8, (UCHAR)Id);
- /* Set RGB colors */
- __outpb(0x3C9, PaletteEntry & 0xFF);
- __outpb(0x3C9, (PaletteEntry >>= 8) & 0xFF);
- __outpb(0x3C9, (PaletteEntry >> 8) & 0xFF);
-}
-VOID -NTAPI -InitializePalette(VOID) -{
- ULONG PaletteEntry[16] = {0,
0x20,0x2000,0x2020,0x200000,0x200020,0x202000,0x202020,0x303030,0x3F,0x3F00,0x3F3F,0x3F0000,0x3F003F,0x3F3F00,0x3F3F3F};- ULONG i;
- /* Loop all the entries and set their palettes */
- for (i = 0; i < 16; i++) SetPaletteEntry(i, PaletteEntry[i]);
-}
-VOID -NTAPI -VgaScroll(ULONG Scroll) -{
- ULONG Top;
- ULONG SourceOffset, DestOffset;
- ULONG Offset;
- ULONG i, j;
- /* Set memory positions of the scroll */
- SourceOffset = VgaBase + (ScrollRegion[1] * 80) + (ScrollRegion[0]
3);
- DestOffset = SourceOffset + (Scroll * 80);
- /* Clear the 4 planes */
- __outpw(0x3C4, 0xF02);
- /* Set the bitmask to 0xFF for all 4 planes */
- __outpw(0x3CE, 0xFF08);
- /* Set Mode 1 */
- ReadWriteMode(1);
- /* Save top and check if it's above the bottom */
- Top = ScrollRegion[1];
- if (Top > ScrollRegion[3]) return;
- /* Start loop */
- do
- {
/* Set number of bytes to loop and start offset */Offset = ScrollRegion[0] >> 3;j = SourceOffset;/* Check if this is part of the scroll region */if (Offset <= (ScrollRegion[2] >> 3)){/* Update position */i = DestOffset - SourceOffset;/* Loop the X axis */do{/* Write value in the new position so that we can dothe
scroll */
WRITE_REGISTER_UCHAR((PUCHAR)j,READ_REGISTER_UCHAR((PUCHAR)j +i));
/* Move to the next memory location to write to */j++;/* Move to the next byte in the region */Offset++;/* Make sure we don't go past the scroll region */} while (Offset <= (ScrollRegion[2] >> 3));}/* Move to the next line */SourceOffset += 80;DestOffset += 80;/* Increase top */Top++;/* Make sure we don't go past the scroll region */- } while (Top <= ScrollRegion[3]);
-}
-VOID -NTAPI -PreserveRow(IN ULONG CurrentTop,
IN ULONG TopDelta,IN BOOLEAN Direction)-{
- PUCHAR Position1, Position2;
- ULONG Count;
- /* Clear the 4 planes */
- __outpw(0x3C4, 0xF02);
- /* Set the bitmask to 0xFF for all 4 planes */
- __outpw(0x3CE, 0xFF08);
- /* Set Mode 1 */
- ReadWriteMode(1);
- /* Check which way we're preserving */
- if (Direction)
- {
/* Calculate the position in memory for the row */Position1 = (PUCHAR)VgaBase + CurrentTop * 80;Position2 = (PUCHAR)VgaBase + 0x9600;- }
- else
- {
/* Calculate the position in memory for the row */Position1 = (PUCHAR)VgaBase + 0x9600;Position2 = (PUCHAR)VgaBase + CurrentTop * 80;- }
- /* Set the count and make sure it's above 0 */
- Count = TopDelta * 80;
- if (Count)
- {
/* Loop every pixel */do{/* Write the data back on the other position */WRITE_REGISTER_UCHAR(Position1,READ_REGISTER_UCHAR(Position2));
/* Increase both positions */Position2++;Position1++;} while (--Count);- }
-}
-VOID -NTAPI -BitBlt(IN ULONG Left,
IN ULONG Top,IN ULONG Width,IN ULONG Height,IN PUCHAR Buffer,IN ULONG BitsPerPixel,IN ULONG Delta)-{
- ULONG LeftAnd, LeftShifted, LeftPlusOne, LeftPos;
- ULONG lMask, rMask;
- UCHAR NotlMask;
- ULONG Distance;
- ULONG DistanceMinusLeftBpp;
- ULONG SomeYesNoFlag, SomeYesNoFlag2;
- PUCHAR PixelPosition, m;
- PUCHAR i, k;
- ULONG j;
- ULONG x;
- ULONG Plane;
- UCHAR LeftArray[84];
- PUCHAR CurrentLeft;
- PUCHAR l;
- ULONG LoopCount;
- UCHAR pMask, PlaneShift;
- BOOLEAN Odd;
- UCHAR Value;
- /* Check if the buffer isn't 4bpp */
- if (BitsPerPixel != 4)
- {
/* FIXME: TODO */DbgPrint("Unhandled BitBlt\n""%lxx%lx @ (%lx,%lx)\n""Bits Per Pixel %lx\n""Buffer: %p. Delta: %lx\n",Width,Height,Left,Top,BitsPerPixel,Buffer,Delta);return;- }
- /* Get the masks and other values */
- LeftAnd = Left & 0x7;
- lMask = lMaskTable[LeftAnd];
- Distance = Width + Left;
- rMask = rMaskTable[(Distance - 1) & 0x7];
- Left >>= 3;
- /* Set some values */
- SomeYesNoFlag = FALSE;
- SomeYesNoFlag2 = FALSE;
- Distance = (Distance - 1) >> 3;
- DistanceMinusLeftBpp = Distance - Left;
- /* Check if the distance is equal to the left position and add the
masks */
- if (Left == Distance) lMask += rMask;
- /* Check if there's no distance offset */
- if (DistanceMinusLeftBpp)
- {
/* Set the first flag on */SomeYesNoFlag = TRUE;/* Decrease offset and check if we still have one */if (--DistanceMinusLeftBpp){/* Still have a distance offset */SomeYesNoFlag2 = TRUE;}- }
- /* Calculate initial pixel position */
- PixelPosition = (PUCHAR)VgaBase + (Top * 80) + Left;
- /* Set loop buffer variable */
- i = Buffer;
- /* Switch to mode 0 */
- ReadWriteMode(0);
- /* Leave now if the height is 0 */
- if (Height <= 0) return;
- /* Set more weird values */
- CurrentLeft = &LeftArray[Left];
- NotlMask = ~(UCHAR)lMask;
- LeftPlusOne = Left + 1;
- LeftShifted = (lMask << 8) | 8;
- j = Height;
- /* Start the height loop */
- do
- {
/* Start the plane loop */Plane = 0;do{/* Clear the current value */*CurrentLeft = 0;LoopCount = 0;/* Set the buffer loop variable for this loop */k = i;/* Calculate plane shift and pixel mask */PlaneShift = 1 << Plane;pMask = PixelMask[LeftAnd];/* Check if we have a width */if (Width > 0){/* Loop it */l = CurrentLeft;x = Width;do{/* Check if we're odd and increase the loop count*/
Odd = LoopCount & 1 ? TRUE : FALSE;LoopCount++;if (Odd){/* Check for the plane shift */if (*k & PlaneShift){/* Write the pixel mask */*l |= pMask;}/* Increase buffer position */k++;}else{/* Check for plane shift */if ((*k >> 4) & PlaneShift){/* Write the pixel mask */*l |= pMask;}}/* Shift the pixel mask */pMask >>= 1;if (!pMask){/* Move to the next current left position andclear it */
l++;*l = 0;/* Set the pixel mask to 0x80 */pMask = 0x80;}} while (--x);}/* Set the plane value */__outpw(0x3C4, (1 << (Plane + 8) | 2));/* Select the bitmask register and write the mask */__outpw(0x3CE, (USHORT)LeftShifted);/* Read the current Pixel value */Value = READ_REGISTER_UCHAR(PixelPosition);/* Add our mask */Value = (Value & NotlMask) | *CurrentLeft;/* Set current left for the loop, and write new pixel value*/
LeftPos = LeftPlusOne;WRITE_REGISTER_UCHAR(PixelPosition, Value);/* Set loop pixel position and check if we should loop */m = PixelPosition + 1;if (SomeYesNoFlag2){/* Set the bitmask to 0xFF for all 4 planes */__outpw(0x3CE, 0xFF08);/* Check if we have any distance left */if (DistanceMinusLeftBpp > 0){/* Start looping it */x = DistanceMinusLeftBpp;do{/* Write the value */WRITE_REGISTER_UCHAR(m, LeftArray[LeftPos]);/* Go to the next position */m++;LeftPos++;} while (--x);}}/* Check if the first flag is on */if (SomeYesNoFlag){/* Set the mask value */__outpw(0x3CE, (rMask << 8) | 8);/* Read the current Pixel value */Value = READ_REGISTER_UCHAR(m);/* Add our mask */Value = (Value & ~(UCHAR)rMask) | LeftArray[LeftPos];/* Set current left for the loop, and write new pixelvalue */
WRITE_REGISTER_UCHAR(m, Value);}} while (++Plane < 4);/* Update pixel position, buffer and height */PixelPosition += 80;i += Delta;- } while (--j);
-}
-VOID -NTAPI -RleBitBlt(IN ULONG Left,
IN ULONG Top,IN ULONG Width,IN ULONG Height,IN PUCHAR Buffer)-{
- ULONG YDelta;
- ULONG x;
- ULONG RleValue, NewRleValue;
- ULONG Color, Color2;
- ULONG i, j;
- ULONG Code;
- /* Set Y height and current X value and start loop */
- YDelta = Top + Height - 1;
- x = Left;
- for (;;)
- {
/* Get the current value and advance in the buffer */RleValue = *Buffer;Buffer++;if (RleValue){/* Check if we've gone past the edge */if ((x + RleValue) > (Width + Left)){/* Fixeup the pixel value */RleValue = Left - x + Width;}/* Get the new value */NewRleValue = *Buffer;/* Get the two colors */Color = NewRleValue >> 4;Color2 = NewRleValue & 0xF;/* Increase buffer positition */Buffer++;/* Check if we need to do a fill */if (Color == Color2){/* Do a fill and continue the loop */RleValue += x;VidSolidColorFill(x, YDelta, RleValue - 1, YDelta,(UCHAR)Color);
x = RleValue;continue;}/* Check if the pixel value is 1 or below */if (RleValue > 1){/* Set loop variables */i = (RleValue - 2) / 2 + 1;do{/* Set the pixels */SetPixel(x, YDelta, (UCHAR)Color);x++;SetPixel(x, YDelta, (UCHAR)Color2);x++;/* Decrease pixel value */RleValue -= 2;} while (--i);}/* Check if there is any value at all */if (RleValue){/* Set the pixel and increase posititon */SetPixel(x, YDelta, (UCHAR)Color);x++;}/* Start over */continue;}/* Get the current pixel value */RleValue = *Buffer;Code = RleValue;switch (Code){/* Case 0 */case 0:/* Set new x value, decrease distance and restart */x = Left;YDelta--;Buffer++;continue;/* Case 1 */case 1:/* Done */return;/* Case 2 */case 2:/* Set new x value, decrease distance and restart */Buffer++;x += *Buffer;Buffer++;YDelta -= *Buffer;Buffer++;continue;/* Other values */default:Buffer++;break;}/* Check if we've gone past the edge */if ((x + RleValue) > (Width + Left)){/* Set fixed up loop count */i = RleValue - Left - Width + x;/* Fixup pixel value */RleValue -= i;}else{/* Clear loop count */i = 0;}/* Check the value now */if (RleValue > 1){/* Set loop variables */j = (RleValue - 2) / 2 + 1;do{/* Get the new value */NewRleValue = *Buffer;/* Get the two colors */Color = NewRleValue >> 4;Color2 = NewRleValue & 0xF;/* Increase buffer position */Buffer++;/* Set the pixels */SetPixel(x, YDelta, (UCHAR)Color);x++;SetPixel(x, YDelta, (UCHAR)Color2);x++;/* Decrease pixel value */RleValue -= 2;} while (--j);}/* Check if there is any value at all */if (RleValue){/* Set the pixel and increase position */Color = *Buffer >> 4;Buffer++;SetPixel(x, YDelta, (UCHAR)Color);x++;i--;}/* Check loop count now */if ((LONG)i > 0){/* Decrease it */i--;/* Set new position */Buffer = Buffer + (i / 2) + 1;}/* Check if we need to increase the buffer */if ((ULONG_PTR)Buffer & 1) Buffer++;- }
-}
-/* PUBLIC FUNCTIONS
**********************************************************/
-/*
- @implemented
- */
-ULONG -NTAPI -VidSetTextColor(ULONG Color) -{
- ULONG OldColor;
- /* Save the old color and set the new one */
- OldColor = TextColor;
- TextColor = Color;
- return OldColor;
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidDisplayStringXY(PUCHAR String,
ULONG Left,ULONG Top,BOOLEAN Transparent)-{
- ULONG BackColor;
- /* If the caller wanted transparent, then send the special value
(16), else */
- /* use our default and call the helper routine. */
- BackColor = (Transparent) ? 16 : 14;
- DisplayStringXY(String, Left, Top, 12, BackColor);
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidSetScrollRegion(ULONG x1,
ULONG y1,ULONG x2,ULONG y2)-{
- /* Assert alignment */
- ASSERT((x1 & 0x7) == 0);
- ASSERT((x2 & 0x7) == 7);
- /* Set Scroll Region */
- ScrollRegion[0] = x1;
- ScrollRegion[1] = y1;
- ScrollRegion[2] = x2;
- ScrollRegion[3] = y2;
- /* Set current X and Y */
- curr_x = x1;
- curr_y = y1;
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidCleanUp(VOID) -{
- /* Select bit mask register */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CE, 8);
- /* Clear it */
- WRITE_PORT_UCHAR((PUCHAR)VgaRegisterBase + 0x3CF, 255);
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidBufferToScreenBlt(IN PUCHAR Buffer,
IN ULONG Left,IN ULONG Top,IN ULONG Width,IN ULONG Height,IN ULONG Delta)-{
- /* Make sure we have a width and height */
- if (!(Width) || !(Height)) return;
- /* Call the helper function */
- BitBlt(Left, Top, Width, Height, Buffer, 4, Delta);
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidDisplayString(PUCHAR String) -{
- ULONG TopDelta = 14;
- /* Start looping the string */
- while (*String)
- {
/* Treat new-line separately */if (*String == '\n'){/* Modify Y position */curr_y += TopDelta;if (curr_y >= ScrollRegion[3]){/* Scroll the view */VgaScroll(TopDelta);curr_y -= TopDelta;/* Preserve row */PreserveRow(curr_y, TopDelta, TRUE);}/* Update current X */curr_x = ScrollRegion[0];/* Preseve the current row */PreserveRow(curr_y, TopDelta, FALSE);}else if (*String == '\r'){/* Update current X */curr_x = ScrollRegion[0];/* Check if we're being followed by a new line */if (String[1] != '\n') NextLine = TRUE;}else{/* Check if we had a \n\r last time */if (NextLine){/* We did, preserve the current row */PreserveRow(curr_y, TopDelta, TRUE);NextLine = FALSE;}/* Display this character */DisplayCharacter(*String, curr_x, curr_y, TextColor, 16);curr_x += 8;/* Check if we should scroll */if (curr_x > ScrollRegion[2]){/* Update Y position and check if we should scroll it*/
curr_y += TopDelta;if (curr_y > ScrollRegion[3]){/* Do the scroll */VgaScroll(TopDelta);curr_y -= TopDelta;/* Save the row */PreserveRow(curr_y, TopDelta, TRUE);}/* Update X */curr_x = ScrollRegion[0];}}/* Get the next character */String++;- }
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidBitBlt(PUCHAR Buffer,
ULONG Left,ULONG Top)-{
- PBITMAPINFOHEADER BitmapInfoHeader;
- LONG Delta;
- PUCHAR BitmapOffset;
- /* Get the Bitmap Header */
- BitmapInfoHeader = (PBITMAPINFOHEADER)Buffer;
- /* Initialize the palette */
- InitPaletteWithTable((PULONG)(Buffer + BitmapInfoHeader->biSize),
(BitmapInfoHeader->biClrUsed) ?BitmapInfoHeader->biClrUsed : 16);- /* Make sure we can support this bitmap */
- ASSERT((BitmapInfoHeader->biBitCount * BitmapInfoHeader->biPlanes)
<=
4);
- /* Calculate the delta and align it on 32-bytes, then calculate the
actual */
- /* start of the bitmap data. */
- Delta = (BitmapInfoHeader->biBitCount * BitmapInfoHeader->biWidth)
31;
- Delta >>= 3;
- Delta &= ~3;
- BitmapOffset = Buffer + sizeof(BITMAPINFOHEADER) + 16 *
sizeof(ULONG);
- /* Check the compression of the bitmap */
- if (BitmapInfoHeader->biCompression == 2)
- {
/* Make sure we have a width and a height */if ((BitmapInfoHeader->biWidth) &&(BitmapInfoHeader->biHeight))
{/* We can use RLE Bit Blt */RleBitBlt(Left,Top,BitmapInfoHeader->biWidth,BitmapInfoHeader->biHeight,BitmapOffset);}- }
- else
- {
/* Check if the height is negative */if (BitmapInfoHeader->biHeight < 0){/* Make it positive in the header */BitmapInfoHeader->biHeight *= -1;}else{/* Update buffer offset */BitmapOffset += ((BitmapInfoHeader->biHeight -1) * Delta);Delta *= -1;}/* Make sure we have a width and a height */if ((BitmapInfoHeader->biWidth) &&(BitmapInfoHeader->biHeight))
{/* Do the BitBlt */BitBlt(Left,Top,BitmapInfoHeader->biWidth,BitmapInfoHeader->biHeight,BitmapOffset,BitmapInfoHeader->biBitCount,Delta);}- }
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidScreenToBufferBlt(PUCHAR Buffer,
ULONG Left,ULONG Top,ULONG Width,ULONG Height,ULONG Delta)-{
- ULONG Plane;
- ULONG XDistance;
- ULONG LeftDelta, RightDelta;
- ULONG PixelOffset;
- PUCHAR PixelPosition;
- PUCHAR k, i;
- PULONG m;
- UCHAR Value, Value2;
- UCHAR a;
- ULONG b;
- ULONG x, y;
- /* Calculate total distance to copy on X */
- XDistance = Left + Width - 1;
- /* Start at plane 0 */
- Plane = 0;
- /* Calculate the 8-byte left and right deltas */
- LeftDelta = Left & 7;
- RightDelta = 8 - LeftDelta;
- /* Clear the destination buffer */
- RtlZeroMemory(Buffer, Delta * Height);
- /* Calculate the pixel offset and convert the X distance into byte
form */
- PixelOffset = Top * 80 + (Left >> 3);
- XDistance >>= 3;
- /* Loop the 4 planes */
- do
- {
/* Set the current pixel position and reset buffer loopvariable
*/
PixelPosition = (PUCHAR)VgaBase + PixelOffset;i = Buffer;/* Set Mode 0 */ReadWriteMode(0);/* Set the current plane */__outpw(0x3CE, (Plane << 8) | 4);/* Make sure we have a height */if (Height > 0){/* Start the outer Y loop */y = Height;do{/* Read the current value */m = (PULONG)i;Value = READ_REGISTER_UCHAR(PixelPosition);/* Set Pixel Position loop variable */k = PixelPosition + 1;/* Check if we're still within bounds */if (Left <= XDistance){/* Start X Inner loop */x = (XDistance - Left) + 1;do{/* Read the current value */Value2 = READ_REGISTER_UCHAR(k);/* Increase pixel position */k++;/* Do the blt */a = Value2 >> (UCHAR)RightDelta;a |= Value << (UCHAR)LeftDelta;b = lookup[a & 0xF];a >>= 4;b <<= 16;b |= lookup[a];/* Save new value to buffer */*m |= (b << Plane);/* Move to next destination location */m++;/* Write new value */Value = Value2;} while (--x);}/* Update pixel position */PixelPosition += 80;i += Delta;} while (--y);}- } while (++Plane < 4);
-}
-/*
- @implemented
- */
-VOID -NTAPI -VidSolidColorFill(IN ULONG Left,
IN ULONG Top,IN ULONG Right,IN ULONG Bottom,IN UCHAR Color)-{
- ULONG rMask, lMask;
- ULONG LeftOffset, RightOffset, Distance;
- PUCHAR Offset;
- ULONG i, j;
- /* Get the left and right masks, shifts, and delta */
- LeftOffset = Left >> 3;
- lMask = (lMaskTable[Left & 0x7] << 8) | 8;
- RightOffset = Right >> 3;
- rMask = (rMaskTable[Right & 0x7] << 8) | 8;
- Distance = RightOffset - LeftOffset;
- /* If there is no distance, then combine the right and left masks
*/
- if (!Distance) lMask &= rMask;
- /* Switch to mode 10 */
- ReadWriteMode(10);
- /* Clear the 4 planes (we're already in unchained mode here) */
- __outpw(0x3C4, 0xF02);
- /* Select the color don't care register */
- __outpw(0x3CE, 7);
- /* Calculate pixel position for the read */
- Offset = VgaBase + (Top * 80) + (PUCHAR)LeftOffset;
- /* Select the bitmask register and write the mask */
- __outpw(0x3CE, (USHORT)lMask);
- /* Check if the top coord is below the bottom one */
- if (Top <= Bottom)
- {
/* Start looping each line */i = (Bottom - Top) + 1;do{/* Read the previous value and add our color */WRITE_REGISTER_UCHAR(Offset, READ_REGISTER_UCHAR(Offset) &Color);
/* Move to the next line */Offset += 80;} while (--i);- }
- /* Check if we have a delta */
- if (Distance)
- {
/* Calculate new pixel position */Offset = VgaBase + (Top * 80) + (PUCHAR)RightOffset;Distance--;/* Select the bitmask register and write the mask */__outpw(0x3CE, (USHORT)rMask);/* Check if the top coord is below the bottom one */if (Top <= Bottom){/* Start looping each line */i = (Bottom - Top) + 1;do{/* Read the previous value and add our color */WRITE_REGISTER_UCHAR(Offset,READ_REGISTER_UCHAR(Offset) &Color);
/* Move to the next line */Offset += 80;} while (--i);}/* Check if we still have a delta */if (Distance){/* Calculate new pixel position */Offset = VgaBase + (Top * 80) + (PUCHAR)(LeftOffset + 1);/* Set the bitmask to 0xFF for all 4 planes */__outpw(0x3CE, 0xFF08);/* Check if the top coord is below the bottom one */if (Top <= Bottom){/* Start looping each line */i = (Bottom - Top) + 1;do{/* Loop the shift delta */if (Distance > 0){for (j = Distance; j; Offset++, j--){/* Write the color */WRITE_REGISTER_UCHAR(Offset, Color);}}/* Update position in memory */Offset += (80 - Distance);} while (--i);}}- }
-}
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev