Hace un par de meses comencé a trabajar en el desarrollo de mi propia computadora para aprender más sobre su funcionalidad de bajo nivel, el proceso de diseño y la arquitectura detrás de ella. Aunque veo ejemplos reales de otras computadoras, trato de no solo copiarlas, sino que las utilizo como inspiración para desarrollar la arquitectura de mi computadora.
Además de 555 temporizadores CMOS, algunas EEPROM y HM62256 SRAM todo lo demás se supone que ser construido discretamente con circuitos integrados de la serie 74.
Lo planeé para tener una longitud de palabra de 16 bits, pero no pensé en las implicaciones que esto tendría para la RAM en lugar de todos los ejemplos de computadora de 8 bits que he leído.
Mi primer enfoque fue hacer que la memoria RAM fuera direccionable a la palabra, así que conecté las líneas de dirección de dos HM62256 y efectivamente tenía 16 bits almacenados en cada dirección. Esto sería fácil de enviar al bus y trabajar con él, así que desarrollé un conjunto de instrucciones a su alrededor, con un código de operación de 5 bits y los 11 bits restantes, dependiendo del tipo de instrucción que queda para los registros o valores inmediatos.
Mientras hacía más y más investigación, sin embargo, me di cuenta de que la memoria RAM accesible a través de la palabra no parece ser común en las computadoras del mundo real. Todos parecen ser direccionables por byte. Esto no sería un problema para las computadoras de 8 bits, pero si planeo obtener mis instrucciones en un solo ciclo, hacerlo de esta manera sería un problema.
Especialmente mirando ASCII, parece importante tener una forma de almacenar bytes individuales en la RAM, no solo palabras completas. Si tuviera que almacenar caracteres ASCII en direcciones RAM de 2 bytes, habría un 50% de almacenamiento perdido. Podría simplemente ignorar esto y continuar con mis planes, pero también estoy realmente intrigado por cómo se resuelve esto.
¿Cómo puedo obtener varios bytes de una memoria RAM de un byte simultáneamente para usarlos en mi registro de instrucciones? ¿Tendría que leer dos bytes en secuencia y volver a ensamblarlos en una sola instrucción de 16 bits antes de almacenarla en el registro? ¿Qué pasa con otro tipo de datos? ¿La lectura de un valor de 2 bytes me obliga a cargar dos bytes de la RAM manualmente en los registros y volver a ensamblarlos? ¿Hay alguna forma más útil (o más simple) que no pueda imaginar?
Lo siento por la larga lectura de esa breve pregunta, pero gracias por las respuestas.