Disclaimer

The following is what I think is true about startup screen on the X1. Although I modified my startup screen sucessfully, messing with firmware is a great way to screw up your projector.

Use the information and utilities on this site at your own risk!!!

Conversion Utility

I have written a win32 command-line program, ScreenMod, to modify the firmware of the Infocus X1 to display a custom startup screen. Read this entire document to understand what is happening before you use the utility!

Download ScreenMod

Package Contents

readme.htmlThis document.
screenmod.exe Windows command-line modification program.
cross800x600.bmp The background I used to replace my startup screen.
X1_v15_oemcfg.MODIFIED.he_Final result: the modified oemconfig I flashed my firmware with.

ScreenMod Usage

At the command line, run

screenmod infile.bmp originalx1oemconfig.he_ modifiedx1oemconfig.he_

The program will read the BMP, convert it to the format used by the firmware, and replace the data in the original firmware with the encoding of your input BMP.

Compatability

Firmware:
X1 firmware v3.6-v4.3

Input Image
800x600 24-bit uncompressed BMP

Errors and Warnings

The input BMP must be 800x600. The program will exit if the BMP is not 800x600.

As you continue reading you will see why some colors may not work. screenmod will warn you if it sees one of these colors. It will replace it with a similar color.

The firmware has limited space, and the size required for each image is dependant on its complexity. Therefore, some complex images may code to a larger space than allowed. A conservative estimate of the space available (216 bytes) was made, and if the coded image exceeds this size, screenmod will exit with an error message.

Final Words

I've done this, and it worked for me. If you read below, you'll see that I believe that I understand the format, but I can't gaurantee it, nor can I gaurantee that screenmod is bug-free. I've done my best, it worked for me, and has for others as well.

Good luck, and enjoy! Please email me (my email address is displayed by screenmod when ran) if you have any comments.

Startup Screen Reverse-Engineering

Image Location

It's in oemconfig. This makes sense -- OEMs should be able to brand the startup screen however they like. I found it because the little-endian words 0x2003 (800) and 0x5802 (600) appeared next to each other. They are at address 0xE0000.

Image Format

It is RLE coded. This also makes sense. Even an 8bpp version would require 480,000 bytes raw.

Pixels are coded in 16bpp format. Red and blue get 5 bits each, and green gets 6. This is typical of 16-bit color. The format is therefor RRRRRGGGGGGBBBBB for a 16-bit chunk.

The run data begins at 0xE001A. Data chunks are 16bits long. If the little-endian LSB of the current chunk is 0xCD, this indicates a run. The length of the run is the MSB. The pixel value of the run is the next 16-bit chunk. Runs appear to be between 2 and 204 pixels long. Runs must terminate at the end of a line.

Non-runs are simply specified with their raw value.

So, the stream CDCC D009 CDCC D009 CDCC D009 CDBC D009 is 3 runs of length 204 of color 0xD009, followed by another run of color 0xD009 of length 188. 3*204+188=800. End of line!

Things get a little more interesting a few lines lower:

CDCC D009 CDCC D009 CDCC D009 CD57 D009 7122 CD02 B55B CD16 D009 511A 566C 799D D55B CD48 D009

The familiar 3*204 run of D009. Then, only 87 more. Then 7122. Since CD is not in the LSB, treat as a single pixel. Then a run of two B55B values. Then a run of 22 D009. Then 4 more individual pixels. Then a run of 72 D009 to complete the line.

Easy! Continue reading in this manner and you can extract the startup screen. I imagine this applies to other Infocus projectors as well!

Of course, I admit that I'm not 100% confident that I have the RLE system down precisely. Obviously a single pixel which happens to have CD in its LSB cannot be coded this way. I'm not sure how Infocus envisioned handling this (one possibility is to make a 1-length run, but I don't know if that will work). It makes me believe I understand the run format enough to use it, but that there still may be one or two details I'm missing. Nevertheless, I was able to extract the startup screen flawlessley using this method.

Encoding an Image

Simply conduct the reverse of the decoding process, observing the 204-length run limit and no runs extending beyond a line.

Make sure you somehow handle pixels with CD in their LSB.

screenmod is an implementation of this coding strategy.