![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
SuperMax |
![]()
Сообщение
#1
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 342 Регистрация: 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 -------------------- Живы будем - Не помрем !
|
![]() ![]() |
SuperMax |
![]()
Сообщение
#2
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 342 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 ![]() |
Код ; ********************************************************* ; * * ; * ДРАЙВЕР КЛАВИАТУРЫ * ; * * ; * Адреса 103554 - 107743 * ; * * ; ********************************************************* ; П/п начальной инициализации 103554$:JSR R5,173730$ ; Очистка ОЗУ .WORD 7176,1762 ; Начальный адрес - 7176, число слов - 1762 103564$:TST @#177702 ; Сбросить готовность рег.сост. клавиатуры MOV #175412$,@#300 ; Вектор прерываний от клавиатуры MOV #200,@#302 MOV #100,@#177700 ; Разрешить прерывания от клавиатуры MOV #175540$,@#324 ; Вектор прерываний от канала 0 (источник) MOV #200,@#326 BIS #1,@#177076 ; Разрешить прерывания от канала 0 (источник) CALL 104064$ ; Настройка начальных адресов буферов MOV #11140,@#13140 ; Нач. адрес буфера клавиш К1 - К25 MOV #7234,@#7214 ; Текущая таблица - табл. основного регистра MOV #7234,@#7216 MOVB #40,@#7221 ; Заглавные буквы MOVB #16,@#7222 ; Латинский регистр MOVB #17,@#7223 ; Заполнение таблиц раскладки клавиатуры MOV #105520$,R1 ; R1 = нач. адрес данных для таблиц раскладки MOV #7234,R0 ; R0 = нач. адрес таблиц раскладки MOV #5,R4 ; R4 = число таблиц раскладки 103720$:MOV #130,R2 ; R2 = число элементов таблицы MOV R0,R3 ; R3 = адрес текущей заполняемой таблицы 103726$:MOVB (R1)+,(R3)+ ; Пересылка CLRB (R3)+ SOB R2,103726$ MOV #400,R2 ; R2 = номер первой регистровой клавиши 103740$:MOVB (R1)+,R3 BEQ 103762$ ; Это строка или конец данных для тек. табл.? BMI 103756$ ; Переход к следующей регистровой комбинации ? DEC R3 ; Регистровая клавиша (в R3 - смещение) ASL R3 ADD R0,R3 MOV R2,@R3 103756$:INC R2 BR 103740$ 103762$:MOVB (R1)+,R3 BEQ 104004$ ; Это конец таблицы ? DEC R3 ; Строка (адрес в R1,смещение в табл. в R3) ASL R3 ADD R0,R3 MOV R1,@R3 103776$:TSTB (R1)+ ; Прогон строки BNE 103776$ BR 103762$ 104004$:ADD #260,R0 ; Переход к следующей таблице SOB R4,103720$ CALL 113670$ ; Установить систему команд VT-52 MOVB #2,@#7226 ; Интервал автоповтора RETURN ; П/п ПАУЗА (ожидание нажатия любой клавиши) 104026$:CLR @#177700 ; Запретить прерывания от клавиатуры 104032$:TSTB @#177700 ; Ожидание нажатия или отжатия клавиши BPL 104032$ TSTB @#177702 ; Клавиша отжата ? BMI 104032$ ; Да MOV #100,@#177700 ; Разрешить прерывания от клавиатуры 104054$:JSR R5,173730$ ; Очистка буферов клавиатуры .WORD 2240,14 ; Установка указателей на начало буферов 104064$:MOV #2260,@#7176 MOV #2260,@#7200 MOV #2240,@#7202 MOV #2240,@#7204 MOV #2200,@#7206 MOV #2200,@#7210 RETURN ; П/п обслуживания запросов EMT 22 и EMT 24 (ввод символа с ожиданием) 104132$:TRAP 2 ; Считывание символа с буфера в регистр R0 ADD @#7230,PC ; Символ есть в буфере ? BR 104152$ ; Да CLR @#7230 TRAP 0 ; Запуск диспетчера процессов BR 104132$ 104152$:MOV R0,2(SP) RETURN ; П/п заноса ASCII-символов и адресов строк в буфер 104160$:MOV R0,@7210 ; Занести символ в буфер ADD #2,@#7210 ; Продвинуть указатель BIC #40,@#7210 ; Корректировка указателя (циклический буфер) ADD @#7230,PC RETURN 104206$:TRAP 2 RETURN ; *** ОСНОВНАЯ П/П ОБСЛУЖИВАНИЯ КЛАВИАТУРЫ *** ; Точка выхода из п/п обслуживания клавиатуры 104212$:CLR @#7060 ; Очистить флаг вызова п/п CLRB @#7227 ; Очистить ячейку значения автоповтора 104222$:ADD @#7230,PC RETURN 104230$:TRAP 2 RETURN 104234$:TSTB @7202 ; Есть скэн-коды в буфере автоповтора ? BEQ 104212$ ; Нет TSTB @#7227 ; Истекло время автоповтора ? BNE 104222$ ; Нет MOV @#7202,R3 ; R3 = указатель на буфер автоповтора(чтение) 104254$:MOVB (R3)+,R0 ; Прочесть очередной скэн-код BNE 104336$ ; Он существует 104260$:BIC #20,R3 ; Подправить значение указателя CMP R3,@#7204 ; Буфер просмотрен до конца ? BNE 104254$ ; Нет MOVB @#7226,@#7227 DEC @#7060 BR 104222$ ; Точка входа в п/п обслуживания клавиатуры из диспетчера процессов 104306$:MOV @#7176,R1 ; R1 = указатель на буфер скэн-кодов MOVB @R1,R0 ; Прочесть скэн-код BEQ 104234$ ; Скэн-кода нет DEC @#7060 ; Уменьшить счетчик (флаг вызова) CLRB (R1)+ ; Вычеркнуть скэн-код из буфера BIC #10,R1 ; Подправить значение указателя MOV R1,@#7176 CLR R3 ; В данном случае R3 является индикатором ; того, что скэн-код был прочитан из основ- ; ного буфера (R3=0) или из буфера авто- ; повтора (R3<>0). 104336$:MOV R0,R2 ; R2 = скэн-код BMI 104516$ ; Это скэн-код отжатия ASHC #74,R0 ; Извлечение ASCII-кода MOVB 105510$(R0),R1 MOV R2,R0 SUB R1,R0 ASL R0 ADD @#7214,R0 MOV @R0,R0 MOV R0,R1 SWAB R1 BEQ 104410$ ; Это одиночный ASCII-код ASRB R1 BNE 104434$ ; Это адрес ASCIZ-строки MOVB R0,R0 ; Переход на обслуживание регистровых клавиш ASL R0 JMP @104714$(R0) 104410$:TST @#7232 ; Разрешена передача одиночных символов ? BNE 104510$ ; Нет TSTB R0 ; Символ в диапазоне 128-255 ? BMI 104434$ ; Да CMP R0,#100 ; Это символы @,A-Z,[,\,],_ ? BLO 104434$ ; Нет BISB @#7220,R0 ; Установка заглавные/строчные буквы 104434$:TST R3 ; Это символ из буфера автоповтора ? BNE 104472$ ; Да TSTB @7202 ; Буфер автоповтора пуст ? BNE 104454$ ; Нет MOVB #31,@#7227 ; Задать время между нажатием и автоповтором 104454$:MOVB R2,@7204 ; Положить скэн-код в буфер автоповтора INC @#7204 ; Подправить значение указателя BIC #20,@#7204 104472$:MOV @#7210,R1 ; R1 = указатель на буфер ASCII-символов MOV R0,(R1)+ ; Положить символ(адрес строки) в буфер BIC #40,R1 MOV R1,@#7210 104510$:TST R3 ; Это был символ из буфера автоповтора ? BNE 104260$ ; Да 104514$:BR 104306$ 104516$:MOV @#7212,R0 ; R0 = ожидаемый код отжатия рег. клавиши BEQ 104614$ ; Регистровая клавиша не была нажата CMPB R2,R0 ; Коды отжатия совпадают ? BEQ 104540$ ; Да 104530$:SWAB R0 BEQ 104530$ CMPB R2,R0 BNE 104614$ ; Обработка кода отжатия регистровой клавиши 104540$:CLRB R0 ; Очистить байт кода отжатия SWAB R0 MOV R0,@#7212 CLR R0 CMPB R2,#205 ; Была отжата клавиша НР (Shift) ? BEQ 104574$ ; Да MOVB @#7224,R0 ; R0 = ASCII-код, посылаемый при отжатии АЛФ BEQ 104600$ ; Его нет CLRB @#7224 BR 104600$ 104574$:SWAB @#7220 ; Переменить состояние заглавные/строчные 104600$:MOV @#7216,@#7214 ; Восстановить пред. табл. раскл. клавиатуры TST R0 ; Есть данные для передачи при отжатии АЛФ ? BNE 104472$ ; Да BR 104306$ ; Обработка кода отжатия алфавитно-цифровой клавиши 104614$:BIC #177760,R2 ; Оставить биты кода отжатия MOV @#7202,R1 ; R1 = указатель на буфер автоповтора 104624$:MOVB (R1)+,R0 ; Прочесть скэн-код из буфера автоповтора BEQ 104644$ ; Он отсутствует BIC #177760,R0 ; Оставить биты кода отжатия CMP R0,R2 ; Эти коды совпадают ? BEQ 104700$ ; Да MOV R2,R3 BEQ 104306$ 104644$:BIC #20,R1 TST R3 BNE 104660$ MOV R1,@#7202 104660$:CMP R1,@#7204 ; Буфер просмотрен до конца ? BNE 104624$ ; Нет MOVB #2,@#7226 ; Установить нормальную скорость автоповтора 104674$:JMP 104306$ 104700$:CLRB -1(R1) ; Выбросить скэн-код из буфера автоповтора CLR R2 ; R2 = 0(признак того, что скэн-код обнаружен) TST R3 BNE 104674$ BR 104644$ ; Адреса п/п обслуживания регистровых комбинаций 104714$:.WORD 104766$ ; Нажатие НР (Shift) .WORD 105044$ ; Нажатие АЛФ .WORD 105116$ ; Нажатие ГРАФ (Graph) .WORD 105150$ ; Нажатие УПР (Ctrl) .WORD 105160$ ; Нажатие ФИКС (Lock) .WORD 104734$ ; Установка режимов (УСТ) .WORD 105234$ ; Режим ИСУ (УПР+ПОМ) .WORD 104746$ ; Печать экрана (УПР+ИСП) ; П/п обслуживания нажатия УСТ 104734$:CLR @#7042 ; Адресовать ASCII-коды клавиатуры запросу EMT INC @#7070 ; Установить флаг вызова меню УСТАНОВКА BR 104514$ ; П/п обслуживания нажатия УПР+ИСП (печать экрана) 104746$:CALL 135704$ ; Печать экрана MOV @#7216,@#7214 CLR @#7212 BR 104514$ ; П/п обслуживания нажатия НР 104766$:TSTB @7202 ; Нажата какая-нибудь алф.-циф. клавиша ? BEQ 105004$ ; Нет MOV #401,7226 ; Установить повышенную скорость автоповтора BR 104514$ 105004$:MOV #205,R1 ; R1 = код отжатия НР MOV #7514,@#7214 ; Текущая табл.-таблица нижнего регистра 105016$:SWAB @#7220 ; Переключить режим заглавные/строчные буквы 105022$:SWAB @#7212 MOVB R1,@#7212 CMPB @#7213,#207 ; Была нажата клавиша ФИКС ? BEQ 105202$ ; Да BR 104514$ ; П/п обслуживания нажатия АЛФ 105044$:MOVB @#7222,R0 ; R0 = 16(8) или 17(8) MOVB @#7223,@#7224 SWAB @#7212 MOVB #206,@#7212 ; Код отжатия клавиши АЛФ CMPB @#7213,#207 ; Была нажата клавиша ФИКС ? BNE 105112$ ; Нет CLRB @#7224 ; При отжатии АЛФ не передавать ASCII-кода MOV @#7216,@#7214 105112$:JMP 104472$ ; П/п обслуживания нажатия ГРАФ 105116$:MOV #7774,@#7214 ; Текущая табл.-таблица ГРАФ-регистра 105124$:MOV #206,R1 ; R1 = код отжатия ГРАФ и УПР 105130$:CMP @#7214,@#7216 ; Адрес текущей табл. равен адресу предыдущей ? BNE 105022$ ; Нет MOV #7234,@#7214 ; Текущая таблица-таблица основного регистра BR 105022$ ; П/п обслуживания нажатия УПР 105150$:MOV #10254,@#7214 ; Текущая таблица-таблица УПР-регистра BR 105124$ ; П/п обслуживания нажатия ФИКС 105160$:MOV #207,R1 ; R1 = код отжатия ФИКС TST @#7212 ; Нажата регистровая клавиша ? BNE 105202$ ; Да MOV #10534,@#7214 ; Текущая таблица-таблица ФИКС-регистра BR 105130$ 105202$:CMP @#7214,#7514 ; Нажата НР ? BEQ 105016$ ; Да TSTB @#7224 ; Нажата АЛФ ? BEQ 105224$ ; Нет CLRB @#7224 ; При отжатии АЛФ не передавать ASCII-кода 105224$:MOV @#7214,@#7216 BR 105022$ ; П/п обслуживания нажатия УПР+ПОМ (ИСУ on/off) 105234$:COMB @#22552 ; Изменить режим ИСУ/не ИСУ BEQ 105250$ ; Режим ИСУ выключен EMT 52 ; Высветить надпись "ИСУ" .WORD 107641$ BR 105254$ 105250$:EMT 52 ; Стереть надпись "ИСУ" .WORD 107632$ 105254$:JMP 104306$ ; П/п обработки управляющего символа Ctrl+N (переключение на русский алфавит) 105260$:MOV @#22556,R0 ; R0 = текущее состояние алфавита MOV #200,@#22556 ; Установить русский алфавит MOV #16*400+17,@#7222;Последовательность посылки кодов ; при нажатии и отжатии АЛФ EMT 52 ; Высветить надпись "РУС" .WORD 107731$ BR 105330$ ; П/п обработки управляющего символа Ctrl+O (переключение на латинский алфавит) 105306$:MOV @#22556,R0 CLR @#22556 ; Установить латинский алфавит MOV #17*400+16,@#7222 EMT 52 ; Высветить надпись "ЛАТ" .WORD 107736$ 105330$:CMP R0,@#22556 ; Предыдущий и текущий режимы алфавита равны ? BEQ 105342$ ; Да SWAB @#7220 ; Переменить верхний/нижний регистр 105342$:RETURN 105344$:RETURN ; П/п устанавливает специальные режимы клавиатуры (системный, ДКЛ) 105346$:MOV (R5)+,R0 ; R0 = адрес новых кодов клавиатуры MOV (R5)+,R1 ; R1 = адрес буфера сохранения TST @R1 ; Режим уже был установлен ? BNE 105376$ ; Да INC (R1)+ ; Установить флаг спецрежима BR 105372$ 105362$:MOV 7232(R2),(R1)+ ; Сохранить значение клавиши MOV (R0)+,7232(R2) ; Занести новое значение 105372$:MOV (R0)+,R2 ; R2 = адрес клавиши BNE 105362$ ; Еще не конец таблицы 105376$:RTS R5 ; П/п восстанавливает предыдущий режим клавиатуры 105400$:MOV (R5)+,R0 ; R0 = адрес новых кодов клавиатуры MOV (R5)+,R1 ; R1 = адрес буфера сохранения TST @R1 ; Спецрежим установлен ? BEQ 105426$ ; Нет CLR (R1)+ ; Сбросить флаг спецрежима BR 105422$ 105414$:MOV (R1)+,7232(R2) ; Восстановить значение клавиши TST (R0)+ 105422$:MOV (R0)+,R2 ; R2 = адрес клавиши BNE 105414$ ; Еще не конец таблицы 105426$:RTS R5 ; П/п переключения клавиатуры в новый режим. Если текущий режим является ; не системным, то переключение производится сразу, иначе (системный режим) ; производится проверка адресов клавиш и для клавиш, задействованных ; в системном режиме, информация сохраняется в буфере, откуда перекачивается ; в таблицу раскладки при выходе из системного режима. 105430$:MOV (R5)+,R0 ; R0 = адрес новой таблицы BR 105502$ 105434$:TST @#11054 ; Установлен системный режим ? BEQ 105476$ ; Нет MOV #107310$-4,R2 ; R2 = адрес списка системных клавиш 105446$:ADD #4,R2 ; Перейти к следущему адресу MOV @R2,R3 ; R3 = адрес клавиши BEQ 105476$ ; Конец списка системных клавиш CMP R3,R1 ; Адреса совпадают ? BNE 105446$ ; Нет SUB #107310$,R2 ; Получение адреса клавиши в буфере сохранения ASR R2 MOV (R0)+,11056(R2); Занести код в буфер сохранения BR 105502$ 105476$:MOV (R0)+,7232(R1) ; Занести код в таблицу раскладки клавиатуры 105502$:MOV (R0)+,R1 ; R1 = адрес клавиши BNE 105434$ ; Еще не конец таблицы RTS R5 ; Корректирующие коды, использующиеся при вычислении адреса в таблице раскладки 105510$:.BYTE 5,12,17,24,31,36,43,50 ; НАЧАЛЬНЫЕ ДАННЫЕ ДЛЯ ТАБЛИЦ РАСКЛАДКИ КЛАВИАТУРЫ ; Структура : ; первые 88 байт - ASCII-коды для клавиш ; далее - смещения для регистровых клавиш (конец - байт 0) ; строки символов : - смещение в таблице (байт 0 - конец списка) ; - ASCIZ-строка ; байт 0 - конец описания раскладки ; Раскладка основного регистра 105520$:.BYTE 54,33,73,0,0,0,64,0,0,67,70,55,11,112,61,62,63,105,65,66 .BYTE 133,135,0,0,106,103,125,113,120,116,107,114,104,0,0,121 .BYTE 131,127,101,111,122,117,102,100,0,0,0,136,123,115,40,124 .BYTE 130,0,54,67,60,61,64,53,177,0,0,56,134,126,70,56,62,65,0 .BYTE 0,15,0,137,110,132,71,15,63,66,14,12,57,72,55,60,71 ; - список регистровых клавиш .BYTE 55,56,43,30,57,110,0 ; - строки символов .BYTE 107 .ASCIZ <33><177> .BYTE 123 .ASCIZ <33>/~/ .BYTE 4,0,5,0,6,0,10,0,11,0,0 ; Раскладка НР-регистра 105702$:.BYTE 54,33,53,0,0,0,44,0,0,47,50,57,11,112,41,42,43,105,45,46 .BYTE 133,135,0,0,106,103,125,113,120,116,107,114,104,0,0,121 .BYTE 131,127,101,111,122,117,102,100,0,0,0,136,123,115,40,124 .BYTE 130,0,74,67,60,61,64,52,177,0,0,76,134,126,70,56,62,65,0 .BYTE 0,12,0,137,110,132,71,15,63,66,14,12,77,52,75,60,51 ; - список регистровых клавиш .BYTE 55,56,43,30,57,110,0 ; - строки символов .BYTE 107 .ASCIZ <33><177> .BYTE 123 .ASCIZ <33>/~/ .BYTE 4,0,5,0,6,0,10,0,11,0,0 ; Раскладка ГРАФ-регистра 106064$:.BYTE 54,33,73,0,0,0,64,0,0,67,70,55,11,252,61,62,63,245,65,66 .BYTE 273,275,0,0,246,243,265,253,260,256,247,254,244,0,0,261 .BYTE 271,267,241,251,262,257,242,240,0,0,0,276,263,255,40,264 .BYTE 270,0,54,67,60,61,64,53,177,0,0,56,274,266,70,56,62,65,0 .BYTE 0,0,0,277,250,272,71,15,63,66,14,12,57,72,55,60,71 ; - список регистровых клавиш .BYTE 55,56,43,30,57,110,0 ; - строки символов .BYTE 66 .ASCIZ <33>/D/ .BYTE 76 .ASCIZ <33>/C/ .BYTE 112 .ASCIZ <33>/A/ .BYTE 77 .ASCIZ <33>/B/ .BYTE 111 .ASCIZ <15><12> .BYTE 4,0,5,0,6,0,10,0,11,0,0 ; Раскладка УПР-регистра 106262$:.BYTE 0,33,73,0,0,0,64,0,0,67,70,0,11,12,61,62,63,5,65,66,33,35 .BYTE 0,0,6,3,25,13,20,16,7,14,4,0,0,21,31,27,1,11,22,17,2,0,0,0,0 .BYTE 36,23,15,40,24,30,0,54,67,60,61,64,0,177,0,0,56,34,26,70,56 .BYTE 62,65,0,0,0,0,37,10,32,71,15,63,66,14,12,57,72,55,60,71 ; - список регистровых клавиш .BYTE 55,56,43,30,57,110,123,107,0 ; - строки символов .BYTE 74 .ASCIZ <33>/P/ .BYTE 14 .ASCIZ <33>/Q/ .BYTE 1 .ASCIZ <33>/R/ .BYTE 4,0,5,0,6,0,10,0,11,0,0 ; Раскладка ФИКС-регистра 106452$:.BYTE 54,33,73,0,0,0,64,0,0,67,70,55,11,112,61,62,63,105,65,66 .BYTE 133,135,0,0,106,103,125,113,120,116,107,114,104,0,0,121 .BYTE 131,127,101,111,122,117,102,100,0,0,0,136,123,115,40,124 .BYTE 130,0,54,67,60,61,64,53,177,0,0,56,134,126,70,56,62,65,0 .BYTE 0,0,0,137,110,132,71,15,63,66,14,12,57,72,55,60,71 ; - список регистровых клавиш .BYTE 55,56,43,30,57,110,0 ; - строки символов .BYTE 107 .ASCIZ <33><177> .BYTE 123 .ASCIZ <33>/~/ .BYTE 4,0,5,0,6,0,10,0,11,0,0 ; Данные для пользовательского режима (VT-52) 106634$:.WORD 224,106752$,176,106755$,154,106760$,174,106763$ .WORD 504,106752$,456,106755$,434,106760$,454,106763$ .WORD 1244,106752$,1216,106771$,1174,106760$,1214,106766$ .WORD 1524,106752$,1476,106755$,1454,106760$,1474,106763$ .WORD 244,106774$,524,106771$,1242,106777$,0 106752$:.ASCIZ <33>/A/ 106755$:.ASCIZ <33>/B/ 106760$:.ASCIZ <33>/D/ 106763$:.ASCIZ <33>/C/ 106766$:.ASCIZ <33>/K/ 106771$:.ASCIZ <33>/J/ 106774$:.ASCIZ <33>/H/ 106777$:.ASCIZ <15><12> ; Данные для пользовательского режима (15ИЭ-00-013) 107002$:.WORD 224,34,176,35,154,32,174,31,504,22,456,26,434,24,454,23 .WORD 1244,34,1216,37,1174,32,1214,13,1524,34,1476,35,1454,32,1474,31 .WORD 244,10,524,14,1242,25,0 ; Данные для ДКЛ-режима 107120$:.WORD 236,107216$,210,107222$,162,107226$,164,107232$ .WORD 212,107236$,240,107242$,166,107246$,214,107252$ .WORD 242,107256$,160,107262$,206,107266$,234,107272$ .WORD 170,107276$,30,107301$,2,107304$,0 107216$:.ASCIZ <33>/?M/ 107222$:.ASCIZ <33>/?n/ 107226$:.ASCIZ <33>/?p/ 107232$:.ASCIZ <33>/?q/ 107236$:.ASCIZ <33>/?r/ 107242$:.ASCIZ <33>/?s/ 107246$:.ASCIZ <33>/?t/ 107252$:.ASCIZ <33>/?u/ 107256$:.ASCIZ <33>/?v/ 107262$:.ASCIZ <33>/?w/ 107266$:.ASCIZ <33>/?x/ 107272$:.ASCIZ <33>/?y/ 107276$:.ASCIZ <33>/P/ 107301$:.ASCIZ <33>/Q/ 107304$:.ASCIZ <33>/R/ .EVEN ; Данные для системного режима 107310$:.WORD 162,60,164,61,212,62,240,63,166,64 .WORD 214,65,242,66,160,67,206,70,234,71 .WORD 222,107462$,236,107464$,246,107466$,216,107471$ .WORD 224,107474$,176,107477$,154,107502$,174,107505$ .WORD 504,107510$,456,107513$,434,107516$,454,107521$ .WORD 146,107460$,172,107456$,244,14,0 107456$:.BYTE 177,0 107460$:.BYTE 40,0 107462$:.BYTE 15,0 107464$:.BYTE 15,0 107466$:.ASCIZ <33>/~/ 107471$:.ASCIZ <33><177> 107474$:.ASCIZ <33><200> 107477$:.ASCIZ <33><201> 107502$:.ASCIZ <33><202> 107505$:.ASCIZ <33><203> 107510$:.ASCIZ <33><204> 107513$:.ASCIZ <33><205> 107516$:.ASCIZ <33><206> 107521$:.ASCIZ <33><207> ; Надписи для верхней информационной строки 107524$:.ASCIZ <0>/ / 107533$:.ASCIZ <0>/ УСТ/ 107542$:.ASCIZ <5>/ / 107551$:.ASCIZ <5>/ ПМ / 107560$:.ASCIZ <5>/ ЦМ / 107567$:.ASCIZ <12>/ / 107576$:.ASCIZ <12>/ ДКЛ / 107605$:.ASCIZ <17>/ / 107614$:.ASCIZ <17>/ ИНВ / 107623$:.ASCIZ <17>/ПОДЧ / 107632$:.ASCIZ <24>/ / 107641$:.ASCIZ <24>/ ИСУ / 107650$:.ASCIZ <31>/ / 107657$:.ASCIZ <31>/ НР / 107666$:.ASCIZ <31>/ СУ / 107675$:.ASCIZ <31>/ГРАФ / 107704$:.ASCIZ <31>/ФИКС / 107713$:.ASCIZ <36>/ЗАГЛ / 107722$:.ASCIZ <36>/СТР / 107731$:.ASCIZ <43>/РУС/ 107736$:.ASCIZ <43>/ЛАТ/ .EVEN -------------------- Живы будем - Не помрем !
|
![]() ![]() |
Текстовая версия | Сейчас: 4.7.2025, 12:25 |