Conteúdos da MicroROM (Versão 2.02 - 15/04/2004):

Mudanças em relação à versões anteriores: (V 2.00/2.01) O código da MicroROM é absolutamente idêntico, pois a mudança ocorrida foi o acréscimo de mais uma instrução de salto condicional JV e mais um qualificador, V ao processador Cleópatra. Como a microprogramação de todos os saltos condicionais é idêntica, pois a diferenciação é feita apenas no seqüenciador, nenhuma alteração da MicroROM se faz necessária. Ou seja, em relação à versão 2.00 apenas mudanças de comentários e documentação ocorrem. Em particular, mudou a notação para representar microoperações que lidam com microcomandos ativos durante exatamente um ciclo (aqueles que não provocam escrita em algum registrador, como CE=1, ou N=INC). DA versão 2.01 para a 2.02 comentários foram completados e um pequeno erro foi corrigido na descrição em linguagem de micromontagem na linha 69H. Outra observação é que na versão atual da MicroROM , a última linha jamais é executada, pois o seqüenciador tranca após a busca da instrução HLT, sem jamais executar esta linha. Uma versão futura da MicroROM deverá eliminar esta linha.

Observação importante: este versão da MicroROM é compatível com a versão 2.00 e seguintes da documentação Cleópatra.

A ordem dos campos na coluna binária da tabela é N[1:0], OP_ULA[2:0](011), WRITE_REG[2:0](111), READ_REG[2:0](000), LNZ(0), LCV(0), RW(0), CE(0). Após cada campo pode aparecer, entre parênteses, o valor por omissão (default), caso na segunda coluna da tabela nada seja especificado para o campo em questão. Sempre que houver uma operação com registradores especificada, os campos OP_ULA, WRITE_REG e READ_REG estão implicitamente definidos.  

End

Descrição das Microinstruções (1 por linha)

Tradução em bits

00H Busca:    MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          IR <- MDR; N=LOAD
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
10 100 010 001 0 0 0 0
03H NOT:      AC <- ~AC; LNZ=1; N=JZER 01 010 100 100 1 0 0 0
04H STA #,D:  MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          DATAMEM <- AC; R/W=0; CE=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
01 111 111 100 0 0 0 1 
08H STA ,I:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          MAR <- MDR; N=INC 
          DATAMEM <- AC; R/W=0; CE=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
00 100 000 001 0 0 0 0 
01 111 111 100 0 0 0 1 
0EH STA ,R:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR + PC; N=INC 
          DATAMEM <- AC; R/W=0; CE=1; N=JZER
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 000 000 111 0 0 0 0 
01 111 111 100 0 0 0 1 
12H LDA #:    MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          AC <- MDR; LNZ=1; N=JZER
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
01 100 100 001 1 0 0 0
15H LDA ,D:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 100 100 001 1 0 0 0
1AH LDA ,I:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 100 100 001 1 0 0 0
21H LDA ,R:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR + PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 000 000 111 0 0 0 0 
00 111 001 000 0 0 1 1 
01 100 100 001 1 0 0 0
26H ADD #:    MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          AC <- MDR + AC; LNZ=1; LC=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
01 000 100 110 1 1 0 0
29H ADD ,D:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR + AC; LNZ=1; LCV=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 000 100 110 1 1 0 0
2EH ADD ,I:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR + AC; LNZ=1; LCV=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 000 100 110 1 1 0 0
35H ADD ,R:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR + PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR + AC; LNZ=1; LC=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 000 000 111 0 0 0 0 
00 111 001 000 0 0 1 1 
01 000 100 110 1 1 0 0
3AH OR #:     MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          AC <- MDR \/ AC; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
01 101 100 110 1 0 0 0
3DH OR ,D:    MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR \/ AC; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 101 100 110 1 0 0 0
42H OR ,I:    MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR \/ AC; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 101 100 110 1 0 0 0
49H OR ,R:    MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR + PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR \/ AC; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 000 000 111 0 0 0 0 
00 111 001 000 0 0 1 1 
01 101 100 110 1 0 0 0
4EH AND #:     MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          AC <- MDR /\ AC; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
01 110 100 110 1 0 0 0
51H AND ,D:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR /\ AC; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 110 100 110 1 0 0 0
56H AND ,I:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR /\ AC; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 110 100 110 1 0 0 0
5DH AND ,R:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR + PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          AC <- MDR /\ AC; LNZ=1; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 000 000 111 0 0 0 0 
00 111 001 000 0 0 1 1 
01 110 100 110 1 0 0 0
62H JMP #,D:  MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          PC <- MDR; N=JZER 
00 111 000 011 0 0 0 0 
00 111 001 000 0 0 1 1 
01 100 011 001 0 0 0 0
65H JMP ,I:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          PC <- MDR; N=JZER 
00 111 000 011 0 0 0 0 
00 111 001 000 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 100 011 001 0 0 0 0
6AH JMP ,R:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          PC <- PC + MDR; N=JZER 
00 111 000 011 0 0 0 0 
00 111 001 000 0 0 1 1 
01 000 011 111 0 0 0 0
6DH JC # ,D:  MAR <- PC; N=INC 
(JV # ,D) R/W=1; CE=1; MDR <- DATAMEM; PC++; N=JCOND 
(JN # ,D) PC <- MDR; N=JZER  
(JZ # ,D) 
00 111 000 011 0 0 0 0 
11 001 110 011 0 0 1 1 
01 100 011 001 0 0 0 0 
70H JC ,I:    MAR <- PC; N=INC 
(JV ,I)   R/W=1; CE=1; MDR <- DATAMEM; PC++; N=JCOND 
(JN ,I)   MAR <- MDR; N=INC 
(JZ ,I)   R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          PC <- MDR; N=JZER 
00 111 000 011 0 0 0 0 
11 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
01 100 011 001 0 0 0 0
75H JC ,R:    MAR <- PC; N=INC 
(JV ,R)   R/W=1; CE=1; MDR <- DATAMEM; PC++; N=JCOND 
(JN ,R)   PC <- MDR + PC; N=JZER 
(JZ ,R)
00 111 000 011 0 0 0 0 
11 001 110 011 0 0 1 1 
01 000 011 111 0 0 0 0 
78H JSR # ,D: MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          RS <- PC; N=INC 
          PC <- MDR; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 111 101 011 0 0 0 0 
01 100 011 001 0 0 0 0
7CH JSR ,I:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          MAR <- MDR; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; N=INC 
          RS <- PC; N=INC 
          PC <- MDR; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 100 000 001 0 0 0 0 
00 111 001 000 0 0 1 1 
00 111 101 011 0 0 0 0 
01 100 011 001 0 0 0 0
82H JSR ,R:   MAR <- PC; N=INC 
          R/W=1; CE=1; MDR <- DATAMEM; PC++; N=INC 
          RS <- PC; N=INC 
          PC <- MDR + PC; N=JZER 
00 111 000 011 0 0 0 0 
00 001 110 011 0 0 1 1 
00 111 101 011 0 0 0 0 
01 000 011 111 0 0 0 0
86H RTS:      PC <- RS; N=JZER  01 111 011 101 0 0 0 0
87H HLT:      -  00 111 111 000 0 0 0 0