4-trit Processor

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

Moderator: haqreu

Post Reply
User avatar
Lavr
Supreme God
Posts: 16628
Joined: 21 Oct 2009 15:08
Location: Россия

4-trit Processor

Post by Lavr »

В заглавии этого форума есть следующие слова: (прошлое, настоящее, будущее)...

Будущее, как мы тут многие (хотя и не все) считаем, должно принять во внимание троичную логику. :wink:
Поэтому небольшой проект 4-тритного компьютера, основанного на троичной логике, я и решил представить
именно здесь, поскольку основные схемотехнические решения позаимствованы мной из моего же собственного
проекта 4-bit Processor.

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

Tri_logic.gif
Tri_logic.gif (76.49 KiB) Viewed 16457 times

С точки зрения "математики" библиотек *.dll Proteus-a это состояние ничуть не хуже и не лучше всех
остальных состояний, которые Proteus способен учесть, анализируя логические схемы:

Image

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

Итак, я решил делать процессор 4-тритным, поскольку схемотехника 4-разрядного процессора была мной хорошо проработана,
а во-вторых, это позволяет более или менее корректно сравнить 4-битный
процессор с его 4-тритным эквивалентом.

И вот что у меня на этой стезе получилось:
Image

 Схема в большом разрешении
Image

Поскольку двоичная логика является подмножеством троичной логики, но элементы троичной логики обходятся
в данный момент весьма дорого, я решил, что троичные логические элементы должны быть лишь там где это
сугубо необходимо, чтобы проект осуществлял троичные операции.
В этой связи управление в значительной мере выполнено на двоичной логике, ПЗУ микрокоманд - двоичное,
ОЗУ и системное ПЗУ - двоичные. Троичные значения сохраняются и извлекаются в формате BCT.
Адрес декодируется через дешифратор 3 - в - 2.

Программный счётчик РС 8-тритный, что даёт нам 6561 независиый адрес для хранения троичных кодов.
В двоичном 4-битном компьютере РС был 12-разрядный, что давало всего 4096 ячеек памяти.
Троичность позволила зело упростить схемотехнику узла без потери количественной характеристики.

Карта памяти и программная модель 4-тритного компьютера с 8-тритной шиной адреса выглядят следующим
образом:
Image
Регистр А - аккумулятор.
Регистр В - обычно второй аргумент, но и temp-регистр для многих операций.
Регистр F - флаги, троичных флагов два: C - carry (перенос) S - sign (знак).
Два троичных флага сохраняются как 6 двоичных, при этом появляется Z и NZ... etc.

4-разрядная шина данных в троичном процессоре позволяет передать 81 независимый код.

АЛУ при работе со знаковыми аргументами работает в диапазоне -40 ... 0 ... +40.

Возможна 81 оригинальная команда данного процессора.
С командами я поступил в этот раз несколько иначе: я добавлял их понемногу в набор и пробовал
программировать. Если выразительных средств не хватало, добавлял еще команд.

В итоге на данный момент минимальный набор команд следующий:

 Система команд 4-тритного ЦПУ
Image
Image
Image

Я в этом наборе программировал довольно успешно, и без особых неудобств.

Бросается в глаза, что опять в наборе нет CALL и RET - это сделано сейчас специально. 8)
Аппаратные средства заложены на CALL, RET и INT (а он с ними связан).
Но уж больно мне захотелось попробовать одну древнюю идею Сеймура Крея. В системе команд
его компьютера не было CALL и RET, но было указание, что если они вам очень нужны -
реализуйте их программно! :wink: Я попробовал - и получилось! :o

Я пока не выкладываю никаких библиотек и проектов, поскольку версия проекта - Alfa, а альфа-
тестирование обычно проводится силами штатных разработчиков
. ©

Так что в заключение - видео, как всё это реально работает:

 Ternary computer video

Я уже посмотрел это видео с разных компьютеров и отметил, что Ютуб зачастую снижает качество
картинки, что для схемотехники весьма неприятно. Оригинальный материал можно взять здесь.

Я не накладывал на изображение музыки, чтобы не нарушать ничьих авторских прав...
Но сейчас посмотрел в папку, откуда я выкладываю картинки:
C:\Tri_CPU_SyScmd1.gif
C:\Tri_CPU_SyScmd2.gif
C:\Tri_CPU_SyScmd3.gif
C:\Tri_MemoryMap3.gif
C:\Triplo_Max_-_Shadow
:roll:
Вот Tri_plo_Max_-_Shadow - вполне можно послушать фоном для этого ролика... :D
iLavr
User avatar
Lavr
Supreme God
Posts: 16628
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 4-trit Processor

Post by Lavr »

Проект разрабатывался в Proteus 6.7 Pro под Windows 98, dll-библиотеки элементов троичной логики
были скомпилированы Microsoft Visual C++ 5.0 под Windows 98.
Проект тестировался в Proteus 7.7 Pro под Windows 7 и в Proteus 8.5 под Windows 10, (за него -
огромное спасибо коллеге PVV !
)
.
Захват видео сделан как раз в Proteus 8.5 под Windows 10, поскольку там более мощный компьютер.

Модель троичного процессора выполняет демонстрационную программу вывода на дисплей LCD Nokia 3310
четырёх демонстрационных изображений и опроса четырёх кнопок, согласно нажатию которых и выводится
соответствующее изображение:

TernCPU_7.gif
TernCPU_7.gif (41.83 KiB) Viewed 16395 times

Скриншоты дисплеев отличаются, поскольку Proteus 8.5 не поддерживает почему-то старую модель LCD-дисплея
Nokia 3310
, но у него есть в наборе 3 модели этого дисплея, менее красочные, но зато и без фоновой надписи
Demo Version...

Заполнение экрана кодом и вывод шахматной клетки я не стал захватывать на видео как менее информативные
изображения, лишь увеличивающие размер видео-файла.

Демонстрационная программа была написана в кодах, и в бинарник собиралась вручную через WinHEX.

 Демонстрационная программа .ASM

Code: Select all

