ВИДЕОПОРТ
© Манилов А.П., г. Москва, 1994 г.
Устройство для ввода изображений, закодированных в видеосигнале, в ZX-совместимые компьютеры, с программным обеспечением.
Введение.
Вхождение компьютеров в жизнь и быт современного человека происходит, в основном, по двум направлениям:
- персональные компьютеры;
- специализированные компьютерные системы.
Рассмотрим каждое из этих направлений.
Персональные компьютеры, оснащенные развитыми системами ввода/вывода, способны удовлетворить любые потребности человека в области получения, переработки и передачи информации. Под информацией понимается текст, речь, музыка, графика и движущиеся изображения. Единственный "минус" - это необходимость человеку, работающему с компьютером, прикладывать свою голову для достижения нужного результата. Если рассмотреть систему, состоящую из персонального компьютера, устройств ввода/вывода и человека, то эта система даёт возможность и подталкивает человека изменять параметры системы для достижения своих целей. Самым простым в этой системе, для выполнения какой-то цели, является изменение в программе работы компьютера. Такими изменениями можно сменить картинку, которая Вас не устраивает, ввести "вечную жизнь" или самому написать самую лучшую в мире игровую программу. Более существенные изменения могут произойти в системе при введении в нее новых устройств ввода/вывода. Так, возможности системы ПК + УВВ + ЧЕЛОВЕК резко увеличиваются при оснащении ZX дисковой системой. Это даёт доступ к сложным играм, программам, работающим с базами данных и т.д. Подключение к ZX-Spectrum принтера расширяет применение компьютера и создает дополнительные удобства.
А Вы пробовали нарисовать картинку с помощью графического редактора ARTSTUDIO? Если у большинства ничего путного не получилось, то это не потому, что ZX плохая машина или ARTSTUDIO сделали тупицы. Этот результат закономерен, поскольку способностью к рисованию обладают не все люди. Но ведь иногда хочется в своей программе поместить хорошую картинку? Такую возможность Вы можете получить, оснастив свой ZX-Spectrum устройством ВИДЕОПОРТ.
О втором пути вхождения компьютеров в жизнь людей. Это специализированные компьютерные системы, которые не дают никаких шансов человеку изменить что-либо. Т.е. данная система не включает в себя человека и существует сама по себе. Можно привести много примеров: предсказатели погоды, игровые приставки, системы связи с базами данных, работающие по жесткой программе и т. д. Думается, что читатели - это приверженцы первого направления развития компьютеров и автор надеется, что предлагаемое устройство ввода изображений - ВИДЕОПОРТ -поможет Вам расширить возможности Вашего ZX-Spectrum.
Идея разработки была почёрпнута автором из публикации ZX-РЕВЮ-1991 г. (стр. 121), в которой сообщалось о существовании устройства "Videoface" фирмы "DATA-SCIP". Не имея представления о принципах построения "Videoface", автор назвал свое устройство ВИДЕОПОРТ. Название связано с тем, что данное устройство играет роль порта ввода, но не для цифрового сигнала, а для видеосигнала. ВИДЕОПОРТ подключается к видеовыходу телевизора, видеокамеры, видеомагнитофона. Место устройства в системе показано на Рис.1.
К компьютеру ВИДЕОПОРТ подключается через буферизированную шину внешних устройств. Питание устройства может быть осуществлено от блока питания дисководов (+12v,+5v).
Рис. 1.
Под управлением программы, загруженной в ZX, кадр изображения копируется в ОЗУ устройства, затем читается в ZX-Spectrum, перекодируется в формат экрана и отображается на дисплее. Полный цикл смены изображений на экране дисплея - примерно одна секунда. Полученное изображение может быть сброшено на диск или ленту. Возможны варианты программ для дисковода или магнитофона.
Как использовать полученные картинки? Если учесть, что 70% информации человек получает через зрительный канал ввода данных, то можно предположить, что введение в систему ZX-Spectrum предлагаемого устройства потенциально увеличивает её мощность примерно в два раза. Правда, сам компьютер не сможет реализовать этих возможностей без участия человека. Таким образом, данное устройство с описанным ниже программным обеспечением позволяет пользователю получить копию видео-кадра на экране ZX-Spectrum и сохранить её в виде файла на диске или ленте. Ознакомиться с мнением автора на проблему использования картинок можно в разделе "Ну а что с этим SCREEN делать?".
Технические характеристики устройства.
- входное сопротивление по видеовходу............................................................................100 Ом
- амплитуда входного сигнала.............................................................................................0,5-1 В.
- частота дискретизации видеосигнала..............................................................................7 МГц.
- число строк, запоминаемое в ОЗУ....................................................................................312
- напряжение питания..........................................................................................................+12, +5 В.
- потребляемый ток по цепи +12В......................................................................................40 мА.
по цепи + 5В........................................................................................320 мА.
- имеется возможность ручной установки контрастности и баланса белого.
- подключается к ZX-Spectrum совместимым компьютерам через буферизированную шину
внешних устройств.
Программное обеспечение, сделанное автором, работает в среде ОС IS-DOS. Выбор определился так, поскольку IS-DOS - перспективная система для Spectrum-совместимых ПК, имеет в своем составе программы вывода на печать картинок, программы упаковки и распаковки файлов картинок. Помимо описания этой программы, в разделе "Программное обеспечение" представлены программы для работы в TR-DOS и для работы с магнитофоном.
Функциональная схема устройства.
Принцип работы устройства ВИДЕОПОРТ поясняется функциональной схемой, приведенной на рис. 2.
Перечислим функциональные устройства с указанием их назначения: СОГЛАСУЮЩЕЕ УСТРОЙСТВО - предназначено для согласования внешней цепи.
УСТРОЙСТВО ВЫДЕЛЕНИЯ СИНХРОСИГНАЛОВ - обеспечивает выделение из видеосигнала строчных синхроимпульсов (СИ) и кадровых синхроимпульсов (КИ). Обеспечивает подавление помех и выдает СИ и КИ со стабильной длительностью и амплитудой.
КОМПАРАТОР - обеспечивает формирование уровня видеосигнала и сравнение с заданным уровнем. Имеет ручное управление уровнем видеосигнала и уровнем срабатывания компаратора.
ФОРМИРОВАТЕЛЬ ТАКТОВЫХ СИГНАЛОВ - определяет частоту дискретизации видеосигнала и обеспечивает синхронизацию работы сдвигового регистра и схемы управления ОЗУ.
СДВИГОВЫЙ РЕГИСТР - служит для фиксации состояния выхода компаратора и формирования байта данных.
ОЗУ - накопитель данных, хранит копию кадра.
СХЕМА УПРАВЛЕНИЯ ОЗУ - формирует адрес ОЗУ, сигналы чтения и записи в соответствии с режимом работы.
РЕГИСТР ДАННЫХ - служит для передачи данных из ОЗУ в шину данных ZX-Spectrum.
РЕГИСТР УПРАВЛЕНИЯ - предназначен для передачи управляющих сигналов от компьютера к схеме управления ОЗУ.
РЕГИСТР СОСТОЯНИЯ - служит для передачи состояния устройства в компьютер.
ДЕШИФРАТОР - обеспечивает дешифрацию сигналов системной шины ZX-Spectrum при обращении к регистрам данных, управления и состояния.
Устройство работает в двух основных режимах:
- режим записи в ОЗУ, инициируется компьютером;
- режим чтения ОЗУ, идет под управлением компьютера.
Режим ожидания возникает по окончании любого основного режима. Признак режима ожидания - высокий уровень сигнала ГОТОВ, при высоком уровне сигнала РЕЖИМ от компьютера.
Рассмотрим режим записи в ОЗУ. Для наглядности объяснения работы устройства, на рис. 3 приведена циклограмма сигналов, обозначенных на функциональной схеме.
До момента t0 уровни сигналов, указанные на циклограмме, блокируют запись в ОЗУ. Устройство находится в режиме ожидания. В момент t0, по команде ZX-Spectrum, переданной через регистр управления, сигнал РЕЖИМ устанавливается в "0". По этому сигналу схема управления ОЗУ переходит в состояние ожидания кадрового импульса (КИ).
Рис. 2.
При получении КИ в момент t1 схема управления ОЗУ обнуляет сигнал ГОТОВ. Этот момент соответствует началу записи картинки в ОЗУ. Компьютер, получив через регистр состояния сигнал ГОТОВ, соответствующий логическому нулю, устанавливает уровень сигнала РЕЖИМ в единицу и переходит в состояние ожидания конца записи в ОЗУ. Это событие произойдет через 20 мсек от t1 в момент tk. Начиная с момента t1 всеми процессами в устройстве управляет схема управления ОЗУ.
В момент t1 адрес ОЗУ сбрасывается в 0. Начинается преобразование видео-сигнала в последовательность байт. Формирователь тактовых сигналов синхронизируется строчными синхроимпульсами. Выходные сигналы формирователя, сигналы СТРОБ и СДВИГ сдвинуты относительно друг друга, что обеспечивает согласованность работы сдвигового регистра и схемы управления ОЗУ.
Каждый СИ увеличивает адрес ОЗУ до значения, кратного 64.
Каждый импульс ФИКСАЦИЯ увеличивает адрес ОЗУ на 1.
Рис. 3.
Сигнал СДВИГ, поступающий на сдвиговый регистр, обеспечивает запоминание уровня на выходе компаратора в сдвиговом регистре. По каждому восьмому сигналу СТРОБ схема управления ОЗУ формирует сигналы ЧТЕНИЕ, ФИКСАЦИЯ сдвигового регистра и ЗАПИСЬ ОЗУ. Кроме этого, схема управления ОЗУ увеличивает адрес ОЗУ на единицу. Таким образом, происходит запись в ОЗУ строки изображения.
При поступлении очередного строчного синхроимпульса на схему управления ОЗУ, происходит установка адреса ОЗУ соответствующего первому байту новой строки. Далее все происходит так же, как для предыдущей строки. Таким образом, строка за строкой, в ОЗУ возникает копия изображения. В этой копии бит имеющий значение 1 соответствует темному участку изображения, а значение 0 - светлому участку.
При поступлении очередного кадрового импульса на схему управления ОЗУ процесс записи ОЗУ прекращается, сигнал ГОТОВ устанавливается в единицу. Устройство ВИДЕОПОРТ переходит в режим ожидания команд от компьютера. В этом режиме устройство может находиться до снятия питания, при этом копия картинки в ОЗУ будет сохраняться.
Рассмотрим режим чтения ОЗУ. Для наглядности, на рис. 4 приводится циклограмма сигналов в режиме чтения ОЗУ.
Режим
Рис. 4.
Этот режим идёт полностью под управлением компьютера. Все сигналы передаются через регистр управления. Для начала процесса чтения ОЗУ выдается сигнал СБРОС АДРЕСА. В результате схема управления ОЗУ установит адрес в нуль. Перед чтением, если нужно, можно установить номер строки и номер байта в строке. Для этого достаточно подать на схему управления ОЗУ соответствующее число сигналов СЧЕТ СТРОК и СЧЕТ БАЙТ. После этого можно прочитать содержимое байта ОЗУ, для чего нужно выдать сигнал ЧТЕНИЕ через регистр управления и принять данные от регистра данных. Таким образом, можно считывать данные, из ОЗУ начиная с любой строки и с любого байта в строке. Это позволяет выбрать нужную часть из всего видео-кадра для преобразования в размер стандартной картинки ZX-Spectrum.
Весь обмен командами и данными между устройством и ZX-Spectrum осуществляется через регистры. Активизация регистров производится дешифратором, который анализирует сигналы системной шины ZX-Spectrum и выдает соответствующие сигналы выборки регистров по командам IN, OUT с соответствующими адресами портов.
На этом описание функциональной схемы заканчивается.
Принципиальная схема устройства ВИДЕОПОРТ.
|
Перечень используемых элементов. |
D1,D2,D3 |
- 537РУ17 |
D4,D5,D6,D7,D16 |
- 555ИЕ10 |
D8,D17 |
- 555ТМ2 |
D9,D23 |
- 555ИД7 |
D10,D13,D14 |
- 555ЛН1 |
D11,D12,D15 |
- 555ЛИ1 |
D18 |
- 155ИР13 |
D19,D20,D21 ,D22 |
- 555ИР22 |
D24 |
- 174ХА11 |
VT1,VT2,VT3 |
- КТ315 |
VD1-VD9 |
- КД522 |
VD10 |
- АЛ307 |
R1,R2,R5,R7,R6,R25,R21,R35 |
- 5.1 КОМ |
R3,R4 |
- 680 ОМ |
R8 |
- 1.6 КОМ |
R9 |
- 200 ОМ |
R10 |
- 510 ОМ |
R11,R16 |
- 27 ОМ |
R12 |
- 33 KOM |
R13 |
- 2.2 MOM |
R14 |
- 1.5 KOM |
R15 |
- 1.8 MOM |
R17 подстроеч. |
- 4.7 KOM |
R18,R20 |
- 82 KOM |
R19 |
- 12 KOM |
R22 |
- 6.8 KOM |
R23 |
- 22 KOM |
R24,R27 |
- 10 KOM |
R26 |
- 47 KOM |
R28 |
- 820 OM |
R29 |
- 270 OM |
R30,R37 |
- 120 OM |
R31 переменный |
- 3.3 KOM |
R32 переменный |
- 1.5 KOM |
R33 |
- 2.2 KOM |
R34,R36 |
- 3 KOM |
Rдоп |
- 220 ОМ |
C1,C5 |
- 0.1 МКФ |
С2 |
- 4700 ПФ |
С4,С8,С10,С14 |
- 0.22 МКФ |
С6,С18 |
- 100 МКФ |
С7 |
- 6800 ПФ |
С9 |
- 100 ПФ |
С11 |
- 0.047 МКФ |
С12 |
- 0.01 МКФ |
С13,С15,а5*,С16,С17 |
- 4.7 МКФ |
С19-С41 |
- 0.15 МКФ |
Сдоп - 20 МКФ X 16В
Q1 - 14 МГЦ
Примечание: С19-С41 - керамические конденсаторы по цепи +5В; установлены по одному на каждый корпус микросхемы.
Описание принципиальной схемы, приведенной на рис. 5, построено на раскрытии устройств, изображенных на функциональной схеме. Согласующее устройство выполнено на транзисторах VT1, VT2. Каскад на VT1 - эмиттерный повторитель, обеспечивающий согласование линии передачи видео-сигнала с внутренними устройствами ВИДЕОПОРТ. Каскад на VT2 инвертирует видеосигнал, что необходимо для правильной работы устройства выделения синхроимпульсов, которое построено на микросхеме D24. Для установки частоты строчной развертки предусмотрен подстроечный потенциометр R17. Для ограничения амплитуды строчных импульсов служит цепочка R9, VD10, R10. Светодиод VD10 индицирует наличие строчных синхроимпульсов. Микросхема D24 чувствительна к отклонениям значений сопротивлений и ёмкостей от указанных в приложении к принципиальной схеме.
Компаратор построен на транзисторе VT3. Предусмотрен регулятор контрастности R31 и регулятор баланса черного/белого - R34. Формирователь тактовых сигналов построен на логических микросхемах. Основа формирователя - стабилизированный кварцевый генератор на D13.1 и D13.2. Частота кварца - 14Мгц. Синхронизация формирователя от СИ осуществляется через элемент D13.4. Триггер D8.2 обеспечивает формирование сигнала СТРОБ. Сигнал СДВИГ формируется на D14.1, D14.3, D15.2. ОЗУ построено на трех микросхемах D1, D2 и D3. Примененные микросхемы - это статические ОЗУ по 8К каждая. Схема управления ОЗУ состоит как бы из нескольких узлов.
Узел формирования адреса ОЗУ и сигнала выборки микросхемы включает в себя счётчики D4, D5, D6, D7, логические элементы D10.1, D10.2, D10.5, триггер D8.1 и дешифратор D9. Узел управления счётчиками обеспечивает управление ими в зависимости от режима работы устройства. Построен этот узел на логических элементах D10.3, D10.4, D11.1-D11.4, D12.1, триггере D17.1. Узел формирования сигнала ЧТЕНИЕ сдвигового регистра и сигнала ЗАПИСЬ в ОЗУ. Данный узел построен на логических элементах D15.1, D14.2, D15.3, D15.4, D14.4, D14.5, счётчике D16 и триггере D17.2. Сдвиговый регистр построен на микросхемах: D18 - сдвиговый регистр, D19 - буферный регистр. Регистр состояния построен на микросхеме D21. Регистр управления построен на D22. Регистр данных - на D20. Дешифратор построен на микросхемах D23,D13.6.
К ZX-Spectrum ВИДЕОПОРТ подключается через буферизированную шину внешних устройств. Автором использовался ZX-Spectrum-совместимый компьютер "Сириус" фирмы "Русич" из поселка Протва Калужской области. К данному компьютеру фирма "Русич" выпускала плату расширения, на которой находится: дисковая система TR-DOS, интерфейс CENTRONICS, RS-232 и буферизированная шина внешних устройств. Если у компьютера пользователя нет этой шины, автор советует сделать её как можно быстрее. О том, как это сделать самому, можно прочитать в ZX-РЕВЮ.
Компоновка платы устройства ВИДЕОПОРТ.
Рекомендации по размещению элементов устройства на плате можно свести к нескольким:
- функциональные узлы должны быть размещены компактно;
- узлы непосредственно связанные с видеосигналом нужно разместить по возможности подальше от генератора;
- элементы регулировки должны иметь как можно более короткие провода подключения;
- цепи связи с компьютером должны быть подальше от цепей видеосигнала.
В качестве примера на рис. 6 приведён возможный вариант размещения элементов на плате (рисунок выполнен не в масштабе и не является монтажной схемой). Кабель связи платы с ZX-Spectrum должен быть не более 30 см.
Настройка устройства ВИДЕОПОРТ.
Рис. 6.
Если применены исправные элементы, устройство требует только установки частоты строчной развёртки резистором R17. При этом устройство полностью подключено к компьютеру и работает
под управлением программы. Если частота не соответствует необходимой, то изображение будет подобно показанному на рис. 7, 8. Регулируя R17 следует добиться изображения (рис. 9). Если это не получается, то следует искать причину неисправности.
Описать все возможные неисправности или ошибки в монтаже, а также последствия -достаточно сложно. Поэтому автор приводит только одну рекомендацию. При поиске неисправности в устройстве нужно проверить его работу в режимах чтения и записи.
Для проверки режима чтения нужно проверить циклограмму формирования адреса, сигналы чтения ОЗУ и выборки микросхем. Режим чтения осуществляется под управлением компьютера. При этом программа обеспечивает чтение одного экрана и переходит в режим ожидания нажатия клавиши. Если нажать клавиши управления курсором, то программа повторно осуществит чтение ОЗУ устройства.
Для проверки режима записи можно отключить компьютер, а вместо сигнала, поступающего на вывод 2 микросхемы D17.1, нужно подать сигнал нулевого уровня. При этом будет идти режим записи в ОЗУ. Такой режим работы позволяет проверить циклограмму работы устройства в режиме записи ОЗУ. Проверку работы интерфейса устройства со стороны ZX-Spectrum нужно производить в порядке, обычном для внешних устройств ZX-Spectrum.
Рис.9
Программное обеспечение устройства ВИДЕОПОРТ.
Автор предлагает три варианта программного обеспечения, предназначенного для управления устройством ВИДЕОПОРТ и сохранения полученной картинки на внешнем запоминающем устройстве. Первая программа предназначена для магнитофонного варианта ZX-Spectrum. Вторая программа работает с дисковой системой TR-DOS. Третья программа предназначена для работы в среде операционной системы IS-DOS.
Программа для магнитофонного варианта состоит из основной программы на Бейсике и загружаемого блока машинных кодов. Текст программы для ленты "VIDEOl", приведён в листинге 1.
Листинг 1.
5 CLEAR 29999: CLS : LET tt=0: LET nn=0 10 CLS : BORDER 7: INK 0: PAPER 7 20 LOAD "CODVID1"CODE 41 CLS : BORDER 7: INK 0: PAPER 7
159 IF tt=0 THEN INPUT "INPUT NUMBER FILE - ";tt: BORDER 7: INK 0: PAPER 7
160 CLS : POKE 23659,0: PRINT AT 14,2,-"FOR NEW SCREEN - ENTER" 170 PRINT AT 11,2,-"SCANNING - CURSOR"
190 PRINT AT 17,2,-"FOR START - ENTER"
195 PRINT AT 13,2,-"FOR SAVE SCREEN - S"
200 IF INKEY$="" THEN GO TO 200
220 BORDER 0: RANDOMIZE USR 32768
280 GO SUB 2000
310 GO TO 220
2000 LET a=PEEK 32772
2010 IF a=115 THEN GO TO 3000
2030 RETURN
3000 LET tt=tt
3006 LET F$=STR$ (tt)
3007 SAVE F$ CODE 16384,6912 3010 LET tt=tt+1: RETURN
После запуска программа устанавливает начальные значения переменных, очищает экран и загружает, с Вашей помощью, кодовый блок "CODVID1". После этого Вам придется ввести номер, начиная с которого будут нумероваться файлы, подлежащие сохранению. Затем программа напомнит Вам, что для сохранения файла нужно нажать клавишу "S", для получения очередной картинки -"ENTER", а для начала работы - тоже "ENTER". После этого происходит анализ нажатия клавиши и осуществляется запуск задачи в машинных кодах с адреса 32768. Как устроен этот блок - рассмотрим ниже.
Результатом работы кодового блока будет картинка на дисплее ZX-Spectrum. После возврата в основную программу, производится анализ кода нажатой клавиши, находящегося в ячейке 32772. Если код соответствует клавише "S" то происходит формирование имени файла и сохранение экрана ZX-Spectrum на ленту. Далее снова запускается машиннокодовая программа с адреса 32768. Текст этой программы, набранный при помощи ассемблера "GENS4", приведен в листинге 2.
Листинг 2.
10 |
ORG |
32768 |
130 |
BEGIN |
PUSH |
HL |
20 |
JP |
BEGIN |
140 |
|
PUSH |
BC |
30 UPR |
DEFB |
0 |
150 |
|
PUSH |
DE |
40 PRIZN |
DEFB |
0 |
160 |
|
LD |
A,#30 |
50 STR0 |
DEFB |
0 |
170 |
|
LD |
(UPR),A |
60 BAIT0 |
DEFB |
0 |
180 |
|
OUT |
(PUPR),A |
7 0 BUF1 |
EQU |
41550 |
190 |
B00 |
IN |
A,(PSOST |
8 0 PDAT |
EQU |
0 |
200 |
|
BIT |
0,A |
90 PUR |
EQU |
2 |
210 |
|
JR |
Z, B00 |
100 PUPR |
EQU |
3 |
220 |
B1 |
DI |
|
110 PSOST |
EQU |
1 |
230 |
|
LD |
HL,BUF1 |
120 ADR |
DEFW |
#0000 |
240 |
|
LD |
(ADR) , HL |
250 |
|
CALL |
INIC |
260 |
B0 |
CALL |
SCAN |
270 |
|
CALL |
SREN |
280 |
|
EI |
|
290 |
|
CALL |
KEY |
300 |
|
CP |
#09 |
310 |
|
JR |
Z, B3 |
320 |
|
CP |
#08 |
330 |
|
JR |
Z, B4 |
340 |
|
CP |
#0B |
350 |
|
JR |
Z, B5 |
360 |
|
CP |
#0A |
370 |
|
JR |
Z, B6 |
380 |
|
CP |
"s" |
390 |
|
JR |
Z, B9 |
400 |
|
CP |
"e" |
410 |
|
JR |
NZ, B1 |
420 |
B9 |
LD |
(PRIZN),A |
430 |
|
POP |
DE |
440 |
|
POP |
BC |
450 |
|
POP |
HL |
460 |
|
RET |
|
470 |
B3 |
LD |
A,(BAIT0) |
480 |
|
ADD |
A, 1 |
490 |
|
CP |
32 |
500 |
|
JP |
Z, B0 |
510 |
|
LD |
(BAIT0),A |
520 |
|
JP |
B0 |
530 |
B4 |
LD |
A,(BAIT0) |
540 |
|
SUB |
1 |
550 |
|
CP |
255 |
560 |
|
JP |
Z, B0 |
570 |
|
LD |
(BAIT0),A |
580 |
|
JP |
B0 |
590 |
B5 |
LD |
A,(STR0) |
600 |
|
SUB |
8 |
610 |
|
CP |
248 |
620 |
|
JP |
Z, B0 |
630 |
|
LD |
(STR0),A |
640 |
|
JP |
B0 |
650 |
B6 |
LD |
A,(STR0) |
660 |
|
ADD |
A, 8 |
670 |
|
CP |
100 |
680 |
|
JP |
NC, B0 |
690 |
|
LD |
(STR0),A |
700 |
|
JP |
B0 |
710 |
INIC |
PUSH |
HL |
720 |
|
PUSH |
BC |
730 |
|
PUSH |
DE |
740 |
|
PUSH |
AF |
750 |
IC1 |
IN |
A,(PSOST) |
760 |
|
BIT |
0,A |
770 |
|
JR |
Z, IC1 |
780 |
|
LD |
A, #18 |
790 |
|
LD |
(UPR),A |
800 |
|
OUT |
(PUPR),A |
810 |
|
CALL |
SBA |
820 |
IC2 |
IN |
A,(PSOST |
830 |
|
BIT |
0,A |
840 |
|
JR |
NZ,IC2 |
850 |
|
LD |
A,(UPR) |
860 |
|
OR |
#20 |
870 |
|
LD |
(UPR),A |
880 |
|
OUT |
(PUPR),A |
890 |
|
POP |
AF |
900 |
|
POP |
DE |
910 |
|
POP |
BC |
920 |
|
POP |
HL |
930 |
|
RET |
|
940 |
SCAN |
PUSH |
HL |
950 |
|
PUSH |
BC |
960 |
|
PUSH |
DE |
970 |
|
PUSH |
AF |
980 |
SC5 |
IN |
A,(PSOST |
990 |
|
BIT |
0,A |
1000 |
|
JR |
Z, SC5 |
1010 |
|
CALL |
SBA |
1020 |
|
LD |
A,(STR0) |
1030 |
|
LD |
B, A |
1040 |
SC6 |
LD |
A,0 |
1050 |
|
ADD |
A, B |
1060 |
|
JR |
Z, SC7 |
1070 |
|
CALL |
SA |
1080 |
|
DEC |
B |
1090 |
|
JR |
SC6 |
1100 |
SC7 |
LD |
B,192 |
1110 |
|
LD |
C,32 |
1120 |
|
LD |
HL,(ADR) |
1130 |
SC8 |
LD |
A,0 |
1140 |
|
ADD |
A, B |
1150 |
|
JR |
Z, SC3 |
1160 |
|
LD |
A,(BAIT0 |
1170 |
|
LD |
D, A |
1180 |
SC9 |
LD |
A,0 |
1190 |
|
ADD |
A, D |
1200 |
|
JR |
Z,SC10 |
1210 |
|
CALL |
SB |
1220 |
|
DEC |
D |
1230 |
|
JR |
SC9 |
1240 |
SC10 |
CALL |
READ |
1250 |
|
INC |
HL |
1260 |
|
DEC |
C |
1270 |
|
CALL |
SB |
1280 |
|
LD |
A, 0 |
1290 |
|
ADD |
A, C |
1300 |
|
JR |
NZ,SC10 |
1310 |
|
LD |
C,32 |
1320 |
|
DEC |
B |
1330 |
|
CALL |
SA |
1850 |
|
JR |
Z, SR2 |
1340 |
|
JR |
SC8 |
1860 |
|
CP |
128 |
1350 |
SC2 |
POP |
AF |
1870 |
|
JR |
NC,SR3 |
1360 |
|
POP |
DE |
1880 |
|
CP |
64 |
1370 |
|
POP |
BC |
1890 |
|
JR |
NC,SR4 |
1380 |
|
POP |
HL |
1900 |
|
LD |
DE,#4000 |
1390 |
|
RET |
|
1910 |
|
LD |
C, B |
1400 |
SC3 |
CALL |
SBA |
1920 |
|
JR |
SR5 |
1410 |
|
JR |
SC2 |
1930 |
SR2 |
POP |
AF |
1420 |
SBA |
PUSH |
BC |
1940 |
|
POP |
DE |
1430 |
|
LD |
A,(UPR) |
1950 |
|
POP |
BC |
1440 |
|
OR |
#01 |
1960 |
|
POP |
HL |
1450 |
|
OUT |
(PUPR),A |
1970 |
|
RET |
|
1460 |
|
LD |
A,(UPR) |
1980 |
SR3 |
LD |
DE,#5000 |
1470 |
|
OUT |
(PUPR),A |
1990 |
|
LD |
A, B |
1480 |
|
POP |
BC |
2000 |
|
SUB |
128 |
1490 |
|
RET |
|
2010 |
|
LD |
C, A |
1500 |
SA |
PUSH |
BC |
2020 |
|
JR |
SR5 |
1510 |
|
LD |
A,(UPR) |
2030 |
SR4 |
LD |
DE,#4800 |
1520 |
|
OR |
#02 |
2040 |
|
LD |
A, B |
1530 |
|
OUT |
(PUPR),A |
2050 |
|
SUB |
64 |
1540 |
|
LD |
A,(UPR) |
2060 |
|
LD |
C, A |
1550 |
|
OUT |
(PUPR),A |
2070 |
SR5 |
LD |
A,C |
1560 |
|
POP |
BC |
2080 |
|
AND |
#07 |
1570 |
|
RET |
|
2090 |
|
ADD |
A, D |
1580 |
SB |
PUSH |
BC |
2100 |
|
LD |
D, A |
1590 |
|
LD |
A,(UPR) |
2110 |
|
LD |
A, C |
1600 |
|
OR |
#04 |
2120 |
|
AND |
#38 |
1610 |
|
OUT |
(PUPR),A |
2130 |
|
RLCA |
|
1620 |
|
LD |
A,(UPR) |
2140 |
|
RLCA |
|
1630 |
|
OUT |
(PUPR),A |
2150 |
|
ADD |
A, E |
1640 |
|
POP |
BC |
2160 |
|
LD |
E,A |
1650 |
|
RET |
|
2170 |
|
LD |
C,32 |
1660 |
READ |
PUSH |
BC |
2180 |
SR6 |
LD |
A,(HL) |
1670 |
|
LD |
A,(UPR) |
2190 |
|
LD |
(DE),A |
1680 |
|
AND |
#EF |
2200 |
|
INC |
HL |
1690 |
|
OUT |
(PUPR),A |
2210 |
|
INC |
DE |
1700 |
|
NOP |
|
2220 |
|
DEC |
C |
1710 |
|
IN |
A, (PDAT) |
2230 |
|
LD |
A, 0 |
1720 |
|
LD |
(HL),A |
2240 |
|
ADD |
A, C |
1730 |
|
LD |
A, (UPR) |
2250 |
|
JR |
NZ,SR6 |
1740 |
|
OUT |
(PUPR),A |
2260 |
|
INC |
B |
1750 |
|
POP |
BC |
2270 |
|
JR |
SR1 |
1760 |
|
RET |
|
2280 |
KEY |
PUSH |
HL |
1770 |
SREN |
PUSH |
HL |
2290 |
|
LD |
HL,23611 |
1780 |
|
PUSH |
BC |
2300 |
|
RES |
5, (HL) |
1790 |
|
PUSH |
DE |
2310 |
K1 |
BIT |
5,(HL) |
1800 |
|
PUSH |
AF |
2320 |
|
JR |
Z, K1 |
1810 |
|
LD |
HL,BUF1 |
2330 |
|
LD |
A, (23560 |
1820 |
|
LD |
B, 0 |
2340 |
|
POP |
HL |
1830 |
SR1 |
LD |
A,B |
2350 |
|
RET |
|
1840 |
|
CP |
192 |
|
|
|
|
Рассмотрим, как устроена эта программа. В начале текста располагаются описания переменных и констант. BUF1 - начало буферной области ОЗУ для копии части полного кадра изображения. PDAT, PUPR, PSOST - адреса портов для соответствующих регистров устройства ВИДЕОПОРТ.
Программа начинает свою работу с адреса 32768. Опуская очевидные команды, посмотрим, как программа функционирует. В начале (строка 160) происходит установка регистра управления в исходное положение. Затем проверяется нормальное положение регистра состояния (строка 190). После чего запрещаются прерывания, и затем запускается программа записи видеокадра в память ВИДЕОПОРТА. Это делает подпрограмма INIC.
После выхода из этой подпрограммы запускается подпрограмма SCAN которая переписывает часть кадра из ОЗУ устройства в буфер с начальным адресом BUF1. Начальный адрес ОЗУ устройства устанавливается в соответствии со значениями номера начальной строки STR0 и номера начального байта в строке BAIT0.
По окончании переписи подпрограмма SREN перекодирует содержимое буфера в формат экрана ZX-Spectrum и заполняет экранную память. На дисплее возникает картинка. В строке 280 разрешаются прерывания, после чего выполняется подпрограмма KEY. Результатом её работы является код нажатой клавиши. Далее этот код анализируется и, если была нажата одна из клавиш управления курсором, происходит соответствующий пересчет STR0 или BAIT0, после чего программа возвращается к переписи части кадра из ОЗУ устройства, но с новыми исходными номерами строк и байт, что приводит к перемещению по копии видеокадра. Если будет нажата клавиша "S", то произойдет возврат в основную программу. При нажатии на "ENTER" произойдет возврат к моменту установки запрета прерываний.
Описывать работу подпрограмм, наверное, нет смысла, потому, что они, как говорится, "прозрачные".
В листинге 3 приводится шестнадцатеричный дамп с контрольными суммами ассемблированного блока машинных кодов. После его набора, сохраните готовый файл командой: SAVE "CODVID1"CODE 32768,422.
|
|
|
|
Листинг 3. |
|
|
|
|
8000 |
C3 |
09 |
80 |
00 |
00 |
00 |
00 |
00 |
CC |
8008 |
00 |
E5 |
C5 |
D5 |
3E |
30 |
32 |
03 |
AA |
8010 |
80 |
D3 |
03 |
DB |
01 |
CB |
47 |
28 |
FC |
8018 |
FA |
F3 |
21 |
4E |
A2 |
22 |
07 |
80 |
3F |
8020 |
CD |
8C |
80 |
CD |
B5 |
80 |
CD |
4B |
93 |
8028 |
81 |
FB |
CD |
97 |
81 |
FE |
09 |
28 |
38 |
8030 |
1B |
FE |
08 |
28 |
27 |
FE |
0B |
28 |
51 |
8038 |
33 |
FE |
0A |
28 |
3F |
FE |
73 |
28 |
F3 |
8040 |
04 |
FE |
65 |
20 |
D4 |
32 |
04 |
80 |
D1 |
8048 |
D1 |
C1 |
E1 |
C9 |
3A |
06 |
80 |
C6 |
8A |
8050 |
01 |
FE |
20 |
CA |
23 |
80 |
32 |
06 |
94 |
8058 |
80 |
C3 |
23 |
80 |
3A |
06 |
80 |
D6 |
54 |
8060 |
01 |
FE |
FF |
CA |
23 |
80 |
32 |
06 |
83 |
8068 |
80 |
C3 |
23 |
80 |
3A |
05 |
80 |
D6 |
63 |
8070 |
08 |
FE |
F8 |
CA |
23 |
80 |
32 |
05 |
92 |
8078 |
80 |
C3 |
23 |
80 |
3A |
05 |
80 |
C6 |
63 |
8080 |
08 |
FE |
64 |
D2 |
23 |
80 |
32 |
05 |
16 |
8088 |
80 |
C3 |
23 |
80 |
E5 |
C5 |
D5 |
F5 |
62 |
8090 |
DB |
01 |
CB |
47 |
28 |
FA |
3E |
18 |
76 |
8098 |
32 |
03 |
80 |
D3 |
03 |
CD |
0B |
81 |
FC |
8 0A0 |
DB |
01 |
CB |
47 |
20 |
FA |
3A |
03 |
65 |
8 0A8 |
80 |
F6 |
20 |
32 |
03 |
80 |
D3 |
03 |
49 |
80B0 |
F1 |
D1 |
C1 |
E1 |
C9 |
E5 |
C5 |
D5 |
DC |
80B8 |
F5 |
DB |
01 |
CB |
47 |
28 |
FA |
CD |
0A |
80C0 |
0B |
81 |
3A |
05 |
80 |
47 |
3E |
00 |
10 |
80C8 |
80 |
28 |
06 |
CD |
1A |
81 |
05 |
18 |
7B |
80D0 |
F5 |
06 |
C0 |
0E |
20 |
2A |
07 |
80 |
EA |
80D8 |
3E |
00 |
80 |
28 |
29 |
3A |
06 |
80 |
27 |
80E0 |
57 |
3E |
00 |
82 |
28 |
06 |
CD |
29 |
9B |
80E8 |
81 |
15 |
18 |
F5 |
CD |
38 |
81 |
23 |
B4 |
80F0 |
0D |
CD |
29 |
81 |
3E |
00 |
81 |
20 |
D3 |
80F8 |
F3 |
0E |
20 |
05 |
CD |
1A |
81 |
18 |
1E |
8100 |
D7 |
F1 |
D1 |
C1 |
E1 |
C9 |
CD |
0B |
5D |
8108 |
81 |
18 |
F6 |
C5 |
3A |
03 |
80 |
F6 |
90 |
8110 |
01 |
D3 |
03 |
3A |
03 |
80 |
D3 |
03 |
FB |
8118 |
C1 |
C9 |
C5 |
3A |
03 |
80 |
F6 |
02 |
9D |
8120 |
D3 |
03 |
3A |
03 |
80 |
D3 |
03 |
C1 |
CB |
8128 |
C9 |
C5 |
3A |
03 |
80 |
F6 |
04 |
D3 |
C1 |
8130 |
03 |
3A |
03 |
80 |
D3 |
03 |
C1 |
C9 |
D1 |
8138 |
C5 |
3A |
03 |
80 |
E6 |
EF |
D3 |
03 |
E6 |
8140 |
00 |
DB |
00 |
77 |
3A |
03 |
80 |
D3 |
A3 |
8148 |
03 |
C1 |
C9 |
E5 |
C5 |
D5 |
F5 |
21 |
EB |
8150 |
4E |
A2 |
06 |
00 |
78 |
FE |
C0 |
28 |
25 |
8158 |
0E |
FE |
80 |
30 |
0F |
FE |
40 |
30 |
12 |
8160 |
14 |
11 |
00 |
40 |
48 |
18 |
15 |
F1 |
AC |
8168 |
D1 |
C1 |
E1 |
C9 |
11 |
00 |
50 |
78 |
FE |
8170 |
D6 |
80 |
4F |
18 |
07 |
11 |
00 |
48 |
0E |
8178 |
78 |
D6 |
40 |
4F |
79 |
E6 |
07 |
82 |
BE |
8180 |
57 |
79 |
E6 |
38 |
07 |
07 |
83 |
5F |
DF |
8188 |
0E |
20 |
7E |
12 |
23 |
13 |
0D |
3E |
48 |
8190 |
00 |
81 |
20 |
F6 |
04 |
18 |
BD |
E5 |
66 |
8198 |
21 |
3B |
5C |
CB |
AE |
CB |
6E |
28 |
AB |
8 1A0 |
FC |
3A |
08 |
5C |
E1 |
C9 |
00 |
00 |
65 |
Программа, работающая с дисководом в среде TR-DOS отличается от магнитофонного варианта большими возможностями, предоставляемыми дисковой системой. Решающим достоинством дискового запоминающего устройства является то, что время доступа к файлу почти не зависит от его положения на диске. Поэтому в этой программе введен режим просмотра картинок, ранее записанных на диск. Этот режим даёт возможность при работе с устройством ВИДЕОПОРТ без перезагрузок посмотреть ранее принятые картинки. Текст программы на Бейсике приведен в листинге 4, а блок машинных кодов применяется тот же, что и в магнитофонном варианте.
Листинг 4.
5 CLEAR 29999: CLS : LET tt=0: LET nn=0 10 CLS : BORDER 7: INK 0: PAPER 7
20 RANDOMIZE USR 15619: REM : LOAD "CODVID1" CODE
41 CLS : BORDER 7: INK 0: PAPER 7: PRINT AT 10,2;"1-INPUT SCREEN"
42 PRINT AT 11,2;"2-READ SCREEN OF DISC"
43 PRINT AT 12,2;"3-CATALOG"
44 PRINT AT 13,2;"4-EXIT TR-DOS"
45 LET k$=INKEY$
4 6 IF k$="1" THEN GO TO 159
47 IF k$="3" THEN GO TO 60
48 IF k$="4" THEN GO TO 65
4 9 IF k$="2" THEN GO TO 5000 50 GO TO 45
60 RANDOMIZE USR 15619: REM : CAT
61 LET k$=INKEY$
62 IF k$="" THEN GO TO 61
63 GO TO 41
65 CLEAR 65000: RANDOMIZE USR 15619: REM : RUN "boot"
159 IF tt=0 THEN INPUT "INPUT NUMBER FILE - ";tt: BORDER 7: INK 0: PAPER 7
160 CLS : POKE 23659,0: PRINT AT 14,2;"FOR NEW SCREEN - ENTER"
170 PRINT AT 11,2;"SCANNING - CURSOR"
180 PRINT AT 12,2;"EXIT IN MENU - e"
190 PRINT AT 17,2;"FOR START - ENTER"
195 PRINT AT 13,2;"FOR SAVE SCREEN - S"
200 IF INKEY$="" THEN GO TO 200
220 BORDER 0: RANDOMIZE USR 32768
280 GO SUB 2000
290 IF a=101 THEN GO TO 4000
310 GO TO 220
2000 LET a=PEEK 32772
2010 IF a=115 THEN GO TO 3000
2030 RETURN
3000 LET tt=tt
3006 LET F$=STR$ (tt)
3007 RANDOMIZE USR 15619: REM : SAVE F$ CODE 16384,6912 3010 LET tt=tt+1: RETURN
4000 POKE 23659,2 4010 GO TO 41
5000 IF nn=0 THEN INPUT "INPUT NUMBER FILE - ";nn: GO TO 5130 5010 BORDER 0: LET n$=STR$ nn: LET p=USR 15619: REM : LOAD n$ CODE 5020 IF p=0 THEN PRINT AT 1,1;nn: GO TO 5030 5025 CLS : PRINT AT 10,10;"FILE ";nn;" NO" 5030 LET k$=INKEY$
5035 IF k$="n" THEN LET nn=0: GO TO 5000
5040 IF k$="e" THEN GO TO 4000
5050 IF k$="z" THEN GO TO 5100
5060 IF k$="" THEN GO TO 5030
5070 IF k$="p" THEN LET nn=nn+1: GO TO 5010
5080 IF k$="o" THEN LET nn=nn-1: GO TO 5010
5090 GO TO 5030
5100 RANDOMIZE USR 15619: REM : ERASE n$ CODE
5120 LET nn=nn+1: GO TO 5010
5130 CLS : PRINT AT 10,2;"NEXT FILE - P"
5140 PRINT AT 11,2;"PRED. FILE - O"
5150 PRINT AT 12,2;"DELETE FILE - Z"
5160 PRINT AT 13,2;"NEW NUMBER FILE - N"
5170 PRINT AT 14,2;"EXIT IN MENU - E"
5175 IF INKEY$="" THEN GO TO 5175
5180 GO TO 5010
Рассмотрим работу программы "VIDEOd". После загрузки машинных кодов (файл "CODVID1"CODE), программа предоставит меню:
1 - ВВОД КАРТИНКИ
2 - ЧТЕНИЕ КАРТИНКИ С ДИСКА
3 - ПРОСМОТР КАТАЛОГА ДИСКА
4 - ВЫХОД В НАЧАЛЬНЫЙ ЗАГРУЗЧИК TR-DOS
При выборе режима ввода картинки программа запрашивает номер файла и печатает на экране памятку о клавишах управления при приеме картинок:
СКАНИРОВАНИЕ ПО КОПИИ КАДРА - КУРСОРНЫЕ КЛАВИШИ СОХРАНИТЬ КАРТИНКУ - "S" ВЫЙТИ В ГЛАВНОЕ МЕНЮ -"E" СМЕНА КАРТИНКИ - "ENTER" После нажатия "ENTER" происходит запуск машинных кодов с адреса 32768. На дисплее появляется картинка. Если будет нажата клавиша "S" или "E", то произойдёт переход в основную программу. Далее, в зависимости от нажатой клавиши, при "S" - произойдет сохранение файла с текущим номером, при "E" - произойдёт переход в основное меню, строка 41. Код нажатой клавиши программа получает из программы в машинных кодах через ячейку 32772. Это ячейка PRIZN в тексте на ассемблере.
При выборе режима чтения картинки с диска осуществляется переход на строку 5000 программы. Программа запрашивает номер файла для чтения с диска и выдает памятку по управлению этим режимом.
ПРОСМОТР СЛЕДУЮЩЕГО ФАЙЛА - "P" ПРОСМОТР ПРЕДЫДУЩЕГО ФАЙЛА - "O" УНИЧТОЖИТЬ ТЕКУЩИЙ ФАЙЛ - "Z" ВВЕСТИ НОВЫЙ НОМЕР ФАЙЛА - "N" ВЫЙТИ В ГЛАВНОЕ МЕНЮ ПРОГРАММЫ - "E" Далее программа читает соответствующий файл и выводит его на экран. Если файла с нужным именем нет, на диске выводится сообщение об этом. Анализ наличия файла происходит в строке 5020. Далее программа переходит к анализу нажатой клавиши. Продолжение "прозрачно" и не требует комментария.
Вариант программы работающей в среде iS-DOS имеет только блок машинных кодов. В iS-DOS это файл с расширением ".com". Текст этой программы приведен в листинге 5.
Листинг 5.
|
JP BEGIN |
|
|
;описание |
переменных |
и констант |
|
UPR |
DEFB |
0 |
|
;байт управления |
PRIZN |
DEFB |
0 |
|
;байт признаков |
STR0 |
DEFB |
56 |
|
;номер начальной строки для чтения |
BAIT0 |
DEFB |
15 |
|
;номер начального байта в строке для чтения |
PDAT |
EQU |
0 |
|
; адрес порта данных |
PUPR |
EQU |
3 |
|
; адрес порта управления |
PSOST |
EQU |
1 |
|
; адрес порта состояния |
ADR |
DEFW |
#0000 |
|
;текущий адрес |
OPFILE |
DEFM |
"pic " |
|
;описатель файла |
NUMBER |
DEFB |
#30,#20 |
|
;в ОС is-DOS |
|
DEFM |
"scr " |
|
|
|
DEFB |
#41 |
|
|
|
DEFW |
16384 |
|
|
|
DEFB |
0 |
|
|
|
DEFW |
27 |
|
|
|
DEFB |
0, 0, 0, 0, |
0, |
0,0,0,0,0 |
|
DEFB |
0, 0, 0, 0, |
0 |
|
;текст основной программы |
|
|
BEGIN |
PUSH |
HL |
|
; начало программы |
|
PUSH |
BC |
|
|
|
PUSH |
DE |
|
|
|
LD |
A, #30 |
|
;установка начального |
|
LD |
(UPR),A |
|
; состояния |
|
OUT |
(PUPR),A |
/регистра управления |
B00 |
IN |
A,(PSOST) |
;ожидание |
|
BIT |
0,A |
/перехода видео-порта |
|
JR |
Z, B00 |
; в исходное положение |
B1 |
DI |
|
;запрет прерываний |
|
LD |
A, #38 |
/очистка экрана и |
|
LD |
C, #73 |
/установка атрибутов |
|
RST |
#10 |
;через RST iS-DOS |
|
LD |
HL,BUF1 |
/установка адреса |
|
LD |
(ADR),HL |
/буфера картинки |
|
CALL |
INIC |
/запись картинки в видеопорт |
B0 |
CALL |
SCAN |
,• перепись картинки в буфер |
|
CALL |
SREN |
/преобразование в screen |
|
EI |
|
/разрешение прерываний |
|
CALL |
KEY |
/опрос клавиатуры |
|
CP |
#09 |
/ ветвления если нажаты |
|
JR |
Z, B3 |
/ клавиши управления |
|
CP |
#08 |
/курсором |
|
JR |
Z, B4 |
|
|
CP |
#0B |
|
|
JR |
Z, B5 |
|
|
CP |
#0A |
|
|
JR |
Z, B6 |
|
|
CP |
"s" |
|
|
JR |
Z, B9 |
/ переход для сохранения |
|
CP |
"2" |
|
|
JR |
NZ, B1 |
|
|
POP |
DE |
|
|
POP |
BC |
/выход в меню iS-DOS |
|
POP |
HL |
|
|
RET |
|
|
B9 |
CALL |
FSAVE |
/ сохранить screen |
|
LD |
A, (NUMBER) |
/ вычисление и |
|
INC |
A |
/ установка |
|
LD |
(NUMBER) ,A |
/ номера файла |
|
JP |
B1 |
|
B3 |
LD |
A,(BAIT0) |
/ вычисление и |
|
ADD |
A, 1 |
/ установка номера |
|
CP |
32 |
/начального байта |
|
JP |
Z, B0 |
|
|
LD |
(BAIT0) , A |
|
|
JP |
B0 |
|
B4 |
LD |
A,(BAIT0) |
|
|
SUB |
1 |
|
|
CP |
255 |
|
|
JP |
Z, B0 |
|
|
LD |
(BAIT0) , A |
|
|
JP |
B0 |
|
B5 |
LD |
A, (STR0) |
/ вычисление и |
|
SUB |
8 |
/ установка номера |
|
CP |
248 |
/начальной строки |
|
JP |
Z, B0 |
|
|
LD |
( STR0) ,A |
|
|
JP |
B0 |
|
B6 |
LD |
A, (STR0) |
|
|
ADD |
A, 8 |
|
|
CP |
150 |
|
|
JP |
NC, B0 |
|
|
LD |
( STR0) ,A |
|
|
JP |
B0 |
|
; далее |
тексты подпрограмм |
|
INIC |
PUSH |
HL |
;начало записи в ОЗУ |
|
PUSH |
BC |
;видеопорта |
|
PUSH |
DE |
|
|
PUSH |
AF |
|
IC1 |
IN |
A,(PSOST) |
;проверка |
|
BIT |
0,A |
;бита готовности |
|
JR |
Z, IC1 |
|
|
LD |
A, #18 |
;установка |
|
LD |
(UPR),A |
;режима записи |
|
OUT |
(PUPR),A |
|
|
CALL |
SBA |
; сброс адреса |
IC2 |
IN |
A,(PSOST) |
; проверка |
|
BIT |
0,A |
; бита готовности |
|
JR |
NZ,IC2 |
|
|
LD |
A,(UPR) |
;снятие признака |
|
OR |
#20 |
; режима записи |
|
LD |
(UPR),A |
|
|
OUT |
(PUPR),A |
|
|
POP |
AF |
|
|
POP |
DE |
|
|
POP |
BC |
|
|
POP |
HL |
|
|
RET |
|
|
SCAN |
PUSH |
HL |
; начало режима |
|
PUSH |
BC |
; чтения ОЗУ видеопорта |
|
PUSH |
DE |
|
|
PUSH |
AF |
|
SC5 |
IN |
A,(PSOST) |
;ожидание конца |
|
BIT |
0,A |
;записи в ОЗУ |
|
JR |
Z, SC5 |
;видео-порта |
|
CALL |
SBA |
;сброс адреса |
|
LD |
A, (STR0) |
|
|
LD |
B, A |
|
SC6 |
LD |
A, 0 |
;цикл установки |
|
ADD |
A, B |
;адреса на начальную |
|
JR |
Z, SC7 |
; строку |
|
CALL |
SA |
|
|
DEC |
B |
|
|
JR |
SC6 |
|
SC7 |
LD |
B, 192 |
; максимальное число строк |
|
LD |
C, 32 |
;максимальное число байт |
|
LD |
HL,(ADR) |
;адрес буфера |
SC8 |
LD |
A, 0 |
|
|
ADD |
A, B |
|
|
JR |
Z, SC3 |
|
|
LD |
A,(BAIT0) |
|
|
LD |
D, A |
|
SC9 |
LD |
A, 0 |
; цикл установки |
|
ADD |
A, D |
; начального байта |
|
JR |
Z,SC10 |
|
|
CALL |
SB |
; счет байт |
|
DEC |
D |
|
|
JR |
SC9 |
|
SC10 |
CALL |
READ |
; чтение байта из ОЗУ |
|
INC |
HL |
;установка следующего |
|
DEC |
C |
; адреса и байта |
|
CALL |
SB |
; счет байт |
|
LD |
A, 0 |
|
|
ADD |
A, C |
|
|
JR |
NZ,SC10 |
; конец цикла чтения строк |
|
LD |
C,32 |
; установка счетчика байт |
|
DEC |
B |
;уменьшение счётчика стро: |
|
CALL |
SA |
; счёт адреса ОЗУ |
|
JR |
SC8 |
|
SC2 |
POP |
AF |
|
|
POP |
DE |
|
|
POP |
BC |
|
|
POP |
HL |
|
|
RET |
|
|
SC3 |
CALL |
SBA |
|
|
JR |
SC2 |
|
;подпрограммы |
выдачи |
сигналов через порт управления |
SBA |
PUSH |
BC |
|
|
LD |
A,(UPR) |
|
|
OR |
#01 |
|
|
OUT |
(PUPR),A |
|
|
LD |
A,(UPR) |
|
|
OUT |
(PUPR),A |
|
|
POP |
BC |
|
|
RET |
|
|
SA |
PUSH |
BC |
|
|
LD |
A,(UPR) |
|
|
OR |
#02 |
|
|
OUT |
(PUPR),A |
|
|
LD |
A,(UPR) |
|
|
OUT |
(PUPR),A |
|
|
POP |
BC |
|
|
RET |
|
|
SB |
PUSH |
BC |
|
|
LD |
A,(UPR) |
|
|
OR |
#04 |
|
|
OUT |
(PUPR),A |
|
|
LD |
A,(UPR) |
|
|
OUT |
(PUPR),A |
|
|
POP |
BC |
|
|
RET |
|
|
;подпрограмма |
чтения |
из регистра данных |
READ |
PUSH |
BC |
|
|
LD |
A,(UPR) |
|
|
AND |
#EF |
|
|
OUT |
(PUPR),A |
|
|
NOP |
|
|
IN |
A,(PDAT) |
|
LD |
(HL),A |
|
LD |
A,(UPR) |
|
OUT |
(PUPR),A |
|
POP |
BC |
|
RET |
|
;подпрограмма |
перекодировки буфера экрана в экранную область |
ОЗУ ZX |
|
|
SREN |
PUSH |
HL |
|
PUSH |
BC |
|
PUSH |
DE |
|
PUSH |
AF |
|
LD |
HL,BUF1 |
|
LD |
B, 0 |
SR1 |
LD |
A, B |
|
CP |
192 |
|
JR |
Z, SR2 |
|
CP |
128 |
|
JR |
NC,SR3 |
|
CP |
64 |
|
JR |
NC,SR4 |
|
LD |
DE,#4000 |
|
LD |
C, B |
|
JR |
SR5 |
SR2 |
POP |
AF |
|
POP |
DE |
|
POP |
BC |
|
POP |
HL |
|
RET |
|
SR3 |
LD |
DE,#5000 |
|
LD |
A, B |
|
SUB |
128 |
|
LD |
C, A |
|
JR |
SR5 |
SR4 |
LD |
DE,#4800 |
|
LD |
A, B |
|
SUB |
64 |
|
LD |
C, A |
SR5 |
LD |
A, C |
|
AND |
#07 |
|
ADD |
A, D |
|
LD |
D, A |
|
LD |
A, C |
|
AND |
#38 |
|
RLCA |
|
|
RLCA |
|
|
ADD |
A, E |
|
LD |
E, A |
|
LD |
C,32 |
SR6 |
LD |
A, (HL) |
|
LD |
(DE) ,A |
|
INC |
HL |
|
INC |
DE |
|
DEC |
C |
|
LD |
A, 0 |
|
ADD |
A, C |
|
JR |
NZ,SR6 |
|
INC |
B |
|
JR |
SR1 |
;подпрограмма |
опроса |
клавиатуры с использованием функции iS- |
DOS |
|
|
KEY |
PUSH |
HL |
|
LD |
C, #07 |
|
RST |
#10 |
|
POP |
HL |
|
RET |
|
;подпрограмма |
сохранения файла на диске в среде iS-DOS |
FSAVE |
LD |
C, #23 |
|
LD |
HL,OPFILE |
|
RST |
#10 |
|
LD |
C, #2C |
|
LD |
B, 27 |
|
LD |
DE,#0000 |
|
LD |
HL,#4000 |
|
RST |
#10 |
|
LD |
HL,OPFILE |
|
LD |
C, #28 |
|
RST |
#10 |
|
RET |
|
BUF1 |
NOP |
;начало буфера в ОЗУ ZX |
;конец текста |
программы |
В чём автор видит прелести введения своей программы в среду iS-DOS? В отличие от TR-DOS, система iS-DOS, является настоящей операционной системой, близкой по своей идеологии к MS-DOS. В настоящее время происходит постепенное распространение этой системы. Введение в ОС iS-DOS программы, взаимодействующей с устройством ВИДЕОПОРТ, позволяет использовать имеющиеся в этой системе программы вывода на принтер картинок, программы упаковки и распаковки файлов. Все эти программы легко доступны в iS-DOS. Операции с файлами из ассемблера iS-DOS выполняются через запуск одной команды RST #10, с определенным кодом функции. Для сравнения, в TR-DOS это можно сделать, но сложнее. Наличие каталоговой системы хранения и поиска файлов позволяет систематизировать полученные картинки и, тем самым, упростить пользование результатами работы.
В связи с тем, что ассемблер iS-DOS не отличается от "GENS4" по тексту программы, в листинге 5 читатель увидит новое только в части подпрограмм опроса клавиатуры KEY, подготовки экрана и записи на диск FSAVE, по сравнению с текстом программы "CODVID1" приведённом в листинге 2.
Данный в листинге 5 текст снабжен комментариями в части функций системы iS-DOS. Они применены так, как рекомендуется в руководстве по ОС iS-DOS. Необходимо иметь ввиду, что воспользоваться этим текстом можно, если Вы приобретете саму систему iS-DOS и ассемблер iS-ASM, где содержится информация о том, как ассемблировать тексты программ и другие важные сведения по системе iS-DOS.
Данный обзор программ автор приводит как пример работы с устройством ВИДЕОПОРТ. Эти программы рабочие, но они не лишены некоторых недостатков.
Ну что с этим SCREEN делать?
Как отмечалось во введении, компьютер сам не может использовать "глаза" которые он обретает при подключении к нему устройства VIDEOPORT. Автор считает, что читатели смогут придумать применение для предлагаемого устройства. Может быть, кому-то пригодятся некоторые соображения автора по поводу использования устройства ВИДЕОПОРТ.
- Создание иллюстративных программ. Это могут быть программы, демонстрирующие картинки по определенной тематике. Пример: "Артисты кино", "Звёзды футбола", "Истребители 19391945" и т.д. Программы-викторины, которые показывают изображение и сравнивают полученный ответ с правильным ответом. Программы-каталоги, показывающие изображение требуемого объекта.
- Создание программ обработки бинарных изображений. Это уже почти научная проблема, от которой недалеко до систем с элементами искусственного интеллекта. Конечно, ZX-Spectrum маловат для получения конечных результатов, но для начальной стадии входа в проблему, для, пусть грубой, обкатки своих идей, эта машина достаточно подходящий инструмент.
- Создание систем технического зрения. Это уже возможное приложение результатов обработки изображений к конкретным задачам. Как человек получает информацию от приборов? Правильно, он глядит на стрелки, уровни, шкалы и т.д. ZX-Spectrum может так же получать эту информацию. Таким образом, имея ВИДЕОПОРТ, можно создать универсальный канал ввода информации. Конечно, эта универсальность даром не достанется.
Заключение.
Завершая сообщение о своей работе, автор призывает откликнуться заинтересованные организации и любителей ZX-Spectrum. С удовольствием ознакомился бы с мнениями и критикой, поскольку есть мысли по улучшению данного устройства и хотелось бы понять актуальность дальнейшего развития подобного подхода.
115597, Москва, Гурьевский проезд, д. 11, корпус 1, кв. 38, Манилову А.П. тел. 397-52-72