2003-02-01 12:22:09 +00:00
|
|
|
;
|
|
|
|
; Ullrich von Bassewitz, 2003-02-01
|
|
|
|
;
|
|
|
|
; Return the amount of free memory on the heap.
|
|
|
|
;
|
2012-03-04 13:08:54 +00:00
|
|
|
; size_t _heapmemavail (void);
|
2003-02-01 12:22:09 +00:00
|
|
|
;
|
|
|
|
;
|
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
.importzp ptr1, ptr2
|
2022-08-29 17:55:48 +00:00
|
|
|
.export ___heapmemavail
|
2003-02-01 12:22:09 +00:00
|
|
|
|
|
|
|
.include "_heap.inc"
|
|
|
|
|
2013-05-09 11:56:54 +00:00
|
|
|
.macpack generic
|
2003-02-01 12:22:09 +00:00
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
; Code
|
|
|
|
|
2022-08-29 17:55:48 +00:00
|
|
|
___heapmemavail:
|
2003-02-01 12:22:09 +00:00
|
|
|
|
2003-12-03 10:15:33 +00:00
|
|
|
; size_t Size = 0;
|
2003-02-01 12:22:09 +00:00
|
|
|
|
|
|
|
lda #0
|
|
|
|
sta ptr2
|
|
|
|
sta ptr2+1
|
|
|
|
|
|
|
|
; struct freeblock* F = _heapfirst;
|
|
|
|
|
2022-08-29 17:55:48 +00:00
|
|
|
lda ___heapfirst
|
2003-02-01 12:22:09 +00:00
|
|
|
sta ptr1
|
2022-08-29 17:55:48 +00:00
|
|
|
lda ___heapfirst+1
|
2003-02-01 12:22:09 +00:00
|
|
|
@L1: sta ptr1+1
|
|
|
|
|
|
|
|
; while (F) {
|
|
|
|
|
|
|
|
ora ptr1
|
|
|
|
beq @L2 ; Jump if end of free list reached
|
|
|
|
|
|
|
|
; Size += F->size;
|
|
|
|
|
2003-12-03 10:15:33 +00:00
|
|
|
ldy #freeblock::size
|
2003-02-01 12:22:09 +00:00
|
|
|
lda (ptr1),y
|
|
|
|
add ptr2
|
|
|
|
sta ptr2
|
|
|
|
iny
|
|
|
|
lda (ptr1),y
|
|
|
|
adc ptr2+1
|
|
|
|
sta ptr2+1
|
|
|
|
|
|
|
|
; F = F->next;
|
|
|
|
|
|
|
|
iny ; Points to F->next
|
|
|
|
lda (ptr1),y
|
|
|
|
tax
|
|
|
|
iny
|
|
|
|
lda (ptr1),y
|
|
|
|
stx ptr1
|
|
|
|
jmp @L1
|
|
|
|
|
|
|
|
; return Size + (_heapend - _heapptr) * sizeof (*_heapend);
|
|
|
|
|
|
|
|
@L2: lda ptr2
|
2022-08-29 17:55:48 +00:00
|
|
|
add ___heapend
|
2003-02-01 12:22:09 +00:00
|
|
|
sta ptr2
|
|
|
|
lda ptr2+1
|
2022-08-29 17:55:48 +00:00
|
|
|
adc ___heapend+1
|
2003-02-01 12:22:09 +00:00
|
|
|
tax
|
|
|
|
|
|
|
|
lda ptr2
|
2022-08-29 17:55:48 +00:00
|
|
|
sub ___heapptr
|
2003-02-01 12:22:09 +00:00
|
|
|
sta ptr2
|
|
|
|
txa
|
2022-08-29 17:55:48 +00:00
|
|
|
sbc ___heapptr+1
|
2003-02-01 12:22:09 +00:00
|
|
|
tax
|
|
|
|
lda ptr2
|
|
|
|
|
|
|
|
rts
|