Процессор Motorola 68060 (часто упоминаемый как 68060) – это последний представитель линейки 68k, выпущенный в начале 1990‑х годов. Несмотря на то, что сегодня он уже не используется в новых системах, его архитектура до сих пор интересна инженерам, ретро‑разработчикам и любителям микропроцессорных технологий. Одним из ключевых аспектов любой архитектуры является способ обращения к памяти – то есть адресация. В этой статье мы подробно разберём, как устроена адресация в 68060, какие возможности предоставляет его MMU и какие ограничения следует учитывать при программировании.
Общие характеристики 68060 - Разрядность процессора: 32‑битный.
- Частота тактового генератора: до 75 МГц (в некоторых версиях – до 100 МГц).
- Кеши: 2‑уровневый кеш (L1 – 4 KB инструкций + 4 KB данных, L2 – 256 KB, полностью ассоциативный).
- Поддержка MMU: встроенный 32‑битный Memory Management Unit (MMU) совместимый с 68040.
- Шина адресов: 32‑битная, что позволяет адресовать до 4 ГБ линейного адресного пространства.
Почему 32‑битная шина важна?
Шина адресов в 68060 состоит из 32 линий, что в теории даёт возможность задать 2³² = 4 294 967 296 уникальных адресов. На практике часть этого пространства может быть зарезервирована под специальные функции (например, доступ к периферии через адресные регистры), но в целом процессор способен работать с полным 4‑ГБ диапазоном.
Линейное (физическое) адресное пространство
Линейное (или физическое) адресное пространство 68060 – это прямая карта адресов к физическим ячейкам памяти. Оно делится на несколько логически выделенных областей:
| Диапазон адресов | Назначение | Комментарий |
|---|---|---|
| 0x0000 0000 – 0x0FFF FFFF | ОЗУ (DRAM, SRAM) | Основная рабочая память. |
| 0x1000 0000 – 0x1FFF FFFF | Периферийные устройства | Регистры контроллеров, видеокарты, сетевых адаптеров и т.п. |
| 0x2000 0000 – 0x3FFF FFFF | Отображаемая память (memory‑mapped I/O) | Зарезервировано для будущих расширений. |
| 0x4000 0000 – 0x7FFF FFFF | Неиспользуемая/резервная область | Часто используется для отладки и тестирования. |
| 0x8000 0000 – 0xFFFFFFFF | Виртуальная память (через MMU) | Отображается на физические адреса согласно таблицам страниц. |
Обратите внимание, что границы могут отличаться в зависимости от конкретной схемы платы и от того, какие устройства подключены к шине.
Виртуальная адресация и MMU
Одной из самых мощных возможностей 68060 является поддержка виртуальной памяти. MMU переводит виртуальные (логические) адреса, используемые программой, в физические адреса, доступные шине. Перевод происходит по таблицам страниц, которые хранятся в ОЗУ и управляются операционной системой.
Формат записи в таблице страниц - Размер страницы: 4 KB (по умолчанию), но поддерживаются и 8 KB, 16 KB, 32 KB, 64 KB.
- Запись (PTE – Page Table Entry) состоит из 32 бит:
- Биты 31‑12 – физический адрес начала страницы (выравнивание по 4 KB).
- Бит 11 – Valid (страница присутствует в памяти).
- Бит 10 – Writable (разрешена запись).
- Бит 9 – Cacheable (может кешироваться).
- Бит 8 – Supervisor (доступ только в привилегированном режиме).
- Биты 7‑0 – дополнительные флаги (например, защита от выполнения).
Трансляция адреса - CPU получает виртуальный адрес
VA = [V31‑V0]. - Верхние 10 бит (
V31‑V22) используются как индекс в директорий страниц (Page Directory). - Следующие 10 бит (
V21‑V12) – индекс в таблице страниц (Page Table). - Нижние 12 бит (
V11‑V0) – смещение внутри страницы. - С помощью индексов находится запись PTE, из которой берётся физический базовый адрес страницы. К нему прибавляется смещение, получаем физический адрес
PA.
- Биты 31‑12 – физический адрес начала страницы (выравнивание по 4 KB).
- Бит 11 – Valid (страница присутствует в памяти).
- Бит 10 – Writable (разрешена запись).
- Бит 9 – Cacheable (может кешироваться).
- Бит 8 – Supervisor (доступ только в привилегированном режиме).
- Биты 7‑0 – дополнительные флаги (например, защита от выполнения).
- CPU получает виртуальный адрес
VA = [V31‑V0]. - Верхние 10 бит (
V31‑V22) используются как индекс в директорий страниц (Page Directory). - Следующие 10 бит (
V21‑V12) – индекс в таблице страниц (Page Table). - Нижние 12 бит (
V11‑V0) – смещение внутри страницы. - С помощью индексов находится запись PTE, из которой берётся физический базовый адрес страницы. К нему прибавляется смещение, получаем физический адрес
PA.
Если бит Valid в PTE сброшен, генерируется исключение Page Fault, которое ОС обрабатывает, загружая нужную страницу из внешней памяти (например, из ROM или из внешнего хранилища).
Привилегированные режимы
68060 поддерживает два уровня доступа:
- Supervisor (S) – режим ядра, имеет полный доступ к любой странице.
- User (U) – режим пользователя, доступ ограничен флагом Supervisor в PTE.
Попытка доступа к странице, помеченной как Supervisor, из пользовательского режима приводит к исключению Privilege Violation.
Адресные режимы процессора
68060, как и остальные процессоры семейства 68k, поддерживает несколько режимов адресации, позволяющих гибко формировать адреса в инструкциях. Ниже перечислены основные из них.
| Режим | Синтаксис | Описание |
|---|---|---|
| Data Register Direct | Dn | Операнд берётся непосредственно из регистра данных. |
| Address Register Direct | An | Операнд берётся из регистра адреса. |
| Address Register Indirect | (An) | Адрес берётся из регистра адреса, содержимое по этому адресу используется как операнд. |
| Address Register Indirect with Postincrement | (An)+ | После чтения/записи регистр An увеличивается на размер операнда. |
| Address Register Indirect with Predecrement | -(An) | Перед чтением/записью регистр An уменьшается. |
| Address Register Indirect with Displacement | (d16, An) | К содержимому An прибавляется 16‑битное смещение d16. |
| Address Register Indirect with Index | (d8, An, Xn.SIZE*SCALE) | Сложный режим, использующий индексный регистр Xn, масштаб (1,2,4,8) и 8‑битное смещение. |
| Absolute Short | (d16) | 16‑битный абсолютный адрес. |
| Absolute Long | (d32) | 32‑битный абсолютный адрес. |
| Program Counter with Displacement | (d16, PC) | Относительный к текущему PC адрес. |
| Program Counter with Index | (d8, PC, Xn.SIZE*SCALE) | Относительный к PC с индексом. |
Все эти режимы работают как с линейными, так и с виртуальными адресами – окончательная трансляция происходит в MMU после вычисления полного 32‑битного адреса.
Выравнивание и ограничения доступа - Выравнивание данных – 68060 требует, чтобы 16‑битные данные находились по адресам, кратным 2, а 32‑битные – по адресам, кратным 4. Нарушение выравнивания приводит к исключению Address Error.
- Кеширование – если в PTE установлен флаг Cacheable, данные могут быть помещены в L1/L2 кеш. Для областей ввода‑вывода часто флаг отключён, чтобы избежать несогласованности.
- Права доступа – комбинация битов Writable и Supervisor определяет, кто и как может работать с страницей. Попытка записи в страницу без соответствующего бита генерирует Write Protect Violation.
Пример проверки выравнивания
MOVE.L D0,(A0) ; Ожидается, что A0 % 4 == 0
; Если A0 = 0x1003, процессор выдаст Address Error.
Практические примеры использования адресации Пример простого доступа к периферии
MOVE.L D0,(A0) ; Ожидается, что A0 % 4 == 0 ; Если A0 = 0x1003, процессор выдаст Address Error.
Практические примеры использования адресации Пример простого доступа к периферии
Предположим, что регистр управления UART расположен по физическому адресу 0x1000_2000. Чтобы записать в него значение 0x55, можно использовать следующий код на ассемблере 68k:
MOVE.B #$55, $10002000 ; Абсолютный длинный адрес
Если система использует MMU и этот адрес отображён в виртуальное пространство, то вместо физического адреса будет использоватся виртуальный, например 0xC000_2000:
MOVE.B #$55, $C0002000 ; Виртуальный адрес, будет транслирован MMU.
Пример создания таблицы страниц
Ниже – упрощённый фрагмент кода на C, демонстрирующий инициализацию первой записи таблицы страниц для 4 KB страницы, расположенной по физическому адресу 0x0010_0000:
#define PAGE_SIZE 0x1000 // 4 KB
#define PTE_VALID (1U << 11)
#define PTE_WRITABLE (1U << 10)
#define PTE_CACHEABLE (1U << 9)
uint32_t page_table[1024] __attribute__((aligned(4096)));
void init_page_table(void) {
uint32_t phys_addr = 0x00100000; // начало физической страницы
uint32_t pte = (phys_addr & 0xFFFFF000) // старшие 20 битов адреса
| PTE_VALID | PTE_WRITABLE | PTE_CACHEABLE;
page_table[0] = pte; // первая запись
}
После загрузки этой таблицы в регистр MMU (например, в TT0), процессор будет автоматически переводить виртуальный адрес 0x0000_0000 – 0x0000_0FFF в физический 0x0010_0000 – 0x0010_0FFF.
Сравнение 68060 с предшествующими моделями
| Характеристика | 68040 | 68060 |
|---|---|---|
| Шина адресов | 32‑битная | 32‑битная (совместима) |
| Кеш | L1 (4 KB инструкций, 4 KB данных), без L2 | L1 + L2 (256 KB), более эффективный алгоритм замещения |
| Поддержка MMU | Встроенный, 4‑уровневый | Встроенный, совместим с 68040, но ускоренный |
| Максимальная частота | ≈ 40 МГц | ≈ 75 МГц (в некоторых версиях – 100 МГц) |
| Поддержка SIMD | Нет | Есть (инструкции для ускорения DSP‑операций) |
Таким образом, 68060 сохраняет совместимость с 68040 в части адресации, но предлагает более быстрый кеш и более гибкую поддержку SIMD‑инструкций.
Ошибки и отладка адресации
При работе с 68060 часто встречаются следующие типы ошибок, связанные с адресацией:
- Address Error – нарушение выравнивания или недопустимый тип адреса.
- Bus Error – попытка доступа к несуществующей физической области (например, к неинициализированному периферийному регистру).
- Page Fault – отсутствие валидной записи в таблице страниц.
- Privilege Violation – доступ к странице, защищённой режимом Supervisor, из пользовательского режима.
Для отладки рекомендуется использовать:
- Трассировщик (trace) на уровне шины – позволяет увидеть, какие адреса действительно попадают на шину.
- Регистры MMU (TT0, TT1, TC, etc.) – показывают текущие настройки таблиц страниц.
- Отладочный вывод в виде
TRAP #15с пользовательским обработчиком, который печатает значениеPCиSRпри возникновении исключения.
Адресация в процессоре Motorola 68060 сочетает в себе простоту 32‑битной линейной шины и мощные возможности виртуальной памяти благодаря встроенному MMU. Понимание структуры линейного адресного пространства, формата записей в таблицах страниц и особенностей режимов доступа позволяет эффективно использовать процессор как в классических встраиваемых системах, так и в более сложных ОС, где требуется защита памяти и поддержка многозадачности.
Если вы планируете писать низкоуровневый код для 68060, помните о требованиях к выравниванию, правильно настраивайте флаги в PTE и всегда проверяйте, что используемые адреса находятся в разрешённом диапазоне. При соблюдении этих правил система будет работать стабильно, а отладка станет гораздо проще.