ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ

процессор PSX представляет собой модифицированный R3000A от MIPS. произвела этот процессор на свет компания LSI (см фото). процессор имеет MIPS RISC архитектуру и работает на тактовой частоте 33.8688 МГц. производительность PSX-R3000A 30 миллионов операций в секунду. внутри него находятся два кэша: кэш кода (4 KB) и кэш данных (1 KB). процент обоих кэш-промахов составляет около 20%. кэш кода организован в виде записей по 16 байт. принцип работы основан на тэгах. кэш данных организован в виде записей по 4 байта... пропускная способность шины - 132 MB/сек. реверсность слов - little-endian (как у семейства x86), но ее можно изменить на big-endian (как у Motorolla). впрочем все игры , как и BIOS (вернее из-за BIOS) используют прямую инверсность (little-endian). суперскалярная архитектура отсутствует (только одно АЛУ). слово имеет размер - 32 бита, полу-слово - 16 бит, байт - 8 бит.
архитектура MIPS позволяет подключить к процеесору до 4 сопроцессоров (COP0, COP1, COP2 и COP3). у PSX-R3000A только 2 сопроцессора: системный (COP0) и геометрический (COP2 или GTE). COP0 интегрирован непосредственно на чипе процессора. COP1, или математический сопроцессор, по каким-то причинам отсутствует.
согласно MIPS-архитектуре, у PSX-R3000A есть 32 регистра общего назначения. кроме этого у него еще есть темповые регистры для операций встроенного умножителя/делителя и счетчик команд. ниже приведены мнемонические обозначения всех регистров центрального процессора:

номер регистра мнемоника описание
r0
zr
zero. значение этого регистра всегда равно нулю
r1
at
asm temp. темповй регистр. часто используется в указателях.
r2-r3
v0-v1
result values. используются, как выходные значения функций.
r4-r7
a0-a3
argument values. используются, как входные значения функций.
r8-r15
t0-t7
temp. темповые регистры (для "мусора" промежуточных операций)
r16-r23
s0-s7
save. сохраняются функциями в стеке, при их (функций) вызове.
r24-r25
t8-t9
temp. еще одни темповые регистры, в дополнение к t0-t7.
r26-r27
k0-k1
kernel. регистры, предназначенные для внутреннего использования ядром PSX-OS.
r28
gp
global pointer. глобальный указатель. используется ядром.
r29
sp
stack pointer. указатель стека. используется при сохранении регистров в стеке.
r30
fp
frame pointer. еще один указатель. используется очень редко.
r31
ra
return address. содержит адрес возврата, после вызова функции.

в регистре hi содержится старшая часть результата при умножении, или остаток при делении. в регистре lo содержится младшая часть результата при умножении, или частное при делении. pc является счетчиком команд.

ИНСТРУКЦИИ R3000A

набор кодов R3000A ничем не отличается от любых других 32-битных платформ, за исключением мнемоники. из всего набора есть только пара-тройка специфических инструкций, да и то они нигде не используются.

КАК ВСЕ ЭТО ЭМУЛИРУЕТСЯ

при эмуляции R3000A возникает единственный и очень важный вопрос - TO CUT, OR NOT TO CUT... то есть вначале неясно что можно вырезать и не эмулировать, а что оставить. ответ возникает в процессе эмуляции. просто нужно задать себе такую цель - "а мне это надо?". и всё! HAPPY CODING!

назад...