Windows CE Bootloader

A collection of posts about a Windows CE bootloader
Platform Builder: How to Determine the Baud Rate of the Serial Debug Port
Every once in a while, someone finds my blog by searching for how to determine the baud rate of the serial debug port. So I thought that I would look into how to answer that for them. First, try 38400, 8 bit, no parity, 1 stop bit and no handshaking. This is a common setting for the serial debug port. Second, read the documentation for your board if you bought it in a system from an OEM. Last, look in the code. If you need to do this, then you must be the OEM and using a BSP from either Microsoft ......

Posted On Monday, January 12, 2009 11:08 PM | Comments (0)

Platform Builder: KernelRelocate()
KernelRelocate() copies initialized global variables to RAM, and sets uninitialized global variables to zero. KernelRelocate() is called from both the bootloader and the kernel. If you are more familiar with writing applications that run within an Operating System (OS) then needing KernelRelocate() is different. When you run an application within an OS, initialization of global variables is automatically performed for the application by the OS. But, the bootloader and the kernel are the OS, so they ......

Posted On Friday, January 2, 2009 1:32 PM | Comments (0)

Platform Builder: Communicating Between the Bootloader and the OS
In the article Platform Builder: Setting Default Memory Divisions, I discussed using pOEMCalcFSPages() or pfnCalcFSPages() to set the memory division between storage and program memory. In that article I presented the following function: DWORD OEMCalcFSPages(DWORD dwMemPages, DWORD dwDefaultFSPages) { DWORD Percent = 50; return ( dwMemPages * Percent ) / 100; } Then I suggested that with enough knowledge of your BSP and an imagination, you could dynamically set the percent value instead of using ......

Posted On Friday, December 11, 2009 12:34 PM | Comments (1)

Platform Builder: Creating a CEPC Splash Screen
The CEPC BIOSLoader is capable of displaying a splash screen while it loads the OS. The splash screen is a picture that you can create. The picture is a Windows bitmap file with a .BMP file extension, or a compressed Windows BMP file with a .BMX extension. The compressed Windows bitmap file is created by first creating the BMP file and then running bincompress to create the BMP file. I don’t know the advantages of using a BMX vs BMP file for the splash screen. BIOSLoader loads the splash screen based ......

Posted On Sunday, July 12, 2009 6:38 PM | Comments (2)

Platform Builder: Setting up a USB Key to Run BIOSLoader
Platform Builder Help provides instructions for setting up a floppy disk to boot using BIOSLoader. Really a floppy disk? Who uses a floppy disk anymore? Many of us need to boot from more modern storage devices, especially devices that are readily available for purchase. This article will focus on USB mass storage devices, also known as USB Keys or USB Sticks. For those of you who have been working with x86 Wintel boxes for years, setting up a boot device is probably simple. But, many of us are just ......

Posted On Sunday, July 12, 2009 3:29 PM | Comments (9)

Platform Builder: Eboot Romimage Errors
When building a bootloader and using makefile.inc to run romimage.exe, error messages and important warning will be directed to the build.log file instead of to the build output. For that matter, all of the romimage output is put in the build.log. For more on building a bootloader see Platform Builder: Building a Bootloader For more on the Platform Builder build system take a look at: Summary of Building Windows CE which lists the articles that I have written about building Windows CE using Platform ......

Posted On Saturday, April 11, 2009 2:27 PM | Comments (0)

Windows CE: What is a Bootloader?
A bootloader is a small program that handles the reset vector and starts up a system. Bootloaders are not all equal, so writing about them is difficult to do without discussing the optional things that a bootloader might do. The only reasons to have a bootloader is to provide a mechanism for updating the software on a device or to retrieve the OS from some storage medium and move it to RAM to run which are the “loader” parts of the bootloader. Anything else that a bootloader might do are optional. ......

Posted On Monday, March 30, 2009 8:50 PM | Comments (4)

Platform Builder: Understanding the Serial Debug Port
Recently, there have been a few questions in the newsgroups about the serial debug port. The questions were along the lines of: · Which COM port do I use for debug output? · How do I change the COM port that is used for debug output? These are actually quite common questions, so I thought I would address these. Every CPU and/or UART is different so I won’t give you a how to lesson, but I will provide you with enough information to look inside your BSP to figure it out for yourself. First, let’s address ......

Posted On Monday, September 8, 2008 9:32 PM | Comments (2)

Platform Builder: Building a Bootloader
Building a bootloader isn't much different than building a driver or an application. In fact, if you have already built your project more than likely your bootloader has already been built. But what if you want to make a change to the bootloader? Then knowing how to build it, and more important what happens when you build it, will help get from changing code to testing faster. The first step is to find the source code. The source code may be in different places depending on the version of Windows ......

Posted On Thursday, June 5, 2008 4:39 PM | Comments (0)

Windows CE: Bootloader Splash Screen
uI am sitting here at my desk experiencing some local network problems and thought I would take this time to discuss creating and using a splash screen in a bootloader. My target OS is Windows CE, but this applies to any code that needs to draw to a display without the use of an OS since this is a bootloader. What is a bootloader splash screen? The bootloader is a small peice of code that runs when the reset vector is processed. This code's primary purpose is the initialize some hardware and look ......

Posted On Wednesday, May 14, 2008 10:50 AM | Comments (6)