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

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

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

2022-10-04 40
Регистры данных и аккумулятор 0.00 из 5.00 0 оценок
Заказать работу

 

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

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

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

_______________________________________ Счетчик команд

 

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

___________________________________ Индексные регистры

 

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

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

 

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

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

средством регистровых пар. В стеке также автоматически сохраняется адрес возврата при вызове подпрограмм.

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

 

S Z x Н x P/V N CY
7 6 5 4 3 2 1 0

После выполнения ряда команд в соответствии с результатом операции изменяется содержимое флагового регистра F (рис. 11). флагом называется отдельный бит этого регистра. Флаг считается установленным, если в соответствующем бите записана единица, и сброшенным, если записан ноль. Значимыми являются 6 из 8 битов регистра F:

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

 

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

 

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

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

А2 — ZX Printer;                    251

A3 и А4 — Interface 1 и микродрайв.  247 и 239(231) **

__________________________________________________________________

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

**) Здесь и далее фразы на сером фоне означают, что они добавлены в оригинальную книгу под редакцией Дегтяр Олега Прокопьевича.

 

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

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

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

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

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

____________________________ Порт 255 (#FF, %11111111)

 

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

атрибуты отображаемого в данный момент знакоместа), а во время, не занятое выводом — значение 255.*

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

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

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

 

