From 16f291890228bc68be4c16448f4d5260348c4773 Mon Sep 17 00:00:00 2001 From: cuz Date: Sat, 17 Jul 2004 12:05:36 +0000 Subject: [PATCH] New function heapblocksize() git-svn-id: svn://svn.cc65.org/cc65/trunk@3157 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- include/stdlib.h | 4 ++++ libsrc/common/Makefile | 1 + libsrc/common/_heapblocksize.s | 39 ++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 libsrc/common/_heapblocksize.s diff --git a/include/stdlib.h b/include/stdlib.h index eae186736..f18421a41 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -65,12 +65,16 @@ void __fastcall__ free (void* block); void __fastcall__ _heapadd (void* mem, size_t size); /* Add a block to the heap */ +size_t __fastcall__ _heapblocksize (const void* block); +/* Return the size of an allocated block */ + size_t __fastcall__ _heapmemavail (void); /* Return the total free heap space */ size_t __fastcall__ _heapmaxavail (void); /* Return the size of the largest free block on the heap */ + /* Random numbers */ #define RAND_MAX 0x7FFF int rand (void); diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index 63e5a5b2c..312e6bf6a 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -63,6 +63,7 @@ S_OBJS = _cwd.o \ _fopen.o \ _heap.o \ _heapadd.o \ + _heapblocksize.o\ _heapmaxavail.o \ _heapmemavail.o \ _oserror.o \ diff --git a/libsrc/common/_heapblocksize.s b/libsrc/common/_heapblocksize.s new file mode 100644 index 000000000..8db62e0b9 --- /dev/null +++ b/libsrc/common/_heapblocksize.s @@ -0,0 +1,39 @@ +; +; Ullrich von Bassewitz, 2004-07-17 +; +; size_t __fastcall__ _heapblocksize (const void* ptr); +; +; Return the size of an allocated block. +; + + .importzp ptr1 + .export __heapblocksize + + .include "_heap.inc" + +;----------------------------------------------------------------------------- +; Code + +__heapblocksize: + +; Decrement the block pointer so it points to the admin data + + sec + sbc #HEAP_ADMIN_SPACE ; Assume it's less than 256 + bcs L1 + dex +L1: sta ptr1 + stx ptr1+1 + +; Load the size from the given block + + ldy #1 + lda (ptr1),y + tax + dey + lda (ptr1),y + +; Done + + rts + -- 2.39.5