ZX-Spectrum & TR-DOS для пользователей и программистов 1994 г.

Архитектура ZX SPECTRUM - центральный процессор. Регистры. Порты.


АРХИТЕКТУРА ZX SPECTRUM

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

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

Внутренняя структура

ZX Spectrum ничем существенно
не отличается от строения других
компьютеров (рис. 9). Работой всех
устройств управляет центральный
процессор (ЦП). Он связан с осталь-
ными блоками компьютера через ши-
ны адреса, данных и управления. Па-
мять разделена на две области: ПЗУ
(постоянное запоминающее устройст-
во) объемом 16К и ОЗУ (оперативное
запоминающее устройство) — 48К. В
ПЗУ «зашита» операционная система
ZX Spectrum. Блокуправления внешни-
ми устройствами обеспечивает связь
процессора с клавиатурой, телевизо-
ром, магнитофоном и т. д.

*) Речь пойдет только о компьютерах, выпущенных фирмой Sinclair Re-
search Ltd. Архитектура остальных разновидностей ZX Spectrum, вклю-
чая машины фирм Amstrad и Timex, может несколько отличаться от
базовой модели. Кроме того, следует иметь ввиду, что на конфигурацию
ZX Spectrum могут влиять подключаемые к компьютеру периферийные
устройства.

ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР

Одной из причин успеха, постигшего ZX Spectrum, было применение
в качестве ЦП микропроцессора Z80 (полное название — Z80A CPU) амери-
канской фирмы Zilog. В основе разработки этой микросхемы лежала идеология
построения одного из самых распространенных в свое время 8-разрядных
процессоров —18080 (советский аналог — КР580ВМ80А). В Z80 увеличено
число регистров, дополнена система прерываний и, самое главное, существен-
но расширена система команд (в частности, за счет добавления команд,
обрабатывающих блоки данных). Все это позволило повысить производитель-

Рис. 10. Структурная схема микропроцессора Z80.

Рис. 10. Структурная схема микропроцессора Z80.

Ность процессора при одновременном уменьшении размера программ.

Структурная схема Z80 (рис. 10) включает в себя: арифметико-логи-
ческое устройство (АЛУ), блок управления шиной данных, блок регистров, блок
управления адресной шиной, дешифратор команд и сигналов управления. Все
узды связаны внутренней шиной данных.

Для обращения процессора к памяти и внешним устройствам слу-
жит 16-разрядная шина адреса (ее разряды обозначаются от АО —- млад-
ший разряд до А15 — старший). Следовательно, процессор может непос-
редственно обратиться (в зависимости от обрабатываемой команды) либо
к 2" =65536 ячейкам памяти, либо к такому же количеству внешних
устройств (портов).

Обмен информацией Z80 с памятью и портами осуществляется через
8-разрядную шину данных (разряда обозначаются D0...D7). Для хранения
и обработки чисел, больших 255 (28-1), используются две или более ячейки
памяти, расположенные одна за другой.

РЕГИСТРЫ 180

Регистры данных и аккумулятор

Микропроцессор Z80, в отличие от 18080, работает с двумя наборами
регистров — основным и альтернативным, Оба набора состоят из семи

