Раз уж пошла такая пьянка, дам небольшие пояснения к приведенному описанию:

1. Оно опирается на структуру памяти, приведенную мной в разделе "менеджер памяти".

2. Вся память кода и данных делится на т.н. сегменты. Предельный размер сегмента кода в "стандартной" архитектуре - 16 кб (страница), данных - для статических сегментов данных (возможно, вместе с кодом) - до 16кб минус код при размещенни вместе с кодом, до 8 кб - при произвольном размещении, для динамических сегментов данных - до 8 кб. При повышенных возможностях архитектуры (замена #8000-#BFFF) эти лимиты возрастают.

3. Сегмент представляет из себя просто блок в памяти. Блоки кода и связанные блоки данных располагаются между #C000-#FFFF, статические несвязанные данные и динамические данные - в свап-области.

4. "Связанность" сегментов - это нахождение сегментов в одной странице (есть флаг, позволяющий указать именно такое расположение).

5. Несвязанные сегменты кода для вызовов между ними требуют использования процедуры ISC (Intersegment call). Она выглядит как CALL #xxxx; DW #yyyy, где xxxx - это процедура переключения страницы, yyyy - адрес в странице.

6. Несвязанные статические и динамические сегменты данных требуют их размещения в области свопа. Статические сегменты попадают в область свопа по строго определенному адрему, динамические - по произвольному. Для этого существует функция свопинга.

7. Segment index - системный номер сегмента (в файле - номер сегмента ZE/ZL). Internal address/Offset - смещение от начала сегмента.

8. Кроме всего прочего, существует набор системных вызовов (обсуждался ранее) и переменных, адресуемых по номерам (вместо номера подставляется реальный адрес).

Думаю, это прояснит некоторые моменты.