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
 
Atrás
Arriba