Difference between revisions of "Uknc ROM disasm - 4"

From Felixl.com
Jump to navigationJump to search
 
(Исправлены ошибки)
 
Line 1: Line 1:
 
<pre>
 
<pre>
 +
 
; ******************************************************
 
; ******************************************************
 
; *                                                    *
 
; *                                                    *
Line 9: Line 10:
  
 
; ***  ОСНОВНАЯ ПОДПРОГРАММА ОБСЛУЖИВАНИЯ КАНАЛА 2  ***
 
; ***  ОСНОВНАЯ ПОДПРОГРАММА ОБСЛУЖИВАНИЯ КАНАЛА 2  ***
125030$:MOV @#23200,R0 ; R0 = адрес массива параметров (МП) в ОЗУ ЦП
+
125030$:MOV     @#23200,R0     ; R0 = адрес массива параметров (МП) в ОЗУ ЦП
CLC ; Преобр. для загрузки в рег. адреса планов
+
        CLC                     ; Преобр. для загрузки в рег. адреса планов
ROR R0
+
        ROR     R0
MOV R0,@#23200
+
        MOV     R0,@#23200
INC R0 ; R0 = адрес типа устройства
+
        INC     R0             ; R0 = адрес типа устройства
MOV R0,@#177010
+
        MOV     R0,@#177010
MOV @#177014,R0 ; R0 = тип устройства
+
        MOVB    @#177014,R0     ; R0 = тип устройства
MOV R0,R5
+
        MOV     R0,R5
ASH #-3,R0
+
        ASH     #-3,R0
CMP R0,#3 ; Тип устройства в пределах 0 - 37 ?
+
        CMP     R0,#3           ; Тип устройства в пределах 0 - 37 ?
BHI 125116$ ; Нет
+
        BHI     125116$         ; Нет
ASL R0
+
        ASL     R0
BNE 125014$ ; Обслуживается не дисковод
+
        BNE     125104$         ; Обслуживается не дисковод
TST @#7044 ; Разрешено обращение к дисководу ?
+
        TST     @#7044         ; Разрешено обращение к дисководу ?
BMI 125116$ ; Нет
+
        BMI     125116$         ; Нет
125104$:CALL @125124$(R0) ; Вызов соответствующей п/п обслуживания уст-ва
+
125104$:CALL   @125124$(R0)   ; Вызов соответствующей п/п обслуживания уст-ва
125110$:DEC @#7062 ; Уменьшить значение флага вызова
+
125110$:DEC     @#7062         ; Уменьшить значение флага вызова
RETURN
+
        RETURN
125116$:CALL 125162$ ; Вызов п/п обслуживания кассеты ПЗУ
+
125116$:CALL   125162$         ; Вызов п/п обслуживания кассеты ПЗУ
BR 125110$
+
        BR     125110$
 
; Адреса п/п обслуживания устройств (дисковод, магнитофон, кассета ПЗУ, ОЗУ ПП)
 
; Адреса п/п обслуживания устройств (дисковод, магнитофон, кассета ПЗУ, ОЗУ ПП)
125124$:.WORD 131176$,126236$,125162$,125644$
+
125124$:.WORD   131176$,126236$,125162$,125644$
 
; П/п окончания обслуживания устройства
 
; П/п окончания обслуживания устройства
125134$:CLRB @#23334 ; Сбросить код возврата (все нормально)
+
125134$:CLRB   @#23334         ; Сбросить код возврата (все нормально)
125140$:MOV @#23200,@#177010
+
125140$:MOV     @#23200,@#177010
MOV @#23334,@#177014; Записать код возврата в ОЗУ ЦП
+
        MOV     @#23334,@#177014; Записать код возврата в ОЗУ ЦП
125154$:TST @#177064 ; Восст. готовность канала 2 со стороны ЦП
+
125154$:TST     @#177064       ; Восст. готовность канала 2 со стороны ЦП
RETURN
+
        RETURN
 
; П/п обслуживания кассеты ПЗУ
 
; П/п обслуживания кассеты ПЗУ
125162$:JSR R5,125560$ ; Чтение МП
+
125162$:JSR     R5,125560$     ; Чтение МП
.WORD 5
+
        .WORD   5
CMPB #10,23335 ; Код функции = 10 (чтение) ?
+
        CMPB   #10,23335       ; Код функции = 10 (чтение) ?
BEQ 125210$
+
        BEQ     125210$
125200$:MOVB #2,23334 ; Код возврата = 2 (ошибочный МП)
+
125200$:MOVB   #2,23334       ; Код возврата = 2 (ошибочный МП)
BR 125520$
+
        BR     125520$
125210$:MOV 23340,R1 ; R1 = адрес кассеты ПЗУ
+
125210$:MOV     23340,R1       ; R1 = адрес кассеты ПЗУ
CMP #60000,R1 ; Он превышает 60000 ?
+
        CMP     #60000,R1       ; Он превышает 60000 ?
BLOS 125200$ ; Да
+
        BLOS   125200$         ; Да
BIC #1,R1
+
        BIC     #1,R1
MOV 23342,R2 ; R2 = адрес буфера в ОЗУ ЦП
+
        MOV     23342,R2       ; R2 = адрес буфера в ОЗУ ЦП
CMP #160000,R2 ; Он превышает 160000 ?
+
        CMP     #160000,R2     ; Он превышает 160000 ?
BLOS 125200$ ; Да
+
        BLOS   125200$         ; Да
ASR R2
+
        ASR     R2
BIC #100000,R2
+
        BIC     #100000,R2
MOV 23344,R3 ; R3 = число считываемых слов
+
        MOV     23344,R3       ; R3 = число считываемых слов
BEQ 125514$ ; Оно равно нулю
+
        BEQ     125514$         ; Оно равно нулю
MOVB 23337,R0 ; R0 = номер кассеты ПЗУ
+
        MOVB   23337,R0       ; R0 = номер кассеты ПЗУ
MTPS #200 ; Запретить прерывания
+
        MTPS   #200           ; Запретить прерывания
MOV @#4,R5 ; Сохранить значение 4 вектора в R5
+
        MOV     @#4,R5         ; Сохранить значение 4 вектора в R5
MOV #125544$,@#4 ; Загрузить новое значение вектора
+
        MOV     #125544$,@#4   ; Загрузить новое значение вектора
BIC #1,@#177054 ; Откл. сист. ПЗУ в диапазоне 100000-117777
+
        BIC     #1,@#177054     ; Откл. сист. ПЗУ в диапазоне 100000-117777
ASR R0 ; Кассета N1 ?
+
        ASR     R0             ; Кассета N1 ?
BCS 125320$ ; Нет
+
        BCS     125320$         ; Нет
BIC #10,@#177054 ; Выбор кассеты N1
+
        BIC     #10,@#177054   ; Выбор кассеты N1
BR 125326$
+
        BR     125326$
125320$:BIS #10,@#177054 ; Выбор кассеты N2
+
125320$:BIS     #10,@#177054   ; Выбор кассеты N2
125326$:BIC #6,@#177054 ; Ни одного банка не выбрано
+
125326$:BIC     #6,@#177054     ; Ни одного банка не выбрано
CMP R1,#17776 ; Адрес кассеты меньше 20000 ?
+
        CMP     R1,#17776       ; Адрес кассеты меньше 20000 ?
BHI 125354$ ; Нет
+
        BHI     125354$         ; Нет
MOV #2,R4
+
        MOV     #2,R4
BIS R4,@#177054 ; Выбор банка N1
+
        BIS     R4,@#177054     ; Выбор банка N1
BR 125406$
+
        BR     125406$
125354$:CMP R1,#37776 ; Адрес кассеты меньше 40000 ?
+
125354$:CMP     R1,#37776       ; Адрес кассеты меньше 40000 ?
BHI 125376$ ; Нет
+
        BHI     125376$         ; Нет
BIS #4,@#177054 ; Выбор банка N2
+
        BIS     #4,@#177054     ; Выбор банка N2
MOV #1,R4
+
        MOV     #1,R4
BR 125406$
+
        BR     125406$
125376$:BIS #6,@#177054 ; Выбор банка N3
+
125376$:BIS     #6,@#177054     ; Выбор банка N3
CLR R4
+
        CLR     R4
125406$:BIC #60000,R1
+
125406$:BIC     #60000,R1
BIS #100000,R1
+
        BIS     #100000,R1
MOV #120000,R0
+
        MOV     #120000,R0
SUB R1,R0 ; Вычисление граничных значений
+
        SUB     R1,R0           ; Вычисление граничных значений
ASR R0
+
        ASR     R0
125426$:CMP R3,R0 ; Область перекачки содержится в одном банке ?
+
125426$:CMP     R3,R0           ; Область перекачки содержится в одном банке ?
BHI 125440$ ; Нет
+
        BHI     125440$         ; Нет
MOV R3,R0
+
        MOV     R3,R0
CLR R3
+
        CLR     R3
BR 125442$
+
        BR     125442$
125440$:SUB R0,R3 ; Вычесть из числа запрошенных слов
+
125440$:SUB     R0,R3           ; Вычесть из числа запрошенных слов
125442$:MOV R2,@#177010 ; Цикл перекачки
+
125442$:MOV     R2,@#177010     ; Цикл перекачки
MOV (R1)+,@#177014
+
        MOV     (R1)+,@#177014
INC R2
+
        INC     R2
CMP #70000,R2 ; Произошел выход за диапазон ОЗУ ЦП (160000) ?
+
        CMP     #70000,R2       ; Произошел выход за диапазон ОЗУ ЦП (160000) ?
BLOS 125200$ ; Да
+
        BLOS   125200$         ; Да
SOB R0,125442$
+
        SOB     R0,125442$
TST R3 ; Перекачка закончена ?
+
        TST     R3             ; Перекачка закончена ?
BEQ 125514$ ; Да
+
        BEQ     125514$         ; Да
DEC R4 ; Переход к следующему банку
+
        DEC     R4             ; Переход к следующему банку
BMI 125200$ ; Переход за границу кассеты ПЗУ
+
        BMI     125200$         ; Переход за границу кассеты ПЗУ
ADD #2,@#177054 ; Установить следующий банк
+
        ADD     #2,@#177054     ; Установить следующий банк
MOV #100000,R1
+
        MOV     #100000,R1
MOV #10000,R0
+
        MOV     #10000,R0
BR 125426$
+
        BR     125426$
125514$:CLRB 23334 ; Очистить код возврата (все нормально)
+
125514$:CLRB   23334           ; Очистить код возврата (все нормально)
125520$:BIS #1,@#177054 ; Подключить системное ПЗУ
+
125520$:BIS     #1,@#177054     ; Подключить системное ПЗУ
MOV R5,@#4 ; Восстановить 4 вектор
+
        MOV     R5,@#4         ; Восстановить 4 вектор
MTPS #0 ; Разрешить прерывания
+
        MTPS   #0             ; Разрешить прерывания
CALL 125140$ ; Завершить обслуживание
+
        CALL   125140$         ; Завершить обслуживание
RETURN
+
        RETURN
 
; П/п обработки прерывания 4 при чтении с кассеты ПЗУ
 
; П/п обработки прерывания 4 при чтении с кассеты ПЗУ
125544$:MOVB #1,23334 ; Код возврата = 1 (отсутствует банк ПЗУ)
+
125544$:MOVB   #1,23334       ; Код возврата = 1 (отсутствует банк ПЗУ)
TST (SP)+ ; Вычеркнуть из стека значения PC и PS
+
        TST     (SP)+           ; Вычеркнуть из стека значения PC и PS
TST (SP)+
+
        TST     (SP)+
BR 125520$
+
        BR     125520$
 
; П/п чтения МП из ОЗУ ЦП
 
; П/п чтения МП из ОЗУ ЦП
125560$:MOV (R5)+,R0 ; R0 = число слов для чтения
+
125560$:MOV     (R5)+,R0       ; R0 = число слов для чтения
MOV #23334,R1 ; R1 = адрес МП в ОЗУ ПП
+
        MOV     #23334,R1       ; R1 = адрес МП в ОЗУ ПП
MOV @#23200,@#177010
+
        MOV     @#23200,@#177010
BR 125602$
+
        BR     125602$
125576$:INC @#177010 ; Цикл чтения
+
125576$:INC     @#177010       ; Цикл чтения
125602$:MOV @#177014,(R1)+
+
125602$:MOV     @#177014,(R1)+
SOB R0,125576$
+
        SOB     R0,125576$
RTS R5
+
        RTS     R5
 
; П/п записи МП в ОЗУ ЦП
 
; П/п записи МП в ОЗУ ЦП
125612$:MOV (R5)+,R0 ; R0 = число слов для записи
+
125612$:MOV     (R5)+,R0       ; R0 = число слов для записи
MOV #23334,R1 ; R1 = адрес МП в ОЗУ ПП
+
        MOV     #23334,R1       ; R1 = адрес МП в ОЗУ ПП
MOV @#23200,@#177010
+
        MOV     @#23200,@#177010
BR 125634$
+
        BR     125634$
125630$:INC @#177010 ; Цикл записи
+
125630$:INC     @#177010       ; Цикл записи
125634$:MOV (R1)+,@#177014
+
125634$:MOV     (R1)+,@#177014
SOB R0,125630$
+
        SOB     R0,125630$
RTS R5
+
        RTS     R5
 
; П/п обслуживания функций работы с памятью ПП
 
; П/п обслуживания функций работы с памятью ПП
125644$:JSR R5,125560$ ; Чтение МП
+
125644$:JSR     R5,125560$     ; Чтение МП
.WORD 5
+
        .WORD   5
CLRB @#23334 ; Код возврата = 0
+
        CLRB   @#23334         ; Код возврата = 0
CMP R5,#32 ; Тип устройства = 32 ?
+
        CMP     R5,#32         ; Тип устройства = 32 ?
BNE 125720$ ; Нет
+
        BNE     125720$         ; Нет
MOVB @#23335,R0 ; R0 = код функции
+
        MOVB   @#23335,R0     ; R0 = код функции
MOV R0,R5
+
        MOV     R0,R5
ASH #-3,R0
+
        ASH     #-3,R0
CMP R0,#3 ; Код функции в пределах 0 - 37 ?
+
        CMP     R0,#3           ; Код функции в пределах 0 - 37 ?
BHI 125720$ ; Нет
+
        BHI     125720$         ; Нет
ASL R0
+
        ASL     R0
ADD R0,PC ; Переход по соответствующему адресу
+
        ADD     R0,PC           ; Переход по соответствующему адресу
BR 125730$ ; Запрос и освобождение блоков памяти
+
        BR     125730$         ; Запрос и освобождение блоков памяти
BR 126024$ ; Чтение памяти ПП
+
        BR     126024$         ; Чтение памяти ПП
BR 126050$ ; Запись в память ПП
+
        BR     126050$         ; Запись в память ПП
BR 126074$ ; Запуск п/п пользователя
+
        BR     126074$         ; Запуск п/п пользователя
125720$:JMP 125162$
+
125720$:JMP     125162$
125724$:JMP 125154$
+
125724$:JMP     125154$
 
; Запрос и освобождение блоков памяти
 
; Запрос и освобождение блоков памяти
125730$:MOV @#23340,R1 ; R1 = начальный адрес в памяти ПП
+
125730$:MOV     @#23340,R1     ; R1 = начальный адрес в памяти ПП
MOV @#23342,R0 ; R0 = размер блока в словах
+
        MOV     @#23342,R0     ; R0 = размер блока в словах
ASL R0
+
        ASL     R0
ASR R5 ; Функция запроса блока памяти ?
+
        ASR     R5             ; Функция запроса блока памяти ?
BCC 126012$ ; Нет
+
        BCC     126012$         ; Нет
CALL 176132$ ; Запросить область памяти
+
        CALL   176132$         ; Запросить область памяти
ASR R0
+
        ASR     R0
CMP R0,@#23342 ; Полученное значение >= запрошенного ?
+
        CMP     R0,@#23342     ; Полученное значение >= запрошенного ?
BHIS 125770$ ; Да
+
        BHIS   125770$         ; Да
MOVB #377,@#23334 ; Код возврата = 377 (мало памяти)
+
        MOVB   #377,@#23334   ; Код возврата = 377 (мало памяти)
125770$:MOV R0,@#23342 ; Возвратить объем полученной памяти
+
125770$:MOV     R0,@#23342     ; Возвратить объем полученной памяти
MOV R1,@#23340 ; Возвратить адрес блока
+
        MOV     R1,@#23340     ; Возвратить адрес блока
JSR R5,125612$ ; Записать МП в ОЗУ ЦП
+
        JSR     R5,125612$     ; Записать МП в ОЗУ ЦП
.WORD 4
+
        .WORD   4
JMP 125154$
+
        JMP     125154$
126012$:CALL 176300$ ; Освободить блок памяти
+
126012$:CALL   176300$         ; Освободить блок памяти
BMI 125720$
+
        BMI     125720$
JMP 125140$
+
        JMP     125140$
 
; Чтение памяти ПП
 
; Чтение памяти ПП
126024$:CALL 126110$ ; Получение адресов ЦП, ПП и числа слов
+
126024$:CALL   126110$         ; Получение адресов ЦП, ПП и числа слов
BEQ 125720$ ; Число слов равно нулю
+
        BEQ     125720$         ; Число слов равно нулю
BR 126040$
+
        BR     126040$
126034$:INC @#177010 ; Цикл чтения
+
126034$:INC     @#177010       ; Цикл чтения
126040$:MOV (R1)+,@#177014
+
126040$:MOV     (R1)+,@#177014
SOB R0,126034$
+
        SOB     R0,126034$
BR 125724$
+
        BR     125724$
 
; Запись в память ПП
 
; Запись в память ПП
126050$:CALL 126110$ ; Получение адресов ЦП, ПП и числа слов
+
126050$:CALL   126110$         ; Получение адресов ЦП, ПП и числа слов
BEQ 125720$ ; Число слов равно нулю
+
        BEQ     125720$         ; Число слов равно нулю
BR 126064$
+
        BR     126064$
126060$:INC @#177010 ; Цикл записи
+
126060$:INC     @#177010       ; Цикл записи
126064$:MOV @#177014$,(R1)+
+
126064$:MOV     @#177014,(R1)+
SOB R0,126060$
+
        SOB     R0,126060$
BR 125724$
+
        BR     125724$
 
; Запуск п/п пользователя
 
; Запуск п/п пользователя
126074$:MOV @#23340,@#7140 ; Сохранение адреса запуска
+
126074$:MOV     @#23340,@#7140 ; Сохранение адреса запуска
INC @#7076 ; Установить флаг запуска п/п пользователя
+
        INC     @#7076         ; Установить флаг запуска п/п пользователя
BR 125724$
+
        BR     125724$
 
; П/п получения адресов блоков памяти ЦП, ПП и числа слов для обмена
 
; П/п получения адресов блоков памяти ЦП, ПП и числа слов для обмена
126110$:MOV @#23340,R1 ; R1 = адрес памяти ПП
+
126110$:MOV     @#23340,R1     ; R1 = адрес памяти ПП
MOV @#23342,R0 ; R0 = адрес памяти ЦП
+
        MOV     @#23342,R0     ; R0 = адрес памяти ЦП
CLC
+
        CLC
ROR R0
+
        ROR     R0
MOV R0,@#177010 ; Загрузка адреса в регистр адреса планов
+
        MOV     R0,@#177010     ; Загрузка адреса в регистр адреса планов
MOV @#23344,R0 ; R0 = число слов для обмена
+
        MOV     @#23344,R0     ; R0 = число слов для обмена
RETURN
+
        RETURN
 
; *** МАГНИТОФОН ***
 
; *** МАГНИТОФОН ***
 
; П/п установки начальных значений
 
; П/п установки начальных значений
126136$:CLR R0
+
126136$:CLR     R0
MOV #23304,R1
+
        MOV     #23304,R1
MOV #14,R2
+
        MOV     #14,R2
126150$:MOV R0,(R1)+ ; Очистка области ОЗУ п/п работы с магнитофоном
+
126150$:MOV     R0,(R1)+       ; Очистка области ОЗУ п/п работы с магнитофоном
SOB R2,126150$
+
        SOB     R2,126150$
MOV #320,23304$ ; Длина бита "1"
+
        MOV     #320,23304     ; Длина бита "0"
MOV #150,23306$ ; Длина бита "0"
+
        MOV     #150,23306     ; Длина бита "1"
MOV #17500,23310$ ; Число битов "1" при записи пилот-тона загол.
+
        MOV     #17500,23310   ; Число битов "1" при записи пилот-тона загол.
MOV #3720,23312$ ; Число битов "1" при записи пилот-тона данных
+
        MOV     #3720,23312     ; Число битов "1" при записи пилот-тона данных
MOV #17540,23314$ ; Число битов "1" при чтении пилот-тона загол.
+
        MOV     #17540,23314   ; Число битов "1" при чтении пилот-тона загол.
MOV #1750,23316$ ; Число битов "1" при чтении пилот-тона данных
+
        MOV     #1750,23316     ; Число битов "1" при чтении пилот-тона данных
MOV #1750,23320$
+
        MOV     #1750,23320
MOV #64,23322$ ; Разброс времени между перепадами лог. уровня
+
        MOV     #64,23322       ; Разброс времени между перепадами лог. уровня
RETURN
+
        RETURN
 
; Основная п/п обслуживания магнитофона
 
; Основная п/п обслуживания магнитофона
126236$:JSR R5,125560$ ; Чтение массива параметров
+
126236$:JSR     R5,125560$     ; Чтение массива параметров
.WORD 27
+
        .WORD   27
CLR R5
+
        CLR     R5
126246$:SOB R5,126246$ ; Задержка
+
126246$:SOB     R5,126246$     ; Задержка
MTPS #200 ; Запретить прерывания
+
        MTPS   #200           ; Запретить прерывания
CALL 176376$ ; Останов программируемого таймера
+
        CALL   176376$         ; Останов программируемого таймера
CALL 130672$ ; Ожидание готовности программируемого таймера
+
        CALL   130672$         ; Ожидание готовности программируемого таймера
MOV #127734$,@#304 ; Настройка вектора прерывания прогр. таймера
+
        MOV     #127734$,@#304 ; Настройка вектора прерывания прогр. таймера
MOV #200,@#306
+
        MOV     #200,@#306
MOV #130570$,@#310 ; Настройка вектора прерывания по внеш. событию
+
        MOV     #130570$,@#310 ; Настройка вектора прерывания по внеш. событию
MOV #200,@#312
+
        MOV     #200,@#312
CLR @#177700 ; Запрет прерываний от клавиатуры
+
        CLR     @#177700       ; Запрет прерываний от клавиатуры
BIS #400,@#177054 ; Запрет прерываний от сет. таймера в канале ПП
+
        BIS     #400,@#177054   ; Запрет прерываний от сет. таймера в канале ПП
BIC #200,@#177716 ; Выключить генератор звукового сигнала
+
        BIC     #200,@#177716   ; Выключить генератор звукового сигнала
BIC #107,@#177066 ; Запретить прерывания от каналов связи с ЦП
+
        BIC     #107,@#177066   ; Запретить прерывания от каналов связи с ЦП
MOV 23335$,R0 ; R0 = код функции
+
        MOVB    23335,R0       ; R0 = код функции
BIC #177600,R0
+
        BIC     #177600,R0
ASL R0
+
        ASL     R0
CALL @126502$(R0) ; Вызов соответствующей п/п
+
        CALL   @126502$(R0)   ; Вызов соответствующей п/п
MOVB R0,23334$ ; Код возврата
+
        MOVB   R0,23334       ; Код возврата
BIC #14,@#177716 ; Запрет приема информации по линии вн. событие
+
        BIC     #14,@#177716   ; Запрет приема информации по линии вн. событие
CALL 130672$
+
        CALL   130672$
MOV 23200$,R4 ; R4 = адрес МП в ОЗУ ЦП
+
        MOV     23200,R4       ; R4 = адрес МП в ОЗУ ЦП
ADD #14,R4
+
        ADD     #14,R4
MOV R4,@#177010
+
        MOV     R4,@#177010
MOV #23364,R4 ; R4 = адрес МП в ОЗУ ПП (имя прочит. файла)
+
        MOV     #23364,R4       ; R4 = адрес МП в ОЗУ ПП (имя прочит. файла)
MOV #13,R2
+
        MOV     #13,R2
126422$:MOV (R4)+,@#177014 ; Пересылка
+
126422$:MOV     (R4)+,@#177014 ; Пересылка
INC @#177010
+
        INC     @#177010
SOB R2,126422$
+
        SOB     R2,126422$
BIC #400,@#177054 ; Разрешить прерывания от таймера в канале ПП
+
        BIC     #400,@#177054   ; Разрешить прерывания от таймера в канале ПП
MOV #100,@#177700 ; Разрешить прерывания от клавиатуры
+
        MOV     #100,@#177700   ; Разрешить прерывания от клавиатуры
BIS #200,@#177716 ; Включить генератор звукового сигнала
+
        BIS     #200,@#177716   ; Включить генератор звукового сигнала
BIS #107,@#177066 ; Разрешить прерывания от каналов связи с ЦП
+
        BIS     #107,@#177066   ; Разрешить прерывания от каналов связи с ЦП
CALL 125140$ ; Переслать код возврата в ОЗУ ЦП
+
        CALL   125140$         ; Переслать код возврата в ОЗУ ЦП
CALL 176422$ ; Запрет прерываний от прогр. таймера
+
        CALL   176422$         ; Запрет прерываний от прогр. таймера
MTPS #0 ; Разрешить прерывания
+
        MTPS   #0             ; Разрешить прерывания
