Эмулятор троичной ЭВМ

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Эмулятор троичной ЭВМ

Post by Mac Buster »

Снова возвращаюсь к теме эмулятора (имитатора) троичной ЭВМ для отработки алгоритмов и сравнения эффективности кодирования и сжатия данных по сравнению с двоичными машинами и методами :-D Собираюсь сделать следующим образом:

- разделить пространства команд, данных и стека
- использовать девять 18-разрядных регистров общего назначения
- три регистра управления (счетчик команд, указатель стека и регистр флагов)
- минимум команд
- текстовый терминал
- ввод данных из потоков

Среда реализации - Delphi.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Эмулятор троичной ЭВМ

Post by Shaos »

А я от железа иду - в моем тримуляторе будут все те блоки, которые можно повторить в железе
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Эмулятор троичной ЭВМ

Post by Mac Buster »

Shaos wrote: А я от железа иду - в моем тримуляторе будут все те блоки, которые можно повторить в железе
Постараюсь к моменту создания железа разработать основные принципы кодирования, сжатия и программирования в уравновешенном троичном коде.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Эмулятор троичной ЭВМ

Post by Mac Buster »

Система команд троичного RISC-процессора планируется а-ля RTL :lol: или "содержательных обозначений" (что почти одно и тоже) и ориентировочно будет выглядеть так:

запись слова: m[address] = Rn
чтение слова: Rn = m[address]
пересылка слова: Rn = Rn
пересылка одного произвольного разряда: Rn.n = Rn.n

сложение: Rn = Rn + Rn
вычитание (сравнение): Rn = Rn - Rn
умножение: Rn = Rn * Rn
деление (целочисленное): Rn = Rn : Rn
деление (остаток): Rn = Rn % Rn

сдвиг: << и >>
маскирование: Rn mask Rn

увеличение: Rn max
усреднение: Rn mid
уменьшение: Rn min

условный переход: if (x) goto address, где x = eq, ne, gt, ge, lt, le
возврат: ret
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Эмулятор троичной ЭВМ

Post by Mac Buster »

Пояснение к команде условного перехода: в (x) может быть несколько условий разделяемых запятой :-)

Забыл написать ещё две очень важные команды:

останов: stop
пропуск: none (исключительно для выравнивания команд по началу слова)
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Эмулятор троичной ЭВМ

Post by Mac Buster »

Вот небольшой пример того, как может выглядеть программа на ассемблере троичной ЭВМ:

Code: Select all

                r0 = 0
                r1 = m[seconds]
                r1 = r1 + 1
                r1 ? 60
                if (ne) goto seconds_1
seconds_1       r1 = r0
                v[seconds] = r1
                m[seconds] = r1

                r1 = m[minutes]
                r1 = r1 + 1
                r1 ? 60
                if (ne) goto minutes_1
                r1 = r0
minutes_1       v[minutes] = r1
                m[minutes] = r1

                r1 = m[hours]
                r1 = r1 + 1
                r1 ? 24
                if (ne) goto hours_1
                r1 = r0
hours_1         v[hours] = r1
                m[hours] = r1
                ret

seconds         db    0
minutes         db    0
hours           db    0
Здесь v[hours], v[minutes] и v[seconds] - некие виртуальные троичные порты, каждый разряд этих портов напрямую присоединен к двухцветному светодиоду.
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Re: Эмулятор троичной ЭВМ

Post by Ronin »

а че у тебя условный переход такой нетроичный - достаточно ведь одного(!) условия сравнения с переходом на три адреса.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Эмулятор троичной ЭВМ

Post by Mac Buster »

Безусловного не вижу, а вот в примечании к инструкции перехода написано, что условия можно разделять запятой ;)
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Эмулятор троичной ЭВМ

Post by Shaos »

Mac Buster wrote: Безусловного не вижу, а вот в примечании к инструкции перехода написано, что условия можно разделять запятой ;)
А действительно - как записать условный переход по трем адресам?
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Re: Эмулятор троичной ЭВМ

Post by Ronin »

ну обычное троичное условие - проще и понятней. можно конечно и твои условия (кому удобней) сделать - просто через макрос к троичному_условному.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Эмулятор троичной ЭВМ

Post by Mac Buster »

Shaos wrote: А действительно - как записать условный переход по трем адресам?
По-моему условный переход по трем адресам это уже безусловный переход, т.к. есть всего три условия: меньше, равно и больше. Вероятно мне в самом деле стоит убрать лишние условия, оставив только lt,eq и gt. Т.е. команда условного перехода может иметь такой вид:

if (lt,eq) goto address ; переход если меньше или равно

if (eq, lt) goto address ; переход если больше или равно

if (lt,gt) goto address ; переход если не равно

Или вы считаете, что потребность в трех адресах может возникнуть ?
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Эмулятор троичной ЭВМ

Post by Shaos »

Mac Buster wrote: По-моему условный переход по трем адресам это уже безусловный переход, т.к. есть всего три условия: меньше, равно и больше.
Это как раз условный - только сразу на три адреса. А просыте условия записываются через тройной условный (n,o,p):
if(a<b) goto label -> (label,next,next)
if(a>b) goto label -> (next,next,label)
if(a==b) goto label -> (next,label,next)
if(a!=b) goto label -> (label,next,label)
if(a<=b) goto label -> (label,label,next)
if(a>=b) goto label -> (next,label,label)
более сложный вариант:
if(a==b) goto label; else label' -> (label',label,label')
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Эмулятор троичной ЭВМ

Post by Mac Buster »

Shaos wrote: Это как раз условный - только сразу на три адреса. А просыте условия записываются через тройной условный (n,o,p):
Хорошо, принимаю это предложение. Правда с одним ограничением: в связи с тем, что у нас RISC-процессор, внутри скобок условного перехода может перечисляться только состояние флагов, само сравнение должно производится отдельной командой предшествующей команде перехода.
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Эмулятор троичной ЭВМ

Post by Mac Buster »

Переходим к логическим командам. Собственно, она всего одна, рабочее название мнемоники - tlog (от trinary или ternary logic). Макросами определяются узкоспециализированные варианты команды: max, mid, min, mask, shift up, shift down И т.п.

Возражения есть ?
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Эмулятор троичной ЭВМ

Post by Shaos »

Mac Buster wrote:
Shaos wrote: Это как раз условный - только сразу на три адреса. А просыте условия записываются через тройной условный (n,o,p):
Хорошо, принимаю это предложение. Правда с одним ограничением: в связи с тем, что у нас RISC-процессор, внутри скобок условного перехода может перечисляться только состояние флагов, само сравнение должно производится отдельной командой предшествующей команде перехода.
Можно делать так - имея во флаге сравнения значение N, O или P - мы вызываем специальную команду локального перехода, за которой следуют три команды безусловного перехода - переходы на адреса An, Ao, Ap соответственно. Т.е. перехода по тройному условию будет занимать 4 команды (по уже готовому условию перехода во флаге сравнения).