A virtual machine of ternary computer Setun, also known as "Small Automatic Digital Machine" written on C.
Виртуальная машина троичной цифровой машина "Сетунь" также известная как МЦВМ "Сетунь"), написанный на языке программиования C.
- Дата создания: 01.11.2018
- Дата редактирования: 10.01.2026
- Версия: 2.11
- Автор: Vladimir V.
- E-mail: askfind@ya.ru
$ cd ./Emulator-Setun-1958
$ make
gcc -v -std=gnu11 -o setun1958emu -g emusetun_test.c emusetun.c
$ ls -al ./setun1958emu
./setun1958emu$ ./setun1958emu
Emulator ternary computer 'Setun-1958':
Version: 2.11
Author: Vladimir V.
E-mail: askfind@ya.ru
setun1958emu:
help
Commands control for setun1958emu:
dump [arglist]
load [l] [arglist]
prn [arglist]
debug [d] [arglist]
view [v]
begin [b]
pause [p]
run [r]
step [s] [arglist]
break [br] [arglist]
breakmb [brm] [arglist]
reg [rg] [arglist]
fram [fr] [arglist]
drum [dr] [arglist]
help [h]
quit [q]
calc [arglist]3.0. 'calc' - калькулятор 'MK-Setun-01', с использованием подпрограммы ИП-2 для эмулятора SETUN-1958
$ ./setun1958emu
setun1958emu:
calc 12 / 13
MK-Setun-01
calc: 12.00000000 / 13.00000000 = 0.92307692
TODO: add codes for calculate trits !
setun1958emu:3.1. 'dump' -команда печати файла 'test1-fram-zone-0.txs', с исходными кодами программы эмулятора SETUN-1958
$ ./setun1958emu
setun1958emu:
dump ./software/test1/test1-fram-zone-0.txs
Read commands from file.txs: ./software/test1/test1-fram-zone-0.txs
[ Dump FRAM Setun-1958: ]
Zone = 0
WW WX 0 1Y Z0 02 03 Z 00 00
WY 0 11 0X 04 Z 01 00
WZ W0 1 01 X0 1W 1X 0 Z0 00
W1 1 1W X4 1Y 0 03 00
W2 W3 1 1W XY 1Z 10 0 0X 00
W4 0 03 Z0 11 0 00 00
XW XX 0 2X 30 12 13 0 00 0Y
XY 0 12 Y3 14 1 ZW 22
XZ X0 Z WX 31 2W 2X 0 00 00
X1 0 1X Y0 2Y 0 00 00
X2 X3 0 12 33 2Z 20 0 00 0Y
X4 0 12 Y3 21 1 ZW 22
YW YX 0 1Y ZX 22 23 0 00 0Y
YY 0 X0 1X 24 1 YY YX
YZ Y0 0 Y4 13 3W 3X 0 00 00
Y1 0 04 Z0 3Y 0 00 00
Y2 Y3 0 X0 00 3Z 30 0 00 00
Y4 0 11 Z0 31 0 00 00
ZW ZX 0 2Z 3Y 32 33 0 00 00
ZY 0 Z3 10 34 0 00 00
ZZ Z0 0 00 2X 4W 4X 0 00 00
Z1 0 W0 00 4Y 0 00 00
Z2 Z3 0 10 ZX 4Z 40 0 00 00
Z4 0 WY 10 41 0 00 00
0W 0X 1 1Z XX 42 43 0 00 00
0Y Z 1W XX 44 0 00 00
0Z 00 1 W3 00 KC 0 00 01
01 0 WX 00 Z Z2 1W
i=54
KC:
: [00000000+], 00001, (1)
: [-0-+-0+--], ZZ21W, (-7123)
-KC = 0-KC:
: [00000000-], 0000Z, (-1)
: [+0+-+0-++], 11YZ4, (7123)3.2. 'load' или 'l' - чтение исходных файлов в каталоге './software/test1', с исходными кодами программы, и создание в каталоге './ptr1' файла виртуальной перфоленты 'paper.txt' для эмулятора SETUN-1958
$ ./setun1958emu
Emulator ternary computer 'Setun-1958':
Version: 2.11
Author: Vladimir V.I.
E-mail: askfind@ya.ru
setun1958emu:
load ./software/test2 ./ptr1
[ Convert software files to file paper.txt ]
Read file list: ./software/test2/test2.lst
Read file: test2-fram-zone-b.txs
Read file: test2-fram-zone-z.txs
Read file: test2-fram-zone-0.txs
Read file: test2-fram-zone-1.txs
Write file: ./ptr1/paper.txt
Script file source: ./software/test2/script.sst
Script file destation: ./script/script.sst
Copy file source to file destation.
setun1958emu:
begin
setun1958emu:
[ Start Setun-1958 ]
TECT2
<STOP>
[ Script file: 'script.sst' ]
Addres: [0+++-+], 14Y, (115)
Note: Success!
New address: [000000], 000, (0)
Action: R
K : [0+0+-+--0], 0322X, (2364)
F : [-----], ZWW, (-121)
C : [+++-+], 14Y, (115)
W : [+], 1, (1)
ph1: [0], 0, (0)
ph2: [0], 0, (0)
S : [+-0-+00+0-+00+++-0], 2Z31Z314X, (82959585), {1.927199}
R : [-0+0-00-+0-00-++00], X3XZ3XZ40, (-116427177), {-2.704670}
MB : [0000], 00, (0)
setun1958emu:$ ./setun1958emu
setun1958emu:
debug 1
switch debug on
setun1958emu:
debug 0
switch debug off$ ./setun1958emu
setun1958emu:
view
[ View registers Setun-1958 ]
K : [000000000], 00000, (0)
F : [00000], 000, (0)
C : [00000], 000, (0)
W : [0], 0, (0)
ph1: [0], 0, (0)
ph2: [0], 0, (0)
S : [000000000000000000], 000000000, (0), {0.000000}
R : [000000000000000000], 000000000, (0), {0.000000}
MB : [0000], 00, (0)
[ Tools ]
status: wait
print: 'lat'
debug: off
breakpoint fram: no used
breakpoint drum: no used
steps: 4153623$ ./setun1958emu
setun1958emu:
pause
setun1958emu:$ ./setun1958emu
setun1958emu:
pause$ ./setun1958emu
setun1958emu:
step
setun1958emu:
K : [--+++0+00], ZY410, (-7686)
F : [+-++0], 1Y3, (66)
C : [--+++], ZY4, (-95)
W : [0], 0, (0)
ph1: [0], 0, (0)
ph2: [0], 0, (0)
S : [000000000000000000], 000000000, (0)
R : [0+-++-+-+--+--+-+-], 1Y222YW22, (34673123)
MB : [++-0], 4X, (33)TODO add code $ ./setun1958emu
setun1958emu:
reg c 0000+[fram] [fr] [arglist]
$ ./setun1958emu
setun1958emu:
fram +
[ Dump FRAM Setun-1958: ]
Zone = 1
WW WX 1 3X X4 02 03 Z 1Y 3X
WY 1 13 X4 04 1 1Y 10
WZ W0 1 20 2W 1W 1X 0 10 2X
...
0Z 00 Z 40 03 KC 0 00 0Y
01 Z 42 YX 1 YY YX $ ./setun1958emu
setun1958emu:
drum 1x
[ Dump DRUM Setun-1958: ]
Zone [0+-0], 1X
index (6)
drum[ 6: 0 ] [--00+0-00], ZX1Z0
drum[ 6: 1 ] [-0+-0-0+0], Z1XX3
drum[ 6: 2 ] [-0+---0-0], Z1WXX
drum[ 6: 3 ] [0000+0000], 00100
drum[ 6: 4 ] [-++++0-00], Z44Z0
drum[ 6: 5 ] [--0-+0+00], ZXY10
drum[ 6: 6 ] [00000-0++], 000X4
drum[ 6: 7 ] [-+--000+0], Z2X03
drum[ 6: 8 ] [--+0+0000], ZY100
...$ ./setun1958emu
setun1958emu:
help
Commands control for setun1958emu:
[dump] [arglist]
...$ ./setun1958emu
setun1958emu:
quit
K : [---+00++0], ZW313, (-9222)
F : [0+0-0], 03X, (24)
C : [---+0], ZW3, (-114)
W : [+], 1, (1)
ph1: [0], 0, (0)
ph2: [0], 0, (0)
S : [000000000000000000], 000000000, (0)
R : [0+-++-+-+--+--+-+-], 1Y222YW22, (34673123)
MB : [+000], 30, (27)
[ Stop Setun-1958 ]$ ./setun1958emu
setun1958emu:
prn 0
switch print 'rus'
setun1958emu:
prn 1
switch print 'lat'ptr1,ptr2,ptp1,tty1 - это виртуальные устройства ввода и вывода
Device Direction Description
PTR1: устройство ввода бумажной перфоленты, фототрансмиттер №1, PTR2: устройство ввода бумажной перфоленты, фототрансмиттер №2, PTP1: устройство вывода на перфоленту TTY1: устройство вывода на телетайп или печатующее устройство
- Materials on ternary computer science - http://ternarycomp.cs.msu.su/
- Emulator of the first ternary Soviet "Setun" - http://trinary.su/projects/
- Unique Setun based on the ternary code - https://habr.com/ru/company/ua-hosting/blog/273929/
- Group users in social network VK - https://vk.com/setunsu/
- Group users in social network Telegram - https://t.me/setun_1958/
Everybody is invited and welcome to contribute to Setun VM.
Приглашаем всех желающих внести свой посильный вклад в эмулятор SETUN-1958.