Техника - молодёжи 1995-01, страница 52

Техника - молодёжи 1995-01, страница 52

ПОРТ, НО НЕ ГАВАНЬ, КОМАНДЫ, НО НЕ КОРАБЕЛЬНЫЕ...

Системно-ориен ированное программирование хорошо тем, что позволяет без переделок (или с минимальными изменениями) переносить программу с одной ЭВМ на другую, если она работает под управлением той же операционной системы. При этом программист оперирует ограниченным числом вызовов системных функции, каждая из которых представляет собой некую процедуру, осуществляющую, в зависимости от условий, связь пользователя с тем или иным устройством. Недостаток очевиден: универсальность системной процедуры замедляет обмен данными (возрастает число машинных команд, обращений к ячейкам памяти и регистрам для контроля заданных параметров и т.п.).

Программирование машинно-ориентированное позволяет добиться большей скорости обработки данных — они передаются непосредственно в порт (или считываются из оного) — то есть следуют по некоему адресу, указывающему на конкретное устройство. Перенести такую программу на другой ПК сложнее — нужно переименовать порты, учесть иную карту памяти и т.д. Но там, где нужна скорость (прежде всего в программах, выполняемых в реальном масштабе времени, например, в большинстве игровых), без прямого обращения к "железу" не обойтись. Естественно, для этого необходимо досконально знать, какой порт за что отвечает, что на него подать для достижения требуемого эффекта и что можно считать при выполнении необходимых условий. Применительно к популярному среди читателей "ТМ" "Энтер-прайзу" информацию на сей счет систематизировал программист Александр ГУСЕВ.

Рассмотрим некоторые особенности программного ввода/вывода (в/в) микропроцессора Z80:

1. Раздельное с памятью адресное пространство для портов.

2.6 типов команд ввода и 6 — вь вода.

3. Адресация до 256 портов.

4. Возможность увеличить число портов ввода до 2'16 = 65536. Для этого перед выполнением команды ввода необходимо старшие 8 битов адреса порта поместить — для операции непосредственного чтения — в аккумулятор, для иных операций ввода — в ре-

истр В.

5. Наличие команд непосредственного в/в аккумулятора; косвенного — всех регистров, кроме (HL), по регистру С; а также операций блочного в/в памяти со счетчиком в регистре В и указателем в паре HL, косвенно по регистру С.

Здесь, по просьбам пользователей, приводится карта портов ввода/вывода компьютера "Энтерпрайз". Условные обозначения к таблице: R — чтение из порта, W — запись в порт, ТГ — тоновый генератор.

Общее распределение портов по адресам следующее.

Порты 80H..8FH заре ервированы для видеопроцессора NICK, a A0H..AFH, B0H..B3H, В4Н и BFH — для аудиопроцессора DAVE. Порты В5Н..В7Н обеспечиваю обмен ин

формацией с внешними устройствами (клавиатура, джойстики, принтер, интерфейс SERIAL/NET и магнитофон). Остальные порты в базовой конфигурации не используются.

Как пример, иллюстрирующий действие портов W81H, WA7H, WA8H, R/WB0H..B3H и RB6H (забегая вперед, отметим, что биты 7..6 этого порта определяют состояние внешнего входа IN магнитофона), приведена небольшая программа, которая преобразует аналоговый сигнал, поступающий с магнитофона, в цифровой код с последующей его записью в память. Другая процедура программы выполняет эти операции в обратной последовательности, то есть воспроизводит оцифрованный ранее сигнал на внутреннем динамике компьютера. Также возможны чтение/запись цифрового кода на внешний носитель (дисковод, магнитофон) и изменение скорости записи/воспроизведения.

100 ALLOCATE 109

110 CODE W=HEX$("06,10,10,FE,C9") 120 CODE B=HEX$("F3,DB,B0,3C,D3,B1 ,C9") 130 CODE l=HEX$("DB,B1,3C,D3,B1,3C,C9 ) 140CODER HEX$( ID')&WORD$(B)&HEX$("21, 00,40,36,01 ,DB,B6,D3,81,17,CB, 16,CD") &WORD$(W)&HEX$("30,F4,23,CB,7C,28,ED, CD")&WORD$(I)&HEX$("20,E5,C9') 150 CODE P=HEX$("CD")&WORD$(B)&HEX$("3E, 08,D3,A7,21,00,40,0E,08,CB,06,9F,D3, A8,E6,07,D3,81,CD")&WORD$(W)&HEX$( "0D,20,F1,23,CB,7C,28 EA,CD")&WORD$( l)&HEX$("20,E2,C9") 160 CODE E-HEX$("CD )&WORD$(B+1 )&HEX$(

"3E,6A,01,00,40,11,00,40,F7") 170 CODE RW=HEX$( 08,CO,CD")&WORD$()

&HEX$("20,F0,2D,C9 ) 180 SET SPEAKER ON:TEXT 40:PRINT "R-

RECORD.P-PLAY S SAVE,L-LOAD,Q-SPEED" 190 DO

200 SELECT CASE UCASE$(INKEY$)

210 CASE "R"

220 CALL USR(R,0)

230 CASE "P"

240 CALL USR(P,0)

250 CASE "S"

260 INPUT PROMPT "Output file name:":F$ 270 OPEN #106:F$ ACCESS OUTPUT 280 POKE RW,8

290 IF USR(E,1) THEN PRINT "***Write

error" 300 CLOSE #106 310 CASE "L"

320 INPUT PROMPT "Input file name:":F$ 330 OPEN #106:F$ 340 POKE RW,6

350 IF USR(E,1) THEN PRINT ""'Read

error" 360 CLOSE #106 370 CASE "Q" 380 DO

390 INPUT PROMPT "Speed 1 ,.255:":S

400 LOOP WHILE S<1 OR S>255

410 POKE W+1,S

420 CASE ELSE

430 END SELECT

440 LOOP

450 END

Порт Биты Назначение

ООН.. 7..0 В базовой версии не использую ся .7FH

W80H 7 0/1 =SPEAKER ON/OFF

6..5 Приорите внешнего цвета входа EC0..EC3

4. .0 Старшие 5 битов цветов палитры 8.. 15

W81H 7..0 Цвет ордюра

W82H 7..0 Биты 11..4 указателя на таблицу параметров макровидеос рок биты 3..0указателя 0

W83H 7 1=Активизация NICK 6=1

5..4 Не используются

3..0 Биты 15.. 12 указателя на таблицу параметров макровидеос рок в видеопамяти (сегменты FCH..FFH)

84H.. 7..0 Зарезервированы для N СК ..8FH

90H.. 7..0 Не ис ользуются ..9FH

WA0H 7..0 Бить 7..0 12 битового о рвтного счетчика ТГ0

WA1Н 7 1 ^Включение кольцевой модуляции с ТГ2 данные 6 1=Включение фильтра высокой частоты с ТГ1 для 5..4 00=4истыйтон

ТГО 01 Модуляция от 4 би ового счетчика

10=то же от 5 битового 11=то же от 7 би ового 3..0 Биты 11..8 12-битово о обратного

счетчика ТГО, вместе с WA0H задает часто ту ТГ0= 125000 (N+1) Гц

WA2H 7..0 Аналогично WA0H, но для ТГ1

WA3H 7 1- Включение кольцевой модуляции с ТГЗ данные 6 Включение фильтра вь сокой часто ь с ТГ2

для 5..4 Анало H4HOWA1H, нодляТП

ТГ1 3..0 Аналогично WA1H, но для ТГ1

WA4H 7..0 Аналогично WA0H, но для ТГ2

WA5H 7 1-Включение кольцевой модуляции с ТГО

данные 6 1 Включение филь ра высокой частоты с ТГЗ

для 5..4 Анало ично WA1H, нодляТГ2

ТГ2 3..0 Аналогично WA1H, но для ТГ2

WA6H 7 1 Включена е кольцевой модуляции с ТГ1 данные 6 1 ^Включение фильтра высокой частоты с ТГО для 5 1 =Включение фильтра низкой частоты с ТГ2 ТГЗ 4 1 Обмен 17-и 7-битных счетчиков (гене- 3..2 00=Используется счетчик на 17 бит ратор 01=на15бит

шума) 10=нв 11 бит 11=на9бит 1..0 Частота шумв 00=31.25 КГц

01,10 11=частоте ТГО, ТГ1, ТГ2 соответственно

WA7H 7 Не используется

Б..5 00=4астота прерываний от источника 1 равна 1 КГц 01=50 Гц

10=удвоенной частоте ТГО 11=удвоенной частоте ТГ1 4 1Ч1ри использовании порта WACH записанное в него зна ение рео разуется из цифрово о представления в аналоговое и выводится в прввый аудиоканал 0=Порг WACH определяет правую амплитуду ТГО 3 1 Аналогично биту 4, но для порта WA8H и левого аудиоканала 0 Анало ично биту 4, но для порта WA8H и левой амплитуды ТГО 2..0 Синхронизация ТГ2..ТГО соотве твенно 1=счетчик выключен, 0=включен

WA8H.. 7..6 Не используют я

..WABH5..0 Левые вмплитуды ТГО..ТГЗ соответственно, цифровое представление сигнала для WA8H, если бит 3 порта WA7H =1

WACH.. 7 .6 Не испо ьзуются

..WAFH 5..0 Правые амплитуды ТГО..ТГЗ соо ветствен но, цифровое представление си нала для WACH. если бит 4 порта WA7H =1

R/W 7..0 Значение сегмента на страницах 0..3 адресного ВОН . прос ране ва Z80, соответственно

..B3H

(Окончание таблицы — в ближайшем омере журнала)

ТЕХНИКА-МОЛОДЕЖИ 1 '9 5

33