; IL2PCC v8.4 - reset-priority SR latch with retained memory
; Q_next = (SET OR Q) AND (NOT RESET)
; RUN = Q AND ENABLE
;
; NOTE: Feedback behavior and scan order must be verified in Dirigo.

MACRO RST_Latch {
    DEFINE INPUT BOOL SET
    DEFINE INPUT BOOL RESET
    DEFINE INPUT BOOL ENABLE
    DEFINE OUTPUT BOOL Q
    DEFINE OUTPUT BOOL RUN

    CALL OR HoldOr
    CALL NOT ResetNot
    CALL AND HoldAnd
    CALL AND EnableAnd

    IN.X0 HoldOr.X0
    HoldAnd.Y HoldOr.X1
    IN.X1 ResetNot.X
    HoldOr.Y HoldAnd.X0
    ResetNot.Y HoldAnd.X1
    HoldAnd.Y OUT.Y0
    HoldAnd.Y EnableAnd.X0
    IN.X2 EnableAnd.X1
    EnableAnd.Y OUT.Y1
}

; Two independent latch instances for testing macro reuse
CALL BoolVar Start1 TOGGLE 0 1
CALL BoolVar Reset1 TOGGLE 0 1
CALL BoolVar Enable1 TOGGLE 0 1
CALL BoolVar Start2 TOGGLE 0 1
CALL BoolVar Reset2 TOGGLE 0 1
CALL BoolVar Enable2 TOGGLE 0 1

CALL RST_Latch Latch1
CALL RST_Latch Latch2
CALL Value Q1
CALL Value Run1
CALL Value Q2
CALL Value Run2

Start1.Y Latch1.SET
Reset1.Y Latch1.RESET
Enable1.Y Latch1.ENABLE
Latch1.Q Q1.X
Latch1.RUN Run1.X

Start2.Y Latch2.SET
Reset2.Y Latch2.RESET
Enable2.Y Latch2.ENABLE
Latch2.Q Q2.X
Latch2.RUN Run2.X
