La idea de CargandoLeches me vino a la cabeza en diciembre de 2011. Quería usar unos de los
algoritmos de ultracargas que usa k7zx, pero que se puedan cargan cintas de forma transparente.
El inconveniente de k7zx, y de cualquier ultracargador aparecido hasta la fecha, es que hay que
especificar los bloques que quieres cargar. Esa información es posible obtenerla de las cabeceras
y del bloque BASIC cargador, aunque no es muy fiable y no funciona si el bloque cargador está
escrito en código máquina. La única forma de hacerlo, sin alterar el software original,
es reemplazar la rutina cargadora de la ROM en cada llamada a la dirección $0556, y emular su
comportamiento en cuanto a parámetros, bytes cargados y estado de los registros a la vuelta.
Entonces me puse en contacto con Francisco Villa (creador de k7zx), para que él decidiera cual de los múltiples
algoritmos de k7zx era el más adecuado para este proyecto, decantándose por el Throwing Shavings
Slow y Raudo. Los dos métodos usan la misma modulación, la diferencia es que Slow es más simple
pero menos preciso, y Raudo se comporta mejor en cuanto a temporizaciones pero es más complejo:
requiere una tabla mayor y se cuelga o falla si pulsas cualquier tecla.
Comencé a implementar la ROM optando por Raudo con la idea de que la rutina soporte varias
velocidades y que funcione incluso con la carga estándar. Poco a poco Francisco iba haciendo
sugerencias, y el proyecto se hacía cada vez más ambicioso. Se solucionó parcialmente el problema
del cuelgue al pulsar teclas, la posibilidad de cargar snapshots, de trabajar a diferentes
frecuencias de muestreo (22050, 24000, 44100 y 48000Hz), rutina descompresora en ROM y posibilidad
de cargar en +2A ó +3 sin necesidad de modificar la ROM. Se ha optado por maximizar la compatibilidad,
siendo esta de prácticamente del 100% en modelos sin bus flotante. Sólo fallarán los juegos pensados
para 16K que hagan uso del IM2 apuntando como tabla de vectores a la zona no usada (bytes a FF) de
la ROM original, y en modelos con bus flotante.
La mayoría del código Z80, el reproductor y la web han sido escritos por mí (Antonio Villena).
La rutina principal de las ultracargas y el código que calcula el checksum es responsabilidad
de Francisco Villa. Miguel Ángel Rodríguez ha colaborado como betatester, como consultor
técnico y como traductor. Y el código descompresor exomizer ha sido desarrollado por Metalbrain.
Para dudas, sugerencias o reporte de bugs utilicen el siguiente formulario:
Formulario de contacto