Conteúdos da Microrom (Versão 2.00 - 04/08/99):
Mudanças em relação à versão anterior: (V 1.3) 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 ocorrem.
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](00), 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 aparece, 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC IR <- MDR; 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; JZER | 01 010 100 100 1 0 0 0 |
04H | STA #,D: MAR <- PC; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC DATAMEM <- AC; R/W = 0; CE = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC MAR <- MDR; INC DATAMEM <- AC; R/W = 0; CE = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR + PC; INC DATAMEM <- AC; R/W = 0; CE = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC AC <- MDR; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR + PC; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC AC <- MDR + AC; LNZ = 1; LC = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR + AC; LNZ = 1; LC = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR + AC; LNZ = 1; LC = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR + PC; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR + AC; LNZ = 1; LC = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC C <- MDR \/ AC; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR \/ AC; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR \/ AC; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR + PC; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR \/ AC; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC AC <- MDR /\ AC; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR /\ AC; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR /\ AC; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR + PC; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC AC <- MDR /\ AC; LNZ = 1; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC PC <- MDR; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC PC <- MDR; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC PC <- PC + MDR; 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; INC (JV # ,D) R/W = 1; CE = 1; MDR <- DATAMEM; PC++; JCOND (JN # ,D) PC <- MDR; 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; INC (JV ,I) R/W = 1; CE = 1; MDR <- DATAMEM; PC++; JCOND (JN ,I) MAR <- MDR; INC (JZ ,I) R/W = 1; CE = 1; MDR <- DATAMEM; INC PC <- MDR; 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; INC (JV ,R) R/W = 1; CE = 1; MDR <- DATAMEM; PC++; JCOND (JN ,R) PC <- MDR + PC; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC RS <- PC; INC PC <- MDR; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC MAR <- MDR; INC R/W = 1; CE = 1; MDR <- DATAMEM; INC RS <- PC; INC PC <- MDR; 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; INC R/W = 1; CE = 1; MDR <- DATAMEM; PC++; INC RS <- PC; INC PC <- MDR + PC; 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; JZER | 01 111 011 101 0 0 0 0 |
87H | HLT: - | 00 111 111 000 0 0 0 0 |