Escolar Documentos
Profissional Documentos
Cultura Documentos
Simulação ou Emulação?
Se você pensar, o conceito de emulação se assemelha um pouco com o de
simulação, onde algo é imitado por meio de outra coisa diferente, com o intuito de
alcançar o mesmo funcionamento. Então por exemplo: se desejo ver os resultados
de uma colisão de veículos em um programa, isso se trata de uma simulação, já
que eu utilizei um “sistema” diferente para alcançar o meu objetivo.
A emulação (ou pelo menos uma forma dela) surgiu por volta de 1941, com o
intuito de decodificar textos escritos pela “Enigma Machine”, utilizada na Segunda
Guerra Mundial, essa ideia surgiu do governo Britânico, que tinha o intuito de
replicar a máquina para obter uma vantagem militar na época. Outro caso notável
de emulação na história veio da IBM, em 1965, desenvolvendo um emulador que
permitia que programas da versão antiga do IBM rodarem perfeitamente na versão
mais atual da época. Podemos ver que, apesar de hoje em dia associarmos
emulação comumente a jogos, sua origem é completamente diferente da que
muitos imaginariam, mas ainda assim seu propósito sempre foi o mesmo: obter
acesso a todas as funções de um dispositivo através de outro.
Figura 1 Imagem do Filme "O Jogo da Imitação", onde se passa no contexto da Segunda Guerra
Mundial com Alan Turning desenvolvendo sua máquina para decodificar a Enigma Machine
Imagine a situação: você tem 4 vacas, onde cada uma vai ter um balde com água
conectado por pipes (tubos) a um tanque com água infinita. Como cada vaca não
necessita de muita água para se sentir satisfeita, não necessitamos de muitos
pipes e baldes maiores do que os normais. Agora, imagine a mesma situação com
elefantes, os animais irão beber a quantidade normal de água tão rápido que
necessitaria de outras alternativas para a estrutura. Assim, uma das soluções
poderia ser aumentar os pipes ou aumentar drasticamente o volume de
capacidade dos baldes (memória?. Jon até sugeriu de você aumentar o volume
Uma VPU é classificada como um pequeno componente feito para operar em cima
de vetores, mais precisamente, vetores feitos de quatro floats.
As VPU’s carregam uma memória chamada VU mem, que armazena dados para
fazer comparações/instruções com valores anteriores e Vector Unit, o núcleo que
carrega algumas memórias de microprogramas com duas pequenas unidades,
onde uma executa soma e multiplicação de floats e outra divide floats Lembrando
que a subtração não é nada mais do que inverter o sinal do segundo operando e
somá-lo ao primeiro).
VPU1 Unidade de processamento que tem uma memória maior que a VPU0 e
faz uso da VU mem, que opera sempre em microinstruções de maneira muito
rápida e funções pré-definidas, principalmente as trigonométricas,
comumente usada em jogos 3D.
Comparativo
Agora que você viu a forma do PS2 de tratar com cálculos de maneira paralela
para multimídia, vamos reunir: temos uma CPU que opera em cima de um MIPS III
Core e VPU’s, que trabalham usando funções já pré-estabelecidas em micro
memórias e permitem fazer cálculos trigonométricos eficientes para geração do
3D. Para a coordenação da transferência de dados, temos o componente
DMACDirect Memory Access Controller):
Type Data
Total 33.056k
Playstation 2
Type Data
L1 cache 16K 2-way instruction 8K 2-way data
SPRAM 16K
VU0 cache? (instruction + data) 32K
VU1 cache? (instruction + data) 32K
Na imagem a esquerda, você pode ver o gráfico no PS1 com 732 triângulos e do
PS2 à direita com 2226 triângulos. Isso é permitido graças à arquitetura da
Emotion Engine, que usa VPU’s para fazer cálculos trigonométricos pré-
estabelecidos para renderizar os gráficos com os dados inseridos paralelamente e
poupar instruções e operações na CPU principal.
Figura 5 Logo do PCSX2, o emulador para computador open-source, gratuito e mais popular do
Playstation 2
Memória
Alguns podem pensar que deve-se começar com a CPU, porém não é possível
emular sem um código para ler e é impossível ler um código sem a memória. Com
isso, o mais prudente a se fazer é entender como funciona a memória do PS2.
/* Located in PCSX2/R5900.h */
union GPR_reg {
u128 UQ;
s128 SQ;
u64 UD[2];
s64 SD[2];
u32 UL[4];
s32 SL[4];
u16 US[8];
s16 SS[8];
u8 UC[16;
s8 SC[16];
};
Com isso, é possível observar o quão complexo é emular o PS2, pois as diferentes
abordagens apresentam uma série de diferentes problemas, exigindo um bom
conhecimento tanto de linguagens de alto nível como C, quanto de linguagens
de baixo nível como o MIPS.
O principal objetivo de um emulador é simular o funcionamento de certa coisa,
porém vimos que o PS2 é tão único que torna quase impossível sua emulação
completa em um computador.