5

The 6522 VIA is an I/O chip used in the Vic-20. I was under the impression that UART (Universal Asynchronous Receiver/Transmitter) is the general term for such chips, so was surprised to see this: https://www.reddit.com/r/vintagecomputing/comments/83uoqv/what_is_the_purpose_of_the_6522_via/

The MOS 6522 is an upgraded 6520 PIA. In your case, the shift register aspect of this device could be used as a simple serial port. It is not a UART, per se...

What is the difference between the 6522 and a UART?

1
  • 1
    In intel terminology, UART=8251, VIA=8255 – cup Dec 18 '20 at 6:49
11

First of all, the 6522 has some things (parallel ports and timers) that a UART simply doesn't have at all.

A UART will normally generate some programmable number of start bits, stop bits, and possibly parity bits. The number of data bits will typically also be programmable (e.g., on an 8250, anywhere from 5 to 8 data bits). Insertion of the start and stop bits is what makes it "asychronous"--that is, adding the start/stop bits allows asynchronous transmission. The start and stop bits are used to synchronize transmission, even though the transmitter and receiver don't (otherwise) share any clocking. The level of configuration is what makes it "universal"--that is, a single chip was supposed to be compatible with essentially any serial standard from an ancient Teletype ASR32, using 5-bit Baudot codes at 110 bits per second, all the way up to a 28800 bps modem using 8 data bits, no parity, 1 start bit and one stop bit (and faster than that, up to some upper limit on speed--115200 bps for a lot of designs, but newer ones go up to a few megabits per second in some cases).

The 6522 wasn't programmable to that degree. It just took 8 bits of data in a register, and pulsed them out on a serial line (or read 8 bits on a serial line and put them into a register). No start bits. No stop bits. No parity. Only 8 bits, no more, no less. Without the start/stop bits, it doesn't support asynchronous transmission, and with programmable parameters, it's not "universal". So I guess if we started from "UART" and removed the parts that don't apply to a 6522, we're left with an "RT".

6

TL;DR:

UART is a generic term for a serial interface function (chip) for asynchronous transmission.

In contrast 6522 is a specific chip - which does not include UART functionality.


Implementation for UARTs were done by next to every manufacturer, each using names (and numbers) of their own, like

  • Intel's UART 8250 / 8251,
  • Zilog's Z80-SIO (Z8440) or Serial Input/Output,
  • Zilog's Z80-DART (Z8470) or Dual Asynchronous Receiver Transmitter,
  • Motrola's ACIA 6850 or Asynchronous Communications Interface Adapter.

Of course MOS, the designer of the 6500 series had as well one, the 6551 called ACIA like Motorola's (that's where they came from :))

The 6522, called Versatile Interface Adapter (VIA), in contrast is a multi function chip. Essentially an enhanced 6520 parallel port (Peripheral Interface Adapter, PIA) with it's two 8 bit ports and a set of handshake lines going with them to build a fast parallel interface. It got two timers and a shift register added. The later is not an UART, just a shift register (*1) which can be used for synchronous serial communication.


*1 - The often mentioned bug is only relevant in certain configurations.

1
  • 1
    There is also the USART - the Universal Synchronous Asynchronous Receiver Transmitter. – cup Dec 18 '20 at 6:48
2

Referring specifically to the serial communication functionality of the VIA, there is a very crucial difference between that and a UART. (It is not unusual for a UART to also include some GPIO pins and a timer or two, as for example the 28L92 does.)

UART stands for Universal Asynchronous Receiver & Transmitter. Asynchronous here means that no explicit clock signal is sent along with the data. That is why you have to set the speed of a serial port at both ends, rather than only at the origin, and why the protocol includes start and stop bits to synchronise the receiver to each byte.

The VIA's shift register does not transmit or expect start and stop bits. Instead, it uses a second pin as a clock signal. This makes it a synchronous serial device. It can be interfaced fairly directly to an SPI slave for this reason, though only for unidirectional data transmission.

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.