Овладение тонкостями общения с компьютером рано или поздно пробуждает желание его ещё больше усовершенствовать. Для владельцев БК определённые возможности предоставляет здесь завод-изготовитель. Проявляет активность в этом отношении и сфера кооператоров и индивидуалов. Некоторые возможности самостоятельного творчества открыты здесь и для радиолюбителей.
Н. ГЕРМАН
РОГА ДЛЯ БК: ДОРАБОТКИ И САМОДЕЛКИ
Увидев в рекламном приложении к «Вечерке» приглашение завода-изготовителя усовершенствовать свои БК, автор решил немедленно на него откликнуться. Полагаем, что все владельцы БК-0010 могут заинтересоваться открывающимися перед ними в этой связи возможностями. Автор решил прежде всего научить БК двум языкам, т.е. в дополнение к ФОКАЛу ещё и более развитому БЕЙСИКу. О каких-либо иных услугах вы можете узнать по телефону, набрав междугородный код 243 и номер 2-30-41
Опишем здесь некоторые первые впечатления от работы с двуязычным БК и на некоторых наших упражнениях продемонстрируем достоинства таких машин, которые ещё, возможно, и не успели полностью раскрыться даже для пользователей БК-0010-01.
Первое, что бросается в глаза при переходе от ФОКАЛа к БЕЙСИКу, - это, конечно, заметное увеличение быстродействия. Менее явно выступают достоинства, связанные с использованием для вычислений вдвое более высокой разрядности. При любительском, непрофессиональном использовании компьютера это обстоятельство действительно представляется не столь существенным. Однако любой специалист, занимавшийся задачами, связанными с решением дифференциальных уравнений, немедленно может представить себе важность такого усовершенствования. Автор признается, что у него теперь возродились надежды на такое домашнее применение БК, как исследование ряда своих научных задач на дому (что с 16-разрядной версией ФОКАЛа было в какой-то мере утопией).
Возможно, стоит указать, что эти особенности наших двух языков связаны не только с какими-то свойствами именно этих языков как таковых, но также ещё и с конкретными приёмами воплощения их в данной версии БК (как говорят, машинной реализации). Так, на других машинах и БЕЙСИК может оперировать лишь с 16-разрядными числами, его «диалектов» вообще сейчас очень много и т.д.
Оказывается, что результаты наших упражнений на «случайные» темы как раз весьма чувствительны к удвоению числа разрядов[1]. Это связано прежде всего с тем, что период используемой в нашем БЕЙСИКе случайной функции настолько возрос, что у автора вообще не хватило терпения его обнаружить! За 45 часов непрерывной работы БК просмотрел более 66 млн. своих новых псевдослучайных чисел, но не мог обнаружить повторов. Легко представить, однако, что при работе в режиме с пониженной разрядностью повторы в таком количестве чисел совершенно неизбежны, поскольку «всех» вообще чисел в этом режиме не столь уж и много! Действительно, если вызывать случайную функцию с дополнительным оператором CSNG (RND(1)), то довольно несложно обнаружить повторы, однако они будут возникать вовсе не от исчерпания всей случайной последовательности RND, вычисление которой ведётся всё равно с удвоенной точностью, но от «случайных» совпадений после округления. Поэтому такие повторы наступают после различных количеств промежуточных чисел (у меня они наблюдались через интервалы от 44 тыс. до 20 млн.).
Столь радикальное усовершенствование функции RND немедленно должно проявиться в гораздо более точном соответствии результатов наших «случайных» упражнений с теоретическими прогнозами. Можно было бы даже надеяться, что значимых отклонений от теории вероятностей вообще ни в каких «бытовых» задачах не проявится. В самом деле, если уж у автора не хватило духу дождаться «зацикливания» RND в течение 45 ч непрерывного направленного поиска, то ясно, что и в любых других задачах, где обращение к RND происходит куда как с меньшей частотой, повторы не наступят и при более продолжительном счёте. Хотя, как мы подчёркивали, цикличность - не единственный возможный дефект псевдослучайных функций, хотелось бы думать, что и остальные требования к ним теперь будут выполняться также со значительно лучшей точностью. Но не станем спешить со своими надеждами...
Итак, получив в своё распоряжение усовершенствованный БК, нелишне прежде всего насладиться наблюдением идеальных результатов различных случайных блужданий. Для владельцев же БК-0010-01 воспроизведение упражнений, предложенных ранее на ФОКАЛе, также должно позволить оценить соответствующие достоинства нашей (вильнюсской!) версии БЕЙСИКа.
Начнём снова с самого броуновского движения:
10 REM "BROWNIAN MOTION" 20 Х=256 30 Y=128 40 X=X+.5-RND(1) 50 Y=Y+.5-RND(1) 60 PSET (X, Y) 70 GOTO 40
Увеличение скорости блужданий заметно просто на глаз. Если же теперь попытаться, как мы это уже проделали, «гасить» след (для этого можно вставить строку 65 PRESET (X, Y)), то нашего «мотылька» вообще трудно становится разглядеть - настолько быстро он теперь «порхает». Теперь можно испробовать и наш вариант с «червяком»:
200 REM «RANDOM WORM» 210 DIM Х(30),Y(30) 220 Х(21)=256 230 Y(21)=128 240 FOR N=0 TO 20 250 X(N)=X(N+1) 260 Y(N)=Y(N+1) 270 NEXT N 280 Y(21)=Y(21)+2.5-5*RND(1) 290 X(21)=X(21)+2.5-5*RND(1) 300 PSET(X(21),Y(21)) 310 PRESET(X(0),Y(0)) 320 GOTO 240
Рост производительности БК побуждает вновь точно измерить время, необходимое на добывание очередного случайного числа, вычисление стандартных функций и т.д. Включим секундомеры:
10 REM «RANDOM SPEED» 20 FOR M=1 TO 10000 30 X=RND(1) 40 NEXT 50 BEEP
Проведя замеры с холостым (30 Х=Х) и с рабочим (X=SIN(M)) циклом, можно найти, что вычисление синуса требует в среднем 90 мс, a RND(1) - всего 0,45 мс. Надеемся, что эти результаты снова приведут вас в умиление перед способностями этой, в сущности, очень небольшой коробочки - БК-0010!
Имеет смысл оценить и скорость работы БЕЙСИКа по добыче знаков числа с помощью метода Монте-Карло:
200 REM «MONTE CARLO» 210 FOR A=1 TO 100 220 X=RND(1)-2+RND(1)-2 230 IF X>1 THEN 250 240 P=P+1 250 C=C+1 260 NEXT 270 M=M+1 280 PRINT 4*P/C,M 290 GOTO 210
Здесь скорость также возросла, но не столь разительно: мой БК за 9 часов работы набросал в квадрат примерно 105 точек и определил: =3,13776, что находится в пределах допустимой дисперсии. Заметим, что теперь в списке функций БЕЙСИКа «зашит» и сам искомый результат с 16 знаками: PI=3,1415926535897932 (хотя в этом списке уже нет таких нелишних функций, как arcsin и arccos, которые следует вычислять через arctg).
Начав прямое сопоставление отличий наших двух языков, стоит указать на определённые достоинства ФОКАЛа, особенно ценные для начинающих (и это притом, что БЕЙСИК по первым буквам аббревиатуры специально разработан для начинающих: BASIC=BEGINNER’S ALL PURPOSE SYMBOLIC INSTRUCTION CODE). Так мы отмечали, что ввод операторов всего одной буквой, конечно же, удобней, в частности, для начинающих, плохо знакомых с английским, для которых сокращённые названия большинства операторов - сплошная абракадабра. Достаточно очевидны и достоинства странично-строчной нумерации в программах, особенно полезные для организации подпрограмм. Более простая нумерация строк БЕЙСИКа на БК несколько усугубляет опасность случайного стирания строки программы, если после набора какого-либо числа, совпадающего с номером имеющейся в программе строки, будет нажат «ВВОД». Сходные казусы иногда наблюдались при пользовании программируемыми ключами, объединёнными с клавишами цифр. Если кнопка HP прижата недостаточно надёжно (а после переделки на моем БК сохранена старая мембранная клавиатура), вместо К5: RUN можно ухитриться впечатать нужную строку: 5 RUN и т.п. Лучше поэтому строк с номерами менее 10 вообще не заводить, а для создания резерва вводных строк начинать их нумерацию с 20.
Поскольку список операторов ФОКАЛа предельно мал, его можно быстро извлечь на экран с помощью призыва о помощи: Help. ФОКАЛ далее настолько любезен, что вместе с номером ошибки сообщает и её существо, тогда как БЕЙСИК вынуждает в таких случаях - до устойчивого запоминания кодов ошибок - заглядывать в руководство. Длина строки ФОКАЛа ограничена лишь полным количеством символов, тогда как наша версия БЕЙСИКа размещает лишь по одному оператору в строке (в иных версиях это не так). В целом синтаксис ФОКАЛа выглядит проще, в нем не нужно объявлять переменные и т.п. (зато надо следить за пробелом, к которому почти равнодушен БЕЙСИК).
Из большого числа различных несомненных преимуществ, которыми в свою очередь обладает более капитально разработанный БЕЙСИК, нам бы хотелось обратить внимание на возможность организации приостановки программы в заранее обусловленном месте по желанию оператора. Для этого у нас теперь имеется команда INKEY, по которой БК «понимает» значение клавиши, нажатой по ходу программы, но в отличие от ASK или FCHR ФОКАЛа не останавливающая программу, если не была нажата ни одна клавиша (в других версиях БЕЙСИКа для такой условной приостановки известна команда PAUSE. Функция INKEY всё же шире). Отметим ещё, что оператор INPUT в отличие от ASK ФОКАЛа весьма терпеливо переносит обычные исправления в вводимых данных.
Однако продолжим освоение других важных преимуществ БЕЙСИКа на практических примерах. У нас сейчас, например, появилась возможность строить не только точки и прямые, но ещё - одним махом - прямоугольники и окружности (эллипсы). Если у вас освоен и цветной телевизор (до него автору ещё не удалось добраться), то вы сможете лучше оценить новые художественные возможности БК, хотя даже на черно-белом экране дополнительная градация яркости даёт заметный эффект.
Предлагаем здесь следующие пуантилистские, кубические и циркулярно-эллиптические сюжеты:
100 REM «STARDUST» 110 X=256*RND(1) 120 Y=256*RND(1) 130 A=1 140 PSET (X, Y), A 150 GOTO 110
или |
140 LINE-(X,Y),А |
или |
122 Z=256*RND(1) 124 V=256*RND(1) 140 LINE(X,Y)-(Z,W),A |
или |
140 LINE(X,Y)-(Z,W),A,B, |
или |
140 CIRCLE(X,Y),Z,A,,,1.25 |
А теперь видоизменим одну строку 130 A=4*RND(1) в пунтилистской программе, меняя случайным образом «цвет» откладываемых точек. Нас ждёт серьёзное разочарование в наших надеждах на существенно более высокое совершенство новой функции RND. Как мы видим, явная регулярность в получаемых картинах, скрывавшаяся при первом беглом знакомстве, к сожалению, присутствует, что говорит о покуда неисчерпанных возможностях для творчества по созданию наиболее качественных случайных функций.
Предложим здесь ещё один тест для контроля правильности заполнения рабочего интервала RND, которую ФОКАЛ, как мы знаем, не мог достаточно долго обеспечивать. Отклонения от среднего ожидаемого заполнения интервалов сравниваются в этой программе с нормальным гауссовым распределением. Можно наблюдать, что реальное распределение лишь очень медленно стремится к теоретической кривой. Полезно подумать, почему это так.
10 REM ’GAUSSIAN DISTRIBUTION’ 20 DIM X(100),Y(1000) 30 T=T+1 40 ? T AT(0, 0) 50 FOR M=0 TO 99 60 A=100*RND(1) 70 X(A)=X(A)+1 80 L=256+60*((X(A)-T)/SQR(T)) 90 Y(L)=Y(L)+1 100 NEXT M 110 CH¤=INKEY¤ 120 IF CH¤="" THEN 30 130 CLS 140 FOR K=0 TO 511 150 PSET(K,320*Y(K)/T+5) 160 D=256-К 170 D=D*D/7200 180 PSET(K,5+220*EXP(-D+1E-16)) 190 NEXT К 200 ? T AT(0,2) 210 GOTO 30 220 END
Для первого знакомства с новыми возможностями, открывающимися перед модифицированным БК этих упражнений, пожалуй, достаточно. Поскольку сейчас машины, «понимающие» БЕЙСИК и умеющие, помимо того, печатать содержимое своих программ, получили и у нас определённое распространение, иногда возникает возможность приводить здесь отработанные листинги программ. Листинги, напечатанные самой ЭВМ и воспроизводимые как факсимиле, должны гарантировать от обычных в таком деле и всегда досадных типографских дефектов. К сожалению, диалекты БЕЙСИКа могут расходиться в обозначении уже самых основных операторов графики и поэтому чаще самое большее, что можно в таких случаях достичь, просто «печатать» программу на ЭВМ, используя её как пишущую машинку. Полная гарантия, что такой «листинг» будет безотказно работать на БК, при этом отсутствует.
Но вот в том же рекламном приложении в числе услуг, предлагаемых заводом нашим пользователям, означено: стыковка с принтером. Блестящая возможность! От открывающихся грандиозных перспектив применения БК на дому в качестве редакционно-справочно-издательского устройства (а это, пожалуй, самая ёмкая сфера применения персональных машин во всем мире, из «серьёзных», разумеется, т.е. если не считать всевозможных игр) просто-таки дух захватывает. Академик Е.П. Велихов утверждал как-то, что известный писатель Г. Маркес признался ему, что, если бы у него раньше появился такой компьютер, он написал бы вдвое больше произведений! Не пора ли и нам также начать двигаться в том же направлении на пути к всеобщей компьютеризации? Тем более что в магазине «Электроника» в витрине уже выставлено готовое электронное печатающее устройство, которое должно совсем скоро поступить в продажу по цене... всего в каких-то две с небольшим тысячи рублей! М-да... это, пожалуй, разве для членов Союза писателей - пусть в самом деле напишут поскорее вдвое больше произведений. Ну а нам для начала неплохо было бы обзавестись дисководом вместо ненадёжного магнитофона.
Извольте, в той же «Электронике» выставлен и образец (!) дисковода - тоже сущий пустяк - за девятьсот целковых! Нет, тут поневоле задумаешься: чем же таким могут быть заполнены эти также весьма небольшие коробочки? Судя по всему, они достаточно пустые внутри... Или вот известно, что в одной из систем принтеров пишущий узел представляет собой, в сущности, лишь чернильницу, которая после израсходования чернил просто выбрасывается. Не может такой узел стоить больше десятки... всё равно каких единиц.
А если, упаси господи, дойдёт дело и до столь желанного графопостроителя? Этот, уж точно, пойдёт разве что членам Союза художников... Ну а на худой конец «мышь», или хотя бы «джойстик» (вот ещё словцо, явно нуждающееся в переводе... Но не волшебная же палочка!)? Нет, чувствуется, что нам ещё долго надеяться, что наш компьютер станет вполне серьёзным устройством, а не детской обучающей машинкой... Впрочем, стоп! Ясно, что настала пора самим срочно браться за паяльник!
С чего же начать наши самодеятельные занятия по совершенствованию и комплектации БК необходимыми аксессуарами? Одна из возможностей для творчества подсказывается буклетом БК, в котором значился так и не материализовавшийся телевизионный модулятор - устройство для связи с БК через обычный антенный ввод, а не через видеовход, который на большинстве работающих ныне ТВ-приёмников может пока отсутствовать. Подключение таких аппаратов к БК - не всегда тривиальная процедура, которая может потребовать, по терминологии буклета, доработки. Эта лёгкая доработка, по моему опыту, даже при наличии видеовхода может потребовать знания теории линейных цепей (моему «Шилялису-402» понадобился подбор дополнительных RC-фильтров, без которых он мог чертить только точки, но не строчки...). Всё же твёрдо уверен: подключение к черно-белому телевизору не в пример проще для радиолюбителя с любым стажем, нежели сооружение и настройка антенного модулятора. Кроме того, следует иметь в виду, что качество изображения в этом случае вряд ли улучшится. Могут возникнуть и вполне экологические проблемы загрязнения самого «мирового эфира» помехами соседским телевизорам. Ведь и без ВЧ-модулятора БК ухитряется всё же создавать лёгкие (!) помехи телевизору в соседней комнате. Мы ограничимся здесь лишь указаниями на описание возможных схем модуляторов в радиолюбительской литературе: Радио, № 10, 1986; № 6, 1985, с. 31.
Другое направление самодеятельного творчества навеяно определённым негативным опытом проведения длительных расчётов на БК. Иногда, хотя и достаточно редко, бытовая сеть питания даёт сбои - попросту отключается. Это не приводит к фатальным последствиям: утрачивается программа (в случае наших простых программ это вообще не следует принимать в расчёт), а также и все накопленные результаты вычислений (имея в виду скромные цели наших исследований, и эту потерю также следует считать вполне терпимой). Но при более серьёзных занятиях, при том, что перезапись больших программ и массивов данных с магнитофонов - дело хлопотное и малонадёжное, подобные отключения могут вызывать неоправданное раздражение по адресу любого компьютера. Вместе с тем, как показывает мой опыт общения с МОГЭС, отключения сети вообще достаточно редки, но, главное, носят весьма кратковременный характер. Поэтому, например, сбои электронных часов, питаемых от той же сети (а по своим потенциальным последствиям остановка часов-будильника ни в какое сравнение со сбоем компьютера не идёт - бытового, разумеется), можно почти полностью исключить, если обеспечить возможность часам «продержаться» при отключении совсем немного - секунд пять. Микросхемы часов потребляют ничтожный ток и для создания 5-секундного резерва для них можно обойтись одним конденсатором в цепи питания. Наш же БК потребляет от 5-вольтового источника ток чуть менее 1,5 А (строго говоря, источник связан с БК двумя линиями, но по одной из них передаётся ток всего в несколько миллиампер), и создание конденсаторного резерва ёмкостью порядка одной фарады хотя и возможно в принципе, но не самое удачное техническое решение. Однако владельцы БК наверняка обратили внимание, что источник питания при работе издаёт «писк», характер которого может даже меняться в зависимости от рода деятельности БК. Этот писк - признак работы высокочастотного преобразователя. С подобными преобразователями источник может и не содержать сетевого трансформатора (хотя его масса говорит скорее об обратном), и в этом случае напряжение во вторичной цепи питания преобразователя может быть достаточно высоким, что делает конденсаторный резерв питания технически более приемлемым. Возможны, разумеется, и более капитальные схемы резервного питания с применением батарей и аккумуляторов, но, не имея полной схемы устройства питания БК, мы оставляем всю эту тему для самостоятельной раз работки заинтересованным радиолюбителям. Можно помечтать и об устройстве экстренного вывода содержимого памяти БК на внешнее ОЗУ, подпитываемое от небольшой резервной батарейки. Заметим, что производство так называемых «непрерываемых» (uninterruptible) источников питания для компьютеров - особая и вполне процветающая отрасль околокомпьютерного бизнеса.
Мы же приглашаем наших читателей, сносно владеющих паяльником, последовать по несколько иному пути построения электронных связей с внутренней сущностью БК, исключающему необходимость прямого вторжения внутрь самого компьютера или его источника питания. Обычно после того как отлажена какая-либо сложная программа и машина принялась за свои долгие расчёты, необходимость в теледисплее может стать совершенно минимальной. Нужен разве что периодический контроль за отсутствием тех же сбоев, да ещё, возможно, ввод новых данных и запись (вручную!) результатов. Для этой цели вполне достаточен вывод из БК какого-либо числа и даже хотя бы одной цифры! Индикаторное устройство, высвечивающее несколько цифр, ни в коей мере не может заменить теледисплей, но всё же может заметно уменьшить его загрузку, а с ней и число дискуссий с домашними о качестве и познавательной ценности телепрограмм...
Для визуальной демонстрации чисел БК потребуется по одному индикатору на каждую выводимую цифру, но также ещё и по одной микросхеме - дешифратору, которые служат для преобразования двоичных кодов в условные сигналы иного типа (применять временное переключение каналов - так называемое мультиплексирование - при небольшом числе разрядов не имеет смысла, так как экономия на количестве дешифраторов не окупает схемных усложнений). Наиболее просто осуществить цифровой индикатор - приставку на светодиодах (АЛС различных серий), которые сейчас появляются в продаже, хотя и стоят довольно дорого. Кроме того, к АЛС полагаются дешифраторы, которые ещё не фигурировали на магазинных прилавках (например, К514ИД2 и т.п.). Более доступны сейчас уже морально устаревающие газоразрядные индикаторы (ИН-9, ИН-14 и т.п. Магазин «Пионер» в течение многих месяцев не мог распродать индикаторы ИН-14 по цене всего 25 коп. за штуку), для которых имеются в продаже и недорогие дешифраторы (К155ИД1 стоит всего 70 коп.).
За чем же стало дело? В комплект БК входит разъём для подключения к порту ввода-вывода - вполне законному каналу для связи с внешним миром, схемы подключения дешифраторов и индикаторов можно найти в стандартных справочниках (см., например: Интегральные микросхемы. - М.; Радио и связь, 1984/Под. ред. Б.В. Тарабрина; Применение интегральных микросхем в электронной и вычислительной технике. - М.: Радио и связь, 1987/Под ред. Б.Н. Файзулаева и Б.В. Тарабрина. См. также схему соединения КР514ИД2, которая по «цоколёвке» отличается от К514ИД2), и остаётся только подыскать подходящие комплектующие...
Но прежде чем включать паяльник, стоит обдумать ещё кое-какие проблемы. От какого источника «кормить» нашу приставку? Собственное потребление дешифраторов довольно незначительно, и их можно было бы - с минимальными предосторожностями - подключить к источнику самого БК. Однако потребление индикаторов АЛС довольно значительно (около 100 мА), и ещё неизвестно, как БК отнесётся к подобному нахлебничеству[2]. Лучше поэтому соорудить отдельный источник, в качестве которого первоначально может подойти даже батарейка на 4,5 В. В случае же газоразрядных индикаторов необходим дополнительный источник на 160-200В, что уже таит опасность серьёзных осложнений. Для исключения возможности проникновения высокого напряжения - при неисправностях или отладке - во внутренности компьютера можно попытаться подключать дешифратор к порту через «охранные» диоды (подбором, используя дополнительное гасящее сопротивление, можно всегда выявить из диодов Д223Б экземпляры, не пробивающиеся даже при 250 В обратного напряжения).
Но обратимся теперь к некоторым чисто программным сложностям. Через 16 выводных контактов порта можно извлечь наружу из БК 64 К, т.е. 65536 различных целых чисел. Однако если стремиться почему-то к этому максималистскому пределу, то для перевода всех 16 двоичных разрядов в смешанный двоично-десятичный код, который необходим дешифраторам, может понадобиться ещё 16 преобразователей кодов, которые довольно дефицитны (схемы включения преобразователей К155ПР7 можно найти во втором указанном выше справочнике). Гораздо проще будет, ограничившись выводом всего 10 000 чисел, поручить перевод кодов самому БК, хотя это и потребует определённых программных и временных затрат. Отметим, правда, что необходимое число преобразователей кодов растёт быстрее числа разрядов, и эти числа лишь странным образом совпадают как раз при 16 разрядах. Поэтому возможны и какие-то промежуточные схемы, например, с переводом в двоично-десятичный код пар чисел и т.п. (для индикации двух пар чисел от 0 до 100 потребуется 6 шт. К155ПР7). Стоит также отметить, что некоторые дешифраторы (например, КР514ИД2) высвечивают не только десятичные цифры, но и все двоичные комбинации от 10 до 15, правда, не в гостированных буквенных обозначениях, а в каких-то условных - «марсианских» (числу 15 соответствует гашение индикатора. Нетрудно проверить, что все буквенные обозначения - A, b, С, d, Е, F - вполне реализуемы на 7-сегментном индикаторе! В том, что дешифраторы не предназначены для этой удобной функции, мы видим определённый просчет конструкторов, который имеет смысл исправить в последующих модификациях дешифраторов и счётчиков-дешифраторов). Поэтому с подобными дешифраторами возможна даже индикация непосредственно от двоичного кода всех 64 К чисел... в шестнадцатеричной системе счисления! Напомним, что, по свидетельству Я.И. Перельмана, в своё время находились борцы за внедрение вместо десятичной двенадцатеричной системы! Компьютерный век, как мы видим, может возобновить кипение учёной мысли теперь уже в направлении внедрения шестнадцатеричной системы!
Итак, для индикации 10 000 целых чисел (Y) в ФОКАПе можно предложить следующую схему действий:
10.1 S B=Y/1000;S А=0 10.2 F N=1,4; D 11 10.3 S А=А/16; D 12; R 11.1 S A=(A+FITR(В))*16 11.2 S B=B-FITR(В)+1Е-4 11.3 S В=В*10 12.1 X FP(1,7777) 12.2 X FP(2,A)
Добавка 1E-4 призвана исключить возможные двусмысленности в определении целой части целых чисел, которые внутри БК могут и не быть истинно целыми. Меняя местами операнды 1 и 2 в операторах FP, можно переходить от прямых кодов к дополнительным.
Поскольку в БЕЙСИКе предусмотрена специальная система для хранения целых чисел, можно попытаться воспользоваться этим обстоятельством. Поясним, что РОКЕ -52 представляет собой «физический» адрес порта (причём, как мы увидим, и ввода и вывода)
100 REM «SUBROUTINE PORT» 110 B=Y/1000 120 А%=0 130 FOR N=1 TO 4 140 A%=(A%+INT(B))*16 150 B=B-INT(B)+1E-4 160 B=B*10 170 NEXT N 180 A%=A%/16 190 POKE -52, A%
Действительно, помимо вывода данных из БК, его порт предназначен ещё и для приёма таких данных извне. Если у вас, дорогие радиолюбители-пользователи, дома уже действует какое-либо цифровое устройство, ну, например, частотомер, выходы его двоичных разрядов могут быть соединены с соответствующими контактами порта. При этом, если ваше устройство работает на микросхемах ТЛ-серий, допустимо непосредственное соединение с портом. В случае же схем КМОП необходимы ещё, как правило, и преобразователи уровней сигналов (К176ПУ1 - ПУ5 либо К561ЛН1 - ЛН2). Более сложные схемы перехода от схем серий НМОП, используемых в некоторых электронных часах (серии К145), для которых могут требоваться источники с отрицательным напряжением (-27 В), оставим для самостоятельных изысканий заинтересованным читателям.
Оказывается, что порт ввода может использоваться и для подключения такого совсем уж простого устройства, как кнопка! Довольно часто, даже по ходу счётных программ, может возникнуть необходимость влиять на ход программ, не прерывая их командой СТОП. В информационных, а в особенности в игровых программах такая необходимость возникает почти непрерывно. Если в БЕЙСИКе, как мы отмечали, для подобных вмешательств удобно пользоваться оператором INKEY, то владельцы машин с ФОКАЛом могут воспользоваться для подобных целей практически только портом. Для того чтобы БК понял, что ему что-то пытаются передать через порт, достаточно замкнуть какой-либо, регистр порта ввода на общий провод («землю»). Для пущей безопасности можно подключить к регистру кнопку через небольшое сопротивление (порядка 300 Ом). Замыкание регистра БК понимают как логическую единицу. Свободный, незамкнутый вывод порта (или соединение с «плюсом» источника питания и даже с «землёй» через сопротивление более примерно 1,5 кОм) понимается как логический 0 в соответствующем разряде. Интересующий вас номер разряда в ФОКАЛе задаётся вторым операндом («маской») в операторе X FP (0, М), который должен быть записан в форме 8-ричного числа. Однако «маска» может задаваться также и произвольным «арифметическим выражением» (целой его частью). В БЕЙСИКе чтение регистра порта может производиться также по «маске» оператором INP (52, М), но здесь «маска» может быть задана в любой, даже в 16-ричной форме (описываемая простая методика использования внешних контактных устройств для произвольного вмешательства в ход именно игровых программ была предложена одним из читателей на страницах журнала «Наука и жизнь»).
Довольно ясно, что возможны различные обобщения этой простой идеи с использованием хоть всех 16 регистров порта для создания самых замысловатых внешних управляющих устройств вплоть до цифровых «джойстиков». Этот злосчастный прибор, который обычно работает как аналоговое устройство, должен вырабатывать пару постоянных напряжений, пропорциональных наклонам рукоятки в двух плоскостях, но кроме того, может иметь ещё и кнопочную гашетку для управления игровой «стрельбой» (в целом - функционально и внешне - джойстик часто имитирует штурвал боевого самолёта). Для того чтобы нам задавать положение рулей курса и высоты, можно попытаться использовать - в зависимости от требуемой градации - одну или две пары двоичных реверсивных счётчиков, содержимое которых будет периодически считываться БК. В самом простом случае наш штурвал может только включать и выключать пары контактов, управляющих увеличением или уменьшением содержимого счётчиков. Более сложные схемы могут содержать и переменные резисторы, управляющие частотой генераторов, вырабатывающих импульсы для счётчиков. Конечно, работу счётчиков, а также и индикацию положений нашего «кормила» на дисплее можно поручить и самому БК, но это будет сопряжено с затратами и машинного времени, и внимания играющих. Оставляем дальнейшую разработку и этого направления любителям активных игр.
Помимо индикации характера своей деятельности, и сам БК может «употребить» свой порт вывода для активного управления какими-либо внешними устройствами. В буклете-инструкции к БК в качестве таких конечных устройств предлагается использовать электронагреватели и осветители для управления микроклиматом и освещённостью в квартире. Нам такое применение БК показалось надуманным - чистой растратой его интеллектуальной мощи. Но как бы то ни было, любое подобное применение может потребовать предварительного преобразования цифрового сигнала из порта в аналоговую форму (в буклете, точнее говоря, предлагалось изымать сигнал из линии ВД программируемого интерфейса, а для расшифровки этой белиберды смотреть ещё «схему электрическую принципиальную платы вычислителя», разумеется, недоступную для покупателя). Таким образом, нам может потребоваться цифроаналоговый преобразователь, который сейчас в виде готовой микросхемы (К572ПА1 или ПА2) можно свободно купить всё в той же «Электронике» (в магазинах же уценённых радиокомпонентов типа «Сделай сам» ЦАП К572ПА1 можно найти по цене всего 1 р. 90 к., что более чем втрое ниже цены «Электроники»).
Но нам нужно всё же решить, куда бы приложить напряжение, которое будет вырабатывать ЦАП под диктовку БК. В радиолюбительской практике медленно изменяющееся напряжение может быть использовано для каких-либо автоматических регулировок, подстройки частоты (воздействием на варикапы) и т.д. Однако упомянутые выше микросхемы могут обеспечивать ещё и перемножение сигналов, для чего вместо постоянного опорного напряжения можно подавать на них двухполярный сигнал (не очень высокой частоты, например звуковой). Отсюда масса возможностей управления уровнем сигналов, их спектральным составом и т.д. Для ориентирования в бездне открывающихся в этой связи возможностей мы можем порекомендовать переводной справочник «750 практических электронных схем», составленный Р. Фелпсом (М.; Мир, 1986). К сожалению, точное число схем в этой весьма содержательной книге несколько меньше 750, так как некоторые из них могут повторяться: видимо, ни составитель, ни переводчики в обычной редакционной суматохе не смогли или не захотели распознать несколько одинаковых схем, изображённых слегка различно!
Одна из схем генератора, управляемого напряжением, а точнее, цифровым кодом с последующим перемножением, может понравиться нашим пользователям-радиолюбителям, не чуждым, например, интереса ещё и к музыке (именно эта схема, в числе прочих, воспроизведена в двух «экземплярах» - на стр. 124 и 130). К сожалению, схема даёт набор частот не в виде геометрической прогрессии, наиболее удобной для музыкальных приложений, а в виде прогрессии арифметической, и поэтому набор в десять октав (или более чем в три декады, а именно в К - 1024 - 210 раз), который перекрывается на не слишком высоких частотах с ЦАП К572ПА1, приходится сокращать, скажем, до двух октав, чтобы не «потерять» промежуточные ноты. Границы диапазона генерируемых частот задаются величиной конденсатора С1 которую, в зависимости от нужных приложений генератора, можно подобрать самостоятельно. Верхняя граница диапазона, кроме того, зависит ещё и от частотных свойств используемых операционных усилителей. С наиболее распространённым и самым простым усилителем К553УД2 удаётся достичь самой верхней границы звукового диапазона - 20 кГц, хотя здесь регулярность частотной прогрессии может уже нарушаться. Дальнейшее расширение диапазона примерно до 100 кГц возможно с усилителем К551УД1. Столь высокие ультразвуковые возможности могут представить определённый интерес и в радиолюбительской практике, например при настройке стереодекодеров и т.п.
Однако для измерительных целей, как правило, необходимы синусоидальные колебания, которые обычно «добывают» из треугольных с помощью нелинейных цепей. Варианты таких преобразователей также содержатся в справочнике Р. Фелпса. На нашей схеме приведён пример возможной реализации преобразователя на доступной элементной базе. Подобный генератор синусоидальных сигналов, частота которого задаётся цифровым кодом из порта БК, может стать необычайно удобным инструментом при всевозможных настройках звуковых трактов современной аппаратуры. При освоении ещё и аналого-цифрового преобразователя (мы надеемся в дальнейшем обратиться к этой возможности) подобные довольно хлопотные процедуры можно в принципе полностью автоматизировать.
Но обратимся напоследок к музыкально-электронной проблематике. Мы можем предложить следующую простейшую форму записи музыкальных пассажей, в которой часть числа шифрует высоту тона, а часть - продолжительность звучания. В нашей программе три варианта действий: запись музыки, чтение записи на экране и собственно исполнение. Затраты времени в БК не просто связаны с количеством пустых циклов, и здесь может потребоваться самостоятельная калибровка.
1.1 A "MODE (2=PLAY, 3=REC, 4=READ)" M 1.2 F N=2500,2,3000; D M 2.1 S X=FX(1, N); S A=FITR (X/100) 2.2 S B=X-A*100; X FP(2,17777) 2.3 S A=A*4; X FP(1,A) 2.4 F T=0,B; 3.1 T !N; A C 3.2 X FX(-1,N,C) 4.1 S X=FX(1,N) 4.2 I (X) 4.3, 4.4 4.3 T !N, X 4.4 R
Самая простая известная всем музыкантам тема (она использована А. Гедике в концерте для трубы как основа дальнейших разработок) в нашей системе «счисления» будет выглядеть так: 12820, 14420, 16120, 12820, 14445, 12850. С помощью функции FCHR можно научить БК понимать даже названия нот и их длительностей, но это направление мы оставим для самостоятельного творчества. Читатели. которым хватит упорства повторить наши «экзерсисы», могут почувствовать, что исполнить «на ФОКАЛе», скажем, «Полет шмеля» будет непросто. Надеемся, что с помощью БЕЙСИКа и этот образцовый кунстштюк всё же будет сыгран (автору довелось слышать это произведение - нота в ноту, строго по партитуре - в исполнении на губной гармонике!). Ясно, однако, что 300 000 операций в секунду, которые может позволить себе БК, превышают способности самого отчаянного исполнителя и известных механических автоматов - пианол, шарманок, музыкальных шкатулок и т.д. Этот пример вновь даёт нам повод задуматься об ограниченности возможностей ЭВМ работать в реальном времени.
Прямоугольные колебания (меандр) довольно богаты гармониками, и по тембру в басовом регистре их звучание может напомнить кларнет. Попробуйте исполнить старый добрый гроссфатер, 4802, 4202, 4002, 4802, 6402, 8102, 9602, 12802, 16102, 19202, 16115, 16115, 16125, 19202, 16125, 19202, 16125, 19202, 19202, 17102, 14402, 12102, 9630. Треугольные же колебания несколько ближе к гармоническим и на слух соответствуют, скорее, родственнику кларнета - саксофону. Вот известная тема Ч. Паркера «Now’s the time», которую можно приспособить для БК-будильника: 12805, 17115, 17105, 19215, 16105, 17140 (2 раза), 12805, 17115, 17105, 19215, 16105, 17115, 17105, 19215, 12805, 17115, 17105, 19215, 16105, 17150.
Чисто синусоидальные колебания, столь необходимые для всевозможных измерений, совершенно неинтересны для музыкальных целей (исключая, возможно, настройку инструментов). Наша поделка, разумеется, не предназначена для серьёзного исполнительства - у неё скромные, развлекательно-познавательные цели. Вообще же нелишне заметить, что точная имитация звучания различных инструментов - задача достаточно сложная, и электронные инструменты с трудом воспроизводят тембр и иные особенности сложившихся веками акустических прототипов. Не случайно наибольшее распространение получили именно электронные инструменты, где роль электроники состоит, в сущности, лишь в усилении звука от натурального источника (электрогитара, бас и пр.). Звучание же новых чисто электронных систем вплоть до сложных синтезаторов при всех возможных удобствах для исполнителя постновато и не даёт впечатления живого исполнительства. А электронные «ударники», утвердившиеся в стремлении к интенсификации музыкального труда, своим недвижным, неживым (наверно, ещё и кварцованным!) ритмом способны лишь вывести из себя настоящего музыканта. Чисто электронные оркестры пока не завоевали сколь-нибудь заметных позиций также в основном по причине бедного звучания, которое не идёт ни в какое сравнение с хорошим джаз-оркестром, не говоря о симфоническом (удивительнее всего, что по каким-то совсем уж неясным причинам даже репертуар подобных оркестров зачастую отдаёт определённой тухлостью!).
Мы видим, что грядущая эпоха полнокровного электронно-цифрового исполнительства ещё далека от нас. Наши БК-энтузиасты имеют перед собой довольно обширное поле. Стоит, например, подумать, как приспособить оставшиеся шесть выводов порта для дополнительных регулировок (заметим, что у клавесина, а в полной мере и у органа не было средств для изменения громкости). Мыслимы даже многоголосые БК-оркестрионы с временным разделением каналов! Желаем успехов в новых цифромузыкальных изысканиях!
[1] Автор имеет в виду свою статью, опубликованную ранее в этой серии брошюр (см. № 3 за 1989 г.).
[2] В книге «Фокал для микро- и мини-компьютеров» (М.: Машиностроение. 1988) указано, что от контактов А8, А9, В8, В9 УП допустимо отбирать ток не более 150 мА.