;-------------------------------------------------------
;   Демонстрационная программа троичного процессора
;   Очистка экрана, растровое изображение, клетка.
;-------------------------------------------------------
; Примечание:
; novenary - девятиричный; 9, девять, Novem - латынь;
; Л.Г.Суменко. Англо-русский словарь по информационным
; технологиям. М.: ГП ЦНИИС, 2003.
;
; ADDRESS
;HEX = NOVEM;
;---------- В странице 0 - различные переменные и адреса вызовов
000H = 0000  A8  MVA; 00Hex;
001H = 0001  AA  00N;
002H = 0002  69  OUT; 00N;
003H = 0003  AA  00N; сброс порта 0, программный RESET LCD;
004H = 0004  86  JMP; FAR 0416N;
005H = 0005  A0  04N;
006H = 0006  A1  05N;
007H = 0007
008H = 0008
009H = 0010
00AH = 0011
00BH = 0012
00CH = 0013
00DH = 0014
00EH = 0015
00FH = 0016
010H = 0017
011H = 0018
012H = 0020
013H = 0021
014H = 0022
015H = 0023
016H = 0024
017H = 0025
018H = 0026
019H = 0027
01AH = 0028
01BH = 0030
01CH = 0031
01DH = 0032
01EH = 0033
01FH = 0034
020H = 0035
021H = 0036
022H = 0037
023H = 0038
024H = 0040
025H = 0041
026H = 0042
027H = 0043
028H = 0044
029H = 0045
02AH = 0046
02BH = 0047
02CH = 0048
02DH = 0050
02EH = 0051
02FH = 0052
030H = 0053
031H = 0054
032H = 0055
033H = 0056
034H = 0057
035H = 0058
036H = 0060
037H = 0061
038H = 0062
039H = 0063
03AH = 0064
03BH = 0065
03CH = 0066
03DH = 0067
03EH = 0068
03FH = 0070
040H = 0071
041H = 0072
042H = 0073
043H = 0074
044H = 0075
045H = 0076
046H = 0077  A8  01N; возврат из вывода растра;
047H = 0078  AA  00N;
048H = 0080  A8  01N; возврат из заполнения клеткой;
049H = 0081  AA  00N;
04AH = 0082  AA  00N; возврат из X=0, Y=0;
04BH = 0083  AA  00N;
04CH = 0084  A8  01N; возврат из заполнения экрана;
04DH = 0085  AA  00N;
04EH = 0086  55  88N; 0FH  - слово заполнения экрана
04FH = 0087  54  87N; храним счетчик
050H = 0088  AA  00N; храним режим индикатора
;---------- В странице 1 основные циклы и клавиатура
; 4 - 86  Коды
; 3 - 82  нажатия
; 2 - 68  клавиш.
; 1 - 28
051H = 0100  6A  IN;  читаем порт 3;
052H = 0101  A2  03N; если не нажато - 88N = 40D = 1111;
053H = 0102  14  ROR; сдвинем вправо --> C;
054H = 0103  50  SKIP CP; есть перенос +;
055H = 0104  85  JMP S; ---> Pressed '4';
056H = 0105  96  26N;
057H = 0106  AA  NOP; для SKIP;
058H = 0107  14  ROR; сдвинем вправо --> C;
059H = 0108  50  SKIP CP; есть перенос +;
05AH = 0110  85  JMP S; ---> Pressed '3';
05BH = 0111  25  38N;
05CH = 0112  AA  NOP; для SKIP;
05DH = 0113  14  ROR; сдвинем вправо --> C;
05EH = 0114  50  SKIP CP; есть перенос +;
05FH = 0115  85  JMP S; ---> Pressed '2';
060H = 0116  09  42N;
061H = 0117  AA  NOP; для SKIP;
062H = 0118  14  ROR; сдвинем вправо --> C;
063H = 0120  50  SKIP CP; есть перенос +;
064H = 0121  85  JMP S; ---> Pressed '1';
065H = 0122  62  63N;
066H = 0123  AA  NOP; для SKIP;
067H = 0124  85  JMP S; ---> 0100N;
068H = 0125  AA  00N; -> в цикл: читаем порт 3;

;----------- Pressed '4' - заполнение клеткой
069H = 0126  A8  MVA;
06AH = 0127  A8  01N;
06BH = 0128  A5  STA Z;
06CH = 0130  5A  80N;
06DH = 0131  A8  MVA;
06EH = 0132  AA  00N;
06FH = 0133  A5  STA Z; [0080] - возврат из заполнения клеткой;
070H = 0134  58  81N;
071H = 0135  86  JMP; FAR 0300N;
072H = 0136  A2  03N;
073H = 0137  AA  00N;

;----------- Pressed '3'
074H = 0138  86  JMP; FAR 2675N;
075H = 0140  96  26N; в цикл
076H = 0141  41  75N; второй заставки (переход исправлен)

;----------- Pressed '2' - очистка экрана байтом;
077H = 0142  A8  MVA;
078H = 0143  A8  01N;
079H = 0144  A5  STA Z;
07AH = 0145  50  84N;
07BH = 0146  A8  MVA;
07CH = 0147  AA  00N;
07DH = 0148  A5  STA Z; [0084N] адрес возврата из процедуры
07EH = 0150  51  85N;   очистка экрана байтом = 0100N;

07FH = 0151  A8  MVA;
080H = 0152  A9  02N;
081H = 0153  A5  STA Z;
082H = 0154  59  82N;
083H = 0155  A8  MVA;
084H = 0156  21  35N;
085H = 0157  A5  STA Z; [0082N] адрес возврата из процедуры
086H = 0158  52  83N;    X = 0; Y = 0; => 0235N;
087H = 0160  86  JMP; FAR 0200N;
088H = 0161  A9  02N;
089H = 0162  AA  00N;

;----------- Pressed '1' - заполнение экрана точечным рисунком;
08AH = 0163  A8  MVA;
08BH = 0164  A8  01N;
08CH = 0165  A5  STA Z;
08DH = 0166  44  77N;
08EH = 0167  A8  MVA;
08FH = 0168  AA  00N;
090H = 0170  A5  STA Z; [0077N] адрес возврата из процедуры
091H = 0171  45  78N;   вывода растра; => 0100N;

092H = 0172  A8  MVA;
093H = 0173  A8  01N;
094H = 0174  A5  STA Z;
095H = 0175  59  82N;
096H = 0176  A8  MVA;
097H = 0177  50  84N;
098H = 0178  A5  STA Z; [0082N] адрес возврата из процедуры
099H = 0180  52  83N;    X = 0; Y = 0; вызов => 0200N ---> 0184N;

09AH = 0181  86  JMP; FAR 0200N - вызов процедуры X = 0; Y = 0;
09BH = 0182  A9  02N;
09CH = 0183  AA  00N;
;----------- возврат будет сюда:
09DH = 0184  A8  MVA; адрес, с которого начинается
09EH = 0185  94  27N; массив точечного изображения
09FH = 0186  86  JMP; FAR 0500N - вызов процедуры вывода растра;
0A0H = 0187  A1  05N;
0A1H = 0188  AA  00N;
;---------- В странице 2 - очистка экрана байтом;
;---------- Процедура X = 0; Y = 0; с возвратом;
0A2H = 0200  A8  MVA; ii11;
0A3H = 0201  A5  03H; ii11 - бит 2 D/C в состоянии "0"-команды
0A4H = 0202  69  OUT; 00N; включаем "CS" индикатора
0A5H = 0203  AA  00N; бит 2 D/C в состоянии "0"-команды

0A6H = 0204  A8  MVA; 00H - Low;
0A7H = 0205  AA  00N; iiii;
0A8H = 0206  69  OUT; P1N;
0A9H = 0207  A8  01N;
0AAH = 0208  A8  MVA; 04H - High;
0ABH = 0210  9A  04H; i1ii;
0ACH = 0211  69  OUT; P2N;
0ADH = 0212  A9  02N; 40h - в индикатор ; set Y = 0 - выбор строки;
0AEH = 0213  69  OUT; P1N;
0AFH = 0214  A8  01N; остановим сдвиг

