LinuxGeex.Com: Mild-Mannered Advocacy
Home Welcome to LinuxGeex.Com! May 15th 2013

Welcome to LinuxGeex.Com, a mild-mannered Linux advocacy site.

For the moment, I don't have a lot of content up on this site, so I'm going to blather on about myself instead.

Some things I have done...

Your loyal Geek. ;-)

When I was a little kid, I took everything apart. My mother's solid-state TI Calculator. My Dad's Philips rechargeable shaver. His photo flash. My dentist's drilling equipment. Batteries. Radios. Amplifiers. Eventually I started putting these things back together. Not always as originally designed, lol. I just had to know how they worked.

That curiosity never left me. When I get my hands on new software, I have to try every single menu item, and look at the config files to see whether there are secret goodies lurking there.

Of course, the same curiosity extended to the computers themselves. I disassembled them, rebuilt them, upgraded them, built some small peripherals for them, and inspected their ROM code, while it was still intelligible...

Timex Sinclair - Sept 1982

My first computer was a Timex Snclair kit, ordered from Popular Computing in 1982, for $100. It was terribly incapable compared to the game consoles and other personal computers of its time, with only enough RAM for a 160x48 pixel black&white display and a few bytes left over for a few lines of BASIC, but it was enough to write a "Death Valley" flying game. =) The worst feature was the keyboard, which creaked and wasn't at all reliable. It's most impressive feature aside from its price: it could be run on 3 'D' batteries (or 4 AA's) in a pinch, making it the first truly portable computer.

From there I moved to the Apple ][+, which I added a 16k expansion to, and a hand-made printer card. This was the first machine I got which came with a ROM listing. I got to know it very intimately. Later I got a copy of "Beneath Apple DOS" and wrote my own DOS which I called QDOS. I wrote it in LISA assembler, it was only 2k in size, including some wasted space for a boot block. It formatted 23 sectors per track instead of 16, and 42 tracks per dsk instead of 40 (or 56 tracks, read-only by writing 3/4 tracks) It worked by writing entire tracks at a time, so it required a memory nybble buffer the size of a full track. It was vastly faster than the regular DOS 3.3 because it didn't use interleaved sectors, so a whole track could be read in a single rotation (technically so could a DOS 3.3 disk but none of the RWTS implementations did so.) With 23 sectors*42 tracks and only 2k used by the OS, it offered 245,248 bytes in read-write mode and 327,680 bytes (equal to a PC floppy!) in read-only mode, so I could pack a few less disks around.

Bare Apple][+ Dec 1984

My major projects on the Apple][ included a tiny 16-bit interpreter with no name, 2 hires character generators, one at 7x8px with italic, underscore, bold all from one character bitmap and much faster than the HRCG product. THe other one worked at 4x6px (using 3x5 bits and 1 bit to shift characters down a row, so 2 bytes per character) which gave a 70x32 char text display on a normal apple][, and hooked into the normal text routines so that one could run some of the FPBasic spreadsheets on it, a small turtle-graphics like 3D modeling system, some fast hires graphics routines, a mergesort in assembler which I called "RTTS" (Really Twisted Tesseral Sort), a few small games, and a game engine which used one disk block per location including a lores image, some text, and a set of vectors for connecting the blocks by movement, sight, sound, and scent, which I started to write an adventure game for called "Operation Scimitar." I wrote my own diary program which used a pseudorandom sequence generator to encrypt the disk from an initial key used as the seed, and also a disk-transfer program to send floppies over the phoneline using the Apple's cassette IO jacks, at 9kbps with 2D byte-level parity (17x17 bytes, good burst error recovery.) I also wrote a mandlebrot explorer in assembly (barely faster than FPBasic in the end) and a 140x96 maze generator/solver which only took 7 seconds to build, display, and solve the maze. I never wrote a Pong clone. All the games I wrote were simulations, like Death Valley, Cluster Wars (ships the size of galactic superclusters duking it out, with an AI opponent) and a Spacewars / gravity simulation with enterprise vs klingon steered with the paddles. Oh and a Galaxians/Invaders clone with their 2 motherships having a gauss canon - unavoidable - so it was important to destory the motherships first without clearing the grunt rows first.

Amiga A500, spring 1988

The one thing I started writing and really got nowhere with was a space warfare game using a galaxy simulation bsed on a fractal (my pseudoradom sequence generator seeded according to coordinates) to generate star systems with planets, races, societies, tech levels, fleets, etc. The idea was that only the parts of the universe which the player interacts with actually get stored to disk, once they are "touched." After that the game has to take causality into account in those touched systems. I thought it would be doable on a DOS 3.3 floppy. 140k runs out very quickly in a 2d interactive environment. Before I'd even modeled a fraction of the things I wanted in the game I found myself running out of space with only a small amount of exploration, so I bought an Amiga, which had 512K of ram, 4x the size of the Apple ]['s floppy!

AST Research, R.I.P.

The Amiga turned out to be a nightmare to program in assembler because it's BIOS would lock up at the slightest provocation, giving the "GURU Meditation", mostly due to lack of MMU, and took a very long time to reboot from floppy. That took all the wind out of my sails. I went back to the Apple][ and wrote my QDos, then got an AST Research Premium 286 Model 90 (TI 286) from Radio Shack in Fall of 1988, which turned out to be more stable to program on thanks to Protected Mode. The graphics were terrible compared to the Amiga's (Hercules MCGA, Lucky Goldstar Monochrome monitor at 720x350 @ 1bpp, or 640x350, 640x200, 320x200 @ 4bpp) with Windows 3.0, 1M of RAM, Borland TP3 compiler. I started creating assembler libraries for it as .TPUs, first some hardware routines using the BIOS, then some more hardware routines hitting the hardware directly, then some UI library code, then some simple mapping and drawing code, then some little applications for VGA Planets (upgraded to TVGA 8900D, SVGA Samsumg Syncmaster, which I managed to squeeze 1024x768 out of by manually adjusting the synch rates of both the card and the monitor.) In 1993 I got my hands on a used 386DX40 (AMD) which could run Windows 3.1 in "386 enhanced mode", and in 1994 I found Linux!

Slackware Linux, July 1994

My very first Linux install was the InfoMagic "LINUX Developer's Resource" 2 CDROM set, which I got at Paradon Computers at Tillicum Mall in late July of 1994. I'd been reading about BSD/386 and Linux in the Amiga Advocacy newsgroup where some folks were discussing ways to get a TCP/IP stack into the Amiga, to run Mosaic. Some suggested running Minix. I went to Paradon looking for a Minix for Amiga, only to find out that my new A1200's 68020 had no MMU! I was choked because the 68K specs on Motorola's website had clearly stated that the 68008 and 68020 had MMUs, and I'd bought the A1200 largely because I wanted to run Minix and experiment with the MMU. So instead I came home with Linux for PC!

I couldn't play with it right away though. First I had to buy a CD player (Sony CDU31a) so that I could read the CDs. What a nightmare. CD drivers for DOS. Rock Ridge Extensions so I could see the real filenames. Soundblaster IDE controller with more drivers for DOS, SmartDrive so that it didn't take 15 minutes to find a file, and then...? about 200k of memory left to run the install tools (because I wasn't using XMS support.) The folks who are booting LiveCDs and LiveUSB sticks today are really missing out on a great deal of "fun"! Then I went to copy it onto the harddrive to install it. No such luck, it wanted to be installed from floppies! 24 of them! Twice as many as Windows! I ended up copying ZipSlack 1.0 onto about 8 floppies, installing then in a UMSDOS folder. Lovely that, install the files and Linux can't see them until you run umssync to import them into the meta-meta-files.

So, I got it up and running and noticed the harddrive was pretty busy all the time. And it was full, long before I'd begun to install a real working system. I quiclkly found out that my 16M MFM harddrive wasn't going to be up to the task and bought a 40M Western Digital IDE drive. But I only had one IDE connector! Doh! So I bought an add-on PS/2 IDE-C (I think) card and got both the CD and HD working at once. Then got the linux root and boot floppies ready, and the 8 or so zipslack floppies just in case, and set about installing Linux "properly" on its own partition.

This time it was relatively effortless. Now I just wanted to install OS/2 Warp and Windows 3.1 alonside it. Room? My 40M drive was almost full already. Off to the computer shop again. This time a Western Digital 90M drive, which had a kind of ring to it as it ran. I could start X but I would run out of RAM loading Spider... another trip to the shop to get 8M of EDO RAM. Finally, got OS/2 and Linux working side-by-side and Windows installed into OS/2. Found that even 8M of RAM wasn't enough for OS/2 and it also had terrible network performance. Linux was so much faster it was beyond funny. "Warp" was like watching paint dry to load anything. So, I ran Linux. In text mode actually, until 1995 when I finally gave in and upgraded again to a Cyrix M100 with 16M of FP RAM...

Cyrix M1 / 6x86

I wasn't prepared for the speed difference between the 386/40 with 8M of EDO and the Cyrix M1 PR120 (100mhz, I overclocked it to 112) with 16M of FP. It booted in seconds. It suspended to RAM in a blink, and resumed before my 17" monitor could even sync on it. It could run X without noticably slowing down. It could run at 1680x920 on that RCA monitor... I created modelines for even higher resolutions than that with the ATI Mach32 card... It could play MPG files in real time (with LAMP!). It could encode MP3 in real time (with CannaMP3 on Windows). It could run the UAE amiga emulator at better than real speed with frameskip 4. It could run XMAME, 4 copies of MrDo simultaneously!

X-MAME (Robby Roto pictured)

I started contributing to the XMAME project, and I made a few mods to the DOSEMU project as well but never contributed them. I also hacked the Linux scheduler a bit. It's really very annoying, the Linux scheduler. It has a horrible feature which is designed to get the most out of the system caches when the system is overloaded. What it does is it keeps dynamically altering the priority of the processes based on whether they are busy at the end of a timeslice. If they don't surrender the timeslice they get marked "bad" and their priority goes down, until they get kicked out of the timeslice. What then happens is that the scheduler ends up running at about a 2hz granularity alternately kicking 2 busy processes out of the timeslices. This is terrible for playability, and it's oftem seen to this day even with the "low latency" and "fair scheduling" patches and schedulers. If you leave a screensaver running, you'll often see it fall into a pattern of pause run pause run pause... there's no good reason for this on a desktop machine... I can understand it when it's helping increase cache locality, but for average desktop use this does nothing but ruin the experience. So, needless to say I configured HZ to 1000 and disabled that code which punishes processes for not sleeping. Then it switches tasks at the end of each slice, at 500hz if there are 2 running processes. Smooth. Especially with XMMAME =) In the end I dropped HZ to 240, which gave me smooth 60hz refreshes with sleeping in the blitter, or even without sleeping, with up to 4 busy processes.

AMD's K6 "(Intel) Killer" CPU

In the fall of 1998 I bought 2 computers: first, I got a 233mhz Intel Celeron E-machines tower for my Mum, and then I hand-built a K6-500 machine for myself, with 256M of RAM. This machine was unstable. GCC would segfault routinely when I was trying to build X-MAME or any significantly large source. I wrote an alias for 'make' which would run up to ten times on failure... nasty nasty. bus errors from time to time too. In the end I under-clocked it down to 333mhz and it was more stable but still had the occasional segfault with GCC.

In the fall of 1999 I bought an Athlon SlotA K7 Thunderbird at 700mhz. Windows 98 would fail to start with that much RAM in it, so it became my first "pure" linux machine. This was a true supercomputer for its day. It was again a real quantm leap in processing power. Unexpectedly so. It's little sibling the K6 was sitting at about half its 'bogomips' but the real-world performance was night and day. Part of that was the video card, to be fair. The K6 had my now venerable S3 ViRGE in it, whereas the K7 had the Mach64. Linux support for the Mach64 chipset was poor, and the K6 was okay with Windows, so I ended up giving the M64 to the K6, and getting a Radeon7000 for the K7. Woohoo! FireGL! That baby flew. I didn't skimp on the RAM either. I bought 768M for it, which was a ginormous amount for a home computer in 1999.

HP nx6125 - Reliable Laptop

That remained my workbench until 2005 when I got myself an HP NX6125 Turion64 1.8Ghz laptop, which I'm still using today in 2012, to write this very article. Very reliable. It's taken unreal abuse. I've spilled drinks on it, dropped it a dozen times, left it in the rain, left it with a 1000 watt heat lamp baking it at a distance of about 1.5M, which warped the lid and LCD slightly. The worst damage though was when I suspended the stock Windows XP and put it into the laptop bag, airtight, and drove it around half the day in the sun. It failed to suspend, overheated severely but didn't power off. The smartmontools tells me that the HD hit 72C, who knows how hot the CPU got. The plastic trim around the keyboard delaminated. The feet all came off because the glue melted. The battery life was noticably reduced as well, yet somehow this beast managed to survive the ordeal and still runs smooth, cool, and quiet 6 solid years later. And although the backlight is a bit dim, everything else still works like the day it came from HP. I'm tempted to drive my SUV over it, just so I can say I have, lol. I'm sure it would survive.

Atari 65XE, Cheap like Borscht

There were a few other computers I bought which I didn't mention. In 1992 I bought an Atari 65XE, for $20 from A&B Sound, when Atari obsoleted them. I never did anything meaningful with it. Although it was slightly superior to the Apple][+ it had no storage device besides a cassette port, and no ROM manual. I also bought an Amiga A1200 in Jan 1994. I mentioned them but not their models... they were mostly game machines, though I used them for light Desktop Publishing and Photo Editing, with Professional Page, FinalCopy, and DPaint. I only did a small amount of programming on these - in ARexx, Cape68k assembler, Lattice C, BlitzBasic (unstable!), Microsoft Basic (slow!) and AmigaE (fastest compiler ever!). I wrote a printer filter to print out books in a format which allowed folding a single page into 4 surfaces and binding at the fold, so, like a novel. Pretty straightforward - print landscape, pages 4 and 1 in 2 columns, then flip the sheet and print pages 2 and 3. It used printer Epson/Star printer escapes to do italics, bold and underscore, and to switch between 4 typefaces - Roman, Courier, and two others which I can't remember which were loaded into the 'font card'. It also allowed switching from draft to LQ mode, so titles could be done in LQ while the main text was done in draft to save ink and of course so that it could finish it today, lol. I also wrote a BBS in ARexx, a simple 1-bit drawing program in Microsoft Basic so I could do 2400x3000px bitmaps for printing with my HP Deskjet500C, primarily for maps, and in Amiga E I wrote a program to calculate pi to silly decimal places even faster than the one which came with the compiler, by converting it to assembler, and a disk menuing system so it would boot with a list of the apps to click&run, like the good old menus on the Apple games collections, and a handful of VGA Planets tools. I started a VGAP 3.0 game client but since I could never break the player .RST encryption I had to give that up.

NeverPutt, my farourite Linux game

Also on the skipped-my-attention list, I built an AthlonXP2600+ system in the fall of 2002, which was my first real virtualization machine. With 1G of RAM and eventually a Radeon9600SE, it was capable of running several OSes at once without much problem. The K7/700 had been okay with VMWare to run Win95 and Win98 but couldn't run XP reasonably. The AthlonXP system rocked, but it was noisy and I was actaully happier with the old K7 most of the time.

That pattern repeated. In Spring of 2010 I got a new HP DV7 2180us Core2 Quad. It's fast but it's noisy. I had to send it to HP twice for service, to fix the harddrive and the fan, and the fan failed a second time just out of warranty. And the DVD drive failed too. It weighs a ton... calling it a laptop is a bit of a joke, it's really a portable desktop. Having whined thusly though, lol, it's a caddilac in the performance department. I could load all kinds of 3D games on it which choked on my other machines. WOW, Crysis, etc. Very pretty. But I don't really play games.

My favourite game on Linux, actually, is Neverball/NeverPutt, lol. 3D Labyrinth / Minigolf. Who'd've thunk it?

Powered by jEdit 4.3.2, the Programmer's Editor. Powered by SiteWrapper 1.0.1, the ultralight PHP CMS. Powered by LG Solutions, the web design professionals