67 lines
2.1 KiB
C#
67 lines
2.1 KiB
C#
using Enigmos.Modules.ControllingModules;
|
|
using Enigmos.Modules.Other;
|
|
using Enigmos.Ports;
|
|
using Enigmos.Ports.DataPorts;
|
|
using Nocturnis.Enigmos.Modules;
|
|
using TabulaSmaragdina.Constants;
|
|
|
|
namespace Enigmos.Modules.TerminalModules;
|
|
|
|
public partial class SRLatchModule : TerminalModule, IComputationalCompositeModule
|
|
{
|
|
private DataInPort? Input1 { get; set; }
|
|
private DataInPort? Input2 { get; set; }
|
|
public OutputSubModule? Output1 { get; set; }
|
|
public OutputSubModule? Output2 { get; set; }
|
|
public override IEnumerable<BasePort> Ports => new[] { Input1, Input2 }!;
|
|
|
|
private bool State { get; set; }
|
|
public IBaseModule[] SubModules() => new IBaseModule[] { Output1, Output2 };
|
|
public void Compute(IRootModule root)
|
|
{
|
|
Output1!.DataOut.ResultData.Bit = State;
|
|
Output2!.DataOut.ResultData.Bit = State;
|
|
}
|
|
|
|
protected override void Consume(RootModule root)
|
|
{
|
|
bool set = Input1!.GetData(root).Bit;
|
|
bool reset = Input2!.GetData(root).Bit;
|
|
if (set && reset)
|
|
State = false;
|
|
else if (set)
|
|
State = true;
|
|
else if (reset)
|
|
State = false;
|
|
}
|
|
protected OutputSubModule GetOutputModule(string path)
|
|
{
|
|
OutputSubModule res = GetNode<OutputSubModule>(path);
|
|
res.Init();
|
|
res.ParentModule = this;
|
|
res.Board = Board;
|
|
return res;
|
|
}
|
|
public override void Init()
|
|
{
|
|
base.Init();
|
|
Input1 = GetPort<DataInPort>("Input1");
|
|
Input1.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
|
Input2 = GetPort<DataInPort>("Input2");
|
|
Input2.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
|
Output1 = GetOutputModule("Output1");
|
|
Output1.DataOut.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
|
Output2 = GetOutputModule("Output2");
|
|
Output2.DataOut.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
|
PostInit();
|
|
}
|
|
|
|
public override void UpdateCables()
|
|
{
|
|
base.UpdateCables();
|
|
foreach (IBaseModule subModule in SubModules())
|
|
subModule.UpdateCables();
|
|
|
|
}
|
|
}
|