0B0H = 0215  A8  MVA; 00H - Low;
0B1H = 0216  AA  00N; iiii;
0B2H = 0217  69  OUT; P1N;
0B3H = 0218  A8  01N;
0B4H = 0220  A8  MVA; 08H - High;
0B5H = 0221  6A  08H; 1iii;
0B6H = 0222  69  OUT; P2N;
0B7H = 0223  A9  02N; 80h - в индикатор ; set X = 0 - выбор позиции в строке;
0B8H = 0224  69  OUT; P1N;
0B9H = 0225  A8  01N; остановим сдвиг

0BAH = 0226  A8  MVA;
0BBH = 0227  95  07H; i111 - бит "D/C" в состоянии "1"-данные;
0BCH = 0228  A5  STA Z; сохраним режим индикатора
0BDH = 0230  55  88N; ниже 100N в "0"-странице;
0BEH = 0231  69  OUT; 00N; включаем "CS" индикатора и
0BFH = 0232  AA  00N; бит 2 D/C в состояние "1"-данные;
;---------------------Приём данных с X = 0; Y = 0; -------------
0C0H = 0233  91  JMP ZI; [0082N];
0C1H = 0234  59  82N;  косвенный выход по адресу [0082N];

;---------------------------------------------------
; счетчик 1F8 = (48/8)строк*84байта=6*84=504байта;
; 81*6=486(в циклах)+18(байт остаток)=504;
;------------- цикл очистки экрана словом 1111 -----
0C2H = 0235  A8  MVA; 06H - раз по 81;
0C3H = 0236  18  06D;
0C4H = 0237  A5  STA Z; сохраним счетчик по 81;
0C5H = 0238  54  87N; ниже 100N-2 в "0"-странице;

0C6H = 0240  A9  LDA Z; читаем [86N]; <--- 0240N;
0C7H = 0241  56  86N;  слово заполнения экрана

0C8H = 0242  A2  MVB; обнулим B (счетчик 0 ... 80)
0C9H = 0243  00  00D; 44N;
0CAH = 0244  69  OUT; P1N <--- 0244N;
0CBH = 0245  A8  01N;
0CCH = 0246  69  OUT; P2N;
0CDH = 0247  A9  02N; в индикатор - слово заполнения -
0CEH = 0248  69  OUT; P1N;
0CFH = 0250  A8  01N; остановим сдвиг

0D0H = 0251  92  XCAB; A<->B
0D1H = 0252  29  INC;  A(= B+1)
0D2H = 0253  92  XCAB; A<->B
0D3H = 0254  41  SKIP Z
0D4H = 0255  85  JMP S; ---> 0244N;
0D5H = 0256  00  44N;
0D6H = 0257  AA  NOP; для SKIP;

0D7H = 0258  A9  LDA Z; читаем счетчик по 81;
0D8H = 0260  54  87N; ниже 100N-2 в "0"-странице;
0D9H = 0261  22  DEC; A
0DAH = 0262  A5  STA Z; сохраним счетчик по 81;
0DBH = 0263  54  87N; ниже 100N-2 в "0"-странице;
0DCH = 0264  41  SKIP Z
0DDH = 0265  85  JMP S; ---> 0240N;
0DEH = 0266  0A  40N;
0DFH = 0267  AA  NOP; для SKIP;------------------

0E0H = 0268  A9  LDA Z; читаем [86N]; <--- 0268N;
0E1H = 0270  56  86N;  слово заполнения экрана
0E2H = 0271  A2  MVB; B - (счетчик 18 ... 0)
0E3H = 0272  60  64N; 18D ------- последних байт;
0E4H = 0273  69  OUT; P1N <--- 0273N;
0E5H = 0274  A8  01N;
0E6H = 0275  69  OUT; P2N;
0E7H = 0276  A9  02N; в индикатор - слово заполнения -
0E8H = 0277  69  OUT; P1N;
0E9H = 0278  A8  01N; остановим сдвиг

0EAH = 0280  92  XCAB; A<->B
0EBH = 0281  22  DEC;  A(= B-1)
0ECH = 0282  92  XCAB; A<->B
0EDH = 0283  41  SKIP Z
0EEH = 0284  85  JMP S; ---> 0273N;
0EFH = 0285  42  73N;
0F0H = 0286  AA  NOP; для SKIP;
0F1H = 0287  91  JMP ZI; [0084N];
0F2H = 0288  50  84N;  косвенный выход по адресу [0084N];

;---------- В странице 3 - заполнение экрана шахматной клеткой;
0F3H = 0300  A8  MVA; ii11;
0F4H = 0301  A5  03H; ii11 - бит 2 D/C в состоянии "0"-команды

0F5H = 0302  69  OUT; 00N; включаем "CS" индикатора
0F6H = 0303  AA  00N; бит 2 D/C в состоянии "0"-команды
0F7H = 0304  A8  MVA; 00H - Low;
0F8H = 0305  AA  00N; iiii;
0F9H = 0306  69  OUT; P1N;
0FAH = 0307  A8  01N;
0FBH = 0308  A8  MVA; 04H - High;
0FCH = 0310  9A  04H; i1ii;
0FDH = 0311  69  OUT; P2N;
0FEH = 0312  A9  02N; 40h - в индикатор ; set Y = 0 - выбор строки;
0FFH = 0313  69  OUT; P1N;
100H = 0314  A8  01N; остановим сдвиг

101H = 0315  A8  MVA; 00H - Low;
102H = 0316  AA  00N; iiii;
103H = 0317  69  OUT; P1N;
104H = 0318  A8  01N;
105H = 0320  A8  MVA; 08H - High;
106H = 0321  6A  08H; 1iii;
107H = 0322  69  OUT; P2N;
108H = 0323  A9  02N; 80h - в индикатор ; set X = 0 - позиция в строке;
109H = 0324  69  OUT; P1N;
10AH = 0325  A8  01N; остановим сдвиг

