Karoshi MSX Community
05 de Julio de 2021, 07:57:26 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2 3 ... 5
  Imprimir  
Autor Tema: Cóctel de dudas vol.1  (Leído 28576 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« : 21 de Marzo de 2007, 11:18:51 am »

Buenaaas, es que me he levantado porculero y me he dicho: vamos a abrir un topic de esos que molesten, jejeje  Grin

Veamos, ¿hay alguna alternativa a ldir (usando sólo la BIOS) o es ésta la opción más rápida a la hora de transferir bloques? Lo digo por si hubiere algún buclecillo más optimizado, aunque me da en la nariz que por la simpleza de la instrucción me voy a tener que conformar con eso.

Comento lo de la BIOS porque yo de interrupciones ni idea (sólo coitus interruptus me suena), y no sé si al utilizar outs perdería la música del Caruso.

Y ya de paso, intentaré ver la rutina de instalación del replayer del Caruso para ver si me entero de cómo funciona una interrupción, y de paso, ver si puedo hacer lo siguiente: utilizo 8 sprites y quiero conectar y desconectar alternativamente los 4 primeros y los 4 segundos para evitar la regla del 5º sprite. Supongo que debería mandarlos por tandas a la posición vertical 209 para que desaparezcan de pantalla y restaurarlos en la siguiente interrupción. ¿Es ese el enfoque correcto?

Bueno, thanx a pares y todo eso  Cheesy
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #1 : 21 de Marzo de 2007, 12:25:58 pm »

Buenaaas, es que me he levantado porculero y me he dicho: vamos a abrir un topic de esos que molesten, jejeje  Grin

Tu nunca molestas, Juanma Wink


Veamos, ¿hay alguna alternativa a ldir (usando sólo la BIOS) o es ésta la opción más rápida a la hora de transferir bloques? Lo digo por si hubiere algún buclecillo más optimizado, aunque me da en la nariz que por la simpleza de la instrucción me voy a tener que conformar con eso.

Si, hay opciones más rápidas de transferir bloques de datos a VRAM. Échale un ojimetro a este thread, donde verás varias opciones acerca de este tema: http://karoshi.msxgamesbox.com/index.php?topic=305.0


Comento lo de la BIOS porque yo de interrupciones ni idea (sólo coitus interruptus me suena), y no sé si al utilizar outs perdería la música del Caruso.

No te preocupes. Cuando salta la interrupción, se detiene todo, y se guardan hasta los registros: solo tienes que indicar cual es la rutina de interrupción y sin más, ésta se lanzará al comienzo de cada "frame". Lo que si que tienes que controlar es CUANDO mandas esos OUTs (preferiblemente inmediatamente después de la interrupción).


Y ya de paso, intentaré ver la rutina de instalación del replayer del Caruso para ver si me entero de cómo funciona una interrupción, y de paso, ver si puedo hacer lo siguiente: utilizo 8 sprites y quiero conectar y desconectar alternativamente los 4 primeros y los 4 segundos para evitar la regla del 5º sprite. Supongo que debería mandarlos por tandas a la posición vertical 209 para que desaparezcan de pantalla y restaurarlos en la siguiente interrupción. ¿Es ese el enfoque correcto?

Te vuelvo a remitir a otro thread interesante sobre la regla del quinto sprite y como acometerlo desde distintos enfoques: http://karoshi.msxgamesbox.com/index.php?topic=427.0

Como se nota que hemos hecho novillos durante mucho tiempo, eh?... tsk, tsk, si es que...  Wink. Quiero empezar a ver llover producciones de crappy pero ya! Cheesy... y de paxanga también!

(pero, ¿por que me pegas, si sabes que me gusta?) kun >  Spank < viejo_archivero (jo, es que hacá tiempo ya que no lo hacía...)
« Última modificación: 21 de Marzo de 2007, 12:30:31 pm por Viejo_archivero » 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.]
SapphiRe
Visitante
« Respuesta #2 : 21 de Marzo de 2007, 12:39:16 pm »

Buenaaas, es que me he levantado porculero y me he dicho: vamos a abrir un topic de esos que molesten, jejeje  Grin

Veamos... me pongo la armadura y a combatir el topic molesto Tongue

Citar
Veamos, ¿hay alguna alternativa a ldir (usando sólo la BIOS) o es ésta la opción más rápida a la hora de transferir bloques? Lo digo por si hubiere algún buclecillo más optimizado, aunque me da en la nariz que por la simpleza de la instrucción me voy a tener que conformar con eso.

¿Transferir bloques a donde? Si hablas de RAM a RAM, ldir es la forma más sencilla (que no la más rápida) de transferir bloques. Si quieres mejorar la velocidad tendrías que desenrollar el bucle del ldir poniendo unos cuantos ldi a saco y encerrándolos dentro de un bucle más grande.

Citar
Comento lo de la BIOS porque yo de interrupciones ni idea (sólo coitus interruptus me suena), y no sé si al utilizar outs perdería la música del Caruso.

Por este párrafo deduzco que quieres transferir bloques de RAM a VRAM. Para eso la BIOS es MUY MUY LENTA... Pregúntale al viejo_archivero si no Wink Ya hemos hablado en este foro largo y tendido de los ciclos de espera mínimos entre transferencia y transferencia a VRAM...

De todas formas, te aconsejo empezar por usar la BIOS y luego, si tienes necesidad de más velocidad, puedes mirar la forma en la que se transfiere realmente a VRAM (y en último caso... puedes hablar conmigo Grin)

Citar
ver si puedo hacer lo siguiente: utilizo 8 sprites y quiero conectar y desconectar alternativamente los 4 primeros y los 4 segundos para evitar la regla del 5º sprite. Supongo que debería mandarlos por tandas a la posición vertical 209 para que desaparezcan de pantalla y restaurarlos en la siguiente interrupción. ¿Es ese el enfoque correcto?

Yo haría otra cosa. Si sólo tienes esos 8 sprites y quieres que en un frame se vean 4 y en otro otros 4, lo más rápido es tener dos tablas de atributos de sprites en VRAM (caben sin problemas). Entonces trabajarías como si tuvieras 64 planos de sprites y en cada frame cambiarías la tabla visible, por lo que sólo estarías viendo 32 sprites al mismo tiempo. Prueba...

Saludos
--
Sph.
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #3 : 21 de Marzo de 2007, 01:41:41 pm »

Como se nota que hemos hecho novillos durante mucho tiempo, eh?... tsk, tsk, si es que...  Wink. Quiero empezar a ver llover producciones de crappy pero ya! Cheesy... y de paxanga también!

(pero, ¿por que me pegas, si sabes que me gusta?) kun >  Spank < viejo_archivero (jo, es que hacá tiempo ya que no lo hacía...)

Eso eso, producciones de Crappy!!! Cheesy Dale dale fuerte!! Ah no que soy yo!
 Cry  Que malo eres, no me des en toda la cabeza, que bastate tonta la tengo ultimamente...  Paxanga hace lo que puede. Steven va currando, pero yo estoy bastante fuera del planeta hace un tiempo Tongue No solo para el MSX, imaginaos, si ni siquiera he visto los ultimos 6 capitulos de Humor Amarillo!!!  Embarrassed
Na, necesitaba un cambio, todo eran listados interminables de instrucciones ASM...cada dia. Asi que me he tomado un señor respiro. Pero sigo en el ajo poco a poco Wink No sus vais a librar...

En cuanto a Darth, a saber pa que querra algo mas rapido que el LDIR... Wink Miedo me da. Y en el tema sprites, hubo un threat muy interesante sobre rotacion spritera Smiley Merece la pena echarle un ojo.
En línea

--

Cindy Lauper She Bops!
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #4 : 21 de Marzo de 2007, 02:48:25 pm »

¡Mil gracias a todos!  Cheesy

Antes de que se me olvide, el sr. MSXKun dale que dale con el  Spank a todo kiske pero el tío tiene cuentas pendientes con sus juegos, jejeje...  Grin

Pues sí, pensaba en transferencias RAM->RAM, y es que necesito copiar al menos 2 tercios de pantalla de una forma rápida, y luego si hay por ahí otro topic donde transferir a VRAM pues ya mato dos pájaros de un tiro  Cheesy

Me quedo más tranquilo con lo de la música. O sea, sólo tendría que poner un halt antes de la rutina de transferencia y ya está, vamos, como lo que hacía con call LDIRVM  Smiley

Miraré lo de las interrupciones y gracias por las ideas. Voy a plantearme lo de las dos tablas. Gracias de nuevo  Kiss
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #5 : 21 de Marzo de 2007, 05:34:46 pm »

Es que acabo de hacer una rutina de scroll de texto píxel a píxel como el snippet de Edu, introduciéndole "desde la derecha de la pantalla" caracter a caracter y luego rotando todo. He pensado ampliarlo para hacer un scroll completo de pantalla, pero creo que eso en un juego no sería muy jugable que digamos  Undecided

A lo que voy, como estoy con cosas spectrumeras, y eso de los sprites software es coser and sing  Grin ahora necesito saber cómo los joíos por culo de Dinamic, etc. volcaban al menos los dos tercios de pantalla (en un buffer donde la almaceno) a la VRAM. Sé que había parpadeo y era lento, pero igual hay otra forma como sólo transferir las partes de pantalla que cambian o algo así.

Necesito velocidad de transferencia RAM->RAM además porque estoy liado con un filmation en plan Head over heels, y tengo funcionando el muñeco y escenario, ocultaciones y demases, pero necesitaré buena velocidad para transferir toda la pantalla, aunque ahora mismo estoy con pruebas poniendo un montón de halts para que vaya despacio adrede para así poder visualizar mejor fallitos que se pasarían de otra manera. Quiero decir que no he probado "a saco" cuál sería la velocidad máxima de la BIOS.

Tengo pendiente el tema de las colisiones. Supongo que habría que hacerlas píxel a píxel, aunque hice una rutina y rien de rien, eso no funcionaba  Undecided Y además supone otro buffer de 6kbs en memoria sólo para máscaras de detección de choque, lo que me parece un despilfarro total y supongo que habría otra manera de hacerlo. Para otro tipo de juego podría usar detección de colisiones por caracteres como siempre, en un buffer que contuviese una pantalla paralela de 768bytes sólo de caracteres, pero eso ya no me resulta complicado.

