tinysprite

Página 2/3
1 | | 3

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

23-01-2015, 22:07

warchild mover sprites ya lo hice siguiendo ese tutorial. este hilo lo abri porque al usar tiny sprite y cambiar algun color en el sprite que hice me salia eso y en msx2 estoy intentando hacerlo bien

ya te ire contando

Por Warchild

Paragon (1280)

Imagen del Warchild

24-01-2015, 00:24

jrcp_kun, ¿me harías un favor? Estoy probando en asm com en asMSX (supongo que es el que estás usando) y no sé por qué no me da el resultado esperado. El caso es que yo también lo hice ya antes siguiendo el mismo tutorial pero ahora no sé en que estoy fallando. La rutina es esta:

; TESTING MSX2 SPRITES IN ASM


;VARIABLES VRAM


	FORCLR  equ     0f3e9h  ; Foreground colour
;---------------------------------------------------------
; ASSEMBLER DIRECTIVES (asMSX)
;---------------------------------------------------------
        .ZILOG
	.bios           ; Defines MSX BIOS routines
        .page 2         ; Assembly starts at 8000h
        .rom            ; Selected format
        .db      "[KO01] CLASSIC PONG 0.15",1Ah
                        ; Text header - not MSX standard
        .start  INIT    ; Program start
;---------------------------------------------------------


;INICIO

INIT:
	LD HL,FORCLR	; 
	LD (HL),15	;
	INC HL		;	Change colours
	LD (HL),8	;
	INC HL		;
	LD (HL),10	;
	CALL CHGCLR	;
	

	LD A,4		;
	CALL CHGMOD	;	Screen 4 
	CALL CLRSPR	;	Clear Sprites
	


; DEFINIMOS UN PAR DE SPRITES

	LD HL,SPRITES	;
	LD DE,3800h	;	Copy 2 16x16 patterns to VRAM
	LD BC,64	;	
	CALL LDIRVM	;
	LD HL,SPR_COLOR	;	
	LD DE,1C00h	;	Copy sprite colours to VRAM
	LD BC,32	;
	CALL LDIRVM	;

;COLOCAMOS EL PRIMERO EN PANTALLA
	LD HL,DATOS	;
	LD BC,16	;	Copy attributes to VRAM
	LD DE,1E00h	;	(only first sprite)
	CALL LDIRVM	;



; ESPERAMOS PULSACION (ESPACIO)

TECLA:

	LD A,8		;
	CALL SNSMAT	;	Wait for space key
	CP 254		;
	JP NZ,TECLA	;
	LD HL,FORCLR+2	;
	LD (HL),15	;	Change border colour
	CALL CHGCLR	;
	

HANG:
	HALT		;
	JP HANG


	;	Sprite pattern data
	;	(64 bytes)

SPRITES:

;Slot 0

	DB 00011111b
	DB 00111111b
	DB 01111111b
	DB 01111111b
	DB 11111111b
	DB 11110100b
	DB 11110001b
	DB 10111111b
	DB 10111110b
	DB 11011111b
	DB 01111111b
	DB 00110101b
	DB 00011010b
	DB 00011111b
	DB 00001111b
	DB 00000000b
	DB 11111000b
	DB 11111100b
	DB 11111110b
	DB 11111110b
	DB 11111111b
	DB 10010111b
	DB 11000111b
	DB 11111101b
	DB 10111101b
	DB 11111011b
	DB 11111110b
	DB 01010110b
	DB 10101100b
	DB 11111100b
	DB 11111000b
	DB 00000000b

;Slot 1 

	DB 00011111b
	DB 00111111b
	DB 01111111b
	DB 01111111b
	DB 11110000b
	DB 11110100b
	DB 11110001b
	DB 11111111b
	DB 11011110b
	DB 01011111b
	DB 00101111b
	DB 00010101b
	DB 00010000b
	DB 00011010b
	DB 00011111b
	DB 00001111b
	DB 11111000b
	DB 11111100b
	DB 11111110b
	DB 11111110b
	DB 10000111b
	DB 10010111b
	DB 11000111b
	DB 11111111b
	DB 10111101b
	DB 11111101b
	DB 11111010b
	DB 01010100b
	DB 00000100b
	DB 10101100b
	DB 11111100b
	DB 11111000b



;	Sprites colour data
;	(32 bytes)


SPR_COLOR:	

	DB 00001100b
	DB 00000010b
	DB 00000011b
	DB 00000011b
	DB 00001100b
	DB 00000010b
	DB 00000011b
	DB 00000011b
	DB 00000011b
	DB 00000011b
	DB 00000010b
	DB 00001100b
	DB 00001100b
	DB 00000010b
	DB 00000010b
	DB 00000000b
	DB 00001100b
	DB 00000010b
	DB 00000011b
	DB 00000011b
	DB 00001100b
	DB 00000010b
	DB 00000011b
	DB 00000011b
	DB 00000011b
	DB 00000010b
	DB 00001100b
	DB 00001100b
	DB 00001100b
	DB 00001100b
	DB 00000010b
	DB 00000010b

;COORDENADAS Y NUMEROS DE PATRON

DATOS:		;Attribute data for first 16x16 sprite

	DB 110,160,0,0,118,160,1,0,110,168,2,0,118,168,3,0

No sé por qué la mitad izquierda del sprite aparece con los colores correctos y la mitad derecha no. En el emulador veo que la VRAM tiene los valores correctos. ¿Podrías porbarla y decirme si también te aparece igual? Llevo dos días buscando el fallo y nada... se ve que la neurona donde entonces retuve algo, ya no la tengo Sad