10BH = 0326  A8  MVA;
10CH = 0327  95  07H; i111 - бит "D/C" в состоянии "1"-данные;
10DH = 0328  A5  STA Z; сохраним режим индикатора
10EH = 0330  55  88N; ниже 100N в "0"-странице;
10FH = 0331  69  OUT; 00N; включаем "CS" индикатора и
110H = 0332  AA  00N; бит 2 D/C в состояние "1"-данные;
;---------------------Приём данных с X = 0; Y = 0; -------------
;------------------- цикл заполнения экрана клеткой ------------
111H = 0333  A8  MVA; 42D - раза по 12 = 504 байта; 0260N;
112H = 0334  54  87N; 2D + 40D = 42D счетчик вверх до 0 = Z;
113H = 0335  A5  STA Z; сохраним счетчик до 42;
114H = 0336  54  87N; ниже 100N-2 в "0"-странице;
115H = 0337  A8  MVA; 88N; <--- 0337N;
116H = 0338  55  88N; 0FH  - слово заполнения экрана AA=0
117H = 0340  A2  MVB; 12D; <--- 0340N;
118H = 0341  14  57N; 12D;(счетчик байт в клетке 12 ... 0)
119H = 0342  69  OUT; P1N <--- 0342N;
11AH = 0343  A8  01N;
11BH = 0344  69  OUT; P2N;
11CH = 0345  A9  02N; в индикатор слово заполнения --->
11DH = 0346  69  OUT; P1N;
11EH = 0347  A8  01N; остановим сдвиг
11FH = 0348  92  XCAB; A<->B
120H = 0350  22  DEC;  A(= B-1)
121H = 0351  92  XCAB; A<->B
122H = 0352  41  SKIP Z
123H = 0353  85  JMP S; ---> 0342N;
124H = 0354  09  42N;
125H = 0355  AA  NOP; для SKIP;
126H = 0356  26  CMA; инвертируем байт заполнения в B (влияет на флаги)
127H = 0357  92  XCAB; A<->B сохраним байт заполнения в B;
128H = 0358  A9  LDA Z; читаем счетчик до 42; (не портит B)
129H = 0360  54  87N; ниже 100N-2 в "0"-странице;
12AH = 0361  29  INC; A - увеличим счетчик
12BH = 0362  A5  STA Z; сохраним счетчик до 42; (не портит B)
12CH = 0363  54  87N; ниже 100N-2 в "0"-странице;
12DH = 0364  92  XCAB; A<->B вернём байт заполнения в A;
12EH = 0365  41  SKIP Z
12FH = 0366  85  JMP S; ---> 0340N;
130H = 0367  0A  40N;
131H = 0368  AA  NOP; для SKIP;
132H = 0370  91  JMP ZI; [0080N];
133H = 0371  5A  80N; косвенный выход по адресу [0080N];
134H = 0372
135H = 0373
136H = 0374
137H = 0375
138H = 0376
139H = 0377
13AH = 0378
13BH = 0380
13CH = 0381
13DH = 0382
13EH = 0383
13FH = 0384
140H = 0385
141H = 0386
142H = 0387
143H = 0388
;---------- В странице 4 - процедуры для вывода на экран заставки;
144H = 0400  A8  MVA; 27N;
145H = 0401  94  27N;
146H = 0402  86  JMP; FAR - Втрое вхождение в заставку (их 18);
147H = 0403  A6  06N;
148H = 0404  AA  00N; --> 0600N; 16x5=80 - остальные вхождения;
;~~~~~~~~~~~~~~~~ВКЛЮЧЕНИЕ LCD~~~~~~~~~~~~~~~~~
149H = 0405  A8  MVA; 01Hex;
14AH = 0406  A9  01H; iii1;
14BH = 0407  69  OUT; 00N;
14CH = 0408  AA  00N; снимаем "Сброс" индикатора
14DH = 0410  A8  MVA; 03H;
14EH = 0411  A5  03H; ii11
14FH = 0412  69  OUT; 00N; включаем бит 1 - "CS" индикатора
150H = 0413  AA  00N; бит 2 D/C в состоянии "0"-команды
;~~~~~~~~~~~~~~~~ВЫДАЁМ КОМАНДЫ~~~~~~~~~~~~~~~~
; 21 C8 06 13 20 0C - строка инициализации LCD;
;~~~~~~~~~~~~~~~~INIT LCD~~~~~~~~~~~~~~~~~~~~~~
;----------  0010 0PVH Bin
;----------          H - набор инструкций; H = 0 - обычный; H = 1 - расширенный.
;----------         V -- адресация; V = 1 - после записи байта увеличивается указатель адреса строк; V = 0 - столбцов;
;----------        P --- P = 1 - кристалл включен; P = 0 - кристалл в режиме низкого энерго-потребления;
;----------  0x2......
151H = 0414  A8  MVA; 01H - Low;
152H = 0415  A9  01H; iii1;
153H = 0416  69  OUT; P1N;
154H = 0417  A8  01N;
155H = 0418  A8  MVA; 02H - High;
156H = 0420  A6  02H;
157H = 0421  69  OUT; P2N;
158H = 0422  A9  02N; в индикатор - 21H ->
159H = 0423  69  OUT; P1N;
15AH = 0424  A8  01N; остановим сдвиг
;----------  включить напряжение питания дисплея
;----------  1VVV VVVV Bin
;----------  1100 1000 = 0C8H
15BH = 0425  A8  MVA; 08H - Low;
15CH = 0426  6A  08H;
15DH = 0427  69  OUT; P1N;
15EH = 0428  A8  01N;
15FH = 0430  A8  MVA; 0CH - High;
160H = 0431  5A  0CH;
161H = 0432  69  OUT; P2N;
162H = 0433  A9  02N; в индикатор - 0C8H ->
163H = 0434  69  OUT; P1N;
164H = 0435  A8  01N; остановим сдвиг
;----------  установить температурный коэффициент
;----------  0000 01TT Bin
;----------  0000 0110 = 06H
165H = 0436  A8  MVA; 06H - Low;
166H = 0437  96  06H;
167H = 0438  69  OUT; P1N;
168H = 0440  A8  01N;
169H = 0441  A8  MVA; 00H - High;
16AH = 0442  AA  00H;
16BH = 0443  69  OUT; P2N;
16CH = 0444  A9  02N; в индикатор - 06H ->
16DH = 0445  69  OUT; P1N;
16EH = 0446  A8  01N; остановим сдвиг
;----------  выбрать систему питания
;----------  0001 0BBB Bin
;----------  0001 0011 = 13H;
16FH = 0447  A8  MVA; 03H - Low;
170H = 0448  A5  03H;
171H = 0450  69  OUT; P1N;
172H = 0451  A8  01N;
173H = 0452  A8  MVA; 01H - High;
174H = 0453  A9  01H;
175H = 0454  69  OUT; P2N;
176H = 0455  A9  02N; в индикатор - 13H ->
177H = 0456  69  OUT; P1N;
178H = 0457  A8  01N; остановим сдвиг
;----------  Набор инструкций H=0 (обычный):
;----------  0x2.....0
179H = 0458  A8  MVA; 00H - Low;
17AH = 0460  AA  00H;
17BH = 0461  69  OUT; P1N;
17CH = 0462  A8  01N;
17DH = 0463  A8  MVA; 02H - High;
17EH = 0464  A6  02H;
17FH = 0465  69  OUT; P2N;
180H = 0466  A9  02N; в индикатор - 20H ->
181H = 0467  69  OUT; P1N;
182H = 0468  A8  01N; остановим сдвиг
;----------  режимы отображения
;----------  0000 1D0E Bin
;----------        D=0, E=0 - дисплей пустой;
;----------        D=1, E=0 - обычный режим ("0" - светлая точка, "1"-тёмная);
;----------        D=0, E=1 - все элементы включены;
;----------        D=1, E=1 - режим инверсии ("1" - светлая точка, "0"-тёмная).
;----------  0000 1100 = 0CH - обычный режим ("0" - светлая точка, "1"-тёмная)
183H = 0470  A8  MVA; 0CH - Low;
184H = 0471  5A  0CH;
185H = 0472  69  OUT; P1N;
186H = 0473  A8  01N;
187H = 0474  A8  MVA; 00H - High;
188H = 0475  AA  00H;
189H = 0476  69  OUT; P2N;
18AH = 0477  A9  02N; в индикатор - 0CH ->
18BH = 0478  69  OUT; P1N;
18CH = 0480  A8  01N; остановим сдвиг

