##################### МОНИТОР БК-0010/БК-0010.01 А=100000-120000 ############################# 100000) JMP 116102 - переход на начало МОНИТОРА (BR 100110 и появится место для EMT 2) ------------------ ТАБЛИЦА ПЕРЕХОДОВ ПО EMT --------------------------------------------------- 100004) 100742 - EMT 4 - инициализация драйвера клавиатуры КВ 100006) 101010 - EMT 6 - чтение кода символа с клавиатуры 100010) 101724 - EMT 10 - чтение строки с клавиатуры 100012) 102004 - EMT 12 - установка ключей клавиатуры 100014) 100140 - EMT 14 - инициализация системного ПЗУ 100016) 102234 - EMT 16 - драйвер ТВ-монитора (формирование символов и переключение режимов) 100020) 107050 - EMT 20 - вывод строки символов 100022) 107106 - EMT 22 - вывод символа в служебную строку 100024) 107272 - EMT 24 - установка курсора по координатам 100026) 107502 - EMT 26 - считывание координат курсора 100030) 107612 - EMT 30 - формирование точки по координатам 100032) 107776 - EMT 32 - формирование вектора по координатам 100034) 110310 - EMT 34 - чтение слова состояния дисплея (ССД) 100036) 116076 - EMT 36 - Драйвер магнитофона МГ 100040) 117462 - EMT 40 - инициализация драйвера ТЛГ-канала 100042) 117474 - EMT 42 - передача байта на линию ТЛГ 100044) 117566 - EMT 44 - прием байта с линии ТЛГ 100046) 117704 - EMT 46 - передача массива на линию ТЛГ 100050) 117722 - EMT 50 - прием массива с линии ТЛГ -------------------- РЕЗЕРВНЫЕ EMT ------------------------------------------------------------ 100052) 160000 - EMT 52 100054) 160004 - EMT 54 100056) 160010 - EMT 56 100060) 160014 - EMT 60 100062) 160020 - EMT 62 100064) 160024 - EMT 64 100066) 160030 - EMT 66 100070) 160034 - EMT 70 100072) 160040 - EMT 72 100074) 160044 - EMT 74 100076) 160050 - EMT 76 100100) 160054 - EMT 100 100102) 160060 - EMT 102 100104) 160064 - EMT 104 100106) 160070 - EMT 106 100110) 160074 - EMT 110 ----------------------------------------------------------------------------------------------------- ; обработчик EMT 100112) MOV R5,-(SP) - сохраняем R5 который будет использован в обработчике EMT 100114) MOV 2(SP),R5 - адрес следующей за EMT команды 100120) MOV -(R5),R5 - в R5 код команды EMT 100122) BIC #177400,R5 - маска для номера EMT для 0-377 (правильнее было бы BIC #177401,R5) 100126) MOV 100000(R5),R5 - смещение для таблицы переходов по номеру EMT (+100000) 100132) CALL (R5) - переход по таблице EMT (расположена с адреса 100004, исп EMT 4 - EMT 50) 100134) MOV (SP)+,R5 - восстановим R5 100136) RTI - возврат из прерывания ; EMT-14 инициализация системного ПЗУ 100140) CLR R1 - в R1=0 - начало ОЗУ 100142) MOV #20,R2 - число слов для цикла SOB (20x2=40 байт) 100146) MOV #100000,(R1)+ - команда (R1)+ увеличивает R1 на 2 при каждом обращеннии в цикле 100152) SOB R2,100146 - цикл (100146-100152) записи в ячейки 0 - 40 адреса 100000 (R2 уменьшается на 1 в каждом цикле) 100154) MOV #100442,@#4 - прерывание по клавише СТОП или зависанию 100162) MOV #100112,@#30 - прерывание по команде EMT 100170) MOV #200,@#32 - ССП=200 для EMT (во время отработки EMT прерывания только по клавише СТОП) 100176) MOV #120,R2 - (120 слов = 240 байт) 100202) CLR (R1)+ - R1 увеличивается на 2 (от R1=40) 100204) SOB R2,100202 - обнуление области 40 - 300 (R2 уменьшается на 1 в каждом цикле) 100206) EMT 4 - инициализация драйвера клавиатуры 100210) INC 162 - получим 1 (было 0) константа смещения символов на экране =1 100214) INCB 155 - получим 1 (было 0) код положения графического курсора =1 100220) COM 214 - получим 177777 (было 0) белый цвет символов на экране 100224) COM 220 - получим 177777 (было 0) белый цвет символов в служебной строке 100230) CALL 104730 - начальные установки видеоконтроллера и режимов работы с экраном 100234) CLR R0 - номер скорости для ТЛГ (это максимум=9600 бод) 100236) EMT 40 - инициализация драйвера ТЛГ-канала 100240) CLR @#177714 - сброс в исх состояние выходного регистра порта вывода 100244) MOV #220,@#177716 - выходы системного регистра перевести в исх состояние (10010000) 100252) MTPS #0 - ССП=0 (прерывания разрешены) 100256) RET ; вход в диалоговый Монитор 100260) MOV #1000,SP - указатель стека на адрес 1000 100264) CALL 100140 - инициализация драйверов сист ПЗУ (EMT 14 исп нельзя, обработка EMT будет задействована этой подпрограммой) 100270) CALL @#120000 - вход в ПЗУ=120000 (Фокал, Бейсик или ПЗУ пользователя) 100274) CALL 100140 - повторная инициализация сист ПЗУ (EMT 14 исп нельзя - у Фокала, Бейсика или в программе пользователя может быть свой обработчик EMT, другие адреса векторов и другие сист ячейки) 100300) MOV #100720,R3 - адрес начала текста (первый байт-длина=3) 100304) CALL 100460 - вывод текста (в R3-адрес начала) (коды ПереводСтроки-ЗНАК ВОПРОСА-ПРОБЕЛ) ? _ 100310) EMT 6 - ввод символа с клавиатуры (введенный символ в R0) 100312) EMT 16 - введенный символ на экран (эхо) 100314) MOV R0,R4 - введенный символ сохраняется в R4 100316) CALL 100472 - проверка на ввод восьмеричного числа или кода 12(ВВОД) - если число, то оно в R5 100322) BIC #240,R4 - маска для кодов клавиш (для независимости от регистра РУС-ЛАТ) 100326) CMP R4,#115 - была нажата буква М(Магнитофон) - ? 100332) BNE 100342 - нет 100334) CALL 100536 - да загрузка с магнитофона 100340) BR 100300 100342) CMP R4,#114 - была нажата буква Л(Линия) - ? 100346) BCS 100432 - (BCS=BLO - меньше) коды меньше 114 не используются 100350) BNE 100360 - нет 100352) CALL 100656 - да загрузка с линии 100356) BR 100300 100360) CMP R4,#123 - была нажата буква С(Старт) - ? 100364) BNE 100402 - нет 100366) TST R5 - адрес старта был введен? 100370) BNE 100376 - да, старт с введенного адреса; нет - взять адрес старта из загруженного файла 100372) MOV 264,R5 - взять адрес для старта из ячейки 264 (сист ячейка-буфер адреса при загрузке с МГ или ТЛГ) 100376) CALL (R5) - старт загруженной программы 100400) BR 100300 100402) CMP R4,#124 - была нажата буква Т(Тесты) - ? 100406) BNE 100416 - нет 100410) CALL @#160100 - да вход в ПЗУ=160100 ТЕСТы 100414) BR 100300 100416) CMP R4,#120 - была нажата буква П(Пользователь) - ? 100422) BNE 100300 - нет 100424) CALL @#140000 - да вход в ПЗУ=140000 с программой пользователя 100430) BR 100300 ----------------------- ### команды 100432-100440 лишние к ним нет обращений ### --------------------------- 100432) CMP R4,#100 - сравнить с кодом 100 - ? (для всех других букв) 100436) BCC 100260 - (BCC=BHIS - больше или равно) снова на вход диалогового Монитора с переинициализацией драйверов 100440) BR 100300 ; прерывание по клавише СТОП или зависанию (вектор 4) 100442) MOV #1000,SP - установить стек на 1000 100446) MOV #220,@#177716 - сист порт в исх сост 100454) EMT 4 - инициализация драйвера клавиатуры 100456) BR 100300 - возврат в диалоговый Монитор ; вывод строки символов (адрес начала строки в R3, первый байт-длина) 100460) MOVB (R3)+,R2 - количество символов 100462) MOVB (R3)+,R0 100464) EMT 16 - вывод символа из мл байта R0 (текущее положение символьного курсора в R...) 100466) SOB R2,100462 - цикл вывода строки (100462-100466) 100470) RET ; ввод восьмеричного числа с клавиатуры(коды меньше 60 и больше 67 не учитываются, число в R5) 100472) CLR R5 100474) EMT 6 100476) EMT 16 100500) CMPB R0,#12 100504) BEQ 100534 100506) CMPB R0,#67 100512) BHI 100472 - коды больше 67 не учитываются 100514) SUB #60,R0 100520) BMI 100472 - коды меньше 60 не учитываются 100522) ASL R5 - сдвиг для следующей цифры 100524) ASL R5 100526) ASL R5 100530) ADD R0,R5 100532) BR 100474 100534) RET ; загрузка с магнитофона 100536) MOV #320,R1 - адрес начала блока параметров в R1 100542) MOV #3,(R1)+ - команда (#3 это команда чтения) 100546) MOV R5,(R1)+ - адрес загрузки в ОЗУ - если не указан(при R5=0) то берется из оглавления файла 100550) CLR (R1)+ - очищаем ячейку для длины файла и в R1 получаем адрес для ввода имени файла 100552) MOV #100724,R3 - адрес текста ИМЯ 100556) CALL 100460 - вывод строки ИМЯ 100562) MOV #5020,R2 - длина строки=20 символ ограничитель=12 100566) EMT 10 - чтение строки с клавиатуры (адрес конца строки в R1, недостающее кол-во символов до 20 в R2) 100570) DEC R1 - убираем код 12 100572) MOVB #40,(R1)+ - заменяем пробелом и дополняем длину до 20 если нужно 100576) DEC R2 - уменьшаем R2 и в R2 должен быть 0 (если введено длинное имя в 20 символов) 100600) BPL 100572 - нет в R2 не 0 - дополняем пробелами до длины=20 если нужно 100602) MOV #320,R1 - адрес блока параметров в R1 100606) EMT 36 - драйвер магнитофона 100610) MOVB 1(R1),R0 - ответ от драйвера МГ 100614) BEQ 100654 - нет ошибок (имя совпало и КС в норме R0=0) - программа находится в ОЗУ 100616) DEC R0 - если было R0=1 то не совпало имя и после DEC R0 будет R0=0 с переходом на 100622 100620) BNE 100644 - ошибка КС(в R0 была не 1) на вывод слова ОШИБКА и выход 100622) ADD #32,R1 - не совпало имя - вывести найденное имя 100626) MOV #20,R2 - длина строки=20 100632) EMT 20 - вывод строки с именем файла 100634) MOV #12,R0 - переход на следующую строку (сделать вход EMT 16x для кода 12) 100640) EMT 16 100642) BR 100602 - продолжить чтение с магнитофона 100644) MOV #100732,R3 - адрес текста ОШИБКА 100650) CALL 100460 - вывод строки ОШИБКА 100654) RET ; загрузка с линии (в R5-адрес загрузки, если R5=0 то загрузка по адресу из оглавления файла) 100656) EMT 44 - прием байта с линии (если на входе постоянная готовность то строки 100656 и 100660 можно не рассм?) 100660) EMT 42 - передача байта на линию (повторение принятого байта) 100662) MOV #264,R1 - ячейка для адреса из оглавления файла 100666) MOV #4,R2 - 2 байта адрес +2 байта длина 100672) EMT 50 - прием 4 байт с линии (адрес и длина массива) 100674) TST R5 - адрес загрузки был введен? 100676) BEQ 100704 - если нет (R5=0) то адрес загрузки берется из оглавления файла 100700) MOV R5,264 - адрес загрузки был введен 100704) MOV 264,R1 - адрес в ОЗУ для загрузки файла 100710) MOV 266,R2 - длина файла 100714) EMT 50 - прием файла (массива) с линии 100716) RET ---------------------------------- Тексты диалогового Монитора ---------------------------------------------------- ; приглашение Монитора (коды ВК ? ПРОБЕЛ) 100720) 005003 (12 3байта-длина) 100722) 020077 (40 77-?) ; запрос имени при вводе с магнитофона (коды ИМЯ ? ПРОБЕЛ) 100724) 164405 (351-И 5байт-длина) 100726) 170755 (361-Я 355-М) 100730) 020077 ( 40 77-?) ; текст слова ОШИБКА (коды ВК ОШИБКА) - без пробела (дальше будет опять приглашение Монитора) 100732) 005007 (12 7байт-длина) 100734) 175757 (373-Ш 357-О) 100736) 161351 (342-Б 351-И) 100740) 160753 (341-А 353-К) ----------------------------------------------------------------------------------------------------------------------- ; EMT 4 - инициализация драйвера клавиатуры 100742) MOV #101136,@#60 - вектор 60 (А=101136) 100750) MOV #200,R0 100754) MOV R0,@#62 - ССП=200 100760) MOV #101362,@#274 - вектор 274 (А=101362) 100766) MOV R0,@#276 - ССП=200 100772) CLR 260 - сброс адреса подпрограммы обработки прерываний от клавиатуры (если 0 то нет обработки) 100776) CLR 262 - установить для ВК код 12 101002) CLR @#177660 - сброс регистра состояния клавиатуры (прерывания от клавиатуры разрешены) 101006) RET ; EMT 6 - чтение кода символа с клавиатуры (сл ячейки 122(байт) 124 111 110 106 105 104) 101010) MTPS #0 - ССП=0 101014) MOV @#177662,R0 - прочитать регистр данных клавиатуры 101020) TSTB 122 - 101024) BEQ 101044 101026) MOVB @124,R0 101032) INC 124 - 101036) DECB 122 - 101042) BR 101134 101044) TSTB 111 - 101050) BEQ 101064 101052) MOV #40,R0 101056) DECB 111 - 101062) BR 101134 101064) TSTB 110 - 101070) BEQ 101114 101072) MOV 106,R0 - 101076) SOB R0,101076 - задержка 101100) BIT #100,@#177716 - проверка нажатия клавиши 101106) BEQ 101122 - клавиша не нажата - на выход 101110) CLRB 110 - 101114) TSTB 105 - 101120) BEQ 101020 101122) CLR R0 101124) BISB 104,R0 - 101130) CLRB 105 - 101134) RET =================================================================================================================== ; прерывание от клавиатуры - вектор 60 (сл ячейки 262 222 43) 101136) JSR R4,110340 - сохранить R0-R4 101142) MOV R5,-(SP) 101144) CALL 102032 - обработка кода при нажатии клавиши (звук) 101150) CMPB R0,#20 101154) BHI 101304 - код больше 20 101156) MOV R0,R1 101160) SUB #12,R1 101164) BMI 101264 - код меньше 12 101166) ASL R1 - сделать четным 101170) ADD R1,PC - получить адрес перехода по BR (коды между 12 и 20) 101172) BR 101210 - код 12 101174) BR 101316 - код 13 101176) BR 101316 - код 14 101200) BR 101256 - код 15 101202) BR 101224 - код 16 101204) BR 101234 - код 17 101206) BR 101254 - код 20 ; - код 12 101210) TST @#262 - если 0 то будет код 12 иначе сделать 15 101214) BEQ 101316 101216) MOV #15,R0 101222) BR 101316 ; - код 16 101224) MOVB #200,43 - переключить на режим РУС 101232) BR 101240 ; - код 17 101234) CLRB 43 - переключить на режим ЛАТ ; - код 16 и 17 продолжение 101240) CLR R0 101242) CLR 222 - 101246) CALL 110572 - для кодов 16 17 101252) BR 101322 - управляющие коды не отображаются ; - код 20 101254) CLR R3 ; - код 15 101256) CALL 101332 - 101262) BR 101322 ; код меньше 12 101264) TST R0 101266) BNE 101316 101270) TSTB @#177660 - проверка нажатия клавиши 101274) BPL 101270 - продолжать проверять (ждать нажатия клавиши) 101276) CALL 102032 - обработка кода при нажатии клавиши 101302) BR 101322 - выход из подпрограммы прерывания по вектору 60 ; - код 12 101304) CMPB R0,#77 101310) BLOS 101316 - меньше или равно 77 101312) BISB 43,R0 - маска для кодов РУС-ЛАТ (если РУС то добавляется бит 200) ; - код 13 и 14 ; - код 12 или замененный на 15 101316) CALL 102124 - коды 12-15 и все символы РУС-ЛАТ 101322) MOV (SP)+,R5 101324) JSR R4,110362 - восстановить R0-R4 101330) RTI ================================================================================================================== 101332) CALL 102160 - что-то связанное с восьмеричным числом? 101336) TST R3 101340) BEQ 101350 101342) BIS R0,112(R1) 101346) BR 101354 101350) BIC R0,112(R1) 101354) CALL 111130 - 101360) RET ; прерывание от клавиатуры - вектор 274 (управляющие коды и коды НижнегоРегистра-псевдографика и др) 101362) JSR R4,110340 - сохранить R0-R4 101366) MOV R5,-(SP) 101370) CALL 102032 - обработка кода при нажатии клавиши (звук) 101374) BISB #200,R0 101400) CMPB R0,#277 101404) BLOS 101420 101406) BICB #100,R0 101412) BISB #40,R0 101416) BR 101622 ; коды меньше или равно 277 101420) CMPB R0,#257 101424) BLOS 101474 101426) CMPB R0,#271 101432) BHI 101474 101434) TSTB 122 101440) BNE 101626 101442) BIC #177760,R0 101446) ASL R0 101450) MOV 126(R0),124 101456) BEQ 101626 101460) MOVB @124,122 101466) INC 124 101472) BR 101626 ; коды меньше или равно 257 101474) CMPB R0,#237 101500) BLOS 101540 101502) BICB #40,R0 101506) BISB #20,R0 101512) CMPB R0,#232 101516) BCS 101622 101520) CMPB R0,#234 101524) BEQ 101622 101526) CMPB R0,#237 101532) BEQ 101622 101534) EMT 16 101536) BR 101626 ; коды меньше или равно 237 101540) CMPB R0,#211 101544) BCS 101556 101546) BNE 101610 101550) CALL 101636 - 101554) BR 101626 ; коды меньше 211 101556) CMPB R0,#204 101562) BHI 101602 101564) CMPB R0,#201 101570) BHI 101534 101572) BNE 101602 101574) INCB 110 101600) BR 101626 ; коды больше 204 (и меньше 211) 101602) BIS #20,R0 - сделать из них коды 224-231 101606) BR 101622 ; коды больше 211 101610) CMPB R0,#213 101614) BNE 101622 101616) MOV #231,R0 ; код 212 - код 231(который был 213) и код 237 101622) CALL 102124 - в R5 адрес перехода на подпрограмму? ######################### ? 101626) MOV (SP)+,R5 101630) JSR R4,110362 - восстановить R0-R4 101634) RTI 101636) CALL 102160 - 101642) MOVB #1,111 - 101650) ASL R0 101652) BCS 101672 101654) BIT R0,112(R1) 101660) BNE 101722 101662) INCB 111 - 101666) ASL R0 101670) BCC 101654 101672) ADC R0 101674) ADD #2,R1 101700) CMP R1,#4 101704) BCS 101654 101706) TSTB 40 - 101712) BNE 101722 101714) CMP R1,#10 101720) BNE 101654 101722) RET ; EMT 10 - чтение строки с клавиатуры 101724) MOV R0,-(SP) 101726) MOV R2,R5 101730) SWAB R5 101732) BIC #177400,R2 101736) MOV R2,-(SP) - зачем сохраняется R2 ? 101740) EMT 6 101742) CMPB R0,#30 101746) BNE 101764 101750) CMP R2,(SP) 101752) BEQ 101740 101754) DEC R1 101756) ADD #2,R2 101762) BR 101766 101764) MOVB R0,(R1)+ 101766) EMT 16 101770) CMPB R0,R5 101772) BEQ 101776 101774) SOB R2,101740 101776) MOV (SP)+,R0 - сохранялся R2 почему восстанавливается R0 - просто для восст указателя стека 102000) MOV (SP)+,R0 102002) RET ; EMT 12 - установка ключей клавиатуры (R0-номер ключа R1-адрес текста ключа) 102004) TST R0 102006) BLE 102030 102010) CMP R0,#12 102014) BHI 102030 - номер ключа не больше 12 102016) BNE 102022 102020) CLR R0 102022) ASL R0 - сделать четным для прибавления к смещению 102024) MOV R1,126(R0) - адреса текстов ключей(1-10) в ячейках 126-140 102030) RET ; обработка кода при нажатии клавиши - звук БИП (проверяется ячейка 224) 102032) TST 224 102036) BEQ 102044 102040) CALL 110536 - ? 102044) MOV #177777,222 102052) MOV #50,R2 - длительность звука БИП 102056) MOV #100,R3 - частота звука 102062) MOV #320,@#177716 - импульс на динамик 102070) MOV R3,R0 102072) SOB R0,102072 - длительность положительной половины импульса 102074) MOV #220,@#177716 - сбросить 102102) MOV R3,R0 102104) SOB R0,102104 - пауза (длительность отрицательной половины импульса) 102106) DEC R3 102110) SOB R2,102062 - цикл звука при нажатии клавиши (102062-102110) 102112) MOV @#177716,R0 - признак нажатия клавиши в старшем байте R0 102116) MOVB @#177662,R0 - код нажатой клавиши в младшем байте R0 102122) RET ; переход к доп подпрограмме обработки по содержимому @#260 (ссылка из строки 101622) ; исп ячейки 260 105 104 102124) MOV @#260,R5 - адрес подпрограммы обработки прерывания от клавиатуры 102130) BNE 102140 102132) TSTB 105 102136) BNE 102156 102140) MOVB R0,104 102144) MOVB R0,105 102150) TST R5 102152) BEQ 102156 102154) CALL (R5) - переход к доп подпрограмме обработки (типа функц клавиш) 102156) RET ; формирование кода восьмеричной цифры? - нет это связано с графикой (исп ячейки 156 40) - вызов из 101332 102160) MOV 156,R1 102164) BIC #177700,R1 - выделить младший байт 102170) TSTB 40 - режим 32/64 символа в строке 102174) BEQ 102200 - @#40=0 это режим 64 символа в строке 102176) ASR R1 - для режима 32 символа в строке 102200) MOV R1,R2 102202) BIC #177760,R2 - в R2 будет число 0-17 (0-15Д) или 0-7 в зависимости от @#40 102206) INC R2 102210) CLR R0 102212) SEC 102214) ROL R0 102216) SOB R2,102214 102220) BIC #177717,R1 102224) ASR R1 102226) ASR R1 102230) ASR R1 102232) RET ; EMT 16 - формирование символов и переключение режимов 102234) JSR R4,110346 - сохранить R0-R4 102240) INC 222 - 102244) TSTB 50 - режим ГРАФ ? 102250) BEQ 102260 - нет 102252) CALL 105670 - работа в режиме ГРАФ 102256) BR 102362 - закончена работа в режиме ГРАФ - на выход из EMT 16 102260) BIC #177400,R0 102264) CMPB R0,#177 102270) BHI 102312 102272) CMPB R0,#37 102276) BLOS 102326 102300) SUB #20,R0 102304) CALL 102370 - вывод символа 102310) BR 102362 102312) CMPB R0,#237 102316) BLOS 102356 102320) SUB #60,R0 102324) BR 102304 102326) CMPB R0,#21 102332) BLOS 102342 102334) CALL 103310 - 102340) BR 102362 102342) CMPB R0,#10 102346) BEQ 102334 102350) CALL 104130 - 102354) BR 102362 102356) CALL 104320 - 102362) JSR R4,110362 - восстановить R0-R4 102366) RET ; вывод символа ; ячейки 162-шаг символов 156-положение текстового курсора 102370) CALL 102746 - 102374) ADD 162,156 - смещение символа+положение текстового курсора 102402) CALL 102414 - 102406) CALL 103222 - 102412) RET ; в таблице нет описания на ячейки 152 и 156 102414) TSTB 152 - 102420) BNE 102432 102422) BIT #77,156 - проверить позиции 0-63 102430) BNE 102556 - если не 0 (не нулевая позиция в строке) то переход 102432) CLR R3 102434) MOV 156,R5 - положение текстового курсора 102440) BPL 102454 102442) INC R3 102444) ADD #100,R5 102450) BMI 102444 102452) BR 102474 102454) CMP R5,164 102460) BCS 102500 102462) SUB #100,R5 102466) CMP R5,164 - длина ОЗУ экрана в символах 102472) BCC 102462 102474) CALL 102566 - 102500) MOV R5,156 - адрес текстового курсора 102504) MOV R5,R4 102506) BIC #177700,R4 102512) BIC #77,R5 102516) ASL R5 102520) ADD R5,R4 102522) ASL R5 102524) ASL R5 102526) ADD R5,R4 102530) ADD 204,R4 - адрес начала инф области экрана 102534) BIC #140000,R4 102540) ADD 202,R4 - прибавить начальный адрес ОЗУ экрана 102544) MOV R4,160 - абсолютный адрес курсора в ОЗУ 102550) CLRB 152 - ? 102554) BR 102564 - RET 102556) ADD 162,160 - положение курсора + смещение 102564) RET 102566) TSTB 42 - проверка на режим РП 102572) BNE 102712 - да РП 102574) MOV #12,R4 102600) TST R3 102602) BEQ 102606 102604) NEGB R4 102606) ADD R4,@#177664 - исп регистр рулонного сдвига 102612) MOV 204,R1 - адрес начала области экрана 102616) MOV #20,R2 102622) TST R3 102624) BEQ 102664 102626) SUB #2000,R1 102632) BIC #140000,R1 102636) ADD 202,R1 - начальный адрес ОЗУ экрана 102642) CALL 111516 - 102646) SUB #1200,204 102654) BIC #140000,204 102662) BR 102744 102664) ADD 202,R1 102670) CALL 111616 - 102674) ADD #1200,204 102702) BIC #140000,204 102710) BR 102744 102712) MOV #36,R2 102716) TST R3 102720) BEQ 102734 102722) MOV #75600,R1 102726) CALL 111616 - 102732) BR 102744 102734) MOV #73200,R1 102740) CALL 111516 - 102744) RET =================================================================================================================== ; ЗАПИСЬ СИМВОЛА ИЗ ЗНАКОГЕНЕРАТОРА В ВИДЕО-ОЗУ 102746) ASL R0 102750) MOV R0,R1 102752) ASL R0 102754) ASL R0 102756) ADD R0,R1 102760) ADD #112036,R1 - адрес начала символов (смещение) = 112036 102764) MOV 160,R3 - абсолютный адрес курсора в ОЗУ 102770) MOV #11,R2 102774) TSTB 40 - проверить режим 32-64 103000) BNE 103066 - переход для режима 32 символа в строке 103002) CLR R0 103004) TSTB 45 - есть инверсия ? 103010) BEQ 103014 103012) COM R0 103014) TST 212 - код цвета фона на экране ? 103020) BEQ 103024 103022) COM R0 103024) MOVB (R1)+,(R3) 103026) TST R0 103030) BEQ 103034 103032) COMB (R3) 103034) CALL 111434 - ЗАПИСЬ В ОЗУ 103040) SOB R2,103024 - цикл (103024-103040) запись в ОЗУ растрового символа в матрице 8х10Д 103042) MOVB (R1)+,(R3) 103044) TST R0 103046) BEQ 103052 103050) COMB (R3) 103052) TSTB 44 - подчеркивание есть? 103056) BEQ 103220 - нет 103060) MOVB 214,(R3) - код цвета символа на экране 103064) BR 103220 - на RET (вместо BR) ; вывод в режиме 103066) CLR -(SP) 103070) MOVB (R1)+,R5 103072) BIC #177400,R5 103076) MOV #20,R4 103102) CLR R0 103104) TSTB 45 - инверсия есть ? 103110) BEQ 103114 - нет 103112) COMB R5 103114) TSTB R5 103116) BEQ 103144 103120) ASR R5 103122) BCC 103132 103124) BEQ 103140 103126) BIS 112004(R4),R0 103132) SUB #2,R4 103136) BNE 103120 103140) BIS 112004(R4),R0 103144) MOV 212,R5 - цвет фона 103150) BIC R0,R5 103152) MOV 214,R4 - цвет символа 103156) COM R0 103160) BIC R0,R4 103162) BIS R5,R4 103164) MOV R4,(R3) - запись одной строки из матрицы символа в ОЗУ экрана 103166) CALL 111434 - подготовка адреса следующей строки 103172) SOB R2,103070 - цикл вывода (103070-103172) запись в ОЗУ растрового символа в матрице 8х10Д 103174) TST (SP) 103176) BNE 103216 103200) INC (SP) 103202) INC R2 103204) TSTB 44 - подчеркивание есть? 103210) BEQ 103070 - нет 103212) MOV 214,(R3) - код цвета символа на экране 103216) MOV (SP)+,R0 103220) RET ================================================================================================================= ; вывод курсора 103222) TSTB 56 - гашение курсора есть ? 103226) BNE 103306 - гашение курсора установлено - переход на RET 103230) MOV 160,R3 - абсолютный адрес курсора в ОЗУ 103234) MOV #12,R2 - десятая строка (12) это курсор (аналогично символу подчеркивания) 103240) TSTB 40 - 103244) BNE 103264 - для режима 32 символа 103246) MOV #377,R5 103252) ASR R3 103254) BCC 103260 103256) SWAB R5 103260) ASL R3 103262) BR 103276 ; вход для вывода курсора в режиме 32 103264) MOV 214,R5 - 103270) MOV 212,R4 - 103274) XOR R4,R5 103276) XOR R5,(R3) - вывод курсора (в R3 абсолютный адрес курсора в ОЗУ) 103300) CALL 111434 - подготовка адреса следующей строки 103304) SOB R2,103276 103306) RET 103310) TSTB 47 - блокировка редактирования ? 103314) BEQ 103324 - разрешено редактирование 103316) CALL 104244 - 103322) BR 103542 - это RET (BR не нужен) ; разрешено редактирование 103324) MOV 156,R1 103330) MOV 162,R2 103334) MOV #100,R3 103340) CMPB R0,#10 103344) BNE 103352 - если R0 не равно 10 то переход к обработке 103346) SUB R2,R1 103350) BR 103532 103352) SUB #22,R0 103356) ASL R0 - сделать четным 103360) ADD R0,PC - получить адрес перехода по BR 103362) BR 103416 - код 22 103364) BR 103422 - код 23 103366) BR 103430 - код 24 103370) BR 103436 - код 25 103372) BR 103446 - код 26 103374) BR 103454 - код 27 103376) BR 103462 - код 30 103400) BR 103470 - код 31 103402) BR 103474 - код 32 103404) BR 103500 - код 33 103406) BR 103504 - код 34 103410) BR 103512 - код 35 103412) BR 103520 - код 36 103414) BR 103526 - код 37 ; код 22 103416) CLR R1 103420) BR 103532 ; код 23 103422) CALL 103760 - 103426) BR 103542 ; код 24 103430) CALL 104020 - 103434) BR 103542 ; код 25 103436) ADD R3,R1 103440) BIC #77,R1 103444) BR 103532 ; код 26 103446) CALL 103600 - 103452) BR 103542 ; код 27 103454) CALL 103700 - 103460) BR 103542 ; код 30 103462) CALL 103544 - 103466) BR 103542 ; код 31 103470) ADD R2,R1 103472) BR 103532 ; код 32 103474) SUB R3,R1 103476) BR 103532 ; код 33 103500) ADD R3,R1 103502) BR 103532 ; код 34 103504) SUB R3,R1 103506) SUB R2,R1 103510) BR 103532 ; код 35 103512) SUB R3,R1 103514) ADD R2,R1 103516) BR 103532 ; код 36 103520) ADD R3,R1 103522) ADD R2,R1 103524) BR 103532 ; код 37 103526) ADD R3,R1 103530) SUB R2,R1 103532) MOV R1,156 103536) CALL 111352 - 103542) RET ; продолжение для код 30 103544) CALL 103222 - 103550) SUB 162,156 103556) INCB 152 103562) CALL 102414 - 103566) CALL 111374 - 103572) CALL 103222 - 103576) RET 103600) MOV 160,R3 103604) MOV R3,R4 103606) BIS #76,R4 103612) BIS 162,R4 103616) MOV #12,R2 103622) MOV R3,R1 103624) MOV R1,R5 103626) ADD 162,R5 103632) BIT #77,R5 103636) BEQ 103644 103640) MOVB (R5)+,(R1)+ 103642) BR 103632 103644) CALL 111434 - 103650) SOB R2,103622 103652) MOV 160,-(SP) 103656) MOV R4,160 103662) CALL 111374 - 103666) MOV (SP)+,160 103672) CALL 103222 - 103676) RET 103700) CALL 103222 - 103704) MOV 160,R3 103710) MOV #12,R2 103714) MOV R3,R5 103716) BIS #77,R5 103722) INC R5 103724) MOV R5,R1 103726) SUB 162,R1 103732) MOVB -(R1),-(R5) 103734) CMP R5,R3 103736) BNE 103732 103740) CALL 111434 - 103744) SOB R2,103714 103746) CALL 111374 - 103752) CALL 103222 - 103756) RET 103760) MOV 160,R1 103764) BIC #77,R1 103770) ADD #1200,R1 103774) BPL 104002 103776) SUB 206,R1 104002) CALL 104066 - 104006) CALL 111516 - 104012) CALL 103222 - 104016) RET 104020) CALL 103222 - 104024) MOV 204,R1 104030) ADD 210,R1 104034) SUB #1200,R1 104040) BIC #140000,R1 104044) ADD 202,R1 104050) CALL 104066 - 104054) CALL 111616 - 104060) CALL 103222 - 104064) RET 104066) MOV 164,R3 104072) MOV 156,R2 104076) BIS #77,R2 104102) INC R2 104104) SUB R2,R3 104106) MOV #5,R2 104112) ASR R3 104114) SOB R2,104112 104116) MOV R3,R2 104120) ASL R3 104122) ASL R3 104124) ADD R3,R2 104126) RET 104130) CMPB R0,#12 104134) BNE 104200 104136) CALL 104236 104142) BIT #77,156 104150) BNE 104160 104152) TSTB 46 104156) BNE 104316 104160) BIS #77,156 104166) INC 156 104172) CALL 111352 - 104176) BR 104316 104200) TSTB 47 104204) BNE 104236 104206) CMPB R0,#14 104212) BNE 104222 104214) CALL 110376 - 104220) BR 104316 104222) CMPB R0,#7 104226) BNE 104236 104230) CALL 102052 - 104234) BR 104316 104236) TSTB 46 - индикация символов управления включена? 104242) BEQ 104316 - нет индикации символов управления - на RET 104244) SUB #20,R0 104250) BMI 104260 104252) CALL 102370 - 104256) BR 104316 - переход на RET 104260) CMPB R0,#177770 104264) BNE 104274 104266) MOV #1,R0 104272) BR 104252 104274) ADD #100,R0 104300) COMB 45 - 104304) CALL 102370 - 104310) COMB 45 104314) BR 104316 104316) RET 104320) CMPB R0,#202 104324) BNE 104340 104326) COMB 46 104332) MOV #3,R0 104336) BR 104356 104340) CMPB R0,#204 104344) BNE 104360 104346) COMB 47 104352) MOV #4,R0 104356) BR 104706 104360) CMPB R0,#214 104364) BNE 104374 104366) CALL 104722 - 104372) BR 104720 104374) MOVB 50,R5 104400) BNE 104410 104402) TSTB 47 104406) BNE 104714 104410) SUB #221,R0 104414) BMI 104720 - если R0 меньше 221 то переход 104416) ASL R0 - сделать четным 104420) ADD R0,PC - получить адрес перехода по BR 104422) BR 104460 - код 221 104424) BR 104460 - код 222 104426) BR 104460 - код 223 104430) BR 104460 - код 224 104432) BR 104514 - код 225 104434) BR 104526 - код 226 104436) BR 104544 - код 227 104440) BR 104720 - код 230 104442) BR 104562 - код 231 104444) BR 104574 - код 232 104446) BR 104612 - код 233 104450) BR 104620 - код 234 104452) BR 104632 - код 235 104454) BR 104640 - код 236 104456) BR 104676 - код 237 ; - код 221 222 223 224 104460) TSTB 40 104464) BEQ 104720 104466) MOV 112026(R0),R0 - смещение в знакогенераторе для кодов 221 222 223 224 104472) CLRB 41 104476) CALL 111314 - вывод спецсимволов по начальному адресу из знакогенератора 104502) MOV R0,214 - слово по адресу 112026-112034 занести в ячейку 214 (режим вывода упр символов) 104506) CALL 111314 - 104512) BR 104720 ; - код 225 104514) CALL 105074 - 104520) MOV #5,R0 104524) BR 104706 ; - код 226 104526) TST R5 104530) BEQ 104720 104532) CLRB 52 104536) COMB 51 104542) BR 104520 ; - код 227 104544) TST R5 104546) BEQ 104720 104550) CLRB 51 104554) COMB 52 104560) BR 104520 ; - код 231 104562) TST R5 104564) BNE 104720 104566) CALL 105232 - 104572) BR 104720 ; - код 232 104574) CALL 111314 - 104600) COMB 56 104604) CALL 111314 - 104610) BR 104720 ; - код 233 104612) CALL 105272 - 104616) BR 104720 ; - код 234 104620) COMB 45 104624) MOV #2,R0 104630) BR 104706 ; - код 235 104632) CALL 105500 - 104636) BR 104720 ; - код 236 104640) MOV 212,216 104646) MOV 214,220 104654) MOV 44,54 104662) MOVB 40,53 104670) CALL 110470 - 104674) BR 104720 ; - код 237 104676) COMB 44 104702) MOV #1,R0 104706) CALL 110572 - 104712) BR 104720 104714) CALL 105564 - ; - код 230 104720) RET ; режим без РП - полный экран 104722) COMB 42 104726) BNE 104770 ; вход при инициализации сист ПЗУ 104730) MOV #40000,202 - конец экранного ОЗУ (100000-40000) 104736) MOV #40000,206 - размер экранного ОЗУ 104744) MOV #36000,210 104752) MOV #3000,164 104760) MOV #1330,@#177664 - установить режим полного экрана 104766) BR 105054 ; режим РП 104770) MOV #70000,202 - конец экранного ОЗУ (100000-70000) 104776) MOV #10000,206 - размер экранного ОЗУ 105004) MOV #5000,210 105012) MOV #400,164 105020) MOV #230,@#177664 - 105026) MOV #77000,R3 105032) MOV #340,R4 105036) MOV 216,(R3)+ 105042) SOB R4,105036 - цикл очистки (105036-105042) 105044) MOV 220,R1 105050) CALL 111474 - 105054) MOV #2000,204 105062) CALL 110376 - 105066) CALL 110470 - 105072) RET 105074) CALL 111314 - 105100) COMB 50 105104) BEQ 105160 105106) MOVB 155,154 105114) CLR 172 105120) CLR 174 105124) MOV 160,R0 105130) MOV R0,170 105134) SUB 202,R0 105140) SUB 204,R0 105144) BPL 105152 105146) ADD 206,R0 105152) MOV R0,166 105156) BR 105214 105160) CLRB 51 105164) CLRB 52 105170) TSTB 40 105174) BEQ 105204 105176) BIC #1,156 105204) INCB 152 105210) CALL 102414 - 105214) MOV #5,R0 105220) CALL 110572 - 105224) CALL 111314 - 105230) RET 105232) MOV 160,-(SP) 105236) CALL 111374 - 105242) ADD 162,160 105250) BIT #77,160 105256) BNE 105236 105260) MOV (SP)+,160 105264) CALL 103222 - 105270) RET 105272) CALL 111314 - 105276) COMB 40 105302) BNE 105356 105304) DEC 162 105310) MOVB #1,155 105316) BICB #252,154 105324) CLR 212 105330) MOV #177777,214 105336) TSTB 41 105342) BEQ 105466 105344) COM 212 105350) COM 214 105354) BR 105466 105356) INC 162 105362) INC 156 105366) BIC #1,156 105374) INCB 152 105400) CALL 102414 - 105404) MOVB #3,155 105412) BITB #252,154 105420) BEQ 105454 105422) ASLB 154 105426) BCC 105454 105430) ADCB 154 105434) INC 166 105440) CMP 166,210 105446) BCS 105454 105450) CLR 166 105454) MOVB 154,R0 105460) ASLB R0 105462) BISB R0,154 105466) CALL 111130 - 105472) CALL 111314 - 105476) RET --------------------------------------------------------------------------------------------------------------- ; обработка кода 235 - инверсия экрана 105500) COMB 41 - вкл-выкл инверсию экрана 105504) MOV 214,R0 - старый код цвета символа в R0 105510) MOV 212,214 - сделать код цвета символа равным прежнему цвету экрана 105516) MOV R0,212 - новый цвет экрана (=старому коду цвета символа) 105522) MOV 214,R5 - 105526) XOR R5,R0 - установить R0 для инверсии цвета символов в ОЗУ 105530) MOV 204,R1 - адрес начала инф области экрана минус 40000 105534) ADD 202,R1 - прибавить начальный адрес ОЗУ экрана 105540) MOV 210,R2 - длина инф части экрана в байтах 105544) ASR R2 - длина инф части экрана в словах для цикла SOB ; 105546) XOR R0,(R1)+ - установка инверсных цветов в ОЗУ экрана - символы и фон (команда ИсключающееИЛИ с ОЗУ экрана) 105550) TST R1 105552) BPL 105560 105554) SUB 206,R1 - вычесть длину экрана в байтах 105560) SOB R2,105546 - (цикл 105546-105560) 105562) RET --------------------------------------------------------------------------------------------------------------- ; вывод на экран управляющих кодов в виде инверсных букв 105564) CMPB R0,#225 - код ГРАФ 105570) BNE 105600 105572) MOV #267,R0 - символ псевдографики? инв 105576) BR 105634 105600) CMPB R0,#226 - код ЗАП 105604) BNE 105614 105606) MOV #312,R0 - буква й? инв J 105612) BR 105634 105614) CMPB R0,#227 - код СТИР 105620) BNE 105630 105622) MOV #303,R0 - буква ц? инв C 105626) BR 105634 105630) ADD #20,R0 - сделать коды отображаемыми в виде инверсных букв 105634) COMB 45 - вкл инверсию символов (для служ строки) 105640) CALL 102746 - вывод инв символа в служ строку 105644) COMB 45 - восстановить режим инв-без инв 105650) ADD 162,156 105656) CALL 102414 - 105662) CALL 103222 - 105666) RET ; работа в режиме ГРАФ 105670) CMPB R0,#37 105674) BHI 105704 - код больше 37 105676) CALL 105744 - обработка кодов меньших или равных 37 105702) BR 105736 105704) BIC #177400,R0 - выделить мл байт 105710) CMPB R0,#71 105714) BHI 105724 - коды больше 71 105716) CALL 107012 - обработка кодов 40-71 105722) BR 105742 105724) CMPB R0,#237 105730) BHI 105736 - коды больше 237 105732) CALL 104320 - обработка кодов 72-237 105736) CLR 172 - ? 105742) RET ; обработка кодов 31-37 (для режима ГРАФ ?) 105744) CALL 106564 - 105750) CLR R1 105752) CLR R2 105754) MOV #100,R4 105760) MOVB R0,R3 105762) SUB #31,R3 105766) BMI 106056 105770) ASL R3 105772) ADD R3,PC 105774) BR 106012 - код 31 105776) BR 106016 - код 32 106000) BR 106022 - код 33 106002) BR 106026 - код 34 106004) BR 106034 - код 35 106006) BR 106042 - код 36 106010) BR 106050 - код 37 ; - код 31 106012) INC R1 106014) BR 106122 ; - код 32 106016) SUB R4,R2 106020) BR 106122 ; - код 33 106022) ADD R4,R2 106024) BR 106122 ; - код 34 106026) SUB R4,R2 106030) DEC R1 106032) BR 106122 ; - код 35 106034) SUB R4,R2 106036) INC R1 106040) BR 106122 ; - код 36 106042) ADD R4,R2 106044) INC R1 106046) BR 106122 ; - код 37 106050) ADD R4,R2 106052) DEC R1 106054) BR 106122 ; 106056) CMPB R0,#10 106062) BNE 106070 106064) DEC R1 106066) BR 106122 ; 106070) CMPB R0,#22 106074) BNE 106106 106076) CLR 156 106102) JMP 110442 ; 106106) CMPB R0,#14 106112) BNE 106226 106114) CALL 110376 - 106120) RET ; 106122) MOV 172,R4 - 106126) BNE 106140 106130) CLRB R0 106132) SWAB R0 106134) INC R0 106136) MOV R0,R4 106140) TSTB 51 - ЗАП в режиме ГРАФ включено ? 106144) BEQ 106154 - нет 106146) MOV 214,R0 - код цвета символа 106152) BR 106166 106154) TSTB 52 - СТИР в режиме ГРАФ включено ? 106160) BEQ 106220 - нет 106162) MOV 212,R0 - код цвета символа 106166) MOVB 154,R5 - унитарный код положения граф курсора 106172) BICB R5,@170 - 106176) MOV R0,R3 106200) COM R5 - 106202) BIC R5,R3 106204) BISB R3,@170 - 106210) CALL 106234 - 106214) SOB R4,106166 106216) BR 106226 106220) CALL 106234 - 106224) SOB R4,106220 106226) CALL 106564 - для кодов меньше или равно 37 106232) RET ; 106234) MOV 166,R5 - 106240) ADD R2,R5 106242) ADD R2,174 - 106246) MOV 154,-(SP) - сохранить унитарный код граф курсора 106252) MOV #100,R3 106256) TST R1 106260) BEQ 106404 106262) BMI 106330 106264) ASLB (SP) 106266) BCC 106314 106270) ADCB (SP) 106272) INC R5 106274) INC 156 - 106300) BIT #77,R5 106304) BNE 106314 106306) SUB R3,R5 106310) SUB R3,156 106314) TSTB 40 106320) BEQ 106404 106322) ASLB (SP) 106324) ADCB (SP) 106326) BR 106404 106330) CLC 106332) RORB (SP) 106334) BCC 106364 106336) BISB #200,(SP) 106342) BIT #77,R5 106346) BNE 106356 106350) ADD R3,R5 106352) ADD R3,156 - 106356) DEC 156 - уменьшить на 1 код положения текстового курсора 106362) DEC R5 106364) TSTB 40 - режим 32 ? 106370) BEQ 106404 - для режима 64 106372) CLC 106374) RORB (SP) 106376) BCC 106404 106400) BISB #200,(SP) 106404) MOV (SP)+,154 - восстановить унитарный код граф курсора 106410) MOV #1200,-(SP) 106414) TST 174 - 106420) BPL 106430 106422) NEG R3 106424) NEG (SP) 106426) BR 106436 106430) CMP 174,(SP) - 106434) BCS 106506 106436) SUB (SP),174 - 106442) ADD R3,156 - 106446) BMI 106460 106450) CMP 156,164 - сравнить положение текстового курсора с длиной экрана в символах 106456) BCS 106506 106460) SUB (SP),R5 106462) MOV R5,-(SP) 106464) JSR R4,110346 - сохранить R0-R4 106470) INCB 152 - 106474) CALL 102414 - 106500) JSR R4,110362 - восстановить R0-R4 106504) MOV (SP)+,R5 106506) MOV (SP)+,R3 106510) TST R5 106512) BPL 106522 106514) ADD 210,R5 - прибавить длину инф части экрана 106520) BR 106536 106522) CMP R5,210 - сравнить с длиной инф части экрана 106526) BCS 106536 106530) SUB 210,R5 - вычесть длину инф части экрана 106534) BR 106522 106536) MOV R5,166 - 106542) ADD 204,R5 - добавить адрес начала инф части экрана 106546) BIC #140000,R5 106552) ADD 202,R5 - добавить адрес начала ОЗУ экрана 106556) MOV R5,170 - 106562) RET ; коды меньше или равно 37 106564) TSTB 56 - гашение курсора 106570) BNE 106770 - включено гашение курсора 106572) MOV 214,R4 - код цвета символа 106576) MOV 212,R5 - код цвета фона 106602) XOR R5,R4 106604) CLR R5 106606) BISB 154,R5 - 106612) COM R5 106614) BIC R5,R4 106616) MOV 170,R3 106622) ASR R3 106624) BCC 106630 106626) SWAB R4 106630) ASL R3 106632) MOV R3,R1 106634) SUB #300,R3 106640) CMP R3,202 106644) BHI 106652 106646) ADD 206,R3 106652) MOV #7,R2 106656) XOR R4,(R3) 106660) CALL 111434 - 106664) SOB R2,106656 106666) MOV #3,R2 106672) CLC 106674) MOVB 40,R5 106700) BEQ 106704 106702) ASL R2 106704) ROR R4 106706) BCC 106714 106710) DEC R1 106712) ROR R4 106714) SOB R2,106704 106716) BIC #1,R1 106722) CMP R1,202 106726) BHI 106734 106730) ADD 206,R1 106734) MOV #7,R2 106740) XOR R4,(R1) 106742) ROL R4 106744) BCC 106752 106746) CALL 106772 - 106752) MOV R5,R5 106754) BEQ 106766 106756) ROL R4 106760) BCC 106766 106762) CALL 106772 - 106766) SOB R2,106740 106770) RET 106772) ADD #2,R1 106776) BPL 107004 107000) SUB 206,R1 107004) SEC 107006) ROL R4 107010) RET 107012) SUB #60,R0 107016) BPL 107024 107020) CLR R0 107022) BR 107042 107024) MOV 172,R1 107030) ASL R1 107032) ADD R1,R0 107034) ASL R1 107036) ASL R1 107040) ADD R1,R0 107042) MOV R0,172 107046) RET ; EMT 20 - вывод строки символов (R1-адрес строки R2-длина мл байт -символ огр ст байт) 107050) MOV R0,-(SP) 107052) MOV R3,-(SP) 107054) MOV R2,R3 107056) SWAB R3 107060) BIC #177400,R2 107064) MOVB (R1)+,R0 107066) CALL 102234 - вывод символа (то же что EMT 16) 107072) CMPB R0,R3 - сравнить с символом-ограничителем 107074) BEQ 107100 - если да то выход 107076) SOB R2,107064 - цикл вывода строки(107064-107076) 107100) MOV (SP)+,R3 107102) MOV (SP)+,R0 107104) RET ; EMT 22 - запись символа в служебную строку (R1-номер позиции в сл строке R0-код символа если=0 то сброс строки) 107106) JSR R4,110346 - сохранить R0-R4 107112) TST R0 107114) BNE 107124 107116) CALL 110470 - очистка сл строки если R0=0 107122) BR 107172 107124) CMPB R0,#177 107130) BHI 107154 107132) CMPB R0,#10 107136) BNE 107144 107140) MOV #21,R0 107144) SUB #20,R0 107150) BMI 107172 107152) BR 107166 107154) CMPB R0,#237 107160) BLOS 107172 107162) SUB #60,R0 107166) CALL 107200 - ВЫВОД ИЗ ЗНАКОГЕНЕРАТОРА 107172) JSR R4,110362 - восстановить R0-R4 107176) RET ================================================================================================================ ; вывод (формирование) в экранном ОЗУ символа из знакогенератора 107200) MOV R1,-(SP) 107202) MOV R2,-(SP) 107204) TSTB 40 - 32 символа в строке? (если @#40 не равно 0) 107210) BEQ 107214 - режим 64 символа в строке 107212) ASL R1 - символы будут двойной ширины при 32символах в строке 107214) BIC #177700,R1 107220) ADD 204,R1 - прибавить адрес начала инф области экрана 107224) SUB #1700,R1 107230) BIC #140000,R1 107234) ADD 202,R1 - прибавить начальный адрес ОЗУ экрана 107240) MOV 160,-(SP) - сохранить адрес курсора в ОЗУ 107244) MOV R1,160 - 107250) BIC #177400,R0 - код для вывода символа не более 377 (мл байт R0) 107254) CALL 102746 - ВЫВОД СИМВОЛА 107260) MOV (SP)+,160 - восстановить адрес курсора в ОЗУ 107264) MOV (SP)+,R2 107266) MOV (SP)+,R1 107270) RET =============================================================================================================== ; EMT 24 - установка курсора по координатам (R1-координата X R2-координата Y) 107272) JSR R4,110346 - сохранить R0-R4 107276) CALL 111314 107302) MOV 2(SP),R1 107306) MOV 4(SP),R2 107312) TSTB 40 107316) BEQ 107322 107320) ASL R1 107322) MOV #6,R0 107326) ASL R2 107330) SOB R0,107326 107332) TSTB 50 107336) BNE 107400 107340) BIC #177700,R1 107344) SUB 164,R2 107350) BPL 107344 107352) ADD 164,R2 107356) BMI 107352 107360) ADD R1,R2 107362) MOV R2,156 107366) INCB 152 107372) CALL 102414 - 107376) BR 107470 107400) BIC #177000,R1 107404) MOV R1,R3 107406) ASR R1 107410) ASR R1 107412) ASR R1 107414) MOVB 155,R0 107420) BIC #177770,R3 107424) BEQ 107432 107426) ASL R0 107430) SOB R3,107426 107432) MOVB R0,154 107436) SUB 210,R2 107442) BPL 107436 107444) ADD 210,R2 107450) BMI 107444 107452) ADD R1,R2 107454) MOV R2,166 107460) CLR R1 107462) CLR R2 107464) CALL 106234 - 107470) CALL 111314 - 107474) JSR R4,110362 - восстановить R0-R4 107500) RET ; EMT 26 - чтение координат курсора (R1-координата X R2-координата Y) 107502) MOV R0,-(SP) 107504) TSTB 50 107510) BNE 107526 107512) MOV 156,R1 107516) MOV R1,R2 107520) BIC #177700,R1 107524) BR 107562 107526) MOV 166,R1 107532) MOV R1,R2 107534) BIC #177700,R1 107540) ASL R1 107542) ASL R1 107544) ASL R1 107546) MOVB 154,R0 107552) ASR R0 107554) BCS 107562 107556) INC R1 107560) BR 107552 107562) TSTB 40 107566) BEQ 107572 107570) ASR R1 107572) BIC #77,R2 107576) MOV #6,R0 107602) ASR R2 107604) SOB R0,107602 107606) MOV (SP)+,R0 107610) RET ; EMT 30 - формирование точки по координатам (R0=0-стирание R0=1-запись R1-коордX R2-коордY) 107612) MOV R1,176 107616) MOV R2,200 107622) MOVB R0,153 107626) JSR R4,110346 - сохранить R0-R4 107632) TSTB 40 107636) BEQ 107644 107640) ASL R1 107642) BCS 107770 107644) CMP R1,#1000 107650) BCC 107770 107652) MOV #6,R0 107656) ASL R2 107660) BCS 107770 107662) SOB R0,107656 107664) CMP R2,210 107670) BCC 107770 107672) MOV R1,R3 107674) ASR R1 107676) ASR R1 107700) ASR R1 107702) ADD R2,R1 107704) ADD 204,R1 107710) BIC #140000,R1 107714) ADD 202,R1 107720) MOVB 155,R2 107724) BIC #177770,R3 107730) BEQ 107736 107732) ASL R2 107734) SOB R3,107732 107736) MOVB (R1),R0 107740) BICB R2,R0 107742) MOV 214,R3 107746) TSTB 153 107752) BNE 107760 107754) MOV 212,R3 107760) COM R2 107762) BIC R2,R3 107764) BISB R3,R0 107766) MOVB R0,(R1) 107770) JSR R4,110362 - восстановить R0-R4 107774) RET ; EMT 32 - формирование вектора по координатам (R0=0-стирание R0=1-запись R1-коордX конца вектора R2-коордY) 107776) JSR R4,110346 - сохранить R0-R4 110002) MOVB R0,153 110006) MOV R1,R3 110010) MOV R2,R4 110012) MOV 176,R1 110016) MOV 200,R2 110022) MOV R3,176 110026) MOV R4,200 110032) CLR R0 110034) SUB R1,R3 110036) BMI 110046 110040) BEQ 110052 110042) INC R0 110044) BR 110052 110046) DEC R0 110050) NEG R3 110052) CLR R5 110054) SUB R2,R4 110056) BMI 110066 110060) BEQ 110072 110062) INC R5 110064) BR 110072 110066) DEC R5 110070) NEG R4 110072) CMP R4,R3 110074) BHI 110114 110076) MOV R5,-(SP) 110100) CLR -(SP) 110102) MOV R3,R5 110104) MOV R4,R3 110106) MOV R5,R4 110110) CLR R5 110112) BR 110122 110114) CLR -(SP) 110116) MOV R0,-(SP) 110120) CLR R0 110122) CLR -(SP) 110124) TST R3 110126) BNE 110140 110130) INC R3 110132) SUB #12,SP 110136) BR 110250 110140) SUB R3,R4 110142) BMI 110150 110144) INC (SP) 110146) BR 110140 110150) ADD R3,R4 110152) MOV R3,-(SP) 110154) MOV R3,-(SP) 110156) ASR (SP) 110160) MOV R4,-(SP) 110162) CLR -(SP) 110164) CLR -(SP) 110166) CLR R4 110170) ADD 4(SP),2(SP) 110176) BEQ 110220 110200) CMP 2(SP),6(SP) 110206) BLE 110220 110210) INC R4 110212) SUB 10(SP),2(SP) 110220) ADD 12(SP),R4 110224) MOV R4,(SP) 110226) ASR R4 110230) SUB R4,(SP) 110232) CALL 110270 - 110236) ADD 14(SP),R1 110242) ADD 16(SP),R2 110246) MOV (SP),R4 110250) CALL 110270 - 110254) SOB R3,110170 110256) ADD #20,SP - глубина стека при работе была 20 110262) JSR R4,110362 - восстановить R0-R4 110266) RET 110270) TST R4 110272) BEQ 110306 110274) ADD R0,R1 110276) ADD R5,R2 110300) CALL 107626 - 110304) SOB R4,110274 110306) RET ; EMT 34 - чтение ССД в R0 (ячейки-байты от 40 до 57 - содержат 0 или не 0 - число 377, в ССД соотв записывается 0 или 1) 110310) MOV R1,-(SP) 110312) CLR R0 110314) MOV #40,R1 - адрес начала служебных ячеек драйвера дисплея (режимы работы дисплея) 110320) SEC - установить бит переноса 110322) ROR R0 110324) BCS 110334 - (BCS=BLO - меньше) прочитаны все ячейки ССД 110326) TSTB (R1)+ 110330) BNE 110320 110332) BR 110322 110334) MOV (SP)+,R1 110336) RET ; сист порт в исх сост 110340) MOV #220,@#177716 ; сохранить R0-R4 110346) MOV R3,-(SP) 110350) MOV R2,-(SP) 110352) MOV R1,-(SP) 110354) MOV R0,-(SP) 110356) MOV R4,-(SP) 110360) RTS R4 ; восстановить R0-R4 110362) MOV (SP)+,R0 110364) MOV (SP)+,R0 110366) MOV (SP)+,R1 110370) MOV (SP)+,R2 110372) MOV (SP)+,R3 110374) RTS R4 110376) CLR 156 110402) CALL 102414 - 110406) MOV 212,R0 110412) MOV 160,R3 110416) MOV 210,R2 110422) ASR R2 110424) MOV R0,(R3) 110426) ADD #2,R3 110432) BPL 110440 110434) SUB 206,R3 110440) SOB R2,110424 110442) CLR R5 110444) CALL 106536 - 110450) CLR 174 110454) MOVB 155,154 110462) CALL 111314 - 110466) RET 110470) MOV 216,R1 110474) MOV 204,R3 110500) ADD 202,R3 110504) MOV #20,R4 110510) CALL 111450 - 110514) SOB R4,110510 110516) MOV 220,R1 110522) ADD #1400,R3 110526) CALL 111474 - 110532) CALL 111130 - ; вход с драйвера клавиатуры (с адреса 102040) ? 110536) CLR R0 110540) CLR 222 110544) MOV #6,R2 110550) MOV R0,-(SP) 110552) MOV R2,-(SP) 110554) CALL 110572 - 110560) MOV (SP)+,R2 110562) MOV (SP)+,R0 110564) INC R0 110566) SOB R2,110550 110570) RET ; 110572) INC 224 110576) TST 222 110602) BNE 111126 110604) CLR 224 110610) MOV #43,R1 110614) ADD R0,R1 110616) ASL R0 - сделать четным 110620) ADD R0,PC - получить адреса для BR 110622) BR 110636 - 110624) BR 110654 - 110626) BR 110666 - 110630) BR 110700 - 110632) BR 110712 - 110634) BR 110724 - ; 110636) MOV #111734,R3 110642) TSTB (R1) 110644) BEQ 110770 110646) MOV #111740,R3 110652) BR 110770 ; 110654) TSTB (R1) 110656) BEQ 110764 110660) MOV #111744,R3 110664) BR 110770 ; 110666) TSTB (R1) 110670) BEQ 110764 110672) MOV #111750,R3 110676) BR 110770 ; 110700) TSTB (R1) 110702) BEQ 110764 110704) MOV #111754,R3 110710) BR 110770 ; 110712) TSTB (R1) 110714) BEQ 110764 110716) MOV #111760,R3 110722) BR 110770 ; 110724) TSTB (R1) 110726) BEQ 110764 110730) TSTB 51 110734) BEQ 110744 110736) MOV #111770,R3 110742) BR 110770 ; 110744) MOV #111764,R3 110750) TSTB 52 110754) BEQ 110770 110756) MOV #111774,R3 110762) BR 110770 ; 110764) MOV #112000,R3 ; от подпрограммы 110572 110770) ASL R0 110772) ADD #4,R0 110776) MOV #100,R1 111002) TSTB 53 111006) BEQ 111012 111010) ASR R1 111012) SUB R0,R1 111014) MOV #4,R2 111020) MOV 212,-(SP) 111024) MOV 214,-(SP) 111030) MOV 40,-(SP) 111034) MOV 44,-(SP) 111040) MOV 216,212 111046) MOV 220,214 111054) MOVB 53,40 111062) MOV 54,44 111070) MOVB (R3)+,R0 111072) MOV R3,-(SP) 111074) CALL 107200 - 111100) MOV (SP)+,R3 111102) INC R1 111104) SOB R2,111070 111106) MOV (SP)+,44 111112) MOV (SP)+,40 111116) MOV (SP)+,214 111122) MOV (SP)+,212 111126) RET ; вызов из подпрограммы 101332 - ? 111130) MOV #100601,R5 - 111134) MOV #20,R4 111140) TSTB 40 111144) BEQ 111154 111146) MOV #140003,R5 111152) ASL R4 111154) MOV 216,R1 111160) BIC R5,R1 111162) COM R5 111164) MOV 220,R3 111170) BIC R5,R3 111172) BIS R3,R1 111174) MOV 204,R3 111200) SUB #300,R3 111204) BIC #140000,R3 111210) ADD 202,R3 111214) MOV R3,R5 111216) CALL 111474 - 111222) CLR R3 111224) CLR R2 111226) MOV 112(R3),R0 111232) ROR R0 111234) BCS 111244 111236) BEQ 111276 111240) INC R2 111242) BR 111232 111244) MOV R2,R1 111246) TSTB 40 111252) BNE 111264 111254) ADD R5,R1 111256) MOVB 220,(R1) 111262) BR 111240 111264) ASL R1 111266) ADD R5,R1 111270) MOV 220,(R1) 111274) BR 111240 111276) ADD #2,R3 111302) ADD R4,R5 111304) BIT #77,R5 111310) BNE 111224 111312) RET ; для кодов 221 222 223 224 111314) TSTB 50 111320) BNE 111336 111322) CALL 103222 - для кодов 221 222 223 224 при TSTB 50 =0 111326) MOV #20000,106 111334) BR 111350 111336) CALL 106564 - для кодов 221 222 223 224 при TSTB 50 не равно 0 111342) MOV #2000,106 111350) RET 111352) CALL 103222 - 111356) INCB 152 111362) CALL 102414 - 111366) CALL 103222 - 111372) RET 111374) MOV 212,R0 111400) MOV 160,R3 111404) MOV #12,R2 111410) TSTB 40 111414) BNE 111422 111416) MOVB R0,(R3) 111420) BR 111424 111422) MOV R0,(R3) 111424) CALL 111434 - подготовка для вывода строки 111430) SOB R2,111410 - цикл вывода (111410-111430) 111432) RET ; подготовка для вывода строки ИЗ МАТРИЦЫ СИМВОЛА 111434) ADD #100,R3 111440) BPL 111446 111442) SUB 206,R3 111446) RET ################################################################################################################# ### подпрограммы от EMT ... ####### ; сл ячейки 202 206 111450) MOV #40,R2 111454) CMP R3,202 111460) BHI 111466 111462) ADD 206,R3 111466) MOV R1,-(R3) 111470) SOB R2,111466 - цикл вывода (111466-111470) 111472) RET ; сл ячейки 206 111474) MOV #40,R2 111500) TST R3 111502) BPL 111510 111504) SUB 206,R3 111510) MOV R1,(R3)+ 111512) SOB R2,111510 - цикл вывода (111510-111512) 111514) RET ; сл ячейки 202 206 212 111516) MOV R1,R3 111520) SUB #1200,R3 111524) CMP R3,202 111530) BCC 111536 111532) ADD 206,R3 111536) TST R2 111540) BEQ 111576 111542) MOV #40,R4 111546) MOV (R1)+,(R3)+ 111550) SOB R4,111546 - цикл вывода (111546-111550) 111552) TST R1 111554) BPL 111564 111556) SUB 206,R1 111562) BR 111574 111564) TST R3 111566) BPL 111574 111570) SUB 206,R3 111574) SOB R2,111542 - цикл вывода (111542-111574) 111576) MOV #12,R4 111602) MOV 212,R1 111606) CALL 111474 - 111612) SOB R4,111606 - цикл вывода (111606-111612) 111614) RET ; сл ячейки 202 206 212 111616) MOV R1,R3 111620) ADD #1200,R3 111624) CMP R1,202 111630) BHI 111636 111632) ADD 206,R1 111636) CMP R3,#100000 111642) BLOS 111650 111644) SUB 206,R3 111650) TST R2 111652) BEQ 111714 111654) MOV #40,R4 111660) MOV -(R1),-(R3) 111662) SOB R4,111660 111664) CMP R1,202 111670) BHI 111700 111672) ADD 206,R1 111676) BR 111712 111700) CMP R3,202 111704) BHI 111712 111706) ADD 206,R3 111712) SOB R2,111654 111714) MOV #12,R4 111720) MOV 212,R1 111724) CALL 111450 - 111730) SOB R4,111724 111732) RET ######## ОБЛАСТЬ ЗНАКОГЕНЕРАТОРА 111734 - 116074 #################################################################### ... ... ... ######################################################################################################################### ; EMT 36 - драйвер магнитофона 116076) EMT 36 - но это какое-то зацикливание (обращение к самому себе = EMT36 EMT36 ...) #################### ? 116100) RET ####################################################################################################################### ? ========================= ВХОД В СИСТЕМНОЕ ПЗУ - ПЕРЕХОД С АДРЕСА=100000 ============================================ 116102) MOV #1000,SP - установить стек на адрес 1000 (это будет и в Мониторе) 116106) CALL @#116116 - начальные установки непонятно чего ? ОЗУ экрана ? 116112) JMP @#100260 - вход в Диалоговый Монитор ; начальные установки при включении - какие-то непонятные действия с ОЗУ экрана ######################################### ; (возможно регистр рулонного сдвига можно настроить на другую область ОЗУ ? ) ; если вход не с 116116 то возможно это триггерное переключение режимов экрана РП-полный экран и наоборот 116116) MOV @#177664,R0 - прочитать регистр рулонного сдвига ### (? ЗАЧЕМ - он же еще не установлен) ### 116122) SWAB R0 116124) ROR R0 116126) CLR R4 116130) ROR R0 116132) MOV #100,R2 116136) ADD #45000,R0 116142) MOV R0,R1 116144) SUB #40000,R1 116150) MOV #200,R3 116154) TST R0 116156) BPL 116164 116160) SUB #40000,R0 116164) CMP #40100,R1 116170) BLE 116176 116172) ADD #40000,R1 116176) MOV #177777,-(R1) - очистка ОЗУ экрана (100000-40000) 116202) MOV #177777,(R0)+ - очистка ОЗУ пользователя (0-40000) 116206) TST R4 116210) BEQ 116216 116212) CLR (R4)+ 116214) CLR -(R5) 116216) BIT #77,R0 116222) BNE 116176 116224) MOV #77,R5 116230) SOB R5,116230 - задержка 116232) MOV R1,R5 116234) ADD R2,R5 116236) MOV R0,R4 116240) SUB R2,R4 116242) SOB R3,116154 - цикл (116154-116242) 116244) CLRB -(R0) 116246) CLRB (R4)+ 116250) CLRB (R1)+ 116252) CLRB -(R5) 116254) MOV #1400,R3 116260) SOB R3,116260 - задержка ( ? ) 116262) SOB R2,116244 - цикл (116244-116262) 116264) RET ; ############ есть ли ссылки на адрес 116266 ??? здесь нет обращений к подпрограммам!!! ########## ; 116266) MOV #177766,R2 116272) CLR R0 116274) CLR R1 116276) MOV #7416,R5 116302) ADD R0,R5 116304) MOV (R5),R3 116306) ADD R2,R3 116310) CMP R3,#0 116314) BLT 116354 116316) CMP R3,#37 116322) BGT 116354 116324) MOV #40000,R5 116330) ADD R1,R5 116332) ADD R3,R5 116334) MOVB #252,(R5) 116340) MOV #40077,R5 116344) ADD R1,R5 116346) SUB R3,R5 116350) MOVB #252,(R5) 116354) MOV #7416,R5 116360) ADD R0,R5 116362) MOV (R5),R3 116364) ADD R2,R3 116366) SUB #6,R3 116372) CMP R3,#0 116376) BLT 116432 116400) CMP R3,#77 116404) BGT 116432 116406) MOV #40000,R5 116412) ADD R1,R5 116414) ADD R3,R5 116416) CLRB (R5) 116420) MOV #40077,R5 116424) ADD R1,R5 116426) SUB R3,R5 116430) CLRB (R5) 116432) ADD #100,R1 116436) INC R0 116440) INC R0 116442) BIC #177701,R0 116446) CMP R1,#40000 116452) BCS 116276 116454) INC R2 116456) CMP R2,#60 116462) BLT 116272 116464) RET ######################################################################################################## ; автор эмулятора стер EMT 36 - зачем ? ; ############################### !!! здесь было EMT 36 !!! ######################### ; в каком то из выпусков ПК-БК полностью есть драйвер EMT 36 с описанием - в выпуске КПСС указана его ; длина=1700 ? 116466) NOP ... ... ... 117456) NOP 117460) RET ######################################################################################################## =============================== работа с линией ТЛГ ================================================================= ; EMT 40 - инициализация линии ТЛГ (номер скорости в R0, чем меньше число-тем больше скорость. При R0=0 скорость 9600 бод) 117462) ASL R0 117464) MOV 117740(R0),254 - установить скорость линии ТЛГ. В ячейке 254 величина программной задержки для заданного 117472) RET - номера скорости ; EMT 42 - передача байта на линию (R0 - мл байт для передачи) 117474) MOV R0,-(SP) 117476) MOV R4,-(SP) 117500) BIS #1400,R0 - добавить СТОП-бит (маска 1100000000) 117504) MOV #13,R4 - число передаваемых бит=11Д(СТАРТ-бит + 8бит данных + 2 СТОР-бита) 117510) BIT #200,@#177716 - прочитать бит готовности ТЛГ 117516) BEQ 117510 - ожидать готовность принимающей стороны 117520) CLC - сбросить бит переноса-в него будет выдвигаться из младшего разряда бит для передачи 117522) BR 117526 - сначала СТАРТ-бит (перевод линии данных из 1 в 0 т.к. бит переноса сброшен командой CLC) 117524) ASR R0 - младшими битами вперед 117526) BCC 117540 - (нет переноса) бит 0 117530) MOV #220,@#177716 - выдать бит 1 (длительность в цикле 117554 задается R5 по содержимому ячейки 254) 117536) BR 117550 117540) MOV #200,@#177716 - выдать бит 0 (длительность в цикле 117554 задается R5 по содержимому ячейки 254) 117546) BR 117550 117550) MOV 254,R5 - константа скорости ТЛГ 117554) SOB R5,117554 - задержка 117556) SOB R4,117524 - цикл передачи байта (117524-117556) - линия остается в 1 (режим СТОР) 117560) MOV (SP)+,R4 117562) MOV (SP)+,R0 117564) RET ; EMT 44 - прием байта с линии (принятый байт будет в младшем байте R0) 117566) MTPS #0 - ССП=0 разрешить прерывания в цикле ожидания готовности передатчика 117572) MOV R3,-(SP) 117574) MOV R4,-(SP) 117576) MOV #177716,R3 - адрес системного порта в R3 117602) MOV #20,R4 - число для битовой маски 00010000 (разряд 4 системного порта - это прием с линии ТЛГ) 117606) CLR R0 - готовим R0 для приема байта с линии ТЛГ 117610) BIT R4,(R3) - проверить готовность передающей стороны (маска 00010000) 117612) BEQ 117610 - ожидать готовности, 117614) MOV #260,(R3) - выдать свой сигнал готовности к приему 117620) BIT R4,(R3) - проверить СТАРТ-бит 117622) BNE 117614 - ожидать СТАРТ-бит если его нет 117624) MTPS #200 - ССП=200 запретить прерывания во время приема данных 117630) MOV 254,R5 - константа скорости ТЛГ 117634) ASR R5 - середина битового интервала 117636) SOB R5,117636 - задержка в цикле приема СТАРТ-бита 117640) ASR R4 - R4 использован по совместительству в цикле приема (R4=20 - ASR R4 - R4=10=8Д бит для приема) 117642) MOV 254,R5 - константа скорости ТЛГ 117646) SOB R5,117646 - задержка (попадаем в середину битового интервала - отсчет задержки идет от середины СТАРТ-бита) 117650) BIT #20,(R3) - прочитать информационный бит 117654) BNE 117662 - информационный бит не 0 (=1) 117656) CLC - сбросить бит переноса (принят бит 0) 117660) BR 117666 - на запись принятого бита в R0 117662) SEC - установить бит переноса (принят бит 1) 117664) BR 117666 - для выравнивания задержек при приеме 0 и 1 117666) RORB R0 - вдвигаем принятый бит вправо через старший разряд (передача идет младшим битом вперед) 117670) SOB R4,117642 - цикл приема байта (117642-117670) 117672) MOV #220,(R3) - снимаем сигнал готовности ТЛГ 117676) MOV (SP)+,R4 117700) MOV (SP)+,R3 117702) RET ; EMT 46 - передача массива по линии (R1-адрес массива на передачу R2-длина массива в байтах) 117704) MOV R0,-(SP) 117706) MOVB (R1)+,R0 117710) CALL 117474 - передача байта на линию 117714) SOB R2,117706 - цикл передачи массива (117706-117714) 117716) MOV (SP)+,R0 117720) RET ; EMT 50 - прием массива с линии (R1-адрес следующего за принятым массивом байта R2=0) 117722) MOV R0,-(SP) 117724) CALL 117566 - прием байта с линии 117730) MOVB R0,(R1)+ 117732) SOB R2,117724 - цикл приема массива (117724-117732) 117734) MOV (SP)+,R0 117736) RET ----------### Константы для скорости ТЛГ - ###-----### В БК нет скоростей 200-100 ###----------------------------- ###### ######### 117740) 14 - константа для скорости ТЛГ = 9600 бод (число в цикле задержки) 117742) 36 - константа для скорости ТЛГ = 4800 бод 117744) 103 - константа для скорости ТЛГ = 2400 бод 117746) 213 - константа для скорости ТЛГ = 1200 бод 117750) 435 - константа для скорости ТЛГ = 600 бод 117752) 1100 - константа для скорости ТЛГ = 300 бод 117754) 1542 - константа для скорости ТЛГ = 200 бод 117756) 2206 - константа для скорости ТЛГ = 150 бод 117760) 3300 - константа для скорости ТЛГ = 100 бод 117762) 4422 - константа для скорости ТЛГ = 75 бод 117764) 6633 - константа для скорости ТЛГ = 50 бод 117766) 0 117770) 0 117772) 0 117774) 0 117776) 111111 - контрольная сумма ПЗУ Монитора ? ############################ КОНЕЦ ПЗУ МОНИТОРА ################################################################ ############################## 120000) 137 - ? (JMP @#......)