Página 17 de 20

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 17:40
por D_Skywalk
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¿?

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 19:08
por antoniovillena
$this->bbcode_second_pass_quote('D_Skywalk', 'O')stia 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.

$this->bbcode_second_pass_quote('D_Skywalk', '
')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.

$this->bbcode_second_pass_quote('D_Skywalk', '
')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

$this->bbcode_second_pass_quote('', '
')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

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 19:14
por D_Skywalk
Si ambas las había leído pero no cambian nada,... yo leo esto en el ASM

$this->bbcode_second_pass_code('', ' 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:

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 20:04
por antoniovillena
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.

$this->bbcode_second_pass_code('', '
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
')

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 20:07
por antoniovillena
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.

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 21:22
por D_Skywalk
$this->bbcode_second_pass_quote('antoniovillena', 'T')ambié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 :)
$this->bbcode_second_pass_quote('', 'U')PDATE2:
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...
$this->bbcode_second_pass_code('', '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:

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 23:56
por antoniovillena
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.

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mié, 18 Jun 2014, 11:14
por D_Skywalk
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...

$this->bbcode_second_pass_code('', ' 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...
$this->bbcode_second_pass_code('', ' dst= (y * 0x20 ) + x + 0x4000 | *shadow << 8;')

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mié, 18 Jun 2014, 11:35
por D_Skywalk
Vale, pues cuando y vale más de 9 hace cosas como estas...
print-fail.png
print-fail.png (2.8 KiB) Visto 8498 veces


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


¿la memoria de video no es secuencial??
:poke:

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mié, 18 Jun 2014, 12:07
por na_th_an
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.