Difference between revisions of "Uknc ROM disasm - 3"
From Felixl.com
Jump to navigationJump to search| Line 1: | Line 1: | ||
<pre> | <pre> | ||
| + | |||
; ***************************************************************** | ; ***************************************************************** | ||
; * * | ; * * | ||
| Line 9: | Line 10: | ||
; П/п начальной инициализации | ; П/п начальной инициализации | ||
| − | 107744$:JSR R5,173730$ ; Очистка ОЗУ | + | 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 | + | 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 | + | 110070$:ADD R3,R0 |
| − | + | MOV R0,(R1)+ | |
| − | + | SOB R2,110070$ | |
| − | + | MOV #112462$,R0 ; Настройка таблицы адресов п/п управляющих и | |
| − | + | BR 110110$ ; Esc-последовательностей | |
| − | 110104$:MOV (R0)+,13142(R1) | + | 110104$:MOV (R0)+,13142(R1) |
| − | 110110$:MOV (R0)+,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 = адрес ТВ для экрана пользователя | + | 110204$:MOV #22656,R5 ; R5 = адрес ТВ для экрана пользователя |
| − | 110210$:MOV 62(R5),@#23160 ; Указатель на регистр управления отображением | + | 110210$:MOV 62(R5),@#23160 ; Указатель на регистр управления отображением |
| − | + | ; экраном пользователя | |
| − | + | MOV 72(R5),@#23164 ; Режим использования курсора | |
| − | + | INC @#7066 ; Увел. счетчик симв. в буфере (для вывода CLS) | |
| − | 110230$:MOV R5,@#23150 ; Сделать текущей ТВ, адрес которой в R5 | + | 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 ; Число программируемых видеострок (ВС) | + | 110266$:MOV #1131,R2 ; Число программируемых видеострок (ВС) |
| − | + | MOV #7034,R1 ; Адрес конца | |
| − | + | MOV R1,@#7036 | |
| − | 110302$:MOV R1,R0 | + | 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 параметр - начальный видеоадрес | ; 1 параметр - начальный видеоадрес | ||
| Line 104: | Line 105: | ||
; 3 параметр - размер таблицы (число видеострок) | ; 3 параметр - размер таблицы (число видеострок) | ||
; 4 параметр - длина видеостроки | ; 4 параметр - длина видеостроки | ||
| − | 110550$:MOV (R5)+,R0 | + | 110550$:MOV (R5)+,R0 |
| − | + | MOV (R5)+,R1 | |
| − | + | MOV (R5)+,R2 | |
| − | + | MOV (R5)+,R3 | |
| − | 110560$:MOV R0,(R1)+ | + | 110560$:MOV R0,(R1)+ |
| − | + | ADD R3,R0 | |
| − | + | TST (R1)+ | |
| − | + | SOB R2,110560$ | |
| − | + | RTS R5 | |
; П/п установки таблицы ВС на начало видеопамяти | ; П/п установки таблицы ВС на начало видеопамяти | ||
| − | 110572$:ADD 74(R5),PC ; Рулон присутствует ? | + | 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) | + | 110626$:MOV R0,-2(R0) |
| − | + | MOV #6742,@#4536 ; Установка начальных значений | |
| − | + | MOV #2500,@#2476 | |
| − | + | MOV #2500,30(R5) | |
110654$:RETURN | 110654$:RETURN | ||
; П/п формирования таблицы видеопараметров | ; П/п формирования таблицы видеопараметров | ||
| − | 110656$:MOV (R5)+,R0 ; R0 = адрес таблицы в ПЗУ | + | 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 | + | 110712$:MOV (R5)+,R0 |
| − | + | MOV (R5)+,R1 | |
| − | 110716$:MOV (R0)+,R2 ; R2 = число слов | + | 110716$:MOV (R0)+,R2 ; R2 = число слов |
| − | 110720$:MOV (R0)+,(R1)+ | + | 110720$:MOV (R0)+,(R1)+ |
| − | + | SOB R2,110720$ | |
| − | + | RTS R5 | |
; *** ОСНОВНАЯ ПОДПРОГРАММА УПРАВЛЕНИЯ ТЕКСТОВЫМ ТЕРМИНАЛОМ *** | ; *** ОСНОВНАЯ ПОДПРОГРАММА УПРАВЛЕНИЯ ТЕКСТОВЫМ ТЕРМИНАЛОМ *** | ||
| − | 110726$:MOV #174164$,-(SP) ; Занести в стек адреса возвратов | + | 110726$:MOV #174164$,-(SP) ; Занести в стек адреса возвратов |
| − | + | MOV #111126$,-(SP) | |
| − | + | MOV SP,@#23152 | |
| − | + | MOV @#23154,SP | |
| − | + | MOV @#23150,R5 ; R5 = адрес текущей ТВ | |
| − | + | INC @#7066 ; Установить флаг вызова п/п перекл. курсора | |
| − | 110756$:INC @#7064 | + | 110756$:INC @#7064 |
; П/п чтения очередного символа, посланного по каналу 0 | ; П/п чтения очередного символа, посланного по каналу 0 | ||
| − | 110762$:DEC @#7064 | + | 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 | + | 111024$:RETURN ; Да |
| − | 111026$:CMP R0,#33 | + | 111026$:CMP R0,#33 ; Это символ Esc ? |
| − | + | BEQ 111044$ ; Да | |
| − | + | ASL R0 ; Вызов п/п обработки управляющего символа | |
| − | + | CALL @13142(R0) | |
| − | + | BR 110762$ | |
| − | 111044$:JMP 113544$ | + | 111044$:JMP 113544$ |
| − | 111050$:ADD @#22546,PC ; Была попытка передачи символа ? | + | 111050$:ADD @#22546,PC ; Была попытка передачи символа ? |
| − | + | BR 111062$ ; Нет | |
| − | + | TRAP 4 | |
| − | + | BR 110756$ | |
| − | 111062$:MOV @#7056,R0 ; R0 = указатель текущей задачи | + | 111062$:MOV @#7056,R0 ; R0 = указатель текущей задачи |
| − | + | MOV #110726$,22(R0) ; Запомнить адрес возврата | |
| − | + | MOV SP,@#23154 | |
| − | + | MOV @#23152,SP | |
| − | + | CMP (SP)+,(SP)+ | |
| − | + | JMP 174164$ ; Переход на цикл вызова подпрограмм | |
| − | 111112$:ADD @#22546 | + | 111112$:ADD @#22546,PC ; Была попытка передачи символа ? |
| − | + | RETURN ; Нет | |
| − | + | TRAP 4 | |
| − | + | INC @#7064 | |
| − | 111126$:DEC @#7064 | + | 111126$:DEC @#7064 ; Уменьшить счетчик символов |
| − | + | BEQ 111112$ ; Символов нет | |
| − | + | TST @#7060 ; Были нажаты клавиши ? | |
| − | + | BEQ 111204$ ; Нет | |
| − | + | RETURN | |
; Точка входа в подпрограмму | ; Точка входа в подпрограмму | ||
| − | 111144$:INC @#7066 | + | 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 ; Прочесть символ | + | 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 | + | 111252$:ASL R0 ; Вызов п/п обработки управляющего символа |
| − | + | JMP @13142(R0) | |
| − | 111260$:CMPB R0,#77 | + | 111260$:CMPB R0,#77 ; Это символы "A-Z,[,\,],^,_,a-z,{,|,},~" ? |
| − | + | BLOS 111272$ ; Нет | |
| − | + | BIS @#22556,R0 ; Подстройка алфавита | |
| − | 111272$:ASL 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 | + | 111322$:.REPT 12 ; Цикл рисования символа |
| − | + | MOVB (R1)+,R4 | |
| − | + | MOV R4,@R3 | |
| − | + | ADD R0,@R2 | |
| − | + | .ENDR | |
| − | + | MOVB (R1)+,R4 | |
| − | + | MOV R4,@R3 | |
| − | 111422$:INC @R5 | + | 111422$:INC @R5 ; Передвинуть указатель на следующий адрес |
| − | + | DEC 16(R5) ; Уменьшить счетчик оставшихся позиций | |
| − | + | BNE 111624$ ; Еще не конец строки | |
| − | + | MOV 22(R5),@R5 ; Формирование адреса начала следующей строки | |
| − | + | MOV 4(R5),16(R5) | |
| − | 111444$:ADD #54,32(R5) | + | 111444$:ADD #54,32(R5) |
| − | + | CMP 32(R5),26(R5) | |
| − | + | BNE 111470$ | |
| − | + | MOV 24(R5),32(R5) | |
| − | 111470$:ADD @32(R5),@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 = кол-во оставшихся видеострок для скрол. | + | 111544$:MOV @#23170,R0 ; R0 = кол-во оставшихся видеострок для скрол. |
| − | + | BEQ 111574$ ; Их нет | |
| − | + | BPL 111556$ | |
| − | + | NEG R0 | |
| − | 111556$:CMP R0,#14 | + | 111556$:CMP R0,#14 ; <= 12(10) ? |
| − | + | BLOS 111614$ ; Да | |
| − | + | TRAP 0 ; Вызов цикла подпрограмм | |
| − | + | MOV @#23150,R5 ; R5 = адрес текущей ТВ | |
| − | + | BR 111544$ | |
| − | 111574$:CLR @#23164 | + | 111574$:CLR @#23164 ; Запретить курсор |
| − | + | MOV #2,@#7134 | |
| − | + | MOVB #177,@23160 ; Убрать курсор с экрана | |
| − | 111614$:CALL 113344$ | + | 111614$:CALL 113344$ ; Очистить освободившуюся строку |
| − | + | ADD (SP)+,@#23170 ; Осуществить скроллинг | |
111624$:RETURN | 111624$:RETURN | ||
| − | 111626$:JMP 114316$ | + | 111626$:JMP 114316$ ; Перекинуть курсор на верх экрана |
; П/п выключения курсора | ; П/п выключения курсора | ||
| − | 111632$:CLR @#23164 | + | 111632$:CLR @#23164 ; Запретить использование курсора |
| − | + | MOV 60(R5),R0 ; Выключение курсора | |
| − | + | BIC #1,6(R0) | |
| − | + | BIC #1,52(R0) | |
| − | + | RETURN | |
; Обработка режима ПОДЧЕРКИВАНИЕ | ; Обработка режима ПОДЧЕРКИВАНИЕ | ||
| − | 111660$:MOV #12,R0 | + | 111660$:MOV #12,R0 ; R0 = число байт для посылки в видео |
| − | 111664$:MOVB (R1)+,R4 ; Рисование символа | + | 111664$:MOVB (R1)+,R4 ; Рисование символа |
| − | + | MOV R4,@R3 | |
| − | + | ADD 10(R5),@R2 | |
| − | + | SOB R0,111664$ | |
| − | + | MOV #377,@R3 ; Подчеркнуть символ | |
| − | + | BR 111422$ | |
; Обработка режима ИНВЕРСИЯ | ; Обработка режима ИНВЕРСИЯ | ||
| − | 111704$:MOV #13,R0 | + | 111704$:MOV #13,R0 |
| − | + | BR 111716$ | |
| − | 111712$:ADD 10(R5),@R2 | + | 111712$:ADD 10(R5),@R2 |
| − | 111716$:MOVB (R1)+,R4 | + | 111716$:MOVB (R1)+,R4 |
| − | + | COM R4 ; Инвертировать байт | |
| − | + | MOV R4,@R3 | |
| − | + | SOB R0,111712$ | |
| − | + | BR 111422$ | |
; Обработка режима ИСУ | ; Обработка режима ИСУ | ||
| − | 111730$:MOV #3,-(SP) ; Формирование начальных значений | + | 111730$:MOV #3,-(SP) ; Формирование начальных значений |
| − | + | MOV R0,-(SP) | |
| − | + | MOV R0,-(SP) | |
| − | + | MOV #74,R0 ; Вывод "<" | |
| − | + | CALL 111272$ | |
| − | + | CLR R0 ; Цикл вывода трех цифр | |
| − | + | BR 111762$ | |
| − | 111754$:CLR R0 | + | 111754$:CLR R0 |
| − | + | ROLB @SP | |
| − | + | ROLB R0 | |
| − | 111762$:ROLB @SP | + | 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)+ | + | 112034$:TST (SP)+ |
| − | + | RETURN | |
; ТАБЛИЦЫ ВИДЕОПАРАМЕТРОВ | ; ТАБЛИЦЫ ВИДЕОПАРАМЕТРОВ | ||
| Line 318: | Line 319: | ||
; ТВ для верхней информационной строки | ; ТВ для верхней информационной строки | ||
| − | 112040$:.WORD 34 | + | 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 | + | 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 | + | 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 | + | 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-последовательностей | ; Таблица описания адресов п/п исполнения управляющих и Esc-последовательностей | ||
| − | 112462$:.WORD 16,113220$ ; Ctrl-G | + | 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-ПОСЛЕДОВАТЕЛЬНОСТЕЙ | ; ПОДПРОГРАММЫ ОБРАБОТКИ УПРАВЛЯЮЩИХ И ESC-ПОСЛЕДОВАТЕЛЬНОСТЕЙ | ||
; П/п обработки Ctrl-G | ; П/п обработки Ctrl-G | ||
| − | 113220$:BIS #600,@#177716 ; Включить звуковой сигнал (частота | + | 113220$:BIS #600,@#177716 ; Включить звуковой сигнал (частота 500 Гц) |
| − | + | MOV #20,@#7046 ; Установить время (0.32 сек) | |
| − | + | RETURN | |
; П/п обработки Ctrl-L, Esc 225 | ; П/п обработки Ctrl-L, Esc 225 | ||
| − | 113236$:MOV @50(R5),-(SP) ; Сохранение содержимого рег. управления цветом | + | 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$): | ; Параметры (для точки входа 113376$): | ||
| Line 457: | Line 458: | ||
; R2 - длина в байтах; | ; R2 - длина в байтах; | ||
; R3 - число видеострок; | ; R3 - число видеострок; | ||
| − | 113344$:MOV @32(R5),R1 | + | 113344$:MOV @32(R5),R1 |
| − | + | ADD 22(R5),R1 | |
| − | 113354$:MOV #13,R3 | + | 113354$:MOV #13,R3 |
| − | + | BR 113372$ | |
| − | 113362$:MOV 2(R5),R1 | + | 113362$:MOV 2(R5),R1 |
| − | + | MOV 14(R5),R3 | |
| − | 113372$:MOV 4(R5),R2 | + | 113372$:MOV 4(R5),R2 |
| − | 113376$:MOV 44(R5),@#177020 ; Загрузка в регистры кода фона цвета фона | + | 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 | + | 113440$:MOV @SP,R2 ; R2 = длина очищаемой строки |
| − | + | SUB R2,@R4 ; Вычесть длину строки из адреса планов | |
| − | + | ADD 10(R5),@R4 ; Прибавить истинную длину | |
| − | 113450$:MOV R0,@R1 | + | 113450$:MOV R0,@R1 ; Очистить байт строки |
| − | + | INC @R4 ; Переход к следующему адресу | |
| − | + | SOB R2,113450$ ; Цикл по длине очищаемой части строки | |
| − | + | SOB R3,113440$ ; Цикл по числу видеострок | |
| − | + | TST (SP)+ | |
| − | 113462$:MOV 40(R5),@#177020 ; Загр. в регистры кода фона цвета знакоместа | + | 113462$:MOV 40(R5),@#177020 ; Загр. в регистры кода фона цвета знакоместа |
| − | + | MOV 40(R5),@#177022 | |
| − | + | RETURN | |
| − | 113500$:MUL R2,R3 | + | 113500$:MUL R2,R3 ; R3 = длина строки * число видеострок |
| − | 113502$:MOV R0,@R1 | + | 113502$:MOV R0,@R1 ; Цикл очистки |
| − | + | INC @R4 | |
| − | + | SOB R3,113502$ | |
| − | + | BR 113462$ | |
; Значения для загрузки в регистры кода фона (177020 и 177022) | ; Значения для загрузки в регистры кода фона (177020 и 177022) | ||
| − | 113512$:.WORD 0,10421,21042,31463,42104,52525,63146,73567 | + | 113512$:.WORD 0,10421,21042,31463,42104,52525,63146,73567 |
; П/п обработки Ctrl-[ (Esc) | ; П/п обработки Ctrl-[ (Esc) | ||
| − | 113532$:MOV SP,@#23152 | + | 113532$:MOV SP,@#23152 |
| − | + | MOV #2,@#23174 ; Активировать проверку на управляющие символы | |
| − | 113544$:MOV #1000,SP | + | 113544$:MOV #1000,SP |
| − | + | CALL 110762$ ; Прочесть символ | |
| − | + | ASL R0 ; Вызов п/п обработки Esc-последовательности | |
| − | + | CALL @13142(R0) | |
| − | + | CLR @#23174 | |
| − | + | MOV @#23152,SP | |
| − | + | RETURN | |
; Точка входа при исполнении Esc %!3 в графическом режиме | ; Точка входа при исполнении Esc %!3 в графическом режиме | ||
| − | 113574$:MOV 2(SP),R0 | + | 113574$:MOV 2(SP),R0 |
| − | + | BR 113620$ | |
; П/п обработки Esc % | ; П/п обработки Esc % | ||
| − | 113602$:CALL 110762$ | + | 113602$:CALL 110762$ ; Прочесть символ |
| − | + | CMPB R0,#41 ; Это "!" ? | |
| − | + | BNE 113632$ ; Нет | |
| − | + | CALL 110762$ | |
| − | 113620$:BIC #177774,R0 | + | 113620$:BIC #177774,R0 |
| − | + | ASL R0 ; Вызов соответствующей п/п | |
| − | + | CALL @113634$(R0) | |
113632$:RETURN | 113632$:RETURN | ||
; Адреса п/п, вызывающиеся при обработке Esc %! | ; Адреса п/п, вызывающиеся при обработке Esc %! | ||
| − | 113634$:.WORD 113644$,113670$,113670$,113670$ | + | 113634$:.WORD 113644$,113670$,113670$,113670$ |
; П/п обработки Esc %!0 (переход в графический режим) | ; П/п обработки Esc %!0 (переход в графический режим) | ||
| − | 113644$:CALL 111632$ | + | 113644$:CALL 111632$ ; Выключение курсора |
| − | + | CLR @#23174 ; Аннулировать проверку на управляющие символы | |
| − | + | CALL @#135436$ ; Вызов п/п управления графикой | |
| − | + | MOV 72(R5),@#23164 | |
| − | + | RETURN | |
; П/п обработки Ctrl-W, Esc %! (1-3) | ; П/п обработки Ctrl-W, Esc %! (1-3) | ||
| − | 113670$:JSR R5,105430$ ; Перекодировать клавиши под VT-52 | + | 113670$:JSR R5,105430$ ; Перекодировать клавиши под VT-52 |
| − | + | .WORD 106634$ | |
| − | + | MOV #114226$,@#13162; При Ctrl-H выполнять шаг назад | |
| − | + | CLR @#7154 ; Установить пункт VT-52 в меню УСТ | |
| − | + | RETURN | |
; П/п обработки Esc E | ; П/п обработки Esc E | ||
| − | 113712$:JSR R5,105430$ ; Перекодировать клавиши под 15ИЭ-00-013 | + | 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) ; Сохранить адрес текущей ТВ | + | 113736$:MOV R5,-(SP) ; Сохранить адрес текущей ТВ |
| − | + | CALL 110204$ ; Загрузить регистры | |
| − | + | MOV (SP)+,R5 ; Восстановить адрес ТВ | |
| − | + | RETURN | |
; П/п обработки Esc = | ; П/п обработки Esc = | ||
| − | 113750$:JSR R5,105346$ ; Установить режим ДКЛ | + | 113750$:JSR R5,105346$ ; Установить режим ДКЛ |
| − | + | .WORD 107120$,11014 | |
| − | + | EMT 52 ; Вывести надпись "ДКЛ" | |
| − | + | .WORD 107576$ | |
| − | + | RETURN | |
; П/п обработки Esc > | ; П/п обработки Esc > | ||
| − | 113766$:JSR R5,105400$ ; Сбросить режим ДКЛ | + | 113766$:JSR R5,105400$ ; Сбросить режим ДКЛ |
| − | + | .WORD 107120$,11014 | |
| − | + | EMT 52 ; Стереть надпись "ДКЛ" | |
| − | + | .WORD 107567$ | |
| − | + | RETURN | |
114004$:RETURN | 114004$:RETURN | ||
; П/п обработки Esc [ | ; П/п обработки Esc [ | ||
| − | 114006$:CALL 110762$ | + | 114006$:CALL 110762$ ; Чтение символа |
| − | + | CMP R0,#62 ; Это "2" ? | |
| − | + | BEQ 114050$ ; Да | |
| − | + | CMP R0,#77 ; Это "?" ? | |
| − | + | BEQ 114046$ ; Да | |
| − | + | BR 114034$ | |
| − | 114030$:CALL 110762$ | + | 114030$:CALL 110762$ |
| − | 114034$:CMPB R0,#162 | + | 114034$:CMPB R0,#162 ; Это "r" ? |
| − | + | BNE 114030$ ; Нет | |
| − | + | CALL 113236$ ; Очистка экрана | |
114046$:RETURN | 114046$:RETURN | ||
| − | 114050$:CALL 110762$ | + | 114050$:CALL 110762$ |
| − | + | CMP R0,#150 ; Это "h" ? | |
| − | + | BNE 114072$ ; Нет | |
| − | + | MOV #2,@#7232 ; Запрет передачи одиночных ASCII-кодов клав. | |
| − | + | BR 114104$ | |
| − | 114072$:CMP R0,#154 | + | 114072$:CMP R0,#154 ; Это "l" ? |
| − | + | BNE 114104$ ; Нет | |
| − | + | CLR @#7232 ; Разрешение передачи одиночных ASCII-кодов | |
114104$:RETURN | 114104$:RETURN | ||
; П/п обработки Ctrl-\, Esc A, Esc I, Esc 200 | ; П/п обработки Ctrl-\, Esc A, Esc I, Esc 200 | ||
| − | 114106$:SUB @32(R5),@R5 ; Вычесть адрес начала видеостроки | + | 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 ; Прибавить к положению курсора тек. строку | + | 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) | + | 114204$:INC 20(R5) ; Количество оставшихся строк ++ |
| − | + | RETURN | |
| − | 114212$:JMP 114324$ | + | 114212$:JMP 114324$ ; Позиционирование на низ текущей колонки |
; П/п обработки Ctrl-J, Ctrl-], Esc B, Esc 201 | ; П/п обработки Ctrl-J, Ctrl-], Esc B, Esc 201 | ||
| − | 114216$:SUB @32(R5),@R5 ; Вычесть адрес начала видеостроки | + | 114216$:SUB @32(R5),@R5 ; Вычесть адрес начала видеостроки |
| − | + | JMP 111444$ ; Перемещение вниз | |
; П/п обработки Ctrl-H (в системе команд VT-52), Ctrl-Z, Esc D, Esc 202 | ; П/п обработки Ctrl-H (в системе команд VT-52), Ctrl-Z, Esc D, Esc 202 | ||
| − | 114226$:CMP 16(R5),4(R5) ; Курсор в начале строки ? | + | 114226$:CMP 16(R5),4(R5) ; Курсор в начале строки ? |
| − | + | BEQ 114246$ ; Да | |
| − | + | DEC @R5 ; Уменьшить позицию в строке | |
| − | + | INC 16(R5) ; Увеличить количество оставшихся позиций | |
| − | + | RETURN | |
| − | 114246$:CALL 114356$ | + | 114246$:CALL 114356$ ; Позиционирование в конец строки |
| − | + | BR 114106$ ; На одну строку вверх | |
; П/п обработки Ctrl-Y, Esc C, Esc 203 | ; П/п обработки Ctrl-Y, Esc C, Esc 203 | ||
| − | 114254$:JMP 111422$ | + | 114254$:JMP 111422$ ; Перемещение курсора на одну позицию вправо |
; П/п обработки Esc 220 | ; П/п обработки Esc 220 | ||
| − | 114260$:CALL 114254$ | + | 114260$:CALL 114254$ ; Вправо |
| − | + | BR 114106$ ; Вверх | |
; П/п обработки Esc 221 | ; П/п обработки Esc 221 | ||
| − | 114266$:CALL 114226$ | + | 114266$:CALL 114226$ ; Влево |
| − | + | BR 114216$ ; Вниз | |
; П/п обработки Esc 222 | ; П/п обработки Esc 222 | ||
| − | 114274$:CALL 114106$ | + | 114274$:CALL 114106$ ; Вверх |
| − | + | BR 114226$ ; Влево | |
; П/п обработки Esc 223 | ; П/п обработки Esc 223 | ||
| − | 114302$:CALL 114216$ | + | 114302$:CALL 114216$ ; Вниз |
| − | + | BR 114254$ ; Вправо | |
; П/п обработки Ctrl-U, Esc 230 | ; П/п обработки Ctrl-U, Esc 230 | ||
| − | 114310$:CALL 114336$ | + | 114310$:CALL 114336$ ; В начало строки |
| − | + | BR 114216$ ; Вниз | |
; П/п обработки Esc 204 | ; П/п обработки Esc 204 | ||
| − | 114316$:CLR R0 | + | 114316$:CLR R0 ; Номер начальной строки |
| − | + | JMP 115720$ ; Позиционирование | |
; П/п обработки Esc 205 | ; П/п обработки Esc 205 | ||
| − | 114324$:MOV 12(R5),R0 ; R0 = номер последней строки | + | 114324$:MOV 12(R5),R0 ; R0 = номер последней строки |
| − | + | DEC R0 | |
| − | + | JMP 115720$ ; Позиционирование | |
; П/п обработки Ctrl-M, Esc 206 | ; П/п обработки Ctrl-M, Esc 206 | ||
| − | 114336$:MOV 22(R5),@R5 ; Позиционирование в начало строки | + | 114336$:MOV 22(R5),@R5 ; Позиционирование в начало строки |
| − | + | ADD @32(R5),@R5 | |
| − | + | MOV 4(R5),16(R5) ; Количество оставшихся позиций = длина строки | |
| − | + | RETURN | |
; П/п обработки Esc 207 | ; П/п обработки Esc 207 | ||
| − | 114356$:MOV 4(R5),@R5 ; Позиционирование в конец строки | + | 114356$:MOV 4(R5),@R5 ; Позиционирование в конец строки |
| − | + | ADD 22(R5),@R5 | |
| − | + | DEC @R5 | |
| − | + | ADD @32(R5),@R5 | |
| − | + | MOV #1,16(R5) ; Осталась одна позиция | |
| − | + | RETURN | |
114404$:RETURN | 114404$:RETURN | ||
114406$:RETURN | 114406$:RETURN | ||
; П/п обработки Ctrl-T, Esc 212 | ; П/п обработки Ctrl-T, Esc 212 | ||
| − | 114410$:MOV 16(R5),R0 ; R0 = количество оставшихся позиций | + | 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 | + | 114440$:MOV R0,R2 ; R2 = число перемещаемых символов |
| − | + | MOV R1,@R3 | |
| − | + | BR 114452$ | |
| − | 114446$:ADD #2,@R3 | + | 114446$:ADD #2,@R3 ; Цикл перемещения символов |
| − | 114452$:TST @R4 | + | 114452$:TST @R4 |
| − | + | DEC @R3 | |
| − | + | CLR @R4 | |
| − | + | SOB R2,114446$ | |
| − | + | ADD 10(R5),R1 ; Переход к следующей видеостроке | |
| − | + | DEC @SP | |
| − | + | BNE 114440$ | |
| − | + | TST (SP)+ | |
| − | 114474$:MOV @R5,R1 | + | 114474$:MOV @R5,R1 |
| − | + | ADD R0,R1 ; R1 = адрес конечного символа | |
| − | + | MOV #1,R2 ; R2 = 1 (длина очищаемой части строки) | |
| − | + | MOV #13,R3 ; Число очищаемых видеострок | |
| − | + | JMP 113376$ ; Очистка | |
; П/п обработки Ctrl-S, Esc 213 | ; П/п обработки Ctrl-S, Esc 213 | ||
| − | 114514$:MOV 16(R5),R0 ; R0 = количество оставшихся позиций | + | 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 | + | 114546$:MOV R0,R2 ; R2 = число перемещаемых символов |
| − | + | MOV R1,@R3 | |
| − | + | BR 114560$ | |
| − | 114554$:SUB #2,@R3 | + | 114554$:SUB #2,@R3 ; Цикл перемещения символов |
| − | 114560$:TST @R4 | + | 114560$:TST @R4 |
| − | + | INC @R3 | |
| − | + | CLR @R4 | |
| − | + | SOB R2,114554$ | |
| − | + | ADD 10(R5),R1 ; Переход к следующей видеостроке | |
| − | + | DEC @SP | |
| − | + | BNE 114546$ | |
| − | + | TST (SP)+ | |
| − | 114602$:MOV @R5,R1 | + | 114602$:MOV @R5,R1 ; R1 = текущий видеоадрес |
| − | + | MOV #1,R2 ; R2 = длина очищаемой части строки | |
| − | + | MOV #13,R3 ; R3 = число видеострок | |
| − | + | JMP 113376$ ; Очистка | |
; П/п обработки Ctrl-V, Esc 214 | ; П/п обработки Ctrl-V, Esc 214 | ||
| − | 114620$:DEC 20(R5) | + | 114620$:DEC 20(R5) ; Уменьшить количество оставшихся строк |
| − | + | SUB #13,@#23170 ; Скроллинг вниз | |
| − | + | JMP 114106$ ; Курсор вверх | |
; П/п обработки Ctrl-R, Esc 215 | ; П/п обработки Ctrl-R, Esc 215 | ||
| − | 114636$:INC 20(R5) | + | 114636$:INC 20(R5) ; Увеличить количество оставшихся строк |
| − | + | ADD #13,@#23170 ; Скроллинг вверх | |
| − | + | JMP 114216$ ; Курсор вниз | |
114654$:RETURN | 114654$:RETURN | ||
114656$:RETURN | 114656$:RETURN | ||
; П/п обработки Ctrl-H (в системе команд 15ИЭ-00-013), Esc H, Esc 224 | ; П/п обработки Ctrl-H (в системе команд 15ИЭ-00-013), Esc H, Esc 224 | ||
| − | 114660$:MOV 30(R5),32(R5) ; Текущий адрес списка ВС - верх экрана | + | 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 | ; П/п обработки Esc J, Esc 226 | ||
| − | 114714$:CALL 114772$ | + | 114714$:CALL 114772$ ; Очистка конца строки |
| − | + | MOV 20(R5),-(SP) ; Количество оставшихся строк | |
| − | + | MOV 32(R5),R1 ; R1 = текущий адрес списка ВС | |
| − | + | BR 114762$ | |
| − | 114732$:ADD #54,R1 | + | 114732$:ADD #54,R1 ; Перейти к следующей строке |
| − | + | CMP R1,26(R5) ; Дошли до конца экрана ? | |
| − | + | BNE 114750$ ; Нет | |
| − | + | MOV 24(R5),R1 ; R1 = начальный адрес списка ВС | |
| − | 114750$:MOV R1,-(SP) | + | 114750$:MOV R1,-(SP) |
| − | + | MOV @R1,R1 | |
| − | + | CALL 113354$ ; Очистка | |
| − | + | MOV (SP)+,R1 | |
| − | 114762$:DEC @SP | + | 114762$:DEC @SP |
| − | + | BNE 114732$ | |
| − | + | TST (SP)+ | |
| − | + | RETURN | |
; П/п обработки Ctrl-K, Esc K, Esc 227 | ; П/п обработки Ctrl-K, Esc K, Esc 227 | ||
| − | 114772$:MOV @R5,R1 | + | 114772$:MOV @R5,R1 ; R1 = текущий видеоадрес |
| − | + | MOV 16(R5),R2 ; R2 = количество оставшихся позиций в строке | |
| − | + | MOV #13,R3 ; R3 = число видеострок | |
| − | + | JMP 113376$ ; Очистка | |
; П/п обработки Esc P | ; П/п обработки Esc P | ||
| − | 115010$:CLR -(SP) | + | 115010$:CLR -(SP) |
| − | 115012$:CALL 110762$ | + | 115012$:CALL 110762$ ; Чтение символа |
| − | + | MOV R0,-(SP) ; Сохранение его в стеке | |
| − | + | CMPB R0,#73 ; Это ";" ? | |
| − | + | BNE 115012$ | |
| − | 115026$:CALL 110762$ | + | 115026$:CALL 110762$ |
| − | + | MOV R0,-(SP) | |
| − | + | CMPB R0,#73 ; Это ";" ? | |
| − | + | BEQ 115424$ ; Да | |
| − | + | CMPB R0,#174 ; Это "|" ? | |
| − | + | BNE 115026$ | |
| − | 115050$:TST (SP)+ | + | 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 ; Цикл очистки назначений клавиш | + | 115072$:MOV (R1)+,R0 ; Цикл очистки назначений клавиш |
| − | + | MOV #11140,7232(R0) | |
| − | + | SOB R2,115072$ | |
| − | + | MOV #11142,@#13140 ; Установка указателя на начало буфера | |
| − | 115112$:CLR -(SP) | + | 115112$:CLR -(SP) |
| − | 115114$:CALL 110762$ | + | 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 | + | 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$ | + | 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 | + | 115270$:CLRB @13140 ; Пометить конец строки |
| − | + | INC @#13140 | |
| − | + | BR 115112$ | |
| − | 115302$:TST (SP)+ | + | 115302$:TST (SP)+ |
| − | 115304$:CLRB @13140 | + | 115304$:CLRB @13140 |
| − | + | INC @#13140 | |
| − | + | CALL 110762$ | |
| − | + | RETURN | |
; П/п преобразования HEX-цифры в двоичное представление | ; П/п преобразования HEX-цифры в двоичное представление | ||
| − | 115322$:CMP R0,#101 | + | 115322$:CMP R0,#101 ; Цифра в диапазоне "A-F" ? |
| − | + | BLO 115334$ ; Нет | |
| − | + | ADD #11,R0 | |
| − | 115334$:BIC #177760,R0 | + | 115334$:BIC #177760,R0 |
| − | + | RETURN | |
; Смещения для клавиш К1-К25 в таблице раскладки клавиатуры | ; Смещения для клавиш К1-К25 в таблице раскладки клавиатуры | ||
| − | 115342$:.WORD 10,12,14,20,22,270,272,274,300,302,550,552,554,560,562 | + | 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 = код симв., шрифт кот. перепрограммир. | + | 115424$:MOV 2(SP),R0 ; R0 = код симв., шрифт кот. перепрограммир. |
| − | 115430$:TST (SP)+ | + | 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$ | + | 115460$:CALL 110762$ ; Чтение символа |
| − | + | CMP R0,#33 ; Это Escape ? | |
| − | + | BEQ 115550$ ; Да | |
| − | + | CMP R0,#100 ; Это "@" ? | |
| − | + | BNE 115460$ ; Нет | |
| − | 115500$:MOV @SP,@2(SP) ; Сохранить адрес рисунка в таблице | + | 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)+ | + | 115550$:CMP (SP)+,(SP)+ |
| − | + | RETURN | |
; П/п программирования заданного количества байт в рисунке символа | ; П/п программирования заданного количества байт в рисунке символа | ||
| − | 115554$:MOV #10,-(SP) ; Длина байта | + | 115554$:MOV #10,-(SP) ; Длина байта |
| − | 115560$:MOV R5,-(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 | + | 115604$:ASR R0 ; Цикл программирования |
| − | + | RORB (R3)+ | |
| − | + | SOB R4,115604$ | |
| − | + | DEC @SP | |
| − | + | BNE 115560$ | |
| − | 115616$:ADD (R5)+,4(SP) ; Перейти к следующей области рисунка | + | 115616$:ADD (R5)+,4(SP) ; Перейти к следующей области рисунка |
| − | + | TST (SP)+ | |
| − | + | RTS R5 | |
; П/п обработки Esc Y, Esc 231 | ; П/п обработки Esc Y, Esc 231 | ||
| − | 115626$:CALL 110762$ | + | 115626$:CALL 110762$ ; Прочесть символ |
| − | + | SUB #40,R0 | |
| − | + | BMI 115652$ | |
| − | + | CMP R0,12(R5) ; Координата Y превышает диапазон ? | |
| − | + | BHIS 115652$ ; Да | |
| − | + | CALL 115720$ ; Позиционирование по координате Y | |
| − | 115652$:CALL 110762$ | + | 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 | 115716$:RETURN | ||
; П/п позиционирования по координате Y | ; П/п позиционирования по координате Y | ||
| − | 115720$:SUB @32(R5),@R5 ; @R5 - оставить координату X | + | 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) - текущий адрес списка видеострок | + | 115766$:MOV R1,32(R5) ; 32(R5) - текущий адрес списка видеострок |
| − | + | ADD @R1,@R5 ; @R5 - адр.начала видеопамяти для выв.симв. | |
| − | + | RETURN | |
; П/п обработки Esc Z | ; П/п обработки Esc Z | ||
| − | 115776$:MOV #116010$,R0 ; R0 = адрес символьной строки | + | 115776$:MOV #116010$,R0 ; R0 = адрес символьной строки |
| − | + | CALL 104160$ ; Передача адреса строки п/п обсл. клавиатуры | |
| − | + | RETURN | |
| − | 116010$:.ASCIZ <33>"/Z" ; Терминал VT-100 в режиме VT-52 | + | 116010$:.ASCIZ <33>"/Z" ; Терминал VT-100 в режиме VT-52 |
| − | + | .EVEN | |
116014$:RETURN | 116014$:RETURN | ||
116016$:RETURN | 116016$:RETURN | ||
116020$:RETURN | 116020$:RETURN | ||
; П/п обработки Esc Граф-@ | ; П/п обработки Esc Граф-@ | ||
| − | 116022$:ADD @#23176,PC ; Установлен режим отмены ? | + | 116022$:ADD @#23176,PC ; Установлен режим отмены ? |
| − | + | BR 116036$ ; Нет | |
| − | + | MOV 36(R5),R0 ; R0 = предыдущий цвет символа | |
| − | + | BR 116046$ | |
| − | 116036$:CALL 110762$ | + | 116036$:CALL 110762$ ; Прочесть символ |
| − | + | BIC #177770,R0 | |
| − | 116046$:MOV R0,@#177016 ; Положить номер цвета в регистр кода цвета | + | 116046$:MOV R0,@#177016 ; Положить номер цвета в регистр кода цвета |
| − | 116052$:MOV 34(R5),36(R5) ; Запомнить предыдущий цвет символа | + | 116052$:MOV 34(R5),36(R5) ; Запомнить предыдущий цвет символа |
| − | + | MOV R0,34(R5) ; Сохранить номер цвета в ТВ | |
| − | + | RETURN | |
; П/п обработки Esc Граф-A | ; П/п обработки Esc Граф-A | ||
| − | 116066$:ADD @#23176,PC ; Установлен режим отмены ? | + | 116066$:ADD @#23176,PC ; Установлен режим отмены ? |
| − | + | BR 116102$ ; Нет | |
| − | + | MOV 42(R5),R0 ; R0 = предыдущий цвет знакоместа | |
| − | + | BR 116120$ | |
| − | 116102$:CALL 110762$ | + | 116102$:CALL 110762$ ; Прочесть символ |
| − | + | BIC #177770,R0 | |
| − | + | ASL R0 | |
| − | + | MOV 113512$(R0),R0 ; R0 = код фонового цвета | |
| − | 116120$:MOV R0,@#177020 ; Положить номер фон. цвета в рег. кода фона | + | 116120$:MOV R0,@#177020 ; Положить номер фон. цвета в рег. кода фона |
| − | + | MOV R0,@#177022 | |
| − | 116130$:MOV 40(R5),42(R5) ; Запомнить предыдущий цвет знакоместа | + | 116130$:MOV 40(R5),42(R5) ; Запомнить предыдущий цвет знакоместа |
| − | + | MOV R0,40(R5) ; Сохранить номер цвета знакоместа в ТВ | |
| − | + | RETURN | |
; П/п обработки Esc Граф-B | ; П/п обработки Esc Граф-B | ||
| − | 116144$:ADD @#23176,PC ; Установлен режим отмены ? | + | 116144$:ADD @#23176,PC ; Установлен режим отмены ? |
| − | + | BR 116160$ ; Нет | |
| − | + | MOV 46(R5),R0 ; R0 = предыдущий цвет фона | |
| − | + | BR 116046$ | |
| − | 116160$:CALL 110762$ | + | 116160$:CALL 110762$ ; Прочесть символ |
| − | + | BIC #177770,R0 | |
| − | 116170$:ASL R0 | + | 116170$:ASL R0 |
| − | + | MOV 113512$(R0),R0 ; R0 = код фонового цвета | |
| − | + | MOV 44(R5),46(R5) ; Запомнить предыдущий цвет фона | |
| − | + | MOV R0,44(R5) ; Сохранить номер цвета фона в ТВ | |
| − | + | RETURN | |
; П/п обработки Esc Граф-G | ; П/п обработки Esc Граф-G | ||
| − | 116212$:CALL 110762$ | + | 116212$:CALL 110762$ ; Прочесть символ |
| − | + | BIC #177770,R0 ; R0 = номер цвета курсора | |
| − | + | MOVB R0,@64(R5) ; Изменить цвет курсора | |
| − | 116226$:MOV R0,70(R5) ; Сохранить цвет курсора в ТВ | + | 116226$:MOV R0,70(R5) ; Сохранить цвет курсора в ТВ |
| − | + | RETURN | |
; П/п обработки Esc Граф-C | ; П/п обработки Esc Граф-C | ||
| − | 116234$:ADD @#23176,PC ; Установлен режим отмены ? | + | 116234$:ADD @#23176,PC ; Установлен режим отмены ? |
| − | + | BR 116254$ ; Нет | |
| − | + | CLR @#22554 ; Сбросить индикатор режима инверсии(подч.) | |
| − | + | EMT 52 ; Очистить надпись "ИНВ" ("ПОДЧ") | |
| − | + | .WORD 107605$ | |
| − | + | BR 116334$ | |
| − | 116254$:MOV #<111704$-111322$>,56(R5) ; Установить режим инверсии (362) | + | 116254$:MOV #<111704$-111322$>,56(R5) ; Установить режим инверсии (362) |
| − | + | INCB @#22554 ; Установить индикатор режима инверсии | |
| − | + | EMT 52 ; Высветить надпись "ИНВ" | |
| − | + | .WORD 107614$ | |
| − | + | RETURN | |
; П/п обработки Esc Граф-D | ; П/п обработки Esc Граф-D | ||
| − | 116274$:ADD @# | + | 116274$:ADD @#23176,PC ; Установлен режим отмены ? |
| − | + | BR 116314$ | |
| − | + | CLR @#22554 ; Сбросить индикатор режима подчеркивания(инв.) | |
| − | + | EMT 52 ; Погасить надпись "ПОДЧ" ("ИНВ") | |
| − | + | .WORD 107605$ | |
| − | + | BR 116334$ | |
| − | 116314$:MOV #<111660$-111322$>,56(R5) ; Установить режим подч. (336) | + | 116314$:MOV #<111660$-111322$>,56(R5) ; Установить режим подч. (336) |
| − | + | INCB @#22555 ; Установить индикатор режима подчеркивания | |
| − | + | EMT 52 ; Высветить надпись "ПОДЧ" | |
| − | + | .WORD 107623$ | |
| − | + | RETURN | |
| − | 116334$:CLR 56(R5) | + | 116334$:CLR 56(R5) ; Установить нормальный режим |
| − | + | TSTB @#22554 ; Ранее был установлен режим инверсии ? | |
| − | + | BEQ 116356$ ; Нет | |
| − | + | MOV #364,56(R5) ; Установить режим инверсии | |
| − | + | BR 116372$ | |
| − | 116356$:TSTB @#22555 | + | 116356$:TSTB @#22555 ; Ранее был установлен режим подчеркивания ? |
| − | + | BEQ 116372$ ; Нет | |
| − | + | MOV #340,56(R5) ; Установить режим подчеркивания | |
116372$:RETURN | 116372$:RETURN | ||
; П/п обработки Esc Граф-E | ; П/п обработки Esc Граф-E | ||
| − | 116374$:CALL 110762$ | + | 116374$:CALL 110762$ ; Прочесть символ |
| − | + | SUB #61,R0 ; Символ в диапазоне "1"-"4" | |
| − | + | BMI 116422$ ; Нет | |
| − | + | CMP R0,#3 | |
| − | + | BHI 116422$ ; Нет | |
| − | + | ASL R0 ; Вызов соответствующей п/п | |
| − | + | CALL @116424$(R0) | |
116422$:RETURN | 116422$:RETURN | ||
; Адреса п/п для установки длины строки | ; Адреса п/п для установки длины строки | ||
| − | 116424$:.WORD 116434$,116450$,116460$,116460$ | + | 116424$:.WORD 116434$,116450$,116460$,116460$ |
; П/п установки длины строки 80 | ; П/п установки длины строки 80 | ||
| − | 116434$:MOV #120,4(R5) ; Установить длину строки 80 | + | 116434$:MOV #120,4(R5) ; Установить длину строки 80 |
| − | 116442$:CLR 22(R5) | + | 116442$:CLR 22(R5) ; Константа начального отступа = 0 |
| − | + | RETURN | |
; П/п установки длины строки 40 | ; П/п установки длины строки 40 | ||
| − | 116450$:MOV #50,4(R5) ; Установить длину строки 40 | + | 116450$:MOV #50,4(R5) ; Установить длину строки 40 |
| − | + | BR 116442$ | |
116460$:RETURN | 116460$:RETURN | ||
; П/п обработки Esc Граф-F | ; П/п обработки Esc Граф-F | ||
| − | 116462$:CALL 110762$ | + | 116462$:CALL 110762$ ; Прочесть символ |
| − | + | SUB #61,R0 ; Символ в диапазоне "1"-"4" | |
| − | + | BMI 116524$ ; Нет | |
| − | + | CMP R0,#4 | |
| − | + | BHIS 116524$ ; Нет | |
| − | 116502$:MOVB 116526$(R0),@22732; Установить соответствующий формат экрана | + | 116502$:MOVB 116526$(R0),@22732; Установить соответствующий формат экрана |
| − | + | MOVB 116532$(R0),22744 ; Сохранить номер формата в ТВ | |
| − | + | MOVB 116536$(R0),22662 ; Занести новую длину строки в ТВ | |
116524$:RETURN | 116524$:RETURN | ||
; Биты формата экрана для загрузки в регистр управления отображением | ; Биты формата экрана для загрузки в регистр управления отображением | ||
| − | 116526$:.BYTE 0,20,40,60 | + | 116526$:.BYTE 0,20,40,60 |
; Номера форматов для загрузки в ТВ | ; Номера форматов для загрузки в ТВ | ||
| − | 116532$:.BYTE 1,2,4,10 | + | 116532$:.BYTE 1,2,4,10 |
; Длины строк | ; Длины строк | ||
| − | 116536$:.BYTE 120,50,24,12 | + | 116536$:.BYTE 120,50,24,12 |
116542$:RETURN | 116542$:RETURN | ||
116544$:RETURN | 116544$:RETURN | ||
| Line 1,007: | Line 1,008: | ||
116550$:RETURN | 116550$:RETURN | ||
; П/п обработки Esc Граф-W | ; П/п обработки Esc Граф-W | ||
| − | 116552$:ADD @#23176,PC ; Установлен режим отмены ? | + | 116552$:ADD @#23176,PC ; Установлен режим отмены ? |
| − | + | BR 116570$ ; Нет | |
| − | + | BIS #1000,@#177054 ; Выключить сетевой таймер в канале ЦП | |
| − | + | RETURN | |
| − | 116570$:BIC #1000,@#177054 ; Включить сетевой таймер в канале ЦП | + | 116570$:BIC #1000,@#177054 ; Включить сетевой таймер в канале ЦП |
| − | + | RETURN | |
; П/п обработки Esc Граф-X | ; П/п обработки Esc Граф-X | ||
| − | 116600$:MTPS #200 | + | 116600$:MTPS #200 ; Запретить прерывания |
| − | + | MOVB #177,@23160 ; Убрать курсор с экрана | |
| − | + | CALL 104026$ ; Вызов п/п ПАУЗА | |
| − | + | MTPS #0 ; Разрешить прерывания | |
| − | + | RETURN | |
; П/п обработки Esc Граф-\ | ; П/п обработки Esc Граф-\ | ||
| − | 116624$:INC @#7072 | + | 116624$:INC @#7072 ; Установить индикатор вызова меню ЗАГРУЗКА |
| − | + | RETURN | |
; П/п обработки Esc Граф-] | ; П/п обработки Esc Граф-] | ||
| − | 116632$:ADD @#23176,PC ; Установлен режим отмены ? | + | 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 в ЦП | + | 116664$:BIC #20,@#177716 ; Снять сигнал HALT в ЦП |
| − | + | MOV #70046,@#177010 ; Сброс ключа продолжения в области ОЗУ ЦП | |
| − | + | CLR @#177014 | |
| − | + | RETURN | |
| − | 116706$:JSR R5,105346$ ; Установить системный режим клавиатуры | + | 116706$:JSR R5,105346$ ; Установить системный режим клавиатуры |
| − | + | .WORD 107310$,11054 | |
| − | + | INC @#7146 ; Установить индикатор системного режима | |
| − | + | ADD @#22550,PC ; Разрешена установка/снятие сигнала HALT ? | |
| − | + | BR 116732$ ; Да | |
| − | + | RETURN | |
| − | 116732$:BIS #20,@#177716 ; Установить сигнал HALT в ЦП | + | 116732$:BIS #20,@#177716 ; Установить сигнал HALT в ЦП |
| − | + | RETURN | |
; П/п обработки Esc Граф-^ | ; П/п обработки Esc Граф-^ | ||
| − | 116742$:INC @#7100 | + | 116742$:INC @#7100 ; Установить индикатор вызова тест-программы |
| − | + | RETURN | |
; П/п обработки Esc Граф-_ | ; П/п обработки Esc Граф-_ | ||
| − | 116750$:MOV #2,@#23176 ; Установить режим отмены | + | 116750$:MOV #2,@#23176 ; Установить режим отмены |
| − | 116756$:CALL 110762$ | + | 116756$:CALL 110762$ ; Прочесть символ |
| − | + | CMP R0,#33 ; Это Escape ? | |
| − | + | BEQ 116756$ ; Да | |
| − | + | ASL R0 ; Вызов соответствующей п/п | |
| − | + | CALL @13142(R0) | |
| − | + | CLR @#23176 ; Сбросить режим отмены | |
| − | + | RETURN | |
; П/п установки цвета курсора, вызываемая при исп. послед. Esc TD (графика) | ; П/п установки цвета курсора, вызываемая при исп. послед. Esc TD (графика) | ||
| − | 117004$:MOV 2(SP),R0 | + | 117004$:MOV 2(SP),R0 |
| − | + | BIC #177760,R0 ; R0 = номер цвета курсора | |
| − | + | MOV R0,@#7166 ; Сохр. ном. цвета кур. в пункте УСТ/цв. кур. | |
| − | + | MOVB R0,@22742 ; Изменить цвет курсора | |
| − | + | RETURN | |
; П/п установки цветов символа, знакоместа и фона, вызываемая при исполнении | ; П/п установки цветов символа, знакоместа и фона, вызываемая при исполнении | ||
; последовательности Esc LI (графика) | ; последовательности Esc LI (графика) | ||
| − | 117026$:MOV R5,-(SP) ; Сохранить R5 | + | 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 = номер цвета знакоместа | + | 117052$:MOV 6(SP),R0 ; R0 = номер цвета знакоместа |
| − | + | BMI 117074$ ; Если отрицательный - нет установки | |
| − | + | MOV R0,@#7162 ; Сохр. ном. цвета зн. в пункте УСТ/цв. зн. | |
| − | + | ASL R0 | |
| − | + | MOV 113512$(R0),40(R5); Сохранить номер фонового цвета в ТВ | |
| − | 117074$:MOV 10(SP),R0 ; R0 = номер цвета фона | + | 117074$:MOV 10(SP),R0 ; R0 = номер цвета фона |
| − | + | BMI 117116$ ; Если отрицательный - нет установки | |
| − | + | MOV R0,@#7164 ; Сохр. ном. цвета фона в пункте УСТ/цвет фона | |
| − | + | ASL R0 | |
| − | + | MOV 113512$(R0),44(R5); Сохранить номер фонового цвета в ТВ | |
| − | 117116$:CALL 110230$ | + | 117116$:CALL 110230$ ; Заполнить регистры кода цвета и фона |
| − | + | MOV (SP)+,R5 ; Восстановить R5 | |
| − | + | RETURN | |
; П/п исполнения запроса EMT 42 (вывод символа) | ; П/п исполнения запроса EMT 42 (вывод символа) | ||
| − | 117126$:CALL 117136$ | + | 117126$:CALL 117136$ ; Занести символ в буфер |
| − | + | TRAP 0 ; Запуск цикла задач | |
| − | + | RETURN | |
; П/п заноса символа в буфер | ; П/п заноса символа в буфер | ||
| − | 117136$:MOVB R0,@22544 ; Занести символ в буфер | + | 117136$:MOVB R0,@22544 ; Занести символ в буфер |
| − | + | INC @#22544 ; Корректировка указателя | |
| − | + | BIC #200,@#22544 | |
| − | + | INC @#7064 ; Увеличить счетчик символов | |
| − | + | RETURN | |
; П/п исполнения запроса EMT 44 (вывод строки символов) | ; П/п исполнения запроса EMT 44 (вывод строки символов) | ||
| − | 117162$:MOV @16(SP),R1 ; R1 = адрес строки символов | + | 117162$:MOV @16(SP),R1 ; R1 = адрес строки символов |
| − | + | ADD #2,16(SP) ; Коррекция адреса возврата | |
; П/п исполнения запроса EMT 46 (вывод строки символов) | ; П/п исполнения запроса EMT 46 (вывод строки символов) | ||
| − | 117174$:JSR R5,117206$ ; Занести строку в буфер | + | 117174$:JSR R5,117206$ ; Занести строку в буфер |
| − | + | TRAP 0 ; Запуск цикла задач | |
| − | + | RETURN | |
; П/п заноса строки символов в буфер | ; П/п заноса строки символов в буфер | ||
| − | 117204$:MOV (R5)+,R1 ; R1 = адрес строки символов | + | 117204$:MOV (R5)+,R1 ; R1 = адрес строки символов |
| − | 117206$:MOV @#22544,R0 ; R0 = значение указателя для записи в буфер | + | 117206$:MOV @#22544,R0 ; R0 = значение указателя для записи в буфер |
| − | + | BR 117224$ | |
| − | 117214$:BIC #200,R0 | + | 117214$:BIC #200,R0 ; Коррекция указателя |
| − | + | INC @#7064 ; Увеличить счетчик символов | |
| − | 117224$:MOVB (R1)+,(R0)+ ; Занести очередной символ в буфер | + | 117224$:MOVB (R1)+,(R0)+ ; Занести очередной символ в буфер |
| − | + | BNE 117214$ ; Еще не конец строки | |
| − | + | DEC R0 | |
| − | + | MOV R0,@#22544 | |
| − | + | RTS R5 | |
; П/п исполнения запроса EMT 56 (вывод в нижнюю инф. строку) | ; П/п исполнения запроса EMT 56 (вывод в нижнюю инф. строку) | ||
| − | 117240$:MOV #23052,R5 ; R5 = адрес ТВ для нижней инф. строки | + | 117240$:MOV #23052,R5 ; R5 = адрес ТВ для нижней инф. строки |
| − | + | BR 117260$ | |
| − | 117246$:BR 117376$ | + | 117246$:BR 117376$ |
; П/п исполнения запроса EMT 52 (вывод в верхнюю инф. строку) | ; П/п исполнения запроса EMT 52 (вывод в верхнюю инф. строку) | ||
| − | 117250$:ADD @#7150,PC ; Разрешение/запрет вывода в верхнюю строку | + | 117250$:ADD @#7150,PC ; Разрешение/запрет вывода в верхнюю строку |
| − | + | MOV #22560,R5 ; R5 = адрес ТВ для верхней инф. строки | |
| − | 117260$:MOV 34(R5),@#177016 ; Загрузка регистров кода цвета и фона | + | 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) | + | 117332$:MOV R1,-(SP) |
| − | + | CALL 111272$ ; Рисование символа | |
| − | + | MOV (SP)+,R1 | |
| − | 117342$:CLR R0 | + | 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) ; Коррекция адреса возврата | + | 117376$:ADD #2,16(SP) ; Коррекция адреса возврата |
| − | + | RETURN | |
117406$:RETURN | 117406$:RETURN | ||
117410$:RETURN | 117410$:RETURN | ||
| Line 1,151: | Line 1,152: | ||
; *** ТАБЛИЦА РИСУНКОВ СИМВОЛОВ *** | ; *** ТАБЛИЦА РИСУНКОВ СИМВОЛОВ *** | ||
| − | + | 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, | |
| − | |||
</pre> | </pre> | ||
Latest revision as of 08:36, 13 January 2008
; *****************************************************************
; * *
; * ДРАЙВЕР ТЕКСТОВОГО ТЕРМИНАЛА *
; * *
; * Адреса 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