FASE (Fucking Awesome Spectrum Engine)

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mar, 17 Jun 2014, 17:40

Ostia que chulo el gentmx!!! :corchoneta: :corchoneta: :corchoneta: :corchoneta: :corchoneta: :corchoneta:

Para darle ambientación tener una fuente es un "must", ciertamente se puede añadir la opción para usar la fuente del sistema, pero al menos el nuestro que es espacial, molaria mil... :tits:

Bueno, despues de dos dias, esto ya va rulando :brasas:

UPDATE:
smooth probando que cambia si lo pongo a 0 el juego peta :?

He puesto estos a 0, pero scolor no tengo claro que linea es...
scolor 0
ccolor 0
¿Como pongo el borde a 0 también?

UPDATE2:
cuando se hace esto, quiero hacer un mapa de durezas como la churrera.
*screen = mapy * mapw + mapx;

En este momento el mapa sigue igual que antes, si quiero esperar a que el engine cargue el nuevo tile set en tiles meto un FRAME en medio¿?
Última edición por D_Skywalk el Mar, 17 Jun 2014, 19:10, editado 1 vez en total.
David Skywalker
Weblog: http://david.dantoine.org
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 17 Jun 2014, 19:08

D_Skywalk escribió:Ostia que chulo el gentmx!!! :corchoneta: :corchoneta: :corchoneta: :corchoneta: :corchoneta: :corchoneta:

Para darle ambientación tener una fuente es un "must", ciertamente se puede añadir la opción para usar la fuente del sistema, pero al menos el nuestro que es espacial, molaria mil... :tits:

Bueno, despues de dos dias, esto ya va rulando :brasas:


Entonces me lo apunto, lo que no sé es si estará listo del todo para la game fest.

D_Skywalk escribió:UPDATE:
smooth probando que cambia si lo pongo a 0 el juego peta :?


Esto tiene pinta de bug, tendrías que pasarme los fuentes para arreglarlo. Pero vamos que va mucho más suave con smooth a 1, y a no ser que quieras hacer un mapa muy grande no hay necesidad de poner smooth a cero.

D_Skywalk escribió:He puesto estos a 0, pero scolor no tengo claro que linea es...
scolor 0
ccolor 0
¿Como pongo el borde a 0 también?


Extraído del readme.html

Another useful constants outside the config.def are scolor and ccolor in engine.asm to configure the color of sync and clipping bars, and border_loading in loader.asm to put the color in the border after the tape loading.


scolor sería para cambiar la barra de sincronismo (barra negra en el dibujo del readme), ccolor son para las barras de clipping (amarillas en el readme) y para modificar el color de borde tienes que irte al archivo loader.asm y cambiar la constante border_loading
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mar, 17 Jun 2014, 19:14

Si ambas las había leído pero no cambian nada,... yo leo esto en el ASM

Código: Seleccionar todo

        include ndefload.asm
        DEFINE  border_loading 0
      IF  smooth=0
...
        display "----------------------------"
....
        ldir
      IF  border_loading=0
        xor     a
      ELSE
        ld      a, border_loading
      ENDIF


Pongo el border_loader a 5 (azul) y cuando termina la carga vuelve a ser gris...

Da la sensacion de que cuando carga, lo sobreescribe :/

Hice un update justo cuando enviaste tu mensaje, mirabe si me puedes dar una pistilla :boots:
David Skywalker
Weblog: http://david.dantoine.org
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 17 Jun 2014, 20:04

Vale, es un bug, hay que mover la parte que actualiza el borde más abajo, justo después de la lectura del último bloque en cinta.

Código: Seleccionar todo

        include ndefload.asm
        DEFINE  border_loading 1
      IF  smooth=0
        DEFINE  desc  $fe80
        DEFINE  ramt  $fd00+notabl
      ELSE
        DEFINE  desc  $fc81+notabl
        DEFINE  ramt  desc
      ENDIF
        display "----------------------------"
        display /A,0x8000-tmpbuf-stasp-mainrw, " bytes free"
        display "____________________________"
        output  loader.bin
        org     $5b06+ini-prnbuf
ini     ld      de, desc
        di
        db      $de, $c0, $37, $0e, $8f, $39, $96 ;OVER USR 7 ($5ccb)
        ld      hl, $5ccb+descom-ini
        ld      bc, $7f
        ldir
        ld      hl, $5ccb+descom-ini-1
        ld      de, $5aff
        call    desc
        ld      hl, $8000-maplen
        ld      de, engicm
        push    hl
        call    $07f4
      IF  border_loading=0
        xor     a
      ELSE
        ld      a, border_loading
      ENDIF
        out     ($fe), a
        di
        pop     hl
        ld      de, ramt-maplen
        ld      bc, maplen
        ldir
        ld      hl, $8000-maplen+engicm-1
        ld      de, ramt-1-maplen
        call    desc
        ld      sp, $5b06
        ld      de, $ffff
        ld      hl, ramt-1-maplen-codel2-codel1-codel0-bl2len
      IF  smooth=0
        ld      bc, $101
        lddr
        ld      e, $7f
        ld      bc, $180-notabl
      ELSE
        ld      bc, $300-notabl
      ENDIF
        lddr
        ld      hl, $5ccb+prnbuf-ini
        ld      de, $5b06
        push    de
        ld      c, screen-prnbuf
        ldir
        ret
prnbuf  ld      a, $17
        ld      bc, $7ffd
        out     (c), a
        ld      ($fff8), a
        ld      a, $10
        out     (c), a
        ld      a, ($fff8)
        cp      $17
        ld      de, ramt-1-maplen
        jr      z, next
        ld      hl, ramt-1-maplen-codel2
        ld      bc, codel1
        lddr
        ld      hl, init1
        ld      ($fffd), hl
        ld      hl, frame1
        ld      ($fffa), hl
        ld      a, $c3
        ld      ($fff6), a
        jr      copied
