$CHIP=Z80
;  **********************************************************************
;  *                                                                    *
;  *   ПРОГРАММА АОН  "V1194"                                           *
;  *                                                                    *
;  **********************************************************************
;
        DEFSEG  segabs, ABSOLUTE
        SEG     segabs
        ORG       0000H

;
;       АДРЕСА СИСТЕМНЫХ УСТРОЙСТВ
;
CW55    equ 0DBH   ; слово управления порта ВВ55
CA55    equ 0C3H   ; канал А порта ВВ55
CB55    equ 0CBH   ; канал В порта ВВ55
CC55    equ 0D3H   ; канал С порта ВВ55
CW53    equ 0BBH   ; слово управления таймера ВИ53
C053    equ 0A3H   ; счетчик 0 таймера ВИ53
C153    equ 0ABH   ; счетчик 1 таймера ВИ53
C253    equ 0B3H   ; счетчик 2 таймера ВИ53
IR22    equ 07BH   ; регистр сегментов дисплея



YB800   EQU       0B800H
YB802   EQU       0B802H  ; счетчик делителя на 4
YB803   EQU       0B803H  ; флаги режимов

;                          0 0 0 день недели,часы,минуты
;      XXXXXXXX            0 0 1 часы,минуты,секунды
;      ¦¦¦¦¦¦¦------       0 1 0 число,месяц,год
;      ¦¦¦¦¦¦L------       0 1 1 состояние линии
;      ¦¦¦¦¦L-------       1 0 0 номер телефона
;      ¦¦¦¦фиксация вывода
;      ¦¦¦режим телефона  00 - 'n'
;      ¦¦режим телефона   01 - 'P'
;      ¦режим охраны      10 - 'A'
;      ночной телефон     11 - '-'
;
;
;
YB804   EQU       0B804H  ; минуты последнего звонка
YB805   EQU       0B805H  ; секунды последнего звонка
YB806   EQU       0B806H  ; 2-е ячейки сохранения стека
YB809   EQU       0B809H  ; смещение для списка звонков
YB80A   EQU       0B80AH  ; смещение для входа в списки
YB80B   EQU       0B80BH  ; маска для первой цифры номера
YB80C   EQU       0B80CH  ; смещение для записной книжки
YB80D   EQU       0B80DH  ; количество цифр записываемых в память
YB80E   EQU       0B80EH  ; флаги состояния
;
;    XXXXXXX
;    ¦¦¦¦¦¦¦1-пауза при автодозвоне
;    ¦¦¦¦¦¦1-флаг поступления звонка
;    ¦¦¦¦¦1-делать первый запрос (1)
;    ¦¦¦¦1-озвучивать каждый час
;    ¦¦¦1-громкий набор
;    ¦¦1-мелодичное звучание клавиш
;    ¦1-флаг набора номера
;    1-флаг поднятой трубки

YB810   EQU       0B810H  ; состояние канала А
YB811   EQU       0B811H  ; счетчик звонков
YB812   EQU       0B812H  ; состояние канала С
YB813   EQU       0B813H  ; временное хранение скан-кода
YB814   EQU       0B814H  ; хранение константы задержки DELAY
YB815   EQU       0B815H  ; флаги дополнительных установок
;        7 6 5 4 3 2 1 0
;        x x x x x x x x
;                      ¦
;                      L- флаг блокировки восьмерки
;
;
;
;

YB816   EQU       0B816H
YB817   EQU       0B817H
YB818   EQU       0B818H
YB819   EQU       0B819H  ; счетчик знакомест
YB81A   EQU       0B81AH  ; скан-код клавиши
YB81B   EQU       0B81BH
YB81C   EQU       0B81CH
YB81D   EQU       0B81DH
YB81E   EQU       0B81EH
YB81F   EQU       0B81FH
YB820   EQU       0B820H  ; сотые секунды
YB821   EQU       0B821H  ; секунды
YB822   EQU       0B822H  ; минуты
YB823   EQU       0B823H  ; часы
YB824   EQU       0B824H  ; дни недели
YB825   EQU       0B825H  ; дни месяца
YB826   EQU       0B826H  ; месяцы
YB827   EQU       0B827H  ; годы
YB828   EQU       0B828H  ; количество немаскируемых цифр
YB829   EQU       0B829H  ; счетчик 200
YB82B   EQU       0B82BH  ; таймер
YB82C   EQU       0B82CH
YB830   EQU       0B830H  ; начало видеобуфера
YB838   EQU       0B838H  ; конец видеобуфера
YB839   EQU       0B839H  ; начало области будильников
YB83E   EQU       0B83EH  ; конец области будильников
YB840   EQU       0B840H  ; начало области видеоаттрибутов
YB848   EQU       0B848H  ; конец области видеоаттрибутов
YB849   EQU       0B849H  ; начало буфера текущего номера
YB857   EQU       0B857H  ; конец буфера номера (категория номера)
YB858   EQU       0B858H  ; день недели номера
YB859   EQU       0B859H  ; день месяца номера
YB85A   EQU       0B85AH  ; год номера
YB85B   EQU       0B85BH  ; часы номера
YB85C   EQU       0B85CH  ; минуты номера
YB85D   EQU       0B85DH  ; конец области дислоцирования номера
YB860   EQU       0B860H  ; начало буфера сохранения номера
YB86F   EQU       0B86FH  ; конец буфера сохранения номера
YB870   EQU       0B870H  ; начало буфера номеров будильников
YB87F   EQU       0B87FH  ; конец буфера номеров будильников
YB8FF   EQU       0B8FFH  ; начало системного стека
YB900   EQU       0B900H  ; начало записной книжки номеров
YBC1F   EQU       0BC1FH  ; конец записной книжки номеров
YBC20   EQU       0BC20H  ; начало записной книжки звонков
YBF00   EQU       0BF00H  ;
YBF3F   EQU       0BF3FH  ; конец записной книжки звонков
YBF40   EQU       0BF40H  ; массив текущих разностей (12 ячеек)
YBF50   EQU       0BF50H  ; область записи первичного кода (80 ячеек)
YBFA0   EQU       0BFA0H  ;
YBFB0   EQU       0BFB0H  ; область первичных цифр (20 ячеек)
YBFDO   EQU       0BFD0H  ;
XF000   EQU       0F000H
XF8FF   EQU       0F8FFH
YFA03   EQU       0FA03H
XFE7F   EQU       0FE7FH
XFF00   EQU       0FF00H
XFF3F   EQU       0FF3FH
YFF67   EQU       0FF67H



A0000:  DI
        LXI     X,0B800H
        JMP     A0063
;
        MVI     A,0C8H   ; RST1 Задержка 0.2 сек
        JMP     A065F    ;
;
        RST     7
        RST     7
        RST     7
;
        EXX              ; RST2 Обнуление буфера
        LXI     H,0B840H ;      видеоаттрибутов B840h-B848h
        MVI     B,009H
        JMPR    A003F
;
        LDA     YB81A    ; RST3 Обработка скан-кода нажатой клавиши
        CPI     070H     ;
        JMP     A11B1
;
        EXX              ; RST4 Обнуление видеобуфера B830h-B838h
        LXI     H,0B830H ;
        MVI     B,009H
        JMPR    A003F
;
        EXX              ; RST5 Неполное обнуление видеобуфера
        LXI     H,0B831H ;                         B831h-B838h
        MVI     B,007H
        JMPR    A003F
;
A0030:  EXX              ; RST6 Трансляция буфера номера B850h-B858h
        LXI     B,0B850H ;       в видеобуфер
        JMP     A05E8
;
        RST     7
;
        PUSH    PSW      ; RST7 Обслуживание прерываний по входу
        XRA     A        ;      INT в режиме IM1
        OUT     IR22
        JMP     A0122
;
A003F:  db 36H,00,2CH,10H,0FBH,0D9H,0C9H
;
;                ЗАСТАВКА
T0046:  db 3FH  ; 'O'
        db 76H  ; 'H'
        db 40H  ; '-'
        db 00H  ; ' '
        db 06H  ; '1'
        db 6FH  ; '9'
        db 6fH  ; '9'
        db 6DH  ; '5'
        db 77H  ; 'A'

T004F:  db 3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH ;  кодировочная таблица цифр
L0059:  db 08,00,0CH,08
;
;                 НАЧАЛЬНАЯ ДАТА
L005D:  db 00  ;  минуты
        db 12  ;  часы
        db 03  ;  день недели
        db 01  ;  день месяца
        db 02  ;  месяц года
        db 95  ;  год

; ---------------------------------------------------------------------¬
; ¦                                                    MAIN BLOCK      ¦
; ¦                                                                    ¦
; L---------------------------------------------------------------------
A0063:  LXI     SP,0B8FFH
        LXI     H,T02CB     ;
        PUSH    H
        MVI     A,082H      ; Программирование КР580ВВ55
        OUT     CW55
        MVI     A,11000000B ; Разрешение счетчиков 1 и 2
        OUT     CA55
        LXI     H,0B800H    ; Проверка маркеров целостности информации
        XRA     A
        OUT     IR22
        MOV     A,M
        CPI     0AAH
        JRZ     A0081
        INR     L
        MOV     A,M
        CPI     088H
A0081:  JZ      A00D1
        MVI     L,000H
        MVI     B,090H
;---------------------------- инициализация при потере информации

A0088:  MVI     M,000H      ; обнуление области YB800-YB88F
        INR     L
        DJNZ    A0088
        MVI     A,00001001B ; все ключи в пассивное состояние
        OUT     CC55
        STA     YB812
        MVI     A,0C0H      ; разрешить счетчики 1 и 2
        STA     YB810
        LXI     H,T0046     ; Вывод заставки на индикатор
        LXI     D,0B830H
        LXI     B,0009
        LDIR
        MVI     L,059H      ; Загрузка будильников
        MVI     E,039H
        MVI     C,006H
        LDIR
        MVI     L,05DH      ; Загрузка начальной даты
        MVI     E,022H
        MVI     C,006H
        LDIR
        LXI     H,0B809H
        MVI     M,000H      ; [YB809]=0
        INR     L
        MVI     M,000H      ; [YB80A]=0
        INR     L
        MVI     M,002H      ; [YB80B]=2
        INR     L
        MVI     M,064H      ; [YB80C]=100
        INR     L
        INR     L
        MVI     M,00100000B ; [YB80E]
;                 ||||||||-- 1 пауза при автодозвоне
;                 |||||||--- 1 флаг поступления звонка
;                 ||||||---- 1 делать запрос
;                 |||||----- 1 озвучивать каждый час
;                 ||||------ 1 громкий набор
;                 |||------- 1 мелодичное звучание клавиш
;                 ||-------- 1 флаг набор номера прошел
;                 |--------- 1 флаг поднятой трубки

        MVI     A,006H      ; количество немаскируемых цифр
        STA     YB828
        MVI     LOW(YB814)(X),40 ; Загрузка параметра DELAY
        CALL    A00D1       ; Программирование счетчиков
        JMP     A197A
;----------------------------
; Инициализатор счетчиков и прерываний
;----------------------------
A00D1:  RST     2           ; Обнуление видеоаттрибутов
        MVI     A,030H      ; Скан-код = 30H
        STA     YB81A
        LDA     YB812
        OUT     CC55
        MVI     A,0C0H      ; Разрешить счетчики 1 и 2
        STA     YB810
        MVI     A,036H      ; Сч 0 - режим 3
        OUT     CW53
        MVI     A,074H      ; Сч 1 - режим 2
        OUT     CW53
        MVI     A,0B0H      ; Сч 2 - режим 0
        OUT     CW53
        MVI     A,0E4H      ; Сч 0 = 22E4H (8932)
        OUT     C053
        MVI     A,022H
        OUT     C053
        MVI     A,0FFH      ; Сч 1 = FFFFH (65535)
        OUT     C153
        OUT     C153
        LXI     H,0B800H    ; Установка маркеров сохранности информации
        MVI     M,0AAH
        INR     L
        MVI     M,088H
        IN      CB55        ; Привести ключи в соответствие с положением
        BIT     2,A         ; трубки
        MVI     A,001H
        JRZ     A010D
        MVI     A,009H
A010D:  OUT     CC55
        STA     YB812
        IM1
        EI
A0115:  HLT
        LDA     YB802       ; Корректировка часов
        ORA     A
        JRNZ    A0115
        ADI     002H
        STA     YB802
        RET
;----------------------------
;======================================================================
;                      БЛОК ОБРАБОТКИ ПРЕРЫВАНИЙ
;======================================================================
;----------------------------
A0122:  DI
        PUSH    H
        PUSH    D
        PUSH    B
        IN      CB55        ; Переустановка сбросового таймера
        BIT     2,A         ; если подняли трубку
        JRNZ    A012F
        CALL    A02BF
A012F:  LXI     H,0B819H    ; Адрес счетчика знакомест индикатора
        INR     M
        MOV     A,M
        CPI     009H        ; Обнулить счетчик если пройдено последнее
        JRC     A013A       ; знакоместо на индикаторе
        XRA     A
        MOV     M,A
A013A:  MOV     C,A         ; [C] - счетчик линий опроса клавиатуры
        ADI     030H        ; Формирование адреса символа в видеобуфере
        MOV     L,A
        MOV     B,M         ; Регистр [B] - выводимый символ
        LXI     D,0B810H    ; Формирование байта вывода в порт [A]
        LDAX    D
        ANI     0F0H
        ADD     C
        STAX    D
        OUT     CA55
        MVI     A,010H      ; Формирование адреса видеоаттрибута символа
        ADD     L
        MOV     L,A
        MOV     A,M
        CPI     001H        ; Игнорировать обработку видеоаттрибута если он
        JRNZ    A015B       ; не равен 01
        LDA     YB829       ; Если установлен видеоаттрибут ,то символ
        CPI     064H        ; моргает с частотой 2 Гц
        JRC     A015B
        MVI     B,000H
A015B:  IN      CB55        ; Ввести состояние клавиатуры
        ANI     0C0H        ; Выделить необходимые биты
        RRC
        RRC
        ADD     C
        MVI     E,01AH
        MVI     L,013H
        PUSH    B
        MOV     B,A
        CPI     030H
        JRNC    A016F
        CALL    A02BF       ; Переустановить сбросовый счетчик если клавиша
A016F:  MOV     A,C         ; нажата
        CPI     003H
        JRNZ    A017E
        MVI     M,000H
        MOV     A,B
        CPI     013H
        JRNZ    A017E
        MOV     M,A
        JMPR    A0189
;
A017E:  MOV     A,M
        CPI     013H
        JRNZ    A0189
        LDAX    D
        CPI     015H
        JZ      0000        ; Выход по комбинации клавиш "*" + "#"
A0189:  MVI     L,02EH      ; Отработка нажатия клавиши
        MOV     A,M
        ORA     A
        JRZ     A01AD
        DCR     M
        INR     L
        MOV     A,M
        CMP     C
        JRNZ    A01B6
        DCR     L
        MOV     A,B
        CPI     030H
        JRC     A019F
        MVI     M,000H
        JMPR    A01A7
;
A019F:  MOV     A,M
        ANI     0F0H
        JRNZ    A01B6
        MVI     M,028H
        MOV     A,B
A01A7:  STAX    D
        CALL    A028B       ; Сброс генерации тона Сч 2
        JMPR    A01B6
;
A01AD:  MOV     A,B
        CPI     030H
        JRNC    A01B6
        STAX    D
        DCR     M
        INR     L
        MOV     M,C
A01B6:  POP     B
        MOV     A,B
        OUT     IR22        ; Зажечь символ на индикаторе

        ; Ведение счетчиков времени

        MVI     L,029H      ; Ведение счетчика 200
        INR     M
        MOV     A,M
        CPI     0C8H
        JRNZ    A01C4
        MVI     M,000H
