Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: cybernoid en 30 de Octubre de 2007, 11:37:01 am



Título: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: cybernoid en 30 de Octubre de 2007, 11:37:01 am
Hola,

Bueno, pues yo sigo probando cosas en ensamblador C y Basic (todo terreno :P) y hoy estaba probando con asm, concretamente quería pasar el ejemplo de disparos que colge el otro día a ASM a ver como se me daba.

Pues me encuentro con un pequeño problema (seguro que una chorrada como la copa de un pino) que creo no debe ser muy complicado de solucionar, pero la cuestión es que no se donde esta el fallo.

Utilizo parte de uno de los listados de robsy para inicializar el video, concretamente el del Pong, en el mismo listado se inicializan los sprites a 16x16 o por lo menos eso parece.

la cuestión es que cuando muestro el sprite este aparece en 8x8 :( vamos, que solo veo una parte de 8x8, el modo de video me queda como screen 1,1 cuando lo que necesito es 1,2

ale, aquí pego el código para ver si alguien me puede ayudar:

Código:
;---------------------------------------------------------
; TEST
;---------------------------------------------------------
; CONSTANTES

SPRTBL  equ     3800h   
SPRATR  equ     1b00h   

; Variables del sistema
        CLIKSW  equ     0f3dbh  ; click
        FORCLR  equ     0f3e9h  ; color fondo
;---------------------------------------------------------
; ASMSX
;---------------------------------------------------------
        .bios           
        .page 2         ;  8000h
        .rom           
        .start  INIT   
;---------------------------------------------------------
INIT:
;---------------------------------------------------------

CALL INITIALISATION
CALL INIT_GRAPHICS



BUC1:
CALL MOVNAVE
CALL IMPNAVE
JP BUC1

LOADSPR:
LD HL,SPRNAVE ;define sprite
LD DE,3800H
LD BC,32
CALL LDIRVM
LD HL,POS_NAVE ;inicializa x e y
LD [HL],10
LD HL,POS_NAVE+1
LD [HL],10

RET

MOVNAVE:

XOR A ; A=0
call GTSTCK ; A=STICK(1)
CP 3
JP NZ,@@IZQ ; IF A<>3 THEN GOTO @@IZQ

@@DERE: LD HL,POS_NAVE+1; HL=DIS_POSNAVE_X
LD A,[HL] ; A=POSNAVE_X
CP 250 ; IF A=0 RETURN
RET Z
INC A
LD [HL],A


@@IZQ: CP 7  ; IF A<>7 THEN RETURN
RET NZ
LD HL,POS_NAVE+1; HL=DIS_POSNAVE_X
LD A,[HL] ; A=POSNAVE_X
CP 0 ; IF A=0 RETURN
RET Z
DEC A
LD [HL],A
RET

IMPNAVE:
LD HL,POS_NAVE
LD A,[HL]
LD HL,SPRATR
CALL WRTVRM ; Y=SPR0Y
LD HL,POS_NAVE+1
LD A,[HL]
LD HL,SPRATR+1
CALL WRTVRM ; Y=SPR0X
LD A,1
LD HL,SPRATR+2
CALL WRTVRM ; SPR Nº=SPR0X

LD A,15
LD HL,SPRATR+3
CALL WRTVRM ; CLR=SPR0X
RET




;---------------------------------------------------------
INIT_GRAPHICS:
; Initialise the graphic mode and define graphic elements
;---------------------------------------------------------
; Set proper colours
; BASIC: COLOR 15,0,0
        ld      hl,FORCLR
        ld      [hl],15
        inc     hl
        ld      [hl],0
        inc     hl
        ld      [hl],0
; Set text mode II
; BASIC: SCREEN 1
        call    INIT32
;call    INIGRP
; Erase all sprite data
        call    CLRSPR
; 16x16 Sprite mode
; BASIC: SCREEN ,2
;        ld      bc,0e201h
;        call    WRTVDP
; Hide screen
        call    DISSCR
; Define sprites
CALL LOADSPR
; Recover screen
        call    ENASCR
; Return to main program
        ret
;---------------------------------------------------------


;---------------------------------------------------------
INITIALISATION:
; One-time initialisation
;---------------------------------------------------------
; desactiva el click del teclado
; BASIC: SCREEN ,,0
        xor     a
        ld      [CLIKSW],a
; inicializa el psg
        call    GICINI
; Init memory refreshment register R - [0-127]
        xor     a
        ld      r,a
; Hide function keys
; BASIC: KEY OFF
        call    ERAFNK
; Return to main program

        ret
;---------------------------------------------------------
; CONSTANTES
;---------------------------------------------------------
SPRNAVE:
; --- Slot 0
; color 1
DB 00000000b
DB 00000000b
DB 00000000b
DB 00100000b
DB 01000000b
DB 11000111b
DB 11001100b
DB 11001100b
DB 11001100b
DB 11001111b
DB 11001111b
DB 11001111b
DB 11000111b
DB 01000000b
DB 00100000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000000b
DB 00000100b
DB 00000010b
DB 11100011b
DB 00110011b
DB 00110011b
DB 00110011b
DB 11110011b
DB 11110011b
DB 11110011b
DB 11100011b
DB 00000010b
DB 00000100b
DB 00000000b
;---------------------------------------------------------
; VARIABLES
;---------------------------------------------------------

.page   3

POS_NAVE:
DS 2
POS_DISP:
DS 20 // MAX 10 DISPAROS


Gracias.
Gobblin


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: jltursan en 30 de Octubre de 2007, 11:53:44 am
Yo para empezar veo una cosilla rara, en la rutina de IMPNAVE, estás inicializando el patrón a 1, cuando sospecho que lo que querías poner era 0, es posible que eso provoque ese efecto.
Recuerda que cuando se utilizan los sprites de 16x16 es algo más lioso identificar los patrones ya que tienes 64 sprites numerados no secuencialmente, sino 0,4,8,12,16,....etc


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: cybernoid en 30 de Octubre de 2007, 11:58:24 am
Yo para empezar veo una cosilla rara, en la rutina de IMPNAVE, estás inicializando el patrón a 1, cuando sospecho que lo que querías poner era 0, es posible que eso provoque ese efecto.
Recuerda que cuando se utilizan los sprites de 16x16 es algo más lioso identificar los patrones ya que tienes 64 sprites numerados no secuencialmente, sino 0,4,8,12,16,....etc


si, eso es un error, pero no soluciona el problema, había puesto 1 para comprobar si realmente estaba la pantalla en modo 8x8, para comprobar que se estaban definiendo correctamente el sprite.

pero vamos, que poniéndole 0 se queda igual :(


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: cybernoid en 30 de Octubre de 2007, 01:07:53 pm
JEJEJEJE
Era aun mas tonto de lo que parecia

las lineas que hacen el screen ,2   estan comentadas :_)

es que aveces hago pruebas y me las deje comentadas

xDDD


se aceptan apedreamientos :D


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: pitpan en 30 de Octubre de 2007, 01:43:51 pm
Pues sí, sí, hoy toca lapidación. Mira que dudar de mi código X(


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: jltursan en 30 de Octubre de 2007, 02:55:53 pm
Jajaja....y yo que ya paso por encima y ni lo veo... :P


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: cybernoid en 30 de Octubre de 2007, 03:00:05 pm
Siento haberos hecho perder el tiempo :P

es que cuando es asm no me fio ni de mi sombra xD , estoy muy oxidado en este tema

vamos, que si me sale el tema de la navecita y los disparos haré una fiesta xDD 

Edito: ya estoy de fiesta hace un buen rato xD


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: Jon_Cortazar en 30 de Octubre de 2007, 05:35:17 pm
Enhorabuena por tus progresos gobblin! sigue así!  :D :D :D :D :D


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: SapphiRe_MSX en 30 de Octubre de 2007, 05:54:05 pm
Edito: ya estoy de fiesta hace un buen rato xD

¡¡Genial!! ¿Significa eso que habrá jueguecillos tuyos en ensamblador próximamente?

¡¡Sigue así!!


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: cybernoid en 30 de Octubre de 2007, 07:04:55 pm
GRACIAS POR LOS ANIMOS    :D :D :D :D

Voy avanzando en mi dominio MSXero, pero aun me queda cacho, respecto a lo de los jueguecillos ¡OJALÁ! creo que aun me queda que aprender un poco, pero seguro que alguno si vereis :) o eso espero, a ver si llego a la dev  :)


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: jltursan en 30 de Octubre de 2007, 07:53:18 pm
Pues ya se te ve bastante suelto en lo del ensamblador ;)

