Explorer × TK90X + TKMEM-128
Eletrônica

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 de interrupção

Uma fonte bastante frequente de distorção é a frequência de interrupção mascarável, muito empregado para temporizar a rotina de música, ser maior (60 Hz) no TK90X do que no computador europeu (50 Hz). Eu encontrei a rotina de interrupção no disassembly:

46849   PUSH HL        ; Preserva registradores.
        PUSH DE
        PUSH BC
        PUSH AF
        PUSH IX
        PUSH IY
        LD A,19        ; Seleciona banco de RAM 3.
        OUT (253),A
        CALL 49152     ; Chama sub-rotina em 49152.
        LD A,(46899)   ; Chaveia banco de RAM anterior.
        OUT (253),A
        POP IY         ; Recupera registradores.
        POP IX
        POP AF
        POP BC
        POP DE
        POP HL
        EI             ; Reativa as interrupções.
46878   RETN           ; Retorna.


Vi ainda que o espaço entre 46880 e 46898 estava vazio, por isso poderia ser usado por uma eventual alteração na rotina de interrupção. A rotina acima preserva os registradores na pilha, seleciona o banco de RAM 3, chama a sub-rotina 49152 que comanda o PSG AY-3-8912, chaveia de volta o banco de RAM original, recupera os registradores e retorna.

Resolvi testar a seguinte alteração:

        ...
        LD A,19
        OUT (253),A
        LD A,(IntFlag)   ; Pega flag de interrupção.
        CPL              ; Inverte os bits.
        AND A            ; Testa seu valor.
        LD (IntFlag),A   ; Guarda novo valor do flag.
        CALL Z,49152     ; Chama rotina somente se flag for 0.
        LD A,(46899)
        OUT (253),A

        ...

Como a sub-rotina em 49152 é chamada somente na metade das interrupções, na prática reduz a frequência para 30 Hz. No emulador funcionou, o ritmo da música ficou bem mais lento. Infelizmente no TK90X o problema no som persistiu, parecia estar gaguejando.

Vetores de interrupções

Quanto fui encontrar a rotina de interrupção, vi uma coisa que não gostei. No modo IM 2 do Z80, o registrador I define o byte mais significativo da tabela de vetores de interrupções; o byte menos significativo é tomado do barramento de dados que, em teoria deveria ser #FF (255), mas pode ser alterado pelo ULA. Para contornar este problema, deve-se construir uma tabela de 256 bytes com o endereço da rotina de interrupção (para mais detalhes, ver este artigo no TK-WIKI). Porém no Fairlight não se faz uma tabela, apenas a posição #B6FF é usada. Pensei que talvez fosse essa a fonte de problemas.

Como solução, criei uma tabela de vetores de interrupção e rotina que desvia para a rotina de interrupção, acrescentando uma linha no carregador BASIC:

80 POKE 65508,189: FOR n=48384 TO 48640: POKE n,189: NEXT n: POKE 49087,195: POKE 49088,1: POKE 49089,183

No TK90X esta alteração não trouxe nenhuma melhoria sonora.

Bug da porta 65533 da Explorer

Com exceção do modelo II, as Explorer não permitem ler a porta 65535, somente se pode escrever nela. Descrevi este bug numa postagem anterior. No emulador Fuse acionei o breakpoint que interrompe a emulação quando se faz a leitura desta porta com o comando:

br port write 65533
br port read 65533

O resultado foi negativo, Fairlight não lê esta porta. 

E agora ... ?

A última hipótese que ainda resta foi sugerida por Alexandre em seu comentário nesta postagem: a frequência de clock da Explorer é maior que o do PSG AY-3-8912 do Spectrum 128, causando problemas no som. Se a hipótese estiver correta, a interface AY interna do Eduardo Luccas poderia ser a solução, pois usa o mesmo esquema do Melodik.

O que era para ser uma adaptação simples, tornou-se uma verdadeira dor de cabeça.

Atualização em 10/11/2012: corrigido o comando do debugger para breakpoint da leitura da porta 65533. Valeu, Danjovic, por avisar!



loading...

- Dica Tv Electronia 20nt Chassis 11ak30
Defeito--Não liga. Led vermelho aceso. Ao tentar ligar, o led passa a verde mas, no               mesmo instante, o led volta para vermelho e a fonte da tv não arma.Valores         ...

- Dica Tvs Panasonic Tx-25xd3e Chassis Euro 2m
Defeito--Este  tv estava em protecção, trazia o transístor de saída de linhas (2SD1577-               LB) em curto. Depois de o substituir, o tv arrancou apresentando o seguinte       ...

- Detecção De Ram 48/128
Conforme tinha prometido na postagem sobre incompatibilidade do Bubble Bobble, eu vou mostrar a rotina de detecção de tamanho de RAM 48/128K que elaborei na ocasião.  A ideia era fazer uma rotina que não altere o conteúdo da RAM a ser testada;...

- 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...

- Thundercats V. 2 Para Basic 128
Mal acabei de lançar uma adaptação do Thundercats para Beta e TKMEM-128 e estou com a versão 2. A versão anterior tinha um problema: não consegue carregar a partir do BASIC 128, portanto tinha que dar um 'USR 0' antes. Na versão 2 não...



Eletrônica








.