Sistema Mínimo con CPU 68008 (Bootloader)

Saludos a todos y espero que se encuentren bien de salud ya acercándonos a culminar este año, aquí otra vez yo presente para continuar con estos Proyectos descabellados de Retro-Microprocesadores rompecabezas , quién de nosotros no tiene por allí en su almacén de chips clásicos además de un Z80 o un 6502 tambien algun poderoso intruso como es esta joyita del MC68000 de 32 bits?, es un chip bien notorio por su enorme presentación DIP de 64 pines no? , Pues en esta ocasión iniciaremos otra aventura embarcandonos en otro proyecto de Sistema Mínimo esta vez para el MC68000 (No es PC ordenador personal, osea no esperes de resultado una Commodore o una Macintosh con teclado y pantalla).

Como es sabido el MC68000 es una CPU de 32 bits internos recorriendo por sus venas pero hacia el exterior se comunica por un bus de datos de 16 bits y puede direccionar hasta 16 Mbytes, lo cual haría que diseñar un hardware para este chip, armarlo y programarlo nos complicaría un poco la cosa , si es posible hacerlo pero en su lugar hemos optado por usar su versión recortada de bus de 8 bits que es el flamante MC68008 DIP48 que direcciona 1 Mbyte, en cuanto al software o firmware es casi el mismo para ambos CPUs osea no requeriría casi cambios entre si, la diferencia sólo sería notoria en cuanto a la disposición del hardware de 16 a 8 bits y en la velocidad resultante, obviamente le tomará más tiempo al MC68008 acceder a la memoria para obtener las instrucciones o datos porque tardará el doble de tiempo en leer o escribir datos a la memoria, pero usar el MC68008 nos simplificará bastante en cuanto al diseño de las tarjetas modulares, el que desea aventurarse a construirlo en su versión pura de 16 bits MC68000 también puede hacerlo si lo desea a la par.

En la imagen adjunta se muestra el Circuito Propuesto para este Sistema Mínimo con el MC68008, tenemos los componentes básicos indispensables para hacerlo funcionar , como son CPU, ROM, RAM, Puerto Serie y Puerto Paralelo , en otros diseños en internet suelen obviar o prescindir del PPI puerto paralelo cosa que a mi parecer es dejar al modulo medio incompleto como quien dice sin extremidades, pues el Sistema tiene que comunicarse con el exterior no solo por un solitario puerto serie hacia la PC sino que también de forma paralela interactuar para enviar y recibir señales digitales de 8 bits desde/hacia otros circuitos como un ADC por ejemplo o manejar indicadores ,pantallas, relays etc.

En este Sistema Mínimo tenemos la posibilidad de usar las memorias E2prom , Flash y Ram de la capacidad que tengamos a la mano ya sean desde unos modestos 8K de Eprom hasta unos 512 Kbytes (RAM en un solo chip), El circuito propuesto de la imagen lo diseñe recopilando datos variados, otros no me quedaron muy claros y por ello primero lo armare en protoboard para hacer pruebas, descartes y comprobar si la lógica propuesta esta bien antes de preparar sus respectivas Boards modulares sobre todo la que alojara a la CPU con los circuitos lógicos de apoyo como son las compuertas lógicas, incluso puede ser que se requiera sobre la marcha algún agregado más de componentes.

En El circuito de proteus que pueden descargar se puede distinguir dos circuitos lógicos en la parte de abajo que vienen a ser el circuito de /DTACK y /VPA, el circuito /Dtack es necesario agregarlo en caso de que nuestras Memorias a usar sean algo lentas para el MC68008P10 que es de 10 Mhz , aunque también podemos usar otro CPU como el MC68008P8 de 8 Mhz o si trabajamos con reloj de 4 Mhz podría prescindiese del circuito /Dtack y conectar esa señal directamente a GND para que funcione sin estados de espera, el /Dtack es casi equivalente al /Wait o Ready de otros microprocesadores.

Por otra parte el circuito usado para /VPA esta preparada para utilizar chips síncronos Periféricos del antiguo MC6800, debido a que estamos empleando un ACiA MC68B50 este requiere manejar la señal /VPA para sincronizarse con la CPU la lectura/escritura y la generación del autovector en caso de requerir interrupciones sino no necesitaríamos usar /VPA y la dejaríamos conectada a Vcc.

