напишите плз простенькую программку с записью в видеопамять (B800h...) Не поежжаю я, совсем деревня... =(
Вроде будет так: Код (Text): cseg segment assume cs:cseg, ds:cseg, es:cseg, ss:cseg org 100h start: mov ax, 0B800h mov es, ax ; напрямую (mov es, 0B800h) сделать нельзя ; теперь в es - сегмент видеобуфера цв. экрана mov di, 0 ; смещение относит. сегмента (попробуй поизменять) mov ah, 30 ; атрибут символа (цвет, фон). хз =) я не тестил, если что - ; попробуй поставить другие числа mov al, 03Bh ; код символа ("+") ; можно, кстати, короче - mov ax, что-то_там mov es:[di], ax ; пишем по адресу 0B800h:0000 атрибут и код символа int 20h ; выход cseg ends end start [add] Советую этот код еще в отладчике посмотреть... [/add]
Схожая проблема: требуется вывод графики 480x640x16. Делаю так: mov ax,0A000h mov es,ax mov ax,12h ; режим 480x640, 16 цветов int 10h после этого пишу в память: mov [es:XX],XX Наблюдается только монохромный цвет. Прошу совета.
0B800h - начало текстового буфера, 0A000h - видео. Проблема в самом режиме - почему-то mov ax,13h ; 320x240x256 int 10h проходит нормально, палитра из 256 цветов. В любой документации написано что ax 12h суть 640х480х16. Может быть в палитре все дело. /
16-ти цветовые режимы - они ведь плоскостные. То есть адресуется 1 пихель - 1 бит, но реально четыре бита по одному адресу. Запись же в нужные слои производится с помощью управления регистрами графического контроллера. Во! Нашел свои исходнички, а думал - убил. Это установка одного пиксела (x, y) = color на входе es = A000; bx = y*80+x/8; ch = 1<<(7-x%8); cl = color; (для простоты, собственно я хочу привести именно вывод пикселя) Код (Text): mov dx, 03CEh mov al, 0 mov ah, cl out dx, ax mov ax, 0F01h out dx, ax mov cl, es:[bx] mov al, 8 mov ah, ch out dx, ax mov es:[bx], 0FFh довольно дурацкая система, если честно...
xVoid Почитай про основы программирования видеодаптеров хотя бы здесь http://www.lib.csu.ru/dl/bases/prg/frolov/books/bsp/v03/ch7.htm
crypto я понял уже что делать надо =) phalnx для каждого видеорежима свой адрес в памяти, т.е. 80x25 (стандартное дос окно) -> 0B800h 320x200x256 -> 0A00h а для остальных надо использовать 0Fh/int 10h помоему...