
Сообщение от
freddy
пробуйте так :
Скрытый текст
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
[свернуть]
Да, так начало работать. Без остановки ДМА - не работало ни в какую.

Сообщение от
freddy
Выкладывали для первой версии 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 когда джамперы меняешь...