Advertisement
DanikKUL

transfer a byte to com port (registers)

Feb 19th, 2023
2,284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small
  2. .stack 100h
  3.  
  4. .data
  5.  
  6. errwrite db "Error: can't send byte",0Dh,0Ah,'$'
  7. errread db "Error: can't read byte",0Dh,0Ah,'$'
  8. output db "Result: $"
  9. byte1 db 'V'
  10. byte2 db ?
  11.            
  12. .code
  13.            
  14. initialize proc
  15.     ; COM1
  16.     mov al,80h
  17.     mov dx,3FBh
  18.     out dx,al
  19.    
  20.     mov dx, 3F8h
  21.     mov al, 00h
  22.     out dx, al
  23.     mov al, 0Dh
  24.     mov dx, 3F9h
  25.     out dx, al
  26.  
  27.     mov dx, 3FCh
  28.     mov al, 00001011b
  29.     out dx, al
  30.  
  31.     mov al, 0000011b
  32.     mov dx, 3FBh
  33.     out dx, al
  34.  
  35.     mov dx, 3F9h
  36.     mov al, 00001011b
  37.     out dx, al
  38.  
  39.     ; COM2
  40.  
  41.     mov al, 80h
  42.     mov dx, 2FBh
  43.     out dx,al
  44.    
  45.     mov dx, 2F8h
  46.     mov al, 00h
  47.     out dx, al
  48.     mov al, 0Dh
  49.     mov dx, 2F9h
  50.     out dx, al
  51.  
  52.     mov dx, 2FCh
  53.     mov al, 00001011b
  54.     out dx, al
  55.  
  56.     mov al, 0000011b
  57.     mov dx, 2FBh
  58.     out dx, al
  59.  
  60.     mov dx, 2F9h
  61.     mov al, 00001011b
  62.     out dx, al
  63.  
  64.     ret
  65. initialize endp
  66.  
  67. checkCOM1 proc
  68.     xor al,al
  69.     mov dx,3FDh ; LSR status of com-port
  70.     in al,dx
  71.     test al,10h ; test 5th bit if not set error
  72.     jnz writeError
  73.     ret
  74. checkCOM1 endp
  75.  
  76. writeError proc
  77.    mov ah,9
  78.    mov dx,offset errwrite
  79.    int 21h
  80.    ret
  81. writeError endp
  82.  
  83. checkCOM2 proc
  84.     xor al,al
  85.     mov dx,2FDh
  86.     in al,dx
  87.     test al,10b
  88.     jnz readError
  89.     ret
  90. checkCOM2 endp
  91.  
  92. readError proc
  93.    mov ah,9
  94.    mov dx,offset errread
  95.    int 21h
  96.    ret
  97. readError endp
  98.  
  99. sendByte proc
  100.     mov dx,3F8h
  101.     mov al,byte1
  102.     out dx,al
  103.     mov ah, 86h
  104.     mov cx, 10
  105.     mov dx, 0
  106.     int 15h
  107.     ret
  108. sendByte endp
  109.  
  110. readByte proc
  111.     mov dx,2F8h
  112.     in al,dx
  113.     mov byte2,al
  114.     ret
  115. readByte endp
  116.  
  117. exit proc
  118.     mov ax,4C00h
  119.     int 21h
  120.     ret
  121. exit endp
  122.  
  123. start:
  124.     mov ax,@data
  125.     mov ds,ax
  126.     call initialize
  127.     call checkCOM1
  128.     call sendByte
  129.     mov al,2
  130.     call checkCOM2
  131.     call readByte
  132.     mov dx,offset output
  133.     mov ah,9h
  134.     int 21h
  135.     mov ah,02h
  136.     mov dl, byte2
  137.     int 21h
  138.     call exit
  139.    
  140. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement