DFI 486

Last modified: Sat Feb 22 17:58:07 EST 2014

Form factorBaby AT
CPU66 MHz 486 DX2 (P24), sSpec SX807
CPU socket486 socket
CPU maximum power dissipation6.3 W
MotherboardDFI 486-CCV Rev. A
ChipsetContaq 82C596 A
Last BIOS version1992-11-11
RAM8 MiB (8 × 1 MiB 70 ns parity SIMM, 30-pin)
Upgraded to 32 MiB (8 × 4 MiB same)
L2 cache128 KiB


Next up from the Freecycle pile was a 486 that appeared to be loaded with add-in cards.  The VGA card, sound card, and modem all stood a chance of being useful, but what really caught my eye was the non-SoundBlaster game port.  Getting two joysticks to work on a SoundBlaster game port requires a soldering iron due to some of the pins being commandeered for MIDI.  This game port might meet the original spec and work without modification.

Why would I need two joysticks?  To play Llamatron of course.


Then I opened the case, and what I found was hurl-worthy.

Yuck.  Ribbon cables must breed like hangers.


And what are these mondo long slots?  Could it be... VESA Local Bus?  The horror.  The shame.  The obscurity.

VESA Local Bus (VLB) was a flash in the pan, a dead-end interface.  I leapfrogged the 486 generation of processors when they were current, so this was my first encounter with it.  This VGA card is useless in any other system, as is the I/O controller card to which the IDE hard drive, floppy drives, serial ports, parallel port, and game port are all connected.


In another bad omen, the CD-ROM was cabled to an IDE interface on a sound card with the same branding (Aztech).  The sound card does not have a generic CD-ROM interface like some later models have; instead, it has three separate IDE-ish headers labelled Sony, Mitsumi, and Panasonic.  The model CDA 268-01A CD-ROM was connected to the Mitsumi header and presumably was manufactured by Mitsumi.  I noticed that it lacked the Master/Slave/Cable Select jumper that IDE CD-ROMs typically have.

The CD-ROM showed up neither in the BIOS nor in Smart BootManager.  As expected, connecting the CD-ROM to the main IDE channel did not work.  But neither did it work to connect a later model, generic ATAPI CD-ROM to the main IDE channel.  Bogus!


The DFI 486-CCV Rev. A motherboard has an AMI BIOS.  DFI (Diamond Flower, Inc.) still exists as a manufacturer of motherboards both mainstream and special-purpose, but unfortunately, their BIOS downloads did not include an update for this old computer.  Abandon all hope of booting from CD.

After testing a kernel with a boot floppy, I set aside the 210 MB hard drive that came with the computer and installed a couple of larger hard drives that I had pre-loaded with Slackware 12.1 in a linear RAID (JBOD) configuration.

Getting Slackware to run with only 8 MiB of RAM was challenging.  The motherboard supports a maximum of 32 MiB.


The Trident TVGA 9400CXi VGA card is supposedly supported by the Trident driver of X.Org, but it didn't detect the card.  The generic VESA driver worked and fired up a 1024×768×8bpp interlaced mode.  VGA bandwidth as judged by scrolling text in xterms was surprisingly good for an unaccelerated driver.


I had some issues getting the modem to be detected.  It turned out that the DTC2278VL rev "B" multi I/O controller card was mis-jumpered such that the conflicting second serial port was only half-disabled.  The address was disabled but not the IRQ.

The microscopic print says it is a Best Data model 1442FQ, 1442VTQ or 1442FTQ.  The commands ati0 and at+fclass=? revealed it to be a 14.4 kbit/s Class 1 fax modem, and one which was obviously Linux-compatible.  Such a modem has its uses.


Things went downhill after that.  I could not get the sound card to work.

The documentation for the snd-cs4231 kernel module states, "This module does not support autoprobe thus main port must be specified!!!"  My only clue about what port to specify was the jumper label, Base Address 22XH.  So I specified port=0x220 and tried every reasonable guess for irq, dma1 and dma2, but it never worked.  I even tried changing the "CONFIG MODE" jumper from "SOFTWARE SETTING" to "EEPROM SETTING" on the chance this would avoid the need for some driver that I don't have, but to no avail.


Aztech obscurely supports their legacy products, but I wasn't able to find any of that at the time, much less figure out how to get it working from plain DOS.  Thus I had no configurator for the Aztech sound card nor even any documentation on what its default setup might be.  As it was, with no configuration, DOOM was functional with settings of port 0x220, IRQ 5 and DMA 1.  However, Llamatron hung before long and Mpxplay hung immediately.

I went back and tried various Linux drivers with the configuration validated under DOS and found that the snd-sb8 driver would work with those settings for a few seconds, followed by a total system hang.

(2013-03:  What was actually needed was the azt1605 module that had not yet appeared in the mainline kernel.  Now it works.)


