Хотя... я тоже люблю анекдот "про цИганку".

Moderator: haqreu
В этой системе сдвиги и умножение/деление - не одно и то же. Пример: 11/3 = 3, а сдвиг PPN вправо даёт PP, что есть 4.Shaos wrote:Умножение на 3, деление на 3, ну и до кучи всякие алгоритмы где надо кольцом крутить тритами...
А ты чаще форум читай и меньше справляй дни рождения неадекватных дедушек...haqreu wrote:Ух ты, годами тишина, отвернулся на минуту, а вы уже десяток сообщений накидали![]()
Не с точки зрения задержек, но с точки зрения сложности железа соглашусь, я не хочу вычитание делать, если сложения и инверсии хватит. Моя самая длинная программа на сегодня имеет несколько сотен инструкций, и честное пионерское, отсутствие вычитания (а я там вынужден вычитать в том числе) тормозит программу в лучшем случае на один процент.Lavr wrote:Тут и так всего дофига! А твой "комплексный подход" - подсыпать сюда еще 2 корпуса!
Code: Select all
SK -13: skip if R4 <= 0
SK -12: skip if R4 != 0
SK -11: skip if R4 >= 0
SK -10: skip if R3 <= 0
SK -9: skip if R3 != 0
SK -8: skip if R3 >= 0
SK -7: skip if R2 <= 0
SK -6: skip if R2 != 0
SK -5: skip if R2 >= 0
SK -4: skip if R1 <= 0
SK -3: skip if R1 != 0
SK -2: skip if R1 >= 0
SK -1: skip if C == N
SK 0: skip if C == O
SK 1: skip if C == P
SK 2: skip if R1 < 0
SK 3: skip if R1 == 0
SK 4: skip if R1 > 0
SK 5: skip if R2 < 0
SK 6: skip if R2 == 0
SK 7: skip if R2 > 0
SK 8: skip if R3 < 0
SK 9: skip if R3 == 0
SK 10: skip if R3 > 0
SK 11: skip if R4 < 0
SK 12: skip if R4 == 0
SK 13: skip if R4 > 0
11/3 = 3.666(6), что округляется до 4haqreu wrote:Ух ты, годами тишина, отвернулся на минуту, а вы уже десяток сообщений накидали
В этой системе сдвиги и умножение/деление - не одно и то же. Пример: 11/3 = 3, а сдвиг PPN вправо даёт PP, что есть 4.Shaos wrote:Умножение на 3, деление на 3, ну и до кучи всякие алгоритмы где надо кольцом крутить тритами...
Я в своё время думал сделать так или эдак - вспомнил, что существующий вариант скипов вроде бы получился проще в железе:haqreu wrote:кстати, я изменю чуть-чуть порядок команд пропуска, сделаю вот так:
...
Таким образом, инвертируя аргумент, мы получаем инверсию логической операции. Мне кажется, что это проще запомнить.
Code: Select all
$ diff ddt_skip-big_.c ddt_skip-big2_.c
7c7
< int ddt_skip-big_(int f, DDT i1, DDT i2, DDT i3, DDT i4, DDT i5, DDT i6, DDT i7, DDT i8, DDT i9, DDT* o1)
---
> int ddt_skip-big2_(int f, DDT i1, DDT i2, DDT i3, DDT i4, DDT i5, DDT i6, DDT i7, DDT i8, DDT i9, DDT* o1)
13c13
< f2 = ddt_e12(f,i2,O,r1,&r2);
---
> f2 = ddt_e21(f,i2,r1,O,&r2);
17c17
< f4 = ddt_e21(f,i2,r1,O,&r4);
---
> f4 = ddt_e12(f,i2,O,r1,&r4);
Возвращаясь к идеям EX - чего у нас там остаётся в сухом остатке, чтобы осчастливить пользователя?haqreu wrote:Мне сейчас начинает не хватать обычного сложения, так что ADD это пять.Shaos wrote:Два года уж как скоро будет - подходит такое решение то?
применения ADDC не очень вижу, а тем более SUB.
SUB это просто две операции
OP NOP
ADD
Аналогично и ADDC можно в несколько команд всего разбить.
RRC - а какой смысл в потритовых сдвигах вообще?
Какой самый частый сценарий для OPB? Для OPA, наверное, смена знака (OP NOP).
Code: Select all
virtual bool doEX(int arg)
{
return false; // not handled - halt
}
А у тебя подпрограмма может вызывать другую подпрограмму? А самою себя, выполняя рекурсию?haqreu wrote:А что такое универсальный компьютер? И что делают эти три команды? Sub и ret великолепно эмулируются на базовой системе команд...
Так вот это те самые инструкции и естьhaqreu wrote:Я думаю, что основная проблема триадора - не бедный набор инструкций (даже без add я прекрасно могу жить), а очень маленькая память. Поэтому я бы думал скорее про инструкции, которые бы позволили расширить память.
т.е. я предполагал, что ПЗУ будет двоичным с тупым отображением троичного адреса в двоичный диапазон адресов 2К, а вот ОЗУ может быть троичным и к нему можно будет получать доступ программно, записывая и читая данные, а также загружая туда подпрограммы извне, а потом можно пойти ещё дальше и сделать банки памяти, листая это самое ОЗУ (да и двоичное ПЗУ тоже можно листать). Вот тогда у нас и будет универсальный компьютер, который будет способен подгружать с внешних носителей и исполнять программы, написанные пользователем на этом же самом компьютере...Shaos wrote:Далее - для калькулятора нужна память для временного хранения чисел (т.к. большинство регистров задействованы под отображение). Идея следующая - наше 2К ПЗУ программ покрывает области Oxxxxx и Pxxxxx, а в область Nxxxxx мы втыкаем статическое ОЗУ! В EX вставляем пару команд - записать в память и прочитать из памяти (адрес будет браться из регистров, скажем из R3 и R4). Можно будет записывать как триады, так и слова - чтобы потом на ОЗУ можно было передать управление и запустить введённую юзером программу!
если ячеек "сбоку" меньше 27, то R4 можно игнорировать, адресуя это доп.память только через R3...Shaos wrote: NNONO - EX -3 -> WM (write R1 to memory [27*R4+R3])
NNONP - EX -2 -> RM (read triad from memory [27*R4+R3] to R1)