                     БАЗОВЫЙ НАБОР КОМАНД ДССП
                     ~~~~~~~~~~~~~~~~~~~~~~~~~
Обозначения:
Sq                - вершина стека, т.е. S(q,31:0);
q                 - указатель стека, q>=0;
q+                - равносильно q:=q+1;
q-                - равносильно q:=q-1;
a                 - целое число;
m(a,7:0)          - байт главной памяти с адресом a;
m(a,15:0)         - 16-битная ячейка главной памяти с адресом a;
m(a,31:0)         - 32-битная ячейка главной памяти с адресом a;
X, Y              - имена переменных, векторов, массивов;
t, u              - вспомогательные 32-битные переменные;
j, k, l, m, n     - целые положительные числа;
P, P1, ..., Pn    - процедуры;
A0, A1, ..., An   - процедуры, засылающие в стек по одному операнду.

---------------------------------------------------------------------------
Команда            Содержание команды                        Примеры
---------------------------------------------------------------------------

           Команды, касающиеся процедур и именуемых данных

: <имя> <тело> ;    Создать процедуру <имя>, за-    : NEG [a] 0 E2 - [-a] ;
                    данную цепочкой команд <тело>

<имя процедуры>     Выполнить заданную процедуру    [5] NEG [-5]

DEFINE? <имя>       Засылает в стек 0, если слово   DEFINE? NEG [1]
                    <имя> не определено, иначе 1.   DEFINE? XXX [0]
                    Может использоваться совместно
                    с процедурами %IF, %FI:
                    q+; Sq:=<1 или 0>;

<целое число>       Заслать в стек дополнительный   [] -1 [FFFFFFFF]
                    код данного числа:              [] 5 [5]
                    q+; Sq:=<доп. код числа>;

#<литера>           Заслать в стек код названной    [] #A [65]
                    литеры:
                    q+; Sq:=0;
                    Sq(7:0):=<код литеры>;

"<текст>"           Записать текст в главную па-    [] "Код литеры" [a,10]
                    мять в виде цепочки байтов-ли-
                    тер. Заслать в стек адрес пер-
                    вого байта цепочки a и длину n:
                    q+; Sq:=a; q+; Sq:=n;
                    В памяти вслед за последней
                    литерой текста записывается
                    нулевой байт (в длине не учи-
                    тывается)

[N] VALUE <имя>     определить числовую константу   [38] VALUE X
                    с именем <имя>.

TEXT <имя> "<текст>" Определить текстовую константу  TEXT T "Стоп!"
                    с именем <имя>. При употребле-
                    нии <имя> в стек засылается       [] T [a,5]
                    начальный адрес и длина текста

TEXT <имя> ."<текст>" Определить текстовую константу  TEXT T ."Стоп!"
                    с именем <имя>. При употребле-
                    нии <имя> весь <текст> выводится
                    на экран

BYTE                В последующей команде объявле-  BYTE VAR CHAR
                    ния данного элементом данных    [8] BYTE VCTR X []
                    (базовым форматом) считать      BYTE CNST A 60 32 ;
                    8-битный байт


WORD                В последующей команде объявле-  WORD VAR I
                    ния данного элементом данных    10  WORD VCTR NX
                    (базовым форматом) считать
                    16-битное слово

LONG                В последующей команде объявле-  LONG VAR TIME
                    ния данного элементом данных    100 LONG VCTR BUFF
                    (базовым форматом) считать
                    32-битное длинное слово

ACT                 Объявляемое далее данное счи-    ACT VAR REF
                    тать "выполняемым", то есть       '' P0 ! REF
                    при обращении к элементу данных   REF [выполняется P0]
                    будет выполнена присвоенная ему
                    процедура

VAR <имя>           Создать переменную <имя>        WORD  VAR X
                    указанного формата.

! <имя переменной>  Присвоить названной переменной  [7] ! X []
                    взятое из стека значение:            [X=7]
                    X:=Sq; q-;

<имя переменной>    Заслать в стек значение         [] X [7]
                    названной переменной:
                    q+; Sq:=X;

[n] VCTR <имя>      Создать вектор <имя>(0:n)       [9] BYTE VCTR X []
                    из n+1 компонент                   [X(0:9,7:0)]
                    указанного формата.

NOIND               Программное прерывание,
                    вызываемое при обращении
                    к векторам и массивам с
                    недопустимым индексом.
                    Конечная реакция - выдача
                    сообщения и перезапуск
                    системы.

CNST <имя> A0       Создать вектор констант         WORD CNST ГОДЫ  1799
 A1 ... An ;        <имя>(0:n)                       1825 1837 ;
                    указанного формата.

<формат> DATA <имя> Определить данное указанного   BYTE DATA X
                   формата.                        WORD 5 VECTOR DATA WW

<бф> [N] VECTOR     Указание процедуре DATA      BYTE 3 VECTOR DATA Y
                    построить составной формат   LONG 9 VECTOR 2 VECTOR DATA X
                    "вектор" из N+1 элементов
                    формата <бф>

[a,j] ! <имя>       Присвоить указываемой вершиной  [25,3] ! X []
                    стека j-й компоненте вектора          [X(3)=25]
                    <имя> значение a подвершины,
                    удалив из стека j и a:
                    t:=Sq; q-; X(t):=Sq; q-;

[j] <имя вектора>   Заслать в стек значение          [3] ROW [25]
                    указываемой вершиной компоненты
                    названного вектора:
                    Sq:=X(Sq);

[j,k,...,l,n]       Создать n-мерный массив          [4,4,2] WORD ARR MTRX []
     ARR <имя>      <имя>(0:j,0:k,...,0:l)           [4,4,4,3] BYTE ARR CUB []


[a,i,...,m] ! <имя>  Присвоить указываемой индек-    [7,3,2,5,4] ! X []
                    сами (i,...,m) компоненте             [X(3,2,5,4)=7]
                    массива <имя> значение a,
                    удалив из стека a и индексы

[i,...,m] <имя>     Заслать в стек значение          [3,2,5,4] X [7]
                    указываемой индексами компо-
                    ненты массива <имя>

FIX                 Объявляемые далее данные раз-   FIX 7 BYTE VCTR N
                    местить в области, сохраняемой
                    и загружаемой вместе с кодом
                    процедур то есть после выполнения
                    процедуры SAVE и последующей новой
                    загрузке системы FIX-данные будут
                    иметь те же значения, что и на
                    момент SAVE

EMPTY               В последующей команде объяв-    EMPTY BYTE VAR B
                    ления данного не отводить па-   EMPTY 25 WORD VCTR TAR
                    мять для размещения элементов
                    данных

[a] EQU <имя>       Разместить определенные с       100 EQU B
                    EMPTY данные <имя>, начиная     3 ' N EQU TAR
                    с адреса a, удалив a из стека   ADDROF N EQU TAR

[a,''data] EQU'     Разместить определенные с       100 '' B EQU'
                    EMPTY данные, заданные адресом  3 ' N '' TAR EQU'
                    тела данного ''data,            ADDROF N '' TAR EQU'
                    с адреса a, удалив a и ''data
                    из стека

ADDROF <имя>        Занести в стек адрес области    ADDROF N [a]
                    памяти, где размещается данное
                    <имя>.


[''data] ADDROF'    Занести в стек адрес области    '' N ADDROF' [a]
                    памяти, где размещается данное
                    заданное адресом своего тела
                    ''data.

DIM? <имя>          Занести в стек количество эле-  WORD VAR X
                    ментов базового формата         DIM? X [1]
                    в данном <имя>.                 5 LONG VCTR Y
                                                    DIM? Y [6]


SIZE? <имя>         Занести в стек размер в байтах  WORD VAR X
                    элемента базового формата в     SIZE? X [2]
                    данном <имя>.                   5 LONG VCTR Y
                                                    SIZE? Y [4]


CAP? <имя>          Занести в стек размер в байтах  WORD VAR X
                    всей области данных <имя>.      CAP? X [2]
                                                    5 STRING Y
                                                    CAP? Y [8]

[''data] CAP?'      Занести в стек объем области    '' N CAP?' [a]
                    памяти, где размещается данное
                    заданное адресом своего тела
                    ''data.


TRAP <имя> <проце-  Объявить командное прерывание   TRAP OV REACT
дура реагирования>  <имя>, сопоставив ему процеду-  TRAP SE ."Стек пуст"
                    ру конечного реагирования

ON <имя> <проце-    Подменить реагирование, уста-   ON OV ."OVERFLOW"
дура реагирования>  новленное для прерывания <имя>

EON <имя> <проце-   Подменить реагирование, уста-   EON OV NOP
дура реагирования>  новленное для командного пре-
                    рывания <имя>, реагированием
                    с предварительным выходом из
                    тела процедуры, содержащей EON

Команды работы с данными STRING описаны в файле STRING.DOC

          Команды выполнения процедур по условию и в циклах

IF- P               Выполнение по минусу:             [5,0] IF- 1+ [5]
                    t:=Sq; q-; if t<0 then P;         [5,-2] IF- 1+ [6]

IF0 P               Выполнение по нулю:               [5,0] IF0 1+ [6]
                    t:=Sq; q-; if t=0 then P;

IF+ P               Выполнение по плюсу:              [5,0] IF+ D [5]
                    t:=Sq; q-; if t>0 then P;

BR- P1 P2           Выбор по минусу:                  [5,0] BR- 1+ 1- [4]
                    t:=Sq; q-;                        [5,-2] BR- 1+ 1- [6]
                    if t<0 then P1 else P2;

BR0 P1 P2           Выбор по нулю:                    [5,0] BR0 C D [5,5]
                    t:=Sq; q-;                        [5,3] BR0 C D []
                    if t=0 then P1 else P2;

BR+ P1 P2           Выбор по плюсу:                   [5] BR+ 1 0 [1]
                    t:=Sq; q-;                        [-5] BR+ 1 0 [0]
                    if t>0 then P1 else P2;

