(original is here: https://c64retr.blogspot.com/2013/11/serial-port-communication-on-apple-iic.html)
Apple II was a very good and quite popular 8-bit machine in its time. It features a hardware UART for RS-232 port communication that can still be used today. Even from the BASIC language level, it is quite simple to make the use of that feature. I happen to own Apple IIc, which I did not own in the 80-s. I bought the set of the computer, monitor, printer and software on e-bay out of curiosity. I have to admit I also like the look of the little machine which was advertised as a portable Apple II. It would no pass the standards of portability today, however in the early to mid 1980-s it was enough if the computer had a carrying handle and/or some sort of a case. Apple IIc has an UART/RS-232 built in permanently as it does not feature the expansion bus as its bigger brother Apple II does.
The basics are as follows:
On the PC side setup port to 300 baud (default apple 2c speed), 8 bit, no parity, 1 stop bit, no flow control. Your terminal may or may not offer customization of the parameters listed below. I used the Hyper Terminal Private Edition. Other emulators may offer the customization of the listed below properties in the different form. Follow you terminal emulator's documentation: Terminal setup: ANSI ASCII setup: append line feed to incoming line ends, force incoming data to 7-bit ASCII.
Apple IIc side - issue command PR#2.
Now all the output goes via serial wire to a PC.
Alternative baud setup:
Apple 2c:
After PR#2 command, press CTRL-A and then the baud code:
CODE BAUD
1B 50
2B 75
3B 110
4B 135
5B 150
6B 300
7B 600
8B 1200
9B 1800
10B 2400
11B 3600
12B 4800
13B 7200
14B 9600
15B 19200
16B 115k
To setup the serial port speed from basic, use print chr$(1) followed by the speed code, e.g:
10 pr# 2
15 print chr$(1);"15b"
20 print "hello world!"
30 goto 20
Above program will redirect output to serial port and setup transmission speed to 19200 baud.
PC side - follow manual of your terminal emulator software to match the baud rate of the Apple 2c.
The automatic line trace in BASIC is automatically on (seems to be a feature) when the output is redirected to a serial line. Perhaps because such mode of working was intended for development/debugging purpose. Anyway, it is good to include NOTRACE just after PR#2 in your program to turn this feature off. There are several other (than baud rate) parameters that can be setup for serial port after IN#2 or PR#2. Just use PRINT CHR$(1);"{command_code}" to set them up. Here are the command codes:
Data format
Code Data Length Stop bits
0D 8 1
1D 7 1
2D 6 1
3D 5 1
4D 8 2
5D 7 2
6D 6 2
7D 5 2
ASCII setup: Code Effect I echo output to the screen K do not send line feed after carriage return L send line feed after carriage return
Parity:
Code Parity Check Mode
0P none
1P odd
2P none
3P even
4P none
5P MARK(1)
6P none
7P SPACE(0)
Example BASIC program setting up 9600 baud, 8-N-1, send LF after CR:
20 PR#2
30 NOTRACE
40 PRINT CHR$(1);"14b"
50 PRINT CHR$(1);"0d"
60 PRINT CHR$(1);"0p"
70 PRINT CHR$(1);"l":rem it is small "L".
For some reason, I have to setup 7 bit data length, 1 stop bit on the PC side, even though Apple works in 8-1 mode. I will have to look into this later, for now I don't understand why the discrepancy.
On Linux (R-Pi) I used 'putty' or just plain "cat /dev/ttyUSB0" to receive data from apple.
To redirect input and output to serial port, so you can work on apple from remote terminal, type on apple:
IN#2
{CTRL-A)14b
PR#2
From this moment, whatever you type in the terminal emulator on the PC workstation is really happening on Apple. The PC workstation acts a a dumb terminal for the Apple computer. Pretty cool. You can actually create a boot diskette for the Apple to load up and execute all necessary serial port initialization commands at the boot time and with a PC/laptop connected to the Apple via serial port (or USB with USB to serial converter) you do not need a display monitor with the Apple computer. This way of working with Apple II of course may have some limitations, which I am sure user would discover very quickly. However it is possible to work with BASIC and text based programs in this manner.
Happy retro-computing!
Thank you for reading.