ВВЕДЕНИЕ
Почти невозможно поверить, что всего за 2.5 года фирма SINCLAIR RESEARCH OF CAMBRIDGE изготовила и продала около 500 тысяч микрокомпьютеров.
Весной 1980 года был разработан микрокомпьютер ZX-80. Разработка этой машины явилась большим успехом, поскольку это был первый сравнительно дешевый микрокомпьютер для любителей. Однако Клив Синклер и его лаборатория изготовила машину ZX-81 всего за 1 год. Эта модель была более совершенна по сравнению с ZX-80 и явилась развитием этого компьютера с низким разрешением и чёрно-белым экраном.
Но теперь мы имеем ZX-SPECTRUM. Эта машина была разработана по принципу ZX-80, ZX-81. Сделав это, фирма разработала микрокомпьютер с высоким разрешением и цветным экраном. Однако с сожалением надо отметить, что ZX-80, ZX-81 были вытеснены, хотя обе являются прекрасными машинами. Они просты в работе, что приятно для программиста, но это не означает, что SPECTRUM это трудная машина для использования, но я чувствую, что для того, чтобы от неё получить всё, потребуется написание более совершенных программ. Эта книга написана для более глубокого понимания работы со SPECTRUM и компьютером в целом.
1. ПРИНЦИПЫ РАБОТЫ МИКРОКОМПЬЮТЕРНОЙ СИСТЕМЫ
1.1. ПРЕДИСЛОВИЕ
Всегда очень любопытно погрузиться в чтение, открывая книгу то здесь, то там; но компьютер является самой логической машиной и каждый, кто попытается совершенствовать свои познания, должен начать с самого начала.
1.2. ОПИСАНИЕ СИСТЕМЫ
Сам по себе SPECTRUM представляет собой чёрный пластмассовый корпус шириной 233 мм, глубиной 144 мм, высотой 30 мм. На верхней части расположены 40 клавиш, которые образуют клавиатуру. Сзади расположен выходной разъём для подключения антенного входа телевизора, входной разъём, который соединяется с выходом магнитофона, разъём для подключения УВВ: принтера, микродрайверов и т.д.; разъём для подключения БП.
На основной плате находится процессор Z80 и другие элементы. Плата находится в том же корпусе, что и клавиатура. Клавиатура и ПП соединены между собой 2-мя ленточными кабелями.
Система разработана таким образом, что она может отображать информацию на экране TV приёмника или выводить её на принтер или другое периферийное устройство.
А сейчас рассмотрим каждый элемент печатной платы:
1.3. Z80 - МИКРОПРОЦЕССОР
Это кремниевый кристалл (чип). Он является самым важным из всех элементов и предназначен для управления работой компьютера. Программа для Z80 представляет собой набор кодовых инструкций и согласованных с ними данных. Z80 имеет задающую частоту 3.5 МГЦ, что позволяет выполнять 875000 простых кодовых инструкций в секунду. При подаче питания к МП он через определенное время становится работоспособным.
1.4. 16K ROM (ПОСТОЯННАЯ ПАМЯТЬ)
Представляет собой чип объёмом 128 Кбит или 16 Кбайт памяти, содержащей программу в машинных кодах
Программа монитор 16К разбита на 3 части:
7 Кбайт - операционная система;
8 Кбайт - интерпретатор Бейсик; 1 Кбайт - генератор знаков.
для Z80.
>RINT
АТИВНАЯ ПАМЯТЬ - ОЗУ)
1.5. 16K RAM (ОПЕРАТИВНАЯ
В стандартной версии 16К SPECTRUM имеет 8 чипов по 2 Кбайта или 16 Кбит, а версия 48K содержит ещё дополнительно 32 Кбайт памяти.
Три из 8 чипов памяти образуют "ОБЛАСТЬ ЭКРАНА" и обычно используются только для этой цели, а 4 чип предназначен для хранения всех атрибутов 768 знаков экрана (24 по 32 строки) и системных переменных. В версии 16K остается свободным не более 8К памяти.
1.6. ULA
Это большой чип, включающий в себя много небольших чипов. В SPECTRUME ULA больше всего связана с областью экрана и атрибутной областью для получения TV -сигнала.
1.7. PAL - КОДИРОВЩИК
Этот чип получает цветовую информацию от ULA и использует её в формировании требуемого сигнала для UHF-МОДУЛЯТОРА. В английской версии SPECTRUM сигнал, полученный от модулятора, находится на 36-м дециметровом диапазоне.
На печатной плате дополнительно размещены: динамик, радиатор, регулятор напряжения, системные часы, чипы выборки адресов и другие.
Логика работы
Рассмотрим связь между различными элементами микрокомпьютерной системы.
Z80 микропроцессор (МП) может обращаться к 65536 адресам памяти (64K). Ограничением на непосредственную адресацию МП Z80 является 64K. В версии 16K SPECTRUM можно адресоваться только к адресам от 0 до 32767 десятичном, а в версии 48K SPECTRUM - доступны адреса 0-65535. Адрес задается в виде 16-битного сигнала. 0 представляется как 0000 0000 0000 0000, а 65535 как 1111 1111 1111 1111. Адреса, выданные Z80 поступают на адресную шину, состоящую из 16 линий, находящихся в высоком или низком напряжении (0 или 1). Адрес можно описать в двух байтах по 8 бит. В отличие от адресной шины, шина данных имеет 8 бит. Поэтому любые данные могут представляться как 0-255 в десятичном виде или 0000 0000 - 1111 1111 в двоичном.
Как часть логической концепции SPECTRUM, также важно рассмотреть нормальный режим работы системы и обсудить карту памяти. SINCLAIR RESEARCH выпускает SPECTRUM с 16K мониторной программой и обеспечивает пользователя операционной системой (ОС) и интерпретатором Бейсик (ИБ). По существу, возможно вместо программы монитор использовать МП Z80 с программой в машинных кодах.
При обычном использовании ОС не требует со стороны пользователя, каких либо сложных действий. Поэтому при работе SP уже работает ИБ как часть мониторной программы. Пользователь может сразу выводить или выполнять Бейсик программу. Т.о., ИБ является подпрограммой ОС, а Бейсик программа - подпрограммой ИБ.
Заметьте, что Z80 сам по себе не может выполнять Бейсик - программы, а только программу, составленную в машинных кодах.
Карта памяти стандартного 16K SP представлена на рис. И далее кратко описана.
Графическая область пользователя
Область информационных каналов
Стек GOSUB
Машинный стек
Резервная память
Стек вычислителя
Рабочая область
Область редактора
Область переменных
PRAMT UDG
RAMTOP указатель стека STREND STKBOT WORKSP ELINE VAHS PROG CHANS
5СВ6
5С00
5В00
5800
4000
0000
23734 23552 23296 22528 16384 0
Карты микродрайвов
Системные переменные
Буфер печати
Область атрибутов
Область экрана
ROM область
1.8. ROM ОБЛАСТЬ
16K ROM содержащие ОС, ИБ и генератор знаков (ГЗ) располагаются в адресах 0-16383 (16-ное 0-3FFF). В адресе 0 хранится стартовый адрес программы в кодах.
1.9. КАРТА ПАМЯТИ ЭКРАННОЙ ОБЛАСТИ
6K памяти с 16384 до 22527 (4000-57FF) обеспечивают высокое разрешение на TV. Важно, что расположение экранной области зафиксировано в аппаратуре SP и не может меняться программно. Имеется взаимно однозначное соответствие всех битов области и точек экрана TV, и следующие вычисления показывают, что число битов в 6K памяти равно числу точек экрана.
В 6K - 1024*8*6=49152 битов.
Количество символов в 24 строках экрана (по 64 точки на символ) равно 32*24*64=49152. Экран TV разбит на 3 части. Линиям с номерами 0-7 соответствуют адреса памяти 16384-18431 (4000-47FF), линиям 8-15 адреса 1843220479 (4800-4FFF), 16-23 адреса 20480-22527 (5000-57FF).
Рассмотрим каждые 2K памяти, как 8 областей по 1/4 Кбайт. Каждая из областей задает биты 1 линии (256 точек) трети экрана начиная сверху. Это распространяется на все 24 строки экрана.
_Принципы работы микрокомпьютерной системы_
1.10. ОБЛАСТЬ АТРИБУТОВ
Экран имеет 768 символов, каждый из которых имеет 1 из 8 цветов "бумаги", 8 цветов "чернил", признак мигания, признаки повышенной или пониженной яркости.
Область расположена в адресах 22528-23295 (5800-5AFF), где закодированы биты, последовательно определяющие атрибуты экрана.
Зависимость между площадями символа и байтами атрибута несложная, так как байты просматриваются подряд для каждой линии экрана сверху вниз, слева направо.
Биты 0-2 определяют цвет чернил, 3-5 цвет бумаги, 6 яркость, 7 мигание.
1.11. БУФЕР ПЕЧАТИ
Область, расположенная в адресах 23296-23551 (5B00-5BFF) содержит 256 байт, по 32 байта на каждую печатаемую строку.
Этот буфер, если требуется, можно использовать как рабочую область памяти.
1.12. СИСТЕМНЫЕ ПЕРЕМЕННЫЕ
182 байта в адресах 23552-23733 (5С00-5СВ5) отводятся под системные переменные, которые в дальнейшем будут подробно описаны.
1.13. КАРТЫ МИКРОДРАЙВОВ
Эта область памяти начинается с 23734 (5СВ6).
1.14. ОБЛАСТЬ ИНФОРМАЦИОННЫХ КАНАЛОВ
Специальная область памяти, расположенная с адреса, указанного в переменной CHANS. CHANS находится в адресах 23631-23632 (5C4F-5C50). Область переменной длины. Концом области служит маркер со значением 128 (80 HEX).
В стандартном SPECTRUM без подсоединенных микродрайвов имеются 4 основных канала:
A. Канал K - обеспечивает ввод от клавиатуры и вывод на нижнюю часть экрана;
Б. Канал S - только вывод на верхнюю часть экрана;
B. Канал R - только вывод на рабочую область, которая по требованию может быть увеличена;
Г. Канал P - только вывод на принтер.
Информационные каналы состоят для каждого канала из 5 байт данных. Эти байты содержат: адрес программы ввода (2 байта), адрес программы вывода (2 байта) и один символ имени файла (1 байт).
В стандартном SPECTRUM, с учётом 4 каналов и маркера конца, область занимает память 23734-23754 (5СВ6-5САА=21 байт).
1.15. ОБЛАСТЬ БЕЙСИК-ПРОГРАММЫ (БП)
Область содержит последовательные строки программ. Её размер определяется количеством строк. Начало программы задается в переменной PROG (адрес 23635-23636 (5С53-5С54)). Заметьте, что в стандартном SPECTRUM переменная PROG указывает на адреса 23755 (5ССВ) и так до тех пор, пока не будет подключен микродрайв или использован дополнительный канал (скажем, для подключения дисковода).
1.16. ФОРМАТ СТРОК БП
Первые 2 байта любой строки содержат номер строки, и, причём в начале хранится старший байт, а затем -младший. В 3 и 4 байтах храниться длина строки, причем сначала младший байт, а потом - старший. Дальше байты с 5 до символа ENTER являются информационной частью строки в кодах SINCLAIR и ASCII. Внутри строки операторы разделены символом 58(3A). Заметьте, что десятичные числа накапливаются в строках БП, т.к. представляют из себя последовательности ASCII символов, за которыми идёт NUMBER (код 14(0E)) и плавающая точка или целые числа в диапазоне от -63535 до +63535, которые в любом случае займут 5 байт. Это приводит к тому, что на каждое число отводится 6 байт памяти из RAM дополнительно Следующая демонстрационная программа всё подробно показывает: 10 FOR A=23755 TO 23817: PRINT A; TAB 9; РЕЕК A; TAB 15; CHR$ PEEK A: NEXT A RUN
1.17. ОВЛАСТЬ ПЕРЕМЕННЫ
Начало области, описывающей все переменные, задается в переменной VARS - адреса 23627-23628 (5С4В-5С4С). Начало этой области остается постоянным во время работы БП, однако в связи с появлением новых переменных её длина будет меняться. Граница области задается маркером конца (код 128).
Следующая программа содержит только переменные оператора FOR NEXT: 10 FOR A=23804 TO 23823: PRINT A; TAB 9; PEEK A: NEXT A RUN
_Принципы работы микрокомпьютерной системы_
1.18. ОБЛАСТЬ РЕДАКТОРА
В области отражается строка, которую вводят или редактируют Начало области задаётся в переменной ELINE - адреса 3641-23642 (5С59-5С5А).
Когда нижняя часть экрана высвечивает только мигающий курсор, то область редактирования будет иметь 2 определяющих её адреса.
Первый из них, указанный в системной переменной KCUB, хранит адрес символа ENTER 2-ой адрес указывает на маркер конца (код 128). Нижняя часть экрана высвечивает редактируемую строку программы по мере поступления входных символов с клавиатуры область редактирования расширяется.
Аналогичная процедура имеет место, когда используется клавиша EDIT для вызова строки БП на нижнюю часть дисплея. Прежде всего область редактирования расширяется до требуемого размера с тем, чтобы разместилась эта строка. Затем эта строка копируется из области программы в область редактирования и, наконец, строка из области редактирования копируется в нижнюю часть экранной области RAM. Этот последний этап в действительности включает в себя отображение на экране символов с высокой разрешающей способностью.
Так как область редактирования представляет собой динамическую область, т.е. она меняется при использовании, то нецелесообразно давать пример на Бейсике.
1.19. РАБОЧАЯ ОБЛАСТЬ
Эта область используется для выполнения большого числа различных задач, например ввод данных, соединение в цепочку строк и т. д. Начальный адрес области задается величиной, содержащейся в системной переменной WORKS, которая сама находится по адресу 23649 и 23650 (5С61, 5С62). Когда же требуется дополнительное место в рабочей области, то эта область памяти расширяется. После использования рабочая область освобождается. Это значит, что она сводится к 0, чтобы избежать большего расхода памяти, чем это необходимо.
Ещё раз отметим, что поскольку эта область является динамической, то невозможно привести простой пример на Бейсике.
1.20. СТЕК ВЫЧИСЛИТЕЛЯ
Это очень важная область памяти. Она начинается с адреса, определенного системной переменной STKBCT, которая сама находится в адресах 23651 и 23652 (5С63, 5С64). Область распространяется до адреса, заданного в системной переменной STKEND (адреса 23653, 23654 (5С65, 5С66)). Стек вычислителя содержит числа с плавающей точкой, пять байт целых, а при использовании строк, он содержит пять байт, определяющих параметры строки. Стек обслуживается по правилу "первым пришел - последним ушел". Можно рассматривать величину, находящуюся вверху стека, если она существует, как последнюю пришедшую величину.
1.21. РЕЗЕРВНАЯ ПАМЯТЬ
Область памяти между стековым вычислителем и стеком машины представляет собой количество памяти, которым располагает пользователь. В стандартном 16K SPECTRUM номинальный размер области равен 8939 когда система включается. Однако интересно отметить, что приемлемая самая низкая величина для CLEAR равна 23821, которая опускает RAMTOP и расширяет резервную область до 8878 байт.
1.22. МАШИННЫЙ СТЕК
Мп Z80 должен иметь рабочую область для своего использования, и это называется машинный стек. Указатель стека Z80 всегда показывает на последний адрес, который должен заполняться.
Ж будет подробно рассматриваться дальше.
1.23. GO SUB - СТЕК
акое-либо активное GO SUB, количество строк сохраняется в GO SUB-стеке. ся в памяти вниз и каждая команда GO SUB требует 3 адреса. Самый старший адрес содержит номер операнда в пределах строки Бейсик, к которой должен быть осуществлен возврат. Второй адрес содержит младшую часть номера строки, определяющей цикл и третий адрес содержит её старшую часть.
Демонстрация следующей программы показывает стек GO SUB, который используется для сохранения чисел строки при организации 3-х гнездовых подпрограмм.
Демонстрационная программа GO SUB-стека
1 CLEAR 32599 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
Два адреса выше GO SUB-стека всегда содержат величины 0 и 62 (00 и 3E), и они представляют собой
_Принципы работы микрокомпьютерной системы_
неправильный номер строк.
Программа Бейсик при выполнении лишней команды RETURN перейдет к неправильному номеру строки и выдаст сообщение "RETURN без GO SUB".
Примечание: фирма SINKLAIR не совсем уверена в написании GO SUB.
Системная переменная RAMTOP, которая занимает адрес 23730 и 23731 (5CB2, 5CB3), содержит адрес ячейки, в которой хранится код 62. Эта ячейка рассматривается как последняя ячейка системной области Бейсик.
1.24. ГРАФИЧЕСКАЯ ОБЛАСТЬ, ОПРЕДЕЛЕННАЯ ПОЛЬЗОВАТЕЛЕМ
До тех пор, пока системная область Бейсика расширяется вниз вследствие использования команды CLEAR, старшие 168 ячеек памяти содержат представления 21 графического символа, определенного пользователем.
Самый старший адрес памяти всегда адресуется системной переменной PRAMT, расположенной в адресах 23732 и 23733 (5CB4, 5CB5).
В стандартном 16K SPECTRUM величина, содержащаяся в PRAMT, должна быть равна 32767, поскольку это показывает, что все 16K памяти находятся в рабочем состоянии.
Это, очевидно, не вредит случайному вводу строки: PRINT PEEK 23732+256*РЕЕК 23733 и видно, что результат является в действительности величиной 32767 (в 48K SPECTRUM - 65535).