____________________________ Порт 254 (#FE, %11111110)

 

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

При записи байта в порт:

биты DO... D 2 определяют цвет бордюра:

 

000 (0) — черный           100 (4) — зеленый

001 (1) —синий             101 (5) — голубой

010 (2) — красный          110 (6) — желтый

011 (3) — фиолетовый       111 (7) — белый;

 

бит D 3 управляет выходом на магнитофон. Манипулируя этим битом, программы обслуживания магнитофона формируют сигнал записи;

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

биты D 5... D 7 не используются.

 

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

биты DO... D 4 обслуживают клавиатуру.

Бит  адреса

 

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

 

Бит  адреса

D0 D1 D2 D3 D4 D4 D3 D2 D1 D0
11 п #F7FE A11 1 2 3 4 5 6 7 8 9 0 А12 #EFFE п 12
10 о #FBFE A10 Q W E R Т Y U I О Р А13 #DFFE о 13
9 Р #FDFE A9 A S D F G H J К L EN А14 #BFFE Р 14
8 т #FEFE A8 CS Z X С V В N М SS SP А15 #7FFE т 15

 Стандартная клавиатура ZX Spectrum состоит из 40 клавиш, которые разбиты на восемь рядов по пять кнопок в каждом (рис. 12). Для того, чтобы узнать, какая из клавиш ряда нажата, нужно прочесть байт из порта, полный 16-разрядный адрес которого задается так: младший байт адреса равен 254 (#FE), а в старшем байте сброшен в ноль один из разрядов, соответствующий выбран-

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

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

 

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

 

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

1

2

Адрес порта

#EFFE

#F7FE

Функция бит клавиша бит клавиша
влево (left) D4 6 D0 1
вправо (right) D3 7 D1 2
вниз (down) D2 8 D2 3
вверх (up) D1 9 D3 4
стрельба (fire) DO 0 D4 5

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

 

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

 

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

____________________________ Порт 251 (#FB, %11111011)

 

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

 

____________________________________________________________

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

Порт 247 (# F 7, % 11110111)

Порт 239 (# EF, % 11101111)

____________________________ Порт 231 (#Е7, %11100111)

 

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

 

____________________________ Порт 31 (#1F, %00011111)

 

установленный бит состояние джойстика
D0 влево (left)
D1 вправо (right)
D2 вверх (up)
D3 вниз (down)
D4 стрельба (fire)

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

kempston-джойстика.

 

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

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

___________________________________________________________

                     СИСТЕМА ПРЕРЫВАНИЙ

 

Прерывания являются необходимым средством для программирования параллельных процессов. С их помощью, например, в ZX Spectrum одновременно с выполнением программы на Бейсике осуществляется сканирование клавиатуры и отсчет времени системным таймером.

В процессо ре Z80 имеется два аппаратных входа и нициализации прерываний: INT — для маскируемых прерываний и NMI — для немаскируемых. Маскируемые прерывания получили свое название благодаря возможности программно запрещать или разрешать реакцию на сигнал прерывания, тогда как для немаскируемых прерываний это невозможно.

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

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

 

_______________________________Маскируемые прерывания

 

В ZX Spectrum на вход INT процессора постоянно подается полукадровый синхронизирующий сигнал с периодом 1/50 секунды. В операционной системе это используется для организации опроса клавиатуры и наращивания значения системного счетчика одновременно с работой интерпретатора Бейсика.

Управлять прохождением маскируемых прерываний можно командами DI и EI, которые изменяют состояние специального внутреннего триггера микропроцессора IFF. Команда DI сбрасывает этот триггер, запрещая прерывания, EI устанавливает его, разрешая прерывания.

При вызове маскируемого прерывания триггер IFF автоматически сбрасывается, запрещая повторный вызов прерываний. После обработки прерывания процессор не устанавливает триггер вновь — для разрешения прохождения последующих прерываний программист должен включить в программу команду EI.

 Z80 имеет три режима обработки маскируемых прерываний, которые устанавливаются командами процессора IM О, IМ 1 и IM 2. К сожалению, программным путем практически невозможно определить, в каком режиме обработки прерываний находится процессор в конкретный момент времени.

______________________________________________Режим 0

 

Режим устанавливается либо командой IМ 0, либо аппаратным сбросом процессора, и ничем не отличается от режима обр або тки прерываний в микропроцессоре I8080. По приходу сигнала INT процессор считывает с шины данных код команды (предварительно выставленный на шину внешним прерывающим устройством) и выполняет ее. В принципе, это может быть любая команда (чаще всего используются команды RST N или CALL addr). Но ZX Spectrum устроен таким образом, что при вызове прерывания в режиме 0 с шины данных всегда считывается значение 255 (#FF) — код команды RST 56. И, следовательно, для ZX Spectrum этот режим аналогичен режиму 1.*

 

 

___________________________________________________________________

*) Строго говоря, это не совсем так, см. примечание к режиму 2.

______________________________________________Режим 1

 

Устанавливается командой IM 1. По прерыванию процессор передает управление на ячейку с адресом 56 (выполняется команда CALL 56). Именно в этом режиме обрабатывает прерывания операционная система ZX Spectrum.

 

______________________________________________Режим 2

 

Устанавливается командой IM 2. Режим дает возможность программисту самостоятельно обрабатывать прерывания, чем и интересен.

При поступлении сигнала на прерывание, микропроцессор считывает с шины данных байт, называемый вектором прерывания. ZX Spectrum устроен так, что вектор прерывания всегда равен 255 (#FF).* Он передается в младший байт шины адреса, а в старший байт записывается содержимое регистра вектора прерываний I. По полученному таким образом адресу Z80 считывает из памяти два последовательно расположенных байта, которые интерпретируются процессором как адрес программы обработки прерывания (сначала считывается младший байт адреса, затем старший). Следовательно, выбрав режим прерываний 2 и задав значение регистра I, можно переопределить адрес процедуры обработки прерывания.

Для задания адреса размещения программы обработки прерываний наиболее удобно использовать значения, считываемые из стандартного ПЗУ ZX Spectrum. При этом в регистр I нужно занести число в пределах от 0 до 63 (#00...#3F). Например, если в I содержится число 9, то адрес ячейки, из которой будет считан младший байт адреса программы обработки прерываний, равен 2559 (9x256+255). Старший байт, соответственно, будет считан по адресу 2560. В данном случае определить адрес, по которому необходимо разместить программу обработки прерываний, можно, выполнив строку на Бейсике:

 

PRINT PEEK (2559)+256*РЕЕК (2560)

 

Результат должен быть равен 65129. Это и есть адрес, по которому должна располагаться подпрограмма обработки прерываний.

Определить все возможные считанные из ПЗУ адреса размещения процедур обработки прерываний можно с помощью следующей программы:

 

10 INPUT "Interrupt vector:";I:REM вектор прерывания

20 PRINT I,PEEK (I*256+255)+256*PEEK (I*256+255+1)

 

Уже рассчитанные адреса занесены в табл. 3.

Возврат из маскируемых прерываний производится командой RETI. Она распознается специальными периферийными ____________

 

*) Некоторые внешние устройства, например, AMX-mouse, могут генерировать вектор прерывания, отличный от 255.

 

Таблица 3. Адреса процедур обработки прерываний.

I адрес I адрес I адрес I адрес
0 20430 16 51984 32 52513 48 60208
1 52818 17 08729 33 33485 49 57640
2 22269 18 52481 34 00544 50 13627
3 39020 19 49749 35 49537 51 13256
4 10419 20 25705 36 08527 52 01560
5 02294 21 51673 37 23670 53 57124
6 29149 22 51568 38 20444 54 34307
7 16039 23 12493 39 00288 55 41231
8 02088 24 15582 40 32348 56 65535
9 65129 25 23842 41 58154 57 65535
10 32802 26 13824 42 19754 58 65535
11 58888 27 07306 43 23653 59 65535
12 53183 28 49947 44 07117 60 00255
13 52503 29 02344 45 55781 61 00000
14 14367 30 26573 46 23713 62 00255
15 27928 31 03360 47 04569 63 00060

 

микросхемами*, что позволяет организовать многоуровневую систему прерываний. Но, поскольку в ZX Spectrum эта система не используется, то вернуться из прерывания можно и по команде RET.

_____________________________Немаскируемые прерывания

 

Немаскируемое прерывание вызывается при поступлении сигнала на вход NMI процессора. При этом выполнение основной программы приостанавливается, и управление передается на ячейку с адресом 102 (#66) (выполняется команда CALL 102).

В ZX Spectrum немаскируемое прерывание не задействовано, но оно может вызываться некоторыми внешними устройствами. При этом вместо стандартной «прошивки» подключается ПЗУ вызвавшего прерывание устройства, в котором записана программа обработки прерывания. Этот принцип используется, например, в дисковой системе Beta Disk фирмы Technology Research и интерфейсе   Multiface One фирмы Romantic Robot.

При входе в немаскируемое прерывание сбрасывается триггер IFF, и, следовательно, запрещается вызов маскируемых прерываний.

Возврат из немаскируемого прерывания и восстановление состояния регистра IFF происходит по команде процессора RETN.

Следует отметить, что на самом деле Z80 имеет два триггера, участвующих в обработке прерываний: IFF 1 и IFF 2. Триггер IFF1 используется для управления разрешением маскируемых прерываний, a IFF2 хранит его состояние при обработке немаскируемых. Состояние триггера IFF2 отражается битом P/V флагового регист ра после выполнения команд LD А, I или LD A, R.________________

*) Фирмой Zilog были разработаны микросхемы, входящие совместно с Z80 CPU в комплект под общим названием Z80.

Состояния триггеров IFF1 и IFF2 в различных режимах работы процессора приведены в табл. 4.

 

Таблица 4. Состояния триггеров IFF 1 и IFF 2.

Действие IFF1 IFF2 Примечание
              _____________ сигнал RESET   0 ® IFF1   0 ® IFF2   устанавливает режим 0
команда DI 0 ® IFF1 0 ® IFF2 запрещает прерывания
команда EI 1 ® IFF1 1 ® IFF2 разрешает прерывания
              _______ сигнал INT   0 ® IFF1   0 ® IFF2   маскируемое прерывание
команда RETI IFF2 ® IFF1 не изменяется

возврат из маскируемого прерывания

     
              _______ сигнал NMI   0 ® IFF1   IFF1 ® IFF2   немаскируемое прерывание
команда RETN IFF2 ® IFF1 не изменяется

возврат из немаскируемого прерывания

     
команда LD А,I не изменяется не изменяется IFF2 ® P/V
команда LD A,R не изменяется не изменяется IFF2 ® P/V

 

____________________________ОРГАНИЗАЦИЯ ПАМЯТИ

 

Постоянное запоминающее устройство ZX Spectrum имеет объем 16 К и занимает младшие адреса памяти #0000...#3FFF. В нем расположены: тест, проверяющий работоспособность компьютера при включении питания; интерпретатор языка Бейсик; знакогенератор; программы, обеспечивающие вывод на экран, связь процессора с клавиатурой и др. Некоторые внешние устройства могут отключать стандартное ПЗУ, заменяя его своей памятью.

Остальные 48К адресного пространства занимает оперативное запоминающее устройство (адреса #4000...#FFFF). Причем в большинстве случаев для пользовательских программ не может быть отведено все пространство ОЗУ — часть его используется под экранную область и область системных переменных Бейсика.

В табл. 5 приведена карта распределения памяти ZX Spectrum. Справа указаны физические адреса областей памяти, расположение которых жестко фиксировано. Адреса других областей могут меняться в зависимости от наличия внешних устройств и работающих в данный момент программ. Местоположение этих областей определяется системными переменными (см. «Системные переменные»), имена и адреса которых приведены в таблице слева. Области, наличие которых не обязательно для работы операционной системы ZX Spectrum, отмечены тонкими линиями.

 

_____________________________ Экранная область памяти

 

Размер экрана в ZX Spectrum составляет 256 точек по горизонтали и 192 по вертикали. Операционной системой вывод символов на экран осуществляется в стандартные знакоместа 8x8 точек. Таким образом, экран делится на 24 символьные строки по 32 знакоместа в каждой (см. рис. 13).

 

(23732) RAMP Т

 

(23675) UDG

 

 

(23730) RAMTOP

 

 

(23613) ERR_SP

 

(23653) STKEND

(23651) STKBOT

(23649) WORKSP

 

(23641) E_LINE

 

(23627) VARS

(23635) PROG

 

(23631)CHANS

  Область размещения символов, определяемых пользователем (User Defined Graphics)

#FFFF

 

#5СВ6

#5С00

#5В00

#5800

#4000

#0000

Область, недоступная операционной системе. Обычно используется программистом для размещения программ в кодах
Байт-разделитель (#ЗЕ)
Стек оператора GO SUB. Используется исключительно при организации подпрограмм
Адрес программы обработки ошибки (2 байта)
Стек операционной системы
Стек калькулятора
Рабочая область операционной системы
Байт-разделитель (#80)
Буфер строчного редактора интерпретатора Бейсика. Строка, расположенная в буфере, заканчивается символом перевода строки (#OD)
Байт-разделитель (#80)
Имена и значения переменных бейсик-программы
Текст бейсик-программы
Байт-разделитель (#80)
Область размещения информации о каналах
Область, используемая дисковой операционной системой TR-DOS
Системные переменные Interface 1
Системные переменные операционной системы
Буфер принтера (256 байт)
Область атрибутов экрана (768 байт)
Область экрана (6К)
ПЗУ (16К)

  Таблица 5. Распределение памяти ZX Spectrum.

Для вывода изображения используется экранная область памяти объемом 6К и область атрибутов — 768 байт. Каждый байт экранной области определяет состояние 8 расположенных горизонтально одна за другой точек (бит 7 соответствует левой точке, бит 0 — правой). Если какой-либо бит в байте установлен, то точка, определяемая этим битом, принимает цвет тона, если бит сброшен — цвет фона. Байты, соответствующие строкам экрана, расположены в памяти не последовательно. Первые 32 байта экранной области задают слева направо верхнюю строку, следующие 32 байта — 9-ю сверху, следующие — 17-ю и далее через 8 строк вплоть до 57-й. Затем расположены байты, соответствующие строкам 2-й, 10-й и т. д. до 58-й. Таким образом, со смещением на одну и шагом в 8 строк задаются верхние 64 строки, то есть треть экрана. Аналогично, начиная соответственно с 65-й и 129-й строк, определяются средняя и нижняя трети экрана.

В ZX Spectrum атрибуты (цвет тона, цвет фона, яркость и мерцание) задаются не для отдельной точки, а для знакоместа. Каждому знакоместу в области атрибутов соответствует один байт, в котором:

 

Биты DO... D 2 определяют цвет тона;

Биты D 3... D 5 определяют цвет фона;

Бит D 6 установлен в режиме повышенной яркости (задается одновременно и для тона, и для фона);

Бит D 7 установлен в режиме мерцания.

 

Байты атрибутов расположены в памяти последовательно. Первые 32 байта атрибутов соответствуют верхней символьной строке, следующие 32 — второй символьной строке сверху и далее до конца экрана.

Приведенные ниже программы помогут Вам разобраться со строением экрана ZX Spectrum. Первая из них демонстрирует соответствие битов ячейки памяти экранной области точкам на экране:

10 BORDER 5: PAPER 7: INK 9: CLS:REM подготовка экрана

20 INPUT "bit numbers 0...7 ";b:REM ввод номера бита

30 LET n=2h b:REM вычисление «веса» бита

40 POKE 16384, n:REM запись байта, содержащего установленный в единицу бит, в первую ячейку экранной области

50 GOTO 20

 

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

 

10 BORDER 5: PAPER 7: INK 9: CLS:REM подготовка экрана

20 FOR a=16384 TO 22527: REM переменная перебирает все адреса экранной области

30 PRINT AT 6,6;" ";АТ 6,6;а;:REM вывод адреса

40 РОКЕ а,255: REM запись в экранную область по адресу а

50 IFINKEY$<>"" THEN GO TO 50:REM пауза

60 NEXT a: REM завершение цикла

Соответствие байтов атрибутов знакоместам на экране демонстрирует следующая программа:

 

 10 BORDER 7:PAPER 7:INK 7:CLS:REM цвет экрана белый

 20 LET n=703:LET c=1:GO SUB 110:REM заполнение основного экрана

 30 LET n=63:LET c=0:GO SUB 110:REM заполнение служебного экрана

 40 FOR a=22528 TO 23295:REM указывает адреса атрибутов

 50 LET b=INT(a/256):REM Ь присваивается значение 0...255

 60 POKE a,b:REM запись очередного значения в область атрибутов

 70 PRINT PAPER 7;INK 0;AT 5,5;b;:REM печать Ь

 80 IF INKEY$<>"" THEN GO TO 50:REM пауза

 90 NEXT a:REM завершение цикла

100 STOP:REM останов программы

110 FOR a=0 TO n:REM подпрограмма заполнения экрана

120 PRINT #c;"*";:REM заполнение экрана символом *

130 NEXT a: REM завершение цикла

140 RETURN:REM возврат из подпрограммы заполнения экрана

 

__________________________________Буфер принтера

 

Стандартный ZX Printer имеет одну иголку, которая в процессе печати последовательно проходит 256 позиций по горизонтали. Таким образом, символьная строка печатается за 8 проходов. Подготовка символьной строки к печати происходит в буфере принтера.

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

______________________________________Каналы и потоки

 

Операторы языка Бейсик, такие как PRINT, INPUT и некоторые другие, работают несколько сложней, чем это может показаться на первый взгляд. Выполните, например, оператор:

 

PRINT #0;" Test message ": PAUSE 0

 

Сообщение будет выведено на служебный экран. Если заменить число после символа # на 2, то вывод осуществится на основной экран, если подставить 3 — сообщение будет напечатано на принтере.

Для достижения большей гибкости при организации ввода / вывода в ZX Spectrum нет твердо установленного соответствия между операторами ввода/вывода и внешними устройствами. Связь между ними устанавливается с помощью системы каналов и потоков — каждый канал связан с конкретным устройством ввода/вывода, поток же указывает на канал, через который будут передаваться данные.

*) Работа с принтером в Spectrum 128 организована иначе.

Оператор ® Поток ® Канал ® Внешнее устройство

 

Информация о существующих каналах хранится в области ОЗУ, на которую указывает системная переменная CHANS (23631/32). Каждый канал задается так называемым описателем канала — блоком памяти, состоящем не менее чем из пяти ячеек этой области. Первые два байта описателя составляют адрес программы вывода на связанное с каналом внешнее устройство, следующие два — адрес программы ввода, пятый байт — символьное имя канала. Здесь же может храниться и другая информация о канале, но операционная система использует только упомянутые пять байт.

Системная переменная CURCHL (23633/34) содержит адрес первого байта описателя текущего канала (канала, через который осуществляется ввод/вывод в данный момент). Записав в эту переменную адрес первого байта описателя другого канала, можно установить его текущим.

При запуске компьютера операционной системой задаются четыре стандартных канала, которые обеспечивают:

 

"К" — вывод на вспомогательный экран и ввод с клавиатуры;

"S" — вывод на основной экран;  

"R" — запись байта в рабочую область памяти, адресуемую переменной K_CUR (23643/44);

"Р" — вывод байта на ZX Printer.

 

Описатели стандартных каналов занимают первые 20 байт в области информации о каналах. Их порядок менять не следует. Каналы "S", "R" и "Р" работают только на вывод (при попытке ввода управление передается на подпрограмму обработки ошибок (#15С4), выдающую при этом сообщение J Invalid I / O device).

При написании собственных процедур ввода/вывода, которые впоследствии будут «подключены» к какому-нибудь каналу, следует учитывать требования, предъявляемые к ним операционной системой ZX Spectrum. Обмен байтами (передача/прием) между операционной системой и подпрограммами ввода/вывода осуществляется через аккумулятор. Программа ввода, кроме того, использует некоторые флаги: при получении байта устанав­ливает флаг переноса CY; если байт на данный момент не введен, флаг CY сбрасывается и устанавливается флаг Z; при обнаружении конца файла или ошибки сбрасываются флаги CY и Z, после чего системой будет выведено сообщение 8 End of file. Заметим, что при ожидании ввода (флаг Z установлен) система не контролирует клавишу Break, об этом нужно позаботиться в программе ввода. Программы ввода/вывода являются подпрограммами относительно операционной системы ZX Spectrum.

В Бейсике не существует операторов для задания новых каналов, для этого необходимо написать специальную программу в кодах (или на Бейсике, используя оператор РОКЕ). Не рекомендуется «подключать» программы ввода/вывода к уже существующим каналам (то есть помещать в описатель канала адреса новых программ ввода/вывода), лучше задать новый канал. Количество каналов ограничено лишь свободным пространством ОЗУ.

Для осуществления ввода/вывода недостаточно только задать канал, необходимо еще и связать его с конкретным потоком. Только после этого, указывая в бейсик-операторах ввода/вывода номер потока (число, записываемое после символа #), через канал можно будет передавать и принимать информацию.

В операционной системе ZX Spectrum имеется 19 потоков, которым пр


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.185 с.