home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / mslang / as / frespace.asm < prev    next >
Assembly Source File  |  1984-10-04  |  3KB  |  128 lines

  1. ;  frespace.ASM   10/04/84  gwf
  2. ;
  3. ;
  4. ;
  5. ;    CALL FRESPACE(AH,AL,BH,BL,CH,CL). CL SHOULD BE 0 for default
  6. ;      drive 1 for A, 2 for B, 3 for C, etc. The value of the
  7. ;      other variables does not matter. They will come back
  8. ;      with a meaningful value.
  9. ;
  10. ;           AN EXAMPLE PROGRAM:
  11. ;
  12. ;      10 defint a-z
  13. ;      20 color 7,1:cls
  14. ;      30 test1=1:ah=0:al=0:bh=0:ch=0:cl=1:test2=2
  15. ;      35 INPUT"DRIVE 0=DEFAULT, 1=A, 2=B, 3=C";CL
  16. ;      37 PRINT"JUST BEFORE CALL"
  17. ;      40 CALL FRESPACE(AH,AL,BH,BL,CH,CL)
  18. ;      45 PRINT"JUST AFTER CALL"
  19. ;      50 PRINT" AH=";AH;" AL=";AL;" BH=";BH;" BL=";BL;" CH=";CH;" CL=";CL;
  20. ;      60 UFREE!=256*AH+AL
  21. ;      70 UBYTES!=256*BH+BL
  22. ;      80 USECTOR!=256*CH+CL
  23. ;      90 PRINT"UFREE!=";UFREE!;"  UBYTES!=";UBYTES!;"   USECTOR!=";USECTOR!
  24. ;      100 FRESPACE!=UFREE!*UBYTES!*USECTOR!
  25. ;      110 PRINT"FRESPACE!=";FRESPACE!
  26. ;      120 PRINT"THIS SHOULD BE 1",TEST1
  27. ;      130 PRINT"THIS SHOULD BE 2",TEST2
  28. ;
  29.  
  30. get_spa equ    36h    ;Get disk free space function call
  31. doscall equ    21h    ;DOS interrupt number
  32.  
  33. dgroup    group    datarea
  34. datarea segment para public 'DATA'
  35.  
  36. ah_ret    dw    ?        ;ah to be sent back
  37. al_ret    dw    ?        ;al to be sent back
  38. bh_ret    dw    ?        ;bh to be sent back
  39. bl_ret    dw    ?        ;bl to be sent back
  40. ch_ret    dw    ?        ;ch to be sent back
  41. cl_ret    dw    ?        ;cl to be sent back
  42.  
  43. datarea ENDS
  44. ;
  45. cseg        segment 'CODE'
  46.         assume  cs:cseg
  47.         public frespace
  48. frespace    proc    far
  49.     push    bp        ;BP from BASIC
  50.     mov    bp,sp        ;set base for parm list
  51.     push    ds        ;DS from basic work area
  52.     push    es        ;ES from basic work area
  53.     mov    ax,datarea    ;establish data addressability
  54.     mov    ds,ax        ;now DS is local data
  55.     assume    ds:datarea
  56. ;
  57. ;
  58. ;
  59. ;
  60.     push    bp
  61.     sub    ax,ax
  62.     mov    si,ss:[bp+6]    ;get addr of parameter
  63.     mov    al,es:[si]    ;get value of parm
  64.     mov    dx,ax        ;dl contains the drive number on call
  65.                 ;dh will be zero
  66.     mov  ah,get_spa     ;get space function number
  67.     int  doscall        ;Call DOS
  68.  
  69. ; Move the values into local work area to prepare to send back to basic
  70.     xchg    dx,ax        ;must have a word. Want to zero out DH.
  71.     sub    ax,ax        ; produce the zero
  72.     xchg    dx,ax        ; DX is now zero.
  73.                 ;  DH is what we really want as zero.
  74.  
  75.     mov    dl,ah        ;want to send back a byte
  76.     mov    ah_ret,dx    ;   prepare to return ah
  77.  
  78.     mov    dl,al        ;want to send back a byte
  79.     mov    al_ret,dx    ;   prepare to return al
  80.  
  81.     mov    dl,bh        ;want to send back a byte
  82.     mov    bh_ret,dx    ;   prepare to return bh
  83.  
  84.     mov    dl,bl        ;want to send back a byte
  85.     mov    bl_ret,dx    ;   prepare to return bl
  86.  
  87.     mov    dl,ch        ;want to send back a byte
  88.     mov    ch_ret,dx    ;   prepare to return ch
  89.  
  90.     mov    dl,cl        ;want to send back a byte
  91.     mov    cl_ret,dx    ;   prepare to return cl
  92.  
  93.  
  94. ; Go back
  95.     pop    bp        ;get back Basic's workspace
  96.     mov    ax,cl_ret
  97.     mov    si,ss:[bp+6]
  98.     mov    es:[si],ax    ;return cl
  99.  
  100.     mov    ax,ch_ret
  101.     mov    si,ss:[bp+8]
  102.     mov    es:[si],ax    ;return ch
  103.  
  104.     mov    ax,bl_ret
  105.     mov    si,ss:[bp+10]
  106.     mov    es:[si],ax    ;return bl
  107.  
  108.     mov    ax,bh_ret
  109.     mov    si,ss:[bp+12]
  110.     mov    es:[si],ax    ;return bh
  111.  
  112.     mov    ax,al_ret
  113.     mov    si,ss:[bp+14]
  114.     mov    es:[si],ax    ;return al
  115.  
  116.     mov    ax,ah_ret
  117.     mov    si,ss:[bp+16]
  118.     mov    es:[si],ax    ;return ah
  119. ;
  120.     pop    es
  121.     pop    ds
  122.     pop    bp
  123.     ret    12        ;return to basic 6 parameters were sent
  124. frespace    endp
  125. ;-----------------------------------------------------------------------
  126. cseg    ends
  127.     end            ;end for assembler
  128.