All pastes #289074 Raw Edit

Something

public text v1 · immutable
#289074 ·published 2006-12-22 20:55 UTC
rendered paste body
///hello world!!!
///that piece of crap, i mean, code assumes that the memory starting address is on ix
///and the memory ending adress are on iy(both provided by kernel)
///
///code assumes that when api calls a function the parameters are store in BC, DE, HL ...
///code assumes that when we return something to api, we return in HL 
memstarth:		defs 0
memstartl:		defs 0
memendh: 		defs 0
memendl: 		defs 0
mmapladdrh: 	defs 0
mmapladdrl: 	defs 0

ld (memstarth),ixh		;putting start memory adress on ram
ld (memstartl),ixl		;assuming that its on ix
ld (memendh),iyh		;putting end memory adress on ram
ld (memendl),iyl		;assuming that its on iy
ld (mmapladdrh),iyh		;putting end memory adress on ram
ld (mmapladdrl),iyl		;assuming that its on iy

malloc:
	ld	ixh,(memendh)	;get the last available memory address
	ld	ixl,(memendl)
	ld	iyh,(ix+1)		;get the last header address from MM
	ld	iyl,(ix+2)
	ld	h,(iy)			;get the size of last chunk
	ld	l,(iy+1)
	add	iy,hl			;get the first free address on memory
	add iy,4 
	or	a
	sbc	ix,iy			;get the free memory size
	ld	hl,6			;fill DE with header size and MM registry size
	add	bc,hl			;get the amout of memory neded
	or a
	ld hl,0				;prepare to exit n' return false case the memory is not enough
	sbc ix,bc			;see if the free memory is enough to exec malloc
	jr nc,mmap			;test if memory is enogh, if yes, jump to memory maping routine
	ret


///remember that mmap starts at the end of memory and come back word by word
mmap:
	ld	ixh,(memendh)	;get the last available memory address
	ld	ixl,(memendl)
	dec	ix
	dec	ix
	ld	(memendh),ixh	;save new memory last available address
	ld	(memendl),ixl
	ld	(ix+1),iyh		;save mmap record
	ld	(ix+2),iyl
	ld	hl,de
	ld	(iy),h			;save the size in the header
	inc	iy
	ld	(iy),l
	inc	iy
	ld	(iy),KERNEL_CurTaskID	;put the app id on the header
	inc	iy
	ld	(iy),0				;clear our extra header byte
	inc	iy
	ld	hl,iy;				;put the memory starting address on hl to return to app 
	ret