nedoPC.org

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



Reply to topic  [ 94 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7  Next
Gigatron (компьютер на рассыпухе) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Не - мой RASM тупой как валенок - никаких тебе квадратных скобок или плюсиков :obye:

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


28 Aug 2020 22:45
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ну я могу попытаться адаптировать какой-то из своих ассемблеров...
Просто пока немного непонятно, как трактовать дублирующиеся коды.

К примеру, если упорядочить, то увидим:
Attachment:
dup.gif
dup.gif [ 3.07 KiB | Viewed 12352 times ]

И таких участков в таблице кодов прилично...

Значит LDA $0P трактуем при компиляции как 00h, а если вдруг понадобится другой код,
то вставляем его как DB 0CH; к примеру?

_________________
iLavr


29 Aug 2020 04:18
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Gigatron в принципе нетрудно повторить в Proteus, ...
В общем это я потихонечку и делаю...

Но тормознулся со схемотехникой АЛУ на мультиплексорах... :osad:
На мой взгляд в схеме АЛУ есть ошибка, приводящая к его неработоспособности.

 Схемотехника АЛУ на мультиплексорах
Attachment:
00061.gif
00061.gif [ 33.93 KiB | Viewed 12287 times ]

Приведу также краткое описание принципа работы этого АЛУ от автора:
Attachment:
ALU.gif
ALU.gif [ 26.48 KiB | Viewed 12287 times ]

Ошибка в схеме на мой взгляд состоит в том, что в нижней части схемы все выводы 7 мультиплексоров
74НСТ153 должны поступить на входы А сумматора, а все выводы 9 мультиплексоров должны поступить
на входы В сумматора. Тогда схема будет работать согласно приведенному описанию.
На приведенном выше оригинале схемы у двух мультиплексоров подключение к сумматору выводов 9 и 7
перепутано.
:-?

Кроме того, есть несостыковка с приведенной в описании таблицей сигналов таблицы истинности,
расположенной в устройстве управления (AR0:3). На мой взгляд, эти сигналы совершенно
напрасно инвертированны перед подачей в схему АЛУ.

_________________
iLavr


02 Sep 2020 10:53
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Правильная схема АЛУ на мультиплексорах, на мой взгляд, должна быть следующая:

 Исправленная схема АЛУ на мультиплексорах
Attachment:
ALU2.gif
ALU2.gif [ 29.22 KiB | Viewed 12278 times ]


Правда, при этом сигналы управления AR0:3 инверсные, но они соответствуют таблице,
описывающей принцип работы АЛУ:
AR0 - это сигнал Cin. По таблице при инструкции LD сигнал Cin = 0.
Также при этом один из мультиплексоров выключен (= 0), второй - повторяет входы Bus.

На выходе сумматора и ALU получается А = 0 + Bus = Bus, не зависимо от Ain.

Надо будет проверить, как при этом ведут себя другие операции ALU...

_________________
iLavr


02 Sep 2020 12:18
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Да, похоже, что исправленная схема АЛУ на мультиплексорах работает верно...

Для управления АЛУ на мультиплексорах необходимы следующие сигналы AR0:3 и AL :
Attachment:
00AR_TAB.gif
00AR_TAB.gif [ 12.96 KiB | Viewed 12161 times ]

Также показано, как формируются столбцы таблицы для операций LD и AND.

Аппаратно сигналы данной таблицы в схеме устройства управления Gigatron-а формирует вот такой
шифратор с диодной матрицей:
Attachment:
Coder.gif
Coder.gif [ 11.64 KiB | Viewed 12270 times ]

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

Первоначально я предполагал ошибку в инверсии, но тут подвела модель буфера 74хх240 в Proteus -
инверсия в ней ошибочно отсутствует... :-?

Прилагаю также модель АЛУ на мультиплексорах в Proteus и надеюсь, что больше ошибок нет.
Attachment:
ALU_Gig.zip [30.43 KiB]
Downloaded 254 times

_________________
iLavr


02 Sep 2020 15:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr wrote:
Shaos, кстати, посмотри, может быть в исходник твоего RASM (или как его там) удачно ляжет?
Не - мой RASM тупой как валенок - никаких тебе квадратных скобок или плюсиков :obye:

А если заменить мнемоники на похожие от i8080? Тогда получится?

Я тут читал один материал от автора, команду, где Х++, он сам назвал иначе: STIX, то есть,
STore & Increment X.
Можно и другие команды со скобками переименовать похожим образом, обходились же в ассемблере
i8080 без скобок! :wink:

Проект практически заработал, но тестировать в кодах без ассемблера зело утомительно... :-?

_________________
iLavr


04 Sep 2020 10:52
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Проект практически заработал, ...
Вот так проект на данный момент выглядит:

 Gigatron в Proteus
Attachment:
GIG_10.gif
GIG_10.gif [ 78.76 KiB | Viewed 12216 times ]

Свободный угол оставлен под LCD индикатор типа LM016L (2 строки по 16 символов),
но пока я с этим тормознулся, поскольку с ним довольно точно надо временнЫе интервалы
в протоколе инициализации выдержать, а я в данный момент запускаю проект либо в
пошаговом режиме, либо на низкой частоте 100 Гц, чтобы успевать видеть процесс работы.
Т.е. все интервалы у меня заведомо больше, чем это необходимо... :wink:


P.S. И оригинальный альбом схем здесь выложу, чтобы можно было сравнить с тем, что я исправил.
Attachment:
GigSchematics.zip [1.35 MiB]
Downloaded 256 times

_________________
iLavr


04 Sep 2020 13:06
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Lavr wrote:
Shaos, кстати, посмотри, может быть в исходник твоего RASM (или как его там) удачно ляжет?
Не - мой RASM тупой как валенок - никаких тебе квадратных скобок или плюсиков :obye:

А если заменить мнемоники на похожие от i8080? Тогда получится?

Я тут читал один материал от автора, команду, где Х++, он сам назвал иначе: STIX, то есть,
STore & Increment X.
Можно и другие команды со скобками переименовать похожим образом, обходились же в ассемблере
i8080 без скобок! :wink:

Проект практически заработал, но тестировать в кодах без ассемблера зело утомительно... :-?

Дык у них вроде ж был ассемблер, не?

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


04 Sep 2020 20:02
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr wrote:
Shaos wrote:
Lavr wrote:
Shaos, кстати, посмотри, может быть в исходник твоего RASM (или как его там) удачно ляжет?
Не - мой RASM тупой как валенок - никаких тебе квадратных скобок или плюсиков :obye:
А если заменить мнемоники на похожие от i8080? Тогда получится?
Дык у них вроде ж был ассемблер, не?
Да там ассемблер, как пишут, "трое в одном флаконе". Неохота с ним заморачиваться...
Не хочу ничего плохого сказать про автора, но как-то сложно он всё замутил для довольно простой
железки. Если внимательно присмотреться, то это практически 8-битный Nibbler по идее.

Оригинальный ассемблерный код в ПЗУ там вобще на "питоне" собирают... :-?

Ну в общем хотелось бы простенький ассемблер даже DOS-овский подошел бы.

Пока надумал сделать так - в ассемблере от i8080 писать программу Gigatron-а через DB XXh.
В WINHEX, на котором я сейчас пишу в кодах, раздвигать и вставлять в код неудобно... :wink:

_________________
iLavr


05 Sep 2020 02:19
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Урааааааа!
Модель Gigatron-а в Proteus с LCD-индикатором LM016L заработала!

Attachment:
TheGIG.gif
TheGIG.gif [ 45.82 KiB | Viewed 12161 times ]

Вот вроде мелочь, а приятно! И самое приятное, что заработала не сразу...
Немного поупрямилась, от этого обычно результат приятен вдвойне! :wink:
Lavr wrote:
Пока надумал сделать так - в ассемблере от i8080 писать программу Gigatron-а через DB XXh.
Я так и поступил, и получилось весьма удачно! По крайней мере и писать программу
было удобнее, чем через WINHEX, и метки вычислял сам ассемблер, хотя приходилось
делит адрес метки попалам, но это легче, чем считать метки вручную... 8)

