nedoPC.org

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



Reply to topic  [ 25 posts ]  Go to page 1, 2  Next
Тестирование эмулятора 3niti alpha 
Author Message
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Топик посвящён тестированию джава эмулятора троичного компьютера 3niti alpha, который имеет следующую систему команд:

-4 N: триада из ячейки памяти с адресом DPn (см. ниже);
-3 O: триада из ячейки памяти с адресом DPo (см. ниже);
-2 P: триада из ячейки памяти с адресом DPp (см. ниже);
-1 F: регистр флага (см. ниже);
0 A: регистр аккумулятора;
+1 B: дополнительный регистр;
+2 L: младшая триада текущего регистра DP (см. ниже);
+3 M: средняя триада текущего регистра DP (см. ниже);
+4 H: старшая триада текущего регистра DP (см. ниже).

Регистр F состоит из 3 троичных флагов:
Старший трит: RSF (Result Sign Flag) - флаг знака результата
Средний трит: DPF (Data Pointer Flag) - флаг указателя данных
Младший трит: BCF (Borrow Carry Flag) - флаг переноса-заёма

Также существют три 9-тритовых регистра указателя данных (data pointer = DP) - DPn, DPo, DPp, доступные через имена регистров L/M/H когда флаг DPF имеет значение N, O, P соответственно.

Теневой регистр программного счётчика (program counter = PC) напрямую недоступен - только через команды копирования между PC и текущим DP.

Полный список команд:
#NNN (-13) SAN - сохранить регистр A в регистре N;
#NNO (-12) SAO - сохранить регистр A в регистре O;
#NNP (-11) SAP - сохранить регистр A в регистре P;
#NON (-10) SAF - сохранить регистр A в регистре F;
#NOO (-9) SPCD - сохранить PC в текущем регистре DP;
#NOP (-8) SAB - сохранить регистр A в регистре B;
#NPN (-7) SAL - сохранить регистр A в регистре L (младшая триада текущего DP);
#NPO (-6) SAM - сохранить регистр A в регистре M (средняя триада текущего DP);
#NPP (-5) SAH - сохранить регистр A в регистре H (старшая триада текущего DP);
#ONN (-4) RLA - сдвинуть регистр A влево через флаг BCF;
#ONO (-3) ADD - сложить регистр A с регистром B и флагом BCF, сохранить результат в A и флаге BCF, установить флаг знака RSF;
#ONP (-2) RRA - сдвинуть регистр A вправо через флаг BCF;
#OON (-1) LAI # - загрузить регистр A данными из триады идущей следом;
#OOO (0) ADI # - сложить регистр A с данными из триады идущей следом и флагом BCF, сохранить результат в регистре A и флаге BCF, установить флаг знака RSF;
#OOP (1) OPA # - выполнить унарную потритовую операцию над регистром A (функция устанавливается данными из триады идущей следом), установить флаг знака RSF;
#OPN (2) LDI # # # - загрузить текущий регистр DP данными из 3 триад идущих следом (старшая, средняя, младшая);
#OPO (3) JMP # # # - передать управление на адрес, взятый из 3 триад идущих следом (старшая, средняя, младшая);
#OPP (4) OPB # # # - выполнить бинарную потритовую операцию над регистрами A и B, сохранить результат в регистре A (функция устанавливается данными из 3 триад идущих следом), установить флаг знака RSF;
#PNN (5) LAN - загрузить регистр A из регистра N;
#PNO (6) LAO - загрузить регистр A из регистра O;
#PNP (7) LAP - загрузить регистр A из регистра P;
#PON (8) LAF - загрузить регистр A из регистра F;
#POO (9) LPCD - загрузить PC из текущего регистра DP;
#POP (10) LAB - загрузить регистр A из регистра B;
#PPN (11) LAL - загрузить регистр A из регистра L (младшая триада текущего DP);
#PPO (12) LAM - загрузить регистр A из регистра M (средняя триада текущего DP);
#PPP (13) LAH - загрузить регистр A из регистра H (старшая триада текущего DP).

