Mira necesito los datasheets, es decir las hojas de dato que provee el fabricante con la placa de video.
El modo VGA puede ser obsoleto en lo que a juegos se refiera, pero yo lo necesito para el control de una consola.
Particularmente no logro ubicar el cursor, cuando modifico el offset de la memoria de video de modo texto de 0xB8000 a 0xB8FA0, por ejemplo.
Estoy trabajando directamente sobre el hard y en modo protegido, por lo que no puedo utilizar funciones de BIOS, y no tengo tampoco un sistema operativo debajo.
Entonces está my dificil que encuentres algo...
(Nota: Todo esto es para los modos VGA de 256 colores indexados)
En pascal usaba algunos puertos (que encontré mientras hacia unas "pruebas") como:
port[966]:=0;
//Para modificar el número de colores visibles, esto hace que que la pantalla //aparezca toda negram, para volver a modo normal:
port[966]:=255;
//Esto es para cambiar la paleta de colores, es muchísimo más rápido que usar
//las funciones del bios.
port[968]:=0;
for x:=0 to 255 do
begin
//esto va en orden: rojo, verde y azul (o era azul verde y rojo??)
//son 256 colores
port[969]:=color_i[0,x];
port[969]:=color_i[1,x];
port[969]:=color_i[2,x];
end;
//También se puede leer la paleta actual de colores con ese puerto 969 (ojo está //en decimal).
Otros puertos similares (los 960... y pico) permiten cambiar la frecuencia de actualización de la pantalla, pero es un tanto peligroso cambiarlos especialmente en monitores antiguos, ya que puedes distorcionar la pantalla y si el monitor no es muy bueno hasta lo puedes quemar (Recuerden el mensaje que saca windows cuando cambias la frecuencia de actualización de la pantalla). Los monitores modernos se limitan a apagarse o colocarse en modo de bajo consumo, pero ojo que si estás en windows puede que tengas que reiniciar la máquina para volver a ver algo en tu monitor. Personalmente con mi monitor antiguo sólo veia como la imagen se distorcionaba como en un televisor antiguo.
Para Los visual y Delphi tendrás que usar en ASM el "in" y el "out".
mov al, 100
mov dx, 969
out dx, al //Port[969]:=100 // dx=969
in ax, dx //ax:=Port[969] // dx=969