Intrerface de ROM externa para Amstrad CPC

Tanto si estás empezando a programar para sistemas clásicos como si quieres compartir tus conocimientos, aquí encontrarás información al respecto.

Intrerface de ROM externa para Amstrad CPC

Notapor wilco2009 » 06/06/2016 17:20

INTRODUCCIÓN

Por fin, y después de haber sido anunciado hace algún tiempo, ha funcionado con éxito el primer interface de ROM externa para Amstrad CPC made in Vade-Retro. :D

No esperéis grandes cosas. No es ni mucho menos un divIDE para Amstrad (qué más quisiera yo jejeje). Es simplemente un interface de ROM, y además con algunas limitaciones. :|

Como os digo, este interface no es la panacea, pero teniendo en cuenta que hace tres meses los chips temblaban solo de oírme nombrar y buscaban confesor cuando me veían con el soldador :)) :)) , yo me lo he tomado como un medio más de aprender.
Y la verdad es que para mí ha sido una gran satisfacción ver como algo que he diseñado yo, funciona llevado a la práctica. ¿Quién me lo iba a decir a mí cuando hace unos meses me ponía a temblar solo de abrir la carcasa de mi spectrum? :))

Antes de continuar, y para que podáis entender el resto, os voy a soltar un poco de rollo de teoría :? . No quiero hacerme pesado, pero es que me parece importante saberlo para poder explicar después porque se pueden hacer algunas cosas sí y otras no y cual es la direrencia con un interface similar para Spectrum. Así que intentad no dormiros y aguantar el chaparrón de lo que sigue. :D

COMO FUNCIONAN LAS ROMs en un AMSTRAD CPC.

UPPER ROMs
En principio, el hardware del CPC está preparado para funcionar con hasta 256 ROMs externas, cada una de ellas de 16Kb, y están numeradas comenzando en el 0.
Cada ROM contiene uno o más programas y utilidades. A esas ROMs se las conoce como Upper ROMs.
Los programas que contienen dichas ROMs, pueden ser ejecutados mediante comandos "RSX", que son unos comandos especiales que siempre comienzan por el carácter "|".
Este tipo de ROMs que he mencionado, pueden ser incorporadas a un CPC mediante interface de ROM existentes, como son el MegaROM o el MegaFlashROM.

Aunque el hardware está preparado para 256 ROMs simultáneas, el firmware del CPC464 sólo inicializa 8 (0..7) y el del CPC6128 inicializa 16 (0..15).
¿Significa eso que no se pueden utilizar más ROMs?. Pues no, únicamente significa que si queremos utilizarlas deberemos hacerlo manualmente.

Dentro de las 256 posibles ROMs simultáneas para un CPC, existen dos posiciones que están reservadas; La ROM cero está reservada para el interprete de Basic y en el caso del 6128, la ROM 7 está reservada para el DOS (Disk Operating System).

Una limitación adicional que tiene la posición número 0, es que tiene que ser autoarrancable como lo es el Basic del CPC. ¿Que quiere decir esto?, pues que esta ROM no será llamada mediante un comando, sino que se ejecutará automáticamente desde el firmware, por lo que debe estar preparada para ello.

LOWER ROM
Además de las ROMs anteriormente mencionadas, todos los CPC llevan una ROM interna donde se almacena el firmware. Dicha ROM solo puede ser sustituida por otra ROM que contenga un sistema operativo válido. Ya sea cualquiera de las versiones válidas que existen dependiendo de la región, o una versión modificada como es el "FO DOS".

¿Y QUE PUEDO HACER YO CON ESTE INTERFACE?
Pues llegados a este punto tengo dos noticias para vosotros. Una mala y una buena. :|

La mala es que este interface no está pensado para insertar UpperROMs (vaya con lo bien que sonaba eso :~( ) y la buena es que nos permite sustituir la LowerROM (firmware) y el BASIC (UpperROM 0) :-].

Y cómo entre la LowerROM y el Basic ocupan un total de 32Kb, que coincide exactamente con el tamaño de la ROM interna, y resulta que hoy en día es muy barato conseguir EPROMs de 64Kb, pues diseñé el interface pensando en almacenar dos conjuntos diferentes de LowerROM+UpperROM(0), pudiendo seleccionar un conjunto u otro con un selector.

¿Y esto para que me puede servir a mí? ::? . Pues se me ocurren tres motivos principales :idea: (no, si a veces me da por pensar y todo :D ):

1º Diagnóstico de hardware averiado :geek: . Cuando tenemos un CPC averiado y queremos comprobar si el problema está en la ROM, no es necesario que desoldemos el chip para ponerle un zócalo y así poder sustituirlo por una EPROM. Simplemente grabamos la EPROM, la insertamos en nuestro interface y arracamos el CPC. De esta manera, si el problema estaba en el chip propiamente dicho el CPC arrancará. (no si ya os decía yo que esto servía para algo)

2º Sustitución del Sistema operativo del CPC. Existen numerosos sistemas operativos alternativos al sistema operativo de nuestro CPC. Por nombrar algunos os puedo mencionar los siguientes: C64 Replica (convierte la apariencia de tu CPC en la de un C64. No sirve pa na, pero mola un huevo jejeje), CPC Future OS o el Firmware 3.1 (estos sí que sí). También podemos ponerle por ejemplo un OS con otra distribución de teclado o de otra nacionalidad (imaginaos que invitáis a vuestro primo danés y le da por utilizar vuestro CPC :D ....)

