Hacker News new | ask | show | jobs
by wdrw 1522 days ago
The parallel port was wonderfully hackable. Having your PC control an LED light, or even a motor (with some effort), didn't take a whole lot of electronics knowledge. Or 8 LEDs, one per pin. And controlling it was as easy as sending text to a printer. We lost this in the age of USB...

When I was a kid my dad helped me hook up a pin to a motor. And not just any motor, but one inside a cassette tape player. I could then make little games in BASIC that had real voice! Of course it had to be linear, it basically played chunks of voice recording and stopped at the right times.

11 comments

One of the most delightful and hilarious things I've ever seen anyone do with a computer involved a C64 and its parallel port. This guy I sorta knew in college had built a box with a bunch of relays and 120V AC power outlets. The parallel port would control the relays. Into this box, he plugged a bunch of lamps, then he'd turn out the other lights and play music on the computer, and the lamp would basically create a light show in time with the music.

He also had written some kind of memory-resident program (a TSR in DOS terms) that he could trigger while another program was running, and it would render pages of memory to the screen in real time. So he could start any program that had music, browse around through its memory space until he found a byte that seemed to be updating in time to the music, and then select that as the byte whose value got periodically copied to the parallel port.

So you could load up your favorite video game and then have a light show in sync with its music. Or any other activity of interest.

Parallel ports were very popular for connecting joysticks to MAME cabinets

The Covox speech thing was a nice hack as well

https://en.wikipedia.org/wiki/Covox_Speech_Thing

And homebrew SNES controller adapters! Good ol' "SNES controller on lpt1" in zsnes got me many hours of emulation fun back in the day.

https://www.raphnet.net/electronique/snes_adaptor/images/sne...

I remember learning about this by some company that made DOS shareware clones of PacMan and Galaga but can't remember the name. Ring a bell?
I found it - ChampSoftware and the ChampCable
and ModPlay: https://awe.com/mark/dev/modplay.html

Amazing software for that time.

This sounds almost exactly like my first taste of computing with my dad; 8 low voltage fillament bulbs (and some buffering) wired to the parallel port, along with some simple code to count in binary. Sure, I was a kid and more excited just to have flashing lights, but in my more studious moments I did learn so much about binary, how things are represented in computers, programming, interfaces etc etc.
It seems like all of our modern abstraction layers have lead to a dirth of tinkerers on the edge between metal and software. There isn't any easy gpio on your standard Chromebook or desktop for instance. Yeah you can get a usb to gpio or make one. But being able to sit down at any computer and do something low level was nice.
On the contrary, any device which has DDC support and a VGA, DVI or HDMI output will have an i2c pin in the connector. Even DP carries i2c in its aux channel. https://hackaday.com/2014/06/18/i2c-from-your-vga-port/
that is a cool hack, but its just using i2c to talk to an atmega and have it do the gpio. You could just as well use the atmega from usb. Or an esp over wifi.
When I got my first Internet connection at home (kinda late as I was "big times" into BBSes before that), I was already using Linux. But we were too cheap to have a network at home so... I'd use "PLIP" (parallel port IP) to share our Internet connection between me and my brother: a parallel cable between my beige PC (a 486? Pentium? Don't remember) and a crappy old laptop. And so the two of use were simultaneously using Netscape or something.

It made me sad when computers starting shipping without a parallel port: I mean... Even laptop had these back in the days!

I've used my parallel port as a JTAG (IEEE-1149.1) interface to reflash/debug embedded targets. It's slow, but it works.

http://zoobab.com/simple-jtag

When I was young, I used it for a morse code decoder, and then later to decode magstripe data from a reader circuit I made with spare parts. QBasic made it trivial to interface with! I remember being able to achieve toggles at near a MHz with QBasic, since it was just a memory write.

Having that many IO, ready to go, was really great. I bought a separate ISA expansion card so I wouldn't burn out my motherboard's port. Now, you can get a little USB powered micro python board for the same price!

PIC and AVR microcontrollers can be programmed using a parallel port; passive adapters with nothing more than resistors used to be common.
I once made a homebrew GraphLink parallel port cable so that I could upload games and programs to my TI graphing calculator. Made it a lot easier to write programs than to tap them out on the calculator itself.

A friend and I wrote a chat program that used the calculator-to-calculator GraphLink cable to send messages back and forth so we could chat in class. This was a neat hack, but considering the cable that came with the 85 was like 2 feet long, it was kinda useless in practice unless we were sitting at the same table. So I made a longer cable at home out of stuff from RadioShack.

Everything was cool until we got caught using the homebrew cable in class. Fortunately, once we showed the principal what we'd done, we were told that it was very clever, but not to have the cable in class anymore. :)

You know, I think I might still have my TI-85 and homebrew cables in a box somewhere. I wonder if any of my old programs are still there.

I recall dragging my massive second-hand Zenith 286 "laptop" into school and serving out zshell assembly programs to people with my homebrew GraphLink. I even sold a couple of them. Many a math class spent playing tetris on my TI-85...
> We lost this in the age of USB..

And got it back with rpi with true gpio pins

Well, if your ok with the non-realtime characteristics of the RPi's GPIO via linux userspace, one might as well just buy one of the dozens+ of USB->GPIO adapters all over ebay/amazon/aliexpress/etc with windows/linux/etc drivers.

Or if you need something more advanced than basic LED blinking/etc, just pick up a wemos D1, or any of the dozens of other similar microcontrollers that can be had for a dollar or two that have GPIO and a USB serial interface and do your bitbanging on the ESP8266/etc in an environment that isn't susceptible to a heavyweight OS failing to schedule your task for long periods of time. One can hang that device off a PC and talk to it with simple serial programming/commands or just plug it into the target device as a wifi adapter and do all the control over Wifi+JSON/etc. Which it turns out are basically what most of the USB->GPIO adapters are anyway.

So, in the end, using a RPi for this is really sub optimal on every front, cost, performance/accuracy, complexity, power utilization, etc.

RPI is $70-110 in the United States nowadays. There has got to be a cheaper alternative that is widely available like some sort of NodeMCU?
There are many cheap system-on-a-chip microcontrollers that have enough computing power for many basic uses for which RPi is overkill, and some GPIO and built in wifi and/or bluetooth wireless, and they support dev frameworks like arduino or micropython.

Another comment mentioned a bunch of other models, but I had some fun with the Espressif ESP32 platform where the bulk chips are like $4 each (depending on quantity) but there are some nice beginner-friendly devkits using the same chips for $15 like https://docs.m5stack.com/en/core/atom_matrix or https://shop.m5stack.com/collections/m5-controllers/products... that are sufficient for a bunch of tasks.

Just because demand is high doesn't mean you have to pay more. https://twitter.com/rpilocator tweets stock alerts - and they are pretty regular.
Indeed, my first PC to experimental hardware interfacing was through the parallel port with QBasic. It helps that the parallel port is a DB25-F and you can just poke wires into it :P
The best thing was using it as a DAC. A bunch of resistors and off you go! That was one of the greatest things I ever made as a kid.

https://hackaday.com/2014/09/29/the-lpt-dac/

Yeah, I remember banging together a very simple ADC to take readings from various sensors straight into the parallel port - and being amazed at how easy it was to build something that could talk directly to PC hardware.
I have used a parallel port to drive a JTAG port on a different device to program a boot ROM.