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