HAL Sociedad Anonima fue uno de los tantos fabricantes de cartuchos para Commodore 64 y 128 en la Argentina de la década de los 80.
El HAL M-128 es un cartucho con 2 modos: 128 y 64, seleccionables mediante un interruptor. El cartucho contiene ademas un botón de Reset.
Las funciones en ambos modos son prácticamente identicas:
- Acelera la carga de programas en diskette (600% más veloz)
- Evita el golpeteo de la cabeza del drive.
- Hace volcados de pantalla por impresora.
- Formateo de diskettes en 10 segundos.
- Conversor númerico decimal, hexagecimal y binario.
- Aumenta la RAM libre en 4K.
- etc.
Como no poseo una Commodore 128 me voy a centrar en el modo 64 del cartucho.
Al encender la computadora pantalla inicial es la siguiente:
Ingresando <-M (Flecha izquierda M) muestra una ‘página de ayuda’:
Antes de seguir, una breve explicación del funcionamiento de los cartuchos en la Commodore 64.
Hay 2 tipos de cartuchos standard, los normales de 8 o 16K que son amigables con el sistema operativo y generalmente agregan funciones al sistema operativo o interprete BASIC y los cartuchos Ultimax que toman control total del sistema, estos ultimos tambien pueden ser de 8 o 16K.
La detección del tipo de cartucho se hace mediante 2 entradas del puerto de expansión: /GAME y /EXROM.
Si se pone /GAME a cero y /EXROM a uno, entonces el cartucho es Ultimax y mapea su ROM principal en $E000-$FFFF, con opción de otra ROM de 8K en $8000-$9FFF.
Si /GAME esta uno y /EXROM en cero entonces se trata de un cartucho normal de 8K, mapeado en $8000-$9FFF.
Finalmente para un cartucho normal de 16K tanto /GAME como /EXROM tienen que estar en cero y la ROM se mapea en $8000-$BFFF.
La selección de las ROMs de un cartucho se realiza con 2 salidas del puerto de expansión ROML para $8000-$9FFF y ROMH que mapea $A000-$BFFF para cartuchos normales de 16K o $E000-$FFFF para cartuchos Ultimax.
El puerto de expansión tiene ademas dos salidas dedicadas a expansiones de entrada/salida: /IO1 e /IO2 que mapean $DE00-DEFF y $DF00-$DFFF respectivamente.
Estas salidas son frecuentemente usadas por cartuchos más complejos que incluyen algún tipo de mapper para activar/desactivar o cambiar bancos de ROM.
Continuando…
Para hacer un volcado del cartucho y así poder usarlo en un emulador lo primero que hay que hacer es abrirlo para saber que tipo de mapeo usa.
El circuito incluye una EPROM de 16K, un 74LS00 (4 compuertas NAND) y varios diodos y resistencias.
Al descifrarlo nos encontramos con un flip-flop R-S formado por 2 compuertas NAND. Su salida negada (/Q) maneja la linea /EXROM del puerto de expansión, la cual define si la C64 ‘ve’ 8K de la EPROM a partir de $8000 (32768 decimal) o no.
La entrada SET del flip-flop esta conectada a la linea /IO1 del puerto de expansión mientras que la linea /IO2 se conecta a la entrada de RESET del flip-flop.
El interruptor de modo cumple dos funciones, maneja la linea A13 de la EPROM he inhibe el funcionamiento del flip flop cuando el cartucho esta en modo 128.
La linea RESET del puerto de expansión funciona como preset del flip-flop, activando el cartucho al encender y resetear la computadora.
La linea de selección de la EPROM (CE) es manejada por /IO1, /IO2, /ROML y /ROMH. Lo que significa que la EPROM se accede en $DE00-$DEFF, $DF00-$DFFF, $8000-$9FFF y $A000-$BFFF respectivamente.
Dado que /ROMH solo esta activa en la Commodore 64 si las entradas del puerto de expansión /EXROM y /GAME son ambas 0, el uso de /ROMH en este cartucho probablemente sea para el modo 128.
La EPROM es por lo tanto mapeada entre $8000 y $9FFF cuando la salida /Q del flip-flop esta en cero. Pero ademas el contenido de la EPROM que normalmente se encuentra en $9E00-$9FFF se repite entre $DE00 y $DFFF independientemente del estado del flip-flop.
Pero como se cambia el estado del flip-flop para activar o desactivar el cartucho?
Muy simple, una operación de escritura en el area de /IO1 activa el cartucho mientras que una escritura en el area de /IO2 lo desactiva.
Dado que la Commodore 128 tiene una MMU mucho más avanzada, el flip-flop es innecesario por lo que es inhibido en el modo 128.
Sabiendo esto ya se puede proceder a realizar el volcado de la ROM, aunque solo de la parte que del modo 64.
El siguiente programa BASIC realiza el volcado a ROM a un archivo de disco.
10 OPEN1,8,1,"DUMP,P,W" 20 M=32768:DE=56832:DF=57088 30 FORI=0TO8191:POKE DE,0:A=PEEK(M+I):POKE DF,0 40 PRINT#1,CHR$(A);:PRINT A 50 NEXT I:CLOSE1
Luego hubo que pasar el volcado binario a formato CRT para usarlo en un emulador, como ninguno de los tipos de cartuchos documentados concuerda con el funcionamiento del HAL M-128, comencé a probar los tipos nuevos da como opción la herramienta cartconv (parte del paquete de emuladores VICE).
El tipo que funcionó fue Mach5, por lo que se descubrió que el cartucho original desde el cual se clonó el HAL M-128 fué el Mach 128 de Access software.
El manual que se encuentra en DLH’s Commodore Archive lo confirma ya que los comandos son todos exactamente igual.
Para finalizar aquí esta el archivo CRT del HAL M-128



