Процессор Денди (CPU).

Как отмечалось ранее, первая (многокорпусная) модель NES строилась на базе процессора 6502 (6527). Все последующие модели сверху вниз совместимы с ней. По неподтвержденной информации контроллер UM6561 – намного более совершенен, имеет расширенную систему команд и другие "возможности" (которые, надо понимать, в дань совместимости, никто не использует). Поэтому, говоря о процессоре Денди, – опираемся на архитектуру 6502.

Итак - CPU 6502 имеет:

  • Шина Адреса – 16 бит (адресное пространство 64кб);
  • Шина Данных – 8 бит;
  • Частота (для версии PAL) – 1.79 МГц;
  • Встроенный pAPU (4 аналоговых + 1 цифровой канал);
  • Контроллер DMA;

Подробнее о программной модели 6502 можно прочитать в приложении 1. Примеры принципиальных схем и их описания в приложении 5.

Здесь же мы рассмотрим, как этот процессор используется в Денди. Модель 6502 предусматривает единое адресное пространство кода и данных. Также в процессоре отсутствуют инструкции обращения к портам ввода/вывода (типа in/out) – порты должны отражаться на адресное пространство памяти. Т.е. адресное пространство процессора делится между портами и памятью. В архитектуре Денди это происходит так (кстати, по-моему, не очень рационально):

Адрес

Размер

Назначение

$0000-$07FF

2k

RAM

$0800-$1FFF

6k

RAM Mirror (x3)

$2000-$2007

$8 = 8 байт

Registers Video

$2008-$3FFF

$1FF8 = 8184 байта

Registers Video Mirror (x1023)

$4000-$4017

$20 = 32 байта

Registers Audio & DMA & I/O

$4018-$4FFF

$0FE8 = 4072 байта

Not used

$5000-$5FFF

4k

Expansion ROM (for MMC5)

$6000-$7FFF

8k

SRAM (WRAM)

$8000-$BFFF

16k

PRG-ROM (1)

$C000-$FFFF

16k

PRG-ROM (0)

Таблица 1.

RAM – 2кб. Оперативной памяти (на плате приставки или внутри контроллера) – её распределение следующее:

  • $0000-$00FF – “Нулевая страница” (Zero Page) – используется для системных целей (для программ предпочтительны адреса $10-$9F, прочие лучше не трогать). Процессор имеет отдельные инструкции, обеспечивающие быстрый доступ к нулевой странице.
  • $0100-$01FF – Аппаратный стек от старших адресов (размер, понятно, 256 байт).
  • $0200-$07FF – Пользовательская область.

Начиная с адреса $0800 из-за неполной дешифрации адреса, идут три «зеркала» оперативной памяти RAM. Т.е. обращение к ячейке $0000 эквивалентно обращению к $0800 или к $1000 или к $1800. (Интересно, что мешало разработчикам установить еще 6 килобайт памяти – лишнего, наверное, бы не было).

Registers Video – 8 шт. Через эти регистры видеопроцессора (и только через эти регистры) осуществляется связь центрального процессора с видеопроцессором, а через него и с видеопамятью. Подробнее см. главу «Видеопроцессор Денди (PPU)». Далее с адреса $2008 идут «зеркала» регистров видеопроцессора.

Registers Audio & DMA & I/O – 24 шт. Регистры звукового сопроцессора, контроллера DMA и портов ввода/вывода. Подробнее см. соответствующие главы. Назначение остальных ($0FE8=4072шт.) адресов не определено, но может использоваться внешними звуковыми процессорами, располагающимися на картридже.

Expansion ROM (for MMC5) – 4кб. Расширение ОЗУ (или любое другое) – реально используется у маппера MMC5 (см. главу «Картридж Денди»)

SRAM – 8кб. (она же WRAM) – статическое ОЗУ, которое может находиться на картридже. Являясь полноценным ОЗУ, для процессора, может использоваться для любых целей, в том числе и для хранения (исполнения) программы, как правило в этой области, игры хранят данные текущей карты (маппер MMC3). При необходимости сохранения игровых ситуаций, эта микросхема питается от батарейки, расположенной на картридже (сохранение игры на время выключения питания, с возможностью последующего продолжения).

PRG-ROM – 2 окна по 16кб (иногда 4 по 8кб или другой вариант логического разбиения - в зависимости от маппера, см. главу «Картридж Денди») . Чтобы подробно рассмотреть назначение этих участков памяти – необходимо иметь представление об архитектуре картриджа (а вариантов тут много), о чем пойдет речь несколько позже. Здесь же рассмотрим самую простую модель картриджа: картридж содержит две ПЗУ размером 32кб и 8кб, подключаются они к шинам процессора (CPU) и видеопроцессора (PPU) соответственно (см. рис.1). Первая (в нашем примере 32кб) микросхема ПЗУ функционально называется PRG-ROM, и содержит в себе программу и возможно данные. Первые 16кб ПЗУ отображаются в окне 1 ($8000-$BFFF), последние 16кб в окне 0 ($C000-$FFFF). Организовано это на схемотехническом уровне. В конце нулевого окна располагаются вектора прерываний процессора. Некоторыми мапперами пространство $8000 - $FFFF «разбивается» не на два окна, а более (например в MMC3 – для более гибкого варьирования страничной адресацией памяти картриджа).

Процессор 6502 предусматривает всего 3 прерывания. Рассмотрим подробнее случаи их возникновения, предварительно указав адреса в таблице векторов прерываний.

·        $FFFA – NMI (VBlink)

Немаскируемое прерывание. Поступает с видеопроцессора и сигнализирует о том, что PPU закончил прорисовку очередного кадра и «луч» пошел обратно (в начало экрана). Обработчик этого прерывания должен производить необходимые, по программе, обновления данных видеопамяти. Во время прорисовки кадра видеопамять недоступна. Существует возможность программного отключения видеопроцессора – NMI формироваться не будет, но также будет отсутствовать и картинка на экране – в этом режиме доступна запись (используется при начальной инициализации).

·        $FFFC – RESET

Происходит по факту включения питания или при нажатии на клавишу «Reset». Стоит помнить, что в последнем случае изменяется только программный счетчик, все регистры, а тем более память сохраняют свои значения.

·        $FFFE - IRQ/BRK

Единственное в системе «пользовательское» прерывание. Возникает по активному сигналу на  входе процессора (выведен на разъём картриджа и порты джойстиков). Или может вызываться программно – инструкция BRK.

Соответственно по этим адресам должны находиться адреса обработчиков соответствующих прерываний. Приоритет прерываний следующий (от более приоритетного к менее): RESET, NMI, IRQ/BRK.


Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5
Приложение 6

Яндекс.Метрика