УКНЦ ROM disasm 1

Материал из Emuverse
Перейти к: навигация, поиск
Red copyright.png Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

        .TITLE  ROM

        .ASECT

        .=100000                ; Начальный адрес ПЗУ

; ********************************************************************
; *                                                                  *
; *        ПОДПРОГРАММЫ ОБСЛУЖИВАНИЯ МЕНЮ УСТАНОВКА И ЗАГРУЗКА       *
; *                                                                  *
; *                    Адреса 100000 - 103553                        *
; *                                                                  *
; ********************************************************************

; П/п установки начальных значений в меню УСТАНОВКА и ЗАГРУЗКА
100000$:JSR     R5,110712$      ; П/п заносит данные из области
        .WORD   100012$,7152    ; по адресу 100012 в 7152
        RETURN
100012$:.WORD   10.             ; Количество слов
        .WORD   177701,0,0      ; Пункт УСТ не выбран, VT-52, 80x24
        .WORD   7,1,1,7         ; Цвета символа, знакоместа, экрана и курсора
        .WORD   0,0             ; Рулон плавный, таймер включен
        .WORD   177701          ; Пункт ЗАГРУЗКА не выбран

; П/п обслуживания главного меню УСТАНОВКА
100040$:TST     @#23170         ; Ожидание завершения скроллинга
        BNE     100040$
        MOV     @#2476,-(SP)    ; Сохранить адрес пользовательского экрана
        MOV     #4672,@#2476    ; Включить экран установки
        MOV     #22754,R5       ; Сделать текущей таблицу видеопараметров
        CALL    110210$         ;  экрана установки
        JSR     R5,105346$      ; Перевести клавиатуру в системный режим
        .WORD   107310$,11054   ; Данные для системного режима
        CALL    104054$         ; Очистить буфер клавиатуры
        CLR     @#7232          ; Разрешение алфавитно-цифровой клавиатуры
        MOV     SP,@#7142
        EMT     52              ; Вывод УСТ в верхней строке
        .WORD   107533$
100120$:EMT     44              ; Вывод заголовка
        .WORD   102133$
100124$:MOV     #4,R0
        JSR     R4,101202$      ; Вывод меню и запрос пункта
        .WORD   101644$         ; Адрес списка для меню УСТАНОВКА
        BMI     100172$         ; Нажата <Enter> или УПР-@ ?
        CALL    @100150$(R2)    ; Обслуживание выбранного пункта
        BMI     100172$         ; Нажата <Enter> или УПР-@ ?
        BR      100124$
; Адреса п/п обслуживания пунктов меню УСТАНОВКА
100150$:.WORD   100172$,100334$,100372$,100432$,100476$
        .WORD   100536$,100576$,100630$,100730$
; Если нажаты <Enter> или УПР-@
100172$:CMP     R0,#177772      ; Нажата УПР-@ (выход в монитор ПП) ?
        BEQ     100302$
        MOV     @#7142,SP
        EMT     52              ; Стирание в верхней строке надписи УСТ
        .WORD   107524$
        EMT     52
        .WORD   107542$
        TST     @#7146          ; Предыдущий режим клавиатуры был системным ?
        BNE     100232$         ; Да
        JSR     R5,105400$      ; Восстановить пользовательский режим
        .WORD   107310$,11054   ; Данные для пользовательского режима
100232$:CALL    110204$         ; Включение пользовательского экрана
        MOV     (SP)+,@#2476
        CLR     @#7070          ; Очистить признак вызова
        TST     @#7072          ; Вызов происходил из меню ЗАГРУЗКА ?
        BNE     100300$         ; Да
100254$:MOV     #2,@#7230       ; Установить признак выполнения TRAP 2
        MOV     #2,@#22546      ; Установить признак выполнения TRAP 4
        MOV     #2,@#7042       ; Адресовать ASCII-коды клавиатуры каналу 0
        TRAP    4               ; Прочесть символ с канала 0 (если есть)
