nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 04:38



Reply to topic  [ 62 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next
Троичные функции 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
AlexanderZh wrote:
Lavr wrote:
Rotate Up и Rotate Down - специфичные троичные инверсии нужны.
Так это не инкремент и декремент разве?

Я что-то уже несколько раз споткнулся об этот вопрос... :lol:
Это можно трактовать как "инкремент и декремент", но в пределах одного трита.

Если у нас, скажем, трёхтритное слово, то применительно к слову целиком это НЕ БУДЕТ "инкремент и декремент".
Инкремент и декремент - это А+1 и А-1 - они у нас в АЛУ так и останутся: INR и DCR.

А Rotate Up и Rotate Down - потритное циклическое отрицание, правый цикл и левый цикл.

Поэтому предлагаю ввести их мнемоники как RUP и RDN.

Значит вот что точно имеем по меньшей мере:

ADD - сумирование (оно же вычитание) без учета флага переноса.
ADС - сумирование (оно же вычитание) с учетом флага переноса.
INR - увеличение на 1.
DCR - уменьшение на 1.
RUP - Rotate Up, потритное циклическое отрицание, правый цикл
RDN - Rotate Down, потритное циклическое отрицание, левый цикл.
AND - потритное логическое ...
OR - потритное логическое ...
XOR - потритное логическое ... (он же будет выполнять побитный NOT)
;---------- вот их уже 9.

Но нам нужны сдвиги. Я их назвал:
ROR - циклический сдвиг вправо;
ROL - циклический сдвиг влево;

Почему не RAR и RAL? У меня не получилось без усложнения схемы копировать крайний
бит во флаг С.
Поэтому ROR и ROL просто крутят аккумулятор не влияя на флаг С. Уж как есть. :-?
Мы где-то долго обсуждали, кто нужнее: RAR и RAL или RRС и RLС, но пришли к выводу,
что главное, чтобы был сам сдвиг, а с крайними битами можно манипулировать программно.

Теперь с флагами: как я понял, флагов будет только два S-знак и С-перенос(заем).
Поскольку теперь у нас троичность, то вот этих операций, видимо, будет недостаточно:
STC, CLC, CMC.

Mожет быть ввиду троичности свернуть операции с флагами в две?
LFA - Load Flags to Accumulator;
SFA - Set Flags from Accumulator;

Короче - с флагами надо подумать серьёзно... :-?

Особенно с флагом S-знак - в троичности это знак старшего значащего трита.
А значащий трит может быть на любом месте в трайте, что затрудняет его выделение аппаратно. :osad:
Собственно, S-знак = 0, когда все триты трайта = 0 ... 8) (В этот момент он - флаг Z).

_________________
iLavr


17 Nov 2017 02:39
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
AlexanderZh wrote:
А в каких случаях приходится "вручную" производить манипуляции с "С"?
Ну приходится, и это порой весьма удобно, а иногда и просто необходимо.

Самый дурной пример:
У проца 6502 есть только команда сложения ADC, ADD - нет.
ADD делают так:
Code:
CLC
ADC

Я сам лично люблю неявный счетчик через С:
Code:
XRA A;
STC;
RAL; A = 0000.0001
МЕТКА:
что-то делаем, обычно ввод с порта в разряд 0 или 7
сдвигаем этот бит в С
а теперь задвигаем в А
RAL; A = 0000.001х
JNC МЕТКА; 8 бит заполнятся когда С<-1 xxxx.xxxx
не нужен внешний счетчик 8 бит


AlexanderZh wrote:
И второй вопрос: при каких операциях устанавливается "S"?

В данный момент это мы сами должны решить. Это по разному у разных процев.
AlexanderZh wrote:
Или просто по содержимому аккумулятора?

У 6502 - просто по содержимому аккумулятора.
У 8080 - в результате операции.

Т.е.
LDA 1000H; берем байт с адреса 1000Н
; у 8080 - на флаги не влияет, у 6502 - влияет
ORA A; надо сделать для 8080; это не изменит А, но выставит по нему флаги.

_________________
iLavr


17 Nov 2017 10:01
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
AlexanderZh wrote:
Lavr wrote:
Почему не RAR и RAL? У меня не получилось без усложнения схемы копировать крайний
бит во флаг С.
Как я понял, сдвигов через "С" у нас не будет.
Тот проект я делал придерживаясь принципа:"по минимуму и общедоступных микросхем".
А здесь ситуация с троичными компонентами еще сложнее - поэтому я и решил взять
свой "нищебродский" проект за "прототип"... пригодилось... :wink:

AlexanderZh wrote:
По поводу "S" - вроде схемотехнически проще брать с аккумулятора, либо использовать отдельный трит-защелку
Защелка флагов однозначно нужна.
Когда мы что-то делаем по условиям флагов - защелка их и удерживает, а копируются
флаги в защелку только в конце операции.

Но еще раз говорю: с "S" есть сложность в троичности - он самый старший значащий.
Скажем число трёхтритное: 001 - нулевой трит "1" и будет "S"="+",
если число 0i0 - первый трит даст "S"="-", т.е. флаг "S" может быть в любом трите.
В то время, как в двоичности флаг "S" - просто самый старший бит.

_________________
iLavr


17 Nov 2017 11:04
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
AlexanderZh wrote:
проще этой схемы (или похожего аналога) придумать нереально. для 3 тритов нужно всего 2 MUX-оподобных элемента.

