Корвет/Отладчики DDT и SDT

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

            Динамический отладчик �E DDT�F
            и символьный отладчик �E SID�F

                Руководство оператора


                     Содержание

 1.   Введение............................................3
 2.   Команды DDT.........................................5
 3.   Дополнительные возможности SID.....................12
 3.1. Символьная отладка.................................14


        1. Введение


 Программа  DDT  предоставляет возможность динамического  ин-
 терактивного контроля и отладки программ в среде CP/M. Отладчик
 инициируется введением следующих команд:

                  DDT
                  DDT имя файла.HEX
                  DDT имя файла.COM

 где имя файла-имя программы,которая должна быть загружена  и
 проверена.
 Во всех случаях программа DDT загружается в оперативную
 память на место CCP и располагается непосредственно над BDOS.
 Вторая и третья формы команды DDT, показанные выше, выполня-
 ют те же действия, что и первая, но дополнительно автоматически
 загружают определенные COM или HEX файлы. Их действие идентично
 последовательности команд:

                  DDT
                  I-имя файла.HEX или имя файла .COM
                  R
 где  I и R определяют имя файла и загружают его в  память  (более
 подробно эти команды описаны ниже).

 После инициализации DDT выводит на консоль сообщение:

                NNK DDT-S VER M.M

        где NN  - размер памяти;
            S   - тип технических средств:

                  D - DIGITAL RESEARCH стандартная версия;
                  M - MDS версии;
                  I - IMSA версии;
                  O - OMRON-система;
                  S - DIGITAL SYSTEM стандартная версия;

            M.M - номер версии.

 После  вывода  сообщения  DDT выводит символ "-"  и  ожидает
 ввода команды с консоли. Для выполнения команды оператор должен
 ввести и закончить возвратом каретки (<CR>). Каждая  введенная
 команда может быть отредактирована  стандартными  управляющими
 клавишами:

        <====  - удалить последний введенный символ;
        УПР-X  - удалить всю строку                ;
        УПР-C  - перегрузка системы.

 Любая команда может иметь не более 32 символов (вместо 33-го
 символа автоматически вводится возврат каретки). Первый символ
 определяет тип команды:

         A - запись памяти с использованием мнемокода;
         D  - вывод на консоль содержимого памяти в 16-ричном коде  и
                ASCII.
         F  - заполнение памяти константой,
         G  - начать выполнение и определить контрольные точки,
         I  - задать имя файла для загрузки,
         L  - вывести содержимое памяти в мнемокоде,
         M  - пересылка блоков из одной области памяти в другую,
         R  - считать программу с диска для последующего выполнения,
         S  - изменить содержимое памяти,
         T  - трассировка программы,
         U  - выполнение N команд без трассировки,
         X  - выполнение и изменение состояния цп.

 За  символом команды может следовать до трех шестнадцатирич-
 ных параметров,отделяемых запятыми или пробелами. Все значения
 DDT выводит в шестнадцатиричной форме. Во всех случаях команда не
 начинает выполняться,пока не будет введен возврат каретки.

   В любое время процесса отладки оператор может остановить
 выполнение  DDT, нажав CTL-C или введя команду G0 (переход в
 ячейку  0000H) и записать текущее состояние памяти на диск, ис-
 пользуя команду SAVE:

                  SAVE N имя файла.COM

  где  N  количество 256 байтных блоков,которые будут записаны  на
  диск.

 Количество блоков может быть определено из старшего байта послед-
 него адреса программы, после его преобразования из 16-ричного в
 десятичный вид. Например,если старший адрес программы 1234H,  то
 старший байт 12H или 18 в десятичной форме и после нажатия  CTL-C
 оператор может записать программу на диск, задавая

                  SAVE 18 X.COM

 Tаким образом содержимое памяти, начиная с 100H, запишется
 на диск и может быть загружено в память при вводе имени X.

 Если после загрузки будет осуществляться проверка и отладка,
 тогда следует загружать, используя команду

                  DDT X.COM

 которая  загружает ранее записанную на диск программу,  начиная с
 адреса 100H до 12FF(18 страниц). Состояние машины этой программой
 не изменяется итакая программа может быть запущена сначала в
 целях проверки.

        2. Команды DDT

 Ниже детально описаны команды DDT. В каждом случае оператор
 перед  вводом  команды  должен ожидать вывода на консоль  символа
 "-".  Если  программа выполняется в режиме  тестирования,  но  не
 достигает  контрольной  точки,  управление можно  возвратить  DDT
 нажатием  клавиши  RST7 с лицевой панели (клавиша возврат на  шаг
 может использоваться при выполнении программ по командам U и  T).
 в  описаниях  каждой команды после ее обозначения стоят  строчные
 символы,  которые разделяются запятыми.  Эти символы представляют
 16-ричное  число  не  более 4 знаков в длину  (из  более  длинных
 выбираются 4 правых знака).

 Несколько  команд управляет состоянием ЦП во время  тестиро-
 вания программы. Перед начало отладки все регисры и флажки уста-
 навливаются  в 0,  за исключением PC и SP. SP устанавливается  в
 начальный адрес, приведенный в последней записи файла. HEX, если
 загружается файл этой формы (см.командыI I и R).

       1)  команда A (ASSEMBLE)

 DDT  позволяет заносить в память данные с использованием
 мнемокода с помощью команды A, имеющей форму:

                    AS,

 где S-начальный адрес занесения в память.

 DDT-выводит на консоль адрес следующей команды и  считы-
 вает с консоли мнемокод, преобразует его в двоичную форму и
 вводит в память. После этого на консоль выводится  следующий
 адрес для записи. Команда а завершается при вводе  первого
 пустого предложения с консоли.
 После завершения ввода,  оператор может проверить содер-
 жимое памяти, используя команду L (дизассемблер DDT).
 Oтметим  ,что  сегмент  ассемблера  (дизассемблера  DDT)
 может  быть испорчен загружаемой для отладки программой,
 если ее размер больше чем конечнуй адрес TPA.
 В этом  случае при введение команд A и L выдается сообщение об
 ошибке (см.раздел 4).


        2) команда D (DISPLAY)

 Эта  команда выводит на консоль содержимое памяти в  16-
 ричном коде виде и в кодах ASCII.

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

                      D
                      DS
                      DS,F

 В первом случае содержимое отображается с текущего адре-
 са отображения (инициализируется 100H) и выводится 16 предло-
 жений в виде:

   аааа вв...вв(16байт) сссссссссссссссс

 где аааа  - адрес отображения в 16-ричной форме;
 вв    - содержимое  памяти в 16-ричной форме,  начиная  с
      адреса аааа;
  сс...  - содержимое памяти в кодах ASCII. на месте содер-
 жимого не соответствующего кодам  ASCII, отображаются  ".".
 Заметим,  что на консоль выводятся символы в верхнем регистре
 независимо от того, в каком регистре они находятся в памяти.

  В каждой строке отображаются значения 16 ячеек памяти, и
 на  консоль выводится 16 строк,  отображающих содержимое  256
 ячеек памяти.

 Вторая форма подобна первой, но отображение начинается с
 адреса S. при вводе третьей формы команды отображается содер-
 жимое ячеек с адреса S по адрес F.

 Во  всех случаях адрес отображения после вывода на  кон-
 соль  устанавливается  на следующую  неотображенную ячейку,
 и дальнейший просмотр может осуществляться введением только D.

   3)  команда F (FILL)

      Эта команда имеет вид:

                      FS,F,C,

            где S - начальный адрес;
                F - конечный адрес;
                S - 16-ричная константа;

 Действия  команды  следующие:  DDT записывает в адрес  S
 константу C, увеличивает S на 1 и сравнивает с F . Если S и F
 равны,  действие завершается, если нет,  повторяется. Таким
 образом команда F позволяет загрузить область памяти констан-
 тами.


        4)  команда G (GO)

  Запуск выполнения программы осушесвляется  командой  G,
 позволяющей  вводить  до двух контрольных  точек. Команда  G
 имеет следующие формы

                      G
                      GS
                      GS,B
                      GS,B,C
                      G,B
                      G,B,C

 Первая  форма команды запускает выполнение программы без
 установки контрольных точек (возврат в монитор в этом случае
 может осуществиться нажатием RST7). Текущее значение програм-
 много счетчика может быть проверено с использованием команд X
 или XP.  Вторая форма аналогична первой, за исключением того,
 что  перед запуском программный счетчик устанавливается в  S.
 третья  форма аналогична второй,но выполнение программы оста-
 навливается при достижении адреса B (контрольная точка).  Ко-
 манд в ячейке в не выполняется, если в этом месте установлена
 контрольная  точка.  Четвертая форма  идентична  третьей,  но
 устанавливает  2  контрольные точки-B и C.  после  достижения
 этих  точек,  они очищаются.  Последние две  формы  запускают
 программу  с текущего программного счетчика с установкой (од-
 ной или двух контрольных точек, соответствеенно.).

  Выполнение начинается со стандартного адреса в  реальном
 времени до следующей контрольной точки, т.е. от стандартного
 адреса  до контрольной точки DDT не вмешивается в работу про-
 граммы. Таким образом, если после запуска программы, она не
 достигает  контрольной точки, управление может  передаваться
 DDT  только по RST7. После достижения контрольной точки  DDT
 останавливает выполнение и выводит на консоль.

                     * XXXX

            где XXXX - адрес останова.

  В этой точке может быть проверено состояние машины  ко-
 мандой  X. Оператор должен устанавливать контрольные  точки,
 отличающиеся от значения программного счетчика, иначе останов
 происходит сразу, без выполнения каких-либо команд.

      Пример таких остановов:

    G 400, 400 или G,1234 если текущее значение PC=1234H


        5)  команда I (INPUT)

 Команда  I  позволяет оператору ввести имя файла в  блок
 управления файлом в ячейку 5CH (блок управления файлом созда-
 ется CP/M для транзитных команд и помещается в эту ячейку см.
 интерфейс CP/M). Этот блок может быть использован проверяемой
 программой, как если бы он был послан CCP. Кроме того это имя
 используется при чтении DDT файла, .HEX или .COM для отладки.

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

                I имя файла

                I имя файла расширение

 Если  во второй форме используются расширения  .COM  или
 HEX, тогда для чтения с диска машинных кодов может использо-
 ваться команда R.

      6)  команда L (LIST)

 Команда  L  выводит содержимое памяти  с  использованием
 мнемоники ассемблера.

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

                   L
                   LS
                   LS,F

  Первая  форма выдает на консоль двенадцать предложений в
 мнемокоде, начиная с текущего адреса L. Вторая форма сначала
 устанавливает адрес, а затем выводит 12 предложений. Третья
 выводит с адреса S по адрес F. Во всех трех случаях адрес  L
 после окончания вывода устанавливается на первый невыведенный
 адрес. После достижения контрольных точек адрес  устанавлива-
 ется по текущему значению программного счетчика (см.  команды
 Т и G).  Длинный вывод может быть прерван клавишой возврат на
 шаг.

        7)  команда M (MOVE)

 Команда  M позволяет пересылать блоки команд или  данных
 из одного места памяти в другое.

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

                      MS,F,D

         где S - начальный адрес пересылаемого блока;
             F - конечный адрес пересылаемого блока;
             D - начальный адрес, куда этот блок пересылается.

 Данные пересылаются из S в D и оба адреса увеличиваются.
 затем S сравнивается с F, если они равны, команда заканчива-
 ется, иначе действия повторяются.

        8)  Команда R (READ)

 Команда  R  используется в об'единении с командой I  для
 загрузки  в TPA с диска файлов с расширением COM или .HEX и
 подготовки их для отладки.

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

                      R
                      RB

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

  Операция  загрузки не должна портить системные параметры
 в ячейках 0000H...0 (первая страница памяти). Если в опущено,
 устанавливается  B=0000H. Команде R предшествует команда  I,
 определяющая  имя .COM или .HEX файла.  Aдрес  загрузки  для
 каждой записи нех файла содержится в ней самой, адрес загруз-
 ки файлов  .COM =100H.

 Для  повторного чтения программы для отладки  команда  R
 может использоваться любое количество раз, если отлаживаемая
 программа  не разрушает FCB в 5CH.  Напомним, что все файлы
 типа  .COM содержат машинные коды в двоичном виде (созданные
 командами SAVE или LOAD), а файлы типа .HEX содержат машинные
 коды в INTEL-овском стандарте (генерируются, например коман-
 дой ASM)

     Повторим, что команда

           DDT имя файла расширения,

 Инициирующая DDT, эквивалентна последовательности

                 DDT
                -I имя файла расширение
                -R

  Иногда, при использовании команды R, DDT выводит индика-
 тор ошибки "?" (файл не может быть открыт) или ошибка в конт-
 рольной  сумме  формата нех). В этом случае можно  повторить
 команду R до правильного чтения.

  Если чтение проведено успешно на консоль выводится:

                      Nехт PC
                      NNNN PPPP

            где NNNN - адрес команды программы;
    рррр - текущее  значение PC (100H для .COM или из послед-
                       ней записи нех)

        9)  команда S (SET)

 Эта  команда осуществляет проверку и  изменение  памяти.
            форма команды:

                     SS

где S - 16-ричный начальный адрес для проверки и изменения.

    DDT  выдает  адрес и содержимое ячейки с  этим  адресом.
 если оператор вводит возврат каретки,  данные не изменяются,
 если вводится байт данных, а затем <CR>,  этот байт  записы-
 вается  в память в обоих случаях, DDT продолжает  последова-
 тельно  перебирать адреса до тех пор, пока не будет  введена
 "."  или  не  будет введен неправильный байт (не  16-ричное
   число).

        10) команда T (TRACE)

 Команда  T позволяет проследить последовательно по шагам
 выполнение программы.

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

                      T
                      TN

 В первом случае отображается состояние ЦП и выполняется
 один шаг программы, и она останавливается, выдавая

                      XXXX

 где XXXX - адрес следующей команды.

   Адрес для команды D устанавливается равным регистрам HL,
 а  для L-значение XXXX. Состояние регистров ЦП может  быть
 затем проверено командой X.

 Вторая  форма команды аналогична первой,  за исключением
 того,  что выполняется N шагов (N-в 16-ричном виде от 0 до
 65535). При трассировке можно остановить программу клавишей
 "возврат на шаг". Формат отображения такой же, как в команде
  X. Oтметим, что программа трассировки прекращается при обра-
 щении в CP/M и возобновляется при возвращении обратно. Таким
 образом,  функции CP/M,по вводу-выводу такие,  как операции с
 диском и т.п.  выполняются в реальном времени и не  вызывают
 проблем. Выполнение программ в режиме трассировки в 500  раз
 медленнее  выполнения в реальном времени,  т.к. после каждой
 команды  DDT берет управление на  себя. Программы обработки
 прерываний  могут также выполняться в режиме отладки,  однако
 уровень  7  занят для команд,  использующих RST 7(G,T  и  U).
 проверка программ в режиме трассировки должна осуществляться
 в режиме деблокировки прерываний,  что может создать проблемы
 синхронизации при отладке программ обработки прерываний.

        11) команда U (UNTRACE)

 Команда U аналогична команде т, за исключением того, что
 содержимое  процессора  после каждого шага не отображается.
 количество  шагов от 1 до 65535 (0FFFFH). Все условия для T
 справедливы для U.

        12) команда X (ENAMITE)

 Команда позволяет отобразить и изменить текущее  состоя-
 ние элементов ЦП.

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

                      X
                      XR

            где R - один из элементов ЦП 8080:

                      C - флажок переноса (0/1);
                      Z - флажок нуля (0/1);
                      M - флажок минус (0/1);
                      E - четность (0/1);
                      I - внутренний перенос (0/1);
                      A - аккумулятор (0-FF);
                      B - регистры BC (0-FFFF);
                      D - регистры DE (0-FFFF);
                      H - регистры HL (0-FFFF);
                      S - указатель стека (0-FFFF);
                      P - программный счетчик (0-FFFF);

