Инструменты пользователя

Инструменты сайта


ram

RAM

Оперативная память PlayStation. Имеет объем в 2 MiB.

Пространство адресов 32-битное и отображено на несколько сегментов с разными свойствами:

  • KUSEG - 0x00000000..0x7FFFFFFF - сегмент пользовательского режима (user mode), кэшируемый доступ;
  • KSEG0 - 0x80000000..0x9FFFFFFF - сегмент режима ядра (kernel mode), кэшируемый доступ;
  • KSEG1 - 0xA0000000..0xBFFFFFFF - сегмент режима ядра (kernel mode), некэшируемый доступ;
  • KSEG2 - 0xC0000000..0xFFFFFFFF - виртуальная память. В PlayStation нет виртуальной памяти, поэтому данный сегмент не применяется, за исключением адреса 0xFFFE0130, по которому находятся регистр контроля кэша.

Физически KUSEG/KSEG0/KSEG1 - это одна и та же память, разница лишь в том, как процессор интерпретирует доступ к ней. Различие между кэшированным и некэшированным доступом имеет значение для кэша инструкций (I-кэш) и очереди записи: доступ к памяти через KUSEG и KSEG0 использует как I-кэш, так и очередь записи, тогда как доступ к памяти через KSEG1 не использует ни то, ни другое. KSEG1 используется для устройств ввода-вывода и областей памяти, где очередь приведет к багам (например, DMA и порты CD-ROM).

При доступе через KUSEG и KSEG0 процессор использует сквозную очередь записи глубиной 4 слова, что позволяет снизить нагрузку на шину при записи. При чтении из той же области памяти, которая только что была записана в очередь, она сначала будет очищена, а затем будет прочитана обратно.

В пользовательском режиме обращение через KSEG0 или KSEG1 вызовет исключение шины. BIOS переключает CPU в режим ядра при старте, и игры обычно его не отключают, поэтому практической разницы между доступом через KUSEG и KSEG0 нет. Обращение к любому адресу KSEG2, отличному от 0xFFFE0130, также вызовет исключение шины.

К портам ввода/вывода нужно обращаться через KSEG1. Заметим, что библиотеки Sony все же используют KUSEG для доступа к портам, записывая 4 фиктивных значения, чтобы гарантировать очистку очереди записи. Это позволяет использовать преимущества кэширования, но при этом избежать ошибок из-за отложенных записей.

Маппинг памяти

KUSEG      KSEG0      KSEG1
0x00000000 0x80000000 0xA0000000 - 2048 KiB - RAM. Первые 64 KiB зарезервированы под данные BIOS (kernel workspace)
0x1F000000 0x9F000000 0xBF000000 - 8192 KiB - Expansion Region 1
0x1F800000 0x9F800000 --         - 1 KiB    - Scratchpad
0x1F801000 0x9F801000 0xBF801000 - 8 KiB    - Порты ввода/вывода (DMA, GPU, MDEC, SPU, CD-ROM и др.)
0x1F802000 0x9F802000 0xBF802000 - 8 KiB    - Expansion Region 2
0x1FA00000 0x9FA00000 0xBFA00000 - 2048 KiB - Expansion Region 3
0x1FC00000 0x9FC00000 0xBFC00000 - 512 KiB  - BIOS ROM

KSEG2
0xFFFE0130                       - регистр контроля кэша

VRAM, звуковая память, память контроллера CD-ROM, внешние карты памяти (EEPROM) не имеют отображения в шине CPU. Обращение к ним происходит исключительно через порты ввода/вывода.

Scratchpad

Процессоры MIPS обычно имеют кэш данных (D-кэш), но в PSX вместо него используется так называемый Scratchpad, отображенный в блок памяти 0x1F800000..0x1F8003FF в KUSEG. Он используется как быстрая память и предназначен для предоставления программам гибкой системы кэширования. Ни функции BIOS, ни библиотеки Sony не занимают Scratchpad, поэтому он полностью во власти программиста. Его обычно используют для хранения промежуточных данных в разного рода вычислениях, где важна производительность чтения/записи.

ram.txt · Последнее изменение: gecko

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki