DATA_BLOCK DB 1 STRUCT DT1 : DATE_AND_TIME := DT#1990-1-1-0:0:0.000; DT2 : DATE_AND_TIME := DT#1990-1-1-0:0:0.000; DT3 : DATE_AND_TIME := DT#1990-1-1-0:0:0.000; END_STRUCT; BEGIN DT1 := DT#1990-1-1-0:0:0.000; DT2 := DT#1990-1-1-0:0:0.000; DT3 := DT#1990-1-1-0:0:0.000; END_DATA_BLOCK FUNCTION FC 1 : VOID VAR_TEMP DBNR : INT; END_VAR BEGIN AUF DB 1 LAR1 P#DBX 0.0 // Rotate DB1.DT1 one bit to the left L D [AR1,P#4.0] UD DW#16#80000000 L D [AR1,P#0.0] RLDA T D [AR1,P#0.0] L D [AR1,P#4.0] RLDA T D [AR1,P#4.0] // Rotate DB1.DT2 one bit to the left L D [AR1,P#12.0] UD DW#16#80000000 L D [AR1,P#8.0] RLDA T D [AR1,P#8.0] L D [AR1,P#12.0] RLDA T D [AR1,P#12.0] // Clobber DB and DI registers L 0 T #DBNR AUF DB [#DBNR] AUF DI [#DBNR] // Compare DB1.DT1 to DB1.DT2 // Should be equal CALL "EQ_DT" ( DT1 := DB1.DT1, DT2 := DB1.DT2, RET_VAL := M 0.0, ) U M 0.0 __ASSERT== __STW VKE, 1 // Clobber DB and DI registers L 0 T #DBNR AUF DB [#DBNR] AUF DI [#DBNR] // Compare DB1.DT1 to DB1.DT3 // Should be not equal CALL "EQ_DT" ( DT1 := DB1.DT1, DT2 := DB1.DT3, RET_VAL := M 0.1, ) U M 0.1 __ASSERT== __STW VKE, 0 // Decrement the test counter. // Stop test, if it reaches zero. AUF DB 1 U DBX 0.0 ZR Z 0 U Z 0 SPB m003 CALL SFC 46 // Stop CPU m003: NOP 0 END_FUNCTION ORGANIZATION_BLOCK OB 1 BEGIN CALL FC 1 END_ORGANIZATION_BLOCK ORGANIZATION_BLOCK OB 100 BEGIN AUF DB 1 LAR1 P#DBX 0.0 // Initialize DB1.DT1 (one bit set) L 1 T D [AR1,P#0.0] L 0 T D [AR1,P#4.0] // Initialize DB1.DT2 (one bit set) L 1 T D [AR1,P#8.0] L 0 T D [AR1,P#12.0] // Initialize DB1.DT3 (all bits clear) L 0 T D [AR1,P#16.0] L 0 T D [AR1,P#20.0] // Initialize the test counter. // Run 10 test loops. L C#10 CLR S Z 0 SET S Z 0 END_ORGANIZATION_BLOCK