DCNunes
General de Pijama
Registrado
1.8K Mensagens
404 Curtidas
Alguem conhece algum site com exemplos (codigo-fonte) em Assembly para Z80 ??
[]'s
Sites mesmo eu não conheço, mas talvez esse seja um ponto de partida pra vc:
http://www.programmersheaven.com/zone5/mh9.htm
Falou!
DCNunes
General de Pijama
Registrado
1.8K Mensagens
404 Curtidas
Alguem conhece algum site com exemplos (codigo-fonte) em Assembly para Z80 ??
[]'s
Sites mesmo eu não conheço, mas talvez esse seja um ponto de partida pra vc:
http://www.programmersheaven.com/zone5/mh9.htm
Falou!
DCNunes
General de Pijama
Registrado
1.8K Mensagens
404 Curtidas
Que engraçado...tentei postar duas vezes e deu erro. Quando ia postar pela terceira vi que as msgs estavam aqui. Mas o contador continua em 0.
Estou escrevendo isso pra ver se muda.
jqueiroz
Cyber Highlander
Registrado
104K Mensagens
5.7K Curtidas
Alguem conhece algum site com exemplos (codigo-fonte) em Assembly para Z80 ??
[]'s
Já tentou no google?
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o
Blog do Zekke
jqueiroz
Cyber Highlander
Registrado
104K Mensagens
5.7K Curtidas
Cara, saudade não tem idade... bons tempos aqueles, era "LD HL,BC" pra cá e "JRNZ Offset" pra lá...
Pena que já me desfiz dos meus livros... mas ainda lembro da estrutura desse processador... um clássico, diga-se de passagem...
Registradores de 16 bits: PC, SP, AF, BC, DE, HL
Registradores de 8 bits: A, F, B, C, D, E, H e L;
Os registradores de 8 bits eram as metades alta e baixa dos registradores de 16 bits com o mesmo nome, assim: BC == B*256+C.
PC era o program counter; ele apontava pra próxima instrução a ser executada.
SP era o Stack pointer. O Stack era a posição de memória onde se salvava, por exemplo, o PC antes de se fazer um "Call" (chamada de subrotina). O SP apontava, se não me engano, pra primeira posição livre do stack. Você podia empilhar (PUSH) e desempilhar (POP) os registradores de 16 bits pra salvá-los e recuperar o valor depois. Quando se fazia um PUSH, o SP era subtraído de 2; qdo fazia um POP, era incrementado de 2.
Os registradores B, C, D e E eram de uso mais ou menos geral, mas o A era o acumulador, e algumas operações aritméticas só podiam ser feitas nele. O F era o registrador dos flags, e seu conteúdo mudava conforme o estado do processador e os resultados das operações. Eu só lembro dos 3 flags mais importantes: Carry (estouro de operação aritmética, comparação), Zero (resultado igual a zero) e sub-carry (overflow do primeiro nibble [4 bits] pro segundo, que era usado em operações com números BCD).
O controle de execução era feito por instruções de JUMP (absoluto), JR (jump relativo), CALL (absoluto) e CR (call relativo). Todos esses tinham uma opção com teste (ex. JZ, JRNZ, CC, etc). Pra chamar o sistema operacional podia se usar as instruções de interrupção de software (INT). Pra retornar ao chamador de sub-rotina (CALL), usava-se o RET. Pra retornar de interrupção, usava-se o RETI. A instrução INT era quase igual a um CALL, mas além de ter endereço fixo, ela entregava o controle à subrotina com as interrupções desabilitadas (DI), e o programador tinha que rehabilitá-las (EI) se fosse o caso. Pensando bem, acho que esse era um dos bits do flag, tb (mas só de leitura). A principal diferença do RET pro RETI é que ele restaurava o valor anterior do estado das interrupções.
O conjunto de instruções do Z80 era um conjunto aumentado de um outro processador mais antigo, o intel (olha ela aí...) 8080. Haviam no Z80 algumas instruções novas, principalmente pra manipular memória. Uma delas era o LHLD, que (se eu não me engano... talvez fosse LDHL) carregava o registrador indicado com o conteúdo da palavra de 16 bits apontada pelo registrador HL. Mas daqui em diante, a memória fica muito nebulosa.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o
Blog do Zekke