Заведёте новую тему на ваш проект? Будет интересно почитать.
тут ее bios на всякий случай, а то я забыл выкладывал или нет.
https://disk.yandex.ru/d/DBdvi38S39Q7KQ
Это не окончательная версия.
Не, я по своему платки развел. Я копаю в сторону улучшения рк86. Придут платы попробую дело по мере документировать.
- - - Добавлено - - -
Вот об этом я долго и нудно думал. Если с проблемой тормоза вт57 мало мальски понятно, то с графикой заставляет задуматься серьезно. Я только придумал что работа проца с графическим ОЗУ возможна лишь в момент кадрового гасящего импульса. Но тут тоже есть над чем подумать, не будет ли это слишком медленным? С чтением вообще ж, пока что лучше двойного чтения я не допер. Схемку пока что не смотрел - но видно что как то совсем просто отделалася. И вопрос... Зачем гасить видео то??? не проще ли программисту вырубить пока графическое ОЗУ от видеогенератора и тем самым пока переключить на работу с ПЗУ? Я к тому, что тайловая графика при 255 символах в доступе открывает очень много возможностей и тем самым достаточно в начале работы грузить графическое ОЗУ и потом уже его не трогать. А если сделать работу с графическим ОЗУ как в кр04 - так вообще красота получается, можно генерить атрибутами любой экран хоть специалист хоть орион хоть спектрум. Я эту тему уже продумал.
все зависит от центрального процессора и системной шины. Машина с 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, интегрировать в него видеогенератор с VG75_dualhead. В кр04 видеокарта работает синхронно с процессором, видеопамять на удвоенной частоте. Половина тактов процессору, половина видеокарте. Но это будет уже не кр04.
Интересно, вм85 на максимальной частоте насколько справится с задачей. там вроде 5 мегагерц.
Я так делал в пальмире своей. вм80 медленный, графика идет со скрипом и все мерцает.
А вот это в процессе. КР04 я собрал и завел его на 95%. Там все сложно с этим.... А платы едут. Можно будет и скрестить ежа с носорогом. Учитывая что в кр04 стоит контроллер шины, то должно получиться что то дельное. А то что это будет уже не кр04 - это не страшно. Программного обеспечения на него скорее всего выпущено было с кассетой в комплекте. Ну и попользовавшись этим компом в эмуляторе конечно же сразу выявились нюансы для доработок.
Ведущий_специалист, а необходимо ли вообще успевать за VRTC полностью обновлять знакогенератор?
Можно вполне достаточную скорость получить если еще и HRTC использовать. HRTC это 20CCLK. Вполне можно успеть 2 байта в видеопамять протолкнуть.
Строк у нас 400. И это 8000CCLK за счет HRTC. И еще есть 4900CCLK за счет VRTC. Итого 12900CCLK. Этого вполне достаточно чтоб прокачивать двигающиеся фигурки плавно. Такой сигнал (HRTC и VRTC) у меня есть в новой схеме. Смотрите на 0й бит регистра статуса #3da. Это по аналогии как у обычных VGA карт, для совместимости. Некоторое подобие сигнала занятости видеопамяти. Его к стати можно завести на контроллер прерываний, тогда будет совсем хорошо.
А так то этот метод не самый лучший, но простой.
У меня методов еще есть.
+++++Двойная буферизация. Это когда две микросхемы памяти. Одна из них всегда подключена к видеогенератору, другая к центральному процессору. И по завершению модификации содержимого они меняются местами с помощью шинных коммутаторов.
+++++Отложенная запись. Это когда процессор пишет данные во временный буфер, из которого они потом переписываются в видеопамять с помощью специального автомата внутри видеокарты, во время, когда видеопамять свободна. Этот метод использую я и производители видеокарт. Применительно к VG75 скажу что память знакогенератора ей нужна только во вторую половину CCLK. Первая половина наша.
+++++Синхронная запись. Это как в КР04. Но тут есть недостаток. Видеокарта работает синхронно с процессором и видеопамять нужна быстрая, так как работает на удвоенной скорости. Так же понятно, что в таком случае, видеокарту просто так не поменять, она является неотъемлемой частью системы.
Ведущий_специалист, я тут случайно нашёл другое изделие.
https://zx-pk.ru/threads/31357-video...=1#post1045431
На вид оно значительно проще. Софт то вы сами собираетесь писать. Так что без разницы какой видеоконтроллер.
А графику если нужно, то там вобще все изи. Параллельно, то есть в обход ЗГ ставите однонаправленный шинный формирователь. У пзу ЗГ гасите ~CE, у шинного формирователя активируете ~OE. Класс! Обход ЗГ, байты из памяти напрямую записываются в сдвиговый регистр. Графика :)
Да, так начало работать. Без остановки ДМА - не работало ни в какую.
Выкладывали для первой версии ISA карты. Тут я вижу, что вставили вышеприведенный пример в обработчик установки позиции курсора в int 10h, это хорошо. Но, в таком виде у меня на моей 486 биос не заработал - наотрез четверка отказывается грузить видео биос размером в 1024 байта - пищит спикером на отсутствие видюхи (три коротких вроде).
Поэтому проделал то же, что и со старым BIOS - поменял размер в параграфах на 16 и расширил до 8192 байт. Так начинает грузить. Но, почему-то делает это 4 раза подряд, то есть выводит заставку, ждет, очистка экрана - заставка - ждет, очистка экрана - заставка - ждет и так же еще раз и только потом загрузка. Видимо огрехи неполной дешифрации адреса, когда C0000 + 8192 = C0000, а системный биос от четверки перебирает именно такими кусками по 8к. Ну да и фиг с ним, поправил просто дополнительной строчкой cmp es:[di],ax где-то здесь:
После чего стало все нормально, один раз заставка выводится и дальше запуск 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. Сразу посмотрел сюда:Код: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
Фиг его знает, но как-то видимо у меня мой TASM не правильно среагировал на mov byte [bp+int_10_ah], выдавая в листинге mov [bp][2], вместо mov [bp][1]. Так же и с остальными адресами регистров в стеке. Поправилось просто удалением ключевого слова byteКод: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
После этого VC.COM перестал просить нажать Enter каждый раз перед запуском.Код: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
Турбо паскаль (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 когда джамперы меняешь...