введение.
Почти невозможно поверить, что всего лишь за 2.5 года фирма
SINCLAIRRESEARCH OF CAMBRIDGE изготовила и продала около 500
тысяч микрокомпьютеров.
Весной 1980года был разработан микрокомпьютер ZX-80. Разработка
этой машины явилась большим успехом, поскольку это был первый
сравнительно дешевый микрокомпьютер для любителей. Однако, сэр
Клайв Синклер и его лаборатория не остановились на достигнутом и
изготовили новую машину ZX-81 всего за 1 год. Эта модель была более
совершенна по сравнению с ZX-80 и явилась развитием этого компьютера
с низким разрешением и черно-белым экраном.
В1982году появился ZX-SPECTRUM. Эта машина была разработана
по принципу ZX-80 и ZX-81. Сделав это, фирма разработала
микрокомпьютер с высоким разрешением и цветным экраном. Однако с
сожалением надо отметить, что ZX-80u ZX-81 были вытеснены, хотя
оба являются прекрасными машинами. Они просты в работе, что
приятно для программиста, но это не означает, что SPECTRUM- это
трудная машина для использования, но для того, чтобы от нее получить
все, что возможно, потребуется написание более совершенных программ.
Эта книга написана для более глубокого понимания работы компьютера
и его программного обеспечения.
1. ПРИНЦИПЫ РАБОТЫ МИКРОКОМПЬЮТЕРНОЙ СИСТЕМЫ.
Всегда очень любопытно погрузиться в чтение, открывая книгу то здесь,
то там, но лучше совершенствовать свои познания, начиная с самого
начала.
ОПИСАНИЕ СИСТЕМЫ.
Сам по себе SPECTRUM представляет собой черный пластмассовый
корпус шириной 233 мм, глубиной 144 мм,высотой 30 мм. На верхней части
расположены 40 клавиш, которые образуют клавиатуру. Сзади расположен
выходной разъем для подключения антенного входа телевизора, входной
разъем, который соединяется с выходом магнитофона; разъем для
подключения устройств ввода-вывода: принтера, микродрайвов, интерфейса
дисковода и т.д., разъем для подключения блока питания.
На основной плате находится процессор Z-80 и другие элементы. Плата
находится в одном корпусе, что и клавиатура. Клавиатура и печатная плата
соединены между собой двумя ленточными кабелями.
Система разработана таким образом, что она может отображать
информацию на экране TV приемника или выводить ее на принтер или
другое периферийное устройство.
А сейчас рассмотрим каждый элемент на печатной плате:
■ Z86- микропроцессор.
Это кремниевый кристалл (чип). Он является самым важным из всех
элементов и предназначен для управления работой компьютера. Программа
для Z80 представляет собой набор кодовых инструкций и согласованных с
ними данных. Z80 имеет тактовую частоту 3.5 МГЦ, что позволяет выполнять
875000 простых кодовых инструкций в секунду. При подаче питания к
микропроцессору он через определенное время (несколько сот миллисекунд)
становится работоспособным.
■ 16К ROM (постоянная память).
Представляет собой чип постоянной памяти объемом 16 Кбайт,
содержащей программу в машинных кодах для Z80.
Эта программа общим объемом 16К содержит 3 части:
- 7 Кбайт - операционная система;
- 8 Кбайт - интерпретатор языка программирования БЭЙСИК;
- 1 Кбайт - генератор знаков.
■ 16К RAM (оперативная память - ОЗУ)
В стандартной версии 16К SPECTRUM имеет 8 чипов по 16 Кбит, а
версия 48К содержит еще дополнительно 32 Кбайт памяти (8 чипов по 32
Кбит).
Часть памяти называется "ОБЛАСТЬ ЭКРАНА" и обычно используется
только для формирования изображения на экране, часть памяти используется
для хранения системных переменных. В версии 16К остается свободным не
более 8 К памяти.
■ ULA
ULA - специально разработанная для компьютера "SPECTRUM"
микросхема, формирующая сигналы цветного изображения и управляющие
сигналы.
В PAL - КОДИРОВЩИК.
Этот чип получает цветовую информацию от ULA и использует ее в
формировании телевизионного сигнала в стандарте PAL для UHF-
МОДУЛЯТОРА. В английской версии SPECTRUM сигнал, полученный от
модулятора, находится на 36-м канале дециметрового диапазона.
На печатной плате дополнительно размещены динамик, радиатор и
стабилизатор напряжения 4-5 вольт, задающий кварцевый генератор; чипы
выборки адресов и некоторые другие.
ОРГАНИЗАЦИЯ ВЗАИМОДЕЙСТВИЯ ЭЛЕМЕНТОВ.
Рассмотрим связь между различными элементами микрокомпьютерной
системы. Ограничением на непосредственную адресацию МП Z80 является
64К. Это означает,что микропроцессор Z80 может обращаться к каждой из
65536 ячеек памяти (64К). В версии 16К SPECTRUM можно адресоваться
только к адресам от 0 до 32767, а в версии 48К SPECTRUM - доступны все
возможные адреса 0-65535. Адрес задастся в виде 16-тиразрядного сигнала.
0 представляется как 0000 0000 0000 0000, а 65535 как 1111 1111 1111 1111.
Сигналы адреса, выданные Z80, поступают на адресную шину, состоящую
из 16 линий. Сигнал на каждой из линий может принимать значения
логической единицы или нуля. Адрес можно описать в двух байтах по 8 бит.
В отличии от адресной шины, шина данных имеет разрядность 8 бит.
Поэтому любые данные могут представляться как числа в диапазоне 0-255
в десятичном виде или 0000 0000 - 1111 1111 в двоичном.
Как часть логической концепции SPECTRUM важно также рассмотреть
нормальный режим работы системы и обсудить карту памяти. Фирма
SINCLAIR RESEARCH выпускает SPECTRUM с 16К мониторной
программой и обеспечивает пользователя операционной системой (ОС) и
интерпретатором языка программирования бэйсик.
При обычном использовании ОС не требует со стороны пользователя
каких либо сложных действий, так как при включении SPECTRUMa уже
работает интерпретатор бейсика, как часть мониторной программы.
Пользователь может сразу вводить или выполнять бэйсик программу. Таким
образом интерпретатор бейсика является подпрограммой ОС, а бэйсик-
программа - подпрограммой интерпретатора бейсика.
Заметьте, что Z80 сам по себе не может выполнять бэйсик программы,
а только программу, составленную в машинных кодах.
В свою очередь, программа в машинных кодах после запуска может
работать самостоятельно, не обращаясь к операционной системе.
Карта памяти стандартного 16К SP представлена на рис. 1.1 и далее
кратко описана. Слева на рисунке указаны адреса заданные постоянно, а
справа - определяемые через системные переменные.
■ ROM область.
16К ROM, содержащие ОС, интерпретатор бейсика и генератор знаков
(ГЗ) занимают область с адресами 0-16383. (0-3FFFh). После включения
питания или нажатия кнопки RESET управление передается ОС. Стартовым
является адрес 0000.
■ Карта памяти экранной области.
Ячейки памяти с адресами от 16384 до 22527 зарезервированы для работы
TV дисплея высокого разрешения. В эти ячейки может производиться и
запись, и считывание, причем каждый бит изображается точкой (пикселом)
на экране. Символы формируются с помощью групп пикселов. Сканирование
элеюронного луча по экрану TV дисплея не совпадает с последовательным
обходом байтов в экранной области памяти. На рис. 1.2 показан порядок
обхода байтов при движении луча, то есть указано место экрана, на котором
изображение формирует соответствующий байт.
![](chapters_images/mash_sol/mash_sol-4.png)
![](chapters_images/mash_sol/mash_sol-5.png)
Весь экран разбит на 32 вертикальные колонки, пронумерованные от 1
до 32. Ширина колонки соответствует 1 байту, то есть 8 битам. Таким
образом вся строка состоит из 8x32=256 пикселов (точек). Когда какой -либо
бит принимает значение 1, то соответствующая ему точка на экране
светится, когда бит принимает значение 0 - точка не светится.
Попробуйте набрать
CLS:POKE 16384,128
(и нажать ENTER)
засветится точка в левом верхнем углу экрана. Цвет ?той точки выбирается
командой INK.
Если набрать
CL$:POKE 16415,1
засветится точка в правом верхнем углу.
При наборе
CLS.POKE 16384,85
в левом верхнем углу экрана засветятся 4 точки в соответствии с
двоичным представлением числа 85-01010101. Все байты экранной области
памяти соответствуют определенным местам экрана:
верхняя строка развертки начинается с адреса 16384,затем идет
9-я строка, начинающаяся с адреса 16416,затем
17-я строка, начинающаяся с адреса 16448, и так до
57-й строки, начинающейся с адреса 16608, затем идет
2-я строка, начинающаяся с адреса 16640,
10-я строка, начинающаяся с адреса 16672, и т.д.
После заполнения верхней трети экрана аналогично заполняются
средняя, а затем и нижняя.
Сначала может показаться, что экран заполняется хаотически, однако
на самом деле соблюдается строгий порядок.
Порядок заполнения экранной области памяти хорошо виден при
загрузке компьютера с магнитофона.
■ Область атрибутов.
Экран состоит из 768 знакомест, каждое из которых может иметь 1 из 8
цветов "бумаги", 1 из 8 цветов "чернил", признак мигания, признаки
повышенной или пониженной яркости.
Область расположена в адресах 22528--23295 (5800-5AFF), где
закодированы биты, последовательно определяющие атрибуты экрана.
Зависимость между знакоместом и байтами атрибута несложная, так как
байты просматриваются подряд для каждой линии экрана сверху вниз,слева
направо.
Биты 0-2 определяют цвет чернил, 3-5 - цвет бумаги, 6 - яркость, 7 -
мигание.
■ Буфер печати.
Область, расположенная в адресах 23296-23551 (5B0C-5BFF), содержит
256 байт: по 32 байта на каждую печатаемую схроку.
Этот буфер, если требуется, можно использовать как рабочую область
памяти.
■ Системные переменные.
182 байта в адресах 23552-23733 (5C00-5CB5h) отводятся под системные
переменные, которые в дальнейшем будут подробно описаны.
■ Карты микродрайвов.
Эта область памяти начинается с 23734 (5CB6h) и в стандартном
SPECTRUM представлена теоретически, то есть область не используется до
тех пор, пока микродрайв не будет подключен.
Поскольку эта книга неписана до появления микродрайвов, то невозможно
обсуждение структуры этой области. Однако в дальнейшем, в зависимости
от количества подключенных микродрайвов, эта область может быть
расширена, но в пределах RAM. Будет оригинальным использование этой
области для размещения программ пользователя.
■ Область информационных каналов.
пециальная область памяти, расположенная начиная с адреса, указанного
в переменной CHANS, хранящейся в ячейках памяти с адресами 23631-
23632 (5C4F-5C50h). Область переменной длины. Концом области служит
маркер со значением 128 (80h).
В стандартном SPECTRUM без подсоединенных микродрайвов имеются
4 основных канала:
1.Канал К - обеспечивает ввод от клавиатуры и вывод на
нижнюю часть экрана.
2.Канал S - только вывод на верхнюю часть экрана.
3.Канал R - только вывод на рабочую область, которая по
требованию может быть увеличена.
4. Канал Р - только вывод на принтер.
Информационные каналы состоят для каждого канала из 5 байт данных.
Эти байты содержат: адрес программы ввода (2 байта), адрес программы
вывода (2 байта) и один символ имени файла (1 байт). В стандартном
SPECTRUM, с учетом 4 каналов и маркера конца, область занимает память
23734 - 23754 (5СВ6-5САА=21 байт).
■ Область бэйсяк-программ.
Область содержит последовательные строки программ. Ее размер
определяется количеством строк. Начало программы задается в переменной
PROG адрес 23635 (5C53-5C54h). Заметьте, что в стандартном SPECTRUM
переменная PROG указывает на адреса 23755 (5CCBh) и так до тех пор, пока
не будет подключен микродрайв или использован дополнительный канал.
■ Формат строк бейсик-программ.
Первые 2 байта любой строки содержат номер строки, причем в начале
хранится старший байт, а затем младший. В 3 и 4 байтах хранится длина
строки, причем сначала младший байт, а потом - старший. Дальше байты
с 5 до символа ENTER являются информационной частью строки в кодах
SINCLAIR и ASCII. Внутри строки операторы разделены символом 58
(3Ah). Заметьте, что десятичные числа представляются в строках бейсик-
программы в виде кода NUMBER (код 14 (ОЕ)) и числа с плавающей точкой
или целого числа в диапазоне от -63535 до +63535, которые в любом случае
займут 5 байт. Это приводит к тому, что на каждое число отводится 6 байгг
памяти из RAM.
Следующая демонстрационная программа все подробно показывает:
10 FOR А-23755 ТО 23817: PRINT A; TAB 9; РЕЕК А;
TAB 15;CHR$ PEEK A: NEXT А
<RUN>
■ Область переменных бейсяка.
Начало области, описывающей все переменные, задается в переменной
VARS адреса 23627-23628 (5C4B-5C4Ch). Начало этой области остается
постоянным во время работы бейсик-программ, однако в связи с появлением
новых переменных ее дойна будет меняться. Граница области задается
маркером конца (код 128).
Следующая программа содержит только переменные оператора FOR
NEXT
10 FOR А-23804 ТО 23823: PRINT A; TAB 9; PEEK A: NEXT А
<RUN>
■ Область редактора.
В области отражается строка, котирую вводят или редактируют. Начало
области задается в переменной Е-LINE -адреса 23641-23642 (5C59-5C5Ah).
Когда нижняя часть экрана высвечивает только мигающий курсор, то
область редактирования будет занимать 3 ячейки памяти.
Адреса первых двух из них указаны в системной переменной K-CUR,
которая хранит адрес курсора. По третьему адресу хранится маркер конца
(код 128). Нижняя часть экрана высвечивает редактируемую строку
программы. По мере поступления входных символов с клавиатуры область
редактирования расширяется. Аналогичная процедура имеет место, когда
используется клавиша EDIT для вызова строки бейсик-программы на
нижнюю часть дисплея. Прежде всего область редактирования расширяется
до требуемого размера с тем, чтобы разместилась эта строка. Затем эта
строка копируется из области программы в область редактирования и,
наконец, строка из области редактирования копируется в нижнюю часть
экранной области RAM. Этот последний этап в действительности включает
в себя отображение на экране символов.
Так как область редактирования представляет собой динамическую
область, то есть она меняется при использовании, то нецелесообразно
давать пример на бэйсихе.
■ Рабочая область.
Эта область используется для выполнения большого числа различных
задач, например: ввод данных, соединение в цепочку строк и т.д. Начальный
адрес области задается величиной, содержащейся в системной переменной
WORKS, которая сама находится по адресу 23649 и 23650 (5C61,5C62h).
Когда же требуется дополнительное место в рабочей области, то эта область
памяти расширяется. После использования рабочая область освобождается.
Это значит, что она сводится к 0, чтобы избежать занятия большего
количества адресов, чем это необходимо.
Еще раз отметим, что поскольку эта область является динамическ<?й,
невозможно привести простой пример на бэйсике.
■ Стек калькулятора.
Это очень важная область памяти. Она начинается с адреса,
определенного системной переменной STKBOT, которая сама находится в
адресах 23651 и 23652 (5С63,5С64). Область распространяется до адреса,
заданного в системной переменной STKEND (адреса 23653, 23654
(5С65,5С66)). Стек вычислителя содержит числа с плавающей точкой или
целые. В любом случае на каждое число отводится пять байт. При
использовании строк, он содержит пять байт, определяющих параметры
строки. Стек обслуживается по правилу "первым пришел - последним
ушел". Можно рассматривать величину, находящуюся в вершине стека,
если она существует, как последнюю пришедшую величину.
■ Резервная память.
Область памяти между стековым вычислителем и стеком машины
представляет собой количество памяти, которым располагает пользователь.
В стандартном 16к SPECTRUM номинальный размер области равен 8939,
когда система включается. Однако интересно отметить, что приемлемая
самая низкая величина для CLEAR равна 23821, которая опускает RAMTOP
и расширяет резервную область до 8878 байт.
■ Машинный стек.
Микропроцессор Z80 должен иметь рабочую область для своей работы,
и такой областью является машинный стек. Указатель стека Z80 всегда
показывает на последний адрес, который должен заполняться.
Машинный стек будет подробно рассматриваться дальше.
■ GOSUB - стек.
Когда же имеется какое-либо активное GOSUB, его параметры
сохраняется в GOSUB-CTEKE.
Стек расширяется в памяти вниз, и каждая команда GOSUB требует три
адреса. Самый старший адрес содержит номер операнда в пределах строки
бэйсик-программы, к которой должен быть осуществлен возврат. Второй
адрес содержит младшую часть номера строки, определяющей цикл, и
третий адрес содержит ее старшую часть.
Демонстрация следующей программы показывает стек GOSUB, который
используется для сохранения номеров строк при организации трех
вложенных подпрограмм.
Демонстрационная программа GOSUB-CTEKA.
10 GOSUB 20: STOP
20 GOSUB 30: RETURN
30 GOSUB 40: RETURN
40 FOR A-32547 TO 32584 STEP 1: PRINT A,PEEK A:
NEXT A: RETURN
<RUN>
Два адреса выше GOSUB-CTEKA всегда содержат величины 0 и 62 (00 и
3Eh).
Программа бэйсик при выполнении лишней команды RETURN перейдет
к адресу выше GOSUB-егека и выдаст сообщение "RETURN без GOSUB".
Системная переменная RAMTOP, которая занимает адрес 23730 и 23731
(5CB2,5CB3h), содержит адрес ячейки, в которой храниться код 62. Эта
ячейка рассматривается как последняя ячейка системной области бэйсик.
■ Область графических символов, определяемых пользователем.
Старшие 168 ячеек памяти содержат представления 21 графического
символа, определенного пользователем. После загрузки системы в этих
ячейках хранятся коды графических изображений литер. Символы,
определяемые пользователем, можно применять только в графическом
режиме (курсор G).
Самый старший адрес памяти всегда адресуется системной переменной
P-RAMT, расположенной в адресах 23732 и 23733 (5CB4,5CB5h).
В стандартном 16к SPECTPJJM величина, содержащаяся в P-RAMT,
должна быть равна 32767, поскольку это показывает, что все 16К памяти
находятся в рабочем состоянии.
Это, очевидно, можно проверить, зведя строку PRINT РЕЕК
23732+256*РЕЕК 23733, и ввдно, что результат является в действительности
величиной 32767 (в 48к SPECTRUM - 65535). При наличии неисправных
ячеек памяти величина, хранимая в P-RAMT, и, соответственно, размер
доступной программисту памяти уменьшается.