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

  1.         DOSSEG
  2.         .MODEL medium
  3.  
  4.         PUBLIC _TrkFrm
  5.  
  6. ;========================================================
  7. ; Format a disk track.  The usage is:
  8. ;
  9. ;   push <drive>        ;drive number
  10. ;   push <head>         ;head (side) number
  11. ;   push <track>        ;track number
  12. ;   push <sectors>      ;number of sectors per track
  13. ;   push <bytes>        ;number of bytes per sector
  14. ;   call _TrkFrm        ;format
  15. ;
  16. ; The values are not checked, except the number of
  17. ; sectors, which must be 0 > sectors >= MAXSEC. AX = 0
  18. ; if no errors, otherwise AH = 00 and AL = disk status
  19. ; if BIOS error, or AX = 0100 if invalid number of
  20. ; sectors.
  21. ;
  22. ; The stack is cleared on exit and all registers are
  23. ; preserved except AX.
  24.  
  25. MAXSEC  EQU     64
  26.  
  27.         .DATA?
  28.  
  29. TrkAdr  Db (MAXSEC * 4) DUP (?)
  30.  
  31. TrkFrmStk       STRUC
  32. registers       dw 7 DUP (?)
  33. retaddr         dw 2 DUP (?)
  34. bytes           dw ?
  35. sectors         dw ?
  36. track           dw ?
  37. head            dw ?
  38. drive           dw ?
  39. TrkFrmStk       ENDS
  40.  
  41.         ASSUME ds:NOTHING, es:@DATA, ss:NOTHING
  42.  
  43.         .CODE
  44.  
  45.         EXTRN _SctrSz:far
  46.  
  47. _TrkFrm PROC
  48.         push bx
  49.         push cx
  50.         push dx
  51.         push di
  52.         push si
  53.         push bp
  54.         push es
  55.         mov bp, sp
  56.  
  57.         mov cx, [bp].sectors    ;get sector count
  58.         or cx, cx               ;check if none
  59.         jz Trfr2
  60.         cmp cx, MAXSEC          ;check if too many
  61.         ja Trfr2
  62.  
  63. ;--- set the sector size byte
  64.  
  65.         mov ax, [bp].bytes              ;bytes per sector
  66.         call _SctrSz                    ;get sector size
  67.         mov byte ptr [bp].bytes, al     ;save
  68.  
  69. ;--- set up track address fields
  70.  
  71.         mov ax, @DATA
  72.         mov es, ax              ;set segment
  73.         lea di, TrkAdr          ;track addresses
  74.         push di
  75.         sub ah, ah                      ;initial sector count
  76.         mov dh, byte ptr [bp].head      ;get head number
  77.         mov dl, byte ptr [bp].track     ;get track number
  78.  
  79. Trfr1:  mov al, dl              ;track number
  80.         stosb
  81.         mov al, dh              ;head number
  82.         stosb
  83.         inc ah                  ;increment sector
  84.         mov al, ah              ;sector number
  85.         stosb
  86.         mov al, byte ptr [bp].bytes     ;bytes per sector
  87.         stosb
  88.         loop Trfr1
  89.  
  90. ;--- format track
  91.  
  92.         pop bx                          ;restore address list
  93.         mov ch, dl                      ;track number
  94.         mov dl, byte ptr [bp].drive     ;drive number
  95.  
  96.         push bp
  97.         push es
  98.         mov ah, 5       ;format function
  99.         int 13h         ;execute
  100.         pop es
  101.         pop bp
  102.         jnc Trfr3       ;jump if okay
  103.  
  104. ;--- error, reset disk and try again
  105.  
  106.         push bp
  107.         push es
  108.         mov ah, 0       ;reset function
  109.         int 13h         ;execute
  110.         pop es
  111.         pop bp
  112.  
  113.         push bp
  114.         push es
  115.         mov ah, 5       ;format function
  116.         int 13h         ;execute
  117.         pop es
  118.         pop bp
  119.         jnc Trfr3       ;jump if okay
  120.  
  121. ;--- error formatting track
  122.  
  123.         mov al, ah
  124.         sub ah, ah
  125.         jmp Trfr4
  126.  
  127. ;--- illegal parameters or something
  128.  
  129. Trfr2:  mov ax, 100h    ;set first bit
  130.         jmp Trfr4
  131.  
  132. ;--- track is formatted okay
  133.  
  134. Trfr3:  sub ax, ax
  135.  
  136. Trfr4:  pop es
  137.         pop bp
  138.         pop si
  139.         pop di
  140.         pop dx
  141.         pop cx
  142.         pop bx
  143.         ret 10
  144. _TrkFrm ENDP
  145.  
  146.         END
  147.