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

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