прямая запись в видеопамять

Тема в разделе "WASM.BEGINNERS", создана пользователем xVoid, 2 май 2006.

  1. xVoid

    xVoid New Member

    Публикаций:
    0
    Регистрация:
    2 май 2006
    Сообщения:
    3
    Адрес:
    Russia
    напишите плз простенькую программку с записью в видеопамять (B800h...)

    Не поежжаю я, совсем деревня... =(
     
  2. LOL

    LOL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2006
    Сообщения:
    175
    Адрес:
    Russia
    Вроде будет так:
    Код (Text):
    1.  
    2. cseg segment
    3. assume cs:cseg, ds:cseg, es:cseg, ss:cseg
    4. org 100h
    5. start:
    6.  
    7.     mov ax, 0B800h
    8.     mov es, ax      ; напрямую (mov es, 0B800h) сделать нельзя
    9.                 ; теперь в es - сегмент видеобуфера цв. экрана
    10.     mov di, 0       ; смещение относит. сегмента (попробуй поизменять)
    11.    
    12.     mov ah, 30      ; атрибут символа (цвет, фон). хз =) я не тестил, если что -    
    13.                 ; попробуй поставить другие числа
    14.     mov al, 03Bh    ; код символа ("+")
    15.                 ; можно, кстати, короче - mov ax, что-то_там
    16.     mov es:[di], ax ; пишем по адресу 0B800h:0000 атрибут и код символа
    17.    
    18.     int 20h     ; выход
    19.  
    20. cseg ends
    21. end start
    22.  


    [add] Советую этот код еще в отладчике посмотреть... [/add]
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    обычно используют

    rep movsw
     
  4. xVoid

    xVoid New Member

    Публикаций:
    0
    Регистрация:
    2 май 2006
    Сообщения:
    3
    Адрес:
    Russia
    спасиб, доехал

    токо мне надо не символы записывать, а цвета пикселей...

    ну сам уже понял как
     
  5. phalnx

    phalnx New Member

    Публикаций:
    0
    Регистрация:
    3 май 2006
    Сообщения:
    3
    Адрес:
    perm rgn
    Схожая проблема: требуется вывод графики 480x640x16. Делаю так:



    mov ax,0A000h

    mov es,ax

    mov ax,12h ; режим 480x640, 16 цветов

    int 10h



    после этого пишу в память:



    mov [es:XX],XX



    Наблюдается только монохромный цвет. Прошу совета.
     
  6. LOL

    LOL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2006
    Сообщения:
    175
    Адрес:
    Russia
    phalnx



    А ты уверен на счет этого? Попробуй 0B800h. Хотя может я и не прав...
     
  7. phalnx

    phalnx New Member

    Публикаций:
    0
    Регистрация:
    3 май 2006
    Сообщения:
    3
    Адрес:
    perm rgn
    0B800h - начало текстового буфера, 0A000h - видео.

    Проблема в самом режиме - почему-то



    mov ax,13h ; 320x240x256

    int 10h



    проходит нормально, палитра из 256 цветов.



    В любой документации написано что ax 12h суть 640х480х16.

    Может быть в палитре все дело. /
     
  8. LOL

    LOL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2006
    Сообщения:
    175
    Адрес:
    Russia
    Ну хз тогда :dntknw:
     
  9. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    16-ти цветовые режимы - они ведь плоскостные. То есть адресуется 1 пихель - 1 бит, но реально четыре бита по одному адресу. Запись же в нужные слои производится с помощью управления регистрами графического контроллера.



    Во! Нашел свои исходнички, а думал - убил. Это установка одного пиксела (x, y) = color

    на входе es = A000; bx = y*80+x/8; ch = 1<<(7-x%8); cl = color;

    (для простоты, собственно я хочу привести именно вывод пикселя)
    Код (Text):
    1.  
    2.     mov     dx, 03CEh
    3.     mov     al, 0
    4.     mov     ah, cl
    5.     out     dx, ax
    6.     mov     ax, 0F01h
    7.     out     dx, ax
    8.     mov     cl, es:[bx]
    9.     mov     al, 8
    10.     mov     ah, ch
    11.     out     dx, ax
    12.     mov     es:[bx], 0FFh
    13.  


    довольно дурацкая система, если честно...
     
  10. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
  11. xVoid

    xVoid New Member

    Публикаций:
    0
    Регистрация:
    2 май 2006
    Сообщения:
    3
    Адрес:
    Russia
    crypto я понял уже что делать надо =)

    phalnx для каждого видеорежима свой адрес в памяти, т.е.

    80x25 (стандартное дос окно) -> 0B800h

    320x200x256 -> 0A00h

    а для остальных надо использовать 0Fh/int 10h помоему...