Троичная ЭВМ "Сетунь" (1958)

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

Moderator: haqreu

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Троичная ЭВМ "Сетунь" (1958)

Post by Lavr »

askfind wrote:В 1959? Это опечатка!
А вот, кстати, с датой ситуация тоже очень и очень неоднозначная... :-?

К примеру, смотрим сайт: http://www.icfcst.kiev.ua/MUSEUM/PHOTOS/Setun-1_r.html
Сетунь1958.png
Казалось бы - дата правильная, информация верная...
А на самом деле - полное введение в заблуждение посетителей сайта. То, что представлено на снимке -
это действительно промышленный образец ЭВМ "Сетунь", вот только выпущен он в 1961 году!

То, что в 1958 году собрали Брусенцов и его коллеги, скорее всего представлено именно на этом фото:

Image

Но вот я читаю интервью с директором НИВЦ МГУ Владимиром Валентиновичем Воеводиным.
https://scientificrussia.ru/articles/ni ... omonosov-2
В.В.Воеводин wrote:В стенах вычислительного центра была спроектирована уникальная система — компьютер «Сетунь».
И к интервью приложена следующая картинка:
Сетунь.png
Ну и, наконец, я искал картинку ЭВМ "Сетунь" покрупнее, скачал её вот отсюда:
http://letopis.msu.ru/letopis/1962
Setun 1959.jpg
На сайте МГУ картинка обозначена как Setun 1959, как ни странно...

С другой стороны, если послушать представителей завода-изготовителя ЭВМ "Сетунь",
то они считают, что вот это - "Макет Сетуни":

Image

А вот на следующем фото - Серийный образец ЭВМ Сетунь, изготовленный по КД СКБ ММ:

Image

И при этом они очень удивляются некоторым датам:
9 декабря 2008 года в МГУ имени Ломоносова была проведена юбилейная конференция "50 лет со времени создания малой цифровой ЭВМ СЕТУНЬ". Мероприятие получило большую прессу, было сказано много хорошего о Главном конструкторе Н.П. Брусенцове, о коллективе разработчиков.
...
Не очень понятно, почему 50 лет машине отмечали в 2008 году. Испытания макета в МГУ были в апреле 1960 г., опытный образец серийной машины прошёл испытания в ноябре 1962 г. Видимо, у учёных принято отмечать (как у японцев) день зачатия, а не день рождения.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

Lavr wrote:
askfind wrote:В 1959? Это опечатка!
А вот, кстати, с датой ситуация тоже очень и очень неоднозначная... :-?
Отличный обзор исследования даты рождения прототипа компьютера "Сетунь"!
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

МЫСЛЬ о ТРОИЧНОЙ ЛОГИКЕ



Книги по троичной логике:

Брусенцов Н.П. - Блуждание в трёх соснах - 2004 - https://yadi.sk/i/0oib-ici_xTXsg
Брусенцов Н.П. - Искусство достоверного рассуждения - 1998 - https://yadi.sk/i/rri9rDgU2fhjmw
Брусенцов Н.П. - Начала информатики - 1994 - https://yadi.sk/i/lffLOsHJ07pZUA

Учебник классической логике:

Виноградов С.Н., Кузьмин А.Ф. - Логика. Учебник для средней школы - 1954 - https://yadi.sk/i/SKTE22Woqid0_w
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

Публикации по троичной информатике и троичным компьютерам

Сайт о троичности
http://trinary.su/

Восстановил ссылки на документы.

"...
1. Н.П.Брусенцов, О вычитании и округлении чисел в позиционных системах счисления с положительным основанием
2. Н.П.Брусенцов, Об использовании троичного кода и трёхзначной логики в цифровых машинах
3. Н.П.Брусенцов, Математическая теория силлогистики
4. Н.П.Брусенцов, Пороговая реализация трёхзначной логики электромагнитными средствами
5. Н.П.Брусенцов, Алгоритмы деления для троичного кода с цифрами 0, 1, -1
6. Н.П.Брусенцов, Е.А.Жоголев, Структура и функционирование малой вычислительной машины
7. С.П.Маслов, Вопросы построения запоминающих устройств для троично-кодированной информации
8. С.П.Маслов, Комбинированное троичное запоминающее устройство
9. С.П.Маслов, Некоторые вопросы магнитной записи троичного кода
10. С.П.Маслов, Троичное запоминающее устройство на магнитном барабане
11. X.Рамиль Альварес, Программная интерпретация структуры и системы команд малой ЭВМ
12. X.Рамиль Альварес, Простые алгоритмы переводов р -> p-1 и р -> р + 1
13. Ю.В.Ушаков , Долговременное запоминающее устройства для машины «Сетунь»
..."
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

Коды операций и ассемблер для "Сетунь-195"

Пример из онлайн "СетуньВС" - http://www.trinary.su/projects/setunws/
перенёс в эмулятор на языке Си - https://github.com/askfind/Emulator-Setun-1958

Запускаю TEST 1:

Code: Select all

[ Start Setun-1958 ] 

reg C = 00001
A*=[-+++-], ( -43),    k6..8[-+-] : Норм.(S)=>(A*); (N)=>(S)
A*=[-0+-+], ( -74),    k6..8[+0-] : (S)-(A*)=>(S)
A*=[+0+-+], (  88),    k6..8[0+-] : A*=>(C) при w=0
A*=[0-++-], ( -16),    k6..8[000] : A*=>(C)
A*=[-+0--], ( -58),    k6..8[+0-] : (S)-(A*)=>(S)
A*=[-+0+-], ( -52),    k6..8[+0-] : (S)-(A*)=>(S)
A*=[-+0--], ( -58),    k6..8[+-+] : (A*)=>(R)
A*=[-+-+-], ( -61),    k6..8[+++] : (S)+(A*)(R)=>(S)
A*=[-+-+-], ( -61),    k6..8 =[]   : STOP! NO OPERATION

 - ret_exec = 5
 - opers    = 10000

[ Stop Setun-1958 ]
Нашёл интересную ветку автора ProMiNick
terna=deci: tritvalue action mnemonic ternary mnemonic decimal
-----=-121: 00+-+0-00 (A*)=>(F) mov F,[00+-+] ;mov F,[7]
----0=-120: 00+0+00-0 (F)=>(A*) mov [00+0+],F ;mov [10],F
----+=-119: +000+-000 Вводв Фà*. Вывод из Фà*
---0-=-118: +0+---0++ (Ôà*)+F=>(Ìä*)
---00=-117: +0+---0-+ (Ìä*)+F=>(Ôà*)
---0+=-116: 000+00-00 (A*)=>(F) mov F,[000+0] ;mov F,[3]
---+-=-115: 0+--0+000 (A*)=>(S) mov S,[0+--0] ;mov S,[15]
---+0=-114: 00++--++0 (S)=>(A*) mov [00++-],S ;mov [11],S
---++=-113: ----0+00+ (A*)=>(S) mov S,[----0 + F] ;mov S,[F-120]
--0--=-112: 00+-0-+00 (S) íà (A*)=>(S) shift S,[00+-0] ;shift S,[6]
--0-0=-111: 00++-+0+0 (S)+(A*)=>(S) add S,[00++-] ;add S,[11]
--0-+=-110: 00++--++0 (S)=>(A*) mov [00++-],S ;mov [11],S
--00-=-109: 00+-+0--0 (F)+(A*)=>(F) add F,[00+-+] ;add F,[7]
--000=-108: 0-0000+-0 A*=>(C) ïðè w=- jn 0-000 ;jneg -27
--00+=-107: 0-+++0++0 A*=>(C) ïðè w=+ jp 0-+++ ;jpos -14
--0+-=-106: 000++0-00 (A*)=>(F) mov F,[000+0] ;mov F,[3]
--0+0=-105: 0-0000000 A*=>(C) call 0-000 ; mov C,[0-000] ;call -27
--0++=-104: 00+0+0-00 (A*)=>(F) mov F,[00+0+] ;mov F,[10]
--+--=-103: 0+-0-+0-+ (S)-(A*)+F=>(S) sub S,[0+-0- + F] ;sub S,[F+17]
--+-0=-102: 00-+00+00 A*=>(C) ïðè w=0 jz 00-+0 ;jzer -6
--+-+=-101: 00000+--0 (A*)=>(R) STOP ;make STOP
Идея перевода кодов операторов "Сетунь-1958" мне понравилась.