Según también se lee en datos del MC68008 que se advierte de que si vas a usar Periféricos antiguos por consiguiente /VPA se debe evitar que coincidan /Dtack y /VPA a la vez en estado bajo porque el resultado podría ser imprevisible y confundir a la CPU dejandola a la deriva o colgarla.

En un diseño posterior agregare un periférico que si esta hecho especialmente para el MC68008 que es el MC68681P (que espero conseguir de China) este incluye dos puertos Uart, pines de input/output, manejo de interrupciones vectoriales y un temporizador, todo en un solo chip de 40 pines, una maravilla y ojala hubiera uno que incluyera ADC, I2C , SPI pero eso ya era mucho pedir para aquellos tiempos.

Bueno entonces esto sería el inicio de este hilo y espero poder ir avanzando gradualmente hasta llegar a tener disponible las tarjetas Board completas y el programa Bootloader operativo que permitiría recibir los archivos .HEX o .BIN enviados desde la PC. Sera hasta la próxima publicación...
MC68008.jpg
 

Adjuntos

  • MC68008.rar
    34.3 KB · Visitas: 0
Última edición:
Continuando con el Sistema Mínimo 68008, aqui les adjunto el mapa de Memoria y Periféricos que se tomará de referencia para la decodificación de la ROM, RAM y los Periféricos, En nuestro Sistema Mínimo la distribución estará hecha para que la ROM se aloje en la parte baja del Megabyte direccionable por el MC68008, tras un reset se accedera a la ROM dispuesta en la zona baja 00000H, mientras que la RAM se alojara justo en la mitad superior del espacio osea a partir de los 80000H (512 kB en adelante).

Tenemos variedad de posibilidades en cuanto a la capacidades de RAM y ROM a implementar, como nuestro Sistema está contemplado para un bootloader, no necesitamos gran espacio de ROM o E2PROM por lo que nos podría bastar con 8 KB a 32 KB, opcional puede ser chips de más capacidad para alojar otras utilidades o subrutinas que se requieran más adelante, pero con un 28C64 o 28C256 nos bastará y sobrará, estimo que solo ocuparemos entre 2 a 4 Kbytes.

La RAM como se mencionó antes, su espacio de trabajo estará por encima de 80000H, así que podemos usar RAM desde 8K, 32K, 64K, 128K o hasta una de 512K en un solo chip (algo complicada conseguir de China porque la falsean Re etiquetándolos), también es posible apilar varias memorias pero en la práctica no nos quedarían de forma contigua o en direcciones correlativas (a excepción de si usamos varias RAM de 128K ).

La decodificación de los bancos de memoria está seleccionada por las tres líneas de direcciones más altas que son A19, A18 y A17, con lo que tenemos 8 bancos, 8 arreas o campos, cada banco es exactamente de 128K de espacio direccionable , por ello si coloco una RAM de 32K en un banco y otra Ram de 32K en el siguiente banco y así sucesivamente, estos no serán continuos sino que entre ellos habrá un espacio seudo-vacío y nuestro software o aplicación tiene que estar al pendiente de ello sino intentaría leer o escribir en espacios vacíos o incluso reescribir en direcciones superpuestas.

En el esquema de bancos podemos ver que hay leyendas con colores resaltados de espacios físicos y otros de colores suaves que les llamaremos espacios lógicos, estos espacios lógicos vienen a ser en sí espacios superpuestos sobre la memoria física real, Por ejemplo al colocar una RAM de 32K dentro de ese banco de 128KB quedará un espacio aparentemente libre de 96KB , que en la práctica ese espacio no es libre sino superpuesto, osea ocurrirá que al leer un dato en la dirección 00000H esta sería el mismo dato que se leería en 08000H, en 10000H y en 18000H, del mismo modo si intentara escribir un dato en 00000H este también lo leerías en las otras direcciones mencionadas, este tipo de situaciones se puede evitar usando mucha mas compuertas o GALs donde puedes ser mas especifico con las direcciones y evitar solapamientos de arreas dentro de un mismo banco seleccionado, en varios circuitos propuestos de Microordenadores con Microprocesadores se suelen utilizan GALS para simplificar circuitería pero para nuestros Sistemas Mínimos no son tan indispensables y nos basta con usar nuestros viejos chips confiables decodificadores 74LS138 de siempre y que venimos usando en otros Sistemas Mínimos como con el Z80, el 6502 etc.