В первом случае состояние отображается в форме

      CFZFMFEFT A=BB B=DDDDD D=DDDD H=DDDD S=DDDD
                      P=DDDD INST


        где F=0 или I - значания флажков;
   вв        - байт,  а DDDD-два байта,  содержащие значения
                     регистров.

  Поле  "INST"  содержит мнемокод команды,  адрес  которой
 содержится в программном счетчике.

 Во  втором случае можно проверить и изменить  содержимое
 регистра  или флажка,  определяемого R. В этом случае после
 ввода команды,  отображается ввод с консоли. Если с консоли
 вводится только <CR> содержимое регистра (флажка) не изменя-
 ется.  Если  вводится новое значение перед  <CR>  содержимое
 изменяется. Отметим, что регистры BC, DE и HL отображаются и
 изменяются попарно.


        3. Дополнительные замечания.


 Организация DDT позволяет при отладке больших  программ,  не
 входящих в TPA, перекрывать некоторую его часть. Сам DDT состоит
 из  двух частей:  ядра и модуля ассемблера (дизассемблера). Ядро
 всегда загружается на место CCP,  а ассемблер (дизассемблер) рас-
 полагается над ним.

 При загрузке адрес BDOS,  содержащийся в ячейке 6H (адресное
 поле  команды JMP в 5H) модифицируется DDT в базовый  адрес  ядра
 DDT,  который,  в свою очередь, содержит команду перехода в BDOS.
 таким образом, программы, использующие эту ячейку как адрес конца
 памяти, определяют этот конец по базовому адресу DDT.

 Модуль  ассемблера (дизассемблера) располагается в TPA  если
 модуля, это означает, что он запорчен и в ответ на команды L и A
 выдается "?", а в командах T и U в поле "INST" выводится команда
 в 16-ричном виде.

        3. Дополнительные возможности SID

            -добавлены 2 команды:

  C - запуск программы с установкой регистров BC и DE. Контрольные
 и  проходные точки игнорируются. Если запускаемая  программа
 заканчивается возвратом, осуществляется вывод в отладчик.

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

                       CS
                       CS,B
                       CS,B,C

   Первая  форма у команды запускает программу с адреса  S.
 регистры BC и DE устанавливаются в "0". Вторая форма  запус-
 кает программу с адреса S. Регистр DE устанавливается в "0",
 BC устанавливается в "B". Третья форма запускает с адреса S,
 BC устанавливается в "B", DE-в "C".

 Команда P устанавливает проходные точки.  Отличие проходных
 точек от контрольных следующие:

 они не сбрасываются при проходе через них;  останов в этой
 точке  может быть задан после N-го прохода,  где  N  Mожет
 меняться в пределах от 1 до 255;

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

 Если количество оставшихся проходов >1, оно уменьшается на
 1  и программа запускается дальше,  при  числе  проходов=1
 программа  останавливается как при достижении  контрольной
 точки,  при этом проходная точка не сбрасывается,  а коли-
 чество  проходов остается равным 1.  Может быть задано  до
 8-ми проходных точек.

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

                  P
                 -P
                  PS
                  PS,B
                  -PS

 Первая  форма отображает все установленные проходные  точки.
 вторая форма сбрасывает все установленные проходные точки. Третья
 форма устанавливает точку в адрес S с числом = 1.Четвертая форма
 устанавливает точку в адрес S с числом проходов B. Пятая  форма
 сбрасывает точку в адресе S.


             Параметры:

 Параметры  в командах могут задаваться  в  шестнадцатиричном
 виде, как в DDT и в десятичном. При задании параметров в десятич-
 ном виде перед ним ставится символ "#".

 Параметр  может  представлять собой сумму или  разность  не-
        скольких чисел.

             например,

                  L#256+100

        Запускает команду L с адреса 200H

                  L#512-100+10

   Запускает команду L с адреса 210H

 В  качестве параметра может использоваться содержимое стека.
 для использования в качестве параметра содержимого стека необхо-
 димо ввести ""("'"). Количество введенных символов "" определяет
 глубину стека, откуда берется параметр. Например, если содержимое
 стека будет таким, как приведено на рисунке:

        --------
          BBBB          SP+10
        --------
          0650          SP+8
        --------
          3840          SP+6
        --------
          AF50          SP+4
        --------
          2100          SP+2
        --------
          1000          SP
        --------

    то ввод следующих команд будет означать:

           L         - запуск команды с адреса 1000;
           D         - запуск команды D с адреса AF50;
           S    +100 - запуск D с адреса 750.

В  качестве  параметра могут быть использованы  коды  ASCII.
  Например:

               L"AB"

 Запускает L с адреса 4142. Kоманда D и S могут работать в режиме
 байта как в DDT и в режиме слова (двух байтов).

          так, команда

               DW100,140

 Отображает содержимое памяти с адреса 100 и 140 в виде двухбайто-
 вых  слов,  при этом старший байт слова  отображается  первым,  а
 младший - вторым (в памяти они хранятся наоборот).

           команда

               SW300

 Позволяет изменять содержимое памяти в виде двухбайтовых слов.  в
 качестве  вводимых  параметров в команде S  могут  использоваться
 символы кода ASCII, при этом перед ними нужно ввести символ ".

           например, команда

                  S 100 <CR>
              0100 "ABCDEFGH <CR>

Вводит символьную последовательность "ABCDEFGH" с адреса 100H.

        3.1. Символьная отладка

 В  качестве  параметров  SID может  использовать  символьные
 метки вашей программы. Значения символьных меток загружаются  из
 файла типа SYM, создаваемого макроассемблером MAC или редактором
 связей L80 при загрузке перемещаемых модулей, если указаны пере-
 ключатели IN и IY.

 Для  загрузки символьных меток небходимо в команде I  указы-
 вать  два имени - имя исполняемого файла и  соответствующего  ему
 файла с SYM. например,

                  #I CONS.HEX CONS.SYM

 Если  исполняемый файл был загружен ранее,  то для  загрузки
        файла .SYM используйте команду

                  #I XX CONS.SYM

 При символьной отладке символьные метки могут быть использо-
     ваны в качестве параметров. При этом:

     @XXX - двухбайтовое содержимое метки XXX;
     =XXX - однобайтовое содержимое метки XXX;

             например:

     #L.BREACK  - запустить L с метки BREACK;
     # P.COLD,5 - установить в метке .COLD проходную точку с
                     5-ю проходами;
    #D@ MEMORY - запустить команду D с адреса, находящегося
         в памяти по адресу MEMORY;
         #XA
         A=00=LOAD  - загрузить в а содержимое ячейки LOAD .

 В режиме символьной отладки для отображения всех меток может
 использоваться команда H без параметров.

 Команда  H  с одним параметром указывает его значение в  16-
 ричном виде, десятичном виде и, если возможно, в виде кода ASCII.
 Команда  H с двумя параметрами выдает сумму и разность  этих
 параметров.

 Добавлено 05.89 ---

 Еще большими возможностями обладает XSID и ZSID.
 XSID - доработанная версия SID (г.Омск) может работать
 с символами КОИ-8 , для ПЭВМ последних разработок, таких
 как "Корвет", "Элекс" , "Элин к-1", "Квант-8" и др.
 ZSID - позваляет отлажимать программу для Z80.