home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / qb_pds / dos / bdisk / asmsrc / secwrt.asm < prev    next >
Encoding:
Assembly Source File  |  1987-12-04  |  2.3 KB  |  101 lines

  1.         DOSSEG
  2.         .MODEL medium
  3.  
  4.         PUBLIC _SecWrt
  5.  
  6. ;========================================================
  7. ; Write diskette sectors.  The usage is:
  8. ;
  9. ;   push <drive>        ;drive number
  10. ;   push <head>         ;head (side) number
  11. ;   push <track>        ;track number
  12. ;   push <sector>       ;sector number
  13. ;   push <count>        ;number of sectors to write
  14. ;   push <segment>      ;segment of buffer
  15. ;   push <offset>       ;offset of buffer
  16. ;   call _SecWrt        ;write
  17. ;
  18. ; The values are not checked. AX = 0 if no errors,
  19. ; otherwise the disk status is returned in AL and
  20. ; AH = 0.
  21. ;
  22. ; The stack is cleared on exit and all registers are
  23. ; preserved except AX.
  24.  
  25. SecWrtStk       STRUC
  26. registers       dw 7 DUP (?)
  27. retaddr         dw 2 DUP (?)
  28. buf_off         dw ?
  29. buf_seg         dw ?
  30. count           dw ?
  31. sector          dw ?
  32. track           dw ?
  33. head            dw ?
  34. drive           dw ?
  35. SecWrtStk       ENDS
  36.  
  37.         ASSUME ds:NOTHING, es:NOTHING, ss:NOTHING
  38.  
  39.         .CODE
  40.  
  41. _SecWrt PROC
  42.         push bx
  43.         push cx
  44.         push dx
  45.         push di
  46.         push si
  47.         push bp
  48.         push es
  49.         mov bp, sp
  50.  
  51. ;--- write the sectors
  52.  
  53.         mov al, byte ptr [bp].count     ;sector count
  54.         mov ch, byte ptr [bp].track     ;track number
  55.         mov cl, byte ptr [bp].sector    ;sector number
  56.         mov dh, byte ptr [bp].head      ;head number
  57.         mov dl, byte ptr [bp].drive     ;drive number
  58.         mov bx, [bp].buf_off            ;buffer offset
  59.         mov es, [bp].buf_seg            ;buffer segment
  60.  
  61.         push es
  62.         mov ah, 3       ;write function
  63.         int 13h         ;execute
  64.         pop es
  65.         jnc Scwr1
  66.  
  67. ;--- error, reset disk and try again
  68.  
  69.         push es
  70.         mov ah, 0       ;reset function
  71.         int 13h         ;execute
  72.         pop es
  73.  
  74.         push es
  75.         mov ah, 4       ;write function
  76.         int 13h         ;execute
  77.         pop es
  78.         jnc Scwr1       ;jump if okay
  79.  
  80. ;--- error writing sectors
  81.  
  82.         mov al, ah
  83.         sub ah, ah
  84.         jmp Scwr2
  85.  
  86. ;--- sector is written
  87.  
  88. Scwr1:  sub ax, ax
  89.  
  90. Scwr2:  pop es
  91.         pop bp
  92.         pop si
  93.         pop di
  94.         pop dx
  95.         pop cx
  96.         pop bx
  97.         ret 14
  98. _SecWrt ENDP
  99.  
  100.         END
  101.