Глава 24
Память
Краткое1содержание: CLEAR
Вся память компьютера разбита на байты, каждый из которых
представим числом от 0 до 255. Каждый байт может быть записан в
память по определенному адресу от 0 до FFFFH (Н - здесь и далее
означает шестнадцатиричное представление числа). Сам адрес может
быть записан в память как 2 байта. На диаграмме показано распре-
деление памяти компьютера ZX SPECTRUM:
Для получения содержимого области любой из памятей использу-
ется функция реек с адресом в качестве аргумента. Функция возвра-
щает значение бъйта по этому адресу.
Рассматриваемая ниже программа выводит содержимое первых 2 1
байтов из ROM с их адресами:
20 FOR А« 0 ТО 20
30 PRINT A; TAB 8; РЕЕК А
40 NEXT А
Для изменения содержимого памяти (только для RaM (ОЗУ)),
используется оператор
РОКЕ в форме:
POKE ADDRESS, NEW CONTENS,
где "ADDRESS" и "NEW CONTENS"-числовые выражения. Например:
РОКЕ 31000,57
"NEW CONTENS" может принимать значения от -255 до +255.
Вся память подразделяется на области, предназначенные для хра-
нения информации различного назначения, что показано на диаграм-
ме :
RAM TOP UDG P RAMT
Область телевизионного экрана содержит образ текущего кадра.
Она доступна для операторов реек и РОКЕ. Каждая позиция экрана
представнма матрицей 8*8 точек ( один байт на каждый ряд нэ 8 то-
чек). Однако эти 8 байт хранятся в памяти не вмест.е. полный эк-
ран представляет собой 24 строки по 32 символа. Каждая строка эк*
рана прописывается 8-ю строками развертки телевизионного экрана.
Итого для записи одного экрана выполняется 172 сканирования, и в
памяти рядом хранятся байты одноименных рядов матриц соседних по-
зиций экрана.
Область атрибутов содержит данные о цвете и других параметрах
каждой позиции экрана. Используется в формате ATTR.
Буфер принтера содержит символы, передаваемые на печать.
Область системных переменных содержит данные управления вы-
числениями . Они полностью описаны в следующей главе. Некоторые нэ
них (CHANS, PROG, VARS, Е LINE и т.д.) содержат адреса границ
между системными областями памяти. Но это не переменные бейсика,
н их имена ие распознаются компьютером.
Область планов доп. памяти используется только с MICRODRIVE.
В области канальной информации содержатся данные об уст-
ройствах ввода-вывода, а именно: клавиатуре (с нижней половиной
экрана), верхней половине экрана и принтере. Каждая строка об-
ласти бейсик-программ имеет формат:
Числовые константы в программе представлены в 2-ой форме,
используя CHRS14 и следующие за ним 5 байт самого числа. Перемен-
ные имеют различные форматы представления в памяти. Ни*е
представлен формат записи числа, имя которого состоит из одной
буквы:
Числовые константы в программе представлены в 2-ой форме,
используя CHRS14 и следующие за ним 5 байт самого числа. Перемен-
ные имеют различные форматы представления в памяти. Ни*е
представлен формат записи числа, имя которого состоит из одной
буквы:
Программируемый стек есть часть интерпретатора бейснка. Аппа-
ратный стек используется микропроцессором Z80 для запоминания ад-
ресов возврата. Резерв в данной версии ие используется.
Назначение стека переходов к подпрограммам описано в гл.5
Байт, адресуемый no RAMTOP, содержит верхний адрес, используе-
мый бейсиком. Даже оператор NEW, который очищает ОЗУ, не изменяет
содержимое области определяемых пользователем символов.
Вы можете изменить адрес Рамтор в операторе CLEAR:
CLEAR NEW RAMTOP, no которому:
а) очищаются все области переменных,
б) очищается область экрана (подобно CLS),
в) переустанавливается позиция PLOT в левый нижний угол экрана,
г) выполняется функция RESTORE,
д) очищается стек переходов и устанавливается новое значение
RAMTOP.
Функция RUN также выполняет действия CLEAR, хотя и ие изменяет
шначение RAMTOP.
Используя функцию CLEAR, вы можете смещать RAMTOP, увеличивая
Область для бейсика, уменьшая тем самым область определяемых
пользователем символов. Можно несколько увеличить доступную часть
RaM (ОЗУ), используя функцию NEW. Например, выполнение NEW, затем
CLEAR 23800 помогает компьютеру при переполнении ОЗУ. Все указан-
ные действия могут приводить к 2 сообщениям об ошибке и выдаче
звукового сигнала:
"4 MEMORY FULL" (переполнение памяти);
"в NO ROOM FOR LINE" (нет места для строки программы).
Можно изменить длительность подачн звукового сигнала, изменив
число по адресу 23608. По умолчанию предполагается 64. Числа (за
исключением 0) могут записываться в показательной форме как:
+М*2**Е, где
М-мантисса в интервале от 0.5 до 1 (исключая 1);
Е-экспонента, положительное или отрицательное число,
допустим, вы записали м в двоичной системе счисления,
М-дробиое и имеет двоичную точку (подобно десятичной точке).
Тогда будет:
1/2 ---->.1
1/4 ---->.01
3/4 ---->.11 и т.д.
Наше число М меньше, чем 1, значит у него нет битов перед дво-
ичной точкой, а поскольку оно больше 0.5, то левый бит, следующий
эа точкой-это 1.
Для записи числа в память мы используем 5 байтов в следующем
порядке:
а) записываем первые 8 бит мантиссы во второй байт (мы помним,
что первый бнт-это 1), вторые 8 битов в З-тиИ байт и т.д. до 5-го
байта;
б) заменяем 1-й бит второго байта, в котором записана 1, на
знаковый бит (0 для ♦ и 1 для -);
в) записываем в первый байт экспоненту 4 128.
Например, мы хотим записать число 1/10.
-3
1/10«4/5«2.
Мантисса будет .11001100110011001100110011001100В (поскольку
"33-й бит » 1, мы должны округлить 32-ой бит, записав 1 вместо 0),
а экспонента равна -3.
Теперь применив наши 3 правила, запишем 5 байт:
-3+128 Мантисса 4/5, исключая левый знаковый бит
Имеется альтернативный способ записи целого числа в интервале
-65535...65535:
а) первый байт равен 0;
б) второй байт равен 0
для положительного числа и FFh для
отрицательного;
в) 3-Й и 4-Й байты содержат младшие и старшие значащие биты
числа (или число +131037, если оно отрицательное);
д) 5-й байт равен 0.