Este conjunto de instrucciones propuesto está diseñado para ejecutarse en computadoras HRRG de 4 bits tanto virtualizadas como físicas.
Como recordarán, mi amigo Chewy estaba interesado en diseñar y construir procesadores de 4 bits, que usó para enseñar a niños y niñas cómo funcionan las computadoras “debajo del capó”. Computadora). y “El diseño de una computadora Chewy de 4 bits”).
Chewy actualmente está pensando en un conjunto de instrucciones para implementar en su computadora Chewy de 4 bits. Así es como mi amigo Joe Farr y yo pasamos mucho tiempo reflexionando sobre el conjunto de instrucciones de nuestra propia computadora Heath Robinson, Rube Goldberg (HRRG) de 4 bits hace unos años.
Chewy planea implementar un conjunto de instrucciones mucho más simple que el que Joe y yo teníamos en mente, pero no está interesado en examinar y reflexionar sobre nuestras ideas, pensé.
Realización física y virtual de una computadora HRRG de 4 bits
De hecho, es una buena idea retroceder unos pasos y preparar la escena antes de sumergirse de lleno en el conjunto de instrucciones con coraje y abandono.Pensamientos en el original Computadora de tecnología mixta HRRG El resultado final es tener un conjunto de gabinetes de madera con frente de clase montados en la pared (Relés, Tubos de vacío, Transistores, TTL IC, Lógica magnética, Lógica neumática, Lógica fluídica). Semejante).
Se pensó que la computadora HRRG original tenía una ruta de datos/ancho de palabra de 8 bits. La computadora HRRG de 4 bits fue un desarrollo posterior.
Para evitar confusiones con los cables, los gabinetes están conectados con módulos inalámbricos. Como parte de esto, planeamos definir una interfaz de entrada/salida común que se colocará en cada gabinete. Elección de su creador.
Otro concepto central es “plug and play”. La idea aquí es que siempre que cada gabinete admita estándares inalámbricos y de interfaz, puede tener una colección de HRRG donde diferentes personas pueden traer sus interpretaciones de gabinetes/funciones y conectarlos en diferentes combinaciones y permutaciones.
Por supuesto, incluso Joe y yo sabíamos que esto sería una gran tarea, por lo que decidimos comenzar creando una implementación virtual de una computadora HRRG de 4 bits, como se muestra en la captura de pantalla a continuación.
Computadora virtual HRRG de 4 bits (Fuente: Joe Farr)
¡Eek! Noté que la barra superior en esta captura de pantalla muestra fechas de 2011. Esto significa que ha pasado casi una década desde la última vez que vimos a esta bestia. Hay tantas cosas divertidas que hacer, pero poco tiempo para hacerlas todas. Hay dos cuestiones principales aquí. Tanto Joe como yo tendemos a diseñar demasiado las cosas y nos distraemos fácilmente… ¡ardillas!
Aunque no se distingue fácilmente de la captura de pantalla anterior, la computadora virtual HRRG de 4 bits también es plug and play. Y es arrastrar y soltar. Cada función virtual (como los gabinetes de RAM y ROM) se puede arrastrar y soltar en bastidores virtuales para formar una computadora HRRG virtual de 4 bits.
La idea es que los usuarios puedan descargar un conjunto completo de módulos virtuales de nosotros y puedan crear los suyos propios. Las implementaciones físicas “hablan” entre sí y con las máquinas virtuales a través de una memoria USB inalámbrica conectada a la computadora host.
Por ejemplo, un grupo de niños en una clase de secundaria podría crear un gabinete de RAM físico que contenga una sola palabra de memoria de 4 bits implementada en la tecnología de su elección y transferir este gabinete físico al resto de sus computadoras implementadas en un entorno virtual. Puedes conectarte. mundo.
Pero espera. Hay mas. Nuestro objetivo final es hacer que las computadoras HRRG de 4 bits estén listas para Internet. Esto significa que los usuarios de todo el mundo pueden vincular gabinetes físicos y virtuales para crear una computadora HRRG distribuida de 4 bits.
Antes de continuar, eche un vistazo a la captura de pantalla de arriba. En particular, observe que hay siete registros de propósito general (GP) de 4 bits, cuyo contenido se muestra en el gabinete de la esquina izquierda del bastidor superior. A la derecha hay dos registros de estado de 4 bits, cuatro registros de dirección de 12 bits y tres registros virtuales de 12 bits. En la esquina superior derecha verá el panel de control principal de la CPU. Debajo de esto está la consola del programador, donde los usuarios pueden ingresar programas de código de máquina usando un interruptor virtual (también proporcionaremos un ensamblador que se ejecuta en la computadora host).
El bastidor debajo de este ejemplo consta de seis gabinetes que proporcionan varios controles y pantallas de entrada/salida. De nuevo, (a) los usuarios pueden crear y compartir sus propios gabinetes virtuales, (b) estos gabinetes virtuales se pueden mover (arrastrar y soltar) dentro y entre bastidores, y (c) los usuarios pueden, RAM, ROM, gabinetes de E/S, y muchas otras características se pueden agregar en múltiples copias. Cada instancia tiene su propia dirección única o rango de direcciones.
Introducción al conjunto de instrucciones.
La primera tarea antes de decidirse por un conjunto de instrucciones fue definir un conjunto de registros. Como estamos trabajando con palabras de 4 bits, decidimos usar 2^4 = 16 registros diferentes. Después de mucho ir y venir, se completaron siete registros de propósito general de 4 bits (R0-R6), dos registros de estado de 4 bits (S0 y S1) y cuatro registros de dirección de 12 bits (IX, IV, SP). y PC), y los tres registros virtuales de 12 bits (MD, MX y CV) se muestran a continuación (tenga en cuenta que el carácter ‘$’ se usa para indicar un valor hexadecimal).

