The follwowing code is written for MaxFORTH and a 68HC11 processor connected to a 6552 dual serial port chip. The 6552 is mapped into the address space of the processor. Similar code is used for a 6551 chip although the registers are a bit different. In fact an 8251 INTEL serial chip wowuld be used in about the same manner. The registers are different, but polled operation would be done by monitoring the transmitter ready and received data flags. The handshaking is done in TDRF? and RDRF? ( read data ready flag?) ( Serial port S1 June 2, 1988 ( modified from code by RANDY DUMSE for 6551 chip by KEN BUTTERFIELD ( software polled half duplex operation ( do not hook int to processor for this example ( designed to talk to 1/2 of a 6552 dual serial port adapter ( second half would use A404, A405, A407 for register addresses ( register addresses are mapped into the memory address space for 68hc11 ( Added keyboard interrupt in S-KEY 7-12-88 HEX A403 CONSTANT S-DATA A400 CONSTANT S-STATUS A401 CONSTANT S-CONTROL 40 CONSTANT S-WF 01 CONSTANT S-RF : S-INIT ( init davidson port ( s1, or s2 ) E0 S-CONTROL C! 0C S-CONTROL C! 7F S-STATUS C! ; ( ODD PARITY, DISABLED, ) ( RTS HI, DTR HI, 7 BITS ) ( 1 STOP BITS, NO ECHO ) ( 9600 BAUD ) ( DISABLE ALL INTERRUPTS AND INIT ) : TDRF? S-STATUS C@ S-WF AND ; : RDRF? S-STATUS C@ S-RF AND ; : S-EMIT BEGIN TDRF? UNTIL S-DATA C! ; : S-KEY BEGIN ?TERMINAL IF ABORT THEN RDRF? UNTIL S-DATA C@ ; : S-?TERMINAL RDRF? ; : S-TYPE DUP IF OVER + SWAP DO I C@ 7F AND S-EMIT LOOP ELSE 2DROP THEN ; : S-. S->D SWAP OVER DABS <# #S SIGN #> S-TYPE ; : S-CR D S-EMIT ; : S-SPACE 20 S-EMIT ; : S-EXPECT ( ADDR,COUNT) ( FORMS COUNTED STRING AT ADDR, TERMINATED WITH SPACE TO BE USED WITH NUMBER ) 2DUP BLANK 1 - 1 DO I OVER C! S-KEY DUP 0D = IF DROP LEAVE ELSE OVER I + C! THEN LOOP DROP ; : BYPASS ( CONNECT MAIN TERMINAL TO EXTERNAL SERIAL PORT ) S-INIT BEGIN ?TERMINAL IF KEY S-EMIT THEN S-?TERMINAL IF S-KEY EMIT THEN AGAIN ; : S-ECHO ( echo the name of word defined by this command to the port ) @ COUNT 7F AND S-TYPE S-SPACE ; : S-DRAIN ( Remove characters from serial stream until CR ) BEGIN ( used to help handshaking with remote system ) S-KEY D = UNTIL ;