|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Gigatron (компьютер на рассыпухе)
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
Не - мой RASM тупой как валенок - никаких тебе квадратных скобок или плюсиков
|
28 Aug 2020 22:45 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну я могу попытаться адаптировать какой-то из своих ассемблеров... Просто пока немного непонятно, как трактовать дублирующиеся коды. К примеру, если упорядочить, то увидим: И таких участков в таблице кодов прилично... Значит LDA $0P трактуем при компиляции как 00h, а если вдруг понадобится другой код, то вставляем его как DB 0CH; к примеру?
_________________ iLavr
|
29 Aug 2020 04:18 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем это я потихонечку и делаю... Но тормознулся со схемотехникой АЛУ на мультиплексорах... На мой взгляд в схеме АЛУ есть ошибка, приводящая к его неработоспособности. Схемотехника АЛУ на мультиплексорах Приведу также краткое описание принципа работы этого АЛУ от автора: Ошибка в схеме на мой взгляд состоит в том, что в нижней части схемы все выводы 7 мультиплексоров 74НСТ153 должны поступить на входы А сумматора, а все выводы 9 мультиплексоров должны поступить на входы В сумматора. Тогда схема будет работать согласно приведенному описанию. На приведенном выше оригинале схемы у двух мультиплексоров подключение к сумматору выводов 9 и 7 перепутано. Кроме того, есть несостыковка с приведенной в описании таблицей сигналов таблицы истинности, расположенной в устройстве управления (AR0:3). На мой взгляд, эти сигналы совершенно напрасно инвертированны перед подачей в схему АЛУ.
_________________ iLavr
|
02 Sep 2020 10:53 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Правильная схема АЛУ на мультиплексорах, на мой взгляд, должна быть следующая: Исправленная схема АЛУ на мультиплексорах Правда, при этом сигналы управления AR0:3 инверсные, но они соответствуют таблице, описывающей принцип работы АЛУ: AR0 - это сигнал Cin. По таблице при инструкции LD сигнал Cin = 0. Также при этом один из мультиплексоров выключен ( = 0), второй - повторяет входы Bus. На выходе сумматора и ALU получается А = 0 + Bus = Bus, не зависимо от Ain. Надо будет проверить, как при этом ведут себя другие операции ALU...
_________________ iLavr
|
02 Sep 2020 12:18 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да, похоже, что исправленная схема АЛУ на мультиплексорах работает верно... Для управления АЛУ на мультиплексорах необходимы следующие сигналы AR0:3 и AL : Также показано, как формируются столбцы таблицы для операций LD и AND. Аппаратно сигналы данной таблицы в схеме устройства управления Gigatron-а формирует вот такой шифратор с диодной матрицей: Принцип его построения следующий: там, где в таблице 1, на схеме должен быть диод. На приведенной выше оригинальной схеме несколько диодов придётся поменять местами, чтобы было соответствие таблице. Первоначально я предполагал ошибку в инверсии, но тут подвела модель буфера 74хх240 в Proteus - инверсия в ней ошибочно отсутствует... Прилагаю также модель АЛУ на мультиплексорах в Proteus и надеюсь, что больше ошибок нет.
_________________ iLavr
|
02 Sep 2020 15:50 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А если заменить мнемоники на похожие от i8080? Тогда получится? Я тут читал один материал от автора, команду, где Х++, он сам назвал иначе: STIX, то есть, STore & Increment X. Можно и другие команды со скобками переименовать похожим образом, обходились же в ассемблере i8080 без скобок! Проект практически заработал, но тестировать в кодах без ассемблера зело утомительно...
_________________ iLavr
|
04 Sep 2020 10:52 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вот так проект на данный момент выглядит: Gigatron в Proteus Свободный угол оставлен под LCD индикатор типа LM016L (2 строки по 16 символов), но пока я с этим тормознулся, поскольку с ним довольно точно надо временн Ые интервалы в протоколе инициализации выдержать, а я в данный момент запускаю проект либо в пошаговом режиме, либо на низкой частоте 100 Гц, чтобы успевать видеть процесс работы. Т.е. все интервалы у меня заведомо больше, чем это необходимо... P.S. И оригинальный альбом схем здесь выложу, чтобы можно было сравнить с тем, что я исправил.
_________________ iLavr
|
04 Sep 2020 13:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
| | | | Lavr wrote: А если заменить мнемоники на похожие от i8080? Тогда получится? Я тут читал один материал от автора, команду, где Х++, он сам назвал иначе: STIX, то есть, STore & Increment X. Можно и другие команды со скобками переименовать похожим образом, обходились же в ассемблере i8080 без скобок! Проект практически заработал, но тестировать в кодах без ассемблера зело утомительно... | | | | |
Дык у них вроде ж был ассемблер, не?
|
04 Sep 2020 20:02 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да там ассемблер, как пишут, "трое в одном флаконе". Неохота с ним заморачиваться... Не хочу ничего плохого сказать про автора, но как-то сложно он всё замутил для довольно простой железки. Если внимательно присмотреться, то это практически 8-битный Nibbler по идее. Оригинальный ассемблерный код в ПЗУ там вобще на "питоне" собирают... Ну в общем хотелось бы простенький ассемблер даже DOS-овский подошел бы. Пока надумал сделать так - в ассемблере от i8080 писать программу Gigatron-а через DB XXh. В WINHEX, на котором я сейчас пишу в кодах, раздвигать и вставлять в код неудобно...
_________________ iLavr
|
05 Sep 2020 02:19 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Урааааааа! Модель Gigatron-а в Proteus с LCD-индикатором LM016L заработала!Вот вроде мелочь, а приятно! И самое приятное, что заработала не сразу... Немного поупрямилась, от этого обычно результат приятен вдвойне! Я так и поступил, и получилось весьма удачно! По крайней мере и писать программу было удобнее, чем через WINHEX, и метки вычислял сам ассемблер, хотя приходилось делит адрес метки попалам, но это легче, чем считать метки вручную... Как-то так этот процесс выглядел: | | | | 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 ( отдельное спасибо - Шурику!) Проект работает на частоте 100 Гц - под эту частоту ориентировочно подобраны интервалы для LCD-индикатора LM016L, причем выбраны они заведомо б ольшими. Если кто захочет поднять частоту и допилить проект до работы с "дисплеем" следует обратить внимание на следующее: Gigatron тактируется двумя фазами, причем вторая фаза получается задержкой на конденсаторе. Ёмкость конденсатора (и задержка фазы 2) зависит как от рабочей частоты, так и от быстродействия примененных логических элементов. В Proteus вместо конденсатора я поставил цифровую задержку, её величина подобрана для частоты 100 Гц и микросхем серии 74LS. Критерий подбора задержки следующий: в Gigatron данные всегда проходят через АЛУ, и после АЛУ попадают в регистры или память в фазе 2, отсюда задержка должна быть такой, чтобы в фазе 2 в регистр-аккумулятор четко записывалось значение на выходе АЛУ, в противном случае задержку следует увеличить. При выбранной задержке следует протестировать запись в микросхему ОЗУ - сбоев быть не должно! Ну и, как обычно - архив с проектом Proteus: В нём всё, что нужно, кроме компилятора ассемблера для i8080, его я давным-давно выкладывал здесь на форуме в ветке Proteus DLL.
_________________ iLavr
|
06 Sep 2020 05:56 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А теперь выложу набор схем, которые я правил, и по которым собирал проект Gigatron-а в Proteus : Некоторые узлы в проекте Proteus несколько отличаются от этих схем, поскольку в Proteus либо не было подходящих моделей, либо те, что были, имели ошибки... Кстати, именно поэтому я и применил в проекте серию 74LS - серия 74НСТ в моём устаревшем Proteus-е довольно бедн а...
_________________ iLavr
|
06 Sep 2020 06:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Так вот, когда читаешь интернет, представляется просто какое-то чюдо! Не, ну надо же! - Программная генерация VGA-видеосигнала процессором на 6.25 МГц! Это в то время, как у "Специалиста" была аппаратная генерация TV-видеосигнала 384х256 при частоте обновления пикселей 8 МГц! А когда разберёшься и внимательно присмотришься, то чюда-то никакого и нет... Просто в схеме Gigatron-а реализован зачаточный ПДП в командах типа: LD [Y,X++],OUTэто пересылка байта из памяти (ОЗУ) непосредственно в порт вывода с аппаратным инкрементом адреса! А я еще смотрю и думаю, почему ж нет аналогичной команды для чтения массива в аккумулятор? А вот нет её! Только под формирование видеосигнала и стробирования звука команда расточена!
_________________ iLavr
|
07 Sep 2020 14:36 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Но это всё не столь уж принципиально, гораздо интереснее другое: аппаратного стека в Gigatron-е точно нет. А вот как его эмулируют чисто программно? В PDP-8, как я помню, это не было слишком сложной программной затеей...
_________________ iLavr
|
08 Sep 2020 02:07 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | Lavr wrote: Просто в схеме Gigatron-а реализован зачаточный ПДП в командах типа: LD [Y,X++],OUTэто пересылка байта из памяти (ОЗУ) непосредственно в порт вывода с аппаратным инкрементом адреса! А я еще смотрю и думаю, почему ж нет аналогичной команды для чтения массива в аккумулятор? А вот нет её! Только под формирование видеосигнала и стробирования звука команда расточена! | | | | |
Объясняю для очень внимательных: для X++ в схеме реализована аппаратная поддержка: Регистр А - аппаратно просто регистр, регистр Х - два счетчика с параллельной загрузкой. То есть INR A - это ADDA 1, а вот INR Х - это Х++ - реализован аппаратно. При этом LD [Y,X++],OUT - существует, а LD [Y,X++],А - не существует, хотя это аппаратно ничуть не сложно, отсюда и был этот вывод: А уж сомневался в этом кто-то или нет - это личное дело каждого...
_________________ iLavr
|
08 Sep 2020 03:27 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем этой мыслью многие люди озадачились, кто по своим каким-то причинам не хочет юзать vCPU. Вот, к примеру, что пишет по этому поводу некто H.G.Muller, который хочет заставить Gigatron играть в шахматы: The Gigatron project - Page 2 - TalkChess.com Идея-то и без него понятна: надо как-то самим программно сохранять в памяти адрес возврата, а по возврату из подпрограммы также самим считать эти данные в Y и A, после чего выполнить инструкцию JMP Y,AC. Но в кодах Gigatron-а я пока всю эту процедуру плохо себе представляю...
_________________ iLavr
|
08 Sep 2020 07:15 |
|
|
Who is online |
Users browsing this forum: No registered users and 3 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
|
|