home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / asm_kit / terminal.asm < prev    next >
Assembly Source File  |  1985-06-21  |  6KB  |  138 lines

  1. ;------------ EXAMPLE OF A SIMPLE 1200 BAUD TERMINAL PROGRAM -----------
  2. ;
  3. ;
  4. stack         segment para stack 'stack'
  5.               db        256       dup(0)     ; 256 bytes of stack
  6. stack         ends
  7. ;
  8. code          segment para public 'code'
  9. start         proc      far
  10. ;
  11. ;------------------- STANDARD PROGRAM PROLOGUE ------------------------
  12. ;
  13.               assume    cs:code
  14.               push      ds        ; SAVE PSP SEGMENT ADDRESS
  15.               mov       ax,0
  16.               push      ax        ; SAVE RETURN ADDRESS OFFSET (PSP+0)
  17. ;
  18. ;-----------------------------------------------------------------------
  19. ;
  20. ;------------ PART 1: INITIALIZE THE 8250 UART FOR: -------------------
  21. ;------------               7 DATA BITS             -------------------
  22. ;------------               1 STOP BIT              -------------------
  23. ;------------               ODD PARITY              -------------------
  24. ;------------               1200 BAUD               -------------------
  25. ;----------------- SET UP FOR LOOPBACK FEATURE ------------------------
  26. ;
  27.               mov       dx,3fbh   ;ADDRESS OF LINE CONTROL REGISTER
  28.               mov       al,80h
  29.               out       dx,al     ;TO ADDRESS BAUD RATE DIVISOR REGISTER
  30.               mov       dx,3f8h   ;ADDRESS OF BAUD RATE DIVISOR LSB
  31.               mov       al,60h    ;LSB VALUE FOR 1200 BAUD
  32.               out       dx,al
  33.               mov       dx,3f9h   ;ADDRESS OF BAUD RATE DIVISOR MSB
  34.               mov       al,0      ;MSB VALUE FOR 1200 BAUD
  35.               out       dx,al
  36. ;-------------- THE BAUD RATE HAS NOW BEEN INITIALIZED ----------------
  37. ;
  38. ;-------------- NOW INITIALIZE THE LINE CONTROL REGISTER --------------
  39. ;
  40.               mov       dx,3fbh   ;ADDRESS OF LINE CONTROL REGISTER
  41.               mov       al,0ah    ;ODD PARITY 1 STOP BIT 7 DATA BITS
  42.               out       dx,al
  43. ;
  44. ;---------- NOW INITIALIZE THE MODEM CONTROL REGISTER FOR: ------------
  45. ;--------- REQUEST TO SEND AND DATA TERMINAL READY SIGNALS ------------
  46. ;---------------- AND SET THE LOOPBACK FEATURE ------------------------
  47. ;
  48.               mov       dx,3fch   ;ADDRESS OF MODEM CONTROL REGISTER
  49.               mov       al,03h    ;SET LOOPBACK AND MODEM CTRL SIGNALS
  50.               out       dx,al
  51. ;
  52. ;------------- NOW DISABLE ALL FOUR CLASSES OF INTERRUPTS --------------
  53. ;
  54.               mov       dx,3f9h   ;ADDRESS OF INTERRUPT ENABLE REGISTER
  55.               mov       al,0
  56.               out       dx,al
  57. ;
  58. ;----------- THE INITIALIZATION OF THE 8250 IS NOW COMPLETE ------------
  59. ;
  60. ;
  61. ;----------- PART2:   DISPLAY WHAT IS RECEIVED FROM THE 8250 -----------
  62. ;------------ AND TRANSMIT WHAT IS INPUT FROM THE KEYBOARD -------------
  63. ;
  64. forever:      mov       dx,3fdh   ;ADDRESS OF LINE STATUS REGISTER
  65.               in        al,dx     ;LINE STATUS REGISTER IN AL
  66.               test      al,1eh    ;TEST FOR A RECEPTION ERROR
  67.               jnz       error     ;RECEIVE ERROR HANDLING
  68.               test      al,01h    ;TEST FOR RECEIVED DATA READY
  69.               jnz       receive   ;RECEIVED CHARACTOR HANDLING
  70.               test      al,20h    ;TEST FOR TRANSMITTER HOLDING
  71. ;                                       REGISTER EMPTY
  72.               jz        forever   ;IF THE 8250 IS NOT READY FOR ANOTHER
  73. ;                                  CHARACTER TO TRANSMIT THE LOOP
  74. ;
  75. ;IF FALL THROUGH TO HERE THEN THE 8250 IS READY FOR ANOTHER CHARACTER
  76. ;TO TRANSMIT.
  77. ;
  78. ;IF THE KEYBOARD BUFFER HAS ANOTHER CHARACTER THEN GET IT AND OUTPUT
  79. ;IT TO THE 8250.
  80. ;
  81.               mov       ah,1      ;CHECK KEYBOARD BUFFER CODE
  82.               int       16h       ;BIOS CALL
  83.               jz        forever   ;IF NO KEYBOARD CHARACTER THEN NOTHING
  84. ;                                  TO TRANSMIT.
  85. ;
  86. ;IF FALL THROUGH TO HERE THEN THERE IS A KEYBOARD CHARACTER TO TRANSMIT
  87. ;
  88.               mov       ah,0      ;GET KEYBOARD INPUT CODE
  89.               int       16h       ;BIOS CALL
  90. ;
  91. ;AL HAS THE KEYBOARD CHARACTOR FOR TRANSMISSION
  92. ;
  93.               mov       dx,3f8h   ;ADDRESS OF TRANSMITTER HOLDING REG
  94.               out       dx,al     ;TRANSMIT THE CHARACTER
  95.               jmp       forever
  96. ;
  97. ;
  98. ;THIS POINT IS REACHED IF A CHARACTER WAS RECEIVED BY THE 8250 WITH NO
  99. ;ERRORS.
  100. ;
  101. receive:      mov       dx,3f8h   ;ADDRESS OF THE RECEIVER DATA REGISTER
  102.               in        al,dx     ;AL HAS THE RECEIVED CHARACTER
  103.               and       al,7fh    ;BECAUSE THERE ARE ONLY 7 BITS OF DATA
  104. ;                                  THE HIGH ORDER BIT IS NOT VALID
  105.               push      ax        ;SAVE THE RECEIVED CHARACTER
  106. ;
  107. ;PREPARE TO DISPLAY THE CHARACTER
  108. ;
  109.               mov       bx,0
  110.               mov       ah,14     ;DISPLAY FUNCTION CODE
  111.               int       10h       ;BIOS CALL
  112.               pop       ax        ;RESTORE THE CHARACTER
  113.               cmp       al,0dh    ;WAS IT A CARRIAGE RETURN ?
  114.               jnz       forever   ;NO, SO START OVER AGAIN
  115. ;
  116. ;IF IT WAS A CARRIAGE RETURN THE A LINEFEED MUST ALSO BE DISPLAYED
  117. ;
  118.               mov       al,0ah    ;LINEFEED
  119.               mov       bx,0
  120.               mov       ah,14
  121.               int       10h       ;BIOS CALL
  122.               jmp       forever
  123. ;
  124. ;IF THIS POINT IS REACHED THEN THERE WAS AN ERROR IN THE RECEIVED
  125. ;CHARACTER. CLEAR THE RECEIVER DATA REGISTER AND DISPLAY A ?.
  126. ;
  127. error:        mov       dx,3f8h   ;ADDRESS OF THE RECEIVER DATA REGISTER
  128.               in        al,dx     ;AL HAS THE INCORRECT CHARACTER
  129.               mov       al,'?'    ;DISPLAY A ? INSTEAD
  130.               mov       bx,0
  131.               mov       ah,14
  132.               int       10h       ;BIOS CALL
  133.               jmp       forever
  134. ;
  135. start         endp
  136. code          ends
  137.               end       start
  138.