RETURN
+
        RETURN
 
; Адреса п/п обслуживания работы с магнитофоном
 
; Адреса п/п обслуживания работы с магнитофоном
126502$:.WORD 126546$,126554$,126632$,126546$
+
126502$:.WORD   126546$,126554$,126632$,126546$
.WORD 126546$,126546$,126546$,126546$
+
        .WORD   126546$,126546$,126546$,126546$
.WORD 127102$,127110$,126546$,126546$
+
        .WORD   127102$,127110$,126546$,126546$
.WORD 127116$,127132$,127044$,126546$
+
        .WORD   127116$,127132$,127044$,126546$
.WORD 126714$,126662$
+
        .WORD   126714$,126662$
126546$:MOV #10,R0 ; R0 = код возврата (неверный код функции)
+
126546$:MOV     #10,R0         ; R0 = код возврата (неверный код функции)
RETURN
+
        RETURN
 
; П/п установки параметров одинарной плотности записи
 
; П/п установки параметров одинарной плотности записи
126554$:MOV #320,23304$ ; Длина бита "1"
+
126554$:MOV     #320,23304     ; Длина бита "0"
MOV #150,23306$ ; Длина бита "0"
+
        MOV     #150,23306     ; Длина бита "1"
MOV #17500,23310$ ; Число битов "1" перед заголовком
+
        MOV     #17500,23310   ; Число битов "1" перед заголовком
MOV #3720,23312$ ; Число битов "1" перед зоной данных
+
        MOV     #3720,23312     ; Число битов "1" перед зоной данных
MOV #17540,23314$ ; Число перепадов уровня при чтении (загол.)
+
        MOV     #17540,23314   ; Число перепадов уровня при чтении (загол.)
MOV #1750,23316$ ; Число перепадов уровня при чтении (данные)
+
        MOV     #1750,23316     ; Число перепадов уровня при чтении (данные)
MOV #1750,23320$
+
        MOV     #1750,23320
CLR R0
+
        CLR     R0
RETURN
+
        RETURN
 
; П/п установки параметров двойной плотности записи
 
; П/п установки параметров двойной плотности записи
126632$:MOV #150,23304$ ; Длина бита "1"
+
126632$:MOV     #150,23304     ; Длина бита "0"
MOV #64,23306$ ; Длина бита "0"
+
        MOV     #64,23306       ; Длина бита "1"
NOP
+
        NOP
MOV #3720,23320$
+
        MOV     #3720,23320
CLR R0
+
        CLR     R0
RETURN
+
        RETURN
 
; П/п записи блока данных на магнитную ленту
 
; П/п записи блока данных на магнитную ленту
126662$:MOV SP,23332$ ; Сохранить значение указателя стека
+
126662$:MOV     SP,23332       ; Сохранить значение указателя стека
MOV 23360$,R4 ; R4 = адрес буфера в ОЗУ ЦП
+
        MOV     23360,R4       ; R4 = адрес буфера в ОЗУ ЦП
CLC
+
        CLC
ROR R4
+
        ROR     R4
MOV R4,@#177010
+
        MOV     R4,@#177010
CALL 127476$ ; Подготовка и пуск программируемого таймера
+
        CALL   127476$         ; Подготовка и пуск программируемого таймера
MOV #200,R2 ; R2 = число записываемых слов
+
        MOV     #200,R2         ; R2 = число записываемых слов
BR 126776$
+
        BR     126776$
 
; П/п записи файла с заголовком
 
; П/п записи файла с заголовком
126714$:MOV SP,23332$ ; Сохранить значение указателя стека
+
126714$:MOV     SP,23332       ; Сохранить значение указателя стека
MOV 23360$,R4 ; R4 = адрес буфера в ОЗУ ЦП
+
        MOV     23360,R4       ; R4 = адрес буфера в ОЗУ ЦП
CLC
+
        CLC
ROR R4
+
        ROR     R4
MOV R4,@#177010
+
        MOV     R4,@#177010
CALL 127476$ ; Подготовка и пуск программируемого таймера
+
        CALL   127476$         ; Подготовка и пуск программируемого таймера
CALL 127536$ ; Запись пилот-тона перед заголовком
+
        CALL   127536$         ; Запись пилот-тона перед заголовком
CALL 127560$ ; Запись имени файла
+
        CALL   127560$         ; Запись имени файла
MOV 23362$,R0 ; R0 = число записываемых слов
+
        MOV     23362,R0       ; R0 = число записываемых слов
MOV R0,R2 ; R2 = число записываемых слов
+
        MOV     R0,R2           ; R2 = число записываемых слов
TST R2 ; Оно равно нулю ?
+
        TST     R2             ; Оно равно нулю ?
BEQ 127040$
+
        BEQ     127040$
CALL 127602$ ; Запись числа слов в файл
+
        CALL   127602$         ; Запись числа слов в файл
MOV 23360$,R0 ; R0 = адрес буфера в ОЗУ ЦП
+
        MOV     23360,R0       ; R0 = адрес буфера в ОЗУ ЦП
CALL 127602$ ; Запись адреса буфера в файл
+
        CALL   127602$         ; Запись адреса буфера в файл
126776$:CALL 127544$ ; Запись пилот-тона перед зоной данных
+
126776$:CALL   127544$         ; Запись пилот-тона перед зоной данных
CLR R4 ; Контрольная сумма = 0
+
        CLR     R4             ; Контрольная сумма = 0
127004$:MOV @#177014,R0 ; R0 = слово данных
+
127004$:MOV     @#177014,R0     ; R0 = слово данных
INC @#177010 ; Переход к следующему адресу
+
        INC     @#177010       ; Переход к следующему адресу
ADD R0,R4 ; Подсчет контрольной суммы файла
+
        ADD     R0,R4           ; Подсчет контрольной суммы файла
ADC R4
+
        ADC     R4
CALL 127602$ ; Запись слова данных
+
        CALL   127602$         ; Запись слова данных
SOB R2,127004$ ; Цикл по R2 (число записываемых слов)
+
        SOB     R2,127004$     ; Цикл по R2 (число записываемых слов)
MOV R4,R0 ; R0 = контрольная сумма
+
        MOV     R4,R0           ; R0 = контрольная сумма
CALL 127602$ ; Запись контрольной суммы
+
        CALL   127602$         ; Запись контрольной суммы
CALL 127664$ ; Запись бита "1"
+
        CALL   127664$         ; Запись бита "1"
127040$:CLR R0
+
127040$:CLR     R0
RETURN
+
        RETURN
 
; П/п чтения блока данных
 
; П/п чтения блока данных
127044$:MOV SP,23332$ ; Сохранить значение указателя стека
+
127044$:MOV     SP,23332       ; Сохранить значение указателя стека
MOV #200,R2 ; R2 = число считываемых слов
+
        MOV     #200,R2         ; R2 = число считываемых слов
MOV 23360$,R0 ; R0 = адрес буфера в ОЗУ ЦП
+
        MOV     23360,R0       ; R0 = адрес буфера в ОЗУ ЦП
CLC
+
        CLC
ROR R0
+
        ROR     R0
MOV R0,@#177010
+
        MOV     R0,@#177010
CALL 130020$ ; Подготовка и пуск программируемого таймера
+
        CALL   130020$         ; Подготовка и пуск программируемого таймера
CALL 130156$ ; Поиск пилот-тона перед зоной данных
+
        CALL   130156$         ; Поиск пилот-тона перед зоной данных
BR 127372$
+
        BR     127372$
 
; Точка входа при чтении файла с заголовком
 
; Точка входа при чтении файла с заголовком
127102$:CLR 23330$ ; Признак реального чтения файла
+
127102$:CLR     23330           ; Признак реального чтения файла
BR 127124$
+
        BR     127124$
 
; Точка входа при чтении файла с пропуском заголовка
 
; Точка входа при чтении файла с пропуском заголовка
127110$:CLR 23330$ ; Признак реального чтения файла
+
127110$:CLR     23330           ; Признак реального чтения файла
BR 127140$
+
        BR     127140$
 
; Точка входа при фиктивном чтении файла с заголовком
 
; Точка входа при фиктивном чтении файла с заголовком
127116$:MOV #4,23330$ ; Признак фиктивного чтения
+
127116$:MOV     #4,23330       ; Признак фиктивного чтения
127124$:CLR 23326$ ; Признак проверки заголовка
+
127124$:CLR     23326           ; Признак проверки заголовка
BR 127146$
+
        BR     127146$
 
; Точка входа при фиктивном чтении файла с пропуском заголовка
 
; Точка входа при фиктивном чтении файла с пропуском заголовка
127132$:MOV #4,23330$ ; Признак фиктивного чтения
+
127132$:MOV     #4,23330       ; Признак фиктивного чтения
127140$:MOV #22,23326$ ; Признак пропуска заголовка
+
127140$:MOV     #22,23326       ; Признак пропуска заголовка
127146$:MOV SP,23332$ ; Сохранить значение указателя стека
+
127146$:MOV     SP,23332       ; Сохранить значение указателя стека
CALL 130020$ ; Подготовка и пуск программируемого таймера
+
        CALL   130020$         ; Подготовка и пуск программируемого таймера
CALL 130060$ ; Поиск пилот-тона перед заголовком
+
        CALL   130060$         ; Поиск пилот-тона перед заголовком
CALL 130254$ ; Автоподстройка по пилот-тону
+
        CALL   130254$         ; Автоподстройка по пилот-тону
CALL 130372$ ; Чтение заголовка
+
        CALL   130372$         ; Чтение заголовка
BIT #1,R1 ; Тип устройства ?
+
        BIT     #1,R1           ; Тип устройства ?
BEQ 127220$ ; MSX
+
        BEQ     127220$         ; MSX
CALL 130436$ ; Чтение длины файла в словах
+
        CALL   130436$         ; Чтение длины файла в словах
MOV R0,23406$ ; Сохранить ее в МП
+
        MOV     R0,23406       ; Сохранить ее в МП
CALL 130436$ ; Чтение адреса загрузки файла
+
        CALL   130436$         ; Чтение адреса загрузки файла
MOV R0,23404$ ; Сохранить его в МП
+
        MOV     R0,23404       ; Сохранить его в МП
127220$:MOV 23320$,R3
+
127220$:MOV     23320,R3
ADD 23326$,PC ; Пропустить проверку заголовка (на 127252$)?
+
        ADD     23326,PC       ; Пропустить проверку заголовка (на 127252$)?
MOV #10,R2 ; R2 = длина заголовка в словах
+
        MOV     #10,R2         ; R2 = длина заголовка в словах
MOV #23364,R4 ; R4 = адрес прочитанного заголовка
+
        MOV     #23364,R4       ; R4 = адрес прочитанного заголовка
MOV #23340,R0 ; R0 = адрес заданного заголовка
+
        MOV     #23340,R0       ; R0 = адрес заданного заголовка
127244$:CMP (R0)+,(R4)+ ; Цикл сравнения
+
127244$:CMP     (R0)+,(R4)+     ; Цикл сравнения
BNE 127462$ ; Не равны
+
        BNE     127462$         ; Не равны
SOB R2,127244$
+
        SOB     R2,127244$
127252$:BIT #1,R1 ; Тип устройства ?
+
127252$:BIT     #1,R1           ; Тип устройства ?
BNE 127312 ; УКНЦ
+
        BNE     127312         ; УКНЦ
MOV #200,R2 ; R2 = число записываемых слов
+
        MOV     #200,R2         ; R2 = число записываемых слов
MOV 23360$,R0 ; R0 = адрес буфера в ОЗУ ЦП
+
        MOV     23360,R0       ; R0 = адрес буфера в ОЗУ ЦП
CLC
+
        CLC
ROR R0
+
        ROR     R0
MOV R0,@#177010
+
        MOV     R0,@#177010
MOV #10,R3
+
        MOV     #10,R3
CALL 130156$ ; Поиск пилот-тона перед зоной данных
+
        CALL   130156$         ; Поиск пилот-тона перед зоной данных
BR 127372$
+
        BR     127372$
127312$:MOV 23362$,R0 ; R0 = число считываемых слов
+
127312$:MOV     23362,R0       ; R0 = число считываемых слов
TST R0 ; Оно превышает 32767 ?
+
        TST     R0             ; Оно превышает 32767 ?
BMI 127330$ ; Да
+
        BMI     127330$         ; Да
CMP 23406$,R0 ; Число запрошенных слов превышает длину файла?
+
        CMP     23406,R0       ; Число запрошенных слов превышает длину файла?
BHI 127334$ ; Нет
+
        BHI     127334$         ; Нет
127330$:MOV 23406$,R0 ; Используем длину файла
+
127330$:MOV     23406,R0       ; Используем длину файла
127334$:MOV R0,R2 ; R2 = число считываемых слов
+
127334$:MOV     R0,R2           ; R2 = число считываемых слов
MOV 23404$,23410$
+
        MOV     23404,23410
MOV 23360$,R0 ; R0 = адрес буфера в ОЗУ ЦП
+
        MOV     23360,R0       ; R0 = адрес буфера в ОЗУ ЦП
CLC
+
        CLC
ROR R0
+
        ROR     R0
BCC 127366$ ; Четный адрес
+
        BCC     127366$         ; Четный адрес
MOV 23404$,R0 ; Используется считанный адрес
+
        MOV     23404,R0       ; Используется считанный адрес
CLC
+
        CLC
ROR R0
+
        ROR     R0
127366$:MOV R0,@#177010
+
127366$:MOV     R0,@#177010
127372$:TST R2 ; Число считываемых слов равно нулю ?
+
127372$:TST     R2             ; Число считываемых слов равно нулю ?
BEQ 127452$ ; Да
+
        BEQ     127452$         ; Да
CLR R4 ; Контрольная сумма = 0
+
        CLR     R4             ; Контрольная сумма = 0
CALL 130336$ ; Поиск и чтение первого слова данных
+
        CALL   130336$         ; Поиск и чтение первого слова данных
BR 127412$
+
        BR     127412$
127406$:CALL 130436$ ; Чтение слова
+
127406$:CALL   130436$         ; Чтение слова
127412$:ADD 23330$,PC ; Фиктивное чтение (на 127422$) ?
+
127412$:ADD     23330,PC       ; Фиктивное чтение (на 127422$) ?
MOV R0,@#177014 ; Пересылка в ОЗУ ЦП
+
        MOV     R0,@#177014     ; Пересылка в ОЗУ ЦП
127422$:INC @#177010 ; Переход к следующему адресу
+
127422$:INC     @#177010       ; Переход к следующему адресу
ADD R0,R4 ; Подсчет контрольной суммы
+
        ADD     R0,R4           ; Подсчет контрольной суммы
ADC R4
+
        ADC     R4
SOB R2,127406$
+
        SOB     R2,127406$
BIT #1,R1 ; Тип устройства
+
        BIT     #1,R1           ; Тип устройства
BEQ 127452$ ; MSX
+
        BEQ     127452$         ; MSX
CALL 130436$ ; Чтение контрольной суммы
+
        CALL   130436$         ; Чтение контрольной суммы
CMP R0,R4 ; Считанная КС равна подсчитанной ?
+
        CMP     R0,R4           ; Считанная КС равна подсчитанной ?
BNE 127470$
+
        BNE     127470$
127452$:CLR R0
+
127452$:CLR     R0
127454$:MTPS #200
+
127454$:MTPS   #200
RETURN
+
        RETURN
127462$:MOV #1,R0 ; R0 = не совпадает заголовок
+
127462$:MOV     #1,R0           ; R0 = не совпадает заголовок
BR 127454$
+
        BR     127454$
127470$:MOV #12,R0 ; R0 = не совпадает контрольная сумма
+
127470$:MOV     #12,R0         ; R0 = не совпадает контрольная сумма
BR 127454$
+
        BR     127454$
 
; П/п начальной подготовки перед записью
 
; П/п начальной подготовки перед записью
127476$:BIC #14,@#177716 ; Блокировка приема информации с МЛ
+
127476$:BIC     #14,@#177716   ; Блокировка приема информации с МЛ
CLR @#177712 ; Очистить счетчик прогр. таймера
+
        CLR     @#177712       ; Очистить счетчик прогр. таймера
127510$:TST @#177714 ; Счетчик очищен ?
+
127510$:TST     @#177714       ; Счетчик очищен ?
BNE 127510$ ; Нет
+
        BNE     127510$         ; Нет
MOV #101,@#177710 ; Пуск таймера и разрешение прерываний
+
        MOV     #101,@#177710   ; Пуск таймера и разрешение прерываний
MOV #4,R3 ; R3 = число записываемых импульсов
+
        MOV     #4,R3           ; R3 = число записываемых импульсов
MTPS #0 ; Разрешить прерывания
+
        MTPS   #0             ; Разрешить прерывания
RETURN
+
        RETURN
 
; Точка входа при записи пилот-тона перед заголовком
 
; Точка входа при записи пилот-тона перед заголовком
127536$:MOV 23310$,R4 ; R4 = число битов "1" в пилот-тоне
+
127536$:MOV     23310,R4       ; R4 = число битов "1" в пилот-тоне
BR 127550$
+
        BR     127550$
127544$:MOV 23312$,R4 ; R4 = число "1" в пилот-тоне перед данными
+
127544$:MOV     23312,R4       ; R4 = число "1" в пилот-тоне перед данными
127550$:CALL 127664$ ; Запись бита "1"
+
127550$:CALL   127664$         ; Запись бита "1"
SOB R4,127550$ ; Цикл по R4
+
        SOB     R4,127550$     ; Цикл по R4
RETURN
+
        RETURN
 
; П/п записи имени файла
 
; П/п записи имени файла
127560$:MOV #10,R2 ; R2 = размер имени файла в словах
+
127560$:MOV     #10,R2         ; R2 = размер имени файла в словах
MOV #23340,R4 ; R4 = адрес начала имени файла
+
        MOV     #23340,R4       ; R4 = адрес начала имени файла
127570$:MOV (R4)+,R0 ; R0 = очередное слово из имени файла
+
127570$:MOV     (R4)+,R0       ; R0 = очередное слово из имени файла
CALL 127602$ ; Запись слова
+
        CALL   127602$         ; Запись слова
SOB R2,127570$ ; Цикл по R2
+
        SOB     R2,127570$     ; Цикл по R2
RETURN
+
        RETURN
 
; П/п записи слова на МЛ
 
; П/п записи слова на МЛ
127602$:CALL 127616$ ; Запись младшего байта
+
127602$:CALL   127616$         ; Запись младшего байта
SWAB R0
+
        SWAB   R0
CALL 127616$ ; Запись старшего байта
+
        CALL   127616$         ; Запись старшего байта
RETURN
+
        RETURN
 
; П/п записи байта на МЛ
 
; П/п записи байта на МЛ
 
; /-----------------------------------------------------------------\
 
; /-----------------------------------------------------------------\
Line 442: Line 443:
 
; !    бит "0", информационные биты (0) -- (7), бит "1", бит "1"    !
 
; !    бит "0", информационные биты (0) -- (7), бит "1", бит "1"    !
 
; \-----------------------------------------------------------------/
 
; \-----------------------------------------------------------------/
127616$:CALL 127660$ ; Запись бита "0"
+
127616$:CALL   127660$         ; Запись бита "0"
SEC ; Признак окончания байта
+
        SEC                     ; Признак окончания байта
127624$:RORB R0 ; Выдвинуть очередной бит
+
127624$:RORB   R0             ; Выдвинуть очередной бит
BEQ 127646$ ; Байт окончился
+
        BEQ     127646$         ; Байт окончился
BCC 127640$ ; Выдвинут бит "0"
+
        BCC     127640$         ; Выдвинут бит "0"
CALL 127664$ ; Запись бита "1"
+
        CALL   127664$         ; Запись бита "1"
BR 127624$
+
        BR     127624$
127640$:CALL 127660$ ; Запись бита "0"
+
127640$:CALL   127660$         ; Запись бита "0"
BR 127624$
+
        BR     127624$
127646$:CALL 127664$ ; Запись концевика (два бита "1")
+
127646$:CALL   127664$         ; Запись концевика (два бита "1")
CALL 127664$
+
        CALL   127664$
RETURN
+
        RETURN
 
; Точка входа при записи бита "0"
 
; Точка входа при записи бита "0"
127660$:CLR R5 ; Признак записи бита "0"
+
127660$:CLR     R5             ; Признак записи бита "0"
BR 127670$
+
        BR     127670$
 
; Точка входа при записи бита "1"
 
; Точка входа при записи бита "1"
127664$:MOV #14,R5 ; Признак записи бита "1"
+
127664$:MOV     #14,R5         ; Признак записи бита "1"
127670$:CALL 130636$ ; Проверка нажатия "СТОП"
+
127670$:CALL   130636$         ; Проверка нажатия "СТОП"
TST R3 ; Запись бита окончена ?
+
        TST     R3             ; Запись бита окончена ?
BNE 127670$ ; Нет
+
        BNE     127670$         ; Нет
ADD R5,PC ; Если запись "1", на 127716$
+
        ADD     R5,PC           ; Если запись "1", на 127716$
MOV 23304$,@#177712 ; Занести длительность "0" в буфер таймера
+
        MOV     23304,@#177712 ; Занести длительность "0" в буфер таймера
MOV #2,R3 ; R3 = число записываемых импульсов
+
        MOV     #2,R3           ; R3 = число записываемых импульсов
BR 127730$
+
        BR     127730$
127716$:MOV 23306$,@#177712 ; Занести длительность "1" в буфер таймера
+
127716$:MOV     23306,@#177712 ; Занести длительность "1" в буфер таймера
MOV #4,R3 ; R3 = число записываемых импульсов
+
        MOV     #4,R3           ; R3 = число записываемых импульсов
 
127730$:CLC
 
127730$:CLC
RETURN
+
        RETURN
 
; П/п обработки прерывания от программируемого таймера
 
; П/п обработки прерывания от программируемого таймера
127734$:BIS #2,@#177716 ; Установить высокий уровень при записи на МЛ
+
127734$:BIS     #2,@#177716     ; Установить высокий уровень при записи на МЛ
MOV #127752$,@#304 ; Новое значения вектора прерывания
+
        MOV     #127752$,@#304 ; Новое значения вектора прерывания
BR 127766$
+
        BR     127766$
127752$:BIC #2,@#177716 ; Установить низкий уровень при записи на МЛ
+
127752$:BIC     #2,@#177716     ; Установить низкий уровень при записи на МЛ
MOV #127734$,@#304 ; Новое значение вектора прерывания
+
        MOV     #127734$,@#304 ; Новое значение вектора прерывания
127766$:TST @#177714 ; Сбросить готовность таймера
+
127766$:TST     @#177714       ; Сбросить готовность таймера
TSTB @#177710 ; Готовность сброшена ?
+
        TSTB   @#177710       ; Готовность сброшена ?
BMI 127766$ ; Нет
+
        BMI     127766$         ; Нет
DEC R3 ; Уменьшить счетчик записываемых импульсов
+
        DEC     R3             ; Уменьшить счетчик записываемых импульсов
BMI 130006$ ; Он отрицательный
+
        BMI     130006$         ; Он отрицательный
RTI
+
        RTI
130006$:MOV #14,R0 ; R0 = ошибка выдержки времени при записи
+
130006$:MOV     #14,R0         ; R0 = ошибка выдержки времени при записи
MOV 23332$,SP
+
        MOV     23332,SP
RETURN
+
        RETURN
 
; П/п начальной подготовки перед чтением
 
; П/п начальной подготовки перед чтением
130020$:CLR @#177710 ; Остановить программируемый таймер
+
130020$:CLR     @#177710       ; Остановить программируемый таймер
MOV 23336$,R1 ; R1 = тип устройства (УКНЦ или MSX)
+
        MOV     23336,R1       ; R1 = тип устройства (УКНЦ или MSX)
CLR @#177712 ; Очистить буфер таймера
+
        CLR     @#177712       ; Очистить буфер таймера
130034$:TST @#177714 ; Буфер очищен ?
+
130034$:TST     @#177714       ; Буфер очищен ?
BNE 130034$ ; Нет
+
        BNE     130034$         ; Нет
BIS #14,@#177716 ; Разрешить прием информации с МЛ
+
        BIS     #14,@#177716   ; Разрешить прием информации с МЛ
MOV #21,@#177710 ; Пуск таймера и разрешение прерывания при
+
        MOV     #21,@#177710   ; Пуск таймера и разрешение прерывания при
; изменении информации на линии МЛ
+
                                ; изменении информации на линии МЛ
RETURN
+
        RETURN
 
; П/п поиска пилот-тона перед заголовком
 
; П/п поиска пилот-тона перед заголовком
130060$:MTPS #200 ; Запретить прерывания
+
130060$:MTPS   #200           ; Запретить прерывания
130064$:MOV 23314$,R2 ; R2 = число перепадов уровня при поиске загол.
+
130064$:MOV     23314,R2       ; R2 = число перепадов уровня при поиске загол.
130070$:MOV R5,R4 ; R4 = длина предыдущего интервала
+
130070$:MOV     R5,R4           ; R4 = длина предыдущего интервала
130072$:CALL 130636$ ; Проверка нажатия "СТОП"
+
130072$:CALL   130636$         ; Проверка нажатия "СТОП"
BIT #40,@#177710 ; Перепад произошел ?
+
        BIT     #40,@#177710   ; Перепад произошел ?
BEQ 130072$ ; Нет
+
        BEQ     130072$         ; Нет
MOV @#177714,R5 ; R5 = длина текущего интервала
+
        MOV     @#177714,R5     ; R5 = длина текущего интервала
