PDA

Просмотр полной версии : Еще один Орион на ПЛИС



Страницы : [1] 2 3

andreil
23.01.2018, 12:54
Нужен совет по тактированию ВМ80 - корректно ли сформированы оба сигнала (F1, F2) на диаграмме?
https://image.prntscr.com/image/SbxmafEXRt_bNcMYgTg0MQ.png
На 0-ой отметке снят сброс, смотрел состояние шин.
Собственно, отлаживаю журнальную схему, перенесённую 1:1 в VHDL FPGA. Расхождение только в сканировании памяти и отсутствует формирователь видеосигналов - видеовыход сделал через собственный адаптер на VGA (на том же кристалле размещён.

PS: Спустя столько лет наконец-то появилось время заняться старыми проектами, завод наконец-то запустили почти :)

Alex_LG
23.01.2018, 14:39
Что-то похоже. См. стр. 6 http://www.fecegypt.com/uploads/dataSheet/1481550148_8080.pdf

HardWareMan
23.01.2018, 14:48
Да, норм. Активность шины - при 0 на F2, важна стабильность от фронта F1 до фронта F2.

andreil
23.01.2018, 14:48
Что-то похоже. См. стр. 6 http://www.fecegypt.com/uploads/dataSheet/1481550148_8080.pdf
Спасибо, всё совпадает. Проблема в обработке порта на DD29 - через пару тактов после снятия "сброса" у меня возникает сигнал /WE0, из-за чего сразу идёт запись в порт DD30 (0xF800), что сбивает чтение из ПЗУ...

andreil
24.01.2018, 20:03
Новый вопрос.
Собираю Орион на FPGA, используя реверснутый вариант ВМ80А. И наткнулся на грабли с формированием сигнала RD - он иногда заканчивается раньше, что приводит к ложному формированию выборки портов (в моём случае - порта F800). Или я что-то не так подключил или оптимизацию надо выпилить вообще =/
https://image.prntscr.com/image/Fh40SHDnR06qE4W-2nZO5Q.png
На рисунке видно, что сигналы DSYN_P и CPU_RD (собственно RD с процессора) всегда в противофазе, но иногда проскакивают вот такие вот косяки =/ Грешил на некорректную организацию портов и прочего - вернул назад вариант со схемой (BDF в Квартусе), результат 1:1...
PS: Запустить пытаюсь TEST128.bin, но в результате получаю только бегающие по экрану полосы.
PPS: Тактирую ядро процессора частотой 10МГц:

cpu: vm80a
port map (
pin_clk => clk_10MHz,
pin_f1 => clk_F1,
pin_f2 => clk_F2,
pin_reset => reset_p,
pin_a => bus_addr(15 downto 0),
pin_d => bus_data,
pin_hold => '0',
pin_hlda => cpu_hlda,
pin_ready => cpu_ready,
pin_int => cpu_int,
pin_inte => cpu_inte,
pin_sync => cpu_sync,
pin_dbin => cpu_rd,
pin_wr_n => cpu_wr_n
);

HardWareMan
25.01.2018, 10:46
andreil, не туда ты смотришь. Наводка:
http://jpegshare.net/images/8b/0f/8b0f9aed43263b16be9c68b851a46c2b.png
Синхронный дизайн? Не, не слышал. :)

andreil
25.01.2018, 10:55
Воу... И точно.
Но блин, эти сигналы формируются с тупого счётчика =/
В общем, переделывать и ещё раз переделывать...

PS: Да, некорректно отрабатывал счётчик, на основании которого такты и формировались - он считал на 1 такт больше, чем надо (а он у меня считает пиксели в строке)...

HardWareMan
25.01.2018, 19:51
Пышто, если ты взял нашу модельку из этой темы (http://zx-pk.ru/threads/23349-potaktovyj-klon-i8080-na-fpga-cpld.html), то она верифицирована. Я, правда, свое оптимизированное изложение еще не закончил.

andreil
25.01.2018, 20:44
Пышто, если ты взял нашу модельку из этой темы (http://zx-pk.ru/threads/23349-potaktovyj-klon-i8080-na-fpga-cpld.html), то она верифицирована. Я, правда, свое оптимизированное изложение еще не закончил.
Брал отсюда (http://s.zeptobars.ru/kr580vm80a/vm80a.v). В той теме долго искать модель :)

HardWareMan
26.01.2018, 07:51
Брал отсюда (http://s.zeptobars.ru/kr580vm80a/vm80a.v). В той теме долго искать модель :)
В 6 кликов. (http://zx-pk.ru/threads/23349-potaktovyj-klon-i8080-na-fpga-cpld.html?p=733319&viewfull=1#post733319)

andreil
26.01.2018, 22:29
Привёл работу портов в адекватный вид и... не увидел на экране ничего. Собрал с просмотром памяти - изображение оказалось в старших областях памяти оО То есть с адреса 0xF000 нашел 100% данные, которые должны были быть в окне с адреса 0xC000 (или около того). Запускал Монитор-1.
https://image.prntscr.com/image/nYgjF31sTEGaWfd46KjFow.png
Красным выделен, судя по всему, курсор.

Пересобрал с прошивкой TEST256:
https://image.prntscr.com/image/Ih8ym4EaQMKRHbWDA5VaCw.png
Посмотрел сигналы - процессор реально пишет в эту область памяти оО

PS: Формирование импульса DSYNC пришлось кардинально переделать - в текущем варианте (1:1 по логике с оригинальной схемы) он не работал, поскольку был почти копией сигнала SYNC процессора. По таймингам i8080 данные должны читаться/писаться, когда SYNC уже в 0 переведётся, не раньше. Не знаю где тут проблема в модели, но данная проблема наблюдалась сразу же с первых циклов после деактивации сброса.
Исправленный код для задержки сигнала на 1 цикл:

dsyn_n <= dsyn_p;
process (clk_F2)
begin
if (rising_edge(clk_F2)) then
dsyn_tmp <= cpu_sync;
dsyn_p <= dsyn_tmp;
end if;
end process;

andreil
26.01.2018, 23:06
Я пока что делаю оригинальный Орион. С различием только в формировании сигналов портов - я его несколько в другом базисе описал, но принцип остался тот же, как и сигналы. Просто в большинстве мест перевёл на прямые сигналы вместо инверсных (тот же дешифратор банков памяти, например).
И да - делаю на реверснутой корке ВМ80А ;) Потом планирую "навернуть" максимум доработок, с возможностью включать-выключать их. Кристалл позволяет развернуться по-полной - сейчас использую менее 3% ALM и чуть больше половины встроенной памяти (RAM + ROM + VGA_RAM).
По записи, вот из начала инициализации Монитор-1. С такта 2984 (по частоте 10МГц) как раз видна запись в ячейку с адресом 0xF00A %) Адрес брал напрямую с ядра процессора для достоверности.
https://image.prntscr.com/image/6GBZaAUWRCWkHK0CcL4oMw.png

OrionExt
26.01.2018, 23:18
Оригинальный Орион не получится. Это мы проходили. Ну не знаю. Какой он Орион то –Оригинальный.

С работай портов вообще проблем и их юзаньем не было. А как стартонуть С F800 – там одна переменная - start(D-тригер)

andreil
26.01.2018, 23:28
Да с пуском никаких проблем нет, как и с портами - всё работает. У меня сейчас единственная проблема - Монитор пишет видео-данные не в ту область =/ Завтра буду бодаться уже с данной проблемой...

OrionExt
26.01.2018, 23:38
Ну это не беда=)

- - - Добавлено - - -

Монитор пишет в видео-память. Осталось понять где наша видео-память на FPGA:p

- - - Добавлено - - -

С 0хС000 – пишет.

andreil
26.01.2018, 23:49
А почему у меня тогда не туда пишет? :)
На FPGA видео-память Ориона как и была, по 4 банка, по умолчанию "банка" по адресу 0xC000.
По поводу этого - вот сигналы с анализатора. Видна запись по адресам 0xF3D3, 0xF402, 0xF3CC и так далее...
https://image.prntscr.com/image/lZHp5O2uRGS1qhZaYp5DhQ.png
Во вложении - прошивка Монитора, с которым запускаю.

OrionExt
27.01.2018, 00:14
Ну блин. Я то откуда знаю.


Вообще ядро цпу надо выбирать - подумывше. А то всяко бывает.

- - - Добавлено - - -

И надобы подумать. Пошла инструкция. А не туда пишет. Как бы хотя бы – инструкшин с табличкой 16*16 . Почитайте от кпу.

andreil
27.01.2018, 09:20
Ну блин. Я то откуда знаю.
Вообще ядро цпу надо выбирать - подумывше. А то всяко бывает.
Ядро бралось проверенное уже - из поста HardWareMan. Ладно, буду крутить, когда вернусь...

HardWareMan
27.01.2018, 11:16
По таймингам i8080 данные должны читаться/писаться, когда SYNC уже в 0 переведётся, не раньше.
При чтении ВМ80 защелкивает данные строго по фронту F2 в следующем от SYNC цикле. Этим и пользовались в ЛК, задерживая SYNC ровно на 1 F2 такт, пропуская SYNC (который синхронен к F1 и метастабилен на фронте F2) через триггер, тактируемый F2. Сигнал арбитража снимается одновременно с защелкиванием данных в ВМ80, хотя должен чуть-чуть опаздывать. Но это все работает за счет ёмкости шины данных, которая и удерживает данные в этот момент. Но это же и влияет на стабильность при разгоне.

- - - Добавлено - - -

Напоминаю, что реальный ВМ80 работает по тактовым F1 и F2, а корка их синхронизирует к входной тактовой частоте. Таким образом, корка работает не четко по фронтам F1 и F2, а со смещением к фронту входной тактовой частоте. Важное условие для работоспособности: превышение входной тактовой частоты хотя-бы в 4 раза от F1/F2 (т.к. у F1 скважность 0.25), но лучше если это отношение будет в 8 раз выше. Для штатного Ориона 10МГц подходит. Но для полной корректной работы требуется полностью синхронный дизайн с одной тактовой частотой. Для штатного Ориона это 20МГц, чтобы получить синхронный пиксельклок в 10МГц. На корку следует подать эти 20МГц.

andreil
27.01.2018, 11:21
Ок, позже попробую (пока что обновляю генту, там никакого софта не стоит для FPGA) на 20МГц погонять. Сейчас - да, 10МГц подаётся.
PS: Может корку потом допилить, что бы избавиться от 2-ей тактовой частоты? Когда добьюсь стабильности работы на текущем варианте, ест...

HardWareMan
27.01.2018, 12:07
PS: Может корку потом допилить, что бы избавиться от 2-ей тактовой частоты? Когда добьюсь стабильности работы на текущем варианте, ест...
Этим я как раз и занят, но еще не разобрал 1 лист из 4х. Я хочу избавиться от F1.

andreil
28.01.2018, 16:51
В общем, затактировал корку частотой 20МГц - стало лучше.
А по поводу записи в экранную область - был мой косяк, забыл дешифратор банок ОЗУ "перевернуть", потому что у меня адреса A16 и A17 в логике неиверсные...
Сейчас осталось исправить запись в ОЗУ - видно мусор на экранной области, где-то опять с таймингами напортачил =/ Заодно "развернул" дешифратор RGBI для VGA-адаптера - потом сверну назад, как будет работать остальное.
Конец теста-128, для сравнения с эмулятором: https://image.prntscr.com/image/qvnqiM-JTqWxYVdcn3JaiA.jpg
Видеовыход - VGA, 1920x1080@60Hz, синий фон для отладки выводится у видимой части изображения.

andreil
29.01.2018, 10:33
Итак, очень сильно переделал вывод видео - теперь для изображения используется отдельные 32Кб ОЗУ, доступные видеоадаптеру напрямую. То есть по факту получается дублирование экранной области - в основной памяти и в видео-ОЗУ. Формат хранения - как и в оригинальном Орионе, без изменений.
Таким образом, если делать в железе новую версию Ориона, то тактовый генератор "ужмётся" до 1 корпуса, но обязательно наличие FPGA для организации видеовыхода на VGA - ТВ-выход уже устарел, не буду даже реализовывать его, а для текущего варианта VGA нужна тактовая 149МГц, что на "рассыпухе" будет очень проблематично реализовать.

andreil
29.01.2018, 14:04
Итак, добился стабильной работы тестов памяти, видео-подсистема работает стабильно.
В связи с чем возник вопрос - оставить удвоение пикселей или сделать учетверение? В последнем случае получится реальное разрешение 1200х1000 (с учётом расширения до 480 столбцов в будущем). Так же это позволит использовать медленную внешнюю память (сейчас необходима минимум с частотой 38МГц (около 30нс).

LeoN65816
29.01.2018, 14:21
Итак, очень сильно переделал вывод видео - теперь для изображения используется отдельные 32Кб ОЗУ, доступные видеоадаптеру напрямую. То есть по факту получается дублирование экранной области - в основной памяти и в видео-ОЗУ. Формат хранения - как и в оригинальном Орионе, без изменений.
Посмотри здесь (http://zx-pk.ru/threads/28423-dvukhportovaya-pamyat.html?p=937479&viewfull=1#post937479).

andreil
29.01.2018, 14:26
Посмотри здесь (http://zx-pk.ru/threads/28423-dvukhportovaya-pamyat.html?p=937479&viewfull=1#post937479).
У меня и так двухпортовая память используется ;)
Еще раз объясню - сейчас есть 2 набора памяти:
1) основная память - доступна только процессору;
2) видео-память - доступна процессору на запись, видео-адаптеру - на чтение.
Видео-память представлена 1 банком в 32Кбайта, отображаемые окном на текущую видеопамять Ориона. Такой вариант не будет работать при формировании экрана до его переключения... Если нужна 100% совместимость - нужно 128Кбайт двухпортовки, это да.
Банки солью позже, как найду причину ошибок при их совмещении.

zebest
29.01.2018, 14:47
возник вопрос - оставить удвоение пикселей
елси только как частное мнение - оставить удвоение, и видеовыход на ВГА сделать попроще - ну не более 1280х1024, можно меньше. а 4К:-) для 200 точек все же многовато, не??

andreil
29.01.2018, 14:49
У меня сейчас 1920х1080, это не 4К :)
Учетверённое изображение уже почти ровно по краям будет вписываться просто.

OrionExt
29.01.2018, 14:55
2) видео-память - доступна процессору на запись, видео-адаптеру - на чтение.
Если память двух-портовая, тогда почему эти 32кбайта отображаемые на память Ориона доступны ЦПУ только на запись? Или я чего-то не понял?)

zebest
29.01.2018, 14:57
да я понял, что FullHD, про 4к был сарказм:) Легкий. ну а чо, для себя любимого можно и столько. \а отсальные пусть себе 800х600 переделывают. При открытых исходниках.

andreil
29.01.2018, 16:20
Если память двух-портовая, тогда почему эти 32кбайта отображаемые на память Ориона доступны ЦПУ только на запись? Или я чего-то не понял?)
Пока что раздельная память.
Основная память медленная, а видео - быстрая, для VGA.

В общем, если использовать в качестве первых 2-х банков памяти 2-х портовую - то можно и слить. Посмотрю ценники на них...

PS: Посмотрел... И стало грустно - около 25$ за корпус 64Кх8... И быстродействие надо достаточно высокое - чипы на выше 50нс уже отпадают.

PPS: Можно попробовать сделать другой вариант, максимально приближенный к оригиналу: основная память медленная, однопортовая. Сканер проходится по части видео-памяти (как и в оригинале), данные переправляются в FPGA с памятью (10-ый циклон с достаточным объёмом памяти в 100-ногом корпусе всего около 7$ за корпус, ещё и прочей логики можно впихнуть будет).
Опционально (джамперами) - переключение на вариант без FPGA, с формированием стандартного видеосигнала для ТВ, 1:1 по оригиналу.

PPS: И да - это мой первый хоть как-либо серьёзный проект на FPGA, до этого совсем по мелочи делал. А сейчас делаю для последующего воплощения "в железе".

LeoN65816
29.01.2018, 20:46
В общем, если использовать в качестве первых 2-х банков памяти 2-х портовую - то можно и слить. Посмотрю ценники на них...

PS: Посмотрел... И стало грустно - около 25$ за корпус 64Кх8... И быстродействие надо достаточно высокое - чипы на выше 50нс уже отпадают.
64Кх16, 15 нс, много меньше озвученной тобой цены: #1 (https://ru.aliexpress.com/item/IS61LV51216-10TI-IDT70V28L20PFGI-IDT70V28L15PFI-AD9235BRUZ-40/32846676305.html?spm=a2g0s.9042311.0.0.mSwJpv) (приехало за 3 недели), #2 (https://ru.aliexpress.com/item/IC-new-original-CY7C028V-15AC-CY7C028V-15-CY7C028V-CY7C028-7C028-TQFP100/32822293328.html?spm=a2g0s.13010208.99999999.305.M X8bKc).


данные переправляются в FPGA с памятью (10-ый циклон с достаточным объёмом памяти в 100-ногом корпусе всего около 7$ за корпус, ещё и прочей логики можно впихнуть будет).
"Хто это?..." ;)

andreil
29.01.2018, 22:43
64Кх16, 15 нс, много меньше озвученной тобой цены: #1 (https://ru.aliexpress.com/item/IS61LV51216-10TI-IDT70V28L20PFGI-IDT70V28L15PFI-AD9235BRUZ-40/32846676305.html?spm=a2g0s.9042311.0.0.mSwJpv) (приехало за 3 недели), #2 (https://ru.aliexpress.com/item/IC-new-original-CY7C028V-15AC-CY7C028V-15-CY7C028V-CY7C028-7C028-TQFP100/32822293328.html?spm=a2g0s.13010208.99999999.305.M X8bKc).
Цены смотрел на дигикее...
Эти МС там уже как "снятые с производства" проходят, без ценников.
И да - №1 это простая SRAM, однопортовая.

"Хто это?..." ;)
https://www.digikey.com/products/en/integrated-circuits-ics/embedded-fpgas-field-programmable-gate-array/696?FV=fffc0220%2Cffe002b8%2Cffece323%2Cffece6bf&mnonly=0&ColumnSort=1000011&page=1&stock=0&pbfree=0&rohs=0&cad=0&datasheet=0&nstock=0&photo=0&nonrohs=0&newproducts=0&quantity=&ptm=0&fid=0&pageSize=25

LeoN65816
29.01.2018, 23:02
Цены смотрел на дигикее...
Эти МС там уже как "снятые с производства" проходят, без ценников.
У-у-у-у... Можно, конечно, и по 150 бакинцев найти... И по 250!


И да - №1 это простая SRAM, однопортовая.
В категории "Цвет" выбери третий "цвет" (или второй) - ты сильно удивишься! ;)

andreil
30.01.2018, 10:33
Вопрос по теме - если сделать отхождения от оригинальной реализации Ориона, будет ли это востребовано?
Хочу как минимум для себя сделать версию на современных комплектующих, с выходом видео VGA 640x480@60Hz, что бы можно было выводить на любой монитор.
Под современными комплектующими подразумеваю микросхемы в SOIC корпусах и более мелкие (при необходимости - одногейтовая логика, 1 корпус на 1 логический элемент), SRAM память и т.д.
Конструктив - модульный, поскольку при размерах плат до 100х100мм стоимость изготовления очень мала (5$ за 10 плат такого или меньшего размера, 2 стороны, зелёная маска, лужение). Пока что вижу 4 модуля - ТГ + RAM + видео, CPU + системные порты + клавиатура, ROM-disk, FDD.
Делать буду в любом случае, вопрос только в сроках реализации :) На данный момент планирую заказывать летом, вместе с платами для другого проекта, по работе.

Vslav
30.01.2018, 12:04
с выходом видео VGA 640x480@60Hz

ЕМНИП, у Ориона родное разрешение 384x256? Тогда уже лучше в VGA 800x600 вписываться.

andreil
30.01.2018, 12:32
ЕМНИП, у Ориона родное разрешение 384x256? Тогда уже лучше в VGA 800x600 вписываться.
Пиксельклок получается 40МГц... На стандартной рассыпухе уже не собрать такую схему. Сразу отпадают серии 74HC, 74HCT, 74LS, 74ALS (К555, К1533, К1564).
А вот 640х480 (25МГц пиксельклок) можно на любых сериях собрать (кроме 155, само собой - 30нс задержки уже на грани).

Denn
30.01.2018, 12:38
Вопрос по теме - если сделать отхождения от оригинальной реализации Ориона, будет ли это востребовано?

Сугубо имхо: кроме самого разработчика - нет. Ретрушникам интересна та самая "кухня" (труъ К155ххх, ВМ80 и т.п.), дух времени так сказать. Достать редкие раритеты, запаять, включить, увидеть промпт Монитора, громко произнести "Ййййес!", выключить и положить на полку собирать пыль. Всё.

Был проект на ПЛИС, на девбордах что-то ваяли.. не пошло в народ, ибо "не то".

- - - Добавлено - - -


Пиксельклок получается 40МГц...

Неправда. Орионовский экран строится в формате 400х300, т.е. точка из 4-х физических пикселей формата 800х600, а это означает реальный пиксельклок 20 МГц. Логика 74xCxxx тянет без проблем! Собирал и проверял лично.

andreil
30.01.2018, 13:14
Неправда. Орионовский экран строится в формате 400х300, т.е. точка из 4-х физических пикселей формата 800х600, а это означает реальный пиксельклок 20 МГц. Логика 74xCxxx тянет без проблем! Собирал и проверял лично.
Но тогда не влезет 480 пикселей расширенного режима графики...

OrionExt
30.01.2018, 13:47
Я бы делал так. ТV развертка и VGA развертка 640х480 (строки х2). Переключать режим ТV/VGA дип-переключателем. Это не сложно реализуется в одной файле *.vhd.

Почему TV развертка? Ну, главное - это канонично. А еще прикол в том, что относительно недавно купленный телевизор для ретро-тематики. SCART, композитный, компонентный и HDMI входы имеет, а вот VGA нет:D

п.ы. Чего-то я погорячился с 480 строками) А вот не влезет. Ну и режим 384(480) х 256 :v2_dizzy_stupid:фиг его натянешь на стандарт. Я то делал ток TV - выход.

А вот интересно оверскан VGA мониторы кушают?

andreil
30.01.2018, 14:04
Ну и режим 384х256 :v2_dizzy_stupid:фиг его натянешь на стандарт. Я то делал ток TV - выход.
натянуть можно всё. Просто будет "болтаться" по центру монитора изображение, вот и всё.
В общем, если делать на 640х480, без удвоения пикселей, то можно в одной схеме впихнуть сразу и ТВ и VGA выход - если сделать тактирование переключаемым: 20МГц - ТВ 50Гц, 24МГц - VGA 60Гц.
Самый геморрой будет - как на логике и счётчиках из 24МГц получить тактовые импульсы для процессора :)

Есть ещё экзотический вариант для широкоформатников: 640х350. Для развёртки 50Гц - частота 18МГц, для 70Гц - 25МГц (70Гц - по стандарту для этого разрешения).

