Ответить на тему  [ 1 сообщение ] 
 
Автор Сообщение
Администратор
Аватар пользователя

Зарегистрирован: 27 ноя 2011, 01:03
Сообщений: 223
Откуда: Москва
Сообщение Исходный код монитора БК-0010/БК-0010.01
#####################   МОНИТОР БК-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 @#......)


08 мар 2014, 19:38
Профиль
Показать сообщения за:  Сортировать по:  
Ответить на тему   [ 1 сообщение ] 

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000 - 2011 phpBB Group.
Design creat de Florea Cosmin Ionut | Translation by WebSok.Ru

закрыть

Советскому бытовому " БК-0011М" посвящается...


Вопреки всем скептикам и недоброжелателям, дело БК живет и развивается. Не за горами день, когда будет выпущен в свет "БК-0012 Pulsar" - расширенный FPGA-клон БК-0011М. Пока же на данном форуме Вы можете ознакомиться с репликами БК-0011М(-01), приставкой Booster-11, репликой контроллера SMK64 (а также его FPGA-клоном - SMK512), аппаратным эмулятором ПЗУ КР1801РЕ2Б, блоками расширения с процессорами ВМ2/ВМ3, и другими интересными материалами и работами.
Ведутся работы по отрисовке в 3D корпусов БК, МСТД, оригинальных клавиатуры, джойстика и мыши, но пока не удается найти их производство по приемлемой цене при малом тираже. Выполнено производство новодельных пленок для клавиатур БК-0011М.
Важным для возрождения БК и его сообщества является новый софт (игры и демо в особености), и они периодически появляются!
Удалось решить многие hard-задачи, но нет системных программистов, востребованных в проекте БК-0012, как минимум для тестирования. Требуется разработка полноценного Win32-компилятора Си в bin-файлы БК.
Релизован полноценный каталогизатор всего софта БК, с удобным интерфейсом. Осталось выполнить собственно большую задачу каталогизации.

Ждем ваших откликов, идей. Сообщайте о данном ресурсе всем, кто увлекался в прошлом БКшкой, присылайте их и свои e-mail для рассылки новостей из мира БК.

nimamov@mail.ru