Копирование без проблем

Сегодня, когда число написанных для БК программ приближается к тысяче, никому не приходит в голову самостоятельно составлять все программы, необходимые для работы или для развлечения, - проще воспользоваться готовыми. Мы уже обращались к вопросу о том, где брать эти программы (см.: Информатика и образование. 1988. № 6). И всё же сегодня основным способом по-прежнему остаётся перезапись программ у знакомых.

Стандартный способ - программа считывается с магнитофона в память компьютера, затем её переписывают на другую кассету. Если речь идёт о сотне программ, то копирование превращается в долгое, нудное мероприятие, где не обойтись без того, что какие-то программы окажутся пропущены или будут записаны с ошибками.

В последнее время всё чаще приходится сталкиваться с тем, что более опытные пользователи защищают свои программы от перезаписи, используя для этого различные ухищрения. Другие опытные программисты создают специальные программы-копировщики, которые позволяют переписывать даже те программы, которые снабжены защитой от перезаписи. В свою очередь появляются программы с ещё более сложной защитой, которые не поддаются типовым копировщикам.

Такая борьба программ, по-видимому, может развиваться ещё очень долго. В то же время для копирования математического обеспечения для БК необходим другой, более эффективный и универсальный способ. Такой, который бы не «обращал внимания» на тип копируемой программы - язык ли это программирования, игра или набор данных, а также не требовал бы вмешательства оператора. Иными словами, необходим копировщик-автомат. Если для обычного владельца БК такой автомат - это удобство и экономия времени, то для клуба БК он просто незаменим.

Такой автомат пытались создать ещё первые счастливые обладатели БК. Самый простой вариант - переписывать программы с одного магнитофона на другой, минуя БК. К сожалению, этот вариант, успешно работающий с магнитофонными вариантами программ, например «Коммодора 64», для БК в большинстве случаев не годится - суммарная погрешность двух аналоговых устройств, каковыми являются соединённые кассетные магнитофоны, вносит в программу ошибки. В то же время роль компьютера, который в данном случае является как бы промежуточным буферным звеном, восстанавливающим исходный цифровой сигнал из аналогового и препятствующим тем самым суммированию погрешностей магнитофонов, вполне может выполнить менее сложное устройство. Такое устройство - регенератор цифровых сигналов БК разработали энтузиасты БК из Львова П. Чирков и Р. Булыч. Они не только изготовили и испытали это устройство, но и решили поделиться этой важной информацией с читателями нашего журнала. Прежде чем передать им слово, скажем только, что клубы и кооперативы, которым приходится тиражировать программное обеспечение в большом объёме, смогут поэкспериментировать с этим или подобным устройством и попытаться достичь большей скорости качественного копирования программ. Надеемся, что экспериментаторы, первыми добившиеся успеха, напишут нам о своём способе, а мы сможем познакомить с ним всех читателей.

Основной элемент схемы - интегральный компаратор напряжения К521САЗ. Эта микросхема обладает двумя подходящими качествами - повышенной точностью, с которой оценивается входное напряжение, а также возможностью работы в режиме однополярного питания +5 В. Пятивольтовое питание позволяет отказаться от применения отдельного блока питания, подключая схему к БК или к одному из двух магнитофонов. По принципу работы устройство является аналогом известного в радиотехнике триггера Шмидта. Как и положено триггеру, триггер Шмидта имеет два устойчивых состояния - назовём их 0 и 1. Триггер обладает гистерезисом, говоря попросту: если плавно увеличивать напряжение на входе, то триггер не сразу изменит своё состояние, а лишь после того, как будет превышен некоторый пороговый уровень. И наоборот, если теперь начать столь же плавно уменьшать напряжение, то триггер Шмидта возвратится не сразу, а лишь после того, как напряжение уменьшится до другого порогового уровня. Разницу между двумя уровнями, когда происходит срабатывание триггера Шмидта, называют шириной петли гистерезиса. Благодаря наличию гистерезисной характеристики в регенераторе осуществляется сравнение входного переменного напряжения с двумя эталонными пороговыми значениями, установленными симметрично относительно нулевого уровня входного сигнала. В результате работы триггера Шмидта входной сигнал, поступающий с магнитофона, преобразуется в последовательность прямоугольных импульсов, т.е. приобретает необходимую исходную форму, которую он имел когда-то на выходе из БК. При необходимости ширину гистерезисной петли триггера можно регулировать с помощью резистора R9. Величина сопротивления этого резистора и ширина петли гистерезиса связаны друг с другом обратно пропорциональной зависимостью.

