		incdir  include:
		incdir  lvo:

		include powerpc/ppcmacros.i
		include powerpc/powerpc.i
		include powerpc/tasksppc.i
		include dos/dos.i

		include powerpc_lib.i
		include exec_lib.i
		include dos_lib.i

		xref    _SysBase
		xref    _DOSBase
		xref    _PowerPCBase
		xref    _LinkerDB

		smalldata
		executable
		escapestr
		version 8

start
		prolog  1024
		pushgpr r30/r31
		la      r31,TaskPtrs-4
		la      r4,Task1
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      r4,Task2
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      r4,Task3
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      r4,Task4
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      r4,Task5
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      r4,Task6
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      r4,Task7
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      r4,Task8
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      r4,Task9
		CALLPOWERPC     CreateTaskPPC
		stwu    r3,4(r31)
		la      _d1,welcome
		la      _d2,Args
		RUN68K_XL       _DOSBase,VPrintf
		liw     r4,SIGBREAKF_CTRL_C
		CALLPOWERPC     WaitPPC
		la      _d1,sendsigs
		la      _d2,Args
		RUN68K_XL       _DOSBase,VPrintf
		la      r31,TaskPtrs-4
		li      r30,9
.loop
		lwzu    r4,4(r31)
		liw     r5,$00010000
		CALLPOWERPC     SignalPPC
		subic.  r30,r30,1
		bne     .loop
		liw     _d1,100
		RUN68K  _DOSBase,Delay
		popgpr
		epilog

T1_Code
		prolog  1024
		la      r3,T1_Win
		la      r4,T1_Text
		bl      Loop
		epilog
T2_Code
		prolog  1024
		la      r3,T2_Win
		la      r4,T2_Text
		bl      Loop
		epilog
T3_Code
		prolog  1024
		la      r3,T3_Win
		la      r4,T3_Text
		bl      Loop
		epilog
T4_Code
		prolog  1024
		la      r3,T4_Win
		la      r4,T4_Text
		bl      Loop
		epilog
T5_Code
		prolog  1024
		la      r3,T5_Win
		la      r4,T5_Text
		bl      Loop
		epilog
T6_Code
		prolog  1024
		la      r3,T6_Win
		la      r4,T6_Text
		bl      Loop
		epilog
T7_Code
		prolog  1024
		la      r3,T7_Win
		la      r4,T7_Text
		bl      Loop
		epilog
T8_Code
		prolog  1024
		la      r3,T8_Win
		la      r4,T8_Text
		bl      Loop
		epilog
T9_Code
		prolog  1024
		la      r3,T9_Win
		la      r4,T9_Text
		bl      Loop
		epilog

Loop
		pushlr
		pushgpr r27-r31
		mr      r27,r3
		mr      r28,r4
		li      r4,16
		CALLPOWERPC     AllocSignalPPC
		mr      r29,r3


		li      r4,1
		slw     r30,r4,r3
		mr      _d1,r27
		liw     _d2,MODE_NEWFILE
		RUN68K_XL       _DOSBase,Open
		mr      r31,_d0
.loop
		mr      _d1,r31
		mr      _d2,r28
		la      _d3,Args
		RUN68K_XL       _DOSBase,VFPrintf
		li      r4,0
		li      r5,0
		CALLPOWERPC     SetSignalPPC
		and.    r3,r3,r30
		beq     .loop
		mr      _d1,r31


		la      _d2,sigsrec
		la      _d3,Args
		RUN68K_XL       _DOSBase,VFPrintf
		mr      r4,r29
		CALLPOWERPC     FreeSignalPPC
		popgpr
		epilog

		section data
welcome         dc.b    "Welcome to the WarpOS multitasking demonstration\n"
		dc.b    "Press CTRL-C to quit (The PPC will wait for CTRL_C itself!)\n",0
sendsigs        dc.b    "Sending signals to all child tasks\n",0
sigsrec         dc.b    "Signal received\n"
		dc.b    "Removing task\n",0
		even

Task1           dc.l    TASKATTR_CODE
		dc.l    T1_Code
		dc.l    TASKATTR_NAME
		dc.l    T1_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T1_Win          dc.b    "CON:0/0/266/200/PPC task 'DemoTask1'/AUTO/CLOSE/WAIT/INACTIVE",0
T1_Text         dc.b    "PPC task 'DemoTask1' active\n"
		dc.b    "Waiting for a signal\n",0