A01C4:  MVI     L,002H      ; Ведение делителя на 4
        INR     M
        MOV     A,M
        CPI     004H
        JRNZ    A01F9
        MVI     M,000H      ; Ведение сотых долей секунды
        MVI     L,020H
        INR     M
        MOV     A,M
        CPI     100
        JRC     A01F9
        MVI     M,000H      ; Ведение таймера секунд
        LDA     YB82B
        ORA     A
        JRZ     A01E2
        DCR     A
        STA     YB82B
A01E2:  INR     L           ; Ведение секунд
        INR     M
        MOV     A,M
        CPI     60
        JRC     A01F9
        MVI     M,000H
        INR     L           ; Ведение минут
        INR     M
        MOV     A,M
        CPI     60
        JRC     A01F9
        MVI     M,000H
        INR     L           ; Ведение часов
        INR     M
        MOV     A,M
        CPI     24
A01F9:  JC      A0250
        MVI     M,000H
        INR     L           ; Ведение дней недели
        INR     M
        MOV     A,M
        CPI     8
        JRC     A0207
        MVI     M,001H
A0207:  INR     L           ; Ведение дней месяца
        INR     M
        LDA     YB826
        CPI     002H
        JRNZ    A0224       ; Корректировка числа дней в феврале если год
        LDA     YB827       ;  високосный
        ANI     003H
        MOV     A,M
        JRZ     A021E
        CPI     29
        JRC     A0250
        JMPR    A023C
;
A021E:  CPI     30
        JRC     A0250
        JMPR    A023C
;
A0224:  CPI     8
        BIT     0,A
        JRNC    A022E
        JRNZ    A0237
        JMPR    A0230
;
A022E:  JRZ     A0237
A0230:  MOV     A,M
        CPI     31
        JRC     A0250
        JMPR    A023C
;
A0237:  MOV     A,M
        CPI     32
        JRC     A0250
A023C:  MVI     M,001H
        INR     L           ; Ведение счетчика месяцев
        INR     M
        MOV     A,M
        CPI     13
        JRC     A0250
        MVI     M,001H
        INR     L           ; Ведение счетчика лет
        INR     M
        MOV     A,M
        CPI     100
        JRC     A0250
        MVI     M,000H
A0250:  POP     B
        POP     D
        POP     H
        POP     PSW
        EI
        RETI
; -----------------------------------------------------------------------¬
; ¦                   КОНЕЦ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ            ¦
; ¦                                                                      ¦
; L-----------------------------------------------------------------------
;
;----------------------------
; идентификация импульса звонка
;
; Выход : флаг С=0 - импульс идентифицирован
;----------------------------
A0257:  PUSH    B
        LXI     B,3200H
A025B:  IN      CB55
        BIT     1,A
        JRZ     A0262
        INR     C
A0262:  XRA     A
        CALL    A065F
        LDA     YB81A
        CPI     030H
        JRC     A0272       ; срочный выход если нажата клавиша
        DJNZ    A025B
        MOV     A,C
        CPI     005H        ; импульс идентифицирован если
                            ; зафиксировано не менее 5 HIGH-состояний
                            ; за 50 1-милисекундных периодов
A0272:  POP     B
        RET
;----------------------------
; загрузка СЧ2 из регистра DE , сложить состояние канала А с регистром А
;----------------------------
A0274:  EXAF
        MVI     A,0B6H
        OUT     CW53
        MOV     A,E
        OUT     C253
        MOV     A,D
        OUT     C253
        EXAF
        MOV     E,A
        LDA     YB810
        ORA     E
        STA     YB810
        OUT     CA55
        RET
;----------------------------
; блокировка УНЧ , OUT2 = 0
;----------------------------
A028B:  MVI     A,10110000B ; СЧ2 в режим 0 , сигнал OUT2 = 0
        OUT     CW53
        LDA     YB810
        ANI     01101111B   ; блокировка УНЧ и СЧ2
        STA     YB810
        OUT     CA55
        RET
;----------------------------
; СЧ2 в режим 3 , включение прослушивания линии
;----------------------------
A029A:  MVI     A,10110110B ; СЧ2 в режим 3
        OUT     CW53
        LDA     YB812
        SET     7,A         ; включение прослушивания линии
        STA     YB812
        OUT     CC55
        LDA     YB810
        SET     4,A         ; разблокировка УНЧ
        STA     YB810
        RET
;----------------------------
; блокировка УНЧ , выкл СЧ2 , блокировка прослушивания линии
;----------------------------
A02B1:  CALL    A028B
        LDA     YB812
        RES     7,A         ; блокировка прослушивания линии
A02B9:  STA     YB812
        OUT     CC55
        RET
;----------------------------
; сброс СЧ1 , перезагрузка сбросового таймера
;----------------------------
A02BF:  LDA     YB810
        RES     6,A
        OUT     CA55
        SET     6,A
        OUT     CA55
        RET
;----------------------------
; Арбитр вывода на индикацию
;----------------------------
T02CB:  LXI     D,T02CB
        PUSH    D
        LXI     D,T03D5
        PUSH    D
        RST     2
        MVI     L,003H      ; Если BIT3(YB803)=1 то не изменять содержимое
        BIT     3,M         ;  индикатора
        RNZ
        MOV     A,M
        BIT     2,A
        JRNZ    A0354
        ANI     007H
        JRNZ    A030F

        ; Вывод времени в формате <день недели , часы , минуты >

A02E2:  MVI     L,030H
        MVI     M,000H
        INR     L
        LDA     YB824
        CALL    A0527
        MOV     M,E
        INR     L
        MVI     M,000H
        INR     L
        LDA     YB823
        CALL    A0540
        LDA     YB820
        CPI     032H
        JRC     A0303
        MVI     A,040H
        JMPR    A0304
;
A0303:  XRA     A
A0304:  MOV     M,A
        LDA     YB822
        INR     L
        CALL    A0540
        MVI     M,000
        RET

        ; Вывод в формате < часы , минуты , секунды >

A030F:  DCR     A
        JRNZ    A032F
A0312:  MVI     L,030H
        LDA     YB823
        CALL    A0540
        MVI     M,040H
        INR     L
        LDA     YB822
        CALL    A0540
        MVI     M,040H
        INR     L
        LDA     YB821
        CALL    A0540
        MVI     M,00
        RET

        ; Вывод - < пустой индикатор >

A032F:  DCR     A
        JRZ     A0334
        RST     4
        RET

        ; Вывод в формате < число месяца , месяц , год >

A0334:  MVI     L,030H
        LDA     YB825
        CALL    A0540
        MVI     M,040H
        INR     L
        LDA     YB826
        CALL    A0540
        MVI     M,040H
        INR     L
        LDA     YB827
        CALL    A0540
        MVI     M,05EH
        RET

        ; Вывод в формате < литера режима , номер телефона >

A0351:  LDA     YB803
A0354:  MVI     L,030H
        MVI     M,000H
        BIT     7,A
        JRZ     A035E
        MVI     M,080H
A035E:  BIT     6,A
        MVI     L,038H
        MVI     M,000H
        JRZ     A0368
        MVI     M,080H
A0368:  ANI     030H
        JRNZ    A036E
        MVI     A,054H      ; 'n'
A036E:  CPI     010H
        JRNZ    A0374
        MVI     A,073H      ; 'P'
A0374:  CPI     020H
        JRNZ    A037A
        MVI     A,077H      ; 'A'
A037A:  CPI     030H
        JRNZ    A0380
        MVI     A,040H      ; '-'
A0380:  ORA     M
        MOV     M,A
        RST     6
        RET
;----------------------------
; Установка режимов
;----------------------------
A0384:  RST     2
        CALL    A0351
        MVI     048H(X),001H
        MVI     040H(X),001H
        RST     1
        CALL    A0CFC
        RST     3
        CPI     00BH
        RZ
        MVI     L,003H
        DCR     A
        JRNZ    A03B0
        MOV     A,M
        ANI     030H
        CPI     030H
        MVI     E,000H
        JRZ     A03A9
        ADI     010H
        MOV     E,A
A03A9:  MOV     A,M
        ANI     0CFH
        ORA     E
        MOV     M,A
        JMPR    A0384
;
A03B0:  DCR     A
        JRNZ    A03BD
        BIT     6,M
        RES     6,M
        JRNZ    A0384
        SET     6,M
        JMPR    A0384
;
A03BD:  DCR     A
        JRNZ    A0384
        BIT     7,M
        RES     7,M
        JRNZ    A0384
        SET     7,M
        JMPR    A0384
;----------------------------
; Установка заставки
;----------------------------
A03CA:  MVI     L,003H
        MOV     A,M
        INR     M
        BIT     2,A
        RZ
        ANI     0F8H
        MOV     M,A
        RET
;
;----------------------------
;**********************************************************
; Основной блок программы
;**********************************************************
;----------------------------
T03D5:  CALL    A0CFC       ; Контроль звонка ,состояния линии , трубки
                            ;  и управление функциями телефона и АОН
        RST     3           ; Обработка ввода с клавиатуры
        ORA     A
        JZ      A1042       ; "0" Набор при положенной трубке
        DCR     A
        JRZ     A0384       ; "1" Вход в установку режимов
        DCR     A
        JZ      A057B       ; "2" Прослушивание телефонной линии
        DCR     A
        JZ      A1248       ; "3" Вход в установку будильников
        DCR     A
        JRZ     A03CA       ; "4" Установка заставки
        DCR     A
        JZ      A1012       ; "5" Набор номера ячейки записной книжки
        DCR     A
        JZ      A048E       ; "6" Секундомер
        DCR     A
        JZ      A0761       ; "7" Вход в записную книжку
        DCR     A
        JZ      A075C       ; "8" Вход в список звонивших
        DCR     A
        JZ      A1446       ; "9" Вход в режим установок
        DCR     A
        JZ      A0B75       ; "#" Автодозвон
        DCR     A
        RZ
        LDA     YB80E       ; Миновать этот участок если идет разговор
        BIT     6,A         ;  после набора номера
        RNZ
        LDA     YB803       ; Миновать проверку датчика если не установлен
        BIT     6,A         ; режим охраны
        JRZ     A0419
        IN      CB55
        BIT     5,A
        JZ      A0F40       ; Начать дозвон если сработал датчик
A0419:  IN      CB55
        BIT     3,A
        RNZ                 ; Выйти если линия не занята
        BIT     2,A
        RZ                  ; Выйти если поднята трубка

        ; Начало определения номера набираемого на параллельном телефоне

        MVI     C,0FFH
        CALL    A02BF
        SET     6,LOW(YB80E)(X) ; Установить бит набоРа номеРа
A0423:  LDA     YB81A
        CPI     030H
        RC                  ; Выйти если нажата клавиша
        IN      CB55
        BIT     2,A
        RZ                  ; Выйти если поднята трубка
        BIT     3,A
        JRZ     A0423       ; Переход если линия низкая
        CALL    A0457       ; Определение набираемой цифры
        XRA     A
        ORA     D
        RZ                  ; Выход если набор цифры не состоялся
        MOV     D,H
        INR     C           ; Зафиксировать набор первой цифры
        JRNZ    A0442
        MVI     L,00DH
        MOV     M,C         ; Зафиксировать количество набранных цифр
        CALL    A0881
A0442:  MVI     B,001H      ; Преобразовать число 10 в цифру 0
        CPI     00AH
        JRNZ    A0449
        XRA     A
A0449:  CALL    A064D       ; Ввод цифры в буфер номера
        MVI     L,030H
        MVI     M,05CH      ; Вывод знака 'o' во 2-й позиции дисплея
        RST     6           ; Вывод в видеобуфер
        EXX
        MVI     M,05CH
        EXX
        JMPR    A0423       ; Продолжать определение набираемого номера
;----------------------------
; Определение цифры набираемой на параллельном аппарате в пульсе
;----------------------------
A0457:  MVI     D,000H
A0459:  MVI     B,003H      ; запас на дебезг
        MVI     E,0C8H      ; (FFH-[E])*2.5
A045D:  INR     E           ; 137.5 ms
        RZ
        CALL    A047A
        JRNZ    A045D
        DJNZ    A045D
        MVI     A,(0C8H+8)  ; 8*2.5 - минимальная длительность импульса 20 ms
        CMP     E
        RNC
        INR     D
        MVI     B,003H
        MVI     E,0C8H
A046F:  INR     E
        RZ
        CALL    A047A
        JRZ     A046F
        DJNZ    A046F
        JMPR    A0459
;----------------------------
; Выход из вызывающей подпрограммы при нажатии клавиши или поднятии трубки
;----------------------------
A047A:  HLT
        LDA     YB81A
        CPI     030H
        JRC     A048B
        IN      CB55
        BIT     2,A
        JRZ     A048B
        BIT     3,A
        RET
;
A048B:  POP     PSW
        POP     PSW
        RET
;----------------------------
; Секундомер
;----------------------------
A048E:  RST     2
        JMPR    A04DD
;
A0491:  CALL    A04E8
        CALL    A0CFC
        RST     3
        ORA     A
        JRNZ    A04CF
        SET     7,004H(X)
A049F:  MVI     L,030H
        XRA     A
        MOV     M,A
        INR     L
        CALL    A0540
        XRA     A
        MOV     M,A
        INR     L
        CALL    A0540
        DCR     L
        MVI     A,080H
        ORA     M
        MOV     M,A
        INR     L
        XRA     A
        CALL    A0540
        MVI     M,039H
        RST     3
        CPI     00BH
        RZ
        CPI     00AH
        JRNZ    A049F
        LDA     YB821
        STA     YB805
        LDA     YB822
        STA     YB804
        JMPR    A04DD
;
A04CF:  CPI     00AH
        JRNZ    A04E3
        BIT     7,004H(X)
        SET     7,004H(X)
        JRZ     A0491
A04DD:  RES     7,004H(X)
        JMPR    A0491
;
A04E3:  CPI     00BH
        RZ
        JMPR    A0491
;
A04E8:  BIT     7,004H(X)
        RNZ
        HLT
        MVI     L,038H
        MVI     M,039H
        DCR     L
        DCR     L
        LDA     YB820
        CALL    A0540
        MVI     L,034H
        LDA     YB821
        MVI     C,000H
        SUB     005H(X)
        JRNC    A0509
        ADI     03CH
        DCR     C
A0509:  CALL    A0540
        DCR     L
        MVI     A,080H
        ORA     M
        MOV     M,A
        MVI     L,030H
        MVI     M,000H
        INR     L
        LDA     YB822
        ADD     C
        SUB     004H(X)
        JRNC    A0521
        ADI     03CH
A0521:  CALL    A0540
        MVI     M,000H
        RET
;----------------------------
; Преобразование байта из [A] в два байта кода семисегментного
;   индикатора в [DE]
;----------------------------
A0527:  PUSH    H
        LXI     H,T004F
        MVI     D,000H
A052D:  CPI     00AH
        JRC     A0536
        INR     D
        SUI     00AH
        JMPR    A052D
;
A0536:  ADD     L
        MOV     L,A
        MOV     E,M
        MOV     A,D
        ADI     04FH
        MOV     L,A
        MOV     D,M
        POP     H
        RET
;----------------------------
; Запись семисегментного кода байта из [A] в буфер
;  по адресу из [HL]
;----------------------------
A0540:  CALL    A0527
        MOV     M,D
        INR     L
        MOV     M,E
        INR     L
        RET
;----------------------------
; Вывод на индикатор количества звонков
;----------------------------
A0548:  RST     2
        MVI     L,038H
        MVI     M,06DH
        MVI     L,030H
        MVI     M,05CH
        INR     L
        MVI     M,01CH
        INR     L
        MVI     M,054H
        INR     L
        MVI     M,05EH
        INR     L
        MVI     M,040H
        INR     L
        LDA     YB811
        CPI     064H
        JRNC    A0569
        MVI     M,03FH
        JMPR    A0577
;
A0569:  CPI     0C8H
        JRC     A0573
        MVI     M,05BH
        SUI     0C8H
        JMPR    A0577
;
A0573:  MVI     M,006H
        SUI     064H
A0577:  INR     L
        JMP     A0540
;----------------------------
; Прослушивание телефонной линии и индикация числа звонков
;----------------------------
A057B:  RST     1
        RST     1
        CALL    A029A
        CALL    A0548
A0583:  CALL    A0CFC
        RST     3
        CPI     030H
        JRNC    A0583
        ORA     A
        JRNZ    A0591
        STA     YB811
A0591:  CPI     00BH
        RZ
        JMPR    A057B
;----------------------------
; Проверка на присутствие сигнала звонка в линии
;----------------------------
A0596:  RST     4
        RST     2
        MVI     L,045H
        MVI     M,001H
        MVI     L,031H
        MVI     M,03FH
        INR     L
        MVI     A,071H
        MOV     M,A
        INR     L
        MOV     M,A
        INR     L
        MVI     M,040H
        INR     L
        MVI     M,038H
        MVI     L,012H
        MOV     A,M
        SET     3,A
        RES     1,A
        OUT     CC55
        MVI     B,008H
A05B7:  RST     1
        CALL    A0257
        JRC     A05C3
        CALL    A0257
        JRC     A05C3
        RST     0
A05C3:  DJNZ    A05B7
        MOV     A,B
        STA     YB816
        MOV     A,M
        OUT     CC55
        RST     2
        RET
;----------------------------
; Вывод на индикатор 'Pn .......'
;----------------------------
A05CE:  RST     2
        MVI     038H(X),073H
        JMPR    A05E2
;----------------------------
; Вывод на индикатор 'nn номер '
;----------------------------
A05D5:  RST     2
        MVI     040H(X),001H
        MVI     048H(X),001H
        MVI     038H(X),054H
A05E2:  MVI     030H(X),054H
        RST     6
        RET
;
;----------------------------
; Трансляция буфера адрес начала которого в [BC] в видеобуфер
;----------------------------
A05E8:  LXI     H,0B831H
A05EB:  LDAX    B
        CPI     00AH
        JRNZ    A05F4
        MVI     E,040H      ; байт 0AH --> '-'
        JMPR    A060F
;
A05F4:  CPI     00BH
        JRNZ    A05FC
        MVI     E,000H      ; байт 0BH --> ' '
        JMPR    A060F
;
A05FC:  CPI     00CH
        JRNZ    A0604
        MVI     E,073H      ; байт 0CH --> 'P'
        JMPR    A060F
;
A0604:  CPI     00DH
        JRC     A060C
        MVI     E,008H      ; байт 0DH --> '_'
        JMPR    A060F
;
A060C:  CALL    A0527
A060F:  MOV     M,E
        INR     L
        INR     C
        MOV     A,L
        CPI     038H
        JRNZ    A05EB
        EXX
        RET
;
;----------------------------
; Ввод цифр с клавиатуры в буфер номера со сдвигом
;  с предварительной заставкой в виде предыдущего номера
;----------------------------
A0619:  MVI     040H(X),001H
        MVI     048H(X),001H
        RST     6
A0622:  LDA     YB81A       ; контроль клавиатуры
        CPI     015H
        RZ                  ; выход по клавише '* '
        CPI     013H
        JZ      A0B75       ; переход к автодозвону по клавише '# '
        CPI     030H
        JRNC    A0622
        MOV     D,H
        CALL    A0881
        XRA     A
        STA     YB80D
        MVI     B,00EH
A063B:  RST     6
A063C:  CALL    A0B33
;----------------------------
; Ввод цифр с клавиатуры в буфер номера со сдвигом
;----------------------------
A063F:  RST     3
        CPI     00AH
        JRNZ    A0646
        MVI     A,00DH
A0646:  CPI     00BH
        RZ
        CPI     030H
        JRNC    A063C
A064D:  MVI     L,04AH
        MVI     E,049H
        PUSH    B
        LXI     B,000DH
        LDIR
        POP     B
        STAX    D
        MVI     L,00DH
        INR     M
        DJNZ    A063B
        RET
;----------------------------
; Задержка (A+1)*3603+22 такта
;----------------------------
A065F:  EXX
        MOV     C,A
A0661:  CALL    A175C
        DCR     C
        MOV     A,C
        CPI     0FFH
        JNZ     A0661
        EXX
        RET
;----------------------------
; Набор цифры при автодозвоне
;----------------------------
A066D:  PUSH    H
        PUSH    D
        PUSH    B
        CPI     00DH
        JRNZ    A069E
        IN      CB55
        BIT     2,A
        CNZ     A029A
        MVI     A,028H
        STA     YB82B
A0680:  CALL    A117E
        JRC     A069A
        LDA     YB82B
        ORA     A
        JRZ     A069A
        CALL    A0AAB
        JRZ     A0680
        CALL    A0AAB
        JRZ     A0680
        CALL    A02B1
        JMPR    A06DD
;
A069A:  RST     2
        ORA     H
        JMPR    A06DF
;
A069E:  CPI     00AH
        JRNC    A06DD
        ORA     A
        JRNZ    A06A7
        MVI     A,00AH
A06A7:  MOV     B,A
        LDA     YB812
        MOV     C,A
        ANI     0F0H
        MOV     D,A
        ORI     00EH
        OUT     CC55
        PUSH    B
        MVI     B,004H
A06B6:  RST     1
        DJNZ    A06B6
        POP     B
A06BA:  MOV     A,D
        ORI     009H
        OUT     CC55
        MVI     A,03CH
        CALL    A065F
        IN      CB55
        BIT     3,A
        JZ      A0000
        MOV     A,D
        ORI     00EH
        OUT     CC55
        MVI     A,028H
        CALL    A065F
        DJNZ    A06BA
        MOV     A,C
        STA     YB812
        OUT     CC55
A06DD:  RST     2
        XRA     A
A06DF:  POP     B
        POP     D
        POP     H
        RET
;----------------------------
; Установка видеоаттрибута для элемента в видеобуфере адрес которого в [HL]
;----------------------------
A06E3:  PUSH    H
        MOV     A,L
        SUI     00FH
        MOV     L,A
        MVI     M,001H
        POP     H
        RET
;----------------------------
; Набор номера при автодозвоне
;----------------------------
A06EC:  LDA     YB812
        MOV     C,A
        SET     1,A
        STA     YB812
        OUT     CC55
        CALL    A117E
        JRC     A0750
        LDA     YB80D
        MOV     B,A
        CPI     008H
        JRC     A0712
        MVI     L,056H
        LXI     D,0B85DH
        PUSH    B
        LXI     B,000EH
        LDDR
        POP     B
        MVI     B,00EH
A0712:  MVI     L,050H
A0714:  CALL    A06E3
        CALL    A117E
        JRC     A0750
        RST     6
        LDA     YB81A
        CPI     015H
        JRZ     A0750
        MOV     A,M
        CALL    A066D
        JRNZ    A0750
        XRA     A
        ORA     B
        JRZ     A072F
        DCR     B
A072F:  INR     L
        RST     2
        MOV     A,L
        CPI     057H
        JRNZ    A0714
        XRA     A
        ORA     B
        JRZ     A074A
        PUSH    B
        MVI     L,051H
        LXI     D,0B850H
        LXI     B,000DH
        LDIR
        MVI     L,056H
        POP     B
        JMPR    A0714
;
A074A:  CALL    A090D
        XRA     A
        JMPR    A0754
;
A0750:  CALL    A090D
        STC
A0754:  MOV     A,C
        STA     YB812
        OUT     CC55
        RST     2
        RET
;----------------------------
; Вход в список звонивших
;----------------------------
A075C:  LDA     YB80C
        JMPR    A0764
;----------------------------
; Вход в записную книжку
;----------------------------
A0761:  LDA     YB809
A0764:  STA     YB80A
        CALL    A0904       ; Сохранение видеобуфера
T076A:  CALL    A096E       ; Распаковка в буфер номера
        CALL    A0A15       ; Вывод номера ячейки и номера
        RST     2
        LXI     B,T076A
        PUSH    B
        CALL    A0CFC
        RST     3
        ORA     A
        JRZ     A07A9       ; "0"  Очистка ячейки
        DCR     A
        JZ      A08A2       ; "1"  Время,дата и скрытая часть номера
        DCR     A
        JRZ     A07C9       ; "2"  Категория абонента, установка масок
        DCR     A
        JZ      A0849       ; "3"  Уничтожение списка
        DCR     A
        JZ      A0894       ; "4"  Запись в ячейку из индикатора
        DCR     A
        JZ      A0827       ; "5"  Набор номера
        DCR     A
        JZ      A0904       ; "6"  Перенос из ячейки в индикатор
        DCR     A
        JZ      A08E2       ; "7"  Движение к началу списка
        DCR     A
        JZ      A08C2       ; "8"  Прыжок в начало/конец списка
        DCR     A
        JZ      A08F6       ; "9"  Движение к концу списка
        DCR     A
        JZ      A0B75       ; "#"  Автодозвон
        DCR     A
        RNZ
        POP     B           ; "*"  Выход из списков
        JMP     A090D
;----------------------------
; Очистка ячейки
;----------------------------
A07A9:  CALL    A0D75
        CALL    A0B33
        RST     3
        ORA     A
        JRNZ    A07C4
        CALL    A091B
        XRA     A
        STAX    D
        INR     E
        MVI     B,007H
        MVI     A,0BBH
A07BD:  STAX    D
        INR     E
        DJNZ    A07BD
        JMP     A0881
;
A07C4:  CPI     00CH
        RC
        JMPR    A07A9
;----------------------------
; Категория абонента , установка масок
;----------------------------
A07C9:  RST     4
        CALL    A091B
        LDAX    D
        RLC
        RNC
        RLC
        RNC
A07D2:  RST     2
        CALL    A113D
        MVI     L,045H
        MVI     M,001H
A07DA:  RST     3
        CPI     00BH
        RZ
        JRNC    A07DA
        CPI     00AH
        JRZ     A07ED
        CPI     004H
        RNC
        MOV     B,A
        LDAX    D
        ANI     0FCH
        ORA     B
        STAX    D
A07ED:  RST     2
        MVI     L,046H
        MVI     M,001H
        CALL    A113D
A07F5:  RST     3
        CPI     00BH
        RZ
        JRNC    A07F5
        CPI     00AH
        JRZ     A080E
        MOV     B,A
        LDAX    D
        RES     4,A
        MOV     C,A
        XRA     A
        ORA     B
        JRZ     A080C
        SET     4,C
        DCR     A
        RNZ
A080C:  MOV     A,C
        STAX    D
A080E:  RST     2
        MVI     L,047H
        MVI     M,001H
        CALL    A113D
A0816:  RST     3
        CPI     00BH
        RZ
        JRNC    A0816
        CPI     00AH
        JRZ     A07D2
        DCR     A
        RNZ
        LDAX    D
        RES     6,A
        STAX    D
        RET
;----------------------------
; Набор номера в записную книжку
;----------------------------
A0827:  CALL    A05D5
A082A:  LDA     YB81A
        CPI     015H
        RZ
        CPI     030H
        JRNC    A082A
        CALL    A0619
        CALL    A091B
        LDA     YB80D
        CPI     008H
        MVI     A,0E0H
        JRNC    A0845
        MVI     A,0C0H
A0845:  STAX    D
        JMP     A09C7
;----------------------------
; Уничтожение списка записной книжки
;----------------------------
A0849:  CALL    A0D75
        MVI     040H(X),001H
        MVI     048H(X),001H
        CALL    A0B33
        RST     3
        ORA     A
        JRZ     A0860
        CPI     00CH
        JRNC    A0849
        RET
;
A0860:  LXI     D,0BC20H
        LDA     YB80A
        CPI     064H
        JRNC    A088E
        LXI     H,0B900H
A086D:  MVI     M,000H
        INX     H
        MVI     B,007H
A0872:  MVI     M,0BBH
        INX     H
        DJNZ    A0872
        MOV     A,H
        CMP     D
        JRC     A086D
        MOV     A,L
        CMP     E
        JRC     A086D
        MVI     H,0B8H
;----------------------------
; Очистка буфера номера
;----------------------------
A0881:  EXX
        LXI     H,0B849H
        MVI     B,00EH
A0887:  MVI     M,00BH
        INR     L
        DJNZ    A0887
        EXX
        RET
;
A088E:  XCHG
        LXI     D,0BF40H
        JMPR    A086D
;----------------------------
; Запись в ячейку из индикатора
;----------------------------
A0894:  RST     2
        RST     5
        CALL    A090D
        CALL    A091B
        MVI     A,0C0H
        STAX    D
        JMP     A09C7
;----------------------------
; Время , дата для коротких номеров
;----------------------------
A08A2:  CALL    A091B
        LDAX    D
        BIT     5,A
        JZ      A092C
        MVI     L,057H
        MOV     D,H
        MVI     E,05DH
        LXI     B,000EH
        LDDR
        RST     6
        LXI     B,000EH
        XCHG
        LDIR
A08BC:  RST     3
        CPI     00CH
        JRNC    A08BC
        RET
;----------------------------
; Прыжок в начало/конец списка
;----------------------------
A08C2:  MVI     L,00AH
        MOV     A,M
        MVI     C,064H
        ORA     A
        JRNZ    A08CE
        MVI     A,063H
        JMPR    A08ED
;
A08CE:  CMP     C
        JRNZ    A08D5
        MVI     A,0C7H
        JMPR    A08F1
;
A08D5:  CPI     0C7H
        JRNZ    A08DC
A08D9:  MOV     A,C
        JMPR    A08F1
;
A08DC:  CMP     C
        JRNC    A08D9
        XRA     A
        JMPR    A08ED
;----------------------------
; Движение к началу списка
;----------------------------
A08E2:  MVI     L,00AH
        MOV     A,M
        ORA     A
        RZ
        CPI     064H
        RZ
        DCR     A
        JRNC    A08F1
A08ED:  MOV     M,A
        DCR     L
        MOV     M,A
        RET
;
A08F1:  MOV     M,A
        INR     L
        INR     L
        MOV     M,A
        RET
;----------------------------
; Движение к концу списка
;----------------------------
A08F6:  MVI     L,00AH
        MOV     A,M
        INR     A
        CPI     0C8H
        RZ
        CPI     064H
        RZ
        JRNC    A08F1
        JMPR    A08ED
;----------------------------
; Сохранение буфера номера
;----------------------------
A0904:  EXX
        LXI     H,0B849H
        LXI     D,0B860H
        JMPR    A0914
;----------------------------
; Востановление буфера номера
;----------------------------
A090D:  EXX
        LXI     H,0B860H
        LXI     D,0B849H
A0914:  LXI     B,000FH
        LDIR
        EXX
        RET
;----------------------------
; Вычислитель абсолютного адреса ячейки хранения номера
;----------------------------
A091B:  LDA     YB80A
        RLC
        RLC
        RLC
        MOV     D,A
        ANI     0F8H
        MOV     E,A
        MVI     A,007H
        ANA     D
        ADI     0B9H
        MOV     D,A
        RET
;----------------------------
; Вывод времени и даты телефона из списка
;----------------------------
A092C:  RST     5
        MVI     L,032H
        MVI     M,076H
        INR     L
        LDA     YB85B
        CALL    A0540
        MVI     M,040H
        INR     L
        LDA     YB85C
        CALL    A0540
A0941:  RST     3
        DCR     A
        JRZ     A094A
        CPI     00CH
        RC
        JMPR    A0941
