На самом деле с интересом прочел ветку. К сожалению моих знаний в электронике пока недостаточно. Если бы в виде конструктора было, то было бы здорово.
Насчет ISA-8 Должно получиться что-то вроде MDA?
Я с силами собирался все это время, чтобы начать рисовать ее как раз на 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 видеокарт.
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 или оно нафиг не надо?
- - - Добавлено - - -
Я склонен считать что не нужно.
Вот это самое важное, да. Это сразу переводит плату из разряда игрушки в разряд полнофункционального вообщем-то устройства.
Да можно наверно без проблем. В случае чего если ИД7 будет в дешифраторе можно туда-сюда подвигать по адресам, не критично.
За глаза. Наверное бы у в 2кб уложились, но 8 так 8. Их проше найти и программировать, тем более електро-стираемые AT28C64 удобней на период отладки, чем каждый раз 2716 уф стирать.
Тут конечно интересный момент, с одним и тем же адресом у двух устройств... Если при записи наверное должно записаться и в VGA и в эту плату, то что будет при чтении? А VGA при своей инициализации активно чето пишет-читает в память, да и потом, в досе уже может тоже читать из памяти при скроле там например и тд. Тогда этой плате надо запретить на время операцию чтения вообще, какой-нить джампер поставить, или 0 ом резистор, чтоб разорвать /MEMR можно было ....
Но в целом все так, крутая видяха получится, особенно полностью на отечественной эл базе собрать. Вид будет иметь однозначно!
- - - Добавлено - - -
Я тоже думаю не нужно 40x25
Tronix, конечно на время отладки без /memr. Поставлю джампер.
Я тут подумываю, что у меня только 6 бит атрибутов цвета. Вобще 7, но один уходит на старший бит кода символа. Получается, что придётся остаться без битов яркости и довольствоваться 8 цветами фона и символа. На сколько это считается критично? Может поставить ещё одну вг75 и выдавать все 8 бит атрибутов? 3 ВГ75 могут 21 бит выдать. Это более чем достаточно и к усложнению архитектуры видеогенератора не приведёт. Напишите своё мнение.
Мне кажется критично. Все-таки 16 цветов нужны для VGA... В голом дос конечно не используется, а вот в различных IDE типа TurboPascal или Borland C - вполне. Да и во многих других дос программах с оконным интерфейсом. Три ВГ75, так три, чего мелочиться -)
И еще по поводу знакогенератора (шрифта) - интересно, а сильно сложно сделать его загружаемым и изменяемым? То есть поставить ОЗУ вместо ПЗУ, или вообще использовать основную ОЗУ где-то в конце памяти? Сорри, но до сих пор не понимаю как все это работает, поэтому такой дурацкий вопрос. В int 10h есть функция 11h, позволяющая загрузить свой шрифт, но я точно не знаю, используют ли эту функцию Norton Utilities, и например, заставка Award Bios при загрузке компа, или же напрямую через порты разлочивают вторую битовую плоскость и пишут туда, потом через порты залочивают обратно и переключают на нулевую биттовую плоскость. По-идее, все-таки менять шрифт должны через int 10h. Щаз посмотрю как я это в детстве делал, а то забыл уже все напрочь...
https://habrastorage.org/webt/aw/fm/...of5vccwv0s.png
Ну, шрифт то я грузил через int 10h ax=11h, а вот псевдо-графический курсор мыши уже через порты, ибо скорость нужна...
Ну, не знаю, вообщем если можно сделать загружаемый знакогенератор минимальными потерями- наверное лучше сделать, пускай только через биос будет работать, но все равно хоть что-то.
Tronix, вг75 стоит 25р, думаю сумма вполне посильная:) Будет 3. А перед ними аппаратный перестановщик бит. Т.е. видеопамять будет содержать тоже самое, что и у обычной vga карты.
Насчёт загружаемого знакогенератора: да можно и туда пробросить внутреннюю видеошину. Цена вопроса 3 мультиплексора, 1 двунаправленный шинный формирователь 3 регистра. В общем то ничего особенного по схемотехнике. Но это огромная логическая проблема использования устройства, так как оно автоматически приобретает графические видеорежимы. 640х400, 640х480 и все их производные. И сейчас я не готов это применять. Поэтому давайте оставим знакогенератор в покое и на 11ю функцию поставим заглушку
Да, фиг с ним. Можно просто не сообщать программам что это VGA, а они уже там пускай сами разбираются что в этом случае делать. По идее тогда они не должны использовать загрузку фонтов и прочие прелести VGA. Ничо, нормально будет.
Тогда на выходных нарисую схему, покажу. И можно к плате приступать. А загружаемый ЗГ и графические режимы оставим на будущее.
https://yadi.sk/i/k_l5dyz0KbCM6Q
Вот нарисовал. Изменений много и проект сложный, поэтому, чтоб не перегружать мозг, я буду описывать поэтапно выполненные изменения. Вы, не торопясь, по мере проверки правильности моих мыслей и соответствия их текущей схеме, высказывайте дополнения, исправления, задавайте вопросы или просто говорите далее. Я буду переходить к описанию следующего изменения. И так, пока не выяснится, что пора разводить плату.
Сегодня начну с дешифрации адресов: Из сигналов управления, задействован только AEN. Вдруг у кого то звуковая карта есть или контроллер дисковода. Если он активен, то дешифратор адресов памяти и портов заблокирован. И реакция на сигналы чтения и записи не возможна. На схеме выходы дешифратора адресов памяти подписаны диапазонами, проверьте чтоб все было так как написано. Дешифратор портов работает в два этапа. Сперва выделяет базовый адрес 32-адресного блока (u3b,u17), а потом этот блок дешифруется на внутренней шине на 8 4-адресных блоков (u16) и распределяется.
Кхм, кхм... это самое, того, как его...
Напишите, что дальше то? Писать далее или рано? Ну или КГАМ :)
Так все правильно вроде, AEN - совершенно верно заведен на ИД7, так все делают, чтоб DMA избежать. Адреса тоже правильные выбраны.
Продолжу на тему коммутатора ОЗУ знакогенератора. Были сделаны следующие предположения. Если всем сообщать, что это VGA, то по идее никто не станет писать в область b0000-b7fff, так как там положено сидеть видеокарте mda. Я этим воспользовался и коммутатор шин микросхемы знакогенератора при активном /cs_char откидывает микросхему от видеогенератора и подкидывает к шине ISA. И сигналы записи и чтения с шины тоже туда подкидывает, т.е можно и читать и писать. При не активном /cs_char подкидывает микросхему обратно в видеогенератор и переводит в режим чтения. Озу выбрано минимальным, нужно то всего 4кб. При этом как и у обычной vga, дефолтные шрифты будут храниться в пзу биоса. Проверяйте мой бред :) Может я где то заблуждаюсь
- - - Добавлено - - -
Был и альтернативный вариант. Вколхозить регистр конфигурации, с помощью его одного бита переключать адресную область видеобуфера между видеопамятью и памятью ЗГ. Но я пока не стал этот вариант показывать
А /cs_char кем управляется? Главное, чтоб в момент включения был не активен /cs_char, а то я не помню как системный BIOS лпределяет наличие MDA - может в b000 чето пишет-читает. А так да, круто, загружаемый знакогенератор рулит. Через b0000, так и хорошо.
cs_char вырабатывается комбинацией адресов на шине isa микросхемами u4,u15c. На классической xt тип видеокарты определялся джамперами, у меня вобще нет никакой машины с isa. Так бы проверил.
Tronix, я отдолжу Пентиум 3 на время. Мне продолжать обсуждение или Вы согласны со схемой? Я никак не могу этого понять. Остался перестановщик бит. И раз уж заговорили про материнки пеньиумов, то ещё и про кошмар. И почему то никто не спрашивает меня, что делать с чтением из видеопамяти?
- - - Добавлено - - -
В прочем я чтение склонен кешировать. Стандартный метод vga чипсетов мне не нравится тем, что притормаживает процессор, так как во многих случаях не может вовремя извлечь байт из видеопамяти.
Честно говоря, я не очень в схеме то ориентируюсь, потому что я до сих пор не знаю азов, можно сказать, то есть как работает ВГ75, нахрена ему контроллер дма, и тд. И это речь только про одну ВГ75 типа как в Радио-86РК, а уж когда их три - тут я совсем бессилен. Мне и интересна эта плата и этот проект для возможно лучшего погружения в работу ВГ75 например при сборке и отладки платы, особенно если она не заработает сразу. То, что я еще как-то могу понять, а именно по дешифратору на память и порты - я посмотрел, вроде бы все правильно.
Почему я не спрашиваю про чтение? Потому что я вообще не подозревал, что в этом какая-то проблема. Я ж говорю, я не знаю как работает схема, не понимаю. Тут из меня помощник - "лучше бы не мешал".
Единственное о чем я уже писал, могу попробовать написать BIOS для видеокарты (int 10h). И в принципе, если будет понимание какие порты за что отвечают, можно и эмулятор на время отладки сварганить, взяв PCem за основу, и в нем тестировать BIOS...
Но по схеме - я честно не помощник.
Хорошо. Я сам буду заниматься ее архитектурой. И схемотехникой тоже. Если концептуально нигде не ошибусь, то она заработает. Дальнейшего описания изменений конструкции относительно «игрушечного» варианта не будет. Сейчас Осталось проработать логику /iordy, буду как то сам вспоминать. Последнюю isa карту я делал 25 лет назад, нужно все вспоминать.
Tronix, dma ей нужно для организации совместного с cpu доступа к видеопамяти. Она запрашивает dma, dma захватывает шину у процессора и читает с видеопамяти нужное количество байт. Потом отдаёт шину наинекоторое время. Но только не у меня. Ркшечники в глубине души может и понимают почему ркашка такая тормозная, но большинство думает что это проц 8080 такой :) хаха! Так вот чем быстрее процессор тем не выгоднее у него отнимать шину и тем большая будет потеря производительности.
- - - Добавлено - - -
Эпик фейл! В протеусе нет модели isa разъёма :) на выходных срисую с заводской Карты.
Tronix, курсор у меня всегда фиксированый в виде инверсного мерцающего блока. Бит 7 атрибутов нельзя использовать для мерцания, нет для этого железа. Нет ramdac, и соответственно, установки палитры, цвета всегда фиксирован. В vga это все есть и размер курсора настраивается. На сколько это критично? Прокомментируйте.
Моё мнение, что это не страшно, можно так оставить.
- - - Добавлено - - -
В общем у меня все готово. Осталось макетку под isa шину найти. Посмотрю в барахолке, может есть у новодельщиков. И можно приступать к тесту интерфейсной части. Остальное давно уже проверено в количестве нескольких десятков штук.
Ну, то что он в виде большого блока, а не маленького нижнего - это ничего, главное чтоб была возможность его выключить (как вы вроде ранее писали - увести за координаты крана). То есть возможность включать/выключать курсор.
Круто, очень жду новостей. Уже ВГ-шками закупился и некоторыми другими деталюхами....
Кто может подсказать, запускаются ли mda, cga на относительно современных материнках Slot1, socket 370 ?
Решил поменять концепцию. Этот адаптер будет косить под Cga, но показывать будет в vga развёртке. И вот почему, я так думаю. Список не совместимостей с vga:
1. Нет ramdac- устранимо.
2. Нет многостраничного знакогенератора с возможностью вывода 512 символов - устранимо.
3. Нет бордюра - простыми методами не знаю как сделать, а он точно нужен например русификаторам многим. Они ним режим отображают. В общем то все это не сложно устранить, но собрать сможет не каждый. Ну далеко не каждому под силу vga на рассыпухе осилить. Поэтому подражать лучше Cga, железо по проще будет и есть шанс для среднего ретро паяльщика, что заработает сразу :)
- - - Добавлено - - -
Расковырял тут как стартует биос. Так вот он ничего там в памяти не тестирует в области всех видеобуферов. Ищет видеобиос и если нашёл, то передаёт туда управление, заменив вектор int10h. Сам при этом ничего c видеокартой не делает, предполагая однако далее, что это ega/vga. Так вот нам можно самим поменять биты конфигурации видеоадаптера в переменной bios на тип cga. Получится cga однако с собственным биосом, но это ничему не противоречит
А какая разница между CGA текстовым режимом и VGA текстовым режимом 03h? Имхо - вообще никакой.
ramdac и игры с палитрой - это не стандартная фишка текстового режима - ф топку.
Знакогенератор - фиг с ним, пускай будет не изменяемый.
Бордюр - фиг с ним.
изобретали изобретали велосипед
в конечном итоге получилась цветная mda видяха :v2_lol:
freddy, А есть какие-то подвижки по ISA плате?
Tronix, нет подвижек. Схему дорисовал, плату развел, заказал. Еще не пришла. Версию с графическими режимами проработал, в производство не пускал. Хз, надо чтоб сперва эта заработала. С наступившим!
Tronix, если она заработает, то я плату так подарю. Мне одной хватит, но меньше 5 было нельзя заказать :)
А видеобиос будет с открытым кодом и в свободном доступе?
Канешно, я всегда за опенсорс топлю.... Особенно в ретро-проектах, которые интересны 1,5 человекам, а через пару лет находится еще один такой-же индивидум и если исходники закрыты - начинает мозг себе весь ломать, что бы поправить один байт в прошивке/bios/где угодно. Не дело это.
Оно даже работает. Может потом опубликую схемку и pcb. Биос и знакогенераторы будет толко в виде дампа.
https://i.servimg.com/u/f90/20/09/39/66/586e0910.jpg
Небольшой итог проделанной работы.
В целом железо вполне сносно работает на шинах 8 и 12Мгц. Однако глубокого тестирования не производилось.
Все писалось и проверялось на реальной машине 386DX40. У меня работало. У кого не заработает или сгорит что то, я не виноват, материалы проекта распространяются как есть и я не несу ответственности за последствия.
В архиве немного файлов, чтоб оно заработало, а также для чтения и просмотра картинок но ночь.
https://disk.yandex.ru/d/d_DhN_A6wfaYjw
Volkov commander пока не запускается, не разбирался почему. Если кто поможет, буду очень рад, а так то времени на трасировку не хватает. Все работа сьедает. Проект и так уже долгий. Печатку решил не выкладывать, мною она признана как не удачная.
Если что, пишите куда слать, ведь она заработала.
- - - Добавлено - - -
это видео показывает как у меня происходит запуск тачки с такой видеокартой
https://youtu.be/MQba_x35sMc
а это текстовый скринсейвер
https://youtu.be/W6EjVPrGx4c
Продолжу по-тихому писать дальше блог по видеокарте. Сегодня оттрасировал 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!!!
https://youtu.be/MQba_x35sMc
Видео эпично!
Спасибо, freddy за подаренную плату, тоже начал собирать...
https://i.ibb.co/2yMBS5t/P1130929.jpg https://i.ibb.co/Zgd2ZJK/P1130930.jpg
Замучился млт-шки скоблить, но вроде большую часть запаял.. Только 3ком кончились, буду 3.3к-4.7к вместо них паять, думаю не критично, так как в основом это подтяжки. Еще намешал диодов - часть 1N4148, а другая часть - КД522Б . Еще нет защелки 74HC574 совсем, придется покупать наверное, ну или пробовать вкорячить HC753 только с инвертированным стробом. Еще конечно в серии микросхем некоторых не попал, в частности вместо 531ЛЛ1 поставил 555ЛЛ1 и прочее. Еще транзисторов S8058 нет, можно ли поставить другие NPN? И память у меня в узком корпусе , но думаю проводами запаяю..
Допаялся пока до такого состояния:
https://i.ibb.co/YNSJvGS/P1130932.jpg https://i.ibb.co/hMbK6rc/P1130933.jpg
Вместо 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 очень слабый, монитор постоянно прыгает с "нет сигнала" на черный экран по кругу. Или надо резисторы подбирать....