Linux on Obsolete Displays Project Page

tux test pattern


Interfacing older, non VGA displays to systems with VGA hardware without the help of a hardware scan converter.

The Forgotten

Almost every linux embedded project out there today uses some form of LCD text or graphics display.  CRTs have been abandoned as bulky and obsolete.  But not all are.  Forgotten are the tiny portable b&w televisions you can pickup for almost nothing online or at your local drugstore.    These are indeed small,  and capable of displaying readable 80x25 text and 640x480 graphics.  Best of all is the price, less than $20, often free.  No LCD can compete here.  Coupled with an equally inexpensive wyse winterm (shown), this linux based system costs a lot less than a crankup laptop or anything you'll ever see at a tradeshow.  



Cost for this setup came in at ~$35.   Total  power consumption is low enough to be run off  the batteries or the wall power supply included with the TV.

Projects

Wyse Winterm
 
 Very cheap and low power consumption. Has uses in portable applications.

Kaypro II Extreme
 
 A luggable Kaypro running linux and posts bios with the original factory TTL monitor

TV in a PC
 
  PC with B&W tv as embedded display

Tiny Terminal
 
  The smallest 80 column PC terminal display for < $20

DPMS Power Strip
 
  Adding power management capabilites to old displays, etc

The CRT LCD Hybrid
 
  The Easy LCD Backlight Fix


Works in progress


PC in a (tiny) TV
PC in a TV boombox

The old Linux MP3 Players Project page

    Earlier projects and old links (page was made before the Ipod, or even the Rio existed)

BIOS Modifications

This is the most tricky part.  PC's do not POST an NTSC or PAL compliant video signal, but rather a basic VGA mode. It is possible to modify the BIOS to reprogram a VGA card to output the correct sync and scanrate.  You will needed a very good understanding of assembly and disassembly to patch your PCs system BIOS properly (and even moreso if you want to modify a VGA card bios) .  If you are up to the task, and willing to dig deep, check out:

http://www.ccs.neu.edu/home/bchafy/ntscbios.zip

Patching the system BIOS may be easier, as it is flash based and there are usually utilities to accomplish this.   A VGA BIOS is often ROM based, requiring at the very least a new EPROM/flash part and a programmer as well as an eraser (because it never works right the first time).


(The old school way of doing it, shown here, VGA cards with socketed BIOS, Datarase II eraser, PB10 programmer, and some eproms. I did it this way for the kaypro project).

Of course you could also buy a scan converter, that's the easy way. But depending on how many of these you are doing, this could get expensive.

What about Linuxbios?

The chipset and firmware/bios idustry is a multibillion dollar industry not particularly friendly to open source or open specs.   Obtaining useful chipset information is often left to long hours reading cryptic cots bios binaries with a disassembler.  The original IBM PC may have been open architecture, but that was about it.  These days, PC's are very closed with few similarities to the original IBM PC.  In fact, even the well known PC bios compatibility layer that every PC starts up with may no longer stand the test of time.  Check out http://www.uefi.org/   
Linuxbios works for some platforms.  Most notably AMD's opteron.  And it does work with the geode with some hacking.   But the task of reverse engineering a BIOS is in many ways a necessity to understand the real hardware.  Still the Linuxbios framework has the most promise.
Fortunately the Award BIOS has become much more understandable recently.   Check out  Pinczakko's excellent pages at http://www.geocities.com/mamanzip/


Interfacing to a TV

There are many ways to interface to a TV (color and b/w), some of them requiring opening up the set and taping out the video and sync lines.
B/W sets are of course easier as there's only 3 connections (video, hsync, and vsync).  For color, there is 5 (r,g,b hsync, vsync).  On some sets these signals are often internally combined as one composite line, even if there's no composite or AV input on the back.  Sometimes you cannot find the separate video and sync lines because the video generator IC feeds a composite signal to directly into the video amplifier IC.   Ive seen this with newer b/w sets, but composite under b/w is no worse than a direct video connection.  (composite video is worse only in color sets because the color information is represented by a color burst which can have noise and accuracy problems).  A b/w composite video to a b/w set is as clear as a direct connection  (the sync pulse information does not interfier with the video data).
Note that TVs with SCART connectors are almost nonexistent in the US.

RGB on mono display's

From CGA onward, any video card outputs in color with separate Red, Green, and Blue signals.   This is overkill for a b/w or greyscale display.   For example one common circuit used to convert VGA to a mono composite video signal is:

                       1K ohm    
Hsync o--------/\/\/------------+
|
1K ohm |
Vsync o--------/\/\/------------+
|
200 ohm |
Green Video o----+---/\/\/--+---------+--------o Composite Video In
| ^ | (Termination = Hi Z)
\ +----+
/ +--------o GND of monitor
\ 82 ohm |
/ |
| |
GND (shield) o----+--------------------+

This circuit works fine for a single b/w composite monitor.  But the Blue and Green lines are not used, which is kind of wasteful.   Depending on what you are trying to achieve it would be better to combine the Red, Blue, and Green lines Such as:


 RED   1 >-+-----------/\/\/-----+
           |           82 ohm    |
           +-/\/\/--+            |
            180 ohm |            |
 BGND  6 -----------+            |
                                 |
