Darth_Fistro
|
|
« Respuesta #30 : 13 de Abril de 2007, 08:32:23 pm » |
|
¡Gracias a todos! Ya veo que estaba equivocado, resulta algo muy útil ¿Hay alguna bandera para ver si se producen colisiones entre sprites? Y respecto a lo de la tabla de 768 bytes, ¿es posible? Edu, menudo afortunado por ponerle las zarpas a un trasto así Por cierto, ejem, ejem... ¿qué tal un snippet con esa rutina de transferencia a VRAM? ejem, ejem... Claveliiiitos, claveliiiiitos (la tuna de la facultad de Derecho de Valladolid bajo la ventana del Sr.Robsy y Darth cortejándolo)
|
|
|
En línea
|
MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
|
|
|
Jon_Cortazar
|
|
« Respuesta #31 : 14 de Abril de 2007, 01:20:48 pm » |
|
Ya veo que estaba equivocado, resulta algo muy útil ¿Hay alguna bandera para ver si se producen colisiones entre sprites? Pozi. Quoteando desde el Portar MSX Tech Doch: Port 99 VDP Status Registers (Read Only)
MSX1 includes only one VDP Status Register (Register 0), for MSX2 VDP Status Registers 0-9 exist.
Status register 0 (default): Bit Name Expl. 0-4 5/9th Number for the 5th sprite (9th in screen 4-8) on a line 5 C 1 if overlapping sprites 6 5D 1 if more than 4 sprites on a horizontal line (8 in screen 4-8) 7 F V-Blank IRQ Flag (1=interrupt) (See also IE0 flag)
|
|
|
En línea
|
Jon Cortázar Abraido (aka El Viejo Archivero) RELEVO Videogames [Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.] [pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
|
|
|
Darth_Fistro
|
|
« Respuesta #32 : 14 de Abril de 2007, 02:31:15 pm » |
|
¡Gracias!
|
|
|
En línea
|
MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
|
|
|
Darth_Fistro
|
|
« Respuesta #33 : 17 de Abril de 2007, 10:22:05 pm » |
|
Preguntilla rápida: -¿es equivalente sra a sla? (solo que desplazando con carry a la derecha?
|
|
|
En línea
|
MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
|
|
|
Darth_Fistro
|
|
« Respuesta #34 : 17 de Abril de 2007, 10:24:19 pm » |
|
Otra rápida: las rutinillas de transferencia rápida a VRAM que he visto desactivan las interrupciones para hacer OTIR y demases, pero mi duda es: si la transferencia es grande y dura más de 1/50 de segundo, no se activa la interrupción correspondiente y te puedes quedar sin música o lo que sea, ¿verdad?
|
|
|
En línea
|
MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
|
|
|
Darth_Fistro
|
|
« Respuesta #35 : 17 de Abril de 2007, 10:26:39 pm » |
|
La última y me acuesto : ¿es más rápido jr nz/z que jp nz/z si la condición no se va a cumplir?
|
|
|
En línea
|
MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
|
|
|
Dioniso
Visitante
|
|
« Respuesta #36 : 17 de Abril de 2007, 11:21:29 pm » |
|
La última y me acuesto : ¿es más rápido jr nz/z que jp nz/z si la condición no se va a cumplir? Un JP NZ es más rápido.
|
|
|
En línea
|
|
|
|
Dioniso
Visitante
|
|
« Respuesta #37 : 17 de Abril de 2007, 11:23:39 pm » |
|
Otra rápida: las rutinillas de transferencia rápida a VRAM que he visto desactivan las interrupciones para hacer OTIR y demases, pero mi duda es: si la transferencia es grande y dura más de 1/50 de segundo, no se activa la interrupción correspondiente y te puedes quedar sin música o lo que sea, ¿verdad?
Bueno, casi te respondes tú mismo a tus propias preguntas ... si te pasas de un barrido de pantalla para hacer algo se va todo al carajo; música, movimiento suave, etc ... en caso de tener que actualizar el PSG y demás datos (como nuevas coordenadas y ordenadas en VRAM) a cada barrido.
|
|
|
En línea
|
|
|
|
SapphiRe
Visitante
|
|
« Respuesta #38 : 18 de Abril de 2007, 11:48:57 am » |
|
Otra rápida: las rutinillas de transferencia rápida a VRAM que he visto desactivan las interrupciones para hacer OTIR y demases, pero mi duda es: si la transferencia es grande y dura más de 1/50 de segundo, no se activa la interrupción correspondiente y te puedes quedar sin música o lo que sea, ¿verdad? No sólo. En MSX1 si te pasas del retrazado no puedes utilizar OTIR porque es una instrucción demasiado rápida para el pobre VDP. Si te pasas corres el riesgo (muy muy alto) de que los gráficos se corrompan. Saludos -- Sph.
|
|
|
En línea
|
|
|
|
jltursan
|
|
« Respuesta #39 : 18 de Abril de 2007, 03:39:16 pm » |
|
Y aun más, no hay porque desactivar las interrupciones cuando se ejecuta una transferencia a VRAM, sólo es estrictamente necesario cuando estás programando la dirección de escritura o lectura al VDP, a partir de ahí puedes mantenerlas activadas. El Z80 chequea la existencia de una interrupción tras ejecutar cada instrucción, el caso del OTIR es especial ya que no hace chequeo cada vez que se ejecuta un OUTI; asi que se trata de una operación atómica desde el punto de vista de las interrupciones. Si se produce alguna cuando se está ejecutando, saltará inmediatamente al acabar el OTIR. Esto unido a que las iteraciones máximas permitidas en un OTIR son 256, hacen que como mucho se produca un ligero retraso en la ejecución de la interrupción. El problema surge, como ya te ha comentado Sapphire, cuando todo está medido, encajado y sincronizado. Si por alguna razón se te ejecuta un OTIR gordo y te descuadra el tiempo usado en cada fotograma; pues nada si desbordas el tiempo total tendrás parones, saltos y demás impertinencias. En el peor de los casos puedes acabar incluso con cuelgue si en la interrupción no tienes mucho cuidadín con la pila y los registros que guardas en ella. Y por supuesto, en MSX1 hay que tener muy clarito donde y como se usa el OTIR, que por regla general no funciona nada bien...
|
|
|
En línea
|
Doom dee doom dee doom
|
|
|
jltursan
|
|
« Respuesta #40 : 19 de Abril de 2007, 03:34:53 pm » |
|
Pues nada, como rectificar es de sabios.... El OTIR si que es interrumpible; así que bueno, habrá que llevar cuidadín de, si no se han desactivado las interrupciones durante su ejecución, que el código que ejecutemos en la interrupción no acceda al VDP porque en ese caso nos cargariamos el OTIR.
|
|
|
En línea
|
Doom dee doom dee doom
|
|
|
SapphiRe
Visitante
|
|
« Respuesta #41 : 19 de Abril de 2007, 03:43:34 pm » |
|
Pues nada, como rectificar es de sabios.... El OTIR si que es interrumpible; así que bueno, habrá que llevar cuidadín de, si no se han desactivado las interrupciones durante su ejecución, que el código que ejecutemos en la interrupción no acceda al VDP porque en ese caso nos cargariamos el OTIR. Eso me parecía a mí, que es interrumpible al igual que el LDIR...
|
|
|
En línea
|
|
|
|
Darth_Fistro
|
|
« Respuesta #42 : 19 de Abril de 2007, 09:03:57 pm » |
|
Gracias por las lecciones magistrales, ahora sólo tengo que encontrar la forma de mandar al menos 1,5kb por frame
|
|
|
En línea
|
MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
|
|
|
SapphiRe
Visitante
|
|
« Respuesta #43 : 20 de Abril de 2007, 11:48:55 am » |
|
Gracias por las lecciones magistrales, ahora sólo tengo que encontrar la forma de mandar al menos 1,5kb por frame ¿Tanto?
|
|
|
En línea
|
|
|
|
pitpan
|
|
« Respuesta #44 : 20 de Abril de 2007, 01:00:27 pm » |
|
|
|
|
En línea
|
|
|
|
|