Hodor escribió:Pregunto desde mi ignorancia sobre las tripas de las FPGAs, ¿no se supone que éstas pueden conseguir una implementación perfecta del hardware original?
Hasta donde sé, el core es una adaptación de otro core para otra placa con FPGA. Las diferencias con lo que se necesita para correr esa demo serían:
- El procesador del core podríamos llamarlo 80186+. Por lo que sé tiene las instrucciones del 80186 y alguna más, pero no llega a implementar un 80286 (falta modo protegido). Lo que necesitas en el core sería un 8086, ni más ni menos. La ventaja para el ZX-Uno es que (en teoría) puede correr más software que el XT original.
- El procesador del core no corre a 4.77 MHz, sino a una velocidad bastante superior. La ventaja para el ZX-Uno es que algunos programas funcionarán de manera mucho más fluida. Las desventajas son que algunos programas (por ejemplo, juegos CGA que utilizan bucles temporizados para sincronizar la acción) correrán más rápido. En tu caso, la demo correrá más rápido de lo que debe, arruinando algunos efectos.
- La tarjeta gráfica del core es un cacho de VGA (o MCGA). Se han implementado los modos más normales de juego y no están implementadas todas las características "raras" ni los modos EGA o CGA. La ventaja es que es agradable a la vista; la desventaja es que montones de juegos antiguos no funcionarán (por ser CGA o EGA). En el caso de esa demo, se necesita una CGA (y creo que tenía que tener implementada la salida de vídeo de una manera específica) para funcionar.
- No está implementado todo el sistema "como debería". No hay bus ISA, probablemente las velocidades entre componentes no sean exactas a las del PC original... la ventaja es que el core cabe en la FPGA y la mayoría de los programas ni se enterarán. La desventaja es que esa demo en concreto depende de un equilibrio muy exacto entre velocidades de bus, de componentes, de memoria, de vídeo (y, ojo, esa demo es que ni siquiera funciona en el 100% de los PCs a 4.77 MHz).
Resumiendo... para que esa demo funcione tendrías que tirar a la basura el core de CPU y la gráfica, y poner un 8086 y una CGA. Luego tendrías que ajustar los timings exactos... y todo para correr un solo programa.
En mi opinión, si hubiera que modificar este core, los cambios más interesantes serían:
- Quitar la tarjeta semi-VGA y ponerle una CGA completa o una EGA completa (si es que caben). Pierdes compatibilidad con algunos programas; ganas con un montón de otros programas. Además, la CGA permitía la salida por video compuesto, con lo que te quitas de encima un cable VGA.
- Ponerle un switch con tres velocidades: 4.77 MHz, 8 MHz y a toda pastilla. No hace falta que sean timings exactos, con que los juegos tipo Freddy Hardest se vuelvan jugables va que se mata. Este cambio es casi imprescindible en el core CGA (en el VGA, los juegos suelen sincronizarse al retrazado vertical).
Como todo esto no cabría en la FPGA, mi sugerencia sería hacer dos ramas: una con el core VGA tal cual está y otra con el core CGA. No sé si el mundo de las FPGA permite hacer compilación condicional, que ahorraría bastante tiempo cuando se cambien cosas en los cores.