Тестирование эмулятора 3niti alpha

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

Moderator: haqreu

User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Тестирование эмулятора 3niti alpha

Post by Shaos »

Топик посвящён тестированию джава эмулятора троичного компьютера 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.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Test 0: Simple run

Post by Shaos »

Сдвигаем правый крайний переключатель вниз, вызывая этим прогон программы с текущего адреса (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.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Test 1: Simple interrupt

Post by Shaos »

В режиме паузы (последний переключатель находится в нейтральном положении) проверим процедуру прерывания работы основной программы. Для этого введём адрес 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.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Test 2: Simple read-write

Post by Shaos »

В режиме паузы (последний переключатель находится в нейтральном положении) проверим запись и чтение триад. Для этого введём адрес 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.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Тестирование эмулятора "3niti alpha"

Post by Shaos »

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

Re: Тестирование эмулятора "3niti alpha"

Post by Shaos »

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

Re: Тестирование эмулятора "3niti alpha"

Post by Shaos »

Shaos wrote: Сегодня поправил отображение регистра A на трёх крайних справа лампочках (до этого оно всегда белое было)
Ещё один фикс отображения трёх-тритных значений (до этого при отображении они сдвигались влево до ближайшего ненулевого трита)
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Тестирование эмулятора "3niti alpha"

Post by Mac Buster »

Сегодня поправил отображение регистра A на трёх крайних справа лампочках (до этого оно всегда белое было)
А я-то удивлялся почему они всегда белые! Думал что не так что-то делаю :-D
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Тестирование эмулятора "3niti alpha"

Post by Shaos »

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

Post by Shaos »

Поправил картинки, а то они после переезда были съехавшие...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Тестирование эмулятора 3niti alpha

Post by Lavr »

А что-то я попытался "подумать над железкой", но глядя хоть на что-то "осязаемое"...
Но ОНО, похоже, что не работает... или я что-то делаю не так... :-?
http://www.nedopc.org/ternary/java.php?applet=3
triJava.gif
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Тестирование эмулятора 3niti alpha

Post by Shaos »

Странно - возможно какая-то тонкая настройка PHP нужна - оно у меня по старинке было написано - погляжу
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Тестирование эмулятора 3niti alpha

Post by Lavr »

А у тебя самогО-то работает с этих ссылок? Может у меня что не так?
Хотя я проверил - мой "Специалист" на Java работает... :-?
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Тестирование эмулятора 3niti alpha

Post by Shaos »

не работает :(
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Тестирование эмулятора 3niti alpha

Post by Lavr »

Ну честно говоря, я что-то там не вижу вызовов Джава-апплетов:

Code: Select all

<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