Sorry if this is an obvious question, I come from a software background and don't know the names for a lot of components. I am designing some custom hardware based around a W65C02S processor (a modern version of the classic MOS 6502). This processor (data sheet here) has only a 16 bit parallel bus for talking to other chips but to interface with modern peripherals I need GPIO functionality. Are there any ICs which would provide setting/reading a GPIO line state by communicating with the parallel pins on this chip?
- Anybody can ask a question
- Anybody can answer
- The best answers are voted up and rise to the top
The W65C21 PIA (Parallel Interface Adapter), also made by Western Design Center (WDC) along with the W65C02S, is a parallel GPIO chip specifically designed to work with the address/data/clock interface of the 65xx series of chips. (The 6521 is patterned after the 6821 PIA that was designed by Motorola to go with the 6800 microprocessor).
You may also see references to the 6520 and 6820; the entire family of 6820, 6821, 6520 and 6521 PIA's are all pin compatible and were designed by Bill Mensch, the founder of WDC. Mensch also was instrumental in the design of the original 6800 and 6502.
The 6521 has two 8-bit bi-directional I/O ports, automatic handshake control of data transfers, and two interrupt line outputs.
By adding some decoding to the address lines, creating individual chip selects, you can put as many 6521's on your system as needed.
The 6521 was the preferred way to add parallel ports to a 6502 processor 35 years ago, and still is. Although the Apple ][ didn't have any on its main board, some of the I/O boards used it, such as the one below (it used a Motorola 6821 instead of the 6521, same functionality as mentioned earlier). The Apple 1 had a 6820 on its main board. The Commodore PET had two 6520's on its main board (used for the keyboard).
The W65C21 is available at Mouser in various packages.
You might also want to check out the W65C22 VIA (Versatile Interface Adapter), which is like the 6521 (two parallel ports) but in addition has two 16-bit timers and a shift register. The 6522 was also used on the main board of the PET. The W65C22 is available at Mouser.
One possible solution would be to convert the parallel bus to I2C, and then use any number of I2C to GPIO chips.
Perhaps some combination of:
Implement a memory bus interface and any peripherals you need (GPIO's, UART's, SPI, I2C, anything at all really) in an FPGA.