PDA

Просмотр полной версии : Что максимум можно выжать из КР580ВГ75 Intel 8275? Обсуждение



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

freddy
13.04.2018, 18:03
Спасибо, написали доходчиво. Я когда то имел дело с аркадными автоматами CAPCOM. Может помните систему CPS1 и игры Captain Commando, Street Fighter 2.
Там все упрятано в заказные чипы и выяснить толком ничего нельзя. Из того, что понял, оно имело низкое разрешение, мало одновременных спрайтов на экране, мало спрайтов в линии, но очень много цветов. На вид больше 256. За счет цветов оно выглядело очень сочно и играбельно. Судя по всему было 3 плоскости. 1 для фона, 2 для спрайтов. Фон был статичным, в основном (небо). В одной плоскости спрайтов были фигуры персонажей, в другой подвижный фон (скроллинг), который делался тоже спрайтами. Однако, чтобы это повторить на логике, нужно будет соорудить приличную конструкцию на большой плате, около 100 корпусов. Народной она не станет. Если соорудить более практичную конструкцию на FPGA или STM-32, то тоже никому не нужно будет. К примеру, меня за применение AVR затролили, мол не спортивно, читерство и т.д. :) Всё думали, что так изящно управлять ВГ75 можно с помощью безмозглого ВТ57. Ах,ах,ах, наивные...
Мне видится более упрощенный процесс формирования кадра. Будет два видеобуфера по 32кб. Из одного будет выводиться картинка, в другом будет рендериться следующий кадр. Буфера будут по очереди перекидываться по кадровому импульсу обратного хода мультиплексорами между рендером и видеогенератором. Видеогенератор тот самый естественно. Рендерер на 2х ВГ75. Одна будет выгребать из памяти спрайтов байты и класть в видеобуфер, вторая будет задавать смещение по X,Y в пределах одного закоместа. Чтобы передвигать на большее значение чем размер знакоместа, достаточно будет в текстовом буфере переписать номер спрайта в другую ячейку и если надо, задать необходимое смещение. Итого получится 80 спрайтов в линии, 4000 спрайтов на экране и возможность пересечения спрайтов в пределах одного знакоместа. По количественному показателю и разрешению экрана, CAPCOMы, NEO-GEO, NES, SNES нервно курят. У нас то технология еще из 70-х :))) Размер спрайта 8х16. Сдвигать по X,Y можно одним и тем же сумматором. Он должен прибавлять Y*80+X к адресу записи в видеобуфер. X=(0..7), Y=(0-15). Игровая логика сводится к тому, чтобы перемещать номера спрайтов и их смещение в пределах знакоместа по текстовому буферу. Детектор столкновений при этом проще всего программный. По условию если задано смещение и смещение следующего спрайта в строке меньше смещения предыдущего спрайта, то произошло столкновение.
Бред короче. Это 3 ВГ75 и штук 40 корпусов мелкой логики. Нафиг не нужно.

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

К стати насчет таймингов всей этой хреновины... Вывод кадра+рендеринг следующего кадра (одновременно). Работа игровой логики асинхронно, разумное время, для получения разумного FPS. По завершению рассчетов игровой логики, по началу VRTC быстрое скармливание текстового буфера рендереру, например с помощью DMA. Рендерер будет работать два прохода. К примеру на первом проходе будет весь кадр заливать фоном, на втором заливать подвижные фигурки. Это нормально, кадровая частота 70Гц, поэтому будет 35 FPS, нормально как бы. Главное чтобы 8080 осилил стлько :)

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

В общем без разницы что он будет делать два прохода. Можно ему по номеру прохода подкидывать разную память спрайтов и текстовый буфер, тогда ваще будет круто, много графики. ОЧЕНЬ МНОГО ГРАФИКИ!

SegaBoy
13.04.2018, 19:02
Вклинюсь с небольшим оффтопом, но всё же по теме - что максимум можно выжать из ВГ75. Не нашёл на форуме обсуждалось или нет.
Несмотря на то, что внутренние буферы ВГ75 рассчитаны только на 80 символов и в параметре ННННННН не рекомендуется ставить число больше 79 (80 символов в строке) - имеется возможность выставить там любое значение вплоть до 127 (128 символов в строке). Внутренние счётчики ВГ75 честно отрабатывают и выдают сигнал HRTC именно через то количество CCLK (character clock), как будет задано в этом параметре.

bigral
14.04.2018, 01:14
... Видеогенератор тот самый естественно. Рендерер на 2х ВГ75. Одна будет выгребать из памяти спрайтов байты и класть в видеобуфер, вторая будет задавать смещение по X,Y в пределах одного закоместа. Чтобы передвигать на большее значение чем размер знакоместа, достаточно будет в текстовом буфере переписать номер спрайта в другую ячейку и если надо, задать необходимое смещение. Итого получится 80 спрайтов в линии, 4000 спрайтов на экране и возможность пересечения спрайтов в пределах одного знакоместа. По количественному показателю и разрешению экрана, CAPCOMы, NEO-GEO, NES, SNES нервно курят. У нас то технология еще из 70-х :))) Размер спрайта 8х16. Сдвигать по X,Y можно одним и тем же сумматором. Он должен прибавлять Y*80+X к адресу записи в видеобуфер. X=(0..7), Y=(0-15). Игровая логика сводится к тому, чтобы перемещать номера спрайтов и их смещение в пределах знакоместа по текстовому буферу. Детектор столкновений при этом проще всего программный. По условию если задано смещение и смещение следующего спрайта в строке меньше смещения предыдущего спрайта, то произошло столкновение.
Бред короче. Это 3 ВГ75 и штук 40 корпусов мелкой логики. Нафиг не нужно....

В общем без разницы что он будет делать два прохода. Можно ему по номеру прохода подкидывать разную память спрайтов и текстовый буфер, тогда ваще будет круто, много графики. ОЧЕНЬ МНОГО ГРАФИКИ!

Если честно то я ничего из этого не понял. В моем понимании ВГ75 (как просто обьяснил vinxru) это буфер на 2 строчки по 80 кодов (7bit-ных) + 4bit счетчик строк для тайла. И пока в одну строчку он заливает коды (обычно с использованием внешнего DMA) со второй он может выдавать до 16 раз по очереди от 0 до 79-го коды на выходе (причем 4bit счетчик считающий сколько раз он выдал эту строку тоже выведен наружу и обычно используется как младшая часть адреса в памяти тайлов). Ну и эти коды используют как старшую часть адреса тайлов. И как тогда можно сделать это: "Одна будет выгребать из памяти спрайтов байты и класть в видеобуфер, вторая будет задавать смещение по X,Y в пределах одного закоместа" ?

Titus
14.04.2018, 01:14
Внутренние счётчики ВГ75 честно отрабатывают и выдают сигнал HRTC именно через то количество CCLK (character clock), как будет задано в этом параметре.
Куда при этом приходят указатели буферов?

SegaBoy
14.04.2018, 01:42
Куда при этом приходят указатели буферов?
Не совсем понял вопрос. Указатели внутренних буферов на 80 символов?
Если строка содержит более 80 символов, то ВГ75 продолжает запрашивать символы у контроллера ПДП. При этом новые символы затирают содержимое буфера с самого начала. Точно такая же ситуация происходит в режиме прозрачных атрибутов, если накидать в строку более 16 атрибутов.

Titus
14.04.2018, 02:14
При этом новые символы затирают содержимое буфера с самого начала.
Понятно. Т.е. указатель позиции в буфере закольцовывается переходя на 0-й адрес, а не останавливается или вообще сбивается.

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


Точно такая же ситуация происходит в режиме прозрачных атрибутов, если накидать в строку более 16 атрибутов.
В режиме прозрачных атрибутов при переполнении, на сколько я понимаю, идет перезапись FIFO-буферов, это несколько иное.

SegaBoy
14.04.2018, 02:38
В режиме прозрачных атрибутов при переполнении, на сколько я понимаю, идет перезапись FIFO-буферов, это несколько иное.
Да, но принцип тот же самый.
Например у нас в строке 78 символов и 32 атрибута (вместо 16-ти) в "прозрачном" режиме. Значит ВГ75 настроен на 78 символов в строке, а ПДП на 32 больше. Когда ВГ75 получает атрибут, то помещает его в буфер символов, а следующий за ним символ в буфер фифо (размер которого 16 символов). Получив в дальнейшем 17-й атрибут - так же поместит его в буфер символов, а следующий уже за этим атрибутом символ перезапишет в фифо (или вытолкнет) тот самый первый. В итоге к концу загрузки такой строки у нас будут потеряны 16 символов - потому что размер фифо равен 16.
Аналогичная ситуация с длиной строки в 128 символов. Получив от ПДП 81-й символ, ВГ75 поместит его на место первого и так далее до 128-го. В итоге у нас будут потеряны первые 48 символов (точнее они будут равны последним 48-ми).
Применить на практике это можно, например, так. После HRTC можно "подсунуть" ВГ75 фейковые 48 символов (а само это время использовать на обратный ход и бланкирование). А вот с 49-го по 128-й уже выдать строку нормальных символов из видеопамяти. Не факт что это вообще как-то применимо или кому-то нужно.

Меня лично смущал вопрос - что будет если указать ВГ75 параметр строки больше 80-ти - будет он его игнорировать (считать равным 80, даже если указываешь больше) или будет считаться опять с нуля (например вместо 96 восприниматься как 16). В итоге просто проверил на практике - подключил логический анализатор к Апогею и начал менять параметры ВГ75. В какой-то момент синхронизация сорвалась, но анализатор показал сколько CCLK проходит между HRTC и что при этом выдаётся на CC6..CC0.

freddy
14.04.2018, 03:02
И как тогда можно сделать это: "Одна будет выгребать из памяти спрайтов байты и класть в видеобуфер, вторая будет задавать смещение по X,Y в пределах одного закоместа" ?
Также как сделано в видеогенераторе на 2х ВГ75. В текстовом буфере будет 1 байт - номер спрайта, 2 байт - не атрибуты, а смещение по X,Y. Нам как раз 7бит и надо. При этом ноги СС0-СС6 атрибутной ВГ75 будут заведены не на цвета и прочее, а на сумматор, который будет складывать ареса от первой ВГ75 и второй ВГ75 и выставлять на шину адреса видеобуфера кадра. Далее данные из ЗГ, т.е. теперь уже хранилища спрайтов, будут задвигаться не в сдвиговый регистр а записываться в видеобуфер кадра.
Спрайтохранилище вычитываться будет первой ВГ линейно, по классической уже схеме. В видеобуфер кадра будет попадать или линейно без заданных смещений или не линейно, когда смещения заданы.

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


Применить на практике это можно, например, так. После HRTC можно "подсунуть" ВГ75 фейковые 48 символов (а само это время использовать на обратный ход и бланкирование). А вот с 49-го по 128-й уже выдать строку нормальных символов из видеопамяти. Не факт что это вообще как-то применимо или кому-то нужно.
В свое время я от такого гемороя отказался в пользу пяти корпусов мелкой логики и более простой и скоростной логики работы DMA. Было это давно, еще когда я разрабатывал на одной ВГ75. Мысли точно не помню, но смутил более длинный, в 1,5 раза цикл прокачки экрана. А я гнался за максимальной скоростью. Еще кажись тайминги по VRTC нормально не мог соблюсти. В итоге имеем полностью железный вариант с очень жестким соблюдением промышленного стандарта VGA.

Titus
14.04.2018, 03:56
Аналогичная ситуация с длиной строки в 128 символов. Получив от ПДП 81-й символ, ВГ75 поместит его на место первого
Странно, что у чипа есть система перехода на 0 после достижения 79 позиции. Это не тот случай, когда счетчик циклический в силу степени двойки. Получается, что разработчики сделали это специально.

freddy
14.04.2018, 05:50
Если честно то я ничего из этого не понял.
Я попытался изобразить.
64993
Такое может стать народным. Но всеравно конструкция получится для большинства не подъемная. Еще не забываем о логике управления дабл буферингом буферов кадра, логике записи в спрайтовую память, в бывший текстовый буфер, а еще видеогенератор на 3-й ВГ75, который будет выводить отрендереный буфер кадра на экран... как не упрощай, получается сложно.
Вот можете взглянуть на мой блок DMA, не тормозящий процессор. Он выполнен по собственной архитектуре с "изолированной видеошиной"(с) 2017г.
64994
Для спрайтового движка как раз то что надо. Пропускная способность в текстовый буфер не менее 1,5Мб/с (375FPS!!! :v2_devil: это не менее, возможно и более :v2_devil:), полностью асинхронная, не зависимая работа проца и видеокарты. Но как же сложно и громоздко! :(
И это только вершина айсберга.

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

На горизонте виднеется лаптя размером с CAPCOMовский CPS3.

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

А еще захочется много цветов, ибо я уже говорил, что играбельность выжимается в первую очередь ними, а не высоким разрешением. А это 24-х битная шина данных с взрослым Video DACом в придачу. А схемко то раздувается, вай, вай, вай...:v2_dizzy_facepalm:
64995

CodeMaster
14.04.2018, 08:46
А еще захочется много цветов, ибо я уже говорил, что играбельность выжимается в первую очередь ними, а не высоким разрешением.
Абсолютно не согласен, цвета вторичны в графике.

freddy
14.04.2018, 09:05
Я игру без True Color не воспринимаю, зажрался. Мне никогда не хватало, например NES, а вот CPS1 хватало. И это при том что разрешение экрана и смысл игр был примерно одинаков.
Вот сравните к примеру две картинки. На какой системе приятнее выглядит?
6499764998
слева CPS, справа NES.
Игры одинаковы, а играть хочется на CPS.

Titus
14.04.2018, 09:08
http://a.radikal.ru/a30/1804/5d/6a09978ea5fd.png

Эм... Справа)

freddy
14.04.2018, 09:10
Эм... Справа)
Ну удачи тогда. Я всеже если и займусь акселем, то графика будет как слева, только VGA

Titus
14.04.2018, 09:12
Игры одинаковы, а играть хочется на CPS.
А если серьезно - сравнивать с не самым лучшим творением на NES некорректно. Лучше сравнить с теми играми (а их море), где графика выглядит замечательно, не смотря на то, что у каждого тайла не более 4 цветов. И таких примеров на NES, повторюсь, море.

freddy
14.04.2018, 09:17
А если серьезно - сравнивать с не самым лучшим творением на NES некорректно. Лучше сравнить с теми играми (а их море), где графика выглядит замечательно, не смотря на то, что у каждого тайла не более 4 цветов. И таких примеров на NES, повторюсь, море.
Возьмите UA6538, там уже все готово, прикрутить к 8-ми битке без проблем. И будет вся графика выглядеть так же замечательно, как на NES. Главное уже все изобретено.

CodeMaster
14.04.2018, 09:31
Вот сравните к примеру две картинки.

В этом сравнении нет смысла ибо сравниваются две цветные картинки да ещё и с разным качеством графики, а не просто с разным количеством цветов.

В то время как мой ответ был на совсем другое утверждение:


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

freddy
14.04.2018, 09:43
В этом сравнении нет смысла ибо сравниваются две цветные картинки да ещё и с разным качеством графики, а не просто с разным количеством цветов.
у них разрешение немного отличалось, но незначительно, можно пренебречь этим. Смысл есть. Он в визуальном восприятии.


В то время как мой ответ был на совсем другое утверждение:
Пояснить нужно бы.

CodeMaster
14.04.2018, 10:12
Пояснить нужно бы.
Графика у которой разрешение в 2 раза больше, играбельней графики у которой цветов в 4 раза больше (есно без учёта сравнения качества графики).

З.Ы. Хотя, по уму, конечно надо сравнивать не просто разрешение, а размер пикселя в ppi, но касательно исторических 8-биток понятно, что в этом показателе огромный запас до его исчерпания и до начала влияния количества цветов на играбельность.

bigral
14.04.2018, 10:56
Возьмите UA6538, там уже все готово, прикрутить к 8-ми битке без проблем. И будет вся графика выглядеть так же замечательно, как на NES. Главное уже все изобретено.

"а шо так можно было" ???? так может и малину брать сразу с mali? там и retropi! ГЫ ГЫ ГЫ... это не для этого форума совет.

Про идею с фреймбуфером + 2*ВГ75 в качестве типо blitter-а я как-бы догадывался, но уверен небыл, потому и переспросил. Blitter это как бы из другой эпохи (АМИГИ), если его делать то надо иметь цветность кратной 8-bit (для того чтобы избавиться от потребности всяких сдвиговых регистров), т.е. это уже совсем другой аппарат, в такие штуки уже добавляют 2D и 3D ускорители... Ну т.е. это совсем не про тайлово спрайтовые движки, главная суть которых сводится к минимизации количества обьема памяти \ банков памяти\ шин \ требуемой пропускной мощи (так как в таких схемах каждый байт читается 1 раз при высвечивании 1-го кадра).

Есть шото промежуточное, что долго обсуждают в темах про синклер, это идея про "слои". Суть в том что накладываются много экранов (слоев) и при реализации сдвига каждого экрана попискельно на высоту \ ширину тайла получаем возможность рисовать по 1 наложенному спрайту на слой (+ пачка неналоженных если у них совпали значения сдвигов по X Y)... система с 16 слоями по идее будет покруче любого спрайтового движка. Но это 16 буферов (MAP RAM) и 16*ВГ75... ну и пропускная моща MAP RAM в 16 раз больше чем обычно и для CPU в 10 раз больше работы .

freddy
14.04.2018, 12:46
Графика у которой разрешение в 2 раза больше, играбельней графики у которой цветов в 4 раза больше (есно без учёта сравнения качества графики).

З.Ы. Хотя, по уму, конечно надо сравнивать не просто разрешение, а размер пикселя в ppi, но касательно исторических 8-биток понятно, что в этом показателе огромный запас до его исчерпания и до начала влияния количества цветов на играбельность.

Спасибо, теперь понял мысль. В этом плане 640х400 должно вполне хватить, если не подключать к телику 42" :) Выше лезть не охота, 800x600 уже имеет пиксельклок 40МГц. Цвета можно наращивать шириной шины данных памяти спрайтов и буфера экрана (это повлечет за собой конечно же и увеличение количества мультиплексоров и шинных формирователей).


"а шо так можно было" ???? так может и малину брать сразу с mali? там и retropi! ГЫ ГЫ ГЫ... это не для этого форума совет.
Нормально для этого форума. Подключить PPU от NES точно смогут. Они еще до сих пор продаются у китайцев. И игры смогут портировать, есть куча расковыряных картриджей. Но можно, конечно, и что то по серьезнее взять. Такой вариант получится малочиповым и простым. Он имеет больше всего шансов стать народным.



т.е. это уже совсем другой аппарат, в такие штуки уже добавляют 2D и 3D ускорители...
Ах,ах,ах! :))) Надо сразу брать 3D ускоритель.


16*ВГ75... ну и пропускная моща MAP RAM в 16 раз больше чем обычно и для CPU в 10 раз больше работы .
Че так скромно? 32 ВГ75 наверно еще будет круче! Даешь кластер на ВГ75! Насчет CPU, ну если под 68k то еще ладно, а под 8080 наоборот надо чтоб работы для проца было минимум. В моем варианте проц будет занят только игровой логикой. И в промежутке VRTC выдавать данные рендереру. Для ускорения выдачи можно заюзать DMA. Если предположить что движек игры будет написан так, чтобы процессор считал 30FPS, то при тактовой 4МГц даст 133000 тактов на кадр. Это удовлетворительно, где то больше, где то меньше... 8080 с таким видеокартом-переростком удивит, но не более. Это поделка Just for Fun.

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

Кому интересно, почитайте про NES PPU http://dendy.migera.ru/nes/g02.html
Подключить его просто, лишь бы надо было кому-нибудь.

TomaTLAB
14.04.2018, 15:07
...ну и пропускная моща MAP RAM в 16 раз больше чем обычно и для CPU в 10 раз больше работы .

...а под 8080 наоборот надо чтоб работы для проца было минимум.
Вот в этом то и есть вся прелесть "слоености", тайлов и аппаратных роликов.
Можно заполнить память тайлами и больше ее не трогать (или вообще ПЗУ-картриджа туда подкинуть :) )
Заполнить слои фонов "картой уровня" и больше их особо не трогать, только регистры роликов крутить.
Всей остальной "движухи" с героями, врагами и неписями останется не так много.
А перегонять мегабайты графики из одной быстрой памяти в другую на на каждый чих на экране - "это любой дурак может" :)

bigral
14.04.2018, 17:28
Нормально для этого форума. Подключить PPU от NES точно смогут. Они еще до сих пор продаются у китайцев. И игры смогут портировать, есть куча расковыряных картриджей. Но можно, конечно, и что то по серьезнее взять. Такой вариант получится малочиповым и простым. Он имеет больше всего шансов стать народным.

Ну да погарячился для форума таки да нормально, вот OrionExt уже склепал кандидата на "народный MSX", в котором уже готовый видеопроцессор V9958 мощей круче чем NES PPU. Другие чуваки запилили MSX картридж с видеопроцом от Sega Master и переделали уже пачку игр. Ранее был прикручен V9990 (по уровню как Sega Megadrive, но правда софта под него ~2.5 штуки!).

Но это все скорее в другие разделы, явно не про "самодельную" видяху... и не про "народный" КР580 чипсет.

freddy
14.04.2018, 18:33
Ну да погарячился для форума таки да нормально, вот OrionExt уже склепал кандидата на "народный MSX", в котором уже готовый видеопроцессор V9958 мощей круче чем NES PPU. Другие чуваки запилили MSX картридж с видеопроцом от Sega Master и переделали уже пачку игр. Ранее был прикручен V9990 (по уровню как Sega Megadrive, но правда софта под него ~2.5 штуки!).
Эх, да... для самодельного железа придется самому все писать. Никто не захочет под не распространенное железо что то делать. Так и будут паять тормозные РК-клоны на современных платах и пользоваться ими. Народ здесь в основном по ностальгии ударяет. Разработчиков мало. Да и кому в голову придет делать графическое железо с современными характеристиками на ретро комплектующих? Бред. Это может прокатит на недопц. Там люди в основном разрабатывают новое, но не здесь.


о это все скорее в другие разделы, явно не про "самодельную" видяху... и не про "народный" КР580 чипсет.
Та можно и сюда, главное чтоб интересно было. Я хотел вобще свою ветку по видеокартам создать и собрать там все конструкции, а то здесь все уже смешалось, кони, люди... ускорители, ВГ75. Потом забил, пусть все здесь будет. К примеру, выложил я блок DMA, а кому оно нужно? Тишина и 4 просмотра. А разрабатывал его, тестировал и схему рисовал недели две. А все потому что пофиг, тормозит проц на рефрешах экрана, да и ладно. Никто с него максимум производительности не выжимает. И так сойдет! (с) Поэтому сидеть, все это вырисовывать, оформлять техническое описание, нет смысла. Можно для себя сделать единичный экземпляр, оставшиеся пару печатных плат скорее всего не удастся раздать и даром.

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

Чем дальше в лес, тем больше мне нравится RTG3105i. Маленькая, все в одном чипе, дешевая динамическая память, легко паять. Корпус у нее с довольно болшим шагом выводов. Ну или MC6845. Давайте тему создадим по ней, будем пробовать разогнать на VGA. У меня есть один экземпляр, больше 2Мгц никак. Хотя по мануалу должен 3Мгц :)

bigral
15.04.2018, 15:08
выложил я блок DMA, а кому оно нужно? Тишина и 4 просмотра

очень даже интересно, просто мало кто понял как оно работает, тема то не простая


RTG3105i

а где его брать? и по какой цене? другое дело "народный" avga1 или citygate d10 из советской ЕС-ки, его завезли валом в свое время... правда народ предпочитает TVGA9000 так как под него уже плату развели и давно.


MC6845

по сравнению с ВГ75 он не "советский" (а значит не годится для чистого "*****любства" http://zx.clan.su/forum/7-22-1) да и нету в нем буфера для кодов (ну т.е. похожую схему можно наваять на счетчиках, логике и тригерах как в ZX и Специалисте). Что интересно AMSTRAD таки добавил спрайты (АЖ 16! в строке) и выпустил ASIC в котором MC6845 так или иначе эмулировался вместе с обвесом... но уже позновато, и чип не продавали широким массам, только в составе CPCplus и GX4000

freddy
15.04.2018, 17:34
где его брать? и по какой цене?
там https://item.taobao.com/item.htm?spm=a230r.1.14.3.3864530dfhO0kR&id=19162942656&ns=1&abbucket=7#detail
или у меня.

TVGA9000 так как под него уже плату развели и давно.
бесполезная плата, у нас ISA нет. А чип самый любимый, только не каждый его припаяет.


по сравнению с ВГ75 он не "советский" (а значит не годится для чистого "*****любства"
Сегодня прикупил несколько советских. Он не для *****любов. Они его обычно не осиливают и на этом вся теория заканчивается, не вставая с дивана. Он кое-чем лучше ВГ75, но видеокарту я сделал на ВГ75, из-за того что он кое-чем лучше 6845. ВГ75 в свое время ведро выкинули, я подобрал :)


ну т.е. похожую схему можно наваять на счетчиках, логике и тригерах как в ZX и Специалисте
ну-ну, прошел год и началось по второму кругу! наваяйте, удивите меня.

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

Вот такие у меня теперь есть.
65021

Может сделаю на них VGA, если осилят.

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


другое дело "народный" avga1 или citygate d10 из советской ЕС-ки
от того что оно там стояло, оно не народное и не советское. d10=ega. Acumos=VGA. Они и т огда не блестали, а теперь больше не продаются и купить
их труднее Realtekов и Tridentов.

shattered
25.04.2018, 22:20
Подозреваю, что 6102 сделали настолько умно, насколько было надо, а в VT52, который он эмулирует, цветов не было. Зато есть NVRAM на 1024x4 бита (КР1601РР1, которая, к слову, не 100% клон своего аналога ER2401 - сигналы и распиновка отличаются, совпадает только разрядность и размер).

Если удастся расковырять протокол клавиатуры МС7002 (или появится ее схема с прошивкой) -- 6102 должен заработать в MAME, а пока он работает только на прием:


Оказалось, что все просто. МС7002 - клон клавиатуры VT100, протокол такой же. Кстати, есть ее обзор:


https://www.youtube.com/watch?v=EYr3j21aKvg

1Ж24Б
16.05.2018, 07:53
У кого-нибудь нет "лишней" платы варианта терминала без параллельного порта ? Мне что-то не везёт, самый первый вариант из темы не удалось запустить на самодельной печатной плате :v2_dizzy_facepalm: ВГ75 нормально не инициализировалась.

freddy
16.05.2018, 17:03
плата есть, такая как в 231 посте. Запустить ее не разобравшись сложно. Но некоторым везло и она работала сразу, без долгих ночей с осциллографом :)

freddy
01.10.2018, 18:42
Двух ВГ-шное видео отлично себя показало за последние полгода. Работает очень стабильно и функционально и просто в наладке.
В архиве актуальная на текущий момент прошивка, схема и рисунок адд-он карты. Карта напаивается верхом на ВГ-шку, остальные сигналы проводками к соответствующим выводам микросхем, все подписано. Удачи.
66435

