Суббота, 19.08.2017, 17:41

..



Главная Регистрация Вход
Приветствую Вас, Гость · Браузер: « v»
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Всё об «Электроника БК0010(-01), БК0011(М)»! » Газеты | Документации | Статьи | Журналы » Газеты на «БК001x» » «Help Info» » «Help Info-2» [14.12.93] (Автор: SortSoft corp. [Чурин Д.])
«Help Info-2» [14.12.93]
-=RUS=-Дата: Пятница, 24.10.2014, 00:49 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 350
Репутация: 1
Статус: Offline
(Help Info-2)

                     SortSoft corp. presents

││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││
║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║

 ███ ███                      ███           ██            ███
  █▓▓ █▓▓                      █▓▓         █ ▓█          █ ▓▓█
  █▓  █▓ ██████ ███   █████    █▓ █████   ███  ▓███       ▓  █▓
  █████▓  █▓▓▓█▓ █▓▓   █▓▓▓█   █▓  █▓▓▓█   █▓▓ █ ▓▓█       ██ ▓
  █▓▓▓█▓  ███  ▓ █▓    █▓  █▓  █▓  █▓  █▓  █▓  █▓  █▓███  █ ▓▓
  █▓  █▓  █▓▓▓█  █▓  █ █▓  █▓  █▓  █▓  █▓  █▓  █▓  █▓ ▓▓▓█ ▓
 ███ ███ ██████▓██████▓████ ▓ ███ ███ ███ ███   ███ ▓    █████
  ▓▓▓ ▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓█▓▓▓▓   ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓   ▓▓▓      ▓▓▓▓▓
                      ███
 Helping Information   ▓▓▓   номер 2            14 декабря 1993

║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║
││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││

 ┌───────────────────────────────────────────────────────────┐
 │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓> В номере <▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
 │▓┌─────────────────────── Новости ───────────────────────┐▓│
 │▓│■ Маленькие новости.                                   │▓│
 │▓│■ Немного о графике.                                   │▓│
 │▓┌────────────────────── Ассемблер ──────────────────────┐▓│
 │▓│■ Немного об арифметике.                               │▓│
 │▓│■ Подпрограммы с параметрами.                          │▓│
 │▓│■ TRAP-подпрограммы.                                   │▓│
 │▓│■ Сохранение регистров.                                │▓│
 │▓┌───────────────── Полезная информация ─────────────────┐▓│
 │▓│■ TURBO6M : что нового?                                │▓│
 │▓┌─────────────────────── Реклама ───────────────────────┐▓│
 │▓└───────────────────────────────────────────────────────┘▓│
 │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
 └───────────────────────────────────────────────────────────┘

                          Вступление.
                          ═══════════

   К величайшему сожалению первый номер HelpInfo,  явился  неким
"первым блином комом". Причем комочек получился более чем  боль-
шим и с шумом рухнул мне на голову...
   Ну ладно - "Кто старое помянет ..."

═══════════════════════════ Новости ════════════════════════════
                           └───────┘

 ┌──────
 │ Подготавливается к выпуску новая версия издательской  системы
VorteX! v2.0 . Хотя стоит оговориться,  что  у  некоторых  людей
давно уже есть версия VorteX!-а  с  исправленными  ошибками,  но
вторая версия обещает быть более мощной чем  предыдущая.  Однако
мечта о возможности работы со спрайтами в  издательской  системе
пока не осуществлена.
 ┌──────
 │ Уже закончена система печати текстов  SSS  corp.  (Камнев)  -
COMFORT, говорят, что это более чем круто.
 ┌──────
 │ Один хороший человек (естественно не без помощи авторов)  по-
мышляет сделать систему  проверки  лексики  русского  языка  под
VorteX!. Идея конечно более чем грандиозная, помотрим ...

                       Немного о графике.
                       ══════════════════

   Да, с графическими редакторами на БКшке  проблема,  такая  же
как с операционками - ИХ МНОГО, И У КАЖДОЙ СВОИ НЕДОСТАТКИ !
   На БКшке существует около десятка операционок и каждая  имеет
свои минусы и плюсы. Так и с графическими редакторами.  В  одном
хорошо работает линза, но плохо графпримитивы (окружности,  пря-
моугольники, резиновые линии), в другом удобный интерфейс но  не
цветная графика, и т.д.
   Вот сравнительно недавно в Москве появился новый граф. редак-
тор ASE10D, и действительно он имеет некоторые совершенно  новые
функции, и действительно у него развитая система меню, но госпо-
да отрисовывать окружности по одной точке это просто пошло.  Да,
кстати об окружностях, должен сказать, что лично я  пользуюсь  в
основном граф. редактором SCREDIT, и  он  например  отрисовывает
окружности очень быстро. Да у него мало функций, но это тот  са-
мый необходимый  минимум: линза  -  есть,  линии,  окружности  -
есть, чтение, запись - есть, окраска области 4-я цветами - есть.
Но мне правда не хватает окраски ди-цветом (разноцветные точки в
шахматном порядке), и кое чего ещё. Под  такой  шаблон  подходят
все существующие редакторы: одно есть, другого нет.
   Я начал заниматься проблемой графики и если  у  кого-то  есть
интересные идеи, то будьте так добры, позвоните мне!

                            391-86-98
                         позвать Тимофея

                  Звонить с 19-30 до 22-00 !!!

══════════════════════════ Ассемблер ═══════════════════════════
                          └─────────┘

                     Немного об арифметике.
                     ══════════════════════

   Довольно часто в программах требуется выполнить операцию  ум-
ножения или деления, это можно делать с помощью арифметики  дос-
тупной в TURBO5, TURBO6М, но если вам надо сделать эту  операцию
всего один раз, тогда лучше писать не универсальную подпрограмму
(П/П) умножения или деления, а сделать её для данной ситуации...
   Всем известно, что умножить на два можно командой ASL  xx,  а
разделить на два - ASR xx. Используя эти команды, а так  же  ко-
манды сложения и вычитания можно производить действия и с други-
ми числами. Для примера приведу подпрограмму умножения  числа  в
R0 на 13:

MUL13:  MOV     R0,-(SP)        ; R0=X, в стеке - X
        ASL     R0              ; R0=2*X
        ADD     (SP),R0         ; R0=3*X
        ASL     R0              ; R0=6*X
        ASL     R0              ; R0=12*X
        ADD     (SP)+,R0        ; R0=13*X

   Конечно этот способ применим только когда  надо  умножить  на
постоянное число (13).

                  Подпрограммы с параметрами.
                  ═══════════════════════════

   Существует множество возможностей передачи параметров в  под-
программу. Самый простой - через  регистры,  этот  способ  хорош
тем, что можно легко изменять эти параметры и передавать  управ-
ление на П/П. Есть так же и другие варианты передачи  параметров
(через заранее условленные ячейки, через стек и т.д.), я же рас-
скажу о способах получивших на БК в последнее время широкое рас-
пространение...
   После команды передающей управление на П/П следуют данные ко-
торые требуется передать в неё. Примером может служить П/П пере-
мещаемого вывода текста.

   Форма обращения к П/П:

        .............
        JSR     R1,TXT
        .ASCIZ  /Перемещаемый вывод текста.../
        .EVEN
  .............

  TXT:  MOVB    (R1)+,R0    ;Взять очередной код
        BEQ     1$          ;Если ноль то конец строки
        EMT     16          ;Вывод символа
        BR      TXT         ;Продолжить вывод строки
  1$:   INC     R1          ;Округление R1 до чётного числа
        ASL     R1
        ASR     R1
        RTS     R1          ;Возврат на следующую после
                            ;текста команду

   При исполнении выше указанной команды (JSR R1,TXT) происходит
запоминание в R1 адреса следующей команды (т.е. начало  текста),
далее происходит исполнение соответствующей  П/П,  по  окончании
вывода текста (нахождение кода 0) R1 уже содержит адрес,  следу-
ющего за кодом 0, байта и после приведения его к чётному  проис-
ходит исполнение команды RTS R1, которая заносит содержимое R1 в
PC, таким образом происходит переход  на  команду  следующую  за
текстом.
   Таким же образом можно передавать не только текст, но и  дан-
ные. Например если перед меткой TXT вставить следующие строки:

  ATXT: MOV     (R1)+,@#160
        CLR     @#156

   то при форме обращения

        JSR     R1,ATXT
        .WORD   40000
        .ASCIZ  /Адресованный вывод строки./
        .EVEN

   будет  вначале  устанавливаться  курсор  на  указанный  адрес
(.WORD 40000), а уже потом выводиться текст.
   Ещё более удобно работать таким же образом с  TRAP-командами.
Именно так обращается к примеру Disk XEROX к интерфейсным П/П.
   Так можно передавать данные не только по 34  вектору  (вектор
TRAP-прерываний) но и по всем остальным. На пример  в  сервисной
оболочке Disk MASTER очень активно используется прерывание по 10
вектору (неправильная команда). Должен правда напомнить, что для
этого надо писать соответствующий диспетчер (об этом  рассказано
ниже).

                       TRAP-подпрограммы.
                       ══════════════════

   При выполнении машинной инструкции TRAP  происходит  програм-
мное прерывание по вектору с адресом 34: текущее слово состояния
процессора PS и счетчик инструкций PC запоминаются в стеке;  но-
вое PS берётся из слова с адресом 36, а новое PC - из слова- 34.
Таким образом, управление передаётся на программу обработки пре-
рываний (диспетчер). Возврат управления в  вызывающую  программу
производится по команде RTI, восстанавливаются прежние PC  и  PS
из стека.
   Параметры в подпрограмму, вызванную  TRAP-ом,  могут  переда-
ваться любым из уже упомянутых способов.
   Младший байт TRAP-команды используется для указания  к  какой
П/П следует обращаться. Для обслуживания такого прерывания нужен
TRAP-диспетчер:

TRAPS:  MOV     R4,-(SP)        ;
        MOV     R5,-(SP)        ;Сохранение регистров
        JSR     R4,@#110346     ;
        MOV     14(SP),R0       ;Адрес следующего за TRAP-ом
                                ;слова
        MOV     -(R0),R0        ;Код TRAP-команды в R0
        BIC     #177400,R0      ;Выделить мл. байт
        ASL     R0              ;Получить смещение по таблице
        CALL    @DATA(R0)       ;Вызов нужной П/П
        JSR     R4,@#110362     ;
        MOV     (SP)+,R5        ;Восстановление регистров
        MOV     (SP)+,R4        ;
        RTI                     ;Возврат из прерывания
DATA:   .WORD   SUBR0           ;Адрес первой П/П
        .WORD   SUBR1           ;Адрес второй П/П
        .WORD   SUBR2           ;Адрес третьей П/П
    .......
SUBR0:  ...                     ;
        RETURN                  ;Собственно
SUBR1:  ...                     ;сами
        RETURN                  ;подпрограммы
SUBR2:  ...                     ;
        RETURN                  ;

   Обращение к этим П/П производится командой

        TRAP      n

   где n - номер нужной подпрограммы.

   Следует заметить, что в приведённом мной диспетчере для  сох-
ранения и восстановления регистров используются подпрограммы Мо-
нитора, а т.к. к ним идёт обращение через R4 то в ходе  исполне-
ния П/П вызываемых через TRAP не следует в них  использовать  R4
(если хотите можете его в начале подпрограмм сохранять, а в кон-
це восстанавливать).
   Для тех кто работает с нормальным Ассемблером (ряда TURBO или
MACRO) можете номерам этих самых подпрограмм "дать  имена".  Для
этого в начале вашей программы присвойте переменной номер  соот-
ветствующей П/П:

          PRINT=1

   После этого можно обращаться к TRAP-подпрограммам (разумеется
только к тем которые были определены) более удобочитаемым спосо-
бом:

          TRAP    PRINT

   При трансляции эта строка будет приниматься как TRAP 1.

                     О сохранении регистров.
                     ═══════════════════════

   При использовании подпрограмм как правило приходится в начале
