Como eu disse, estou lentamente construindo uma calculadora muito simples, mas funcional e ao mesmo tempo intransigente ternária, com base em um sistema de números ternários balanceado. Neste artigo, descrevo o emulador da minha calculadora , o que me ajudará na depuração do ferro. Se você estiver interessado, não hesite em escrever programas para ele, eu definitivamente os lançarei em hardware real assim que estiver pronto! É muito simples, o Triador entende a linguagem imperativa muito primitiva usual, semelhante a assembler ou brainfuck :)

- Um pesadelo terrível! Zeros e uns estão em toda parte. E parece que vi um empate.
"É apenas um sonho, Bender." Não há dois.
, ! - , , !

, -13 +13. R1-R4 R5-R13. , R13 — , ( ). , 13 [-13..+13]. , / . 27 27 . , 729 . :

, , ( ).
9 , . , EX ttt halt and catch fire. :

git clone https://github.com/ssloy/triador.git
cd triador
mkdir build
cd build
cmake ..
make
./triador ../prog/add.txt
:

, . ( ).
. . . , , ttt NNN (-13) PPP (+13):
- EX ttt
- JP ttt
- SK ttt
- OP ttt
- RR ttt
- R1 ttt
- R2 ttt
- R3 ttt
- R4 ttt
.
, . , , R1-R4.
, , R2 R3. ! /. ? !
. , R2 R3 . /, R2 R3 , R2 :
int main() {
    unsigned int R2 = 2;
    unsigned int R3 = 11;
    while (R2!=0) {
        R3++;
        R2--;
    }
    return R3;
}
, ? , , R2 :
int main() {
    int R2 = -2;
    int R3 = 13;
    while (R2!=0) {
        if (R2>0) R3++;
        if (R2<0) R3--;
        if (R2>0) R2--;
        if (R2<0) R2++;
    }
    return R3;
}
, , . . : / R1. , R3 , R1, , R1 R3!
, R2 R3 . R3:

( ) — . NNN NNN, -364 . , , , .
:
$ ./triador ../prog/add.txt | tail -n 3
 R1  R2  R3  R4  R5  R6  R7  R8  R9 R10 R11 R12 R13  C   PC
 11   0  11   5   0   6 -12  -2  11   8  11 -10 -13  0  -345
, R3 11, -2 + 13.
, while , , JP, SK, .
: , JP ttt ttt, . ? R13! JP ttt 27*R13 + ttt. , ttt , R13. NNN (-13),
R1 NNN # write -13 to R1
RR NNN # copy R1 to R13
, R13, NNN.
, . , , . R2 R3, R3 R4: R3 + R4*27, , R4 -1, 0 or 1.

$ ./triador ../prog/add-with-overflow-control.txt |tail -n 3
 R1  R2  R3  R4  R5  R6  R7  R8  R9 R10 R11 R12 R13  C   PC
-12   0 -12   1  -9   2 -12  -6   4   5   6   7 -13  0  -338
, R3 + 27 * R4 15, 2+13. - R4 C:
[...]
SK OOO # skip if C==0        
JP OPO # overflow ───────┐   
JP PNO # no overflow ────│─┐ 
R4 OOP # write 1 to R4 <─┘ │ 
SK OOP # skip if C==1      │ 
R4 OON # write -1 to R4    │ 
RR OPN # copy R2 to R1 <───┘ 
[...]
, [-13..+13] ? , word ( , ). R1,R2 R3,R4. , R4,R5.

$ ./triador ../prog/long-add.txt |tail -n 3
 R1  R2  R3  R4  R5  R6  R7  R8  R9 R10 R11 R12 R13  C   PC
  3   0   0  -6   3 -13   1   3   6   5  13  -2 -13  0  -335
, R4+27 * R5 = 75, 331-256. , ? , , . , . , . , C++ :)
: , . , . ! R7 , -. , R7 :
[...]
SK ONO # skip if R1!=0
JP OON # sub return 1
JP POP # sub return 2
, . , R2 R3. R2.
, , C++. , R2 R3 , :
int main() {
    int R2 = 12, R3 = 8;
    while (true) {
        if (R2==R3) break;
        if (R2>R3)
            R2 = R2 - R3;
        else
            R3 = R3 - R2;
    }
    return R2;
}
, ? , : R2, R3; , . m R2 R3, , , R2-R3. , R2 = a m, R3 = b m , R2-R3 = (a-b) m. - .
, ? :) : , . , !
int main() {
    int R2 = 12, R3 = -8;
    while (true) {
        if (R2<0) R2 = -R2;
        if (R3>0) R3 = -R3;
        if (R2==-R3) break;
        int R4 = R2 + R3;
        if (R4>0)
            R2 = R4;
        else
            R3 = R4;
    }
    return R2;
}
:

:
$ ./triador ../prog/gcd.txt |tail -n 3
 R1  R2  R3  R4  R5  R6  R7  R8  R9 R10 R11 R12 R13  C   PC
-13   4  -4   0   4  12  13   1  -7  -9   3   4 -13  0  -338
Observe que o R2 armazena 4, o maior fator comum é 12 e -8.
Conclusão
Programar minha calculadora ternária não é mais difícil do que qualquer calculadora como a MK-61, e o trinity não afeta os princípios da criação de programas. A segunda temporada da minha microssérie será dedicada à construção de um dispositivo aritmético-lógico. Enquanto isso, a agitação sanitária não permite que você se mova bem com o ferro; você pode tirar sua alma com um emulador. Ofereça suas opções para resolver as tarefas acima, ofereça novas tarefas interessantes, vamos nos divertir!
 Fique ligado.
Fique ligado.