Fortaleza Romhack
Hola, Dark-N, tienes 1 mensaje, 0 son nuevos.
Tiempo total en línea: 22 horas y 21 minutos.
Mostrar mensajes no leídos desde la última visita.
Mostrar nuevas respuestas a tus mensajes.
13 de Septiembre de 2006, 11:03:13
Buscar:     Búsqueda Avanzada
       
2121 Mensajes en 297 Temas por 132 Usuarios
Último miembro: Dark-K
* Inicio Ayuda Buscar Editar Perfil Calendario Salir
+  Fortaleza Romhack
|-+  Foro de ayuda
| |-+  SNES (Moderadores: HeXPLuS, KaOSoFt)
| | |-+  Shifting
« anterior próximo »
Páginas: [1] Ir Abajo Respuesta Notificar respuestas Marcar como no leídos Enviar tema Imprimir
Autor Tema: Shifting  (Leído 70 veces)
The Emu
Miembro nuevo
*
Desconectado Desconectado

Mensajes: 12


El amo de las letras


Ver Perfil WWW Email Mensaje Personal (Desconectado)
Shifting
« en: 08 de Septiembre de 2006, 01:05:26 »
Responder con cita

Hola compañero, quería hacerte una pequeña pregunta, pero con gran respuesta... ¿Puedes explicarme el Shifting más detalladamente? Si puedes responderme, te estaría eternamente agradecido. Gracias de antemano.  Grin
« Última modificación: Ayer a las 05:53:44 por HeXPLuS » Reportar al moderador   En línea

Kitsune Sniper
Miembro nuevo
*
Desconectado Desconectado

Mensajes: 32

Miembro nuevo


Ver Perfil Mensaje Personal (Desconectado)
Re: Para Dark-N
« Respuesta #1 en: 08 de Septiembre de 2006, 05:35:20 »
Responder con cita

Um...

Creo que ese no era el botón de "Mensajes Privados". 2funny
Reportar al moderador   En línea
HeXPLuS
Moderador
Romhacker Plata
***
Desconectado Desconectado

Mensajes: 282


hexplus_@hotmail.com hexplus
Ver Perfil WWW Email Mensaje Personal (Desconectado)
Re: Para Dark-N
« Respuesta #2 en: 08 de Septiembre de 2006, 07:51:24 »
Responder con cita

Cierto The Emu, para mensajes directos o personales utiliza mejor los mensajes privados.

¡Saludos!
Reportar al moderador   En línea

Nada es imposible, es cuestión de aprender...
The Emu
Miembro nuevo
*
Desconectado Desconectado

Mensajes: 12


El amo de las letras


Ver Perfil WWW Email Mensaje Personal (Desconectado)
Re: Para Dark-N
« Respuesta #3 en: 11 de Septiembre de 2006, 05:55:44 »
Responder con cita

OK, lo siento. Gracias compañeros.
Reportar al moderador   En línea

Dark-N
Miembro Activo
**
Conectado Conectado

Mensajes: 82


naldo_go@hotmail.com
Ver Perfil WWW Email Mensaje Personal (Conectado)
Re: Para Dark-N
« Respuesta #4 en: Ayer a las 12:39:56 »
Responder con cita Modificar mensaje Eliminar mensaje

Como explica LordTech en el documento Leetasm.log, shifting significa hacer un "corrimiento" de dígitos en una cierta dirección y agregar un 0 en el espacio vacío.
Por ejemplo el numero 125 (en base 10 o decimal que es lo mismo) si le hacemos un shift a la izquierda se corren todos los dígitos a la izquierda y queda 125_ y en el espacio vacío se agrega un 0 quedando 1250, esto se resume en algo así:

_125 -> 125_ -> 1250

Así que luego de haber corrido los dígitos a la izquierda la operación matemática que se hizo es un Multiplicación:
125 * 10 = 1250
Se usa la multiplicación no para mover todo a la izquierda, sino que hacemos shift para multiplicar, la razón es que el dígito de la izquierda tiene un valor 10x veces mayor que los otros, así en 125:
el 5 vale 5 unos 
el 2 vale 2 diez   
el 1 vale 1 cien   

entonces al hacer shifting estamos "moviendo" los valores de cada dígito a 10x de lo que valen, y claro, por ahora es con base 10.

Ahora la idea es base 2, así que en vez de multiplicar por 10, se multiplica por 2.


Para hacer shifting con base 2, se pueden hacer 2 cosas; pasar el dígito a binario o usar "ecuaciones".

Con método binario, el caso anterior de 125 queda:
 1111101 bin = 125 dec

hacemos shifting izquierdo para multiplicar
11111010 bin = 250 dec ->todo se desplaza a la izquierda para MULTIPLICAR

 1111101 bin = 125 dec
hacemos shifting derecho para hacer una división ENTERA
 0111110 bin  = 62 dec (125/2=62.5)

Otra forma de entender shifting, es como explica LordTech en el Log, y es con Álgebra, por ejemplo si tenemos el número 12 y necesitamos llegar a este numero por medio de shifting con base 2, entonces se debe multiplicar el 2 hasta llegar el número.
Uno puede hacer entonces 2x2=4, 2x2x2=8, 2x2x2x2=16,... pero esto no nos da 12.
Sabemos que 12 = 8 + 4
Agreguemos Álgebra al asunto, usamos la variable X, lo que nos da:

12*X = 8*X +4*X
si tomamos X, la multiplicamos 8 y luego le agregamos 4 multiplicado por X nos da 12 multiplicado por X.
12*2 =  8*2 + 4*2

