Просмотр полной версии : FPGA-реплика ЭВМ ДВК-3 и платы МС1201
Данный проект представляет собой FPGA-конструктор, с помощью которого можно собрать в железе микро-ЭВМ ДВК-1, 2, 3 и Электроника-60, а также ЭВМ Электроника-79.
Проект является модульным - состоит из кучки модулей, объединенных шиной wishbone. В основе схемы лежит соединительная плата topboard (аналог МПИ-корзины реальной ЭВМ), к которой подключается одна процессорная плата и набор периферийных устройств.
В данный момент реализованы следующие процессорные платы:
МС1201.01 на процессоре 1801ВМ1 - на ней основаны ДВК-1 и ДВК-2
МС1201.02 на процессоре 1801ВМ2 - ДВК-3
МС1260 на процессоре М2 (DEC LSI-11) - Электроника-60
МС1280 на процессоре М4 (DEC LSI-11M) - вот тут я даже не знаю, были ли какие-то ЭВМ на ее основе.
PDP2011 на процессоре PDP-11/70 - это чисто синтетический процессор, аналогом 11/70 была эвм Элекроника-79.
В комплекте имеются следующие устройства:
- Контроллер ИРПС (модуль wbc_uart от VSLAV) по адресу 177650 для связи с консольным терминалом
- Дополнительный контроллер ИРПС по адресу 176500 для связи с внешним миром (LS:, XL)
- Контроллер КСМ (контроллер символьного монитора) - VT52-совместимый текстовый терминал
- Контроллер КГД (контроллер графического дисплея)
- Контроллер RK11 (RK) с подключенными у нему 8 дисками RK05
- Контроллер RK611 (DM) с подключенными у нему 8 дисками RK07
- Контроллер RH70 (DB) с подключнными к нему 8 дисками RP06
- Контроллер HDD RD50C (DW) в варианте ДВК с подключенным к нему виртуальным HDD объемом 64 Мб.
- Контроллер RX11 (DX) с подключенными к нему двумя дисководами RX01 (наш аналог - ГМД70)
- Контроллер ГМД двойной плотности (MY) с подключенными к нему двумя двухдисковыми дисководами НГМД-6121.
- Контроллер динамической памяти DRAM объемом 64 Kб
- ПЗУ эмулятора пульта/загрузчика, аналогичное DEC M9312
- ПЗУ пользователя для хранения резидентных программ (обычно basic или focal), размещается по адресам 140000-157777
Состав собираемой ЭВМ и ее параметры определяются в едином конфигурационном файле config.v.
Первый вариант проекта был сделан на процессорном ядре 1801ВМ2 от уважаемого VSLAV, и создавался мной в силу жизненной необходимости - как замена окончательно сдохшему контроллеру, который управлял испытательным стендом у нас в лаборатории. Плата с лета 2020 года трудится практически каждый рабочий день, все основные глюки за это время выловили и исправили. Прошу заметить, что этот проект разрабатывался не как игрушка-эмулятор древней ЭВМ, а именно под конкретные производственные задачи. В силу этого внимание уделялось функциональности устройства, а не абсолютой точности эмуляции оригинального железа.
В результате получилось функционально законченное устройство, представляющее собой одноплатный вариант древних советских персональных ЭВМ. Достаточно подключить к FPGA клавиатуру, VGA-монитор и SD-карту - и ЭВМ готова.
https://raw.githubusercontent.com/forth32/mc1201-02/main/screenshot/rt11.png
https://i.imgur.com/Te2NhJR.png
https://raw.githubusercontent.com/forth32/dvk-fpga/main/screenshot/rsx11m-plus-boot.png
Все дисковые контроллеры используют единственную карту памяти SD для хранения образов своих дисков. В проект входят утилиты для извлечения образов с SD-карты и записи их обратно на карту. Кроме того, в проект входит пример готового банка дисков, готовый для поблочной записи на SD-карту - его я внес в проект для облегчения первоначального запуска и отладки на конкретной FPGA-плате.
Можно добавлять на шину свои собственные модули - это делается достаточно легко. У меня, например, на шине присутствуют модули ЦАП, АЦП и набор дискретных портов для стыковки со стендом. К проекту прилагается краткое руководство по созданию собственных модулей build-own-modules.pdf. То есть этот проект можно использовать не только для сборки законченной микро-ЭВМ, но и как основу для замены физически устаревших управляющих контроллеров, основанных на какой-либо из поддерживаемых процессорных плат.
В каталоге doc/ проекта лежит файл с документацией main-manual.pdf, и я крайне рекомендую ходя бы поверхностно с ним ознакомится. В нем подробно описывается работа каждого периферийного модуля и содержатся ответы на многие вопросы, которые потенциально могут возникнуть при запуске проекта на конкретной плате.
Проект портирован на многие отладочные платы, в основном основанные на FPGA серии Cyclone-4 фирмы Altera. В полной конфигурации проект вполне помещается в чип EP4CE10, что позволяет использовать относительно недорогие китайские платы. В данный момент имеются порты на следующие платы:
A-E115FB
A-ESTF v2
Alinx AX4010
QMDAZZ rz301
QMTECH E55
Sipeed TANG Primer
Нетрудно портировать схему на другие платы - главное, чтобы хватило ресурсов. Никаких особенностей серии Cyclone 4 проект не использует, из фирменных мегафункций использованы только PLL и Altsyncram.
Проект живет в репозитории https://github.com/forth32/dvk-fpga.
CodeMaster
10.01.2021, 16:23
Локального архива с текущим срезом репозитория я делать не буду, нет смысла
Я бы так не зарекался, на недолгом пути развития ИТ были разные случаи и лишний бэкап ещё никому не вредил.
лишний бэкап ещё никому не вредил.
Как скажете. Мне не жалко, просто лень было возиться. Добавил локальную копию.
как замена окончательно сдохшему контроллеру
Что за контроллер?
Контроллер RX11 (DX) с подключенными к нему двумя дисководами RX01 (наш аналог - ГМД7012)
Аналог ГМД70, а ГМД7012 это аналог RX02 выставленный в режим одинарной плотности. Аналог контроллера типа RXV21 так и не выпустили.
Замечательно, проект отличный, собирался делать что-то подобное, но банально просто не хватает ресурсов.
Кроме вышеперечисленного, в проект входит аппаратный терминал, совместимый с DEC VT52 и фрязинским дисплеем 15ИЭ-00-013. Терминал использует VGA-монитор для вывода информации и PS/2 клавиатуру для ввод. Этот терминал я уже публиковал ранее в виде отдельного проекта.
по хорошему, тут последнее предложение в абзаце должно бы быть ссылкой )
https://zx-pk.ru/threads/32425-apparatnyj-terminal-vt52-15ie-00-013-na-fpga.html
Я бы так не зарекался, на недолгом пути развития ИТ были разные случаи и лишний бэкап ещё никому не вредил.
git clone вроде никто не отменял
Как я понимаю - я теперь основной тормоз, надо срочно добивать ВМ3, прикручивать его к этому проекту и пытаться грузить RSX-11M.
дополнительный вопрос
планируется ли ДВКашный MY контроллер, наличие DW - это хорошо, а как без дискет человеческих (в плане формата),
(про RK удалил!!!Что бы с толку не сбивать читающих).
не совсем понятно зачем продолжать поддерживать такое старьё как ГМД70 , почему в MY формат не перенести ?
я без наездов - мне интересно )
не совсем понятно зачем продолжать поддерживать такое старьё как ГМД70 ?
Там в doc описание лежит - чтобы поддерживать DX-образы, иногда встречающиеся в сети.
И у меня 8" дисковод лежит, хороший вариант попробовать через переходник подключить к FPGA И порулить.
какой объём у RK
Несколько больше, чем у MY
почему в MY формат не перенести ?
Потому что см выше
RK(DX) - это же очень и очень
RK это не DX.
- - - Добавлено - - -
И у меня 8" дисковод лежит
Что за дисковод?
RK это не DX.
Что за дисковод?
Да вот не помню точно, в пленке замотанный в гараже лежит. ЕС-5074 кажется.
RK это не DX.
это я знаю, мой вопрос был зачем RX и древнее ГМД70 сегодня?
Почему бы не заменить DX на MY? Ну или хотя бы добавить MY - ведь образов MY в разы больше (!) чем DX,
учитывая, что речь идёт о виртуальных дискетах - вопрос зачем - вполне логичный ИМХО.
То есть - все вопросы про RX (RK - я просто увлёкся когда спрашивал, с RK вопросов нет - это же катушки вроде бы?)
- - - Добавлено - - -
с RK вопросов нет - это же катушки вроде бы?)
ха! могу порой ;-) когда в ударе ! )
с RK вопросов нет - это же катушки вроде бы
Аха. Катушки. С нитками.
RK - это же СМ-5400 был? Два диска по 4800 блоков, верхний диск сменный?
RK - это же СМ-5400 был?
https://www.phantom.sannata.org/viewtopic.php?t=19489
ух, какие "блины" (на ногу не урони!).
Честно без MY мне не уютно, вот слетит у вас загрузка с ваших блинчиков и DW,
,будете через DX заливать ))) Вспомните тогда старичину [hobota], ГМД70-десятники (сектанты?)
Я конечно таких устройств просто нигде мог увидеть - самое "злое" что досталось пощупать - это ДВКашный MX и 6022 - на УК-НЦ )))
RK - это же СМ-5400 был? Два диска по 4800 блоков, верхний диск сменный?
Ну, строго говоря, накопитель RK05 - это один диск на 4872 блоков (203 цилиндра), но почему то в большинстве случаев использовалось только 4800 (200 цилиндров). У DEC, насколько мне не изменяет память, был ещё вариант RK05F, вот он как раз с двумя дисками - один встроенные, другой сменный и в советском варианте это СМ5400. Ну а помимо этого были ещё RK02 и RK03 - сектора по 256 байт, если мне изменяет память, а сама геометрия та же
- - - Добавлено - - -
естно без MY мне не уютно, вот слетит у вас загрузка с ваших блинчиков и DW,
,будете через DX заливать ))) Вспомните тогда старичину [hobota]
Просто сбросят заново образ и пошлют старичка на MY
- - - Добавлено - - -
И у меня 8" дисковод лежит, хороший вариант попробовать через переходник подключить к FPGA И порулить.
Восьмидюймовник тоже лежит и вроде даже как контроллер, умеющий прикидываться RX211, осталось только время найти :)
Да вот не помню точно, в пленке замотанный в гараже лежит. ЕС-5074 кажется.
Гаражное хранение не лучший вариант, тем более если Вы хотите его использовать. Резина (пассик) может потрескаться.
вот слетит у вас загрузка с ваших блинчиков и DW
Все образы находятся на SD-карте.
По просьбам трудящихся выкладываю свою разработку - FPGA вариант платы МС1201.02. и ЭВМ ДВК-3 на основе этой платы.А можете объяснить мне, тупому, что с этой разработкой можно делать? Как её применить? Для меня этот гитхаб - тёмный лес, и из всего того, что там выложено, я понял только README.md, в котором не увидел ничего сверх того, что написано в стартовом сообщении темы.
P.S.: а впрочем, с большими трудностями, героически преодолевая бурелом и валежник, добрался до настоящего mc1201.pdf, а не того, который гитхаб выдаёт за пдф. Но всё равно вопрос остался: как всё это применить на практике?
А можете объяснить мне, тупому, что с этой разработкой можно делать?
Поправить описание пинов под свою плату, открыть проект в Квартусе, поправить топ модуль под свою плату (если надо), синтезировать, прошить, радоваться.
Вот вопрос с платой на которую изначально сделан проект не ясен. Делалось на что-то стандартное/покупное или что-то свое разрабатывали/изготавливали?
На плату DE0 от Terasic проект должен портануться без особых вопросов.
На плату DE0 от Terasic проект должен портануться без особых вопросов.
Он должен портануться без особых проблем на любую плату, где есть SDRAM, выход на VGA, ps клавиатура, SD, 4 переключателя и 4 кнопки. Ну или к которой всё это можно прицепить :)
Он должен портануться без особых проблем на любую плату, где есть SDRAM, выход на VGA, ps клавиатура, SD, 4 переключателя и 4 кнопки. Ну или к которой всё это можно прицепить :)
По-хорошему - надо бы завести папочку с проектами для разных плат, отдельную папочку с исходниками, файлик конфигурации и таким образом порты на разные платы и в разных конфигурациях собирать.
надо бы завести папочку с проектами для разных плат, отдельную папочку с исходниками, файлик конфигурации
Руки не дошли пока до файла конфигурации - ибо у меня только при варианта плат и две из них сильно специализированные :) Но программистский подход - повторное использование кода - с самого начал подвигнул на разделение - отдельно модули (которые можно будет повторно использовать), отдельно топ модуль и всякое для конкретной платы :) Хотя некий аналог конфига есть - благо в vhdl есть такой оператор - generate :)
Вот вопрос с платой на которую изначально сделан проект не ясен. Делалось на что-то стандартное/покупное или что-то свое разрабатывали/изготавливали?
Конктретно эта сборка проекта делалась на китайской плате "A-ESTF V2" с алиэкспресса. Сейчас я таких плат там не нашел, может быть и не делают уже их, так что ссылку дать не могу. Я доотлаживал проект на ней потому, что она была под рукой и на ней стоит FPGA EP4CE22, что дает дополнительную буферную память для SignalTap.
А рабочий контроллер в лаборатории трудится Вот на такой плате (https://www.aliexpress.com/item/32832209582.html?spm=a2g0o.productlist.0.0.39df1c5 7PkxObY&algo_pvid=ae6f1029-d057-4ccc-8f15-64a1ec1e1d3e&algo_expid=ae6f1029-d057-4ccc-8f15-64a1ec1e1d3e-6&btsid=0bb0624316103004902474033e17a0&ws_ab_test=searchweb0_0,searchweb201602_,searchweb 201603_). Она сделана на EP4CE10, и этой FPGA вполне хватает под все нужды, включая специфичные для нашего оборудования модули. Контроллера RX11 в рабочей машине нет, не нужен он там, да и доделал я его буквально позавчера. Долго мучался с этим самым фиксом VM2_CORE_FIX_PREFETCH, не хватило ума попробовать его отключить.
Делать зоопарк проектов под все существующие у меня платы не вижу особого смысла. Плат этих всяких на алиэкспрессе вагон, и они все разные в смысле распиновки периферии. А для адаптации проекта достаточно подправить QSF-файл с распиновкой. Я думаю, что любой желающий может форкнуть на гитхабе мой проект и подогнать его под свою плату - другие пользователи спасибо скажут.
Я собираюсь проект немного развить.
Во-первых, сделать контроллер MY, для которого в сети есть немаленькая кучка образов дискет. Контроллер работает через DMA, и должен иметь производительность не хуже RK05. Но он сложный, сложнее RK05, есть подозрение что жесткой логикой тут не обойтись, придется добавлять процессорное ядро с микропрограммой, как в терминальном модуле.
Во-вторых, сделать контроллер магнитной ленты TM11 (MT). Поскольку у ленты размер блока переменный, то тут уж точно без процессорного ядра не обойтись.
В-третьих, сделать графический контроллер КГД, ибо графических программ в природе довольно много. Но тут есть проблема. КГД дает картинку разрешением 400*286, что плохо согласуется с VGAшным стандартом 640*480. Как это преодолеть, я пока не придумал. Может быть и ну ее нафиг, эту графику...
Ну а если у нас когда-нибудь будет 1801ВМ3... Вот тогда можно будет сделать МС1201.03, а это уже серьезная машина. RSX, поддержка очень больших дисков типа RP06...
CodeMaster
10.01.2021, 21:29
КГД дает картинку разрешением 400*286, что плохо согласуется с VGAшным стандартом 640*480
Да что вам так далось это согласование. Делайте попиксельную картинку в центре VGA, кому мелко - найдут диагональ побольше. Это всяко лучше чем ничего.
Что за контроллер?
Заказной кустарный контроллер, работающий также с кустарным уникальным стендом для испытания металлических изделий. Был создан в далеком 92 году и представлял собой корзину МПИ со стоящими в ней платой МС1201.02, платой MX и платой сопряжения с оборудованием стенда. Плюс терминал СМ7209, моя старая головная боль, и матричный принтер. К счастью, все это теперь отправилось в помойку навсегда, а стенд получил второе рождение
Аналог ГМД70, а ГМД7012 это аналог RX02 выставленный в режим одинарной плотности
Вполне может быть. Я последний раз видел такой дисковод в 93 году, потом они все отправились в помойку и были заменены на MX. Почти 30 лет уж прошло с тех пор, поди вспомни эти тонкости...
- - - Добавлено - - -
Да что вам так далось это согласование. Делайте попиксельную картинку в центре VGA, кому мелко - найдут диагональ побольше. Это всяко лучше чем ничего.
Не так все просто. Контроллер КГД должен накладывать свою картинку на экран текстового терминала КСМ. То есть текстовый и графический экран должны иметь одинаковое разрешение. А у меня текстовый экран как раз 640*480.
Может быть, лучше забить и сразу браться за КЦГД, но графический софт, боюсь, тяжеловат будет для 1201.02.
Конктретно эта сборка проекта делалась на китайской плате "A-ESTF V2" с алиэкспресса.
Нашел такое описание (http://land-boards.com/blwiki/index.php?title=A-ESTF_V2_EP4CE22_Board), а производитель помер, похоже, ну и ладно.
Во-первых, сделать контроллер MY, для которого в сети есть немаленькая кучка образов дискет. Контроллер работает через DMA, и должен иметь производительность не хуже RK05. Но он сложный, сложнее RK05, есть подозрение что жесткой логикой тут не обойтись, придется добавлять процессорное ядро с микропрограммой, как в терминальном модуле.
На борту MY процессор 1801ВМ1 же стоит? Программу считывания с SD он вполне потянет.
В-третьих, сделать графический контроллер КГД, ибо графических программ в природе довольно много. Но тут есть проблема. КГД дает картинку разрешением 400*286, что плохо согласуется с VGAшным стандартом 640*480. Как это преодолеть, я пока не придумал. Может быть и ну ее нафиг, эту графику...
Я думал сделать режимы 800x600 (здесь точки КГД просто удваивать) и 1280x1024 (точки КГД утраивать, с полями гашения по краям) - это должно норм в LCD мониторы влезть.
Может быть, лучше забить и сразу браться за КЦГД, но графический софт, боюсь, тяжеловат будет для 1201.02.
Для КЦГД надо будет делать контроллер SDRAM двухпортовый. В младших FPGA просто не найдется 128КБ статической памяти внутри.
- - - Добавлено - - -
Да что вам так далось это согласование. Делайте попиксельную картинку в центре VGA, кому мелко - найдут диагональ побольше. Это всяко лучше чем ничего.
Не, символьный экран должен занимать максимально возможную площадь физического дисплея. А КГД может работать одновременно с КСМ, и я видел софт который этим пользовался - текст выводился на КСМ, а графическая информация на КГД и все это находилось на своих местах. То есть - вывод КГД должен быть того же масштаба что и симольный.
CodeMaster
10.01.2021, 22:06
Контроллер КГД должен накладывать свою картинку на экран текстового терминала КСМ.
То есть - вывод КГД должен быть того же масштаба что и симольный.
Не, символьный экран должен занимать максимально возможную площадь физического дисплея.
Ну, возможно будет несложно сделать 2 режима символьного экрана: Full и совместимый с КСМ, автоматически включаемый при включении КСМ.
Нашел такое описание, а производитель помер, похоже, ну и ладно.
Да, это она и есть. Можно сказать моя любимая плата, на ней есть все что надо. pdp2011 я тоже на ней пробовал. Но, действительно, на али есть десятки плат и не хуже.
На борту MY процессор 1801ВМ1 же стоит? Программу считывания с SD он вполне потянет.
Потянет, конечно. Если не потянет - можно ему аппаратно помочь с помощью того же sdspi. Но я, скорее всего, буду использовать ВМ2, а не ВМ1 - он не сильно тяжелее, но поддерживает EIS, без которого программировать довольно тяжко.
Я думал сделать режимы 800x600 (здесь точки КГД просто удваивать) и 1280x1024
О 800*600 я и сам думал, но придется переделывать и текстовый дисплейный контроллер на то же самое разрешение. А 1280*1024 - это какой же там пиксельклок будет... Мегагерц 100,.не меньше. Боюсь, не потянет циклон 4 такое.
со стоящими в ней платой МС1201.02
Я к чему спрашивал, если новый контроллер (МС1201.02+ добавлены нужные порты) можно вставить в МПИ и без переделок он заработает, это более универсальное решение. Типа в ЧПУ вставил и забыл.
Но похоже у Вас вещь в себе.
но графический софт, боюсь, тяжеловат будет для 1201.02.
На КЦГД свой процессор есть.
О 800*600 я и сам думал, но придется переделывать и текстовый дисплейный контроллер на то же самое разрешение. А 1280*1024 - это какой же там пиксельклок будет... Мегагерц 100,.не меньше. Боюсь, не потянет циклон 4 такое.
При 60Hz кадровой (для LCD мониторов больше и не нужно):
800x600 - 40MHz
1280x1024 - 111MHz
Должно быть вполне посильно.
Также пробовал 1280x1024 HDMI на Reverse-U16, тоже тянет вполне.
Все образы находятся на SD-карте.
я умею читать )
Достаточно подключить к FPGA клавиатуру, VGA-монитор и SD-карту - и ЭВМ готова.
- - - Добавлено - - -
Во-первых, сделать контроллер MY
спасибо! ;-)
400*286, что плохо согласуется с VGAшным
А если сделать масштабирование на 1,5? Я для своего эмулятора делал, единственное, придется делать сглаживание.
А если сделать масштабирование на 1,5?
А вот как это физически выглядит? Вот для масштабирования 2x каждый бит видеопамяти занимает 2 соседних пикселя по горизонтали и вертикали. А тут как? Получается полтора пикселя на бит видеопамяти или 3 пикселя на 2 бита. Как такое выводить-то?
Вариант 800*600 мне нравится. Тут и пиксельклок не зверский, и картинка практически точно умещается в экран, только слегка сплющится по вертикали. Но надо придумать, что делать с текстовым видеоадаптером. В 800*600 потребуется другой формат шрифтов, другая разбивка экрана на знакоместа, вообщем блок знакогенератора придется капитально переделать.
Вариант 800*600 мне нравится.
Для LCD мониторов плоховато будет, а их 800х600 практически не было. У меня самого парочка 17"/19" на 1280х1024 валяется (включая до сих пор приличный NEC 1970NX). А дальше пойдут и 1680х1050 :)
Ну то такое, но хорошо бы сделать маршрут смены разрешения менее заковыристым - чтобы легко было добавлять новое. И самый крутой вариант - читать процессором по I2C EDID и выбирать нужное разрешение в зависимости от подключенного монитора. Но это усложнит видеоконтроллер.
На большинстве плат VGA DAC сделан тупо на резисторах и никто сигнал I2C обратно в FPGA не заводит.
С HDMI чуть лучше в этом плане: стоит отдельная IC
С HDMI чуть лучше в этом плане: стоит отдельная IC
можно наверное обычный VGA через переходник подрубать?
а в плане "современности \ актуальности" HDMI практичнее наверное даже?
https://c.dns-shop.ru/thumb/st1/fit/500/500/8b5a9804f0eb6d7de4272e7317dd71c3/681141f00cd8cfbfc5a179bebc1eb15ca6185768c0c2a830b2 ef548a0809e9de.jpg
Да не, EDID - это уже фантастика.
На самом деле, квадратных (5:4) мониторов уже лет 10 как не делают. Для современных мониторов стандарт - 1920*1080. А совсем скоро стандартом станет 3840*2160 :) Наши простенькие FPGA и близко не подойдут к поддержке таких разрешений.
Все квадратные разрешения эти мониторы делают интерполяцией видеосигнала, с соответствующей корявой картинкой, и придется с этим смирится. Впрочем, мой текстовый экран 640*480 смотрится не так уж и плохо, если кто запустит проект - сам убедится. Думаю, что и графика 400*286 будет смотреться не хуже, слишком уж она грубая. Посмотрим...
Что касается поддержки смены разрешения, то даже не знаю, как такое возможно. Там же все тайминги разные, а вешать селекторы в виде кучи вложенных сцепленных if в цикле попиксельной обработки - это будет выглядеть примерно так:
if ((col < 11'd141 && mode == 2'b0) |
(col < 11'd190 && mode == 2'b1) |
(col < 11'd230 && mode == 2'b2) |
...
) begin
И так по всему циклу. Синтезатор там такого насинтезирует, что ни в какие временные рамки не влезет. И это еще только развертка, а там ведь и адресация видеобуфера съедет, и соответствие шрифта и знакоместа для текстовых экранов... Ну, настоящие специалисты, наверное, знают, как решить эту проблему просто и изящно, но мне ничего простого в голову не приходит.
Ладно, надо будет попробовать хоть как-то сделать, а там видно будет. Для начала придется текстовый видеоконтроллер переделать на 800*600. Это не так-то просто, он ведь сложнее чисто графического, поскольку должен не просто отображать пиксели из видеобуфера, а выдавать изображение символов на основе шрифтов. На УКНЦ, например, из-за этого вообще отказались от текстовых режимов и текст графикой рисуют.
На самом деле, квадратных (5:4) мониторов уже лет 10 как не делают
но это не значит, что их нет, под ретро проект можно и достать ЭЛТ любой диагонали, было бы хотение! ;-)
или как на чертеже от Manwe сразу нужного размера матрицу лепить к проекту - вот это вообще "под ключ" )
На большинстве плат VGA DAC сделан тупо на резисторах и никто сигнал I2C обратно в FPGA не заводит.
С HDMI чуть лучше в этом плане: стоит отдельная IC
Ну вот так всегда - придет поручик и опошлит все мероприятие :)
Да, на VGA почти нигде не заведено I2C на FPGA, там же согласователь уровней надо ставить для гарантии.
На HDMI повеселее, на Reverse-U16 вроде бы I2C заведено.
- - - Добавлено - - -
Да не, EDID - это уже фантастика.
Да, это уже следующий уровень. Ессно, никто не критикует и не настаивает, просто для понимания как оно в норме должно бы быть.
На самом деле, квадратных (5:4) мониторов уже лет 10 как не делают.
Зашел на hotline - все еще есть в продаже новые 1280х1024, и даже модели 2019 года. Но согласен, не мейнстрим давно уже.
if ((col < 11'd141 && mode == 2'b0) |
(col < 11'd190 && mode == 2'b1) |
(col < 11'd230 && mode == 2'b2) |
...
) begin
Вот эти все константы 11'dxxxx - надо записать в регистры, и сравнивать не с константой, а с регистром, и все будет ОК.
Но, в идеале, надо осваивать перепрограммирование PLL и делать отдельный клоковый домен для VGA, тогда любой видеорежим можно поддержать. Ну... непрост... но в идеале.... :)
Ну, 1600х1200, это, конечно, не 5:4, а 4:3, но и не 16:9 :)
Да не, EDID - это уже фантастика.
На самом деле, квадратных (5:4) мониторов уже лет 10 как не делают. Для современных мониторов стандарт - 1920*1080. А совсем скоро стандартом станет 3840*2160 :) Наши простенькие FPGA и близко не подойдут к поддержке таких разрешений.
Все квадратные разрешения эти мониторы делают интерполяцией видеосигнала, с соответствующей корявой картинкой, и придется с этим смирится. Впрочем, мой текстовый экран 640*480 смотрится не так уж и плохо, если кто запустит проект - сам убедится. Думаю, что и графика 400*286 будет смотреться не хуже, слишком уж она грубая. Посмотрим...
Что касается поддержки смены разрешения, то даже не знаю, как такое возможно. Там же все тайминги разные, а вешать селекторы в виде кучи вложенных сцепленных if в цикле попиксельной обработки - это будет выглядеть примерно так:
if ((col < 11'd141 && mode == 2'b0) |
(col < 11'd190 && mode == 2'b1) |
(col < 11'd230 && mode == 2'b2) |
...
) begin
И так по всему циклу. Синтезатор там такого насинтезирует, что ни в какие временные рамки не влезет. И это еще только развертка, а там ведь и адресация видеобуфера съедет, и соответствие шрифта и знакоместа для текстовых экранов... Ну, настоящие специалисты, наверное, знают, как решить эту проблему просто и изящно, но мне ничего простого в голову не приходит.
Ладно, надо будет попробовать хоть как-то сделать, а там видно будет. Для начала придется текстовый видеоконтроллер переделать на 800*600. Это не так-то просто, он ведь сложнее чисто графического, поскольку должен не просто отображать пиксели из видеобуфера, а выдавать изображение символов на основе шрифтов. На УКНЦ, например, из-за этого вообще отказались от текстовых режимов и текст графикой рисуют.
1) Я в своём хобби-проекте как раз делаю видеовыход с поддержкой EDID - VGA/HDMI/DVI. Всё режается установкой одного мелкого STM32F103.
2) Куча разрешений легко укладываются, если картинку "вписывать" удвоением/утроением/etc пикселей. Просто для адресации видео-ОЗУ клок для счётчиков делим, как надо. Минусы - дублирующая логика. Если брать только с удвоением или без - просто мультиплексированием битов счётчика.
У меня STM'ка читает EDID с VGA, а вот с DVI/HDMI общается свой чип - с него инфа забирается так же в STM'ку. Оттуда по SPI вся инфа о таймингах и параметры PLL пишутся в FPGA - там сделал регистры для управления видео и PLL, всё вполне работает в железе. Сейчас жду печатки, что бы проверить чип для HDMI и избавиться от макеток с кучей проводков.
А если FPGA жирная, то у меня есть готовое решение без внешней STM'ки - с софт-ядром Cortex-M0, функционал тот же, только регистры висят сразу на шине AHB.
Вот вполне рабочий код, если кому надо: https://pastebin.com/dejJnD4e
Тут вся работа с EDID имеется - чтение, парсинг. Печатает Modeline в *NIX-like стиле, только частота в килогерцахи в HEX:
https://i.ibb.co/MBKGSgH/image.png (https://ibb.co/Y0JyQNS)
Получается полтора пикселя на бит видеопамяти или 3 пикселя на 2 бита. Как такое выводить-то?
Да 3 пикселя на 2 бита, левый и правый "оригинальные", средний =(Лп+Пп)/2, только не забыть, что для каждой составляющей цвета отдельно.
Вернее тут биты должны стать байтами..
Очередной этап развития проекта завершен. Я сделал наконец обещанный контроллер MY.
Это, пожалуй, самый сложный и интеллектуальный контроллер дисковода из всех использовавшихся с ДВК. Он использует DMA и имеет производительность не хуже RK11 - команда COP/DEV MY0: MY1: отрабатывается меньше чем за 5 секунд. Что странно, для загрузки параметров команды в этом контроллере используется не набор регистров (цидиндра, сектора, счетчика итд), как в стандартном дековском оборудовании, а блок данных в памяти, также передаваемый через DMA. Возможно, таким образом упростили схемотехнику контроллера или упростили жизнь программистам - такой метод проще и быстрее, чем последовательная загрузка через один регистр в RX01.
Оригинальный контроллер был построен как микропроцессорная система на 1801ВМ1. Мой FPGA-вариант обошелся набором машин состояний, дабы не загромождать и без того ограниченный бюджет FPGA огромным процессорным ядром и не убивать производительность программной реализацией DMA-обмена.
Имеются следующие отличия от оригинального контроллера:
Оригинальный контроллер мог работать с 40- и 80-дорожечными дисководами - это задавалось перемычками на плате. Мой вариант эмулирует только 80-дорожечный дисковод. Образы, снятые с 40-дорожечного дисковода и записанные на SD-карту контроллер будет корректно читать и записывать, но проинициализировать 40-дорожечную файловую систему невозможно. Да и не надо.
Команды "форматирование" и "чтение заголовков" не поддерживаются. Реализация этих команд не имеет никакого смысла, поскольку мы работает с поблочными DSK-контейнерами на SD-карте, где никаких служебных областей и близко нет.
Команды "чтение с меткой" и "запись с меткой" работают как обычные команды чтения-записи. Служебной области у нас нет, метку хранить негде. Я сомневаюсь, что эту возможность вообще хоть кто-то использовал на практике.
Оригинальный контроллер мог работать с секторами размером 256, 512 и 1024 байта. Формат сектора хранился в его заголовке. Здесь поддерживаются только 512-байтные сектора, что более чем достаточно для работы с образами, созданными на ДВК.
Контроллер в DMA-режиме ограничен 16-битным адресным пространством. Оригинальный контроллер имел возможность расширения адреса до 22 бит, но в данном случае реализация этой возможности не имеет никакого смысла - у нас 16-битная шина адреса. Но доработать контроллер до полной 22-битной шины адреса можно за полчаса. Будем надеяться, что когда-нибудь появится смысл в такой доработке.
В остальном контроллер функционально повторяет оригинал. Загрузка системы работает. В стартовый образ initdisk.img я добавил образ диска MY0 с системой ФОДОС-ТМОС. Теперь можно напрямую использовать огромные залежи MY-дискет, лежащих в разных архивах в сети.
Также прилично доработана документация. Описано распределение памяти на SD-карте, более детально описана работа дисковой подсистемы, добавлена полезная информация для портирующих проект на другие типы FPGA.
По сути, все массово применявшиеся в ДВК дисковые контроллеры теперь реализованы. Был еще MX, но делать эмуляцию этого убожества на SD-карте нет никакого смысла.
Теперь, конечно, было бы неплохо реализовать ленточный контроллер MT с магнитофоном CM-5300. Но у ленты, в отличие от диска, переменный размер блока и последовательный доступ в оба направления. Боюсь, что тут машинами состояний не обойтись, придется процессорное ядро подключать. Или ну ее нафиг эту ленту, все равно на ДВК ей мало кто пользовался...-
как в стандартном дековском оборудовании
Насколько я себе представляю, DU/MU и всякие XU/XL/XQ работают так же. Но особо в драйверах не копался, так что наверняка не скажу. Вот плотней займусь XU - тогда смогу сказать точнее
Оригинальный контроллер мог работать с 40- и 80-дорожечными дисководами - это задавалось перемычками на плате. Мой вариант эмулирует только 80-дорожечный дисковод. Образы, снятые с 40-дорожечного дисковода и записанные на SD-карту контроллер будет корректно читать и записывать, но проинициализировать 40-дорожечную файловую систему невозможно. Да и не надо.
Перемычками на контроллере задавались временные параметры дисковода - время разгона мотора, время перехода между дорожками, время загрузки головки. Естественно для эмулятора на SD эти параметры и не нужны. А объём дискеты задавался в драйвере MY.SYS, что-то типа того SET MY NTRK=40. Так что при необходимости можно проинициализировать и 40-дорожечную файловую систему, главное найти нужный драйвер.
Перемычками на контроллере задавались временные параметры дисковода
Там всего-то 2 перемычки, уходящие в стартовый регистр процессора. Они и задавали тип дисковода 6022 или 6121, а отличаются эти дисководы как раз числом дорожек.
А параметр NTRK, насколько я помню, использовался для чтения 40-дорожечных дискет на 80-дорожечном дисководе. Хотя я могу и ошибаться - в исходники драйвера я не влезал, а реально пользовался всем этим четверть века назад.
Насколько я себе представляю, DU/MU и всякие XU/XL/XQ работают так же.
Насчет сетевых интерфейсов не знаю, ни разу не сталкивался в реальной жизни. А MSCP-контроллеры, да, конечно, использовали похожий метод, но не совсем - там контроллеру отправлялся командный пакет вместе с кодом команды и всеми парамтерами. Пакет ставился в очередь, и можно было отправлять следующий пакет. В MSCP это логично и оправданно. А вот так, чтобы задавать код команды через регистр, а параметры пакетом - такого мне больше нигде не встречалось. Хотя есть еще DY, с ним я не встречался никогда, может быть там тоже так же сделано...
А параметр NTRK, насколько я помню, использовался для чтения 40-дорожечных дискет на 80-дорожечном дисководе.
У некоторых версий MZ драйвера (а их несколько) по мимо этого параметра был ещё REGIM
ЛAТ
RT-11SJ V05.04 G
Date? 19-JAN-2021
WD2>DS MZ
File name: "DK:MZ.SYS", size: 4. blocks.
Release = V05, Version(s) = 1
*** Handler data structure
Handler size 182. bytes
Device size 1600. blocks
Device status word 100374 = [ FILST$ ]
Device code 374
CSR address 176674
Vector 474
* Installation code for DATA SYSTEM
* Bootable device
H.BPTR=001266, H.BLEN=512.b, H.READ=000210
*** Set options table:
RETRY = decimal entry 412
WD2>
SYSTEM PASCAL [WD2]
+++++++++++++++++++++++++++++
ЛAТ
File name: "WD:MZ.SYS", size: 4. blocks.
*** Handler data structure
Handler size 610. bytes
Device size 1600. blocks
Device status word 102774 = [ FILST$ SPFUN$ VARSZ$ ]
Device code 374
Sysgen options 000004 = [ TIMIT$ ]
CSR address 176674
Vector 474
* Bootable device
H.BPTR=002142, H.BLEN=512.b, H.READ=000210
*** Set options table:
NTRK = decimal entry 506
SIDE = decimal entry 532
STEP = decimal entry 614
NSCT = decimal entry 734
REGIM = decimal entry 624
[no] BUFF entry 634
RETRY = decimal entry 472
WD2>
SYSTEM PASCAL [WD2]
это самые популярные, были\есть ещё варианты, в том числе драйвер размером 19 блоков ;-)
Он там даже режим IBM-PC дискет вроде как может...
Там всего-то 2 перемычки, уходящие в стартовый регистр процессора. Они и задавали тип дисковода 6022 или 6121, а отличаются эти дисководы как раз числом дорожек.
А параметр NTRK, насколько я помню, использовался для чтения 40-дорожечных дискет на 80-дорожечном дисководе.
Перемычки отвечали за временные параметры, была ещё комбинация для технологического теста. А читать 40-дорожечные дискеты на 80-дорожечном дисководе прямо контроллер не умеет, надо позиционироваться на заданную дорожку командой SEEK и читать текущую дорожку командой RDTR. Параметра пропуска дорожек в MY не было.
Портировал проект на Quartus 12.1, собрал под DE0 (отключил UART2, LPT, buzzer).
VT52 работает. Система останавливается с R7=000000, R6=000776, R0=140001
Надо разбираться, возможно кривую SD карту вставил
Что, даже промпта @ на экран не выкатывается?
Тогда, скорее всего, проблема в SDRAM.
Кстати да, про SDRAM я забыл совсем :(
Спасибо за наводку.
p.s. надо себе табличку в Excel сделать с описанием button/switch/led для DE0, как я их использовал
а мне повезло меньше :))
Под классику DE1 не хватило внутренней памяти для РОМ. немножко. эх..
Под DE10 конечно собирается, но этот вариант мне меньше нравиЦЦа, так что еще не проверял.
Можно терминал VT52 выкинуть, сразу очень много памяти освободится.
Ну ежели можно - тогда вот прямо сейчас попробую без него скомпилить. Спасибо.
upd: Иххх, не судьба мне запустить на DE1. На ней конечно есть UART, и наверное даже можно с РС подцепиться, но хотелось бы изображение на подключенном мониторе, а без модуля терминала - это невозможно, насколько я понял.
Без терминала конечно компилится, ресурсов поболее, но изображения само собой нет.
Если я отключаю rom055 (надо 4кБ, у меня только 1кБ на нее остается) - тогда картинку терминала я вижу :) Но клава не работает, видимо не с чем :(
Ладно, когда нить попробую на 5м циклоне, но там у меня все еще печальнее.
Ну и еще один вопрос - а под SRAM память это можно ли переделать, или уж слишком много надо памяти на все про все ?
SDRAM у меня работает. Тест RAM проходит. Не грузится по @B , RK
Что-то таки или с содержимым SD, или с прерываниями таймера (вроде как включил таймер, LED светится). Что-то не понимаю...
https://www.dropbox.com/s/xssea5trlrnd2jx/mc1201_02_boot_rk_hang.jpg?dl=0
Не грузится по @B , RK
C DX и MY тоже не грузится? Тогда да, или глючная карта (таких много попадается), или неправильно на нее записаны образы дисков, или неправильно выставлены переключатели дискового банка. Тут разбираться надо. Вручную командами монитора прочитать с RK сектор 0, и посмотреть в памяти по адресу, то лежит или не то. Обычно загрузчик вот так повисает, если не находит в первом прочитанном слове кода 000240.
С DX и MY так же не грузится (одинаковая реакция). Писал на SDHC карты из старого фотика (им лет 10-12): SanDisk Extreme III (class 6, 8GB) и Transcend (class 6, 16GB). Может взять microSD? Валяется 16GB SanDisk class 10 где-то.
прочитать с RK сектор 0, и посмотреть в памяти по адресу, то лежит или не то
Буду благодарен за подсказку. Не силен в программировании контролера через регистры :)
Для загрузки сектора 0 с RK достаточно сделать сброс, чтобы привести регистры контроллера в исходное состояние, записать регистр счетчика слов, затем команду:
@177406/000000 177400^
177404/000200 5
@0/000240
000002/000415
000004/000000
000006/000000
Как видим, по адресу 0 появилось слово 240, потом 415, ну и так далее - весь нулевой блок диска.
Кстати, появилась идея задать смещение данных на SD карте к началу 1 раздела (partition).
Тогда можно сделать 2 раздела:
- первый как контейнер для дисков MC1201-02 (по известному смещению от MBR),
- второй - "остаток" под FAT32.
- первый как контейнер для дисков MC1201-02 (по известному смещению от MBR),
- второй - "остаток" под FAT32.
А зачем, собственно? Жалко отдавать всю карту под образы дисков?
- - - Добавлено - - -
Решил попробовать сделать прикидку графического контроллера КГД.
В результате оказалось, что отлаживать его особо и нечем. С трудом среди дампов своих старых рабочих дискет нашел программку LAND.SAV.
Картинка получилась вот такая:
https://i.imgur.com/XZEv5ET.jpg
Картинка, конечно, неправильная, но для анализа работы схемы не очень годится.
Поэтому прошу местных специалистов - подскажите, пожалуйста, софт, с помощью которого можно потестировать КГД. Не видеопамять, а именно нарисовать на экране какую-нибудь тестовую картинку.
Ноль координаты X смещён. Не учтено время движения луча до начала картинки?
Ноль координаты X смещён.
Это и я вижу. И причину более-менее понимаю.
Там и другие проблемы видны, например, периодические вертикальные разрывы картинки. Потому мне и нужно вывести какую-нибудь более осмысленную картинку, чем эта.
А зачем, собственно? Жалко отдавать всю карту под образы дисков?
Да есть проблеми на MacOS у меня с записью на целый диск. Тут тупо какое-то анальное ограждение:
> sudo dd if=initdisk.img of=/dev/disk2 bs=1048576 count=128
dd: /dev/disk2: Resource busy
На desktop-pc под Linux другая проблема: SanDisk SD-SDHC USB card reader "сломался", не пишет, дает I/O error.
Есть еще рабочий ноут под Win10, поставил на Win32 Disk Imager. Но пришли "обновления политик из домена", ноут перегрузился и 2й час что-то накатывает себе.
Быстрее offset добавить в модель диска(-ов), чем доставать еще 1 ноут с виндой, заряжать его, ставить Win32 Disk Imager, записывать диск там.
Так там, как я понимаю, в одном месте константу приплюсовать.
- - - Добавлено - - -
Нет, ошибся, не в одном. В двух местах.
- - - Добавлено - - -
Хм.. интересное устройство контроллеров sd карты. Я бы, конечно, сделал не так, но.. В этом варианте смещение добавляется ещё в двух местах...
Так там, как я понимаю, в одном месте константу приплюсовать.
Не все так просто, к сожалению. Проблема тут в определении момента, когда надо загружать очередной байт из видеобуфера.
Но, к сожалению, я нарвался на временные ограничения - куча красных отрицательных слаков в TimeQuest. Как чувствовал, что 50 Мгц - уже многовато для видеоконтроллера.
В результате, если сделать как надо, контроллер вообще перестает работать. Тут, конечно, словами не объяснить, тут надо фрагменты исходников приводить...
Ладно - это мои проблемы, думаю что вполне разрешимые. Вот сижу, думаю как соптимизировать путь загрузки пикселей из видеобуфера...
Попробовал дать команды на регистр 0177406 -> нет реакции, не читает по адресу 0.
Накосячил, значит, вокруг маппинга SD сигналов в SPI.
Не все так просто, к сожалению. Проблема тут в определении момента, когда надо загружать очередной байт из видеобуфера.
Я про SD карту :)
команды на регистр 0177406
Вообще-то 177406 - регистр счетчика слов. Командный регистр (CSR) - 177404.
не читает по адресу 0.
В смысле - содержимое памяти по адресу 0 не меняется? Или меняется, но первым словом не 000240?
- - - Добавлено - - -
Я про SD карту
А, ну понятно. Вот так всегда бывает, когда несколько параллельных веток обсуждения идут.
Насчет SD-карты - действительно, для каждого контроллера надо вычилсять свой start_offset. Наверное, нужно было завести одну отдельную шину для сборки старшей части адреса всех контроллеров. Как-то не подумал...
действительно, для каждого контроллера надо вычилсять свой start_offset.
Для master и slave SD контроллеров, я так понимаю, не для PDP-щных контроллеров
К входному сигналу sdcard_addr в двух местах
К входному сигналу sdcard_addr в двух местах
Ну, моя идея была в том, что смещение задается через порт start_offset каждого контроллера без модификации самих контроллеров, и уж тем более модулей sdspi.
Но, конечно, я поленился вынести из sdspi полную шину адреса, хотел сэкономить малость - вынес только 23 бита. Думал, этого вполне достаточно, все-таки 4 гига, куда уж больше.
Получается, надо выносить все 32 бита. В следующем релизе так и сделаю.
Завершена половинка следующего этапа проекта - графический контроллер КГД.
Контроллер использует режим SVGA 800*600*75 Гц, и картинка в режиме удвоения пикселей ложится точно пиксель-в-пиксель по горизонтали, и с небольшим верхним темным полем по вертикали. Вот как примерно выглядит результирующее изображение:
https://i.imgur.com/rL7vc6G.png
https://i.imgur.com/EBQaEPF.png
https://i.imgur.com/8lh5WdE.png
На вышеприведенных картинках немного обрезан левый край, но это следствие некорректной работы устройства видеозахвата - оно плохо дружит с квадратными режимами изображения. На мониторе все выглядит правильно.
Всю эту красоту портит тот факт, что в игрушки эти поиграть не получится. Слишком быстрая у нас получилась платформа. Например, в игрушке LAND каждая попытка завершается примерно за секунду. Поскольку игрушки - это чуть ли не наиболее частый вариант использования графического контроллера, эта проблема является серьезным ограничением. Как обычно в мире DEC, разработчики проявляют обычное разгильдяйство, и привязывают свои программы не к системному таймеру, а к тактам процессора.
Надо сделать возможность при необходимости притормозить систему. Сильно понижать тактовую частоту нельзя - начнутся проблемы с SDRAM. Я попробовал задержать обращения к регистрам КГД - добавил в схему задержку ответа REPLY на 32 такта. Стало чуть помедленнее, но все равно очень быстро. Надо думать дальше.
Создание КГД само по себе еще не является полноценным этапом развития проекта. Надо переделать терминальный модуль на разрешение 800*600, чтобы можно было совмещать текст и графику. Без этого, например, нельзя воспользоваться графическим вариантом бейсика. Точнее можно, но только если разнести текст и графику по разным мониторам. Поэтому я пока не внес КГД в основную ветку репозитория, а создал отдельную ветку graphics, в которую внес все текущие изменения. Если у кого есть желание, можете сами попробовать.
Сильно понижать тактовую частоту нельзя - начнутся проблемы с SDRAM.
Вот поэтому и сделал индивидуальные тактовые, хотя работа и не доведена до конца.
Как обычно в мире DEC, разработчики проявляют обычное разгильдяйство, и привязывают свои программы не к системному таймеру, а к тактам процессора.
И эта же проблемы вылезет, если попробовать перенести другие (современные) игрушки.
В моем 1801вм2 проблема снижения частоты полностью решена. Доберусь до компа - расскажу
Итак, во все мои модели процессоров встроен "дульный компенсатор" - специальный блок позволяет имитировать работу ядра на низкой частоте, при этом внешняя шина Wishbone продолжает работать на общей (высокой) частоте SoC, позволяя периферии (например, SDRAM) не замедляться.
Там есть такие сигналы:
// - vm_clk_p - processor core positive clock, also feeds the wishbone buses
// - vm_clk_n - processor core negative clock, should be vm_clk_p 180 degree phase shifted
// - vm_clk_ena - slow clock simulation strobe, enables clock at vm_clk_p
// - vm_clk_slow - clock mode selector, enables clock slowdown simulation,
// the external I/O cycles is launched with rate of vm_clk_ena
vm_clk_p - позитивный клок процессорного ядра, сюда постоянно подается высокая частота (50-100MHz), и на ней работает системная шина (Wishbone)
vm_clk_n - негативный клок процессорного ядра, для внутренних нужд, просто инвертированный vm_clk_p (я предпочитаю снимать с PLL с фазой 180)
vm_clk_slow - это селектор режимов, если низкий уровень, то это "turbo", дульный компенсатор отключен, все блоки ничего не ждут, работа на максимальной частоте. Если уровень высокий, то включается специальный блок замедления. Есть специальный двунаправленный счетчик, он считает такты высокой частоты на сложение и низкой частоты (задается входом, описанным ниже) на вычитание, в момент когда ядро хочет выполнить ввод-вывод на шине - оно останавливается и счетчик перестает считать высокую частоты на сложение, работает ТОЛЬКО вычитание. По достижению счетчиком нуля - ядро разблокируется и выполнятся цикл ввода-вывода. Снаружи это выглядит так, как циклы эмитированы процессором, работающим на малой частоте. Сам ввод-вывод выполняется на полной скорости, не внося проблем в работу SoC.
vm_clk_ena - разрешение такта низкой частоты. Это не клок, это разрешение тактов. Например, мы хотим имитировать ВМ2 на 5МГц внутренней частоты (10 внешней). И основная тактовая SoC у нас 100MHz. На вход vm_clk_ena в течение 19 тактов высокой частоты 100MHz должен подаваться низкий уровень, и один такт высокий, скважность 1/19. Такой подход также позволяет имитировать любые частоты с использованием фазового аккумулятора (можно, например 5.33MHz или 99MHz). В моей репке cpu11 тестовые проекты поддерживают режим замедления, там есть переключатель, все тестировалось и проверялось.
Топ модуль
set_location_assignment PIN_AB30 -to FB_Switches[0]
set_location_assignment PIN_Y27 -to FB_Switches[1]
set_location_assignment PIN_AB28 -to FB_Switches[2]
set_location_assignment PIN_AC30 -to FB_Switches[3]
set_location_assignment PIN_W25 -to FB_Switches[4]
set_location_assignment PIN_V25 -to FB_Switches[5]
set_location_assignment PIN_AC28 -to FB_Switches[6]
set_location_assignment PIN_AD30 -to FB_Switches[7]
set_location_assignment PIN_AC29 -to FB_Switches[8]
set_location_assignment PIN_AA30 -to FB_Switches[9]
constant sw_SlowClockMode : integer := 2;
...
signal s_SwitchesDeBouncedClocked : std_logic_vector(9 downto 0);
...
signal s_SlowClockMode : std_logic := s_SwitchesDeBouncedClocked(sw_SlowClockMode);
...
s_Clk_Cpu <= s_Clk_100MHz when (s_SlowClockMode = Low) and (s_ManualClockOn = Low) else
s_Clk_1Hz;
s_SwitchesDeBouncedClocked - сигналы с подавленным дребезгом, снимаются с FB_Switches - 10 движковых переключателей на плате
s_SwitchesDeBouncedClocked - сигналы с подавленным дребезгом, снимаются с FB_Switches - 10 движковых переключателей на плате
Подавление дребезга - это старая и давно решенная проблема, о ней даже неудобно говорить :).
Вот тут (https://github.com/1801BM1/cpu11/blob/master/xen/lib/wbc_rst.v) есть модуль wbc_button, он с параметром, указывается сколько миллисекунд дребезга подавить.
Подавление дребезга - это старая и давно решенная проблема, о ней даже неудобно говорить
Я о ней и не говорил, просто пояснил - что за сигнал
- - - Добавлено - - -
Кстати, код очень старый (когда я только начинал с VHDL), поэтому - std_logic_vector(9 downto 0). Сейчас я бы сделал так - std_logic_vector(0 to 9). Хотя конкретно в этом случае - скорее всего нет, потому как движки на плате нумеруются с 9 до 0. Но - оно работает, поэтому и не трогал. Только новый функционал добавляю на движки и кнопки.
- - - Добавлено - - -
Переключится с одной частоты на другую могу в любой момент. Но есть проблема с обработкой прерывания от внешнего устройств на 1 Гц. С этим пока не разбирался.
Так что могу визуально увидеть, как происходит отработка команд. Надо бы ещё восстановить функционал тактовой кнопки - тогда будет время на то, что бы посмотреть не один сигнал на цифровой панели. А так же сделать весь этот код отключаемым на этапе синтеза. Но пока не до этого.
Итак, во все мои модели процессоров встроен "дульный компенсатор" - специальный блок позволяет имитировать работу ядра на низкой частоте, при этом внешняя шина Wishbone продолжает работать на общей (высокой) частоте SoC, позволяя периферии (например, SDRAM) не замедляться.
Вот, спасибо! Попробовал, все отлично работает. Хватило замедления в 16 раз (4-битовым регистром). Что совсем замечательно в таком подходе - тормозится только процессор, диск через DMA работает на прежней скорости. Красота.
Правда, в игрушку поиграть все равно не получается, не реагирует она на кнопки управления, хоть убейся. Но это уже проблемы совсем из другой области. Для начала КСМ сделать надо.
Для начала КСМ сделать надо.
По КСМ у меня такие мысли (конечно, я не настаиваю чтобы делалось именно так, просто соображения):
- строить на vm80a, на сегодня это самое экономное ядро, и родная прошивка оригинального КСМ тоже на 8080. Могу выложить полностью разобранный листинг родной прошивки
- память урезать до 4К и сделать на внутренней статике, 4К хватит для буфера 80x48 и останется место для служебной строки и память для переменных программы
- для аппаратного курсора сделать регистр, куда записывать знакоместо где он выводится
- на имитацию "снега" можно забить
ИМХО, такой подход сэкономил бы ресурсы и позволил бы влезть в младшие ПЛИС. Я планировал КСМ делать в таком ключе.
- для аппаратного курсора сделать регистр, куда записывать знакоместо где он выводится
Да вот в КСМ строго определённого места для курсора нет. Насколько я помню, курсор имитируется мигающим символом в последних трёх строках знакоместа. Потому есть видеопамять для символов и видеопамять для курсоров. И эти курсоры могут быть на каждом знакоместе. Просто для курсора в видеопамять курсоров заносят символ с кодом 127 (у нас в КОИ-7 это закрашенное знакоместо), и он будет высвечиваться и моргать в последних трёх строках знакоместа.
Да вот в КСМ строго определённого места для курсора нет. Насколько я помню, курсор имитируется мигающим символом в последних трёх строках знакоместа. Потому есть видеопамять для символов и видеопамять для курсоров. И эти курсоры могут быть на каждом знакоместе. Просто для курсора в видеопамять курсоров заносят символ с кодом 127 (у нас в КОИ-7 это закрашенное знакоместо), и он будет высвечиваться и моргать в последних трёх строках знакоместа.
Да, все верно. Только никому толпа курсоров одновременно на экране не нужна, он по смыслу должен быть один. Поэтому - "память курсоров" сразу нафиг, а для указания где должен быть курсор - регистр с адресом знакоместа, в этом и был смысл моего пункта.
Да, все верно. Только никому толпа курсоров одновременно на экране не нужна, он по смыслу должен быть один. Поэтому - "память курсоров" сразу нафиг, а для указания где должен быть курсор - регистр с адресом знакоместа, в этом и был смысл моего пункта.
В восемь разрядов адрес не уместится, надо два регистра. Ну и прошивку переделать, там где высвечивается курсор в нужном месте. Память для хранения параметров и собственно видеопамять символов расположены довольно далеко друг от друга, тоже придётся переделать.
По КСМ у меня такие мысли (конечно, я не настаиваю чтобы делалось именно так, просто соображения):
- строить на vm80a, на сегодня это самое экономное ядро, и родная прошивка оригинального КСМ тоже на 8080. Могу выложить полностью разобранный листинг родной прошивки
Ядро компактнее, это да... Но ну нафиг писать под 8-битные камни. Наелся этим за глаза в свое время. Особенно весело там делать 16-битные адресные вычисления, коих в программе довольно много.
У меня в этом проекте уже есть терминальный модуль, на ядре 1801ВМ2. Вот из него я и сделал КСМ. По сути, разница только в разрешении экрана - у меня она была 640*480, а надо 800*600. Терминал вместе со все остальным проектом спокойно влезает в EP4CE10, а если выкинуть из проекта часть дисков - влезет и в CE6. Тут все больше упирается не в размер процессорного ядра, а в объем внутренней памяти, который от применяемого процессора не зависит.
А вот от листинга я бы не отказался, псомотреть некоторые тонкости реализации протокола. Конечно, в чистом виде прошивка, к сожалению неприменима, хотя бы из за PS/2 клавиатуры.
- память урезать до 4К и сделать на внутренней статике, 4К хватит для буфера 80x48 и останется место для служебной строки и память для переменных программы
Я пока урезал память до 2К и сделал буфер 80*25 (24 строки данных + служебная строка). Сделать полные 80*48 несложно, но я пока не знаю, стоит ли лишний расход дефицитной внутренней памяти ради возможности скроллинга текста назад. Ни разу не видел софта, который бы этим пользовался. И даже не представляю, где такое может пригодиться. А у меня и так КГД сходу отъел 16К под видеобуфер.
- для аппаратного курсора сделать регистр, куда записывать знакоместо где он выводится
А это у меня изначально сделано. В КСМ/15ИЭ как-то совсем коряво сделано - половина ОЗУ отводится только для хранения признака курсора.
- на имитацию "снега" можно забить
Уж это точно. И в мыслях не было. А в остальном получившийся модуль полностью совместим к КСМ, точнее, с 15ИЭ-00-013, что вроде бы почти то же самое. Разница только в формате статусной строки - у меня там текстовые маркеры вместо битовых полей.
Вообщем, сейчас результирующий переделанный модуль занимает 2440 ячеек. Наверное, на ВМ80 получилось бы поменьше, потом можно и попробовать для интереса.
У меня в этом проекте уже есть терминальный модуль, на ядре 1801ВМ2. Вот из него я и сделал КСМ.
...
Тут все больше упирается не в размер процессорного ядра, а в объем внутренней памяти, который от применяемого процессора не зависит.
Есть еще ПЗУ для управляющей программы, ВМ80 точно попросит меньше ПЗУ, его бинарный код компактнее чем PDP-11, прошивка терминала работает с байтами в-основном, и без инструкции умножения тоже можно жить. Ну, такое, вопрос личных предпочтений.
А вот от листинга я бы не отказался, псомотреть некоторые тонкости реализации протокола. Конечно, в чистом виде прошивка, к сожалению неприменима, хотя бы из за PS/2 клавиатуры.
Исходник КСМ (компилируемый) (https://www.1801bm1.com/files/pdp11/mc507/ksm.asm). Да, оригинал сделан под МС7004, надо переписывать под PS/2.
Я пока урезал память до 2К и сделал буфер 80*25 (24 строки данных + служебная строка).
Сделать полные 80*48 несложно, но я пока не знаю, стоит ли лишний расход дефицитной внутренней памяти ради возможности скроллинга текста назад. Ни разу не видел софта, который бы этим пользовался. И даже не представляю, где такое может пригодиться. А у меня и так КГД сходу отъел 16К под видеобуфер.
Можно и 80х25. Я так понимаю что 48 строк внутреннего буфера это особенность КСМ которой никто не пользовался особо. На автономный режим тоже можно забить.
А с КГД не вижу другой возможности, только отдать 16К и все. Двухпортовый контроллер SDRAM видится бОльшим злом.
Более-менее получилось наконец совместить текст и графику. Выглядит это примерно так:
https://i.imgur.com/YcjPXk8.png
Обрезанный левый край картинки - это некорректная работа устройства видеозахвата. На мониторе все выглядит правильно.
У меня, кроме этого графического бейсика, больше нет ни одной программы, выводящей текст и графику одновременно. Поэтому трудно судить о точности стыковки обоих изображений.
Ну и осталось еще привести схему в человеческий вид и дописать документацию. И будет готов полноценный ДВК-3.
Vslav, спасибо за исходники. Отлично откомментированы, я и сам так люблю делать. Теперь надо вспомнить еще эту извратную систему команд...
Оказывается, у нас есть wishbone-ядро ВМ80. Получается, его можно будет попытаться воткнуть в мою схему КСМ без серьезных изменений остальных периферийных модулей.
Vslav, спасибо за исходники. Отлично откомментированы
Там не все комментарии мои, я брал какой-то листинг из Сети за основу. Но мой исходник компилируется ZASM и дает точно оригинальный бинарник.
Оказывается, у нас есть wishbone-ядро ВМ80
Так я его и имел ввиду :). Вот ВН59 нет пока, а остальное делается несложно.
Должен заметить, что у меня на Viewsonic (мониторе) сразу после включение "съедается" первая колонка текста. Auto-adjust помогает, конечно.
Но я подозреваю, что что-то не то с таймингами для строки.
Я как-то нашел "калькулятор" VGA параметров в виде excel таблицы, может быть поможет кому:
https://www.dropbox.com/s/srqg4io5ayiko74/GTF_V1R1.xlsx?dl=0
Или этот https://tomverbeure.github.io/video_timings_calculator
Должен заметить, что у меня на Viewsonic (мониторе) сразу после включение "съедается" первая колонка текста. Auto-adjust помогает, конечно.
Но я подозреваю, что что-то не то с таймингами для строки.
Как я понимаю, речь идет о версии терминала, которая дает картинку 640*480? Ну что тут скажешь...
Два вышеприведенных калькулятора дают немного разные значения пиксельклока. Остальные параметры, то есть размеры всяких полей и синхроимпульсов, я не сравнивал, поскольку первый калькулятор дает их не в пикселях, а в микросекундах, а пересчитывать мне лень.
Я делал видеоконтроллер вот по этой таблице (http://tinyvga.com/vga-timing/640x480@60Hz). Она отличается от того, что дает второй онлайн-калькулятор. И есть одно отступление - по таблице пиксельклок должен быть 25.175 МГц, у меня же он ровно 25 МГц - такой проще получить, поделив на 2 основную чатоту платы. Может быть, это как-то влияет не неотображение первого столбца...
В любом случае, теперь я перешел на другое разрешение, 800*600. Интересно, как в этом разрешении будет вести себя монитор viewsonic.
Я в своей копии репозитория "потрогал" много исходников в hdl/*, заменял <TAB> на 4*<space>, выравнивал. Короче, делал для себя читаемый текст.
Так что придется делать git reset и аккуратно делать rebase. Займет какое-то время на адаптировать. Как запущу - выложу результат теста
Только КСМ с разрешением 800*600 у меня пока в основную ветку не включен. Он лежит в ветке ksm, там же лежит и парный к нему графический модуль КГД.
Я в своей копии репозитория "потрогал" много исходников в hdl/*, заменял <TAB> на 4*<space>
Ммммм... Квартус вообще-то три пробела на таб просит. И у меня утилита для конверсии есть. Под Win32, правда. Нада будет пропитонить ее.
Если автор (forth32) будет не против, могу руками причесать под TAB=3*SPACE, сделать PR
А смысл? В квартусе оно и так правильно смотрится, а вне квартуса как-то смысла нет с исходниками работать.
Если честно, смотрится на Github очень херово.
А Quartus, как реактор текста - убожество. Но не проблем лично для меня (могу VIM подстроить)
Примеры, как TAB-ы уродуют внешний вид:
https://www.dropbox.com/s/24u5lmh6lb5k9ai/mc1201_02_github.png?dl=0
https://github.com/forth32/mc1201-02/blob/main/hdl/dw.v#L274
вне квартуса как-то смысла нет с исходниками работать
"FAR смотрит насмешливо"
http://1801bm1.com/files/images/ksm-de0_photo.jpg
KSM (на DE0) смотрится на Viewsonic в 800x600 хорошо, без лишней коррекции
- - - Добавлено - - -
На Lenovo ThinkVision (FullHD) смотрится с урезанным левым краем:
https://1801bm1.com/files/images/ksm-de0_lenovo.jpg
Если честно, смотрится на Github очень херово.
Оно неважно где смотрится. Если нет единого соглашения о табуляциях (вот как Торвальдс сказал что будет 8 - и вешайтесь), то при выкладке по внешний мир надо все приводить к пробелам), у меня в репке есть clean.bat - он убивает все временные файлы и еще там такая строчка есть:
for /r "./%~1/hdl" %%9 in (*.v) do atxt32 %%9 %%9 -s3 -f
Это запуск моей утилиты конверсии для всех .v файлов, -s3 значит табуляции выравнены на 3, как в Квартусе. Ну и потом оно и в FAR и на гитхабе смотрится OK.
yu.zxpk,
На vievsonic картинка стала нормальной, зато на другом мониторе съехала влево. Что интересно, на моем устройстве видеозахвата картинка съезжает в точности так же.
Возможно, конечно, что дело опять в погрешности пиксельной частоты - я использую 50 Мгц вместо 49.5. Но, скорее, дело вообще в принципиально кривой поддержке квадратных режимов современными мониторами. Я пробовал смотреть картинку на Iyama x2483, каком-то древнем 24-дюймовом асере и на современном 4K самсунге. И везеде картинка попадала точно в экран, но на асере сработал auto adjust для подстройки картинки.
Можно было бы попробовать синтезировать точно 49.5 Мгц с помощью PLL, но не вижу особого смысла. Кроме того, двухпортовая видеопамять будет работать в двух разных некратных тактовых доменах, и неизвестно к чему это может привести.
то при выкладке по внешний мир надо все приводить к пробелам
Вот уж не задумывался даже, что это имеет какое-то значение. Для меня этот вопрос решается простенькой командой
sed -i 's/\t/ /g' *.v
Ладно, буду релизить видеоконтроллеры - пройдусь этой командой по всему дереву проекта.
sed -i 's/\t/ /g' *.v
А оно разве выполнит выравнивание? Не разрушит отступы?
Моя утилита по умному заменяет табуляции на разное количество пробелов (и жмет в обратную сторону тоже верно)
А оно разве выполнит выравнивание? Не разрушит отступы?
Да нет, оно тупо заменяет таб на три пробела. Ну, тогда я, видимо, не совсем понимаю, чего именно мы добиваемся. Мне казалось, что проблема у нас в том, что текст, отлично смотрящийся в редакторе квартуса, в просмотрщике гитхаба превращается в мусор, из-за разного размера табуляций. Вот, например, кусок кода с гитхаба:
case (interrupt_state)
// нет активного прерывания
i_idle :
begin
// Если поднят флаг - переходим в состояние активного прерывания
if ((ide == 1'b1) & (interrupt_trigger == 1'b1)) begin
interrupt_state <= i_req ;
irq <= 1'b1 ; // запрос на прерывание
end
else irq <= 1'b0 ; // снимаем запрос на прерывания
end
// Формирование запроса на прерывание
i_req : if (ide == 1'b0) interrupt_state <= i_idle ;
else if (iack == 1'b1) begin
// если получено подтверждение прерывания от процессора
irq <= 1'b0 ; // снимаем запрос
interrupt_trigger <= 1'b0;
interrupt_state <= i_wait ; // переходим к ожиданию окончания обработки
end
// Ожидание окончания обработки прерывания
i_wait :
if (iack == 1'b0) interrupt_state <= i_idle ;
endcase
Если его пропустить через sed по приведенному выше правилу, то на том же гитхабе он становится таким:
case (interrupt_state)
// нет активного прерывания
i_idle :
begin
// Если поднят флаг - переходим в состояние активного прерывания
if ((ide == 1'b1) & (interrupt_trigger == 1'b1)) begin
interrupt_state <= i_req ;
irq <= 1'b1 ; // запрос на прерывание
end
else irq <= 1'b0 ; // снимаем запрос на прерывания
end
// Формирование запроса на прерывание
i_req : if (ide == 1'b0) interrupt_state <= i_idle ;
else if (iack == 1'b1) begin
// если получено подтверждение прерывания от процессора
irq <= 1'b0 ; // снимаем запрос
interrupt_trigger <= 1'b0;
interrupt_state <= i_wait ; // переходим к ожиданию окончания обработки
end
// Ожидание окончания обработки прерывания
i_wait :
if (iack == 1'b0) interrupt_state <= i_idle ;
endcase
Вроде все отлично, все отступы встали на свои места, ничего не разрушено.
Вроде все отлично, все отступы встали на свои места, ничего не разрушено.
Да, для этого верилога отлично. Просто моя утилита писалась изначально для ассемблера, она умеет в локальные метки и еще всякое. Вот в ассемблере где табуляции бывают после имен меток, мнемоник и операндов разной длины умная табуляция нужна. Для верилога нужна чтобы выравнивать строчные комментарии после кода:
module am2901
(
input cp, // clock positive
input [8:0] i, // operation code
input [3:0] a, // port A address (readonly)
input [3:0] b, // port B address (read/write)
input [3:0] d, // direct data input
output [3:0] y, // data output (3-state)
//
input oe_n, // Y output enable
inout q0, // shift line Q-register LSB
inout q3, // shift line Q-register MSB
inout ram0, // shift line register stack LSB
inout ram3, // shift line register stack MSB
input cin, // carry input
//
output cout, // carry output
output ovr, // arithmetic overflow
output f3, // MSB of ALU output
output zf, // (F[3:0] == 0) flag output (OC)
output g_n, // carry generate output
output p_n // carry propagate output
);
Финальный этап закончен - теперь в проекте вместо текстового терминала VT52 есть родные контроллеры КГД и КСМ.
Контроллеры выводят на VGA картинку в режиме 800*600*75 Гц. В режиме удвоения пикселей графическая картинка вписывается в экран по горизонтали пиксель-в-пиксель, по вертикали остается небольшое черное поле сверху. Вот пример графической картинки:
https://raw.githubusercontent.com/forth32/mc1201-02/main/screenshot/land.png
Теперь, как и в оригинале, возможен вывод накладывающихся друг на друга текстовых и графических слоев:
https://raw.githubusercontent.com/forth32/mc1201-02/main/screenshot/basic.png
Как и раньше, для КСМ я использовал шрифт 8х12, как более четко выглядящий на современных мониторах. Для сравнение в дереве проекта лежит также и оригинальных шрифт КСМ, который можно загрузить в ПЗУ знакогенератора и посмотреть, как текст выглядел 30 лет назад:
https://raw.githubusercontent.com/forth32/mc1201-02/main/screenshot/tmos.png
Кроме КГД+КСМ, я внес в проект еще несколько важных дополнений.
В корне проекта появился файл конфигурации conifg.v. С его помощью можно легко убирать из схемы ненужные модули:
`define KSM_module // текстовый контроллер КСМ
`define KGD_module // графический контроллер КГД
`define IRPS2_module // второй последовательный порт ИРПС
`define IRPR_module // параллельный порт ИРПР
`define RK_module // диск RK-11/RK05
`define DW_module // жесткий диск DW
`define DX_module // гибкий диск RX01
`define MY_module // гибкий диск двойной плотности MY
Достаточно закомментировать строку - и соответствующий модуль будет заменен набором заглушек, подтягивающих некоторые выходные сигналы модуля к нужному уровню. Больше не надо для этого ковыряться в потрохах схемы. Ведущий и ведомый модули sdspi теперь объединены в один, и больше не нужно заботится о назначении ведущего контроллера - все будет сделано автоматически.
В схему добавлена возможность снижения тактовой частоты до 4.5 Мгц, спасибо VSLAV, предусмотревшего такую возможность в своем процессоре. Режим пониженной тактовой частоты включается переключателем sw[3]. Без этого режима поиграть в игрушки не получится. Некоторый набор игрушек я собрал на диск MY0, входящий в стартовый комплект initdisk.img.
Документация серьезно переработана, по модулям КГД и КСМ написана отдельная дока. Ну и выявлена и исправлена кучка мелких, но досадных багов, как обычно.
Вот, вроде бы, и все. Теперь ЭВМ ДВК-3 полностью закончена и готова к эксплуатации. Больше тут доделывать вроде как и нечего.
На всякий случай напоминаю, что проект лежит в репозитории https://github.com/forth32/mc1201-02.
forth32, проделанную вами работу трудно переоценить!
Предлагаю (на усмотрение модераторов) закрепить эту тему как важную в разделе.
forth32, можно уточнение от вас организационное? Я помню, что вы делали проект для своих конкретных целей и задач, но, если пользователь вроде меня (не программист и не электронщик) захотел бы дома для личного пользования иметь такую ДВК-3, что это в деньгах и как это внешне? Неужели снова голая плата с макарошками на столе, тебе надо ты и прошивай, иди лесом дядя Ваня? Или есть вариант или планируется вариант хоть как-то оформленный в плане корпуса и полностью готовый к эксплуатации? Вопрос прошу не считать "наездом" или "реальным запросом" - просто нужно чётко и этот момент осветить. Ведь далеко не все могут самостоятельно поднять такую железячину? Для тех кто не может, но хотел бы иметь "без проблемную" ДВК-3 как хобби, дома - нужен вариант plug&play из коробки, как с этим?
Наиболее близко выглядит китайская плата QMTECH Cyclone IV Starter Kit
https://www.aliexpress.com/item/33007471265.html
но к ней надо докупать или доделывать PS/2 адаптер и SD-card reader в формате Digilent PMOD:
https://store.digilentinc.com/pmod-ps2-keyboard-mouse-connector/
https://store.digilentinc.com/pmod-microsd-microsd-card-slot/
или купить б/у борду Terasic DE0, что малость дороже. Но ничего соединять не надо :)
https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=56&No=364&PartNo=1
Наиболее близко выглядит китайская плата QMTECH Cyclone IV Starter Kit
но к ней надо докупать
программатор
Плюс ещё скачивать софт для программирования. В общем -
снова голая плата ... на столе, тебе надо ты и прошивай
- - - Добавлено - - -
Поскольку проект выглядит теперь законченным, попробую его перенести на DE10. Вроде как за вечер должно получиться. Осталось только вечер свободный найти...
Наиболее близко выглядит китайская плата QMTECH Cyclone IV Starter Kit
https://www.aliexpress.com/item/33007471265.html
Кетайцы уже нормально на нее конденсаторов налепили? А то мы с тобой мезонинки от кум-тека смотрели, там тоска-печаль с конденсаторами, могут быть сюрпризы.
или купить б/у борду Terasic DE0, что малость дороже. Но ничего соединять не надо :)
https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=56&No=364&PartNo=1
Да, терасики это вещь, присоединяюсь к рекомендации. Относительно дорого, но беспроблемно.
Кетайцы уже нормально на нее конденсаторов налепили?
А что там не так с конденсаторами?
Я QMTECH в глаза не видел никогда, но на китайских ALINX и A-ESTF конденсаторов по питанию вполне хватает. Особых пульсаций ни по 3.3v, ни по 1.2v осциллограф не видит. Я в свое время всю плату щупом истыкал, пока разобрался, почему не работает запись на SD-карту...
hobot, Собственно, с минимальными усилиями по портированию подойдет любая плата на cyclone 4, начиная с EP4CE15. Но лучше, конечно, брать FPGA с запасом, чтобы потом, будем надеяться, и ДВК-4 туда затолкать. Ну и для развлечений с SignalTap запас не помешает - он же очень прожорливый на внутреннюю память.
На aliexpress есть разные платы, и совсем голые, и с набором разъемов. Минимально нужно, чтобы на плате обязательно стояла микросхема SDRAM - ее снаружи не повесишь. Остальное можно прикрутить без всякой пайки. Особенно если делать корпус, то все равно разъемы, кнопки, переключатели, светодиоды надо будет выносить на переднюю/заднюю панель.
А что касается корпуса - то тут возможностей море, от плоской консервной банки до 3D-принтера :)
Предупреждение : нарушение правил п. 5.4, оффтоп.
У меня есть такая плата. Купил с целью освоить Verilog и Quartus весной прошлого года. Что мне нравится у QMTech, так это наличие документации (http://www.chinaqmtech.com/download_fpga) на девборды, что они делают. По питанию там все в порядке. Импульсные источники питания, конденсаторы есть, керамика по всем каналам. Особенно много по 3,3В, в том числе вокруг FPGA и вокруг SDRAM. Я в нее осциллографом за это время натыкался, косяков платы не нашел, всё что было, мои:) Но, конечно, я ее не насиловал, так как могли бы это делать Вы. Максимум, что я за это время "соорудил", заготовка VGA адаптера с текстовым режимом 720x400 (80x25 при шрифте 8-9x16)
forth32, Спасибо за интересный проект. Моим первым компом в ВУЗе, с которым я провел весь первый курс, изучая ассемблер и Паскаль, был ДВК-2М. Этого не забыть. Иметь сейчас дома реальный ДВК, большая проблема, поэтому особенно интересен компактный FPGA-клон. У Вас, конечно, цель правильная, практическое использование. У меня, так, ностальгия:)
Купить адаптеры PMOD на Ali, как мне кажется, проблема. Но уж такие простые адаптеры как для PS/2 клавиатуры и SD-карточки, легко сделать самому, ну или переделать из модулей для ардуино.
Что мне нравится у QMTech, так это наличие документации (http://www.chinaqmtech.com/download_fpga) на девборды, что они делают.
Наличие документации это как бы минимум для работы с платой. Но у QMTech даже сайта нет, просто какой-то мусор на гитхабе выложен. Тот же Терасик намного лучше свои платы сопровождает.
По питанию там все в порядке. Импульсные источники питания, конденсаторы есть, керамика по всем каналам. Особенно много по 3,3В, в том числе вокруг FPGA и вокруг SDRAM.
Плата здорового человека (Терасик с MAX10):
https://www.1801bm1.com/files/images/terasic_0.jpg
Это обратная сторона, видно что конденсаторов ОК.
Плата курильщика (QMTech):
https://www.1801bm1.com/files/images/qmtech_0.jpg
Обратные стороны плат девственно чистые, там вообще никаких деталей.
У FPGA как минимум два канала питания - ядро и порты ввода вывода. И для каждого банка нужно хотя бы по одному конденсатору (внутри микросхемы эти цепи не соединены, так как у каждого банка может быть свое напряжение питания), а есть еще PLL. То что поставили кум-теки - это обнять и плакать, выходит один конденсатор на канал. Ну голые платы, где я прицепил два проводка UART как-то работают. Но если проект подзаполнить, да навесить хорошо ввода-вывода... В-общем, сомнительно. Не говоря уже о том что стоят конденсаторы далековато, даже при своем сиротском количестве.
Ну я ее и не рекомендую, в общем. Мне, например, тоже не понятно такое кроилово. Я так понимаю, не желание располагать элементы на обратной стороне платы, это женание уменьшить затраты. Двухсторонний монтаж несколько дороже.
То есть получается, что особого выбора, кроме Терасика - и нет?..
О, сходил по ссылке - сайт у QMTech таки появился. Растут, растут :)
Мне нравится еще Digilent на Artix-7 от $130:
https://store.digilentinc.com/arty-a7-artix-7-fpga-development-board-for-makers-and-hobbyists/
Но пару минусов для проекта ДВК:
a) нет SD адаптера на борту (нужен PMOD за 7-10 баксов),
b) нет PS2, нужен опять таки PMOD или паять что-то типа пассивного переходника с USB клавиатуры на PS2, но надо решить проблему питания клавиатуры от 5V и преобразование уровней до 3.3V,
c) нет ни VGA ни HDMI порта на борту
https://shop.trenz-electronic.de
там и алтера и ксайлинкс в наличии и с документацией.
Кстати, есть же еще ReVerSE-U16: с SD, HDMI и USB host на борту, на основе Cyclone-IV и SDRAM.
Идеально же! :)
только у меня нет этой борды, чтоб поиграться с портированием
Там по прежнему до 22k LE? Тогда не совсем идеально.
Там по прежнему до 22k LE? Тогда не совсем идеально.
А зачем больше? 22K хватит на 12-15 штук 1801ВМ2. И более толстые ПЛИС обычно чуть медленнее, банально потому что глобальные каналы физически длиннее. И заливается дольше. У меня есть и толстые платы, типа Sockit или DE2-115, но я предпочитаю работать с DE0.
J-11? Почему? Какая оценка?
Для оценки я смотрю на RISC-V реализованный на SpinalHDL в разных конфигурациях, включая I/D кеш, MMU и прочие радости, чтоб поднять Linux. Примеры 2х SoC:
https://github.com/SpinalHDL/VexRiscv
J-11
А что J11? Правильно написанный J11 вполне влезет в 5К. А если регистровый файл ляжет в RAM-блок то и в 4K должен уместиться.
Вон в 22K целый PC/XT засовывают, норм.
- - - Добавлено - - -
Для оценки я смотрю на RISC-V реализованный на SpinalHDL в разных конфигурациях, включая I/D кеш, MMU и прочие радости, чтоб поднять Linux. Примеры 2х SoC:
https://github.com/SpinalHDL/VexRiscv
Да, я как бы догадывался что там скромно, но чтобы оно с блекджеком и продажными девушками MMU и cache влазило в 3K LUT - это круто.
В качестве эксперимента, попробовал сделать плату МС1201.01. Воткнул процессор 1801ВМ1 со своей обвязкой, ПЗУ 000, сделал переключатель карты памяти через регистр начального пуска. Получилась, по сути, ЭВМ ДВК-1, только вместо внешнего терминала 15ИЭ-00-013 используется КСМ.
Грузиться эта плата умеет только с дисков DX (вот и пригодились, наконец):
160442
@D0
SL V08.00 [SW] sTOROVEWYH s.w. 1988
RT-11SJ V05.01
.SET TT QUIET
.
.SH CONF
RT-11SJ V05.01
Booted from DX0:RT11SJ
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
TT is set QUIET
ERROR is set ERROR
SL is set OFF
EDIT is set Unknown
KMON nesting depth is 3
LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
60 Cycle System Clock
FPU support
RT-11 v5.4 грузиться отказывается, но 5.01 вполне загрузилась. Почему-то RESORC показывает поддержку EIS, хотя EIS в ВМ1 отродясь не было, кроме команды MUL в последних ревизиях.
Если кому интересно, все это лежит в экспериментальной ветке dvk1 репозитория. Модулем верхнего уровня надо назначить mc1201_01 вместо mc1201_02.
Конечно, смысла особого в этой плате нет - МС1201.02 умеет все то же самое и даже гораздо больше. Но получился прикольный такой конструктор ЭВМ. Наверное, можно и Электронику-60 сделать, собрав процессорную плату на LSI-11, но, опять же, пользы от нее будет немного.
Почему-то RESORC показывает поддержку EIS,
Загрузиться в варианте RT-11 от DEC без стартового файла и посмотреть там
Это и есть RT-11 от DEС. Не рафос и не фодос.... Удаление стартового файла ничего не меняет.
А вот если установить параметр VM1_CORE_MULG_VERSION =0, выкинув поддержку MUL, то RESORC забывает о поддержке EIS. Получается, RESORC определяет поддержку EIS только по наличию команды MUL.
вот если установить параметр VM1_CORE_MULG_VERSION =0, выкинув поддержку MUL, то RESORC забывает о поддержке EIS.
Тогда понятно.
RESORC определяет поддержку EIS только по наличию команды MUL
Не совсем так. Поддержку EIS (и именно по наличию команды MUL - плюс правильность результата 3*3) определяет вторичный загрузчики запоминает во втором слове конфигурации системы.
45 ;+
46 ; Check if the processor has FULL extended instruction set.
47 ;-
48 001676 012703 000003 MOV #<3>,R3 ;Set up R3 to ...
49 001702 070303 MUL R3,R3 ; ... test for EIS
50 001704 022703 000011 CMP #<3*3>,R3 ;Did it multiply right?
51 001710 001401 BEQ 40$ ;Yes
52 001712 005011 CLR @R1 ;No, don't set the bit
53 001714 CK.R1 TSEIS,+2
54 001714 052110 40$: BIS (R1)+,@R0 ;Set bit if EIS present and working
RESORC тупо показывает оттуда:
90$: BIT #C2.EIS,R4 ;How about EIS?
BEQ 100$ ;Branch if no
PRINT EISET,<Extended Instruction Set (EIS)>
Даже так? Но ведь если команды MUL нет в процессоре, загрузчик должен трапнуться. Или там и это предусмотрено?
Или там и это предусмотрено?
Небольшой хак. Используется код (от определения размера памяти), который:
154 001422 012713 003062 90$: MOV #<BCLR>,@R3 ;Non-existent memory traps will CLR @R1
155 001426 011337 000010 MOV @R3,@#V.INST ;So will illegal instruction traps
Раз уж начал, попробовал собрать ЭВМ из остальных имеющихся процессоров - М2 и М4.
С процессором М2 все более-менее работает нормально. RT-11 грузится, вся периферия работает как надо. Правда, во встроенном в микрокод мониторе загрузчиков нет в принципе, но с RK и MY можно загрузиться буквально парой команд, спасибо DMA.
Единственная замеченная проблема - почему-то при запуске процессора командой G с адреса 0 он начинает проходить загрузчик по шагам, как будто включен переключатель HALT (программа-пульт). С некоторого момента это проходит, и дальше загрузка идет как ей положено:
000000
@172140/000040 37
172142/000000 0
@0G
000000
@P
000002
@P
000036
@P
000040
@P
000430
@P
RT-11SJ V05.01
?KMON-F-File not found DK:STARTS.COM
.SH CONF
RT-11SJ V05.01
BOOTED FROM MY0:RT11SJ
USR IS SET SWAP
EXIT IS SET SWAP
KMON IS SET NOIND
TT IS SET NOQUIET
ERROR IS SET ERROR
SL IS SET OFF
EDIT IS SET UNKNOWN
KMON NESTING DEPTH IS 3
LSI 11 OR PDP 11/03 PROCESSOR
56KB OF MEMORY
EXTENDED INSTRUCTION SET (EIS)
FLOATING INSTRUCTION SET (FIS)
60 CYCLE SYSTEM CLOCK
Может быть, я чего-то не понимаю, и так и должно быть... Я электронику-60 в свое время вживую так и не пощупал, а теперь уж и пощупать негде.
Поскольку процессор М4 на 100Мгц не работает, я его запустил на 50 Мгц, взяв тактовую частоту прямо с кварца платы. Все заработало, и проблема с пошаговым прохождением загрузчика та же самая.
M4 нет, на M2 надо распаять выкушенные кондёры, так что проверить не могу, но что то мне подсказывает, что так не должно быть.. По адресу 0 - NOP, по адресу 2 - BR на 36, по адресу 36 - BR на 40, по адресу 40 - JMP на 430
По адресу 0 - NOP, по адресу 2 - BR на 36, по адресу 36 - BR на 40, по адресу 40 - JMP на 430
Это понятно, исходный текст загрузчика ведь в самом драйвере лежит.
Проблема выглядит так. Любые адрес вплоть до 430 процессор идет по шагам. Начиная с 432 - запускается в нормальном режиме.
Более того, проблема проявляется ровно 1 раз после заливки прошивки в плату. Если попробовать повторно загрузить систему - запускается нормально прямо с адреса 0. Странный такой косяк получился. Но я с процессором М2 плотно не разбирался, просто воткнул его на место ВМ2 - он подходит почти порт-в-порт. Может быть, и не учел каких-то тонкостей.
Как будто какой то сигнал вначале не в том состоянии...
Любые адрес вплоть до 430 процессор идет по шагам. Начиная с 432 - запускается в нормальном режиме.
Ну, по логу можно сказать и так 5 первых команд в пошаговом режиме, потом старт. Можно попробовать стартануть сразу с адреса 430, ещё вариант - записать по адресу 1000 - 137, по адресу 1002 - 430 и попробовать стартануть.. Можно ещё варианты придумать для тестов
просто воткнул его на место ВМ2 - он подходит почти порт-в-порт
Он не просто подходит - оно именно так и задумывалось :).
Я бы посмотрел что там на HALT. Возможно процессор рановато стартует и HALT еще не снят.
У меня тесты заводские стартует нормально, никуда не впадает.
- - - Добавлено - - -
Поскольку процессор М4 на 100Мгц не работает, я его запустил на 50 Мгц, взяв тактовую частоту прямо с кварца платы. Все заработало, и проблема с пошаговым прохождением загрузчика та же самая.
Поскольку M2 и M4 ну принципиально разные, то скорее всего таки что-то внешнее.
Я бы посмотрел что там на HALT. Возможно процессор рановато стартует и HALT еще не снят.
О, так на это я первым делом подумал..
.vm_halt(1'b0)
Притянул сигнал к 0, больше это прерывание в принципе произойти не может. В PSW лежит 0, если верить монитору (RS/), то есть бит Т не установлен. Ну а какие еще сигналы могут вызвать пошаговый режим, я понятия не имею. Внешних сигналов таких вроде нет, а потроха процессора для меня полная загадка. В отличие от великих людей вроде VSLAV, Titus, Alex_k, я процессор рассматриваю как черный ящик с ножками-портами. Хотя желание разобраться в нем имеется, но это надо собраться и выделить пару полных дней...
У меня тесты заводские стартует нормально, никуда не впадает.
Предполагаю, что тесты запускались с bsel=00. А у меня bsel=10, поскольку другие режимы запуска в моей системы не имеют смысла - нет в адресном пространстве нм одного ПЗУ. Но как это может повлиять, я, опять-таки, понятия не имею.
- - - Добавлено - - -
Блин. Понял. Есть же в мониторе команда М.
000000
@172140/000040 37
172142/000000 0
@0G
000000
@M000013
@R6/177774
@
Вот оно как. Код 3 - Ошибка обращения к каналу. Адрес - 177774. При этом выполняется команда NOP.
По этому адресу, естественно, нет ничего. Чудеса, однако.
Попробуй руками установить стек (10000) перед запуском с 0
Не, ну если руками установить стек не в 0, то оно начинает работать нормально. Я это сразу проверил, но это ничего не объясняет.
С какого бодуна команда NOP лезет в стек?
Я думаю, это не команда NOP, а команды G и P - надо смотреть логику их выполнения
надо смотреть логику их выполнения
Увы, тут нет нормального монитора, как в МС1201. Там вся логика - на микропрограммном уровне, который для меня загадка.
Кстати. Ты же смотрел код загрузчика. Там по адресу 430 как раз стек и устанавливается. Хоть это стало понятно, почему работать начинает :)
Я с таким же сталкивался на 1831ВМ1 и J11, если настроить при старте сразу выход в MicroODT
А чего его там смотреть - первые пять (примерно) команд я уже наизусть помню. А вот чего там делается с 430 адреса - не, не смотрел
- - - Добавлено - - -
Там вся логика - на микропрограммном уровне, который для меня загадка.
Я на вскидку полазал по коду, но где там MicroODT - не нашёл. Может, Vslav подскажет...
Ну, где там ODT вроде понятно, и обработчик команды G есть:
cmd_g: mw RDSTL,PCL ;
ll 0,RIRL ;
jsr putch ;
jsr putch ;
sw RPSWL,RPSWL ;
lcf NZVC,RPSWL ;
jmp 1$ ;
;
.loc 0x196 ;
1$: ri i4 ; reset T-bit interrupt
jmp 2$ ;
;
.loc 0x19A ;
2$: si i5 ; disable interrupts
jmp resop ;
;
.loc 0x19E ;
resop: jsr sinit ; performs RESET
jmp rsvc0 ; instruction
Но тут надо знать знать внутреннюю архитектуру, систему команд... Я об этом и говорил, что потроха процессора для меня пока загадка.
Мой тест из ODT по @1622G тоже на LSI-11 не стартует, и тоже код 3 - двойная ошибка шины светится. Если предварительно установить SP - работает. Если запретить прерывание таймера - тоже работает. Похоже оно пытается таймер обработать сразу и умирает. Почему пытается - непонятно, прерывания должны быть запрещены.
Интересно получается. Попробовал повторить эксперимент с отключенным таймером.
000000
@172140/000040 37
172142/000000 0
@0G
000000
@M000013
@R6/177774
@P
RT-11SJ V05.01
?KMON-F-File not found DK:STARTS.COM
.
Ситуация изменилась. Теперь процессор влетает в двойной таймаут шины ровно 1 раз, перед выполнением кода загрузчика. А после выполнения первой же инструкции все начинает работать. Действительно, при этом PSW=0, прерывания должны быть запрещены. Странно.
Проверить бы это на реальной электронике-60. Только где ж ее взять...
Проверить бы это на реальной электронике-60. Только где ж ее взять...
У меня есть М2, но её надо восстановить - кондёры выкушены.. Не раньше выходных
2$: si i5 ; disable interrupts
Почему пытается - непонятно, прерывания должны быть запрещены.
А почему запрет прерываний устанавливается в 5-м разряде? Вроде в LSI-11 5-й и 6-й разряды не используются, запрет прерываний устанавливается в 7-м разряде.
resop: jsr sinit ; performs RESET
Сигнал RESET по идее должен сбросить и внутренний триггер сетевого таймера в процессоре.
forth32, а какие у вас в первичном загрузчике значения ячеек 0100 и 0102. В стандартном драйвере там нули, т.е. будет перезапуск первичного загрузчика. Также в стандартном драйвере после команды JMP исполняется команда установки указателя стека MOV #10000, SP.
А можно листинг загрузчика выложить? Первые несколько команд?
- - - Добавлено - - -
А почему запрет прерываний устанавливается в 5-м разряде? Вроде в LSI-11 5-й и 6-й разряды не используются, запрет прерываний устанавливается в 7-м разряде.
Это не разряд в слове состояния процессора. В MCP-1600 есть специальный регистр управления прерываниями и биты 6-4 могут рулиться отдельно выделенными командами si/ri.
Стандартно, по адресу 0 - NOP, по адресу 2 - BR 36, по адресу 36 - BR 40 (если использовать стандартные макросы)
Дальше обычно делается похоже - по адресу 40 - JMP на точку входа загрузчика, но переход может отличаться адресам. В примере ниже - JMP @#574. Обычно так же - первая команда загрузчика - установить SP
5 000040' . = RKBOOT+40 ;PUT THE JUMP BOOT INTO SYSCOM AREA
6 000040 000137 000574 BOOT1: JMP @#BOOT-RKBOOT ;START THE BOOTSTRAP
7
29
30 000574' . = RKBOOT+574
31 000574 012706 010000 BOOT: MOV #10000,SP ;SET STACK POINTER
32 000600 013746 MOV @(PC)+,-(SP) ;GET THE RK UNIT NUMBER
33 000602 177412 BOTCSR: .WORD RKDA
- - - Добавлено - - -
В стандартном драйвере там нули, т.е. будет перезапуск первичного загрузчика.
Не всегда. Есть драйвера, у которых 102,2. На даже этот вариант потребует установленного указателя стека
Не всегда. Есть драйвера, у которых 102,2. На даже этот вариант потребует установленного указателя стека
Я писал про стандартный драйвер. А так да, есть. Но эти значения уже устанавливали в DESS-е. А вот стандартный драйвер MZ для УКНЦ в ячейках 0100 и 0102 содержит 0102 и 2, т.к. в УКНЦ сетевой таймер по умолчанию включён.
- - - Добавлено - - -
А можно листинг загрузчика выложить? Первые несколько команд?
000000 000240 NOP
000002 000415 BR 000036
000036 000400 BR 000040
000040 000167 JMP 000430
000042 000364
000430 012706 MOV #10000,SP
000432 010000
Сигнал RESET по идее должен сбросить и внутренний триггер сетевого таймера в процессоре.
В M2 не совсем так, триггер который детектирует фронт EVNT - он внешний по отношению к MCP-1600, обычный TM2. И сбрасывается выделенным сигналом CLR_EVNT, который генерируется микропрограммно. После сброса CLR_EVNT генерируется, а по команде G - нет. И сам MCP-1600 уже реагирует на уровень с выхода TM2 - есть высокий - переходим на обработку таймера.
- - - Добавлено - - -
Ну что, я вас поздравляю, похоже, мы нашли багу в MicROM от DEC :).
Инструкция si в обработчике cmd_g устанавливает флажок I5, что соответствует разрешению прерываний внутри MCP-1600.
Этот флажок поступает на матрицу PLM, и если он активен и есть запрос прерывания, то вместо обработки инструкции микропрограмма аппаратно (матрица выдает нужный LC) перебрасывается на обработчик. Итого - в слове PSW PDP-11 флажок-то может быть любой, но если I5 установлен - то оно идет на прерывание. Если фронт от таймера уже был, то и запрос активен. И пока загрузка PSW командой PDP-11 не произойдет и I5 при ее обработке не сбросится - прерывания по факту будут разрешены. Невзирая на PSW PDP-11 :). При нормальном старте, не из ODT этой инструкции si нет и все работает. А M4 - то отдельно надо смотреть.
Update: а это, кстати, может быть и не ошибка, а законный и документированный старт из ODT с разрешенными прерываниями.
После сброса CLR_EVNT генерируется, а по команде G - нет.
А вот это уже недоработка. Да и после запуска по команде G на ДВК в PSW ложится 0340.
А вот это уже недоработка. Да и после запуска по команде G на ДВК в PSW ложится 0340.
Не, я вижу что все законно в cmd_g:
sw RPSWL,RPSWL ;
lcf NZVC,RPSWL ;
Вот команда SW - она вычитает 16-битную пару, тут сама из себя. То есть PSW=0. Это у меня комментарий дебильный и ошибочный "disable interrupts". А изначально люди намерено поставили в обработчике "G" PSW=0 и разрешили прерывания. Ну мы можем добавить сброс запроса таймера по INIT, но это не совсем в тему, оно же будет сбрасываться при нормальном исполнении инструкции RESET - и будем терять прерывания от таймера. Вот в обрабочик cmd_g можно сброс запроса таймера и добавить. Но будет ненулевая вероятность что после сброса и до запрета прерываний инструкцией PDP-11 все-таки таймер прилетит, то есть - сброс в cmd_g - не гарантия.
- - - Добавлено - - -
Ситуация изменилась. Теперь процессор влетает в двойной таймаут шины ровно 1 раз
Возможно после сброса была генерация одного фронта, и оно залипло на детекторе фронта (сделанного согласно оригинального М2) внутри lsi_wb:
//
// Periodic timer interrupt edge detector
//
always @(posedge vm_clk_p)
begin
evnt_ed <= vm_evnt;
if (mc_clr_evnt | vm_dclo)
evnt_rq <= 1'b0;
else
if (vm_evnt & ~evnt_ed)
evnt_rq <= 1'b1;
end
А щелкнули переключателем выключения таймера когда? Уже после выпадения в ODT?
Возможно после сброса была генерация одного фронта, и оно залипло на детекторе фронта (сделанного согласно оригинального М2) внутри lsi_wb:
Все оказалось именно так. У меня же после старта схемы таймер по умолчанию включен, поскольку
initial timer_on=1;
А потом, уже при работающем ODT, я его отключил кнопкой. Но триггер успел захватить запрос прерывания. Пересобрал сейчас схему с timer_on=0 - все, проблема ушла, загрузчик запускается сразу.
Где-то в книжках по электронике-60 мне встречалась фраза, что машину желательно запускать с отключенным таймером, а включать его уже после загрузки ОС. Теперь стало понятно, откуда оно растет. Видимо, зря я повесил выключатель таймера на кнопку - надо было его на переключатель сажать, как в оригинале. Но переключатели на плате - они мелкие и неудобные, кнопкой пользоваться приятнее.
Но переключатели на плате - они мелкие и неудобные, кнопкой пользоваться приятнее.
А сделать кнопку и переключатель одновременно? Если выключатель выключен - кнопка не работает, прерываний от таймера нет. А если переключатель включен, то разрешение прерываний управляется кнопкой.
- - - Добавлено - - -
.
Где-то в книжках по электронике-60 мне встречалась фраза, что машину желательно запускать с отключенным таймером, а включать его уже после загрузки ОС.
Станочники грузятся, в-основном, с перфоленты, у команды "L" такой проблемы нет. Возможно поэтому факт разрешенных прерываний по "G" малоизвестен.
А сделать кнопку и переключатель одновременно?
Можно и так, но только ситуацию это не спасет. При включении платы переключатель должен быть обязательно выключен, чтобы процессор не защелкнул прерывание. Соответственно, чтобы в RT-11 заработали часы, переключатель надо будет включить. Смысл кнопки пропадает полностью.
Правильнее было бы сделать так, чтобы переключатель в момент включения платы задавал начальное состояние таймера:
initial timer_on=sw[4];
Только работать так не будет, к сожалению.
Я даже не знаю, стоит ли включать плату электроники-60 в проект. Функционально она ничем не лучше МС1201.02, даже хуже, а на ДВКшной плате проблем с таймером нет.
В семействе PDP-11 (как и среди наших машин) есть представители, у которых таймер есть, а регистра управления таймеров нет. Насколько я в курсе, у всех у них есть на типа передней панели кнопка-триггер - разрешить прерывания от таймера. Нажал - разрешил, ещё раз нажал - запретил. После включения питания или сброса с передней панели - состояние кнопки сбрасывается в - запретить прерывания от таймера.
М2 драли, насколько я знаю, один в один с платы DEC - LSI-11. Пару раз видел на eBay, но увы.. в коллекции только LSI-11/2, хотя вроде по функционалу они один в один, просто LSI-11 - полная плата (или двойная), LSI-11/2 - полуплата (или одинарная). Так что если делать Э60 в проекте (а с моей точки зрения - надо включать все) - то по функционалу должно быть - как мамка говорила :)
После включения питания или сброса с передней панели - состояние кнопки сбрасывается в - запретить прерывания от таймера.
Ну я вот поначалу так и сделал, почитав немного дековскую документацию. Раз уж нет в системе полноценного KW11L... Но потом меня достало включать таймер каждый раз после нажатия сброса. А в процессе отладки схемы сброс нажимается регулярно. Поэтому я и сделал таймер включенным по умолчанию. На ДВК это не мешает.
а с моей точки зрения - надо включать все
Тут я с тобой полностью согласен. Уж коли у нас есть отличные процессорные ядра, то они должны работать в проектах, а не пылиться в исходном репозитории. Видимо, я для ДВК оставлю таймер включенным, а для Э60 - сделаю отключение по сбросу.
Но потом меня достало включать таймер каждый раз после нажатия сброса.
Ну, на ДВК оно тоже так :)
Раз уж нет в системе полноценного KW11L
Ну как бы можно и сделать :)
ж коли у нас есть отличные процессорные ядра, то они должны работать в проектах, а не пылиться в исходном репозитории.
Тут, ну по крайне для меня, главное то, что будет (рабочий!) пример использования. Ну и для меня ещё плюс то, что всё это под Altera-у сделано, то есть перетащить на мой DE10 и попробовать - вообще не вопрос :) Точнее - вопрос в свободном времени :)
Можно и так, но только ситуацию это не спасет. При включении платы переключатель должен быть обязательно выключен, чтобы процессор не защелкнул прерывание. Соответственно, чтобы в RT-11 заработали часы, переключатель надо будет включить. Смысл кнопки пропадает полностью.
Переключатель должен зависеть от проекта. Если серия 1801 - то не нужен. Если стандартный DEC - то пусть будет.
Я даже не знаю, стоит ли включать плату электроники-60 в проект.
Стоит, это оригинальный LSI-11, вещь тоже интересная. А еще будет F-11, там FPP получится на шару, и он, скорее всего будет так же себя вести.
- - - Добавлено - - -
для ДВК оставлю таймер включенным, а для Э60 - сделаю отключение по сбросу.
+1, хороший вариант
Раз уж нет в системе полноценного KW11L
Ну так добавить регистр 177546 и можно включать/отключать одним битом. В DL11-W такой регистр тоже есть опционально.
Ну так добавить регистр 177546 и можно включать/отключать одним битом.
Так ни на одной из плат МСxxxx такого регистра не было. Приделать-то его нетрудно, конечно...
Так ни на одной из плат МСxxxx такого регистра не было.
Как это не было, есть у МС 3401.
МС 3401
Строго говоря, это для Э60.
И если на МС3401 сделан полноценный таймер (то есть не только регистр, но и генерация 50 Гц), будет конфликт с 1201.0х, на которых регистра нет, но генерация 50 Гц есть.
- строить на vm80a, на сегодня это самое экономное ядро, и родная прошивка оригинального КСМ тоже на 8080. Могу выложить полностью разобранный листинг родной прошивкиКстати, о 580ВМ80. Вот (https://disk.yandex.kz/d/UMAYPg2UClRe6w) отчет буржуазных цифровых археологов о вскрытии пары наших микросхем - динамической памяти, содранной с 4116 (вероятно, 565РУ3) и 580ВМ80А. Взято из журнала "Электроника" 1981 №2. В основном, конечно, обсуждается клон 4116, но и про клон 8080 тоже немножко есть. И, как я понял из этой статьи, вроде-бы, 580ВМ80А наши развели сами, глядя на потроха оригинального 8080А. Кстати, цельнотянутый 8080 у нас тоже был, 580ИК80, выпускался в 42-ногом керамическом кузове, подобном керамике 1801ВМ1, но недолго.
отчет буржуазных цифровых археологов
С темой ошибка некоторая, а так отчет ОК :)
Произведен следующий важный этап развития проекта - поддержка множества процессорных плат.
Теперь в основе проекта лежит соединительный модуль topboard - аналог МПИ-корзины оригинальных ЭВМ, только с wishbone в качестве общей шины. К нему подключаются одна процессорная плата, и набор периферийных устройств.
В данный момент реализованы следующие процессорные платы:
МС1201.01 на процессоре 1801ВМ1 - на ней основаны ДВК-1 и ДВК-2
МС1201.02 на процессоре 1801ВМ2 - ДВК-3
МС1260 на процессоре М2 (DEC LSI-11) - Электроника-60
МС1280 на процессоре М4 (DEC LSI-11M) - вот тут я даже не знаю, были ли какие-то ЭВМ на ее основе.
Выбор процессорных плат и состав периферии определяется в файле конфигурации config.v. Файл этот значительно расширен, теперь большинство параметров выбирается именно оттуда - например, выбор шрифта КСМ и латентности SDRAM.
Также добавлена возможность подключения ПЗУ пользователя вместо банка 6 ОЗУ (по адресам 140000-157777), как это сделано на многих процессорных платах. В комплекте приложены образы ПЗУ 013 (Basic) и 058 (Focal) - в результате можно собрать бездисковую ДВК-1:
https://raw.githubusercontent.com/forth32/mc1201-02/main/screenshot/rombasic.png
Появилась возможность коррекции фазы строчного синхроимпульса - для тех, у кого картинка уезжает за левый край экрана. У меня такие проблемы были с устройством видеозахвата, через которое я делаю скриншоты.
Документация полностью переработана для отражения реального состояния проекта. Кроме основной доки добавлено еще краткое руководство по созданию собственных периферийных устройств, и пример упрощенного периферийного модуля, иллюстрирующего процесс. Это я сделал в первую очередь чтобы самому все это не забыть и не вспоминать заново через год-полтора.
Проект оптимизирован по потребляемой памяти, и теперь в максимальной конфигурации спокойно влезает в EP4CE10. Соответственно, можно купить на Aliexpress относительно недорогую плату ALINX AX4010 (https://www.aliexpress.com/item/1005002035164727.html?spm=a2g0o.productlist.0.0.18 3a614aO591ys&algo_pvid=ef7b143d-277a-4f2a-8954-29e2d2ca7a5c&algo_expid=ef7b143d-277a-4f2a-8954-29e2d2ca7a5c-9&btsid=0b8b034116144050072113330ecc73&ws_ab_test=searchweb0_0,searchweb201602_,searchweb 201603_) и запустить проект на ней. На этой плате есть все кроме разъема PS/2, но его нетрудно повесить снаружи. Такие разъемы тоже продаются на aliexpress в виде готовой платки, вот такая например (https://www.aliexpress.com/item/1005001382472035.html?spm=a2g0o.productlist.0.0.31 eb36dc6EJM0P&algo_pvid=37fe5465-c305-46b8-9618-e718ea1b0065&algo_expid=37fe5465-c305-46b8-9618-e718ea1b0065-1&btsid=0bb0623d16144070046933062e8fa3&ws_ab_test=searchweb0_0,searchweb201602_,searchweb 201603_).
Именно плата AX4010 трудится с прошлого лета у нас в лаборатории без всяких проблем.
Эх ... Теперь бы кто-нибудь написал подробное "руководство для чайников" по "сборке" ДВК на FPGA.
написал подробное "руководство для чайников"
Не уверен, что это так просто... больно много надо нюансов учесть... Если только в расчёте на конкретную плату FPGA. Которая ещё должна быть выбрана...
Не уверен, что это так просто... больно много надо нюансов учесть...
Дык! Потому и прошу. Понятное дело - кто постоянно с FPGA работает не сильно напрягаясь все проделает. А вот тем кто от FPGA далек - придется тяжело. Не "невозможно", а именно тяжело.
Если только в расчёте на конкретную плату FPGA. Которая ещё должна быть выбрана...
Да хотя бы и под конкретную плату. Предлагают же Alinx AX4010 - вот хотя бы под нее (для начала). Просто фраза:
На этой плате есть все кроме разъема PS/2, но его нетрудно повесить снаружи.
нифига не руководство к действию для "чайника". А спецу по FPGA - норм.
Предлагают же Alinx AX4010 - вот хотя бы под нее (для начала).
Для того, у кого она есть. У меня вот есть DE10 (на которой есть всё), но она другим нефига не подойдёт
нифига не руководство к действию для "чайника".
Из личного опыта написания руководств под "чайников" - муторное это дело.
Да хотя бы и под конкретную плату. Предлагают же Alinx AX4010 - вот хотя бы под нее (для начала). Просто фраза:
Сообщение от forth32
На этой плате есть все кроме разъема PS/2, но его нетрудно повесить снаружи.
нифига не руководство к действию для "чайника". А спецу по FPGA - норм.
открываем схемуу девборды
https://github.com/alinxalinx/AX4010/tree/master/SCH
В правом нижнем углу два 40-ка контактных разъема.
Выбираем 2 понравившихся сигнальных контакта в них. Для начала - любых, но можно и поперебирать :)
Подключаем к ним ps\2 клавиатуру и в проекте назначаем на них сигналы клавиатуры. Собираем проект.
В первом приближении - все.
В первом приближении - все.
это только для тех кто видит бублик изнутри... он конечно бубликом быть не перестаёт,
но запрос от Arseny ИМХО:
написал подробное "руководство для чайников" по "сборке" ДВК на FPGA.
где ключевое слово "подробное" - и я знаю по опыту, что заставить "архитекторов" писать ТЕХНИЧЕСКОЕ ОПИСАНИЕ
это сверх задача, наверное только подробнейшее описание\руководство по своим разработкам Patron'а
можно как идеальный пример привести, больше и нет наверное...(это спорный момент конечно, но я в поддержку запроса о необходимости такого "руководства" как минимум!!!)
где ключевое слово "подробное" - и я знаю по опыту, что заставить "архитекторов" писать ТЕХНИЧЕСКОЕ ОПИСАНИЕ
Вообще-то мне обидно такое слышать. Потому как в каталоге doc/ лежит файл main-manual.pdf, который и есть подробнейшее техническое описание проекта. Там чуть ли не каждый модуль в схеме рассмотрен, куда уж подробнее... Я что, зря старался?
Потому как в каталоге doc/ лежит файл main-manual.pdf,
об этом надо ПОДРОБНО писать в первом сообщении, возможно запрос от Arseny вовсе не прозвучал бы...а лишь дополнительные вопросы от тех кто начал делать и по каким-то причинам столкнулся с трудностями. В любом случае -
это спорный момент конечно, но я в поддержку запроса о необходимости такого "руководства" как минимум!!! как выяснилось, есть авторское описание.
об этом надо ПОДРОБНО писать в первом сообщении
А вот это тогда что?
В каталоге doc/ проекта лежит файл с документацией main-manual.pdf, и я крайне рекомендую ходя бы поверхностно с ним ознакомится. В нем подробно описывается работа каждого периферийного модуля и содержатся ответы на многие вопросы, которые потенциально могут возникнуть при запуске проекта на конкретной плате.
Куда уж подробнее?
Все как обычно. Даже первое сообщение толком не читают, но уже осуждают автора.
CodeMaster
28.02.2021, 08:51
Там чуть ли не каждый модуль в схеме рассмотрен, куда уж подробнее... Я что, зря старался?
Конечно, не зря, но...
нифига не руководство к действию для "чайника". А спецу по FPGA - норм.
... там, как минимум, не хватает рисунка для Quick Start. Типа вот такого:
https://hsto.org/webt/ao/ix/vs/aoixvsiwqa2bxaxfyi4si28pjc4.png
Не AAA-Style, но что бы если у тебя в руках плата, клава, монитор и флешка, ты сразу знал, что к чему подключить и как залить стандартную прошивку. Кто знает - пропустят этот рисунок, кто нет - должны же получить минимально рабочую систему, что бы ковырять дальше.
Из личного опыта написания руководств под "чайников" - муторное это дело.
ИМХО, Arseny спрашивал не как чайнику переписать конфу под свои задачи, но может я неправ. В этом смысле мануал forth32 хорош. Может быть не "для чайников", но во многих случаях и такого нет.
Arseny спрашивал
подробное "руководство для чайников" по "сборке" ДВК на FPGA
Правда,
не как чайнику
?
В этом смысле мануал forth32 хорош
Он более чем хорош, он отличный - но для человека, который на определённом уровне в теме. Например, мне, примерно через месяца три после того, как я начал возиться с DE10. На текущем уровне мне он даже избыточен, но тем не менее - то, что он описывает на таком уровне детализации - даже сейчас для меня большой плюс, ибо бывает такая хрень, как - затык мозгов. И тогда пытаешься понять - как думал автор - и вот тут такой уровень подробности выручает
CodeMaster
28.02.2021, 09:51
Правда
Правда. Во-первых, написано "ИМХО", во-вторых, ты точно можешь сказать что имел в виду Arseny под словом "сборка", что бы опровергнуть моё мнение?
ты точно можешь сказать что имел в виду Arseny под словом "сборка"
нифига не руководство к действию для "чайника"
Но у нас есть авторитет в вопросе, сам Arseny, придёт и скажет, что он имел ввиду.
там, как минимум, не хватает рисунка для Quick Start. Типа вот такого:
Ну это уж как-то совсем... На таком уровне кому-то и обучающее видео захочется, следуя дурацкой современной моде на видеоматериалы.
но что бы если у тебя в руках плата, клава, монитор и флешка, ты сразу знал, что к чему подключить и как залить стандартную прошивку.
Не, так не получится. И картинка эта ничего не даст.
Дело в том, что заранее не известно, на какой именно плате конкретный пользователь будет запускать этот проект. Плат существуют сотни, и адаптацией проекта к своей плате должен заниматься сам ее владелец. И вот тут и возникает проблема: портирование FPGA-схемы - это задача отнюдь не для чайников. Надо понимать как устроена FPGA, как в нее укладывается цифровая схема, надо знать язык Verilog и уметь пользоваться средой Quartus Prime, или соответствующей средой разработки от другого производителя. Без этого запустить проект не получится.
Для тех, кому это действительно интересно, в интернете есть сотни разных руководств, от простейших для чайников до академических учебников. На том же сайте https://marsohod.org есть все необходимое для чайников, и я лично знаю радиолюбителей, вошедших в мир FPGA по статьям с этого сайта. Пройдет неделя - и можно запускать свой первый проект, мигающий светодиодом. Как говорится, было бы желание.
Короче говоря. Порог вхождения в мир FPGA несколько выше порога вхождения в мир микроконтроллеров. Мир МК в свое время был глубоко опошлен появлением такой вещи как Arduino, что и привело к появлению вот таких вот картинок для чайников. Надеюсь, что для FPGA ничего похожего на arduino не придумают.
Ну как в том анекдоте " Ты бы хоть лотерейный билет бы купил".
Купите какую-то конкретную девборду и хотя бы Quatrus поставте.
У меня на стадии отладки есть порт этого проекта под Mister и Mist. Если кому интересно могу дать на тестирование.
Купите какую-то конкретную девборду и хотя бы Quatrus поставте.
Ну, кто действительно чего то хочет - купить и поставит и попробует. Остальные будут ждать инструкций.
Как я уже писал - написание подобного рода инструкций - муторное дело. Чего тогда не написал - он жрёт ОЧЕНЬ много времени. Предположим, я возьмусь за написание этой инструкции. Что за этим последует? То, что мне придётся отложить ВСЕ свои хотелки. А мне и на них времени не хватает. С моими хотелками и стимулом для их реализации всё понятно. А что будет стимулом для написания этой (не нужной для меня) инструкции? На данный момент - НИЧЕГО.
- - - Добавлено - - -
Порог вхождения в мир FPGA несколько выше порога вхождения в мир микроконтроллеров.
Дело даже не в этом. "Программирование" в FPGA - это не то программирование, к которому привыкли играющиеся с микроконтроллерами (те, которые построены на каком-либо вариант классического процессора). Но определённые элементы программирования в нём наблюдается. И получается, что человек должен быть более менее адекватным сразу в двух областях - электронике и программировании.
надо знать язык Verilog
VHDL - наше всё ;)
- - - Добавлено - - -
В общем, ничего нового - кто хочет - делает и ищет способы сделать.
- - - Добавлено - - -
Мне, правда, часто нужна последняя капля :) Как с дизассемблером :)
Фигасе баталии с ночи до утра ... :-О
Начну с того, "что я имела в виду...":
в моем посте написано - "подробное "руководство для чайников" по "сборке" ДВК на FPGA". Руководство нужно не для "чайников от FPGA", а для просто "чайников" далеких от FPGA. Как правильно сказал Hunta про мануал - "Он более чем хорош, он отличный - но для человека, который на определённом уровне в теме. Например, мне, примерно через месяца три после того, как я начал возиться с DE10." И с этим сложно спорить, но ключевое слово здесь - "на определённом уровне в теме". О чем я и писал там же, в своем следующем сообщении - "А вот тем кто от FPGA далек - придется тяжело. Не "невозможно", а именно тяжело.".
Для примера приведу что я имел в виду под "руководство для чайников": Gbs-control (https://github.com/ramapcsx2/gbs-control/wiki/Build-the-Hardware) и далее ссылки по установке и настройке ПО.
В общем, между "адаптировать проект под свои знания FPGA" и "Изучить работу с FPGA с нуля и собрать проект" лежит достаточно большой промежуток.
Написать такое руководство, наверное, проще всего будет тому, кто имея опят работы с FPGA будет собирать себе этот девайс, попутно делая заметки на что обратить внимание и где чего взять.
На всякий случай - это все не критика в адрес forth32, что такого руководства нет. Это именно пожелание, что для чайников, не умеющих в FPGA, оно необходимо.
И у меня 8" дисковод лежит, хороший вариант попробовать через переходник подключить к FPGA И порулить.У меня тоже лежала пара болгарских (кажется, ЕС5074, точно уже не помню). Кто-то выпросил у меня один из них, я приволок их домой из гаража, один подарил, второй открыл, глянул на кучу соплей, криво перепаянных микросхем, оторванных дорожек и пр., прикинул возможность восстановления, посмотрел на рассыпавшийся от старости пассик, да и выбросил всё на помойку. Движок только снял, там был СД-6-4, синхронная версия движка, который у нас назывался КД-6-4 (кривоутянутый 4KS-18AW).
У меня на стадии отладки есть порт этого проекта под Mister и Mist. Если кому интересно могу дать на тестирование.
Интересно. :)
Интересно. :)
Хорошо, сейчас соберу последнию версию и сюда выложу. Но загрузка пока только с внешней sdcard.
проще всего будет тому, кто имея опят работы с FPGA будет собирать себе этот девайс
В силу специфики моей предыдущей работы инструктором по технологиям Microsoft дома у меня сетка, который могу позавидовать корпоративные сетки некоторых средних по размерам предприятий. Поскольку технологии MS не стоят на месте и периодически клепаются новые версии, той же Windows, стоял вопрос перехода с одной версии продукта на другую. До появления средств виртуализации класса Энтерпрайз. Как показывает практика - апгрейд на месте - великолепный шанс получить - И теперь у нас НИЧЕГО не работает, поэтому я предпочитал и предпочитаю развёртывать всё с нуля. Но при этом возникает вопрос о переносе настроек, которые были сделаны в старой системе - на новую. Очень долго я пытался (как это дело рекомендуют все руководства по управлению энтерпрайзом) всё это дело документировать. И налетел на то, что меня бросает между двумя крайностями:
- Ну, это очевидно, это тоже, это настройка по умолчанию (поэтому в доки не попадало), а вот для этой хрени было задано такое то значение (и оно документировалось). Результат. После начала просмотра этой доки через два года - очевидное тогда не было очевидным для меня сейчас, а чего там в старой системе по умолчанию.. Хм.. А какое там значение по умолчанию? Щас, начнём разворачивать продукт и глянем... КАК ДО ЭТОГО МОМЕНТА Я ДОБЕРУСЬ ТОЛЬКО ЧЕРЕЗ НЕДЕЛЮ??? (ибо надо было поставить Windows, сделать определённые настройки, потом накатить нужный софт и только потом ставить SharePoint... для примера :) )
- Тут жмём эту кнопку, из выпадающего списка выбираем, в поле ввода вводим.... - ну то есть ОЧЕНЬ подробная инструкция. Результат. Мне это ОЧЕНЬ быстро надоедало, я откладывал, потому забывал... и доки не было вообще
Так к чему я это. Тот, кто имел хоть какой то опыт работы - уже имеет некоторые знания по умолчанию и очевидности. И они или не попадут в руководство (но будут совсем неочевидны для новичка) или он просто устанет писать Нетленку.
Нужен именно тот, кто НЕ ИМЕЕТ ОПЫТА работы с FPGA. И имеет опыт написания руководств.
- - - Добавлено - - -
В общем, честно, но печально - не ждите руководство в ближайшее время. Ибо должен найтись чайник, который а) не имел опыта работы с FPGA б) захочет данный девайс (я имею ввиду ДВК на FPGA) в) рискнёт влезть в это дело г) доведёт до конца и д) осилит доку. Если бы мне это попалось в марте 2018 года - я бы точно осилил пункты а-б-в-г (как показал опыт - месяца за два бы), но имея (печальный) опыт написания доков для чайников - врят ли осилил бы пункт д....
(ушёл ваять дизассемблер)
Нужен именно тот, кто НЕ ИМЕЕТ ОПЫТА работы с FPGA. И имеет опыт написания руководств.
Вот тут ты не совсем прав. Смотри: некто написал и выложил руководство "под себя", первый же "чайник" просто обязан поиметь проблемы в каком-то месте в процессе и задать об этом вопрос - и руководство будет исправлено в этом месте. Далее цикл будет повторяться: ошибка->правка руководства. Если вопросов по руководству нет - либо там сразу все офигенно, либо никто его не читал и оно не сильно нужно.
В общем, честно, но печально - не ждите руководство в ближайшее время.
Ну, во-первых, у меня есть реальная ДВК-3. Во-вторых, я все-таки больше УКНЦ'шник. Так что, спокойно подожду или потом просто сам займусь.
- - - Добавлено - - -
О! Кстати!!! А как в данном проекте на клавиатуре QWERTY/ЙЦУКЕН разложена МС-7004?
и задать об этом вопрос - и руководство будет исправлено в этом месте.
Если только автор доступен и ему ещё не надоело вносить исправления в доку. Ибо он уже давно забросил этот проект и перешёл к другим. Или скажешь - такого не бывает? (я не про данный конкретный проект)
Кроме того. В плане проектов на FPGA - их внутренности можно разделить на две части. Общее и предназначенное под конкретную плату с конкретным кристаллом FPGA. Как показала моя практика, вопросу буду возникать по второй части (первая нужна, если захотел внести изменения в сам проект, а не перенести его на новую плату). Вопрос - а у автора такая плата есть? Нееет? Ну тогда совсем не факт (хотя и возможно), что он сможет что то подсказать. Особенно если это было сделано под кристаллы одно производителя (Altera), а у чайника (по подсказке его "всё знающего приятеля") кристалл другого (Xilinx) производителя. Где и софт по синтезу - тоже другой.
В целом - вывод тот же - тот, кто хочет, должен купить плату - и пробовать. Не ожидая руководства. Заодно и напишет свою история - адаптации проекта под эту плату.
- - - Добавлено - - -
А как в данном проекте на клавиатуре QWERTY/ЙЦУКЕН разложена МС-7004?
Что то мне подсказывает, что именно так и разложена. Ибо в варианте JCUKEN/ЙЦУКЕН на английской PS/2 клавиатуре вводить латинские буквы не реально
Что то мне подсказывает, что именно так и разложена. Ибо в варианте JCUKEN/ЙЦУКЕН на английской PS/2 клавиатуре вводить латинские буквы не реально
Меня интересует не столько латинские буквы, сколько не совпадающие с PS/2 символы и клавиши напрочь на ней отсутствующие. Плюс к тому, организация работы ФИКС и CAPS LOCK (к примеру) - немного разная ...
О! Кстати!!! А как в данном проекте на клавиатуре QWERTY/ЙЦУКЕН разложена МС-7004?
Доку принципиально не читаем?
Буквенные кнопки клавиатуры вводят именно то, что на них написано. В латинской раскладке QWERTY, в русской ЙЦУКЕН. Вот некоторые спецсимволы в русской раскладке оказались не на своих местах из-за особенностей ps/2 клавиатуры, но к этому легко привыкнуть. Да и мало кто будет набирать длинные русские тексты...
Из-за этого таблица перекодировки сканкодов занимает чуть ли не треть объема памяти VTRAM. И никак этого не избежать. Это в настоящем КСМ клавиатура передает готовые коды символов, халява полная...
сколько не совпадающие с PS/2 символы и клавиши напрочь на ней отсутствующие
С одной стороны - можно в исходниках посмотреть (а возможно и в документации есть - но не помню), с другой стороны - сейчас точно не полезу, да и автор как есть - он может ответить... :)
- - - Добавлено - - -
Доку принципиально не читаем?
Готовься к потоку таких вопросов. Ибо - не, не читаю, у автора же вагон свободного времени - вот его и спросим ;)
от некоторые спецсимволы в русской раскладке оказались не на своих местах из-за особенностей ps/2 клавиатуры
Насколько я понимаю, вопросы про всякие клавиши типа Ф1 Ф2 (всех не помню, а до клавы далеко лезть), я уж молчу про спец-клавиши на клавиатуре от 13ИЕ
Интересно. :)
Альфа версия порта МС1201.02 для MiSTer.
https://www.dropbox.com/s/bqsbjpc44e76kos/MC1201-MiSTer.7z?dl=0
Образ диска https://github.com/forth32/mc1201-02/raw/main/disk/initdisk.7z заливаете на SDCard (например этой утилитой https://sourceforge.net/projects/win32diskimager/)
В пульте загрузка
B
RK0
или
DX0
или
MY0
Выход в пульт - выбрать пункт ODT в меню.
Доку принципиально не читаем?
А смысл ... Например вот, цитата: "Раскладка букв и символов во всех режимах примерно соответствует стандартной раскладке АТ-клавиатуры (LSI-11)qwerty/йцукен) с небольшими отличиями, которые легко выявить опытным путем (LSI-11) лень рисовать картинку с раскладкой)." Очень подробное описание :-) В проекте PS/2-УКНЦ я делал свое новое распределение клавиш МС-7007 вот такое:
https://pic.maxiol.com/images2/1593253005.787615700.064346af64489al.jpg (https://disk.yandex.ru/mail/?hash=dykmRXVXSg%2FRRVFOv88wW3s4Sf5eskVdeJG23LO0O% 2BkMldWmnfUgTYS4M0zYuBs5q%2FJ6bpmRyOJonT3VoXnDag%3 D%3D)
Насколько я понимаю, вопросы про всякие клавиши типа Ф1 Ф2 (всех не помню, а до клавы далеко лезть), я уж молчу про спец-клавиши на клавиатуре от 13ИЕ
Ну, тут я могу пояснить.
По стандарту VT52 определны всего три F-кнопки - F1,F2, F3. Они отображаются, соответственно, на NumLock, /, *. То есть расположены там же, где и на родной клавиатуре, и все, кто привык работать с EDT/K52 дискомфорта ощущать не будут.
А всякие спецкнопки клавиатуры 7004 частично отображены на неиспользуемые кнопки PS/2 - home, ins, PgUp итд.
В доке, естественно, есть соответствующая табличка, но, как ты верно заметил, читать ее никто не собирается.
В доке, естественно, есть соответствующая табличка, но, как ты верно заметил, читать ее никто не собирается.
Ладно, ладно! Я все понял - затыкаюсь :-)
кто привык работать с EDT/K52 дискомфорта ощущать не будут
Что то мне подсказывает, что таких тут не много. Я привык к VT52 для редактора MIM, который тоже использует PF1-PF2-PF3 (кстати, а не F1, F2, F3, насколько мне не изменяет память), но для эмулятора Патрона я перенёс их на F1-F2-F3 - и уверяю, то же никакого дискомфорта, более того - больше задействована и левая рука. А на всякие Insert-Delete-Home-End-PageUp-PageDown повесил соответствующие команды MIM-а - тоже очень удобно :)
- - - Добавлено - - -
читать ее никто не собирается
Раньше дока (ну и исходники) были единственными источниками информации. Сейчас, во времена интернета и гугла, народ отвык от этого. И любой вопрос, который раньше решался личным поиском в доках и исходниках, теперь.. ну ты понял, да? ;) Скоро и гуглом перестанут пользоваться :)
Ну что... на MiSTer-е (DE10-nano) благодаря усилиям коллеги xolod работает. :cool:
Система грузится, TETRIS и MARS запускаются. :)
Еще раз спасибо forth32.
Подскажите: вот эта (https://aliexpress.ru/item/1005002035164727.html?spm=a2g0o.productlist.0.0.18 3a614aO591ys&algo_pvid=ef7b143d-277a-4f2a-8954-29e2d2ca7a5c&algo_expid=ef7b143d-277a-4f2a-8954-29e2d2ca7a5c-9&btsid=0b8b034116144050072113330ecc73&ws_ab_test=searchweb0_0,searchweb201602_,searchweb 201603_&sku_id=12000018490732200) и вот эта (https://aliexpress.ru/item/1005001869648969.html?spm=a2g0o.cart.0.0.5f363c00Q fxK2A&mp=1&_ga=2.83712214.1758977770.1614520845-600950050.1607441190&sku_id=12000017948688542) платы одинаковые? Просто в той плате (первой) что использовал forth32 не вижу входит ли в поставку USB прошивальщик, а во второй - четко указано что есть. Цена одинаковая.
По первой ссылке продают два варианта платы - AX301 (6 килоячеек - маловато будет вроде) и AX4010 (10 килоячеек - вроде норм)
По второй ссылке - только AX4010
См дальше
- - - Добавлено - - -
По первой ссылке за доп деньги продаван предлагает вроде ещё модулей
Вроде как входит и USB bluster, но таблица на китайском - нихт нефига ферштейн.
Сами же платы - AX4010 - да, одно и тоже
- - - Добавлено - - -
А, ну собственно у второго есть похожая таблица с теми же доб модулями, но на человеческом языке.
Но вот некая странность - плата с кристаллом Altera, а usb bluster типа Xilinx. Вроде они (usb bluster-ы) у них одинаковые - но наверняка не скажу...
ксайлинковский прошивальшик в неск.раз дороже альтеровского. и они разные. К слову.
вот хорошая цена (https://aliexpress.ru/item/32832209582.html?spm=a2g0o.detail.1000014.41.72fa5 5d80Xi4Xk&gps-id=pcDetailBottomMoreOtherSeller&scm=1007.33416.205061.0&scm_id=1007.33416.205061.0&scm-url=1007.33416.205061.0&pvid=35f1b1cc-17ae-4379-97ec-6c9817c01696&_t=gps-id:pcDetailBottomMoreOtherSeller,scm-url:1007.33416.205061.0,pvid:35f1b1cc-17ae-4379-97ec-6c9817c01696,tpp_buckets:23416%230%23205061%2310_2 3416%234721%2321967%2353_23416%234722%2321972%236_ 21387%230%23183380%230_4452%230%23214000%230_4452% 233474%2315675%23235_4452%234862%2324463%2383_4452 %233098%239599%23102_4452%235105%2323438%23863_445 2%233564%2316062%23967&_ga=2.205944211.1256337873.1614532694-611096600.1609690030&sku_id=65924924307), если на то пошло
300 р на бластер - так себе, средне.
там Alinx - созвучно конечно)
Мои 5 копеек, как сделать проект портируемым на любую FPGA-плату:
- как пример можно посмотреть на мой cpu11 и его структуру каталогов - переносится за полдня на любую подходящую плату (включая живой прогон и тест)
- все элементы зависимые от семейства FPGA (циклон, спартан, zynq, etc) вынести в отдельные файлы-библиотеки (per FPGA-family)
- внешнюю шкурку, зависящую от распиновки сделать отдельной для каждой платы (per board), внутрь вывести совместимый интерфейс, куда подключать уже портируемое ядро
- для каждой платы - свой индивидуальный проект в каталоге, со своей распиновкой и файлом внешней шкурки, под тулзу нужного производителя (Quartus, Vivado, ISE, Tang Dynasty)
- надо начать использовать git по прямому назначению, а не как примитивную систему контроля версий и CMS для выкладывания на сервер (github).
Вот по последнему пункту, при правильной архитектуре проекта - ЛЮБОЙ человек, имеющий свою плату с FPGA, сможет сделать на ней свой проект, отладить
на своей личной плате, а затем СДЕЛАТЬ PULL REQUEST, и это может быть включено в основной репозиторий. И все платы и апдейты будут храниться в одном месте,
в одной репке. И все изменения будут ревьюиться и мержиться мейнтенером (forth32). Потому что я вижу что начинается обычный колхоз - проект растаскивают,
как-то где-то портируют, выкладывают на стороне. Это прекрасно, но серьезные проекты живут не так. Если будет сделана реорганизация, как описано выше - то сделаю
порты на DE0, и DE2-115, а может еще на какие имеющиеся платы. Да и любой может сделать то же самое для своей платы, и все это - будет храниться в одном месте,
ошибки и проблемы будут тречиться в одном месте, фиксы и дальнейшая разработка - в одном едином месте.
git - это система распределенной разработки прежде всего. Лично я бы очень хотел поучаствовать в разработке ДВК на ПЛИС. Но, я сознательно в это не лез, потому что это отдельная большая тема, мне просто не хватит ресурсов ее потянуть. Так что я сознательно ограничился разработкой ключевого компонента, продумал его дальнейшую интеграцию и ждал что кто-нибудь подхватит. Возможно если бы живая ДВК не нужна была для оборудования, то любительский проект до сих пор бы не появился, работы тут много, одного энтузиазма не всегда достаточно :). Но поучаствовать-то хотя бы частично хочется, есть свои идеи/модули, поэтому было бы круто если бы проект приобрел вид, пригодный для широкой контрибуции.
Потому что я вижу что начинается обычный колхоз - проект растаскивают,
как-то где-то портируют, выкладывают на стороне.
Если это намек на меня то я пока исходники никуда не выкладывал. Ну и стараюсь делать с минимальными правками оригинального проекта.
Если это намек на меня то я пока исходники никуда не выкладывал. Ну и стараюсь делать с минимальными правками оригинального проекта.
Я ни в коем случае не хотел обидеть, то что сделан порт - это замечательно, но как это будет выложено? В основной репозиторий замерджить можно?
Я ни в коем случае не хотел обидеть, то что сделан порт - это замечательно, но как это будет выложено? В основной репозиторий замерджить можно?
Без реорганизации можно смержить все кроме top ну и файлов проекта под конкретную борду.
Без реорганизации можно
Вот, именно про желательную реорганизацию и речь, тогда все можно в одну репку.
Ну что ж, в этом всем есть своя правда.
Изначально я очень не хотел засорять репозиторий кучей проектов под разные платы. Мне казалось, что тот, кто заинтересуется этой разработкой, а таких здесь можно по пальцам одной руки пересчитать, легко сможет адаптировать проект под свою плату, как я это в свое время сделал с тестовым стендом cpu11.
VSLAV, ты как всегда оказался дальновиднее. Логичнее будет собрать все кустарные порты в один репозиторий, а не размазывать их по форуму. Если бы до меня это дошло сразу, я бы заложил это в основу проекта. Теперь же придется глобально продумывать, что именно вынести на верхний уровень, потом перетаскивать туда куски схем вместе с тянущимися за ними жгутами проводов. Все это снова и снова перепроверять. И, самое противное, опять переписывать документацию. На это все требуется немало свободного времени. Что ж, придется в выходные этим заняться.
Есть еще один момент. По результатам временного анализа в процессоре ВМ2 у меня всегда вылезала кучка красных отрицательных слаков. Все эти пути лежат внутри процессорного ядра, идут от регистра PLM к разным другим регистрам. И, действительно, по этим путям в схеме висит длинная цепочка разнообразной логики.
Поскольку слаки были небольшими, около 0.1нс, я на это дело просто забил. TimeQuest показывает Fmax=99Мгц, процессор работает как надо, не сбоит, стресс-тест на несколько суток отрабатывает без проблем на 30-градусной жаре.
Когда я делал плату на процессоре М2, я как-то упустил из виду повторить временной анализ. А вот теперь сделал его, и несказанно удивился. Слаки стали огромными - по самым длинным путям стали около 2нс. И Fmax теперь предлагается 84 Мгц. Но, что странно, процессор так же отлично работает на 100Мгц, тесты идут, ничего не виснет.
Я вот думаю. Забить на такое уже нельзя. Может быть, сделать тактовую частоту 75 Мгц для всех процессоров? Или даже 50 Мгц? В конце концов, для проекта ДВК даже такая частота явно избыточна. И уж тем более для всяких управляющих контроллеров.
Главное, чтобы не начались проблемы с SDRAM. Впрочем, М4 у меня отлично работает на 50 Мгц с SDRAM без всяких проблем.
По результатам временного анализа в процессоре ВМ2 у меня всегда вылезала кучка красных отрицательных слаков. Все эти пути лежат внутри процессорного ядра, идут от регистра PLM к разным другим регистрам. И, действительно, по этим путям в схеме висит длинная цепочка разнообразной логики.
Поскольку слаки были небольшими, около 0.1нс, я на это дело просто забил. TimeQuest показывает Fmax=99Мгц,
Фухххх.. Отлегло...
ISE вполне солидарен с Quartus-om оказывается, я вчера на весь этот ужас в Timing Analyzer посмотрел, поудивлялся (на бОльшее я тут не способен), попинал в очередной раз на свои кривые руки, и закрыл. В лучшем случае Fmax=64Мгц было, а то и в несколько раз меньше :((((
Ну работает же как то думаю, и ладно. Возможно трапы 4 и 10 из-за этого иногда и вылазят, спонтанно на ровном месте.
Ну и компиллер еще на один сигнал стал ругаЦЦа, что типа так категорически не рекомендуется!!, но это уже другаЙя история, не в ядре проца.
https://s.micp.ru/9i4gz.jpg
Изначально я очень не хотел засорять репозиторий кучей проектов под разные платы.
Это абсолютно понятно. Поддержка "кучи плат" требует более сложной архитектуры, тем более лично тебе в данный момент эта "куча" не нужна и в проекте есть много других проблем. Вполне логично упростить и сосредоточится на более критичных задачах. Мой cpu11 шел точно так же - поддерживалась только DE0 и все. А потом пошли вопросы по другим архитектурам, стало ясно что не все так уже гладко с портированием и пришлось делать реорганизацию. Кстати, эту историю прекрасно видно в git log - тем git и хорош - хранит историю, отмечает вклад каждого и видно кто-где какие строчки внес и у кого можно проконсультироваться.
То что я высказал в предыдущем посту - это не критика, и даже не конкретная просьба, это просто видение как проект можно было бы улучшить (такой себе roadmap) и обеспечить дальнейшее развитие. Open Source - это не просто показать исходники, тут Open означает "открытый для контрибуции". В одиночку все интересы покрыть очень сложно, но если обеспечить хорошую базу и наладить взаимодействие с людьми, то может выйти интересно. Это не очень просто, не факт что получится, но пойти в этом направлении мне кажется интересным.
Теперь же придется глобально продумывать, что именно вынести на верхний уровень, потом перетаскивать туда куски схем вместе с тянущимися за ними жгутами проводов.
А предыдущий вариант не выкидывается же, гит все сохранит :). Я бы предложил сделать архитектуру в новой ветке, выложить как PR, обсудить его открыто (с конкретным сроком окончания дискуссии, чтобы не расползаться), и только потом замержить окончательный вариант.
Все это снова и снова перепроверять.
А ты мейнтейнер, ты не должен (и не сможешь, хотя бы потому что у тебя некоторого железа не будет на руках) делать все сам. Если человек предлагает патчи на свою плату, то ты смотришь чтобы патчи не портили основную часть (а если они ее изменяют, то это должны быть отдельные коммиты, с пояснением почему и как, это легко отследить и проверить), а за часть для конкретной платы отвечает контрибутор, тесты и документация по плате - на нем/ней. Если нет документации - в ревью пишешь - вот это-это и это - надо описать, а вот тут тестов не хватает итд. Это как может быть, если проект сделать тру опенсорс. И можно двигаться постепенно - сначала новая архитектура для легкой контрибуции плат, на шаг вперед можно подумать как облегчить контрибуцию новых модулей (я хочу например сделать MX/MY чтобы они работали с реальными дисководами, КЦГД хочется, но там все в контроллер памяти упирается), подумать как процессоры сделать git-субмодулем чтобы все изменения в процессорах подтягивались автоматом итд.
Главное, чтобы не начались проблемы с SDRAM. Впрочем, М4 у меня отлично работает на 50 Мгц с SDRAM без всяких проблем.
Частоту хорошо бы сделать настраиваемой - PLL же программируется, заодно любителей оверклока порадуем.
Дискуссия про языки описания схем перенесена сюда (https://zx-pk.ru/threads/32963-vybor-yazyka-opisaniya-elektronnykh-skhem.html).
Закончен очередной этап развития. Может быть, самый глобальный из всех.
Теперь дерево проекта может хранить в себе набор портов под различные FPGA-платы. Не нужно больше размазывать кустарные порты по форуму, они все могут лежать в одном месте.
В дереве проекта появился каталог boards/, а в нем набор подкаталогов, каждый из которых соответствует одной конкретной FPGA-плате. Теперь головным модулем проекта является интерфейсный модуль, производящий адаптацию ядра проекта под конкретную плату - для каждой платы создается свой собственный интерфейсный модуль. Соединительный модуль (корзина) topbaord теперь находится уровнем ниже и предоставляет унифицированный интерфейс к ядру проекта.
Кроме интерфейсного модуля, в каталоге проекта для каждой платы хранится свой собственный набор мегафункций - PLL и altsyncram.
На интерфейсный модуль также вынесены следующие подсистемы:
PLL
Контроллер SDRAM
Схема управления видео-ЦАП
Все эти элементы сильно зависят от конкретной FPGA-платы.
Частоты PLL теперь настраиваются в зависимости от примененного процессорного модуля, а делители и умножители задаются в файле конфигурации config.v. Можно по результатам временного анализа устанавливать свои тактовые частоты для каждой конкретной FPGA.
Соединительный модуль topboard теперь предоставляет унифицированный интерфейс к контроллеру SDRAM. Адресную шину я сразу сделал 22-битной - а вдруг все же когда-нибудь пригодится? Конкретная реализация ОЗУ находится на интерфейсной плате. Можно воспользоваться входящим в проект контроллером стандартной SDRAM, можно сделать свой собственный, если на FPGA-плате установлен SDRAM другого типа, например DDR2. Если ресурсы позволяют, можно выделить 64К из внутренней памяти FPGA. Пример реализации такого подхода можно посмотреть в проекте для платы A-E115FB.
Я произвел пробное портирование схемы на некоторые свои FPGA-платы, попавшие под руку. Они все сделаны на различных вариантах FPGA Cyclone-4 - другие серии FPGA я уже давно не использовал. Все эти порты уже лежат в каталоге boards/ и могут служить примером для создания собственных портов. Для каждой платы приложен файл Readme.pdf с описанием особенностей данной платы и реализации проекта на ней.
Как обычно, документация проекта полностью переработана в соответствии со всеми изменениями, и крайне рекомендуется к ознакомлению.
Концепция построения иерархии проекта пока не окончательная - возможно, кто-то предложит вариант получше. Настолько получше, что мне не лень станет снова все переделывать и переписывать доку. Я, конечно, понимаю, что интересующихся этим проектом людей можно пересчитать по пальцам одной руки, но все же...
VSLAV, я обдумал твою идею насчет унификации IP-компонентов в пределах одной серии FPGA. Обдумал, и отказался. Не нравится мне, когда куски схем размазаны по всему дереву, как масло по бутерброду. Тем более, что у меня вообще сейчас нет ни одной платы с FPGA, отличных от циклона-4. Я решил, что проще хранить полный набор мегафункций вместе с каждой платой, много места они не занимают.
Теперь все желающие могут попробовать сделать порт под собственную плату, и оценить, насколько это удобно. Я сделал 5 разных портов, и это заняло у меня один день, что не так уж и плохо. Конечно, протестировать каждый порт со всеми вариантами конфигурации я не успел, но, по идее, все должно работать.
Я решил оставить старый репозиторий в неизменном виде. Новый вариант проекта лежит в новом репозитории с более адекватным именем - https://github.com/forth32/dvk-fpga. Ссылку в первом сообщении я пока не исправлял.
Еще полгода назад я даже не предполагал, в какого монстра превратится моя несчастная плата МС1201.02...
Закончен очередной этап развития. Может быть, самый глобальный из всех.
Ну что сказать... Круто, очень хороший прогресс!
VSLAV, я обдумал твою идею насчет унификации IP-компонентов в пределах одной серии FPGA. Обдумал, и отказался. Не нравится мне, когда куски схем размазаны по всему дереву, как масло по бутерброду.
Дело не в "нравится-не нравится", а в удобстве менеджмента проекта и его дальнейшем развитии. Давай посмотрим на шаг вперед? Вот у тебя сейчас 5 плат на Cyclone-IV. Берем папки ip components и видим минимум 90 процентное совпадение. Теперь представим что нам надо исправить какую-нибудь ошибку в pll.v? Да просто добавить еще один выход частоты для какого-то нового модуля? И "пошли они солнцем палимы" по всем папкам обновлять? Хорошо, 5 плат пока всего. А три десятка будет?
Частоты PLL теперь настраиваются в зависимости от примененного процессорного модуля, а делители и умножители задаются в файле конфигурации config.v.
Здорово, я как-то даже не пытался так PLL-ки конфигурить, попытаемся это же сделать и для Xilinx ит прочих.
Соединительный модуль topboard теперь предоставляет унифицированный интерфейс к контроллеру SDRAM. Адресную шину я сразу сделал 22-битной
Пока OK, но надо бы сразу всю физическую память SDRAM на борту покрывать - 8M там или 32M, потому что когда-нить доживем до RAM-диска или разделения памяти между разными системами. Но сейчас отлично, можно пока голову не забивать.
Ну что ж, надо мне делать порт на DE0, проект уже имеет структуру куда можно внести свой вклад, спасибо.
Update: хорошо бы еще прописать минимальный гайд/правила для контрибуторов - какие языки допускаются, правила оформления исходников, что должен включать порт - какую документациюб тесты и так далее.
Vasily_A
07.03.2021, 22:15
есть такая плата EBAZ4205, на ней ксайлинкс цинк7010, озу, флеш, микросд, эйзернет и много gpio на удобных разъемах... при этом стоит примерно 1000руб (одну тысячу!) - их китайцы от майнеров продают кучами.
схема, топология, примеры (с файлами ног под виваду) есть на гитхабе.
на gpio можно VGA или HDMI цеплять.
по ресурсам (если даже забыть про два арм ядра) вроде как самое то под такой проект.
может кто из гуру портирует проект на нее?
Вот у тебя сейчас 5 плат на Cyclone-IV. Берем папки ip components и видим минимум 90 процентное совпадение. Теперь представим что нам надо исправить какую-нибудь ошибку в pll.v? Да просто добавить еще один выход частоты для какого-то нового модуля? И "пошли они солнцем палимы" по всем папкам обновлять? Хорошо, 5 плат пока всего. А три десятка будет?
В принципе ты прав, я тоже обдумывал эту ситуацию - массовое внесение исправлений в файлы мегафункций.
Но буквально на следующий день жизнь показала, что все это не совсем так. Возьмем в качестве примера плату A-E115FB. Я ее специально добавил в проект, потому что она принципиально отличается от всех остальных плат.
На этой плате нет генератора 50 Мгц. Вообще нет. Есть целых три других - 25, 27 и 48 Мгц. И вот что делать, если pll.v - общая для всех циклонов 4? Конечно, можно взять 48Мгц вместо 50, и надеяться, что параметры VGA-сигнала уплывут не сильно. Но это не наш метод. Нам придется сделать свою собственную копию pll.v, включить ее в дерево проекта вместо стандартной, и синтезировать эти самые 50Мгц из 25. В результате имеем бардак - где-то испоьзуется своя pll, где-то общая... Вот потому я и решил, что pll.v уникален для каждой платы. А потребуется еще одна частота - подключить вторую pll, их же, я так понимаю, как минимум две даже в самых младших FPGA. Может быть я и не прав, конечно...
Что касается компонентов altsyncram, то вот они уж точно будут одинаковыми для всего семейства. Но, с другой стороны, и ошибок они не могут содержать по определению - это же автоматически сгенерированные файлы.
Вообщем, давай пока оставим так как есть, а если новые платы попрут лавиной - будем решать как жить. Я лично сомневаюсь, что в проекте появится больше 10 плат, не того уровня проект чтобы массово им интересовались.
Ну что ж, надо мне делать порт на DE0,
Во, это было бы отлично. В том смысле, что ты свежим взглядом можешь сразу ухватить, какие могут возникать проблемы при портировании. Тем более что DE0, как я понимаю, это уже другое семейство, cyclone 3.
Я-то к проекту уже привык, может быть каких проблем вообще не замечаю.
Update: хорошо бы еще прописать минимальный гайд/правила для контрибуторов - какие языки допускаются, правила оформления исходников, что должен включать порт - какую документациюб тесты и так далее.
Самое главное - интерфейс к соединительной плате topboard, я в доке более-менее подробно описал.
А остальное... Да пусть, наверное, делают кому как удобнее, главное вообще чтобы хоть кто-то что-то попытался сделать. Я даже на VHDL согласен, сам я на этом языке писать не могу, но чужой код понимаю.
Собственно, основные требования диктуются здравым смыслом:
добавить в проект файл readme, в котором описать, какая внешняя периферия к каким портам подключается, если ее нет на плате. Всякие ps/2, SD и прочее. И описать назначение кнопок-переключателей-светодиодов.
не забыть подправить SDC-файл под свои настройки pll. Это для альтеры, конечно, у ксилинксов наверняка свой формат файлов временного анализа используется
не трогать без уважительной причины остальные файлы проекта, не относящиеся к данной плате.
Или стоит внести это в документацию?
есть такая плата EBAZ4205, на ней ксайлинкс цинк7010, озу, флеш, микросд, эйзернет и много gpio на удобных разъемах... при этом стоит примерно 1000руб (одну тысячу!)
Я, вообщем-то, с ксилинксами дела не имел никогда в жизни. Но можно и попробовать. Я так понимаю, что ксилинкс XC Z7010 - это 28К логических ячеек и 2МБ внутренней памяти. Должно влезть с большим запасом. Вообще использовать такой мощный чип для этого проекта - верх расточительства - там же и ADC, и 2 ядра ARM, и все это пропадет впустую.
Заказал себе такую платку. Когда приедет, может быть и поиграюсь с ней. Давно хотел ксилинксы пощупать, пока их АМД окончательно не сожрала.
Пока рылся в коробках в поисках плат для портирования, нашел прикольную платку - LicheeTang Anlogic EG4S20. Наткнулся на нее случайно пару лет назад на алиэкспрессе, заказал для пробы, получил, убрал в коробку и забыл напрочь.
Платка совершенно копеечная, пришла в двух маленьких коробочках - сама платка и USB-JTAG адаптер. Но при этом для набортной FPGA Anlogic EG4S20BG256 китайцы заявляют 20К ячеек, 130Кб встроенной памяти и даже встроенную SDRAM на 8Мб! На платке есть SD-сокет, осталось подключить PS/2 и VGA - и можно пытаться запустить проект.
Но здесь надо использовать китайскую же среду разработки - какую-то TD IDE. Версия под линукс есть, но, боюсь, после привычного квартуса тяжеловато будет это дело использовать. Пусть пока полежит в коробке...
На этой плате нет генератора 50 Мгц. Вообще нет. Есть целых три других - 25, 27 и 48 Мгц.
Частота кварца должна быть параметром конфигурации. Если модуль PLL сложно зависит от входной частоты, то надо выбрать набор входных поддерживаемых частот, скажем 25 и 50MHz и сделать нескорлько модулей PLL под ifdef.
Что касается компонентов altsyncram, то вот они уж точно будут одинаковыми для всего семейства. Но, с другой стороны, и ошибок они не могут содержать по определению - это же автоматически сгенерированные файлы.
А размер поменять? :)
Вообщем, давай пока оставим так как есть, а если новые платы попрут лавиной - будем решать как жить.
Конечно, решаем проблемы по мере их поступления, пока бросаться переделывать не нужно.
Собственно, основные требования диктуются здравым смыслом:
...
Или стоит внести это в документацию?
Да, и при ревью патчей проверять соответствие. Но это опционально, если ты не хочешь общий стиль, канву, то можно и полную свободу дать.
- - - Добавлено - - -
Пока рылся в коробках в поисках плат для портирования, нашел прикольную платку - LicheeTang Anlogic EG4S20.
Да, это классная платка, среда Династия Тан - тоже нормальная, работает - все мои процессоры на эту плату портированы и проверены.
Вчера перенес порт под MIST на новую структуру.
Но в проект собирается только топ уровень, а вся вложенная структура почемуто занимает ноль ячеек.
https://github.com/xolod79/dvk-fpga/tree/main/board/MiST
Когда я смотрю результат синтеза, у меня на элементе kernal сигналы bt_halt, bt_reset, bt_terminal_rst, bt_timer висят в 1 (как я понимаю, всегда активны). Что то мне подсказывает, что это неправильно
- - - Добавлено - - -
кнопки инвертируй
По идее, они должны быть куда то подключены...
- - - Добавлено - - -
Ну а поскольку они постоянно в 1, дальше оптимизация и практически всё из схемы языком слизнуло...
По идее, они должны быть куда то подключены...
.bt_reset(button[0]), // общий сброс
.bt_halt(button[1]), // режим программа-пульт
.bt_terminal_rst(button[2]), // сброс терминальной подсистемы
.bt_timer(button[3]), // выключатель таймера
Если я правильно помню про кнопки на DE10, то они инвертированные, то есть, если button ни куда не подключать, то тогда wire [3:0] button = 1, а не инвертирование кнопок
- - - Добавлено - - -
аха, вот только
// кнопки
input bt_reset, // общий сброс
input bt_halt, // пультовое прерывание
input bt_terminal_rst, // сброс терминальной подсистемы
input bt_timer, // выключатель таймера
input
input
Так они и есть input. Входы от кнопок.
Тут же проблема в том, что активный уровень сигнала, например, bt_reset - высокий. А в модуле верхнего уровня описано wire button[3:0]=0 (я бы все же написал 3'b000). А дальше этот ноль инверитруется, получается 1, и схема синтезируется в режиме перманентного сброса. То есть от схемы гулькин хрен остается...
Да, спасибо! Слона я и не заметил.
wire [3:0] button = 1
ну с инверсией то то жи собирается:)
но да, с единицей верно. тем более еще и в pin planer-e не подключены.
(я бы все же написал 3'b000)
Может тогда уже всё таки 4b'0000 или уж если по правильному 4b'1111?
Так они и есть input. Входы от кнопок.
Это я zebest-у
- - - Добавлено - - -
ну с инверсией то то жи собирается
Всё зависит от физических кнопок
- - - Добавлено - - -
ну с инверсией то то жи собирается
И ещё вопрос - как при этом руками сбросить
Может тогда уже всё таки 4b'0000 или уж если по правильному 4b'1111?
Ага, точно. Пару раз серьезно налетал из-за такой небрежности.
Ага, точно. Пару раз серьезно налетал из-за такой небрежности.
Здравствуй, Verilog ;) VHDL просто не пропустил бы ;)
И ещё вопрос - как при этом руками сбросить
Кстати, никак. Я бы ни за что не стал убирать из схемы кнопку сброса.
Кстати, никак. Я бы ни за что не стал убирать из схемы кнопку сброса.
Вот и я про тоже. Начальный сброс по идее пройдёт, а дальше - ёк. У меня сейчас тестовый комп на KDJ11-B без кнопки сброса, но там хоть в большинстве случаев в пульт выйти можно, ну и если сильно припрёт, организовать программный RESET. Но если сам проц завис (есть такая фигня sunset loop, если в названии не ошибся), то только аппаратный сброс, а в моём случае - выключи-включи :)
Да нормально оно и с клавиатуры сбрасывается, ну кроме терминала. И потом, клавиатура всегда ближе, даже при наличии хардварных кнопок. Что то жИ не всегда бывает.
Да нормально оно и с клавиатуры сбрасывается,
А как оно сбрасывается с клавиатуры, если линия bt_reset просто подтянута к постоянному уровню?
А как оно сбрасывается с клавиатуры, если линия bt_reset просто подтянута к постоянному уровню?
Магия :)
Наконец собрался и сделал порт проекта на китайскую плату Sipeed TANG Primer.
Эта плата - наверное, самая необычная из всех имеющихся у меня FPGA-плат. Она основана на микросхеме EG4S20BG256 китайской фирмы Anlogic. Не путать с Amlogic — это совершенно разные фирмы. Название этой фирмы - совершенно в китайском стиле, вспомним всякие Toshibra и Panasonix. У фирмы есть свой сайт - http://www.anlogic.com/, но сайт чисто китайский - вместо английской страницы вылезает заглушка. Соответственно, я ничего хорошего от этой платы заранее не ждал, но все оказалось совсем не так.
FPGA EG4S20BG256 обладает очень неплохими заявленными характеристиками - 23К логических ячеек, 64К внутренней статической памяти, 270 внешних портов, встроенный блок динамической памяти SDRAM объемом 2M*32bit, что позволяет обойтись без установки на плату внешней микросхемы SDRAM. Имеются и другие встроенные IP-блоки — АЦП на 8 каналов, монитор напряжения питания, итд, что может пригодиться для реализации функций контроллера, управляющего каким-либо оборудованием. Для реализации нашего проекта такой FPGA должно хватить с огромным запасом.
Сама плата Tang Primer - совсем маленькая плата в форм-факторе DIP-40W (как многие модули Arduino). Ее размеры - 60х20 мм. Вот как она выглядит:
https://raw.githubusercontent.com/forth32/dvk-fpga/main/board/tang/pict/tang.jpg
На плате уже установлен JTAG-отладчик, выведенный на разъем micro-USB - внешний интерфейс jtag не потребуется. Разработчик этой платы - фирма Sipeed, у них тоже есть свой сайт, причем даже с английской версией. Вот ссылка (https://tang.sipeed.com/en/hardware-overview/lichee-tang/) на страницу этой платы.
Из полезного для нас на плате имеется только слот micro-SD, поэтому для запуска проекта придется сделать плату ввода-вывода, установив на нее разъемы VGA и PS/2, а также 4 кнопки, 4 переключателя и 5 светодиодов. Компоновка платы может быть любой, я сделал ее на скорую руку из обычной макетной платы, попавшейся под руку:
https://raw.githubusercontent.com/forth32/dvk-fpga/main/board/tang/pict/ioboardb.pnghttps://raw.githubusercontent.com/forth32/dvk-fpga/main/board/tang/pict/ioboard-rs232.png
Для сборки прошивки и заливки ее в плату используется специальная китайская среда разработки - Anlogic TD (Tang Dynasty). Скачать ее с официального сайта практически невозможно, если вы не знаете китайский язык. К счастью, эта среда лежит в архивах на многих сайтах, в том числе и на сайте разработчика платы sipeed.
Сама среда TD оставляет странное впечатление. Вроде бы все что нужно там есть - аналоги SignalTap, Timing Analyzer, RTL Viewer, Pin Planner/Assignments Editor, даже симулятор какой-то есть. Но все какое-то странное, с непонятными ограничениями. Например в ChipWatcher, аналоге signalTap, нельзя распределить буфер размером более 8К. В выводе Timing Analyzer вообще сходу без стакана не разобраться. Вот, например, так он показывает путь прохождения сигнала:
Slack (setup check) -0.306 ns
StartPoint: kernel/graphics/reg2_b5.clk (rising edge triggered by clock pll1/pll_inst.clkc[3])
EndPoint: _al_u11930|kernel/graphics/reg1_b6.e[0] (rising edge triggered by clock pll1/pll_inst.clkc[0])
Clock group: pll1/pll_inst.refclk
Point Type Incr Info
---------------------------------------------------------------------------------------------------------
kernel/graphics/reg2_b5.clk clock 2.268
launch clock edge clock 0.000
kernel/graphics/reg2_b5.q[0] cell 0.146
kernel/graphics/add1/ucin_al_u14841.a[1] (kernel/graphics/lineadr[5]) net (fanout = 5) 0.735 ../../hdl/kgd-graphics.v(58)
kernel/graphics/add1/ucin_al_u14841.fco cell 0.881
kernel/graphics/add1/u3_al_u14842.fci (kernel/graphics/add1/c3) net (fanout = 1) 0.000
kernel/graphics/add1/u3_al_u14842.f[1] cell 0.264
_al_u7075|_al_u6111.c[0] (n5[5]) net (fanout = 1) 0.651
_al_u7075|_al_u6111.f[0] cell 0.251
_al_u11930|kernel/graphics/reg1_b6.e[0] (_al_u6111_o) net (fanout = 1) 0.594 ../../hdl/topboard.v(152)
_al_u11930|kernel/graphics/reg1_b6 path2reg0 0.400
Arrival time 6.190 (4 lvl)
(69% logic, 31% net)
_al_u11930|kernel/graphics/reg1_b6.clk 1.834
capture clock edge 4.166
cell setup -0.116
clock uncertainty -0.000
clock recovergence pessimism 0.000
Required time 5.884
---------------------------------------------------------------------------------------------------------
Slack -0.306 nsВсе эти имена вроде reg1_b6.e[0] формируются синтезатором, в исходной схеме их нет, и увидеть их можно только просматривая схему в RTL Viewer. Ну прямо очень удобно...
Есть в среде TD и положительные черты - например, неплохой текстовый редактор. Лучше, чем в квартусе. Но есть и очень серьезный недостаток - очень низкая скорость компиляции. Одна и та же схема на моем Ryzen 9 в квартусе собирается полторы минуты, а здесь - 6 минут. В 4 раза дольше! При такой скорости отладкой заниматься ну очень весело.
Следующая проблема - PLL. Если в альтере я могу просто задать умножитель-делитель входной частоты для каждого канала, то здесь все делается совсем по-другому. Входную частоту можно умножить или разделить на что угодно для формирования опорной частоты одного выбранного канала. этот канал объявляется каналом обратной связи, на его основе формируется опорная частота VCO. А затем эту самую VCO можно только разделить на любое целое число для формирования выходной частоты всех оставшихся каналов. Получилось несколько сумбурно, но в фирменном даташите на FPGA все это рассматривается очень подробно, с картинками, вообщем разобраться при желании можно.
Я в качестве опорной выбрал частоту 960 Мгц, умножив на 40 частоту кварца платы (24 МГц). Из нее формируются тактовые сигналы процессора, SD-карты, а также тактовый сигнал терминального модуля, только вместо 50 Мгц я использовал 48 Мгц - разница невелика, тайминги развертки VGA за пределы допусков не ушли.
И, наконец, вылезла совершенно неожиданная проблема: здесь синтезатор не синтезирует конструкцию initial. То есть нет возможности задать начальное состояние регистра в момент включения питания. Из-за этого таймер на всех платах по умолчанию отключен, включить его можно только кнопкой. Что хуже, эта конструкция использовалась VSLAV для инициализации регистрового файла процессора ВМ1. Пришлось переделать его модуль vcram в мегафункцию, а данные вынести в отдельный mif-файл. Также пришлось сделать модули-переходники для адаптации сформированных в TD мегафункций статической памяти к альтеровскому интерфейсу. Это оказалось совсем несложно. Все эти переходники я собрал в единый файл memory_adapter.v.
В конце концов, как ни странно, все заработало. Получился маленький компактный блок, чуть больше спичечного коробка, помещающийся в карман, и при этом являющийся полноценной ДВК-3. Графика работает, в игрушки можно играть. Всем, кто не определился с выбором платы для запуска проекта, и кто не планирует заниматься собственными доработками, я вполне могу рекомендовать плату Sipeed TANG Primer к приобретению. Плата эта свободно продается на алиэкспресс, стоит около 22$. Продающийся вместе с ней отладчик RV Debugger покупать не обязательно - здесь он не потребуется. Конечно, придется немного посидеть с паяльником, но оно того стоит.
Сайт разработчика FPGA - http://www.anlogic.com/
Страница платы TANG Primer на официальном сайте - https://tang.sipeed.com/en/hardware-overview/lichee-tang/. Там лежит красивая картинка с распиновкой платы, ее схема, АНГЛИЙСКИЕ (почти) даташиты на FPGA.
Еще одна страница этой платы, со ссылками на среду TD - https://www.seeedstudio.com/Sipeed-TANG-PriMER-FPGA-Development-Board-p-2881.html
А вот ссылка (https://www.aliexpress.com/item/4000269310936.html?spm=a2g0o.productlist.0.0.11d92 1d2MhlHFD&algo_pvid=7a214fe6-3bfb-419d-b145-e3bf410e1940&algo_expid=7a214fe6-3bfb-419d-b145-e3bf410e1940-20&btsid=0b0a556516165193074638834e5414&ws_ab_test=searchweb0_0,searchweb201602_,searchweb 201603_) на продавца этих плат - на самом деле их там много, это первый попавшийся.
Что хуже, эта конструкция использовалась VSLAV для инициализации регистрового файла процессора ВМ1. Пришлось переделать его модуль vcram в мегафункцию, а данные вынести в отдельный mif-файл.
Странно, у меня вроде ВМ1 работал в обоих версиях - с регистрами на триггерах и с блоком памяти - там же есть готовая версия для ВМ1 с .mif файлом, в том числе под личитанг - ./xen/eg4/rtl.
Закон подлости в действии ;-) Только в субботу получил ALINX AX4010, а тут еще круче подгон. Теперь разрываюсь: то ли начинать изучать ALINX AX4010, то ли заказывать Sipeed TANG Primer и "воевать" уже с ним ...
Теперь разрываюсь: то ли начинать изучать ALINX AX4010, то ли заказывать Sipeed TANG Prime
Не ИЛИ, а И :)
Знания от первой платы пригодятся и со второй :)
Странно, у меня вроде ВМ1 работал в обоих версиях - с регистрами на триггерах и с блоком памяти - там же есть готовая версия для ВМ1 с .mif файлом, в том числе под личитанг - ./xen/eg4/rtl.
Так и у меня ВМ1 тут теперь работает.
Я, честно говоря, прошлый раз как-то не обратил внимание на твои слова, что проект cpu11 портирован на эту плату. Давно уже не заглядывал в твой репозиторий.
Сейчас посмотрел - да, в новом варианте cpu11 есть такая плата. И модуль vm1_vcram лежит адаптированный, и mif-файл есть. Ну, а я об этом не знал и все то же самое сам проделал :). Зато удовольствие получил.
- - - Добавлено - - -
то ли начинать изучать ALINX AX4010, то ли заказывать Sipeed TANG Primer и "воевать" уже с ним ...
Заказывай, эта платка жрать не просит, а пригодиться может много для чего. Все-таки 64Кб встроенной памяти - на таком, например, и БК-0010 можно, при желании, сделать.
А пока она едет - можно и на AX4010 проект запустить. Благо там и изучать нужно только квартус, чтобы понять как собрать и залить прошивку в плату.
А как оно сбрасывается с клавиатуры, если линия bt_reset просто подтянута к постоянному уровню?
это я про свою девборду, на которой нет внешних кнопок. и не будет :))
И она не одна такая.
https://s.micp.ru/8pQ1V.jpg
Проверил работоспособность сборки LXS для ДВК-2 (https://zx-pk.ru/threads/24962-unix-dlya-uknts!!!.html?p=794013&viewfull=1#post794013), работает нормально.
Добавил в проект контроллер RK611.
Этот контроллер обслуживается драйвером DM:, и позволяет подключить 8 дисков емкостью 13 Мб (RK06) или 26 Мб (RK07). Этот контроллер, насколько мне известно, никогда не подключался к одноплатным ЭВМ, но широко использовался на больших СМ ЭВМ - мне он встречался на СМ-1600 и СМ-1420. По нашей номенклатуре контроллер назывался СМ5408.
Целью создания этого модуля было получение достаточно емкого диска, официально поддеживаемого различными операционными системами. Это позволит начать эксперименты с RSX-11M и другими ОС.
Из того, что было в проекте, MY и DW не имеют официальных драйверов под RSX и тем более под RSTS и UNIX, DX-мелкая дискета, а RK05 слишком мал, туда даже ядро RSX с минимумом обвязки еле влезает, а о генерации системы и речи не идет. Устройство DM поддерживается всеми существующими ОС и имеет достаточно большую емкость 26Мб в варианте RK07. Восьми дисков по 26Мб, в принципе, достаточно для полноценного развлечения с любой операционной системой.
Контроллер RK611, как и RK11, умеет работать в DMA-режиме с полным 18-битным адресным пространством UNIBUS. Хотя на данный момент все имеющиеся процессоры поддерживают только 16-битный адрес, я добавил эту возможность в модуль (и в RK11 тоже) - это один из этапов подготовки к переходу на полную 22-битную адресную шину.
Поскольку диски RK06 и RK07 отличаются только числом дорожек, я не стал реализовывать поддержку RK06 - зачем нужен мелкий диск, если можно сделать большой? Таким образом, мы имеем контроллер RK611 с подключенными к нему 8 дисками RK07, хранящими свои образы все на той же SD-карте. В стартовый образ initdisk я добавил устройство DM0 с дистрибутивом RT-11 5.04. Образ диска хранится на SD-карте в виде простой последовательности секторов, поэтому можно напрямую использовать образы дисков DM от эмулятора SIMH.
Также я, наконец, добавил в проект ПЗУ эмулятора пульта-загрузчика, аналогичное DEC М9312. Такое ПЗУ имелось практически на всех СМ ЭВМ. Оригинальное ПЗУ состоит из 2 частей по адресам 165000-165777 и 173000-173777. Для упрощения схемы и минимизации IP-компонентов я объединил обе ПЗУ в единый блок по адресам 164000-165777, там все равно ничего полезного не бывает. Запустить его можно, передав управление по адресу 164020 командами теневого/микропрограммного монитора. Например:
@164020G
000003 165620 164206 000776
$DM3
?MY-I-My/Dz-emulater handler. Un_Soft 1991. V3.04
DW Handler V6.5, (c) D.S.C., 1992-2016
RT-11FB (S) V05.04 D
.SET TT QUIET
Монитор М9312 - это хороший способ добавить дисковые загрузчики в платы М2 и М4, поскольку их микропрограммный ODT вообще в себе никаких загрузчиков не содержит. На данный момент в ПЗУ имеются загрузчики DK, DB, DM, DX, DP, DT. Поскольку в адресном пространстве остается неиспользованная дыра 166000-167777, то ПЗУ можно расширить, добавив загрузчики с других устройств. В том числе можно сделать загрузчики для DW и MY.
Это позволит начать эксперименты с RSX-11M и другими ОС.
Для RSX-11M нужен процессор с MMU. Будем надеятся до конца года заработает F11.
Для RSX-11M нужен процессор с MMU
Ну, это конечно. Я, правда, пытался сгенерировать unmapped-RSX для процессора PDP-11/03, чтобы на М2 запустить. Но так и не смог загрузить полученное ядро. Даже не уверен, что это вообще возможно.
Будем надеятся до конца года заработает F11.
Ну и мне тоже надо много чего подготовить для перехода к mapped-процессорам. Например, поддержку нескольких приоритетов прерываний, unibus mapping для DMA и много чего еще. Поэтому я решил пока взять все тот же старый добрый PDP2011 и переделать его на шину wishbone. Будет пока на чем опробовать платформу, а там, глядишь, цифровая археология все же довыкапывает F11 и получится полноценная МС1211.
forth32 - я Вам написал в личку, ответьте, пожалуйста.
Ну, это конечно. Я, правда, пытался сгенерировать unmapped-RSX для процессора PDP-11/03, чтобы на М2 запустить.Коллега form запустил RSX-11 на ВМ2 - уже не помню, на УКНЦ с диском MZ или на ДВК с диском MY. Запустить-то он запустил, только толку с того... Заустить под этой системой что-либо осмысленное на машинке без MMU нельзя. (В скобках замечу, что запустить RSX-11 на машинке с MMU и 96К ОЗУ, как обещают в минимальных требованиях к ОС, тоже можно, но так же бесполезно - ничего серьёзного на ней тоже не запустишь, тесно).
В принципе поддержка дисков RK05 тоже лишними не будет. Почему?
Он просто старше... Мир не только вокруг RSX-11M+ вертится.
Захочется кому-то странного, например DOS/Batch-11.... И как там с драйверами???
И как там с драйверами?
Ну как как :) Самому писать :)
Ещё неплохо бы заиметь контроллер, который обслуживает диски, именуемые в RSX-11 как DP (20 и 40 мб у DEC, возможно какие то ещё) - как назывался контроллер - сходу не помню, вроде RP11
А пакетные диски в виде современной стиральной машины с вертикальной загрузкой емкостью 29МБ это какие ?
А такие же (с виду), но 100МБ ?
А загрузка с DU ?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot