Paso 14: microprogramación
NOP: Ninguna operación. (0000)
LDA: Carga el acumulador con el valor en esta dirección. (0001)
ADD: Agregar el valor en la dirección especificada en el valor en el acumulador. (0010)
SUB: Restar el valor de la dirección especificada del valor en el acumulador. (0011)
STO: Almacenar contenido del acumulador en la dirección especificada. (0100)
SALIDA: Almacenar contenido del acumulador en el registro de salida para que el operador puede verlo. (0101)
JMP: Saltar a una cierta instrucción en memoria en la dirección especificada. (0110)
HLT: Detener el funcionamiento de la computadora. (0111)
Para determinar qué control palabras deban ser enviado para cada OP necesita saber qué bits que esté activo durante cada estado de T. Para mi ordenador organicé los pedacitos como sigue (un subrayado denota un poco de baja activa):
CE CO J MI RO II IO OI BI EO SU AI AO RI HLT X
CE - Count Enable (permite la entrada de reloj del contador de programa)
CO - reloj a habilitar
J - salto permiten
MI - entrada de MAR
RO - memoria de programa a
II - registro de instrucción en
IO - registro de instrucción a
OI - registro de salida en
BI - registro de B en
EO - salida de la ALU permiten
SU - reste
AI - acumulador en
AO - activar salida acumulador
RI - memoria del programa en
HLT - alto
X - no utilizado
Aquí son qué bits deben ser activos para cada estado de T para una instrucción dada, así como la dirección que debe ser en el control ROM:
Fetch:
0: CO, MI - el contador de programa salidas en el MAR
1: CE - el contador está habilitado para el siguiente pulso de reloj
2: RO, II - el byte de dirección se generan a través de RAM en el registro de instrucción
NOP:
3: X
4: X
5: X
LDA:
6: IO, MI - la dirección en el registro de instrucción se transfiere a la MAR (cuatro bits de menor)
7: RO, AI - el byte de dirección se generan a través de la memoria en el acumulador
8: X
AÑADIR:
9: IO, MI - la dirección en el registro de instrucción se transfiere a la MAR (cuatro bits de menor)
10: RO, BI - el byte de dirección se generan a través de la memoria en el acumulador
11: EO, AI - la suma del acumulador y el registro B se carga en el acumulador
SUB:
12: IO, MI - la dirección en el registro de instrucción se transfiere a la MAR (cuatro bits de menor)
13: RO, BI - el byte de dirección se generan a través de la memoria en el acumulador
14: AI, SU, EO - la diferencia del acumulador y el registro B se carga en el acumulador
STO:
15: IO, MI - la dirección en el registro de instrucción se transfiere a la MAR (cuatro bits de menor)
16: AO, RO, RI - el acumulador de salidas en la memoria de programa en la localización dirigida (RO y RI tiene que ser activo para escribir en el chip que he usado)
17: X
HACIA FUERA:
18: OI, AO - el acumulador de salidas en el registro de salida
19: X
20: X
JMP:
21: J, IO - el registro de instrucción carga el contador de programa con sus cuatro bits de menor
22: X
23: X
EQUIPO DE ALTO NIVEL:
24: HLT - se envía una señal de interrupción para el reloj
25: X
26: X
Su OP ROM contiene múltiplos de tres en cada ubicación de memoria. Esto es porque cada ciclo tiene tres Estados de ejecución. Por lo tanto, los datos tratados para su ROM OP serán:
0 - 3
1 - 6
2 - 9
3 - 12
4 - 15
5 - 18
6 - 21
7 - 24
Para programar su opción de chip tienes muchas opciones diferentes. Usted podría comprar un programador de EEPROM y EPROM, pero generalmente cuestan una cantidad considerable de dinero. Construí un programador en protoboard para mi ROM que es operado por los cables en movimiento y control de la escritura y lectura permiten pernos por botones. Más tarde simplificó el proceso y un programador de Arduino para mi NVRAM específicamente. Te adjunto el código que puede ser fácilmente modificado para programar casi cualquier paralelo chip de que usaría para este proyecto.