Here all suspicion needs must be abandoned,
All cowardice must needs be here extinct.
We to the place have come, where I have told thee
Thou shalt behold the people dolorous
Who have foregone the good of intellect.
--Dante's Inferno as translated by Henry Wadsworth Longfellow
I can't vouch for the book's contents (health and fitness is not typically a book genre I read, though since the publisher was kind enough to send me a copy I may try to read it), but the photo on the front cover is certainly one with which I'm familiar. Who knew publishers looked for cover photos on Flickr?
And just so we're clear, they did get my permission before using the photo.
I always did like the few (too few, in retrospect) digital design courses I had to take in college. Simple as it was, I always got a kick out of making the little LEDs blink. Alas, I don't recall having to design anything much more complicated than LED blinkers using a hardware description language. The most significant thing we designed, a (very simple) RISC processor, was designed with schematic capture. Having been recently reminded that FPGAs still exist, having nothing better to do, and apparently being a glutton for frustration, I recently decided to renew my interest in logic design.
I forget where I got the idea, but at some point I decided I wanted to implement a NES on an FPGA, from scratch, in Verilog. I hated the VHDL I had to write in college and heard good things about Verilog. Writing a NES seemed like a simple enough project to be doable by one person (the NES is a well-understood piece of hardware at this point, and there's a lot of incredibly detailed information on how it works) but complicated enough to get a flavor for the language. My original idea was to write a NES in both languages for a proper comparison, but given how much time I've spent on the Verilog version so far, that may be an unrealistic goal. Maybe I'll write the SNES in VHDL :)
So that's what I've spent almost all of my free time doing these past few months. So far I've written a working 6502 processor (minus binary coded decimal support, which the NES's CPU also lacks), an Audio Processing Unit minus the DMC channel (the channel which plays audio samples), most of a test suite generator for the CPU, and a module which lets me play NSF files so I can test the Audio Processing Unit. Below is a video of the model playing a song from Super Mario Bros. I realize the video is bad; that's what happens when you record the video with your laptop's built-in camera because you have no other device that can record digital video. Mostly it's there to show you the blinking LEDs in an attempt to convince you that the board's actually what's playing the audio. But really, if you're reading this you'd probably believe me without the audio/visual evidence.
If I want to be able to play downloaded games, I'll need to implement the various memory mappers and additional audio channels these games use (which are all independent of the NES itself). Otherwise I need to design some means to connect NES cartridges to my prototype board. Probably I'll end up doing the latter, then the former as needed.
Probably other (minor) things I'm forgetting.
Perhaps later I'll discuss my opinion of Verilog, that being the original purpose of this project. Right now I'm too tired to give any sort of fair analysis.
As I type this my iBook G4 is almost completely disassembled. The bottom panel is on the floor next to my chair, the top panel is resting loosely on top of the laptop, and the keyboard is resting loosely on top of that. With the motherboard exposed on both sides and all the typing going on, I fear shorting something out. All to replace a hard drive. Apparently Apple didn't consider the hard drive on iBook G4's a user-replaceable part, so I had to go through a three-hour disassembly procedure to perform the swap. Well, I had to go through the procedure twice; the first time I foolishly reassembled the laptop before testing that the machine booted. Of course it didn't, but fortunately the second disassembly was easier than the first. Didn't hurt that there were about 20 leftover screws I couldn't figure out where to put.
The process to replace the hard drive on my old Dell Inspiron, in contrast, was trivial. Unscrewing one screw and sliding the IR port up unlocked the drive mount and allowed you to pull the mount out of the side of the laptop. All you had to do to replace the drive was unscrew the old one from the mount, screw the new one in, then slide the drive mount back into the machine. A less than five minute process.
I had a lot of gripes with that old Inspiron that sadly (or perhaps not) are lost to history. But at least Dell understood that it was reasonable to expect a user to replace a hard drive (especially since they shipped with the old IBM Deathstar hard drives). My iBook's been a reliable machine, but someone gave Apple's engineers crappy requirements when it came to user-serviceability. Hopefully they've learned something in the four years since.
Let's see, how did one of the marketing directors (why does it seems like everyone in marketing and sales departments has either director or manager in their title?) I talked to put it? There's reality and actual reality. I forget the specifics about the distinction, but it was something to the effect of reality being the way things aren't but marketing literature makes you assume is, and actual reality being the way things actually are, which you're told if you ask questions you don't know you need to ask. As I understand it this Dilbert strip has a good example of actual reality.
I'm constantly in awe at just how much junk I get in the mail that just ends up going right into the recycle bin. It makes me wonder how it one can possibly run such a business and be profitable. I also have all kinds of thoughts about how such practices can possibly be sustainable in the long term, but that's a discussion for another day. But the package I received today (pictured above) from Digi-Key containing a single rotary encoder (resting on top of a quarter, resting on top of the box it came in, resting on top of the packaging the encoder was wrapped in) takes top prize for wasteful mail delivery. I expected the component to be shipped in an envelope. I guess when they charge $2 for shipping they're going to make sure it costs them no less than $2 to ship the part.
Then of course stuffed in the box is a note telling me how committed Digi-Key is to the environment. Sigh...
I found myself reading Almost Perfect over the weekend, the history of WordPerfect as told by one of the guys who was there from the beginning. It's a good read, but I definitely get a hint of it's good to be king syndrome from this guy. He'd tell his employees to leave their personal lives at the door while boasting about his personal life blending into his business life. And then he'd tell his employees at the company holiday party he was sick of hearing them complain and if they had a problem they should quit. Yeah, that's a productive way to deal with morale. There's a great big gray area between I love all aspects of my job and would change nothing about it and I dislike my job enough that I want to quit. Most of us fall somewhere between those 2 extremes. Personally I'd try to move my employees closer to the I love all aspects of my job side and further away from the I want to quit side, but that's just me. Still, there's one great bit in there about software copy protection:
Until the last minute we had planned a simple, key disk copy protection for 4.0. This required the customer to put a WordPerfect diskette into the computer each time the program was started. I personally did not enjoy the procedure and begged Alan to use it himself before we shipped. He had been using non-protected software on his own machine to avoid the inconvenience of switching back and forth between P-Edit and WordPerfect. After about fifteen minutes of use, Alan told the developers to drop the protection. It was so close to the release that we did not have time to remove the key symbol, which signified a copy protected diskette, from the diskette labels.
Dropping the copy protection was a good decision. Although we would still copy protect some of our software in Europe, it was not a good idea for the United States. Many businesses in the US were coming to the conclusion that they were not willing to live with the inconvenience of copy protection. Even 1-2-3 would eventually drop it. It was simply not fair to make the good, paying customers put up with an inconvenience caused by the bad ones. In the end, what was good for the
legal customers was also good for our bottom line.
Yet another lesson learned 25 years ago that the industry must re-learn. I've long suspected that people who advocate the use of copy-protection and software licensing have forgotten/repressed what it's like to actually use a piece of protected software; this lends support to that hypothesis.
One of my early experiences with this concept came while implementing a Revert button in an application I worked on. It did pretty much what you expect it would; if you made one or more changes on the current screen, you could click that button and it would undo those changes. I implemented it in a perfectly logical way given how this application communicated with its server. Unfortunately, when it came time for me to explain to the tech writer how this button worked, some of the subtleties caused by what I thought was a perfectly logical implementation made it difficult to explain how the button actually worked. Part of the documentation for this button ended up saying something like the best way to understand how this feature works is to use it.
I was reminded of this while reading the instructions for the California Alternate Minimum Tax. When I hit upon the line in the tax forms telling me to write in my Alternate Minimum Tax, I naturally checked the instructions to see if I needed to fill anything in. I was hoping they'd say something like If your taxable income is less than x% of your adjusted gross income, you need to fill out Schedule P (the form one files when they have to pay AMT). That's when I came across this gem: Complete Schedule P (540NR) to see if AMT applies to you. Brilliant. Apparently the best way to understand the Alternative Minimum Tax is to fill out the Alternative Minimum Tax form.