3º Sustitución del Basic del CPC por cualquier otra ROM autoarrancable. Como por ejemplo un basic mejorado o un juego (ahí queríamos llegar jejeje).

Como habréis visto, existen utilidades que no podemos cubrir con este tipo de interface, pero sin embargo este interface, nos permite sustituir el firmware, cosa que no podíamos hacer en algunos interface de ROM de la época. Pero de todas formas qué queréis si es que no doy pa más. :))

Bueno, bueno no os desaniméis, que ya le tenemos echado el ojo a un interface tipo UpperROM que nos abrirá un mundo de posibilidades. En lugar de EPROM, trabajará con memoria flash y una pila, y permitirá el volcado a dicha memoria flash directamente desde el CPC. No será un divIDE, pero nos permitirá almacenar hasta 8 o 16 ROMs simultáneamente en un sólo chip. :o

DISEÑO DEL INTERFACE

Vamos con el diseño......

El diseño del interface es muy simple. Para entender como funciona voy a incluir aquí el esquema del BUS de un CPC y el esquema del interface.

Imagen

Imagen

Imagen

El bus del CPC nos permite deshabilitar la ROM interna mediante la señal ROMDIS disponible en la pista 43 del conector de expansión. Si ponemos dicha pista en nivel alto (5V) deshabilitamos la ROM interna y podemos gestionar los accesos a la ROM que llegan desde el BUS. De esa manera podemos redigir todos los accesos a la ROM hacia nuestra EPROM externa.

Para poder gestionar la información que nos llega desde el BUS, deberemos saber si se está accediendo a la ROM, o si por el contrario es un acceso a algo que debemos ignorar. Para poder diferenciar estas dos situaciones disponemos de una señal en el bus llamada /ROMENABLE que es generada desde el GateArray y nos indica cuando se está accediendo a la ROM. Solo en el caso de que dicha señal esté a nivel bajo (0V) activaremos el chip poniendo a 0v la patilla 22 de nuestra EPROM (/OE).

Imagen

Como os dije en un parrafo anterior, la ROM interna del CPC tiene una capacidad de 32Kb, 16Kb para el firmware (LowerROM) y 16Kb para el BASIC (UpperROM(0)). En nuestro diseño hemos pensado en una EPROM de 64Kb (27C512, 512 Kbits = 64Kbytes), por lo que nos cabrán dos parejas de LowerROM/UpperROM(0), que serán seleccionables poniendo a 5V o a 0V la patilla 1 de la EPROM (A15) mediante un selector.
Como esta señal nos hace falta tanto para desactivar la ROM interna poniendo a 5V la patilla 43 (ROMDIS) como para activar nuestra EPROM poniendo a 0V la patilla 20 de la EPROM (/CE) necesitamos añadir un chip que nos invierta la señal.
Podía haber utilizado perfectamente un chip de puertas NOT, pero después de un exahustivo estudio de las posibilidades existentes :ugeek: y finalmente como el que tenía por casa era un chip de 4 puertas NAND de dos entradas, pues he utilizado este :D . Juntando las dos entradas de una puerta NAND se puede utilizar como puerta NOT.

Imagen

Tenemos otro selector que nos permitirá activar o desactivar la ROM externa. Cuando el selector lo tenemos en posición "INT". ¿Qué selector más chorra no? ¿Si tengo el interface conectado será porque lo quiero activar?. Ya ya lo sé, pero es que es una especie de tradición secular que sigo a pies juntillas. Como lo he visto en otros, pues selector que te crio. :D

Imagen

Y el resto es tan sencillo como unir una a una las señales del bus de direcciones (A0..A14) y de datos (D0..D7) de la EPROM con las del CPC.

Bueno, se me olvidaba aún otra cosa. He añadido también dos pulsadores, uno de reset (qué siempre viene bien) y otro de NMI, por si a alguien le da por hacer una ROM con menú que se active pulsando el botoncito. (como era fácil y tenía los pulsadores por casa pues ala, ahí van.

Imagen

Aunque prometo que os dejaré un pdf para poder hacer la placa definitiva, inicialmente he desarrollado el interface en una placa de desarrollo.
En cuanto lo tenga lo subo, de momento os lo imagináis.

Os pego aquí algunas fotos del proceso.

Primero soldamos los zócalos y los componentes.

Imagen

Seguidamente cableamos y soldamos el conector.

Imagen

Es un conector igual que el del Spectrum pero de 50 pines. Además no tiene la típica ranura que tiene el del Spectrum sustituyendo a una de las pistas.
En los conectores originales de Amstrad hay insertada una chapita muy fina entre dos pistas, en lugar de sustituir a una de ellas. Esto hace que su fabricación sea muy complicada, por lo que he optado por poner topes en los dos laterales para guiar la entrada del conector.

Imagen

Una vez soldado todo hacemos algunas comprobaciones con el polímetro para asegurarnos que está todo bien y que los voltajes son correctos e insertamos los chips en sus zócalos.

Imagen

Finalmente conectamos, damos tensión y la prueba de fuego final.......
Imagen

Imagen

Bien!!! todo funcionando a la perfección. :D :D

Imagen
Los retrocacharros de Wilco
Djurkwhad: ¿Como te llamaba tu mamaita?
Roger: Un Error. Pero mis amigos me llaman Roger. Roger Wilco.
Avatar de Usuario
wilco2009
Veterano
Veterano
 
Mensajes: 591
Registrado: 07/01/2013 15:47

Volver a Desarrollo y programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados