home *** CD-ROM | disk | FTP | other *** search
/ Shareware Supreme Volume 6 #1 / swsii.zip / swsii / 165 / WDFMT21.ZIP / AT_IO.ASM next >
Assembly Source File  |  1988-12-06  |  2KB  |  88 lines

  1. ; this file has some fast asmbly routines in it
  2. ; the routines use the C calling method for a small model
  3. ;
  4. ;
  5.  
  6. .286c                        ; 80286 AT code
  7. DOSSEG                        ; use dos segments
  8. .MODEL LARGE
  9. .CODE
  10.  
  11. ; _WR_BLOCK     WILL WRITE ONE 512 BLOCK OF DATA EVERY TIME A DRQ IS THERE
  12. ;    INPUT :     [BP+4]   POINTER TO START OF BUFFER
  13. ;    OUTPUT:      NONE
  14.  
  15.  
  16.  
  17.         PUBLIC   _WR_BLOCK
  18. _WR_BLOCK   PROC     FAR
  19.         ENTER    2,0
  20.         PUSHA
  21.         PUSH     DS
  22.  
  23.         MOV      BX,[BP+6]            ; POINTER TO BUFFER offset
  24.         MOV      AX,[BP+8]            ;POINTER SEGMENT
  25.         MOV      DS,AX
  26.         MOV      DX,1F7H            ;COMMAND REG
  27.         MOV      AL,30H
  28.         OUT      DX,AL            ;SEND WRITE COMMAND
  29.  
  30. wrb_10:     NOP                 ;DELAY
  31.         JMP      SHORT $+2
  32.         NOP                 ;DELAY
  33.         JMP      SHORT $+2
  34.         NOP                 ;DELAY
  35.         JMP      SHORT $+2
  36.         NOP                 ;DELAY
  37.         JMP      SHORT $+2
  38.         NOP                 ;DELAY
  39.         JMP      SHORT $+2
  40.         NOP                 ;DELAY
  41.         JMP      SHORT $+2
  42.         NOP                 ;DELAY
  43.  
  44. BUSY_LP:
  45.         IN         AL,DX            ;GET STATUS
  46.         JMP      SHORT $+2
  47.         NOP
  48.         AND      AL,80H            ;MASK ALL BUT BUSY
  49.         JNZ      BUSY_LP
  50.  
  51.         IN         AL,DX            ;CHECK FOR DRQ
  52.         AND      AL,8
  53.         JZ         ALL_DONE            ;SKIP, IF NO DRQ
  54.  
  55.         MOV      DX,01F0H            ;DATA BUFFER PORT
  56.         MOV      CX,256            ;1 SECTOR
  57.         CLD
  58.  
  59.         MOV      SI,BX            ;SERVICE CONTROLLER BUFFER
  60.         REP      OUTSW            ;ELSE, WRITE COMMAND
  61.         MOV      DX,1F7H            ;POINT TO STATUS REG
  62.         JMP      wrb_10
  63.  
  64.  
  65. ALL_DONE:
  66.         IN         AL,DX            ;CHECK FOR ERROR
  67.         AND      AL,05H            ; CHECK FOR ERROR OR ECC
  68.         JNZ      DISK_ERR            ;JMP, IF ERROR
  69.  
  70.         CLC
  71.         POP      DS
  72.         POPA
  73.         LEAVE
  74.         RET
  75.  
  76. DISK_ERR:
  77.         STC
  78.         POP      DS
  79.         POPA
  80.         LEAVE
  81.         RET
  82. _WR_BLOCK   ENDP
  83.  
  84.  
  85.  
  86.         END
  87.  
  88.