[Modo Radastaniano] - Textos

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Re: [Modo Radastaniano] - Textos

Mensaje por Hark0 » 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.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Radastan
Mensajes: 386
Registrado: 05 Oct 2015, 14:39

Re: [Modo Radastaniano] - Textos

Mensaje por Radastan » 14 Dic 2015, 19:36

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.

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
}
PD: Estoy haciendo todo el puñetero código ASCII a mano, sed pacientes. De momento el 0 y el 1 lo imprime bien. :plasplas:

Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Re: [Modo Radastaniano] - Textos

Mensaje por Hark0 » 14 Dic 2015, 21:55

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.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Radastan
Mensajes: 386
Registrado: 05 Oct 2015, 14:39

Re: [Modo Radastaniano] - Textos

Mensaje por Radastan » 14 Dic 2015, 22:42

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).
test.png
test.png (1.04 KiB) Visto 2252 veces
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++;
  }
}

Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Re: [Modo Radastaniano] - Textos

Mensaje por Hark0 » 15 Dic 2015, 08:41

¿alguien puede modificar el mencionado "memcpy" para poder usar transparencias?

¿y añadir un parámetro "tinta" para el color de la fuente?

:silbando: :maestro:
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Radastan
Mensajes: 386
Registrado: 05 Oct 2015, 14:39

Re: [Modo Radastaniano] - Textos

Mensaje por Radastan » 15 Dic 2015, 09:22

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?

:silbando: :maestro:
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).

EDITADO: Ya he actualizado el kit con letrastransparentes, voy a trabajar en optimizar el asunto.

Responder