Gudino alguna vez nos gustaria mirar esos esquematicos de su CPU de 8 bits , creo que a esa tecnica de explorar semaforos de los dispositivos para ver si se produjo algun cambio se le llama polling como alternativa a las interrupciones pero en cierta forma consume la atencion de la CPU a estar revisando periodicamente esos flags para atender un cambio, se ve complejo con logica combinacional poder atender todo ello con interrupciones, cargar algun vector y despues retornar a la direccion siguiente , una forma seria solo crearle una interrupcion o vector unico para todos esos flags en conjunto y de acuerdo a cual se activo saltar con un JMP a donde corresponda y luego intentar retornar al programa principal y no permita atender interrupciones anidadas sino podria desbordarse, pero si que de todas maneras la cosa esta para romperse la cabeza jeje.
Ando tambien ideando como poder construirle para mi sistema un modulo de dos o tres salidas PWM programables, mas o menos ya tengo una idea en el papel en el que o bien uso contadores programables y temporizadores o bien me apoyo en los PTC 8253 o PTC 8254 que contienen 3 contadores descendentes de 16 bits y agregandole hardware extra se tiene una aproximacion a salidas PWM digitales para controlar servos como los que se le conectan a un arduino.
Otro dolor de cabeza me va a parecer la preparacion de modulos I2C con el cual poder conectarse a infinidad de dispositivos I2C que existen como los sensores que se aplica en arduino , aqui si que habria que implementarles librerias de codigo para los diferentes dispositivos I2C pero hay que empezar con el diseño del modulo base I2C de donde partir.
El 8088 para atender interrupciones si que tiene una forma muy potente pero algo pesada de cada vez que se le interrumpa tiene que cargar una direccion completa de IP:CS osea 32 bits alojada en un vector programable y como el ACIA que recibe los datos via puerto serie genera una interrupcion por cada caracter recibido pues la cosa se le vuelve tediosa al CPU, por eso del ACIA evolucionaron a otros similares que contienen una cola de 16 bytes o quizas ahora mas para recibir los bytes y una vez llena la cola recien molestar a la CPU.
Bueno aqui ahora les muestro los diseños de los modulos de memoria RAM y EEPROM para este sistema minimo con 8088:
En la primera imagen podemos apreciar 4 modulos diseñados para alojar 4 tipos de chips RAM de diferentes capacidades, como son 8K, 32K, 128K y 512K, en el mismo cuerpo va indicado una etiqueta que dice "8088" para no confundirlas con otros modulos de memoria que sean para otra CPU por la disposicion de las señales, en lo posible trato de hacerlas compatibles pero a veces no es factible porque no puedes cubrir todos los requerimientos de diferentes señales de diferentes CPUs pero eso se hace mas notorio en los dispositivos I/O de cada familia, en cuanto a la RAM si hay mas factibilidad de ser intercambiables sus modulos porque son standar y se acomodan a los buses de las CPUs retro salvo por el ancho del bus de direcciones y la selecion de la ubicacion de los bancos en su mapa de memoria alli si habria ligeras modificaciones que hacerle, por ejemplo estos diseños de modulos de memoria practicamente deberia servir para la CPU MC68008 de bus de 8 bits con unas leves modificaciones siempre en cuando usemos tambien solo 1 mega en vez de toda su capacidad de 8 megas propia.
En los modulos de 8 K , 32 K y 128K podemos ver que en la esquina superior derecha hay 4 terminales , en esos pines se coloca un jumper de selecion para poder configurar a ese modulo si ocupa el primer banco de 128 K o el segundo banco de 128 K del mapa de memoria de esa forma podemos instalar dos modulos iguales de estos tres modelos, en cambio con la memoria de 512 Kbytes ya no lleva esos jumper de seleccion porque se considera como que con un solo banco se es suficiente para la mayoria de usos pero como ya mencione si es posible adicionar otro banco de 512 K pero hay que preparar la configuracion de su seleccion con mas circuitos logicos de apoyo o un GAL para que no interfiera con el espacio de la Eprom del ultimo banco superior , notese que este ultimo modulo de 512 Kbyte no lleva decodificador 74LS138 como los otros modulos sino solo requiere de una compuerta OR de un 74LS32.
Y ahora llegamos a la parte de la memoria no volatil donde puede residir nuestro Bootloader , nuestro firmware, Bios, servicios, Sistema Operativo etc etc, estos modulos estaran soportados sobre estos dos modelos de memoria Eeprom 28Cxx,
el primer modulo de 32K tambien es compatible con los pines de una 28C64 de 8K asi que podemos usarla indistintamente para cualquiera de ellas en este mismo modulo con zocalo de 28 pines, el otro modulo para memoria 28C512 es un poco inusual encontrarsela pero aun asi esta preparado este modulo por si se la tiene a la mano o se la pueda conseguir en tiendas online de China, al igual que los modulos de RAM en la parte derecha superior podemos ver tambien que tiene provisto unos pines para seleccionar con un jumper en que zona del mapa se situa es decir o bien el ultimo bloque o el penultimo y asi se puede colocar dos de estas tarjetitas de memoria , pero ademas hay una particularidad con estos modulos es que tienen un par de pines donde va un jumper , esos dos puntos dicen "write" porque colocando un jumper alli estamos habilitando la linea de escritura del bus de sistema osea la señal /WR, esto con la finalidad de poder colocar mediante la seleccion adecuada dos de estas tarjetas y jumpeando en una de ellas los terminales "write" podamos programarlo o escribir nuestros programas sobre ella sin necesidad de estar retirandolo y colocandolo en un programador , claro esto trabajaria a cierta velocidad baja del sistema que estaria por probarse pueda ser que trabaje bien a menos de 5 Mhz o se tenga que agregarle estados de espera para garantizar esa funcionalidad pero alli la tenemos presente. Algo que podria ser osado pero que se podria hacerce es tener conectado un solo modulo de memoria EEprom unico donde esta contenido nuestro Bootloader y dejando habilitado el jumper de escritura podria reprogramarse a si mismo mas funciones o aplicaciones pero claro con el riesgo de sobreescribirse alguna parte de codigo inadvertidamente o que se vaya a la deriva y aleatoriamente se sobreescriba el bootloader , Bios o S.O. y para corregir ese desastre tendriamos que volverle a cargar el codigo Bootloader desde un programador externo como el TL866.