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 |