]> git.sur5r.net Git - cc65/blob - libsrc/common/_heapmemavail.s
Merge pull request #249 from polluks/master
[cc65] / libsrc / common / _heapmemavail.s
1 ;
2 ; Ullrich von Bassewitz, 2003-02-01
3 ;
4 ; Return the amount of free memory on the heap.
5 ;
6 ; size_t _heapmemavail (void);
7 ;
8 ;
9
10         .importzp       ptr1, ptr2
11         .export         __heapmemavail
12
13         .include        "_heap.inc"
14
15         .macpack        generic
16
17 ;-----------------------------------------------------------------------------
18 ; Code
19
20 __heapmemavail:
21
22 ; size_t Size = 0;
23
24         lda     #0
25         sta     ptr2
26         sta     ptr2+1
27
28 ; struct freeblock* F = _heapfirst;
29
30         lda     __heapfirst
31         sta     ptr1
32         lda     __heapfirst+1
33 @L1:    sta     ptr1+1
34
35 ; while (F) {
36
37         ora     ptr1
38         beq     @L2             ; Jump if end of free list reached
39
40 ; Size += F->size;
41
42         ldy     #freeblock::size
43         lda     (ptr1),y
44         add     ptr2
45         sta     ptr2
46         iny
47         lda     (ptr1),y
48         adc     ptr2+1
49         sta     ptr2+1
50
51 ; F = F->next;
52
53         iny                             ; Points to F->next
54         lda     (ptr1),y
55         tax
56         iny
57         lda     (ptr1),y
58         stx     ptr1
59         jmp     @L1
60
61 ; return Size + (_heapend - _heapptr) * sizeof (*_heapend);
62
63 @L2:    lda     ptr2
64         add     __heapend
65         sta     ptr2
66         lda     ptr2+1
67         adc     __heapend+1
68         tax
69
70         lda     ptr2
71         sub     __heapptr
72         sta     ptr2
73         txa
74         sbc     __heapptr+1
75         tax
76         lda     ptr2
77
78         rts