В основе своей CGA почти готов к употреблению. Пока что без взаимодействия с CPU, но и так неплохо.
Ограничения:
- растр прибит гвоздями к 640х480. Т.е. регистров управления синхроимпульсами, HTotal, VTotal и пр. тупо нет. Они будут, когда будет новая плата, и на ней будет CPU, но запись в них будет игнориться.
- видимая область, соотвественно, прибита к 640х400 (даблскан). Т.е. имеем полосы оверскана сверху и снизу в случае монитора 1280х1024 (гнусмас 732N). Вообще говоря, этот момент - больное место всей идеи. Я так и не придумал, как на чисто аппаратном уровне выставлять идеальный режим для всего колхоза существующих ныне мониторов (всякие там 1366х866.5 и пр.). Поддерживаемые режимы явно разные (некоторые, например, умеют и 720х480, чего мой гнусмас не умеет), пропорции разные (на боевом NEC 2690WUXI 16:10 не тестил, ссыкотно), в общем, где будет (и будет ли) оверскан - вопрос. Пока, как я уже говорил, прибито гвоздями, в финальной версии будет обмен по I2C с монитором, и хай биос решает. Свой биос, разумеется.
- так как растр по горизонтали ограничен 640, не будет режима TXT 90х30. Для него надо те самые 720х480. Вправить мозги гнусмасу по этому поводу мне не удалось. Что бы я ни делал, он упорно видит результат как 720х400 с соотв. оргвыводами (обрезания где нужно и где не нужно, а где совсем не нужно - так растягивание 640 до 720 и пр.). Ну да и хрен с ним. Не знаю ни одного приложения, которое бы хотело 90х30.
- нет интерлейса/светового пера (соотв. регистры игнорируются). Реализовать несложно - просто ненужно.
- нет и не будет композита - во-1 без надобности, во-2 на FPGA сложновато как-то...
Что есть:
- все стандартные режимы, 320х200 со всеми 6 палитрами и сменой цвета фона, 640х200 с возможностью смены цвета foreground, текстовые со сменой цвета оверскана, миганием/яркостью фона
- 160х100 (который на самом деле текстовый) - не проверял, нет дампа памяти под него, но, по идее, работать обязан
- аппаратный курсор в текстовых режимах, частота мигания его и текста (если разрешено в соотв. битах регистров) соответствует оригинальному CGA. Хотя, на видео в ютубе вроде курсор медленней мигает, сложно понять короче. Я тупо скопировал оригинальный CGA. Не совсем понял только как их счетчик взаимодействует со встроенной в 6845 мигалкой. Также курсор умеет быть "двойным" (split-box, типа сверху и снизу). Из CGA-тестилки, что я приводил, не понял чем отличается strkieout от split - надо дизассемблером посмотреть, что там автор делает, как по мне - то же самое, только номера строк разные.
- шрифт пока только один (который толстый, сами глифы взяты из биоса "поиска", т.е. с русскими буквами во второй половине). Как почитал, оригинальный CGA умел 2 шрифта по джамперу на карте (толстый и тонкий), если хватит у циклона мозгов, прогружу оба (CP437,
взял тут) и сделаю переключение какое-нить.
зы В качестве послесловия. В неравной борьбе с собственными косяками в выходных ключах пал КТ315 (был безжалостно выпилен кусачками в процессе поиска этих самых косяков) и 4 подстроечных резистора (аналогично выпилены плоскогубцами за ненадобностью). Косяки, тем не менее, найдены, устранены, после чего пришло понимание, что Analog Devices мне не переплюнуть, так как нога I перешла от состояния "совсем не работает" к состоянию "практически не работает". Вы не видите разницы? Я тоже.
ззы Да, и где конь не валялся - так это в плане разделения доступа меж процом и, собственно, видяхой. Так как финальная память будет однопортовой, решил себя не баловать, и решать эту проблему сразу, пока вся память под контролем отладчика. Так что никаких двухпортовок в исполнении альтеры. По расчетам, для финальной версии вполне хватило бы и 20 нс SRAM, но так как или 15 или 45, то придется ставить то, что можно купить, т.е. 10 нс Cypress. Странная логика? Это вы продавцам и производителям объясните.
После недолгой внутренней борьбы решил, что снег эмулировать не буду. Вроде, он как фича нигде не использовался.