ORGANIZATION_BLOCK OB 1
BEGIN

	// Check instance-DB length
	AUF		DB 1
	L		DBLG
	__ASSERT==	__ACCU 1,	22
	AUF		DB 0


	// Check TOF
	CALL	SFB 5, DB 1 (
		IN	:= FALSE,
		PT	:= T#0S,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	__ASSERT==	__ACCU 1,	0
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	CALL	SFB 5, DB 1 (
		IN	:= FALSE,
		PT	:= T#200MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	__ASSERT==	__ACCU 1,	0
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	CALL	SFB 5, DB 1 (
		IN	:= TRUE,
		PT	:= T#200MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	1
	L		MD 2
	__ASSERT>=	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	1
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	__SLEEP		250
	CALL	SFB 5, DB 1 (
		IN	:= TRUE,
		PT	:= T#200MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	1
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	1
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	CALL	SFB 5, DB 1 (
		IN	:= FALSE,
		PT	:= T#200MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	1
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	2
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT==	__ACCU 1,	0

	__SLEEP		50
	CALL	SFB 5, DB 1 (
		IN	:= FALSE,
		PT	:= T#200MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	1
	L		MD 2
	__ASSERT>=	__ACCU 1,	50
	__ASSERT<=	__ACCU 1,	100
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	2
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	50
	__ASSERT<=	__ACCU 1,	100

	__SLEEP		200
	CALL	SFB 5, DB 1 (
		IN	:= FALSE,
		PT	:= T#200MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	200
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	200


	// Test: At PT=0 the timer is not started
	CALL	SFB 5, DB 1 (
		IN	:= TRUE,
		PT	:= T#0MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	200
	U		DB1.DBX 0.0	// IN
	__ASSERT==	__STW VKE,	0	// IN will be forced low.

	CALL	SFB 5, DB 1 (
		IN	:= FALSE,
		PT	:= T#0MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	1
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	200
	U		DB1.DBX 0.0	// IN
	__ASSERT==	__STW VKE,	0


	// Test: Negative PT causes an error condition (BIE=0)
	CALL	SFB 5, DB 1 (
		IN	:= TRUE,
		PT	:= T#-500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	0
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	200
	U		DB1.DBX 0.0	// IN
	__ASSERT==	__STW VKE,	1	// IN is not forced low.

	CALL	SFB 5, DB 1 (
		IN	:= FALSE,
		PT	:= T#-500MS,
		Q	:= M 0.0,
		ET	:= MD 2,
	)
	__ASSERT==	__STW BIE,	0
	U		M 0.0
	__ASSERT==	__STW VKE,	0
	L		MD 2
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBB 12	// STATE
	__ASSERT==	__ACCU 1,	0
	L		DB1.DBD 18	// ATIME
	L		DB1.DBD 14	// STIME
	-D
	UD		DW#16#7FFFFFFF
	__ASSERT>=	__ACCU 1,	200
	U		DB1.DBX 0.0	// IN
	__ASSERT==	__STW VKE,	0


	CALL SFC 46 // STOP CPU
END_ORGANIZATION_BLOCK


DATA_BLOCK DB 1
	SFB 5
BEGIN
END_DATA_BLOCK