I had better luck replacing the Aztech sound card with an ESS ES1868 ISA PnP AudioDrive card salvaged from a PC someone left at the curb on trash day.  The ALSA driver for this card was apparently broken, but ESS at the time was good enough to support their legacy products and to provide a DOS configurator for them.  After using their DOS setup utility to perform the PnP configuration and setting the BLASTER variable appropriately, the AudioDrive card functioned well enough for Mpxplay and all of my old DOS games to run.  Now that's what I call compatible.

With the sound working, it was finally possible to determine the limits of the 486 CPU.  Mpxplay was able to play an uncompressed WAV file at 44.1 kHz if I turned off its CPU-hogging spectrum analyzer; however, it was not possible to play an MP3 except by first decompressing it to WAV.  Similarly, FPS in DOOM could be described as merely acceptable.


As for the I/O card, I changed jumpers to increase the IDE data transfer rate from its default of 3.9 MB/s (slightly above PIO 0) to its maximum of 8.3 MB/s (equivalent to PIO 2) with no adverse effects, and Linux boot time reduced by 12%.  However, no matter what I tried, the 2.6 kernel utterly failed to detect the game port.  Sigh.  With a 2.4 kernel this might work.

Under DOS, with a joystick connected to the gameport, I was able to use the fire button to start Llamatron, but it hung immediately afterward.  The hang occurred even when there was no sound card in the system to conflict.  If Llamatron was configured to use keyboard instead of joystick it worked fine.

So much for that.  I disabled the I/O card gameport and used the one on the sound card.


Although getting Slackware to run in 8 MiB of RAM was a worthy challenge, I did eventually get sick of waiting on it and paid $21.90 (shipping included) on EBay for a matched set of 8 of the hard-to-get 4 MiB SIMMs to make it run half decently.  That's $700 per GiB.  ACK!

These SIMMs, which were advertised as 3-chip, 4 MiB, 70 ns parity RAMs—a safe choice to replace the 3-chip, 1 MiB, 70 ns parity RAMs that were in there—have two chips that store 4 bits of each byte (LGS GM71C17400BJ6 = 16 Mib 60 ns) plus one different chip that I can't find any info on (Mitsubishi M5M44100BTP or 451SJ00-7).  It probably is a legitimate 4 Mib RAM, but for SIMMs of this vintage, you have to watch out for "fake parity," where a logic chip is used in lieu of the extra RAM to fake out the PC.


So, finally...  Gone are the original hard drive, 5¼″ floppy drive, nonstandard Aztech CD-ROM + sound card combo, modem, disabled gameport, DB-25 serial port, pin 20 from the IDE interface, 8 MiB RAM, and loads of ribbon.  Added are two 3.2 GB hard drives, the ESS sound card (minus pin 20 from its IDE interface), an ATAPI CD-ROM drive, 32 MiB RAM, and three round cables.  (A black A.C.Ryan IDE cable connecting the sound card to the CD-ROM is hiding in the back.)

After rerouting that long power-switch cable and tying down the other power cables it almost ceased to be hideous.  Almost.  There's only so much you can do with this layout.


The ATAPI CD-ROM drive is specifically a Sony CDU701–F.  It worked under Linux with the old PnP EIDE support module, but the generic DOS drivers didn't work and Sony no longer provides DOS drivers on their web site (SIGH!).  I scrounged version 2.27b of their driver distribution from the net, and it works, but only if Linux is booted before DOS.  Apparently the ESS PnP configurator configures the sound and gameport but not the IDE interface; if the PnP settings are configured by Linux, they stick through a warm boot.  (2013-10:  What was needed was ES1868.COM, the "ESS IDE CD-ROM controller enable program," which is buried in the Windows driver distribution.  Moreover, the generic open-source drivers UIDE.SYS and SHSUCDX.COM are preferable to the Sony proprietary drivers.)

The Sony driver distribution includes a program, CDPLAY.EXE, that allows the PC to function as a CD player if the (otherwise useless) analog wire from the CD-ROM to the sound card is hooked up.  (I used the Creative header instead of the Sony one, so sue me.)

504 MiB limit


That crufty old LILO warning about 1024 cylinders actually bit me this time.  The ancient BIOS does not support LBA at all.  LILO, DOS, and anything else that goes through the BIOS can only access the first 504 MiB (1024 cylinders × 16 heads × 63 sectors) of a disk.  And yes, for once the geometry matters.  I went many rounds with fdisk to get the partition table right.

Installing Disk Manager 9.56a fixes the problem for DOS, but unfortunately the maintainers of the 2.6 Linux kernel have seen fit to break interoperability with Disk Manager.  I would have to either revert to an old kernel or settle for the DOS partitions being inaccessible from within Linux.

As a compromise, I partitioned both disks so that the first 1024 cylinders belong to DOS, with the exception of a small Linux boot partition, and all cylinders above 1024 belong to Linux.  I also switched to smaller hard drives to save the (marginally) better parts for projects where I could use them.

Bad module