130112$:TST @#177714 ; Сбросить готовность таймера
+
130112$:TST     @#177714       ; Сбросить готовность таймера
BIT #250,@#177710 ; Готовность сброшена ?
+
        BIT     #250,@#177710   ; Готовность сброшена ?
BNE 130112$ ; Нет
+
        BNE     130112$         ; Нет
SUB R5,R4 ; Вычислить разность между длинами интервалов
+
        SUB     R5,R4           ; Вычислить разность между длинами интервалов
BPL 130134$
+
        BPL     130134$
NEG R4
+
        NEG     R4
130134$:CMP R4,23322$ ; Разброс длин в норме ?
+
130134$:CMP     R4,23322       ; Разброс длин в норме ?
BHI 130064$ ; Нет
+
        BHI     130064$         ; Нет
SOB R2,130070$ ; Цикл по R2
+
        SOB     R2,130070$     ; Цикл по R2
MOV #10,R3
+
        MOV     #10,R3
MTPS #0
+
        MTPS   #0
RETURN
+
        RETURN
 
; П/п поиска пилот-тона перед зоной данных
 
; П/п поиска пилот-тона перед зоной данных
130156$:MTPS #200 ; Запретить прерывания
+
130156$:MTPS   #200           ; Запретить прерывания
130162$:MOV 23316$,R0 ; R0 = число перепадов уровня при поиске загол.
+
130162$:MOV     23316,R0       ; R0 = число перепадов уровня при поиске загол.
130166$:MOV R5,R4 ; R4 = длина предыдущего интервала
+
130166$:MOV     R5,R4           ; R4 = длина предыдущего интервала
130170$:CALL 130636$ ; Проверка нажатия "СТОП"
+
130170$:CALL   130636$         ; Проверка нажатия "СТОП"
BIT #40,@#177710 ; Перепад произошел ?
+
        BIT     #40,@#177710   ; Перепад произошел ?
BEQ 130170$ ; Нет
+
        BEQ     130170$         ; Нет
MOV @#177714,R5 ; R5 = длина текущего интервала
+
        MOV     @#177714,R5     ; R5 = длина текущего интервала
130210$:TST @#177714 ; Сбросить готовность таймера
+
130210$:TST     @#177714       ; Сбросить готовность таймера
BIT #250,@#177710 ; Готовность сброшена ?
+
        BIT     #250,@#177710   ; Готовность сброшена ?
BNE 130210$ ; Нет
+
        BNE     130210$         ; Нет
SUB R5,R4 ; Вычислить разность между длинами интервалов
+
        SUB     R5,R4           ; Вычислить разность между длинами интервалов
BPL 130232$
+
        BPL     130232$
NEG R4
+
        NEG     R4
130232$:CMP R4,23322$ ; Разброс длин в норме ?
+
130232$:CMP     R4,23322       ; Разброс длин в норме ?
BHI 130162$ ; Нет
+
        BHI     130162$         ; Нет
SOB R0,130166$ ; Цикл по R0
+
        SOB     R0,130166$     ; Цикл по R0
MOV #10,R3
+
        MOV     #10,R3
MTPS #200
+
        MTPS   #0
RETURN
+
        RETURN
 
; П/п вычисления усредненного значения длины бита (между "0" и "1")
 
; П/п вычисления усредненного значения длины бита (между "0" и "1")
130254$:MOV R1,R4 ; Сохранить значение R1 в R4
+
130254$:MOV     R1,R4           ; Сохранить значение R1 в R4
MOV #10,R0 ; R0 = число читаемых импульсов
+
        MOV     #10,R0         ; R0 = число читаемых импульсов
CLR R1
+
        CLR     R1
CLR R3
+
        CLR     R3
130266$:CALL 130530$ ; Чтение бита
+
130266$:CALL   130530$         ; Чтение бита
BIS #170000,R5 ; Преобразование в отрицательное число
+
        BIS     #170000,R5     ; Преобразование в отрицательное число
SUB R5,R1 ; Прибавить к общей длине
+
        SUB     R5,R1           ; Прибавить к общей длине
SOB R0,130266$ ; Цикл по R0
+
        SOB     R0,130266$     ; Цикл по R0
MOV #10,R3
+
        MOV     #10,R3
DIV #10,R0 ; Вычисление среднего значения длины "1"
+
        DIV     #10,R0         ; Вычисление среднего значения длины "1"
MOV R0,R1 ; R1 = длина "1"
+
        MOV     R0,R1           ; R1 = длина "1"
ASR R0 ; R0 = длина "1" / 2
+
        ASR     R0             ; R0 = длина "1" / 2
ADD R1,R0 ; R0 = среднее между длиной "1" и "0"
+
        ADD     R1,R0           ; R0 = среднее между длиной "1" и "0"
NEG R0 ; Преобразование в отрицательное число (12 бит)
+
        NEG     R0             ; Преобразование в отрицательное число (12 бит)
BIC #170000,R0
+
        BIC     #170000,R0
MOV R0,23324$ ; Сохранение его в памяти
+
        MOV     R0,23324       ; Сохранение его в памяти
MOV R4,R1 ; Восстановление R1
+
        MOV     R4,R1           ; Восстановление R1
RETURN
+
        RETURN
 
; П/п поиска данных (определяются по биту "0")
 
; П/п поиска данных (определяются по биту "0")
130336$:CLR R5 ; Очередной бит не прочитан
+
130336$:CLR     R5             ; Очередной бит не прочитан
130340$:CALL 130636$ ; Проверка нажатия "СТОП"
+
130340$:CALL   130636$         ; Проверка нажатия "СТОП"
TST R5 ; Бит прочитан ?
+
        TST     R5             ; Бит прочитан ?
BEQ 130340$ ; Нет
+
        BEQ     130340$         ; Нет
INC R3 ; Увеличить счетчик импульсов
+
        INC     R3             ; Увеличить счетчик импульсов
CMP R5,23324$ ; Это бит "0" ?
+
        CMP     R5,23324       ; Это бит "0" ?
BHIS 130336$ ; Нет
+
        BHIS   130336$         ; Нет
INC R3
+
        INC     R3
INC R3
+
        INC     R3
CALL 130422$ ; Дочитать слово
+
        CALL   130422$         ; Дочитать слово
RETURN
+
        RETURN
 
; П/п чтения имени файла
 
; П/п чтения имени файла
130372$:MOV #10,R2 ; R2 = длина имени файла в словах
+
130372$:MOV     #10,R2         ; R2 = длина имени файла в словах
MOV #23364$,R4 ; R4 = адрес буфера
+
        MOV     #23364,R4       ; R4 = адрес буфера
CALL 130336$ ; Поиск и чтение первого слова
+
        CALL   130336$         ; Поиск и чтение первого слова
BR 130414$
+
        BR     130414$
130410$:CALL 130436$ ; Чтение очередного слова
+
130410$:CALL   130436$         ; Чтение очередного слова
130414$:MOV R0,(R4)+ ; Поместить в буфер
+
130414$:MOV     R0,(R4)+       ; Поместить в буфер
SOB R2,130410$ ; Цикл по R2
+
        SOB     R2,130410$     ; Цикл по R2
RETURN
+
        RETURN
 
; П/п дочитывания слова
 
; П/п дочитывания слова
130422$:CLRB R0
+
130422$:CLRB   R0
BIS #200,R0 ; Признак окончания чтения байта
+
        BIS     #200,R0         ; Признак окончания чтения байта
CALL 130470$ ; Дочитать байт
+
        CALL   130470$         ; Дочитать байт
BR 130442$
+
        BR     130442$
 
; П/п чтения слова
 
; П/п чтения слова
130436$:CALL 130454$ ; Прочесть младший байт
+
130436$:CALL   130454$         ; Прочесть младший байт
130442$:SWAB R0
+
130442$:SWAB   R0
CALL 130454$ ; Прочесть старший байт
+
        CALL   130454$         ; Прочесть старший байт
SWAB R0
+
        SWAB   R0
RETURN
+
        RETURN
 
; П/п чтения байта
 
; П/п чтения байта
130454$:CLRB R0
+
130454$:CLRB   R0
BIS #200,R0 ; Установить признак окончания
+
        BIS     #200,R0         ; Установить признак окончания
CALL 130530$ ; Прочесть бит
+
        CALL   130530$         ; Прочесть бит
BCS 130516 ; Это не "0" (ошибка)
+
        BCS     130516$        ; Это не "0" (ошибка)
130470$:CALL 130530$ ; Прочесть бит
+
130470$:CALL   130530$         ; Прочесть бит
RORB R0 ; "Задвинуть" бит
+
        RORB   R0             ; "Задвинуть" бит
BCC 130470$ ; Пока не конец
+
        BCC     130470$         ; Пока не конец
CALL 130530$ ; Прочесть бит
+
        CALL   130530$         ; Прочесть бит
BCC 130516$ ; Это не "1" (ошибка)
+
        BCC     130516$         ; Это не "1" (ошибка)
CALL 130530$ ; Прочесть бит
+
        CALL   130530$         ; Прочесть бит
BCC 130516$ ; Это не "1" (ошибка)
+
        BCC     130516$         ; Это не "1" (ошибка)
RETURN
+
        RETURN
130516$:MOV #11,R0 ; R0 = ошибка чтения
+
130516$:MOV     #11,R0         ; R0 = ошибка чтения
MOV 23332$,SP
+
        MOV     23332,SP
RETURN
+
        RETURN
 
; П/п чтения бита
 
; П/п чтения бита
130530$:CLR R5 ; Бит еще не прочитан
+
130530$:CLR     R5             ; Бит еще не прочитан
130532$:CALL 130636$ ; Проверка нажатия "СТОП"
+
130532$:CALL   130636$         ; Проверка нажатия "СТОП"
TST R5 ; Бит прочитан ?
+
        TST     R5             ; Бит прочитан ?
BEQ 130532$ ; Нет
+
        BEQ     130532$         ; Нет
CMP R5,23324$ ; Это "0" ?
+
        CMP     R5,23324       ; Это "0" ?
BLO 130560$ ; Да
+
        BLO     130560$         ; Да
MOV #3,R3
+
        MOV     #3,R3
SEC ; Признак бита "1"
+
        SEC                     ; Признак бита "1"
BR 130566$
+
        BR     130566$
130560$:MOV #1,R3
+
130560$:MOV     #1,R3
CLC ; Признак бита "0"
+
        CLC                     ; Признак бита "0"
 
130566$:RETURN
 
130566$:RETURN
 
; П/п обработки прерывания по линии МЛ при изменении уровня сигнала
 
; П/п обработки прерывания по линии МЛ при изменении уровня сигнала
130570$:TST R3 ; Счетчик равен нулю ?
+
130570$:TST     R3             ; Счетчик равен нулю ?
BNE 130604$ ; Нет
+
        BNE     130604$         ; Нет
TST R5 ; Обработка предыдущего бита окончена ?
+
        TST     R5             ; Обработка предыдущего бита окончена ?
BNE 130624$ ; Нет
+
        BNE     130624$         ; Нет
MOV @#177714,R5 ; R5 = длина импульса
+
        MOV     @#177714,R5     ; R5 = длина импульса
130604$:TST @#177714 ; Сбросить готовность таймера
+
130604$:TST     @#177714       ; Сбросить готовность таймера
BIT #250,@#177710 ; Готовность сброшена ?
+
        BIT     #250,@#177710   ; Готовность сброшена ?
BNE 130604$ ; Нет
+
        BNE     130604$         ; Нет
DEC R3 ; Уменьшить счетчик импульсов
+
        DEC     R3             ; Уменьшить счетчик импульсов
RTI
+
        RTI
130624$:MOV #13,R0 ; R0 = ошибка выдержки времени при чтении
+
130624$:MOV     #13,R0         ; R0 = ошибка выдержки времени при чтении
MOV 23332$,SP
+
        MOV     23332,SP
RETURN
+
        RETURN
 
; П/п проверки нажатия клавиши "СТОП"
 
; П/п проверки нажатия клавиши "СТОП"
130636$:TSTB @#177700 ; Клавиша нажата ?
+
130636$:TSTB   @#177700       ; Клавиша нажата ?
BPL 130670$ ; Нет
+
        BPL     130670$         ; Нет
CMP #4,@#177702 ; Это "СТОП" ?
+
        CMP     #4,@#177702     ; Это "СТОП" ?
BNE 130670$ ; Нет
+
        BNE     130670$         ; Нет
MOV 23332$,SP
+
        MOV     23332,SP
MOV #377,R0 ; R0 = нажата клавиша "СТОП"
+
        MOV     #377,R0         ; R0 = нажата клавиша "СТОП"
MTPS #200 ; Запретить прерывания
+
        MTPS   #200           ; Запретить прерывания
 
130670$:RETURN
 
130670$:RETURN
 
; П/п выключения программируемого таймера
 
; П/п выключения программируемого таймера
130672$:CLR @#177710 ; Выключить таймер (режим "ОСТАНОВ")
+
130672$:CLR     @#177710       ; Выключить таймер (режим "ОСТАНОВ")
TST @#177714 ; Сбросить готовность таймера
+
        TST     @#177714       ; Сбросить готовность таймера
TST @#177710 ; Готовность сброшена ?
+
        TST     @#177710       ; Готовность сброшена ?
BNE 130672$ ; Нет
+
        BNE     130672$         ; Нет
RETURN
+
        RETURN
 
; *** ДИСКОВОД ***
 
; *** ДИСКОВОД ***
 
; П/п установки начальных значений
 
; П/п установки начальных значений
130712$:TST @#177132 ; Проверка присутствия контроллера дисковода
+
130712$:TST     @#177132       ; Проверка присутствия контроллера дисковода
CLR 23204$ ; Очистить управляющее слово
+
        CLR     23204           ; Очистить управляющее слово
MOV 23204$,@#177130 ; Инициализация контроллера
+
        MOV     23204,@#177130 ; Инициализация контроллера
CLRB 23334$
+
        CLRB   23334
CLR 23220$
+
        CLR     23220
CLR 23222$
+
        CLR     23222
BIT #10000,@#177704 ; Подключен 80-дорожечный дисковод ?
+
        BIT     #10000,@#177704 ; Подключен 80-дорожечный дисковод ?
BEQ 131030$ ; Нет
+
        BEQ     131030$         ; Нет
 
; Параметры для 80-дорожечного дисковода
 
; Параметры для 80-дорожечного дисковода
MOV #620,23216$ ; Время разгона двигателя
+
        MOV     #620,23216     ; Время разгона двигателя
MOV #23260,R1 ; R1 = адрес буфера времен шага
+
        MOV     #23260,R1       ; R1 = адрес буфера времен шага
MOV #3,R0 ; R0 = время шага
+
        MOV     #3,R0           ; R0 = время шага
CALL 131164$ ; Установить для всех четырех накопителей
+
        CALL   131164$         ; Установить для всех четырех накопителей
MOV #23264,R1 ; R1 = адрес буфера времен загрузки головки
+
        MOV     #23264,R1       ; R1 = адрес буфера времен загрузки головки
MOV #44,R0 ; R0 = время загрузки головки
+
        MOV     #44,R0         ; R0 = время загрузки головки
CALL 131164$ ; Установить для всех четырех накопителей
+
        CALL   131164$         ; Установить для всех четырех накопителей
MOVB #50,23226$ ; Номер дорожки, где вкл. прекоррекция 250 нс
+
        MOVB   #50,23226       ; Номер дорожки, где вкл. прекоррекция 250 нс
MOVB #120,23227$ ; Номер дорожки, где вкл. прекоррекция 500 нс
+
        MOVB   #120,23227     ; Номер дорожки, где вкл. прекоррекция 500 нс
BR 131102$
+
        BR     131102$
 
; Параметры для 40-дорожечного дисковода
 
; Параметры для 40-дорожечного дисковода
131030$:MOV #1750,23216$ ; Время разгона двигателя
+
131030$:MOV     #1750,23216     ; Время разгона двигателя
MOV #23260,R1 ; R1 = адрес буфера времен шага
+
        MOV     #23260,R1       ; R1 = адрес буфера времен шага
MOV #24,R0 ; R0 = время шага
+
        MOV     #24,R0         ; R0 = время шага
CALL 131164$ ; Установить для всех четырех накопителей
+
        CALL   131164$         ; Установить для всех четырех накопителей
MOV #23264,R1 ; R1 = адрес буфера времен загрузки головки
+
        MOV     #23264,R1       ; R1 = адрес буфера времен загрузки головки
MOV #50,R0 ; R0 = время загрузки головки
+
        MOV     #50,R0         ; R0 = время загрузки головки
CALL 131164$ ; Установить для всех четырех накопителей
+
        CALL   131164$         ; Установить для всех четырех накопителей
MOVB #10,23226$ ; Номер дорожки, где вкл. прекоррекция 250 нс
+
        MOVB   #10,23226       ; Номер дорожки, где вкл. прекоррекция 250 нс
MOVB #36,23227$ ; Номер дорожки, где вкл. прекоррекция 500 нс
+
        MOVB   #36,23227       ; Номер дорожки, где вкл. прекоррекция 500 нс
131102$:MOV #23270,R1 ; R1 = адрес буфера числа секторов в дорожке
+
131102$:MOV     #23270,R1       ; R1 = адрес буфера числа секторов в дорожке
MOV #12,R0 ; R0 = число секторов в дорожке
+
        MOV     #12,R0         ; R0 = число секторов в дорожке
CALL 131164$ ; Установить для всех четырех накопителей
+
        CALL   131164$         ; Установить для всех четырех накопителей
MOV #23274,R1 ; R1 = адрес буфера параметров SKIP (REGIM)
+
        MOV     #23274,R1       ; R1 = адрес буфера параметров SKIP (REGIM)
MOV #1,R0 ; R0 = параметр SKIP
+
        MOV     #1,R0           ; R0 = параметр SKIP
CALL 131164$ ; Установить для всех четырех накопителей
+
        CALL   131164$         ; Установить для всех четырех накопителей
MOV #2,23250$ ; Текущий формат сектора - 512 байт
+
        MOV     #2,23250       ; Текущий формат сектора - 512 байт
MOV #-1,23337$
+
        MOV     #-1,23337
MOV #-1,23254$ ; Неопределенный номер текущих дорожек
+
        MOV     #-1,23254       ; Неопределенный номер текущих дорожек
MOV #-1,23256$
+
        MOV     #-1,23256
RETURN
+
        RETURN
131164$:MOV #4,R2 ; R2 = максимальное число накопителей
+
131164$:MOV     #4,R2           ; R2 = максимальное число накопителей
131170$:MOVB R0,(R1)+ ; Установить параметр
+
131170$:MOVB   R0,(R1)+       ; Установить параметр
SOB R2,131170$
+
        SOB     R2,131170$
RETURN
+
        RETURN
 
; Основная п/п управления накопителем
 
; Основная п/п управления накопителем
131176$:JSR R5,125560$ ; Чтение МП
+
131176$:JSR     R5,125560$     ; Чтение МП
.WORD 5
+
        .WORD   5
CALL 176376$ ; Останов программируемого таймера
+
        CALL   176376$         ; Останов программируемого таймера
JSR R5,134210$ ; Запуск таймера с последующим вызовом п/п
+
        JSR     R5,134210$     ; Запуск таймера с последующим вызовом п/п
.WORD 10,131224$,107 ; по адресу 131224$
+
        .WORD   10,131224$,107 ; по адресу 131224$
RETURN
+
        RETURN
131224$:CALL 134242$ ; Сброс готовности программируемого таймера
+
131224$:CALL   134242$         ; Сброс готовности программируемого таймера
CLRB @#177710 ; Перевести таймер в режим "ОСТАНОВ"
+
        CLRB   @#177710       ; Перевести таймер в режим "ОСТАНОВ"
CALL 134316$ ; Сохранить значения РОН
+
        CALL   134316$         ; Сохранить значения РОН
BIC #175754,23204$ ; Сброс в УС прекоррекции,номера стороны ...
+
        BIC     #175754,23204   ; Сброс в УС прекоррекции,номера стороны ...
BICB #300,23335$ ; Очистка старших битов кода функции
+
        BICB   #300,23335     ; Очистка старших битов кода функции
BEQ 131516$ ; Код функции = 0 (ошибка)
+
        BEQ     131516$         ; Код функции = 0 (ошибка)
CMPB #10,23335$ ; Код функции >= 10(8) ?
+
        CMPB   #10,23335       ; Код функции >= 10(8) ?
BLOS 131272$ ; Да
+
        BLOS   131272$         ; Да
JMP 135214 ; Код функции в пределе 1 -- 7
+
        JMP     135214$        ; Код функции в пределе 1 -- 7
131272$:TSTB 23337$ ; Какая сторона запрошена ?
+
131272$:TSTB   23337           ; Какая сторона запрошена ?
BPL 131316$ ; Низ
+
        BPL     131316$         ; Низ
BIS #40,23204$ ; Установить "ВЕРХ" в УС
+
        BIS     #40,23204       ; Установить "ВЕРХ" в УС
MOVB #1,23212$ ; Текущая сторона - верх
+
        MOVB   #1,23212       ; Текущая сторона - верх
BR 131330$
+
        BR     131330$
131316$:BIC #40,23204$ ; Установить "НИЗ" в УС
+
131316$:BIC     #40,23204       ; Установить "НИЗ" в УС
CLRB 23212$ ; Текущая сторона - низ
+
        CLRB   23212           ; Текущая сторона - низ
131330$:BICB #374,23337$ ; Оставить биты номера устройства
+
131330$:BICB   #374,23337     ; Оставить биты номера устройства
MOVB 23340$,23213$ ; Переслать номер запрашиваемой дорожки
+
        MOVB   23340,23213     ; Переслать номер запрашиваемой дорожки
CLR R1
+
        CLR     R1
MOVB 23337$,R1 ; R1 = номер устройства
+
        MOVB   23337,R1       ; R1 = номер устройства
MOVB 23260(R1),23220$; Текущее время шага
+
        MOVB   23260(R1),23220 ; Текущее время шага
MOVB 23264(R1),23222$; Текущее время загрузки головки
+
        MOVB   23264(R1),23222 ; Текущее время загрузки головки
MOVB 23274(R1),23300$; Текущий параметр SKIP
+
        MOVB   23274(R1),23300 ; Текущий параметр SKIP
MOVB 23270(R1),23301$; Текущее число секторов в дорожке
+
        MOVB   23270(R1),23301 ; Текущее число секторов в дорожке
TSTB 23341$ ; Номер запрашиваемого сектора отрицательный ?
+
        TSTB   23341           ; Номер запрашиваемого сектора отрицательный ?
BMI 131516$ ; Да
+
        BMI     131516$         ; Да
CMPB 23341$,23301$ ; Номер сектора превышает лимит ?
+
        CMPB   23341,23301     ; Номер сектора превышает лимит ?
BHI 131516$ ; Да
+
        BHI     131516$         ; Да
CMPB #5,23301$ ; В дорожке 5 секторов ?
+
        CMPB   #5,23301       ; В дорожке 5 секторов ?
BEQ 131440$ ; Да
+
        BEQ     131440$         ; Да
MOV #2,23250$ ; Текущий формат сектора - 512 байт
+
        MOV     #2,23250       ; Текущий формат сектора - 512 байт
BR 131446$
+
        BR     131446$
131440$:MOV #3,23250$ ; Текущий формат сектора - 1024 байт
+
131440$:MOV     #3,23250       ; Текущий формат сектора - 1024 байт
131446$:MOV 23250$,R0 ; R0 = текущий формат сектора
+
131446$:MOV     23250,R0       ; R0 = текущий формат сектора
MOVB 135426$(R0),23302$; (23302) = размер межсекторного промежутка
+
        MOVB   135426$(R0),23302; (23302) = размер межсекторного промежутка
ASL R0
+
        ASL     R0
MOV 135412$(R0),23252$; (23252) = число слов в секторе
+
        MOV     135412$(R0),23252; (23252) = число слов в секторе
CMPB #30,23335$ ; Код функции < 30
+
        CMPB   #30,23335       ; Код функции < 30
BHI 131502$ ; Да
+
        BHI     131502$         ; Да
BR 131542$
+
        BR     131542$
131502$:CLC ; Преобразование адреса для загрузки в 177010
+
131502$:CLC                     ; Преобразование адреса для загрузки в 177010
ROR 23342$
+
        ROR     23342
MOV 23344$,R0 ; R0 = число слов для чтения
+
        MOV     23344,R0       ; R0 = число слов для чтения
BPL 131530$ ; Оно < 32768 (в норме)
+
        BPL     131530$         ; Оно < 32768 (в норме)
131516$:MOVB #11,23334$ ; Ошибочный массив параметров
+
131516$:MOVB   #11,23334       ; Ошибочный массив параметров
JMP 134422$
+
        JMP     134422$
131530$:ADD 23342$,R0 ; R0 = число слов + начальный адрес
+
131530$:ADD     23342,R0       ; R0 = число слов + начальный адрес
CMP #70000,R0 ; Конец буфера выходит за границу 56 KB ?
+
        CMP     #70000,R0       ; Конец буфера выходит за границу 56 KB ?
BLO 131516$ ; Да
+
        BLO     131516$         ; Да
131542$:MOVB 23337$,R1 ; R1 = номер устройства
+
131542$:MOVB   23337,R1       ; R1 = номер устройства
MOV R1,23206$
+
        MOV     R1,23206
ADD #23254,23206$ ; (23206) = указатель на текущую дорожку
+
        ADD     #23254,23206   ; (23206) = указатель на текущую дорожку
JSR R5,134210$ ; Запуск таймера с последующим вызовом п/п
+
        JSR     R5,134210$     ; Запуск таймера с последующим вызовом п/п
.WORD 101,131710$,107 ; по адресу 131710$
+
        .WORD   101,131710$,107 ; по адресу 131710$
BIT #2000,23204$ ; Двигатель накопителя еще работает ?
+
        BIT     #2000,23204     ; Двигатель накопителя еще работает ?
BNE 131620$ ; Да
+
        BNE     131620$         ; Да
BIS #20,23204$ ; Установить бит запуска мотора в УС
+
        BIS     #20,23204       ; Установить бит запуска мотора в УС
MOV 23216$,23224$ ; (23224) = время разгона двигателя
+
        MOV     23216,23224     ; (23224) = время разгона двигателя
BR 131652$
+
        BR     131652$
131620$:MOVB 23204$,R0
+
131620$:MOVB   23204,R0
BICB #374,R0 ; R0 = номер выбранного устройства
+
        BICB   #374,R0         ; R0 = номер выбранного устройства
CMPB 135406$(R1),R0 ; Номера выбранного и запрошенного уст-в равны?
+
        CMPB   135406$(R1),R0 ; Номера выбранного и запрошенного уст-в равны?
BNE 131644$ ; Нет
+
        BNE     131644$         ; Нет
CALL 134356$ ; Восстановить РОН
+
        CALL   134356$         ; Восстановить РОН
BR 131726$
+
        BR     131726$
131644$:MOV 23222$,23224$ ; (23224) = время загрузки головки
+
131644$:MOV     23222,23224     ; (23224) = время загрузки головки
131652$:BIC #3,23204$
+
131652$:BIC     #3,23204
BISB 135406$(R1),23204$; Установить биты номера устройства в УС
+
        BISB   135406$(R1),23204; Установить биты номера устройства в УС
BIS #2000,23204$ ; Установить бит выбора накопителя
+
        BIS     #2000,23204     ; Установить бит выбора накопителя
MOV 23204$,@#177130 ; Запуск мотора
+
        MOV     23204,@#177130 ; Запуск мотора
CALL 134356$ ; Восстановить РОН
+
        CALL   134356$         ; Восстановить РОН
RTI
+
        RTI
131710$:CALL 134242$ ; Сброс готовности программируемого таймера
+
131710$:CALL   134242$         ; Сброс готовности программируемого таймера
DEC 23224$ ; Уменьшить значение счетчика (разгон мотора)
+
        DEC     23224           ; Уменьшить значение счетчика (разгон мотора)
BNE 131724$ ; Он еще не равен нулю
+
        BNE     131724$         ; Он еще не равен нулю
BR 131726$
+
        BR     131726$
 
131724$:RTI
 
131724$:RTI
131726$:JSR R5,134210$ ; Запуск таймера с последующим вызовом п/п
+
131726$:JSR     R5,134210$     ; Запуск таймера с последующим вызовом п/п
.WORD 101,132074$,107 ; по адресу 132074$
+
        .WORD   101,132074$,107 ; по адресу 132074$
TSTB @23206$ ; Текущий номер дорожки определенный ?
+
        TSTB   @23206         ; Текущий номер дорожки определенный ?
BPL 132112$ ; Да
+
        BPL     132112$         ; Да
MOVB #200,@23206$ ; Примем в качестве номера дорожки - 128
+
        MOVB   #200,@23206     ; Примем в качестве номера дорожки - 128
BIC #100,23204$ ; Установить в УС перемещение от центра
+
        BIC     #100,23204     ; Установить в УС перемещение от центра
MOV 23204$,@#177130 ; Сообщить об этом контроллеру
+
        MOV     23204,@#177130 ; Сообщить об этом контроллеру
BIS #200,23204$ ; Установить в УС бит шага
+
        BIS     #200,23204     ; Установить в УС бит шага
131776$:BIT #1,@#177130 ; Головка находится на нулевой дорожке ?
+
131776$:BIT     #1,@#177130     ; Головка находится на нулевой дорожке ?
BEQ 132022$ ; Нет
+
        BEQ     132022$         ; Нет
BIC #200,23204$ ; Сбросить в УС бит шага
+
        BIC     #200,23204     ; Сбросить в УС бит шага
CLRB @23206$ ; Текущая дорожка - нулевая
+
        CLRB   @23206         ; Текущая дорожка - нулевая
BR 132112$
+
        BR     132112$
132022$:DECB @23206$ ; Уменьшить номер текущей дорожки
+
132022$:DECB   @23206         ; Уменьшить номер текущей дорожки
BNE 132056$ ; Пока не 0
+
        BNE     132056$         ; Пока не 0
BIC #200,23204$ ; Сбросить в УС бит шага
+
        BIC     #200,23204     ; Сбросить в УС бит шага
MOVB #377,@23206$ ; Номер дорожки - неопределенный
+
        MOVB   #377,@23206     ; Номер дорожки - неопределенный
MOVB #7,23334$ ; Ошибка - нулевая дорожка не обнаружена
+
        MOVB   #7,23334       ; Ошибка - нулевая дорожка не обнаружена
JMP 134422$
+
        JMP     134422$
132056$:MOV 23204$,@#177130 ; Сделать шаг назад
+
132056$:MOV     23204,@#177130 ; Сделать шаг назад
MOV 23220$,23224$ ; (23224) = время шага
+
        MOV     23220,23224     ; (23224) = время шага
RTI
+
        RTI
132074$:CALL 134242$ ; Сбросить готовность программируемого таймера
+
132074$:CALL   134242$         ; Сбросить готовность программируемого таймера
DEC 23224$ ; Уменьшить значение счетчика (время шага)
+
        DEC     23224           ; Уменьшить значение счетчика (время шага)
BNE 132110$ ; Он не равен нулю
+
        BNE     132110$         ; Он не равен нулю
BR 131776$
+
        BR     131776$
 
132110$:RTI
 
132110$:RTI
132112$:CMPB @23206$,23340$ ; Сравнить номера текущей и запрошенной дорожек
+
132112$:CMPB   @23206,23340   ; Сравнить номера текущей и запрошенной дорожек
BEQ 132346$ ; Равны
+
        BEQ     132346$         ; Равны
BHI 132164$ ; Больше
+
        BHI     132164$         ; Больше
INCB @23206 ; Увеличить номер текущей дорожки
+
        INCB   @23206         ; Увеличить номер текущей дорожки
BMI 132152$ ; Он > 127 (ошибка)
+
        BMI     132152$         ; Он > 127 (ошибка)
BIT #100,23204$ ; В УС установлен бит перемещения к центру
+
        BIT     #100,23204     ; В УС установлен бит перемещения к центру
BNE 132246$ ; Да
+
        BNE     132246$         ; Да
BIS #100,23204$ ; Установить в УС бит перемещения к центру
+
        BIS     #100,23204     ; Установить в УС бит перемещения к центру
BR 132224$
+
        BR     132224$
132152$:MOVB #10,23334$ ; Ошибка - дорожка не обнаружена
+
132152$:MOVB   #10,23334       ; Ошибка - дорожка не обнаружена
JMP 134422$
+
        JMP     134422$
132164$:DECB @23206$ ; Уменьшить номер текущей дорожки
+
132164$:DECB   @23206         ; Уменьшить номер текущей дорожки
BIT #1,@#177130 ; Головка находится на нулевой дорожке ?
+
        BIT     #1,@#177130     ; Головка находится на нулевой дорожке ?
BEQ 132206$ ; Нет
+
        BEQ     132206$         ; Нет
CLRB @23206$ ; Текущая дорожка - нулевая
+
        CLRB   @23206         ; Текущая дорожка - нулевая
BR 132112$
+
        BR     132112$
132206$:BIT #100,23204$ ; В УС сброшен бит перемещения
+
132206$:BIT     #100,23204     ; В УС сброшен бит перемещения
BEQ 132246$ ; Да
+
        BEQ     132246$         ; Да
BIC #100,23204$ ; Сбросить в УС бит перемещения
+
        BIC     #100,23204     ; Сбросить в УС бит перемещения
132224$:MOV 23204$,@#177130 ; Извещение контроллера о направлении перемещ.
+
132224$:MOV     23204,@#177130 ; Извещение контроллера о направлении перемещ.
MOV #132242$,@#304 ; Адрес новой п/п обработки прерывания
+
        MOV     #132242$,@#304 ; Адрес новой п/п обработки прерывания
RTI
+
        RTI
132242$:CALL 134242$ ; Сбросить готовность программируемого таймера
+
132242$:CALL   134242$         ; Сбросить готовность программируемого таймера
132246$:MOVB 23300$,23246$ ; (23246) = текущий параметр SKIP
+
132246$:MOVB   23300,23246     ; (23246) = текущий параметр SKIP
132254$:MOV 23220$,23224$ ; (23224) = время шага
+
132254$:MOV     23220,23224     ; (23224) = время шага
MOV #132322$,@#304 ; Адрес новой п/п обработки прерывания
+
        MOV     #132322$,@#304 ; Адрес новой п/п обработки прерывания
CALL 132276$ ; Выполнить шаг в выбранном направлении
+
        CALL   132276$         ; Выполнить шаг в выбранном направлении
RTI
+
        RTI
132276$:BIS #200,23204$ ; Установить в УС бит шага
+
132276$:BIS     #200,23204     ; Установить в УС бит шага
MOV 23204$,@#177130$; Выполнить шаг
+
        MOV     23204,@#177130 ; Выполнить шаг
BIC #200,23204$ ; Сбросить в УС бит шага
+
        BIC     #200,23204     ; Сбросить в УС бит шага
RETURN
+
        RETURN
132322$:CALL 134242$ ; Сбросить готовность программируемого таймера
+
132322$:CALL   134242$         ; Сбросить готовность программируемого таймера
DEC 23224$ ; Уменьшить значение счетчика (время шага)
+
        DEC     23224           ; Уменьшить значение счетчика (время шага)
BNE 132344$ ; Он не равен нулю
+
        BNE     132344$         ; Он не равен нулю
DECB 23246$ ; Уменьшить параметр пропуска дорожки
+
        DECB   23246           ; Уменьшить параметр пропуска дорожки
BNE 132254$ ; Не равен нулю
+
        BNE     132254$         ; Не равен нулю
BR 132112$
+
        BR     132112$
 
132344$:RTI
 
132344$:RTI
132346$:BIC #14,23204$ ; Очистить в УС биты прекоррекции
+
132346$:BIC     #14,23204       ; Очистить в УС биты прекоррекции
MOV 23226$,23246$ ; (23246) = номера дорожек, где вкл. прекорр.
+
        MOV     23226,23246     ; (23246) = номера дорожек, где вкл. прекорр.
CMPB #1,23300$ ; Параметр SKIP равен 1 ?
+
        CMPB   #1,23300       ; Параметр SKIP равен 1 ?
BEQ 132402$ ; Да
+
        BEQ     132402$         ; Да
ASRB 23246$ ; Уменьшить номера дорожек на 2
+
        ASRB   23246           ; Уменьшить номера дорожек на 2
ASRB 23247$
+
        ASRB   23247
132402$:CMPB 23246$,@23206$ ; Надо включать прекоррекцию ?
+
132402$:CMPB   23246,@23206   ; Надо включать прекоррекцию ?
BHI 132440$ ; Нет
+
        BHI     132440$         ; Нет
CMPB 23247$,@23206$ ; Включать прекоррекцию 500 нс ?
+
        CMPB   23247,@23206   ; Включать прекоррекцию 500 нс ?
BHI 132432 ; Да
+
        BHI     132432$        ; Да
BIS #4,23204$ ; Установить в УС бит вкл. прекоррекции 250 нс
+
        BIS     #4,23204       ; Установить в УС бит вкл. прекоррекции 250 нс
BR 132440$
+
        BR     132440$
132432$:BIS #10,23204$ ; Установить в УС бит вкл. прекоррекции 500 нс
+
132432$:BIS     #10,23204       ; Установить в УС бит вкл. прекоррекции 500 нс
132440$:MOV 23204$,@#177130 ; Извещение контроллера о вкл. прекоррекции
+
132440$:MOV     23204,@#177130 ; Извещение контроллера о вкл. прекоррекции
MOV #132456$,@#304 ; Адрес новой п/п обработки прерывания
+
        MOV     #132456$,@#304 ; Адрес новой п/п обработки прерывания
RTI
+
        RTI
132456$:CALL 134242$ ; Сбросить готовность программируемого таймера
+
132456$:CALL   134242$         ; Сбросить готовность программируемого таймера
CLRB @#177710 ; Остановить таймер
+
        CLRB   @#177710       ; Остановить таймер
CALL 134316$ ; Сохранить значения РОН
+
        CALL   134316$         ; Сохранить значения РОН
MOV #177130,R4 ; R4 = адрес РСУ накопителя
+
        MOV     #177130,R4     ; R4 = адрес РСУ накопителя
MOV R4,R5
+
        MOV     R4,R5
TST (R5)+ ; R5 = адрес РД накопителя
+
        TST     (R5)+           ; R5 = адрес РД накопителя
CMPB #10,23335$ ; Запрошено чтение ?
+
        CMPB   #10,23335       ; Запрошено чтение ?
BEQ 132570$ ; Да
+
        BEQ     132570$         ; Да
BIT #4,@R4 ; Дискета защищена от записи ?
+
        BIT     #4,@R4         ; Дискета защищена от записи ?
BEQ 132532$ ; Нет
+
        BEQ     132532$         ; Нет
MOVB #6,23334$ ; Ошибка - защита от записи
+
        MOVB   #6,23334       ; Ошибка - защита от записи
JMP 134422$
+
        JMP     134422$
132532$:CMPB #20,23335$ ; Запрошена запись ?
+
132532$:CMPB   #20,23335       ; Запрошена запись ?
BEQ 132570$
+
        BEQ     132570$
CMPB #30,23335$ ; Запрошено форматирование дорожки ?
+
        CMPB   #30,23335       ; Запрошено форматирование дорожки ?
BNE 132556$ ; Нет
+
        BNE     132556$         ; Нет
JMP 134474$
+
        JMP     134474$
132556$:MOVB #11,23334$ ; Ошибка - неверный массив параметров
+
132556$:MOVB   #11,23334       ; Ошибка - неверный массив параметров
JMP 134422$
+
        JMP     134422$
132570$:MOV #36,23224$
+
132570$:MOV     #36,23224
MOV 23224$,R2
+
        MOV     23224,R2
MOV 23204$,R3 ; R3 = УС
+
        MOV     23204,R3       ; R3 = УС
MOV #177130,R4 ; R4 = адрес РСУ накопителя
+
        MOV     #177130,R4     ; R4 = адрес РСУ накопителя
MOV R4,R5
+
        MOV     R4,R5
TST (R5)+ ; R5 = адрес РД накопителя
+
        TST     (R5)+           ; R5 = адрес РД накопителя
JSR R5,134210$ ; Запуск таймера
+
        JSR     R5,134210$     ; Запуск таймера
.WORD 2465,132630$,7
+
        .WORD   2465,132630$,7
132630$:MOV @R5,R0 ; Прочесть слово с дискеты
+
132630$:MOV     @R5,R0         ; Прочесть слово с дискеты
BEQ 132640$ ; Это нуль
+
        BEQ     132640$         ; Это нуль
INC R0
+
        INC     R0
BNE 132656$ ; Это не минус один
+
        BNE     132656$         ; Это не минус один
132640$:TSTB @#177710 ; Таймер окончил счет ?
+
132640$:TSTB   @#177710       ; Таймер окончил счет ?
BPL 132630$ ; Нет
+
        BPL     132630$         ; Нет
CALL 134242$ ; Сбросить готовность таймера
+
        CALL   134242$         ; Сбросить готовность таймера
SOB R2,132630$
+
        SOB     R2,132630$
BR 132772$ ; Ошибка (не форматирована дискета или ее нет)
+
        BR     132772$         ; Ошибка (не форматирована дискета или ее нет)
132656$:MOV #4,R1
+
132656$:MOV     #4,R1
CMPB #5,23301$ ; Формат 1024 байта в секторе ?
+
        CMPB   #5,23301       ; Формат 1024 байта в секторе ?
BNE 132702$ ; Нет
+
        BNE     132702$         ; Нет
TST @R4 ; Присутствует линия индекс ?
+
        TST     @R4             ; Присутствует линия индекс ?
BPL 132702$ ; Нет
+
        BPL     132702$         ; Нет
MOV #36,R1
+
        MOV     #36,R1
132702$:MOV @R5,R0 ; Прочесть слово с дискеты
+
132702$:MOV     @R5,R0         ; Прочесть слово с дискеты
BEQ 132730$ ; Это нуль
+
        BEQ     132730$         ; Это нуль
INC R0
+
        INC     R0
BEQ 132730$ ; Это минус один
+
        BEQ     132730$         ; Это минус один
TSTB @#177710 ; Таймер окончил счет
+
        TSTB   @#177710       ; Таймер окончил счет
BPL 132656$ ; Нет
+
        BPL     132656$         ; Нет
CALL 134242$ ; Сбросить готовность таймера
+
        CALL   134242$         ; Сбросить готовность таймера
SOB R2,132656$
+
        SOB     R2,132656$
BR 133002$ ; Ошибка (не найден межсекторный промежуток)
+
        BR     133002$         ; Ошибка (не найден межсекторный промежуток)
132730$:MOV @R5,R0 ; Прочесть слово с дискеты
+
132730$:MOV     @R5,R0         ; Прочесть слово с дискеты
BEQ 132740$ ; Это нуль
+
        BEQ     132740$         ; Это нуль
INC R0
+
        INC     R0
BNE 132640$ ; Это не минус один
+
        BNE     132640$         ; Это не минус один
132740$:SOB R1,132730$
+
132740$:SOB     R1,132730$
BIS #400,R3 ; Установить в УС бит поиска заголовка
+
        BIS     #400,R3         ; Установить в УС бит поиска заголовка
MOV R3,@R4 ; Начать поиск
+
        MOV     R3,@R4         ; Начать поиск
BIC #400,R3 ; Сбросить в УС бит поиска заголовка
+
        BIC     #400,R3         ; Сбросить в УС бит поиска заголовка
MOV #226,R0 ; Время ожидания поиска
+
        MOV     #226,R0         ; Время ожидания поиска
MOV R3,@R4
+
        MOV     R3,@R4
132762$:TSTB @R4 ; Маркер заголовка обнаружен ?
+
132762$:TSTB   @R4             ; Маркер заголовка обнаружен ?
BMI 133034$ ; Да
+
        BMI     133034$         ; Да
SOB R0,132762$
+
        SOB     R0,132762$
BR 132630$ ; Заголовок сектора необнаружен
+
        BR     132630$         ; Заголовок сектора необнаружен
132772$:MOVB #100,23334$ ; Ошибка - не форматирована дискета
+
132772$:MOVB   #100,23334     ; Ошибка - не форматирована дискета
BR 133030$
+
        BR     133030$
133002$:MOVB #101,23334$ ; Ошибка - не обнаружен межсекторный промежуток
+
133002$:MOVB   #101,23334     ; Ошибка - не обнаружен межсекторный промежуток
BR 133030$
+
        BR     133030$
133012$:MOVB #102,23334$ ; Ошибка - не найден сектор с заданным номером
+
133012$:MOVB   #102,23334     ; Ошибка - не найден сектор с заданным номером
BR 133030$
+
        BR     133030$
133022$:MOVB #3,23334$
+
133022$:MOVB   #3,23334
133030$:JMP 134422$
+
133030$:JMP     134422$
133034$:TST @R5 ; Сбросить готовность контроллера дисковода
+
133034$:TST     @R5             ; Сбросить готовность контроллера дисковода
133036$:TSTB @R4 ; Следующее слово прочитано ?
+
133036$:TSTB   @R4             ; Следующее слово прочитано ?
BPL 133036$ ; Нет
+
        BPL     133036$         ; Нет
CMP #120776,@R5 ; Это адресный маркер заголовка сектора?
+
        CMP     #120776,@R5     ; Это адресный маркер заголовка сектора?
BEQ 133212$ ; Да
+
        BEQ     133212$         ; Да
MOV #14,R0
+
        MOV     #14,R0
133054$:ADD 23252$,R0
+
133054$:ADD     23252,R0
ASL R0
+
        ASL     R0
ASL R0
+
        ASL     R0
133064$:CLRB @#177710
+
133064$:CLRB   @#177710
MOV R0,@#177712 ; Загрузить буфер таймера
+
        MOV     R0,@#177712     ; Загрузить буфер таймера
CMP R0,@#177714 ; Буфер загружен ?
+
        CMP     R0,@#177714     ; Буфер загружен ?
BNE 133064$ ; Нет
+
        BNE     133064$         ; Нет
MOV #133134$,@#304 ; Адрес новой п/п обработки прерываний
+
        MOV     #133134$,@#304 ; Адрес новой п/п обработки прерываний
MOVB #107,@#177710 ; Запустить таймер
+
        MOVB   #107,@#177710   ; Запустить таймер
MOV R3,23204$
+
        MOV     R3,23204
MOV R2,23224$
+
        MOV     R2,23224
CALL 134356$ ; Восстановить РОН
+
        CALL   134356$         ; Восстановить РОН
RTI
+
        RTI
133134$:CALL 134242$ ; Сбросить готовность таймера
+
133134$:CALL   134242$         ; Сбросить готовность таймера
CALL 134316$ ; Сохранить содержимое РОН
+
        CALL   134316$         ; Сохранить содержимое РОН
DEC 23224$ ; Уменьшить счетчик (число оборотов диска)
+
        DEC     23224           ; Уменьшить счетчик (число оборотов диска)
BLE 133012$ ; Он равен нулю (ошибка)
+
        BLE     133012$         ; Он равен нулю (ошибка)
MOV #2465,@#177712 ; Загрузить буфер таймера временем оборота
+
        MOV     #2465,@#177712 ; Загрузить буфер таймера временем оборота
MOV #7,@#177710 ; Перевести таймер в режим "ПУСК" (без прерыв.)
+
        MOV     #7,@#177710     ; Перевести таймер в режим "ПУСК" (без прерыв.)
MOV 23224$,R2 ; R2 = значение счетчика
+
        MOV     23224,R2       ; R2 = значение счетчика
MOV 23204$,R3 ; R3 = УС
+
        MOV     23204,R3       ; R3 = УС
MOV #177130,R4 ; R4 = адрес РСУ накопителя
+
        MOV     #177130,R4     ; R4 = адрес РСУ накопителя
MOV R4,R5
+
        MOV     R4,R5
TST (R5)+ ; R5 = адрес РД накопителя
+
        TST     (R5)+           ; R5 = адрес РД накопителя
JMP 134100$ ; На поиск заголовка сектора
+
        JMP     134100$         ; На поиск заголовка сектора
133212$:TSTB @R4 ; Очередное слово сформировано ?
+
133212$:TSTB   @R4             ; Очередное слово сформировано ?
BPL 133212$ ; Нет
+
        BPL     133212$         ; Нет
MOV @R5,23246$ ; Прочесть его
+
        MOV     @R5,23246       ; Прочесть его
CMP 23212$,23246$ ; Это идентификатор стороны и дорожки ?
+
        CMP     23212,23246     ; Это идентификатор стороны и дорожки ?
BEQ 133276$ ; Да
+
        BEQ     133276$         ; Да
133232$:TSTB @R4 ; Очередное слово сформировано ?
+
133232$:TSTB   @R4             ; Очередное слово сформировано ?
BPL 133232$ ; Нет
+
        BPL     133232$         ; Нет
TST @R5 ; Игнорировать прочитанное слово(номер сектора)
+
        TST     @R5             ; Игнорировать прочитанное слово(номер сектора)
CALL 134300$ ; Контрольная сумма в порядке ?
+
        CALL   134300$         ; Контрольная сумма в порядке ?
BEQ 133270$ ; Нет
+
        BEQ     133270$         ; Нет
MOV R3,23204$ ; Сохранить УС
+
        MOV     R3,23204       ; Сохранить УС
CALL 134356$ ; Восстановить РОН
+
        CALL   134356$         ; Восстановить РОН
MOVB #377,@23206$ ; Поставить номер неопределенной дорожки
+
        MOVB   #377,@23206     ; Поставить номер неопределенной дорожки
JMP 131726$
+
        JMP     131726$
133270$:MOV #40,R0
+
133270$:MOV     #40,R0
BR 133054$
+
        BR     133054$
133276$:TSTB @R4 ; Очередное слово сформировано ?
+
133276$:TSTB   @R4             ; Очередное слово сформировано ?
BPL 133276$ ; Нет
+
        BPL     133276$         ; Нет
MOV @R5,R0 ; R0 = прочитанное слово
+
        MOV     @R5,R0         ; R0 = прочитанное слово
SWAB R0
+
        SWAB   R0
CMPB 23341$,R0 ; Номер сектора совпадает ?
+
        CMPB   23341,R0       ; Номер сектора совпадает ?
BNE 133270$ ; Нет
+
        BNE     133270$         ; Нет
MOV 23344$,R2 ; R2 = число слов для обмена
+
        MOV     23344,R2       ; R2 = число слов для обмена
MOV 23342$,@#177010 ; Адрес буфера ОЗУ ЦП
+
        MOV     23342,@#177010 ; Адрес буфера ОЗУ ЦП
CALL 134300$ ; Контрольная сумма в порядке ?
+
        CALL   134300$         ; Контрольная сумма в порядке ?
BNE 133344$ ; Да
+
        BNE     133344$         ; Да
MOVB #2,23334$ ; Ошибка в контрольной сумме заголовка
+
        MOVB   #2,23334       ; Ошибка в контрольной сумме заголовка
BR 133030$
+
        BR     133030$
