Д. УСЕНКОВ
(Москва)
Музыкальный редактор для Бейсик-Вильнюса БК-0010.01
Внимательный пользователь БК-0010.01 легко может заметить, что зашитая в его ПЗУ Вильнюсская версия Бейсика очень напоминает широко распространённую версию MSX. Однако Бейсик-БК, под который создатели БК-0010 «щедро» отвели всего 20 кбайт «с хвостиком», в отличие от стандарта MSX заметно обделён возможностями. В Бейсике БК-0010 не реализован режим «отлова» прерываний клавиатуры в Бейсик-программе (оператор MSX-Бейсика КЕY(<n>)), нет возможности отлавливать в самой Бейсик-программе возникшие при её работе ошибки (ON ERROR GOTO...), не предусмотрено программное обслуживание джойстика и таймера да и вообще порта ввода-вывода, нет спрайтов, нет возможности вывода символов произвольных размеров, нет оператора PRINT USING, из-за чего не очень-то удобно выводить результаты расчётов на экран или на принтер в виде таблиц, и, что особенно скверно, совсем нет звуковых эффектов. Поэтому у пользователей БК нет другого выхода, как только писать дополнительные сервисные USR-подпрограммы для Бейсика (хорошо хоть такая возможность в Бейсике есть, в отличие от Фокала!).
Предлагаемая программа предоставляет возможность обеспечить некоторое музыкальное сопровождение для программ на Бейсике. Конечно, БК с её слабеньким пьезодинамиком не сравнится с оснащёнными несколькими аппаратно реализованными звуковыми каналами «большими» машинами, но, если использовать магнитофон в качестве усилителя (установив его в режим записи и «утопив» клавишу «Пауза») и смириться с несколько «металлическим» звуком (это вызвано тем, что получаемые звуковые колебания имеют не синусоидальную, а скорее прямоугольную форму), результат получается вполне сносный.
Предлагаемая программа реализации оператора PLAY, конечно же, сильно упрощена по сравнению со стандартом MSX. В ней более условны обозначения нот (таблица кодирования близка к принятой в программе SYST3, упрощено задание длительности и, конечно же, нет многоголосности и возможности работы с волновыми пакетами. Но для такого упрощения есть и свои, довольно веские основания. Ведь наша программа должна будет находиться в ОЗУ вместе с программой на Бейсике, а резервы оперативной памяти и так ограничены. Кроме того, программа - реализация PLAY должна быть «мобильной» и простой «в управлении», чтобы её можно было без особых трудностей вставлять практически в любую программу на Бейсике.
Текст программы в машинных кодах необходимо ввести в БК с начального адреса &О36000. О том, как это сделать, уже неоднократно писалось на страницах журналов по вычислительной технике. После того, как текст программы записан на магнитофон, её можно использовать в Бейсике. Для этого нужно выполнить следующую последовательность действий:
CLEAR 200,&O36000 ; BLOAD "<имя программы>" ; DEF USR<n>=&036000 (n - номер функции USR).
Теперь можно вызвать программу PLAY с помощью функции USR в виде: PRINT USR<n> («<текст, кодирующий последовательность нот>»), при этом текстовая константа или содержимое текстовой переменной после исполнения мелодии будет выведено на экран, или: A$=USR<n> («<текст>»), где А$ - некоторая «буферная» текстовая переменная, значение которой в данный момент не требуется сохранять неизменным (такой приём позволяет не выводить текст на экран).
Следует отметить, что в случае вызова функции в виде A$=USR(A$), где А$ кодирует нотный текст, содержимое А$ может оказаться испорченным, поэтому такой способ вызова нужно применять с осторожностью.
Кстати, можно заодно дать пользователям БК такой немудрёный совет. Чтобы всякий раз не подгружать коды подпрограммы PLAY (и прочие подпрограммы типа USR, а также спрайты и другие данные) перед запуском Бейсик-программы и одновременно избежать необходимости вставлять в неё множество операторов DATA с требуемыми кодами для того, чтобы сама Бейсик-программа заносила их в память операторами POKE, можно, после того, как все требуемые USR-функции и кодовые данные загружены и «подключены» к программе, записать всё вместе на магнитофон оператором BLOAD "<имя>",&О2000,&О40000. Такой файл занимает больше места, чем Бейсик-программа и кодовые «довески» к ней в отдельности умело применяя оператор CLEAR, иногда можно уменьшить размер записываемой области памяти, но зато сразу же после загрузки полученного таким образом. BIN-файла БК «автоматически» будет переведена в то же состояние, как и в момент записи вашей программы оператором BLOAD "<имя>", &О2000,&О40000 (вплоть до заданных оператором KEY значений программируемых ключей).
Немного о том, как кодировать мелодию. Текстовая строка, являющаяся аргументом функции USR, может содержать: латинские заглавные буквы от А до Z (обозначения нот и паузы), цифры от 0 до 5 (длительности) и точку <.> (задание длительности отдельной ноты в 1,5 раза большей, чем установлено для остальных нот). Прочие символы программой игнорируются. Длительность задаётся цифрой 0 - 5 по следующему правилу: 0 соответствует длительности 1/32, 1-1/16, ...5 - целая. Конечно, в данном случае такое соответствие несколько условно, поэтому нужную длительность лучше всего установить подбором в каждом отдельном случае. Первым символом каждой «нотной» строки должна быть цифра (по умолчанию длительность устанавливается равной 0). Раз установленная длительность влияет на все последующие ноты, пока не встретится другая цифра. Ноты кодируются заглавными латинскими буквами (каждой букве от А до Y соответствует одна из нот, как это показано в таблице), а пауза кодируется латинской буквой Z. Точка, стоящая после обозначения ноты, увеличивает её длительность в полтора раза.
ОКТАВА |
НОТА |
БУКВА |
---|---|---|
МАЛАЯ |
соль |
A |
соль# (ля&) |
B |
|
ля |
C |
|
ля# (си&) |
D |
|
си |
E |
|
ПЕРВАЯ |
до |
F |
до# (ре& ) |
G |
|
ре |
H |
|
ре# (ми&) |
I |
|
ми |
J |
|
фа |
K |
|
фа# (соль&) |
L |
|
соль |
M |
|
соль# (ля&) |
N |
|
ля |
O |
|
ля# (си&) |
P |
|
си |
Q |
|
ВТОРАЯ |
до |
R |
до#(ре&) |
S |
|
ре |
T |
|
ре# (ми&) |
U |
|
ми |
V |
|
фа |
W |
|
фа# (соль&) |
X |
|
соль |
Y |
|
|
пауза |
Z |
(В таблице знак ”#" означает “диез", а "&" - ''бемоль").
Текст подпрограммы в машинных кодах:
НАЧ. АДРЕС: 036000 ДЛИНА: 000520
010346 |
006103 |
103020 |
005067 |
000340 |
010046 |
010146 |
010246 |
010446 |
010546 |
004767 |
000022 |
004767 |
000202 |
012605 |
012604 |
012602 |
012601 |
012600 |
012603 |
000207 |
012502 |
011501 |
060102 |
012704 |
036520 |
112100 |
120027 |
000056 |
001452 |
120027 |
000060 |
002444 |
120027 |
000065 |
003005 |
162700 |
000060 |
010067 |
000232 |
000434 |
120027 |
000100 |
003431 |
120027 |
000133 |
002026 |
012705 |
036354 |
112503 |
120300 |
001402 |
005725 |
000773 |
020427 |
037776 |
002013 |
004767 |
000306 |
005767 |
000160 |
001404 |
016700 |
000152 |
006303 |
077002 |
010324 |
000401 |
104420 |
020102 |
002007 |
000722 |
014400 |
010003 |
006203 |
060300 |
010024 |
000767 |
000207 |
012705 |
036520 |
020504 |
002041 |
012501 |
012502 |
005701 |
001414 |
010103 |
052737 |
000100 |
177716 |
077301 |
010103 |
042737 |
000100 |
177716 |
077301 |
077213 |
000415 |
012701 |
000100 |
010103 |
000240 |
000240 |
000240 |
077301 |
010103 |
000240 |
000240 |
000240 |
077301 |
077213 |
012703 |
001000 |
077301 |
000735 |
000207 |
000003 |
177501 |
041007 |
004360 |
161503 |
042010 |
004726 |
145105 |
043011 |
005277 |
132107 |
044013 |
005652 |
120111 |
045014 |
006627 |
107513 |
046016 |
007207 |
077515 |
047017 |
010170 |
070517 |
050021 |
011153 |
062521 |
051023 |
012537 |
055123 |
052026 |
013525 |
050125 |
053031 |
015113 |
043527 |
054034 |
017103 |
037531 |
055040 |
012000 |
000000 |
112503 |
042703 |
177400 |
010324 |
112503 |
042703 |
177400 |
000207 |
000000 |
000000 |
КОНТРОЛЬНАЯ СУММА: 053426(8)
Некоторые подробности об алгоритме работы программы. Для обеспечения «непрерывности» исполнения мелодии в ней применён принцип компиляции нотного текста. Программа, обрабатывая заданный нотный текст, создаёт в оставшемся между ней и экраном объёме ОЗУ (адреса &О36520 - &O37776), используемом в качестве буфера, исполняемую последовательность задержек и длительностей, а затем отрабатывает созданную последовательность, «не отвлекаясь ни на что другое». Соответственно, никакую другую USR-подпрограмму или данные в указанную область ОЗУ заносить нельзя. Если же отведённого под буфер объёма ОЗУ для генерации мелодии недостаточно, будет выдано сообщение об ошибке 16. В этом случае кодирующую ноты текстовую строку нужно разделить на две или три меньших.
Литература:
- Кетков Ю.Л. «Диалог на языке Бейсик для мини- и микро-ЭВМ», «Наука», 1988, стр. 340
- Г. Бленд «Основы программирования на языке Бейсик в стандарте MSX», Москва, «Финансы и статистика», 1989.
Заключение рецензента
К большому сожалению пользователей БК всё, что Усенков Д.Ю. высказал о версии Бейсика БК-0010.01, верно. Но и это ещё не всё! Любой из достаточно опытных пользователей может ещё много чего добавить. Например, о работе со строками, массивами, графикой.
Усенков Д.Ю. частично устранил одну из несправедливостей в отличии Бейсика БК от Бейсика MSX, предложив программу в кодах, музифицирующую БК-0010.01. Программа вполне работоспособна. Правда, кодировка нот и длительностей не совсем удобна. Лучше было бы придерживаться того, как это реализовано в Бейсике MSX.
Жариков Л.Н.
На Бейсике с помощью операторов PLAY и SOUND легко составить простые мелодии. Однако все они одноголосные, т.е. в конкретный момент времени звучит лишь одна нота. Большинство же музыкальных произведений 4-5-голосные. Как составить программу, исполняющую одновременно до 5 нот с различной длительностью? Можно ли это выполнить на Бейсике?
Читатель М. Степницкий (г. Саранск)
Г. ПИМЕНОВ, Д. ПИМЕНОВ
(г. Мурманск)
Четырёхголосный музыкальный редактор на Бейсике для БК-0010.01 (БК-11М)
В отличие от многих зарубежных бытовых компьютеров БК имеет существенный недостаток: у него отсутствует музыкальный процессор. Его отсутствие в некоторой степени возмещалось программированием одноголосных мелодий через контроллер магнитофона (регистр 177716). Появились музыкальный Бейсик, Фокал, «Меломан» и множество других программ для создания и исполнения компьютерной музыки. Среди них выделяется программа «Клавесин» В. Савина - трёхголосный музыкальный редактор, но и он не смог удовлетворить взыскательного меломана. Сложную мелодию без искажений переложить не удаётся, да и три голоса явно недостаточно.
Нами был разработан четырёхголосный редактор на Бейсике. Имитацию музыкального процессора осуществляет программа в машинных кодах. Особенность этой программы в том, что управление регистром 177716 осуществляется встроенным таймером (адреса 177706, 177710, 177712). Перечислим некоторые достоинства редактора:
- возможность задания любых длительностей, встретившихся в нотном тексте (триоли, квинтоли и т.д.);
- выбор начального темпа в широких пределах;
- изменение темпа в соответствии с указаниями в нотном тексте;
- accelerando и ritenuto в точном соответствии с характером мелодии, что позволяет преодолеть основной недостаток известных музыкальных редакторов - монотонность звучания;
- задание штрихов исполнения (легато, стаккато, нон-легато) в точном соответствии с характером произведения;
- повторение любой части в любом месте (аналог реприз, но с большими возможностями);
- возможность выделения громкости звучания одного из голосов;
- настройка по камертону;
- изменение тональности в широких пределах;
- доступность изменения всех режимов для пользователя;
- эффективный код после компиляции набранного текста (6-10 байт на один аккорд).
Для программирования мелодий, исполняемых «музыкальным процессором», выбран самый простой путь - запись нотного текста в числовом виде. Все оттенки исполнения также кодируются числами.
1-52 - высота ноты. Число 1 соответствует ноте ми большой октавы, 2 - фа большой октавы, 3 - фа... и т.д. до соль третьей октавы;
53-60 - зарезервированы для возможного расширения диапазона;
61 - конец мелодии (с последующим нулём);
62-71 - длительность от 1/2 до 1/64;
72-80 - зарезервированы для задания недвухдольных размеров (1/6, 1/10, 1/12 и т.д.). Пример приведён в программе:
81-83 - ritenuto разной степени;
85-87 - accelerando;
84 - отмена;
88 - стаккато;
89 - нон-легато;
90 - легато;
91-99 - темп;
100-199 - выделение нотного блока повтора;
200-299 - вставка выделенного блока (см. нотный пример).
Текст набирается, начиная со строки 1000 через DATA. Все оттенки исполнения выставляются до аккорда и действуют до следующего переопределения или отмены. Текст заканчивается числами 61 и 0 - указание компилятору и процессору закончить работу. Если нот в аккорде меньше четырёх, он должен заканчиваться нулём. Пауза обозначается таким же образом, две одинаковые ноты звучат в унисон с увеличенной громкостью. Ноты в аккорде должны располагаться, начиная с самого низкого тона. Два одинаковых аккорда в режиме легато звучат как один с длительностью, равной сумме длительностей двух аккордов. Внимательный разбор приведённого примера поможет понять тонкости переложения. Выход из программы во время прослушивания через клавишу. Если темп и тональность вас не устраивают, их можно изменить по вашему вкусу (строки 80 и 100). На БК-11М из-за повышенной частоты темп и тональность будут выше (при одних и тех же исходных данных). По этой же причине и качество звучания на БК-11М лучше, чем на БК-0010.01.
Всех интересующихся компьютерной музыкой приглашаем переписываться: 183008, г. Мурманск, Молодежный проезд 6, кв. 33, Пименовым.
5 REM **четырехголосный музыкальный редактор** 6 REM ** БК-0010-01 ** 7 REM ** " Л Е Л Ь - 4.03" ** 8 REM ** Авторы: Пименов Г. Н. Пименов Д.Г. ** 9 REM ** 17.01.1992 г. Мурманск ** 70 DIM A%(80%),E%(20%) 80 A% (62%)=11000% 'начальный темп (максим. 37700) 90 K!=1.059463! 'коэффиц. темперированного строя 100 F!=256% 'тональность 110 FOR I%=1% TO 52% 'массив нот (от МИ большой 120 A%(I%)=-(F!+.2!) 'до СОЛЬ третьей октавы 130 F!=F!/K! 'через полтона) 140 NEXT I% 150 FOR I%=63% TO 71% STEP 2% 'массив стандартных 160 A%(I%)=A%(I%-1%)*.75! 'длительностей 170 A%(I%+1%)=A%(I%-1%)/2% '1/2,1/4.,1/4,1/8.,1/8, 180 NEXT I% '1/16.,1/16,1/32.,1/32,1/64. 190 A%(74%)=A%(62%)/3% 'Длит. 1/6 (триоль четвертными) 200 FOR I%=&O37400 TO &O37742 STEP 2% 210 READ M% 'считывание программы в кодах 220 POKE I%,M% 'в память (строки 232 - 264) 230 NEXT I% '"музыкальный процессор" 232 DATA &O12700,&O100,&O10610,&O10037,&O177660,405037,&O177706 234 DATA &O10706,&O62706,&O324,&O12737,&O20,&O177712 236 DATA &O20037,&O177662,&O1004,&O11006,&O5037,&O177660,&O207 238 DATA &O12767,&O177770,&O210,&O12767,&O177766,&O162,&O12767 240 DATA &O20115,&O142,&O12767,&O20215,&O154,&O12767,&O20315,&O166 242 DATA &O12767,&O20415,&O200,&O12601,&O1004,&O12767,&O437,&O106 244 DATA &O432,&O12602,&O1007,&O12767,&O427,&O112,&O12767,&O177772,&O76 246 DATA &O421,&O12603,&O1012,&O12767,&O417,&O110,&O12767,&O177770 248 DATA &O54,&O12767,&O177772,&O66,&O405,&O12604,&O1003,&O12767 250 DATA &O407,&O100,&O12605,&O1710,&O6105,&O5405,&O10537,&O102 252 DATA &O12705,&O177710,&O20115,&O101406,&O40037,&O177716 254 DATA &O66601,&O177766,&O50037,&O177716,&O20215,&O101406 256 DATA &O40037,&O177716,&O66602,&O177770,&O50037,&O177716 258 DATA &O20315,&O101406,&O40037,&O177716,&O66603,&O177772 260 DATA &O50037,&O177716,&O20415,&O101746,&O40037,&O177716 262 DATA &O66604,&O177774,&O50037,&O177716,&O23715,&O102 264 DATA &O101735,&O630 270 S%=&O37742 280 S%=S%+2% 'начальный адрес нотного блока 290 READ M% 300 IF M%<61% then 380 'считывание нот 310 IF M%>60% AND M%<81% THEN L%=A%(M%) 'длительность 320 IF M%>80% AND M%<88% THEN C!=1%+(M%-84%)/100% 'ritenuto и acceler. 330 IF M%>90% AND M%<100 THEN T!=1%+(M%-91%)/3% 'темп 340 IF M%=88% THEN R!=2% 'стаккато 350 IF M%=89% THEN R!=1.1! 'нон-легато 360 IF M%=90% THEN R!=1% 'легато 362 IF M%>99% AND M%<200% THEN E%(M%-100% )=S% 'метки ДЛЯ повтора 364 IF M%>199% THEN 522 'повтор по меткам 370 GOTO 290 380 POKE S%,A%(H%) 390 IF M%=0% THEN 420 400 H%=H%+1% 410 IF H%<>4% THEN 280 420 H%=0% 430 S%=S%+2% 440 POKE S%,L%/R!/T! 450 IF L%=0% THEN 540 ' запуск программы на исполнение 460 IF R!>1% THEN 490 'паузы для стаккато и нон-легато 470 T!=T!*C! 480 GOTO 280 490 POKE S%+2%,0% 500 POKE S%+4%,L%/T!-L%/T!/R! 510 S%=S%+4% 520 GOTO 470 522 FOR I%=E%(M%-200%) TO E%(M%-199%)-2% STEP 2% 524 POKE S%, PEEK (I%) 526 S%=S%+2% 528 NEXT I% 530 GOTO 290 540 DEF USR=&O37400 550 I%=USR(0%) 560 IF PEEK(&O177662)=64 THEN END ELSE 550'выход по клавише "@" 570 DATA 66,84,90,91 'начальная установка 1000 '***************** ЛАМБАДА ******************** 1001 DATA 11,,35,0,89,14,18,23,35,14,18,23,35,14,18,23,33 1002 DATA 103,90,11,,26,0,89,14,18,23,26,14,18,23,26,14,18 1003 DATA 23,30,90,11,,37,0,89,14,18,23,37,14,18,23,35,14,18,23 1004 DATA 33,90,11,,26,0,89,14,18,23,26,14,18,23,30,14,18,23,33 1005 DATA 90,4,,32,,68,89,16,20,23,32,16,20,23,30,66,16,20,23,28 1006 DATA 16,20,23,28,4,,28,,16,20,23,28,16,20,23,30,16,20,23,28 1007 DATA 104,90,6,,30,,13,18,21,30,6,,30,0,13,18,21,30,6,,0,89 1008 DATA 13,18,21,0,13,18,21,0,68,90,13,18,21,0,69,13,18,21,0 1009 DATA 70,37,,0,66,89,11,,35,,101,14,18,23,35,102,201,14,18 1010 DATA 23,33,203,90,68,6,,33,,6,,32,,66,13,18,21,30,6,30,0,13 1011 DATA 18,21,30,89,6,,0,101,13,18,21,0,102,201,201,105,90 1012 DATA 6,,37,,13,18,21,37,89,13,18,21,37,13,18,21,35,6,,33,,13 1013 DATA 18,21,32,90,13,18,21,30,89,13,18,21,30,2,,30,,14,18,21 1014 DATA 33,14,18,21,32,14,18,21,30,4,,28,,16,20,23,30,16,20,23 1015 DATA 25,16,20,23,,106,90,9,,25,,89,68,13,16,21,25,13,16,21,23 1016 DATA 66,13,16,21,25,68,16,21,33,37,35,38,0,9,,37,40,37,40,0 1017 DATA 13,16,21,0,35,38,0,13,16,21,0,33,37,0,66,16,21,37,40,205 1018 DATA 61,0
"Музыкальный процессор под микроскопом МИКР010"
;четырехголосие на БК 0010-01 с использованием ;встроенного таймера. ;********************************************************** ;* Мурманск 17-01-92 Пименов Г. Н. "ЛЕЛЬ 4.03" * ;********************************************************** MOV #100,R0 ;занести указатель стека MOV SP,(R0) ;в ячейку #100 MOV R0,@#177660 ;запретить прерывание от клавиатуры CLR @#177706 ; MOV PC,SP ;адрес начала ADD #324,SP ;мелодии M0: MOV #20,@#177712 ;запуск таймера CMP R0,@#177662 ;выход по клавише "@" BNE E1 ; E2: MOV (R0),SP ;восстан. стека CLR @#177660 ;разрешение прерывания RTS PC ; El: MOV #177770,N1+2 MOV #177766,N0+2 ;начальная модификация MOV #20115,A3 ;ячеек MOV #20215,A4 ; MOV #20315,A5 MOV #20415,A6 MOV (SP)+,R1 ;первую ноту в R1 BNE M1 ; MOV #437,A3 ;иначе модификация А3 (пауза) BR M4 ;и переход на М4 Ml: MOV (SP)+,R2 ;вторую ноту в R2 BNE M2 MOV #427,A4 ;иначе модификация А4, MOV #177772,N0+2 ;N0+2 BR M4 ; M2: MOV (SP)+,R3 ;третью ноту в R3 BNE M3 ; MOV #417,A5 ;модификация ячеек MOV #177770,N0+2 MOV #177772,N2+2 BR M4 M3: MOV (SP)+,R4 ;четвертую ноту в R4 BNE M4 ; MOV #407. A6 M4: MOV (SP)+,R5 ;длительность в R5 BEQ E2 ; M5: ROL R5 ;увеличить длительность NEG R5 ;в 2 раза и изменить знак MOV R5,@#102 MOV #177710,R5 ;счетчик таймера в R5 A3: CMP R1,(R5) ;сравнить 1-ю ноту со BLOS A4 ;счетчиком. Если содержимое BIC R0,@#177716 ;счетчика ниже,очистить 6-й NO: ADD -12(SP),R1 ;разряд,"восстановить" ноту BIS R0,@#177716 ;установить 6 разряд A4: CMP R2,(R5) ;сравнить 2-ю ноту BLOS A5 ; BIC R0,@#177716 ; N1: ADD -10(SP),R2 ; BIS R0,@#177716 ; A5: CMP R3,(R5) ;сравнить 3-ю ноту BLOS A6 ; BIC R0,@#177716 ; ADD -6(SP),R3 ; BIS R0.@#177716 ; A6: CMP R4,(R5) ;сравнить 4-ю ноту BLOS A3 ; BIC R0,@#177716 ; ADD -4(SP),R4 ; BIS R0,@#177716 ; A7: CMP @#102,(R5) ;проверка окончания BLOS A3 ;длительности BR M0 ;на считывание след. аккорда ;Начало четырехголосной мелодии
В. САМОЙЛОВ
(г. Санкт-Петербург)
Программирование мелодий на БК-0011М
В Бейсике БК-0011 был очень хороший оператор выдачи звука BEEP, с помощью которого школьники могли без труда создавать звуковое сопровождение для своих программ. БК-0011М снизошёл до БК-0010 и, кроме короткого звукового сигнала, ничего выдавать не хочет. Остаётся два выхода - музыкальный редактор или программа в кодах. О первом говорить нечего - он ещё только создаётся. Машинные коды заводчане постарались изменить, не сказав об этом. Однако эта информация полезна.
В машинных командах есть команда ЕМТ 101, не описанная в руководствах, которая выдаёт звуковой сигнал в соответствии с содержимым регистров R0 и R1, где R0 - длительность, а R1 - высота звука (для БК-0010, 0011 это ЕМТ 124). Значения операндов оператора BEEP у БК-0011 совпадают со значениями операндов команды ЕМТ 101.
Коды высоты звучания для нот первой октавы (восьмеричные/десятичные):
до |
- 644/420 |
до диез |
- 614/396 |
ре |
- 566/374 |
фа диез |
- 450/296 |
соль |
- 430/280 |
соль диез |
- 410/264 |
ре диез |
- 540/352 |
ми |
- 515/333 |
фа |
- 472/314 |
ля |
- 372/250 |
ля диез |
- 353/235 |
си |
- 336/225 |
Для получения кодов нот других октав необходимо учитывать, что они отличаются от соответствующих кодов нот соседних октав в 2,4 и т.д. раз.
Пример:
ля первой октавы - 250
ля второй октавы - 250*2=500
ля малой октавы - 250/2=125.
Код длительности звучания определяется исходя из того, что произведение кода длительности на код высоты для нот одной длительности должно быть одинаково, в зависимости от заданного темпа.
Пример:
1/8 ля первой октавы - высота - 250, длительность - 160
250*160=40000
1/8 си первой октавы - высота - 222, длительность -
40000/222=180
1/8 до первой октавы - высота - 420, длительность -
40000/420=95.
Подпрограмма, воспроизводящая мелодию, состоит из трёх частей:
- подпрограмма воспроизведения;
- коды длительностей нот;
- коды высот нот.
Первая часть загружается один раз и вызывается по мере необходимости. Вторую и третью части, а также содержимое ячейки &О1012 изменяют в зависимости от мелодии.
Подпрограмму воспроизведения легче записать в мониторе, выйдя в него из Бейсика по команде MON, заполнить ячейки, вернуться в Бейсик, нажав клавишу Р (лат.), определить её как функцию на машинном языке с помощью оператора DEF USR=&01000 и вызывать по мере необходимости с помощью A=USR(A).
Подпрограмма воспроизведения в машинных кодах:
1000/12703 |
- запись ячейки, с которой начинаются коды длительностей (1100) |
1002/1100 |
|
1004/12704 |
- запись ячейки, с которой начинаются коды высот (1200) |
1006/1200 |
|
1010/12702 |
- запись количества нот (12) в R2 |
1012/12 |
|
1014/12300 |
- запись кода длительности в R0 |
1016/12401 |
- запись кода высоты в R1 |
1020/104101 |
- команда воспроизведения звука |
1022/77204 |
- ветвление на ячейке 1014, если R2><0 |
1024/2 |
- возврат из подпрограммы. |
Подпрограмма воспроизведения на Бейсике:
10 DATA &O12700,&O1100,&O12704,&O1200,&O12702,&O12,&O12300,&O12401 20 DATA &O104101, &O77204,&O2 30 FOR I%=&O1000 TO &O1024 ST 2% 40 READ T% 30 POKE I%,T% 60 NEXT 70 DEF USR=&O1000 80 ' 90 ' Коды длительностей для "Подмосковные вечера 100 ' 110 DATA 160,190,241,190,448,190,180 482,428,640 120 FOR I%=&O1100 TO &O1122 ST 2% 130 READ T% 140 POKE I%,T% 150 NEXT 160 ' 170 ' Коды высот 180 ' 190 DATA 250,210,166,210,187,210,222,166,187,250 260 FOR I%=&O1200 TO &O1222 ST 2% 210 READ T% 220 POKE I%,T% 230 NEXT 240 ' Воспроизведение мелодии 250 A=USR(A)
Отключение звука при помощи команды ЕМТ 31.
Команда ЕМТ 31 отключает звук при нажатии на клавишу, если в регистре R0 находится 100 (восьмеричное). Включение звука команды ЕМТ 31 осуществляет при R0 отличном от 100, т.е. используется шестой разряд.
Программа отключения звука в кодах: 1000/12700 - запись в R0 кода 100 1002/100 1004/104031 - отключение звука 1006/2 возврат из подпрограммы
на Бейсике:
10 DATA &O12700,&O100,&O104031,&O2 20 FOR X%=&O1000 TO &O1006 ST 2% 30 READ I% 40 POKE X%,I% 50 NEXT 60 DEF USR=&O1000 70 A=USR(A)
В. МАСЛОВ
(г. Калуга)
Музыка на Форте
Язык Форт удобное средство для создания музыкальных программ. Для примера рассмотрим реализацию простейшего языка для записи мелодий. Эта же программа, написанная на Паскале или Си, займёт у вас около 50 строк.
Единственный оператор, который генерирует звук, это SOUND. Но в нём не совсем удобные параметры.
Первый параметр слова SOUND равен количеству полуволн, а второй - длине полуволны. Это не удобно при вводе данных, поэтому введём слово MODIF, которое будет пересчитывать длительности нот в зависимости от длины волны (частоты).
: TEMPO 32000; (Константа темпа) : MODIF DUP ROT*TEMPO10ROT*/,,; Теперь можно вводить: ОК 16 100 MODIF SOUND
Здесь 16 - длительность, 100 - частота. Длительности нот будем обозначать целыми числами:
1 - целая
2 - половинная
4 - восьмая
16 - ... и т.д.
Данная запись удобна и для дробных длительностей. Так триоль четвертой ноты будет равна:
1/4/3=1/12, т.е. в нашей записи 12.
С помощью слова TONE определяем названия нот и их длительности. Для этого перед TONE ставится частота, а после TONE обозначение ноты.
Например:
100 TONE С : TONE CREATE, DOEC>@ MODIF;
После слова DOES> определяется действие слова, регламентированного текущим определением, т.е. словом TONE. Иначе говоря, мы определяем действие введённых нот. Они при исполнении будут выполнять команду MODIF, т.е. пересчитывать частоту и длительность под SOUND.
PLAY - последнее слово. Оно получает в стеке адрес массива нот и проигрывает их с помощью SOUND.
Пример:
OK CREATE М 8 С 8 D 8 Е 8 GO, OK М PLAY
Попробуйте усовершенствовать язык, введя дополнительные удобства при определении мелодии. Например, следующим образом:
OK MUSIC...ENDM
Ниже приводится полный текст музыкального языка.
Экран 1 0 FORGET К 1 : К ; 2 : TEMPO 32000 ; 3 : MODIF DUP ROT * TEMPO 10 ROT */ , , ; 4 : PLAY BEGIN DUP @ DUP 5 WHILE SWAP 2+ DUP @ ROT SWAP SOUND 2+ REPEAT 2DROP ; 6 : TONE CREATE , DOES> @ MODIF ; 7 : .. HERE 2- DUP 2- @ , @ , ; 8 9 250 TONE C 223 TONE D 198 TONE E 187 TONE F 167 TONE G 10 149 TONE A 140 TONE H 132 TONE В 125 TONE 2C 11 12 13 14 15
P. РАХМАНКУЛОВ
(г. Ташкент)
Звуковые эффекты на БК-0010
Для создания звуковых эффектов в программах на Ассемблере можно воспользоваться следующей программой. Текст приводится на Турбо ассемблере.
SOUND: |
MOV |
@(R5)+,R0 |
|
MOV |
@(R5)+,R1 |
|
MOV |
@(R5)+,R2 |
|
MOV |
#177716,R3 |
1: |
MOV |
#300,(R3) |
|
MOV |
R0,R4 |
2: |
SOB |
R4,2 |
|
MOV |
#200,(R3) |
|
MOV |
R1,R4 |
3: |
SOB |
R4,3 |
|
SUB |
D1,R1 |
|
SUB |
D2,R1 |
|
SOB |
R2,1 |
|
RTS |
R5 |
T1: |
.WORD |
1000 |
T2: |
.WORD |
1000 |
T3: |
.WORD |
700 |
D1: |
.WORD |
1 |
D2: |
.WORD |
1 |
Меняя параметры T1, Т2, Т3, D1, D2, а также константы, засылаемые в регистр 177716, можно подобрать желаемые звуковые эффекты. Вызвать подпрограмму можно следующим образом:
JSR R5,SOUND .WORD T1 .WORD T2 .WORD T3
Программу можно упростить, если принять Т1-Т2 и D1-D2. Возможности уменьшатся, но останутся достаточно широкими. В этом случае программу можно переписать следующим образом:
SOUND: |
MOV |
@(R5)+,R0 |
|
MOV |
@(R5)+,R2 |
|
MOV |
@(R5)+,R1 |
|
MOV |
#177716,R3 |
1: |
MOV |
#300,(R3) |
|
MOV |
R0,R4 |
2: |
SOB |
R4,2 |
|
MOV |
#200,(R3) |
|
MOV |
R0,R4 |
3: |
SOB |
R4,3 |
|
SUB |
R1,R0 |
|
SOB |
R2,1 |
|
RTS |
R5 |
Обращаться к ней
JSR R5,SOUND .WORD T1 .WORD T3 .WORD D1
T1 - условная начальная высота,
Т3 - условная длительность,
D1 - условная скорость изменения тона:
- если D1 больше 0, то тон звука повышается;
- если D1 меньше 0, то тон звука понижается;
- если D1 равна 0, то тон звука не изменяется.
После небольшой переделки эту программу можно использовать в программах на Бейсике. Но в программах на Бейсике и подпрограмме в кодах передаётся только один аргумент. В этом случае можно поступить, например, так: подобрать параметры для 5-10 или более понравившихся вам звуков и в программе обращаться по номеру. Соответствующая программа на Бейсике выглядит так:
10 DATA &O12703,&O37570,&O11501,&O20127,0,&O1403,&O62703,&O6, &O77103,&O4767,2,&0207,&O12300,&O12302,&O12301,&O12703, &O177716,&O12713,&O300,&O10004,&O77401,&O12713,&O200,&O10004, &O77401,&O160100,&O77212,&O207 20 DATA &O400,&O50,0,&O10,&O5000,0,&O50,&O1000, 0,&O2000,&O2000,1,1,&O1000,&O177777,&O100, &O1000,0,&O1000,&O400,0,&O3000,&O1000,2, &O1000,&O200,4,1,&O100,&O177777,1,&O300, &O177770,&O300,&O1000,0,&O70,&O1000,0,&O150, &O1000,0 30 DATA &O200,&O1000,0,&O200,&O500,0,&O400,&O300, 0,&O500,&O300,0,&O600,&O300,0,&O700, &O300,0,&O1000,&O200,0 40 FOR I%=1 TO 91 50 READ A% 60 POKE &O37476+I%*2%,A% 70 NEXT 90 DEF USR=&037500 90 FOR I%=0 TO 20 100 A%=USR(I%) 110 NEXT 120 END
Оператор 10 - машинный код программы
20-30 - параметры для подпрограммы по 3 - Т1, Т3, D1 для I% от 0 до 20
40-70 - занесение программы и данных в память с адреса 37500 90-110 - прослушивание звуков.
При желании, конечно, можно изменить параметры. Можно менять параметры непосредственно во время выполнения программы (оператором POKE). Можно подобрать параметры для того, чтобы сыграть мелодию. Нетрудно также переписать программу для задания параметров в виде: нач. частота, кон. частота, шаг, и т.д.
А. ИВАШИННИКОВ
(г. Арсеньев, Приморский край)
О создании музыкального оформления
1000А 012737, 000140, 177706, 012737, 000040, 177712, 012700, 000004, 012701, 002000, 005341, 003402, 077003, 000770, 013711, 177710, 052737, 000100, 177716, 042737, 000100, 177716, 000757.
Эта простенькая программа принесёт приятные минуты и начинающим, и умудрённым пользователям БК.
После набора представленных 23 машинных слов музыкальной программы запустите её с адреса 1000 Оценив эффект, попробуйте экспериментировать. В приведённом фрагменте ячейка 1016 имеет значение 4, что формирует 4 голоса (4 звуковых псевдоканала). Диапазон значений этой ячейки 1 - 340. Изменяя содержимое ячейки 1002, можно управлять звуковой октавой эффектов. Наконец, ячейка 1010 может принимать значения 20, 40, 100, 200, 60, 140, 300, 160, 340, 360. Фактически эта программа позволяет исследовать работу трёх регистров не задокументированного таймера БК. Регистр 177706 определяет диапазон счётчика 177710, а регистр 177712 управляет скоростью работы таймера.
Известно, что БК имеет лишь один голос, что явно обедняет его возможности по сравнению с музыкальными возможностями многоканальных компьютеров. Быть может, эта программа подвигнет заинтересованных на создание многоголосых мелодий для БК. При этом не потребуется никаких аппаратных доработок компьютера.
Заключение рецензента
Предлагаемая программа использует особенности работы трёх регистров БК, позволяющих организовать таймер. Работа с этими регистрами, имеющими восьмеричные адреса 177710, 177706, 177712, достаточно подробно описана в журнале «Информатика и образование», № 1, 1990.
Музыкальные возможности программы автор, конечно, сильно преувеличил, но с помощью этой программы можно создать несколько необычных звуковых эффектов. Например, эффект скачущего теннисного шарика достигается при содержимом ячеек программы 1002, 1010, 1016, равном 2000, 160, 5 соответственно. Программа загружается с адреса 1000. Для создания эффекта «заточки ножа» необходимо в ячейки по указанным адресам поместить 600, 60, 4 соответственно. Упорным поиском можно подобрать и другие звуки. Созданные эффекты можно затем включить в прикладные или игровые программы.
Жариков Л.Н.
Д. ПОПОВ
(Москва)
Говорящий «Апогей»
Мне захотелось услышать голос моего персонального компьютера «Апогей БК-01» (для справки: к семейству компьютеров БК не относится, он ближе к «Микроше» и «Синклеру»). Для этого я написал небольшую программу.
Она состоит из двух частей - записывающей и воспроизводящей, занимает в памяти 112 байт и позволяет записывать фонограммы длительностью порядка 75-80 с.
С помощью директивы монитора М или какого-либо отладчика введите в память с адреса 0000Н коды программы. Проверьте частичные и полную контрольные суммы, исправьте ошибки, которые, возможно, возникли при вводе.
Подключите к вашему магнитофону микрофон, нажмите клавиши «Пауза», «Пуск» и «Запись». Запустите программу командой G и говорите в микрофон до появления на экране стандартного приглашения монитора.
Для воспроизведения звука запустите программу командой G3, не выключая магнитофон.
Длительность фонограммы можно увеличить за счёт ухудшения качества звука, увеличив содержимое ячейки 005ЕН.
Следует помнить, что фонограмма занимает всю оперативную память.
Листинг программы воспроизведения человеческого голоса:
0000: |
C3 |
2B |
00 |
31 |
6F |
00 |
21 |
70 |
00 |
11 |
FF |
E0 |
46 |
0E |
08 |
78 |
- |
6FE3 |
0010: |
17 |
47 |
3E |
01 |
17 |
32 |
02 |
ED |
CD |
5C |
00 |
E5 |
El |
0D |
C2 |
OF |
- |
98A2 |
0020: |
00 |
23 |
CD |
56 |
00 |
C2 |
0C |
00 |
C3 |
75 |
F8 |
31 |
6F |
00 |
21 |
70 |
- |
OA75 |
0030: |
00 |
11 |
FF |
E0 |
01 |
08 |
00 |
3A |
02 |
ED |
E6 |
10 |
17 |
17 |
17 |
17 |
- |
6174 |
0040: |
78 |
17 |
47 |
CD |
5C |
00 |
0D |
C2 |
37 |
00 |
70 |
23 |
CD |
56 |
00 |
C2 |
- |
BF7D |
0050: |
34 |
00 |
C3 |
75 |
F8 |
00 |
7C |
BA |
C0 |
7D |
B8 |
C9 |
C5 |
06 |
08 |
05 |
- |
3533 |
0060: |
C2 |
5F |
00 |
C1 |
C9 |
20 |
28 |
43 |
29 |
20 |
50 |
56 |
41 |
58 |
20 |
00 |
- |
E2AE |
Полная контрольная сумма 21FCH.
* * *
В заключение немного о специфических особенностях использования Бейсика «Микрон» на компьютере «Апогей».
Оператор BEEP даёт очень тихий звук. Для получения более громкого звука и сложных звуковых эффектов целесообразнее обращаться к таймеру КР580ВИ53. По адресам ЕС00Н, EC01H, ЕС02Н находятся ячейки счётчиков таймера. Загружая в них числа, можно получать звуковые сигналы, непрерывно воспроизводимые параллельно работе центрального процессора. По адресу ЕС03Н находится управляющий регистр таймера.
Сформировать звуковой сигнал можно с помощью последовательности команд:
POKE-5120+СН, F:POKE-5120+СН, F,
где CH (0..2) - номер звукового канала (счётчика таймера), F (0..255) - число, обратно пропорциональное частоте звука.
«Выключается» звук (по всем каналам) другой последовательностью команд:
POKE-5117,62:POKE-5117,126:POKE-5117,190.
Аналогично можно управлять звуком и в программах на языке Ассемблер.
Приём, используемый в ПК «Микроша» (обращение к контроллеру клавиатуры для управления счётчиком 2 таймера), на ПК «Апогей» не проходит.
В. ЛУКИЧЕВ
Звуковое оформление программ
УКНЦ имеет схему генерации звукового сигнала, и вы можете программным путём воспроизводить звуки нужной вам частоты. Для этого необходимо использовать системный регистр управления 177716 (магистраль ПП). В этом регистре биты с 8 по 12 отвечают за прохождение соответствующих звуковых частот, а бит 7 - за включение/выключение сигнала. Сбрасывая и устанавливая бит 7, можно программное промодулировать звук необходимой частоты. Тактовая частота программируемого таймера также влияет на частоту извлекаемого звука, при выключенном таймере звука не будет. Программа заставляет УКНЦ воспроизвести несложный звуковой ряд:
MOV PC,R0 ; предшествующая часть программы ADD #STRING-.,R0 1$: TSTB (R0) ; получить в R0 адрес строки с нотами BEQ 33$ JSR PC, WAITS ; ещё не конец ? ; если да, то переход на метку OUT JSR PC,SOUND ; найти ноту в таблице и получить в INC R0 ; R2 задержку соответствующую этой ноте BR 1$ ; проиграть эту ноту WAITS: ; увеличить указатель MOV PC,R1 ; возврат на начало цикла ADD #TBL-.,R1 ; подпрограмма получения задержки 10$: CMPB (R1)+,(R0) ; получить в R1 адрес таблицы нот BEQ 11$ TSTB (R1)+ ; сравнить BR 10$ ; она - переход на метку 11$ 11$: MOVB (R1),R2 ; не она - возврат на метку 10$ BIC #177400, R2 RTS PC ; поместить задержку в R2 SOUND: ; очистить старший байт R2 MOV #100.,R1 ; возврат из подпрограммы 10$: BIS #200, @#177716 ; подпрограмма воспроизведения ноты MOV R2,R3 ; продолжительность звучания ноты SOB R3,. ; включение звука BIC #200,@#177716 ; задержку из R2 в R3 MOV R2,R3 ; пустой цикл SOB R3,. ; выключение звука SOB Rl,10$ ; задержку из R2 в R3 RTS PC ; пустой цикл OUT: ... ; если R1 не равен 0,то на метку 10$ ; возврат из подпрограммы STRING: .ASCIZ "CDEFGAH12345" ; продолжение программы .EVEN TBL: .BYTE 'C,177 .BYTE 'D,161 .BYTE 'E,145 .BYTE 'F,137 .BYTE 'G,125 .BYTE 'A,113 .BYTE 'H,103 .BYTE '1,77 .BYTE '2,70 .BYTE '3,62 .BYTE '4,57 .BYTE '5,52 .BYTE ' ,47
Ф. НОВИКОВ (г. Ярославль)
Подпрограмма в ПЗУ
Немногие пользователи БК знают, что в ПЗУ монитора зашита подпрограмма звуковых эффектов. При её работе после нажатия клавиши раздаётся булькающий звук. Занеся во 2-й и 3-й регистры и обратившись к ней по адресу 102062, можно получить интересные эффекты.
Например
MOV #10,R2 MOV #200,R3 JSR PC,@#102062
Содержимое R2 должно быть всегда меньше содержимого R3!
Подобную программу можно написать на Бейсике:
10 DATA &O12700,&O10,&O12703,&O200,&O4737,&O102062,&O207 20 FOR I=&O37400 TO &O37414 STEP 2 30 READ A 40 POKE I,A 50 NEXT I 60 DEF USR=&O37400 70 A=USR(A)
В. НИКОЛАЕВ (г. Климовск)
Рёв БК
По мнению некоторых пользователей, существенным недостатком БК-0010.01 является малая мощность встроенного звукогенератора. Действительно, разве можно в игровой программе считать выстрелами едва слышные потрескивания, а взрывами - жалкие попискивания, доносящиеся из компьютера?
Между тем этот недостаток легко устраним, так как при выполнении программы сигнал звуковой частоты поступает не только на звукогенератор, но и на разъём МГ (ножка 5) компьютера. Следовательно, для усиления звука нужно лишь усилить электронный сигнал с этой ножки каким-либо внешним устройством и акустически его излучить.
В простейшем случае таким устройством может быть магнитофон, используемый для загрузки программ. Если он позволяет прослушивать (с усилением) записываемую фонограмму, включите его (кабелем, входящим в комплект БК) на запись от разъёма МГ. Естественно, кассету с программами предварительно надо заменить какой-либо ненужной кассетой. Используйте режим «стоп-ленты» (если он предусмотрен в магнитофоне), что устранит износ ленты и головок.
Если этот вариант усиления звука для вас неосуществим, вспомните, что режим «усиление внешнего сигнала» имеется во многих других устройствах бытовой электроники. Например, как правило, он имеется в проигрывателях.
Наконец, можно смастерить самодельный усилитель с динамиком [1], используя для питания +5 В с блока питания компьютера, или завести электронный сигнал в тракт звуковой частоты телевизора, который чаще всего используется в качестве монитора. Однако эти варианты сложны и автором не опробовались.
Итак, попробуйте усилить звуковые эффекты выполняемых программ! Возможно, это увеличит их привлекательность для пользователя.
Литература
- Янцев В. Минимум деталей и полчаса времени - и в ваших руках усилитель низкой частоты // Юный техник. - 1991.- № 9.- С. 16.
Д. УСЕНКОВ
От БК-0010 до БК-0011М
Первая информация о БК-0011 и о других перспективных моделях (например, БК-0100) появилась в журнале «Наука и жизнь» в 1987 году (№ 8, с. 33). Тогда о БК-0011 говорилось, как о разрабатываемой модели и приводились данные скорее желаемые, чем реальные. Большую ясность в этот вопрос внёс журнал «Вычислительная техника и её применение» № 7 за 1988 год. В опубликованной там статье приводилось более подробное описание, однако оно по сути касалось только технических данных компьютера. Позже в журналах приводились лишь отрывочные, часто противоречивые сведения о БК-0011.
В одном из журналов кто-то из авторов посетовал, что БК-0011, мол, никак не совместима с БК-0010. Однако на самом деле БК-0011 совместима с БК-0010 не только через Бейсик (что довольно легко сделать даже на ЭВМ с разными процессорами), но и по машинным командам. Форматы записи на магнитную ленту у БК-0011 и БК-0010 аналогичны. Это позволяет нормально загружать и запускать на выполнение практически любую программу, будь то в кодах, или на Бейсике, написанную для БК-0010. В последнее время в печати появились статьи с описанием средств, совмещающих БК-0010 с БК-0011. Учитывая это, можно не излагать здесь довольно объёмистое описание БК-0011, а ограничиться описанием только различий между БК-0010 и БК-0011.
Технические характеристики
БК-0011 существует в пяти различных исполнениях с различными назначением, комплектностью и стоимостью.
- «Бытовой компьютер»: в комплект входят информационно-вычислительный блок (клавиатура и процессорная электроника компьютера; для краткости будем далее называть этот блок просто «клавиатура»), блок питания, блок МСТД, отдельный блок контроллера принтера, кассета с программами на Бейсике (кстати, всё с теми же, что и для БК-0010), соединительные шнуры и руководство для пользователя (описание системы, монитора и Бейсика).
- «РМУ (рабочее место ученика)»: клавиатура, блок питания, черно-белый монитор, контроллер локальной сети (внешний блок), кабели и руководство пользователя.
- Базовое РМП (рабочее место преподавателя): клавиатура, блок питания, блок МСТД, черно-белый монитор, принтер, сдвоенный дисковод, контроллер принтера, дискеты с ОС БК-0011, Бейсиком, Паскалем, Микроассемблером и чистые, кабели и полный комплект документации по всем перечисленным языкам, а также по системе, устройству и системному программированию для БК-0011 В этом же комплекте прилагаются все принадлежности, необходимые для создания на базе БК-0011 компьютерного класса.
- «Дополнительное РМП»: клавиатура, блок питания, МСТД, контроллеры принтера и дисковода, кабели, кассета с программами, дискеты с ОС БК-0011 и чистые, набор документации.
- «Профессиональная ЭВМ»: клавиатура, блок питания, МСТД, черно-белый монитор, принтер, сдвоенный дисковод, контроллеры принтера и дисковода, кассета с программами, дискеты с ОС БК-0011 и чистые, кабели и полный комплект документации
ПРИМЕЧАНИЕ: в комплектах везде указан черно-белый монитор, но это не означает, что к БК-0011 нельзя подключить цветной монитор типа, используемого для БК-0010 32ВТЦ201. Вообще же вся информация о подключении БК-0010 к телевизору верна и для БК-0011.
Краткие технические характеристики БК-0011:
тип и разрядность процессора |
- К1801ВМ1, 16-разрядный |
быстродействие, тыс. оп/с |
- 500 |
объём ОЗУ, кБ |
- 128 |
(в том числе экранного) |
- 32 (2 страницы) |
объём ПЗУ, кБ |
- 40 |
(плюс внешнее МСТД) |
- 8 |
ёмкость диска |
- от 400 кБ до 800 кБ, в зависимости от дисковода |
организация памяти |
- страничная, по 16 кБ |
строк текста на экране |
- 25 (1 служебная) |
точек в строке |
- 512, 256 или 128 |
количество клавиш клавиатуры |
- 74 |
скорость обмена по локальной сети |
- 57600 Бод |
скорость записи на магнитофон |
- 1200 Бод |
потребляемая мощность |
- около 40 Вт |
масса |
- не более 5 кг |
(данные о массе и потребляемой мощности приведены для базового комплекта в исполнении 1).
Внешний вид блоков клавиатуры, МСТД и питания не отличается от таковых для БК-0010. Расположение, количество и прорисовка клавиш клавиатуры полностью аналогичны БК-0010.01.
Монитор
Адресное пространство БК-0011 составляет, как и в БК-0010, 64 кБ (оно ограничено разрядностью адресной шины процессора) Однако, в отличие от БК-0010, здесь к одним и тем же областям адресов адресного пространства (оно называется виртуальным) могут быть подключены несколько различных «реальных» блоков ОЗУ, один из которых «явный», а остальные - «скрытые». По умолчанию процессор относит указанный адрес к ячейкам «явного» блока ОЗУ (эти блоки называются страницами памяти и могут включать в себя более мелкие «подблоки» - окна памяти), но возможен вызов подпрограмм и данных непосредственно со скрытых страниц, а также обмен данными между любыми страницами. Распределение адресного пространства БК-0011 показано на рис. 1.
Рис. 1
На экран обычно отводится две страницы ОЗУ, но видна на экране монитора в текущий момент только одна из них. Возможен и такой вариант: пока одна из страниц демонстрируется на экране, во вторую, невидимую страницу, производится вывод новой информации.
В отличие от БК-0010, где при включении питания сразу же запускается один из языков программирования, в БК-0011 при включении начинает работать Монитор. Функции Монитора БК-0011 по сравнению с Монитором БК-0010 значительно расширены, и, по сути, включают в себя возможности режима «ТС». Из МСТД монитора пользователь может при необходимости запустить транслятор Бейсика (с адреса 100000) или тесты (с адреса 160000). Набор тестов также значительно расширен по сравнению с БК-0010.
Тест 1 - тест диспетчера страниц.
Тест 2 - тест ОЗУ (постраничный/общий, циклический/однократный).
Тест 3 - тест ПЗУ.
Тест 4 - тест клавиатуры.
Тест 5 - тест порта ввода-вывода.
Тест 6 - тест вывода символов на экран.
Тест 7 - тест магнитофона
Тест 8 - тест палитр (вывод палитры по заданному номеру).
Тест 9 - тест печати на принтер.
Монитор БК-0011 выводит при работе символ - приглашение «@», а при возникновении ошибки (отсутствие регистра, неподключенная страница и т.д.) выводится признак ошибки «?». Монитор позволяет выполнить следующие операции:
<хххххх>/ |
- открыть ячейку с адресом хххххх (вывод на экран восьмеричного содержания ячейки) |
<хххххх>\ |
- открыть байт |
R<x>/ |
- открыть регистр (<х> - номер регистра 0-7 или «S» для чтения PSW) |
/ и \ |
- открыть текущую ячейку (последнюю открытую) |
<ВВОД> |
- закрыть ячейку, байт или регистр. Если было введено новое числовое значение, оно переписывается в ячейку, байт или регистр |
↓ |
- закрыть ячейку и открыть следующую по порядку |
↑ |
- закрыть ячейку и открыть предыдущую |
→ |
- закрыть ячейку и открыть следующую, адрес которой вычисляется по формуле: <Адрес > = < Текущий адрес > + 2+ + <Содержимое прежней ячейки, возможно, новое> |
← |
- то же, но адрес вычисляется по формуле: <Адрес> = <Текущий адрес> + <Младший байт ячейки >*2+2 |
@ |
- то же, но адрес равен содержимому текущей ячейки |
N;МС |
- отобразить страницу N с адреса, указанного в аргументе М |
<хххххх> L |
- загрузить файл с магнитофона по адресу хххххх или, если он не указан, по адресу в заголовке файла. Формат записи идентичен БК-0010, но для программ с неё нужно задавать имя (на запрос NAME) в виде: В:<имя> |
<область>;U |
- вывести в файл на магнитофон содержимое памяти. <Область> конструкция вида: <хххххх>-<УУУУУУ> (хххххх - начальный адрес, уууууу - конечный адрес) или <хххххх>+<УУУУУУ> (здесь уууууу - длина в байтах) |
<1/0>М |
- включить/выключить двигатель магнитофона |
<хххххх>G |
- запуск с адреса хххххх, который при этом помещается в ячейку 40 (USERPC) |
Р |
- продолжить выполнение с места останова по СТОП |
ШАГ |
- выполнить одну команду и вернуться в Монитор |
В мониторе также действуют все управляющие коды - клавиши сдвижки - раздвижки, «стрелки» и т.п.
Системные регистры
Изменения в системных регистрах БК-0011 по сравнению с БК-0010 следующие:
- регистр данных клавиатуры (@#177662): добавлены биты, доступные для
записи:
15 - разрешение прерывания по СТОП (0-разрешение)
14 - прерывание от встроенного таймера
48,5 Гц
8-11 - номер палитры (по таблице)
- системный регистр (@#177716). Добавлены биты:
по чтению
8-15 - адрес начального пуска (140000)
7 - наличие арифметического сопроцессора (1/0 - нет/есть)
2 - признак записи в системный регистр по записи
11 - размещение записи в системный регистр
12-14 и 8-10 - номера страниц, подключаемых в адреса 40000-100000 и 100000-140000 (по таблице)
по записи
7 - управление двигателем магнитофона (1/0 - стоп/пуск)
0, 1, 3 и 4-разрешение работы ПЗУ 8, 9, 10 и 11 (соответствующие страницы ОЗУ отключаются)
2 - подключение буфера экрана (1/0 - экран1/экран0)
Примечание: экранным буферам 1 и 2 соответствуют страницы ОЗУ 5 и 6.
- Регистры дисковода:
@ #177130 - регистр состояния;
@ #177132 - регистр данных.
- регистр принтера: при подключённом к порту (@#177714) блоке контроллера
принтера регистр порта преобразуется в регистр принтера и имеет формат:
бит 14 - бит строба;
бит 0-7 - байт данных.
Векторы прерываний
В БК-0011 предусмотрены следующие адреса прерываний:
4 - прерывание по СТОП;
10 - резервная команда;
14 - прерывание по Т-разряду;
20 - прерывание по ЮТ;
24 - прерывание по аварии питания;
30 - прерывание по ЕМТ;
34 - прерывание по TRAP;
60 - прерывание по верхнему регистру клавиатуры;
100 - прерывание от встроенного таймера;
270 - прерывание пользователя;
274 - прерывание по нижнему регистру клавиатуры;
300 - от блока контроллера локальной сети.
Адреса 40-56 и 64-66 зарезервированы для совместимости с БК-0010
Системные драйверы
В БК-0011 введено большое число новых ЕМТ-функций. Одни из них выполняют необходимые при постраничной организации памяти действия по перезаписи данных из страницы в страницу и вызову подпрограмм из скрытых страниц, другие позволяют разнообразить оформление программ (вывод звука, рисование окружностей), третьи позволяют программировать перехват прерываний и ошибок, не вдаваясь в подробности описания системы и векторов прерывания.
Кроме того, улучшились возможности ЕМТ-функций, имеющихся в БК-0010. Так теперь данные для ЕМТ-функций передаются не через регистры, как было в БК-0010, а через стек. Только регистр R0 по- прежнему служит для передачи отдельных данных.
ЕМТ-функции, которыми может пользоваться программист БК-0011:
ЕМТ0 |
- выход из программы пользователя в Монитор; |
ЕМТ10 |
- чтение строки с клавиатуры с возможностью экранного редактирования (можно вводить в состав строк и управляющие символы, как в режиме РЕД Фокала БК-0010); |
ЕМТ40 - ЕМТ50 |
-зарезервированы для совместимости с БК-0010; |
ЕМТ52 |
- подключение страницы с заданным номером: |
ЕМТ54 |
- вызов подпрограммы из скрытой страницы (JSR); |
ЕМТ56 |
- переход на скрытую страницу (JMP); |
ЕМТ60 |
- чтение из скрытой страницы; |
ЕМТ62 |
- запись байта в скрытую страницу; |
ЕМТ64 |
- установка параметров драйвера монитора (обращение к данной функции заменяет последовательности управляющих символов типа ИНВ, ПОДЧ и т.п.); |
ЕМТ66 |
- экранное редактирование уже имеющейся строки, для чего строка выводится на экран; |
ЕМТ72 |
- чтение статуса страницы (подключена или не подключена; если подключена, то по какому адресу); |
ЕМТ74 |
- переключение буферов экрана (указание показываемого буфера и буфера для вывода информации); |
ЕМТ100 |
- установка режима клавиатуры (указание таблицы кодировки, отключение «щелчка» при нажатии, задание адреса подпрограммы обработки прерывания от клавиатуры); |
ЕМТ102 |
- ввод кода символа с клавиатуры без ожидания (INKEY); |
ЕМТ104 |
- чтение цвета экрана; |
ЕМТ110 |
- построчный сдвиг экрана по вертикали (SCROLLING); |
ЕМТ112 |
- перехват вектора прерывания @#4; |
ЕМТ114 |
- перехват ошибки «недопустимое ЕМТ»; |
ЕМТ116 |
- чтение Состояния драйвера клавиатуры; |
ЕМТ120 |
-запись слова в скрытую страницу; |
ЕМТ124 |
- выдача звука с заданной длительностью и частотой; |
ЕМТ130 |
- рисование дуг и окружностей. |
Кроме того, есть возможность вызова отдельных системных подпрограмм обычным путём - с помощью оператора JSR:
@#160000 |
- автоматическая загрузка ОС БК-0011 с диска (ОС сначала отыскивается на диске 0, а затем на дисках 1, 2 и 3); |
@#160002 |
- загрузка данных с заданного диска (0, 1, 2 или 3); |
@#160004 |
- чтение/запись по номеру логического блока; |
@#160006 |
- то же с явным указанием дорожки и сектора; |
@#160010 |
- инициализация рабочей области (буфера 60 байт, назначение которого аналогично назначению буфера для ЕМТ36); |
@#160012 |
- форматирование заданной дорожки. |
Бейсик
Версия Бейсика, зашитая в ПЗУ БК-0011, почти полностью аналогична версии Бейсика БК-0010. Отличия состоят лишь в добавлении нескольких полезных операторов и функций, в том числе тех, которые не были реализованы на БК-0010, в изменениях, связанных с постраничной организацией памяти и в переименовании некоторых операторов «на заграничный лад» - для совместимой версии MSX
Рассмотрим основные отличия Бейсика БК-0010 от Бейсика БК-0011:
- в связи с увеличением объёма памяти, отпущенного под транслятор, появилась возможность вывода расширенных сообщений об ошибке. Теперь вместо номера ошибки выводится краткая текстовая подсказка, как это сделано в Фокале БК-0010;
- команда MONIT переименована в SYSTEM;
- в связи с большим объёмом памяти и с возможностью установки нескольких пользовательских ПЗУ появилась возможность использовать команду CALL, которая в Бейсике БК-0010 присутствует явно больше «для проформы»;
- добавлена весьма полезная текстовая функция INSTR - поиск начала вхождения подстроки в текстовую строку,
- в операторах DEF USR, BLOAD, BSAVE, POKE, PEEK, OUT и INP в список аргументов добавлено указание номера страницы ОЗУ;
- добавлена команда SCREEN, позволяющая переключать буферы экрана, указывая номер экрана для вывода информации и номер экрана, демонстрируемого на мониторе (пример: SCREEN 1 SHOW 0), а также разрешающая/запрещающая переключение страницы ОЗУ к экрану (SCREEN 1 ON - разрешение, SCREEN 0 OFF - запрет); страницы ОЗУ, отключённые от экрана, могут быть использованы для программы пользователя;
- улучшены возможности оператора BEEP - теперь можно задавать длительность и частоту звука,
- реализована функция SPS, генерирующая указанное число пробелов при выводе на экран или принтер;
- реализован оператор MERGE, позволяющий формировать программы на Бейсике из стандартных блоков, записанных на магнитофон;
- появилась очень полезная при вызове USR-подпрограмм функция VARPTR, позволяющая определить адрес содержимого указанной переменной в ОЗУ БК, что позволяет передавать большее количество данных в подпрограмму USR.
- появилась новая возможность в операторе DIM: если размерность массива записывать не в круглых, а в квадратных скобках, то будет создан виртуальный массив, расположенный в скрытых страницах. Это позволит хранить большие объёмы данных, но время обращения к такому массиву больше, чем к обычному.
К сожалению, создатели БК-0011 приготовили пользователям этого компьютера неприятный сюрприз: в отдельных версиях Бейсика не реализованы операторы TRON и TROFF, рисование прямоугольников оператором LINE с аргументом В и WF и, что особенно плохо, не реализован оператор DRAW. Кроме того, время компиляции оказалось в 4-5 раз большим, чем в БК-0010. Это связано с тем, что Бейсик при компиляции постоянно переключает страницы, размещая данные в памяти наиболее «удобным» способом, а также хранит часть данных в скрытых страницах ОЗУ с большим временем доступа.
ОС БК-0011
Владельцы БК-0011 в комплекте с дисководами могут воспользоваться возможностями операционной системы ОС БК-0011. Использование ОС Бейсике позволяет дополнить стандартную версию Бейсика некоторыми полезными утилитами. При запуске Бейсика в среде ОС БК-0011 на экран один за другим выводятся вопросы: включать или не включать ту или иную утилиту в набор функций Бейсика. Это позволяет набрать необходимый набор функций, не расходуя память на остальные функции, не столь нужные. В качестве примеров функций операционной системы ОС БК 0011 можно привести следующие:
- комбинация клавиш СУ+С позволяет прерывать выполнение программы на Бейсике. Двукратное нажатие вызывает немедленное прерывание, а однократное срабатывает «чуть позже», когда в программе встречается оператор ввода данных. Отдельная команда позволяет разрешить или блокировать данное использование комбинации СУ+С;
- назначение устройства (DEVICE) позволяет установить устройство - адресат для передачи информации (терминал, дисковод или принтер);
- установка длины телевизионной строки,
- команда ABORT - оператор Бейсика, аналогичный NEW, но в отличие от него, позволяющий указать БК, нужно ли стереть данную программу из памяти, или её следует оставить;
- разрешение/запрет паузы по СУ+О - аналог применяемой в БК-0010 комбинации СУ + @ и клавиши PAUSE IBM-подобных ЭВМ,
- в набор Бейсика могут быть включены трансцендентные арифметические функции SIN, COS, EXP и т.д.
Запуск программ в машинных кодах для БК-0010 и БК-0010.01 на БК-0011
Практически любая программа в машинных кодах, работающая на БК-0010 или БК-0010.01 (кроме некоторых программ, в которых применены нестандартные приёмы программирования) может быть запущена на выполнение на БК-0011. Для этого нужно считать в ОЗУ БК-0011 с магнитной ленты заранее записанный туда Монитор БК-0010 (с незначительными изменениями, например, если вы захотите при работе с программами пользоваться исключительно дисководами БК-0011, нужно заменить адрес подпрограммы - драйвера магнитофона для ЕМТ36 в таблице адресов ЕМТ на адрес драйвера дисковода). Записать Монитор БК-0010 на магнитную ленту можно на БК-0010 или БК-0010.01, например, с помощью команды М3 режима ТС (указав адрес начала для записи 100000(8) и соответствующую длину). После этого записанный Монитор загружается в ОЗУ БК-0011 командой L её Монитора (имя задаётся с параметром В:) и при необходимости дорабатывается. После этого нужно запустить Монитор БК-0010 на исполнение как обычную программу в кодах для БК-0011 и тогда БК-0011... превращается в БК-0010, ибо они полностью совместимы по командам процессора, и разница между ними только в программной поддержке. Далее можно работать с БК-0011 точно так же, как и с БК-0010. Кстати говоря, в новой модификации БК-0011М этот недостаток уже устранён, и БК-0011М программно совместима с БК-0010 уже с самого начала.
Приложения
1. Таблица кодировки параметров страниц ОЗУ
бит: |
14 (10) |
13 (9) |
12 (8) |
номер страницы |
---|---|---|---|---|
|
1 |
1 |
0 |
страница 0 (0-40 000) |
|
0 |
0 |
0 |
страница 1 |
|
0 |
1 |
0 |
страница 2 |
|
0 |
1 |
1 |
страница 3 |
|
1 |
0 |
0 |
страница 4 |
|
0 |
0 |
1 |
страница 5 (экран 0) |
|
1 |
1 |
1 |
страница 6 (экран 1) |
|
1 |
0 |
1 |
страница 7 (системная) |
Страницы 8 и 9 ПЗУ зарезервированы под Бейсик (страница 8 и адреса 100000-117777 страницы 9) и драйвер-мониторную систему.
2. Кодирование символов в БК-0011.
БК-0011 позволяет работать с различными таблицами символов КОИ8, КОИ7-Н0, КОИ7-Н1 и смешанной таблицей КОИ. Имеется также отдельная таблица для символов полуграфики, приближенных к прорисовке символов на IBM. Обе таблицы независимо друг от друга могут быть программно заменены на таблицы пользователя. Символы с кодами &Н0-&Н20 и &НС0-&HFF соответствуют символам с этими кодами на БК-0010, а символы полуграфики (коды &НА0-&HBF) получили новую прорисовку (рис. 2).
Рис. 2
3. Цветовые палитры БК-0011
номер палитры |
код точки |
|||
---|---|---|---|---|
00 |
01 |
10 |
11 |
|
0 |
ч ё р н ы й |
зелёный |
синий |
красный |
1 |
сиреневый |
жёлтый |
красный |
|
2 |
синий |
голубой |
сиреневый |
|
3 |
голубой |
зелёный |
жёлтый |
|
4 |
голубой |
сиреневый |
белый |
|
5 |
белый |
белый |
белый |
|
6 |
красно-коричневый |
темно-красный |
красный |
|
7 |
светло-зелёный |
салатовый |
жёлтый |
|
8 |
фиолетово-синий |
фиолетовый |
сиреневый |
|
9 |
фиолетово-синий |
светло-зелёный |
красно-коричневый |
|
10 |
фиолетовый |
салатовый |
темно-красный |
|
11 |
жёлтый |
голубой |
красный |
|
12 |
зелёный |
красный |
голубой |
|
13 |
жёлтый |
голубой |
белый |
|
14 |
зелёный |
жёлтый |
белый |
|
15 |
зелёный |
голубой |
белый |
А. САЯПИН, В. ВОРМСБЕХЕР (Москва)
Знакомьтесь: БК-0011М
В компьютере БК-0011 оказалось много недостатков, самыми крупными из которых обладала ДМС. Поэтому были начаты работы по его модернизации. В результате скоординированных усилий разработчиков программного и аппаратного обеспечения был создан новый компьютер, который получил название БК-0011М.
В аппаратную часть БК-0011М введено раздельное управление памятью и магнитофоном, добавлены устройство управления палитрами, блокировка клавиши «СТОП» и некоторые другие изменения. Наиболее крупным достоинством БК-0011М служит системное ПЗУ, которое получило название «Базовая операционная система» (БОС). Возможности БОС по сравнению с ДМС намного шире: существенно увеличена скорость вывода на экран, расширен набор графических примитивов и системных функций, добавлен режим вывода 80 знаков в строке, управляющие коды экрана и клавиатуры совместимы с терминалом VT-52 и ЭВМ серии ДВК с дополнительными возможностями инверсии, подчёркивания, управления цветами, палитрами, шириной и высотой символов, сдвижки/раздвижки строки и экрана. Бейсик БК-0011М стал легко совместимым с БК-0010 с добавлением новых возможностей и исправлением некоторых ошибок.
Эти программные и аппаратные решения сделали возможным использование программ, разработанных как для БК-0010, так и для ДВК и УКНЦ.
Эволюция операционной системы
В основу ОС БК-11 легла популярная операционная система RT-11 фирмы DEC. Эта ОС известна у нас пользователям ЭВМ серии СМ, ДВК, «Электроника» под названиями РАФОС, ФОДОС и др. Однако исходная версия РТ-11 не могла работать на БК-0011 из-за отсутствия регистров вывода на терминал, нестандартных регистров клавиатуры и неработоспособности драйвера НГМД в составе ДМС. Поэтому потребовалась разработка нового драйвера нижнего уровня, помещённого в ПЗУ контроллера НГМД, системного драйвера для RT-11 и адаптация самой системы. На базе версии 5.2 RТ-11 была создана ОС БК-11 версии 1.0. Драйвер НГМД BY по формату дискеты был сделан совместимым с драйвером MY от ДВК и драйвером MZ УКНЦ. С появлением БК-0011М версия 1.0 была переделана в 1.1. Была также создана новая версия драйвера для ПЗУ контроллера НГМД. Версия 1.1 имела один существенный недостаток: ввод с клавиатуры производился, минуя БОС, что делало коды функциональных клавиш несовместимыми с ДВК.
В версии 2.1 этот недостаток был устранён. Кроме того, был ускорен вывод на экран символьных строк за счёт использования соответствующей функции БОС. Эта версия имела ограниченное распространение.
В версии 2.3 были введены значительные усовершенствования: реализованы два режима работы - стандартный и виртуальный, в которых все части ОС и файл свопинга хранятся в скрытых страницах ОЗУ, что существенно сокращает число обращений к системному диску и ускоряет работу. Кроме того, был усовершенствован драйвер диска: введено отключение двигателя дисковода по таймеру, а также добавлен ряд SET-параметров для настройки драйвера на конкретный привод (количество дорожек, время перемещения с дорожки на дорожку, дорожка прекоррекции и др.). В драйвер были включены программы форматирования и проверки дискет, что позволило отказаться от программы TESTBY. Также были добавлены драйверы для настройки режимов вывода на экран и ввода с клавиатуры.
Наконец, в 1991 г. была создана ОС БК-11 версии 4.0 на базе версии 5.4 RТ-11. Версия 4.0 унаследовала все нововведения 2.3, был добавлен автоповтор клавиатуры, устранены ошибки и. усовершенствованы некоторые драйверы. От RТ-11 был унаследован новый символьный отладчик, позволяющий работать с ассемблерными мнемониками и таблицей символов пользовательской программы, и добавлены новые возможности для разработки драйверов. Распространение и поддержку ОС БК-11 версии 4.0 осуществляет НПКП «ИнтерСервер».
Обзор системного и прикладного ПО
Программная совместимость ОС и формата гибких дисков позволяет использовать всё программное обеспечение, разработанное для ДВК и УКНЦ. Ограничения, накладываемые на программы:
- программа должна работать в текстовом режиме, пользуясь средствами ОС, и не обращаться к регистрам внешних устройств;
- для управления экраном и распознавания функциональных клавиш программа должна использовать управляющие последовательности терминала VT-52 фирмы DEC. (Заметим, что с этим терминалом совместимы дисплей 15-ИЭ-00-13, контроллеры КСМ и КЦГД в одном из режимов, а также УКНЦ.);
- программа не должна быть слишком большой, так как объём одновременно доступного ОЗУ в БК-0011М на 8 Кбайт меньше.
Этим ограничениям удовлетворяют почти все системы программирования (MACRO, С, PASCAL, FORTRAN, Modula-2), экранные редакторы (EDIK, К52, SCREEN) и многие другие программы.
Рассмотрим далее некоторые особенности программ, специально разработанных для БК-0011М.
Операционная оболочка Inter Commander
Аналог популярной оболочки MS-DOS Norton Commander. Позволяет в простой и удобной форме, не используя команд ОС, просматривать каталоги устройств, запускать, редактировать, копировать, переименовывать и удалять файлы и группы файлов, а также вводить, редактировать и выполнять команды операционной системы. Кроме того, можно настроить функции просмотра, редактирования и запуска в зависимости от типа файла. Программа имеет встроенную подсказку с описанием функциональных клавиш. Каталоги программ в панелях могут быть отсортированы по различным параметрам. Имеется иерархическое меню, настраиваемое пользователем. Работа с программой возможна с использованием клавиатуры или манипулятора «мышь» (УВК-01).
Экранный редактор EdikM
Аналог известного на ДВК редактора EDIK. Помимо полного набора функций EDIK’a, обладает следующими возможностями:
- ускоренная работа с экраном за счёт использования функций БОС;
- переключение ширины символов внутри редактора;
- автоматическое выравнивание при переходе на следующую строку;
- введена дополнительная область текста, с которой можно производить операции выделения инверсным цветом, копирования, перемещения, удаления и записи во внешний файл без ограничения размера этой области;
- ввод в текст символов псевдографики.
Исполняющая система Exe10plus
Позволяет эмулировать среду БК-0010 и даёт возможность:
- исполнения программ для БК-0010 в машинных кодах, на Фокале и Бейсике;
- переназначения ввода/вывода с магнитофона на диск;
- загрузки исполняемых программ на место ПЗУ Фокала;
- возврата в ОС с сохранением экрана и режимов работы ОС
Программа РСВК копирования дискет IBM PC
Программа позволяет считывать, записывать и инициализировать на БК-0011М дискеты в формате IBM PC. Пользовательский интерфейс программы выполнен в стиле Norton Commander. Программа поддерживает форматы 320К, 720К и 800К, используемые на IBM PC. При копировании может производиться перекодировка текстовых файлов из кодировки БК-0011М в альтернативную кодировку, принятую на IBM PC, и обратно. Имеется также и программа для IBM PC, позволяющая копировать дискеты БК-0011М.
Манипулятор «мышь» (УВК-01)
Драйвер манипулятора выполнен в виде драйвера ОС и имеет широкий набор функций для прикладных программ. Возможно использование его в режиме эмуляции клавиатуры (например, в экранных редакторах).
Графический редактор Paint11M
Это развитие известного на БК-0010 редактора Paint (авт. Бакерин). Работает под управлением ОС БК-11. Созданный рисунок может записываться и считываться с диска, а также печататься на Epson-совместимых принтерах, работающих в стандартах ИРПР и Centronics (например, Robotron или МС-6313). Достигнута идентичность изображения рисунка на экране рисунку на листе бумаги, увеличены размеры перемещаемых и копируемых областей.
Программа просмотра баз данных
Программа позволяет просматривать файлы баз данных типа DBF (dBASE, FoxBase, Clipper и др.). Предусмотрены режимы просмотра по записям и в виде таблицы, выдача справочной информации о базе данных и полях, переход по номеру записи, поиск подстроки, вывод на печать всей базы или выбранных записей.
Заканчивается разработка редактора баз данных.
Программа печати текстов Kprint
Kprint позволяет устанавливать режим и шрифт печати любого Epson-совместимого принтера, выбирать файл для печати в режиме меню. Возможно также динамическое управление режимами и шрифтами благодаря набору управляющих символов, встраиваемых в текст.
Библиотеки графики и функций БОС
Объектные библиотеки для языков программирования Си и Паскаль предоставляют набор функций для доступа к возможностям БОС по выводу на экран текстовой и графической информации, управления расширенной памятью и др.
Сетевые возможности
Отличительной чертой компьютеров БК-0011 и БК-0011М является наличие в их аппаратуре контроллеров локальной сети с достаточно высокими характеристиками, что выгодно отличает их от других компьютеров аналогичного класса.
Первоначально для БК-0011 и БК-0011М был предложен контроллер локальной сети (КЛС), аналогичный контроллеру ПЭВМ УКНЦ. В дальнейшем не нашёл применения из-за отсутствия программного обеспечения.
Другим решением стал контроллер моноканальной сети (КМК). Благодаря этому сеть на базе компьютеров БК-0011 и БК-0011М обладает низкой себестоимостью, достаточной надёжностью и высокими техническими характеристиками. Проводящий средой служит витая пара проводов, дальность связи - до 300 м, скорость передачи данных - 75 КБод. Одновременно в сети могут работать до 30 компьютеров. Программное обеспечение нижнего уровня выполнено по модели OSI и прошито в ПЗУ, расположенном в дополнительных страницах памяти. Им обеспечивается обмен данными между любыми абонентами сети в широковещательном и избирательном режимах.
Штатное программное обеспечение более высокого уровня не позволяет использовать преимущества этой сети. Поставляемая заводом-изготовителем программа DIALOG не обладает удобным современным интерфейсом для пользователя, имеет ограниченное число функций, не позволяют просто расширять систему. Кроме того, весьма неудачна работа в сети Бейсик-системы, приведшая к несовместимости к КУВТ-86, и кроме того, невозможно получать тексты программ и файлы данных на центральной ПЭВМ. DIALOG не обеспечивает выполнения на периферийных станциях программ для БК-0010 и программ операционной системы RT-11, что сильно ограничивает область применения сети.
Перечисленные недостатки инициировали создание более совершенного программного обеспечения.
Для сети разработана система Exe10Net для класса на базе БК-0011. Она позволяла выполнять на периферийных ПЭВМ программы БК-0010 в машинных кодах, а также запускать интерпретатор языка Focal. Система не позволяла вести обмен данными, но тем не менее скрасила практически полное отсутствие программ для БК-0011.
Затем система Exe10Net была перенесена на класс УКНЦ-01.01, и дальнейшее развитие систем этой линии происходило исключительно на БК-0011M. С введением обмена данными периферийных ПЭВМ с дисководом центральной машины появилась сетевая система SPRUT1. Простота работы в режиме меню и обмен данными позволяли применять в классе широко распространённые программы для БК-0010.
Следующим шагом стала разработка принципиально новой по возможностям и интерфейсу системы SPRUT2. В первую очередь была введена возможность выполнения на периферийных ПЭВМ программ самого БК-0011М. Совершенно изменён интерфейс пользователя: работа ведётся в двухпанельном меню в стиле Norton Commander, что в корне отличает систему от подобных ей и делает работу очень удобной, отвечающей современным требованиям. Система SPRUT2 поддерживает работу в сети загружаемого Бейсика, совместимого с Бейсиком БК-0010, который обеспечивает обмен текстами программ и файлами данных с диском центральной ПЭВМ. Кроме того, в сети выполняются все программы БК-0010 в машинных кодах и на Фокале.
Весьма важно, что сетевая система SPRUT2 рассчитана на работу в качестве управляющей системы в сети на базе компьютеров БК-0011М с центральной ПЭВМ типа
IBM PC. В системе также предусмотрено значительное расширение выполняемых функций и задач сети без потери совместимости с предыдущими версиями системы.
Наконец, недавно появившаяся система SPRUT3 создаёт на периферийных компьютерах среду операционной системы ОС БК-11 и позволяет работать со всем спектром программ для БК-0010 и БК-0011М (например, с редакторами Lexic, EDASP, EdikM, Paint11M и др.), а также с большим количеством программ от УКНЦ и ДВК (в том числе с трансляторами MACRO, PASCAL, С, FORTRAN).
Перспективы развития
Какую же нишу может занять БК-0011М в отечественном компьютерном рынке? Она определяется его относительно невысокой ценой и достаточно большими профессиональными возможностями. Перечислим области наиболее рационального использования этой ПЭВМ.
В малом бизнесе как в качестве персональной ЭВМ, так и в качестве станции в составе локальной сети с IBM PC. Успех в этой сфере будет определяться количеством и качеством прикладного программного обеспечения: текстовых процессоров, электронных таблиц, баз данных и др.
В составе учебных компьютерных классов. Успех в этой сфере определяется возможностью использования большого количества учебных и игровых программ, разработанных для БК-0010 и КУВТ-86. Начинают появляться и учебные программы и системы, созданные специально для классов БК-0011М. Применение в качестве центральной ЭВМ в классе IBM PC повышает надёжность работы класса и даёт возможность постепенного перехода обучения школьников на новый уровень.
Использование копировщика РСВК позволяет обмениваться текстовыми файлами и базами данных с IBM PC. В перспективе подключение к телефонной сети через модем даст возможность связи с другими БК-0011М, IBM PC, электронными досками объявлений и глобальными системами компьютерной связи.
НПКП «ИнтерСервер» продолжает работу над усовершенствованием программ для БК-0011М и разработкой новых. В программе работ новые версии операционной системы, оболочки InterCommander, программы РСВК и других. Будут продолжены работы по развитию локальной сети IBM PC - БК-0011М. Ведутся работы по подключению модема и «винчестерского» диска.
Важным направлением является разработка системы управления базами данных, совместимой по файлам q dBASE, для дисковой и сетевой конфигураций. В сетевой конфигурации СУБД будет функционировать по модели «клиент - сервер» с прямым доступом к файлам баз данных на жёстком диске IBM PC, что позволит оптимально распределить функции между IBM PC и БК-0011М, снизить нагрузку на сеть и в конечном счёте достичь высокой эффективности многопользовательской работы. Реализация прикладных задач на основе сетевой базы данных позволит создавать недорогие многопользовательские АРМы для применения в малом бизнесе, на складах, в магазинах и пр.
«ИнтерСервер» приглашает к сотрудничеству разработчиков программного обеспечения и аппаратных средств для объединения усилий по расширению области применения БК-0011М.
А. КОНЮШЕНКО
(г. Минск)
Система машинных команд БК-0010
Рассказывать о недостатках БК-0010 можно очень долго. К этим недостаткам относится и никуда негодная документация, хотя у большинства владельцев и такой нет. Создаётся впечатление, что программисты, пишущие программы для БК, не желают раскрывать свои профессиональные тайны широкому кругу владельцев этих машин. Например, известный комплект программ Ю. Зальцмана СИСТЕМА долгие годы ходил в кассетном варианте и только в прошлом году наконец появился в печати. Существуют и другие комплекты программ аналогичного назначения, путь которых к рядовым пользователям менее удачлив.
Однако не всё так просто. Дело в том, что у пишущего программы не остаётся свободного времени на рассказы о том, как он это делает. У обучающих программированию нет времени на исследование «уникальных» аппаратных особенностей БК... Но. даже написав более-менее удовлетворительное справочное пособие, весьма проблематично довести его до издания в приемлемые сроки...
Программисты-любители, «ковыряющие» чужие программы в кодах или пишущие свои, часто сталкиваются с непонятным поведением машины. Поиски ответов на возникающие вопросы, как правило, не приводят к успеху, так как слишком велики различия между БК и её «приблизительными» прототипами или «аналогами»: ДВК, «Электроника-60», PDP-11 и др.
Система машинных команд БК-0010 в более-менее компактном (табличном) виде охватывает всю систему команд PDP-11, в которой выделены команды процессора BM1. Далее приводятся сведения о командах, выполняемых БК. Команды условно разделены на пять групп, по функциональному назначению. Дополнительно включены таблицы перевода восьмеричных чисел в триады, а также результаты основных логических операций.
Все замечания и уточнения редакция примет с благодарностью.
▓▓▓▓▓▓▓ ▓▓ ▓▓ ▓▓▓▓▓ ▓▓▓▓▓ ▓▓ ▓▓▓▓▓ СПРАВОЧНОЕ ПОСОБИЕ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓▓▓▓▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ А. Конюшенко ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ = UC2AAU = ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ 220030 Минск-30,я.1 ▓▓▓▓▓▓▓ ▓▓ ▓▓ ▓▓▓▓▓ ▓▓▓▓▓ ▓▓ ▓▓▓▓▓ БЕЛАРУСЬ ╔════════════════════════════╤════════════════════════╤════════════════════ 1 ═══╗ ║ КОДЫ МАШИННЫХ КОМАНД │ 00 4R DD JSR │ 10 00 00 +XXX BPL ║ ║ 1801BM1 (PDP-11) │ 00 50 DD CLR │ 10 04 00 +XXX BMI ║ ║ 00 00 00 HALT │ 00 51 DD COM │ 10 10 00 +XXX BHI ║ ║ 00 00 01 WAIT │ 00 52 DD INC │ 10 14 00 +XXX BLOS ║ ║ 00 00 02 RTI │ 00 53 DD DEC │ 10 20 00 +XXX BVC ║ ║ 00 00 03 BPT │ 00 54 DD NEG │ 10 24 00 +XXX BVS ║ ║ 00 00 04 IOT │ 00 55 DD ADC │ 10 30 00 +XXX BCC, BHIS║ ║ 00 00 05 RESET │ 00 56 DD SBC │ 10 34 00 +XXX BCS, BLO ║ ║ 00 00 06 RTT │ 00 57 DD TST │ 10 40 00 - 10 43 77 EMT ║ ║ │ 00 60 DD ROR │ 10 44 00 - 10 47 77 TRAP║ ║ (00 00 07 - 00 00 11) [1a]│ 00 61 DD ROL │ 10 50 DD CLRB ║ ║ │ 00 62 DD ASR │ 10 51 DD COMB ║ ║ 00 00 12 START │ 00 63 DD ASL │ 10 52 DD INCB ║ ║ │ 00 64 NN MARK │ 10 53 DD DECB ║ ║ (00 00 13 - 00 00 15) [1b]│ │ 10 54 DD NEGB ║ ║ │(00 65 SS) (MFPI) [2]│ 10 55 DD ADCB ║ ║ 00 00 16 S │(00 66 DD) (MTPI) [3]│ 10 56 DD SBCB ║ ║ │ │ 10 57 DD TSTB ║ ║ (00 00 17 - 00 00 77) [1c]│ 00 67 DD SXT │ 10 60 DD RORB ║ ║ │ │ 10 61 DD ROLB ║ ║ 00 01 DD JMP │(00 70 00 - 00 77 77)[4]│ 10 62 DD ASRB ║ ║ 00 02 0R RTS │ │ 10 63 DD ASLB ║ ║ │ 01 SS DD MOV │ 10 64 SS MTPS ║ ║ (00 02 1R тех.контроль) │ 02 SS DD CMP │ ║ ║ (00 02 2N тех.контроль) │ 03 SS DD BIT │(10 65 SS) (MFPD) [9] ║ ║ (00 02 3N) (SPL) │ 04 SS DD BIC │(10 66 DD) (MTPD) [10] ║ ║ │ 05 SS DD BIS │ ║ ║ 00 02 40 NOP │ 06 SS DD ADD │ 10 67 DD MFPS ║ ║ 00 02 41 -│ операции c │ │ ║ ║ - 00 02 77 │разрядами PSW │(07 0R SS) (MUL) [5]│(10 70 00 - 10 77 77) [11]║ ║ 00 03 DD SWAB │(07 1R SS - 07 3R SS)[6]│ ║ ║ 00 04 00 +XXX BR │ │ 11 SS DD MOVB ║ ║ 00 10 00 +XXX BNE │ 07 4R SS XOR │ 12 SS DD CMPB ║ ║ 00 14 00 +XXX BEQ │ │ 13 SS DD BITB ║ ║ 00 20 00 +XXX BGE │(07 50 0R - 07 50 3R)[7]│ 14 SS DD BICB ║ ║ 00 24 00 +XXX BLT │(07 50 40 - 07 67 77)[8]│ 15 SS DD BISB ║ ║ 00 30 00 +XXX BGT │ │ 16 SS DD SUB ║ ║ 00 34 00 +XXX BLE │ 07 7R NN SOB │(17 00 00 - 17 77 77) [12]║ ╠════════════════════════════╧════════════════════════╧══════════════════════════╣ ║ Область [la-c] в системе команд PDP-11 не используется; у процессора 1801ВМ1 ║ ║ в этой области имеются команды START и S (шаг), но вследствие отсутствия ║ ║ системных регистров, БК-0010(01) по этим командам отрабатывает вектор 4. ║ ║ [2-3] команды процессоров с MMU ║ ║ [4, 8, 11] резервный код ║ ║ [5] команда умножения (реализована в 1801ВМ1Г) ║ ║ [6] расширенный набор команд арифметики ║ ║ [7, 12] команды процессора с плавающем точкои ║ ║ [9,10] команды процессоров с 22-разрядным MMU ║ ╚════════════════════════════════════════ UC2AAU ═ БК-0010 ═ Справочное пособие ═╝ ╔══════════════════════════════════════════════════════════════════════════ 2 ═══╗ ║ У С Л О В Н Ы Е О Б О З Н А Ч Е Н И Я ║ ╠═══════════════════════════════════════════╤════════════════════════════════════╣ ║ В кодах машинных команд │ В обозначениях операций ║ ╟───────────────────────────────────────────┼────────────────────────────────────╢ ║ * = 0 для операций над словами! │ (N) = содержимое ячейки или рег.N ║ ║ 1 для операций над байтами │ s = операнд-источник (вег) ║ ║ SS = поле адресации операнда-источника │ d = операнд-приемник (det) ║ ║ DD = поле адресации операнда-приемника │ r = содержимое регистра ║ ║ R = РОН N 0...7 (3 бита) │ <= = становится равный ║ ║ XXX = смещение (-128,...,+127; 8 бит) │ X = относительный адрес ║ ║ N = число, 3 бита │ % = определение регистра ║ ║ NN = число, 6 бит │ ║ ╟───────────────────────────────────────────┼────────────────────────────────────╢ ║ ЛОГИЧЕСКИХ ОПЕРАЦИИ │ ОПЕРАЦИИ НАД РАЗРЯДАМИ PSW ║ ╟───────────────────────────────────────────┼────────────────────────────────────╢ ║ /\ = логическое И │ * = установка/сброс по результату ║ ║ \/ = логическое ИЛИ │ - = состояние разряда не меняется ║ ║ \\ = исключающее ИЛИ │ 0 = сброс ║ ║ ^ = НЕ │ 1 = установка ║ ╠═══════════════════════════════════════════╧════════════════════════════════════╣ ║ ┌───────────┬───────────┐ ║ ║ МЕТОДЫ АДРЕСАЦИИ │ МЕТОД │ R │ ║ ║ Мнемоника └───┴───┴───┴───┴───┴───┘ ║ ║ 0 регистровая R (R) - операнд ║ ║ 1 косвенная регистровая (R) или @R (R) - адрес операнда ║ ║ 2 автоинкрементная (R)+ (R) - исполняемый адрес ║ ║ (R) <= (R)+2 (или 1) ║ ║ 3 косв. автоинкрементная @(R)+ (R) - адрес адреса ║ ║ (R) <= (R)+2 (или 1) ║ ║ 4 автодекрементная -(R) (R) <= (R)-2 (или 1) до исп.ком. ║ ║ (R) - исп-й адрес ║ ║ 5 косе.автодекрементная @-(R) (R) <= (R)-2 (или 1) до исп.ком. ║ ║ (R) - адрес адреса ║ ║ 6 индексная X(R) (R)+X - адрес ║ ║ 7 косв.индексная @X(R) (R)+X - адрес адреса ║ ║ ┌───────────┬───────────┐ ║ ║ С ИСПОЛЬЗОВАНИЕМ СЧЕТЧИКА КОМАНД │ МЕТОД │ 7 │ ║ ║ └───┴───┴───┴───┴───┴───┘ ║ ║ 2 непосредственная #n операнд n в следующем за командой слове ║ ║ 3 абсолютная @#А адрес А в следующем за командой слове ║ ║ 6 относительная А адр.операнда = адр.ком.+4+X (+6+Х) ║ ║ 7 косв.относительная @A адр.адреса опер. - адр.ком.+4+X (+6+Х) ║ ╠════════════════════════════════════════════════════════════════════════════════╣ ║ ВЕКТОРЫ ПРЕРЫВАНИЙ ║ ║ Источник прерывания Адрес вектора ║ ║ Зависание при передаче данных по каналу или от клавиши <СТОП> . . 000004 ║ ║ Резервный код команд . . . . . . . . . . . . . . . . . . . . . . 000010 ║ ║ Прерывание по Т-разряду . . . . . . . . . . . . . . . . . . . . . 000014 ║ ║ Прерывание по команде IOT . . . . . . . . . . . . . . . . . . . . 000023 ║ ║ Авария сетевого питания (аппаратно не поддержан) . . . . . . . . . 000024 ║ ║ Прерывание по команде EMT . . . . . . . . . . . . . . . . . . . . 000030 ║ ║ Прерывание по команде TRAP . . . . . . . . . . . . . . . . . . . . 000034 ║ ║ Прерывание от клавиатуры . . . . . . . . . . . . . . . . . . . . . 000060 ║ ║ Сигнал IRQ2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 000100 ║ ║ Прерывание от клавиатуры (коды нижнего регистра) . . . . . . . . . 000274 ║ ╚════════════════════════════════════════ UC2AAU ═ БК-0010 ═ Справочное пособие ═╝ ╔══════════════════════════════════════════════════════════════════════════ 3 ═══╗ ║ РАБОТА с ПОДПРОГРАММАМИ ║ ║ 00 00 00 HALT останов (в БК-0010 при (177716) <= 000010\/(177716) ║ ║ попытке записи PSW в несушеств. (177676) <= PSW <= (160004) ║ ║ регистр 177676,происх.прер.4) PC <= (160002) ║ ║ 00 00 01 WAIT пауза - ожидание прерывания ║ ║ 00 00 02 RTI возврат из прерывания PC <= (SP)+ ║ ║ PSW <= (SP)+ ║ ║ 00 00 03 BPT отладочное прерывание -(SP) <= PSW <= (16) ║ ║ вектор 14 -(SP) <= PC <= (14) ║ ║ 00 00 04 IOT вызов системы ввода-вывода -(SP) <= PSW <= (22) ║ ║ вектор 20 -(SP) <= PC <= (20) ║ ║ 00 00 05 RESET сброс магистрали и процессора ║ ║ 00 00 06 RTT возврат, с запретом прерывания PC <= (SP)+ ║ ║ no Т-разряду до исп.сл. команды PSW <= (SP)+ ║ ║ 00 01 DD JMP безусловный переход PC <= d ║ ║ 00 02 0R RTS возврат из подпрограммы PC <= R <= (SP)+ ║ ║ 00 02 40 NOP нет операции (пустая команда) ║ ║ 00 4R DD JSR вызов подпрограммы -(SP)<= R <= PC <= d ║ ║ 00 64 NN MARK восстановление стека SP <= PC + (2 x NN) ║ ║ PC <= R5 <= (SP)+ ║ ║ 07 7R NN SOB выч.1 и ветвл..если (R#) не 0 R# <= R# - 1 ║ ║ PC <= PC - (2 x NN) ║ ║ 10 40 00 - EMT вызов ОС, вектор 30 -(SP)<= PSW <= (32) ║ ║ - 10 42 77 -(SP)<= PC <= (30) ║ ║ 10 44 00 - TRAP общего назн.,вектор 34 -(SP)<= PSW <= (36) ║ ║ - 10 47 77 -(SP)<= PC <= (34) ║ ║ 10 64 SS MTPS запись PSW PSW <= 6 ║ ║ 10 67 DD MFPS чтение PSW d <= PSW ║ ╠════════════════════════════════════════════════════════════════════════════════╣ ║ ПЕРЕХОДЫ ПО УСЛОВНО (ВЕТВЛЕНИЯ): В** <адр.перехода> ║ ║ ┌───────────────────────────────┬───────────────────────────────┐ ║ ║ │ Базовый КОП │+/- X X X │ ║ ║ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ ║ ║ 15 8 7 0 ║ ╠═════════════╗ Если условие удовлетворяется, то (PC) <= (PC) + (2 x XXX) ║ ║ ВОСЬМЕРИЧНЫЕ║ 00 04 00 +XXX BR безусловен переход ║ ║ ┌──────── ║ 00 10 00 +XXX BNE нет равенства (нули) Z = 0 ║ ║ V =ТРИАДЫ ║ 00 14 00 +XXX BEQ равенство (нули) Z = 1 ║ ╠═══╤═══════╗ ║ 10 20 00 +XXX BVC арифм.переп. отсутствует V = 0 ║ ║ 0 │ 0 0 0 ║ ║ 10 24 00 +XXX BVS произошло арифм.переп. V = 1 ║ ╟───┼───────╢ ║ 10 30 00 +XXX BCC перенос отсутствует С = 0 ║ ║ 1 │ 0 0 1 ║ ║ 10 34 00 +XXX BCS произошел перенос С = 1 ║ ╟───┼───────╢ ║ Переход по знаку ║ ║ 2 │ 0 1 0 ║ ║ 10 00 00 +XXX BPL знак плис N = 0 ║ ╟───┼───────╢ ║ 10 04 00 +XXX BMI знак минус N = 1 ║ ║ 3 │ 0 1 1 ║ ║ 00 20 00 +XXX BGE больше или равно(нули) N\\V = 0 ║ ╟───┼───────╢ ║ 00 24 00 +XXX BLT меньше (нуля) N\\V = 1 ║ ║ 4 │ 1 0 0 ║ ║ 00 30 00 +XXX BGT больше (нуля) Z\/(N\\V) = 0 ║ ╟───┼───────╢ ║ 00 34 00 +XXX BLE меньше или равно (нули) Z\/(N\\V) = 1 ║ ║ 5 │ 1 0 1 ║ ║ Переход без знака ║ ╟───┼───────╢ ║ 10 10 00 +XXX BHI больше C\/Z = 0 ║ ║ 6 │ 1 1 0 ║ ║ 10 14 00 +XXX BLOS меньше или равно C\/Z = 1 ║ ╟───┼───────╢ ║ 10 30 00 +XXX BHIS больше или равно (= BCC) С = 0 ║ ║ 7 │ 1 1 1 ║ ║ 10 34 00 +XXX BLO меньше (= BCS) C = 1 ║ ╚═══╧═══════╩═╩══════════════════════════ UC2AAU ═ БК-0010 ═ Справочное пособие ═╝ ╔══════════════════════════════════════════════════════════════════════════ 4 ═══╗ ║ ОДНООПЕРАНДДЫЕ КОМАНДЫ: OPR dst ║ ║ ┌───────────────────────────────────────┬───────────────────────┐ ║ ║ │ Код операции (КОП) │ D D │ ║ ║ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ ║ ║ 15 6 5 0 ║ ║ N Z V C ║ ║ 00 03 DD SWAB перестановка байтов * * 0 0 ║ ║ *0 50 DD CLR(B) очистка (d) <- 0 0 1 0 0 ║ ║ *0 51 DD COM(B) побитная инверсия (d) <= (^d) * * 0 1 ║ ║ *0 52 DD INC(B) прибавление 1 (d) <= (d) + 1 * * * - ║ ║ *0 53 DD DEC(B) вычитание 1 (d) <= (d) - 1 * * * - ║ ║ *0 54 DD NEG(B) изменение знака (d) <= -(d) * * * * ║ ║ *0 55 DD ADC(B) прибавить перенос (d) <= (d) + C * * * * ║ ║ *0 56 DD SBC(B) вычесть перенос (d) <= (d) - C * * * * ║ ║ *0 57 DD TST(B) проверка (d) <= (d) * * 0 0 ║ ║ *0 60 DD ROR(B) циклич.сд.вправо => C,d * * * * ║ ║ *0 61 DD ROL(B) циклич.сд.влево C,d <= * * * * ║ ║ *0 62 DD ASR(B) арифм.сд.вправо (d) <= (d)/2 * * * * ║ ║ *0 63 DD ASL(B) арифм.сд.влево (d) <= 2(d) * * * * ║ ║ 00 67 DD SXT расширить знак N = 0, (d) <= 0 0 1 0 - ║ ║ N = 1, (d) <= 177777 1 0 0 - ║ ╠════════════════════════════════════════════════════════════════════════════════╣ ║ ДВУХОПЕРАНДНЫЕ КОМАНДЫ: OPR src dst; OPR src R; OPR R dst ║ ║ ┌───────────────┬───────────────────────┬───────────────────────┐ ║ ║ │ КОП │ S S │ D D │ ║ ║ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ ║ ║ 15 12 11 6 5 0 ║ ║ N Z V C ║ ║ *1 SS DD MOV(B) переслать (d) <= (s) * * 0 - ║ ║ *2 SS DD CMP(B) сравнить (s) - (d) * * * * ║ ║ *3 SS DD BIT(B) проверить разряды (s)/\(d) * * 0 - ║ ║ *4 SS DD BIC(B) очистить разряды (d) <= (^s)/\(d) * * 0 - ║ ║ *5 SS DD BIS(B) установить разряды (d) <- (s)\/(d) * * 0 - ║ ║ 06 SS DD ADD сложить (d) <= (s) +(d) * * * * ║ ║ 07 4R SS XOR исключающее ИЛИ (s) <= (r)\\(s) * * 0 - ║ ║ 16 SS DD SUB вычесть (d) <= (d) -(s) * * * * ║ ╠════════════════════════════════════════════════════════════════════════════════╣ ║ ОПЕРАЦИИ с РАЗРЯДАМИ PSW: ║ ║ ┌───────────────────────────────────────────┬───┬───┬───┬───┬───┐ ║ ║ │ Базовый КОП = 240 │0/1│ N │ Z │ V │ C │ ║ ║ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ ║ ║ 15 8 7 4 3 2 1 0 ║ ╠═════════════════════════════╗ Очистить ║ ║ ЛОГИЧЕСКИЕ ОПЕРАЦИИ: ║ 00 02 41 CLC C - - - 0 ║ ╠═══════════╤═══╤═══╤═══╤═══╗ ║ 00 02 42 CLV V - - 0 - ║ ║ (a) │ 0 │ 1 │ 0 │ 1 ║ ║ 00 02 44 CLZ Z - 0 - - ║ ╟───────────┼───┼───┼───┼───╢ ║ 00 02 50 CLN N 0 - - - ║ ║ (d) │ 0 │ 0 │ 1 │ 1 ║ ║ 00 02 57 CCC N Z V C 0 0 0 0 ║ ╠═══════════╪═══╪═══╪═══╪═══╣ ║ Установить ║ ║ (a)\/(d) │ 0 │ 0 │ 0 │ 1 ║ ║ 00 02 61 SEC C - - - 1 ║ ╟───────────┼───┼───┼───┼───╢ ║ 00 02 62 SEV V - - 1 - ║ ║ (a)/\(d) │ 0 │ 1 │ 1 │ 1 ║ ║ 00 02 64 SEZ Z - 1 - - ║ ╟───────────┼───┼───┼───┼───╢ ║ 00 02 70 SEN N 1 - - - ║ ║ (a)\\(d) │ 0 │ 1 │ 1 │ 0 ║ ║ 00 02 77 SCC N Z V C 1 1 1 1 ║ ╚═══════════╧═══╧═══╧═══╧═══╩═╩══════════ UC2AAU ═ БК-0010 ═ Справочное пособие ═╝
С. ТАЛАНОВ
(г. Яранск)
БК-0010 и телетайп
Кто из владельцев БК никогда не мечтал о принтере? Принтере, на котором можно напечатать всё: от поздравительной открытки и письма к другу, до сложной радиосхемы и занимательной картинки? К сожалению, наша действительность такова, что мечтающих намного больше, чем владельцев этого замечательного устройства. В 1991 г. на прилавках магазинов «Электроника» в Москве и других городах можно было встретить относительно дешёвые принтеры «Электроника МС6312» (термоструйная печатающая головка, стандарт EPSON LX-800) и «Электроника MC6313/EPSON». Принтер МС6313 особо удачная модель: матричная печать, полностью совместим со стандартом FX-800, широчайшие возможности печати текстов и графики.
Оба принтера при поддержке соответствующих драйверов без проблем работают с БК, как в текстовом, так и в графическом режиме. Но сейчас уже 1993 г., на прилавках «Электроники» пусто, куда пропали эти принтеры и сколько они сейчас стоят, не знает никто.
Чтобы в вопросах печати сколь-нибудь переместиться от «мечтающих» к «имеющим», автор предлагает вашему вниманию данную статью.
Как известно, на сегодняшний день, к БК подключено в качестве печатающих устройств немало различной «экзотики»: пишущие машинки «Консул», различные зарубежные принтеры, термопечатающие устройства, кассовые аппараты... Но девиз «Подключить всё, что печатает» далеко не исчерпан. На предприятиях связи повсеместно используются телеграфные аппараты, работающие с кодом МТК-2 (международный телеграфный код). Это импортные аппараты Т-100, Т63, отечественные СТ-35, СТ67М и другие. В последнее время им на смену приходят электронные матричные телеграфные аппараты РТА-80 и F-2000. Телеграфные аппараты можно найти и на различных предприятиях, где они используются в качестве абонентских установок общесоюзной телетайпной сети.
Для использования в качестве печатающей установки необходима только приёмная часть аппарата, без клавиатуры, трансмиттера, перфоратора. Я думаю, многим не составит большого труда приобрести приёмную часть от списанного телеграфного аппарата на предприятиях связи.
При включении в сеть аппарата необходимо учесть, что некоторые из них работают только от 127 В, в этом случае их необходимо питать через понижающий трансформатор.
Код МТК-2 является равномерным, последовательным и состоит из сочетаний или чередований пяти токовых или бестоковых посылок. Для приёма любого знака старт-стопным аппаратом требуется семь посылок - одна пусковая, затем 5 кодовых и одна стоповая. Все семь посылок вместе составляют стартстопную комбинацию знака. Пусковая посылка в этой комбинации запускает в работу распределительный механизм приёмной части аппарата, а стоповая посылка после каждого оборота механизма останавливает его. Пусковая и стоповая посылки называются коррекционными.
Общее число посылок кода МТК-2 составляет 32.
Пример кодирования: комбинация посылок для буквы «ы».
Как же научить БК работать с телетайпом? Для этой цели служит резидентный драйвер, коды которого приведены ниже. Программа перекодирует код символа БК в код МТК-2 и выдаст его в последовательном коде на контакт А16 разъёма порта пользователя (УП). При этом никакой доработки компьютера не требуется.
Однако приёмный электромагнит телеграфного аппарата питается от внешнего источника питания напряжением 120 В, ток, протекающий в цепи электромагнита, достигает 50 мА. Чтобы согласовать ТТЛ выход порта с питанием электромагнита, необходимо собрать схему согласования, в телеграфии такая схема называется однополюсным реле.
Принцип работы схемы:
ТТЛ сигналы поступают с контакта А16 порта БК на один из входов схем совпадения D2.1, D2.2. На другие входы этих схем поступают в противофазе импульсы высокой частоты от мультивибратора, собранного на элементах D1.1, D1.2. На выходах схем совпадения образуются сигналы управления, заполненные импульсами высокой частоты мультивибратора (пакеты импульсов). Эти пакеты импульсов усиливаются каскадами, собранными на транзисторах VT1, VT2, и поступают на трансформатор TR1. Сигналы управления восстанавливаются выпрямителями V5-V8. Восстановленный сигнал управляет выходными ключами прерывателя, собранными на транзисторах VT3, VT4. Преобразование сигналов управления вызвано необходимостью полной гальванической развязки выхода прерывателя от компьютера. Таким образом, однополюсное реле преобразует ТТЛ сигналы БК в сигналы с напряжением 0-120 В.
Для работы схемы необходим внешний источник постоянного напряжения 120 В с током до 1 А. При полностью открытых ключах VT3, VT4, (режим СТОП) через электромагнит должен протекать ток 40- 45 мА. Этот ток регулируется переменным резистором R19. При подключении источника необходимо соблюдать полярность. В противном случае выйдут из строя транзисторы VT3, VT4.
Машинные коды драйвера печати приведены в конце статьи. Их необходимо ввести в память компьютера в режиме МСТД. Автор опускает процесс ввода кодового модуля, так как он достаточно описан в различной литературе. Контрольная сумма программы, вычисленная также в режиме МСТД по директиве, Х-013307.
Итак, вы ввели коды драйвера программы, собрали и подключили схему согласования, телеграфный аппарат. Приступаем к работе.
Драйвер печати может быть загружен с любого адреса в память, так как он является полностью перемещаемым, может работать в добавочном ОЗУ или ПЗУ пользователя. После запуска из пускового или отладочного мониторов программа выдаёт краткую инструкцию пользователю. Для выхода в режим МСТД или пусковой монитор необходимо нажать клавишу ВВОД. Для выхода в Фокал или Бейсик - ПРОБЕЛ. Следует отметить, что при работе с языками они должны быть сначала инициализированы - это относится только к тем машинам, которые имеют переключатели языков и МСТД, и может возникнуть, например, такая ситуация, что до включения машины в сеть язык был выключен, затем включён, но не запущен - в таком случае выхода в язык по директиве ПРОБЕЛ не произойдёт, для этого нужно сначала запустить язык, а потом выйти из него директивой в монитор - из Бейсика - MON из Фокала - Р М.
После выхода в монитор или язык драйвер готов к работе, но себя пока никак не проявляет. Можно выполнять любые операции, грузить и запускать программы.
Данный принцип работы резидентного драйвера взят из программ печати драйверов принтеров автора Зальцмана Ю.А. (г. Алма-Ата).
Драйвер имеет два режима печати: чтобы вызвать режим печати, при котором будут печататься все знаки, выводимые на экран, необходимо нажать вместе клавиши АР2/РУС; в служебной строке появится длинная черта - признак режима; выход - повторное нажатие клавиш АР2/РУС. Другой режим обеспечивает прямую печать с клавиатуры: все символы, введённые пользователем, будут тотчас напечатаны аппаратом. В служебной строке появляется сообщение режима; выход - клавиша КТ. В этом режиме автоматически будет подана команда аппарату произвести функции «возврат каретки» и «перевод строки» после печати 64 символов в строке.
Таким образом, программа универсальна и может быть применена для распечаток листингов Фокала и Бейсика, текстов, подготовленных в редакторах EDASP и МИКРО, текстов, имеющих свою систему чтения - READER, МОНСТР, ОБЛОЖКА и т.д., для вывода машинных кодов из монитора МСТД, печати тестов.
К наиболее, на мой взгляд, интересным применениям программы в других областях относится использование программно-аппаратного комплекса на предприятиях связи в качестве установки для безбумажной обработки телеграмм, с последующей передачей их на пункты коммутации сообщений (ЦКС). Комплекс обеспечит высокую стабильность скорости и качество при такой работе, несравнимое с механическим телеграфным аппаратом.
1000А2000ДХ-013307 |
|||||||
$1000A2000Л |
|||||||
005037 |
000054 |
012737 |
100112 |
000030 |
012737 |
101362 |
000274 |
010704 |
062704 |
001532 |
112400 |
001402 |
104016 |
000774 |
010704 |
062704 |
001400 |
012701 |
000001 |
112400 |
001403 |
104022 |
005201 |
000773 |
005002 |
104020 |
104006 |
010701 |
062701 |
000074 |
010137 |
000030 |
122700 |
000040 |
001026 |
022737 |
012701 |
120000 |
001002 |
000137 |
120234 |
005000 |
012701 |
120020 |
012120 |
022701 |
120046 |
002374 |
012737 |
177777 |
000262 |
010700 |
100404 |
062700 |
177624 |
010037 |
001744 |
000000 |
010546 |
010705 |
062705 |
000340 |
010537 |
000274 |
016605 |
000002 |
024527 |
104016 |
001445 |
021527 |
104020 |
001420 |
021527 |
104014 |
001133 |
013746 |
000030 |
013746 |
000054 |
012737 |
100112 |
000030 |
104014 |
012637 |
000054 |
012637 |
000030 |
000420 |
010046 |
010346 |
010203 |
000303 |
042702 |
177400 |
001002 |
052702 |
020000 |
112100 |
104016 |
120300 |
001401 |
077205 |
012603 |
012600 |
012605 |
000002 |
010046 |
042700 |
177400 |
122700 |
000025 |
001003 |
004767 |
000276 |
000462 |
105737 |
000054 |
001457 |
122700 |
000040 |
101011 |
122700 |
000200 |
101027 |
122700 |
000240 |
101003 |
122700 |
000300 |
101421 |
122700 |
000012 |
001003 |
005037 |
000026 |
000433 |
105737 |
000055 |
001030 |
122700 |
000011 |
001405 |
122700 |
000014 |
001024 |
012700 |
000012 |
013700 |
000156 |
042700 |
177700 |
023700 |
000026 |
101406 |
010046 |
012700 |
000012 |
004767 |
000320 |
012600 |
010037 |
000026 |
011600 |
004767 |
000304 |
012600 |
012605 |
000137 |
100112 |
012700 |
000137 |
000747 |
122737 |
000014 |
177662 |
001004 |
022737 |
121110 |
000004 |
001427 |
122737 |
000016 |
177662 |
001410 |
122737 |
000017 |
177662 |
001351 |
004767 |
000046 |
000137 |
101362 |
004437 |
110346 |
105137 |
000054 |
005000 |
104022 |
004767 |
000010 |
004437 |
110362 |
000002 |
000207 |
012700 |
000012 |
004767 |
000156 |
000207 |
004767 |
177762 |
005000 |
104022 |
010704 |
062704 |
000630 |
012701 |
000007 |
112400 |
001403 |
104022 |
005201 |
000773 |
005067 |
000532 |
104006 |
104016 |
122700 |
000003 |
001415 |
122767 |
000100 |
000512 |
001414 |
122700 |
000012 |
001416 |
062767 |
000001 |
000474 |
004767 |
000052 |
000756 |
005000 |
104022 |
000207 |
005067 |
000454 |
004767 |
000010 |
000765 |
005067 |
000442 |
000762 |
012701 |
000057 |
004767 |
000204 |
012701 |
000073 |
004767 |
000174 |
000207 |
004437 |
110346 |
042700 |
177400 |
122700 |
000012 |
001505 |
010701 |
062701 |
000234 |
020027 |
000043 |
002472 |
020027 |
000100 |
002420 |
020027 |
000200 |
002410 |
020027 |
000300 |
002461 |
062701 |
000075 |
042700 |
000340 |
000407 |
062701 |
000035 |
042700 |
000140 |
000402 |
162700 |
000043 |
060001 |
111101 |
042701 |
177400 |
010102 |
042702 |
177774 |
020267 |
000124 |
001412 |
010267 |
000116 |
060702 |
062702 |
000252 |
010146 |
111201 |
004767 |
000020 |
012601 |
004767 |
000006 |
004437 |
110362 |
000207 |
006201 |
006201 |
012702 |
000010 |
006201 |
106737 |
177714 |
012703 |
005500 |
077301 |
077207 |
000207 |
012701 |
000067 |
004767 |
177744 |
000754 |
012701 |
000057 |
004767 |
177732 |
012701 |
000073 |
004767 |
177722 |
000743 |
000002 |
156665 |
156735 |
102725 |
156555 |
116565 |
016745 |
046425 |
062505 |
126765 |
052575 |
146705 |
106475 |
156615 |
156415 |
156465 |
033346 |
133216 |
113366 |
057056 |
123316 |
067206 |
117036 |
047076 |
127106 |
077326 |
007306 |
013146 |
073126 |
156735 |
156735 |
122735 |
033747 |
133617 |
113767 |
057457 |
123717 |
067607 |
117437 |
047477 |
127507 |
077727 |
007707 |
013547 |
073527 |
112455 |
126535 |
004725 |
037401 |
000000 |
000000 |
050040 |
044522 |
052116 |
046456 |
045524 |
020062 |
053040 |
027061 |
027062 |
030440 |
034471 |
143462 |
020056 |
052270 |
050123 |
067543 |
070162 |
134056 |
000000 |
020270 |
142760 |
140736 |
154324 |
151440 |
145440 |
140714 |
144727 |
152301 |
151325 |
035331 |
134040 |
173440 |
144331 |
142317 |
036055 |
172353 |
005076 |
000000 |
170014 |
177345 |
172341 |
020370 |
175351 |
170040 |
167762 |
171347 |
166741 |
174755 |
160455 |
031362 |
171057 |
171765 |
005056 |
162760 |
160776 |
174364 |
171440 |
165440 |
160754 |
164767 |
172341 |
171365 |
026771 |
171341 |
027462 |
160754 |
027364 |
173412 |
164371 |
162357 |
173440 |
166440 |
167357 |
172351 |
171357 |
164440 |
164754 |
166440 |
162363 |
036055 |
173767 |
162357 |
027076 |
173412 |
163040 |
165757 |
166341 |
164440 |
164754 |
161040 |
165345 |
164763 |
026753 |
171360 |
161357 |
166345 |
005056 |
174767 |
167750 |
020344 |
160756 |
172040 |
166345 |
172345 |
165341 |
035360 |
172440 |
027760 |
030741 |
005066 |
037075 |
000000 |
$ |
|
|
|
|
|
|
|
Драйвер может быть также использован коротковолновиками для работы в режиме телетайпа на передачу заранее набранных сообщений или прямой работы в эфире.
Все замечания по статье и идеи о новых областях применения можно направить автору по адресу: 612220, Кировская обл., г. Яранск, а/я 2, Таланову Сергею Павловичу.
Ю. КОТОВ
(Москва)
Простое соединение ПЭВМ типа IBM PC и БК-0010
На фоне преимущественного распространения ПЭВМ типа IBM PC машины малой мощности, вроде БК-0010, «Микроши» или других 8-разрядных бытовых компьютеров, остаются значительно более дешёвыми и доступными; именно с них начинается «народная компьютеризация» да и учебный процесс в школах по соответствующим предметам. Применимы малые ПЭВМ и в проектировании, на производстве для решения несложных задач - таких, для которых привлечение ПЭВМ большей мощности и стоимости было бы расточительно. Но в ситуации использования ПЭВМ разной мощности возникает естественная задача, если непереносимости программного обеспечения с одних машин на другие в полном объёме, то передачи информации и оперативного сопряжения, когда одна машина может быть главной, а другая вспомогательной - использоваться для предварительной подготовки информации, просмотра результатов одним пользователем при работе на основной ПЭВМ другого, для управления дополнительным оборудованием и т.д. В учебном процессе и даже в профессиональном (или пользовательском) программировании при личном владении малой ПЭВМ учащийся или пользователь может дома подготавливать информацию или, на совместимом языке, программы, части программ, затем пересылать их на ПЭВМ большей мощности и там доотлаживать и включать в эксплуатацию (или сдавать преподавателю).
Довольно эффективна передача информации через диски, хотя само подключение дисковода, да ещё совместимого с дисководом IBM PC, довольно сложное и дорогое мероприятие. Да и не всегда «дисковый обмен» заменяет оперативную связь.
Электрически персональные компьютеры соединяют, как известно, различным образом - даже с использованием модемов и телефонной связи. Более сложна задача сопряжения одной ПЭВМ большей мощности с несколькими малыми, что требует какой- то - программной или электронной - коммутации. Сопряжение в рамках выпускавшегося КУВТа центральной ПВМ ДВК-2 с малыми БК-0010 вылилось в целую плату, вставляемую в корпус ДВК-2 и по размерам такую же, как плата всей основной электроники той же ДВК-2, да ещё и в 12 дополнительных схем в корпусах, подключаемых к БК0010.
В условиях же кризиса и беспредела в отношении взвинчивания цен - тем более различными кооперативами и «умельцами» - автором была поставлена задача максимально простого сопряжения БК-0010 с ПЭВМ типа IBM PC.
Соединение производится напрямую, через параллельные порты. БК-0010, как известно, имеет такой порт на 16 входных и 16 выходных разрядов. Типовая IBM PC имеет «неполный» параллельный порт, с 8 выходными информационными линиями, а также несколькими выходными и несколькими входными управляющими (и контрольными) линиями. Этот порт обычно используется для управления печатающим устройством, иногда - графопостроителем. На низовом уровне информационные и управляющие разряды работают одинаково; напряжение на линиях (2,5-5 В) соответствует напряжениям, принятым в БК-0010 (стандарт ТТЛ). В 25-контактном разъёме параллельного порта IBM PC найдены пять контактов для входных сигналов. ПЭВМ БК-0010, питающаяся через трансформатор, электрически изолирована от «земли», так что соединение общего вывода двух машин проблем не вызывает.
Альтернативное использование последовательного интерфейса хотя и уменьшает количество проводов для связи, но вызывает дополнительные вопросы. Для оптронной схемы согласования нужно «нестандартное» напряжение ±16 вольт. В стандартной БК-0010 на наружный разъём не выведены сигналы последовательного порта (хотя в схеме машинки соответствующий «порт» имеется, а в программе-мониторе, зашитой в ПЗУ, есть драйвер телеграфного канала).
В соответствии с имеющимися пятью входными (со стороны IBM) линиями и для уменьшения количества соединительных проводов было принято решение передавать (в обе стороны) за один раз по полбайта - по 4 разряда. Пятый разряд в каждую сторону используется как управляющий (так называемый стробирующий); этот же разряд при передаче в обратном направлении используется как сигнал готовности (ответный). Дополнительно один провод соединяет общие контакты («землю»). Всего 11 проводов. Из покупных деталей может понадобиться разве что 25-контактный разъём для ПЭВМ IBM (не обязательно с позолоченными иголками); разъём для подключения к БК-0010 в её комплекте имеется. Кроме этого, можно перепаять разъём-заглушку, даваемый для тестовой проверки машины. Для экспериментов при соблюдении должной осторожности можно обойтись без разъёма к IBM PC, индивидуально вставляя в дырочки залуженные концы проводов.
Согласно распределению контактов в обоих разъёмах (их номера оттиснуты на той стороне разъёмов, где производится пайка) соединение таково:
Номера контактов |
IBM PC |
БК-0010 |
Назначение |
|
---|---|---|---|---|
1 |
В31 |
«строб» |
от IBM PC |
|
|
2 |
В24 |
данные, |
0 разряд от IBM |
|
3 |
А24 |
данные, |
1 разряд |
|
4 |
В23 |
данные, |
2 разряд |
|
5 |
В17 |
данные, |
3 разряд |
|
15 |
В5 |
«строб» |
от БК-0010 |
|
13 |
А16 |
данные, |
0 разряд от БК |
|
12 |
А13 |
данные, |
1 разряд |
|
10 |
В12 |
данные, |
2 разряд |
|
11 |
В10 |
данные, |
3 разряд |
|
18-25 |
А11 |
«общий» |
|
«Строб» от IBM IC ведёт к 8-му входному разряду БК, «строб» от БК-0010 берётся от 4-го выходного разряда БК.
IBM PC могут иметь варианты вывода на разъём каналов СОМ1 или COM2. Обычно задействован СОМ1 и порты с 16-ричными адресами 378, 379, 37А. Порт 378 - регистр выходных данных параллельного интерфейса, его разряды 0-7 выведены на контакты разъёма 2-9. Порт 379 - регистр статуса (входной); в прочитанном из него байте разряды 3, 4, 5, 6, 7 соответствуют контактам 15, 13, 12, 10, 11 разъёма. При выводе на печать они соответствуют сигналам «ошибка», «устройство подключено», «нет бумаги», «подтверждение приёма символа», «устройство занято». Важно заметить, что 7-й разряд в порту инвертируется, т.е. принимает противоположное значение переданному. Кроме того, все сигналы в БК инвертируются, т.е. логический нуль соответствует напряжению 5 В, а единица - низкому уровню. Из младших, неиспользуемых разрядов порта обычно читаются единицы. Потому после посылки нулевого кода от БК из порта прочтётся 16-ричное число 7F; 16-ричное число 31 даст байт 87. Для выделения информационного полубайта (после проверки 3-го разряда) код надо сдвинуть направо на 4 разряда и произвести операцию ХОР («исключающее или») с операндом 8(16). Вместо сдвига код можно нацело разделить на 32.
Порт с адресом 37А - регистр управления (выходной); в нём можно использовать до 5 разрядов, хотя в данном случае применяется только нулевой (стробирующий) импульс.
Для посылки информации в порты 378 и 37А на языке Бейсик используются команды OUT a, k, где a - адрес порта, k - посылаемый код. Для чтения информации из порта используется функция k!=INP(a). На Ассемблере послать информацию в порт можно, например, командой OUT DX, AL, если предварительно в регистр DX занесён адрес порта, а в AL - нужный код. Читается информация, например, командой IN AL, DX (в DX также предварительно заслан адрес, в AL будет результат).
Со стороны БК-0010, как известно, входной и выходной порт имеет восьмеричный адрес 177714 - формально являющийся как бы адресом одной из ячеек оперативной памяти (в IBM PC адресация портов отделена от адресации оперативной памяти). На Бейсике для посылки информации в «порт» используется инструкция POKE&О177714, kod%; для чтения - функция: kod%=РЕЕК (&O177714).
При организации процесса на низком уровне программы обмена информацией сами должны посылать и принимать информацию, управляющие и ответные сигналы, ждать друг друга и осуществлять взаимную синхронность работы. В то же время для программиста остаётся больше свободы, чем при попытках использования функций операционной системы или BIOS, либо же таких «готовых» операторов Бейсика, как LPRINT.
Передача информации по полбайта, конечно, медленнее, чем по байту; в направлении от IBM к БК организовать побайтовую передачу в принципе не сложнее, хотя надо протаскивать больше соединительных проводов.
Целые числа в ПЭВМ обоих типов кодируются одинаково и, кроме упомянутой выше перекодировки, при чтении из порта 379 другой перекодировки не требуется: надо только разделить число на полубайты и затем слить их обратно. При передаче символьной информации надо иметь в виду, что русские буквы и специальные символы псевдографики во второй половине таблицы кодов кодируются различно; в частности, в БК русские буквы - не по алфавиту. Потому для кодов, чьё числовое значение больше 127, нужна перекодировка.
Ниже приводим текст простых программ на Бейсике (для ПЭВМ IBM PC выбран вариант Турбо-Бейсика) - для передачи массива чисел из БК-0010 к IBM.
1 REM ТЕСТОВАЯ ПРОГРАММА ПЕРЕСЫЛКИ МАССИВА ЧИСЕЛ ИЗ БК В IBM (В БК-0010) 2 DIM A%(100) 'Задание массива для пересылки 3 DATA 1,0,-1,123,436 4 FOR I%=1 TO 8 5 READ A%( I%) 6 NEXT 9 POKE &O177714,0% 'Очистка "порта" 10 INPUT "Введите номер первого параметра и кол-во чисел"; A1%,A2% 11 I1%=A1% 12 C%=A%(I1%) 'Выделение числа из массива 13 C1%=(C% AND &O77777)\256% 'Выделение байта 14 IF C%<0% THEN C1%=C1%+128% 'Добавить знак 15 C2%=C% AND &O377 'Выделение второго байта 16 ? I1%;C%;C1%;C2% 'При желании вывод на экран 17 D%=C1% 18 GOSUB 100 'Передача первого байта 19 D%=C2% 20 GOSUB 100 'Передача второго байта 21 I1%=I1%+1% 'Движение в массиве 22 IF I1%<=A2% GOTO 12 'К передаче следующего числа 23 POKE &O177714,1% 'Сигнал конца передачи 24 ? "Конец;передано";I1%-1%;"чисел" 25 STOP 'Останов или продолжение программы 100 D1%=D%\16% 'Подпрограмма передачи байта; выделение полубайта 101 J%=0% 102 IF PEEK(&O177714)<256% GOTO 102 'Ожидание от IBM 103 POKE &Ol77714,D1%+16% 'Посылка кода с упр. битом 104 IF PEEK(&O177714)>255% GOTO 104 'Ожидание 105 POKE &O177714,0% 'Сигнал в IBM 106 J%=J%+1% 107 D1%=D% MOD 16% 'Выделение другого полубайта 108 IF J%=1% GOTO 102 'К передаче второго полубайта 109 RETURN
ПРОГРАММА ПЕРЕСЫЛКИ МАССИВА ЦЕЛЫХ ЧИСЕЛ ИЗ БК В IBM
dim m(100) 'В этот массив пересылка CLS OUT &H37A,0 'Обнулить "порт" INPUT "Ожидание";t% 'Запустить прог, в БК J%=1: JJ%=0 10 JJJ%=0 16 OUT &H37A,1 'Разрешение в БК 20 K%=INP(&H379): if k%=&h6f goto 80 'Ожидание кода от БК IF (K% AND &H8)<>0 GOTO 20 K%=INP(&H379): K%=K% XOR &H7F: K1%=K%\16 'Прием и преобр. кода OUT &H37A,0 'Сигнал в БК 30 K%=INP(&H379): IF (K% AND &H8)=0 GOTO 30 'Ожидание продвижения от БК JJJ%=JJJ%+1: IF JJJ%=1 THEN K2%=K1%:GOTO 16 'Надо ли второй полубайт? KK%=K2%*16+K1% 'Монтаж байта IF JJ%=0 THEN KKK%=KK%: GOTO 55 c%=(kkk% and &h7f)*256+kk% 'Монтаж числа if (kkk% and &h80)<>0 then c%=c% or &h8000 'Если отрицательное ? J%; c% 'По желанию - вывод на экран M(J%)=c%: J%=J%+1 'Занесение в массив IF J%>100 GOTO 60 'Если переполнение массива 55 jj%=1-jj%: GOTO 10 'К приему следующего числа 60 ? "Переполнение массива": l%=а2%: STOP 'Обработка переполнения массива 80 ? "Конец; передано чисел"; j%-1 'Принят код конца передачи .........продолжение программы...........
Программы можно запустить в любой последовательности, и они (передающая и приёмная) затем ждут друг друга и продвигаются в работе синхронно, посылая и контролируя управляющие и ответные сигналы. Кстати, для некоторых вариантов можно несколько ускорить работу программы, передавая информацию и при единичном, и при нулевом управляющем (стробирующем) сигнале. В программах же, приведённых ниже, информационный сигнал при выключенном стробе используется для передачи признака окончания работы (вся информация передана). Он же может использоваться для передачи контрольной информации (разряда чётности или др.). Сходным образом устроены программы передачи от IBM к БК.
Более быструю передачу обеспечивают, конечно, машинные программы; для IBM PC их можно подготовить на Ассемблере, для БК - непосредственно в машинных кодах.
Более сложные программы (очевидно, со стороны БК - в машинных кодах) подготовлены для передачи текстов бейсиковских программ. Известно, что при загрузке бейсиковской программы в память БК она там хранится в специальном виде; команды (операторы) заменены условными численными кодами, последовательные строки расположены в «случайном» порядке (обусловленном порядком их ввода и редактирования), а номера строк и адреса их размещения располагаются в специальной таблице - ближе к старшим адресам доступной памяти. Для вывода набора данных с последовательными строками необходима некоторая реконструкция программы, подобная той, которая совершается при действии оператора LIST. Кстати, отдельные блоки операционной системы БК-0010 можно использовать в программе реконструкции. Аналогично при приёме программы на Бейсике от IBM PC в БК надо её ввести в память соответствующим образом, построить таблицу адресов строк и др.
Были и другие предложения, например, действовать через файлы с расширением ASC., т.е. передавать информацию как содержимого файла, записанного прежде командой SAVE, или сформировать такой файл, который затем будет читаться командой LOAD.
Отдельный вопрос о частичной совместимости Бейсиков, особенно если иметь в виду Бейсик БК-0010-01 и Турбо-Бейсик. Турбо-Бейсик позволяет (как в БК) нумеровать все строки (но не сортирует их по номерам) и большинство операторов БК обрабатывает правильно. Есть разница, например, в последовательности параметров для операторов LOCATE (да и рабочее число строк и столбцов другое), но это отдельные детали. Список подобных отличий и ограничений можно продолжить. Более постоянная особенность - различия в обработке синтаксиса. БК как бы игнорирует пробелы в записи инструкций, и программисты пользуются их устранением для экономики памяти, сливая операторы (команды) с именами переменных и т.д. Турбо-Бейсик же такой «каши» не допускает. С другой стороны, в БК-0010 оказываются недопустимыми такие переменные, как IN или RU.
Некоторые отличия можно подправить или компенсировать специальной программой типа «претранслятора» или «конвертера».
Работа показала, что при соблюдении специальной инструкции несложные программы, работающие на БК, оказываются обрабатываемыми и Турбо-Бейсиком.
Связь разных ЭВМ на программном уровне позволяет не ограничиваться задачами пересылки данных или программ, но и создавать пары совместно работающих программ с различным разделением задач между машинами.