BRS P1 P2 P3        Выбор по знаку:                   [4] BRS -1 0 1 [1]
                    t:=Sq; q-;                        [-4] BRS -1 0 1 [-1]
                    if t<0 then P1 else
                    if t=0 then P2 else P3;

BR A1 P1 A2 P2 ...  Выбор одной из N процедур:
... AJ PJ ...       t:=Sq; q-; A1; if Sq=t then       [5,7] BR 3 ABS
... ELSE PN         (q-; P1) else (q-; A2; if Sq=t       7 NEG ELSE D [-5]
                    then (q-; P2) else ...
                    ... else (q-; PN)

RP P                Выполнять P снова и снова:        [0] RP 1+ [1] [2] ...
                    P; P; P; ...

[t] DO P            Выполнить P t раз:                [0,3] DO 1- [-3]
                    t:=Sq; q-; P; P; P; ... (t раз)

EX                  Выход из цикла                    [] EX []

EX-                 Выход из цикла по минусу:
                    : EX- [t] IF- EX [] ;

EX0                 Выход из цикла по нулю:
                    : EX0 [t] IF0 EX [] ;

EX+                 Выход из цикла по плюсу:
                    : EX+ [t] IF+ EX [] ;

NOP                 Никакой операции                  [] NOP []


                Команды манипулирования стеком

D                   Удалить из стека один элемент:    [2,4] D [2]
                    q-;

DD                  Удалить из стека два элемента:    [7,5] DD []
                    q-; q-;

DDD                 Удалить из стека три элемента:    [7,5,3] DDD []
                    q-; q-; q-;

DDDD                Удалить из стека 4 элемента:      [7,5,2,2] DDDD []
                    q-; q-; q-; q-;

DS                  Удалить из стека все элементы:    [...,3,9] DS []
                    q:=0;

C                   Скопировать вершину стека:        [5] C [5,5]
                    q+; Sq:=S(q-1);

C2                  Скопировать подвершину стека:     [7,5] C2 [7,5,7]
                    q+; Sq:=S(q-2);

C3                  Скопировать элемент стека с       [7,5,5] C3 [7,5,5,7]
                    глубины 3:
                    q+; Sq:=S(q-3);

C4                  Скопировать элемент стека с       [7,5,3,5] C4
                    глубины 4:                               [7,5,3,5,7]
                    q+; Sq:=S(q-4);

CT                  Скопировать элемент, указы-       [9,4,1,3] CT
                    ваемый вершиной:                         [9,4,1,9]
                    t:=Sq; Sq:=S(q-t);

E2                  Обменять с глубины 2:             [8,5] Е2 [5,8]
                    Sq:=:S(q-1);

E3                  Обменять с глубины 3:             [7,5,3] E3 [3,5,7]
                    Sq:=:S(q-2);

E4                  Обменять с глубины 4:             [7,5,5,3] E4
                    Sq:=:S(q-3);                            [3,5,5,7]

ET                  Обменять с глубины, указы-        [9,4,1,3] ET [1,4,9]
                    ваемой вершиной:
                    t:=Sq; q-; Sq:=:S(q-t+1);

T0                  Присвоить вершине стека 0:        [5] T0 [0]
                    Sq:=0;

T1                  Присвоить вершине стека 1:        [5] T1 [1]
                    Sq:=1;

1+                  Прибавить 1:                      [5] 1+ [6]
                    Sq:=Sq+1;

1-                  Вычесть 1:                        [5] 1- [4]
                    Sq:=Sq-1;

2+                  Прибавить 2:                      [5] 2+ [7]
                    Sq:=Sq+2;

2-                  Вычесть 2:                        [5] 2- [3]
                    Sq:=Sq-2;

3+                  Прибавить 3:                      [5] 3+ [8]
                    Sq:=Sq+3;

3-                  Вычесть 3:                        [5] 3- [2]
                    Sq:=Sq-3;

4+                  Прибавить 4:                      [5] 4+ [9]
                    Sq:=Sq+4;

4-                  Вычесть 4:                        [5] 4- [1]
                    Sq:=Sq-4;

+                   Сложить:                          [2,3] + [5]
                    t:=Sq; q-; Sq:=Sq+t;

-                   Вычесть:                          [3,5] - [-2]
                    t:=Sq; q-; Sq:=Sq-t;

*                   Перемножить:                      [2,3] * [6]
                    t:=Sq; q-; Sq:=Sq*t;

/                   Поделить нацело, сохранив         [-7,3] / [-2,-1]
                    остаток:                          [7,-3] / [-2,1]
                    t:=Sq; q-; u:=Sq;
                    Sq:=цел(u/t); q+;
                    Sq:=u-S(q-1)*t;

NEG                 Изменить знак:                   [-5] NEG [5]
                    Sq:=-Sq;                         [5] NEG [-5]

ABS                 Взять по абсолютной величине:    [-5] ABS [5]
                    : ABS [a] C IF- NEG [|a|] ;

SGN                 Взять знак:                      [-5] SGN [-1]
                    : SGN [a] BRS -1 0 1 [-1/0/1] ;  [0] SGN [0]
                                                     [5] SGN [1]

<                   Меньше:                          [3,5] < [1]
                    : < [a,b] - BR- 1 0 [1/0] ;      [-3,-5] < [0]

=                   Равно:                           [3,5] = [0]
                    : = [a,b] - BR0 1 0 [1/0] ;      [5,5] = [1]

>                   Больше:                          [3,5] > [0]
                    : > [a,b] - BR+ 1 0 [1/0] ;      [-3,-5] > [1]

MIN                 Взять меньшее:                   [5,-8] MIN [-8]
                    t:=Sq; q-; Sq:=min(t,Sq);

MAX                 Взять большее:                   [5,-8] MIN [5]
                    t:=Sq; q-; Sq:=max(t,Sq);

[n,a,b] SEG         Проверка попадания значения n    [5,0,9] SEG [1]
                    в сегмент [a,b]; параметры       [5,6,9] SEG [0]
                    удаляются, в стек засылается
                    признак 0 или 1

NOT                 НЕ (отрицание):                  [-5] NOT [0]
                    : NOT [a] BR0 1 0 [1/0] ;        [0] NOT [1]

INV                 Побитное НЕ (инверсия):          [0000000F] INV [FFFFFFF0]
                    Sq:=INV(Sq);                     [0] INV [-1]

&                   Побитное И (конъюнкция):         [FFFFFFF5,0F] & [5]
                    t:=Sq; q-; Sq:=Sq&t;

&0                  Побитное ИЛИ (дизъюнкция,        [F0F0,00FF] &0 [F0FF]
                    "коньюнкция нулей"):
                    t:=Sq; q-; Sq:=Sq&0t;

'+'                 Побитное сложение                [F0F0,00FF] '+' [F00F]
                    (неэквивалентность):
                    t:=Sq; q-; Sq:=Sq'+'t;

SHL                 Сдвиг влево:                     [F00F] SHL [1E01E]
                    Sq(31:0):=Sq(30:0)0;

SHR                 Сдвиг вправо:                    [FFFFF01Е] SHR [7FFFF80F]
                    Sq(31:0):=0Sq(31:1);

SHT                 Сдвиг по вершине:                [1,4] SHT [16]
                    t:=Sq; q-; Sq:=Sq*2**t;          [8,-2] SHT [2]

SWB                 Перестановка байтов:             [12340EDC] SWB [1234DC0E]
                    Sq(15:8):=:Sq(7:0);

SWW                 Перестановка слов:               [A234B678] SWW [B678A234]
                    Sq(31:16):=:Sq(15:0);

LO                  Выделение младшего слова:        [A234B678] LO [B678]
                    Sq(31:16):=0;

HI                  Выделение старшего слова:        [A234B678] HI [A234]
                    Sq(15:0):=Sq(31:16);
                    Sq(31:16):=0;

SETHI               Присваивание старшему слову      [A234B678,2CDEF] SETHI
                    подвершины стека значения              [CDEFB678]
                    младшего слова вершины стека
                    t:=Sq(15:0); q-;
                    Sq(31:16):=t;

SETLO               Присваивание младшему слову      [A234B678,2CDEF] SETLO
                    подвершины стека значения              [A234CDEF]
                    младшего слова вершины стека
                    t:=Sq(15:0); q-;
                    Sq(15:0):=t;

SGX                 Расширение знака младшего слова:  [1FFFF] SGX [FFFFFFFF]
                    for i:=16 to 31 do                [F123]  SGX [FFFFF123]
                    Sq(i):=Sq(15);                    [12345678] SGX [5678]


             Команды манипулирования адресами-указателями

' X                 Заслать в стек адрес-указа-      [] ' X2 [<адр.X2>]
                    тель переменной или компоненты   [5] ' VR [<адр.VR(5)>]
                    массива.
                    q+; Sq:=<адрес X>;

@L                  Заменить в стеке адрес           [a] @L [m(a,31:0)]
                    значением 32-битного слова
                    Sq:=m(Sq,31:0)

@                   Заменить в стеке адрес           [a] @  [m(a,15:0)]
                    значением 16-битного слова
                    t:=Sq; Sq:=0;
                    Sq(15:0):=m(t,15:0)

@B                  Заменить в стеке адрес           [a] @B [m(a,7:0)]
                    значением байта:
                    t:=Sq; Sq:=0;
                    Sq(7:0):=m(t,7:0)

!TL                 Записать 32-битное слово из       [35784,80] !TL []
                    подвершины по адресу, взятому            [m(80):=35784]
                    с вершины:
                    t:=Sq; q-; m(t):=Sq; q-;

!T                  Записать младшее 16-битное         [1234,10] !T  []
                    слово подвершины по адресу,         [m(10):=1234]
                    взятому с вершины:
                    t:=Sq; q-;
                    m(t,15:0):=Sq(15:0); q-;

!TB                 Записать младший байт под-       [250,83] !TB []
                    вершины по адресу, взятому с        [m(83):=250]
                    вершины:
                    t:=Sq; q-;
                    m(t,7:0):=Sq(7:0); q-;

'' <имя>            Заслать в стек адрес-указатель   [] '' P [<адр P>]
                    тела процедуры <имя>:
                    q+; Sq:=<адрес>;

EXEC                Выполнить процедуру, указыва-    [5] '' 2+ EXEC [7]
                    емую вершиной стека:
                    t:=Sq; q-; exec(t);


       Команды манипулирования данными в главной памяти

!0 <имя>            Обнулить переменную <имя>        !0 X
                    или компоненту массива <имя>        [X:=0]

!1 <имя>            Присвоить 1 переменной <имя>     !1 X
                    или компоненте массива <имя>        [X:=1]

!1+ <имя>           Прибавить 1 к переменной <имя>   !1+ X
                    или компоненте массива <имя>        [X:=X+1]

!1- <имя>           Вычесть 1 из переменной <имя>    !1- X
                    или компоненты массива <имя>        [X:=X-1]

!+ <имя>            Прибавить значение вершины       [7] !+ X []
                    стека к переменной <имя>            [X:=X+7]
                    или компоненте массива <имя>
                    <имя>:=<имя>+Sq; q-;

!- <имя>            Вычесть значение вершины         [7] !- X []
                    стека из переменной <имя>           [X:=X-7]
                    или компоненты массива <имя>
                    <имя>:=<имя>-Sq; q-;

[a,j] !BI0          Присвоить 0 биту j по адресу a:  [2200,5] !BI0 []
                    t:=Sq; q-; a:=Sq; q-; m(a,t):=0;     [m(2200,5):=0]

[a,j] !BI1          Присвоить 1 биту j по адресу a:  [2200,5] !BI0 []
                    t:=Sq; q-; a:=Sq; q-; m(a,t):=1;     [m(2200,5):=1]

[b,a,j] !BI         Присвоить значение b(0) биту     [1,2200,5] !BI []
                    j по адресу a:                       [m(2200,5):=1]
                    t:=Sq; q-; a:=Sq; q-;
                    m(a,t):=Sq(0); q-;

[a,j] @BI           Заменить адрес значением бита:   [33,5] @BI [1/0]
                    t:=Sq; q-; a:=Sq; Sq:=m(Sq,t);

!!! <имя>           Присвоить всем элементам струк-  [9] !!! X []
                    туры данных <имя> значение
                    вершины стека

[w,a,n] !!!M        Присвоить n 16-битным словам,     [7,200,32] !!!M []
                    начиная с адреса a, значение w

[b,a,n] !!!MB       Присвоить n байтам, начиная с    [4,100,56] !!!MB []
                    адреса a, значение b

[a,n,a1] !SB        Переписать n байтов, начиная с    [50,100,51] !SB []
                    адреса a, в область памяти, на-
                    чиная с адреса a1; допускаются
                    перекрытия

[b,a,n] SRCHB       Поиск байта с заданным значени-  [9,200,25] SRCHB [20]
                    ем b среди n байтов, начиная с   [0,93,-8] SRCHB [-4]
                    адреса a, при n<0 по убывающим   [0,93,-8] SRCHB [-8]
                    адресам. Возвращает смещение со        [не найдено]
                    знаком относительно a; в случае
                    неуспеха - n


                Команды управления процессором

?I                Выдать на терминал дату ге-        ?I
                  нерации системы и количество
                  слов свободной памяти

B2                Установить режим двоичного         B2
                  ввода/вывода

B8                Установить режим восьме-           B8
                  ричного ввода/вывода

B10               Установить режим десятичного       B10
                  ввода/вывода

B16               Установить режим шестнадца-        B16
                  теричного ввода/вывода

[a,l] TEXEC       Передать строку с указанными       [25012,10] TEXEC []
                  параметрами на вход процессора     "1 . D" TEXEC []
                  удалив из стека a и l                       [   1 ]

[b] %IF ... %FI   Если b=0, то заключенное между      0 %IF 25 %FI []
                  %IF и %FI игнорируется;             1 %IF 25 %FI [25]
                  b удаляется из стека;
                  Допускается вложенность.

CON               Включить режим выдачи входной      CON
                  строки на экран

COFF              Выключить режим выдачи входной     COFF
                  строки на экран

LOAD <имя>        Выдать содержимое файла <имя> на       LOAD TEST
                  вход процессора

SAVE <имя> <строка> Скопировать систему в ее теку-     SAVE DSSPN CR ?$
                  щем состоянии на диск в файл <имя>.
                  <Строка> будет выполнена процес-
                   сором при запуске сохраненной
                   системы.

RESTART             Очистка стека, перезапуск про-     RESTART
                    цессора. Вызывается также при
                    одновременном нажатии клавиш
                    Ctrl+C (разрешение/запрещение
                    на перезапуск по нажатию данных
                    клавиш выполняется процедурами
                    ETXON, ETXOFF);

ETXON               разрешить перезапуск (RESTART)     ETXON
                    по нажатию клавиш Ctrl+C

ETXOFF              запретить перезапуск (RESTART)     ETXOFF
                    по нажатию клавиш Ctrl+C

BYE                 Выход из ДССП, возврат в DOS.      BYE
                    Вызывается также при одновременном
                    нажатии клавиш Alt+X;


                Команды управления словарем

GROW $<имя>       Открыть для наращивания            GROW $PRIME
                  подсловарь $<имя>

FORGET $<имя>     Удалить нарощенное, начиная        FORGET $PRIME
                  с последнего GROW $<имя>

PROGRAM $<ИМЯ>    Открыть для наращивания            PROGRAM $SORT
                  подсловарь $<ИМЯ>, удалив в
                  нем нарощенное от предыду-
                  щего открытия

USE $<имя>          Открыть для использования        USE $PROBL
                    подсловарь $<имя>

SHUT $<имя>         Сделать подсловапрь $<имя> не-   SHUT $PROBL
                    достуным для использования

ONLY $<имя>         Сделать доступным для использо-  ONLY $PROBL
                    вания только подсловарь $<имя>

CANCEL              Отменить последнее ONLY          CANCEL

?$                  Выдать на экран терминала дан-   ?$
                    ные о текущем состоянии словаря

UNDEF               Выдать на экран терминала        UNDEF
                    неопределенные слова

::                  Зафиксировать в словаре          :: VAR БАЗА
                    определяемое далее слово         :: : **2 C * ;

CLEAR $<ИМЯ>        В подсловаре $<ИМЯ> произ-       CLEAR $SORT
                    вести удаление незафиксиро-
                    ванных слов

              Команды взаимодействия с терминалом

TIN                 Ввод числа с клавиатуры тер-     [] TIN [-487]
                    минала в стек с отображением          [-487]
                    на экран;
                    q+; Sq:=<цел.число>; displ(Sq);

TIB                 Ввод байта-литеры с клавиа-      [] TIB [65]
                    туры терминала в стек с               [A]
                    отображением на экран;
                    q+; Sq:=0;
                    Sq(7:0):=<код литеры>;
                    displ(<литера>);

TRB                 Ввод байта-литеры с клавиа-      [] TRB [95]
                    туры терминала в стек без
                    отображения на экран;
                    q+; Sq:=0;
                    Sq(7:0):=<код литеры>;

<TRB                "Откат" для операции TRB,        [] TRB [95]
                    т.е. выполнение <TRB перед       <TRB TRB [95,95]
                    TRB приведет к повторному
                    вводу последнего введенного
                    байта без нового нажатия
                    клавиши;

TON                 Вывод на экран терминала         [245,6] TON []
                    числа из подвершины стека             [   245]
                    в поле, длину которого
                    указывает вершина:
                    t:=Sq; q-;
                    displ(Sq в поле t); q-;

TOB                 Вывод на экран терминала         [65] TOB []
                    литеры, код которой содер-       #B [66] TOB []
                    жится в младшем байте вершины;
                    displ(<литера Sq(7:0)>); q-;

.                   Отобразить на экран терминала    [25] . [25]
                    число, содержащееся в вершине
                    стека:
                    displ(Sq);

..                  Отобразить на экран терминала    [4,3,5] .. [4,3,5]
                    содержимое элементов стека,         [   4    3    5]
                    начиная с самого нижнего
                    элемента:
                    displ(S(1),S(2),...,Sq);

."<текст>"          Отобразить <текст> на экран      [] ."YES" []
                    терминала:
                    displ(<текст>);

CR                  Перевести курсор в начало        [] CR []
                    очередной строки

SP                  Вывести пробел на экран          [] SP []

BELL                Выдать на терминал звуковой      [] BELL []
                    сигнал

[a,n] TIS           Ввод с клавиатуры терминала n    [473,20] TIS []
                    литер-байтов в главную память,
                    начиная с адреса a (окончание
                    ввода - <вк>)

LTIS                Заслать в стек количество бай-   [] LTIS [15]
                    тов, введенных последней командой
                    TIS (без учета кода конца строки)

[a,n] TOS           Вывод на экран терминала n ли-   [473,15] TOS []
                    тер-байтов из главной памяти,
                    начиная с адреса a


                    Команды управления памятью

     Подробное описание команд управления памятью содержится в файле
                            MEMORY.DOC


              Команды управления файлами и работы с диском

              Процедуры для работы с директориями

DIR                 Вывод на терминал текущего       DIR
                    справочника диска

PATH <образец>      Задание образца и/или дирек-    PATH *.DSP
                    тория для поиска файлов         PATH A:TURBO.*
                    процедурой DIR. Если задан      PATH \CAT1\*.*
                    директорий, то обязательно
                    надо задать образец;

CD <директорий>     Установка текущего устройст-    CD C:\
                    ва и/или директория.  Если      CD C:\DOC
                    задан только директорий, то     CD \CAT1
                    устройство остается прежним,    CD A:
                    если задано только устройст-    CD ..\CAT2
                    во, то восстанавливается
                    последний текущий директорий
                    на данном устройстве.
                    Если каталог не найден, то
                    возбуждается прерывание EXERR

[a,l] CDIR  []      Аналогично CD, но имя директо-  "\CAT1" CDIR
                    рия/устройства задается в виде  "A:"    CDIR
                    текстовой строки (адрес,длина)


            Процедуры манипулирования файлами

TYPE <имя>          Вывод на терминал текста из      TYPE A:\MENU\S.TXT
                    файла <имя>                      TYPE MYPROG

CRTF <имя>         Создать файл с указанным именем   [] CRTF MYPROG []
                                                [] CRTF A:\MENU\S.TXT []

[A,L] CREATE  []   Создать файл  с именем, за-  [] "MYPR.ABC" CREATE []
                   данным строкой байтов.

[] DELF <имя> []   Удалить указанный файл.      [] DELF A:\MENU\S.TXT []

[A,L] DELETE  []   Удалить файл с именем, заданным   "MYPROG" DELETE
                   строкой  байтов.

[] RENF <имя2> <имя> [] Изменить имя у файла <имя>   RENF NEWNAME OLDNAME
                   на имя <имя2>.                    RENF A:A.TXT B:A.TXT

[A2,L2,A,L] RENAME  []  Изменить имя у файла с      "NN.ABC" "OL.ABC" RENAME
                   именем, заданным строкой
                   байтов [A,L] на имя [A2,L2].

[] LPF <имя>  []   Распечатаь файл <имя> на принтере. LPF MYFILE


           Процедуры работы с каналами

[] CHANNEL <имя> []   Создать канал с указанным      CHANNEL A
                  именем.

[A,L] CONNECT <имя> []   Связать канал <имя> с       "MYFILE"  CONNECT A
                   файлом, имя которого  за-
                   дано строкой байтов. Файл по
                   умолчанию получает расширение
                   DSP и считается находящимся
                   в текущем директории на текущем
                   диске. Следующие имена файлов
                   зарезервированы для стандартных
                   устройств (СУ):
                   AUX - для СУ асинхронной связи
                   CON - для СУ ввода/вывода: при
                         вводе клавиатура, при
                         выводе - экран;
                   COM1-COM3 - устройства, присоеди-
                         няемые к асинхронным после-
                         довательным коммуникационным
                         портам 1-3;
                   LPT1-LPT3 - устройства, присоеди-
                         няемые к параллельным
                         портам 1-3 (обычно принтеры);
                   NUL - "пустое" устройство, все
                         операции ввода-вывода для
                         этого устройства игнори-
                         руются;
                   PRN - для системного устройства печати

[] FNPRS <имя>   [a,l]   получить имя и расширение      FNPRS A
                         файла, связанного с данным         ["MYFILE.DSP"]
                         каналом (физически в памяти
                         имя расположено сразу за
                         именем каталога для данного
                         файла - см. процедуру FPPRS)

[] FPPRS <имя>   [a,l]   получить устройство и каталог  FPPRS A
                         файла, связанного с данным         ["C:\MYDIR\"]
                         каналом (физически в памяти
                         каталог расположен перед
                         именем файла для данного
                         канала - см. процедуру FNPPRS)

[] FFPRS <имя>   [a,l]   получить полное имя            FFPRS A
                         файла, связанного с данным    ["C:\MYDIR\FILE.A"]
                         каналом.

[] CRT <канал>  []       Создание файла, связанного    "AAA.EXE" CONNECT CH
                         с данным каналом.              CRT CH

[] DEL <канал>  []       Удаление файла, связанного     DEL CH
                         с данным каналом.

[A,L new] REN <канал> [] Переименование файла, связан-  "NEW.EXE" REN CH
                         ного с данным каналом.

[] OPEN <имя>       []   Открыть канал <имя>.           OPEN A

[] WOPEN <канал>  []     Открытие канала с обнулением   WOPEN CH
                         его длины данных. Если
                         файла нет, то он создается.

[] CLOSE <имя>      []   Закрыть канал <имя>.           CLOSE A

[B] OB <имя>        []   Вывести байт по каналу <имя>.  [b] OB A []

[] IB <имя>        [B]   Ввести байт по каналу <имя>.    [] IB A [b]

[W] OW <имя>        []   Вывести слово по каналу <имя>. [w] OW A []

[] IW <имя>        [W]   Ввести слово по каналу <имя>.   [] IW A [w]

[W] OL <имя>        []   Вывести двойное слово по
                         каналу <имя>.                  [l] OL A []

[] IL <имя>        [W]   Ввести двойное слово по
                         каналу <имя>.                   [] IL A [l]

[A,L] OS <имя>      []   Вывести строку байтов по       "sting" OS A []
                         каналу <имя>.

[A,L] IS <имя>      []   Ввести строку байтов по         [A,L] IS A []
                         каналу <имя>.

[] POS <имя>     [BTC]   Поместить в  стек  значение     []  POS A [pos]
                         указателя  канала  <имя>
                         (номер текущего байта)

[N] SPOS <имя>      []   Установить значение указателя   [100] SPOS A []
                         канала  <имя> равным N.

[] LENB <имя>   [LENB]   Поместить в стек длину          [] LENB A [lenb]
                         данных файла

[] SLENB <имя>  []       Установить длину данных         [] SLENB A []
                         файла равной текущему зна-
                         чению указателя (все байты
                         начиная с текущего отсекаются)


                 Команды вывода на принтер

LPN                 Вывод на принтер числа из под-   [5432,6] LPN []
                    вершины стека в поле, длина
                    которого задана вершиной:
                    t:=Sq; q-;
                    print(Sq в поле t); q-;

LPB                 Вывод на принтер литеры, код     [66] LPB []
                    которой содержится в младшем
                    байте вершины:
                    print(<литера Sq(7:0)>); q-;

LPSP                Перевести печатающую головку     LPSP
                    на одну позицию вправо (пробел)

LPCR                Печатать с начала новой строки   LPCR

LPFF                Печатать с начала очередной      LPFF
                    страницы

[n] LPT             Печатать с позиции n текущей     [30] LPT
                    строки

[a,n] LPS           Вывод на принтер n байтов из     [760,96] LPS []
                    главной памяти, начиная с
                    адреса a


           Команды манипулирования буфером редактора

KE                  Очистить буфер редактора текста  KE

IE <имя>            Дополнить содержимое буфера      IE TEST.DSP
                    редактора копией файла <имя>

FE <имя>            Очистить буфер, ввести в буфер   FE NEW
                    текст из файла <имя>, войти в
                    режим редактирования.
                    KE  IE <имя> E

OE <имя>            Скопировать содержимое буфера    OE TEST1
                    редактора в файл <имя>.

O                   Скопировать содержимое буфера    O
                    редактора в текущий (введенный
                    процедурами IE/FE) файл

NE                  Вывести на терминал имя          NE
                    текущего файла редактора            [TEST.DSP]

PF                  Выдать копию содержимого         PF
                    буфера на вход ДССП-процессора

LPE                 Выдать копию содержимого         LPE
                    буфера на принтер

FR                  Выдать на терминал количество    FR
                    байтов свободной памяти в буфере     [  1385]

E                   Войти в режим редактирования     E

                Работа в режиме редактирования

При входе в режим редактирования выдается признак конца текста -
треугольник. При движении курсора вниз печатается 1-ая страница
текста, а при движении курсора вверх - последние строки текста.
Таким  образом  можно просматривать и редактировать текст как
с начала, так и с конца.

Ctrl+E / ESC  выход из режима редактирования

  |
<- ->    сдвинуть курсор в соответствующем направлении
  |

F6     вставить новую строку перед текущей

CTRL F6  удалить текущую строку

CTRL <пробел>  вставить пробел в текущей позиции

DEL      удалить символ в текущей позиции

ENTER    переход на первую позицию следующей строки;
         при отсутствии следующей строки в тексте образуется новая

ТAB      перемещение курсора на позицию, кратную 8

END      движение на конец строки

HOME     движение на начало строки

CTRL J   разделение строки по текущей позиции

CTRL A   присоединение следующей строки к текущей позиции

PgDn     выдать следующий экран текста

PgUp     выдать предыдущий экран текста

         удалить часть строки, начиная с текущей позиции

F9       отметить маркером текущую строку для последующего перемещения,
         копирования или удаления. можно отметить не более 2 строк

CTRL F9  удалить маркеры

CTRL C   копировать участок, отмеченный маркерами, перед текущей строкой

CTRL G   переставить отмеченный маркерами участок перед текущей строкой

CTRL D   удалить отмеченный маркерами текст

СTRL F5  задать образец для контекстного поиска (конец задания - 'ENTER')

F5       продолжить поиск

CTRL F4  начать или закончить определение макроса

F4       выполнить макрос

Ins      переключить режим вставки/замены


                Команды проверки и отладки программ

\L <имя>            Рекомпилировать и выдать на      \L SP
                    экран тело процедуры <имя>;       [: SP   32   TOB   ;]

[i] \P <имя>        Установить точку останова        [1] \P SP []
                    перед i-м словом в теле                 [32]
                    процедуры <имя>. Это слово
                    выдается на экран:
                    i:=Sq; q-;

\+                  Перенести точку останова на      \
                    одно слово вперед и выдать на           [TOB]
                    экран слово, перед которым
                    установлена точка.

\                   Перенести точку останова на      \
                    одно слово вперед, выдать на            [TOB]
                    экран слово, перед которым
                    установлена точка, и выполнить
                    слово, перед которым она
                    находилась;

\\                  Перенести точку останова на      \\
                    два слова вперед, выдать на             [;]
                    экран слово, перед которым
                    установлена точка, и выполнить
                    участок, через который она
                    перенесена;

\\\                 То же, что и \\, но перенос      \\\
                    на три слова;

[n] \T              То же, что и \\\, но перенос     [5] \T []
                    на n слов вперед (n>0):
                    n:=Sq; q-;

[n] \M              Установить кратность точки      [5] \M []
                    останова;

\SE <имя>           Назначить процедуру <имя> в      \SE ..
                    качестве дополнительных дей-
                    ствий при останове;

\C                  Отменить точку останова;         [] \C []

\G                  Продолжить выполнение            [] \G []
                    программы, остановившейся
                    в точке останова или на
                    неопределенном слове;
