Тайники ZX Spectrum и вечная жизнь в 600 играх 1992 г.

Глава 1 - распределение памяти.


1. РАСРЕДЕЛЕНИЕ ПАМЯТИ

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

Рис. 1 Распределение памяти.

DISPLAY FILE

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

ATTR

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

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

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

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

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

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

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

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

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

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

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

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

Эта область памяти содержит текст введенной программы на БЕИСИКе. Адрес начала хранится в
переменной 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). Под этим адресом находится процедура, выводящая сообщение об
ошибке.

Рис. 2 Область памяти системы BASIC
ГРАФИКА, ОПРЕДЕЛЕННАЯ ПОЛЬЗОВАТЕЛЕМ

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




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Ньюсы - Сценеры бабам дают! Да!
От авторов - Креаторы и всё такое.
Рубрика X - Прощания славянки.
Презентация - история обмывки первого номера газеты от SirX'a.
История - Архиваж Сицилийский - механик древности.

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