Y aprovecho para romper una lanza por los juegos pequeños; a ver si va a resultar que ahora mucha gente no va a a participar porque si no saca un megarom va a resultar que no vale la pena. ¿Que ha sido de las roms de 8Kb?, algún juego sencillito, tipo G&W es lo que hace falta...:-)


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: kabish en 30 de Octubre de 2007, 10:44:17 pm
Y aprovecho para romper una lanza por los juegos pequeños; a ver si va a resultar que ahora mucha gente no va a a participar porque si no saca un megarom va a resultar que no vale la pena. ¿Que ha sido de las roms de 8Kb?, algún juego sencillito, tipo G&W es lo que hace falta...:-)

Pues estoy de acuerdo contigo a medias. Mas que un juego de 8ks o un megarom se puede hacer una cosa muy digna con 16ks o 32ks, sobre todo con las rutinas de compresion que hay por ahi.

Pero 8ks a mi se me antoja muy poco, incluso cuando empiezas ..

Opinion personal totalmente discutible y censurable. ;)


Título: Re: Problemilla ensamblero (poner tamaño sprites 16x16)
Publicado por: nerlaska en 31 de Octubre de 2007, 06:34:51 am
Lo de los 8Kb es un reto más que nada.
Si es por hacer videojuegos cuando más Kb pues mejor porque menos te limitas.
Yo me apunto al carro de Kabish .. bueno que voy a decir si no bajo de los 128Kb :)
Por cierto .. creo que en nada publican entrada nueva en la MSXDEV jejeje :)