А – код клавиши (состояние порта а ппа в модуле клавиатуры и стробов);
В – код строб-сигнала (состояние порта В ППА);
L– номер канала синтеза;
M(L) – ячейка ОЗУ, соответствующая каналу с номеромL;
T(L) – регистр данных таймера, соответствующий каналу с номеромL.
При включении питания ЭМС происходит сброс процессора и программируемого параллельного интерфейса ППА. С адреса 0000Н начинается обработка программы: настройка портов и таймеров для работы в соответствующих режимах и заполнение ячеек ОЗУ последовательностью кодов от 31Н до 36Н. Это необходимо для исключения «молчащих» клавиш, которые могут появиться при случайной установке кодов в ОЗУ после подачи питания.
Основная часть программы начинается с опроса нулевой клавиши. Если она не нажата, то опрашивается следующая клавиша и так далее. Если очередная клавиша нажатая, то выполняется часть программы, обрабатывающая коды нажатых клавиш. Она определяет, содержится ли код данной клавиши в памяти одного из каналов, если нет, ставит в соответствие ей свободный канал синтеза. Это достигается вводом номера свободного канала из ПЗУ модуля клавиатуры и стробов, загрузкой кода клавиши в ячейку ОЗУ, соответствующую этому каналу, выбором из таблицы и загрузкой в таймер двухбайтного кода, определяющего частоту тонального сигнала и установкой активного уровня канального строб-сигнала. Далее осуществляется переход к опросу следующей клавиши. После опроса всех клавиш устанавливаются строб-сигналы каналов в соответствии с состоянием клавиш. После этого алгоритм повторяется с опроса нулевой клавиши. Если сигнал «Программа» принимает активный уровень, то после очередного прохода выполняется программа смены звучания, состоящая в поиске нажатой клавиши и загрузке ППА модуля задания параметров синтеза соответствующими ей кодами из таблицы 7.
Часть адресов ППЗУ с 0140Н по 01FFН зарезервированы под таблицу вариантов звучания и программируется в процессе окончания настройки ЭМС после отработки звучаний [1].
Таблица 7 – Содержимое ПЗУ программ
ADR |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
0000 |
3E |
89 |
32 |
03 |
02 |
3E |
80 |
32 |
03 |
06 |
3E |
36 |
32 |
00 |
0A |
3E |
0001 |
76 |
32 |
00 |
0A |
3E |
B6 |
32 |
00 |
0A |
3E |
31 |
32 |
06 |
0C |
3C |
32 |
0002 |
01 |
0C |
3C |
32 |
02 |
0C |
3C |
32 |
03 |
0C |
3C |
32 |
04 |
0C |
3C |
32 |
0030 |
05 |
0C |
3A |
02 |
02 |
E6 |
02 |
C2 |
FD |
00 |
0E |
00 |
79 |
32 |
00 |
02 |
0040 |
3A |
02 |
02 |
E6 |
01 |
C2 |
6A |
00 |
0C |
79 |
FE |
30 |
DA |
3C |
00 |
26 |
0050 |
0C |
2E |
01 |
7E |
32 |
00 |
02 |
7D |
32 |
01 |
02 |
3E |
00 |
32 |
01 |
02 |
0060 |
2C |
7D |
FE |
07 |
DA |
53 |
00 |
C3 |
32 |
00 |
26 |
2E |
2E |
01 |
7E |
E6 |
0070 |
3F |
B9 |
CA |
48 |
00 |
2C |
7D |
FE |
07 |
DA |
6E |
00 |
3A |
00 |
04 |
6F |
0080 |
26 |
0C |
71 |
26 |
08 |
16 |
00 |
79 |
07 |
C6 |
9D |
5F |
1A |
77 |
1C |
1A |
0090 |
77 |
7D |
32 |
01 |
02 |
3E |
00 |
32 |
01 |
02 |
C3 |
48 |
00 |
D8 |
06 |
75 |
00A0 |
06 |
19 |
06 |
C1 |
05 |
6E |
05 |
20 |
05 |
D7 |
04 |
91 |
04 |
50 |
04 |
12 |
00B0 |
04 |
D7 |
03 |
A0 |
03 |
6C |
03 |
3B |
03 |
0DC |
03 |
E1 |
02 |
B7 |
02 |
90 |
00C0 |
02 |
6B |
02 |
49 |
02 |
28 |
02 |
09 |
02 |
EC |
01 |
D0 |
01 |
B6 |
01 |
9D |
00D0 |
01 |
86 |
01 |
70 |
01 |
5C |
01 |
48 |
01 |
36 |
01 |
24 |
01 |
14 |
01 |
04 |
00E0 |
01 |
F6 |
00 |
E8 |
00 |
DB |
00 |
CF |
00 |
C3 |
00 |
B8 |
00 |
AE |
00 |
A4 |
00F0 |
00 |
9B |
00 |
92 |
00 |
8A |
00 |
82 |
00 |
7B |
00 |
74 |
00 |
0E |
00 |
79 |
0100 |
32 |
00 |
02 |
3A |
02 |
02 |
E6 |
01 |
C2 |
0F |
01 |
0C |
C3 |
FF |
00 |
79 |
0110 |
E6 |
3F |
51 |
C6 |
40 |
4F |
06 |
01 |
0A |
32 |
00 |
06 |
79 |
C6 |
40 |
4F |
0120 |
0A |
32 |
01 |
06 |
79 |
C6 |
40 |
0A |
32 |
02 |
06 |
06 |
00 |
7A |
32 |
00 |
0130 |
02 |
3A |
02 |
02 |
E6 |
01 |
C2 |
31 |
01 |
32 |
00 |
0E |
C3 |
3A |
00 |
FF |
Рисунок 12 – Алгоритм работы ЭМС