Заведёте новую тему на ваш проект? Будет интересно почитать.
тут ее 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 когда джамперы меняешь...
Tronix, огромное спасибо за проделанный труд и детальное тестирование. Все недочеты будут учтены в следующей версии BIOS. Также попробую внедрить отличную идею по автодетекту порта карты. Можно еще и адрес видеобуфера авотоматически определять. К сожалению катострафически не хватает на это времени. Этот проект я закончил еще в мае, все не когда было проверить. Но я очень рад что заработало. То, что запустятся не все программы, было ясно еще на стадии зарождения видеокарты. Но общими усилиями многое можно победить, что то Biosом, что то железом.
С этим багом понятно. При не законченной записи в парные регистры и возникновении в карте цикла DMA, не стоит дергать ~CS_VG. Сбивается внутренний счетчик операнд команды set cursor. Т.е. всякие там рефреши на шине и прочие задатчики могут создать ситуацию, когда возникнет ~CS_VG, так как на U16,U17 не заведены IOR, IOW. ну и как результат вы уже видели Improper Command в статусном регистре ВГ75. Поэтому было решено не давать начаться циклу DMA, пока не закончится запись в парные регистры.
При работе карточки совместно с VGA, регистры #3da будут конфликтовать. Поэтому U42 ставьте в панельку, чтоб в случае не надобности можно было вынять. Также C30,C35 можно не ставить, это я перестраховался от разносерийной логики в видеогенераторе и помех от коммутации шины 580-ми регистрами и шинными формирователями.
Отличный вопрос! Никто не спрашивал еще. Можно. 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
это 80х43 с штатным шрифтом 8х8, поэтому и расстояния большие между строк.
https://i.servimg.com/u/f90/20/09/39/66/th/764e1f10.jpg
А это 80х60 тоже на штатном шрифте 8х8. Это 2я страница ЗГ. 0я и 1я 8х16 тонкий и жирный
Есть еще один супер метод. Использовать двухпортовую статику. Крайне экономит место на плате и лишает огромного гемороя выше описанного. Но тут вопрос о ламповости самой железки )).
И кстати. Не совсем понятно про быструю память в кр04. Там обычные ру5 стоят (у меня он прекрасно стартует с ру5г и ру5в). Если применить статику (те же 62256) думаю все прекрасно полетит.
А вообще есть мысль вставить .... процессор в видяху... Да да.. вм85 с пзу с библиотеками, биосом и прочим, и ..... с сопроцессором плавающей точки (амд вроде доступны). Наружу эта видяха пускай также "торчит" 8 килобайтами ОЗУ, и никто никому не мешает. Ну если делать - значит делать хорошо и универсально. И это уже решит проблему неотъемлимой части компа.
Насчет первого варианта все классно и круто и быстро... Но вот вопрос... По мне - так память должна быть с одинаковыми данными. То есть тут всеравно нужно как то ПИСАТЬ в обе сразу а читать пофиг из одной из них а иначе один фиг нарвешься на рассинхрон.
Короче пока что самый выгодный вариант - это номер 2, первая половина ссlr работает проц, а вторая половина вг75.
Да и еще момент. Тут если почитать глубоко выше - вы сталкивались с тем что вг75 стартуют по разному и у них нет аппаратного сброса. Проблема очень легко решается программно.
Прощитал всё, пользуйтесь.
Первые два байта это 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 там просто из-за того что такой метод использует. И с его видео режимом любая память сойдет. Однако же понятие зачем быстрая память, придет уже при скорости пикселей 25,175МГц например, если выдавать всего 256 цветов. Поэтому этот метод в видеокартах не применяют.
Ого. Целый графический ускоритель на 8085!!! А схема уже есть, она не сильно сильно секретна? Покажете? А какие библиотеки планируете? Окна аппаратно сможет двигать, переворачивать, зеркалить, закрашивать по контуру, рисовать полигоны, линии?
Ну а почему бы и нет. Схемы пока нет, придут платы - похимичу, прикину, нарисую... Это ж хобби, кто спектрумы бесполезные и бесконечные собирает, а кто это... Странна реакция модератора, вроде должен также с проксоренными мозгами быть.
Какие библиотеки? Да какие в голову взбредут. Все что нужно и полезно. Подал питание на видяху - а она сразу тебе на экране на - заставку. Да ладно, не берите в голову.
Тем временем пришла новая платка, еще раз огромное спасибо за нее freddy. Собрал:
https://i.ibb.co/9m0ycGZ/P1140039.jpg
https://i.ibb.co/KWsP0SQ/P1140040.jpg
Завелась с первого раза, моментально. Пойду попробую поиграться с режимами 80x43, 80x60 и другими. Может быть удастся посмотреть полноэкранные демки с TMDC
80x50 работает, крутотень! Надо наверное в BIOS ввести функции AH=12h/BL=30h .....
https://i.ibb.co/58CV7Vt/P1140041.jpg
А не было ли попыток скрестить это чудо со спеком? Для ис-доса самое оно было бы.
Сборка, как всегда на высшем уровне, выглядит очень круто! Особенный шарм придают новенькие КМ-ки и резисторы МЛТ.
Если б не зеленая маска, то прямо видеокарта родом из СССР :)
Рад, что Вам понравились новые видеорежимы ;)
А может проще дописать функцию AH=00h чтобы устанавливать не стандартные режимы и присвоить им какие то не используемые номера?
Номера выбрать, чтоб стандартное ПО не дергало их.
А так то это вобще не стандартные режимы, и применяются не часто в софте тех годов. Видеокарты в них переводили также не стандартными способами :)
Пока не знаю как это лучше внедрить, мало знаний о способах перевода карт. Через порты напрямую если кто лез в каких то программках, то тут мы пролетаем однозначно.
- - - Добавлено - - -
А никто не пробовал как она в майниге? Интересно, сколько мегахешей на эфире дает...
Ну, 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 такое:
Где хранится кол-во строк scan line (200,350,400). По идее, при старте надо заполнить его чем-то вродеКод:video_dda equ 89h ; byte - video display data area (MCGA and VGA)
А далее в обработчике int 10h/AH=00 нужно лезть туда и устанавливать параметры из таблички в соответствии с..Код:; Store VGA active, 400 scanline
mov ax,biosdseg
mov es,ax
mov byte ptr es:[video_dda],00010001b
Скрытый текст
Код:; 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, и многие его не загружают. Но, в принципе, возможность такая есть...
До такого не дойдет. Надеюсь. Обойдемся без крайностей. Лучше хитросделанные проги патчить.
Времени подробно дизассемблировать нет. Но всеже в 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 понятно. Когда то доделаю вышеперечисленные функции.
нада отдельная АФФТАРСКАЯ тема про девайс
с первым пстом в котором будет собрано все что надо с блаблабла
ато щас это уже портянка с херчтонайдешь...
Tronix, попробуйте пожалуйста этот bios на 486й плате. Больше не должен 4 раза перезапускаться. Должен сам находить порт видеокарты.
https://disk.yandex.ru/d/dmQDXNbMAJqr2A
- - - Добавлено - - -
Очень интересно какую скорость Checkit дает на 486?
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 видюхой.
Я там что то сделал.
Тестировал на 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 .
Пока нету ПЗУ-шки на 32Кб, поэтому мучаем версию 8Кб. Да на ней я думаю и остановимся, ну куда ему 32Кб?
Вообщем, новый BIOS сначала "не пошел".
Как уже писал ранее, первое что превентивно сделал - перенес метку already_set в самый конец на выход, перед восстановлением всех значений из стека. А то надоедает по 4 раза приветствие писать;
Второе - упорно моя мать не желала грузить Ext-ROM, пищала вроде два коротких три длинных или как-то так, пока не добавил в начало вот это:
Не знаю, что конкретно помогло - то-ли ей надо что бы четвертый байт был jump, то ли все-таки что бы по 0x1eh были символы "IBM ", но без этой конструкции ну ни в какую не хочет пускать ExtROM по адресу C0000. Эта конструкция и раньше у меня была в прошлых BIOS, еще в первой версии. Просто перенес на новый.Код: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
Замерял скорость в Checkit на AMD 486-133@160
https://i.ibb.co/j6VtY9m/P1140047.jpg
Немного уменьшилась, по сравнению с предыдущей версией BIOS, но оно и понятно - стало mul больше, стали дополнительные вызовы (call) и тд. В целом - все равно очень быстро, быстрее рядовых ISA8 видеокарт.
А вот так выглядит распределение памяти, про которое говорил:
https://i.ibb.co/3pQnvNJ/P1140048.jpg
- - - Добавлено - - -
О, спасибо, взаимно. Сейчас попробую 0.3!
Для 8кб ПЗУ биоса нужно дешифровать адреса по другому. Иначе будет 4 раза находить один и тот же биос. Возьмите все же 28с256.
Как правильно писать старт мне не особо понятно. Я так и не нашел нигде нормального описания по структуре биос. У меня 386 ищет по 2кб и считает контрольную сумму. Никаких слов "IBM" не ищет. Проблем с запуском у меня нет. По возможности посмотрите дизассемблером свой биос материнки, что он делает во время сканирования BIOS EXT.
И даже быстрее рядовых ISA16 видеокарт :)))
- - - Добавлено - - -
если знаете мануал по биосам, дайте ссылку.
Биос 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). Наверно тоже посмотрю в сторону уменьшения резисторов подтяжек щаз попозже...
Как же я тогда ошибался! DOOM запускается и просто летает на моей тормозной 386й!
https://i.servimg.com/u/f90/20/09/39/66/th/f8865b10.jpg
- - - Добавлено - - -
Спасибо! Добавлю в будущие релизы. Видать какая то не документированная магия есть, чтоб кто попало биосы не клепал.
- - - Добавлено - - -
попробуйте в процедуре записи функции 05h cli поставить перед первым out, а sti после последнего out
Ага, я то же погонял в DOOM:
https://i.ibb.co/bN53Kw1/P1140049.jpg
Как видно у меня режим 80x50. Но завелся не из коробки, а путем правки i_ibm.c, строчки textdestscreen += 4128
Я даже у автора FastDoom спросил, точно мол нет ошибки здесь в размере страницы 4128 - он сказал что мол сам долго не мог понять, подбирал это значение опытным путем, иначе начинает мигать все. И, действительно, в DosBox работает как у автора и не работает с 4096. С ISA_VG75 работает с 4096 и не работает как у автора с 4128. Загадка прямо, почему размер страницы в 80x50 должен быть равен 8256 (4128*2)....Код:#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
А теперь я даже не очень уверен, что проблема именно аппаратная, а не программная. Например, если я запускаю VC и переключаюсь в 80x50, затем печатаю просто команду DIR и жму Enter по возвращению в VC вижу следующую картину:
https://i.ibb.co/zbTnr0N/P1140050.jpg
То есть как-бы адрес видео-буфера сбился. При этом по 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://disk.yandex.ru/d/dLlCl9MxIMF-XA
DOOM теперь будет работать прямо из коробки, править ничего не нужно.
Небольшой ролик про текстовый дум на ВГ75, а в качестве звуковой карты - VaninBlaster:
https://youtu.be/JPXJn-TfPtQ