nedoPC.org

Community of electronics hobbyists established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 23 Apr 2021 05:32



Reply to topic  [ 408 posts ]  Go to page Previous  1 ... 22, 23, 24, 25, 26, 27, 28  Next
Давайте думать над железкой (TRIADOR) 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Но с шуткой про математика ты так или иначе тут явно перегнул...

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

_________________
iLavr


03 May 2020 00:55
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19629
Location: Silicon Valley
Reply with quote
Ну почему перегнул? Тут тоже самое - чтобы получить вычитание предлагается сначала выполнить инструкцию "инверсия", что сведёт изначально поставленную задачу "реализовать вычитание" к уже известной задаче "реализовать сложение" :mrgreen:
А на самом деле надо подходить к решению комплексно и делать ОДНУ инструкцию, которая выполняет только одну операцию - вычитание...

_________________
:eugeek: https://twitter.com/Shaos1973


03 May 2020 01:01
Profile WWW
Maniac

Joined: 10 Mar 2017 06:30
Posts: 322
Reply with quote
Ух ты, годами тишина, отвернулся на минуту, а вы уже десяток сообщений накидали :mrgreen:
Shaos wrote:
Умножение на 3, деление на 3, ну и до кучи всякие алгоритмы где надо кольцом крутить тритами...


В этой системе сдвиги и умножение/деление - не одно и то же. Пример: 11/3 = 3, а сдвиг PPN вправо даёт PP, что есть 4.


03 May 2020 01:08
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Это какое-то "масло маслянное" со словом "комплексное"...

Ну что за комплексный подход? Вот смотри - это сумматор в пределах ОДНОГО трита:
Image
Тут и так всего дофига! А твой "комплексный подход" - подсыпать сюда еще 2 корпуса! :o

_________________
iLavr


03 May 2020 01:10
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
haqreu wrote:
Ух ты, годами тишина, отвернулся на минуту, а вы уже десяток сообщений накидали :mrgreen:
А ты чаще форум читай и меньше справляй дни рождения неадекватных дедушек... :ebiggrin:

_________________
iLavr


03 May 2020 01:11
Profile
Maniac

Joined: 10 Mar 2017 06:30
Posts: 322
Reply with quote
Lavr wrote:
Тут и так всего дофига! А твой "комплексный подход" - подсыпать сюда еще 2 корпуса! :o


Не с точки зрения задержек, но с точки зрения сложности железа соглашусь, я не хочу вычитание делать, если сложения и инверсии хватит. Моя самая длинная программа на сегодня имеет несколько сотен инструкций, и честное пионерское, отсутствие вычитания (а я там вынужден вычитать в том числе) тормозит программу в лучшем случае на один процент.

Кроме того, использовать одну из 27 всех возможных команд расширения - это ж дорого!


03 May 2020 01:14
Profile
Maniac

Joined: 10 Mar 2017 06:30
Posts: 322
Reply with quote
кстати, я изменю чуть-чуть порядок команд пропуска, сделаю вот так:

Code:
      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


Таким образом, инвертируя аргумент, мы получаем инверсию логической операции. Мне кажется, что это проще запомнить.


03 May 2020 08:36
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19629
Location: Silicon Valley
Reply with quote
haqreu wrote:
Ух ты, годами тишина, отвернулся на минуту, а вы уже десяток сообщений накидали :mrgreen:
Shaos wrote:
Умножение на 3, деление на 3, ну и до кучи всякие алгоритмы где надо кольцом крутить тритами...


В этой системе сдвиги и умножение/деление - не одно и то же. Пример: 11/3 = 3, а сдвиг PPN вправо даёт PP, что есть 4.

11/3 = 3.666(6), что округляется до 4 :mrgreen:

haqreu wrote:
кстати, я изменю чуть-чуть порядок команд пропуска, сделаю вот так:
...
Таким образом, инвертируя аргумент, мы получаем инверсию логической операции. Мне кажется, что это проще запомнить.