Respecto a los Periféricos de la familia 6800 y 68K estos no se mapean separados como lo hacen el 8085 y Z80 en un área dedicada a Input/Output, sino que se tienen que situar en alguna zona del mismo mapa de memoria disponible, tal como lo harían la ROM y RAM en sus respectivos espacios, entonces para este caso los Periféricos indicados con la leyenda roja las hemos ubicado dentro de un área entre las direcciones 60000H a 70000H, este espacio es más que suficiente para colocar muchos periféricos pero fisicamente solo requebraremos unos 4 a 6 Chips Periféricos entre ellos el ACIA y el PPI , al gusto del usuario también se puede usar un VIA o un RIOT en su lugar, unos periféricos más acorde con la familia MC68008 serian el MC68681, el MC68901 o el MC68230.

En los primeros Ordenadores que usaron el MC68000 tuvieron un inconveniente respecto al área de vectores dinámicos causado por el diseño del CPU 68000, no se siguió la misma secuencia tras el reset del 6800 de iniciar en una dirección alta de memoria, la situación era que que el MC68000 iniciaba en la dirección 00000H desde donde lee el puntero de pila de Supervisor y la dirección del programa inicial de partida, estos datos tenían que estar situadas en los primeros 8 bytes de la ROM y luego venia el conflicto con el software Operativo que necesitaba alojar los 255 vectores en la parte baja de la RAM de forma dinámica , junto con las variables y el Stack , Así que a los diseñadores de ordenadores se le ocurrieron agregarle unos circuitos adicionales de conmutación de bancos, estas soluciones podrían implementarse por hardware o software, de tal manera que tras tomar los primeros 8 bytes de la ROM inmediatamente se conmutaba los bancos de lugar, la RAM pasaba a ocupar la posición baja 00000h y la ROM se movía a otra posición alejada, todo esto haciendo engorrosa la cosa por causa del diseño del MC68000 (que corrigieron en futuras versiones).

Parece que los desarrolladores del software de Ordenadores querían obligar a que el MC68000 emulara al 8088, que tratara la memoria baja como zona de vectores y variables tal como estaba implementado en el diseño del 8088 por hardware interno , el 8088 llego un poco antes que el MC68000 y también nos mareaba con su programación por segmentos (CS, DS, ES, SS) mientras que el MC68000 era mas elegante en ese aspecto al manejar direcciones completamente lineales, Para nuestro caso de Sistema Mínimo no nos vamos a complicar la vida con ese circuito de "Bank switching" de intercambio de bancos y mantendremos el mapa tal como esta expuesto en la imagen.
Esto seria todo por ahora y hasta la próxima publicación.



Bancos.jpg
 
Hola Scooter, respecto el MC68008 de 8 bits de seguro no lo encontrara en su comercio local electrónico ni nuevos ni de segunda, aquí en Perú tampoco se encuentran pero si se puede adquirir desde aliexpress, pueden ser casi nuevos Re etiquetados, recuperados de placas en buen estado o hasta con restos de soldadura en sus pines, también se encuentra el MC68000 nativo de 16 bits a un precio módico.

Recuerdo que en mi tiempo de estudiante cuando ya manipulaba un poco el Z80 y 8085, encontré entre las placas electrónicas desechadas que vendían los ambulantes unas enormes placas llenas de chips, entre ellos un gran chip llamativo de 64 pines que era el MC68000 en su versión cerámica como la imagen mostrada, me lleve a casa 2 placas y les extraje todos los chips que venían soldados incluidos las CPU, en ese momento tenia algo de noción de que eran microprocesadores tal como el Z80 o 8085 pero mas potentes.

