Работа с ZX-Spectrum 1993 г.

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


«ТАЙНИКИ»

Мало кому нравятся программы, которые при первой
же ошибке в ответе, либо при нажатии клавиши BREAK
очищают всю память компьютера, не оставляя после се-
бя никакого следа, либо «зависают», вынуждая нажимать
* RESET. Ситуация перестает быть забавной, когда мы
имеем какую-нибудь программу, которую хотим приспо-
собить для нетипового оборудования (джойстика), или
хотим заменить в программе все английские тексты на
русскиег а программу не удается остановить.

В этом описании будет последовательно дана инфор-
мация, необходимая при такого рода работе, о Вашем
компьтере, такая, как карта памяти, способ записи в
памяти отдельных строк BASIC а, важные системные
переменные, и т.п. Позже мы доберемся до считывания
программ и блоков данных с ленты «безопасным» спосо-
бом, т.е. так, чтобы они не стартовали автоматически и
можно было рассмотреть их содержание. В конце мы зай-
мемся также обезвреживанием предохранителей, написан-
ных на внутреннем языке. Постараемся все это
иллюстрировать конкретными примерами на известных
программах. Надеемся» что наши усилия не пропадут зря,
и Вы тоже научитесь добираться без препятствий до
каждой программы.

ГЛАВА I

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

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

----------------- о

ROM

---------------- 16384

DISPLAY FILE

-------------- 22528

ATTR

------ 23296

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

______ 23552

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

----- 23734

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

------CHANS (23631X23734)

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

#80

--------PROG (23635X23755)

ОБЛАСТЬ СИСТЕМЫ BASIC'a

------------RAMTOP(23730X65368)

#ЗЕ

---UDG (23675X63368)

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

-------P-RAMT(23732X65535)

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

DISPLAY FILE - область, в которой хранится инфор-

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

ATTR - эти 768 байт (с адреса 22528) опре-

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

БУФЕР ПРИНТЕРА - эта ооласть (от 23296 до 23528)

используется лишь во время работы
компьютера с принтером, если не
используются инструкции, каса-
ющиеся работы компьютера с принте-
ром (LUST. LPRINT, COPY).

СИСТЕМНЫЕ ПЕРЕМЕННЫЕ - эти ячейки памяти используются

ситемой для запоминания необ-
ходимых для его безошибочной рабо-
ты данных, таких как, например,
адреса так называемых подвижных
блоков памяти, информация о выпол-
нении программы на BASlC'e, т.е. ка-
кая строка выполняется, к которой
должен осуществиться переход,
появились ли какие-либо ошибки, и
т.п. В этой области находятся также

переменные, содержащие код пос-
ледней нажатой клавиши, про-
должительность «ВЕЕР» и ещё много
других. Подробнее мы займемся ими
позднее.

Непосредственно за системными перемеными. которые кончаются ад-
ресом 23733, начинаются так называемые подвижные области памяти. Это
означает, что адреса их начал и концов (а гакже длина) могут изменятся в
зависимости от того, подключены ли какие-либо внешние устройства, какова
длина программы на BASIC'e, сколько образуется переменных и т.д. Адреса
подвижных блоков находятся в соответствующих системных переменных.

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

КАРТА МИКРОДРАЙВА - если к Вашему компьютеру подклю-

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

ИНФОРМАЦИЯ О КАНАЛАХ - необходима для безошибочного вы-
полнения инструкций PRINT, LIST.
INPUT и им подобных. В последней
ячейке этой области находится число
#80 (128), определяющее конец этого
блока (это так называемый указатель
конца).

ОБЛАСТЬ BASIC'a - Область памяти содержит текст вве-

