Shaos wrote:( на самом деле OP PON, т.к. OP NOP - это "нет операции" : )
Дмитрий, принимай патч для
https://github.com/ssloy/triador/
Code: Select all
157c157
< ttt_res[i] = ttt_arg[ttt_mem[i]+1];
---
> ttt_res[i] = ttt_arg[1-ttt_mem[i]];
Триадорная команда OP корнями уходит к 3niti alpha, где OPA NOP означало "нет операции" (т.е. если было N стало N, было O стало O, было P стало P), а инверсия - это PON (в тринити ещё была универсальная бинарная операция OPB xxx xxx xxx, которой тут нет ещё - там тоже порядок NOPNOPNOP, чтобы можно было таблицу истинности раскладывать без перемешивания)
Затрагивание NOP в этом топике:
http://www.nedopc.org/forum/viewtopic.php?f=79&t=17752&p=140860&hilit=NOP#p140860 (ноябрь 2017)
Первоисточник (3niti alpha):
http://www.nedopc.org/forum/viewtopic.php?f=79&t=58&p=70646&hilit=NOP#p70646 (декабрь 2004)
P.S. Я понимаю, это выглядит нелогично и противоестественно - старший трит отвечает за конверсию N, средний - за конверсию O, а младший - P, но для человеческого восприятия универсальных операций так проще...
P.P.S. С другой стороны в триадоре и так есть своя команда NOP - RR 0, но я всё таки предлагаю команду OP триадора считать идентичной команде OPA из 3niti alpha (и в EX будет OPB, которая также предполагалась программироваться в формате NOP, а не PON) - в этом случае OP NOP будет делать тоже самое, что и RR 0 - т.е. выполнять инструкцию "нет операции", а инвертировать R1 будет OP PON
P.P.P.S В одной из программ был OP NOP, который должен быть OP PON - gcd.txt:
Code: Select all
5c5
< OP NOP # R1 = -R1 │ │ // This program computes │
---
> OP PON # R1 = -R1 │ │ // This program computes │
9c9
< OP NOP # R1 = -R1 │ │ // stored in R2. │
---
> OP PON # R1 = -R1 │ │ // stored in R2. │