Ternary.info FAQ FORUM LOGIN REG
Ternary.info
special interest group on balanced ternary numeral system and trinary logic
Main Menu

Ternary.info Forum Index
   Ternary Software {RUS}
     Тестирование эмулятора "3niti alpha"
Register To Post

Threaded | Newest First Previous Topic | Next Topic | Bottom
Poster Thread
Shaos
Posted on: 2008/11/6 21:39
Webmaster
Joined: 2005/4/9
From: New York
Posts: 754
Тестирование эмулятора "3niti alpha"
Топик посвящён тестированию джава эмулятора троичного компьютера 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://ternary.info/ternary/java.php?applet=3



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


----------------
Alexander Shabarshin http://www.shaos.net

Shaos
Posted on: 2008/11/6 21:45
Webmaster
Joined: 2005/4/9
From: New York
Posts: 754
Test 0: Simple run
Сдвигаем правый крайний переключатель вниз, вызывая этим прогон программы с текущего адреса (OOOOOOOOO), что приведёт к многочисленным вызовам команды ADI 0 (OOO OOO) и увеличению PC с шагом 2 ячейки за раз:



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


----------------
Alexander Shabarshin http://www.shaos.net

Shaos
Posted on: 2008/11/6 22:29
Webmaster
Joined: 2005/4/9
From: New York
Posts: 754
Test 1: Simple interrupt
В режиме паузы (последний переключатель находится в нейтральном положении) проверим процедуру прерывания работы основной программы. Для этого введём адрес POO OOO OOO (первый переключатель сдвинут вверх):



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



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



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



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



----------------
Alexander Shabarshin http://www.shaos.net

Shaos
Posted on: 2008/11/6 23:29
Webmaster
Joined: 2005/4/9
From: New York
Posts: 754
Test 2: Simple read-write
В режиме паузы (последний переключатель находится в нейтральном положении) проверим запись и чтение триад. Для этого введём адрес OPO OOO OOO (второй переключатель сдвинут вверх):



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



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



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



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



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



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


----------------
Alexander Shabarshin http://www.shaos.net

Shaos
Posted on: 2008/11/11 19:09
Webmaster
Joined: 2005/4/9
From: New York
Posts: 754
Re: Тестирование эмулятора "3niti alpha"
Теперь 3-триадные данные для LDI и JMP идут старшими триадами вперёд (т.е. big-endian)


----------------
Alexander Shabarshin http://www.shaos.net

Shaos
Posted on: 2008/11/12 19:18
Webmaster
Joined: 2005/4/9
From: New York
Posts: 754
Re: Тестирование эмулятора "3niti alpha"
Сегодня поправил отображение регистра A на трёх крайних справа лампочках (до этого оно всегда белое было)


----------------
Alexander Shabarshin http://www.shaos.net

Shaos
Posted on: 2008/11/14 0:17
Webmaster
Joined: 2005/4/9
From: New York
Posts: 754
Re: Тестирование эмулятора "3niti alpha"
Quote:

Shaos wrote:
Сегодня поправил отображение регистра A на трёх крайних справа лампочках (до этого оно всегда белое было)


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


----------------
Alexander Shabarshin http://www.shaos.net

Mbr
Posted on: 2008/11/17 2:29
Moderator
Joined: 2005/4/10
From: Moscow
Posts: 381
Re: Тестирование эмулятора "3niti alpha"
Quote:
Сегодня поправил отображение регистра A на трёх крайних справа лампочках (до этого оно всегда белое было)


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


----------------
http://www.vntb.ru/

Shaos
Posted on: 2009/12/15 22:07
Webmaster
Joined: 2005/4/9
From: New York
Posts: 754
Re: Тестирование эмулятора "3niti alpha"
Вот расширенный эмулятор 3niti alpha: http://ternary.info/ternary/java.php?applet=4
Умеет всё кроме "Write" (дописываю) и "Session" (в правом нижнем углу ввод имени для сохранения)


----------------
Alexander Shabarshin http://www.shaos.net

Threaded | Newest First Previous Topic | Next Topic | Top

Register To Post
 
Login
Username:

Password:


Lost Password?

Register now!


Copyright (c) 2005-2010 Ternary.info. All rights reserved.
Powered by XOOPS 2.0 (c) 2001-2003 The XOOPS Project
Theme & Graphics by Xoops Brasil