18DH = 0481  A8  MVA; 07H;
18EH = 0482  95  07H; i111;
18FH = 0483  A5  STA Z; сохраним режим индикатора
190H = 0484  55  88N; ниже 100N в "0"-странице;
191H = 0485  69  OUT; 00N; включаем "D/C" индикатора = "1"
192H = 0486  AA  00N; включаем "приём данных"

193H = 0487  A8  MVA; 27N;
194H = 0488  94  27N;----------- Первое вхождение в заставку (их 18);
;---------- В странице 5 - вывод на экран самой заставки;
;---------- сюда приходим с адресом в A = 27N = -15d -> 94;
195H = 0500  89  STA S;
196H = 0501  A6  06N; - <- ADDR_Low = 0506N; S - 06N = A6;
197H = 0502  29  INC
198H = 0503  89  STA S;
199H = 0504  88  11N; - <- ADDR_High = 0511N; S - 11N = 88;
19AH = 0505  A6  LDA S;
19BH = 0506  94  27N;   <-- ADDR_Low 57h = 0506N;
19CH = 0507  69  OUT; P1N;
19DH = 0508  A8  01N; младшая часть слова - в регистр сдвига SPI;
19EH = 0510  A6  LDA S;
19FH = 0511  95  28N; <-- ADDR_High 5Bh = 0511N;
1A0H = 0512  69  OUT; P2N;
1A1H = 0513  A9  02N; выводим в индикатор слово из памяти --->
1A2H = 0514  69  OUT; P1N;
1A3H = 0515  A8  01N; остановим сдвиг
1A4H = 0516  A6  LDA S; модифицируем в памяти
1A5H = 0517  88  11N; - <- ADDR_High;
1A6H = 0518  29  INC;   текущий адрес для следующего слова;
1A7H = 0520  50  SKIP C; есть перенос - ЭТО ПРАВИЛЬНО!!!
1A8H = 0521  85  JMP S; ---> 0500N;
1A9H = 0522  AA  00N;
1AAH = 0523  AA  NOP; для SKIP;
1ABH = 0524  86  JMP; FAR -> 0411N MVA 27N -> и в следующий блок;
1ACH = 0525  A0  04N; - 04
1ADH = 0526  AA  00N; - 11 ----- ERROR -> 0400N исправлено;
;---------- отсюда расположен блок 56 слов картинки экрана
;---------- в памяти дисплея 504 байта или 1008 по 2 слова
;---------- 56 x 18 = 1008, таких блоков требуется 18.
1AEH = 0527
1AFH = 0528
;   ...     56 байт картинки;
1E4H = 0587
1E5H = 0588
;---------- Блок 2.
1E6H = 0600
1E7H = 0601
;   ...
235H = 0687
236H = 0688
;---------- Блок 3.
237H = 0700
238H = 0701
;   ...
286H = 0787
287H = 0788
;---------- Блок 4.
288H = 0800
289H = 0801
;   ...
2D7H = 0887
2D8H = 0888
;=================================
;---------- Блок 5.
400H = 1000
401H = 1001
;   ...
43DH = 1067
43EH = 1068

44FH = 1087
450H = 1088
;---------- Блок 6.
451H = 1100
452H = 1101

4A0H = 1187
4A1H = 1188
;---------- Блок 7.
4A2H = 1200
4A3H = 1201

4F1H = 1287
4F2H = 1288
;---------- Блок 8.
4F3H = 1300
4F4H = 1301
;   ...
542H = 1387
543H = 1388
;---------- Блок 9.
544H = 1400
545H = 1401

593H = 1487
594H = 1488
;---------- Блок 10.
595H = 1500
596H = 1501
;   ...
5E4H = 1587
5E5H = 1588
;---------- Блок 11.
5E6H = 1600
5E7H = 1601
;   ...
635H = 1687
636H = 1688
;---------- Блок 12.
637H = 1700
638H = 1701
;   ...
686H = 1787
687H = 1788
;---------- Блок 13.
688H = 1800
689H = 1801
;   ...
6D7H = 1887
6D8H = 1888
;---------- Блок 14.
;========================================
800H = 2000
801H = 2001
;   ...
84FH = 2087
850H = 2088
;---------- Блок 15.
851H = 2100
852H = 2101

8A0H = 2187
8A1H = 2188
;---------- Блок 16.
8A2H = 2200
8A3H = 2201
;   ...
8F1H = 2287
8F2H = 2288
;---------- Блок 17.
8F3H = 2300
8F4H = 2301
;   ...
942H = 2387
943H = 2388
;---------- Блок 18.
944H = 2400
945H = 2401
;   ...
993H = 2487  AA  00N;
994H = 2488  AA  00N; здесь заканчивается блок картинки;
;----------- Блок переходов для картинки, 02 -> 0411 = A088; ;   ...
995H = 2500  A8  MVA; 27N; 91AA
996H = 2501  94  27N;
997H = 2502  86  JMP; FAR - Вхождение в заставку 03;
998H = 2503  A4  07N;
999H = 2504  AA  00N; --> 0700N;

99AH = 2505  A8  MVA; 27N; 91A1
99BH = 2506  94  27N;
99CH = 2507  86  JMP; FAR - Вхождение в заставку 04;
99DH = 2508  A5  08N;
99EH = 2510  AA  00N; --> 0800N;

99FH = 2511  A8  MVA; 27N; 9188
9A0H = 2512  94  27N;
9A1H = 2513  86  JMP; FAR - Вхождение в заставку 05;
9A2H = 2514  8A  10N;
9A3H = 2515  AA  00N; --> 1000N;

9A4H = 2516  A8  MVA; 27N; 9186
9A5H = 2517  94  27N;
9A6H = 2518  86  JMP; FAR - Вхождение в заставку 06;
9A7H = 2520  88  11N;
9A8H = 2521  AA  00N; --> 1100N;

9A9H = 2522  A8  MVA; 27N; 9199
9AAH = 2523  94  27N;
9ABH = 2524  86  JMP; FAR - Вхождение в заставку 07;
9ACH = 2525  89  12N;
9ADH = 2526  AA  00N; --> 1200N;

9AEH = 2527  A8  MVA; 27N; 9194
9AFH = 2528  94  27N;
9B0H = 2530  86  JMP; FAR - Вхождение в заставку 08;
9B1H = 2531  82  13N;
9B2H = 2532  AA  00N; --> 1300N;