100300$:RETURN
100302$:MOV     #14,R0          ; Очистить экран
        EMT     42
        MOV     #100120$,-(SP)  ; Адрес возврата в меню УСТАНОВКА
        MOV     SP,@#7144
        JMP     @#160576        ; Переход к программе монитора ПП

; П/п обслуживания подменю СИСТЕМА КОМАНД
100324$:CALL    @100346(R2)     ; Вызов п/п по текущему пункту меню
        MOV     #4,R0
100334$:JSR     R4,101202$      ; Вывод подменю и запрос пункта
        .WORD   101672$         ; Адрес списка подменю СИСТЕМА КОМАНД
        BEQ     100324$
        RETURN
; Адреса п/п для обслуживания подменю СИСТЕМА КОМАНД
100346$:.WORD   162572$,113670$,113712$

; П/п обслуживания подменю ФОРМАТ ЭКРАНА
100354$:MOV     R2,R0           ; Получение номера формата
        ASR     R0              ; 0 - 80x24, 1 - 40x24, 2 - 20x24, 3 - 10x24
        DEC     R0
        CALL    116502$         ; Обращение к п/п установки формата экрана
        MOV     #2,R0
100372$:JSR     R4,101202$      ; Вывод меню и запрос пункта
        .WORD   101704$         ; Адрес списка подменю ФОРМАТ ЭКРАНА
        BEQ     100354$
        RETURN

; П/п для обслуживания подменю ЦВЕТ СИМВОЛА
100404$:MOV     R2,R0           ; Получение номера цвета
        ASR     R0
        DEC     R0
        MOV     R5,-(SP)        ; Сохранить адрес текущей таблицы видеопар.
        MOV     #22656,R5       ; Загрузить адрес таблицы экрана пользователя
        CALL    116052$         ; Обращение к п/п установки цвета символа
        MOV     (SP)+,R5
        MOV     #2,R0
100432$:JSR     R4,101202$      ; Вывод меню и запрос пункта
        .WORD   101722$         ; Адрес списка подменю ЦВЕТ СИМВОЛА
        BEQ     100404$
        RETURN

; П/п для обслуживания подменю ЦВЕТ ЗНАКОМЕСТА
100444$:MOV     R2,R0           ; Получение номера цвета
        SUB     #2,R0
        MOV     113512$(R0),R0
        MOV     R5,-(SP)
        MOV     #22656,R5
        CALL    116130$         ; Обращение к п/п установки цвета знакоместа
        MOV     (SP)+,R5
        MOV     #2,R0
100476$:JSR     R4,101202$
        .WORD   101750$         ; Адрес списка подменю ЦВЕТ ЗНАКОМЕСТА
        BEQ     100444$
        RETURN

; П/п для обслуживания подменю ЦВЕТ ЭКРАНА
100510$:MOV     R2,R0           ; Получение номера цвета
        ASR     R0
        DEC     R0
        MOV     R5,-(SP)
        MOV     #22656,R5
        CALL    116170$         ; Обращение к п/п установки цвета экрана
        MOV     (SP)+,R5
        MOV     #2,R0
100536$:JSR     R4,101202$
        .WORD   101776$         ; Адрес списка подменю ЦВЕТ ЭКРАНА
        BEQ     100510$
        RETURN

; П/п для обслуживания подменю ЦВЕТ КУРСОРА
100550$:MOV     R2,R0           ; Получение номера цвета
        ASR     R0
        DEC     R0
        MOV     R5,-(SP)
        MOV     #22656,R5
        CALL    116226$         ; Обращение к п/п установки цвета курсора
        MOV     (SP)+,R5
        MOV     #2,R0
100576$:JSR     R4,101202$
        .WORD   102024$         ; Адрес списка подменю ЦВЕТ КУРСОРА
        BEQ     100550$
        RETURN

; П/п для обслуживания подменю РУЛОН
100610$:MOV     R5,-(SP)
        MOV     #22656,R5
        CALL    @<100642$-2>(R2); Обращение к п/п-ам установки рулона
        MOV     (SP)+,R5
        MOV     #2,R0