La idea es dejar el número como una representación de otros números que sean divisibles por 2.

El 21:
21 = 16 + 4 + 1
21*X = (2^4)*X + (2^2)*X + (2^0)*X  -> X es 2 si el Shifting es en base 2
21*2 = (2^4)*2 + (2^2)*2 + (2^0)*2
42 =    2^5    +   2^3   +  2
42 =    32     +    8    +  2

Esta forma con álgebra, personalmente la encuentro un poco compleja explicar simplemente que los bits se corren.

También tienes que la SNES provee las instrucciones:
ASL = Arithmetic Shift Left   -> multiplica el acumulador por 2
LSR = Logical Shift Right     -> divide el acumulador por 2

En resumen, el shifting se usa para distintas cosas, por ejemplo para darle SOMBRA a una TILE
Por ejemplo si tengo una Tile A de 2bpp, de cierto juego que se ve en la imagen.


Los bytes de esa tile son:

$00,$00,$00,$00,$00,$00,$7C,$78,$FE,$CC,$EE,$CC,$EE,$CC,$FE,$FC,$FE,$CC,$EE,$CC,$EE,$CC,$CC,$22,$00,$00,$00,$00,$00,$00,$00,$00


Si la dividimos en planos:

Plano 1            
00000000   00
00000000   00
00000000   00
01111100   7C   -> sombra de A
11111110   FE
11101110   EE
11101110   EE
11111110   FE

Plano 2
00000000   00
00000000   00
00000000   00
01111000   78    -> tile A
11001100   CC
11001100   CC
11001100   CC
11111100   FC


La SNES pinta primero la tile A, luego usando un Shifting a la DERECHA de cada byte de la tile, forma la SOMBRA


01111000   = 78  -> de Plano 2
00111100         => Shifting a la DERECHA, so corren bytes a la derecha
-------------   OR   => se hace un OR

01111100    = 7C   ->se consigue byte de Plano 1

Haciendo Shifting a cada fila de la tile (cada fila es un byte) se consigue la fila Sombra de ese byte.
Reportar al moderador   200.54.71.227

Magno
Romhacker Bronce
***
Desconectado Desconectado

Mensajes: 211


Ver Perfil Email Mensaje Personal (Desconectado)
Re: Para Dark-N
« Respuesta #5 en: Ayer a las 04:59:22 »
Responder con cita

Eso de la sombra se usa muchísimo en los juegos, de modo que en ROM se almacena la fuente en 1BPP y cuando se construye el diálogo en la rutina VWF (aunque no necesariamente ha de ser VWF) se hace la XOR entre el primer plano y ese primer plano desplazado a derechas 1 bit (píxel). Así por ejemplo se construye la fuente del remake del Secret of Mana y cuando cuelgue el algoritmo en breve, podréis ver una aplicación del desplazamiento de bits.

Por cierto, The Emu..... no pensé que eso que querías que te explicara fuese esto que acaba de explicarte Dark-N... Pensé que era algo más complejo.....
Reportar al moderador   En línea
Dark-N
Miembro Activo
**
Conectado Conectado

Mensajes: 82


naldo_go@hotmail.com
Ver Perfil WWW Email Mensaje Personal (Conectado)
Re: Shifting
« Respuesta #6 en: Ayer a las 05:59:44 »
Responder con cita Modificar mensaje Eliminar mensaje

más complejo  Huh
¿Tan básica fue mi explicación?  Undecided
Si me falto algo Magno, por favor explícamelo, aparte de trabajar con sombras, no se como utilizar Shifting.
Reportar al moderador   200.54.71.227

Magno
Romhacker Bronce
***
Desconectado Desconectado

Mensajes: 211


Ver Perfil Email Mensaje Personal (Desconectado)
Re: Shifting
« Respuesta #7 en: Hoy a las 05:44:56 »
Responder con cita

No lo decía por tu explicación, sino por su pregunta. The Emu me escribió un email en el que decía que estaba esperando una explicación del shifting y, como no especificaba nada más, pensaba que quería saber algo más complejo sobre el desplazamiento binario.

Y bueno, tu explicación sí es sencilla, que es el mejor elogio que se puede hacer a alguien que explica algo: ponerlo claro y sencillo. Y es que además el desplazamiento binario no tiene mucha más historia, es facilísimo de entender.

En cuanto a si te ha faltado algo, no, está bien explicado. Lo que no tienes es que buscarle más pies al gato: "saber utilizar" el desplazamiento es como decirle a alguien si "sabe utilizar" la división o la suma. Es simplemente una herramienta y la utilidad se la ha de buscar uno mismo según la aplicación: para hacer multiplicaciones rapidísimamente (el circuito multiplicador de la SNES es lento, 4 ciclos mínimo de espera), para comprobar si un número es par o impar (y saber así si accedes al byte alto o bajo de una dirección de memoria), para hacer máscaras binarias, comprobar el signo de un valor (haciendo un ROL y testeando el Carry) y muchas cosas más que según la aplicación uno ha de intentar aprovechar.
Reportar al moderador   En línea
Páginas: [1] Ir Arriba Respuesta Notificar respuestas Marcar como no leídos Enviar tema Imprimir 
« anterior próximo »
Ir a:  

Powered by MySQL Powered by PHP Fortaleza Romhack | Powered by SMF 1.0.7.
© 2001-2005, Lewis Media. Todos los Derechos Reservados.
XHTML 1.0 válido! CSS válido!