Files
Enigmos/Modules/TerminalModules/SRLatchModule.cs
2024-07-11 11:21:29 +01:00

48 lines
1.3 KiB
C#

using Nocturnis.Enigmos.Modules;
using Nocturnis.Enigmos.Modules.ComputationalModules;
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
using Nocturnis.GlobalManagement.Constants;
namespace Enigmos.Modules.TerminalModules;
public abstract partial class SRLatchModule : BaseModule,
ITerminalModule,
ISourceModule,
IDuplicateOutputModule,
IOperationModule
{
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
private bool State { get; set; }
public void Drain()
{
bool set = DataInPorts[0].GetData.Get!.Bit;
bool reset = DataInPorts[1].GetData.Get!.Bit;
if (set && reset)
State = false;
else if (set)
State = true;
else if (reset)
State = false;
}
public bool Finished { get; set; }
public override void Init()
{
base.Init();
this.DataInInit("Input",2);
this.DataOutInit("Output", 2);
this.SetOutputType(DataTypeConstant.BaseDataTypes.Bit);
this.SetInputType(DataTypeConstant.BaseDataTypes.Bit);
PostInit();
}
public void Define()
{
this.Define(cache => (State, DataTypeConstant.BaseDataTypes.Bit));
}
}