En revistas electrónicas originales y de origen pirata de la época no había mucha información, de como podía echar a andar un MC68000 ya que ni figuraba a la vista su diagrama de pines, no tenia información en los textos de la época y tampoco tenia acceso a internet, entonces le pedí a un amigo que si tenia internet que me descargara el datasheet en PDF, paso buen tiempo para ello hasta que ya por fin tenia ese PDF en mis manos (en mi pesado disco duro solitario), pero ya también no tenia una PC donde poder visualizarlo cómodamente o incluso querer imprimirlo salía muy costoso.

Así que presuroso me propuse armar mi propia PC frankestein ósea ensamblada por partes que iba consiguiendo del reciclaje, así ya podía ver esos datos de hojas y hojas con tranquilidad en mi casa, me arme primero una PC XT 8088 NEC20 donde los PDF se visualizaban con una gran lentitud y después la mejore a PC AT 386, ese PDF no lo comprendía del todo y no había algún circuito propuesto de como armar un Sistema Básico al menos, Si se encontraba libros didácticos para circuitos con el 8085 entre ellos Cekit y también me preste un libro de un Profesor sobre el Z80 con ejemplos pero no había nada parecido para el MC68000, al menos no lo encontré yo.

Bueno puse manos a la obra y empezó a hacer pruebas en varios protoboard haciendo conexiones por aquí por allá , insertándole código NOP directamente con resistencias y dipswitch, andaba probando otros códigos también para tratar de visualizar su funcionamiento a través de leds, en ese tiempo no me era factible conectarle RAM y Eprom , prepararle código de 16 bits y acomodarlo en dos chips Eprom paralelas que tenias que grabar los datos pares en un chip y los impares en otro, resultaba muy complicado para hacerlo y no había algún software disponible para ello (pensé en hacerlo con ayuda de Turbo Pascal) , de igual modo lo hubiera necesitado para aplicarlo a algún 8086 de bus datos nativo de 16 bits !!

Duro muy poco mi emoción de ver funcionar el MC68000 pues manipulando las señales del Reset y Halt termine por cruzar los chips, creo que fue por no usar las compuerta de colector abierto que se debían colocar y yo los obvie, allí termino la aventura con esos CPU cerámicos que los deseche, pero seguí buscado mas placas y me conseguí unos 4 o 5 chips mas ya en versión plástico epoxi incluso en su presentación cuadrada PLCC que los tuve allí guardados.

Muchos años después ya me había enterado de la existencia del MC68008 y pensaba en que debía conseguir ese chip para mi colección , y pues al buscarlo en aliexpres allí los llegue a encontrar por casi un dólar y medio, le estimo que ya los he tenido en mi alacena en espera por casi 8 años y pues ya llego el momento de verlos en acción .

Así que el circuito propuesto aquí para el MC68008 sigue la linea de uso didáctico, de aprendizaje, de laboratorio, de estudio de los CPU old, o de solo por Hobby y para la aplicación que guste darle uno. Bueno eso es todo por ahora y será hasta la próxima publicación.

630452171_1421251199793793_2904847777841329222_n.jpg s-l400.jpg
 
Aquí ya les presento los primeros Módulos de Memoria para el Sistema Mínimo del MC68008, como las conexiones para memorias RAM y ROM son estándar pues para ganar tiempo las tome de los mismos diseños de Módulos hechos para el Sistema Mínimo 8088 , pero claro estos Módulos requieren algunas modificaciones para acondicionarlas al MC68008 que se detallaran a continuación.

En cuanto a la Rom / Eprom podremos usar las versiones Eprom UV o las E2Prom serie 28xx como habitualmente lo hacemos, tenemos dos opciones que serian la de usar el Modulo de 8KB o el de 32KB, en el caso de la E2prom 28C256 he visto que a subido mucho de precio y quizás les sea mas conveniente usar una 28C64 de 8KB para iniciarse en este Sistema MC68008, Recuerden que este Modulo de memoria es el que será buscado tras el Reset inicial del Sistema, asi que en esta memoria se grabaran los primeros 4 bytes que contienen la dirección del puntero de pila o Stack del Supervisor, este puntero debe apuntar a una zona donde este mapeada la RAM que dispondremos mas adelante, luego los siguientes 4 bytes a leer contienen el puntero de inicialización del Programa de arranque, como el MC68000 y MC68008 manejan 255 vectores y cada vector ocupa 4 bytes le reservaremos el primer Kbyte de memoria, así que nuestro programa de arranque Bootloader estará situado después de ese primer Kbyte de la Rom / Eprom.

