Z88DK (curso Radastan) - Dudas Varias

Soporte técnico sobre los lanzamientos de MojonTwins y comentarios sobre los güegos. Ofrecemos soporte técnico con Fourspriter, te ayudamos con ZX Basic o Z88DK, te damos pistas some cómo saltarse un bicho y cosas así.

Moderador: na_th_an

Avatar de Usuario
Hark0
Mensajes: 96
Registrado: Mar, 28 Ene 2014, 07:42
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor Hark0 » Lun, 19 May 2014, 13:17

na_th_an escribió:Te lo he recortado yo, con esto debería ser suficiente.


deJcargando... ;)

Si me echas una manica ahora con la función rand() que funque en la versión Radastan...

... con esto tengo para dejaros en paz unos días. :mrgreen:
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor na_th_an » Lun, 19 May 2014, 13:23

Ahora ando liao, pero si te bajas la última versión de la churrera tienes un rand () y un srand () en engine.h. También necesitarás las variables que usa la rutina que están definidas en definitions.h. Con un poco de cortapega lo tienes, y creo que te servirá como aprendizaje.
Como diría Rorshach: "Urm..."
Avatar de Usuario
Hark0
Mensajes: 96
Registrado: Mar, 28 Ene 2014, 07:42
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor Hark0 » Lun, 19 May 2014, 14:07

na_th_an escribió:Ahora ando liao, pero si te bajas la última versión de la churrera tienes un rand () y un srand () en engine.h. También necesitarás las variables que usa la rutina que están definidas en definitions.h. Con un poco de cortapega lo tienes, y creo que te servirá como aprendizaje.



prefestro...

Para el tema del texto, he cortapegado de tu simple-printer.h.... (que te has dejado un #asm por ahi en medio entre función y función y al meterla a saco petaba por todas partes.... :P)

Yo he puesto la definición de la typo en mi .h de graficos y las funciones en mi video.h

;)

Y he aqui lo que pacha:

Imagen


Y digo yo.... jejejeje.... usando la "lógica ZX", podria coger, modificar los defb de los carácteres que no vaya a usar y "pintarlos" con esta misma función draw_fast de a uno para "hacerme" un pintatile8x8... cierto?

Como le cambio el valor de atributos ink+paper+bright+flash? toqueteando el valor de clr verdad?

Ay... como decia el Macario: "qué contento estoooooooooooy"... :mrgreen:
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor na_th_an » Lun, 19 May 2014, 14:24

Sí, puedes hacerlo así. De hecho, puedes añadirlos después de los que ya hay. En los datos que hay tras _letters sólo se definen los caracteres de 32 a 127... Si pones tus gráficos después puedes tener hasta 128 caracteres más sin problemas. Con usar los valores correctos en las variables y llamar a la función draw_char, se imprimirá tu gráfico.

Lo puedes hacer muy fácilmente. Pon esto al final:

Código: Seleccionar todo

void put8x8 (unsigned char x, unsigned char y, unsigned char c, unsigned char n) {
    unsigned char *address = (unsigned char *) (22528 + x + (y << 5));
    ncx [0] = x; ncy [0] = y; ncn [0] = n;
    *address = c;
    #asm
        call _drawchar
    #endasm
}


Como ves, simplemente se ponen los valores de los parámetros en las variables que se usan desde ensamblador y se llama a _drawchar. Hay mejores formas de hacerlo, pero esta era la única que me salía a mí cuando hicimos Maritrini en 2011. Lo de *address = c es para darle el color.

Puedes probarlo añadiendo 85,170,85,170,85,170,85,170 al final de todos los números y llamando a put8x8 (10, 10, 70, 128); para ver un bonito cuadrado con trama.
Como diría Rorshach: "Urm..."
Avatar de Usuario
Hark0
Mensajes: 96
Registrado: Mar, 28 Ene 2014, 07:42
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor Hark0 » Mar, 20 May 2014, 07:29

Hoy lo pruebo junto con lo de rand(), que ayer me comió el reloj!
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor radastan » Mar, 20 May 2014, 14:25

Respecto a un rutinita para imprimir sprites de 8x8 pixels a color...

Código: Seleccionar todo

// ___________________________________________
// Posiciona un Sprite de 8x8 a color
// ___________________________________________

