LMFL#!C(:HOST "SYS" :BACKUP-DATE 2760031990. :SYSTEM-TYPE :LOGICAL :VERSION 5. :TYPE "LISP" :NAME "SERIAL-HARDWARE" :DIRECTORY ("REL3-SOURCE" "SERIAL") :SOURCE-PATTERN "( :DIRECTORY (\"REL3-SOURCE\") :NAME :WILD :TYPE :WILD :VERSION :NEWEST)" :VERSION-LIMIT 0. :CHARACTERS T :NOT-BACKED-UP T :CREATION-DATE 2758811978. :AUTHOR "REL3" :LENGTH-IN-BYTES 3914. :LENGTH-IN-BLOCKS 4. :BYTE-SIZE 8.)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ;;; -*- mode:common-lisp; base:10; package:si -*-;;;                           RESTRICTED RIGHTS LEGEND;;;Use, duplication, or disclosure by the Government is subject to;;;restrictions as set forth in subdivision (b)(3)(ii) of the Rights in;;;Technical Data and Computer Software clause at 52.227-7013.;;;                     TEXAS INSTRUMENTS INCORPORATED.;;;                              P.O. BOX 2909;;;                           AUSTIN, TEXAS 78769;;;                                 MS 2151;;; Copyright (C) 1984,1987 Texas Instruments Incorporated. All rights reserved.;;; Initializtion and low level routines for the Z8530 serial controller.;;; Register access routines(DEFUN WRITE-A-REG (POINTER DATA)  (declare (special TV:SIB-SLOT-NUMBER))  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-A-POINTER-REGISTER POINTER)  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-A-POINTER-REGISTER DATA)) (DEFUN WRITE-B-REG (POINTER DATA)  (declare (special TV:SIB-SLOT-NUMBER))  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-B-POINTER-REGISTER POINTER)  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-B-POINTER-REGISTER DATA))(DEFUN WRITE-Z-REG (POINTER DATA)  (WRITE-A-REG POINTER DATA)  (IF (NOT (OR (= POINTER 2) (= POINTER 9)));shared register ?    (WRITE-B-REG POINTER DATA))) (DEFUN READ-A-REG (POINTER)  (declare (special TV:SIB-SLOT-NUMBER))  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-A-POINTER-REGISTER POINTER)  (LDB (BYTE 8 0) (%NUBUS-READ TV:SIB-SLOT-NUMBER %SERIAL-A-POINTER-REGISTER))) (DEFUN READ-B-REG (POINTER)  (declare (special TV:SIB-SLOT-NUMBER))  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-B-POINTER-REGISTER POINTER)  (LDB (BYTE 8 0) (%NUBUS-READ TV:SIB-SLOT-NUMBER %SERIAL-B-POINTER-REGISTER))) (DEFUN SERIAL-A-STATUS ()  (declare (special TV:SIB-SLOT-NUMBER))  (LDB (BYTE 8 0) (%NUBUS-READ TV:SIB-SLOT-NUMBER %SERIAL-A-STATUS-REGISTER))) (DEFUN SERIAL-B-STATUS ()  (declare (special TV:SIB-SLOT-NUMBER))  (LDB (BYTE 8 0) (%NUBUS-READ TV:SIB-SLOT-NUMBER %SERIAL-B-STATUS-REGISTER))) (DEFUN SERIAL-RECEIVE ()  (declare (special TV:SIB-SLOT-NUMBER))  (LDB (BYTE 8 0) (%NUBUS-READ TV:SIB-SLOT-NUMBER %SERIAL-RECEIVE-REGISTER))) (DEFUN SERIAL-TRANSMIT (DATA)  (declare (special TV:SIB-SLOT-NUMBER))  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-TRANSMIT-REGISTER DATA)) (DEFUN SERIAL-READ ()  (IF (= 1 (LDB (BYTE 1 0) (SERIAL-A-STATUS)))    (SERIAL-RECEIVE))) (DEFUN SERIAL-WRITE (DATA)  (IF (= 1 (LDB (BYTE 1 2) (SERIAL-A-STATUS)))    (SERIAL-TRANSMIT DATA))) ;;; Initialization routines(DEFUN SERIAL-INIT ()  (WRITE-Z-REG #o11 #o300);hardware reset  (WRITE-Z-REG #o4 #o4);async, 1 stop bit  (WRITE-Z-REG #o1 #o22);tx, rx interrupts enabled  (WRITE-Z-REG #o13 #o120);use baud clock  (WRITE-Z-REG #o14 #o376);4800 baud low byte  (WRITE-Z-REG #o15 0);4800 baud high byte  (WRITE-Z-REG #o16 #o143);Disable PLL, enable baud  (WRITE-Z-REG #o17 0);disable external interrupts  (WRITE-Z-REG #o3 #o301);Rx enable, 8 bits  (WRITE-Z-REG #o5 #o352);DTR, RTS, Tx enable, 8 bits) (DEFUN SERIAL-ERROR-RESET ()  (declare (special TV:SIB-SLOT-NUMBER))  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-A-POINTER-REGISTER #o60)  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-B-POINTER-REGISTER #o60)) (DEFUN SERIAL-INTERRUPT-ACK ()  (declare (special TV:SIB-SLOT-NUMBER))  (%NUBUS-READ TV:SIB-SLOT-NUMBER %SERIAL-INTERRUPT-ACK-REGISTER)) (DEFUN ENABLE-SERIAL-INTERRUPTS ()  (WRITE-Z-REG #o11 #o10))   ;set master interrupt enable(DEFUN DISABLE-SERIAL-INTERRUPTS ()  (WRITE-Z-REG #o11 0))       ;clear master interrupt enable(DEFUN RESET-TX-INTERRUPT ()  (declare (special TV:SIB-SLOT-NUMBER))  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-A-POINTER-REGISTER #o50)  (%NUBUS-WRITE TV:SIB-SLOT-NUMBER %SERIAL-B-POINTER-REGISTER #o50)) (DEFUN RESET-HIGHEST-IUS ()  (WRITE-A-REG 0 #o70))              ;reset highest interrupt under serviceOFFSET %%Q-POINTER BUFFER %SERIAL-BUFFER-IN-POINTER)  (ARRAY-LDB-OFFSET %%Q-POINTER BUFFER %SERIAL-BUFFER-OUT-POINTER))       BUFFER-SIZE)      BUFFER-SIZE)     (OR BUFFER-SIZE-