En esta zona de 1 Kbyte iremos alojando los punteros de vectores en las posiciones que se requieran, entre ellos el correspondiente al ACIA MC68B50 para las comunicaciones seriales desde/hacia la PC, aquí es donde se darán cuenta que tenemos que programar los punteros de vector como fijos al momento de grabar el Bootloader en la E2prom y es por ello que los primeros diseñadores de ordenadores MC68000 no lo vieron muy conveniente, de este modo implementaron la técnica del "bank switching" para poder acomodar los punteros de los vectores en la RAM, así el software modificaría los punteros dinámicamente de ser conveniente a cualquier otra dirección, aquí el causante de ese embrollo fue el diseño del MC68000 que no seguía la secuencia de arranque del antiguo 6800 para mantener cierta compatibilidad, en todo caso seguir la tendencia practica del 8088 respecto a ese tema de los vectores y permitir que el arranque iniciara en la parte alta de la Memoria.

Para el Modulo de RAM podríamos usar un chip de de 8 Kbytes o también de 32 Kbytes de una vez, aquí respecto a precios como que no hay mucha diferencia en estos componentes, así que recomendable ya usar de frente un mínimo de 32 Kbytes de RAM, en el caso de este modulo de memoria observaran que tiene dos jumper para poder direccionar el modulo en dos bancos de memoria, si usamos un solo Modulo de memoria de 32 KB tenemos que colocar el jumper en CS4 y en caso de si agreguemos otro Modulo de 32 KB entonces en el segundo modulo tenemos que seleccionamos el jumper en CS5.RAM y ROM.jpg
Y luego tenemos nuestros módulos de Memoria RAM de mas capacidad que vienen en presentación de chips de 32 Pines DIL , los módulos de la izquierda están preparados para alojar una RAM HM628128 o compatibles y el otro modulo para alojar una RAM estática de mas capacidad que seria la HM628512 de 512 Kbytes , aquí es donde a veces nos confundimos con los codigos del HM62512 con el HM628512, no son lo mismo pues una corresponde a 64 Kbytes y la otra a 512 Kbytes respectivamente.

Un dato respecto a esta memoria HM628512 es que tuve el inconveniente de que compre dos unidades de aliexpress y cuando las comprobé resultaron ser memorias de solo 128 KBytes y no de 512 KBytes, habían sido Re etiquetadas una como si fuera la otra, así que es posible que se encuentren con esa situación al comprarlas, algo similar me hicieron con el Z80 pues compre unos que decían 20 Mhz y resultaron ser todos de 6 Mhz.

El ultimo Modulo de la derecha es también un modulo para alojar un chip RAM HM628512 ósea 512Kbytes en versión SMD SOP32, es posible que en esta versión smd sea mas confiable de que tenga la capacidad que dice tener en vez de la DIP32, será cuestión de hacer las pruebas pertinentes cuando la arme, como observaran este ultimo modulo consta de dos partes, una parte es la placa base que se insertara en el bus del sistema, mientras que la otra pequeña es una placa adaptadora donde se soldara el chip SOP32 y luego este se insertara en su placa base, con lo que tendríamos un solo y amplio banco de medio Megabyte.

Los archivos de los módulos de memoria están para descargar y son de extensión *.PCB, este archivo se abre con el programa PCBWizard que lo pueden encontrar por Google, de allí ya los pueden fabricar con el método de la plancha o de serigrafia, algún día en vez de manufactúralos artesanalmente quisiera mandarlos a hacer en PCBWAY o JLCPCB made in China para que me queden con un acabado profesional.

Y pues ese seria todo por el momento.RAM.jpg
 

Adjuntos

  • Modulos Eprom Ram MC68008.rar
    19.1 KB · Visitas: 0
Atrás
Arriba