IPB

Здравствуйте, гость ( Вход | Регистрация )

> ПЗУ УКНЦ, дизассемблирование от Alex_K (Alexey Kisly)
SuperMax
сообщение 29.1.2021, 1:17
Сообщение #1


Администратор
*****

Группа: Root Admin
Сообщений: 6 286
Регистрация: 7.1.2006
Из: Красноярск
Пользователь №: 1



Код

        .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





--------------------
Живы будем - Не помрем !
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 27.4.2024, 22:01