; подпрограмма INBYT возвращает в регистре Е микропроцессора ; восемь последовательных выборок речевого сигнала. Младший ; бит соответствует более ранней по вpемeни выборке. PORT$C SET 8002Н ; Адрес парта ввода сигнала в РК INBYT: PUSH PSW ; Сохранение содержимого (А) в стеке MVI D,9 ; Число бит в байте +1 в счетчик бит LDA PORT$C ; Ввод из порта чтения (компаратор RRC ; в компьмтере подключен к разряду D4 RRC ; порта ввода). RRC RRC ; Теперь бит отсчета - в разряде D0 ANI 1 ; Выделить только информационный бит. RRC ; Подготовка следующего бита IM1: MOV Е,А CALL TIME ; Задержка между выборками сигнала LDA PORT$C ; ввод из порта очередной выборки RRC RRC RRC RRC ; Информационный бит ANI 1 ; Выделить только информационный бит,СУ=0 JNZ IМЗ ; Установить CY, если он не равен нулю. IM2: MOV А,Е ; Информационный бит - в аккумулятор RAL ; Сдвинуть CY (информ. бит!) в аккумулятор DCR D ; Скорректировать счетчик бит JNZ IМ1 ; Если не все 8 бит считаны, продолжить POP PSW RET IM3: STC JMP IM2 ; Переход на сдвиг бита =1. ; Подпрограмма OUTBYTE выводит из микроЭВМ восемь выборок ; речевого сигнала, записанных в регистре Е микропроцессора. ; Более ранней по времени выборке соответствует младший бит ; информации. OUTBYT: PUSH PSM MVI D,8 ; регистр D используете я как счётчик бит MOV А,Е OM2: RAL ; Сдвинуть текущий бит в CY CALL TIME ДС ОМ1 PUSH PSU ; Сохранить текущий информационный бит XRA А ; Обнулить аккумулятор, в частности, D0 ОМ4: БТА РОРТ$С ; Выдать данный бит в выходной порт OM3: POP PSM ; Восстановить текущий информациооный байт DCR D ; Все в бит выданы? JNZ ОМ2 ; Нет, продолжить выдачу бит. POP PSW ; RET ; Конец вывода байта OM1: PUSH PSH MVI А,0FFН ; Установить все выдаваемые биты в "1" JMP ОМ4 ; Подпрограмма TIME обеспечивает задержку между отдельными выборками ; сигнала при вводе и выводе. Одновременно служит для регенерации ; ОЗУ компьмтера, так как при работе INBYT и OUTBYT видеоконтроллер ; остановлен! В скобках указано число машинных тактов, ; необходимых для выполнения каждой команды. TIME: PUSH PSM ; (11 T) Сохранить регистры проиесора PUSH I ; (11 T) PUSH H ; (11 T) LHLD REF ; (16 T) Загруаить указатель адреса регенерации LXl B,CONST ; (10 T) регистр В - счетчик задержки MT1: MOV A,M ; (7 T) Произвести одно обращение по адресу INX H ; (5 T) регенерации MOV A,M ; (7 Т) и по следующему адресу INX Н ; (5 T) DCR В ; (5 T) Декрементировать счетчик задержки MOV А,В ; (5 T) ORA С ; (4 T) Содержимое счетчика равно нулю ? JNZ MT1 ; (17 T/11 T) Hет, продолжить цикл SHLD REF ; (16 T) Запомнить указатель адреса регенерации POP Н ; (11 Т) Восстановить содержимое регистров POP В ; (11 Т) процессора POP PSW ; (11 Т) RET ; (10 Т) Выход из подпрограммы задержки ; Праграмма INRAM ввoдит в указанную область ОЗУ ; компьютера массива отсчетов сигнала заданной длины (запись речи) DМА SET 0F808Н ; Адрес контроллера ПДП INRAM: LXI H,NATCH ; НАЧАЛЬНЫЙ адрес записываемого МАССИВА LXI D,DEL ; ДЛИНА записываемого МАССИВА в байтах. MVI А,80Н ; Выключение контроллера дисплея 8ТА DMA ; НА время ЗАПИСИ звука INM1: CALL INBYT ; Прием восьми выборок СИГНАЛА MOV М,Е ; ЗАПИСЬ подготовленного БАЙТА в ОЗУ и INX Н ; указателя на элемент МАССИВА DCX В ; коррекция СЧЁТЧИКА байт MOV А,B ; МАССИВ ЗАПОЛНЕН ? ORA С JNZ INM1 ; Нет, продолжим запись JMP MONITOR ; Выход в монитор с ЗАПУСКОМ видеоконтроллера ; ПРОГРАММА OUTRAM выводит массив, записанный программой INRAM ; в виде последовательности отсчётов речевого СИГНАЛА ; ("воспроизведение речи") OUTRAM: LXI Н, MATCH ;НАЧАЛЬНЫЙ адрес МАССИВА отсчетов LXI В, DEL ; ДЛИНА выводимого массива в байтах MVI А,80Н STA DMA OUTM1: MOV Е,М ; Текущий байт выборок в аккумулятор CALL OUTBYT ; ВЫДАЧА 8 выборок СИГНАЛА НА выход INX Н DCX B ; уменьшить счетчик байт MOV A,B ORA С ; МАССИВ выдан полностью? JNZ OUTM1 ; Нет, продолжить выдачу JMP MONITOR END