Puerto y Memoria Grafica?

Iniciado por Vaagish, 1 Noviembre 2014, 22:42 PM

0 Miembros y 1 Visitante están viendo este tema.

Vaagish

Buenas! Estaba revisando este codigo.. Lo que hace es modificar la paleta de colores y escribir pixeles de colores (en forma de franjas) en la pantalla... al presionar una tecla, modifica la paleta y otra vez lo mismo..

Código (asm) [Seleccionar]
mov ax, 0013h ; Modo Grafico (ah = 00h / al = 13h)
int 10h ; Esta interrupción controla los servicios de pantalla del PC
mov ax, 0A000h ; Direccion de video (grafica)
mov ds, ax  ; DS = A000h (memoria de graficos). DS esta concatenado con DI

; ========== Cambiar paleta de colores ==========

mov dx, 3c8h ; Empezamos a modificar la paleta de colores
mov al, 0    ; Desde la entrada 0
out dx, al
inc dx      ; DX = 3C9h.

mov cx, 10 ; Se van a modificar 10 entradas ( cx se ve afectado con loop )

SigEntrada:    ; Modificar 10 entradas de la paleta

; Rojo.
mov al, 0
mul cl
out dx, al
; Verde
mov al, 0
mul cl
out dx, al
; Azul
mov al, 6
mul cl
out dx, al

  loop SigEntrada

; **************************************

  xor dx, dx
L1: ; Cuando vuelve a esta etiqueta no limpia dx, util para cambiar los colores
mov cx, 64000
  xor bx, bx
  xor di, di

NuevaLinea:
mov [di], dx
inc di
inc bx
cmp bx, 6400
jne SigPixel
xor bx, bx
inc dx
SigPixel:
loop NuevaLinea

; Esperar tecla
mov ah, 10h
int 16h

inc dx ; Otra entrada en la paleta de colores y volver a cargar
jmp L1




Ese codigo es 16-Bits y lo corro en Modo real.. Ahora la pregunta:

Si lograse pasar a modo protegido y quisiese dibujar algo avanzado (digamos, una ventana moderna, con muchos colores y bien ubicados, como un SO moderno) deberia de tener a nivel de nucleo, "algo" que modifique la paleta y haga el respectivo "out", como en ese codigo, verdad? O es de otra forma?

Y de ser así, seria como un driver,, y como podría ser la forma mas "optima" de implementar esa rutina? O algún material de referencia.. Parece trabajo difícil, de mucha matemática  :rolleyes:

Saludos! Gracias!


Vaagish

Hi! Gracias T.Collins, me estoy basando en gran parte en la misma web.. pero justo eso no lo había visto.. Eso confirma mi suposición..

Y si, debe ser bastante complicado.. Me cuesta entender como lograr la combinación de colores por pixel para lograr por ejemplo.. una textura humana, o una imagen de calidad.. el proceso de definir la mezcla correcta en la paleta para pintar un misero pixel, para luego modificar esa paleta para lograr otro pixel... suena imposible,, pero claro que no lo es..  :silbar:

Gracias! Saludos!