Denn
30.01.2018, 14:24
Но тогда не влезет 480 пикселей расширенного режима графики...

И ПРО'шный 512х256 тоже не влезет. Да и пёс с ними, не нужны они никому, имхо. Орион это 384х256, всё родное орионовское ПО под него заточено.

Если заморачиваться поддержкой всех доработок, в т.ч. экранных, то родные 384х256 на 640х480 без удвоения пикселей будут смотреться стрёмно (привет от PIP :)), а 480/512-режимы не влезают в "половинчатый" 800х600, в итоге придётся делать поддержку как минимум двух режимов SVGA... вот только нужно ли?

П.С. а ещё есть варианты с Z80 и без (по-разному работают флаги чётности, DAA и IN/OUT), Z80 с проекцией портов на память и без, с кадровыми прерываниями и без них, с диспетчером ОЗУ и без него, звук по INTE или #FF, с AY-ми по разным адресам, винегретом реализаций КНГМД (как минимум три программно разных варианта), разные реализации RTC, два (а по факту - три) типа клавиатур, КНЖМД, SD... можно свихнуться, если пытаться всё это поддерживать %)

OrionExt
30.01.2018, 14:44
Ну, значит, как не крути. Как был квадрат в центре в режиме TV, так и будет в режиме VGA. Ни когда не крутил (резисторы) телик в угоду хотелок.

На современных TFT теликах ТV развертка в режиме 16:9 очень достойно выглядит:) в Орионе.


И оверскан (256 строк видимых) по крайне мере мой телик (и еще 3 штуки) кушает на ура) А VGA?)

Речь идет о FPGA. Там можно развертку в реальные рамки впихнуть. А реал хоть=) все равно верх задирает.

LeoN65816
30.01.2018, 16:03
Был проект на ПЛИС, на девбордах что-то ваяли.. не пошло в народ, ибо "не то".
Знаю про этот (http://zx-pk.ru/threads/12701-orion-2010-na-plis.html). Если ты говоришь о каком-то другом, дай ссылочку, пожалуйста.

Denn
30.01.2018, 16:17
LeoN65816, да-да, он самый - "2010".

andreil
30.01.2018, 16:22
LeoN65816, да-да, он самый - "2010".
Смотрел его исходники - там много чего именно эмулируется. Я же у себя на данный момент делаю полную аппаратную реплику Ориона-128, за исключением формирования видеосигнала. Сейчас вот ищу корку для i8255 - что-то есть, но ещё не заводил.

PS: Сделал базис вывода на VGA разрешением 640х350 с переключаемой шириной - 384 или 480 пикселей. Изображение не ровно по центру, но есть. Если урезать разрешение до 4:3, то будет 480х350 пикселей как раз ;)

OrionExt
30.01.2018, 16:42
LeoN65816, да-да, он самый - "2010".
Отличный проект был на FPGA в свое время. Тоже смотрел, пробывал на вкус. Но видать вкусы были разные, не зашел. Начал свой с нуля о FPGA. Добился определенных успехов за 2 месяца. И заболел (так бывает). Как очухался. Подумал, стар я для этого (все каноны старые рушатся). И вернулся в привычную для меня среду.


Сейчас вот ищу корку для i8255 - что-то есть, но ещё не заводил.
Есть корка от Альтеры. Надо только найти( у себя.

andreil
30.01.2018, 17:23
Есть корка от Альтеры. Надо только найти( у себя.
Поищи ;) А то найденную на просторах тырнета не получается завести - ругается при сборке на изменение значений пары переменных в разных доменах...

OrionExt
30.01.2018, 17:44
Поищи ;) А то найденную на просторах тырнета не получается завести - ругается при сборке на изменение значений пары переменных в разных доменах...
Она 2010г (где-то). Там еще есть из комплекта i8080. Надо? Найдем (завтра, послезавтра). Но х.з. там репу почухать придется:v2_dizzy_botan:

- - - Добавлено - - -

А других корок более полных я не встречал (гуглил в свое время очень активно). Это как в эмуляторах – реализуем то что нужно (таких полно). Да и саму написать. Не надо язык изучать долго - такая фигня.

andreil
30.01.2018, 18:12
Она 2010г (где-то). Там еще есть из комплекта i8080. Надо? Найдем (завтра, послезавтра). Но х.з. там репу почухать придется:v2_dizzy_botan:

- - - Добавлено - - -

А других корок более полных я не встречал (гуглил в свое время очень активно). Это как в эмуляторах – реализуем то что нужно (таких полно). Да и саму написать. Не надо язык изучать долго - такая фигня.
Ну, у меня сейчас корка ВМ80 используется, что вроде одно и то же с i8080...
А вот i8255 - ннннада! Если что - можно кинуть архивом большим, я сам найду :)

HardWareMan
30.01.2018, 20:57
Пиксельклок получается 40МГц... На стандартной рассыпухе уже не собрать такую схему. Сразу отпадают серии 74HC, 74HCT, 74LS, 74ALS (К555, К1533, К1564).
А вот 640х480 (25МГц пиксельклок) можно на любых сериях собрать (кроме 155, само собой - 30нс задержки уже на грани).
Мой Специалист МХ^2 (http://www.spetsialist-mx.ru/index21.html) смеется над тобой!

andreil
30.01.2018, 21:11
Мой Специалист МХ^2 (http://www.spetsialist-mx.ru/index21.html) смеется над тобой!
Там удвоенные строки и пиксели, то есть частота по факту в 2 раза меньше, что и позволяет собрать на практически любых МС.

OrionExt
31.01.2018, 10:53
andreil, вот что-то нашлось.

8237_OSED.zip (https://drive.google.com/open?id=1K5vwCH9-kTkOTF8OUqoTzFEhWXDRpeIG)
8251_OSED.zip (https://drive.google.com/open?id=1RtXqLGd68vBrMupDop9FvLopf6Sxf7EX)
8255_OSED.zip (https://drive.google.com/open?id=1U8DbcE8Jnc0A6YEb-3I4E9DQ0Y3bI4Tw)
8259_OSED.zip (https://drive.google.com/open?id=1ugk9A_NFimqkqz2_JM4o-KemX1aG8NzZ)

Vslav
31.01.2018, 12:45
вот что-то нашлось.

Давно я хотел на эти альтеровские корки посмотреть. Посмотрел. На мой взгляд они разработаны пленным конструктором. 8255 - 12 файлов общим объемом 120+ килобайт. Такое только индийцы за еду пишут.

andreil
31.01.2018, 21:26
Собственно, добил структуру модулей так, как оно будет на железе выглядеть (в планах) - модуль видео + RAM, модуль CPU + ROM + системные порты (возможно ещё и клавиатуру сюда впихну).
Пиксели пока что декодируются все сразу, потом сделаю через сдвиговый регистр (завтра на работе, если не будет мега-задач там).
Организация памяти пока что такая:
1) 2шт 2-х портовых 64Кб*8 - для разделения с экраном;
2) 2шт 1-о портовых 64Кб*8 - дополнительные "банки".
На лету происходит переключение графических режимов - 384 или 480. Вывод - пока что только 640x350@70Hz, позже добавлю более "квадратное" разрешение :) Просто нету "квадратных" мониторов, а телевизор вообще за ненадобностью старый выкинут на свалку...
Имеет ли смысл делать больше 256Кб памяти вообще? Теоретически - можно просто поставить 2шт 2-х портовые 128Кб*8, но может что-то из софта использует больше? Знатоки, нужен совет (как зарубка на потом, внутреннюю память больше чем 64К слов всё равно не сделать :( ).
Порты на ВВ55 завтра начну делать, как разберусь с их логикой - оригинальные корки переписывать надо 100%, там просто ужасссс :(

PS: Собственно проект на гитхабе (https://github.com/andreili/Orion-128_DE1-SoC). Для PLL'ок надо сделать регенерацию - исключил файлы для симуляций всяких там).
Пока что проект влезает в 570 ALM и много памяти - внешнюю SDRAM пока что не трогаю, для исключения косяков на ней.
https://image.prntscr.com/image/im8yFtQRT_C0EhXNanJNSg.png

LeoN65816
01.02.2018, 06:24
На лету происходит переключение графических режимов - 384 или 480. Вывод - пока что только 640x350@70Hz, позже добавлю более "квадратное" разрешение :)
Покажи, пожалуйста, фото и видео, как это выглядит.

andreil
01.02.2018, 09:20
Покажи, пожалуйста, фото и видео, как это выглядит.
Я ещё думаю над разрешениями, что бы везде всё помещалось.
Проблема с 800х600 - никак не поместится режим 480 столбцов с удвоением пикселей.

LeoN65816
01.02.2018, 10:58
И все ж таки, хотелось бы увидеть, как оно в 640х350...
И еще вопрос: в репорте у тебя указано, что чип циклон пятый, причем очень жирный с 4 мегабитами внутренней памяти. Это девборда какая у тебя, навороченная (типа терасиковская, в стиле DE1) или что-то попроще и доступнее?

zebest
01.02.2018, 11:10
Собственно проект на гитхабе.
елси не трудно - добавить .../ROM/TEST256.hex
спасибо.

andreil
01.02.2018, 11:25
елси не трудно - добавить .../ROM/TEST256.hex
спасибо.
Вот, вложением. Репа только на домашнем компе инициализирована.

- - - Добавлено - - -


И все ж таки, хотелось бы увидеть, как оно в 640х350...
И еще вопрос: в репорте у тебя указано, что чип циклон пятый, причем очень жирный с 4 мегабитами внутренней памяти. Это девборда какая у тебя, навороченная (типа терасиковская, в стиле DE1) или что-то попроще и доступнее?
Terasic DE1-SoC - в имени репы даже есть :)
Покупалось года полтора назад, только руки дошли до неё.
По изображению - позже выложу, я пока что с нормальным формированием видео разбираюсь, что бы минимизировать логику. Пока что все 8 пикселей преобразуются параллельно, что увеличивает объёмы...

barsik
01.02.2018, 12:53
если не трудно - добавить .../ROM/TEST256.HEX
Вот, вложением
Скачал этот выложенный тест 256 кб для ОРИОНА. Оказалось, что это древний мистаховский тест. Но попутно выяснил, что выложенный HEX-файл нестандартный. Его не берёт ни одна CP/M-овская программа рассчитанная на работу с HEX-файлами.

А есть другие более свежие тесты для ОРИОНА ? Во вложении те тесты, что есть у меня. В DAT-виде и в стандартном HEX-виде (сгенерировано CP/M-овской программой GENHEX.COM).

zebest
01.02.2018, 13:22
тут не в том вопрос, древний или нет тест. Тут бы вообще собрать, с тем что есть, а потом уж можно и другие ром-ы загрузить. bin-to-hex с десяток можно найти, кажный в своем формате выгружает, поэтому всегда важно посмотреть на оригинальный hex, а потом уж самомуу генеририть.
еще с pll_0002 проблемы были, пришлось поупираЦЦа :(
еще и собралось довольно шустро, каких то 11 мин, не полтора часа.

andreil
01.02.2018, 13:42
тут не в том вопрос, древний или нет тест. Тут бы вообще собрать, с тем что есть, а потом уж можно и другие ром-ы загрузить. bin-to-hex с десяток можно найти, кажный в своем формате выгружает, поэтому всегда важно посмотреть на оригинальный hex, а потом уж самомуу генеририть.
еще с pll_0002 проблемы были, пришлось поупираЦЦа :(
еще и собралось довольно шустро, каких то 11 мин, не полтора часа.
Я же написал, что PLLки надо регенить мастером - даблклик в дереве, финиш. И так для обоих.

По поводу HEXа - я просто бинарник конвертил в Intel HEX, потом в квартусе его открывал и пересохранял - иначе ширина данных не совпадало, ворнинки были при сборке.

andreil
01.02.2018, 19:43
Итак, с видео-частью вроде бы разобрался, проект на гихабе обновлён, добавил ридми с инструкцией по конвертации образов.
По выводу на монитор:
https://andreil.by/files/IMG_0270.JPG - Тест 256. Заметно, что некоторые столбцы "расползлись" значительно шире - на другом мониторе такого не наблюдается, просто задевается соседний пиксель изображения.
https://andreil.by/files/MVI_0275.MOV - По поводу переключения режимов 384/480. В режиме 480 видно данные знакогенератора первого монитора, которые располагаются как раз за экранной областью. (курсор в нижнем краю из-за того, что с порта клавиатуры читается 0xFF, как я понимаю).
Реализация видео-модуля ещё не конечная и будет "допиливаться" под другое разрешение в добавок к уже имеющемуся (скорее всего - 640x360, нужно для тестов найти "квадратный" монитор на работе).
По поводу занимаемых ресурсов:
https://image.prntscr.com/image/Yhh-vmdNQdOI-XvDERekiA.png
Из этого объёма 305 ячеек ушло на CPU, 73 - на видео-подсистему (счётчики, регистры, и т.д.). Остальное - системные порты и обработка RAM.

Vslav
01.02.2018, 19:49
Из этого объёма 305 ячеек ушло на CPU, 73 - на видео-подсистему (счётчики, регистры, и т.д.). Остальное - системные порты и обработка RAM.
В Compilation Report есть подпункт "Resources by entities", оттуда картинка более информативная получается.
Ячейки в пятом циклоне почти вдвое более жирные чем в более ранних сериях, неудивительно что их вдвое меньше и ушло на CPU.

OrionExt
01.02.2018, 19:56
Симпотичненько:)


(курсор в нижнем краю из-за того, что с порта клавиатуры читается 0xFF, как я понимаю).
Если бы читалось FF, то курсор был бы на своем законном месте. А так фиг его знает, что от туда читается.

andreil
01.02.2018, 20:00
В Compilation Report есть подпункт "Resources by entities", оттуда картинка более информативная получается.
Ячейки в пятом циклоне почти вдвое более жирные чем в более ранних сериях, неудивительно что их вдвое меньше и ушло на CPU.
https://image.prntscr.com/image/teCfpHcFQy_AUCE9a_ps4Q.png
Видео-подсистема пока что жирновата, поскольку идёт сравнение чисел "в лоб". При синтезе как-то оптимизируется, конечно, но потом переделать на триггеры и будет очень существенная экономия...

andreil
02.02.2018, 09:46
Господа софтописатели и им соболезнующие, к вам вопрос - используются ли режимы 1 и 2 у ВВ55, или везде и всегда используется только 0-й режим?
О режимах:
0 - Basic Input/output;
1 - Strobed Input/Output;
2 - Strobed Bidirectional I/O (only A group).
Если реализовывать только режим 0, то логика значительно упрощается...

barsik
02.02.2018, 12:37
используются ли режимы 1 и 2 у ВВ55, или везде и всегда используется только 0-й режим?
Это вопрос скорее к написателям эмуляторов, чем к программистам для КР580. В своих эмуляторах ОРИОНА и РК86 (для MSDOS) я эмулировал только режим 0 и тем не менее, всё, что должно работать, - работало.

Потому делаю смелый вывод, что до сих пор, ни в базовом системном ПО (т.е ROM-BIOS и дискетные DOS-ы), ни в играх, - необычные возможности обоих ВВ55 не использованы. Единственное место где, возможно, параллельный интерфейс с квиттированием мог быть использован, - это драйвер принтера и скоростная передача по параллельному интерфейсу.

В ходе использования и любительского программирования для трёх журнальных 8-ми разрядок на КР580, сталкивался с режимом ППА отличным от 0-го только один раз. В 1989 имел дело с КНГМД для CP/M (подобным РК-КНГМД, без ВГ93, интерфейс через ППА) для РК86. На схеме было написано - автор Анатолий Мельников. Там ППА использовался как положено, - в режиме параллельного интерфейса, когда порт C используется для управляющих сигналов. Такой режим немного ускоряет обмен, но особенно удобен, если есть прерывания. В любом случае этот режим, если где-то и используется, то только на третьем бесполезном ППА, который вообще нет смысла эмулировать (потому что третий ППА никто вообще не ставил, т.к для него не придумали применений).

andreil
02.02.2018, 12:49
Это вопрос скорее к написателям эмуляторов, чем к программистам для КР580. В своих эмуляторах ОРИОНА и РК86 (для MSDOS) я эмулировал только режим 0 и тем не менее, всё, что должно работать, - работало.

Потому делаю смелый вывод, что до сих пор, ни в базовом системном ПО (т.е ROM-BIOS и дискетные DOS-ы), ни в играх, - необычные возможности обоих ВВ55 не использованы. Единственное место где, возможно, параллельный интерфейс с квиттированием мог быть использован, - это драйвер принтера и скоростная передача по параллельному интерфейсу.

В ходе использования и любительского программирования для трёх журнальных 8-ми разрядок на КР580, сталкивался с режимом ППА отличным от 0-го только один раз. В 1989 имел дело с КНГМД для CP/M (подобным РК-КНГМД, без ВГ93, интерфейс через ППА) для РК86. На схеме было написано - автор Анатолий Мельников. Там ППА использовался как положено, - в режиме параллельного интерфейса, когда порт C используется для управляющих сигналов. Такой режим немного ускоряет обмен, но особенно удобен, если есть прерывания. В любом случае этот режим, если где-то и используется, то только на третьем бесполезном ППА, который вообще нет смысла эмулировать (потому что третий ППА никто вообще не ставил, т.к для него не придумали применений).
Спасибо за ответ, это значительно упрощает эмуляцию ВВ-шки...
Просто Альтеровская корка для i8255 перемудрена, да и уже начал писать свою реализацию :)

andreil
02.02.2018, 21:53
Кое-как подключил клавиатуру, скопировав почти весь код с другого клона Ориона...
Оно даже заработало, но не на 100% ещё - осталось только понять, куда все доп. сигналы заводить :)

- - - Добавлено - - -

Итак, запустил Монитор-3.1, который с ROM-диска стартанул ORDOS. Итого - базисный компьютер вроде готов к дальнейшим улучшениям :)
Сперва - буду добивать и оптимизировать вывод видео, потом займусь портами ВВ55 - сейчас они вообще эмулируюся самым тупым кодом:

process (clk) begin
if (rising_edge(clk) and (ports_cs(1) = '1')) then
if (rd = '1') then
case addr(1 downto 0) is
when "00" => data <= rom_data;
when others => data <= (others => 'Z');
end case;
elsif (wr = '1') then
case addr(1 downto 0) is
when "00" => NULL;
when "01" => rom_addr( 7 downto 0) <= data;
when "10" => rom_addr(15 downto 8) <= data;
when "11" => NULL;
end case;
else
data <= (others => 'Z');
end if;
end if;
end process;
Оно хоть и работает, но выглядит не очень =/
Так же планирую сделать Z80-CadrII - она, как и видеорежимы, будет включаться переключателями (в железе - джамперы или DIP-переключатели).

- - - Добавлено - - -

Как я понимаю, ВГ93 до сих пор не реверснули полностью, поэтому остаётся только реальная плата...

- - - Добавлено - - -

Актуализировал проект на гитхабе.
Статистика по ресурсам:
https://image.prntscr.com/image/G_pxjgnzQUShTrKizCF4Qw.png
В PIO-модуле есть что оптимизировать ещё, поскольку при синтезе там получилась просто прорва мультиплексоров.
Структура компьютера по модулям уже обрисовывается - https://image.prntscr.com/image/lwywwmWgS9mmBdJ1UR6H7Q.png

andreil
04.02.2018, 14:04
Итак, добавил разрешение 640х480@60Hz. (https://github.com/andreili/Orion-128_DE1-SoC/commit/b5a3564b59663ce5ab73f141fde04a3615ceae36) Переключается по SW8.
Разрешение 640х350@70Hz на разных мониторах интерпретируется по-разному - на рабочем словило именно 640х350@70Hz, а на домашнем его видит как 720х400@70Hz.

andreil
04.02.2018, 20:14
Появились вопросы по организации памяти и тактированию процессора:
1) Какие тактовые частоты валидны? 2,5МГц базово, 5МГц, 10МГц - вроде бы всё? (Включая схемы с Z80, ест.);
2) Какой объём памяти достаточен для 99% программ на Орионе? 256Кб или 512Кб? Просто думаю, как организовывать память, с учётом двухпортового банка для арбитража видеопамяти - однопортовая на таких частотах пиксельклока (25Мгц) уже не справляется, из-за циклов четния/записи процессора будет теряться до 2-х пакетов с пикселями (то есть 8 или 16 пикселей).

zebest
04.02.2018, 21:28
Разрешение 640х350@70Hz на разных мониторах интерпретируется по-разному - на рабочем словило именно 640х350@70Hz
у меня на двух мониторах именно так и есть.
Компилилось 2:27, но ячеек побольше получилось, видимо без оптимизации.

andreil
04.02.2018, 22:08
у меня на двух мониторах именно так и есть.
Компилилось 2:27, но ячеек побольше получилось, видимо без оптимизации.
Я вроде бы всё по дефолту сбрасывал уже пару раз параметры сборки, так что вряд ли.
Да и в проекте сейчас побольше логики чутка, чем в той картинке было. Сейчас у меня весь проект в 766 ALMs влез.

zebest
04.02.2018, 22:41
ну если по памяти вспомню, то относительно картинки orion cpu:cpu - 312, у меня же 500, ну и се ост. так же немного побольше

andreil
04.02.2018, 22:44
ну если по памяти вспомню, то относительно картинки orion cpu:cpu - 312, у меня же 500, ну и се ост. так же немного побольше
Странно. Видимо это вообще без оптимизаций. В оригинале корка ВМ80А занимала около 670LE, в 5-ом циклоне ячейки грубо в 2 раза "жирнее", отсюда и 312 ячеек (из которых сколько-то ещё и на организацию портов и ПЗУ отводится).

andreil
06.02.2018, 15:36
Неспешно оптимизирую формирователь видео-сигнала. Очень сильно усложняет логику наличие аж 4-х режимов - 384/480 столбцов, 640х480/640х350.
Вот пример формирования горизонтального синхроимпульса:

h_sync_pol_sig <= H_SYNC_POL_WS when (wide_scr_en='1') else H_SYNC_POL;
-- начало горизонтального синхроимпульса
h_sync_4_start <= h_cnt(9) and h_cnt(6) and (not h_cnt(7)) and h480en;
h_sync_3_start <= h_cnt(9) and h_cnt(4) and (h_cnt(7) nor h_cnt(8)) and (not h480en);
h_sync_start <= h_sync_3_start or h_sync_4_start;


-- конец горизонтального синхроимпульса
h_sync_end_mid <= h_cnt(9) and h_cnt(5);
h_sync_4_end <= h_sync_end_mid and h_cnt(7) and h480en;
h_sync_3_end <= h_sync_end_mid and h_cnt(6) and h_cnt(4) and (not h480en);
h_sync_end <= h_sync_3_end or h_sync_4_end;


process (h_sync_3_start, h_sync_3_end)
begin
if (h_sync_end = '1') then
h_sync <= not h_sync_pol_sig;
elsif (h_sync_start = '1') then
h_sync <= h_sync_pol_sig;
end if;
end process;
Минимизировал как мог, но дальше уже некуда :(
В некоторых местах при подобной оптимизации сразу "уходит" стабильность, выраженная в том, что перестаёт считать счётчик по вертикали - меняю формирование сигнала BLANK, а летит счётчик =/

Vslav
06.02.2018, 15:50
Очень сильно усложняет логику наличие аж 4-х режимов
Под условную компиляцию их (`ifdef). Или очень хочется переключение режимов рантайм? Оно конечно заманчиво выглядит, только нечасто кто на лету переключает телевизоры/мониторы. Прикрутил телик/моник, подобрал режим перепрошивками, если вдруг несколько вариантов может подойти, и все - дальше оно так живет. Ну это у тех неленивых кто с реальными железками любит возиться.

andreil
06.02.2018, 16:06
Под условную компиляцию их (`ifdef). Или очень хочется переключение режимов рантайм? Оно конечно заманчиво выглядит, только нечасто кто на лету переключает телевизоры/мониторы. Прикрутил телик/моник, подобрал режим перепрошивками, если вдруг несколько вариантов может подойти, и все - дальше оно так живет. Ну это у тех неленивых кто с реальными железками любит возиться.
Я хочу хотя бы для себя собрать такой вариант "в железе", потому оптимизирую под такую реализацию. Но да - можно сделать просто отдельными МС на плате это всё и банально написать "для такого-то режима запаиваем такие-то детали". Но всё равно это всё надо сейчас минимизировать, ведь условия вида `elsif (((h_cnt = 10D"392") and (h480en = '0')) or ((h_cnt = 10D"488") and (h480en = '1'))) then` в железо воплотить будет очень дорого по корпусам "рассыпухи" ;)

Error404
06.02.2018, 16:26
Появились вопросы по организации памяти и тактированию процессора:
1) Какие тактовые частоты валидны? 2,5МГц базово, 5МГц, 10МГц - вроде бы всё? (Включая схемы с Z80, ест.);
2) Какой объём памяти достаточен для 99% программ на Орионе? 256Кб или 512Кб? Просто думаю, как организовывать память, с учётом двухпортового банка для арбитража видеопамяти - однопортовая на таких частотах пиксельклока (25Мгц) уже не справляется, из-за циклов четния/записи процессора будет теряться до 2-х пакетов с пикселями (то есть 8 или 16 пикселей).

