Тайники ZX Spectrum и как установить вечную жизнь 1994 г.

Глава 1 - дорогу осилит идущий.


Дорогу осилит идущий III
1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ

В принципе память поделена на две особые части: ROM (ПЗУ) и RAM (ОЗУ). ROM
занимает адреса 0...16383, a RAM адреса 16384...65536. Содержимым ROM мы сейчас
заниматься не будем, но зато внимательно присмотримся к памяти RAM. Она поделена
на блоки, выполняющие различные функции в системе BASIC.

DISPLAY PILE

Область, в которой хранится информация о том включены или погашены последо-
вательные точки экрана. Это занимает 6144 байт.

ATTR

Эти 768 байт (с адреса 23558) определяют цвета последовательных полей экрана
(8x8 точек).

БУФЕР ПРИНТЕРА

Эта область (от 23296 до 23551) используется лишь во время работы компьютера
с принтером. Если не используются инструкции, касающиеся принтера (IXJST,
LPRINT, COPY), то его содержимое не меняется и его можно использовать для других
целей. Помни только, что использование какой-либо из указанных инструкций даже
без включения принтера, произведет в этой области изменения.

СИСТЕМНЫЕ ПЕРЕМЕННЫЕ

Эти ячейки памяти используются системой для запоминания необходимых для ее
безошибочной работы данных, таких как, например, адреса так называемых подвиж-
ных блоков памяти, информация о выполнении программы в БЕЙСИКе, т.е. какая
строка выполняется, к которой должен осуществиться переход, появились ли какие-
нибудь ошибки и т.п. В этой области находятся переменные, содержащие код послед-
ней нажатой клавиши, продолжительность "ВЕЕР" клавиатуры и еще много других.
Подробнее мы займемся ими позднее.

Непосредственно за системными переменными, которые кончаются адресом
23733, начинаются так называемые подвижные области памяти. Это означает, что
адреса их начал и концов (а также длина) Moiyr изменяться в зависимости от того,
подключены ли какие-нибудь внешние устройства, какова длина программы на БЕЙ-
СИКе, сколько образуется переменных.

На рис, 1 и рис. 2 число за стрелкой означает адрес начала указываемого блока.
Если адрес перемещается, то вместо числа записано имя системной переменной
содержащей этот адрес, а в скобках - адрес этой переменной. В квадратных скобках
значение этой переменной, которое она получает после включения компьютера < или
выполнения RESET), но без подключения внешних устройств.

КАРТА МИКРОДРАЙВ А

Если к твоему компьютеру подключен ZX интерфейс 1, то с адреса 23734 до адреса
на I меньшего чем содержимое переменной CHANS, находится карта микродрайва -
область, используемая как буфер для трансляции данных, как набор добавочных
системных переменных и т.п. Если интерфейс не подключен, то эта область попросту
не существует - переменная CHANS содержит адрес 23734. Она определяет начало
блока памяти, в котором содержатся данные о существующих каналах.

ИНФОРМАЦИЯ О КАНАЛАХ

Необходима для безошибочного выполнения инструкций PRINT, UST, INPUT и
им подобных. В последней ячейке этой области находится число #80(123). определя-
ющее конец этого блока (это так называемый указатель конца).

ОБЛАСТЬ БЕЙСИКА

Эта область памяти содержит текст введенной программы на БЕЙСИКе. Адрес
начала хранится в переменной PROG. Сразу за текстом программы (с адрес*, указы-
ваемого переменной VARG) находится область в которой интерпретатор размещает
переменные, создаваемые программой. Она заканчивается указателем конца. Затем,
начиная с адреса содержащегося в переменной E_LINE, находится область, исполь-
зуемая во время редактирования строки БЕЙСИКа, а также ввода директив с клави-
атуры (т.е. когда в нижней части мигает курсор и мы вводим инструкцию на БЕЙСИ-
Ке ). В конце этой области находятся два байта с содержимым: 13 ("ENTER") и 128
(конец этой области). Сразу после, начиная с адреса, указываемого системной пере-
менной WORKSP, находится подобная область, но завершающаяся знаком "ENTER",
за буфером INPUT (который автоматически удаляется после выполнения этой инст-
рукции) находится "текущее рабочее пространство" - место памяти, используемое для
самых различных целей. Туда, между прочим, загружаются заголовки считанных с
лент программ. Туда считывается программа, размещаемая в памяти с помощью
MERGE, прежде чем будет подсоединена к уже существующей программе. Эта об-
ласть используется тогда, когда требуется на определенное время немного свободной
памяти, но не только во временное пользование.

Однако, системе БЕЙСИКа принадлежит область памяти до ячейки, указываемой
системной переменной RAMTOR. По этому адресу находится число #ЗЕ (62), которое
устанавливает конец используемой БЕЙСИКОМ области. Двигаясь по памяти "вниз",
мы сталкиваемся с одним не используемым байтом (этот байт как бы единое двухбай-
товое число и является его младшим байтом), необходимым для верной инструкции
RETURN. Если во время ее выполнения стек GOSUB будет уже пуст, то это число
сыграет роль его продолжения. Но поскольку оно больше, чем 15872 (62*256), а
строки БЕЙСИКа не имеют такой нумерации, то это будет восприниматься как
ошибка и сигнализировать сообщением "RETURN без GOSUB". Сразу после этого
байта (двигаясь "вниз" по памяти) начинается "стек GOSUB". В негованосятся номера
программных строк из которых были выполнены инструкции перехода к подпрограм-
ме, чтобы интерпретатор знал точно, куда должна вернуться инструкция "RETURN".
Если интерпретатор не находился в подпрограмме, вызванной с помощью GOSUB, то
этот стекпросто не существует - в нем не записано ни одного значения. Ниже нахо-
дится "МАШИННЫЙ СТЕК", непосредственно Используемый микропроцессором.
Оба этих стека откладываются в сторону уменьшения адреса памяти.

Специальную роль играет системная переменная ERRSP. Процедура, обрабаты-
вающая ошибку БЕЙСИКа (вызывается команда процессора RST 8), помещает зна-
чение этой переменной в регистр SP, после чего выполняется RET, считывая таким
путем последний записанный в стек адрес (во время выполнения программы он равен
обычно 4867). Под этим адресом находится процедура выводящая сообщение об
.ошибке.

ГРАФИКА, ОПРЕДЕЛЕННАЯ ПОЛЬЗОВАТЕЛЕМ

168 байт, зарезервированных для определения знаков UDG (их можно ликвиди-
ровать, например, с помощью CLEAR (65535) адрес последней ячейки памяти (
равной 65535, если твой компьютер полностью исправен) запоминается в переменной
P_RAMT. Если часть памяти повреждена, то эта переменная содержит адрес послед-
ней исправной ячейки.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Программирование - о выводе спрайтов.
Юмор - Гуртовщики Мыши: Перевод куска текстовика к хелпу Win95 без основного словаря переводчиком Poliglossum с медицинским, коммерческим и юридическим словарем.
От автора - Юбилейный выпуск...
Оттяг - Илья Ханонович Штейнер: реальный бред реального человека из СССР.
Система - Обзор системных программ: копировщик SOFT COPY v 1.3

В этот день...   19 апреля