Código
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
Saludos! Gracias!