mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-10-31 17:04:42 +00:00
116 lines
3.2 KiB
NASM
116 lines
3.2 KiB
NASM
mcopy mm.macros
|
|
****************************************************************
|
|
*
|
|
* Calloc - Allocate memory from a pool and set it to 0.
|
|
*
|
|
* Inputs:
|
|
* bytes - number of bytes to allocate
|
|
* useGlobalPool - should the memory come from the global
|
|
* (or local) pool
|
|
*
|
|
* Outputs:
|
|
* ptr - points to the first byte of the allocated memory
|
|
*
|
|
****************************************************************
|
|
*
|
|
Calloc start cc
|
|
|
|
ptr equ 0 pointer to reserved memory
|
|
|
|
subroutine (2:bytes),4
|
|
|
|
ph2 bytes reserve the memory
|
|
jsl Malloc
|
|
sta ptr save the pointer to the memory
|
|
stx ptr+2
|
|
lda bytes if there are an odd number of bytes then
|
|
tay
|
|
lsr a
|
|
bcc lb1
|
|
short M zero the first byte
|
|
lda #0
|
|
dey
|
|
sta [ptr],Y
|
|
long M
|
|
lb1 tyx done if there are no more bytes
|
|
beq lb4
|
|
lda #0
|
|
dey branch if the next word is the zeroth
|
|
dey
|
|
beq lb3
|
|
lb2 sta [ptr],Y zero full words
|
|
dey
|
|
dey
|
|
bne lb2
|
|
lb3 sta [ptr] zero the last word
|
|
|
|
lb4 return 4:ptr return the pointer
|
|
end
|
|
|
|
****************************************************************
|
|
*
|
|
* GCalloc - Allocate and clear memory from the global pool.
|
|
*
|
|
* Inputs:
|
|
* bytes - number of bytes to allocate
|
|
*
|
|
* Outputs:
|
|
* ptr - points to the first byte of the allocated memory
|
|
*
|
|
****************************************************************
|
|
*
|
|
GCalloc start cc
|
|
|
|
ptr equ 0 pointer to reserved memory
|
|
|
|
subroutine (2:bytes),4
|
|
|
|
ph2 bytes reserve the memory
|
|
jsl GMalloc
|
|
sta ptr save the pointer to the memory
|
|
stx ptr+2
|
|
lda bytes if there are an odd number of bytes then
|
|
tay
|
|
lsr a
|
|
bcc lb1
|
|
short M zero the first byte
|
|
lda #0
|
|
dey
|
|
sta [ptr],Y
|
|
long M
|
|
lb1 tyx done if there are no more bytes
|
|
beq lb4
|
|
lda #0
|
|
dey branch if the next word is the zeroth
|
|
dey
|
|
beq lb3
|
|
lb2 sta [ptr],Y zero full words
|
|
dey
|
|
dey
|
|
bne lb2
|
|
lb3 sta [ptr] zero the last word
|
|
|
|
lb4 return 4:ptr return the pointer
|
|
end
|
|
|
|
****************************************************************
|
|
*
|
|
* Malloc - Allocate memory from a pool.
|
|
*
|
|
* Inputs:
|
|
* bytes - number of bytes to allocate
|
|
* useGlobalPool - should the memory come from the global
|
|
* (or local) pool
|
|
*
|
|
* Outputs:
|
|
* ptr - points to the first byte of the allocated memory
|
|
*
|
|
****************************************************************
|
|
*
|
|
Malloc start cc
|
|
|
|
lda |useGlobalPool
|
|
jne GMalloc
|
|
jmp LMalloc
|
|
end
|