получил решение на 18 чипов DG403 (с двумя свободными половинками) или 19 полных мультиплексоров что есть 9.5 сдвоенных тримуксов - задача (на вход подаются 3 младшие трита инструкции, значение знака четырёх регистров R1/R2/R3/R4 и значение флага C):
Code: Select all
/* Generated by DDTc v0.5
Solution is 18 x DG403
See www.ternary.info */
#include "ddt.h"
int ddt_skip_big2b(int f, DDT i1, DDT i2, DDT i3, DDT i4, DDT i5, DDT i6, DDT i7, DDT i8, DDT* o1)
{
DDT r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19;
int f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19;
f1 = ddt_e21(f,i1,P,O,&r1);
if(f1 < 0) return f1;
f2 = ddt_mux(f,i1,P,O,P,&r2);
if(f2 < 0) return f2;
f3 = ddt_e12(f,i1,O,P,&r3);
if(f3 < 0) return f3;
f4 = ddt_e12(f,i1,P,O,&r4);
if(f4 < 0) return f4;
f5 = ddt_mux(f,i1,O,P,O,&r5);
if(f5 < 0) return f5;
f6 = ddt_e21(f,i1,O,P,&r6);
if(f6 < 0) return f6;
f7 = ddt_mux(f,i2,r4,r5,r6,&r7);
if(f7 < 0) return f7;
f8 = ddt_mux(f,i3,r1,r2,r3,&r8);
if(f8 < 0) return f8;
f9 = ddt_mux(f,i3,r4,r5,r6,&r9);
if(f9 < 0) return f9;
f10 = ddt_mux(f,i4,r1,r2,r3,&r10);
if(f10 < 0) return f10;
f11 = ddt_mux(f,i4,r4,r5,r6,&r11);
if(f11 < 0) return f11;
f12 = ddt_mux(f,i5,r1,r2,r3,&r12);
if(f12 < 0) return f12;
f13 = ddt_mux(f,i5,r4,r5,r6,&r13);
if(f13 < 0) return f13;
f14 = ddt_mux(f,i6,r1,r2,r3,&r14);
if(f14 < 0) return f14;
f15 = ddt_mux(f,i6,r4,r5,r6,&r15);
if(f15 < 0) return f15;
f16 = ddt_mux(f,i7,r14,r12,r10,&r16);
if(f16 < 0) return f16;
f17 = ddt_mux(f,i7,r8,r7,r9,&r17);
if(f17 < 0) return f17;
f18 = ddt_mux(f,i7,r11,r13,r15,&r18);
if(f18 < 0) return f18;
f19 = ddt_mux(f,i8,r16,r17,r18,&r19);
if(f19 < 0) return f19;
if(o1) *o1 = r19;
return f1+f2+f3+f4+f5+f6+f7+f8+f9+f10+f11+f12+f13+f14+f15+f16+f17+f18+f19;
}
P.S. Схема из 2017 года имеет только 14 мультиплексоров (если не считать мультиплексоры для формирования знака каждого из регистров) - надо поглядеть можно ли новую раскладку так же упростить...