9B3H = 2533  A8  MVA; 27N; 9122
9B4H = 2534  94  27N;
9B5H = 2535  86  JMP; FAR - Вхождение в заставку 09;
9B6H = 2536  80  14N;
9B7H = 2537  AA  00N; --> 1400N;

9B8H = 2538  A8  MVA; 27N; 9125
9B9H = 2540  94  27N;
9BAH = 2541  86  JMP; FAR - Вхождение в заставку 10;
9BBH = 2542  81  15N;
9BCH = 2543  AA  00N; --> 1500N;

9BDH = 2544  A8  MVA; 27N; 9100
9BEH = 2545  94  27N;
9BFH = 2546  86  JMP; FAR - Вхождение в заставку 11;
9C0H = 2547  86  16N;
9C1H = 2548  AA  00N; --> 1600N;

9C2H = 2550  A8  MVA; 27N; 911A
9C3H = 2551  94  27N;
9C4H = 2552  86  JMP; FAR - Вхождение в заставку 12;
9C5H = 2553  84  17N;
9C6H = 2554  AA  00N; --> 1700N;

9C7H = 2555  A8  MVA; 27N; 9111
9C8H = 2556  94  27N;
9C9H = 2557  86  JMP; FAR - Вхождение в заставку 13;
9CAH = 2558  85  18N;
9CBH = 2560  AA  00N; --> 1800N;

9CCH = 2561  A8  MVA; 27N; 9168
9CDH = 2562  94  27N;
9CEH = 2563  86  JMP; FAR - Вхождение в заставку 14;
9CFH = 2564  9A  20N;
9D0H = 2565  AA  00N; --> 2000N;

9D1H = 2566  A8  MVA; 27N; 9166
9D2H = 2567  94  27N;
9D3H = 2568  86  JMP; FAR - Вхождение в заставку 15;
9D4H = 2570  98  21N;
9D5H = 2571  AA  00N; --> 2100N;

9D6H = 2572  A8  MVA; 27N; 9149
9D7H = 2573  94  27N;
9D8H = 2574  86  JMP; FAR - Вхождение в заставку 16;
9D9H = 2575  99  22N;
9DAH = 2576  AA  00N; --> 2200N;

9DBH = 2577  A8  MVA; 27N; 9144
9DCH = 2578  94  27N;
9DDH = 2580  86  JMP; FAR - Вхождение в заставку 17;
9DEH = 2581  92  23N;
9DFH = 2582  AA  00N; --> 2300N;

9E0H = 2583  A8  MVA; 27N; 9152
9E1H = 2584  94  27N;
9E2H = 2585  86  JMP; FAR - Вхождение в заставку 18;
9E3H = 2586  90  24N;
9E4H = 2587  AA  00N; --> 2400N;
9E5H = 2588  00;--------- END ---------

9E6H = 2600
9E7H = 2601
9E8H = 2602
9E9H = 2603
9EAH = 2604
9EBH = 2605
9ECH = 2606
9EDH = 2607
9EEH = 2608
9EFH = 2610
9F0H = 2611
9F1H = 2612
9F2H = 2613
9F3H = 2614
9F4H = 2615
9F5H = 2616
9F6H = 2617
9F7H = 2618
9F8H = 2620
9F9H = 2621
9FAH = 2622
9FBH = 2623
9FCH = 2624
9FDH = 2625
9FEH = 2626
9FFH = 2627
A00H = 2628
A01H = 2630
A02H = 2631
A03H = 2632
A04H = 2633
A05H = 2634
A06H = 2635
A07H = 2636
A08H = 2637
A09H = 2638
A0AH = 2640
A0BH = 2641
A0CH = 2642
A0DH = 2643
A0EH = 2644
A0FH = 2645
A10H = 2646
A11H = 2647
A12H = 2648
A13H = 2650
A14H = 2651
A15H = 2652
A16H = 2653
A17H = 2654
A18H = 2655
A19H = 2656
A1AH = 2657
A1BH = 2658
A1CH = 2660
A1DH = 2661
A1EH = 2662
A1FH = 2663
A20H = 2664
A21H = 2665
A22H = 2666
A23H = 2667
A24H = 2668
;----------- Второй вход в заставку
A25H = 2670  A8  MVA; 27N; = 964A;
A26H = 2671  94  27N;
A27H = 2672  86  JMP; FAR - Вхождение в заставку 02;
A28H = 2673  95  28N;
A29H = 2674  AA  00N; --> 2800N;

;----------- Вызов второй заставки;
A2AH = 2675  A8  MVA;
A2BH = 2676  96  26N; 26..N;
A2CH = 2677  A5  STA Z;
A2DH = 2678  59  82N;
A2EH = 2680  A8  MVA;
A2FH = 2681  54  87N; 2687N;
A30H = 2682  A5  STA Z; [0082N] адрес возврата из процедуры
A31H = 2683  52  83N;    X = 0; Y = 0; вызов => 0200N ---> 0184N;
A32H = 2684  86  JMP; FAR 0200N - вызов процедуры X = 0; Y = 0;
A33H = 2685  A9  02N;
A34H = 2686  AA  00N;
;----------- возврат будет сюда: 2687N;
A35H = 2687  A8  MVA; 27N;
A36H = 2688  94  27N; первый вход в блок картинки;

;---------- отсюда расположен 2-й блок 56 слов картинки экрана
;---------- в памяти дисплея 504 байта или 1008 по 2 слова
;---------- 56 x 18 = 1008, таких блоков требуется 18.
;---------- Блок 1.
A37H = 2700
A38H = 2701
;   ...
A86H = 2787
A87H = 2788
;---------- Блок 2.
A88H = 2800
A89H = 2801
;   ...
AD7H = 2887
AD8H = 2888
;====================================
;---------- Блок 3.
C00H = 3000
C01H = 3001
;   ...
C4FH = 3087
C50H = 3088
;---------- Блок 4.
C51H = 3100
C52H = 3101
;   ...
CA0H = 3187
CA1H = 3188
;---------- Блок 5.
CA2H = 3200
CA3H = 3201
;   ...
CF1H = 3287
CF2H = 3288
;---------- Блок 6.
CF3H = 3300
CF4H = 3301
;   ...
D42H = 3387
D43H = 3388
;---------- Блок 7.
D44H = 3400
D45H = 3401

D93H = 3487
D94H = 3488
;---------- Блок 8.
D95H = 3500
D96H = 3501
;   ...
DE4H = 3587
DE5H = 3588
;---------- Блок 9.
DE6H = 3600
DE7H = 3601

E35H = 3687
E36H = 3688
;---------- Блок 10.
E37H = 3700
E38H = 3701
;   ...
E86H = 3787
E87H = 3788
;---------- Блок 11.
E88H = 3800
E89H = 3801