Я в своё время думал сделать так или эдак - вспомнил, что существующий вариант скипов вроде бы получился проще в железе:
http://www.nedopc.org/forum/viewtopic.php?p=141103#p141103
UPDATE: попробовал большой вариант DDT-задания для skip-блока (старый skip-big.ddt и новый skip-big2.ddt), где отсутствуют только мультиплексоры вычисления знака регистра, с которыми всё понятно (+8 троичных мультиплексоров), а всё остальное включено (как и в реальной схеме полный декод команды отсутствует - приходит только enable-ne и 3 младших трита кода операции):

 skip-big.ddt
Code:
#enable-ne|op3|sign(r4)|sign(r3)|sign(r2)|sign(r1)|flag-c| -> skip
PNNNNXXXX=O
PNNNOXXXX=P
PNNNPXXXX=P
PNNONXXXX=P
PNNOOXXXX=O
PNNOPXXXX=P
PNNPNXXXX=P
PNNPOXXXX=P
PNNPPXXXX=O
PNONXNXXX=O
PNONXOXXX=P
PNONXPXXX=P
PNOOXNXXX=P
PNOOXOXXX=O
PNOOXPXXX=P
PNOPXNXXX=P
PNOPXOXXX=P
PNOPXPXXX=O
PNPNXXNXX=O
PNPNXXOXX=P
PNPNXXPXX=P
PNPOXXNXX=P
PNPOXXOXX=O
PNPOXXPXX=P
PNPPXXNXX=P
PNPPXXOXX=P
PNPPXXPXX=O
PONNXXXNX=O
PONNXXXOX=P
PONNXXXPX=P
PONOXXXNX=P
PONOXXXOX=O
PONOXXXPX=P
PONPXXXNX=P
PONPXXXOX=P
PONPXXXPX=O
POONXXXXN=P
POONXXXXO=O
POONXXXXP=O
POOOXXXXN=O
POOOXXXXO=P
POOOXXXXP=O
POOPXXXXN=O
POOPXXXXO=O
POOPXXXXP=P
POPNXXXNX=P
POPNXXXOX=O
POPNXXXPX=O
POPOXXXNX=O
POPOXXXOX=P
POPOXXXPX=O
POPPXXXNX=O
POPPXXXOX=O
POPPXXXPX=P
PPNNXXNXX=P
PPNNXXOXX=O
PPNNXXPXX=O
PPNOXXNXX=O
PPNOXXOXX=P
PPNOXXPXX=O
PPNPXXNXX=O
PPNPXXOXX=O
PPNPXXPXX=P
PPONXNXXX=P
PPONXOXXX=O
PPONXPXXX=O
PPOOXNXXX=O
PPOOXOXXX=P
PPOOXPXXX=O
PPOPXNXXX=O
PPOPXOXXX=O
PPOPXPXXX=P
PPPNNXXXX=P
PPPNOXXXX=O
PPPNPXXXX=O
PPPONXXXX=O
PPPOOXXXX=P
PPPOPXXXX=O
PPPPNXXXX=O
PPPPOXXXX=O
PPPPPXXXX=P
# no skip for all other opcodes (when enable-ne!=P)
OXXXXXXXX=O
NXXXXXXXX=O

 skip-big2.ddt