Eso sí, preparaos para algún que otro juego "a la antigua usanza" Sinclair, jejejeje (no me puteéis mucho, plís)  Grin Lo importante es el reto que me supone entender mejor el sc2 y poder hacer las cosas con las que babeaba desde chico, jeje  Wink
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jjfranco
Visitante
« Respuesta #6 : 22 de Marzo de 2007, 09:55:07 pm »

[
Comento lo de la BIOS porque yo de interrupciones ni idea (sólo coitus interruptus me suena), y no sé si al utilizar outs perdería la música del Caruso.

No te preocupes. Cuando salta la interrupción, se detiene todo, y se guardan hasta los registros: solo tienes que indicar cual es la rutina de interrupción y sin más, ésta se lanzará al comienzo de cada "frame". Lo que si que tienes que controlar es CUANDO mandas esos OUTs (preferiblemente inmediatamente después de la interrupción).

Si no es mucho pedir, me gustaría saber como haces esto.
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #7 : 23 de Marzo de 2007, 03:47:12 pm »

No tengo mucha idea, Jos'b, pero creo que se refiere a instalar la interrupción, parcheando el gancho en la ram donde se aloja la dirección de la misma.

Es lo que más o menos deduzco de este trozo de código del Caruso, donde se instala el reproductor (con permiso de Mr.Robsy):

INSTALL_INTERRUPTION:
; Install interrupt handler
;----------------------------------------------
; Disable interrupts
di
; Interrupt BIOS entry point
ld hl,0FD9Fh
; Address of the new interruption routine
ld bc,INTERRUPTION_HANDLER
; Instruction "CALL"
ld [hl],0C3h
; Address stored
inc hl
ld [hl],c
inc hl
ld [hl],b
; Enable interrupts
ei
; Done
ret
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #8 : 23 de Marzo de 2007, 03:54:55 pm »

Una cosa rápida, que necesito para mis planificaciones:

¿Cuál es la direcciónl tope en la página 3 (en decimal, plís) que puedo usar en ensamblador?
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #9 : 23 de Marzo de 2007, 05:47:33 pm »

¡65535! Cheesy

Bueno, si no te quieres comer la cabeza no uses mucho más allá de la 62208 (no se como te aclaras con el decimal Shocked)
En línea

Doom dee doom dee doom
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #10 : 23 de Marzo de 2007, 08:25:03 pm »

Hay una variable RAM que te lo dice HIMEM
Si no usas DISKROM -> #0xfc4a
Y si usas DISKROM -> #0xf349
En línea

MSX4EVER2GETHER
www.nerlaska.com
jjfranco
Visitante
« Respuesta #11 : 23 de Marzo de 2007, 08:55:30 pm »

No tengo mucha idea, Jos'b, pero creo que se refiere a instalar la interrupción, parcheando el gancho en la ram donde se aloja la dirección de la misma.

Es lo que más o menos deduzco de este trozo de código del Caruso, donde se instala el reproductor (con permiso de Mr.Robsy):

INSTALL_INTERRUPTION:
; Install interrupt handler
;----------------------------------------------
; Disable interrupts
di
; Interrupt BIOS entry point
ld hl,0FD9Fh
; Address of the new interruption routine
ld bc,INTERRUPTION_HANDLER
; Instruction "CALL"
ld [hl],0C3h
; Address stored
inc hl
ld [hl],c
inc hl
ld [hl],b
; Enable interrupts
ei
; Done
ret

A la saca.
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #12 : 23 de Marzo de 2007, 10:11:05 pm »

Gracias, lo que yo no entiendo tampoco es cómo podéis entenderos en hexadecimal  Wink

Supongo que no estaré usando la diskrom  Huh pero me ha sorprendido saber que se podía escribir tan alto (64586). Creía que a partir de la 60000 ya era tierra peligrosa... mejor que mejor, más RAM para la saca  Smiley
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #13 : 23 de Marzo de 2007, 10:59:36 pm »

¡Ojo!, que la dirección que Nerlaska ha puesto es la de la variable que contiene la dirección más alta usable por el programador, no la dirección en si misma. Si somos estrictos, esta dirección en un MSX sin periféricos conectados es $F380 (62336), que es lo que normalmente contiene HIMEM. Si el equipo tiene hardware extra y este es inicializado, esta dirección decrece y se pueden perder un buen puñado de Kbs.
En el caso de las ROMs, yo no me complico la vida e incluso respeto la pila que suele estar inicializada un poco más alla de $F300, total, no va de unos bytes... Smiley

Échale un ojo a este hilo del MRC en el que se hablaba también de este tema:

Memory/System variables (page3)
En línea

Doom dee doom dee doom
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #14 : 24 de Marzo de 2007, 07:29:24 am »

Se me olvidó meter los paréntesis Smiley Gracias JL Wink
En línea

MSX4EVER2GETHER
www.nerlaska.com
Páginas: [1] 2 3 ... 5
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!