Есть особенность описание кодов операций с использованием мнемоники. Операции выполняются с различными длинами слов из трит. Длина данных в троичном компьютере [1],[1...5],[1...9],[1...18].
При переводе необходимо будет учитывать длины данных.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

Вопрос участникам:

Как переводить код операции машины "Сетунь-1958"?
Для краткой записи троичных симметричных кодов применяется алфавит симметричной девятеричной системы, с символами: W, X, Y, Z, 0, 1, 2, 3, 4. Существует вариант с буквами русского алфавита: Ж, Х, У, Ц, 0, 1, 2, 3, 4.
Необходимо переводить из симметричной девятеричной системы в троичный симметричных код операции Сетунь из Таблицы операций:

Использую калькулятор: http://trinary.su/kb/18153031-8224-4357 ... 632cf.html

1. Считывние с магнитного барабана в ферритовую память
Девятеричная: !3!3 => Троичная: -0-0
Девятеричная: XX


Т.е. вместо 3-тритов операции получилось 4 штуки. Должно быть три!

2.Вывод-ввод на внешние устройства
Девятеричная: !30 => Троичная: -000
Девятеричная: X0


Т.е. вместо 3-тритов операции опять получилось 4 трита.
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Re: Троичная ЭВМ "Сетунь" (1958)

Post by b2m »

Если помедитировать над описанием к эмулятору, то на ум приходит только одно, незначащий нулевой трит нужно дописывать не слева, а справа:
Считывание с МБ
-0-
-0 -0
x x
Вывод-ввод
-00
-0 00
x 0
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

b2m wrote:Если помедитировать над описанием к эмулятору, то на ум приходит только одно, незначащий нулевой трит нужно дописывать не слева, а справа:
Считывание с МБ
-0-
-0 -0
x x
Вывод-ввод
-00
-0 00
x 0
Авторы кодов операций Сетунь использовали, действительно, четыре трита 'k6..k8k9' для кодирования в девятеричную систему.


k6..k8k9 = "-0-0" => 'XX' => !3!3 Считывание с МБ           -     (Мд*)=>(Фа*)
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

Книга:
Ю.В.Ревич, Б.Н.Малиновский, "Информационные технологии в СССР. Создатели советской вычислительной техники"

Изд. БХВ-Петербург, 2014 г. ISBN 978-5-9775-3309-6, с. 336, с ил. тир. 1000

"...
Показано, что представляла собой советская отрасль информационных технологий в реальности, без преувеличений и излишнего самоуничижения.

Сборник составлен из очерков, посвященных создателям отечественной вычислительной техники советского периода. Вы узнаете о том, что в СССР существовала довольно развитая компьютерная отрасль, обеспечившая научные и военные нужды государства, созданная совершенно самостоятельно и нередко превосходившая зарубежные достижения.

Авторы прослеживают все этапы ее развития, от создания первых компьютеров до распада самой страны, и подробно разбирают причины сдачи завоеванных позиций.е этапы ее развития, от создания первых компьютеров до распада самой страны, и подробно разбирают причины сдачи завоеванных позиций.
..."

"...
стр. 245

Статья Б.Н.Малиновский "Николай Петрович Брусенцов"

Приложение: Вычислительная машина "Сетунь" Московского Государственного университета.
..."
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
ProMiNick
Novelist
Posts: 25
Joined: 16 Jun 2018 14:35

Re: Троичная ЭВМ "Сетунь" (1958)

Post by ProMiNick »

