Parte g (la simple...) del mouse

Parte g (la simple...) del mouse

de Martin Nicolas Moresco Pintos -
Número de respuestas: 2

Buenas,

Estamos teniendo problemas en la parte g del mouse, pusimos para ver en los leds lo apuntado por IX, que serían las banderas entregadas por el Mouse, pero ya desde ahí arrancamos con problemas. Nos muestra cuando desplazamos y tmb cuando clickeamos (como si toda la info mandada por el mouse pasara por IX).


Inicializamos todo correctamente, las subrutinas por separado nos funcionan bien. Pareciera que la informacion desplegada en los leds está defasada 2 bits. Nos muestra por ejemplo los botones derecho, medio e izq en los leds 2,3 y 4. Pero esto sólo despues que la cuenta del cronometro finaliza.


Estamos bastante perdidos, a alguien le pasa algo así?


    LD (ContadorDeBytes),A
    CP 1
    JP NZ, NoEs1
    CP 3
    PUSH AF
    LD A,E
        LD A,(IX)
        OUT (LEDS),A
        CPL
        AND E
        LD (IX+5),A
        LD A,E       
        LD (IX),A
       
    POP AF
    JR Fin
    NoEs1:


PD: Un aspecto que notamos y quiza a otros grupos les esté frenando, es que el call mouse_init va despues de EI (por lo menos fue la unica forma que conseguimos que nos funcione)


Desde ya muchas gracias (aunque creo que está muy entreverada la preguntita)

En respuesta a Martin Nicolas Moresco Pintos

Re: Parte g (la simple...) del mouse

de Leonardo Etcheverry -
OJO!

La llamada a mouse_init debe hacerse **antes** de la habilitación de interrupciones EI.

El orden de la secuencia debe ser el que se detalla en la plantilla, más específicamente:

- mouse_init
- borrar interrupciones pendientes del controlador asociado a PS2CLK
- EI

Las razón por la cual EI tiene que venir después de mouse_init, es que mouse_init va a generar flancos en PS2CLK como parte de la inicialización del mouse. A ustedes no les interesa ser interrumpidos por esos flancos de reloj, así que las interrupciones no deberían estar habilitadas aún.

Por otra parte, estos flancos en PS2CLK generados por mouse_init, pueden dejar una solicitud de interrupción pendiente en el controlador de interrupciónes. Por eso es **imprescindible** borrar las solicitudes pendientes ANTES de habilitar interrupciones con EI. (Si no lo hacen van a quedar un bit desfasados desde el comienzo)