Tragamanzanas
Karoshi Fan
Mensajes: 71
|
|
« Respuesta #15 : 13 de Julio de 2009, 06:21:34 pm » |
|
Bueno, ahora le toca el turno a las interrupciones. He estado mirando por el foro, y aunque algo he visto, no me queda claro como poner mi código "dentro" de ella.
En este ejemplo que he encontrado, la dirección de la nueva interrupción estará en INTERRUPTION_HANDLER. Al inicio del programa le tendré que asignar a INTERRUPTION_HANDLER una dirección que sea la de inicio del código que quiero que se repita cada X veces que se ejecute mi "trozo" de programa, pero lo que no sé es como asignar esa dirección a mi subrutina (no sé si me he explicado bien)
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
|
|
|
|
SapphiRe_MSX
Visitante
|
|
« Respuesta #16 : 13 de Julio de 2009, 06:27:44 pm » |
|
En este ejemplo que he encontrado, la dirección de la nueva interrupción estará en INTERRUPTION_HANDLER. Al inicio del programa le tendré que asignar a INTERRUPTION_HANDLER una dirección que sea la de inicio del código que quiero que se repita cada X veces que se ejecute mi "trozo" de programa, pero lo que no sé es como asignar esa dirección a mi subrutina (no sé si me he explicado bien) Simplemente poniendo esa etiqueta a tu rutina. ; Instruction "CALL" ld [hl],0C3h Eso es un JP, ya que CALL serÃa 0CDh. Está bien asÃ, aunque yo lo harÃa: INSTALL_INTERRUPTION: di ld hl,INTERRUPTION_HANDLER ld a,$C3 ld [$FD9F],a ld [$FDA0],hl ei ret
que es más rápido y compacto.
|
|
|
En línea
|
|
|
|
Tragamanzanas
Karoshi Fan
Mensajes: 71
|
|
« Respuesta #17 : 13 de Julio de 2009, 08:43:46 pm » |
|
Gracias SapphiRe, ahora ya tengo el CONTROL de la máquina.
Supongo que esta rutina tiene que ser lo mas corta posible, para no interferir en la gestión del sistema, pero el tamaño como lo controlo, ¿a ojo?
|
|
|
En línea
|
|
|
|
Tragamanzanas
Karoshi Fan
Mensajes: 71
|
|
« Respuesta #18 : 18 de Julio de 2009, 09:13:22 pm » |
|
Vuelvo al ataque. La verdad es que con las interrupciones he conseguido un mejor control de los eventos que se producen, pero cambiando de tema, ahora estoy con como detectar la colisión de sprites(lo que he visto es en Basic). Lo que quiero hacer es comprobar si X1-X2 es menor de 16 (sprites 16x16), luego Y1-Y2 y lo mismo sumandole 16 para tener la xy opuesta. LD A,[X1] ;X del sprite1 LD B,A LD A,[X2] ;X del sprite2 SUB B ; no tengo claro si poniendo CP 16 serÃa lo mismo, siempre que solucione la pregunta de abajo. Ahora necesito el valor absoluto de A para saber si es 16 (las intrucciones aritmeticas no las termino de pillar) Seguro que hay otra forma de hacerlo que me interesa conocer, pero aun asà ... ¿como consigo sacar el valor absoluto de A?.
|
|
|
En línea
|
|
|
|
Jon_Cortazar
|
|
« Respuesta #19 : 19 de Julio de 2009, 08:17:02 am » |
|
Te digo como lo harÃa yo, pero no se si será la opción más óptima. Veamos, tras restar ámbas coordenadas a comprobar, tu rango de datos de si hay colisión o no va desde 15 a -16 (que en realidad es 240). Es muy fácil: si a esa resta le sumas 16, si el resultado va de 0 a 31 (o sea, IF A<32) es que tienes colisión, ¿no?. Pues yo harÃa lo siguiente (pseudo código al canto):
A=X1-X2+16 IF A>31 then GOTO NO_HAY_COLISION
A=Y1-Y2+16 IF A>31 then GOTO NO_HAY_COLISION
; rem SI LLEGO AQUI ES QUE ; rem HAY COLISION EN X Y EN Y HAGO LO QUE SEA ret
NO_HAY_COLISION: HAGO LO QUE SEA ret
Ahora la buena es hacerse un buen loop que vaya apuntando a una lista con todas las coordenadas a comprobar, para no andar repitiendo código, pero bueno, que yo lo harÃa asÃ. Espero que te sirva de algo!
|
|
« Última modificación: 19 de Julio de 2009, 08:30:16 am 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.]
|
|
|
Tragamanzanas
Karoshi Fan
Mensajes: 71
|
|
« Respuesta #20 : 19 de Julio de 2009, 11:46:22 am » |
|
"IF A>31" yo lo que hago es CP 31 y actuar segun el resultado, pero si las coordenadas se incrementan/decrementan de una forma no constante, no me vale la comparación, ¿como se calcula si es mayor/menor un número?
Y no sé si le ha pasado a alguien mas, pero cuando programo (utilizo para ensamblar el asMSX) voy viendo lo que hago con openmsx, pero ayer intenté verlo con el nlmsx y un contador que tiene que aparecer en la tercera lÃnea de la Vram e ir moviendose hacia la izquierda, aparecia unas 15 lÃneas mas abajo. Ademas el joystick no funciona en openmsx pero sà en nlmsx. Lo repetà con los dos pero con el mismo resultado.
|
|
|
En línea
|
|
|
|
Dioniso
Visitante
|
|
« Respuesta #21 : 19 de Julio de 2009, 12:48:51 pm » |
|
"IF A>31" yo lo que hago es CP 31 y actuar segun el resultado, pero si las coordenadas se incrementan/decrementan de una forma no constante, no me vale la comparación, ¿como se calcula si es mayor/menor un número?
Si se activa el CARRY, menor; si no se activa, mayor o igual. CP 31 JR C,ES_MENOR JR NC,ES_IGUAL_O_MAYOR Aunque este último salto serÃa absurdo hacerlo, bastarÃa con poner la rutina ES_IGUAL_O_MAYOR, ya que si no salta a ES_MENOR, la única posibilida es IGUAL_O_MAYOR. No sé si he respondido a tu pregunta.
|
|
|
En línea
|
|
|
|
Tragamanzanas
Karoshi Fan
Mensajes: 71
|
|
« Respuesta #22 : 19 de Julio de 2009, 09:53:35 pm » |
|
Gracias Dioniso, eso era lo que necesitaba saber. Mañana lo pruebo.
|
|
|
En línea
|
|
|
|
Tragamanzanas
Karoshi Fan
Mensajes: 71
|
|
« Respuesta #23 : 24 de Julio de 2009, 03:36:54 pm » |
|
Tengo una pregunta/petición para Viejo_archivero. Mirando por el foro he visto el tema "Los Archivos del Viejo Archivero" en el que sacabas a la luz los proyectos en desarrollo y hay una frase que me ha ilusionado : "o puede que le sirva a alguien para observar trucos de diseño que pueda aplicar en sus producciones... el caso es que, independientemente del tipo de utilidad que le podáis dar, lo cierto es que en mi ordenador poco ayudan a nadie, asà que aquà los tenéis: ¡los Archivos del Viejo Archivero!" Mi petición es clara, podrÃa obtener alguno de esos listados ya que he de reconocer que los pocos que he conseguido me han ayudado muchisimo para asimilar ciertas estructuras de programación.
|
|
|
En línea
|
|
|
|
Jon_Cortazar
|
|
« Respuesta #24 : 24 de Julio de 2009, 04:47:46 pm » |
|
El caso es que esos diseños no pasan de eso, de ser diseños: no hay programación y por lo tanto no hay listados, son solo diseños gráficos previos a la programación, para ver como enfocar un proyecto. Si quieres listados de juegos completos, echa un ojo al foro de los juegos open source, [http://msxgamesbox.com/karoshi/index.php?board=13.0]aquÃ
|
|
|
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.]
|
|
|
Tragamanzanas
Karoshi Fan
Mensajes: 71
|
|
« Respuesta #25 : 25 de Julio de 2009, 07:27:07 pm » |
|
Lastima, ya que me vienen muy bien. El que me envió OKI09 del juego El Bola fue el primero que lo estudié de principio a fin y le estoy muy agradecido. Los del pong y buscaminas tambien los tengo, pero me gustarÃa poder ver listados de juegos con mas acción.
|
|
|
En línea
|
|
|
|
OKI09
|
|
« Respuesta #26 : 26 de Julio de 2009, 02:13:14 pm » |
|
El que me envió OKI09 del juego El Bola fue el primero que lo estudié de principio a fin y le estoy muy agradecido.
De nada, para lo que te pueda ayudar, ya sabes donde estoy.
|
|
|
En línea
|
La derrota no es una opción y no hay excusas. "Parasiempre"
|
|
|
|