Tag Archive: Libretto

This picture intentionally left blank ūüėČ

This is a continuation of my instructions on installing Gentoo on the Libretto 110ct.  After I got xorg-server running properly, I noticed that screen blanking and LCD powerdown did not work correctly.  They produced very strange effects and did not ultimately blank the screen or power down the backlight.  This is an old computer but I intend to leave it running constantly so I want to make sure to preserve the life of the backlight as long as possible.

First off, make sure the Toshiba experimental ACPI driver is compiled into the kernel.¬† It’s included by default in the 3.0 and many of the earlier kernel versions.¬† Then you’ll want to grab toshset.¬† Toshset is the key to this whole process.¬† You can test the driver by typing:

cat /proc/toshiba

You can test it further after installing toshset by typing:

toshset -q

If all that stuff works, you are ready to move forward.

I searched the Internet high and low and could not find what I needed.  What I wanted was something extremely light weight that would use the hooks already built into xorg-server to invoke toshset.  I still feel like this must be possible even though we went a different direction.

In my search I came across exactly one person on the Internet who sounded like she ran across the same problem as me.  On her page she said:

“So what if you really do want your backlight to turn off after a specific interval? There doesn’t seem to be a way to get Xorg to do it directly. But you can cheat: Write a script that calls vbetool dpms off. Then set that script to be your screensaver. “

Sounded close, so after more searching I finally gave up and emailed Akkana and asked her how she did it.¬† Turns out she didn’t remember but after a couple of email exchanges, we came up with an idea together of how to do this pretty easily.¬† I had the idea to use a python script to poll the mouse and keyboard nodes out of ‘/dev/inputs’.¬† I was really pleased when Akkana emailed me back the next day and said something like “Ya, good idea, here it is!”

She sent a script that monitored the everything in ‘/dev/inputs’ and then invokes a system command(whatever you specify) when the idle time counts up to a certain point.¬† I modified the script a bit so that it would also run another program when activity in those nodes is detected.

When the screen is not blanked, the polling interval is 5 seconds to keep things REALLY light weight.  I tweaked it to up the polling interval when the screen is blanked to 5 times per second so there is no perceivable lag when waking up the screen.

Did I mention this script is REALLY light weight?¬† It doesn’t even show up in top when it’s on the 5 second polling interval.¬† (I haven’t ssh’d in yet to check the .2 second interval yet).¬† So after all that buildup, here’s the script:

#! /usr/bin/env python

# idlerunner -- run a screensaver-type program when input devices are idle.
# By Akkana Peck, akkana  shallowsky (dot) com
# based on an idea from Geordy Rostad, geordy  hotmail (dot) com
# Copyright 2011, please re-use, share and improve under the terms
# of the GPLv2 or later.

import sys, os, select
import time

# how long to wait before firing the screensaver:
TIME_THRESH = 60 * 5   # seconds * minutes

# Global polling interval
interval = 5

# Read from every /dev/input device:
INPUTDIR = "/dev/input"
inputdevs = []
for devname in os.listdir(INPUTDIR) :
   try :
       inputdevs.append(open(os.path.join(INPUTDIR, devname)))
   except :
#      print "Not watching", devname
# uncomment for troubleshooting ^^^

last_event_time = time.time()

while True :
   inp, outp, err = select.select(inputdevs, [], [], .5)

   if not inp or len(inp) == 0 :
       # we're idle! But for how long?
       idletime = time.time() - last_event_time
       if idletime > TIME_THRESH :
#          print "Firing screensaver!"
# uncomment for troubleshooting ^^^
# command to blank the screen
	   SCREENSAVER = "toshset -bl off"
# Set polling to a really quick interval when screen is blanked so it wakes quickly
           interval = .2
           # Let this wait until the screensaver process finishes,
           # so we won't keep checking and fire up another copy.
#          print "Idle but only for", idletime, "secs"
# uncomment for troubleshooting ^^^

   # There's apparently no way to flush input without reading it:
   SCREENSAVER = "toshset -bl on > /dev/null"
# Switch back to longer polling interval when screen saver is off
   interval = 5
#  print "There's something there in", len(inp), "devices"
# uncomment for troubleshooting ^^^
   last_event_time = time.time()
   for f in inp :
       os.read(f.fileno(), 4096)

