Д. УСЕНКОВ

(Москва)

Музыкальный редактор для Бейсик-Вильнюса БК-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. В этом случае кодирующую ноты текстовую строку нужно разделить на две или три меньших.

Литература:

  1. Кетков Ю.Л. «Диалог на языке Бейсик для мини- и микро-ЭВМ», «Наука», 1988, стр. 340
  2. Г. Бленд «Основы программирования на языке Бейсик в стандарте MSX», Москва, «Финансы и статистика», 1989.

Заключение рецензента

К большому сожалению пользователей БК всё, что Усенков Д.Ю. высказал о версии Бейсика БК-0010.01, верно. Но и это ещё не всё! Любой из достаточно опытных пользователей может ещё много чего добавить. Например, о работе со строками, массивами, графикой.

Усенков Д.Ю. частично устранил одну из несправедливостей в отличии Бейсика БК от Бейсика MSX, предложив программу в кодах, музифицирующую БК-0010.01. Программа вполне работоспособна. Правда, кодировка нот и длительностей не совсем удобна. Лучше было бы придерживаться того, как это реализовано в Бейсике MSX.

Жариков Л.Н.


 

На Бейсике с помощью операторов PLAY и SOUND легко составить простые мелодии. Однако все они одноголосные, т.е. в конкретный момент времени звучит лишь одна нота. Большинство же музыкальных произведений 4-5-голосные. Как составить программу, исполняющую одновременно до 5 нот с различной длительностью? Можно ли это выполнить на Бейсике?

Читатель М. Степницкий (г. Саранск)

Г. ПИМЕНОВ, Д. ПИМЕНОВ

(г. Мурманск)

Четырёхголосный музыкальный редактор на Бейсике для БК-0010.01 (БК-11М)

В отличие от многих зарубежных бытовых компьютеров БК имеет существенный недостаток: у него отсутствует музыкальный процессор. Его отсутствие в некоторой степени возмещалось программированием одноголосных мелодий через контроллер магнитофона (регистр 177716). Появились музыкальный Бейсик, Фокал, «Меломан» и множество других программ для создания и исполнения компьютерной музыки. Среди них выделяется программа «Клавесин» В. Савина - трёхголосный музыкальный редактор, но и он не смог удовлетворить взыскательного меломана. Сложную мелодию без искажений переложить не удаётся, да и три голоса явно недостаточно.

Нами был разработан четырёхголосный редактор на Бейсике. Имитацию музыкального процессора осуществляет программа в машинных кодах. Особенность этой программы в том, что управление регистром 177716 осуществляется встроенным таймером (адреса 177706, 177710, 177712). Перечислим некоторые достоинства редактора:

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

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.

Подпрограмма, воспроизводящая мелодию, состоит из трёх частей:

  1. подпрограмма воспроизведения;
  2. коды длительностей нот;
  3. коды высот нот.

Первая часть загружается один раз и вызывается по мере необходимости. Вторую и третью части, а также содержимое ячейки &О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 - условная скорость изменения тона:

После небольшой переделки эту программу можно использовать в программах на Бейсике. Но в программах на Бейсике и подпрограмме в кодах передаётся только один аргумент. В этом случае можно поступить, например, так: подобрать параметры для 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 В с блока питания компьютера, или завести электронный сигнал в тракт звуковой частоты телевизора, который чаще всего используется в качестве монитора. Однако эти варианты сложны и автором не опробовались.

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

Литература

  1.  Янцев В. Минимум деталей и полчаса времени - и в ваших руках усилитель низкой частоты // Юный техник. - 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 существует в пяти различных исполнениях с различными назначением, комплектностью и стоимостью.

  1. «Бытовой компьютер»: в комплект входят информационно-вычислительный блок (клавиатура и процессорная электроника компьютера; для краткости будем далее называть этот блок просто «клавиатура»), блок питания, блок МСТД, отдельный блок контроллера принтера, кассета с программами на Бейсике (кстати, всё с теми же, что и для БК-0010), соединительные шнуры и руководство для пользователя (описание системы, монитора и Бейсика).
  2. «РМУ (рабочее место ученика)»: клавиатура, блок питания, черно-белый монитор, контроллер локальной сети (внешний блок), кабели и руководство пользователя.
  3. Базовое РМП (рабочее место преподавателя): клавиатура, блок питания, блок МСТД, черно-белый монитор, принтер, сдвоенный дисковод, контроллер принтера, дискеты с ОС БК-0011, Бейсиком, Паскалем, Микроассемблером и чистые, кабели и полный комплект документации по всем перечисленным языкам, а также по системе, устройству и системному программированию для БК-0011 В этом же комплекте прилагаются все принадлежности, необходимые для создания на базе БК-0011 компьютерного класса.
  4. «Дополнительное РМП»: клавиатура, блок питания, МСТД, контроллеры принтера и дисковода, кабели, кассета с программами, дискеты с ОС БК-0011 и чистые, набор документации.
  5. «Профессиональная ЭВМ»: клавиатура, блок питания, МСТД, черно-белый монитор, принтер, сдвоенный дисковод, контроллеры принтера и дисковода, кассета с программами, дискеты с ОС БК-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 следующие:

  1. регистр данных клавиатуры (@#177662): добавлены биты, доступные для записи:

    15 - разрешение прерывания по СТОП (0-разрешение)

    14 - прерывание от встроенного таймера

    48,5 Гц

    8-11 - номер палитры (по таблице)

  2. системный регистр (@#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.

  3. Регистры дисковода:

    @ #177130 - регистр состояния;

    @ #177132 - регистр данных.

  4. регистр принтера: при подключённом к порту (@#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:

  1. в связи с увеличением объёма памяти, отпущенного под транслятор, появилась возможность вывода расширенных сообщений об ошибке. Теперь вместо номера ошибки выводится краткая текстовая подсказка, как это сделано в Фокале БК-0010;
  2. команда MONIT переименована в SYSTEM;
  3. в связи с большим объёмом памяти и с возможностью установки нескольких пользовательских ПЗУ появилась возможность использовать команду CALL, которая в Бейсике БК-0010 присутствует явно больше «для проформы»;
  4. добавлена весьма полезная текстовая функция INSTR - поиск начала вхождения подстроки в текстовую строку,
  5. в операторах DEF USR, BLOAD, BSAVE, POKE, PEEK, OUT и INP в список аргументов добавлено указание номера страницы ОЗУ;
  6. добавлена команда SCREEN, позволяющая переключать буферы экрана, указывая номер экрана для вывода информации и номер экрана, демонстрируемого на мониторе (пример: SCREEN 1 SHOW 0), а также разрешающая/запрещающая переключение страницы ОЗУ к экрану (SCREEN 1 ON - разрешение, SCREEN 0 OFF - запрет); страницы ОЗУ, отключённые от экрана, могут быть использованы для программы пользователя;
  7. улучшены возможности оператора BEEP - теперь можно задавать длительность и частоту звука,
  8. реализована функция SPS, генерирующая указанное число пробелов при выводе на экран или принтер;
  9. реализован оператор MERGE, позволяющий формировать программы на Бейсике из стандартных блоков, записанных на магнитофон;
  10. появилась очень полезная при вызове USR-подпрограмм функция VARPTR, позволяющая определить адрес содержимого указанной переменной в ОЗУ БК, что позволяет передавать большее количество данных в подпрограмму USR.
  11. появилась новая возможность в операторе DIM: если размерность массива записывать не в круглых, а в квадратных скобках, то будет создан виртуальный массив, расположенный в скрытых страницах. Это позволит хранить большие объёмы данных, но время обращения к такому массиву больше, чем к обычному.

К сожалению, создатели БК-0011 приготовили пользователям этого компьютера неприятный сюрприз: в отдельных версиях Бейсика не реализованы операторы TRON и TROFF, рисование прямоугольников оператором LINE с аргументом В и WF и, что особенно плохо, не реализован оператор DRAW. Кроме того, время компиляции оказалось в 4-5 раз большим, чем в БК-0010. Это связано с тем, что Бейсик при компиляции постоянно переключает страницы, размещая данные в памяти наиболее «удобным» способом, а также хранит часть данных в скрытых страницах ОЗУ с большим временем доступа.

ОС БК-0011

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

  1. комбинация клавиш СУ+С позволяет прерывать выполнение программы на Бейсике. Двукратное нажатие вызывает немедленное прерывание, а однократное срабатывает «чуть позже», когда в программе встречается оператор ввода данных. Отдельная команда позволяет разрешить или блокировать данное использование комбинации СУ+С;
  2. назначение устройства (DEVICE) позволяет установить устройство - адресат для передачи информации (терминал, дисковод или принтер);
  3. установка длины телевизионной строки,
  4. команда ABORT - оператор Бейсика, аналогичный NEW, но в отличие от него, позволяющий указать БК, нужно ли стереть данную программу из памяти, или её следует оставить;
  5. разрешение/запрет паузы по СУ+О - аналог применяемой в БК-0010 комбинации СУ + @ и клавиши PAUSE IBM-подобных ЭВМ,
  6. в набор Бейсика могут быть включены трансцендентные арифметические функции 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 осуществляет НПКП «ИнтерСервер».

Обзор системного и прикладного ПО

Программная совместимость ОС и формата гибких дисков позволяет использовать всё программное обеспечение, разработанное для ДВК и УКНЦ. Ограничения, накладываемые на программы:

Этим ограничениям удовлетворяют почти все системы программирования (MACRO, С, PASCAL, FORTRAN, Modula-2), экранные редакторы (EDIK, К52, SCREEN) и многие другие программы.

Рассмотрим далее некоторые особенности программ, специально разработанных для БК-0011М.

Операционная оболочка Inter Commander

Аналог популярной оболочки MS-DOS Norton Commander. Позволяет в простой и удобной форме, не используя команд ОС, просматривать каталоги устройств, запускать, редактировать, копировать, переименовывать и удалять файлы и группы файлов, а также вводить, редактировать и выполнять команды операционной системы. Кроме того, можно настроить функции просмотра, редактирования и запуска в зависимости от типа файла. Программа имеет встроенную подсказку с описанием функциональных клавиш. Каталоги программ в панелях могут быть отсортированы по различным параметрам. Имеется иерархическое меню, настраиваемое пользователем. Работа с программой возможна с использованием клавиатуры или манипулятора «мышь» (УВК-01).

Экранный редактор EdikM

Аналог известного на ДВК редактора EDIK. Помимо полного набора функций EDIK’a, обладает следующими возможностями:

Исполняющая система Exe10plus

Позволяет эмулировать среду БК-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.

Некоторые отличия можно подправить или компенсировать специальной программой типа «претранслятора» или «конвертера».

Работа показала, что при соблюдении специальной инструкции несложные программы, работающие на БК, оказываются обрабатываемыми и Турбо-Бейсиком.

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

 

 

Performed by © gid, 2012-2024.