› Foros › Retro y descatalogado › Consolas clásicas
Señor Ventura escribió:Una de las cosas mas referidas a la hora de exhibir el uso de las instrucciones de multiplicación, es la rotación de sprites.
En snes la cpu carece de dichas instrucciones,
Señor Ventura escribió:...pero sin embargo el PPU1 dispone de un juego de instrucciones...
...no podemos usar la multiplicación para apoyo lógico (ya que es el sistema de vídeo quien se encarga, y en ese sentido no es programable,...
Señor Ventura escribió:La pregunta es... ¿que usos, apelando al ingenio, se le ha llegado a dar en un hardware a la capacidad de multiplicación?.
Eteream escribió:STOP, la cpu de la SNES si tiene la instrucción de multiplicación.
Eteream escribió:Señor Ventura escribió:...pero sin embargo el PPU1 dispone de un juego de instrucciones...
...no podemos usar la multiplicación para apoyo lógico (ya que es el sistema de vídeo quien se encarga, y en ese sentido no es programable,...
O una cosa o la otra, o es programable con instrucciones o no lo es.
Eteream escribió:Señor Ventura escribió:La pregunta es... ¿que usos, apelando al ingenio, se le ha llegado a dar en un hardware a la capacidad de multiplicación?.
Exactamente lo mismo que puedas hacer con un lápiz y un papel sólo que más rápido.
Eteream escribió:No te molestas a mirar las cosas antes de escribir. Míratelo mejor, anda!
Señor Ventura escribió:El PPU1 no puede usar instrucciones de multiplicación con carácter lógico, porque es un procesador dedicado a gráficos.
Tampoco pueden usarse esas instrucciones si se está haciendo uso de las rutinas gráficas del modo 7, pero si en todo momento mientras que no sea así.
Lo que tenemos es un chip de 16 bits y 21mhz con un set de instrucciones, entre ellos el de multiplicar, siendo este de 24 bits, y puede usarse para ser aplicado a los gráficos, ya sean planos, o sprites.
Señor Ventura escribió:No se ni para que me molesto...
Eteream escribió:Pues eso la multiplicación y división se activa escribiendo a un registro. Cálmate.
Eteream escribió:Que el chip gráfico de SNES soportara instrucciones imperativas seria todo un descubrimiento. Hasta dónde yo se simplemente se escriben registros básicamente describiendo sprites y planos (o backgrounds).
Para hacer pseudo-rotaciones no es necesaria ninguna multiplicación, con multiplicaciones de 2 (shifts) puedes apañártelas. Saldríamos de dudas si tuviéramos el esquema del chip.
Señor Ventura escribió:Si quieres la descripción científica: la cpu de SNES es un máquina de Turing completa, un papel y un lápiz más un buen cerebro también lo son. En vulgar: que puedes hacer cualquier operación lógica y matemática si no hay límite de tiempo.
Señor Ventura escribió:Eteream escribió:Para hacer pseudo-rotaciones no es necesaria ninguna multiplicación, con multiplicaciones de 2 (shifts) puedes apañártelas. Saldríamos de dudas si tuviéramos el esquema del chip.
Concretamente a través de este opcode:
Bitwise instructions
AND - AND Accumulator with Memory
ASL - Left Shift Accumulator or Memory
BIT - Bit Test
EOR - Exclusive OR Accumulator with Memory
LSR - Shift Right Accumulator or Memory
ORA - OR Accumulator with Memory
ROL - Rotate Left Accumulator or Memory
ROR - Rotate Right Accumulator or Memory
TRB - Test and Reset Bit
TSB - Test and Set Bit
Eteream escribió:Señor Ventura escribió:Eteream escribió:Para hacer pseudo-rotaciones no es necesaria ninguna multiplicación, con multiplicaciones de 2 (shifts) puedes apañártelas. Saldríamos de dudas si tuviéramos el esquema del chip.
Concretamente a través de este opcode:
Bitwise instructions
AND - AND Accumulator with Memory
ASL - Left Shift Accumulator or Memory
BIT - Bit Test
EOR - Exclusive OR Accumulator with Memory
LSR - Shift Right Accumulator or Memory
ORA - OR Accumulator with Memory
ROL - Rotate Left Accumulator or Memory
ROR - Rotate Right Accumulator or Memory
TRB - Test and Reset Bit
TSB - Test and Set Bit
No, el chip gráfico no soporta opcodes/instrucciones, eso no pasaría hasta la Saturn/PSX; simplemente es un chip lógico con puertas AND, OR y todo el resto.
gadesx escribió:¿No suele la snes usar tiles de 16x16?
La verdad no se como se hace para "rotar" en calculos
Señor Ventura escribió:Confirmado, está hecho por software.
Sexy MotherFucker escribió:¿Esto es una opinión tuya, o lo has contrastado en algún lado? Si es lo segundo fuente por favor.
AxelStone escribió:O sea básicamente aplicaciones GPGPU (General Purpose GPU Apps). Esa feature en verdad está presente en muchos VDPs, que tiene capacidades bastante avanzadas si se compara con la CPU que les acompaña, pero necesitaban esa capacidad para su verdadera labor: mover gráficos. Si vas a usa la GPU para operaciones de uso general como multiplicaciones ya no te queda GPU para otros fines.
No es una pregunta fácil de responder, es difícil imaginar usos para algo tan acotado, ni siquera el software comercial supo darle uso.
AxelStone escribió:@Señor Ventura Si hablamos de multiplicaciones las operaciones con vectores es lo primero que me viene a la cabeza, pero algo debe faltar en la ecuación porque de ser así lo habrían aplicado en juegos como Another World o Flashback, en vez de dejar a la CPU haciendo los cálculos.
Señor Ventura escribió:quien se muere a la hora de rotar sprites, es con diferencia la megadrive, porque la snes va mas sobrada.
Señor Ventura escribió:La snes es capaz de mover 4 veces un plano en modo 7 a 60 fps, y a mucha mas resolución. Esa es la potencia que puedes usar para multiplicar.
theelf escribió:@Sexy MotherFucker efectivamente el hilo tiene q tener SNES en portada, porque otros CPU soportan multiplicacion en sus instrucciones, como el 68k, y parece estar enfocada en esta primera la duda
theelf escribió:@Señor Ventura
Me gustaria ver un ejemplo de rotar un sprite usando multiplicacion. Yo la verdad que con una matriz y suma convencional lo veo mas q suficiente
theelf escribió:Eso es algo que a la hora de programar, se decide, dependiendo la situacion del momento, en funcion a lo que se necesita, programar de una manera u otra
Señor Ventura escribió:EDIT: ¿Estoy en lo cierto si pienso que aunque sea un solo objeto, en realidad estás rotando 4 sprites "individualmente"?.
gynion escribió:Si fuera un objeto la rotación sería distinta, ¿no? porque un objeto único bastaría con que rotara sobre su propio eje, mientras que varios objetos tendrían que estar coordinados en un movimiento circular, como el corro de la patata vamos.
Aunque supongo que bastaría cambiando la posición del eje en el caso de ser varios objetos.
Señor Ventura escribió:gynion escribió:Si fuera un objeto la rotación sería distinta, ¿no? porque un objeto único bastaría con que rotara sobre su propio eje, mientras que varios objetos tendrían que estar coordinados en un movimiento circular, como el corro de la patata vamos.
Aunque supongo que bastaría cambiando la posición del eje en el caso de ser varios objetos.
Con estas cosas uno nunca lo puede tener del todo claro, vete tu a saber por dónde te sale de repente un sistema de estos cuando crees que lo tienes claro xD
gynion escribió:Sí, vete a saber. Además, como en esas consolas los sprites se juntaban en cachitos para formar objetos gordos puede incluso que tuvieran opciones especificas para agruparse y comportarse como un único objeto, ¿no?
En la actualidad, según comentaba por aquí un compañero hace poco, se ve que ya no desarrollan los juegos 2D así, sino que trabajan con objetos de una pieza, más cómodamente.
Señor Ventura escribió:Lo que ocurre es que lo que nos estaba marcando las pautas de la conversación es el poder de cálculo de los PPU's, así que la longitud de cada scanline es en lo que toca centrarse, porque la resolución horizontal es lo que afecta a la capacidad de cálculo y fill rate del sistema de vídeo (no la vertical).
Señor Ventura escribió:
Es decir, que en teoría eso significa que puedes coger varios sprites, y hacer que ocupen un solo slot en la tabla OAM... a menos que el juego utilice dos sets de sprites diferentes para el mismo dibujo del mono en cada uno de sus frames de animación, pero sería tan estúpido que eso queda descartado.
En definitiva, que poderse rotar varios sprites como si fueran un solo objeto es posible, porque parece ser que se puede convertir en un único objeto.
¿La pega?, que en el super aleste la configuración de sprites en el momento en que sale la bola, es de 16x16 y 32x32, así que no puedes hacer que esa bola ocupe un solo slot en la tabla OAM porque ocupa 64x64 pixels, y no es lo configurado.
¿La parte buena?, que puedes cambiar la configuración de sprites al vuelo de un frame a otro para que los objetos de 64x64 ocupen un solo slot cuando no se requieran sprites de 16x16, y así ahorrar rutinas de rotación si tienes que rotar muchos sprites para salvar ciclos de reloj... puedes hacerlo incluso con las resoluciones (aunque esto es otra cosa).
magno escribió:Creo que hay demasiadas suposiciones y afirmaciones incorrectas en el hilo que no ayudan demasiado a hacerse la idea correcta de cómo funciona la SNES....
Eteream escribió:Pues di cuales son concretamente. En tu explicación también hay al menos un error, pero dejarlo así a medias no ayuda en nada.
Señor Ventura escribió:En mi opinión puede quedar descartado que esté almacenado en rom en varias posiciones, por un detallito bastante simple.
Esa bola tiene una animación que se sucede independientemente de si gira, o no. Esto hace que para cuando empiece la rotación, el n° de frame mostrado en cada ángulo de giro puede ser mostrado de una manera diferente cada vez. No coincide ni por ritmo, ni por forma. Tendrían que haber un montón de posiciones diferentes solo para esto, y no compensa.
Señor Ventura escribió:¿Se puede alterar el color de algunas tiles dentro de un sprite?, aquí está la respuesta.
magno escribió:Eteream escribió:Pues di cuales son concretamente. En tu explicación también hay al menos un error, pero dejarlo así a medias no ayuda en nada.
Pues si no ayuda en nada, ¿por qué no dices dónde crees que está mi error? Lo que yo decía son varias afirmaciones que son inciertas y no tengo ni el tiempo ni soy quien para hacer aquí un listado.
magno escribió:No puedes cambiar la configuración de tamaño de sprites a 64x64 porque la SNES tiene un bug con ese modo. Aunque se pudiera, eso no se haría nunca porque te da poca capacidad de reutilizar sprites, además de por la detección de colisiónes, sobra mucho espacio "vacío" entre el perfil del personaje y el "bounding-box" que forma la rejilla 64x64.