2 . ОРГАНИЗАЦИЯ ПАМЯТИ КОМПЬЮТЕРА
. Для обеспечения работы операционной системы е памяти
компьютера выделено несколько областей. Эти области отделены
друг от друга некоторыми границами, которые могут быть
фиксированы (постоянны), а могут изменяться в зависимости от
конкретных условий. Фиксированные границы обозначены числом,
а переменные - именем системной переменной, в которой они
хранятся. Распределение памяти приведено на рисунке 1.
ПЗУ
ЭКРАННАЯ ОБЛАСТЬ
ОБЛАСТЬ АТРИБУТОВ
БУФЕР ZX -ПРИНТЕРА
СИСТЕМНЫЕ ПЕРЕМЕННЫЕ
КАРТА МИКРОДРАИВА
ИНФОРМАЦИЯ О КАНАЛАХ
ОБЛАСТЬ БЕЙСИКА
#ЗЕ
ОБЛАСТЬ ГРАФИКИ ПОЛЬЗОВАТЕЛЯ
И
16384 k
22528
23296
23552
23734
CHANS (2363 J) <23734»
PROG (23631) (23755 j
RAMTOR (23730» 1653681
UDG (23675) (65368)
P_RAMT (23732) f65535)
рисунок 1.
примечание: на рисунках 1 и 2 число за стрелкой
означает адрес начала указываемого блока, если адрес
перемещаемый - то вместо числа записано имя системной
переменной, содержащем этот адрес, а в скобках - адрес
этой системной переменной, в фигурных скобках - значение
этой системной переменной после включения компьютера (или
выполнения RESET), но без подключения внешних устройств.
Адреса с 0 по 16383 - это область ПЗУ, где хранятся:
7 кбайт - операционная система (ОС)
8 кбайт - интерпретатор бейсика
1 кбайт - генератор знаков
Адреса с 16384 по 22527 - экранная область - обеспе-
чивает высокое разрешение экрана телевизионного приемника
(ТП). достигающееся за счет того, что в отведенных под
экранную область 6К памяти можно закодировать изображение
любой из 49192 точек экрана ТП (матрица 192x256 точек)
Экранная область разбита на три части по 2К:
- строкам в-7 соответствует адреса 16384-18431;
- строкам 8-13 соответствуют адреса 18432-2в479;
- строкам 16-23 соответствуют адреса 20480-22527.
Каждые из этих третей по 2К состоят из 8 массивов по 1/4
кбайта. Каждый массив из 1/4 кбайта (256 байтов) хранит
коды символов одной строки экрана. Счет линий начинается
сверху экрана.
Адреса с 22328 по 23295 - ОБЛАСТЬ АТРИБУТОВ.
На экране может быть адресовано 768 символов, для каждого
из которых может быть задан один из восьми цветов "чернил",
один из восьми цветов "бумаги", признак мигания и признак
яркости - повышенной или нормальной.
Область атрибутов имеет 768 байт - по 1 байту на каждую
позицию символа, в которых хранятся признаки цвета, яркости,
мигания.
Кодировка байтов атрибутов следующая:
биты 0-2 - код цвета "чернил"
биты 3-5 - код цвета "бумаги" (фон)
бит 6 - признак яркости ( 0 - обычная, 1 - повышенная)
бит 7 - признак мигания ( 0 - постоянное свечение,
1 - мигание символа)
Коды цветов следующие:
0 - черный; 1 - синий; 2 - красный; 3 - фиолетовый;
4 - зеленый; 5 - голубой; 6 - желтый; 7 - белый.
Адреса с 232 96 по 23551 - ОБЛАСТЬ БУФЕРА ZX-ПРИНТЕРА.
Эта область ( от 23296 до 23551 ) используется лишь во время
работы компьютера с принтером. Если не используются
инструкции. касающиеся принтера ( LLIST, LPRINT, СОРУ ),
то его содержимое не меняется и его можно использовать для
других целей. Необходимо помнить, что использование какой-
либо из этих инструкций даже без подключения принтера,
произведет в этой области изменения.
СИСТЕМНЫЕ ПЕРЕМЕННЫЕ - адреса с 23552 по 23733 (128 байтов).
Эти ячейки памяти используются системой для запоминания
необходимых для его безошибочной работы данных, таких, как
например, адреса так называемых подвижных блоков памяти,
информация о выполнении программы в бейсике, т.е. какая
строка выполняется, к которой должен осуществиться переход,
появились ли какие-нибудь ошибки и т.п. В этой области
находятся переменные, содержащие код последней нажатой кла-
виши, продолжительность "ВЕЕР" клавиатуры и еще много дру-
гих. Непосредственно за системными переменными, которые
кончаются адресом 23733, начинаются так называемые подвижные
области памяти. Это означает, что адреса их начал и концов
(a также длины) могут изменяться в зависимости от того,
подклинены ли какие-нибудь внешние устройства, какова длина
программы на бейсике. сколько образуется переменных.
КАРТА МИКРОДРАИВА адреса с 23734 до CHANS-1
Если к компьютеру подключен ZX ИНТЕРФЕЙС 1, то с адреса 2 37 34
до адреса на 1 меньше, чем содержимое переменной CHANS,
находится карта микродрайва-область,используемая как буфер
для трансляции данных, как набор добавочных системных перемен-
ных и т.п. Если интерфейс не подключен, то область эта попрос-
ту не существует - переменная CHANS содержит адрес 23 73 4. Она
определяет начало блока памяти, в котором содержатся данные о
существующих каналах.
ИНФОРМАЦИЯ О КАНАЛАХ
-необходима для безошибочного выполнения инструкций PRINT,
LIST, INPUT и им подобных. В последней ячейке этой области на-
ходится число #80 ( 128 ) , определяющего конец этого блока
( это так называемый указатель конца блока)
ОБЛАСТЬ БЕЙСИКА
Распределение области бейсика приведено на рисунке 2.
Эта область памяти содержит текст введенной программы на
бейсике. Адрес начала хранится в переменной PROG. Сразу за
текстом программы (с адреса, указываемого переменной VARS)
находится область, в которой интерпретатор размешает пере-
менные, создаваемые программой.Она заканчивается указателем
конца. Затем, начиная с адреса содержащегося в переменной
E_LINE, находится область, используемая во время редактиро-
вания строки бейсика, а также ввода директив с клавиатуры
( т. е. когда в нижней части мигает курсор и мы вводим инст-
рукцию на бейсике ).В конце этой области находятся два бай-
та с содержимым: 13 ("ENTER") и 128 ( конец этой области ).
Сразу после, начиная с адреса, указываемого системной пере-
менной WORK SP, находится область буфера INPUT, завершаемая
знаком "ENTER". За буфером INPUT (который автоматически
удаляется после выполнения этой инструкции ) находится
"текущее рабочее пространство" - место памяти используемое
для самых различных целей. Туда, между прочим, загружаются
заголовки считанных лент программ. Туда считывается программа,
размещаемая в памяти с помощью MERGE, прежде чем будет
присоединена к уже существующей программе. Эта область исполь-
зуется тогда, когда требуется на определенное время немного
свободной памяти, но не только во временное пользование.
Однако, системе бейсика принадлежит область памяти
до ячейки указываемой системной переменной RAMTOR. По этому
адресу находится число #3Е (62). которое устанавливает конец
используемой бейсиком области. Двигаясь по памяти "вниз", мы
сталкиваемся с одним не используемым байтом,который является
как бы младшим байтом двухбайтового числа,старший байт которо-
го в переменной RAMTOR, и необходимым для верной работы
инструкции RETURN. Если во время ее выполнения стек GOSUB
будет уже пуст, то это число сыграет роль его продолжения.
Но поскольку оно больше чем 15872 ( 62*256 ). а строки бей-
сика не имеют такой нумерации, то это будет восприниматься
как ошибка и сигнализировать сообщением RETURN без GOSUB.
Сразу после этого байта (двигаясь вниз по памяти I находится
стек GOSUB. В него заносятся номера программных строк, из
которых были выполнены инструкции перехода к подпрограмме,
чтобы интерпретатор знал адрес возврата по инструкции RETURN.
Если интерпретатор не находится в подпрограмме, вызванной с
помощью GOSUB, то этот стек просто не существует (точнее в нем
не записано ни одного значения). Ниже находится МАШИННЫЙ СТЕК.
используемый непосредственно микропроцессором. Оба этих стека
заполняются в сторону уменьшения адресов памяти, особое зна-
чение имеет переменная ERRSP. Процедура, обрабатывающая ошибки
бейсика (вызываемая командой процессора RST 8 ), помещает
значение этой переменной в регистр SP. после чего выполняется
RET? таким путем последний, записанный в стеке
адрес (во время выполнения программы он обычно равен 4867) .
Под этим адресом находится процедура, выводящая сообщение
об ошибке.
ОБЛАСТЬ ГРАФИКИ ПОЛЬЗОВАТЕЛЯ - это 168 байтов,
зарезервированных для представления 21 графического символа,
определенного пользователем. Адрес последней ячейки памяти
(равный 65535 - если исправна вся память компьютера) запоми-
нается в переменной P_RAMT. Если часть памяти повреждена, то
эта переменная содержит адрес последней исправной ячейки.