Карта памяти

Next поддерживает две модели управления памятью, работающие в тандеме. Одна - это уникальная система управления памятью для Next. Другая - расширенная версия менеджера памяти из оригинальных Spectrum 128 и +2/+3 серий.

Глобальная карта памяти

Общий объем доступной оперативной памяти (RAM) в Next составляет 768 КБ на Next без расширения или 1792 КБ на Next, расширенном до 2 МБ. (Базовая версия Next имеет 1 МБ памяти, но 256 КБ из них зарезервированы для ROM и прошивки.)

Процессор Z80 в Next может обращаться только к 64 КБ памяти за раз, поэтому память разделена на банки, которые используются для определения того, какую память он видит. Управление памятью Spectrum 128k и NextBASIC используют 16 КБ банки. Управление памятью Next посредством машинного кода использует 8 КБ банки.

16k-банк8k-банкРеальный адресРазмерОписание
--$000000-$00ffff64KZX Spectrum ROM
--$010000-$013fff16KEsxDOS ROM
--$014000-$017fff16KMultiface ROM
--$018000-$01bfff16KMultiface Extra ROM
--$01c000-$01ffff16KMultiface RAM
--$020000-$03ffff128KDivMMC RAM
0-70-15$040000-$05ffff128KСтандартная 128K RAM
8-1516-31$060000-$07ffff128KДополнительная RAM
16-4732-95$080000-$0fffff512K1-я дополнительная IC RAM (доступна на Next без расширения)
48-7996-159$100000-$17ffff512K2-я дополнительная IC RAM (доступна только на расширенном Next)
80-111160-223$180000-$1fffff512K3-я дополнительная IC RAM (доступна только на расширенном Next)

Кроме того, первые несколько страниц имеют определенные варианты использования и особенности, обобщенные ниже:

16k-банки8k-банкиОписание
00-1Стандартная RAM, может использоваться EsxDOS. Изначально отображается на $c000-$ffff.
12-3Стандартная RAM, конфликтная на 128, может использоваться EsxDOS, RAM-диск на NextZXOS.
24-5Стандартная RAM. Изначально отображается на $8000-$bfff.
36-7Стандартная RAM, конфликтная на 128, может использоваться EsxDOS, RAM-диск на NextZXOS.
48-9Стандартная RAM, конфликтная на +2/+3, RAM-диск на NextZXOS.
510-11Экран ULA, конфликтный, кроме Pentagon, не может использоваться командами NextBASIC. Изначально отображается на $4000-$7fff.
612-13Стандартная RAM, конфликтная на +2/+3, RAM-диск на NextZXOS.
714-15Теневой экран ULA, конфликтный, кроме Pentagon, рабочее пространство NextZXOS, не может использоваться командами NextBASIC
816-17Next RAM, Layer 2 по умолчанию, экран NextZXOS и дополнительные данные, не может использоваться командами NextBASIC
9-1018-21Next RAM, остальное для Layer 2 по умолчанию
11-1322-27Next RAM, теневой экран Layer 2 по умолчанию

Обратите внимание, что NextZXOS перемещает назначения банков Layer 2. Следовательно, Layer 2 после загрузки NextZXOS отображается на 16k-банки 9-11 (8k-банки 18-23). Теневая память Layer 2 также назначается 16k-банкам 9-11 (8k-банки 18-23).

Карта памяти, видимая Z80

При запуске 16-битное адресное пространство Z80 отображается в память следующим образом:

Область16k-слот8k-слот16k-банк по умолчанию8k-банк по умолчаниюОписание
$0000-$1fff10ROMROM (255)Обычно ROM. Перенаправление R/W с помощью Layer 2. Здесь находятся подпрограммы IRQ и NMI.
$2000-$3fff11ROMROM (255)Обычно ROM. Перенаправление R/W с помощью Layer 2.
$4000-$5fff22510Обычно используется для нормального/теневого экрана ULA.
$6000-$7fff23511Расширенная область атрибутов/графики Timex ULA.
$8000-$9fff3424Свободная RAM.
$a000-$bfff3525Свободная RAM.
$c000-$dfff4600Свободная RAM. Только эта область может быть переназначена управлением памятью 128.
$e000-$ffff4701Свободная RAM. Только эта область может быть переназначена управлением памятью 128.

Порядок декодирования памяти

(проверьте также текущий VHDL source)

Область 0-16k может быть переназначена несколькими различными механизмами, приоритетный порядок которых (от самого высокого приоритета к самому низкому):

  1. bootrom
  2. multiface
  3. divmmc
  4. отображение Layer 2
  5. mmu
  6. режим конфигурации
  7. шина расширения romcs
  8. rom

Область 16k-48k либо отображается MMU, либо затенена отображением Layer2:

  1. отображение Layer 2
  2. mmu

Наконец, оставшиеся верхние 16k, область 48k-64k, отображаются только MMU.

Методы страничной организации памяти

Управление памятью в стиле 128

Управление памятью в стиле 128 может изменять только банк, адресуемый по адресу $c000 (16k-слот 4 или 8k-слот 7-8). Активный 16k-банк в $c000 выбирается путем записи 3 младших битов номера 16k-банка в нижние 3 бита Memory Paging Control ($7FFD / 32765) и 3 старших бита в нижние 3 бита Next Memory Bank Select ($DFFD / 57341). (Причина разделения заключается в том, что оригинальному Spectrum 128, имеющему только 128 КБ памяти, требовалось только 3 бита.)

На Next без расширения это позволяет переключать любой 16k-банк в $c000. На расширенном Next недостаточно доступных битов для доступа к банкам в нижней части расширенной памяти, поэтому для доступа к ним необходимо использовать управление памятью Next.