Lethargeek
02.10.2018, 05:28
Для спрайтового движка как раз то что надо. Пропускная способность в текстовый буфер не менее 1,5Мб/с (375FPS!!!
непонятно, нафига при этом, собс-но, спрайты, раз отрисовка всё же в полноэкранный буфер?? атомный колёсный авианосец :v2_wacko:


Графика у которой разрешение в 2 раза больше, играбельней графики у которой цветов в 4 раза больше (есно без учёта сравнения качества графики).
еще помню старые пц-игры с поддержкой разных видеокарт, где пытались отобразить одну картинку в 320x200x8 и 640x400x4 - второе не впечатляло

CodeMaster
02.10.2018, 08:43
еще помню старые пц-игры
Я тоже помню когда увидел цвет на персоналках подумал что он решает, но довольно быстро осознал, что часто только мешает. Он необходим там где интерфейс сделал исключительно под цвет.


одну картинку в 320x200x8 и 640x400x4 - второе не впечатляло
"одну картинку" - нечеткое определение, надо сравнивать, смотреть, если картинку просто прозуммировали х2 и убрали цвета, то вполне может быть, а если перерисовали, то надо смотреть как.

Lethargeek
02.10.2018, 11:52
если картинку просто прозуммировали х2 и убрали цвета,
неее, убрав цвета, нет смысла зуммировать, тогда брали просто 320x200x4
а то пытались шахматкой цвета имитировать + сглаживали контуры итп
космосим какой-то помню, как бы не wing commander, квесты, стратежки
но названий в голове не осталось, всё на сидюках старых

freddy
04.10.2018, 16:26
непонятно, нафига при этом, собс-но, спрайты, раз отрисовка всё же в полноэкранный буфер?? атомный колёсный авианосец
Понятно. Процессору чтоб не париться, вобще не возможно писать в экранный буфер, заполнением экранного буфера будет заниматься 2d ускоритель. Процессор только координаты спрайтов положит в текстовый буфер. Колесный авианосец здесь не встречал, но мне с него реактор нужен.

Lethargeek
06.10.2018, 21:41
Понятно. Процессору чтоб не париться, вобще не возможно писать в экранный буфер, заполнением экранного буфера будет заниматься 2d ускоритель
НЕпонятно, нафига при этом, собс-но, СПРАЙТЫ одного/кратного размера, формы и цветности

bigral
10.10.2018, 18:13
НЕпонятно, нафига при этом, собс-но, СПРАЙТЫ одного/кратного размера, формы и цветности

Раз автор молчит, осмелюсь озвучить свое понимание. По сути предлагается распаралелить шину видеопроцессора (тот который shifter в RGB регистр) и видеоускорителя (тот который рисует в теневой frame buffer во время вывода изображения из основного frame buffer-a), это классический double buffering. Почему рисуют 2xВГ75 а не i8080(тормоз) напрямую, потому что у них внутри double buffer для 80 кодов и пока в один буфер данные заливает DMA то из другого коды tile-ов \ смещение координат tile-ов + 4 битный счетчик младших адресов могут поступать на шину адреса tile-RAM и данные с выхода tile-RAM могут оказаться на входе RAM теневого буфера (счетчик адреса для RAM теневого буфера и механизм его обновления надо будет соорудить отдельно, возможно тут пригодятся те же 2шт ВГ75 в которых есть атрибуты, еще надо просуммировать в этот счетчик X,Y смещение заданное второй ВГ75, кроме того наверно к каждой реальной точке tile-a нужно добавить 1 bit маски а иначе тайлы будут затирать уже нарисованную картину своим "квадратиком"). Короче для i8080 это выглядит как некий турбо рисовальщик тайлов со смещением. Структура экрана конечно при этом для i8080 будет нелегкая (своего рода display list как на atari 8bit или амижный copper list). Памяти надо будет дофига (если много цветов).

Lethargeek
10.10.2018, 22:22
bigral, это не ответ на вопрос "нафига" (делать непременно именно так, со всеми косяками хардварных спрайтов)

bigral
11.10.2018, 13:41
bigral, это не ответ на вопрос "нафига" (делать непременно именно так, со всеми косяками хардварных спрайтов)

У hw спрайтов нету косяков (может я их не вижу?) Но тут и hw спрайтов нету (они сильно требовательные по железу с точки зрения автора, потому он решил влепить жырный двойной буфер для экрана а чтоб он не тормозил шину процессора ему выделенна отдельная шина). А про "нафига", что тут сказать, а как иначе?

MM
11.10.2018, 14:24
Ну может еще приделать вместо ПЗУ шрифтов СОЗУ, загружаемое ЦП при старте М-ЭВМ.
Для чего ?
1. Подгружаемые шрифты/знаки, в т.ч. для русских.

Error404
11.10.2018, 17:33
Ну может еще приделать вместо ПЗУ шрифтов СОЗУ, загружаемое ЦП при старте М-ЭВМ.
Для чего ?
1. Подгружаемые шрифты/знаки, в т.ч. для русских.

Доступ в это СОЗУ выльется еще в 5-10 МСХ россыпухи. Проще завести один регистр (аппаратный или прямо в Меге128 если есть IO пины) и соединив его со старшими адресными ногами более емкого ПЗУ странично выбирать шрифты. В 28-ногую 27с512 поместится 16 шрифтов - на все случаи жизни. :)

Lethargeek
12.10.2018, 04:15
У hw спрайтов нету косяков (может я их не вижу?)
их полно:
- ограниченная форма
- ограниченные размеры
- ограниченная цветность
- ограниченное кол-во в строке/в кадре
- нерациональное расходование памяти
- нерациональная нагрузка на шину
- ...
в разных вариациях-комбинациях


Но тут и hw спрайтов нету
а часть их косяков - есть (притом безо всякой на то нужды)


потому он решил влепить жырный двойной буфер для экрана а чтоб он не тормозил шину процессора ему выделенна отдельная шина)
то есть он для имитации спрайтов влепил то, неприемлемая стоимость чего исторически и была причиной спрайтовых движков :D


А про "нафига", что тут сказать, а как иначе?
очевидно же - нормальный человеческий блиттер
он, поди, еще и проще бы получился

Xrust
28.02.2019, 15:47
Вот такие у меня теперь есть.
65021

Может сделаю на них VGA, если осилят.


Удалось что-нибудь сделать?

freddy
28.02.2019, 20:30
Сделать удалось. 3,2 МГц cclk наш аналог выдает, но с большим трудом. Все же ВГ75 предпочтительнее. Телевизионная развертка мне не интересна

Xrust
28.02.2019, 21:51
freddy, можно подробности? Что значит с большим трудом? Греется? Приходится подбирать рабочий экземпляр?

freddy
17.03.2019, 05:42
Да, пришлось подобрать рабочий экземпляр. И по схемотехнике там не все хорошо с записью в экранную область в графическом режиме. Надо и синхронизировать и буферизировать иначе те же грабли, что и у инженеров IBM. CGA snow и все такое. В общем ВГ75 предпочтительнее.

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

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

Xrust
17.03.2019, 13:17
VT100 выпилю за ненадобностью
Ммм... А что останется? Просто видеокарта?
Недавно собрал вашу плату терминала - заработала почти сразу :v2_thumb:

freddy
17.03.2019, 15:09
Ммм... А что останется? Просто видеокарта?
Недавно собрал вашу плату терминала - заработала почти сразу :v2_thumb:

Останется цветной откормленный VT52- переросток с koi8r и cp866.
Поздравляю к стати со сборкой. Люди просили ретро, чтоб без атмеги, дам им ретро на 8080. Видеокарты отдельно не будет, никому не нужна

Xrust
17.03.2019, 16:18
freddy, отлично. ОЗУ сколько предусмотрено? Печатки будете заказывать?

freddy
17.03.2019, 17:43
Так всё уже есть. Печатка видео генератора и самого компа. Видеопамяти хватит 8кб, у компа 64кб. Я планировал комп с видеогенератором мгтфом спаять

freddy
26.05.2019, 18:20
Сделал видеокарту. Выглядит стремно, но работает.
Видеопамяти 32кб или 8 страниц, можно сделать значительно больше, но пока не знаю зачем.
2 кодовые страницы, но можно и больше, тоже не знаю зачем.
Все также 8 цветов фона и 8 цветов символа, экран 80х25, 256 одновременно отображаемых символов, все как обычно.
Все упрятано во внутреннюю видеошину, поэтому DMA не тормозит процессор, это не как обычно.
В наружу видеокарта торчит в виде 4кб памяти, дешифратор встроенный и переключается с шагом 4кб. Это хорошо для недоразумения типа Радио86-РК, без IOWR и IORD :)
Запись допускается как в отображаемую страницу так и в тень. Короче весь функционал ранее опубликованного блока DMA тут реализован.
Адресация удобная.
ADR+0000-0FA0 - видеопамять текущей страницы (по четным адресам код символа, по нечетным его атрибуты)
ADR+0FE0 - переключалка видеостраниц для записи и знакогенераторов
ADR+0FE8-0FE9 - регистры ВГ75
ADR+0FF0-0FFF - регистры ВТ57
ADR - это стартовый адрес дешифратора (выставляется в верхней половине адресного пространства)
Вобщем в конце каждой страницы с адреса 4064 по 4096 лежит все необходимое.
Эту видеокарту можно применять в X86, но переделать дешифратор адресов, видеобуфер должен быть там -> 0B800h, ну и написать INT10h
69094
Схему потом покажу, тем более она здесь по кусочку уже выкладывалась.

freddy
27.05.2019, 15:13
Вот постарался изобразить схему. Лаптя приличная ;) Но до CGA я еще не дотянул, эта видяшка вполне еще приемлемая ;)
Продолжу техническое описание.
Байт данных и байт атрибутов не должны содержать 1 в старшем разряде, а то ВГ75 воспримет это как управляющий код.
Вообще писать туда управляющие коды можно, для этого даже есть небольшой запас объема видео страницы, но это должно быть осмысленными действиями.
Байт атрибутов: 0 FB FG FR BB BG BR ZG, где F RGB-цвет символа, B RGB-цвет фона, ZG-старший бит кода символа.
Байт данных соответственно 0XXXXXXX, где X-младшие 7бит кода символа.

Байт конфигурационного регистра CP0000XXX, где CP- кодовая страница(0-CP866,1-KOI8R), X-в какую видеостраницу будут записываться данные.
Страница для отображения переключается в регистре стартового адреса DMA. Ну Вы поняли :) через механизм склейки пересылаемых блоков.

А теперь расскажу как же оживить этого монстра.
Для начала в +FE0 записываем, к примеру 0, это кодировка CP866 и 0-вая видеостраница.
Чистим видестраницу, записывая с +000 до +FA0 в четные адреса 'пробел', в нечетные 70H.

Пора запустить видеогенератор:
0 --> +FE9
79 --> +FE8
0b10011000 --> +FE8
0FH --> +FE8
0b00001001 --> +FE8
0b11100000 --> +FE9
тут надо подождать не менее двух CCLK, а то ВГ75 не поймет че с нее хотят.
0b00100001 --> +FE9
и, о чудо, появится развертка и оно запустится! ;)
В исходном состоянии после сброса, DMA на ручнике. Это очень хорошо для нас, можно с видюхи пока еще читать.
сбрасываем пятый бит регистра статуса ВГ75
<-- +FE9
а теперь ждем пока он снова установится, постоянно читая +FE9
установился, отлично. Начинаем быстро готовить DMA скармливать видеостраницу (пусть будет 0-вая):
80H --> +FF8 ; потомучто влом мне отдельно 3 канал программировать.
0 -- > +FF4 ;low start adr
0 -- > +FF4 ;high start adr
9FH -- > +FF5
8FH -- > +FF5 ; couter + mode
A4H --> +FF8 и еще раз автозагрузка и старт канала 2.
И усе! Оно готово, теперь в него можно писать. Чтение бессмысленно с этого момента.
69157

Error404
28.05.2019, 10:10
Спасибо, freddy!
Это как раз то что я хочу от видеокарты на рассыпухе времен РК-86 и что мы тут долго обсуждали. Народ, давайте закажем PCB "заводского вида"? Отличное устройство получится.

В качестве маленькой рацухи стесняюсь предложить такое: свободные разряды D3-D4-D5 чипа U7 (регистр страниц ОЗУ/ПЗУ) вывести через резисторы и диоды к транзисторам Q1-Q4-Q5 смешав с тамошним каналом для получения фиксированных на весь видеокадр градаций (итого получится 8 цветов из палитры 64 цвета), а свободный разряд D6 таки дотянуть до A13 ПЗУ U29 (получив сигнал CP2) чтобы фонтов было не 2, а 4 (в случае если ПЗУ 27128 или более емкая). Оно конечно и потом можно 4 проводника кинуть, но лучше сделать плату без лапши МГТФ.

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

ПЗУ разводить сразу для 27с512 (такие сейчас на АЛИ дешевы и весьма быстрые), и по этому же месту можно ставить менее ёмкие. Старшие разряды вывести на 3-игольные джамперы (gnd<->5В). Чтобы кому надо прошили и как-то могли использовать всю ПЗУ. Отдельные дополнительные регистр палитр или страниц ПЗУ (более высокой разрядности) ИМХО не нужны, ибо лучшее враг хорошего. В принципе, мне даже ОЗУ хватило бы 16к (4 страницы по 4к) - например на дешманских "узких" статических ОЗУ с кэшей i386. Кстати, ОЗУ было бы правильно развести в виде "узкая внутри широкой" чтобы можно было ставить оба типа корпусов DIP.

Xrust
28.05.2019, 10:52
Если будет плата, приобрету охотно экземпляр.

Error404
28.05.2019, 13:13
Вот постарался изобразить схему.
69097

Вопросик. Для чего служит узел на ИД7(U4),диодах и панели подписанной CONN-DIL16 48к..62к ?
Узел задержки на 6 инверторах ЛН1(U17) он строго на 6 элементах нужен (сходу тоже не понял для чего оно), или на +- некотором меньшем количестве свободных элементов? Скажем, 2-3-4 эл. достаточно будет?

Схема по нижнему краю обрезана - часть связей уходит вниз под обрез страницы.

freddy
28.05.2019, 18:09
Схема по нижнему краю обрезана - часть связей уходит вниз под обрез страницы.
перевыложил схему, она слегка, не критично обрезалась снизу при конвертации в PDF. Скачайте еще раз.


Вопросик. Для чего служит узел на ИД7(U4),диодах и панели подписанной CONN-DIL16 48к..62к ?
по этой схеме оно заточено под машины с 64кб адресного пространства. U4 - это дешифратор стартового адреса, переключалка 48-64к -это выбор стартового адреса. Шаг на схеме 2кб, поэтому выбор двумя джампереами и выравнивание по 4кб сегментам. 2кб шаг оказался здесь так как этот блок DMA также обязан работать с простеньким видеогенератором на ОДНОЙ ВГ75.


Узел задержки на 6 инверторах ЛН1(U17) он строго на 6 элементах нужен (сходу тоже не понял для чего оно), или на +- некотором меньшем количестве свободных элементов? Скажем, 2-3-4 эл. достаточно будет?
4 наверно хватит, я попробую. Смысл этого узла в том, чтобы на 11 вывод u1b фронт сигнала приходил позже, чем на 13-й, иначе не сформируется сигнал записи. В целом конструкция этого узла неудачна.

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


ПЗУ разводить сразу для 27с512 (такие сейчас на АЛИ дешевы и весьма быстрые), и по этому же месту можно ставить менее ёмкие.
С ПЗУ у меня здесь что то не срослось. Использую флешки 28й серии, которых тоже полно на али и не дорого.

В качестве маленькой рацухи стесняюсь предложить такое: свободные разряды D3-D4-D5 чипа U7 (регистр страниц ОЗУ/ПЗУ) вывести через резисторы и диоды к транзисторам Q1-Q4-Q5 смешав с тамошним каналом для получения фиксированных на весь видеокадр
И тут тоже облом. Во время VRTC на выходе видеокарты должен быть уровень черного. Поэтому при активном сигнале VSP нужно как то гасить то, что окажется на этих транзисторах. У меня ради этого даже добавлен отдельный триггер u37a, который гасит u36, в итоге на u33 попадают нули и на транзисторы тоже.
Спасет только полноценный RAMDAC. Его я не делал, ибо и так понимаю, что в здравом уме эту лаптю никто не будет собирать. С рамдаком лаптя станет еще больше и сложнее. Если делать на рассыпухе в стиле 80-х, то это будет какая то скоростная и мелкая статическая ОЗУ, на адреса будет приходить 6 бит выбора цвета, на данных будет ЦАП и с него уже будут кормиться эмиттерные повторители.

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


ПЗУ разводить сразу для 27с512 (такие сейчас на АЛИ дешевы и весьма быстрые), и по этому же месту можно ставить менее ёмкие.
С ПЗУ у меня здесь что то не срослось. Использую флешки 28й серии, которых тоже полно на али и не дорого.

В качестве маленькой рацухи стесняюсь предложить такое: свободные разряды D3-D4-D5 чипа U7 (регистр страниц ОЗУ/ПЗУ) вывести через резисторы и диоды к транзисторам Q1-Q4-Q5 смешав с тамошним каналом для получения фиксированных на весь видеокадр
И тут тоже облом. Во время VRTC на выходе видеокарты должен быть уровень черного. Поэтому при активном сигнале VSP нужно как то гасить то, что окажется на этих транзисторах. У меня ради этого даже добавлен отдельный триггер u37a, который гасит u36, в итоге на u33 попадают нули и на транзисторы тоже.
Спасет только полноценный RAMDAC. Его я не делал, ибо и так понимаю, что в здравом уме эту лаптю никто не будет собирать. С рамдаком лаптя станет еще больше и сложнее. Если делать на рассыпухе в стиле 80-х, то это будет какая то скоростная и мелкая статическая ОЗУ, на адреса будет приходить 6 бит выбора цвета, на данных будет ЦАП и с него уже будут кормиться эмиттерные повторители.

Если будет плата, приобрету охотно экземпляр.
пока над этим думаю, какого формата и под что должна быть плата. Сейчас блок DMA разведен под шину моего компьютера на 8080.
Дальше не знаю... Летом, если работа позволит, потихоньку хочу написать функции INT10h и тогда плата станет ISA8. И будет достойной заменой заканчивающимся трайдентам. Да... подвалы у китайцев не бездонны... А отечественных ВГ75 можно кучку за 100р купить и пока навалом.

Error404
28.05.2019, 18:30
С ПЗУ у меня здесь что то не срослось. Использую флешки 28й серии, которых тоже полно на али и не дорого.


Уф, опечатался, конечно же 28с512 лучше всего, которые электрически стираемые.

Xrust
28.05.2019, 22:04
Сейчас блок DMA разведен под шину моего компьютера на 8080.
Такой вариант вполне устраивает.

freddy
28.05.2019, 22:12
Уф, опечатался, конечно же 28с512 лучше всего, которые электрически стираемые.
Я вообще подумываю о том, чтобы ПЗУ от туда убрать. Вместо него хочется ОЗУ 64кб + коммутатор шин на 4шт КП11 и 1шт ВА86.

freddy
01.06.2019, 18:51
4 наверно хватит, я попробую. Смысл этого узла в том, чтобы на 11 вывод u1b фронт сигнала приходил позже, чем на 13-й, иначе не сформируется сигнал записи. В целом конструкция этого узла неудачна.
Переделал я этот формирователь сигнала записи по другому. Теперь там -1 корпус, нет ЛН1. На дворе 2019 год, стремно как то выглядело такое решение.
Упростил чуток дешифратор базового адреса, теперь он разбивает верхние 32к на 8 сегментов. В каком сегменте будет видеокарта, выбирается теперь ОДНИМ джампером J1. Если вдруг у кого то пересекается адресное пространство видеокарты с ОЗУ или еще чем-либо на материнской плате, то предусмотрите на материнке блокировку сигнала ~CS. Для этого в схеме осталось 2 свободных 2И-НЕ и 2шт 2ИЛИ.
Схему перевыложил. Править уже ничего не охота, работает, да и ладно.

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

Планы на далекое будущее: графический режим и RAMDAC ;)

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

Смешно, что это в разделе для начинающих )))))

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

Теперь немного о том как переключать странички, которые отображаются.
Программируем стартовый адрес 3 канала DMA
ADR_LOW --> +FF6
ADR_HIGH --> +FF6
где ADR - это начала страничек и может принимать значения 0000h,1000h........7000h
делать это можно в любое время.

Как ворочать курсором:
0b10000000 --> +FE9
char_number -->+FE8
row_number --> +FE8

Все, управление изложил.

Error404
01.06.2019, 22:46
Если вдруг у кого то пересекается адресное пространство видеокарты с ОЗУ или еще чем-либо на материнской плате, то предусмотрите на материнке блокировку сигнала ~CS.

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

Предлагаю отцепить дешифратор портов управления (FE0..FFF) от общего поля 4к странички видео-ОЗУ. Или хотя бы предусмотреть вынос дешифратора регистров из 4к как опцию без резки дорожек (добавить перемычку на вывод U16) - для случая когда пользователь снимет перемычку с селекта приходящего на U16, сам допаяет дешифратор (на плате видеоконтроллера сделать небольшое монтажное поле), и подаст с него требуемый селект на вывод U16.

Поясню. Есть компы где используются все 64к памяти под ОЗУ (например Орион или СпециалистМХ или подобные CPM-компы). Это не мешает запараллелить штатное ОЗУ ПК с видеокартой (при этом в некоторой 4к-области пишется параллельно и в ОЗУ и в видеокарту, читается же из ОЗУ т.е. как бы из видеобуфера). А вот при чтении из регистров ВТ57 и ВГ75 видеокарты, штатное ОЗУ мешаться не должно. Тут или надо делать заметное внедрение в схему ПК чтобы ВУ отключали штатное ОЗУ от шин (что штатно есть далеко не везде и не всегда просто реализуемо), или, что правильнее, размещать регистры "FE0..FFF" в области портов управления (в Орионе есть такая область в отдельных 256 байтах где ОЗУ не мешает читать из ВУ, и т.к. там всего 256 этих байт, и куча устройств, то крайне желательно занимать там минимум), а это будут адреса за пределами области 4к видеобуфера.

Также нужен какой-то сигнал управления видеокартой (отдельный или может быть в виде бита в регистре страниц ОЗУ/ПЗУ U7) при включении которого не происходит запись в ОЗУ видеокарты (управляемый снаружи гейт для сигнала ~VMW1 записи в 62256 - на одном из оставшихся 2 свободных 2И-НЕ и 2шт 2ИЛИ). Это нужно для того, чтобы для систем с 64к ОЗУ можно было управлять - когда идет запись в видеокарту, а когда "вместо видеобуфера" выполняется и пишет в ОЗУ программа в TPA (например когда в ПК несколько страниц ОЗУ по 64К, буфер помещаем только в одной из них, в других страницах выдавать этот "блокирующий" сигнал - например с регистра страниц ОЗУ - и в других страницах использовать все 64К под выполнение программ)

Error404
02.06.2019, 12:14
Для этого в схеме осталось 2 свободных 2И-НЕ и 2шт 2ИЛИ.


Еще 3 свободных ЛП5 (U34). Или от U34 получилось избавиться?

freddy
02.06.2019, 13:43
Еще 3 свободных ЛП5 (U34). Или от U34 получилось избавиться?
ооо! про нее то я и забыл. Тогда еще есть 1штТМ2 (U37B) и 2шт ЛИ1 (U20C,D)!

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


(например когда в ПК несколько страниц ОЗУ по 64К, буфер помещаем только в одной из них, в других страницах выдавать этот "блокирующий" сигнал - например с регистра страниц ОЗУ - и в других страницах использовать все 64К под выполнение программ)
там есть два свободных входа в U4, подключите туда свой маппер, чтоб он блокировал выборку видеокарты.

А вот при чтении из регистров ВТ57 и ВГ75 видеокарты, штатное ОЗУ мешаться не должно.
оно не было на такое рассчитано. А если подумать, зачем читать видеобуфер?


Предлагаю отцепить дешифратор портов управления (FE0..FFF) от общего поля 4к странички видео-ОЗУ
вынести это в адресное пространство ввода\вывода - самое логичное решение. Но я уже вижу как наполняются слезами коровьи глаза владельцев клонов 86РК. ;)

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

После инициализации видеокарты, от нее вообще можно сигнал ~RD отключить, чтение ей больше не нужно. Используйте свободный бит U7 и свободную ЛЛ1

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

К стати если у Вас уже в системе есть маппер, то дополните его еще одной страницей, в которой будет только видеокарта и часть системного ОЗУ.

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

Хочу рассказать Вам еще об одном упрощении схемы. Когда то у этой видеокарты было и чтение. Стоял еще один ТМ2 который синхронизировал ~RD так же как и U1 синхронизирует ~WR. Вместо ВА86 был ИР82. И вторым чтением оттуда извлекались данные. Потом я это упростил, так как читать с видеобуфера было не чего.

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

Пора сказать о самом, самом БОЛЬШОМ ОБЛОМЕ, который случился из-за коровьих глаз пользователей *****машин. Этот облом из-за отказа от использования адресного пространства портов ввода/вывода. В результате я заработал себе гембель в виде разрывов в адресном пространстве видеопамяти, что повлекло за собой невозможность циклического аппаратного скроллинга экрана. Вот это ОБЛОМИЩЕЕЕЕ! А все остальное, включая и усложнение видеошины, это цветочки ))))

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

