Loading AI tools
Da Wikipédia, a enciclopédia livre
O Zilog Z80 é um microprocessador de 8 bits projetado e vendido pela Zilog a partir de julho de 1976. Foi amplamente usado, tanto em microcomputadores desktop quanto em sistemas embarcados, centrais telefônicas e para fins militares. O Z80, seus derivados e clones constituem uma das famílias de UCPs mais usadas em todos os tempos e, juntamente com a família MOS Technology 6502 dominou o mercado de microcomputadores de 8 bits de fins da década de 1970 até meados dos anos 1980.
Este artigo ou secção contém uma lista de referências no fim do texto, mas as suas fontes não são claras porque não são citadas no corpo do artigo, o que compromete a confiabilidade das informações. (Agosto de 2016) |
Este componente que tem largura do barramento (bus) de dados de 8 bits, capaz transferir 1 byte de cada vez, e do barramento de endereços de 16 bits, que lhe permite endereçar 65536 posições de memória, é responsável pelo processamento no TK90X, um computador de 8 bits fabricado no Brasil, pela Microdigital Eletrônica, que utilizava a versão Z80A, que operava com frequência de clock de até 4MHz, em encapsulamento DIP de 40 pinos.
Embora a Zilog tenha feito tentativas precoces com versões avançadas da arquitetura Z80 para minicomputadores (Z800 e Z280), estes chips nunca obtiveram sucesso. A empresa também tentou entrar no mercado de workstations com seus Z8000 e Z80000 de 32 bits (não relacionados com o Z80). Nos últimos anos, a Zilog mudou seu foco para o crescente mercado de sistemas embarcados (para o qual o Z80 original e o Z180 foram projetados) e a mais recente família de microcontroladores Z80-compatível, a totalmente pipelined eZ80 de 24 bits com uma faixa de endereçamento linear de 16 MiB, tem sido introduzida com sucesso juntamente com o os produtos Z180 e Z80 menos sofisticados.
A Zilog licenciou o núcleo do Z80 para qualquer empresa desejosa de produzir o dispositivo sem cobrança de royalties, embora muitos fabricantes do Leste Europeu e da Rússia tenham feito cópias não-autorizadas. Isto permitiu que o produto de uma pequena empresa conquistasse aceitação no mercado mundial, visto que empresas muito maiores, como a Toshiba, começaram a fabricar os chips. Consequentemente, a Zilog tem produzido menos de 50% dos Z80s desde sua criação.
O Z80 surgiu quando Federico Faggin, depois de trabalhar no projeto do 8080, deixou a Intel no final de 1974 para fundar a Zilog com Ralph Ungermann, e por volta de julho de 1976, já tinham o Z80 à venda no mercado. Foi projetado para ser binariamente compatível com o Intel 8080, de forma que a maior parte do código 8080 podia ser executado sem alterações nele, principalmente o SO CP/M. Quem também contribuiu para o desenvolvimento do Z80 foi Masatoshi Shima, co-criador dos microprocessadores 4004 e 8080 fabricados pela Intel.
A Intel tentou superar o Z80 lançando uma versão melhorada do microprocessador de 8-bits, o 8085, mas a superioridade do Z80 fez com que a Intel desistisse do projeto. Sendo assim, o 6502 e o Z80, acompanhados pelo 6800, mantiveram-se como os mais representativos microprocessadores de 8-bits do período. Restou à empresa trabalhar no lançamento do primeiro microprocessador de 16-bits, o 8086.
O Z80 possui 208 bits de memória interna acessível ao programador, que são organizados na forma de registradores. Existem 2 conjuntos (principal e alternativo) de registradores acumulador (A, A') e de flags (F, F'), 2 conjuntos (principal e alternativo) de registradores de uso geral (B, B', C, C', D, D', E, E', H, H', L e L') e 6 registradores especiais (I, R, IX, IY, SP e PC). A Tabela 1 mostra de forma resumida os registradores do Z80. Apesar de ser possível criar uma arquitetura em que todos os registradores possam ser envolvidas em qualquer operação e instrução, nos microprocessadores mais antigos isto não era feito para economizar o número de transistores na pastilha de silício. Assim, certas instruções são específicas para alguns registradores, ou até a um único especificamente.
O acumulador ou A é um registrador que, além de poder ser usado de forma geral, é especializado em armazenar resultados de operações lógicas e aritméticas de 8 bits. O registrador de flags ou F serve para sinalizar os estados decorrentes de uma instrução executada; cada bit deste registrador tem uma finalidade específica. Os dois registradores são tratados como par AF somente no armazenamento da pilha do Z80 ou na troca com conjunto alternativo AF'.
Os registradores de uso geral B, C, D, E, H e L podem ser usados separadamente como registradores de 8 bits, ou em pares (BC, DE e HL) de 16 bits. Apesar de serem de uso geral, cada registrador ou par desempenham certas tarefas peculiares em algumas instruções. O registrador B e o par BC são usados como contadores, e o par BC é empregado também para selecionar porta de entrada e saída. O par DE é empregado como ponteiro para transferência de blocos de bytes da memória. O par HL é empregado em um grande número de instruções como ponteiro, são usados em instruções aritméticas de 16 bits, além de poder armazenar endereço para um salto incondicional.
Os registradores alternativos não são diretamente acessíveis pelas instruções, exceto por EX AF, AF' e EXX, que fazem as trocas entre os registradores principais e os alternativos. Esta era uma forma mais rápida de preservar os valores dos registradores, quando se compara com armazenamento na pilha.
O registrador especial I é empregado em interrupção, quando no modo IM 2. O registrador especial R é empregado no refrescamento de RAM dinâmica. O PC ou contador de programa aponta para o próximo endereço em que o Z80 deve buscar o código de operação da instrução a executar. O SP é o ponteiro que aponta para o endereço do topo da pilha do Z80. E os registradores de indexação IX e IY fazem praticamente as mesmas operações de HL, mas podem apontar para uma posição de memória com a adição de uma constante (índice), o que é útil para construção de matrizes e tabelas.
Além destes registradores, que são mais explícitos ao programador, há ainda alguns flip-flops que armazenam o modo de interrupção ou se as interrupções mascaráveis estão habilitadas (IFF).
O Z80 conta com um conjunto de 178 tipos diferentes de instruções, divididas nas seguintes categorias:
O código de operação de uma instrução constitui-se de um ou mais bytes, podendo incluir os operandos. Dentro de 8 bits é possível haver 256 instruções, entretanto 252 correspondem propriamente a instruções reais; as demais são usados como prefixos, que obrigam o Z80 buscar no próximo byte qual instrução deve ser executada. Os prefixos são #CB (203), #DD (221), #ED (237) e #FD (253). Em teoria isso permitiria a inclusão de mais 4 conjuntos de 256 instruções, isto é, mais 1 024 instruções, porém na prática isto não ocorre pois nem todas as combinações de opcodes são funcionais. Algumas dessas combinações não são oficialmente reconhecidas, isto é, são omitidas da documentação da Zilog, entretanto são funcionais e tem sido usadas por muitos programadores.
Ilustração de quatro sintaxes usando amostras equivalentes ou semelhantes, como armazenar e carregar instruções.
Datapoint 2200 & i8008 |
i8080 |
Z80 |
i8086/i8088 | |
Antes ~1973 |
~1974 |
1976 |
1978 |
Significado |
LBC |
MOV B,C |
LD B,C |
MOV BL,CL |
colocar o valor do registrador C no registrador B |
-- |
LDAX B |
LD A,(BC) |
MOV AL,[BX] |
colocar o valor no endereço apontado pelo registrador no BC no registrador A |
LAM |
MOV A,M |
LD A,(HL) |
MOV AL,[BP] |
colocar o valor no endereço apontado pelo registrador HL no registrador A |
LBM |
MOV B,M |
LD B,(HL) |
MOV BL,[BP] |
colocar o valor no endereço apontado pelo registrador HL no registrador B |
-- |
STAX D |
LD (DE),A |
MOV [DX],AL |
colocar o valor do registrador A no endereço apontado pelo registrador DE |
LMA |
MOV M,A |
LD (HL),A |
MOV [BP],AL |
colocar o valor do registrador A no endereço apontado pelo registrador HL |
LMC |
MOV M,C |
LD (HL),C |
MOV [BP],CL |
colocar o valor do registrador C no endereço apontado pelo registrador HL |
LDI 56 |
MVI D,56 |
LD D,56 |
MOV DL,56 |
colocar o valor 56 no registrador D |
LMI 56 |
MVI M,56 |
LD (HL),56 |
MOV byte ptr [BP],56 |
colocar o valor 56 no endereço apontado pelo registrador HL |
-- |
LDA 1234 |
LD A,(1234) |
MOV AL,[1234] |
colocar o valor do endereço 1234 no registrador A |
-- |
STA 1234 |
LD (1234),A |
MOV [1234],AL |
colocar o valor do registrador A no endereço 1234 |
-- |
-- |
LD B,(IX+56) |
MOV BL,[SI+56] |
colocar o valor no endereço(base)apontado pelo registrador IX+56(offset) no registrador B |
-- |
-- |
LD (IX+56),C |
MOV [SI+56],CL |
colocar o valor do registrador C no endereço apontado pelo registrador S +56 (offset) |
-- |
-- |
LD (IY+56),78 |
MOV byte ptr [DI+56],78 |
colocar o valor 78 no endereço apontado pelo registrador IY +56 (offset) |
-- |
LXI B,1234 |
LD BC,1234 |
MOV BX,1234 |
colocar o valor 1234 no registrador BC |
-- |
LXI H,1234 |
LD HL,1234 |
MOV BP,1234 |
colocar o valor 1234 no registrador HL |
-- |
SHLD 1234 |
LD (1234),HL |
MOV [1234],BP |
colocar o valor do registrador HL no endereço 1234 |
-- |
LHLD 1234 |
LD HL,(1234) |
MOV BP,[1234] |
colocar o valor do endereço 1234 no registrador HL |
-- |
-- |
LD BC,(1234) |
MOV BX,[1234] |
colocar o valor no endereço 1234 no registrador BC |
-- |
-- |
LD IX,(1234) |
MOV SI,[1234] |
colocar o valor no endereço 1234 no registrador IX |
Além da alimentação de +5 V (pino 11) e 0 V (pino 29), os pinos do Z80 fornece ou recebe os sinais necessários para o seu funcionamento e para se comunicar com os periféricos. Estes sinais são o clock, os barramentos (bus) de dados e de endereços e os sinais de controle do Z80.
O microprocessador comunica-se com os periféricos através do barramento de dados, do barramento de endereço e dos sinais de controle. No Z80, os periféricos são divididos em dois tipos:
Durante as operações com memória, o endereço da memória a ser acessada está no barramento de endereços, na faixa entre 0 a 65535 ou #0000 a #FFFF (64 kb), o barramento de dados contém 1 byte (8 bits) a ser transferido e o sinal /MREQ fica em nível baixo.
Segundo a Zilog, os 8 bits menos significativos do barramento de endereços (A0-A7) especifica uma das 256 portas nas operações com dispositivos de entrada e saída. Entretanto todos os 16 bits ficam disponíveis no barramento de endereços, o que permite teoricamente selecionar 65536 dispositivos. Assim, do ponto de vista dos sinais do Z80, uma operação de entrada (IN) e saída (OUT) é muito semelhante a um acesso à memória, exceto por /IORQ ficar em nível baixo ao invés do /MREQ.
O fluxo do dado é especificado pelo sinal /RD que, em nível baixo, implica transferência do periférico para o Z80 (operação de leitura) e pelo sinal /WR que, em nível baixo, implica transferência do Z80 para o periférico (operação de escrita).
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.