денной программы на BASIC'e. Адрес
её начала хранится в переменной
PROG. Сразу за текстом программы (с
адреса, указываемого переменной
VARS), находится область, в которой
интерпретатор размещает перемен-
ные. создаваемые программой. Она
заканчивается указа'слем конца. За-
тем, начиная с адреса, содержащего-
ся в переменной E-LINE. находится
область, используемая во время
редактирования строки BASIC'a. а
также ввода директив с клавиатуры
(т.е. когда в нижней части экрана

мигает курсор и мы вводим
инструкцию на BASIC'e). В конце
этой области находятся два байта с
содержимым: 13

(«ENTER») и 128 (конец этой области).
Сразу после, начиная с адреса, указы-
ваемого системной переменной
WORKS Р, находится подобная
область, но предназначенная для вво-
да данных во время выполнения
интерпретатором инструкции INPUT
(завершенной знаком «ENTER»). За
буфером INPUT (который авто-
матически удаляется после выпол-
нения этой инструкции) находится
«текущее рабочее пространство» -
место памяти, используемое для са-
мых различных целей. Туда, между
прочим, загружаются заголовки
считанных с ленты программ, туда
считывается программа, размещае-
мая в памяти с помощью MERGE,
прежде чем будет присоединена к
уже существующей программе. Эта
область используется тогда, когда на
определенное время требуется не-
много свободной памяти, но только во
временное пользование. Однако,
системе BASIC'a принадлежит
область памяти до ячейки, указывае-
мой системной переменной
RAMTOP. По этому адресу находится
число #ЗЕ (62), которое устанавливает
конец используемой BASIC'om
области. Двигаясь по памяти «вниз»,
мы сталкиваемся с одним неиспользу-
емым байтом (этот байт составляет
совместно с байтом, указываемым с
помощью RAMTOP, как бы единое
двухбайтовое число (является его
младшим байтом), необходимое для
верной работы инструкции RETURN.
Если во время её выполнения стек
GOSUB будет уже пуст, то это число
сыграет роль его продолжения. Но,
поскольку оно больше, чем 15872
(62*256), а строки BASIC'a не имеют
такой высокой нумерации, то это бу:
дет восприниматься как ошибка и
сигнализировано сообщением

«RETURN без GOSUB».). -Сразу после
этого байта (двигаясь все время
«вниз» по памяти) начинается «стек
GOSUB». В него заносятся номера
программных строк, из которых были

выполнены инструкции перехода к
подпрограмме, чтобы интерпретатор
знал точно, куда должна «вернуться»
инструкция RETURN. Если интерпре-
татор не находится в подпрограмме
(вызванной с помощью GOSUB). то
этот стек просто не существует - в
нем не записано ни одного значения.
Ниже находится «машинный стек»,
непосредственно используемый
микропроцессором. Оба этих стека
откладываются в сторону уменьшения
адресов памяти. Специальную роль
играет системная переменная ERRSP.
Процедура, обрабатывающая ошибку
BASiC'a (вызывается командой
микро-процессора RST 8), помещает
значение этой переменной в регистр
SP, после чего выполняет RET, считы-
вая таким путем последний, записан-
ный на стеке адрес (во время
выполнения программы он равен
обычно 4867). Под тем адресом в
ROM находится процедура, выводя-
щая сообщение об ошибке.

 —.......- .........—— PROG (23635X23755]

j Программа на BASIC'e

»========— ........................... ARS (23627)

Переменные BASiC'a

#80 (23641)

Область редактирования
строки BASiC'a

# 0D

#80

 —............................................................................ . WORSP (23649)

Буфер INPUT
#0D

Текущая рабочая область

 —............... —-------------------------------------------------- (23651)

I Стек 1

I калькулятора V

..........................——(23653)

I Свободно

============================= регистр SP

! Машинный А

I стек

====«========================= errsp (23613)

| Стек GOSUB А

I 1 байт I

====»««=================== RAMTOP (23730X65367]

Рис. 2. Область памяти системы BASIC

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




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Реклама - Реклама и объявления...
Бук - Лабиринт Отражений.
Музыкальная шкатулка - Интервью, взятое у JAM'а.
Так кто же первый? - Когда и как появился Первый Отечественный Спектрум?..
Планета Шелезяка - схемы включения дополнительной памяти ( КЕШ ).

В этот день...   21 ноября