; ; Ullrich von Bassewitz, 21.7.2000 ; ; Add a block to the heap free list ; ; void __fastcall__ _heapadd (void* mem, size_t size); ; ; .importzp ptr1, ptr2 .import popax .import heapadd .export __heapadd .include "_heap.inc" .macpack generic ;----------------------------------------------------------------------------- ; Code __heapadd: sta ptr1 ; Store size in ptr1 stx ptr1+1 jsr popax ; Get the block pointer sta ptr2 stx ptr2+1 ; Store block pointer in ptr2 ; Check if size is greater or equal than min_size. Otherwise we don't care ; about the block (this may only happen for user supplied blocks, blocks ; from the heap are always large enough to hold a freeblock structure). lda ptr1 ; Load low byte ldx ptr1+1 ; Load/check high byte bne @L1 cmp #HEAP_MIN_BLOCKSIZE bcs @L1 rts ; Block not large enough ; The block is large enough. Set the size field in the block. @L1: ldy #usedblock::size sta (ptr2),y iny txa sta (ptr2),y ; Call the internal function since variables are now setup correctly jmp heapadd