Skip to content

About this page

On this page

DMA ​

Esta seção está em beta. Veja a nota na folha de referência.

O Direct Memory Access (DMA) move blocos de dados entre a RAM principal e os demais componentes do PS2 sem que o EE os copie manualmente. O GS, a VU1 e o IOP (via SIF) estão fora da memória do EE, então o DMA é como os dados chegam a eles.

Canais ​

Os canais definidos em ee/dma/include/dma.h:

CanalValorDireção
DMA_CHANNEL_VIF00EE → VU0
DMA_CHANNEL_VIF11EE → VU1
DMA_CHANNEL_GIF2EE (ou VU1) → GS
DMA_CHANNEL_fromIPU / DMA_CHANNEL_toIPU3 / 4A Image Processing Unit, que faz a decodificação MPEG2 que core/mpeg envolve (veja a folha de referência)
DMA_CHANNEL_fromSIF0 / DMA_CHANNEL_toSIF15 / 6EE ↔ IOP (veja EE, IOP e SIF)
DMA_CHANNEL_SIF27Um segundo caminho EE↔IOP, menos usado que SIF0 e SIF1
DMA_CHANNEL_fromSPR / DMA_CHANNEL_toSPR8 / 9Scratchpad RAM, uma memória pequena e rápida local ao EE

dmakit ​

Uma transferência DMA é descrita por um tag de DMA: um pequeno cabeçalho com a origem, o tamanho, a ação ao concluir e o próximo tag da cadeia. O dmakit (world) monta cadeias de tags, espera a conclusão e oferece padrões de transferência comuns.

Concorrência ​

As transferências DMA rodam concorrentemente com a CPU. Um buffer de origem não deve ser modificado nem reutilizado até que sua transferência termine. O GS ou a VU recebe o conteúdo da memória no momento em que o motor de DMA o lê, que pode diferir do conteúdo no momento da chamada.

Veja também ​