Ever since I opened up my Apple //e circa 1984 and figured out just how simplistic the circuitry was, I've been fascinated by micrprocessors. Once I taught myself 6502 assembly (around 1986), I became obsessed with being able to tinker with computers at a low level.
It shouldn't come as any surprise, then, that I find microcontrollers absolutely fascinating.
Around 1997, a couple of friends and I bought some equipment to program some PIC 17C43s (to crack RC5 keys, actually). I wrote some programs to drive a stepper motor using 16C84s, ran out of memory on the '43s and started using 17C44s, wrote infrared receivers on the '84s, and eventually created what I consider to be my crowning achievement: the 2000 Bike Trip Laptop Replacement (based on a '43).
From 2000 to 2004, I did basically nothing with PICs. I let the pieces sit in the attic with the rest of my electronics.
In 2002, I became interested in Amateur Radio. In early 2004, I found a new way to use PICs: to create an encoder for the Amateur Radio Positioning System.
While working out the details of an APRS encoder, I wanted to look at the assembly being generated by a C compiler. I found about a dozen different disassemblers... all for Windows.
So here's my contribution to the craft: a 16C84 disassembler written in Perl. Theoretically this should work for most PICs, and isn't necessarily 16C84-specific. Enjoy. (Update 1/2007: now contains program flow graphing, gpasm .map file parsing, and is tested against 16F62a products. Update 5/2009: works on more multi-page devices, tested with 16f877a, added -S flag to ignore some symbols. More 5/2009 updates for 1.09: added a call stack analysis mode, fixed a few minor bugs.)
As of 8/2009, this has been moved to github. Follow the link above to get the source.