Radastan escribió:Donde "TEXTO" es una cadena de caracteres... ¿cómo puedo pasar esa cadena a dígitos numéricos?
No entiendo la pregunta.... ¿pasar la cadena a dígitos numéricos? Una cadena es un vector de caracteres, o sea, una ristra de dígitos numéricos (los cósigos ASCII de los caracteres de esa cadena), así que, ¿en qué se supone que consiste "pasar una cadena a dígitos numéricos"?
Entiendo que lo que necesitarías sería en realidad traducir cada carácter de una cadena a una dirección de inicio de la definición del carácter. Supongamos que, como dice Haplo, defines un juego de caracteres de 4x6. En el modo Radastaniano, eso ocupa (4*6)/2 = 12 bytes. Supongamos también que ese juego de caracteres comienza en la posición de memoria CharFont, y que comienza con la definición de un espacio (ASCII 32). Harías algo así:
Código: Seleccionar todo
/* Asumo que X es par */
void print (char x, char y, char *texto)
{
char *InicioFuente = CharFont - 32*12; /* de esta forma, InicioFuente apunta 32 caracteres antes del espacio */
char *InicioSprite;
while (*texto)
{
InicioSprite = (*texto)*12+InicioFuente; /* Espero que el compilador optimice esto con desplazamientos */
PrintSprite (x, y, InicioSprite);
x+=4; /* siguiente posición de carácter */
if (x>=128)
{
y+=6;
x = 128-x;
}
texto++;
}
}
Por otra parte, PrintSprite sería algo así (versión que asume que X es par y sin usar el color 0 como transparente):
Código: Seleccionar todo
void PrintSprite (char x, char y, char *Sprite)
{
char *DirScreen = y*64+x/2;
char i;
for (i=0;i<6;i++)
{
memcpy (DirScreen, Sprite, 2); /* 2 bytes, 4 píxeles que pinto */
Sprite+=2;
DirScreen+=64;
}
}
Si se quiere transparencia habría que cambiar memcpy() por una rutina adhoc que combinara el contenido actual del destino con los valores de fuente, respetando en destino los 4 bits que en una copia normal se convertirían en cuatro ceros