100630$:JSR     R4,101202$
        .WORD   102052$         ; Адрес списка подменю РУЛОН
        BEQ     100610$
        RETURN
; Адреса п/п-ам для установки рулона
100642$:.WORD   100650$,100656$,100674$
100650$:CLR     @#7136          ; Установить плавный рулон
        BR      100664$
100656$:MOV     #2,@#7136       ; Установить дискретный рулон
100664$:MOV     #2,74(R5)       ; Установить присутствие рулона
        RETURN                  ; 74 - смещение в таблице видеопараметров
100674$:CLR     74(R5)          ; Установить отсутствие рулона
        RETURN

; П/п для обслуживания подменю ТАЙМЕР
100702$:BIS     #1000,@#177054  ; Выключить таймер в канале ЦП
        SUB     #2,R2           ; Текущий пункт - включен ?
        BNE     100724$         ; Нет
        BIC     #1000,@#177054  ; Включить таймер в канале ЦП
100724$:MOV     #2,R0
100730$:JSR     R4,101202$
        .WORD   102066$         ; Адреса списка подменю ТАЙМЕР
        BEQ     100702$
        RETURN

; П/п обслуживания главного меню ЗАГРУЗКА
100742$:CLR     @#7042          ; Направлять ASCII-коды запросам EMT 22
        CLR     -(SP)           ; Номер устройства = 0
100750$:MOV     #14,R0          ; Очистить экран
        EMT     42
100756$:CLR     @SP
        JSR     R4,101616$      ; Позиционирование курсора
        .BYTE   2,5             ; Y=2, X=5
        MOV     #-6,@#7150      ; Запрет вывода в верхнюю инф. строку
        CLR     @#23164         ; Разрешение использования курсора
        EMT     44              ; Вывод заголовка
        .WORD   103114$
101004$:MOV     #4,R0
        JSR     R4,101202$      ; Вывод меню и запрос пункта
        .WORD   102100$         ; Адрес списка меню ЗАГРУЗКА
        BEQ     100756$
        BMI     101146$         ; Нажаты <Enter>,<ИСП> или <0> ?
        ADD     R2,PC           ; Переход по номеру пункта (нажата вправо)
        BR      100756$
        BR      101044$         ; Диск
        BR      101102$         ; Кассета ПЗУ
        BR      101004$         ; Сеть
        BR      101004$         ; Стык С2
        BR      101004$         ; Магнитофон
        BR      101004$         ; Отладка
        BR      101004$         ; Тестирование
; Запрос номера диска
101044$:JSR     R4,101616$      ; Позиционирование курсора
        .BYTE   4,34
        EMT     22              ; Ввод символа с ожиданием
        CMP     R0,#33          ; Код Escape ?
        BEQ     101142$         ; Да
        EMT     42              ; Вывод символа
        SUB     #60,R0          ; Проверка нажатия <0> - <3>
        BMI     100756$
        CMP     R0,#3
        BHI     100756$
        BR      101136$
; Запрос номера кассеты ПЗУ
101102$:JSR     R4,101616$      ; Позиционирование курсора
        .BYTE   5,34
        EMT     22              ; Ввод символа с ожиданием
        CMP     R0,#33          ; Код Escape ?
        BEQ     101142$         ; Да
        EMT     42              ; Вывод символа
        SUB     #61,R0          ; Проверка нажатия <1>,<2>
        BMI     100756$
        CMP     R0,#1
        BHI     100756$
101136$:MOV     R0,@SP          ; Сохранение номера устройства
        BR      101004$
101142$:EMT     22
        BR      100750$
101146$:MOV     #14,R0          ; Очистка экрана
        EMT     42
        CALL    100254$         ; Восстановить пользовательский режим
        MOV     R2,R0           ; Занести номер пункта в буфер клавиатуры
        CALL    104160$
        MOVB    (SP)+,R0        ; Занести номер устройства в буфер клавиатуры
        CALL    104160$
        CLR     @#7072          ; Очистить признак вызова
        RETURN

; П/п вывода пунктов меню и запроса номера пункта
101202$:MOV     #-6,@#7150      ; Запрет вывода в верхнюю инф. строку
        MOV     R0,-(SP)
        CALL    101446$         ; Вывод пунктов меню
        ADD     (SP)+,PC
        BR      101432$
        BR      101224$
101224$:MOV     @R4,R0          ; Позиционирование курсора
        MOV     2(R0),R3        ; R3 = координаты
        DEC     R3
        CALL    101564$
        MOV     @R4,R3          ; R3 = адрес списка
101242$:EMT     22              ; Ввод символа с ожиданием
        TST     R0              ; Нажата УПР-@ ?
        BEQ     101436$
        CMP     R0,#33          ; Символ Escape ?
        BEQ     101306$
        SUB     #60,R0          ; Символы <0> - <9> ?
        BMI     101276$
        BEQ     101442$         ; Символ <0> ?
        CMP     R0,@R3          ; Не превышает номер последнего пункта ?
        BHI     101242$
        MOV     R0,R2           ; R2 = номер выбранного пункта
        BR      101404$
101276$:ADD     #43,R0          ; Нажата <Enter> (15(8)-60(8)+43(8)=0) ?
        BEQ     101442$
        BR      101404$
101306$:EMT     22
        SUB     #176,R0         ; Нажаты <ПОМ>,<ИСП> или стрелки
        BMI     101242$
        CMP     R0,#6
        BHIS    101242$
        ASL     R0
        ADD     R0,PC
        BR      101344$         ; <ПОМ>
        BR      101436$         ; <ИСП>
        BR      101362$         ; <Вверх>
        BR      101372$         ; <Вниз>
        BR      101436$         ; <Влево>
        BR      101436$         ; <Вправо>
101344$:MOV     #20,R3          ; Позиционирование курсора
        CALL    101564$
        EMT     44              ; Вывод краткого хелпинга
        .WORD   103406$         ; Адрес начала хелпинга
        BR      101224$
101362$:DEC     R2              ; Уменьшить номер пункта
        BGT     101404$
        MOV     @R3,R2          ; R2 = номер последнего пункта
        BR      101404$
101372$:INC     R2              ; Увеличить номер пункта
        CMP     R2,@R3          ; Превысил номер последнего пункта ?
        BLOS    101404$
        MOV     #1,R2
101404$:MOV     R2,@4(R3)       ; Запомнить номер текущего пункта
        DEC     @4(R3)
        CLR     R0
101416$:TST     (R4)+
        CLR     @#7150          ; Разрешение вывода в верхнюю инф. строку
        ASL     R2
        TST     R0
        RTS     R4
101432$:MOV     #10,R0
101436$:SUB     #5,R0
101442$:DEC     R0
        BR      101416$

; П/п вывода пунктов меню
101446$:CLR     @#23164         ; Запрет использования курсора
        MOV     @R4,R2
        MOV     (R2)+,-(SP)     ; Число пунктов меню
        MOV     (R2)+,R3        ; Координаты курсора
        ADD     R3,@SP
        MOV     @(R2)+,-(SP)    ; Номер текущего пункта меню
        ADD     R3,@SP
        TST     R0
        BNE     101502$
        CALL    101564$         ; Курсор в начало экрана
        EMT     44              ; Стирание правой части экрана
        .WORD   103364$
101502$:CALL    101564$
        CMP     R3,@SP          ; Номер выводимого пункта совпадает с текущим ?
        BNE     101516$
        EMT     44              ; Включить режим инверсии
        .WORD   102124$
101516$:MOV     (R2)+,R1        ; Вывод очередного пункта
        EMT     46
        CMP     R3,@SP          ; Номер выводимого пункта совпадает с текущим ?
        BNE     101532$
        EMT     44              ; Выключить режим инверсии
        .WORD   102127$
101532$:INC     R3              ; Переход к очередному пункту
        CMP     R3,2(SP)        ; Вывод завершен ?
        BLO     101502$         ; Нет
        CMP     (SP)+,(SP)+
        MOV     @R4,R0
        MOV     @4(R0),R2       ; R2 = номер текущего пункта
        INC     R2
        MOV     #2,@#23164      ; Разрешить использование курсора
        RETURN