;
A094A:  RST     5
        MVI     L,031H
        LDA     YB858
        CALL    A0527
        MOV     M,E
        INR     L
        INR     L
        LDA     YB859
        CALL    A0540
        MVI     M,040H
        INR     L
        LDA     YB85A
        CALL    A0540
A0965:  RST     3
        DCR     A
        JRZ     A092C
        CPI     00CH
        RC
        JMPR    A0965
;----------------------------
; Распаковщик
;----------------------------
A096E:  CALL    A091B
        MVI     A,007H
        STA     YB80D
        LDAX    D
        INR     E
        MVI     L,050H
        MVI     B,004H
        BIT     5,A
        JRZ     A0989
        MVI     L,049H
        MVI     B,007H
        MVI     A,00EH
        STA     YB80D
A0989:  LDAX    D
        ANI     0F0H
        RRC
        RRC
        RRC
        RRC
        MOV     M,A
        INR     L
        LDAX    D
        ANI     00FH
        MOV     M,A
        INR     E
        INR     L
        DJNZ    A0989
        MOV     A,E
        ANI     007H
        RZ
        LDAX    D
        ANI     0E0H
        RLC
        RLC
        RLC
        MOV     M,A
        INR     L
        LDAX    D
        ANI     01FH
        MOV     M,A
        INR     E
        INR     L
        LDAX    D
        ANI     0F0H
        RRC
        RRC
        RRC
        RRC
        MOV     M,A
        INR     L
        LDAX    D
        ANI     00FH
        MOV     B,A
        INR     E
        LDAX    D
        ANI     040H
        RRC
        RRC
        ORA     B
        MOV     M,A
        INR     L
        LDAX    D
        ANI     03FH
        MOV     M,A
        RET
;----------------------------
; Упаковщик
;----------------------------
A09C7:  CALL    A091B
        LDAX    D
        INR     E
        BIT     5,A
        MVI     L,050H
        MVI     B,004H
        JRZ     A09D8
        MVI     L,049H
        MVI     B,007H
A09D8:  MOV     A,M
        RLC
        RLC
        RLC
        RLC
        MOV     C,A
        INR     L
        MOV     A,M
        ORA     C
        STAX    D
        INR     L
        INR     E
        DJNZ    A09D8
        MOV     A,E
        ANI     007H
        RZ
        LDA     YB824
        RRC
        RRC
        RRC
        MOV     C,A
        LDA     YB825
        ORA     C
        STAX    D
        INR     E
        LDA     YB826
        RLC
        RLC
        RLC
        RLC
        MOV     C,A
        LDA     YB823
        ANI     00FH
        ORA     C
        STAX    D
        LDA     YB823
        ANI     010H
        RLC
        RLC
        MOV     C,A
        INR     E
        LDA     YB822
        ORA     C
        STAX    D
        RET
;----------------------------
; Вывод номера ячейки и номера телефона в списках
;----------------------------
A0A15:  MVI     E,064H
        LDA     YB80A
        CMP     E
        JRC     A0A1E
        SUB     E
A0A1E:  CALL    A0527
        MVI     L,038H
        MOV     M,D
        MVI     A,080H
        ORA     E
        MVI     L,030H
        MOV     M,A
        CALL    A091B
        LDAX    D
        RLC
        JRC     A0A33
        RST     5
        RET
;
A0A33:  RLC
        JC      A0030
        MVI     B,007H
        MVI     L,031H
A0A3B:  MVI     M,080H
        INR     L
        DJNZ    A0A3B
        RET
;----------------------------
; Корректировка сотых долей секунды
;----------------------------
A0A41:  PUSH    B
        MOV     B,A
A0A43:  LDA     YB820
        CPI     000H
        JRNZ    A0A43
        MOV     A,B
        STA     YB820
        POP     B
        RET
;----------------------------
; Детектор периода частоты 425 Гц
;
; Выход: [A]=01 - частота обнаружена , [A]=00 - частота не обнаружена
;----------------------------
A0A50:  EXX
        LXI     D,A0000
        HLT
        MVI     B,01DH
A0A57:  IN      CB55
        RAR
        CC      A0AA5
        CNC     A0AA2
        DJNZ    A0A57
        MVI     B,01DH
A0A64:  IN      CB55
        RAR
        CC      A0AA8
        CNC     A0A9F
        DJNZ    A0A64
        MVI     B,01DH
A0A71:  IN      CB55
        RAR
        CC      A0AA2
        CNC     A0AA5
        DJNZ    A0A71
        MVI     B,01DH
A0A7E:  IN      CB55
        RAR
        CC      A0A9F
        CNC     A0AA8
        DJNZ    A0A7E
        MOV     A,D
        SUI     03AH
        JRNC    A0A8F
        CMA
A0A8F:  MOV     D,A
        MOV     A,E
        SUI     03AH
        JRNC    A0A96
        CMA
A0A96:  ADD     D
        CPI     030H
        MVI     A,001H
        EXX
        RNC
        XRA     A
        RET
;
A0A9F:  NOP
        NOP
        RET
;
A0AA2:  NOP
        INR     E
        RET
;
A0AA5:  NOP
        INR     D
        RET
;
A0AA8:  INR     E
        INR     D
        RET
;----------------------------
; Детектор тона 425 Гц на протяжениии 47 мс
;
; Выход: [A]=01 - частота обнаружена , [A]=00 - частота не обнаружена
;----------------------------
A0AAB:  PUSH    B
        MVI     B,014H
        MVI     C,000H
A0AB0:  CALL    A0A50
        ADD     C
        MOV     C,A
        DJNZ    A0AB0
        MOV     A,C
        CPI     005H
        POP     B
        MVI     A,001H
        RNC
        XRA     A
        RET
;----------------------------
; Детектор тона 425 Гц на протяжении 0.75 с
;----------------------------
A0AC0:  PUSH    B
        MVI     C,000H
        MVI     B,014H
A0AC5:  CALL    A0AAB
        ADD     C
        MOV     C,A
        DJNZ    A0AC5
        CPI     010H
        POP     B
        RET
;----------------------------
; Анализатор информационных сигналов линии
; Выход: [A]= 05 - поднята трубка
;             03 - ответ станции
;             01 - занято
;             00 - нет сигнала
;----------------------------
LINE_ANALIZER:
        PUSH    D
        PUSH    B
        MVI     B,60        ; Время анализа не более 3-х секунд
        MVI     C,0         ; Обнулить флаги
                            ; Bit6[C] - флаг импульса
                            ; Bit7[C] - флаг паузы
        LXI     D,0         ; Обнулить длительности паузы [D] и импульса [E]
L_A0:   CALL    A0AAB       ; Детектор частоты 425 Гц
        ORA     A
        JZ      L_A9        ; Если не обнаружен тон , то обрабатывать паузу

        ; Обработка тонового импульса

        MOV     A,E         ; Если длина импульса = 0 , то выставить
        ORA     E           ; флаг импульса
        JNZ     L_A1
        SET     6,C
L_A1:   INR     E           ; Увеличить счетчик длины импульса
        BIT     7,C         ; Обработать предыдущую паузу , если стоит
        JZ      L_A2        ; её флаг
        MOV     A,D         ; Если пауза меньше 0,10 или больше 0.55
        CPI     2           ; то сбросить счетчик идентификатора [C]
        JC      L_A3
        MVI     A,11
        CMP     D
        JC      L_A3
        INR     C           ; Если пауза в заданных пределах , то увеличить
        JMP     L_A4        ; счетчик идентификатора
L_A3:   MOV     A,C
        ANI     11000000B
        MOV     C,A
L_A4:   MVI     D,0         ; Обработав предыдущую паузу сбросить её флаг
        RES     7,C
L_A2:   MVI     A,22        ; Если импульс длинее 1.1 с то принять его за
        CMP     E           ; ответ станции
        JC      L_A5
L_A6:   MOV     A,C         ; Проверка счетчика идентификатора
        ANI     00111111B   ; Считать что принят сигнал занято , если
        CPI     5           ; счетчик идентификатора больше 3
        JNC     L_A7
        IN      CB55        ; Проверка поднятия трубки
        BIT     2,A
        JZ      L_A8
        DJNZ    L_A0        ; Если за время проверки не произошло досрочной
        XRA     A           ; идентификации , то считать что нет никакого
L_A10:  POP     B           ; сигнала
        POP     D
        RET
L_A8:   MVI     A,5         ; Установка выходных идентифицирующих кодов
        JMP     L_A10
L_A5:   MVI     A,3
        JMP     L_A10
L_A7:   MVI     A,1
        JMP     L_A10

        ; Обработка паузы

L_A9:   MOV     A,D
        ORA     D
        JNZ     L_A11
        SET     7,C
L_A11   INR     D
        BIT     6,C
        JZ      L_A6
        MOV     A,E
        CPI     3
        JC      L_A12
        MVI     A,12
        CMP     E
        JC      L_A12
        INR     C
        JMP     L_A13
L_A12:  MOV     A,C
        ANI     11000000B
        MOV     C,A
L_A13:  MVI     E,0
        RES     6,C
        JMP     L_A6

;----------------------------
; Тест линии на незанятость параллельным аппаратом и работоспособность
;  Длительность теста 1 мс
;----------------------------
A0B13:  IN      CB55
        BIT     2,A
        JRZ     A0B2E
        LDA     YB812
        ANI     0F8H
        INR     A
        OUT     CC55
        XRA     A
        CALL    A065F
        IN      CB55
        BIT     3,A
        LDA     YB812
        OUT     CC55
A0B2E:  MVI     A,001H
        RZ
        XRA     A
        RET
;----------------------------
; Анализатор состояния линии , фиксатор положения трубки
;  переключатель разговорной части
;----------------------------
A0B33:  PUSH    H
        LXI     H,0B80EH
        IN      CB55
        BIT     3,A
        JRZ     A0B43
        RES     3,003H(X)
        RES     6,M
A0B43:  BIT     2,A
        LDA     YB812
        RES     1,A
        RES     3,A
        SET     7,M
        JRZ     A0B54
        RES     7,M
        SET     3,A
A0B54:  STA     YB812
        OUT     CC55
        JRZ     A0B65
        RES     1,M
        CALL    A0C38
        ORA     A
        JRZ     A0B65
        SET     1,M
A0B65:  POP     H
        JMP     A135D
;
A0B69:  LDA     YB81A
        CPI     015H
        JRZ     A0B72
        JMPR    A0B13
;
A0B72:  MVI     A,001H
        RET
;----------------------------
; Автодозвон
;----------------------------
A0B75:  RST     1
        RST     3
        CPI     00BH
        RZ
        CALL    A0904
        MVI     C,032H
A0B7F:  CALL    A0596
        CALL    A0904
        CALL    A02BF
        CALL    A02B1
        CALL    A05CE
        CALL    A117E
        RC
        LXI     H,0B830H
        MVI     M,05CH
        MVI     B,008H
A0B99:  CALL    A117E
        RC
        CALL    A0AC0
        JRNC    A0BA6
        DJNZ    A0B99
        JMPR    A0BCD
;
A0BA6:  PUSH    B
        CALL    A06EC
        POP     B
        JRC     A0BCD
        MVI     A,03CH
        STA     YB82B
A0BB2:  CALL    A117E
        RC
        IN      CB55
        BIT     2,A
        CNZ     A029A
        CALL    LINE_ANALIZER
        CPI     005H
        JRZ     A0C11
        DCR     A
        JRZ     A0BCD
        LDA     YB82B
        ORA     A
        JRNZ    A0BB2
A0BCD:  CALL    A0B69
        DCR     A
        JRZ     A0C11
        DCR     C
        JRZ     A0C11
        CALL    A02B1
        RES     1,A
        CALL    A02B9
        LDA     YB80E
        BIT     0,A
        JRZ     A0B7F
        MVI     B,018H
A0BE7:  PUSH    B
        RST     2
        MVI     B,009H
        MVI     L,040H
A0BED:  INR     M
        INR     L
        PUSH    B
        PUSH    D
        PUSH    H
        CALL    A0CFC
        IN      CB55
        BIT     3,A
        JZ      A0000
        POP     H
        POP     D
        POP     B
        DJNZ    A0BED
        POP     B
        RST     3
        CPI     00AH
        JRZ     A0C0E
        CPI     00CH
        JRNC    A0C0C
        RST     0
A0C0C:  DJNZ    A0BE7
A0C0E:  JMP     A0B7F
;
A0C11:  CALL    A02B1
        RES     1,A
        CALL    A02B9
        CALL    A05CE
        JMP     A0B33
;----------------------------
; Идентификатор звонка (200 мс)
;
; Выход: [A]=01 - есть звонок , [A]=00 - нет звонка
;----------------------------
A0C1F:  CALL    A0257
        JRC     A0C36
        CALL    A02BF
        PUSH    B
        MVI     B,003H
A0C2A:  CALL    A0257
        JRC     A0C35
        DJNZ    A0C2A
        POP     B
        MVI     A,001H
        RET
;
A0C35:  POP     B
A0C36:  XRA     A
        RET
;----------------------------
; Определение ситуации в линии
;----------------------------
A0C38:  LDA     YB816
        DCR     A
        JRNZ    A0C6B
        CALL    A0C1F
        CPI     001H
        JRNZ    A0C46
        RET
;
A0C46:  IN      CB55
        BIT     2,A
        JRZ     A0C5D
        BIT     3,A
        JRZ     A0C52
        XRA     A
        RET
;
A0C52:  PUSH    B
        MVI     B,00AH
A0C55:  CALL    A0257
        JRNC    A0C62
        DJNZ    A0C55
A0C5C:  POP     B
A0C5D:  XRA     A
        STA     YB816
        RET
;
A0C62:  CALL    A0C1F
        CPI     001H
        JRNZ    A0C5C
        POP     B
        RET
;
A0C6B:  IN      CB55
        BIT     3,A
        JRZ     A0C8D
        MVI     A,002H
        STA     YB82B
A0C76:  IN      CB55
        BIT     3,A
        JRZ     A0C8D
        LDA     YB81A
        CPI     030H
        JRC     A0C8D
        LDA     YB82B
        ORA     A
        JRNZ    A0C76
        INR     A
        STA     YB816
A0C8D:  XRA     A
        RET
;----------------------------
; Функция АОН
;----------------------------
A0C8F:  PUSH    H
        LDA     YB812
        SET     1,A         ; Имитация поднятия трубки
        STA     YB812
        OUT     CC55
        CALL    A0881       ; Очистка буфера номера
        RST     5           ; Очистка видеобуфера
        CALL    A16E7       ; Запрос и определение номера
        CALL    A0CD8       ; Маскировка цифр
        RST     6
        LDA     YB857       ; Вывод в первую позицию индикатора категории
        CALL    A0527
        MOV     038H(X),E
        MVI     030H(X),040H
        CALL    A0D58       ; Упаковка номера и времени в список поступивших
        MVI     A,032H      ; звонков
        CALL    A0A41       ; Корректировка времени
        MVI     A,030H
        CALL    A0A41
        INR     011H(X)     ; Увеличить счетчик звонков
        SET     3,003H(X)
        SET     6,00EH(X)
        POP     H
        LDA     YB821       ; Сохранение минут и секунд времени поступления
        STA     YB805       ;  звонка
        LDA     YB822
        STA     YB804
        RET
;----------------------------
; Маскировщик цифр
;----------------------------
A0CD8:  LDA     YB828
        CPI     007H
        RZ
        LDA     YB80B
        LXI     H,0B850H
        CMP     M
        RNZ
        MVI     M,00BH
        LDA     YB828
        CPI     006H
        RZ
        INR     L
        MVI     M,00BH
        RET
;----------------------------
; Ожидание конца звонка в течении 3-х секунд
;----------------------------
A0CF2:  MVI     B,00FH
A0CF4:  CALL    A0C1F
        DCR     A
        RNZ
        DJNZ    A0CF4
        RET
;----------------------------
; Отработка режимов телефона
;----------------------------
A0CFC:  CALL    A0B33
        LDA     YB80E
        BIT     7,A
        JNZ     A1042
        BIT     1,A
        RZ
        LDA     YB803
        ANI     030H
        JRZ     A0D41
        CPI     030H
        JRZ     A0D41

        ;  Отработка режимов 'P' , 'A'

        MVI     B,004H
A0D17:  RST     1
        DJNZ    A0D17
A0D1A:  XRA     A
        STA     YB816
        CALL    A0CF2
        CALL    A0C8F
        CALL    A0EC5
        MOV     L,A
        LDA     YB803
        ANI     030H
        CPI     020H
        MOV     A,L
        JZ      A0E85
        CALL    A0D82
A0D36:  LDA     YB812
        RES     1,A
        OUT     CC55
        STA     YB812
        RET
;----------------------------
; Отработка режима '-'
;----------------------------
A0D41:  CALL    A0DEB
        RNZ
        LDA     YB803
        ANI     030H
        RNZ
        IN      CB55
        BIT     2,A
        JRZ     A0D1A
        CALL    A0257
        JRNC    A0D41
        JMPR    A0D1A
;----------------------------
; Смещение записной книжки звонков вверх на одну запись
;----------------------------
A0D58:  EXX
        LXI     H,0BF37H
        LXI     D,0BF3FH
        MVI     A,007H
        STA     YB80D
        MVI     A,064H
        STA     YB80A
        LXI     B,0318H
        LDDR
        INX     H
        MVI     M,0C0H
        EXX
        JMP     A09C7
;----------------------------
; Присвоение всем символам видеобуфера аттрибута моргания
;----------------------------
A0D75:  EXX
        LXI     H,0B841H
        MVI     B,007H
A0D7B:  MVI     M,001H
        INR     L
        DJNZ    A0D7B
        EXX
        RET
;----------------------------
; Формирователь звонка и сигнала подделки
;----------------------------
A0D82:  PUSH    B
        MOV     C,A
        CALL    A0D75
        MVI     A,078H
        STA     YB82B
A0D8C:  MOV     A,C
        DCR     A
        JRZ     A0D97
        MVI     B,005H
A0D92:  RST     1
        DJNZ    A0D92
        JMPR    A0D9D
;
A0D97:  CALL    A1942
        DCR     A
        JRZ     A0DE3
A0D9D:  CALL    A0B69
        DCR     A
        JRZ     A0DE3
        LDA     YB812
        SET     6,A
        STA     YB812
        OUT     CC55
        LXI     D,1072H
        CALL    A0274
        MVI     A,0C0H
        OUT     CA55
        STA     YB810
        MVI     B,005H
A0DBC:  RST     1
        DJNZ    A0DBC
        CALL    A02B1
        LDA     YB812
        RES     6,A
        STA     YB812
        OUT     CC55
        MVI     A,060H
        STA     YB810
        CALL    A0B69
        DCR     A
        JRZ     A0DE3
        CALL    LINE_ANALIZER
        ORA     A
        JRNZ    A0DE3
        LDA     YB82B
        ORA     A
        JRNZ    A0D8C
A0DE3:  RST     2
        CALL    A02B1
        POP     B
        JMP     A0B33
;----------------------------
; Работа телефона в режиме '-'
;----------------------------
A0DEB:  LDA     YB80E
        BIT     1,A
        JRZ     A0E48
        LDA     YB814       ; Загрузка в таймер задержки поднятия
        STA     YB82B
        ORA     A
        JZ      EXIT_0DEB

A0DF7:  MVI     B,100
A0DF9:  MVI     A,10
        CALL    A065F
        IN      CB55
        BIT     2,A
        RZ
        BIT     3,A
        RZ
        DJNZ    A0DF9

        LDA     YB803
        BIT     7,A
        JRZ     A0E1D
        CALL    A0D75
        XRA     A
        JMPR    A0E1F
;
A0E1D:  MVI     A,001H
A0E1F:  CALL    A0E4A
        DCR     A
        RZ
        MVI     C,000H
A0E26:  MVI     B,004H
A0E28:  IN      CB55
        BIT     2,A
        RZ
        BIT     3,A
        RZ
        CALL    A0257
        JRC     A0E41
        DJNZ    A0E28
        LDA     YB82B
        ORA     A
        JRNZ    A0DF7
EXIT_0DEB:
        POP     PSW
        JMP     A0D1A
;
A0E41:  INR     C
        MOV     A,C
        CPI     0C8H
        JRNZ    A0E26
        RST     2
A0E48:  XRA     A
        RET
;----------------------------
; Формирователь мелодического звонка
;----------------------------
A0E4A:  PUSH    D
        PUSH    B
        MOV     C,A
        MVI     B,016H
        LXI     D,01F4H
A0E52:  PUSH    B
        XRA     A
        ADD     C
        JRZ     A0E5C
        MVI     A,090H
        CALL    A0274
A0E5C:  MVI     B,010H
A0E5E:  HLT
        IN      CB55
        BIT     2,A
        JRZ     A0E7B
        BIT     3,A
        JRZ     A0E7B
        DJNZ    A0E5E
        MOV     A,D
        CPI     005H
        MVI     D,004H
        JRZ     A0E74
        MVI     D,005H
A0E74:  POP     B
        DJNZ    A0E52
        MVI     C,000H
        JMPR    A0E7E
;
A0E7B:  POP     B
        MVI     C,001H
A0E7E:  CALL    A02B1
        MOV     A,C
        POP     B
        POP     D
        RET
;----------------------------
; Режим 'A' , запись на магнитофон
;----------------------------
A0E85:  LDA     YB812
        SET     5,A
        OUT     CC55
        STA     YB812
        PUSH    B
        CALL    A0D75
        CALL    A197A
        MVI     A,0B4H
        STA     YB82B
A0E9B:  MVI     B,002H
A0E9D:  CALL    LINE_ANALIZER
        CPI     005H
        JRZ     A0EB8
        ORA     A
        JRZ     A0EB2
        CALL    A0B13
        CPI     001H
        JRZ     A0EB8
        DJNZ    A0E9D
        JMPR    A0EB8
;
A0EB2:  LDA     YB82B
        ORA     A
        JRNZ    A0E9B
A0EB8:  RST     2
        POP     B
        LDA     YB812
        ANI     0DDH
        STA     YB812
        OUT     CC55
        RET
;----------------------------
; Диспетчер "Звонить/Не звонить"
;----------------------------
A0EC5:  PUSH    H
        LXI     D,0BC20H
        LXI     H,0B900H
A0ECC:  MOV     A,M
        BIT     7,A
        JRZ     A0F16
        BIT     5,A
        JRNZ    A0F16
        ANI     007H
        JRZ     A0F16
        MVI     B,003H
A0EDB:  INX     H
        INR     E
        LDAX    D
        CMP     M
        JRNZ    A0F10
        DJNZ    A0EDB
        INR     L
        INR     E
        LDAX    D
        ANI     0F0H
        MOV     B,A
        MVI     A,0F0H
        ANA     M
        CMP     B
        JRNZ    A0F10
        MOV     A,L
        ANI     0F8H
        MOV     L,A
        MOV     A,M
        ANI     003H
        JRNZ    A0F02
A0EF8:  LDA     YB803
        RAL
        JRC     A0F0D
A0EFE:  POP     H
        MVI     A,001H
        RET
;
A0F02:  DCR     A
        JRZ     A0EFE
        DCR     A
        JRZ     A0F0D
        POP     H
        POP     PSW
        JMP     A0D36
;
A0F0D:  POP     H
        XRA     A
        RET
;
A0F10:  MOV     A,L
        ANI     0F8H
        MOV     L,A
        MVI     E,020H
A0F16:  LXI     B,0008
        DAD     B
        MOV     A,H
        CMP     D
        JRNZ    A0ECC
        MOV     A,L
        CMP     E
        JRNZ    A0ECC
        JMPR    A0EF8
;
; >> NO EXECUTION PATH TO HERE <<
A0F24:  EXX
        LXI     H,0B860H
        LXI     D,0B850H
        MVI     B,007H
A0F2D:  LDAX    D
        CPI     00DH
        JRZ     A0F35
        CMP     M
        JRNZ    A0F3D
A0F35:  INR     L
        INR     E
        DJNZ    A0F2D
        EXX
        MVI     A,001H
        RET
;
A0F3D:  EXX
        XRA     A
        RET
;----------------------------
; Обработчик срабатывания датчика охраны
;----------------------------
A0F40:  MVI     A,03CH
        STA     YB82B
A0F45:  LDA     YB82B
        ORA     A
        JRNZ    A0F45
A0F4B:  STA     YB80A
        CALL    A091B
        LDAX    D
        BIT     4,A
        CNZ     A0F63
        CALL    A0FCB
        MVI     L,00AH
        INR     M
        MOV     A,M
        INR     L
        CMP     M
        RZ
        JMPR    A0F4B
;----------------------------
; Автоматический набор номера
;----------------------------
A0F63:  CALL    A096E
        MVI     A,01CH
        STA     YB830
        RST     6
A0F6C:  CALL    A02BF
        LDA     YB812
        SET     1,A
        OUT     CC55
        STA     YB812
        MVI     B,008H
A0F7B:  CALL    A0AC0
        JRNC    A0F84
        DJNZ    A0F7B
        JMPR    A0FC8
;
A0F84:  CALL    A06EC
        MVI     A,028H
        STA     YB82B
A0F8C:  LDA     YB82B
        ORA     A
        RZ
        CALL    A0FCB
        CALL    LINE_ANALIZER
        CPI     005H
        RZ
        CPI     001H
        JRZ     A0FC8
        ORA     A
        JRNZ    A0F8C
        MVI     B,006H
A0FA3:  CALL    A0FCB
        CALL    LINE_ANALIZER
        ORA     A
        JRNZ    A0F8C
        DJNZ    A0FA3
        MVI     A,028H
        STA     YB82B
A0FB3:  MVI     A,080H
        CALL    A197C
        CALL    A0FCB
        CALL    LINE_ANALIZER
        CPI     001H
        JRZ     A0FC8
        LDA     YB82B
        ORA     A
        JRNZ    A0FB3
A0FC8:  JMP     A0596
;
A0FCB:  IN      CB55
        BIT     2,A
        JRZ     A0FD7
        LDA     YB81A
        CPI     030H
        RNC
A0FD7:  POP     PSW
        RET
;----------------------------
; Подпрограмма набора номера ячейки
;----------------------------
A0FD9:  RST     4
        RST     2
        MVI     L,048H
        MVI     M,001H
        MVI     L,040H
        MVI     M,001H
        MVI     L,030H
        MVI     M,0A3H
        MVI     L,038H
        MVI     M,0A3H
A0FEB:  RST     3
        CPI     00BH
        RZ
        CPI     00AH
        JRNC    A0FEB
        MOV     B,A
        XRA     A
        CMP     B
        JRZ     A0FFC
A0FF8:  ADI     00AH
        DJNZ    A0FF8
A0FFC:  MOV     C,A
        CALL    A0527
        MOV     M,D
        MVI     L,048H
        MVI     M,000H
A1005:  RST     3
        CPI     00BH
        RZ
        CPI     00AH
        JRNC    A1005
        ADD     C
        MOV     C,A
        XRA     A
        INR     A
        RET
;----------------------------
; Подпрограмма автодозвона при наборе номера записной книжки
;----------------------------
A1012:  CALL    A0FD9
        RZ
        MVI     A,063H
        CMP     C
        JRC     A1012
        MOV     A,C
        STA     YB80A
A101F:  RST     4
        RST     2
        CALL    A096E
        CALL    A0A15
        CALL    A0B33
        IN      CB55
        BIT     2,A
        CNZ     A029A
        IN      CB55
        BIT     3,A
        JRNZ    A103F
        RST     3
        CPI     00BH
        RZ
        CPI     00AH
        JRNZ    A101F
A103F:  JMP     A0B75
;----------------------------
; Обработка набора номера при поднятой трубке
;----------------------------
A1042:  LDA     YB80E
        BIT     6,A
        RNZ
        SET     6,A
        STA     YB80E
        XRA     A
        STA     YB816
        CALL    A05D5
A1054:  CALL    A117E
        RC
        IN      CB55
        BIT     2,A
        CNZ     A029A
        RST     3
        MVI     B,010H
A1062:  HLT
        DJNZ    A1062
        CPI     00BH
        JZ      A112D
        CPI     00AH
        JZ      A0B75
        JRNC    A1054
        CALL    A0881
        RST     5
        MVI     L,056H
        MOV     M,A
        MOV     A,L
        STA     YB82C
        RST     6
        CALL    A06E3
        MVI     A,001H
        STA     YB80D
        CALL    A10CB
        RC
A1089:  RST     6
        CALL    A117E
        RC
        MVI     L,02CH
        MOV     A,M
        CPI     057H
        JRNC    A10B2
        INR     M
        MOV     L,A
        CPI     050H
        JRC     A109E
        CALL    A06E3
A109E:  MOV     A,M
        ORA     A
        JRNZ    A10A4
        MVI     A,00AH
A10A4:  MOV     B,A
        CPI     00DH
        JRNZ    A10AF
        CALL    A10CB
        RC
        JMPR    A10B2
;
A10AF:  CALL    A10E2
A10B2:  CALL    A117E
        RC
        RST     2
        MVI     C,009H
        CALL    A1106
        LDA     YB82B
        ORA     A
        JRNZ    A1089
        IN      CB55
        BIT     2,A
        CNZ     A029A
        JMPR    A1089
;----------------------------
; Запись номера с клавиатуры
;----------------------------
A10CB:  CALL    A117E
        RC
        IN      CB55
        BIT     2,A
        CNZ     A029A
        MVI     C,009H
        CALL    A1106
        CALL    A0AAB
        DCR     A
        JRNZ    A10CB
        RET
;----------------------------
; Набор цифры в линию
;----------------------------
A10E2:  MVI     A,00EH
        OUT     CC55
        MVI     C,000H
        CALL    A1106
A10EB:  MVI     A,009H
        OUT     CC55
        MVI     C,018H
        CALL    A1106
        IN      CB55
        BIT     3,A
        JRZ     A112D
        MVI     A,00EH
        OUT     CC55
        MVI     C,010H
        CALL    A1106
        DJNZ    A10EB
        RET
;----------------------------
; Запись цифр номера с клавиатуры
;----------------------------
A1106:  HLT
        DCR     C
        RZ
        LDA     YB81A
        CPI     015H
        JRZ     A112D
        CPI     030H
        JRNC    A1106
        PUSH    B
        MVI     B,001H
        MOV     D,H
        CALL    A063F
        MVI     L,02CH
        DCR     M
        RST     2
        RST     6
        MOV     A,M
        DCR     L
        MVI     M,005H
        MOV     L,A
        CALL    A06E3
        POP     B
        DCR     C
        RZ
        JMPR    A1106
;
A112D:  RST     2
        LDA     YB812
        RES     1,A
        STA     YB812
        OUT     CC55
        CALL    A02B1
        STC
        RET
;----------------------------
; Вывод заставки категории и масок
;----------------------------
A113D:  PUSH    D
        CALL    A0B33
        POP     D
        MVI     L,030H
        MVI     M,07CH
        INR     L
        LDAX    D
        PUSH    D
        MOV     C,A
        BIT     5,A
        JRNZ    A1159
        MVI     M,040H
        INR     L
        LDA     YB857
        CALL    A0540
        JMPR    A1162
