ZXNet эхоконференция «code.zx»


тема: перо



от: Mihail Zharov
кому: All
дата: 13 Mar 2001

Привет, All!

Уже не помню в какой эхе недавно обсуждалось подобное...
Тут случайно натолкнулся на цузых дисках на подобное:

╒═══< Begin file: lp .txt >════════════
Световое перо (Light Pen) - устройство ввода информации.Отличается оно высокой
скоростью ввода,ограничиваемой лишь реакцией пол

ьзователя и простотой управления - оператору достаточно указать световым пером
участок экрана и подтвердить выбор нажатием кноп

ки.
Световое перо оказалось не достаточно удобным устройством управления,чтобы
сравняться по популярности с усторйствами типа "MOUS

E","KEYBOARD" и даже "JOYSTICK".Однако,световое перо до сих пор довольно часто
встречается под видом пистолета для различных иг

ровых видео приставок.Ранее же его часто можно было встретить в составе
профессиональных компьютеров (в основном его использова

ли в грфических пакетах программ).
Главным достоинством светового пера я считаю элементарное устройство (в моем
исполнении - это фотоэлемент,кнопка и единственный

транзистор.Причем подключается все это в стандартный вход Kempston
джойстика.Hикаких специальных доработок компьютера не требу

ется.). Правда,в основе его лежат довольно сложные расчеты и множество
эксперементов. Также к достоинствам можно отнести неболь

шой объем памяти,теребуемой для размещения программы обработчика (20-100 байт)
и сравнительно маленькое время реакции устройств

а - от 0.000009157 сек до 0.017 - 0.02 сек. (зависит от участка экрана)
Главный недостаток - поскольку мои требования к световому перу были невысоки
(лишь бы работало), оно обладает низкой разрешаемо

стью : 7*312 сегментов. Объяснение такого странного разделения экрана следует
ниже.
Для того,чтобы понять принцип работы светового пера, необходимо вспомнить
систему построения изображения на экране монитора (в
нашем случае обычного чернобелого теливизора).
Известно,что за 1 секунду на экране телевизора отображаются 25 кадров. Реально
же,для погашения эффекта мерцания,используется ч

ерезстрочное построение изображения (см. рис. 1). Это значит,что за 1/25
секунды на экране рисуются две одинаковые картинки,но
за первую 1/50 сек. отображаются 1,3,5,...,613 строки экрана,а за вторую 1/50
сек. 2,4,6,...,614 строки.Поэтому,в дальнейших ра

счетах будем условно считать,что телевизор рисует за секунду 50 312-ти
строчных кадров.
Посчитаем скорость движения светового пучка по экрану во время построения
кадра:
312 строк за 1/50 сек.,значит 1 строка - 1/(312*50) = 1/15600 (сек.).
С экраном все просто,но как же работает само перо?
Принцип работы пера в следующем:компьютер должен просто посчитать время
прошедшее от начала формирования экрана (яркая точка на

чинает свое движение и находится сейчас в левом верхнем углу экрана) до того
момента,когда световой пучок будет опознан фотоэле

ментом (в световом пере).
Составим теперь список проблем,которые необходимо решить для успешной работы
пера:
1). Сделать программу так,чтобы она начинала работать одновременно с началом
построения экрана.
2). Решить проблему сигнализации,т.е. как фотоэлемент обозначит приход
светового пучка.
3). Создать наибыстрейший счетчик.
4). По вычисленному счетчиком времени расчитать координаты пера.
Решим их...
1).
Эту проблему было бы невозможно просто решить,если бы компьютеры не обладали
системой прерываний (это относится к любым компьют

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

тате чего,мы наблюдаем на экране символы,графику и т.д. причем различной
яркости. Итак,компьютер вырабатывает импульс,который з

аставляет телевизор поместить световой пучок в левый верхний угол экрана.Этот
же импульс подается на центральный процессор, кот

орый прерывает текущую задачу и передает управление служебным программам,таким
как: опрос клавиатуры,опрос мыши и (или) програм

мам,которые мы сами можем написать и специальным образом разместить в памяти.
2).
Все очень просто.Когда фотоэлемент "поймает" лучик,он выработает электричиский
импульс, маленький,но достаточный для того,чтобы

транзистор (см. рис. 2) замкнул клавишу "ВПРАВО" Kempston Джойстика.Иными
словами фотоэлемент будет имитировать нажатие "ВПРАВ

О".
3).
Поскольку программа-счетчик должна работать очень быстро,напишем ее в машинном
коде (для удобства на Ассемблере),да еще и потб

ерем наиболее быстрые команды:
начало программы Установим значения некоторых регистров:
DE - счетчик,и в него записан 0
HL - адрес начала цикла (нужен для ускорения работы)
Программа опрашивает кнопку "ОГОHЬ" Kempston джойстика и,если она будет
нажата,перейдет на счетчик.
LD HL,LOOP
LD DE,#0000
IN A,(#1F)
BIT 4,A
RET Z
собственно сам счетчик Опрашивает "ВПРАВО" и , если не нажато(т.е сигнал еще не
пришел) увеличивает счетчик.
LOOP IN A,(#1F) 11 тактов
RRA 4 такта
RET C 5 тактов
INC DE 6 тактов
JP (HL) 4 такта
итог - 30 тактов процессора или 30/3500000 секунд.
Теперь,зная скорость выполнения одного цикла нашего счетчика,зная скорость
движения светового пучка (см. выше) мы можем прикину

ть "разрешаемость" пера,т.е. сколько раз за 1/50 сек. фотоэлемент просканирует
экран.
(1/50)/(30/3500000)=2333.333(3) условных сегментов.
2333/312=7.478632479 сигментов по горизонтали
312 сегментов по вертикали.
4).
Здесь все совсем просто.Зная время и зная разрешимость 7*312 (именно 7,а не 7.5
(причина ниже)), можно без труда вычислить коор

динаты сегмента на любом языке программирования по формулам:
Y(вертикаль)=INT ( время/7 )
X(горизонталь)=время-Y*7
Hу а что делать с этими координатами решайте сами.Можно изобразить
выстрел,можно нарисовать рисунок,можно активизировать пункт
меню - это зависит только от фантазии.
Что еще можно сказать о световом пере? Главное,пожалуй,это то,что реальные
световые перья сильно отличаются от предложенной мно

ю модели.Hапример,всеми вычислениями занимается не программа (как у меня),а
специальная схема. Центральному процессору остается

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

нений в компьютере и т.д.
Разработка светового пера открыла передо мной множество интересных проблем.Они
касаются информатики,физики,электроники и даже б

иологии.
Во время тестов пера,я заметил,что разрешимость его не 7.5 , как выходило по
расчетам , а чуть больше 7 (7 - 7.3).Это значит,чт

о тактовая частота компьютера не 3.5 МГц,как гласят справочники , а 3.276 - 3.4
МГц.
Расчеты,которыми я пользовался при разработке пера,позволили мне повторить
замечательный графический эффект "MULTYCOLOR" найден

ный еще в 80-ых годах,но практически не используемый до недавнего времени.Его
суть состоит в следующем:
Hа моем Spectrum-е и на многих других компьютерах с низким разрешением
невозможно вывести в одно знакоместо (8*8 пикселов) боле

е двух цветов.Это тргедия,особенно если учитывать то что экран состоит из
32*24=768 знакомест. "MULTYCOLOR" позволяет отобразит

ь хоть все 16 цветов сразу в одном знакоместе.Основан он на том,что во время
передачи информации из видео памяти на экран,мы мо

жем успеть поменять ее содержимое.
Пример:
Пусть мы хотим напечатать "А" синим,желтым,белым цветами на черном фоне (в
полоску).
1. Записываем в видео память информацию об "А" ,нарисованной синим цветом.
2. Ждем прихода луча.Ждем того момента,когда луч прочерчит на экране две
верхнии линии "А" синим цветом.
3. Быстро меняем в памяти информацию о цвете с синего на желтый.
4. Повторяем пункт 2 ,но относительно следующих двух линий желтым цветом.
5. Быстро меняем желтый цвет на белый.
╘═══< End file: lp .txt >══════════════


Счастливо. Михаил.




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

Похожие статьи:
AyHits - Max и музыка :)
Scream Crew and the Scene - "Творчество на спектруме - это искусство и когда нибудь это поймут все" - рассуждения Screamer'a о демосцене на Спектруме.
Авторская разработка - С.Зонов, А.Ларченко. О контроллере SMUC (HDD и IBM периферия).
Хит-парад - Интересная десяточка лучших игр.

В этот день...   19 апреля