; Следующие две п/п осуществляют позиционирование курсора
; В первой п/п координаты задаются в R3, во второй - в слове,
; которое следует за командой вызова п/п (JSR R4,101616$).
101564$:MOV     @#23150,R5      ; R5 = адрес таблицы видеопараметров
        MOVB    R3,R0           ; R0 = Y (строка)
        CALL    115720$         ; Позиционирование по строке
        SWAB    R3
        MOVB    R3,R0           ; R0 = X (столбец)
        CALL    115672$         ; Позиционирование по столбцу
        SWAB    R3
        INC     @#7066          ; Установить признак перемещения курсора
        RETURN
101616$:MOV     @#23150,R5      ; R5 = адрес таблицы видеопараметров
        MOVB    (R4)+,R0        ; R0 = Y (строка)
        CALL    115720$         ; Позиционирование по строке
        MOVB    (R4)+,R0        ; R0 = X (столбец)
        CALL    115672$         ; Позиционирование по столбцу
        INC     @#7066          ; Установить признак перемещения курсора
        RTS     R4

;       СПИСКИ  ПУНКТОВ  МЕНЮ
; Структура списка:
;    первое слово - число пунктов меню
;    второе слово - координаты курсора
;    третье слово - адрес ячейки, в которой сохраняется номер тек. пункта
;    далее        - адреса надписей пунктов меню

; Список главного меню УСТАНОВКА
101644$:.WORD   10
        .BYTE   4,0
        .WORD   7152,102165$,102211$,102235$,102261$
        .WORD   102305$,102331$,102355$,102401$

; Список меню СИСТЕМА КОМАНД
101672$:.WORD   2
        .BYTE   4,30
        .WORD   7154,102425$,102445$

; Список меню ФОРМАТ ЭКРАНА
101704$:.WORD   4
        .BYTE   4,30
        .WORD   7156,102465$,102477$,102511$,102523$

; Список меню ЦВЕТ СИМВОЛА
101722$:.WORD   10
        .BYTE   4,30
        .WORD   7160,102535$,102562$,102607$,102634$
        .WORD   102661$,102706$,102733$,102760$

; Список меню ЦВЕТ ЗНАКОМЕСТА
101750$:.WORD   10
        .BYTE   4,30
        .WORD   7162,102535$,102562$,102607$,102634$
        .WORD   102661$,102706$,102733$,102760$

; Список меню ЦВЕТ ЭКРАНА
101776$:.WORD   10
        .BYTE   4,30
        .WORD   7164,102535$,102562$,102607$,102634$
        .WORD   102661$,102706$,102733$,102760$

; Список меню ЦВЕТ КУРСОРА
102024$:.WORD   10
        .BYTE   4,30
        .WORD   7166,102535$,102562$,102607$,102634$
        .WORD   102661$,102706$,102733$,102760$

; Список меню РУЛОН
102052$:.WORD   3
        .BYTE   4,30
        .WORD   7170,103005$,103024$,103043$

; Список меню ТАЙМЕР
102066$:.WORD   2
        .BYTE   4,30
        .WORD   7172,103062$,103077$

; Список меню ЗАГРУЗКА
102100$:.WORD   7
        .BYTE   4,2
        .WORD   7174,103175$,103216$,103237$,103260$
        .WORD   103301$,103322$,103343$

; Esc-последовательность включения инверсии
102124$:.BYTE   33,243,0
; Esc-последовательность выключения инверсии
102127$:.BYTE   33,277,243,0
; Заголовок меню УСТАНОВКА
102133$:.BYTE   14,12,40,33,244
        .ASCII  /УСТАНОВКА РЕЖИМОВ/
        .BYTE   33,277,244,0

