;----------------------------------------------------------
;
;BSTAM Driver for the Morrow Decision I or MULTI/IO board
;      ( This routine will work with BSTAM through V4.6)
;      written by: Robert E. A. Adams, WA9ZMO   25-Dec-82
;
;       NOTE: To locate the GROUP address use DDT to see
;       the second and third bytes of CONIN. In my system
;       it was '3A E3' or '0E33AH'.
;
;----------------------------------------------------------
;
FALSE   EQU     0
TRUE    EQU     NOT FALSE
INITIAL EQU     TRUE    ;TRUE FOR PORT/BAUD INITIALIZATION
                       ;FALSE IF NO INITILIALIZATION REQ'D
;----------------------------------------------------------
;
BEGIN   ORG     103H
INITIL  JMP     INITIU  ;UART INITIALIZATION ENTRY POINT
INSPORT JMP     INSPRU  ;STATUS PORT READ    ENTRY POINT
ERRSET  JMP     ERRSTU  ;UART ERROR RESET    ENTRY POINT
INPORT  JMP     INPRTU  ;READ DATA PORT      ENTRY POINT
OUTPORT JMP     OUTPRU  ;WRITE DATA PORT     ENTRY POINT
DUART   JMP     DUARTU  ;DUMMY ROUTINE
DUARTU  EQU     $
       RET             ;DO A RETURN HERE UNLESS YOU WISH
                       ;TO ADD AN ADDITIONAL ROUTINE
;
;----------------------------------------------------------
GROUP   EQU     0E33AH  ;YOU WILL HAVE TO CHECK YOUR BIOS
                       ;FOR YOUR VALUE
DEVICE  EQU     2       ;SERIAL PORT P2 SPECIFIED HERE
PORT    EQU     48H     ;ADDRESS OF DECISION & MULTI/IO
;
;----------------------------------------------------------
;
PREPARE EQU     $
       PUSH    H       ;THIS ROUTINE INFORMS THE PIC
       PUSH    PSW     ;AS TO WHICH 8250 PORT YOU ARE
       LDA     GROUP   ;ABOUT TO I/O... IT MUST BE
       ORI     DEVICE  ;CALLED EACH TIME YOU DO AN 'IN'
       OUT     PORT+7  ;OR AN 'OUT'
       POP     PSW     ;
       POP     H       ;
       RET     ;RETURN TO THE ROUTINE
;
;----------------------------------------------------------
;PORT INITIALIZATION ROUTINE
;
INITIU  EQU     $
       CALL    SIGNON

       IF      INITIAL
;
;BAUD RATE DIVISORS FOR 8250'S
;
B110    EQU     1047
B300    EQU     384
B600    EQU     192
B1200   EQU     96
B2400   EQU     48
B4800   EQU     24
B9600   EQU     12
;
       PUSH H ! PUSH D ! PUSH B
       LXI     H,B300 ;GET BAUD RATE
       LDA     GROUP
       ORI     DEVICE
       OUT     PORT+7
       MVI     A,83H
       OUT     PORT+3
       MOV     A,L
       OUT     PORT+0
       MOV     A,H
       OUT     PORT+1
       MVI     A,3
       OUT     PORT+3
       OUT     PORT+4
       POP B  ! POP D  ! POP  H
       ENDIF   ;INITIAL
;
       RET     ;RETURN TO BSTAM
;
;----------------------------------------------------------
;       STATUS INPUT ROUTINE
;
INSPRU  EQU     $
       CALL    PREPARE ;INFORM THE PIC
       IN      PORT+5
       ANI     21H
       PUSH    B
       RLC
       MOV     B,A
       RLC
       RLC
       ORA     B
       POP     B
       ANI     3
       ORI     4
       RET     ;RETURN TO BSTAM
;
;----------------------------------------------------------
;ERROR RESET ROUTINE
;
ERRSTU  EQU     $
       CALL    PREPARE ;INFORM THE PIC
       RET     ;RETURN TO BSTAM
;
;----------------------------------------------------------
;INPUT ROUTINE
;
INPRTU  EQU     $
       CALL    PREPARE ;INFORM THE PIC
       IN      PORT+0  ;GET DATA FROM PORT
       RET     ;RETURN TO BSTAM
;
;----------------------------------------------------------
;OUTPUT ROUTINE
;
OUTPRU  EQU     $
       CALL    PREPARE ;INFORM THE PIC
       OUT     PORT+0  ;SEND DATA TO REMOTE CPU
       RET     ;RETURN TO BSTAM
;
;----------------------------------------------------------
MESSGE: DB      13,10,10
       DB      'Version for Morrow Decision or Multi/IO'
       DB      13,10
       DB      'Serial Port P2  25-Dec-82 by Robb Adams'
       DB      13,10,7,'$'
;
SIGNON: PUSH B ! PUSH D ! PUSH H
       LXI     D,MESSGE
       MVI     C,9
       CALL    0005    ;ANOUNCE VERSION TO USER
       POP  H ! POP  D ! POP  B
       RET     ;RETURN TO BSTAM
;
;----------------------------------------------------------
       END     BEGIN