home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cdisk.zip / DMA / OUT16.ASM < prev    next >
Assembly Source File  |  1992-07-06  |  1KB  |  59 lines

  1. ; out16reg(port,word);
  2. ;
  3. ; write a 16-bit value to a DMA register by issuing two
  4. ; consecutive writes to an 8-bit register
  5. ;
  6.       .286
  7.  
  8. include mmap.inc
  9.  
  10. _TEXT    SEGMENT BYTE PUBLIC 'CODE'
  11. _TEXT    ENDS
  12.  
  13.     assume CS: _TEXT
  14.  
  15. _TEXT    SEGMENT
  16.  
  17. _out16reg proc near
  18.  
  19. public     _out16reg
  20.  
  21.     cli
  22.     push   bp
  23.     mov    bp,sp        ;set up base pointer
  24.     pusha              ;save regs
  25.     pushf                 ;and flags
  26.     push   es
  27.     push   ds
  28.  
  29. ;make sure that first write goes to low byte of register
  30.  
  31.     mov    dx,DMA_BYTE_POINTER_FLIPFLOP
  32.     mov    al,0                 ;reset byte pointer
  33.     out    dx,al
  34.     jmp    $+2     ;register delay
  35.     jmp    $+2
  36.     mov    dx,word ptr [bp+4]     ;output port address
  37.     mov    al,byte ptr [bp+6]     ;byte to be output
  38.     out    dx,al        ;output low byte
  39.     jmp    $+2
  40.     jmp    $+2
  41.     mov    al,byte ptr [bp+7];byte to be output
  42.     out    dx,al           ;output high byte
  43.     jmp    $+2
  44.     jmp    $+2
  45.     pop    ds               ;restore registers
  46.     pop    es 
  47.     popf
  48.     popa
  49.     pop    bp
  50.     sti
  51.     ret
  52.  
  53. _out16reg endp
  54.  
  55. _text    ends
  56.     end
  57.  
  58.  
  59.