// IN aIn_SrcBit : Any
// IN_OUT xInout_DstBit : Bool
// TEMP iTmp_DB_No : Int (oder Word)
// TEMP iTmp_TZ_No : Int (oder Word)
// IN-Parameter (ANY) prüfen
L P##aIn_SrcBit //Adresse des IN-Parameters
LAR1
L D [AR1,P#6.0] //ANY: bereichsübergreifende Adresse P#bx.y
T #iTmp_TZ_No //untere 16 Bit vielleicht T- oder Z-Nummer
//ANY+0 Byte: ANY-ID muß B#16#10 sein
//ANY+1 Byte: Typ muß BOOL (B#16#01), Counter (B#16#1C) oder Timer (B#16#1D) sein
//ANY+2 Word: Wiederholfaktor muß 1 sein
// zeigt der ANY auf ein einzelnes BOOL (E A M L DB)?
L D [AR1,P#0.0] //ANY-Header: ANY-ID + Typ + Wiederholfaktor
L DW#16#10010001 //ANY+1: Typ B#16#01 = BOOL
==D
SPB AR1
// zeigt der ANY auf einen Counter (Z)?
POP //ANY-Header zurück in AKKU1
L DW#16#101C0001 //ANY+1: Typ B#16#1C = Counter
==D
SPB SIZ
// zeigt der ANY auf einen Timer (T)?
POP //ANY-Header zurück in AKKU1
L DW#16#101D0001 //ANY+1: Typ B#16#1D = Timer
==D
SPB SIT
// Fehler: unzulässiger ANY-Parameter
SPA ERR
//-----------------------------------------------------------------------------------
// Adresse E A M L DB (DI)
// !!! Adresse DIXx.y müsste nach DBXx.y gewandelt werden
// !!! Aufruf mit DBXx.y ohne DBnr und kein DB offen wird nicht geprüft
AR1: L W [AR1,P#4.0] //eventuell DB-Nr
T #iTmp_DB_No //merken für speicherindirekt öffnen
L D [AR1,P#6.0] //ANY: bereichsübergreifende Adresse P#bx.y
LAR1 //in AR1 für registerindirekt Lesen
// Lesen E A M L DB
AUF DB [#iTmp_DB_No] //(ist Adresse nicht in DB bewirkt es nichts)
U [AR1,P#0.0] //SrcBit --> VKE
SPA OUTB
// Lesen Counter Z
SIZ: U Z [#iTmp_TZ_No] //SrcBit --> VKE
SPA OUTB
// Lesen Timer T
SIT: U T [#iTmp_TZ_No] //SrcBit --> VKE
// gelesenes SrcBit an DstBit ausgeben
OUTB: = #xInout_DstBit //VKE --> DstBit
//-----------------------------------------------------------------------------------
// OK/Fehleranzeige an ENO/BIE
OK: CLR //kein Fehler --> ENO/BIE=1
ERR: NOT //(bei Fehler Sprung hierher mit VKE=1)
SAVE //VKE in ENO/BIE speichern