Re: [Modo Radastaniano] - Textos
Publicado: 09 Dic 2015, 09:52
En la página de dafont hay algunas typos pixel que pueden servir:
http://www.dafont.com/es/bitmap.php
http://www.dafont.com/es/bitmap.php
Forum to discuss about the ZX-Uno project
https://www.zxuno.com/forum/
Código: Seleccionar todo
// ___________________________________________
// Posiciona una letra a color
// ___________________________________________
void put_letra (unsigned char *posicion, unsigned int x, unsigned int y)
{
// ___________________________________________
// Posiciona una letra a color
// ___________________________________________
void put_letra (unsigned char *posicion, unsigned int x, unsigned int y)
{
// -------------------------------------------
// RUTINA DE IMPRESION DE UNA LETRA DE 4x6 PIXELS
// EN CUALQUIER POSICION DE BYTES (cada byte dos pixels horizontales)
// ENTRADAS:
// D será la posición del cursor vertical en pixels
// E será la posición del cursor horizontal en parejas de pixels
// HL es la posición de memoria donde tenemos el sprite
// SALIDAS: se escribe en el mapa de pantalla
// ADVERTENCIAS: no comprueba límites de pantalla
// -------------------------------------------
#asm
ld hl,2 ; Pasamos la variable de entrada al acumulador
add hl,sp
ld d, (hl) ; D es el valor Y
inc hl
inc hl
ld e, (hl) ; E es el valor X
inc hl
inc hl
ld a, (hl)
inc hl
ld h, (hl)
ld l, a ; HL es el puntero al sprite
ld a, d ; recuperamos el valor vertical
rrca
rrca ; rotamos para dejar su valor en múltiplos de 64 (linea, de dos en dos pixels)
and 192 ; borramos el resto de bits por si las moscas
or e ; sumamos el valor horizontal
ld e, a ; e preparado
ld a, d ; cargamos el valor vertical
rrca
rrca ; rotamos para quedarnos con los bits altos
and 63 ; borramos el resto de bits
or 64 ; nos posicionamos a partir de 16384 (16384=64+0 en dos bytes)
ld d, a ; d preparado, ya tenemos la posición en pantalla
ld b,6 ; Indicamos que vamos a pintar 6 líneas
.draw2 ; dibujamos 4 pixels (2 bytes)
ld c,2 ; Indicamos que vamos a pintar 2 pares de pixels
ldi
ldi
ld a,e
add a,62 ; incrementamos una línea y retornamos los pixels dibujados
ld e,a
jr nc, sigue2
inc d ; incrementamos D si sale acarrero al incrementar E en 64 bytes
.sigue2
djnz, draw2
ret
#endasm
}
Código: Seleccionar todo
// ___________________________________________
// Escribe un texto
// ___________________________________________
void print (char *texto, char x, char y)
{
char *InicioFuente = ascii - 32*12; /* de esta forma, InicioFuente apunta 32 caracteres antes del espacio */
char *InicioSprite;
while (*texto)
{
InicioSprite = (*texto)*12+InicioFuente;
put_letra (InicioSprite,x, y);
x+=2; /* siguiente posición de carácter */
if (x>=63)
{
y+=6;
x = 0;
}
texto++;
}
}
Estoy con una rutina de sprites en C que usa el color 0 de la paleta como transparencia, así podemos usarla en textos y sprites (estos últimos si son pocos en pantalla porque no será rápida la rutina).Hark0 escribió:¿alguien puede modificar el mencionado "memcpy" para poder usar transparencias?
¿y añadir un parámetro "tinta" para el color de la fuente?