ORDToI, OLUToI, LUToI, LToI, RDToI, LUToLU, ORDToLU, RDToRD, OLUToRD, ORDToL, ParallelInput, FlipFlop, Master, Inverter, Input, Output, LeftUp, RightDown => {
grain: Grain ← FetchGrain[];
SELECT bit.type
FROM
ORDToI => grain.ORDToI ← value;
OLUToI => grain.OLUToI ← value;
LUToI => grain.LUToI ← value;
LToI => grain.LToI ← value;
RDToI => grain.RDToI ← value;
LUToLU => grain.LUToLU ← value;
ORDToLU => grain.ORDToLU ← value;
RDToRD => grain.RDToRD ← value;
OLUToRD => grain.OLUToRD ← value;
ORDToL => grain.ORDToL ← value;
Tristate => grain.Tristate ← value;
ParallelInput => grain.parallelInput ← value;
FlipFlop => grain.flipFlop ← value;
Master => grain.master ← value;
Inverter => grain.invert ← value;
Input => grain.input ← value;
Output => grain.output ← value;
LeftUp => grain.leftUp ← value;
RightDown => grain.rightDown ← value;
ENDCASE => ERROR;
DieIfMoreThanOne[grain.ORDToI, grain.OLUToI, grain.LUToI, grain.LToI, grain.RDToI];
grain.inputSelect ←
SELECT
TRUE
FROM
grain.ORDToI => ord,
grain.OLUToI => olu,
grain.LUToI => lu,
grain.LToI => l,
grain.RDToI => rd,
ENDCASE => none;
DieIfMoreThanOne[grain.ORDToL, grain.Tristate];
grain.longControl ←
SELECT
TRUE
FROM
grain.ORDToL => on,
grain.Tristate => olu,
ENDCASE => off;
DieIfMoreThanOne[grain.LUToLU, grain.ORDToLU];
grain.leftUpSelectLeftUp ← grain.LUToLU;
DieIfMoreThanOne[grain.RDToRD, grain.OLUToRD];
grain.rightDownSelectRightDown ← grain.RDToRD;
DieIfMoreThanOne[grain.flipFlop, grain.minorArray.RAMEven OR grain.minorArray.RAMOdd];
ScheduleGrain[array, grain];
ScheduleGrain[array, grain.leftUpGrain];
ScheduleGrain[array, grain.rightDownGrain];
SchedulePerpendicularGrains[array, grain];
};
RAMEven, RAMOdd => {
minor: MinorArray;
temp: ArrayPositionRec ← bit^;
bit.type ← RAMEven;
bit.orientation ← Vertical;
minor ← NARROW[RefTab.Fetch[array.state.positionToEntity, bit].val];
bit^ ← temp;
SELECT bit.type
FROM
RAMEven => minor.RAMEven ← value;
RAMOdd => minor.RAMOdd ← value;
ENDCASE => ERROR;
ScheduleMinorArray[array, minor];
FOR index:
CARDINAL
IN [0..4)
DO
DieIfMoreThanOne[minor.vertical[index].flipFlop, minor.RAMEven OR minor.RAMOdd];
DieIfMoreThanOne[minor.horizontal[index].flipFlop, minor.RAMEven OR minor.RAMOdd];
ENDLOOP;
};