void put_sprite_x8 (unsigned char *posicion, unsigned int x, unsigned int y)
{
   // -------------------------------------------
   // RUTINA DE IMPRESION DE UN SPRITE 8x8 PIXELS
   // CON ATRIBUTOS EN CUALQUIER POSICION DE CARACTER
   // ENTRADAS:
   // D será la posición del cursor vertical en caracteres
   // E será la posición del cursor horizontal en caracteres
   // 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)
      inc hl
      inc hl
      ld e, (hl)
      inc hl
      inc hl
      ld a, (hl)
           inc hl
           ld h, (hl)
           ld l, a
      ld a, d      ; recuperamos el valor vertical
      and 7      ; nos quedamos con la posición en el tercio
      rrca
           rrca
           rrca      ; rotamos para dejar su valor en múltiplos de 32 (linea)
      and 224      ; borramos el resto de bits por si las moscas
      or e      ; sumamos el valor horizontal
      ld e, a      ; e preparado
      ld a, d
      and 24      ; modificamos según el tercio de pantalla
      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
      push de      ; guardamos DE (la posición de pantalla)
      ld b, 8
      ld c,255   ; cargamos C con 255 para no afectar B con LDI

      .draw25
      ldi
      dec de
      inc d   
      djnz draw25   ; decrementa B y si es cero deja de saltar a draw

            ; Ahora imprimimos los atributos
      pop de      ; recuperamos el valor horizontal
      ld a,d      ; calculamos el valor de posición en la pantalla
           rra
           rra
           rra      ; multiplicamos por 32
           and 3      ; nos quedamos con los tres bits bajos
           or 88      ; apuntamos al comienzo del mapa de atributos
           ld d,a          ; ya tenemos d listo, e no hay que cambiarlo
      ldi      ; imprimimos los colores
      ret
         
   #endasm
}


Lo añades a motorzx.h y ya puedes usarla.

Por cierto, es interesante la misma rutina pero sin color, ya que es la que usaré para el tema de imprimir texto:

Código: Seleccionar todo

// ___________________________________________
// Posiciona una letra de 8x8 sin color
// ___________________________________________

void put_char (unsigned char *posicion, unsigned int x, unsigned int y)
{
   // -------------------------------------------
   // RUTINA DE IMPRESION DE UNA LETRA DE 8x8 PIXELS
   // EN CUALQUIER POSICION DE CARACTER
   // ENTRADAS:
   // D será la posición del cursor vertical en caracteres
   // E será la posición del cursor horizontal en caracteres
   // HL es la posición de memoria donde tenemos la letra
   // 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)
      inc hl
      inc hl
      ld e, (hl)
      inc hl
      inc hl
      ld a, (hl)
           inc hl
           ld h, (hl)
           ld l, a
      ld a, d      ; recuperamos el valor vertical
      and 7      ; nos quedamos con la posición en el tercio
      rrca
           rrca
           rrca      ; rotamos para dejar su valor en múltiplos de 32 (linea)
      and 224      ; borramos el resto de bits por si las moscas
      or e      ; sumamos el valor horizontal
      ld e, a      ; e preparado
      ld a, d
      and 24      ; modificamos según el tercio de pantalla
      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, 8
      ld c,255   ; cargamos C con 255 para no afectar B con LDI
      .draw26
      ldi
      dec de
      inc d   
      djnz draw26   ; decrementa B y si es cero deja de saltar a draw
      ret
         
   #endasm
}
Última edición por radastan el Mar, 20 May 2014, 17:53, editado 2 veces en total.
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor radastan » Mar, 20 May 2014, 14:40

El tema de random ya es harina de otro costal, y para nada banal, usa la solución de los mojones de momento mientras yo me curro la mía (debe ser independiente de tener ROM o no).
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor na_th_an » Mar, 20 May 2014, 14:50

La que hay en la churrera no necesita la ROM.

De todos modos en Ninjajar hay una mucho mejor (que puedes encontrar en WOS, por cierto), más corta, más rápida, y que ofrece más random. Mañana podrás pillarla del código.
Como diría Rorshach: "Urm..."
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor radastan » Mar, 20 May 2014, 15:06

na_th_an escribió:Mañana podrás pillarla del código.


HYPE
Avatar de Usuario
angel
Mensajes: 23212
Registrado: Vie, 09 Ene 2009, 13:04
Ubicación: Torreznolandia
Contactar:

Re: Z88DK (curso Radastan) - Dudas Varias

Mensajepor angel » Mar, 20 May 2014, 15:36

radastan escribió:
na_th_an escribió:Mañana podrás pillarla del código.


HYPE


Yeah! :ojo: :poke:
(_\_) (_|_) (_/_) (_|_) ILLO KE HEHEHEHEHEHEEEHEHEHEH!

¡Activa tu rainbow pechónico!

Volver a “Ayuda”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados