tinysprite

Página 3/3
1 | 2 |

Por Warchild

Paragon (1280)

Imagen del Warchild

28-01-2015, 21:46

Creo que te estás liando, en MSX2 la tabla de colores de los sprites va a parte, en &h7400 en el caso de screen 5. En &h7600 están las coordenadas, número de sprite y color (este último para MSX1). Pero ahí no tienes que tocar nada para definir los sprites, y TinySprite no te da esos datos (por eso creo que te estás liando, no tienes que dejar nada a 0, olvida el tema de coordenadas solo colocar los datos de color a partir de &h7400 y los patterns en &h7800. Después para visualizarlos sí deberás manipular las coordenadas. Pero para definirlos no tienes que hacer nada ahí.

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

28-01-2015, 23:45

LD HL,DATOS ;
LD BC,16 ; Copy attributes to VRAM
LD DE,1E00h ; (only first sprite) -------- lo he cambiado por 7600 h
CALL LDIRVM ;

Y LUEGO DEFINES
DATOS: db 110,160,0,0

osea coordenadas y lo otro que es ??
numero de sprite no??
y lo siguiente que es??

la pagina??

Por Warchild

Paragon (1280)

Imagen del Warchild

29-01-2015, 12:11

Coordenada Y, X, núm de patrón y color. Pero ese byte de color no tiene uso en modo 2. Esto son atributos, pero no la definición y TinySprite no te da estos datos obviamente. Defines patrones en 7800h y colores en 7400h. Ya están definidos los sprites. Luego en 7600h, coordenadas Y, X y número de patrón.

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

29-01-2015, 13:50

Liego te pongo la rutina con el ejemplo

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

29-01-2015, 17:10

Es una bandera de españa. Borde y palo blanco. Dime porque no se ven los bordes de mas de un color en la misma linea aunque ponga el bit 6 a 1 el tiny sprite

gracias

INIT:
LD HL,FORCLR ;
LD [HL],15 ;
INC HL ; Change colours
LD [HL],1 ;
INC HL ;
LD [HL],1 ;
CALL CHGCLR ;

LD A,5 ;
CALL CHGMOD ; Screen 5
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,7800h ; Copy 2 16x16 patterns to VRAM
LD BC,64 ;
CALL LDIRVM ;
LD HL,SPR_COLOR ;
LD DE,7400h ; 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,7600h ; (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
; mask 0
DB 00000000b
DB 00000000b
DB 00111111b
DB 00011111b
DB 00011111b
DB 00011111b
DB 00011111b
DB 00011111b
DB 00011111b
DB 00111111b
DB 00100000b
DB 00100000b
DB 00100000b
DB 00100000b
DB 00100000b
DB 00100000b
DB 00000000b
DB 00000000b
DB 11000000b
DB 10000000b
DB 10000000b
DB 10000000b
DB 10000000b
DB 10000000b
DB 10000000b
DB 11000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b

; mask 1
DB 00000000b
DB 00000000b
DB 00000000b
DB 00100000b
DB 00100000b
DB 00100000b
DB 00100000b
DB 00100000b
DB 00100000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 01000000b
DB 01000000b
DB 01000000b
DB 01000000b
DB 01000000b
DB 01000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b

; Sprites colour data
; (32 bytes)

SPR_COLOR:

; attr 0
DB 00000000b
DB 00000000b
DB 00001111b
DB 00001001b
DB 00001001b
DB 00001010b
DB 00001010b
DB 00001001b
DB 00001001b
DB 00001111b
DB 00001111b
DB 00001111b
DB 00001111b
DB 00001111b
DB 00001111b
DB 00001111b

; attr 1
DB 00000000b
DB 00000000b
DB 00000000b
DB 01000110b
DB 01000110b
DB 01000101b
DB 01000101b
DB 01000110b
DB 01000110b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b

;COORDENADAS Y NUMEROS DE PATRON

DATOS: ;Attribute data for first 16x16 sprite

DB 110,160,0,0

Por Warchild

Paragon (1280)

Imagen del Warchild

29-01-2015, 19:38

A simple vista lo que puedo ver es que solo colocas en pantalla uno de los sprites. Coloca el otro en las mismas coordenadas y en principio has de ver la combinación de ambos. Ten en cuenta que cada sprite es independiente y el ordenador se limita a colocar cada uno donde le indiques.

Una cosa, cuando pongamos código en un post mejor usar el botón que tiene el símbolo < > (a la izquierda de la lupa). Así se lee más claro y no tendrás problemas con los símbolos.

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

29-01-2015, 20:05

ok
bueno pasa lo siguiente.

;COLOCAMOS EL PRIMERO EN PANTALLA
LD HL,DATOS	;
LD BC,16	;	Copy attributes to VRAM
LD DE,7600h	;	(only first sprite)
CALL LDIRVM	;
DB 110,160,0,0,110,160,1,0

si pongo en bc 4 sale la bandera pero no sale mas de un color por linea
si pongo en bc 8 me sale entera blanca

hay algo que se me escapa o el tiny me esta volviendo loco

Por Warchild

Paragon (1280)

Imagen del Warchild

30-01-2015, 01:02

Creo que ell problema está en los números de patrón. Un sprite de 16x16 son 4 de 8x8 por lo que la numeración en lugar de ser 0, 1, 2, 3... ha de ser 0, 4, 8, 12...

Prueba a ponerlos como 0 y 4 en lugar de 0 y 1.

Página 3/3
1 | 2 |