Настраивают регенератор с помощью осциллографа. На вход устройства подают тональный сигнал звуковой частоты, например, 1000 Гц и амплитудой 0,6 В. На выход схемы подключают осциллограф и, регулируя подстроечное сопротивление R6, добиваются одинакового двухстороннего ограничения синусоиды. Цель можно считать достигнутой, если синусоида превратится в последовательность симметричных прямоугольных импульсов, на языке радиотехников - в меандр. Вторая, и последняя, операция по настройке регенератора - это установка необходимой амплитуды выходного сигнала. Для регулировки служит переменный резистор R10, а установить нужно напряжение с амплитудой, равной примерно 0,15 В. Если регулятор уровня записи магнитофона предварительно выставлен по сигналу компьютера, то указанная амплитуда выходного сигнала схемы должна соответствовать номинальным показаниям индикатора уровня записи магнитофона или немного меньшим. Все вышеописанные операции по настройке схемы следует выполнять при разомкнутом положении переключателя SA1 (положение «чтение»).

 

Для копирования переключатель SA1 устанавливают в положение «копирование», вход схемы подключают к линейному выходу магнитофона, который работает с кассетой-оригиналом, а выход схемы - к гнезду второго магнитофона, предназначенного для подключения звукоснимателя. Первый магнитофон включают в режим воспроизведения, второй устанавливают в режим записи.

Схема получилась очень простой, поэтому размеры готового регенератора определяются в основном только размерами внешних установочных элементов: разъёмов, переменного сопротивления и переключателя. Регенератор получает питание от блока питания одного из магнитофонов (для этого в схему добавлен простейший параметрический стабилизатор напряжения R1, VD1). Стабилизатор позволяет подключать схему к источникам питания с напряжением 9-12 В, т.е. практически ко всем блокам питания современных переносных магнитофонов. Если магнитофон находится на гарантии и открывать его не хочется, регенератор можно подключить к блоку питания БК. Для этого точку А на схеме соединяют с контактами А, В (12), а «землю» схемы - с контактами А, В (2, 3) разъёма XT3. В этом случае параметрический стабилизатор не нужен, и цепочку R1, VD1 исключают.

С помощью регенератора можно копировать кассеты с программным обеспечением для БК целиком, независимо от того, что на них записано. Качество копии сравнимо с качеством копируемого оригинала, а нередко и лучше его. Копируя кассету, мы обычно подключаем на выход схемы кроме магнитофона также вход БК, который работает под управлением программы для каталогизации файлов. В этом случае БК играет роль своеобразного индикатора, на экране которого отображается вся необходимая информация о переписываемых файлах. Изготовление устройства не займёт много времени, а эффект от его использования оправдает все затраты времени на его настройку.

 

П. ЧИРКОВ, Р. БУЛЫЧ


 

Структурный Бейсик для БК-0010

Как известно, Бейсик - это очень старый язык со старой идеологией и, как следствие, даже в своих значительных расширениях (BASIC-MSX, BASICA IBM PC) обладает весьма серьёзными недостатками. Основные претензии, которые, как мне кажется, можно предъявить Бейсику, - это отсутствие подпрограмм с именами и параметрами и полная «антиструктурность». Эти недостатки приводят к тому, что программы уже длиной более 100 операторов становятся весьма туманными и слабоуправляемыми, а программы длиной более 500 операторов - вообще недоступными для понимания (а ведь это язык для непрофессионалов!) Таким образом, Бейсик, прекрасный язык для коротких программ, теряет почти все свои прелести при увеличении размеров программы.

Есть и ещё один аспект проблемы - учебный. Если посмотреть на процесс обучения информатике в школе, то, с одной стороны, там учат «хорошему программированию» на абстрактном языке, а с другой - тут же ломают «всё хорошее», переходя к реальному Бейсику.

Есть ли выход из ситуации? Есть, и, по-моему, очень простой. Нужно ввести в Бейсик средства для структурного программирования (что и делается во всём мире: все разработанные в последнее время версии Бейсика - структурные, с подпрограммами и параметрами). И сделать это можно не только путём создания специальных интерпретаторов и компиляторов, но и относительно несложной модификацией уже существующих. Одна из таких реализаций - для БК-0010 - и предлагается на суд читателей.

Структурный Бейсик для БК-0010 является расширением стандартного MSX-Бейсика, «прошитого» в ПЗУ; он реализуется программой SBASIC, работающей в ОЗУ в адресах 33600-37777. Загрузка и запуск программы SBASIC осуществляются оператором BLOAD "SBASIC",R.

Правила записи операторов в структурном Бейсике такие же, как в обычном, но можно записывать в строке несколько операторов, разделяя их двоеточием (кроме операторов, образующих структуры, - они должны быть единственными в своих строках). Ключевые слова операторов должны задаваться полностью, при этом все имена переменных, включая имена МО, FI и т.п., являются допустимыми. При выводе листинга на экран и на печать текст программы, независимо от исходной формы записи, автоматически форматируется отступами в соответствии со структурой программы. За образец управляющих структур взяты конструкции языка Ада, как наиболее последовательные и наглядные.

Процедуры в структурном Бейсике записываются в виде

PROC имя [параметры]
  [описания, комментарии]
BEGIN
  операторы
END PROC

