Files
Enigmos/Modules/TerminalModules/SRLatchModule.cs
2024-07-03 12:20:08 +08:00

47 lines
1.4 KiB
C#

using Nocturnis.Enigmos.Modules;
using Nocturnis.Enigmos.Modules.ComputationalModules;
using Nocturnis.Enigmos.Ports;
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
using Nocturnis.GlobalManagement.Constants;
namespace Enigmos.Modules.TerminalModules;
public partial class SRLatchModule : BaseModule,
ITerminalModule,
ISourceModule,
IDuplicateOutputModule,
IOperationModule
{
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
public override IEnumerable<IBasePort> Ports => DataInPorts.Union<IBasePort>(DataOutPorts);
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 override void Init()
{
base.Init();
this.DataInInit("Input",2);
this.DataOutInit("Output", 2);
this.SetOutputType(EnigmosConstant.DataPortTypes.Bit);
this.SetInputType(EnigmosConstant.DataPortTypes.Bit);
PostInit();
}
public void Define()
{
this.Define(cache => (State, EnigmosConstant.DataPortTypes.Bit));
}
}