16 registros de CPU HRRG de 4 bits (Fuente: Max Maxfield)
Una vez que se creó el registro, la siguiente tarea fue seleccionar un conjunto de instrucciones que podrían usarse para realizar operaciones en los contenidos del registro o la memoria. De hecho, pude reducirlo a solo 15 instrucciones, como se muestra a continuación (y luego decidí que las instrucciones $E no utilizadas actúan como “no-ops” o NOP).

16 instrucciones HRRG de 4 bits (Fuente: Max Maxfield)
Sé que toma un poco de tiempo y esfuerzo entender todo esto. Han pasado 8 años desde la última vez que vi esto, así que casi lo he olvidado, así que estoy muy agradecido con mi juventud por tomarse el tiempo de escribir la nota a continuación.
- No hay operando fuente si la fuente es un registro de 4 o 12 bits.
- Si la fuente es una ubicación de memoria (como se indica mediante los registros virtuales MD o MX), el operando fuente es la dirección de 3 nibbles.
- Si el origen es un valor constante (como se indica mediante el registro virtual CV), el operando de origen es un valor de 1 nibble si el destino es un registro de 4 bits o una ubicación de memoria. De lo contrario, 3 valores de nibble si el objetivo es un registro de 12 bits.
- No hay operando objetivo si el objetivo es un registro de 4 o 12 bits.
- Si el destino es una ubicación de memoria (como se indica mediante los registros virtuales MD o MX), el operando de destino es la dirección de 3 nibbles.
- Si el origen es un registro de 4 bits, el destino debe ser un registro de 4 bits o una ubicación de memoria. Si el origen es un registro de 12 bits, el destino debe ser un registro de 12 bits o una ubicación de memoria.
- Cuando el contenido de un registro de 12 bits se copia en la memoria, el operando de destino es la dirección más baja del campo de 3 nibbles. Si el contenido de la memoria se copia en un registro de 12 bits, el operando fuente es la dirección más baja de un campo de 3 nibbles.
- Si la fuente es un registro de 4 bits o una ubicación de memoria, se inserta 1 valor de nibble en la pila, donde SP = SP + 1 (el puntero de la pila se incrementa después de presionar). Si la fuente es un registro de 12 bits, se insertan 3 valores de nibble en la pila, por lo que SP = SP + 3.
- Si la fuente es un valor constante, el operando fuente será el valor de 1 nibble y este valor se colocará en la pila.
- Si el objetivo es un registro de 4 bits o una ubicación de memoria, se extrae 1 valor de nibble de la pila y SP = SP − 1 (el puntero de la pila se reduce después del POP). Si el objetivo es un registro de 12 bits, se extraen 3 valores de nibble de la pila, por lo que SP = SP − 3.
- No hay instrucción de “retorno de subrutina” (RTS) o “retorno de interrupción” (RTI). Se puede lograr el mismo efecto utilizando la instrucción POP para obtener la dirección de retorno de la pila y cargarla en la PC.
- Las instrucciones JMP y JSR van seguidas de un nibble de control y una dirección de destino de 3 nibbles. Los nibbles de control se utilizan para realizar saltos incondicionales o condicionales. Los tres bits menos significativos del nibble de control se refieren a los bits probados en el registro de estado de 8 bits que consta de S1 y S0. Va de 000 a 111 (0 a 7). Suponiendo que el bit más significativo del nibble de control es 0, se produce un salto cuando el valor del bit de estado seleccionado es 1. Por ejemplo, JMP %0001
es equivalente a “Saltar si Cero”. En cambio, un 1 en el bit más significativo del nibble de control invierte la operación del salto. Por ejemplo, JMP %1001 <ターゲット アドレス> es equivalente a “saltar si no es cero”. Preste atención al bit de estado 7. [bit 3 in S1] es un 1 cableado, equivalente a un salto incondicional.
Por último, pero no menos importante, el siguiente diagrama muestra cómo varias instrucciones afectan los bits en el registro de estado S0.

Cómo afectan las instrucciones al registro de estado S0 (Fuente: Max Maxfield)
Por ejemplo, la instrucción en lenguaje ensamblador “MOV R0, R6” se interpreta como “mover/copiar/cargar el contenido del registro de 4 bits R0 al registro de 4 bits R6”. De manera similar, la sentencia “MOV R0, [$0F3]’ se traduce como ‘mover/copiar/cargar el contenido del registro de 4 bits R0 a la ubicación de memoria cuya dirección de 12 bits es $0F3’.
Si está interesado (como lo indica la gran cantidad de comentarios que estoy seguro que están listos para publicar a continuación), me complacería escribir una columna de seguimiento discutiendo nuestros pensamientos sobre el lenguaje ensamblador. Un poco más de detalle.
Pero espera. Otro…
Como mencioné anteriormente, la última vez que Joe y yo vimos una computadora HRRG de 4 bits fue en la niebla del tiempo que llamamos 2011. No recuerdo qué pasó entonces, pero nuestras propias ardillas nos arrastraron a ambos en diferentes direcciones.
El problema es unos días después de que le envié un correo electrónico a Joe preguntándole si todavía tenía una copia de mis notas en el conjunto de instrucciones. por el arroyo sin remo), me dijo en un correo electrónico:
Max, para este proyecto navideño terminé un emulador de CPU HRRG de 4 bits y pensé en echar otro vistazo a la implementación del hardware si tuviera tiempo. El emulador se ha vuelto bastante atractivo y tiene algunas características nuevas, como una impresora virtual para la depuración de programas.
Respondí que no podía esperar para verlo, que escribiría esta columna sobre nuestro conjunto de instrucciones y que en algún momento en el futuro me gustaría ver un emulador que funcione (quizás incluso pueda proporcionarlo). en un formato que puedes descargar y jugar tú mismo). Joe respondió rápidamente:
Creo que publicar un artículo sobre conjuntos de instrucciones sería una gran idea. Una vez que el emulador esté completo, e incluso si tengo que salir y presionarlo (los fanáticos de Star Trek reconocerán el término), haré que el paquete de instalación esté disponible. Accede y juega.
Esa es la situación en este momento. Por supuesto, como dicen, “el diablo está en los detalles”. Dado que Joe realmente implementa el conjunto de instrucciones en el emulador, descubre casos especiales que la documentación original no cubría, por lo que recibo correos electrónicos de “qué pasaría si” todo el tiempo. ¿Me gustan estas cosas?
Como siempre, agradecemos sus comentarios, preguntas y sugerencias.