I have an early Apple IIc, model A2S4000 with the 342-0272 motherboard and ROM 255. (I am considering upgrading the ROM, perhaps with a switch that would let me switch between different ROM versions.)

I'm thinking I'd like to connect something like a Motorola MC6821 PIA (4 I/O addresses) or MOS 6522 VIA (16 I/O addresses) to my Apple IIc. I pick these chips as typical examples; the general idea applies to anything similar, such as another ACIA or whatever.

(Note that this question is not looking for XY challenges proposing ways to connect I/O through means that don't resemble direct access to an IC on the system bus; that's not what I'm investigating right now.)

On a "non-c" Apple II this is no big deal; just plop the chip on a board with whatever additional logic you need, plug it in and Bob's your uncle. The Apple II even provides dedicated address space and decoding for the chip's I/O addresses and ROM, if ROM is necessary. (It's not in my case, though it would be nice to have if possible.)

However the IIc doesn't have actual slots, and much of the address space is allocated to internal hardware. This leads to the following questions (and perhaps others I've not thought of).

Is there any non-decoded address space in the Apple IIc? (I.e., addresses that when accessed don't enable any hardware, including RAM or ROM.) In the Apple IIc Technical Reference Manual Tables B-5 through B-9 list plenty of "Reserved" blocks, such as $C020-$C02F (onboard I/O area) and $C0B0-$C0FF (slots 3 through 7 I/O areas). Reading those two blocks returns semi-random values, which one would expect if those blocks are not decoded. If there are addresses I can safely use for my hardware, what are they? Or need I pull some tricks with my peripheral design to disable on-board hardware (perhaps temporarily, the way the No-Slot Clock does) in order to find address space I can use for my hardware's control and data registers?

What are my options for connecting to the address and data buses and necessary control lines? A typical choice seems to be to build a "shim" that goes between a chip and the board, the way the No-Slot Clock does with the ROM or the RAM Express II A2S4000 does with the CPU. What are the best chips with which to do this, both in terms of the signals available on their sockets (or board pads) and physical clearance? Are there other options for physical connectivity? (I am open to the idea of modifying the board to some degree, such as via soldering connectors to it.) For example, there seems to be a full set of unused pads around the GLU chip. How about options that bring the lines outside of the case, to plug in to an external board?

I'll also need some sort of address decoding for my chip select. Is there any on-board decoding I can "steal" to do part of the work, or need I fully decode the entire address on my hardware?

Are there any other concerns here that I've missed?

  • 2
    Do you have a specific use case in mind? If yes, and if timing is not critical, and alternative would be to use a suitable microcontroller hooked up to one of the serial ports. Apr 15, 2020 at 14:06
  • 3
    <random comment directed at nobody in particular> Cool feature by VTech in the Laser 128 was including an external expansion slot to support this sort of thing. There's a set of DIP switches to reassign internal "pseudo-slots" to external expansion boards. </end random>
    – Brian H
    Apr 15, 2020 at 14:46
  • @MichaelGraf One use case would be to use the same software I use on other 6502-based computers to use things like Nintendo-style game controllers and SD cards. Building a second computer to run a PIA and communicating with it over a serial port would be a lot of extra work and also significantly slower.
    – cjs
    Apr 15, 2020 at 18:22
  • @cjs For a digital game controller, you might try tying into the keyboard to electrically simulate keypresses. Apr 16, 2020 at 1:01
  • 1
    @cjs - You wouldn't use the microcontroller to "run a PIA". You'd use it's own built-in I/O, including things like hardware SPI for the SD card, and you'd offload low-level tasks (e.g. polling the game controllers) to the microcontroller, and transmit only useful events (e.g. button down / button up). If you want to connect directly to the system buses, the route I'd investigate would be a shim board attached to the CPU socket, with a 5V CPLD to handle the glue logic (maybe an ATF15xx from Microchip, they're still in production), and whatever chips you want on there. Apr 16, 2020 at 7:47

2 Answers 2


Ian Kim's Mockingboard 4C shows how it is done. This card includes a 6522 VIA chip (actually a 65C22 since those are still in production) as part of the daughterboard. It connects via the CPU socket. There is also a version for the Apple IIc+.

The Apple IIc was never designed for expansion cards so your options are via the CPU socket. Applied Engineering also sold an expansion card for the Apple IIc with a Z80 processor (for CPM), clock and 1MB of extra memory. This also connected through the CPU + MMU sockets.

  • Unfortunately, the first link doesn't seem to "show how it's done", but rather a link to purchase the board. The second, expansion card, link is "forbidden"? Dec 9, 2023 at 3:13
  • 1
    Updated the second link to work around the site's blocking of direct links.
    – Ian Brumby
    Dec 9, 2023 at 6:25

Physically, the simplest and most non-invasive method to connect would be the CPU socket. Most of the contemporary IIc expansions used that.

From a "virtual slot" perspective, all of the possible 7 Apple IIc virtual slots are already occupied by one or the other ROM version and tightly woven into the operating system. (some, like slot 5, was, in the beginning, somewhat wasted to provide the developer names through some sort of easter egg , though, later it hosted the Unidisk interface). So, without major ROM modifications, you wouldn't be able to introduce a full "virtual card".

Some of the virtual slots don't seem to use their assigned address space, though, and, for example, most of the slot 7 address space ($C0F0-$C0FF) should be usable.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .