terça-feira, 13 de fevereiro de 2007

Fazendo Contas

Tomando por base uma maquina msx padrão, que insere um "wait state" a cada
ciclo M1, temos os seguintes tempos de execução (em ciclos de máquina):

INI,OUTI 16 ciclos +4 Wait states
INIR,OTIR 21+5 / 16+4
DJNZ 13+3 ou 10+2 na última iteração

Considerando então a transferência de 512 bytes (1 bloco) temos duas alternativas

Alternativa 1 - Loop automático (inicia com B=0):

inir [256*(26)-6] ciclos
inir [256*(26)-6] ciclos

Total: [256*(26)-6]*2 = 13300 ciclos para transferir 512 bytes (1/2Kbyte)

Muma máquina rodando a 3,579MHZ, temos:

Taxa = 3,5MHz * 1/2 / 13300 ciclos = 134,5KBytes/seg (~1,08 MBits/s)

Alternativa 2 - Loop semi automático (inicia com B=16):

b=16
loop:
INI
INI
...
INI (32 instruções INI seguidas)
DJNZ loop

[32*20+16]*16-4 = 10492ciclos, ou seja 170,6 kBytes/s (1,33 MBits/s)

Alternativa 3 - Loop semi automático (inicia com B=8):

b=8
loop:
INI
INI
...
INI (64 instruções INI seguidas)
DJNZ loop

[64*20+16]*8-4 => 172,66 kBytes/s (1,35 MBits/s)

(nota: 1Mbit=1024bits)

Conclusões:

A taxa de transferência esperada da interface HB-7000 para uma máquina MSX1 padrão
rodando a 3,579MHz gira em torno de 170kbytes/segundo.

Esta velociadade é praticamente a mesma das uma instruções de movimento de
memória LDI,LDIR (que consomem os mesmos tantos ciclos de máquina que os seus
paralelos para IO - INI/OUTI, INIR/OTIR)



Somente para complementar o assunto:


Assim que o cartão é energizado, ele deve receber pelo menos 74 pulsos de clock numa frequência máxima de 400KHz. A rotina abaixo é utilizada para gerar estes pulsos.


INI1: LD A,ALTCKH (2+7)
OUT (C),A (3+12)
LD A,ALTCKL (2+7)
OUT (C),A (3+12)
DJNZ INI1 (3+13, para b<>0)


O número de pulsos de clock gastos em cada instrução está entre parêntesis. Como uma máquina MSX padrão gera um "Wait State" a cada ciclo M1, o primeiro número corresponde àos ciclos de clock extras.

Temos então um total de 9+15+9+15+16=64 ciclos de clock gastos no loop. Isso resulta em uma frequência de Fpulsos=Fclk/64.

Então temos para:

Fclk= 3,579MHz, Fpulsos=55,9KHz

Fclck=8MHz. Fpulsos=125KHz.

Logo, esta rotina não precisa de ajuste para trabalhar em 8MHz.

Nenhum comentário: