*COMDECK PBWRITE
_$J+  PAGE EJECT? 
_*****************************
*                            *
*         PBWRITE            *
*    WRITE CHAR/FUNCTION     *
*                            *
*****************************?
_$R-,G-,I+                NON-RECURSIVE 
                          NON-INTERRUPTIBLE  ?
_***********************************************************************
*                                                                      *
**OVERVIEW- PBWRITE WRITES DATA OR DIRECTOR FUNCTIONS TO A LOCAL       *
*           PERIPERAL.  THE A-REGISTER CONTAINS THE DATA OR            *
*           DIRECTOR FUNCTION AND THE Q-REGISTER CONTAINS THE          *
*           EQUIPMENT ADDRESS.  PBWRITE ATTEMPTS TO WRITE UNTIL        *
*           A GOOD REPLY IS RECEIVED OR UNTIL A RETRY COUNT IS         *
*           REACHED.  THE REJECT COUNT IS BUMPED AND THE Q AND         *
*           A VALUES ARE SAVED FOR TIMEOUT AND DEBUGGING               *
*           PURPOSES.                                                  *
*                                                                      *
**INPUT-Q AND A VALUES TO WRITE.                                       *
*                                                                      *
**OUTPUT- DATA OR DIRECTOR FUNCTION WRITTEN.                           *
*                                                                      *
*                                                                      *
***********************************************************************?
PROCEDURE PBWRITE(Q :INTEGER; A : CHAR; DEVICE : INTEGER);
CONST EXTREJ = 0; 
      REPLY  = 2; 
_?
VAR RESPONSE : INTEGER; 
     I       : INTEGER; 
BEGIN 
  WITH JACT[DEVICE] DO                      _DEVICE CONTROLLER TABLE   ?
  BEGIN 
    I := 0; 
    REPEAT
      RESPONSE := EXTREJ;                   _SET DEFAULT RESPONSE CODE ?
      INST  ($E400,Q,                       _ LDQ  ADDRESS / COMMAND   ?
             $C400,A,                       _ LDA  DATA                ?
             $0302);                        _ OUT                      ?
      RESPONSE := RESPONSE + 1;             _ RETURN HERE IF REPLY     ?
      RESPONSE := RESPONSE + 1;             _ RETURN HERE IF INT REJECT?
                                            _ RETURN HERE IF EXT REJECT?
      I := I+1; 
    UNTIL (RESPONSE = REPLY) ! (I = JARETRY); 
    JAREJECT := JAREJECT+I-1;               _BUMP REJECT COUNT         ?
    JAQVALUE := Q;                          _SAVE Q VALUE              ?
    JAAVALUE := A;                          _SAVE A VALUE              ?
    JAREADFLG := FALSE;                     _SET WRITE DATA/FUNCTION   ?
  END; _WITH? 
END; _PBWRITE?