Code:
#enable-ne|op3|sign(r4)|sign(r3)|sign(r2)|sign(r1)|flag-c| -> skip
PNNNNXXXX=P
PNNNOXXXX=P
PNNNPXXXX=O
PNNONXXXX=P
PNNOOXXXX=O
PNNOPXXXX=P
PNNPNXXXX=O
PNNPOXXXX=P
PNNPPXXXX=P
PNONXNXXX=P
PNONXOXXX=P
PNONXPXXX=O
PNOOXNXXX=P
PNOOXOXXX=O
PNOOXPXXX=P
PNOPXNXXX=O
PNOPXOXXX=P
PNOPXPXXX=P
PNPNXXNXX=P
PNPNXXOXX=P
PNPNXXPXX=O
PNPOXXNXX=P
PNPOXXOXX=O
PNPOXXPXX=P
PNPPXXNXX=O
PNPPXXOXX=P
PNPPXXPXX=P
PONNXXXNX=P
PONNXXXOX=P
PONNXXXPX=O
PONOXXXNX=P
PONOXXXOX=O
PONOXXXPX=P
PONPXXXNX=O
PONPXXXOX=P
PONPXXXPX=P
POONXXXXN=P
POONXXXXO=O
POONXXXXP=O
POOOXXXXN=O
POOOXXXXO=P
POOOXXXXP=O
POOPXXXXN=O
POOPXXXXO=O
POOPXXXXP=P
POPNXXXNX=P
POPNXXXOX=O
POPNXXXPX=O
POPOXXXNX=O
POPOXXXOX=P
POPOXXXPX=O
POPPXXXNX=O
POPPXXXOX=O
POPPXXXPX=P
PPNNXXNXX=P
PPNNXXOXX=O
PPNNXXPXX=O
PPNOXXNXX=O
PPNOXXOXX=P
PPNOXXPXX=O
PPNPXXNXX=O
PPNPXXOXX=O
PPNPXXPXX=P
PPONXNXXX=P
PPONXOXXX=O
PPONXPXXX=O
PPOOXNXXX=O
PPOOXOXXX=P
PPOOXPXXX=O
PPOPXNXXX=O
PPOPXOXXX=O
PPOPXPXXX=P
PPPNNXXXX=P
PPPNOXXXX=O
PPPNPXXXX=O
PPPONXXXX=O
PPPOOXXXX=P
PPPOPXXXX=O
PPPPNXXXX=O
PPPPOXXXX=O
PPPPPXXXX=P
# no skip for all other opcodes (when enable-ne!=P)
OXXXXXXXX=O
NXXXXXXXX=O

Расширенные варианты получили похожие результаты - 20 functions (18 x DG403):
Code:
$ 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);

18 корпусов (это без вычисления знака регистров) - чуть больше, чем вышло у меня 3 года назад - возможно оно быстрее из-за меньшего количества слоёв (меньше задержка? надо нарисовать и поглядеть на схему), но тем не менее - результаты у старого и нового варианта идентичны...


P.S. Запомнить на самом деле проще так, как было т.к. там во всех тройках сначала идёт меньше, потом равно, потом больше и в верхней части есть not - вобщем смотри сам, только тебе картинки придётся перерисовывать и описание менять во многих местах интернета :rotate:

_________________
:eugeek: https://twitter.com/Shaos1973


03 May 2020 09:21
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19629
Location: Silicon Valley
Reply with quote
haqreu wrote:
Shaos wrote:
Два года уж как скоро будет - подходит такое решение то? :eugeek:

Мне сейчас начинает не хватать обычного сложения, так что ADD это пять.
применения ADDC не очень вижу, а тем более SUB.
SUB это просто две операции
OP NOP
ADD
Аналогично и ADDC можно в несколько команд всего разбить.

RRC - а какой смысл в потритовых сдвигах вообще?
Какой самый частый сценарий для OPB? Для OPA, наверное, смена знака (OP NOP).

Возвращаясь к идеям EX - чего у нас там остаётся в сухом остатке, чтобы осчастливить пользователя?