Как-то так этот процесс выглядел:
Code:
;--------------------------------;
;   Gigatron + LCD_LM016L.ASM    ;
;          05.09.2020            ;
;                                ;
;  CLC = 100Hz, T = 0,01S = 10mS ;
;  .                             ;
; 0FFH - Фиктивный параметр...   ;
;--------------------------------;

;0123456789012345
;> The Gigatron <
;Press any key...

    ORG  0000H;
START:
    DB    08H, 00H;  LDA 00H
    DB    1AH, 0FFH; LD  AC,OUT - clear port
;-------------
    DB    0EH, 0FFH; NOP - Delay
    DB    0EH, 0FFH; NOP - 20 mS
    DB    0EH, 0FFH; NOP
;-------------
    DB    08H, 30H;  LDA 30H
    DB    1AH, 0FFH; LD  AC,OUT
    DB    0EH, 0FFH; NOP - pause
    DB    4CH, 04H;  ORA 04H = 0000.0100 STB UP
    DB    1AH, 0FFH; LD  AC,OUT
    DB    0EH, 0FFH; NOP - pause
    DB    2CH, 0FBH; ANI 0FBH = 11111011 STB DN
    DB    1AH, 0FFH; LD  AC,OUT
    DB    0EH, 0FFH; NOP - pause