;
A1159:  MVI     M,000H
        INR     L
        MVI     M,000H
        INR     L
        MVI     M,000H
        INR     L
A1162:  MVI     M,040H
        INR     L
        MOV     A,C
        ANI     003H
        CALL    A0527
        MOV     M,E
        INR     L
        MVI     A,03FH
        BIT     4,C
        JRZ     A1175
        MVI     A,006H
A1175:  MOV     M,A
        INR     L
        POP     D
        MVI     M,03FH
        INR     L
        MVI     M,077H
        RET
;----------------------------
; Отслеживание клавиши '*' и приведение ключей на линии в соответствии
;  с положением трубки , обработка громкого набора
;----------------------------
A117E:  LDA     YB81A
        CPI     015H
        JRZ     A112D
        IN      CB55
        BIT     2,A
        LDA     YB812
        JRNZ    A119C
        SET     7,00EH(X)
        ANI     0F5H
        OUT     CC55
        STA     YB812
        JMP     A02B1
;
A119C:  ORI     00AH
        OUT     CC55
        STA     YB812
        BIT     7,00EH(X)
        JRNZ    A112D
        BIT     4,00EH(X)
        RZ
        JMP     A029A
;----------------------------
; Обработка ввода с клавиатуры
;----------------------------
A11B1:  RNC
        PUSH    H
        PUSH    D
        PUSH    B
        RES     3,003H(X)
        LXI     H,T11EE
        LXI     B,000DH
A11BF:  CCI
        JPO     A11CB
        JRZ     A11CF
        INX     H
        INX     H
        INX     H
        JMPR    A11BF
;
A11CB:  SET     7,A
        JMPR    A11EA
;
A11CF:  MOV     A,M
        PUSH    PSW
        LDA     YB80E
        BIT     5,A
        JRZ     A11E4
        INX     H
        MOV     E,M
        INX     H
        MOV     D,M
        XCHG
        DAD     H
        XCHG
        MVI     A,090H
        CALL    A0274
A11E4:  MVI     A,0FFH
        STA     YB81A
        POP     PSW
A11EA:  POP     B
        POP     D
        POP     H
        RET
;
;     ТАБЛИЦА КЛАВИШ АОН
;
;       скан-код     номер       нота
;
T11EE:  DB 20H                  ; 3-я октава    частота Гц

T11EF:  DB               01,         57H,03H   ; 2093   До
        DB 21H,          02,         27H,03H   ; 2217
        DB 22H,          03,         0FAH,02H  ; 2348   Ре
        DB 23H,          04,         0CFH,02H  ; 2489
        DB 24H,          05,         0A7H,02H  ; 2635   Ми
        DB 25H,          06,         80H,02H   ; 2796   Фа
        DB 10H,          07,         5DH,02H   ; 2958
        DB 11H,          08,         3BH,02H   ; 3134   Соль
        DB 12H,          09,         19H,02H   ; 3332
        DB 13H,          0AH,        0C5H,01H  ; 3950   Си
        DB 14H,          00,         0E0H,01H  ; 3728
        DB 15H,          0BH,        0FCH,01H  ; 3520   Ля
;----------------------------
; Вывод значений будильников
;----------------------------
A121E:  PUSH    B
        PUSH    H
        RST     4
        RST     2
        MVI     L,030H
        MVI     M,038H
        INR     L
        MOV     A,C
        CPI     039H
        MVI     A,006H
        JRZ     A1230
        MVI     A,05BH
A1230:  MOV     M,A
        INR     L
        LDAX    B
        MOV     M,A
        INR     L
        INR     C
        INR     C
        LDAX    B
        CALL    A0540
        MVI     M,040H
        INR     L
        DCR     C
        LDAX    B
        CALL    A0540
        MVI     M,077H
        POP     H
        POP     B
        RET
;----------------------------
; Вход в установку будильников
;----------------------------
A1248:  LXI     B,0B839H
A124B:  CALL    A121E
        MVI     L,041H
        CALL    A13FA
        JRZ     A125D
        DCR     A
        JRZ     A125D
        DCR     A
        JRNZ    A124B
        MVI     C,03CH
A125D:  PUSH    B
        POP     Y
A1260:  CALL    A121E
        MVI     L,042H
        CALL    A13FA
        JRZ     A1280
        DCR     A
        JRNZ    A1272
        MVI     A,008H
        STAX    B
        JMPR    A1280
;
A1272:  DCR     A
        JRNZ    A127A
        MVI     A,05CH
        STAX    B
        JMPR    A1280
;
A127A:  DCR     A
        JRNZ    A1260
        MVI     A,05DH
        STAX    B
A1280:  CALL    A121E
        MVI     L,043H
        CALL    A13FA
        JRZ     A129B
        CPI     003H
        JRNC    A1280
        MOV     E,A
        XRA     A
        CMP     E
        JRZ     A1298
A1293:  ADI     00AH
        DCR     E
        JRNZ    A1293
A1298:  MOV     002H(Y),A
A129B:  CALL    A121E
        MVI     L,044H
        CALL    A13FA
        JRZ     A12B3
        MOV     E,A
        MOV     A,002H(Y)
        CALL    A1409
        CPI     018H
        JRNC    A1280
        MOV     002H(Y),A
A12B3:  CALL    A121E
        MVI     L,046H
        CALL    A13FA
        JRZ     A12CE
        CPI     006H
        JRNC    A12B3
        MOV     E,A
        XRA     A
        CMP     E
        JRZ     A12CB
A12C6:  ADI     00AH
        DCR     E
        JRNZ    A12C6
A12CB:  MOV     001H(Y),A
A12CE:  CALL    A121E
        MVI     L,047H
        CALL    A13FA
        JRZ     A12E2
        MOV     E,A
        MOV     A,001H(Y)
        CALL    A1409
        MOV     001H(Y),A
A12E2:  CALL    A121E
        RST     1
        RST     5
        CALL    A0904
        MVI     L,070H
        MOV     A,C
        CPI     03CH
        JRC     A12F3
        MVI     L,078H
A12F3:  CALL    A133B
        RST     1
        RST     3
        CPI     00BH
        JZ      A090D
        CPI     004H
        JRNZ    A1308
        RST     5
        CALL    A1333
        RST     1
        JMPR    A12F3
;
A1308:  CPI     006H
        JRNZ    A1313
        CALL    A0904
        RST     5
        RST     1
        JMPR    A12F3
;
A1313:  CPI     005H
        JRNZ    A12F3
        RST     5
        PUSH    H
        PUSH    D
        PUSH    B
        LDA     YB828
        MOV     B,A
        CALL    A0619
        POP     B
        POP     D
        POP     H
        RST     2
        CALL    A132B
        JMPR    A12F3
;
A132B:  PUSH    H
        EXX
        POP     D
        LXI     H,0B850H
        JMPR    A1341
;
A1333:  PUSH    H
        EXX
        POP     D
        LXI     H,0B867H
        JMPR    A1341
;----------------------------
; Загрузка буфера [HL] в буфер номера
;----------------------------
A133B:  PUSH    H
        EXX
        POP     H
        LXI     D,0B850H
A1341:  LXI     B,0007H
        LDIR
        EXX
        RST     6
        RST     2
        RET
;----------------------------
; Озвучивание наступления часа
;----------------------------
A134A:  LDA     YB821
        DCR     A
        RNZ
        LDA     YB820
        CPI     028H
        RNC
        LDA     YB823
        SRLR    A
        JMP     A1959
;----------------------------
; Диспетчер будильников
;----------------------------
A135D:  LDA     YB821
        CPI     003H
        RNC
        PUSH    H
        PUSH    D
        PUSH    B
        LDA     YB80E
        BIT     3,A
        JRZ     A1374
        LDA     YB822
        ORA     A
        CZ      A134A
A1374:  LXI     H,T13C4
        PUSH    H
        LXI     H,0B822H
        LXI     D,0B839H
A137E:  LDAX    D
        INR     E
        CPI     008H
        JRNZ    A1387
        INR     E
        JMPR    A13BD
;
A1387:  MOV     B,M
        LDAX    D
        INR     L
        INR     E
        CMP     B
        JRNZ    A13BC
        MOV     B,M
        LDAX    D
        CMP     B
        JRNZ    A13BC
        RST     4
        CALL    A02BF
        MVI     038H(X),077H
        MVI     030H(X),038H
        MVI     L,070H
        DCR     E
        DCR     E
        MOV     A,E
        CPI     03CH
        JRC     A13AA
        MVI     L,078H
A13AA:  CALL    A133B
        LDAX    D
        CPI     05DH
        JRZ     A13C8
        CALL    A0D75
        CALL    A13DD
        RST     4
        RST     2
        RST     1
        RET
;
A13BC:  DCR     L
A13BD:  INR     E
        MOV     A,E
        CPI     03FH
        JRC     A137E
        POP     H
T13C4:  POP     B
        POP     D
        POP     H
        RET
;
A13C8:  MVI     A,008H
        STAX    D
        CALL    A197A
        CALL    A0B33
        RST     3
        CPI     00BH
        RZ
        IN      CB55
        BIT     3,A
        RZ
        JMP     A0F6C
;
A13DD:  MVI     A,03CH
        STA     YB82B
A13E2:  LXI     D,0200H
        MVI     A,090H
        CALL    A0274
        RST     1
        CALL    A028B
        RST     1
        RST     3
        CPI     00CH
        RC
        LDA     YB82B
        ORA     A
        JRNZ    A13E2
        RET
;----------------------------
; Подрежим установок
;----------------------------
A13FA:  RST     2
A13FB:  MVI     M,001H
        RST     3
        CPI     00BH
        JRZ     A1407
        JRNC    A13FB
        CPI     00AH
        RET
;
A1407:  POP     PSW
        RET
;
A1409:  MOV     D,A
        ORA     A
        JRZ     A1416
A140D:  SUI     00AH
        JRZ     A1416
        JRNC    A140D
        ADI     009H
        CMA
A1416:  ADD     D
        ADD     E
        RET
;----------------------------
; Выбор режима установок
;----------------------------
A1419:  DCR     A
        JZ      A15FD       ; "1"    установка битов
        DCR     A
        JZ      A157B       ; "2"    установка количества цифр в номере
        DCR     A
        JZ      A15AA       ; "3"    просмотр поступившего кода
        DCR     A
        JZ      RESET       ; "4"    инициализация
        DCR     A
        JZ      DELAY_SET   ; "5"    установка задержки
        DCR     A
        JNZ     A1446       ; "7,8,9"
        JMP     BLOC8_SET   ; "6"    установка блокировки набора цифры 8
;----------------------------
; Отработка инициализации
;----------------------------
RESET:
        MVI     B,009H
        MVI     L,030H
A142C:  MVI     M,0A3H
        INR     L
        DJNZ    A142C
        MVI     L,040H
        MVI     B,008H
A1435:  MVI     M,001H
        INR     L
        DJNZ    A1435
        CALL    A13FB
        ORA     A
        JRNZ    A1446
        MOV     L,A
        MOV     M,A
        INR     L
        MOV     M,A
        RST     1
        RST     0
;----------------------------
; Вход в режим установок
;----------------------------
A1446:  CALL    A0312
        RST     2
        MVI     L,046H
        MVI     M,001H
        INR     L
        CALL    A13FB
        JRZ     A146B
        ORA     A
        JRNZ    A1419

        ; Обнуление сотых , ввод времени

        MVI     L,020H
        MVI     M,000H
        INR     L
        MOV     A,M
        MVI     M,000H
        CPI     01FH
        JRC     A1446
        MVI     M,03BH
        DCR     L
        MVI     M,063H
        HLT
        JMPR    A1446
;----------------------------
; Процедура ввода времени
;----------------------------
A146B:  CALL    A16AC
        MVI     L,041H
        CALL    A13FA
        JRZ     A147F
        ORA     A
        JRZ     A146B
        CPI     008H
        JRNC    A146B
        MOV     024H(X),A
A147F:  CALL    A16AC
        MVI     L,043H
        CALL    A13FA
        JRZ     A1499
        CPI     003H
        JRNC    A147F
        MOV     B,A
        XRA     A
        CMP     B
        JRZ     A1496
A1492:  ADI     00AH
        DJNZ    A1492
A1496:  MOV     023H(X),A
A1499:  CALL    A16AC
        MVI     L,044H
        CALL    A13FA
        JRZ     A14B1
        MOV     E,A
        MOV     A,023H(X)
        CALL    A1409
        CPI     018H
        JRNC    A147F
        MOV     023H(X),A
A14B1:  CALL    A16AC
        MVI     L,046H
        CALL    A13FA
        JRZ     A14CB
        CPI     006H
        JRNC    A14B1
        MOV     B,A
        XRA     A
        CMP     B
        JRZ     A14C8
A14C4:  ADI     00AH
        DJNZ    A14C4
A14C8:  MOV     022H(X),A
A14CB:  CALL    A16AC
        MVI     L,047H
        CALL    A13FA
        JRZ     A14DF
        MOV     E,A
        MOV     A,022H(X)
        CALL    A1409
        MOV     022H(X),A
A14DF:  CALL    A16AC
        RST     1
        RST     1
        RST     4
A14E5:  CALL    A0334
        MVI     L,040H
        CALL    A13FA
        JRZ     A14FF
        CPI     004H
        JRNC    A14E5
        MOV     B,A
        XRA     A
        CMP     B
        JRZ     A14FC
A14F8:  ADI     00AH
        DJNZ    A14F8
A14FC:  MOV     025H(X),A
A14FF:  RST     2
        CALL    A0334
        MVI     L,041H
        CALL    A13FA
        JRZ     A151A
        MOV     E,A
        MOV     A,025H(X)
        CALL    A1409
        JRZ     A14E5
        CPI     020H
        JRNC    A14E5
        MOV     025H(X),A
A151A:  CALL    A0334
        MVI     L,043H
        CALL    A13FA
        JRZ     A1531
        DCR     A
        JRZ     A152C
        INR     A
        JRZ     A152E
        JMPR    A151A
;
A152C:  MVI     A,00AH
A152E:  MOV     026H(X),A
A1531:  RST     2
        CALL    A0334
        MVI     L,044H
        CALL    A13FA
        JRZ     A154C
        MOV     E,A
        MOV     A,026H(X)
        CALL    A1409
        JRZ     A151A
        CPI     00DH
        JRNC    A151A
        MOV     026H(X),A
A154C:  CALL    A0334
        MVI     L,046H
        CALL    A13FA
        JRZ     A1562
        MOV     B,A
        XRA     A
        CMP     B
        JRZ     A155F
A155B:  ADI     00AH
        DJNZ    A155B
A155F:  MOV     027H(X),A
A1562:  CALL    A0334
        MVI     L,047H
        CALL    A13FA
        JRZ     A1576
        MOV     E,A
        MOV     A,027H(X)
        CALL    A1409
        MOV     027H(X),A
A1576:  CALL    A0334
        RST     1
        RST     1
;----------------------------
; Установка количества цифр в номере
;----------------------------
A157B:  RST     4
        CALL    A1681
        MVI     L,046H
        CALL    A13FA
        JZ      A1446
        CPI     003H
        JRZ     A15AA
        CPI     005H
        JRC     A157B
        CPI     008H
        JRNC    A157B
        STA     YB828
        CPI     006H
        JRNZ    A157B
        CALL    A1681
        MVI     L,047H
        CALL    A13FA
        JZ      A1446
        STA     YB80B
        JMPR    A157B
;----------------------------
; Просмотр поступившего кода
;----------------------------
A15AA:  PUSH    H
        RST     2
        RST     4
        CALL    A0904
        LXI     H,0BF50H
        RST     1
        CALL    A15EC
