Вторник, 17.10.2017, 09:01

..



Главная Регистрация Вход
Приветствую Вас, Гость · Браузер: « v»
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Всё об «Электроника БК0010(-01), БК0011(М)»! » Газеты | Документации | Статьи | Журналы » Газеты на «БК001x» » «Warning» [11.11.94] (Автор: Magic Bytes Software [Тюрев Д.])
«Warning» [11.11.94]
-=RUS=-Дата: Пятница, 17.10.2014, 18:47 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 350
Репутация: 1
Статус: Offline
(Warning)

                     W  A  R  N  I  N  G

                   от Magic Bytes Software

   Сей  файл  предназначен  для программистов на БК11М.  Поэтому
уважаемые пользователи могут со спокойной душой нажать <КТ>.

   Я   хочу   предложить   несколько    способов   делать   свои
программы   так,   чтобы   они  работали  в  любой  операционной
системе.   Допустим,   Вы  решили  написать  программу,  в  ходе
работы    которой    необходимо   использовать    дополнительные
страницы.   Как  быть?   Использовать   1-ю  страницу?   Но  там
находится  и  работает  система  DOSB.  Использовать  4-ю  стра-
ницу?   Но там  ANDOS.   Использование  любой группы "свободных"
страниц  влечет  за  собой невозможность  работы вашей программы
в какой-либо системе.
   Я  вижу два наиболее приемлемых решения.  Первое в том, чтобы
при  запуске  программа определяла,  какая станица  подключена в
данный  момент  со  100000,  т.е.  какая страница  является сис-
темной.  Это  могут  быть  страницы с 1 по 4.  Затем  происходит
копирование  этой  страницы  в  какую-либо  другую  определенную
страницу.  Например, в 4-ю. т.е. в какой  бы  странице не распо-
лагалась  система  она  будет   всегда   переписываться  в  4-ю.
Дальше  программа  на  протяжении  всей  своей работы использует
свободные  с  1  по  3 страницы.  Если потребуется  обратиться к
монитору  или  к  EMT 36,   то  4-я  страница   подключается  со
100000  на  необходимое  время  (например,  на  время  работы  с
диском).  Перед  выходом  из  программы система  возвращается  в
родную страницу, а из 4-ой удаляется (это необходимо).
   К  недостаткам  данного   способа  можно  отнести:  во  время
обработки   EMT 36   система  не  должна  переключать  страницы,
иначе   произойдет   зависание;  при  некорректном   выходе   из
программы  (например,  по  RESETу) система окажется  не в родной
странице.  В  связи с этим гораздо  лучшим  является второй спо-
соб, более сложный, но и обладающий более высокой надежностью.
   При  запуске  программы  происходит  так  же,  как и в первом
случае,   определение   подключенной   со   100000   (системной)
страницы.   Затем  устанавливается  соответствие  между  восемью
физическими  и  восемью  логическими  номерами страниц.  Об этом
стоит  сказать  подробнее.  У БК11М - восемь физических  страниц
с номерами  от  0  до 7.  Все программы, которым  необходимы для
работы дополнительные страницы  (т.е. кроме 0 и 5),  переключают
их  непосредственной  записью  чисел в системный  регистр.  Т.е.
работают с физическими номерами страниц.  Суть моей  идеи в том,
чтобы ввести логические номера:0, 1, 2, 3, SYS, 5, 6, 7. Причем,
логические  номера 0, 5, 6, 7 всегда соответствую своим физичес-
ким.  А  конфигурация 1, 2, 3 и SYS страниц зависит от того, где
расположена  система.   Т.е.  страница  SYS   соответствует  той
физической,  где расположена система, а 1, 2, 3 - трем оставшим-
ся свободным страницам. Приведу два примера.

   Система расположена в 4-ой странице, тогда

            Логические номера │ Физические номера
           ───────────────────┼───────────────────
                    0         │         0

                    1         │         1
                    2         │         2
                    3         │         3
                   SYS        │         4

                    5         │         5
                    6         │         6
                    7         │         7

   Система расположена в 1-ой странице, тогда

            Логические номера │ Физические номера
           ───────────────────┼───────────────────
                    0         │         0

                   SYS        │         1
                    1         │         2
                    2         │         3
                    3         │         4

                    5         │         5
                    6         │         6
                    7         │         7

   Таким образом  "универсальная" программа будет выглядеть так.
В  самом начале (по крайней мере до первого  переключения  стра-
ниц)  должна  быть   вызвана  подпрограмма   PAGE_TEST,  которая
определяет  системную   страницу  и  инициализирует  необходимые
переменные.  Теперь,  когда  программе  потребуется  переключить
страницы,  вместо  записи  непосредственно  в   регистр  177716,
необходимо, указав пару (для нулевого  и  первого окна) логичес-
ких  номеров  нужных  страниц,   вызвать   подпрограмму  SERVER,
которая  с  учетом   проведенного   тестирования   и   указанных
логических номеров, выдаст в R0 число для записи его в 177716.
   Что даёт такой способ,  понять  не трудно.  Вместо того чтобы
использовать страницы с 1  по  4, не ведая где находится система
(т.е.  практически  подгоняя  свою  программу под данную ОС)  вы
будете  указывать  логические номера от 1  до  3, будучи уверен-
ными,  что комбинация физических страниц,  выданная  подпрограм-
мой  SERVER,  будет  свободна  от  системы.  А  если  вам  нужно
обратиться   к   диску,   то   достаточно   указать   логический
номер SYS. И будет подключена нужная физическая страница.
   Преимущество  данного  метода: ОС остается в своей  странице.
Недостаток:  низкая   скорость  работы  (по  сравнению  с  одной
командой  MOV,  конечно).   Надо  сказать,   что  в  большинстве
случаев  скорость  переключения  страниц  неважна.   Если же это
существенно,  то  можно,  вызвав подпрограмму SERVER  с  нужными
параметрами  запомнить  значение  R0  и потом по мере надобности
записывать его непосредственно в 177716.
   Далее  я   привожу  тексты  двух  вышеописанных  подпрограмм.
Первую  из них, PAGE_TEST, необходимо вызвать один раз  в  самом
начале.   Для  текущей   работы   со   страницами   используется
PAGE_SERVER.  Входные  данные для него в R0.   Формат следующий:
   Если необходимо подключить сразу пару страниц, то
   R0= < n1+n2*400 >, где  n1  -  номер   логической   страницы,
подключаемой  с  40000,  n2  -  со 100000.  Если нужно  сменить,
лишь  одну  страницу,  а   вторую   оставить   как   прежде,  то
   R0  =    или  соответственно R0  =  <377+n2*400>.
Выходные   данные  тоже  в  R0 - число  для  занесения в 177716.
В  самой  подпрограмме  оно  не  заносится  в  177716  для того,
чтобы  была возможность его отдельного использования.
   Как уже было сказано, логические номера 0, 5, 6, 7 - соответ-
ствуют своим физическим. 1, 2, 3 - свободные страницы, 4 (SYS) -
страница с ОС.
   В  случае  использования комбинации, выданной PAGE  SERVERом,
без  него  самого  (т.е.  не непосредственно  после его  вызова)
необходимо  заносить  ее не только в  177716,  но и в переменную
DOUBLE.

   Текст приведен в формате ассемблера ED. Некоторые пояснения:

   .B:     - список байтов
   .+n     - резервирование n байтов
   .E      - резервирование слова
   PUT  R0 = MOV  R0,-(SP)
   GET  R0 = MOV  (SP)+,R0

BMS1:        .B:150,10,50,70,110,30,170,130
BMS2:        .B:16,10,12,13,14,11,17,15
BSS:         .+4
DOUBLE:      .E

PAGE_TEST:   MOV    @#137776,R5
             MOV    #107514,@#137776
             MOV    #BMS2+1,R1
             CLR    R0
1:           INC    R0
             MOVB   (R1)+,R2
             SWAB   R2
             BIS    #10000,R2
             MOV    R2,@#177716
             CMP    @#137776,#107514
             BNE    1
             MOV    R5,@#137776
             MOVB   R0,BSS+3
             CLR    R1
             MOV    #BSS,R2
             MOV    #3,R3
2:           INC    R1
             CMP    R0,R1
             BEQ    2
             MOVB   R1,(R2)+
             SOB    R3,2
             RET

PAGE_SERVER: PUT    R1
             PUT    R2
             MOV    #DOUBLE,R2
             MOV    R0,R1
             TSTB   R0
             BMI    1
             BIC    #177400,R0
             BEQ    2
             CMP    R0,#4
             BHI    2
             MOVB   BSS-1(R0),R0
2:           BIC    #70000,(R2)
             BISB   BMS1(R0),1(R2)
1:           TST    R1
             BMI    3
             CLRB   R1
             SWAB   R1
             BEQ    4
             CMP    R1,#4
             BHI    4
             MOVB   BSS-1(R1),R1
4:           BIC    #3400,(R2)
             BISB   BMS2(R1),1(R2)
3:           MOV    (R2),R0
             GET    R2
             GET    R1
             RET

   Теперь  несколько  слов разработчикам ОС.  Их усилия, по всей
видимости,  должны  быть   направлены  на  благо  пользователей.
Ведь  в  идеале  любая программа  (кроме, разумеется,  системных
утилит)  должна  работать в каждой системе.  Тогда  пользователь
получит  возможность  свободного  выбора  -  в какой системе ему
работать,  ориентируясь  лишь  на  качество   данной  системы  и
удобство работы в ней.
   Если  не  считать  того,  что  системы  расположены  в разных
страницах  (как  было  показано  выше,   это  нетрудно  учесть),
разнобой наблюдается в обработке EMT 36.
   Приведу  перечень  основных  свойств,  реализация  которых  в
каждой ОС позволит  избавиться от множества проблем  и  облегчит
жизнь как программистам, так и пользователям.

   а) Перехват вектора 4 во время обработки  EMT 36  осуществля-
      ется  "прозрачно".  Т.е.  при  возникновении прерывания по
      этому  вектору  происходит  его  восстановление и выход из
      обработки  с  передачей   программе    пользователя   кода
      ошибки.  На   экран  (или  подключенную  с 40000 страницу)
      ничего не выводится.

   б) Передача   информации  о  каталоге диска программе пользо-
      вателя  осуществляется   следующим  образом. Резервируются
      два  значения  байта  (например, 300 и 301), использование
      которых  в  первом байте блока параметров EMT 36 обрабаты-
      вается  так.  Если  первый байт блока параметров - 300, то
      во  втором  слове  блока  параметров вместо адреса чтения-
      записи  -  адрес  текстовой  строки  в  памяти, содержащей
      маршрут,  причем  любой  длины, а не только 16 символов, и
      если  нужно,  маска  имени  файла.  Система читает каталог
      диска,  переходит  по  указанному маршруту и, начиная с 26
      байта  блока  параметров,  EMT 36  записывает информацию о
      первом  файле подкаталога:  16  байтов имя, 2 байта адрес,
      2 байта -  длина  файла.  Признак  ошибки на любом этапе -
      бит   С  при  выходе  из   обработки.  Байт  301  в  блоке
      параметров - выдать информацию о следующем файле каталога.
      Установленный бит С - файлы исчерпаны.

   При   наличии  последнего  свойства   программа  пользователя
сможет  принимать  каталог любой  системы через  унифицированный
интерфейс,  и  выдавать  его  при заданной  комбинации  страниц,
в нужном месте экрана,  своим шрифтом,  в стиле, соответствующем
самой программе.

   Надеюсь,  авторы  ОС оценят это  предложение и реализуют его,
заботясь о поклонниках своих ОС и повышая их популярность.

                                                  Дмитрий Тюрев

                                                       11.11.94


 
Всё об «Электроника БК0010(-01), БК0011(М)»! » Газеты | Документации | Статьи | Журналы » Газеты на «БК001x» » «Warning» [11.11.94] (Автор: Magic Bytes Software [Тюрев Д.])
Страница 1 из 11
Поиск:

-=RUS=-
ICQ: 320867225