Да понятно, что схема небольшая... но сохранять лишь старший бит - никакая дополнительная схема совсем была не нужна. 8)

_________________
iLavr


17 Nov 2017 12:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
AlexanderZh wrote:
Ну неужели, даже в х86, используются манипуляции с аккумулятором перед проверкой его знака?
А как же! :o х86 прямой наследник 8080, поддерживает совместимость "снизу вверх".
Все "плюшки" 8080 у х86 имеются в наличии:
Attachment:
clc.gif
clc.gif [ 10.41 KiB | Viewed 5114 times ]

_________________
iLavr


17 Nov 2017 12:42
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
AlexanderZh wrote:
Опять же - с командами сдвига. Если они будут реализованы, тогда инструкции скорее всего необходимы.

Команды сдвига никаких дополнительных затрат не потребуют - они получаются тут естественным путём.

Но я так понимаю - Вам хочется остановиться на имеющихся 9 операциях АЛУ:

ADD - сумирование (оно же вычитание) без учета флага переноса.
ADС - сумирование (оно же вычитание) с учетом флага переноса.
INR - увеличение на 1.
DCR - уменьшение на 1.
RUP - Rotate Up, потритное циклическое отрицание, правый цикл
RDN - Rotate Down, потритное циклическое отрицание, левый цикл.
AND - потритное логическое ...
OR - потритное логическое ...
XOR - потритное логическое ... (оно же будет выполнять потритный NOT)

и больше ничего не добавлять?


P.S. Поправьте Ваши картинки вот здесь:
http://www.nedopc.org/forum/viewtopic.php?p=140782#p140782
что-то они куда-то съехали еще вчера....

_________________
iLavr


Last edited by Lavr on 17 Nov 2017 14:26, edited 1 time in total.



17 Nov 2017 13:01
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ну тогда подождем, что скажут коллеги. А то мы вдвоём за всех всё порешаем... :wink:


P.S. Кстати, в двоичном процессоре сдвиги влево и вправо с задвигом нуля были соответственно
целочисленным умножением и делением на 2, 4, ... и т.д.
А вот что в этом плане делают сдвиги в троичности - я еще не успел проверить.
:wink:

_________________
iLavr


17 Nov 2017 13:34
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Умножение и деление на 3 вестимо :roll:

_________________
:dj: https://mastodon.social/@Shaos


17 Nov 2017 22:26
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Умножение и деление на 3 вестимо :roll:

Ну тогда это еще один голос в пользу того, что сдвиги нужны.

А по системе функций АЛУ - что думаешь?
А то вы с haqreu как-то самоустранились от её обсуждения... :-?


P.S. Вобще с троичностью всё выглядит несколько иначе - где-то
сложнее, а где-то и проще. Может, у меня сдвиги типа RLC, RRC и получатся.
Я же еще не пробовал, это в 4-битнике не получилось без усложнения схемы.

_________________
iLavr


18 Nov 2017 03:53
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Для АЛУ надо как минимум ADD,SUB,NEG, потритовые MIN/MAX (замена бинарных AND и OR), потритный INV (инверсия - замена бинарного NOT) ну и сдвиги (умножение и деление на 3), а по "логическим" - я в 3niti заводил инструкции для универсальных функций (унарные и бинарные, которыми теже потритовые MIN/MAX можно реализовать)

_________________
:dj: https://mastodon.social/@Shaos


18 Nov 2017 07:12
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Зачем sub, если есть add и neg?


18 Nov 2017 07:15
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
haqreu wrote:
Зачем sub, если есть add и neg?

Чтобы не в 2 такта делать вычитание, а в 1 :)

_________________
:dj: https://mastodon.social/@Shaos


18 Nov 2017 07:25
Profile WWW
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Lavr wrote:
...
Attachment:
Syscmd.gif

...

Вместо STC CLC CMC лучше SFI ( ну то есть как SFA ,но с константой )

Регистров для начала хватит трёх
R(-1) синоним SP(pr(ogram) )
R(0) синоним PC
R(+1) синоним F(lags)(==PSW_L(owest_3_trits) )
,аккумулятор не делать, блоки р.о.н. в памяти.

Но лучше конечно же добавить
R(-4) синоним MODE ( запр./разр.прерыв.приоритет , pult/prog/user , .. )
R(-3) синоним IDX(pr(ogram) )
R(-2) синоним SP(s(ystem_pult_mode) )
..
R(+2) синоним Acc(pr(umulator) )
R(+3) синоним B
R(+4) ; и при желании ( и возможности ) вплоть до R(+13)


18 Nov 2017 08:17
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
AlexanderZh wrote:
Shaos wrote:
NEG
Shaos wrote:
потритный INV (инверсия - замена бинарного NOT)
Разве не одно и тоже?

да, точно - для взвешенного троичного кода одно и тоже :)

_________________
:dj: https://mastodon.social/@Shaos


18 Nov 2017 08:23
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
haqreu wrote:
Зачем sub, если есть add и neg?
Чтобы не в 2 такта делать вычитание, а в 1 :)

Ну вот... я для простоты sub выкинул, а ты его снова закинул.... 8)

_________________
iLavr


18 Nov 2017 08:40
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 62 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next

Who is online

Users browsing this forum: No registered users and 14 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.