;-------------
    DB    08H, 30H;  LDA 30H
    DB    1AH, 0FFH; LD  AC,OUT
    DB    0EH, 0FFH; NOP - pause
    DB    4CH, 04H;  ORA 04H = 0000.0100 STB UP
    DB    1AH, 0FFH; LD  AC,OUT
    DB    0EH, 0FFH; NOP - pause
    DB    2CH, 0FBH; ANI 0FBH = 11111011 STB DN
    DB    1AH, 0FFH; LD  AC,OUT
    DB    0EH, 0FFH; NOP - pause
;-------------
    DB    0EH, 0FFH; NOP - Delay
    DB    0EH, 0FFH; NOP - 20 mS
    DB    0EH, 0FFH; NOP
    DB    0EH, 0FFH; NOP - Delay
    DB    0EH, 0FFH; NOP - 20 mS
    DB    0EH, 0FFH; NOP
;-------------
   ...

По RTF-файлу искал нужный мнемокод, записывал его в комментарий, а в DB XXh вставлял
код этого оператора.
После компиляции разбивал *.bin-файл на четные и нечетные байты для двух ПЗУ с помощью
утилиты romsplit.exe (отдельное спасибо - Шурику!) :kruto:

Проект работает на частоте 100 Гц - под эту частоту ориентировочно подобраны интервалы
для LCD-индикатора LM016L, причем выбраны они заведомо большими.

Если кто захочет поднять частоту и допилить проект до работы с "дисплеем" следует
обратить внимание на следующее: Gigatron тактируется двумя фазами, причем вторая
фаза получается задержкой на конденсаторе.
Attachment:
00021.gif
00021.gif [ 12.58 KiB | Viewed 12161 times ]

Ёмкость конденсатора (и задержка фазы 2) зависит как от рабочей частоты, так и от
быстродействия примененных логических элементов.
В Proteus вместо конденсатора я поставил цифровую задержку, её величина подобрана
для частоты 100 Гц и микросхем серии 74LS.
Критерий подбора задержки следующий: в Gigatron данные всегда проходят через АЛУ,
и после АЛУ попадают в регистры или память в фазе 2, отсюда задержка должна быть
такой, чтобы в фазе 2 в регистр-аккумулятор четко записывалось значение на выходе
АЛУ, в противном случае задержку следует увеличить.
При выбранной задержке следует протестировать запись в микросхему ОЗУ - сбоев быть
не должно!

Ну и, как обычно - архив с проектом Proteus:
Attachment:
Gigatron.zip [181.24 KiB]
Downloaded 287 times

В нём всё, что нужно, кроме компилятора ассемблера для i8080, его я давным-давно
выкладывал здесь на форуме в ветке Proteus DLL.

_________________
iLavr


06 Sep 2020 05:56
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
И оригинальный альбом схем здесь выложу, чтобы можно было сравнить с тем, что я исправил.

А теперь выложу набор схем, которые я правил, и по которым собирал проект Gigatron-а в Proteus :
Attachment:
GIGSchems.zip [261.45 KiB]
Downloaded 282 times

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