133344$:CMPB #10,23335$ ; Задана операция чтения ?
+
133344$:CMPB   #10,23335       ; Задана операция чтения ?
BNE 133506$ ; Нет
+
        BNE     133506$         ; Нет
TST @R5 ; Сбросить готовность контроллера
+
        TST     @R5             ; Сбросить готовность контроллера
MOV #21,R1
+
        MOV     #21,R1
CALL 134132$ ; Поиск пропуска синхроимпульсов
+
        CALL   134132$         ; Поиск пропуска синхроимпульсов
BEQ 133476$ ; Не найдено
+
        BEQ     133476$         ; Не найдено
133370$:TSTB @R4 ; Очередное слово сформировано ?
+
133370$:TSTB   @R4             ; Очередное слово сформировано ?
BPL 133370$ ; Нет
+
        BPL     133370$         ; Нет
CMP #120773,@R5 ; Это маркер данных ?
+
        CMP     #120773,@R5     ; Это маркер данных ?
BNE 133476$ ; Нет
+
        BNE     133476$         ; Нет
MOV 23252$,R1 ; R1 = число слов в секторе
+
        MOV     23252,R1       ; R1 = число слов в секторе
TST R2 ; Надо прочитать 0 слов ?
+
        TST     R2             ; Надо прочитать 0 слов ?
BEQ 133442$ ; Да (сделать проверку КС сектора)
+
        BEQ     133442$         ; Да (сделать проверку КС сектора)
133412$:TSTB @R4 ; Очередное слово сформировано ?
+
133412$:TSTB   @R4             ; Очередное слово сформировано ?
BPL 133412$ ; Нет
+
        BPL     133412$         ; Нет
MOV @R5,R0 ; Прочитать его
+
        MOV     @R5,R0         ; Прочитать его
SWAB R0
+
        SWAB   R0
MOV R0,@#177014 ; Переслать в ОЗУ ЦП
+
        MOV     R0,@#177014     ; Переслать в ОЗУ ЦП
INC @#177010 ; Переход к следующему адресу
+
        INC     @#177010       ; Переход к следующему адресу
DEC R2 ; Уменьшить счетчик считываемых слов
+
        DEC     R2             ; Уменьшить счетчик считываемых слов
BEQ 133450$ ; Все прочитали
+
        BEQ     133450$         ; Все прочитали
SOB R1,133412$ ; Цикл по числу слов в секторе
+
        SOB     R1,133412$     ; Цикл по числу слов в секторе
BR 133452$
+
        BR     133452$
133442$:TSTB @R4 ; Очередное слово сформировано ?
+
133442$:TSTB   @R4             ; Очередное слово сформировано ?
BPL 133442$
+
        BPL     133442$
TST @R5 ; Пропуск конца сектора
+
        TST     @R5             ; Пропуск конца сектора
133450$:SOB R1,133442$ ; Цикл по числу слов в секторе
+
133450$:SOB     R1,133442$     ; Цикл по числу слов в секторе
133452$:MOV R2,23344$ ; Сохранить число оставшихся слов
+
133452$:MOV     R2,23344       ; Сохранить число оставшихся слов
CALL 134300$ ; Контрольная сумма в порядке ?
+
        CALL   134300$         ; Контрольная сумма в порядке ?
BNE 133706$ ; Да
+
        BNE     133706$         ; Да
MOVB #1,23334$ ; Ошибка в контрольной сумме зоны данных
+
        MOVB   #1,23334       ; Ошибка в контрольной сумме зоны данных
133472$:JMP 133030$
+
133472$:JMP     133030$
133476$:MOVB #4,23334$ ; Не найден маркер данных
+
133476$:MOVB   #4,23334       ; Не найден маркер данных
BR 133472$
+
        BR     133472$
133506$:TST R2 ; Счетчик записываемых слов равен нулю ?
+
133506$:TST     R2             ; Счетчик записываемых слов равен нулю ?
BNE 133516$ ; Нет
+
        BNE     133516$         ; Нет
JMP 134416$ ; Да
+
        JMP     134416$         ; Да
133516$:MOV #47116,@R5 ; Запись межсекторного промежутка
+
133516$:MOV     #47116,@R5     ; Запись межсекторного промежутка
MOV #13,R0 ; R0 = размер межсекторного пром. перед данными
+
        MOV     #13,R0         ; R0 = размер межсекторного пром. перед данными
133526$:TSTB @R4 ; Предыдущее слово записано ?
+
133526$:TSTB   @R4             ; Предыдущее слово записано ?
BPL 133526$ ; Нет
+
        BPL     133526$         ; Нет
MOV #47116,@R5 ; Запись межсекторного промежутка
+
        MOV     #47116,@R5     ; Запись межсекторного промежутка
SOB R0,133526$
+
        SOB     R0,133526$
MOV #6,R0 ; R0 = размер нулевой зоны
+
        MOV     #6,R0           ; R0 = размер нулевой зоны
133544$:TSTB @R4 ; Очередное слово записано ?
+
133544$:TSTB   @R4             ; Очередное слово записано ?
BPL 133544$ ; Нет
+
        BPL     133544$         ; Нет
MOV #0,@R5 ; Запись нулевой зоны
+
        MOV     #0,@R5         ; Запись нулевой зоны
SOB R0,133544$
+
        SOB     R0,133544$
BIS #1000,R3 ; Установить бит пропуска синхроимпульсов
+
        BIS     #1000,R3       ; Установить бит пропуска синхроимпульсов
133562$:TSTB @R4 ; Очередное слово записано ?
+
133562$:TSTB   @R4             ; Очередное слово записано ?
BPL 133562$ ; Нет
+
        BPL     133562$         ; Нет
MOV #120641,@R5 ; Запись первого слова маркера данных
+
        MOV     #120641,@R5     ; Запись первого слова маркера данных
MOV R3,@R4 ; Установить пропуск синхроимпульсов
+
        MOV     R3,@R4         ; Установить пропуск синхроимпульсов
BIC #1000,R3 ; Сбросить бит пропуска синхроимпульсов
+
        BIC     #1000,R3       ; Сбросить бит пропуска синхроимпульсов
133600$:TSTB @R4 ; Очередное слово записано ?
+
133600$:TSTB   @R4             ; Очередное слово записано ?
BPL 133600$ ; Нет
+
        BPL     133600$         ; Нет
MOV #175641,@R5 ; Запись второго слова маркера данных
+
        MOV     #175641,@R5     ; Запись второго слова маркера данных
MOV 23252$,R1 ; R1 = размер сектора в словах
+
        MOV     23252,R1       ; R1 = размер сектора в словах
DEC R1
+
        DEC     R1
133616$:TSTB @R4 ; Очередное слово записано ?
+
133616$:TSTB   @R4             ; Очередное слово записано ?
BPL 133616$
+
        BPL     133616$
MOV @#177014,@R5 ; Запись первого слова данных
+
        MOV     @#177014,@R5   ; Запись первого слова данных
MOV R3,@R4 ; Сброс пропуска синхроимпульсов
+
        MOV     R3,@R4         ; Сброс пропуска синхроимпульсов
INC @#177010 ; Переход к следующему адресу
+
        INC     @#177010       ; Переход к следующему адресу
DEC R2 ; Уменьшить счетчик записываемых слов
+
        DEC     R2             ; Уменьшить счетчик записываемых слов
BEQ 133664$
+
        BEQ     133664$
133640$:TSTB @R4 ; Очередное слово записано ?
+
133640$:TSTB   @R4             ; Очередное слово записано ?
BPL 133640$ ; Нет
+
        BPL     133640$         ; Нет
MOV @#177014,@R5 ; Запись данных
+
        MOV     @#177014,@R5   ; Запись данных
INC @#177010 ; Переход к следующему адресу
+
        INC     @#177010       ; Переход к следующему адресу
DEC R2 ; Уменьшить счетчик записываемых слов
+
        DEC     R2             ; Уменьшить счетчик записываемых слов
BEQ 133674$
+
        BEQ     133674$
SOB R1,133640$
+
        SOB     R1,133640$
BR 133676$
+
        BR     133676$
133664$:TSTB @R4 ; Очередное слово записано ?
+
133664$:TSTB   @R4             ; Очередное слово записано ?
BPL 133664$ ; Нет
+
        BPL     133664$         ; Нет
MOV #0,@R5 ; Запись нуля
+
        MOV     #0,@R5         ; Запись нуля
133674$:SOB R1,133664$
+
133674$:SOB     R1,133664$
133676$:MOV R2,23344$ ; Сохранить счетчик записываемых слов
+
133676$:MOV     R2,23344       ; Сохранить счетчик записываемых слов
CALL 134256$ ; Запись контрольной суммы
+
        CALL   134256$         ; Запись контрольной суммы
133706$:TST 23344$ ; Счетчик записываемых слов равен нулю
+
133706$:TST     23344           ; Счетчик записываемых слов равен нулю
BNE 133720$ ; Нет
+
        BNE     133720$         ; Нет
JMP 134416$ ; Да
+
        JMP     134416$         ; Да
133720$:MOV @#177010,23342$ ; Сохранение регистра адреса
+
133720$:MOV     @#177010,23342 ; Сохранение регистра адреса
INCB 23341$ ; Увеличить номер текущего сектора
+
        INCB   23341           ; Увеличить номер текущего сектора
CMPB 23341$,23301$ ; Он превышает номер последнего сектора ?
+
        CMPB   23341,23301     ; Он превышает номер последнего сектора ?
BLOS 134064$ ; Нет
+
        BLOS   134064$         ; Нет
CMPB #1,23336$ ; Запрошена односторонняя операция ?
+
        CMPB   #1,23336       ; Запрошена односторонняя операция ?
BEQ 133766$ ; Да
+
        BEQ     133766$         ; Да
BIT #40,R3 ; Текущая сторона - верх ?
+
        BIT     #40,R3         ; Текущая сторона - верх ?
BNE 133766$ ; Да
+
        BNE     133766$         ; Да
INC 23212$ ; Увеличить номер текущей стороны
+
        INC     23212           ; Увеличить номер текущей стороны
BR 134010$
+
        BR     134010$
133766$:INCB 23340$ ; Увеличить номер запрашиваемой дорожки
+
133766$:INCB   23340           ; Увеличить номер запрашиваемой дорожки
MOVB 23340$,23212$
+
        MOVB   23340,23212
SWAB 23212$
+
        SWAB   23212
CLRB 23212$ ; Текущая сторона - низ
+
        CLRB   23212           ; Текущая сторона - низ
134010$:CLRB @#177710 ; Остановить программируемый таймер
+
134010$:CLRB   @#177710       ; Остановить программируемый таймер
TST @#177714 ; Сбросить его готовность
+
        TST     @#177714       ; Сбросить его готовность
TST @#177714
+
        TST     @#177714
MOVB #1,23341$ ; Текущий номер сектора - 1
+
        MOVB   #1,23341       ; Текущий номер сектора - 1
CMPB #1,23336$ ; Запрошена односторонняя операция
+
        CMPB   #1,23336       ; Запрошена односторонняя операция
BEQ 134050$ ; Да
+
        BEQ     134050$         ; Да
MOV #40,R0
+
        MOV     #40,R0
XOR R0,R3 ; Переменить сторону
+
        XOR     R0,R3           ; Переменить сторону
MOV R3,23204$
+
134050$:MOV     R3,23204
CALL 134356$ ; Восстановить РОН
+
        CALL   134356$         ; Восстановить РОН
JMP 131726$
+
        JMP     131726$
134064$:TST @#177714 ; Сбросить готовность программируемого таймера
+
134064$:TST     @#177714       ; Сбросить готовность программируемого таймера
TST @#177714
+
        TST     @#177714
MOV #36,R2
+
        MOV     #36,R2
134100$:TST @R5 ; Перевод контроллера в режим чтения
+
134100$:TST     @R5             ; Перевод контроллера в режим чтения
CLR R1
+
        CLR     R1
MOVB 23302$,R1 ; R1 = текущий размер межсекторного промежутка
+
        MOVB   23302,R1       ; R1 = текущий размер межсекторного промежутка
ADD #6,R1
+
        ADD     #6,R1
CALL 134132$ ; Поиск нулевой зоны  и начала след. сектора
+
        CALL   134132$         ; Поиск нулевой зоны  и начала след. сектора
BEQ 134126$ ; Она не найдена
+
        BEQ     134126$         ; Она не найдена
JMP 133036$
+
        JMP     133036$
134126$:JMP 132630$
+
134126$:JMP     132630$
 
; П/п поиска нулевой зоны
 
; П/п поиска нулевой зоны
134132$:TSTB @R4 ; Очередное слово считано ?
+
134132$:TSTB   @R4             ; Очередное слово считано ?
BPL 134132$ ; Нет
+
        BPL     134132$         ; Нет
MOV @R5,R0
+
        MOV     @R5,R0
BEQ 134152$ ; Это нулевая зона
+
        BEQ     134152$         ; Это нулевая зона
INC R0
+
        INC     R0
BEQ 134152$
+
        BEQ     134152$
SOB R1,134132$
+
        SOB     R1,134132$
BR 134200$
+
        BR     134200$
134152$:BIS #400,R3 ; Уст. бит поиска пропуска синхроимпульсов
+
134152$:BIS     #400,R3         ; Уст. бит поиска пропуска синхроимпульсов
MOV R3,@R4 ; Начать поиск
+
        MOV     R3,@R4         ; Начать поиск
BIC #400,R3 ; Сбросить бит поиска пропуска синхроимпульсов
+
        BIC     #400,R3         ; Сбросить бит поиска пропуска синхроимпульсов
MOV #226,R0
+
        MOV     #226,R0
MOV R3,@R4
+
        MOV     R3,@R4
134172$:TSTB @R4 ; Поиск окончен
+
134172$:TSTB   @R4             ; Поиск окончен
BMI 134204$ ; Да
+
        BMI     134204$         ; Да
SOB R0,134172$
+
        SOB     R0,134172$
134200$:SEZ ; Операция окончилась неуспешно
+
134200$:SEZ                     ; Операция окончилась неуспешно
RETURN
+
        RETURN
134204$:TST @R5
+
134204$:TST     @R5
RETURN
+
        RETURN
 
; П/п запуска таймера с вызовом п/п по его прерыванию
 
; П/п запуска таймера с вызовом п/п по его прерыванию
134210$:CLRB @#177710 ; Остановить программируемый таймер
+
134210$:CLRB   @#177710       ; Остановить программируемый таймер
MOV @R5,@#177712 ; Занести в буфер временную задержку
+
        MOV     @R5,@#177712   ; Занести в буфер временную задержку
CMP @R5,@#177714
+
        CMP     @R5,@#177714
BNE 134210$
+
        BNE     134210$
TST (R5)+
+
        TST     (R5)+
MOV (R5)+,@#304 ; Занести адрес п/п в вектор прерывания
+
        MOV     (R5)+,@#304     ; Занести адрес п/п в вектор прерывания
MOV (R5)+,@#177710 ; Запустить таймер
+
        MOV     (R5)+,@#177710 ; Запустить таймер
RTS R5
+
        RTS     R5
 
; П/п сброса готовности программируемого таймера
 
; П/п сброса готовности программируемого таймера
134242$:TST @#177714 ; Сбросить готовность таймера
+
134242$:TST     @#177714       ; Сбросить готовность таймера
TSTB @#177710 ; Она сброшена ?
+
        TSTB   @#177710       ; Она сброшена ?
BMI 134242$ ; Нет
+
        BMI     134242$         ; Нет
RETURN
+
        RETURN
 
; П/п записи контрольной суммы
 
; П/п записи контрольной суммы
134256$:BIT #40000,@R4 ; Запись КС
+
134256$:BIT     #40000,@R4     ; Запись КС
BEQ 134256$
+
        BEQ     134256$
MOV #47116,@R5
+
        MOV     #47116,@R5
134270$:TSTB @R4
+
134270$:TSTB   @R4
BPL 134270$
+
        BPL     134270$
TST @R5
+
        TST     @R5
RETURN
+
        RETURN
 
; П/п проверки контрольной суммы
 
; П/п проверки контрольной суммы
134300$:MOV #36,R0
+
134300$:MOV     #36,R0
134304$:BIT #40000,@R4 ; Проверка КС
+
134304$:BIT     #40000,@R4     ; Проверка КС
BNE 134314$
+
        BNE     134314$
SOB R0,134304$
+
        SOB     R0,134304$
 
134314$:RETURN
 
134314$:RETURN
 
; П/п сохранения РОН
 
; П/п сохранения РОН
134316$:MOV R0,23232$
+
134316$:MOV     R0,23232
MOV R1,23234$
+
        MOV     R1,23234
MOV R2,23236$
+
        MOV     R2,23236
MOV R3,23240$
+
        MOV     R3,23240
MOV R4,23242$
+
        MOV     R4,23242
MOV R5,23244$
+
        MOV     R5,23244
MOV @#177010,23230$
+
        MOV     @#177010,23230
RETURN
+
        RETURN
 
; П/п восстановления РОН
 
; П/п восстановления РОН
134356$:MOV 23232$,R0
+
134356$:MOV     23232,R0
MOV 23234$,R1
+
        MOV     23234,R1
MOV 23236$,R2
+
        MOV     23236,R2
MOV 23240$,R3
+
        MOV     23240,R3
MOV 23242$,R4
+
        MOV     23242,R4
MOV 23244$,R5
+
        MOV     23244,R5
MOV 23230$,@#177010
+
        MOV     23230,@#177010
RETURN
+
        RETURN
 
; Завершающая процедура
 
; Завершающая процедура
134416$:CLRB 23334$ ; Код ошибки = 0 (все нормально)
+
134416$:CLRB   23334           ; Код ошибки = 0 (все нормально)
134422$:CALL 125140$ ; Переслать код возврата в ЦП
+
134422$:CALL   125140$         ; Переслать код возврата в ЦП
JSR R5,175400$ ; Установить адрес п/п выключения двигателя
+
        JSR     R5,175400$     ; Установить адрес п/п выключения двигателя
.WORD 372,134454$
+
        .WORD   372,134454$
CALL 134356$ ; Восстановить РОН
+
        CALL   134356$         ; Восстановить РОН
CLR @#177710 ; Остановить таймер
+
        CLR     @#177710       ; Остановить таймер
CALL 176422$
+
        CALL   176422$
RTI
+
        RTI
 
; П/п останова двигателя
 
; П/п останова двигателя
134454$:BIC #2037,23204$ ; Сбросить биты выбора устройства,вкл. мотора
+
134454$:BIC     #2037,23204     ; Сбросить биты выбора устройства,вкл. мотора
MOV 23204$,@#177130 ; Выключить двигатель
+
        MOV     23204,@#177130 ; Выключить двигатель
RETURN
+
        RETURN
134472$:BR 134416$
+
134472$:BR     134416$
 
; Форматирование дорожки
 
; Форматирование дорожки
134474$:MOV 23204$,R3 ; R3 = УС накопителя
+
134474$:MOV     23204,R3       ; R3 = УС накопителя
MOV #177130,R4 ; R4 = адрес РУС накопителя
+
        MOV     #177130,R4     ; R4 = адрес РУС накопителя
MOV R4,R5
+
        MOV     R4,R5
TST (R5)+ ; R5 = адрес РД накопителя
+
        TST     (R5)+           ; R5 = адрес РД накопителя
SWAB 23212$
+
        SWAB   23212
MOV 23341$,R2 ; R2 = формат сектора
+
        MOVB    23341,R2       ; R2 = формат сектора
BIC #177774,R2
+
        BIC     #177774,R2
BNE 134540$
+
        BNE     134540$
MOV #13,23334$ ; Ошибка = неверный формат сектора
+
        MOV     #13,23334       ; Ошибка = неверный формат сектора
JMP 134422$
+
        JMP     134422$
134540$:MOVB 135422$(R2),23246$; (23246) = число секторов в дорожке
+
134540$:MOVB   135422$(R2),23246; (23246) = число секторов в дорожке
MOVB 135426$(R2),23302$; (23302) = размер межсекторного промежутка
+
        MOVB   135426$(R2),23302; (23302) = размер межсекторного промежутка
MOV R2,R1
+
        MOV     R2,R1
ASL R1
+
        ASL     R1
MOV 135412$(R1),R1 ; R1 = число слов в секторе
+
        MOV     135412$(R1),R1 ; R1 = число слов в секторе
SWAB R2
+
        SWAB   R2
INC R2 ; R2 = формат сектора : номер сектора
+
        INC     R2             ; R2 = формат сектора : номер сектора
MOV #1750,R0
+
        MOV     #1750,R0
134574$:TST @R4 ; Присутствует линия ИНДЕКС ?
+
134574$:TST     @R4             ; Присутствует линия ИНДЕКС ?
BPL 134616$ ; Нет
+
        BPL     134616$         ; Нет
SOB R0,134574$
+
        SOB     R0,134574$
134602$:TST @R5 ; Установить режим готовности чтения
+
134602$:TST     @R5             ; Установить режим готовности чтения
MOVB #14,23334$ ; Ошибка = ошибка линии ИНДЕКС
+
        MOVB   #14,23334       ; Ошибка = ошибка линии ИНДЕКС
JMP 134422$
+
        JMP     134422$
134616$:MOV #6200,R0 ; R0 = число слов в дорожке
+
134616$:MOV     #6200,R0       ; R0 = число слов в дорожке
MOV #47116,@R5 ; Заполнение дорожки
+
        MOV     #47116,@R5     ; Заполнение дорожки
134626$:TST @R4 ; Присутствует линия ИНДЕКС ?
+
134626$:TST     @R4             ; Присутствует линия ИНДЕКС ?
BMI 134646$
+
        BMI     134646$
134632$:TSTB @R4 ; Предыдущее слово записано ?
+
134632$:TSTB   @R4             ; Предыдущее слово записано ?
BPL 134632$ ; Да
+
        BPL     134632$         ; Да
MOV #47116,@R5 ; Заполнение дорожки
+
        MOV     #47116,@R5     ; Заполнение дорожки
SOB R0,134626$
+
        SOB     R0,134626$
BR 134602$
+
        BR     134602$
134646$:MOV #20,R0 ; R0 = размер межсект. пром. в начале дорожки
+
134646$:MOV     #20,R0         ; R0 = размер межсект. пром. в начале дорожки
134652$:MOV #47116,@R5 ; Заполнение межсект. пром. перед заголовком
+
134652$:MOV     #47116,@R5     ; Заполнение межсект. пром. перед заголовком
134656$:TSTB @R4 ; Очередное слово записано ?
+
134656$:TSTB   @R4             ; Очередное слово записано ?
BPL 134656$ ; Нет
+
        BPL     134656$         ; Нет
MOV #47116,@R5 ; Заполнение межсект. пром. перед заголовком
+
        MOV     #47116,@R5     ; Заполнение межсект. пром. перед заголовком
SOB R0,134656$
+
        SOB     R0,134656$
MOV #6,R0 ; R0 = размер нулевой зоны
+
        MOV     #6,R0           ; R0 = размер нулевой зоны    
134674$:TSTB @R4 ; Очередное слово записано ?
+
134674$:TSTB   @R4             ; Очередное слово записано ?
BPL 134674$ ; Нет
+
        BPL     134674$         ; Нет
MOV #0,@R5 ; Заполнение нулевой зоны
+
        MOV     #0,@R5         ; Заполнение нулевой зоны
SOB R0,134674$
+
        SOB     R0,134674$
BIS #1000,R3 ; Установить бит пропуска синхроимпульсов
+
        BIS     #1000,R3       ; Установить бит пропуска синхроимпульсов
134712$:TSTB @R4
+
134712$:TSTB   @R4
BPL 134712$
+
        BPL     134712$
MOV #120641,@R5 ; Запись первого слова адресного маркера
+
        MOV     #120641,@R5     ; Запись первого слова адресного маркера
MOV R3,@R4 ; Установить режим пропуска синхроимпульсов
+
        MOV     R3,@R4         ; Установить режим пропуска синхроимпульсов
BIC #1000,R3 ; Сбросить бит пропуска синхроимпульсов
+
        BIC     #1000,R3       ; Сбросить бит пропуска синхроимпульсов
134730$:TSTB @R4
+
134730$:TSTB   @R4
BPL 134730$
+
        BPL     134730$
MOV #177241,@R5 ; Запись второго слова адресного маркера
+
        MOV     #177241,@R5     ; Запись второго слова адресного маркера
134740$:TSTB @R4
+
134740$:TSTB   @R4
BPL 134740$
+
        BPL     134740$
MOV 23212$,@R5 ; Запись номера дорожки и стороны
+
        MOV     23212,@R5       ; Запись номера дорожки и стороны
MOV R3,@R4 ; Сбросить режим пропуска синхроимпульсов
+
        MOV     R3,@R4         ; Сбросить режим пропуска синхроимпульсов
134752$:TSTB @R4
+
134752$:TSTB   @R4
BPL 134752$
+
        BPL     134752$
MOV R2,@R5 ; Запись номера сектора и формата сектора
+
        MOV     R2,@R5         ; Запись номера сектора и формата сектора
MOV #13,R0 ; R0 = размер межсект. пром. перед данными
+
        MOV     #13,R0         ; R0 = размер межсект. пром. перед данными
134764$:BIT #40000,@R4 ; Запись контрольной суммы
+
134764$:BIT     #40000,@R4     ; Запись контрольной суммы
BEQ 134764$
+
        BEQ     134764$
MOV #47116,@R5 ; Заполнение межсект. пром. перед данными
+
        MOV     #47116,@R5     ; Заполнение межсект. пром. перед данными
134776$:TSTB @R4
+
134776$:TSTB   @R4
BPL 134776$
+
        BPL     134776$