I’d stick idlerunner.py in ‘/usr/local/source’ (along with toshset).¬† Make sure to set it executable.¬† You’ll want to add a file to your ‘/etc/local.d’ directory to start idlerunner in the background.

echo “/usr/local/idlerunner.py &” > /etc/local.d/idlerunner.start && chmod 755 /etc/local.d/idlerunner.start

Next, in your xorg.conf file, you’ll need to add some lines to your xorg.conf file.¬† These lines will prevent the odd behavior from the built in stuff from occurring.

In the Monitor section add: 

        Option          "DPMS"

In the ServerLayout section, add:

        Option          "BlankTime"     "0"
        Option          "StandbyTime"   "0"
        Option          "SuspendTime"   "0"
        Option          "OffTime"       "0"

This all turned out even better than I had hoped because it’s independent of X entirely and blanks the local consoles as well. ¬†Props to Akkana for generously spending her time to help a complete stranger with a problem on a 15 year old computer.

I finally broke down and bought a Libretto 110CT.¬† This machine was pretty incredible for it’s day.¬† It’s a Pentium 233MHz with MMX and has 64mb of ram.¬† It had a 4.3gb hard drive in it.¬† That needed to go so I snagged another CF to IDE adapter off Amazon and put a 16gb Kingston CF card in it.

I didn’t bother trying to install Gentoo on the local machine.¬† That would be ridiculously slow and probably impossible because of the PCMCIA cdrom drivers.¬† I opted to use my much faster Celeron 466MHz.¬† I decided to dedicate that machine to building system disks for my 3 Librettos. I decided it would make life easier to grab a CF Adapter on a Bracket and stick that into the Celeron.

I’m glad I did this since this build-out required a LOT of experimentation.¬† I built up the system mostly as normal but the first deviation from the path was in the partitioning.¬† I made explicitly sure to make the first partition the /boot partition.¬† That had to stay under 1gb I believe but I kept it at 100mb since I figured that was all I needed.

Next, I used lilo.¬† In lilo, I did a couple of tricky things.¬† One of which was to use “linear” mode.¬† All these years I wondered what exactly that meant but now I know.¬† It’s a mode used for bioses that don’t support aalternate geometries such as LBA mode.¬† To be honest, I don’t think I really needed that setting on the Libretto 110ct but I’m positive that it’s necessary for a Libretto 50ct to boot a “disk” larger than a gig or so.¬† Also in lilo.conf, I specified some undocumented kernel features.¬† Let me print it here and then I’ll explain:

# If lba32 do not work, use linear:

# MBR to install LILO to:
boot = /dev/sda
install = /boot/boot-menu.b   # Note that for lilo-22.5.5 or later you
# do not need boot-{text,menu,bmp}.b in
# /boot, as they are linked into the lilo
# binary.

# If you always want to see the prompt with a 15 second timeout:
delay = 50
# Normal VGA console
# vga = normal
# VESA console with size 800x480x24 (this warrants additional experimentation)
#vga = 0x808

image = /boot/bzImage-stable
root = /dev/sda5
label = Gentoo
image = /boot/bzImage
root = /dev/sda5
label = Test

So there it is, “video=neofb:libretto”.¬† That is one of the keys to making the framebuffer work on this system.¬† Someone already did the hard work for me of putting the necessary 110ct setting straight into the linux kernel for me.¬† I just wish they had documented it somewhere so I didn’t have to go digging through kernel code to find that.

Beyond lilo, the kernel config is also somewhat notable.¬† I’m running the 3.0.6-gentoo kernel on here which is the newest currently available.¬† My .config is definitely not optimized to the point it needs to be but it’s certainly a good starting point.¬† I would only suggest using it with the identical kernel version.¬† If not, I would only use it as a guide.¬† Mainly there is the Yenta PCMCIA, Neomagic Framebuffer, Generic PATA and some other tweaks.¬† Just read the config.

Next bit of secret sauce is in the xorg.conf.¬† That drove me (and some friends) completely nuts.¬† Partially because I tried to get too clever and compile dwm without xinerama.¬† That used to work, now it doesn’t.¬† Here is the xorg.conf I’m using:

