home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol074 / u8250.asm < prev    next >
Assembly Source File  |  1984-04-29  |  3KB  |  156 lines

  1. *********************************************************
  2. *                            *
  3. *    BSTAM INTERFACE FOR 8250 ON CCS Z80 CPU        *
  4. *                            *
  5. *********************************************************
  6. ;
  7. ;    March 22, 1981
  8. ;
  9. ;    By    Bill Bolton
  10. ;        Software Tools
  11. ;        P.O. Box 80,
  12. ;        Newport Beach,
  13. ;        NSW, 2106
  14. ;        Australia
  15. ;
  16. ;
  17. BASE    EQU     20H
  18. STAT    EQU     BASE+5        ;STATUS PORT
  19. DATA    EQU     BASE        ;DATA PORT
  20. CR    EQU    0DH
  21. LF    EQU    0AH
  22. B300    EQU     384        ;BAUD RATE DIVISORS FOR 8250'S
  23. B600    EQU     192
  24. B1200   EQU     96
  25. B2400   EQU     48
  26. B4800   EQU     24
  27. B9600   EQU     12
  28. BAUD    EQU    B300        ;SELECTED BAUD RATE
  29. ;
  30.     ORG    0103H
  31. ;
  32. BEGIN:
  33. INITIL:
  34.     JMP     INITIU          ;UART/USART INITIALATION ENTRY POINT
  35. INSPORT:
  36.     JMP     INSPRU          ;STATUS PORT READ ENTRY POINT
  37. ERRSET:    
  38.     JMP     ERRSTU          ;UART/USART ERROR RESET ENTRY POINT
  39. INPORT:
  40.     JMP     INPRTU          ;READ DATA PORT ENTRY POINT
  41. OUTPORT:
  42.     JMP     OUPRTU         ;WRITE DATA PORT ENTRY POINT
  43. ;
  44. ;
  45. INITIU:
  46.     CALL    SIGNON
  47. ;
  48. ;
  49. ;ROUTINE TO INITIALIZE AN 8250
  50. ;REG HL HAS BAUD RATE WORD
  51. ;
  52.         PUSH H
  53.     PUSH D
  54.     PUSH B
  55.         LXI     H,BAUD        ;GET BAUD RATE
  56. IN8250:
  57.     MVI    A,0FH        ;SET DSR,CTS,CD
  58.     OUT    BASE+4
  59.     MVI    A,83H        ;ENABLE DIVISOR ACCESS
  60.     OUT    BASE+3
  61.     MOV    A,L        ;GET BAUD RATE DIVISOR, LOW
  62.     OUT    BASE
  63.     MOV    A,H        ;GET BAUD RATE DIVISOR, HIGH
  64.     OUT    BASE+1
  65.     MVI    A,3        ;DIABLE DIVISOR ACCESS AND SET
  66.     OUT    BASE+3        ; 8 BITS, 1 STOP, NO PARITY
  67.     XRA    A
  68.     OUT    BASE+1        ;DIABLE INTERUPTS
  69.     OUT    BASE+5        ;RESET ERROR FLAGS
  70. ;
  71. ;THE FOLLOWING CODE USES THE BAUD RATE DIVISOR TO
  72. ;DO A TWO CHARACTER TIMES DELAY BEFORE RETURNING
  73. ;
  74.         LXI    H,BAUD        ;PUT BAUD RATE DIVISOR IN HL
  75.         DAD     H        ;MULT BY 16 TO GET DELAY
  76.         DAD     H
  77.         DAD     H
  78.         DAD     H
  79. LOOP1:
  80.     DCX     H
  81.         MOV     A,L
  82.         ORA     H
  83.         JNZ     LOOP1
  84.         POP B
  85.     POP D
  86.     POP H
  87.         RET
  88. ;
  89. ;       STATUS INPUT ROUTINE
  90. ;
  91. INSPRU:
  92.     PUSH    B
  93.         IN      STAT        ;RDA=BIT 0, TBE=BIT 5
  94.     PUSH    PSW
  95.         ANI     21H
  96.         RLC              ;SHIFT RDA TO BIT 1
  97.         MOV     B,A         ;SAVE FOR LATER
  98.         RLC
  99.         RLC            ;TBE TO BIT 0
  100.         ORA     B        ;OR IN RDA
  101.     MOV    B,A        ;SAVE FOR LATER 
  102.         POP     PSW           ;GET STATUS
  103.     PUSH    PSW
  104.     ANI    2        ;MASK OUT OVERRUN ERROR
  105.     RLC            ;INTO BIT 2
  106.     RLC            ;BIT 3
  107.     RLC            ;BIT 4
  108.     ORA    B        ;MERGE WITH PREVIOUS 
  109.     MOV    B,A        ;SAVE FOR LATER
  110.     POP    PSW        ;GET STATUS
  111.     PUSH    PSW
  112.     ANI    8        ;MASK OUT FRAMING ERROR
  113.     RLC            ;INTO BIT 4
  114.     RLC            ;BIT 5
  115.     ORA    B        ;MERGE WITH PREVIOUS
  116.     MOV    B,A        ;SAVE FOR LATER
  117.     POP    PSW        ;GET STATUS
  118.     ANI    40H        ;MASK OUT TX EMPTY
  119.     RRC            ;INTO BIT 5
  120.     RRC            ;BIT 4
  121.     RRC            ;BIT 3
  122.     RRC            ;BIT 2
  123.     ORA    B        ;MERGE WITH PREVIOUS
  124.         ANI     37H           ;MASK WANTED BITS, DONT NEED BITS 3,6,7
  125.     POP    B
  126.         RET
  127. ERRSTU:
  128.         RET            ;ONLY
  129. ;
  130. INPRTU:
  131.         IN    DATA        ;GET DATA FROM PORT
  132.         RET                 ;RETURN TO BSTAM
  133. ;
  134. OUPRTU:
  135.         OUT    DATA        ;SEND DATA TO REMOTE CPU
  136.         RET            ;RETURN TO BSTAM
  137. ;
  138. ;
  139. MESSG:
  140.     DB    CR,LF,LF
  141.     DB    'Version For CCS CPU Card - March, 1981',CR,LF
  142.     DB    '8250 Type UART at Ports 20H to 25H, no parity.',CR,LF,'$'
  143. ;
  144. SIGNON:    PUSH    B
  145.     PUSH    D
  146.     PUSH    H
  147.     LXI    D,MESSG
  148.     MVI    C,9
  149.     CALL    0005        ;ANNOUNCE VERSION TO USER
  150.     POP    H
  151.     POP    D
  152.     POP    B
  153.     RET
  154. ;
  155.     END    BEGIN
  156.