Также эмулятор имеет человеко-машинный интерфейс состоящий из линейки троичных светодиодов и линейки троичных переключаталей. Линейка светодиодов отображает содержимое теневого регистра PC (9 светодиодов), одну триаду данных (3 светодиода) и также содержимое регистра A - всего 15 штук. Под светодиодами располагаются троичные переключатели - 9 для задания адреса (первая версия имеет память адресуемую лишь 8 тритами), 3 для задания вводмых данных и 3 переключателя управления (крайние справа):

1) переключатель управляющий вводом-выводом:
P (верхнее положение) - по установленному адресу записывается установленная триада, которая также отображается на светодиодах триады данных;
O (среднее положение) - установленный адрес и установленная триада игнорируются (т.е. переключатели адреса и данных в этом режиме можно переключать), а на светодиодах триады данных отображается содержимое ячейки с адресом PC;
N (нижнее положение) - установленная триада игнорируется, а на светодиодах триады данных отображается содержимое ячейки по установленному адресу;

2) переключатель выбирающий подпрограммы работы:
P (верхнее положение) - прервать работу основной программы сохранив текущий адрес и запустить подпрограмму по установленному адресу;
O (среднее положение) - не препятствовать работе основной программы или ранее запущенной подпрограммы;
N (нижнее положение) - прервать работу ранее запущенной подпрограммы и вернутся к основной программе по сохранённому адресу;

3) переключатель управляющий пошаговой отладкой:
P (верхнее положение) - осуществить один шаг вперед;
O (среднее положение) - режим паузы;
N (нижнее положение) - обычный прогон программы.

Первая версия эмулятора: http://www.nedopc.org/ternary/java.php?applet=3

Image

P.S. Немного об управлении - если кликать в верхнюю часть переключателя, то он меняет своё значение на один шаг вверх, т.е. N->O или O->P, а если кликнуть в нижнюю часть, то он меняет своё значение на один шаг вниз, т.е. P->O или O->N (как можно заметить сразу переключиться из N в P или из P в N невозможно - только через O в два клика).


Last edited by Shaos on 15 Feb 2015 16:05, edited 3 times in total.



06 Nov 2008 19:39
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Сдвигаем правый крайний переключатель вниз, вызывая этим прогон программы с текущего адреса (OOOOOOOOO), что приведёт к многочисленным вызовам команды ADI 0 (OOO OOO) и увеличению PC с шагом 2 ячейки за раз:

Image

P.S. Если в эмулятор что-то было загружено заранее начиная с нулевого адреса, то такой прогон приведёт к исполнению загруженной программы.


Last edited by Shaos on 30 Nov 2014 02:07, edited 1 time in total.



06 Nov 2008 19:45
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
В режиме паузы (последний переключатель находится в нейтральном положении) проверим процедуру прерывания работы основной программы. Для этого введём адрес POO OOO OOO (первый переключатель сдвинут вверх):

Image

и сдвинем предпоследний переключатель вверх:

Image

что приведёт к смене адреса в PC (первый светодиод стал зелёным), который не изменится если сдвинуть предпоследний переключатель обратно в нейтральное положение:

Image

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

Image

что приведёт к обнулению адреса в PC, который также не изменится если сдвинуть предпоследний переключатель обратно в нейтральное положение:

Image


Last edited by Shaos on 30 Nov 2014 02:08, edited 1 time in total.



06 Nov 2008 20:29
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
В режиме паузы (последний переключатель находится в нейтральном положении) проверим запись и чтение триад. Для этого введём адрес OPO OOO OOO (второй переключатель сдвинут вверх):

Image

На переключателях ввода данных введём триаду NNP:

Image

И запишем эту триаду в память по указанному адресу путём сдвига третьего справа переключателя в верхнее положение:

Image

При этом светодиоды триады данных будут показывать введённую триаду. Далее переключив третий справа переключатель обратно в нейтральное положение мы вернём на светодиоды данных содержимое ячейки с адресом PC (в данном случае там будет OOO):

Image

Далее вернём переключатели триады данных в нейтральное положение:

Image

И сдвинем третий справа переключатель вниз чтобы прочитать триаду по указанному адресу - там всё также должно быть значение NNP:

Image

P.S. Описанным способом можно вводить программы (эмулятор может разрешать запись в ROM, расположенный вокруг нулевого адреса, если при старте не был указан параметр readonly)


Last edited by Shaos on 30 Nov 2014 02:09, edited 1 time in total.



06 Nov 2008 21:29
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Теперь 3-триадные данные для LDI и JMP идут старшими триадами вперёд (т.е. big-endian)


11 Nov 2008 17:09
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Сегодня поправил отображение регистра A на трёх крайних справа лампочках (до этого оно всегда белое было)


12 Nov 2008 17:18
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Shaos wrote:
Сегодня поправил отображение регистра A на трёх крайних справа лампочках (до этого оно всегда белое было)


Ещё один фикс отображения трёх-тритных значений (до этого при отображении они сдвигались влево до ближайшего ненулевого трита)


13 Nov 2008 22:17
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Quote:
Сегодня поправил отображение регистра A на трёх крайних справа лампочках (до этого оно всегда белое было)


А я-то удивлялся почему они всегда белые! Думал что не так что-то делаю :-D


17 Nov 2008 00:29
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Вот расширенный эмулятор 3niti alpha: http://www.nedopc.org/ternary/java.php?applet=4
Умеет всё кроме "Write" (дописываю) и "Session" (в правом нижнем углу ввод имени для сохранения)


15 Dec 2009 20:07
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Post 
Поправил картинки, а то они после переезда были съехавшие...

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


30 Nov 2014 02:10
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
А что-то я попытался "подумать над железкой", но глядя хоть на что-то "осязаемое"...
Но ОНО, похоже, что не работает... или я что-то делаю не так... :-?
http://www.nedopc.org/ternary/java.php?applet=3
Attachment:
triJava.gif
triJava.gif [ 7.98 KiB | Viewed 15755 times ]

_________________
iLavr


21 Oct 2017 06:59
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
Странно - возможно какая-то тонкая настройка PHP нужна - оно у меня по старинке было написано - погляжу

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


21 Oct 2017 11:41
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
А у тебя самогО-то работает с этих ссылок? Может у меня что не так?
Хотя я проверил - мой "Специалист" на Java работает... :-?

_________________
iLavr


21 Oct 2017 11:50
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22410
Location: Silicon Valley
Reply with quote
не работает :(

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


21 Oct 2017 12:12
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ну честно говоря, я что-то там не вижу вызовов Джава-апплетов:
Code:
<h1>Ternary Java Applets</h1>
<table border=1>
<tr>
<td bgcolor=#C0C0C0 width=300>applet</td>
<td bgcolor=#C0C0C0 width=200>author</td>
<td bgcolor=#C0C0C0 width=140>date</td>
</tr>
<tr>
<td><b><a href="java.php?applet=3">Ternary Computer Alpha 1</a></b></td>
<td><a href="mailto:me@shaos.net">Shaos</a></td>
<td>Nov 2008</td>
</tr>
<tr>
<td><b><a href="java.php?applet=2">Ternary Converter</a></b></td>
<td><a href="mailto:me@shaos.net">Shaos</a></td>
<td>Feb 2006</td>
</tr>
<tr>
<td><b><a href="java.php?applet=1">Ternary Clock</a></b></td>
<td><a href="mailto:me@shaos.net">Shaos</a></td>
<td>Mar 2005</td>
</tr>
</table>

Или переходов на страницы, где эти вызовы есть.

Ты мне говорил, что этот код форума не поддерживает вызова Джава-апплета.
И я подсократил свой пост со "Специалистом" на Джава...



P.S. Я уж грешным делом подумал, не убрал ли ты эти Джава-апплеты подальше сам,
чтобы использовать их в качестве поминальных венков на могиле Жабы...
:mrgreen:

_________________
iLavr


21 Oct 2017 12:18
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 25 posts ]  Go to page 1, 2  Next

Who is online

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