На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Как вывести цветной пиксель VGA 640x480 4-planes
    Мужики, вопрос: как вывести цветной пиксель на VGA в режиме 640x480 при 16 цветах при четырех областях цветового смешения. ( без использования int 10h )

    Я имею ввиду как это сделать записью в память и оперированием портами(регистрами) VGA


      ;*******************************************************************************
      ;SetPixel12      устанавливает значение пиксела в режиме VGA 12h
      ;*******************************************************************************
      ;Использует:      PixelAddr12
      ;
      ;Вызов:      CX = координата x (0-639)
      ;            DX = координата y (0-479)
      ;            AL = значение пиксела
      ;
      ;Возврат:      нет
      ;
      ;Изменяемые
      ;  регистры:      AX,BX,CX,DX,Flags
      ;*******************************************************************************
      SetPixel12      PROC

                 push       es

                 mov       bx,cx              ;BX=x
                 mov      ch,al              ;CH = значение пиксела
                 mov      ax,dx              ;AX=y
                 call       PixelAddr12      ;AH = битовая маска
                                   ;ES:BX -> видеобуфер
                                   ;CL = количество битов для сдвига влево

      ;Устанавливаем содержимое регистра маски графического контроллера

                 shl       ah,cl      ;AH = битовая маска в нужной позиции
                 mov       dx,3CEh      ;DX = порт графического контроллера
                 mov       al,8      ;AL = номер регистра битовой маски
                 out       dx,ax

      ;Устанавливаем содержимое регистра режима графического контроллера

                 mov       ax,205h      ;AL = номер регистра режима
                             ;AH = режим записи 2 (биты 0,1), режим чтения 0 (бит 3)
                 out       dx,ax

      ;Устанавливаем значение пиксела

                 mov       al,es:[bx]      ;загружаем в регистры-защелки по байту
                                   ;из каждой битовой плоскости
                 mov      es:[bx],ch      ;изменяем содержимое битовых плоскостей

      ;Восстанавливаем значения регистров графического контроллера, принимаемые
      ;по умолчанию

                 mov      ax,0FF08h      ;AH=1111111b, AL=8
                 out       dx,ax            ;восстанавливаем содержимое регистра
                                   ;битовой маски

                 mov      ax,0005      ;AH=0, AL=5
                 out       dx,ax      ;восстанавливаем содержимое регистра режима

                 pop       es
                                   
                 ret

      SetPixel12      ENDP


      ;*******************************************************************************
      ;PixelAddr12      определяет адрес пиксела в видеобуфере в режиме VGA 12h
      ;*******************************************************************************
      ;Вызов:            AX = координата y (0-479)
      ;            BX = координата x (0-639)
      ;
      ;Возврат:      ES = сегмент видеобуфера
      ;            BX = смещение байта в видеобуфере
      ;            AH = битовая маска
      ;            CL = число битов, на которое осуществляется сдвиг влево
      ;
      ;Изменяемые
      ;  регистры:      ES,AX,BX,CL,DX,Flags
      ;*******************************************************************************
      PixelAddr12      PROC

                 mov      cl,bl

                 mov      dx,BytesPerRow12
                 mul      dx            ;AX=y*BytesPerRow12

                 shr      bx,1
                 shr      bx,1
                 shr      bx,1            ;BX=x/8
                 add      bx,ax            ;BX=y*BytesPerRow12+x/8

                 mov      ax,0A000h
                 mov      es,ax            ;ES:BX -> видеобуфер

                 and      cl,7
                 xor      cl,7            ;CL = число битов для сдвига влево

                 mov      ah,1            ;AH = несдвинутая битовая маска

                 ret

      PixelAddr12      ENDP


      Сообщение отредактировано: rivitna -
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0192 ]   [ 14 queries used ]   [ Generated: 17.05.24, 06:17 GMT ]