Попробовал поиграться с синтаксисами (так и эдак)
но факт остается фактом - компилируются мнемоники в троичные данные успешно.
Создается BCTD файл (файл двоично кодированных тернарных данных).
формат BCTD такой: каждый трайт задается 2 байтами и следующими за ними 2мя битами,из которых первые 9 бит соответствуют нахождению тритов трайта в положительном состоянии, а следующие 9 трит - в отрицательном, EOF такого файла - разновидность несуществующего BCTD, где значение последнего трайта представлено всеми положительными тритами, но младший трит одновременно отрицательный.Сами данные не выравнены на границу байт, а вот последние биты обязательно дозаполняются нулями до целого байта.
Можно создавать метки для джампов (с оговоркой адрес равен (n-n/4)2, где n равен адресу метки, но и тут все оригинально, в сетуни код загружается только по "хитрочетным" (адресам не оканчивающимися на "-") адресам.
Ну а так все компилится. Компилятор используется fasmg

Code: Select all

; 1 tryte = 2 byte+2bits
; FILE END errorneus BCT 11111111,1_0000000,01_000000 (pos:111111111,neg:000000001)
postpone
        db padbyte or (-1 shl padshift),$FF shr (7-padshift),2 shl padshift
end postpone 

padshift = 0
padbyte = 0 

macro extract_components value,outpos:0,outneg:0,size:0
        local Number,Carry,Digit,?topos
        if value
                Number=value
                if Number<0
                        ?topos = -1
                        Number = -Number
                else
                        ?topos = 1
                end if
                Carry=0
                while Number
                        if size&size*9<%
                                err value couldn`t fit
                        end if
                        Digit = Carry + Number mod 3
                        Number = Number / 3
                        if Digit < 2
                                Carry = 0
                        else
                                Digit = Digit - 3
                                Carry = 1
                        end if
                        if Digit = ?topos
                                outpos = outpos or 1 shl (%-1)
                        else if Digit = -?topos
                                outneg = outneg or 1 shl (%-1)
                        end if
                        if ~Number
                                if Carry = ?topos
                                        outpos = outpos or 1 shl %
                                else if Carry = -?topos
                                        outneg = outneg or 1 shl %
                                end if
                        end if
                end while
        end if
end macro 

macro tryte value
        local v,pos,neg,block,idx,size
        v = value
        pos = 0
        neg = 0
        extract_components v,pos,neg,1
        db (padbyte + (pos shl padshift)) and $FF,(pos shr (7-padshift) + neg shl (1+padshift)) and $FF
        if padshift = 6
                db (neg shr (7-padshift)) and $FF
                padshift = 0
                padbyte = 0
        else
                padshift = padshift + 2
                padbyte = (neg shr (7-padshift)) and $FF
        end if
end macro

 

macro dt? definitions&
    iterate value,definitions
        match n =dup? v, value
            repeat n
                tryte v
            end repeat
        else
            tryte value
        end match
    end iterate
end macro

struc dt? definitions&
    label . : byte
    iterate value,definitions
        match n =dup? v, value
            repeat n
                tryte v
            end repeat
        else
            tryte value
        end match
    end iterate
end struc 

macro jmp addr
        dt addr*81
end macro 

macro jz addr
        dt 3+addr*81
end macro 

macro jn addr
        dt 2+addr*81
end macro 

macro jp addr
        dt 4+addr*81
end macro 

macro ld reg,val
        match ,val
                dt 9+reg*81
        else match =S,reg
                dt 9+val*81
        else match =R,reg
                dt 7+val*81
        else match =F,reg
                dt -3+val*81
        end match
end macro 

macro add reg,val
        match ,val
                dt 10+reg*81
        else match =S,reg
                dt 10+val*81
        else match =F,reg
                dt -4+val*81
        end match
end macro 

macro rel val
        dt -2+val*81
end macro 

macro sub reg,val
        match ,val
                dt 8+reg*81
        else match =S,reg
                dt 8+val*81
        end match
end macro 

macro mov op1,op2
        match [val],op1
                match ,op2
                        dt  9+val*81 ;+00 ; send to S; mov S,[imm] ; mov [imm]
                else match =F,op2
                        dt -1+val*81 ;00- ; get from F; mov [imm],F
                else match =C,op2
                        dt  1+val*81 ;00+ ; get from C; mov [imm],C
                else match =S,op2
                        dt -5+val*81 ;-++ ; get from S; mov [imm],S
                else
                        err 'invalid operand'
                end if
        else match [val],op2
                match =F,op1
                        dt -3+val*81 ;0-0 ; send to F; mov F,[imm]
                else match =R,op1
                        dt  7+val*81 ;+-+ ; send to R; mov R,[imm]
                else match =S,op1
                        dt  9+val*81 ;+00 ; send to S; mov S,[imm] ; mov [imm]
                else
                        err 'invalid combination of operands'
                end if
        else
                err 'invalid combination of operands'
        end if
end macro 

;setun ternary opcodes
UD1             =-13
UD2             =-12
UD3             =-11
MBread          =-10
IO              =-9
MBwrite         =-8
Snorm           =-7
Sshift          =-6
Ssave           =-5
Fadd            =-4
Fload           =-3
Frel            =-2
Fsave           =-1
Jump            = 0
Link            = 1
JumpNeg         = 2
JumpZero        = 3
JumpPos         = 4
Halt            = 5
Sproduct        = 6
Rload           = 7
Ssub            = 8
Sload           = 9
Sadd            = 10
Smuladd         = 11
Smul            = 12
Saddscaled      = 13 

;macro jmp_instr [name,opcode]
;        macro name addr
;                ;not all addresses allowed, test them
;                dt opcode+addr*81
;        end macro
;end macro 

;jmp_instr jmp,Jump,\
;          jz,JumpZero,\
;          jn,JumpNeg,\
;          jp,JumpPos 

macro ter_instr opcode,param
        dt opcode+param*81
end macro 

macro add op1,op2,op3
        match ,op3
                match ,op2
                        match [val],op1
                                dt 10+val*81 ; +0+ ; sum to S; add S,[imm]; add [imm]
                        else match =R*[val],op1
                                dt 13+val*81 ; +++ ; scaled sum to S; add S,R*[imm]; add S,[imm]*R; add R*[imm]; add [imm]*R
                        else match [val]*=R,op1
                                dt 13+val*81 ; +++ ; scaled sum to S; add S,R*[imm]; add S,[imm]*R; add R*[imm]; add [imm]*R
                        else
                                err 'invalid combination of operands'
                        end if
                else match [val],op2
                        match =S,op1
                                dt 10+val*81 ; +0+ ; sum to S; add S,[imm]; add [imm]
                        else match =S*=R,op1
                                err 'invalid combination of operands'
                        else
                                err 'invalid combination of operands'
                        end if
end macro  

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

 

dt 3 ; можно определять как троичные данные

jmp 5; так и инструкции
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

ProMiNick wrote:Попробовал поиграться с синтаксисами (так и эдак)
но факт остается фактом - компилируются мнемоники в троичные данные успешно.
Испытал в linux:

Репозиторий ассемблера: fasmg - https://github.com/tgrysztar/fasmg

Создал пример:

Code: Select all

>$ cat test1.asm
include 'hex.inc'
include 'setun_1958.inc'

ORG 0001
	jmp	0001

Code: Select all

>& cat test1.hex 
:040000000200008278
:050001000602C07F8033
:00000001FF

Code: Select all

setun_1958$ tree -L 1
.
├── hex.inc
├── setun_1958.inc
├── test1.asm
└── test1.hex

0 directories, 4 files
Подскажи как преобразовать выходной файл к виду девятиричных
01yz0
0110x
101x0
команд "Сетунь"?
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
ProMiNick
Novelist
Posts: 25
Joined: 16 Jun 2018 14:35

Re: Троичная ЭВМ "Сетунь" (1958)

Post by ProMiNick »

девятиричные строки - это команды джава интерфейса. а не сетуни.
Записывать число буквами это чисто джавишный изврат.
Сетунь работала с трайтами, а не с девятеричным представлением этих трайтов.
И информация на перфокартах вводилась в виде непрерывного потока трайтов, писульки в виде 9ричного представления люди писали для себя.
18 бит BCTD - максимально близкое к трайту представление.
А отображать его проще 27ричным числом - 3мя группами по 3 разряда.
то что 27ричные цифры отсутствовали - проблема небольшая, цифры я уже придумал. внести в шрифт как бы получилось, но писать их полученным шрифтом - нет. Но рисовать буквы, вернее цифры, можно и не шрифтом а через рисование примитивов GDI.
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

ProMiNick wrote:девятиричные строки - это команды джава интерфейса. а не сетуни.
Мне хочется максимально точно воспроизвести работу троичной машины Сетунь.

Брусенцов Н.П., Маслов С.П., Розин В.П., Тишулина A.M. Малая цифровая вычислительная машина "Сетунь". // [Текст] .- Москва.- Изд-во МГУ.- 1965. - 136 стр. - с прил. - чертеж. - тираж 5000 экз. - цена 50 коп.

В главе 2 "Представление числел и команд", параграф 3 "Кодирование при вводе и выводе" описывается представление троичных команд при программировании.
В главе 5 "Ввод и вывод данных" есть несколько вариантов ввода и вывода.

В книгах в серии "Математическое обслуживание для машин "Сетунь" приводятся распечатки программ. Оформлены в виде девятиричных троичных строк.

В виртуальных устройствах ввода/вывода будут текстовые файлы с командами, числами и символами текста:

Команды для ввода или вывода
  • перфолента в виде текстового файла со строками 'ooo.oo'
  • перфолента в виде текстового файла со строками '+00--+000' (новый формат)
  • перфолента в виде текстового файла со строками '01yz0' (новый формат)

Code: Select all

.
├── lpt0
├── ptp0
├── ptr0
├── ptr1
├── tty0
├── up0
├── ur0
└── ur1
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
ProMiNick
Novelist
Posts: 25
Joined: 16 Jun 2018 14:35

Re: Троичная ЭВМ "Сетунь" (1958)

Post by ProMiNick »

По моим куцым данным на перфоленте не было ASCII символов.
На перфоленте были вертикальные и горизонтальные прорези и отсутствие оных.
(Но я могу ошибаться)
так или иначе реализовывать я буду в своем формате BCTD (а пользователю отображать в виде 27-ричных чисел), но поскольку я сторонник опенсорца приделать этому костыли девятиричности сможете сами.

по операциям: загрузка с магнитного барабана происходит в одну из третей доступного адресного пространства.
Начинается все с загрузки серединного адресного пространства и выполнения инструкции по адресу 1.
Но то начинается...
А какое поведение у инструкции после?
Допустим в коде встретилась инструкция загрузки вновь серединного адресного пространства все "...0" и "...+" трайты переписываются и управление переходит куда? на инструкцию с адресом 1? на инструкцию следующую за инструкцией в которой была команда на запись с барабана?
А если загрузка не в серединное адресное пространство, а в отрицательное (там где старший трит "-") то куда переходит управление в этом случае? опять на инструкцию с адресом 1? или на 81 трайт меньше адреса 1? или на инструкцию следующую за инструкцией в которой была команда на запись с барабана?
User avatar
askfind
Devil
Posts: 798
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичная ЭВМ "Сетунь" (1958)

Post by askfind »

ProMiNick wrote: По моим куцым данным на перфоленте не было ASCII символов.
На перфоленте были вертикальные и горизонтальные прорези и отсутствие оных.
Гл. V "Ввод и вывод данных" [1]

Бумажная лента: Пятипозиционная.

Можно кодировать:
- Команды
- Числа
- Символы

Имеются специальные комбинации:
  • "Цировой регистр",
  • "Буквенный регистр",
  • "Подчёркивание",
  • "Стоп",
  • "Возврат каретки",
  • "Перевод строки".
При выводе в виде символов управление всеми действиями пишущей машинки ( или телетайпа) осуществляются в формате 27-ричных комбинаций данными.
Остальные 22 комбинации позволяют на машинке с двумя регистрами печатать 44 различными знака.
ProMiNick wrote: реализовывать я буду в своем формате BCTD (а пользователю отображать в виде 27-ричных чисел), но поскольку я сторонник опенсорца приделать этому костыли девятиричности сможете сами.
Где подробно посмотреть о таком представлении троичных чисел?
ProMiNick wrote: по операциям: загрузка с магнитного барабана происходит в одну из третей доступного адресного пространства.
Обмен зонами. Да, так.
ProMiNick wrote: Начинается все с загрузки серединного адресного пространства и выполнения инструкции по адресу 1.
Но то начинается...
Специальная кнопка на пульте "Начальный пуск", когда с перфоленты считываются данные в зону ферритовой памяти Z=0, регистр счетчика команд устанавливается С=00001 и далее передаётся управление на выполнение команд.
ProMiNick wrote: А какое поведение у инструкции после?

Допустим в коде встретилась инструкция загрузки вновь серединного адресного пространства все "...0" и "...+" трайты переписываются и управление переходит куда? на инструкцию с адресом 1? на инструкцию следующую за инструкцией в которой была команда на запись с барабана?
После выполнения кода операции машины определяется адрес следующего кода операции.

Новый адрес 9-разрядного кода K1...K9 ячейки в ферритовой памяти находится в регистре С.

В твоём примере, после чтения зоны с магнитного барабана, прочитается новый 9-разрядный короткий код по адресу регистра С.
ProMiNick wrote: А если загрузка не в серединное адресное пространство, а в отрицательное (там где старший трит "-") то куда переходит управление в этом случае? опять на инструкцию с адресом 1? или на 81 трайт меньше адреса 1?

на инструкцию следующую за инструкцией в которой была команда на запись с барабана?
При кодах операций безусловного перехода или условных переходов в регистре С младший трит может быть отрицательным.

Описание в [1]:
5-разрядный регистр управления С, в котором содержится адрес
выполняемой команды, после выполнения каждой команды в регистре С
формируется адрес следующей команды причём за командой являющейся первой коротким кодом какой-либо ячейки, следует­ команда, являющаяся вторым коротким кодом этой ячейки, а вслед за ней — ко­манда, являющаяся первым коротким кодом следующей ячейки, и т. д.;
этот порядок может быть нарушен при выполнении команд
перехода.

В случае, когда в качестве адреса команды указан адрес 18-разрядной ячейки, т.е. адрес с цифрой !1 в пятом разряде, машина выполняет два раза выполняет команды, в старшей половине.
Адресный счётчик троичного "Сетунь" - самая запутанная часть документации.

Почему именно так, не очевидно, работает счётчик команд - не могу объяснить.

В эмуляторе многократно переписывал модель ферритовой памяти и функцию определения следующего адреса команды и выполнение кода при с адресом в последней цифре !1.

В поздней работе Брусенцов Н.П. [2] описал модель ферритовой памяти и памяти магнитного барабана:
Адресное пространство главной памяти простирается от -(35-1)/2 до (35-
1)/2, т. е. от -121 до +121, но так как каждый третий адрес использован для указания пары ячеек, обладающих каждая отдельным адресом, то адресовать можно только 162 девятитритных ячейки и 81 пару ячеек.

Последовательная выборка команд производится с пропуском адресов, соответствующих парам ячеек, т. е. программный счетчик принимает следующие значения: -120, -119, -117, -116, ..., -3, -2, 0, 1, 3, 4, ..., 117, 118, 120, 121.

При обменах с внешней памятью, которая реализована на магнитном
барабане и является основной памятью машины, а также при вводе и выводе главная память представляется разделенной на страницы, содержащие по 54 ячейки. Номером страницы служит значение старшего трита принадлежащих этой странице адресов.

Другими словами, память структурирована как массив

m(-1:1, -80:81, 1:9)

1. Брусенцов Н.П., Маслов С.П., Розин В.П., Тишулина A.M. Малая цифровая вычислительная машина "Сетунь". // [Текст] .- Москва.- Изд-во МГУ.- 1965. - 136 стр. - с прил. - чертеж. - тираж 5000 экз. - цена 50 коп.

2. Н. П. Брусенцов, ЗАМЕТКИ О ТРОИЧНОЙ ЦИФРОВОЙ ТЕХНИКЕ - ЧАСТЬ 2.
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)