NNNNN - EX -13 -> ADD (hardwired C,R1=R1+R2) <<<<< единственный железобетонный ADD
NNNNO - EX -12 -> ADD-12 (programmable by PEX)
NNNNP - EX -11 -> ADD-11 (programmable by PEX)
NNNON - EX -10 -> ADD-10 (programmable by PEX)
NNNOO - EX -9 -> ADD-9 (programmable by PEX)
NNNOP - EX -8 -> ADD-8 (programmable by PEX)
NNNPN - EX -7 -> ADD-7 (programmable by PEX)
NNNPO - EX -6 -> ADD-6 (programmable by PEX)
NNNPP - EX -5 -> ADD-5 (programmable by PEX)
NNONN - EX -4 -> RMH (read higher triad from memory [27*R4+R3] to R1)
NNONO - EX -3 -> WMM (write R2,R1 to memory [27*R4+R3])
NNONP - EX -2 -> RML (read lower triad from memory [27*R4+R3] to R1)
NNOON - EX -1 -> JPI (store current PC+1 to R4,R3 and jump to R13,R2) <<<<< нужно для реализации CALL и RET
NNOOO - EX 0 -> PEX (program OPB instances below and ADD instances above)
NNOOP - EX +1 -> OPB №1 (R1=R1 o R2) - programmable by PEX or hardwired MSK?
NNOPN - EX +2 -> OPB №2 (R1=R1 o R2) - programmable by PEX or hardwired MAX?
NNOPO - EX +3 -> OPB №3 (R1=R1 o R2) - programmable by PEX or hardwired MIN?
NNOPP - EX +4 -> OPB №4 (R1=R1 o R2) - programmable by PEX or hardwired something?
NNPNN - EX +5 -> OPB №5 (R1=R1 o R2 where o is programmable by PEX or manually)
NNPNO - EX +6 -> OPB №6 (R1=R1 o R2 where o is programmable by PEX or manually)
NNPNP - EX +7 -> OPB №7 (R1=R1 o R2 where o is programmable by PEX or manually)
NNPON - EX +8 -> OPB №8 (R1=R1 o R2 where o is programmable by PEX or manually)
NNPOO - EX +9 -> OPB №9 (R1=R1 o R2 where o is programmable by PEX or manually)
NNPOP - EX +10 -> OPB №10 (R1=R1 o R2 where o is programmable by PEX or manually)
NNPPN - EX +11 -> OPB №11 (R1=R1 o R2 where o is programmable by PEX or manually)
NNPPO - EX +12 -> OPB №12 (R1=R1 o R2 where o is programmable by PEX or manually)
NNPPP - EX +13 -> HLT ( halt and catch fire ; )

