044B CD 55 04 CALL FIND ; просматриваем строку таблицы враждебности
044E CD 55 04 CALL FIND ; на предмет наличия допустимого маршрута
0451 CD 55 04 CALL FIND ;
0454 C9 RET
0455 7E FIND: MOV A,M ; допустимый маршрут
0456 23 INX H ; переход к следующему допустимому
0457 B8 CMP B ; если установленный и допустимый совпадают - ОК
0458 C2 5E 04 JNZ BAD1 ; если нет - враждебен
045B 1E FF MVI E,FFH ;
045D C9 RET ;
045E 1E 00 BAD1: MVI E,00H ;
0460 C9 RET
0461 3A 80 20 SVOBOD: LDA STATEB1 ; текущще состояние байт 1
0464 47 MOV B,A ;
0465 7E MOV A,M ; загружаем маску для первого байта
0466 A0 ANA B ; применяем маску к текущему состоянию
0467 57 MOV D,A ; запоминаем
0468 3A 85 20 LDA STATEB2 ; текущее состояние байт 2
046B 47 MOV B,A ;
046C 23 INX H ; переходим к следующей маске в таблице
046D 7E MOV A,M ; загружаем маску для второго байта
046E A0 ANA B ; применяем маску к текущему состоянию
046F 82 ADD D ; складываем два результата наложения масок
0470 57 MOV D,A ; запоминаем
0471 23 INX H ; переходим к требуемому результату суммы
0472 7E MOV A,M ;
0473 BA CMP D ; сравниваем
0474 C2 7A 04 JNZ ERRM1 ; если результаты различны - секции не готовы
0477 1E FF MVI E,FFH ; секции готовы, свободно
0479 C9 RET ;
047A 1E 00 ERRM1: MVI E,00H ; знято
047C C9 RET ; возврат
047D 3A 60 20 OUTTHE: LDA OUTPUT1 ; формирование управляющих воздействий
0480 47 MOV B,A ; на текущее воздействие накладываются
0481 7E MOV A,M ; 2 маски одна - для замены 1 на 0
0482 A0 ANA B ;
0483 47 MOV B,A ;
0484 23 INX H ;
0485 7E MOV A,M ; вторая для замены 0 на 1
0486 B0 ORA B ;
0487 32 60 20 STA OUTPUT1 ;
048A 23 INX H ;
048B 3A 70 20 LDA OUTPUT2 ;
048E 47 MOV B,A ;
048F 7E MOV A,M ;
0490 A0 ANA B ;
0491 47 MOV B,A ;
0492 23 INX H ;
0493 7E MOV A,M ;
0494 B0 ORA B ;
0495 32 70 20 STA OUTPUT2 ;
0498 C9 RET ; возврат
0499 3E 01 STRELKA: MVI A,01H ;
049B 32 53 20 STA OUT_MODE ; режим вывода информации - перевод стрелки
049E DB C6 IN PORT9 ;
04A0 E6 20 ANI 20H ; isOK?
04A2 CA F3 0A JZ VIKL ; второй канал неисправен - в защитное состояние
04A5 3A 60 20 LDA OUTPUT1 ;
04A8 D3 C4 OUT PORT1 ;
04AA 3E 05 MVI A,05H ; GO!=1
04AC D3 C7 OUT PPI1MS ; на всякий случай задержка,
04AE CD 95 02 CALL WAIT1 ; должно произойти прерывание IRQ_GO
04B1 3A 53 20 LDA OUT_MODE ;
04B4 E6 08 ANI 08H ; перевод начат?
04B6 CA F3 0A JZ VIKL ; 2 канал работает замедленно - в защитное состояние
04B9 C9 RET ; возврат
04BA 26 2A RAZDEL: MVI H,2AH ; нулевое состояние байта занимаемых секций
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.