A15B7:  RST     3
        CPI     00BH
        JRNZ    A15C1
        CALL    A090D
        POP     H
        RET
;
A15C1:  CPI     007H
        JRNZ    A15D1
        MOV     A,L
        CPI     050H
        JRZ     A15CB
        DCR     L
A15CB:  CALL    A15EC
        RST     1
        JMPR    A15B7
;
A15D1:  CPI     009H
        JRNZ    A15DD
        MOV     A,L
        CPI     0D0H
        JRZ     A15CB
        INR     L
        JMPR    A15CB
;
A15DD:  CPI     008H
        JRNZ    A15E5
        MVI     L,050H
        JMPR    A15CB
;
A15E5:  ORA     A
        JRNZ    A15B7
        MVI     L,0D0H
        JMPR    A15CB
;
A15EC:  PUSH    H
        LXI     D,0B850H
        LXI     B,0007H
        LDIR
        LXI     H,0B850H
        MVI     B,007H
        RST     6
        POP     H
        RET
;----------------------------
; Установка битов
;----------------------------
A15FD:  CALL    A16B3
        MVI     L,041H
        CALL    A13FA
        JRZ     A1617
        ORA     A
        JRNZ    A1610
        RES     5,00EH(X)
        JMPR    A1617
;
A1610:  DCR     A
        JRNZ    A15FD
        SET     5,00EH(X)
A1617:  CALL    A16B3
        MVI     L,042H
        CALL    A13FA
        JRZ     A1631
        ORA     A
        JRNZ    A162A
        RES     4,00EH(X)
        JMPR    A1631
;
A162A:  DCR     A
        JRNZ    A1617
        SET     4,00EH(X)
A1631:  CALL    A16B3
        MVI     L,043H
        CALL    A13FA
        JRZ     A164B
        ORA     A
        JRNZ    A1644
        RES     3,00EH(X)
        JMPR    A164B
;
A1644:  DCR     A
        JRNZ    A1631
        SET     3,00EH(X)
A164B:  CALL    A16B3
        MVI     L,044H
        CALL    A13FA
        JRZ     A1665
        ORA     A
        JRNZ    A165E
        RES     2,00EH(X)
        JMPR    A1665
;
A165E:  DCR     A
        JRNZ    A164B
        SET     2,00EH(X)
A1665:  CALL    A16B3
        MVI     L,045H
        CALL    A13FA
        JRZ     A15FD
        ORA     A
        JRNZ    A1678
        RES     0,00EH(X)
A1676:  JMPR    A15FD
;
A1678:  DCR     A
        JRNZ    A1665
        SET     0,00EH(X)
        JMPR    A1676
;----------------------------
; Заставка SUP nn - **
;----------------------------
A1681:  MVI     L,030H
        MVI     M,03EH
        INR     L
        MVI     M,073H
        INR     L
        INR     L
        MVI     M,054H
        INR     L
        MVI     M,054H
        INR     L
        MVI     M,040H
        INR     L
        LDA     YB828
        PUSH    PSW
        CALL    A0527
        MOV     M,E
        INR     L
        POP     PSW
        CPI     006H
        JRNZ    A16A8
        LDA     YB80B
        CALL    A0527
        MOV     M,E
A16A8:  INR     L
        MVI     M,06DH
        RET
;
A16AC:  RST     2
        RST     4
        CALL    A02E2
        RST     1
        RET
;
A16B3:  RST     2
        MVI     L,030H
        MVI     M,040H
        INR     L
        MOV     E,00EH(X)
        BIT     5,E
        CALL    A16DE
        BIT     4,E
        CALL    A16DE
        BIT     3,E
        CALL    A16DE
        BIT     2,E
        CALL    A16DE
        BIT     0,E
        CALL    A16DE
        MVI     M,03FH
        INR     L
        MVI     M,03FH
        INR     L
        MVI     M,06EH
        RET
;
A16DE:  MVI     A,03FH
        JRZ     A16E4
        MVI     A,006H
A16E4:  MOV     M,A
        INR     L
        RET
;-----------------------------
; Подпрограмма определения номера звонящего абонента
;
;-----------------------------
A16E7:  PUSH    H
        PUSH    D
        PUSH    B
        MVI     A,00EH    ; закорачивание линии на 80 мс
        OUT     CC55
        MVI     B,020H
A16F0:  HLT
        DJNZ    A16F0
        LDA     YB812
        OUT     CC55
        DI
        LDA     YB810     ; вывод на индикатор символа режима определения
        ANI     0F0H      ; номера
        ORI     028H
        OUT     CA55
        MVI     A,05CH
        OUT     IR22
        MVI     C,004H    ; загрузить счетчик запросов
        LDA     YB80E     ; проверить разрешены запросы (bit2[YB80E]=1)
        BIT     2,A       ; или нет (bit2[YB80E]=0)
        JRZ     A1726
A170F:  MVI     B,03AH    ; загрузить счетчик периодов в сигнале запроса
        MVI     A,005H    ; формирование сигнала запроса частотой 500 Гц
A1713:  OUT     CW55
        EXX
        CALL    A175C
        LDA     A1713-1
        DCR     A
        OUT     CW55
        CALL    A175C
        EXX
        INR     A
        DJNZ    A1713
A1726:  MVI     B,006H    ; счетчик числа попыток принятия верного кода
        MVI     H,0BFH    ; загрузка адреса буфера первичного кода
A172A:  MVI     L,050H
A172C:  PUSH    B
        CALL    A187F     ; произвести выборку кода с линии
        MOV     M,A
        MOV     A,C
        CPI     015H
        POP     B
        JRC     A1744     ; считать код непринятым ,если низка уверенность
                          ; его приема
        MVI     A,00AH    ; код также не принимается ,если он
                          ; не идентифицирован
        CMP     M
        JRZ     A1744
        INR     L
        MVI     A,053H
        CMP     L
        JRZ     A1749     ; попытка завершена , если принята четверка кодов
        JMPR    A172C
;
A1744:  DJNZ    A172A
        DCR     C         ; уменьшить счетчик попыток ,если предыдущая
                          ; попытка была неудачной
        JRNZ    A170F     ; если число попыток исчерпано то принять первичный
                          ; код без проверки на корректность
        ; прием массива первичного кода
A1749:  MVI     B,050H    ; количиство принимаемых кодов
A174B:  PUSH    B
        CALL    A187F     ; прием кода
        POP     B
        MOV     M,A
        INR     L
        DJNZ    A174B     ; принято ли необходимое количество ?
        EI
        CALL    A1763     ; дешифрация принятого кода
        POP     B
        POP     D
        POP     H
        RET
;-----------------------------
; Точная задержка на 1 мс
;-----------------------------
A175C:  MVI     B,068H
A175E:  PUSH    D
        POP     D
        DJNZ    A175E
        RET
;-----------------------------
; Забой неопределенностью
;-----------------------------
A1763:  CALL    A17CE     ; дешифрация первичного кода
        RNC               ; выход , если номер определен успешно
        LXI     H,0B850H  ; иначе в буфер номера (B850H-B857H)
        MVI     B,007H    ; записать код неопределенности 0AH
A176C:  MVI     M,00AH    ; (индицируется в виде прочерка )
        INR     L
        DJNZ    A176C
        MOV     M,B
        RET
;-----------------------------
; Тетрадная идентификация цифры
;
; Цифра идентифицирована в тетраде , если обнаружена четверка или тройка
;  одинаковых идентифицированных кодов или в начале тетрады присутствует
;  двойка одинаковых идентифицированных кодов
;-----------------------------
A1773:  PUSH    Y
        PUSH    H
        EXX
        POP     H
        LXI     D,0A00H
A177B:  LXI     B,0400H     ; Проверка присутствия всех цифр 0..C исключая
        PUSH    H           ;  код неопределенности A
A177F:  MOV     A,M
        CMP     E
        JRNZ    A1784
        INR     C
A1784:  INR     L
        DJNZ    A177F
        POP     H
        MOV     A,C
        CPI     003H
        JRNC    A17BD
        CPI     002H
        JRNZ    A1797
        MOV     A,E
        CPI     00AH
        JRZ     A1797
        MOV     D,E
A1797:  INR     E
        MOV     A,E
        CPI     00DH
        JRC     A177B
        MOV     A,D
        CPI     00AH        ; D - не равен 0A если была зафиксирована 
        JRZ     A17BB       ; двойка или тройка
        PUSH    H
        POP     Y
        MVI     B,003H
A17A7:  MOV     A,000H(Y)   ; 
        CPI     00AH
        JRZ     A17B3
        CMP     001H(Y)
        JRZ     A17B8
A17B3:  INX     Y
        DJNZ    A17A7
        MOV     A,D         ; Взять цифру последней пары если нет соседей
A17B8:  ANA     A           ; Сброс флага C
        JMPR    A17BE
;
A17BB:  STC
        MOV     E,A
A17BD:  MOV     A,E
A17BE:  EXX
        POP     Y
        RET
;-----------------------------
; Перемещение указателя ячейки в буфере цифр на 4 вперед
;-----------------------------
A17C2:  INR     A
        INR     A
        RRC
        RRC
        ANI     03FH
A17C8:  INX     Y
        DCR     A
        JRNZ    A17C8
        RET
;----------------------------
; тетрадная свертка  первичного кода в массив первичных цифр
;----------------------------
;
A17CE:  MVI     L,0A0H    ; загрузка области BFA0-BFFF кодом 0A
A17D0:  MVI     M,00AH
        INR     L
        JRNZ    A17D0
        LXI     Y,0BFB0H  ; адрес области загрузки первичных цифр
        LXI     B,4FFEH   ; [B]=4fh -[количество обрабатываемых кодов - 1]
                          ; [C]=FEH -начальная константа сравнения
        MVI     L,050H    ; [HL] - адрес начала области первичного кода
        LXI     D,0000    ; [D]=00 счетчик повторений неопределенности
                          ; [E]=00 счетчик повторений текущей цифры
A17E1:  CALL    A1773     ;  распознование цифры в текущей тетраде кодов
                          ; (тетрада начинается с адреса в [HL])
        JRNC    A17F0
        INR     D         ; если цифра не определена то увеличить
                          ; счетчик неопределенностей
        MOV     A,D
        CPI     004H
        JRC     A1808     ; если не определилось подряд 4-е цифры ,
        MVI     A,00AH    ; то вместо первичной цифры записать код
        JMPR    A17F5     ; неопределенности
A17F0:  MVI     D,000H    ; если цифра определилась
        CMP     C
        JRZ     A1807     ; и не равна предыдущей , то
A17F5:  PUSH    PSW       ; проверить количество предыдущих ее повторений
        MOV     A,E       ; и если оно больше 12 ,то интерпретировать ее как
        CPI     00DH      ; 3 первичных цифры 2-я из которых не определена
        CNC     A17C2     ; поскольку в посылке АОН не могут быть одинаковыми
        POP     PSW       ; соседние цифры
        MVI     E,000H    ; если же количество повторений не больше 12 ,
        MOV     000H(Y),A ; то записать цифру в массив первичных цифр
        MOV     C,A       ; предыдущая цифра = текущая цифра
        INX     Y         ; передвинуть указатель на следующую ячейку
        JMPR    A1808     ; массива первичных цифр
;
A1807:  INR     E         ; если цифра равна предыдущей , то увеличить
                          ; счетчик повторений цифры
A1808:  INR     L         ; переместить указатель на следующую ячейку
                          ; массива первичных кодов
        DJNZ    A17E1     ; продолжать свертку пока не достигнут конец
                          ; массива первичных кодов

        MVI     B,020H    ; поиск символов обозначения начала/конца посылки
        LXI     D,0000    ; АОН в массиве первичных цифр
        LXI     H,0BFB0H
A1813:  MVI     A,00BH
        CMP     M
        JRNZ    A1821
        SHLD    YB806
        MOV     A,D
        ORA     E
        JRNZ    A182F
        PUSH    H
        POP     D
A1821:  INR     L
        MVI     A,0D0H
        CMP     L
        JRC     A1829
        DJNZ    A1813
A1829:  MOV     A,D
        ORA     E
        JRNZ    A1838
        STC
        RET
;
A182F:  PUSH    H
        DSBC    D
        MOV     A,L
        CPI     009H
        POP     H
        JRZ     A183A

A1838:  PUSH    D         ; идентификация начала и конца
        POP     H         ; кодовой посылки
A183A:  DCR     E         ; и запись кодовой посылки в буфер номера
        PUSH    D
        DCR     L
        LXI     D,0B850H
        MVI     B,008H
A1842:  MOV     A,M
        DCR     L
        XTHL
        CPI     00AH
        JRNZ    A184A
        MOV     A,M
A184A:  DCR     L
        XTHL
        STAX    D
        INR     E
        DJNZ    A1842
        POP     H
        MVI     B,008H
        LDED    YB806
        LXI     H,0B857H
        INR     E
A185B:  LDAX    D           ; изменение следования цифр в кодовой посылке
        CMP     M           ; на обратный
        JRZ     A186A
        CPI     00AH
        JRZ     A186A
        MOV     C,A
        MOV     A,M
        CPI     00AH
        JRNZ    A186A
        MOV     M,C
A186A:  INR     E
        DCR     L
        DJNZ    A185B
        INR     L          ; замена символа повтора на предыдущую цифру
        MVI     B,008H
        MVI     A,00CH
A1873:  CMP     M
        JRNZ    A187A
        DCR     L
        MOV     C,M
        INR     L
        MOV     M,C
A187A:  INR     L
        DJNZ    A1873
        ANA     A
        RET
;-----------------------------
; Дешифратор частотного пакета
;-----------------------------
A187F:  EXX
        MVI     L,040H
        EXX
        MVI     E,30
        LXI     B,0803H
A1888:  IN      CB55
        RAR
        RALR    C
        MOV     A,C
        STAI
        JRC     A18A6
        EXX
        SSPD    YB806
        MVI     H,HIGH(YBF00)
        MVI     B,HIGH(T1F00)
A189B:  MVI     M,000H
        INX     H
        RLCR    M
        MVI     M,000H
        INX     H
        EXX
        DJNZ    A1888
A18A6:  MOV     A,B
        DCR     A
        EXX
        MVI     L,040H
        JRNZ    A189B
        EXX
        SSPD    YB806
        LXI     SP,T1D8C
        LXI     SP,T1D8C
A18B8:  LXI     B,0803H
A18BB:  EXX
        MVI     L,040H
        EXX
        NOP
A18C0:  IN      CB55
        RAR
        RALR    C
        JRC     A18DC
        EXX
        POP     D
        LDAI
        XRA     E
        MOV     C,A
        LDAX    B
        ADD     M
        MOV     M,A
        INR     L
        LDAI
        XRA     D
        MOV     C,A
        LDAX    B
        ADD     M
        MOV     M,A
        INR     L
        EXX
        DJNZ    A18C0
A18DC:  RLCR    M
        RRCR    M
        MOV     A,M
        MOV     A,B
        DCR     B
        JRNZ    A1918
        MOV     A,C
        STAI
        DCR     E
        JRNZ    A18B8
        EXX
        MVI     L,040H
        MVI     A,006H
A18F0:  EXAF
        POP     D
        LDAI
        XRA     E
        MOV     C,A
        LDAX    B
        ADD     M
        INR     L
        SUI     07CH
        JRNC    A18FE
        CMA
A18FE:  MOV     E,A
        LDAI
        XRA     D
        MOV     C,A
        LDAX    B
        ADD     M
        SUI     07CH
        JRNC    A190A
        CMA
A190A:  ADD     E
        EXX
        CMP     B
        JRC     A191E
        MOV     C,B
        MOV     B,A
        EXX
        MOV     A,L
        EXX
        MOV     E,D
        MOV     D,A
        JMPR    A1926