8-разрядных регистров данных и флагового регистра. Регистры основного
набора обозначаются буквами А, В, С, D, Е, Н, L и F (флаговый). Регистры
альтернативного набора соответственно — А', В'( С, Dr, Е Hr, L' и F Для
пользователя эти наборы совершенно идентичны, и знак' (апостроф) озна-
чает лишь то, что в данный момент регистр не является активным. С
помощью специальных команд можно переключать работу процессора с
одного набора регистров на другой. Но выяснить, какой из наборов активен
в данный момент, невозможно.

Для выполнения многих команд обрабатываемые данные должны
быть занесены в специальный регистр —~ аккумулятор А.

Команды, обрабатывающие 16-разрядные числа, используют пары ре-
гистров в следующих сочетаниях: ВС, DE, HL, AF и, соответственно, ВС, DE
HL AF'. При этом в регистры В, D, Н, А, В', D', Н А' записывается старший
байт числа, а в С, Е, L, F, С, Е L' и F' — младший. Спаренные регистры можно
использовать, например, для хранения и обработки адресов ячеек памяти.

Счетчик комавд

Выполнив очередную команду, процессор должен знать, откуда ему
взять следующую. За этим следит 1 б-разрядный регистр счетчика команд PC.
При последовательном выполнении программы после считывания из памяти
каждого байта команды значение PC увеличивается на единицу. Если коман-
да требует от процессора перейти не к следующей, а какой-л^бо другой
ячейке памяти (например, команда вызова подпрограммы), в PC записыва-
ется адрес этой ячейки.

Индексную регистры

Важной особенностью Z80 является возможность обращаться к ячей-
кам памяти, указывая смещение их адреса относительно содержимого 16-
разрядных индексных регистров IX и IY. Смещение может быть задано
числом в пределах —128...+127.

Указатель стена

16-разрядный регистр указателя стека SP содержит адрес вершины
стека. Как известно, стек — это специальная область памяти, предназначен-
ная для временного хранения данных. В Z80 он организован по принципу
LIFO* — помещенные в стек одно за другим несколько чисел извлекаться из
стека будут в обратной последовательности. Особенностью Z80 является то,
что стек «растет» в сторону уменьшения адресов. При каждой записи в стек
значение регистра SP уменьшается на 2, а при извлечении числа увеличи-
вается на 2. «Общение» со стеком обычно происходит посредством регист-
ровых пар. В стеке также автоматически сохраняется адрес возврата при
вызове подпрограмм.

Регистр флагов

После выполнения ряда команд в соответствии с результатом опера-
ции изменяется содержимое флагового регистра ____„_

F (рис. 11). Флагом называется отдельный бит этого Гс I z [ х ! Н I x l P/vTnT"c1
регистра. Флаг считается установленным, если в 1 I L 1 г I ™ 1 I

регистра. Флаг считается установленным, если в
соответствующем бите записана единица, и сбро- 7 6 5 4 3 2 1 0
шейным, если записан ноль. Значимыми являются рис j | Регистр флагов.
6 из 8 битов регистра F:

*) Last In First Out — первым пришел — последним вышел (англ.).

Z (zero) — флаг нуля. Устанавливается, если результат операции равен
нулю;

P/V (parity/overflow) — флаг четности/переполнения, В логических опе-
рациях устанавливается при получении четного результата, в ариф-
метических — при переполнении (изменении знака) операнда;

CY (carry) — флаг переноса. Устанавливается, если в итоге выполнения
арифметических операций произошел перенос либо заем старшего
бита;

N (negative) — флаг отрицательного результата. Устанавливается при
получении отрицательного результата арифметической операции;

Н (half-carry) — флаг вспомогательного переноса. Устанавливается, если про-
изошел перенос (заем) в 4-й бит аккумулятора. Используется при прове-
дении двоично-десятичной коррекции при работе с BCD-арифметикой*;

S (sign) — флаг вычитания. Устанавливается, если предыдущей коман-
дой было вычитание. В BCD-арифметике помогает определить тип
предыдущей операции.

Другие регистры

Регистр вектора прерываний I используется во 2-м режиме обработки
прерываний. Подробно о нем будет рассказано в разделе, посвященном
прерываниям.

Регистр регенерации динамической памяти R обслуживает в основном
аппаратные потребности компьютера, однако он все же может использовать-
ся и для программных целей, например, при написании процедур, генери-
рующих случайные числа. Младшие семь разрядов этого регистра увеличи-
ваются на единицу после выполнения очередной команды (точнее цикла
Ml) микропроцессора, старший разряд аппаратко не используется.

ВНЕШНИЕ УСТРОЙСТВА

Работа программиста превратится в бессмысленные математические
упражнения при отсутствии связи компьютера с внешним миром, осущест-
вляемой через порты.

Хотя Z80 имеет 16-разрядную шину адреса, в ZX Spectrum при обраще-
нии к большинству внешних устройств значащими являются только 8 младших
разрядов. Например, для изменения цвета бордюра необходимо записать соот-
ветствующее значение в порт с адресом %0000000011111110 (254)**, но если
Вы запишете это же значение в порт %0000000111111110 (510), то получите
тот же эффект. Разряды, не влияющие на выбор устройства, обычно обозна-
чаются знаком х, и, таким образом, полный адрес упомянутого выше внешнего
устройства записывается как xxxxxxxxl 1111110.

Для упрощения аппаратной части в Speccy выбор внешних устройств
осуществляется сбросом в ноль одного из разрядов адреса. Порт 254, например,
выбирается при А0-0, порт 239 — при A2-Q и т. д. При разработке
ZX Spectrum были сделаны следующие назначения для разрядов шины адреса:

АО — клавиатура, магнитофон, динамик;

А1 — не используется (в ZX Spectrum 48К);

А2 — ZX Printer;

A3 и А4 — Interface 1 и микродрайв.

*) BCD — Binary Coded Decimal — двоично-десятичный код {англ,).

