**
** ppc.library emulation
** (c)1998-2000 Frank Wille <frank@phoenix.owl.de>
**
** FreeMem/FreeVec patch, to avoid deallocation of PPC-allocated memory.
**
** V0.8d (28.11.2000) phx
**       Don't check NULL pointers. This caused illegal memory accesses.
** V0.8c (21.10.2000) phx
**       Created.
**

	machine	68040

	include	"ppclibemu.i"

	; from freepatch.c
	xref	_OldFreeMem
	xref	_OldFreeVec
	xref	_PPCFree


	section	CODE,code


	cnop	0,4
	xdef	_NewFreeMem
_NewFreeMem:
; a1 = mem block
; d0 = size
; a6 = ExecBase
	move.l	a1,d1			; free NULL?
	beq.b	1$
	lea	-32(a1),a0
	cmp.l	#MEMMAGIC,(a0)
	bne.b	1$
	cmp.l	4(a0),a0
	beq.b	ppcfreevec
1$:	jmp	([_OldFreeMem.l])


	cnop	0,4
	xdef	_NewFreeVec
_NewFreeVec:
; a1 = mem block
; a6 = ExecBase
	move.l	a1,d1			; free NULL?
	beq.b	1$
	lea	-32(a1),a0
	cmp.l	#MEMMAGIC,(a0)
	bne.b	1$
	cmp.l	4(a0),a0
	beq.b	ppcfreevec
1$:	jmp	([_OldFreeVec.l])


ppcfreevec:
; A bad program tries to free memory, which was previously allocated
; by PPCAllocMem or PPCAllocVec.
; a1 = mem block
; a6 = ExecBase
	jmp	_PPCFree