2,5МГц , 5МГц, 10МГц в принципе достаточно.

Ставить можно две ОЗУ для двух плоскостей, а там уж у кого какие есть - варианты от 2х64к (128кб) до 2х512кб (1024), просто развести два места по 32 ноги. Ну или промежуточные типа 128+512.

andreil
06.02.2018, 16:32
Ставить можно две ОЗУ для двух плоскостей, а там уж у кого какие есть - варианты от 2х64к (128кб) до 2х512кб (1024), просто развести два места по 32 ноги. Ну или промежуточные типа 128+512.
Тут ограничение в том, что двухпортовая SRAM на 5В в нашем случае ограничена объемами 64Кх8, 64Кх16 и 128Кх8, от чего и следует "плясать" с лимитом памяти.

Error404
06.02.2018, 16:43
двухпортовая :v2_dizzy_aaaaa:

HardWareMan
06.02.2018, 17:23
ведь условия вида `elsif (((h_cnt = 10D"392") and (h480en = '0')) or ((h_cnt = 10D"488") and (h480en = '1'))) then` в железо воплотить будет очень дорого по корпусам "рассыпухи" ;)
Вот у современных "железостроителей" мозги совсем жиром заплыли. Зачем делать сравниватель (между прочим == а не =), когда можно побитное умножение? Занимает 1 ячейку максимум.

- - - Добавлено - - -


:v2_dizzy_aaaaa:
И не говори! НИ-КО-МУ!

andreil
06.02.2018, 19:23
(между прочим == а не =)
Это справедливо только в Verilog'е, а я пишу на VHDL, где оператор сравнения - именно "=".
А по поводу двухпортовости - иначе при обращении процессора к памяти будут "выпадать" 1-2 столбца по 8 пикселей на таких частотах.

- - - Добавлено - - -


Вот у современных "железостроителей" мозги совсем жиром заплыли.
Вот честно - я больше программист, чем разработчик железа. Последнее является только хобби, да и опыта ещё маловато, так что подобные ляпы пока буду допускать.

- - - Добавлено - - -

По поводу памяти, вот картинка (https://image.prntscr.com/image/r1L8PZNiQWOpt68fSoMIFw.png).
Красными прямоугольниками выделил вывод столбца из 8 пикселей, то есть 1 байта из памяти.
Если организовывать на стандартной памяти, то для устранения проблем следует организовывать буфер минимум для 2-х байт (4-х, если точнее, поскольку 2 плоскости), в которых будут храниться промежуточные значения - по адресам N+1 и N+2, а N+0 уже выводится на экран. В оригинальном Орионе частота вывода изображения значительно меньше, поэтому хватило одного буфера - для значений N+1.
Подумать над такой схемой вполне возможно, что бы использовать стандартную SRAM, чем скорее всего и займусь после оптимизации формирования видеосигналов.

- - - Добавлено - - -

Сейчас вот посмотрел на длительности сигналов процессора WR и RD в модели - оба занимают "в ширину" ровно 6 пикселей вывода.
При частоте тактирования всего (и памяти) в 25МГц получается, что на чтение видеоданных у нас максимум 80нс. Для большинства типов памяти хватит, конечно же. Но это справедливо только для ВМ80А - я не в курсе временных диаграмм этих сигналов у Z80.
Вот картинки с анализатора:
Чтение - https://image.prntscr.com/image/GTRAB_mgQ1SlEx1AA_RbrQ.png Запись - https://image.prntscr.com/image/oq19bH41Q-OXssmSd17yeA.png
Второй ряд - Ф2, третий - Ф2.
То есть у нас, грубо говоря, в наихудшем случае около 40нс на цикл чтения байта из памяти.
Если не успеть прочитать байт - 8 пикселей "выпадут" из картинки.

- - - Добавлено - - -

Vslav, ты у нас более знаком с циклами ВМ80А - как можно их "обрезать" на графиках выше? В моей логике пока что используются "сырые" сигналы с процессора, то есть обращение к памяти формируется как "cpu_rd or cpu_wr".
Из того, что я вижу - можно делать сигнал обращения к памяти как "cpu_F2 and (cpu_rd or cpu_wr)", с защелкиванием данных на выходном буффере при чтении.

Vslav
06.02.2018, 19:38
Vslav, ты у нас более знаком с циклами ВМ80А - как можно их "обрезать" на графиках выше?

Похоже у тебя F1/F2 взяты с ножек pin_F1/F2, а они внутри обертки еще защелкиваются, то есть реально задержаны на такт. Если у тебя F1/F2 формируются внутри ПЛИС и синхронизированы с clk что на ядро подается, то защелки можно убрать.

А обрезать - уменьшить простой после F2, тогда быстрее молотить будет, сейчас частота делится на 6, потому что у тебя после F2 пауза в фазах есть - не подана ни одна из F1/F2.

andreil
06.02.2018, 19:51
Похоже у тебя F1/F2 взяты с ножек pin_F1/F2, а они внутри обертки еще защелкиваются, то есть реально задержаны на такт. Если у тебя F1/F2 формируются внутри ПЛИС и синхронизированы с clk что на ядро подается, то защелки можно убрать.

А обрезать - уменьшить простой после F2, тогда быстрее молотить будет, сейчас частота делится на 6, потому что у тебя после F2 пауза в фазах есть - не подана ни одна из F1/F2.
Паузы - это для задания тактовой частоты, она сейчас 2,5МГц. Я же делаю модель компа, а не тестовой числодробилки, мне нужно блюсти частоты :) Хотя тут я с делителем накосячил - надо было делить на 5, а не на 6 =/
Корка затактирована на 25МГц, Ф1 и Ф2 - 2,5МГц на картинках.
Ф1 = orion_cpu:cpu|vm80a:cpu|pin_f1, то есть сигнал с ножки, а не с ядра. Как вижу, это до защелки ещё.

- - - Добавлено - - -

Вот, исправил счётчик для формирования тактов:
https://image.prntscr.com/image/EZQSIIOmRJGfDMG0czsDpA.pnghttps://image.prntscr.com/image/ETbNCj3ZRVyMw8-vFB019w.png
Уже минимум 2 такта на чтение видео-данных, неплохо :)
То есть при неактивных RD и WR по фронту F1 выставляем адрес для чтения, по фронту F2 помещаем данные в буфер.

shurik-ua
06.02.2018, 19:54
Вот у современных "железостроителей" мозги совсем жиром заплыли.
там же оптимизатор сам вроде сделает побитовое ? да и код читать удобнее всё таки.

Vslav
06.02.2018, 19:55
Паузы - это для задания тактовой частоты, она сейчас 2,5МГц.
Если хочешь использовать старую корку vm80a, то попробуй паузы сделать через HOLD.
Новая корка vm80_wb содержит встроенный клок-модератор, имеет отдельный вход vm_cena. На него надо подавать импульсы высокого уровня в зависимости от желаемой эмулируемой частоты ядра, при этом ввод-вывод на шине от него не зависит. Например, затактируешь корку от 25МГц, если на vm_cena постоянно высокий то корка работает на 25МГц, если туда подавать единичку только каждый 10-ый такт - получишь 2.5МГц, каждый 5-ый такт - 5МГц. Можно получить и 10 МГц, подавая частоту на 2 такта каждые 5, или реализовать фазовый аккумулятор для генерации vm_cena. И vm_cena лучше регистром фиксировать, для устойчивости.

PS. Кстати, в новой корке я зря рестарт по прерыванию в halt выбросил, оказывается нужная штука, halt используется и прерывание из него выводит оказ. Совсем забыл, исправлю сейчас.

andreil
06.02.2018, 20:36
Если хочешь использовать старую корку vm80a, то попробуй паузы сделать через HOLD.
Новая корка vm80_wb содержит встроенный клок-модератор, имеет отдельный вход vm_cena. На него надо подавать импульсы высокого уровня в зависимости от желаемой эмулируемой частоты ядра, при этом ввод-вывод на шине от него не зависит. Например, затактируешь корку от 25МГц, если на vm_cena постоянно высокий то корка работает на 25МГц, если туда подавать единичку только каждый 10-ый такт - получишь 2.5МГц, каждый 5-ый такт - 5МГц. Можно получить и 10 МГц, подавая частоту на 2 такта каждые 5, или реализовать фазовый аккумулятор для генерации vm_cena. И vm_cena лучше регистром фиксировать, для устойчивости.
Не, я на старой корке делаю, для новой надо делать "прослойку", поскольку сигналы чутка другие и шина данных у меня полностью двунаправленная.
У меня там не паузы, а сигналы со счётчика ;) Вход 25МГц, выход - 2,5МГц. Делаю специально так, что бы потом "в железе" схему составить без проблем для генерации тактов.

clk_F <= (not cnt_clk(1)) and (not cnt_clk(2));clk_F1 <= clk_F and (not cnt_clk(0));
clk_F2 <= clk_F and cnt_clk(0);
process (clk)
begin
if (rising_edge(clk)) then
if (cnt_clk = 3D"4") then
cnt_clk <= (others => '0');
else
cnt_clk <= cnt_clk + '1';
end if;
end if;
end process;

- - - Добавлено - - -


там же оптимизатор сам вроде сделает побитовое ? да и код читать удобнее всё таки.
Внутри ПЛИС - да. Но для воплощения "в железе" приходится всё сравнивать выборочно побитово, иначе плата раздуется на много-много корпусов для полноценного сравнения.

- - - Добавлено - - -

Глянул ДШ на Z80 - там примерно та же схема по циклам.
В итоге попробую завтра организовать работу с 1-портовой памятью.
Сигнал обращения к памяти будет формироваться как "F2 and (cpu_rd or cpu_wr)".
Для растягивания чтения добавится защёлка на памяти (сейчас её нет).
ША памяти будет переключаться на адреса видео при условии "F1 or F2".
Копирование видео-данных в буфер (DD47, DD48 в оригинальном Орионе) будет происходить по положительному фронту F2.
В итоге на чтение видео-данных отводится 40нс на любой частоте тактирования (2.5, 5, 10).

PS: Расписал больше для себя, что бы не забыть потом. Но может я где-то ошибся в своих рассуждениях...

HardWareMan
06.02.2018, 21:04
там же оптимизатор сам вроде сделает побитовое ? да и код читать удобнее всё таки.
Внутри ПЛИС - да. Но для воплощения "в железе" приходится всё сравнивать выборочно побитово, иначе плата раздуется на много-много корпусов для полноценного сравнения.
А ты RTL покажи этого узла. И тот же узел в Technology Map. И сразу станет видно.

Vslav
06.02.2018, 21:13
Делаю специально так, что бы потом "в железе" схему составить без проблем для генерации тактов.
Тогда тебе надо не на HDL писать, а использовать схемный ввод, из кубиков серии 74xxx. Потому что при таком подходе как сейчас ты и возможности HDL/FPGA не используешь нормально, а потом когда это все на логику будешь раскладывать - там свои проблемы вылезут. В итоге это все может отравить тебе фан, имхо.

andreil
06.02.2018, 21:47
Тогда тебе надо не на HDL писать, а использовать схемный ввод, из кубиков серии 74xxx. Потому что при таком подходе как сейчас ты и возможности HDL/FPGA не используешь нормально, а потом когда это все на логику будешь раскладывать - там свои проблемы вылезут. В итоге это все может отравить тебе фан, имхо.
Сейчас добиваюсь хоть какой-то работы от модели, потом да, буду в "кубики" модель переделывать.
Рисовать схему сразу в HDL'я - это изврат, который выйдет боком.

- - - Добавлено - - -


А ты RTL покажи этого узла. И тот же узел в Technology Map. И сразу станет видно.
Тогда только TechMap. В RTL'е всё упрощено - те же сравнения так и записаны - блок Equal и 2 оператора на входе для сравнения:
https://image.prntscr.com/image/6oathfihTQK3s4NfiR8Z-g.png

HardWareMan
06.02.2018, 21:48
О чем и речь. Жду техмап. Он, кстати, зависим от конкретной FPGA.

andreil
06.02.2018, 22:35
О чем и речь. Жду техмап. Он, кстати, зависим от конкретной FPGA.
Это да. В альтерах там просто куча LOGIC_CELL_COMB'ов =/ Зачастую каждый разбит на куски, раскиданные по "схеме". И внутри ещё хрен пойми какая логика - тяжело её вкуривать вообще =/ Приходится каждый элемент на бумажке расписывать.
Это может ещё от неопытности просто - это ведь мой первый проект на FPGA, lol :) До этого не в счёт - баловство в виде написания светофора и прочего, без вникания в суть работы.

andreil
07.02.2018, 16:42
Итак, сегодня весь день "убил" на перевод схемы на однопортовую память, и оно даже заработало. Правда, при частоте процессора 2,5МГц пока что имеются проблемы, но начиная с 3,125МГц (25МГц/8) всё идеально работает. Буду бороться за сокращение переднего фронта сигнала DSYN - он-то и препятствует обращению к памяти...

- - - Добавлено - - -

Итак, решение пока не самое лучшее, но оно работает 100%:

process (h_cnt(0))
begin
if (rising_edge(h_cnt(0))) then
dsyn_delayed <= dsyn;
end if;
end process;


mem_to_vbuf <= h_cnt(1) and (not (dsyn or dsyn_delayed));


process (mem_to_vbuf)
begin
if (rising_edge(mem_to_vbuf)) then
vdata <= mem_data1 & mem_data0;
end if;
end process;

mem_addr <= vaddr when (dsyn = '0')
else addr;
То есть мы по DSYN мультиплексируем шину адреса памяти, а для арбитража данных задерживаем DSYN на 4 такта (25МГц). Если не делать доп. сигнал с задержкой, то бывают ситуации, когда фронт чтения в буфер приходится на спад DSYN и память естественно ещё не успевает считать данные.
Позже запаяю на макетке подручную SRAM'ку и протестирую без этой задержки с изменением кода на защёлку:

process (mem_to_vbuf) begin
if (mem_to_vbuf = '1') then
vdata <= mem_data1 & mem_data0;
end if;
end process;

andreil
07.02.2018, 23:35
Сделал формирователь тактовых импульсов из частоты 25МГц. Выходные частоты - 2.5МГц, 5МГц, 10МГц.
Для теста снял все варианты анализатором, частота семплирования - 50МГц.
10МГц: реализовывал как счётчик до 5, но с генерацией импульсов в 0-ой и 2-ой фазах - https://image.prntscr.com/image/eE4hjk8cRJ6QDmjR-iKS1w.png
5МГц: счётчик до 5, генерация в 0-ой фазе - https://image.prntscr.com/image/LuoUz2tLR6Oh6S3A3cNyIg.png
2.5МГц: счётчик до 10, генерация в 0-ой фазе - https://image.prntscr.com/image/1-qQKpHeR0ejM2OuC7grkQ.png
На частоте 2.5МГц надо задерживать передний фронт DSYN, пока не придумал как. Иначе на изображении постоянные черные полоски бегают из-за конфликта доступа.
Завтра ещё сперва оптимизирую формирование тактов, потом займусь DSYN...
Из минусов текущего решения - необходимы 2 раздельных счётчика после кварца для формирования сигналов для видео и для CPU. Но есть сдвоенные на подходящие частоты, можно попробовать.

andreil
08.02.2018, 22:14
Итак, сделал переключаемую тактовую 2.5/5/10МГц, а так же перевёл память на однопортовую (https://github.com/andreili/Orion-128_DE1-SoC/commit/1ac89f98cd08074e8683e1bb0d98b8239d09a173). Пока что реализовано сильно "в лоб", но оно работает надёжно.
Так же пришлось ввести аналог сигнала CAS, по которому пишется положительный фронт DSYN, благодаря чему убрана цепочка задержки этого сигнала (из кода не убрал, но оно не используется уже).

andreil
12.02.2018, 10:58
Набросал формирователь видеосигналов из "кубиков" логики.
В качестве счётчиков использовал ИЕ19 (74393), имеются некоторые погрешности в синхросигналах (ровно на 1 такт, для упрощения логики).
Логику пока не упрощал, займусь этим только после стабильной работы с остальным компьютером.
21mux - в железе будет в виде джамперов.

HardWareMan
12.02.2018, 14:14
Нипанятна. Есть оригинал?

andreil
12.02.2018, 16:35
Нипанятна. Есть оригинал?
Вот, в чутка лучшем качестве (https://image.prntscr.com/image/QFNn74ybQm21Q9XHTmyEmA.jpg) :)
Немного оптимизировал сигналы, начал формировать тактовые сигналы (пока только 2.5/5МГц).

HardWareMan
12.02.2018, 17:33
Нехорошая схема. Учитесь мыслить синхронно. Будут много глитчей в цепи сброса.

Я вот тоже для своего Спеца в CPLD сначала по старинке, ИЕ5 да логика. А потом, когда проект приблизился к ёмкости CPLD и его работоспособность стала зависеть от фазы луны, переписал все на ИЕ7 ИЕ10 с синхронными установками (не сброс!) + синхронизация некоторых сигналов на выходе. И все заверте...

zx-kit
12.02.2018, 17:42
Нехорошая схема. Учитесь мыслить синхронно. Будут много глитчей в цепи сброса.

Я вот тоже для своего Спеца в CPLD сначала по старинке, ИЕ5 да логика. А потом, когда проект приблизился к ёмкости CPLD и его работоспособность стала зависеть от фазы луны, переписал все на ИЕ7 с синхронными установками (не сброс!) + синхронизация некоторых сигналов на выходе. И все заверте...
А еще лучше ИЕ18/ИЕ10. Они еще синхроннее. Я в Ленинграде ИЕ7 заменил на ИЕ17/ИЕ18/ИЕ10. Получился LENINGRAD-2012 без подбора конденсаторов, которые требовались для ИЕ7. Я ИЕ18 буду использовать в "Метеоре" .

HardWareMan
12.02.2018, 17:55
zst, пардон, я имел в виду ИЕ10, не ИЕ7. Если не использовать его ассинхронный сброс а только загрузку, то все отлично работает.

andreil
12.02.2018, 18:43
zst, пардон, я имел в виду ИЕ10, не ИЕ7. Если не использовать его ассинхронный сброс а только загрузку, то все отлично работает.
То есть вместо сброса делать загрузку нулей? Один минус - количество корпусов счётчиков тогда увеличится в 2 раза =/

HardWareMan
12.02.2018, 19:07
То есть вместо сброса делать загрузку нулей? Один минус - количество корпусов счётчиков тогда увеличится в 2 раза =/
Для дискретных корпусов - да. Для LE ПЛИС - нет. Количество регистров будет то же + он соптимизирует неиспользуемые цепи. Зато будет синхронный дизайн с четкими сигналами.

andreil
12.02.2018, 19:13
Для дискретных корпусов - да. Для LE ПЛИС - нет. Количество регистров будет то же + он соптимизирует неиспользуемые цепи. Зато будет синхронный дизайн с четкими сигналами.
Выбрал 74163 - ИЕ18. У неё синхронные загрузка и сброс.

andreil
13.02.2018, 16:23
Переделал логику (https://image.prntscr.com/image/PJuKru9_TQKUQ47ovRAMQw.jpg) "по горизонтали" на синхронную. Асинхронными осталось только формирование синхроимпульса. "Вертикаль" пока не переделывал - сперва думаю оптимизировать горизонталь (особенно цепь задержки выключения гасящего сигнала, подумаю по адресации видео-ОЗУ).

Denn
13.02.2018, 17:50
Знакомые картинки :)
Я тоже макетировал синхроген под SVGA, и тоже использовал счётчики ИЕ18.

HardWareMan
13.02.2018, 19:44
Игреки слиплись. Осторожнее с передвижением блоков.

andreil
13.02.2018, 22:40
Игреки слиплись. Осторожнее с передвижением блоков.
Да, заметил при сборке :)
Кактус что-то под конец дня начал жутко педалить, еле растащил нормально всё.
X работает идеально, а вот по Y пока что есть проблемы - буду их устранять после допиливания X'а...

andreil
14.02.2018, 13:40
Оптимизировал как мог... (https://image.prntscr.com/image/UsgQCDj1T_iO9isYH7i_IQ.jpg)
Если у кого-либо имеются идеи по дальнейшей минимизации логики - готов выслушать ;) Своих знаний тут уже явно не хватает...
Теперь думаю о компоновке по корпусам:
1) Как есть, относительно много перемычек-переключателей для задания режимов;
2) Группировка по возможностям, то есть если человеку надо только 4:3, 384 столбца, то он часть деталей не запаивает и ставит мало перемычек;
3) Сделать переключение программным, поставив, например, КП11.

PS: Текущая схема видео-подсистемы занимает 28ALMs.

Error404
14.02.2018, 16:37
По оптимизации не скажу ибо все эти импортные "овалы" мой мозг считывать отказывается, приучен только к ГОСТу.
Имею вопрос по стратегии: этот комп планируется довести до выпуска или он проектируется только в качестве упражнений?
Если к выпуску, то что в итоге с видеовыходом: VGA? В каком разрешении?

Если VGA и в приличном разрешении, то я бы предложил ввести режим алфавитно-цифрового дисплея (АЦД). Наиболее просто (цена вопроса 3-4 МСХ логики/регистров и одно ПЗУ с шрифтами) можно было бы реализовать вывод символами 8х8. Логика АЦД такая: при последовательном сканировании в памяти восьми соседних строк, читается из ОЗУ только одна и та же из этих строк (т.е. код символа с отступом по номеру текстового экрана), и вычитанный из ОЗУ байт помещается не в сдвиговый регистр видеовыхода каждый раз напрямую как в графическом режиме, а в регистр-защелку адресных входов A3..A10 ПЗУ шрифтов один раз на все эти восемь строк, а вот выход ПЗУ шрифтов (все 8 строк адресуемого символа выводимые соответственно номеру текущей строки экрана 0..7 т.е. адресные входы A0..A2 ПЗУ шрифтов) уже помещается в сдвиговый регистр видеовыхода. Т.е. укрупненно: "ставим ПЗУ фонта в разрыв между памятью и видеовыходом, и содержимое памяти становится не изображением символа, а его адресом в ПЗУ"

Получим текстовый режим 60х32 символов для разрешения 480х256 (и имеет смысл не теряя совместимость увеличить экран c 15кб до 16кб т.е. до 512х256 получив 64 символа в строке) или 80х32 символов для режима 640х256.
Также очевидно что можно элементарно ввести и матрицу символа 8х16 прямо в этой же схеме как второй режим в дополнение к 8х8, но в этом режиме будет только 16 строк более крупых символов.

andreil
14.02.2018, 17:19
По оптимизации не скажу ибо все эти импортные "овалы" мой мозг считывать отказывается, приучен только к ГОСТу.
Там же подписаны функции все - AND2, XOR2, NOR2 и т .п...

Имею вопрос по стратегии: этот комп планируется довести до выпуска или он проектируется только в качестве упражнений?
Если к выпуску, то что в итоге с видеовыходом: VGA? В каком разрешении?
Планируется хотя бы для себя. Но плат получится всё равно на 5-10 штук...
VGA - на два разрешения, 640х480 и 640х350. Для обоих можно выбирать режим отображения - 384х256 или 480х256. Всё это выбирается джамперами - на схеме это "21mux".

Получим текстовый режим 60х32 символов для разрешения 480х256 (и имеет смысл не теряя совместимость увеличить экран c 15кб до 16кб т.е. до 512х256 получив 64 символа в строке) или 80х32 символов для режима 640х256.
Тут проблема будет в перерасчёте таймингов по горизонтали - на схеме там и так логика самая сложная =/ А ввод ещё одного разрешения раздует логику ещё больше - смотри в посте выше схему по ссылке.

Сегодня добиваю видео-часть из "кубиков", буду добиваться корректной работы. Так что может сегодня даже выложу полную схему узла :)
Ещё и переключение тактовой 2.5/5/10 сделал с возможностью софтварного доступа, если регистр на это дело поставить (0 - 2.5МГц, 1 - 5МГц, 2/3 - 10МГц). Вот фрагмент (https://image.prntscr.com/image/-PMfwqTFSLizrLOpKxevlg.png) именно с формированием тактов, выполнено и проверено сегодня.

Error404
14.02.2018, 17:38
Там же подписаны функции все - AND2, XOR2, NOR2 и т .п...

Планируется хотя бы для себя. Но плат получится всё равно на 5-10 штук...
VGA - на два разрешения, 640х480 и 640х350. Для обоих можно выбирать режим отображения - 384х256 или 480х256. Всё это выбирается джамперами - на схеме это "21mux".

Тут проблема будет в перерасчёте таймингов по горизонтали - на схеме там и так логика самая сложная =/ А ввод ещё одного разрешения раздует логику ещё больше - смотри в посте выше схему по ссылке.


Чтобы излишне не усложнять, и раз уж у нас базовые 640 точек в кадре, я бы предложил использовать Орионовский режим 512х256 (широко применявшийся в Орионе-ПРО). На нем прекрасно будет отображаться и 480х256, совпадает по границе 16к (т.е. все совместимо по размещению экранов в ОЗУ), а 64 символа в строке (при символе шириной 8 точек) это все же лучше чем 60.

- - - Добавлено - - -

А почему ты не рад идее АЦД?
Какие я вижу плюсы:
- вывод символа в 8 раз быстрее.
- горизонтальный скроллинг (влево-вправо) в 8 раз быстрее
- оконные функции быстрее в 8 раз и в 8 раз меньше требуется места под буфера окон чем в графике

Что мало меняется: вертикальный скроллинг ускорится примерно на 20%-30% при символах 8х8 и примерно вдвое для символов 8х16. Ну, как говорится - и то хлеб.

andreil
14.02.2018, 18:02
Я больше волнуюсь о проблемах с разрешением - нужно дополнять формирователи и т.п...
АЦД - не проблема.

Error404
14.02.2018, 18:20
Я больше волнуюсь о проблемах с разрешением - нужно дополнять формирователи и т.п...
АЦД - не проблема.

Но ведь ты уже ввел режим 480 точек. Если вместо него ввести 512 (тоже в-общем вполне Орионовский), то по количеству корпусов останется примерно то же самое? От 640 можно отказаться если оно сильно усложняет.

Те 512 не лезли в телек (и для режима 80 символов в строке при символе шириной 6 точек были избыточны), и раз так, то в 90х делали экран 480 чтобы экономить 1кб в каждой экранной области из четырех. А раз у нас кадр VGA-640 и получаются поля бордюра, то всё в экран влезает с запасом и можно сделать 512.

- - - Добавлено - - -

Еще раз вдумчиво посчитал (первоначально ошибся в оценке сколько tstates уходит на LDIR), при использовании АЦД вертикальный скроллинг получится быстрее в 2-3 раза чем в графическом режиме. Т.е. заметно быстрее, хотя и не в 8 раз.

andreil
14.02.2018, 18:26
Но ведь ты уже ввел режим 480 точек. Если вместо него ввести 512 (тоже в-общем вполне Орионовский), то по количеству корпусов останется примерно то же самое? От 640 можно отказаться если оно сильно усложняет.
Оно как бы не много (https://image.prntscr.com/image/nJKqSQzoQH2Rlh8tq0eEFA.png), по корпусам если смотреть. Вся сложность именно в перерасчёте тактов и выяснение минимальных функций для всех сигналов по горизонтали ;) Я текущую схему уже дня 4 шлифую почти с утра и до вечера.

LeoN65816
14.02.2018, 19:43
Ещё и переключение тактовой 2.5/5/10 сделал с возможностью софтварного доступа, если регистр на это дело поставить (0 - 2.5МГц, 1 - 5МГц, 2/3 - 10МГц). Вот фрагмент (https://image.prntscr.com/image/-PMfwqTFSLizrLOpKxevlg.png) именно с формированием тактов, выполнено и проверено сегодня.
andreil, тебе уже HardWareMan говорил (http://zx-pk.ru/threads/28763-eshche-odin-orion-na-plis.html?p=950138&viewfull=1#post950138) про синхронность. Все выходные сигналы управления внешними модулями/блоками, включая и сигнала такта проца и nCAS для DRAM, должны быть регистровыми, и должны быть синхронными от одного клока (заведомо большей частоты), и никаких латчей, только флипфлопы! Синхронность - залог устойчивой работы логики на больших частотах. У тебя же все на комбинаторике, это ох!"№;%:?*ые задержки и иголки/глитчи. Даже F[0..3] на 7490 у тебя каскадирован...


Что мало меняется: вертикальный скроллинг ускорится примерно на 20%-30% при символах 8х8 и примерно вдвое для символов 8х16. Ну, как говорится - и то хлеб.
Можно сделать как в Векторе-06Ц: поставить отдельный регистр вертикального смещения. Номер текущей/отображаемой строки и содержимое регистра суммируются по модулю 256 и далее результат используется в адресации видеопамяти. В ПЛИСке реализуется элементарно, на рассыпухе, конечно, пожирнее выйдет...

barsik
14.02.2018, 20:29
я бы предложил ввести режим алфавитно-цифрового дисплея... вывод символами 8х8 на 32 строки... Можно ввести и матрицу знакоместа 8х16, хотя в этом режиме будет только 16 строк более крупых символов
Для текстообработки вполне нормально 16 строк, вписанных в растр 512*256, как в КОРВЕТЕ. При 32-х строках символы слишком плющенные, а для нортонов, чтобы влезало больше строк можно использовать графический режим.

Я в середине 90-тых собирался сделать лично для себя такой синхронный текстовый режим в ОРИОНЕ. Он прост в реализации. Но увы, руки до этого так и не дошли, потому что я не был уверен, что этот режим не нарушит регенерацию ОЗУ.

Конечно, лучше бы придумать текстовый экран в ОРИОНЕ на таком же синхронном принципе, но так, чтобы под экранное ОЗУ тратилось не 16 кб, а только 1 кб, как в КОРВЕТЕ. Это возможно сделать поставив свой мультиплексор, ОЗУ 1 кб (на 537РУ17) и весь видеовыход с выходным регистром сдвига и ПЗУ с фонтом. Получится почти КОРВЕТ, но деталей в этом варианте намного больше. Тут проблем с регенерацией не возникает.

Зато вариант когда на экран тратятся те же 16 кб, намного проще (отпадают ОЗУ, защёлки и адресные мультиплексоры), хотя нужна коррекция и на основной плате - там надо ставить КП11, которая обнуляет веса V0...V3 идущие от счётчиков на мультиплексор (это чтобы в знакоместе все 16 линий читались из одного адреса ОЗУ). Конструктивно с краю платы ОРИОНА монтируется разъём, куда вставляется крошечная платка текстового видеовыхода. Там ПЗУ 2764 с фонтом (4 кб на один фонт), ИР9 и КП11, которая при включении текстового режима подаёт сигнал с выхода ИР9 на цепь 101 вместо DD51/20. В DD51 ИР13 банки 0 запрещается сдвиг (единица на DD51/1). Через разъём выходы 8 битов из ИР13 DD51 поступают прямо на ПЗУ фонта, куда также поступают веса счётчиков V0...V3 (соответствующие адресам CPU A0...A3).

Как видите деталей совсем немного и смакетировать это можно за пару вечеров. А текстовый режим, даже такой несуразный, что занимает 16 кб, намного быстрее, чем графический. Проблема только в том, что я не уверен, что ОЗУ будет регенерироваться. Кто-нибудь может высказаться на этот счет?

andreil
14.02.2018, 21:34
andreil, тебе уже HardWareMan говорил (http://zx-pk.ru/threads/28763-eshche-odin-orion-na-plis.html?p=950138&viewfull=1#post950138) про синхронность. Все выходные сигналы управления внешними модулями/блоками, включая и сигнала такта проца и nCAS для DRAM, должны быть регистровыми, и должны быть синхронными от одного клока (заведомо большей частоты), и никаких латчей, только флипфлопы! Синхронность - залог устойчивой работы логики на больших частотах. У тебя же все на комбинаторике, это ох!"№;%:?*ые задержки и иголки/глитчи. Даже F[0..3] на 7490 у тебя каскадирован...
По F[0..3] - схема из ДШ, счётчик до 10-и, стандартней некуда.
По синхронности - та схема уже переделана очень сильно, асинхронные только синхронизация и тактирование (в котором единовременно отрабатывает только одна ветвь).
И где Вы увидели латчи? только если на участке RAM-VIDEO по данным, где это вообще параллельно :) А все сигналы вообще-то на флип-флопах идут, смотрите схему.
по nCAS - у меня он используется для других целей (https://image.prntscr.com/image/gqpDfSkdSEmB7n5NjQrgRA.png). У меня всё на статике и это единственное использование этого сигнала.

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

- - - Добавлено - - -


Как видите деталей совсем немного и смакетировать это можно за пару вечеров. А текстовый режим, даже такой несуразный, что занимает 16 кб, намного быстрее, чем графический. Проблема только в том, что я не уверен, что ОЗУ будет регенерироваться. Кто-нибудь может высказаться на этот счет?
Проблема в том, что я моделирую с целью создать "на рассыпухе".
И пока что делаю минимальный вариант, по-сути. Как будет стабильно работать в виде схемы, так и начну дальше "допиливать".

Error404
14.02.2018, 21:48
Я в середине 90-тых собирался сделать лично для себя такой синхронный текстовый режим в ОРИОНЕ. Он прост в реализации. Но увы, руки до этого так и не дошли, потому что я не был уверен, что этот режим не нарушит регенерацию ОЗУ.


Да, тут я пас, трудно сказать как в классике поведет себя регенерация. Разве что попробовать. :)
А вот в случае проекта andreil, где ОЗУ на SRAM, должно прокатить.

andreil
14.02.2018, 23:10
Да, тут я пас, трудно сказать как в классике поведет себя регенерация. Разве что попробовать. :)
А вот в случае проекта andreil, где ОЗУ на SRAM, должно прокатить.
В самой реализации ничего сложного не вижу. И не обязательно знакогенератор в виде ПЗУ, можно и ОЗУ, что бы "на лету" менять начертание, например, через системный порт или ещё как-либо.

- - - Добавлено - - -

В первом приближении текущая реализация (https://image.prntscr.com/image/X6nRul7HSrOK-cvuXT76CA.jpg) работает, явных проблем не наблюдается. Тест-256 проходит идеально на всех частотах, корректно отображает все видеорежимы.
Участок с памятью - времянка, скоро переделаю на нормальную двунаправленную шину, как прикручу SDRAM.
Узел формирования RGB - 1:1 с оригинального Ориона, только защёлки другие поставил, в данном случае не принципиально.
Узел формирования тактирования процессора и CAS позже будет перенесён в модуль CPU. А пока что посижу над оптимизацией их формирования - сейчас там схема по принципу "ну, вроде бы так должно быть", без оптимизаций и прочего.

LeoN65816
14.02.2018, 23:38
По F[0..3] - схема из ДШ, счётчик до 10-и, стандартней некуда.
Сравни с 74168, разницу чувствуешь? Если нет, то вот подсказка - синхронность!


И где Вы увидели латчи?
А ты сам повнимательнее-то посмотри на свою же схему, неужели не видишь? Еще подсказка - асинхронные сброс/установка - это тоже латчи.


И не надо так агриться - я же писал, что учусь подобной разработке, а не являюсь гуру.
Что значит "агриться"? Никогда не слышал такое слово... Открою большой секрет - я сам только-только начал учиться создавать правильные (читай - синхронные) дизайны (проектов) и далеко-о-о-о не гуру... ;)

И просил давать советы,
Именно советы ты и получил, ...

а не ругать в духе "ты плохой, не делай так".
... и нафантазировал...

barsik
15.02.2018, 07:19
не уверен, что ОЗУ будет регенерироваться. Кто-нибудь может высказаться на этот счет?
Ожидал, что сразу кто-то скажет, что ОЗУ точно не будет регенерироваться и предложит простейшее решение проблемы. Но, по-видимому, среди фанатов ОРИОНА грамотных аппаратчиков совсем не осталось.

Ожидал также, что введение быстрого текстового режима небольшим по объёму труда способом заинтересует любителей ОРИОНА и СПЕЦИАЛИСТА. И, т.к сам я плохо дружу с паяльником и МГТФ-ом, надеялся, что кто-то захочет отмакетировать это в железе, а затем организует производство плат простой текстовой приставки к ОРИОНУ и СПЕЦИАЛИСТУ. Это вполне реально и несложно, а ниже я покажу как решить проблему регенерации ОЗУ.


Итак, почему ОЗУ не будет регенерироваться и как эту проблему решить?

В ОРИОНЕ и СПЕЦИАЛИСТЕ регенерация динамического ОЗУ происходит за счёт работы видеогенератора. С этой целью все самые высокочастотные сигналы (веса) с выходов счётчиков сгруппированы в мультиплексоре так, что выдаются на РУ5-тые по /RAS (т.к именно по /RAS в РУ5-тых происходит регенерация).

При этом, т.к в РУ5-тых, как и в РУ3-тьих вектор регенерации не 8-ми битовый, а семибитовый, достаточно, чтобы за интервал в 2000 МКСЕК на 7-ми входах из 8-ми пробегали все 128 адресов. При этом сигнал на 8-мом мультиплексируемом входе A7 (9 нога) не участвует в регенерации.

В ОРИОНЕ веса счётчиков (и соответствующие им адреса CPU) подаются на мультиплексор совершенно логично. Вот какие сигналы мультиплексируются на выходы КП12-ых при /RAS=1 и защелкиваются в ОЗУ по заднему фронту /RAS.

H0 (A8) -- DD23 --> на A0 РУ5-тых
H1 (A9) -- DD23 --> на A1 РУ5-тых
H2 (A10) - DD24 --> на A2 РУ5-тых
H3 (A11) - DD24 --> на A3 РУ5-тых
H4 (A12) - DD25 --> на A4 РУ5-тых
H5 (A13) - DD25 --> на A5 РУ5-тых
V0 (A0) -- DD26 --> на A6 РУ5-тых
V1 (A1) -- DD26 --> на A7 РУ5-тых

В скобках указаны адреса CPU соответствующие весам счётчиков. Видим, что веса расположены в порядке возрастания частот и вполне логично. Как отмечено выше, для регенерации то, что подаётся на A7 не важно. В текстовом режиме с 16-ю строками веса V0...V3 обнуляются, что приводит к тому, что сигнал на адресе A6 ОЗУ при /RAS не меняется (т.к V0=0), отчего ровно половина ОЗУ не регенерируется.

Исправить это легко. Достаточно взять вес V4, который в текстовом режиме не обнуляется и заменить им вес V0 на входе мультиплексора. Вес V4 изменяется через очередные 16 линий и таким образом за время вывода 32-х строк растра всё ОЗУ будет полностью отрегенерировано. Длительность одной строки 64 МКСЕК, а значит 32 строки длятся 2048 МКСЕК, что на 48 МКСЕК больше требований РТМ для РУ5-тых.

Для не совсем полудохлых РУ5-тых это сработает, а для полудохлых РУ5-тых, в которых от времени увеличились токи утечки в накопительных конденсаторах и период регенерации упал ниже 2 МСЕК - регенерации не будет. Если же делать текстовый режим в 32 строки, то сгодятся и полудохые РУ5-тые, т.к период регенерации будет 1024 МКСЕК, что вдвое ниже максимально допустимого.

В данном случае замена РУ5-тых на РУ7-мые (имеющие вдвое больший период регенерации) не поможет, т.к у РУ7-мых не 7-ми битовый, а 9-ти битовый вектор регенерации и для них период регенерации получится уже 8 МСЕК, что вдвое больше их нормы в 4 МСЕК и значит РУ7-мые точно работать не смогут.

При замене весов, надо одновременно переставлять вес счётчика и соответствующий ему адрес CPU (иначе изменится архитектура экрана), значит перекидывать придётся 2 цепи, т.е надо 4 куска проволоки. Итак, меняем местами на входе мультиплексора V4 и A4 на V0 и A0. Т.е цепи на входах DD24/6 и DD24/4 меняются с DD26/5 и DD26/3 соответственно.

В оригинальном ОРИОНЕ период регенерации РУ5-тых равен всего 128 МКСЕК, отчего прекрасно работают даже полудохлые РУ5-тые. После такой переделки период регенерации ОЗУ в ОРИОНЕ возрастёт до 2048 МКСЕК, что возможно потребует отбраковки полудохлых РУ5-тых, что не тянут стандартный период регенерации. Заметим, что период регенерации РУ7-мых в ОРИОНЕ - 512 МКСЕК, но как указано выше, РУ7-мые для получения синхронного текстового адаптера непригодны.

Сигнал загрузки ИР9 (нога 1) формируется CRR-цепочкой из сигнала 96 (ёмкость 180 пф, резисторы 1 кОм и 3 кОм, так это в моём текстовом адаптере). Таким образом вся доработка до текстового режима состоит всего из 4-х микросхем, 3 из которых (2732, ИР9 и КП11) на доп.платке и одна КП11 монтируется на основной плате ОРИОНА (вторым этажом над одной из КП12). В качестве формирователя программируемого упр.сигнала для включения текстового режима удобно использовать 4-тый D-триггер в DD30, что в базовой схеме формирует сигнал НП (начальный пуск). НП проще формировать на RS-триггере из двух вентилей - по /RESET взводится, а по /WR КР580 сбрасывается. Так получается готовый управляющий бит, причём прямо в нужном порту режима. Я так делал в 1991 году для программного включения режима 768*256.

В СПЕЦИАЛИСТЕ и РК86 вектор регенерации не 8-ми битовый как в ОРИОНЕ, а 7-ми битовый (т.к изначально там стояли РУ3, а при установке РУ5 на СПЕЦИАЛИСТ-М и ЭКСПРЕСС адреса на входах мультиплексоров не сдвигали). Из-за этого при организации регенерации в текстовом режиме для СПЕЦИАЛИСТА понадобится перекидывать не 2, а 4 цепи, т.е понадобятся целых 8 кусков проволоки. Кстати, есть некоторые импортные аналоги РУ5 имеющие не 7-ми битовый вектор регенерации, а 8-ми битовый. Такие ОЗУ прекрасно работают в ОРИОНЕ, но не в СПЕЦИАЛИСТЕ или РК86.

andreil
15.02.2018, 09:20
Сравни с 74168, разницу чувствуешь? Если нет, то вот подсказка - синхронность!
7490 работает БЕЗ сброса, поэтому он полностью синхроннен.

А ты сам повнимательнее-то посмотри на свою же схему, неужели не видишь? Еще подсказка - асинхронные сброс/установка - это тоже латчи.
Вообще-то у 74163 сброс полностью синхроннен - происходит по положительному фронту. А начало импульса сброса идёт в предыдущем такте. Смотрим ДШ - и видим "FULLU SYNCHRONOUS COUNTERS".

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

- - - Добавлено - - -


Ожидал, что сразу кто-то скажет, что ОЗУ точно не будет регенерироваться и предложит простейшее решение проблемы. Но, по-видимому, среди фанатов ОРИОНА грамотных аппаратчиков совсем не осталось.
Повторюсь ещё раз - память SRAM, регенерации не требует! На каждой странице точно 1 упоминание об этом было...

- - - Добавлено - - -

Итак, сейчас думаю к FPGA подключить реальную память для организации адекватных буферов и прочего.
Присмотрел в "шаговой доступности" микросхему AS7C4098A-12JIN - 256K×16, что позволяет получить сразу 512Кб одним корпусом. С видео будет работать на полную ширину, а с процессором - по половинкам, есть входы разрешений для младшего/старшего байтов.
Думаю заодно заказать и недостающие корпуса мелкой логики для реализации макетки...

LeoN65816
15.02.2018, 10:31
7490 работает БЕЗ сброса, поэтому он полностью синхроннен.
Мда-а-а... "Красный" (сброс) и "прямоугольный" (синхронность) - это разные вещи.
7490 - это делитель-на-2 и асинхронный делитель-на-5. Ты по типовой схеме асинхронно каскадируешь делитель-на-2 к асинхронному делителю-на-5 и получаешь (как бы дважды) асинхронный делитель-на-10.


Вообще-то у 74163 сброс полностью синхроннен
Причем тут 74163, если я тебе о 74168 говорил?


Единственное, что я увидел, высказывание "у тебя не синхронная схема, бла-бла, а надо синхронная". А как это исправить, даже ни намёка...
Дык, не просто намёк, а конкретный совет про использование 74168 вместо 7490 тебе был дан. И это только малая часть асинхронности твоего проекта.

Слышащий - да услышит!

andreil
15.02.2018, 12:19
Сделал некоторые упрощения (https://image.prntscr.com/image/Dpa1k6JkTwawvUrLqNeZNg.jpg) в формировании горизонтального синхроимпульса, из-за чего изображение расположено не совсем по центру. Но зато схема очень сильно упростилась в этом месте.
Так же в этом варианте вместо 480х256 уже готово 512х256 ;)

shurik-ua
15.02.2018, 12:50
VHDL на вас нет ))

andreil
15.02.2018, 13:00
VHDL на вас нет ))
Вариант с VHDL тяжело потом перенести в железо. Но на нём я начинал проектирование - можно глянуть историю коммитов (https://github.com/andreili/Orion-128_DE1-SoC/commits/master) ;)

Кстати, "о птичках" - оставлять ли совместимость в ВМ80А или делать на Z80?

По видео - 3 джампера на ширину изображения (384/512) и ещё 2 на широкоформатный вывод (640х480/640х350). Попробую ещё над вертикальными импульсами посидеть с оптимизацией, но там сильно вряд ли...

Error404
15.02.2018, 14:23
Кстати, "о птичках" - оставлять ли совместимость в ВМ80А или делать на Z80?

По видео - 3 джампера на ширину изображения (384/512) и ещё 2 на широкоформатный вывод (640х480/640х350).


Я за Z80 (т.к. кроме прочего он позволяет погнать комп на более высокие частоты и этим полностью утилизировать технологические возможности СРАМины). Какой такт процессора планируется? Реально ли достичь 10М реального (без WAIT) такта (с, к примеру, 55-70 ns SRAM которые широко распространены и в теории легко должны работать на 10МГц)

Джамперы для коммутации 384/512 - в оригинале же вроде мультиплексор управляемый битом порта, а не джамперы?

andreil
15.02.2018, 14:36
Причем тут 74163, если я тебе о 74168 говорил?
Только вот 168-ая есть только 40-ой серии, с частотой до 3МГц. А тут тактирование на 25МГц.

Vslav
15.02.2018, 14:38
Только вот 168-ая есть только 40-ой серии, с частотой до 3МГц. А тут тактирование на 25МГц.
30МГц: http://www.onsemi.com/pub/Collateral/SN74LS168-D.PDF

andreil
15.02.2018, 14:39
Я за Z80 (т.к. кроме прочего он позволяет погнать комп на более высокие частоты и этим полностью утилизировать технологические возможности СРАМины). Какой такт процессора планируется? Реально ли достичь 10М реального (без WAIT) такта (с, к примеру, 55-70 ns SRAM которые широко распространены и в теории легко должны работать на 10МГц)
Пока что не пробовал. Но корка ВМ80А на 10МГц работает :) В текущей схеме, правда, уже не работает - на данной частоте убрал формирование F2.
А память такую медленную не получится использовать - вечером гляну на тайминги обращения CPU к памяти. Там вроде бы 2 такта по 25МГц самый короткий цикл получался, если не 1...

Джамперы для коммутации 384/512 - в оригинале же вроде мультиплексор управляемый битом порта, а не джамперы?
Если мультиплексоры, то можно КП11 поставить без проблем. Но это потребует регистра - потом буду смотреть в эту сторону, пока что внешним переключателем реализовано.

- - - Добавлено - - -


30МГц: http://www.onsemi.com/pub/Collateral/SN74LS168-D.PDF
Ок. Но у себя в продаже не нашел. А с алика долго ждать =/

Error404
15.02.2018, 18:15
Пока что не пробовал. Но корка ВМ80А на 10МГц работает :) В текущей схеме, правда, уже не работает - на данной частоте убрал формирование F2.
А память такую медленную не получится использовать - вечером гляну на тайминги обращения CPU к памяти. Там вроде бы 2 такта по 25МГц самый короткий цикл получался, если не 1...


Ну, не такая и медленная, 55ns это же вроде 18МГц? Просто такая память распространена, дешевая и приличных объемов (512кб на чип). А если ставить от Кэшей 386 (15-20ns), то там максимум 64к на чип.
А как у процессора (реального Z80, не VHDL-корки) тактируемого 10МГц могут получаться тайминги обращения к памяти более чем 10МГц? Проц же синхронный автомат и все фронты завязаны на фронты тактового сигнала? У нас же не 6502 где частота памяти удваивалась к частоте проца.

andreil
15.02.2018, 18:36
Ну, не такая и медленная, 55ns это же вроде 18МГц? Просто такая память распространена, дешевая и приличных объемов (512кб на чип). А если ставить от Кэшей 386 (15-20ns), то там максимум 64к на чип.
А как у процессора (реального Z80, не VHDL-корки) тактируемого 10МГц могут получаться тайминги обращения к памяти более чем 10МГц? Проц же синхронный автомат и все фронты завязаны на фронты тактового сигнала? У нас же не 6502 где частота памяти удваивалась к частоте проца.
Я просто цикл обращения процессора к памяти максимально урезал - оно начинается незадолго до старта импульса F1 (а при частоте 10МГц каждый второй период может быть как раз между предыдущим F2 и F1). Для этого я и ввел этот "виртуальный" CAS по положительному фронту которого как раз и формируется старт обращения к памяти при наличии активных RD или WR.
Ну так-то да, получается хватит и 50ns памяти, а может даже и с 70ns будет стабильно работать - надо проверять. Я думаю "свою" память на плате разведу, а так же сделаю дополнительный разъём для припаивания платы с другой памятью.
Пока что вижу конструктив из 3-х плат, иначе сильно дороже получится изготовление:
1) видео, память;
2) процессор, порты, ПЗУ, клавиатура, ROM-диск;
3) контроллер флоппи (в следующий раз буду заказывать всё равно).

OrionExt
15.02.2018, 19:14
1) видео, память;
2) процессор, порты, ПЗУ, клавиатура, ROM-диск;
3) контроллер флоппи (в следующий раз буду заказывать всё равно).

:v2_thumb: Так это же какой никакой модульный комп получается. Модуль видео вынесен за скобки.

andreil
15.02.2018, 19:38
:v2_thumb: Так это же какой никакой модульный комп получается. Модуль видео вынесен за скобки.
Не совсем - на плате с видео расположена основная память, она разделяемая для обеих частей (CPU, video), а не отдельными банками. У меня вообще 512Кб одним корпусом памяти :)

OrionExt
15.02.2018, 19:55
Не совсем - на плате с видео расположена основная память, она разделяемая для обеих частей (CPU, video), а не отдельными банками. У меня вообще 512Кб одним корпусом памяти :)
Начало положено.

Специфическая архитектура все равно не позволит разбить Орион на канонические модули. Придется дублировать память (первые 128кБ) и некоторые узлы. Но это я о своем:)

Error404
15.02.2018, 21:42
Я просто цикл обращения процессора к памяти максимально урезал - оно начинается незадолго до старта импульса F1 (а при частоте 10МГц каждый второй период может быть как раз между предыдущим F2 и F1). Для этого я и ввел этот "виртуальный" CAS по положительному фронту которого как раз и формируется старт обращения к памяти при наличии активных RD или WR.
Ну так-то да, получается хватит и 50ns памяти, а может даже и с 70ns будет стабильно работать - надо проверять. Я думаю "свою" память на плате разведу, а так же сделаю дополнительный разъём для припаивания платы с другой памятью.
Пока что вижу конструктив из 3-х плат, иначе сильно дороже получится изготовление:
1) видео, память;
2) процессор, порты, ПЗУ, клавиатура, ROM-диск;
3) контроллер флоппи (в следующий раз буду заказывать всё равно).

Я так понимаю, будешь умещаться в платки 10х10? тогда "процессор, порты, ПЗУ, клавиатура, ROM-диск" на одну такую не влезут. Одни три штуки ВВ55 (мы же ставим ДИП) - это уже на половину платки.

andreil
15.02.2018, 22:25
Я так понимаю, будешь умещаться в платки 10х10? тогда "процессор, порты, ПЗУ, клавиатура, ROM-диск" на одну такую не влезут. Одни три штуки ВВ55 (мы же ставим ДИП) - это уже на половину платки.
А я найду в TQFP ;)
Я же и так буду использовать SMD-логику, так что и Z80 будет в таком же исполнении :) Паять мелочевку легко.
И для клавиатуры будет проще вместо ВВ55 сразу мегу ставить, с подправленной прошивкой :) Ну или STMку мелкую - мне с ними намного проще, под рукой их десятки...

Error404
16.02.2018, 00:33
А я найду в TQFP ;)
Я же и так буду использовать SMD-логику, так что и Z80 будет в таком же исполнении :) Паять мелочевку легко.
И для клавиатуры будет проще вместо ВВ55 сразу мегу ставить, с подправленной прошивкой :) Ну или STMку мелкую - мне с ними намного проще, под рукой их десятки...

Z80, да еще на частоты более 10МГц в TQFP стоит примерно на порядок дороже, чем DIP (которые и так у всех есть), по крайней мере на Ali. Зато внутри широких ДИП (которые на панельках - ЦПУ, порты, ROM) можно ставить узкие дип логики и буфера - так что может и в DIP все поместится. Просто изначально я про это не подумал и хотел предложить порты (а там еще и дешифратор области F400..F7FF плюс логика) вынести на отдельную плату где поставить уж до кучи и ЛН1 интерфейса IDE и все нужные разъемы (под которые тоже надо место).

andreil
16.02.2018, 08:34
Посмотрим, сколько места на плате займёт Z80 с обвесом ;)

- - - Добавлено - - -


Z80, да еще на частоты более 10МГц в TQFP стоит примерно на порядок дороже, чем DIP (которые и так у всех есть), по крайней мере на Ali. Зато внутри широких ДИП (которые на панельках - ЦПУ, порты, ROM) можно ставить узкие дип логики и буфера - так что может и в DIP все поместится. Просто изначально я про это не подумал и хотел предложить порты (а там еще и дешифратор области F400..F7FF плюс логика) вынести на отдельную плату где поставить уж до кучи и ЛН1 интерфейса IDE и все нужные разъемы (под которые тоже надо место).
82C55A, QFP44 - $1,51 за корпус.
Z84C0010VEC (10МГц), PLCC44 - $4 за корпус.
Z84C0020AEG (20МГц), LQFP44 - $15,60 за корпус.

Error404
16.02.2018, 10:49
Я про то и говорю: Z84C0020PEC я брал по 5$ за десяток (10 штук). И под QFP логику не расставишь.
Делай уж для всех, в ДИПах. :) А то получится как Спринтер - непаябельный.
Тем более делать придется сразу несколько комплектов чтобы выйти на нормальную цену и соответственно искать компанию.

andreil
16.02.2018, 11:33
Я вот думаю пока что видео-часть переделать ещё основательнее - взять кусок с Орион-Про.

Blade
16.02.2018, 12:01
Я про то и говорю: Z84C0020PEC я брал по 5$ за десяток (10 штук).
С очень большой вероятностью это может оказаться не z84c0020. На али много перемаркированных процессоров.

Error404
16.02.2018, 16:55
С очень большой вероятностью это может оказаться не z84c0020. На али много перемаркированных процессоров.

Да, есть такая вероятность. Но как бы там ни было, на 10М они работали все (более высокие частоты просто негде проверить).
Кстати, у меня серьезной проблемой (влияющей на необходимость подбора процессора, не помогало даже дублирование шин) всегда было питание и общая несинхронность схемотехники Ориона (игры с конденсаторами). Если второе и получится победить синхронными узлами, то питание надо тоже продумать - дроссели, развязки, блокировки, взаимное расположение МСХ, дорожки (а возможно и слои) питания.

andreil
16.02.2018, 18:15
Кстати, у меня серьезной проблемой (влияющей на необходимость подбора процессора, не помогало даже дублирование шин) всегда было питание и общая несинхронность схемотехники Ориона (игры с конденсаторами). Если второе и получится победить синхронными узлами, то питание надо тоже продумать - дроссели, развязки, блокировки, взаимное расположение МСХ, дорожки (а возможно и слои) питания.
Многослойка адекватна по ценам только при серийном производстве плат. А у нас оно не будет выгодным при наших-то масштабах "производства" ;)
Я сейчас в модель встраиваю корку T80, а так же модуль процессора с портами переведу на схемный вариант. Так же туда переместил тактирование процессора с формирователем CAS.

Error404
16.02.2018, 18:23
Многослойка адекватна по ценам только при серийном производстве плат. А у нас оно не будет выгодным при наших-то масштабах "производства" ;)


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

OrionExt
16.02.2018, 18:32
Тут одно понятно классика (плата 90г.) могет (без РУ7). Тут другое огорчает. Некий господин без понятия подумал что тоже могет, ай нет.

Пора уже закончить рисовать плату Ориона в паинте (спринт лаеит). И тем более не адекватными художниками.

И вообще идея andreil, может и не пойдет в массы. Направление верное, по мне.

andreil
16.02.2018, 18:35
Значит, остается рациональное размещение узлов (снижающее сложность трассировки, а значит и количество и плотность дорожек), и заливку пустых пространств питанием (образуя псевдослои на двустронней плате) - такое трассировщики умеют делать.
Я всё буду трассировать вручную ;)
И да - мелкая логика у меня будет в SO/SOIC, часть будет одногейтовая (1 элемент И, например) в мелких корпусах - этого добра хватает, размеры сэкономит очень сильно. Да и места для дорожек без отверстий под ноги намного больше выходит. Может ещё и маску для пасты закажу сразу на обе стороны платы...

- - - Добавлено - - -


Тут одно понятно классика (плата 90г.) могет (без РУ7). Тут другое огорчает. Некий господин без понятия подумал что тоже могет, ай нет.

Пора уже закончить рисовать плату Ориона в паинте (спринт лаеит). И тем более не адекватными художниками.

И вообще идея andreil, может и не пойдет в массы. Направление верное, по мне.
Я в лайоутах не рисую. Только в KiCAD'е. Там рисуется схема, к ней сопоставляются детали и по всему этому чертится плата. Ошибиться при правильной схеме невозможно. А схему я проверяю на FPGA на данный момент, добивая её до адекватного состояния.

OrionExt
16.02.2018, 18:42
Вот не буду расшифровать, хотя то что касается меня (кто читал и так понятно, новотельного буржуя). О платах.

Error404
16.02.2018, 18:43
И да - мелкая логика у меня будет в SO/SOIC, часть будет одногейтовая (1 элемент И, например) в мелких корпусах - этого добра хватает, размеры сэкономит очень сильно.


Тут могу повторить что говорил в твоем проекте "Орион ATX" - в таком конструктиве мало кто захочет участвовать. Ну, как говорится "хозяин-барин".

andreil
16.02.2018, 18:44
Тут могу повторить что говорил в твоем проекте "Орион ATX" - в таком конструктиве мало кто захочет участвовать. Ну, как говорится "хозяин-барин".
В курсе. Я его и делаю только для себя ;) Если кому-то нужны будут оставшиеся платки - могу потом просто раздать их.

OrionExt
16.02.2018, 18:48
Разработка хотя бы на месяц (с утра до вечера). Делается для себя любимого. И это отлично. А у кого нет в планаре Z80 это его проблемы.

И вообще удивительно. Не советуйте. А помогайте.

andreil
16.02.2018, 18:52
Разработка хотя бы на месяц (с утра до вечера). Делается для себя любимого. И это отлично. А у кого нет в планаре Z80 это его проблемы.
А всё равно все пишут- "нам такое не надо".

И вообще удивительно. Не советуйте. А помогайте.
Ок...

OrionExt
16.02.2018, 18:54
:)

andreil
16.02.2018, 18:56
Последний вопрос для знающих - какие доделки стоит включать? Посмотрел схему Орион-Про, там много чего есть из дополнений, которые и софтом поддерживаются, так что опираясь на него и буду делать в своём варианте.

PS: И да, признаю - в то время я переоценил свои возможности (да блин, банально молодым ещё был вообще, 19 лет только). Но и отрыв от компа с интернетом на 3 года очень повлиял - поехал на учёбу, а денег на хоть какой-то ноут не было, про стационарник вообще молчу. По соседям ходил, посидеть за компом =/

andreil
18.02.2018, 12:24
Для тех, кто говорил о асинхронности, полностью синхронный формирователь тактовых частот (2.5/5/10МГц из 20МГц) и сигнала обращения к памяти:
https://prnt.sc/igc35yhttps://image.prntscr.com/image/zJW5igc1Syqq2mcb_Dqcmg.png

LeoN65816
19.02.2018, 01:06
Если тебе из 20 МГц надо получить 2.5/5/10 МГц, то зачем тебе декадный делитель вообще?
F1 и F2 должны быть в противофазе (для натурального ВМ80А [а ведь ты же собираешься делать на рассыпухе с натуральным процом]), я правильно понимаю?

HardWareMan
19.02.2018, 08:15
F1 и F2 должны быть в противофазе (для натурального ВМ80А [а ведь ты же собираешься делать на рассыпухе с натуральным процом]), я правильно понимаю?
Неправильно. F1 не меандр. И есть нормы на расположение фронтов. Вот официальная замена ГФ24 (выходы инверсные для подключения выходных буферов на 12в):
http://jpegshare.net/images/c4/71/c471b87c3c66bfedfbcae30068a19622.png

andreil
22.02.2018, 09:58
Если тебе из 20 МГц надо получить 2.5/5/10 МГц, то зачем тебе декадный делитель вообще?
F1 и F2 должны быть в противофазе (для натурального ВМ80А [а ведь ты же собираешься делать на рассыпухе с натуральным процом]), я правильно понимаю?
У меня на входе 25МГц от видео-части, потому и декадный делитель. И в качестве процессора будет Z80 на 20МГц (или на 10МГц, если потянет узкий фронт такта).
Сейчас очень сильно переработал ТГ, что бы избавиться от возможных глитчей на защёлках видео-выхода. В сухом остатке имею честные 10МГц на корке T80 (в режиме Z80) без WAIT'ов. По копированию из видеопамяти - при ширине банок в 16 бит можно сделать видеовывод из 4-х плоскостей, как в Орион-Про.

https://image.prntscr.com/image/XehzAEf5SyCKT-ycOISthA.png
Так же формирователь видео-сигнала переработал, опираясь на решения в Про-шке, с использованием ИР10, которые гораздо доступнее ИР13. Жду память для тестов на реальных таймингах, скоро уже придёт.
https://image.prntscr.com/image/kUeKnZ9iQTiVDbj3ofrExw.png

Error404
22.02.2018, 13:13
По копированию из видеопамяти - при ширине банок в 16 бит можно сделать видеовывод из 4-х плоскостей, как в Орион-Про.


И сделай. 3/4 плоскостной режим + порт FC (порт покраски экрана константой RGBIRGBI для монохромного режима). Получится так:



ОРГАНИЗАЦИЯ ЭКРАННОЙ ПАМЯТИ Orion-PRO, Ориона-128
-------------------------------------------------

Экранная память располагается в 0 и 1 страницах ОЗУ, при-
чем количество экранов и распределение сегментов в них зависит
от текущего цветового режима, задаваемого разрядами порта 0F8H:

D4 D3 D2 D1 D0
------------------
0 x 0 0 0 - монохромный, палитра 1
0 x 0 0 1 - монохромный, палитра 2
0 x 0 1 x - запрет видеосигнала
0 x 1 0 0 - 2-битный (4-цветный), палитра 1
0 x 1 0 1 - 2-битный (4-цветный), палитра 2
0 x 1 1 x - 16-цветный с групповым кодированием
0 1 1 1 x - псевдоцветной (цвет - в порт 0FCH)
1 x 0 x x - 3-битный (8-цветный RGB)
1 x 1 x x - 4-битный (16-цветный RGBI)

Для Ориона-128 то же, но только D0..D2. Режимы от D3,D4 недоступны

В монохромном режиме палитре 1 соответствует комбинация
цветов - (черный, зеленый), палитре 2 - (белый, зеленый). В
4-цветном (2-х битовом) режиме палитре 1 соответствуют цвета -
(черный, синий, зеленый, красный), палитре 2 - (белый, синий,
зеленый, красный).
Код палитры для псевдоцветного режима записывается в порт
с адресом 0FCH.
Выбор на отображение одного из 4-х экранов выполняется пу-
тем записи номера экрана в порт 0FAH:

D0 \ номер экрана
D1 /
D6 - выключение регенерации ОЗУ
D7 - включение широкого экрана

Разряды D2-D5 являются резервными.

Если разряд D7 установлен в единицу, то ширина экрана сос-
тавляет 512 точек (64 байта), что при высоте 256 байт соответс-
твует объему памяти 16 Кбайт. В противном случае экранная плос-
кость ОЗУ имеет ширину 384 точки (48 байт) и занимает объем 12
Кбайт.
В 3-х битном и 4-х битном (EGA-режим) цветовых режимах до-
пускается использование только двух экранов, поэтому разряд D0
порта 0FAH игнорируется.
Рассмотрим распределение сегментов экранного ОЗУ в различ-
ных цветовых режимах.

1.2.3 МОНОХРОМНЫЙ И ПСЕВДОЦВЕТНОЙ РЕЖИМЫ
----------------------------------------

В монохромном и псевдоцветном режимах возможно использова-
ние до 4-х экранов, занимающих только сегменты 0-й страницы
ОЗУ:

Стр.0 Экран 12 К Экран 16 К
--------¬ ------------ ------------
Экран 0 ->¦ 3 ¦ C000H..EFFFH C000H..FFFFH
¦=======¦
Экран 1 ->¦ 2 ¦ 8000H..AFFFH 8000H..BFFFH
¦=======¦
Экран 2 ->¦ 1 ¦ 4000H..6FFFH 4000H..7FFFH
¦=======¦
Экран 3 ->¦ 0 ¦ 0000H..2FFFH 0000H..3FFFH
L--------

В монохромном режиме единичному значению некоторого бита
экранного сегмента ОЗУ соответствует засветка изображаемой точ-
ки, нулевому - гашение.
В псевдоцветном режиме цвет отображаемых точек зависит от
кода палитры, записанного в порт 0FCH. Старшие 4 бита значения
этого порта определяют один из 16 цветов фона (для погашенных
точек), младшие 4 бита - один из 16 цветов переднего плана (для
засвеченных точек).
Заметим, что при широком экране-0 область 0F000H..0FFFFH
экрана (не путать с системной областью 0F000H..0FFFFH) доступна
только через окно. Прямой доступ к экрану возможен только по
адресам 0C000-0EFFFH. Это относится ко всем цветовым режимам.


1.2.4. 4-ЦВЕТНЫЙ РЕЖИМ
-----------------------

В 4-цветном (2-битном) режиме цвет каждой отображаемой
точки зависит от соответствующих битов двух экранных плоскостей
(сегментов), находящихся в страницах 0 и 1 ОЗУ:


Стр.0 Стр.1
--------T-------¬
Экран 0 ->¦ 3 ¦ 7 ¦
¦=======+=======¦
Экран 1 ->¦ 2 ¦ 6 ¦
¦=======+=======¦
Экран 2 ->¦ 1 ¦ 5 ¦
¦=======+=======¦
Экран 3 ->¦ 0 ¦ 4 ¦
L-------+--------
L--¬ ----

0 0 -> черный (белый)
0 1 -> красный
1 0 -> зеленый
1 1 -> синий


1.2.5. 8-ЦВЕТНЫЙ и 16-ЦВЕТНЫЙ РЕЖИМЫ ОРИОН-ПРО
-----------------------------------------------

Это новый графический режим. Функционально он тождествен
EGA режиму на IBM PC AT (был широко распространен на 286 моде-
лях). В 8-цветном (3-битном) и 16-цветном (4-битном) режимах
для формирования отображаемой точки в каждом из двух экранов
используются соответственно 3 и 4 плоскости экранного ОЗУ:

Стр.0 Стр.1
--------T-------¬
¦ 3 (G)¦ 7 (I)¦
Экран 0 ->+-------+-------+
¦ 2 (R)¦ 6 (B)¦
¦=======+=======¦
¦ 1 (G)¦ 5 (I)¦
Экран 1 ->+-------+-------+
¦ 0 (R)¦ 4 (B)¦
L-------+--------

Сегментам 3 и 1 соответствует зеленый цвет (G), 2 и 0 -
красный (R), 6 и 4 - синий (B), 7 и 5 (в 3-битном режиме не ис-
пользуются) - управление яркостью (I).

Путем записи комбинации битов в соответствующие сегменты
экрана можно получить точку заданного цвета.


1.2.6. РЕЖИМ С ГРУППОВЫМ КОДИРОВАНИЕМ ЦВЕТА
-------------------------------------------

В 16-цветном режиме с групповым кодированием каждый из 4-х
экранов формируется из содержимого двух сегментов памяти: из
плоскости изображения (0 страница ОЗУ) и плоскости цветовых ат-
рибутов (1 страница ОЗУ), причем восьми соседним точкам плос-
кости изображения, расположенным в пределах одного байта, соот-
ветствует один байт из плоскости цветовых атрибутов.

Старшие 4 бита в байте цветового атрибута определяют цвет
фона (для погашенных точек), младшие 4 бита - цвет переднего
плана (для засвеченных точек) в пределах одного экранного бай-
та.

Стр.0 Стр.1
(изобр) (цвет)
--------T-------¬
Экран 0 ->¦ 3 ¦ 7 ¦
¦=======+=======¦
Экран 1 ->¦ 2 ¦ 6 ¦
¦=======+=======¦
Экран 2 ->¦ 1 ¦ 5 ¦
¦=======+=======¦
Экран 3 ->¦ 0 ¦ 4 ¦
L-------+--------

Для всех цветовых режимов действует ограничение на исполь-
зование широкого экрана с номером 0, описанное в П.1.2.3.
Следует помнить, что экраны аппаратно привязаны к конкрет-
ным сегментам ОЗУ, а не к окнам, т.е. отображение информации
экрана не зависит от рабочей страницы ОЗУ и включения / выклю-
чения окон.



Порты F8 и FA делай полными (все по 8 разрядов), т.к. нам еще нужен будет F8.D6 чтобы включать символьный режим экрана и FA.D6..D3 для номера фонта. Позже добавим ПЗУ 27W512 между памятью графики и выводящим графику регистром (половина ПЗУ прошита кодом "вход=выход" {F8.D6=A15}, половина наборами шрифтов {FA.D6..D3}=A14..A11 - выбор шрифта) и зануление младшего адреса видео-ОЗУ в режиме символьного экрана кратное 8/16 (F8.D5=0/1) строкам (чтобы выводить символы из ПЗУ).

OrionExt
22.02.2018, 14:03
Оно то УCЕ охота добавить, а как же несколько платок 100х100:)

andreil
22.02.2018, 15:53
Оно то УCЕ охота добавить, а как же несколько платок 100х100:)
На плате с процессором места ДОФИГА...
Пока что не разводил, просто прикинул по корпусам. Нужно сперва видео-модуль с реальной памятью проверить, а так же блок с процессором пока что допиливаю - что-то из схемы Z80 Card 2 не так сделал, в итоге кроме TEST128 ничего не работает (testZ80 включает видеорежим 2 и тишина...).

- - - Добавлено - - -


Порты F8 и FA делай полными (все по 8 разрядов), т.к. нам еще нужен будет F8.D6 чтобы включать символьный режим экрана и FA.D6..D3 для номера фонта. Позже добавим ПЗУ 27W512 между памятью графики и выводящим графику регистром (половина ПЗУ прошита кодом "вход=выход" {F8.D6=A15}, половина наборами шрифтов {FA.D6..D3}=A14..A11 - выбор шрифта) и зануление младшего адреса видео-ОЗУ в режиме символьного экрана кратное 8/16 (F8.D5=0/1) строкам (чтобы выводить символы из ПЗУ).
"Полные" порты - не проблема.
Проблема появляется при наличии символьного экрана - или "убить" часть памяти впустую, или сделать адекватный участок под "недоэкран" и на адресацию памяти придётся вешать КП12 (сейчас - КП11). что бы можно было правильно организовать переключение сканируемых участков.

Error404
22.02.2018, 16:19
"Полные" порты - не проблема.
Проблема появляется при наличии символьного экрана - или "убить" часть памяти впустую, или сделать адекватный участок под "недоэкран" и на адресацию памяти придётся вешать КП12 (сейчас - КП11). что бы можно было правильно организовать переключение сканируемых участков.

Я за экран с потерями памяти, когда значимыми в видеопамяти являются строки кратные 8 (16). Ну как с потерями, память не теряется (в некратных строках процессор по-прежнему может хранить какие-то данные даже при символьном экране, некратные адреса же надо "занулять" только в цикле обращения видеоадаптера/регенерации). А то, что в 16к получается впихнуть только 1 экран размером 2к (1к) символов, так это плата за то, что эту же схему (а значит и ПО ее поддерживающее) можно "малой кровью" (т.е. не перепахиваю всю плату) реализовать и на обычных Орионах. Совместимость и реализуемость - она дороже красивости единичного специализированного решения ИМХО.

OrionExt
22.02.2018, 16:27
Error404, не торопите автора топика.

andreil
22.02.2018, 16:37
Error404, не торопите автора топика.
Это да, я пока ещё добиваю интеграцию Z80, были косяки в схеме.
Вот как добьюсь работы тестов и ORDOS, так и займусь модификацией видео-части.

А по платкам 100х100 - для видео это только на SMD-комплектующих получится, с учётом всех "хотелок" ;) Посмотрим, как оно у меня получится ещё вообще.

andreil
23.02.2018, 10:52
У кого есть схемы по Z80-Card-II, киньте их тут ;)
Тест застопорился на RAM protect - никак не могу найти схему для этого узла =/

OrionExt
23.02.2018, 11:34
При переезде на реальный Z80 могут возникнуть трудности. Ведь корка t80 по растактовке далека от оригинала.
Я пробовал еще две корки Z80 с более манием приближенной растактовкой к реалу.

Корка az80 (http://baltazarstudios.com/z80-cpu/). В принципе работает, только у меня не получилось ее разогнать по частоте.

Корка T80pa (https://github.com/MiSTer-devel/ZX-Spectrum_MISTer/tree/master/t80) (модернизированная корка t80). Гонится на ура и растактовка значительно ближе к реалу.



У кого есть схемы по Z80-Card-II, киньте их тут ;)
Качество не очень, но все же лучше чем ничего. Клик (https://drive.google.com/open?id=1trVSFXa56qdmi6wKv-y1X5fPODlGJWY2).

Error404
23.02.2018, 12:09
У кого есть схемы по Z80-Card-II, киньте их тут ;)
Тест застопорился на RAM protect - никак не могу найти схему для этого узла =/

Базовая схема (с ней ты уже разобрался AFAIK):

http://www.emuverse.ru/w/images/a/a5/Z80CardII.png
http://www.emuverse.ru/w/images/a/a5/Z80CardII.png

Вот тут чего-то по RAM-protect есть в конце странички (см. вложение этого поста), а также ЕМНИП описано где-то в одном из пунктов в методике из вложения вот этого поста (http://zx-pk.ru/threads/10734-orion-128-pervye-opyty-postrojki-kompyutera-na-plis-ot-ewgeny7.html?p=180097&viewfull=1#post180097)

andreil
23.02.2018, 12:17
Базовая схема (с ней ты уже разобрался AFAIK):
Вот тут чего-то по RAM-protect есть в конце странички (см. вложение этого поста), а также ЕМНИП описано где-то в одном из пунктов в методике из вложения вот этого поста (http://zx-pk.ru/threads/10734-orion-128-pervye-opyty-postrojki-kompyutera-na-plis-ot-ewgeny7.html?p=180097&viewfull=1#post180097)
Да, с этим разобрался. И RAM-protect в этой схеме есть, но тест не проходит этот пункт - буду смотреть причину по графикам...

barsik
23.02.2018, 12:32
У кого есть схемы по Z80-Card-II, киньте их тут ;)
Тест застопорился на RAM protect - никак не могу найти схему для этого узла =/
Вариантов было много. Суть в том, чтобы запретить сигналы /WE на динамических ОЗУ сигналом выборки ПЗУ+В/У. Это сигнал DD8.3/8, он подается на DD29/1 чтобы запрещать буфера ОЗУ. Этим же сигналом надо запрещать и /WE. Т.е при выборке ПЗУ + В/У надо запрещать и вторую половину дешифратора DD29. У меня это сделано вот так. Может и не оптимально, но работало.

Кстати, ещё нужна доработка отключающая ПЗУ и В/У вообще (FULL RAM). Управление этим делается уже не портом FB, а портом FC по биту D6 с помощью ЛИ1 включённого в разрыв цепи на входе DD14.2/13.

andreil
23.02.2018, 12:40
Кстати, ещё нужна доработка отключающая ПЗУ и В/У вообще (FULL RAM). Управление этим делается уже не портом FB (там уже нет свободных битов), а портом FC по биту D6 с помощью ЛИ1 включённого в разрыв цепи на входе DD14.2/13. Но это используется в очень небольшом числе игр, кажется только конвертированных от Spectrum-128.
Это есть в Z80-Card-II - бит 5 порта FB ;)
А вот за первую часть спасибо - буду пробовать. У меня там часть очень сильно отличается, так что надо думать...

barsik
23.02.2018, 13:07
Точно. 20 лет не смотрел на схему Z80CARD-II и всё про неё забыл, т.к пользуюсь вариантом "голый Z80", т.к он более распространён, а Z80CARD-II была нужна только для игр.

Это я просто нашёл какую-то схему, и сам удивился, что там использован порт FC. А сейчас сообразил, что это мой личный вариант отключения ПЗУ+В/У для варианта голый Z80, т.к в моих ОРИОНАХ нет регистра на порт FB, зато стоит ТМ9 на порт FC, которым я переключаю банки ПЗУ (2 банки по 2 кб в виде двух напаянных друг на друга РФ2).

Кстати две банки ПЗУ РФ2 стояли ещё в Z80CARD-I (которая решала цветовую проблему и проблему загрузки OS без ROM-диска). Но т.к это оказалось удобно, то я использовал это и впоследствии. Во второе ПЗУ при использовании DOS в банке 0, я обычно ставлю ПЗУ с фонтом, это позволяет не тратить ценное ОЗУ банки 0. Также второе ПЗУ необходимо для эмулятора РК86 на ОРИОНЕ. Кроме того у меня открыто ОЗУ в области F600...F6FF, что очень удобно (расход 1 вентиль из ЛЛ1).

Кстати, как Вы программно переключаете Турбо/Нетурбо? Стандартов на это кажется не было. Сам я обычно использовал бесплатный STA FB00, не то битом D7, не то D0. Программное или аппаратное переключение в Нетурбо при работе с КНГМД на ВГ93 желательно, а при РК-КНГМД просто необходимо. При 10 МГЦ также надо переключаться на Нетурбо при обращении в порты, иначе ВВ55 не тянут (без WAIT).

А не хотите сделать режим SuperFont 768*256, такой же как в компьютере "Искра-1080 Тарту". Текст с символами 8*10 в этом режиме выглядит отлично, особенно, если отплющить экран заменой кварца с 10 МГЦ на 8 МГЦ, что разворачивает растр на весь экран.

Режим отключения ПЗУ+В/У позволил поднять на 4 кб уровень TPA в CP/M, хотя толку от этого оказалось мало. Для самых мощных компиляторов CP/M требуется TPA в 62 кб, а это можно сделать только перенеся весь код CP/M в другую банку, оставив в банке CP/M только входы в BDOS/BIOS.

andreil
23.02.2018, 13:12
Кстати, как Вы программно переключаете Турбо/Нетурбо. Стандартов на это кажется не было. Сам я обычно использовал бесплатный STA FB00, не то битом D7, не то D0. Программное или аппаратное переключение в Нетурбо при работе с КНГМД на ВГ93 желательно, а при РК-КНГМД просто необходимо. При 10 МГЦ также надо переключаться на Нетурбо при обращении в порты, иначе ВВ55 не тянут (без WAIT).
Бит 7 порта FB в Z80-Card-II уже занят флагом MZ ;)
Пока что это у меня сделано чисто аппаратно.
По поводу PIO - я вот думаю заменить их теми же ATMEGA8 или ещё чем-либо аналогичным - достать их намного проще, а порт клавиатуры тогда уместиться сразу в 1 корпус. Но это пока что только идея.
Или сделать цепочку формирования WAIT для PIO + ВГ93 - но это сильно позже.

А не хотите сделать режим SuperFont 768*256, такой же как в компьютере ТАРТУ-256. Расход деталей две КП11.
Сильно много видеорежимов - плохо для схемы. И так уже "жирная" получается видео-часть ;)

barsik
23.02.2018, 13:37
STA FB00 и OUT (FB),A это разные команды и попадают в разные порты, так что сигнал MZ (mode Z80) не пострадает. STA FB00 (цепь 91) это бесплатный и потому очень удобный строб на запись (т.к для его использования не нужна доп.логика, достаточно добавить лишь сам регистр).

Точно также OUT FC, FD, FE, FF это совсем не то же самое что STA FC00, FD00, FE00, FF00. Т.к в ОРИОНЕ упрощенный дешифратор системных регистров, то STA FC00 это то же самое, что и STA F800. И так далее, - запись на FD00, FE00, FF00 попадает в F900, FA00, FB00. При нужде удобно добавить немного логики и получить ещё 4 строба на запись по STA FC00, FD00, FE00, FF00.

andreil
23.02.2018, 14:52
Кстати, по времянкам - INT формируется от кадрового синхроимпульса. В оригинале он 50Гц, но у меня - 60/70Гц (зависит от выхода - 4:3 или 16:9).
Это на что-либо влияет существенно?

- - - Добавлено - - -

Текущий вариант схем в Квартусе:
1) Видео-модуль (https://image.prntscr.com/image/pGZSOt7xT5WivDsVyMS88g.jpg);
2) Процессорный модуль (https://image.prntscr.com/image/YGZ5teRuTGqCDpZZHK8qTQ.jpg).
Изменения в схеме очень значительные. по сравнению с оригиналом...

barsik
23.02.2018, 15:21
у меня такт на входе INT - 60/70 Гц, а в оригинале 50 Гц. Это на что-либо влияет существенно?
Теоретически, некоторые игры, которые привязаны к прерываниям станут работать немного быстрее.

Хуже, что тогда в ZX-играх, которые для того, чтобы не было мерцаний при движениях спрайтов, двигают их во время гашения по кадрам (во время обратного хода луча), это время гашения сократится. Возможно в некоторых играх возникнут мерцания, но из-за этого не стоит заморачиваться, т.к конвертированных ZX-игр мало, а конверсия все-равно изменила все времянки.

andreil
23.02.2018, 15:27
Дома с клавиатурой попробую запустить тест на быстродействие ;)
Так же напаяю панельку для реального Z80 и буду тестить с ним уже. Сегодня-завтра ещё и память будет на руках...

andreil
26.02.2018, 09:20
Вопрос по расширению памяти.
Если используется ТОЛЬКО Z80, то коммутация банок памяти идёт всё равно через 2 порта (F9 + FB)?
Просто сижу и думаю, как правильно внедрить расширение памяти, если в каждом банке по 256/512Кб памяти сразу... По схеме расширения для РУ7 - используется только порт F9, то есть оригинальная схема совместима только с ВМ80 и режимом MZ=0 для Z80.
По схеме получается, что нужны сигналы ADDR[16..19] для такого расширения. ADDR[16..17] формируются штатно обоими портами, а вот куда "впихнуть" два старших адреса - не понятно. Для порта F9 всё понятно - заменить его на ИР23 и делов-то. А Вот с FB всё сложнее - там свободны только биты 4 и 7, но поддерживается ли такое софтом? Если его расширять, то для портов FB и F8 будет использоваться ИР35 (нужен регистр с поддержкой сброса, других не нашел в либе).

Denn
26.02.2018, 10:32
Для порта F9 всё понятно - заменить его на ИР23 и делов-то.

ИР35 надо, ибо при сбросе должна устанавливаться нулевая банка.

andreil
26.02.2018, 10:48
ИР35 надо, ибо при сбросе должна устанавливаться нулевая банка.
В оригинальной схеме не сбрасывается - там используются обыкновенные латчи без сброса, а все Мониторы при старте сразу прописывают дефолтное значение в порт.

OrionExt
26.02.2018, 11:07
А Вот с FB всё сложнее - там свободны только биты 4 и 7, но поддерживается ли такое софтом?
Это о ПРО что ли речь? В Орионе + Z80 кард один бит 4 (резерв для bank select) FB порта в резерве.


По схеме расширения для РУ7 - используется только порт F9, то есть оригинальная схема совместима только с ВМ80 и режимом MZ=0 для Z80.
Как так, а MB0 и MB1, они выходят наружу.

А так да Z80 кард рассчитана только на 256кБ.

andreil
26.02.2018, 11:30
Это о ПРО что ли речь? В Орионе + Z80 кард один бит 4 (резерв для bank select) FB порта в резерве.
Нет, речь о Z80-Card-II.

Как так, а MB0 и MB1, они выходят наружу.
MB0, MB1 - это и есть ADDR[16..17] для памяти.

А так да Z80 кард рассчитана только на 256кБ.
Плохо, надо бы расширить хотя бы до 512Кб... А для активации 4-ого бита микросхему порта FB так же следует заменить на ИР35 - заодно освободится 1 элемент ТМ2, а порт звука перенесётся на другую ТМ2, где как раз половинка свободная.

Denn
26.02.2018, 11:44
В оригинальной схеме не сбрасывается - там используются обыкновенные латчи без сброса, а все Мониторы при старте сразу прописывают дефолтное значение в порт.

Точно! Вот это прикол. Схалявили авторы с половинкой ТМ7 :)

OrionExt
26.02.2018, 11:49
Плохо, надо бы расширить хотя бы до 512Кб... А для активации 4-ого бита микросхему порта FB так же следует заменить на ИР35
По хорошему надо до 512кБ расширить. Там (Z80 кард) кроме замены регистра, надо еще, что то с мультиплексором адреса делать.

Хотя, а надо ли? Софта я не встречал. Х.з.

Denn
26.02.2018, 12:31
Хотя, а надо ли? Софта я не встречал. Х.з.

Самые больные вопросы орионинга :)

П.С. допустим, написать софт не проблема... но кому он нужен?

andreil
26.02.2018, 12:40
По хорошему надо до 512кБ расширить. Там (Z80 кард) кроме замены регистра, надо еще, что то с мультиплексором адреса делать.

Хотя, а надо ли? Софта я не встречал. Х.з.
Пытался понять, как это сделано в Орон-Про.
Порт F9 там расширен до 4-х бит (D114, ТМ8). Его сигналы мультиплексируются на D36 с данными от BA D80 (порт P8, часть 0 - ADDR[0..1]="00") по сигналу 1C8 (аналог MZ в карте, как понял). И тут встаёт вопрос о совместимости такого решения...
В режиме "Про" результат этого смешения дальше мешается ещё раз - с сигналами от порта P4 (D55). Это нас не интересует :)

- - - Добавлено - - -


Самые больные вопросы орионинга :)

П.С. допустим, написать софт не проблема... но кому он нужен?
Я пока что реализую "нечто", максимально близкое к оригиналу.
Если с Z80-Card не рассчитывалось столько памяти использовать, то её и не будет...

Denn
26.02.2018, 12:51
Я пока что реализую "нечто", максимально близкое к оригиналу.
Если с Z80-Card не рассчитывалось столько памяти использовать, то её и не будет...

Я бы ориентировался на Орион-ПРО, а не на О-128. Особенно, если планируется Z80. Он более универсальный и более "правильный", имхо. Также есть штатный режим совместимости с "Орион-128" с тактом "ВМ80".

andreil
26.02.2018, 12:57
Я бы ориентировался на Орион-ПРО, а не на О-128. Особенно, если планируется Z80. Он более универсальный и более "правильный", имхо. Также есть штатный режим совместимости с "Орион-128" с тактом "ВМ80".
Возможно и так, но по части портов там вообще ужас =/ Почти все собраны на ВВ55, что не очень-то и упрощает понимание работы.

Error404
26.02.2018, 13:17
Сообщение от OrionExt Посмотреть сообщение
А так да Z80 кард рассчитана только на 256кБ.

Нет, речь о Z80-Card-II.
MB0, MB1 - это и есть ADDR[16..17] для памяти.
Плохо, надо бы расширить хотя бы до 512Кб... А для активации 4-ого бита микросхему порта FB так же следует заменить на ИР35 - заодно освободится 1 элемент ТМ2, а порт звука перенесётся на другую ТМ2, где как раз половинка свободная.

D4 штатно планировался для расширения обслуживаемой диспетчером 16к памяти до 512кб. Однако есть пара НО:
- продолжая критику можно сказать, что "а как же 1024кб?" (я кстати за 1024кб уже в базовом варианте, т.е. 2 ОЗУшки по 512, удобно дающие 2 плоскости "графика/цвет") или "а как же 2048кб" (ОрионПРО ЕМНИП в пределе диспетчерами 16к адресует до 2Mb хотя физически на плате только поддержка для 512). Т.е. сколько ни поставь, всегда будет мало, а потому и штатные 256кб Z80CardII это уже хлеб, особенно учитывая что диспетчер 16кб срабатывает из любой банки включенной портом F9, т.е. даже если у тебя 16Мб ОЗУ (максимум для pF9), то в любой банке к её 60к/64к можно организовать оверлей как минимум еще в 256к портом FB из четырех первых страниц (и я планировал это использовать в UZIX для shared library типа libc.so), или из любой страницы напрямую писать в экран, или "накрыть экран кодом" и комфортно работать в странице 0 включив экран с 0000h.

- по расширению битом D4 достоверно знаю что многие адаптации игр от ZX этот бит ставят некорректно и когда я добавлял в своем эмуляторе эмуляцию этого бита (т.е. расширял диспетчер по 16к на пространство 512кб), они переставали работать. Конечно, это можно отловить и поправить, но надо ли и кто этим будет заниматься? А те игры это и по сею пору едиственное что на Орионе чего-то стоит.

Добавлять порты ПРО наверное можно, если это не сильно загромоздит (придется ставить ВВ55 т.к. по стандарту ПРО из портов еще и читать их состояние можно), но пока весь интересный софт обходится без них.

- - - Добавлено - - -

Что мне в портах ПРО не нравится, так это что они сделали только 3 сегмента по 16к (0000, 4000, 8000). Все другие ПК с похожими режимами делали по 4 окна (+C000), а у ПРО приходится комбинировать и диспетчер по 16к и порт F9 для полной функциональности (что создает ощущение зоопарка и того что проектировщики понятия не имели как они это будут использовать) при этом если у Z80CardII упрощение происходило из предельного аппаратного минимализма, то на аэродроме ПРО с его полутора сотнями корпусов эти недоработки довольно сложно понять.

Denn
26.02.2018, 13:31
Возможно и так, но по части портов там вообще ужас =/ Почти все собраны на ВВ55, что не очень-то и упрощает понимание работы.

Есть такая фигня. Однако, они доставаемые, стоят копейки, так что проблемы не вижу. При желании "односторонние" порты (типа джамперов конфига) можно смело заменить на АП6, а линии "только на запись" - на ИР35. Зато получаем отлаженную платформу с корректным Z80 "без секаса", прерываниями, диспетчером и прочими плюшками. Но самое главное, имхо, это конечно 10 МГц и 512к ОЗУ.

andreil
26.02.2018, 13:43
Есть такая фигня. Однако, они доставаемые, стоят копейки, так что проблемы не вижу. При желании "односторонние" порты (типа джамперов конфига) можно смело заменить на АП6, а линии "только на запись" - на ИР35. Зато получаем отлаженную платформу с корректным Z80 "без секаса", прерываниями, диспетчером и прочими плюшками. Но самое главное, имхо, это конечно 10 МГц и 512к ОЗУ.
Ну, 100% 10МГц у меня уже и так есть :) А вот с портами - да, придётся передирать с Прошки, судя по всему, как и участок с Z80...
Я у себя буду такие ВВ55 (https://ru.aliexpress.com/item/M82C55AFP2-M82C55-M5M82C55AFP2-82C55-M82C55AFP-SSOP40-5-Aliexpress/32841568152.html?spm=a2g0s.9042311.0.0.MooR84) ставить на тестовых платках ;)

Denn
26.02.2018, 13:48
Я у себя буду такие ВВ55 (https://ru.aliexpress.com/item/M82C55AFP2-M82C55-M5M82C55AFP2-82C55-M82C55AFP-SSOP40-5-Aliexpress/32841568152.html?spm=a2g0s.9042311.0.0.MooR84) ставить на тестовых платках ;)

Тем более. Однако, их паябельность в домашних условиях под вопросом ((

andreil
26.02.2018, 14:21
Тем более. Однако, их паябельность в домашних условиях под вопросом ((
Поверь, паябельность у них высочайшая, по сравнению с привычными мне TQFP с шагом 0,5мм. главное - жало нормальное, 1 с узкой "лопаточкой" для пайки и 1 "игольчатое" для ликвидации соплей.
А тут шаг 0,8 - более чем нормально.

- - - Добавлено - - -

Блин, опять что-то перемудрил в пятницу - Z80-Test опять не принимает диспетчер памяти =/
Есть у кого-либо исходники этого теста, что бы понять как оно должно работать?

andreil
26.02.2018, 15:28
С портами на ВВ55 про честные 10МГц можно забыть. Думаю, даже 82С55 т.е. с индексом С - не потянут. Для этого на ПРО при обращении к ВВ55 вводятся такты WAIT (не помню точно - то ли 4 то ли 8 тактов). Самый главный вопрос - стоит воспроизводить порты (причем с существенными тратами) которыми никто не пользуется?
Ну, оно даже немного удобно - 1 корпус сразу на 3 порта.
Но если нужна будет скорость, то да - надо ставить те же ИР35 с дополнительными дешифраторами (один на всё, но нужен, хотя бы на мелкой логике, "2-в-4").

Вот схема модуля. (https://image.prntscr.com/image/Pq4ed8WOT7WyRtTnaIaRew.jpg) Что-то я намудрил и диспетчер в тесте теперь не работает =/ Сверил со схемой карты Z80 - вроде бы всё норм. Остальное норм (ну кроме защиты области, потом добью).

Error404
26.02.2018, 15:28
Ну, 100% 10МГц у меня уже и так есть :) А вот с портами - да, придётся передирать с Прошки, судя по всему, как и участок с Z80...
Я у себя буду такие ВВ55 (https://ru.aliexpress.com/item/M82C55AFP2-M82C55-M5M82C55AFP2-82C55-M82C55AFP-SSOP40-5-Aliexpress/32841568152.html?spm=a2g0s.9042311.0.0.MooR84) ставить на тестовых платках ;)

С портами на ВВ55 про честные 10МГц можно забыть. Думаю, даже 82С55 т.е. с индексом С - не потянут. Для этого на ПРО при обращении к ВВ55 вводятся такты WAIT (не помню точно - то ли 4 то ли 8 тактов). Самый главный вопрос - стоит воспроизводить порты (причем с существенными тратами) которыми никто не пользуется?

- - - Добавлено - - -



Блин, опять что-то перемудрил в пятницу - Z80-Test опять не принимает диспетчер памяти =/
Есть у кого-либо исходники этого теста, что бы понять как оно должно работать?

никогда и не было. только дисасмом если

Error404
26.02.2018, 17:36
Вот схема модуля. (https://image.prntscr.com/image/Pq4ed8WOT7WyRtTnaIaRew.jpg) Что-то я намудрил и диспетчер в тесте теперь не работает =/ Сверил со схемой карты Z80 - вроде бы всё норм.

Что за новые сущности в виде сигналов mem_addr_hi[] на элементах inst2,3,54,55?
У Z80 card сигнал RD (DBIN) выходил с инверсией, а сейчас прямой - это далее учитывается?
Сигнал F4xx не учитывает A11 а значит будет активироваться и при обращении к FCxx?

andreil
26.02.2018, 18:04
Что за новые сущности в виде сигналов mem_addr_hi[] на элементах inst2,3,54,55?
У Z80 card сигнал RD (DBIN) выходил с инверсией, а сейчас прямой - это далее учитывается?
Сигнал F4xx не учитывает A11 а значит будет активироваться и при обращении к FCxx?
1) В оригинале - это входные сигналы ИД4 для банок памяти, по сути являются ADDR[16..17] из порта.
2) У меня везде только инверсные WRN и RDN используются.
3) Этот участок схемы взят 1:1 с оригинальной схемы, без изменений.
По всем цепям просто дал "нормальные" имена сигналам, вместо непонятного набора цифр. Ну и схему несколько изменил, из-за всех изменений в сигналах, но без изменения логики основных сигналов.

barsik
26.02.2018, 20:41
перемудрил в пятницу - Z80-Test опять не принимает диспетчер памяти
Есть у кого-либо исходники этого теста, что бы понять как оно должно работать?
Исходников, естественно, ни у кого не сохранилось. Но я сейчас дизассемблировал Z80CARD-II TEST-1.03 и посмотрел.

Алгоритм теста диспетчера там такой. Проверяется, что порт F9 коммутирует банки. После чего в окно диспетчера ОЗУ последовательно включаются все сегменты памяти и по адресу 2FFF записывается номер этого сегмента. Затем, уже с помощью коммутации банок портом F9 соответствующие ячейки 2FFF, 6FFF, AFFF, EFFF во всех банках контроллируются на числа которые в них записывались.

andreil
26.02.2018, 21:23
Исходников, естественно, ни у кого не сохранилось. Но я сейчас дизассемблировал Z80CARD-II TEST-1.03 и посмотрел.

Алгоритм теста диспетчера там такой. Проверяется, что порт F9 коммутирует банки. После чего в окно диспетчера ОЗУ последовательно включаются все сегменты памяти и по адресу 2FFF записывается номер этого сегмента. Затем, уже с помощью коммутации банок портом F9 соответствующие ячейки 2FFF, 6FFF, AFFF, EFFF во всех банках контроллируются на числа которые в них записывались.
Только по порту F9 или по FB тоже?

barsik
27.02.2018, 00:51
Затем, уже с помощью коммутации банок портом F9 соответствующие ячейки 2FFF, 6FFF, AFFF, EFFF во всех банках контроллируются на числа которые в них записывались.
Только по порту F9 или по FB тоже?
Вопрос не понял.

Читать сразу же после записи в какой либо сегмент из того же самого адреса, куда была запись, - бесполезно. Поэтому для тестирования во все сегменты что-то записывается в окне 16К, а читается для проверки уже обычным способом, по физическим адресам, коммутируя банки целиком портом F9. При этом, естественно, диспетчер с окном 16К отключается записью в порт FB числа 80H. Т.к во все сегменты записаны разные числа, то если сегмент 16К неверно коммутируется, например, если сегменты "слиплись", то это обнаружится.

Для полной проверки можно ещё сделать наоборот, записать в сегменты используя порт F9, а читать используя доступ сквозь окно 16К. Но объём ПЗУ ограничен, потому одного теста достаточно.

andreil
27.02.2018, 08:04
Вопрос не понял.

Читать сразу же после записи в какой либо сегмент из того же самого адреса, куда была запись, - бесполезно. Поэтому для тестирования во все сегменты что-то записывается в окне 16К, а читается для проверки уже обычным способом, по физическим адресам, коммутируя банки целиком портом F9. При этом, естественно, диспетчер с окном 16К отключается записью в порт FB числа 80H. Т.к во все сегменты записаны разные числа, то если сегмент 16К неверно коммутируется, например, если сегменты "слиплись", то это обнаружится.

Для полной проверки можно ещё сделать наоборот, записать в сегменты используя порт F9, а читать используя доступ сквозь окно 16К. Но объём ПЗУ ограничен, потому одного теста достаточно.
Понял.
То есть при записи используем порт FB (который по 16Кб коммутирует), а при чтении - F9 (который целиком коммутирует).

andreil
28.02.2018, 14:46
Итак, схему базового варианта почти "отшлифовал".
Поскольку процессор - только Z80, то часть логики переделал вообще полностью.
Для проверки гонял Test128, на 2,5МГц с коркой T80a есть глитчи по линии MREQN от корки - на более высоких частотах не наблюдается вообще.
Корку T80pa так и не смог запустить - не понял, что там с тактированием =/

andreil
01.03.2018, 11:23
Сижу, отлаживаю схему, и вижу ошибку в корке - в цикле записи сигнал WR стробируется по восходящему фронту, а в даташите - по нисходящему.
https://image.prntscr.com/image/aB3cpj4sROOjUsjM2LFfDA.png
(корка тактируется сигналос clk_F1)
Из-за этого цикл записи получается совсем коротким и наблюдаются проблемы =/
Вот и вопрос - или корка не корректно формирует этот сигнал или я не тот ДШ смотрю? Документ - UM008004-1204 (http://www.z80.info/zip/z80cpu_um.pdf), циклы чтения/записи на стр. 12.

HardWareMan
01.03.2018, 12:26
andreil, согласно моим опытам на железе в МХ2, Z80 требует данные по фронту тактового импульса в цикле М1 (опкод), по спаду тактового импульса в цикле чтения данных, запись данных так же синхронизируется со спадом. Именно поэтому в Ленине процессор засинхронизирован к инвертированному RAS сигналу (получается циклы чтения и записи данных автоматически), а в цикле М1 тормозится на 1 такт (и использует регистр для хранения опкода). Для полноты картины добавьте в диаграмму сигнал М1.

Denn
01.03.2018, 12:45
...Именно поэтому в Ленине процессор засинхронизирован к инвертированному RAS сигналу ...

:)

andreil
01.03.2018, 15:32
Значительно переработал интеграцию Z80-Card-II, в сторону полного отказа от ВМ80.
Так же упростил формирование сигналов обращения процессора и видео к памяти, поскольку счётчик у нас синхронный. Из минусов - на память теперь отводится только 25нс на любой частоте. Из плюсов - в худшем случае видеобуфер считывается 3 раза, что позволит сделать работу с изображением в 4-х плоскостях.
Модуль видео (https://image.prntscr.com/image/hh6aAWB8R1mLOHhE7Sarlw.jpg) - почти без изменений с прошлого раза.
Модуль процессора (https://image.prntscr.com/image/02bRBXcVS5mezc2ievjWfA.jpg).
Так же написал простейший эмулятор i8255, с которым Z80Test проходит проверки PIO.
Осталось решить последнюю проблему с тестом и буду двигать архитектуру в сторону Прошки...

PS: Если порт FB изменится на Прошный, то половинка 7474 в карте освободится и будет использоваться для формирования тактов (где сейчас только половинка 7474 и используется).

Error404
01.03.2018, 18:28
Из минусов - на память теперь отводится только 25нс на любой частоте. Из плюсов - в худшем случае видеобуфер считывается 3 раза, что позволит сделать работу с изображением в 4-х плоскостях.


С такими минусами плюсы как бы уже и не интересны.
С 250нс РУ5х дооптимизироваться до 25нс да еще при SRAM которым не нужна регенерация это ИМХО перебор.

andreil
01.03.2018, 18:42
С такими минусами плюсы как бы уже и не интересны.
С 250нс РУ5х дооптимизироваться до 25нс да еще при SRAM которым не нужна регенерация это ИМХО перебор.
Это пока что самый неоптимальный вариант, завтра буду изменять пару мест.
Но без WAIT'ов всё равно максимальное время цикла будет около 75нс - меньше при частоте 10МГц уже невозможно, и так выход за фактический строб WR от процессора. Всё упирается именно во время записи - у чтения строб в 2 раза больше, но на малых частота его надо укорачивать, иначе видео-подсистема не получит доступ для нескольких столбцов подряд.

- - - Добавлено - - -

В схеме, по сути, процессор имеет доступ к памяти синхронно сигналу тактированию самого процессора - если ввести ещё один элемент ИЛИ (clk_F1 OR mem_req), то строб расширится в 2 раза.
Если делать с триггером, как было, то при чтении на частоте 2,5МГц доступ к памяти занимает сильно много времени - видео-модуль не имеет доступа к памяти около 20 пикселей, то есть 3 столбца сразу выпадает. У ВМ80 строб чтения был короче =/

Error404
01.03.2018, 21:21
Это пока что самый неоптимальный вариант, завтра буду изменять пару мест.
Но без WAIT'ов всё равно максимальное время цикла будет около 75нс - меньше при частоте 10МГц уже невозможно, и так выход за фактический строб WR от процессора. Всё упирается именно во время записи - у чтения строб в 2 раза больше, но на малых частота его надо укорачивать, иначе видео-подсистема не получит доступ для нескольких столбцов подряд.

- - - Добавлено - - -

В схеме, по сути, процессор имеет доступ к памяти синхронно сигналу тактированию самого процессора - если ввести ещё один элемент ИЛИ (clk_F1 OR mem_req), то строб расширится в 2 раза.
Если делать с триггером, как было, то при чтении на частоте 2,5МГц доступ к памяти занимает сильно много времени - видео-модуль не имеет доступа к памяти около 20 пикселей, то есть 3 столбца сразу выпадает. У ВМ80 строб чтения был короче =/

75нс это уже практически вся номенклатура современных ширпотребовских SRAM, т.е. нормуль, а вот 25нс - это только кэши от РС, ёмких SRAM (512кб) с такими выборками не найти.

andreil
01.03.2018, 22:03
75нс это уже практически вся номенклатура современных ширпотребовских SRAM, т.е. нормуль, а вот 25нс - это только кэши от РС, ёмких SRAM (512кб) с такими выборками не найти.
Ну почему же не найти (https://www.digikey.com/products/en/integrated-circuits-ics/memory/774?FV=2380633%2C238066c%2C238066f%2C23806b1%2Cf04 0017%2Cffe00306%2C4500527%2C450000f%2C4500012%2C45 00017&quantity=&ColumnSort=2042&page=1&pageSize=25). Только уже в SMD-исполнении 100%, с шагом 0.8мм и 0.5мм. Хотя есть ещё SOJ с 1.25мм.
И нам надо 2 микросхемы по 256Кб - обязательно 16 бит по данным иметь для видео ;)

- - - Добавлено - - -

И да - в эти 75нс надо ещё уложить задержки в логике, что сразу "выстреливает" ориентировочно до 20нс в худшем случае. То есть у нас по факту остаётся 55нс, если не меньше - надо считать по задержкам в полной цепи CPU->MEM->CPU.

- - - Добавлено - - -

Вот, набросал кусочек схемы с синхронным формированием сигналов. Номера тактов взял примерные, можно поменять после проверки в симуляции.
Суть такова, что при наличии активных clk1 и обращения памяти (zwrn или zrdn и mreq) на dsyn выставится лог.1.
По активному сигналу clk3 тактируется процессор.
По активному сигналу clk4 (спад clk3) сбрасывается dsyn.
https://image.prntscr.com/image/y3YhqsJNSrqiphW_XELAaA.png
Завтра эту схему повторю в проекте и проверю на "живучесть".
При такой реализации уже получается 3 такта на доступ к памяти, то есть 75нс. Можно максимум ещё на 25нс продлить, хотя уже здесь будет выход за строб WR (по ДШ за такт до него данные уже должны быть на шине, но тогда придётся стробировать только по MREQN, без ZWRN и ZRDN).

LeoN65816
01.03.2018, 23:15
При такой реализации уже получается 3 такта на доступ к памяти, то есть 75нс. Можно максимум ещё на 25нс продлить...
А откуда взялись эти 25 нс? При основном клоке 25 МГц длительность такта будет 40 нс, ну никак не 25 нс...
И еще. А как ты из 25 МГц получил 10 МГц (я так понял, что это турбоклок проца)?

Error404
01.03.2018, 23:20
Ну почему же не найти (https://www.digikey.com/products/en/integrated-circuits-ics/memory/774?FV=2380633%2C238066c%2C238066f%2C23806b1%2Cf04 0017%2Cffe00306%2C4500527%2C450000f%2C4500012%2C45 00017&quantity=&ColumnSort=2042&page=1&pageSize=25). Только уже в SMD-исполнении 100%, с шагом 0.8мм и 0.5мм. Хотя есть ещё SOJ с 1.25мм.
И нам надо 2 микросхемы по 256Кб - обязательно 16 бит по данным иметь для видео ;)

SOJ с 1.25мм - это меньшее что я смогу спаять. :)
В табличке по ссылке средняя стоимость 5$ за штуку (не считая доставки). На Али за 5$ с бесплатной доставкой сразу десяток (0.5$ штука) с доступом 55ns (для нас самое то) можно найти, еще есть 70 ns (но их работоспособность на 10М уже конечно надо проверять).
2 микросхемы по 512Кб оптимально было бы, зачем себя ограничивать за те же деньги.

andreil
02.03.2018, 08:08
А откуда взялись эти 25 нс? При основном клоке 25 МГц длительность такта будет 40 нс, ну никак не 25 нс...
И еще. А как ты из 25 МГц получил 10 МГц (я так понял, что это турбоклок проца)?
1) Да, ошибся. Путаюсь в периодах :) Тогда сейчас получается 40нс, с расширением до полной ширины WR на 10МГц будет 120нс.
2) Счётчик считает до 10 :) И за этот период счёта идут 4 импульса для 10МГц - форма сигналов как и в посте #97 (http://zx-pk.ru/threads/28763-eshche-odin-orion-na-plis.html?p=949483&viewfull=1#post949483), только схема формирования иная.

andreil
03.03.2018, 12:50
В процессорном модуле (https://image.prntscr.com/image/gM1AauZRTim3iC7S90hNWA.jpg) теперь используется частота 20МГц - иначе сигналы очень несимметричные и получается очень громоздкая логика арбитража памяти.
В текущем варианте на доступ CPU к памяти отводится фиксированный промежуток в 100нс, что будет достаточно для практически всех типов памяти.
Самый тяжёлый случай, с частотой 2,5МГц - здесь за цикл чтения успевает выполниться 2 цикла обращения к памяти.
Приступаю к имплементации портов с Прошки...

OrionExt
03.03.2018, 13:16
Тоже с такой проблемой столкнулся на FPGA. Наладишь на 20MГц, не работает на 2.5MГц. Или наоборот. Так и не дожал этот вопрос в свое время.

andreil
03.03.2018, 13:39
Тоже с такой проблемой столкнулся на FPGA. Наладишь на 20MГц, не работает на 2.5MГц. Или наоборот. Так и не дожал этот вопрос в свое время.
Нет, у меня всё работало, но для организации более длительного цикла обращения к памяти (для реальных чипов) требовалась очень сложная логика арбитража. В основном это усложнялось именно несимметричностью тактирования (на 10МГц каждые 2 или 3 такта по импульсу).

- - - Добавлено - - -

И нынешняя схема абсолютно стабильно работает на всех 3-х частотах.

Error404
03.03.2018, 18:53
Ну и как вишенку на торт - добавить к "честным" 10М еще режим "20М с Wait" (т.е. разгоняется только проц а остальной синхронный автомат остается как есть на 10М и имеет приоритет относительной проца) и получим самый быстрый русский клон на железном Z80.

andreil
03.03.2018, 19:11
Ну и как вишенку на торт - добавить к "честным" 10М еще режим "20М с Wait" (т.е. разгоняется только проц а остальной синхронный автомат остается как есть на 10М и имеет приоритет относительной проца) и получим самый быстрый русский клон на железном Z80.
Ну, тут ещё с портами придётся вводить ожидания 100%. Хотя их можно сэмулировать любым МК и не придётся ждать :)
Нарисовал плату-переходник с буферами (3.3v <-> 5v) для подключения реальных памяти и процессора. Как приедут - будет более близко к реальности по таймингам уже. Через этот же переходник можно будет подключить и реальную ВГ93 для тестов с дисководом.

andreil
04.03.2018, 15:45
Схему процессорного модуля (https://image.prntscr.com/image/wk9D-RpHSduVkIvypTmA1Q.jpg) почти полностью перенёс с Прошки, уже работает - идёт чтение стартовой ПЗУ, инициализация портов.
Начинаю переделывать видео-часть, что бы соответствовала Прошке - это было начато как-то раньше, но не добито до конца, а сейчас уже надо, поскольку нужен псевдо-цветной режим для стартовой менюшки.

- - - Добавлено - - -

Проверил тестом из брошюры к Орион-Про - всё ОК, в монохромном режиме работает, выборка портов есть.
В качестве PPI i8255 использую самопальные упрощенные модули (https://pastebin.com/ckahPi90) - работают только в режиме "0". Если группа настроена на вход, то на ней выставляется "Z" и в циклах происходит считывание.

- - - Добавлено - - -

По поводу возможности "завести" всё на 20МГц - придётся тормозить и при обращении к ПЗУ. Сейчас, на 10МГц, время доступа к нему составляет 150нс, что уже отбрасывает медленные серии.
Подумаю над реализацией переключаемых задержек, как в Прошке - с ТМ8 (или более "ёмкий" триггер, в зависимости от максимального количества циклов ожидания) и парой наборов джамперов (для памяти, для ввода-вывода).

- - - Добавлено - - -

А время доступа к памяти, кстати, составляет 100нс. С учётом задержек на логике, остаётся около 80нс, если использовать достаточно скоростные серии логики. Всё равно надо смотреть в реале уже такие нюансы...

LeoN65816
04.03.2018, 20:13
Нарисовал плату-переходник с буферами (3.3v <-> 5v) для подключения реальных памяти и процессора.
ИМХО, вот с этого и надо было бы начинать.
А ты не думал, чтобы трёхвольтовые память и проц пользовать?


По поводу возможности "завести" всё на 20МГц - придётся тормозить и при обращении к ПЗУ. Сейчас, на 10МГц, время доступа к нему составляет 150нс, что уже отбрасывает медленные серии.
Чтение опкода - 1.5 такта. Чтение памяти - 2 такта. При клоке проца в 20 МГц это 75 нс и 100 нс соответственно. Сейчас W27C512Z-45 (45 нс !) "на каждом углу" как грязи.


А время доступа к памяти, кстати, составляет 100нс. С учётом задержек на логике, остаётся около 80нс, если использовать достаточно скоростные серии логики.
Очень и очень оптимистичное утверждение...

andreil
04.03.2018, 20:20
ИМХО, вот с этого и надо было бы начинать.
А ты не думал, чтобы трёхвольтовые память и проц пользовать?


Чтение опкода - 1.5 такта. Чтение памяти - 2 такта. При клоке проца в 20 МГц это 75 нс и 100 нс соответственно. Сейчас W27C512Z-45 (45 нс !) "на каждом углу" как грязи.


Очень и очень оптимистичное утверждение...
1) Память для тестов и так 3-х вольтовая. А Z80 только 5-и вольтовые в доступе, 3-х вольтовые редкость вроде бы.
2) Я смотрел на старые ПЗУшки просто ;) Более-менее современные - да, почти все подходят без вопросов.
3) Это идеальный случай, с самой быстродействующей логикой, посчитанный "в уме". По факту - да, времени будет гораздо меньше.