Печатную плату разводить наверно буду сам. :(

Xrust
02.06.2019, 15:34
freddy, поясните насчет использования диодной логики. Например, зачем диод на выходе U26? В остальных местах, как я понимаю, они для оптимизации числа корпусов?

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

А R55 зачем?

freddy
02.06.2019, 15:53
Например, зачем диод на выходе U26?
под текущий режим не нужен.


А R55 зачем?
Нужен для установки 0 при активном VSP.


В остальных местах, как я понимаю, они для оптимизации числа корпусов?
меньше места занимают

Xrust
02.06.2019, 16:07
freddy, посмотрите. Я правильно понял логику формирования синхроимпульсов или как обычно накосячил?

https://lh3.googleusercontent.com/FsTBkEHLsy8WAL5pIlWjVwe8y7iqMT90RFGQNegn7TOU5GHAzH EIXVlazDoir8nR1EBezUfVEjMEF6SruKyUg6icoHCFFBYEPwVp 5ImspebBnS_JKNyvVpfbNgYzrx-Ra62apfvrecdJ6lzInlSdnMmED6AqoyIeZUkJYfDuPFQhK29Yx 5OZFisCDgJiGbbUWEhNoe1K5L1s88It2u9vFUUs8oyh9aGz7qe ivhJA487iSR5jp98mQPJDobQ46NoydbZFdiy3tawk5imQKgRge GuePfGsHtDrTjr6sLsagPlAcq6_QZK2Woz79WjgpzuW633pf8j OxW-HtTqj4XywHrmH5JXd8EmeuVLqng-2ESFOWGR785nfzh9SpGD9qAjs7Eg2ombd9oP_7fiAoQRSDfO7a kqaOwDjl3JwIfCDpgf8eJRs_ST2FBMZb2oneNlICNg_RwK3_AK ZccF7Z9DgaurtJ8pzBoMOIPNqR_Gy8HMYN9SeEIhSZM15QbEeO z4OqqER8wbfwAlaT32n3FNJJ8CWXWmOFJR1ubSzUVOtmSkzGYq ndGqXxxMLFOtILZFotP5xUl3Ove7PKkEfnr4uvWh6j-n-cv6NHz2xpg3oxMn6wUPxeH0yfKGiuBcINC14SE8BsjjdtQzS-d3OT3YPo6UKh-XEVZE=w1207-h711-no

freddy
02.06.2019, 17:20
так тоже работать будет

Xrust
02.06.2019, 20:06
freddy, D14 нужен только для задержки?

freddy
03.06.2019, 03:27
Он стоит между выходами записи с шины и dma. Iowr у dma это выход записи в внешнее устройство. Замыкать их конечно же нельзя.

freddy
04.06.2019, 13:36
Error404, В самом простом случае в ней можно не ставить ни один джампер после U4 и завести сигнал выборки видеокарты с дешифратора адресов материнской платы. Если же U4 устраивает, то объединив неиспользованые диоды после U4, можно завести сигнал выборки на ОЗУ материнки. И третий вариант это использовать запрещающие сигналы для U4, выводы 4,5. Сюда можно подавать запрет от дешифратора адресов/маппера материнки.
Итого считаю, в плане подключения, 3 варианта достаточно. Буду разводить плату как есть на данный момент.

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

В качестве примера я расскажу как ее подключить к своей машине на 8080. Возьмите схему, чтобы лежала перед глазами, буду ссылыться на номера корпусов.
Исходные данные: компьютер без дешифратора адресов, использующий все 64к под ОЗУ.
Хочу чтобы видеокарта висела с 56к по 60к.
Вариант 1 и 3 не подходит, так как нет на моей машине своего дешифратора.
Вариант 2 подходит. На видеокарте ставлю перемычку 56к. Остальные диоды соединяю вместе, и подтягиваю резистором к +5. это и будет сигнал ~R1.
На материнской плате компа отрезаю ~CE(~R1) U7 от схемы и подаю ~R1 с видеокарты. И все, задание выполнено.
При обращении к старшей половине ОЗУ будет вырезаться 4к под видео, ничего друг другу не мешает.

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

1 вариант наверно самый лучший для РКашечников и клонов, вверху у них всеравно ОЗУ нет, и дешифратор халявный на плате есть.

Xrust
12.06.2019, 10:47
freddy, поясните логику работы формирователя горизонтальных и вертикальных синхроимпульсов. Почему такая "навороченная" схема со счетчиками и дешифраторами?

freddy
12.06.2019, 16:17
Почему такая "навороченная" схема со счетчиками и дешифраторами?
Потому что мой опыт подсказывает следовать стандартам. Ведь монитор - это вполне себе стандартизованное устройство. И чтобы он съел видеосигнал, последний должен быть тоже стандартным. Так вот о стандарте:
У меня 640х400@70Hz. Pixelclock 25.175MHz. Размер строки: длина линии 800 точек, видимая часть 640 точек, передний бордюр 16 точек, длина синхроимпульса 96 точек, задний бордюр 48 точек. Переведу в знакоместа: 80+2+12+6=100. Теперь смотрим как я запрограммировал ВГ75.
0 --> +FE9 =сброс
79 --> +FE8 =80символов в строке
0b10011000 --> +FE8
0FH --> +FE8
0b00001001 --> +FE8 =20символов сигнала обратного хода строчной развертки
0b11100000 --> +FE9

Как бы получается всего 100 символов. Да? А теперь берем схему и смотрим, как в интервал обратного хода строчной развертки вставить синхроимпульс.
Все интервалы четные, поэтому чтобы упростить "навороченую" схему, делим CCLK на 2.
По переднему фронту HRTC разрешаю считать CCLK/2 счетчику U22. Нулевой импульс ничего не делает, вывод Y0 U23 не подключен, это передний бордюр 2CCLK.
Потом импульсы 1,2,3,4,5,6 формируют отрицательный строчный синхроимпульс 12CCLK. Потом схема стопорится установкой триггера U24A и ВГ75 досчитывает оставшиеся 6CCLK заднего бордюра, а потом опять начинает выводить строку 80CCLK.
Кадровая синхронизация работает аналогично, читайте VGA стандарт и станет понятно. Там я немного подрезал задний бордюр, кварц у меня однако был только на 25МГц, но стандарт надо было соблюдать.

P.S. Предложите не "навороченную" схему. Я с радостью применю в своей видеокарте. Главное, чтоб стандарт видеосигнала соблюдался, колхозники идут лесом.

Anubis_OD
12.06.2019, 16:45
Я делал вот так:
https://zx-pk.ru/threads/26223-i-eshche-odna-rk-shka.html?p=868239&viewfull=1#post868239
но в принципе аналогично, только на сдвиговых регистрах.

И на пост выше описание про программирование ВГ75 и картинка с осциллографа.

freddy
12.06.2019, 16:52
но в принципе аналогично, только на сдвиговых регистрах.
доделали свою схему до конца?

freddy
13.06.2019, 15:21
Я тут немного поколдовал над схемой и оказалось таки возможно сделать трансформера с режимом доступа через порты ввода/вывода и память или только через память. Цена вопроса 8 джамперов на выбор адреса портов,4 джампера в схеме и 1шт тм2. Циклический аппаратный сдвиг экрана будет возможен по всем 32к. Я это все к чему написал... Есть смутные сомнения,что эта видяха нужна только тем кому нужна. Поэтому я сразу в неё заведу три сигнала управления, кроме ~RD. Оно делалось для меня и мне как раз надо вариант с работой через порты. У кого нет портов, но собираются эту видяху использовать, напишите. Возможно это повлияет на развитие проекта.

freddy
14.06.2019, 18:46
попробовал нарисовать, перемычки стоят в положении "мапить в память".
69312
при этом на J4 и J1 джампера должны стоять одинаково.
Если же JP1-JP9 переставить в положение "взрослый комп", то на J4 нужно выбрать диапазон портов ввода вывода (32 штуки, соответственно 2 перемычки) и JP1,JP2, чтоб этот же диапазон отзывался на внутренней шине.

Anubis_OD
16.06.2019, 17:19
доделали свою схему до конца?

На CDLP так и не перенес.. В todo листе...

freddy
25.08.2019, 23:17
Дошли руки до RAMDAC. И он будет на логике. 16 ир82 и 2 ид7. Цветов будет 8 из 256 на символ и столько же на фон. Возможно ир82 заменю на 74hc573, так как недавно в одной прдсобке нашёл целую бобину hc573 в so20 корпусе. Очень обрадовался :)

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

Перепрограммировать можно будет на лету. Двухпортовость однако очень хорошо.

PVV
11.09.2019, 21:12
Задался я на днях вопросом реализации самостоятельной видео карточки на ВГ75, с прицелом на реализацию текстовой CGA на двух ВГшках для 16и битной системы на i8086. Для начала за базу взял РК-86 и 'выпилил' из него видео часть. И уже когда все завелось, в процессе гугления по ВГ75 наткнулся на эту тему. Увидел уже готовые реализации моих идей и свои ошибки, тем не менее, вот как можно еще разрулить доступ ЦП к видео системе. Я задействовал сигнал Ready ЦП, и когда процессор обращается к видео, то при активном видео ДМА он по Ready тормозится, как только ДМА завершает пересылку, то ЦП завершает свою операцию. И еще сделана задержка начала ДМА если ЦП в этот момент работает с видео. Прерывать же ДМА я как то не додумался. Сейчас же думаю скрестить две идеи, по Ready тормозить ЦП, останавливать ДМА, отпускать Ready, и дальше продолжать ДМА.
Схема показывает концепцию, но в Протеусе она работает. Разница в скорости при выполнении ролика экрана D,3FF ~10% в пользу внешней схемы видео :). Для оригинального РК она не подойдет, тк ДМА еще и рефрешем ОЗУ занимается, но для варианта на SRAM вполне.

PVV
12.09.2019, 00:05
Скрестить две идеи получилось очень просто (пришлось только dll ВТ57 поправить), хотя на схеме все выглядит закручено, надо на свежую голову все обдумать.
https://i.ibb.co/qmHVHNZ/RK-VG75.png
на картинке хорошо видно как останавливается ДМА, ЦП делает то, что он хочет и ДМА продолжает работу...

freddy
30.09.2019, 10:52
Скрестить две идеи получилось очень просто (пришлось только dll ВТ57 поправить), хотя на схеме все выглядит закручено, надо на свежую голову все обдумать.
Спасибо за интерес к теме.
Вобщем то все давно уже реализовано и без вейтов, используя видеошину с конвейером. Скорость видеошины сильно избыточна для таких тормозов как 8080 и 8086. Какие там уж вейты ;) Уже даже есть несколько версий видеоадаптера, только все не хватает времени выложить материал. С прицелом на CGA проще сделать на MC6845, переделав немного схему стандартного адаптера MDA. Заодно и готовый видеобиос на нем заработает. Я то к своему адаптеру на 2xВГ75 так и не сподобился написать его.

freddy
04.10.2019, 16:24
70233
Оно сейчас выглядит так. Все не было времени сфотографировать. Отличается от макета возвратом к устаревшей шине, с чтением. Ну и там джемперами можно выбрать режим работы на шине без портов и с портами. Хочу заметить , что второе я ещё сам даже нигде не использовал. Ну и там джемпера ещё есть на выбор 4кб дырки адресного пространства и 32 байт дырки в пространстве ввода/ вывода. Вобщем я закончил создавать это говнище ;) И все последующие версии печатных плат уже будут только под режим с портами. А это первая и последняя версия для энтузиастов.
https://yandex.ru/collections/card/5d974f186a257c1ffaeed351/

Error404
04.10.2019, 23:56
Очень интересно было бы повторить, но нужно много информации как пользоваться, желательно драйвер и т.п.

freddy
07.10.2019, 17:39
У меня со временем проблемы. Но что смогу выложу.
Вот схема, ошибок нет, все именно так работает.

70262

Вот user manual.
Поехали!
Устройство представляет из себя законченную, самодостаточную видеокарту, рассчитанную на режим
80х25@70Hz (можно 80x30@60Hz в режиме шины 2). Размер шрифта 8х16, количество цветов фона 8, символа 8 (16 при использовании бита яркости). Видеокарта нормально работает с узкими импульсами управляющих сигналов в разумных пределах (>=70нс) и обладает производительной шиной, позволяющей прокачивать видеобуфер со скоростью >100fps, что более чем достаточно, учитывая развертку монитора 70Hz.
Шина видеоадаптера представляет из себя конвейер с отложенной операцией чтения/записи и одновременно может выполнить одну любую команду (IOWR,IORD,MEMR,MEMW). Есть два основных режима работы шины.
1. Режим с отображением портов ввода вывода память.
Этот режим в основном применим для машин с не грамотно организованной шиной, а также для микроконтроллеров, в принципе не имеющих аппаратной внешней шины.
В данном случае на J1 выбирается 4кб диапазон адресов для видеобуфера. В конце видеобуфера по адресу XFE0 находится регистр конфигурации. XFE4-XFE5-регистры данных и команд ВГ75, XFF0-XFF8 - регистры BT57.
На схеме установлены джампера именно в для этого режима.
2. Нормальный режим работы с отдельным адресным пространством памяти и ввода/вывода. Этот режим подходит для большинства промышленных машин и грамотно продуманных самодельных.
Для этого режима нужно переставить JP3-JP8 в левое положение по схеме. Тогда на J4 необходимо выбрать диапазон портов ввода/вывода (32порта), при этом он должен быть кратным 32 (нужно установить два джампера). К примеру, можно поставить 10-7 и 9-8, тогда на внешней шине видеокарта будет откликаться на портах E0-FF. Джамперами JP1,JP2 необходимо установить такой же самый адрес портов на внутренней шине. Для примера, рассмотренного выше, JP1,JP2 в правом положении. Т.е. на самом деле возможно всего 4 варианта.
В данном режиме видеошины нет разрывов в видеопамяти и возможен аппаратный скроллинг видеобуфера как вверх так и вниз средствами DMA, в отличие от режима 1, в котором возможны лишь переключения видеостраниц.
Назначение битов регистра конфигурации:
0,1,2-номер видеостраницы для чтения/записи со стороны системной шины, их как раз 8 (он не обязательно может быть отображаемой страницей, доступны теневые операции с видеопамятью)
3,4,5,6 - зарезервированы
7-выбор кодовой страницы (0-CP866, 1-KOI8R)
Видеопамять линейна, по четным адресам код символа, по нечетным - аттрибуты
0ХХХХХХХ-четный байт, содержит младшие 7бит кода символа
0 FB FG FR BB BG BR X - не четный байт атрибутов, BB,BG,BR-цвет фона, FB,FG,FR-цвет символа, X-старший 8-й бит кода символа.
Инициализация видеоадаптера.
1.Выбираем видеостраницу и очищаем видеопамять кодами 20H-чет, 70H-не чет. Это получается не видимый пробел на черном фоне. И так все страницы.
2.Запуск видеогенератора.
0->VG75_CMD
79->VG75_DAT
10011000 ->VG75_DAT
0Fh->VG75_DAT
00001001->VG75_DAT
11100000 ->VG75_CMD
подождать >400нс
00100001->VG75_CMD
DEV NULL <-VG75_STAT (ага, это чтение в некуда )
DAT<-VG75_STAT
проверяем бит 5 регистра состояния ВГ75, пока не станет =1.
Когда станет 1 быстро запускаем DMA.
3.Запуск DMA.
80h->DMA_CTRL
adr_l->DMA2_START
adr_h->DMA2_START отсюда будут стартовать отображаемые данные
9Fh->DMA2_COUNT
8Fh->DMA2_COUNT
84h->DMA_CTRL
Все. Есть картинка и можно работать.
Курсор управляется командой 10000000 ВГ75. Выключается записью позиции за границу экрана.
Отображаемая видестраница (область) переключается программированием стартового адреса канала 3 DMA. Это происходит безболезненно и бесшовно для картинки.
Видеокарта имеет некоторые особенности при операциях чтения. Поскольку все операции видеошины отложены, то на момент прихода команды чтения с системной шины, видеошина не в состоянии предоставить актуальные данные, а предоставит данные предыдущей операции чтения. Т.е. при рандомном чтении портов или видеопамяти достаточно дважды прочитать по нужному адресу, результат второго чтения будет актуален. При линейном чтении блока данных, первое чтение холостое, каждое последующее чтение будет выдавать актуальные данные предыдущего чтения. Что никак не причиняет неудобств.

freddy
08.10.2019, 16:34
Господа, эту видеокарту можно оформить даже в виде отдельного внешнего блочка. И подключить через КР580ВВ55 даже к радио-86гк. И оно будет работать с cpm. И совсем не обязательно для cpm собирать мой качественный комп на 8080.
Как раз нужно 24 линии. 12 адресов, 8 данных и 4 управления. Используйте идею.

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

Кто помнит историю про уф пзу и что в итоге получилось, применяя ее в качестве пзу знакогенератора в моем видеогегераторе?

TomaTLAB
15.10.2019, 22:17
И он будет на логике. 16 ир82 и 2 ид7.
Почему не 4шт. ИР26 + 1 ЛН-ка? :)

freddy
16.10.2019, 15:39
Почему не 4шт. ИР26 + 1 ЛН-ка? :)
потому что надо 16 байт хранить

Сделайте 16 цветов из 256 на 4шт ИР26+1шт ЛН. Я в следующую версию это включу. Спасибо.

TomaTLAB
16.10.2019, 20:58
Да, действительно... Видать под вечер голова плохо варила :v2_dizzy_tired2:
Нужно будет 8шт. ИР26 и 1шт. ИД14
Всяко лучше, и по корпусам, и по ногам меньше.

Можно попробовать на двух 531РУ8(9) с мультиплексором на адресе, но потеряется двухпортовость и нужно будет синхронизировать запись.

freddy
17.10.2019, 16:42
На данном этапе развития от двухпортовости ramdac можно отказаться. Все необходимые сигналы у видеошины для прозрачной записи есть. Естественно, чтоб не вызывать снег и прочее г. Внутри то шина синхронна ;) Однако у меня нет 531ру8 :(
Зато есть много 537ру10. Может на них запилю. Я что то уже подзабыл, а нафига ей столько цветов?

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

Ну так тогда уже hicolor, чего мелочиться :)

Нет! Мало! Даёшь truecolor!!!

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

Всеравно мало! Хочу градиентную заливку символов. Аппаратно!

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

Всеравно мало! Хочу градиентную заливку символов. Аппаратно!

Shumadan
17.10.2019, 21:01
Кажись, надо спасать нашего freddy:v2_dizzy_tired2:

freddy
27.10.2019, 10:04
но нужно много информации как пользоваться, желательно драйвер и т.п.
Я написал небольшой пример. В нем продемонстрированы минимально необходимые приемы общения с этим видеоадаптером.
В примере рассмотрена инициализация, перемещение курсора, аппаратный скроллинг, переключение страниц видеопамяти.
Эта программа запускает видеоадаптер и перенаправляет ввод с консоли на экран, показано как вывести 8-ми битный код символа на экран с нужными атрибутами. По достижению конца страницы, начинается следующая. Клавишами U, D можно в любое время скролить экран вверх вниз, не напрягая проц.
70470

Нужно командой R загрузить хекс файл, запустить командой J0 и начать что то печатать с клавиатуры.
При этом предполагается, что видеоадаптер в режиме 2, висит на портах #C0-DF и буфер в адресах #E000-EFFF

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

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

freddy
05.11.2019, 17:51
У меня есть графический режим 640х400. Черно-белый. Не смотря на чернобелость 8080 всеравно не осиливает. Помочь ему можно только железом. Уважаемые читатели, напишите Ваши мысли на тему blitter engine vs sprite engine. Давайте поможем несчастному 8080. На сотню - другую мелкосхем пофиг, пока абстрагируемся от этого. Плату китайцам всеравно делать. ;)

Xrust
05.11.2019, 21:47
freddy, а если графический терминал?

MM
08.11.2019, 00:12
...мелкосхем...
Что делали Бренды в такой ситуации :
1. Ставили на графику более шустрый проц - например, i960 в 1990 г.
2. Делали сложную СБИС 2-Д проца, со временем 3-Д проца, а с ~2006 г. - комбинированные многопроцессорные СБИС ( графики ).

Но т.к. программеров для редких RISK - камней здесь маловато, проще будет поставить на графику 80286-20 мгц - он не особо дорогой, шустрый, и не столь сложен в программировании, как 80486 .
Либо выбрать 3-й вариант - реальная многопроцессорность ( по сути - многоплатность ), каждый модуль имеет собственный ВМ80, СОЗУ, мелкую логику, шинный коннектор ( для корзинки ). Сканирование графических массивов осуществляется синхронно для всех модулей - так делали в игровых автоматах в конце 1970-х на Западе ( кстати, на Z80 ), до 8-ми графических модулей на 1 автомат .

AlexG
08.11.2019, 09:15
Примеры сих автоматов можно увидеть ? (схема, описание)

freddy
08.11.2019, 17:35
freddy, а если графический терминал?
Та кому он нужен? На полку положить? Так он не красивый.

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


Что делали Бренды в такой ситуации :
1. Ставили на графику более шустрый проц - например, i960 в 1990 г.
2. Делали сложную СБИС 2-Д проца, со временем 3-Д проца, а с ~2006 г. - комбинированные многопроцессорные СБИС ( графики ).

Использую хитрую тройную буферизацию. Один кадр отображается. Другой кадр рендерится блиттером. Третий кадр, уже отрендеренный блиттером, дорендеривается процом. Блиттером заливаем прямоугольные блоки, скролим и закрашиваем. А процем рисуем сложные кривые. Все это происходит параллельно, и вот они, 70fps виднеются на горизонте. так кто-нибудь делал? Нормальный подход?
Микросхем надо МНОГО! Но они сейчас никому не нужны и поэтому дешевые.

MM
08.11.2019, 18:51
Примеры сих автоматов можно увидеть
На московской выставке электроники видал, примерно 1985...1986 г.
Я тогда уже плотно писал софт для БК/ДВК ( ПЗУ ), и довольно четко имел представление о производительности графики, особенно многоцветной.
Увидев на выставке автомат с весьма таки шустрыми играми - особенно Ралли ( автомобильчики соревнуются ), решил ознакомится с содержимым - по прикидкам, там должен быть порядка так 286-20 мгц проц минимум. Выпросил проспект - оказывается, куча Z80 и ОЗУшек, много плат в корзине ( больше 5 шт. ).
Проспект , вероятно, не сохранился...

freddy
10.11.2019, 10:23
У кого есть опыт разработки на mc6845? Может идеи какие то.
Хочется с него тоже текстовое VGA получить, хотя бы черно-белое.

b2m
10.11.2019, 17:37
Может идеи какие то.
Идеи можно почерпнуть в схеме и биосе Алесты 520ЕХ.

1Ж24Б
10.11.2019, 19:32
Повторил терминал из сообщения №110 на самодельной печатной плате.
1) вместо Atmega128 поставил Atmega64
2) в знакогенераторе стоит ПЗУ M5L2764 на 200 нс

Столкнулся с эффектом пропадания крайнего правого символа (выходит за пределы экрана монитора), и в самом низу экрана пропадает один ряд пикселей. Монитор LCD.

freddy
11.11.2019, 12:58
Повторил терминал из сообщения №110 на самодельной печатной плате.
1) вместо Atmega128 поставил Atmega64
2) в знакогенераторе стоит ПЗУ M5L2764 на 200 нс

Столкнулся с эффектом пропадания крайнего правого символа (выходит за пределы экрана монитора), и в самом низу экрана пропадает один ряд пикселей. Монитор LCD.
Автоцентровка не помогает? Частоту кварцевого генератора в видеогенераторе есть чем померять? Эта схема очень коварная из-за высокочастотности. Наладить ее не просто. Не торопитесь. По высокой частоте нужна скоростная логика и угольные резисторы.

freddy
11.11.2019, 16:12
Ещё нужно проверить правильность работы формирователя горизонтальных синхроимпульсов. Символы просто так от хорошей жизни за экран не заворачиваются.

1Ж24Б
11.11.2019, 20:56
1) в генераторе стоит КР531ЛН1, первый счётчик КР1533ИЕ5. Остальная логика К555/74LS
2) частота на выходе генератора 24,973 МГц. Попытаться приблизить к 25,175 МГц ?

freddy
12.11.2019, 13:34
1) в генераторе стоит КР531ЛН1, первый счётчик КР1533ИЕ5. Остальная логика К555/74LS
2) частота на выходе генератора 24,973 МГц. Попытаться приблизить к 25,175 МГц ?

Покажите фото платы и картинку с монитора. Интересно взглянуть. 25.175 не надо.

1Ж24Б
12.11.2019, 20:56
Немного помучил новый монитор, и он перестал съедать символы.
http://ipic.su/img/img7/tn/DSCN4123.1573581263.jpg (http://ipic.su/img/img7/fs/DSCN4123.1573581263.jpg)
http://ipic.su/img/img7/tn/DSCN4124.1573581290.jpg (http://ipic.su/img/img7/fs/DSCN4124.1573581290.jpg)
http://ipic.su/img/img7/tn/DSCN4126.1573581316.jpg (http://ipic.su/img/img7/fs/DSCN4126.1573581316.jpg)

freddy
13.11.2019, 12:47
Немного помучил новый монитор, и он перестал съедать символы.

Ну вот и хорошо. Нормально получилось.

freddy
28.11.2019, 15:12
напишите Ваши мысли на тему blitter engine vs sprite engine
Написываю. Однозначно blitter в виду явных преимуществ. Но это здесь офтопик. Если развитие этой темы интересно, давайте создадим новый топик и пойдём по пути создания сложной 2д бис и блока растеризации на логике. Вг75 конечно хорошо, но надо как то выдавать 24-битный цвет, хотябы в 320х200. Это другая тема, и архитектура в голове созрела.

freddy
07.12.2019, 16:56
ОООО! Аж два человека! Но я все же создал https://zx-pk.ru/threads/31139-2d-accelerator-na-logike.html
;) ;) ;)

freddy
10.02.2020, 18:41
Я недавно добрался до своего прототипа на mc6845. Кто то в этой ветке меня спрашивал, смог ли я добиться успеха? Я смог. 6845 способна выдать цветное vga, правда не так легко и просто, как ВГ75 dualhead.Но руки дошли хотябы фото сделать и выложить на форумы. 6845 в этой ветке офтопик.
Про неё можно почитать здесь https://zx-pk.ru/threads/31357-videokarta-na-mc6845.html

klingon
17.11.2020, 10:33
нашел интересный проект http://debuginnovations.com/TTL_Terminal/tech_det.html ANSI терминал на рассыпухе, смущает только наличие PIC18, который согласно уверениям автора и якобы легко выпиливается (брешет).
Вот если бы не было PIC18, то был бы подлинный dumb терминал, но еще наверно +40 корпусов. Интересно туда вместо PIC поставить 8085 (у него хоть serial встроенный).

freddy
17.11.2020, 19:54
Шли годы... ВГ75 dualhead так никто и не собрал. Хорошо если хоть кто то понял, как она устроена. В связи с отсутствием интереса, а также конструкторов новодельной цифровой техники из ретро комплектующих, возник вопрос. Нужна ли она кому то на шине ISA-8. Мне интересно услышать мнение потенциально заинтересованных в ее применении. Жду Ваши комментарии.

klingon
18.11.2020, 00:26
Шли годы... ВГ75 dualhead так никто и не собрал. Хорошо если хоть кто то понял, как она устроена. В связи с отсутствием интереса, а также конструкторов новодельной цифровой техники из ретро комплектующих, возник вопрос. Нужна ли она кому то на шине ISA-8. Мне интересно услышать мнение потенциально заинтересованных в ее применении. Жду Ваши комментарии.

На самом деле с интересом прочел ветку. К сожалению моих знаний в электронике пока недостаточно. Если бы в виде конструктора было, то было бы здорово.
Насчет ISA-8 Должно получиться что-то вроде MDA?

Tronix
18.11.2020, 10:20
Нужна ли она кому то на шине ISA-8. Мне интересно услышать мнение потенциально заинтересованных в ее применении.
Я с силами собирался все это время, чтобы начать рисовать ее как раз на ISA8. Вчера тему еще раз пересматривал, как раз прикидывал. Лично мне - была бы очень интересна.

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

Но, надо еще ставить ПЗУ для своего обработчика int 10h, и первоначальной инициализации. Но это мелочи и сравнительно не сложно, я могу BIOS написать. Основная загвоздка в памяти, в текущем формате отображения символов-аттрибутов. Очень многие программы в DOS пишут в видеопамять напрямую, тот же Volkov Commander, например. И с текущим представлением получится ой. То есть скорее всего надо подстраиваться к стандартному виду отображения символов-аттрибутов как в CGA текстовой памяти - сначала один байт по 4 ниббла аттрибутов, второй байт - символ (255 значений). Иначе многие проги не будут корректно работать.

