Hola!
Quiero compartir con ustedes las siguientes funciones que he implementado, sacando provecho las funciones que proporciona la BIOS (Int 10h).
/*
Programador: Digital Love (LACS).
Fecha: 24-Mayo-2006.
Archivo: xbios.h
Funcion: Proporcionar funciones basica proporcionadas por el BIOS, para la
gestion del video.
*/
#include<dos.h>
/*********************Definicion de Constantes***************************/
#define AZUL 1
#define VERDE 2
#define ROJO 4
#define INTENSO 8
#define F_AZUL 16
#define F_VERDE 32
#define F_ROJO 64
#define PARPADEO 128
#define TEX 0x3 //Modo Texto
#define GRA 0x13 //Modo Grafico
/*******************Prototipos de Fuciones*******************************/
void ModoGrafico(unsigned int modo);
void Cursor(unsigned int ini, unsigned int fin);
void PonCursor(unsigned int x, unsigned int y);
void PosCursor(unsigned int *x, unsigned int *y);
void PonCar(unsigned char car, char atrib);
int LeeCar(void);
void PonPixel(unsigned int x, unsigned int y, unsigned char color);
unsigned char LeePixel(unsigned int x, unsigned int y);
/*Establecer el modo grafico con el que se desea trabajar*/
void ModoGrafico(unsigned int modo) {
union REGS r;
r.h.ah = 0; //Funcion #0: Seleccionar modo grafico.
r.h.al = modo; //Modo a utilizar.
int86(0x10,&r,&r);
}
/*Establecer tipo de cursor*/
void Cursor(unsigned int ini, unsigned int fin) {
union REGS r;
r.h.ah = 1; //Funcion #1: Seleccionar el tipo del cursor.
r.h.ch = ini; //Inicio del cursor.
r.h.cl = fin; //Fin del cursor.
int86(0x10,&r,&r);
}
/*Posicionar el cursor en las coordenadas XY*/
void PonCursor(unsigned int x, unsigned int y) {
union REGS r;
r.h.ah = 2; //Funcion #2: Pone cursor.
r.h.dl = x; //Columna.
r.h.dh = y; //Fila.
r.h.bh = 0; //Pag. video.
int86(0x10,&r,&r);
}
/*Obtener las cooredenadas del cursor en pantalla*/
void PosCursor(unsigned int *x, unsigned int *y) {
union REGS r;
r.h.ah = 3; //Funcion #3: Poscicion del cursor.
int86(0x10,&r,&r);
*x = r.h.dl; //Columna.
*y = r.h.dh; //Fila
}
/*Lee atributo y caracter en la posicion del cursor*/
int LeeCar(void) {
union REGS r;
r.h.ah = 8; //Funcion #8: Lee caracter y atributo.
r.h.bh = 0; //Pag. video.
int86(0x10,&r,&r);
return r.x.ax; //Caracter.
}
/*Escribe atributo y caracter en la posicion del cursor*/
void PonCar(unsigned char car, char atrib) {
union REGS r;
r.h.ah = 9; //Funcion #9: Escribe caracter y atributo.
r.x.cx = 1; //Numero de veces que escribe el caracter.
r.h.al = car; //Caracter.
r.h.bl = atrib; //Atributo;
int86(0x10,&r,&r);
}
/*Poner pixel en pantalla*/
void PonPixel(unsigned int x, unsigned int y, unsigned char color) {
union REGS r;
r.h.ah = 12; //Funcion #12: Escribir Punto.
r.x.cx = x; //Columna.
r.x.dx = y; //Fila.
r.h.al = color; //Color-Intensidad.
int86(0x10,&r,&r);
}
/*Lee el color especificado en las coordenadas XY*/
unsigned char LeePixel(unsigned int x, unsigned int y) {
union REGS r;
r.h.ah = 13; //Funcion #13: Lee Pixel.
r.x.cx = x; //Columna.
r.x.dx = y; //Fila.
int86(0x10,&r,&r);
return r.h.al; //Color pixel.
}
Espero que les sean de utilidad a todos los interesados. Estas son algunas de las muchas funciones que tengo en mente por desarrollar.
Sus comentarios, criticas o mejoras a estas funciones seran bienvenidas.
Por ahora me despido hasta pronto!