47 lines
1.4 KiB
C#
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));
|
|
}
|
|
}
|