home *** CD-ROM | disk | FTP | other *** search
- include lmacros.h
- public drive_number_,sectors_per_track_,number_of_heads_
- drive_number_ db 0
- sectors_per_track_ dw 9
- number_of_heads_ dw 2
-
- ; sector = logical_sector_ % sectors_per_track_ + 1
- ; head = (logical_sector_ / sectors_per_track_) % number_of_heads_
- ; cylinder = logical_sector / (sectors_per_track * number_of_heads_)
-
- procdef read_sector,<<logical_sector,word>,<buffer,ptr>>
- mov ah,2
- jmp short write1
-
- entrdef write_sector,<<dummy1,word>,<dummy2,ptr>>
- mov ah,3
- write1: push ax
-
- mov ax,number_of_heads_
- mul sectors_per_track_
- mov cx,ax
- mov ax,logical_sector
- div cx
- mov ch,al ; Load cylinder
-
- xor dx,dx
- mov ax,logical_sector
- div sectors_per_track_
- add dx,1
- mov cl,dl ; Load sector
-
- xor dx,dx
- div number_of_heads_
- mov dh,dl ; Load head
-
- mov dl,drive_number_; Load drive number
-
- pop ax ; Get read/write function request
- mov al,1 ; One sector
- ldptr bx,buffer,es ; Load buffer offset
-
- int 13h
- mov al,ah
- xor ah,ah
- pret
- pend read_sector
- finish
-