; Надписи меню УСТАНОВКА
102165$:.ASCIZ  /1 - система команд /
102211$:.ASCIZ  /2 - формат экрана  /
102235$:.ASCIZ  /3 - цвет символа   /
102261$:.ASCIZ  /4 - цвет знакоместа/
102305$:.ASCIZ  /5 - цвет экрана    /
102331$:.ASCIZ  /6 - цвет курсора   /
102355$:.ASCIZ  /7 - рулон          /
102401$:.ASCIZ  /8 - таймер         /

; Надписи меню СИСТЕМА КОМАНД
102425$:.ASCIZ  /1 - VT-52      /
102445$:.ASCIZ  /2 - 15ИЭ-00-013/

; Надписи меню ФОРМАТ ЭКРАНА
102465$:.ASCIZ  /1 - 80/<220>/24/
102477$:.ASCIZ  /2 - 40/<220>/24/
102511$:.ASCIZ  /3 - 20/<220>/24/
102523$:.ASCIZ  /4 - 10/<220>/24/

; Надписи меню ЦВЕТ СИМВОЛА, ЦВЕТ ЗНАКОМЕСТА, ЦВЕТ ЭКРАНА, ЦВЕТ КУРСОРА
102535$:.BYTE   '1,40,'-,40,33,240,'0,33,241,'0
        .BYTE   237,237,237,237,33,277,240,33,277,241,0
102562$:.BYTE   '2,40,'-,40,33,240,'1,33,241,'1
        .BYTE   237,237,237,237,33,277,240,33,277,241,0
102607$:.BYTE   '3,40,'-,40,33,240,'2,33,241,'2
        .BYTE   237,237,237,237,33,277,240,33,277,241,0
102634$:.BYTE   '4,40,'-,40,33,240,'3,33,241,'3
        .BYTE   237,237,237,237,33,277,240,33,277,241,0
102661$:.BYTE   '5,40,'-,40,33,240,'4,33,241,'4
        .BYTE   237,237,237,237,33,277,240,33,277,241,0
102706$:.BYTE   '6,40,'-,40,33,240,'5,33,241,'5
        .BYTE   237,237,237,237,33,277,240,33,277,241,0
102733$:.BYTE   '7,40,'-,40,33,240,'6,33,241,'6
        .BYTE   237,237,237,237,33,277,240,33,277,241,0
102760$:.BYTE   '8,40,'-,40,33,240,'7,33,241,'7
        .BYTE   237,237,237,237,33,277,240,33,277,241,0

; Надписи меню РУЛОН
103005$:.ASCIZ  /1 - плавный   /
103024$:.ASCIZ  /2 - дискретный/
103043$:.ASCIZ  /3 - выключен  /

; Надписи меню ТАЙМЕР
103062$:.ASCIZ  /1 - включен /
103077$:.ASCIZ  /2 - выключен/

; Заголовок меню ЗАГРУЗКА
103114$:.ASCII  <33><244>/ЗАГРУЗКА/<33><277><244>
        .BYTE   12,12
        .REPT   10
        .BYTE   31
        .ENDR
        .ASCII  /(0/<221>/3): 0/<12>
        .REPT   10
        .BYTE   32
        .ENDR
        .ASCIZ  /(1,2): 1/

; Надписи меню ЗАГРУЗКА
103175$:.ASCIZ  /1 - диск        /
103216$:.ASCIZ  /2 - кассета ПЗУ /
103237$:.ASCIZ  /3 - сеть        /
103260$:.ASCIZ  /4 - стык С2     /
103301$:.ASCIZ  /5 - магнитофон  /
103322$:.ASCIZ  /6 - отладка     /
103343$:.ASCIZ  /7 - тестирование/

; Стирание правой части экрана
103364$:.REPT   10
        .BYTE   37,35
        .ENDR
        .BYTE   37,0

; Краткий хелпинг
103406$:.BYTE   61,221,71,54,200,54,201
        .ASCII  / - выбор элемента/<15><12>
        .BYTE   40,40,203
        .ASCII  /     - следующий уровень/<15><12>
        .BYTE   40,40,202
        .ASCII  /     - предыдущий уровень/<15><12>
        .ASCIZ  /0,/<224>/,ИСП - выход/
        .EVEN