APPLE2IDIOT Expansion Card Lets Your Apple II (Sort Of) Access The Internet

[Nathanial Hendler]’s Apple2Idiot expansion card for the Apple II family of computers is a nifty mix of modern and vintage, and provides a clever means of allowing the host computer to (indirectly) access the internet over WiFi while keeping things simple from the host computer’s perspective.

The PCB has plenty of space on which to silkscreen reference data. Click to enlarge.

It does this by embedding an ESP32 module and a dual-port RAM chip onto an expansion card. The Apple2Idiot, when installed into a host machine, presents as a memory location which the host machine can access. The ESP32 then takes care of all the WiFi communications and tasks requiring internet access, and the host computer directs these tasks (and reads their output) via PEEK and POKE commands.

This means that there are two pieces of software for any given task: one running on the ESP32 doing the actual work, and one running on the Apple II that communicates with the ESP32 on the card by reading and writing to memory. It’s a simple system, and one that [Nathanial] thinks works quite well for specific tasks.

Example programs include things like scanning and selecting a WiFi network, fetching weather data, and sending a message to Slack. Making new applications does mean having to write software on two ends, but the simplicity of the system also means flexibility, because anything the ESP32 does can have its complexity abstracted away by the time its data is presented to the host machine. Not that the Apple II is incapable of dealing with the modern internet more directly; we’ve seen a basic Apple II web server written in BASIC.

26 thoughts on “APPLE2IDIOT Expansion Card Lets Your Apple II (Sort Of) Access The Internet

  1. I can run any old computer with a serial port on the internet by connecting to my main computer. It’s no different than when I did dialup and used a shell at my ISP. I’m sure my main computer is better than my ISP’s server in 1996.

    This is the same thing, except putting a.much better comouter inside tye Apple II.

  2. We DID access the internet with crapple 2s, C64s, trash-80s and CoCos back in the day. Wasn’t much there. Gopher didn’t yet exist.

    Granting all they were doing is terminal emulation and dialup to our friendly explorer scouts host…Thanks again Black and Veatch!

    1. Well, that “Internet” rather were X.25 networks, I assume. TCP/IP came later, with the *nix crowd.

      If that (X.25) was (hypothetical speaking) all that’s still needed, then it would be feasible to adapt old AX.25 code from the amateur radio community.

      Their TNCs from the 1980s essentially were minimalistic 8-Bit computers with 64KB of RAM, a serial interface and an D/A and A/D converter (modem).

      To be fair, some added bank-switching soon to add a mailbox feature and more protocols.

      So even in comparison to a later TNC, computers like this Apple are totally underpowered – let’s something meaningful like Expanded Memory (EMS) to that junk box and we’ll see if it can handle TCP/IP natively. 😉

      1. No, because the ESP32 should be seen as pre-flashed firmware. The idea is to emulate the behavior of the entire card as it was programmed. In other words, any Apple2 basic or assembler code developed on the emulator should work and behave the same way with the bare metal setup.. Its only an idea at this moment.

      1. Hi Nathan,

        We can talk about it; only my professional life nowadays is taking up almost all my free time. You will see that it is already more than only an Emulator. It has an assembler, debugger and manual all in one. I am slowly trying to code the animated tabs in a way that I can add sub-menus that will allow adding screens for I/O devices like disk, I/O cards… sound is still awful, not even sure if JavaScript will ever allow emulated sound. All my latest updates are on GitHub

  3. Okay, so someone needs to write a disk emulator for this that provides access to the various online libraries of Apple II software. It should auto-boot to some appropriate menu.

    Next, perhaps provide a transcoder to watch YouTube videos in 40×48 16-color graphics mode. Hi-res graphics might give better resolution, but I don’t think you could get a useful frame-rate from it without being exceptionally clever.

    1. I am on my way developing a transcoder for webcams in HGR resolution , but I have to say that dithering and color approximation is not practical on a 6502, transcoding can only achieve acceptable frame rates if done by external hardware, or in my case, a piece of Javascript embedded inside the emulator. Remember that MUL, DIV opcodes where initially taken out of the ‘equasion’ by Chuck Peddle, to lower the price of the 6502 down to 25$.

      1. Obviously, the heavy work would have to be done by the ESP. The 6502 would still have to move the data from the I/O region to the framebuffer. You’d still need to develop a protocol/algorithm to minimize the amount of data movement necessary, since copying an entire hires framebuffer took close to a second, if I remember correctly.

        That’s why I suggested lo-res, which can be copied quite quickly. Back in the day, I wondered what it would be like to see video (as in captured-by-a-video-camera video) in lo-res, and whether one could create a game like that. I think that the limited amount of memory would make the answer “no”. However, by streaming from the network, you can overcome that limitation.

  4. The original design was that all the networking including TCP/IP is offloaded to the ESP. The attached microcontroller just sees a serial line. There are special commands to initiate a TCP connection to a host, after the connection is established everything that goes over the serial line is the raw data stream from/to the host. So all the application logic is on the host microcontroller and the offloading code on the ESP never has to be changed.

    Wouldn’t that make much more sense? I don’t get why every new use case requires changes on both sides.

    1. I would have made the presumption that they just cut out the “middle man” low speed Apple original serial hardware and just emulated a port at high speed.

  5. I’m the creator and I just found this article a little late to participate in the comments. It’s fun to see, but the device was not in anyway meant for public consumption. I created it to learn about developing Apple II hardware and software. Something I knew nothing about. Most of what I want to do with the Apple II doesn’t need a TCP/IP stack, which is far more Two things I knew nothing about. I just wanted to make the Apple II an IOT that can use lots of APIs out there. In addition to what’s in the article, I have it running chess using an internet API. The moves are smart, happen almost instantly, and I didn’t have to write any game logic. That’s kinda what this was about, just screwing around. I do think that my approach of using dual port ram to handle timing/messaging issues between the two devices was novel and not too shabby for a lazy person that doesn’t know what they’re doing. Cheers!

    1. Nice to meet you ;-) Good job ! Emulation may not look that fun compared to a playful electronics project, mine is more focused on keeping and in a way immortalize some childhood memories. But also develop software that back in the days, would be unthinkable. My original idea was to emulate a camera interface while the interfacing happens through an emulated card, after that I discovered this :-)

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.