Confirmed the MOS 7600/7601 Pong chip is a true microcontroller
oldvcr.blogspot.com
oldvcr.blogspot.com
In the same way, here they cut open a microcontroller and instead of finding a neatly organized CPU with all the usual recognizable bits and software written in a straightforward ISA, there’s this weird, surprisingly analog amalgamation between hardware and software, between control and data. It’s not obvious how anything even functions because it’s so alien compared to our nice, clean, modular general-purpose CPU. Instead it feels…almost natural, like the hardware and software grew and evolved together as a single unit (which, to be fair, they probably did). It’s beautiful and terrifying at the same time.
At least, that’s how it feels to me as a (sleep-deprived) software engineer. Maybe to a hardware guy, this is just Thursday.
So say we all.
Software runs the world, but some of it is just cleverly disguised as hardware.
I love it!
I have a few, but sadly I don't have the space to keep a CRT monitor too.
The game chip, on the other hand, doesn't produce a value. Instead, the timer is synchronized to the screen drawing, so when the timer fires, it indicates to draw the paddle now. So the system never has the paddle position as a digital value and there's no register that holds the paddle position.
I haven't figured out how the ball position is stored. It seems like they'd need a register for the X and Y position, along with an incrementer/decrementer, but I couldn't find that. Maybe there's something tricky going on. Or maybe I haven't looked in the right place.
There were several machines of the time that had pluggable cartridges, from Binatone, Telarude?/Telalude? (French or Italian company I recall, I forget), Telstra/Telstar, again, I forget, it was 45 years ago, along with many others, where the display circuitry, power and joytsticks were all on the main board, but each cartridge carried its own CPU and ROM, which was the fashion back in the day.
They were an absolute bugger to write code for, no complex ALU to speak of, no register storage, no RAM, you sort of just chased the CPU with a stream of instructions, stored stuff in decay buffers (you want a countdown from 10? charge up that cap for a brief period of time then let it leak) or on the display output circuitry that you could read back if you needed. If your code went wrong, you never knew it.
You were mostly bit-banging analogue circuits to get anything to display, same for the audio, though it could also talk to some AY audio synthesizer.
I recall the 7601 had a reasonably short lifespan in the marketplace for a variety of reasons.
There were two datasheets for it that were the bible, there might have been more but I only ever had access to bad photocopies of those two. One was the usual electrical characteristics and the other was the instruction set with the usual timings, delays and addressing modes.
The addressing modes were stupidly simple by the standards of today. There were EPROM variants (gold pin variant IIRC) available that you wiped with a strong ultraviolet light, but generally you had an off-board EEPROM and you tied two of the pins high to let it know it should use the external EEPROM.
When I tell people my first game I wrote fit in less than 500 (8-bit) bytes, they wonder how that is. The game was never released but Race Electronics and their desire to cash in on this new fad and exploit the younger, more gullible version of me, did give me my start in video game development so I am thankful for that, in a way. The next game I wrote fit in 2KBytes and I had the luxury of using a 6502 CPU and access to actual RAM on a CBM PET.
Given your experience programming for it can you provide any insight to how this may have been done?
The Magnavox Odyssey game, however, worked as you describe; the ball position was the voltage on two capacitors (X/Y), and they were charged or discharged to make the ball move. (This game system was analog, built from transistors.)
Did anybody think to ask the original chip designers for GI out of Scotland? Many of them are on LinkedIn, though now retired. It is pretty easy to track down the GI MicroElectronics people.
Go grab a couple of back issues of Practical Electronics from the 1970's and a Maplin catalogue from the 1970's, they contain almost all of the GI and AMI MOS parts, including data sheets and example code. There's probably PDFs online by now. The GI catalogues and the MOS catalogues of the day also have all the datasheets and block diagrams in them and contain every non-custom part they made, though many parts could be customized to need. The General Instruments MCS/MPS (Microprocessor Ceramic System/Microprocessor Plastic System) 7600 is based, AFAIK, on the MCS5600 with extra bits. <strikeout>I recall that AMI MOS listed all their microprocessors under the "S" range, e.g. S6800.</strikeout> But again, fuzzy on the details and I wasn't privy to a lot of information and the internet back then wasn't what it is today (That's a joke). US Patents were definitely filed for these devices by GI MicroElectronics and AMI MOS, even though, technically, the 7600 variant was developed in Glenroathes. A quick internet search shows that the patents would be the 3,800,000 to 4,000,000 range based on the date of issue. Just need to search for the designers' names, or the corporation filing.
And if I have incorrectly stated anything, or lead you astray on details, it is not intentional. It's that 45 years later I didn't think I'd have to recall details about my middle-school and high-school years and my first forays in game development and electronics. And if it is a bit incoherent I blame only being on my third coffee of the day and trying to dredge up half-forgotten details. <insert Gandalf "I have no memory of this place" meme>
The MPS7600 chip I'm looking at was built by the company MOS Technology, not by General Instrument or AMI. (MOS Technology, which is unrelated to Mostek, later became part of Commodore.) The MPS7600 doesn't have any external address or data lines, so there's no way to program it externally or attach an EPROM.
So I think you're discussing a different chip. Maybe the General Instrument CP1600 processor, which was used in various video games?
I do think I was confusing/conflating AMI MOS with MOS. And do recall that Mostek was a separate company. It doesn't help that MOS chose such a generic name for their company. Didn't they realize this wouldn't be searchable via Google?!? Did they learn nothing from Microsoft naming a language C# and an API .NET?!?
It is quite possible I am discussing a different chip. Again, apologies if I lead anyone astray, certainly not my intention. There were many such devices that came through my hands over the years. I wrote firmware in assembler for a bunch of slot machines I would swear blind used a TMS9900 but speaking to friend a few months back he assured me that it was not that CPU at all but one very much like it.
Not sure if this was an intentional simpsons reference but it made me laugh anyway given the context.
(seriously though, thanks for taking the time to write this up - I find these firsthand experience ramblings fascinating).
The crazy thing was that if you turned the sliders just right, you could also play "off menu" games which had combinations of the attributes of the official ganes. I guess this was down to some of the tricks described here. It certainly confused me a lot when I learnt to program: you can't just compose two games together by half-clicking on an option!
This is called “circuit bending” now and has quite a following.
I did it with the Atari VCS (now called 2600) quite a bit. The Spider-Man cartridge had some great weird incarnations by moving power switch half-way, as did a few other carts.
Despite the infancy of the industry, these people not only designed an enormous electronic circuit but had to work out how to achieve compatability with inputs and outputs as advanced as graphics, how to store data in memory, had to perform a tonne of debugging and had to get this thing etched onto silicon and then produced at scale.
Wow, just wow.
Steve Wozniak implemented Breakout with fewer 50 small scale integration chips, which is a fraction of the complexity of a 6502 CPU. I mean, a build system for a trivial JavaScript app is probably more complex than the software the flew the Space Shuttle
If they could reduce the number of scanlines on the monitor, they could get many hundreds of clock cycles per pixel, and then do everything in software. 512 instructions seems quite possible for that - compare to 'boot sector games' which run in about one third of the space.
Except a (boot) sector is 512 bytes (assuming x86)? Technically 510 because of the two bytes to indicate that it’s bootable, but that’s quite a bit more than 1/3 of 512.