Section “ServerLayout”
Identifier¬†¬†¬†¬† “X.org Configured”
Screen¬†¬†¬†¬†¬† 0¬† “Screen0” 0 0
InputDevice¬†¬†¬† “Mouse0” “CorePointer”
InputDevice¬†¬†¬† “Keyboard0” “CoreKeyboard”

Section “Files”
ModulePath¬†¬† “/usr/lib/xorg/modules”
FontPath¬†¬†¬†¬† “/usr/share/fonts/misc/”
FontPath¬†¬†¬†¬† “/usr/share/fonts/TTF/”
FontPath¬†¬†¬†¬† “/usr/share/fonts/OTF/”
FontPath¬†¬†¬†¬† “/usr/share/fonts/Type1/”
FontPath¬†¬†¬†¬† “/usr/share/fonts/100dpi/”
FontPath¬†¬†¬†¬† “/usr/share/fonts/75dpi/”

Section “Module”
Load¬† “extmod”
Load¬† “dbe”

Section “InputDevice”
Identifier¬† “Keyboard0”
Driver¬†¬†¬†¬†¬† “kbd”

Section “InputDevice”
Identifier¬† “Mouse0”
Driver¬†¬†¬†¬†¬† “mouse”
Option¬†¬† ¬†¬†¬†¬† “Protocol” “auto”
Option¬†¬† ¬†¬†¬†¬† “Device” “/dev/input/mice”
Option¬†¬† ¬†¬†¬†¬† “ZAxisMapping” “4 5 6 7”

Section “Monitor”
Identifier¬†¬† “Monitor0”
VendorName¬†¬† “Monitor Vendor”
ModelName¬†¬†¬† “Monitor Model”
HorizSync    31.5-48.5
VertRefresh  56-72
#¬†¬† ¬†ModeLine¬†¬†¬†¬† “800×480” 40 800 864 928 1088 480 481 484 509 -hsync -vsync
#¬†¬†¬†¬†¬†¬† ModeLine¬†¬†¬†¬† “800×480” 31.5 800 860 940 1000 480 508 511 525 -hsync -vsync
#¬†¬† ¬†ModeLine¬†¬†¬†¬† “800×480” 36.769 800 848 896 1120 480 508 511 525
#    HorizSync    25-75
#    VertRefresh    50-75
DisplaySize 160 100

Section “Device”
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: “True”/”False”,
### <string>: “String”, <freq>: “<f> Hz/kHz/MHz”,
### <percent>: “<f>%”
### [arg]: arg optional
Option¬†¬†¬†¬†¬† “ShadowFB”¬†¬†¬† “off”¬†¬†¬†¬†¬† ¬†¬†¬† ¬†# [<bool>]
Option¬†¬†¬†¬†¬† “PCIBurst”¬†¬†¬† “off”
#Option¬†¬†¬†¬† “Rotate”¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† ¬†¬†¬† ¬†# <str>
#Option¬†¬†¬†¬† “fbdev”¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† ¬†¬†¬† ¬†# <str>
#Option¬†¬†¬†¬† “debug”¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬†¬† ¬†¬†¬† ¬†# [<bool>]
Identifier¬† “Card0”
Driver¬†¬† ¬†¬†¬†¬† “neomagic”
Option “DisplayHeight480”
#¬†¬† ¬†Driver¬†¬†¬†¬†¬† “vesa”
BusID¬†¬†¬†¬†¬†¬† “PCI:0:4:0”
Option “override_validate_mode”
Option “XaaNoScanLineImageWriteRect”
Option “XaaNoScanLineCPUToScreenColorExpandFill”

Section “Screen”
Identifier “Screen0”
Device¬†¬†¬†¬† “Card0”
Monitor¬†¬†¬† “Monitor0”
DefaultDepth 16
SubSection “Display”
Depth     16
Modes “800×480”
SubSection “Display”
Viewport   0 0
Depth     24

Fair warning, I’m not sure if this is totally optimal but it seems to do the trick for me.¬† Here is the make.conf I’m using now which also may not be optimal:

# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS=”-O2 -march=i486 -pipe”
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.

