On Sun, 30 Jan 2000 22:16:42 +0100
Juan Antonio Gómez <joanant(_en_)arrakis(_punto_)es> wrote:
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:
Cachis la mar... por que no se me ocurriría a mi decir eso... ahora
quien va a leer el VDPBlaster?
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.
mu bien pensao, si señior...
El resultado en modo PAL (50hz) es $07F8
El resultado en modo NTSC (60hz) es $06AB
claro que habría que probar que eso es así con todos los VDPs... el
v9938 y el 58 podrían dar pequeñas diferencias, aunque seguramente el
rango de error sería lo suficientemente pequeño como para encontrar unos
limites aceptables.
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
En el TR no creo que sea problema... con poner en modo z80 al TR ya
vale...
el que quizás sí daría problemas es el Z80H o el Z80B de 7 y 6 Mhz
respectivamente...
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.
ahora ya no se si debería dedicarme a jugar a las canicas... mu
pofesional ;)
En modo PAL son 313 líneas de timming X.
En modo NTSC son 262 líneas de timming X.
Aquí un ejemplo:
[...]
Si HL es mayor de 287 estamos en modo PAL sino en NTSC.
Espero que esto te sirva.
Pos creo yo que sí... aunque creo que sigue habiendo problemas con los
Z80b's y h's, no?
solo una pregunta... ¿donde te escondías todos estos años?
Ramón
PD: Ja! Se me acaba de ocurrir otro método:
Pones una linea de interrupción por debajo de 234. Y haces un bucle de
lectura al estilo
Bucle:
IN A,($99)
bit nomeacurdo,A
JP nz, Bucle
Si sale del bucle es que estabas en PAL. Si se cuelga es que estabas en
NTSC... XD
[fuera coñas, igual haciendo un bucle sobradamente largo (es más, igual
podría hasta controlarse con mismo timming?). Si se pone a 1 el bit de
interrupción es que el barrido ha llegado a esa linea, con lo cual
seguro que es PAL. Si pasados dos ciclos el flag sigue a 0 es que no
llega a esa linea -> NTSC].
... por cierto, llevo todo el dia estudiando, así que si lo que he dicho
no es más que una gilipollez no me lo tengais en cuenta, vale?