Имя процедуры может состоять из произвольного количества символов, из которых значащими являются первые шесть. Имя может содержать русские и латинские буквы, цифры и знак подчёркивания. Передача значений параметрам процедуры осуществляется присваиванием этих значений параметрам при вызове процедуры. (Как и в обычном Бейсике, все переменные, в том числе и параметры процедуры, имеют областью действия весь текст.) Возврат из процедуры осуществляется по оператору END PROC или с помощью оператора RETURN. Вызов процедуры осуществляется в виде

имя процедуры [парам-знач[,парам-знач]...] 

Пример. Процедура, рисующая кольцо.

PROC КОЛЬЦО X, Y, R, Н, С
  ’X, Y - координаты, R - радиус
  ’Н - толщина, С - цвет
BEGIN
  CIRCLE (X,Y),R,С
  CIRCLE (X,Y),R+H,C
  PAINT @(0,R+H/2),C
END PROC

Возможные вызовы процедуры:

КОЛЬЦО Х=120,Y=100,R=60,Н=15,С=3
КОЛЬЦО R=20,Н=10,C=1   ’X,Y - старые 

Управляющая структура «условный выбор» является достаточно универсальной и соответствует как конструкции «если» алгоритмического языка, так и конструкции «выбор»:

IF условие THEN
  операторы
[ELSIF условие THEN
  операторы ...]
[ELSE
  операторы ]
END IF

Оператор ELSIF, означающий «иначе если», может быть записан в конструкции сколько угодно раз.

Примеры.

IF А>0 THEN
  С=А*5+В*3
  PRINT А,В,С
ELSE
  С=А*А+В/4
  D=10
END IF
 
IF R$="*" AND T$<>"*" THEN
  S=1:PR=1
ELSIF R$="/" THEN
  S=2:PR=1
ELSIF R$="+" THEN
  S=3:PR=2
ELSIF R0="-" THEN
  S=4:PR=2
ELSE
  PRINT "Ошибка в операции"
END IF

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

В структурном Бейсике определены три вида циклов: цикл «для», цикл «пока» и безусловный цикл. Цикл «для» аналогичен обычному циклу FOR NEXT (который также может использоваться).

FOR ... LOOP
   операторы
END LOOP
WHILE   условие LOOP
  операторы
END   LOOP
LOOP
  операторы
END LOOP

Безусловный цикл не имеет в заголовке условий выхода. Это или бесконечный цикл, выход из которого возможен лишь при нажатии клавиши (СТОП), либо внутри цикла должен быть записан оператор EXIT. Оператор условного или безусловного выхода из цикла EXIT имеет вид

EXIT [условие]

и может быть записан в теле любого из циклов, кроме FOR-NEXT. Оператор EXIT удобно использовать в тех случаях, когда условие выхода из цикла нельзя проверить в начале цикла; такая ситуация возникает, например, при чтении в цикле по INPUT или по READ.

Пример. Ввод чисел с клавиатуры и запись их в массив ММ. Конец ввода - буква «К».

FOR J=1 ТО 1000 LOOP
  INPUT "Число"; R$
  EXIT R$="K"
  MM(J)=VAL(R$)
END LOOP

Кроме структурных конструкций в структурном Бейсике имеются ещё некоторые расширения стандартного языка, заимствованные из других, более развитых версий Бейсика.

Кроме цветов раскраски 1-4 в операторе PAINT можно задавать определяемые программистом цвета 5-16 (см. также: ИНФО. 1989. № 2). Дополнительные цвета определяются матрицей 4*4 точки с помощью оператора

DEF Сn=(цццц, цццц, цццц, цццц), где n = 5 - 16 - определяемый номер цвета, а ц = 1 - 4 - цвет отдельной точки.

Пример. Раскрасить круг чередующимися в шахматном порядке красными и синими точками.

DEF С5=(1313, 3131, 1313, 3131)
CIRCLE (100, 100), 60, 1
PAINT @(0, 0), 5, 1

Для воспроизведения музыки служит оператор PLAY следующего формата PLAY «операнд [операнд] ...» Операнды в строке записываются непосредственно друг за другом или разделяются запятыми или пробелами. В качестве операндов могут быть записаны имена нот (D, R, М, F, S, L, С), пауза (Р), номера октав (О1-07; первой октаве соответствует 04), темп (Т1 - Т7), задание длительности звучания для нот, у которых длительность не задана явно (Н1 - Н32: от целой до 1/32, по умолчанию 1/4). Вслед за именем ноты может быть указано: длительность (1 - 32), диез (#), бемоль (-), увеличение длительности в 1,5 раза (.). В операторе PLAY можно записывать не только строковую константу, но и вообще строковое выражение.

Пример. Популярная мелодия.

PLAY "Т5 04 MDMDFMR Р О3 SSSL8C8 04 DDD"

С. ЗИЛЬБЕРШТЕЙН

 

Performed by © gid, 2012-2022.