Или, плохой вариант - не ставить ПЗУ, не менять карту памяти, и не отображать эту видеокарту по стандартному 0xB8000h. Вообще, увести ее в область дополнительных ROM, ну типа скажем в 0xE0000 куданибудь или 0xD8000. И запускать совместно с другой, скажем обычной VGA картой, а инициализировать программно и выводить туда какие-нибудь показания погоды на марсе, часы, матерное слово во весь экран на второй монитор. Но это конечно в разы менее интересно.

Можно еще конечно программно-аппаратно сделать переконвертацию из CGA представления текстовой памяти в текущий формат dual-head. Карта будет висеть вне области текстовой видеопамяти, опять же где-нибудь в 0xE0000 например, а при попытке записи в стандартные 0xB8000 повесить регистры-защелки, в одном или двух сохранять адресу куда произошла попытка доступа, в другом что хотели записать. И вызывать после защелкивания прерывание IRQ. В BIOS же по прерыванию читать значение регистров-защелок и конвертировать в представление dual-head и записывать значения в 0xE0000h. Но, чревато тормозами и занятым IRQ, которых и так в XT раз-два и обчелся.

Короче, самая жопа в несоответствии символов-аттрибутов в памяти dual-head вг75 со стандартным отображением символов-аттрибутов текстовой памяти CGA/EGA/VGA видеокарт.

freddy
18.11.2020, 19:47
klingon, конечно же будет в виде конструктора, для начинающих она сложновата в плане подбора комплектующих. Но не MDA, скорее текстовая VGA, она ближе к ее режимам. 03h у неё режим по дефолту. И ещё можно запрограммировать в режимы 80х30, 80х50, 80х60. Но я уберу всю ту ересь с кучей джамперов для изменения режима видеошины, что я сделал для 8ми битников. Толку 0, этим ни кто не может воспользоваться. Также уберу регистр страниц, у РС достаточно места под видеобуфер отведено.

Tronix, спасибо за интерес. Не спешите пока ничего рисовать. Я хочу рассказать, что с ней можно сделать. Для начала я переделаю дешифрацию адресов видеопамяти. Она будет отображаться вся 32к в b8000h. Порты предполагаю использовать 300-31fh. На некоторые миди порты можно забить, этот диапазон для прототипов отведён. Для овместимости с не корректным ПО, на прямую пытающимся писать в видеопамять, приведу биты атрибутов в соответствие нормальному режиму 03h. Ну и сделаю дешифратор для выборки видеобиоса c0000h. 2764 пзу хватит, добавлю ее в схему.
Что мы получим в итоге? В итоге мы всунем эту карту вместе с обычной vga. На этапе загрузки dos проинициализируем вручную в режим 03h. И если все сделано правильно, увидим изображение с vga видеокарты. Ну хоть что то. А потом уже можно писать видеобиос. Он будет очень простой, так как железо простое.

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

Я хочу поменять концепцию. Раньше это был универсальный видеоадаптер, теперь нет. И он станет даже проще. И раз будет работать в основном под dos, то и аппаратная поддержка koi8r ему не нужна. Освобождается одна страница знакогенератора. Стоит ли ее оспользовать для шрифта 8х8 и колхозить видеорежим 40х25 или оно нафиг не надо?

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

Я склонен считать что не нужно.

Tronix
18.11.2020, 19:59
Для овместимости с не корректным ПО, на прямую пытающимся писать в видеопамять, приведу биты атрибутов в соответствие нормальному режиму 03h.
Вот это самое важное, да. Это сразу переводит плату из разряда игрушки в разряд полнофункционального вообщем-то устройства.



Порты предполагаю использовать 300-31fh
Да можно наверно без проблем. В случае чего если ИД7 будет в дешифраторе можно туда-сюда подвигать по адресам, не критично.


2764 пзу хватит, добавлю ее в схему.
За глаза. Наверное бы у в 2кб уложились, но 8 так 8. Их проше найти и программировать, тем более електро-стираемые AT28C64 удобней на период отладки, чем каждый раз 2716 уф стирать.


В итоге мы всунем эту карту вместе с обычной vga. На этапе загрузки dos проинициализируем вручную в режим 03h. И если все сделано правильно, увидим изображение с vga видеокарты.

Тут конечно интересный момент, с одним и тем же адресом у двух устройств... Если при записи наверное должно записаться и в VGA и в эту плату, то что будет при чтении? А VGA при своей инициализации активно чето пишет-читает в память, да и потом, в досе уже может тоже читать из памяти при скроле там например и тд. Тогда этой плате надо запретить на время операцию чтения вообще, какой-нить джампер поставить, или 0 ом резистор, чтоб разорвать /MEMR можно было ....

Но в целом все так, крутая видяха получится, особенно полностью на отечественной эл базе собрать. Вид будет иметь однозначно!

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

Я тоже думаю не нужно 40x25

freddy
19.11.2020, 14:42
Tronix, конечно на время отладки без /memr. Поставлю джампер.
Я тут подумываю, что у меня только 6 бит атрибутов цвета. Вобще 7, но один уходит на старший бит кода символа. Получается, что придётся остаться без битов яркости и довольствоваться 8 цветами фона и символа. На сколько это считается критично? Может поставить ещё одну вг75 и выдавать все 8 бит атрибутов? 3 ВГ75 могут 21 бит выдать. Это более чем достаточно и к усложнению архитектуры видеогенератора не приведёт. Напишите своё мнение.

Tronix
19.11.2020, 15:30
На сколько это считается критично? Может поставить ещё одну вг75 и выдавать все 8 бит атрибутов?

Мне кажется критично. Все-таки 16 цветов нужны для VGA... В голом дос конечно не используется, а вот в различных IDE типа TurboPascal или Borland C - вполне. Да и во многих других дос программах с оконным интерфейсом. Три ВГ75, так три, чего мелочиться -)

И еще по поводу знакогенератора (шрифта) - интересно, а сильно сложно сделать его загружаемым и изменяемым? То есть поставить ОЗУ вместо ПЗУ, или вообще использовать основную ОЗУ где-то в конце памяти? Сорри, но до сих пор не понимаю как все это работает, поэтому такой дурацкий вопрос. В int 10h есть функция 11h, позволяющая загрузить свой шрифт, но я точно не знаю, используют ли эту функцию Norton Utilities, и например, заставка Award Bios при загрузке компа, или же напрямую через порты разлочивают вторую битовую плоскость и пишут туда, потом через порты залочивают обратно и переключают на нулевую биттовую плоскость. По-идее, все-таки менять шрифт должны через int 10h. Щаз посмотрю как я это в детстве делал, а то забыл уже все напрочь...

https://habrastorage.org/webt/aw/fm/kb/awfmkbvenrbcroiuwof5vccwv0s.png

Ну, шрифт то я грузил через int 10h ax=11h, а вот псевдо-графический курсор мыши уже через порты, ибо скорость нужна...
Ну, не знаю, вообщем если можно сделать загружаемый знакогенератор минимальными потерями- наверное лучше сделать, пускай только через биос будет работать, но все равно хоть что-то.

freddy
19.11.2020, 16:34
Tronix, вг75 стоит 25р, думаю сумма вполне посильная:) Будет 3. А перед ними аппаратный перестановщик бит. Т.е. видеопамять будет содержать тоже самое, что и у обычной vga карты.
Насчёт загружаемого знакогенератора: да можно и туда пробросить внутреннюю видеошину. Цена вопроса 3 мультиплексора, 1 двунаправленный шинный формирователь 3 регистра. В общем то ничего особенного по схемотехнике. Но это огромная логическая проблема использования устройства, так как оно автоматически приобретает графические видеорежимы. 640х400, 640х480 и все их производные. И сейчас я не готов это применять. Поэтому давайте оставим знакогенератор в покое и на 11ю функцию поставим заглушку

Tronix
19.11.2020, 17:00
Да, фиг с ним. Можно просто не сообщать программам что это VGA, а они уже там пускай сами разбираются что в этом случае делать. По идее тогда они не должны использовать загрузку фонтов и прочие прелести VGA. Ничо, нормально будет.

freddy
19.11.2020, 17:32
Тогда на выходных нарисую схему, покажу. И можно к плате приступать. А загружаемый ЗГ и графические режимы оставим на будущее.

freddy
21.11.2020, 15:30
https://yadi.sk/i/k_l5dyz0KbCM6Q
Вот нарисовал. Изменений много и проект сложный, поэтому, чтоб не перегружать мозг, я буду описывать поэтапно выполненные изменения. Вы, не торопясь, по мере проверки правильности моих мыслей и соответствия их текущей схеме, высказывайте дополнения, исправления, задавайте вопросы или просто говорите далее. Я буду переходить к описанию следующего изменения. И так, пока не выяснится, что пора разводить плату.
Сегодня начну с дешифрации адресов: Из сигналов управления, задействован только AEN. Вдруг у кого то звуковая карта есть или контроллер дисковода. Если он активен, то дешифратор адресов памяти и портов заблокирован. И реакция на сигналы чтения и записи не возможна. На схеме выходы дешифратора адресов памяти подписаны диапазонами, проверьте чтоб все было так как написано. Дешифратор портов работает в два этапа. Сперва выделяет базовый адрес 32-адресного блока (u3b,u17), а потом этот блок дешифруется на внутренней шине на 8 4-адресных блоков (u16) и распределяется.

freddy
22.11.2020, 18:11
Кхм, кхм... это самое, того, как его...
Напишите, что дальше то? Писать далее или рано? Ну или КГАМ :)

Tronix
22.11.2020, 18:24
Так все правильно вроде, AEN - совершенно верно заведен на ИД7, так все делают, чтоб DMA избежать. Адреса тоже правильные выбраны.

freddy
22.11.2020, 18:50
Продолжу на тему коммутатора ОЗУ знакогенератора. Были сделаны следующие предположения. Если всем сообщать, что это VGA, то по идее никто не станет писать в область b0000-b7fff, так как там положено сидеть видеокарте mda. Я этим воспользовался и коммутатор шин микросхемы знакогенератора при активном /cs_char откидывает микросхему от видеогенератора и подкидывает к шине ISA. И сигналы записи и чтения с шины тоже туда подкидывает, т.е можно и читать и писать. При не активном /cs_char подкидывает микросхему обратно в видеогенератор и переводит в режим чтения. Озу выбрано минимальным, нужно то всего 4кб. При этом как и у обычной vga, дефолтные шрифты будут храниться в пзу биоса. Проверяйте мой бред :) Может я где то заблуждаюсь

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

Был и альтернативный вариант. Вколхозить регистр конфигурации, с помощью его одного бита переключать адресную область видеобуфера между видеопамятью и памятью ЗГ. Но я пока не стал этот вариант показывать

Tronix
22.11.2020, 19:08
А /cs_char кем управляется? Главное, чтоб в момент включения был не активен /cs_char, а то я не помню как системный BIOS лпределяет наличие MDA - может в b000 чето пишет-читает. А так да, круто, загружаемый знакогенератор рулит. Через b0000, так и хорошо.

freddy
22.11.2020, 19:19
cs_char вырабатывается комбинацией адресов на шине isa микросхемами u4,u15c. На классической xt тип видеокарты определялся джамперами, у меня вобще нет никакой машины с isa. Так бы проверил.

Tronix
22.11.2020, 19:39
у меня вобще нет никакой машины с isa
А как же отлаживаться? Надо бы все-таки какой-нибудь Pentium 166 mmx приобрести, а то как же?

freddy
22.11.2020, 20:48
Tronix, я отдолжу Пентиум 3 на время. Мне продолжать обсуждение или Вы согласны со схемой? Я никак не могу этого понять. Остался перестановщик бит. И раз уж заговорили про материнки пеньиумов, то ещё и про кошмар. И почему то никто не спрашивает меня, что делать с чтением из видеопамяти?

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

В прочем я чтение склонен кешировать. Стандартный метод vga чипсетов мне не нравится тем, что притормаживает процессор, так как во многих случаях не может вовремя извлечь байт из видеопамяти.

Tronix
22.11.2020, 22:46
Мне продолжать обсуждение или Вы согласны со схемой? Я никак не могу этого понять.

Честно говоря, я не очень в схеме то ориентируюсь, потому что я до сих пор не знаю азов, можно сказать, то есть как работает ВГ75, нахрена ему контроллер дма, и тд. И это речь только про одну ВГ75 типа как в Радио-86РК, а уж когда их три - тут я совсем бессилен. Мне и интересна эта плата и этот проект для возможно лучшего погружения в работу ВГ75 например при сборке и отладки платы, особенно если она не заработает сразу. То, что я еще как-то могу понять, а именно по дешифратору на память и порты - я посмотрел, вроде бы все правильно.
Почему я не спрашиваю про чтение? Потому что я вообще не подозревал, что в этом какая-то проблема. Я ж говорю, я не знаю как работает схема, не понимаю. Тут из меня помощник - "лучше бы не мешал".
Единственное о чем я уже писал, могу попробовать написать BIOS для видеокарты (int 10h). И в принципе, если будет понимание какие порты за что отвечают, можно и эмулятор на время отладки сварганить, взяв PCem за основу, и в нем тестировать BIOS...
Но по схеме - я честно не помощник.

freddy
23.11.2020, 13:56
Хорошо. Я сам буду заниматься ее архитектурой. И схемотехникой тоже. Если концептуально нигде не ошибусь, то она заработает. Дальнейшего описания изменений конструкции относительно «игрушечного» варианта не будет. Сейчас Осталось проработать логику /iordy, буду как то сам вспоминать. Последнюю isa карту я делал 25 лет назад, нужно все вспоминать.

Tronix, dma ей нужно для организации совместного с cpu доступа к видеопамяти. Она запрашивает dma, dma захватывает шину у процессора и читает с видеопамяти нужное количество байт. Потом отдаёт шину наинекоторое время. Но только не у меня. Ркшечники в глубине души может и понимают почему ркашка такая тормозная, но большинство думает что это проц 8080 такой :) хаха! Так вот чем быстрее процессор тем не выгоднее у него отнимать шину и тем большая будет потеря производительности.

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

Эпик фейл! В протеусе нет модели isa разъёма :) на выходных срисую с заводской Карты.

freddy
26.11.2020, 19:07
Tronix, курсор у меня всегда фиксированый в виде инверсного мерцающего блока. Бит 7 атрибутов нельзя использовать для мерцания, нет для этого железа. Нет ramdac, и соответственно, установки палитры, цвета всегда фиксирован. В vga это все есть и размер курсора настраивается. На сколько это критично? Прокомментируйте.
Моё мнение, что это не страшно, можно так оставить.

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

В общем у меня все готово. Осталось макетку под isa шину найти. Посмотрю в барахолке, может есть у новодельщиков. И можно приступать к тесту интерфейсной части. Остальное давно уже проверено в количестве нескольких десятков штук.

Tronix
26.11.2020, 21:41
Моё мнение, что это не страшно, можно так оставить.
Ну, то что он в виде большого блока, а не маленького нижнего - это ничего, главное чтоб была возможность его выключить (как вы вроде ранее писали - увести за координаты крана). То есть возможность включать/выключать курсор.

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

freddy
03.12.2020, 12:14
Кто может подсказать, запускаются ли mda, cga на относительно современных материнках Slot1, socket 370 ?

Tronix
04.12.2020, 13:16
Кто может подсказать, запускаются ли mda, cga на относительно современных материнках Slot1, socket 370 ?

У меня, внезапно, нет такой материнки с ISA слотом. На первопнях 100% запускается.

freddy
06.12.2020, 18:22
Решил поменять концепцию. Этот адаптер будет косить под Cga, но показывать будет в vga развёртке. И вот почему, я так думаю. Список не совместимостей с vga:
1. Нет ramdac- устранимо.
2. Нет многостраничного знакогенератора с возможностью вывода 512 символов - устранимо.
3. Нет бордюра - простыми методами не знаю как сделать, а он точно нужен например русификаторам многим. Они ним режим отображают. В общем то все это не сложно устранить, но собрать сможет не каждый. Ну далеко не каждому под силу vga на рассыпухе осилить. Поэтому подражать лучше Cga, железо по проще будет и есть шанс для среднего ретро паяльщика, что заработает сразу :)

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

Расковырял тут как стартует биос. Так вот он ничего там в памяти не тестирует в области всех видеобуферов. Ищет видеобиос и если нашёл, то передаёт туда управление, заменив вектор int10h. Сам при этом ничего c видеокартой не делает, предполагая однако далее, что это ega/vga. Так вот нам можно самим поменять биты конфигурации видеоадаптера в переменной bios на тип cga. Получится cga однако с собственным биосом, но это ничему не противоречит

Tronix
06.12.2020, 18:27
А какая разница между CGA текстовым режимом и VGA текстовым режимом 03h? Имхо - вообще никакой.
ramdac и игры с палитрой - это не стандартная фишка текстового режима - ф топку.
Знакогенератор - фиг с ним, пускай будет не изменяемый.
Бордюр - фиг с ним.

NEO SPECTRUMAN
11.12.2020, 01:33
изобретали изобретали велосипед
в конечном итоге получилась цветная mda видяха :v2_lol:

freddy
21.12.2020, 17:13
изобретали изобретали велосипед
в конечном итоге получилась цветная mda видяха :v2_lol:
Что по вашему мнению должно было получиться? И почему это «велосипед»?

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

Не оправдались ожидания и чуда не произошло? Doom не запустится? :)

Tronix
27.12.2020, 08:49
freddy, А есть какие-то подвижки по ISA плате?

freddy
03.01.2021, 15:09
Tronix, нет подвижек. Схему дорисовал, плату развел, заказал. Еще не пришла. Версию с графическими режимами проработал, в производство не пускал. Хз, надо чтоб сперва эта заработала. С наступившим!

Tronix
03.01.2021, 17:56
нет подвижек. Схему дорисовал, плату развел, заказал.

Ну как это нет подвижек - схема уже есть, плата... Если что, то я бы плату тоже приобрел как-то, чтоб тоже поиграться, а то лежат ВГ-шки, тоскуют...
Спасибо, так же с наступившим!

freddy
04.01.2021, 10:28
Tronix, если она заработает, то я плату так подарю. Мне одной хватит, но меньше 5 было нельзя заказать :)
А видеобиос будет с открытым кодом и в свободном доступе?

Tronix
04.01.2021, 12:13
А видеобиос будет с открытым кодом и в свободном доступе?
Канешно, я всегда за опенсорс топлю.... Особенно в ретро-проектах, которые интересны 1,5 человекам, а через пару лет находится еще один такой-же индивидум и если исходники закрыты - начинает мозг себе весь ломать, что бы поправить один байт в прошивке/bios/где угодно. Не дело это.

freddy
14.02.2021, 21:54
Оно даже работает. Может потом опубликую схемку и pcb. Биос и знакогенераторы будет толко в виде дампа.
https://i.servimg.com/u/f90/20/09/39/66/586e0910.jpg (https://servimg.com/view/20093966/47)

CodeMaster
14.02.2021, 22:12
Оно даже работает.
Выглядит мощЬно.

freddy
08.03.2021, 18:49
Небольшой итог проделанной работы.
В целом железо вполне сносно работает на шинах 8 и 12Мгц. Однако глубокого тестирования не производилось.
Все писалось и проверялось на реальной машине 386DX40. У меня работало. У кого не заработает или сгорит что то, я не виноват, материалы проекта распространяются как есть и я не несу ответственности за последствия.
В архиве немного файлов, чтоб оно заработало, а также для чтения и просмотра картинок но ночь.
https://disk.yandex.ru/d/d_DhN_A6wfaYjw

Volkov commander пока не запускается, не разбирался почему. Если кто поможет, буду очень рад, а так то времени на трасировку не хватает. Все работа сьедает. Проект и так уже долгий. Печатку решил не выкладывать, мною она признана как не удачная.


Tronix, если она заработает, то я плату так подарю.
Если что, пишите куда слать, ведь она заработала.

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

это видео показывает как у меня происходит запуск тачки с такой видеокартой
https://youtu.be/MQba_x35sMc
а это текстовый скринсейвер
https://youtu.be/W6EjVPrGx4c

freddy
10.03.2021, 20:56
Продолжу по-тихому писать дальше блог по видеокарте. Сегодня оттрасировал VC. Ну что сказать, юношеский максимализм Волкова не даст запуститься его детищу на моей видяшке. Есть у него такая забавная конструкция:

CS:9717 mov dx,03da
CS:971a in al,dx
CS:971b test al,01
CS:971d jne 971a

Как Вы все уже сразу догадались :)))) это он ждет пока продукт коллективного разума инженеров IBM закончит читать из видеопамяти. И конечно же VC наглухо на этом повисает, поскольку шина по умолчанию притянута к VCC и там у меня нет никакого порта с таким адресом. И мне такой порт не нужен, так как бессмысленно чего то ждать из-за более другой видеошины. Просто пишешь в любое время и никакого снега и вьюги :)
На будущее стоило бы сделать такой порт и себе, так как в моем железе все нужные сигналы есть. Но мне больше нравится DC, хотябы уже потому что места меньше жрет и так не поступает. Поэтому пошел на фиг VC!!!

klingon
10.03.2021, 22:10
https://youtu.be/MQba_x35sMc
Видео эпично!

CodeMaster
10.03.2021, 22:20
Поэтому пошел на фиг VC!!!
Если только VC этим страдал, тогда наверное да. Кому очень нужен, наверное, проще его пропатчить.

Tronix
18.03.2021, 14:44
Спасибо, freddy за подаренную плату, тоже начал собирать...

https://i.ibb.co/2yMBS5t/P1130929.jpg (https://ibb.co/2yMBS5t) https://i.ibb.co/Zgd2ZJK/P1130930.jpg (https://ibb.co/Zgd2ZJK)

Замучился млт-шки скоблить, но вроде большую часть запаял.. Только 3ком кончились, буду 3.3к-4.7к вместо них паять, думаю не критично, так как в основом это подтяжки. Еще намешал диодов - часть 1N4148, а другая часть - КД522Б . Еще нет защелки 74HC574 совсем, придется покупать наверное, ну или пробовать вкорячить HC753 только с инвертированным стробом. Еще конечно в серии микросхем некоторых не попал, в частности вместо 531ЛЛ1 поставил 555ЛЛ1 и прочее. Еще транзисторов S8058 нет, можно ли поставить другие NPN? И память у меня в узком корпусе , но думаю проводами запаяю..

Tronix
18.03.2021, 19:34
Допаялся пока до такого состояния:

https://i.ibb.co/YNSJvGS/P1130932.jpg (https://ibb.co/YNSJvGS) https://i.ibb.co/hMbK6rc/P1130933.jpg (https://ibb.co/hMbK6rc)

Вместо 74HC574 временно воткнул 74ALS573 -) Не знаю что это даст, но пока так.. Потом подумал, что могу GAL-ку туда вставить и запрограмить, пока не куплю 574.
Включил... Вроде бы что-то теплица, какая-то жизнь, но как проверить в таком виде пока не понял. Вообщем, после включения на VSYNC, HSYNC приблизительно 98KHz и 6.8KHz или наоборот. Соттветственна генератор работает, на ВГ75 приходит 3 с копейками МГц, еще видел около 12 с чем то МГц где-то и тд. На программу инициализации никак не реагирует (не меняет HSYNC, VSYNC). Из порта 30dh читает 0xFF....

UPD: А, не, дособрал узел d12,d13,r54 и режим начал устанавливаться - ~70Гц и 32KHz. Но похоже транзисторы 2N3904 не годятся, уровень сигнала на HSYNC и VSYNC очень слабый, монитор постоянно прыгает с "нет сигнала" на черный экран по кругу. Или надо резисторы подбирать....

freddy
19.03.2021, 16:03
Tronix, там особого ничего чувствительного к серии микросхем нет. Даже видеогенератор можно собрать на к555, хоть они там будут и на пределе. На моем фото собранной платы такой зоопарк из разных серий не потому что они там нужны, просто собирал из того что было. 74hc574 там стоит с нарушением всех правил, потому что они были у китайца и других не было. А правильно конечно же 74hct574 или als574 или 1533Ир37. На проводах туда ещё можно вкорячить ИР23 любой серии, 374 серий als, hct.
Ваша плата очень исторично смотрится. КМки и МЛТшки зачёт!
Продолжу по делу. Синхронизация срывается из-за слабого уровня сигнала vsync. Нужно поиграться с резистором r60. R26 убран совсем, транзисторы без разницы какие npn. В схеме есть свободный элемент u34d, буфер можно на нем поставить. Между d18-d21 и r26, r60 при этом не нужен.
Ну и в общем дела у вас двигаются не плохо. Раз видеорежим устанавливается, значит запись и чтение портов уже работает. Осталось протестить запись и чтение видеопамяти и посмотреть что там происходит с сигналом r_dma. Там после запуска всегда 0 должен быть.

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

Меня смутило что вгшки разных заводов. У меня попадались такие, что по разному реагировали на синхронизацию. И запускались, как ни странно, не синхронно. Для этих целей я сформировал r_dma. Он также не даст запуститься не правильно в условиях сильных помех по питанию.

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

А bios будет мой или запускать будете с командной строки?

Sandro
19.03.2021, 17:39
Если только VC этим страдал, тогда наверное да. Кому очень нужен, наверное, проще его пропатчить.

Ну, этим страдал весь софт под оригинальный CGA, тот самый, который стоял в IBM Model 5150. У него же не было арбитра видеопамяти, полез туда процессор во время видеовывода -- пошёл снег.

Tronix
19.03.2021, 18:00
R26 убран совсем,

Это я догадался по схеме, перемычку впаял на плату. Да, когда запускал, видел что VSYNC слабый совсем, увеличу R60 и если не взлетит, то либо транзистор подберу, либо через буфер пущу.
ВГ75 у меня еще есть штук 5-6, но подобрать все три одинаковые не смог :) То заводы разные, то года разные. Но в случае чего есть возможность их покомбинировать.
Спасибо, r_dma проверю.


А bios будет мой или запускать будете с командной строки?

Пока из командной строки, потом ваш BIOS, когда (и если) все заработает. А сейчас нет широкой памяти и злосчастной 574 в никаком виде. Ну и еще панелек DIP28. Можно было бы и так запустится, с узкой DIP28 памятью типа кеша от 486, с эмулированной 574 галкой, и выпаять кое-откуда панельки, но они советские синие, хоть и золотые, но доверия честно говоря не вызывают. Решил все-таки не городить огород из МГТФа, а купить все недостающее. Но к выходным не успел, теперь только на следующей неделе, если повезет.. Поэтому пока пауза в сборке...

freddy
19.03.2021, 19:26
Tronix, года у вг75 пофиг. Именно заводы играли роль. Не уж то топология разная была? Я хз. У меня это проявлялось в виде не соответствия атрибутов к соответствующему символу. Ну и осциллографом видно, что hsync у вгшек появлялся не синхронно. Обычно сдвинут друг относительно друга на 1 cclk. И этот глюк был плавающим. Мог появляться примерно 10раз из 100-150 запусков. Раньше такое не встречалось, причин и закономерностей я не выловил, решил проблему сбросом dma c последующим перезапуском вгшек.
Утилиту для командной строки допишу. Наверно добавлю парсер ключей. Видеорежим задавать охота, страницы ЗГ переключать, видеостраницы переключать. Может курсор двигать. Эту утилиту можно будет вызывать через функцию exec dos из своих программ. Ещё подумываю выпустить загружаемый видеобиос на вектор int90h. Загружаться будет с командной строки и висеть резидентно, не мешая основной видеокарте.

Sandro, с совместимостью у меня проблемы, я думаю пока над этим вопросом. Проблема в стратегической ошибке на стадии проектирования. Оказалось я не могу поменять биты конфигурации оборудования на cga или mda из процедуры инициализации видеобиоса. Все системные биосы считают, что если на c0000h найдена ПЗУ, то это точно vga и выставляют биты конфигурации сами. А так как видеокарта уже запущена, то поменять она уже ничего не может. Остаётся только вариант изменить их из командной строки своей утилитой на стадии загрузки. Или имитировать работу статусного регистра cga карты. И в общем видимо так и придётся сделать + загрузка ЗГ. И на этом все, больше идей нет для финальной версии карты на ВГ75.

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

Графический режим не решился делать из-за не возможности получения линейной адресации видеопамяти. Все текстовые crtc разворачивают изображение прямоугольничками:(

Tronix
19.03.2021, 19:32
Все системные биосы считают, что если на c0000h найдена ПЗУ, то это точно vga
А если не на c0000h, а на с8000 и далее?

Tronix
20.03.2021, 16:43
Вообщем не удержался и раскорячил узкую SRAM вот так вот:
https://i.ibb.co/YdwcDxN/P1130935.jpg (https://ibb.co/YdwcDxN)

Но действительно засада с r_dma... Нет трех одинаковых ВГшек, а те что есть, выдают при включении разный HRTC. После утилиты инициализации вроде бы все становятся 32КГц, но все равно отличия есть в сигналах небольшие, что после ЛП5 выливается в иголки на r_dma. Значит куплю еще три одинаковые ВГ-шки.

https://i.ibb.co/YcFssXp/P1130936.jpg (https://ibb.co/YcFssXp)

А, ну и поборол VSYNC заменой R60 с 4,7кОм на 10кОм.
Наверное щаз временно верну ISA_RESET на DMA и попробую память потестировать.

И все-таки что-то не то, не всегда устанавливает режим, программа часто виснет.... Нужно как-то проверить чтение-запись в порты... Буду пробовать разобраться...

UPD:
Запускаю только с двумя ВГ75 (u30,u35). Почему то читаю из статусного регистра каждый раз 0x03.

UPD:
Запускаю с тремя ВГ75 разными, но программа установки виснет, хотя VSYNC и HSYNC сменяются. Если после этого нажать ctrl+alt+del иногда получаю мигающий. Если потом скопировать кусочек памяти из b8000 в b0000, то даже похоже на какую-то картинку:
https://i.ibb.co/JBGmcsc/P1130938.jpg (https://ibb.co/JBGmcsc)

Tronix
21.03.2021, 12:10
Нашел три одинаковых ВГ75, поставил. Вернул узел формирования r_dma на место. Вместо 574 временно прошил и поставил GAL 16V8 (правда все-таки пришлось перекинуть у нее ноги 1 <-> 11, иначе pin to pin не взлетала).

Module sn74574
Title 'Octal Edge-Triggered Flip-Flop'

sn74574 device 'P16V8';

OC,Clk pin 11,1;
D8,D7,D6,D5,D4,D3,D2,D1 pin 9,8,7,6,5,4,3,2;
Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1 pin 12,13,14,15,16,17,18,19;
Input = [D8..D1];
Output = [Q8..Q1];

Equations
Output := Input;
Output.clk = Clk;
Output.oe = !OC;

Test_Vectors ([OC ,Clk,Input] -> Output)
[ 1 ,.X., .X. ] -> .Z.;
[ 0 ,.C.,^h00 ] -> ^h00;
[ 0 ,.C.,^h55 ] -> ^h55;
[ 0 ,.C.,^hAA ] -> ^hAA;
[ 0 ,.C.,^hFF ] -> ^hFF;
[ 0 ,.C.,^hA5 ] -> ^hA5;
[ 0 , 0 ,^h00 ] -> ^hA5;
[ 0 ,.C.,^h22 ] -> ^h22;
End


Таким образом вроде-бы карта собрана. Но лучше, чем вчерашнее изображение картинки пока не увидел...
По поводу r_dma - сразу после включения компьютера он по разному. Бывает что сидит в нуле, бывает что бегут импульсы. Утилита инициализации чаще всего зацикливается, но может иногда и сработать. Но редко.
зацикливается надо полагать здесь, прыгает на crtc_ini и по кругу:

mov cx,5
wait_frame: in al,dx
test al,00000010b ; Check DMA underrun
jnz crtc_ini ; Reinit CRTC if is it
test al,00100000b ; Checkin end of current frame
jz wait_frame
loop wait_frame ;Checking until 5 frame complited


Поэтому временно закоментировал этот участок, и вместо очистки памяти копирую кусок из b8000 в b0000, тогда после запуска утилиты почти всегда (но иногда не с первого раза) получаю такие картинки:

https://i.ibb.co/CHP01Zn/P1130939.jpg (https://ibb.co/CHP01Zn) https://i.ibb.co/xz7fYbC/P1130940.jpg (https://ibb.co/xz7fYbC)

Тут в одном случае вывод DEBUG.EXE, в другом POST-табличка BIOS и команды из AUTOEXEC.BAT....

Память... С памятью так - до инициализации пишется-читается b0000 нормально и без ошибок. После инициализации и когда есть уже картинка, при чтении часто проскакивают три-четыре-пять байт FF FF FF FF FF в разных местах. При этом если много раз читать одно и то же место, то иногда эти FF есть, а иногда их нет и содержимое нормальное.

Дальше не знаю что делать, как проверять...

freddy
21.03.2021, 16:35
А если не на c0000h, а на с8000 и далее?
Нет, только C0000h-C7fffh с шагом 2кб. Дальше не сканирует и не найдет.


после ЛП5 выливается в иголки на r_dma.
после ЛП5 иголки нормальное явление. Вот после ТМ9 их не должно быть.



Память... С памятью так - до инициализации пишется-читается b0000 нормально и без ошибок. После инициализации и когда есть уже картинка, при чтении часто проскакивают три-четыре-пять байт FF FF FF FF FF в разных местах. При этом если много раз читать одно и то же место, то иногда эти FF есть, а иногда их нет и содержимое нормальное.
арбитр шины не работает. FF получается потому что шина по умолчанию притянута к VCC, а видеопамять с помощью U1 в какие-то моменты откинута при активном DMA. Поэтому проверяйте работу сигнала ~rdy. Возможно в качестве D7 взять шотки какой нибудь пошустрее. Может уровень лог "0" слишком высок?


Tronix, что то с видеогенератором надо делать, не правильно работает же. Глаза сломать можно. ВГшки потом. Вертикальная полоса в один пиксель после каждого знакоместа -это u21 начинает выдвигать пиксель, при еще актином ~LD. Или не исправна u21 или малое быстродействие u19-u20a,b

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

на до бы проверить работу u19, u20,u21. А вобще эти все ВЧ схемы с полпинка не даются, не спешите. До 10-15Мгц все просто, а дальше уже групповые задержки сигналов играют роль. Надо все не спеша. Я в общем знал что ее собрать не просто.

Tronix
21.03.2021, 19:38
Возможно в качестве D7 взять шотки какой нибудь пошустрее. Может уровень лог "0" слишком высок?

Точно, высок, только еще до D7, на 9 ножке U5:C... Не понял как его понизить, попробовал вместо R42 3 кОм поставить 27 кОм - вроде стало лучше, и даже теперь иногда микросхема U5:C выдает что-то на выходе 8 нога, но все равно не достает до нуля. Еще увеличивать R42? Диоды D1,D2,D3,D6 стоят 1N4148 ...

Насчет генератора понял, только у меня вроде полоса перед знакоместом, а не после, хотя не знаю точно. Пока просто заменил U20 с 555ЛИ1 на 531ЛИ1 - разумеется это ничего особо не дало. Потыкал в U19 - ну вроде работает она, не знаю конечно насколько правильной формы выдает сигналы, но с виду ничего такие, нажористые... Там ~12,48 MHz, ~6,24 MHz и ~3,12 MHz. U21 пока заменить нечем, кроме такой же 555ИР10В из той же партии. Микросхем тестером вроде бы проверку проходят, но буду думать о замене на другую серию...

Но пока разобраться бы с арбитром. Вроде бы плевое дело а застрял. Диоды тогда куплю разные еще, шотки там какие-нибудь....

freddy
23.03.2021, 20:27
Но пока разобраться бы с арбитром. Вроде бы плевое дело а застрял. Диоды тогда куплю разные еще, шотки там какие-нибудь....
Ок. Один канал осциллографа на ~RD ISA. Другой на ~RDY. Стартовать запись по спадающему фронту ~RDY и потом просмотреть удлиняются ли ~RD. Если не удлиняются, то вместо U5c применить временно любой инвертор TTL c выходами ОК.

Вместо U36 смело можно ставить 573й регистр. Выглядит картинка вполне благополучно, атрибут знакоместа смещен всего на 1 пиксель влево и принципиальной разницы в этом нет.

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

Tronix, я специально проверил у себя работу u21 на 555й серии , купил специально жменю таких же ир10в, все работает отлично. Не стоит заморачиваться с подбором серий. Там что то с логикой работы не правильно. Замените подтягивающие резисторы R18,R46 на 1к, может не хватает. Мне попадались отдельные экземпляры особенно 531й серии, с большими токами утечек по входу, но при этом полностью рабочие.

Tronix
24.03.2021, 21:20
Худо-бедно с арбитром шины разобрался, выпаял R47 вообще и поставил на место D7 диод Шоттки. R42 оставил 27 кОм. Уровень "нуля" стал схватываться материнкой. После этого заработало чтение-запись в память без ошибок, заработала всегда утилита инициализации (больше не зацикливается).

Насчет ВЧ-части пока не разобрался, так как нет деталей никаких. Реагирует на дотрагивание и щупанье пальцами в районе ЛН1 (U18), сопротивлений R5, R6. Один раз даже удалось получить картинку без полос, когда как-то удачно за что-то держался. Пробовал поиграться R5, R6 - ставил 300 ом, 680 ом и по килоому. Последнее вообще не завелось, а с 300 и 680 ом практически без изменений. Ну ладно, скоро уже приедут разные ЛН1 и кварцы. Попробуем еще.

И последняя странность - не стартует у меня 486 мамка с вашим BIOS - пищит на отсутствие видео. Хотя казалось бы, тут то что может быть не так. На 20 ноге BIOS в момент старта есть /CS. Пока не понял что это такое - программная что-ли бага... Надо запускаться с CGA и смотреть что там в c0000, но пока нет такой возможности. А когда стартуешь с VGA картой и вставленным BIOS - стартует VGA как ни в чем не бывало. Тоже странно, почему они между собой не конфликтуют? Хотя на VGA буфер между BIOS и шиной есть, может просто передавливает...

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

С BIOS'ом разобрался - у вас в начале стоит размер 4 параграфа (2048 байт), а размер самого бинаря - 1024 байта. Поэтому BIOS мамки не мог найти контрольную сумму и игнорировал этот биос. Поправил и заработало. Ну то есть как, заработало.... Приветствие выводит :) А дальше 486 переключает наверное в какой-то граф режим и уже ничего не видно. Но это я только что включил, еще толком не разобрался что к чему.

Tronix
25.03.2021, 19:20
Ну я как всегда, легкий путей же мы не ищем...
Заменил кварц - это ровным счетом ничего не дало.
Заменил КР1533ЛН1 (U18) и поднял на панельку на КР1531ЛН1 - немного картинка поменялась, но все равно проскакивали полосы. Пробовал так же КР531ЛН1 - так же картинка несколько видоизменялась, но все равно с полосами и искажениями. Пробовал даже 155ЛН1 - с ней ожидаемо не завелось вообще.
Заменил КР1533ИЕ5 (U19) и поднял на панельку на КР1533ИЕ5 другого завода и года выпуска. Не изменилось ничего.
Заменил КС531ЛИ1 (U20) и поднял на панельку на КР1533ЛИ1 отличную от той, которая изначально стояла до 531 серии. Не поменялось ничего.
И наконец добрался до К555ИР10В (U21) - поднял на панельку и заменил на К555ИР10 (без буквы В на конце). И чудо произошло:

https://i.ibb.co/k6ykvCs/P1130943.jpg (https://ibb.co/k6ykvCs) https://i.ibb.co/2PXJ7DN/P1130942.jpg (https://ibb.co/2PXJ7DN)

Картинка шикарная, очень понравилась! Четкая, без всякого муара и каких либо других дефектов.
Что интересно, которая стояла К555ИР10В проходит тесты в тестере микросхем от Тролсофта, определяет ее как ИР10. Нашел вроде бы этикетку на 555ИР10, из которой понял, что с буквой В на конце отличается от без буквы только лишь током потребления, у В оно меньше. Больше вроде различий нет, если верить этикетке. Ну да ладно, главное заработало, ура!

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

Tronix
26.03.2021, 08:22
Воюю с BIOS и отдельно стоящей картой - выводит приветствие и после этого ребут, опять выводит приветствие и опять ребут. Так раз 3-6, но потом 486 начинает тестировать память и я даже доли секунд вижу как бегут килобайты протестированной памяти, потом черный экран, мигающий курсор пропадает, но дос по лампе активности HDD загружается. Но экран черный без курсора (только синхронизация). Пока не понял, что это - программный или аппаратный глюк.

Когда устанавливается вектор прерывания int 10h в таблице прерываний воткнул перед этим cli, потом sti - обычная практика. Воткнул в обработчике прерывания pushf и при выходе popf - не знаю, просто чтоб было. Смотрю дальше...

freddy
26.03.2021, 12:50
Рад что заработала. Очень здорово что не испугались трудностей и доделали.


потом черный экран, мигающий курсор пропадает, но дос по лампе активности HDD загружается. Но экран черный без курсора (только синхронизация). Пока не понял, что это - программный или аппаратный глюк.
Осталось только с загрузкой разобраться?
Это похоже на аппаратный глюк. Исчезнувший курсор говорит о активном VSP у CRTC. а чтоб это появилось, нужно у CRTC DMA Underrun создать. Создать это можно единственным путем, сломав настройки DMA, записью в занятые нею порты. Пока работает курсор - видео работает нормально. Это можно использовать для диагностики. Можно попробовать изменить базовый адрес видеокарты, по отключать всю периферию в материнке. Отключите все, должны увидеть, что нет загрузочного диска, а потом можно двигаться дальше.


С BIOS'ом разобрался - у вас в начале стоит размер 4 параграфа (2048 байт), а размер самого бинаря - 1024 байта. Поэтому BIOS мамки не мог найти контрольную сумму и игнорировал этот биос. Поправил и заработало.
Любопытно что это у Вас повлияло. Контрольная сумма не ищется в самом теле видео биоса. Просто все округляется в большую сторону с шагом 2кб (минимум 4 сектора которые и были), а потом считается контрольная сумма циклическим суммированием и получается 0. И любое количество дополнительных Кб, заполненых FFh никак на это не влияют. Число дополнительных 1кбайт FFh получается четным. Это так делает моя 386я на Award bios и 100% китайских XT-шек
Но главное что заработало. Просто 486е я уже не застал, их биосы могут работать по другому.


А дальше 486 переключает наверное в какой-то граф режим
Так и есть и это не наверно. Оно в графическом режиме выводит свой логотип Energy Star, ведь считается что это VGA, но мы то знаем что нет.


Когда устанавливается вектор прерывания int 10h в таблице прерываний воткнул перед этим cli, потом sti - обычная практика.
Как хотите. Но это здесь не нужно. Видео запускается в такой момент что еще ничто не способно ему повредить установить вектор.

Tronix
26.03.2021, 18:28
Нет, что-то где то все-таки не так. Попробовал сменить платформу на 286 - нет заставки BIOS, но особо долго не мучал, переполз на 386 (ибо поддерживает загрузку в моей текущей конфигурации с SD-карты). Тут тоже нет заставки BIOS, так же не стартует.
Загрузился опять без флешки BIOS совместно с VGA картой - и опять зацикливается vg75run.com . При этом на R_DMA бегут какие-то импульсы, нифига не иголки, а прям конкретные пачки меандра отколотого от 32КГц. При этом HRT0, HRT1, HRT2 примерно равны, там 32КГц с одинаковой скважностью и формой, правда смотрю одним щупом. Но вроде и двумя раньше смотрел, там друг относительно друга они не съезжают, а если и съезжают то на мизер, как раз на иголки, а не на целый период меандра. Может ЛП5 U34 махнуть не глядя, потому что я не понимаю как она не может три одинаковых сигнала сложить.

Но в этом ли дело, или опять в шинном арбитре.. Посмотрел IO_READY - ну там уровень ноля не ноль конечно, но примерно ~0.6-0.7 вольт... Поменял U5 (555ЛЛ1) на всякий случай на 531ЛЛ1, но это не изменило ничего.
Не знаю, махну ЛП5 для начала...

И интересный прикол с 386 и Mr. BIOS - когда вот проверял совместно с VGA картой и все-таки проинициализировал VG75 путем закоментирования там чтения из портов, на ВГ75 вывелось изображение, все хорошо. И потом я пошатнул VGA карту в слоте, и комп завис. А после ресета 386 сам вывел изображение на ВГ75 карту, ругнулся что у меня изменилась видео-конфигурация (VGA не определилась, так как пропал контакт в слоте), и предложил продолжить - продолжил, загрузился DOS, загрузил потом Turbo Pascal в монохроме, только разве что курсор стоял в верхнем левом углу по понятным причинам, а так прям - Mr.BIOS сам подцепил ее как MDA и вполне с ней работает. Покачал VGA карту, видать контакт опять появился, и после перезагрузки у меня изображение вывелось сразу на две видеокарты - и на ВГ75 и на VGA, BIOS опять ругнулся на изменение видео-конфигурации и предложил продолжить - удалось синхронно (с дублированием картинки) поработать в двух-мониторной конфигурации средствами штатного 386 BIOS. Такой вот у "трешки" BIOS продвинутый попался.
Ладно, пойду ЛП5 менять...

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

Нет, ЛП5 ни при чем. Просто все время уходит на реинициализацию по in al,dx; test al, 00000010b DMA Underrun; jnz @crtc_ini. Если просто закоментировать этот переход, то все отлично показывает....

freddy
28.03.2021, 17:16
Tronix, Провел лабораторную работу по замене диода D7 на два последовательно включенных К555ЛН2. Никаких изменений не обнаружил, все так же работает как и с диодом. Диод вернул на место.
Можете попробовать напаять несколько небольших электролитических конденсаторов по питанию в центре платы, там где стоят DMA и CRTC? Может питание фонит?

А я пока решил поэкспериментировать с статусным регистром 3dah. потом напишу, что вышло.

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

Ещё протестировал работу видеокарты с вставленным видеобиосом совместно с tvga9000i. Почему то трайдент запускается без проблем. Хотя по логике не должна стартануть ни одна. Получается что у трайдента выходы шины данных намного мощнее чем у меня?

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

Или у меня что то не так сделано?

Tronix
28.03.2021, 18:03
freddy, Я много чего вчера пробовал.... Во-первых вернулся обратно на 486 платформу, потому что в ней не зацикливается программа vg75run (то есть читает из статуса вг75 нормальные биты, без выставленного DMA underrun). И в целом, казалось бы на 486 вроде все работает, но с нюансами. Первый нюанс - это про VG75-BIOS. Почему-то он стартует несколько раз, раза 4-5. То есть появилась заставка, подождала маленько, очистка экрана, снова заставка, снова подождала маленько и по-кругу. Но все-таки после этого основной BIOS выходит из этого порочного круга и начинает тестировать память, это видно несколько секунд на экране, но потом черный экран и курсор пропадает и только синхра. При этом комп продолжает тестить память (слышно по спикеру), а потом и вовсе нормально загружает DOS (видно по лампе активности хдд).

Пробовал разные шаманства с вг-биос, в том числе включил по org 1eh строку "IBM Compatible BIOS", где-то читал что некоторые биосы проверяют наличие по смещению 1eh наличие символов "IBM", не знаю на сколько это правда, но вот включил. Ничего это не дало конкретно в моем случае. Дальше расширил BIOS до максимума имеющийся 28C64, то есть до 8Кб, поправив при этом в заголовке количество параграфов 10h и в конце контрольную сумму. Ничего это не дало. Так же натыкал в vg75-BIOS везде где только можно контрольный вывод в 80h порт и вставил пост-карту. Так же особо ничего не дало, просто еще раз видно, что vg75-BIOS стартует раза 4-5, точно не считал, и только потом управление передается дальше. Не знаю, может просто биос такой попался, что сканирует все от c0000 с каким-нибудь шагом, например в 400h и выполняет каждый встретившийся на пути Uk, то есть надо просто расширять до 32Кб и зашивать в 27c256. Ну это ладно, не основная проблема. Основная - что после вроде бы уже показавшегося изображения она через несколько секунд пропадает вместе с курсором.

И дальше вроде бы выявил закономерность. Написал небольшую прогу - резидент, вешается на прерывание 1ch (досовый таймер), и просто каждый раз копирует 4к из b8000 в b0000, тем самым дублируя изображение с vga в mda. Сначала запускается для инициализации vg75run, затем этот резидент и все работает - я вижу копию vga экрана на подключенной VG75 на другом мониторе. Работает идеально и без сбоев.

А потом я добавил в этот резидент установку позиции курсора, ну то-есть в обработчике прерывания после того, как перекинул блок памяти rep movsw, беру координаты из BDA 40h:50h (или где-то там), и вашим кодом из vg75run "set coords" устанавливаю координаты вг75, только не в 0,0, а в координаты, которые прочел из BDA. И тут же выхватил похожий глюк, как при тестировании памяти, то есть несколько секунд работает, и изображение видно, и курсор устанавливается там где он должен стоять, но потом хлоп - и все черный экран, курсора нет, синхра есть, VSP в единице, комп работает.

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

Следовательно, видимо каким-то образом иногда вместо команде VG75 выбирается ВТ57 и портятся его настройки.... А дальше не разобрался.
Пробовал IO_READY вместо диода пустить через один буфер от 155ЛП9 - ничего не дало. Заменил и поднял на панельку одну из 555ИД7 (U16), которая уже ближе к диодам стоит - ничего не дало.
Посмотрел на вторую ножку ~WMV ВТ75 в момент глюка и до этого - тут тоже не понял - идут переодические просадки сигнала в ноль, при этом на входе U10 четвертая нога ~IOWA постоянная единица, а на выходе 16 нога ~WMV - уже есть переодические просадки в ноль. И это при всем при том, что сама по себе ~WMV еще и к питанию притянута. Кто ее вниз тянет иногда? Получается что сама ВТ75 это делает или же ВГ75-ые, но не понятно зачем и должны ли.
U10 тоже поднял на панельку и заменил - ничего не поменялось. Так же еще до кучи пробовал заменить все три текущих ВГ75 на другие три ВГ75 другого завода одинаковые - ничего не изменилось.

А дальше уже ночь случайно была и я пошел спать -)

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

Про совместный запуск с VGA картой - у меня тоже пересиливает VGA карта. Почему пока не понял, да и особо не думал на эту тему. Пока честно говоря это не самое важное )

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

А, про электролиты - стоят уже давно два здоровых по 1000мкф каждый, в тех же местах где и у вас на плате (судя по видео).

Tronix
01.04.2021, 16:01
Никак не сдается плата.

Во-первых вот программка TSR, которая дублирует b8000 в b000 по таймеру, про которую писал выше. В самом начале есть def SET_COORD - это признак, что нужно помимо копирования области памяти еще устанавливать курсор. Вот с ним - несколько секунд изо есть, потом черный экран без курсора. Если закоментировать SET_COORD, то есть просто постоянно копировать b800 в b000 и не устанавливать курсор, то все работает идеально.

Предположив, что что-то портит регистры ВТ57 при записи в ВГ75 позиции курсора, сделал следующий мод: Отрезал GND от 4 ножки ИД7 U16. Использовал свободный блок в U20, завел туда /IOW и /IOR, а с выхода прокинул кабель на 4 ножку ИД7 U16. Таким образом дешифратор портов работает только когда есть чтение или запись порта. Встал осликом на /CS_DMA, теперь там всегда высокий уровень, когда к нему нет обращений, а к нему нет обращений из TSR. А раньше были просадки в ноль, так как дешифратор работал и на память, и было не понятно - толи это реальное обращение к DMA, то-ли просто память рефрешится и дернула /CS_DMA вниз. Короче, просто смотреть ослом удобнее стало. И все равно, при постоянном высоком уровне /CS_DMA, изображение пропадает. То есть никто в ВТ57 ничего не записывает, так как микросхема не выбрана, и соответственно не портит настройки. А изо пропадает.

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

Возвращаемся наверное к дешифраторам и арбитрам шины. Написал простой тест памяти b000 на турбопасцале - пишем 32кб рандома, читаем, сверяем. Пока ВТ57 не запущен (не было инициализации) - тест проходит без проблем. Если инициализировать карту vg75run.com и запустить тест - то видно, что присутствуют ошибки. Единственная закономерность - ошибки присутствуют по адресам, оканчивающимся на 0xFF, реже на 0xFE.

Решил временно заменить группу D1, D2, D3, D6 на кусок К555ЛИ6 (два элемента 4И). R42 выпаял. Вместо D7 повесил обратно буфер от 155ЛП9. Количество ошибок уменьшилось, но все равно появляются. Так же в основном на адресах, заканчивающихся на 0xFF.\

Не знаю дальше чего... Ну раз уж начал диоды выкорчевывать, наверное тогда и дальше пойду - D8, D9, D10, D11 так же удалю и подключусь ко второй половинке 555ЛИ6.

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

D8, D9, D10, D11 так же удалил, удалил R7, заменив этот узел на вторую половинку 555ЛИ6. Ничего особо не дало.
Еще заменил U15 555ЛЛ1 на 1531ЛЛ1 - теперь ошибок по памяти стало совсем мало, но все равно они бывают (так же на адресах, заканчивающихся на 0xFFh).
Все, больше что делать не знаю.

freddy
10.04.2021, 12:55
Дошли руки допаять имитатор статусного 3dah регистра vga видеокарты. И внезапно VC запустился.
https://i.servimg.com/u/f90/20/09/39/66/th/800e9f10.jpg (https://servimg.com/view/20093966/55)
А если он запустился, то значит и ещё что то запустится из того что не могло.
Мысли грустные. Для полной совместимости с vga нужно всю структуру портов ввода-вывода скопировать? Это железо не рассчитано на такое. Без изменения байта конфигурации оборудования ничего хорошего не выйдет.
Совместимой видеокартой оно не станет. Просто другой видеокартой да.

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


Никак не сдается плата.
Все, больше что делать не знаю.
Увеличивать длину сигналов записи и чтения. Т.е после того как карта отпустит ~bsen, шина завершает цикл обращения к карте. У вас скорее всего за 1 такт, так как счётчик вейтов давно закончился (ведь внутренний цикл dma у Карты очень долгий по меркам isa). А 1 такт 8Mhz это очень быстро для динозавров типа вг75. Пока попробуйте тактовую частоту шины снизить.
Я подумаю как удлинить сигналы, тем что уже есть на карте

Tronix
10.04.2021, 18:34
Да, я пришел к тому, что неправильно записывается в регистры ВГ75 установка курсора. То есть не всегда даже запись проходит, так как иногда ВГ75 выставляет в статусе бит неверная команда или недостаточно параметров.

Tronix
10.04.2021, 21:10
Я подумаю как удлинить сигналы, тем что уже есть на карте
Да можно в принципе и вторым этажом напаять какую-то микросхему, только лапки ненужные не запаивать, а остальное проводочками. Так много кто делал, в том числе и серийно...

Tronix
12.04.2021, 10:21
Дошли руки допаять имитатор статусного 3dah регистра vga видеокарты. И внезапно VC запустился.
https://i.servimg.com/u/f90/20/09/39/66/th/800e9f10.jpg (https://servimg.com/view/20093966/55)
Кстати, у вас на изображении так же символ залазит на чужой аттрибут, или последние пиксели от последнего символа рисуются не на той строке, а на следующей, ровно как и у меня. Я думал это у меня глюк, а это значит так и должно быть...

https://i.ibb.co/mRts1xR/800e9f10-delta.jpg (https://ibb.co/mRts1xR)

freddy
19.04.2021, 14:30
Да можно в принципе и вторым этажом напаять какую-то микросхему, только лапки ненужные не запаивать, а остальное проводочками. Так много кто делал, в том числе и серийно...

Не стоит вторым этажом. Попробуйте так.
75261

Я гонял vg75mem сутки, ни одного сообщения так и не увидел. Если нажать кнопку - выходит в dos. Программке добавить бы какой нибудь прогресс бар или индикатор активности, а то кажется как будто зависла.

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


Кстати, у вас на изображении так же символ залазит на чужой аттрибут
Это я знаю почему, на данном этапе не обращайте внимания. Контроллер атрибутов работает немного быстрее чем нужно.
Главное чтоб у Вас память без ошибок заработала

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

Если этой задержки мало, вместо CCLK подайте U18e_10

Tronix
19.04.2021, 16:33
Программке добавить бы какой нибудь прогресс бар или индикатор активности, а то кажется как будто зависла.

Так она же выводит постоянно мусор на монитор, в b0000, на ВГ75 карте, по нему можно видеть, что она работает



Главное чтоб у Вас память без ошибок заработала
Главное даже не память, а что бы запись в регистры ВГ75 происходила без ошибок. Ну память тоже, да, конечно важно. Попробую на днях, спасибо за схемку, отпишусь.

freddy
20.04.2021, 13:04
Так она же выводит постоянно мусор на монитор, в b0000, на ВГ75 карте, по нему можно видеть, что она работает

С одним монитором не удобно. :)
Сперва память, потом порты ввода вывода. Там есть свои особенности. Я пока тестовую программу придумаю

freddy
21.04.2021, 17:41
75270
Вот тест потов ввода вывода. Перед ним видеокарту запустить запускалкой vg_run.com

Tronix
22.04.2021, 22:00
Не стоит вторым этажом. Попробуйте так.

Сделал доработку, вместо CCLK подал U18e_10 (хотя сначала пробовал CCLK). Результаты - на мой взгляд ничего не поменялось. Программка mondub несколько секунд выводит изображение, потом черный экран и курсор пропадает. Так же как и раньше.
Тестилка памяти - тут так:

https://i.ibb.co/gydZHQb/P1130949.jpg (https://ibb.co/rk32TqK)

Появляются ошибки по адресам, заканчивающимся на FFh, как и раньше. И происходит не всегда верное считывания с первого раза из памяти по рандомным адресам. Так вроде бы тоже было раньше.

Тест iotest при этом проходит успешно. Но у меня то в mondub при установке курсора нет отключения dma, и ожидания завершения фрейма и тд... В этом разница.....

PS: Посмотрел сигналы на ТМ2 на входе (с U5C8) и на выходе ~RDY - практически идентичны, то есть сигнал то особо и не удлиняется. Правда без общей земли смотрел, но на первый взгляд различий или нет, или они очень микроскопические.....

freddy
24.04.2021, 19:58
Тест iotest при этом проходит успешно. Но у меня то в mondub при установке курсора нет отключения dma, и ожидания завершения фрейма и тд... В этом разница.....
Хорошо что проходит. В разнице наших методов программирования важным является приостановка DMA и не важным задержка методом подсчета кадров. Для адекватного визуального восприятия перемещения курсора и наблюдения ритма движения эта задержка именно таким методом важна. Это же io test? Что же лучше циклического чтения порта на максимальной скорости :))???
Вы навели меня на мысль Programmers manual написать, так как там не все просто. Но это потом.


Кстати, у вас на изображении так же символ залазит на чужой аттрибут, или последние пиксели от последнего символа рисуются не на той строке, а на следующей, ровно как и у меня. Я думал это у меня глюк, а это значит так и должно быть...
У меня уже все хорошо, хоть и не идеал.
Я немного изменил видеогенератор. Изменения изобразил тут. https://disk.yandex.ru/i/3HYfqkQ437yq0A
u36,u45 теперь синхронизированы от u21_15, добавлены d16,d17,r3. Убраны r3(старое обозначение),r8,r9,r10. Затрат никаких, но эффект ощутим.
https://i.servimg.com/u/f90/20/09/39/66/th/d2277d10.jpg (https://servimg.com/view/20093966/56)


Тестилка памяти - тут так:
Далее будем заниматься только этим, все остальное не важно.
Начнем с самого простого. Замерьте напряжения питания u8,u9,u10,u1. Здесь я редко бываю, можно писать в WA

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

Tronix, Я подумываю о финальной плате. Все изменения на схеме. Под вопросом статусный регистр и загружаемый ЗГ. Напишите, что из этого нужно, поскольку всего два человека заинтересованы в завершении проекта :) Цена за статусный регистр 1 ир82, 1 ид7. За загружаемый ЗГ 4 кп 11, 1 ва86, 1 ла3. Особенно интересует как Вы собрались использовать загружаемый ЗГ?

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

В целом это все увеличит размеры на сантиметра 3 в длину и будет все ещё сильно меньше и проще cga classic.

Tronix
24.04.2021, 21:10
Я подумываю о финальной плате. Все изменения на схеме. Под вопросом статусный регистр и загружаемый ЗГ.

Я думаю, что наверное загружаемый ЗГ не нужен, так как практически у всех программ есть режим совместимости, например у тех же Norton Utilities. А вот по финальной плате есть пожелания - все таки уйти от диодов, хотя бы в логической части схемы. Что-то мне кажется, что у меня все вокруг них крутится. Например, когда я становлюсь щупом осциллографа на 9 ножку U5C, она же сигнал ~VBA - количество ошибок чтения (чтение не с первого раза) в тесте резко увеличивается... Я конечно замеряю напряжения на указанных вами микросхемах, и о результатах доложусь, но...
Еще не забыть о электролитах по питанию на основных линиях питания, ибо у меня все ИР82 и ВА86 довольно ощутимо греются, так же как и ВГ75 и ВТ57, то есть я полагаю, что потребление у платы приличное. Я, кстати, не знаю как должна вести себя 580 серия защелок и буферов, не сталкивался, но по сравнению с привычными К555АП5(6) или К555ИР22(23) - они просто огненные.

vzuravlo
24.04.2021, 23:10
поскольку всего два человека заинтересованы в завершении

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

Xrust
25.04.2021, 08:57
Tronix, ТТЛ 580й серии греются сильно, это нормально.

Tronix
25.04.2021, 14:44
Замерьте напряжения питания u8,u9,u10,u1.

Замерил, ну почти 5 вольт там, как и везде... Ошибок по памяти нет вообще, если не запускать перед этим vg75run.com.

freddy
09.12.2021, 17:23
Я что то с ней делал в мае. Забыл что. Там диодную логику по убирал, артефакты видеогенератора убрал, электролитические конденсаторы добавил, регистр статуса. Наверное еще что то, смотрите схему сами. Оно работает, ошибок в схеме и плате нет.
https://disk.yandex.ru/i/x-FSjJwuymJdIg
https://disk.yandex.ru/d/_n1j0WY1hE4sYg

так оно показывает
https://i90.servimg.com/u/f90/20/09/39/66/th/4216e310.jpg (https://servimg.com/view/20093966/59)
а так выглядит
https://i.servimg.com/u/f90/20/09/39/66/th/5b130c10.jpg (https://servimg.com/view/20093966/58)
https://i.servimg.com/u/f90/20/09/39/66/th/ae583910.jpg (https://servimg.com/view/20093966/57)

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

BIOS неожиданно подошел предыдущий %)

Ведущий_специалист
09.12.2021, 19:23
ОО, приветствую, Фредди вернулся. Есть ряд вопросов. Я тут решил окультурить твою схему о 2хвг75, даже замакетировал плату. В планах доделать ее графическим ОЗУ как в кр04. Буду рад помощи и ценным указаниям.

Tronix
09.12.2021, 21:15
О, классно! Лишней новой печатки не осталось?

Ведущий_специалист
10.12.2021, 10:40
О, классно! Лишней новой печатки не осталось?

Позавчера заказал только 5 плат видях и 5 плат видео ОЗУ. Если надо поделюсь.

Tronix
10.12.2021, 20:52
Ведущий_специалист, так freddy только вчера 09.12.2021 новые герберы на ISA видюху выложил, ver_2.0 так сказать, с доработками. Я эту печатку имел ввиду. Старая (первая версия) у меня есть.

freddy
11.12.2021, 17:17
О, классно! Лишней новой печатки не осталось?
Есть. Напишите в ЛС куда отправить.


В планах доделать ее графическим ОЗУ как в кр04. Буду рад помощи и ценным указаниям.
ВГ75_dualhed устарела. В ВГ75_ISA я когда то делал загружаемый знакогенератор чтоб поддерживать соответствующие функции VGA BIOS, но потом от этого отказался в пользу сокращения количества микросхем. Схемка древнего прототипа в помощь
https://disk.yandex.ru/i/Kb8w4Uz8ihe8Rw
Обращаю внимание что запись и чтение знакогенератора там асинхронные. И при длительных операциях рекомендуется погасить видео. На моей 386й тестовой машине впрочем это было незаметно.

Tronix
12.12.2021, 15:53
Блин, а я пока всё никак не могу побороть карточку.. Убрал диоды в цифровой части и переделал по новой схеме:

https://i.ibb.co/bHx7pYb/photo-2021-12-12-13-11-29.jpg (https://ibb.co/LQMv4BN)

Сигнал ~RDY формируется через один буфер 155ЛП9. Введена микросхема К555ЛИ3. Но, проблемы остались прежними - когда происходит частая команда изменить координаты курсора, экран тухнет, в статусе торчит Improper Command.

Вспомнил, что у меня есть самопальный "эмулятор ISA", который когда-то смастерил для отладки клона SoundBlaster. Всем заведует STM32, поэтому всеми сигналами можно пошагово управлять. Основными циклами (чтение из порта, запись в порт, чтение из памяти, запись в память), ну и даже вообще каждым отдельным сигналом по отдельности. Решил испытать карточку в нем, потому что не могу понять в чем дело:

https://i.ibb.co/TmrmcGT/photo-2021-12-12-13-59-40.jpg (https://ibb.co/jgHghY5)

Перенес в прошивку STM32 инициализацию карточки из VG75_RUN. Карточка проинициализировалась и запустилась в эмуляторе ISA:
https://i.ibb.co/Y7D6rs2/photo-2021-12-12-15-21-24.jpg (https://ibb.co/XZy9wRX)

И, словил ровно такой-же глюк, как и на компе - при частой команде "установить курсор" изо пропадает и в статусе торчит Improper Command:
https://i.ibb.co/YT34bgB/stat.jpg (https://ibb.co/h1yxC0F)

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

freddy
15.12.2021, 05:36
И, словил ровно такой-же глюк, как и на компе - при частой команде "установить курсор" изо пропадает и в статусе торчит Improper Command:
пробуйте так :
set_cur_pos:
mov dx,VT57_cmd
mov al,80h ; Temporary stop DMA service
out dx,al

mov dx,vg75_cmd
mov al,10000000b ; CRTC set curs CMD
cli
out dx,al
dec dx
mov al,cl ; set column
out dx,al
mov al,ch ; set row
out dx,al
sti

mov dx,VT57_cmd
mov al,84h ; Start DMA service
out dx,al

ret

Error404
15.12.2021, 14:21
ОО, приветствую, Фредди вернулся. Есть ряд вопросов. Я тут решил окультурить твою схему о 2хвг75, даже замакетировал плату. В планах доделать ее графическим ОЗУ как в кр04. Буду рад помощи и ценным указаниям.

Заведёте новую тему на ваш проект? Будет интересно почитать.

freddy
15.12.2021, 15:28
тут ее bios на всякий случай, а то я забыл выкладывал или нет.
https://disk.yandex.ru/d/DBdvi38S39Q7KQ
Это не окончательная версия.

Ведущий_специалист
17.12.2021, 12:10
Ведущий_специалист, так freddy только вчера 09.12.2021 новые герберы на ISA видюху выложил, ver_2.0 так сказать, с доработками. Я эту печатку имел ввиду. Старая (первая версия) у меня есть.

Не, я по своему платки развел. Я копаю в сторону улучшения рк86. Придут платы попробую дело по мере документировать.

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




Обращаю внимание что запись и чтение знакогенератора там асинхронные. И при длительных операциях рекомендуется погасить видео. На моей 386й тестовой машине впрочем это было незаметно.
Вот об этом я долго и нудно думал. Если с проблемой тормоза вт57 мало мальски понятно, то с графикой заставляет задуматься серьезно. Я только придумал что работа проца с графическим ОЗУ возможна лишь в момент кадрового гасящего импульса. Но тут тоже есть над чем подумать, не будет ли это слишком медленным? С чтением вообще ж, пока что лучше двойного чтения я не допер. Схемку пока что не смотрел - но видно что как то совсем просто отделалася. И вопрос... Зачем гасить видео то??? не проще ли программисту вырубить пока графическое ОЗУ от видеогенератора и тем самым пока переключить на работу с ПЗУ? Я к тому, что тайловая графика при 255 символах в доступе открывает очень много возможностей и тем самым достаточно в начале работы грузить графическое ОЗУ и потом уже его не трогать. А если сделать работу с графическим ОЗУ как в кр04 - так вообще красота получается, можно генерить атрибутами любой экран хоть специалист хоть орион хоть спектрум. Я эту тему уже продумал.

freddy
18.12.2021, 09:29
Но тут тоже есть над чем подумать, не будет ли это слишком медленным?
все зависит от центрального процессора и системной шины. Машина с isa смогла бы за время VRTC влить 4кб знакогенератор. 8080 наверно не уcпеет.Одна строка 100CCLK, VRTC 49 строк. Соответственно имеем 4900CCLK. Даже если 8080 будет работать на CCLK (3,125МГц), то явно видно что 4096 байт не зальет.


Схемку пока что не смотрел - но видно что как то совсем просто отделалася.
Посмотрите. Там готовое решение. Я немного вклиню комментариев, чтоб проще понимать. Знакогенератор находится в адресном пространстве B0000-B7FFF. При обращении к нему, микросхема U29 c помощью шинного коммутатора u39-u43, немедленно откидывается от видеогенератора и подключается к системной шине ISA. Там шина сделает свою работу по записи/чтению и как только исчезнет сигнал ~CS_CHAR, знакогенератор снова подключится к видеогенератору.


И вопрос... Зачем гасить видео то??? не проще ли программисту вырубить пока графическое ОЗУ от видеогенератора и тем самым пока переключить на работу с ПЗУ?
на моей схемке же видно, что нет там ПЗУ. Есть ПЗУ под видеобиос и там то и предполагалось хранить наборы символов для знакогенератора. В общем ничего нового, все как у VGA видеокарт. А из DOS можно и свои шрифты подгружать.

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


А если сделать работу с графическим ОЗУ как в кр04
проще собрать именно кр04, интегрировать в него видеогенератор с VG75_dualhead. В кр04 видеокарта работает синхронно с процессором, видеопамять на удвоенной частоте. Половина тактов процессору, половина видеокарте. Но это будет уже не кр04.

Ведущий_специалист
18.12.2021, 11:33
все зависит от центрального процессора и системной шины.
Интересно, вм85 на максимальной частоте насколько справится с задачей. там вроде 5 мегагерц.



При обращении к нему, микросхема U29 c помощью шинного коммутатора u39-u43, немедленно откидывается от видеогенератора и подключается к системной шине ISA. Там шина сделает свою работу по записи/чтению и как только исчезнет сигнал ~CS_CHAR, знакогенератор снова подключится к видеогенератору.

Я так делал в пальмире своей. вм80 медленный, графика идет со скрипом и все мерцает.




проще собрать именно кр04, интегрировать в него видеогенератор с VG75_dualhead. В кр04 видеокарта работает синхронно с процессором, видеопамять на удвоенной частоте. Половина тактов процессору, половина видеокарте. Но это будет уже не кр04.

А вот это в процессе. КР04 я собрал и завел его на 95%. Там все сложно с этим.... А платы едут. Можно будет и скрестить ежа с носорогом. Учитывая что в кр04 стоит контроллер шины, то должно получиться что то дельное. А то что это будет уже не кр04 - это не страшно. Программного обеспечения на него скорее всего выпущено было с кассетой в комплекте. Ну и попользовавшись этим компом в эмуляторе конечно же сразу выявились нюансы для доработок.

Xrust
18.12.2021, 11:56
Ведущий_специалист, а необходимо ли вообще успевать за VRTC полностью обновлять знакогенератор?

freddy
18.12.2021, 13:01
Интересно, вм85 на максимальной частоте насколько справится с задачей. там вроде 5 мегагерц.
Можно вполне достаточную скорость получить если еще и HRTC использовать. HRTC это 20CCLK. Вполне можно успеть 2 байта в видеопамять протолкнуть.
Строк у нас 400. И это 8000CCLK за счет HRTC. И еще есть 4900CCLK за счет VRTC. Итого 12900CCLK. Этого вполне достаточно чтоб прокачивать двигающиеся фигурки плавно. Такой сигнал (HRTC и VRTC) у меня есть в новой схеме. Смотрите на 0й бит регистра статуса #3da. Это по аналогии как у обычных VGA карт, для совместимости. Некоторое подобие сигнала занятости видеопамяти. Его к стати можно завести на контроллер прерываний, тогда будет совсем хорошо.
А так то этот метод не самый лучший, но простой.
У меня методов еще есть.
+++++Двойная буферизация. Это когда две микросхемы памяти. Одна из них всегда подключена к видеогенератору, другая к центральному процессору. И по завершению модификации содержимого они меняются местами с помощью шинных коммутаторов.
+++++Отложенная запись. Это когда процессор пишет данные во временный буфер, из которого они потом переписываются в видеопамять с помощью специального автомата внутри видеокарты, во время, когда видеопамять свободна. Этот метод использую я и производители видеокарт. Применительно к VG75 скажу что память знакогенератора ей нужна только во вторую половину CCLK. Первая половина наша.
+++++Синхронная запись. Это как в КР04. Но тут есть недостаток. Видеокарта работает синхронно с процессором и видеопамять нужна быстрая, так как работает на удвоенной скорости. Так же понятно, что в таком случае, видеокарту просто так не поменять, она является неотъемлемой частью системы.

freddy
18.12.2021, 18:31
Ведущий_специалист, я тут случайно нашёл другое изделие.
https://zx-pk.ru/threads/31357-videokarta-na-mc6845.html?p=1045431&viewfull=1#post1045431
На вид оно значительно проще. Софт то вы сами собираетесь писать. Так что без разницы какой видеоконтроллер.
А графику если нужно, то там вобще все изи. Параллельно, то есть в обход ЗГ ставите однонаправленный шинный формирователь. У пзу ЗГ гасите ~CE, у шинного формирователя активируете ~OE. Класс! Обход ЗГ, байты из памяти напрямую записываются в сдвиговый регистр. Графика :)

Tronix
18.12.2021, 21:54
пробуйте так :
set_cur_pos:
mov dx,VT57_cmd
mov al,80h ; Temporary stop DMA service
out dx,al

mov dx,vg75_cmd
mov al,10000000b ; CRTC set curs CMD
cli
out dx,al
dec dx
mov al,cl ; set column
out dx,al
mov al,ch ; set row
out dx,al
sti

mov dx,VT57_cmd
mov al,84h ; Start DMA service
out dx,al

ret

Да, так начало работать. Без остановки ДМА - не работало ни в какую.


тут ее bios на всякий случай, а то я забыл выкладывал или нет.
https://disk.yandex.ru/d/DBdvi38S39Q7KQ
Это не окончательная версия.

Выкладывали для первой версии ISA карты. Тут я вижу, что вставили вышеприведенный пример в обработчик установки позиции курсора в int 10h, это хорошо. Но, в таком виде у меня на моей 486 биос не заработал - наотрез четверка отказывается грузить видео биос размером в 1024 байта - пищит спикером на отсутствие видюхи (три коротких вроде).

Поэтому проделал то же, что и со старым BIOS - поменял размер в параграфах на 16 и расширил до 8192 байт. Так начинает грузить. Но, почему-то делает это 4 раза подряд, то есть выводит заставку, ждет, очистка экрана - заставка - ждет, очистка экрана - заставка - ждет и так же еще раз и только потом загрузка. Видимо огрехи неполной дешифрации адреса, когда C0000 + 8192 = C0000, а системный биос от четверки перебирает именно такими кусками по 8к. Ну да и фиг с ним, поправил просто дополнительной строчкой cmp es:[di],ax где-то здесь:

xor di,di ;Set int10h vector
mov es,di
mov di,10h*4
cld
mov ax,offset int_10

cmp es:[di],ax ;Check if already vectors installed
je nothing_to_do

stosw ;Store int10h entry point
mov ax,0c000h
stosw ;Store Vbios segment


После чего стало все нормально, один раз заставка выводится и дальше запуск DOS. VC ожидаемо без 3dah не запустился, поэтому взял в руки HIEW и занопил в самом VC.COM все места, где там ждет он retrace. После этого VC запустился, но почему то сразу пишет Press ENTER to return to Volcov Commander. По памяти вспомнил, что такое поведение характерно когда выход в волков происходит не из текстового режима. Загрузил debug.com, накидал прогу mov ah,f; int 10 - получил билеберду в AX=0300, BX=0050, то есть кол-во символов в строке 3, текущий видеорежим 0. Сразу посмотрел сюда:

int_10_fn0F:
mov al,byte ptr ds:[video_columns]
mov byte [bp+int_10_ah],al
mov al,byte ptr ds:[video_mode]
mov byte [bp+int_10_al],al
mov al,byte ptr ds:[video_page]
mov byte [bp+int_10_bh],al
ret


Фиг его знает, но как-то видимо у меня мой TASM не правильно среагировал на mov byte [bp+int_10_ah], выдавая в листинге mov [bp][2], вместо mov [bp][1]. Так же и с остальными адресами регистров в стеке. Поправилось просто удалением ключевого слова byte


mov al,byte ptr ds:[video_columns]
mov [bp+int_10_ah],al
mov al,byte ptr ds:[video_mode]
mov [bp+int_10_al],al
mov al,byte ptr ds:[video_page]
mov [bp+int_10_bh],al
ret


После этого VC.COM перестал просить нажать Enter каждый раз перед запуском.
Турбо паскаль (TURBO.EXE) запустился с ключиком /N- (запрещает ожидание retrace).
ASCII редактор The Draw - запустился.

Norton Commander какой-то версии, вроде четвертой, не запустился почему-то. Пятой тоже не запустился, в том числе и инсталятор. UPD: Глянул NCMAIN.EXE - в нем тоже полно mov dx,3dah; in al,dx; test al,xxx; jnz wait_retrace. Странно, что у вас NC вроде бы пускался без порта 3dah ...
PCDoctor - запустился.
Microsoft Diag - запустился.
CheckIt - не запустился. UPD: Так же в теле присутствуют чтение 3dah порта, если занопить их везде, запускается и работает.
Norton System Info - Так же в теле присутствуют чтение 3dah порта, если занопить их везде, запускается и работает.

Но в целом, круто! Очень жду новую платку, с регистром 3dah, буду собирать в каникулы.

Кстати, хотел спросить, а на текущей конфигурации не возможно реализовать текстовый режим 80x43 (переключить шрифт на 8x8, с помощью управления высшими адресами в ПЗУ со знакогенератором, и каким-либо образом настроив ВГ75)? Многие текст-модные демки используют такой режим....

А насчет BIOS наверное еще нужно сделать авто-определение этого самого base_io при старте, чтоб не перекомпилировать каждый раз сам BIOS когда джамперы меняешь...

Ведущий_специалист
19.12.2021, 10:18
Ведущий_специалист, я тут случайно нашёл другое изделие.
https://zx-pk.ru/threads/31357-videokarta-na-mc6845.html?p=1045431&viewfull=1#post1045431
На вид оно значительно проще. Софт то вы сами собираетесь писать. Так что без разницы какой видеоконтроллер.
А графику если нужно, то там вобще все изи. :)

А ведь у меня очень много этих 1809вг6 полно в керамике, штук 100 точно. И кстати я эту схему тоже изучал и даже развёл... Но так и не заказал в печать. Думаю можно тоже заняться.

freddy
19.12.2021, 18:25
Tronix, огромное спасибо за проделанный труд и детальное тестирование. Все недочеты будут учтены в следующей версии BIOS. Также попробую внедрить отличную идею по автодетекту порта карты. Можно еще и адрес видеобуфера авотоматически определять. К сожалению катострафически не хватает на это времени. Этот проект я закончил еще в мае, все не когда было проверить. Но я очень рад что заработало. То, что запустятся не все программы, было ясно еще на стадии зарождения видеокарты. Но общими усилиями многое можно победить, что то Biosом, что то железом.


Да, так начало работать. Без остановки ДМА - не работало ни в какую.
С этим багом понятно. При не законченной записи в парные регистры и возникновении в карте цикла DMA, не стоит дергать ~CS_VG. Сбивается внутренний счетчик операнд команды set cursor. Т.е. всякие там рефреши на шине и прочие задатчики могут создать ситуацию, когда возникнет ~CS_VG, так как на U16,U17 не заведены IOR, IOW. ну и как результат вы уже видели Improper Command в статусном регистре ВГ75. Поэтому было решено не давать начаться циклу DMA, пока не закончится запись в парные регистры.


Но в целом, круто! Очень жду новую платку, с регистром 3dah, буду собирать в каникулы.
При работе карточки совместно с VGA, регистры #3da будут конфликтовать. Поэтому U42 ставьте в панельку, чтоб в случае не надобности можно было вынять. Также C30,C35 можно не ставить, это я перестраховался от разносерийной логики в видеогенераторе и помех от коммутации шины 580-ми регистрами и шинными формирователями.

Кстати, хотел спросить, а на текущей конфигурации не возможно реализовать текстовый режим 80x43 (переключить шрифт на 8x8, с помощью управления высшими адресами в ПЗУ со знакогенератором, и каким-либо образом настроив ВГ75)? Многие текст-модные демки используют такой режим....
Отличный вопрос! Никто не спрашивал еще. Можно. 80х25,80х30,80х50,80х60. И 80х43 тоже можно. Но придется для него дорисовать кастомный шрифт 8х11.
80х60 и 80х50 получаются при шрифте 8х8. 80х25 и 80х30 шрифтом 8х16.

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

https://i.servimg.com/u/f90/20/09/39/66/th/02844c10.jpg (https://servimg.com/view/20093966/60)
это 80х43 с штатным шрифтом 8х8, поэтому и расстояния большие между строк.
https://i.servimg.com/u/f90/20/09/39/66/th/764e1f10.jpg (https://servimg.com/view/20093966/61)
А это 80х60 тоже на штатном шрифте 8х8. Это 2я страница ЗГ. 0я и 1я 8х16 тонкий и жирный

Tronix
19.12.2021, 18:30
Можно. 80х25,80х30,80х50,80х60

Крутотень! А можно для них настройки узнать?

Ведущий_специалист
20.12.2021, 11:50
У меня методов еще есть.
+++++Двойная буферизация. Это когда две микросхемы памяти. Одна из них всегда подключена к видеогенератору, другая к центральному процессору. И по завершению модификации содержимого они меняются местами с помощью шинных коммутаторов.
+++++Отложенная запись. Это когда процессор пишет данные во временный буфер, из которого они потом переписываются в видеопамять с помощью специального автомата внутри видеокарты, во время, когда видеопамять свободна. Этот метод использую я и производители видеокарт. Применительно к VG75 скажу что память знакогенератора ей нужна только во вторую половину CCLK. Первая половина наша.
+++++Синхронная запись. Это как в КР04. Но тут есть недостаток. Видеокарта работает синхронно с процессором и видеопамять нужна быстрая, так как работает на удвоенной скорости. Так же понятно, что в таком случае, видеокарту просто так не поменять, она является неотъемлемой частью системы.

Есть еще один супер метод. Использовать двухпортовую статику. Крайне экономит место на плате и лишает огромного гемороя выше описанного. Но тут вопрос о ламповости самой железки )).

И кстати. Не совсем понятно про быструю память в кр04. Там обычные ру5 стоят (у меня он прекрасно стартует с ру5г и ру5в). Если применить статику (те же 62256) думаю все прекрасно полетит.
А вообще есть мысль вставить .... процессор в видяху... Да да.. вм85 с пзу с библиотеками, биосом и прочим, и ..... с сопроцессором плавающей точки (амд вроде доступны). Наружу эта видяха пускай также "торчит" 8 килобайтами ОЗУ, и никто никому не мешает. Ну если делать - значит делать хорошо и универсально. И это уже решит проблему неотъемлимой части компа.

Насчет первого варианта все классно и круто и быстро... Но вот вопрос... По мне - так память должна быть с одинаковыми данными. То есть тут всеравно нужно как то ПИСАТЬ в обе сразу а читать пофиг из одной из них а иначе один фиг нарвешься на рассинхрон.
Короче пока что самый выгодный вариант - это номер 2, первая половина ссlr работает проц, а вторая половина вг75.


Да и еще момент. Тут если почитать глубоко выше - вы сталкивались с тем что вг75 стартуют по разному и у них нет аппаратного сброса. Проблема очень легко решается программно.

freddy
20.12.2021, 20:13
Крутотень! А можно для них настройки узнать?
Прощитал всё, пользуйтесь.
Первые два байта это 2й и 3й байт команды reset, третий байт для команды Start display,4й и 5й для установки счетчика DMA.
80х30:
10011101b,0fh,00100101b,0bfh,092h
80x43:
11101010b,0ah,00100111b,0dfh,09ah
80x50:
11110001b,07h,00100111b,03fh,09fh
80x60:
11111011b,07h,00100111b,07fh,0a5h

байты для счетчика DMA приведены в порядке LSB,MSB, т.е. так как надо в подпрограмме запуска.

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

Tronix, в этих режимах есть подводный камень. DMA разогнано за пределы своих скоростных возможностей. К примеру в 80х60 прокачивается 672кб/с и еще пропускается через каждые 8байт по 7 тактов. Как видно из команды старт дисплей, burst cycle выставлен 8 байт для достижения предельных скоростных характеристик. Поэтому подводный камень в длине сигнала ~RDY, он может достигать 8 циклов DMA(каждый цикл 4CCLK), что намного, на очень очень много превышает максимально допустимый для спецификации шины ISA. Однако моя 386я машина этого не замечает, т.е.совсем никак не реагирует на такой беспредел. И самое плохое в этом, то что это означает мое не понимание работы ее чипсета.
Путь приведения в норму - применение более лучшего DMAC. ВТ37 и ее более скоростные ее зарубежные прародители могут дать 1,5мб/с и это в 2 раза больше чем надо.

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


Проблема очень легко решается программно.
Давно все решено ;)))

И кстати. Не совсем понятно про быструю память в кр04
кр04 там просто из-за того что такой метод использует. И с его видео режимом любая память сойдет. Однако же понятие зачем быстрая память, придет уже при скорости пикселей 25,175МГц например, если выдавать всего 256 цветов. Поэтому этот метод в видеокартах не применяют.

А вообще есть мысль вставить .... процессор в видяху... Да да.. вм85 с пзу с библиотеками, биосом и прочим, и ..... с сопроцессором плавающей точки (амд вроде доступны)
Ого. Целый графический ускоритель на 8085!!! А схема уже есть, она не сильно сильно секретна? Покажете? А какие библиотеки планируете? Окна аппаратно сможет двигать, переворачивать, зеркалить, закрашивать по контуру, рисовать полигоны, линии?

CodeMaster
20.12.2021, 23:48
Ого. Целый графический ускоритель на 8085!!!
Надо закрывать дефицит на рынке видеокарт. Intel всё грозится вернуться на него, но походу вы раньше будете.

Ведущий_специалист
21.12.2021, 14:26
Ого. Целый графический ускоритель на 8085!!! А схема уже есть, она не сильно сильно секретна? Покажете? А какие библиотеки планируете? Окна аппаратно сможет двигать, переворачивать, зеркалить, закрашивать по контуру, рисовать полигоны, линии?
Ну а почему бы и нет. Схемы пока нет, придут платы - похимичу, прикину, нарисую... Это ж хобби, кто спектрумы бесполезные и бесконечные собирает, а кто это... Странна реакция модератора, вроде должен также с проксоренными мозгами быть.
Какие библиотеки? Да какие в голову взбредут. Все что нужно и полезно. Подал питание на видяху - а она сразу тебе на экране на - заставку. Да ладно, не берите в голову.

Tronix
21.12.2021, 17:19
Тем временем пришла новая платка, еще раз огромное спасибо за нее freddy. Собрал:

https://i.ibb.co/9m0ycGZ/P1140039.jpg (https://ibb.co/qL8m7xJ)

https://i.ibb.co/KWsP0SQ/P1140040.jpg (https://ibb.co/qpgSyV4)

Завелась с первого раза, моментально. Пойду попробую поиграться с режимами 80x43, 80x60 и другими. Может быть удастся посмотреть полноэкранные демки с TMDC (https://www.pouet.net/party.php?which=167)

Tronix
21.12.2021, 22:17
80x50 работает, крутотень! Надо наверное в BIOS ввести функции AH=12h/BL=30h .....

https://i.ibb.co/58CV7Vt/P1140041.jpg (https://ibb.co/vPf8t8g)

MEGAMONSTER
22.12.2021, 09:37
А не было ли попыток скрестить это чудо со спеком? Для ис-доса самое оно было бы.

freddy
24.12.2021, 20:03
Тем временем пришла новая платка, еще раз огромное спасибо за нее freddy. Собрал:
Сборка, как всегда на высшем уровне, выглядит очень круто! Особенный шарм придают новенькие КМ-ки и резисторы МЛТ.
Если б не зеленая маска, то прямо видеокарта родом из СССР :)



80x50 работает, крутотень! Надо наверное в BIOS ввести функции AH=12h/BL=30h .....
Рад, что Вам понравились новые видеорежимы ;)
А может проще дописать функцию AH=00h чтобы устанавливать не стандартные режимы и присвоить им какие то не используемые номера?
Номера выбрать, чтоб стандартное ПО не дергало их.
А так то это вобще не стандартные режимы, и применяются не часто в софте тех годов. Видеокарты в них переводили также не стандартными способами :)
Пока не знаю как это лучше внедрить, мало знаний о способах перевода карт. Через порты напрямую если кто лез в каких то программках, то тут мы пролетаем однозначно.

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


А не было ли попыток скрестить это чудо со спеком? Для ис-доса самое оно было бы.
А никто не пробовал как она в майниге? Интересно, сколько мегахешей на эфире дает...

Xrust
24.12.2021, 20:48
Если б не зеленая маска, то прямо видеокарта родом из СССР
Еще КТ315 не хватает. А зеленая маска и в СССР встречалась, чего уж.

Tronix
24.12.2021, 23:09
А так то это вобще не стандартные режимы, и применяются не часто в софте тех годов. Видеокарты в них переводили также не стандартными способами

Ну, 80x43 ega, или он же 80x50 на vga - более менее стандартный, и в Norton Commander есть и в Volcov Commander (ALT+F9). Правда, волков как-то определяет, есть такой режим или нет, и если нет - то и комбинацию alt+F9 запрещает. В Turbo Pascal есть, Borland C.


Пока не знаю как это лучше внедрить, мало знаний о способах перевода карт.
Да, удивительно, но я что-то как то тоже сходу не очень нашел. Единственное, что нашел что-то такое:

Procedure VGA43(md:byte); Assembler;
asm
mov ax,1201h
mov bl,30h
int 10h
mov al,md
xor ah,ah
int 10h
mov ax,1112h
mov bl,0
int 10h
end;
Procedure VGA25(md:byte); Assembler;
asm
mov ax,1202h
mov bl,30h
int 10h
mov al,md
xor ah,ah
int 10h
end;
Procedure VGA28(md:byte); Assembler;
asm
mov ax,1202h
mov bl,30h
int 10h
mov al,md
xor ah,ah
int 10h
mov ax,1111h
mov bl,0
int 10h
end;
Procedure VGA50(md:byte); Assembler;
asm
mov ax,1202h
mov bl,30h
int 10h
mov al,md
xor ah,ah
int 10h
mov ax,1112h
mov bl,0
int 10h
end;
Procedure VGA12(md:byte); Assembler;
asm
mov ax,1200h
mov bl,30h
int 10h
mov al,md
xor ah,ah
int 10h
mov ax,1114h
mov bl,0
int 10h
end;

Видно, что оперируют функцией AH=12h/BL=30h SELECT VERTICAL RESOLUTION и функцией AH=11h/AL=11h,12h,14h (SET ROM 8x14 GRAPHICS CHARACTERS, SET ROM 8x8 DOUBLE-DOT CHARACTERS, LOAD ROM 8x16 CHARACTER SET).
Но, действительно, похоже это для VGA годится... Как именно VC.COM переключает режимы не знаю, можно попробовать дизасмить, но видимо определяют наличие EGA так:

mov ah,012
mov bx,0FF10 ;' ►'
int 010
cmp bx,0FF10 ;' ►'

Я думал примерно так:
Есть в Bios Data Area такое:

video_dda equ 89h ; byte - video display data area (MCGA and VGA)
Где хранится кол-во строк scan line (200,350,400). По идее, при старте надо заполнить его чем-то вроде

; Store VGA active, 400 scanline
mov ax,biosdseg
mov es,ax
mov byte ptr es:[video_dda],00010001b


А далее в обработчике int 10h/AH=00 нужно лезть туда и устанавливать параметры из таблички в соответствии с..

; CRTC init
crtc_ini:
; get scan line from VGA display data area
mov al, byte ptr ds:[video_dda]
mov ah,al ; save al
shr al,4 ; extract 4 bit
shr ah,6 ; extract 7 bit
or al,ah ; al = scan line; 0=350;1=400;2=200

; calculate parameters table adress
mov si,offset cs:mode_table
xor ah,ah
shl al,3 ; scan line mul 8
add si,ax
push cs
pop ds ; DS:SI = mode table offset

mov dx,vg75_cmd ; Reset CRTC cmd
mov al,0
out dx,al
dec dx
mov al,79
out dx,al
;mov al,10011000b
lodsb
out dx,al
;mov al,0fh
lodsb
out dx,al
mov al,00001001b
out dx,al

inc dx ; Reset counters
mov al,11100000b
out dx,al

lodsw
mov bx,ax
call run_DMA ; Used to time delay for previous cmd

mov dx,vg75_cmd ; Start display
;mov al,00100101b
lodsb
out dx,al

mov cx,5
wait_frame: in al,dx
test al,00000010b ; Check DMA underrun
jnz crtc_ini ; Reinit CRTC if is it
test al,00100000b ; Checkin end of current frame
jz wait_frame
loop wait_frame ;Checking until 5 frame complited

call run_DMA ; Start DMA service
...skip....
;enable default charset page
xor al,al
test byte ptr ds:[video_dda],00010000b
je fnt8x16
mov al,2 ; set 8x8 font
fnt8x16:
mov dx,base_io ; Set 0 charset page
out dx,al

...skip....
mode_table:
;2nd,3rd byte for vg75 init
;dma lo, dma hi
;start display
;dummy 3 bytes for 8 bytes records

;80x50:
db 11110001b,07h,03fh,09fh,00100111b,0,0,0
;80х25
db 10011000b,0fh,09fh,08fh,00100101b,0,0,0
;80х30
db 10011101b,0fh,0bfh,092h,00100101b,0,0,0
;80x60:
db 11111011b,07h,07fh,0a5h,00100111b,0,0,0
;80x43:
db 11101010b,0ah,0dfh,09ah,00100111b,0,0,0

....skip....
;================================================= ===================
;DMA run subroutine. Cold start i8257 DMAC
;IN:BH,BL,OUT:None
;--------------------------------------------------------------------
run_DMA proc near
; cli ;Disable interrupts
mov dx,vt57_cmd
mov al,80h ;Set autoload flag to programming
out dx,al ;chanels 2,3 at the same time
mov dx,vt57_ch2_adr
mov al,0
out dx,al ;set starting adress
out dx,al
inc dx
mov al,bl
out dx,al
mov al,bh
out dx,al
mov dx,vt57_cmd ;enable ch2 service
mov al,84h
out dx,al
; sti ;Enable interrupts
ret
run_DMA endp


При этом в обработчике AH=12h/BL=30h просто менять кол-во строк в video_dda, или как-то так.... Ну и в 11h типа смотреть какой хотят шрифт и так же править video_dda в зависимости от... Но, наверное это тупо, да. Скорее всего так ничего не заработает.


Через порты напрямую если кто лез в каких то программках, то тут мы пролетаем однозначно.
Ну, не совсем однозначно. В случае 386+ и загруженного EMM386 (проц в режиме виртуального 86) есть возможность перехватывать любые порты IO, соответственно делать какие хочешь заглушки. Таким образом, для 386+ и EMM386 можно написать простенькую утилиту эмуляции портов, которая будет в autoexec.bat грузится. Другое дело, что не всем нравится EMM386, и многие его не загружают. Но, в принципе, возможность такая есть...

freddy
25.12.2021, 21:22
Ну, не совсем однозначно. В случае 386+ и загруженного EMM386 (проц в режиме виртуального 86) есть возможность перехватывать любые порты IO, соответственно делать какие хочешь заглушки.
До такого не дойдет. Надеюсь. Обойдемся без крайностей. Лучше хитросделанные проги патчить.


Как именно VC.COM переключает режимы не знаю, можно попробовать дизасмить, но видимо определяют наличие EGA так:
Времени подробно дизассемблировать нет. Но всеже в VC все не так и проще.
Вот так определяется VGA карта:
AH=12h,BX=FF10h Int10h. Если при возврате Bx=FF10h, значит не VGA. Правильный ответ BX=0003,CX=0009. Т.е. цветная с 256кб на борту. И положение переключателей нам не важно.
А вот так он спрашивает параметры её режима:
AX=1130h,BH=00 Int10h. Ответ будет CL=10,DL=18, ES:BP укажет куда то в C000:xxxx. Т.е. 16 байт на символ и 25 строк на экране.
Переключает вобще просто:
AX=0003h int10h,AX=1112h Int10h. Т.е. загрузка шрифта 8x8 из ПЗУ. Тут то и происходит перепрограммирование режима видеокарты.
Далее дело техники:
AH=12,BL=20 Int10h (альтернативный print screen)
ax=1130 int10h. Возврат CL=8, DL=31h. Вот и 50 строк с шрифтом 8х8.
Как другие программы делают, времени нет смотреть.
Что делать с BIOS понятно. Когда то доделаю вышеперечисленные функции.

NEO SPECTRUMAN
26.12.2021, 02:37
нада отдельная АФФТАРСКАЯ тема про девайс
с первым пстом в котором будет собрано все что надо с блаблабла
ато щас это уже портянка с херчтонайдешь...

freddy
26.12.2021, 20:44
Tronix, попробуйте пожалуйста этот bios на 486й плате. Больше не должен 4 раза перезапускаться. Должен сам находить порт видеокарты.
https://disk.yandex.ru/d/dmQDXNbMAJqr2A

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

Очень интересно какую скорость Checkit дает на 486?

Tronix
26.12.2021, 21:58
freddy, Пока просто посмотрел листинг, и могу сказать, что будет 4 раза перезапускаться. То есть выводить стартовую надпись, ждать секунду, очишать экран, выводить стартовую надпись, ждать, очищать экран, выводить стартовую надпись, ждать, очищать экран, выводить стартовую надпись, ждать, очищать экран и поехали. Потому что метку already_set: надо перенести куда-то сюда


already_set:
vg75_not_found: popf
pop ax ;Restore registers
pop bx
pop cx
pop dx
pop di
pop si
pop ds
pop es
pop bp
retf ;Far return to system bios

Но это я поправлю, без проблем. Скорость замеряю на неделе..

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

Я смотрел карту распределения памяти в CheckIt на моей четверке, так вот у меня торчат 4 штуки Ext ROM по адресам C0000, C2000, C4000, C6000, естественно с одинаковым содержанием - это BIOS видюхи. Видимо мой 486 достаточно честный, и при старте он видит, что по C0000 у нас есть extROM на 8Кб - окей, запускаем и сканируем дальше с адреса C2000 - опа, здесь у нас так же торчит extROM на 8Кб - ок, запускаем и тд. Происходит это из-за не полной дешифрации адреса vbROM видюхой.

freddy
26.12.2021, 23:50
Видимо мой 486 достаточно честный, и при старте он видит, что по C0000 у нас есть extROM на 8Кб - окей, запускаем и сканируем дальше с адреса C2000 - опа, здесь у нас так же торчит extROM на 8Кб - ок, запускаем и тд. Происходит это из-за не полной дешифрации адреса vbROM видюхой.
Я сгенерировал 32кб биос. Ссылка в предылущем посте. Напишите как 486й на него реагирует.

Tronix
27.12.2021, 08:16
Я сгенерировал 32кб биос.
А вот с этим пока небольшая проблемка - у меня чего-то внезапно кончились все 27c256 ( Куплю конечно десяточек скоро, но наверное уже в новом году приедут только..

freddy
01.01.2022, 11:30
Что делать с BIOS понятно. Когда то доделаю вышеперечисленные функции.
Я там что то сделал.


Ну, 80x43 ega, или он же 80x50 на vga - более менее стандартный, и в Norton Commander есть и в Volcov Commander (ALT+F9). Правда, волков как-то определяет, есть такой режим или нет, и если нет - то и комбинацию alt+F9 запрещает. В Turbo Pascal есть, Borland C.
Тестировал на DC, VC, TP7. Штатные переключалки "EGA/VGA lines" на месте и работают.

Последняя версия CGA BIOS 0.2b и больше развиваться не будет.
Текущая версия VGA BIOS 0.3, берите https://disk.yandex.ru/d/dLlCl9MxIMF-XA
С наступившим Новым годом!

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

Также придумал как внедрить 80х30,80х43,80х60. У TVGA9000i есть режимы 50h, 51h, 52h. Если оно надо, могу сделать такое у VG75_ISA .

Tronix
01.01.2022, 11:48
Пока нету ПЗУ-шки на 32Кб, поэтому мучаем версию 8Кб. Да на ней я думаю и остановимся, ну куда ему 32Кб?
Вообщем, новый BIOS сначала "не пошел".
Как уже писал ранее, первое что превентивно сделал - перенес метку already_set в самый конец на выход, перед восстановлением всех значений из стека. А то надоедает по 4 раза приветствие писать;
Второе - упорно моя мать не желала грузить Ext-ROM, пищала вроде два коротких три длинных или как-то так, пока не добавил в начало вот это:

jmp powerup

;
; The letters "IBM" must be at offset 1Eh
;
org 01Eh
db "IBM VGA Compatible", 000h

powerup: ;First start up
push bp ;Save all registers to stack
push es


Не знаю, что конкретно помогло - то-ли ей надо что бы четвертый байт был jump, то ли все-таки что бы по 0x1eh были символы "IBM ", но без этой конструкции ну ни в какую не хочет пускать ExtROM по адресу C0000. Эта конструкция и раньше у меня была в прошлых BIOS, еще в первой версии. Просто перенес на новый.

Замерял скорость в Checkit на AMD 486-133@160

https://i.ibb.co/j6VtY9m/P1140047.jpg (https://ibb.co/M28dHyr)

Немного уменьшилась, по сравнению с предыдущей версией BIOS, но оно и понятно - стало mul больше, стали дополнительные вызовы (call) и тд. В целом - все равно очень быстро, быстрее рядовых ISA8 видеокарт.

А вот так выглядит распределение памяти, про которое говорил:
https://i.ibb.co/3pQnvNJ/P1140048.jpg (https://ibb.co/X7MqDsw)

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


С наступившим Новым годом!

О, спасибо, взаимно. Сейчас попробую 0.3!

freddy
01.01.2022, 12:09
Пока нету ПЗУ-шки на 32Кб, поэтому мучаем версию 8Кб. Да на ней я думаю и остановимся, ну куда ему 32Кб?
Вообщем, новый BIOS сначала "не пошел".
Как уже писал ранее, первое что превентивно сделал - перенес метку already_set в самый конец на выход, перед восстановлением всех значений из стека. А то надоедает по 4 раза приветствие писать;
Второе - упорно моя мать не желала грузить Ext-ROM, пищала вроде два коротких три длинных или как-то так, пока не добавил в начало вот это:

Для 8кб ПЗУ биоса нужно дешифровать адреса по другому. Иначе будет 4 раза находить один и тот же биос. Возьмите все же 28с256.
Как правильно писать старт мне не особо понятно. Я так и не нашел нигде нормального описания по структуре биос. У меня 386 ищет по 2кб и считает контрольную сумму. Никаких слов "IBM" не ищет. Проблем с запуском у меня нет. По возможности посмотрите дизассемблером свой биос материнки, что он делает во время сканирования BIOS EXT.

В целом - все равно очень быстро, быстрее рядовых ISA8 видеокарт.
И даже быстрее рядовых ISA16 видеокарт :)))

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

если знаете мануал по биосам, дайте ссылку.

Tronix
01.01.2022, 17:52
Биос v0.3 - огонь! Действительно все режимы переключаются в EGALines, в VC, TURBO.EXE и тд! Очень круто! Спасибо!


Я так и не нашел нигде нормального описания по структуре биос.

Дык, да, нету исходников ни EGA, ни VGA биосов. Только новоделы, типа https://github.com/miurahr/vgabios , там и посмотрел насчет символов "IBM" по org 0x1e. Собственно да, любые BIOS от видеокарт EGA/VGA, которые я видел, всегда содержат этот текст в той или иной форме
IBM EGA: "24006277356 (C)COPYRIGHT IBM 1984"
S3 Virge : "IBM VGA COMPATIBLE BIOS."
Trident: "** RESERVED FOR IBM COMPATIBILITY **"
Какая-то: "VIDEO ROM BIOS IS THE IBM VGA COMPATIBLE(c) COPYRIGHT JOVIAN LOGIC CORP. 1987,1988,1989,1990"
et4000: "This is not a product of IBM (IBM is a trademark of International Business Machines Corp.)"
atimach64: "IBM"
И тд.

При этом "IBM " строго попадает у всех на 0x1e. Видимо вот такая вот фича, недокументированная.


По возможности посмотрите дизассемблером свой биос материнки
Да ну его, он там пакованный, да и лень в целом. Работает же все, ну подумаешь по 0x1e "IBM " добавили. Как видно, все производители это делают, чем ISA_VG75 хуже? -) Не критично.

Зато вроде победил проблемы с памятью, что у меня иногода ошибки проскакивали - заменил резисторы подтяжки R14,R30,R64 и R15 с 3кОм на 1кОм. Уже час гоняет тест памяти без ошибок. Ура!
Но еще остались видимо глюки с записью в регистры ВТ57, так как иногда у меня адреса видеобуфера съезжают когда кто-то видеостраницу меняет (ah=05). Наверно тоже посмотрю в сторону уменьшения резисторов подтяжек щаз попозже...

freddy
01.01.2022, 20:01
Что по вашему мнению должно было получиться? И почему это «велосипед»?

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

Не оправдались ожидания и чуда не произошло? Doom не запустится? :)

Как же я тогда ошибался! DOOM запускается и просто летает на моей тормозной 386й!
https://i.servimg.com/u/f90/20/09/39/66/th/f8865b10.jpg (https://servimg.com/view/20093966/62)

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


При этом "IBM " строго попадает у всех на 0x1e. Видимо вот такая вот фича, недокументированная.
Спасибо! Добавлю в будущие релизы. Видать какая то не документированная магия есть, чтоб кто попало биосы не клепал.

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


Но еще остались видимо глюки с записью в регистры ВТ57, так как иногда у меня адреса видеобуфера съезжают когда кто-то видеостраницу меняет (ah=05). Наверно тоже посмотрю в сторону уменьшения резисторов подтяжек щаз попозже...
попробуйте в процедуре записи функции 05h cli поставить перед первым out, а sti после последнего out

Tronix
01.01.2022, 20:21
DOOM запускается
Ага, я то же погонял в DOOM:
https://i.ibb.co/bN53Kw1/P1140049.jpg (https://ibb.co/KVxGr46)

Как видно у меня режим 80x50. Но завелся не из коробки, а путем правки i_ibm.c, строчки textdestscreen += 4128

#if defined(MODE_T8050) || defined(MODE_T80100)
// Change video page
regs.h.ah = 0x05;
regs.h.al = textpage;
regs.h.bh = 0x00;
regs.h.bl = 0x00;
int386(0x10, ®s, ®s);

textdestscreen += 4096; //4128
textpage++;
if (textpage == 3)
{
textdestscreen = (unsigned short *)0xB8000;
textpage = 0;
}
#endif


Я даже у автора FastDoom спросил, точно мол нет ошибки здесь в размере страницы 4128 - он сказал что мол сам долго не мог понять, подбирал это значение опытным путем, иначе начинает мигать все. И, действительно, в DosBox работает как у автора и не работает с 4096. С ISA_VG75 работает с 4096 и не работает как у автора с 4128. Загадка прямо, почему размер страницы в 80x50 должен быть равен 8256 (4128*2)....


попробуйте в процедуре записи функции 05h cli поставить перед первым out, а sti после последнего out
А теперь я даже не очень уверен, что проблема именно аппаратная, а не программная. Например, если я запускаю VC и переключаюсь в 80x50, затем печатаю просто команду DIR и жму Enter по возвращению в VC вижу следующую картину:

https://i.ibb.co/zbTnr0N/P1140050.jpg (https://ibb.co/82LK0SX)

То есть как-бы адрес видео-буфера сбился. При этом по Ctrl+O я не вижу вывода команды DIR.

В ASCII редакторе The Draw так же такое бывает, если переключится на 80x50 и попытаться загрузить файл - сбивается адрес видео-буфера... Может быть это как раз как-то связано с размером страниц/количество символов. Почему же размер страницы 4128 у автора FastDoom, и при этом все работает в DosBox, а так же автор тестил на реальных видюхах. Может быть тогда в режиме 80x50 количество столбцов должно записываться именно как 50, а не 49. Тогда да, размер буфера 80x50+1 = 4128. Не знаю, загадка прямо.

А вообще 80x50 режимы крутые конечно. Можно .ANS смотреть, можно демки крутить текстовомодные, можно в Doom играть
https://i.ibb.co/9GZwfM3/P1140051.jpg (https://ibb.co/KmKNQ1z)

freddy
01.01.2022, 20:30
А теперь я даже не очень уверен, что проблема именно аппаратная, а не программная. Например, если я запускаю VC и переключаюсь в 80x50, затем печатаю просто команду DIR и жму Enter по возвращению в VC вижу следующую картину:
У меня точно также. Это баг в процедуре пересчета стартовых адресов видеобуфера. Потом поищу. Сейчас гости пришли

freddy
02.01.2022, 14:58
У меня точно также. Это баг в процедуре пересчета стартовых адресов видеобуфера. Потом поищу. Сейчас гости пришли
поправил. Скачайте еще раз по ссылке https://disk.yandex.ru/d/dLlCl9MxIMF-XA
DOOM теперь будет работать прямо из коробки, править ничего не нужно.

NEO SPECTRUMAN
03.01.2022, 03:59
Как же я тогда ошибался! DOOM запускается и просто летает на моей тормозной 386й!

лол

еще раз реквестируетсо первопост с аффтарам



а шо конкретно это за дум?

creator
03.01.2022, 04:54
а шо конкретно это за дум?
Вроде оно:
https://github.com/viti95/FastDoom
https://github.com/viti95/FastDoom/releases

Tronix
04.01.2022, 18:56
Небольшой ролик про текстовый дум на ВГ75, а в качестве звуковой карты - VaninBlaster:


https://youtu.be/JPXJn-TfPtQ

freddy
04.01.2022, 19:34
Небольшой ролик про текстовый дум на ВГ75, а в качестве звуковой карты - VaninBlaster:
Вам бы еще и материнку отечественной разработки, с КМ-ками и позолоченными крышечками! Смотрелось бы ваще огонь! :)

Tronix
05.01.2022, 10:33
Но кстати много чего интересного начинается, когда работает DMA (вывод звуков на саунд бластер). Причем 486 и первопень ведут себя по разному. На 486 например фастдум в режиме 80x50 начинает иногда сбивать адрес видео-буфера, происходит моргание. Пень в этом плане стабильнее, и картинку держит (именно поэтому записал видео с первопнем, а не 486). На 486 программа DSS (http://old-dos.ru/files/file_437.html), проигрывающая MP3, в режиме 80x25 нормально играет MP3, в режиме 80x50 происходит резкое замедление скорости воспроизведения. На пне в режиме 80x25 происходит "зацикливание" одного и того-же куска семпла (подозреваю что 64кб), в режиме 80x50 тоже, хотя скорость не изменяется.
Impulse Tracker запускается в режиме 80x50, однако проиграть свои трекерные мелодии может с трудом - скорость замедленна в десятки раз.

В обоих случаях иногда почему-то происходит запись в регистр управления выбором знакогенератора (base_io+000) случайного значения, и шрифт на экране может внезапно поменяться с 8x16 на 8x8 или 8x16 жирный. Потом когда вздумается - переключиться на нормальный. Такое происходит только когда активно работает DMA.

Таким образом, как и писал freddy, удлиненные циклы /RDY влияют на корректную работу ISA DMA, и чем более высокое разрешение, тем больше глюков наблюдается. С другой стороны системы борятся за жизнь, и наглухо ничего не зависает.

Tronix
05.01.2022, 21:55
Появилась идея - сделать под эту карту CGA эмулятор. Вроде бы ничего не мешает - при выборе режима 04h или 05h адрес видеобуфера переносится куда-то за B800+4000h, ну то есть грубо говоря сменяется отображаемая страница. При этом игра начинает писать в B800 пиксели. Перехватываем вектор 1ch и по таймеру начинаем преобразовывать то что есть в B800 в текстовые символы по B8000+наша видеостраница.
Прикинул пока просто ресайз CGA изображения 320x200 в 160x100 с последующим алгоритмом половинных вертикальных или горизонтальных блоков в 80x50 на паскале:
https://i.ibb.co/LtDNXzg/turbo-002.png (https://ibb.co/tswLTM2)

Исходное изображение:
https://i.ibb.co/YhtVJgg/skb-000.png

Текстовый режим 80x50:
https://i.ibb.co/z5w7N4W/turbo-003.png (https://ibb.co/sPr6tVp)

Ну так себе конечно, но интересно все-же посмотреть "в динамике". Попробую завтра все на ассемблер перенести...

freddy
05.01.2022, 23:25
Tronix, 80х50 и 80х60 являются запредельными режимами для её тормознутого dma 8257. Эти режимы годятся только для редактирования текстов и работы в файловых оболочках и для командной строки. Никаких игр и тем более вывода звука через штатный dma isa не будет в этих режимах. Я раньше писал, про увеличение длительности rdy. Вот оно звуку и не даст играть нормально. Ключевое слово в том посте было «запредельный». Но это не страшно, так как есть более подходящий dmac i8237, и стоит копейки. У него есть даже ускоренный двухтактный цикл :) Прчитайте про него, он намного лучше и быстрее. Однако немного позднее появился и как бы другого поколения. А выбор на i8257 пал именно из-за того что железо должно было быть из конца 70х и выдавать vga. Мне это конечно же удалось, но я тогда и предположить не мог, что кто то станет эту карту так насиловать в 80х50.
Для ваших нужд выход из положения это переход на i8237, в схеме при этом ничего не поменяется, но он немного по другому программируется.
Идея написать эмулятор CGA отличная. Это как в фаст думе. Можно любой режим перекоевертировать в текстовый режим и выдавать в текстовую видюху. Пригодится такая прога. Виртуального Разрешения 160х100 вполне хватит для многих жанров игр.
Информация к сведению:
1. Графический режим я хочу дать именно vg75_isa, а не mc6845_isa.
Его спецификации такие: 640х400х2 70гц. Распределение памяти типа как у геркулес Графикс, но не на 4 области а на 8 или 16 на выбор. Память будет 2 страницы по 32кб. Записываемый байт будет содержать 8 пикселей. Графическую страницу буду держать в области b0000-b7fff. И она будет одновременно доступна вместе с текстовой.
2. Все это будет, если меня что то сподвигнет на переход с 8257 на 8237.
3. Шина к графической памяти будет не зависимая отдельная ~3мб/с.
4. Цвет фона и пикселей можно будет назначить любыми из 16.
Этого разрешения вполне хватит для имитации более низкого разрешения древних видеоадаптеров cga и ega. Подумайте о таком методе как dithering для своего эмулятора cga.
Ps. Текущая версия железа будет поддерживаться. Она меня как программиста устраивает всем. Мне в основном приходится работать с текстами исходников и это на железке родом из 70х отлично получается.

Далее не для tronix.
Pps. Диванные теоретики не спамте в почту. Оно родом из 70х а не 80х. На фото память 70нс не от необходимости, а какая была под рукой. Сорян, но аутентичной памяти у меня не нашлось. Если у вас есть, ставьте свои РУ-шки на 200нс. Здесь они работать будут.
На этом наша передача подошла к концу.До новых встреч!

Tronix
06.01.2022, 16:13
С эмулятором не все так просто, как бы хотелось, пока много нюансов, но первые кадры получены. Ад конечно, но все равно забавный:


https://youtu.be/nVcuyrmCpcw

Tronix
06.01.2022, 22:14
Первое с чем столкнулся, когда начал проверять на реале - какой-то странный шрифт 8x8 у меня был зашит в ПЗУ. Странный потому, что символ 221 (вертикальная черточка) в этом шрифте представляет из себя скобку или полу-окружность открывающуюся вправо. Соответственно символ 222 - такую же закрывающуюся скобку или полуокружность влево. Это не есть правильно, потому что там должна быть вертикальная черточка на половину знако-места по стандарту, ее использует алгоритм преобразования графики. Насколько помню, я его брал из архива, который прикладывал к первой версии видеокарты freddy. Поэтому пришлось перешить ПЗУ с нормальным шрифтом, у которого символ 221 - черточка.

А далее оно вроде работает, с переменным успехом, удалось даже на реале сносно поиграть в Каратеку,

https://i.ibb.co/xF1NGKY/photo-2022-01-06-20-01-47.jpg (https://ibb.co/MBcmpyf)

Так же запускается Alley Cat, ZOOM, popcorn, BadStreet... Не запускается Prince Of Persia, говорит что Video mode not availible. Пока не копал, не было времени.

Текущие ограничения - после переключения в графический режим игнорируются любые функции int 10h, кроме функции смены видеорежима (для возврата в текстовый режим). Таким образом, игнорируется функция вывода символов, например и другие. Поэтому если игра что-то пишет на экране средствами bios int 10h, то этих надписей не видно. Ну и тормозит конечно все, даже на первом пне. Причину пока не очень понял, и так целый день отлаживался только чтоб до состояния рабочести довести. Не знаю как на 386 будет, даже интересно.

Выкладываю как есть, вместе с исходниками.

freddy
07.01.2022, 16:24
какой-то странный шрифт 8x8 у меня был зашит в ПЗУ
это с редактора W&D. Страниц в ЗГ много, можете прошить в свободную набор символов, специально заточенный под рендеринг из графического режима.
0-2 страницы пусть будут под обычный шрифт.


Ну и тормозит конечно все, даже на первом пне.
тормозить хоть на 4м пне будет, хоть на 386м примерно одинаково. Эмулятор использует для чтения видеобуфер и для записи видеобуфер. Еще игра использует для записи видеобуфер. И все это в 80х50. Почему томозит я писал. А тут в тройне тормозит с момента вывода CGA до появления конечной картики. Процессор тут не причем.

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

Видеобуфер не удачное место для рендеринга в данном случае и конкретно в 80х50. Варианты обхода торможения: 1. Использовать режимы 80х25, 80х30. 2. ОверОверклокинг оверклокнутой ВТ57. 3. Подстановка фейкового видеобуфера в B8000-Bffff и переключение рабочего буфера в B0000-B8000. 4.Замена DMAC. 5. Замена железа на умеющее CGA режимы.

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

Tronix, Пять минут назад пробовал оверклок DMAC до 4,16МГц. В DOOM FPS выросло с 7 до 14. Но это всеравно мало. В 80х25 легко дает 35-45 на 386й

Tronix
07.01.2022, 16:26
0-2 страницы пусть будут под обычный шрифт.
Пусть будут, но значит 8x8 шрифт из слова и дела - не обычный, с какими-то своими спец-символами для каких-то своих целей. Он не соответствует стандартному CP866 шрифту DOS. В стандартном шрифте 221 символ - вертикальная черта на пол-знакоместа слева, 222 символ - такая же черта справа. Вот тут хорошо видно: https://kvodo.ru/tablitsa-cp866.html А у шрифта "слова и дела" скобки какие-то.



Эмулятор использует для чтения видеобуфер и для записи видеобуфер. Еще игра использует для записи видеобуфер. И все это в 80х50.
Да, тоже пришел к этому выводу - что тормоза упираются в чтение/запись памяти, а не в количество команд в теле цикла.



Почему томозит я писал.
Я помню, я читал. И идея с 8237 мне очень понравилась, я бы и рад попробовать, но я честно говоря вообще не понимаю как его программировать вместо вт57. Ну, в смысле для меня все эти константы посылаемые в настройки в зависимости от режимов выглядят просто как магические числа, я не понимаю что они означают. Боюсь, без вашей помощи мне такое не провернуть - замену 8257 на 8237.

freddy
07.01.2022, 16:47
Tronix, Пять минут назад пробовал оверклок DMAC до 4,16МГц. В DOOM FPS выросло с 7 до 14. Но это всеравно мало. В 80х25 легко дает 35-45 на 386й
попробуйте этот способ. Частично проблему тормозов решает. по схеме: 12 вывод U12 отключить от схемы. 3 вывод u20a подсоединить к 14му выводу u19. С 12го вывода u19 подать сигнал на 12 вывод u12. Это дает подачу CLK/6 вместо CLK/8.


Боюсь, без вашей помощи мне такое не провернуть - замену 8257 на 8237.
Я попробую. Интерес представляет ее укороченный режим передачи. За два такта. Это очень круто. Более 2МБ/с при тактовой частоте 4,16Мгц

Tronix
07.01.2022, 16:49
Пять минут назад пробовал оверклок DMAC до 4,16МГц.
А это как? Просто на 12 ножку подать 4,16? Или на весь CCLK?
UPD: А, все увидел, спасибо.

freddy
07.01.2022, 16:59
А это как? Просто на 12 ножку подать 4,16? Или на весь CCLK?
UPD: А, все увидел, спасибо.
Был бы кварц на 5Мгц, я бы попробовал собрать отдельный генератор для U12 с целью выяснения ее скоростных характеристик. В мануале Intel по этому поводу говорится, что было два варианта i8257, i8257-5. Интересно чьим аналогом является наша ВТ57? Подозреваю что не i8257-5. Я подал своей CLK/4. На 6,25Мгц моя ВТ57 не заработала :(

Tronix
07.01.2022, 17:58
Сделал тоже CLK/6 - ну да, стало побыстрее вроде, однако на 486 все равно при работе совместно с Sound Blaster поведение не стабильное...
UPD - или не сделал.... см конец сообщения...


Я подал своей CLK/4.
А это как, я бы тоже проверил...
UPD: разбираюсь в схеме...



Был бы кварц на 5Мгц
Поищу у себя, попробую....

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


по схеме: 12 вывод U12 отключить от схемы. 3 вывод u20a подсоединить к 14му выводу u19. С 12го вывода u19 подать сигнал на 12 вывод u12. Это дает подачу CLK/6 вместо CLK/8.
Что-то не пойму. У меня на 3 выводе u20a частота 6,25MHz. Соответственно после одного JKтригера делится на двое и на 12-ом выходе u19 получается 3,125MHz. Странно, щаз замеряю остальные частоты, может у меня со схемой что-то не так

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

На 11 выводе u19 - 3,125MHz
На 8 выводе u19 - 6,250MHz
На 9 выводе u19 - 12,5MHz , но странные какие-то, до логического нуля по-моему не дотягивают

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

Получается, все это время у меня u21 работала на вдвое меньшей частоте, чем надо...

freddy
07.01.2022, 18:41
Получается, все это время у меня u21 работала на вдвое меньшей частоте, чем надо...
получилось, что я выдал не верное решение. Там действительно 3,125мгц будет. Чтоб было 4.16, этот счетчик нужно сбрасывать этим же импульсом :) Этого нельзя. Разница получилась лишь в сдвиге CCLK ВГ75 относительно ВТ57. Т.е запись в ВГ75 происходит раньше прихода ее CCLK и ее реакции. И это вызвало небольшой прирост скорости, который я ошибочно понял.
Пока не делайте ничего. У меня нашелся К155ИЕ4, там есть готовый делитель на 6. Завтра попробую. И с делением на 5 и на 6.

Tronix
07.01.2022, 19:25
Ага, понял, а то я уж начал тут ИЕ5 вместе с ЛИ1 перемахивать...

Пока просто подал на ВТ57 6,25MHZ с 8 вывода u19. Картинку карта дала, но такую:
https://i.ibb.co/n6TkhTx/P20107-185523.jpg (https://ibb.co/Xj9Jm9c)

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


В мануале Intel по этому поводу говорится, что было два варианта i8257, i8257-5. Интересно чьим аналогом является наша ВТ57?
У меня в закромах обнаружилась такая микросхемка:

https://i.ibb.co/fD30XzY/photo-2022-01-07-19-21-05.jpg (https://ibb.co/9ZxYpk9)

Поведение - абсолютно такое же, как и с ВТ57, картинка как на фотографии выше. (это с подключенным 12 выводом на 6,25MHz с 8 вывода u19).

Tronix
07.01.2022, 22:40
Попробовал подать 5MHz на ВТ57 с помощью такой навесной схемки на 1533ИЕ5:
https://i.ibb.co/p0BMBgB/divider.png (https://ibb.co/FxLyL9L)

Ничего особо не поменялось по сравнению с 6,1MHz и фотографией экрана выше. Правда не пробовал с митсубисевской M5L8257P-5, но что то мне кажется, что она покажет то же самое. Может быть нужно перенастраивать ВТ57 согласно новых таймингов (те самые магические числа, засылаемые в порт при инициализации) и/или как-то синхронизировать с общим CCLK... Все, спать...

UPD: Попробовал и CLK/6, то есть 4,12MHz тем же способом - навесная схемка на ИЕ5. Ничего особо не поменялось по сравнению с предыдущим результатом. Все так же экран постепенно уезжает куда-то влево, некоторые символы неправильные...

Походу так нельзя - менять клок на ВТ57 и не менять на ведомых ВГ75. Уж если гнать, то всю CCLK, но тогда точно наверное все настройки программные собьются.

klingon
07.01.2022, 22:53
не по теме, но когда я налаживал терминал от DI (http://debuginnovations.com/TTL_Terminal/home.html) я столкнулся с тем, что не все детали одинаково хорошо работают на определенных (больших) частотах.
Имели место артефакты (тени), которые были устранены заменой триггера 74hc74, на такой же, но от другого производителя (от Моторолы) и проблема решилась, а установка 555ТМ2 - усугубляло проблему.
Так же проблемы с скоростью памяти, одна память 70ns работает, а другая - нет, то есть я о чем, может в схеме какая-то деталь работает на пределе возможностей, скажем ВТ57? На Алике видел аналоги им, но возможно фейковые.

Tronix
08.01.2022, 18:15
Попробовал поставить 8237 вместо ВТ57 и конечно одержал фейл. Первое, что заметил, что на схеме в декодере адреса порта для ВТ57 на u16 и u28:A не реализовано декодирование 0xc,0xd,0xf, таким образом мы лишаемся возможности юзать команды 8237 такие как:
Clear Byte Pointer Flip/Flop (0xc);
Master Clear (0xd);
Write All Mask register bits (0xf);

Но решил все-таки попробовать без них, хотя в доке явно пишут, что надо бы перед записью адресов и счетчиков дать команду Clear Byte Pointer Flip/Flops, что бы привести конечную машину в известное состояние. Но я понадеялся что после резета оно там будет известное, и обойдемся без нее.

Сделал так:

;8237 command reg
mem_to_mem equ 1
ch0_adr_hold equ 2
controller_disable equ 4
fast_timing equ 8
rotating_priority equ 16
extended_write equ 32
dreq_active_low equ 64
dack_active_high equ 128

;8237 mode reg
verify_transfer equ 2
write_transfer equ 4
read_transfer equ 8
autoinit equ 16
addr_decrement equ 32
single_mode equ 64
block_mode equ 128
cascade_mode equ 192

;8237 request reg
request_bit equ 4

;8237 channel mask
channel0 equ 0
channel1 equ 1
channel2 equ 2
channel3 equ 3

vt37_cmd equ io_adr+018h ; DMA control reg
vt37_request equ io_adr+019h ; DMA request reg
vt37_single_mask equ io_adr+01ah
vt37_mode equ io_adr+01bh ; DMA mode reg
;no actual hw
vt37_clr_ptr equ io_adr+01ch
vt37_reset equ io_adr+01dh
vt37_all_mask equ io_adr+01fh

;DMA run subroutine
run_DMA proc near
ifdef VT37
;8237 DMA init
cli ;Disable interrupts
mov dx,vt57_ch2_adr
mov al,0
out dx,al ;set starting adress
out dx,al
inc dx
mov al,09fh
out dx,al
mov al,0fh
out dx,al

mov dx,vt37_mode
mov al,channel2 or autoinit or read_transfer
out dx,al

mov dx,vt37_request
mov al,channel2 or request_bit
out dx,al

mov dx,vt37_cmd
mov al,0
out dx,al

mov dx,vt37_single_mask
mov al,channel2
out dx,al

sti ;Enable interrupts
ret
endif


Но картинки не получил. Иногда вижу какой-то мусор, если активно в память писать, но это не нормальное содержимое. Что-то пошло явно не так...

UPD: Притянул 36 ножку /EOP к питанию, DMA начало стартовать, но вроде проходит один цикл и встает.

NEO SPECTRUMAN
08.01.2022, 19:27
Ну так себе конечно, но интересно все-же посмотреть "в динамике". Попробую завтра все на ассемблер перенести...
гигаскрин вашо все :)

dima4871
22.02.2022, 23:07
Здравствуйте.

Собрал видеокарту ВГ75.
После сборки без проблем запустилась.
Проверил её работу на следующих компах: Поиск-2, Xi8088, заводская 386, 386 от Грозы.
Проверял используя два Video BIOS:
1: от 2021-12-14
2: от 2022-01-02

1: в плане запуска до DOS видеокарта без проблем запустилась на всех компах из перечисленных кроме Грозы.
Гроза состоит: TX486DLC, OPTi82C495/P82C206. MR-BIOS. Не проходит проверку Video BIOS. Останавливается на пост коде 10h.
Тут видно какие то особенности проверки видео биоса MR-BIOS. На заводской AMI BIOS.
На Xi8088 наблюдается, по видимому, проблема с синхрой. Видна только левая половина экрана. На остальных это не проявляется.
С заводской Поиск-2 и заводской 386 картинка нормальная.
В программном плане, например, checkit не запускается. С пишем на старую версию Video Bios.

2: в плане запуска до DOS видеокарта без проблем только на заводской 386 и с описанной выше проблемой Xi8088.
Поиск-2 показывал только плашку видео биоса. <<< R579VG75 >>> Дальше ничего не происходило.
На Грозе те же проблемы, что и с предыдущей прошивкой.
На заводской 386 запускались программы не требующие графического режима.

Пока так. Не знаю существует биос для видеокарты новее 2022-01-02, но на нем пока описанная выше ситуация.

На случай если кому будет нужен перечень элементов:
https://disk.yandex.ru/i/SVmxXUvf1DneKA
Он составлен в соответствии с последней выложенной схемой.

https://i.ibb.co/bKwXxJ9/photo-2022-02-22-22-25-43.jpg (https://ibb.co/bKwXxJ9)https://i.ibb.co/1z87j5q/photo-2022-02-22-22-26-11.jpg (https://ibb.co/1z87j5q)

Tronix
23.02.2022, 13:28
А я тоже собрал уже вторую плату:

https://i.ibb.co/YXjhRPr/P1140054.jpg (https://ibb.co/YXjhRPr) https://i.ibb.co/19Dhtgh/P1140055.jpg (https://ibb.co/19Dhtgh) https://i.ibb.co/D7BzqSM/P1140056.jpg (https://ibb.co/D7BzqSM)
https://i.ibb.co/DGwc1hg/P1140057.jpg (https://ibb.co/DGwc1hg) https://i.ibb.co/YXfgKrL/P1140058.jpg (https://ibb.co/YXfgKrL) https://i.ibb.co/Hr9H1pK/P1140061.jpg (https://ibb.co/Hr9H1pK) https://i.ibb.co/6YKcQ9G/P1140062.jpg (https://ibb.co/6YKcQ9G)

Напечатал наклейки на термотрансфере:

https://i.ibb.co/0yHhwFB/P1140065.jpg (https://ibb.co/0yHhwFB) https://i.ibb.co/F7xFkqt/P1140066.jpg (https://ibb.co/F7xFkqt) https://i.ibb.co/S5y8Hhx/P1140067.jpg (https://ibb.co/S5y8Hhx)

И скрафтил по быстрому планочку из заглушки инвиновского корпуса:

https://i.ibb.co/Kq30P0j/P1140068.jpg (https://ibb.co/Kq30P0j) https://i.ibb.co/f2zp30Y/P1140069.jpg (https://ibb.co/f2zp30Y) https://i.ibb.co/vXyDK8x/P1140070.jpg (https://ibb.co/vXyDK8x)
https://i.ibb.co/q0vp2Zq/P1140071.jpg (https://ibb.co/q0vp2Zq)

Tronix
27.02.2022, 13:07
Тут стало интересно, почему карта не работает на чипсете OPTI 82C495XLC, на которой в том числе построен и новодел "Гроза" (https://alexandrugroza.ro/microelectronics/system-design/isa-80386dx-sbmc/index.html). Просто зависала на пост-коде 10h, то есть инициализация видео, как и рапортовал dima4871. Зависало намертво.

Оказалось, причина в следующем:

; clear videobufer
mov ax,0720h ;white FG, space
mov cx,8000h ;32kb buf size
xor di,di
rep stosw


Здесь происходит очистка видео-памяти, но очевидно опечатка в размере - так как пересылка STOSW происходит словами (два байта), то размер должен быть 4000h, а не 8000h. В данном случае получается, что мы пишем в память с B8000 до С8000, то есть 32Кб пишем в нашу видео-память, а еще 32Кб пишем уже как-бы в ROM, начиная с адреса C0000, то есть там где у нас видео-биос. Видимо, конкретно OPTI 82C495XLC кэширует область видео-биос C0000, и таким образом мы затираем сами из программы свой же код. Как итог имеем мертвый вис.

Поэтому правильно так:

; clear videobufer
mov ax,0720h ;white FG, space
mov cx,4000h ;32kb buf size
xor di,di
rep stosw


На всякий случай приложу сюда скомпилированный видео-биос, так как многие просили, а так же мой дамп знакогенератора. Знакогенератор для микросхемы 27C512.