USE=”X mmx png python fbcon jpeg tiff xorg dri -minimal udev hal -evdev -alsa -pppd
-introspection -cairo ssl gtk ncurses -ipv6 -kde -gnome xinerama -test -savedconfig
-selinux -doc -static-libs crypt -pm-utils”
VIDEO_CARDS=”neomagic fbdev vesa”

At this point, I see no reason to leave the fbdev and vesa in the video cards section.  Some of the other flags are a bit random as well but at the moment, they are getting the job done.  Here is my current world file (for the curious):


Some of the tools are for experimentation, others are requirements.  Another notable thing is my default runlevels:

lrwxrwxrwx 1 root root   18 Jan 15  1990 dhcpcd -> /etc/init.d/dhcpcd
lrwxrwxrwx 1 root root   15 Nov  6 14:39 gpm -> /etc/init.d/gpm
lrwxrwxrwx 1 root root   17 Oct  8 08:50 local -> /etc/init.d/local
lrwxrwxrwx 1 root root   16 Nov 13 12:37 ntpd -> /etc/init.d/ntpd
lrwxrwxrwx 1 root root   21 Oct  8 17:11 syslog-ng -> /etc/init.d/syslog-ng
lrwxrwxrwx 1 root root   22 Oct  8 17:11 vixie-cron -> /etc/init.d/vixie-cron
lrwxrwxrwx 1 root root   26 Nov  6 14:21 wpa_supplicant -> /etc/init.d/wpa_supplicant

Notice ntpd, dhcpcd and wpa_supplicant.¬† I’m using wpa_supplicant to do all wifi configuration.¬† It seems to work very slick and for any type of network I want now that I figured it out.¬† Here is a sanitized version of what I put in the /etc/wpa_supplicant/wpa_supplicant.conf file:

#WPA1/2 with passphrase

#WPA1/2 with passphrase
#WEP with passphrase
wep_key0=”the airlock rules!”
#WEP hex key

You can have as many networks as you want in there and it seems to automatically jump to the best one.¬† Now, I wouldn’t actually need the wireless-tools package at all except for what I’m doing next.¬† In order to put proper status in the bar on dwm, I did a little .xinitrc scripting:


ntpdate pool.ntp.org &

while true
LOCALTIME=$(date +%A” “%D” “%I:%M%p)
RAM=$(free -m | awk ‘/cache:/ { print $4″M Free” }’)
BAT=”Bat. $(acpi -b | awk ‘{print $4 ” ” $5 }’ | tr -d ‘,’)”

xsetroot -name “$BAT | $LOCALTIME | $RAM”

sleep 15s

ROUTER=$(iwconfig wlan0 | awk ‘/ESSID:/ { print $4″ ” }’ | tr -d ‘ESSID:”‘)
SIGNAL=$(iwconfig | awk ‘/Quality=/ { print $2 }’ | tr -d “Quality=”)

xsetroot -name “Access point: $ROUTER | Strength: $SIGNAL”

sleep 10s
done &


This flashes between two status displays.  The first stays on the screen for 15 seconds.  It looks like this:

Bat. 100% | Thursday 11/17/11 12:56AM | 15M Free

The second stays up for 5 seconds and looks like:

Access Point: linksys | Strength: 29/70

None of it is rocket science but I was rather pleased with myself.¬† It also makes dwm WAY more friendly.¬† I’m convinced that dwm is the best window manager for the Libretto 110ct because it’s the lightest I know of and makes the absolute best use of the screen real estate.¬† I would urge you to give it a try.¬† If you don’t like it, fluxbox is another great choice.

All in all, I’m certain there is more experimentation to be made.¬† BTW, udev is required to recognize pcmcia cards so don’t get the stupid idea I had to pull it out.¬† Speaking of which, I’m using a D-Link DWL-G650 wifi card which is atheros 5k-based.¬† It seems pretty stable overall.¬† One thing that does not seem 100% is the power management.¬† I think it has led to a couple of lockups for me.¬† Mainly when plugging and removing AC power but certainly not always.

Bottom line…¬† How many other modern, fully patched and up-to-date operating systems do you think would run on an ancient laptop like this?¬† Not many.¬† Next task is to get X forwarding and distcc working.¬† Then I’ll be off to hack the gibson…