También puedes postear aquí el código que estás probando y a ver que vemos. El caso es que la primera serie de valores que pusiste que te sacaba el TinySprite me parecía bastante rara, los valores de la paleta no me cuadraban mucho porque la paleta se supone que son 32 bytes... nunca he usado la paleta del TinySprite así que no te puedo decir mucho más sobre ello.

Por Warchild

Paragon (1280)

Imagen del Warchild

25-01-2015, 21:07

Solucionado. Me han indicado en el foro en inglés donde está el fallo, tenía que cambiar a modo 2. Aquí os pongo la rutina (solo lo que es la definición para no alargarlo), por si os puede servir como guía.

INIT:
	LD HL,FORCLR	; 
	LD (HL),15	;
	INC HL		;	Change colours
	LD (HL),8	;
	INC HL		;
	LD (HL),10	;
	CALL CHGCLR	;
	

	LD A,4		;
	CALL CHGMOD	;	Screen 4 
	CALL CLRSPR	;	Clear Sprites

SETMODE2:

	
	LD    A,(RG0SAV + 1); Load VDP reg 1 FROM BIOS mirror
	AND   11111100b 
	OR    2			; Set bit 2 (16x16 sprites)
	LD    B,A		
	LD    C,1		; Set VDP reg 1
	CALL  WRTVDP

; DEFINIMOS UN PAR DE SPRITES

	LD HL,SPRITES	;
	LD DE,3800h	;	Copy 2 16x16 patterns to VRAM
	LD BC,64	;	
	CALL LDIRVM	;
	LD HL,SPR_COLOR	;	
	LD DE,1C00h	;	Copy sprite colours to VRAM
	LD BC,32	;
	CALL LDIRVM	;

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

25-01-2015, 23:02

gracias warchild
lo pruebo en cuanto pueda....

lo he probado y no es lo deseado en screen4 , que debo cambiar para probar en screen 5??
porque yo tengo varios colores y tu has aplicado un color a cada fila

yo tengo colores variados de ahi los mask

pero bueno probare a ver si saco algo mas sencillo primero

tu en las directivas tienes .ZILOG eso que es?? varia el ensamblador algo con ello??
luego tu pones () pero yo tengo que ponerle corchetes sino me tira error [] a ti te rula con parentesis??

Por Warchild

Paragon (1280)

Imagen del Warchild

26-01-2015, 01:19

.zilog varía ligeramente la sintaxis (perdón por no haberlo avisado. No sé por qué cometo menos errores de sintaxis y me lío menos en ese modo).

Respecto a los colores, para conseguir más de uno por linea usando varios spritestes debes poner a uno el bit 6 en las lineas que precises.

Y para Screen 5 me estaba yo liando y pensaba que LDIRVM solo accedía a los primeros 16K pero no es así. La rutina sería igual pero cambiando las direcciones de destino:

Patterns a 7800h
Colores a 7400h
Atributos a 7600h

La rutina que solo accede a los primeros 16K sscribir y leer byte de/en video ram y hay que usar las correspondientes de la sub-bios.

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

26-01-2015, 14:30

Ok pruebo

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

28-01-2015, 19:34

probado pero a lo que vamos.

cuando tengo un color por fila todo correcto. pero cuando pongo 2 colores en la misma fila ya es cuando me pone lo de mask y atributos por tantos colores como en la fila tenga. Eso como lo corrijo??

dime como es eso del bit 6 en las lineas de atributos o donde he de tocar??

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

28-01-2015, 19:44

o mas facil como puedo hacer un sprite multicolor solo eso . en screen 5 o en lo que sea,

gracias

Por Warchild

Paragon (1280)

Imagen del Warchild

28-01-2015, 20:05

¿En qué modo estás exportando los datos de TinySprite? ¿ASM Binario? El caso es que parece que TinySprite es un poco lioso a la hora de presentar los datos. Por lo que he podido ver (hablo de lo que te da usando ASM binario) te exporta los patterns como "mask". Pero son los patterns, o eso he podido ver yo...

Como "atributos" tienes el color (cuatro últimos bits) y en algunas de estas líneas los cuatro primeros bits no serán "0000" sino "0100". TinySprite ya te saca en los atributos el bit 6 puesto a uno donde es necesario. Puede que te estés liando porque al distribuir el propio programa los sprites por colores de línea quizá no acabaras de reconocer en los datos lo que eran patterns y lo que no...

El caso es que ya lo tienes hecho:

"Mask"=Pattern
Estos datos definen la forma de los sprites.

"Attr"=BITS EC CC IC + COLOR DE LINEA

Copias los datos de los patterns (mask) todos juntos. Después los datos de atributos, todos juntos y define los sprites como en la rutina que puse, no hay que hacer nada especial.

Lo ideal sería que TinySprite te diera los datos así, primero todos los patterns y después los atributos para poder pasarlo todo en dos copias como mucho. Pero te lo hace por "Slots", lo cual te obliga a reorganizar los datos. A parte de eso no tienes que hacer nada más.

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

28-01-2015, 21:17

si , incluso he probado con binario. he puesto que es msx2 arriba y no hay manera no se porque.

los datos son como los otros sprites coordenadas x,y, nº sprite y color ( lo dejamos en 0 para que coja los atributos de sprite)

voy a probar otra vez y te digo. si , ya se que debo cambiar los mask en pattern y los atrib en color

pruebo de nuevo

Página 2/3
1 | | 3