##
## ppc.library emulation
## (c)1998-99 Frank Wille <frank@phoenix.owl.de>
##
## powerpc.library LVOs and macros for pasm
##
## V0.4  (27.11.1998) phx
##       New CALLWOS macro, which accepts the PPCBase in any register,
##       or reads it from the caller's stack (offset 60) itself.
## V0.1  (15.11.1998) phx
##       First partially working ppc.library emulation. Synchronous PPC
##       tasks, started by runelf, which only use the basic PowerUp kernel
##       functions for I/O, memory and context-switch seem to work fine.
## V0.0  (13.11.1998) phx
##       created
##


## powerpc.library LVOs
.set	RunPPC              ,       -30
.set	WaitForPPC          ,       -36
.set	GetCPU              ,       -42
.set	PowerDebugMode      ,       -48
.set	AllocVec32          ,       -54
.set	FreeVec32           ,       -60
.set	SPrintF68K          ,       -66
.set	AllocXMsg           ,       -72
.set	FreeXMsg            ,       -78
.set	PutXMsg             ,       -84
.set	GetPPCState         ,       -90

.set	Run68K              ,       -300
.set	WaitFor68K          ,       -306
.set	SPrintF             ,       -312
.set	Run68KLowLevel      ,       -318
.set	AllocVecPPC         ,       -324
.set	FreeVecPPC          ,       -330
.set	CreateTaskPPC       ,       -336
.set	DeleteTaskPPC       ,       -342
.set	FindTaskPPC         ,       -348
.set	InitSemaphorePPC    ,       -354
.set	FreeSemaphorePPC    ,       -360
.set	AddSemaphorePPC     ,       -366
.set	RemSemaphorePPC     ,       -372
.set	ObtainSemaphorePPC  ,       -378
.set	AttemptSemaphorePPC ,       -384
.set	ReleaseSemaphorePPC ,       -390
.set	FindSemaphorePPC    ,       -396
.set	InsertPPC           ,       -402
.set	AddHeadPPC          ,       -408
.set	AddTailPPC          ,       -414
.set	RemovePPC           ,       -420
.set	RemHeadPPC          ,       -426
.set	RemTailPPC          ,       -432
.set	EnqueuePPC          ,       -438
.set	FindNamePPC         ,       -444
.set	FindTagItemPPC      ,       -450
.set	GetTagDataPPC       ,       -456
.set	NextTagItemPPC      ,       -462
.set	AllocSignalPPC      ,       -468
.set	FreeSignalPPC       ,       -474
.set	SetSignalPPC        ,       -480
.set	SignalPPC           ,       -486
.set	WaitPPC             ,       -492
.set	SetTaskPriPPC       ,       -498
.set	Signal68K           ,       -504
.set	SetCache            ,       -510
.set	SetExcHandler       ,       -516
.set	RemExcHandler       ,       -522
.set	Super               ,       -528
.set	User                ,       -534
.set	SetHardware         ,       -540
.set	ModifyFPExc         ,       -546
.set	WaitTime            ,       -552
.set	ChangeStack         ,       -558
.set	LockTaskList        ,       -564
.set	UnLockTaskList      ,       -570
.set	SetExcMMU           ,       -576
.set	ClearExcMMU         ,       -582
.set	ChangeMMU           ,       -588
.set	GetInfo             ,       -594
.set	CreateMsgPortPPC    ,       -600
.set	DeleteMsgPortPPC    ,       -606
.set	AddPortPPC          ,       -612
.set	RemPortPPC          ,       -618
.set	FindPortPPC         ,       -624
.set	WaitPortPPC         ,       -630
.set	PutMsgPPC           ,       -636
.set	GetMsgPPC           ,       -642
.set	ReplyMsgPPC         ,       -648
.set	FreeAllMem          ,       -654
.set	CopyMemPPC          ,       -660
.set	AllocXMsgPPC        ,       -666
.set	FreeXMsgPPC         ,       -672
.set	PutXMsgPPC          ,       -678
.set	GetSysTimePPC       ,       -684
.set	AddTimePPC          ,       -690
.set	SubTimePPC          ,       -696
.set	CmpTimePPC          ,       -702
.set	SetReplyPortPPC     ,       -708
.set	SnoopTask           ,       -714
.set	EndSnoopTask        ,       -720
.set	GetHALInfo          ,       -726
.set	SetScheduling       ,       -732
.set	FindTaskByID        ,       -738
.set	SetNiceValue        ,       -744


## PPCBase
.set	LinkerDB,40
.set	ppc_PVR,44
.set	ppc_BusClock,48
.set	ppc_CPUClock,52
.set	SysBase,56
.set	PowerPCBase,60


## macros
.macro	CALLWOS
.ifgt	$NARG-1
.ifne	\2
	lwz	r3,PowerPCBase(\2)
.endif
.else
	lwz	r11,0(r1)
	lwz	r11,60(r11)
	lwz	r3,PowerPCBase(r11)
.endif
	lwz	r0,\1+2(r3)
	mtlr	r0
	blrl
.endm
