Отсчёт времени на БК-0010.01
Известно, что БК-0010.01 не имеет таймера, и мало кто знает, что при определённых условиях один из системных регистров с шестнадцатеричным адресом FFC8 может выступать в роли датчика времени. Для этого необходимо:
- с помощью оператора POKE &HFFC6,&Ha задать в дополнительном коде начальное значение (а) содержимого регистра FFC8, который мы в дальнейшем будем называть счётчиком;
- оператором POKE &HFFCA,&Н70 выполнить запуск счётчика.
В результате содержимое счётчика станет изменяться во времени в соответствии с одним из графиков, изображённых на рис. 1-3. Считывание показаний счётчика производится операцией PEEK (&HFFC8).
Рис. 1
Рис. 2
Рис. 3
Нужно заметить, что после запуска счётчик работает непрерывно, не реагируя ни на какие команды и операции Бейсика, даже на STOP, END, NEW. Только операция POKE с соответствующими адресами может изменить состояние счётчика. Следует иметь в виду также и то, что после включения БК его регистр FFCA, задающий начальное состояние счётчика, автоматически устанавливается на a=0. Поэтому если требуется задать именно это значение a, оператор POKE &HFFCA, 0 можно опустить. Регистр FFCA тоже не воспринимает команду NEW - в нём сохраняется прежнее значение а.
В случае, когда а=32767 (&H7FFF), полный период работы счётчика по точным измерениям[1] равен 89,657 с, откуда следует, что коэффициент пересчёта показаний счётчика в секунды К = 32767 / 89,657 = 365,47.
Теперь у нас есть все данные для построения таймеров, различных по исполнению и предназначению.
Таймер со временем работы до 89 с и точностью отсчёта в 1 с
10 POKE &HFFCA,&H70 'запуск счётчика 20 ? АТ(0%,0%);"Время: ";ABS(INT(РЕЕК(&HFFC8)/365.47+.5));"сек. " 30 GOTO 20
Операторы 20-й строки этой программы выдают на монитор время в секундах от нуля до 89, после чего счёт идёт в обратном направлении от 89 до нуля и т.д.
Таймер со временем работы до 179,3 с и точностью отсчёта в 0,1 с
Любой из этих таймеров можно использовать в обучающих программах для определения времени реакции на поставленный вопрос или времени, затраченного на получение правильного ответа, поскольку это время не превышает обычно нескольких десятков секунд.
10 POKE &HFFCA,&H70 20 Т=РЕЕК(&HFFC8) 'чтение содержимого счётчика 30 IF Т>0 TH Т=Т-65536 40 ? АТ(0%,0%);"Время: ";CSNG(INT(.05-Т/36.547)/10);"сек. " 50 GOTO 20
С этой целью оператор, записанный выше в строке 10, располагают перед той частью обучающей программы, которая воспринимает и анализирует ответы, а остальные операторы, составляющие таймер, размещают в конце этой части.
Таймер с произвольным временем работы и точностью отсчёта в 0,01%
10 N%=0% 15 Т%=0% 20 POKE &HFFC6,&H7FFF 'альфа равно 32767 25 POKE &HFFCA,&Н70 30 S%=T% 35 Т%=РЕЕК (&HFFC8) 40 ? АТ(0%,0%);"Время: ";CSNG(INT((32767*N%-T%)/3.6547+.005)/100);"сек. " 45 IF T%>S% TH N%=N%+ 1% 50 GOTO 30
В отличие от предыдущих вариантов здесь подсчитывается и запоминается номер периода работы счётчика (N%), который затем используется для подсчёта полного времени работы таймера. Такой алгоритм позволяет определять время с высокой точностью: погрешность не превышает 2 с за сутки. Поэтому этот таймер можно использовать, например, для построения программы электронных часов.
Если же высокая точность отсчёта времени не нужна, можно воспользоваться более простой программой.
Упрощённый таймер с произвольным временем работы
Здесь цикл опроса счётчика замыкается
10 Т=0 15 POKE &HFFCA,&Н70 'запуск счётчика в каждом цикле 20 ? АТ(0%,0%);"Время:";CSNG(INT(Т/365.47+.5));"сек. " 25 Т=Т-PEEK(&HFFC8) 30 GOTO 15
на строку 15 программы; тем самым счётчик перезапускается заново в каждом цикле, а то, что он успевает за время цикла накопить, суммируется в строке 25. Это накопление по своей числовой величине от цикла к циклу почти не изменяется, в то время как значение переменной Т постоянно возрастает, а значит, возрастает и разность порядков, и время выполнения операции в строке 25 (за счёт выравнивания порядков).
Рассмотрим несколько приложений.
Определение времени исполнения операторов и объёма занимаемой ими памяти.
Объём оперативной памяти БК, доступный пользователю при работе с Бейсиком, не столь велик, чтобы пренебрегать оптимизацией составляемой программы по числу занимаемых ею байтов. Нелишне знать и время выполнения каждого оператора в зависимости, например, от типа используемых данных.
Предлагаемая программа TRIAL, небольшая по объёму и несложная по структуре, позволяет определять эти параметры.
8 POKE &HFFCA,&Н70 9 FOR I%=0% ТО 999% 10 ...Участок для размещения ...испытываемых операторов 96 97 NEXT I% 98 ? "Т=";INT(.5-РЕЕК(&HFFC8)/.36547)-140%;"мксек";"L=";13728%-FRE(0%);"l=";200%-FRE(" ") 99 IF INKEY$=" " TH 8 EL 99
Между строками 10 и 96 этой программы размещают для исследования отдельные операторы Бейсика или небольшие их группы. Программа TRIAL выдаёт на монитор: время (Т) исполнения операторов в микросекундах, число байтов (L), которые занимают эти операторы вместе с используемыми числовыми переменными, и отдельно - число байтов (I), занятых символьными переменными, если они имеются.
В процессе эксплуатации программы TRIAL выявились две особенности, проявляющие себя при определении времени Т исполнения испытываемых операторов.
Первая заключается в «уходе» нуля на 8-10 мкс за час работы; вторая - в колебании на 2-3 мкс отсчётов Т, полученных повторно при неоднократном нажатии пробела.
Для сравнительного анализа времени исполнения альтернативных операторов это обстоятельство не имеет значения. Но если требуются более точные оценки, рекомендуется следующее правило компенсации «ухода» нуля.
Ввести программу и пустить её вхолостую, т.е. без заполнения промежутка 10-96 операторами. Нажимая несколько раз пробел, получить ряд отсчётов времени исполнения программы. Выбрать наименьший из них и сложить с константой 140%, записанной в строке 98. Контрольным пуском программы убедиться в правильности сделанного исправления: наименьшее значение Т должно равняться нулю.
Затем в промежуток 10-96 записать подвергаемые испытанию операторы, пустить программу и несколько раз повторить её исполнение. Из ряда отсчётов Т выбрать наименьший: он будет наиболее точным.
Если время исполнения исследуемых операторов в сумме превосходит 89657 мкс, то нужно либо разделить группу на отдельные операторы, либо внести некоторые изменения в программу, позволяющие увеличить в десять раз предел измерения времени. Вот эти изменения:
- в строке 9 число 999% заменить на 99%;
- в строке 98 число .36547 заменить на .036547 и число 145% - на 164%.
Поскольку отсчёт времени программой TRIAL производится с некоторым разбросом, не превышающим трёх единиц младшего разряда, рекомендуется проводить повторные измерения, нажимая клавишу ПРОБЕЛ.
В приведённой ниже таблице даются некоторые результаты применения программы TRIAL.
Операторы |
T |
L |
l |
---|---|---|---|
T%=12%+34% |
93 |
36 |
0 |
T=12+34 |
1039 |
50 |
0 |
T!=12!+34! |
1176 |
48 |
0 |
T$="12"+"34" |
1395 |
50 |
4 |
? AT(0%, 0%) |
1630 |
28 |
0 |
? AT(0,0) |
1942 |
42 |
0 |
FOR K=0 TO 8 NEXT K |
11456 |
84 |
0 |
FOR K!=0! TO 8! NEXT K! |
11814 |
78 |
0 |
FOR K%=0% TO 8% NEXT K% |
1444 |
60 |
0 |
FOR K%=0% TO 8% NEXT |
1743 |
62 |
0 |
POKE 32767, 32767 |
783 |
44 |
0 |
POKE &O077777, &O077777 |
68 |
34 |
0 |
POKE &H7FFF, &H7FFF |
68 |
30 |
0 |
Первая группа примеров (Т=...) свидетельствует, во-первых, о том, что действия с целыми числами выполняются более чем на порядок быстрее, чем с вещественными, а во-вторых, что операции с числами ординарной длины (т.е. из 7 значащих цифр), помеченные символом «!», выполняются дольше, чем с числами удвоенной точности (с 17 значащими цифрами).
Вторая группа (? АТ...) говорит о том, что не следует пренебрегать символом целого числа «%» в подобных операциях.
Третья группа (FOR... NEXT...) подтверждает уже известную нам истину о полезности использования, когда это возможно, целых чисел, но говорит ещё и о том, что в операторе NEXT нелишне указывать имя переменной, служащей параметром цикла.
Четвертая группа (POKE) показывает, что при использовании шестнадцатеричной адресации заметно экономится память БК. Кроме того, символ такой адресации &Н трудно с чем-нибудь спутать, чего нельзя сказать о восьмеричной символике &О : букву О здесь легко принять за ноль, хотя последний и перечёркивается.
Даже этого небольшого числа примеров, по-видимому, достаточно, чтобы считать программу TRIAL весьма полезной.
Выдача сигнала через равные промежутки времени
10 INPUT "Т=";Т 'задание промежутка времени в секундах 15 A%=INT(T*365.47-32766.5) 20 POKE &HFFC6,A% 'задание альфа 25 ВЕЕР 'звуковой сигнал (может задаваться и иной) 30 POKE &HFFCA,&Н70 'запуск счётчика с альфа 35 IF PEEK(&HFFC8)>0% TH 25 EL 35
Промежуток времени Т в этой программе может задаваться в пределах от 0,01 до 89,65 включительно с дискретностью не менее 0,01.
Программа ЧАСЫ
В основе программы ЧАСЫ лежит ещё один способ построения таймера на БК-0010.01. Он состоит в том, что после завершения каждого периода работы счётчика (от нуля до -32768) последний сбрасывается и запускается вновь с нуля операцией, записанной в строке 30. Возникающая при этом погрешность компенсируется увеличением константы, содержащейся в строках 20 и 35, до значения 89.6876. При этом ЧАСЫ дают за сутки погрешность, не превышающую 2 с.
10 POKE &HFFC6,0% 'альфа=0 15 INPUT "Введите время пуска часов: Ч,М,С";H%,M%,S% 20 T0=3600*H%+60*M%+S%-89.6876 25 CLS 30 POKE &HFFCA,&H70 'пуск счётчика 35 Т0=Т0+89.6876 40 T%=PEEK(&HFFC8) 'съем показаний счётчика 45 IF T%>0% TH 30 EL T=T0-T%/365.47+.5 50 Н%=Т/3600 55 М%=Т/60-H%*60 60 S%=T-H%*3600-M%*60 65 ?АТ(17%,1%);Н% MOD 24%;"ч.";М%;"мин.";S%;"сек." 70 GOTO 40
По запросу оператора INPUT, стоящего в строке 15, вводится начальное время пуска часов, при этом значения часов, минут и секунд отделяются друг от друга запятыми. В назначенное время часы запускаются нажатием клавиши ВВОД.
В. ЯКОВЛЕВ
[1] За 28 ч, т.е. за 100800 с.
Подключение БК к телевизорам ЗУСЦТ
Сейчас наиболее широко распространены цветные телевизоры типа ЗУСЦТ, и поэтому вопрос их доработки для работы с бытовыми компьютерами, а также доработки самих компьютеров волнует многих. Структурные и электрические схемы телевизоров ЗУСЦТ подробно рассмотрены в большом цикле статей журнала «Радио». Поскольку инструкцией этих телевизоров предусмотрена возможность их функционального наращивания, подключение к ним компьютеров БК не представляет каких-либо сложностей и вполне может быть выполнено в домашних условиях.
В зависимости от набора сервисных возможностей, требуемых при работе компьютера с телевизором, возможны различные варианты подключения БК. Оптимальным представляется следующий набор реализуемых функций: возможность работы компьютера как с чёрно-белым, так и с цветным изображением, вывод сигнала звукового сопровождения БК на усилитель НЧ телевизора, автоматическое переключение телевизора в режим работы с компьютером при подключении соединительного кабеля. Необходимо сразу отметить, что для соответствующей доработки телевизора потребуются только два широко распространённых гнезда типа СГ-5 и, возможно, три резистора. Набор дополнительных радиодеталей, устанавливаемых в БК, и того меньше - один пятиконтактный разъём, подобный разъёмам БП, МГ, ТВ компьютера, и один резистор.
Схемы распайки двух розеток типа СГ-5, устанавливаемых в телевизоре, а также соединительного кабеля приведены на рис. 1 и 2 соответственно. Контакты разъёма ТВ с помощью проводников соединяются с контактами разъёма Х3, установленного на плате модуля радиоканала А1 (по схеме телевизора). При этом необходимо удостовериться в наличии в цепи «Блокировка» всех обозначенных на схеме телевизора соединений и радиоэлементов. В частности, на плате А1 должна быть установлена перемычка М-М, а на плате субмодуля радиоканала А1.3 элементы VD1, VD2, R34. Резисторы R1'-R3', показанные на рис. 1, в случае наличия на плате модуля цветности А2 резисторов аналогичного назначения (например, резисторов R84-R86 для модуля цветности МЦ-2) устанавливать не нужно. Степень насыщенности на экране телевизора основных цветов компьютерной графики можно регулировать, изменяя номиналы этих сопротивлений в пределах 330-680 Ом.
Рис. 1
Рис. 2
Разъёмы ТВ, ЦТВ очень удобно установить на передней панели телевизора вместо установленных там двух разъёмов, предназначенных для подключения телефонов и магнитофона. В результате такой переделки дизайн телевизора останется неизменным. Поскольку для подключения магнитофона в телевизоре использована розетка типа СГ-5, её можно не снимать, а достаточно просто перепаять в соответствии с рис. 1.
При доработке БК-0010 необходимо разъём компьютера ХТ9 (ТВ) перепаять согласно схеме распайки разъёма ТВ телевизора. Для этого контакты 1 и 5 разъёма ХТ9 сначала необходимо освободить от всех старых связей. Затем его контакт 1 нужно соединить с контактом 5 разъёма ХТ4 (МГ). Дополнительный разъём XT11 (ЦТВ), устанавливаемый в компьютере рядом с разъёмом ХТ9, распаивается в соответствии со схемой, показанной на рис. 3. Дорожку, связывающую вывод 13 микросхем D20 (по схеме БК-0010) с выводом 5 микросхем D21, необходимо перерезать. Соединение выхода элемента D20.4 с выводом 5 микросхемы D21 выполняется отрезком тонкого проводника навесным способом.
Отличительная особенность рассматриваемой схемы состоит не только в том, что для своей реализации она требует минимум дополнительных радиоэлементов, но также и в том, что её выходные R, G, В сигналы являются инвертированными по отношению к сигналам цветности, которые получаются на выходе схемы, опубликованной в журнале «Информатика и образование» (1989, № 2). Необходимость инвертирования сигналов цветности может возникнуть и при использовании других типов цветных телевизоров.
В режиме работы с цветом на контакт 4 разъёма ТВ компьютера должен подаваться сигнал «Синхронизация», а при работе с чёрно-белым изображением - сигнал «Видео». Для получения требуемой коммутации этих двух сигналов между контактом 3 разъёма ТВ и выводами элементов C9, R55, ранее соединявшихся с контактом 5 этого же разъёма, должны быть включены либо нормально замкнутые (при работе с чёрно-белым изображением) контакты механического переключателя, либо такие же контакты реле, срабатывающего от +5 В. В последнем случае один вывод катушки реле через нагрузочный резистор подключается к источнику +5 В, а другой - к контакту «Блокировка» разъёма ЦТВ компьютера.
Альтернативным способом получения синхронизирующего сигнала для цветного изображения является использование в качестве такового сигнала «Видео». Однако при таком решении для достижения устойчивой синхронизации и правильной цветопередачи изображения, возможно, придётся подобрать номинал резистора R4' (а возможно, и совсем его исключить), включённого между контактом 3 разъёма ХТ9 и контактом 1 разъёма XT11 (см. рис. 3). Кроме того, на плате БК между правыми выводами (по схеме компьютера) элементов C9, R55 и левым выводом резистора R56 необходимо установить перемычку.
Рис. 3
Подключение БК к телевизору для работы с цветом осуществляется с помощью соединительного кабеля, показанного на рис. 2. Для перехода в режим чёрно-белого изображения достаточно просто вынуть штекер ЦТВ из одноименного разъёма компьютера (и перевести в соответствующее положение переключатель, если он используется). Автоматическое переключение телевизора из режима работы с компьютером в обычный режим показа телевизионных передач происходит при отключении от разъёмов ТВ и ЦТВ телевизора обоих штекеров соединительного кабеля.
Правильность описанной методики доработки компьютера БК-0010 для работы с цветной графикой и подключения его к телевизору была практически проверена на нескольких цветных телевизорах с торговыми индексами Ц-275, Ц-280. Проверка показала, что выполнение всех требуемых операций по распайке соединительного кабеля, доработке БК и телевизора займёт у радиолюбителя средней квалификации не более одного свободного вечера.
П. ЧИРКОВ
Ещё раз о восьмицветном БК
В статье «Радуга на экране БК» (1989, № 2) был описан способ расширения цветовых возможностей БК. Наиболее удобным для пользования является, конечно, метод доработки схемы. Но предложенный В. Кондрашовым способ увеличения количества воспроизводимых цветов на экране довольно сложен и связан с необратимыми изменениями в конструкции компьютера. Предлагаю вариант, который избавляет от необходимости зашивки в ПЗУ, значительно упрощает процесс переделки и не вносит изменений в конструкцию БК. Возможности воспроизведения цветов почти такие же (63 различные палитры).
Первая часть переделки для получения трёх цветов остаётся без изменений. После удачного её осуществления необходимо отпаять концы резисторов R38, R39, R40 от дорожек, ведущих к микросхеме D20, и в получившиеся разрывы впаять выводы платы, схема которой приведена на рис. 1. Эта схема представляет собой управляемый коммутатор, который вместе с элементами формирователя цветов компьютера заменяет ПЗУ К556РТ4, предлагаемую В. Кондрашовым. При исправных микросхемах никакой настройки не требуется. Палитры здесь фиксированные, но их количество и разнообразие вполне удовлетворяют любого владельца БК. Ещё больше упростить схему можно путём замены регистра К555ТМ9 регистром выходного порта. При этом выводы порта подпаиваются непосредственно к входам дополнительной платы. Можно использовать те же разряды (9-14), только код палитры необходимо записывать по адресу 177714(8). Неудобство данного изменения в том, что при работе с внешними устройствами через данный порт будет происходить смена цветов. Поэтому можно предусмотреть отключение управления дополнительными цветами, как показано на рис. 2.
Рис. 1Рис. 2
Таблицу соответствия управляющих чисел и палитр можно составить, используя логику схемы, но помещать в журнале нет необходимости, поскольку после изготовления устройства можно ввести в компьютер элементарную программу, рисующую на экране трёхцветный рисунок и автоматически изменяющую число (от 177000(8) и до 100000(8) с интервалом 1000(8)), заносимое в управляющий порт (177716(8) или 177714(8)).
Владельцам БК с Фокалом следует воспользоваться функцией обращения к общей шине. При этом числа заносятся в десятичной системе: -512, -1024, -1536 и т.д., уменьшая каждый раз на 512 до -32768.
Указанные микросхемы можно заменить аналогичными. Лучше использовать серии 555, 133, поскольку они меньше нагружают блок питания компьютера.
В заключение несколько слов о применении полученных эффектов. Видимо, читатели поняли, что одновременно на экране дисплея всегда будет присутствовать только три цвета (кроме чёрного), но программное переключение палитр позволит создать изображение, переливающееся различными цветами.
А. КУЗНЕЦОВ,
учитель-методист п. Кумёны Кировской обл.
Восьмицветная приставка
Получить восемь цветов на экране БК можно и без внесения необратимых изменений в его конструкцию. Это позволяет сделать описываемая ниже приставка. Её использование позволяет также программировать палитру, т.е. в любой момент изменить её.
Впрочем, от недостатков она не свободна - занимает порт УП БК, так что программы, работающие, например, с принтером, могут отображаться только в стандартных цветах. Джойстик и другие устройства можно подключить к этой приставке, если они используются не более шести контактов BD (байта данных - контакты А16, А13, В12, B10, В5, В7, В6, А7 УП).
Элементы D4.3-4.4, D5.3 - 5.4, D6.3-6.4 приставки служат для обеспечения стандартного цвета при включении питания и после сброса; элементы D4.1.-4.2, D5.1.-5.2, D6.1-6.2 увеличивают нагрузочную способность БК и формируют уровни ТТЛ выходов цвета; элементы D1.1-1.3, D2.1-2.3, D3.1-3.3 - дешифратор кода палитры; V1-V9 - диодное «ИЛИ», служат также для развязки элементов дешифратора (можно использовать любые маломощные импульсные диоды); D1.4, D2.4, D3.4 приводят сигнал цвета к стандартной полярности; R1-R9 и V10-V12 служат для регулировки уровней цветовых сигналов.
Расположение битов цвета в порте "УП" (адрес 177714)
08 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
BB |
BG |
BR |
GB |
GG |
GR |
RB |
RG |
RR |
B |
G |
R |
Таблица дополнительных цветов и соответствующие им коды
Код |
B |
G |
R |
---|---|---|---|
0 |
синий |
зелёный |
красный |
1 |
чёрный |
чёрный |
чёрный |
2 |
фиолетовый |
жёлтый |
жёлтый |
3 |
красный |
красный |
зелёный |
4 |
голубой |
голубой |
фиолетовый |
5 |
зелёный |
синий |
синий |
6 |
белый |
белый |
белый |
7 |
жёлтый |
фиолетовый |
голубой |
После включения питания или сброса все биты порта УП равны 1. Благодаря инверторам D4.3, 4.4, 5.3, 5.4, 6.3, 6.4 элементы D2.1, 3.1, 1.2, 3.2, 1.3, 2.3 будут заперты и красный цвет пойдёт только на красную «пушку» телевизора, зелёный - на зелёную, синий - на синюю. Палитра экрана будет стандартной.
Если же в порт УП будут в некоторые биты занесены нули, цвет экрана изменится. Покажем это на примере.
Чтобы вместо красного цвета получить жёлтый, следует по адресу 177714 записать код «02». Бит BD01 установится в 0, инвертор D4.3 разрешит прохождение сигнала красного цвета и через элемент D1.2, т.е. на зелёную «пушку». Смешение красного и зелёного цветов даст жёлтый.
Этот способ обеспечивает восемь цветов. Для обогащения палитры можно через оставшиеся разряды порта УП управлять яркостью цветов.
Обращение к палитре осуществляется командой MOV #код,@#порт, т.е. занимает три слова.
Переназначив основные цвета на один основной или дополнительный, можно на цветном мониторе просматривать тексты в режиме 64 символа в строке. Код чёрно-белого текста, например, 666.
Лучше всего смотрятся программы, написанные с учётом применения данной приставки, но и уже существующие программы легко раскрасить в более естественные цвета.
С. СМИРНОВ
От редакции. Переделка заметно повысит нагрузку на блок питания БК, поэтому стоит, быть может, сделать для приставки собственный источник питания.
Редакции журнала хотелось бы знать мнения читателей о конструкциях, описания которых публикуются в «Клубе БК». Сообщите нам: какая конструкция вас заинтересовала? Можете ли вы самостоятельно собрать её или предпочли бы купить готовую? Описания каких конструкций вы хотели бы прочесть в журнале?
На конверте с ответами сделайте пометку «Хардвер БК».