П/П сохранять, а в конце восстанавливать регистры. Если это час-
то приходится делать то лучше обращаться к П/П сохранения регис-
тров. Они могут сохранять и не все регистры. К примеру в Монито-
ре  такие  П/П  (JSR  R4,@#110346  -   сохранение   R0-R4,   JSR
R4,@#110362 - восстановление R0-R4) имеют некоторые  недостатки:
не сохранение/восстановление R5, в  ходе  исполнения  П/П  после
сохранения и до восстановления нельзя использовать R4.

   Кстати следует показать как работает команда JSR:

   1. Содержимое используемого в команде регистра (регистр  воз-
      врата) сохраняется в стеке Rx → -(SP);

   2. Адрес слова,  следующего за командой,  заносится в регистр
      возврата PC → Rx;

   3. Адрес подпрограммы заносится в PC.

   Окончание выполнения  П/П  вызванной  таким  образом  следует
осуществить командой  RTS Rx которая занесёт содержимое регистра
возврата в PC и восстановит Rx из стека.

   Ну ладно, я что-то отвлёкся...

   Существует ещё один экзотический способ сохранения регистров:

  SAVE05: MOV     R1,-(SP)
          MOV     R2,-(SP)
          MOV     R3,-(SP)
          MOV     R4,-(SP)
          MOV     R5,-(SP)
          CALL    (R0)
  L4:     MOV     (SP)+,R5
          MOV     (SP)+,R4
          MOV     (SP)+,R3
          MOV     (SP)+,R2
          MOV     (SP)+,R1
          MOV     (SP)+,R0
  L5:     RETURN

   Формат вызова этой подпрограммы такой:

          JSR     R0,SAVE05

   Примером использования этой П/П может служить  последователь-
ность:

        .......
          CALL    SUBR2       ;Вызов подпрограммы
  L1:     .......
  SUBR2:  JSR     R0,SAVE05   ;Сохранение регистров
  L2:     .......
          RETURN              ;Выход из П/П с восстановлением
                              ;регистров

   При вызове П/П SUBR2 в вершине стека записан адрес  возврата.
Первая команда подпрограммы производит обращение к  SAVE05.  При
этом в стек заносится содержимое регистра R0, а в регистр  запи-
сывается адрес возврата. Далее в стек заносится  содержимое  ре-
гистров от 1-5 и производится обращение к П/П (метка L3) по  ад-
ресу, находящемуся в R0, т.е. передаётся управление на метку L2,
а в стек заносится адрес возврата. При  выполнении  в  программе
SUBR2 инструкции RETurn управление передаётся на метку L4 и про-
исходит восстановление регистров R0-R5. После  этого  в  вершине
стека находится адрес L1 и по  команде  RETurn  из  подпрограммы
SAVE05 управление возвращается в вызвавшую программу.
   Следует отметить, что если вам нужно передать в П/П,  исполь-
зующую такой способ сохранения регистров, какое либо число в  R0
то подпрограмма должна брать его из 14(SP), т.к.  R0  будет  из-
менён при обращении к SAVE05.

   Ну вот пожалуй, и всё про ассемблер.
   Ждите следующего номера.

═════════════════════ Полезная информация ══════════════════════
                     └───────────────────┘

                     TURBO6M: что нового?
                     ════════════════════

   Предназначается тем у кого таковой имеется и кто им пользует-
ся, а не тем извращенцам которые пишут свои программы в отладчи-
ках (есть и такие).
   В очередной доработке ассемблера - TURBO6M,  сделанной  Миха-
илом Королёвым, существуют следующие отличия от TURBO5.

                         Новые команды

   CE - ввод ключевой последовательности, запускается  по  АР2/1
(где символ "_" заменяет ◄─┘);
   OT - оптимизатор ассемблерного текста;
   TT - вывод таблицы меток;
   PT - вывод таблицы меток на принтер;
   LL - подгрузка библиотеки (прилинковать метку);
   LM - подгрузка массива (данные, графика, музыка);
   CL - сокращённая трансляция, метки не выдаются.

                      Макрокоманда .PRINT

   Вывод текста (фактическая замена на последовательность команд
MOV #xx,R1 ... CLR R2 ... EMT 20 ).

   Формат команды:

   .PRINT   xx

   Где вместо хх стоит имя метки с которой начинается текст  для
вывода, в формате .ASCIZ .

                      Макрокоманда .OCTOUT

   Вывод последнего занесённого в стек восьмеричного числа.
   Команда работает только при отладке программы в TURBO  т.  к.
использует внутреннюю подпрограмму самого TURBO. Формат команды:

   MOV      xx,-(SP)
   .OCTOUT

   Где первая команда производит засылку в  стек  числа  которое
надо вывести на экран.

   Внимание!!! Те у кого TURBO6M с длиной меньше 13422 (8) могут
не стараться у них эта команда работать не будет !

   Данные получены от Михаила Королёва,  как  собственно  и  сам
TURBO6M, за что ему огромное спасибо!!!

═══════════════════════════ Реклама ════════════════════════════
                           └───────┘

         ┌───────────────────────────────────────────┐
         │  Продаю бывшую в употреблении БК 0010-01  │
         │          тел. 474-41-84 ( Олег )          │
         └───────────────────────────────────────────┘

        Поздравляю Terra Software с днём рождения !!!

════════════════════════════════════════════════════════════════

   ═════════════════════════════════════════════════════════
   Спасибо тем кто помог в создании второго номера HelpInfo:
   ═════════════════════════════════════════════════════════

   Михаилу Королёву - за MKDOS v1.20 ,TURBO6M, DESS v2.6,
                      Reader.14e и за советы;

   Д. А. Романову   - за VorteX! v1.05;

   А. Надёжину      - за ANDOS v2.50;

   гр. "Калинов Мост", "ДДТ" и др. - за моральную поддержку.

                     ┌───────────────────┐
                     │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
                     │▓                 ▓│
                     │▓  Production by  ▓│
                     │▓  SORTSOFT corp. ▓│
                     │▓   14-dec-1993   ▓│
                     │▓                 ▓│
                     │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
                     └───────────────────┘


 
Всё об «Электроника БК0010(-01), БК0011(М)»! » Газеты | Документации | Статьи | Журналы » Газеты на «БК001x» » «Help Info» » «Help Info-2» [14.12.93] (Автор: SortSoft corp. [Чурин Д.])
Страница 1 из 11
Поиск:

-=RUS=-
ICQ: 320867225