HispaMSX

RE: Pregunta VDPera (Ramonijo!)

2000-01-30 22:16:42
Hola, mundo!

Hace años que tengo esta dura, digo, duda .....

¿Cómo puedo hacer en ASM para saber a qué frecuencia de
refresco está el VDP en ese momento?
Supongamos que quiero hacer un mini-programa que, si
estamos a 50Hz pase a 60Hz, pero que si estamos en 60Hz
lo que tiene que hacer es pasar a 50Hz.

Y sin usar la BIOS, claro está ^_-

    Una forma podría ser calcularlo mediante un bucle de CPU:

    DI
    LD    HL,0
    IN    A,($99)
Bucle:
    IN    A,($99)
    OR    A
    JP    P,Bucle
Bucle2:
    INC    HL
    IN    A,($99)
    OR    A
    JP    P,Bucle2

    Este programa suma el par HL entre dos interrupciones de cuadro.

    El resultado en modo PAL (50hz) es $07F8
    El resultado en modo NTSC (60hz) es $06AB

    Por lo tanto podríamos decir que si el resultado es mayor que $0751
estamos en modo PAL, sino en modo NTSC.

    Pero este sitema solo es valido para CPUs a 3.57Mz


    Otro sistema más eficaz sería leer el timming X del VDP de estado 2
y dependiendo de las líneas de timming X entre 2 interrupciones de vblank
sabríamos la frecuencia.

    En modo PAL son 313 líneas de timming X.
    En modo NTSC son 262 líneas de timming X.

    Aquí un ejemplo:


    DI
    LD    HL,0
    LD    BC,$2099
    LD    DE,$028F
    IN    A,($99)
Bucle:
    IN    A,($99)
    OR    A
    JP    P,Bucle
Bucle3:
    OUT   (C),D
    OUT   (C),E
Bucle1:
    IN    A,($99)
    AND   B
    JP    NZ,Bucle1
Bucle2:
    IN    A,($99)
    AND   B
    JP    Z,Bucle2

    INC    HL

    XOR    A
    OUT   (C),A
    OUT   (C),E

    IN    A,($99)
    OR    A
    JP    P,Bucle3

    Si HL es mayor de 287 estamos en modo PAL sino en NTSC.

    Espero que esto te sirva.

    Saludos!

    Juan Antonio Gómez








<Anterior en la conversación] Conversación actual [Siguiente en la conversación>