O cache é uma área da memória muito rápida que nós encontramos no processador do PSP.
De fato é o único componente que funciona realmente na velocidade do processador (222 MHz),
as outras áreas (como a RAM, ou o VRAM) são bem mais lentas
Quando você lê ou escreve dados em algum lugar, de fato este é escrito no Cache,
e não diretamente na memória.
Desta forma se você precisar resgatar esta informação mais tarde, as mesmas serão
enviadas imediatamente do cache, porque é rápido.
Os dados são arquivados no cache (64 bytes de cada vez) e quando este está cheio,
os dados mais velhos são removidos do cache (neste momento é escritos na RAM) para que se
tenha espaço para os novos dados.
Geralmente este processo é transparente: você não escolhe quais dados vão para o cache,
isto é feito por conta própria.
Você não teria que saber que ele existe, e tudo seria maravilhoso...
se fosse tão simples assim.
No PSP, o processador não é a única coisa que pode alcançar todos os componentes, como a RAM.
Por exemplo, o processador gráfico (formalmente GE no PSP, Graphic Engine, que eu chamarei de GPU como para os outros consoles) têm também acesso à RAM
Se você o quiser extrair uma imagem, você tem apenas que escrever a imagem na RAM (ou em VRAM) e pedir para extrai-la.
Mas, por causa do cache, não é possível, porque a imagem não está realmente na RAM, e sim no cache do processador!
Obviamente, o GPU tem acesso somente a RAM, e não ao cache do processador.
Se você fizer isto,você terá uma imagem corrompida porque parte dela está no cache e o restante na RAM
(32 kB, somente a parte mais velha estára na RAM, a outra estará no cache).
Para evitar isto é necessário remover a imagem do cache antes de solicitar a GPU para extraí-la.
Também necessário quando usar palettes.
Veja as funções a seguir:
void oslUncacheImage(OSL_IMAGE *img);
void oslUncachePalette(OSL_PALETTE *pal);
E em uma maneira mais geral, remove um grupo de dados que está no cache:
void oslUncacheData(void *data, size_t size);
É necessário ter em mente que está operação é pesada nos termos de desempenho, caso você venha utilizar,lembre-se que se você remover seus dados do cache, você o faz parecer inútil, e o desempenho também irá cair.
Sobre desempenhos, é necessário ter em mente que no PSP, o cache é 32 kB para dados e 32 kB para o código. Para o código, é melhor já que a parte principal do jogo é menor que 32 kB, assim estará completa no cache e irá rodar rapidamente, porque não será necessário ler a RAM (que é muito lenta) e você terá o máximo velocidade do processador. Isto também depende da otimização do código, para se obter melhor velocidade, utilizar laços por exemplo terá talvez o efeito inverso, porque mesmo se executado mais rapidamente, o irá fazer grande, reduzindo o desempenho do cache. Tome cuidado, porque fatores minúsculos podem fazer diferenças grandes (por exemplo, movendo uma função antes ou depois outra no código pode fazer a vitória ou perder 10 em 20% do desempenho, visto que nada mudado altera a ordem).