Conteúdos da Microrom (Versão 2.01 - 06/06/2000):
Mudanças em relação à versão anterior: (V 2.00) 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 anterior apenas mudanças de comentários e documentação ocorrem. Em particular, mudou a notação para representar microoperações que lidam com
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=INC |
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 |