LeoN65816
04.03.2018, 21:42
А Z80 только 5-и вольтовые в доступе, 3-х вольтовые редкость вроде бы.
Они, вообще, существуют ли в природе трёхвольтовые Z80?
Кто-нибудь пробовал CMOS-овые Z80 запускать на трёх вольтах?

zx-kit
04.03.2018, 21:46
Совместимый с Z80 процессор Z180 Z8S18033 на +5V работает на 33 MHz, а на +3V3 работает на 20 MHz.

LeoN65816
04.03.2018, 22:24
zst, дык, это не (микро)процессор, а микроконтроллер с кучей периферии и MMU. Разницу чувствуешь? И эти периферия и MMU будут уместны в Орионе?

OrionExt
04.03.2018, 22:36
zst, дык, это не (микро)процессор, а микроконтроллер с кучей периферии и MMU. Разницу чувствуешь? И эти периферия и MMU будут уместны в Орионе?
Zilog так не считает;)

andreil
04.03.2018, 22:51
Zilog так не считает;)
Да пофиг, для нас они бесполезны - придётся много что переделывать. Или оставить как есть и использовать его как обычный Z80, игнорируя все его дополнительные расширения (DMA, 20 бит адреса, SCI, Serial).
Ну и да - это больше микроконтроллер всё-таки - есть регистр управления ядром (CCR), много встроенной периферии со своими регистрами, MMU, ICR и прочим излишеством.

andreil
05.03.2018, 11:52
Реализовал формирование видеосигналов как в Прошке и вылезла ошибка схемы - элемент D102.4 должен быть 2И, а не 2ИЛИ-НЕ. В текущем варианте при монохромном режиме работы вместо чёрного фона имеем белый фон без яркости (лог. "1" на входах 2, 5 и 11 D43).

- - - Добавлено - - -

И ещё - элемент D21.3 так же должен быть 2И, а не 2ИЛИ.

- - - Добавлено - - -

Очередное исправление - сигнал FC, подаваемый на вход 11 D40 необходимо инвертировать. Вход защёлки прямой, а выход дешифратора инверсный :)

andreil
05.03.2018, 15:19
Дорисовал плату-переходник (https://image.prntscr.com/image/NyttZx33QBWHjmC3KcsIzA.png) для подключения статики и Z80.
Память использую AS7C34098A-15TIN TSOP-44, имеющуюся в наличии (256Кб*16). Так что базовый вариант Орион-Про будет работать на 1 чипе памяти :)
Для согласования уровней использую SN74ALVC164245, доступные в продаже (сейчас на полпути ко мне уже).
Платы придут где-то недели через 2, к тому времени думаю закончить симуляторную часть...

Error404
05.03.2018, 15:58
Ты только когда будешь копировать архитектуру ПРО, учти, что ее проектировали люди понятия не имеющие для чего они ее так запроектировали (а не как нибудь по-другому например с чем-нибудь совместимо) - это видно в каждом их решении, что выражается в то, что даже в 90-х, когда программировал каждый второй орионщик, софт для ПРО не писали, а адаптирование готового ПО авторами было архитектурно максимально усложнено. Орион-128 "компутер без программ", а в ПРО это свойство возведено в куб.

andreil
05.03.2018, 16:26
Ты только когда будешь копировать архитектуру ПРО, учти, что ее проектировали люди понятия не имеющие для чего они ее так запроектировали (а не как нибудь по-другому например с чем-нибудь совместимо) - это видно в каждом их решении, что выражается в то, что даже в 90-х, когда программировал каждый второй орионщик, софт для ПРО не писали, а адаптирование готового ПО авторами было архитектурно максимально усложнено. Орион-128 "компутер без программ", а в ПРО это свойство возведено в куб.
Я сейчас хочу добиться нормальной работы стартового меню, потом сделаю по сбросу режим "Орион-128", без Про-режима. Для этого надо понять, что и как переключить :) Можно, конечно, и в эмуляторе это по портам глянуть, но будет "немного не то" :)
И да, в Про переключения памяти по порту FB нет, оттуда используются только 2 бита - разрешение прерываний и запрет ПЗУ.

- - - Добавлено - - -

Загружается стартовое меню Про, но с проблемами.
1) В момент загрузки наблюдаются артефакты на изображении, возможно лишние записи в порт FC, надо будет проследить.
2) Загрузка нестабильная, через раз в меню отсутствует часть линий.
3) Нет букв. Совсем. Просто белые прямоугольники, выбранный пункт меню - по цвету фона полностью.
В эмуляторе с этими ПЗУ всё отлично грузит.

andreil
06.03.2018, 10:25
Исправил адресацию 64К-байтных банок памяти - и меню стало нормальным. Но при загрузке всё равно наблюдаются артефакты, а так же пункт 2 (заметно на фото (https://4.downloader.disk.yandex.by/preview/17c092199e907cd658131382d392435e91ff874bf30657cbd3 e5516b47dcda6d/inf/x2kDdbUVxg_GpUP3_u7WblB6at_fpTjj4P_CS4TQUd2TOf79_q 0rm4G-Dgw77jzARqTBpZqWLDISLGfmMRv2-Q%3D%3D?uid=95493266&filename=2018-03-06%2010-00-36.JPG&disposition=inline&hash=&limit=0&content_type=image%2Fjpeg&tknv=v2&size=1280x846)). Левая линия есть всегда - это проблема с отставанием сигнала, исправляю сейчас.

andreil
06.03.2018, 13:57
Продолжил рисовать схему видео-модуля, одного листа маловато =/
Почти всё уместил, остались только выходные мультиплексоры и формирователь RGB для VGA - решил его делать на R2R ЦАПе.

- - - Добавлено - - -

Попробовал накидать платку по схеме для оценки масштабов.
Не разместил памяти и резисторы подтягивающие, так же ещё в нижней части должен быть краевой разъём-папа.
https://image.prntscr.com/image/xAL0fHzeRIyyNjfjheQrlA.png
Вся логика - в корпусах SO/SOIC. И да - это ещё не вся схема, не хватает ещё 4-х КП11 и 1 регистра с видеовыхода. Если разместить их и память, всё место будет занято плотненько-плотненько.
Как видно, место уже закончилось :( Развести это дело вполне возможно, но всё упирается в оптимум по питанию - с этим будут проблемы.
Как выход из такой ситуации вижу такое решение:
1) Мультиплексоры адреса, память и буфера данных выносятся на отдельную плату - тогда на неё будет достаточно места, что бы развести сразу под различные корпуса и микросхемы - 4 бита, 8 бит, 16 бит, разного объёма.
2) Соединения памяти выполнить разъёмами с платы на плату, без краевого разъёма и "корзины" - получится 4 платы в минимальной конфигурации (видео, память, процессор, периферия).

Error404
06.03.2018, 15:23
планарный дизайн подразумевает монтаж элементов с обеих сторон платы (ну если вдруг ты забыл). ;) Так что там еще вагон места

andreil
06.03.2018, 15:29
планарный дизайн подразумевает монтаж элементов с обеих сторон платы (ну если вдруг ты забыл). ;) Так что там еще вагон места
Уже сейчас плотность дорожек будет высокой.
На обратной стороне - блокировочные по питанию и подтяжки к +5.
Если делать на обеих сторонах, то по питанию будет Ж...

Error404
06.03.2018, 15:40
Еще мысли: чтобы уйти от ВВ55 в диспетчерах по 16к от ПРО (если таки решишь их ставить - хотя я не вижу зачем это надо) можно реализовать их на 2х 1533ИР26 (ИР32) плюс удобно получится "регистр управления addr+3"(а в нашем случае - честный регистр) зарезервировать под 4-е недостающее окно, а если необходимо чтение из портов этих диспетчеров (т.е. работа всех полутора штатных программ ПРО), то поставить там в параллель что-то типа 2х 1531РУ9 на все порты от ВВ55 зараз (а может и еще какие накрыть).

- - - Добавлено - - -


Уже сейчас плотность дорожек будет высокой.
На обратной стороне - блокировочные по питанию и подтяжки к +5.
Если делать на обеих сторонах, то по питанию будет Ж...

Сделать шины, на них же кондеры. На планарах (которые припаянные 2мм в высоту) это вообще элементарно сделать в виде параллельно проходящих (т.е. практически лежащих на плате) отрезков луженой медной проволоки скажем в 1мм в диаметре. Припаивай ее в нужных точках и всё. Вообще весь дизайн уберется в 100х100мм. :)

- - - Добавлено - - -

А самое главное - такие шины примерно на порядок надежнее по питанию (в плане помех) чем оттрассированные проводничками автотрассировщиком.

andreil
06.03.2018, 15:43
А самое главное - такие шины примерно на порядок надежнее по питанию (в плане помех) чем оттрассированные проводничками автотрассировщиком.
Какой автотрассировщик? Только ручная разводка ;)

Еще мысли: чтобы уйти от ВВ55 в диспетчерах по 16к от ПРО (если таки решишь их ставить - хотя я не вижу зачем это надо) можно реализовать их на 2х 1533ИР26 (ИР32) плюс удобно получится "регистр управления addr+3"(а в нашем случае - честный регистр) зарезервировать под 4-е недостающее окно, а если необходимо чтение из портов этих диспетчеров (т.е. работа всех полутора штатных программ ПРО), то поставить там в параллель что-то типа 2х 1531РУ9 на все порты от ВВ55 зараз (а может и еще какие накрыть).
Я вот думаю - а нужен ли режим Про? В режиме "Орион-128" эти порты всё равно ведь не используются, как понимаю.

OrionExt
06.03.2018, 15:52
Бр-р-р...:v2_dizzy_roll: Так это ж почти весь Орион (48 корпусов) на платке 100х100. Надо, наверное, в галки упаковывать.

andreil
06.03.2018, 16:27
Бр-р-р...:v2_dizzy_roll: Так это ж почти весь Орион (48 корпусов) на платке 100х100. Надо, наверное, в галки упаковывать.
К сожалению, здесь только видео и обвяз памяти - видео 1:1 с Прошки взял, это его очень сильно раздуло.

- - - Добавлено - - -

Текущая схема тактового генератора (https://andreil.by/orion/orion_gen-orion_gen.s.pdf) и памяти с формирователем RGB (https://andreil.by/orion/orion_video.pdf) (пока не завершено, остались мультиплексоры и 3 регистра).

OrionExt
06.03.2018, 17:15
По такой схеме генератор на 74НС04 не взлетит. Это не ТТЛ.
Или по факту все будет ТТЛ?

andreil
06.03.2018, 17:42
По такой схеме генератор на 74НС04 не взлетит. Это не ТТЛ.
Или по факту все будет ТТЛ?
Да, по факту будет ТТЛ. Думаю только поставить обычный генератор с 3.3v-CMOS-уровнями (https://ae01.alicdn.com/kf/HTB1ECRkX_lYBeNjSszcq6zwhFXaa/10-SMD-5070-OSC-25-25-7050.jpg_640x640.jpg) и сигнал от него пропустить через инвертор на ACT/HCT.
Я вот просто подумал о совместимости CMOS и TTL серий (https://www.jsykora.info/2014/05/logic-voltage-levels/)... И буду использовать серии, у которых вход по уровням TTL - ACT, HCT, F, HS - их и достать не так-то и сложно (счётчики, например, у меня уже лежат из 74F).

Error404
06.03.2018, 18:50
К сожалению, здесь только видео и обвяз памяти - видео 1:1 с Прошки взял, это его очень сильно раздуло.

- - - Добавлено - - -

Текущая схема тактового генератора (https://andreil.by/orion/orion_gen-orion_gen.s.pdf) и памяти с формирователем RGB (https://andreil.by/orion/orion_video.pdf) (пока не завершено, остались мультиплексоры и 3 регистра).

Да уж, полтора десятка регистров и мультиплексоров в ПРО вместо 2х ИР13 и 2х же латчей в Орионе-128 меня в свое время тоже неприятно поразили при сборке ПРО.
Если это только для того чтобы извлекать 4 плоскости из двух страниц, то может нафиг оно не нужно? Один хрен 16 цветов НЕ позволят вывести качественную картинку, даже с палитрами. 256с на РС (да с хорошим разрешением) и то было так себе. И по скорости - ворочать 64кб в 4х плоскостях не хватит и 10 МГц.

andreil
06.03.2018, 20:25
Да уж, полтора десятка регистров и мультиплексоров в ПРО вместо 2х ИР13 и 2х же латчей в Орионе-128 меня в свое время тоже неприятно поразили при сборке ПРО.
Если это только для того чтобы извлекать 4 плоскости из двух страниц, то может нафиг оно не нужно? Один хрен 16 цветов НЕ позволят вывести качественную картинку, даже с палитрами. 256с на РС (да с хорошим разрешением) и то было так себе. И по скорости - ворочать 64кб в 4х плоскостях не хватит и 10 МГц.
ИМХО - да, это излишнее. Только здесь не ИР13, а ИР10, и ещё мультиплексор (его на схеме просто нет ещё) на 2 режима - 3 плоскости и 4 плоскости. Из-за замены ИР13 на ИР10 для 16-ти цветного режима используется отдельный регистр (ИР23 в Про, у меня - ИР22, то есть защёлка).
В итоге получается, что при удалении режимов с дополнительными плоскостями из схемы "уйдут" 3 защёлки, 3 регистра, 1 мультиплексор и пара элементов мелкой логики.
Самый главный вопрос - а пользуется ли оно каким-либо софтом?

- - - Добавлено - - -

Решение надо принимать сейчас, пока плата не "нарисована". После трассировки будет уже поздно вносить подобные изменения...

- - - Добавлено - - -

Основная причина замены ИР13 на ИР10 - это дефицит ИР13. Даже сейчас в интернет-магазине нет аналогов для неё в списке, а для ИР10 в разных корпусах сразу в наличии :) Да и по месту на плате для 16-ти цветного режима получается примерно равнозначно - 1 ИР13 в широком корпусе против 1 ИР10 в DIP16, 1 ИР22 в DIP20 и 1 КП11 в DIP16 (вместо половинки КП2/12).
Сейчас неспешно рисую схему, сверяя её со схемой в Квартусе. Потом буду оочень неспешно расставлять это всё и раскидывать часть мелкой логики в одногейтовые корпуса для упрощения трассировки. Как закончу - сразу закажу недостающие детали, придут почти синхронно с платами.

PS: Для начала буду заказывать ТОЛЬКО плату видеомодуля, процессорный модуль только если отлажу на реальном процессоре к тому времени. А видео уже надо на реальной памяти проверять - через недели 2-3 будут платки на руках, запаяю.

- - - Добавлено - - -

Почти завершенная часть формирователя видеосигналов (https://andreil.by/orion/orion_video.pdf), второй лист (с генератором и счётчиками) без изменений. Память не отображается, потому что на этом компьютере её нет в библиотеках, надо будет с работы скопировать (сам рисовал, нестандарт).
Осталось только рассчитать и нарисовать R2R DAC, блокировочные конденсаторы и разъемы.
Так же вполне актуален вопрос о необходимости 3-х и 4-х битных видеорежимов - без них плата получится значительно менее плотная...

- - - Добавлено - - -

Или стоит поставить на выход хоть какой-то DAC? R2R "поплывёт" при изменении сопротивления нагрузки...

LeoN65816
07.03.2018, 06:28
Один хрен 16 цветов НЕ позволят вывести качественную картинку, даже с палитрами.
Справедливости ради: картинки на Векторе 4bpp из палитры 256 - очень и очень неплохо смотрятся. А если поллитра будет 4К (256К, 16М), так вообще зер гут.

andreil
07.03.2018, 08:53
По выходу VGA.
По стандарту сигнал должен быть в диапазоне 0-0.7В. В симуляции выхода получаю для цвета без яркости 0.6В, с яркостью - 0.71В. Если оставляем одну яркость, на выходе получаем 0.14В, но в текущей схеме яркость будет активна только при активном цвете (все 3 сигнала пропущены через 2И).
https://image.prntscr.com/image/jBJLsm6WRfqTA5hrCOOcFg.png
Входные источники напряжения - 5В, то есть с ТТЛ-логики.

- - - Добавлено - - -

Кстати, глянул даташит на генераторы - они поддерживают питание до 6В и выход TTL-совместимый, так что буду ставить с джампером - не ставим если запаян генератор и ставим, если нужен генератор на инверторах.

Error404
07.03.2018, 10:59
Предлагаю в дополнение к RGBIRGBI цветного выхода покрашенных точек и покрашенного фона еще замешать выход RGBIRGBI регистра FC (дополнительная КП2 с выхода регистра pFC на резисторы R2R VGA, управляющаяся сигналом цвет/фон=A0 и (pF8.D3 & pF8.D2)=1=селектКП2) по аналогии с тем как сделано на R13+D2 (раз уж порт FC у нас все равно есть: он полезен). Тогда порт FC будет играть роль не только покраски монохрома в 16 цветов, но и примитивной палитры в цветных режимах, дающей для фона и цвета дополнительные 16 цветов из 32х. Вес этих дополнительных палитр должен быть минимальным чтобы когда они выключены {(pF8.D3 | pF8.D2)=0} изображение не было тусклым. Или наоборот, при pF8.D3=0 отключая КП2, по всем битам одинаково добавлять яркости чтобы при выключенной палитре иметь максимум яркости по цветам - тут могут быть варианты с КП2/КП12.

pF8.D3 = учитывать регистр pFC
pF8.D2 = монохром/цвет

- - - Добавлено - - -

Опцию сделать можно, будет ли кто пользоваться? :)
Ну, хотя бы можно будет в DOS выбирать не столь ядовитые оттенки, там только в драйвере экрана поправить.

andreil
07.03.2018, 11:05
Предлагаю в дополнение к RGBIRGBI цветного выхода покрашенных точек и покрашенного фона еще замешать выход RGBIRGBI регистра FC (дополнительная КП2 с выхода регистра pFC на резисторы R2R VGA, управляющаяся сигналом цвет/фон=A0 и (pF8.D3 & pF8.D2)=1=селектКП2) по аналогии с тем как сделано на R13+D2 (раз уж порт FC у нас все равно есть: он полезен). Тогда порт FC будет играть роль не только покраски монохрома в 16 цветов, но и примитивной палитры в цветных режимах, дающей для фона и цвета дополнительные 16 цветов из 32х. Вес этих дополнительных палитр должен быть минимальным чтобы когда они выключены {(pF8.D3 | pF8.D2)=0} изображение не было тусклым. Или наоборот, при pF8.D3=0 отключая КП2, по всем битам одинаково добавлять яркости чтобы при выключенной палитре иметь максимум яркости по цветам - тут могут быть варианты с КП2/КП12.

pF8.D3 = учитывать регистр pFC
pF8.D2 = монохром/цвет

- - - Добавлено - - -

Опцию сделать можно, будет ли кто пользоваться? :)
Ну, хотя бы можно будет в DOS выбирать не столь ядовитые оттенки, там только в драйвере экрана поправить.
Можно и реализовать, как будет понятно как это сделать в схеме.

По более стандартным режимам - есть ли прошивка, проверяющая стандартные и ПРОшные видеорежимы? Желательно в виде ПЗУшки с адреса 0x0000 (ROM1). С клавиатурой пока что проблемы какие-то, спалил наверное - нет тактирования от неё :(

OrionExt
07.03.2018, 11:34
С клавиатурой пока что проблемы какие-то, спалил наверное - нет тактирования от неё :(
Клаву желательно через резюки подключать и защитные диоды, как-то так (http://caro.su/msx/ocm_de0n/ocm_de0n.jpg).