ED7H = 3887
ED8H = 3888
;=========================================
;---------- Блок 12.
1000H =4000
000H = 4000
;   ...
04FH = 4087
050H = 4088
;---------- Блок 13.
051H = 4100
052H = 4101
;   ...
0A0H = 4187
0A1H = 4188
;---------- Блок 14.
0A2H = 4200
0A3H = 4201
;   ...
0F1H = 4287
0F2H = 4288
;---------- Блок 15.
0F3H = 4300
0F4H = 4301
;   ...
142H = 4387
143H = 4388
;---------- Блок 16.
144H = 4400
145H = 4401
;   ...
193H = 4487
194H = 4488
;---------- Блок 17.
195H = 4500
196H = 4501
;   ...
1E4H = 4587
1E5H = 4588
;---------- Блок 18.
1E6H = 4600
1E7H = 4601
;   ...
235H = 4687
236H = 4688  AA  00N; здесь заканчивается блок картинки;

;----------- Блок переходов для картинки, 02 -> 0411 = A088;
237H = 4700  A8  MVA; 27N; = 04AA;
238H = 4701  94  27N;
239H = 4702  86  JMP; FAR - Вхождение в заставку 03;
23AH = 4703  2A  30N;
23BH = 4704  AA  00N; --> 3000N;

23CH = 4705  A8  MVA; 27N; = 04A1;
23DH = 4706  94  27N;
23EH = 4707  86  JMP; FAR - Вхождение в заставку 04;
23FH = 4708  28  31N;
240H = 4710  AA  00N; --> 3100N;

241H = 4711  A8  MVA; 27N; = 0488;
242H = 4712  94  27N;
243H = 4713  86  JMP; FAR - Вхождение в заставку 05;
244H = 4714  29  32N;
245H = 4715  AA  00N; --> 3200N;

246H = 4716  A8  MVA; 27N; = 0486;
247H = 4717  94  27N;
248H = 4718  86  JMP; FAR - Вхождение в заставку 06;
249H = 4720  22  33N;
24AH = 4721  AA  00N; --> 3300N;

24BH = 4722  A8  MVA; 27N; = 0499;
24CH = 4723  94  27N;
24DH = 4724  86  JMP; FAR - Вхождение в заставку 07;
24EH = 4725  20  34N;
24FH = 4726  AA  00N; --> 3400N;

250H = 4727  A8  MVA; 27N; = 0494;
251H = 4728  94  27N;
252H = 4730  86  JMP; FAR - Вхождение в заставку 08;
253H = 4731  21  35N;
254H = 4732  AA  00N; --> 3500N;

255H = 4733  A8  MVA; 27N; = 0422;
256H = 4734  94  27N;
257H = 4735  86  JMP; FAR - Вхождение в заставку 09;
258H = 4736  26  36N;
259H = 4737  AA  00N; --> 3600N;

25AH = 4738  A8  MVA; 27N; = 0425;
25BH = 4740  94  27N;
25CH = 4741  86  JMP; FAR - Вхождение в заставку 10;
25DH = 4742  24  37N;
25EH = 4743  AA  00N; --> 3700N;

25FH = 4744  A8  MVA; 27N; = 0400;
260H = 4745  94  27N;
261H = 4746  86  JMP; FAR - Вхождение в заставку 11;
262H = 4747  25  38N;
263H = 4748  AA  00N; --> 3800N;

264H = 4750  A8  MVA; 27N; = 041A;
265H = 4751  94  27N;
266H = 4752  86  JMP; FAR - Вхождение в заставку 12;
267H = 4753  0A  40N;
268H = 4754  AA  00N; --> 4000N;

269H = 4755  A8  MVA; 27N; = 0411;
26AH = 4756  94  27N;
26BH = 4757  86  JMP; FAR - Вхождение в заставку 13;
26CH = 4758  08  41N;
26DH = 4760  AA  00N; --> 4100N;

26EH = 4761  A8  MVA; 27N; = 0468;
26FH = 4762  94  27N;
270H = 4763  86  JMP; FAR - Вхождение в заставку 14;
271H = 4764  09  42N;
272H = 4765  AA  00N; --> 4200N;

273H = 4766  A8  MVA; 27N; = 0466;
274H = 4767  94  27N;
275H = 4768  86  JMP; FAR - Вхождение в заставку 15;
276H = 4770  02  43N;
277H = 4771  AA  00N; --> 4300N;

278H = 4772  A8  MVA; 27N; = 0449;
279H = 4773  94  27N;
27AH = 4774  86  JMP; FAR - Вхождение в заставку 16;
27BH = 4775  00  44N;
27CH = 4776  AA  00N; --> 4400N;

27DH = 4777  A8  MVA; 27N; = 0444;
27EH = 4778  94  27N;
27FH = 4780  86  JMP; FAR - Вхождение в заставку 17;
280H = 4781  01  45N;
281H = 4782  AA  00N; --> 4500N;

282H = 4783  A8  MVA; 27N; = 0452;
283H = 4784  94  27N;
284H = 4785  86  JMP; FAR - Вхождение в заставку 18;
285H = 4786  06  46N;
286H = 4787  AA  00N; --> 4600N;

287H = 4788  00;--------- END ---------

В коде нет массивов картинок, они формировались отдельной программой и просто вставлялись по месту
через WinHEX методом "копи-паст".

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

Хороший исходник у меня был заготовлен для 4-bit Processor-a.

Ассемблер для модели троичного процессора я собираюсь реализовать на его основе с учетом следующих
соглашений:
Image
iLavr
User avatar
Lavr
Supreme God
Posts: 16628
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 4-trit Processor

Post by Lavr »

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

TernAsm1.gif
TernAsm1.gif (21.33 KiB) Viewed 16166 times

И вроде как даже он работает верно. Основой тест у меня для такого случая - компилятор
должен совершенно идентично собрать бинарник, который ранее был написан вручную в кодах.
Все мои бинарники этот компилятор троичного ассемблера собирает верно, поскольку проверяю
я идентичность утилитой FC (File Compare) в бинарном режиме.

Естественно, по пути я всякие "вкусности" ассемблера тестировал, работает всё вроде правильно,
хотя, безусловно, в связке с троичным компьютером это всё надо потестировать, погонять...

Ну и, естественно, ассемблеру нужны новые и подробные русскоязычные хелпы, ибо и я сам на
троичном ассемблере программист сугубо начинающий... :wink:
Вот сотворением подробных русскоязычных хелпов я сейчас и занят, да и на работе дел полно... :-?
iLavr
User avatar
Shaos
Admin
Posts: 23676
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: 4-trit Processor

Post by Shaos »

хм, а этого я как-то не заметил :oops:

случайно наткнулся на видео на ютюбе и пришёл по ссылке сюда :o


https://youtu.be/AtCoefGf9uc

раз уж это про троичность, то переношу в Ternary (оставив линк в 4-BIT)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16628
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 4-trit Processor

Post by Lavr »

Shaos wrote:хм, а этого я как-то не заметил :oops:
случайно наткнулся на видео на ютюбе и пришёл по ссылке сюда :o
Очень приятно... :lol: Что у себя на форуме ты "этого как-то не заметил"... :mrgreen:
iLavr
User avatar
Shaos
Admin
Posts: 23676
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: 4-trit Processor

Post by Shaos »

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

Re: 4-trit Processor

Post by Lavr »

Lavr wrote:И, собственно, сам компилятор троичного ассемблера я уже с недельку как написал...
...
Ну и, естественно, ассемблеру нужны новые и подробные русскоязычные хелпы, ибо и я сам на
троичном ассемблере программист сугубо начинающий... :wink:
Вот сотворением подробных русскоязычных хелпов я сейчас и занят, да и на работе дел полно... :-?
Что-то на сотворение хелпов у меня эрекции по сей день ну никак не наблюдается... :-?
Хотя, собственно, всё описание системы команд и соглашений ассемблера здесь выше изложено.
Ничего, свыше изложенного, я вряд ли смогу добавить, просто очень муторно и нетворчески
ковыряться опять с компилятором хелп-файлов. :osad:

Поэтому я решил, что надо хотя бы сам компилятор ассемблера выложить, иначе может так
случиться, что в результате неожиданных проблем с HDD я вдруг его и сам потеряю... :wink:

TernAssm.zip
(222.9 KiB) Downloaded 469 times


P.S. Это я надумал на основе исходников TernAssm написать компилятор GIG_Assm, но вспомнил
вдруг, что я сам TernAssm сюда не выкладывал из-за хэлпов...
iLavr
User avatar
Lavr
Supreme God
Posts: 16628
Joined: 21 Oct 2009 15:08
Location: Россия

4-trit Processor & Tower of Hanoi

Post by Lavr »

Троичный компьютер решает головоломку Ханойская башня.

Ternary_Hanoi.png
Ternary_Hanoi.png (51 KiB) Viewed 1317 times

По холодному старту предлагает перемещения произвольным образом,
сохраняя в памяти удачные варианты. Решение находит за 20 ходов.

По тёплому старту реализует ранее найденный алгоритм,
и решает головоломку за 16 ходов.
Подсчет ходов ведётся в девятеричной системе.

 Video Hanoi

P.S. У кого проблемы с качеством видео при просмотре на www.youtube.com,
оригинал видео можно скачать здесь.
iLavr
ra3qdp
Fanat
Posts: 87
Joined: 18 Feb 2019 22:46

Re: 4-trit Processor

Post by ra3qdp »

"позволяет более или менее корректно сравнить 4-битный процессор с его 4-тритным эквивалентом"
- ну и ?
User avatar
Lavr
Supreme God
Posts: 16628
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 4-trit Processor

Post by Lavr »

ra3qdp wrote:- ну и ?
Ну и всяк жаждущий "более или менее корректно сравнить 4-битный процессор с его 4-тритным эквивалентом"
вполне может это самостоятельно сделать, поскольку материалы выложены по ним обоим на одном этом форуме.

Там в самом начале топика приведена прямая ссылка на 4-битный процессор рядом с цитируемой выше фразой:
viewtopic.php?f=92&t=9573&start=240#p120687
iLavr
ra3qdp
Fanat
Posts: 87
Joined: 18 Feb 2019 22:46

Re: 4-trit Processor

Post by ra3qdp »

интересны выводы автора.
User avatar
Lavr
Supreme God
Posts: 16628
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 4-trit Processor

Post by Lavr »

Вывод текстовых сообщений на графический LCD "NOKIA-3310" занимает довольно-таки
приличный объём в сравнительно небольшой памяти троичного компьютера с 8-тритной
шиной адреса.
Поэтому я решил попробовать для текстовых сообщений использовать алфавитно-цифровой
LCD типа LM016L, благо это не требовало дополнительных аппаратных средств, а
сам LCD допускает общение по 4-битной шине, что для 4-тритного процессора весьма удобно.

В интерфейсе SPI_I/O, разработанном для передачи данных LCD "NOKIA-3310" необходимый
4-тритный регистр уже был, и был не задействован один вывод, который я планировал
использовать для генерации звука, но решил использовать для формирования строба EN для
управления LCD LM016L.

 SPI_I/O SCHEMATICS

HANOI_023.png
HANOI_023.png (12.42 KiB) Viewed 859 times


И алфавитно-цифровой LCD типа LM016L весьма удачно вписался в проект! :kruto:

LM016L-HANOI.png
LM016L-HANOI.png (47.39 KiB) Viewed 859 times

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

Re: 4-trit Processor

Post by Lavr »

Lavr wrote:Поэтому я решил попробовать для текстовых сообщений использовать алфавитно-цифровой
LCD типа LM016L, благо это не требовало дополнительных аппаратных средств, а
сам LCD допускает общение по 4-битной шине, что для 4-тритного процессора весьма удобно.
В общем-то думаю я, что неплохо бы написать для 4-тритного процессора программу типа Monitor.
И как я не прикидывал, даже двустрочный LCD типа LM016L для этого весьма неудобен... :-?

Поэтому я решил попробовать внедрить в схему подходящий UART, и начал было с i8251,
поскольку по началу эта модель неплохо выглядела в связке с 8-битным процессором.

8251-UART.png
8251-UART.png (46.02 KiB) Viewed 447 times

На скриншоте выводятся строки с ограничителем (типа ASCII-Z).

Но позже выяснилось, что при вводе у i8251 UART имеют место глюки модели, причем
даже в схеме с 8-битным процессором.
В связке с троичным процессором отмеченные глюки также имели место.

Поэтому я решил заменить i8251 UART на 6850 ACIA.
Его модель на проверку работала более устойчиво и с 8-битным процессором.

6850-ACIA.png
6850-ACIA.png (47.59 KiB) Viewed 447 times

На этом скриншоте схема выводит текст, скопированный из текстового редактора, и вставленный
в окно виртуального терминала. Это, собственно, и есть "тест на безглючность". :wink:
Схема на 6850 ACIA отрабатывает copy-paste безошибочно, а схема с i8251 UART начинает
двоить и пропускать символы при прочих равных условиях. :(

Ниже приведена схема интерфейса 4-тритной шины к 8-битной.

 СХЕМА ШИННОГО ИНТЕРФЕЙСА

HANOI_024_31.png
HANOI_024_31.png (56.88 KiB) Viewed 447 times


Троичный процессор работает с последовательным интерфейсом сугубо двоичными кодами {-1,+1},
что позволяет избежать дешифрации, и использовать в схеме интерфейса сугубо двоичные микросхемы.
iLavr
User avatar
Lavr
Supreme God
Posts: 16628
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 4-trit Processor

Post by Lavr »

Lavr wrote:Я пока не выкладываю никаких библиотек и проектов, поскольку версия проекта - Alfa,
а альфа-тестирование обычно проводится силами штатных разработчиков. ©
Пока писал программу HANOI и обслуживание последовательных интерфейсов,
выявил одну ошибку микрокода процессора:

Test_LDB_Z.png
Test_LDB_Z.png (11.26 KiB) Viewed 441 times

И одна ошибка программы-компилятора троичного ассемблера была обнаружена.

HANOI_0232.png
HANOI_0232.png (47.55 KiB) Viewed 441 times

В принципе неплохо, я ожидал больше глюков... :wink:
iLavr
Post Reply