GREEN  2 >-------------/\/\/-----+------+
                       22 ohm    |      |
                                 |      |
 BLUE  3 >-+-----------/\/\/-----+      \
           |           240 ohm          / 100 ohm
           +-/\/\/--+                   \
            100 ohm |                   /
 BGND  8 -----------+                   |
                                        |
                                        |
                       1K ohm           |
 Hsync   --------------/\/\/------------+
                                        |
                       1K ohm           |
 Vsync   --------------/\/\/------------+---------o Composite Video In

 GND     -----------------------------------------o Composite GND

Or do what I did, and make a circuit to drive 3 separate monitors from a single vga card:

                       1K ohm 
                   +---/\/\/------------------+
                   |   1K ohm                 |
                   +---/\/\/---------------+  |
                   |   1K ohm              |  |
        Hsync o----+---/\/\/------------+  |  |
                                        |  |  |
                       1K ohm           |  |  |
        Vsync o----+---/\/\/------------+  |  |
                   |   1K ohm           |  |  |
                   +---/\/\/------------)--+  |
                   |   1K ohm           |  |  |
                   +---/\/\/------------)--)--+
                                        |  |  |
                       100 ohm          |  |  |
    Red Video o--------/\/\/------------+--)--)-------o Composite Video In 1
                       100 ohm             |  |
  Green Video o--------/\/\/---------------+--)-------o Composite Video In 2
                       100 ohm                |
   Blue Video o--------/\/\/------------------+-------o Composite Video In 3


      Red Gnd o----------------------------------------o Composite Gnd 1
    Green Gnd o----------------------------------------o Composite Gnd 2
     Blue Gnd o----------------------------------------o Composite Gnd 3



The Cable

cable    

Made from mostly trash. The case is a dental floss box.  The VGA cable and resistors came from a dead monitor.


The Poor Man's Triple Headed Display

Time to test the cable.  I used three composite monitors from the C=64 era.

R, G, and B are unique independent video signals

Each color line is in effect a completely independent video signal (with only the sync pulse and dot clock shared).  It is possible to have up to 3 separate greyscale images in the same video memory space.  Here's some examples:

These images look strange on a color screen.  But when each color signal is separated to its own display, the effect becomes clear.





How to Create RGB Triple exposures

1) Open up to 3 images in the gimp
2) For each image, convert them to greyscale, then encode each in red, green, and blue.  
   Gimp's "colorify" utility does all of this in one step:  
Filters->Colors->Colorify
3) Save each colorified image to a new bitmap (.bmp) file.
4) Open each of these newly created bitmaps in the gimp.
5) Copy and paste one of the colorified images over the other. (say the red one over the blue).  
   Doing this simply places a new image layer on top of the old one. The old one still exists, 
   but just not visible at the moment.

6) Now merge the layers.
   Go to Dialogs->layers.
   Select Addition mode in the pull down.
   You will see the two images combined.
7) Repeat steps 5 and 6 for the last colorified image, pasting over the newly combined layer, 
   then merging it using the layers dialog, Addition mode.

   I found that for this last step, I needed to close then reopen the layers dialog in order 
   to merge the last image.

8) Save the result to a new bitmap, you're done.

9) You can test the results by opening the new image in the gimp and pull down
   Filters->Colors->Decompose.  Uncheck "Decompose to layers" and press OK.

howto.jpg
 

Compression

JPEG compression mangles the color information, making for some interesting but undesirable results.  PNG and GIF are lossless, so these formats are the ones to use (png for its wide bit range and gif for animations).
Creating a jpeg compressor that works with individual color spaces is possible,
ie treating an rgb image as three distinct greyscale images to compress
(with a result filesize no larger than 3x the largest greyscale compressed image).  But this is left as an exercise for the reader.

crowd_test.jpg     crowd_test.gif     crowd_test.png


Video

The same principal apples for video as fixed images.  Ive looked at the sources for mplayer and it is possible to get it to work with some modifications.  This can have many uses. 

Given that a PC can have as many video cards as PCI slots it's possible to make a large array of video monitors.  Typically, a PC has 3 or 4 as well as the onboard video card (or AGP),  making for a possible total of 15 unique displays from a single PC.   Consider the possibilities:

tic-tac.jpg        :-)


Will this work with VGA monitors?

Ive never tried it myself, but dont see any reason why not.
Each color line from the vga card would just be a shared RGB input to a
vga monitor, making the color vga monitor monochrome and in theory any
single color with some variations on the respective vga display rgb inputs.

hsync -------+-/\/\/--- vga1 hsync
             |
             +-/\/\/--- vga2 hsync
             |
             +-/\/\/--- vga3 hsync

vsync -------+-/\/\/--- vga1 vsync
             |
             +-/\/\/--- vga2 vsync
             |
             +-/\/\/--- vga3 vsync

red -----------------+- vga1 red
                     |
                     +- vga1 green
                     |
                     +- vga1 blue

green ---------------+- vga2 red
                     |
                     +- vga2 green
                     |
                     +- vga2 blue

blue ----------------+- vga3 red
                     |
                     +- vga3 green
                     |
                     +- vga3 blue

  red gnd --------------- vga1 gnd
green gnd --------------- vga2 gnd
 blue gnd --------------- vga3 gnd

(resistors are like 0-1kohm.  When in doubt, use a 1k potentiometer).

To display a greyscale single color, use resistors or remove an input entirely.
For example to get an amber/yellow color on vga1, do not connect the 
blue input and tie it to ground).

Files

Modelines, FrameBuffers, and TextModes
DOS Test Tools




Bryan Chafy
bchafy@ccs.neu.edu