;
A1918:  IN      CB55
        IN      CB55
        JMPR    A18BB
;
A191E:  CMP     C
        JRC     A1926
        MOV     C,A
        EXX
        MOV     A,L
        EXX
        MOV     E,A
A1926:  EXX
        INR     L
        EXAF
        DCR     A
        JRNZ    A18F0
        LSPD    YB806
        EXX
        MVI     A,00EH
        ANA     E
        MOV     E,A
        RLC
        ADD     E
        MOV     E,A
        MVI     A,00EH
        ANA     D
        RRC
        ADD     E
        MVI     D,HIGH(T1D00)
        MOV     E,A
        LDAX    D
        RET
;-----------------------------
; Озвучивание звонка
;-----------------------------
A1942:  PUSH    B
        MVI     L,050H
A1945:  MOV     A,M
        CALL    A1953
        JRNZ    A1951
        INR     L
        MVI     A,058H
        CMP     L
        JRNZ    A1945
A1951:  POP     B
        RET
;
A1953:  CPI     00DH
        JRC     A1959
        MVI     A,00AH
A1959:  CALL    A19DF
        XCHG
        DAD     H
        XCHG
        MVI     A,090H
        CALL    A0274
        MVI     B,032H
A1966:  HLT
        IN      CB55
        BIT     2,A
        JRNZ    A1973
        CALL    A028B
        XRA     A
        INR     A
        RET
;
A1973:  DJNZ    A1966
        CALL    A028B
        XRA     A
        RET
;
A197A:  MVI     A,090H
A197C:  PUSH    H
        PUSH    D
        PUSH    B
        MOV     C,A
        LXI     H,T1D24
A1983:  MOV     A,M
        INR     A
        JRZ     A19DB
        DCR     A
        MVI     B,032H
        ANI     0C0H
        JRZ     A1998
A198E:  PUSH    PSW
        MVI     A,032H
        ADD     B
        MOV     B,A
        POP     PSW
        SUI     040H
        JRNZ    A198E
A1998:  MOV     A,M
        ANI     00FH
        CALL    A19DF
        JPO     A19B8
        MOV     A,M
        ANI     030H
        JRZ     A19AD
        XCHG
A19A7:  DAD     H
        SUI     010H
        JRNZ    A19A7
        XCHG
A19AD:  LDA     YB812
        SET     6,A
        OUT     CC55
        MOV     A,C
        CALL    A0274
A19B8:  HLT
        IN      CB55
        BIT     2,A
        JRZ     A19D3
        LDA     YB81A
        CPI     030H
        JRC     A19D3
        DJNZ    A19B8
        LDA     YB812
        OUT     CC55
        CALL    A028B
        INX     H
        JMPR    A1983
;
A19D3:  LDA     YB812
        OUT     CC55
        CALL    A028B
A19DB:  POP     B
        POP     D
        POP     H
        RET
;
A19DF:  PUSH    H
        PUSH    B
        LXI     H,T11EF
        LXI     B,000DH
A19E7:  CCI
        JPO     A19F6
        JRZ     A19F3
        INX     H
        INX     H
        INX     H
        JMPR    A19E7
;
A19F3:  MOV     E,M
        INX     H
        MOV     D,M
A19F6:  POP     B
        POP     H
        RET
;----------------------------
; Подпрограмма установки бита блокировки восьмерки
;----------------------------
BLOC8_SET:
        LXI     H,W_BLOC8
        LXI     B,YB815
        LXI     D,A1446
        PUSH    D
        MVI     E,00000001B
        CALL    SET_BIT
;       JMP     BLOC8_SET
;----------------------------
; установка DELAY
;----------------------------
DELAY_SET:
        LXI     B,YB814
        LXI     H,W_DELAY
        LXI     D,A1446
        PUSH    D
        CALL    IN_CONST
        JMP     DELAY_SET


;----------------------------
;  Подпрограмма ввода двухзначных цифр
;  [BC] - адрес ячейки хранения
;  [HL] - адрес заставки
;  ([SP]-2) - адрес возврата
;----------------------------
IN_CONST:
        LXI     D,0
        CALL    INDC_CONST
        RST     2
INC1:   MVI     A,01H
        STA     YB840+6
        RST     3
        CPI     00BH
        JRZ     EX_OUT
        CPI     00AH
        JRNC    INC1
        SLAR    A        ; умноженние А=А*10
        MOV     E,A
        SLAR    A
        SLAR    A
        ADD     E
        MOV     E,A
        ADD     D
        STAX    B
        CALL    INDC_CONST
        RST     2
INC2:   MVI     A,01H
        STA     YB840+7
        RST     3
        CPI     00BH
        JRZ     EX_OUT
        CPI     00AH
        JRNC    INC2
        ADD     E
        STAX    B
        JMP     IN_CONST
;
EX_OUT:
        LXI     H,YB830
        POP     PSW
        RET

;----------------------------
;  Ввывод заставки
;  и значения константы
;  [BC] - адрес ячейки хранения
;  [HL] - адрес заставки
;----------------------------
INDC_CONST:
        PUSH    D
        PUSH    H
        PUSH    B
        LXI     D,YB830
        LXI     B,9
        LDIR
        POP     B
        LXI     H,YB830+6
        LDAX    B
        CALL    A0540
        POP     H
        POP     D
        RET
;----------------------------
;   Подпрограмма установки бита
;   Вход [HL] - адрес строки имени бита
;        [BC] - адрес байта содержащего бит
;         [E] - маска бита
;    ([SP]-2) - адрес возврата
;----------------------------
SET_BIT:
       RST      2
SB1:   LDAX     B
       ANA      E
       CALL     INDC_BIT
       RST      3
       CPI      00BH
       JRZ      EXIT_SB
       CPI      00AH
       JRNC     SB1
       LDAX     B
       XRA      E
       STAX     B
       JMP      SB1
EXIT_SB:
       LXI      H,YB800
       POP      PSW
       RET
;----------------------------
; Подпрограмма индикации состояния бита
; Вход   [HL] - адрес строки с именем бита
;        флаг [Z] - состояние бита
;----------------------------
INDC_BIT:
       PUSH     D
       PUSH     H
       PUSH     B
       LXI      D,YB830
       LXI      B,5
       LDIR
       INX      H
       INX      H
       INX      H
       MOV      A,M
       MOV      LOW(YB830+8)(X),A
       LXI      D,YB830+5
       JZ       BIT_OFF
       LXI      H,W_ON
       LXI      B,3
       LDIR
       JMP      EXIT_IB
BIT_OFF:
       LXI      H,W_OFF
       LXI      B,3
       LDIR
EXIT_IB:
       POP      B
       POP      H
       POP      D
       RET

W_BLOC8: DB 18H,5CH,58H,7FH,00,00,00,00,7CH
W_DELAY: DB 79H,38H,77H,6EH,40H,00,00,00,5EH
W_ON:    DB 00,3FH,54H
W_OFF:   DB 3FH,71H,71H

      ORG     1D00h

;          ТАБЛИЦА ЦИФР СООТВЕТСТВУЮЩИХ ПАРАМ ЧАСТОТ
;
T1D00:  ;    КОД    ПАРА ЧАСТОТ

        db   0AH  ;  0-0       КОДЫ 00H-09H - ЦИФРЫ
        db   01H  ;  0-1       КОД  0AH     - НЕОПРЕДЕЛЕННОСТЬ
        db   02H  ;  0-2       КОД  0BH     - НАЧАЛО/КОНЕЦ
        db   04H  ;  0-3       КОД  0CH     - ПОВТОР ЦИФРЫ
        db   07H  ;  0-4
        db   0AH  ;  0-5
        db   01H  ;  1-0
        db   0AH  ;  1-1
        db   03H  ;  1-2
        db   05H  ;  1-3
        db   08H  ;  1-4
        db   0AH  ;  1-5
        db   02H  ;  2-0
        db   03H  ;  2-1
        db   0AH  ;  2-2
        db   06H  ;  2-3
        db   09H  ;  2-4
        db   0BH  ;  2-5
        db   04H  ;  3-0
        db   05H  ;  3-1
        db   06H  ;  3-2
        db   0AH  ;  3-3
        db   00H  ;  3-4
        db   0CH  ;  3-5
        db   07H  ;  4-0
        db   08H  ;  4-1
        db   09H  ;  4-2
        db   00H  ;  4-3
        db   0AH  ;  4-4
        db   0AH  ;  4-5
        db   0AH  ;  5-0
        db   0AH  ;  5-1
        db   0BH  ;  5-2
        db   0CH  ;  5-3
        db   0AH  ;  5-4
        db   0AH  ;  5-5
;
;                      ТАБЛИЦА НОТ МУЗЫКАЛЬНОЙ ЗАСТАВКИ
T1D24:  db   08H
        db   8EH
        db   03H
        db   01H
        db   10H
        db   18H
        db   10H
        db   18H
        db   16H
        db   18H
        db   60H
        db   68H
        db   60H
        db   28H
        db   66H
        db   68H
        db   0EH
        db   28H
        db   8EH
        db   26H
        db   0EH
        db   28H
        db   0EH
        db   0E8H
        db   26H
        db   0EH
        db   68H
        db   0CFH
        db   0FFH
;
;                    ФИРМЕННАЯ ВСТАВКА
T1D4D:
        db  'C'
        db  'R'
        db  'E'
        db  'A'
        db  'T'
        db  'E'
        db  'D'
        db  ' '
        db  'B'
        db  'Y'
        db  ' '
        db  'E'
        db  'L'
        db  'I'
        db  'S'
        db  'E'
        db  'E'
        db  'V'
        db  ' '
        db  'A'
        db  '.'
        db  'S'
        db  '.'
        db  ' '
        db  'L'
        db  'E'
        db  'N'
        db  'T'
        db  'V'
        db  'A'
        db  'R'
        db  'I'
        db  'S'
        db  ','
        db  'P'
        db  'H'
        db  'O'
        db  'N'
        db  'E'
        db  ' '
        db  '('
        db  '8'
        db  '-'
        db  '2'
        db  '3'
        db  '8'
        db  ')'
        db  '5'
        db  '8'
        db  '-'
        db  '5'
        db  '6'
        db  '5'
        db  '.'
        db  '1'
        db  '-'
        db  'J'
        db  'A'
        db  'N'
        db  '-'
        db  ' '
        db  '1'
        db  '9'
        db  '9'
        db  '5'
        db  ' '
        db  ' '
        db  'v'
        db  'e'
        db  'r'
        db  ' '
        db  '0'
        db  '0'
        db  '3'
        db  ' '
;
;                  ТАБЛИЦА ЭПЮР ЭТАЛОННЫХ ЧАСТОТ
T1D8C:
      db    0FFH,0FFH,0FCH,0FFH
      db    0F8H,0FFH,0F0H,0FFH,0E0H,0FEH,0E0H,0FCH
      db    00H,0FFH,00H,0F8H,00H,0C0H,07H,80H
      db    1FH,00H,3FH,03H,00H,80H,0FH,00H
      db    0FFH,03H,0FEH,3FH,0F0H,0FFH,80H,0F8H
      db    3FH,00H,0FFH,1FH,0E0H,0FFH,00H,0F0H
      db    0FH,00H,7FH,0FH,0FFH,3FH,80H,0FFH
      db    03H,80H,0FFH,07H,0F0H,0FFH,01H,0E0H
      db    0E0H,0FFH,01H,00H,0FFH,0FH,0C0H,0FEH
      db    0FH,00H,0FCH,1FH,00H,0F0H,0FFH,03H
      db    0C0H,0FEH,1FH,00H,0F8H,7FH,03H,0C0H
      db    07H,00H,0F8H,0FFH,07H,00H,0F8H,0FFH
      db    07H,80H,0F8H,7FH,0FFH,03H,00H,0F0H
      db    0FFH,1FH,01H,0C0H,0F8H,7FH,0FH,80H
      db    0FEH,0FFH,1FH,00H,00H,0FCH,0FFH,1FH
T1E00:
      db    03H,80H,0F0H,0FEH,00H,0FFH,0FFH,3FH
      db    0FH,00H,00H,0F8H,0FCH,3FH,1FH,01H
      db    00H,00H,80H,0FEH,0FEH,7FH,3FH,03H
      db    03H,0C0H,0C0H,0FCH,0FFH,00H,03H,00H
      db    00H,0F0H,0E0H,0FFH,0FCH,3FH,7FH,07H
      db    0FFH,7FH,0FFH,07H,3FH,00H,07H,00H
      db    01H,0C0H,80H,0F0H,0C0H,0FFH,0F0H,0FFH
      db    0F8H,0FFH,0FCH,7FH,0FEH,1FH,0FEH,0FH
      db    00H,0E0H,00H,0E0H,00H,0E0H,00H,0E0H
      db    01H,0E0H,01H,0E0H,0FH,00H,3FH,00H
      db    7FH,03H,0FFH,07H,0FEH,1FH,0FCH,3FH
      db    0FFH,07H,0FFH,7FH,0F0H,0FFH,80H,0FCH
      db    00H,0F0H,07H,0C0H,0FCH,0FFH,00H,0FEH
      db    01H,0C0H,1FH,00H,0FFH,0FH,0F8H,7FH
      db    00H,0FCH,07H,00H,0FFH,07H,0F0H,0FFH
      db    00H,0F0H,0FH,01H,01H,00H,0FFH,0FH
      db    0C0H,0FFH,03H,80H,0FFH,0FH,0E0H,0FEH
      db    0FFH,00H,0E0H,0FFH,03H,00H,0FEH,1FH
      db    00H,0F8H,3FH,03H,0FFH,0FFH,00H,0C0H
      db    0FFH,1FH,00H,0F0H,7FH,07H,0C0H,0F8H
      db    80H,0FFH,7FH,00H,80H,0FEH,7FH,03H
      db    80H,0F8H,7FH,07H,00H,0C0H,0FEH,0FFH
      db    0FH,00H,0E0H,0FEH,7FH,07H,00H,0F0H
      db    1FH,00H,00H,0FCH,0FFH,3FH,0FH,00H
      db    0C0H,0FCH,0FEH,1FH,0FFH,0FH,07H,00H
      db    00H,0F8H,0FCH,7FH,3FH,03H,03H,0E0H
      db    0F0H,0FFH,0FFH,1FH,1FH,00H,01H,0C0H
      db    0C0H,0FCH,0F8H,3FH,00H,0F8H,0C0H,0FFH
      db    0FCH,0FFH,0FFH,0FH,3FH,03H,07H,80H
      db    03H,00H,00H,80H,00H,0F0H,80H,0F8H
      db    0E0H,0FEH,0F0H,0FFH,0FFH,01H,0FFH,01H
      db    7FH,01H,3FH,01H,1FH,01H,1FH,01H
;
;            ТАБЛИЦА СООТВЕТСТВИЯ БАЙТА И КОЛИЧЕСТВА
;             ЕДИНИЦ В НЕМ
T1F00:
      db    00H,01H,01H,02H,01H,02H,02H,03H,01H,02H,02H,03H,02H,03H,03H,04H
      db    01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H
      db    01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H
      db    02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H
      db    01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H
      db    02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H
      db    02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H
      db    03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H
      db    01H,02H,02H,03H,02H,03H,03H,04H,02H,03H,03H,04H,03H,04H,04H,05H
      db    02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H
      db    02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H
      db    03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H
      db    02H,03H,03H,04H,03H,04H,04H,05H,03H,04H,04H,05H,04H,05H,05H,06H
      db    03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H
      db    03H,04H,04H,05H,04H,05H,05H,06H,04H,05H,05H,06H,05H,06H,06H,07H
      db    04H,05H,05H,06H,05H,06H,06H,07H,05H,06H,06H,07H,06H,07H,07H,08H

      END