Возможно из бинарных операций надо сразу же предоставить пользователю MIN, MAX, а также MSK (ибо маскирование в сбалансированной троичной системе не равна MIN как в двоичной системе):
MAX=NOPOOPPPP
MIN=NNNNOONOP
MSK=PONOOONOP (такое маскирование включает негативное маскирование, когда при N сигнал инвертируется, при O - обнуляется, а при P - повторяется - в таком случае таблица истинности полностью симметрична)
Чего там ещё у нас есть из полезных бинарных операций с симметричной таблицей истинности? Троичный XOR?
Хм, по Дугласу Джонсу (см. http://homepage.divms.uiowa.edu/~jones/ternary/logic.shtml) получается, что троичный XOR это инверсия моего маскирования MSK :)
XOR=NOPOOOPON
в таком случае оно вряд ли нужно как отдельная инструкция т.к. мы можем просто сделать MSK и затем инвертировать потритно OP PON,
а вот потритовое сложение SUM от Дугласа Джонса может пригодиться (и оно не равно XOR, как в двоичной системе):
SUM=PNONOPOPN
Ещё из интересного у него есть Consensus и Comparison, но это наверное слишком специфично и достаточно будет иметь это в программируемых инструкциях, не железобетонных
В итоге имеем 8 программируемых инструкций в положительной части (с кодами от EX +5 до EX +12 которые реализуют OPB) и 8 программируемых инструкций в отрицательной части (с кодам от EX -5 до EX -12 которые реализуют разнообразные комбинации сложений, вычитаний и сдвигов) - опять же упрощённые реализации триадора могут программируемость и не предоставлять либо предоставлять частично т.к. программируемость требует дополнительного ОЗУ, если программировать программно (с помощью PEX), либо дополнительного ПЗУ, если программировать вручную т.е. переключателями (это кстати вариант для самодельного триадора минимизирующий количества дополнительного железа).
А вот если сделать Comparison как в сях - если трит из первого аргумента равен триту из второго, то результат O, если меньше, то N и если больше, то P:
CMP=OPPNOPNNO (таблица истинности тут НЕ симметричная, т.е. последовательность аргументов имеет значение!)
тогда сравнивая таким образом две триады и они равны, то мы получим на выходе OOO (0), если получилось отрицательное число (самый старший ненулевой трит это N), то первая триада меньше второй, если положительное (самый старший ненулевой трит это P), то больше - выходит мы сравнили две триады БЕЗ вычитания :mrgreen:

P.S. Если внешняя память триадная (3 трита на ячейку), а не трайтовая (6 тритов на ячейку, как указано выше), то 3 инструкции обращения к памяти превращаются в 2:
NNONO - EX -3 -> WM (write R1 to memory [27*R4+R3])
NNONP - EX -2 -> RM (read triad from memory [27*R4+R3] to R1)
что есть суть тоже самое - мы просто игнорируем старшую триаду, которой физически может не быть в железе...

P.P.S. А вот интересно насколько оказалась бы полезной в триадоре команада Permutation, которая перемешивала бы триты в R1 любом порядке? Имея три трита в результате нам надо задать источник каждого трита, которые могут быть младшим тритом, средним тритом или старшим тритом регистра R1 - одного трита достаточно, чтобы это указать - получается одной триадой мы можем задать такой Permutation для целевой триады - тогда имеет смысл программировать это на лету допустим содержимым регистра R2 и команду такую назвать PRM, поставив её скажем на место EX -5. Такая команда легко покроет все возможные вращения в кольце, не задевающие флаг C (например записав в R2 триаду OPN мы сообщаем PRM, что хотели бы сдвинуть R1 на 1 трит влево по кольцу).

P.P.P.S. Если добавить источников - в дополнение к 3 тритам R1 добавим один трит флаг C плюс три константы N,O,P, то получаем 7 вариантов, программируемых двумя тритами (и ещё запас на 2 трита-источника остаётся - скажем на будущие теневые флаги?) на каждый трит результата - если выходной флаг C также будет результатом (для реализации вращений через флаг C), то нам надо 4*2=8 тритов, чтобы такую сложную пермутацию запрограммировать. Для круглоты ещё один трит можно задействовать скажем для указания того, что мы используем один из двух теневых флагов вместо основного флага C - вот это ваще будет гибкость неописуемая...

_________________
:eugeek: https://twitter.com/Shaos1973


03 May 2020 17:36
Profile WWW
Maniac

Joined: 10 Mar 2017 06:30
Posts: 322
Reply with quote
По поводу команд расширения - прежде чем их добавлять, я бы хотел понять про каждую, что она даёт. ADD совершенно чётко даёт экономию в один сегмент памяти програм (или даже больше, если им пользоваться часто) + прирост производительности.

Для чего нужны остальные команды? Я даже для OPA пока не вижу других применений, кроме как инверсии числа...

halt and catch fire, конечно же нужна! :mrgreen:


04 May 2020 03:43
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19629
Location: Silicon Valley
Reply with quote
Для того чтобы превратить триадора в универсальный компьютер нужна память данных - команды RML,RMH и WMM
Чтобы делать полноценные подпрограммы - нужны CALL и RET, которые реализуемы через JPI
Остальное - особенно программируемое - надо смотреть на конкретные алгоритмы :idea:
Кстати добавь виртуальный метод в класс Triador, чтобы внешние обработчики EX можно было цеплять - вот и попробуем :rotate:
Типа
Code:
virtual bool doEX(int arg)
{
  return false; // not handled - halt
}

P.S. Я могу сам добавить и тебе заслать пул-реквест :mrgreen:

P.P.S. Да и OP надо бы к общему знаменателю привести http://www.nedopc.org/forum/viewtopic.php?p=154508#p154508

_________________
:eugeek: https://twitter.com/Shaos1973


04 May 2020 10:28
Profile WWW
Maniac

Joined: 10 Mar 2017 06:30
Posts: 322
Reply with quote
А что такое универсальный компьютер? И что делают эти три команды? Sub и ret великолепно эмулируются на базовой системе команд...

Я думаю, что основная проблема триадора - не бедный набор инструкций (даже без add я прекрасно могу жить), а очень маленькая память. Поэтому я бы думал скорее про инструкции, которые бы позволили расширить память.


04 May 2020 11:35
Profile
Maniac

Joined: 10 Mar 2017 06:30
Posts: 322
Reply with quote
Кстати, просто шутки ради. Триадор в его базовой версии позволяет запрограммировать pong (нужно пять или шесть сегментов памяти команд), прикладываю результат эмуляции. Нижняя полоска - это очки (трёхтритное число). Не вижу ни одной проблемы воплотить в железе, раз уж в эмуляции работает.

Память использована полностью вся:
r13 - выбранный сегмент
r11,r12 - x и y координаты мячика
r9, r10 - скорость мячика
r7, r8 - положение двух ракеток
r6 - очки
r5 - эмуляция адреса возврата из сабрутины add
r1-r4 необходимы для текущих вычислений, в основном для сложения (но не только).

Attachment:
File comment: triador pong
photo5872790512656823184.jpg
photo5872790512656823184.jpg [ 83.97 KiB | Viewed 2223 times ]


04 May 2020 11:46
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19629
Location: Silicon Valley
Reply with quote
haqreu wrote:
А что такое универсальный компьютер? И что делают эти три команды? Sub и ret великолепно эмулируются на базовой системе команд...
А у тебя подпрограмма может вызывать другую подпрограмму? А самою себя, выполняя рекурсию?
haqreu wrote:
Я думаю, что основная проблема триадора - не бедный набор инструкций (даже без add я прекрасно могу жить), а очень маленькая память. Поэтому я бы думал скорее про инструкции, которые бы позволили расширить память.
Так вот это те самые инструкции и есть :)

