8 ms·
Confirmed the MOS 7600/7601 Pong chip is a true microcontroller
- kens 4y agoIt's not my blog post, but I can answer questions about the chip.
- classichasclass 4y agoThanks again, Ken, for your help with this!
- philistine 4y agoHow close is it to the chip in the VCS? Was it a step towards the 6507?
- kens 4y agoThe 6507 chip was essentially a repackaged 6502 microprocessor. The game chip is pretty weird, with a custom microcontroller and a bunch of specialized circuitry. So I don't think there is any connection between them.
- TedDoesntTalk 4y agoI had the Coleco Telstar arcade and all its cartridges, thanks to my parents. I was just a young kid at the time. Thank you for this deep dive into a chip that shaped my childhood.
- chclau 4y agoIf I were you, I would try to reach to the blog poster.
- kens 4y agoI've been working closely on this chip with the writer of the blog post (and with Sean Riddle who took the die photos) for the past month.
- classichasclass 4y agoThat would be me. Ken was very helpful.
- ksherlock 4y ago"The way the paddles in particular are drawn is especially ingenious; in fact, the firmware doesn't even need to position them. The paddle controls are simple potentiometers feeding into an R-C circuit (external to the chip, not shown here) that discharges at a rate based on the pot's resistance. This then feeds into an on-chip comparator in the region marked "paddles," delaying drawing the paddle a number of scanlines based on the pot's position until the comparator triggers, thus eliminating the need for a more complex solution like an A-D converter (cheap!) and automatically drawing the paddle at the proper location without any intervention from the firmware." I love it!
- EvanAnderson 4y agoIt's a nice hack. I think this is how Woz did the Apple II paddles, too (albeit with discrete components and a timer IC). It sounds familiar.
- kens 4y agoYes, the Apple II also uses a resistor-capacitor timing circuit to determine the paddle position. The big difference, however, is that the Apple II uses the timer and a counter to produce a paddle position 0-255. Software can then use this value to e.g. draw a paddle at a position on the screen. 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.
- metadat 4y agoHow is intersection with the ball detected?
- kens 4y agoI think that the circuit at the top center of the chip detects collisions. E.g. if the paddle is being drawn at the same screen position as the ball, then you know that the paddle has hit the ball. This way, you don't need to store the paddle position and you don't need to compare the paddle and ball positions, you just check if a paddle pixel and a ball pixel happen at the same time. 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.
- randyrand 4y agovery cool to see the engineering of that time.
- justinlloyd 4y agoThe MOS 7601 was the first CPU I learned how to write code for, circa late 1977 to early 1978. I would scour jumble sales for broken pong games and the other, more sophisticated console variants to cannibalize for parts, with one conversation about haggling with another buyer over who got what parts leading to a job. 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.
- retro64 4y ago...which was the fashion back in the day. 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).
- dannyobrien 4y agoi had a binatone pong game that sounds like it was based on this chip. It had a bunch of variants of pong you could play based on moving a couple of physical sliders -- squash (bounced off a wall), football (two bars per player), etc. 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!
- TedDoesntTalk 4y ago> you could also play "off menu" games 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.
- NobodyNada 4y agoI’m reminded of that scene in Battlestar Galactica (2004) where Starbuck cuts open a crashed Cylon raider, climbs in, and finds it’s actually organic rather than robotic — instead of the neatly-organized metal and wires and computers you’d expect to see in a hi-tech starship, it’s full of messy flesh and blood and organs. 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.
- moffkalast 4y ago> as a (sleep-deprived) software engineer So say we all.
- mmastrac 4y agoThe line between "chip" and CPU has always been a bit blurry. Anything that deals with USB or any other complex protocol is probably based on a tiny CPU (8051s are still weirdly common). Software runs the world, but some of it is just cleverly disguised as hardware.
- sidewndr46 4y agoI can second this, I remember looking at the spec sheet for an early USB interface chip. It includes a complete processor. No MMU, but the datasheet even showed how to prevent someone from reading the contents of the ROM.
- retrac 4y agoAs early as the mid-1970s, minicomputers and mainframes started incorporated microprocessors for things like system monitoring, booting, and peripheral interfaces. In 1981, the original IBM PC's keyboard had a 8048 microcontroller internally to handle communication with the PC. Architecturally, this is still how it's done, usually just all shrunk down to a single IC now. Pretty much any expansion card or USB device will have a microcontroller in it, possibly multiple.
- londons_explore 4y agoThis seems like a lot of transistors for such a simple game.... 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.
- kens 4y agoThere are a couple of problems with that approach. First, the game uses a standard television, so you can't change the number of scanlines. Second, the pixel rate is about 1MHz, so you'd get about one clock cycle per pixel with a processor of that era. Of course, doing everything in software was a long-term solution.
- colejohnson66 4y ago> 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.
- lbriner 4y agoI am still genuinely amazed about what was achieved in this era, bearing in mind that these things took years to develop so started much earlier when most people probably had never heard of a transistor. 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.
- PaulHoule 4y agoI see it the other way around. 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