Кстати, именно поэтому я и применил в проекте серию 74LS - серия 74НСТ в моём устаревшем
Proteus-е довольно бедна... :-?

_________________
iLavr


06 Sep 2020 06:09
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
b2m wrote:
... а вот формировать видео-сигнал и паралельно делать что-либо полезное у тебя вряд-ли получится.

Так вот, когда читаешь интернет, представляется просто какое-то чюдо! :o
Не, ну надо же! - Программная генерация VGA-видеосигнала процессором на 6.25 МГц! :roll:
Это в то время, как у "Специалиста" была аппаратная генерация TV-видеосигнала 384х256
при частоте обновления пикселей 8 МГц!

А когда разберёшься и внимательно присмотришься, то чюда-то никакого и нет...
Просто в схеме Gigatron-а реализован зачаточный ПДП в командах типа:
LD [Y,X++],OUT
это пересылка байта из памяти (ОЗУ) непосредственно в порт вывода с аппаратным
инкрементом адреса! :lol:

А я еще смотрю и думаю, почему ж нет аналогичной команды для чтения массива в аккумулятор?
А вот нет её! Только под формирование видеосигнала и стробирования звука команда расточена! :wink:

_________________
iLavr


07 Sep 2020 14:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Но это всё не столь уж принципиально, гораздо интереснее другое: аппаратного стека в Gigatron-е
точно нет. А вот как его эмулируют чисто программно? :roll:

В PDP-8, как я помню, это не было слишком сложной программной затеей...

_________________
iLavr


08 Sep 2020 02:07
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Просто в схеме Gigatron-а реализован зачаточный ПДП в командах типа:
LD [Y,X++],OUT
это пересылка байта из памяти (ОЗУ) непосредственно в порт вывода с аппаратным
инкрементом адреса! :lol:

А я еще смотрю и думаю, почему ж нет аналогичной команды для чтения массива в аккумулятор?
А вот нет её! Только под формирование видеосигнала и стробирования звука команда расточена! :wink:

Объясняю для очень внимательных: для X++ в схеме реализована аппаратная поддержка:
Attachment:
0007.gif
0007.gif [ 8.94 KiB | Viewed 12316 times ]

Регистр А - аппаратно просто регистр, регистр Х - два счетчика с параллельной загрузкой.
То есть INR A - это ADDA 1, а вот INR Х - это Х++ - реализован аппаратно.
При этом LD [Y,X++],OUT - существует, а LD [Y,X++],А - не существует, хотя это
аппаратно ничуть не сложно, отсюда и был этот вывод:
Lavr wrote:
Только под формирование видеосигнала и стробирования звука команда расточена! :wink:

А уж сомневался в этом кто-то или нет - это личное дело каждого... :wink:

_________________
iLavr


08 Sep 2020 03:27
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
гораздо интереснее другое: аппаратного стека в Gigatron-е
точно нет. А вот как его эмулируют чисто программно? :roll:

В общем этой мыслью многие люди озадачились, кто по своим каким-то причинам не хочет юзать vCPU.

Вот, к примеру, что пишет по этому поводу некто H.G.Muller, который хочет заставить Gigatron
играть в шахматы:
The Gigatron project - Page 2 - TalkChess.com
H.G.Muller wrote:
mar wrote:
I wonder how one does function calls; there's no stack so one would have to emulate it manually
which would be costly/tricky (thinking of how to compute return address, managing stack)
Indeed. The Gigatron has the quirk that it always executes the instruction following a branch, even if the branch is taken. (A result of the instruction-fetch pipelining.) When jumping to subroutines, I use this instruction to load the return address in the accumulator. The subroutine can then start saving that, in a fixed place when it is not called recursively, and on a software stack it maintains itself when it is. This assumes the subroutine is in the same memory page as its caller, or at least knows in which page the caller must be. This is usually not too much of a problem.

Идея-то и без него понятна: надо как-то самим программно сохранять в памяти адрес возврата,
а по возврату из подпрограммы также самим считать эти данные в Y и A, после чего выполнить инструкцию JMP Y,AC.
Но в кодах Gigatron-а я пока всю эту процедуру плохо себе представляю... :-?

_________________
iLavr


08 Sep 2020 07:15
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 94 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7  Next

Who is online

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