segunda-feira, 9 de abril de 2007

Testes no Turbo-R

Durante o final de semana eu e o Igor fizemos uns testes no Turbo-R dele. Em modo MSX2, o circuito funcionou corretamente, mas em modo TURBO, o cartão não respondia.

Investigamos até encontrar a causa: O Turbo-R, em modo TURBO, executa internamente as instruções do Z80 com um "clock" maior, mas mantém no barramento externo os mesmos 3,5MHz, e por isso, executa a próxima instrução OUTI/INI antes que o byte da instrução anterior tenha sido serializado.

Em números:
A 3,58MHz, um período de Clock dura 280ns. Para serializar 8 bits são necessários pelo menos 2,24us, e o intervalo de tempo entre duas instruções OUTI/INI é de 16+4(WS) ciclos de clock, ou seja, 5,6us.

No Turbo-R em modo Turbo, o intervalo (medido no osciloscípio) entre duas instruções OUTI/INI consecutivas era de apenas 1,7uS. (Estranho pois este valor corresponde a 11,764Mhz - considerando 20 instruções por ciclo de clock)

Ou seja, Eu precisaria de no mínimo 2,24us entre uma instrução e outra, mas so tinha 1,7us. Para confirmar este raciocínio, fizemos um "driver" em Basic pra inicializar o cartão, rodando modo turbo, e o cartão respondeu corretamente.

Conclusões:
Para o circuito funcionar no Turbo-R, Duas abordagens são possíveis:
  • Criar um "driver" específico para o Turbo R
  • Aumentar o "clock" do gerador de "clock" automático.

A criação de um "driver" específico além de não ser uma solução elegante, pode até trazer perdas na taxa de transferência. A outra opção, aumentar o "clock" pode ser conseguida através de um oscilador e um sincronizador, ou de um dobrador de "clock".

Embora o dobrador de clock não aumente a taxa de transferência num MSX1/2, no Turbo R ela sobe consideravelmente, pois transferir um byte a cada 1,7us equivale a uma taxa de pico teórica de 588Kbytes/segundo, ou aproximatamente 4,6Mbits/segundo (no MSX1/2 o pico teórico máximo é de 178Kbytes/s ou 1,4Mbits/s)


Fizemos algumas experiências com um dobrador, usando um 74LS86 (Quad XOR). O dobrador funcionou corretamente, mas por algum motivo que não deu ainda tempo de investigar, a contagem automática de pulsos se encerra no sétimo pulso, em vez do oitavo.



Dobrador de "clock"

Um comentário:

Luciano disse...

Daniel, atente-se para uma coisa, o Turbo-R tem 3 modos específicos:

Z80
R800-ROM
R800-DRAM

Modo Z80 dispensa comentários. Em modo ROM, todo acesso ao BIOS é feito diretamente da ROM, mais lenta, quando é passado para o modo DRAM é feito um shadow do BIOS para a RAM e esta é colocada no lugar da ROM, o que provoca um aumento de velocidade para utilizar as instruções e rotinas contidas no BIOS.

Seria importante notar qual foi o modo R800 que vocês usaram, e se as suas rotinas fazem alguma acesso ao BIOS do MSX, pois pode dar diferença.