En la página de dafont hay algunas typos pixel que pueden servir:
http://www.dafont.com/es/bitmap.php
[Modo Radastaniano] - Textos
- Hark0
- Mensajes: 683
- Registrado: 27 Sep 2015, 00:31
- Ubicación: Cornellà de Llobregat - BCN
- Contactar:
Re: [Modo Radastaniano] - Textos
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
Re: [Modo Radastaniano] - Textos
Empezamos por lo fundamental, una rutina en ASM para dibujar una letra de 4x6 pixels. De momento no es translúcida, es decir, es como si imprimiéramos un sprite. Por defecto voy a poner que se use el color 0 de la paleta en la tabla ASCII como fondo.
PD: Estoy haciendo todo el puñetero código ASCII a mano, sed pacientes. De momento el 0 y el 1 lo imprime bien.
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
}
- Hark0
- Mensajes: 683
- Registrado: 27 Sep 2015, 00:31
- Ubicación: Cornellà de Llobregat - BCN
- Contactar:
Re: [Modo Radastaniano] - Textos
Truco, (o no)..... yo lo he usado en mis chorradas con SDL2...
Buscas una fuente de video BN para display... tipo NOKIA 3310... para Arduino o similares... en la librería de turno encontrarás los set de ASCII que se utilizan en estos displays...
EDITO:
Aqui el enlace de la fuente que yo he usado en SDL2... OJO con la codificación, recomiendo pasar el código 66 (letra B) a binario...
http://playground.arduino.cc/Code/PCD8544
Faltaría encontrar una a tamaño adecuado.
Buscas una fuente de video BN para display... tipo NOKIA 3310... para Arduino o similares... en la librería de turno encontrarás los set de ASCII que se utilizan en estos displays...
EDITO:
Aqui el enlace de la fuente que yo he usado en SDL2... OJO con la codificación, recomiendo pasar el código 66 (letra B) a binario...
http://playground.arduino.cc/Code/PCD8544
Faltaría encontrar una a tamaño adecuado.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
Re: [Modo Radastaniano] - Textos
Nada, nada, estoy haciéndome una con dos cojones, aunque me está saliendo muy parecida a las que hay (es que no hay mucho que hacer si quieres algo legible).
Esto va de vicio, sólo me queda terminar el font y os actualizo el kit de Z88DK con todo. Lo he metido como libreria aparte por si alguien quiere optimizarlo o personalizarlo sin tocar el resto. De paso añadiré en la actualización alguna rutina interesante más.
Por cierto, la rutina que va eligiendo los caracteres es la de McLeod casi del tirón, lo ha bordado salvo por algún pequeño detalle:
Esto va de vicio, sólo me queda terminar el font y os actualizo el kit de Z88DK con todo. Lo he metido como libreria aparte por si alguien quiere optimizarlo o personalizarlo sin tocar el resto. De paso añadiré en la actualización alguna rutina interesante más.
Por cierto, la rutina que va eligiendo los caracteres es la de McLeod casi del tirón, lo ha bordado salvo por algún pequeño detalle:
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++;
}
}
- Hark0
- Mensajes: 683
- Registrado: 27 Sep 2015, 00:31
- Ubicación: Cornellà de Llobregat - BCN
- Contactar:
Re: [Modo Radastaniano] - Textos
¿alguien puede modificar el mencionado "memcpy" para poder usar transparencias?
¿y añadir un parámetro "tinta" para el color de la fuente?
¿y añadir un parámetro "tinta" para el color de la fuente?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
Re: [Modo Radastaniano] - Textos
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?
EDITADO: Ya he actualizado el kit con letrastransparentes, voy a trabajar en optimizar el asunto.