Tuesday, October 30, 2012

Mr. @#?%!...A 74xx based Q*Bert-ese Obscenity Generator

Open7400 2012 Entry:


1982 was a special time. It was the golden age of video games, thru-hole electronics, discrete logic, and...

                                                   Q*Bert!!!

...For those who care, a cartoon swear (@!#$?!) is called a "grawlix."


In honor of the 30th anniversary of Q*Bert's release in arcades, I present "Mr. @#?%!"...A 74xx-based Q*Bert-ese Obscenity Generator, built exclusively using parts available in 1982.


For those who are unfamiliar with Q*Bert, he is a little orange anteater-looking alien who spends his time hopping around on colored blocks in an isometric wonderland. When he falls off of the pyramid or collides with an enemy, he swears like no video-game character has ever sworn before.


Q*Bert has some of the most interesting and unique sounds found in any game. In the original arcade machine, Q*Bert's incoherent cartoon-swearing (y'know...#$!@%&!!!) was generated by a Votrax SC-01 analog formant speech synthesis chip.


The creator of the game's sound system, explains how Q*Bert's "%#$@&!!-mouth" came to be:


We wanted the game to say, 'You have gotten 10,000 bonus points', and the closest I came to it after an entire day would be "bogus points". Being very frustrated with this, I said, "Well, screw it. What if I just stick random numbers in the chip instead of all this highly authored stuff, what happens?"
David Thiel on the creation of Q*bert's incoherent swearing.


Q*Bert's gibberish cartoon-swearing was generated by throwing random numbers into the SC-01's 6-bit phoneme register by the arcade machine sound board's MOS 6502.


...but wait! You don't need a microprocessor to generate Q*Bert-ese swearing! Mr. @#?%! was built for a 7400/4000 discrete-logic competition, after all!


My discrete-logic implementation of a Q*Bert swear generator uses amplified transistor avalanche noise fed to 2 daisy-chained channels of a 74LS14 hex schmitt-trigger inverter (two channels to massage the signal and un-invert it) to generate a "rando-crazy stream of TTL-level bits." The bits are fed into the input of a 74LS164 8-bit serial in/parallel out shift register. The first six bits out of the register are used for SC-01A phoneme bits P0-P5, and the last two bits are fed to the inflection register I1-I2 to give the synthesized voice some more "Q*Berty-ness" and emotion. The SC-01A generates a clock signal for the shift register by way of its strobe[latch] and A/R lines. The SC-01A's master clock speed is set by an R/C circuit. Interestingly, there is some strange coupling happening on my breadboard and you can "bend" the voice pitch/speed by "squeezing R12 and R13.


This was built from 100% vintage and/or spare parts...that explains some of my odd transistor and resistor choices.

It was a nice challenge to deal with mixing 5V TTL and a FUNKY CMOS chip (SC-01A). The phoneme registers on the SC-01A are 5V compatible, but the inflection bits have VERY different logic level voltages. The 74LS07 is more than adequate for bringing the TTL levels up to ~+10V for the inflection bits. I could have done it with a simple transistor, but I used my last ones on the noise generator and making the SC-01A's "clock"/latch signal safe for the 74LS164!


I'd like to thank Orlando, FL's  Skycraft Surplus for having a stockpile of late 70's and early 80's date-coded 74xx parts!

I'd also like to thank Dangerous Prototypes for hosting the Open 7400 Competition!
       

Schematic:





Qbert2.pdf
(161.82 KiB) 


  
Some Bits and the Noise that Gave Birth to Them
                                 
Screen Shot 2012-10-31 at 1.38.14 AM.png
Beautiful, "Rand-o" Bits!
Screen Shot 2012-10-31 at 1.37.52 AM.png
Logic Analyzer Detail of the Shift Register I/O
Demo:



...I think I got pretty close...

                                




Thanks!

and @#@#*!!!!#&!%!%!!!@



1 comment:

  1. Love it. Gonna do a write up on your design on Technabob later today.

    ReplyDelete