next    call    ramt-maplen-12
        jr      z, copied
        ld      hl, ramt-1-maplen-codel2-codel1
        ld      bc, codel0
        lddr
        ld      hl, init0
        ld      ($fffd), hl
        ld      hl, frame0
        ld      ($fffa), hl
copied  ld      hl, ramt-1-maplen-codel2-codel1-codel0-bl2len-$281-$7f*smooth+notabl
        ld      de, $7fff
        ld      bc, $23f8
        lddr
      IF  bl2len>0
        ld      hl, ramt-maplen-codel2-codel1-codel0-1
        ld      de, $10000-stasp+bl2len-1
        ld      bc, bl2len
        lddr
      ENDIF
        ld      hl, $ffff
        ld      ($fffe-stasp), hl
        ld      hl, $8000+maincm-1
        ld      de, $8200+mainrw-1
        call    desc
        inc     hl
        ld      de, $8000
        ld      sp, 0x10000-tmpbuf-stasp
        push    de
        ld      bc, mainrw
        ldir
        ret
screen  incbin  loading.rcs.zx7b
descom  org     desc
        include dzx7b_rcs.asm
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 17 Jun 2014, 20:07

También puedes cambiar el borde desde C directamente en el main.c con M_OUTP(0xfe, color). Si te das cuenta yo lo uso en la demo para saber cuánto tiempo de frame consume el engine, cuánto el código C y cuánto tiempo me sobra.
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mar, 17 Jun 2014, 21:22

antoniovillena escribió:También puedes cambiar el borde desde C directamente en el main.c con M_OUTP(0xfe, color). Si te das cuenta yo lo uso en la demo para saber cuánto tiempo de frame consume el engine, cuánto el código C y cuánto tiempo me sobra.


Muchas gracias con esto lo arreglo! :muaka:


Te vuelvo a pegar la duda :)
UPDATE2:
cuando se hace esto, quiero hacer un mapa de durezas como la churrera.
*screen = mapy * mapw + mapx;

En este momento el mapa sigue igual que antes, si quiero esperar a que el engine cargue el nuevo tile set en tiles meto un FRAME en medio¿?


Esto es lo que tengo ahora mismo...

Código: Seleccionar todo

void prepare_screen( void )
{
    *screen = mapy * mapw + mapx;
   
    //forzamos update screen para poder pillar el tileset para los attr
    FRAME;
   
    ptr_tile = tiles;
    ptr_attr = map_attr;
   
    j = 150;
    do
    {
        *ptr_attr++ = comportamiento_tiles[*ptr_tile++];
    }while(--j);
}


Gracias tio :boots:
David Skywalker
Weblog: http://david.dantoine.org
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 17 Jun 2014, 23:56

Exacto.

Lo has comprendido perfectamente. Al cambiar la variable *screen no se produce el cambio inmediatamente (ni se pinta la pantalla ni se rellena el array tiles[]), sino que hay que esperar al siguiente frame. Pero puedes adelantarte escribiendo la macro FRAME (en realidad no te adelantas, porque al principio hay un bucle que espera a que comience el frame). Otra solución más limpia habría sido forzar el cambio de tiles llamando a la rutina descompresora para poder rellenar la tabla de atributos, pero no merece la pena los ciclos que te ahorras y ten en cuenta que la ubicación de las rutinas es variable, tendría que hacer lo mismo que con FRAME, INIT y EXIT.
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mié, 18 Jun 2014, 11:14

Perfecto, gracias antonio!

Estoy intentado mejorar un poco la funcioncilla que he preparao para poner texto en pantalla, pero falla y no se por que...

Código: Seleccionar todo

     dst= (y * 0x800 ) + x + 0x4000 | *shadow << 8;

No serían 0x800 (8 veces 256) para llegar a la posicion correcta de y?

Es que se me pasa de la primera linea a la mitad de la pantalla O_O

No conozco mucho el hard del zx, a ver si me podéis ayudar :corchoneta:

Nada, estoy sobao...

Código: Seleccionar todo

    dst= (y * 0x20 ) + x + 0x4000 | *shadow << 8;
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mié, 18 Jun 2014, 11:35

Vale, pues cuando y vale más de 9 hace cosas como estas...
print-fail.png
print-fail.png (2.8 KiB) Visto 2977 veces


Y si uso menores como el 5 se ve bien...
print-5.png
print-5.png (2.81 KiB) Visto 2977 veces


¿la memoria de video no es secuencial??
:poke:
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor na_th_an » Mié, 18 Jun 2014, 12:07

No. Más quisiéramos.

La memoria de video está organizada en tres tercios de 2048 bytes. Dentro de cada tercio, está ordenada por columnas, por filas de caracteres, y por lineas de pixels.

O sea, tienes 32 bytes de la primera linea de 32 caracteres. Los siguientes 32 bytes no son los pixeles de justo debajo, sino los de la primera linea de pixeles de la siguiente linea de caracteres. Así ocho veces. El byte número 256 es el primer byte de la segunda linea de pixeles de la primera linea de caracteres... Y así cada tercio.

Está optimizado para la impresión de texto y un par de cosas más, lo que complica otras cosas.

http://wordpress.animatez.co.uk/compute ... ry-layout/

Lo más rápido para imprimir texto es hacerse un array con la dirección de inicio de cada linea y listos, te olvidas de andar calculando. Son 48 bytes de nada. Lo suelo usar en mis mierdirrutinas, mira el adjunto. El array está donde pone line_buffer.
Adjuntos
simple-printer.h
(4.17 KiB) Descargado 136 veces
Como diría Rorshach: "Urm..."

Volver a “General”

¿Quién está conectado?

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