Partiendo del port que llevó a cabo @DistWave para el ZXUno del core de Next186, el caso es que ya podemos decir que tenemos el primer core de PCXT con una más que decente implementación de CGA y parcialmente Tandy, gracias al magnífico proyecto Graphics Gremlin de TubeTime. Además, los primeros beneficiados serán nada menos que el ZXUno y compatibles, como el ZXUnCore
Para que no haya problemas de espacio y de paso quitar todo lo que no es necesario, porque incluso podría haber conflictos con la gestión de puertos, he decidido prescindir de los modos de vídeo que parcialmente estaban implementados originalmente en el proyecto Next186, es decir, algunos modos de MCGA/EGA/VGA. En su lugar, he tenido que llevar a cabo las adaptaciones de las señales correspondientes del proyecto Graphics Gremlin para su correcta integración y prescindir de otras propias del bus ISA. Quiero recalcar que en este proyecto se ha llevado a cabo una implementación bastante fiel del chip Motorola 6845, con lo cual disponemos del acceso a todos sus registros y modos gráficos. CGA se encuentra completo, pero la implementación de Tandy de momento es parcial, más información sobre futuros planes del proyecto aquí, de los cuales podremos vernos beneficiados para el core de PCXT.
También he prescindido del módulo de sonido Covox Speech Thing, pero podríamos plantearnos disponer de un fichero de configuración como en el core de Spectrum, y que lo active quien lo desee. El caso es que, con suerte, cuando @jotego termine la implementación del chip OPL2, el jtopl2, es posible que también quepa y tengamos sonido Adlib en el ZXUno, mucho más interesante. Aunque ya veremos, porque el core en sí ya está bastante al límite.
He simplificado el uso de los relojes y los he reconfigurado, estableciendo la velocidad general de la máquina en unos casi 4.77Mhz, sin embargo, aún así es más rápido que un PCXT real, posiblemente sea debido a la cache que lleva el Next186. Antes el core original tenía un timing score disparado, y ahora ha quedado en 0, lo cual hará que sea muy estable. De hecho, el core original me suele dar problemas con algunas PCBs de ZXUnCore, incluso a frecuencias de refresco de la SRAM bajas... ya le haré una revisión más adelante para tratar de dejar el timing score también a 0.
Además de estas adaptaciones en el core, he tenido que sustituir las funciones de la BIOS correspondientes al acceso a vídeo (int 10h), para lo cual, me he apoyado en los fuentes disponibles en el proyecto Micro8088 de Sergey Kiselev.
El core aún presenta sus fallos, no cargan todos los juegos que en principio deberían cargar. Pueden ser dos los motivos:
1. Falta de funcionalidad en la BIOS
2. Carencias o fallos del core Next186
Para resolverlos poco a poco, no queda otro remedio que depurarlos y encontrar el motivo. Si se trata de la BIOS, habría que revisarla y actualizarla... incluso es posible que sea necesario ampliarla porque los 8KB actuales pueden llegar a quedarse cortos. Para ello, habría que hacer una pequeña readaptación del core y el bootstrap para que se realoje correctamente, sin embargo, como la memoria donde se encuentra alojada es RAM y se puede escribir, para hacer pruebas sin necesidad de resintetizar voy a facilitar el proceso actualización en caliente, por si alguien quiere colaborar. Bastaría con disponer del binario de la BIOS en disco y lanzar los siguiente comandos desde el debugger de MS/Dos en el mismo directorio donde se encuentra el fichero de la BIOS:
Código: Seleccionar todo
-n bios.dat
-l e000
-r si
SI xxxx
:e000
-r di
DI xxxx
:e000
-r es
ES xxxx
:f000
Código: Seleccionar todo
-a
CLI
CLD
REP MOVSB
JMP F000:E05B
-g
Para que podáis comprobarlo, os adjunto una BIOS de pruebas que aún no tiene implementado el core, y que he incorporado recientemente. Se trata de la implementación del sonido beep cuando se imprime el carácter 7 (bel), con la nueva BIOS veréis que funciona... por ejemplo al lanzar el siguiente comando de MS/Dos:
Código: Seleccionar todo
echo ^G
Código: Seleccionar todo
MASM BIOS.ASM
LINK /TINY BIOS
El core actualmente tiene los siguientes problemas conocidos, los cuales habrá que ir investigando el problema y cómo o dónde aplicar la solución, en el core o en la BIOS:
- Algunos juegos presentan glitches gráficos y/o parecen resultar más lentos de lo normal. Ejemplo: Army Moves
- Algunos juegos se cuelgan en el menú o durante la redefinición de teclas. Ejemplo: Capitán Trueno
- Algunos juegos no se cargan, ejemplos:
- AlleyCat (Version 61Kb)
- MadMix (EXEPACK) - PAKU PAKU no se muestra correctamente en el modo especial de 160x100.
- No se está mostrando las fuentes de texto en los modos gráficos, a pesar de tenerlos alojados y disponibles en la BIOS.
- En modo texto hay una primera línea fantasma mostrándose en pantalla.
- No a todos los monitores le gusta la señal generada por el módulo de la Graphics Gremlin. Ejemplo: FLATRON M1917A
- Algunos juegos presentan problemas con el sonido generado por el PC-Speaker al pulsar o mantener una tecla pulsada. Ejemplos: Solomon's Key o Titus The Fox.
Para ver fotos de algunos juegos y otros detalles de las funcionalidades del core, podéis verlo en el siguiente post que he creado en el foro de ZXUno.
Dicho todo esto, tenéis disponible los fuentes del proyecto en el siguiente repositorio de mi cuenta de GitHub.
A ver si entre todos dejamos un core digno de ser sustituto de una máquina original de PCXT..., sí, ya sé que es mucho decir