Tuning the Target
A DPF must start the image viewer automatically, run with a read-only filesystem, and automatically copy images from a USB stick. Auto-starting a program is trivial, but the other changes make the system unusable for further development. I simply copied develop.hd to create pixie.hd and modified that drive image. The modified files are in the cfg-pixie.fd floppy image.
I tweaked the rc.S startup script to remount the root filesystem read-only; copy /tmp, /var, /dev, and /etc to four tempfs filesystems in RAM; then mount those copies as read/write filesystems atop the read-only originals. Programs can thus write data normally, but that data vanishes when the power goes away. If the system has enough RAM, this works like a champ.
Listing Four (available electronically) shows the usb-storage hotplug script that reads images from the USB stick. This task was complicated by the need to remount the root filesystem in read/write mode. I indulged the luxury of just rebooting at the end of the script to get everything running again.
The find command fetches images from all directories on the USB stick, as its root directory can hold only 100-odd files. The script lowercases the filenames so the image viewer can simply display *jpg files; fbi can actually handle many other image formats, but I didn't need them.
After verifying that on the ThinkPad, I removed Slackware's kernel source and development packages, shrank its partition to 400 MB, and expanded the third partition to fill the remainder. While 400 MB isn't a particularly svelte system and you can do much better, I resized 500 camera images to 800×600 and found they occupy only 41 MB. There's room for 18,000 more pictures in 1.5 GB.
Copy the final disk image to the CF card and fire it up. The 560Z's LCD isn't as good as contemporary panels, but for 20 bucks it's unbeatable. Give it a try and learn something while you do!
Use ImageMagick's mogrify utility to resize entire directories of images. It's no good for a single image, but it makes short work of (a copy of) your entire collection.
I wedged the 560Z's power switch in the ON position so it starts up when it's plugged in. APM reduces the power dissipation to 500mA at 16.5 V, about 10 W including losses in the wall wart. That's slightly more than a single incandescent night light and, in fact, half the power goes to the LCD backlight.
After this success, convert a PDA into a DPF belt buckle (egokast.com).
Yup, Jefferson Airplane, Volunteers, "We Can Be Together," 1969.
Another eBay experience (www.truetex.com/ebayfraud.htm).
QEMU home (www.qemu.com).
FreeDOS project (www.freedos.org).
ThinkPad DOS config (www-307.ibm.com/pc/support/site.wss/RMIE-3AXE3E.html).
ThinkPad tpctl (tpctl.sourceforge.net).
fbi picture viewer (linux.bytesex.org/ fbida).
zgv picture viewer (svgalib.org/rus/zgv).
Linux on Laptops (www.linux-laptop.net).
Eviscerating a ThinkPad 560Z (virtig01.net/personal/works/PictureFrame-HowTo.php).
ThinkPad info (www.thinkwiki.org).
Master Boot Record (en.wikipedia.org/wiki/Master_boot_record).
Disk image creation (darkdust.net/marc/diskimagehowto.php).
Slackware boot sequence (openskills.info/infobox.php?IDbox=1042).
Linux remote serial consoles (tldp.org/ HOWTO/Remote-Serial-Console-HOWTO).
Automatic login (linuxgazette.net/issue72/chung.html).
Writing udev rules (www.reactivated.net/writing_udev_rules.html).
ImageMagick image manipulation (www.imagemagick.org).