I’ve been trying to get some version of Linux on my Libretto 50CT for quite some time now.¬† One of my conditions for this is that I wanted it to run off of a compactflash card instead of the clunky old 800MB hard drive that originally came in the Libretto.¬† There is a problem with this though.¬† I’ve been running into a wall trying to use a 4GB CF card because of LBA mode or some other layer of translation.¬† For some reason, fdisk can’t come to grips with this.¬† Most reasonable Linux distributions need at least a gig of disk space but I searched out one that did not….¬† Damn Small Linux.

DSL only needs 200mb minimum which is perfect since I happen to have a 256mb CF card laying around.¬† I popped it into my Pentium 133 desktop system with a CF-IDE adapter.¬† I went into the BIOS to make sure to auto-detect the card in “NORMAL” mode instead of “LARGE” or “LBA” modes.¬† Then I used a Redhat Linux 5.0 disk I had laying around to fdisk the partition.¬† I created one big partition that took all of the space, made it bootable and saved/quit.

After that, I popped in the DSL 4.1.10 ISO-LINUX live CD.  It booted up into the gui and I ran:

sudo /usr/sbin/dsl-hdinstall

I made sure to run that from a black xterm so I could see the text.  At the end, when it said it wanted to reboot to finish the setup, I stopped the computer and popped the CF card into my Libretto and booted it up there.

It booted up just fine but when it got to X it was REALLY ugly and the mouse didn’t work.¬† I hit “ctrl-alt-del” to pop out of X.¬† At the prompt I ran:


I made the following choices:

  • Xvesa
  • no USB mouse
  • no mouse wheel
  • ps2 mouse
  • 2 buttons
  • 640×480 pixel
  • 16-bit color depth
  • no “choose own dpi”
  • us keyboard

After all that, I restarted X and it appeared picture perfect with a functioning mouse.

Next priority was network access so I popped in a Xircom card I’ve been toting around forever.

There is a nice control panel in DSL that allowed me to configure it pretty quickly.

Next was wireless access but the problem is that there is no support for WPA in the 2.4 kernel or in any 16-bit PCMCIA cards that will actually work in this laptop.¬† Luckily there were quite a few 16-bit PCMCIA wireless cards available.¬† I have a few but I happened to chose an Orinoco Gold Wireless PC Card since it’s a nice robust card and I have a couple laying around.

Being a security-minded individual, the best solution I can think of is implementing a wireless network with the following parameters:

  • a hidden essid
  • MAC filtering
  • WEP
  • 802.11B only
  • attached to my outside DMZ

Beyond that, I’m at a bit of a loss.¬† It’s still a WEP network afterall and there is only so much that can be done to secure it.¬† But alas, I snagged on of my extra WRT54G’s and configured it with those parameters in mind and everything is pretty much up and running flawlessly.¬† Time to rebuild another battery I guess ūüôā

When the Libretto 50CT shipped brand new in 1997, it came preloaded with Windows 95.¬† Windows 95 is kinda of useless to me though since I’m mostly interested in running dos games.

That being said, I was digging through my old CDs and found a MSDN CD I picked up from somewhere years ago that had Windows 3.1 and Windows for Workgroups 3.11. There were about 20 languages on the disc but only 3.11 had an English version.

I pulled the flash card that I’m running the Libretto off of out and stuck in in another system so I could copy the entire 11MB directory off the CD onto the card.¬† It was about 560 files total.¬† If only modern graphical desktops were 11MB’s these days…

After I stuck the card back into the Libretto, I ran setup.exe and opted for the express installation.¬† From start to finish it was done installing in under 3 minutes I think.¬† After the install it wanted me to reboot so, for the full retro experience, I was happy to oblige. When the dos prompt came back up, I typed “win” and thought of Charlie Sheen for some reason.

The Windows For Workgroups splash screen came up and the full desktop was showing in under 15 seconds or so. WFW is blazing fast on this ancient hardware.

I poked around the settings a bit and remembered how both crude and elegant this piece software was in it’s day. All of the bundled applications run flawlessly of course. I wish I had some third party software to try out though. Perhaps I’ll dig a bit deeper in my box of goodies…

Since I bought my Librettos for $15-$20/ea, I didn’t want to spend $40 on a rebuilt battery so I decided to have my friend James help rebuild a couple of the packs I have.

I have a 2 x 6-cell packs and 1 x 3-cell pack.¬† I purchased 9 “new” “Sony” 17670’s off of eBay.¬† I say new in quotes because they were not new when they arrived.¬† They obviously had been welded previously and someone ground the solder tabs off of them.¬† Also, we tested all 9 of the cells before we soldered up the pack.¬† Out of the 9, we found 3 of them at .66-1.30 volts.¬† When a Lithium Ion cell gets discharged to that point, you can kiss it goodbye.¬† It’s no longer viable because the chemistry changes and becomes less stable.¬† Another 3 were in the 2v ranges which may have been recoverable but probably not worth screwing with since it’s still outside of the specified operating range.¬† The final 3 were in the 3v range which was ok.¬† 4.2v would be fully charged and none of them were anywhere near that.¬† Not that I’d expect them to be.

I say Sony in quotes because the batteries were counterfeit.¬† We could tell this because the physical structure of the cells are all slightly different and mismatched.¬† The blue jackets are printed at a very low quality level and are wrinkled in places where they’ve been improperly shrunk.

Counterfeit batteries are a HUGE problem on eBay.¬† I firmly believe that probably over 85% of the Lithium Ion batteries on eBay are counterfeit or of inferior/dangerous quality.¬† Most of them are extremely overrated as well.¬† For instance, a 18650 cell simply cannot hold 4000MaH.¬† It’s not physically possible for on of these cells output that much energy without draining it to an unusable state.

Whatever the case, our theory is that we are sending out batteries over to China to be recycled and they are disassembling the battery packs and reshrinkwrapping them and then selling them back to us on eBay.¬† Not sure if that’s the case with all of it but I’m sure that some of that is happening.

In the picture above, you can see very clearly the example of the wrinkled jackets.  Also, notice the real Sony cells on the right have different/darker colored jackets.

We finished the 3-cell battery up anyways with the 3 half-decent cells we picked from the batch.  I tossed it in my fancy outboard charger that came with one of the laptops and so far so good.  No heat and no smoke.  Time will tell if the rebuild was even worth the trouble.

Digital X-Ray of Toshiba Libretto 50CT

Click to expand image

If you ever wanted to see how everything inside your Toshiba Libretto 50CT lines up, this x-ray pretty much shows it all.¬† The Libretto still is a fantastic piece of engineering that is is even more impressive when you consider it was released in 1997.¬† I remember going to Computer City in Kirkland back in those days and drooling over this system.¬† It impressed me at that time that you could have a fully functional and reasonably powerful PC that was the size of a video cassette.¬† It was $2000 back in those days and depending on your needs, probably worth the money.¬† I bought mine off of eBay recently for $15. ūüôā

Click to expand image

The Toshiba Libretto 50CT came with windows 95 when it was brand new but it’s far more useful to me as a DOS computer since I’m interested in playing with hex files under DOS as well as running retro games.¬† There have been a couple of challenges along the way since it wasn’t designed to be used with DOS.¬† One problem with the Libretto is that it does not have a hardware volume control.¬† It’s a very small computer so presumably Toshiba wanted to cut every piece of non-essential hardware possible.¬† I’m thankful that the sound works at all but it has been running at full blast up until now.

The Libretto uses an OPL3 sound chip but luckily that is Sound Blaster compatible.  I found a great archive of DOS sound programs.  Oddly, right at the very top of the list, I found the exact program that I needed called BCCVOL.  I downloaded the program to my Libretto and after unzipping it, typed:

bccvol ?

This gave me something like:

Master volume level = 9

Wave volume level = 9

Synthesizer volume level = 9

CD volume level = 1

Line volume level = 1

To cut a long story short, I put a line like this in my autoexec.bat and now when the computer starts up, it puts the sound at a comfortable volume of 4:

C:\utils\bccvol m4

I don’t believe the program is a TSR so I don’t think running it uses any memory.¬† I think the program simply toggles the proper registers and then exits so there should be no conflicts caused by using this program.¬† This will probably also work for most any other laptop computer without a hardware volume control on which you are trying to run DOS.

Click for a larger screenshot