T1_Name         dc.b    "DemoTask1",0
		even

Task2           dc.l    TASKATTR_CODE
		dc.l    T2_Code
		dc.l    TASKATTR_NAME
		dc.l    T2_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T2_Win          dc.b    "CON:266/0/266/200/PPC task 'DemoTask2'/AUTO/CLOSE/WAIT/INACTIVE",0
T2_Text         dc.b    "PPC task 'DemoTask2' active\n"
		dc.b    "Waiting for a signal\n",0
T2_Name         dc.b    "DemoTask2",0
		even

Task3           dc.l    TASKATTR_CODE
		dc.l    T3_Code
		dc.l    TASKATTR_NAME
		dc.l    T3_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T3_Win          dc.b    "CON:532/0/266/200/PPC task 'DemoTask3'/AUTO/CLOSE/WAIT/INACTIVE",0
T3_Text         dc.b    "PPC task 'DemoTask3' active\n"
		dc.b    "Waiting for a signal\n",0
T3_Name         dc.b    "DemoTask3",0
		even

Task4           dc.l    TASKATTR_CODE
		dc.l    T4_Code
		dc.l    TASKATTR_NAME
		dc.l    T4_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T4_Win          dc.b    "CON:0/200/266/200/PPC task 'DemoTask4'/AUTO/CLOSE/WAIT/INACTIVE",0
T4_Text         dc.b    "PPC task 'DemoTask4' active\n"
		dc.b    "Waiting for a signal\n",0
T4_Name         dc.b    "DemoTask4",0
		even

Task5           dc.l    TASKATTR_CODE
		dc.l    T5_Code
		dc.l    TASKATTR_NAME
		dc.l    T5_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T5_Win          dc.b    "CON:266/200/266/200/PPC task 'DemoTask5'/AUTO/CLOSE/WAIT/INACTIVE",0
T5_Text         dc.b    "PPC task 'DemoTask5' active\n"
		dc.b    "Waiting for a signal\n",0
T5_Name         dc.b    "DemoTask5",0
		even

Task6           dc.l    TASKATTR_CODE
		dc.l    T6_Code
		dc.l    TASKATTR_NAME
		dc.l    T6_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T6_Win          dc.b    "CON:532/200/266/200/PPC task 'DemoTask6'/AUTO/CLOSE/WAIT/INACTIVE",0
T6_Text         dc.b    "PPC task 'DemoTask6' active\n"
		dc.b    "Waiting for a signal\n",0
T6_Name         dc.b    "DemoTask6",0
		even

Task7           dc.l    TASKATTR_CODE
		dc.l    T7_Code
		dc.l    TASKATTR_NAME
		dc.l    T7_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T7_Win          dc.b    "CON:0/400/266/200/PPC task 'DemoTask7'/AUTO/CLOSE/WAIT/INACTIVE",0
T7_Text         dc.b    "PPC task 'DemoTask7' active\n"
		dc.b    "Waiting for a signal\n",0
T7_Name         dc.b    "DemoTask7",0
		even

Task8           dc.l    TASKATTR_CODE
		dc.l    T8_Code
		dc.l    TASKATTR_NAME
		dc.l    T8_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T8_Win          dc.b    "CON:266/400/266/200/PPC task 'DemoTask8'/AUTO/CLOSE/WAIT/INACTIVE",0
T8_Text         dc.b    "PPC task 'DemoTask8' active\n"
		dc.b    "Waiting for a signal\n",0
T8_Name         dc.b    "DemoTask8",0
		even

Task9           dc.l    TASKATTR_CODE
		dc.l    T9_Code
		dc.l    TASKATTR_NAME
		dc.l    T9_Name
		dc.l    TASKATTR_R2
		dc.l    _LinkerDB
		dc.l    TASKATTR_MOTHERPRI
		dc.l    -1
		dc.l    0
T9_Win          dc.b    "CON:532/400/266/200/PPC task 'DemoTask10'/AUTO/CLOSE/WAIT/INACTIVE",0
T9_Text         dc.b    "PPC task 'DemoTask9' active\n"
		dc.b    "Waiting for a signal\n",0
T9_Name         dc.b    "DemoTask9",0
		even

		section bss
		ds.b    32
Args            ds.l    1
TaskPtrs        dsb.l   9
		ds.b    32
		even