Если вы используете стандартный обработчик прерываний или подпрограммы ОС, то каждый раз, когда вы записываете в Memory Paging Control ($7FFD / 32765), вам также следует сохранять значение в $5B5C. Каждый раз, когда вы записываете в Plus 3 Memory Paging Control ($1FFD / 8189), вам также следует сохранять значение в $5B67. Не существует соответствующей системной переменной только для Next Next Memory Bank Select ($DFFD / 57341), и стандартные подпрограммы ОС могут неправильно поддерживать расширенные банки.

Специальный режим подкачки 128

“Специальный режим подкачки” (также называемый “режим AllRam” или “режим CP/M”) включается путем записи значения с установленным LSB в Plus 3 Memory Paging Control ($1FFD / 8189). В зависимости от 3 младших битов этого значения выбирается конфигурация памяти следующим образом:

БитыСлот 1Слот 2Слот 3Слот 4
%0010123
%0114567
%1014563
%1114763

Переключение Layer 2

Переключение Layer 2 может позволить записывать или читать один из 16k-банков в 16k-слоте 1, записав номер 16k-банка в Layer 2 RAM Page Register ($12), а затем включив страничную организацию Layer 2, установив биты страничной организации в Layer 2 Access Port ($123B / 4667). Вы также можете использовать Layer 2 RAM Shadow Page Register ($13) для той же цели (изменение регистра $12 сразу же видно на дисплее, в то время как регистр $13 никак не связан с дисплеем, он работает только как селектор банка для записи в слот 1). Начиная с ядра 3.0, вы можете переключать не только первые 16 КБ, но и все 48 КБ Layer 2 в область адресов $0000..$BFFF).

Запись/чтение из этой области страничной организации затем будет записывать/читать соответствующую область памяти, в то время как другая операция может оставаться незатронутой и использовать область, отображаемую другим управлением памятью.

Layer 2 на самом деле состоит из 3 больших банков, поэтому использование элементов управления Layer 2 для доступа к различным “секциям” Layer 2 может получить доступ к двум следующим банкам после того, который выбран в регистре $12/$13.

Управление памятью Next

8k-банк, доступ к которому осуществляется в 8k-слоте, выбирается путем записи номера 8k-банка в биты 7-0 8 регистров Next из Memory management slot 0 bank ($50) и выше. $50 адресует 8k-слот 0, $51 адресует 8k-слот 1 и так далее.

Кроме того, в 8k-слотах 0 и 1 можно подключить ROM, выбрав несуществующую страницу $FF размером 8k. Верхние или нижние 8k ROM будут отображаться в зависимости от того, какой 8k-слот используется.

Взаимодействие между методами подкачки

В нормальном режиме изменения, внесенные в управлении памятью в стиле 128 и в стиле Next, синхронизируются. Самое последнее изменение всегда имеет приоритет. Это означает, что использование управления памятью в стиле 128 для выбора нового 16k-банка в 16k-слоте 4 обновит регистры MMU для двух 8k-слотов с соответствующими номерами 8k-банков.

Однако включение специального режима подкачки 128 (режим AllRam) переопределит MMU Next. Выбор банка из таблицы режима AllRam переопределит установленные страницы в регистрах Next. Регистры MMU все еще можно изменить, но они не будут иметь никакого эффекта до тех пор, пока специальный режим подкачки не будет отключен.

Поскольку порты управления памятью в стиле 128 не читаются, в другом направлении синхронизация невозможна.

Страничная организация и выбор ROM

$0000-$3fff обычно отображается в ROM. Эту область можно полностью переназначить только с помощью управления памятью Next. ROM не считается одним из пронумерованных банков; по умолчанию он отображается на два банка по 8 КБ или путем установки их номеров банков по 8 КБ равными 255.

128k Spectrum имеет 2 страницы ROM. Какая из них сопоставлена, выбирается путем изменения бита 4 Memory Paging Control ($7FFD / 32765). +2a/+3 имеет 4 страницы ROM; Дополнительный бит, необходимый для выбора между ними, - это бит 2 Plus 3 Memory Paging Control ($1FFD / 8189). Это обеспечивает совместимость с подкачкой ROM оригинальных машин до тех пор, пока ROM не будет выгружен.

Выгрузка ROM

ROM можно выгрузить, включив режим AllRam или используя управление памятью Next. Имейте в виду, что некоторые программы могут предполагать, что они могут найти подпрограммы обслуживания ROM по фиксированным адресам между $0000-$3fff. Что еще более важно, если установлен режим прерывания по умолчанию (IM 1), Z80 будет переходить в счетчик программ по адресу $0038 каждый кадр, ожидая найти там обработчик прерывания. Если этого не произойдет, вполне вероятно, возникнут боль и страдания. DI - ваш друг. С другой стороны, это позволяет вам написать свой собственный обработчик прерываний без необходимости использования IM 2.

Активация страничной организации Layer 2 не повлияет на работу ROM, поскольку она переназначает только записи, но не чтение. С ядром 3.0 теперь вы можете включить эту подкачку также для операции чтения, которая скроет данные ROM, и, например, запрос прерывания IM 1 выполнит данные из банка Layer 2.

Экран

16k-банк 5 - это банк, считываемый ULA для определения того, что показывать на экране. ULA подключается напрямую к большему пространству памяти, игнорируя отображение; экран всегда 16k-банк 5, независимо от того, где он находится в памяти (или если он вообще включен). Установка бита 3 Memory Paging Control ($7FFD / 32765) приведет к тому, что ULA будет считывать данные из 16k-банка 7 (“теневой экран”), который можно использовать в качестве альтернативного экрана. Имейте в виду, что это не отображает 16k-банк 7 в RAM; чтобы изменить 16k-банк 7, его необходимо сопоставить другими способами.