This is going to be short and VERY special interest but I wanted to put it out there since I’ve searched all over the internet and back and couldn’t find the answer myself.¬† If you need to get into the bios on your Toshiba Libretto 50CT, reboot it and hold down the ESC key until it comes back with a prompt that says:

Check system.  Then press [F1] key.

After that, the rest is pretty obvious.¬† Hopefully this is useful to someone.¬† BTW, I believe that 6.60 is the latest bios revision available.¬† I have not tested this but supposedly if you click here you can get the latest bios for the Libretto 50CT.¬† Apparently you need to put it on a 720K formatted disk according to other things I’ve read but it’s hearsay and I don’t really know for sure.

I haven’t installed Windows 98 in a LONG time but my Libretto is a Pentium 75MHz so Windows 98 is a reasonable choice of an operating system for it since thus far I’ve been unable to make a modern Linux distribution work with the system.¬† I wanted to how well Windows 98 stacks up to a modern operating system.

I have a pair of Libretto 50CT’s.¬† Both of which have adapters so I can use Compact Flash cards as hard drives instead of the noisy and power-hungry 810mb drives that ship with them.¬† This allows me to swap out drives quickly and easily.¬† Since the Libretto won’t boot of the pcmcia CD-ROM drive and I no longer have the Windows 98 startup floppy, I simply placed the Compact Flash card in a different ancient system for installation purposes.¬† That worked out just fine and the install went smoothly.¬† Before I put the card into the Libretto, I did the smart thing and copied the win98 directory off of the CD-ROM onto the hard drive for future reference.¬† The reason for this follows…

Windows 98 has some idiosyncrasies compared to a more modern OS like XP.¬† Pretty much every time you sneeze on some configuration parameter, you are required to insert the Windows 98 CD, copy files off of it and reboot the system.¬† Yes, this is archaic and annoying but back in 98’s heyday, hard drives were MUCH smaller so you wouldn’t have wanted to waste a bunch of disk space storing all of the CAB(cabinet) files.¬† People complain how XP and newer systems are so bloated, this is one reason that they are…¬† The CAB files are on the hard disk AND they have MANY MANY more drivers preloaded so that many hardware devices are covered on at least some level.

After I got Windows 98 installed and the CAB files copied over, I swapped the Compact Flash card into the Libretto.¬† As expected, when it first booted up, it updated drivers for the Libretto’s hardware configuration.¬† It needed to go through a couple of reboots to get it right but they were soft reboots.¬† An advantage of Windows 98 was that it was built on MS-DOS so it had the ability to soft-reboot where it would just kill the GUI and go down to the DOS level and restart from there.¬† This saves you the pain of the POST sequence and ram count.¬† After it was booted up and running, I was surprised and impressed that ALL the hardware seemed to be working perfectly.¬† I was expecting to have to track down Windows 98 drivers for the screen and sound but the Windows 98 second edition seems to have the Libretto 50CT covered perfectly.

Next, I wanted to get some wifi working so I found a SMC 2632W 16-bit PCMCIA wifi card in my stash.¬† First I’ll mention the bad…¬† WEP only.¬† As far as I know, there are no 16-bit PCMCIA wifi cards that support WPA/WPA2.¬† No surprises here.¬† I have a sandboxed access point to connect WEP devices to anyways so no worries here.¬† On the good note, SMC still has the Windows 98 driver for this particular card available on their website.¬† I copied the driver onto another CF card on my MacBook and put it in an adapter in the PCMCIA slot in the Libretto, after I copied it to the system, I remembered something else… No built in unzipping tool.¬† Back to the web I found an old pkunzip.exe file somewhere and copied that onto the Libretto.¬† I put pkunzip in the C:\windows directory and associated it to zip files and ran into another failure.¬† Pkunzip doesn’t respect directory structure of the zip files by default so I found the dialog to edit file associations and added a “-d” parameter to the pkunzip command.¬† This fixed the issues and I was able to move on with the installation.

