home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / programming / cc65 / patches / _heapmemavail.s < prev    next >
Encoding:
Text File  |  2003-04-28  |  1.5 KB  |  83 lines

  1. ;                     
  2. ; uLLRICH VON bASSEWITZ, 2003-02-01
  3. ;
  4. ; rETURN THE AMOUNT OF FREE MEMORY ON THE HEAP.
  5. ;
  6. ; SIZE_T __FASTCALL__ _HEAPMEMAVAIL (VOID);
  7. ;
  8. ;
  9.  
  10. .IMPORTZP     PTR1, PTR2
  11. .IMPORT      __HPTR, __HFIRST, __HLAST, __HEND
  12.        .EXPORT      __HEAPMEMAVAIL
  13.  
  14.         .INCLUDE        "_HEAP.INC"
  15.  
  16.        .MACPACK      GENERIC
  17.  
  18. ;-----------------------------------------------------------------------------
  19. ; cODE
  20.  
  21. __HEAPMEMAVAIL:
  22.  
  23. ; SIZE_T sIZE = 0;
  24.  
  25.         LDA     #0
  26.         STA     PTR2
  27.         STA     PTR2+1
  28.  
  29. ; STRUCT FREEBLOCK* f = _HFIRST;
  30.  
  31.         LDA     __HFIRST
  32.         STA     PTR1
  33.         LDA     __HFIRST+1
  34. @l1:    STA     PTR1+1
  35.  
  36. ; WHILE (f) {$7b}
  37.  
  38.         ORA     PTR1
  39.         BEQ     @l2             ; jUMP IF END OF FREE LIST REACHED
  40.  
  41. ; sIZE += f->SIZE;
  42.  
  43.         LDY     #FREEBLOCK_SIZE
  44.         LDA     (PTR1),Y
  45.         ADD     PTR2
  46.         STA     PTR2
  47.         INY
  48.         LDA     (PTR1),Y
  49.         ADC     PTR2+1
  50.         STA     PTR2+1
  51.  
  52. ; f = f->NEXT;
  53.  
  54.         INY                             ; pOINTS TO f->NEXT
  55.         LDA     (PTR1),Y
  56.         TAX
  57.         INY
  58.         LDA     (PTR1),Y
  59.         STX     PTR1
  60.         JMP     @l1
  61.  
  62. ; RETURN sIZE + (_HEND - _HPTR) * SIZEOF (*_HEND);
  63.  
  64. @l2:    LDA     PTR2
  65.         ADD     __HEND
  66.         STA     PTR2
  67.         LDA     PTR2+1
  68.         ADC     __HEND+1
  69.         TAX
  70.  
  71.         LDA     PTR2
  72.         SUB     __HPTR
  73.         STA     PTR2
  74.         TXA
  75.         SBC     __HPTR+1
  76.         TAX
  77.         LDA     PTR2
  78.  
  79.         RTS
  80.  
  81.  
  82.  
  83.