NNONN - EX -4 -> RMH (read higher triad from memory [27*R4+R3] to R1)
NNONO - EX -3 -> WMM (write R2,R1 to memory [27*R4+R3])
NNONP - EX -2 -> RML (read lower triad from memory [27*R4+R3] to R1)

Про то как расширять память я писал ещё в ноябре 2017 года:
Shaos wrote:
Далее - для калькулятора нужна память для временного хранения чисел (т.к. большинство регистров задействованы под отображение). Идея следующая - наше 2К ПЗУ программ покрывает области Oxxxxx и Pxxxxx, а в область Nxxxxx мы втыкаем статическое ОЗУ! В EX вставляем пару команд - записать в память и прочитать из памяти (адрес будет браться из регистров, скажем из R3 и R4). Можно будет записывать как триады, так и слова - чтобы потом на ОЗУ можно было передать управление и запустить введённую юзером программу!
т.е. я предполагал, что ПЗУ будет двоичным с тупым отображением троичного адреса в двоичный диапазон адресов 2К, а вот ОЗУ может быть троичным и к нему можно будет получать доступ программно, записывая и читая данные, а также загружая туда подпрограммы извне, а потом можно пойти ещё дальше и сделать банки памяти, листая это самое ОЗУ (да и двоичное ПЗУ тоже можно листать). Вот тогда у нас и будет универсальный компьютер, который будет способен подгружать с внешних носителей и исполнять программы, написанные пользователем на этом же самом компьютере...

P.S. По идее доп.память может и не быть связана с памятью программ, которая может оставаться в ПЗУ - например можно добавить несколько ячеек статической памяти на тримуксах "сбоку" и обращаться к ним через 2 из вышеописанных трёх команд, используя только триады:
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)
если ячеек "сбоку" меньше 27, то R4 можно игнорировать, адресуя это доп.память только через R3...

_________________
:eugeek: https://twitter.com/Shaos1973


04 May 2020 17:45
Profile WWW
Maniac

Joined: 10 Mar 2017 06:30
Posts: 322
Reply with quote
Ой. у меня нынче голова вообще не варит. Давай вернёмся к вопросу расширения после того, как я закончу базовый вариант. Расширение памяти согласен, нужно. Не очень уверен только в необходимости писать/читать аж целое слово. JPI... оно ж сразу два регистра отжирает, причём важных. Ну да не суть, особенно если будет расширена память, нехай подпрограммы сами себе память расчищают. Хардверное сложение да, обязательно, причём по совершенно тупой причине: софтверное сложение требует большего количества тримуксов, нежели хардверное, а мне лень паять :)

Можешь привести сценарий использования OPB?


Итого, пока что я полностью согласен с необходимостью
WM (write R1 to memory [27*R4+R3])
RM (read triad from memory [27*R4+R3] to R1)
ADD (C,R1=R1+R2)
JPI (store current PC+1 to R4,R3 and jump to R13,R2)
HCF :rotate:


05 May 2020 00:28
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 408 posts ]  Go to page Previous  1 ... 22, 23, 24, 25, 26, 27, 28  Next

Who is online

Users browsing this forum: No registered users and 4 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.