Uknc ROM disasm - 3
From Felixl.com
Jump to navigationJump to search; ***************************************************************** ; * * ; * ДРАЙВЕР ТЕКСТОВОГО ТЕРМИНАЛА * ; * * ; * Адреса 107744 - 125027 * ; * * ; ***************************************************************** ; П/п начальной инициализации 107744$:JSR R5,173730$ ; Очистка ОЗУ .WORD 13142,4017 ; Начальный адрес - 13142, число слов - 4017 107754$:MOV #0,@#177026 ; Разрешить все планы видеопамяти CLR @#177020 ; Очистка регистров цвета кода фона CLR @#177022 CLR R0 ; Цикл очистки видеопамяти MOV #177010,R1 MOV #100000,@R1 MOV #100000,R2 MOV #177024,R3 110014$:MOV R0,@R3 INC @R1 SOB R2,110014$ MOV #175700$,@#320 ; Адрес п/п обработки прерывания канала 0,пр. MOV #200,@#322 BIS #1,@#177066 ; Разрешить прерывания канала 0, приемник CALL 110266$ ; Запрограммировать таблицу видеострок MOV #117430$-13,R0 ; Настройка таблицы адресов рисунков символов MOV #14142,R1 ; на область ПЗУ (адреса 117430-125027) MOV #400,R2 MOV #13,R3 110070$:ADD R3,R0 MOV R0,(R1)+ SOB R2,110070$ MOV #112462$,R0 ; Настройка таблицы адресов п/п управляющих и BR 110110$ ; Esc-последовательностей 110104$:MOV (R0)+,13142(R1) 110110$:MOV (R0)+,R1 BNE 110104$ MOV #2000,@#22542 ; Настройка указателей на буферы MOV #2000,@#22544 MOVB #14,@#2000 ; Положить символ Ctrl+L в буфер (CLS) JSR R5,110656$ ; Загрузка в ОЗУ ТВ для верхней строки .WORD 112040$,22560 JSR R5,110656$ ; Загрузка в ОЗУ ТВ для экрана пользователя .WORD 112142$,22656 JSR R5,110656$ ; Загрузка в ОЗУ ТВ для экрана установки .WORD 112252$,22754 JSR R5,110656$ ; Загрузка в ОЗУ ТВ для нижней строки .WORD 112360$,23052 MOV #2270,@#272 ; Настройка первой видеостроки 110204$:MOV #22656,R5 ; R5 = адрес ТВ для экрана пользователя 110210$:MOV 62(R5),@#23160 ; Указатель на регистр управления отображением ; экраном пользователя MOV 72(R5),@#23164 ; Режим использования курсора INC @#7066 ; Увел. счетчик симв. в буфере (для вывода CLS) 110230$:MOV R5,@#23150 ; Сделать текущей ТВ, адрес которой в R5 MOV 34(R5),@#177016 ; Настройка регистра кода цвета точки MOV 40(R5),@#177020 ; Настройка регистра кода цвета фона MOV 40(R5),@#177022 MOVB 70(R5),@64(R5) ; Установить цвет курсора RETURN ; П/п программирования таблицы видеострок 110266$:MOV #1131,R2 ; Число программируемых видеострок (ВС) MOV #7034,R1 ; Адрес конца MOV R1,@#7036 110302$:MOV R1,R0 ; Цикл начального заполнения таблицы MOV R0,-(R1) TST -(R1) SOB R2,110302$ JSR R5,110550$ ; Заполнение зоны адресов для ВС вехней строки .WORD 175700,2410,12,50 MOV R0,@#2464 MOV #177460,@#2474 JSR R5,110550$ ; Заполнение зоны адресов для ВС польз. экрана .WORD 100000,2500,436,120 MOV #177460,@#4674 JSR R5,110550$ ; Заполнение зоны адресов для ВС УСТ экрана .WORD 177460,4704,25,0 JSR R5,110550$ .WORD 154540,5030,334,50 JSR R5,110550$ .WORD 177460,6610,26,0 MOV #177460,@#6744 JSR R5,110550$ ; Заполнение зоны адресов для ВС нижней строки .WORD 176570,6754,13,50 JSR R5,110550$ .WORD 177460,7030,2,0 MOV #2,R0 ; Выделение регистров управления отображением, MOV #6,R1 ; цветом и подправка структуры таблицы BIS R0,@#2366 BIS R1,@#2376 BIS R0,@#2456 BIS R1,@#2466 MOV #2500,@#4666 BIS R1,@#4676 MOV #6742,@#4536 MOV #6742,@#6736 BIS R1,@#6746 RETURN ; П/п заполнения зоны адресов для ВС ; 1 параметр - начальный видеоадрес ; 2 параметр - начальный адрес таблицы ВС ; 3 параметр - размер таблицы (число видеострок) ; 4 параметр - длина видеостроки 110550$:MOV (R5)+,R0 MOV (R5)+,R1 MOV (R5)+,R2 MOV (R5)+,R3 110560$:MOV R0,(R1)+ ADD R3,R0 TST (R1)+ SOB R2,110560$ RTS R5 ; П/п установки таблицы ВС на начало видеопамяти 110572$:ADD 74(R5),PC ; Рулон присутствует ? BR 110654$ ; Нет CLR @#23170 ; Число строк для скроллинга = 0 MOV @#2476,R0 ; Корректировка таблицы ADD #2040,R0 CMP R0,#4670 BLOS 110626$ SUB #2170,R0 110626$:MOV R0,-2(R0) MOV #6742,@#4536 ; Установка начальных значений MOV #2500,@#2476 MOV #2500,30(R5) 110654$:RETURN ; П/п формирования таблицы видеопараметров 110656$:MOV (R5)+,R0 ; R0 = адрес таблицы в ПЗУ MOV @R5,R1 ; R1 = адрес таблицы в ОЗУ JSR R5,110716$ ; Перекачка таблицы в ОЗУ MOV (R5)+,R1 MOV (R0)+,@64(R1) ; Заполнение регистра управления отображением MOV (R0)+,@54(R1) MOV (R0)+,@50(R1) ; Заполнение регистра управления цветом MOV (R0)+,@52(R1) RTS R5 ; П/п перекачки 110712$:MOV (R5)+,R0 MOV (R5)+,R1 110716$:MOV (R0)+,R2 ; R2 = число слов 110720$:MOV (R0)+,(R1)+ SOB R2,110720$ RTS R5 ; *** ОСНОВНАЯ ПОДПРОГРАММА УПРАВЛЕНИЯ ТЕКСТОВЫМ ТЕРМИНАЛОМ *** 110726$:MOV #174164$,-(SP) ; Занести в стек адреса возвратов MOV #111126$,-(SP) MOV SP,@#23152 MOV @#23154,SP MOV @#23150,R5 ; R5 = адрес текущей ТВ INC @#7066 ; Установить флаг вызова п/п перекл. курсора 110756$:INC @#7064 ; П/п чтения очередного символа, посланного по каналу 0 110762$:DEC @#7064 ; Уменьшить счетчик символов BEQ 111050$ ; Символов нет MOVB @22542,R0 ; Прочесть символ INC @#22542 ; Подкорректировать указатель BIC #200,@#22542 BIC #177400,R0 CMP R0,#40 ; Это управляющие коды ? BHIS 111024$ ; Нет ADD @#23174,PC ; Разрешено чтение управляющих символов ? 111024$:RETURN ; Да 111026$:CMP R0,#33 ; Это символ Esc ? BEQ 111044$ ; Да ASL R0 ; Вызов п/п обработки управляющего символа CALL @13142(R0) BR 110762$ 111044$:JMP 113544$ 111050$:ADD @#22546,PC ; Была попытка передачи символа ? BR 111062$ ; Нет TRAP 4 BR 110756$ 111062$:MOV @#7056,R0 ; R0 = указатель текущей задачи MOV #110726$,22(R0) ; Запомнить адрес возврата MOV SP,@#23154 MOV @#23152,SP CMP (SP)+,(SP)+ JMP 174164$ ; Переход на цикл вызова подпрограмм 111112$:ADD @#22546,PC ; Была попытка передачи символа ? RETURN ; Нет TRAP 4 INC @#7064 111126$:DEC @#7064 ; Уменьшить счетчик символов BEQ 111112$ ; Символов нет TST @#7060 ; Были нажаты клавиши ? BEQ 111204$ ; Нет RETURN ; Точка входа в подпрограмму 111144$:INC @#7066 ; Установить флаг вызова п/п перекл. курсора MOV @#23150,R5 ; R5 = адрес текущей таблицы видеопараметров MOV 34(R5),@#177016 ; Загрузка регистров кода цвета и кода фона MOV 40(R5),@#177020 MOV 40(R5),@#177022 MOVB 70(R5),@64(R5) ; Установить цвет курсора 111204$:MOVB @22542,R0 ; Прочесть символ INC @#22542 ; Подкорректировать указатель BIC #200,@#22542 MOV #111126$,-(SP) ; Положить в стек адрес возврата BIC #177400,R0 CMP R0,#40 ; Это управляющие коды ? BHIS 111260$ ; Нет TSTB @#22552 ; Установлен режим ИСУ ? BEQ 111252$ ; Нет JMP 111730$ 111252$:ASL R0 ; Вызов п/п обработки управляющего символа JMP @13142(R0) 111260$:CMPB R0,#77 ; Это символы "A-Z,[,\,],^,_,a-z,{,|,},~" ? BLOS 111272$ ; Нет BIS @#22556,R0 ; Подстройка алфавита 111272$:ASL R0 MOV 14142(R0),R1 ; R1 = адрес рисунка символа MOV 10(R5),R0 ; R0 = длина видеостроки MOV #177010,R2 MOV #177024,R3 MOV @R5,@R2 ; Уст. в регистре адреса планов нач. адрес ADD 56(R5),PC ; Переход в зависимости от режима (инверсия...) 111322$:.REPT 12 ; Цикл рисования символа MOVB (R1)+,R4 MOV R4,@R3 ADD R0,@R2 .ENDR MOVB (R1)+,R4 MOV R4,@R3 111422$:INC @R5 ; Передвинуть указатель на следующий адрес DEC 16(R5) ; Уменьшить счетчик оставшихся позиций BNE 111624$ ; Еще не конец строки MOV 22(R5),@R5 ; Формирование адреса начала следующей строки MOV 4(R5),16(R5) 111444$:ADD #54,32(R5) CMP 32(R5),26(R5) BNE 111470$ MOV 24(R5),32(R5) 111470$:ADD @32(R5),@R5 DEC 20(R5) ; Уменьшить счетчик оставшихся строк BNE 111624$ ; Еще не конец экрана ADD 74(R5),PC ; Рулон присутствует ? BR 111626$ ; Нет INC 20(R5) ; Увеличить счетчик оставшихся строк MOV #13,-(SP) ADD #54,30(R5) ; Увелич. адрес списка ВС верхней части экрана CMP 30(R5),#4670 BNE 111544$ MOV #2500,30(R5) 111544$:MOV @#23170,R0 ; R0 = кол-во оставшихся видеострок для скрол. BEQ 111574$ ; Их нет BPL 111556$ NEG R0 111556$:CMP R0,#14 ; <= 12(10) ? BLOS 111614$ ; Да TRAP 0 ; Вызов цикла подпрограмм MOV @#23150,R5 ; R5 = адрес текущей ТВ BR 111544$ 111574$:CLR @#23164 ; Запретить курсор MOV #2,@#7134 MOVB #177,@23160 ; Убрать курсор с экрана 111614$:CALL 113344$ ; Очистить освободившуюся строку ADD (SP)+,@#23170 ; Осуществить скроллинг 111624$:RETURN 111626$:JMP 114316$ ; Перекинуть курсор на верх экрана ; П/п выключения курсора 111632$:CLR @#23164 ; Запретить использование курсора MOV 60(R5),R0 ; Выключение курсора BIC #1,6(R0) BIC #1,52(R0) RETURN ; Обработка режима ПОДЧЕРКИВАНИЕ 111660$:MOV #12,R0 ; R0 = число байт для посылки в видео 111664$:MOVB (R1)+,R4 ; Рисование символа MOV R4,@R3 ADD 10(R5),@R2 SOB R0,111664$ MOV #377,@R3 ; Подчеркнуть символ BR 111422$ ; Обработка режима ИНВЕРСИЯ 111704$:MOV #13,R0 BR 111716$ 111712$:ADD 10(R5),@R2 111716$:MOVB (R1)+,R4 COM R4 ; Инвертировать байт MOV R4,@R3 SOB R0,111712$ BR 111422$ ; Обработка режима ИСУ 111730$:MOV #3,-(SP) ; Формирование начальных значений MOV R0,-(SP) MOV R0,-(SP) MOV #74,R0 ; Вывод "<" CALL 111272$ CLR R0 ; Цикл вывода трех цифр BR 111762$ 111754$:CLR R0 ROLB @SP ROLB R0 111762$:ROLB @SP ROLB R0 ROLB @SP ROLB R0 ADD #60,R0 CALL 111272$ DEC 4(SP) BNE 111754$ MOV #76,R0 ; Вывод ">" CALL 111272$ TST (SP)+ CMP #12,(SP)+ ; Это был символ LF ? BNE 112034$ ; Нет CALL 114310$ ; Вывод CRLF 112034$:TST (SP)+ RETURN ; ТАБЛИЦЫ ВИДЕОПАРАМЕТРОВ ; Структура таблицы: ; - первое слово N - число элемнтов в таблице ; - N слов - содержимое таблицы ; - 4 слова - значения регистров управления отображением и цветом ; ТВ для верхней информационной строки 112040$:.WORD 34 .WORD 175700,175700,50,13,50,1,13,50,1,0,2410,12114,2410,2410 .WORD 6,6,0,0,0,0,2400,2402,2372,0,2410,2371,2370,2 .WORD 0,27,21000,63104 ; ТВ для пользовательского экрана 112142$:.WORD 37 .WORD 100000,100000,120,410,120,30,436,120,30,0,2500,4670,2500,2500 .WORD 7,7,10421,10421,10421,10421,2470,2472,2462,0,2500,2461,2460 .WORD 1,7,2,2 .WORD 7,7,135230,177334 ; ТВ для экрана установки 112252$:.WORD 36 .WORD 154540,154540,50,334,50,24,334,50,24,0,5030,6610,5030,5030 .WORD 7,7,10421,10421,10421,10421,4700,4702,4672,0,5030,4671,4670 .WORD 2,7,2 .WORD 7,27,135230,177334 ; ТВ для нижней информационной строки 112360$:.WORD 34 .WORD 176570,176570,50,13,50,1,13,50,1,0,6754,7030,6754,6754 .WORD 6,6,0,0,0,0,6750,6752,6742,0,6754,6741,6740,2 .WORD 0,27,21000,63104 ; Таблица описания адресов п/п исполнения управляющих и Esc-последовательностей 112462$:.WORD 16,113220$ ; Ctrl-G .WORD 20,114226$ ; Ctrl-H .WORD 24,114216$ ; Ctrl-J .WORD 26,114772$ ; Ctrl-K .WORD 30,113236$ ; Ctrl-L .WORD 32,114336$ ; Ctrl-M .WORD 34,105260$ ; Ctrl-N .WORD 36,105306$ ; Ctrl-O .WORD 44,114636$ ; Ctrl-R .WORD 46,114514$ ; Ctrl-S .WORD 50,114410$ ; Ctrl-T .WORD 52,114310$ ; Ctrl-U .WORD 54,114620$ ; Ctrl-V .WORD 56,113670$ ; Ctrl-W .WORD 62,114254$ ; Ctrl-Y .WORD 64,114226$ ; Ctrl-Z .WORD 66,113532$ ; Ctrl-[ .WORD 70,114106$ ; Ctrl-\ .WORD 72,114216$ ; Ctrl-] .WORD 76,114772$ ; Ctrl-_ .WORD 112,113602$ ; Esc % .WORD 172,113750$ ; Esc = .WORD 174,113766$ ; Esc > .WORD 176,114004$ ; Esc ? .WORD 202,114106$ ; Esc A .WORD 204,114216$ ; Esc B .WORD 206,114254$ ; Esc C .WORD 210,114226$ ; Esc D .WORD 212,113712$ ; Esc E .WORD 220,114660$ ; Esc H .WORD 222,114106$ ; Esc I .WORD 224,114714$ ; Esc J .WORD 226,114772$ ; Esc K .WORD 240,115010$ ; Esc P .WORD 262,115626$ ; Esc Y .WORD 264,115776$ ; Esc Z .WORD 266,114006$ ; Esc [ .WORD 400,114106$ ; Esc 200 .WORD 402,114216$ ; Esc 201 .WORD 404,114226$ ; Esc 202 .WORD 406,114254$ ; Esc 203 .WORD 410,114316$ ; Esc 204 .WORD 412,114324$ ; Esc 205 .WORD 414,114336$ ; Esc 206 .WORD 416,114356$ ; Esc 207 .WORD 420,114404$ ; Esc 210 .WORD 422,114406$ ; Esc 211 .WORD 424,114410$ ; Esc 212 .WORD 426,114514$ ; Esc 213 .WORD 430,114620$ ; Esc 214 .WORD 432,114636$ ; Esc 215 .WORD 434,114654$ ; Esc 216 .WORD 436,114656$ ; Esc 217 .WORD 440,114260$ ; Esc 220 .WORD 442,114266$ ; Esc 221 .WORD 444,114274$ ; Esc 222 .WORD 446,114302$ ; Esc 223 .WORD 450,114660$ ; Esc 224 .WORD 452,113236$ ; Esc 225 .WORD 454,114714$ ; Esc 226 .WORD 456,114772$ ; Esc 227 .WORD 460,114310$ ; Esc 230 .WORD 462,115626$ ; Esc 231 .WORD 464,116014$ ; Esc 232 .WORD 466,116016$ ; Esc 233 .WORD 470,116020$ ; Esc 234 .WORD 472,0 ; Esc 235 .WORD 474,0 ; Esc 236 .WORD 476,0 ; Esc 237 .WORD 500,116022$ ; Esc Граф-@ .WORD 502,116066$ ; Esc Граф-A .WORD 504,116144$ ; Esc Граф-B .WORD 506,116234$ ; Esc Граф-C .WORD 510,116274$ ; Esc Граф-D .WORD 512,116374$ ; Esc Граф-E .WORD 514,116462$ ; Esc Граф-F .WORD 516,116212$ ; Esc Граф-G .WORD 520,116542$ ; Esc Граф-H .WORD 522,116544$ ; Esc Граф-I .WORD 524,116546$ ; Esc Граф-J .WORD 526,116550$ ; Esc Граф-K .WORD 556,116552$ ; Esc Граф-W .WORD 560,116600$ ; Esc Граф-X .WORD 570,116624$ ; Esc Граф-\ .WORD 572,116632$ ; Esc Граф-] .WORD 574,116742$ ; Esc Граф-^ .WORD 576,116750$ ; Esc Граф-_ .WORD 0 ; ПОДПРОГРАММЫ ОБРАБОТКИ УПРАВЛЯЮЩИХ И ESC-ПОСЛЕДОВАТЕЛЬНОСТЕЙ ; П/п обработки Ctrl-G 113220$:BIS #600,@#177716 ; Включить звуковой сигнал (частота 500 Гц) MOV #20,@#7046 ; Установить время (0.32 сек) RETURN ; П/п обработки Ctrl-L, Esc 225 113236$:MOV @50(R5),-(SP) ; Сохранение содержимого рег. управления цветом MOV @52(R5),-(SP) MOV 44(R5),@50(R5) ; Засветка всего экрана цветом фона MOV 44(R5),@52(R5) CALL 113362$ ; Очистка экрана (заполнение цветом фона) CALL 110572$ ; Установка ТВ на начало видеопамяти MOV 30(R5),R4 ; Установка курсора в начало экрана MOV R4,32(R5) MOV @R4,@R5 ADD 22(R5),@R5 MOV 4(R5),16(R5) MOV 12(R5),20(R5) MOV (SP)+,@52(R5) ; Восстановление регистров управления цветом MOV (SP)+,@50(R5) MOV 72(R5),@#23164 RETURN ; П/п-мы очистки заданной области экрана (заполнение цветом фона) ; Параметры (для точки входа 113376$): ; R1 - начальный адрес; ; R2 - длина в байтах; ; R3 - число видеострок; 113344$:MOV @32(R5),R1 ADD 22(R5),R1 113354$:MOV #13,R3 BR 113372$ 113362$:MOV 2(R5),R1 MOV 14(R5),R3 113372$:MOV 4(R5),R2 113376$:MOV 44(R5),@#177020 ; Загрузка в регистры кода фона цвета фона MOV 44(R5),@#177022 MOV #177010,R4 MOV R1,@R4 ; Загрузить в регистр адреса планов нач. адрес MOV #177024,R1 CLR R0 CMP R2,10(R5) ; Длина очищаемой строки равна истинной длине ? BEQ 113500$ ; Да MOV R2,-(SP) ; Сохранить длину строки BR 113450$ 113440$:MOV @SP,R2 ; R2 = длина очищаемой строки SUB R2,@R4 ; Вычесть длину строки из адреса планов ADD 10(R5),@R4 ; Прибавить истинную длину 113450$:MOV R0,@R1 ; Очистить байт строки INC @R4 ; Переход к следующему адресу SOB R2,113450$ ; Цикл по длине очищаемой части строки SOB R3,113440$ ; Цикл по числу видеострок TST (SP)+ 113462$:MOV 40(R5),@#177020 ; Загр. в регистры кода фона цвета знакоместа MOV 40(R5),@#177022 RETURN 113500$:MUL R2,R3 ; R3 = длина строки * число видеострок 113502$:MOV R0,@R1 ; Цикл очистки INC @R4 SOB R3,113502$ BR 113462$ ; Значения для загрузки в регистры кода фона (177020 и 177022) 113512$:.WORD 0,10421,21042,31463,42104,52525,63146,73567 ; П/п обработки Ctrl-[ (Esc) 113532$:MOV SP,@#23152 MOV #2,@#23174 ; Активировать проверку на управляющие символы 113544$:MOV #1000,SP CALL 110762$ ; Прочесть символ ASL R0 ; Вызов п/п обработки Esc-последовательности CALL @13142(R0) CLR @#23174 MOV @#23152,SP RETURN ; Точка входа при исполнении Esc %!3 в графическом режиме 113574$:MOV 2(SP),R0 BR 113620$ ; П/п обработки Esc % 113602$:CALL 110762$ ; Прочесть символ CMPB R0,#41 ; Это "!" ? BNE 113632$ ; Нет CALL 110762$ 113620$:BIC #177774,R0 ASL R0 ; Вызов соответствующей п/п CALL @113634$(R0) 113632$:RETURN ; Адреса п/п, вызывающиеся при обработке Esc %! 113634$:.WORD 113644$,113670$,113670$,113670$ ; П/п обработки Esc %!0 (переход в графический режим) 113644$:CALL 111632$ ; Выключение курсора CLR @#23174 ; Аннулировать проверку на управляющие символы CALL @#135436$ ; Вызов п/п управления графикой MOV 72(R5),@#23164 RETURN ; П/п обработки Ctrl-W, Esc %! (1-3) 113670$:JSR R5,105430$ ; Перекодировать клавиши под VT-52 .WORD 106634$ MOV #114226$,@#13162; При Ctrl-H выполнять шаг назад CLR @#7154 ; Установить пункт VT-52 в меню УСТ RETURN ; П/п обработки Esc E 113712$:JSR R5,105430$ ; Перекодировать клавиши под 15ИЭ-00-013 .WORD 107002$ MOV #114660$,@#13162; При Ctrl-H выполнять операцию Home MOV #1,@#7154 ; Установить пункт 15ИЭ-00-013 в меню УСТ RETURN ; П/п загрузки регистров кода цвета и фона 113736$:MOV R5,-(SP) ; Сохранить адрес текущей ТВ CALL 110204$ ; Загрузить регистры MOV (SP)+,R5 ; Восстановить адрес ТВ RETURN ; П/п обработки Esc = 113750$:JSR R5,105346$ ; Установить режим ДКЛ .WORD 107120$,11014 EMT 52 ; Вывести надпись "ДКЛ" .WORD 107576$ RETURN ; П/п обработки Esc > 113766$:JSR R5,105400$ ; Сбросить режим ДКЛ .WORD 107120$,11014 EMT 52 ; Стереть надпись "ДКЛ" .WORD 107567$ RETURN 114004$:RETURN ; П/п обработки Esc [ 114006$:CALL 110762$ ; Чтение символа CMP R0,#62 ; Это "2" ? BEQ 114050$ ; Да CMP R0,#77 ; Это "?" ? BEQ 114046$ ; Да BR 114034$ 114030$:CALL 110762$ 114034$:CMPB R0,#162 ; Это "r" ? BNE 114030$ ; Нет CALL 113236$ ; Очистка экрана 114046$:RETURN 114050$:CALL 110762$ CMP R0,#150 ; Это "h" ? BNE 114072$ ; Нет MOV #2,@#7232 ; Запрет передачи одиночных ASCII-кодов клав. BR 114104$ 114072$:CMP R0,#154 ; Это "l" ? BNE 114104$ ; Нет CLR @#7232 ; Разрешение передачи одиночных ASCII-кодов 114104$:RETURN ; П/п обработки Ctrl-\, Esc A, Esc I, Esc 200 114106$:SUB @32(R5),@R5 ; Вычесть адрес начала видеостроки SUB #54,32(R5) ; Перейти к предыд. символьной строке CMP 32(R5),24(R5) ; Был переход за верх экрана ? BHIS 114144$ ; Нет MOV 26(R5),32(R5) ; Переход на низ экрана SUB #54,32(R5) 114144$:ADD @32(R5),@R5 ; Прибавить к положению курсора тек. строку CMP 20(R5),12(R5) ; Это была верхняя строка BNE 114204$ ; Нет ADD 74(R5),PC ; Рулон присутствует ? BR 114212$ ; Нет MOV 32(R5),30(R5) MOV #-13,-(SP) ; Скроллинг 11(10) видеострок вниз JMP 111544$ 114204$:INC 20(R5) ; Количество оставшихся строк ++ RETURN 114212$:JMP 114324$ ; Позиционирование на низ текущей колонки ; П/п обработки Ctrl-J, Ctrl-], Esc B, Esc 201 114216$:SUB @32(R5),@R5 ; Вычесть адрес начала видеостроки JMP 111444$ ; Перемещение вниз ; П/п обработки Ctrl-H (в системе команд VT-52), Ctrl-Z, Esc D, Esc 202 114226$:CMP 16(R5),4(R5) ; Курсор в начале строки ? BEQ 114246$ ; Да DEC @R5 ; Уменьшить позицию в строке INC 16(R5) ; Увеличить количество оставшихся позиций RETURN 114246$:CALL 114356$ ; Позиционирование в конец строки BR 114106$ ; На одну строку вверх ; П/п обработки Ctrl-Y, Esc C, Esc 203 114254$:JMP 111422$ ; Перемещение курсора на одну позицию вправо ; П/п обработки Esc 220 114260$:CALL 114254$ ; Вправо BR 114106$ ; Вверх ; П/п обработки Esc 221 114266$:CALL 114226$ ; Влево BR 114216$ ; Вниз ; П/п обработки Esc 222 114274$:CALL 114106$ ; Вверх BR 114226$ ; Влево ; П/п обработки Esc 223 114302$:CALL 114216$ ; Вниз BR 114254$ ; Вправо ; П/п обработки Ctrl-U, Esc 230 114310$:CALL 114336$ ; В начало строки BR 114216$ ; Вниз ; П/п обработки Esc 204 114316$:CLR R0 ; Номер начальной строки JMP 115720$ ; Позиционирование ; П/п обработки Esc 205 114324$:MOV 12(R5),R0 ; R0 = номер последней строки DEC R0 JMP 115720$ ; Позиционирование ; П/п обработки Ctrl-M, Esc 206 114336$:MOV 22(R5),@R5 ; Позиционирование в начало строки ADD @32(R5),@R5 MOV 4(R5),16(R5) ; Количество оставшихся позиций = длина строки RETURN ; П/п обработки Esc 207 114356$:MOV 4(R5),@R5 ; Позиционирование в конец строки ADD 22(R5),@R5 DEC @R5 ADD @32(R5),@R5 MOV #1,16(R5) ; Осталась одна позиция RETURN 114404$:RETURN 114406$:RETURN ; П/п обработки Ctrl-T, Esc 212 114410$:MOV 16(R5),R0 ; R0 = количество оставшихся позиций DEC R0 BEQ 114474$ ; Осталась одна позиция MOV @R5,R1 INC R1 ; R1 = текущий видеоадрес + 1 MOV #13,-(SP) ; Число видеострок MOV #177010,R3 MOV #177024,R4 114440$:MOV R0,R2 ; R2 = число перемещаемых символов MOV R1,@R3 BR 114452$ 114446$:ADD #2,@R3 ; Цикл перемещения символов 114452$:TST @R4 DEC @R3 CLR @R4 SOB R2,114446$ ADD 10(R5),R1 ; Переход к следующей видеостроке DEC @SP BNE 114440$ TST (SP)+ 114474$:MOV @R5,R1 ADD R0,R1 ; R1 = адрес конечного символа MOV #1,R2 ; R2 = 1 (длина очищаемой части строки) MOV #13,R3 ; Число очищаемых видеострок JMP 113376$ ; Очистка ; П/п обработки Ctrl-S, Esc 213 114514$:MOV 16(R5),R0 ; R0 = количество оставшихся позиций DEC R0 BEQ 114602$ ; Осталась одна позиция MOV @R5,R1 ADD R0,R1 ; R1 = адрес конца строки DEC R1 MOV #13,-(SP) ; Число видеострок MOV #177010,R3 MOV #177024,R4 114546$:MOV R0,R2 ; R2 = число перемещаемых символов MOV R1,@R3 BR 114560$ 114554$:SUB #2,@R3 ; Цикл перемещения символов 114560$:TST @R4 INC @R3 CLR @R4 SOB R2,114554$ ADD 10(R5),R1 ; Переход к следующей видеостроке DEC @SP BNE 114546$ TST (SP)+ 114602$:MOV @R5,R1 ; R1 = текущий видеоадрес MOV #1,R2 ; R2 = длина очищаемой части строки MOV #13,R3 ; R3 = число видеострок JMP 113376$ ; Очистка ; П/п обработки Ctrl-V, Esc 214 114620$:DEC 20(R5) ; Уменьшить количество оставшихся строк SUB #13,@#23170 ; Скроллинг вниз JMP 114106$ ; Курсор вверх ; П/п обработки Ctrl-R, Esc 215 114636$:INC 20(R5) ; Увеличить количество оставшихся строк ADD #13,@#23170 ; Скроллинг вверх JMP 114216$ ; Курсор вниз 114654$:RETURN 114656$:RETURN ; П/п обработки Ctrl-H (в системе команд 15ИЭ-00-013), Esc H, Esc 224 114660$:MOV 30(R5),32(R5) ; Текущий адрес списка ВС - верх экрана MOV 22(R5),@R5 ; Позиционирование курсора в верх. угол экрана ADD @32(R5),@R5 MOV 4(R5),16(R5) ; Число ост. позиций = длина строки MOV 12(R5),20(R5) ; Число ост. строк = число строк на экране RETURN ; П/п обработки Esc J, Esc 226 114714$:CALL 114772$ ; Очистка конца строки MOV 20(R5),-(SP) ; Количество оставшихся строк MOV 32(R5),R1 ; R1 = текущий адрес списка ВС BR 114762$ 114732$:ADD #54,R1 ; Перейти к следующей строке CMP R1,26(R5) ; Дошли до конца экрана ? BNE 114750$ ; Нет MOV 24(R5),R1 ; R1 = начальный адрес списка ВС 114750$:MOV R1,-(SP) MOV @R1,R1 CALL 113354$ ; Очистка MOV (SP)+,R1 114762$:DEC @SP BNE 114732$ TST (SP)+ RETURN ; П/п обработки Ctrl-K, Esc K, Esc 227 114772$:MOV @R5,R1 ; R1 = текущий видеоадрес MOV 16(R5),R2 ; R2 = количество оставшихся позиций в строке MOV #13,R3 ; R3 = число видеострок JMP 113376$ ; Очистка ; П/п обработки Esc P 115010$:CLR -(SP) 115012$:CALL 110762$ ; Чтение символа MOV R0,-(SP) ; Сохранение его в стеке CMPB R0,#73 ; Это ";" ? BNE 115012$ 115026$:CALL 110762$ MOV R0,-(SP) CMPB R0,#73 ; Это ";" ? BEQ 115424$ ; Да CMPB R0,#174 ; Это "|" ? BNE 115026$ 115050$:TST (SP)+ ; Восстановление стека BNE 115050$ ASR -4(SP) ; Была набрана "1" ? BCS 115112$ ; Да MOV #115342$,R1 ; R1 = список смещ. клавиш К1-К25 в табл. раск. MOV #31,R2 ; R2 = 25(10) число программир. клавиш 115072$:MOV (R1)+,R0 ; Цикл очистки назначений клавиш MOV #11140,7232(R0) SOB R2,115072$ MOV #11142,@#13140 ; Установка указателя на начало буфера 115112$:CLR -(SP) 115114$:CALL 110762$ CMPB R0,#33 ; Это Escape ? BEQ 115302$ ; Да CMPB R0,#57 ; Это "/" ? BEQ 115154$ ; Да MOV @SP,R1 ; @SP = @SP * 10 + R0 MUL #10.,R1 BIC #177760,R0 ADD R0,R1 MOV R1,@SP BR 115114$ 115154$:MOV (SP)+,R0 CMP R0,#25. ; Номер клавиши в диапазоне 1 -- 25 ? BHI 115112$ ; Нет DEC R0 ASL R0 MOV 115342$(R0),R0 ; R0 = смещение клавиши в таблице раскладки MOV @#13140,7232(R0); Запомнить адрес строки 115202$:CALL 110762$ CMPB R0,#33 ; Это Escape ? BEQ 115304$ CMPB R0,#73 ; Это ";" ? BEQ 115270$ CALL 115322$ ; Преобразование HEX-цифры в двоичный код ASH #4,R0 ; R0 = R0 * 16 MOV R0,-(SP) CALL 110762$ CALL 115322$ BIS (SP)+,R0 MOVB R0,@13140 ; Запомнить символ в строке CMP @#13140,#13130 ; Достигнут конец буфера BHI 115202$ ; Да INC @#13140 ; Продвинуть указатель на следующую позицию BR 115202$ 115270$:CLRB @13140 ; Пометить конец строки INC @#13140 BR 115112$ 115302$:TST (SP)+ 115304$:CLRB @13140 INC @#13140 CALL 110762$ RETURN ; П/п преобразования HEX-цифры в двоичное представление 115322$:CMP R0,#101 ; Цифра в диапазоне "A-F" ? BLO 115334$ ; Нет ADD #11,R0 115334$:BIC #177760,R0 RETURN ; Смещения для клавиш К1-К25 в таблице раскладки клавиатуры 115342$:.WORD 10,12,14,20,22,270,272,274,300,302,550,552,554,560,562 .WORD 1030,1032,1034,1040,1042,1310,1312,1314,1320,1322 115424$:MOV 2(SP),R0 ; R0 = код симв., шрифт кот. перепрограммир. 115430$:TST (SP)+ ; Восстановление стека BNE 115430$ MOV R0,R1 ASL R0 ADD #14142,R0 ; R0 = указатель на ячейку адреса рисунка симв. MOV R0,-(SP) MUL #11,R1 ; Вычисление местоположения рисунка символа ADD #15142,R1 ; R1 = адрес местоположения рисунка символа MOV R1,-(SP) 115460$:CALL 110762$ ; Чтение символа CMP R0,#33 ; Это Escape ? BEQ 115550$ ; Да CMP R0,#100 ; Это "@" ? BNE 115460$ ; Нет 115500$:MOV @SP,@2(SP) ; Сохранить адрес рисунка в таблице ADD #2,2(SP) ; Переход на следующую позицию в табл. адресов JSR R5,115554$ ; Программирование первых пяти байт .WORD 5 CALL 110762$ JSR R5,115554$ ; Программирование следующих шести байт .WORD 6 CALL 110762$ CMP R0,#33 ; Это Escape BNE 115500$ CALL 110762$ 115550$:CMP (SP)+,(SP)+ RETURN ; П/п программирования заданного количества байт в рисунке символа 115554$:MOV #10,-(SP) ; Длина байта 115560$:MOV R5,-(SP) CALL 110762$ MOV (SP)+,R5 CMP R0,#33 ; Это Escape ? BEQ 115616$ ; Да MOV 4(SP),R3 ; R3 = адрес рисунка MOV @R5,R4 ; R4 = число программируемых байт 115604$:ASR R0 ; Цикл программирования RORB (R3)+ SOB R4,115604$ DEC @SP BNE 115560$ 115616$:ADD (R5)+,4(SP) ; Перейти к следующей области рисунка TST (SP)+ RTS R5 ; П/п обработки Esc Y, Esc 231 115626$:CALL 110762$ ; Прочесть символ SUB #40,R0 BMI 115652$ CMP R0,12(R5) ; Координата Y превышает диапазон ? BHIS 115652$ ; Да CALL 115720$ ; Позиционирование по координате Y 115652$:CALL 110762$ SUB #40,R0 BMI 115716$ CMP R0,4(R5) ; Координата X превышает диапазон ? BHIS 115716$ ; Да 115672$:MOV 4(R5),16(R5) ; Позиционирование по координате X SUB R0,16(R5) ; (16)R5 - кол-во оставшихся позиций ADD @32(R5),R0 ; R0 = адрес видеопамяти начала строки + X ADD 22(R5),R0 ; Плюс константа начального доступа MOV R0,@R5 ; @R5 - адр.начала видеопамяти для выв. симв. 115716$:RETURN ; П/п позиционирования по координате Y 115720$:SUB @32(R5),@R5 ; @R5 - оставить координату X MOV 12(R5),20(R5) SUB R0,20(R5) ; 20(R5) - кол-во ост. символьных строк MUL #11.*4,R0 ADD 30(R5),R1 ; R1 = адрес описания видеостроки ADD 74(R5),PC ; Рулон присутствует ? BR 115766$ ; Нет CMP R1,#4670 ; Переход за границу списка ? BLO 115766$ ; Нет SUB #2170,R1 ; Подкорректировать значение 115766$:MOV R1,32(R5) ; 32(R5) - текущий адрес списка видеострок ADD @R1,@R5 ; @R5 - адр.начала видеопамяти для выв.симв. RETURN ; П/п обработки Esc Z 115776$:MOV #116010$,R0 ; R0 = адрес символьной строки CALL 104160$ ; Передача адреса строки п/п обсл. клавиатуры RETURN 116010$:.ASCIZ <33>"/Z" ; Терминал VT-100 в режиме VT-52 .EVEN 116014$:RETURN 116016$:RETURN 116020$:RETURN ; П/п обработки Esc Граф-@ 116022$:ADD @#23176,PC ; Установлен режим отмены ? BR 116036$ ; Нет MOV 36(R5),R0 ; R0 = предыдущий цвет символа BR 116046$ 116036$:CALL 110762$ ; Прочесть символ BIC #177770,R0 116046$:MOV R0,@#177016 ; Положить номер цвета в регистр кода цвета 116052$:MOV 34(R5),36(R5) ; Запомнить предыдущий цвет символа MOV R0,34(R5) ; Сохранить номер цвета в ТВ RETURN ; П/п обработки Esc Граф-A 116066$:ADD @#23176,PC ; Установлен режим отмены ? BR 116102$ ; Нет MOV 42(R5),R0 ; R0 = предыдущий цвет знакоместа BR 116120$ 116102$:CALL 110762$ ; Прочесть символ BIC #177770,R0 ASL R0 MOV 113512$(R0),R0 ; R0 = код фонового цвета 116120$:MOV R0,@#177020 ; Положить номер фон. цвета в рег. кода фона MOV R0,@#177022 116130$:MOV 40(R5),42(R5) ; Запомнить предыдущий цвет знакоместа MOV R0,40(R5) ; Сохранить номер цвета знакоместа в ТВ RETURN ; П/п обработки Esc Граф-B 116144$:ADD @#23176,PC ; Установлен режим отмены ? BR 116160$ ; Нет MOV 46(R5),R0 ; R0 = предыдущий цвет фона BR 116046$ 116160$:CALL 110762$ ; Прочесть символ BIC #177770,R0 116170$:ASL R0 MOV 113512$(R0),R0 ; R0 = код фонового цвета MOV 44(R5),46(R5) ; Запомнить предыдущий цвет фона MOV R0,44(R5) ; Сохранить номер цвета фона в ТВ RETURN ; П/п обработки Esc Граф-G 116212$:CALL 110762$ ; Прочесть символ BIC #177770,R0 ; R0 = номер цвета курсора MOVB R0,@64(R5) ; Изменить цвет курсора 116226$:MOV R0,70(R5) ; Сохранить цвет курсора в ТВ RETURN ; П/п обработки Esc Граф-C 116234$:ADD @#23176,PC ; Установлен режим отмены ? BR 116254$ ; Нет CLR @#22554 ; Сбросить индикатор режима инверсии(подч.) EMT 52 ; Очистить надпись "ИНВ" ("ПОДЧ") .WORD 107605$ BR 116334$ 116254$:MOV #<111704$-111322$>,56(R5) ; Установить режим инверсии (362) INCB @#22554 ; Установить индикатор режима инверсии EMT 52 ; Высветить надпись "ИНВ" .WORD 107614$ RETURN ; П/п обработки Esc Граф-D 116274$:ADD @#23176,PC ; Установлен режим отмены ? BR 116314$ CLR @#22554 ; Сбросить индикатор режима подчеркивания(инв.) EMT 52 ; Погасить надпись "ПОДЧ" ("ИНВ") .WORD 107605$ BR 116334$ 116314$:MOV #<111660$-111322$>,56(R5) ; Установить режим подч. (336) INCB @#22555 ; Установить индикатор режима подчеркивания EMT 52 ; Высветить надпись "ПОДЧ" .WORD 107623$ RETURN 116334$:CLR 56(R5) ; Установить нормальный режим TSTB @#22554 ; Ранее был установлен режим инверсии ? BEQ 116356$ ; Нет MOV #364,56(R5) ; Установить режим инверсии BR 116372$ 116356$:TSTB @#22555 ; Ранее был установлен режим подчеркивания ? BEQ 116372$ ; Нет MOV #340,56(R5) ; Установить режим подчеркивания 116372$:RETURN ; П/п обработки Esc Граф-E 116374$:CALL 110762$ ; Прочесть символ SUB #61,R0 ; Символ в диапазоне "1"-"4" BMI 116422$ ; Нет CMP R0,#3 BHI 116422$ ; Нет ASL R0 ; Вызов соответствующей п/п CALL @116424$(R0) 116422$:RETURN ; Адреса п/п для установки длины строки 116424$:.WORD 116434$,116450$,116460$,116460$ ; П/п установки длины строки 80 116434$:MOV #120,4(R5) ; Установить длину строки 80 116442$:CLR 22(R5) ; Константа начального отступа = 0 RETURN ; П/п установки длины строки 40 116450$:MOV #50,4(R5) ; Установить длину строки 40 BR 116442$ 116460$:RETURN ; П/п обработки Esc Граф-F 116462$:CALL 110762$ ; Прочесть символ SUB #61,R0 ; Символ в диапазоне "1"-"4" BMI 116524$ ; Нет CMP R0,#4 BHIS 116524$ ; Нет 116502$:MOVB 116526$(R0),@22732; Установить соответствующий формат экрана MOVB 116532$(R0),22744 ; Сохранить номер формата в ТВ MOVB 116536$(R0),22662 ; Занести новую длину строки в ТВ 116524$:RETURN ; Биты формата экрана для загрузки в регистр управления отображением 116526$:.BYTE 0,20,40,60 ; Номера форматов для загрузки в ТВ 116532$:.BYTE 1,2,4,10 ; Длины строк 116536$:.BYTE 120,50,24,12 116542$:RETURN 116544$:RETURN 116546$:RETURN 116550$:RETURN ; П/п обработки Esc Граф-W 116552$:ADD @#23176,PC ; Установлен режим отмены ? BR 116570$ ; Нет BIS #1000,@#177054 ; Выключить сетевой таймер в канале ЦП RETURN 116570$:BIC #1000,@#177054 ; Включить сетевой таймер в канале ЦП RETURN ; П/п обработки Esc Граф-X 116600$:MTPS #200 ; Запретить прерывания MOVB #177,@23160 ; Убрать курсор с экрана CALL 104026$ ; Вызов п/п ПАУЗА MTPS #0 ; Разрешить прерывания RETURN ; П/п обработки Esc Граф-\ 116624$:INC @#7072 ; Установить индикатор вызова меню ЗАГРУЗКА RETURN ; П/п обработки Esc Граф-] 116632$:ADD @#23176,PC ; Установлен режим отмены ? BR 116706$ ; Нет JSR R5,105400$ ; Установить пользовательский режим клавиатуры .WORD 107310$,11054 CLR @#7146 ; Сбросить индикатор системного режима ADD @#22550,PC ; Разрешена установка/снятие сигнала HALT ? BR 116664$ ; Да RETURN 116664$:BIC #20,@#177716 ; Снять сигнал HALT в ЦП MOV #70046,@#177010 ; Сброс ключа продолжения в области ОЗУ ЦП CLR @#177014 RETURN 116706$:JSR R5,105346$ ; Установить системный режим клавиатуры .WORD 107310$,11054 INC @#7146 ; Установить индикатор системного режима ADD @#22550,PC ; Разрешена установка/снятие сигнала HALT ? BR 116732$ ; Да RETURN 116732$:BIS #20,@#177716 ; Установить сигнал HALT в ЦП RETURN ; П/п обработки Esc Граф-^ 116742$:INC @#7100 ; Установить индикатор вызова тест-программы RETURN ; П/п обработки Esc Граф-_ 116750$:MOV #2,@#23176 ; Установить режим отмены 116756$:CALL 110762$ ; Прочесть символ CMP R0,#33 ; Это Escape ? BEQ 116756$ ; Да ASL R0 ; Вызов соответствующей п/п CALL @13142(R0) CLR @#23176 ; Сбросить режим отмены RETURN ; П/п установки цвета курсора, вызываемая при исп. послед. Esc TD (графика) 117004$:MOV 2(SP),R0 BIC #177760,R0 ; R0 = номер цвета курсора MOV R0,@#7166 ; Сохр. ном. цвета кур. в пункте УСТ/цв. кур. MOVB R0,@22742 ; Изменить цвет курсора RETURN ; П/п установки цветов символа, знакоместа и фона, вызываемая при исполнении ; последовательности Esc LI (графика) 117026$:MOV R5,-(SP) ; Сохранить R5 MOV @#23150,R5 ; R5 = адрес текущей ТВ MOV 4(SP),R0 ; R0 = номер цвета символа BMI 117052$ ; Если отрицательный - нет установки MOV R0,34(R5) ; Сохранить номер цвета в ТВ MOV R0,@#7160 ; Сохр. ном. цвета симв. в пункте УСТ/цв. симв. 117052$:MOV 6(SP),R0 ; R0 = номер цвета знакоместа BMI 117074$ ; Если отрицательный - нет установки MOV R0,@#7162 ; Сохр. ном. цвета зн. в пункте УСТ/цв. зн. ASL R0 MOV 113512$(R0),40(R5); Сохранить номер фонового цвета в ТВ 117074$:MOV 10(SP),R0 ; R0 = номер цвета фона BMI 117116$ ; Если отрицательный - нет установки MOV R0,@#7164 ; Сохр. ном. цвета фона в пункте УСТ/цвет фона ASL R0 MOV 113512$(R0),44(R5); Сохранить номер фонового цвета в ТВ 117116$:CALL 110230$ ; Заполнить регистры кода цвета и фона MOV (SP)+,R5 ; Восстановить R5 RETURN ; П/п исполнения запроса EMT 42 (вывод символа) 117126$:CALL 117136$ ; Занести символ в буфер TRAP 0 ; Запуск цикла задач RETURN ; П/п заноса символа в буфер 117136$:MOVB R0,@22544 ; Занести символ в буфер INC @#22544 ; Корректировка указателя BIC #200,@#22544 INC @#7064 ; Увеличить счетчик символов RETURN ; П/п исполнения запроса EMT 44 (вывод строки символов) 117162$:MOV @16(SP),R1 ; R1 = адрес строки символов ADD #2,16(SP) ; Коррекция адреса возврата ; П/п исполнения запроса EMT 46 (вывод строки символов) 117174$:JSR R5,117206$ ; Занести строку в буфер TRAP 0 ; Запуск цикла задач RETURN ; П/п заноса строки символов в буфер 117204$:MOV (R5)+,R1 ; R1 = адрес строки символов 117206$:MOV @#22544,R0 ; R0 = значение указателя для записи в буфер BR 117224$ 117214$:BIC #200,R0 ; Коррекция указателя INC @#7064 ; Увеличить счетчик символов 117224$:MOVB (R1)+,(R0)+ ; Занести очередной символ в буфер BNE 117214$ ; Еще не конец строки DEC R0 MOV R0,@#22544 RTS R5 ; П/п исполнения запроса EMT 56 (вывод в нижнюю инф. строку) 117240$:MOV #23052,R5 ; R5 = адрес ТВ для нижней инф. строки BR 117260$ 117246$:BR 117376$ ; П/п исполнения запроса EMT 52 (вывод в верхнюю инф. строку) 117250$:ADD @#7150,PC ; Разрешение/запрет вывода в верхнюю строку MOV #22560,R5 ; R5 = адрес ТВ для верхней инф. строки 117260$:MOV 34(R5),@#177016 ; Загрузка регистров кода цвета и фона MOV 40(R5),@#177020 MOV 40(R5),@#177022 MOV @32(R5),@R5 ; Вычисление видеоадреса MOV 4(R5),16(R5) MOV @16(SP),R1 ; R1 = адрес строки MOVB (R1)+,R0 ; R0 = начальная позиция ADD R0,@R5 SUB R0,16(R5) BR 117342$ 117332$:MOV R1,-(SP) CALL 111272$ ; Рисование символа MOV (SP)+,R1 117342$:CLR R0 BISB (R1)+,R0 ; R0 = очередной символ BNE 117332$ ; Еще не конец строки MOV @#23150,R5 ; R5 = адрес текущей ТВ MOV 34(R5),@#177016 ; Восстановление регистров кода цвета и фона MOV 40(R5),@#177020 MOV 40(R5),@#177022 117376$:ADD #2,16(SP) ; Коррекция адреса возврата RETURN 117406$:RETURN 117410$:RETURN 117412$:RETURN 117414$:RETURN 117416$:RETURN 117420$:RETURN 117422$:RETURN 117424$:RETURN 117426$:RETURN ; *** ТАБЛИЦА РИСУНКОВ СИМВОЛОВ *** 117430$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-@ 117443$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-A 117456$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-B 117471$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-C 117504$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-D 117517$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-E 117532$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-F 117545$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-G 117560$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-H 117573$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-I 117606$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-J 117621$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-K 117634$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-L 117647$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-M 117662$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-N 117675$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-O 117710$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-P 117723$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-Q 117736$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-R 117751$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-S 117764$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-T 117777$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-U 120012$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-V 120025$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-W 120040$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-X 120053$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-Y 120066$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-Z 120101$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-[ 120114$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-\ 120127$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-] 120142$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-^ 120155$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Ctrl-_ 120170$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; Space 120203$:.BYTE 0,20,20,20,20,20,20,0,20,0,0 ; ! 120216$:.BYTE 0,44,44,22,0,0,0,0,0,0,0 ; " 120231$:.BYTE 0,0,44,44,176,44,176,44,44,0,0 ; # 120244$:.BYTE 0,0,102,74,102,102,102,74,102,0,0 ; $ 120257$:.BYTE 0,0,206,106,40,20,10,304,302,0,0 ; % 120272$:.BYTE 0,30,44,44,30,24,242,102,274,0,0 ; & 120305$:.BYTE 0,60,20,10,0,0,0,0,0,0,0 ; ' 120320$:.BYTE 0,40,20,10,10,10,10,20,40,0,0 ; ( 120333$:.BYTE 0,10,20,40,40,40,40,20,10,0,0 ; ) 120346$:.BYTE 0,0,0,20,124,70,124,20,0,0,0 ; * 120361$:.BYTE 0,0,20,20,20,376,20,20,20,0,0 ; + 120374$:.BYTE 0,0,0,0,0,0,0,30,30,20,10 ; , 120407$:.BYTE 0,0,0,0,0,176,0,0,0,0,0 ; - 120422$:.BYTE 0,0,0,0,0,0,0,30,30,0,0 ; . 120435$:.BYTE 0,0,200,100,40,20,10,4,2,0,0 ; / 120450$:.BYTE 0,74,102,142,122,112,106,102,74,0,0 ; 0 120463$:.BYTE 0,20,30,24,20,20,20,20,174,0,0 ; 1 120476$:.BYTE 0,74,102,102,40,20,10,104,176,0,0 ; 2 120511$:.BYTE 0,176,40,20,70,100,100,102,74,0,0 ; 3 120524$:.BYTE 0,40,60,50,44,42,176,40,40,0,0 ; 4 120537$:.BYTE 0,176,2,2,76,100,100,102,74,0,0 ; 5 120552$:.BYTE 0,74,102,2,76,102,102,102,74,0,0 ; 6 120565$:.BYTE 0,176,102,40,20,10,4,2,2,0,0 ; 7 120600$:.BYTE 0,74,102,102,74,102,102,102,74,0,0 ; 8 120613$:.BYTE 0,74,102,102,102,174,100,102,74,0,0 ; 9 120626$:.BYTE 0,0,0,30,30,0,0,30,30,0,0 ; : 120641$:.BYTE 0,0,0,30,30,0,0,30,30,20,10 ; ; 120654$:.BYTE 0,0,40,20,10,4,10,20,40,0,0 ; < 120667$:.BYTE 0,0,0,0,176,0,176,0,0,0,0 ; = 120702$:.BYTE 0,0,4,10,20,40,20,10,4,0,0 ; > 120715$:.BYTE 0,70,104,100,40,20,20,0,20,0,0 ; ? 120730$:.BYTE 0,0,74,102,200,234,222,222,154,0,0 ; @ 120743$:.BYTE 0,30,44,102,102,176,102,102,102,0,0 ; A 120756$:.BYTE 0,76,102,102,76,102,102,102,76,0,0 ; B 120771$:.BYTE 0,74,102,2,2,2,2,102,74,0,0 ; C 121004$:.BYTE 0,76,104,204,204,204,204,104,76,0,0 ; D 121017$:.BYTE 0,176,2,2,76,2,2,2,176,0,0 ; E 121032$:.BYTE 0,176,2,2,76,2,2,2,2,0,0 ; F 121045$:.BYTE 0,74,102,2,2,162,102,102,74,0,0 ; G 121060$:.BYTE 0,102,102,102,102,176,102,102,102,0,0 ; H 121073$:.BYTE 0,70,20,20,20,20,20,20,70,0,0 ; I 121106$:.BYTE 0,70,20,20,20,20,20,22,14,0,0 ; J 121121$:.BYTE 0,102,42,22,16,12,22,42,102,0,0 ; K 121134$:.BYTE 0,2,2,2,2,2,2,2,176,0,0 ; L 121147$:.BYTE 0,202,306,252,222,202,202,202,202,0,0 ; M 121162$:.BYTE 0,102,102,106,112,122,142,102,102,0,0 ; N 121175$:.BYTE 0,74,102,102,102,102,102,102,74,0,0 ; O 121210$:.BYTE 0,76,102,102,102,76,2,2,2,0,0 ; P 121223$:.BYTE 0,74,102,102,102,102,102,122,74,100,0 ; Q 121236$:.BYTE 0,76,102,102,102,76,22,42,102,0,0 ; R 121251$:.BYTE 0,74,102,2,74,100,100,102,74,0,0 ; S 121264$:.BYTE 0,376,20,20,20,20,20,20,20,0,0 ; T 121277$:.BYTE 0,102,102,102,102,102,102,102,74,0,0 ; U 121312$:.BYTE 0,202,202,202,202,202,104,50,20,0,0 ; V 121325$:.BYTE 0,202,202,202,202,222,252,306,202,0,0 ; W 121340$:.BYTE 0,102,102,44,30,30,44,102,102,0,0 ; X 121353$:.BYTE 0,202,202,104,50,20,20,20,20,0,0 ; Y 121366$:.BYTE 0,176,100,40,20,10,4,2,176,0,0 ; Z 121401$:.BYTE 0,70,10,10,10,10,10,10,70,0,0 ; [ 121414$:.BYTE 0,0,2,4,10,20,40,100,200,0,0 ; \ 121427$:.BYTE 0,70,40,40,40,40,40,40,70,0,0 ; ] 121442$:.BYTE 0,0,0,0,176,100,100,0,0,0,0 ; ^ 121455$:.BYTE 0,0,0,0,0,0,0,0,176,0,0 ; _ 121470$:.BYTE 0,30,20,40,0,0,0,0,0,0,0 ; ` 121503$:.BYTE 0,0,0,74,100,174,102,102,274,0,0 ; a 121516$:.BYTE 0,2,2,72,106,102,102,106,72,0,0 ; b 121531$:.BYTE 0,0,0,74,102,2,2,102,74,0,0 ; c 121544$:.BYTE 0,100,100,134,142,102,102,142,134,0,0 ; d 121557$:.BYTE 0,0,0,74,102,102,176,2,174,0,0 ; e 121572$:.BYTE 0,60,110,10,34,10,10,10,10,0,0 ; f 121605$:.BYTE 0,0,0,134,142,102,102,142,134,100,74 ; g 121620$:.BYTE 0,2,2,72,106,102,102,102,102,0,0 ; h 121633$:.BYTE 0,20,0,30,20,20,20,20,70,0,0 ; i 121646$:.BYTE 0,20,0,20,20,20,20,20,20,22,14 ; j 121661$:.BYTE 0,2,2,42,22,16,22,42,102,0,0 ; k 121674$:.BYTE 0,30,20,20,20,20,20,20,70,0,0 ; l 121707$:.BYTE 0,0,0,156,222,222,222,222,222,0,0 ; m 121722$:.BYTE 0,0,0,72,106,102,102,102,102,0,0 ; n 121735$:.BYTE 0,0,0,74,102,102,102,102,74,0,0 ; o 121750$:.BYTE 0,0,0,72,106,102,102,106,72,2,2 ; p 121763$:.BYTE 0,0,0,134,142,102,102,142,134,100,100 ; q 121776$:.BYTE 0,0,0,72,106,2,2,2,2,0,0 ; r 122011$:.BYTE 0,0,0,74,2,74,100,102,74,0,0 ; s 122024$:.BYTE 0,10,10,34,10,10,10,110,60,0,0 ; t 122037$:.BYTE 0,0,0,102,102,102,102,142,134,0,0 ; u 122052$:.BYTE 0,0,0,202,202,202,104,50,20,0,0 ; v 122065$:.BYTE 0,0,0,202,202,202,222,222,154,0,0 ; w 122100$:.BYTE 0,0,0,102,44,30,30,44,102,0,0 ; x 122113$:.BYTE 0,0,0,102,102,102,44,30,10,4,2 ; y 122126$:.BYTE 0,0,0,176,40,20,10,4,176,0,0 ; z 122141$:.BYTE 0,0,140,20,20,14,20,20,140,0,0 ; { 122154$:.BYTE 0,0,20,20,20,20,20,20,20,0,0 ; | 122167$:.BYTE 0,0,14,20,20,140,20,20,14,0,0 ; } 122202$:.BYTE 0,176,0,0,0,0,0,0,0,0,0 ; ~ 122215$:.BYTE 0,176,176,176,176,176,176,176,176,0,0 ; Delete 122230$:.BYTE 0,10,34,52,10,10,10,10,10,0,0 ; 200 122243$:.BYTE 0,10,10,10,10,10,52,34,10,0,0 ; 201 122256$:.BYTE 0,0,0,4,2,377,2,4,0,0,0 ; 202 122271$:.BYTE 0,0,0,40,100,377,100,40,0,0,0 ; 203 122304$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 204 122317$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 205 122332$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 206 122345$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 207 122360$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 210 122373$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 211 122406$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 212 122421$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 213 122434$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 214 122447$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 215 122462$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 216 122475$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 217 122510$:.BYTE 0,0,0,104,50,20,50,104,0,0,0 ; 220 122523$:.BYTE 0,0,0,20,0,174,0,20,0,0,0 ; 221 122536$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 222 122551$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 223 122564$:.BYTE 0,100,100,100,110,104,176,4,10,0,0 ; 224 122577$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 225 122612$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 226 122625$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 227 122640$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 230 122653$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 231 122666$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 232 122701$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 233 122714$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 234 122727$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 235 122742$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 236 122755$:.BYTE 0,0,0,0,0,0,0,0,0,0,0 ; 237 122770$:.BYTE 24,24,24,24,24,27,24,24,24,24,24 ; Граф-@ 123003$:.BYTE 10,10,10,10,10,377,0,0,0,0,0 ; Граф-A 123016$:.BYTE 24,24,24,24,24,364,24,24,24,24,24 ; Граф-B 123031$:.BYTE 0,0,0,0,0,17,10,10,10,10,10 ; Граф-C 123044$:.BYTE 24,24,24,24,24,24,24,24,24,24,24 ; Граф-D 123057$:.BYTE 10,10,10,10,10,370,10,10,10,10,10 ; Граф-E 123072$:.BYTE 10,10,10,10,10,370,0,0,0,0,0 ; Граф-F 123105$:.BYTE 24,24,24,24,364,4,364,24,24,24,24 ; Граф-G 123120$:.BYTE 0,0,0,0,374,4,364,24,24,24,24 ; Граф-H 123133$:.BYTE 10,10,10,10,377,0,377,10,10,10,10 ; Граф-I 123146$:.BYTE 0,0,0,0,0,370,10,10,10,10,10 ; Граф-J 123161$:.BYTE 0,0,0,0,0,377,10,10,10,10,10 ; Граф-K 123174$:.BYTE 24,24,24,24,367,0,377,0,0,0,0 ; Граф-L 123207$:.BYTE 24,24,24,24,24,377,0,0,0,0,0 ; Граф-M 123222$:.BYTE 10,10,10,10,10,17,10,10,10,10,10 ; Граф-N 123235$:.BYTE 24,24,24,24,367,0,367,24,24,24,24 ; Граф-O 123250$:.BYTE 10,10,10,10,10,377,10,10,10,10,10 ; Граф-P 123263$:.BYTE 10,10,10,10,370,10,370,10,10,10,10 ; Граф-Q 123276$:.BYTE 24,24,24,24,24,367,24,24,24,24,24 ; Граф-R 123311$:.BYTE 0,0,0,0,0,377,24,24,24,24,24 ; Граф-S 123324$:.BYTE 10,10,10,10,377,0,377,0,0,0,0 ; Граф-T 123337$:.BYTE 0,0,0,0,0,377,0,0,0,0,0 ; Граф-U 123352$:.BYTE 24,24,24,24,364,4,374,0,0,0,0 ; Граф-V 123365$:.BYTE 10,10,10,10,10,10,10,10,10,10,10 ; Граф-W 123400$:.BYTE 0,0,0,0,377,0,377,10,10,10,10 ; Граф-X 123413$:.BYTE 10,10,10,10,10,17,0,0,0,0,0 ; Граф-Y 123426$:.BYTE 0,0,0,0,377,0,377,0,0,0,0 ; Граф-Z 123441$:.BYTE 24,24,24,24,27,20,27,24,24,24,24 ; Граф-[ 123454$:.BYTE 24,24,24,24,27,20,37,0,0,0,0 ; Граф-\ 123467$:.BYTE 0,0,0,0,377,0,367,24,24,24,24 ; Граф-] 123502$:.BYTE 10,10,10,10,17,10,17,10,10,10,10 ; Граф-^ 123515$:.BYTE 0,0,0,0,37,20,27,24,24,24,24 ; Граф-_ 123530$:.BYTE 0,0,0,142,222,222,236,222,142,0,0 ; ю 123543$:.BYTE 0,0,0,74,100,174,102,102,274,0,0 ; а 123556$:.BYTE 0,100,74,2,76,102,102,102,74,0,0 ; б 123571$:.BYTE 0,0,0,42,42,42,42,42,176,100,0 ; ц 123604$:.BYTE 0,0,0,160,110,104,104,104,376,202,0 ; д 123617$:.BYTE 0,0,0,74,102,102,176,2,174,0,0 ; е 123632$:.BYTE 0,0,0,20,174,222,222,222,174,20,20 ; ф 123645$:.BYTE 0,0,0,176,102,2,2,2,2,0,0 ; г 123660$:.BYTE 0,0,0,102,44,30,30,44,102,0,0 ; х 123673$:.BYTE 0,0,0,102,142,122,112,106,102,0,0 ; и 123706$:.BYTE 0,30,0,102,142,122,112,106,102,0,0 ; й 123721$:.BYTE 0,0,0,102,42,22,36,42,102,0,0 ; к 123734$:.BYTE 0,0,0,160,110,104,104,104,102,0,0 ; л 123747$:.BYTE 0,0,0,202,306,252,222,202,202,0,0 ; м 123762$:.BYTE 0,0,0,102,102,102,176,102,102,0,0 ; н 123775$:.BYTE 0,0,0,74,102,102,102,102,74,0,0 ; о 124010$:.BYTE 0,0,0,176,102,102,102,102,102,0,0 ; п 124023$:.BYTE 0,0,0,174,102,102,174,104,102,0,0 ; я 124036$:.BYTE 0,0,0,72,106,102,102,106,72,2,2 ; р 124051$:.BYTE 0,0,0,74,102,2,2,102,74,0,0 ; с 124064$:.BYTE 0,0,0,376,20,20,20,20,20,0,0 ; т 124077$:.BYTE 0,0,0,102,102,102,44,30,10,4,2 ; у 124112$:.BYTE 0,0,0,222,124,70,70,124,222,0,0 ; ж 124125$:.BYTE 0,0,0,76,102,76,102,102,76,0,0 ; в 124140$:.BYTE 0,0,0,2,2,76,102,102,76,0,0 ; ь 124153$:.BYTE 0,0,0,202,202,236,242,242,236,0,0 ; ы 124166$:.BYTE 0,0,0,74,100,70,100,100,74,0,0 ; з 124201$:.BYTE 0,0,0,222,222,222,222,222,376,0,0 ; ш 124214$:.BYTE 0,0,0,76,100,100,174,100,76,0,0 ; э 124227$:.BYTE 0,0,0,222,222,222,222,222,376,200,200 ; щ 124242$:.BYTE 0,0,0,102,102,102,174,100,100,0,0 ; ч 124255$:.BYTE 0,0,0,7,5,174,204,204,174,0,0 ; ъ 124270$:.BYTE 0,142,222,222,222,236,222,222,142,0,0 ; Ю 124303$:.BYTE 0,30,44,102,102,176,102,102,102,0,0 ; А 124316$:.BYTE 0,176,2,2,76,102,102,102,76,0,0 ; Б 124331$:.BYTE 0,102,102,102,102,102,102,102,376,200,0 ; Ц 124344$:.BYTE 0,160,110,104,104,104,104,104,376,202,0 ; Д 124357$:.BYTE 0,176,2,2,76,2,2,2,176,0,0 ; Е 124372$:.BYTE 0,20,174,222,222,222,222,174,20,20,0 ; Ф 124405$:.BYTE 0,176,102,2,2,2,2,2,2,0,0 ; Г 124420$:.BYTE 0,102,102,44,30,30,44,102,102,0,0 ; Х 124433$:.BYTE 0,102,102,142,122,112,106,102,102,0,0 ; И 124446$:.BYTE 30,102,102,142,122,112,106,102,102,0,0 ; Й 124461$:.BYTE 0,102,42,22,16,22,42,102,202,0,0 ; К 124474$:.BYTE 0,160,110,104,104,104,104,104,102,0,0 ; Л 124507$:.BYTE 0,202,306,252,222,202,202,202,202,0,0 ; М 124522$:.BYTE 0,102,102,102,176,102,102,102,102,0,0 ; Н 124535$:.BYTE 0,74,102,102,102,102,102,102,74,0,0 ; О 124550$:.BYTE 0,176,102,102,102,102,102,102,102,0,0 ; П 124563$:.BYTE 0,174,102,102,102,174,110,104,102,0,0 ; Я 124576$:.BYTE 0,76,102,102,102,76,2,2,2,0,0 ; Р 124611$:.BYTE 0,74,102,2,2,2,2,102,74,0,0 ; С 124624$:.BYTE 0,376,222,20,20,20,20,20,20,0,0 ; Т 124637$:.BYTE 0,102,102,102,102,174,100,102,74,0,0 ; У 124652$:.BYTE 0,222,222,124,70,124,222,222,222,0,0 ; Ж 124665$:.BYTE 0,76,102,102,76,102,102,102,76,0,0 ; В 124700$:.BYTE 0,2,2,2,76,102,102,102,76,0,0 ; Ь 124713$:.BYTE 0,202,202,202,236,242,242,242,236,0,0 ; Ы 124726$:.BYTE 0,74,102,100,70,100,100,102,74,0,0 ; З 124741$:.BYTE 0,222,222,222,222,222,222,222,376,0,0 ; Ш 124754$:.BYTE 0,74,102,200,200,370,200,102,74,0,0 ; Э 124767$:.BYTE 0,222,222,222,222,222,222,222,376,200,200 ; Щ 125002$:.BYTE 0,102,102,102,102,174,100,100,100,0,0 ; Ч 125015$:.BYTE 0,7,5,4,174,204,204,204,174,0,0 ; Ъ .EVEN