Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: MsxKun en 22 de Noviembre de 2009, 04:16:56 pm



Título: 1 bit sample y F9S
Publicado por: MsxKun en 22 de Noviembre de 2009, 04:16:56 pm
Buenas...

Es solo mi F9S o a alguien mas le pasa, que no playea samples por el click de teclado usando la rutina de Edu? Por ej., en el Parachuteless Joe, al estamparse no hace el sample del zurriagazo  ???

Sin embargo si hace click click al teclear normalmente... podria ser que el F9S usara otro numero de puerto? Me parece raro...


Título: Re: 1 bit sample y F9S
Publicado por: Dioniso en 22 de Noviembre de 2009, 04:54:05 pm
Has probado con el Beepertron? Por curiosidad...


Título: Re: 1 bit sample y F9S
Publicado por: MsxKun en 22 de Noviembre de 2009, 05:35:04 pm
Probando....

Pues si que va. Alguna idea pues?


Título: Re: 1 bit sample y F9S
Publicado por: Dioniso en 22 de Noviembre de 2009, 06:33:53 pm
Básicamente, la forma de tocar un sample no es totalmente correcta.

Primero conviene leer el estado inicial del BYTE completo ($AA) y no modificarlo completamente al cambiar el BIT 7. Hay que modificar sólo el BIT 7 y no el resto de los BITS.

De modo que antes de nada lees el BYTE, tal y como está en tu ordenador, para luego sólo cambiar el BIT 7; el que corresponde al PPI.

Código:
in a,($aa)
and $7f
out ($aa),a
nop
nop

A continuación guardas ese BYTE rotado una vez hacia la izquierda, ya que el SNIPPET de Edu insertará el BIT 7 rotando todo el BYTE hacia la derecha. Tú debes rotar el BYTE guardado (que ya está rotado hacia la izquierda) hacia la derecha, de modo que tendrás el BYTE original de tu ordenador y habrás insertado el nuevo BIT 7.

Código:
in a,($aa)
rla
ld (BEEPMASK),a

Al final, tan sólo te hace falta insertar una línea de código antes de enviar el BYTE a $AA. Te escribo ese trozo de código únicamente:

Código:
; Extract bit
rlca ;(5)
ld e,a ;(5)
; Convert to PPI format
ld a,(BEEPMASK) ;(14) copia del puerto ($aa) rotado un bit a izquierda
rra ;(5)
; Output to PPI
out ($AA),a ;(12)
ld a,e ;(5)

No sé si te ha quedado muy claro... Incluso yo me equivoqué en el SNIPPET para tocar música 1-BIT que está aquí, en el foro. Escribí "and $ef" en vez de "and $7f"...  :-[ Y corregí el SNIPPET, pero poco después se cayó el foro y se perdió la actualización que hice...

Pero lo que siempre hay que hacer, al principio de tu programa y antes de modificar nada, es lo que te he escrito antes. Repito:

Código:
in a,($aa)
and $7f
out ($aa),a
nop
nop
in a,($aa)
rla
ld (BEEPMASK),a

Y a la hora de mandar el BYTE a $AA, hazlo siempre con la copia que has guardado en la variable BEEPMASK (que nombre tan original se me ocurrió, verdad?), que debe estar en RAM, claro. Tal y como te he escrito arriba. La rutina será 13 T-STATES (+1 si estás en IM1) más larga, por lo que deberías quitar 3 NOPs de espera.

Si no te ha quedado muy claro, me lo dices y te lo intento explicar más detalladamente.


Título: Re: 1 bit sample y F9S
Publicado por: MsxKun en 22 de Noviembre de 2009, 06:49:39 pm
Si señor! El puto amo  ;D Funciona perfectamente ahora, Dioniso. Eres el amo del PPI. La explicacion no podia estar mas clara :) Gracias mil...


Título: Re: 1 bit sample y F9S
Publicado por: Dioniso en 22 de Noviembre de 2009, 06:54:14 pm
Me alegro  :D


Título: Re: 1 bit sample y F9S
Publicado por: SapphiRe_MSX en 22 de Noviembre de 2009, 08:34:37 pm
mooooooooooooooooooooola ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D


Título: Re: 1 bit sample y F9S
Publicado por: Madonna Mk 2 en 23 de Noviembre de 2009, 01:40:53 pm

Ahí ahí...

¡¡¡BEEPER A MUERTE!!!

;D