ORGANIZATION_BLOCK OB 1
	VAR_TEMP
		BVAL_TMP	: ANY;
		BLK_TMP		: ANY;
		RET_TMP		: INT;
		LOCALDW0	: DWORD;
	END_VAR
BEGIN
	// Test SFC 21: FILL



	// Invalid BVAL ANY magic.
	LAR1		P##BVAL_TMP
	L		B#16#01		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 50.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 100.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#8124
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Invalid BLK ANY magic.
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 50.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#01		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 100.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#8325
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Invalid BVAL ANY repetition count for BOOL
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#01		// Data type (BOOL)
	T		B [AR1, P#1.0]
	L		15		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 50.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 100.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#8122
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Invalid BLK ANY repetition count for BOOL
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 50.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#01		// Data type (BOOL)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 100.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#8323
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// System-DB BVAL DB number
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 0.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 100.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#813A
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// System-DB BLK DB number
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 0.0		// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 0.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#833A
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Invalid BVAL DB number
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		999		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 0.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 0.0		// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#813A
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Invalid BLK DB number
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 0.0		// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		1		// Repetition
	T		W [AR1, P#2.0]
	L		999		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 0.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#833A
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Out of range BVAL pointer
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		4		// Repetition
	T		W [AR1, P#2.0]
	L		1		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 4.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		8		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 10.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#8124
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Out of range BLK pointer
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		4		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 10.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		8		// Repetition
	T		W [AR1, P#2.0]
	L		1		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 0.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#8325
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Unaligned BVAL pointer
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#01		// Data type (BOOL)
	T		B [AR1, P#1.0]
	L		8		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 0.1		// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#01		// Data type (BOOL)
	T		B [AR1, P#1.0]
	L		8		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 10.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#8128
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Unaligned BLK pointer
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#01		// Data type (BOOL)
	T		B [AR1, P#1.0]
	L		8		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 0.0		// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#01		// Data type (BOOL)
	T		B [AR1, P#1.0]
	L		8		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 10.7	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#8329
	__ASSERT==	__STW BIE,	0
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2


	// Copy data from DBx to DBy
	L		W#16#ABCD
	T		DB1.VAR0
	L		W#16#1234
	T		DB1.VAR1
	L		W#16#9988
	T		DB1.VAR2
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#04		// Data type (WORD)
	T		B [AR1, P#1.0]
	L		3		// Repetition
	T		W [AR1, P#2.0]
	L		1		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 0.0	// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#04		// Data type (WORD)
	T		B [AR1, P#1.0]
	L		6		// Repetition
	T		W [AR1, P#2.0]
	L		3		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 0.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#0000
	__ASSERT==	__STW BIE,	1
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2
	L		DB3.VAR0
	__ASSERT==	__ACCU 1,	W#16#ABCD
	L		DB3.VAR1
	__ASSERT==	__ACCU 1,	W#16#1234
	L		DB3.VAR2
	__ASSERT==	__ACCU 1,	W#16#9988
	L		DB3.VAR3
	__ASSERT==	__ACCU 1,	W#16#ABCD
	L		DB3.VAR4
	__ASSERT==	__ACCU 1,	W#16#1234
	L		DB3.VAR5
	__ASSERT==	__ACCU 1,	W#16#9988


	// Copy data from DBx to L
	L		W#16#ABCD
	T		DB1.VAR0
	L		W#16#1234
	T		DB1.VAR1
	L		W#16#9988
	T		DB1.VAR2
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#04		// Data type (WORD)
	T		B [AR1, P#1.0]
	L		3		// Repetition
	T		W [AR1, P#2.0]
	L		1		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 0.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #LOCALDW0,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#0000
	__ASSERT==	__STW BIE,	1
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2
	L		#LOCALDW0
	__ASSERT==	__ACCU 1,	DW#16#ABCD1234


	// Copy data from L to DBx
	L		DW#16#98761122
	T		#LOCALDW0
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#04		// Data type (WORD)
	T		B [AR1, P#1.0]
	L		3		// Repetition
	T		W [AR1, P#2.0]
	L		3		// DB
	T		W [AR1, P#4.0]
	L		P#DBX 6.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #LOCALDW0,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#0000
	__ASSERT==	__STW BIE,	1
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2
	L		#LOCALDW0
	__ASSERT==	__ACCU 1,	DW#16#98761122
	L		DB3.VAR3
	__ASSERT==	__ACCU 1,	W#16#9876
	L		DB3.VAR4
	__ASSERT==	__ACCU 1,	W#16#1122
	L		DB3.VAR5
	__ASSERT==	__ACCU 1,	W#16#9876


	// Copy data bytes from M to M
	L		W#16#ABCD
	T		MW 0
	L		0
	T		MD 10
	LAR1		P##BVAL_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		2		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 0.0		// Pointer
	T		D [AR1, P#6.0]
	LAR1		P##BLK_TMP
	L		B#16#10		// Magic
	T		B [AR1, P#0.0]
	L		B#16#02		// Data type (BYTE)
	T		B [AR1, P#1.0]
	L		4		// Repetition
	T		W [AR1, P#2.0]
	L		0		// DB
	T		W [AR1, P#4.0]
	L		P#M 10.0	// Pointer
	T		D [AR1, P#6.0]
	AUF		DB 2
	AUF		DI 2
	CALL		SFC 21 (
		BVAL	:= #BVAL_TMP,
		RET_VAL	:= #RET_TMP,
		BLK	:= #BLK_TMP,
	)
	L		#RET_TMP
	__ASSERT==	__ACCU 1,	W#16#0000
	__ASSERT==	__STW BIE,	1
	__ASSERT==	DBNO,		2
	__ASSERT==	DINO,		2
	L		MW 0
	__ASSERT==	__ACCU 1,	W#16#ABCD
	L		MD 10
	__ASSERT==	__ACCU 1,	DW#16#ABCDABCD



	CALL SFC 46 // STOP CPU
END_ORGANIZATION_BLOCK


DATA_BLOCK DB 1
STRUCT
	VAR0	: WORD;
	VAR1	: WORD;
	VAR2	: WORD;
END_STRUCT
BEGIN
END_DATA_BLOCK


DATA_BLOCK DB 2
STRUCT
	VAR0	: WORD;
END_STRUCT
BEGIN
END_DATA_BLOCK


DATA_BLOCK DB 3
STRUCT
	VAR0	: WORD;
	VAR1	: WORD;
	VAR2	: WORD;
	VAR3	: WORD;
	VAR4	: WORD;
	VAR5	: WORD;
END_STRUCT
BEGIN
END_DATA_BLOCK
