Difference between revisions of "Uknc ROM disasm - 6"

From Felixl.com
Jump to navigationJump to search
 
(Исправлены ошибки)
 
Line 1: Line 1:
 
<pre>
 
<pre>
 +
 
; *****************************************************************
 
; *****************************************************************
 
; *                                                              *
 
; *                                                              *
Line 30: Line 31:
 
; *****************************************************************
 
; *****************************************************************
  
.=160000
+
        $MFPC$  = 22
 +
        $MFPS$  = 24
 +
        $MTPC$  = 32
 +
        $MTPS$  = 34
 +
        $MFPM$  = 21
 +
        $MTPM$  = 31
 +
        $STEP$  = 16
 +
        $RUN$  = 12
  
160000$:.WORD 160300$,200 ; Вектор прерывания по включению питания
+
        .=160000
160004$:.WORD 160230$,600 ; Вектор прерывания по зависанию (HALT)
+
 
160010$:.WORD 165612$,600 ; Вектор прерывания по инструкции FIS
+
160000$:.WORD   160300$,200     ; Вектор прерывания по включению питания
 +
160004$:.WORD   160230$,600     ; Вектор прерывания по зависанию (HALT)
 +
160010$:.WORD   165612$,600     ; Вектор прерывания по инструкции FIS
 
; Адреса подпрограмм обработки прерываний EMT 14 - EMT 24
 
; Адреса подпрограмм обработки прерываний EMT 14 - EMT 24
160014$:.WORD 173502$,160270$,103564$,104132$,104132$
+
160014$:.WORD   173502$,160270$,103564$,104132$,104132$
 
; "Пустые" адреса
 
; "Пустые" адреса
160026$:.REPT 4
+
160026$:.REPT   5
.WORD 160270$
+
        .WORD   160270$
.ENDR
+
        .ENDR
 
; Адреса подпрограмм обработки прерываний EMT 40 - EMT 76
 
; Адреса подпрограмм обработки прерываний EMT 40 - EMT 76
160040$:.WORD 107754$,117126$,117162$,117174$
+
160040$:.WORD   107754$,117126$,117162$,117174$
.WORD 117406$,117250$,117410$,117240$
+
        .WORD   117406$,117250$,117410$,117240$
.WORD 117412$,117414$,117416$,117420$
+
        .WORD   117412$,117414$,117416$,117420$
.WORD 117422$,160270$,117424$,117426$
+
        .WORD   117422$,160270$,117424$,117426$
 
; "Пустые" адреса
 
; "Пустые" адреса
160100$:.REPT 30
+
160100$:.REPT   30
.WORD 160270$
+
        .WORD   160270$
.ENDR
+
        .ENDR
 
; Адреса подпрограмм обработки прерываний TRAP 0 - TRAP 6
 
; Адреса подпрограмм обработки прерываний TRAP 0 - TRAP 6
160160$:.WORD 174254$,175516$,175664$,160270$
+
160160$:.WORD   174254$,175516$,175664$,160270$
160170$:.WORD 160240$,600 ; Вектор прерывания по команде/сигналу HALT
+
160170$:.WORD   160240$,600     ; Вектор прерывания по команде HALT
160174$:.WORD 160250$,600 ; Вектор прерывания по двойному зависанию
+
160174$:.WORD   160250$,600     ; Вектор прерывания по двойному зависанию
 
; Точка входа обработчика прерывания 4
 
; Точка входа обработчика прерывания 4
160200$:MOV #163627$,@172662$
+
160200$:MOV     #163627$,@172662$
BR 160266$
+
        BR     160266$
 
; Точка входа обработчика прерывания 10
 
; Точка входа обработчика прерывания 10
160210$:MOV #163641$,@172662$
+
160210$:MOV     #163641$,@172662$
BR 160614$
+
        BR     160614$
 
; Точка входа обработчика прерывания 24
 
; Точка входа обработчика прерывания 24
160220$:MOV #163657$,@172662$
+
160220$:MOV     #163657$,@172662$
BR 160614$
+
        BR     160614$
 
; Точка входа обработчика прерывания 160004
 
; Точка входа обработчика прерывания 160004
160230$:MOV #163627$,@172662$
+
160230$:MOV     #163627$,@172662$
BR 160614$
+
        BR     160574$
 
; Точка входа обработчика прерывания 160170
 
; Точка входа обработчика прерывания 160170
160240$:MOV #163731$,@172662$
+
160240$:MOV     #163731$,@172662$
BR 160614$
+
        BR     160614$
 
; Точка входа обработчика прерывания 160174
 
; Точка входа обработчика прерывания 160174
160250$:MOV #163707$,@172662$
+
160250$:MOV     #163707$,@172662$
BR 160614$
+
        BR     160614$
 
; Точка входа обработчика прерывания 160274
 
; Точка входа обработчика прерывания 160274
160260$:MOV #163736$,@172662$
+
160260$:MOV     #163736$,@172662$
160266$:BR 160614$
+
160266$:BR     160614$
 
160270$:RETURN
 
160270$:RETURN
160272$:.WORD 161236$ ; Адрес п/п снятия режима HALT (для ЦП)
+
160272$:.WORD   161236$         ; Адрес п/п снятия режима HALT (для ЦП)
160274$:.WORD 160260$,600 ; Вектор прерывания по зависанию при приеме АВП
+
160274$:.WORD   160260$,600     ; Вектор прерывания по зависанию при приеме АВП
 
; Точка входа при включении питания (адрес начального пуска)
 
; Точка входа при включении питания (адрес начального пуска)
160300$:MOV @#172660$,R4 ; R4 = адрес ОЗУ пультового отладчика
+
160300$:MOV     @#172660$,R4   ; R4 = адрес ОЗУ пультового отладчика
CLR R0 ; Признак ошибок = 0
+
        CLR     R0             ; Признак ошибок = 0
MOV R4,SP
+
        MOV     R4,SP
BMI 160464$ ; Запуск в ЦП
+
        BMI     160464$         ; Запуск в ЦП
BIT #20,@#177716 ; ЦП в режиме HALT ?
+
        BIT     #20,@#177716   ; ЦП в режиме HALT ?
BEQ 160332$ ; Нет
+
        BEQ     160332$         ; Нет
MOV @#0,R1
+
        MOV     @#0,R0
BEQ 160332$
+
        BEQ     160332$
JMP @R0
+
        JMP     @R0
160332$:MOV #40,@#177716$ ; Останов ЦП (установка DCLO и ACLO)
+
160332$:MOV     #40,@#177716   ; Останов ЦП (установка DCLO и ACLO)
CALL 173252$ ; Перекачка пультового монитора в сист. ОЗУ ЦП
+
        CALL   173252$         ; Перекачка пультового монитора в сист. ОЗУ ЦП
MOV #70045,@#177010 ; Передача ключа теста памяти (делать или нет)
+
        MOV     #70045,@#177010 ; Передача ключа теста памяти (делать или нет)
MOV 42(R4),@#177014
+
        MOV     42(R4),@#177014
CLR @#177716 ; Снятие DCLO
+
        CLR     @#177716       ; Снятие DCLO
MOV #100,R0
+
        MOV     #100,R0
160370$:SOB R0,160370$ ; Задержка
+
160370$:SOB     R0,160370$     ; Задержка
MOV #100000,@#177716; Запуск ЦП (снятие ACLO)
+
        MOV     #100000,@#177716; Запуск ЦП (снятие ACLO)
CALL 160410$ ; Тест ПЗУ ПП
+
        CALL   160410$         ; Тест ПЗУ ПП
SWAB R0
+
        SWAB   R0
BR 160474$ ; Переход на тест ОЗУ
+
        BR     160474$         ; Переход на тест ОЗУ
 
; Подпрограмма теста ПЗУ ПП
 
; Подпрограмма теста ПЗУ ПП
160410$:MOV #4,R5 ; R5 = число банков ПЗУ
+
160410$:MOV     #4,R5           ; R5 = число банков ПЗУ
MOV #176776,R1 ; R1 = конечный адрес ПЗУ
+
        MOV     #176776,R1     ; R1 = конечный адрес ПЗУ
MOV #7377,R2 ; R2 = число слов последнего банка ПЗУ
+
        MOV     #7377,R2       ; R2 = число слов последнего банка ПЗУ
CLR R0 ; Очистка признака ошибок
+
        CLR     R0             ; Очистка признака ошибок
160426$:ASL R0 ; Освободить правый бит
+
160426$:ASL     R0             ; Освободить правый бит
CLR R3
+
        CLR     R3
160432$:ADD -(R1),R3 ; Вычисление контрольной суммы
+
160432$:ADD     -(R1),R3       ; Вычисление контрольной суммы
ADC R3
+
        ADC     R3
SOB R2,160432$
+
        SOB     R2,160432$
ASL R5
+
        ASL     R5
CMP 176766$(R5),R3 ; Сравнение с записанной в ПЗУ
+
        CMP     <176770$-2>(R5),R3     ; Сравнение с записанной в ПЗУ
BEQ 160452$ ; Совпадает
+
        BEQ     160452$         ; Совпадает
INC R0 ; Установить правый бит
+
        INC     R0             ; Установить правый бит
160452$:ASR R5
+
160452$:ASR     R5
MOV #10000,R2 ; R2 = число слов в 1,2 и 3 банках ПЗУ
+
        MOV     #10000,R2       ; R2 = число слов в 1,2 и 3 банках ПЗУ
SOB R5,160426$
+
        SOB     R5,160426$
RETURN
+
        RETURN
160464$:CMP 42(R4),#125252 ; Производить тест ОЗУ
+
160464$:CMP     42(R4),#125252 ; Производить тест ОЗУ
BEQ 160534$ ; Нет
+
        BEQ     160534$         ; Нет
160474$:CLR R1 ; R1 = начальный адрес
+
160474$:CLR     R1             ; R1 = начальный адрес
MOV @#172674$,R2 ; R2 = объем ОЗУ в словах
+
        MOV     @#172674$,R2   ; R2 = объем ОЗУ в словах
160502$:MOV R1,@R1 ; Занести в ячейку ее адрес
+
160502$:MOV     R1,@R1         ; Занести в ячейку ее адрес
CMP R1,@R1 ; Сравнить
+
        CMP     R1,@R1         ; Сравнить
BNE 160530$ ; Ошибка
+
        BNE     160530$         ; Ошибка
COM @R1 ; Инвертировать содержимое ячейки
+
        COM     @R1             ; Инвертировать содержимое ячейки
MOV @R1,R3 ; R3 = содержимое ячейки
+
        MOV     @R1,R3         ; R3 = содержимое ячейки
COM R3
+
        COM     R3
CMP R1,R3 ; Содежимое R3 равно адресу
+
        CMP     R1,R3           ; Содежимое R3 равно адресу
BNE 160530$ ; Нет (ошибка)
+
        BNE     160530$         ; Нет (ошибка)
CLR (R1)+ ; Очистить ячейку
+
        CLR     (R1)+           ; Очистить ячейку
SOB R2,160502$
+
        SOB     R2,160502$
BR 160534$
+
        BR     160534$
160530$:BIS #2,R0 ; Установить признак ошибки ОЗУ
+
160530$:BIS     #2,R0           ; Установить признак ошибки ОЗУ
160534$:MOV R4,R1 ; R1 = адрес ОЗУ пультового отладчика
+
160534$:MOV     R4,R1           ; R1 = адрес ОЗУ пультового отладчика
MOV #50,R2 ; R2 = объем ОЗУ пультового отладчика
+
        MOV     #50,R2         ; R2 = объем ОЗУ пультового отладчика
160542$:CLR (R1)+ ; Цикл очистки
+
160542$:CLR     (R1)+           ; Цикл очистки
SOB R2,160542$
+
        SOB     R2,160542$
MOV @#172672$,14(R4); Начальное значение указателя стека
+
        MOV     @#172672$,14(R4); Начальное значение указателя стека
MOV #200,20(R4) ; Начальное значение слова состояния
+
        MOV     #200,20(R4)     ; Начальное значение слова состояния
MOV #125252,42(R4) ; Ключ пропуска теста ОЗУ
+
        MOV     #125252,42(R4) ; Ключ пропуска теста ОЗУ
JMP 172676$
+
        JMP     172676$
160574$:BR 160744$
+
160574$:BR     160744$
 
; Точка перехода из режима УСТАНОВКА при нажатии УПР-@ (пультовый монитор ПП)
 
; Точка перехода из режима УСТАНОВКА при нажатии УПР-@ (пультовый монитор ПП)
160576$:MOV #600,-(SP) ; Записать в стек слово состояния
+
160576$:MOV     #600,-(SP)     ; Записать в стек слово состояния
MOV #160744$,-(SP) ; Записать в стек адрес начала пульт. отл.
+
        MOV     #160744$,-(SP) ; Записать в стек адрес начала пульт. отл.
CLR @172662$ ; Адрес выводимой надписи = 0
+
        CLR     @172662$       ; Адрес выводимой надписи = 0
RTI ; Переход в пультовый отладчик
+
        RTI                     ; Переход в пультовый отладчик
 
; Точка входа при обработке системных прерываний (адрес векторов 160***)
 
; Точка входа при обработке системных прерываний (адрес векторов 160***)
160614$:CLR @172664$ ; Адрес открытой ячейки = 0
+
160614$:CLR     @172664$       ; Адрес открытой ячейки = 0
MOV R0,@172660$ ; Сохранить содержимое R0
+
        MOV     R0,@172660$     ; Сохранить содержимое R0
MOV @#172660$,R0 ; R0 = адрес буфера сохранения
+
        MOV     @#172660$,R0   ; R0 = адрес буфера сохранения
TST (R0)+
+
        TST     (R0)+
MOV R1,(R0)+ ; Сохранить содержимое других регистров
+
        MOV     R1,(R0)+       ; Сохранить содержимое других регистров
MOV R2,(R0)+
+
        MOV     R2,(R0)+
MOV R3,(R0)+
+
        MOV     R3,(R0)+
MOV R4,(R0)+
+
        MOV     R4,(R0)+
MOV R5,(R0)+
+
        MOV     R5,(R0)+
MOV SP,(R0)+
+
        MOV     SP,(R0)+
MOV R0,R1
+
        MOV     R0,R1
$MFPC$ ; Прочесть КРСК
+
        $MFPC$                 ; Прочесть КРСК
MOV R0,(R1)+ ; Сохранить содержимое PC
+
        MOV     R0,(R1)+       ; Сохранить содержимое PC
MOV R0,R3 ; R3 = PC
+
        MOV     R0,R3           ; R3 = PC
$MFPS$ ; Прочесть КРСП
+
        $MFPS$                 ; Прочесть КРСП
MOV R0,(R1)+ ; Сохранить содержимое PS
+
        MOV     R0,(R1)+       ; Сохранить содержимое PS
MOV @#172660,R1
+
        MOV     @#172660,R1
MOV R1,R4 ; R4 = начальный адрес ОЗУ пультового отладчика
+
        MOV     R1,R4           ; R4 = начальный адрес ОЗУ пультового отладчика
ADD 34(R4),PC ; Режим STEP/RUN ?
+
        ADD     34(R4),PC       ; Режим STEP/RUN ?
BR 160744$ ; STEP
+
        BR     160744$         ; STEP
160676$:MOV #4,R2 ; R2 = число точек останова
+
160676$:MOV     #4,R2           ; R2 = число точек останова
SUB #2,R3 ; R3 = предполагаемый адрес останова
+
        SUB     #2,R3           ; R3 = предполагаемый адрес останова
160706$:MOV 50(R1),R5 ; R5 = адрес точки останова
+
160706$:MOV     50(R1),R5       ; R5 = адрес точки останова
BEQ 160736$ ; Отсутствует
+
        BEQ     160736$         ; Отсутствует
MOV 60(R1),R0 ; R0 = значение яч. памяти по адресу останова
+
        MOV     60(R1),R0       ; R0 = значение яч. памяти по адресу останова
ADD #2,R5
+
        ADD     #2,R5
$MTPM$ ; Запись значения в ОЗУ
+
        $MTPM$                 ; Запись значения в ОЗУ
CMP R3,R5 ; Текущий адрес останова = точке останова ?
+
        CMP     R3,R5           ; Текущий адрес останова = точке останова ?
BNE 160736$ ; Нет
+
        BNE     160736$         ; Нет
MOV R3,16(R4) ; PC = подкоррект. адрес останова
+
        MOV     R3,16(R4)       ; PC = подкоррект. адрес останова
160736$:ADD #2,R1 ; Переход к следующей точке останова
+
160736$:ADD     #2,R1           ; Переход к следующей точке останова
SOB R2,160706$
+
        SOB     R2,160706$
160744$:MOV @#172660$,R4 ; R4 = начальный адрес ОЗУ пультового отладчика
+
160744$:MOV     @#172660$,R4   ; R4 = начальный адрес ОЗУ пультового отладчика
MOV R4,SP
+
        MOV     R4,SP
BMI 160762$ ; Исполнение в ЦП
+
        BMI     160762$         ; Исполнение в ЦП
MOV #2,@#22550 ; Запрет перевода ЦП в режим HALT при Esc Гр-]
+
        MOV     #2,@#22550     ; Запрет перевода ЦП в режим HALT при Esc Гр-]
160762$:MOV #70,26(R4) ; Установка указателя на начало буфера
+
160762$:MOV     #70,26(R4)     ; Установка указателя на начало буфера
ADD R4,26(R4)
+
        ADD     R4,26(R4)
MTPS @#172670$ ; Установка ССП
+
        MTPS   @#172670$       ; Установка ССП
JSR R4,163006$ ; Установка системного режима клавиатуры
+
        JSR     R4,163006$     ; Установка системного режима клавиатуры
.WORD 163476$
+
        .WORD   163476$
TST R4 ; Программа исполняется под упр. ПП ?
+
        TST     R4             ; Программа исполняется под упр. ПП ?
BPL 161030$ ; Да
+
        BPL     161030$         ; Да
MOV 36(R4),R0 ; R0 = выход в меню загрузки/монитор
+
        MOV     36(R4),R0       ; R0 = выход в меню загрузки/монитор
MOV #2,36(R4) ; Установка выхода в монитор
+
        MOV     #2,36(R4)       ; Установка выхода в монитор
ADD R0,PC
+
        ADD     R0,PC
BR 161160$ ; Переход на вывод меню загрузки
+
        BR     161160$         ; Переход на вывод меню загрузки
161030$:CALL 163316$ ; Вывод причины останова, адр. ячейки и ее сод.
+
161030$:CALL   163316$         ; Вывод причины останова, адр. ячейки и ее сод.
161034$:MOV R4,SP
+
161034$:MOV     R4,SP
JSR R4,163006$ ; Вывод промптера /@ /
+
        JSR     R4,163006$     ; Вывод промптера /@ /
.WORD 163510$
+
        .WORD   163510$
161044$:CALL 162602$ ; Набор восьм. значения и запрос ком. клавиши
+
161044$:CALL   162602$         ; Набор восьм. значения и запрос ком. клавиши
BIC #240,R0 ; Привести к верхнему регистру
+
        BIC     #240,R0         ; Привести к верхнему регистру
BNE 161062$ ; Нажат не <Пробел>
+
        BNE     161062$         ; Нажат не <Пробел>
JMP 161606$ ; Нажат <Пробел>
+
        JMP     161606$         ; Нажат <Пробел>
161064$:CMPB R0,#3 ; Нажата комбинация УПР-C
+
161062$:CMPB   R0,#3           ; Нажата комбинация УПР-C
BEQ 161206$
+
        BEQ     161206$
CMP R0,#14 ; Нажат <СБРОС>
+
        CMP     R0,#14         ; Нажат <СБРОС>
BEQ 161300$
+
        BEQ     161300$
CMP R0,#15 ; Нажат <Enter>
+
        CMP     R0,#15         ; Нажат <Enter>
BEQ 161034$
+
        BEQ     161034$
CMP R0,#33 ; Код <Escape>
+
        CMP     R0,#33         ; Код <Escape>
BEQ 161306$
+
        BEQ     161306$
CMP R0,#'R ; R (переключение на регистры)
+
        CMP     R0,#'R         ; R (переключение на регистры)
BEQ 161320$
+
        BEQ     161320$
CMP R0,#'A ; A (переключение на точки останова)
+
        CMP     R0,#'A         ; A (переключение на точки останова)
BEQ 161330$
+
        BEQ     161330$
CMP R0,#'M ; M (выход в меню)
+
        CMP     R0,#'M         ; M (выход в меню)
BEQ 161160$
+
        BEQ     161160$
CMP R0,#'T ; T (тест сетевого адаптера)
+
        CMP     R0,#'T         ; T (тест сетевого адаптера)
BEQ 161154$
+
        BEQ     161154$
CMP R0,#'D ; D (переход в автономный режим)
+
        CMP     R0,#'D         ; D (переход в автономный режим)
BNE 161034$
+
        BNE     161034$
161150$:JMP 161530$
+
161150$:JMP     161530$
161154$:JMP 162460$
+
161154$:JMP     162460$
 
; Обработка вызова меню загрузки (M)
 
; Обработка вызова меню загрузки (M)
161160$:JSR R4,163006$ ; Вызов меню загрузки
+
161160$:JSR     R4,163006$     ; Вызов меню загрузки
.WORD 163505$
+
        .WORD   163505$
CALL 172614$ ; Прочесть данные из канала 0 (номер пункта)
+
        CALL   172614$         ; Прочесть данные из канала 0 (номер пункта)
MOV R0,R1 ; R1 = номер выбранного пункта * 2
+
        MOV     R0,R1           ; R1 = номер выбранного пункта * 2
CALL 172614$ ; Прочесть данные из канала 0 (номер уст-ва)
+
        CALL   172614$         ; Прочесть данные из канала 0 (номер уст-ва)
CALL @162350$(R1) ; Вызов соответствующей п/п
+
        CALL   @162350$(R1)   ; Вызов соответствующей п/п
BR 161160$
+
        BR     161160$
 
; Обработка выхода из пультового отладчика (УПР-C)
 
; Обработка выхода из пультового отладчика (УПР-C)
161206$:TST R4 ; Пультовый монитор работает под упр. ПП ?
+
161206$:TST     R4             ; Пультовый монитор работает под упр. ПП ?
BMI 161034$ ; Нет
+
        BMI     161034$         ; Нет
CLR @#22550
+
        CLR     @#22550
MTPS #600
+
        MTPS   #600
MOV @#7144,SP ; Восстановить стек режима УСТАНОВКА
+
        MOV     @#7144,SP       ; Восстановить стек режима УСТАНОВКА
CLR R0
+
        CLR     R0
$MTPS$ ; PS = 0
+
        $MTPS$                 ; PS = 0
$MTPC$ ; PC = 0
+
        $MTPC$                 ; PC = 0
$RUN$ ; Запуск по адресу 0(там RETURN, возврат в УСТ)
+
        $RUN$                   ; Запуск по адресу 0(там RETURN, возврат в УСТ)
 
; П/п снятия в ЦП сигнала HALT
 
; П/п снятия в ЦП сигнала HALT
161236$:MOV R0,-(SP)
+
161236$:MOV     R0,-(SP)
MOV R1,-(SP)
+
        MOV     R1,-(SP)
MOV R4,-(SP)
+
        MOV     R4,-(SP)
MOV @#172660$,R4 ; R4 = начальный адрес ОЗУ пультового отладчика
+
        MOV     @#172660$,R4   ; R4 = начальный адрес ОЗУ пультового отладчика
INC 44(R4) ; Установить ключ продолжения
+
        INC     44(R4)         ; Установить ключ продолжения
JSR R4,163006$ ; Снять сигнал HALT в ЦП
+
        JSR     R4,163006$     ; Снять сигнал HALT в ЦП
.WORD 163501$
+
        .WORD   163501$
161262$:TST 44(R4) ; Ключ продолжения сброшен ?
+
161262$:TST     44(R4)         ; Ключ продолжения сброшен ?
BNE 161262$ ; Нет
+
        BNE     161262$         ; Нет
MOV (SP)+,R4
+
        MOV     (SP)+,R4
MOV (SP)+,R1
+
        MOV     (SP)+,R1
MOV (SP)+,R0
+
        MOV     (SP)+,R0
RETURN
+
        RETURN
 
; Обработка команды очистки экрана (<СБРОС>) (R0 = 14)
 
; Обработка команды очистки экрана (<СБРОС>) (R0 = 14)
161300$:CALL 172632$ ; Вывод символа УПР-L
+
161300$:CALL   172632$         ; Вывод символа УПР-L
BR 161032$
+
        BR     161034$
 
; Обработка клавиш с префиксом Esc
 
; Обработка клавиш с префиксом Esc
161306$:CALL 162756$ ; Прочесть очер. код клавиши с его коррекцией
+
161306$:CALL   162756$         ; Прочесть очер. код клавиши с его коррекцией
CALL @161556$(R0) ; Вызвать соответствующую п/п
+
        CALL   @161556$(R0)   ; Вызвать соответствующую п/п
BR 161044$
+
        BR     161044$
 
; Обработка команды переключения на регистры (R)
 
; Обработка команды переключения на регистры (R)
161320$:MOV #10*400+'R,32(R4); Режим работы (10(8) регистров)
+
161320$:MOV     #10*400+'R,32(R4); Режим работы (10(8) регистров)
BR 161336$
+
        BR     161336$
 
; Обработка команды переключения на точки останова (A)
 
; Обработка команды переключения на точки останова (A)
161330$:MOV #4*400+'A,32(R4); Режим работы (4 точки останова)
+
161330$:MOV     #4*400+'A,32(R4); Режим работы (4 точки останова)
161336$:CALL 163370$ ; Перевод курсора на новую строку
+
161336$:CALL   163370$         ; Перевод курсора на новую строку
MOVB 32(R4),R0 ; R0 = 'A' или 'R'
+
        MOVB   32(R4),R0       ; R0 = 'A' или 'R'
CALL 172632$ ; Вывод символа
+
        CALL   172632$         ; Вывод символа
CALL 172614$ ; Ввод символа с клавиатуры
+
161352$:CALL   172614$         ; Ввод символа с клавиатуры
MOV R0,R3
+
        MOV     R0,R3
SUB #60,R3 ; R3 в диапазоне '0' -- '7'
+
        SUB     #60,R3         ; R3 в диапазоне '0' -- '7'
BMI 161402$ ; Нет
+
        BMI     161402$         ; Нет
CMPB R3,#7
+
        CMPB   R3,#7
BLOS 161410$ ; В диапазоне
+
        BLOS   161410$         ; В диапазоне
CMP R0,#'S ; Нажата 'S' ?
+
        CMP     R0,#'S         ; Нажата 'S' ?
BEQ 161470$ ; Да
+
        BEQ     161470$         ; Да
161402$:CALL 163142$ ; Вывод всех регистров или точек останова
+
161402$:CALL   163142$         ; Вывод всех регистров или точек останова
BR 161034$
+
        BR     161034$
161410$:BICB 33(R4),R0
+
161410$:BICB   33(R4),R0
CALL 172632$ ; Вывод номера регистра или точки останова
+
        CALL   172632$         ; Вывод номера регистра или точки останова
161420$:CALL 163234$ ; Вывод '=' и содержимого регистра
+
161420$:CALL   163234$         ; Вывод '=' и содержимого регистра
JSR R4,163006$ ; Вывод двух пробелов
+
161424$:JSR     R4,163006$     ; Вывод двух пробелов
.WORD 163560$
+
        .WORD   163560$
CALL 162604$ ; Ввод восьм. числа и запрос ком. клавиши
+
        CALL   162604$         ; Ввод восьм. числа и запрос ком. клавиши
CMP R0,#33 ; Ком. клавиша имеет префикс Esc ?
+
        CMP     R0,#33         ; Ком. клавиша имеет префикс Esc ?
BNE 161512$ ; Нет
+
        BNE     161512$         ; Нет
CALL 162756$ ; Прочесть постфикс ком. клавиши и подкорр. его
+
        CALL   162756$         ; Прочесть постфикс ком. клавиши и подкорр. его
SUB #2,R0
+
        SUB     #2,R0
BMI 161524$ ; Нажата клавиша <ПОМ>
+
        BMI     161524$         ; Нажата клавиша <ПОМ>
CALL 163264$ ; Получение адреса буфера
+
        CALL   163264$         ; Получение адреса буфера
CALL @162222$(R0) ; Вызов соответствующей п/п
+
        CALL   @162222$(R0)   ; Вызов соответствующей п/п
BR 161424$
+
        BR     161424$
161470$:CMPB 32(R4),#'R ; Работа производится с регистрами ?
+
161470$:CMPB   32(R4),#'R     ; Работа производится с регистрами ?
BNE 161352$ ; Нет
+
        BNE     161352$         ; Нет
CALL 172632$ ; Вывод символа 'S' (R0 = 'S')
+
        CALL   172632$         ; Вывод символа 'S' (R0 = 'S')
MOV #10,R3 ; R3 = номер регистра (PS)
+
        MOV     #10,R3         ; R3 = номер регистра (PS)
BR 161420$
+
        BR     161420$
161512$:CMP R0,#40 ; Нажат <Пробел> ?
+
161512$:CMP     R0,#40         ; Нажат <Пробел> ?
BNE 161524$ ; Нет
+
        BNE     161524$         ; Нет
JMP 161606$ ; Да
+
        JMP     161606$         ; Да
161524$:JMP 161062$
+
161524$:JMP     161062$
 
; Обработка команды перехода в автономный режим (D)
 
; Обработка команды перехода в автономный режим (D)
161530$:MOV #14,R0 ; R0 = Ctrl+L (очистка экрана)
+
161530$:MOV     #14,R0         ; R0 = Ctrl+L (очистка экрана)
161534$:CALL 172632$ ; Вывести символ на экран
+
161534$:CALL   172632$         ; Вывести символ на экран
CALL 172614$ ; Ввести символ с клавиатуры
+
        CALL   172614$         ; Ввести символ с клавиатуры
CMP R0,#3 ; Нажата комбинация УПР+C ?
+
        CMP     R0,#3           ; Нажата комбинация УПР+C ?
BNE 161534$ ; Нет
+
        BNE     161534$         ; Нет
JMP 161034$ ; Переход в пультовый монитор
+
        JMP     161034$         ; Переход в пультовый монитор
 
; Адреса п/п обработки клавиш с префиксом Esc (ПОМ,ИСП,Вверх,Вниз,Влево,
 
; Адреса п/п обработки клавиш с префиксом Esc (ПОМ,ИСП,Вверх,Вниз,Влево,
 
; Вправо,НР+Вверх,НР+Вниз,НР+Влево,НР+Вправо,?,?)
 
; Вправо,НР+Вверх,НР+Вниз,НР+Влево,НР+Вправо,?,?)
161556$:.WORD 162572$,161612$,161762$,161770$
+
161556$:.WORD   162572$,161612$,161762$,161770$
.WORD 161772$,162026$,162132$,162040$
+
        .WORD   161772$,162026$,162132$,162040$
.WORD 162132$,162046$,162164$,162204$
+
        .WORD   162132$,162046$,162164$,162204$
 
; Обработка команды "шаг" (<Пробел>)
 
; Обработка команды "шаг" (<Пробел>)
161606$:CLR R3 ; R3 = режим STEP
+
161606$:CLR     R3             ; R3 = режим STEP
BR 161616$
+
        BR     161616$
 
; Обработка команды "пуск" (<ИСП>)
 
; Обработка команды "пуск" (<ИСП>)
161612$:MOV #2,R3 ; R3 = режим RUN
+
161612$:MOV     #2,R3           ; R3 = режим RUN
161616$:MTPS #600
+
161616$:MTPS   #600
MOV 20(R4),R0 ; R0 = PS
+
        MOV     20(R4),R0       ; R0 = PS
$MTPS$ ; Запись КРСП
+
        $MTPS$                 ; Запись КРСП
TST R2 ; Было набрано значение ?
+
        TST     R2             ; Было набрано значение ?
BEQ 161640$ ; Нет
+
        BEQ     161640$         ; Нет
MOV R1,16(R4) ; Сохранить набранное значение
+
        MOV     R1,16(R4)       ; Сохранить набранное значение
161640$:MOV 16(R4),R0 ; R0 = PC
+
161640$:MOV     16(R4),R0       ; R0 = PC
$MTPC$ ; Запись КРСК
+
        $MTPC$                 ; Запись КРСК
MOV R3,34(R4) ; Сохранение режима STEP/RUN
+
        MOV     R3,34(R4)       ; Сохранение режима STEP/RUN
BEQ 161724$ ; Режим STEP
+
        BEQ     161724$         ; Режим STEP
MOV R4,R1 ; R1 = начальный адрес ОЗУ пультового отладчика
+
        MOV     R4,R1           ; R1 = начальный адрес ОЗУ пультового отладчика
MOV #4,R2 ; R2 = число точек останова
+
        MOV     #4,R2           ; R2 = число точек останова
161662$:MOV 50(R1),R5 ; R5 = адрес точки останова
+
161662$:MOV     50(R1),R5       ; R5 = адрес точки останова
BEQ 160712$ ; Точка останова не используется
+
        BEQ     161712$         ; Точка останова не используется
$MFPM$ ; Чтение содерж. памяти по адресу останова
+
        $MFPM$                 ; Чтение содерж. памяти по адресу останова
MOV R0,60(R1) ; Сохранение его в буфере
+
        MOV     R0,60(R1)       ; Сохранение его в буфере
CMP 16(R4),50(R1) ; Адрес останова равен адресу запуска ?
+
        CMP     16(R4),50(R1)   ; Адрес останова равен адресу запуска ?
BEQ 160712$ ; Да
+
        BEQ     161712$         ; Да
CLR R0 ; R0 = код команды HALT
+
        CLR     R0             ; R0 = код команды HALT
$MTPM$ ; Запись его в память по адресу останова
+
        $MTPM$                 ; Запись его в память по адресу останова
161712$:ADD #2,R1 ; Переход к следующей точке останова
+
161712$:ADD     #2,R1           ; Переход к следующей точке останова
SOB R2,161662$
+
        SOB     R2,161662$
CALL 161236$ ; Снятие в ЦП сигнала HALT
+
        CALL   161236$         ; Снятие в ЦП сигнала HALT
161724$:MOV R4,SP ; SP = начальный адрес ОЗУ пультового отладчика
+
161724$:MOV     R4,SP           ; SP = начальный адрес ОЗУ пультового отладчика
BMI 161734$ ; Пультовый отладчик работает под управл. ЦП
+
        BMI     161734$         ; Пультовый отладчик работает под управл. ЦП
CLR @#22550
+
        CLR     @#22550
161734$:MOV (SP)+,R0 ; Восстановление регистров
+
161734$:MOV     (SP)+,R0       ; Восстановление регистров
MOV (SP)+,R1
+
        MOV     (SP)+,R1
MOV (SP)+,R2
+
        MOV     (SP)+,R2
MOV (SP)+,R3
+
        MOV     (SP)+,R3
MOV (SP)+,R4
+
        MOV     (SP)+,R4
MOV (SP)+,R5
+
        MOV     (SP)+,R5
MOV (SP)+,SP
+
        MOV     (SP)+,SP
ADD @172666$,PC ; Режим STEP/RUN
+
        ADD     @172666$,PC     ; Режим STEP/RUN
$STEP$
+
        $STEP$
$RUN$
+
        $RUN$
 
; Обработка команды "открыть предыдущую ячейку" (Вверх)
 
; Обработка команды "открыть предыдущую ячейку" (Вверх)
161762$:MOV #-2,R3
+
161762$:MOV     #-2,R3
BR 161772$
+
        BR     161772$
 
; Обработка команды "открыть следующую ячейку" (Вниз)
 
; Обработка команды "открыть следующую ячейку" (Вниз)
161770$:TST (R3)+ ; R3 = 2
+
161770$:TST     (R3)+           ; R3 = 2
 
; Обработка команды "занести значение" (Влево)
 
; Обработка команды "занести значение" (Влево)
161772$:TST R2 ; Значение было введено ?
+
161772$:TST     R2             ; Значение было введено ?
BEQ 162014$ ; Нет
+
        BEQ     162014$         ; Нет
MOV R1,R0 ; R0 = введенное число
+
        MOV     R1,R0           ; R0 = введенное число
MOV 22(R4),R5 ; R5 = адрес открытой ячейки
+
        MOV     22(R4),R5       ; R5 = адрес открытой ячейки
ADD #2,R5
+
        ADD     #2,R5
CALL 163444$ ; Занести значение в память
+
        CALL   163444$         ; Занести значение в память
162014$:ADD R3,22(R4) ; Переход к другой ячейке
+
162014$:ADD     R3,22(R4)       ; Переход к другой ячейке
162020$:CALL 163024$ ; Прочитать ее содерж. и вывести на экран
+
162020$:CALL   163024$         ; Прочитать ее содерж. и вывести на экран
RETURN
+
        RETURN
 
; Обработка команды "открыть ячейку" (Вправо)
 
; Обработка команды "открыть ячейку" (Вправо)
162026$:TST R2 ; Значение было введено ?
+
162026$:TST     R2             ; Значение было введено ?
BEQ 162020$ ; Нет
+
        BEQ     162020$         ; Нет
MOV R1,22(R4) ; Изменить адрес открытой ячейки
+
        MOV     R1,22(R4)       ; Изменить адрес открытой ячейки
BR 162020$
+
        BR     162020$
 
; Обработка команды "открыть ячейку с относительным адресом" (НР+Вниз)
 
; Обработка команды "открыть ячейку с относительным адресом" (НР+Вниз)
162040$:MOV #2,R3 ; R3 = признак относительного адреса
+
162040$:MOV     #2,R3           ; R3 = признак относительного адреса
BR 162050$
+
        BR     162050$
 
; Обработка команды "открыть ячейку с абсолютным адресом" (НР+Вправо)
 
; Обработка команды "открыть ячейку с абсолютным адресом" (НР+Вправо)
162046$:CLR R3 ; R3 = признак абсолютного адреса
+
162046$:CLR     R3             ; R3 = признак абсолютного адреса
162050$:TST R2 ; Значение было введено ?
+
162050$:TST     R2             ; Значение было введено ?
BEQ 160062$ ; Нет
+
        BEQ     162062$         ; Нет
MOV R1,@26(R4) ; Сохр. введ. знач. в качестве адреса возврата
+
        MOV     R1,@26(R4)     ; Сохр. введ. знач. в качестве адреса возврата
BR 162070$
+
        BR     162070$
162062$:MOV 22(R4),@26(R4) ; Сохр. в кач. адреса возв. адрес откр. ячейки
+
162062$:MOV     22(R4),@26(R4) ; Сохр. в кач. адреса возв. адрес откр. ячейки
162070$:ADD #2,26(R4) ; Передвинуть указатель буфера сохранения
+
162070$:ADD     #2,26(R4)       ; Передвинуть указатель буфера сохранения
BIC #20,26(R4)
+
        BIC     #20,26(R4)
MOV 24(R4),R0 ; R0 = содержимое открытой ячейки
+
        MOV     24(R4),R0       ; R0 = содержимое открытой ячейки
TST R3 ; Режим относительного адреса ?
+
        TST     R3             ; Режим относительного адреса ?
BNE 162122$ ; Да
+
        BNE     162122$         ; Да
MOV R0,22(R4) ; Адрес = содерж. открытой ячейки (абс. адр.)
+
        MOV     R0,22(R4)       ; Адрес = содерж. открытой ячейки (абс. адр.)
BR 162020$
+
        BR     162020$
162122$:ADD R3,R0
+
162122$:ADD     R3,R0
ADD R0,22(R4) ; Адрес += содерж. откр. яч + 2 (относ. адр.)
+
        ADD     R0,22(R4)       ; Адрес += содерж. откр. яч + 2 (относ. адр.)
BR 162020$
+
        BR     162020$
 
; Обработка команды "возврат на пред. уровень косв. адр." (НР+Вверх, НР+Влево)
 
; Обработка команды "возврат на пред. уровень косв. адр." (НР+Вверх, НР+Влево)
162132$:SUB #2,26(R4) ; Передвинуть назад указатель буфера сохр.
+
162132$:SUB     #2,26(R4)       ; Передвинуть назад указатель буфера сохр.
BIS #100,26(R4)
+
        BIS     #100,26(R4)
BIC #20,26(R4)
+
        BIC     #20,26(R4)
MOV @26(R4),22(R4) ; Адрес = сохраненный адрес
+
        MOV     @26(R4),22(R4) ; Адрес = сохраненный адрес
BR 162020$
+
        BR     162020$
 
; Подпрограмма переключения на просмотр памяти ЦП
 
; Подпрограмма переключения на просмотр памяти ЦП
162164$:TST R4 ; Пульт. отладчик работает под упр. ЦП ?
+
162164$:TST     R4             ; Пульт. отладчик работает под упр. ЦП ?
BMI 162202$ ; Да
+
        BMI     162202$         ; Да
MOV #4,40(R4) ; Режим просмотра памяти ЦП
+
        MOV     #4,40(R4)       ; Режим просмотра памяти ЦП
EMT 52 ; Вывод строки "ЦМ"
+
        EMT     52             ; Вывод строки "ЦМ"
.WORD 107560$
+
        .WORD   107560$
 
162202$:RETURN
 
162202$:RETURN
 
; Подпрограмма переключения на просмотр памяти ПП
 
; Подпрограмма переключения на просмотр памяти ПП
162204$:TST R4 ; Пульт. отладчик работает под упр. ЦП ?
+
162204$:TST     R4             ; Пульт. отладчик работает под упр. ЦП ?
BMI 162220$ ; Да
+
        BMI     162220$         ; Да
CLR 40(R4) ; Режим просмотра памяти ПП
+
        CLR     40(R4)         ; Режим просмотра памяти ПП
EMT 52 ; Вывод строки "ПМ"
+
        EMT     52             ; Вывод строки "ПМ"
.WORD 107551$
+
        .WORD   107551$
 
162220$:RETURN
 
162220$:RETURN
 
; Адреса п/п обработки клавиш с префиксом Esc для режима рег./точек останова
 
; Адреса п/п обработки клавиш с префиксом Esc для режима рег./точек останова
 
; (ИСП, Вверх, Вниз, Влево, Вправо, НР+Вверх, НР+Вниз, НР+Влево, НР+Вправо,?,?)
 
; (ИСП, Вверх, Вниз, Влево, Вправо, НР+Вверх, НР+Вниз, НР+Влево, НР+Вправо,?,?)
162222$:.WORD 161612$,162250$,162262$,162304$,162320$
+
162222$:.WORD   161612$,162250$,162262$,162304$,162320$
.WORD 162342$,162334$,162342$,162326$,162164$,162204$
+
        .WORD   162342$,162334$,162342$,162326$,162164$,162204$
 
; Обработка команды "открыть предыдущий регистр/точку останова" (Вверх)
 
; Обработка команды "открыть предыдущий регистр/точку останова" (Вверх)
162250$:TST R2 ; Значение было введено ?
+
162250$:TST     R2             ; Значение было введено ?
BEQ 162256$ ; Нет
+
        BEQ     162256$         ; Нет
MOV R1,@R5 ; Занести введенное значение в рег./точку ост.
+
        MOV     R1,@R5         ; Занести введенное значение в рег./точку ост.
162256$:DEC R3 ; Перейти к предыдущему регистру/точке останова
+
162256$:DEC     R3             ; Перейти к предыдущему регистру/точке останова
BR 162272$
+
        BR     162272$
 
; Обработка команды "открыть следующий регистр/точку останова" (Вниз)
 
; Обработка команды "открыть следующий регистр/точку останова" (Вниз)
162262$:TST R2 ; Значение было введено ?
+
162262$:TST     R2             ; Значение было введено ?
BEQ 162270$ ; Нет
+
        BEQ     162270$         ; Нет
MOV R1,@R5 ; Занести введенное значение в рег./точку ост.
+
        MOV     R1,@R5         ; Занести введенное значение в рег./точку ост.
162270$:INC R3 ; Перейти к следующему регистру/точке останова
+
162270$:INC     R3             ; Перейти к следующему регистру/точке останова
162272$:BIC #177770,R3 ; Подкорректировать номер рег./точки останова
+
162272$:BIC     #177770,R3     ; Подкорректировать номер рег./точки останова
BICB 33(R4),R3
+
        BICB   33(R4),R3
BR 162312$
+
        BR     162312$
 
; Обработка команды "занести значение в регистр/точку останова" (Влево)
 
; Обработка команды "занести значение в регистр/точку останова" (Влево)
162304$:TST R2 ; Значение было введено ?
+
162304$:TST     R2             ; Значение было введено ?
BEQ 162312$ ; Нет
+
        BEQ     162312$         ; Нет
MOV R1,@R5 ; Занести введенное значение в рег./точку ост.
+
        MOV     R1,@R5         ; Занести введенное значение в рег./точку ост.
162312$:CALL 163174$ ; Вывод содержимого другого рег./точки ост.
+
162312$:CALL   163174$         ; Вывод содержимого другого рег./точки ост.
RETURN
+
        RETURN
 
; Обработка команды "открыть ячейку" (Вправо)
 
; Обработка команды "открыть ячейку" (Вправо)
162320$:MOV #161044$,@SP ; Коррекция адреса возврата
+
162320$:MOV     #161044$,@SP   ; Коррекция адреса возврата
BR 162026$ ; На исполнение команды
+
        BR     162026$         ; На исполнение команды
 
; Обработка команды "открыть ячейку с абсолютным адресом" (НР+Вправо)
 
; Обработка команды "открыть ячейку с абсолютным адресом" (НР+Вправо)
162326$:MOV #161044$,@SP ; Коррекция адреса возврата
+
162326$:MOV     #161044$,@SP   ; Коррекция адреса возврата
BR 162046$ ; На исполнение команды
+
        BR     162046$         ; На исполнение команды
 
; Обработка команды "открыть ячейку с относительным адресом" (НР+Вниз)
 
; Обработка команды "открыть ячейку с относительным адресом" (НР+Вниз)
162334$:MOV #161044$,@SP ; Коррекция адреса возврата
+
162334$:MOV     #161044$,@SP   ; Коррекция адреса возврата
BR 162040$ ; На исполнение команды
+
        BR     162040$         ; На исполнение команды
 
; Обработка команды "возврат на пред. ур. косв. адр." (НР+Вверх, НР+Влево)
 
; Обработка команды "возврат на пред. ур. косв. адр." (НР+Вверх, НР+Влево)
162342$:MOV #161044$,@SP ; Коррекция адреса возврата
+
162342$:MOV     #161044$,@SP   ; Коррекция адреса возврата
BR 162132$ ; На исполнение команды
+
        BR     162132$         ; На исполнение команды
 
; Адреса подпрограмм исполнения пунктов меню ЗАГРУЗКА (не выбрано,
 
; Адреса подпрограмм исполнения пунктов меню ЗАГРУЗКА (не выбрано,
 
;  диск, кассета ПЗУ, сеть, стык С2, магнитофон, отладка, тестирование)
 
;  диск, кассета ПЗУ, сеть, стык С2, магнитофон, отладка, тестирование)
162350$:.WORD 162572$,162400$,162420$,162440$,162472$,162504$,161034$,162370$
+
162350$:.WORD   162572$,162400$,162420$,162440$,162472$,162504$,161034$,162370$
 
; Обработка пункта меню ЗАГРУЗКА [тестирование]
 
; Обработка пункта меню ЗАГРУЗКА [тестирование]
162370$:CALL 161236$ ; Перевод ЦП в режим USER
+
162370$:CALL   161236$         ; Перевод ЦП в режим USER
JMP 167540$ ; На исполнение тестов
+
        JMP     167540$         ; На исполнение тестов
 
; Обработка пункта меню ЗАГРУЗКА [диск]
 
; Обработка пункта меню ЗАГРУЗКА [диск]
162400$:MOV R0,R3 ; R3 = номер диска (0 -- 3)
+
162400$:MOV     R0,R3           ; R3 = номер диска (0 -- 3)
JSR R5,162522$ ; Перекачка загрузчика и его запуск
+
        JSR     R5,162522$     ; Перекачка загрузчика и его запуск
.WORD 163774$,44,164104$,5,0
+
        .WORD   163774$,44,164104$,5,0
 
; Обработка пункта меню ЗАГРУЗКА [кассета ПЗУ]
 
; Обработка пункта меню ЗАГРУЗКА [кассета ПЗУ]
162420$:MOV R0,R3 ; R3 = номер кассеты ПЗУ (1 -- 2)
+
162420$:MOV     R0,R3           ; R3 = номер кассеты ПЗУ (1 -- 2)
JSR R5,162522$ ; Перекачка загрузчика и его запуск
+
        JSR     R5,162522$     ; Перекачка загрузчика и его запуск
.WORD 163774$,44,164116$,5,0
+
        .WORD   163774$,44,164116$,5,0
 
; Обработка пункта меню ЗАГРУЗКА [сеть]
 
; Обработка пункта меню ЗАГРУЗКА [сеть]
162440$:JSR R4,162006$ ; Вывод "* ЗАГРУЗКА ИЗ СЕТИ *"
+
162440$:JSR     R4,163006$     ; Вывод "* ЗАГРУЗКА ИЗ СЕТИ *"
.WORD 163573$ ; Адрес надписи
+
        .WORD   163573$         ; Адрес надписи
JSR R5,162522$ ; Перекачка загрузчика и его запуск
+
        JSR     R5,162522$     ; Перекачка загрузчика и его запуск
.WORD 164160$,210,0
+
        .WORD   164160$,210,0
 
; Обработка команды "Т" пультового монитора (тест локальной сети)
 
; Обработка команды "Т" пультового монитора (тест локальной сети)
162460$:JSR R5,162522$ ; Перекачка программы теста и ее запуск
+
162460$:JSR     R5,162522$     ; Перекачка программы теста и ее запуск
.WORD 164600$,360,0
+
        .WORD   164600$,360,0
 
; Обработка пункта меню ЗАГРУЗКА [стык С2]
 
; Обработка пункта меню ЗАГРУЗКА [стык С2]
162472$:JSR R5,162522$ ; Перекачка загрузчика и его запуск
+
162472$:JSR     R5,162522$     ; Перекачка загрузчика и его запуск
.WORD 165540$,25,0
+
        .WORD   165540$,25,0
 
; Обработка пункта меню ЗАГРУЗКА [магнитофон]
 
; Обработка пункта меню ЗАГРУЗКА [магнитофон]
162504$:JSR R5,162522$ ; Перекачка загрузчика и его запуск
+
162504$:JSR     R5,162522$     ; Перекачка загрузчика и его запуск
.WORD 163774$,44,164130$,14,0
+
        .WORD   163774$,44,164130$,14,0
 
; Подпрограмма перекачки загрузчика из сист. ОЗУ и его запуск
 
; Подпрограмма перекачки загрузчика из сист. ОЗУ и его запуск
162522$:MOV #1000,R0 ; R0 = адрес, куда перекачивается загрузчик
+
162522$:MOV     #1000,R0       ; R0 = адрес, куда перекачивается загрузчик
162526$:MOV (R5)+,R1 ; R1 = адрес загрузчика в сист. ОЗУ
+
162526$:MOV     (R5)+,R1       ; R1 = адрес загрузчика в сист. ОЗУ
BEQ 162542$ ; Конец перекачки
+
        BEQ     162542$         ; Конец перекачки
MOV (R5)+,R2 ; R2 = размер загрузчика в словах
+
        MOV     (R5)+,R2       ; R2 = размер загрузчика в словах
162534$:MOV (R1)+,(R0)+ ; Цикл перекачки
+
162534$:MOV     (R1)+,(R0)+     ; Цикл перекачки
SOB R2,162534$
+
        SOB     R2,162534$
BR 162526$
+
        BR     162526$
162542$:CALL 161236$ ; Перевод ЦП в режим USER
+
162542$:CALL   161236$         ; Перевод ЦП в режим USER
MOV #200,R0 ; Копия ССП = 200 (прерывания запрещены)
+
        MOV     #200,R0         ; Копия ССП = 200 (прерывания запрещены)
$MTPS$
+
        $MTPS$
MOV #1000,R0 ; Копия СК = 1000 (адрес загрузчика)
+
        MOV     #1000,R0       ; Копия СК = 1000 (адрес загрузчика)
$MTPC$
+
        $MTPC$
MOV #1000,SP
+
        MOV     #1000,SP
MOV R3,R0 ; R0 = номер устройства (диска или кассеты ПЗУ)
+
        MOV     R3,R0           ; R0 = номер устройства (диска или кассеты ПЗУ)
$RUN$ ; Запуск загрузчика
+
        $RUN$                   ; Запуск загрузчика
 
162572$:RETURN
 
162572$:RETURN
 
; Подпрограмма ввода восьмеричного значения и запроса командной клавиши
 
; Подпрограмма ввода восьмеричного значения и запроса командной клавиши
162574$:MOV @#172660,R4 ; R4 = начало ОЗУ пультового монитора
+
162574$:MOV     @#172660,R4     ; R4 = начало ОЗУ пультового монитора
BR 162604$
+
        BR     162604$
162602$:CLR R3
+
162602$:CLR     R3
162604$:MOV R4,R1
+
162604$:MOV     R4,R1
ADD #110,R1 ; R1 = адрес буфера для ввода чисел
+
        ADD     #110,R1         ; R1 = адрес буфера для ввода чисел
CLR R2 ; R2 = 0 (инициализация счетчика введ. цифр)
+
        CLR     R2             ; R2 = 0 (инициализация счетчика введ. цифр)
162614$:CALL 172614$ ; Запрос нажатой клавиши
+
162614$:CALL   172614$         ; Запрос нажатой клавиши
CMP R0,#'0 ; Введенный символ в диапазоне '0'-'7' ?
+
        CMP     R0,#'0         ; Введенный символ в диапазоне '0'-'7' ?
BLO 162706$ ; Нет
+
        BLO     162706$         ; Нет
CMP R0,#'7
+
        CMP     R0,#'7
BHI 162654$ ; Нет
+
        BHI     162654$         ; Нет
CMP R2,#8. ; Введено восемь цифр ?
+
        CMP     R2,#8.         ; Введено восемь цифр ?
BEQ 162614$ ; Да
+
        BEQ     162614$         ; Да
MOV R0,(R1)+ ; Поместить символ в буфер
+
        MOVB    R0,(R1)+       ; Поместить символ в буфер
INC R2 ; Увеличить счетчик символов
+
        INC     R2             ; Увеличить счетчик символов
CALL 172632$ ; Вывести символ на экран
+
        CALL   172632$         ; Вывести символ на экран
BR 162614$
+
        BR     162614$
162654$:CMPB R0,#177 ; Нажата клавиша <ЗАБОЙ> ?
+
162654$:CMPB   R0,#177         ; Нажата клавиша <ЗАБОЙ> ?
BNE 162706$ ; Нет
+
        BNE     162706$         ; Нет
TST R2 ; Буфер пуст ?
+
        TST     R2             ; Буфер пуст ?
BEQ 162614$ ; Да
+
        BEQ     162614$         ; Да
CLRB -(R1) ; Удалить последний символ из буфера
+
        CLRB   -(R1)           ; Удалить последний символ из буфера
DEC R2 ; Уменьшить счетчик введенных символов
+
        DEC     R2             ; Уменьшить счетчик введенных символов
MOV R1,-(SP)
+
        MOV     R1,-(SP)
JSR R4,163006$ ; Удалить последний символ с экрана
+
        JSR     R4,163006$     ; Удалить последний символ с экрана
.WORD 163551$
+
        .WORD   163551$
MOV (SP)+,R1
+
        MOV     (SP)+,R1
BR 162614$
+
        BR     162614$
162706$:SUB R2,R1 ; R1 = начало буфера ввода
+
162706$:SUB     R2,R1           ; R1 = начало буфера ввода
CLR R2 ; R2 = 0 (счетчик обработанных символов)
+
        CLR     R2             ; R2 = 0 (счетчик обработанных символов)
CLR R5 ; R5 = 0 (введенное число (инициализация))
+
        CLR     R5             ; R5 = 0 (введенное число (инициализация))
MOV R0,-(SP) ; Сохранить в стеке код командной клавиши
+
        MOV     R0,-(SP)       ; Сохранить в стеке код командной клавиши
162716$:MOVB @R1,R0 ; R0 = очередная цифра из буфера
+
162716$:MOVB   @R1,R0         ; R0 = очередная цифра из буфера
CLRB (R1)+
+
        CLRB   (R1)+
SUB #60,R0 ; Перевод из ASCII в BIN
+
        SUB     #60,R0         ; Перевод из ASCII в BIN
BMI 162750$ ; Достигнут конец буфера
+
        BMI     162750$         ; Достигнут конец буфера
ASL R5 ; R5 = R5 * 8 + R0
+
        ASL     R5             ; R5 = R5 * 8 + R0
ASL R5
+
        ASL     R5
ASL R5
+
        ASL     R5
ADD R0,R5
+
        ADD     R0,R5
INC R2 ; Увеличить счетчик обработанных символов
+
        INC     R2             ; Увеличить счетчик обработанных символов
CMP R2,#8. ; Обработано восемь символов ?
+
        CMP     R2,#8.         ; Обработано восемь символов ?
BNE 176716$ ; Нет
+
        BNE     162716$         ; Нет
MOV (SP)+,R0 ; R0 = код командной клавиши
+
162750$:MOV     (SP)+,R0       ; R0 = код командной клавиши
MOV R5,R1 ; R1 = введенное значение
+
        MOV     R5,R1           ; R1 = введенное значение
RETURN
+
        RETURN
 
; П/п ввода клавиши и корректировка ее кода (за символом ESC)
 
; П/п ввода клавиши и корректировка ее кода (за символом ESC)
162756$:CALL 172614$ ; Запрос нажатой клавиши
+
162756$:CALL   172614$         ; Запрос нажатой клавиши
SUB #176,R0 ; Ее код в диапазоне 176(8) -- 207(8) ?
+
        SUB     #176,R0         ; Ее код в диапазоне 176(8) -- 207(8) ?
BMI 163002$ ; Нет
+
        BMI     163002$         ; Нет
CMP R0,#11
+
        CMP     R0,#11
BHI 163002$ ; Нет
+
        BHI     163002$         ; Нет
ASL R0 ; Увеличение скорректированного кода вдвое
+
        ASL     R0             ; Увеличение скорректированного кода вдвое
RETURN
+
        RETURN
163002$:CLR R0 ; R0 = 0 ("плохой" код)
+
163002$:CLR     R0             ; R0 = 0 ("плохой" код)
RETURN
+
        RETURN
 
; Подпрограмма вывода строки на экран (адрес строки за командой JSR R4,...)
 
; Подпрограмма вывода строки на экран (адрес строки за командой JSR R4,...)
163006$:MOV (R4)+,R1 ; R1 = адрес строки
+
163006$:MOV     (R4)+,R1       ; R1 = адрес строки
BR 163016$
+
        BR     163016$
163012$:CALL 172632$ ; Вывод символа на экран
+
163012$:CALL   172632$         ; Вывод символа на экран
 
; Подпрограмма вывода строки на экран (адрес строки в регистре R1)
 
; Подпрограмма вывода строки на экран (адрес строки в регистре R1)
163016$:MOVB (R1)+,R0 ; R0 = очередной символ
+
163016$:MOVB   (R1)+,R0       ; R0 = очередной символ
BNE 163012$ ; Еще не конец строки
+
        BNE     163012$         ; Еще не конец строки
RTS R4
+
        RTS     R4
 
; Подпрограмма вывода на экран адреса открытой ячейки памяти и ее содержимого
 
; Подпрограмма вывода на экран адреса открытой ячейки памяти и ее содержимого
163024$:CALL 163370$ ; Перевод курсора в начало следующей строки
+
163024$:CALL   163370$         ; Перевод курсора в начало следующей строки
MOV 22(R4),R1 ; R1 = адрес открытой ячейки
+
        MOV     22(R4),R1       ; R1 = адрес открытой ячейки
CALL 163074$ ; Вывод на экран адреса открытой ячейки
+
        CALL   163074$         ; Вывод на экран адреса открытой ячейки
JSR R4,163006$ ; Вывод разделительной дробной черты
+
        JSR     R4,163006$     ; Вывод разделительной дробной черты
.WORD 163516$
+
        .WORD   163516$
MOV 22(R4),R5 ; R5 = адрес открытой ячейки
+
        MOV     22(R4),R5       ; R5 = адрес открытой ячейки
CALL 163412$ ; Запрос содержимого ячейки
+
        CALL   163412$         ; Запрос содержимого ячейки
MOV R0,R1 ; R1 = содержимое открытой ячейки
+
        MOV     R0,R1           ; R1 = содержимое открытой ячейки
CALL 163074$ ; Вывод на экран содержимого открытой ячейки
+
        CALL   163074$         ; Вывод на экран содержимого открытой ячейки
JSR R4,163006$ ; Вывод двух пробелов
+
        JSR     R4,163006$     ; Вывод двух пробелов
.WORD 163560$
+
        .WORD   163560$
RETURN
+
        RETURN
 
; Подпрограмма вывода на экран числа в восьмеричной форме
 
; Подпрограмма вывода на экран числа в восьмеричной форме
163074$:MOV R1,24(R4) ; Сохранение значения в ОЗУ пульт. отладчика
+
163074$:MOV     R1,24(R4)       ; Сохранение значения в ОЗУ пульт. отладчика
CLR R0
+
        CLR     R0
MOV #6,R2 ; Число символов в ASCII-строке
+
        MOV     #6,R2           ; Число символов в ASCII-строке
BR 163122$
+
        BR     163122$
163110$:CLR R0 ; Цикл вытяжки трех старших разрядов R1 -> R0
+
163110$:CLR     R0             ; Цикл вытяжки трех старших разрядов R1 -> R0
ROL R1
+
        ROL     R1
ROL R0
+
        ROL     R0
ROL R1
+
        ROL     R1
ROL R0
+
        ROL     R0
163122$:ROL R1
+
163122$:ROL     R1
ROL R0
+
        ROL     R0
ADD #'0,R0 ; Преобразование из BIN в ASCII
+
        ADD     #'0,R0         ; Преобразование из BIN в ASCII
CALL 172632$ ; Вывод символа на экран
+
        CALL   172632$         ; Вывод символа на экран
SOB R2,163110$
+
        SOB     R2,163110$
RETURN
+
        RETURN
 
; Подпрограмма вывода на экран регистров или точек останова
 
; Подпрограмма вывода на экран регистров или точек останова
163142$:CALL 163370$ ; Перевод курсора в начало следующей строки
+
163142$:CALL   163370$         ; Перевод курсора в начало следующей строки
CLR R3 ; R3 = 0 (начальный номер рег. или точ.ост.)
+
        CLR     R3             ; R3 = 0 (начальный номер рег. или точ.ост.)
163150$:CALL 163200$ ; Вывод содержимого регистра или точ. ост.
+
163150$:CALL   163200$         ; Вывод содержимого регистра или точ. ост.
INC R3 ; Перейти к след. регистру или точ. ост.
+
        INC     R3             ; Перейти к след. регистру или точ. ост.
CMPB R3,33(R4) ; Выведены все рег. или точ. ост.
+
        CMPB   R3,33(R4)       ; Выведены все рег. или точ. ост.
BLO 163150$ ; Нет
+
        BLO     163150$         ; Нет
CMP R3,#10 ; Номер регистра равен 10 (рег. сост. проц.) ?
+
        CMP     R3,#10         ; Номер регистра равен 10 (рег. сост. проц.) ?
BEQ 163150$ ; Да
+
        BEQ     163150$         ; Да
RETURN
+
        RETURN
 
; Подпрограмма вывода на экран содерж. одного регистра или точки останова
 
; Подпрограмма вывода на экран содерж. одного регистра или точки останова
163174$:CALL 163370$ ; Перевод курсора в начало следующей строки
+
163174$:CALL   163370$         ; Перевод курсора в начало следующей строки
163200$:MOVB 32(R4),R0 ; R0 = 'R' или 'A' (регистры или точ. ост.)
+
163200$:MOVB   32(R4),R0       ; R0 = 'R' или 'A' (регистры или точ. ост.)
CALL 172632$ ; Вывод символа на экран
+
        CALL   172632$         ; Вывод символа на экран
MOV R3,R0 ; R0 = номер регистра или точ. ост.
+
        MOV     R3,R0           ; R0 = номер регистра или точ. ост.
ADD #'0,R0 ; Перевод из BIN в ASCII
+
        ADD     #'0,R0         ; Перевод из BIN в ASCII
CMP R0,#'8 ; Это регистр состояния процессора
+
        CMP     R0,#'8         ; Это регистр состояния процессора
BNE 163230$ ; Нет
+
        BNE     163230$         ; Нет
MOV #'S,R0 ; Замена '8' на 'S'
+
        MOV     #'S,R0         ; Замена '8' на 'S'
163230$:CALL 172632$ ; Вывод символа на экран
+
163230$:CALL   172632$         ; Вывод символа на экран
JSR R4,163006$ ; Вывод знака равенства
+
163234$:JSR     R4,163006$     ; Вывод знака равенства
.WORD 163526$
+
        .WORD   163526$
CALL 163264$ ; Получение в R5 адреса хранения знач. рег.
+
        CALL   163264$         ; Получение в R5 адреса хранения знач. рег.
MOV @R5,R0 ; R0 = содержимое регистра или точ. ост.
+
        MOV     @R5,R1          ; R1 = содержимое регистра или точ. ост.
CALL 163074$ ; Вывод содержимого на экран
+
        CALL   163074$         ; Вывод содержимого на экран
JSR R4,163006$ ; Вывод разделительного пробела
+
        JSR     R4,163006$     ; Вывод разделительного пробела
.WORD 163561$
+
        .WORD   163561$
RETURN
+
        RETURN
 
; Подпрограмма получения в R5 адреса хранения содержимого рег. или точ. ост.
 
; Подпрограмма получения в R5 адреса хранения содержимого рег. или точ. ост.
163264$:CLR R5 ; R5 = 0 (инициализация)
+
163264$:CLR     R5             ; R5 = 0 (инициализация)
CMPB 33(R4),#4 ; Идет вывод точек останова ?
+
        CMPB   33(R4),#4       ; Идет вывод точек останова ?
BNE 163306$ ; Нет
+
        BNE     163306$         ; Нет
BICB 33(R4),R3
+
        BICB   33(R4),R3
MOV #24,R5 ; R5 = смещение знач. точ. ост. в ОЗУ ПО / 2
+
        MOV     #24,R5         ; R5 = смещение знач. точ. ост. в ОЗУ ПО / 2
163306$:ADD R3,R5 ; Прибавить номер регистра или точки останова
+
163306$:ADD     R3,R5           ; Прибавить номер регистра или точки останова
ASL R5
+
        ASL     R5
ADD R4,R5 ; Прибавить адрес ОЗУ пультового отладчика
+
        ADD     R4,R5           ; Прибавить адрес ОЗУ пультового отладчика
RETURN
+
        RETURN
 
; Подпрограмма вывода на экран причины перехода процессора в режим HALT
 
; Подпрограмма вывода на экран причины перехода процессора в режим HALT
163316$:MOV @172662$,R2 ; R2 = адрес строки причины перехода
+
163316$:MOV     @172662$,R2     ; R2 = адрес строки причины перехода
BEQ 163366$
+
        BEQ     163366$
JSR R4,163006$ ; Вывод "*** "
+
        JSR     R4,163006$     ; Вывод "*** "
.WORD 163530$
+
        .WORD   163530$
MOV R2,R1 ; R1 = адрес строки причины перехода
+
        MOV     R2,R1           ; R1 = адрес строки причины перехода
JSR R4,163016$ ; Вывод причины перехода
+
        JSR     R4,163016$     ; Вывод причины перехода
JSR R4,163006$ ; Вывод " ***"
+
        JSR     R4,163006$     ; Вывод " ***"
.WORD 163540$
+
        .WORD   163540$
TST 22(R4) ; Вывод содержимое ячейки останова ?
+
        TST     22(R4)         ; Вывод содержимое ячейки останова ?
BNE 163366$ ; Нет
+
        BNE     163366$         ; Нет
MOV 16(R4),22(R4) ; 22(R4) = адрес останова
+
        MOV     16(R4),22(R4)   ; 22(R4) = адрес останова
CALL 163024$ ; Вывод содержимого ячейки адреса останова
+
        CALL   163024$         ; Вывод содержимого ячейки адреса останова
 
163366$:RETURN
 
163366$:RETURN
 
; Подпрограмма перевода курсора в начало следующей строки
 
; Подпрограмма перевода курсора в начало следующей строки
163370$:MOV #15,R0 ; R0 = код возврата каретки
+
163370$:MOV     #15,R0         ; R0 = код возврата каретки
CALL 172632$ ; Вывод на экран (курсор в начало тек. строки)
+
        CALL   172632$         ; Вывод на экран (курсор в начало тек. строки)
MOV #12,R0 ; R0 = код перевода строки
+
        MOV     #12,R0         ; R0 = код перевода строки
CALL 172632$ ; Вывод на экран (курсор на след. строку)
+
        CALL   172632$         ; Вывод на экран (курсор на след. строку)
RETURN
+
        RETURN
 
; Подпрограмма чтения содержимого ячейки памяти
 
; Подпрограмма чтения содержимого ячейки памяти
163412$:ADD 40(R4),PC ; Режим ЦП(40(R4)=4)/ПП(40(R4)=0)(только в ПП)
+
163412$:ADD     40(R4),PC       ; Режим ЦП(40(R4)=4)/ПП(40(R4)=0)(только в ПП)
$MFPM$ ; Чтение содержимого ячейки (R5)+ -> R0
+
        $MFPM$                 ; Чтение содержимого ячейки (R5)+ -> R0
RETURN
+
        RETURN
163422$:CLC ; Коррекция R5 для помещ. его в рег. адреса
+
163422$:CLC                     ; Коррекция R5 для помещ. его в рег. адреса
ROR R5
+
        ROR     R5
MOV R5,@#177010
+
        MOV     R5,@#177010
MOV @#177014,R0 ; Чтение содержимого ячейки памяти ЦП
+
        MOV     @#177014,R0     ; Чтение содержимого ячейки памяти ЦП
INC R5
+
        INC     R5
ASL R5
+
        ASL     R5
RETURN
+
        RETURN
 
; Подпрограмма записи значения в ячейку памяти
 
; Подпрограмма записи значения в ячейку памяти
163444$:ADD 40(R4),PC ; Режим ЦП(40(R4)=4)/ПП(40(R4)=0)(только в ПП)
+
163444$:ADD     40(R4),PC       ; Режим ЦП(40(R4)=4)/ПП(40(R4)=0)(только в ПП)
$MTPM$ ; Запись значения в ячейку памяти R0 -> -(R5)
+
        $MTPM$                 ; Запись значения в ячейку памяти R0 -> -(R5)
RETURN
+
        RETURN
163454$:CLC ; Коррекция R5 для помещ. его в рег. адреса
+
163454$:CLC                     ; Коррекция R5 для помещ. его в рег. адреса
ROR R5
+
        ROR     R5
DEC R5
+
        DEC     R5
MOV R5,@#177010
+
        MOV     R5,@#177010
MOV R0,@#177014 ; Запись значения в ячейку памяти ЦП
+
        MOV     R0,@#177014     ; Запись значения в ячейку памяти ЦП
ASL R5
+
        ASL     R5
RETURN
+
        RETURN
 
; Esc-последовательности и надписи, употребляемые пультовым отладчиком
 
; Esc-последовательности и надписи, употребляемые пультовым отладчиком
163476$:.BYTE 33,275,0 ; Системный режим клавиатуры
+
163476$:.BYTE   33,275,0       ; Системный режим клавиатуры
163501$:.BYTE 33,277,275,0 ; Пользовательский режим клавиатуры
+
163501$:.BYTE   33,277,275,0   ; Пользовательский режим клавиатуры
163505$:.BYTE 33,274,0 ; Вызов меню ЗАГРУЗКА
+
163505$:.BYTE   33,274,0       ; Вызов меню ЗАГРУЗКА
163510$:.ASCIZ <15><12><17>/@ /
+
163510$:.ASCIZ <15><12><17>/@ /
163516$:.ASCIZ "/ "
+
163516$:.ASCIZ "/ "
163521$:.ASCIZ /R/
+
163521$:.ASCIZ /R/
163523$:.ASCIZ /RS/
+
163523$:.ASCIZ /RS/
163526$:.ASCIZ /=/
+
163526$:.ASCIZ /=/
163530$:.ASCIZ <15><12><16>/*** /
+
163530$:.ASCIZ <15><12><16>/*** /
163540$:.ASCIZ / ***/<17>
+
163540$:.ASCIZ / ***/<17>
163546$:.ASCIZ <15><12>
+
163546$:.ASCIZ <15><12>
163551$:.ASCIZ <33>/D /<33>/D/
+
163551$:.ASCIZ <33>/D /<33>/D/
.EVEN
+
        .EVEN
163560$:.ASCIZ / /
+
163560$:.ASCII  / /
163563$:.ASCIZ <6>/ЦП/
+
163561$:.ASCIZ / /
163567$:.ASCIZ <6>/ПП/
+
163563$:.ASCIZ <6>/ЦП/
163573$:.ASCIZ <15><12><12><16>/* zagruzka iz seti *  /<17>
+
163567$:.ASCIZ <6>/ПП/
163627$:.ASCIZ /zawisanie/
+
163573$:.ASCIZ <15><12><12><16>/* zagruzka iz seti *  /<17>
163641$:.ASCIZ /rezerwnyj kod/
+
163627$:.ASCIZ /zawisanie/
163657$:.ASCIZ /awariq setewogo pitaniq/
+
163641$:.ASCIZ /rezerwnyj kod/
163707$:.ASCIZ /dwojnoe zawisanie/
+
163657$:.ASCIZ /awariq setewogo pitaniq/
163731$:.ASCIZ /stop/
+
163707$:.ASCIZ /dwojnoe zawisanie/
163736$:.ASCIZ /zawisanie pri prieme a.w.p./
+
163731$:.ASCIZ /stop/
.EVEN
+
163736$:.ASCIZ /zawisanie pri prieme a.w.p./
163772$:.WORD 0
+
        .EVEN
 +
163772$:.WORD   0
 
; Загрузчик с диска, кассеты ПЗУ, магнитофона
 
; Загрузчик с диска, кассеты ПЗУ, магнитофона
163774$:MOV #176674,R1 ; R1 = адрес регистра сост. перед. канала 2
+
163774$:MOV     #176674,R1     ; R1 = адрес регистра сост. перед. канала 2
MOVB R0,164107$ ; Сохранить номер устройства
+
        MOVB   R0,164104$+3    ; Сохранить номер устройства
CLRB @R1 ; Запретить прерывания от канала 2
+
        CLRB   @R1             ; Запретить прерывания от канала 2
MOV #164104$-163774$+1000,R2 ; R2 = адрес блока параметров
+
        MOV     #164104$-163774$+1000,R2 ; R2 = адрес блока параметров
164012$:MOV #2,R3
+
164012$:MOV     #2,R3
164016$:TSTB @R1 ; Ожидание готовности канала 2
+
164016$:TSTB   @R1             ; Ожидание готовности канала 2
BPL 164016$ ; Не готов
+
        BPL     164016$         ; Не готов
MOVB R2,2(R1) ; Передача адреса БП в канал 2
+
        MOVB   R2,2(R1)       ; Передача адреса БП в канал 2
SWAB R2
+
        SWAB   R2
SOB R3,164016$
+
        SOB     R3,164016$
MOV #2,R3
+
        MOV     #2,R3
164036$:TSTB @R1 ; Ожидание готовности канала 2
+
164036$:TSTB   @R1             ; Ожидание готовности канала 2
BPL 164036$ ; Не готов
+
        BPL     164036$         ; Не готов
MOVB #377,2(R1) ; Передача байтов завершения в канал 2
+
        MOVB   #377,2(R1)     ; Передача байтов завершения в канал 2
SOB R3,164036$
+
        SOB     R3,164036$
164052$:TSTB @R1 ; Ожидание завершения операции
+
164052$:TSTB   @R1             ; Ожидание завершения операции
BPL 164052$ ; Операция не завершена
+
        BPL     164052$         ; Операция не завершена
TSTB 164104$ ; Есть ошибки ?
+
        TSTB   164104$         ; Есть ошибки ?
BEQ 164072$ ; Нет
+
        BEQ     164072$         ; Нет
CLRB 164104$ ; Очистить байт ошибок
+
        CLRB   164104$         ; Очистить байт ошибок
BR 164012$ ; Попробовать заново
+
        BR     164012$         ; Попробовать заново
164072$:CMP #240,@#0 ; Первая команда BOOT-сектора NOP ?
+
164072$:CMP     #240,@#0       ; Первая команда BOOT-сектора NOP ?
BNE 164012$ ; Нет
+
        BNE     164012$         ; Нет
CLR PC ; Запуск BOOT
+
        CLR     PC             ; Запуск BOOT
 
; Блок параметров для диска
 
; Блок параметров для диска
164104$:.BYTE 0,10,2,0,0,1
+
164104$:.BYTE   0,10,2,0,0,1
.WORD 0,400
+
        .WORD   0,400
 
; Блок параметров для кассеты ПЗУ
 
; Блок параметров для кассеты ПЗУ
164116$:.BYTE 0,10,21,0,0,0
+
164116$:.BYTE   0,10,21,0,0,0
.WORD 0,400
+
        .WORD   0,400
 
; Блок параметров для магнитофона
 
; Блок параметров для магнитофона
164130$:.BYTE 0,11,11,0
+
164130$:.BYTE   0,11,11,0
.WORD 0,0,0,0,0,0,0,0,0,400
+
        .WORD   0,0,0,0,0,0,0,0,0,400
 
; Загрузчик из сети
 
; Загрузчик из сети
164160$:MTPS #340 ; Запретить прерывания
+
164160$:MTPS   #340           ; Запретить прерывания
MOVB @#176561,R5 ; Выделение в R5 номера сетевой станции
+
        MOVB   @#176561,R5     ; Выделение в R5 номера сетевой станции
MOV R5,R0
+
        MOV     R5,R0
BIC #177760,R5
+
        BIC     #177760,R5
ASR R0
+
        ASR     R0
BIC #177717,R0
+
        BIC     #177717,R0
BIS R0,R5
+
        BIS     R0,R5
MOVB R5,164556$ ; Сохранение номера сетевой станции
+
        MOVB   R5,164554$+2    ; Сохранение номера сетевой станции
MOVB 164572$,R0 ; R0 = 173(8)
+
        MOVB   164554$+16,R0   ; R0 = 173(8)
XOR R5,R0 ; R0 = 173(8) XOR номер_сетевой_станции
+
        XOR     R5,R0           ; R0 = 173(8) XOR номер_сетевой_станции
MOVB R0,164572$
+
        MOVB   R0,164554$+16
MOV #30,R0 ; R0 = 30 (адрес вектора команды EMT)
+
        MOV     #30,R0         ; R0 = 30 (адрес вектора команды EMT)
MOV #164500$-164160$+1000,(R0)+ ; Установка вектора прерывания EMT
+
        MOV     #164500$-164160$+1000,(R0)+ ; Установка вектора прерывания EMT
CLR (R0)+ ; Установка ССП при вызове EMT
+
        CLR     (R0)+           ; Установка ССП при вызове EMT
MOV #164512$-164160$+1000,(R0)+ ; Установка вектора прерывания TRAP
+
        MOV     #164512$-164160$+1000,(R0)+ ; Установка вектора прерывания TRAP
CLR (R0)+ ; Установка ССП при вызове TRAP
+
        CLR     (R0)+           ; Установка ССП при вызове TRAP
164244$:MOV #10000,SP ; Установка указателя стека
+
164244$:MOV     #10000,SP       ; Установка указателя стека
MOV #164526$-164160$+1000,@#100 ; Устан. вект. прер. сет. таймера
+
        MOV     #164526$-164160$+1000,@#100 ; Устан. вект. прер. сет. таймера
CLR @#102
+
        CLR     @#102
MTPS #0 ; Разрешить прерывания
+
        MTPS   #0             ; Разрешить прерывания
CLR 164534$ ; Очистка счетчика ожидания
+
        CLR     164534$         ; Очистка счетчика ожидания
164272$:TRAP 0 ; Чтение пришедшего байта
+
164272$:TRAP   0               ; Чтение пришедшего байта
CMP 164534$,#5 ; Счетчик ожидания больше пяти
+
        CMP     164534$,#5     ; Счетчик ожидания больше пяти
BLO 164272$ ; Нет
+
        BLO     164272$         ; Нет
164304$:EMT 0 ; Посылка и чтение очередного байта
+
164304$:EMT     0               ; Посылка и чтение очередного байта
CMPB #376,R0 ; Пришедший байт равен 376(8)
+
        CMPB   #376,R0         ; Пришедший байт равен 376(8)
BNE 164304$ ; Нет
+
        BNE     164304$         ; Нет
MOV #164554$-164160$+1000,R1 ; R1 = адрес блока передачи
+
        MOV     #164554$-164160$+1000,R1 ; R1 = адрес блока передачи
164320$:MOVB (R1)+,R0 ; R0 = очередной байт из блока передачи
+
164320$:MOVB   (R1)+,R0       ; R0 = очередной байт из блока передачи
CMPB #376,R0 ; Он равен 376(8) ?
+
        CMPB   #376,R0         ; Он равен 376(8) ?
BEQ 164334$ ; Да
+
        BEQ     164334$         ; Да
EMT 0 ; Посылка и чтение очередного байта
+
        EMT     0               ; Посылка и чтение очередного байта
BR 164320$
+
        BR     164320$
164334$:EMT 0 ; Посылка и чтение очередного байта
+
164334$:EMT     0               ; Посылка и чтение очередного байта
CMPB #377,R0 ; Прочитанный байт равен 377(8) ?
+
        CMPB   #377,R0         ; Прочитанный байт равен 377(8) ?
BNE 164334$ ; Нет
+
        BNE     164334$         ; Нет
EMT 0 ; Посылка и чтение очередного байта
+
        EMT     0               ; Посылка и чтение очередного байта
CMPB R5,R0 ; Полученный байт равен номеру станции ?
+
        CMPB   R5,R0           ; Полученный байт равен номеру станции ?
BNE 164334$ ; Нет
+
        BNE     164334$         ; Нет
MOV #377,R4 ; R4 = 377(8) (контрольная сумма)
+
        MOV     #377,R4         ; R4 = 377(8) (контрольная сумма)
XOR R0,R4 ; R4 = 377(8) XOR номер_сетевой_станции
+
        XOR     R0,R4           ; R4 = 377(8) XOR номер_сетевой_станции
MOV #50000,R1 ; R1 = адрес расположения загрузчика
+
        MOV     #50000,R1       ; R1 = адрес расположения загрузчика
EMT 0 ; Посылка и чтение очередного байта
+
        EMT     0               ; Посылка и чтение очередного байта
MOV R0,R3 ; R3 = считанный байт
+
        MOV     R0,R3           ; R3 = считанный байт
XOR R0,R4 ; Подсчет контрольной суммы
+
        XOR     R0,R4           ; Подсчет контрольной суммы
164372$:EMT 0 ; Посылка и чтение очередного байта
+
164372$:EMT     0               ; Посылка и чтение очередного байта
CMPB #373,R0 ; Считанный байт равен 373(8) ?
+
        CMPB   #373,R0         ; Считанный байт равен 373(8) ?
BLOS 164410$ ; Выше или равен 373(8)
+
        BLOS   164410$         ; Выше или равен 373(8)
XOR R0,R4 ; Подсчет контрольной суммы
+
        XOR     R0,R4           ; Подсчет контрольной суммы
MOVB R0,(R1)+ ; Передача принятого байта в память
+
        MOVB   R0,(R1)+       ; Передача принятого байта в память
BR 164372$
+
        BR     164372$
164410$:BNE 164426$ ; Принятый байт равен не равен 373(8)
+
164410$:BNE     164426$         ; Принятый байт равен не равен 373(8)
EMT 0 ; Посылка и чтение очередного байта
+
        EMT     0               ; Посылка и чтение очередного байта
COM R0 ; Инверсия принятого байта
+
        COM     R0             ; Инверсия принятого байта
XOR R0,R4 ; Подсчет контрольной суммы
+
        XOR     R0,R4           ; Подсчет контрольной суммы
MOVB R0,(R1)+ ; Передача принятого байта в память
+
        MOVB   R0,(R1)+       ; Передача принятого байта в память
COM R0 ; Инверсия для передачи
+
        COM     R0             ; Инверсия для передачи
BR 164372$
+
        BR     164372$
164426$:CMPB #374,R0 ; Принятый байт равен 374(8)
+
164426$:CMPB   #374,R0         ; Принятый байт равен 374(8)
BNE 164244$ ; Нет
+
        BNE     164244$         ; Нет
EMT 0 ; Посылка и передача байта
+
        EMT     0               ; Посылка и передача байта
CMPB R0,R4 ; Он равен контрольной сумме ?
+
        CMPB   R0,R4           ; Он равен контрольной сумме ?
BNE 164244$ ; Нет
+
        BNE     164244$         ; Нет
EMT 0 ; Посылка и передача байта
+
        EMT     0               ; Посылка и передача байта
BISB #10,R0 ; R0 = R0 OR 10(8)
+
        BISB   #10,R0         ; R0 = R0 OR 10(8)
EMT 0 ; Посылка и передача байта
+
        EMT     0               ; Посылка и передача байта
CMPB #377,R0 ; Принятый байт равен 377(8)
+
        CMPB   #377,R0         ; Принятый байт равен 377(8)
BNE 164244$ ; Нет
+
        BNE     164244$         ; Нет
EMT 0 ; Посылка и передача байта
+
        EMT     0               ; Посылка и передача байта
MOV #4,@#176560 ; Включение кольцевой сети
+
        MOV     #4,@#176560     ; Включение кольцевой сети
MTPS #340 ; Запретить прерывания
+
        MTPS   #340           ; Запретить прерывания
JMP @#50000 ; Переход на исполнение загрузчика
+
        JMP     @#50000         ; Переход на исполнение загрузчика
 
; Подпрограмма передачи байта в локальную сеть (исполнение команды EMT)
 
; Подпрограмма передачи байта в локальную сеть (исполнение команды EMT)
164500$:TSTB @#176564 ; Передатчик СА готов ?
+
164500$:TSTB   @#176564       ; Передатчик СА готов ?
BPL 164500$ ; Нет
+
        BPL     164500$         ; Нет
MOVB R0,@#176566 ; Передача байта в сеть
+
        MOVB   R0,@#176566     ; Передача байта в сеть
 
; Подпрограмма чтения байта, пришедшего по сети (исполнение команды TRAP)
 
; Подпрограмма чтения байта, пришедшего по сети (исполнение команды TRAP)
164512$:TSTB @#176560 ; Приемник СА готов ?
+
164512$:TSTB   @#176560       ; Приемник СА готов ?
BPL 164512$ ; Нет
+
        BPL     164512$         ; Нет
MOVB @#176562,R0 ; Прием байта из сети
+
        MOVB   @#176562,R0     ; Прием байта из сети
RTI
+
        RTI
 
; Подпрограмма исполнения прерываний таймера
 
; Подпрограмма исполнения прерываний таймера
164526$:CLR @#176560 ; Включение режима загрузки
+
164526$:CLR     @#176560       ; Включение режима загрузки
INC (PC)+ ; Инкремент счетчика ожидания
+
        INC     (PC)+           ; Инкремент счетчика ожидания
164534$:.WORD 0
+
164534$:.WORD   0
CMP 164534$,#1000 ; Счетчик ожидания превысил лимит времени ?
+
        CMP     164534$,#1000   ; Счетчик ожидания превысил лимит времени ?
BHI 164550$ ; Да
+
        BHI     164550$         ; Да
RTI
+
        RTI
164550$:JMP 164244$
+
164550$:JMP     164244$
 
; Блок передачи в сеть
 
; Блок передачи в сеть
164554$:.BYTE 377,0,0,204,0,0,0,0,0,0,0,0,0,374,173,60,377,376,0,0
+
164554$:.BYTE   377,0,0,204,0,0,0,0,0,0,0,0,0,374,173,60,377,376,0,0
 
; Программа теста локальной сети
 
; Программа теста локальной сети
164600$:MTPS #340 ; Запретить прерывания
+
164600$:MTPS   #340           ; Запретить прерывания
MOV #165130$-164600$+1000,@#360 ; Уст. вект. прер. приемника СА
+
        MOV     #165130$-164600$+1000,@#360 ; Уст. вект. прер. приемника СА
MOV #165120$-164600$+1000,@#100 ; Уст. вект. прер. сет. таймера
+
        MOV     #165120$-164600$+1000,@#100 ; Уст. вект. прер. сет. таймера
MOV #165254$-164600$+1000,@#4 ; Уст. вект. прер. по ош. обр. к кан.
+
        MOV     #165254$-164600$+1000,@#4 ; Уст. вект. прер. по ош. обр. к кан.
MOV #165264$-164600$+1000,@#10 ; Уст. вект. прер. по недейст. ком.
+
        MOV     #165264$-164600$+1000,@#10 ; Уст. вект. прер. по недейст. ком.
MOV #340,R0 ; Установить знач. ССП при вызове прер.
+
        MOV     #340,R0         ; Установить знач. ССП при вызове прер.
MOV R0,@#362
+
        MOV     R0,@#362
MOV R0,@#102
+
        MOV     R0,@#102
MOV R0,@#6
+
        MOV     R0,@#6
MOV R0,@#12
+
        MOV     R0,@#12
CLR (PC)+ ; Установить пассивный режим
+
        CLR     (PC)+           ; Установить пассивный режим
164662$:.WORD 0
+
164662$:.WORD   0
CALL 165304$ ; Вывести номер сетевой станции
+
        CALL   165304$         ; Вывести номер сетевой станции
MTPS #0 ; Разрешить прерывания
+
        MTPS   #0             ; Разрешить прерывания
164674$:TSTB @#177560 ; Нажата клавиша ?
+
164674$:TSTB   @#177560       ; Нажата клавиша ?
BPL 164674$ ; Нет
+
        BPL     164674$         ; Нет
MOVB @#177562,R0 ; R0 = код нажатой клавиши
+
        MOVB   @#177562,R0     ; R0 = код нажатой клавиши
BIC #177600,R0
+
        BIC     #177600,R0
CMPB #3,R0 ; Нажата комбинация <УПР+C>
+
        CMPB   #3,R0           ; Нажата комбинация <УПР+C>
BNE 164726$ ; Нет
+
        BNE     164726$         ; Нет
CALL 164744$ ; Запрос команды и ее исполнение
+
        CALL   164744$         ; Запрос команды и ее исполнение
BR 164674$
+
        BR     164674$
164726$:TST 164662$ ; Режим активный или пассивный ?
+
164726$:TST     164662$         ; Режим активный или пассивный ?
BEQ 164674$ ; Пассивный режим
+
        BEQ     164674$         ; Пассивный режим
MOVB R0,R1 ; R1 = код нажатой клавиши
+
        MOVB   R0,R1           ; R1 = код нажатой клавиши
CALL 165104$ ; Посылка в сеть
+
        CALL   165104$         ; Посылка в сеть
BR 164674$
+
        BR     164674$
 
; Подпрограмма запроса команды и ее исполнение
 
; Подпрограмма запроса команды и ее исполнение
164744$:TSTB @#177564$ ; Готовность перед. канала 0 (терминал)
+
164744$:TSTB   @#177564       ; Готовность перед. канала 0 (терминал)
BPL 164744$ ; Не готов
+
        BPL     164744$         ; Не готов
MOVB #'?,@#177566 ; Вывести промптер '?'
+
        MOVB   #'?,@#177566   ; Вывести промптер '?'
164760$:TSTB @#177560 ; Нажата клавиша ?
+
164760$:TSTB   @#177560       ; Нажата клавиша ?
BPL 164760$
+
        BPL     164760$
MOVB @#177562,R0 ; R0 = код нажатой клавиши
+
        MOVB   @#177562,R0     ; R0 = код нажатой клавиши
BIC #177640,R0
+
        BIC     #177640,R0
CMPB R0,#'A ; Нажата 'A' (активный режим) ?
+
        CMPB   R0,#'A         ; Нажата 'A' (активный режим) ?
BEQ 165046$ ; Да
+
        BEQ     165046$         ; Да
CMPB R0,#'P ; Нажата 'P' (пассивный режим) ?
+
        CMPB   R0,#'P         ; Нажата 'P' (пассивный режим) ?
BEQ 165056$ ; Да
+
        BEQ     165056$         ; Да
CMPB R0,#'N ; Нажата 'N' (номер станции) ?
+
        CMPB   R0,#'N         ; Нажата 'N' (номер станции) ?
BEQ 165076$ ; Да
+
        BEQ     165076$         ; Да
CMPB R0,#'K ; Нажата 'K' (конец теста) ?
+
        CMPB   R0,#'K         ; Нажата 'K' (конец теста) ?
BEQ 165064$ ; Да
+
        BEQ     165064$         ; Да
TST 164662$ ; Активный/пассивный режим ?
+
        TST     164662$         ; Активный/пассивный режим ?
BEQ 165102$ ; Пассивный режим
+
        BEQ     165102$         ; Пассивный режим
MOVB #3,R1
+
        MOVB   #3,R1
CALL 165104$ ; Посылка в сеть
+
        CALL   165104$         ; Посылка в сеть
BR 165102$
+
        BR     165102$
 
; Активный режим
 
; Активный режим
165046$:MOV #1,164662$ ; Установить признак активного режима
+
165046$:MOV     #1,164662$     ; Установить признак активного режима
BR 165102$
+
        BR     165102$
 
; Пассивный режим
 
; Пассивный режим
165056$:CLR 164662$ ; Установить признак пассивного режима
+
165056$:CLR     164662$         ; Установить признак пассивного режима
BR 165102$
+
        BR     165102$
 
; Конец теста
 
; Конец теста
165064$:MOV #165504$-164600$+1000,R5 ; Адрес строки "КОНЕЦ ТЕСТА"
+
165064$:MOV     #165504$-164600$+1000,R5 ; Адрес строки "КОНЕЦ ТЕСТА"
CALL 165402$ ; Вывести на экран
+
        CALL   165402$         ; Вывести на экран
HALT ; Выход в пультовый отладчик
+
        HALT                   ; Выход в пультовый отладчик
 
; Номер станции
 
; Номер станции
165076$:CALL 165304$ ; Вывести номер станции на экран
+
165076$:CALL   165304$         ; Вывести номер станции на экран
 
165102$:RETURN
 
165102$:RETURN
 
; Подпрограмма передачи данных в сеть
 
; Подпрограмма передачи данных в сеть
165104$:TSTB @#176564 ; Передатчик готов ?
+
165104$:TSTB   @#176564       ; Передатчик готов ?
BPL 165104$ ; Нет
+
        BPL     165104$         ; Нет
MOVB R1,@#176566 ; Послать байт в сеть
+
        MOVB   R1,@#176566     ; Послать байт в сеть
RETURN
+
        RETURN
 
; Подпрограмма обработки событий сетевого таймера
 
; Подпрограмма обработки событий сетевого таймера
165120$:MOV #100,@#176560 ; Установить режим прерываний СА
+
165120$:MOV     #100,@#176560   ; Установить режим прерываний СА
RTI
+
        RTI
 
; Подпрограмма обработки прерываний от СА
 
; Подпрограмма обработки прерываний от СА
165130$:MOV R1,-(SP)
+
165130$:MOV     R1,-(SP)
BIT #110001,@#176560 ; Есть ошибки передачи ?
+
        BIT     #110001,@#176560 ; Есть ошибки передачи ?
BNE 165176$ ; Да
+
        BNE     165176$         ; Да
MOVB @#176562,R1 ; R1 = принятые данные
+
        MOVB   @#176562,R1     ; R1 = принятые данные
165146$:TSTB @#177564 ; Готовность терминала
+
165146$:TSTB   @#177564       ; Готовность терминала
BPL 165146$ ; Не готов
+
        BPL     165146$         ; Не готов
MOVB R1,@#177566 ; Вывести принятый символ на экран
+
        MOVB   R1,@#177566     ; Вывести принятый символ на экран
TST 164662$ ; Активный/пассивный режим
+
        TST     164662$         ; Активный/пассивный режим
BNE 165172$ ; Активный
+
        BNE     165172$         ; Активный
CALL 165104$ ; Послать данные в сеть
+
        CALL   165104$         ; Послать данные в сеть
165172$:MOV (SP)+,R1
+
165172$:MOV     (SP)+,R1
RTI
+
        RTI
165176$:MOV @#176560,R1 ; R1 = регистр состояния приемника СА
+
165176$:MOV     @#176560,R1     ; R1 = регистр состояния приемника СА
BPL 165210$ ; Ошибка паритета отсутствует
+
        BPL     165210$         ; Ошибка паритета отсутствует
BIS #4,R1 ; Установить признак ошибки паритета
+
        BIS     #4,R1           ; Установить признак ошибки паритета
165210$:BIT #10000,R1 ; Есть ошибки переполнения ?
+
165210$:BIT     #10000,R1       ; Есть ошибки переполнения ?
BEQ 165222$ ; Нет
+
        BEQ     165222$         ; Нет
BIS #2,R1 ; Установить признак переполнения
+
        BIS     #2,R1           ; Установить признак переполнения
165222$:BIC #177770,R1 ; Выделить ошибку разрыва линии
+
165222$:BIC     #177770,R1     ; Выделить ошибку разрыва линии
BIS #60,R1 ; Перевод BIN -> ASCII
+
        BIS     #60,R1         ; Перевод BIN -> ASCII
MOVB R1,165427$
+
        MOVB   R1,165420$+7
MOV #165420$-164600$+1000,R5 ; Адрес сообщения "СБОЙ #X"
+
        MOV     #165420$-164600$+1000,R5 ; Адрес сообщения "СБОЙ #X"
CALL 165402$ ; Вывести сообщение на экран
+
        CALL   165402$         ; Вывести сообщение на экран
TSTB @#176562 ; Сбросить готовность приемника СА
+
        TSTB   @#176562       ; Сбросить готовность приемника СА
BR 165172$
+
        BR     165172$
 
; Подпрограмма обработки прерывания 4 (ошибка обращения к каналу)
 
; Подпрограмма обработки прерывания 4 (ошибка обращения к каналу)
165254$:MOV #"04,165476$ ; Номер прерывания в сообщение
+
165254$:MOV     #"04,165461$+15 ; Номер прерывания в сообщение
BR 165272$
+
        BR     165272$
 
; Подпрограмма обработки прерывания 10 (зарезервированная инструкция)
 
; Подпрограмма обработки прерывания 10 (зарезервированная инструкция)
165264$:MOV #"10,165476$ ; Номер прерывания в сообщение
+
165264$:MOV     #"10,165461$+15 ; Номер прерывания в сообщение
165272$:MOV #165461$-164600$+1000,R5 ; Адрес сообщения "ПРЕРЫВАНИЕ #XX"
+
165272$:MOV     #165461$-164600$+1000,R5 ; Адрес сообщения "ПРЕРЫВАНИЕ #XX"
CALL 165402$ ; Вывести сообщение на экран
+
        CALL   165402$         ; Вывести сообщение на экран
HALT ; Переход в режим пультового отладчика
+
        HALT                   ; Переход в режим пультового отладчика
 
; Подпрограмма вывода на экран номера сетевой станции
 
; Подпрограмма вывода на экран номера сетевой станции
165304$:MOVB @#176561,R0 ; Выделение номера станции, перевод
+
165304$:MOVB   @#176561,R0     ; Выделение номера станции, перевод
MOVB R0,R1 ; из BIN в ASCII и запоминание в строке
+
        MOVB   R0,R1           ; из BIN в ASCII и запоминание в строке
BICB #360,R0 ; "ТЕСТ СТАНЦИИ #XX"
+
        BICB   #360,R0         ; "ТЕСТ СТАНЦИИ #XX"
BICB #237,R1
+
        BICB   #237,R1
RORB R1
+
        ASRB    R1
BISB R1,R0
+
        BISB   R1,R0
MOV R0,R1
+
        MOV     R0,R1
BIC #177770,R1
+
        BIC     #177770,R1
BIS #60,R1
+
        BIS     #60,R1
MOVB R1,165454$
+
        MOVB   R1,165434$+20
MOV R0,R1
+
        MOV     R0,R1
ROR R1
+
        ASR    R1
ROR R1
+
        ASR    R1
ROR R1
+
        ASR    R1
BIC #177770,R1
+
        BIC     #177770,R1
BIS #60,R1
+
        BIS     #60,R1
MOVB R1,165455$
+
        MOVB   R1,165434$+17
MOV #165434$-164600$+1000,R5 ; Адрес строки "ТЕСТ СТАНЦИИ #XX"
+
        MOV     #165434$-164600$+1000,R5 ; Адрес строки "ТЕСТ СТАНЦИИ #XX"
CALL 165402$ ; Вывести строку на экран
+
        CALL   165402$         ; Вывести строку на экран
RETURN
+
        RETURN
 
; Подпрограмма вывода строки на экран
 
; Подпрограмма вывода строки на экран
165402$:TSTB @#177564 ; Готовность к принятию символа
+
165402$:TSTB   @#177564       ; Готовность к принятию символа
BPL 165402$ ; Не готов
+
        BPL     165402$         ; Не готов
MOVB (R5)+,@#177566 ; Вывести очередной символ на экран
+
        MOVB   (R5)+,@#177566 ; Вывести очередной символ на экран
BNE 165402$ ; Еще не конец строки
+
        BNE     165402$         ; Еще не конец строки
RETURN
+
        RETURN
165420$:.ASCIZ <16>/sboj #0/<17><15><12>
+
165420$:.ASCIZ <16>/sboj #0/<17><15><12>
165434$:.ASCIZ <16>/test stancii #00/<17><15><12>
+
165434$:.ASCIZ <16>/test stancii #00/<17><15><12>
165461$:.ASCIZ <16>/prerywanie #00/<17><15><12>
+
165461$:.ASCIZ <16>/prerywanie #00/<17><15><12>
165504$:.ASCIZ <16>/konec testa/<17><15><12>
+
165504$:.ASCIZ <16>/konec testa/<17><15><12>
.EVEN
+
        .EVEN
165524$:.WORD 0,0,0,0,0,0
+
165524$:.WORD   0,0,0,0,0,0
 
; Загрузчик из стыка С2
 
; Загрузчик из стыка С2
165540$:TSTB @#176574 ; Проверка готовности передатчика
+
165540$:TSTB   @#176574       ; Проверка готовности передатчика
BPL 165540$ ; Не готов
+
        BPL     165540$         ; Не готов
MOV #100,@#176576 ; Послать код 100(8) (готовность к обмену)
+
        MOV     #100,@#176576   ; Послать код 100(8) (готовность к обмену)
CLR R1 ; R1 = 0 (адрес считывания BOOT)
+
        CLR     R1             ; R1 = 0 (адрес считывания BOOT)
MOV #1000,R2 ; R2 = 1000 (размер BOOT)
+
        MOV     #1000,R2       ; R2 = 1000 (размер BOOT)
165562$:TSTB @#176570 ; Приемник готов ?
+
165562$:TSTB   @#176570       ; Приемник готов ?
BPL 165562$ ; Нет
+
        BPL     165562$         ; Нет
MOVB @#176572,(R1)+ ; Переслать принятый байт в память
+
        MOVB   @#176572,(R1)+ ; Переслать принятый байт в память
SOB R2,165562$
+
        SOB     R2,165562$
CMP @#0,#240 ; Первая команда BOOT равна NOP ?
+
        CMP     @#0,#240       ; Первая команда BOOT равна NOP ?
BEQ 165610$ ; Да
+
        BEQ     165610$         ; Да
HALT ; Переход в режим пультового отладчика
+
        HALT                   ; Переход в режим пультового отладчика
165610$:CLR PC ; Переход к исполнению BOOT
+
165610$:CLR     PC             ; Переход к исполнению BOOT
 
; Обработка команд FIS (FADD, FSUB, FMUL, FDIV)
 
; Обработка команд FIS (FADD, FSUB, FMUL, FDIV)
165612$:MOV R2,@167502$ ; Сохранить R2
+
165612$:MOV     R2,@167502$     ; Сохранить R2
MOV 176502$,R2 ; R2 = адрес блока сохранения
+
        MOV     167502$,R2     ; R2 = адрес блока сохранения
ADD #2,R2
+
        ADD     #2,R2
MOV R0,(R2)+ ; Сохранить регистры,СК и ССП
+
        MOV     R0,(R2)+       ; Сохранить регистры,СК и ССП
$MFPC$
+
        $MFPC$
MOV R0,14(R2)
+
        MOV     R0,14(R2)
$MFPS$
+
        $MFPS$
MTPS R0
+
        MTPS   R0
MOV R0,16(R2)
+
        MOV     R0,16(R2)
MOV R1,(R2)+
+
        MOV     R1,(R2)+
MOV @167502$,(R2)+
+
        MOV     @167502$,(R2)+
MOV R3,(R2)+
+
        MOV     R3,(R2)+
MOV R4,(R2)+
+
        MOV     R4,(R2)+
MOV R5,(R2)+
+
        MOV     R5,(R2)+
MOV SP,(R2)+
+
        MOV     SP,(R2)+
MOV (R2)+,R5 ; R5 = Значение СК за командой FIS
+
        MOV     (R2)+,R5       ; R5 = Значение СК за командой FIS
SUB #2,R5 ; Получение адреса команды FIS
+
        SUB     #2,R5           ; Получение адреса команды FIS
ADD #2,R2
+
        ADD     #2,R2
$MFPM$ ; Прочесть код команды FIS
+
        $MFPM$                 ; Прочесть код команды FIS
MOV R0,R1 ; R1 = код команды FIS
+
        MOV     R0,R1           ; R1 = код команды FIS
BIC #177770,R0 ; Выделение поля регистра
+
        BIC     #177770,R0     ; Выделение поля регистра
ASL R0 ; Доступ к сохр. значению регистра
+
        ASL     R0             ; Доступ к сохр. значению регистра
ADD 167502$,R0
+
        ADD     167502$,R0
ADD #2,R0
+
        ADD     #2,R0
MOV R0,(R2)+
+
        MOV     R0,(R2)+
MOV @R0,R5 ; R5 = значение регистра (указ. на блок арг.)
+
        MOV     @R0,R5         ; R5 = значение регистра (указ. на блок арг.)
BIT #1,R5 ; Адрес блока нечетный ?
+
        BIT     #1,R5           ; Адрес блока нечетный ?
BNE 166002$ ; Да
+
        BNE     166002$         ; Да
CLR @167502$
+
        CLR     @167502$
CLR @R2
+
        CLR     @R2
$MFPM$ ; Прочесть аргументы
+
        $MFPM$                 ; Прочесть аргументы
MOV R0,R2 ; R2 = старшая часть аргумента B
+
        MOV     R0,R2           ; R2 = старшая часть аргумента B
$MFPM$
+
        $MFPM$
MOV R0,R3 ; R3 = младшая часть аргумента B
+
        MOV     R0,R3           ; R3 = младшая часть аргумента B
$MFPM$
+
        $MFPM$
MOV R0,R4 ; R4 = старшая часть аргумента A
+
        MOV     R0,R4           ; R4 = старшая часть аргумента A
$MFPM$
+
        $MFPM$
MOV R0,R5 ; R5 = младшая часть аргумента A
+
        MOV     R0,R5           ; R5 = младшая часть аргумента A
BIC #177747,R1 ; Выделение поля кода операции
+
        BIC     #177747,R1     ; Выделение поля кода операции
ASR R1 ; Переход на нужную п/п
+
        ASR     R1             ; Переход на нужную п/п
ASR R1
+
        ASR     R1
ADD PC,R1
+
        ADD     PC,R1
165772$:ADD #166112$-165772$,R1
+
165772$:ADD     #166112$-165772$,R1
ADD @R1,R1
+
        ADD     @R1,R1
JMP @R1
+
        JMP     @R1
166002$:MOV #4,R5 ; R5 = адрес вектора по ош. обр. к каналу
+
166002$:MOV     #4,R5           ; R5 = адрес вектора по ош. обр. к каналу
166006$:$MFPM$ ; Прочесть загр. значение СК
+
166006$:$MFPM$                 ; Прочесть загр. значение СК
MTPS #200
+
        MTPS   #200
$MTPC$ ; Установить значение РКСК
+
        $MTPC$                 ; Установить значение РКСК
$MFPM$ ; Прочесть загр. знач. ССП
+
        $MFPM$                 ; Прочесть загр. знач. ССП
$MTPS$ ; Установить значение РКСП
+
        $MTPS$                 ; Установить значение РКСП
MOV 167502$,R0
+
        MOV     167502$,R0
ADD #4,R0
+
        ADD     #4,R0
MOV (R0)+,R1 ; Восстановить регистры
+
        MOV     (R0)+,R1       ; Восстановить регистры
MOV (R0)+,R2
+
        MOV     (R0)+,R2
MOV (R0)+,R3
+
        MOV     (R0)+,R3
MOV (R0)+,R4
+
        MOV     (R0)+,R4
MOV (R0)+,R5
+
        MOV     (R0)+,R5
MOV (R0)+,SP
+
        MOV     (R0)+,SP
MOV SP,R5 ; R5 = Указатель вершины стека
+
        MOV     SP,R5           ; R5 = Указатель вершины стека
MOV 2(R0),R0 ; R0 = сохраненное значение ССП
+
        MOV     2(R0),R0       ; R0 = сохраненное значение ССП
$MTPM$ ; Занести в стек
+
        $MTPM$                 ; Занести в стек
MOV 167502$,R0
+
        MOV     167502$,R0
MOV 20(R0),R0 ; R0 = сохраненное значение СК
+
        MOV     20(R0),R0       ; R0 = сохраненное значение СК
$MTPM$ ; Занести в стек
+
        $MTPM$                 ; Занести в стек
MOV 167502$,R0
+
        MOV     167502$,R0
MOV R5,SP ; Подкорректировать указатель стека
+
        MOV     R5,SP           ; Подкорректировать указатель стека
MOV 14(R0),R5 ; Восстановить R5
+
        MOV     14(R0),R5       ; Восстановить R5
MOV 2(R0),R0 ; Восстановить R0
+
        MOV     2(R0),R0       ; Восстановить R0
JMP 167500$
+
        JMP     167500$
 
; Смещения подпрограмм исполнения действий с ПЗ (FADD, FSUB, FMUL, FDIV)
 
; Смещения подпрограмм исполнения действий с ПЗ (FADD, FSUB, FMUL, FDIV)
166112$:.WORD 166624$-166112$,166620$-166112$
+
166112$:.WORD   166624$-166112$,166620$-166112$
.WORD 166122$-166112$,166416$-166112$
+
        .WORD   166122$-166112$,166416$-166112$
 
; Подпрограмма эмуляции команды FMUL
 
; Подпрограмма эмуляции команды FMUL
166122$:BIT #77600,R2 ; Порядок B = 0 ?
+
166122$:BIT     #77600,R2       ; Порядок B = 0 ?
BEQ 166406$ ; Да
+
        BEQ     166406$         ; Да
BIT #77600,R4 ; Порядок A = 0 ?
+
        BIT     #77600,R4       ; Порядок A = 0 ?
BEQ 166406$ ; Да
+
        BEQ     166406$         ; Да
MOV 167502$,R1 ; R1 = адрес буфера сохранения
+
        MOV     167502$,R1     ; R1 = адрес буфера сохранения
MOV R2,R0 ; R0 = старшая часть аргумента B
+
        MOV     R2,R0           ; R0 = старшая часть аргумента B
BPL 166152$ ; B >= 0
+
        BPL     166152$         ; B >= 0
INC 26(R1) ; Аргумент B отрицательный
+
        INC     26(R1)         ; Аргумент B отрицательный
166152$:TST R4
+
166152$:TST     R4
BPL 166162$ ; A >= 0
+
        BPL     166162$         ; A >= 0
INC 26(R1) ; Аргумент A отрицательный
+
        INC     26(R1)         ; Аргумент A отрицательный
166162$:MOV R4,R1 ; R1 = старшая часть аргумента A
+
166162$:MOV     R4,R1           ; R1 = старшая часть аргумента A
BIC #100177,R0 ; Выделение порядка B в R0
+
        BIC     #100177,R0     ; Выделение порядка B в R0
BIC #100177,R1 ; Выделение порядка A в R0
+
        BIC     #100177,R1     ; Выделение порядка A в R0
BIC #177600,R2 ; Выделение старшей части мантиссы B
+
        BIC     #177600,R2     ; Выделение старшей части мантиссы B
BIC #177600,R4 ; Выделение старшей части мантиссы A
+
        BIC     #177600,R4     ; Выделение старшей части мантиссы A
BIS #200,R2 ; Установка скрытого разряда мантиссы B
+
        BIS     #200,R2         ; Установка скрытого разряда мантиссы B
BIS #200,R4 ; Установка скрытого разряда мантиссы A
+
        BIS     #200,R4         ; Установка скрытого разряда мантиссы A
ADD R1,R0 ; R0(порядок B) = порядок_B + порядок_A
+
        ADD     R1,R0           ; R0(порядок B) = порядок_B + порядок_A
SUB #40200,R0 ; Вычитание 129
+
        SUB     #40200,R0       ; Вычитание 129
MOV 167502$,R1 ; R1 = адрес блока сохранения
+
        MOV     167502$,R1     ; R1 = адрес блока сохранения
MOV R0,@R1 ; Сохранить сложенный порядок
+
        MOV     R0,@R1         ; Сохранить сложенный порядок
MOV R2,30(R1) ; Сохранить в буфере мантиссу B
+
        MOV     R2,30(R1)       ; Сохранить в буфере мантиссу B
MOV R3,32(R1)
+
        MOV     R3,32(R1)
 
; /-------------------------------------------------------------------------\
 
; /-------------------------------------------------------------------------\
 
; !              ПРИНЦИП УМНОЖЕНИЯ ДВУХ 32-РАЗРЯДНЫХ ЧИСЕЛ                  !
 
; !              ПРИНЦИП УМНОЖЕНИЯ ДВУХ 32-РАЗРЯДНЫХ ЧИСЕЛ                  !
Line 1,083: Line 1,094:
 
; !      Далее реализуется хорошо известный принцип столбика:              !
 
; !      Далее реализуется хорошо известный принцип столбика:              !
 
; !                                                                        !
 
; !                                                                        !
; ! c  d     !
+
; !             c  d                                                     !
; ! a  b     !
+
; !             a  b                                                     !
 
; !            -------                                                    !
 
; !            -------                                                    !
 
; !                bd                                                      !
 
; !                bd                                                      !
; !   bc     !
+
; !               bc                                                       !
; !   ad     !
+
; !               ad                                                       !
 
; !              ac                                                        !
 
; !              ac                                                        !
 
; \-------------------------------------------------------------------------/
 
; \-------------------------------------------------------------------------/
MOV R2,R0 ; R0 = старшая часть мантиссы B(c)
+
        MOV     R2,R0           ; R0 = старшая часть мантиссы B(c)
ASL R2 ; Умножение ст.ч. B на 2 и дел. мл.ч. A на 2
+
        ASL     R2             ; Умножение ст.ч. B на 2 и дел. мл.ч. A на 2
ROR R5 ; для избавления от знакового разр. в A
+
        ROR     R5             ; для избавления от знакового разр. в A
BCC 166260$ ; Отсутствует остаток от деления на 2
+
        BCC     166260$         ; Отсутствует остаток от деления на 2
MUL R5,R2 ; (R2,R3) = bc
+
        MUL     R5,R2           ; (R2,R3) = bc
ADD R0,R3 ; Прибавление остатка
+
        ADD     R0,R3           ; Прибавление остатка
ADC R2
+
        ADC     R2
BR 166262$
+
        BR     166262$
166260$:MUL R5,R2 ; (R2,R3) = bc
+
166260$:MUL     R5,R2           ; (R2,R3) = bc
166262$:MOV 167502$,R0 ; R0 = адрес буфера сохранения
+
166262$:MOV     167502$,R0     ; R0 = адрес буфера сохранения
MOV 32(R0),R0 ; R0 = младшая часть мантиссы B(d)
+
        MOV     32(R0),R0       ; R0 = младшая часть мантиссы B(d)
ASL R4 ; Избавление от знаковых разрядов в d
+
        ASL     R4             ; Избавление от знаковых разрядов в d
ROR R0
+
        ROR     R0
BCC 166312$ ; Отсутствует остаток от деления на 2
+
        BCC     166312$         ; Отсутствует остаток от деления на 2
MUL R4,R0 ; (R0,R1) = ad
+
        MUL     R4,R0           ; (R0,R1) = ad
ASR R4 ; Приведение a к нормальному виду
+
        ASR     R4             ; Приведение a к нормальному виду
ADD R4,R3 ; Прибавление остатка к bc
+
        ADD     R4,R3           ; Прибавление остатка к bc
ADC R2
+
        ADC     R2
BR 166316$
+
        BR     166316$
166312$:MUL R4,R0 ; (R0,R1) = ad
+
166312$:MUL     R4,R0           ; (R0,R1) = ad
ASR R4 ; Приведение a к нормальному виду
+
        ASR     R4             ; Приведение a к нормальному виду
166316$:ADD R1,R3 ; (R2,R3) = bc + ad
+
166316$:ADD     R1,R3           ; (R2,R3) = bc + ad
ADC R2
+
        ADC     R2
ADD R0,R2
+
        ADD     R0,R2
MOV 167502$,R0 ; R0 = адрес буфера сохранения
+
        MOV     167502$,R0     ; R0 = адрес буфера сохранения
MOV 30(R0),R0 ; R0 = старшая часть мантиссы B(c)
+
        MOV     30(R0),R0       ; R0 = старшая часть мантиссы B(c)
MUL R4,R0 ; (R1) = ac
+
        MUL     R4,R0           ; (R1) = ac
ADD R1,R2 ; (R2,R3) = (bc + ad) + ac
+
        ADD     R1,R2           ; (R2,R3) = (bc + ad) + ac
MOV 167502$,R0 ; R0 = адрес буфера сохранения
+
        MOV     167502$,R0     ; R0 = адрес буфера сохранения
MOV 32(R0),R0 ; R0 = младшая часть мантиссы B(d)
+
        MOV     32(R0),R0       ; R0 = младшая часть мантиссы B(d)
CLC
+
        CLC
ROR R0 ; d = d/2 (b уже поделено (R5))
+
        ROR     R0             ; d = d/2 (b уже поделено (R5))
MUL R5,R0 ; (R0,R1) = b/2 * d/2 = bd /4
+
        MUL     R5,R0           ; (R0,R1) = b/2 * d/2 = bd /4
ASHC #2,R0 ; (R0,R1) = bd/4 * 4 = bd
+
        ASHC   #2,R0           ; (R0,R1) = bd/4 * 4 = bd
ADD R0,R3 ; (R2,R3) = ((bc + ad) + ac) + bd)
+
        ADD     R0,R3           ; (R2,R3) = ((bc + ad) + ac) + bd)
ADC R2
+
        ADC     R2
CLR R1 ; Суть этой команды состоит в сбросе бита C
+
        CLR     R1             ; Суть этой команды состоит в сбросе бита C
ROR R2 ; Первый этап нормализации мантиссы
+
        ROR     R2             ; Первый этап нормализации мантиссы
ROR R3 ; (избавление от знакового разряда)
+
        ROR     R3             ; (избавление от знакового разряда)
ASHC #-6,R2 ; Нормализация мантиссы
+
        ASHC   #72,R2         ; Нормализация мантиссы
ROR R1 ; Сброс бита C
+
        ROR     R1             ; Сброс бита C
JMP 167140$
+
        JMP     167140$
 
; Получение нулевого результата
 
; Получение нулевого результата
166406$:CLR R2 ; (R2,R3) = 0.0
+
166406$:CLR     R2             ; (R2,R3) = 0.0
CLR R3
+
        CLR     R3
JMP 167306$
+
        JMP     167306$
 
; Подпрограмма эмуляции команды FDIV
 
; Подпрограмма эмуляции команды FDIV
166416$:BIT #77600,R2 ; B = 0 (деление на нуль) ?
+
166416$:BIT     #77600,R2       ; B = 0 (деление на нуль) ?
BNE 166432$ ; Нет
+
        BNE     166432$         ; Нет
CLR R5 ; Слово ошибок = 0
+
        CLR     R5             ; Слово ошибок = 0
166426$:JMP 167330$ ; Деление на нуль
+
166426$:JMP     167330$         ; Деление на нуль
166432$:BIT #77600,R4 ; A = 0 (нуль / ... = нуль) ?
+
166432$:BIT     #77600,R4       ; A = 0 (нуль / ... = нуль) ?
BEQ 166406$ ; Да
+
        BEQ     166406$         ; Да
MOV 167502$,R1 ; R1 = адрес блока сохранения
+
        MOV     167502$,R1     ; R1 = адрес блока сохранения
MOV R2,R0 ; R0 = старшая часть B
+
        MOV     R2,R0           ; R0 = старшая часть B
BPL 166454$ ; B >= 0
+
        BPL     166454$         ; B >= 0
INC 26(R1) ; Аргумент B отрицательный
+
        INC     26(R1)         ; Аргумент B отрицательный
166454$:TST R4
+
166454$:TST     R4
BPL 166464$ ; A >= 0
+
        BPL     166464$         ; A >= 0
INC 26(R1) ; Аргумент A отрицательный
+
        INC     26(R1)         ; Аргумент A отрицательный
166464$:MOV R4,R1 ; R1 = старшая часть A
+
166464$:MOV     R4,R1           ; R1 = старшая часть A
BIC #100177,R0 ; Выделение порядка B в R0
+
        BIC     #100177,R0     ; Выделение порядка B в R0
BIC #100177,R1 ; Выделение порядка A в R0
+
        BIC     #100177,R1     ; Выделение порядка A в R0
BIC #177600,R2 ; Выделение старшей части мантиссы B
+
        BIC     #177600,R2     ; Выделение старшей части мантиссы B
BIC #177600,R4 ; Выделение старшей части мантиссы A
+
        BIC     #177600,R4     ; Выделение старшей части мантиссы A
BIS #200,R2 ; Установка скрытого разряда мантиссы B
+
        BIS     #200,R2         ; Установка скрытого разряда мантиссы B
BIS #200,R4 ; Установка скрытого разряда мантиссы A
+
        BIS     #200,R4         ; Установка скрытого разряда мантиссы A
SUB R0,R1 ; R1(порядок A) = порядок_A - порядок_B
+
        SUB     R0,R1           ; R1(порядок A) = порядок_A - порядок_B
ADD #376,R1 ; Прибавить 127
+
        ADD     #37600,R1               ; Прибавить 127
MOV R1,@167502$ ; Сохранить порядок
+
        MOV     R1,@167502$     ; Сохранить порядок
 
; /-------------------------------------------------------------------------\
 
; /-------------------------------------------------------------------------\
 
; !                ПРИНЦИП ДЕЛЕНИЯ ДВУХ 32-РАЗРЯДНЫХ ЧИСЕЛ                  !
 
; !                ПРИНЦИП ДЕЛЕНИЯ ДВУХ 32-РАЗРЯДНЫХ ЧИСЕЛ                  !
Line 1,181: Line 1,192:
 
; !    результат[31] := 0                                                  !
 
; !    результат[31] := 0                                                  !
 
; \-------------------------------------------------------------------------/
 
; \-------------------------------------------------------------------------/
MOV #40,R1 ; Бит признака конца операции
+
        MOV     #40,R1         ; Бит признака конца операции
CLR R0
+
        CLR     R0
166536$:CMP R4,#200 ; Мантисса A < 0.5
+
166536$:CMP     R4,#200         ; Мантисса A < 0.5
BLT 166566$ ; Да
+
        BLT     166566$         ; Да
SUB R3,R5 ; (R4,R5) = (R4,R5) - (R2,R3)
+
        SUB     R3,R5           ; (R4,R5) = (R4,R5) - (R2,R3)
SBC R4
+
        SBC     R4
SUB R2,R4
+
        SUB     R2,R4
BMI 166560$ ; Мантисса A < B
+
        BMI     166560$         ; Мантисса A < B
SEC ; Установить бит C (+ 1 для результата)
+
        SEC                     ; Установить бит C (+ 1 для результата)
BR 166570$
+
        BR     166570$
166560$:ADD R3,R5 ; (R4,R5) = (R4,R5) + (R2,R3) (восстановление
+
166560$:ADD     R3,R5           ; (R4,R5) = (R4,R5) + (R2,R3) (восстановление
ADC R4 ; мантиссы A)
+
        ADC     R4             ; мантиссы A)
ADD R2,R4
+
        ADD     R2,R4
CLC ; Сбросить бит C (+ 0 для результата)
+
166566$:CLC                     ; Сбросить бит C (+ 0 для результата)
166570$:ROL R1 ; Результат := результат * 2 + бит_C
+
166570$:ROL     R1             ; Результат := результат * 2 + бит_C
ROL R0
+
        ROL     R0
ASL R5 ; A := A * 2
+
        ASL     R5             ; A := A * 2
ROL R4
+
        ROL     R4
TST R0 ; Результат[31] = 0 ?
+
        TST     R0             ; Результат[31] = 0 ?
BPL 166536$ ; Нет
+
        BPL     166536$         ; Нет
BIC #100000,R0 ; Результат[31] := 0
+
        BIC     #100000,R0     ; Результат[31] := 0
MOV R0,R2 ; (R2,R3) = (R0,R1)
+
        MOV     R0,R2           ; (R2,R3) = (R0,R1)
MOV R1,R3
+
        MOV     R1,R3
JMP 167140$
+
        JMP     167140$
 
; Подпрограмма эмуляции команды FSUB
 
; Подпрограмма эмуляции команды FSUB
166620$:ADD #100000,R2 ; B := (-B)
+
166620$:ADD     #100000,R2     ; B := (-B)
 
; Подпрограмма эмуляции команды FADD
 
; Подпрограмма эмуляции команды FADD
166624$:BIT #77600,R2 ; Аргумент B = 0 ?
+
166624$:BIT     #77600,R2       ; Аргумент B = 0 ?
BNE 166600$ ; Нет
+
        BNE     166660$         ; Нет
BIT #77600,R4 ; Аргумент A = 0 ?
+
        BIT     #77600,R4       ; Аргумент A = 0 ?
BNE 166650$
+
        BNE     166650$
CLR R2 ; Результат := 0
+
        CLR     R2             ; Результат := 0
CLR R3
+
        CLR     R3
JMP 167306$
+
        JMP     167306$
166650$:MOV R4,R2 ; Результат := A (B = 0)
+
166650$:MOV     R4,R2           ; Результат := A (B = 0)
MOV R5,R3
+
        MOV     R5,R3
166654$:JMP 167306$
+
166654$:JMP     167306$
166660$:BIT #77600,R4 ; Аргумент A = 0 ?
+
166660$:BIT     #77600,R4       ; Аргумент A = 0 ?
BEQ 166654$ ; Да (результат := B (A = 0))
+
        BEQ     166654$         ; Да (результат := B (A = 0))
MOV R2,R0 ; R0 = старшая часть аргумента B
+
        MOV     R2,R0           ; R0 = старшая часть аргумента B
BIC #177600,R2 ; Выделение старшей части мантиссы B
+
        BIC     #177600,R2     ; Выделение старшей части мантиссы B
BIS #200,R2 ; Установка скрытого разряда
+
        BIS     #200,R2         ; Установка скрытого разряда
TST R0 ; Аргумент B < 0 ?
+
        TST     R0             ; Аргумент B < 0 ?
BPL 166712$ ; Нет
+
        BPL     166712$         ; Нет
NEG R3 ; Изменить знак мантиссы B
+
        NEG     R3             ; Изменить знак мантиссы B
ADC R2
+
        ADC     R2
NEG R2
+
        NEG     R2
166712$:MOV R4,R1 ; R1 = старшая часть аргумента A
+
166712$:MOV     R4,R1           ; R1 = старшая часть аргумента A
BIC #177600,R4 ; Выделение старшей части мантиссы A
+
        BIC     #177600,R4     ; Выделение старшей части мантиссы A
BIS #200,R4 ; Установка скрытого разряда
+
        BIS     #200,R4         ; Установка скрытого разряда
TST R1 ; Аргумент A < 0 ?
+
        TST     R1             ; Аргумент A < 0 ?
BPL 166736$ ; Нет
+
        BPL     166736$         ; Нет
NEG R5 ; Изменить знак мантиссы A
+
        NEG     R5             ; Изменить знак мантиссы A
ADC R4
+
        ADC     R4
NEG R4
+
        NEG     R4
166736$:BIC #100177,R0 ; Выделение порядка аргумента B
+
166736$:BIC     #100177,R0     ; Выделение порядка аргумента B
BIC #100177,R1 ; Выделение порядка аргумента A
+
        BIC     #100177,R1     ; Выделение порядка аргумента A
MOV R1,@167502$ ; Запомнить порядок аргумента A
+
        MOV     R1,@167502$     ; Запомнить порядок аргумента A
SUB R1,R0 ; R0 = порядок_B - порядок_A
+
        SUB     R1,R0           ; R0 = порядок_B - порядок_A
BNE 166762$ ; Порядки не равны
+
        BNE     166762$         ; Порядки не равны
CLR R1 ; Последние разряды равны нулю
+
        CLR     R1             ; Последние разряды равны нулю
BR 167074$
+
        BR     167074$
166762$:BMI 167034$ ; Порядок A > порядок B
+
166762$:BMI     167034$         ; Порядок A > порядок B
ADD R0,@167502$ ; Сохранить порядок аргумента B (A+B-A=B)
+
        ADD     R0,@167502$     ; Сохранить порядок аргумента B (A+B-A=B)
CLR R1 ; Последние разряды равны нулю
+
        CLR     R1             ; Последние разряды равны нулю
CMP R0,#6000 ; Разность порядков больше 24
+
        CMP     R0,#6000       ; Разность порядков больше 24
BLE 167006$ ; Нет
+
        BLE     167006$         ; Нет
CLR R4 ; Мантисса A равна нулю
+
        CLR     R4             ; Мантисса A равна нулю
CLR R5
+
        CLR     R5
BR 167074$
+
        BR     167074$
167006$:ASL R0 ; Перенос порядка в младшие разряды
+
167006$:ASL     R0             ; Перенос порядка в младшие разряды
SWAB R0
+
        SWAB   R0
NEG R0 ; Изменение знака для осущ. сдвига вправо
+
        NEG     R0             ; Изменение знака для осущ. сдвига вправо
INCB R0 ; +1 (далее для отлавл. двух выдвин. разр.)
+
        INCB   R0             ; +1 (далее для отлавл. двух выдвин. разр.)
BEQ 167024$
+
        BEQ     167024$
ASHC R0,R4 ; Сдвинуть мантиссу A вправо
+
        ASHC   R0,R4           ; Сдвинуть мантиссу A вправо
ROR R1 ; Запомнить последний разряд
+
        ROR     R1             ; Запомнить последний разряд
167024$:ASHC #-1,R4 ; Сдвинуть мантиссу A на 1 разряд вправо
+
167024$:ASHC   #77,R4         ; Сдвинуть мантиссу A на 1 разряд вправо
ROR R1 ; Запомнить предпоследний разряд
+
        ROR     R1             ; Запомнить предпоследний разряд
BR 167074$
+
        BR     167074$
167034$:CLR R1 ; Последние разряды равны нулю
+
167034$:CLR     R1             ; Последние разряды равны нулю
CMP R0,#172000 ; Разность порядков больше -24
+
        CMP     R0,#172000     ; Разность порядков больше -24
BGE 167052$ ; Нет
+
        BGE     167052$         ; Нет
CLR R2 ; Мантисса B равна нулю
+
        CLR     R2             ; Мантисса B равна нулю
CLR R3
+
        CLR     R3
BR 167074$
+
        BR     167074$
167052$:ASL R0 ; Перенос порядка в младшие разряды
+
167052$:ASL     R0             ; Перенос порядка в младшие разряды
SWAB R0
+
        SWAB   R0
INCB R0 ; +1 (для отлавливания 2 выдвинутых разрядов)
+
        INCB   R0             ; +1 (для отлавливания 2 выдвинутых разрядов)
BEQ 167066$
+
        BEQ     167066$
ASHC R0,R2 ; Сдвинуть мантиссу B вправо
+
        ASHC   R0,R2           ; Сдвинуть мантиссу B вправо
ROR R1 ; Запомнить последний разряд
+
        ROR     R1             ; Запомнить последний разряд
167066$:ASHC #-1,R2 ; Сдвинуть мантиссу B на 1 разряд вправо
+
167066$:ASHC   #77,R2         ; Сдвинуть мантиссу B на 1 разряд вправо
ROR R1 ; Запомнить предпоследний разряд
+
        ROR     R1             ; Запомнить предпоследний разряд
167074$:ADD R5,R3 ; (R2,R3) = (R2,R3) + (R4,R5)
+
167074$:ADD     R5,R3           ; (R2,R3) = (R2,R3) + (R4,R5)
ADC R2
+
        ADC     R2
ADD R4,R2
+
        ADD     R4,R2
BPL 167130$ ; Результат > 0
+
        BPL     167130$         ; Результат > 0
NEG R1 ; Изменить знак мантиссы
+
        NEG     R1             ; Изменить знак мантиссы
ADC R3
+
        ADC     R3
ADC R2
+
        ADC     R2
NEG R3
+
        NEG     R3
ADC R2
+
        ADC     R2
NEG R2
+
        NEG     R2
MOV 167502$,R0 ; R0 = адрес буфера сохранения
+
        MOV     167502$,R0     ; R0 = адрес буфера сохранения
INC 26(R1) ; Результат получился отрицательный
+
        INC     26(R0)         ; Результат получился отрицательный
167130$:MOV R3,R4 ; Проверка на нул. мантиссу (отсюда рез. 0)
+
167130$:MOV     R3,R4           ; Проверка на нул. мантиссу (отсюда рез. 0)
BIS R1,R4
+
        BIS     R1,R4
BIS R2,R4
+
        BIS     R2,R4
BEQ 167306$ ; Мантисса нулевая
+
        BEQ     167306$         ; Мантисса нулевая
167140$:CMP R2,#400 ; Мантисса >= 1.0 ?
+
167140$:CMP     R2,#400         ; Мантисса >= 1.0 ?
BLO 167164$ ; Нет
+
        BLO     167164$         ; Нет
ROR R2 ; Сдвиг мантиссы вправо на 1 разряд
+
        ROR     R2             ; Сдвиг мантиссы вправо на 1 разряд
ROR R3
+
        ROR     R3
ROR R1
+
        ROR     R1
ADD #200,@167502$ ; Порядок := порядок + 1
+
        ADD     #200,@167502$   ; Порядок := порядок + 1
BR 167140$
+
        BR     167140$
167164$:CMP R2,#200 ; Мантисса < 0.5 ?
+
167164$:CMP     R2,#200         ; Мантисса < 0.5 ?
BHIS 167210$ ; Нет
+
        BHIS   167210$         ; Нет
ASL R1 ; Сдвиг мантиссы влево на 1 разряд
+
        ASL     R1             ; Сдвиг мантиссы влево на 1 разряд
ROL R3
+
        ROL     R3
ROL R2
+
        ROL     R2
SUB #200,@167502$ ; Порядок := порядок - 1
+
        SUB     #200,@167502$   ; Порядок := порядок - 1
BR 167164$
+
        BR     167164$
167210$:ROL R1 ; Бит C := предпоследний разряд
+
167210$:ROL     R1             ; Бит C := предпоследний разряд
ADC R3 ; Прибавить предпоследний разряд (округление)
+
        ADC     R3             ; Прибавить предпоследний разряд (округление)
ADC R2
+
        ADC     R2
167216$:CMP R2,#400 ; Мантисса >= 1.0
+
167216$:CMP     R2,#400         ; Мантисса >= 1.0
BLO 167242$ ; Нет
+
        BLO     167242$         ; Нет
ROR R2 ; Сдвиг мантиссы вправо на 1 разряд
+
        ROR     R2             ; Сдвиг мантиссы вправо на 1 разряд
ROR R3
+
        ROR     R3
ROR R1
+
        ROR     R1
ADD #200,@167502$ ; Порядок := порядок + 1
+
        ADD     #200,@167502$   ; Порядок := порядок + 1
BR 167216$
+
        BR     167216$
167242$:CLR R5 ; Регистр признаков = 0
+
167242$:CLR     R5             ; Регистр признаков = 0
MOV @167502$,R4 ; R4 = порядок
+
        MOV     @167502$,R4     ; R4 = порядок
BEQ 167334$ ; Порядок равен нулю (исчезновение порядка)
+
        BEQ     167334$         ; Порядок равен нулю (исчезновение порядка)
BPL 167262$ ; Положительный порядок
+
        BPL     167262$         ; Положительный порядок
ROL R4
+
        ROL     R4
BPL 167340$ ; Переполнение порядка
+
        BPL     167340$         ; Переполнение порядка
BR 167334$ ; Исчезновение порядка
+
        BR     167334$         ; Исчезновение порядка
167262$:MOV 167502$,R0 ; R0 = адрес буфера сохранения
+
167262$:MOV     167502$,R0     ; R0 = адрес буфера сохранения
ROR 26(R0) ; Результат отрицательный ?
+
        ROR     26(R0)         ; Результат отрицательный ?
BCC 167300$ ; Нет
+
        BCC     167300$         ; Нет
BIS #100000,R2 ; Установка знакового разряда
+
        BIS     #100000,R2     ; Установка знакового разряда
167300$:BIC #200,R2 ; Сброс скрытого бита
+
167300$:BIC     #200,R2         ; Сброс скрытого бита
BIS R4,R2 ; Установить поле порядка
+
        BIS     R4,R2           ; Установить поле порядка
CLR R5 ; Регистр признаков = 0
+
167306$:CLR     R5             ; Регистр признаков = 0
TST R2 ; Установить ССП
+
        TST     R2             ; Установить ССП
BNE 167320$ ; Результат не равен нулю
+
        BNE     167320$         ; Результат не равен нулю
BIS #4,R5 ; Установить бит Z
+
        BIS     #4,R5           ; Установить бит Z
167320$:BPL 167350$ ; Результат больше нуля
+
167320$:BPL     167350$         ; Результат больше нуля
BIS #10,R5 ; Установить бит N
+
        BIS     #10,R5         ; Установить бит N
BR 167350$
+
        BR     167350$
167330$:BIS #1,R5 ; R5 = 13 (деление на нуль)
+
167330$:BIS     #1,R5           ; R5 = 13 (деление на нуль)
167334$:BIS #10,R5 ; R5 = 12 (исчезновение порядка)
+
167334$:BIS     #10,R5         ; R5 = 12 (исчезновение порядка)
167340$:BIS #2,R5 ; R5 = 2 (переполнение порядка)
+
167340$:BIS     #2,R5           ; R5 = 2 (переполнение порядка)
BIS #100000,R5 ; Признак регистра ошибок
+
        BIS     #100000,R5     ; Признак регистра ошибок
167350$:MOV 167502$,R0 ; R0 = адрес буфера сохранения
+
167350$:MOV     167502$,R0     ; R0 = адрес буфера сохранения
BIC #157,22(R0) ; Сброс битов N,Z,V,C в сохр. ССП
+
        BIC     #157,22(R0)     ; Сброс битов N,Z,V,C в сохр. ССП
BISB R5,22(R0) ; Установка битов признаков из R5
+
        BISB   R5,22(R0)       ; Установка битов признаков из R5
TST R5 ; Произошла ошибка ?
+
        TST     R5             ; Произошла ошибка ?
BPL 167402$ ; Нет
+
        BPL     167402$         ; Нет
MOV #244,R5 ; R5 = адрес вект. прер. при ош. с числами ПЗ
+
        MOV     #244,R5         ; R5 = адрес вект. прер. при ош. с числами ПЗ
JMP 166006$
+
        JMP     166006$
167402$:ADD #4,@24(R5) ; Прибавить 4 к содерж. рег. из кода опер.
+
167402$:ADD     #4,@24(R0)     ; Прибавить 4 к содерж. рег. из кода опер.
MOV @24(R0),R5 ; R5 = адрес памяти для записи результата
+
        MOV     @24(R0),R5     ; R5 = адрес памяти для записи результата
ADD #4,R5
+
        ADD     #4,R5
MOV 20(R0),R4 ; R4 = сохр. значение СК
+
        MOV     20(R0),R4       ; R4 = сохр. значение СК
MOV 22(R0),R0 ; R0 = сохр. значение ССП
+
        MOV     22(R0),R0       ; R0 = сохр. значение ССП
MTPS #200 ; Запретить прерывания
+
        MTPS   #200           ; Запретить прерывания
$MTPS$ ; Установить РКСП
+
        $MTPS$                 ; Установить РКСП
MOV R4,R0
+
        MOV     R4,R0
$MTPC$ ; Установить РКСК
+
        $MTPC$                 ; Установить РКСК
MOV R3,R0
+
        MOV     R3,R0
$MTPM$ ; Запись младшей части результата
+
        $MTPM$                 ; Запись младшей части результата
MOV R2,R0
+
        MOV     R2,R0
$MTPM$ ; Запись старшей части результата
+
        $MTPM$                 ; Запись старшей части результата
MOV 167502$,R0 ; R0 = адрес буфера сохранения
+
        MOV     167502$,R0     ; R0 = адрес буфера сохранения
CMP (R0)+,(R0)+
+
        CMP     (R0)+,(R0)+
MOV (R0)+,R1 ; Восстановить регистры
+
        MOV     (R0)+,R1       ; Восстановить регистры
MOV (R0)+,R2
+
        MOV     (R0)+,R2
MOV (R0)+,R3
+
        MOV     (R0)+,R3
MOV (R0)+,R4
+
        MOV     (R0)+,R4
MOV (R0)+,R5
+
        MOV     (R0)+,R5
MOV @R0,SP
+
        MOV     @R0,SP
MOV -14(R0),R0
+
        MOV     -14(R0),R0
167500$:$RUN$ ; Продолжить программу
+
167500$:$RUN$                   ; Продолжить программу
167502$:.WORD 167504$ ; Адрес буфера сохранения
+
167502$:.WORD   167504$         ; Адрес буфера сохранения
 
; Буфер сохранения (текущий порядок,R0,R1,R2,R3,R4,R5,SP,PC,PS,указатель на
 
; Буфер сохранения (текущий порядок,R0,R1,R2,R3,R4,R5,SP,PC,PS,указатель на
 
;  поле регистра из инструкции FP,знак результата,2 слова для промежуточного
 
;  поле регистра из инструкции FP,знак результата,2 слова для промежуточного
 
;  хранения мантиссы)
 
;  хранения мантиссы)
167504$:.BLKW 16
+
167504$:.BLKW   16
 
; Подпрограмма исполнения пункта меню ЗАГРУЗКА [тестирование]
 
; Подпрограмма исполнения пункта меню ЗАГРУЗКА [тестирование]
167540$:CLR @#177656 ; Номер прохода
+
167540$:CLR     @#177656       ; Номер прохода
CLR @#177654 ; Число ошибок
+
        CLR     @#177654       ; Число ошибок
MOV #177700,R1 ; R1 = адрес буфера регистрации ошибок
+
        MOV     #177700,R1     ; R1 = адрес буфера регистрации ошибок
MOV #10,R2 ; Размер буфера
+
        MOV     #10,R2         ; Размер буфера
167560$:CLR (R1)+ ; Цикл очистки буфера
+
167560$:CLR     (R1)+           ; Цикл очистки буфера
SOB R2,167560$
+
        SOB     R2,167560$
JSR R4,163006$ ; Вывод заголовка на экран
+
        JSR     R4,163006$     ; Вывод заголовка на экран
.WORD 170116$
+
        .WORD   170116$
 
167572$:CLV
 
167572$:CLV
INC @#177656 ; Увеличить номер прохода
+
        INC     @#177656       ; Увеличить номер прохода
BVC 167610$ ; Нет переполнения
+
        BVC     167610$         ; Нет переполнения
MOV #-1,@#177656 ; Номер прохода равен 65535
+
        MOV     #-1,@#177656   ; Номер прохода равен 65535
167610$:JSR R4,163006$ ; Вывод надписи "ПРОХОД:"
+
167610$:JSR     R4,163006$     ; Вывод надписи "ПРОХОД:"
.WORD 170165$
+
        .WORD   170165$
MOV @#177656,R3 ; R3 = номер прохода
+
        MOV     @#177656,R3     ; R3 = номер прохода
CALL 170032$ ; Перевод номера прохода в строку символов
+
        CALL   170032$         ; Перевод номера прохода в строку символов
JSR R4,163006$ ; Вывод номера прохода на экран
+
        JSR     R4,163006$     ; Вывод номера прохода на экран
.WORD 177660$
+
        .WORD   177660
MOV #33,R0 ; Посылка ESC <276> (тест в области ПП)
+
        MOV     #33,R0         ; Посылка ESC <276> (тест в области ПП)
CALL 172632$
+
        CALL   172632$
MOV #276,R0
+
        MOV     #276,R0
CALL 172632$
+
        CALL   172632$
CALL 170632$ ; Тестирование процессора (ЦП)
+
        CALL   170632$         ; Тестирование процессора (ЦП)
TST R0 ; Есть ошибки ?
+
        TST     R0             ; Есть ошибки ?
BEQ 167704$ ; Нет
+
        BEQ     167704$         ; Нет
MOV #16,R0 ; R0 = смещение в буфере регистрации ошибок
+
        MOV     #16,R0         ; R0 = смещение в буфере регистрации ошибок
CMP #-1,177700$(R0) ; Число ошибок достигло максимума ?
+
        CMP     #-1,177700(R0) ; Число ошибок достигло максимума ?
BEQ 167704$ ; Да
+
        BEQ     167704$         ; Да
INC 177700$(R0) ; Увеличить счетчик числа ошибок
+
        INC     177700(R0)     ; Увеличить счетчик числа ошибок
167704$:CLR R4 ; R4 = 0 (начальный адрес памяти ЦП)
+
167704$:CLR     R4             ; R4 = 0 (начальный адрес памяти ЦП)
MOV #160000,R5 ; R5 = размер ОЗУ ЦП
+
        MOV     #160000,R5     ; R5 = размер ОЗУ ЦП
CALL 170224$ ; Тестирование памяти
+
        CALL   170224$         ; Тестирование памяти
TST R0 ; Есть ошибки ?
+
        TST     R0             ; Есть ошибки ?
BEQ 167724$ ; Нет
+
        BEQ     167742$         ; Нет
MOV #14,R0 ; R0 = смещение в буфере регистрации ошибок
+
        MOV     #14,R0         ; R0 = смещение в буфере регистрации ошибок
CMP #-1,177700$(R0) ; Число ошибок достигло максимума ?
+
        CMP     #-1,177700(R0) ; Число ошибок достигло максимума ?
BEQ 167704$ ; Да
+
        BEQ     167742$         ; Да
INC 177700$(R0) ; Увеличить счетчик числа ошибок
+
        INC     177700(R0)     ; Увеличить счетчик числа ошибок
167742$:CALL 172614$ ; Ожид. симв. с кодом 177(8)(ПП кончил тест)
+
167742$:CALL   172614$         ; Ожид. симв. с кодом 177(8)(ПП кончил тест)
CLR @#177654 ; Общее число ошибок = 0
+
        CLR     @#177654       ; Общее число ошибок = 0
MOV #177700$,R1 ; R1 = адрес буфера регистрации ошибок
+
        MOV     #177700,R1     ; R1 = адрес буфера регистрации ошибок
MOV #10,R2 ; R2 = размер буфера
+
        MOV     #10,R2         ; R2 = размер буфера
CLV
+
        CLV
167764$:ADD (R1)+,@#177654 ; Цикл получения общей суммы
+
167764$:ADD     (R1)+,@#177654 ; Цикл получения общей суммы
BVC 170002$ ; Нет переполнения
+
        BVC     170002$         ; Нет переполнения
MOV #-1,@#177654 ; Общее число ошибок = 65535
+
        MOV     #-1,@#177654   ; Общее число ошибок = 65535
BR 170004$
+
        BR     170004$
170002$:SOB R2,167764$
+
170002$:SOB     R2,167764$
170004$:JSR R4,163006$ ; Вывод надписи "ОШИБОК:"
+
170004$:JSR     R4,163006$     ; Вывод надписи "ОШИБОК:"
.WORD 170204$
+
        .WORD   170204$
MOV @#177654,R3 ; R3 = число ошибок
+
        MOV     @#177654,R3     ; R3 = число ошибок
CALL 170032$ ; Перевод числа ошибок в строку символов
+
        CALL   170032$         ; Перевод числа ошибок в строку символов
JSR R4,163006$ ; Вывод числа ошибок на экран
+
        JSR     R4,163006$     ; Вывод числа ошибок на экран
.WORD 177660$
+
        .WORD   177660
BR 167572$
+
        BR     167572$
 
; Подпрограмма перевода 16-разрядного числа в его ASCII-представление
 
; Подпрограмма перевода 16-разрядного числа в его ASCII-представление
170032$:MOV #177660$,R0 ; R0 = адрес буфера приема символов
+
170032$:MOV     #177660,R0     ; R0 = адрес буфера приема символов
MOV #6,R2 ; R2 = размер буфера
+
        MOV     #6,R2           ; R2 = размер буфера
170042$:MOVB #40,(R0)+ ; Инициализация буфера (заполнение пробелами)
+
170042$:MOVB   #40,(R0)+       ; Инициализация буфера (заполнение пробелами)
SOB R2,170042$
+
        SOB     R2,170042$
CLRB @R0 ; Отметить конец буфера
+
        CLRB   @R0             ; Отметить конец буфера
170052$:CLR -(SP) ; Остаток от деления равен 0 (инициализация)
+
170052$:CLR     -(SP)           ; Остаток от деления равен 0 (инициализация)
MOV #16.,R1 ; R1 = число разрядов
+
        MOV     #16.,R1         ; R1 = число разрядов
170060$:ASL R3 ; Цикл дел. на 10, частное в R3, остаток в @SP
+
170060$:ASL     R3             ; Цикл дел. на 10, частное в R3, остаток в @SP
ROR @SP
+
        ROL    @SP
CMP @SP,#10.
+
        CMP     @SP,#10.
BMI 170100$
+
        BMI     170100$
SUB #10.,@SP
+
        SUB     #10.,@SP
INC R3
+
        INC     R3
170100$:SOB R1,170060$
+
170100$:SOB     R1,170060$
ADD #'0,@SP ; Преобразование из BIN в ASCII
+
        ADD     #'0,@SP         ; Преобразование из BIN в ASCII
MOVB (SP)+,-(R0) ; Занести символ в буфер
+
        MOVB   (SP)+,-(R0)     ; Занести символ в буфер
TST R3 ; Деление окончено ?
+
        TST     R3             ; Деление окончено ?
BNE 170052$ ; Нет
+
        BNE     170052$         ; Нет
RETURN
+
        RETURN
170116$:.BYTE 33,'H,33,'J,33,'Y,'%,':,33,244
+
170116$:.BYTE   33,'H,33,'J,33,'Y,'%,':,33,244
.ASCII <16>/t e s t i r o w a n i e/
+
        .ASCII <16>/t e s t i r o w a n i e/
.BYTE 33,277,244,17,0
+
        .BYTE   33,277,244,17,0
170165$:.ASCIZ <33>/Y(5/<16>/prohod: /<17>
+
170165$:.ASCIZ <33>/Y(5/<16>/prohod: /<17>
170204$:.ASCIZ <16>/    o{ibok: /<17>
+
170204$:.ASCIZ <16>/    o{ibok: /<17>
.EVEN
+
        .EVEN
 
; Подпрограмма тестирования оперативного запоминающего устройства
 
; Подпрограмма тестирования оперативного запоминающего устройства
170224$:MOV R4,R1 ; R1 = начальный адрес ОЗУ
+
170224$:MOV     R4,R1           ; R1 = начальный адрес ОЗУ
CLR R3
+
        CLR     R3
170230$:MOV R1,R0 ; R0 = текущий адрес
+
170230$:MOV     R1,R0           ; R0 = текущий адрес
TST R3 ; Прямой адрес(0), инверсный адрес(<>0)
+
        TST     R3             ; Прямой адрес(0), инверсный адрес(<>0)
BEQ 170240$
+
        BEQ     170240$
COM R0
+
        COM     R0
170240$:MOV R0,(R1)+ ; Записать в ячейку ее адрес(прям. или инв.)
+
170240$:MOV     R0,(R1)+       ; Записать в ячейку ее адрес(прям. или инв.)
CMP R1,R5 ; Достигли конца ?
+
        CMP     R1,R5           ; Достигли конца ?
BLO 170230$ ; Нет
+
        BLO     170230$         ; Нет
CMP R0,-(R1) ; Содержимое ячейки равно ее адресу
+
170246$:CMP     R0,-(R1)       ; Содержимое ячейки равно ее адресу
BEQ 170260$ ; Да
+
        BEQ     170260$         ; Да
MOV #1,R0 ; Ошибка
+
        MOV     #1,R0           ; Ошибка
RETURN
+
        RETURN
170260$:MOV R1,R0 ; R0 = текущий адрес
+
170260$:MOV     R1,R0           ; R0 = текущий адрес
SUB #2,R0 ; На одну ячейку назад
+
        SUB     #2,R0           ; На одну ячейку назад
TST R3 ; Прямой или инверсный адрес ?
+
        TST     R3             ; Прямой или инверсный адрес ?
BEQ 170274$ ; Прямой
+
        BEQ     170274$         ; Прямой
COM R0
+
        COM     R0
170274$:CMP R1,R4 ; Достигли начала ?
+
170274$:CMP     R1,R4           ; Достигли начала ?
BHI 170246$ ; Нет
+
        BHI     170246$         ; Нет
COM R3 ; Перейти на инверсный адрес
+
        COM     R3             ; Перейти на инверсный адрес
BNE 170230$ ; Произвести тест с инверсным адресом
+
        BNE     170230$         ; Произвести тест с инверсным адресом
MOV #377,-12(SP) ; Будет заполняться младший байт
+
        MOV     #377,-12(SP)   ; Будет заполняться младший байт
MOV R4,R3 ; R3 = начальный адрес
+
        MOV     R4,R3           ; R3 = начальный адрес
170314$:CLR -6(SP)
+
170314$:CLR     -6(SP)
MOV R3,-10(SP) ; Начальный адрес
+
        MOV     R3,-10(SP)     ; Начальный адрес
MOV R3,R2
+
        MOV     R3,R2
BIS #17776,R2
+
        BIS     #17776,R2
TST (R2)+ ; Плюс 8 КБайт
+
        TST     (R2)+           ; Плюс 8 КБайт
CMP R5,R2 ; Достигли конца ?
+
        CMP     R5,R2           ; Достигли конца ?
BHIS 170342$ ; Нет
+
        BHIS   170342$         ; Нет
MOV R5,R2 ; R2 = конечный адрес
+
        MOV     R5,R2           ; R2 = конечный адрес
170342$:MOV R3,-14(SP) ; Текущий адрес
+
170342$:MOV     R3,-14(SP)     ; Текущий адрес
MOV -10(SP),R1 ; R1 = начальный адрес
+
        MOV     -10(SP),R1     ; R1 = начальный адрес
170352$:MOV -12(SP),R0 ; R0 = образец заполнения
+
170352$:MOV     -12(SP),R0     ; R0 = образец заполнения
CMP R1,R3
+
        CMP     R1,R3
BNE 170370$
+
        BNE     170370$
ADD #200,R3 ; Плюс 128 байт (128 байт 1..10..0,0..01..1)
+
        ADD     #200,R3         ; Плюс 128 байт (128 байт 1..10..0,0..01..1)
SWAB R0 ; Изменить байты образца
+
        SWAB   R0             ; Изменить байты образца
170370$:BITB #1,-6(SP) ; Делать запись
+
170370$:BITB   #1,-6(SP)       ; Делать запись
BNE 170402$ ; Нет
+
        BNE     170402$         ; Нет
MOV R0,@R1 ; Записать в ячейку
+
        MOV     R0,@R1         ; Записать в ячейку
170402$:CMP R0,@R1 ; Совпадает ?
+
170402$:CMP     R0,@R1         ; Совпадает ?
BEQ 170414$ ; Да
+
        BEQ     170414$         ; Да
MOV #3,R0 ; Ошибка
+
        MOV     #3,R0           ; Ошибка
RETURN
+
        RETURN
170414$:ADD #2,R1 ; Перейти к следующей ячейке
+
170414$:ADD     #2,R1           ; Перейти к следующей ячейке
CMP R1,R2 ; Достигнут конец 8-КБайтной страницы ?
+
        CMP     R1,R2           ; Достигнут конец 8-КБайтной страницы ?
BLO 170352$ ; Нет
+
        BLO     170352$         ; Нет
INCB -6(SP) ; Переключить режим записи/проверки
+
        INCB   -6(SP)         ; Переключить режим записи/проверки
MOV -14(SP),R3 ; R3 = текущий адрес
+
        MOV     -14(SP),R3     ; R3 = текущий адрес
BITB #1,-6(SP) ; Какой режим ?
+
        BITB   #1,-6(SP)       ; Какой режим ?
BNE 170342$ ; Проверка
+
        BNE     170342$         ; Проверка
TST (R3)+ ; Текущий адрес + 2
+
        TST     (R3)+           ; Текущий адрес + 2
CMP R3,R2 ; Конец страницы ?
+
        CMP     R3,R2           ; Конец страницы ?
BHIS 170460$ ; Да
+
        BHIS   170460$         ; Да
TSTB -6(SP) ; Сделано 128 проходов ?
+
        TSTB   -6(SP)         ; Сделано 128 проходов ?
BPL 170342$ ; Нет
+
        BPL     170342$         ; Нет
170460$:MOV -10(SP),R3 ; R3 = текущий адрес
+
170460$:MOV     -10(SP),R3     ; R3 = текущий адрес
SWAB -12(SP) ; Обменять байты образца
+
        SWAB   -12(SP)         ; Обменять байты образца
BEQ 170342$ ; Младший байт = 0 (для второго прохода)
+
        BEQ     170342$         ; Младший байт = 0 (для второго прохода)
MOV R2,R3 ; Текущий адрес = начало след. 8-КБайтной стр.
+
        MOV     R2,R3           ; Текущий адрес = начало след. 8-КБайтной стр.
CMP R2,R5 ; Достигнут конец ?
+
        CMP     R2,R5           ; Достигнут конец ?
BLO 170314$ ; Нет
+
        BLO     170314$         ; Нет
MOV #377,-12(SP) ; Образец заполнения
+
        MOV     #377,-12(SP)   ; Образец заполнения
170506$:MOV R4,R1 ; R1 = начальный адрес
+
170506$:MOV     R4,R1           ; R1 = начальный адрес
MOV -12(SP),R0 ; R0 = образец заполнения
+
        MOV     -12(SP),R0     ; R0 = образец заполнения
170514$:MOV R0,(R1)+ ; Записать в ячейку
+
170514$:MOV     R0,(R1)+       ; Записать в ячейку
CMP R1,R5 ; Достигнут конец ?
+
        CMP     R1,R5           ; Достигнут конец ?
BLO 170514$ ; Нет
+
        BLO     170514$         ; Нет
MOV R4,R1 ; R1 = начальный адрес
+
        MOV     R4,R1           ; R1 = начальный адрес
170524$:CMP R0,@R1 ; Сравнить содержимое ячейки с образцом
+
170524$:CMP     R0,@R1         ; Сравнить содержимое ячейки с образцом
BEQ 170536$ ; Равно
+
        BEQ     170536$         ; Равно
MOV #2,R0 ; Ошибка
+
        MOV     #2,R0           ; Ошибка
RETURN
+
        RETURN
170536$:ADD #2,R1 ; Перейти к следующей ячейке
+
170536$:ADD     #2,R1           ; Перейти к следующей ячейке
CMP R1,R5 ; Достигнут конец ?
+
        CMP     R1,R5           ; Достигнут конец ?
BLO 170524$ ; Нет
+
        BLO     170524$         ; Нет
CALL 170614$ ; Задержка
+
        CALL   170614$         ; Задержка
MOV -12(SP),R0 ; R0 = образец заполнения
+
        MOV     -12(SP),R0     ; R0 = образец заполнения
MOV R4,R1 ; R1 = начальный адрес
+
        MOV     R4,R1           ; R1 = начальный адрес
170560$:CMP R0,@R1 ; Сравнить содержимое ячейки с образцом
+
170560$:CMP     R0,@R1         ; Сравнить содержимое ячейки с образцом
BEQ 170572$ ; Равно
+
        BEQ     170572$         ; Равно
MOV #3,R0 ; Ошибка
+
        MOV     #3,R0           ; Ошибка
RETURN
+
        RETURN
170572$:ADD #2,R1 ; Перейти к следующей ячейке
+
170572$:ADD     #2,R1           ; Перейти к следующей ячейке
CMP R1,R5 ; Достигнут конец ?
+
        CMP     R1,R5           ; Достигнут конец ?
BLO 170560$ ; Нет
+
        BLO     170560$         ; Нет
SWAB -12(SP) ; Обменять байты образца
+
        SWAB   -12(SP)         ; Обменять байты образца
BEQ 170506$ ; На второй проход
+
        BEQ     170506$         ; На второй проход
CLR R0 ; Нет ошибок
+
        CLR     R0             ; Нет ошибок
RETURN
+
        RETURN
 
; Подпрограмма реализации задержки
 
; Подпрограмма реализации задержки
170614$:MOV #1000.,R2
+
170614$:MOV     #1000.,R2
170620$:MOV #1000.,R3
+
170620$:MOV     #1000.,R3
170624$:SOB R3,170624$
+
170624$:SOB     R3,170624$
SOB R2,170620$
+
        SOB     R2,170620$
RETURN
+
        RETURN
 
; Подпрограмма тестирования процессора
 
; Подпрограмма тестирования процессора
170632$:CCC ; Сбросить все биты признаков
+
170632$:CCC                     ; Сбросить все биты признаков
BCS 170654$ ; C=1
+
        BCS     170654$         ; C=1
BVS 170654$ ; V=1
+
        BVS     170654$         ; V=1
BEQ 170654$ ; Z=1
+
        BEQ     170654$         ; Z=1
BMI 170654$ ; N=1
+
        BMI     170654$         ; N=1
BLT 170654$ ; N<>V
+
        BLT     170654$         ; N<>V
BLE 170654$ ; (N<>V) or Z=1
+
        BLE     170654$         ; (N<>V) or Z=1
BLOS 170654$ ; Z=1 or C=1
+
        BLOS   170654$         ; Z=1 or C=1
BHI 170660$ ; Z=0 and C=0
+
        BHI     170660$         ; Z=0 and C=0
170654$:JMP 172604$ ; Ошибка
+
170654$:JMP     172604$         ; Ошибка
170660$:SEV ; Установить V и N
+
170660$:SEV                     ; Установить V и N
SEN
+
        SEN
BVC 170674$ ; V=0
+
        BVC     170674$         ; V=0
BLT 170674$ ; N<>V
+
        BLT     170674$         ; N<>V
BLE 170674$ ; (N<>V) or Z=1
+
        BLE     170674$         ; (N<>V) or Z=1
BGE 170700$ ; N=V
+
        BGE     170700$         ; N=V
170674$:JMP 172604$ ; Ошибка
+
170674$:JMP     172604$         ; Ошибка
170700$:SEZ ; Установить Z и C
+
170700$:SEZ                     ; Установить Z и C
SEC
+
        SEC
BNE 170714$ ; Z=0
+
        BNE     170714$         ; Z=0
BGT 170714$ ; Z=0 and (N=V)
+
        BGT     170714$         ; Z=0 and (N=V)
BHI 170714$ ; Z=0 and C=0
+
        BHI     170714$         ; Z=0 and C=0
BLE 170720$ ; (N<>V) or Z=1
+
        BLE     170720$         ; (N<>V) or Z=1
170714$:JMP 172604$ ; Ошибка
+
170714$:JMP     172604$         ; Ошибка
170720$:MOV SP,R3
+
170720$:MOV     SP,R3
TST -(R3) ; R3 = R3 - 2
+
        TST     -(R3)           ; R3 = R3 - 2
CLR @R3
+
        CLR     @R3
MOV R3,R0
+
        MOV     R3,R0
TST -(R3) ; R3 = R3 - 2
+
        TST     -(R3)           ; R3 = R3 - 2
MOV R0,@R3 ; (R3) = адрес ячейки с нулевым содерж.
+
        MOV     R0,@R3         ; (R3) = адрес ячейки с нулевым содерж.
MOV R3,R4
+
        MOV     R3,R4
CCC ; Очистить все биты признаков
+
        CCC                     ; Очистить все биты признаков
TST @(R3)+ ; В ячейке нуль ?
+
        TST     @(R3)+         ; В ячейке нуль ?
BEQ 170750$ ; Да
+
        BEQ     170750$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
170750$:SEC ; Установка бита C
+
170750$:SEC                     ; Установка бита C
ROR @-(R3) ; Уст. ст. разр. в 1,выдв. млад. =0 (10...0))
+
        ROR     @-(R3)         ; Уст. ст. разр. в 1,выдв. млад. =0 (10...0))
BCS 170762$ ; C=1
+
        BCS     170762$         ; C=1
BVC 170762$ ; V=0
+
        BVC     170762$         ; V=0
BMI 170766$ ; N=1
+
        BMI     170766$         ; N=1
170762$:JMP 172604$ ; Ошибка
+
170762$:JMP     172604$         ; Ошибка
170766$:CCC ; Очистить все биты признаков
+
170766$:CCC                     ; Очистить все биты признаков
ASR @(R4)+ ; Оставить старший бит (110...0)
+
        ASR     @(R4)+         ; Оставить старший бит (110...0)
BVC 170766$ ; V=0
+
        BVC     170776$         ; V=0
BMI 171002$ ; N=1
+
        BMI     171002$         ; N=1
170776$:JMP 172604$ ; Ошибка
+
170776$:JMP     172604$         ; Ошибка
171002$:CLN ; Очистить бит N
+
171002$:CLN                     ; Очистить бит N
ASL @(R3)+ ; Сдвиг влево (10...0)
+
        ASL     @(R3)+         ; Сдвиг влево (10...0)
BCC 171014$ ; C=0
+
        BCC     171014$         ; C=0
BVS 171014$ ; V=1
+
        BVS     171014$         ; V=1
BMI 171020$ ; N=1
+
        BMI     171020$         ; N=1
171014$:JMP 172604$ ; Ошибка
+
171014$:JMP     172604$         ; Ошибка
171020$:SCC ; Установить все биты признаков
+
171020$:SCC                     ; Установить все биты признаков
DEC @-(R4) ; Минус 1 (01...1)
+
        DEC     @-(R4)         ; Минус 1 (01...1)
BHIS 171034$ ; C=0
+
        BHIS   171034$         ; C=0
BVC 171034$ ; V=0
+
        BVC     171034$         ; V=0
BEQ 171034$ ; Z=1
+
        BEQ     171034$         ; Z=1
BPL 171040$ ; N=0
+
        BPL     171040$         ; N=0
171034$:JMP 172604$ ; Ошибка
+
171034$:JMP     172604$         ; Ошибка
171040$:NEG @-(R3) ; Смена знака (10...01)
+
171040$:NEG     @-(R3)         ; Смена знака (10...01)
BCC 171050$ ; C=0
+
        BCC     171050$         ; C=0
BVS 171050$ ; V=1
+
        BVS     171050$         ; V=1
BMI 171054$ ; N=1
+
        BMI     171054$         ; N=1
171050$:JMP 172604$ ; Ошибка
+
171050$:JMP     172604$         ; Ошибка
171054$:SEV ; Установка бита V
+
171054$:SEV                     ; Установка бита V
COM @(R4)+ ; Инверсия (01...10)
+
        COM     @(R4)+         ; Инверсия (01...10)
BCC 171064$ ; C=0
+
        BCC     171064$         ; C=0
BVC 171070$ ; V=0
+
        BVC     171070$         ; V=0
171064$:JMP 172604$ ; Ошибка
+
171064$:JMP     172604$         ; Ошибка
171070$:INC @(R3)+ ; Плюс 1 (01...1)
+
171070$:INC     @(R3)+         ; Плюс 1 (01...1)
BHIS 171076$ ; C=0
+
        BHIS   171076$         ; C=0
BPL 171102$ ; N=0
+
        BPL     171102$         ; N=0
171076$:JMP 172604$ ; Ошибка
+
171076$:JMP     172604$         ; Ошибка
171102$:ADC @-(R4) ; Прибавление переноса (10...0)
+
171102$:ADC     @-(R4)         ; Прибавление переноса (10...0)
BCS 171112$ ; C=1
+
        BCS     171112$         ; C=1
BVC 171112$ ; V=0
+
        BVC     171112$         ; V=0
BMI 171116$ ; N=1
+
        BMI     171116$         ; N=1
171112$:JMP 172604$ ; Ошибка
+
171112$:JMP     172604$         ; Ошибка
171116$:CCC ; Очистить все биты признаков
+
171116$:CCC                     ; Очистить все биты признаков
ROL @(R4)+ ; Сдвиг влево (0...0)
+
        ROL     @(R4)+         ; Сдвиг влево (0...0)
BCC 171130$ ; C=0
+
        BCC     171130$         ; C=0
BVC 171130$ ; V=0
+
        BVC     171130$         ; V=0
BEQ 171134$ ; Z=1
+
        BEQ     171134$         ; Z=1
171130$:JMP 172604$ ; Ошибка
+
171130$:JMP     172604$         ; Ошибка
171134$:INC @-(R3) ; Плюс 1 (0...01)
+
171134$:INC     @-(R3)         ; Плюс 1 (0...01)
SBC @-(R4) ; Вычитание переноса (0...0)
+
        SBC     @-(R4)         ; Вычитание переноса (0...0)
BCS 171144$ ; C=1
+
        BCS     171144$         ; C=1
BEQ 171150$ ; Z=1
+
        BEQ     171150$         ; Z=1
171144$:JMP 172604$ ; Ошибка
+
171144$:JMP     172604$         ; Ошибка
171150$:MOV SP,R2
+
171150$:MOV     SP,R2
TST -(R2) ; R2 = R2 - 2
+
        TST     -(R2)           ; R2 = R2 - 2
MOV R2,R0
+
        MOV     R2,R0
CLR @R0 ; Очистка (0...0)
+
        CLR     @R0             ; Очистка (0...0)
TST -(R2) ; R2 = R2 - 4
+
        TST     -(R2)           ; R2 = R2 - 4
TST -(R2)
+
        TST     -(R2)
MOV R0,(R2)+ ; SP-2
+
        MOV     R0,(R2)+       ; SP-2
INC R0
+
        INC     R0
MOV R0,(R2)+ ; SP-1
+
        MOV     R0,(R2)+       ; SP-1
MOV R2,R0 ; SP-2
+
        MOV     R2,R0           ; SP-2
MOV R2,R1 ; SP-2
+
        MOV     R2,R1           ; SP-2
COMB @-(R2) ; Инверсия (High 1...1)
+
        COMB   @-(R2)         ; Инверсия (High 1...1)
BCC 171204$ ; C=0
+
        BCC     171204$         ; C=0
BMI 171210$ ; N=1
+
        BMI     171210$         ; N=1
171204$:JMP 172604$ ; Ошибка
+
171204$:JMP     172604$         ; Ошибка
171210$:TSTB @-(R2) ; Проверка (Low 0...0)
+
171210$:TSTB   @-(R2)         ; Проверка (Low 0...0)
BEQ 171220$ ; Z=1
+
        BEQ     171220$         ; Z=1
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
171220$:SEV ; Установка бита V
+
171220$:SEV                     ; Установка бита V
ASRB @-(R1) ; Сдвиг вправо (High 1...1)
+
        ASRB   @-(R1)         ; Сдвиг вправо (High 1...1)
BCC 171232$ ; C=0
+
        BCC     171232$         ; C=0
BVS 171232$ ; V=1
+
        BVS     171232$         ; V=1
BMI 171236$ ; N=1
+
        BMI     171236$         ; N=1
171232$:JMP 172604$ ; Ошибка
+
171232$:JMP     172604$         ; Ошибка
171236$:INCB @(R2)+ ; Плюс 1 (Low 0...01)
+
171236$:INCB   @(R2)+         ; Плюс 1 (Low 0...01)
BCC 171244$ ; C=0
+
        BCC     171244$         ; C=0
BPL 171250$ ; N=0
+
        BPL     171250$         ; N=0
171244$:JMP 172604$ ; Ошибка
+
171244$:JMP     172604$         ; Ошибка
171250$:CLC ; Сбросить бит C
+
171250$:CLC                     ; Сбросить бит C
RORB @-(R1) ; Сдвиг вправо (Low 0...0)
+
        RORB   @-(R1)         ; Сдвиг вправо (Low 0...0)
BCC 171264$ ; C=0
+
        BCC     171264$         ; C=0
BVC 171264$ ; V=0
+
        BVC     171264$         ; V=0
BNE 171264$ ; Z=0
+
        BNE     171264$         ; Z=0
BPL 171270$ ; N=0
+
        BPL     171270$         ; N=0
171264$:JMP 172604$ ; Ошибка
+
171264$:JMP     172604$         ; Ошибка
171270$:ASLB @(R2)+ ; Сдвиг влево (High 1...10)
+
171270$:ASLB   @(R2)+         ; Сдвиг влево (High 1...10)
BCC 171300$ ; C=0
+
        BCC     171300$         ; C=0
BVS 171300$ ; V=1
+
        BVS     171300$         ; V=1
BMI 171304$ ; N=1
+
        BMI     171304$         ; N=1
171300$:JMP 172604$ ; Ошибка
+
171300$:JMP     172604$         ; Ошибка
171304$:ADCB @-(R2) ; Прибавление переноса (High 1...1)
+
171304$:ADCB   @-(R2)         ; Прибавление переноса (High 1...1)
BCS 171312$ ; C=1
+
        BCS     171312$         ; C=1
BMI 171316$ ; N=1
+
        BMI     171316$         ; N=1
171312$:JMP 172604$ ; Ошибка
+
171312$:JMP     172604$         ; Ошибка
171316$:SCC ; Установка всех битов признаков
+
171316$:SCC                     ; Установка всех битов признаков
ROLB @(R1)+ ; Сдвиг влево (Low 0...01)
+
        ROLB   @(R1)+         ; Сдвиг влево (Low 0...01)
BLOS 171330$ ; C=1 or Z=1
+
        BLOS   171330$         ; C=1 or Z=1
BVS 171330$ ; V=1
+
        BVS     171330$         ; V=1
BPL 171334$ ; N=0
+
        BPL     171334$         ; N=0
171330$:JMP 172604$ ; Ошибка
+
171330$:JMP     172604$         ; Ошибка
171334$:SWAB @-(R2) ; Обменять байты (High 0...01  Low 1...1)
+
171334$:SWAB   @-(R2)         ; Обменять байты (High 0...01  Low 1...1)
BMI 171344$ ; N=1
+
        BMI     171344$         ; N=1
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
171344$:SEC ; Установка бита C
+
171344$:SEC                     ; Установка бита C
SBCB @(R1)+ ; Вычитание переноса (High 0...0)
+
        SBCB   @(R1)+         ; Вычитание переноса (High 0...0)
BCS 171354$ ; C=1
+
        BCS     171354$         ; C=1
BEQ 171360$ ; Z=1
+
        BEQ     171360$         ; Z=1
171354$:JMP 172604$ ; Ошибка
+
171354$:JMP     172604$         ; Ошибка
171360$:NEGB @(R2)+ ; Смена знака (Low 0...01)
+
171360$:NEGB   @(R2)+         ; Смена знака (Low 0...01)
DECB @-(R2) ; Минус 1 (Low 0...0)
+
        DECB   @-(R2)         ; Минус 1 (Low 0...0)
BCC 171370$ ; C=0
+
        BCC     171370$         ; C=0
BEQ 171374$ ; Z=1
+
        BEQ     171374$         ; Z=1
171370$:JMP 172604$ ; Ошибка
+
171370$:JMP     172604$         ; Ошибка
171374$:MOV SP,R0 ; R0 = SP
+
171374$:MOV     SP,R0           ; R0 = SP
TST -(R0) ; R0 = R0 - 2
+
        TST     -(R0)           ; R0 = R0 - 2
MOV R0,R1 ; SP-2
+
        MOV     R0,R1           ; SP-2
CMP -(R1),-(R1) ; SP-6
+
        CMP     -(R1),-(R1)     ; SP-6
MOV R0,@R1 ; -6(SP) = ADDR(-2(SP))
+
        MOV     R0,@R1         ; -6(SP) = ADDR(-2(SP))
MOV R1,R2 ; SP-6
+
        MOV     R1,R2           ; SP-6
MOV R0,R4 ; SP-2
+
        MOV     R0,R4           ; SP-2
TST -(R0) ; SP-4
+
        TST     -(R0)           ; SP-4
MOV R0,R3 ; SP-4
+
        MOV     R0,R3           ; SP-4
MOV R0,-(R2) ; R2 = SP-8 -8(SP) = ADDR(-4(SP))
+
        MOV     R0,-(R2)       ; R2 = SP-8 -8(SP) = ADDR(-4(SP))
CLR @R3 ; -4(SP) = 0
+
        CLR     @R3             ; -4(SP) = 0
CLR @R4 ; -2(SP) = 0
+
        CLR     @R4             ; -2(SP) = 0
SCC ; Установка битов N,V,C
+
        SCC                     ; Установка битов N,V,C
CLZ
+
        CLZ
SUB @(R2)+,@(R1)+ ; -2(SP)=-2(SP) - -4(SP)=0
+
        SUB     @(R2)+,@(R1)+   ; -2(SP)=-2(SP) - -4(SP)=0
BLO 171440$ ; C=1
+
        BLO     171440$         ; C=1
BVS 171440$ ; V=1
+
        BVS     171440$         ; V=1
BEQ 171444$ ; Z=1
+
        BEQ     171444$         ; Z=1
171440$:JMP 172604$ ; Ошибка
+
171440$:JMP     172604$         ; Ошибка
171444$:BIS #100000,@-(R2) ; -4(SP) = 100000
+
171444$:BIS     #100000,@-(R2) ; -4(SP) = 100000
ADD #1,@-(R1) ; -2(SP) = 1
+
        ADD     #1,@-(R1)       ; -2(SP) = 1
SUB @(R2)+,@(R1)+ ; -2(SP) = 1 - 100000 = 100001
+
        SUB     @(R2)+,@(R1)+   ; -2(SP) = 1 - 100000 = 100001
BHIS 171464$ ; C=0
+
        BHIS   171464$         ; C=0
BVC 171464$ ; V=0
+
        BVC     171464$         ; V=0
BMI 171470$ ; N=1
+
        BMI     171470$         ; N=1
171464$:JMP 172604$ ; Ошибка
+
171464$:JMP     172604$         ; Ошибка
171470$:NEG @R4 ; -2(SP) = 077777
+
171470$:NEG     @R4             ; -2(SP) = 077777
BIT @-(R2),@-(R1) ; 100000 and 077777 = 0
+
        BIT     @-(R2),@-(R1)   ; 100000 and 077777 = 0
BEQ 171502$ ; Z=1
+
        BEQ     171502$         ; Z=1
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
171502$:CMP @(R2)+,@(R1)+ ; 100000 - 077777 = 1 (C=1,V=1,N=0,Z=0)
+
171502$:CMP     @(R2)+,@(R1)+   ; 100000 - 077777 = 1 (C=1,V=1,N=0,Z=0)
BVS 171512$ ; V=1
+
        BVS     171512$         ; V=1
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
171512$:COM @-(R2) ; Инверсия -4(SP) = 077777
+
171512$:COM     @-(R2)         ; Инверсия -4(SP) = 077777
CCC ; Очистить все биты признаков
+
        CCC                     ; Очистить все биты признаков
ADD @(R2)+,@-(R1) ; -2(SP) = 077777 + 077777 = 177776
+
        ADD     @(R2)+,@-(R1)   ; -2(SP) = 077777 + 077777 = 177776
BVC 171524$ ; C=0
+
        BVC     171524$         ; C=0
BMI 171530$ ; N=1
+
        BMI     171530$         ; N=1
171524$:JMP 172604$ ; Ошибка
+
171524$:JMP     172604$         ; Ошибка
171530$:SEC ; Установка бита C
+
171530$:SEC                     ; Установка бита C
BIC @-(R2),@(R1)+ ; -2(SP) = 177776 and not 77777 = 100000
+
        BIC     @-(R2),@(R1)+   ; -2(SP) = 177776 and not 77777 = 100000
BCC 171540$ ; C=0
+
        BCC     171540$         ; C=0
BMI 171544$ ; N=1
+
        BMI     171544$         ; N=1
171540$:JMP 172604$ ; Ошибка
+
171540$:JMP     172604$         ; Ошибка
171544$:COM @-(R1) ; Инверсия -2(SP) = 77777
+
171544$:COM     @-(R1)         ; Инверсия -2(SP) = 77777
CMP @(R2)+,@(R1)+ ; 077777 - 077777 = 0 (C=0,V=0,N=0,Z=1)
+
        CMP     @(R2)+,@(R1)+   ; 077777 - 077777 = 0 (C=0,V=0,N=0,Z=1)
BEQ 171556$ ; Z=1
+
        BEQ     171556$         ; Z=1
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
171556$:MOV SP,R0 ; R0 = SP
+
171556$:MOV     SP,R0           ; R0 = SP
TST -(R0) ; SP-2
+
        TST     -(R0)           ; SP-2
MOV R0,R3 ; SP-2
+
        MOV     R0,R3           ; SP-2
MOV R3,R1 ; SP-2
+
        MOV     R3,R1           ; SP-2
TST -(R3) ; SP-4
+
        TST     -(R3)           ; SP-4
MOV R0,-(R3) ; -6(SP) = ADDRB(-1(SP))
+
        MOV     R0,-(R3)       ; -6(SP) = ADDRB(-1(SP))
INC @R3
+
        INC     @R3
MOV R0,-(R3) ; -8(SP) = ADDRB(-2(SP))
+
        MOV     R0,-(R3)       ; -8(SP) = ADDRB(-2(SP))
MOV R3,R4 ; SP-8
+
        MOV     R3,R4           ; SP-8
TST -(R0) ; SP-4
+
        TST     -(R0)           ; SP-4
MOV R0,-(R4) ; -10(SP) = ADDRB(-3(SP))
+
        MOV     R0,-(R4)       ; -10(SP) = ADDRB(-3(SP))
INC @R4
+
        INC     @R4
MOV R0,-(R4) ; -12(SP) = ADDRB(-4(SP))
+
        MOV     R0,-(R4)       ; -12(SP) = ADDRB(-4(SP))
SEC ; Установить бит C
+
        SEC                     ; Установить бит C
MOV #177001,@(R4)+ ; -4(SP) = 1    -3(SP) = 376
+
        MOV     #177001,@(R4)+ ; -4(SP) = 1    -3(SP) = 376
MOVB #200,@(R4)+ ; -3(SP) = 200
+
        MOVB   #200,@(R4)+     ; -3(SP) = 200
MOVB @-(R4),@(R3)+ ; -2(SP) = 200
+
        MOVB   @-(R4),@(R3)+   ; -2(SP) = 200
MOVB @-(R4),@(R3)+ ; -1(SP) = 1
+
        MOVB   @-(R4),@(R3)+   ; -1(SP) = 1
BCS 171634$ ; C=1
+
        BCS     171634$         ; C=1
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
171634$:CMP #600,@R1 ; 600 - 600 = 0 (C=0,V=0,N=0,Z=1)
+
171634$:CMP     #600,@R1       ; 600 - 600 = 0 (C=0,V=0,N=0,Z=1)
BEQ 171646$ ; Z=1
+
        BEQ     171646$         ; Z=1
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
171646$:CMP -(R3),-(R3) ; SP-8
+
171646$:CMP     -(R3),-(R3)     ; SP-8
BISB @(R4)+,@(R3)+ ; -2(SP) = 200 or 1 = 201
+
        BISB   @(R4)+,@(R3)+   ; -2(SP) = 200 or 1 = 201
BISB @(R4)+,@(R3)+ ; -1(SP) = 1 or 200 = 201
+
        BISB   @(R4)+,@(R3)+   ; -1(SP) = 1 or 200 = 201
CMP #100601,@R1 ; 100601 - 100601 = 0 (C=0,V=0,N=0,Z=1)
+
        CMP     #100601,@R1     ; 100601 - 100601 = 0 (C=0,V=0,N=0,Z=1)
BEQ 171664$ ; Z=1
+
        BEQ     171666$         ; Z=1
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
171664$:BICB @-(R4),@-(R3) ; -1(SP) = 201 and not 200 = 1
+
171666$:BICB   @-(R4),@-(R3)   ; -1(SP) = 201 and not 200 = 1
BICB @-(R4),@-(R3) ; -2(SP) = 201 and not 1 = 200
+
        BICB   @-(R4),@-(R3)   ; -2(SP) = 201 and not 1 = 200
BITB @(R4)+,@(R3)+ ; 1 and 200 = 0
+
        BITB   @(R4)+,@(R3)+   ; 1 and 200 = 0
BNE 171702$ ; Z=0
+
        BNE     171702$         ; Z=0
BITB @-(R4),@(R3)+ ; 1 and 1 = 1
+
        BITB   @-(R4),@(R3)+   ; 1 and 1 = 1
BNE 171706$ ; Z=1
+
        BNE     171706$         ; Z=1
171702$:JMP 172604$ ; Ошибка
+
171702$:JMP     172604$         ; Ошибка
171706$:CMPB @(R4)+,@-(R3) ; 1 - 1 = 0 (C=0,V=0,N=0,Z=1)
+
171706$:CMPB   @(R4)+,@-(R3)   ; 1 - 1 = 0 (C=0,V=0,N=0,Z=1)
BNE 171716$ ; Z=0
+
        BNE     171716$         ; Z=0
CMPB @(R4)+,@-(R3) ; 1 - 200 = 201 (C=1,V=1,N=1,Z=0)
+
        CMPB   @(R4)+,@-(R3)   ; 1 - 200 = 201 (C=1,V=1,N=1,Z=0)
BEQ 171722$ ; Z=1
+
        BEQ     171722$         ; Z=1
171716$:JMP 172604$ ; Ошибка
+
171716$:JMP     172604$         ; Ошибка
171722$:MOV PC,R0 ; R0 = 171724
+
171722$:MOV     PC,R0           ; R0 = 171724
ADD #171736$-.,R0 ; R0 = 171736
+
        ADD     #171736$-.,R0   ; R0 = 171736
SCC ; Установить все биты признаков
+
        SCC                     ; Установить все биты признаков
JMP @R0 ; PC = 171736
+
        JMP     @R0             ; PC = 171736
171734$:BR 171742$
+
171734$:BR     171742$
171736$:CLN ; Сбросить бит N
+
171736$:CLN                     ; Сбросить бит N
BR 171734$
+
        BR     171734$
171742$:BCC 171752$ ; C=0
+
171742$:BCC     171752$         ; C=0
BVC 171752$ ; V=0
+
        BVC     171752$         ; V=0
BNE 171752$ ; Z=0
+
        BNE     171752$         ; Z=0
BPL 171756$ ; N=0
+
        BPL     171756$         ; N=0
171752$:JMP 172604$ ; Ошибка
+
171752$:JMP     172604$         ; Ошибка
171756$:CLR R2
+
171756$:CLR     R2
MOV PC,R4 ; R4 = 171762
+
        MOV     PC,R4           ; R4 = 171762
MOV R4,R0 ; R0 = 171762
+
        MOV     R4,R0           ; R0 = 171762
BR 171772$
+
        BR     171772$
171766$:COM R2 ; R2 = 177777
+
171766$:COM     R2             ; R2 = 177777
BR 172000$
+
        BR     172000$
171772$:CMP (R4)+,(R4)+ ; R4 = 171766
+
171772$:CMP     (R4)+,(R4)+     ; R4 = 171766
TST (R4)+ ; R4 = 171770
+
        TST     (R4)+           ; R4 = 171770
JMP @-(R4) ; PC = 171766    R4 = 171766
+
        JMP     -(R4)           ; PC = 171766    R4 = 171766
172000$:INC R2 ; R2 = 0
+
172000$:INC     R2             ; R2 = 0
BNE 172012$ ; Z=0
+
        BNE     172012$         ; Z=0
CMP (R0)+,(R0)+ ; R0 = 171766
+
        CMP     (R0)+,(R0)+     ; R0 = 171766
CMP R0,R4 ; 171766 - 171766 = 0 (C=0,V=0,N=0,Z=1)
+
        CMP     R0,R4           ; 171766 - 171766 = 0 (C=0,V=0,N=0,Z=1)
BEQ 172016$ ; Z=1
+
        BEQ     172016$         ; Z=1
172012$:JMP 172604$ ; Ошибка
+
172012$:JMP     172604$         ; Ошибка
172016$:MOV PC,R2 ; R2 = 172020
+
172016$:MOV     PC,R2           ; R2 = 172020
ADD #172044$-.,R2 ; R2 = 172044
+
        ADD     #172044$-.,R2   ; R2 = 172044
SCC ; Установить биты N,C,Z
+
        SCC                     ; Установить биты N,C,Z
CLV
+
        CLV
JSR R1,@R2 ; PC = 172044
+
        JSR     R1,@R2         ; PC = 172044
TST R2
+
        TST     R2
BEQ 172066$ ; Z=1
+
        BEQ     172066$         ; Z=1
JMP 172604$
+
        JMP     172604$
172042$:RTS R1
+
172042$:RTS     R1
172044$:BCC 172060$ ; C=0
+
172044$:BCC     172060$         ; C=0
BVS 172060$ ; V=1
+
        BVS     172060$         ; V=1
BNE 172060$ ; Z=0
+
        BNE     172060$         ; Z=0
BPL 172060$ ; N=0
+
        BPL     172060$         ; N=0
CLR R2
+
        CLR     R2
BR 172042$
+
        BR     172042$
172060$:TST (SP)+
+
172060$:TST     (SP)+
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172066$:MOV SP,R4
+
172066$:MOV     SP,R4
TST -(R4) ; SP-2
+
        TST     -(R4)           ; SP-2
CLR R3
+
        CLR     R3
MOV #5,R2
+
        MOV     #5,R2
MOV #2,@R4
+
        MOV     #2,@R4
SCC ; Установить все признаки
+
        SCC                     ; Установить все признаки
MUL @R4,R2 ; (R2,R3) = 5 * 2 = 12 (R2 = 0) (R3 = 12)
+
        MUL     @R4,R2         ; (R2,R3) = 5 * 2 = 12 (R2 = 0) (R3 = 12)
BMI 172116$ ; N=1
+
        BMI     172116$         ; N=1
BLOS 172116$ ; Z=1 or C=1
+
        BLOS   172116$         ; Z=1 or C=1
BVC 172122$ ; V=0
+
        BVC     172122$         ; V=0
172116$:JMP 172604$ ; Ошибка
+
172116$:JMP     172604$         ; Ошибка
172122$:CMP #12,R3 ; R3=12 ?
+
172122$:CMP     #12,R3         ; R3=12 ?
BEQ 172134$ ; Да
+
        BEQ     172134$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172134$:TST R2 ; R2=0 ?
+
172134$:TST     R2             ; R2=0 ?
BEQ 172144$
+
        BEQ     172144$
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172144$:CLR R3
+
172144$:CLR     R3
MOV #125252,R2
+
        MOV     #125252,R2
MOV #2,@R4
+
        MOV     #2,@R4
MUL @R4,R2 ; (R2,R3)=125252*2=37777652524(R2=-1)(R3=52524)
+
        MUL     @R4,R2         ; (R2,R3)=125252*2=37777652524(R2=-1)(R3=52524)
BCC 172170$ ; C=0
+
        BCC     172170$         ; C=0
BPL 172170$ ; N=0
+
        BPL     172170$         ; N=0
BVS 172170$ ; V=1
+
        BVS     172170$         ; V=1
BNE 172174$ ; Z=0
+
        BNE     172174$         ; Z=0
172170$:JMP 172604$ ; Ошибка
+
172170$:JMP     172604$         ; Ошибка
172174$:CMP #-1,R2 ; R2=-1 ?
+
172174$:CMP     #-1,R2         ; R2=-1 ?
BEQ 172206$ ; Да
+
        BEQ     172206$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172206$:CMP #52524,R3 ; R3=52524 ?
+
172206$:CMP     #52524,R3       ; R3=52524     ?
BEQ 172220$ ; Да
+
        BEQ     172220$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172220$:MOV #1,@R4
+
172220$:MOV     #1,@R4
MOV #125252,R2
+
        MOV     #125252,R2
CCC ; Установить биты Z,N
+
        CCC                     ; Установить биты Z,N
SEZ
+
        SEZ
SEN
+
        SEN
ASH @R4,R2 ; R2 = 125252 << 1 = 52524
+
        ASH     @R4,R2         ; R2 = 125252 << 1 = 52524
BMI 172250$ ; N=1
+
        BMI     172250$         ; N=1
BEQ 172250$ ; Z=1
+
        BEQ     172250$         ; Z=1
BVC 172250$ ; V=0
+
        BVC     172250$         ; V=0
BCS 172254$ ; C=1
+
        BCS     172254$         ; C=1
172250$:JMP 172604$ ; Ошибка
+
172250$:JMP     172604$         ; Ошибка
172254$:CMP #52524,R2 ; R2 = 52524 ?
+
172254$:CMP     #52524,R2       ; R2 = 52524 ?
BEQ 172266$ ; Да
+
        BEQ     172266$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172266$:MOV #-1,@R4
+
172266$:MOV     #-1,@R4
MOV #52525,R1
+
        MOV     #52525,R1
ASHC @R4,R1 ; R1 = 52525 >> 1 = 25252
+
        ASH    @R4,R1         ; R1 = 52525 >> 1 = 25252
CMP R1,#25252 ; R1 = 25252 ?
+
        CMP     R1,#25252       ; R1 = 25252 ?
BEQ 172312$ ; Да
+
        BEQ     172312$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172312$:CLR R2
+
172312$:CLR     R2
MOV #20,@R4
+
        MOV     #20,@R4
MOV #125252,R3
+
        MOV     #125252,R3
CCC ; Установка битов Z,C
+
        CCC                     ; Установка битов Z,C
SEZ
+
        SEZ
SEC
+
        SEC
ASHC @R4,R2 ; (R2,R3)=125252<<20=25252400000
+
        ASHC   @R4,R2         ; (R2,R3)=125252<<20=25252400000
BPL 172344$ ; N=0
+
        BPL     172344$         ; N=0
BEQ 172344$ ; Z=1
+
        BEQ     172344$         ; Z=1
BVC 172344$ ; V=0
+
        BVC     172344$         ; V=0
BCC 172350$ ; C=0
+
        BCC     172350$         ; C=0
172344$:JMP 172604$ ; Ошибка
+
172344$:JMP     172604$         ; Ошибка
172350$:CMP #125252,R2 ; R2 = 125252 ?
+
172350$:CMP     #125252,R2     ; R2 = 125252 ?
BEQ 172362$ ; Да
+
        BEQ     172362$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172362$:TST R3 ; R3 = 0 ?
+
172362$:TST     R3             ; R3 = 0 ?
BEQ 172372$ ; Да
+
        BEQ     172372$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172372$:CLR R3
+
172372$:CLR     R3
MOV #-20,@R4
+
        MOV     #-20,@R4
MOV #125252,R2
+
        MOV     #125252,R2
CLN ; Установка Z,V,C
+
        CLN                     ; Установка Z,V,C
SEZ
+
        SEZ
SEV
+
        SEV
SEC
+
        SEC
ASHC @R4,R2 ; (R2,R3)=25252400000>>20=37777725252
+
        ASHC   @R4,R2         ; (R2,R3)=25252400000>>20=37777725252
BPL 172424$ ; N=0
+
        BPL     172424$         ; N=0
BLOS 172424$ ; Z=1 or C=1
+
        BLOS   172424$         ; Z=1 or C=1
BVC 172430$ ; C=0
+
        BVC     172430$         ; C=0
172424$:JMP 172604$ ; Ошибка
+
172424$:JMP     172604$         ; Ошибка
172430$:CMP #-1,R2 ; R2=-1 ?
+
172430$:CMP     #-1,R2         ; R2=-1 ?
BEQ 172442$ ; Да
+
        BEQ     172442$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172442$:CMP #125252,R3 ; R3=125252 ?
+
172442$:CMP     #125252,R3     ; R3=125252 ?
BEQ 172454$ ; Да
+
        BEQ     172454$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172454$:MOV #52525,@R4
+
172454$:MOV     #52525,@R4
CLR R2
+
        CLR     R2
MOV #52525,R3
+
        MOV     #52525,R3
SCC ; Установить все биты признаков
+
        SCC                     ; Установить все биты признаков
DIV @R4,R2 ; (R2,R3) = 52525 / 52525 = (1,0)
+
        DIV     @R4,R2         ; (R2,R3) = 52525 / 52525 = (1,0)
BMI 172500$ ; N=1
+
        BMI     172500$         ; N=1
BLOS 172500$ ; Z=1 or C=1
+
        BLOS   172500$         ; Z=1 or C=1
BVC 172504$ ; V=0
+
        BVC     172504$         ; V=0
172500$:JMP 172604$ ; Ошибка
+
172500$:JMP     172604$         ; Ошибка
172504$:CMP R2,#1 ; R2 = 1 ?
+
172504$:CMP     R2,#1           ; R2 = 1 ?
BEQ 172516$ ; Да
+
        BEQ     172516$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172516$:TST R3 ; R3 = 0 ?
+
172516$:TST     R3             ; R3 = 0 ?
BEQ 172526$ ; Да
+
        BEQ     172526$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172526$:MOV #157777,R2
+
172526$:MOV     #157777,R2
MOV #100001,R3
+
        MOV     #100001,R3
MOV #100000,@R4
+
        MOV     #100000,@R4
SCC ; Установить все биты признаков
+
        SCC                     ; Установить все биты признаков
DIV @R4,R2 ; (R2,R3)=33777700001/100000=(40000,100001)
+
        DIV     @R4,R2         ; (R2,R3)=33777700001/100000=(40000,100001)
BMI 172554$ ; N=1
+
        BMI     172554$         ; N=1
BLOS 172554$ ; Z=1 or C=1
+
        BLOS   172554$         ; Z=1 or C=1
BVC 172560$ ; V=0
+
        BVC     172560$         ; V=0
172554$:JMP 172604$ ; Ошибка
+
172554$:JMP     172604$         ; Ошибка
172560$:CMP R2,#40000 ; R2 = 40000 ?
+
172560$:CMP     R2,#40000       ; R2 = 40000 ?
BEQ 172572$ ; Да
+
        BEQ     172572$         ; Да
JMP 172604$ ; Ошибка
+
        JMP     172604$         ; Ошибка
172572$:CMP R3,#100001 ; R3 = 100001 ?
+
172572$:CMP     R3,#100001     ; R3 = 100001 ?
BNE 172604$ ; Z=0 (ошибка)
+
        BNE     172604$         ; Z=0 (ошибка)
CLR R0 ; Ошибок нет
+
        CLR     R0             ; Ошибок нет
RETURN
+
        RETURN
172604$:MOV #1,R0 ; Есть ошибки
+
172604$:MOV     #1,R0           ; Есть ошибки
RETURN
+
        RETURN
172612$:.WORD 414 ; Конец стека пультового отладчика
+
172612$:.WORD   414             ; Конец стека пультового отладчика
 
; Подпрограмма ввода символа с ожиданием (для ПП)
 
; Подпрограмма ввода символа с ожиданием (для ПП)
172614$:EMT 22 ; Ввод символа
+
172614$:EMT     22             ; Ввод символа
RETURN
+
        RETURN
.WORD 0,0,0,0,0
+
        .WORD   0,0,0,0,0
 
; Подпрограмма вывода символа на экран (для ПП)
 
; Подпрограмма вывода символа на экран (для ПП)
172632$:EMT 42 ; Вывод символа
+
172632$:EMT     42             ; Вывод символа
RETURN
+
        RETURN
.WORD 0,0,0,0,0,0,0,0,0
+
        .WORD   0,0,0,0,0,0,0,0,0
 
; Указатели на ОЗУ пультового отладчика,адрес выводимой надписи,адрес открытой
 
; Указатели на ОЗУ пультового отладчика,адрес выводимой надписи,адрес открытой
 
; ячейки,разрешение/запрет вывода надписей. Начальное значение PS и SP.
 
; ячейки,разрешение/запрет вывода надписей. Начальное значение PS и SP.
 
; Объем ОЗУ в словах. Эти данные для ПП.
 
; Объем ОЗУ в словах. Эти данные для ПП.
172660$:.WORD 450,500,472,504,0,100000,40000
+
172660$:.WORD   450
 +
172662$:.WORD  500
 +
172664$:.WORD  472
 +
172666$:.WORD  504
 +
172670$:.WORD  0
 +
172672$:.WORD  100000
 +
172674$:.WORD  40000
 +
 
 
; Начальная инициализация и вывод ошибок стартового теста
 
; Начальная инициализация и вывод ошибок стартового теста
172676$:MOV #2000,SP
+
172676$:MOV     #2000,SP
ASLB R0
+
        ASLB   R0
ASLB R0
+
        ASLB   R0
MOV R0,-(SP)
+
        MOV     R0,-(SP)
CALL 173502$ ; Полн. иниц. (уст.вект.прер. и иниц. устр.)
+
        CALL   173502$         ; Полн. иниц. (уст.вект.прер. и иниц. устр.)
MOV (SP)+,R2 ; R2 = слово ошибок
+
        MOV     (SP)+,R2       ; R2 = слово ошибок
MOV @#177060,R0 ; R0 = данные К0 (терминал)(слово ошибок ЦП)
+
        MOV     @#177060,R0     ; R0 = данные К0 (терминал)(слово ошибок ЦП)
CMP R0,#2
+
        CMP     R0,#2
BHI 172742$
+
        BHI     172742$
BIS R0,R2 ; Объединить ошибки ПП и ЦП
+
        BIS     R0,R2           ; Объединить ошибки ПП и ЦП
BEQ 172746$ ; Нет ошибок
+
        BEQ     172746$         ; Нет ошибок
CALL 172764$ ; Вывод ошибок на экран
+
        CALL   172764$         ; Вывод ошибок на экран
BR 172746$
+
        BR     172746$
172742$:CALL 117136$ ; Поместить символ в буфер терминала
+
172742$:CALL   117136$         ; Поместить символ в буфер терминала
172746$:MOV #2,@#7042 ; Передача кодов клавиатуры по каналу 0
+
172746$:MOV     #2,@#7042       ; Передача кодов клавиатуры по каналу 0
MTPS #0 ; Разрешить прерывания
+
        MTPS   #0             ; Разрешить прерывания
JMP 174152$
+
        JMP     174152$
 
; Подпрограмма вывода результатов стартового теста
 
; Подпрограмма вывода результатов стартового теста
172764$:JSR R5,117204$ ; Вывод заголовка
+
172764$:JSR     R5,117204$     ; Вывод заголовка
.WORD 173060$
+
        .WORD   173060$
MOV #173036$,R3 ; Адрес массива адресов надписей об ошибках
+
        MOV     #173036$,R3     ; Адрес массива адресов надписей об ошибках
BR 173004$
+
        BR     173004$
173000$:JSR R5,117206$ ; Вывод сообщения об ошибке на экран
+
173000$:JSR     R5,117206$     ; Вывод сообщения об ошибке на экран
173004$:MOV (R3)+,R1 ; R1 = адрес сообщения об ошибке
+
173004$:MOV     (R3)+,R1       ; R1 = адрес сообщения об ошибке
RORB R2
+
        ASRB    R2
BCS 173000$ ; Есть ошибка
+
        BCS     173000$         ; Есть ошибка
BNE 173004$ ; Еще есть ошибки
+
        BNE     173004$         ; Еще есть ошибки
MOV #173046$ ; Адрес массива адресов об ошибках ПЗУ
+
        MOV     #173046$,R3    ; Адрес массива адресов об ошибках ПЗУ
MOV (R3)+,R1 ; R1 = адрес сообщения об ошибке
+
        MOV     (R3)+,R1       ; R1 = адрес сообщения об ошибке
SWAB R2
+
        SWAB   R2
BNE 173000$ ; Ошибки есть
+
        BNE     173000$         ; Ошибки есть
JSR R5,117204$ ; Вывод ESC <270> (пауза)
+
        JSR     R5,117204$     ; Вывод ESC <270> (пауза)
.WORD 173246$
+
        .WORD   173246$
RETURN
+
        RETURN
 
; Массив адресов сообщений об ошибках
 
; Массив адресов сообщений об ошибках
173036$:.WORD 173113$,173131$,173153$,173171$
+
173036$:.WORD   173113$,173131$,173153$,173171$
 
; Массив адресов сообщений об ошибках ПЗУ
 
; Массив адресов сообщений об ошибках ПЗУ
173046$:.WORD 173213$,173232$,173235$,173240$,173243$
+
173046$:.WORD   173213$,173232$,173235$,173240$,173243$
173060$:.BYTE 15,12,40,40,33,244
+
173060$:.BYTE   15,12,40,40,33,244
.ASCII /СТАРТОВЫЙ ТЕСТ/
+
        .ASCII /СТАРТОВЫЙ ТЕСТ/
.BYTE 33,277,244,15,12,12,0
+
        .BYTE   33,277,244,15,12,12,0
173113$:.ASCIZ /- ошибка ЦП/<15><12>
+
173113$:.ASCIZ /- ошибка ЦП/<15><12>
173131$:.ASCIZ /- ошибка ОЗУ ЦП/<15><12>
+
173131$:.ASCIZ /- ошибка ОЗУ ЦП/<15><12>
173153$:.ASCIZ /- ошибка ПП/<15><12>
+
173153$:.ASCIZ /- ошибка ПП/<15><12>
173171$:.ASCIZ /- ошибка ОЗУ ПП/<15><12>
+
173171$:.ASCIZ /- ошибка ОЗУ ПП/<15><12>
173213$:.ASCIZ /- ошибка ПЗУ  /
+
173213$:.ASCIZ /- ошибка ПЗУ  /
173232$:.ASCIZ /1 /
+
173232$:.ASCIZ /1 /
173235$:.ASCIZ /2 /
+
173235$:.ASCIZ /2 /
173240$:.ASCIZ /3 /
+
173240$:.ASCIZ /3 /
173243$:.ASCIZ /4 /
+
173243$:.ASCIZ /4 /
173246$:.BYTE 33,270,0
+
173246$:.BYTE   33,270,0
.EVEN
+
        .EVEN
 
; Подпрограмма перекачки пультового отладчика в системное ОЗУ ЦП
 
; Подпрограмма перекачки пультового отладчика в системное ОЗУ ЦП
173252$:MOV #160000/2,@#177010 ; Адрес начала системного ОЗУ ЦП
+
173252$:MOV     #<160000/2>&77777,@#177010 ; Адрес начала системного ОЗУ ЦП
MOV #160000,R1 ; Адрес начала пультового отладчика
+
        MOV     #160000,R1     ; Адрес начала пультового отладчика
MOV #5305,R0 ; Размер перек. данных (160000 - 172611)
+
        MOV     #5305,R0       ; Размер перек. данных (160000 - 172611)
173270$:MOV (R1)+,@#177014 ; Цикл перекачки
+
173270$:MOV     (R1)+,@#177014 ; Цикл перекачки
INC @#177010
+
        INC     @#177010
SOB R0,173270$
+
        SOB     R0,173270$
MOV #173356,R1 ; Адрес подпрограмм для ЦП
+
        MOV     #173356$,R1     ; Адрес подпрограмм для ЦП
MOV #44,R0 ; Размер (173356 - 173465)
+
        MOV     #44,R0         ; Размер (173356 - 173465)
173312$:MOV (R1)+,@#177014 ; Цикл перекачки в 172612 - 172721
+
173312$:MOV     (R1)+,@#177014 ; Цикл перекачки в 172612 - 172721
INC @#177010
+
        INC     @#177010
SOB R0,173324$
+
        SOB     R0,173312$
MOV @#177716,@#177014 ; (172722) = системный регистр управления
+
        MOV     @#177716,@#177014 ; (172722) = системный регистр управления
MOV #173466,R1 ; Адр. мас. для уст. знач. ССП в вект.прер.
+
        MOV     #173466$,R1     ; Адр. мас. для уст. знач. ССП в вект.прер.
173336$:MOV (R1)+,@#177010 ; Цикл установки
+
173336$:MOV     (R1)+,@#177010 ; Цикл установки
MOV #600,@#177014
+
        MOV     #600,@#177014
TST @R1 ; Конец массива ?
+
        TST     @R1             ; Конец массива ?
BNE 173336$ ; Нет
+
        BNE     173336$         ; Нет
RETURN
+
        RETURN
173356$:.WORD 160014$ ; Конец стека пультового отладчика (для ЦП)
+
173356$:.WORD   160014$         ; Конец стека пультового отладчика (для ЦП)
; Ее адрес в СОЗУ ЦП - 172612.
+
                                ; Ее адрес в СОЗУ ЦП - 172612.
 
; Подпрограмма ввода символа с ожиданием (для ЦП). Адрес в СОЗУ ЦП - 172614.
 
; Подпрограмма ввода символа с ожиданием (для ЦП). Адрес в СОЗУ ЦП - 172614.
173360$:MOV #177560,R5 ; R5 = адрес регистра сост. К0 (клавиатура)
+
173360$:MOV     #177560,R5     ; R5 = адрес регистра сост. К0 (клавиатура)
$MFPM$ ; Чтение регистра состояния
+
        $MFPM$                 ; Чтение регистра состояния
TSTB R0 ; Есть символ для чтения ?
+
        TSTB   R0             ; Есть символ для чтения ?
BPL 173360$ ; Нет
+
        BPL     173360$         ; Нет
$MFPM$ ; Чтение символа
+
        $MFPM$                 ; Чтение символа
RETURN
+
        RETURN
 
; Подпрограмма вывода символа на экран (для ЦП). Адрес в СОЗУ ЦП - 172632.
 
; Подпрограмма вывода символа на экран (для ЦП). Адрес в СОЗУ ЦП - 172632.
173376$:MOV R0,-(SP) ; Сохранить код символа в стеке
+
173376$:MOV     R0,-(SP)       ; Сохранить код символа в стеке
173400$:MOV #177564,R5 ; R5 = адрес регистра сост. К0 (терминал)
+
173400$:MOV     #177564,R5     ; R5 = адрес регистра сост. К0 (терминал)
$MFPM$ ; Чтение регистра состояния
+
        $MFPM$                 ; Чтение регистра состояния
TSTB R0 ; Можно посылать данные ?
+
        TSTB   R0             ; Можно посылать данные ?
BPL 173400$ ; Нет
+
        BPL     173400$         ; Нет
MOV (SP)+,R0 ; R0 = код символа
+
        MOV     (SP)+,R0       ; R0 = код символа
MOV #177566+2,R5 ; R5 = адрес рег. данных (терминал) + 2
+
        MOV     #177566+2,R5   ; R5 = адрес рег. данных (терминал) + 2
$MTPM$ ; Посылка кода символа по К0
+
        $MTPM$                 ; Посылка кода символа по К0
RETURN
+
        RETURN
 
; Указатели на ОЗУ пультового отладчика,адрес выводимой надписи,адрес открытой
 
; Указатели на ОЗУ пультового отладчика,адрес выводимой надписи,адрес открытой
 
; ячейки,разрешение/запрет вывода надписей. Начальное значение PS и SP.
 
; ячейки,разрешение/запрет вывода надписей. Начальное значение PS и SP.
 
; Объем ОЗУ в словах. Эти данные для ЦП. Их адрес в СОЗУ ЦП - 172660.
 
; Объем ОЗУ в словах. Эти данные для ЦП. Их адрес в СОЗУ ЦП - 172660.
173424$:.WORD 160050,160100,160072,160104,200,1000,70000
+
173424$:.WORD   160050,160100,160072,160104,200,1000,70000
 
; Подпрограмма выбора режима работы (ЦП). Ее адрес в сист.ОЗУ ЦП - 172676.
 
; Подпрограмма выбора режима работы (ЦП). Ее адрес в сист.ОЗУ ЦП - 172676.
173442$:CALL 173376$ ; Посылка по каналу 0 результатов теста
+
173442$:CALL   173376$         ; Посылка по каналу 0 результатов теста
173446$:TST @#163772 ; Ожидание ответа от ПП
+
173446$:TST     @#163772       ; Ожидание ответа от ПП
BEQ 173446$
+
        BEQ     173446$
BPL 173462$ ; Обнаружен контроллер НГМД
+
        BPL     173462$         ; Обнаружен контроллер НГМД
JMP @#162440$ ; На загрузку из сети
+
        JMP     @#162440$       ; На загрузку из сети
173462$:JMP @#160744 ; На вывод меню ЗАГРУЗКА
+
173462$:JMP     @#160744       ; На вывод меню ЗАГРУЗКА
 
; Адреса знач. ССП в векторах прер. ЦП (в формате загрузки в рег.адреса)
 
; Адреса знач. ССП в векторах прер. ЦП (в формате загрузки в рег.адреса)
173466$:.WORD 70001,70003,70075,70077,70137,0
+
173466$:.WORD   70001,70003,70075,70077,70137,0
 
; Подпрограмма проведения инициализации
 
; Подпрограмма проведения инициализации
173502$:CALL 107744$ ; Программная инициализация драйвера терминала
+
173502$:CALL   107754$         ; Программная инициализация драйвера терминала
MOV #RETURN,@#0 ; Установка векторов внутренних прерываний
+
        MOV     #RETURN,@#0     ; Установка векторов внутренних прерываний
MOV #600,R0
+
        MOV     #600,R0
MOV #160200$,@#4
+
        MOV     #160200$,@#4
MOV R0,@#6
+
        MOV     R0,@#6
MOV #160210$,@#10
+
        MOV     #160210$,@#10
MOV R0,@#12
+
        MOV     R0,@#12
MOV #160220$,@#24
+
        MOV     #160220$,@#24
MOV R0,@#26
+
        MOV     R0,@#26
CALL 103564$ ; Программная инициализация драйв. клавиатуры
+
        CALL   103564$         ; Программная инициализация драйв. клавиатуры
CALL 126136$ ; Программная иниц. драйвера магнитофона
+
        CALL   126136$         ; Программная иниц. драйвера магнитофона
CALL 135456$ ; Программная иниц. драйвера граф. дисплея
+
        CALL   135456$         ; Программная иниц. драйвера граф. дисплея
CALL 136004$ ; Программная иниц. драйвера принтера
+
        CALL   136004$         ; Программная иниц. драйвера принтера
CALL 100000$ ; Начальные данные для меню УСТАНОВКА
+
        CALL   100000$         ; Начальные данные для меню УСТАНОВКА
CALL 173744$ ; Уст.вект.прер.периферийных устройств
+
        CALL   173744$         ; Уст.вект.прер.периферийных устройств
MOV SP,@#7040 ; Сохранить SP
+
        MOV     SP,@#7040       ; Сохранить SP
MOV #173632$,@#4 ; Уст.вект.ошибки обращ. к каналу
+
        MOV     #173632$,@#4   ; Уст.вект.ошибки обращ. к каналу
CALL 130712$ ; Программная иниц. драйвера дисковода
+
        CALL   130712$         ; Программная иниц. драйвера дисковода
MOV #1,R0 ; Обнаружен контроллер НГМД
+
        MOV     #1,R0           ; Обнаружен контроллер НГМД
BR 173642$
+
        BR     173642$
173632$:MOV @#7040,SP ; Восстановить SP
+
173632$:MOV     @#7040,SP       ; Восстановить SP
MOV #-1,R0 ; Контроллер НГМД не обнаружен
+
        MOV     #-1,R0         ; Контроллер НГМД не обнаружен
173642$:MOV #163772$/2,@#177010 ; Адрес передачи ключа о присут. НГМД
+
173642$:MOV     #<163772$/2>&77777,@#177010 ; Адрес ключа о присут. НГМД
MOV R0,@#177014 ; Передать ключ
+
        MOV     R0,@#177014     ; Передать ключ
MOV R0,@#7044
+
        MOV     R0,@#7044
BIC #1400,@#177054 ; Включить сетевой таймер в ЦП и ПП
+
        BIC     #1400,@#177054 ; Включить сетевой таймер в ЦП и ПП
BIS #1,@#177066 ; Разрешение прерывания канала 0 (приемник)
+
        BIS     #100,@#177066   ; Разрешение прерывания по RESET ЦП
CLR @#177712 ; Очистить буферный регистр таймера
+
        CLR     @#177712       ; Очистить буферный регистр таймера
MOV #1,@#177710 ; Пуск программируемого таймера
+
        MOV     #1,@#177710     ; Пуск программируемого таймера
173706$:MOV #23660,R0 ; R0 = адрес начала ОЗУ ПП пользователя
+
173706$:MOV     #23660,R0       ; R0 = адрес начала ОЗУ ПП пользователя
CLR (R0)+ ; Блок свободен
+
        CLR     (R0)+           ; Блок свободен
CLR (R0)+ ; Ссылка на предыдущий блок
+
        CLR     (R0)+           ; Ссылка на предыдущий блок
MOV #54104,@R0 ; Размер свободного блока
+
        MOV     #54104,@R0     ; Размер свободного блока
ADD (R0)+,R0 ; Переход к фиктивной области
+
        ADD     (R0)+,R0       ; Переход к фиктивной области
INC @R0 ; Признак занятой области
+
        INC     @R0             ; Признак занятой области
RETURN
+
        RETURN
 
; Подпрограмма очистки блока памяти
 
; Подпрограмма очистки блока памяти
173730$:CLR R0 ; Заполняемое значение (0)
+
173730$:CLR     R0             ; Заполняемое значение (0)
MOV (R5)+,R1 ; Адрес начала
+
        MOV     (R5)+,R1       ; Адрес начала
MOV (R5)+,R2 ; Размер в словах
+
        MOV     (R5)+,R2       ; Размер в словах
173736$:MOV R0,(R1)+ ; Цикл очистки
+
173736$:MOV     R0,(R1)+       ; Цикл очистки
SOB R2,173736$
+
        SOB     R2,173736$
RTS R5
+
        RTS     R5
 
; Подпрограмма установки векторов прерываний периферийных устройств
 
; Подпрограмма установки векторов прерываний периферийных устройств
173744$:MOV #174270$,@#30 ; Вектор прерывания команды EMT
+
173744$:MOV     #174270$,@#30   ; Вектор прерывания команды EMT
CLR @#32
+
        CLR     @#32
MOV #174334$,@#34 ; Вектор прерывания команды TRAP
+
        MOV     #174334$,@#34   ; Вектор прерывания команды TRAP
MOV #200,@#36
+
        MOV     #200,@#36
MOV #174612$,@#100 ; Вектор прерывания сетевого таймера
+
        MOV     #174612$,@#100 ; Вектор прерывания сетевого таймера
MOV #200,@#102
+
        MOV     #200,@#102
MOV #175754$,@#330 ; Вектор прерывания К1 (приемник)
+
        MOV     #175754$,@#330 ; Вектор прерывания К1 (приемник)
BIS #2,@#177066 ; Разрешить прерывания по К1 (приемник)
+
        BIS     #2,@#177066     ; Разрешить прерывания по К1 (приемник)
MOV #175762$,@#340 ; Вектор прерывания К2 (приемник)
+
        MOV     #175762$,@#340 ; Вектор прерывания К2 (приемник)
MOV #200,@#342
+
        MOV     #200,@#342
BIS #4,@#177066 ; Разрешить прерывания по К2 (приемник)
+
        BIS     #4,@#177066     ; Разрешить прерывания по К2 (приемник)
CLR @#23202 ; Счетчик принятых байтов по К2
+
        CLR     @#23202         ; Счетчик принятых байтов по К2
MOV #100/2,@#177010 ; Установить вектор прерывания сетевого
+
        MOV     #100/2,@#177010 ; Установить вектор прерывания сетевого
MOV #104,@#177014 ; таймера канала ЦП
+
        MOV     #104,@#177014   ; таймера канала ЦП
INC @#177010
+
        INC     @#177010
MOV #200,@#177014
+
        MOV     #200,@#177014
INC @#177010
+
        INC     @#177010
MOV #RTI,@#177014
+
        MOV     #RTI,@#177014
MOV #7777,@#7052
+
        MOV     #7777,@#7052
CALL 176422$ ; Инициализация программируемого таймера
+
        CALL   176422$         ; Инициализация программируемого таймера
MOV #176130$,@#314 ; Вект. прер. по команде RESET в канале ЦП
+
        MOV     #176130$,@#314 ; Вект. прер. по команде RESET в канале ЦП
MOV #200,@#316
+
        MOV     #200,@#316
INC @#7102 ; Индикатор вызова фиктивной подпрограммы
+
        INC     @#7102         ; Индикатор вызова фиктивной подпрограммы
MOV #174222$,@#7126$ ; Адрес фиктивной подпрограммы
+
        MOV     #174222$,@#7126 ; Адрес фиктивной подпрограммы
RETURN
+
        RETURN
  
 
;            ***  ОСНОВНОЙ  ЦИКЛ  ДИСПЕТЧЕРА  ПРОЦЕССОВ  ***
 
;            ***  ОСНОВНОЙ  ЦИКЛ  ДИСПЕТЧЕРА  ПРОЦЕССОВ  ***
  
174152$:MOV #2000,SP
+
174152$:MOV     #2000,SP
MOV #2,@#7042 ; Передача кодов клавиатуры К0
+
        MOV     #2,@#7042       ; Передача кодов клавиатуры К0
174164$:MOV #7060,R0 ; R0 = буфер флагов вызова
+
174164$:MOV     #7060,R0       ; R0 = буфер флагов вызова
174170$:TST (R0)+ ; Запрошен вызов
+
174170$:TST     (R0)+           ; Запрошен вызов
BEQ 174170$ ; Нет
+
        BEQ     174170$         ; Нет
MOV R0,@#7056 ; Сохранить адрес флага вызова + 2
+
        MOV     R0,@#7056       ; Сохранить адрес флага вызова + 2
MOV 22(R0),R1 ; R1 = адрес точки прерывания
+
        MOV     22(R0),R1       ; R1 = адрес точки прерывания
BNE 174214$ ; Было прерывание
+
        BNE     174214$         ; Было прерывание
CALL @<174232$-7062>(R0) ; Вызов по стандартному адресу
+
        CALL   @<174232$-7062>(R0) ; Вызов по стандартному адресу
BR 174164$ ; На начало цикла
+
        BR     174164$         ; На начало цикла
174214$:CLR 22(R0) ; Очистить адрес прерывания
+
174214$:CLR     22(R0)         ; Очистить адрес прерывания
JMP @R1 ; Переход по адресу прерывания
+
        JMP     @R1             ; Переход по адресу прерывания
 
; Фиктивная подпрограмма
 
; Фиктивная подпрограмма
174222$:MOV #174222$,@#7126 ; Установить точку прерывания фикт. п/п
+
174222$:MOV     #174222$,@#7126 ; Установить точку прерывания фикт. п/п
BR 174164$ ; На начало цикла
+
        BR     174164$         ; На начало цикла
 
; Адреса стандартных подпрограмм обработки событий :
 
; Адреса стандартных подпрограмм обработки событий :
 
;  обработка скэн-кодов клавиатуры, обработка данных К2, вывод символов на
 
;  обработка скэн-кодов клавиатуры, обработка данных К2, вывод символов на
 
;  экран, переключение курсора, меню УСТАНОВКА, меню ЗАГРУЗКА, вывод на
 
;  экран, переключение курсора, меню УСТАНОВКА, меню ЗАГРУЗКА, вывод на
 
;  принтер, запуск п/п пользователя, запуск теста
 
;  принтер, запуск п/п пользователя, запуск теста
174232$:.WORD 104306$,125030$,111144$,176056$,100040$,100742$,176076$
+
174232$:.WORD   104306$,125030$,111144$,176056$,100040$,100742$,176076$
.WORD 176116$,176460$
+
        .WORD   176116$,176460$
 
; Подпрограмма обработки команды TRAP 0
 
; Подпрограмма обработки команды TRAP 0
174254$:MOV @#7056,R0 ; R0 = адрес флага
+
174254$:MOV     @#7056,R0       ; R0 = адрес флага
MOV (SP)+,22(R0) ; Сохранить СК
+
        MOV     (SP)+,22(R0)   ; Сохранить СК
MTPS (SP)+ ; Установить ССП
+
        MTPS   (SP)+           ; Установить ССП
BR 174164$ ; На начало основного цикла
+
        BR     174164$         ; На начало основного цикла
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО КОМАНДЕ EMT ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО КОМАНДЕ EMT ***
174270$:MOV R5,-(SP) ; Сохранить регистры
+
174270$:MOV     R5,-(SP)       ; Сохранить регистры
MOV R4,-(SP)
+
        MOV     R4,-(SP)
MOV R3,-(SP)
+
        MOV     R3,-(SP)
MOV R2,-(SP)
+
        MOV     R2,-(SP)
MOV R1,-(SP)
+
        MOV     R1,-(SP)
MOV R0,-(SP)
+
        MOV     R0,-(SP)
MOV 14(SP),R5
+
        MOV     14(SP),R5
MOV -(R5),R5 ; R5 = код команды EMT
+
        MOV     -(R5),R5       ; R5 = код команды EMT
CALL @<160000$-EMT>(R5) ; Вызов соответствующей подпрограммы
+
        CALL   @<160000$-EMT>(R5) ; Вызов соответствующей подпрограммы
MOV (SP)+,R0 ; Восстановить регистры
+
        MOV     (SP)+,R0       ; Восстановить регистры
MOV (SP)+,R1
+
        MOV     (SP)+,R1
MOV (SP)+,R2
+
        MOV     (SP)+,R2
MOV (SP)+,R3
+
        MOV     (SP)+,R3
MOV (SP)+,R4
+
        MOV     (SP)+,R4
MOV (SP)+,R5
+
        MOV     (SP)+,R5
RTI
+
        RTI
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО КОМАНДЕ TRAP ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО КОМАНДЕ TRAP ***
174334$:MOV @SP,R0
+
174334$:MOV     @SP,R0
MOV -(R0),R0 ; R0 = код команды TRAP
+
        MOV     -(R0),R0       ; R0 = код команды TRAP
JMP @<160160$-TRAP>(R0) ; Переход на соответствующую подпрограмму
+
        JMP     @<160160$-TRAP>(R0) ; Переход на соответствующую подпрограмму
 
; Обработка прерываний сетевого таймера (скроллинг назад)
 
; Обработка прерываний сетевого таймера (скроллинг назад)
174344$:MOV R0,-(SP) ; Сохранить R0
+
174344$:MOV     R0,-(SP)       ; Сохранить R0
ADD @#7136,PC ; Рулон плавный/дискретный ?
+
        ADD     @#7136,PC       ; Рулон плавный/дискретный ?
BR 174476$ ; Рулон плавный
+
        BR     174476$         ; Рулон плавный
174354$:MOV R1,-(SP) ; Сохранить R1
+
174354$:MOV     R1,-(SP)       ; Сохранить R1
MOV @#23170,R1 ; R1 = число видеострок для скроллинга
+
        MOV     @#23170,R1     ; R1 = число видеострок для скроллинга
NEG R1 ; Перевод в положительное число
+
        NEG     R1             ; Перевод в положительное число
ASL R1 ; Умножение на 4
+
        ASL     R1             ; Умножение на 4
ASL R1
+
        ASL     R1
MOV @#2476,R0 ; R0 = адр.яч.информ. о перв. стр. экр.польз.
+
        MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
ADD #264.*4,R0 ; Плюс размер видимой части экрана
+
        ADD     #264.*4,R0     ; Плюс размер видимой части экрана
CMP R0,#4670 ; Достигли конца описания ?
+
        CMP     R0,#4670       ; Достигли конца описания ?
BLO 174424$ ; Нет
+
        BLO     174424$         ; Нет
BHI 174420$ ; Превысили
+
        BHI     174420$         ; Превысили
MOV #2500,@#4666 ; Посл. строка - первая в описании
+
        MOV     #2500,@#4666   ; Посл. строка - первая в описании
BR 174430$
+
        BR     174430$
174420$:SUB #286.*4,R0 ; R0 = R0 - общ. число видеострок экр. польз.
+
174420$:SUB     #286.*4,R0     ; R0 = R0 - общ. число видеострок экр. польз.
174424$:MOV R0,-2(R0) ; Поместить в область описания
+
174424$:MOV     R0,-2(R0)       ; Поместить в область описания
174430$:SUB R1,R0 ; Вычесть число видеострок для скроллинга
+
174430$:SUB     R1,R0           ; Вычесть число видеострок для скроллинга
CMP R0,#2500 ; Вышло за начало ?
+
        CMP     R0,#2500       ; Вышло за начало ?
BHI 174444$ ; Нет
+
        BHI     174444$         ; Нет
ADD #286.*4,R0 ; R0 = R0 + общ. число видеострок экр. польз.
+
        ADD     #286.*4,R0     ; R0 = R0 + общ. число видеострок экр. польз.
174444$:MOV #6742,-(R0) ; Адрес описания нижней инф. строки
+
174444$:MOV     #6742,-(R0)     ; Адрес описания нижней инф. строки
MOV @#2476,R0 ; R0 = адр.яч.информ. о перв. стр. экр.польз.
+
        MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
SUB R1,R0 ; Вычесть число видеострок для скроллинга
+
        SUB     R1,R0           ; Вычесть число видеострок для скроллинга
CMP R0,#2500 ; Вышли за начало ?
+
        CMP     R0,#2500       ; Вышли за начало ?
BHIS 174470$ ; Нет
+
        BHIS   174470$         ; Нет
ADD #286.*4,R0 ; R0 = R0 + общ. число видеострок экр. польз.
+
        ADD     #286.*4,R0     ; R0 = R0 + общ. число видеострок экр. польз.
174470$:MOV R0,@#2476 ; Адрес описания начала экр. пользователя
+
174470$:MOV     R0,@#2476       ; Адрес описания начала экр. пользователя
BR 174750$
+
        BR     174750$
174476$:MOV @#2476,R0 ; R0 = адр.яч.информ. о перв. стр. экр.польз.
+
174476$:MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
SUB #4,R0 ; R0 = R0 - 1 видеострока
+
        SUB     #4,R0           ; R0 = R0 - 1 видеострока
CMP R0,#2500 ; Вышли за начало ?
+
        CMP     R0,#2500       ; Вышли за начало ?
BHIS 174520$ ; Нет
+
        BHIS   174520$         ; Нет
ADD #286.*4,R0 ; R0 = R0 + общ. число видеострок экр. польз.
+
        ADD     #286.*4,R0     ; R0 = R0 + общ. число видеострок экр. польз.
174520$:MOV R0,@#2476 ; Адрес описания начала экр. пользователя
+
174520$:MOV     R0,@#2476       ; Адрес описания начала экр. пользователя
ADD #265.*4,R0 ; R0 = R0 + 265 строк
+
        ADD     #265.*4,R0     ; R0 = R0 + 265 строк
CMP R0,#4670 ; Вышли за конец
+
        CMP     R0,#4670       ; Вышли за конец
BLO 174554$ ; Нет
+
        BLO     174554$         ; Нет
BNE 174550$ ; Да
+
        BNE     174550$         ; Да
MOV #2500,@#4666 ; Посл. строка - первая в описании
+
        MOV     #2500,@#4666   ; Посл. строка - первая в описании
BR 174560$
+
        BR     174560$
174550$:SUB #286.*4,R0 ; R0 = R0 - общ. число видеострок экр. польз.
+
174550$:SUB     #286.*4,R0     ; R0 = R0 - общ. число видеострок экр. польз.
174554$:MOV R0,-2(R0) ; Поместить в область описания
+
174554$:MOV     R0,-2(R0)       ; Поместить в область описания
174560$:SUB #4,R0 ; R0 = R0 - 1 видеострока
+
174560$:SUB     #4,R0           ; R0 = R0 - 1 видеострока
CMP R0,#2500 ; На начале ?
+
        CMP     R0,#2500       ; На начале ?
BNE 174576$
+
        BNE     174576$
ADD #286.*4,R0 ; R0 = R0 + общ. число видеострок экр. польз.
+
        ADD     #286.*4,R0     ; R0 = R0 + общ. число видеострок экр. польз.
174576$:MOV #6742,-(R0) ; Адрес описания нижней инф. строки
+
174576$:MOV     #6742,-(R0)     ; Адрес описания нижней инф. строки
MOV (SP)+,R0 ; Восстановить R0
+
        MOV     (SP)+,R0       ; Восстановить R0
INC @#23170 ; Уменьшить число видеострок для скроллинга
+
        INC     @#23170         ; Уменьшить число видеострок для скроллинга
BR 175054$
+
        BR     175054$
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ СЕТЕВОГО ТАЙМЕРА ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ СЕТЕВОГО ТАЙМЕРА ***
174612$:TST @#23170 ; Количество видеострок для скроллинга
+
174612$:TST     @#23170         ; Количество видеострок для скроллинга
BEQ 175072$ ; Нет
+
        BEQ     175072$         ; Нет
BMI 174344$ ; Скроллинг назад
+
        BMI     174344$         ; Скроллинг назад
MOV R0,-(SP) ; Сохранить R0
+
        MOV     R0,-(SP)       ; Сохранить R0
ADD @#7136,PC ; Рулон плавный/дискретный ?
+
        ADD     @#7136,PC       ; Рулон плавный/дискретный ?
BR 174762$ ; Рулон плавный
+
        BR     174762$         ; Рулон плавный
174632$:MOV R1,-(SP) ; Сохранить R1
+
174632$:MOV     R1,-(SP)       ; Сохранить R1
MOV @#23170,R1 ; R1 = число видеострок для скроллинга
+
        MOV     @#23170,R1     ; R1 = число видеострок для скроллинга
ASL R1 ; Умножение на 4
+
        ASL     R1             ; Умножение на 4
ASL R1
+
        ASL     R1
MOV @#2476,R0 ; R0 = адр.яч.информ. о перв. стр. экр.польз.
+
        MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
ADD #264.*4,R0 ; Плюс размер видимой части экрана
+
        ADD     #264.*4,R0     ; Плюс размер видимой части экрана
CMP R0,#4670 ; Достигли конца описания ?
+
        CMP     R0,#4670       ; Достигли конца описания ?
BLO 174700$ ; Нет
+
        BLO     174700$         ; Нет
BHI 174674$ ; Превысили
+
        BHI     174674$         ; Превысили
MOV #2500,@#4666 ; Посл. строка - первая в описании
+
        MOV     #2500,@#4666   ; Посл. строка - первая в описании
BR 174704$
+
        BR     174704$
174674$:SUB #286.*4,R0 ; R0 = R0 - общ. число видеострок экр. польз.
+
174674$:SUB     #286.*4,R0     ; R0 = R0 - общ. число видеострок экр. польз.
174700$:MOV R0,-2(R0) ; Поместить в область описания
+
174700$:MOV     R0,-2(R0)       ; Поместить в область описания
174704$:ADD R1,R0 ; Прибавить число видеострок для скроллинга
+
174704$:ADD     R1,R0           ; Прибавить число видеострок для скроллинга
CMP R0,#4670 ; Вышли за конец ?
+
        CMP     R0,#4670       ; Вышли за конец ?
BLOS 174720$ ; Нет
+
        BLOS   174720$         ; Нет
SUB #286.*4,R0 ; R0 = R0 - общ. число видеострок экр. польз.
+
        SUB     #286.*4,R0     ; R0 = R0 - общ. число видеострок экр. польз.
174720$:MOV #6742,-(R0) ; Адрес описания нижней инф. строки
+
174720$:MOV     #6742,-(R0)     ; Адрес описания нижней инф. строки
MOV @#2476,R0 ; R0 = адр.яч.информ. о перв. стр. экр.польз.
+
        MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
ADD R1,R0 ; Прибавить число видеострок для скроллинга
+
        ADD     R1,R0           ; Прибавить число видеострок для скроллинга
CMP R0,#4670 ; Вышли за конец ?
+
        CMP     R0,#4670       ; Вышли за конец ?
BLO 174744$ ; Нет
+
        BLO     174744$         ; Нет
SUB #286.*4,R0 ; R0 = R0 - общ. число видеострок экр. польз.
+
        SUB     #286.*4,R0     ; R0 = R0 - общ. число видеострок экр. польз.
174744$:MOV R0,@#2476 ; Адрес описания начала экр. пользователя
+
174744$:MOV     R0,@#2476       ; Адрес описания начала экр. пользователя
174750$:MOV (SP)+,R1 ; Восстановить регистры
+
174750$:MOV     (SP)+,R1       ; Восстановить регистры
MOV (SP)+,R0
+
        MOV     (SP)+,R0
CLR @#23170 ; Число строк для скроллинга = 0
+
        CLR     @#23170         ; Число строк для скроллинга = 0
BR 175056$
+
        BR     175056$
174762$:MOV @#2476,R0 ; R0 = адр.яч.информ. о перв. стр. экр.польз.
+
174762$:MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
BIC #1,2(R0) ; Сбросить бит переключения курсора
+
        BIC     #1,2(R0)       ; Сбросить бит переключения курсора
MOV 2(R0),@#2476 ; Сдвиг на 1 строку вверх
+
        MOV     2(R0),@#2476   ; Сдвиг на 1 строку вверх
ADD #264.*4,R0 ; R0 = R0 + 264 видеостроки
+
        ADD     #264.*4,R0     ; R0 = R0 + 264 видеостроки
CMP R0,#4670 ; Вышли за конец ?
+
        CMP     R0,#4670       ; Вышли за конец ?
BLO 175034$ ; Нет
+
        BLO     175034$         ; Нет
BNE 175030$ ; Да
+
        BNE     175030$         ; Да
MOV #2500,R0 ; R0 = первый элемент описания
+
        MOV     #2500,R0       ; R0 = первый элемент описания
MOV R0,@#4666 ; Посл. строка - первая в описании
+
        MOV     R0,@#4666       ; Посл. строка - первая в описании
BR 175040$
+
        BR     175040$
175030$:SUB #286.*4,R0 ; R0 = R0 - общ. число видеострок экр. польз.
+
175030$:SUB     #286.*4,R0     ; R0 = R0 - общ. число видеострок экр. польз.
175034$:MOV R0,-2(R0) ; Поместить в область описания
+
175034$:MOV     R0,-2(R0)       ; Поместить в область описания
175040$:MOV #6742,2(R0) ; Адрес описания нижней инф. строки
+
175040$:MOV     #6742,2(R0)     ; Адрес описания нижней инф. строки
MOV (SP)+,R0 ; Восстановить R0
+
        MOV     (SP)+,R0       ; Восстановить R0
DEC @#23170 ; Уменьшить число видеострок для скроллинга
+
        DEC     @#23170         ; Уменьшить число видеострок для скроллинга
175054$:BNE 175306$ ; Еще остались
+
175054$:BNE     175306$         ; Еще остались
175056$:MOV @#22750,@#23164 ; Разрешение/запрет использования курсора
+
175056$:MOV     @#22750,@#23164 ; Разрешение/запрет использования курсора
INC @#7066 ; Уст.флаг вызова п/п перекл. курсора
+
        INC     @#7066         ; Уст.флаг вызова п/п перекл. курсора
BR 175306$
+
        BR     175306$
175072$:ADD @#7134,PC ; Перекл. курсор/не изм. курсор/выдержка вр.
+
175072$:ADD     @#7134,PC       ; Перекл. курсор/не изм. курсор/выдержка вр.
BR 175150$ ; Перекл. курсор, поменять его координаты
+
        BR     175150$         ; Перекл. курсор, поменять его координаты
175102$:BR 175306$ ; Не изм. состояния курсора
+
175102$:BR     175306$         ; Не изм. состояния курсора
175104$:DECB @#23166 ; Уменьшить счетчик выдержки времени
+
175104$:DECB   @#23166         ; Уменьшить счетчик выдержки времени
BGT 175306$ ; Время еще не окнчилось
+
        BGT     175306$         ; Время еще не окнчилось
BEQ 175120$ ; Время закончилось
+
        BEQ     175120$         ; Время закончилось
MOV #110060,@#23162 ; Загрузить временной интервал
+
        MOV     #110060,@#23162 ; Загрузить временной интервал
175120$:MOV @#23162,@#23166 ; Загрузить значение в счетчик
+
175120$:MOV     @#23162,@#23166 ; Загрузить значение в счетчик
SWAB @#23162 ; Поменять параметры выдержки(горит/не горит)
+
        SWAB   @#23162         ; Поменять параметры выдержки(горит/не горит)
BMI 175300$ ; Включить курсор
+
        BMI     175300$         ; Включить курсор
ASL @#23166
+
        ASL     @#23166
175140$:MOVB #177,@23160$ ; Убрать курсор с экрана
+
175140$:MOVB   #177,@23160     ; Убрать курсор с экрана
BR 175306$
+
        BR     175306$
175150$:MOV R0,-(SP) ; Сохранить регистры
+
175150$:MOV     R0,-(SP)       ; Сохранить регистры
MOV R1,-(SP)
+
        MOV     R1,-(SP)
MOV R5,-(SP)
+
        MOV     R5,-(SP)
MOV @#23150,R5 ; R5 = адрес текущей таблицы видеопараметров
+
        MOV     @#23150,R5     ; R5 = адрес текущей таблицы видеопараметров
MOV @R5,R0 ; R0 = текущий адрес видео
+
        MOV     @R5,R0         ; R0 = текущий адрес видео
SUB @32(R5),R0 ; R0 = тек.адрес - адр.нач.строки = позиция X
+
        SUB     @32(R5),R0     ; R0 = тек.адрес - адр.нач.строки = позиция X
MOV 66(R5),R1 ; R1 = режим экрана (80/40/20/10)
+
        MOV     66(R5),R1       ; R1 = режим экрана (80/40/20/10)
BR 175200$
+
        BR     175200$
175176$:ASL R0 ; Приведение координат в соотв. с режимом
+
175176$:ASL     R0             ; Приведение координат в соотв. с режимом
175200$:ROR R1
+
175200$:ROR     R1
BCC 175176$
+
        BCC     175176$
MOV R0,@#23156 ; Сохранить координату X
+
        MOV     R0,@#23156     ; Сохранить координату X
MOV 60(R5),R1 ; R1 = адрес списка строк, где расп. курсор
+
        MOV     60(R5),R1       ; R1 = адрес списка строк, где расп. курсор
BIC #1,6(R1) ; Выключить курсор
+
        BIC     #1,6(R1)       ; Выключить курсор
BIC #1,52(R1)
+
        BIC     #1,52(R1)
MOV 32(R5),60(R5) ; Новые координаты курсора
+
        MOV     32(R5),60(R5)   ; Новые координаты курсора
MOV 60(R5),R1
+
        MOV     60(R5),R1
BIS #1,6(R1) ; Включить курсор
+
        BIS     #1,6(R1)       ; Включить курсор
BIS #1,52(R1)
+
        BIS     #1,52(R1)
MOV #4,@#7134 ; Режим мигания курсора
+
        MOV     #4,@#7134       ; Режим мигания курсора
MOV (SP)+,R5 ; Восстановить регистры
+
        MOV     (SP)+,R5       ; Восстановить регистры
MOV (SP)+,R1
+
        MOV     (SP)+,R1
MOV (SP)+,R0
+
        MOV     (SP)+,R0
CLR @#23166 ; Сброс временных параметров курсора
+
        CLR     @#23166         ; Сброс временных параметров курсора
BR 175140$
+
        BR     175140$
175300$:MOVB @#23156,@23160$ ; Поместить курсор в позицию X
+
175300$:MOVB   @#23156,@23160 ; Поместить курсор в позицию X
175306$:TST @#7130 ; Двигатель НГМД вращается ?
+
175306$:TST     @#7130         ; Двигатель НГМД вращается ?
BEQ 175326$ ; Нет
+
        BEQ     175326$         ; Нет
DEC @#7130 ; Уменьшить счетчик вращения двигателя
+
        DEC     @#7130         ; Уменьшить счетчик вращения двигателя
BNE 175326$ ; Еще не конец
+
        BNE     175326$         ; Еще не конец
CALL @7132$ ; Вызов п/п выключения двигателя НГМД
+
        CALL   @7132           ; Вызов п/п выключения двигателя НГМД
175326$:DEC @#7046 ; Уменьшить сч. длительности звукового сигн.
+
175326$:DEC     @#7046         ; Уменьшить сч. длительности звукового сигн.
BNE 175342$ ; Еще не конец
+
        BNE     175342$         ; Еще не конец
BIC #17600,@#177716 ; Выключить звуковой сигнал
+
        BIC     #17600,@#177716 ; Выключить звуковой сигнал
175342$:TSTB @#7227 ; Есть данные для автоповтора клавиш
+
175342$:TSTB   @#7227         ; Есть данные для автоповтора клавиш
BEQ 175376$ ; Да
+
        BEQ     175376$         ; Да
DECB @#7227 ; Уменьшить сч. автоповтора
+
        DECB   @#7227         ; Уменьшить сч. автоповтора
BNE 175376$ ; Еще не конец
+
        BNE     175376$         ; Еще не конец
INC @#7060 ; Увеличить флаг вызова п/п обр. соб. клав.
+
        INC     @#7060         ; Увеличить флаг вызова п/п обр. соб. клав.
BIS #200,@#177716 ; Подать полож.импульс на динамик (щелчок)
+
        BIS     #200,@#177716   ; Подать полож.импульс на динамик (щелчок)
MOV #1,@#7046 ; Длительность импульса
+
        MOV     #1,@#7046       ; Длительность импульса
 
175376$:RTI
 
175376$:RTI
 
; Подпрограмма заполнения ячеек информацией о длительности вращения  
 
; Подпрограмма заполнения ячеек информацией о длительности вращения  
 
;  двигателя НГМД и адресе п/п выключения двигателя
 
;  двигателя НГМД и адресе п/п выключения двигателя
175400$:MOV (R5)+,@#7130 ; Длительность вращения двигатель НГМД
+
175400$:MOV     (R5)+,@#7130   ; Длительность вращения двигатель НГМД
MOV (R5)+,@#7132 ; Адрес п/п выключения двигателя НГМД
+
        MOV     (R5)+,@#7132   ; Адрес п/п выключения двигателя НГМД
RTS R5
+
        RTS     R5
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ КЛАВИАТУРЫ ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ КЛАВИАТУРЫ ***
175412$:MOVB @#177702,@7200$ ; Занести скэн-код клавиши в буфер
+
175412$:MOVB   @#177702,@7200 ; Занести скэн-код клавиши в буфер
BMI 175436$ ; Клавиша отжата
+
        BMI     175436$         ; Клавиша отжата
BIS #200,@#177716 ; Подать полож.импульс на динамик (щелчок)
+
        BIS     #200,@#177716   ; Подать полож.импульс на динамик (щелчок)
MOV #2,@#7046 ; Длительность импульса
+
        MOV     #2,@#7046       ; Длительность импульса
175436$:CMPB @7200$,#4 ; Нажата клавиша <СТОП> ?
+
175436$:CMPB   @7200,#4       ; Нажата клавиша <СТОП> ?
BEQ 175466$ ; Да
+
        BEQ     175466$         ; Да
INC @#7200 ; Передвинуть указатель на след. позицию
+
        INC     @#7200         ; Передвинуть указатель на след. позицию
BIC #10,@#7200
+
        BIC     #10,@#7200
INC @#7060 ; Увеличить флаг вызова п/п обр. соб. клав.
+
        INC     @#7060         ; Увеличить флаг вызова п/п обр. соб. клав.
RTI
+
        RTI
175466$:MOV R0,-(SP) ; Сохранить регистры
+
175466$:MOV     R0,-(SP)       ; Сохранить регистры
MOV R1,-(SP)
+
        MOV     R1,-(SP)
MOV R2,-(SP)
+
        MOV     R2,-(SP)
CALL 104054$ ; Очистка буферов клавиатуры
+
        CALL   104054$         ; Очистка буферов клавиатуры
MOV (SP)+,R2 ; Восстановить регистры
+
        MOV     (SP)+,R2       ; Восстановить регистры
MOV (SP)+,R1
+
        MOV     (SP)+,R1
MOV (SP)+,R0
+
        MOV     (SP)+,R0
BIS #20,@#177716 ; Установить сигнал HALT в ЦП
+
        BIS     #20,@#177716   ; Установить сигнал HALT в ЦП
RTI
+
        RTI
 
; Подпрограмма исполнения команды TRAP 2
 
; Подпрограмма исполнения команды TRAP 2
175516$:CLR @#7230 ; Запрет вызова TRAP 2 п/п обсл. клав.
+
175516$:CLR     @#7230         ; Запрет вызова TRAP 2 п/п обсл. клав.
ADD @#7042,PC ; Передача данных по К0/в R0
+
        ADD     @#7042,PC       ; Передача данных по К0/в R0
BR 175540$ ; Передача в R0
+
        BR     175540$         ; Передача в R0
175530$:BIT #10,@#177076 ; Готовность передатчика К0
+
175530$:BIT     #10,@#177076   ; Готовность передатчика К0
BEQ 175646$ ; Не готов
+
        BEQ     175646$         ; Не готов
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПЕРЕДАТЧИКА КАНАЛА 0(КЛАВИАТУРА) ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПЕРЕДАТЧИКА КАНАЛА 0(КЛАВИАТУРА) ***
175540$:MOV R5,-(SP) ; Сохранить R5
+
175540$:MOV     R5,-(SP)       ; Сохранить R5
MOV @#7206,R5 ; R5 = указатель для чтения с буфера ASCII
+
        MOV     @#7206,R5       ; R5 = указатель для чтения с буфера ASCII
175546$:CMP R5,@#7210 ; Буфер пуст ?
+
175546$:CMP     R5,@#7210       ; Буфер пуст ?
BEQ 175650$ ; Да
+
        BEQ     175650$         ; Да
TSTB 1(R5) ; Данное слово содержит одиночный код ?
+
        TSTB   1(R5)           ; Данное слово содержит одиночный код ?
BEQ 175620$ ; Да
+
        BEQ     175620$         ; Да
CLR -(SP)
+
        CLR     -(SP)
MOVB @(R5),@SP ; Поместить в стек очередной символ из строки
+
        MOVB   @(R5),@SP       ; Поместить в стек очередной символ из строки
BNE 175606$ ; Еще не конец строки символов
+
        BNE     175606$         ; Еще не конец строки символов
CMP (R5)+,(SP)+ ; Указатель на след. позицию
+
        CMP     (R5)+,(SP)+     ; Указатель на след. позицию
BIC #40,R5
+
        BIC     #40,R5
MOV R5,@#7206
+
        MOV     R5,@#7206
BR 175546$
+
        BR     175546$
175606$:INC @R5 ; К следующему символу в строке
+
175606$:INC     @R5             ; К следующему символу в строке
MOV #177,R5
+
        MOV     #177,R5
175614$:SOB R5,175614$ ; Задержка
+
175614$:SOB     R5,175614$     ; Задержка
BR 175632$
+
        BR     175632$
175620$:MOV (R5)+,-(SP) ; Поместить символ в стек
+
175620$:MOV     (R5)+,-(SP)     ; Поместить символ в стек
BIC #40,R5
+
        BIC     #40,R5
MOV R5,@#7206
+
        MOV     R5,@#7206
175632$:ADD @#7042,PC ; Передача данных по К0/в R0
+
175632$:ADD     @#7042,PC       ; Передача данных по К0/в R0
BR 175660$ ; Передача в R0
+
        BR     175660$         ; Передача в R0
175640$:MOV (SP)+,@#177070 ; Передача символа в К0
+
175640$:MOV     (SP)+,@#177070 ; Передача символа в К0
175644$:MOV (SP)+,R5 ; Восстановить R5
+
175644$:MOV     (SP)+,R5       ; Восстановить R5
 
175646$:RTI
 
175646$:RTI
175650$:MOV #2,@#7230 ; Разрешение вызова TRAP 2 п/п обсл. клав.
+
175650$:MOV     #2,@#7230       ; Разрешение вызова TRAP 2 п/п обсл. клав.
BR 175644$
+
        BR     175644$
175660$:MOV (SP)+,R0 ; Передача символа в R0
+
175660$:MOV     (SP)+,R0       ; Передача символа в R0
BR 175644$
+
        BR     175644$
 
; Подпрограмма исполнения команды TRAP 4
 
; Подпрограмма исполнения команды TRAP 4
175664$:CLR @#22546 ; Запрет вызова TRAP 4 п/п обсл. терминала
+
175664$:CLR     @#22546         ; Запрет вызова TRAP 4 п/п обсл. терминала
BIT #10,@#177066 ; Готовность приемника К0
+
        BIT     #10,@#177066   ; Готовность приемника К0
BEQ 175742$ ; Не готов
+
        BEQ     175742$         ; Не готов
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 0(ТЕРМИНАЛ) ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 0(ТЕРМИНАЛ) ***
175700$:ADD @#7042,PC ; Передача данных по К0/в R0
+
175700$:ADD     @#7042,PC       ; Передача данных по К0/в R0
BR 175752$ ; Передача в R0
+
        BR     175752$         ; Передача в R0
175706$:CMP @#7064,#177 ; Буфер заполнен полностью ?
+
175706$:CMP     @#7064,#177     ; Буфер заполнен полностью ?
BEQ 175744$ ; Да
+
        BEQ     175744$         ; Да
MOVB @#177060,@22544$ ; Занести символ в буфер
+
        MOVB   @#177060,@22544 ; Занести символ в буфер
INC @#22544 ; Подкорректировать указатель буфера
+
        INC     @#22544         ; Подкорректировать указатель буфера
BIC #200,@#22544
+
        BIC     #200,@#22544
INC @#7064 ; Увеличить флаг вызова п/п обсл. терм.
+
        INC     @#7064         ; Увеличить флаг вызова п/п обсл. терм.
 
175742$:RTI
 
175742$:RTI
175744$:MOV #2,@#22546 ; Разрешение выз. TRAP 4 п/п обсл. терминала
+
175744$:MOV     #2,@#22546     ; Разрешение выз. TRAP 4 п/п обсл. терминала
 
175752$:RTI
 
175752$:RTI
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 1(ПРИНТЕР) ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 1(ПРИНТЕР) ***
175754$:INC @#7074 ; Уст. флаг вызова п/п обсл. принтера
+
175754$:INC     @#7074         ; Уст. флаг вызова п/п обсл. принтера
RTI
+
        RTI
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 2 ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 2 ***
175762$:MOV R0,-(SP) ; Сохранить R0
+
175762$:MOV     R0,-(SP)       ; Сохранить R0
MOV @#23202,R0 ; R0 = счетчик принятых байтов
+
        MOV     @#23202,R0     ; R0 = счетчик принятых байтов
BMI 176046$ ; В состоянии инициализации
+
        BMI     176046$         ; В состоянии инициализации
CMP R0,#2 ; Адрес МП передан
+
        CMP     R0,#2           ; Адрес МП передан
BHIS 176016$ ; Да
+
        BHIS   176016$         ; Да
MOVB @#177064,23200(R0) ; Передача данных в буфер (адрес МП)
+
        MOVB   @#177064,23200(R0) ; Передача данных в буфер (адрес МП)
176006$:INC @#23202 ; Увеличить счетчик принятых байтов
+
176006$:INC     @#23202         ; Увеличить счетчик принятых байтов
176012$:MOV (SP)+,R0 ; Восстановить R0
+
176012$:MOV     (SP)+,R0       ; Восстановить R0
RTI
+
        RTI
176016$:BNE 176034$ ; Принято 3 байта
+
176016$:BNE     176034$         ; Принято 3 байта
TSTB @#177064 ; 3-й байт равен нулю ?
+
        TSTB   @#177064       ; 3-й байт равен нулю ?
BNE 176006$ ; Нет
+
        BNE     176006$         ; Нет
COM @#23202 ; Инвертировать счетчик (инициализация канала)
+
        COM     @#23202         ; Инвертировать счетчик (инициализация канала)
BR 176012$
+
        BR     176012$
176034$:INC @#7062 ; Установить флаг вызова п/п обсл. К2
+
176034$:INC     @#7062         ; Установить флаг вызова п/п обсл. К2
176040$:CLR @#23202 ; Очистить счетчик
+
176040$:CLR     @#23202         ; Очистить счетчик
BR 176012$
+
        BR     176012$
176046$:TSTB @#177064 ; Принятый байт равен нулю ?
+
176046$:TSTB   @#177064       ; Принятый байт равен нулю ?
BEQ 176012$ ; Да
+
        BEQ     176012$         ; Да
BR 176040$
+
        BR     176040$
 
; Подпрограмма переключения режима курсора
 
; Подпрограмма переключения режима курсора
176056$:CLR @#7066 ; Очистка флага вызова п/п
+
176056$:CLR     @#7066         ; Очистка флага вызова п/п
ADD @#23164,PC ; Разрешение / запрет использования курсора
+
        ADD     @#23164,PC     ; Разрешение / запрет использования курсора
RETURN ; Запрет использования курсора
+
        RETURN                 ; Запрет использования курсора
176070$:CLR @#7134 ; Поменять позицию курсора и включить его
+
176070$:CLR     @#7134         ; Поменять позицию курсора и включить его
RETURN
+
        RETURN
 
; Подпрограмма печати символа на принтере, переданного по К1
 
; Подпрограмма печати символа на принтере, переданного по К1
176076$:CLR @#7074 ; Очистить флаг вызова п/п
+
176076$:CLR     @#7074         ; Очистить флаг вызова п/п
MOV @#177062,-(SP) ; Поместить символ в стек
+
        MOV     @#177062,-(SP) ; Поместить символ в стек
CALL 135722$ ; Печать символа на принтере
+
        CALL   135722$         ; Печать символа на принтере
TST (SP)+
+
        TST     (SP)+
RETURN
+
        RETURN
 
; Подпрограмма вызова процедуры пользователя
 
; Подпрограмма вызова процедуры пользователя
176116$:CALL @7140$ ; Вызов процедуры пользователя
+
176116$:CALL   @7140           ; Вызов процедуры пользователя
CLR @#7076 ; Очистить флаг вызова п/п
+
        CLR     @#7076         ; Очистить флаг вызова п/п
RETURN
+
        RETURN
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО ПОЯВ. НА КАНАЛЕ ЦП СИГНАЛА RESET ***
 
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО ПОЯВ. НА КАНАЛЕ ЦП СИГНАЛА RESET ***
 
176130$:RTI
 
176130$:RTI
 
; Подпрограмма запроса блока памяти
 
; Подпрограмма запроса блока памяти
176132$:MOV R0,R1 ; R1 = размер запрашиваемого блока
+
176132$:MOV     R0,R1           ; R1 = размер запрашиваемого блока
BMI 176142$ ; Найти максимальный блок
+
        BMI     176142$         ; Найти максимальный блок
ROR R1 ; Приведение к четному адресу
+
        ROR     R1             ; Приведение к четному адресу
ADC R0
+
        ADC     R0
176142$:MOV R2,-(SP) ; Сохранить R2
+
176142$:MOV     R2,-(SP)       ; Сохранить R2
CLR R2 ; R2 = адрес найденного блока
+
        CLR     R2             ; R2 = адрес найденного блока
CLR -(SP) ; Размер найденного блока
+
        CLR     -(SP)           ; Размер найденного блока
176150$:MOV #23660,R1 ; R1 = адрес начала ОЗУ пользователя
+
176150$:MOV     #23660,R1       ; R1 = адрес начала ОЗУ пользователя
176154$:TST (R1)+ ; Блок занят ?
+
176154$:TST     (R1)+           ; Блок занят ?
BEQ 176176$ ; Нет
+
        BEQ     176176$         ; Нет
TST (R1)+
+
        TST     (R1)+
176162$:ADD (R1)+,R1 ; Переход к следующему блоку
+
176162$:ADD     (R1)+,R1       ; Переход к следующему блоку
BPL 176154$ ; Еще не конец ОЗУ
+
        BPL     176154$         ; Еще не конец ОЗУ
TST R2 ; Найден свободный блок ?
+
        TST     R2             ; Найден свободный блок ?
BNE 176150$ ; Да
+
        BNE     176150$         ; Да
CLR R0 ; Нет свободной памяти
+
        CLR     R0             ; Нет свободной памяти
BR 176272$
+
        BR     176272$
176176$:TST (R1)+
+
176176$:TST     (R1)+
CMP R0,@R1 ; Размер блока равен или больше запраш. ?
+
        CMP     R0,@R1         ; Размер блока равен или больше запраш. ?
BLOS 176226$ ; Да
+
        BLOS   176226$         ; Да
CMP R1,R2 ; Это найденный максимальный блок
+
        CMP     R1,R2           ; Это найденный максимальный блок
BEQ 176222$ ; Да
+
        BEQ     176222$         ; Да
CMP @R1,@SP ; Меньше запраш. размера ?
+
        CMP     @R1,@SP         ; Меньше запраш. размера ?
BLOS 176162$ ; Да
+
        BLOS   176162$         ; Да
MOV R1,R2 ; R2 = адрес найденного макс. блока
+
        MOV     R1,R2           ; R2 = адрес найденного макс. блока
MOV @R1,@SP ; Сохранить размер блока
+
        MOV     @R1,@SP         ; Сохранить размер блока
BR 176162$
+
        BR     176162$
176222$:MOV @SP,R0 ; R0 = размер найденного макс. блока
+
176222$:MOV     @SP,R0         ; R0 = размер найденного макс. блока
BR 176232$
+
        BR     176232$
176226$:INC -4(R1) ; Пометить блок, как занятый
+
176226$:INC     -4(R1)         ; Пометить блок, как занятый
176232$:MOV (R1)+,R2 ; R2 = размер блока
+
176232$:MOV     (R1)+,R2       ; R2 = размер блока
SUB #6,R2 ; Отнять размер заголовка
+
        SUB     #6,R2           ; Отнять размер заголовка
CMP R0,R2 ; Запраш. размер больше реального ?
+
        CMP     R0,R2           ; Запраш. размер больше реального ?
BHIS 176272$ ; Да
+
        BHIS   176272$         ; Да
MOV R1,R2
+
        MOV     R1,R2
ADD R0,R2 ; R2 = адрес следующего блока
+
        ADD     R0,R2           ; R2 = адрес следующего блока
CLR (R2)+ ; Пометить блок, как свободный
+
        CLR     (R2)+           ; Пометить блок, как свободный
MOV R1,@R2
+
        MOV     R1,@R2
SUB #6,(R2)+ ; Ссылка на предыдущий блок
+
        SUB     #6,(R2)+       ; Ссылка на предыдущий блок
MOV -(R1),@R2 ; Вычисление размера блока
+
        MOV     -(R1),@R2       ; Вычисление размера блока
SUB R0,@R2
+
        SUB     R0,@R2
SUB #6,@R2
+
        SUB     #6,@R2
MOV R0,(R1)+ ; Размер выделенного блока
+
        MOV     R0,(R1)+       ; Размер выделенного блока
176272$:TST (SP)+
+
176272$:TST     (SP)+
MOV (SP)+,R2 ; Восстановить R2
+
        MOV     (SP)+,R2       ; Восстановить R2
RETURN
+
        RETURN
 
; Подпрограмма освобождения блока памяти
 
; Подпрограмма освобождения блока памяти
176300$:TST R1 ; Освободить блок или всю память ?
+
176300$:TST     R1             ; Освободить блок или всю память ?
BPL 176310$ ; Освободить блок
+
        BPL     176310$         ; Освободить блок
JMP 173706$ ; Освободить всю память
+
        JMP     173706$         ; Освободить всю память
176310$:MOV #23660,R0 ; R0 = адрес начала ОЗУ пользователя
+
176310$:MOV     #23660,R0       ; R0 = адрес начала ОЗУ пользователя
176314$:ADD #6,R0 ; Плюс размер заголовка
+
176314$:ADD     #6,R0           ; Плюс размер заголовка
BMI 176374$ ; Достигнут конец ОЗУ
+
        BMI     176374$         ; Достигнут конец ОЗУ
CMP R0,R1 ; Адрес освоб. блока равен текущему
+
        CMP     R0,R1           ; Адрес освоб. блока равен текущему
BEQ 176342$ ; Да
+
        BEQ     176342$         ; Да
ADD -2(R0),R0 ; Переход к следующему блоку
+
        ADD     -2(R0),R0       ; Переход к следующему блоку
BR 176314$
+
        BR     176314$
176334$:MOV @R1,R1 ; R1 = адрес предыдущего блока
+
176334$:MOV     @R1,R1         ; R1 = адрес предыдущего блока
ADD #6,R1 ; Плюс размер заголовка
+
        ADD     #6,R1           ; Плюс размер заголовка
176342$:CLR -6(R1) ; Пометить блок, как свободный
+
176342$:CLR     -6(R1)         ; Пометить блок, как свободный
TST -(R1)
+
        TST     -(R1)
MOV R1,R0 ; R0 = адрес блока (поле размера)
+
        MOV     R1,R0           ; R0 = адрес блока (поле размера)
ADD (R0)+,R0 ; Переход к следующему блоку
+
        ADD     (R0)+,R0       ; Переход к следующему блоку
TST @R0 ; Блок занят ?
+
        TST     @R0             ; Блок занят ?
BNE 176370$ ; Да
+
        BNE     176370$         ; Да
ADD 4(R0),@R1 ; Прибавить размер к предыд. (слияние)
+
        ADD     4(R0),@R1       ; Прибавить размер к предыд. (слияние)
ADD #6,@R1 ; Плюс размер заголовка
+
        ADD     #6,@R1         ; Плюс размер заголовка
176370$:TST @-(R1) ; Блок выше свободный ?
+
176370$:TST     @-(R1)         ; Блок выше свободный ?
BEQ 176334$ ; Да
+
        BEQ     176334$         ; Да
 
176374$:RETURN
 
176374$:RETURN
 
; Подпрограмма резервирования программируемого таймера за процессом
 
; Подпрограмма резервирования программируемого таймера за процессом
176376$:TST @#7050 ; Программируемый таймер занят ?
+
176376$:TST     @#7050         ; Программируемый таймер занят ?
BEQ 176416$ ; Да
+
        BEQ     176416$         ; Да
CLR @#177710 ; Останов таймера
+
        CLR     @#177710       ; Останов таймера
CLR @#7050 ; Таймер занят
+
        CLR     @#7050         ; Таймер занят
RETURN
+
        RETURN
176416$:SEC ; Признак занятости таймера
+
176416$:SEC                     ; Признак занятости таймера
RETURN
+
        RETURN
 
; Подпрограмма освобождения процессом программируемого таймера
 
; Подпрограмма освобождения процессом программируемого таймера
176422$:MOV #4,@#7050 ; Признак свободного таймера
+
176422$:MOV     #4,@#7050       ; Признак свободного таймера
MOV #174612$,@#304 ; Восстановить вектор прерывания
+
        MOV     #174612$,@#304 ; Восстановить вектор прерывания
MOV #200,@#306
+
        MOV     #200,@#306
CLR @#177712 ; Очистить буферный регистр таймера
+
        CLR     @#177712       ; Очистить буферный регистр таймера
MOV #1,@#177710 ; Пуск таймера
+
        MOV     #1,@#177710     ; Пуск таймера
RETURN
+
        RETURN
 
; Подпрограмма запуска тестов в ПП
 
; Подпрограмма запуска тестов в ПП
176460$:CALL 176472$ ; Запустить тесты
+
176460$:CALL   176472$         ; Запустить тесты
CLR @#7100 ; Очистить флаг вызова п/п
+
        CLR     @#7100         ; Очистить флаг вызова п/п
RETURN
+
        RETURN
 
; Подпрограмма вызова тестов и передачи результатов в ОЗУ ЦП
 
; Подпрограмма вызова тестов и передачи результатов в ОЗУ ЦП
176472$:MTPS #200 ; Запретить прерывания
+
176472$:MTPS   #200           ; Запретить прерывания
MOV #176656$,@#300 ; Переназначить вектор прерывания клавиатуры
+
        MOV     #176656$,@#300 ; Переназначить вектор прерывания клавиатуры
CALL 160410$ ; Тест ПЗУ
+
        CALL   160410$         ; Тест ПЗУ
CLR R1 ; R1 = 0 (смещение в буфере ошибок)
+
        CLR     R1             ; R1 = 0 (смещение в буфере ошибок)
176512$:ASR R0
+
176512$:ASR     R0
BCS 176522$ ; Ошибка банка ПЗУ
+
        BCS     176522$         ; Ошибка банка ПЗУ
BNE 176526$ ; Еще есть ошибки
+
        BNE     176526$         ; Еще есть ошибки
BR 176532$
+
        BR     176532$
176522$:CALL 176626$ ; Установка счетчика ошибок в ОЗУ ЦП
+
176522$:CALL   176626$         ; Установка счетчика ошибок в ОЗУ ЦП
176526$:INC R1 ; Переход к след.ячейке в ОЗУ ЦП
+
176526$:INC     R1             ; Переход к след.ячейке в ОЗУ ЦП
BR 176512$
+
        BR     176512$
176532$:CALL 170632$ ; Тест процессора
+
176532$:CALL   170632$         ; Тест процессора
MTPS #0 ; Разрешить прерывания
+
        MTPS   #0             ; Разрешить прерывания
TST R0 ; Есть ошибки ?
+
        TST     R0             ; Есть ошибки ?
BEQ 176556$ ; Нет
+
        BEQ     176556$         ; Нет
MOV #5,R1 ; R1 = 5 (смещение в буфере ошибок)
+
        MOV     #5,R1           ; R1 = 5 (смещение в буфере ошибок)
CALL 176626$ ; Установка счетчика ошибок в ОЗУ ЦП
+
        CALL   176626$         ; Установка счетчика ошибок в ОЗУ ЦП
176556$:MOV #-1,R0
+
176556$:MOV     #-1,R0
CALL 176132$ ; Получить адрес наиб. блока памяти
+
        CALL   176132$         ; Получить адрес наиб. блока памяти
MOV R1,R4 ; R4 = начальный адрес
+
        MOV     R1,R4           ; R4 = начальный адрес
MOV R1,R5
+
        MOV     R1,R5
ADD R0,R5 ; R5 = конечный адрес
+
        ADD     R0,R5           ; R5 = конечный адрес
CALL 170224$ ; Тест оперативной памяти
+
        CALL   170224$         ; Тест оперативной памяти
TST R0 ; Есть ошибки
+
        TST     R0             ; Есть ошибки
BEQ 176614$ ; Нет
+
        BEQ     176614$         ; Нет
MOV #4,R1 ; R1 = 4 (смещение в буфере ошибок)
+
        MOV     #4,R1           ; R1 = 4 (смещение в буфере ошибок)
CALL 176626$ ; Установка счетчика ошибок в ОЗУ ЦП
+
        CALL   176626$         ; Установка счетчика ошибок в ОЗУ ЦП
176614$:MOV #177,R0
+
176614$:MOV     #177,R0
CALL 104160$ ; Посл. ЦП по К0 символ с кодом 177(тест окон.)
+
        CALL   104160$         ; Посл. ЦП по К0 символ с кодом 177(тест окон.)
RETURN
+
        RETURN
 
; Подпрограмма установки счетчика ошибок в ОЗУ ЦП
 
; Подпрограмма установки счетчика ошибок в ОЗУ ЦП
176626$:MOV #177700/2,@#177010 ; Адрес буфера счетчиков ошибок
+
176626$:MOV     #<177700/2>&77777,@#177010 ; Адрес буфера счетчиков ошибок
ADD R1,@#177010 ; Прибавить смещение
+
        ADD     R1,@#177010     ; Прибавить смещение
CMP #-1,@#177014 ; Значение счетчика достигло максимума
+
        CMP     #-1,@#177014   ; Значение счетчика достигло максимума
BEQ 176654$ ; Да
+
        BEQ     176654$         ; Да
INC @#177014 ; Увеличить значение счетчика ошибок
+
        INC     @#177014       ; Увеличить значение счетчика ошибок
 
176654$:RETURN
 
176654$:RETURN
 
; Подпрограмма обработки прерываний от клавиатуры во время тестирования
 
; Подпрограмма обработки прерываний от клавиатуры во время тестирования
176656$:CMP #4,@#177702 ; Нажата клавиша <СТОП> ?
+
176656$:CMP     #4,@#177702     ; Нажата клавиша <СТОП> ?
BNE 176672$ ; Нет
+
        BNE     176672$         ; Нет
JMP @160000$ ; Перезапуск компьютера
+
        JMP     @160000$       ; Перезапуск компьютера
 
176672$:RTI
 
176672$:RTI
 
 
Line 2,623: Line 2,641:
 
; *****************************************************************
 
; *****************************************************************
  
.=176770
+
        .=176770
  
176770$:.WORD 63160 ; Адреса 100000 - 117777
+
176770$:.WORD   63160           ; Адреса 100000 - 117777
176772$:.WORD 133314 ; Адреса 120000 - 137777
+
176772$:.WORD   133314         ; Адреса 120000 - 137777
176774$:.WORD 162125 ; Адреса 140000 - 157777
+
176774$:.WORD   162125         ; Адреса 140000 - 157777
176776$:.WORD 103607 ; Адреса 160000 - 176775
+
176776$:.WORD   103607         ; Адреса 160000 - 176775
  
 
; * * * * * * * * * * *  E n d  o f  R O M  * * * * * * * * * * *
 
; * * * * * * * * * * *  E n d  o f  R O M  * * * * * * * * * * *
  
.END @160000$
+
        .END
 
</pre>
 
</pre>

Latest revision as of 07:47, 13 January 2008


; *****************************************************************
; *                                                               *
; * ПРОГРАММА  НАЧАЛЬНОГО  ЗАПУСКА  СИСТЕМЫ,  ПУЛЬТОВЫЙ  МОНИТОР, *
; *   ЗАГРУЗЧИКИ, ТЕСТОВЫЕ ПОДПРОГРАММЫ, ОБРАБОТЧИКИ ПРЕРЫВАНИЙ   *
; *                                                               *
; *                     Адреса 160000 - 176673                    *
; *                                                               *
; *****************************************************************

; *****************************************************************
; *                                                               *
; * Системные команды, выполняемые только в режиме HALT           *
; *                                                               *
; *   Мнемоника      Код     Выполняемое действие                 *
; *                                                               *
; *   $MFPC$          22     Копия счетчика команд --> R0         *
; *   $MFPS$          24     Копия слова состояния --> R0         *
; *   $MTPC$          32     R0 --> Копия счетчика команд         *
; *   $MTPS$          34     R0 --> Копия слова состояния         *
; *   $MFPM$          21     (R5)+ --> R0 (режим USER)            *
; *   $MTPM$          31     R0 --> -(R5) (режим USER)            *
; *   $STEP$          16     Копия счетчика команд --> PC         *
; *                          Копия слова состояния --> PS         *
; *                          Запуск по значению PC с маскировкой  *
; *                          всех прерываний на один шаг          *
; *   $RUN$           12     Копия счетчика команд --> PC         *
; *                          Копия слова состояния --> PS         *
; *                          Запуск по значению PC                *
; *****************************************************************

        $MFPC$  = 22
        $MFPS$  = 24
        $MTPC$  = 32
        $MTPS$  = 34
        $MFPM$  = 21
        $MTPM$  = 31
        $STEP$  = 16
        $RUN$   = 12

        .=160000

160000$:.WORD   160300$,200     ; Вектор прерывания по включению питания
160004$:.WORD   160230$,600     ; Вектор прерывания по зависанию (HALT)
160010$:.WORD   165612$,600     ; Вектор прерывания по инструкции FIS
; Адреса подпрограмм обработки прерываний EMT 14 - EMT 24
160014$:.WORD   173502$,160270$,103564$,104132$,104132$
; "Пустые" адреса
160026$:.REPT   5
        .WORD   160270$
        .ENDR
; Адреса подпрограмм обработки прерываний EMT 40 - EMT 76
160040$:.WORD   107754$,117126$,117162$,117174$
        .WORD   117406$,117250$,117410$,117240$
        .WORD   117412$,117414$,117416$,117420$
        .WORD   117422$,160270$,117424$,117426$
; "Пустые" адреса
160100$:.REPT   30
        .WORD   160270$
        .ENDR
; Адреса подпрограмм обработки прерываний TRAP 0 - TRAP 6
160160$:.WORD   174254$,175516$,175664$,160270$
160170$:.WORD   160240$,600     ; Вектор прерывания по команде HALT
160174$:.WORD   160250$,600     ; Вектор прерывания по двойному зависанию
; Точка входа обработчика прерывания 4
160200$:MOV     #163627$,@172662$
        BR      160266$
; Точка входа обработчика прерывания 10
160210$:MOV     #163641$,@172662$
        BR      160614$
; Точка входа обработчика прерывания 24
160220$:MOV     #163657$,@172662$
        BR      160614$
; Точка входа обработчика прерывания 160004
160230$:MOV     #163627$,@172662$
        BR      160574$
; Точка входа обработчика прерывания 160170
160240$:MOV     #163731$,@172662$
        BR      160614$
; Точка входа обработчика прерывания 160174
160250$:MOV     #163707$,@172662$
        BR      160614$
; Точка входа обработчика прерывания 160274
160260$:MOV     #163736$,@172662$
160266$:BR      160614$
160270$:RETURN
160272$:.WORD   161236$         ; Адрес п/п снятия режима HALT (для ЦП)
160274$:.WORD   160260$,600     ; Вектор прерывания по зависанию при приеме АВП
; Точка входа при включении питания (адрес начального пуска)
160300$:MOV     @#172660$,R4    ; R4 = адрес ОЗУ пультового отладчика
        CLR     R0              ; Признак ошибок = 0
        MOV     R4,SP
        BMI     160464$         ; Запуск в ЦП
        BIT     #20,@#177716    ; ЦП в режиме HALT ?
        BEQ     160332$         ; Нет
        MOV     @#0,R0
        BEQ     160332$
        JMP     @R0
160332$:MOV     #40,@#177716    ; Останов ЦП (установка DCLO и ACLO)
        CALL    173252$         ; Перекачка пультового монитора в сист. ОЗУ ЦП
        MOV     #70045,@#177010 ; Передача ключа теста памяти (делать или нет)
        MOV     42(R4),@#177014
        CLR     @#177716        ; Снятие DCLO
        MOV     #100,R0
160370$:SOB     R0,160370$      ; Задержка
        MOV     #100000,@#177716; Запуск ЦП (снятие ACLO)
        CALL    160410$         ; Тест ПЗУ ПП
        SWAB    R0
        BR      160474$         ; Переход на тест ОЗУ
; Подпрограмма теста ПЗУ ПП
160410$:MOV     #4,R5           ; R5 = число банков ПЗУ
        MOV     #176776,R1      ; R1 = конечный адрес ПЗУ
        MOV     #7377,R2        ; R2 = число слов последнего банка ПЗУ
        CLR     R0              ; Очистка признака ошибок
160426$:ASL     R0              ; Освободить правый бит
        CLR     R3
160432$:ADD     -(R1),R3        ; Вычисление контрольной суммы
        ADC     R3
        SOB     R2,160432$
        ASL     R5
        CMP     <176770$-2>(R5),R3      ; Сравнение с записанной в ПЗУ
        BEQ     160452$         ; Совпадает
        INC     R0              ; Установить правый бит
160452$:ASR     R5
        MOV     #10000,R2       ; R2 = число слов в 1,2 и 3 банках ПЗУ
        SOB     R5,160426$
        RETURN
160464$:CMP     42(R4),#125252  ; Производить тест ОЗУ
        BEQ     160534$         ; Нет
160474$:CLR     R1              ; R1 = начальный адрес
        MOV     @#172674$,R2    ; R2 = объем ОЗУ в словах
160502$:MOV     R1,@R1          ; Занести в ячейку ее адрес
        CMP     R1,@R1          ; Сравнить
        BNE     160530$         ; Ошибка
        COM     @R1             ; Инвертировать содержимое ячейки
        MOV     @R1,R3          ; R3 = содержимое ячейки
        COM     R3
        CMP     R1,R3           ; Содежимое R3 равно адресу
        BNE     160530$         ; Нет (ошибка)
        CLR     (R1)+           ; Очистить ячейку
        SOB     R2,160502$
        BR      160534$
160530$:BIS     #2,R0           ; Установить признак ошибки ОЗУ
160534$:MOV     R4,R1           ; R1 = адрес ОЗУ пультового отладчика
        MOV     #50,R2          ; R2 = объем ОЗУ пультового отладчика
160542$:CLR     (R1)+           ; Цикл очистки
        SOB     R2,160542$
        MOV     @#172672$,14(R4); Начальное значение указателя стека
        MOV     #200,20(R4)     ; Начальное значение слова состояния
        MOV     #125252,42(R4)  ; Ключ пропуска теста ОЗУ
        JMP     172676$
160574$:BR      160744$
; Точка перехода из режима УСТАНОВКА при нажатии УПР-@ (пультовый монитор ПП)
160576$:MOV     #600,-(SP)      ; Записать в стек слово состояния
        MOV     #160744$,-(SP)  ; Записать в стек адрес начала пульт. отл.
        CLR     @172662$        ; Адрес выводимой надписи = 0
        RTI                     ; Переход в пультовый отладчик
; Точка входа при обработке системных прерываний (адрес векторов 160***)
160614$:CLR     @172664$        ; Адрес открытой ячейки = 0
        MOV     R0,@172660$     ; Сохранить содержимое R0
        MOV     @#172660$,R0    ; R0 = адрес буфера сохранения
        TST     (R0)+
        MOV     R1,(R0)+        ; Сохранить содержимое других регистров
        MOV     R2,(R0)+
        MOV     R3,(R0)+
        MOV     R4,(R0)+
        MOV     R5,(R0)+
        MOV     SP,(R0)+
        MOV     R0,R1
        $MFPC$                  ; Прочесть КРСК
        MOV     R0,(R1)+        ; Сохранить содержимое PC
        MOV     R0,R3           ; R3 = PC
        $MFPS$                  ; Прочесть КРСП
        MOV     R0,(R1)+        ; Сохранить содержимое PS
        MOV     @#172660,R1
        MOV     R1,R4           ; R4 = начальный адрес ОЗУ пультового отладчика
        ADD     34(R4),PC       ; Режим STEP/RUN ?
        BR      160744$         ; STEP
160676$:MOV     #4,R2           ; R2 = число точек останова
        SUB     #2,R3           ; R3 = предполагаемый адрес останова
160706$:MOV     50(R1),R5       ; R5 = адрес точки останова
        BEQ     160736$         ; Отсутствует
        MOV     60(R1),R0       ; R0 = значение яч. памяти по адресу останова
        ADD     #2,R5
        $MTPM$                  ; Запись значения в ОЗУ
        CMP     R3,R5           ; Текущий адрес останова = точке останова ?
        BNE     160736$         ; Нет
        MOV     R3,16(R4)       ; PC = подкоррект. адрес останова
160736$:ADD     #2,R1           ; Переход к следующей точке останова
        SOB     R2,160706$
160744$:MOV     @#172660$,R4    ; R4 = начальный адрес ОЗУ пультового отладчика
        MOV     R4,SP
        BMI     160762$         ; Исполнение в ЦП
        MOV     #2,@#22550      ; Запрет перевода ЦП в режим HALT при Esc Гр-]
160762$:MOV     #70,26(R4)      ; Установка указателя на начало буфера
        ADD     R4,26(R4)
        MTPS    @#172670$       ; Установка ССП
        JSR     R4,163006$      ; Установка системного режима клавиатуры
        .WORD   163476$
        TST     R4              ; Программа исполняется под упр. ПП ?
        BPL     161030$         ; Да
        MOV     36(R4),R0       ; R0 = выход в меню загрузки/монитор
        MOV     #2,36(R4)       ; Установка выхода в монитор
        ADD     R0,PC
        BR      161160$         ; Переход на вывод меню загрузки
161030$:CALL    163316$         ; Вывод причины останова, адр. ячейки и ее сод.
161034$:MOV     R4,SP
        JSR     R4,163006$      ; Вывод промптера /@ /
        .WORD   163510$
161044$:CALL    162602$         ; Набор восьм. значения и запрос ком. клавиши
        BIC     #240,R0         ; Привести к верхнему регистру
        BNE     161062$         ; Нажат не <Пробел>
        JMP     161606$         ; Нажат <Пробел>
161062$:CMPB    R0,#3           ; Нажата комбинация УПР-C
        BEQ     161206$
        CMP     R0,#14          ; Нажат <СБРОС>
        BEQ     161300$
        CMP     R0,#15          ; Нажат <Enter>
        BEQ     161034$
        CMP     R0,#33          ; Код <Escape>
        BEQ     161306$
        CMP     R0,#'R          ; R (переключение на регистры)
        BEQ     161320$
        CMP     R0,#'A          ; A (переключение на точки останова)
        BEQ     161330$
        CMP     R0,#'M          ; M (выход в меню)
        BEQ     161160$
        CMP     R0,#'T          ; T (тест сетевого адаптера)
        BEQ     161154$
        CMP     R0,#'D          ; D (переход в автономный режим)
        BNE     161034$
161150$:JMP     161530$
161154$:JMP     162460$
; Обработка вызова меню загрузки (M)
161160$:JSR     R4,163006$      ; Вызов меню загрузки
        .WORD   163505$
        CALL    172614$         ; Прочесть данные из канала 0 (номер пункта)
        MOV     R0,R1           ; R1 = номер выбранного пункта * 2
        CALL    172614$         ; Прочесть данные из канала 0 (номер уст-ва)
        CALL    @162350$(R1)    ; Вызов соответствующей п/п
        BR      161160$
; Обработка выхода из пультового отладчика (УПР-C)
161206$:TST     R4              ; Пультовый монитор работает под упр. ПП ?
        BMI     161034$         ; Нет
        CLR     @#22550
        MTPS    #600
        MOV     @#7144,SP       ; Восстановить стек режима УСТАНОВКА
        CLR     R0
        $MTPS$                  ; PS = 0
        $MTPC$                  ; PC = 0
        $RUN$                   ; Запуск по адресу 0(там RETURN, возврат в УСТ)
; П/п снятия в ЦП сигнала HALT
161236$:MOV     R0,-(SP)
        MOV     R1,-(SP)
        MOV     R4,-(SP)
        MOV     @#172660$,R4    ; R4 = начальный адрес ОЗУ пультового отладчика
        INC     44(R4)          ; Установить ключ продолжения
        JSR     R4,163006$      ; Снять сигнал HALT в ЦП
        .WORD   163501$
161262$:TST     44(R4)          ; Ключ продолжения сброшен ?
        BNE     161262$         ; Нет
        MOV     (SP)+,R4
        MOV     (SP)+,R1
        MOV     (SP)+,R0
        RETURN
; Обработка команды очистки экрана (<СБРОС>) (R0 = 14)
161300$:CALL    172632$         ; Вывод символа УПР-L
        BR      161034$
; Обработка клавиш с префиксом Esc
161306$:CALL    162756$         ; Прочесть очер. код клавиши с его коррекцией
        CALL    @161556$(R0)    ; Вызвать соответствующую п/п
        BR      161044$
; Обработка команды переключения на регистры (R)
161320$:MOV     #10*400+'R,32(R4); Режим работы (10(8) регистров)
        BR      161336$
; Обработка команды переключения на точки останова (A)
161330$:MOV     #4*400+'A,32(R4); Режим работы (4 точки останова)
161336$:CALL    163370$         ; Перевод курсора на новую строку
        MOVB    32(R4),R0       ; R0 = 'A' или 'R'
        CALL    172632$         ; Вывод символа
161352$:CALL    172614$         ; Ввод символа с клавиатуры
        MOV     R0,R3
        SUB     #60,R3          ; R3 в диапазоне '0' -- '7'
        BMI     161402$         ; Нет
        CMPB    R3,#7
        BLOS    161410$         ; В диапазоне
        CMP     R0,#'S          ; Нажата 'S' ?
        BEQ     161470$         ; Да
161402$:CALL    163142$         ; Вывод всех регистров или точек останова
        BR      161034$
161410$:BICB    33(R4),R0
        CALL    172632$         ; Вывод номера регистра или точки останова
161420$:CALL    163234$         ; Вывод '=' и содержимого регистра
161424$:JSR     R4,163006$      ; Вывод двух пробелов
        .WORD   163560$
        CALL    162604$         ; Ввод восьм. числа и запрос ком. клавиши
        CMP     R0,#33          ; Ком. клавиша имеет префикс Esc ?
        BNE     161512$         ; Нет
        CALL    162756$         ; Прочесть постфикс ком. клавиши и подкорр. его
        SUB     #2,R0
        BMI     161524$         ; Нажата клавиша <ПОМ>
        CALL    163264$         ; Получение адреса буфера
        CALL    @162222$(R0)    ; Вызов соответствующей п/п
        BR      161424$
161470$:CMPB    32(R4),#'R      ; Работа производится с регистрами ?
        BNE     161352$         ; Нет
        CALL    172632$         ; Вывод символа 'S' (R0 = 'S')
        MOV     #10,R3          ; R3 = номер регистра (PS)
        BR      161420$
161512$:CMP     R0,#40          ; Нажат <Пробел> ?
        BNE     161524$         ; Нет
        JMP     161606$         ; Да
161524$:JMP     161062$
; Обработка команды перехода в автономный режим (D)
161530$:MOV     #14,R0          ; R0 = Ctrl+L (очистка экрана)
161534$:CALL    172632$         ; Вывести символ на экран
        CALL    172614$         ; Ввести символ с клавиатуры
        CMP     R0,#3           ; Нажата комбинация УПР+C ?
        BNE     161534$         ; Нет
        JMP     161034$         ; Переход в пультовый монитор
; Адреса п/п обработки клавиш с префиксом Esc (ПОМ,ИСП,Вверх,Вниз,Влево,
; Вправо,НР+Вверх,НР+Вниз,НР+Влево,НР+Вправо,?,?)
161556$:.WORD   162572$,161612$,161762$,161770$
        .WORD   161772$,162026$,162132$,162040$
        .WORD   162132$,162046$,162164$,162204$
; Обработка команды "шаг" (<Пробел>)
161606$:CLR     R3              ; R3 = режим STEP
        BR      161616$
; Обработка команды "пуск" (<ИСП>)
161612$:MOV     #2,R3           ; R3 = режим RUN
161616$:MTPS    #600
        MOV     20(R4),R0       ; R0 = PS
        $MTPS$                  ; Запись КРСП
        TST     R2              ; Было набрано значение ?
        BEQ     161640$         ; Нет
        MOV     R1,16(R4)       ; Сохранить набранное значение
161640$:MOV     16(R4),R0       ; R0 = PC
        $MTPC$                  ; Запись КРСК
        MOV     R3,34(R4)       ; Сохранение режима STEP/RUN
        BEQ     161724$         ; Режим STEP
        MOV     R4,R1           ; R1 = начальный адрес ОЗУ пультового отладчика
        MOV     #4,R2           ; R2 = число точек останова
161662$:MOV     50(R1),R5       ; R5 = адрес точки останова
        BEQ     161712$         ; Точка останова не используется
        $MFPM$                  ; Чтение содерж. памяти по адресу останова
        MOV     R0,60(R1)       ; Сохранение его в буфере
        CMP     16(R4),50(R1)   ; Адрес останова равен адресу запуска ?
        BEQ     161712$         ; Да
        CLR     R0              ; R0 = код команды HALT
        $MTPM$                  ; Запись его в память по адресу останова
161712$:ADD     #2,R1           ; Переход к следующей точке останова
        SOB     R2,161662$
        CALL    161236$         ; Снятие в ЦП сигнала HALT
161724$:MOV     R4,SP           ; SP = начальный адрес ОЗУ пультового отладчика
        BMI     161734$         ; Пультовый отладчик работает под управл. ЦП
        CLR     @#22550
161734$:MOV     (SP)+,R0        ; Восстановление регистров
        MOV     (SP)+,R1
        MOV     (SP)+,R2
        MOV     (SP)+,R3
        MOV     (SP)+,R4
        MOV     (SP)+,R5
        MOV     (SP)+,SP
        ADD     @172666$,PC     ; Режим STEP/RUN
        $STEP$
        $RUN$
; Обработка команды "открыть предыдущую ячейку" (Вверх)
161762$:MOV     #-2,R3
        BR      161772$
; Обработка команды "открыть следующую ячейку" (Вниз)
161770$:TST     (R3)+           ; R3 = 2
; Обработка команды "занести значение" (Влево)
161772$:TST     R2              ; Значение было введено ?
        BEQ     162014$         ; Нет
        MOV     R1,R0           ; R0 = введенное число
        MOV     22(R4),R5       ; R5 = адрес открытой ячейки
        ADD     #2,R5
        CALL    163444$         ; Занести значение в память
162014$:ADD     R3,22(R4)       ; Переход к другой ячейке
162020$:CALL    163024$         ; Прочитать ее содерж. и вывести на экран
        RETURN
; Обработка команды "открыть ячейку" (Вправо)
162026$:TST     R2              ; Значение было введено ?
        BEQ     162020$         ; Нет
        MOV     R1,22(R4)       ; Изменить адрес открытой ячейки
        BR      162020$
; Обработка команды "открыть ячейку с относительным адресом" (НР+Вниз)
162040$:MOV     #2,R3           ; R3 = признак относительного адреса
        BR      162050$
; Обработка команды "открыть ячейку с абсолютным адресом" (НР+Вправо)
162046$:CLR     R3              ; R3 = признак абсолютного адреса
162050$:TST     R2              ; Значение было введено ?
        BEQ     162062$         ; Нет
        MOV     R1,@26(R4)      ; Сохр. введ. знач. в качестве адреса возврата
        BR      162070$
162062$:MOV     22(R4),@26(R4)  ; Сохр. в кач. адреса возв. адрес откр. ячейки
162070$:ADD     #2,26(R4)       ; Передвинуть указатель буфера сохранения
        BIC     #20,26(R4)
        MOV     24(R4),R0       ; R0 = содержимое открытой ячейки
        TST     R3              ; Режим относительного адреса ?
        BNE     162122$         ; Да
        MOV     R0,22(R4)       ; Адрес = содерж. открытой ячейки (абс. адр.)
        BR      162020$
162122$:ADD     R3,R0
        ADD     R0,22(R4)       ; Адрес += содерж. откр. яч + 2 (относ. адр.)
        BR      162020$
; Обработка команды "возврат на пред. уровень косв. адр." (НР+Вверх, НР+Влево)
162132$:SUB     #2,26(R4)       ; Передвинуть назад указатель буфера сохр.
        BIS     #100,26(R4)
        BIC     #20,26(R4)
        MOV     @26(R4),22(R4)  ; Адрес = сохраненный адрес
        BR      162020$
; Подпрограмма переключения на просмотр памяти ЦП
162164$:TST     R4              ; Пульт. отладчик работает под упр. ЦП ?
        BMI     162202$         ; Да
        MOV     #4,40(R4)       ; Режим просмотра памяти ЦП
        EMT     52              ; Вывод строки "ЦМ"
        .WORD   107560$
162202$:RETURN
; Подпрограмма переключения на просмотр памяти ПП
162204$:TST     R4              ; Пульт. отладчик работает под упр. ЦП ?
        BMI     162220$         ; Да
        CLR     40(R4)          ; Режим просмотра памяти ПП
        EMT     52              ; Вывод строки "ПМ"
        .WORD   107551$
162220$:RETURN
; Адреса п/п обработки клавиш с префиксом Esc для режима рег./точек останова
; (ИСП, Вверх, Вниз, Влево, Вправо, НР+Вверх, НР+Вниз, НР+Влево, НР+Вправо,?,?)
162222$:.WORD   161612$,162250$,162262$,162304$,162320$
        .WORD   162342$,162334$,162342$,162326$,162164$,162204$
; Обработка команды "открыть предыдущий регистр/точку останова" (Вверх)
162250$:TST     R2              ; Значение было введено ?
        BEQ     162256$         ; Нет
        MOV     R1,@R5          ; Занести введенное значение в рег./точку ост.
162256$:DEC     R3              ; Перейти к предыдущему регистру/точке останова
        BR      162272$
; Обработка команды "открыть следующий регистр/точку останова" (Вниз)
162262$:TST     R2              ; Значение было введено ?
        BEQ     162270$         ; Нет
        MOV     R1,@R5          ; Занести введенное значение в рег./точку ост.
162270$:INC     R3              ; Перейти к следующему регистру/точке останова
162272$:BIC     #177770,R3      ; Подкорректировать номер рег./точки останова
        BICB    33(R4),R3
        BR      162312$
; Обработка команды "занести значение в регистр/точку останова" (Влево)
162304$:TST     R2              ; Значение было введено ?
        BEQ     162312$         ; Нет
        MOV     R1,@R5          ; Занести введенное значение в рег./точку ост.
162312$:CALL    163174$         ; Вывод содержимого другого рег./точки ост.
        RETURN
; Обработка команды "открыть ячейку" (Вправо)
162320$:MOV     #161044$,@SP    ; Коррекция адреса возврата
        BR      162026$         ; На исполнение команды
; Обработка команды "открыть ячейку с абсолютным адресом" (НР+Вправо)
162326$:MOV     #161044$,@SP    ; Коррекция адреса возврата
        BR      162046$         ; На исполнение команды
; Обработка команды "открыть ячейку с относительным адресом" (НР+Вниз)
162334$:MOV     #161044$,@SP    ; Коррекция адреса возврата
        BR      162040$         ; На исполнение команды
; Обработка команды "возврат на пред. ур. косв. адр." (НР+Вверх, НР+Влево)
162342$:MOV     #161044$,@SP    ; Коррекция адреса возврата
        BR      162132$         ; На исполнение команды
; Адреса подпрограмм исполнения пунктов меню ЗАГРУЗКА (не выбрано,
;  диск, кассета ПЗУ, сеть, стык С2, магнитофон, отладка, тестирование)
162350$:.WORD   162572$,162400$,162420$,162440$,162472$,162504$,161034$,162370$
; Обработка пункта меню ЗАГРУЗКА [тестирование]
162370$:CALL    161236$         ; Перевод ЦП в режим USER
        JMP     167540$         ; На исполнение тестов
; Обработка пункта меню ЗАГРУЗКА [диск]
162400$:MOV     R0,R3           ; R3 = номер диска (0 -- 3)
        JSR     R5,162522$      ; Перекачка загрузчика и его запуск
        .WORD   163774$,44,164104$,5,0
; Обработка пункта меню ЗАГРУЗКА [кассета ПЗУ]
162420$:MOV     R0,R3           ; R3 = номер кассеты ПЗУ (1 -- 2)
        JSR     R5,162522$      ; Перекачка загрузчика и его запуск
        .WORD   163774$,44,164116$,5,0
; Обработка пункта меню ЗАГРУЗКА [сеть]
162440$:JSR     R4,163006$      ; Вывод "* ЗАГРУЗКА ИЗ СЕТИ *"
        .WORD   163573$         ; Адрес надписи
        JSR     R5,162522$      ; Перекачка загрузчика и его запуск
        .WORD   164160$,210,0
; Обработка команды "Т" пультового монитора (тест локальной сети)
162460$:JSR     R5,162522$      ; Перекачка программы теста и ее запуск
        .WORD   164600$,360,0
; Обработка пункта меню ЗАГРУЗКА [стык С2]
162472$:JSR     R5,162522$      ; Перекачка загрузчика и его запуск
        .WORD   165540$,25,0
; Обработка пункта меню ЗАГРУЗКА [магнитофон]
162504$:JSR     R5,162522$      ; Перекачка загрузчика и его запуск
        .WORD   163774$,44,164130$,14,0
; Подпрограмма перекачки загрузчика из сист. ОЗУ и его запуск
162522$:MOV     #1000,R0        ; R0 = адрес, куда перекачивается загрузчик
162526$:MOV     (R5)+,R1        ; R1 = адрес загрузчика в сист. ОЗУ
        BEQ     162542$         ; Конец перекачки
        MOV     (R5)+,R2        ; R2 = размер загрузчика в словах
162534$:MOV     (R1)+,(R0)+     ; Цикл перекачки
        SOB     R2,162534$
        BR      162526$
162542$:CALL    161236$         ; Перевод ЦП в режим USER
        MOV     #200,R0         ; Копия ССП = 200 (прерывания запрещены)
        $MTPS$
        MOV     #1000,R0        ; Копия СК = 1000 (адрес загрузчика)
        $MTPC$
        MOV     #1000,SP
        MOV     R3,R0           ; R0 = номер устройства (диска или кассеты ПЗУ)
        $RUN$                   ; Запуск загрузчика
162572$:RETURN
; Подпрограмма ввода восьмеричного значения и запроса командной клавиши
162574$:MOV     @#172660,R4     ; R4 = начало ОЗУ пультового монитора
        BR      162604$
162602$:CLR     R3
162604$:MOV     R4,R1
        ADD     #110,R1         ; R1 = адрес буфера для ввода чисел
        CLR     R2              ; R2 = 0 (инициализация счетчика введ. цифр)
162614$:CALL    172614$         ; Запрос нажатой клавиши
        CMP     R0,#'0          ; Введенный символ в диапазоне '0'-'7' ?
        BLO     162706$         ; Нет
        CMP     R0,#'7
        BHI     162654$         ; Нет
        CMP     R2,#8.          ; Введено восемь цифр ?
        BEQ     162614$         ; Да
        MOVB    R0,(R1)+        ; Поместить символ в буфер
        INC     R2              ; Увеличить счетчик символов
        CALL    172632$         ; Вывести символ на экран
        BR      162614$
162654$:CMPB    R0,#177         ; Нажата клавиша <ЗАБОЙ> ?
        BNE     162706$         ; Нет
        TST     R2              ; Буфер пуст ?
        BEQ     162614$         ; Да
        CLRB    -(R1)           ; Удалить последний символ из буфера
        DEC     R2              ; Уменьшить счетчик введенных символов
        MOV     R1,-(SP)
        JSR     R4,163006$      ; Удалить последний символ с экрана
        .WORD   163551$
        MOV     (SP)+,R1
        BR      162614$
162706$:SUB     R2,R1           ; R1 = начало буфера ввода
        CLR     R2              ; R2 = 0 (счетчик обработанных символов)
        CLR     R5              ; R5 = 0 (введенное число (инициализация))
        MOV     R0,-(SP)        ; Сохранить в стеке код командной клавиши
162716$:MOVB    @R1,R0          ; R0 = очередная цифра из буфера
        CLRB    (R1)+
        SUB     #60,R0          ; Перевод из ASCII в BIN
        BMI     162750$         ; Достигнут конец буфера
        ASL     R5              ; R5 = R5 * 8 + R0
        ASL     R5
        ASL     R5
        ADD     R0,R5
        INC     R2              ; Увеличить счетчик обработанных символов
        CMP     R2,#8.          ; Обработано восемь символов ?
        BNE     162716$         ; Нет
162750$:MOV     (SP)+,R0        ; R0 = код командной клавиши
        MOV     R5,R1           ; R1 = введенное значение
        RETURN
; П/п ввода клавиши и корректировка ее кода (за символом ESC)
162756$:CALL    172614$         ; Запрос нажатой клавиши
        SUB     #176,R0         ; Ее код в диапазоне 176(8) -- 207(8) ?
        BMI     163002$         ; Нет
        CMP     R0,#11
        BHI     163002$         ; Нет
        ASL     R0              ; Увеличение скорректированного кода вдвое
        RETURN
163002$:CLR     R0              ; R0 = 0 ("плохой" код)
        RETURN
; Подпрограмма вывода строки на экран (адрес строки за командой JSR R4,...)
163006$:MOV     (R4)+,R1        ; R1 = адрес строки
        BR      163016$
163012$:CALL    172632$         ; Вывод символа на экран
; Подпрограмма вывода строки на экран (адрес строки в регистре R1)
163016$:MOVB    (R1)+,R0        ; R0 = очередной символ
        BNE     163012$         ; Еще не конец строки
        RTS     R4
; Подпрограмма вывода на экран адреса открытой ячейки памяти и ее содержимого
163024$:CALL    163370$         ; Перевод курсора в начало следующей строки
        MOV     22(R4),R1       ; R1 = адрес открытой ячейки
        CALL    163074$         ; Вывод на экран адреса открытой ячейки
        JSR     R4,163006$      ; Вывод разделительной дробной черты
        .WORD   163516$
        MOV     22(R4),R5       ; R5 = адрес открытой ячейки
        CALL    163412$         ; Запрос содержимого ячейки
        MOV     R0,R1           ; R1 = содержимое открытой ячейки
        CALL    163074$         ; Вывод на экран содержимого открытой ячейки
        JSR     R4,163006$      ; Вывод двух пробелов
        .WORD   163560$
        RETURN
; Подпрограмма вывода на экран числа в восьмеричной форме
163074$:MOV     R1,24(R4)       ; Сохранение значения в ОЗУ пульт. отладчика
        CLR     R0
        MOV     #6,R2           ; Число символов в ASCII-строке
        BR      163122$
163110$:CLR     R0              ; Цикл вытяжки трех старших разрядов R1 -> R0
        ROL     R1
        ROL     R0
        ROL     R1
        ROL     R0
163122$:ROL     R1
        ROL     R0
        ADD     #'0,R0          ; Преобразование из BIN в ASCII
        CALL    172632$         ; Вывод символа на экран
        SOB     R2,163110$
        RETURN
; Подпрограмма вывода на экран регистров или точек останова
163142$:CALL    163370$         ; Перевод курсора в начало следующей строки
        CLR     R3              ; R3 = 0 (начальный номер рег. или точ.ост.)
163150$:CALL    163200$         ; Вывод содержимого регистра или точ. ост.
        INC     R3              ; Перейти к след. регистру или точ. ост.
        CMPB    R3,33(R4)       ; Выведены все рег. или точ. ост.
        BLO     163150$         ; Нет
        CMP     R3,#10          ; Номер регистра равен 10 (рег. сост. проц.) ?
        BEQ     163150$         ; Да
        RETURN
; Подпрограмма вывода на экран содерж. одного регистра или точки останова
163174$:CALL    163370$         ; Перевод курсора в начало следующей строки
163200$:MOVB    32(R4),R0       ; R0 = 'R' или 'A' (регистры или точ. ост.)
        CALL    172632$         ; Вывод символа на экран
        MOV     R3,R0           ; R0 = номер регистра или точ. ост.
        ADD     #'0,R0          ; Перевод из BIN в ASCII
        CMP     R0,#'8          ; Это регистр состояния процессора
        BNE     163230$         ; Нет
        MOV     #'S,R0          ; Замена '8' на 'S'
163230$:CALL    172632$         ; Вывод символа на экран
163234$:JSR     R4,163006$      ; Вывод знака равенства
        .WORD   163526$
        CALL    163264$         ; Получение в R5 адреса хранения знач. рег.
        MOV     @R5,R1          ; R1 = содержимое регистра или точ. ост.
        CALL    163074$         ; Вывод содержимого на экран
        JSR     R4,163006$      ; Вывод разделительного пробела
        .WORD   163561$
        RETURN
; Подпрограмма получения в R5 адреса хранения содержимого рег. или точ. ост.
163264$:CLR     R5              ; R5 = 0 (инициализация)
        CMPB    33(R4),#4       ; Идет вывод точек останова ?
        BNE     163306$         ; Нет
        BICB    33(R4),R3
        MOV     #24,R5          ; R5 = смещение знач. точ. ост. в ОЗУ ПО / 2
163306$:ADD     R3,R5           ; Прибавить номер регистра или точки останова
        ASL     R5
        ADD     R4,R5           ; Прибавить адрес ОЗУ пультового отладчика
        RETURN
; Подпрограмма вывода на экран причины перехода процессора в режим HALT
163316$:MOV     @172662$,R2     ; R2 = адрес строки причины перехода
        BEQ     163366$
        JSR     R4,163006$      ; Вывод "*** "
        .WORD   163530$
        MOV     R2,R1           ; R1 = адрес строки причины перехода
        JSR     R4,163016$      ; Вывод причины перехода
        JSR     R4,163006$      ; Вывод " ***"
        .WORD   163540$
        TST     22(R4)          ; Вывод содержимое ячейки останова ?
        BNE     163366$         ; Нет
        MOV     16(R4),22(R4)   ; 22(R4) = адрес останова
        CALL    163024$         ; Вывод содержимого ячейки адреса останова
163366$:RETURN
; Подпрограмма перевода курсора в начало следующей строки
163370$:MOV     #15,R0          ; R0 = код возврата каретки
        CALL    172632$         ; Вывод на экран (курсор в начало тек. строки)
        MOV     #12,R0          ; R0 = код перевода строки
        CALL    172632$         ; Вывод на экран (курсор на след. строку)
        RETURN
; Подпрограмма чтения содержимого ячейки памяти
163412$:ADD     40(R4),PC       ; Режим ЦП(40(R4)=4)/ПП(40(R4)=0)(только в ПП)
        $MFPM$                  ; Чтение содержимого ячейки (R5)+ -> R0
        RETURN
163422$:CLC                     ; Коррекция R5 для помещ. его в рег. адреса
        ROR     R5
        MOV     R5,@#177010
        MOV     @#177014,R0     ; Чтение содержимого ячейки памяти ЦП
        INC     R5
        ASL     R5
        RETURN
; Подпрограмма записи значения в ячейку памяти
163444$:ADD     40(R4),PC       ; Режим ЦП(40(R4)=4)/ПП(40(R4)=0)(только в ПП)
        $MTPM$                  ; Запись значения в ячейку памяти R0 -> -(R5)
        RETURN
163454$:CLC                     ; Коррекция R5 для помещ. его в рег. адреса
        ROR     R5
        DEC     R5
        MOV     R5,@#177010
        MOV     R0,@#177014     ; Запись значения в ячейку памяти ЦП
        ASL     R5
        RETURN
; Esc-последовательности и надписи, употребляемые пультовым отладчиком
163476$:.BYTE   33,275,0        ; Системный режим клавиатуры
163501$:.BYTE   33,277,275,0    ; Пользовательский режим клавиатуры
163505$:.BYTE   33,274,0        ; Вызов меню ЗАГРУЗКА
163510$:.ASCIZ  <15><12><17>/@ /
163516$:.ASCIZ  "/ "
163521$:.ASCIZ  /R/
163523$:.ASCIZ  /RS/
163526$:.ASCIZ  /=/
163530$:.ASCIZ  <15><12><16>/*** /
163540$:.ASCIZ  / ***/<17>
163546$:.ASCIZ  <15><12>
163551$:.ASCIZ  <33>/D /<33>/D/
        .EVEN
163560$:.ASCII  / /
163561$:.ASCIZ  / /
163563$:.ASCIZ  <6>/ЦП/
163567$:.ASCIZ  <6>/ПП/
163573$:.ASCIZ  <15><12><12><16>/* zagruzka iz seti *  /<17>
163627$:.ASCIZ  /zawisanie/
163641$:.ASCIZ  /rezerwnyj kod/
163657$:.ASCIZ  /awariq setewogo pitaniq/
163707$:.ASCIZ  /dwojnoe zawisanie/
163731$:.ASCIZ  /stop/
163736$:.ASCIZ  /zawisanie pri prieme a.w.p./
        .EVEN
163772$:.WORD   0
; Загрузчик с диска, кассеты ПЗУ, магнитофона
163774$:MOV     #176674,R1      ; R1 = адрес регистра сост. перед. канала 2
        MOVB    R0,164104$+3    ; Сохранить номер устройства
        CLRB    @R1             ; Запретить прерывания от канала 2
        MOV     #164104$-163774$+1000,R2 ; R2 = адрес блока параметров
164012$:MOV     #2,R3
164016$:TSTB    @R1             ; Ожидание готовности канала 2
        BPL     164016$         ; Не готов
        MOVB    R2,2(R1)        ; Передача адреса БП в канал 2
        SWAB    R2
        SOB     R3,164016$
        MOV     #2,R3
164036$:TSTB    @R1             ; Ожидание готовности канала 2
        BPL     164036$         ; Не готов
        MOVB    #377,2(R1)      ; Передача байтов завершения в канал 2
        SOB     R3,164036$
164052$:TSTB    @R1             ; Ожидание завершения операции
        BPL     164052$         ; Операция не завершена
        TSTB    164104$         ; Есть ошибки ?
        BEQ     164072$         ; Нет
        CLRB    164104$         ; Очистить байт ошибок
        BR      164012$         ; Попробовать заново
164072$:CMP     #240,@#0        ; Первая команда BOOT-сектора NOP ?
        BNE     164012$         ; Нет
        CLR     PC              ; Запуск BOOT
; Блок параметров для диска
164104$:.BYTE   0,10,2,0,0,1
        .WORD   0,400
; Блок параметров для кассеты ПЗУ
164116$:.BYTE   0,10,21,0,0,0
        .WORD   0,400
; Блок параметров для магнитофона
164130$:.BYTE   0,11,11,0
        .WORD   0,0,0,0,0,0,0,0,0,400
; Загрузчик из сети
164160$:MTPS    #340            ; Запретить прерывания
        MOVB    @#176561,R5     ; Выделение в R5 номера сетевой станции
        MOV     R5,R0
        BIC     #177760,R5
        ASR     R0
        BIC     #177717,R0
        BIS     R0,R5
        MOVB    R5,164554$+2    ; Сохранение номера сетевой станции
        MOVB    164554$+16,R0   ; R0 = 173(8)
        XOR     R5,R0           ; R0 = 173(8) XOR номер_сетевой_станции
        MOVB    R0,164554$+16
        MOV     #30,R0          ; R0 = 30 (адрес вектора команды EMT)
        MOV     #164500$-164160$+1000,(R0)+ ; Установка вектора прерывания EMT
        CLR     (R0)+           ; Установка ССП при вызове EMT
        MOV     #164512$-164160$+1000,(R0)+ ; Установка вектора прерывания TRAP
        CLR     (R0)+           ; Установка ССП при вызове TRAP
164244$:MOV     #10000,SP       ; Установка указателя стека
        MOV     #164526$-164160$+1000,@#100 ; Устан. вект. прер. сет. таймера
        CLR     @#102
        MTPS    #0              ; Разрешить прерывания
        CLR     164534$         ; Очистка счетчика ожидания
164272$:TRAP    0               ; Чтение пришедшего байта
        CMP     164534$,#5      ; Счетчик ожидания больше пяти
        BLO     164272$         ; Нет
164304$:EMT     0               ; Посылка и чтение очередного байта
        CMPB    #376,R0         ; Пришедший байт равен 376(8)
        BNE     164304$         ; Нет
        MOV     #164554$-164160$+1000,R1 ; R1 = адрес блока передачи
164320$:MOVB    (R1)+,R0        ; R0 = очередной байт из блока передачи
        CMPB    #376,R0         ; Он равен 376(8) ?
        BEQ     164334$         ; Да
        EMT     0               ; Посылка и чтение очередного байта
        BR      164320$
164334$:EMT     0               ; Посылка и чтение очередного байта
        CMPB    #377,R0         ; Прочитанный байт равен 377(8) ?
        BNE     164334$         ; Нет
        EMT     0               ; Посылка и чтение очередного байта
        CMPB    R5,R0           ; Полученный байт равен номеру станции ?
        BNE     164334$         ; Нет
        MOV     #377,R4         ; R4 = 377(8) (контрольная сумма)
        XOR     R0,R4           ; R4 = 377(8) XOR номер_сетевой_станции
        MOV     #50000,R1       ; R1 = адрес расположения загрузчика
        EMT     0               ; Посылка и чтение очередного байта
        MOV     R0,R3           ; R3 = считанный байт
        XOR     R0,R4           ; Подсчет контрольной суммы
164372$:EMT     0               ; Посылка и чтение очередного байта
        CMPB    #373,R0         ; Считанный байт равен 373(8) ?
        BLOS    164410$         ; Выше или равен 373(8)
        XOR     R0,R4           ; Подсчет контрольной суммы
        MOVB    R0,(R1)+        ; Передача принятого байта в память
        BR      164372$
164410$:BNE     164426$         ; Принятый байт равен не равен 373(8)
        EMT     0               ; Посылка и чтение очередного байта
        COM     R0              ; Инверсия принятого байта
        XOR     R0,R4           ; Подсчет контрольной суммы
        MOVB    R0,(R1)+        ; Передача принятого байта в память
        COM     R0              ; Инверсия для передачи
        BR      164372$
164426$:CMPB    #374,R0         ; Принятый байт равен 374(8)
        BNE     164244$         ; Нет
        EMT     0               ; Посылка и передача байта
        CMPB    R0,R4           ; Он равен контрольной сумме ?
        BNE     164244$         ; Нет
        EMT     0               ; Посылка и передача байта
        BISB    #10,R0          ; R0 = R0 OR 10(8)
        EMT     0               ; Посылка и передача байта
        CMPB    #377,R0         ; Принятый байт равен 377(8)
        BNE     164244$         ; Нет
        EMT     0               ; Посылка и передача байта
        MOV     #4,@#176560     ; Включение кольцевой сети
        MTPS    #340            ; Запретить прерывания
        JMP     @#50000         ; Переход на исполнение загрузчика
; Подпрограмма передачи байта в локальную сеть (исполнение команды EMT)
164500$:TSTB    @#176564        ; Передатчик СА готов ?
        BPL     164500$         ; Нет
        MOVB    R0,@#176566     ; Передача байта в сеть
; Подпрограмма чтения байта, пришедшего по сети (исполнение команды TRAP)
164512$:TSTB    @#176560        ; Приемник СА готов ?
        BPL     164512$         ; Нет
        MOVB    @#176562,R0     ; Прием байта из сети
        RTI
; Подпрограмма исполнения прерываний таймера
164526$:CLR     @#176560        ; Включение режима загрузки
        INC     (PC)+           ; Инкремент счетчика ожидания
164534$:.WORD   0
        CMP     164534$,#1000   ; Счетчик ожидания превысил лимит времени ?
        BHI     164550$         ; Да
        RTI
164550$:JMP     164244$
; Блок передачи в сеть
164554$:.BYTE   377,0,0,204,0,0,0,0,0,0,0,0,0,374,173,60,377,376,0,0
; Программа теста локальной сети
164600$:MTPS    #340            ; Запретить прерывания
        MOV     #165130$-164600$+1000,@#360 ; Уст. вект. прер. приемника СА
        MOV     #165120$-164600$+1000,@#100 ; Уст. вект. прер. сет. таймера
        MOV     #165254$-164600$+1000,@#4 ; Уст. вект. прер. по ош. обр. к кан.
        MOV     #165264$-164600$+1000,@#10 ; Уст. вект. прер. по недейст. ком.
        MOV     #340,R0         ; Установить знач. ССП при вызове прер.
        MOV     R0,@#362
        MOV     R0,@#102
        MOV     R0,@#6
        MOV     R0,@#12
        CLR     (PC)+           ; Установить пассивный режим
164662$:.WORD   0
        CALL    165304$         ; Вывести номер сетевой станции
        MTPS    #0              ; Разрешить прерывания
164674$:TSTB    @#177560        ; Нажата клавиша ?
        BPL     164674$         ; Нет
        MOVB    @#177562,R0     ; R0 = код нажатой клавиши
        BIC     #177600,R0
        CMPB    #3,R0           ; Нажата комбинация <УПР+C>
        BNE     164726$         ; Нет
        CALL    164744$         ; Запрос команды и ее исполнение
        BR      164674$
164726$:TST     164662$         ; Режим активный или пассивный ?
        BEQ     164674$         ; Пассивный режим
        MOVB    R0,R1           ; R1 = код нажатой клавиши
        CALL    165104$         ; Посылка в сеть
        BR      164674$
; Подпрограмма запроса команды и ее исполнение
164744$:TSTB    @#177564        ; Готовность перед. канала 0 (терминал)
        BPL     164744$         ; Не готов
        MOVB    #'?,@#177566    ; Вывести промптер '?'
164760$:TSTB    @#177560        ; Нажата клавиша ?
        BPL     164760$
        MOVB    @#177562,R0     ; R0 = код нажатой клавиши
        BIC     #177640,R0
        CMPB    R0,#'A          ; Нажата 'A' (активный режим) ?
        BEQ     165046$         ; Да
        CMPB    R0,#'P          ; Нажата 'P' (пассивный режим) ?
        BEQ     165056$         ; Да
        CMPB    R0,#'N          ; Нажата 'N' (номер станции) ?
        BEQ     165076$         ; Да
        CMPB    R0,#'K          ; Нажата 'K' (конец теста) ?
        BEQ     165064$         ; Да
        TST     164662$         ; Активный/пассивный режим ?
        BEQ     165102$         ; Пассивный режим
        MOVB    #3,R1
        CALL    165104$         ; Посылка в сеть
        BR      165102$
; Активный режим
165046$:MOV     #1,164662$      ; Установить признак активного режима
        BR      165102$
; Пассивный режим
165056$:CLR     164662$         ; Установить признак пассивного режима
        BR      165102$
; Конец теста
165064$:MOV     #165504$-164600$+1000,R5 ; Адрес строки "КОНЕЦ ТЕСТА"
        CALL    165402$         ; Вывести на экран
        HALT                    ; Выход в пультовый отладчик
; Номер станции
165076$:CALL    165304$         ; Вывести номер станции на экран
165102$:RETURN
; Подпрограмма передачи данных в сеть
165104$:TSTB    @#176564        ; Передатчик готов ?
        BPL     165104$         ; Нет
        MOVB    R1,@#176566     ; Послать байт в сеть
        RETURN
; Подпрограмма обработки событий сетевого таймера
165120$:MOV     #100,@#176560   ; Установить режим прерываний СА
        RTI
; Подпрограмма обработки прерываний от СА
165130$:MOV     R1,-(SP)
        BIT     #110001,@#176560 ; Есть ошибки передачи ?
        BNE     165176$         ; Да
        MOVB    @#176562,R1     ; R1 = принятые данные
165146$:TSTB    @#177564        ; Готовность терминала
        BPL     165146$         ; Не готов
        MOVB    R1,@#177566     ; Вывести принятый символ на экран
        TST     164662$         ; Активный/пассивный режим
        BNE     165172$         ; Активный
        CALL    165104$         ; Послать данные в сеть
165172$:MOV     (SP)+,R1
        RTI
165176$:MOV     @#176560,R1     ; R1 = регистр состояния приемника СА
        BPL     165210$         ; Ошибка паритета отсутствует
        BIS     #4,R1           ; Установить признак ошибки паритета
165210$:BIT     #10000,R1       ; Есть ошибки переполнения ?
        BEQ     165222$         ; Нет
        BIS     #2,R1           ; Установить признак переполнения
165222$:BIC     #177770,R1      ; Выделить ошибку разрыва линии
        BIS     #60,R1          ; Перевод BIN -> ASCII
        MOVB    R1,165420$+7
        MOV     #165420$-164600$+1000,R5 ; Адрес сообщения "СБОЙ #X"
        CALL    165402$         ; Вывести сообщение на экран
        TSTB    @#176562        ; Сбросить готовность приемника СА
        BR      165172$
; Подпрограмма обработки прерывания 4 (ошибка обращения к каналу)
165254$:MOV     #"04,165461$+15 ; Номер прерывания в сообщение
        BR      165272$
; Подпрограмма обработки прерывания 10 (зарезервированная инструкция)
165264$:MOV     #"10,165461$+15 ; Номер прерывания в сообщение
165272$:MOV     #165461$-164600$+1000,R5 ; Адрес сообщения "ПРЕРЫВАНИЕ #XX"
        CALL    165402$         ; Вывести сообщение на экран
        HALT                    ; Переход в режим пультового отладчика
; Подпрограмма вывода на экран номера сетевой станции
165304$:MOVB    @#176561,R0     ; Выделение номера станции, перевод
        MOVB    R0,R1           ; из BIN в ASCII и запоминание в строке
        BICB    #360,R0         ; "ТЕСТ СТАНЦИИ #XX"
        BICB    #237,R1
        ASRB    R1
        BISB    R1,R0
        MOV     R0,R1
        BIC     #177770,R1
        BIS     #60,R1
        MOVB    R1,165434$+20
        MOV     R0,R1
        ASR     R1
        ASR     R1
        ASR     R1
        BIC     #177770,R1
        BIS     #60,R1
        MOVB    R1,165434$+17
        MOV     #165434$-164600$+1000,R5 ; Адрес строки "ТЕСТ СТАНЦИИ #XX"
        CALL    165402$         ; Вывести строку на экран
        RETURN
; Подпрограмма вывода строки на экран
165402$:TSTB    @#177564        ; Готовность к принятию символа
        BPL     165402$         ; Не готов
        MOVB    (R5)+,@#177566  ; Вывести очередной символ на экран
        BNE     165402$         ; Еще не конец строки
        RETURN
165420$:.ASCIZ  <16>/sboj #0/<17><15><12>
165434$:.ASCIZ  <16>/test stancii #00/<17><15><12>
165461$:.ASCIZ  <16>/prerywanie #00/<17><15><12>
165504$:.ASCIZ  <16>/konec testa/<17><15><12>
        .EVEN
165524$:.WORD   0,0,0,0,0,0
; Загрузчик из стыка С2
165540$:TSTB    @#176574        ; Проверка готовности передатчика
        BPL     165540$         ; Не готов
        MOV     #100,@#176576   ; Послать код 100(8) (готовность к обмену)
        CLR     R1              ; R1 = 0 (адрес считывания BOOT)
        MOV     #1000,R2        ; R2 = 1000 (размер BOOT)
165562$:TSTB    @#176570        ; Приемник готов ?
        BPL     165562$         ; Нет
        MOVB    @#176572,(R1)+  ; Переслать принятый байт в память
        SOB     R2,165562$
        CMP     @#0,#240        ; Первая команда BOOT равна NOP ?
        BEQ     165610$         ; Да
        HALT                    ; Переход в режим пультового отладчика
165610$:CLR     PC              ; Переход к исполнению BOOT
; Обработка команд FIS (FADD, FSUB, FMUL, FDIV)
165612$:MOV     R2,@167502$     ; Сохранить R2
        MOV     167502$,R2      ; R2 = адрес блока сохранения
        ADD     #2,R2
        MOV     R0,(R2)+        ; Сохранить регистры,СК и ССП
        $MFPC$
        MOV     R0,14(R2)
        $MFPS$
        MTPS    R0
        MOV     R0,16(R2)
        MOV     R1,(R2)+
        MOV     @167502$,(R2)+
        MOV     R3,(R2)+
        MOV     R4,(R2)+
        MOV     R5,(R2)+
        MOV     SP,(R2)+
        MOV     (R2)+,R5        ; R5 = Значение СК за командой FIS
        SUB     #2,R5           ; Получение адреса команды FIS
        ADD     #2,R2
        $MFPM$                  ; Прочесть код команды FIS
        MOV     R0,R1           ; R1 = код команды FIS
        BIC     #177770,R0      ; Выделение поля регистра
        ASL     R0              ; Доступ к сохр. значению регистра
        ADD     167502$,R0
        ADD     #2,R0
        MOV     R0,(R2)+
        MOV     @R0,R5          ; R5 = значение регистра (указ. на блок арг.)
        BIT     #1,R5           ; Адрес блока нечетный ?
        BNE     166002$         ; Да
        CLR     @167502$
        CLR     @R2
        $MFPM$                  ; Прочесть аргументы
        MOV     R0,R2           ; R2 = старшая часть аргумента B
        $MFPM$
        MOV     R0,R3           ; R3 = младшая часть аргумента B
        $MFPM$
        MOV     R0,R4           ; R4 = старшая часть аргумента A
        $MFPM$
        MOV     R0,R5           ; R5 = младшая часть аргумента A
        BIC     #177747,R1      ; Выделение поля кода операции
        ASR     R1              ; Переход на нужную п/п
        ASR     R1
        ADD     PC,R1
165772$:ADD     #166112$-165772$,R1
        ADD     @R1,R1
        JMP     @R1
166002$:MOV     #4,R5           ; R5 = адрес вектора по ош. обр. к каналу
166006$:$MFPM$                  ; Прочесть загр. значение СК
        MTPS    #200
        $MTPC$                  ; Установить значение РКСК
        $MFPM$                  ; Прочесть загр. знач. ССП
        $MTPS$                  ; Установить значение РКСП
        MOV     167502$,R0
        ADD     #4,R0
        MOV     (R0)+,R1        ; Восстановить регистры
        MOV     (R0)+,R2
        MOV     (R0)+,R3
        MOV     (R0)+,R4
        MOV     (R0)+,R5
        MOV     (R0)+,SP
        MOV     SP,R5           ; R5 = Указатель вершины стека
        MOV     2(R0),R0        ; R0 = сохраненное значение ССП
        $MTPM$                  ; Занести в стек
        MOV     167502$,R0
        MOV     20(R0),R0       ; R0 = сохраненное значение СК
        $MTPM$                  ; Занести в стек
        MOV     167502$,R0
        MOV     R5,SP           ; Подкорректировать указатель стека
        MOV     14(R0),R5       ; Восстановить R5
        MOV     2(R0),R0        ; Восстановить R0
        JMP     167500$
; Смещения подпрограмм исполнения действий с ПЗ (FADD, FSUB, FMUL, FDIV)
166112$:.WORD   166624$-166112$,166620$-166112$
        .WORD   166122$-166112$,166416$-166112$
; Подпрограмма эмуляции команды FMUL
166122$:BIT     #77600,R2       ; Порядок B = 0 ?
        BEQ     166406$         ; Да
        BIT     #77600,R4       ; Порядок A = 0 ?
        BEQ     166406$         ; Да
        MOV     167502$,R1      ; R1 = адрес буфера сохранения
        MOV     R2,R0           ; R0 = старшая часть аргумента B
        BPL     166152$         ; B >= 0
        INC     26(R1)          ; Аргумент B отрицательный
166152$:TST     R4
        BPL     166162$         ; A >= 0
        INC     26(R1)          ; Аргумент A отрицательный
166162$:MOV     R4,R1           ; R1 = старшая часть аргумента A
        BIC     #100177,R0      ; Выделение порядка B в R0
        BIC     #100177,R1      ; Выделение порядка A в R0
        BIC     #177600,R2      ; Выделение старшей части мантиссы B
        BIC     #177600,R4      ; Выделение старшей части мантиссы A
        BIS     #200,R2         ; Установка скрытого разряда мантиссы B
        BIS     #200,R4         ; Установка скрытого разряда мантиссы A
        ADD     R1,R0           ; R0(порядок B) = порядок_B + порядок_A
        SUB     #40200,R0       ; Вычитание 129
        MOV     167502$,R1      ; R1 = адрес блока сохранения
        MOV     R0,@R1          ; Сохранить сложенный порядок
        MOV     R2,30(R1)       ; Сохранить в буфере мантиссу B
        MOV     R3,32(R1)
; /-------------------------------------------------------------------------\
; !              ПРИНЦИП УМНОЖЕНИЯ ДВУХ 32-РАЗРЯДНЫХ ЧИСЕЛ                  !
; !                                                                         !
; !       Два 32-разрядных числа A и B можно представить как :              !
; !                                                                         !
; !     A = ab, где a - старшая его часть, а b - младшая                    !
; !     B = cd, где c - старшая его часть, а d - мдадшая                    !
; !                                                                         !
; !       Далее реализуется хорошо известный принцип столбика:              !
; !                                                                         !
; !              c   d                                                      !
; !              a   b                                                      !
; !             -------                                                     !
; !                bd                                                       !
; !               bc                                                        !
; !               ad                                                        !
; !              ac                                                         !
; \-------------------------------------------------------------------------/
        MOV     R2,R0           ; R0 = старшая часть мантиссы B(c)
        ASL     R2              ; Умножение ст.ч. B на 2 и дел. мл.ч. A на 2
        ROR     R5              ; для избавления от знакового разр. в A
        BCC     166260$         ; Отсутствует остаток от деления на 2
        MUL     R5,R2           ; (R2,R3) = bc
        ADD     R0,R3           ; Прибавление остатка
        ADC     R2
        BR      166262$
166260$:MUL     R5,R2           ; (R2,R3) = bc
166262$:MOV     167502$,R0      ; R0 = адрес буфера сохранения
        MOV     32(R0),R0       ; R0 = младшая часть мантиссы B(d)
        ASL     R4              ; Избавление от знаковых разрядов в d
        ROR     R0
        BCC     166312$         ; Отсутствует остаток от деления на 2
        MUL     R4,R0           ; (R0,R1) = ad
        ASR     R4              ; Приведение a к нормальному виду
        ADD     R4,R3           ; Прибавление остатка к bc
        ADC     R2
        BR      166316$
166312$:MUL     R4,R0           ; (R0,R1) = ad
        ASR     R4              ; Приведение a к нормальному виду
166316$:ADD     R1,R3           ; (R2,R3) = bc + ad
        ADC     R2
        ADD     R0,R2
        MOV     167502$,R0      ; R0 = адрес буфера сохранения
        MOV     30(R0),R0       ; R0 = старшая часть мантиссы B(c)
        MUL     R4,R0           ; (R1) = ac
        ADD     R1,R2           ; (R2,R3) = (bc + ad) + ac
        MOV     167502$,R0      ; R0 = адрес буфера сохранения
        MOV     32(R0),R0       ; R0 = младшая часть мантиссы B(d)
        CLC
        ROR     R0              ; d = d/2 (b уже поделено (R5))
        MUL     R5,R0           ; (R0,R1) = b/2 * d/2 = bd /4
        ASHC    #2,R0           ; (R0,R1) = bd/4 * 4 = bd
        ADD     R0,R3           ; (R2,R3) = ((bc + ad) + ac) + bd)
        ADC     R2
        CLR     R1              ; Суть этой команды состоит в сбросе бита C
        ROR     R2              ; Первый этап нормализации мантиссы
        ROR     R3              ; (избавление от знакового разряда)
        ASHC    #72,R2          ; Нормализация мантиссы
        ROR     R1              ; Сброс бита C
        JMP     167140$
; Получение нулевого результата
166406$:CLR     R2              ; (R2,R3) = 0.0
        CLR     R3
        JMP     167306$
; Подпрограмма эмуляции команды FDIV
166416$:BIT     #77600,R2       ; B = 0 (деление на нуль) ?
        BNE     166432$         ; Нет
        CLR     R5              ; Слово ошибок = 0
166426$:JMP     167330$         ; Деление на нуль
166432$:BIT     #77600,R4       ; A = 0 (нуль / ... = нуль) ?
        BEQ     166406$         ; Да
        MOV     167502$,R1      ; R1 = адрес блока сохранения
        MOV     R2,R0           ; R0 = старшая часть B
        BPL     166454$         ; B >= 0
        INC     26(R1)          ; Аргумент B отрицательный
166454$:TST     R4
        BPL     166464$         ; A >= 0
        INC     26(R1)          ; Аргумент A отрицательный
166464$:MOV     R4,R1           ; R1 = старшая часть A
        BIC     #100177,R0      ; Выделение порядка B в R0
        BIC     #100177,R1      ; Выделение порядка A в R0
        BIC     #177600,R2      ; Выделение старшей части мантиссы B
        BIC     #177600,R4      ; Выделение старшей части мантиссы A
        BIS     #200,R2         ; Установка скрытого разряда мантиссы B
        BIS     #200,R4         ; Установка скрытого разряда мантиссы A
        SUB     R0,R1           ; R1(порядок A) = порядок_A - порядок_B
        ADD     #37600,R1               ; Прибавить 127
        MOV     R1,@167502$     ; Сохранить порядок
; /-------------------------------------------------------------------------\
; !                ПРИНЦИП ДЕЛЕНИЯ ДВУХ 32-РАЗРЯДНЫХ ЧИСЕЛ                  !
; !                                                                         !
; !       Деление осуществляется методом "угла" с порязрядным сдвигом       !
; !     влево аргумента A и результата. Алгоритм вычисления представлен     !
; !     ниже :                                                              !
; !     результат := 40                                                     !
; !     нц повторять                                                        !
; !     | если A < B                                                        !
; !     | | то                                                              !
; !     | | | результат := результат * 2                                    !
; !     | | | A := A * 2                                                    !
; !     | | иначе                                                           !
; !     | | | A := A - B                                                    !
; !     | | | результат := результат * 2 + 1                                !
; !     | | | A := A * 2                                                    !
; !     | все                                                               !
; !     кц пока результат[31] = 0                                           !
; !     результат[31] := 0                                                  !
; \-------------------------------------------------------------------------/
        MOV     #40,R1          ; Бит признака конца операции
        CLR     R0
166536$:CMP     R4,#200         ; Мантисса A < 0.5
        BLT     166566$         ; Да
        SUB     R3,R5           ; (R4,R5) = (R4,R5) - (R2,R3)
        SBC     R4
        SUB     R2,R4
        BMI     166560$         ; Мантисса A < B
        SEC                     ; Установить бит C (+ 1 для результата)
        BR      166570$
166560$:ADD     R3,R5           ; (R4,R5) = (R4,R5) + (R2,R3) (восстановление
        ADC     R4              ; мантиссы A)
        ADD     R2,R4
166566$:CLC                     ; Сбросить бит C (+ 0 для результата)
166570$:ROL     R1              ; Результат := результат * 2 + бит_C
        ROL     R0
        ASL     R5              ; A := A * 2
        ROL     R4
        TST     R0              ; Результат[31] = 0 ?
        BPL     166536$         ; Нет
        BIC     #100000,R0      ; Результат[31] := 0
        MOV     R0,R2           ; (R2,R3) = (R0,R1)
        MOV     R1,R3
        JMP     167140$
; Подпрограмма эмуляции команды FSUB
166620$:ADD     #100000,R2      ; B := (-B)
; Подпрограмма эмуляции команды FADD
166624$:BIT     #77600,R2       ; Аргумент B = 0 ?
        BNE     166660$         ; Нет
        BIT     #77600,R4       ; Аргумент A = 0 ?
        BNE     166650$
        CLR     R2              ; Результат := 0
        CLR     R3
        JMP     167306$
166650$:MOV     R4,R2           ; Результат := A (B = 0)
        MOV     R5,R3
166654$:JMP     167306$
166660$:BIT     #77600,R4       ; Аргумент A = 0 ?
        BEQ     166654$         ; Да (результат := B (A = 0))
        MOV     R2,R0           ; R0 = старшая часть аргумента B
        BIC     #177600,R2      ; Выделение старшей части мантиссы B
        BIS     #200,R2         ; Установка скрытого разряда
        TST     R0              ; Аргумент B < 0 ?
        BPL     166712$         ; Нет
        NEG     R3              ; Изменить знак мантиссы B
        ADC     R2
        NEG     R2
166712$:MOV     R4,R1           ; R1 = старшая часть аргумента A
        BIC     #177600,R4      ; Выделение старшей части мантиссы A
        BIS     #200,R4         ; Установка скрытого разряда
        TST     R1              ; Аргумент A < 0 ?
        BPL     166736$         ; Нет
        NEG     R5              ; Изменить знак мантиссы A
        ADC     R4
        NEG     R4
166736$:BIC     #100177,R0      ; Выделение порядка аргумента B
        BIC     #100177,R1      ; Выделение порядка аргумента A
        MOV     R1,@167502$     ; Запомнить порядок аргумента A
        SUB     R1,R0           ; R0 = порядок_B - порядок_A
        BNE     166762$         ; Порядки не равны
        CLR     R1              ; Последние разряды равны нулю
        BR      167074$
166762$:BMI     167034$         ; Порядок A > порядок B
        ADD     R0,@167502$     ; Сохранить порядок аргумента B (A+B-A=B)
        CLR     R1              ; Последние разряды равны нулю
        CMP     R0,#6000        ; Разность порядков больше 24
        BLE     167006$         ; Нет
        CLR     R4              ; Мантисса A равна нулю
        CLR     R5
        BR      167074$
167006$:ASL     R0              ; Перенос порядка в младшие разряды
        SWAB    R0
        NEG     R0              ; Изменение знака для осущ. сдвига вправо
        INCB    R0              ; +1 (далее для отлавл. двух выдвин. разр.)
        BEQ     167024$
        ASHC    R0,R4           ; Сдвинуть мантиссу A вправо
        ROR     R1              ; Запомнить последний разряд
167024$:ASHC    #77,R4          ; Сдвинуть мантиссу A на 1 разряд вправо
        ROR     R1              ; Запомнить предпоследний разряд
        BR      167074$
167034$:CLR     R1              ; Последние разряды равны нулю
        CMP     R0,#172000      ; Разность порядков больше -24
        BGE     167052$         ; Нет
        CLR     R2              ; Мантисса B равна нулю
        CLR     R3
        BR      167074$
167052$:ASL     R0              ; Перенос порядка в младшие разряды
        SWAB    R0
        INCB    R0              ; +1 (для отлавливания 2 выдвинутых разрядов)
        BEQ     167066$
        ASHC    R0,R2           ; Сдвинуть мантиссу B вправо
        ROR     R1              ; Запомнить последний разряд
167066$:ASHC    #77,R2          ; Сдвинуть мантиссу B на 1 разряд вправо
        ROR     R1              ; Запомнить предпоследний разряд
167074$:ADD     R5,R3           ; (R2,R3) = (R2,R3) + (R4,R5)
        ADC     R2
        ADD     R4,R2
        BPL     167130$         ; Результат > 0
        NEG     R1              ; Изменить знак мантиссы
        ADC     R3
        ADC     R2
        NEG     R3
        ADC     R2
        NEG     R2
        MOV     167502$,R0      ; R0 = адрес буфера сохранения
        INC     26(R0)          ; Результат получился отрицательный
167130$:MOV     R3,R4           ; Проверка на нул. мантиссу (отсюда рез. 0)
        BIS     R1,R4
        BIS     R2,R4
        BEQ     167306$         ; Мантисса нулевая
167140$:CMP     R2,#400         ; Мантисса >= 1.0 ?
        BLO     167164$         ; Нет
        ROR     R2              ; Сдвиг мантиссы вправо на 1 разряд
        ROR     R3
        ROR     R1
        ADD     #200,@167502$   ; Порядок := порядок + 1
        BR      167140$
167164$:CMP     R2,#200         ; Мантисса < 0.5 ?
        BHIS    167210$         ; Нет
        ASL     R1              ; Сдвиг мантиссы влево на 1 разряд
        ROL     R3
        ROL     R2
        SUB     #200,@167502$   ; Порядок := порядок - 1
        BR      167164$
167210$:ROL     R1              ; Бит C := предпоследний разряд
        ADC     R3              ; Прибавить предпоследний разряд (округление)
        ADC     R2
167216$:CMP     R2,#400         ; Мантисса >= 1.0
        BLO     167242$         ; Нет
        ROR     R2              ; Сдвиг мантиссы вправо на 1 разряд
        ROR     R3
        ROR     R1
        ADD     #200,@167502$   ; Порядок := порядок + 1
        BR      167216$
167242$:CLR     R5              ; Регистр признаков = 0
        MOV     @167502$,R4     ; R4 = порядок
        BEQ     167334$         ; Порядок равен нулю (исчезновение порядка)
        BPL     167262$         ; Положительный порядок
        ROL     R4
        BPL     167340$         ; Переполнение порядка
        BR      167334$         ; Исчезновение порядка
167262$:MOV     167502$,R0      ; R0 = адрес буфера сохранения
        ROR     26(R0)          ; Результат отрицательный ?
        BCC     167300$         ; Нет
        BIS     #100000,R2      ; Установка знакового разряда
167300$:BIC     #200,R2         ; Сброс скрытого бита
        BIS     R4,R2           ; Установить поле порядка
167306$:CLR     R5              ; Регистр признаков = 0
        TST     R2              ; Установить ССП
        BNE     167320$         ; Результат не равен нулю
        BIS     #4,R5           ; Установить бит Z
167320$:BPL     167350$         ; Результат больше нуля
        BIS     #10,R5          ; Установить бит N
        BR      167350$
167330$:BIS     #1,R5           ; R5 = 13 (деление на нуль)
167334$:BIS     #10,R5          ; R5 = 12 (исчезновение порядка)
167340$:BIS     #2,R5           ; R5 = 2 (переполнение порядка)
        BIS     #100000,R5      ; Признак регистра ошибок
167350$:MOV     167502$,R0      ; R0 = адрес буфера сохранения
        BIC     #157,22(R0)     ; Сброс битов N,Z,V,C в сохр. ССП
        BISB    R5,22(R0)       ; Установка битов признаков из R5
        TST     R5              ; Произошла ошибка ?
        BPL     167402$         ; Нет
        MOV     #244,R5         ; R5 = адрес вект. прер. при ош. с числами ПЗ
        JMP     166006$
167402$:ADD     #4,@24(R0)      ; Прибавить 4 к содерж. рег. из кода опер.
        MOV     @24(R0),R5      ; R5 = адрес памяти для записи результата
        ADD     #4,R5
        MOV     20(R0),R4       ; R4 = сохр. значение СК
        MOV     22(R0),R0       ; R0 = сохр. значение ССП
        MTPS    #200            ; Запретить прерывания
        $MTPS$                  ; Установить РКСП
        MOV     R4,R0
        $MTPC$                  ; Установить РКСК
        MOV     R3,R0
        $MTPM$                  ; Запись младшей части результата
        MOV     R2,R0
        $MTPM$                  ; Запись старшей части результата
        MOV     167502$,R0      ; R0 = адрес буфера сохранения
        CMP     (R0)+,(R0)+
        MOV     (R0)+,R1        ; Восстановить регистры
        MOV     (R0)+,R2
        MOV     (R0)+,R3
        MOV     (R0)+,R4
        MOV     (R0)+,R5
        MOV     @R0,SP
        MOV     -14(R0),R0
167500$:$RUN$                   ; Продолжить программу
167502$:.WORD   167504$         ; Адрес буфера сохранения
; Буфер сохранения (текущий порядок,R0,R1,R2,R3,R4,R5,SP,PC,PS,указатель на
;  поле регистра из инструкции FP,знак результата,2 слова для промежуточного
;  хранения мантиссы)
167504$:.BLKW   16
; Подпрограмма исполнения пункта меню ЗАГРУЗКА [тестирование]
167540$:CLR     @#177656        ; Номер прохода
        CLR     @#177654        ; Число ошибок
        MOV     #177700,R1      ; R1 = адрес буфера регистрации ошибок
        MOV     #10,R2          ; Размер буфера
167560$:CLR     (R1)+           ; Цикл очистки буфера
        SOB     R2,167560$
        JSR     R4,163006$      ; Вывод заголовка на экран
        .WORD   170116$
167572$:CLV
        INC     @#177656        ; Увеличить номер прохода
        BVC     167610$         ; Нет переполнения
        MOV     #-1,@#177656    ; Номер прохода равен 65535
167610$:JSR     R4,163006$      ; Вывод надписи "ПРОХОД:"
        .WORD   170165$
        MOV     @#177656,R3     ; R3 = номер прохода
        CALL    170032$         ; Перевод номера прохода в строку символов
        JSR     R4,163006$      ; Вывод номера прохода на экран
        .WORD   177660
        MOV     #33,R0          ; Посылка ESC <276> (тест в области ПП)
        CALL    172632$
        MOV     #276,R0
        CALL    172632$
        CALL    170632$         ; Тестирование процессора (ЦП)
        TST     R0              ; Есть ошибки ?
        BEQ     167704$         ; Нет
        MOV     #16,R0          ; R0 = смещение в буфере регистрации ошибок
        CMP     #-1,177700(R0)  ; Число ошибок достигло максимума ?
        BEQ     167704$         ; Да
        INC     177700(R0)      ; Увеличить счетчик числа ошибок
167704$:CLR     R4              ; R4 = 0 (начальный адрес памяти ЦП)
        MOV     #160000,R5      ; R5 = размер ОЗУ ЦП
        CALL    170224$         ; Тестирование памяти
        TST     R0              ; Есть ошибки ?
        BEQ     167742$         ; Нет
        MOV     #14,R0          ; R0 = смещение в буфере регистрации ошибок
        CMP     #-1,177700(R0)  ; Число ошибок достигло максимума ?
        BEQ     167742$         ; Да
        INC     177700(R0)      ; Увеличить счетчик числа ошибок
167742$:CALL    172614$         ; Ожид. симв. с кодом 177(8)(ПП кончил тест)
        CLR     @#177654        ; Общее число ошибок = 0
        MOV     #177700,R1      ; R1 = адрес буфера регистрации ошибок
        MOV     #10,R2          ; R2 = размер буфера
        CLV
167764$:ADD     (R1)+,@#177654  ; Цикл получения общей суммы
        BVC     170002$         ; Нет переполнения
        MOV     #-1,@#177654    ; Общее число ошибок = 65535
        BR      170004$
170002$:SOB     R2,167764$
170004$:JSR     R4,163006$      ; Вывод надписи "ОШИБОК:"
        .WORD   170204$
        MOV     @#177654,R3     ; R3 = число ошибок
        CALL    170032$         ; Перевод числа ошибок в строку символов
        JSR     R4,163006$      ; Вывод числа ошибок на экран
        .WORD   177660
        BR      167572$
; Подпрограмма перевода 16-разрядного числа в его ASCII-представление
170032$:MOV     #177660,R0      ; R0 = адрес буфера приема символов
        MOV     #6,R2           ; R2 = размер буфера
170042$:MOVB    #40,(R0)+       ; Инициализация буфера (заполнение пробелами)
        SOB     R2,170042$
        CLRB    @R0             ; Отметить конец буфера
170052$:CLR     -(SP)           ; Остаток от деления равен 0 (инициализация)
        MOV     #16.,R1         ; R1 = число разрядов
170060$:ASL     R3              ; Цикл дел. на 10, частное в R3, остаток в @SP
        ROL     @SP
        CMP     @SP,#10.
        BMI     170100$
        SUB     #10.,@SP
        INC     R3
170100$:SOB     R1,170060$
        ADD     #'0,@SP         ; Преобразование из BIN в ASCII
        MOVB    (SP)+,-(R0)     ; Занести символ в буфер
        TST     R3              ; Деление окончено ?
        BNE     170052$         ; Нет
        RETURN
170116$:.BYTE   33,'H,33,'J,33,'Y,'%,':,33,244
        .ASCII  <16>/t e s t i r o w a n i e/
        .BYTE   33,277,244,17,0
170165$:.ASCIZ  <33>/Y(5/<16>/prohod: /<17>
170204$:.ASCIZ  <16>/    o{ibok: /<17>
        .EVEN
; Подпрограмма тестирования оперативного запоминающего устройства
170224$:MOV     R4,R1           ; R1 = начальный адрес ОЗУ
        CLR     R3
170230$:MOV     R1,R0           ; R0 = текущий адрес
        TST     R3              ; Прямой адрес(0), инверсный адрес(<>0)
        BEQ     170240$
        COM     R0
170240$:MOV     R0,(R1)+        ; Записать в ячейку ее адрес(прям. или инв.)
        CMP     R1,R5           ; Достигли конца ?
        BLO     170230$         ; Нет
170246$:CMP     R0,-(R1)        ; Содержимое ячейки равно ее адресу
        BEQ     170260$         ; Да
        MOV     #1,R0           ; Ошибка
        RETURN
170260$:MOV     R1,R0           ; R0 = текущий адрес
        SUB     #2,R0           ; На одну ячейку назад
        TST     R3              ; Прямой или инверсный адрес ?
        BEQ     170274$         ; Прямой
        COM     R0
170274$:CMP     R1,R4           ; Достигли начала ?
        BHI     170246$         ; Нет
        COM     R3              ; Перейти на инверсный адрес
        BNE     170230$         ; Произвести тест с инверсным адресом
        MOV     #377,-12(SP)    ; Будет заполняться младший байт
        MOV     R4,R3           ; R3 = начальный адрес
170314$:CLR     -6(SP)
        MOV     R3,-10(SP)      ; Начальный адрес
        MOV     R3,R2
        BIS     #17776,R2
        TST     (R2)+           ; Плюс 8 КБайт
        CMP     R5,R2           ; Достигли конца ?
        BHIS    170342$         ; Нет
        MOV     R5,R2           ; R2 = конечный адрес
170342$:MOV     R3,-14(SP)      ; Текущий адрес
        MOV     -10(SP),R1      ; R1 = начальный адрес
170352$:MOV     -12(SP),R0      ; R0 = образец заполнения
        CMP     R1,R3
        BNE     170370$
        ADD     #200,R3         ; Плюс 128 байт (128 байт 1..10..0,0..01..1)
        SWAB    R0              ; Изменить байты образца
170370$:BITB    #1,-6(SP)       ; Делать запись
        BNE     170402$         ; Нет
        MOV     R0,@R1          ; Записать в ячейку
170402$:CMP     R0,@R1          ; Совпадает ?
        BEQ     170414$         ; Да
        MOV     #3,R0           ; Ошибка
        RETURN
170414$:ADD     #2,R1           ; Перейти к следующей ячейке
        CMP     R1,R2           ; Достигнут конец 8-КБайтной страницы ?
        BLO     170352$         ; Нет
        INCB    -6(SP)          ; Переключить режим записи/проверки
        MOV     -14(SP),R3      ; R3 = текущий адрес
        BITB    #1,-6(SP)       ; Какой режим ?
        BNE     170342$         ; Проверка
        TST     (R3)+           ; Текущий адрес + 2
        CMP     R3,R2           ; Конец страницы ?
        BHIS    170460$         ; Да
        TSTB    -6(SP)          ; Сделано 128 проходов ?
        BPL     170342$         ; Нет
170460$:MOV     -10(SP),R3      ; R3 = текущий адрес
        SWAB    -12(SP)         ; Обменять байты образца
        BEQ     170342$         ; Младший байт = 0 (для второго прохода)
        MOV     R2,R3           ; Текущий адрес = начало след. 8-КБайтной стр.
        CMP     R2,R5           ; Достигнут конец ?
        BLO     170314$         ; Нет
        MOV     #377,-12(SP)    ; Образец заполнения
170506$:MOV     R4,R1           ; R1 = начальный адрес
        MOV     -12(SP),R0      ; R0 = образец заполнения
170514$:MOV     R0,(R1)+        ; Записать в ячейку
        CMP     R1,R5           ; Достигнут конец ?
        BLO     170514$         ; Нет
        MOV     R4,R1           ; R1 = начальный адрес
170524$:CMP     R0,@R1          ; Сравнить содержимое ячейки с образцом
        BEQ     170536$         ; Равно
        MOV     #2,R0           ; Ошибка
        RETURN
170536$:ADD     #2,R1           ; Перейти к следующей ячейке
        CMP     R1,R5           ; Достигнут конец ?
        BLO     170524$         ; Нет
        CALL    170614$         ; Задержка
        MOV     -12(SP),R0      ; R0 = образец заполнения
        MOV     R4,R1           ; R1 = начальный адрес
170560$:CMP     R0,@R1          ; Сравнить содержимое ячейки с образцом
        BEQ     170572$         ; Равно
        MOV     #3,R0           ; Ошибка
        RETURN
170572$:ADD     #2,R1           ; Перейти к следующей ячейке
        CMP     R1,R5           ; Достигнут конец ?
        BLO     170560$         ; Нет
        SWAB    -12(SP)         ; Обменять байты образца
        BEQ     170506$         ; На второй проход
        CLR     R0              ; Нет ошибок
        RETURN
; Подпрограмма реализации задержки
170614$:MOV     #1000.,R2
170620$:MOV     #1000.,R3
170624$:SOB     R3,170624$
        SOB     R2,170620$
        RETURN
; Подпрограмма тестирования процессора
170632$:CCC                     ; Сбросить все биты признаков
        BCS     170654$         ; C=1
        BVS     170654$         ; V=1
        BEQ     170654$         ; Z=1
        BMI     170654$         ; N=1
        BLT     170654$         ; N<>V
        BLE     170654$         ; (N<>V) or Z=1
        BLOS    170654$         ; Z=1 or C=1
        BHI     170660$         ; Z=0 and C=0
170654$:JMP     172604$         ; Ошибка
170660$:SEV                     ; Установить V и N
        SEN
        BVC     170674$         ; V=0
        BLT     170674$         ; N<>V
        BLE     170674$         ; (N<>V) or Z=1
        BGE     170700$         ; N=V
170674$:JMP     172604$         ; Ошибка
170700$:SEZ                     ; Установить Z и C
        SEC
        BNE     170714$         ; Z=0
        BGT     170714$         ; Z=0 and (N=V)
        BHI     170714$         ; Z=0 and C=0
        BLE     170720$         ; (N<>V) or Z=1
170714$:JMP     172604$         ; Ошибка
170720$:MOV     SP,R3
        TST     -(R3)           ; R3 = R3 - 2
        CLR     @R3
        MOV     R3,R0
        TST     -(R3)           ; R3 = R3 - 2
        MOV     R0,@R3          ; (R3) = адрес ячейки с нулевым содерж.
        MOV     R3,R4
        CCC                     ; Очистить все биты признаков
        TST     @(R3)+          ; В ячейке нуль ?
        BEQ     170750$         ; Да
        JMP     172604$         ; Ошибка
170750$:SEC                     ; Установка бита C
        ROR     @-(R3)          ; Уст. ст. разр. в 1,выдв. млад. =0 (10...0))
        BCS     170762$         ; C=1
        BVC     170762$         ; V=0
        BMI     170766$         ; N=1
170762$:JMP     172604$         ; Ошибка
170766$:CCC                     ; Очистить все биты признаков
        ASR     @(R4)+          ; Оставить старший бит (110...0)
        BVC     170776$         ; V=0
        BMI     171002$         ; N=1
170776$:JMP     172604$         ; Ошибка
171002$:CLN                     ; Очистить бит N
        ASL     @(R3)+          ; Сдвиг влево (10...0)
        BCC     171014$         ; C=0
        BVS     171014$         ; V=1
        BMI     171020$         ; N=1
171014$:JMP     172604$         ; Ошибка
171020$:SCC                     ; Установить все биты признаков
        DEC     @-(R4)          ; Минус 1 (01...1)
        BHIS    171034$         ; C=0
        BVC     171034$         ; V=0
        BEQ     171034$         ; Z=1
        BPL     171040$         ; N=0
171034$:JMP     172604$         ; Ошибка
171040$:NEG     @-(R3)          ; Смена знака (10...01)
        BCC     171050$         ; C=0
        BVS     171050$         ; V=1
        BMI     171054$         ; N=1
171050$:JMP     172604$         ; Ошибка
171054$:SEV                     ; Установка бита V
        COM     @(R4)+          ; Инверсия (01...10)
        BCC     171064$         ; C=0
        BVC     171070$         ; V=0
171064$:JMP     172604$         ; Ошибка
171070$:INC     @(R3)+          ; Плюс 1 (01...1)
        BHIS    171076$         ; C=0
        BPL     171102$         ; N=0
171076$:JMP     172604$         ; Ошибка
171102$:ADC     @-(R4)          ; Прибавление переноса (10...0)
        BCS     171112$         ; C=1
        BVC     171112$         ; V=0
        BMI     171116$         ; N=1
171112$:JMP     172604$         ; Ошибка
171116$:CCC                     ; Очистить все биты признаков
        ROL     @(R4)+          ; Сдвиг влево (0...0)
        BCC     171130$         ; C=0
        BVC     171130$         ; V=0
        BEQ     171134$         ; Z=1
171130$:JMP     172604$         ; Ошибка
171134$:INC     @-(R3)          ; Плюс 1 (0...01)
        SBC     @-(R4)          ; Вычитание переноса (0...0)
        BCS     171144$         ; C=1
        BEQ     171150$         ; Z=1
171144$:JMP     172604$         ; Ошибка
171150$:MOV     SP,R2
        TST     -(R2)           ; R2 = R2 - 2
        MOV     R2,R0
        CLR     @R0             ; Очистка (0...0)
        TST     -(R2)           ; R2 = R2 - 4
        TST     -(R2)
        MOV     R0,(R2)+        ; SP-2
        INC     R0
        MOV     R0,(R2)+        ; SP-1
        MOV     R2,R0           ; SP-2
        MOV     R2,R1           ; SP-2
        COMB    @-(R2)          ; Инверсия (High 1...1)
        BCC     171204$         ; C=0
        BMI     171210$         ; N=1
171204$:JMP     172604$         ; Ошибка
171210$:TSTB    @-(R2)          ; Проверка (Low 0...0)
        BEQ     171220$         ; Z=1
        JMP     172604$         ; Ошибка
171220$:SEV                     ; Установка бита V
        ASRB    @-(R1)          ; Сдвиг вправо (High 1...1)
        BCC     171232$         ; C=0
        BVS     171232$         ; V=1
        BMI     171236$         ; N=1
171232$:JMP     172604$         ; Ошибка
171236$:INCB    @(R2)+          ; Плюс 1 (Low 0...01)
        BCC     171244$         ; C=0
        BPL     171250$         ; N=0
171244$:JMP     172604$         ; Ошибка
171250$:CLC                     ; Сбросить бит C
        RORB    @-(R1)          ; Сдвиг вправо (Low 0...0)
        BCC     171264$         ; C=0
        BVC     171264$         ; V=0
        BNE     171264$         ; Z=0
        BPL     171270$         ; N=0
171264$:JMP     172604$         ; Ошибка
171270$:ASLB    @(R2)+          ; Сдвиг влево (High 1...10)
        BCC     171300$         ; C=0
        BVS     171300$         ; V=1
        BMI     171304$         ; N=1
171300$:JMP     172604$         ; Ошибка
171304$:ADCB    @-(R2)          ; Прибавление переноса (High 1...1)
        BCS     171312$         ; C=1
        BMI     171316$         ; N=1
171312$:JMP     172604$         ; Ошибка
171316$:SCC                     ; Установка всех битов признаков
        ROLB    @(R1)+          ; Сдвиг влево (Low 0...01)
        BLOS    171330$         ; C=1 or Z=1
        BVS     171330$         ; V=1
        BPL     171334$         ; N=0
171330$:JMP     172604$         ; Ошибка
171334$:SWAB    @-(R2)          ; Обменять байты (High 0...01  Low 1...1)
        BMI     171344$         ; N=1
        JMP     172604$         ; Ошибка
171344$:SEC                     ; Установка бита C
        SBCB    @(R1)+          ; Вычитание переноса (High 0...0)
        BCS     171354$         ; C=1
        BEQ     171360$         ; Z=1
171354$:JMP     172604$         ; Ошибка
171360$:NEGB    @(R2)+          ; Смена знака (Low 0...01)
        DECB    @-(R2)          ; Минус 1 (Low 0...0)
        BCC     171370$         ; C=0
        BEQ     171374$         ; Z=1
171370$:JMP     172604$         ; Ошибка
171374$:MOV     SP,R0           ; R0 = SP
        TST     -(R0)           ; R0 = R0 - 2
        MOV     R0,R1           ; SP-2
        CMP     -(R1),-(R1)     ; SP-6
        MOV     R0,@R1          ; -6(SP) = ADDR(-2(SP))
        MOV     R1,R2           ; SP-6
        MOV     R0,R4           ; SP-2
        TST     -(R0)           ; SP-4
        MOV     R0,R3           ; SP-4
        MOV     R0,-(R2)        ; R2 = SP-8 -8(SP) = ADDR(-4(SP))
        CLR     @R3             ; -4(SP) = 0
        CLR     @R4             ; -2(SP) = 0
        SCC                     ; Установка битов N,V,C
        CLZ
        SUB     @(R2)+,@(R1)+   ; -2(SP)=-2(SP) - -4(SP)=0
        BLO     171440$         ; C=1
        BVS     171440$         ; V=1
        BEQ     171444$         ; Z=1
171440$:JMP     172604$         ; Ошибка
171444$:BIS     #100000,@-(R2)  ; -4(SP) = 100000
        ADD     #1,@-(R1)       ; -2(SP) = 1
        SUB     @(R2)+,@(R1)+   ; -2(SP) = 1 - 100000 = 100001
        BHIS    171464$         ; C=0
        BVC     171464$         ; V=0
        BMI     171470$         ; N=1
171464$:JMP     172604$         ; Ошибка
171470$:NEG     @R4             ; -2(SP) = 077777
        BIT     @-(R2),@-(R1)   ; 100000 and 077777 = 0
        BEQ     171502$         ; Z=1
        JMP     172604$         ; Ошибка
171502$:CMP     @(R2)+,@(R1)+   ; 100000 - 077777 = 1 (C=1,V=1,N=0,Z=0)
        BVS     171512$         ; V=1
        JMP     172604$         ; Ошибка
171512$:COM     @-(R2)          ; Инверсия -4(SP) = 077777
        CCC                     ; Очистить все биты признаков
        ADD     @(R2)+,@-(R1)   ; -2(SP) = 077777 + 077777 = 177776
        BVC     171524$         ; C=0
        BMI     171530$         ; N=1
171524$:JMP     172604$         ; Ошибка
171530$:SEC                     ; Установка бита C
        BIC     @-(R2),@(R1)+   ; -2(SP) = 177776 and not 77777 = 100000
        BCC     171540$         ; C=0
        BMI     171544$         ; N=1
171540$:JMP     172604$         ; Ошибка
171544$:COM     @-(R1)          ; Инверсия -2(SP) = 77777
        CMP     @(R2)+,@(R1)+   ; 077777 - 077777 = 0 (C=0,V=0,N=0,Z=1)
        BEQ     171556$         ; Z=1
        JMP     172604$         ; Ошибка
171556$:MOV     SP,R0           ; R0 = SP
        TST     -(R0)           ; SP-2
        MOV     R0,R3           ; SP-2
        MOV     R3,R1           ; SP-2
        TST     -(R3)           ; SP-4
        MOV     R0,-(R3)        ; -6(SP) = ADDRB(-1(SP))
        INC     @R3
        MOV     R0,-(R3)        ; -8(SP) = ADDRB(-2(SP))
        MOV     R3,R4           ; SP-8
        TST     -(R0)           ; SP-4
        MOV     R0,-(R4)        ; -10(SP) = ADDRB(-3(SP))
        INC     @R4
        MOV     R0,-(R4)        ; -12(SP) = ADDRB(-4(SP))
        SEC                     ; Установить бит C
        MOV     #177001,@(R4)+  ; -4(SP) = 1     -3(SP) = 376
        MOVB    #200,@(R4)+     ; -3(SP) = 200
        MOVB    @-(R4),@(R3)+   ; -2(SP) = 200
        MOVB    @-(R4),@(R3)+   ; -1(SP) = 1
        BCS     171634$         ; C=1
        JMP     172604$         ; Ошибка
171634$:CMP     #600,@R1        ; 600 - 600 = 0 (C=0,V=0,N=0,Z=1)
        BEQ     171646$         ; Z=1
        JMP     172604$         ; Ошибка
171646$:CMP     -(R3),-(R3)     ; SP-8
        BISB    @(R4)+,@(R3)+   ; -2(SP) = 200 or 1 = 201
        BISB    @(R4)+,@(R3)+   ; -1(SP) = 1 or 200 = 201
        CMP     #100601,@R1     ; 100601 - 100601 = 0 (C=0,V=0,N=0,Z=1)
        BEQ     171666$         ; Z=1
        JMP     172604$         ; Ошибка
171666$:BICB    @-(R4),@-(R3)   ; -1(SP) = 201 and not 200 = 1
        BICB    @-(R4),@-(R3)   ; -2(SP) = 201 and not 1 = 200
        BITB    @(R4)+,@(R3)+   ; 1 and 200 = 0
        BNE     171702$         ; Z=0
        BITB    @-(R4),@(R3)+   ; 1 and 1 = 1
        BNE     171706$         ; Z=1
171702$:JMP     172604$         ; Ошибка
171706$:CMPB    @(R4)+,@-(R3)   ; 1 - 1 = 0 (C=0,V=0,N=0,Z=1)
        BNE     171716$         ; Z=0
        CMPB    @(R4)+,@-(R3)   ; 1 - 200 = 201 (C=1,V=1,N=1,Z=0)
        BEQ     171722$         ; Z=1
171716$:JMP     172604$         ; Ошибка
171722$:MOV     PC,R0           ; R0 = 171724
        ADD     #171736$-.,R0   ; R0 = 171736
        SCC                     ; Установить все биты признаков
        JMP     @R0             ; PC = 171736
171734$:BR      171742$
171736$:CLN                     ; Сбросить бит N
        BR      171734$
171742$:BCC     171752$         ; C=0
        BVC     171752$         ; V=0
        BNE     171752$         ; Z=0
        BPL     171756$         ; N=0
171752$:JMP     172604$         ; Ошибка
171756$:CLR     R2
        MOV     PC,R4           ; R4 = 171762
        MOV     R4,R0           ; R0 = 171762
        BR      171772$
171766$:COM     R2              ; R2 = 177777
        BR      172000$
171772$:CMP     (R4)+,(R4)+     ; R4 = 171766
        TST     (R4)+           ; R4 = 171770
        JMP     -(R4)           ; PC = 171766    R4 = 171766
172000$:INC     R2              ; R2 = 0
        BNE     172012$         ; Z=0
        CMP     (R0)+,(R0)+     ; R0 = 171766
        CMP     R0,R4           ; 171766 - 171766 = 0 (C=0,V=0,N=0,Z=1)
        BEQ     172016$         ; Z=1
172012$:JMP     172604$         ; Ошибка
172016$:MOV     PC,R2           ; R2 = 172020
        ADD     #172044$-.,R2   ; R2 = 172044
        SCC                     ; Установить биты N,C,Z
        CLV
        JSR     R1,@R2          ; PC = 172044
        TST     R2
        BEQ     172066$         ; Z=1
        JMP     172604$
172042$:RTS     R1
172044$:BCC     172060$         ; C=0
        BVS     172060$         ; V=1
        BNE     172060$         ; Z=0
        BPL     172060$         ; N=0
        CLR     R2
        BR      172042$
172060$:TST     (SP)+
        JMP     172604$         ; Ошибка
172066$:MOV     SP,R4
        TST     -(R4)           ; SP-2
        CLR     R3
        MOV     #5,R2
        MOV     #2,@R4
        SCC                     ; Установить все признаки
        MUL     @R4,R2          ; (R2,R3) = 5 * 2 = 12 (R2 = 0) (R3 = 12)
        BMI     172116$         ; N=1
        BLOS    172116$         ; Z=1 or C=1
        BVC     172122$         ; V=0
172116$:JMP     172604$         ; Ошибка
172122$:CMP     #12,R3          ; R3=12 ?
        BEQ     172134$         ; Да
        JMP     172604$         ; Ошибка
172134$:TST     R2              ; R2=0 ?
        BEQ     172144$
        JMP     172604$         ; Ошибка
172144$:CLR     R3
        MOV     #125252,R2
        MOV     #2,@R4
        MUL     @R4,R2          ; (R2,R3)=125252*2=37777652524(R2=-1)(R3=52524)
        BCC     172170$         ; C=0
        BPL     172170$         ; N=0
        BVS     172170$         ; V=1
        BNE     172174$         ; Z=0
172170$:JMP     172604$         ; Ошибка
172174$:CMP     #-1,R2          ; R2=-1 ?
        BEQ     172206$         ; Да
        JMP     172604$         ; Ошибка
172206$:CMP     #52524,R3       ; R3=52524      ?
        BEQ     172220$         ; Да
        JMP     172604$         ; Ошибка
172220$:MOV     #1,@R4
        MOV     #125252,R2
        CCC                     ; Установить биты Z,N
        SEZ
        SEN
        ASH     @R4,R2          ; R2 = 125252 << 1 = 52524
        BMI     172250$         ; N=1
        BEQ     172250$         ; Z=1
        BVC     172250$         ; V=0
        BCS     172254$         ; C=1
172250$:JMP     172604$         ; Ошибка
172254$:CMP     #52524,R2       ; R2 = 52524 ?
        BEQ     172266$         ; Да
        JMP     172604$         ; Ошибка
172266$:MOV     #-1,@R4
        MOV     #52525,R1
        ASH     @R4,R1          ; R1 = 52525 >> 1 = 25252
        CMP     R1,#25252       ; R1 = 25252 ?
        BEQ     172312$         ; Да
        JMP     172604$         ; Ошибка
172312$:CLR     R2
        MOV     #20,@R4
        MOV     #125252,R3
        CCC                     ; Установка битов Z,C
        SEZ
        SEC
        ASHC    @R4,R2          ; (R2,R3)=125252<<20=25252400000
        BPL     172344$         ; N=0
        BEQ     172344$         ; Z=1
        BVC     172344$         ; V=0
        BCC     172350$         ; C=0
172344$:JMP     172604$         ; Ошибка
172350$:CMP     #125252,R2      ; R2 = 125252 ?
        BEQ     172362$         ; Да
        JMP     172604$         ; Ошибка
172362$:TST     R3              ; R3 = 0 ?
        BEQ     172372$         ; Да
        JMP     172604$         ; Ошибка
172372$:CLR     R3
        MOV     #-20,@R4
        MOV     #125252,R2
        CLN                     ; Установка Z,V,C
        SEZ
        SEV
        SEC
        ASHC    @R4,R2          ; (R2,R3)=25252400000>>20=37777725252
        BPL     172424$         ; N=0
        BLOS    172424$         ; Z=1 or C=1
        BVC     172430$         ; C=0
172424$:JMP     172604$         ; Ошибка
172430$:CMP     #-1,R2          ; R2=-1 ?
        BEQ     172442$         ; Да
        JMP     172604$         ; Ошибка
172442$:CMP     #125252,R3      ; R3=125252 ?
        BEQ     172454$         ; Да
        JMP     172604$         ; Ошибка
172454$:MOV     #52525,@R4
        CLR     R2
        MOV     #52525,R3
        SCC                     ; Установить все биты признаков
        DIV     @R4,R2          ; (R2,R3) = 52525 / 52525 = (1,0)
        BMI     172500$         ; N=1
        BLOS    172500$         ; Z=1 or C=1
        BVC     172504$         ; V=0
172500$:JMP     172604$         ; Ошибка
172504$:CMP     R2,#1           ; R2 = 1 ?
        BEQ     172516$         ; Да
        JMP     172604$         ; Ошибка
172516$:TST     R3              ; R3 = 0 ?
        BEQ     172526$         ; Да
        JMP     172604$         ; Ошибка
172526$:MOV     #157777,R2
        MOV     #100001,R3
        MOV     #100000,@R4
        SCC                     ; Установить все биты признаков
        DIV     @R4,R2          ; (R2,R3)=33777700001/100000=(40000,100001)
        BMI     172554$         ; N=1
        BLOS    172554$         ; Z=1 or C=1
        BVC     172560$         ; V=0
172554$:JMP     172604$         ; Ошибка
172560$:CMP     R2,#40000       ; R2 = 40000 ?
        BEQ     172572$         ; Да
        JMP     172604$         ; Ошибка
172572$:CMP     R3,#100001      ; R3 = 100001 ?
        BNE     172604$         ; Z=0 (ошибка)
        CLR     R0              ; Ошибок нет
        RETURN
172604$:MOV     #1,R0           ; Есть ошибки
        RETURN
172612$:.WORD   414             ; Конец стека пультового отладчика
; Подпрограмма ввода символа с ожиданием (для ПП)
172614$:EMT     22              ; Ввод символа
        RETURN
        .WORD   0,0,0,0,0
; Подпрограмма вывода символа на экран (для ПП)
172632$:EMT     42              ; Вывод символа
        RETURN
        .WORD   0,0,0,0,0,0,0,0,0
; Указатели на ОЗУ пультового отладчика,адрес выводимой надписи,адрес открытой
; ячейки,разрешение/запрет вывода надписей. Начальное значение PS и SP.
; Объем ОЗУ в словах. Эти данные для ПП.
172660$:.WORD   450
172662$:.WORD   500
172664$:.WORD   472
172666$:.WORD   504
172670$:.WORD   0
172672$:.WORD   100000
172674$:.WORD   40000

; Начальная инициализация и вывод ошибок стартового теста
172676$:MOV     #2000,SP
        ASLB    R0
        ASLB    R0
        MOV     R0,-(SP)
        CALL    173502$         ; Полн. иниц. (уст.вект.прер. и иниц. устр.)
        MOV     (SP)+,R2        ; R2 = слово ошибок
        MOV     @#177060,R0     ; R0 = данные К0 (терминал)(слово ошибок ЦП)
        CMP     R0,#2
        BHI     172742$
        BIS     R0,R2           ; Объединить ошибки ПП и ЦП
        BEQ     172746$         ; Нет ошибок
        CALL    172764$         ; Вывод ошибок на экран
        BR      172746$
172742$:CALL    117136$         ; Поместить символ в буфер терминала
172746$:MOV     #2,@#7042       ; Передача кодов клавиатуры по каналу 0
        MTPS    #0              ; Разрешить прерывания
        JMP     174152$
; Подпрограмма вывода результатов стартового теста
172764$:JSR     R5,117204$      ; Вывод заголовка
        .WORD   173060$
        MOV     #173036$,R3     ; Адрес массива адресов надписей об ошибках
        BR      173004$
173000$:JSR     R5,117206$      ; Вывод сообщения об ошибке на экран
173004$:MOV     (R3)+,R1        ; R1 = адрес сообщения об ошибке
        ASRB    R2
        BCS     173000$         ; Есть ошибка
        BNE     173004$         ; Еще есть ошибки
        MOV     #173046$,R3     ; Адрес массива адресов об ошибках ПЗУ
        MOV     (R3)+,R1        ; R1 = адрес сообщения об ошибке
        SWAB    R2
        BNE     173000$         ; Ошибки есть
        JSR     R5,117204$      ; Вывод ESC <270> (пауза)
        .WORD   173246$
        RETURN
; Массив адресов сообщений об ошибках
173036$:.WORD   173113$,173131$,173153$,173171$
; Массив адресов сообщений об ошибках ПЗУ
173046$:.WORD   173213$,173232$,173235$,173240$,173243$
173060$:.BYTE   15,12,40,40,33,244
        .ASCII  /СТАРТОВЫЙ ТЕСТ/
        .BYTE   33,277,244,15,12,12,0
173113$:.ASCIZ  /- ошибка ЦП/<15><12>
173131$:.ASCIZ  /- ошибка ОЗУ ЦП/<15><12>
173153$:.ASCIZ  /- ошибка ПП/<15><12>
173171$:.ASCIZ  /- ошибка ОЗУ ПП/<15><12>
173213$:.ASCIZ  /- ошибка ПЗУ  /
173232$:.ASCIZ  /1 /
173235$:.ASCIZ  /2 /
173240$:.ASCIZ  /3 /
173243$:.ASCIZ  /4 /
173246$:.BYTE   33,270,0
        .EVEN
; Подпрограмма перекачки пультового отладчика в системное ОЗУ ЦП
173252$:MOV     #<160000/2>&77777,@#177010 ; Адрес начала системного ОЗУ ЦП
        MOV     #160000,R1      ; Адрес начала пультового отладчика
        MOV     #5305,R0        ; Размер перек. данных (160000 - 172611)
173270$:MOV     (R1)+,@#177014  ; Цикл перекачки
        INC     @#177010
        SOB     R0,173270$
        MOV     #173356$,R1     ; Адрес подпрограмм для ЦП
        MOV     #44,R0          ; Размер (173356 - 173465)
173312$:MOV     (R1)+,@#177014  ; Цикл перекачки в 172612 - 172721
        INC     @#177010
        SOB     R0,173312$
        MOV     @#177716,@#177014 ; (172722) = системный регистр управления
        MOV     #173466$,R1     ; Адр. мас. для уст. знач. ССП в вект.прер.
173336$:MOV     (R1)+,@#177010  ; Цикл установки
        MOV     #600,@#177014
        TST     @R1             ; Конец массива ?
        BNE     173336$         ; Нет
        RETURN
173356$:.WORD   160014$         ; Конец стека пультового отладчика (для ЦП)
                                ; Ее адрес в СОЗУ ЦП - 172612.
; Подпрограмма ввода символа с ожиданием (для ЦП). Адрес в СОЗУ ЦП - 172614.
173360$:MOV     #177560,R5      ; R5 = адрес регистра сост. К0 (клавиатура)
        $MFPM$                  ; Чтение регистра состояния
        TSTB    R0              ; Есть символ для чтения ?
        BPL     173360$         ; Нет
        $MFPM$                  ; Чтение символа
        RETURN
; Подпрограмма вывода символа на экран (для ЦП). Адрес в СОЗУ ЦП - 172632.
173376$:MOV     R0,-(SP)        ; Сохранить код символа в стеке
173400$:MOV     #177564,R5      ; R5 = адрес регистра сост. К0 (терминал)
        $MFPM$                  ; Чтение регистра состояния
        TSTB    R0              ; Можно посылать данные ?
        BPL     173400$         ; Нет
        MOV     (SP)+,R0        ; R0 = код символа
        MOV     #177566+2,R5    ; R5 = адрес рег. данных (терминал) + 2
        $MTPM$                  ; Посылка кода символа по К0
        RETURN
; Указатели на ОЗУ пультового отладчика,адрес выводимой надписи,адрес открытой
; ячейки,разрешение/запрет вывода надписей. Начальное значение PS и SP.
; Объем ОЗУ в словах. Эти данные для ЦП. Их адрес в СОЗУ ЦП - 172660.
173424$:.WORD   160050,160100,160072,160104,200,1000,70000
; Подпрограмма выбора режима работы (ЦП). Ее адрес в сист.ОЗУ ЦП - 172676.
173442$:CALL    173376$         ; Посылка по каналу 0 результатов теста
173446$:TST     @#163772        ; Ожидание ответа от ПП
        BEQ     173446$
        BPL     173462$         ; Обнаружен контроллер НГМД
        JMP     @#162440$       ; На загрузку из сети
173462$:JMP     @#160744        ; На вывод меню ЗАГРУЗКА
; Адреса знач. ССП в векторах прер. ЦП (в формате загрузки в рег.адреса)
173466$:.WORD   70001,70003,70075,70077,70137,0
; Подпрограмма проведения инициализации
173502$:CALL    107754$         ; Программная инициализация драйвера терминала
        MOV     #RETURN,@#0     ; Установка векторов внутренних прерываний
        MOV     #600,R0
        MOV     #160200$,@#4
        MOV     R0,@#6
        MOV     #160210$,@#10
        MOV     R0,@#12
        MOV     #160220$,@#24
        MOV     R0,@#26
        CALL    103564$         ; Программная инициализация драйв. клавиатуры
        CALL    126136$         ; Программная иниц. драйвера магнитофона
        CALL    135456$         ; Программная иниц. драйвера граф. дисплея
        CALL    136004$         ; Программная иниц. драйвера принтера
        CALL    100000$         ; Начальные данные для меню УСТАНОВКА
        CALL    173744$         ; Уст.вект.прер.периферийных устройств
        MOV     SP,@#7040       ; Сохранить SP
        MOV     #173632$,@#4    ; Уст.вект.ошибки обращ. к каналу
        CALL    130712$         ; Программная иниц. драйвера дисковода
        MOV     #1,R0           ; Обнаружен контроллер НГМД
        BR      173642$
173632$:MOV     @#7040,SP       ; Восстановить SP
        MOV     #-1,R0          ; Контроллер НГМД не обнаружен
173642$:MOV     #<163772$/2>&77777,@#177010 ; Адрес ключа о присут. НГМД
        MOV     R0,@#177014     ; Передать ключ
        MOV     R0,@#7044
        BIC     #1400,@#177054  ; Включить сетевой таймер в ЦП и ПП
        BIS     #100,@#177066   ; Разрешение прерывания по RESET ЦП
        CLR     @#177712        ; Очистить буферный регистр таймера
        MOV     #1,@#177710     ; Пуск программируемого таймера
173706$:MOV     #23660,R0       ; R0 = адрес начала ОЗУ ПП пользователя
        CLR     (R0)+           ; Блок свободен
        CLR     (R0)+           ; Ссылка на предыдущий блок
        MOV     #54104,@R0      ; Размер свободного блока
        ADD     (R0)+,R0        ; Переход к фиктивной области
        INC     @R0             ; Признак занятой области
        RETURN
; Подпрограмма очистки блока памяти
173730$:CLR     R0              ; Заполняемое значение (0)
        MOV     (R5)+,R1        ; Адрес начала
        MOV     (R5)+,R2        ; Размер в словах
173736$:MOV     R0,(R1)+        ; Цикл очистки
        SOB     R2,173736$
        RTS     R5
; Подпрограмма установки векторов прерываний периферийных устройств
173744$:MOV     #174270$,@#30   ; Вектор прерывания команды EMT
        CLR     @#32
        MOV     #174334$,@#34   ; Вектор прерывания команды TRAP
        MOV     #200,@#36
        MOV     #174612$,@#100  ; Вектор прерывания сетевого таймера
        MOV     #200,@#102
        MOV     #175754$,@#330  ; Вектор прерывания К1 (приемник)
        BIS     #2,@#177066     ; Разрешить прерывания по К1 (приемник)
        MOV     #175762$,@#340  ; Вектор прерывания К2 (приемник)
        MOV     #200,@#342
        BIS     #4,@#177066     ; Разрешить прерывания по К2 (приемник)
        CLR     @#23202         ; Счетчик принятых байтов по К2
        MOV     #100/2,@#177010 ; Установить вектор прерывания сетевого
        MOV     #104,@#177014   ; таймера канала ЦП
        INC     @#177010
        MOV     #200,@#177014
        INC     @#177010
        MOV     #RTI,@#177014
        MOV     #7777,@#7052
        CALL    176422$         ; Инициализация программируемого таймера
        MOV     #176130$,@#314  ; Вект. прер. по команде RESET в канале ЦП
        MOV     #200,@#316
        INC     @#7102          ; Индикатор вызова фиктивной подпрограммы
        MOV     #174222$,@#7126 ; Адрес фиктивной подпрограммы
        RETURN

;             ***  ОСНОВНОЙ   ЦИКЛ   ДИСПЕТЧЕРА   ПРОЦЕССОВ  ***

174152$:MOV     #2000,SP
        MOV     #2,@#7042       ; Передача кодов клавиатуры К0
174164$:MOV     #7060,R0        ; R0 = буфер флагов вызова
174170$:TST     (R0)+           ; Запрошен вызов
        BEQ     174170$         ; Нет
        MOV     R0,@#7056       ; Сохранить адрес флага вызова + 2
        MOV     22(R0),R1       ; R1 = адрес точки прерывания
        BNE     174214$         ; Было прерывание
        CALL    @<174232$-7062>(R0) ; Вызов по стандартному адресу
        BR      174164$         ; На начало цикла
174214$:CLR     22(R0)          ; Очистить адрес прерывания
        JMP     @R1             ; Переход по адресу прерывания
; Фиктивная подпрограмма
174222$:MOV     #174222$,@#7126 ; Установить точку прерывания фикт. п/п
        BR      174164$         ; На начало цикла
; Адреса стандартных подпрограмм обработки событий :
;  обработка скэн-кодов клавиатуры, обработка данных К2, вывод символов на
;  экран, переключение курсора, меню УСТАНОВКА, меню ЗАГРУЗКА, вывод на
;  принтер, запуск п/п пользователя, запуск теста
174232$:.WORD   104306$,125030$,111144$,176056$,100040$,100742$,176076$
        .WORD   176116$,176460$
; Подпрограмма обработки команды TRAP 0
174254$:MOV     @#7056,R0       ; R0 = адрес флага
        MOV     (SP)+,22(R0)    ; Сохранить СК
        MTPS    (SP)+           ; Установить ССП
        BR      174164$         ; На начало основного цикла
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО КОМАНДЕ EMT ***
174270$:MOV     R5,-(SP)        ; Сохранить регистры
        MOV     R4,-(SP)
        MOV     R3,-(SP)
        MOV     R2,-(SP)
        MOV     R1,-(SP)
        MOV     R0,-(SP)
        MOV     14(SP),R5
        MOV     -(R5),R5        ; R5 = код команды EMT
        CALL    @<160000$-EMT>(R5) ; Вызов соответствующей подпрограммы
        MOV     (SP)+,R0        ; Восстановить регистры
        MOV     (SP)+,R1
        MOV     (SP)+,R2
        MOV     (SP)+,R3
        MOV     (SP)+,R4
        MOV     (SP)+,R5
        RTI
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО КОМАНДЕ TRAP ***
174334$:MOV     @SP,R0
        MOV     -(R0),R0        ; R0 = код команды TRAP
        JMP     @<160160$-TRAP>(R0) ; Переход на соответствующую подпрограмму
; Обработка прерываний сетевого таймера (скроллинг назад)
174344$:MOV     R0,-(SP)        ; Сохранить R0
        ADD     @#7136,PC       ; Рулон плавный/дискретный ?
        BR      174476$         ; Рулон плавный
174354$:MOV     R1,-(SP)        ; Сохранить R1
        MOV     @#23170,R1      ; R1 = число видеострок для скроллинга
        NEG     R1              ; Перевод в положительное число
        ASL     R1              ; Умножение на 4
        ASL     R1
        MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
        ADD     #264.*4,R0      ; Плюс размер видимой части экрана
        CMP     R0,#4670        ; Достигли конца описания ?
        BLO     174424$         ; Нет
        BHI     174420$         ; Превысили
        MOV     #2500,@#4666    ; Посл. строка - первая в описании
        BR      174430$
174420$:SUB     #286.*4,R0      ; R0 = R0 - общ. число видеострок экр. польз.
174424$:MOV     R0,-2(R0)       ; Поместить в область описания
174430$:SUB     R1,R0           ; Вычесть число видеострок для скроллинга
        CMP     R0,#2500        ; Вышло за начало ?
        BHI     174444$         ; Нет
        ADD     #286.*4,R0      ; R0 = R0 + общ. число видеострок экр. польз.
174444$:MOV     #6742,-(R0)     ; Адрес описания нижней инф. строки
        MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
        SUB     R1,R0           ; Вычесть число видеострок для скроллинга
        CMP     R0,#2500        ; Вышли за начало ?
        BHIS    174470$         ; Нет
        ADD     #286.*4,R0      ; R0 = R0 + общ. число видеострок экр. польз.
174470$:MOV     R0,@#2476       ; Адрес описания начала экр. пользователя
        BR      174750$
174476$:MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
        SUB     #4,R0           ; R0 = R0 - 1 видеострока
        CMP     R0,#2500        ; Вышли за начало ?
        BHIS    174520$         ; Нет
        ADD     #286.*4,R0      ; R0 = R0 + общ. число видеострок экр. польз.
174520$:MOV     R0,@#2476       ; Адрес описания начала экр. пользователя
        ADD     #265.*4,R0      ; R0 = R0 + 265 строк
        CMP     R0,#4670        ; Вышли за конец
        BLO     174554$         ; Нет
        BNE     174550$         ; Да
        MOV     #2500,@#4666    ; Посл. строка - первая в описании
        BR      174560$
174550$:SUB     #286.*4,R0      ; R0 = R0 - общ. число видеострок экр. польз.
174554$:MOV     R0,-2(R0)       ; Поместить в область описания
174560$:SUB     #4,R0           ; R0 = R0 - 1 видеострока
        CMP     R0,#2500        ; На начале ?
        BNE     174576$
        ADD     #286.*4,R0      ; R0 = R0 + общ. число видеострок экр. польз.
174576$:MOV     #6742,-(R0)     ; Адрес описания нижней инф. строки
        MOV     (SP)+,R0        ; Восстановить R0
        INC     @#23170         ; Уменьшить число видеострок для скроллинга
        BR      175054$
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ СЕТЕВОГО ТАЙМЕРА ***
174612$:TST     @#23170         ; Количество видеострок для скроллинга
        BEQ     175072$         ; Нет
        BMI     174344$         ; Скроллинг назад
        MOV     R0,-(SP)        ; Сохранить R0
        ADD     @#7136,PC       ; Рулон плавный/дискретный ?
        BR      174762$         ; Рулон плавный
174632$:MOV     R1,-(SP)        ; Сохранить R1
        MOV     @#23170,R1      ; R1 = число видеострок для скроллинга
        ASL     R1              ; Умножение на 4
        ASL     R1
        MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
        ADD     #264.*4,R0      ; Плюс размер видимой части экрана
        CMP     R0,#4670        ; Достигли конца описания ?
        BLO     174700$         ; Нет
        BHI     174674$         ; Превысили
        MOV     #2500,@#4666    ; Посл. строка - первая в описании
        BR      174704$
174674$:SUB     #286.*4,R0      ; R0 = R0 - общ. число видеострок экр. польз.
174700$:MOV     R0,-2(R0)       ; Поместить в область описания
174704$:ADD     R1,R0           ; Прибавить число видеострок для скроллинга
        CMP     R0,#4670        ; Вышли за конец ?
        BLOS    174720$         ; Нет
        SUB     #286.*4,R0      ; R0 = R0 - общ. число видеострок экр. польз.
174720$:MOV     #6742,-(R0)     ; Адрес описания нижней инф. строки
        MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
        ADD     R1,R0           ; Прибавить число видеострок для скроллинга
        CMP     R0,#4670        ; Вышли за конец ?
        BLO     174744$         ; Нет
        SUB     #286.*4,R0      ; R0 = R0 - общ. число видеострок экр. польз.
174744$:MOV     R0,@#2476       ; Адрес описания начала экр. пользователя
174750$:MOV     (SP)+,R1        ; Восстановить регистры
        MOV     (SP)+,R0
        CLR     @#23170         ; Число строк для скроллинга = 0
        BR      175056$
174762$:MOV     @#2476,R0       ; R0 = адр.яч.информ. о перв. стр. экр.польз.
        BIC     #1,2(R0)        ; Сбросить бит переключения курсора
        MOV     2(R0),@#2476    ; Сдвиг на 1 строку вверх
        ADD     #264.*4,R0      ; R0 = R0 + 264 видеостроки
        CMP     R0,#4670        ; Вышли за конец ?
        BLO     175034$         ; Нет
        BNE     175030$         ; Да
        MOV     #2500,R0        ; R0 = первый элемент описания
        MOV     R0,@#4666       ; Посл. строка - первая в описании
        BR      175040$
175030$:SUB     #286.*4,R0      ; R0 = R0 - общ. число видеострок экр. польз.
175034$:MOV     R0,-2(R0)       ; Поместить в область описания
175040$:MOV     #6742,2(R0)     ; Адрес описания нижней инф. строки
        MOV     (SP)+,R0        ; Восстановить R0
        DEC     @#23170         ; Уменьшить число видеострок для скроллинга
175054$:BNE     175306$         ; Еще остались
175056$:MOV     @#22750,@#23164 ; Разрешение/запрет использования курсора
        INC     @#7066          ; Уст.флаг вызова п/п перекл. курсора
        BR      175306$
175072$:ADD     @#7134,PC       ; Перекл. курсор/не изм. курсор/выдержка вр.
        BR      175150$         ; Перекл. курсор, поменять его координаты
175102$:BR      175306$         ; Не изм. состояния курсора
175104$:DECB    @#23166         ; Уменьшить счетчик выдержки времени
        BGT     175306$         ; Время еще не окнчилось
        BEQ     175120$         ; Время закончилось
        MOV     #110060,@#23162 ; Загрузить временной интервал
175120$:MOV     @#23162,@#23166 ; Загрузить значение в счетчик
        SWAB    @#23162         ; Поменять параметры выдержки(горит/не горит)
        BMI     175300$         ; Включить курсор
        ASL     @#23166
175140$:MOVB    #177,@23160     ; Убрать курсор с экрана
        BR      175306$
175150$:MOV     R0,-(SP)        ; Сохранить регистры
        MOV     R1,-(SP)
        MOV     R5,-(SP)
        MOV     @#23150,R5      ; R5 = адрес текущей таблицы видеопараметров
        MOV     @R5,R0          ; R0 = текущий адрес видео
        SUB     @32(R5),R0      ; R0 = тек.адрес - адр.нач.строки = позиция X
        MOV     66(R5),R1       ; R1 = режим экрана (80/40/20/10)
        BR      175200$
175176$:ASL     R0              ; Приведение координат в соотв. с режимом
175200$:ROR     R1
        BCC     175176$
        MOV     R0,@#23156      ; Сохранить координату X
        MOV     60(R5),R1       ; R1 = адрес списка строк, где расп. курсор
        BIC     #1,6(R1)        ; Выключить курсор
        BIC     #1,52(R1)
        MOV     32(R5),60(R5)   ; Новые координаты курсора
        MOV     60(R5),R1
        BIS     #1,6(R1)        ; Включить курсор
        BIS     #1,52(R1)
        MOV     #4,@#7134       ; Режим мигания курсора
        MOV     (SP)+,R5        ; Восстановить регистры
        MOV     (SP)+,R1
        MOV     (SP)+,R0
        CLR     @#23166         ; Сброс временных параметров курсора
        BR      175140$
175300$:MOVB    @#23156,@23160  ; Поместить курсор в позицию X
175306$:TST     @#7130          ; Двигатель НГМД вращается ?
        BEQ     175326$         ; Нет
        DEC     @#7130          ; Уменьшить счетчик вращения двигателя
        BNE     175326$         ; Еще не конец
        CALL    @7132           ; Вызов п/п выключения двигателя НГМД
175326$:DEC     @#7046          ; Уменьшить сч. длительности звукового сигн.
        BNE     175342$         ; Еще не конец
        BIC     #17600,@#177716 ; Выключить звуковой сигнал
175342$:TSTB    @#7227          ; Есть данные для автоповтора клавиш
        BEQ     175376$         ; Да
        DECB    @#7227          ; Уменьшить сч. автоповтора
        BNE     175376$         ; Еще не конец
        INC     @#7060          ; Увеличить флаг вызова п/п обр. соб. клав.
        BIS     #200,@#177716   ; Подать полож.импульс на динамик (щелчок)
        MOV     #1,@#7046       ; Длительность импульса
175376$:RTI
; Подпрограмма заполнения ячеек информацией о длительности вращения 
;  двигателя НГМД и адресе п/п выключения двигателя
175400$:MOV     (R5)+,@#7130    ; Длительность вращения двигатель НГМД
        MOV     (R5)+,@#7132    ; Адрес п/п выключения двигателя НГМД
        RTS     R5
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ КЛАВИАТУРЫ ***
175412$:MOVB    @#177702,@7200  ; Занести скэн-код клавиши в буфер
        BMI     175436$         ; Клавиша отжата
        BIS     #200,@#177716   ; Подать полож.импульс на динамик (щелчок)
        MOV     #2,@#7046       ; Длительность импульса
175436$:CMPB    @7200,#4        ; Нажата клавиша <СТОП> ?
        BEQ     175466$         ; Да
        INC     @#7200          ; Передвинуть указатель на след. позицию
        BIC     #10,@#7200
        INC     @#7060          ; Увеличить флаг вызова п/п обр. соб. клав.
        RTI
175466$:MOV     R0,-(SP)        ; Сохранить регистры
        MOV     R1,-(SP)
        MOV     R2,-(SP)
        CALL    104054$         ; Очистка буферов клавиатуры
        MOV     (SP)+,R2        ; Восстановить регистры
        MOV     (SP)+,R1
        MOV     (SP)+,R0
        BIS     #20,@#177716    ; Установить сигнал HALT в ЦП
        RTI
; Подпрограмма исполнения команды TRAP 2
175516$:CLR     @#7230          ; Запрет вызова TRAP 2 п/п обсл. клав.
        ADD     @#7042,PC       ; Передача данных по К0/в R0
        BR      175540$         ; Передача в R0
175530$:BIT     #10,@#177076    ; Готовность передатчика К0
        BEQ     175646$         ; Не готов
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПЕРЕДАТЧИКА КАНАЛА 0(КЛАВИАТУРА) ***
175540$:MOV     R5,-(SP)        ; Сохранить R5
        MOV     @#7206,R5       ; R5 = указатель для чтения с буфера ASCII
175546$:CMP     R5,@#7210       ; Буфер пуст ?
        BEQ     175650$         ; Да
        TSTB    1(R5)           ; Данное слово содержит одиночный код ?
        BEQ     175620$         ; Да
        CLR     -(SP)
        MOVB    @(R5),@SP       ; Поместить в стек очередной символ из строки
        BNE     175606$         ; Еще не конец строки символов
        CMP     (R5)+,(SP)+     ; Указатель на след. позицию
        BIC     #40,R5
        MOV     R5,@#7206
        BR      175546$
175606$:INC     @R5             ; К следующему символу в строке
        MOV     #177,R5
175614$:SOB     R5,175614$      ; Задержка
        BR      175632$
175620$:MOV     (R5)+,-(SP)     ; Поместить символ в стек
        BIC     #40,R5
        MOV     R5,@#7206
175632$:ADD     @#7042,PC       ; Передача данных по К0/в R0
        BR      175660$         ; Передача в R0
175640$:MOV     (SP)+,@#177070  ; Передача символа в К0
175644$:MOV     (SP)+,R5        ; Восстановить R5
175646$:RTI
175650$:MOV     #2,@#7230       ; Разрешение вызова TRAP 2 п/п обсл. клав.
        BR      175644$
175660$:MOV     (SP)+,R0        ; Передача символа в R0
        BR      175644$
; Подпрограмма исполнения команды TRAP 4
175664$:CLR     @#22546         ; Запрет вызова TRAP 4 п/п обсл. терминала
        BIT     #10,@#177066    ; Готовность приемника К0
        BEQ     175742$         ; Не готов
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 0(ТЕРМИНАЛ) ***
175700$:ADD     @#7042,PC       ; Передача данных по К0/в R0
        BR      175752$         ; Передача в R0
175706$:CMP     @#7064,#177     ; Буфер заполнен полностью ?
        BEQ     175744$         ; Да
        MOVB    @#177060,@22544 ; Занести символ в буфер
        INC     @#22544         ; Подкорректировать указатель буфера
        BIC     #200,@#22544
        INC     @#7064          ; Увеличить флаг вызова п/п обсл. терм.
175742$:RTI
175744$:MOV     #2,@#22546      ; Разрешение выз. TRAP 4 п/п обсл. терминала
175752$:RTI
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 1(ПРИНТЕР) ***
175754$:INC     @#7074          ; Уст. флаг вызова п/п обсл. принтера
        RTI
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ОТ ПРИЕМНИКА КАНАЛА 2 ***
175762$:MOV     R0,-(SP)        ; Сохранить R0
        MOV     @#23202,R0      ; R0 = счетчик принятых байтов
        BMI     176046$         ; В состоянии инициализации
        CMP     R0,#2           ; Адрес МП передан
        BHIS    176016$         ; Да
        MOVB    @#177064,23200(R0) ; Передача данных в буфер (адрес МП)
176006$:INC     @#23202         ; Увеличить счетчик принятых байтов
176012$:MOV     (SP)+,R0        ; Восстановить R0
        RTI
176016$:BNE     176034$         ; Принято 3 байта
        TSTB    @#177064        ; 3-й байт равен нулю ?
        BNE     176006$         ; Нет
        COM     @#23202         ; Инвертировать счетчик (инициализация канала)
        BR      176012$
176034$:INC     @#7062          ; Установить флаг вызова п/п обсл. К2
176040$:CLR     @#23202         ; Очистить счетчик
        BR      176012$
176046$:TSTB    @#177064        ; Принятый байт равен нулю ?
        BEQ     176012$         ; Да
        BR      176040$
; Подпрограмма переключения режима курсора
176056$:CLR     @#7066          ; Очистка флага вызова п/п
        ADD     @#23164,PC      ; Разрешение / запрет использования курсора
        RETURN                  ; Запрет использования курсора
176070$:CLR     @#7134          ; Поменять позицию курсора и включить его
        RETURN
; Подпрограмма печати символа на принтере, переданного по К1
176076$:CLR     @#7074          ; Очистить флаг вызова п/п
        MOV     @#177062,-(SP)  ; Поместить символ в стек
        CALL    135722$         ; Печать символа на принтере
        TST     (SP)+
        RETURN
; Подпрограмма вызова процедуры пользователя
176116$:CALL    @7140           ; Вызов процедуры пользователя
        CLR     @#7076          ; Очистить флаг вызова п/п
        RETURN
; *** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ ПО ПОЯВ. НА КАНАЛЕ ЦП СИГНАЛА RESET ***
176130$:RTI
; Подпрограмма запроса блока памяти
176132$:MOV     R0,R1           ; R1 = размер запрашиваемого блока
        BMI     176142$         ; Найти максимальный блок
        ROR     R1              ; Приведение к четному адресу
        ADC     R0
176142$:MOV     R2,-(SP)        ; Сохранить R2
        CLR     R2              ; R2 = адрес найденного блока
        CLR     -(SP)           ; Размер найденного блока
176150$:MOV     #23660,R1       ; R1 = адрес начала ОЗУ пользователя
176154$:TST     (R1)+           ; Блок занят ?
        BEQ     176176$         ; Нет
        TST     (R1)+
176162$:ADD     (R1)+,R1        ; Переход к следующему блоку
        BPL     176154$         ; Еще не конец ОЗУ
        TST     R2              ; Найден свободный блок ?
        BNE     176150$         ; Да
        CLR     R0              ; Нет свободной памяти
        BR      176272$
176176$:TST     (R1)+
        CMP     R0,@R1          ; Размер блока равен или больше запраш. ?
        BLOS    176226$         ; Да
        CMP     R1,R2           ; Это найденный максимальный блок
        BEQ     176222$         ; Да
        CMP     @R1,@SP         ; Меньше запраш. размера ?
        BLOS    176162$         ; Да
        MOV     R1,R2           ; R2 = адрес найденного макс. блока
        MOV     @R1,@SP         ; Сохранить размер блока
        BR      176162$
176222$:MOV     @SP,R0          ; R0 = размер найденного макс. блока
        BR      176232$
176226$:INC     -4(R1)          ; Пометить блок, как занятый
176232$:MOV     (R1)+,R2        ; R2 = размер блока
        SUB     #6,R2           ; Отнять размер заголовка
        CMP     R0,R2           ; Запраш. размер больше реального ?
        BHIS    176272$         ; Да
        MOV     R1,R2
        ADD     R0,R2           ; R2 = адрес следующего блока
        CLR     (R2)+           ; Пометить блок, как свободный
        MOV     R1,@R2
        SUB     #6,(R2)+        ; Ссылка на предыдущий блок
        MOV     -(R1),@R2       ; Вычисление размера блока
        SUB     R0,@R2
        SUB     #6,@R2
        MOV     R0,(R1)+        ; Размер выделенного блока
176272$:TST     (SP)+
        MOV     (SP)+,R2        ; Восстановить R2
        RETURN
; Подпрограмма освобождения блока памяти
176300$:TST     R1              ; Освободить блок или всю память ?
        BPL     176310$         ; Освободить блок
        JMP     173706$         ; Освободить всю память
176310$:MOV     #23660,R0       ; R0 = адрес начала ОЗУ пользователя
176314$:ADD     #6,R0           ; Плюс размер заголовка
        BMI     176374$         ; Достигнут конец ОЗУ
        CMP     R0,R1           ; Адрес освоб. блока равен текущему
        BEQ     176342$         ; Да
        ADD     -2(R0),R0       ; Переход к следующему блоку
        BR      176314$
176334$:MOV     @R1,R1          ; R1 = адрес предыдущего блока
        ADD     #6,R1           ; Плюс размер заголовка
176342$:CLR     -6(R1)          ; Пометить блок, как свободный
        TST     -(R1)
        MOV     R1,R0           ; R0 = адрес блока (поле размера)
        ADD     (R0)+,R0        ; Переход к следующему блоку
        TST     @R0             ; Блок занят ?
        BNE     176370$         ; Да
        ADD     4(R0),@R1       ; Прибавить размер к предыд. (слияние)
        ADD     #6,@R1          ; Плюс размер заголовка
176370$:TST     @-(R1)          ; Блок выше свободный ?
        BEQ     176334$         ; Да
176374$:RETURN
; Подпрограмма резервирования программируемого таймера за процессом
176376$:TST     @#7050          ; Программируемый таймер занят ?
        BEQ     176416$         ; Да
        CLR     @#177710        ; Останов таймера
        CLR     @#7050          ; Таймер занят
        RETURN
176416$:SEC                     ; Признак занятости таймера
        RETURN
; Подпрограмма освобождения процессом программируемого таймера
176422$:MOV     #4,@#7050       ; Признак свободного таймера
        MOV     #174612$,@#304  ; Восстановить вектор прерывания
        MOV     #200,@#306
        CLR     @#177712        ; Очистить буферный регистр таймера
        MOV     #1,@#177710     ; Пуск таймера
        RETURN
; Подпрограмма запуска тестов в ПП
176460$:CALL    176472$         ; Запустить тесты
        CLR     @#7100          ; Очистить флаг вызова п/п
        RETURN
; Подпрограмма вызова тестов и передачи результатов в ОЗУ ЦП
176472$:MTPS    #200            ; Запретить прерывания
        MOV     #176656$,@#300  ; Переназначить вектор прерывания клавиатуры
        CALL    160410$         ; Тест ПЗУ
        CLR     R1              ; R1 = 0 (смещение в буфере ошибок)
176512$:ASR     R0
        BCS     176522$         ; Ошибка банка ПЗУ
        BNE     176526$         ; Еще есть ошибки
        BR      176532$
176522$:CALL    176626$         ; Установка счетчика ошибок в ОЗУ ЦП
176526$:INC     R1              ; Переход к след.ячейке в ОЗУ ЦП
        BR      176512$
176532$:CALL    170632$         ; Тест процессора
        MTPS    #0              ; Разрешить прерывания
        TST     R0              ; Есть ошибки ?
        BEQ     176556$         ; Нет
        MOV     #5,R1           ; R1 = 5 (смещение в буфере ошибок)
        CALL    176626$         ; Установка счетчика ошибок в ОЗУ ЦП
176556$:MOV     #-1,R0
        CALL    176132$         ; Получить адрес наиб. блока памяти
        MOV     R1,R4           ; R4 = начальный адрес
        MOV     R1,R5
        ADD     R0,R5           ; R5 = конечный адрес
        CALL    170224$         ; Тест оперативной памяти
        TST     R0              ; Есть ошибки
        BEQ     176614$         ; Нет
        MOV     #4,R1           ; R1 = 4 (смещение в буфере ошибок)
        CALL    176626$         ; Установка счетчика ошибок в ОЗУ ЦП
176614$:MOV     #177,R0
        CALL    104160$         ; Посл. ЦП по К0 символ с кодом 177(тест окон.)
        RETURN
; Подпрограмма установки счетчика ошибок в ОЗУ ЦП
176626$:MOV     #<177700/2>&77777,@#177010 ; Адрес буфера счетчиков ошибок
        ADD     R1,@#177010     ; Прибавить смещение
        CMP     #-1,@#177014    ; Значение счетчика достигло максимума
        BEQ     176654$         ; Да
        INC     @#177014        ; Увеличить значение счетчика ошибок
176654$:RETURN
; Подпрограмма обработки прерываний от клавиатуры во время тестирования
176656$:CMP     #4,@#177702     ; Нажата клавиша <СТОП> ?
        BNE     176672$         ; Нет
        JMP     @160000$        ; Перезапуск компьютера
176672$:RTI
�

; *****************************************************************
; *                                                               *
; *                  КОНТРОЛЬНЫЕ СУММЫ БЛОКОВ ПЗУ                 *
; *                                                               *
; *                                                               *
; *                     Адреса 176770 - 176777                    *
; *                                                               *
; *****************************************************************

        .=176770

176770$:.WORD   63160           ; Адреса 100000 - 117777
176772$:.WORD   133314          ; Адреса 120000 - 137777
176774$:.WORD   162125          ; Адреса 140000 - 157777
176776$:.WORD   103607          ; Адреса 160000 - 176775

; * * * * * * * * * * *  E n d   o f   R O M  * * * * * * * * * * *

        .END