ZX Spectrum Contended Memory - ZX Spectrum Contended Memory

Parte do espaço de memória endereçável de 64 KB do ZX Spectrum é conhecido como memória contida. Com o resto da memória, o microprocessador Z80 é o barramento mestre exclusivo, portanto, ele lê e grava operando em sua velocidade total de barramento, mas o espaço de memória contido é compartilhado entre o ULA e o Z80, com o ULA tendo maior prioridade. A memória disputada ocupa os endereços 0x4000..0x7FFF do mapa de memória Z80 . Estes são os primeiros 16 KB de RAM na máquina de 48 KB e toda a RAM da máquina de 16 KB.

A contenção ocorre como resultado da leitura do ULA dos dados de exibição e atributos nesta RAM para produzir a exibição de vídeo da TV . A contenção, portanto, não ocorre durante o flyback horizontal, flyback vertical ou durante a borda da tela.

Os acessos a E / S também disputam se o ULA deve ler a memória disputada enquanto o Z80 acessa uma porta de E / S ULA. As portas de E / S ULA são aquelas com um endereço par (o bit 0 de endereço é 0).

O Z80 deve esperar sempre que o ULA precisar acessar a memória disputada antes de prosseguir com sua própria leitura ou gravação de memória disputada. O efeito para o usuário é que os programas que fazem uso de memória ou E / S de contenção são executados mais lentamente do que aqueles que os evitam.

Bug de neve

O ULA deve esperar a conclusão de uma leitura ou gravação do Z80 antes de parar o relógio do Z80 e acessar a memória; ele irá parar o relógio do Z80 apenas durante o primeiro ciclo de relógio de um ciclo de máquina .

Os primeiros Spectrums pressupõem que no máximo um acesso à memória disputada ocorrerá em um ciclo de máquina: isso não é verdade em ciclos de busca de instrução se o programador configurou a tabela de vetor de interrupção para cair dentro da área disputada. Nesse caso, o ULA se recusará a carregar seu endereço de vídeo e o byte de vídeo exibido será o que o processador estava lendo. A consequência disso é um ruído aleatório na tela ou 'neve'.

Como esse efeito não ocorria durante o funcionamento normal - exigia a intervenção deliberada do programador - raramente era visto, sendo usado apenas em alguns jogos [ quais? ] como um efeito gráfico especial .

Versões posteriores do Spectrum, incluindo todas as versões de 128kb, corrigem o bug .

O circuito

O ULA não usa o mecanismo de solicitação / concessão de barramento do Z80 para se tornar o barramento mestre durante seus acessos à memória em disputa. Em vez disso, estende o período alto da entrada do relógio Z80 para interromper toda a atividade do microprocessador. Embora seja menos elegante do que executar uma solicitação de barramento, ele obtém acesso à memória para menos relógios Z80. Isso elimina qualquer necessidade do ULA de ler os dados do display com antecedência, um benefício com os circuitos lotados no ULA completo.

O ULA se conecta diretamente aos ICs do sistema de memória, enquanto o Z80 se conecta a eles por meio de resistores de limite de corrente em série de isolamento. Isso permite que o ULA e a memória conduzam um ao outro enquanto o Z80 também controla a memória. O uso de resistores em vez de ICs de driver de barramento tristate reduz o custo do circuito, mas leva uma corrente de pino de E / S média mais alta do Z80, ULA e ICs de memória.

Referências

links externos