Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.18.4] |
|
Сообщ.
#1
,
|
|
|
Мужики, вопрос: как вывести цветной пиксель на VGA в режиме 640x480 при 16 цветах при четырех областях цветового смешения. ( без использования int 10h )
Я имею ввиду как это сделать записью в память и оперированием портами(регистрами) VGA |
Сообщ.
#2
,
|
|
|
;******************************************************************************* ;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 |