##
## ppc.library emulation
## (c)1998-99 Frank Wille <frank@phoenix.owl.de>
##
## Task objects
##
## V0.7  (11.12.1999) phx
##       Pass a lock to PROGDIR in TaskObject for asynchronous PPC tasks.
##       They will have neither a valid PROGDIR nor a current directory
##       under WarpOS otherwise.
## V0.6g (05.12.1999) phx
##       PPCThread structure for spawning a new PPC task from a running
##       TaskObject.
## V0.5d (04.04.1999) phx
##       Stacksize, syncCreator, PPC-MsgPort and startup message.
##       Added MPSemaphore for multi-processor write access.
## V0.5b (12.02.1999) phx
##       Ext_UserData.
## V0.4c (22.01.1999) phx
##       created
##


.macro	ds	# name,size
	.set	\1,offset
	.set	offset,offset+\2
.endm


# struct TaskObject
.set	offset,0
ds	to_n,14
ds	to_flags,1
ds	to_id,1
ds	to_mpSema,20
ds	to_elf,4
ds	to_m68kParent,4
ds	to_start_addr,4
ds	to_stacksize,4
ds	to_args,32
ds	to_PPCBase,4
ds	to_inputhandle,4
ds	to_outputhandle,4
ds	to_errorhandle,4
ds	to_progdirLock,4
ds	to_startup,4
ds	to_msg_data,4
ds	to_msg_length,4
ds	to_msg_id,4
ds	to_reserved2,32
# PPC-only data below
ds	to_this,4
ds	to_initialstack,4
ds	to_exit_addr,4
ds	to_ppc_port,4
ds	to_Ext_UserData,4
ds	to_reserved3,32
ds	to_SIZE,0

.set	TskObj_idMagic,0xa5

.set	TskObjB_Async,7
.set	TskObjF_Async,(1<<7)
.set	TskObjB_Enq,6
.set	TskObjF_Enq,(1<<6)
.set	TskObjB_MsgPort,5
.set	TskObjF_MsgPort,(1<<5)
.set	TskObjB_breaksigs,3
.set	TskObjF_breaksigs,(1<<3)
.set	TskObjB_closeerr,2
.set	TskObjF_closeerr,(1<<2)
.set	TskObjB_closeout,1
.set	TskObjF_closeout,(1<<1)
.set	TskObjB_closeinp,0
.set	TskObjF_closeinp,(1<<0)


# struct PPCThread
.set	offset,0
ds	thrd_magicID,4
ds	thrd_parentTask,4
ds	thrd_pc,4
ds	thrd_SIZE,0

.set	THREAD_MAGIC,0x54485244		# 'THRD'