MOV #47116,@R5 ; Заполнение межсект. пром. перед данными
+
        MOV     #47116,@R5     ; Заполнение межсект. пром. перед данными
SOB R0,134776$
+
        SOB     R0,134776$
MOV #6,R0 ; R0 = размер нулевой зоны
+
        MOV     #6,R0           ; R0 = размер нулевой зоны
135014$:TSTB @R4
+
135014$:TSTB   @R4
BPL 135014$
+
        BPL     135014$
MOV #0,@R5 ; Заполнение нулевой зоны
+
        MOV     #0,@R5         ; Заполнение нулевой зоны
SOB R0,135014$
+
        SOB     R0,135014$
BIS #1000,R3 ; Установить бит пропуска синхроимпульсов
+
        BIS     #1000,R3       ; Установить бит пропуска синхроимпульсов
135032$:TSTB @R4
+
135032$:TSTB   @R4
BPL 135032$
+
        BPL     135032$
MOV #120641,@R5 ; Запись первого слова маркера данных
+
        MOV     #120641,@R5     ; Запись первого слова маркера данных
MOV R3,@R4 ; Установить режим пропуска синхроимпульсов
+
        MOV     R3,@R4         ; Установить режим пропуска синхроимпульсов
BIC #1000,R3 ; Сбросить бит пропуска синхроимпульсов
+
        BIC     #1000,R3       ; Сбросить бит пропуска синхроимпульсов
135050$:TSTB @R4
+
135050$:TSTB   @R4
BPL 135050$
+
        BPL     135050$
MOV #175641,@R5 ; Запись второго слова маркера данных
+
        MOV     #175641,@R5     ; Запись второго слова маркера данных
MOV R1,R0 ; R0 = размер сектора в словах
+
        MOV     R1,R0           ; R0 = размер сектора в словах
135062$:TSTB @R4
+
135062$:TSTB   @R4
BPL 135062$
+
        BPL     135062$
MOV 23342$,@R5 ; Запись первого слова зоны данных
+
        MOV     23342,@R5       ; Запись первого слова зоны данных
MOV R3,@R4 ; Сбросить режим пропуска синхроимпульсов
+
        MOV     R3,@R4         ; Сбросить режим пропуска синхроимпульсов
DEC R0
+
        DEC     R0
135076$:TSTB @R4
+
135076$:TSTB   @R4
BPL 135076$
+
        BPL     135076$
MOV 23342$,@R5 ; Заполнение зоны данных
+
        MOV     23342,@R5       ; Заполнение зоны данных
SOB R0,135076$
+
        SOB     R0,135076$
INC R2 ; Увеличить номер сектора
+
        INC     R2             ; Увеличить номер сектора
MOVB 23302$,R0 ; R0 = размер межсект. пром. перед заголовком
+
        MOVB   23302,R0       ; R0 = размер межсект. пром. перед заголовком
135116$:BIT #40000,@R4 ; Запись контрольной суммы
+
135116$:BIT     #40000,@R4     ; Запись контрольной суммы
BEQ 135116$
+
        BEQ     135116$
DECB 23246$ ; Уменьшить счетчик секторов
+
        DECB   23246           ; Уменьшить счетчик секторов
BNE 134652$
+
        BNE     134652$
MOV #1750,R0
+
        MOV     #1750,R0
135136$:TST @R4 ; Присутствует линия ИНДЕКС ?
+
135136$:TST     @R4             ; Присутствует линия ИНДЕКС ?
BMI 135170$ ; Да
+
        BMI     135170$         ; Да
135142$:TSTB @R4
+
135142$:TSTB   @R4
BPL 135142$
+
        BPL     135142$
MOV #47116$,@R5 ; Заполнение конца дорожки
+
        MOV     #47116,@R5     ; Заполнение конца дорожки
SOB R0,135136$
+
        SOB     R0,135136$
TST @R5 ; Установить режим готовности чтения
+
        TST     @R5             ; Установить режим готовности чтения
MOVB #14,23334$ ; Ошибка - ошибка линии ИНДЕКС
+
        MOVB   #14,23334       ; Ошибка - ошибка линии ИНДЕКС
JMP 134422$
+
        JMP     134422$
135170$:MOV #5,R0
+
135170$:MOV     #5,R0
135174$:TSTB @R4
+
135174$:TSTB   @R4
BPL 135174$
+
        BPL     135174$
MOV #47116,@R5 ; Заполнение в начале первых пяти слов
+
        MOV     #47116,@R5     ; Заполнение в начале первых пяти слов
SOB R0,135174$
+
        SOB     R0,135174$
TST @R5 ; Установить режим готовности чтения
+
        TST     @R5             ; Установить режим готовности чтения
JMP 134416$
+
        JMP     134416$
 
; П/п-мы установок параметров
 
; П/п-мы установок параметров
135214$:CLR R0
+
135214$:CLR     R0
MOVB 23335$,R0 ; R0 = номер устанавливаемого параметра (1 - 4)
+
        MOVB   23335,R0       ; R0 = номер устанавливаемого параметра (1 - 4)
CMP #4,R0 ; Он в диапазоне (1 - 4) ?
+
        CMP     #4,R0           ; Он в диапазоне (1 - 4) ?
BHIS 135242$ ; Да
+
        BHIS   135242$         ; Да
MOVB #11,23334$ ; Ошибка - неверный массив параметров
+
        MOVB   #11,23334       ; Ошибка - неверный массив параметров
JMP 134422$
+
        JMP     134422$
135242$:MOVB 23340$,23246$ ; (23246) = значение устанавливаемого параметра
+
135242$:MOVB   23340,23246     ; (23246) = значение устанавливаемого параметра
DEC R0
+
        DEC     R0
MOV #135272$,R1
+
        MOV     #135272$,R1
ADD R0,R1
+
        ADD     R0,R1
ADD R0,R1
+
        ADD     R0,R1
MOV @R1,R1
+
        MOV     @R1,R1
CALL @R1 ; Вызов соответствующей п/п
+
        CALL   @R1             ; Вызов соответствующей п/п
JMP 134416$
+
        JMP     134416$
 
; Адреса начала п/п установки значений параметров
 
; Адреса начала п/п установки значений параметров
135272$:.WORD 135350$,135356$,135364$,135372$
+
135272$:.WORD   135350$,135356$,135364$,135372$
135302$:MOVB 23337$,R0 ; R0 = номер накопителя
+
135302$:MOVB   23337,R0       ; R0 = номер накопителя
CMPB #377,R0 ; Устанавливается для всех накопителей ?
+
        CMPB   #377,R0         ; Устанавливается для всех накопителей ?
BEQ 135326$ ; Да
+
        BEQ     135326$         ; Да
MOV #1,R2 ; R2 = число накопителей, для кот. уст. парам.
+
        MOV     #1,R2           ; R2 = число накопителей, для кот. уст. парам.
BICB #374,R0
+
        BICB   #374,R0
BR 135334$
+
        BR     135334$
135326$:CLR R0
+
135326$:CLR     R0
MOV #4,R2 ; R2 = число накопителей, для кот. уст. парам.
+
        MOV     #4,R2           ; R2 = число накопителей, для кот. уст. парам.
135334$:ADD R0,R1 ; Корректировка под номер накопителя
+
135334$:ADD     R0,R1           ; Корректировка под номер накопителя
135336$:MOVB 23246$,@R1 ; Установка нового значения
+
135336$:MOVB   23246,@R1       ; Установка нового значения
INC R1
+
        INC     R1
SOB R2,135336$
+
        SOB     R2,135336$
RETURN
+
        RETURN
135350$:MOV #23260,R1 ; R1 = адрес буфера времен шага
+
135350$:MOV     #23260,R1       ; R1 = адрес буфера времен шага
BR 135302$
+
        BR     135302$
135356$:MOV #23264,R1 ; R1 = адрес буфера времен загрузки головки
+
135356$:MOV     #23264,R1       ; R1 = адрес буфера времен загрузки головки
BR 135302$
+
        BR     135302$
135364$:MOV #23270,R1 ; R1 = адрес буфера числа секторов в дорожке
+
135364$:MOV     #23270,R1       ; R1 = адрес буфера числа секторов в дорожке
BR 135302$
+
        BR     135302$
135372$:MOV #23274,R1 ; R1 = адрес буфера параметра SKIP
+
135372$:MOV     #23274,R1       ; R1 = адрес буфера параметра SKIP
MOV #2,23246$ ; Принудительная установка пропуска дорожки
+
        MOV     #2,23246       ; Принудительная установка пропуска дорожки
BR 135302$
+
        BR     135302$
 
; Устанавливаемые биты в РУС накопителя при выборе соотв. устройства
 
; Устанавливаемые биты в РУС накопителя при выборе соотв. устройства
135406$:BYTE 3,2,1,0
+
135406$:.BYTE   3,2,1,0
 
; Число слов в секторе (формат x,256,512,1024 байт)
 
; Число слов в секторе (формат x,256,512,1024 байт)
135412$:.WORD 0,200,400,1000
+
135412$:.WORD   0,200,400,1000
 
; Число секторов в дорожке (формат x,256,512,1024 байт)
 
; Число секторов в дорожке (формат x,256,512,1024 байт)
135422$:.BYTE 0,20,12,5
+
135422$:.BYTE   0,20,12,5
 
; Размер межсекторного промежутка перед заголовком (формат x,256,512,1024 байт)
 
; Размер межсекторного промежутка перед заголовком (формат x,256,512,1024 байт)
135426$:.BYTE 0,33,22,72
+
135426$:.BYTE   0,33,22,72
135432$:.BYTE 0,240,124,242
+
135432$:.BYTE   0,240,124,242
.ENDT
 
 
</pre>
 
</pre>

Latest revision as of 07:41, 13 January 2008


; ******************************************************
; *                                                    *
; *                  ДРАЙВЕР КАНАЛА 2                  *
; *                                                    *
; *               Адреса 125030 - 135435               *
; *                                                    *
; ******************************************************

; ***  ОСНОВНАЯ ПОДПРОГРАММА ОБСЛУЖИВАНИЯ КАНАЛА 2  ***
125030$:MOV     @#23200,R0      ; R0 = адрес массива параметров (МП) в ОЗУ ЦП
        CLC                     ; Преобр. для загрузки в рег. адреса планов
        ROR     R0
        MOV     R0,@#23200
        INC     R0              ; R0 = адрес типа устройства
        MOV     R0,@#177010
        MOVB    @#177014,R0     ; R0 = тип устройства
        MOV     R0,R5
        ASH     #-3,R0
        CMP     R0,#3           ; Тип устройства в пределах 0 - 37 ?
        BHI     125116$         ; Нет
        ASL     R0
        BNE     125104$         ; Обслуживается не дисковод
        TST     @#7044          ; Разрешено обращение к дисководу ?
        BMI     125116$         ; Нет
125104$:CALL    @125124$(R0)    ; Вызов соответствующей п/п обслуживания уст-ва
125110$:DEC     @#7062          ; Уменьшить значение флага вызова
        RETURN
125116$:CALL    125162$         ; Вызов п/п обслуживания кассеты ПЗУ
        BR      125110$
; Адреса п/п обслуживания устройств (дисковод, магнитофон, кассета ПЗУ, ОЗУ ПП)
125124$:.WORD   131176$,126236$,125162$,125644$
; П/п окончания обслуживания устройства
125134$:CLRB    @#23334         ; Сбросить код возврата (все нормально)
125140$:MOV     @#23200,@#177010
        MOV     @#23334,@#177014; Записать код возврата в ОЗУ ЦП
125154$:TST     @#177064        ; Восст. готовность канала 2 со стороны ЦП
        RETURN
; П/п обслуживания кассеты ПЗУ
125162$:JSR     R5,125560$      ; Чтение МП
        .WORD   5
        CMPB    #10,23335       ; Код функции = 10 (чтение) ?
        BEQ     125210$
125200$:MOVB    #2,23334        ; Код возврата = 2 (ошибочный МП)
        BR      125520$
125210$:MOV     23340,R1        ; R1 = адрес кассеты ПЗУ
        CMP     #60000,R1       ; Он превышает 60000 ?
        BLOS    125200$         ; Да
        BIC     #1,R1
        MOV     23342,R2        ; R2 = адрес буфера в ОЗУ ЦП
        CMP     #160000,R2      ; Он превышает 160000 ?
        BLOS    125200$         ; Да
        ASR     R2
        BIC     #100000,R2
        MOV     23344,R3        ; R3 = число считываемых слов
        BEQ     125514$         ; Оно равно нулю
        MOVB    23337,R0        ; R0 = номер кассеты ПЗУ
        MTPS    #200            ; Запретить прерывания
        MOV     @#4,R5          ; Сохранить значение 4 вектора в R5
        MOV     #125544$,@#4    ; Загрузить новое значение вектора
        BIC     #1,@#177054     ; Откл. сист. ПЗУ в диапазоне 100000-117777
        ASR     R0              ; Кассета N1 ?
        BCS     125320$         ; Нет
        BIC     #10,@#177054    ; Выбор кассеты N1
        BR      125326$
125320$:BIS     #10,@#177054    ; Выбор кассеты N2
125326$:BIC     #6,@#177054     ; Ни одного банка не выбрано
        CMP     R1,#17776       ; Адрес кассеты меньше 20000 ?
        BHI     125354$         ; Нет
        MOV     #2,R4
        BIS     R4,@#177054     ; Выбор банка N1
        BR      125406$
125354$:CMP     R1,#37776       ; Адрес кассеты меньше 40000 ?
        BHI     125376$         ; Нет
        BIS     #4,@#177054     ; Выбор банка N2
        MOV     #1,R4
        BR      125406$
125376$:BIS     #6,@#177054     ; Выбор банка N3
        CLR     R4
125406$:BIC     #60000,R1
        BIS     #100000,R1
        MOV     #120000,R0
        SUB     R1,R0           ; Вычисление граничных значений
        ASR     R0
125426$:CMP     R3,R0           ; Область перекачки содержится в одном банке ?
        BHI     125440$         ; Нет
        MOV     R3,R0
        CLR     R3
        BR      125442$
125440$:SUB     R0,R3           ; Вычесть из числа запрошенных слов
125442$:MOV     R2,@#177010     ; Цикл перекачки
        MOV     (R1)+,@#177014
        INC     R2
        CMP     #70000,R2       ; Произошел выход за диапазон ОЗУ ЦП (160000) ?
        BLOS    125200$         ; Да
        SOB     R0,125442$
        TST     R3              ; Перекачка закончена ?
        BEQ     125514$         ; Да
        DEC     R4              ; Переход к следующему банку
        BMI     125200$         ; Переход за границу кассеты ПЗУ
        ADD     #2,@#177054     ; Установить следующий банк
        MOV     #100000,R1
        MOV     #10000,R0
        BR      125426$
125514$:CLRB    23334           ; Очистить код возврата (все нормально)
125520$:BIS     #1,@#177054     ; Подключить системное ПЗУ
        MOV     R5,@#4          ; Восстановить 4 вектор
        MTPS    #0              ; Разрешить прерывания
        CALL    125140$         ; Завершить обслуживание
        RETURN
; П/п обработки прерывания 4 при чтении с кассеты ПЗУ
125544$:MOVB    #1,23334        ; Код возврата = 1 (отсутствует банк ПЗУ)
        TST     (SP)+           ; Вычеркнуть из стека значения PC и PS
        TST     (SP)+
        BR      125520$
; П/п чтения МП из ОЗУ ЦП
125560$:MOV     (R5)+,R0        ; R0 = число слов для чтения
        MOV     #23334,R1       ; R1 = адрес МП в ОЗУ ПП
        MOV     @#23200,@#177010
        BR      125602$
125576$:INC     @#177010        ; Цикл чтения
125602$:MOV     @#177014,(R1)+
        SOB     R0,125576$
        RTS     R5
; П/п записи МП в ОЗУ ЦП
125612$:MOV     (R5)+,R0        ; R0 = число слов для записи
        MOV     #23334,R1       ; R1 = адрес МП в ОЗУ ПП
        MOV     @#23200,@#177010
        BR      125634$
125630$:INC     @#177010        ; Цикл записи
125634$:MOV     (R1)+,@#177014
        SOB     R0,125630$
        RTS     R5
; П/п обслуживания функций работы с памятью ПП
125644$:JSR     R5,125560$      ; Чтение МП
        .WORD   5
        CLRB    @#23334         ; Код возврата = 0
        CMP     R5,#32          ; Тип устройства = 32 ?
        BNE     125720$         ; Нет
        MOVB    @#23335,R0      ; R0 = код функции
        MOV     R0,R5
        ASH     #-3,R0
        CMP     R0,#3           ; Код функции в пределах 0 - 37 ?
        BHI     125720$         ; Нет
        ASL     R0
        ADD     R0,PC           ; Переход по соответствующему адресу
        BR      125730$         ; Запрос и освобождение блоков памяти
        BR      126024$         ; Чтение памяти ПП
        BR      126050$         ; Запись в память ПП
        BR      126074$         ; Запуск п/п пользователя
125720$:JMP     125162$
125724$:JMP     125154$
; Запрос и освобождение блоков памяти
125730$:MOV     @#23340,R1      ; R1 = начальный адрес в памяти ПП
        MOV     @#23342,R0      ; R0 = размер блока в словах
        ASL     R0
        ASR     R5              ; Функция запроса блока памяти ?
        BCC     126012$         ; Нет
        CALL    176132$         ; Запросить область памяти
        ASR     R0
        CMP     R0,@#23342      ; Полученное значение >= запрошенного ?
        BHIS    125770$         ; Да
        MOVB    #377,@#23334    ; Код возврата = 377 (мало памяти)
125770$:MOV     R0,@#23342      ; Возвратить объем полученной памяти
        MOV     R1,@#23340      ; Возвратить адрес блока
        JSR     R5,125612$      ; Записать МП в ОЗУ ЦП
        .WORD   4
        JMP     125154$
126012$:CALL    176300$         ; Освободить блок памяти
        BMI     125720$
        JMP     125140$
; Чтение памяти ПП
126024$:CALL    126110$         ; Получение адресов ЦП, ПП и числа слов
        BEQ     125720$         ; Число слов равно нулю
        BR      126040$
126034$:INC     @#177010        ; Цикл чтения
126040$:MOV     (R1)+,@#177014
        SOB     R0,126034$
        BR      125724$
; Запись в память ПП
126050$:CALL    126110$         ; Получение адресов ЦП, ПП и числа слов
        BEQ     125720$         ; Число слов равно нулю
        BR      126064$
126060$:INC     @#177010        ; Цикл записи
126064$:MOV     @#177014,(R1)+
        SOB     R0,126060$
        BR      125724$
; Запуск п/п пользователя
126074$:MOV     @#23340,@#7140  ; Сохранение адреса запуска
        INC     @#7076          ; Установить флаг запуска п/п пользователя
        BR      125724$
; П/п получения адресов блоков памяти ЦП, ПП и числа слов для обмена
126110$:MOV     @#23340,R1      ; R1 = адрес памяти ПП
        MOV     @#23342,R0      ; R0 = адрес памяти ЦП
        CLC
        ROR     R0
        MOV     R0,@#177010     ; Загрузка адреса в регистр адреса планов
        MOV     @#23344,R0      ; R0 = число слов для обмена
        RETURN
; *** МАГНИТОФОН ***
; П/п установки начальных значений
126136$:CLR     R0
        MOV     #23304,R1
        MOV     #14,R2
126150$:MOV     R0,(R1)+        ; Очистка области ОЗУ п/п работы с магнитофоном
        SOB     R2,126150$
        MOV     #320,23304      ; Длина бита "0"
        MOV     #150,23306      ; Длина бита "1"
        MOV     #17500,23310    ; Число битов "1" при записи пилот-тона загол.
        MOV     #3720,23312     ; Число битов "1" при записи пилот-тона данных
        MOV     #17540,23314    ; Число битов "1" при чтении пилот-тона загол.
        MOV     #1750,23316     ; Число битов "1" при чтении пилот-тона данных
        MOV     #1750,23320
        MOV     #64,23322       ; Разброс времени между перепадами лог. уровня
        RETURN
; Основная п/п обслуживания магнитофона
126236$:JSR     R5,125560$      ; Чтение массива параметров
        .WORD   27
        CLR     R5
126246$:SOB     R5,126246$      ; Задержка
        MTPS    #200            ; Запретить прерывания
        CALL    176376$         ; Останов программируемого таймера
        CALL    130672$         ; Ожидание готовности программируемого таймера
        MOV     #127734$,@#304  ; Настройка вектора прерывания прогр. таймера
        MOV     #200,@#306
        MOV     #130570$,@#310  ; Настройка вектора прерывания по внеш. событию
        MOV     #200,@#312
        CLR     @#177700        ; Запрет прерываний от клавиатуры
        BIS     #400,@#177054   ; Запрет прерываний от сет. таймера в канале ПП
        BIC     #200,@#177716   ; Выключить генератор звукового сигнала
        BIC     #107,@#177066   ; Запретить прерывания от каналов связи с ЦП
        MOVB    23335,R0        ; R0 = код функции
        BIC     #177600,R0
        ASL     R0
        CALL    @126502$(R0)    ; Вызов соответствующей п/п
        MOVB    R0,23334        ; Код возврата
        BIC     #14,@#177716    ; Запрет приема информации по линии вн. событие
        CALL    130672$
        MOV     23200,R4        ; R4 = адрес МП в ОЗУ ЦП
        ADD     #14,R4
        MOV     R4,@#177010
        MOV     #23364,R4       ; R4 = адрес МП в ОЗУ ПП (имя прочит. файла)
        MOV     #13,R2
126422$:MOV     (R4)+,@#177014  ; Пересылка
        INC     @#177010
        SOB     R2,126422$
        BIC     #400,@#177054   ; Разрешить прерывания от таймера в канале ПП
        MOV     #100,@#177700   ; Разрешить прерывания от клавиатуры
        BIS     #200,@#177716   ; Включить генератор звукового сигнала
        BIS     #107,@#177066   ; Разрешить прерывания от каналов связи с ЦП
        CALL    125140$         ; Переслать код возврата в ОЗУ ЦП
        CALL    176422$         ; Запрет прерываний от прогр. таймера
        MTPS    #0              ; Разрешить прерывания
        RETURN
; Адреса п/п обслуживания работы с магнитофоном
126502$:.WORD   126546$,126554$,126632$,126546$
        .WORD   126546$,126546$,126546$,126546$
        .WORD   127102$,127110$,126546$,126546$
        .WORD   127116$,127132$,127044$,126546$
        .WORD   126714$,126662$
126546$:MOV     #10,R0          ; R0 = код возврата (неверный код функции)
        RETURN
; П/п установки параметров одинарной плотности записи
126554$:MOV     #320,23304      ; Длина бита "0"
        MOV     #150,23306      ; Длина бита "1"
        MOV     #17500,23310    ; Число битов "1" перед заголовком
        MOV     #3720,23312     ; Число битов "1" перед зоной данных
        MOV     #17540,23314    ; Число перепадов уровня при чтении (загол.)
        MOV     #1750,23316     ; Число перепадов уровня при чтении (данные)
        MOV     #1750,23320
        CLR     R0
        RETURN
; П/п установки параметров двойной плотности записи
126632$:MOV     #150,23304      ; Длина бита "0"
        MOV     #64,23306       ; Длина бита "1"
        NOP
        MOV     #3720,23320
        CLR     R0
        RETURN
; П/п записи блока данных на магнитную ленту
126662$:MOV     SP,23332        ; Сохранить значение указателя стека
        MOV     23360,R4        ; R4 = адрес буфера в ОЗУ ЦП
        CLC
        ROR     R4
        MOV     R4,@#177010
        CALL    127476$         ; Подготовка и пуск программируемого таймера
        MOV     #200,R2         ; R2 = число записываемых слов
        BR      126776$
; П/п записи файла с заголовком
126714$:MOV     SP,23332        ; Сохранить значение указателя стека
        MOV     23360,R4        ; R4 = адрес буфера в ОЗУ ЦП
        CLC
        ROR     R4
        MOV     R4,@#177010
        CALL    127476$         ; Подготовка и пуск программируемого таймера
        CALL    127536$         ; Запись пилот-тона перед заголовком
        CALL    127560$         ; Запись имени файла
        MOV     23362,R0        ; R0 = число записываемых слов
        MOV     R0,R2           ; R2 = число записываемых слов
        TST     R2              ; Оно равно нулю ?
        BEQ     127040$
        CALL    127602$         ; Запись числа слов в файл
        MOV     23360,R0        ; R0 = адрес буфера в ОЗУ ЦП
        CALL    127602$         ; Запись адреса буфера в файл
126776$:CALL    127544$         ; Запись пилот-тона перед зоной данных
        CLR     R4              ; Контрольная сумма = 0
127004$:MOV     @#177014,R0     ; R0 = слово данных
        INC     @#177010        ; Переход к следующему адресу
        ADD     R0,R4           ; Подсчет контрольной суммы файла
        ADC     R4
        CALL    127602$         ; Запись слова данных
        SOB     R2,127004$      ; Цикл по R2 (число записываемых слов)
        MOV     R4,R0           ; R0 = контрольная сумма
        CALL    127602$         ; Запись контрольной суммы
        CALL    127664$         ; Запись бита "1"
127040$:CLR     R0
        RETURN
; П/п чтения блока данных
127044$:MOV     SP,23332        ; Сохранить значение указателя стека
        MOV     #200,R2         ; R2 = число считываемых слов
        MOV     23360,R0        ; R0 = адрес буфера в ОЗУ ЦП
        CLC
        ROR     R0
        MOV     R0,@#177010
        CALL    130020$         ; Подготовка и пуск программируемого таймера
        CALL    130156$         ; Поиск пилот-тона перед зоной данных
        BR      127372$
; Точка входа при чтении файла с заголовком
127102$:CLR     23330           ; Признак реального чтения файла
        BR      127124$
; Точка входа при чтении файла с пропуском заголовка
127110$:CLR     23330           ; Признак реального чтения файла
        BR      127140$
; Точка входа при фиктивном чтении файла с заголовком
127116$:MOV     #4,23330        ; Признак фиктивного чтения
127124$:CLR     23326           ; Признак проверки заголовка
        BR      127146$
; Точка входа при фиктивном чтении файла с пропуском заголовка
127132$:MOV     #4,23330        ; Признак фиктивного чтения
127140$:MOV     #22,23326       ; Признак пропуска заголовка
127146$:MOV     SP,23332        ; Сохранить значение указателя стека
        CALL    130020$         ; Подготовка и пуск программируемого таймера
        CALL    130060$         ; Поиск пилот-тона перед заголовком
        CALL    130254$         ; Автоподстройка по пилот-тону
        CALL    130372$         ; Чтение заголовка
        BIT     #1,R1           ; Тип устройства ?
        BEQ     127220$         ; MSX
        CALL    130436$         ; Чтение длины файла в словах
        MOV     R0,23406        ; Сохранить ее в МП
        CALL    130436$         ; Чтение адреса загрузки файла
        MOV     R0,23404        ; Сохранить его в МП
127220$:MOV     23320,R3
        ADD     23326,PC        ; Пропустить проверку заголовка (на 127252$)?
        MOV     #10,R2          ; R2 = длина заголовка в словах
        MOV     #23364,R4       ; R4 = адрес прочитанного заголовка
        MOV     #23340,R0       ; R0 = адрес заданного заголовка
127244$:CMP     (R0)+,(R4)+     ; Цикл сравнения
        BNE     127462$         ; Не равны
        SOB     R2,127244$
127252$:BIT     #1,R1           ; Тип устройства ?
        BNE     127312          ; УКНЦ
        MOV     #200,R2         ; R2 = число записываемых слов
        MOV     23360,R0        ; R0 = адрес буфера в ОЗУ ЦП
        CLC
        ROR     R0
        MOV     R0,@#177010
        MOV     #10,R3
        CALL    130156$         ; Поиск пилот-тона перед зоной данных
        BR      127372$
127312$:MOV     23362,R0        ; R0 = число считываемых слов
        TST     R0              ; Оно превышает 32767 ?
        BMI     127330$         ; Да
        CMP     23406,R0        ; Число запрошенных слов превышает длину файла?
        BHI     127334$         ; Нет
127330$:MOV     23406,R0        ; Используем длину файла
127334$:MOV     R0,R2           ; R2 = число считываемых слов
        MOV     23404,23410
        MOV     23360,R0        ; R0 = адрес буфера в ОЗУ ЦП
        CLC
        ROR     R0
        BCC     127366$         ; Четный адрес
        MOV     23404,R0        ; Используется считанный адрес
        CLC
        ROR     R0
127366$:MOV     R0,@#177010
127372$:TST     R2              ; Число считываемых слов равно нулю ?
        BEQ     127452$         ; Да
        CLR     R4              ; Контрольная сумма = 0
        CALL    130336$         ; Поиск и чтение первого слова данных
        BR      127412$
127406$:CALL    130436$         ; Чтение слова
127412$:ADD     23330,PC        ; Фиктивное чтение (на 127422$) ?
        MOV     R0,@#177014     ; Пересылка в ОЗУ ЦП
127422$:INC     @#177010        ; Переход к следующему адресу
        ADD     R0,R4           ; Подсчет контрольной суммы
        ADC     R4
        SOB     R2,127406$
        BIT     #1,R1           ; Тип устройства
        BEQ     127452$         ; MSX
        CALL    130436$         ; Чтение контрольной суммы
        CMP     R0,R4           ; Считанная КС равна подсчитанной ?
        BNE     127470$
127452$:CLR     R0
127454$:MTPS    #200
        RETURN
127462$:MOV     #1,R0           ; R0 = не совпадает заголовок
        BR      127454$
127470$:MOV     #12,R0          ; R0 = не совпадает контрольная сумма
        BR      127454$
; П/п начальной подготовки перед записью
127476$:BIC     #14,@#177716    ; Блокировка приема информации с МЛ
        CLR     @#177712        ; Очистить счетчик прогр. таймера
127510$:TST     @#177714        ; Счетчик очищен ?
        BNE     127510$         ; Нет
        MOV     #101,@#177710   ; Пуск таймера и разрешение прерываний
        MOV     #4,R3           ; R3 = число записываемых импульсов
        MTPS    #0              ; Разрешить прерывания
        RETURN
; Точка входа при записи пилот-тона перед заголовком
127536$:MOV     23310,R4        ; R4 = число битов "1" в пилот-тоне
        BR      127550$
127544$:MOV     23312,R4        ; R4 = число "1" в пилот-тоне перед данными
127550$:CALL    127664$         ; Запись бита "1"
        SOB     R4,127550$      ; Цикл по R4
        RETURN
; П/п записи имени файла
127560$:MOV     #10,R2          ; R2 = размер имени файла в словах
        MOV     #23340,R4       ; R4 = адрес начала имени файла
127570$:MOV     (R4)+,R0        ; R0 = очередное слово из имени файла
        CALL    127602$         ; Запись слова
        SOB     R2,127570$      ; Цикл по R2
        RETURN
; П/п записи слова на МЛ
127602$:CALL    127616$         ; Запись младшего байта
        SWAB    R0
        CALL    127616$         ; Запись старшего байта
        RETURN
; П/п записи байта на МЛ
; /-----------------------------------------------------------------\
; !               СТРУКТУРА БАЙТА ПРИ ЗАПИСИ НА МЛ                  !
; !                                                                 !
; !    бит "0", информационные биты (0) -- (7), бит "1", бит "1"    !
; \-----------------------------------------------------------------/
127616$:CALL    127660$         ; Запись бита "0"
        SEC                     ; Признак окончания байта
127624$:RORB    R0              ; Выдвинуть очередной бит
        BEQ     127646$         ; Байт окончился
        BCC     127640$         ; Выдвинут бит "0"
        CALL    127664$         ; Запись бита "1"
        BR      127624$
127640$:CALL    127660$         ; Запись бита "0"
        BR      127624$
127646$:CALL    127664$         ; Запись концевика (два бита "1")
        CALL    127664$
        RETURN
; Точка входа при записи бита "0"
127660$:CLR     R5              ; Признак записи бита "0"
        BR      127670$
; Точка входа при записи бита "1"
127664$:MOV     #14,R5          ; Признак записи бита "1"
127670$:CALL    130636$         ; Проверка нажатия "СТОП"
        TST     R3              ; Запись бита окончена ?
        BNE     127670$         ; Нет
        ADD     R5,PC           ; Если запись "1", на 127716$
        MOV     23304,@#177712  ; Занести длительность "0" в буфер таймера
        MOV     #2,R3           ; R3 = число записываемых импульсов
        BR      127730$
127716$:MOV     23306,@#177712  ; Занести длительность "1" в буфер таймера
        MOV     #4,R3           ; R3 = число записываемых импульсов
127730$:CLC
        RETURN
; П/п обработки прерывания от программируемого таймера
127734$:BIS     #2,@#177716     ; Установить высокий уровень при записи на МЛ
        MOV     #127752$,@#304  ; Новое значения вектора прерывания
        BR      127766$
127752$:BIC     #2,@#177716     ; Установить низкий уровень при записи на МЛ
        MOV     #127734$,@#304  ; Новое значение вектора прерывания
127766$:TST     @#177714        ; Сбросить готовность таймера
        TSTB    @#177710        ; Готовность сброшена ?
        BMI     127766$         ; Нет
        DEC     R3              ; Уменьшить счетчик записываемых импульсов
        BMI     130006$         ; Он отрицательный
        RTI
130006$:MOV     #14,R0          ; R0 = ошибка выдержки времени при записи
        MOV     23332,SP
        RETURN
; П/п начальной подготовки перед чтением
130020$:CLR     @#177710        ; Остановить программируемый таймер
        MOV     23336,R1        ; R1 = тип устройства (УКНЦ или MSX)
        CLR     @#177712        ; Очистить буфер таймера
130034$:TST     @#177714        ; Буфер очищен ?
        BNE     130034$         ; Нет
        BIS     #14,@#177716    ; Разрешить прием информации с МЛ
        MOV     #21,@#177710    ; Пуск таймера и разрешение прерывания при
                                ; изменении информации на линии МЛ
        RETURN
; П/п поиска пилот-тона перед заголовком
130060$:MTPS    #200            ; Запретить прерывания
130064$:MOV     23314,R2        ; R2 = число перепадов уровня при поиске загол.
130070$:MOV     R5,R4           ; R4 = длина предыдущего интервала
130072$:CALL    130636$         ; Проверка нажатия "СТОП"
        BIT     #40,@#177710    ; Перепад произошел ?
        BEQ     130072$         ; Нет
        MOV     @#177714,R5     ; R5 = длина текущего интервала
130112$:TST     @#177714        ; Сбросить готовность таймера
        BIT     #250,@#177710   ; Готовность сброшена ?
        BNE     130112$         ; Нет
        SUB     R5,R4           ; Вычислить разность между длинами интервалов
        BPL     130134$
        NEG     R4
130134$:CMP     R4,23322        ; Разброс длин в норме ?
        BHI     130064$         ; Нет
        SOB     R2,130070$      ; Цикл по R2
        MOV     #10,R3
        MTPS    #0
        RETURN
; П/п поиска пилот-тона перед зоной данных
130156$:MTPS    #200            ; Запретить прерывания
130162$:MOV     23316,R0        ; R0 = число перепадов уровня при поиске загол.
130166$:MOV     R5,R4           ; R4 = длина предыдущего интервала
130170$:CALL    130636$         ; Проверка нажатия "СТОП"
        BIT     #40,@#177710    ; Перепад произошел ?
        BEQ     130170$         ; Нет
        MOV     @#177714,R5     ; R5 = длина текущего интервала
130210$:TST     @#177714        ; Сбросить готовность таймера
        BIT     #250,@#177710   ; Готовность сброшена ?
        BNE     130210$         ; Нет
        SUB     R5,R4           ; Вычислить разность между длинами интервалов
        BPL     130232$
        NEG     R4
130232$:CMP     R4,23322        ; Разброс длин в норме ?
        BHI     130162$         ; Нет
        SOB     R0,130166$      ; Цикл по R0
        MOV     #10,R3
        MTPS    #0
        RETURN
; П/п вычисления усредненного значения длины бита (между "0" и "1")
130254$:MOV     R1,R4           ; Сохранить значение R1 в R4
        MOV     #10,R0          ; R0 = число читаемых импульсов
        CLR     R1
        CLR     R3
130266$:CALL    130530$         ; Чтение бита
        BIS     #170000,R5      ; Преобразование в отрицательное число
        SUB     R5,R1           ; Прибавить к общей длине
        SOB     R0,130266$      ; Цикл по R0
        MOV     #10,R3
        DIV     #10,R0          ; Вычисление среднего значения длины "1"
        MOV     R0,R1           ; R1 = длина "1"
        ASR     R0              ; R0 = длина "1" / 2
        ADD     R1,R0           ; R0 = среднее между длиной "1" и "0"
        NEG     R0              ; Преобразование в отрицательное число (12 бит)
        BIC     #170000,R0
        MOV     R0,23324        ; Сохранение его в памяти
        MOV     R4,R1           ; Восстановление R1
        RETURN
; П/п поиска данных (определяются по биту "0")
130336$:CLR     R5              ; Очередной бит не прочитан
130340$:CALL    130636$         ; Проверка нажатия "СТОП"
        TST     R5              ; Бит прочитан ?
        BEQ     130340$         ; Нет
        INC     R3              ; Увеличить счетчик импульсов
        CMP     R5,23324        ; Это бит "0" ?
        BHIS    130336$         ; Нет
        INC     R3
        INC     R3
        CALL    130422$         ; Дочитать слово
        RETURN
; П/п чтения имени файла
130372$:MOV     #10,R2          ; R2 = длина имени файла в словах
        MOV     #23364,R4       ; R4 = адрес буфера
        CALL    130336$         ; Поиск и чтение первого слова
        BR      130414$
130410$:CALL    130436$         ; Чтение очередного слова
130414$:MOV     R0,(R4)+        ; Поместить в буфер
        SOB     R2,130410$      ; Цикл по R2
        RETURN
; П/п дочитывания слова
130422$:CLRB    R0
        BIS     #200,R0         ; Признак окончания чтения байта
        CALL    130470$         ; Дочитать байт
        BR      130442$
; П/п чтения слова
130436$:CALL    130454$         ; Прочесть младший байт
130442$:SWAB    R0
        CALL    130454$         ; Прочесть старший байт
        SWAB    R0
        RETURN
; П/п чтения байта
130454$:CLRB    R0
        BIS     #200,R0         ; Установить признак окончания
        CALL    130530$         ; Прочесть бит
        BCS     130516$         ; Это не "0" (ошибка)
130470$:CALL    130530$         ; Прочесть бит
        RORB    R0              ; "Задвинуть" бит
        BCC     130470$         ; Пока не конец
        CALL    130530$         ; Прочесть бит
        BCC     130516$         ; Это не "1" (ошибка)
        CALL    130530$         ; Прочесть бит
        BCC     130516$         ; Это не "1" (ошибка)
        RETURN
130516$:MOV     #11,R0          ; R0 = ошибка чтения
        MOV     23332,SP
        RETURN
; П/п чтения бита
130530$:CLR     R5              ; Бит еще не прочитан
130532$:CALL    130636$         ; Проверка нажатия "СТОП"
        TST     R5              ; Бит прочитан ?
        BEQ     130532$         ; Нет
        CMP     R5,23324        ; Это "0" ?
        BLO     130560$         ; Да
        MOV     #3,R3
        SEC                     ; Признак бита "1"
        BR      130566$
130560$:MOV     #1,R3
        CLC                     ; Признак бита "0"
130566$:RETURN
; П/п обработки прерывания по линии МЛ при изменении уровня сигнала
130570$:TST     R3              ; Счетчик равен нулю ?
        BNE     130604$         ; Нет
        TST     R5              ; Обработка предыдущего бита окончена ?
        BNE     130624$         ; Нет
        MOV     @#177714,R5     ; R5 = длина импульса
130604$:TST     @#177714        ; Сбросить готовность таймера
        BIT     #250,@#177710   ; Готовность сброшена ?
        BNE     130604$         ; Нет
        DEC     R3              ; Уменьшить счетчик импульсов
        RTI
130624$:MOV     #13,R0          ; R0 = ошибка выдержки времени при чтении
        MOV     23332,SP
        RETURN
; П/п проверки нажатия клавиши "СТОП"
130636$:TSTB    @#177700        ; Клавиша нажата ?
        BPL     130670$         ; Нет
        CMP     #4,@#177702     ; Это "СТОП" ?
        BNE     130670$         ; Нет
        MOV     23332,SP
        MOV     #377,R0         ; R0 = нажата клавиша "СТОП"
        MTPS    #200            ; Запретить прерывания
130670$:RETURN
; П/п выключения программируемого таймера
130672$:CLR     @#177710        ; Выключить таймер (режим "ОСТАНОВ")
        TST     @#177714        ; Сбросить готовность таймера
        TST     @#177710        ; Готовность сброшена ?
        BNE     130672$         ; Нет
        RETURN
; *** ДИСКОВОД ***
; П/п установки начальных значений
130712$:TST     @#177132        ; Проверка присутствия контроллера дисковода
        CLR     23204           ; Очистить управляющее слово
        MOV     23204,@#177130  ; Инициализация контроллера
        CLRB    23334
        CLR     23220
        CLR     23222
        BIT     #10000,@#177704 ; Подключен 80-дорожечный дисковод ?
        BEQ     131030$         ; Нет
; Параметры для 80-дорожечного дисковода
        MOV     #620,23216      ; Время разгона двигателя
        MOV     #23260,R1       ; R1 = адрес буфера времен шага
        MOV     #3,R0           ; R0 = время шага
        CALL    131164$         ; Установить для всех четырех накопителей
        MOV     #23264,R1       ; R1 = адрес буфера времен загрузки головки
        MOV     #44,R0          ; R0 = время загрузки головки
        CALL    131164$         ; Установить для всех четырех накопителей
        MOVB    #50,23226       ; Номер дорожки, где вкл. прекоррекция 250 нс
        MOVB    #120,23227      ; Номер дорожки, где вкл. прекоррекция 500 нс
        BR      131102$
; Параметры для 40-дорожечного дисковода
131030$:MOV     #1750,23216     ; Время разгона двигателя
        MOV     #23260,R1       ; R1 = адрес буфера времен шага
        MOV     #24,R0          ; R0 = время шага
        CALL    131164$         ; Установить для всех четырех накопителей
        MOV     #23264,R1       ; R1 = адрес буфера времен загрузки головки
        MOV     #50,R0          ; R0 = время загрузки головки
        CALL    131164$         ; Установить для всех четырех накопителей
        MOVB    #10,23226       ; Номер дорожки, где вкл. прекоррекция 250 нс
        MOVB    #36,23227       ; Номер дорожки, где вкл. прекоррекция 500 нс
131102$:MOV     #23270,R1       ; R1 = адрес буфера числа секторов в дорожке
        MOV     #12,R0          ; R0 = число секторов в дорожке
        CALL    131164$         ; Установить для всех четырех накопителей
        MOV     #23274,R1       ; R1 = адрес буфера параметров SKIP (REGIM)
        MOV     #1,R0           ; R0 = параметр SKIP
        CALL    131164$         ; Установить для всех четырех накопителей
        MOV     #2,23250        ; Текущий формат сектора - 512 байт
        MOV     #-1,23337
        MOV     #-1,23254       ; Неопределенный номер текущих дорожек
        MOV     #-1,23256
        RETURN
131164$:MOV     #4,R2           ; R2 = максимальное число накопителей
131170$:MOVB    R0,(R1)+        ; Установить параметр
        SOB     R2,131170$
        RETURN
; Основная п/п управления накопителем
131176$:JSR     R5,125560$      ; Чтение МП
        .WORD   5
        CALL    176376$         ; Останов программируемого таймера
        JSR     R5,134210$      ; Запуск таймера с последующим вызовом п/п
        .WORD   10,131224$,107  ; по адресу 131224$
        RETURN
131224$:CALL    134242$         ; Сброс готовности программируемого таймера
        CLRB    @#177710        ; Перевести таймер в режим "ОСТАНОВ"
        CALL    134316$         ; Сохранить значения РОН
        BIC     #175754,23204   ; Сброс в УС прекоррекции,номера стороны ...
        BICB    #300,23335      ; Очистка старших битов кода функции
        BEQ     131516$         ; Код функции = 0 (ошибка)
        CMPB    #10,23335       ; Код функции >= 10(8) ?
        BLOS    131272$         ; Да
        JMP     135214$         ; Код функции в пределе 1 -- 7
131272$:TSTB    23337           ; Какая сторона запрошена ?
        BPL     131316$         ; Низ
        BIS     #40,23204       ; Установить "ВЕРХ" в УС
        MOVB    #1,23212        ; Текущая сторона - верх
        BR      131330$
131316$:BIC     #40,23204       ; Установить "НИЗ" в УС
        CLRB    23212           ; Текущая сторона - низ
131330$:BICB    #374,23337      ; Оставить биты номера устройства
        MOVB    23340,23213     ; Переслать номер запрашиваемой дорожки
        CLR     R1
        MOVB    23337,R1        ; R1 = номер устройства
        MOVB    23260(R1),23220 ; Текущее время шага
        MOVB    23264(R1),23222 ; Текущее время загрузки головки
        MOVB    23274(R1),23300 ; Текущий параметр SKIP
        MOVB    23270(R1),23301 ; Текущее число секторов в дорожке
        TSTB    23341           ; Номер запрашиваемого сектора отрицательный ?
        BMI     131516$         ; Да
        CMPB    23341,23301     ; Номер сектора превышает лимит ?
        BHI     131516$         ; Да
        CMPB    #5,23301        ; В дорожке 5 секторов ?
        BEQ     131440$         ; Да
        MOV     #2,23250        ; Текущий формат сектора - 512 байт
        BR      131446$
131440$:MOV     #3,23250        ; Текущий формат сектора - 1024 байт
131446$:MOV     23250,R0        ; R0 = текущий формат сектора
        MOVB    135426$(R0),23302; (23302) = размер межсекторного промежутка
        ASL     R0
        MOV     135412$(R0),23252; (23252) = число слов в секторе
        CMPB    #30,23335       ; Код функции < 30
        BHI     131502$         ; Да
        BR      131542$
131502$:CLC                     ; Преобразование адреса для загрузки в 177010
        ROR     23342
        MOV     23344,R0        ; R0 = число слов для чтения
        BPL     131530$         ; Оно < 32768 (в норме)
131516$:MOVB    #11,23334       ; Ошибочный массив параметров
        JMP     134422$
131530$:ADD     23342,R0        ; R0 = число слов + начальный адрес
        CMP     #70000,R0       ; Конец буфера выходит за границу 56 KB ?
        BLO     131516$         ; Да
131542$:MOVB    23337,R1        ; R1 = номер устройства
        MOV     R1,23206
        ADD     #23254,23206    ; (23206) = указатель на текущую дорожку
        JSR     R5,134210$      ; Запуск таймера с последующим вызовом п/п
        .WORD   101,131710$,107 ; по адресу 131710$
        BIT     #2000,23204     ; Двигатель накопителя еще работает ?
        BNE     131620$         ; Да
        BIS     #20,23204       ; Установить бит запуска мотора в УС
        MOV     23216,23224     ; (23224) = время разгона двигателя
        BR      131652$
131620$:MOVB    23204,R0
        BICB    #374,R0         ; R0 = номер выбранного устройства
        CMPB    135406$(R1),R0  ; Номера выбранного и запрошенного уст-в равны?
        BNE     131644$         ; Нет
        CALL    134356$         ; Восстановить РОН
        BR      131726$
131644$:MOV     23222,23224     ; (23224) = время загрузки головки
131652$:BIC     #3,23204
        BISB    135406$(R1),23204; Установить биты номера устройства в УС
        BIS     #2000,23204     ; Установить бит выбора накопителя
        MOV     23204,@#177130  ; Запуск мотора
        CALL    134356$         ; Восстановить РОН
        RTI
131710$:CALL    134242$         ; Сброс готовности программируемого таймера
        DEC     23224           ; Уменьшить значение счетчика (разгон мотора)
        BNE     131724$         ; Он еще не равен нулю
        BR      131726$
131724$:RTI
131726$:JSR     R5,134210$      ; Запуск таймера с последующим вызовом п/п
        .WORD   101,132074$,107 ; по адресу 132074$
        TSTB    @23206          ; Текущий номер дорожки определенный ?
        BPL     132112$         ; Да
        MOVB    #200,@23206     ; Примем в качестве номера дорожки - 128
        BIC     #100,23204      ; Установить в УС перемещение от центра
        MOV     23204,@#177130  ; Сообщить об этом контроллеру
        BIS     #200,23204      ; Установить в УС бит шага
131776$:BIT     #1,@#177130     ; Головка находится на нулевой дорожке ?
        BEQ     132022$         ; Нет
        BIC     #200,23204      ; Сбросить в УС бит шага
        CLRB    @23206          ; Текущая дорожка - нулевая
        BR      132112$
132022$:DECB    @23206          ; Уменьшить номер текущей дорожки
        BNE     132056$         ; Пока не 0
        BIC     #200,23204      ; Сбросить в УС бит шага
        MOVB    #377,@23206     ; Номер дорожки - неопределенный
        MOVB    #7,23334        ; Ошибка - нулевая дорожка не обнаружена
        JMP     134422$
132056$:MOV     23204,@#177130  ; Сделать шаг назад
        MOV     23220,23224     ; (23224) = время шага
        RTI
132074$:CALL    134242$         ; Сбросить готовность программируемого таймера
        DEC     23224           ; Уменьшить значение счетчика (время шага)
        BNE     132110$         ; Он не равен нулю
        BR      131776$
132110$:RTI
132112$:CMPB    @23206,23340    ; Сравнить номера текущей и запрошенной дорожек
        BEQ     132346$         ; Равны
        BHI     132164$         ; Больше
        INCB    @23206          ; Увеличить номер текущей дорожки
        BMI     132152$         ; Он > 127 (ошибка)
        BIT     #100,23204      ; В УС установлен бит перемещения к центру
        BNE     132246$         ; Да
        BIS     #100,23204      ; Установить в УС бит перемещения к центру
        BR      132224$
132152$:MOVB    #10,23334       ; Ошибка - дорожка не обнаружена
        JMP     134422$
132164$:DECB    @23206          ; Уменьшить номер текущей дорожки
        BIT     #1,@#177130     ; Головка находится на нулевой дорожке ?
        BEQ     132206$         ; Нет
        CLRB    @23206          ; Текущая дорожка - нулевая
        BR      132112$
132206$:BIT     #100,23204      ; В УС сброшен бит перемещения
        BEQ     132246$         ; Да
        BIC     #100,23204      ; Сбросить в УС бит перемещения
132224$:MOV     23204,@#177130  ; Извещение контроллера о направлении перемещ.
        MOV     #132242$,@#304  ; Адрес новой п/п обработки прерывания
        RTI
