How were 70s versions of games like Pong built without a programmable computer?
retrocomputing.stackexchange.com
retrocomputing.stackexchange.com
The first time I saw that episode was at a friend's house. I felt so smart telling him that was impossible because you can't mod software with a soldering iron. Then his dad poked his head out from the kitchen and told me Pong didn't have software.
Turns out the only impossible part of that episode is the idea of it taking a few hours. Changing the paddle size was a mod already supported by the hardware and the manual gave details on how to do it. Though it wasn't necessarily intended as a difficulty setting, it was intended to support different sizes of TVs. iirc, all you need to do is solder 1 jumper.
Many old systems stored their software in a diode matrix, which could be modded with a soldering iron: https://www.cca.org/blog/20120222-Diode-Matrix.shtml
My favorite page remains the one about his computer:
[0] https://memory-alpha.fandom.com/wiki/The_Naked_Now_(episode)...
[1] https://memory-alpha.fandom.com/wiki/Isolinear_rod?file=Isol...
[2] https://stargate.fandom.com/wiki/Control_crystal?file=Contro...
[3] https://stargate.fandom.com/wiki/Control_crystal?file=Door_c...
[4] https://stargate.fandom.com/wiki/Control_crystal?file=Contro...
I think I had thought it was possible. But in my mind there was no way Red or Kelso could possibly know how to do it.
The fact it was in the manual helps make that more possible. Don’t think the episode showed/implied that though.
Amazing, that a manual would discuss resoldering a jumper. Today's manuals warn you not to open the case and not to eat the batteries.
Red: "Congratulations, son! You have seen the future!"
Kelso: "Yeah, yeah, you're so right, Red! Home computers! That is the future!"
Red: "No, no, no. Not computers! Soldering! The future is soldering! [...]"
How often do we try to extrapolate from current technological improvements to predict the future, yet fail to grasp which changes are truly important.
[0] https://tvshowtranscripts.ourboard.org/viewtopic.php?f=936&t...
I wish more CS curricula would start with digital logic and stay there for a little longer before going into the full stored-program computer. That used to be the norm.
One of the first Pong ICs, the AY-3-8500, is reverse-engineered in this series of articles: https://nerdstuffbycole.blogspot.com/2018/01/reverse-enginee...
Digital logic would go all the way from boolean logic to designing our own toy CPU, with implementation using discrete logic components left as optional for those that felt like going for the top score on the assignment.
Additionally we also had stuff like EEPROM programming as optional selection for the total credits.
Interestingly enough, stuff like Prolog and LP, was also a required lecture for both engineering degrees.
Even if we translate our degree names to CS, the contents of those 3 to 5 years are very much hands on, with many lectures requiring successful delivery of project assignments before attending respective exams.
https://catalog.utdallas.edu/2024/undergraduate/programs/ecs...
After Bologna, no one really takes the plain three years version, as the old degree was upgraded to include Msc, and everyone with the old degree also got equivalence to the new one with Msc, and no one wants to search for a job having only the lowest level degree.
It followed such a lovely flow, starting with the absolute lowest level of computing (binary maths, diodes, transistors, and building logic gates with these) and kept on combining these building blocks until we arrived at modern computers and software.
Even if you're just a "modern age" developer that only ever uses modern programming languages, just understanding how everything is built makes you make better decisions all around.
Memory used to be ridiculously expensive, and it was cheaper to build a board full of dedicated logic than a simple CPU with a full-screen frame buffer.
I get that there's a timeline, and that following the timeline is a good way of building a base but...
But... you could also add it to the middle or end of a course. I feel students would be more likely to appreciate the material. Would also be good to have "easy" courses that aren't fluff.
I remember sneaking[1] into a few of those courses during university. Loved them.
The problem is that most computer science students viewed them as useless. They wanted to take, what they thought of as, useful courses. If it wasn't C++, it wasn't useful. Even the computer science students who were interested in pure math, these were computer science courses after all and the university offered a separate software engineering degree, didn't see them as useful.
A slight tangent: one of the courses I had the most fun wasn't even a computer science course. It was a philosophy course that spent a lot of time on computability. Cramming a bunch of genuinely interested social sciences students into the same room as a bunch of genuinely interested computer science students made for an absolutely amazing course. In contrast, the computer science department version of the course was populated by a majority of students who were only interested in the mandatory credit. It made for an astoundingly terrible course.
(These thoughts are from the perspective of a mid-1990's physics graduate.)
[1] Sneaking may not be the right term here. People in the department knew that I was doing this, to the point where I managed to get access to department computers and even managed to take a course for credit, with special permission from the professor and without the prerequisites, but the administration certainly didn't know about it since I didn't even bother with the official "auditing a course" route.
We see over and over again through history (Renaissance Italy, Bell Labs, Romantic-period Berlin, early-Google's cafeterias) how cross-disciplinary conversation inspires innovation.
The "useful" classes are necessary, but if institutions (or students) stop there then they have missed the whole point. They're treating class-work as office-work, and making that the summit of their ambition.
I am bringing that up because a lot of universities mandate interdisciplinary courses, yet sabotage their value by letting students limit themselves to introductory courses or even offer special courses directed towards non-majors. Students frequently attend those courses for an easy A, but never let their preconceptions be challenged or bothered to challenge the ideas of others.
(That said, I don't really blame students for treating universities as vocational schools. I'm pretty sure the ones who went straight for the grades found more success in their professional life simply because they didn't let intellectual curiosity interfere with their professional goals.)
I gestured at it, but didn't quite complete the thought, in my first comment: a cross-disciplinary culture is essential between professors and departments, not just students. If universities are to be engines of innovation, and not glorified job-training centers, then experts have to form social bonds, and have out-of-band conversations, and develop projects together, too.
"Didn't let intellectual curiosity interfere with their professional goals" is spot-on as an indictment of our entire culture, at the moment.
My CE course was essentially an Electrical Engineering course with power distribution subjects replaced with programming subjects
of course nowadays i do the dumb shit everyone else is doing. import numpy as np, np.ones(arr), on and on. i once came across really convoluted business logic. rewrote that as a giant boolean expression and then simplified it using k maps. but when i tried to explain that in the kt session, they were like - what is k map ? what does that mean ? i thought wow i can explain it nicely and win the day. After all, in the kingdom of the blind, one eyed man is king. Instead, when i gave many examples and asked if they had any questions, they were like - what if a truck hits you on your way home ? then who will do this k map minimizing for us ? that’s when I suddenly recalled what actually happened in country of the blind. Nunez doesn’t become King. Instead, the blind fuckers chase Nunez to poke his eyes out. so in order to survive on the H1B, i had to forget all about the k map. pretend i am also blind and continue importing that numpy. otherwise i can forget about putting food on table.
And of course Tennis For Two was also purely analog pre-dating ICs completely.
http://www1.cs.columbia.edu/~sedwards/papers/edwards2012reco...
Go to the computer spiele museum https://www.computerspielemuseum.de/
It's about an arcade game from the 70's called Sega JET ROCKET:
But TVs then didn't have composite video inputs, so you also needed an RF modulator.
I am writing a book somewhat similar to this (currently in Portuguese, but later in English and other languages) using the Digital simulator in Java for the examples as schematics, though they can be exported as Verilog for implementation in FPGA boards.
https://github.com/jeceljr/LivroComputadoresEVideogames
Each chapter represents a video-game console generation, with hardwired Pong and Soccer in the first chapter. I am now working on replacing the game logic in Soccer with a 16 bit version of RISC-V for the second chapter and then improving the video and sound to Colecovision levels. In chapter 3 we will have a 32 bit RISC-V with NES level graphics and sound, with a pipelined RISC-V with something like the Gameduino for chapter 4. The 8 Bit Workshop will let readers program the actual consoles from each era and not just our retro designs.
Simmilarly, when the IBM 1401 https://www.ibm.com/history/1401 launched in 1959 it replaced large numbers of plugboard-based tabulating systems http://www.columbia.edu/cu/computinghistory/plugboard.html in offices.
BLIP video game by Tomy commercial 1979:
https://www.youtube.com/watch?v=lPA7SQbwDOQ
Blip - 1977 Mechanical Pong:
Naturally this doesn't scale beyond basic games, due to the hardware requirements.
I have somewhere on my parents home a book from the 70's, from my father, dedicated to this kind of games, the precursor of BASIC games books from the 80's.
If you want to experiment this today, there are companies that sell such kits still,
https://www.ic0nstrux.com/products/gaming-systems/game-conso...
Anything but the simplest programs will require way too much logic to implement with discrete components.
While the PlayStation 2 shipped with composite cables, even it had a coaxial adapter available for tuning to channel 2 or 3.
The Super Nintendo was the last console I remember having one. The Genesis must have too.
But by 95 (PS in US) there were no longer the default. They may have still been available, I don’t know. Kind of doubt it but maybe I just didn’t notice.
You (nearly) always had to buy the RGB SCART cable you actually wanted for a good picture separately.
[1] random eBay listing, with RFU Adaptor pictured / listed in contents: https://www.ebay.co.uk/itm/364907339156 (Note Europe uses Belling-Lee connectors for TV antennas, so the connector is probably different to North American style RF boxes).
For the RF switch part, Nintendo actually recycled the NES design for all of them. It's kind of funny seeing that chunky gray box next to a GameCube logo.
https://www.olimex.com/Products/Retro-Computers/RVPC/open-so...
VM's just provide the software version of asic boolean logic
------------------
a) Boolian logic / explicit constructions to generate results. aka pong on specific purpose computation device.
b) Programmable computing / general purpose computer uses constructive logic (process of construction of mathematical objects aka programming languages)
c) "compiling"/"interpreting" b sets up the path through a to generate 'results' vs. a's fixed path/hard wired path transition/state table aka compiler generated type punning![0]
-----
[0] : https://en.wikipedia.org/wiki/Type_punning
: punning with character : gawk chapter "11.3.11 And Now for Something Completely Different" program
: nil-punning : https://ericnormand.me/article/nil-punningIt looks complicated but it’s really not if you break it down into small bits and think of it like you would with a piece of software I.e. abstractions.
It covers some things that are rather counterintuitive, especially if you come from a modern programming background.
Now is it complicated? No not really, I read the answer and immediately understood what was going on.
But no modern programmer would ever come up with the solution of addressing x and y positions by setting timers to wake at the times when the point in the scan-line or the scan-line in the frame was reached (although sleep-sort does exist).
If anything, the point of the post is the fact that it's very easy to understand, despite how counterintuitive it may be.
>Now is it complicated? No not really, I read the answer and immediately understood what was going on.
Seems like you agree? Not sure why you asked if the parent poster RTFA.
Much like he seemed to have missed the point of the post, you seem to have missed my point about him seeming to miss the point of the post.
Many come here just for the comment section and the discussions, not the article per se.
This is also how the video hardware on CPU based consoles and home computers worked. They had counters and used them to either index into a frame buffer or look up hardware sprites, or both. Some machines did it more or less entirely in software (e.g. the ZX-80).
http://blog.tynemouthsoftware.co.uk/2023/10/how-the-zx80-gen...
Of course there are modern programmers who still do this today, bit-banging VGA on little microcontrollers and the like.
I'm guessing you'd need to solder on your debugging tools (oscilloscopes?) in parallel, since anything else would completely invalidate anything that you were trying to do.
It honestly sounds like a recipe for Heisenbugs.
I would say it’s only fairly recently we stopped needing to do this - when we moved to graphics mode operation systems (oh god I say fairly recently but thinking now it’s probably close to 30 years ago yikes). I’m thinking Garmin app developer may still need to do it
One beat tool are the shift registers -- https://bobek.cz/traffic-light/
Each player has a Y position controller. So and Y1 and Y2 register. Then the ball has an x and y position. The game logic is controller by comparators to detect events like reaching borders or within the paddle width range. So for example if you reach the left border and is within left paddle range then bounce the ball back right otherwise the left player loses.
In terms of drawing to the screen, again compare the screen pixel position to each of the two paddles and ball position. Drawing the score was a little more complex but your have a counter for each players score and that determines which lines to draw. So you OR together the output from many comparator logic to determine the pixel should be lit or not.
If you understood how a 1970s TV worked (specially the simpler black and white ones used in the first video-games) then imagining a circuit that would generate the needed signals was a bit easier.
Now that I think of it it is really a rather unexplored field. Much more should be possible.
Imagine a car printed in the center of some transparent foil then you rotate the foil to turn. For the background you could have a giant map by projecting a tiny part of a rolled up slide. You could put the road logic on a large drum or hurdy-gurdy punch card roles.
Lots of possibilities.
Searching for "EM arcade game" on a video platform like YouTube may be worth it…
Somehow related pinball machines were way more complex than I'd ever imagine.
The good news for the Pong developers is that most of those larger components were already available off-the-shelf. Common families of these chips, such as the venerable 4000-series and 7400-series logic families, began to appear on the market in the mid-1960's.
Edit just to add another bit of nuance. If it still seems like an extremely difficult task without much precedent, I think the lineage of these early arcade games can be traced back through their older arcade siblings: pinball machines. People had been building more and more sophisticated pinball machines over the decades since their inception in the early 1930s. For a look into pinball machines, some of their history, and an amazingly deep dive into the workings of a 1970's model, check out Alec's pinball series on Technology Connections [1].
[1] https://www.youtube.com/watch?v=ue-1JoJQaEg&list=PLv0jwu7G_D...
A very simplistic and non-general purpose computer, but a computer nonetheless?
CS builds/extends hardware based on Shannon's work. CS programming languages are classified according to the Cholmsky hierarch in theory of computation. Given topic of discussion, atari games implimented as logic gates are a form of state machine (autonoma) which can be represented at a higher level of abstraction by a programming language. ( https://www.geeksforgeeks.org/chomsky-hierarchy-in-theory-of...)
There are different frameworks / ways of implimenting/presenting 'logical computations'. aka ME physical, EE logic gates, math numerical computation, computer science programming languages.
Loosely ordered by various implied collision/response (XOR) for anaylzing/presenting "logic/type groupings" in physical spaces / virtual spaces.
Higher level/virtual logic/techniques of modern CS hids the 'logic bits' of things. aka gawk chapter "11.3.11 And Now for Something Completely Different" program -- where character fonts are higher order of logical groupings tied to a number of bits ( https://www.gnu.org/software/gawk/manual/gawk.pdf ) and pdf imaging ( https://github.com/tavinus/pdfScale )
Historical progression of display mechanics has less virtual abstraction relative to how programming languages produce/compute results.
No player movement, all autonoma state machine : https://www.youtube.com/watch?v=wiYTxjJjfxs
Progressing from "larger" implimentation to smaller implimentation details for equivalent amount of "logic states":
-----
A) mechanical logic devices and circuits : https://www.nacomm09.ammindia.org/NaCoMM-2009/nacomm09_final...
zoetropes : https://letstalkscience.ca/educational-resources/interactives/zoetrope
kinomatic display :
babbage engine : https://www.computerhistory.org/collections/catalog/X39.81 / https://www.computerhistory.org/babbage/
mechanical pixel art : https://www.youtube.com/watch?v=w1ks0Vy98KI
mechanical clock : https://www.youtube.com/playlist?list=PLiqrEMrfoE8pOmxFXpOTk7UyUK8hfkwLH
water display : https://www.youtube.com/watch?v=L0i-uTa4kv4
-----B) electrical logic devices (smaller scale than mechanical devices, so no vaccum tubes / flip displays):
light gun : https://www.reddit.com/r/explainlikeimfive/comments/5crto3/eli5_how_does_an_arcade_shooting_machine_works/
mechanical tv : https://en.wikipedia.org/wiki/Mechanical_television
crt ram : https://www.radiomuseum.org/forum/williams_kilburn_williams_kilburn_ram.html
e-ink : https://www.visionect.com/blog/electronic-paper-explained-what-is-it-and-how-does-it-work/
-----C) virual stuff:
pixel to spreadsheet : https://leondrolio.com/apps/pixel-spreadsheet/
mindcraft computer : https://minecraft.fandom.com/wiki/Tutorials/Redstone_computers
https://www.reddit.com/r/programming/comments/xecijm/someone_made_minecraft_in_minecraft_with_a/
bash & postscript make it a lot easier to change the display mechanics : https://github.com/tavinus/pdfScale
-----Anyway one typo and it borked the whole deal. Lol it is truly difficult sometimes