home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / progrmng / dosfiles.lzh / dosfiles / io.asm < prev    next >
Assembly Source File  |  1990-11-29  |  986b  |  48 lines

  1.     include    lmacros.h
  2.     public    drive_number_,sectors_per_track_,number_of_heads_
  3. drive_number_        db    0
  4. sectors_per_track_    dw    9
  5. number_of_heads_    dw    2
  6.  
  7. ; sector    = logical_sector_ % sectors_per_track_ + 1
  8. ; head        = (logical_sector_ / sectors_per_track_) % number_of_heads_
  9. ; cylinder    = logical_sector / (sectors_per_track * number_of_heads_)
  10.  
  11.     procdef    read_sector,<<logical_sector,word>,<buffer,ptr>>
  12.     mov    ah,2
  13.     jmp    short write1
  14.  
  15.     entrdef    write_sector,<<dummy1,word>,<dummy2,ptr>>
  16.     mov    ah,3
  17. write1:    push    ax
  18.  
  19.     mov    ax,number_of_heads_
  20.     mul    sectors_per_track_
  21.     mov    cx,ax
  22.     mov    ax,logical_sector
  23.     div    cx
  24.     mov    ch,al        ; Load cylinder
  25.  
  26.     xor    dx,dx
  27.     mov    ax,logical_sector
  28.     div    sectors_per_track_
  29.     add    dx,1
  30.     mov    cl,dl        ; Load sector
  31.  
  32.     xor    dx,dx
  33.     div    number_of_heads_
  34.     mov    dh,dl        ; Load head
  35.  
  36.     mov    dl,drive_number_; Load drive number
  37.  
  38.     pop    ax        ; Get read/write function request
  39.     mov    al,1        ; One sector
  40.     ldptr    bx,buffer,es    ; Load buffer offset
  41.  
  42.     int    13h
  43.     mov    al,ah
  44.     xor    ah,ah
  45.     pret
  46.     pend    read_sector
  47.     finish
  48.