Making the CD-ROM work with the kernel meant abandoning the non-functional "ISA Plug and Play PATA support (Experimental)" module of libata and reverting to the "PNP EIDE support" under the old "ATA/ATAPI/MFM/RLL support" driver.  Experimental or not, using libata exclusively for all SATA and PATA drives had always been a big win prior to this; this was the first time I had to go back to the old driver for any reason.

Non-repeating failures


For a while there the CMOS clock was not keeping time while the PC was off.  With daily use the problem has stopped repeating.  I imagine that this slightly corroded fossil of a battery is responsible for the problem, which will surely come back if the PC is left off for a longer period of time.  Call me senile, but I do seem to recall that normal watch batteries had been invented by 1994....

At one point I got this "interesting" error message under Linux:

Uhhuh. NMI received for unknown reason a0 on CPU 0.
You have some hardware problem, likely on the PCI bus.
Dazed and confused, but trying to continue
Uhhuh.  "I see no PCI bus here."  The error coincided with the floppy drive going flaky.  Removed and reattached the floppy cable, rebooted, and the problem did not repeat.


This project was complicated but the payoff was good.  The 486 now runs all of my old DOS games with fewer glitches than I have experienced on any other PC, including the 386 DX that I owned back in the day.  The sound does not cut out.  The screen does not flicker.  It does not hang.  The only glitch I have had is CC3D dying with an error message about not finding the file 3.res, and that might be an installation snafu.

2013-10-06:  The punishment for fixing what ain't broke is never waived

So, a few years later, I decided it was time to upgrade Linux to Slackware 14.0, replace DOS with my new standard configuration, replace the CD-ROM with a DVD-ROM, add an NE2000 network card, and see if I could get it to work with a single, larger hard drive.

Everything was going better than expected right up to the point where I attached the newly loaded hard drive and tried to boot.  From then on, no matter what I tried, the BIOS would say DRIVE NOT READY ERROR and fail to boot the hard drive.  Any attempts to mess with the MBR or partition table from a DOS boot floppy led to data corruption and failure.  Even the untouched boot drive that previously was working would no longer boot.

Having eliminated all possible software and BIOS configuration causes, I expensively ordered a replacement VLB I/O card.  Ironically, now that I had gotten the ESS sound card's IDE header totally figured out, the new I/O card had native CD-ROM support and even made it possible to boot from the DVD-ROM drive with the aid of Smart BootManager.

2013-10-12:  The new card arrived.  Out with the crappy, old Winbond W83758P-based card...

And in with the new and improved, fancy-shmancy card with a PDC20230C-based controller and a W83758P on the side.  The so-called LBA support in Promise's BIOS is limited to 8.4 GB, but that's a heckuva lot better than 504 MiB.

Alas, that upgrade was the beginning of a fresh hell caused by the new card's quirky incompatibilities with Linux.

Toward the beginning of the troubleshooting process I was switching the hard drive back and forth between two PCs to avoid the pain of running a Slackware install on the 486.  On one of those trips, the metal grommets in both of the plastic rails spun and the drive assembly was then royally stuck in the 486.  The extreme measures that were needed to free it killed messed up the hard drive for a while and did nothing good for the rest of the PC.

Four months later, after some really painful kernel debugging that accomplished little, I finally got Linux running again on the 486 by relegating it to the secondary channel with that crappy good ol' Winbond W83758P controller that Promise only intended to drive CD-ROMs.

 Gaak!  I made it worse.

During the Linux blackout I learned that the DOS games that run best on the 486 use only Adlib sound, so I went back to the original Aztech sound card.  Unusually, it physically collided with mainboard components in both of the bottom two slots.

I ran the final Slackware 14.1 install on the 486 itself, but due to limited memory the initrd of the installation environment had to be converted from a ramdisk to a copy-on-write root file system.  Package installation took 24 hours to run.  Booting to a bash prompt then further required editing rc.M to remove the ampersands from a series of bloaty cache-updating operations that Slackware now fires off into the background.  There's just not enough memory to run them all at the same time.

Getting Linux back and upgraded was a wimpy victory.  The issues with the new HDD controller left Linux unable to write safely to the DOS partition, and even with the correct ALSA module it still was difficult to play a WAV file without bursts of static or a hard lockup.  (The same sound card and driver worked fine in a Pentium-class PC.)  And then there's this:  X.Org no longer works at all.

The one shining victory was that I finally got the 486 on the network with an ISA NE2000 type card.  (Oooh, it says "Netware.")

I got no-boot or hard lockups on every previous attempt to put a network card in the 486.  I speculated that the ROMs were conflicting with the Promise controller, so this time I chose a card that could be jumpered to disable its ROM.  But this time there were no hard lockups.  Instead, the network card initialized and then failed mysteriously on the first attempt to transmit.  It turned out that the sneaky Aztech sound card was stealthily hooking IRQ 5 after the NE2000 had grabbed it, even though the ALSA module had no such resource declared.  PnP mode worked fine as long as I reserved that IRQ.

As for DOS, everything is fine with the latest generation of FreeDOS and free DOS utilities except that I could not find a real-mode UMB provider that works.