**) Ниже для обозначения шестнадцатеричных чисел использован символ #,
двоичных — символ %.

Если несколько разрядов будут сброшены в ноль, окажутся выбран-
ными одновременно несколько устройств.

Разряды А5, А6 и А 7 оставлены разработчиками для специального
применения, но, в принципе, могут быть использованы для подключения
дополнительных внешних устройств, например, джойстика.

Разряды с А 8 no А15 используются для сканирования клавиатуры
(только при сброшенном АО).

Хотя в фирменном ZX Spectrum для выбора внешнего устройства и
не используются все разряды младшего байта адреса, тем не менее, во
избежание различных накладок, в программах рекомендуется всегда указы-
вать точный 8-разрядный адрес порта.

Ниже рассмотрены стандартные порты ZX Spectrum. Для каждого порта
указаны его десятичный и, в» скобках, шестнадцатиричный и двоичный адреса.

Внешнего устройства с таким адресом в ZX Spectrum нет, поэтому из
порта 255 считывается состояние «пассивной» шины данных. Благодаря
оригинальному схемотехническому решению, в ZX Spectrum шина данных
используется одновременно для двух процессов: работы Z80 и вывода ин-
формации на дисплей. В момент формирования изображения из порта 255
считываются случайные значения (анализ показывает, что преимуществен-
но считываюгся атрибуты отображаемого в данный момент знакоместа), а во
время, не занятое выводом — значение 255.*

Чтение из порта 255 в некоторых фирменных программах использу-
ется для синхронизации относительно вывода на экран, и поэтому они
отказываются работать на многих самоделках.**

ZX Spectrum управляет магнитофоном, клавиатурой, цветом бордюра
и динамиком через один-единственный порт с адресом 254.

При записи байта в порт:
биты D0...D2 определяют цвет бордюра:

биг D3 управляет выходом на магнитофон. Манипулируя этим битом,
программы обслуживания магнитофона формируют сигнал записи;
бит D4 управляет звуковым каналом. Например, дя того чтобы получить
звук частотой 1 кГц, необходимо устанавливать и сбрасывать этот бит
1000 раз в секунду;

биты D5*.tD7 не используются.

*) На самом деле, если Вы попытаетесь обратиться по другим незадейсгво-
ванным адресам портов, то получите аналогичный результат.

**) В ZX Spectrum +3 схема отображения выполнена более грамотно, чем в
Speccy, однако это стало причиной неполной совместимости с базовой
моделью. Ряд программ, например, Short Circuit, на Spectrum -КЗ не
работают.

Порт 255 (#FF, %11ШШ|

Порт 254 |#FE, %f 11111!®!

000 (0) — черный

001 (1) — синий

010 (2) — красный

011 (3) — фиолетовый

100 (4) — зеленый

101 (5) — голубой

110 (6) — желтый

111 (7) — белый;

При чтении байта из порта:

биты D0...D4 обслуживают клавиатуру.

Стандартная клавиатура ZX Spectrum состоит из 40 клавиш, которые
разбиты на восемь рядов по пять кнопок в каждом (рис. 12). Для того, чтобы

сброшенный бит

DO

D1

D2

D3

D4

D4

D3

D2

D1

DO

п

#F7FE

All

1

2

3

4

5

6

7

8

9

0

A12

#EFFE

n

о

#FBFE

A10

Q

W

E

R

T

Y

U

I

О

P

A13

#DFFE

о

р

#FDFE

A9

A

S

D

F

G

H

J

К

L

EN

A14

#BFFE

p

т

#FEFE

A8

CS

Z

X

С

V

В

N

M

SS

SP

A15

#7FFE

T

Рис. 12. Организация клавиатуры ZX Spectrum.

узнать, какая из клавиш ряда нажата, нужно прочесть байт из порта, полный
16-разрядный адрес которого задается так: младший байт адреса равен 254
(#FE), а в старшем байте сброшен в ноль один из разрядов, соответствующий
выбранному ряду. Биты D0...D4 считанного байта указывают, какая из
кнопок в ряду нажата — соответствующий бит будет сброшен. Например,
чтобы узнать, нажата ли клавиша Enter, нужно проверить состояние бита DO
в байте, считанном из порта #BFFE.

бит D6 отображает состояние магнитофонного входа. Для получения ин-
формации с магнитной ленты программа должна постоянно опраши-
вать этот бит.

Некоторые внешние устройства могут «эмулировать» порт 254. При-
мер такого устройства — Interface 2. Помимо других своих функций*
Interface 2 обслуживает попу-
лярный тип джойстика «для
двоих» — Sinclair Joystick. Этот
джойстик «запараллелен» с
цифровыми клавишами кла-
виатуры, так что если у Вас нет
Interface 2, Вы все-таки можете
использовать Sinclair-джой-
стик, либо аппаратно подклю-
чив его к соответствующим
клавишам, либо имитировать
его, работая этими клавишами
как джойстиком. В табл. 1 по-
казано соответствие между
цифровыми клавишами и фун-
кциями Sin clair-джойстика.

Таблица 1. Назначение клавиш
Sindair-джойстика.

Таблица 1. Назначение клавиш
Sindair-джойстика.

Номер джойстика

1

2

Адрес порта

#EFFE

#F7FE

Функция

бит

клавиша

бит

клавиша

влево (left)

D4

6

DO

1

вправо (right)

D3

7

D1

2

вниз (down)

D2

8

D2

3

вверх (up)

D1

9

D3

4

стрельба (fire)

DO

0

D4

5

Обращение к описанным ниже портам имеет смысл только при
подключении к ZX Spectrum соответствующего интерфейса внешнего уст-
ройства, например, принтера или джойстика.

*) Interface 2 позволяет также использовать картриджи с ПЗУ, в которое при
изготовлении записываются готовые программы.

Порт 151 t#FB, %11111011)

Порт обслуживает стандартный для ZX Spectrum принтер —
ZX Printer, драйвер которого «зашит» в ПЗУ компьютера. Некоторые интер-
фейсы принтеров в тот момент, когда на адресной шине появляется адрес
25!, «перехватывают» управление. Например, интерфейс ZX Lprint III с
помощью драйверов из его собственного ПЗУ может через порт 251 управ-
лять различными типами принтеров.

Порт 247 (#F7, %11110111)
Порт 239 (#EF, %11101111)
Порт 231 (#Е7, %11100111)

Порты устройства Interface 1, которое позволяет: соединять компью-
теры в локальную вычислительную сеть; использовать стандартный интер-
фейс RS-232C; подключать до восьми микродрайвов (накопителей на «бес-
конечной» магнитной ленте), работать с которыми несколько удобнее, чем с
магнитофоном. Однако в Союзе Interface 1 по разным причинам не получил
распространения.

Порт 31 (#1F, %Р0011111)

Порт 31 служит для свя-
зи с самым распространенным
типом джойстика — Kempston
Joystick. Старшие три бита
(D5...D7) этого порта всегда
сброшены в ноль — именно по
этому условию некоторые про-
граммы определяют, что
kempston-джойстик подключен.
Младшие биты (DQ...D4) инди-
цируют состояние джойстика
(см. табл. 2).

Несколько битов может быть установлено одновременно. Например,
если установлены биты DO, D3 и D4, то это означает, что джойстик находится
в положении «влево-вниз» и нажата «стрельба».

При нейтральном положении kempston-джойстика из порта 31 должен

считываться ноль.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Party - Funtop: Репортаж Сергея Новикова - День первый: Compo.
Реклама - Объяаления и реклама.
scene - не хочу платить деньги!!!
Стройка - thе bеst.
Spectrum программинг - Краткое пособие для системного кодера. Советы автору "boot'a", паковщика, Музыкального редакторы.

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