I inserted the card and then pointed the hardware wizard at the desktop where I had unzipped the SMC drivers.¬† This went fine but the driver is REALLY kludgy.¬† There is no way to perform a scan of available access points(something else we take for granted).¬† Obviously I knew the AP I wanted to connect to but it took a reboot before it was all working properly.¬† After the reboot, I tried a ping….¬† SUCCESS!¬† So then I tried internet explorer and the home page it was set to actually crashed it.¬† I opened it back up and stopped the page from loading and then hit up google.¬† OUCH!¬† Surfing modern sites on this thing is SLOOOOOWWWW.¬† Oddly, surfing web 1.0 sites is just fine though.

The next thing I tried to do is Windows Update.¬† I went to the page and was informed that support had stopped in 2006 and only the updates to that date would be available.¬† Unfortunately, this did not prove to be true.¬† It appears that Microsoft has finally shut down the Windows 98 update servers entirely.¬† Not that I blame them but it would have been nice if they just scaled them down to one old server or something.¬† Oh well, I won’t be using this thing outside of a firewall anytime soon.

The last thing I did was put a keyboard banger program on this system for my son to mess around with.¬† He got a kick out of it and played with it for a good 45 minutes.¬† I think he likes this system because it’s so small.¬† His 2.5 year old fingers are probably the perfect size for touch typing on a Libretto.¬† ūüôā

While it may seem pointless at first I actually have a halfway legitimate reason for going through the effort.  First off, of course, I wanted to see if it could be done and how usable it would be.  Second, I was sick of taking the compact flash card out of my Libretto 50ct and sticking it in my Mac to put new files on the system.  I figured it would be easier to punch up a URL and download the file directly.

Now that the “why” is out of the way, now we need to cover the “what”.¬† What you need is a wireless card that has MS-DOS drivers available for it.¬† There are a couple but for me, the easiest to find was an Orinoco Silver/Gold card.¬† Part of the reason I went with this card is that it is NOT cardbus.¬† It’s a 16-bit pcmcia card so it works in my Libretto 50ct.¬† The Orinoco card uses an Agere chipset so in theory this may work for other similar cards.¬† Once you’ve obtained your card, you will need the driver which is available on this server.¬† That little zip file on there contains everything you need.

Now for the how…¬† The first part can be a bit interesting.¬† After you’ve stuck your card into the laptop and unzipped the file, you are pretty much interested in two directories from the zip file.¬† First you’ll need to deal with what is in the CAD directory.¬† Read the readme.txt first and you will find out that you need to run MSD(Microsoft Diagnostics) and find a free location in memory to use as a base address.¬† In the readme, the suggest using:


However this didn’t work for me.¬† I found another location that was suitable and inserted a line similar to this one into my config.sys:


That is what worked for me, your mileage may vary.¬† Reboot your computer and see if that works.¬† By working, I mean not getting an error.¬† After that is done, you’ll need to deal with the files in the PACKET directory.¬† First you’ll want to edit the PACKET.INI file.¬† This may disappoint some of you here but you only have two options which are open or WEP.¬† Hopefully you have a WEP router that is off in the corner of your network where it cannot hurt anyone.¬† In the packet.ini file, you’ll want to set the following lines most likely:

Wireless_Network_Name = ANY (put in your ssid)

Station_Name = John Does Notebook PC (obvious)

;Enable_Encryption = N (uncomment and change to “Y”)

;Key1 = abcde (uncomment and put in your key.¬† Use “0x prefix for hex)

After these things are done and the file is saved, you can try out your settings with:

wvlan42 /L

This should finally turn the light on your card on.¬† This means everything is probably working but it’s pretty hard to say at the moment because you don’t have ping or anything installed by default with MS-DOS.¬† Feel free to add that line to your autoexec.bat if you don’t want to have to worry about it in the future.¬† Now it’s time to download Arachne which is a fully graphical web browser for MS-DOS.¬† It’s the best one that I tested and the only one I could get to work.¬† Once you start up Arachne, you’ll need to set up some network settings.¬† The drivers above handle your layer 1 and layer 2 functions.¬† Arachne will pretty much handle the rest itself.¬† When I configured Arachne, I chose “Resident packet driver” and “bootp/dhcp”.¬† After that, you need to either restart or hit the “use new settings button.¬† If all goes well, you should be surfing like it’s 1999 all on your MS-DOS based laptop.

Powered by WordPress. Theme: Motion by 85ideas.