radastan escribió:Es que va justito, si usamos cuatro pixels de pantalla para cada pixel del ordenador casi no hay borde.
Eso tiene ventajas e inconvenientes: aprovechamos la pantalla pero vemos pixels como puños... habrá que probar ambos casos.
Para eso entonces tienes que usar una frecuencia diferente para el reloj de pixel. Si, por ejemplo, usas 10MHz como reloj de pixel, escoges tener una línea de pantalla con 256 píxeles activos, y usas dos ciclos de reloj por pixel (esto es, como si tuvieras una línea de 512 píxeles en donde cada pixel está repetido dos veces), tienes lo siguiente:
mcleod_ideafix escribió:De hecho, una vez que se elige la frecuencia de pixel (llamémosla Fp), el número de cuentas de píxeles total (Npt) que hay que hacer en el contador de píxeles para llegar a 64uS viene determinado por: Npt = 64 * Fp
Este valor, Npt, tienes que descomponerlo en la suma de los siguientes valores (que tendrás que calcular o elegir, en su caso):
- Np : el número de píxeles por línea de pantalla (lo tienes que elegir)
- Nb : el número de píxeles que habrá en total entre ambos bordes derecho e izquierdo (se calcula en base a los demás)
- Nfp : el número de cuentas que dura el front porch de la señal de video (el front porch dura 5.8uS, así que Nfp = 5.8 * Fp . Como saldrá un número con decimales, se coge el entero más próximo)
- Nbp : el número de cuentas que dura el back porch (el back porch dura 1.5uS, así que Nbp = 1.5 * Fp . Como saldrá un número con decimales, se coge el entero más próximo)
- Nhs : el número de cuentas que dura el pulso de sincronismo horizontal (dura 4.7uS, así que tenemos Nhs = 4.7 * Fp. Mismas consideraciones que con las señales anteriores)
Debe cumplirse, por tanto que: Npt = Np + Nb + Nfp + Nbp + Nhs
La suma de los valores Nbp + Nhs + Nfp nos da el número de cuentas del intervalo de blanking horizontal. Detectar este intervalo es importante porque la señal de video debe valer 0 durante este período. Si no, pasará como pasó con el ZX80 y los primeros modelos de ZX81, que ponían la señal de video a blanco antes de tiempo.
Este tiempo debe sumar 5.8 + 1.5 + 4.7 = 12uS (de ahí viene que la señal activa de video dure 64 - 12 = 52uS) ana sí que los valores de Nfp, Nhs y Nbp deberán ajustarse en +/-1 unidad de forma que la suma de los tres sea lo más parecida posible al valor Fp * 12
Por último, se calcula el valor Nb despejándolo: Nbp = Npt - (Np + Nfp + Nbp + Nhs). Conviene que sea un valor par, para que al dividirlo entre el tiempo de borde izquierdo y borde derecho, salgan bordes simétricos (aunque un pixel de diferencia en la anchura no se va a notar demasiado)
Npt = 64*10 = 640
Np = 512 (son 256 píxeles repetidos dos veces cada uno)
Nfp = 5.8*10 = 58
Nbp = 1.5*10 = 15
Nhs = 4.7*10 = 47
Despejando: Nbp = Npt - (Np + Nfp + Nbp + Nhs) = 640 - (512+58+15+47) = 8
Lo que nos da una anchura de borde izquierdo y derecho de 4 píxeles cada uno.
Vamos, ni más ni menos que lo que hace el QL, y que ya expliqué en su momento

:
http://foro.speccy.org/viewtopic.php?f=15&t=2750