132242$:CALL    134242$         ; Сбросить готовность программируемого таймера
132246$:MOVB    23300,23246     ; (23246) = текущий параметр SKIP
132254$:MOV     23220,23224     ; (23224) = время шага
        MOV     #132322$,@#304  ; Адрес новой п/п обработки прерывания
        CALL    132276$         ; Выполнить шаг в выбранном направлении
        RTI
132276$:BIS     #200,23204      ; Установить в УС бит шага
        MOV     23204,@#177130  ; Выполнить шаг
        BIC     #200,23204      ; Сбросить в УС бит шага
        RETURN
132322$:CALL    134242$         ; Сбросить готовность программируемого таймера
        DEC     23224           ; Уменьшить значение счетчика (время шага)
        BNE     132344$         ; Он не равен нулю
        DECB    23246           ; Уменьшить параметр пропуска дорожки
        BNE     132254$         ; Не равен нулю
        BR      132112$
132344$:RTI
132346$:BIC     #14,23204       ; Очистить в УС биты прекоррекции
        MOV     23226,23246     ; (23246) = номера дорожек, где вкл. прекорр.
        CMPB    #1,23300        ; Параметр SKIP равен 1 ?
        BEQ     132402$         ; Да
        ASRB    23246           ; Уменьшить номера дорожек на 2
        ASRB    23247
132402$:CMPB    23246,@23206    ; Надо включать прекоррекцию ?
        BHI     132440$         ; Нет
        CMPB    23247,@23206    ; Включать прекоррекцию 500 нс ?
        BHI     132432$         ; Да
        BIS     #4,23204        ; Установить в УС бит вкл. прекоррекции 250 нс
        BR      132440$
132432$:BIS     #10,23204       ; Установить в УС бит вкл. прекоррекции 500 нс
132440$:MOV     23204,@#177130  ; Извещение контроллера о вкл. прекоррекции
        MOV     #132456$,@#304  ; Адрес новой п/п обработки прерывания
        RTI
132456$:CALL    134242$         ; Сбросить готовность программируемого таймера
        CLRB    @#177710        ; Остановить таймер
        CALL    134316$         ; Сохранить значения РОН
        MOV     #177130,R4      ; R4 = адрес РСУ накопителя
        MOV     R4,R5
        TST     (R5)+           ; R5 = адрес РД накопителя
        CMPB    #10,23335       ; Запрошено чтение ?
        BEQ     132570$         ; Да
        BIT     #4,@R4          ; Дискета защищена от записи ?
        BEQ     132532$         ; Нет
        MOVB    #6,23334        ; Ошибка - защита от записи
        JMP     134422$
132532$:CMPB    #20,23335       ; Запрошена запись ?
        BEQ     132570$
        CMPB    #30,23335       ; Запрошено форматирование дорожки ?
        BNE     132556$         ; Нет
        JMP     134474$
132556$:MOVB    #11,23334       ; Ошибка - неверный массив параметров
        JMP     134422$
132570$:MOV     #36,23224
        MOV     23224,R2
        MOV     23204,R3        ; R3 = УС
        MOV     #177130,R4      ; R4 = адрес РСУ накопителя
        MOV     R4,R5
        TST     (R5)+           ; R5 = адрес РД накопителя
        JSR     R5,134210$      ; Запуск таймера
        .WORD   2465,132630$,7
132630$:MOV     @R5,R0          ; Прочесть слово с дискеты
        BEQ     132640$         ; Это нуль
        INC     R0
        BNE     132656$         ; Это не минус один
132640$:TSTB    @#177710        ; Таймер окончил счет ?
        BPL     132630$         ; Нет
        CALL    134242$         ; Сбросить готовность таймера
        SOB     R2,132630$
        BR      132772$         ; Ошибка (не форматирована дискета или ее нет)
132656$:MOV     #4,R1
        CMPB    #5,23301        ; Формат 1024 байта в секторе ?
        BNE     132702$         ; Нет
        TST     @R4             ; Присутствует линия индекс ?
        BPL     132702$         ; Нет
        MOV     #36,R1
132702$:MOV     @R5,R0          ; Прочесть слово с дискеты
        BEQ     132730$         ; Это нуль
        INC     R0
        BEQ     132730$         ; Это минус один
        TSTB    @#177710        ; Таймер окончил счет
        BPL     132656$         ; Нет
        CALL    134242$         ; Сбросить готовность таймера
        SOB     R2,132656$
        BR      133002$         ; Ошибка (не найден межсекторный промежуток)
132730$:MOV     @R5,R0          ; Прочесть слово с дискеты
        BEQ     132740$         ; Это нуль
        INC     R0
        BNE     132640$         ; Это не минус один
132740$:SOB     R1,132730$
        BIS     #400,R3         ; Установить в УС бит поиска заголовка
        MOV     R3,@R4          ; Начать поиск
        BIC     #400,R3         ; Сбросить в УС бит поиска заголовка
        MOV     #226,R0         ; Время ожидания поиска
        MOV     R3,@R4
132762$:TSTB    @R4             ; Маркер заголовка обнаружен ?
        BMI     133034$         ; Да
        SOB     R0,132762$
        BR      132630$         ; Заголовок сектора необнаружен
132772$:MOVB    #100,23334      ; Ошибка - не форматирована дискета
        BR      133030$
133002$:MOVB    #101,23334      ; Ошибка - не обнаружен межсекторный промежуток
        BR      133030$
133012$:MOVB    #102,23334      ; Ошибка - не найден сектор с заданным номером
        BR      133030$
133022$:MOVB    #3,23334
133030$:JMP     134422$
133034$:TST     @R5             ; Сбросить готовность контроллера дисковода
133036$:TSTB    @R4             ; Следующее слово прочитано ?
        BPL     133036$         ; Нет
        CMP     #120776,@R5     ; Это адресный маркер заголовка сектора?
        BEQ     133212$         ; Да
        MOV     #14,R0
133054$:ADD     23252,R0
        ASL     R0
        ASL     R0
133064$:CLRB    @#177710
        MOV     R0,@#177712     ; Загрузить буфер таймера
        CMP     R0,@#177714     ; Буфер загружен ?
        BNE     133064$         ; Нет
        MOV     #133134$,@#304  ; Адрес новой п/п обработки прерываний
        MOVB    #107,@#177710   ; Запустить таймер
        MOV     R3,23204
        MOV     R2,23224
        CALL    134356$         ; Восстановить РОН
        RTI
133134$:CALL    134242$         ; Сбросить готовность таймера
        CALL    134316$         ; Сохранить содержимое РОН
        DEC     23224           ; Уменьшить счетчик (число оборотов диска)
        BLE     133012$         ; Он равен нулю (ошибка)
        MOV     #2465,@#177712  ; Загрузить буфер таймера временем оборота
        MOV     #7,@#177710     ; Перевести таймер в режим "ПУСК" (без прерыв.)
        MOV     23224,R2        ; R2 = значение счетчика
        MOV     23204,R3        ; R3 = УС
        MOV     #177130,R4      ; R4 = адрес РСУ накопителя
        MOV     R4,R5
        TST     (R5)+           ; R5 = адрес РД накопителя
        JMP     134100$         ; На поиск заголовка сектора
133212$:TSTB    @R4             ; Очередное слово сформировано ?
        BPL     133212$         ; Нет
        MOV     @R5,23246       ; Прочесть его
        CMP     23212,23246     ; Это идентификатор стороны и дорожки ?
        BEQ     133276$         ; Да
133232$:TSTB    @R4             ; Очередное слово сформировано ?
        BPL     133232$         ; Нет
        TST     @R5             ; Игнорировать прочитанное слово(номер сектора)
        CALL    134300$         ; Контрольная сумма в порядке ?
        BEQ     133270$         ; Нет
        MOV     R3,23204        ; Сохранить УС
        CALL    134356$         ; Восстановить РОН
        MOVB    #377,@23206     ; Поставить номер неопределенной дорожки
        JMP     131726$
133270$:MOV     #40,R0
        BR      133054$
133276$:TSTB    @R4             ; Очередное слово сформировано ?
        BPL     133276$         ; Нет
        MOV     @R5,R0          ; R0 = прочитанное слово
        SWAB    R0
        CMPB    23341,R0        ; Номер сектора совпадает ?
        BNE     133270$         ; Нет
        MOV     23344,R2        ; R2 = число слов для обмена
        MOV     23342,@#177010  ; Адрес буфера ОЗУ ЦП
        CALL    134300$         ; Контрольная сумма в порядке ?
        BNE     133344$         ; Да
        MOVB    #2,23334        ; Ошибка в контрольной сумме заголовка
        BR      133030$
133344$:CMPB    #10,23335       ; Задана операция чтения ?
        BNE     133506$         ; Нет
        TST     @R5             ; Сбросить готовность контроллера
        MOV     #21,R1
        CALL    134132$         ; Поиск пропуска синхроимпульсов
        BEQ     133476$         ; Не найдено
133370$:TSTB    @R4             ; Очередное слово сформировано ?
        BPL     133370$         ; Нет
        CMP     #120773,@R5     ; Это маркер данных ?
        BNE     133476$         ; Нет
        MOV     23252,R1        ; R1 = число слов в секторе
        TST     R2              ; Надо прочитать 0 слов ?
        BEQ     133442$         ; Да (сделать проверку КС сектора)
133412$:TSTB    @R4             ; Очередное слово сформировано ?
        BPL     133412$         ; Нет
        MOV     @R5,R0          ; Прочитать его
        SWAB    R0
        MOV     R0,@#177014     ; Переслать в ОЗУ ЦП
        INC     @#177010        ; Переход к следующему адресу
        DEC     R2              ; Уменьшить счетчик считываемых слов
        BEQ     133450$         ; Все прочитали
        SOB     R1,133412$      ; Цикл по числу слов в секторе
        BR      133452$
133442$:TSTB    @R4             ; Очередное слово сформировано ?
        BPL     133442$
        TST     @R5             ; Пропуск конца сектора
133450$:SOB     R1,133442$      ; Цикл по числу слов в секторе
133452$:MOV     R2,23344        ; Сохранить число оставшихся слов
        CALL    134300$         ; Контрольная сумма в порядке ?
        BNE     133706$         ; Да
        MOVB    #1,23334        ; Ошибка в контрольной сумме зоны данных
133472$:JMP     133030$
133476$:MOVB    #4,23334        ; Не найден маркер данных
        BR      133472$
133506$:TST     R2              ; Счетчик записываемых слов равен нулю ?
        BNE     133516$         ; Нет
        JMP     134416$         ; Да
133516$:MOV     #47116,@R5      ; Запись межсекторного промежутка
        MOV     #13,R0          ; R0 = размер межсекторного пром. перед данными
133526$:TSTB    @R4             ; Предыдущее слово записано ?
        BPL     133526$         ; Нет
        MOV     #47116,@R5      ; Запись межсекторного промежутка
        SOB     R0,133526$
        MOV     #6,R0           ; R0 = размер нулевой зоны
133544$:TSTB    @R4             ; Очередное слово записано ?
        BPL     133544$         ; Нет
        MOV     #0,@R5          ; Запись нулевой зоны
        SOB     R0,133544$
        BIS     #1000,R3        ; Установить бит пропуска синхроимпульсов
133562$:TSTB    @R4             ; Очередное слово записано ?
        BPL     133562$         ; Нет
        MOV     #120641,@R5     ; Запись первого слова маркера данных
        MOV     R3,@R4          ; Установить пропуск синхроимпульсов
        BIC     #1000,R3        ; Сбросить бит пропуска синхроимпульсов
133600$:TSTB    @R4             ; Очередное слово записано ?
        BPL     133600$         ; Нет
        MOV     #175641,@R5     ; Запись второго слова маркера данных
        MOV     23252,R1        ; R1 = размер сектора в словах
        DEC     R1
133616$:TSTB    @R4             ; Очередное слово записано ?
        BPL     133616$
        MOV     @#177014,@R5    ; Запись первого слова данных
        MOV     R3,@R4          ; Сброс пропуска синхроимпульсов
        INC     @#177010        ; Переход к следующему адресу
        DEC     R2              ; Уменьшить счетчик записываемых слов
        BEQ     133664$
133640$:TSTB    @R4             ; Очередное слово записано ?
        BPL     133640$         ; Нет
        MOV     @#177014,@R5    ; Запись данных
        INC     @#177010        ; Переход к следующему адресу
        DEC     R2              ; Уменьшить счетчик записываемых слов
        BEQ     133674$
        SOB     R1,133640$
        BR      133676$
133664$:TSTB    @R4             ; Очередное слово записано ?
        BPL     133664$         ; Нет
        MOV     #0,@R5          ; Запись нуля
133674$:SOB     R1,133664$
133676$:MOV     R2,23344        ; Сохранить счетчик записываемых слов
        CALL    134256$         ; Запись контрольной суммы
133706$:TST     23344           ; Счетчик записываемых слов равен нулю
        BNE     133720$         ; Нет
        JMP     134416$         ; Да
133720$:MOV     @#177010,23342  ; Сохранение регистра адреса
        INCB    23341           ; Увеличить номер текущего сектора
        CMPB    23341,23301     ; Он превышает номер последнего сектора ?
        BLOS    134064$         ; Нет
        CMPB    #1,23336        ; Запрошена односторонняя операция ?
        BEQ     133766$         ; Да
        BIT     #40,R3          ; Текущая сторона - верх ?
        BNE     133766$         ; Да
        INC     23212           ; Увеличить номер текущей стороны
        BR      134010$
133766$:INCB    23340           ; Увеличить номер запрашиваемой дорожки
        MOVB    23340,23212
        SWAB    23212
        CLRB    23212           ; Текущая сторона - низ
134010$:CLRB    @#177710        ; Остановить программируемый таймер
        TST     @#177714        ; Сбросить его готовность
        TST     @#177714
        MOVB    #1,23341        ; Текущий номер сектора - 1
        CMPB    #1,23336        ; Запрошена односторонняя операция
        BEQ     134050$         ; Да
        MOV     #40,R0
        XOR     R0,R3           ; Переменить сторону
134050$:MOV     R3,23204
        CALL    134356$         ; Восстановить РОН
        JMP     131726$
134064$:TST     @#177714        ; Сбросить готовность программируемого таймера
        TST     @#177714
        MOV     #36,R2
134100$:TST     @R5             ; Перевод контроллера в режим чтения
        CLR     R1
        MOVB    23302,R1        ; R1 = текущий размер межсекторного промежутка
        ADD     #6,R1
        CALL    134132$         ; Поиск нулевой зоны  и начала след. сектора
        BEQ     134126$         ; Она не найдена
        JMP     133036$
134126$:JMP     132630$
; П/п поиска нулевой зоны
134132$:TSTB    @R4             ; Очередное слово считано ?
        BPL     134132$         ; Нет
        MOV     @R5,R0
        BEQ     134152$         ; Это нулевая зона
        INC     R0
        BEQ     134152$
        SOB     R1,134132$
        BR      134200$
134152$:BIS     #400,R3         ; Уст. бит поиска пропуска синхроимпульсов
        MOV     R3,@R4          ; Начать поиск
        BIC     #400,R3         ; Сбросить бит поиска пропуска синхроимпульсов
        MOV     #226,R0
        MOV     R3,@R4
134172$:TSTB    @R4             ; Поиск окончен
        BMI     134204$         ; Да
        SOB     R0,134172$
134200$:SEZ                     ; Операция окончилась неуспешно
        RETURN
134204$:TST     @R5
        RETURN
; П/п запуска таймера с вызовом п/п по его прерыванию
134210$:CLRB    @#177710        ; Остановить программируемый таймер
        MOV     @R5,@#177712    ; Занести в буфер временную задержку
        CMP     @R5,@#177714
        BNE     134210$
        TST     (R5)+
        MOV     (R5)+,@#304     ; Занести адрес п/п в вектор прерывания
        MOV     (R5)+,@#177710  ; Запустить таймер
        RTS     R5
; П/п сброса готовности программируемого таймера
134242$:TST     @#177714        ; Сбросить готовность таймера
        TSTB    @#177710        ; Она сброшена ?
        BMI     134242$         ; Нет
        RETURN
; П/п записи контрольной суммы
134256$:BIT     #40000,@R4      ; Запись КС
        BEQ     134256$
        MOV     #47116,@R5
134270$:TSTB    @R4
        BPL     134270$
        TST     @R5
        RETURN
; П/п проверки контрольной суммы
134300$:MOV     #36,R0
134304$:BIT     #40000,@R4      ; Проверка КС
        BNE     134314$
        SOB     R0,134304$
134314$:RETURN
; П/п сохранения РОН
134316$:MOV     R0,23232
        MOV     R1,23234
        MOV     R2,23236
        MOV     R3,23240
        MOV     R4,23242
        MOV     R5,23244
        MOV     @#177010,23230
        RETURN
; П/п восстановления РОН
134356$:MOV     23232,R0
        MOV     23234,R1
        MOV     23236,R2
        MOV     23240,R3
        MOV     23242,R4
        MOV     23244,R5
        MOV     23230,@#177010
        RETURN
; Завершающая процедура
134416$:CLRB    23334           ; Код ошибки = 0 (все нормально)
134422$:CALL    125140$         ; Переслать код возврата в ЦП
        JSR     R5,175400$      ; Установить адрес п/п выключения двигателя
        .WORD   372,134454$
        CALL    134356$         ; Восстановить РОН
        CLR     @#177710        ; Остановить таймер
        CALL    176422$
        RTI
; П/п останова двигателя
134454$:BIC     #2037,23204     ; Сбросить биты выбора устройства,вкл. мотора
        MOV     23204,@#177130  ; Выключить двигатель
        RETURN
134472$:BR      134416$
; Форматирование дорожки
134474$:MOV     23204,R3        ; R3 = УС накопителя
        MOV     #177130,R4      ; R4 = адрес РУС накопителя
        MOV     R4,R5
        TST     (R5)+           ; R5 = адрес РД накопителя
        SWAB    23212
        MOVB    23341,R2        ; R2 = формат сектора
        BIC     #177774,R2
        BNE     134540$
        MOV     #13,23334       ; Ошибка = неверный формат сектора
        JMP     134422$
134540$:MOVB    135422$(R2),23246; (23246) = число секторов в дорожке
        MOVB    135426$(R2),23302; (23302) = размер межсекторного промежутка
        MOV     R2,R1
        ASL     R1
        MOV     135412$(R1),R1  ; R1 = число слов в секторе
        SWAB    R2
        INC     R2              ; R2 = формат сектора : номер сектора
        MOV     #1750,R0
134574$:TST     @R4             ; Присутствует линия ИНДЕКС ?
        BPL     134616$         ; Нет
        SOB     R0,134574$
134602$:TST     @R5             ; Установить режим готовности чтения
        MOVB    #14,23334       ; Ошибка = ошибка линии ИНДЕКС
        JMP     134422$
134616$:MOV     #6200,R0        ; R0 = число слов в дорожке
        MOV     #47116,@R5      ; Заполнение дорожки
134626$:TST     @R4             ; Присутствует линия ИНДЕКС ?
        BMI     134646$
134632$:TSTB    @R4             ; Предыдущее слово записано ?
        BPL     134632$         ; Да
        MOV     #47116,@R5      ; Заполнение дорожки
        SOB     R0,134626$
        BR      134602$
134646$:MOV     #20,R0          ; R0 = размер межсект. пром. в начале дорожки
134652$:MOV     #47116,@R5      ; Заполнение межсект. пром. перед заголовком
134656$:TSTB    @R4             ; Очередное слово записано ?
        BPL     134656$         ; Нет
        MOV     #47116,@R5      ; Заполнение межсект. пром. перед заголовком
        SOB     R0,134656$
        MOV     #6,R0           ; R0 = размер нулевой зоны      
134674$:TSTB    @R4             ; Очередное слово записано ?
        BPL     134674$         ; Нет
        MOV     #0,@R5          ; Заполнение нулевой зоны
        SOB     R0,134674$
        BIS     #1000,R3        ; Установить бит пропуска синхроимпульсов
134712$:TSTB    @R4
        BPL     134712$
        MOV     #120641,@R5     ; Запись первого слова адресного маркера
        MOV     R3,@R4          ; Установить режим пропуска синхроимпульсов
        BIC     #1000,R3        ; Сбросить бит пропуска синхроимпульсов
134730$:TSTB    @R4
        BPL     134730$
        MOV     #177241,@R5     ; Запись второго слова адресного маркера
134740$:TSTB    @R4
        BPL     134740$
        MOV     23212,@R5       ; Запись номера дорожки и стороны
        MOV     R3,@R4          ; Сбросить режим пропуска синхроимпульсов
134752$:TSTB    @R4
        BPL     134752$
        MOV     R2,@R5          ; Запись номера сектора и формата сектора
        MOV     #13,R0          ; R0 = размер межсект. пром. перед данными
134764$:BIT     #40000,@R4      ; Запись контрольной суммы
        BEQ     134764$
        MOV     #47116,@R5      ; Заполнение межсект. пром. перед данными
134776$:TSTB    @R4
        BPL     134776$
        MOV     #47116,@R5      ; Заполнение межсект. пром. перед данными
        SOB     R0,134776$
        MOV     #6,R0           ; R0 = размер нулевой зоны
135014$:TSTB    @R4
        BPL     135014$
        MOV     #0,@R5          ; Заполнение нулевой зоны
        SOB     R0,135014$
        BIS     #1000,R3        ; Установить бит пропуска синхроимпульсов
135032$:TSTB    @R4
        BPL     135032$
        MOV     #120641,@R5     ; Запись первого слова маркера данных
        MOV     R3,@R4          ; Установить режим пропуска синхроимпульсов
        BIC     #1000,R3        ; Сбросить бит пропуска синхроимпульсов
135050$:TSTB    @R4
        BPL     135050$
        MOV     #175641,@R5     ; Запись второго слова маркера данных
        MOV     R1,R0           ; R0 = размер сектора в словах
135062$:TSTB    @R4
        BPL     135062$
        MOV     23342,@R5       ; Запись первого слова зоны данных
        MOV     R3,@R4          ; Сбросить режим пропуска синхроимпульсов
        DEC     R0
135076$:TSTB    @R4
        BPL     135076$
        MOV     23342,@R5       ; Заполнение зоны данных
        SOB     R0,135076$
        INC     R2              ; Увеличить номер сектора
        MOVB    23302,R0        ; R0 = размер межсект. пром. перед заголовком
135116$:BIT     #40000,@R4      ; Запись контрольной суммы
        BEQ     135116$
        DECB    23246           ; Уменьшить счетчик секторов
        BNE     134652$
        MOV     #1750,R0
135136$:TST     @R4             ; Присутствует линия ИНДЕКС ?
        BMI     135170$         ; Да
135142$:TSTB    @R4
        BPL     135142$
        MOV     #47116,@R5      ; Заполнение конца дорожки
        SOB     R0,135136$
        TST     @R5             ; Установить режим готовности чтения
        MOVB    #14,23334       ; Ошибка - ошибка линии ИНДЕКС
        JMP     134422$
135170$:MOV     #5,R0
135174$:TSTB    @R4
        BPL     135174$
        MOV     #47116,@R5      ; Заполнение в начале первых пяти слов
        SOB     R0,135174$
        TST     @R5             ; Установить режим готовности чтения
        JMP     134416$
; П/п-мы установок параметров
135214$:CLR     R0
        MOVB    23335,R0        ; R0 = номер устанавливаемого параметра (1 - 4)
        CMP     #4,R0           ; Он в диапазоне (1 - 4) ?
        BHIS    135242$         ; Да
        MOVB    #11,23334       ; Ошибка - неверный массив параметров
        JMP     134422$
135242$:MOVB    23340,23246     ; (23246) = значение устанавливаемого параметра
        DEC     R0
        MOV     #135272$,R1
        ADD     R0,R1
        ADD     R0,R1
        MOV     @R1,R1
        CALL    @R1             ; Вызов соответствующей п/п
        JMP     134416$
; Адреса начала п/п установки значений параметров
135272$:.WORD   135350$,135356$,135364$,135372$
135302$:MOVB    23337,R0        ; R0 = номер накопителя
        CMPB    #377,R0         ; Устанавливается для всех накопителей ?
        BEQ     135326$         ; Да
        MOV     #1,R2           ; R2 = число накопителей, для кот. уст. парам.
        BICB    #374,R0
        BR      135334$
135326$:CLR     R0
        MOV     #4,R2           ; R2 = число накопителей, для кот. уст. парам.
135334$:ADD     R0,R1           ; Корректировка под номер накопителя
135336$:MOVB    23246,@R1       ; Установка нового значения
        INC     R1
        SOB     R2,135336$
        RETURN
135350$:MOV     #23260,R1       ; R1 = адрес буфера времен шага
        BR      135302$
135356$:MOV     #23264,R1       ; R1 = адрес буфера времен загрузки головки
        BR      135302$
135364$:MOV     #23270,R1       ; R1 = адрес буфера числа секторов в дорожке
        BR      135302$
135372$:MOV     #23274,R1       ; R1 = адрес буфера параметра SKIP
        MOV     #2,23246        ; Принудительная установка пропуска дорожки
        BR      135302$
; Устанавливаемые биты в РУС накопителя при выборе соотв. устройства
135406$:.BYTE   3,2,1,0
; Число слов в секторе (формат x,256,512,1024 байт)
135412$:.WORD   0,200,400,1000
; Число секторов в дорожке (формат x,256,512,1024 байт)
135422$:.BYTE   0,20,12,5
; Размер межсекторного промежутка перед заголовком (формат x,256,512,1024 байт)
135426$:.BYTE   0,33,22,72
135432$:.BYTE   0,240,124,242