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 '20 at 14:06
  • 1
    <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 '20 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 '20 at 18:22
  • @cjs For a digital game controller, you might try tying into the keyboard to electrically simulate keypresses. Apr 16 '20 at 1:01
  • @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 '20 at 7:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.