Modo de interrupção 2
Eletrônica

Modo de interrupção 2


Interrupção para o Z80 refere-se a um evento em que o processamento normal é interrompido, para que uma rotina de serviço de interrupção (ISR - Interrupt Service Routine) seja executada. Existem dois tipos de requisição de interrupção neste microprocessador, uma é a interrupção mascarável (MI) e outra é a não mascarável (NMI - non-maskable interrupt). 

Fonte: El wiki de speccy.org
Existem 3 diferentes modos de definir ISR para interrupções mascaráveis no Z80, sendo que a primeira, IM 0 (modo de interrupção 0), praticamente não tem utilidade na programação do TK90X. O modo padrão neste computador é o IM 1 em que, cada vez que a ULA envia um sinal no pino /INT do Z80 (que ocorre 60 vezes a cada segundo), o processamento é interrompido e passa-se a executar sub-rotina da ROM no endereço 56 (#38 em hexadecimal). Esta sub-rotina faz a varredura do teclado e a atualização da variável de sistema FRAMES (ou TVCOUNT).

O IM 2 é o modo mais poderoso, pois permite a criação de uma ISR própria. Seu funcionamento é relativamente complexo. Quando uma requisição de interrupção é aceita, o Z80 espera que algum periférico coloque um valor de 8 bits (1 byte) no barramento de dados. Depois de fazer a leitura deste byte, ele é juntado com os 8 bits do registrador I para formar um endereço de 16 bits (endereço do vetor de interrupção) que pode ser calculado como: 
Endereço do vetor de interrupção = 256×I+(byte lido no barramento)

Porém este endereço ainda não é o da rotina a ser executada; ela aponta para a posição da memória em que este endereço se encontra. Portanto a ideia é que exista uma tabela (vetor) de endereços de rotinas ISR na memória, cujo valor é selecionado pelo periférico que fez a requisição. No caso do TK90X, a ULA não coloca um valor no barramento de dados e seria esperado que o valor lido pelo Z80 seja 255 (#FF). Porém isto não é seguro, pois pode ser que um outro periférico coloque algum valor espúrio no barramento. Portanto o recomendável é se construir um vetor em que todos os endereços de ISR sejam sempre o mesmo e simétrico.

Por exemplo, considerando que I=254 (#FE), deve-se construir uma tabela entre 65024 (#FE00) a 65280 (#FF00). Se for colocado 257 bytes todos com valor 253 (#FD), o endereço de ISR será 65021 (#FDFD). A partir deste endereço, o melhor é colocar uma instrução 'JP xxxx' que realiza salto para a ISR propriamente dita.

Para preparar toda a infraestrutura na memória para usar o IM 2, há uma rotina que tenho visto repetidamente em jogos e que também fiz uso em demos que produzi. Apesar de não ser inédito, um arquivo fonte com esta rotina economiza tempo na hora de se escrever um programa. Por isto criei IM2.asm que poderá ser utilizado livremente para desenvolver programas para o TK90X, disponível neste link.



loading...

- Incompatibilidades Do Megalomania
Na reconversão do Megalomania, eu tinha prometido contar sobre as incompatibilidades deste demo no TK90X. Nesta postagem estou cumprindo a promessa. Parte 1 Já na 1ª parte o demo trava na tela abaixo, esperando entrada pelo teclado. Este é o sintoma...

- Descoberto Segundo Bug Na Explorer
Wesley Camargo (autor desta mod) alertou da incompatibilidade da Explorer dele com os programas Sokoban e New Wave. No equipamento dele, um bug descoberto anteriormente já teria sido consertado.  O Sokoban nem rodava, resultando em reset, e o demo...

- Explorer × Tk90x + Tkmem-128
Parece que o Fairlight 128, que roda no TK90X graças ao TKMEM-128, não se dá muito bem com a Explorer. O som fica bastante distorcido, bem diferente do que ouço no emulador. Fiz algumas tentativas para entender o que está acontecendo. Frequência...

- Bloody Paws Sem Efeito "snow"
Em postagem anterior relatei que consegui adaptar o jogo Bloody Paws para a Beta 48, porém com bug conhecido como efeito "snow":  As duas partes do jogo (Side 1 e Side 2)  são afetadas, mas consegui consertar ambas. A origem do bug é o uso...

- Bloody Paws E "snow"
Prosseguindo na adaptação de jogos do TK90X com som para a Explorer, desta vez consegui transferir Bloody Paws para disquete Beta 48. Tudo funcionando bem no emulador, resolvi rodar o jogo no meu TK mas o resultado não era bem o que eu esperava: ...



Eletrônica








.